1 line
350 KiB
JSON
1 line
350 KiB
JSON
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjMwMyxcInN0cmVuZ3RoXCI6MSxcImRlZmVuc2VcIjoxLFwiZGV4dGVyaXR5XCI6MSxcImFnaWxpdHlcIjoxLFwiY2hhcmlzbWFcIjoxLFwiaW50ZWxsaWdlbmNlXCI6MH0sXCJleHBcIjp7XCJoYWNraW5nXCI6MTg2MTUzOS44NTM5OTA2MzE0LFwic3RyZW5ndGhcIjowLFwiZGVmZW5zZVwiOjAsXCJkZXh0ZXJpdHlcIjowLFwiYWdpbGl0eVwiOjAsXCJjaGFyaXNtYVwiOjAsXCJpbnRlbGxpZ2VuY2VcIjowfSxcIm11bHRzXCI6e1wiaGFja2luZ19jaGFuY2VcIjoxLjE2LFwiaGFja2luZ19zcGVlZFwiOjEuMTYsXCJoYWNraW5nX21vbmV5XCI6MS4xNixcImhhY2tpbmdfZ3Jvd1wiOjEuMTYsXCJoYWNraW5nXCI6MS4xNixcInN0cmVuZ3RoXCI6MS4xNixcImRlZmVuc2VcIjoxLjE2LFwiZGV4dGVyaXR5XCI6MS4xNixcImFnaWxpdHlcIjoxLjE2LFwiY2hhcmlzbWFcIjoxLjE2LFwiaGFja2luZ19leHBcIjoxLjE2LFwic3RyZW5ndGhfZXhwXCI6MS4xNixcImRlZmVuc2VfZXhwXCI6MS4xNixcImRleHRlcml0eV9leHBcIjoxLjE2LFwiYWdpbGl0eV9leHBcIjoxLjE2LFwiY2hhcmlzbWFfZXhwXCI6MS4xNixcImNvbXBhbnlfcmVwXCI6MS4xNixcImZhY3Rpb25fcmVwXCI6MS4xNixcImNyaW1lX21vbmV5XCI6MS4xNixcImNyaW1lX3N1Y2Nlc3NcIjoxLjE2LFwiaGFja25ldF9ub2RlX21vbmV5XCI6MS4xNixcImhhY2tuZXRfbm9kZV9wdXJjaGFzZV9jb3N0XCI6MC44NjIwNjg5NjU1MTcyNDE0LFwiaGFja25ldF9ub2RlX3JhbV9jb3N0XCI6MC44NjIwNjg5NjU1MTcyNDE0LFwiaGFja25ldF9ub2RlX2NvcmVfY29zdFwiOjAuODYyMDY4OTY1NTE3MjQxNCxcImhhY2tuZXRfbm9kZV9sZXZlbF9jb3N0XCI6MC44NjIwNjg5NjU1MTcyNDE0LFwid29ya19tb25leVwiOjEuMTYsXCJibGFkZWJ1cm5lcl9tYXhfc3RhbWluYVwiOjEsXCJibGFkZWJ1cm5lcl9zdGFtaW5hX2dhaW5cIjoxLFwiYmxhZGVidXJuZXJfYW5hbHlzaXNcIjoxLFwiYmxhZGVidXJuZXJfc3VjY2Vzc19jaGFuY2VcIjoxfSxcImF1Z21lbnRhdGlvbnNcIjpbXSxcInF1ZXVlZEF1Z21lbnRhdGlvbnNcIjpbe1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIE5JQyBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ29yZSBEaXJlY3QtTmV1cmFsIEludGVyZmFjZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgS2VybmVsIERpcmVjdC1OZXVyYWwgSW50ZXJmYWNlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDUFUgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENhY2hlIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvdHJhaW5lciBJSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDYXNoUm9vdCBTdGFydGVyIEtpdFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJCaXRXaXJlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZlbFwiOjIsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjozLFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9XSxcImNpdHlcIjpcIlNlY3Rvci0xMlwiLFwiYml0Tm9kZU5cIjoxLFwiY29ycG9yYXRpb25cIjpudWxsLFwiZ2FuZ1wiOm51bGwsXCJibGFkZWJ1cm5lclwiOm51bGwsXCJjdXJyZW50U2VydmVyXCI6XCJob21lXCIsXCJmYWN0aW9uc1wiOltcIk5pdGVTZWNcIixcIlNlY3Rvci0xMlwiLFwiTmV0YnVybmVyc1wiXSxcImZhY3Rpb25JbnZpdGF0aW9uc1wiOltdLFwiaGFja25ldE5vZGVzXCI6W3tcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNSxcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjEwMTMyLjExMzAzNDk1Mjg2NSxcIm9ubGluZVRpbWVTZWNvbmRzXCI6MTE4MDAwLjc5OTk5ODg1ODI5LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6NjkxNDYzMjU0LjMyNjM4NTksXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtMFwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE1LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MTAxMzIuMTEzMDM0OTUyODY1LFwib25saW5lVGltZVNlY29uZHNcIjoxMTE3ODcuNTk5OTk4OTQ4NyxcInJhbVwiOjY0LFwidG90YWxNb25leUdlbmVyYXRlZFwiOjY5MDIyMzAzNy41NTkyNzk3LFwibmFtZVwiOlwiaGFja25ldC1ub2RlLTFcIn19LHtcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNSxcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjEwMTMyLjExMzAzNDk1Mjg2NSxcIm9ubGluZVRpbWVTZWNvbmRzXCI6MTExNzg2LjM5OTk5ODk0ODcyLFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6Njg5MjY1NDM3LjcyMDUwMDEsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtMlwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE1LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MTAxMzIuMTEzMDM0OTUyODY1LFwib25saW5lVGltZVNlY29uZHNcIjoxMTE3ODUuMzk5OTk4OTQ4NzMsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjo2Nzk3Mjg1MzMuNzAyNDM0MyxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0zXCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTUsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjoxMDEzMi4xMTMwMzQ5NTI4NjUsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjExMTc4NC4zOTk5OTg5NDg3NSxcInJhbVwiOjY0LFwidG90YWxNb25leUdlbmVyYXRlZFwiOjY3ODc2OTQ3Mi4wMjAwNzkzLFwibmFtZVwiOlwiaGFja25ldC1ub2RlLTRcIn19LHtcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNSxcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjEwMTMyLjExMzAzNDk1Mjg2NSxcIm9ubGluZVRpbWVTZWNvbmRzXCI6MTExNzgzLjM5OTk5ODk0ODc2LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6Njc3NzgzMTg2LjU4MDEzMjUsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtNVwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE1LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MTAxMzIuMTEzMDM0OTUyODY1LFwib25saW5lVGltZVNlY29uZHNcIjoxMTE3ODIuMzk5OTk4OTQ4NzgsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjo2NzY5NzI1NDQuNDYxMTUyNCxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS02XCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTUsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjoxMDEzMi4xMTMwMzQ5NTI4NjUsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjExMTc4MS4zOTk5OTg5NDg4LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6Njc2MTM5OTUyLjI0NTc0MzksXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtN1wifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE1LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MTAxMzIuMTEzMDM0OTUyODY1LFwib25saW5lVGltZVNlY29uZHNcIjoxMTE3ODAuMzk5OTk4OTQ4ODEsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjo2NzQ4OTIyODMuNzk2MTkyNSxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS04XCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTUsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjoxMDEzMi4xMTMwMzQ5NTI4NjUsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjEwMDU2Mi45OTk5OTkxMDkxLFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6NjcxOTEwNDY1Ljg1MDM1OTMsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtOVwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE1LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MTAxMzIuMTEzMDM0OTUyODY1LFwib25saW5lVGltZVNlY29uZHNcIjo5ODgzOC4xOTk5OTkxMzQyLFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6NjcwNzMyNDQ4LjYxMTA4NyxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0xMFwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE1LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MTAxMzIuMTEzMDM0OTUyODY1LFwib25saW5lVGltZVNlY29uZHNcIjo5MjkxOC4xOTk5OTkyMjE1NixcInJhbVwiOjY0LFwidG90YWxNb25leUdlbmVyYXRlZFwiOjY2ODA1NDc1MC4yOTQ3NTA3LFwibmFtZVwiOlwiaGFja25ldC1ub2RlLTExXCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTUsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjoxMDEzMi4xMTMwMzQ5NTI4NjUsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjg2MDAzLjk5OTk5OTMyMTk0LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6NjYzNzk4Mjk3LjgxMTk0MDYsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtMTJcIn19LHtcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNSxcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjEwMTMyLjExMzAzNDk1Mjg2NSxcIm9ubGluZVRpbWVTZWNvbmRzXCI6ODYwMDIuOTk5OTk5MzIxOTUsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjo2NjMyMjg2OTMuNTEzMTcxMSxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0xM1wifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE0LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6OTYyNS41MDczODMyMDUyMjIsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjY5Njc2Ljc5OTk5OTU0MzgzLFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6NjI5NTA5MjU1LjkzMDkzNCxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0xNFwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE0LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6OTYyNS41MDczODMyMDUyMjIsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjY3NDM2Ljc5OTk5OTU3NjQxLFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6NjIyMzUwMTM4LjA3NzM3OTcsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtMTVcIn19LHtcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNCxcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjk2MjUuNTA3MzgzMjA1MjIyLFwib25saW5lVGltZVNlY29uZHNcIjo2NTI3MC43OTk5OTk2MDc5MyxcInJhbVwiOjY0LFwidG90YWxNb25leUdlbmVyYXRlZFwiOjYwODA0MTAxMy4yOTI5MzEzLFwibmFtZVwiOlwiaGFja25ldC1ub2RlLTE2XCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTQsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjo5NjI1LjUwNzM4MzIwNTIyMixcIm9ubGluZVRpbWVTZWNvbmRzXCI6NjE1OTUuNTk5OTk5NjYxNDEsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjo1ODAzNTkxODcuODQxOTE4NyxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0xN1wifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE0LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6OTYyNS41MDczODMyMDUyMjIsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjU4MDM1LjM5OTk5OTcxMzIyLFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6NTUxMDg0OTUwLjg3MjE1NDIsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtMThcIn19LHtcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNCxcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjk2MjUuNTA3MzgzMjA1MjIyLFwib25saW5lVGltZVNlY29uZHNcIjo0ODc0MC43OTk5OTk4NTIyMSxcInJhbVwiOjY0LFwidG90YWxNb25leUdlbmVyYXRlZFwiOjQ2NzgwMjY0Ni41MDg4OTk0LFwibmFtZVwiOlwiaGFja25ldC1ub2RlLTE5XCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTQsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjo5NjI1LjUwNzM4MzIwNTIyMixcIm9ubGluZVRpbWVTZWNvbmRzXCI6NDAwNjQuMTk5OTk5OTc3OTcsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjozODQ1MDQ4NjIuMzAzMzQ3OCxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0yMFwifX1dLFwiaGFzNFNEYXRhXCI6ZmFsc2UsXCJoYXM0U0RhdGFUaXhBcGlcIjpmYWxzZSxcImhhc2hNYW5hZ2VyXCI6e1wiY3RvclwiOlwiSGFzaE1hbmFnZXJcIixcImRhdGFcIjp7XCJjYXBhY2l0eVwiOjAsXCJoYXNoZXNcIjowLFwidXBncmFkZXNcIjp7XCJTZWxsIGZvciBNb25leVwiOjAsXCJTZWxsIGZvciBDb3Jwb3JhdGlvbiBGdW5kc1wiOjAsXCJSZWR1Y2UgTWluaW11bSBTZWN1cml0eVwiOjAsXCJJbmNyZWFzZSBNYXhpbXVtIE1vbmV5XCI6MCxcIkltcHJvdmUgU3R1ZHlpbmdcIjowLFwiSW1wcm92ZSBHeW0gVHJhaW5pbmdcIjowLFwiRXhjaGFuZ2UgZm9yIENvcnBvcmF0aW9uIFJlc2VhcmNoXCI6MCxcIkV4Y2hhbmdlIGZvciBCbGFkZWJ1cm5lciBSYW5rXCI6MCxcIkV4Y2hhbmdlIGZvciBCbGFkZWJ1cm5lciBTUFwiOjAsXCJHZW5lcmF0ZSBDb2RpbmcgQ29udHJhY3RcIjowLFwiQ29tcGFueSBGYXZvclwiOjB9fX0sXCJoYXNUaXhBcGlBY2Nlc3NcIjpmYWxzZSxcImhhc1dzZUFjY291bnRcIjpmYWxzZSxcImpvYnNcIjp7fSxcImthcm1hXCI6MCxcIm51bVBlb3BsZUtpbGxlZFwiOjAsXCJsb2NhdGlvblwiOlwiQWxwaGEgRW50ZXJwcmlzZXNcIixcIm1vbmV5XCI6MjY5MDYzMS40MTkxOTU5MzMzLFwibW9uZXlTb3VyY2VBXCI6e1wiY3RvclwiOlwiTW9uZXlTb3VyY2VUcmFja2VyXCIsXCJkYXRhXCI6e1wiYmxhZGVidXJuZXJcIjowLFwiY2FzaW5vXCI6MCxcImNsYXNzXCI6LTE2MDUwMDk2LFwiY29kaW5nY29udHJhY3RcIjowLFwiY29ycG9yYXRpb25cIjowLFwiY3JpbWVcIjowLFwiZ2FuZ1wiOjAsXCJoYWNraW5nXCI6MTE4NTM4MTc0OS4xNDY1OTI2LFwiaGFja25ldFwiOjEzMzE2NjE0NDE0LjY1MTcyOCxcImhhY2tuZXRfZXhwZW5zZXNcIjotNTEzODMwOTg1MS45NjU5MjcsXCJob3NwaXRhbGl6YXRpb25cIjowLFwiaW5maWx0cmF0aW9uXCI6MCxcInNsZWV2ZXNcIjowLFwic3RvY2tcIjowLFwidG90YWxcIjoyNjg5NTE4LjQxOTE5NTkzMzMsXCJ3b3JrXCI6MCxcInNlcnZlcnNcIjotNDQwMDAwMDAsXCJvdGhlclwiOi0xMjAwMDAwLFwiYXVnbWVudGF0aW9uc1wiOi05Mjk5NzQ2Njk2LjU1NjQwNn19LFwibW9uZXlTb3VyY2VCXCI6e1wiY3RvclwiOlwiTW9uZXlTb3VyY2VUcmFja2VyXCIsXCJkYXRhXCI6e1wiYmxhZGVidXJuZXJcIjowLFwiY2FzaW5vXCI6MCxcImNsYXNzXCI6LTE2MDUwMDk2LFwiY29kaW5nY29udHJhY3RcIjowLFwiY29ycG9yYXRpb25cIjowLFwiY3JpbWVcIjowLFwiZ2FuZ1wiOjAsXCJoYWNraW5nXCI6MTE4NTM4MTc0OS4xNDY1OTI2LFwiaGFja25ldFwiOjEzMzE2NjE0NDE0LjY1MTcyOCxcImhhY2tuZXRfZXhwZW5zZXNcIjotNTEzODMwOTg1MS45NjU5MjcsXCJob3NwaXRhbGl6YXRpb25cIjowLFwiaW5maWx0cmF0aW9uXCI6MCxcInNsZWV2ZXNcIjowLFwic3RvY2tcIjowLFwidG90YWxcIjoyNjg5NTE4LjQxOTE5NTkzMzMsXCJ3b3JrXCI6MCxcInNlcnZlcnNcIjotNDQwMDAwMDAsXCJvdGhlclwiOi0xMjAwMDAwLFwiYXVnbWVudGF0aW9uc1wiOi05Mjk5NzQ2Njk2LjU1NjQwNn19LFwicGxheXRpbWVTaW5jZUxhc3RBdWdcIjoxMTgxOTU0MDAsXCJwbGF5dGltZVNpbmNlTGFzdEJpdG5vZGVcIjoxMTgxOTU0MDAsXCJsYXN0QXVnUmVzZXRcIjoxNjkzMjY1NzgzOTI5LFwibGFzdE5vZGVSZXNldFwiOjE2OTMyNjU3ODM5MjksXCJwdXJjaGFzZWRTZXJ2ZXJzXCI6W1wiaG9tZS0wXCIsXCJob21lLTFcIixcImhvbWUtMlwiLFwiaG9tZS0zXCIsXCJob21lLTRcIixcImhvbWUtNVwiLFwiaG9tZS02XCIsXCJob21lLTdcIixcImhvbWUtOFwiLFwiaG9tZS05XCIsXCJob21lLTEwXCIsXCJob21lLTExXCIsXCJob21lLTEyXCIsXCJob21lLTEzXCIsXCJob21lLTE0XCIsXCJob21lLTE1XCIsXCJob21lLTE2XCIsXCJob21lLTE3XCIsXCJob21lLTE4XCIsXCJob21lLTE5XCIsXCJob21lLTIwXCIsXCJob21lLTIxXCIsXCJob21lLTIyXCIsXCJob21lLTIzXCIsXCJob21lLTI0XCJdLFwic2NyaXB0UHJvZFNpbmNlTGFzdEF1Z1wiOjExNzQyOTU0NDQuNjUyNDUzLFwic2xlZXZlc1wiOltdLFwic2xlZXZlc0Zyb21Db3ZlbmFudFwiOjAsXCJzb3VyY2VGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbWzEsMV1dfSxcImV4cGxvaXRzXCI6W10sXCJhY2hpZXZlbWVudHNcIjpbe1wiSURcIjpcIk5TMlwiLFwidW5sb2NrZWRPblwiOjE2NjI1OTU4OTU0NzF9LHtcIklEXCI6XCJGSVJTVF9IQUNLTkVUX05PREVcIixcInVubG9ja2VkT25cIjoxNjYyNTk2MDE1NDc3fSx7XCJJRFwiOlwiRlJPWkVcIixcInVubG9ja2VkT25cIjoxNjYyNjA2MjI5MDI2fSx7XCJJRFwiOlwiQlJVVEVTU0guRVhFXCIsXCJ1bmxvY2tlZE9uXCI6MTY2MjYwODQ0OTAyNn0se1wiSURcIjpcIkZUUENSQUNLLkVYRVwiLFwidW5sb2NrZWRPblwiOjE2NjI2MzI1MzkyMTJ9LHtcIklEXCI6XCJDWUJFUlNFQ1wiLFwidW5sb2NrZWRPblwiOjE2NjI2NTQ1MjI4NzV9LHtcIklEXCI6XCJXT1JLT1VUXCIsXCJ1bmxvY2tlZE9uXCI6MTY2MjY1NDc2Mjg3N30se1wiSURcIjpcIkhBQ0tORVRfTk9ERV8xME1cIixcInVubG9ja2VkT25cIjoxNjYyNjk5NzEzMjkwfSx7XCJJRFwiOlwiSU5TVEFMTF8xXCIsXCJ1bmxvY2tlZE9uXCI6MTY2MjczNjY3MzI3N30se1wiSURcIjpcIk5JVEVTRUNcIixcInVubG9ja2VkT25cIjoxNjYyODIwNzU5ODczfSx7XCJJRFwiOlwiVE9SXCIsXCJ1bmxvY2tlZE9uXCI6MTY2MjgyNzM5Nzc4NX0se1wiSURcIjpcIkhPU1BJVEFMSVpFRFwiLFwidW5sb2NrZWRPblwiOjE2NjI4MzIxNDA3ODZ9LHtcIklEXCI6XCJSRUxBWVNNVFAuRVhFXCIsXCJ1bmxvY2tlZE9uXCI6MTY2Mjg0NTg4MDc4N30se1wiSURcIjpcIkhUVFBXT1JNLkVYRVwiLFwidW5sb2NrZWRPblwiOjE2NjI4NDU4ODA3ODl9LHtcIklEXCI6XCJUUkFWRUxcIixcInVubG9ja2VkT25cIjoxNjYyODYyNjIxNTgwfSx7XCJJRFwiOlwiTUFYX0hBQ0tORVRfTk9ERVwiLFwidW5sb2NrZWRPblwiOjE2NjI5NDk0NTE3Nzl9LHtcIklEXCI6XCJTUUxJTkpFQ1QuRVhFXCIsXCJ1bmxvY2tlZE9uXCI6MTY2Mjk0OTY5MTc4NH0se1wiSURcIjpcIlRIRV9CTEFDS19IQU5EXCIsXCJ1bmxvY2tlZE9uXCI6MTY2Mjk2NTg5Mjk4Nn0se1wiSURcIjpcIkZPUk1VTEFTLkVYRVwiLFwidW5sb2NrZWRPblwiOjE2NjMwNTM3MDczOTJ9LHtcIklEXCI6XCJCSVRSVU5ORVJTXCIsXCJ1bmxvY2tlZE9uXCI6MTY2MzIyNjMxNzA0Mn0se1wiSURcIjpcIkRPTkFUSU9OXCIsXCJ1bmxvY2tlZE9uXCI6MTY2MzQ1MzQzMzI2OX0se1wiSURcIjpcIkRSQUlOX1NFUlZFUlwiLFwidW5sb2NrZWRPblwiOjE2NjM0NTk0MzMyOTl9LHtcIklEXCI6XCJSRVBVVEFUSU9OXzEwTVwiLFwidW5sb2NrZWRPblwiOjE2NjQxOTQzMzAzOTZ9LHtcIklEXCI6XCJEQUVEQUxVU1wiLFwidW5sb2NrZWRPblwiOjE2NjQxOTQ1MTA0ODh9LHtcIklEXCI6XCJTRjEuMVwiLFwidW5sb2NrZWRPblwiOjE2OTMyNjU4MzQ0NzR9XSxcInRlcm1pbmFsQ29tbWFuZEhpc3RvcnlcIjpbXCJjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCBhdm1uaXRlLTAyaDsgY29ubmVjdCByb3RobWFuLXVuaTsgY29ubmVjdCBhbHBoYS1lbnQ7IGNvbm5lY3QgZ2xvYmFsLXBoYXJtOyBydW4gQnJ1dGVTU0guZXhlOyBydW4gRlRQQ3JhY2suZXhlOyBydW4gcmVsYXlTTVRQLmV4ZTsgcnVuIEhUVFBXb3JtLmV4ZTsgcnVuIFNRTEluamVjdC5leGU7IHJ1biBOVUtFLmV4ZTsgYmFja2Rvb3JcIixcImNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFscGhhLWVudDsgY29ubmVjdCBnbG9iYWwtcGhhcm07IGNvbm5lY3Qgb21uaWE7IHJ1biBCcnV0ZVNTSC5leGU7IHJ1biBGVFBDcmFjay5leGU7IHJ1biByZWxheVNNVFAuZXhlOyBydW4gSFRUUFdvcm0uZXhlOyBydW4gU1FMSW5qZWN0LmV4ZTsgcnVuIE5VS0UuZXhlOyBiYWNrZG9vclwiLFwiY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWxwaGEtZW50OyBjb25uZWN0IGdsb2JhbC1waGFybTsgY29ubmVjdCBvbW5pYTsgY29ubmVjdCB1bml2LWVuZXJneTsgcnVuIEJydXRlU1NILmV4ZTsgcnVuIEZUUENyYWNrLmV4ZTsgcnVuIHJlbGF5U01UUC5leGU7IHJ1biBIVFRQV29ybS5leGU7IHJ1biBTUUxJbmplY3QuZXhlOyBydW4gTlVLRS5leGU7IGJhY2tkb29yXCIsXCJjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCBhdm1uaXRlLTAyaDsgY29ubmVjdCByb3RobWFuLXVuaTsgY29ubmVjdCBhbHBoYS1lbnQ7IGNvbm5lY3QgZ2xvYmFsLXBoYXJtOyBjb25uZWN0IG9tbmlhOyBjb25uZWN0IHVuaXYtZW5lcmd5OyBjb25uZWN0IGluZm9jb21tOyBydW4gQnJ1dGVTU0guZXhlOyBydW4gRlRQQ3JhY2suZXhlOyBydW4gcmVsYXlTTVRQLmV4ZTsgcnVuIEhUVFBXb3JtLmV4ZTsgcnVuIFNRTEluamVjdC5leGU7IHJ1biBOVUtFLmV4ZTsgYmFja2Rvb3JcIixcImNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFscGhhLWVudDsgY29ubmVjdCBnbG9iYWwtcGhhcm07IGNvbm5lY3Qgb21uaWE7IGNvbm5lY3QgdW5pdi1lbmVyZ3k7IGNvbm5lY3QgdGFpeWFuZy1kaWdpdGFsOyBydW4gQnJ1dGVTU0guZXhlOyBydW4gRlRQQ3JhY2suZXhlOyBydW4gcmVsYXlTTVRQLmV4ZTsgcnVuIEhUVFBXb3JtLmV4ZTsgcnVuIFNRTEluamVjdC5leGU7IHJ1biBOVUtFLmV4ZTsgYmFja2Rvb3JcIixcImNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFscGhhLWVudDsgY29ubmVjdCBnbG9iYWwtcGhhcm07IGNvbm5lY3Qgb21uaWE7IGNvbm5lY3QgdW5pdi1lbmVyZ3k7IGNvbm5lY3QgdGFpeWFuZy1kaWdpdGFsOyBjb25uZWN0IG1pY3JvZHluZTsgcnVuIEJydXRlU1NILmV4ZTsgcnVuIEZUUENyYWNrLmV4ZTsgcnVuIHJlbGF5U01UUC5leGU7IHJ1biBIVFRQV29ybS5leGU7IHJ1biBTUUxJbmplY3QuZXhlOyBydW4gTlVLRS5leGU7IGJhY2tkb29yXCIsXCJob21lXCIsXCJjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCBhdm1uaXRlLTAyaDsgY29ubmVjdCByb3RobWFuLXVuaTsgY29ubmVjdCBhbHBoYS1lbnQ7IGNvbm5lY3QgZ2xvYmFsLXBoYXJtOyBjb25uZWN0IG9tbmlhOyBjb25uZWN0IHVuaXYtZW5lcmd5OyBjb25uZWN0IHRhaXlhbmctZGlnaXRhbDsgY29ubmVjdCBydW40dGhlaDExMXo7IHJ1biBCcnV0ZVNTSC5leGU7IHJ1biBGVFBDcmFjay5leGU7IHJ1biByZWxheVNNVFAuZXhlOyBydW4gSFRUUFdvcm0uZXhlOyBydW4gU1FMSW5qZWN0LmV4ZTsgcnVuIE5VS0UuZXhlOyBiYWNrZG9vclwiLFwiaG9tZVwiLFwiLi9hdXRvLW51a2UuanMgXCIsXCIuL2hhY2tuZXQtYm90LmpzIFwiLFwiLi9zdGFydC1ncm93LWhlbHBlcnMuanMgXCIsXCJsc1wiLFwiLi9iMXRfZmx1bTMuZXhlIFwiLFwiLi9zY2FuLW5ldHdvcmsuanMgXCIsXCJsc1wiLFwibmFubyBzY2FuLnR4dFwiLFwiLi9zY2FuLW5ldHdvcmsuanMgXCIsXCJjb25uZWN0IGRhcmt3ZWI7IFwiLFwiaGVscFwiLFwiYnV5IC1sXCIsXCJkYXJrd2ViIGJ1eSBTZXJ2ZXJQcm9maWxlci5leGVcIixcImJ1eSBTZXJ2ZXJQcm9maWxlci5leGVcIixcImJ1eSBEZWVwc2NhblYxLmV4ZVwiLFwiYnV5ICAtbFwiLFwiaG9tZVwiLFwiLi9zY2FuLW5ldHdvcmsuanMgXCIsXCJuYW5vIHNjYW4udHh0XCIsXCJjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCB0aGUtaHViO1wiLFwiYW5hbHl6ZVwiLFwiaG9tZVwiLFwiLi9hdXRvLW51a2UuanMgXCIsXCIuL3Rlc3QuanMgXCIsXCJuYW5vIElORk8udHh0XCIsXCIuL2F1dG8tbnVrZVwiLFwiLi9hdXRvLW51a2UuanMgXCIsXCIuL2hhY2tuZXQtYm90LmpzIFwiLFwiaGVscFwiLFwiYWxpYXMgLWcgc3RhcnRBbGw9XFxcImhvbWU7IC4vYXV0by1udWtlLmpzOyAuL3N0YXJ0LWdyb3ctaGVscGVycy5qczsgLi9oYWNrbmV0LWJvdC5qcztcXFwiXCIsXCJhbGlhcyAtZyBraWxsQWxsPVxcXCJob21lOyAuL2tpbGwtYWxsLXNpbXBsZS1oYWNrLmpzOyAuL2tpbGwtYWxsLWdyb3ctaGVwbGVycy5qczsgLi9raWxsLWhhY2tuZXQuanM7IC4va2lsbC1udWtlLmpzO1xcXCJcIixcImtpbGxBbGxcIixcInN0YXJ0QWxsXCIsXCIuL3N0YXJ0LWdyb3ctaGVscGVycy5qcyBcIixcImNhdCAuL3N0YXJ0LWdyb3ctaGVscGVycy5qcyBcIixcIi4vc3RhcnQtZ3Jvdy1oZWxwZXJzLmpzIFwiLFwia2lsbEFsbFwiLFwiYWxpYXNcIixcImFsaWFzIC1nIGtpbGxBbGw9aG9tZTsgLi9raWxsLWFsbC1zaW1wbGUtaGFjay5qczsgLi9raWxsLWFsbC1ncm93LWhlbHBlcnMuanM7IC4va2lsbC1oYWNrbmV0LmpzOyAuL2tpbGwtbnVrZS5qcztcIixcImFsaWFzXCIsXCJhbGlhcyAtZyBraWxsQWxsPVxcXCJob21lOyAuL2tpbGwtYWxsLXNpbXBsZS1oYWNrLmpzOyAuL2tpbGwtYWxsLWdyb3ctaGVscGVycy5qczsgLi9raWxsLWhhY2tuZXQuanM7IC4va2lsbC1udWtlLmpzO1xcXCJcIl0sXCJsYXN0VXBkYXRlXCI6MTY5MzM4Mzk3OTgyMCxcImxhc3RTYXZlXCI6MTY5MzM4Mzk0NTYyNCxcInRvdGFsUGxheXRpbWVcIjozMDc4ODgxMzQwMCxcImN1cnJlbnRXb3JrXCI6e1wiY3RvclwiOlwiRmFjdGlvbldvcmtcIixcImRhdGFcIjp7XCJ0eXBlXCI6XCJGQUNUSU9OXCIsXCJzaW5ndWxhcml0eVwiOmZhbHNlLFwiY3ljbGVzV29ya2VkXCI6MjAzNjUwLFwiZmFjdGlvbldvcmtUeXBlXCI6XCJoYWNraW5nXCIsXCJmYWN0aW9uTmFtZVwiOlwiU2VjdG9yLTEyXCJ9fSxcImZvY3VzXCI6ZmFsc2UsXCJlbnRyb3B5XCI6MCxcImlkZW50aWZpZXJcIjpcIjM4YWFkYmRiNjIxNlwifX0iLCJBbGxTZXJ2ZXJzU2F2ZSI6IntcImhvbWVcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJob21lXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI3NS44LjAuMFwiLFwiaXNDb25uZWN0ZWRUb1wiOnRydWUsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W1wiaGFja2Vycy1zdGFydGluZy1oYW5kYm9vay5saXRcIixcImowLm1zZ1wiLFwiajEubXNnXCIsXCJjc2VjLXRlc3QubXNnXCIsXCJqMi5tc2dcIixcIm5pdGVzZWMtdGVzdC5tc2dcIl0sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJIb21lIFBDXCIsXCJwcm9ncmFtc1wiOltcIk5VS0UuZXhlXCIsXCJiMXRfZmx1bTMuZXhlXCIsXCJmbDFnaHQuZXhlXCIsXCJCcnV0ZVNTSC5leGVcIixcIkZUUENyYWNrLmV4ZVwiLFwicmVsYXlTTVRQLmV4ZVwiLFwiQXV0b0xpbmsuZXhlXCIsXCJTZXJ2ZXJQcm9maWxlci5leGVcIixcIkRlZXBzY2FuVjEuZXhlXCJdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wic2ltcGxlLWhhY2suanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG5cXHRucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG5cXHRhc3luYyBmdW5jdGlvbiB3cml0ZUxvZyh0eXBlLCBvYmopIHtcXG5cXHRcXHRsZXQgdGltZU5vdyA9IG5ldyBEYXRlKCk7XFxuXFx0XFx0bGV0IHllYXIgPSB0aW1lTm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMik7XFxuXFx0XFx0bGV0IG1vbnRoID0gKHRpbWVOb3cuZ2V0TW9udGgoKSA8IDkgPyAnMCcgOiAnJykgKyAodGltZU5vdy5nZXRNb250aCgpICsgMSk7XFxuXFx0XFx0bGV0IGRheSA9ICh0aW1lTm93LmdldERhdGUoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXREYXRlKCk7XFxuXFx0XFx0bGV0IGhvdXIgPSAodGltZU5vdy5nZXRIb3VycygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldEhvdXJzKCk7XFxuXFx0XFx0bGV0IG1pbnV0ZSA9ICh0aW1lTm93LmdldE1pbnV0ZXMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRNaW51dGVzKCk7XFxuXFx0XFx0bGV0IHNlY29uZCA9ICh0aW1lTm93LmdldFNlY29uZHMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRTZWNvbmRzKCk7XFxuXFx0XFx0bGV0IHRpbWVzdGFtcCA9IGAke3llYXJ9JHttb250aH0ke2RheX1fJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XFxuXFx0XFx0YXdhaXQgbnMudHJ5V3JpdGVQb3J0KDEsIGB0JHt0aW1lc3RhbXB9XyR7dHlwZX0gPSAke29ian07XFxcXG5gKTtcXG5cXG5cXHRcXHRpZiAoWydFUlJPUicsICdURVJNSU5BTCddLmluZGV4T2YodHlwZSkgIT0gLTEpIG5zLnRwcmludChgJHt0aW1lc3RhbXB9ICR7dHlwZX0gPSAke29ian1gKTtcXG5cXHR9XFxuXFxuXFx0bGV0IHNlcnZlciA9IG5zLmFyZ3NbMF07XFxuXFx0bGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkoc2VydmVyKTtcXG5cXHRsZXQgbWluU2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJNaW5TZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0bGV0IGxvb3AgPSAwO1xcblxcdGxldCBwcmV2aW91c01vbmV5ID0gMDtcXG5cXG5cXHR3aGlsZSAobWF4TW9uZXkgIT0gMCkge1xcblxcdFxcdGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdGxldCBjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFxuXFx0XFx0bGV0IGhhY2tlZE1vbmV5ID0gMDtcXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5ID4gMC4xICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHRoYWNrZWRNb25leSA9IGF3YWl0IG5zLmhhY2soc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5IDwgMC45ICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHR3aGlsZSAoY3VycmVudE1vbmV5IDw9IHByZXZpb3VzTW9uZXkpIHtcXG5cXHRcXHRcXHRcXHRhd2FpdCBucy5ncm93KHNlcnZlcik7XFxuXFx0XFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdFxcdHByZXZpb3VzTW9uZXkgPSBjdXJyZW50TW9uZXk7XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRTZWN1cml0eSA+IDIgKiBtaW5TZWN1cml0eSkge1xcblxcdFxcdFxcdGF3YWl0IG5zLndlYWtlbihzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0bnMucHJpbnQoYHtsb29wOiAkeysrbG9vcH0sIGhhY2s6ICR7TWF0aC5mbG9vcihoYWNrZWRNb25leSl9LCBtb25leTogJHtNYXRoLmZsb29yKGN1cnJlbnRNb25leSl9IC8gJHtNYXRoLmZsb29yKG1heE1vbmV5KX0gPT0gJHsoKGN1cnJlbnRNb25leSAvIG1heE1vbmV5KSAqIDEwMCkudG9GaXhlZCgyKX0sIHNlY3VyaXR5OiAke2N1cnJlbnRTZWN1cml0eS50b0ZpeGVkKDIpfSAvICR7TWF0aC5mbG9vcihtaW5TZWN1cml0eSl9ID09ICR7KChjdXJyZW50U2VjdXJpdHkgLyBtaW5TZWN1cml0eSkgKiAxMDApLnRvRml4ZWQoNCl9fWApO1xcblxcdFxcdGF3YWl0IG5zLnNsZWVwKDUwKTtcXG5cXHR9XFxufVwiLFwiZmlsZW5hbWVcIjpcInNpbXBsZS1oYWNrLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWVcIn19XSxbXCJydW4tc2ltcGxlLWhhY2suanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIGxldCBob3N0ID0gbnMuYXJnc1swXTtcXG4gICAgbGV0IHJlbW90ZSA9IG5zLmFyZ3NbMV07XFxuICAgIGxldCBzY3JpcHQgPSAnc2ltcGxlLWhhY2suanMnO1xcblxcbiAgICBpZiAoIW5zLnNlcnZlckV4aXN0cyhob3N0KSkge1xcbiAgICAgICAgbnMucHJpbnQoYEhvc3QgJyR7aG9zdH0nJyBkb2Vzbid0IGV4aXN0IWApO1xcbiAgICAgICAgcmV0dXJuIDE7XFxuICAgIH1cXG5cXG4gICAgaWYgKCFucy5zZXJ2ZXJFeGlzdHMocmVtb3RlKSkge1xcbiAgICAgICAgbnMucHJpbnQoYFJlbW90ZSAnJHtyZW1vdGV9JycgZG9lc24ndCBleGlzdCFgKTtcXG4gICAgICAgIHJldHVybiAyO1xcbiAgICB9XFxuXFxuICAgIGlmICghbnMuZmlsZUV4aXN0cyhzY3JpcHQsIGhvc3QpKSB7XFxuICAgICAgICBpZiAoIW5zLmZpbGVFeGlzdHMoc2NyaXB0LCAnaG9tZScpKSB7XFxuICAgICAgICAgICAgbnMucHJpbnQoYFNjcmlwdCAnJHtzY3JpcHR9JyBkb2Vzbid0IGV4aXN0IWApO1xcbiAgICAgICAgICAgIHJldHVybiAzO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgbnMuc2NwKHNjcmlwdCwgaG9zdCwgJ2hvbWUnKTtcXG4gICAgfVxcblxcbiAgICBsZXQgc2VydmVyTWF4UmFtID0gbnMuZ2V0U2VydmVyTWF4UmFtKGhvc3QpO1xcbiAgICBsZXQgc2VydmVyVXNlZFJhbSA9IG5zLmdldFNlcnZlclVzZWRSYW0oaG9zdCk7XFxuICAgIGxldCBzZXJ2ZXJGcmVlUmFtID0gc2VydmVyTWF4UmFtIC0gc2VydmVyVXNlZFJhbTtcXG4gICAgbGV0IHNjcmlwdFJhbSA9IG5zLmdldFNjcmlwdFJhbShzY3JpcHQsIGhvc3QpO1xcbiAgICBsZXQgbWF4VGhyZWFkcyA9IE1hdGguZmxvb3Ioc2VydmVyRnJlZVJhbSAvIHNjcmlwdFJhbSk7XFxuICAgIGlmKG1heFRocmVhZHMgPT0gMClcXG4gICAge1xcbiAgICAgICAgbnMucHJpbnQoYE5vdCBlbm91Z2ggcmFtIHRvIHJ1biAnJHtzY3JpcHR9JywgJHtzY3JpcHRSYW19LyR7c2VydmVyRnJlZVJhbX0hYClcXG4gICAgfVxcblxcbiAgICBucy5zY3JpcHRLaWxsKHNjcmlwdCwgaG9zdCk7XFxuXFxuICAgIGlmICghbnMuZXhlYyhzY3JpcHQsIGhvc3QsIG1heFRocmVhZHMsIHJlbW90ZSkpIHtcXG4gICAgICAgIG5zLnRwcmludChgRXhlYyBlcnJvciBydW5uaW5nIHNjcmlwdCAnJHtzY3JpcHR9IG9uICcke2hvc3R9IWApO1xcbiAgICB9XFxuXFxuICAgIFxcbn1cXG5cIixcImZpbGVuYW1lXCI6XCJydW4tc2ltcGxlLWhhY2suanNcIixcInNlcnZlclwiOlwiaG9tZVwifX1dLFtcImF1dG8tbnVrZS5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5pbXBvcnQgeyBFWENMVURFX1NFUlZFUlMgfSBmcm9tIFxcXCIuL2NvbnN0YW50cy5qc1xcXCI7XFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlTG9nKHR5cGUsIG9iaikge1xcbiAgICAgICAgbGV0IHRpbWVOb3cgPSBuZXcgRGF0ZSgpO1xcbiAgICAgICAgbGV0IHllYXIgPSB0aW1lTm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMik7XFxuICAgICAgICBsZXQgbW9udGggPSAodGltZU5vdy5nZXRNb250aCgpIDwgOSA/ICcwJyA6ICcnKSArICh0aW1lTm93LmdldE1vbnRoKCkgKyAxKTtcXG4gICAgICAgIGxldCBkYXkgPSAodGltZU5vdy5nZXREYXRlKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0RGF0ZSgpO1xcbiAgICAgICAgbGV0IGhvdXIgPSAodGltZU5vdy5nZXRIb3VycygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldEhvdXJzKCk7XFxuICAgICAgICBsZXQgbWludXRlID0gKHRpbWVOb3cuZ2V0TWludXRlcygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldE1pbnV0ZXMoKTtcXG4gICAgICAgIGxldCBzZWNvbmQgPSAodGltZU5vdy5nZXRTZWNvbmRzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0U2Vjb25kcygpO1xcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IGAke3llYXJ9JHttb250aH0ke2RheX1fJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XFxuICAgICAgICBhd2FpdCBucy50cnlXcml0ZVBvcnQoMiwgYHQke3RpbWVzdGFtcH1fJHt0eXBlfSA9ICR7b2JqfTtcXFxcbmApO1xcblxcbiAgICAgICAgaWYgKFsnRVJST1InLCAnVEVSTUlOQUwnXS5pbmRleE9mKHR5cGUpICE9IC0xKSBucy50cHJpbnQoYCR7dGltZXN0YW1wfSAke3R5cGV9ID0gJHtvYmp9YCk7XFxuICAgIH1cXG5cXG4gICAgLyoqXFxuICAgICAqIEBjb25zdGFudFxcbiAgICAgKiBAZGVmYXVsdFxcbiAgICAgKi9cXG4gICAgY29uc3QgRVhQTE9JVFMgPSBbXFxuICAgICAgICAnQnJ1dGVTU0guZXhlJyxcXG4gICAgICAgICdGVFBDcmFjay5leGUnLFxcbiAgICAgICAgJ3JlbGF5U01UUC5leGUnLFxcbiAgICAgICAgJ0hUVFBXb3JtLmV4ZScsXFxuICAgICAgICAnU1FMSW5qZWN0LmV4ZSdcXG4gICAgXTtcXG5cXG4gICAgLyoqIEBmdW5jdGlvbiBtYXhQb3J0c1RvSGFja1xcbiAgICAgKiBDYWxjdWxhdGUgaG93IG1hbnkgcG9ydHMgeW91J3JlIGFibGUgdG8gb3BlblxcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBudW1iZXIgb2YgcG9ydHMgeW91J3JlIGFibGUgdG8gb3BlblxcbiAgICAgKi9cXG4gICAgZnVuY3Rpb24gbWF4UG9ydHNUb0hhY2soKSB7XFxuICAgICAgICBsZXQgbWF4UG9ydHMgPSAwO1xcbiAgICAgICAgRVhQTE9JVFMuZm9yRWFjaChleHBsb2l0ID0+IHtcXG4gICAgICAgICAgICBpZiAobnMuZmlsZUV4aXN0cyhleHBsb2l0KSkgKyttYXhQb3J0cztcXG4gICAgICAgIH0pO1xcbiAgICAgICAgLy8gbnMudHJ5V3JpdGVQb3J0KDIsIGBNYXggcG9ydHMgZm9yIGhhY2tpbmcgJHttYXhQb3J0c31gKTtcXG4gICAgICAgIHJldHVybiBtYXhQb3J0cztcXG4gICAgfVxcblxcbiAgICAvKiogQGZ1bmN0aW9uIGFuYWx5emVTZXJ2ZXJcXG4gICAgICogQW5hbHl6ZSBzZXJ2ZXIgcmVxdWlyZW1lbnRzXFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXJ2ZXIgXFxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9IG9iamVjdCBjb250YWluaW5nIHNlcnZlciBpbmZvcm1hdGlvblxcbiAgICAgKi9cXG4gICAgZnVuY3Rpb24gYW5hbHl6ZVNlcnZlcihzZXJ2ZXIpIHtcXG4gICAgICAgIGxldCByZXF1aXJlZEhhY2tpbmcgPSBucy5nZXRTZXJ2ZXJSZXF1aXJlZEhhY2tpbmdMZXZlbChzZXJ2ZXIpO1xcbiAgICAgICAgbGV0IHJlcXVpcmVkUG9ydHMgPSBucy5nZXRTZXJ2ZXJOdW1Qb3J0c1JlcXVpcmVkKHNlcnZlcik7XFxuICAgICAgICBsZXQgY3VycmVudEhhY2tpbmcgPSBucy5nZXRIYWNraW5nTGV2ZWwoKTtcXG5cXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgXFxcInJvb3RBY2Nlc3NcXFwiOiBucy5oYXNSb290QWNjZXNzKHNlcnZlciksXFxuICAgICAgICAgICAgXFxcInJlcXVpcmVkSGFja2luZ1xcXCI6IHJlcXVpcmVkSGFja2luZyxcXG4gICAgICAgICAgICBcXFwicmVxdWlyZWRQb3J0c1xcXCI6IHJlcXVpcmVkUG9ydHMsXFxuICAgICAgICAgICAgXFxcIm51a2VBdmFpbGFibGVcXFwiOiAoY3VycmVudEhhY2tpbmcgPj0gcmVxdWlyZWRIYWNraW5nICYmIG1heFBvcnRzVG9IYWNrKCkgPj0gcmVxdWlyZWRQb3J0cylcXG4gICAgICAgIH07XFxuICAgIH1cXG5cXG4gICAgLyoqIEBmdW5jdGlvbiBydW5IYWNrXFxuICAgICAqIFJlY3Vyc2l2ZWx5IHNjYW4sIHRyeSB0byBudWtlIGFuZCBoYWNrIHNlcnZlcnMgaW4gdGhlIG5ldHdvcmtcXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlcnZlciBzZXJ2ZXIgdG8gbnVrZSBhbmQgaGFja1xcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fSBleGl0IGNvZGU7IGlmIG5lZ2F0aXZlIGVycm9yLCBpZiBwb3NpdGl2ZSBoYWNrIHNjcmlwdCBQSUQsIGlmIDAgYWxyZWFkeSBydW5uaW5nXFxuICAgICAqL1xcbiAgICBhc3luYyBmdW5jdGlvbiBydW5OdWtlKHNlcnZlcikge1xcbiAgICAgICAgbGV0IHNlcnZlclN0YXR1cyA9IGFuYWx5emVTZXJ2ZXIoc2VydmVyKTtcXG4gICAgICAgIG5zLnByaW50KCdJTkZPICcsIGB7c2VydmVyOiBcXFwiJHtzZXJ2ZXJ9XFxcIiwgc3RhdHVzOiAke0pTT04uc3RyaW5naWZ5KHNlcnZlclN0YXR1cyl9fWApO1xcblxcbiAgICAgICAgaWYgKCFzZXJ2ZXJTdGF0dXMucm9vdEFjY2VzcyAmJiBzZXJ2ZXJTdGF0dXMubnVrZUF2YWlsYWJsZSkge1xcbiAgICAgICAgICAgIG5zLnByaW50KGBcXFwiTnVraW5nICR7c2VydmVyfSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISFcXFwiYCk7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhQb3J0c1RvSGFjaygpOyArK2kpIHtcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChFWFBMT0lUU1tpXSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQnJ1dGVTU0guZXhlJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBucy5icnV0ZXNzaChzZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRlRQQ3JhY2suZXhlJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBucy5mdHBjcmFjayhzZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVsYXlTTVRQLmV4ZSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgbnMucmVsYXlzbXRwKHNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdIVFRQV29ybS5leGUnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5zLmh0dHB3b3JtKHNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUUxJbmplY3QuZXhlJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBucy5zcWxpbmplY3Qoc2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBucy5udWtlKHNlcnZlcik7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgYXN5bmMgZnVuY3Rpb24gcnVuSGFjayhzZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBzY3JpcHQgPSAnc2ltcGxlLWhhY2suanMnO1xcblxcbiAgICAgICAgbGV0IHNlcnZlclN0YXR1cyA9IGFuYWx5emVTZXJ2ZXIoc2VydmVyKTtcXG4gICAgICAgIG5zLnByaW50KCdJTkZPICcsIGB7c2VydmVyOiBcXFwiJHtzZXJ2ZXJ9XFxcIiwgc3RhdHVzOiAke0pTT04uc3RyaW5naWZ5KHNlcnZlclN0YXR1cyl9fWApO1xcblxcbiAgICAgICAgaWYgKHNlcnZlclN0YXR1cy5yb290QWNjZXNzICYmIHNlcnZlclN0YXR1cy5udWtlQXZhaWxhYmxlKSB7XFxuICAgICAgICAgICAgaWYgKCFucy5maWxlRXhpc3RzKHNjcmlwdCwgJ2hvbWUnKSkge1xcbiAgICAgICAgICAgICAgICBucy5wcmludChgRVJST1IgU2NyaXB0ICcke3NjcmlwdH0nIGRvZXNuJ3QgZXhpc3QhYCk7XFxuICAgICAgICAgICAgICAgIC8vIHJldHVybiAtMztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbnMuc2NwKHNjcmlwdCwgc2VydmVyLCAnaG9tZScpO1xcblxcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJNYXhSYW0gPSBucy5nZXRTZXJ2ZXJNYXhSYW0oc2VydmVyKTtcXG4gICAgICAgICAgICBsZXQgc2VydmVyVXNlZFJhbSA9IG5zLmdldFNlcnZlclVzZWRSYW0oc2VydmVyKTtcXG4gICAgICAgICAgICBsZXQgc2VydmVyRnJlZVJhbSA9IHNlcnZlck1heFJhbSAtIHNlcnZlclVzZWRSYW07XFxuICAgICAgICAgICAgbGV0IHNjcmlwdFJhbSA9IG5zLmdldFNjcmlwdFJhbShzY3JpcHQsIHNlcnZlcik7XFxuICAgICAgICAgICAgbGV0IG1heFRocmVhZHMgPSBNYXRoLmZsb29yKHNlcnZlckZyZWVSYW0gLyBzY3JpcHRSYW0pO1xcblxcbiAgICAgICAgICAgIGxldCBhID0gbnMuc2NyaXB0UnVubmluZyhzY3JpcHQsIHNlcnZlcik7XFxuICAgICAgICAgICAgaWYgKCFhKSB7XFxuICAgICAgICAgICAgICAgIGlmIChtYXhUaHJlYWRzID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vIGF3YWl0IHdyaXRlTG9nKCdFUlJPUicsIGBcXFwiTm90IGVub3VnaCByYW0gdG8gcnVuICcke3NjcmlwdH0nIG9uICcke3NlcnZlcn0nLCAke3NjcmlwdFJhbX0vJHtzZXJ2ZXJGcmVlUmFtfSFcXFwiYCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTQ7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgbGV0IGV4ZWNFeGl0Q29kZSA9IG5zLmV4ZWMoc2NyaXB0LCBzZXJ2ZXIsIG1heFRocmVhZHMsIHNlcnZlcik7XFxuXFxuICAgICAgICAgICAgICAgIGlmICghZXhlY0V4aXRDb2RlKSB7XFxuICAgICAgICAgICAgICAgICAgICAvLyBhd2FpdCB3cml0ZUxvZygnRVJST1InLCBgXFxcIkV4ZWMgZXJyb3IgcnVubmluZyBzY3JpcHQgJyR7c2NyaXB0fSBvbiAnJHtzZXJ2ZXJ9IVxcXCJgKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtNTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGVjRXhpdENvZGU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAvLyBhd2FpdCB3cml0ZUxvZygnRVJST1InLCBgXFxcIkhhY2sgYWxyZWFkeSBydW5uaW5nIG9uICR7c2VydmVyfVxcXCJgKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgcmV0dXJuIC02O1xcbiAgICB9XFxuXFxuICAgIC8qKlxcbiAgICAgKiBSZWN1cnNpdmVseSBraWxsIHNpbXBsZS1oYWNrLmpzIHJ1bm5pbmcgb24gc2VydmVycyBpbiB0aGUgbmV0d29ya1xcbiAgICAgKiBAYXN5bmNcXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRTZXJ2ZXIgc2VydmVyIHRvIHNjYW5cXG4gICAgICovXFxuICAgIGFzeW5jIGZ1bmN0aW9uIHNjYW5TZXJ2ZXIoY3VycmVudFNlcnZlciwgcHJldmlvdXNTZXJ2ZXIgPSBjdXJyZW50U2VydmVyKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICBsZXQgbmV4dFNlcnZlciA9IGF2YWlsYWJsZVNlcnZlcnNbaV07XFxuXFxuICAgICAgICAgICAgaWYgKG5leHRTZXJ2ZXIgIT0gY3VycmVudFNlcnZlciAmJiBuZXh0U2VydmVyICE9IHByZXZpb3VzU2VydmVyKSB7XFxuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bk51a2UobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgIGlmIChFWENMVURFX1NFUlZFUlMuaW5kZXhPZihuZXh0U2VydmVyKSA9PSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhY2tFeGl0Q29kZSA9IGF3YWl0IHJ1bkhhY2sobmV4dFNlcnZlcik7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFja0V4aXRDb2RlID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBucy5wcmludCgnSU5GTyAnICsgYFxcXCJIYWNrIGFscmVhZHkgcnVubmluZyBvbiAke25leHRTZXJ2ZXJ9XFxcImApO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYWNrRXhpdENvZGUgPT0gLTYpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBucy5wcmludCgnRVJST1IgJyArIGBcXFwiTm8gcm9vdCBhY2Nlc3MgdG8gJHtuZXh0U2VydmVyfSFcXFwiYCk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhY2tFeGl0Q29kZSA9PSAtNCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5zLnByaW50KCdXQVJOICcgKyBgXFxcIk5vdCBlbm91Z2ggUkFNIHRvIHJ1biBzY3JpcHQgb24gJHtuZXh0U2VydmVyfSFcXFwiYCk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYWNrRXhpdENvZGUgPCAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zLnByaW50KCdFUlJPUiAnICsgYFxcXCJIYWNrIGV4ZWMgRVJST1Igb24gJyR7bmV4dFNlcnZlcn0nOiAke2hhY2tFeGl0Q29kZX0hXFxcImApO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zLnByaW50KCdJTkZPICcgKyBgXFxcIkhhY2sgc3RhcnRlZCBvbiAnJHtuZXh0U2VydmVyfSdcXFwiYCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIobmV4dFNlcnZlciwgY3VycmVudFNlcnZlcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYXdhaXQgbnMuc2xlZXAoMTApO1xcbiAgICB9XFxuXFxuICAgIG5zLndyaXRlKCdudWtlLWxvZy5qcycsICcnLCAndycpO1xcbiAgICBpZiAoIW5zLnNjcmlwdFJ1bm5pbmcoJ3NpbXBsZS1oYWNrLmpzJywgJ24wMGRsZXMnKSkgbnMud3JpdGUoJ2hhY2stbG9nLmpzJywgJycsICd3Jyk7XFxuICAgIG5zLnRwcmludChgVEVSTUlOQUwgPSBcXFwiUnVubmluZyBzY2FuXFxcImApO1xcblxcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgbnMucHJpbnQoYElORk8gUnVubmluZyBzY2FuYCk7XFxuICAgICAgICBhd2FpdCBzY2FuU2VydmVyKCdob21lJyk7XFxuICAgICAgICBhd2FpdCBucy5zbGVlcCg2MDAwMCk7XFxuICAgIH1cXG59XFxuXCIsXCJmaWxlbmFtZVwiOlwiYXV0by1udWtlLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWVcIn19XSxbXCJoYWNrbmV0LWJvdC5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG4gICAgY29uc3Qgbm9kZUNvc3RUaHJlc2hvbGQgPSBucy5hcmdzLmxlbmd0aCA+IDAgPyBucy5hcmdzWzBdIDogMC4yO1xcbiAgICBjb25zdCB1cGdyYWRlQ29zdFRocmVzaG9sZCA9IG5zLmFyZ3MubGVuZ3RoID4gMSA/IG5zLmFyZ3NbMV0gOiAwLjE7XFxuICAgIGNvbnN0IHVwZ3JhZGVDb3VudCA9IG5zLmFyZ3MubGVuZ3RoID4gMiA/IG5zLmFyZ3NbMl0gOiAxO1xcbiAgICBjb25zdCBoZWxwZXJCdXlUaHJlc2hvbGQgPSBucy5hcmdzLmxlbmd0aCA+IDMgPyBucy5hcmdzWzNdIDogMC4yO1xcbiAgICBjb25zdCBub2RlQ2FwID0gMjAwO1xcbiAgICBjb25zdCBsZXZlbENhcCA9IDIwMDtcXG4gICAgY29uc3QgcmFtQ2FwID0gNjQ7XFxuICAgIGNvbnN0IGNvcmVDYXAgPSAxNjtcXG4gICAgY29uc3Qgc2VydmVyUkFNID0gMzI7XFxuICAgIG5zLnRwcmludChgQm90IHN0YXJ0ZWQge25vZGVDb3N0VGhyZXNob2xkOiAke25vZGVDb3N0VGhyZXNob2xkfSwgdXBncmFkZUNvc3RUaHJlc2hvbGQ6ICR7dXBncmFkZUNvc3RUaHJlc2hvbGR9LCB1cGdyYWRlQ291bnQ6ICR7dXBncmFkZUNvdW50fX1gKTtcXG5cXG4gICAgXFxuXFxuICAgIHdoaWxlICh0cnVlKSB7XFxuICAgICAgICBsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoXFxcImhvbWVcXFwiKTtcXG5cXG4gICAgICAgIGxldCBub2RlUHVyY2hhc2VDb3N0ID0gbnMuaGFja25ldC5nZXRQdXJjaGFzZU5vZGVDb3N0KCk7XFxuICAgICAgICBsZXQgbm9kZUNvdW50ID0gbnMuaGFja25ldC5udW1Ob2RlcygpO1xcblxcbiAgICAgICAgaWYgKG5vZGVDb3VudCA8IG5vZGVDYXAgJiYgbm9kZVB1cmNoYXNlQ29zdCAvIE1hdGguYWJzKGN1cnJlbnRNb25leSkgPCBub2RlQ29zdFRocmVzaG9sZCkge1xcbiAgICAgICAgICAgIG5zLmhhY2tuZXQucHVyY2hhc2VOb2RlKCk7XFxuICAgICAgICAgICAgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoXFxcImhvbWVcXFwiKTtcXG4gICAgICAgICAgICArK25vZGVDb3VudDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub2RlQ291bnQ7ICsraW5kZXgpIHtcXG4gICAgICAgICAgICBsZXQgbm9kZVN0YXRzID0gbnMuaGFja25ldC5nZXROb2RlU3RhdHMoaW5kZXgpO1xcblxcbiAgICAgICAgICAgIGlmIChub2RlU3RhdHMubGV2ZWwgPCBsZXZlbENhcCAmJiBucy5oYWNrbmV0LmdldExldmVsVXBncmFkZUNvc3QoaW5kZXgsIHVwZ3JhZGVDb3VudCkgLyBNYXRoLmFicyhjdXJyZW50TW9uZXkpIDwgdXBncmFkZUNvc3RUaHJlc2hvbGQpIHtcXG4gICAgICAgICAgICAgICAgbnMuaGFja25ldC51cGdyYWRlTGV2ZWwoaW5kZXgsIHVwZ3JhZGVDb3VudCk7XFxuICAgICAgICAgICAgICAgIGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKFxcXCJob21lXFxcIik7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGlmIChub2RlU3RhdHMucmFtIDwgcmFtQ2FwICYmIG5zLmhhY2tuZXQuZ2V0UmFtVXBncmFkZUNvc3QoaW5kZXgsIHVwZ3JhZGVDb3VudCkgLyBNYXRoLmFicyhjdXJyZW50TW9uZXkpIDwgdXBncmFkZUNvc3RUaHJlc2hvbGQpIHtcXG4gICAgICAgICAgICAgICAgbnMuaGFja25ldC51cGdyYWRlUmFtKGluZGV4LCB1cGdyYWRlQ291bnQpO1xcbiAgICAgICAgICAgICAgICBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShcXFwiaG9tZVxcXCIpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBpZiAobm9kZVN0YXRzLmNvcmVzIDwgY29yZUNhcCAmJiBucy5oYWNrbmV0LmdldENvcmVVcGdyYWRlQ29zdChpbmRleCwgdXBncmFkZUNvdW50KSAvIE1hdGguYWJzKGN1cnJlbnRNb25leSkgPCB1cGdyYWRlQ29zdFRocmVzaG9sZCkge1xcbiAgICAgICAgICAgICAgICBucy5oYWNrbmV0LnVwZ3JhZGVDb3JlKGluZGV4LCB1cGdyYWRlQ291bnQpO1xcbiAgICAgICAgICAgICAgICBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShcXFwiaG9tZVxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxldCBzZXJ2ZXJDb3N0ID0gbnMuZ2V0UHVyY2hhc2VkU2VydmVyQ29zdChzZXJ2ZXJSQU0pO1xcblxcbiAgICAgICAgaWYgKHNlcnZlckNvc3QgPCBjdXJyZW50TW9uZXkgKiBoZWxwZXJCdXlUaHJlc2hvbGQpIHtcXG4gICAgICAgICAgICBsZXQgbmV3U2VydmVyID0gbnMucHVyY2hhc2VTZXJ2ZXIoJ2hvbWUnLCBzZXJ2ZXJSQU0pO1xcbiAgICAgICAgICAgIGlmIChuZXdTZXJ2ZXIgIT0gJycpIHtcXG4gICAgICAgICAgICAgICAgbnMudHByaW50KGBCb3VnaHQgYSBzZXJ2ZXJgKTtcXG4gICAgICAgICAgICAgICAgbnMuc2NwKCdncm93LWhlbHBlci5qcycsIG5ld1NlcnZlcik7XFxuICAgICAgICAgICAgICAgIG5zLnNjcCgnY29uc3RhbnRzLmpzJywgbmV3U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgbGV0IGV4ZWNFeGl0Q29kZSA9IG5zLmV4ZWMoJ2dyb3ctaGVscGVyLmpzJywgbmV3U2VydmVyLCAxMCwgMjApO1xcbiAgICAgICAgICAgICAgICBucy50cHJpbnQoYEV4ZWMgJ2dyb3ctaGVscGVyLmpzJyBleGl0IGNvZGU6ICR7ZXhlY0V4aXRDb2RlfWApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG5cXG5cXG5cXG4gICAgICAgIC8vIGxldCBsb2dGaWxlcyA9IFsnaGFjay1sb2cuanMnLCAnbnVrZS1sb2cuanMnXTtcXG5cXG4gICAgICAgIC8vIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsb2dGaWxlcy5sZW5ndGg7IGluZGV4KyspIHtcXG4gICAgICAgIC8vICAgICBjb25zdCBsb2dGaWxlID0gbG9nRmlsZXNbaW5kZXhdO1xcbiAgICAgICAgLy8gICAgIGxldCBwb3J0RGF0YSA9IG5zLnJlYWRQb3J0KGluZGV4ICsgMSk7XFxuICAgICAgICAvLyAgICAgaWYgKHBvcnREYXRhICE9ICdOVUxMIFBPUlQgREFUQScpIG5zLndyaXRlKGxvZ0ZpbGUsIHBvcnREYXRhLCAnYScpO1xcbiAgICAgICAgLy8gfVxcblxcbiAgICAgICAgYXdhaXQgbnMuc2xlZXAoMTAwMCk7XFxuICAgIH1cXG59XCIsXCJmaWxlbmFtZVwiOlwiaGFja25ldC1ib3QuanNcIixcInNlcnZlclwiOlwiaG9tZVwifX1dLFtcImtpbGwtYWxsLXNpbXBsZS1oYWNrLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcbmltcG9ydCB7IEVYQ0xVREVfU0VSVkVSUyB9IGZyb20gXFxcIi4vY29uc3RhbnRzLmpzXFxcIjtcXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG5cXG4gICAgLyoqXFxuICAgICAqIFJlY3Vyc2l2ZWx5IGtpbGwgc2ltcGxlLWhhY2suanMgcnVubmluZyBvbiBzZXJ2ZXJzIGluIHRoZSBuZXR3b3JrXFxuICAgICAqIEBhc3luY1xcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFNlcnZlciBzZXJ2ZXIgdG8gc2NhblxcbiAgICAgKi9cXG4gICAgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKEVYQ0xVREVfU0VSVkVSUy5pbmRleE9mKG5leHRTZXJ2ZXIpID09IC0xKSBucy5zY3JpcHRLaWxsKCdzaW1wbGUtaGFjay5qcycsIG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBucy50cHJpbnQoYFJ1bm5pbmcgc2NhbmApO1xcbiAgICBzY2FuU2VydmVyKCdob21lJyk7XFxufVxcblwiLFwiZmlsZW5hbWVcIjpcImtpbGwtYWxsLXNpbXBsZS1oYWNrLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWVcIn19XSxbXCJraWxsLWhhY2tuZXQuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuICAgIFxcbiAgICBucy5zY3JpcHRLaWxsKCdoYWNrbmV0LWJvdC5qcycsICdob21lJyk7XFxufVwiLFwiZmlsZW5hbWVcIjpcImtpbGwtaGFja25ldC5qc1wiLFwic2VydmVyXCI6XCJob21lXCJ9fV0sW1wiaGFjay1sb2cuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCJcIixcImZpbGVuYW1lXCI6XCJoYWNrLWxvZy5qc1wiLFwic2VydmVyXCI6XCJob21lXCJ9fV0sW1wia2lsbC1udWtlLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICBucy5zY3JpcHRLaWxsKCdhdXRvLW51a2UuanMnLCAnaG9tZScpO1xcbn1cIixcImZpbGVuYW1lXCI6XCJraWxsLW51a2UuanNcIixcInNlcnZlclwiOlwiaG9tZVwifX1dLFtcIm51a2UtbG9nLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiXCIsXCJmaWxlbmFtZVwiOlwibnVrZS1sb2cuanNcIixcInNlcnZlclwiOlwiaG9tZVwifX1dLFtcImdyb3ctaGVscGVyLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICAvLyBUT0RPOiBhZGQgaW5jcmVhc2luZyB0aHJlc2hvbGQgaWYgbm8gc2VydmVycyBsb3dlciB0aGFuIGN1cnJlbnQgdGhyZXNob2xkXFxuICAgIGFzeW5jIGZ1bmN0aW9uIHNjYW5TZXJ2ZXIoY3VycmVudFNlcnZlciwgcHJldmlvdXNTZXJ2ZXIgPSBjdXJyZW50U2VydmVyKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICBsZXQgbmV4dFNlcnZlciA9IGF2YWlsYWJsZVNlcnZlcnNbaV07XFxuXFxuICAgICAgICAgICAgaWYgKG5leHRTZXJ2ZXIgIT0gY3VycmVudFNlcnZlciAmJiBuZXh0U2VydmVyICE9IHByZXZpb3VzU2VydmVyKSB7XFxuICAgICAgICAgICAgICAgIGlmIChucy5zY3JpcHRSdW5uaW5nKCdzaW1wbGUtaGFjay5qcycsIG5leHRTZXJ2ZXIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShuZXh0U2VydmVyKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TW9uZXkgPCAwLjIgKiBtYXhNb25leSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5zLmdyb3cobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYXdhaXQgc2NhblNlcnZlcihuZXh0U2VydmVyLCBjdXJyZW50U2VydmVyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgd2hpbGUgKHRydWUpIHtcXG4gICAgICAgIG5zLnByaW50KGBSdW5uaW5nIHNjYW5gKTtcXG4gICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIoJ2hvbWUnKTtcXG4gICAgfVxcbn1cIixcImZpbGVuYW1lXCI6XCJncm93LWhlbHBlci5qc1wiLFwic2VydmVyXCI6XCJob21lXCJ9fV0sW1wiYnV5LXNlcnZlci5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG4gICAgXFxuICAgIGxldCBzZXJ2ZXJDb3N0ID0gbnMuZ2V0UHVyY2hhc2VkU2VydmVyQ29zdCgxNik7XFxuICAgIGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRcXG4gICAgaWYobnMuZ2V0UHVyY2hhc2VkU2VydmVyQ29zdCgxNilcXG59XCIsXCJmaWxlbmFtZVwiOlwiYnV5LXNlcnZlci5qc1wiLFwic2VydmVyXCI6XCJob21lXCJ9fV0sW1wiYnV5LWdyb3ctc2VydmVyLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICBsZXQgc2VydmVyQ29zdCA9IG5zLmdldFB1cmNoYXNlZFNlcnZlckNvc3QoMTYpO1xcbiAgICBsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoJ2hvbWUnKTtcXG5cXG4gICAgaWYgKHNlcnZlckNvc3QgPCAwLjEgKiBjdXJyZW50TW9uZXkpIHtcXG4gICAgICAgIGxldCBuZXdTZXJ2ZXIgPSBucy5wdXJjaGFzZVNlcnZlcignaG9tZScsIDE2KTtcXG4gICAgICAgIGlmIChuZXdTZXJ2ZXIgIT0gJycpIHtcXG4gICAgICAgICAgICBucy50cHJpbnQoYEJvdWdodCBhIHNlcnZlcmApO1xcbiAgICAgICAgICAgIG5zLnNjcCgnZ3Jvdy1oZWxwZXIuanMnLCBuZXdTZXJ2ZXIpO1xcbiAgICAgICAgICAgIGxldCBleGVjRXhpdENvZGUgPSBucy5leGVjKCdncm93LWhlbHBlci5qcycsIG5ld1NlcnZlciwgNSwgMjApO1xcbiAgICAgICAgICAgIG5zLnRwcmludChgRXhlYyAnZ3Jvdy1oZWxwZXIuanMnIGV4aXQgY29kZTogJHtleGVjRXhpdENvZGV9YCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XCIsXCJmaWxlbmFtZVwiOlwiYnV5LWdyb3ctc2VydmVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWVcIn19XSxbXCJzdGFydC1ncm93LWhlbHBlcnMuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuICAgIGxldCBzY3JpcHQgPSAnZ3Jvdy1oZWxwZXIuanMnO1xcblxcbiAgICBmb3IgKGxldCBzZXJ2ZXIgPSAwOyBucy5zZXJ2ZXJFeGlzdHMoYGhvbWUtJHtzZXJ2ZXJ9YCk7IHNlcnZlcisrKSB7XFxuICAgICAgICBsZXQgc2VydmVyTWF4UmFtID0gbnMuZ2V0U2VydmVyTWF4UmFtKGBob21lLSR7c2VydmVyfWApO1xcbiAgICAgICAgbGV0IHNlcnZlclVzZWRSYW0gPSBucy5nZXRTZXJ2ZXJVc2VkUmFtKGBob21lLSR7c2VydmVyfWApO1xcbiAgICAgICAgbGV0IHNlcnZlckZyZWVSYW0gPSBzZXJ2ZXJNYXhSYW0gLSBzZXJ2ZXJVc2VkUmFtO1xcbiAgICAgICAgbGV0IHNjcmlwdFJhbSA9IG5zLmdldFNjcmlwdFJhbShzY3JpcHQsIGBob21lLSR7c2VydmVyfWApO1xcbiAgICAgICAgbGV0IG1heFRocmVhZHMgPSBNYXRoLmZsb29yKHNlcnZlckZyZWVSYW0gLyBzY3JpcHRSYW0pO1xcbiAgICAgICAgbnMuc2NwKHNjcmlwdCwgYGhvbWUtJHtzZXJ2ZXJ9YCwgJ2hvbWUnKTtcXG4gICAgICAgIG5zLmV4ZWMoc2NyaXB0LCBgaG9tZS0ke3NlcnZlcn1gLCBtYXhUaHJlYWRzKTtcXG4gICAgfVxcbn1cIixcImZpbGVuYW1lXCI6XCJzdGFydC1ncm93LWhlbHBlcnMuanNcIixcInNlcnZlclwiOlwiaG9tZVwifX1dLFtcImJhY2tkb29yLWNvbW1hbmQuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIC8qKlxcbiAgICAgKiBSZWN1cnNpdmVseSBraWxsIHNpbXBsZS1oYWNrLmpzIHJ1bm5pbmcgb24gc2VydmVycyBpbiB0aGUgbmV0d29ya1xcbiAgICAgKiBAYXN5bmNcXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRTZXJ2ZXIgc2VydmVyIHRvIHNjYW5cXG4gICAgICovXFxuICAgIGZ1bmN0aW9uIHNjYW5TZXJ2ZXIoY3VycmVudFNlcnZlciwgdGFyZ2V0U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIG5zLnRwcmludChjdXJyZW50U2VydmVyKTtcXG4gICAgICAgIGlmIChjdXJyZW50U2VydmVyID09IHRhcmdldFNlcnZlcikge1xcbiAgICAgICAgICAgIHJldHVybiBbY3VycmVudFNlcnZlcl07XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICAgICAgbGV0IG5leHRTZXJ2ZXIgPSBhdmFpbGFibGVTZXJ2ZXJzW2ldO1xcblxcbiAgICAgICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIHRhcmdldFNlcnZlciwgY3VycmVudFNlcnZlcik7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2N1cnJlbnRTZXJ2ZXJdLmNvbmNhdChyZXN1bHQpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGxldCB0YXJnZXRQYXRoID0gc2NhblNlcnZlcignaG9tZScsIG5zLmFyZ3NbMF0pO1xcbiAgICBucy50cHJpbnQodGFyZ2V0UGF0aCk7XFxuXFxuICAgIGNvbnN0IHRlcm1pbmFsSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcXFwidGVybWluYWwtaW5wdXRcXFwiKTtcXG4gICAgY29uc3QgaGFuZGxlciA9IE9iamVjdC5rZXlzKHRlcm1pbmFsSW5wdXQpWzFdO1xcbiAgICBsZXQgYmFja2Rvb3JDb21tYW5kID0gJyc7XFxuXFxuICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCB0YXJnZXRQYXRoLmxlbmd0aDsgaW5kZXgrKykge1xcbiAgICAgICAgY29uc3Qgc2VydmVyID0gdGFyZ2V0UGF0aFtpbmRleF07XFxuXFxuICAgICAgICBiYWNrZG9vckNvbW1hbmQgKz0gYGNvbm5lY3QgJHtzZXJ2ZXJ9OyBgO1xcbiAgICB9XFxuXFxuICAgIG5zLnRwcmludChiYWNrZG9vckNvbW1hbmQpO1xcbiAgICB0ZXJtaW5hbElucHV0LnZhbHVlID0gYmFja2Rvb3JDb21tYW5kO1xcbiAgICB0ZXJtaW5hbElucHV0W2hhbmRsZXJdLm9uQ2hhbmdlKHsgdGFyZ2V0OiB0ZXJtaW5hbElucHV0IH0pO1xcbiAgICB0ZXJtaW5hbElucHV0W2hhbmRsZXJdLm9uS2V5RG93bih7IGtleTogJ0VudGVyJywgcHJldmVudERlZmF1bHQ6ICgpID0+IG51bGwgfSk7XFxuXFxuICAgIGJhY2tkb29yQ29tbWFuZCA9ICdydW4gQnJ1dGVTU0guZXhlOyAnO1xcbiAgICBiYWNrZG9vckNvbW1hbmQgKz0gJ3J1biBGVFBDcmFjay5leGU7ICc7XFxuICAgIGJhY2tkb29yQ29tbWFuZCArPSAncnVuIHJlbGF5U01UUC5leGU7ICc7XFxuICAgIGJhY2tkb29yQ29tbWFuZCArPSAncnVuIEhUVFBXb3JtLmV4ZTsgJztcXG4gICAgYmFja2Rvb3JDb21tYW5kICs9ICdydW4gU1FMSW5qZWN0LmV4ZTsgJztcXG4gICAgYmFja2Rvb3JDb21tYW5kICs9ICdydW4gTlVLRS5leGU7ICc7XFxuICAgIGJhY2tkb29yQ29tbWFuZCArPSAnYmFja2Rvb3InO1xcblxcbiAgICBucy50cHJpbnQoYmFja2Rvb3JDb21tYW5kKTtcXG4gICAgdGVybWluYWxJbnB1dC52YWx1ZSA9IGJhY2tkb29yQ29tbWFuZDtcXG4gICAgdGVybWluYWxJbnB1dFtoYW5kbGVyXS5vbkNoYW5nZSh7IHRhcmdldDogdGVybWluYWxJbnB1dCB9KTtcXG4gICAgdGVybWluYWxJbnB1dFtoYW5kbGVyXS5vbktleURvd24oeyBrZXk6ICdFbnRlcicsIHByZXZlbnREZWZhdWx0OiAoKSA9PiBudWxsIH0pO1xcbn1cIixcImZpbGVuYW1lXCI6XCJiYWNrZG9vci1jb21tYW5kLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWVcIn19XSxbXCJkb3dubG9hZC1hbGwtbGl0LmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICBmdW5jdGlvbiBzY2FuU2VydmVyKGN1cnJlbnRTZXJ2ZXIsIHByZXZpb3VzU2VydmVyID0gY3VycmVudFNlcnZlcikge1xcbiAgICAgICAgLy8gbnMudHByaW50KGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgbGV0IGF2YWlsYWJsZVNlcnZlcnMgPSBucy5zY2FuKGN1cnJlbnRTZXJ2ZXIpO1xcblxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdmFpbGFibGVTZXJ2ZXJzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgbGV0IG5leHRTZXJ2ZXIgPSBhdmFpbGFibGVTZXJ2ZXJzW2ldO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0U2VydmVyICE9IGN1cnJlbnRTZXJ2ZXIgJiYgbmV4dFNlcnZlciAhPSBwcmV2aW91c1NlcnZlcikge1xcbiAgICAgICAgICAgICAgICBsZXQgbGl0RmlsZXMgPSBucy5scyhuZXh0U2VydmVyLCAnbGl0Jyk7XFxuICAgICAgICAgICAgICAgIG5zLnRwcmludChgRG93bmxvYWQgZnJvbSAnJHtuZXh0U2VydmVyfSc6ICR7bGl0RmlsZXN9YCk7XFxuICAgICAgICAgICAgICAgIGlmIChucy5hcmdzWzBdICYmIGxpdEZpbGVzLmxlbmd0aCkge1xcbiAgICAgICAgICAgICAgICAgICAgbnMuc2NwKGxpdEZpbGVzLCAnaG9tZScsIG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgIHNjYW5TZXJ2ZXIobmV4dFNlcnZlciwgY3VycmVudFNlcnZlcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHNjYW5TZXJ2ZXIoJ2hvbWUnKTtcXG59XCIsXCJmaWxlbmFtZVwiOlwiZG93bmxvYWQtYWxsLWxpdC5qc1wiLFwic2VydmVyXCI6XCJob21lXCJ9fV0sW1wiY29uc3RhbnRzLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcbi8vIGltcG9ydCB7IEVYQ0xVREVfU0VSVkVSUyB9IGZyb20gXFxcIi4vY29uc3RhbnRzLmpzXFxcIjtcXG5cXG5leHBvcnQgY29uc3QgRVhDTFVERV9TRVJWRVJTID0gW1xcbiAgICAnaG9tZScsXFxuICAgICdDU0VDJyxcXG4gICAgJ2F2bW5pdGUtMDJoJyxcXG4gICAgJ0kuSS5JLkknLFxcbiAgICAncnVuNHRoZWgxMTF6J1xcbl07XFxuXFxuZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDEwMjQ7IGluZGV4KyspIHtcXG4gICAgRVhDTFVERV9TRVJWRVJTLnB1c2goYGhvbWUtJHtpbmRleH1gKTtcXG59XFxuXFxuXFxuY29uc3QgREFSS1dFQl9QUk9HUkFNUyA9IFtcXG4gICAgeyBuYW1lOiAnQnJ1dGVTU0guZXhlJywgY29zdDogMCB9LFxcbiAgICB7IG5hbWU6ICdGVFBDcmFjay5leGUnLCBjb3N0OiAxNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ3JlbGF5U01UUC5leGUnLCBjb3N0OiA1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0hUVFBXb3JtLmV4ZScsIGNvc3Q6IDMwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NRTEluamVjdC5leGUnLCBjb3N0OiAyNTAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU2VydmVyUHJvZmlsZXIuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjEuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjIuZXhlJywgY29zdDogMjUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnQXV0b0xpbmsuZXhlJywgY29zdDogMTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdGb3JtdWxhcy5leGUnLCBjb3N0OiA1MDAwMDAwMDAwIH1cXG5dO1xcblxcblxcbmNvbnN0IENPTVBMRVRFRF9GQUNUSU9OUyA9IFtcXG4gICAgJ0N5YmVyU2VjJyxcXG4gICAgJ05ldGJ1cm5lcnMnLFxcbiAgICAnTml0ZVNlYycsXFxuICAgICdUaGUgQmxhY2sgSGFuZCcsXFxuICAgICdBZXZ1bScsXFxuICAgICdTZWN0b3ItMTInLFxcbiAgICAnVm9saGF2ZW4nLFxcbiAgICAnVGlhbiBEaSBIdWknXFxuXTtcIixcImZpbGVuYW1lXCI6XCJjb25zdGFudHMuanNcIixcInNlcnZlclwiOlwiaG9tZVwifX1dLFtcImF1dG8tbnVrZS12Mi5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5cXG5cXG4vKipcXG4gKiBnZXQgYWxsIHNlcnZlcnNcXG4gKiBmb3Igc2VydmVycyByYW0gPiAwIGdldCByYW0sIGdldCBtb25leVxcbiAqIGhvbWUgcmFtIHN1YnN0cmFjdCByYW0gbmVlZGVkIGZvciBib3RzXFxuICogZ2V0IGF2YWlsYWJsZSB0aHJlYWRzIGZvciBlYWNoIHNlcnZlciBmb3IgaGFjay9ncm93L3dlYWtlblxcbiAqIHN1bSBhbGwgbW9uZXlcXG4gKiBydW4gd2l0aCBwcm9wb3J0aW9uIHRvIHRoZSBtb25leSBhdmFpbGFibGVcXG4gKi9cXG5cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICAvLyBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG4gICAgYXN5bmMgZnVuY3Rpb24gd3JpdGVMb2codHlwZSwgb2JqKSB7XFxuICAgICAgICBsZXQgdGltZU5vdyA9IG5ldyBEYXRlKCk7XFxuICAgICAgICBsZXQgeWVhciA9IHRpbWVOb3cuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyKTtcXG4gICAgICAgIGxldCBtb250aCA9ICh0aW1lTm93LmdldE1vbnRoKCkgPCA5ID8gJzAnIDogJycpICsgKHRpbWVOb3cuZ2V0TW9udGgoKSArIDEpO1xcbiAgICAgICAgbGV0IGRheSA9ICh0aW1lTm93LmdldERhdGUoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXREYXRlKCk7XFxuICAgICAgICBsZXQgaG91ciA9ICh0aW1lTm93LmdldEhvdXJzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0SG91cnMoKTtcXG4gICAgICAgIGxldCBtaW51dGUgPSAodGltZU5vdy5nZXRNaW51dGVzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0TWludXRlcygpO1xcbiAgICAgICAgbGV0IHNlY29uZCA9ICh0aW1lTm93LmdldFNlY29uZHMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRTZWNvbmRzKCk7XFxuICAgICAgICBsZXQgdGltZXN0YW1wID0gYCR7eWVhcn0ke21vbnRofSR7ZGF5fV8ke2hvdXJ9JHttaW51dGV9JHtzZWNvbmR9YDtcXG4gICAgICAgIGF3YWl0IG5zLnRyeVdyaXRlUG9ydCgyLCBgdCR7dGltZXN0YW1wfV8ke3R5cGV9ID0gJHtvYmp9O1xcXFxuYCk7XFxuXFxuICAgICAgICBpZiAoWydFUlJPUicsICdURVJNSU5BTCddLmluZGV4T2YodHlwZSkgIT0gLTEpIG5zLnRwcmludChgJHt0aW1lc3RhbXB9ICR7dHlwZX0gPSAke29ian1gKTtcXG4gICAgfVxcblxcbiAgICBhc3luYyBmdW5jdGlvbiBydW5IYWNrKHNlcnZlcikge1xcbiAgICAgICAgbGV0IHNjcmlwdCA9ICdzaW1wbGUtaGFjay5qcyc7XFxuXFxuICAgICAgICBsZXQgc2VydmVyU3RhdHVzID0gYW5hbHl6ZVNlcnZlcihzZXJ2ZXIpO1xcbiAgICAgICAgYXdhaXQgd3JpdGVMb2coJ0FOQUxZWkUnLCBge3NlcnZlcjogXFxcIiR7c2VydmVyfVxcXCIsIHN0YXR1czogJHtKU09OLnN0cmluZ2lmeShzZXJ2ZXJTdGF0dXMpfX1gKTtcXG5cXG4gICAgICAgIGlmICghc2VydmVyU3RhdHVzLnJvb3RBY2Nlc3MpIHtcXG4gICAgICAgICAgICBpZiAoc2VydmVyU3RhdHVzLm51a2VBdmFpbGFibGUpIHtcXG4gICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVMb2coJ05VS0UnLCBgXFxcIk51a2luZyAke3NlcnZlcn0hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhXFxcImApO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFBvcnRzVG9IYWNrKCk7ICsraSkge1xcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChFWFBMT0lUU1tpXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JydXRlU1NILmV4ZSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zLmJydXRlc3NoKHNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0ZUUENyYWNrLmV4ZSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zLmZ0cGNyYWNrKHNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlbGF5U01UUC5leGUnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBucy5yZWxheXNtdHAoc2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSFRUUFdvcm0uZXhlJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnMuaHR0cHdvcm0oc2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1FMSW5qZWN0LmV4ZSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zLnNxbGluamVjdChzZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBucy5udWtlKHNlcnZlcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgc2VydmVyU3RhdHVzID0gYW5hbHl6ZVNlcnZlcihzZXJ2ZXIpO1xcblxcbiAgICAgICAgaWYgKHNlcnZlclN0YXR1cy5yb290QWNjZXNzKSB7XFxuICAgICAgICAgICAgaWYgKCFucy5maWxlRXhpc3RzKHNjcmlwdCwgJ2hvbWUnKSkge1xcbiAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZUxvZygnRVJST1InLCBgXFxcIlNjcmlwdCAnJHtzY3JpcHR9JyBkb2Vzbid0IGV4aXN0IVxcXCJgKTtcXG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIC0zO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBucy5zY3Aoc2NyaXB0LCBzZXJ2ZXIsICdob21lJyk7XFxuXFxuICAgICAgICAgICAgbGV0IHNlcnZlck1heFJhbSA9IG5zLmdldFNlcnZlck1heFJhbShzZXJ2ZXIpO1xcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJVc2VkUmFtID0gbnMuZ2V0U2VydmVyVXNlZFJhbShzZXJ2ZXIpO1xcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJGcmVlUmFtID0gc2VydmVyTWF4UmFtIC0gc2VydmVyVXNlZFJhbTtcXG4gICAgICAgICAgICBsZXQgc2NyaXB0UmFtID0gbnMuZ2V0U2NyaXB0UmFtKHNjcmlwdCwgc2VydmVyKTtcXG4gICAgICAgICAgICBsZXQgbWF4VGhyZWFkcyA9IE1hdGguZmxvb3Ioc2VydmVyRnJlZVJhbSAvIHNjcmlwdFJhbSk7XFxuXFxuICAgICAgICAgICAgbGV0IGEgPSBucy5zY3JpcHRSdW5uaW5nKHNjcmlwdCwgc2VydmVyKTtcXG4gICAgICAgICAgICBpZiAoIWEpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG1heFRocmVhZHMgPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgLy8gYXdhaXQgd3JpdGVMb2coJ0VSUk9SJywgYFxcXCJOb3QgZW5vdWdoIHJhbSB0byBydW4gJyR7c2NyaXB0fScgb24gJyR7c2VydmVyfScsICR7c2NyaXB0UmFtfS8ke3NlcnZlckZyZWVSYW19IVxcXCJgKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtNDtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICBsZXQgZXhlY0V4aXRDb2RlID0gbnMuZXhlYyhzY3JpcHQsIHNlcnZlciwgbWF4VGhyZWFkcywgc2VydmVyKTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKCFleGVjRXhpdENvZGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vIGF3YWl0IHdyaXRlTG9nKCdFUlJPUicsIGBcXFwiRXhlYyBlcnJvciBydW5uaW5nIHNjcmlwdCAnJHtzY3JpcHR9IG9uICcke3NlcnZlcn0hXFxcImApO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC01O1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWNFeGl0Q29kZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIC8vIGF3YWl0IHdyaXRlTG9nKCdFUlJPUicsIGBcXFwiSGFjayBhbHJlYWR5IHJ1bm5pbmcgb24gJHtzZXJ2ZXJ9XFxcImApO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gLTY7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0LmNvbmNhdChzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gW2N1cnJlbnRTZXJ2ZXJdLmNvbmNhdChyZXN1bHQpO1xcbiAgICB9XFxuXFxuICAgIHdoaWxlICh0cnVlKSB7XFxuICAgICAgICBsZXQgbmV0d29yayA9IHNjYW5TZXJ2ZXIoJ2hvbWUnKTtcXG5cXG4gICAgICAgIGF3YWl0IG5zLnNsZWVwKDEwMCk7XFxuICAgIH1cXG59XCIsXCJmaWxlbmFtZVwiOlwiYXV0by1udWtlLXYyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWVcIn19XSxbXCJncm93LmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcbiAgICBcXG4gICAgXFxufVwiLFwiZmlsZW5hbWVcIjpcImdyb3cuanNcIixcInNlcnZlclwiOlwiaG9tZVwifX1dLFtcImhhY2suanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuICAgIFxcbiAgICBcXG59XCIsXCJmaWxlbmFtZVwiOlwiaGFjay5qc1wiLFwic2VydmVyXCI6XCJob21lXCJ9fV0sW1wid2Vha2VuLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcbiAgICBcXG4gICAgbGV0IHRhcmdldDtcXG4gICAgXFxuICAgIGlmKG5zLmFyZ3MubGVuZ3RoID09IDEpIHtcXG4gICAgICAgIHRhcmdldCA9IEpTT04ucGFyc2UobnMuYXJnc1swXSk7XFxuICAgIH1cXG59XCIsXCJmaWxlbmFtZVwiOlwid2Vha2VuLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWVcIn19XSxbXCJraWxsLWFsbC1ncm93LWhlbHBlcnMuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIGZvciAobGV0IHNlcnZlciA9IDA7IG5zLnNlcnZlckV4aXN0cyhgaG9tZS0ke3NlcnZlcn1gKTsgc2VydmVyKyspIHtcXG4gICAgICAgIG5zLnNjcmlwdEtpbGwoJ2dyb3ctaGVscGVyLmpzJywgYGhvbWUtJHtzZXJ2ZXJ9YCk7XFxuICAgIH1cXG59XFxuXFxuXFxuXFxuXFxuXCIsXCJmaWxlbmFtZVwiOlwia2lsbC1hbGwtZ3Jvdy1oZWxwZXJzLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWVcIn19XSxbXCJzY2FuLW5ldHdvcmsuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuaW1wb3J0IHsgRVhDTFVERV9TRVJWRVJTIH0gZnJvbSBcXFwiLi9jb25zdGFudHMuanNcXFwiO1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcblxcbiAgICAvKipcXG4gICAgICogUmVjdXJzaXZlbHkga2lsbCBzaW1wbGUtaGFjay5qcyBydW5uaW5nIG9uIHNlcnZlcnMgaW4gdGhlIG5ldHdvcmtcXG4gICAgICogQGFzeW5jXFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50U2VydmVyIHNlcnZlciB0byBzY2FuXFxuICAgICAqL1xcbiAgICBmdW5jdGlvbiBzY2FuU2VydmVyKGN1cnJlbnRTZXJ2ZXIsIHByZXZpb3VzU2VydmVyID0gY3VycmVudFNlcnZlciwgY29ubmVjdFN0cmluZyA9ICcnLCBzY2FuTGV2ZWwgPSAwKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuICAgICAgICBsZXQgbmV4dENvbm5lY3RTdHJpbmcgPSBjb25uZWN0U3RyaW5nICsgYGNvbm5lY3QgJHtjdXJyZW50U2VydmVyfTsgYDtcXG4gICAgICAgIG5zLnRwcmludChgJHsn4pSDICAnLnJlcGVhdChzY2FuTGV2ZWwpfeKUoyR7Y3VycmVudFNlcnZlcn06ICR7bmV4dENvbm5lY3RTdHJpbmd9YCk7XFxuICAgICAgICBucy53cml0ZSgnc2Nhbi50eHQnLCBgJHsn4pSDICAnLnJlcGVhdChzY2FuTGV2ZWwpfeKUo+KUgSR7Y3VycmVudFNlcnZlcn06ICR7bmV4dENvbm5lY3RTdHJpbmd9YCsnXFxcXG4nLCAnYScpO1xcblxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdmFpbGFibGVTZXJ2ZXJzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgbGV0IG5leHRTZXJ2ZXIgPSBhdmFpbGFibGVTZXJ2ZXJzW2ldO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0U2VydmVyICE9IGN1cnJlbnRTZXJ2ZXIgJiYgbmV4dFNlcnZlciAhPSBwcmV2aW91c1NlcnZlcikge1xcbiAgICAgICAgICAgICAgICBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIsIG5leHRDb25uZWN0U3RyaW5nLCBzY2FuTGV2ZWwrMSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIG5zLnRwcmludChgUnVubmluZyBzY2FuYCk7XFxuICAgIG5zLndyaXRlKCdzY2FuLnR4dCcsIGBgLCAndycpO1xcbiAgICBzY2FuU2VydmVyKCdob21lJyk7XFxufVxcblwiLFwiZmlsZW5hbWVcIjpcInNjYW4tbmV0d29yay5qc1wiLFwic2VydmVyXCI6XCJob21lXCJ9fV0sW1wiY29ubmVjdC1zZXJ2ZXIuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuXFxufVwiLFwiZmlsZW5hbWVcIjpcImNvbm5lY3Qtc2VydmVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWVcIn19XSxbXCJiYWNrZG9vci1hbGwuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIGNvbnN0IHRlcm1pbmFsSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcXFwidGVybWluYWwtaW5wdXRcXFwiKTtcXG4gICAgY29uc3QgaGFuZGxlciA9IE9iamVjdC5rZXlzKHRlcm1pbmFsSW5wdXQpWzFdO1xcblxcbiAgICBhc3luYyBmdW5jdGlvbiBzY2FuU2VydmVyKGN1cnJlbnRTZXJ2ZXIsIHByZXZpb3VzU2VydmVyID0gY3VycmVudFNlcnZlciwgY29ubmVjdFN0cmluZyA9ICcnLCBzY2FuTGV2ZWwgPSAwKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuICAgICAgICBsZXQgbmV4dENvbm5lY3RTdHJpbmcgPSBjb25uZWN0U3RyaW5nICsgYGNvbm5lY3QgJHtjdXJyZW50U2VydmVyfTsgYDtcXG5cXG4gICAgICAgIGxldCBiYWNrZG9vckNvbW1hbmQgPSBuZXh0Q29ubmVjdFN0cmluZztcXG4gICAgICAgIGJhY2tkb29yQ29tbWFuZCArPSAncnVuIEJydXRlU1NILmV4ZTsgJztcXG4gICAgICAgIGJhY2tkb29yQ29tbWFuZCArPSAncnVuIEZUUENyYWNrLmV4ZTsgJztcXG4gICAgICAgIGJhY2tkb29yQ29tbWFuZCArPSAncnVuIHJlbGF5U01UUC5leGU7ICc7XFxuICAgICAgICBiYWNrZG9vckNvbW1hbmQgKz0gJ3J1biBIVFRQV29ybS5leGU7ICc7XFxuICAgICAgICBiYWNrZG9vckNvbW1hbmQgKz0gJ3J1biBTUUxJbmplY3QuZXhlOyAnO1xcbiAgICAgICAgYmFja2Rvb3JDb21tYW5kICs9ICdydW4gTlVLRS5leGU7ICc7XFxuICAgICAgICBiYWNrZG9vckNvbW1hbmQgKz0gJ2JhY2tkb29yJztcXG5cXG4gICAgICAgIHRlcm1pbmFsSW5wdXQudmFsdWUgPSBiYWNrZG9vckNvbW1hbmQ7XFxuICAgICAgICB0ZXJtaW5hbElucHV0W2hhbmRsZXJdLm9uQ2hhbmdlKHsgdGFyZ2V0OiB0ZXJtaW5hbElucHV0IH0pO1xcbiAgICAgICAgdGVybWluYWxJbnB1dFtoYW5kbGVyXS5vbktleURvd24oeyBrZXk6ICdFbnRlcicsIHByZXZlbnREZWZhdWx0OiAoKSA9PiBudWxsIH0pO1xcbiAgICAgICAgYXdhaXQgbnMuc2xlZXAoNjAwMDApXFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICBsZXQgbmV4dFNlcnZlciA9IGF2YWlsYWJsZVNlcnZlcnNbaV07XFxuXFxuICAgICAgICAgICAgaWYgKG5leHRTZXJ2ZXIgIT0gY3VycmVudFNlcnZlciAmJiBuZXh0U2VydmVyICE9IHByZXZpb3VzU2VydmVyKSB7XFxuICAgICAgICAgICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIobmV4dFNlcnZlciwgY3VycmVudFNlcnZlciwgbmV4dENvbm5lY3RTdHJpbmcsIHNjYW5MZXZlbCArIDEpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBcXG4gICAgYXdhaXQgc2NhblNlcnZlcignaG9tZScpO1xcbiAgICB0ZXJtaW5hbElucHV0LnZhbHVlID0gJ2hvbWUnO1xcbiAgICB0ZXJtaW5hbElucHV0W2hhbmRsZXJdLm9uQ2hhbmdlKHsgdGFyZ2V0OiB0ZXJtaW5hbElucHV0IH0pO1xcbiAgICB0ZXJtaW5hbElucHV0W2hhbmRsZXJdLm9uS2V5RG93bih7IGtleTogJ0VudGVyJywgcHJldmVudERlZmF1bHQ6ICgpID0+IG51bGwgfSk7XFxufVwiLFwiZmlsZW5hbWVcIjpcImJhY2tkb29yLWFsbC5qc1wiLFwic2VydmVyXCI6XCJob21lXCJ9fV0sW1widGVzdC5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICAvLyBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG4gICAgZnVuY3Rpb24gYW5hbHl6ZVNlcnZlcihzZXJ2ZXIpIHtcXG4gICAgICAgIGxldCByZXF1aXJlZEhhY2tpbmcgPSBucy5nZXRTZXJ2ZXJSZXF1aXJlZEhhY2tpbmdMZXZlbChzZXJ2ZXIpO1xcbiAgICAgICAgbGV0IHJlcXVpcmVkUG9ydHMgPSBucy5nZXRTZXJ2ZXJOdW1Qb3J0c1JlcXVpcmVkKHNlcnZlcik7XFxuICAgICAgICBsZXQgY3VycmVudEhhY2tpbmcgPSBucy5nZXRIYWNraW5nTGV2ZWwoKTtcXG5cXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgXFxcInJvb3RBY2Nlc3NcXFwiOiBucy5oYXNSb290QWNjZXNzKHNlcnZlciksXFxuICAgICAgICAgICAgXFxcInJlcXVpcmVkSGFja2luZ1xcXCI6IHJlcXVpcmVkSGFja2luZyxcXG4gICAgICAgICAgICBcXFwicmVxdWlyZWRQb3J0c1xcXCI6IHJlcXVpcmVkUG9ydHMsXFxuICAgICAgICAgICAgXFxcIm51a2VBdmFpbGFibGVcXFwiOiAoY3VycmVudEhhY2tpbmcgPj0gcmVxdWlyZWRIYWNraW5nICYmIG1heFBvcnRzVG9IYWNrKCkgPj0gcmVxdWlyZWRQb3J0cylcXG4gICAgICAgIH07XFxuICAgIH1cXG5cXG4gICAgbGV0IHNlcnZlclN0YXR1cyA9IGFuYWx5emVTZXJ2ZXIoJ3RoZS1odWInKTtcXG4gICAgbnMud3JpdGUoJ0lORk8udHh0JywgYHtzZXJ2ZXI6IFxcXCJ0aGUtaHViXFxcIiwgc3RhdHVzOiAke0pTT04uc3RyaW5naWZ5KHNlcnZlclN0YXR1cyl9fWApO1xcbn1cIixcImZpbGVuYW1lXCI6XCJ0ZXN0LmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWVcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcIm4wMGRsZXNcIixcImZvb2Ruc3R1ZmZcIixcInNpZ21hLWNvc21ldGljc1wiLFwiam9lc2d1bnNcIixcImhvbmctZmFuZy10ZWFcIixcImhhcmFraXJpLXN1c2hpXCIsXCJpcm9uLWd5bVwiLFwiaG9tZS0wXCIsXCJob21lLTFcIixcImhvbWUtMlwiLFwiaG9tZS0zXCIsXCJob21lLTRcIixcImhvbWUtNVwiLFwiaG9tZS02XCIsXCJob21lLTdcIixcImhvbWUtOFwiLFwiaG9tZS05XCIsXCJob21lLTEwXCIsXCJob21lLTExXCIsXCJob21lLTEyXCIsXCJob21lLTEzXCIsXCJob21lLTE0XCIsXCJob21lLTE1XCIsXCJob21lLTE2XCIsXCJob21lLTE3XCIsXCJob21lLTE4XCIsXCJob21lLTE5XCIsXCJob21lLTIwXCIsXCJob21lLTIxXCIsXCJob21lLTIyXCIsXCJob21lLTIzXCIsXCJob21lLTI0XCIsXCJkYXJrd2ViXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJzY2FuLnR4dFwiLHtcImN0b3JcIjpcIlRleHRGaWxlXCIsXCJkYXRhXCI6e1wiZmlsZW5hbWVcIjpcInNjYW4udHh0XCIsXCJ0ZXh0XCI6XCLilKPilIFob21lOiBjb25uZWN0IGhvbWU7IFxcbuKUgyAg4pSj4pSBbjAwZGxlczogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IFxcbuKUgyAg4pSDICDilKPilIFtYXgtaGFyZHdhcmU6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgXFxu4pSDICDilIMgIOKUgyAg4pSj4pSBbmVvLW5ldDogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBdGhlLWh1YjogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgdGhlLWh1YjsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgXN5c2NvcmU6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IHRoZS1odWI7IGNvbm5lY3Qgc3lzY29yZTsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBbGV4by1jb3JwOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCB0aGUtaHViOyBjb25uZWN0IHN5c2NvcmU7IGNvbm5lY3QgbGV4by1jb3JwOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgWF2bW5pdGUtMDJoOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCBhdm1uaXRlLTAyaDsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgXJvdGhtYW4tdW5pOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCBhdm1uaXRlLTAyaDsgY29ubmVjdCByb3RobWFuLXVuaTsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBYWxwaGEtZW50OiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCBhdm1uaXRlLTAyaDsgY29ubmVjdCByb3RobWFuLXVuaTsgY29ubmVjdCBhbHBoYS1lbnQ7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBZ2FsYWN0aWMtY3liZXI6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFscGhhLWVudDsgY29ubmVjdCBnYWxhY3RpYy1jeWJlcjsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFhZXJvY29ycDogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWxwaGEtZW50OyBjb25uZWN0IGFlcm9jb3JwOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgWdsb2JhbC1waGFybTogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWxwaGEtZW50OyBjb25uZWN0IGdsb2JhbC1waGFybTsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgW9tbmlhOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCBhdm1uaXRlLTAyaDsgY29ubmVjdCByb3RobWFuLXVuaTsgY29ubmVjdCBhbHBoYS1lbnQ7IGNvbm5lY3QgZ2xvYmFsLXBoYXJtOyBjb25uZWN0IG9tbmlhOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIF1bml2LWVuZXJneTogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWxwaGEtZW50OyBjb25uZWN0IGdsb2JhbC1waGFybTsgY29ubmVjdCBvbW5pYTsgY29ubmVjdCB1bml2LWVuZXJneTsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFpbmZvY29tbTogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWxwaGEtZW50OyBjb25uZWN0IGdsb2JhbC1waGFybTsgY29ubmVjdCBvbW5pYTsgY29ubmVjdCB1bml2LWVuZXJneTsgY29ubmVjdCBpbmZvY29tbTsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIF0YWl5YW5nLWRpZ2l0YWw6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFscGhhLWVudDsgY29ubmVjdCBnbG9iYWwtcGhhcm07IGNvbm5lY3Qgb21uaWE7IGNvbm5lY3QgdW5pdi1lbmVyZ3k7IGNvbm5lY3QgdGFpeWFuZy1kaWdpdGFsOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBbWljcm9keW5lOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCBhdm1uaXRlLTAyaDsgY29ubmVjdCByb3RobWFuLXVuaTsgY29ubmVjdCBhbHBoYS1lbnQ7IGNvbm5lY3QgZ2xvYmFsLXBoYXJtOyBjb25uZWN0IG9tbmlhOyBjb25uZWN0IHVuaXYtZW5lcmd5OyBjb25uZWN0IHRhaXlhbmctZGlnaXRhbDsgY29ubmVjdCBtaWNyb2R5bmU7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFydW40dGhlaDExMXo6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFscGhhLWVudDsgY29ubmVjdCBnbG9iYWwtcGhhcm07IGNvbm5lY3Qgb21uaWE7IGNvbm5lY3QgdW5pdi1lbmVyZ3k7IGNvbm5lY3QgdGFpeWFuZy1kaWdpdGFsOyBjb25uZWN0IHJ1bjR0aGVoMTExejsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBaGVsaW9zOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCBhdm1uaXRlLTAyaDsgY29ubmVjdCByb3RobWFuLXVuaTsgY29ubmVjdCBhbHBoYS1lbnQ7IGNvbm5lY3QgZ2xvYmFsLXBoYXJtOyBjb25uZWN0IG9tbmlhOyBjb25uZWN0IHVuaXYtZW5lcmd5OyBjb25uZWN0IHRhaXlhbmctZGlnaXRhbDsgY29ubmVjdCBydW40dGhlaDExMXo7IGNvbm5lY3QgaGVsaW9zOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBZGVsdGFvbmU6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFscGhhLWVudDsgY29ubmVjdCBnbG9iYWwtcGhhcm07IGNvbm5lY3QgZGVsdGFvbmU7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgWRlZmNvbW06IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFscGhhLWVudDsgY29ubmVjdCBnbG9iYWwtcGhhcm07IGNvbm5lY3QgZGVsdGFvbmU7IGNvbm5lY3QgZGVmY29tbTsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBc29sYXJpczogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWxwaGEtZW50OyBjb25uZWN0IGdsb2JhbC1waGFybTsgY29ubmVjdCBkZWx0YW9uZTsgY29ubmVjdCBzb2xhcmlzOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFhZXZ1bS1wb2xpY2U6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFzbmFwLWZpdG5lc3M6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIF1bml0YWxpZmU6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IGNvbm5lY3QgdW5pdGFsaWZlOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFpY2FydXM6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IGNvbm5lY3QgdW5pdGFsaWZlOyBjb25uZWN0IGljYXJ1czsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIF6Yi1kZWY6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IGNvbm5lY3QgdW5pdGFsaWZlOyBjb25uZWN0IGljYXJ1czsgY29ubmVjdCB6Yi1kZWY7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBbm92YS1tZWQ6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IGNvbm5lY3QgdW5pdGFsaWZlOyBjb25uZWN0IGljYXJ1czsgY29ubmVjdCBub3ZhLW1lZDsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgXRpdGFuLWxhYnM6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IGNvbm5lY3QgdW5pdGFsaWZlOyBjb25uZWN0IGljYXJ1czsgY29ubmVjdCBub3ZhLW1lZDsgY29ubmVjdCB0aXRhbi1sYWJzOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFmdWxjcnVtdGVjaDogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWV2dW0tcG9saWNlOyBjb25uZWN0IHNuYXAtZml0bmVzczsgY29ubmVjdCB1bml0YWxpZmU7IGNvbm5lY3QgaWNhcnVzOyBjb25uZWN0IG5vdmEtbWVkOyBjb25uZWN0IHRpdGFuLWxhYnM7IGNvbm5lY3QgZnVsY3J1bXRlY2g7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBb21uaXRlazogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWV2dW0tcG9saWNlOyBjb25uZWN0IHNuYXAtZml0bmVzczsgY29ubmVjdCB1bml0YWxpZmU7IGNvbm5lY3QgaWNhcnVzOyBjb25uZWN0IG5vdmEtbWVkOyBjb25uZWN0IHRpdGFuLWxhYnM7IGNvbm5lY3QgZnVsY3J1bXRlY2g7IGNvbm5lY3Qgb21uaXRlazsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBdml0YWxpZmU6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IGNvbm5lY3QgdW5pdGFsaWZlOyBjb25uZWN0IGljYXJ1czsgY29ubmVjdCBub3ZhLW1lZDsgY29ubmVjdCB0aXRhbi1sYWJzOyBjb25uZWN0IHZpdGFsaWZlOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgTRzaWdtYTogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWV2dW0tcG9saWNlOyBjb25uZWN0IHNuYXAtZml0bmVzczsgY29ubmVjdCB1bml0YWxpZmU7IGNvbm5lY3QgaWNhcnVzOyBjb25uZWN0IG5vdmEtbWVkOyBjb25uZWN0IHRpdGFuLWxhYnM7IGNvbm5lY3Qgdml0YWxpZmU7IGNvbm5lY3QgNHNpZ21hOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBYmxhZGU6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IGNvbm5lY3QgdW5pdGFsaWZlOyBjb25uZWN0IGljYXJ1czsgY29ubmVjdCBub3ZhLW1lZDsgY29ubmVjdCB0aXRhbi1sYWJzOyBjb25uZWN0IHZpdGFsaWZlOyBjb25uZWN0IDRzaWdtYTsgY29ubmVjdCBibGFkZTsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFrdWFpLWdvbmc6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IGNvbm5lY3QgdW5pdGFsaWZlOyBjb25uZWN0IGljYXJ1czsgY29ubmVjdCBub3ZhLW1lZDsgY29ubmVjdCB0aXRhbi1sYWJzOyBjb25uZWN0IHZpdGFsaWZlOyBjb25uZWN0IGt1YWktZ29uZzsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgWItYW5kLWE6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IGNvbm5lY3QgdW5pdGFsaWZlOyBjb25uZWN0IGljYXJ1czsgY29ubmVjdCBub3ZhLW1lZDsgY29ubmVjdCB0aXRhbi1sYWJzOyBjb25uZWN0IHZpdGFsaWZlOyBjb25uZWN0IGt1YWktZ29uZzsgY29ubmVjdCBiLWFuZC1hOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFlY29ycDogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWV2dW0tcG9saWNlOyBjb25uZWN0IHNuYXAtZml0bmVzczsgY29ubmVjdCB1bml0YWxpZmU7IGNvbm5lY3QgaWNhcnVzOyBjb25uZWN0IG5vdmEtbWVkOyBjb25uZWN0IHRpdGFuLWxhYnM7IGNvbm5lY3Qgdml0YWxpZmU7IGNvbm5lY3Qga3VhaS1nb25nOyBjb25uZWN0IGItYW5kLWE7IGNvbm5lY3QgZWNvcnA7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgW1lZ2Fjb3JwOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCBhdm1uaXRlLTAyaDsgY29ubmVjdCByb3RobWFuLXVuaTsgY29ubmVjdCBhZXZ1bS1wb2xpY2U7IGNvbm5lY3Qgc25hcC1maXRuZXNzOyBjb25uZWN0IHVuaXRhbGlmZTsgY29ubmVjdCBpY2FydXM7IGNvbm5lY3Qgbm92YS1tZWQ7IGNvbm5lY3QgdGl0YW4tbGFiczsgY29ubmVjdCB2aXRhbGlmZTsgY29ubmVjdCBrdWFpLWdvbmc7IGNvbm5lY3QgYi1hbmQtYTsgY29ubmVjdCBtZWdhY29ycDsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBZnVsY3J1bWFzc2V0czogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWV2dW0tcG9saWNlOyBjb25uZWN0IHNuYXAtZml0bmVzczsgY29ubmVjdCB1bml0YWxpZmU7IGNvbm5lY3QgaWNhcnVzOyBjb25uZWN0IG5vdmEtbWVkOyBjb25uZWN0IHRpdGFuLWxhYnM7IGNvbm5lY3Qgdml0YWxpZmU7IGNvbm5lY3Qga3VhaS1nb25nOyBjb25uZWN0IGItYW5kLWE7IGNvbm5lY3QgZnVsY3J1bWFzc2V0czsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgW53bzogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWV2dW0tcG9saWNlOyBjb25uZWN0IHNuYXAtZml0bmVzczsgY29ubmVjdCB1bml0YWxpZmU7IGNvbm5lY3QgaWNhcnVzOyBjb25uZWN0IG5vdmEtbWVkOyBjb25uZWN0IHRpdGFuLWxhYnM7IGNvbm5lY3Qgdml0YWxpZmU7IGNvbm5lY3Qga3VhaS1nb25nOyBjb25uZWN0IG53bzsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgXBvd2VyaG91c2UtZml0bmVzczogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWV2dW0tcG9saWNlOyBjb25uZWN0IHNuYXAtZml0bmVzczsgY29ubmVjdCB1bml0YWxpZmU7IGNvbm5lY3QgaWNhcnVzOyBjb25uZWN0IG5vdmEtbWVkOyBjb25uZWN0IHRpdGFuLWxhYnM7IGNvbm5lY3Qgdml0YWxpZmU7IGNvbm5lY3Qga3VhaS1nb25nOyBjb25uZWN0IHBvd2VyaG91c2UtZml0bmVzczsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBVGhlLUNhdmU6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IGNvbm5lY3QgdW5pdGFsaWZlOyBjb25uZWN0IGljYXJ1czsgY29ubmVjdCBub3ZhLW1lZDsgY29ubmVjdCB0aXRhbi1sYWJzOyBjb25uZWN0IHZpdGFsaWZlOyBjb25uZWN0IGt1YWktZ29uZzsgY29ubmVjdCBwb3dlcmhvdXNlLWZpdG5lc3M7IGNvbm5lY3QgVGhlLUNhdmU7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFhcHBsaWVkLWVuZXJnZXRpY3M6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBuMDBkbGVzOyBjb25uZWN0IG1heC1oYXJkd2FyZTsgY29ubmVjdCBuZW8tbmV0OyBjb25uZWN0IGF2bW5pdGUtMDJoOyBjb25uZWN0IHJvdGhtYW4tdW5pOyBjb25uZWN0IGFldnVtLXBvbGljZTsgY29ubmVjdCBzbmFwLWZpdG5lc3M7IGNvbm5lY3QgdW5pdGFsaWZlOyBjb25uZWN0IGljYXJ1czsgY29ubmVjdCBub3ZhLW1lZDsgY29ubmVjdCBhcHBsaWVkLWVuZXJnZXRpY3M7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgXN0b3JtdGVjaDogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWV2dW0tcG9saWNlOyBjb25uZWN0IHNuYXAtZml0bmVzczsgY29ubmVjdCB1bml0YWxpZmU7IGNvbm5lY3QgaWNhcnVzOyBjb25uZWN0IG5vdmEtbWVkOyBjb25uZWN0IGFwcGxpZWQtZW5lcmdldGljczsgY29ubmVjdCBzdG9ybXRlY2g7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBLjogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWV2dW0tcG9saWNlOyBjb25uZWN0IHNuYXAtZml0bmVzczsgY29ubmVjdCB1bml0YWxpZmU7IGNvbm5lY3QgaWNhcnVzOyBjb25uZWN0IG5vdmEtbWVkOyBjb25uZWN0IGFwcGxpZWQtZW5lcmdldGljczsgY29ubmVjdCBzdG9ybXRlY2g7IGNvbm5lY3QgLjsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgWNsYXJraW5jOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgbjAwZGxlczsgY29ubmVjdCBtYXgtaGFyZHdhcmU7IGNvbm5lY3QgbmVvLW5ldDsgY29ubmVjdCBhdm1uaXRlLTAyaDsgY29ubmVjdCByb3RobWFuLXVuaTsgY29ubmVjdCBhZXZ1bS1wb2xpY2U7IGNvbm5lY3Qgc25hcC1maXRuZXNzOyBjb25uZWN0IHVuaXRhbGlmZTsgY29ubmVjdCBpY2FydXM7IGNvbm5lY3Qgbm92YS1tZWQ7IGNvbm5lY3QgYXBwbGllZC1lbmVyZ2V0aWNzOyBjb25uZWN0IHN0b3JtdGVjaDsgY29ubmVjdCAuOyBjb25uZWN0IGNsYXJraW5jOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIF6ZXVzLW1lZDogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IG5lby1uZXQ7IGNvbm5lY3QgYXZtbml0ZS0wMmg7IGNvbm5lY3Qgcm90aG1hbi11bmk7IGNvbm5lY3QgYWV2dW0tcG9saWNlOyBjb25uZWN0IHNuYXAtZml0bmVzczsgY29ubmVjdCB1bml0YWxpZmU7IGNvbm5lY3QgemV1cy1tZWQ7IFxcbuKUgyAg4pSDICDilIMgIOKUo+KUgXNpbHZlci1oZWxpeDogY29ubmVjdCBob21lOyBjb25uZWN0IG4wMGRsZXM7IGNvbm5lY3QgbWF4LWhhcmR3YXJlOyBjb25uZWN0IHNpbHZlci1oZWxpeDsgXFxu4pSDICDilKPilIFmb29kbnN0dWZmOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgZm9vZG5zdHVmZjsgXFxu4pSDICDilIMgIOKUo+KUgXplcjA6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBmb29kbnN0dWZmOyBjb25uZWN0IHplcjA7IFxcbuKUgyAg4pSDICDilKPilIFuZWN0YXItbmV0OiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgZm9vZG5zdHVmZjsgY29ubmVjdCBuZWN0YXItbmV0OyBcXG7ilIMgIOKUgyAg4pSDICDilKPilIFwaGFudGFzeTogY29ubmVjdCBob21lOyBjb25uZWN0IGZvb2Ruc3R1ZmY7IGNvbm5lY3QgbmVjdGFyLW5ldDsgY29ubmVjdCBwaGFudGFzeTsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFjb21wdXRlazogY29ubmVjdCBob21lOyBjb25uZWN0IGZvb2Ruc3R1ZmY7IGNvbm5lY3QgbmVjdGFyLW5ldDsgY29ubmVjdCBwaGFudGFzeTsgY29ubmVjdCBjb21wdXRlazsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFqb2huc29uLW9ydGhvOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgZm9vZG5zdHVmZjsgY29ubmVjdCBuZWN0YXItbmV0OyBjb25uZWN0IHBoYW50YXN5OyBjb25uZWN0IGpvaG5zb24tb3J0aG87IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFzdW1taXQtdW5pOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgZm9vZG5zdHVmZjsgY29ubmVjdCBuZWN0YXItbmV0OyBjb25uZWN0IHBoYW50YXN5OyBjb25uZWN0IGpvaG5zb24tb3J0aG87IGNvbm5lY3Qgc3VtbWl0LXVuaTsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBcmhvLWNvbnN0cnVjdGlvbjogY29ubmVjdCBob21lOyBjb25uZWN0IGZvb2Ruc3R1ZmY7IGNvbm5lY3QgbmVjdGFyLW5ldDsgY29ubmVjdCBwaGFudGFzeTsgY29ubmVjdCBqb2huc29uLW9ydGhvOyBjb25uZWN0IHN1bW1pdC11bmk7IGNvbm5lY3QgcmhvLWNvbnN0cnVjdGlvbjsgXFxu4pSDICDilKPilIFzaWdtYS1jb3NtZXRpY3M6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBzaWdtYS1jb3NtZXRpY3M7IFxcbuKUgyAg4pSj4pSBam9lc2d1bnM6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBqb2VzZ3VuczsgXFxu4pSDICDilKPilIFob25nLWZhbmctdGVhOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgaG9uZy1mYW5nLXRlYTsgXFxu4pSDICDilIMgIOKUo+KUgUNTRUM6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBob25nLWZhbmctdGVhOyBjb25uZWN0IENTRUM7IFxcbuKUgyAg4pSDICDilIMgIOKUo+KUgW9tZWdhLW5ldDogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbmctZmFuZy10ZWE7IGNvbm5lY3QgQ1NFQzsgY29ubmVjdCBvbWVnYS1uZXQ7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBbmV0bGluazogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbmctZmFuZy10ZWE7IGNvbm5lY3QgQ1NFQzsgY29ubmVjdCBvbWVnYS1uZXQ7IGNvbm5lY3QgbmV0bGluazsgXFxu4pSDICDilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgWNhdGFseXN0OiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgaG9uZy1mYW5nLXRlYTsgY29ubmVjdCBDU0VDOyBjb25uZWN0IG9tZWdhLW5ldDsgY29ubmVjdCBuZXRsaW5rOyBjb25uZWN0IGNhdGFseXN0OyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSj4pSBSS5JLkkuSTogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbmctZmFuZy10ZWE7IGNvbm5lY3QgQ1NFQzsgY29ubmVjdCBvbWVnYS1uZXQ7IGNvbm5lY3QgbmV0bGluazsgY29ubmVjdCBJLkkuSS5JOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIFtaWxsZW5pdW0tZml0bmVzczogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbmctZmFuZy10ZWE7IGNvbm5lY3QgQ1NFQzsgY29ubmVjdCBvbWVnYS1uZXQ7IGNvbm5lY3QgbmV0bGluazsgY29ubmVjdCBJLkkuSS5JOyBjb25uZWN0IG1pbGxlbml1bS1maXRuZXNzOyBcXG7ilIMgIOKUgyAg4pSDICDilIMgIOKUo+KUgWNydXNoLWZpdG5lc3M6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBob25nLWZhbmctdGVhOyBjb25uZWN0IENTRUM7IGNvbm5lY3Qgb21lZ2EtbmV0OyBjb25uZWN0IGNydXNoLWZpdG5lc3M7IFxcbuKUgyAg4pSDICDilIMgIOKUgyAg4pSDICDilKPilIF6Yi1pbnN0aXR1dGU6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBob25nLWZhbmctdGVhOyBjb25uZWN0IENTRUM7IGNvbm5lY3Qgb21lZ2EtbmV0OyBjb25uZWN0IGNydXNoLWZpdG5lc3M7IGNvbm5lY3QgemItaW5zdGl0dXRlOyBcXG7ilIMgIOKUo+KUgWhhcmFraXJpLXN1c2hpOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgaGFyYWtpcmktc3VzaGk7IFxcbuKUgyAg4pSj4pSBaXJvbi1neW06IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBpcm9uLWd5bTsgXFxu4pSDICDilKPilIFob21lLTA6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBob21lLTA7IFxcbuKUgyAg4pSj4pSBaG9tZS0xOiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgaG9tZS0xOyBcXG7ilIMgIOKUo+KUgWhvbWUtMjogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMjsgXFxu4pSDICDilKPilIFob21lLTM6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBob21lLTM7IFxcbuKUgyAg4pSj4pSBaG9tZS00OiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgaG9tZS00OyBcXG7ilIMgIOKUo+KUgWhvbWUtNTogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtNTsgXFxu4pSDICDilKPilIFob21lLTY6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBob21lLTY7IFxcbuKUgyAg4pSj4pSBaG9tZS03OiBjb25uZWN0IGhvbWU7IGNvbm5lY3QgaG9tZS03OyBcXG7ilIMgIOKUo+KUgWhvbWUtODogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtODsgXFxu4pSDICDilKPilIFob21lLTk6IGNvbm5lY3QgaG9tZTsgY29ubmVjdCBob21lLTk7IFxcbuKUgyAg4pSj4pSBaG9tZS0xMDogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMTA7IFxcbuKUgyAg4pSj4pSBaG9tZS0xMTogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMTE7IFxcbuKUgyAg4pSj4pSBaG9tZS0xMjogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMTI7IFxcbuKUgyAg4pSj4pSBaG9tZS0xMzogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMTM7IFxcbuKUgyAg4pSj4pSBaG9tZS0xNDogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMTQ7IFxcbuKUgyAg4pSj4pSBaG9tZS0xNTogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMTU7IFxcbuKUgyAg4pSj4pSBaG9tZS0xNjogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMTY7IFxcbuKUgyAg4pSj4pSBaG9tZS0xNzogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMTc7IFxcbuKUgyAg4pSj4pSBaG9tZS0xODogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMTg7IFxcbuKUgyAg4pSj4pSBaG9tZS0xOTogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMTk7IFxcbuKUgyAg4pSj4pSBaG9tZS0yMDogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMjA7IFxcbuKUgyAg4pSj4pSBaG9tZS0yMTogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMjE7IFxcbuKUgyAg4pSj4pSBaG9tZS0yMjogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMjI7IFxcbuKUgyAg4pSj4pSBaG9tZS0yMzogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMjM7IFxcbuKUgyAg4pSj4pSBaG9tZS0yNDogY29ubmVjdCBob21lOyBjb25uZWN0IGhvbWUtMjQ7IFxcbuKUgyAg4pSj4pSBZGFya3dlYjogY29ubmVjdCBob21lOyBjb25uZWN0IGRhcmt3ZWI7IFxcblwifX1dLFtcIklORk8udHh0XCIse1wiY3RvclwiOlwiVGV4dEZpbGVcIixcImRhdGFcIjp7XCJmaWxlbmFtZVwiOlwiSU5GTy50eHRcIixcInRleHRcIjpcIntzZXJ2ZXI6IFxcXCJ0aGUtaHViXFxcIiwgc3RhdHVzOiB7XFxcInJvb3RBY2Nlc3NcXFwiOnRydWUsXFxcInJlcXVpcmVkSGFja2luZ1xcXCI6MzEzLFxcXCJyZXF1aXJlZFBvcnRzXFxcIjoyLFxcXCJudWtlQXZhaWxhYmxlXFxcIjpmYWxzZX19XCJ9fV1dfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6dHJ1ZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjEsXCJoYWNrRGlmZmljdWx0eVwiOjEuMDE2LFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MSxcInNlcnZlckdyb3d0aFwiOjEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJlY29ycFwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJlY29ycFwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNjguNS44LjRcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjAsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiRUNvcnBcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJiLWFuZC1hXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo5OSxcImhhY2tEaWZmaWN1bHR5XCI6OTksXCJtaW5EaWZmaWN1bHR5XCI6MzMsXCJtb25leUF2YWlsYWJsZVwiOjM4NDIzNDEyMzk1LFwibW9uZXlNYXhcIjo5NjA1ODUzMDk4NzUsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MTM0MyxcInNlcnZlckdyb3d0aFwiOjk5LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwibWVnYWNvcnBcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtMTkyNzY4LmNjdFwiLFwidHlwZVwiOlwiUHJvcGVyIDItQ29sb3Jpbmcgb2YgYSBHcmFwaFwiLFwiZGF0YVwiOlsxMCxbWzUsOF0sWzQsOF0sWzMsN10sWzMsOF0sWzEsOV0sWzQsN10sWzIsN10sWzIsOV0sWzYsN10sWzAsOF1dXSxcInJld2FyZFwiOntcInR5cGVcIjozfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwibWVnYWNvcnBcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjU0LjQuNi42XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjowLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIk1lZ2FDb3JwXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiYi1hbmQtYVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6OTksXCJoYWNrRGlmZmljdWx0eVwiOjk5LFwibWluRGlmZmljdWx0eVwiOjMzLFwibW9uZXlBdmFpbGFibGVcIjo1NTI5NzQwMDc4OSxcIm1vbmV5TWF4XCI6MTM4MjQzNTAxOTcyNSxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxMjM5LFwic2VydmVyR3Jvd3RoXCI6OTksXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJiLWFuZC1hXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcImItYW5kLWFcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjEuMy4yLjVcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjAsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiQmFjaG1hbiAmIEFzc29jaWF0ZXNcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJrdWFpLWdvbmdcIixcImVjb3JwXCIsXCJtZWdhY29ycFwiLFwiZnVsY3J1bWFzc2V0c1wiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6NzMsXCJoYWNrRGlmZmljdWx0eVwiOjczLFwibWluRGlmZmljdWx0eVwiOjI0LFwibW9uZXlBdmFpbGFibGVcIjoyMDc3NTcwNDI4MSxcIm1vbmV5TWF4XCI6NTE5MzkyNjA3MDI1LFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEwMTAsXCJzZXJ2ZXJHcm93dGhcIjo4MCxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImJsYWRlXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcImJsYWRlXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI1MS40LjguNlwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6NjQsXCJtZXNzYWdlc1wiOltcImJleW9uZC1tYW4ubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiQmxhZGUgSW5kdXN0cmllc1wiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcIjRzaWdtYVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6OTIsXCJoYWNrRGlmZmljdWx0eVwiOjkyLFwibWluRGlmZmljdWx0eVwiOjMxLFwibW9uZXlBdmFpbGFibGVcIjoxNzYzMjExMjc4MyxcIm1vbmV5TWF4XCI6NDQwODAyODE5NTc1LFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEwMDksXCJzZXJ2ZXJHcm93dGhcIjo1NixcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcIm53b1wiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJud29cIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjQuNy45LjVcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjAsXCJtZXNzYWdlc1wiOltcInRoZS1oaWRkZW4td29ybGQubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiTldPXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wia3VhaS1nb25nXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo5OSxcImhhY2tEaWZmaWN1bHR5XCI6OTksXCJtaW5EaWZmaWN1bHR5XCI6MzMsXCJtb25leUF2YWlsYWJsZVwiOjIyOTI3NzI2MTY3LFwibW9uZXlNYXhcIjo1NzMxOTMxNTQxNzUsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MTEwMyxcInNlcnZlckdyb3d0aFwiOjkwLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiY2xhcmtpbmNcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtNTE5MjQ3LmNjdFwiLFwidHlwZVwiOlwiQWxnb3JpdGhtaWMgU3RvY2sgVHJhZGVyIElJSVwiLFwiZGF0YVwiOls0NywxNjcsNzAsMTcsMTYsMTcsMzYsMTE3LDE4OCwxOSwxMzcsNCwxODksMTY5LDE0MF0sXCJyZXdhcmRcIjp7XCJ0eXBlXCI6M319fV0sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcImNsYXJraW5jXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI0NS4yLjQuN1wiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MCxcIm1lc3NhZ2VzXCI6W1wiYmV5b25kLW1hbi5saXRcIixcImNvc3Qtb2YtaW1tb3J0YWxpdHkubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiQ2xhcmtlIEluY29ycG9yYXRlZFwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcIi5cIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjQ3LFwiaGFja0RpZmZpY3VsdHlcIjo0NyxcIm1pbkRpZmZpY3VsdHlcIjoxNixcIm1vbmV5QXZhaWxhYmxlXCI6MTgzODMxMzQwNzMsXCJtb25leU1heFwiOjQ1OTU3ODM1MTgyNSxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxMDE3LFwic2VydmVyR3Jvd3RoXCI6NTEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJvbW5pdGVrXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcIm9tbml0ZWtcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjMzLjUuNS4zXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjoxMjgsXCJtZXNzYWdlc1wiOltcImNvZGVkLWludGVsbGlnZW5jZS5saXRcIixcImhpc3Rvcnktb2Ytc3ludGhvaWRzLmxpdFwiXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIk9tbmlUZWsgSW5jb3Jwb3JhdGVkXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiZnVsY3J1bXRlY2hcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjk1LFwiaGFja0RpZmZpY3VsdHlcIjo5NSxcIm1pbkRpZmZpY3VsdHlcIjozMixcIm1vbmV5QXZhaWxhYmxlXCI6MTYwMzc4OTQ0MTIsXCJtb25leU1heFwiOjQwMDk0NzM2MDMwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjo5OTAsXCJzZXJ2ZXJHcm93dGhcIjo5NSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcIjRzaWdtYVwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCI0c2lnbWFcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjM3LjkuNy4xXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjowLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIkZvdXIgU2lnbWFcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJ2aXRhbGlmZVwiLFwiYmxhZGVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjcwLFwiaGFja0RpZmZpY3VsdHlcIjo3MCxcIm1pbkRpZmZpY3VsdHlcIjoyMyxcIm1vbmV5QXZhaWxhYmxlXCI6MTg5NjM0NDA1NjgsXCJtb25leU1heFwiOjQ3NDA4NjAxNDIwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxMDI3LFwic2VydmVyR3Jvd3RoXCI6OTIsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJrdWFpLWdvbmdcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwia3VhaS1nb25nXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI0NS41LjUuMVwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MCxcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJLdWFpR29uZyBJbnRlcm5hdGlvbmFsXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1widml0YWxpZmVcIixcImItYW5kLWFcIixcIm53b1wiLFwicG93ZXJob3VzZS1maXRuZXNzXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo5OSxcImhhY2tEaWZmaWN1bHR5XCI6OTksXCJtaW5EaWZmaWN1bHR5XCI6MzMsXCJtb25leUF2YWlsYWJsZVwiOjI5NjMwMTIyMjk5LFwibW9uZXlNYXhcIjo3NDA3NTMwNTc0NzUsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MTI5OSxcInNlcnZlckdyb3d0aFwiOjkyLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiZnVsY3J1bXRlY2hcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwiZnVsY3J1bXRlY2hcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjQxLjQuNC4xXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjoxMjgsXCJtZXNzYWdlc1wiOltcInNpbXVsYXRlZC1yZWFsaXR5LmxpdFwiXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIkZ1bGNydW0gVGVjaG5vbG9naWVzXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1widGl0YW4tbGFic1wiLFwib21uaXRla1wiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6OTEsXCJoYWNrRGlmZmljdWx0eVwiOjkxLFwibWluRGlmZmljdWx0eVwiOjMwLFwibW9uZXlBdmFpbGFibGVcIjoxNTg4MTQwODEyLFwibW9uZXlNYXhcIjozOTcwMzUyMDMwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxMDIzLFwic2VydmVyR3Jvd3RoXCI6OTMsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJmdWxjcnVtYXNzZXRzXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcImZ1bGNydW1hc3NldHNcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjQzLjIuNC45XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjowLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIkZ1bGNydW0gVGVjaG5vbG9naWVzXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiYi1hbmQtYVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6OTksXCJoYWNrRGlmZmljdWx0eVwiOjk5LFwibWluRGlmZmljdWx0eVwiOjMzLFwibW9uZXlBdmFpbGFibGVcIjoxMDAwMDAwLFwibW9uZXlNYXhcIjoyNTAwMDAwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxMTI3LFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcInN0b3JtdGVjaFwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJzdG9ybXRlY2hcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjIyLjEuNC40XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjowLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlN0b3JtIFRlY2hub2xvZ2llc1wiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcImFwcGxpZWQtZW5lcmdldGljc1wiLFwiLlwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6NzgsXCJoYWNrRGlmZmljdWx0eVwiOjc4LFwibWluRGlmZmljdWx0eVwiOjI2LFwibW9uZXlBdmFpbGFibGVcIjoxMDU2MTk4MjkyLFwibW9uZXlNYXhcIjoyNjQwNDk1NzMwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjo5MDUsXCJzZXJ2ZXJHcm93dGhcIjo4MyxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImRlZmNvbW1cIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwiZGVmY29tbVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNjcuNC41LjRcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjAsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiRGVmQ29tbVwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcImRlbHRhb25lXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo4OCxcImhhY2tEaWZmaWN1bHR5XCI6ODgsXCJtaW5EaWZmaWN1bHR5XCI6MjksXCJtb25leUF2YWlsYWJsZVwiOjg1MjU0MDQ1OSxcIm1vbmV5TWF4XCI6MjEzMTM1MTE0NzUsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MTAzNCxcInNlcnZlckdyb3d0aFwiOjU1LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiaW5mb2NvbW1cIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtNDk5NTIwLU5ldGJ1cm5lcnMuY2N0XCIsXCJ0eXBlXCI6XCJTcGlyYWxpemUgTWF0cml4XCIsXCJkYXRhXCI6W1syMSwxOCwyNSw4LDI5XSxbMjcsOSwyNSwzNSwzXSxbMTMsNDEsMTgsNDksNDFdLFs0OSwyMiwzMywxNSw0MV0sWzMsMTcsOSw0OCwyNl0sWzQ1LDQwLDM4LDE2LDddLFszOSwyMCwxMCwyOSwxNl0sWzE2LDE0LDE1LDQ2LDI3XSxbMjcsMTAsNiwyMCw0Ml0sWzUsNCw0Nyw3LDQzXSxbNSwzLDUwLDIyLDM0XSxbMTksMTYsMTEsMzMsNDhdLFsyNyw0MiwyMywyNiwyN10sWzEyLDUsNCwyLDM0XV0sXCJyZXdhcmRcIjp7XCJ0eXBlXCI6MCxcIm5hbWVcIjpcIk5ldGJ1cm5lcnNcIn19fV0sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcImluZm9jb21tXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI4Ni45LjguNVwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MCxcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJJbmZvQ29tbVwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcInVuaXYtZW5lcmd5XCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo3NCxcImhhY2tEaWZmaWN1bHR5XCI6NzQsXCJtaW5EaWZmaWN1bHR5XCI6MjUsXCJtb25leUF2YWlsYWJsZVwiOjcxMzg3ODkzNixcIm1vbmV5TWF4XCI6MTc4NDY5NzM0MDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6OTE3LFwic2VydmVyR3Jvd3RoXCI6NTQsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJoZWxpb3NcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwiaGVsaW9zXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCIxNi40LjYuOFwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltcImJleW9uZC1tYW4ubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiSGVsaW9zIExhYnNcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJydW40dGhlaDExMXpcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjg5LFwiaGFja0RpZmZpY3VsdHlcIjo4OSxcIm1pbkRpZmZpY3VsdHlcIjozMCxcIm1vbmV5QXZhaWxhYmxlXCI6NzMxMjI4NzI0LFwibW9uZXlNYXhcIjoxODI4MDcxODEwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjo4ODgsXCJzZXJ2ZXJHcm93dGhcIjo3NCxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcInZpdGFsaWZlXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcInZpdGFsaWZlXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI2NC43LjEuMVwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MTI4LFwibWVzc2FnZXNcIjpbXCJBLUdyZWVuLVRvbW9ycm93LmxpdFwiXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlZpdGFMaWZlXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1widGl0YW4tbGFic1wiLFwiNHNpZ21hXCIsXCJrdWFpLWdvbmdcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjg0LFwiaGFja0RpZmZpY3VsdHlcIjo4NCxcIm1pbkRpZmZpY3VsdHlcIjoyOCxcIm1vbmV5QXZhaWxhYmxlXCI6NzY0NjYxODg1LFwibW9uZXlNYXhcIjoxOTExNjU0NzEyNSxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjo4MDYsXCJzZXJ2ZXJHcm93dGhcIjo4MCxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImljYXJ1c1wiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC01NTYzMzctTml0ZVNlYy5jY3RcIixcInR5cGVcIjpcIkNvbXByZXNzaW9uIElJOiBMWiBEZWNvbXByZXNzaW9uXCIsXCJkYXRhXCI6XCI4YlhIeDRjNG43MzRZaVA3NTc1U1JwQzAzMTkzMDY1Z1ZTSTEwOXgzaGpQbERUbTA3Y01NTU1GZzUyMjFBNzUwMjZcIixcInJld2FyZFwiOntcInR5cGVcIjowLFwibmFtZVwiOlwiTml0ZVNlY1wifX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwiaWNhcnVzXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI5Ni45LjcuMFwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MCxcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJJY2FydXMgTWljcm9zeXN0ZW1zXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1widW5pdGFsaWZlXCIsXCJ6Yi1kZWZcIixcIm5vdmEtbWVkXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo4OCxcImhhY2tEaWZmaWN1bHR5XCI6ODgsXCJtaW5EaWZmaWN1bHR5XCI6MjksXCJtb25leUF2YWlsYWJsZVwiOjkwODI2NTU0NyxcIm1vbmV5TWF4XCI6MjI3MDY2Mzg2NzUsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6ODcyLFwic2VydmVyR3Jvd3RoXCI6OTAsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJ1bml2LWVuZXJneVwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJ1bml2LWVuZXJneVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNzAuNS4wLjFcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlVuaXZlcnNhbCBFbmVyZ3lcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJvbW5pYVwiLFwiaW5mb2NvbW1cIixcInRhaXlhbmctZGlnaXRhbFwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6ODAsXCJoYWNrRGlmZmljdWx0eVwiOjgwLFwibWluRGlmZmljdWx0eVwiOjI3LFwibW9uZXlBdmFpbGFibGVcIjoxMTYxMDk0MTE2LFwibW9uZXlNYXhcIjoyOTAyNzM1MjkwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NCxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjo4NTksXCJzZXJ2ZXJHcm93dGhcIjo4NixcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcInRpdGFuLWxhYnNcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtMTY4MjY0LmNjdFwiLFwidHlwZVwiOlwiUHJvcGVyIDItQ29sb3Jpbmcgb2YgYSBHcmFwaFwiLFwiZGF0YVwiOlsxMCxbWzIsNV0sWzEsNV0sWzAsN10sWzYsOV0sWzEsNl0sWzIsNl0sWzIsM10sWzAsNl0sWzAsNV0sWzUsOF1dXSxcInJld2FyZFwiOntcInR5cGVcIjoxfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwidGl0YW4tbGFic1wiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNzguNS4zLjZcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjY0LFwibWVzc2FnZXNcIjpbXCJjb2RlZC1pbnRlbGxpZ2VuY2UubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiVGl0YW4gTGFib3JhdG9yaWVzXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wibm92YS1tZWRcIixcImZ1bGNydW10ZWNoXCIsXCJ2aXRhbGlmZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6NzYsXCJoYWNrRGlmZmljdWx0eVwiOjc2LFwibWluRGlmZmljdWx0eVwiOjI1LFwibW9uZXlBdmFpbGFibGVcIjo3NjA0NzU1NjUsXCJtb25leU1heFwiOjE5MDExODg5MTI1LFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjg2OSxcInNlcnZlckdyb3d0aFwiOjczLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwibWljcm9keW5lXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W3tcImN0b3JcIjpcIkNvZGluZ0NvbnRyYWN0XCIsXCJkYXRhXCI6e1widHJpZXNcIjowLFwiZm5cIjpcImNvbnRyYWN0LTU2MTYyMC5jY3RcIixcInR5cGVcIjpcIlByb3BlciAyLUNvbG9yaW5nIG9mIGEgR3JhcGhcIixcImRhdGFcIjpbMTMsW1sxLDExXSxbMSw0XSxbMCw3XSxbNCw1XSxbNywxMV0sWzMsNV0sWzAsM10sWzAsNF0sWzAsOF0sWzMsNl0sWzExLDEyXSxbMyw5XSxbMywxMF0sWzYsN10sWzQsMTBdXV0sXCJyZXdhcmRcIjp7XCJ0eXBlXCI6M319fV0sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcIm1pY3JvZHluZVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMzkuNS4zLjBcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjY0LFwibWVzc2FnZXNcIjpbXCJzeW50aGV0aWMtbXVzY2xlcy5saXRcIl0sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJNaWNyb2R5bmUgVGVjaG5vbG9naWVzXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1widGFpeWFuZy1kaWdpdGFsXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo2NSxcImhhY2tEaWZmaWN1bHR5XCI6NjUsXCJtaW5EaWZmaWN1bHR5XCI6MjIsXCJtb25leUF2YWlsYWJsZVwiOjU1NjIzMTQ0NCxcIm1vbmV5TWF4XCI6MTM5MDU3ODYxMDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6ODAzLFwic2VydmVyR3Jvd3RoXCI6ODEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJ0YWl5YW5nLWRpZ2l0YWxcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtNDc2OTgxLmNjdFwiLFwidHlwZVwiOlwiSGFtbWluZ0NvZGVzOiBJbnRlZ2VyIHRvIEVuY29kZWQgQmluYXJ5XCIsXCJkYXRhXCI6NDksXCJyZXdhcmRcIjp7XCJ0eXBlXCI6M319fV0sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcInRhaXlhbmctZGlnaXRhbFwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiOTguNi41LjdcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjAsXCJtZXNzYWdlc1wiOltcIkEtR3JlZW4tVG9tb3Jyb3cubGl0XCIsXCJicmlnaHRlci10aGFuLXRoZS1zdW4ubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiVGFpeWFuZyBEaWdpdGFsXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1widW5pdi1lbmVyZ3lcIixcIm1pY3JvZHluZVwiLFwicnVuNHRoZWgxMTF6XCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo3MSxcImhhY2tEaWZmaWN1bHR5XCI6NzEsXCJtaW5EaWZmaWN1bHR5XCI6MjQsXCJtb25leUF2YWlsYWJsZVwiOjg0NjQ5MjQ4MCxcIm1vbmV5TWF4XCI6MjExNjIzMTIwMDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6ODg2LFwic2VydmVyR3Jvd3RoXCI6NzcsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJnYWxhY3RpYy1jeWJlclwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC03MDIwOTYtTmV0YnVybmVycy5jY3RcIixcInR5cGVcIjpcIkNvbXByZXNzaW9uIEk6IFJMRSBDb21wcmVzc2lvblwiLFwiZGF0YVwiOlwiTk5za3p6enp6enpJZFBSUm5JSUlJSUlJSUlJSVdXTUJCQkJCQkJCQkNDVlBNNTV0dG1tbW1tbW1tbW1tbWpqODg4NjZycnJycnJycnJycnJQZWVlZWVlZWU4ODg4ODg4ODhcIixcInJld2FyZFwiOntcInR5cGVcIjowLFwibmFtZVwiOlwiTmV0YnVybmVyc1wifX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwiZ2FsYWN0aWMtY3liZXJcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjIuMS45LjJcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjAsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiR2FsYWN0aWMgQ3liZXJzeXN0ZW1zXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiYWxwaGEtZW50XCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo1NSxcImhhY2tEaWZmaWN1bHR5XCI6NTUsXCJtaW5EaWZmaWN1bHR5XCI6MTgsXCJtb25leUF2YWlsYWJsZVwiOjc1NDc5NzA1NyxcIm1vbmV5TWF4XCI6MTg4Njk5MjY0MjUsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6ODI3LFwic2VydmVyR3Jvd3RoXCI6NzEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJhZXJvY29ycFwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC01MzQzMjAuY2N0XCIsXCJ0eXBlXCI6XCJVbmlxdWUgUGF0aHMgaW4gYSBHcmlkIElcIixcImRhdGFcIjpbNCw0XSxcInJld2FyZFwiOntcInR5cGVcIjozfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwiYWVyb2NvcnBcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjQ1LjQuNC45XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjowLFwibWVzc2FnZXNcIjpbXCJtYW4tYW5kLW1hY2hpbmUubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiQWVyb0NvcnBcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJhbHBoYS1lbnRcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjg3LFwiaGFja0RpZmZpY3VsdHlcIjo4NyxcIm1pbkRpZmZpY3VsdHlcIjoyOSxcIm1vbmV5QXZhaWxhYmxlXCI6MTA2MDQwNTUxOSxcIm1vbmV5TWF4XCI6MjY1MTAxMzc5NzUsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6OTA1LFwic2VydmVyR3Jvd3RoXCI6NTYsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJvbW5pYVwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJvbW5pYVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNDYuNS40LjBcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjE2LFwibWVzc2FnZXNcIjpbXCJoaXN0b3J5LW9mLXN5bnRob2lkcy5saXRcIl0sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJPbW5pYSBDeWJlcnN5c3RlbXNcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJnbG9iYWwtcGhhcm1cIixcInVuaXYtZW5lcmd5XCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo5NCxcImhhY2tEaWZmaWN1bHR5XCI6OTQsXCJtaW5EaWZmaWN1bHR5XCI6MzEsXCJtb25leUF2YWlsYWJsZVwiOjk5NTQ4Njk3NyxcIm1vbmV5TWF4XCI6MjQ4ODcxNzQ0MjUsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6OTI0LFwic2VydmVyR3Jvd3RoXCI6NjUsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJ6Yi1kZWZcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtNTIwNTk4LU5ldGJ1cm5lcnMuY2N0XCIsXCJ0eXBlXCI6XCJQcm9wZXIgMi1Db2xvcmluZyBvZiBhIEdyYXBoXCIsXCJkYXRhXCI6WzEwLFtbMSw4XSxbMSw1XSxbMiw2XSxbMyw0XSxbMCwzXSxbNiw5XSxbNiw4XSxbMSw0XSxbNSw2XSxbMSw5XSxbMSw3XV1dLFwicmV3YXJkXCI6e1widHlwZVwiOjAsXCJuYW1lXCI6XCJOZXRidXJuZXJzXCJ9fX0se1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtMTUyODczLmNjdFwiLFwidHlwZVwiOlwiRmluZCBBbGwgVmFsaWQgTWF0aCBFeHByZXNzaW9uc1wiLFwiZGF0YVwiOltcIjMzNjE5NzMwMzc5XCIsLTEzXSxcInJld2FyZFwiOntcInR5cGVcIjoxfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwiemItZGVmXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI0MS4zLjEuN1wiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MCxcIm1lc3NhZ2VzXCI6W1wic3ludGhldGljLW11c2NsZXMubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiWkIgRGVmZW5zZSBJbmR1c3RyaWVzXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaWNhcnVzXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo2MSxcImhhY2tEaWZmaWN1bHR5XCI6NjEsXCJtaW5EaWZmaWN1bHR5XCI6MjAsXCJtb25leUF2YWlsYWJsZVwiOjk2OTIxMTU4MCxcIm1vbmV5TWF4XCI6MjQyMzAyODk1MDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjQsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6ODA2LFwic2VydmVyR3Jvd3RoXCI6NjgsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJhcHBsaWVkLWVuZXJnZXRpY3NcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtMzAwNTIwLU5pdGVTZWMuY2N0XCIsXCJ0eXBlXCI6XCJHZW5lcmF0ZSBJUCBBZGRyZXNzZXNcIixcImRhdGFcIjpcIjE2OTE2NTIxMDIzMVwiLFwicmV3YXJkXCI6e1widHlwZVwiOjAsXCJuYW1lXCI6XCJOaXRlU2VjXCJ9fX0se1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtNzEzMjcxLmNjdFwiLFwidHlwZVwiOlwiTWVyZ2UgT3ZlcmxhcHBpbmcgSW50ZXJ2YWxzXCIsXCJkYXRhXCI6W1sxOCwyNV0sWzEsMTBdLFsxNCwyMV0sWzEyLDE3XSxbMTIsMTRdLFs1LDEzXSxbMTAsMTVdLFszLDEzXSxbMTMsMjFdXSxcInJld2FyZFwiOntcInR5cGVcIjozfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwiYXBwbGllZC1lbmVyZ2V0aWNzXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCIxMy4zLjguN1wiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MCxcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJBcHBsaWVkIEVuZXJnZXRpY3NcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJub3ZhLW1lZFwiLFwic3Rvcm10ZWNoXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo2MyxcImhhY2tEaWZmaWN1bHR5XCI6NjMsXCJtaW5EaWZmaWN1bHR5XCI6MjEsXCJtb25leUF2YWlsYWJsZVwiOjgwNTUwNjAwNCxcIm1vbmV5TWF4XCI6MjAxMzc2NTAxMDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjQsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6Nzc1LFwic2VydmVyR3Jvd3RoXCI6NzEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJzb2xhcmlzXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W3tcImN0b3JcIjpcIkNvZGluZ0NvbnRyYWN0XCIsXCJkYXRhXCI6e1widHJpZXNcIjowLFwiZm5cIjpcImNvbnRyYWN0LTk1NTMwNS5jY3RcIixcInR5cGVcIjpcIkNvbXByZXNzaW9uIElJSTogTFogQ29tcHJlc3Npb25cIixcImRhdGFcIjpcInhSZjQ0QWlrcmRSZkVyUHBra2tra2tra2trY2tra2Nra2tjYzZGNDA0c2ZuN0tzT3k4djExajh2MTFqbThmS1hYWFhYWFhYWFhcIixcInJld2FyZFwiOntcInR5cGVcIjozfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwic29sYXJpc1wiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiOTkuNC4wLjNcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjY0LFwibWVzc2FnZXNcIjpbXCJBLUdyZWVuLVRvbW9ycm93LmxpdFwiLFwidGhlLWZhaWxlZC1mcm9udGllci5saXRcIl0sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJTb2xhcmlzIFNwYWNlIFN5c3RlbXNcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJkZWx0YW9uZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6NzQsXCJoYWNrRGlmZmljdWx0eVwiOjc0LFwibWluRGlmZmljdWx0eVwiOjI1LFwibW9uZXlBdmFpbGFibGVcIjo4MzY4MjA2MzMsXCJtb25leU1heFwiOjIwOTIwNTE1ODI1LFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjc2NixcInNlcnZlckdyb3d0aFwiOjc4LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiZGVsdGFvbmVcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtNTM3OTQuY2N0XCIsXCJ0eXBlXCI6XCJBbGdvcml0aG1pYyBTdG9jayBUcmFkZXIgSVwiLFwiZGF0YVwiOls0Myw3LDE3MSwzMywxMDMsNywxOSw0Myw1OSwxNzldLFwicmV3YXJkXCI6e1widHlwZVwiOjN9fX0se1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtMzU5MzY1LU5ldGJ1cm5lcnMuY2N0XCIsXCJ0eXBlXCI6XCJDb21wcmVzc2lvbiBJSUk6IExaIENvbXByZXNzaW9uXCIsXCJkYXRhXCI6XCJUNlFqekRWZW5yVURWZW5yVURWZVVEVmVVRFZMUDZjRHIxVUlTMDA4WFc1SVN6WElJTDJyNXVMMnI1dUx6MXoxejF6OFc4VzhXOFc4V1pnXCIsXCJyZXdhcmRcIjp7XCJ0eXBlXCI6MCxcIm5hbWVcIjpcIk5ldGJ1cm5lcnNcIn19fV0sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcImRlbHRhb25lXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI4LjQuOC43XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjowLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIkRlbHRhT25lXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiZ2xvYmFsLXBoYXJtXCIsXCJkZWZjb21tXCIsXCJzb2xhcmlzXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo3NSxcImhhY2tEaWZmaWN1bHR5XCI6NzUsXCJtaW5EaWZmaWN1bHR5XCI6MjUsXCJtb25leUF2YWlsYWJsZVwiOjE1MjYxOTU4NjksXCJtb25leU1heFwiOjM4MTU0ODk2NzI1LFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjg3NixcInNlcnZlckdyb3d0aFwiOjUzLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiZ2xvYmFsLXBoYXJtXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcImdsb2JhbC1waGFybVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNDAuMC4yLjhcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjgsXCJtZXNzYWdlc1wiOltcIkEtR3JlZW4tVG9tb3Jyb3cubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiR2xvYmFsIFBoYXJtYWNldXRpY2Fsc1wiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcImFscGhhLWVudFwiLFwib21uaWFcIixcImRlbHRhb25lXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo3OCxcImhhY2tEaWZmaWN1bHR5XCI6NzgsXCJtaW5EaWZmaWN1bHR5XCI6MjYsXCJtb25leUF2YWlsYWJsZVwiOjE2NjUxNDE4MTksXCJtb25leU1heFwiOjQxNjI4NTQ1NDc1LFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo0LFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjc1NCxcInNlcnZlckdyb3d0aFwiOjgxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwibm92YS1tZWRcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtOTY4ODQuY2N0XCIsXCJ0eXBlXCI6XCJBbGdvcml0aG1pYyBTdG9jayBUcmFkZXIgSVwiLFwiZGF0YVwiOls1NywxODUsMTM1LDE4LDg2LDI3LDE5NiwxMjIsMTc4LDE1MCwzNCwyNiwxMDgsNzEsMTgwLDM4LDQ0LDE5NSw3NywxMDQsNSwxNTcsMjUsMjcsMTg4XSxcInJld2FyZFwiOntcInR5cGVcIjozfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwibm92YS1tZWRcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjYxLjYuMC40XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjowLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIk5vdmEgTWVkaWNhbFwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcImljYXJ1c1wiLFwidGl0YW4tbGFic1wiLFwiYXBwbGllZC1lbmVyZ2V0aWNzXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo3OSxcImhhY2tEaWZmaWN1bHR5XCI6NzksXCJtaW5EaWZmaWN1bHR5XCI6MjYsXCJtb25leUF2YWlsYWJsZVwiOjExNzYzMzcxMzUsXCJtb25leU1heFwiOjI5NDA4NDI4Mzc1LFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo0LFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjgzMCxcInNlcnZlckdyb3d0aFwiOjc5LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiemV1cy1tZWRcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwiemV1cy1tZWRcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjI4LjAuNC40XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjowLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlpldXMgTWVkaWNhbFwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcInVuaXRhbGlmZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6NzEsXCJoYWNrRGlmZmljdWx0eVwiOjcxLFwibWluRGlmZmljdWx0eVwiOjI0LFwibW9uZXlBdmFpbGFibGVcIjoxNDU1OTE3NDIxLFwibW9uZXlNYXhcIjozNjM5NzkzNTUyNSxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjo4MTMsXCJzZXJ2ZXJHcm93dGhcIjo4MCxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcInVuaXRhbGlmZVwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC02MDExNjUtTmV0YnVybmVycy5jY3RcIixcInR5cGVcIjpcIkVuY3J5cHRpb24gSTogQ2Flc2FyIENpcGhlclwiLFwiZGF0YVwiOltcIk1FRElBIE1PVVNFIFNIRUxMIExPR0lDIE1PREVNXCIsMTRdLFwicmV3YXJkXCI6e1widHlwZVwiOjAsXCJuYW1lXCI6XCJOZXRidXJuZXJzXCJ9fX1dLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJ1bml0YWxpZmVcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjU0LjkuNC4wXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjoxNixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJVbml0YUxpZmUgR3JvdXBcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJzbmFwLWZpdG5lc3NcIixcImljYXJ1c1wiLFwiemV1cy1tZWRcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjcxLFwiaGFja0RpZmZpY3VsdHlcIjo3MSxcIm1pbkRpZmZpY3VsdHlcIjoyNCxcIm1vbmV5QXZhaWxhYmxlXCI6MTA2MTA3MTAzOCxcIm1vbmV5TWF4XCI6MjY1MjY3NzU5NTAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjQsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6Nzg5LFwic2VydmVyR3Jvd3RoXCI6NzYsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJsZXhvLWNvcnBcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtNDUwNDU5LmNjdFwiLFwidHlwZVwiOlwiQWxnb3JpdGhtaWMgU3RvY2sgVHJhZGVyIElcIixcImRhdGFcIjpbNzcsMTg5LDk0LDEzOSw4NywxODgsMTc3LDExOCw3MSwxOTksMywxNDgsMTAsMjksNSwxMjIsMTY2LDE4OSw3MV0sXCJyZXdhcmRcIjp7XCJ0eXBlXCI6M319fV0sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcImxleG8tY29ycFwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMTMuOS45LjRcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjE2LFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIkxleG9Db3JwXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wic3lzY29yZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6NjYsXCJoYWNrRGlmZmljdWx0eVwiOjY2LFwibWluRGlmZmljdWx0eVwiOjIyLFwibW9uZXlBdmFpbGFibGVcIjo3OTA3MzI4NTUsXCJtb25leU1heFwiOjE5NzY4MzIxMzc1LFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo0LFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjY2MixcInNlcnZlckdyb3d0aFwiOjU5LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwicmhvLWNvbnN0cnVjdGlvblwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjpmYWxzZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwicmhvLWNvbnN0cnVjdGlvblwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMi45LjMuMVwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MTYsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiUmhvIENvbnN0cnVjdGlvblwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcInN1bW1pdC11bmlcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo1NSxcImhhY2tEaWZmaWN1bHR5XCI6NTUsXCJtaW5EaWZmaWN1bHR5XCI6MTgsXCJtb25leUF2YWlsYWJsZVwiOjUwODE0MTY3NCxcIm1vbmV5TWF4XCI6MTI3MDM1NDE4NTAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjMsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6NDg0LFwic2VydmVyR3Jvd3RoXCI6NTAsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJhbHBoYS1lbnRcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtOTIzMDIxLmNjdFwiLFwidHlwZVwiOlwiU2hvcnRlc3QgUGF0aCBpbiBhIEdyaWRcIixcImRhdGFcIjpbWzAsMCwxLDAsMCwwLDEsMF0sWzAsMCwwLDAsMSwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMV0sWzAsMCwwLDAsMCwxLDEsMV0sWzEsMCwxLDAsMSwxLDAsMF0sWzAsMCwwLDAsMCwwLDAsMV0sWzAsMCwwLDEsMSwwLDAsMF0sWzEsMSwwLDEsMCwwLDAsMV0sWzAsMCwwLDAsMCwwLDEsMF0sWzAsMCwwLDAsMCwwLDEsMF1dLFwicmV3YXJkXCI6e1widHlwZVwiOjF9fX1dLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJhbHBoYS1lbnRcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjI1LjEuMy41XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W1wic2VjdG9yLTEyLWNyaW1lLmxpdFwiXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIkFscGhhIEVudGVycHJpc2VzXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wicm90aG1hbi11bmlcIixcImdhbGFjdGljLWN5YmVyXCIsXCJhZXJvY29ycFwiLFwiZ2xvYmFsLXBoYXJtXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo1MCxcImhhY2tEaWZmaWN1bHR5XCI6NTAsXCJtaW5EaWZmaWN1bHR5XCI6MTcsXCJtb25leUF2YWlsYWJsZVwiOjYzMTYxNzExNixcIm1vbmV5TWF4XCI6MTU3OTA0Mjc5MDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjQsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6NTM2LFwic2VydmVyR3Jvd3RoXCI6NTQsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJhZXZ1bS1wb2xpY2VcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwiYWV2dW0tcG9saWNlXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI5NC44LjUuMFwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiQWV2dW0gUG9saWNlIEhlYWRxdWFydGVyc1wiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcInJvdGhtYW4tdW5pXCIsXCJzbmFwLWZpdG5lc3NcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjgwLFwiaGFja0RpZmZpY3VsdHlcIjo4MCxcIm1pbkRpZmZpY3VsdHlcIjoyNyxcIm1vbmV5QXZhaWxhYmxlXCI6MjQ0MDU5MTkwLFwibW9uZXlNYXhcIjo2MTAxNDc5NzUwLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo0LFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjQyMyxcInNlcnZlckdyb3d0aFwiOjQ0LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwicm90aG1hbi11bmlcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwicm90aG1hbi11bmlcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjk0LjYuNi4wXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W1wic2VjcmV0LXNvY2lldGllcy5saXRcIixcInRoZS1mYWlsZWQtZnJvbnRpZXIubGl0XCIsXCJ0ZW5zaW9ucy1pbi10ZWNoLXJhY2UubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiUm90aG1hbiBVbml2ZXJzaXR5XCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiYXZtbml0ZS0wMmhcIixcImFscGhhLWVudFwiLFwiYWV2dW0tcG9saWNlXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo0OCxcImhhY2tEaWZmaWN1bHR5XCI6NDgsXCJtaW5EaWZmaWN1bHR5XCI6MTYsXCJtb25leUF2YWlsYWJsZVwiOjE5MjY4MjE3NyxcIm1vbmV5TWF4XCI6NDgxNzA1NDQyNSxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6MyxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjozODksXCJzZXJ2ZXJHcm93dGhcIjo0MixcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcInpiLWluc3RpdHV0ZVwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC0zNjQ2ODIuY2N0XCIsXCJ0eXBlXCI6XCJBbGdvcml0aG1pYyBTdG9jayBUcmFkZXIgSVwiLFwiZGF0YVwiOls2LDE2MSw0MywxNjYsMTMwLDExNiw0NywxODUsMTI4LDQxLDMzLDEyMiwxNDIsMTA0LDgzLDMsODUsMTU1LDEyMCw0NSwxMzAsNzAsMzIsMTQsMTAyLDEzLDExMywxMjEsNTQsMTE0LDE5OCwxMDIsMTM0LDEyMywyOCwxMzksNjQsMzYsOTksOTYsMTI1XSxcInJld2FyZFwiOntcInR5cGVcIjozfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcInpiLWluc3RpdHV0ZVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMjMuNC42LjlcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlpCIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5XCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiY3J1c2gtZml0bmVzc1wiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjcwLFwiaGFja0RpZmZpY3VsdHlcIjo3MCxcIm1pbkRpZmZpY3VsdHlcIjoyMyxcIm1vbmV5QXZhaWxhYmxlXCI6MTAxMzYyNTY3NCxcIm1vbmV5TWF4XCI6MjUzNDA2NDE4NTAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6Nzc0LFwic2VydmVyR3Jvd3RoXCI6NzUsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJzdW1taXQtdW5pXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJzdW1taXQtdW5pXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCIyNi43LjguNlwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MTYsXCJtZXNzYWdlc1wiOltcInNlY3JldC1zb2NpZXRpZXMubGl0XCIsXCJ0aGUtZmFpbGVkLWZyb250aWVyLmxpdFwiLFwic3ludGhldGljLW11c2NsZXMubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiU3VtbWl0IFVuaXZlcnNpdHlcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJqb2huc29uLW9ydGhvXCIsXCJyaG8tY29uc3RydWN0aW9uXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6NTQsXCJoYWNrRGlmZmljdWx0eVwiOjU0LFwibWluRGlmZmljdWx0eVwiOjE4LFwibW9uZXlBdmFpbGFibGVcIjoyNTIyMjMxMTQsXCJtb25leU1heFwiOjYzMDU1Nzc4NTAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjMsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6NDI3LFwic2VydmVyR3Jvd3RoXCI6NTEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJzeXNjb3JlXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W3tcImN0b3JcIjpcIkNvZGluZ0NvbnRyYWN0XCIsXCJkYXRhXCI6e1widHJpZXNcIjowLFwiZm5cIjpcImNvbnRyYWN0LTQ5NjM5OS5jY3RcIixcInR5cGVcIjpcIkVuY3J5cHRpb24gSTogQ2Flc2FyIENpcGhlclwiLFwiZGF0YVwiOltcIlBBU1RFIENMT1VEIExPR0lDIExPR0lOIENBQ0hFXCIsMjJdLFwicmV3YXJkXCI6e1widHlwZVwiOjF9fX0se1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtNTQ0NzkuY2N0XCIsXCJ0eXBlXCI6XCJBcnJheSBKdW1waW5nIEdhbWVcIixcImRhdGFcIjpbMCw4LDksNywzLDcsNSw2LDAsMiw2LDEwLDAsNywxMCw0LDgsOSwyLDIsMCw0LDUsMTAsN10sXCJyZXdhcmRcIjp7XCJ0eXBlXCI6M319fSx7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC04NTE5NTcuY2N0XCIsXCJ0eXBlXCI6XCJIYW1taW5nQ29kZXM6IEVuY29kZWQgQmluYXJ5IHRvIEludGVnZXJcIixcImRhdGFcIjpcIjAxMTAxMDAwMDExMTAxMTAxMDExMDEwMTExMTEwMDAxXCIsXCJyZXdhcmRcIjp7XCJ0eXBlXCI6M319fSx7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC0zMTQzMDcuY2N0XCIsXCJ0eXBlXCI6XCJGaW5kIExhcmdlc3QgUHJpbWUgRmFjdG9yXCIsXCJkYXRhXCI6MzU1MjUyNjM2LFwicmV3YXJkXCI6e1widHlwZVwiOjN9fX1dLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJzeXNjb3JlXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI3OS4wLjQuOFwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MCxcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJTeXNDb3JlIFNlY3VyaXRpZXNcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJ0aGUtaHViXCIsXCJsZXhvLWNvcnBcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjc3LFwiaGFja0RpZmZpY3VsdHlcIjo3NyxcIm1pbkRpZmZpY3VsdHlcIjoyNixcIm1vbmV5QXZhaWxhYmxlXCI6NTMxMjY2MTc5LFwibW9uZXlNYXhcIjoxMzI4MTY1NDQ3NSxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NCxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjo2NDIsXCJzZXJ2ZXJHcm93dGhcIjo2NCxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImNhdGFseXN0XCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W3tcImN0b3JcIjpcIkNvZGluZ0NvbnRyYWN0XCIsXCJkYXRhXCI6e1widHJpZXNcIjowLFwiZm5cIjpcImNvbnRyYWN0LTQ3MjQxMS5jY3RcIixcInR5cGVcIjpcIlNwaXJhbGl6ZSBNYXRyaXhcIixcImRhdGFcIjpbWzI0LDUwLDE2LDI4LDUwLDEzXV0sXCJyZXdhcmRcIjp7XCJ0eXBlXCI6M319fV0sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJjYXRhbHlzdFwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMzAuMS43LjRcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXCJ0ZW5zaW9ucy1pbi10ZWNoLXJhY2UubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiQ2F0YWx5c3QgVmVudHVyZXNcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJuZXRsaW5rXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6NjcsXCJoYWNrRGlmZmljdWx0eVwiOjY3LFwibWluRGlmZmljdWx0eVwiOjIyLFwibW9uZXlBdmFpbGFibGVcIjo0MTMxNzUwODAsXCJtb25leU1heFwiOjEwMzI5Mzc3MDAwLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjozLFwib3BlblBvcnRDb3VudFwiOjAsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjQzNCxcInNlcnZlckdyb3d0aFwiOjM3LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwidGhlLWh1YlwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC0xMjAyMTMuY2N0XCIsXCJ0eXBlXCI6XCJBbGdvcml0aG1pYyBTdG9jayBUcmFkZXIgSUlcIixcImRhdGFcIjpbMTcwLDEzNSw5Miw1Miw5OSw4OCwxODYsMTMsMTgwLDE2NSwxMywxNjcsMTgxLDU5LDk4LDE4MSwxMDYsNTcsNjQsNywxNzAsMzcsMTcwLDExOCwxMjAsMTc4LDEwNywxNSwxOTgsMTg0LDM1LDYzLDE3NSwxMDEsODQsMTA4LDI1LDU5LDE3MywxNzEsMTkzLDE2OSwxMTQsMTc5LDEyNCwxMjRdLFwicmV3YXJkXCI6e1widHlwZVwiOjF9fX1dLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcInRoZS1odWJcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjUwLjcuOC4wXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjoxNixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJUaGUgSHViXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wic2ltcGxlLWhhY2suanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG5cXHRucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG5cXHRhc3luYyBmdW5jdGlvbiB3cml0ZUxvZyh0eXBlLCBvYmopIHtcXG5cXHRcXHRsZXQgdGltZU5vdyA9IG5ldyBEYXRlKCk7XFxuXFx0XFx0bGV0IHllYXIgPSB0aW1lTm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMik7XFxuXFx0XFx0bGV0IG1vbnRoID0gKHRpbWVOb3cuZ2V0TW9udGgoKSA8IDkgPyAnMCcgOiAnJykgKyAodGltZU5vdy5nZXRNb250aCgpICsgMSk7XFxuXFx0XFx0bGV0IGRheSA9ICh0aW1lTm93LmdldERhdGUoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXREYXRlKCk7XFxuXFx0XFx0bGV0IGhvdXIgPSAodGltZU5vdy5nZXRIb3VycygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldEhvdXJzKCk7XFxuXFx0XFx0bGV0IG1pbnV0ZSA9ICh0aW1lTm93LmdldE1pbnV0ZXMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRNaW51dGVzKCk7XFxuXFx0XFx0bGV0IHNlY29uZCA9ICh0aW1lTm93LmdldFNlY29uZHMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRTZWNvbmRzKCk7XFxuXFx0XFx0bGV0IHRpbWVzdGFtcCA9IGAke3llYXJ9JHttb250aH0ke2RheX1fJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XFxuXFx0XFx0YXdhaXQgbnMudHJ5V3JpdGVQb3J0KDEsIGB0JHt0aW1lc3RhbXB9XyR7dHlwZX0gPSAke29ian07XFxcXG5gKTtcXG5cXG5cXHRcXHRpZiAoWydFUlJPUicsICdURVJNSU5BTCddLmluZGV4T2YodHlwZSkgIT0gLTEpIG5zLnRwcmludChgJHt0aW1lc3RhbXB9ICR7dHlwZX0gPSAke29ian1gKTtcXG5cXHR9XFxuXFxuXFx0bGV0IHNlcnZlciA9IG5zLmFyZ3NbMF07XFxuXFx0bGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkoc2VydmVyKTtcXG5cXHRsZXQgbWluU2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJNaW5TZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0bGV0IGxvb3AgPSAwO1xcblxcdGxldCBwcmV2aW91c01vbmV5ID0gMDtcXG5cXG5cXHR3aGlsZSAobWF4TW9uZXkgIT0gMCkge1xcblxcdFxcdGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdGxldCBjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFxuXFx0XFx0bGV0IGhhY2tlZE1vbmV5ID0gMDtcXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5ID4gMC4xICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHRoYWNrZWRNb25leSA9IGF3YWl0IG5zLmhhY2soc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5IDwgMC45ICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHR3aGlsZSAoY3VycmVudE1vbmV5IDw9IHByZXZpb3VzTW9uZXkpIHtcXG5cXHRcXHRcXHRcXHRhd2FpdCBucy5ncm93KHNlcnZlcik7XFxuXFx0XFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdFxcdHByZXZpb3VzTW9uZXkgPSBjdXJyZW50TW9uZXk7XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRTZWN1cml0eSA+IDIgKiBtaW5TZWN1cml0eSkge1xcblxcdFxcdFxcdGF3YWl0IG5zLndlYWtlbihzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0bnMucHJpbnQoYHtsb29wOiAkeysrbG9vcH0sIGhhY2s6ICR7TWF0aC5mbG9vcihoYWNrZWRNb25leSl9LCBtb25leTogJHtNYXRoLmZsb29yKGN1cnJlbnRNb25leSl9IC8gJHtNYXRoLmZsb29yKG1heE1vbmV5KX0gPT0gJHsoKGN1cnJlbnRNb25leSAvIG1heE1vbmV5KSAqIDEwMCkudG9GaXhlZCgyKX0sIHNlY3VyaXR5OiAke2N1cnJlbnRTZWN1cml0eS50b0ZpeGVkKDIpfSAvICR7TWF0aC5mbG9vcihtaW5TZWN1cml0eSl9ID09ICR7KChjdXJyZW50U2VjdXJpdHkgLyBtaW5TZWN1cml0eSkgKiAxMDApLnRvRml4ZWQoNCl9fWApO1xcblxcdFxcdGF3YWl0IG5zLnNsZWVwKDUwKTtcXG5cXHR9XFxufVwiLFwiZmlsZW5hbWVcIjpcInNpbXBsZS1oYWNrLmpzXCIsXCJzZXJ2ZXJcIjpcInRoZS1odWJcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcIm5lby1uZXRcIixcInN5c2NvcmVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjQwLFwiaGFja0RpZmZpY3VsdHlcIjo0NS43MzE5OTk5OTk5OTk4MzYsXCJtaW5EaWZmaWN1bHR5XCI6MTMsXCJtb25leUF2YWlsYWJsZVwiOjQ2MjE0OTY4NC4yMDgwMjEzLFwibW9uZXlNYXhcIjo0MDA5NDg3Nzc1LFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjoyLFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjMxMyxcInNlcnZlckdyb3d0aFwiOjUwLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiY29tcHV0ZWtcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcImNvbXB1dGVrXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI2NS42LjEuN1wiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MCxcIm1lc3NhZ2VzXCI6W1wibWFuLWFuZC1tYWNoaW5lLmxpdFwiXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIkNvbXB1VGVrXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wicGhhbnRhc3lcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo1OSxcImhhY2tEaWZmaWN1bHR5XCI6NTksXCJtaW5EaWZmaWN1bHR5XCI6MjAsXCJtb25leUF2YWlsYWJsZVwiOjIzMjI0NzA3MyxcIm1vbmV5TWF4XCI6NTgwNjE3NjgyNSxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6MyxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjozNTcsXCJzZXJ2ZXJHcm93dGhcIjo2MCxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcIm5ldGxpbmtcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcIm5ldGxpbmtcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjU0LjQuNS4wXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W1wic2ltdWxhdGVkLXJlYWxpdHkubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiTmV0TGluayBUZWNobm9sb2dpZXNcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJvbWVnYS1uZXRcIixcImNhdGFseXN0XCIsXCJJLkkuSS5JXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6NjMsXCJoYWNrRGlmZmljdWx0eVwiOjYzLFwibWluRGlmZmljdWx0eVwiOjIxLFwibW9uZXlBdmFpbGFibGVcIjoyNzUwMDAwMDAsXCJtb25leU1heFwiOjY4NzUwMDAwMDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjMsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6NDAwLFwic2VydmVyR3Jvd3RoXCI6NTUsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJqb2huc29uLW9ydGhvXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiam9obnNvbi1vcnRob1wiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMzMuMi43LjJcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjAsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiSm9obnNvbiBPcnRob3BlZGljc1wiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcInNpbXBsZS1oYWNrLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuXFx0bnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuXFx0YXN5bmMgZnVuY3Rpb24gd3JpdGVMb2codHlwZSwgb2JqKSB7XFxuXFx0XFx0bGV0IHRpbWVOb3cgPSBuZXcgRGF0ZSgpO1xcblxcdFxcdGxldCB5ZWFyID0gdGltZU5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpO1xcblxcdFxcdGxldCBtb250aCA9ICh0aW1lTm93LmdldE1vbnRoKCkgPCA5ID8gJzAnIDogJycpICsgKHRpbWVOb3cuZ2V0TW9udGgoKSArIDEpO1xcblxcdFxcdGxldCBkYXkgPSAodGltZU5vdy5nZXREYXRlKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0RGF0ZSgpO1xcblxcdFxcdGxldCBob3VyID0gKHRpbWVOb3cuZ2V0SG91cnMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRIb3VycygpO1xcblxcdFxcdGxldCBtaW51dGUgPSAodGltZU5vdy5nZXRNaW51dGVzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0TWludXRlcygpO1xcblxcdFxcdGxldCBzZWNvbmQgPSAodGltZU5vdy5nZXRTZWNvbmRzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0U2Vjb25kcygpO1xcblxcdFxcdGxldCB0aW1lc3RhbXAgPSBgJHt5ZWFyfSR7bW9udGh9JHtkYXl9XyR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xcblxcdFxcdGF3YWl0IG5zLnRyeVdyaXRlUG9ydCgxLCBgdCR7dGltZXN0YW1wfV8ke3R5cGV9ID0gJHtvYmp9O1xcXFxuYCk7XFxuXFxuXFx0XFx0aWYgKFsnRVJST1InLCAnVEVSTUlOQUwnXS5pbmRleE9mKHR5cGUpICE9IC0xKSBucy50cHJpbnQoYCR7dGltZXN0YW1wfSAke3R5cGV9ID0gJHtvYmp9YCk7XFxuXFx0fVxcblxcblxcdGxldCBzZXJ2ZXIgPSBucy5hcmdzWzBdO1xcblxcdGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KHNlcnZlcik7XFxuXFx0bGV0IG1pblNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyTWluU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcdGxldCBsb29wID0gMDtcXG5cXHRsZXQgcHJldmlvdXNNb25leSA9IDA7XFxuXFxuXFx0d2hpbGUgKG1heE1vbmV5ICE9IDApIHtcXG5cXHRcXHRsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRsZXQgY3VycmVudFNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcblxcdFxcdGxldCBoYWNrZWRNb25leSA9IDA7XFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA+IDAuMSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0aGFja2VkTW9uZXkgPSBhd2FpdCBucy5oYWNrKHNlcnZlcik7XFxuXFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA8IDAuOSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0d2hpbGUgKGN1cnJlbnRNb25leSA8PSBwcmV2aW91c01vbmV5KSB7XFxuXFx0XFx0XFx0XFx0YXdhaXQgbnMuZ3JvdyhzZXJ2ZXIpO1xcblxcdFxcdFxcdFxcdGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHRcXHRwcmV2aW91c01vbmV5ID0gY3VycmVudE1vbmV5O1xcblxcblxcdFxcdGlmIChjdXJyZW50U2VjdXJpdHkgPiAyICogbWluU2VjdXJpdHkpIHtcXG5cXHRcXHRcXHRhd2FpdCBucy53ZWFrZW4oc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0XFx0fVxcblxcblxcdFxcdG5zLnByaW50KGB7bG9vcDogJHsrK2xvb3B9LCBoYWNrOiAke01hdGguZmxvb3IoaGFja2VkTW9uZXkpfSwgbW9uZXk6ICR7TWF0aC5mbG9vcihjdXJyZW50TW9uZXkpfSAvICR7TWF0aC5mbG9vcihtYXhNb25leSl9ID09ICR7KChjdXJyZW50TW9uZXkgLyBtYXhNb25leSkgKiAxMDApLnRvRml4ZWQoMil9LCBzZWN1cml0eTogJHtjdXJyZW50U2VjdXJpdHkudG9GaXhlZCgyKX0gLyAke01hdGguZmxvb3IobWluU2VjdXJpdHkpfSA9PSAkeygoY3VycmVudFNlY3VyaXR5IC8gbWluU2VjdXJpdHkpICogMTAwKS50b0ZpeGVkKDQpfX1gKTtcXG5cXHRcXHRhd2FpdCBucy5zbGVlcCg1MCk7XFxuXFx0fVxcbn1cIixcImZpbGVuYW1lXCI6XCJzaW1wbGUtaGFjay5qc1wiLFwic2VydmVyXCI6XCJqb2huc29uLW9ydGhvXCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJwaGFudGFzeVwiLFwic3VtbWl0LXVuaVwiXSxcInNtdHBQb3J0T3BlblwiOnRydWUsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo1MCxcImhhY2tEaWZmaWN1bHR5XCI6NTAsXCJtaW5EaWZmaWN1bHR5XCI6MTcsXCJtb25leUF2YWlsYWJsZVwiOjcxMDQwMTgxLFwibW9uZXlNYXhcIjoxNzc2MDA0NTI1LFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjoyLFwib3BlblBvcnRDb3VudFwiOjMsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjI4NSxcInNlcnZlckdyb3d0aFwiOjQ4LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwibjAwZGxlc1wiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC04NDMxOTktTmV0YnVybmVycy5jY3RcIixcInR5cGVcIjpcIlRvdGFsIFdheXMgdG8gU3VtIElJXCIsXCJkYXRhXCI6WzE4OSxbMSwyLDUsNyw4LDksMTAsMTEsMTUsMTgsMTksMjFdXSxcInJld2FyZFwiOntcInR5cGVcIjowLFwibmFtZVwiOlwiTmV0YnVybmVyc1wifX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJuMDBkbGVzXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI0Mi44LjMuMVwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6NCxcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJOb29kbGUgQmFyXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wic2ltcGxlLWhhY2suanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG5cXHRucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG5cXHRhc3luYyBmdW5jdGlvbiB3cml0ZUxvZyh0eXBlLCBvYmopIHtcXG5cXHRcXHRsZXQgdGltZU5vdyA9IG5ldyBEYXRlKCk7XFxuXFx0XFx0bGV0IHllYXIgPSB0aW1lTm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMik7XFxuXFx0XFx0bGV0IG1vbnRoID0gKHRpbWVOb3cuZ2V0TW9udGgoKSA8IDkgPyAnMCcgOiAnJykgKyAodGltZU5vdy5nZXRNb250aCgpICsgMSk7XFxuXFx0XFx0bGV0IGRheSA9ICh0aW1lTm93LmdldERhdGUoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXREYXRlKCk7XFxuXFx0XFx0bGV0IGhvdXIgPSAodGltZU5vdy5nZXRIb3VycygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldEhvdXJzKCk7XFxuXFx0XFx0bGV0IG1pbnV0ZSA9ICh0aW1lTm93LmdldE1pbnV0ZXMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRNaW51dGVzKCk7XFxuXFx0XFx0bGV0IHNlY29uZCA9ICh0aW1lTm93LmdldFNlY29uZHMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRTZWNvbmRzKCk7XFxuXFx0XFx0bGV0IHRpbWVzdGFtcCA9IGAke3llYXJ9JHttb250aH0ke2RheX1fJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XFxuXFx0XFx0YXdhaXQgbnMudHJ5V3JpdGVQb3J0KDEsIGB0JHt0aW1lc3RhbXB9XyR7dHlwZX0gPSAke29ian07XFxcXG5gKTtcXG5cXG5cXHRcXHRpZiAoWydFUlJPUicsICdURVJNSU5BTCddLmluZGV4T2YodHlwZSkgIT0gLTEpIG5zLnRwcmludChgJHt0aW1lc3RhbXB9ICR7dHlwZX0gPSAke29ian1gKTtcXG5cXHR9XFxuXFxuXFx0bGV0IHNlcnZlciA9IG5zLmFyZ3NbMF07XFxuXFx0bGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkoc2VydmVyKTtcXG5cXHRsZXQgbWluU2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJNaW5TZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0bGV0IGxvb3AgPSAwO1xcblxcdGxldCBwcmV2aW91c01vbmV5ID0gMDtcXG5cXG5cXHR3aGlsZSAobWF4TW9uZXkgIT0gMCkge1xcblxcdFxcdGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdGxldCBjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFxuXFx0XFx0bGV0IGhhY2tlZE1vbmV5ID0gMDtcXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5ID4gMC4xICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHRoYWNrZWRNb25leSA9IGF3YWl0IG5zLmhhY2soc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5IDwgMC45ICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHR3aGlsZSAoY3VycmVudE1vbmV5IDw9IHByZXZpb3VzTW9uZXkpIHtcXG5cXHRcXHRcXHRcXHRhd2FpdCBucy5ncm93KHNlcnZlcik7XFxuXFx0XFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdFxcdHByZXZpb3VzTW9uZXkgPSBjdXJyZW50TW9uZXk7XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRTZWN1cml0eSA+IDIgKiBtaW5TZWN1cml0eSkge1xcblxcdFxcdFxcdGF3YWl0IG5zLndlYWtlbihzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0bnMucHJpbnQoYHtsb29wOiAkeysrbG9vcH0sIGhhY2s6ICR7TWF0aC5mbG9vcihoYWNrZWRNb25leSl9LCBtb25leTogJHtNYXRoLmZsb29yKGN1cnJlbnRNb25leSl9IC8gJHtNYXRoLmZsb29yKG1heE1vbmV5KX0gPT0gJHsoKGN1cnJlbnRNb25leSAvIG1heE1vbmV5KSAqIDEwMCkudG9GaXhlZCgyKX0sIHNlY3VyaXR5OiAke2N1cnJlbnRTZWN1cml0eS50b0ZpeGVkKDIpfSAvICR7TWF0aC5mbG9vcihtaW5TZWN1cml0eSl9ID09ICR7KChjdXJyZW50U2VjdXJpdHkgLyBtaW5TZWN1cml0eSkgKiAxMDApLnRvRml4ZWQoNCl9fWApO1xcblxcdFxcdGF3YWl0IG5zLnNsZWVwKDUwKTtcXG5cXHR9XFxufVwiLFwiZmlsZW5hbWVcIjpcInNpbXBsZS1oYWNrLmpzXCIsXCJzZXJ2ZXJcIjpcIm4wMGRsZXNcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbWVcIixcIm1heC1oYXJkd2FyZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjp0cnVlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLjk3OTk5OTk5OTk5OTg2MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjoxNTY4OTIxLjk5ODQ4NTY3MTYsXCJtb25leU1heFwiOjE3NTAwMDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjAsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MSxcInNlcnZlckdyb3d0aFwiOjMwMDAsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJmb29kbnN0dWZmXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W3tcImN0b3JcIjpcIkNvZGluZ0NvbnRyYWN0XCIsXCJkYXRhXCI6e1widHJpZXNcIjowLFwiZm5cIjpcImNvbnRyYWN0LTU4NTUyMC5jY3RcIixcInR5cGVcIjpcIkZpbmQgTGFyZ2VzdCBQcmltZSBGYWN0b3JcIixcImRhdGFcIjo5MjE3MzkxMjIsXCJyZXdhcmRcIjp7XCJ0eXBlXCI6M319fSx7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC0zNjM4Mi5jY3RcIixcInR5cGVcIjpcIkNvbXByZXNzaW9uIElJOiBMWiBEZWNvbXByZXNzaW9uXCIsXCJkYXRhXCI6XCI5SmV0RzQzNWFhOTgySkwzNjNwSkwzMTZkRGRIUWw5NTA1MjZhb0VpZWlcIixcInJld2FyZFwiOntcInR5cGVcIjozfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiZm9vZG5zdHVmZlwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNjEuMS4zLjVcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjE2LFwibWVzc2FnZXNcIjpbXCJzZWN0b3ItMTItY3JpbWUubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiRm9vZE5TdHVmZlwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcInNpbXBsZS1oYWNrLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuXFx0bnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuXFx0YXN5bmMgZnVuY3Rpb24gd3JpdGVMb2codHlwZSwgb2JqKSB7XFxuXFx0XFx0bGV0IHRpbWVOb3cgPSBuZXcgRGF0ZSgpO1xcblxcdFxcdGxldCB5ZWFyID0gdGltZU5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpO1xcblxcdFxcdGxldCBtb250aCA9ICh0aW1lTm93LmdldE1vbnRoKCkgPCA5ID8gJzAnIDogJycpICsgKHRpbWVOb3cuZ2V0TW9udGgoKSArIDEpO1xcblxcdFxcdGxldCBkYXkgPSAodGltZU5vdy5nZXREYXRlKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0RGF0ZSgpO1xcblxcdFxcdGxldCBob3VyID0gKHRpbWVOb3cuZ2V0SG91cnMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRIb3VycygpO1xcblxcdFxcdGxldCBtaW51dGUgPSAodGltZU5vdy5nZXRNaW51dGVzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0TWludXRlcygpO1xcblxcdFxcdGxldCBzZWNvbmQgPSAodGltZU5vdy5nZXRTZWNvbmRzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0U2Vjb25kcygpO1xcblxcdFxcdGxldCB0aW1lc3RhbXAgPSBgJHt5ZWFyfSR7bW9udGh9JHtkYXl9XyR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xcblxcdFxcdGF3YWl0IG5zLnRyeVdyaXRlUG9ydCgxLCBgdCR7dGltZXN0YW1wfV8ke3R5cGV9ID0gJHtvYmp9O1xcXFxuYCk7XFxuXFxuXFx0XFx0aWYgKFsnRVJST1InLCAnVEVSTUlOQUwnXS5pbmRleE9mKHR5cGUpICE9IC0xKSBucy50cHJpbnQoYCR7dGltZXN0YW1wfSAke3R5cGV9ID0gJHtvYmp9YCk7XFxuXFx0fVxcblxcblxcdGxldCBzZXJ2ZXIgPSBucy5hcmdzWzBdO1xcblxcdGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KHNlcnZlcik7XFxuXFx0bGV0IG1pblNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyTWluU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcdGxldCBsb29wID0gMDtcXG5cXHRsZXQgcHJldmlvdXNNb25leSA9IDA7XFxuXFxuXFx0d2hpbGUgKG1heE1vbmV5ICE9IDApIHtcXG5cXHRcXHRsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRsZXQgY3VycmVudFNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcblxcdFxcdGxldCBoYWNrZWRNb25leSA9IDA7XFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA+IDAuMSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0aGFja2VkTW9uZXkgPSBhd2FpdCBucy5oYWNrKHNlcnZlcik7XFxuXFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA8IDAuOSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0d2hpbGUgKGN1cnJlbnRNb25leSA8PSBwcmV2aW91c01vbmV5KSB7XFxuXFx0XFx0XFx0XFx0YXdhaXQgbnMuZ3JvdyhzZXJ2ZXIpO1xcblxcdFxcdFxcdFxcdGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHRcXHRwcmV2aW91c01vbmV5ID0gY3VycmVudE1vbmV5O1xcblxcblxcdFxcdGlmIChjdXJyZW50U2VjdXJpdHkgPiAyICogbWluU2VjdXJpdHkpIHtcXG5cXHRcXHRcXHRhd2FpdCBucy53ZWFrZW4oc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0XFx0fVxcblxcblxcdFxcdG5zLnByaW50KGB7bG9vcDogJHsrK2xvb3B9LCBoYWNrOiAke01hdGguZmxvb3IoaGFja2VkTW9uZXkpfSwgbW9uZXk6ICR7TWF0aC5mbG9vcihjdXJyZW50TW9uZXkpfSAvICR7TWF0aC5mbG9vcihtYXhNb25leSl9ID09ICR7KChjdXJyZW50TW9uZXkgLyBtYXhNb25leSkgKiAxMDApLnRvRml4ZWQoMil9LCBzZWN1cml0eTogJHtjdXJyZW50U2VjdXJpdHkudG9GaXhlZCgyKX0gLyAke01hdGguZmxvb3IobWluU2VjdXJpdHkpfSA9PSAkeygoY3VycmVudFNlY3VyaXR5IC8gbWluU2VjdXJpdHkpICogMTAwKS50b0ZpeGVkKDQpfX1gKTtcXG5cXHRcXHRhd2FpdCBucy5zbGVlcCg1MCk7XFxuXFx0fVxcbn1cIixcImZpbGVuYW1lXCI6XCJzaW1wbGUtaGFjay5qc1wiLFwic2VydmVyXCI6XCJmb29kbnN0dWZmXCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJob21lXCIsXCJ6ZXIwXCIsXCJuZWN0YXItbmV0XCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MTAsXCJoYWNrRGlmZmljdWx0eVwiOjk4LjA0NDAwMDAwMDAwMDAzLFwibWluRGlmZmljdWx0eVwiOjMsXCJtb25leUF2YWlsYWJsZVwiOjk5MjU3MzcuNTIzODUzNjEzLFwibW9uZXlNYXhcIjo1MDAwMDAwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6MCxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxLFwic2VydmVyR3Jvd3RoXCI6NSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcInNpZ21hLWNvc21ldGljc1wiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjpmYWxzZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJzaWdtYS1jb3NtZXRpY3NcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjk2LjguNC4wXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjoxNixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJTaWdtYSBDb3NtZXRpY3NcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJzaW1wbGUtaGFjay5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcblxcdG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcblxcdGFzeW5jIGZ1bmN0aW9uIHdyaXRlTG9nKHR5cGUsIG9iaikge1xcblxcdFxcdGxldCB0aW1lTm93ID0gbmV3IERhdGUoKTtcXG5cXHRcXHRsZXQgeWVhciA9IHRpbWVOb3cuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyKTtcXG5cXHRcXHRsZXQgbW9udGggPSAodGltZU5vdy5nZXRNb250aCgpIDwgOSA/ICcwJyA6ICcnKSArICh0aW1lTm93LmdldE1vbnRoKCkgKyAxKTtcXG5cXHRcXHRsZXQgZGF5ID0gKHRpbWVOb3cuZ2V0RGF0ZSgpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldERhdGUoKTtcXG5cXHRcXHRsZXQgaG91ciA9ICh0aW1lTm93LmdldEhvdXJzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0SG91cnMoKTtcXG5cXHRcXHRsZXQgbWludXRlID0gKHRpbWVOb3cuZ2V0TWludXRlcygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldE1pbnV0ZXMoKTtcXG5cXHRcXHRsZXQgc2Vjb25kID0gKHRpbWVOb3cuZ2V0U2Vjb25kcygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldFNlY29uZHMoKTtcXG5cXHRcXHRsZXQgdGltZXN0YW1wID0gYCR7eWVhcn0ke21vbnRofSR7ZGF5fV8ke2hvdXJ9JHttaW51dGV9JHtzZWNvbmR9YDtcXG5cXHRcXHRhd2FpdCBucy50cnlXcml0ZVBvcnQoMSwgYHQke3RpbWVzdGFtcH1fJHt0eXBlfSA9ICR7b2JqfTtcXFxcbmApO1xcblxcblxcdFxcdGlmIChbJ0VSUk9SJywgJ1RFUk1JTkFMJ10uaW5kZXhPZih0eXBlKSAhPSAtMSkgbnMudHByaW50KGAke3RpbWVzdGFtcH0gJHt0eXBlfSA9ICR7b2JqfWApO1xcblxcdH1cXG5cXG5cXHRsZXQgc2VydmVyID0gbnMuYXJnc1swXTtcXG5cXHRsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShzZXJ2ZXIpO1xcblxcdGxldCBtaW5TZWN1cml0eSA9IG5zLmdldFNlcnZlck1pblNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRsZXQgbG9vcCA9IDA7XFxuXFx0bGV0IHByZXZpb3VzTW9uZXkgPSAwO1xcblxcblxcdHdoaWxlIChtYXhNb25leSAhPSAwKSB7XFxuXFx0XFx0bGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0bGV0IGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXG5cXHRcXHRsZXQgaGFja2VkTW9uZXkgPSAwO1xcblxcdFxcdGlmIChjdXJyZW50TW9uZXkgPiAwLjEgKiBtYXhNb25leSkge1xcblxcdFxcdFxcdGhhY2tlZE1vbmV5ID0gYXdhaXQgbnMuaGFjayhzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChjdXJyZW50TW9uZXkgPCAwLjkgKiBtYXhNb25leSkge1xcblxcdFxcdFxcdHdoaWxlIChjdXJyZW50TW9uZXkgPD0gcHJldmlvdXNNb25leSkge1xcblxcdFxcdFxcdFxcdGF3YWl0IG5zLmdyb3coc2VydmVyKTtcXG5cXHRcXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cHJldmlvdXNNb25leSA9IGN1cnJlbnRNb25leTtcXG5cXG5cXHRcXHRpZiAoY3VycmVudFNlY3VyaXR5ID4gMiAqIG1pblNlY3VyaXR5KSB7XFxuXFx0XFx0XFx0YXdhaXQgbnMud2Vha2VuKHNlcnZlcik7XFxuXFx0XFx0XFx0Y3VycmVudFNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRucy5wcmludChge2xvb3A6ICR7Kytsb29wfSwgaGFjazogJHtNYXRoLmZsb29yKGhhY2tlZE1vbmV5KX0sIG1vbmV5OiAke01hdGguZmxvb3IoY3VycmVudE1vbmV5KX0gLyAke01hdGguZmxvb3IobWF4TW9uZXkpfSA9PSAkeygoY3VycmVudE1vbmV5IC8gbWF4TW9uZXkpICogMTAwKS50b0ZpeGVkKDIpfSwgc2VjdXJpdHk6ICR7Y3VycmVudFNlY3VyaXR5LnRvRml4ZWQoMil9IC8gJHtNYXRoLmZsb29yKG1pblNlY3VyaXR5KX0gPT0gJHsoKGN1cnJlbnRTZWN1cml0eSAvIG1pblNlY3VyaXR5KSAqIDEwMCkudG9GaXhlZCg0KX19YCk7XFxuXFx0XFx0YXdhaXQgbnMuc2xlZXAoNTApO1xcblxcdH1cXG59XCIsXCJmaWxlbmFtZVwiOlwic2ltcGxlLWhhY2suanNcIixcInNlcnZlclwiOlwic2lnbWEtY29zbWV0aWNzXCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJob21lXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MTAsXCJoYWNrRGlmZmljdWx0eVwiOjE2LjQ5MTk5OTk5OTk5OTM3MixcIm1pbkRpZmZpY3VsdHlcIjozLFwibW9uZXlBdmFpbGFibGVcIjoxMTI1NDA5My40MTYyNTAzNyxcIm1vbmV5TWF4XCI6NTc1MDAwMDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjAsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6NSxcInNlcnZlckdyb3d0aFwiOjEwLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiam9lc2d1bnNcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtMTM5OTM4LmNjdFwiLFwidHlwZVwiOlwiRW5jcnlwdGlvbiBJOiBDYWVzYXIgQ2lwaGVyXCIsXCJkYXRhXCI6W1wiUVVFVUUgRlJBTUUgVEFCTEUgREVCVUcgQ0FDSEVcIiwxXSxcInJld2FyZFwiOntcInR5cGVcIjozfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiam9lc2d1bnNcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjczLjQuNi44XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjoxNixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJKb2UncyBHdW5zXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wic2ltcGxlLWhhY2suanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG5cXHRucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG5cXHRhc3luYyBmdW5jdGlvbiB3cml0ZUxvZyh0eXBlLCBvYmopIHtcXG5cXHRcXHRsZXQgdGltZU5vdyA9IG5ldyBEYXRlKCk7XFxuXFx0XFx0bGV0IHllYXIgPSB0aW1lTm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMik7XFxuXFx0XFx0bGV0IG1vbnRoID0gKHRpbWVOb3cuZ2V0TW9udGgoKSA8IDkgPyAnMCcgOiAnJykgKyAodGltZU5vdy5nZXRNb250aCgpICsgMSk7XFxuXFx0XFx0bGV0IGRheSA9ICh0aW1lTm93LmdldERhdGUoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXREYXRlKCk7XFxuXFx0XFx0bGV0IGhvdXIgPSAodGltZU5vdy5nZXRIb3VycygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldEhvdXJzKCk7XFxuXFx0XFx0bGV0IG1pbnV0ZSA9ICh0aW1lTm93LmdldE1pbnV0ZXMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRNaW51dGVzKCk7XFxuXFx0XFx0bGV0IHNlY29uZCA9ICh0aW1lTm93LmdldFNlY29uZHMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRTZWNvbmRzKCk7XFxuXFx0XFx0bGV0IHRpbWVzdGFtcCA9IGAke3llYXJ9JHttb250aH0ke2RheX1fJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XFxuXFx0XFx0YXdhaXQgbnMudHJ5V3JpdGVQb3J0KDEsIGB0JHt0aW1lc3RhbXB9XyR7dHlwZX0gPSAke29ian07XFxcXG5gKTtcXG5cXG5cXHRcXHRpZiAoWydFUlJPUicsICdURVJNSU5BTCddLmluZGV4T2YodHlwZSkgIT0gLTEpIG5zLnRwcmludChgJHt0aW1lc3RhbXB9ICR7dHlwZX0gPSAke29ian1gKTtcXG5cXHR9XFxuXFxuXFx0bGV0IHNlcnZlciA9IG5zLmFyZ3NbMF07XFxuXFx0bGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkoc2VydmVyKTtcXG5cXHRsZXQgbWluU2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJNaW5TZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0bGV0IGxvb3AgPSAwO1xcblxcdGxldCBwcmV2aW91c01vbmV5ID0gMDtcXG5cXG5cXHR3aGlsZSAobWF4TW9uZXkgIT0gMCkge1xcblxcdFxcdGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdGxldCBjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFxuXFx0XFx0bGV0IGhhY2tlZE1vbmV5ID0gMDtcXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5ID4gMC4xICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHRoYWNrZWRNb25leSA9IGF3YWl0IG5zLmhhY2soc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5IDwgMC45ICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHR3aGlsZSAoY3VycmVudE1vbmV5IDw9IHByZXZpb3VzTW9uZXkpIHtcXG5cXHRcXHRcXHRcXHRhd2FpdCBucy5ncm93KHNlcnZlcik7XFxuXFx0XFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdFxcdHByZXZpb3VzTW9uZXkgPSBjdXJyZW50TW9uZXk7XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRTZWN1cml0eSA+IDIgKiBtaW5TZWN1cml0eSkge1xcblxcdFxcdFxcdGF3YWl0IG5zLndlYWtlbihzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0bnMucHJpbnQoYHtsb29wOiAkeysrbG9vcH0sIGhhY2s6ICR7TWF0aC5mbG9vcihoYWNrZWRNb25leSl9LCBtb25leTogJHtNYXRoLmZsb29yKGN1cnJlbnRNb25leSl9IC8gJHtNYXRoLmZsb29yKG1heE1vbmV5KX0gPT0gJHsoKGN1cnJlbnRNb25leSAvIG1heE1vbmV5KSAqIDEwMCkudG9GaXhlZCgyKX0sIHNlY3VyaXR5OiAke2N1cnJlbnRTZWN1cml0eS50b0ZpeGVkKDIpfSAvICR7TWF0aC5mbG9vcihtaW5TZWN1cml0eSl9ID09ICR7KChjdXJyZW50U2VjdXJpdHkgLyBtaW5TZWN1cml0eSkgKiAxMDApLnRvRml4ZWQoNCl9fWApO1xcblxcdFxcdGF3YWl0IG5zLnNsZWVwKDUwKTtcXG5cXHR9XFxufVwiLFwiZmlsZW5hbWVcIjpcInNpbXBsZS1oYWNrLmpzXCIsXCJzZXJ2ZXJcIjpcImpvZXNndW5zXCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJob21lXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MTUsXCJoYWNrRGlmZmljdWx0eVwiOjEwLjAxNzk5OTk5OTk5ODMyLFwibWluRGlmZmljdWx0eVwiOjUsXCJtb25leUF2YWlsYWJsZVwiOjE1NzE5NDUzLjA3NDI5ODY2LFwibW9uZXlNYXhcIjo2MjUwMDAwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6MCxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxMCxcInNlcnZlckdyb3d0aFwiOjIwLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiemVyMFwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC02Mjc4ODYuY2N0XCIsXCJ0eXBlXCI6XCJNaW5pbXVtIFBhdGggU3VtIGluIGEgVHJpYW5nbGVcIixcImRhdGFcIjpbWzNdLFs4LDldLFsxLDIsMV0sWzIsMiw3LDddLFs0LDMsNiw1LDNdLFs2LDYsOCwxLDksNF0sWzgsNiw2LDgsNCw1LDZdLFs3LDUsNCwxLDcsNyw4LDNdLFs2LDcsMyw5LDQsNiw2LDgsNV0sWzYsMSw1LDYsNSw5LDcsMyw1LDddXSxcInJld2FyZFwiOntcInR5cGVcIjozfX19LHtcImN0b3JcIjpcIkNvZGluZ0NvbnRyYWN0XCIsXCJkYXRhXCI6e1widHJpZXNcIjowLFwiZm5cIjpcImNvbnRyYWN0LTU3NjY0LmNjdFwiLFwidHlwZVwiOlwiU2FuaXRpemUgUGFyZW50aGVzZXMgaW4gRXhwcmVzc2lvblwiLFwiZGF0YVwiOlwiKCgpKSkoKSkpKCgoXCIsXCJyZXdhcmRcIjp7XCJ0eXBlXCI6M319fV0sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcInplcjBcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjc5LjguNi4zXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJaRVIwIE5pZ2h0Y2x1YlwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcInNpbXBsZS1oYWNrLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuXFx0bnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuXFx0YXN5bmMgZnVuY3Rpb24gd3JpdGVMb2codHlwZSwgb2JqKSB7XFxuXFx0XFx0bGV0IHRpbWVOb3cgPSBuZXcgRGF0ZSgpO1xcblxcdFxcdGxldCB5ZWFyID0gdGltZU5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpO1xcblxcdFxcdGxldCBtb250aCA9ICh0aW1lTm93LmdldE1vbnRoKCkgPCA5ID8gJzAnIDogJycpICsgKHRpbWVOb3cuZ2V0TW9udGgoKSArIDEpO1xcblxcdFxcdGxldCBkYXkgPSAodGltZU5vdy5nZXREYXRlKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0RGF0ZSgpO1xcblxcdFxcdGxldCBob3VyID0gKHRpbWVOb3cuZ2V0SG91cnMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRIb3VycygpO1xcblxcdFxcdGxldCBtaW51dGUgPSAodGltZU5vdy5nZXRNaW51dGVzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0TWludXRlcygpO1xcblxcdFxcdGxldCBzZWNvbmQgPSAodGltZU5vdy5nZXRTZWNvbmRzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0U2Vjb25kcygpO1xcblxcdFxcdGxldCB0aW1lc3RhbXAgPSBgJHt5ZWFyfSR7bW9udGh9JHtkYXl9XyR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xcblxcdFxcdGF3YWl0IG5zLnRyeVdyaXRlUG9ydCgxLCBgdCR7dGltZXN0YW1wfV8ke3R5cGV9ID0gJHtvYmp9O1xcXFxuYCk7XFxuXFxuXFx0XFx0aWYgKFsnRVJST1InLCAnVEVSTUlOQUwnXS5pbmRleE9mKHR5cGUpICE9IC0xKSBucy50cHJpbnQoYCR7dGltZXN0YW1wfSAke3R5cGV9ID0gJHtvYmp9YCk7XFxuXFx0fVxcblxcblxcdGxldCBzZXJ2ZXIgPSBucy5hcmdzWzBdO1xcblxcdGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KHNlcnZlcik7XFxuXFx0bGV0IG1pblNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyTWluU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcdGxldCBsb29wID0gMDtcXG5cXHRsZXQgcHJldmlvdXNNb25leSA9IDA7XFxuXFxuXFx0d2hpbGUgKG1heE1vbmV5ICE9IDApIHtcXG5cXHRcXHRsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRsZXQgY3VycmVudFNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcblxcdFxcdGxldCBoYWNrZWRNb25leSA9IDA7XFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA+IDAuMSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0aGFja2VkTW9uZXkgPSBhd2FpdCBucy5oYWNrKHNlcnZlcik7XFxuXFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA8IDAuOSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0d2hpbGUgKGN1cnJlbnRNb25leSA8PSBwcmV2aW91c01vbmV5KSB7XFxuXFx0XFx0XFx0XFx0YXdhaXQgbnMuZ3JvdyhzZXJ2ZXIpO1xcblxcdFxcdFxcdFxcdGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHRcXHRwcmV2aW91c01vbmV5ID0gY3VycmVudE1vbmV5O1xcblxcblxcdFxcdGlmIChjdXJyZW50U2VjdXJpdHkgPiAyICogbWluU2VjdXJpdHkpIHtcXG5cXHRcXHRcXHRhd2FpdCBucy53ZWFrZW4oc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0XFx0fVxcblxcblxcdFxcdG5zLnByaW50KGB7bG9vcDogJHsrK2xvb3B9LCBoYWNrOiAke01hdGguZmxvb3IoaGFja2VkTW9uZXkpfSwgbW9uZXk6ICR7TWF0aC5mbG9vcihjdXJyZW50TW9uZXkpfSAvICR7TWF0aC5mbG9vcihtYXhNb25leSl9ID09ICR7KChjdXJyZW50TW9uZXkgLyBtYXhNb25leSkgKiAxMDApLnRvRml4ZWQoMil9LCBzZWN1cml0eTogJHtjdXJyZW50U2VjdXJpdHkudG9GaXhlZCgyKX0gLyAke01hdGguZmxvb3IobWluU2VjdXJpdHkpfSA9PSAkeygoY3VycmVudFNlY3VyaXR5IC8gbWluU2VjdXJpdHkpICogMTAwKS50b0ZpeGVkKDQpfX1gKTtcXG5cXHRcXHRhd2FpdCBucy5zbGVlcCg1MCk7XFxuXFx0fVxcbn1cIixcImZpbGVuYW1lXCI6XCJzaW1wbGUtaGFjay5qc1wiLFwic2VydmVyXCI6XCJ6ZXIwXCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJmb29kbnN0dWZmXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjoyNSxcImhhY2tEaWZmaWN1bHR5XCI6MTUuOTE3OTk5OTk5OTk5ODI3LFwibWluRGlmZmljdWx0eVwiOjgsXCJtb25leUF2YWlsYWJsZVwiOjUwNTg1NzE4LjEzMDk2NjA0NSxcIm1vbmV5TWF4XCI6MTg3NTAwMDAwLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjoxLFwib3BlblBvcnRDb3VudFwiOjEsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjc1LFwic2VydmVyR3Jvd3RoXCI6NDAsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJuZWN0YXItbmV0XCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcIm5lY3Rhci1uZXRcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjYuNC45LjhcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjE2LFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIk5lY3RhciBOaWdodGNsdWIgTmV0d29ya1wiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcInNpbXBsZS1oYWNrLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuXFx0bnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuXFx0YXN5bmMgZnVuY3Rpb24gd3JpdGVMb2codHlwZSwgb2JqKSB7XFxuXFx0XFx0bGV0IHRpbWVOb3cgPSBuZXcgRGF0ZSgpO1xcblxcdFxcdGxldCB5ZWFyID0gdGltZU5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpO1xcblxcdFxcdGxldCBtb250aCA9ICh0aW1lTm93LmdldE1vbnRoKCkgPCA5ID8gJzAnIDogJycpICsgKHRpbWVOb3cuZ2V0TW9udGgoKSArIDEpO1xcblxcdFxcdGxldCBkYXkgPSAodGltZU5vdy5nZXREYXRlKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0RGF0ZSgpO1xcblxcdFxcdGxldCBob3VyID0gKHRpbWVOb3cuZ2V0SG91cnMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRIb3VycygpO1xcblxcdFxcdGxldCBtaW51dGUgPSAodGltZU5vdy5nZXRNaW51dGVzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0TWludXRlcygpO1xcblxcdFxcdGxldCBzZWNvbmQgPSAodGltZU5vdy5nZXRTZWNvbmRzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0U2Vjb25kcygpO1xcblxcdFxcdGxldCB0aW1lc3RhbXAgPSBgJHt5ZWFyfSR7bW9udGh9JHtkYXl9XyR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xcblxcdFxcdGF3YWl0IG5zLnRyeVdyaXRlUG9ydCgxLCBgdCR7dGltZXN0YW1wfV8ke3R5cGV9ID0gJHtvYmp9O1xcXFxuYCk7XFxuXFxuXFx0XFx0aWYgKFsnRVJST1InLCAnVEVSTUlOQUwnXS5pbmRleE9mKHR5cGUpICE9IC0xKSBucy50cHJpbnQoYCR7dGltZXN0YW1wfSAke3R5cGV9ID0gJHtvYmp9YCk7XFxuXFx0fVxcblxcblxcdGxldCBzZXJ2ZXIgPSBucy5hcmdzWzBdO1xcblxcdGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KHNlcnZlcik7XFxuXFx0bGV0IG1pblNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyTWluU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcdGxldCBsb29wID0gMDtcXG5cXHRsZXQgcHJldmlvdXNNb25leSA9IDA7XFxuXFxuXFx0d2hpbGUgKG1heE1vbmV5ICE9IDApIHtcXG5cXHRcXHRsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRsZXQgY3VycmVudFNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcblxcdFxcdGxldCBoYWNrZWRNb25leSA9IDA7XFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA+IDAuMSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0aGFja2VkTW9uZXkgPSBhd2FpdCBucy5oYWNrKHNlcnZlcik7XFxuXFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA8IDAuOSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0d2hpbGUgKGN1cnJlbnRNb25leSA8PSBwcmV2aW91c01vbmV5KSB7XFxuXFx0XFx0XFx0XFx0YXdhaXQgbnMuZ3JvdyhzZXJ2ZXIpO1xcblxcdFxcdFxcdFxcdGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHRcXHRwcmV2aW91c01vbmV5ID0gY3VycmVudE1vbmV5O1xcblxcblxcdFxcdGlmIChjdXJyZW50U2VjdXJpdHkgPiAyICogbWluU2VjdXJpdHkpIHtcXG5cXHRcXHRcXHRhd2FpdCBucy53ZWFrZW4oc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0XFx0fVxcblxcblxcdFxcdG5zLnByaW50KGB7bG9vcDogJHsrK2xvb3B9LCBoYWNrOiAke01hdGguZmxvb3IoaGFja2VkTW9uZXkpfSwgbW9uZXk6ICR7TWF0aC5mbG9vcihjdXJyZW50TW9uZXkpfSAvICR7TWF0aC5mbG9vcihtYXhNb25leSl9ID09ICR7KChjdXJyZW50TW9uZXkgLyBtYXhNb25leSkgKiAxMDApLnRvRml4ZWQoMil9LCBzZWN1cml0eTogJHtjdXJyZW50U2VjdXJpdHkudG9GaXhlZCgyKX0gLyAke01hdGguZmxvb3IobWluU2VjdXJpdHkpfSA9PSAkeygoY3VycmVudFNlY3VyaXR5IC8gbWluU2VjdXJpdHkpICogMTAwKS50b0ZpeGVkKDQpfX1gKTtcXG5cXHRcXHRhd2FpdCBucy5zbGVlcCg1MCk7XFxuXFx0fVxcbn1cIixcImZpbGVuYW1lXCI6XCJzaW1wbGUtaGFjay5qc1wiLFwic2VydmVyXCI6XCJuZWN0YXItbmV0XCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJmb29kbnN0dWZmXCIsXCJwaGFudGFzeVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjIwLFwiaGFja0RpZmZpY3VsdHlcIjoxNC4wMjk5OTk5OTk5OTg5MDUsXCJtaW5EaWZmaWN1bHR5XCI6NyxcIm1vbmV5QXZhaWxhYmxlXCI6MTQ2MTc2MjYuNzUzODQ4MTA2LFwibW9uZXlNYXhcIjo2ODc1MDAwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6MCxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoyMCxcInNlcnZlckdyb3d0aFwiOjI1LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwibmVvLW5ldFwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC0yOTgwNTQuY2N0XCIsXCJ0eXBlXCI6XCJIYW1taW5nQ29kZXM6IEVuY29kZWQgQmluYXJ5IHRvIEludGVnZXJcIixcImRhdGFcIjpcIjExMTAwMDAwMDAwMDAwMDAxMDAwMTExMTAwMTAwMDEwMTEwMDEwMDExMDExMTAxMTAxMDAwMTAwMTAxMDExMTBcIixcInJld2FyZFwiOntcInR5cGVcIjozfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJuZW8tbmV0XCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI3NC43LjYuMVwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltcInRoZS1oaWRkZW4td29ybGQubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiTmVvIE5pZ2h0Y2x1YiBOZXR3b3JrXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wic2ltcGxlLWhhY2suanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG5cXHRucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG5cXHRhc3luYyBmdW5jdGlvbiB3cml0ZUxvZyh0eXBlLCBvYmopIHtcXG5cXHRcXHRsZXQgdGltZU5vdyA9IG5ldyBEYXRlKCk7XFxuXFx0XFx0bGV0IHllYXIgPSB0aW1lTm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMik7XFxuXFx0XFx0bGV0IG1vbnRoID0gKHRpbWVOb3cuZ2V0TW9udGgoKSA8IDkgPyAnMCcgOiAnJykgKyAodGltZU5vdy5nZXRNb250aCgpICsgMSk7XFxuXFx0XFx0bGV0IGRheSA9ICh0aW1lTm93LmdldERhdGUoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXREYXRlKCk7XFxuXFx0XFx0bGV0IGhvdXIgPSAodGltZU5vdy5nZXRIb3VycygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldEhvdXJzKCk7XFxuXFx0XFx0bGV0IG1pbnV0ZSA9ICh0aW1lTm93LmdldE1pbnV0ZXMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRNaW51dGVzKCk7XFxuXFx0XFx0bGV0IHNlY29uZCA9ICh0aW1lTm93LmdldFNlY29uZHMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRTZWNvbmRzKCk7XFxuXFx0XFx0bGV0IHRpbWVzdGFtcCA9IGAke3llYXJ9JHttb250aH0ke2RheX1fJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XFxuXFx0XFx0YXdhaXQgbnMudHJ5V3JpdGVQb3J0KDEsIGB0JHt0aW1lc3RhbXB9XyR7dHlwZX0gPSAke29ian07XFxcXG5gKTtcXG5cXG5cXHRcXHRpZiAoWydFUlJPUicsICdURVJNSU5BTCddLmluZGV4T2YodHlwZSkgIT0gLTEpIG5zLnRwcmludChgJHt0aW1lc3RhbXB9ICR7dHlwZX0gPSAke29ian1gKTtcXG5cXHR9XFxuXFxuXFx0bGV0IHNlcnZlciA9IG5zLmFyZ3NbMF07XFxuXFx0bGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkoc2VydmVyKTtcXG5cXHRsZXQgbWluU2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJNaW5TZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0bGV0IGxvb3AgPSAwO1xcblxcdGxldCBwcmV2aW91c01vbmV5ID0gMDtcXG5cXG5cXHR3aGlsZSAobWF4TW9uZXkgIT0gMCkge1xcblxcdFxcdGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdGxldCBjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFxuXFx0XFx0bGV0IGhhY2tlZE1vbmV5ID0gMDtcXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5ID4gMC4xICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHRoYWNrZWRNb25leSA9IGF3YWl0IG5zLmhhY2soc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5IDwgMC45ICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHR3aGlsZSAoY3VycmVudE1vbmV5IDw9IHByZXZpb3VzTW9uZXkpIHtcXG5cXHRcXHRcXHRcXHRhd2FpdCBucy5ncm93KHNlcnZlcik7XFxuXFx0XFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdFxcdHByZXZpb3VzTW9uZXkgPSBjdXJyZW50TW9uZXk7XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRTZWN1cml0eSA+IDIgKiBtaW5TZWN1cml0eSkge1xcblxcdFxcdFxcdGF3YWl0IG5zLndlYWtlbihzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0bnMucHJpbnQoYHtsb29wOiAkeysrbG9vcH0sIGhhY2s6ICR7TWF0aC5mbG9vcihoYWNrZWRNb25leSl9LCBtb25leTogJHtNYXRoLmZsb29yKGN1cnJlbnRNb25leSl9IC8gJHtNYXRoLmZsb29yKG1heE1vbmV5KX0gPT0gJHsoKGN1cnJlbnRNb25leSAvIG1heE1vbmV5KSAqIDEwMCkudG9GaXhlZCgyKX0sIHNlY3VyaXR5OiAke2N1cnJlbnRTZWN1cml0eS50b0ZpeGVkKDIpfSAvICR7TWF0aC5mbG9vcihtaW5TZWN1cml0eSl9ID09ICR7KChjdXJyZW50U2VjdXJpdHkgLyBtaW5TZWN1cml0eSkgKiAxMDApLnRvRml4ZWQoNCl9fWApO1xcblxcdFxcdGF3YWl0IG5zLnNsZWVwKDUwKTtcXG5cXHR9XFxufVwiLFwiZmlsZW5hbWVcIjpcInNpbXBsZS1oYWNrLmpzXCIsXCJzZXJ2ZXJcIjpcIm5lby1uZXRcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcIm1heC1oYXJkd2FyZVwiLFwidGhlLWh1YlwiLFwiYXZtbml0ZS0wMmhcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6dHJ1ZSxcImJhc2VEaWZmaWN1bHR5XCI6MjUsXCJoYWNrRGlmZmljdWx0eVwiOjE2LjIzNTk5OTk5OTk5OTcwMixcIm1pbkRpZmZpY3VsdHlcIjo4LFwibW9uZXlBdmFpbGFibGVcIjoyNDkzODc1NS4zODY3MzczNzYsXCJtb25leU1heFwiOjEyNTAwMDAwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6MSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjo1MCxcInNlcnZlckdyb3d0aFwiOjI1LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwic2lsdmVyLWhlbGl4XCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwic2lsdmVyLWhlbGl4XCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCIyMi40LjUuM1wiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6NjQsXCJtZXNzYWdlc1wiOltcIm5ldy10cmlhZHMubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiU2lsdmVyIEhlbGl4XCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wic2ltcGxlLWhhY2suanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG5cXHRucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG5cXHRhc3luYyBmdW5jdGlvbiB3cml0ZUxvZyh0eXBlLCBvYmopIHtcXG5cXHRcXHRsZXQgdGltZU5vdyA9IG5ldyBEYXRlKCk7XFxuXFx0XFx0bGV0IHllYXIgPSB0aW1lTm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMik7XFxuXFx0XFx0bGV0IG1vbnRoID0gKHRpbWVOb3cuZ2V0TW9udGgoKSA8IDkgPyAnMCcgOiAnJykgKyAodGltZU5vdy5nZXRNb250aCgpICsgMSk7XFxuXFx0XFx0bGV0IGRheSA9ICh0aW1lTm93LmdldERhdGUoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXREYXRlKCk7XFxuXFx0XFx0bGV0IGhvdXIgPSAodGltZU5vdy5nZXRIb3VycygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldEhvdXJzKCk7XFxuXFx0XFx0bGV0IG1pbnV0ZSA9ICh0aW1lTm93LmdldE1pbnV0ZXMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRNaW51dGVzKCk7XFxuXFx0XFx0bGV0IHNlY29uZCA9ICh0aW1lTm93LmdldFNlY29uZHMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRTZWNvbmRzKCk7XFxuXFx0XFx0bGV0IHRpbWVzdGFtcCA9IGAke3llYXJ9JHttb250aH0ke2RheX1fJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XFxuXFx0XFx0YXdhaXQgbnMudHJ5V3JpdGVQb3J0KDEsIGB0JHt0aW1lc3RhbXB9XyR7dHlwZX0gPSAke29ian07XFxcXG5gKTtcXG5cXG5cXHRcXHRpZiAoWydFUlJPUicsICdURVJNSU5BTCddLmluZGV4T2YodHlwZSkgIT0gLTEpIG5zLnRwcmludChgJHt0aW1lc3RhbXB9ICR7dHlwZX0gPSAke29ian1gKTtcXG5cXHR9XFxuXFxuXFx0bGV0IHNlcnZlciA9IG5zLmFyZ3NbMF07XFxuXFx0bGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkoc2VydmVyKTtcXG5cXHRsZXQgbWluU2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJNaW5TZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0bGV0IGxvb3AgPSAwO1xcblxcdGxldCBwcmV2aW91c01vbmV5ID0gMDtcXG5cXG5cXHR3aGlsZSAobWF4TW9uZXkgIT0gMCkge1xcblxcdFxcdGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdGxldCBjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFxuXFx0XFx0bGV0IGhhY2tlZE1vbmV5ID0gMDtcXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5ID4gMC4xICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHRoYWNrZWRNb25leSA9IGF3YWl0IG5zLmhhY2soc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5IDwgMC45ICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHR3aGlsZSAoY3VycmVudE1vbmV5IDw9IHByZXZpb3VzTW9uZXkpIHtcXG5cXHRcXHRcXHRcXHRhd2FpdCBucy5ncm93KHNlcnZlcik7XFxuXFx0XFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdFxcdHByZXZpb3VzTW9uZXkgPSBjdXJyZW50TW9uZXk7XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRTZWN1cml0eSA+IDIgKiBtaW5TZWN1cml0eSkge1xcblxcdFxcdFxcdGF3YWl0IG5zLndlYWtlbihzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0bnMucHJpbnQoYHtsb29wOiAkeysrbG9vcH0sIGhhY2s6ICR7TWF0aC5mbG9vcihoYWNrZWRNb25leSl9LCBtb25leTogJHtNYXRoLmZsb29yKGN1cnJlbnRNb25leSl9IC8gJHtNYXRoLmZsb29yKG1heE1vbmV5KX0gPT0gJHsoKGN1cnJlbnRNb25leSAvIG1heE1vbmV5KSAqIDEwMCkudG9GaXhlZCgyKX0sIHNlY3VyaXR5OiAke2N1cnJlbnRTZWN1cml0eS50b0ZpeGVkKDIpfSAvICR7TWF0aC5mbG9vcihtaW5TZWN1cml0eSl9ID09ICR7KChjdXJyZW50U2VjdXJpdHkgLyBtaW5TZWN1cml0eSkgKiAxMDApLnRvRml4ZWQoNCl9fWApO1xcblxcdFxcdGF3YWl0IG5zLnNsZWVwKDUwKTtcXG5cXHR9XFxufVwiLFwiZmlsZW5hbWVcIjpcInNpbXBsZS1oYWNrLmpzXCIsXCJzZXJ2ZXJcIjpcInNpbHZlci1oZWxpeFwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wibWF4LWhhcmR3YXJlXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOnRydWUsXCJiYXNlRGlmZmljdWx0eVwiOjMwLFwiaGFja0RpZmZpY3VsdHlcIjoyMC4zMjU5OTk5OTk5OTk3MDYsXCJtaW5EaWZmaWN1bHR5XCI6MTAsXCJtb25leUF2YWlsYWJsZVwiOjI1MDA4MjU3MS41MjEzMjU2MixcIm1vbmV5TWF4XCI6MTEyNTAwMDAwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6MixcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxNTAsXCJzZXJ2ZXJHcm93dGhcIjozMCxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImhvbmctZmFuZy10ZWFcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiaG9uZy1mYW5nLXRlYVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMjUuOS4xLjdcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjE2LFwibWVzc2FnZXNcIjpbXCJicmlnaHRlci10aGFuLXRoZS1zdW4ubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiSG9uZ0ZhbmcgVGVhaG91c2VcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJzaW1wbGUtaGFjay5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcblxcdG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcblxcdGFzeW5jIGZ1bmN0aW9uIHdyaXRlTG9nKHR5cGUsIG9iaikge1xcblxcdFxcdGxldCB0aW1lTm93ID0gbmV3IERhdGUoKTtcXG5cXHRcXHRsZXQgeWVhciA9IHRpbWVOb3cuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyKTtcXG5cXHRcXHRsZXQgbW9udGggPSAodGltZU5vdy5nZXRNb250aCgpIDwgOSA/ICcwJyA6ICcnKSArICh0aW1lTm93LmdldE1vbnRoKCkgKyAxKTtcXG5cXHRcXHRsZXQgZGF5ID0gKHRpbWVOb3cuZ2V0RGF0ZSgpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldERhdGUoKTtcXG5cXHRcXHRsZXQgaG91ciA9ICh0aW1lTm93LmdldEhvdXJzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0SG91cnMoKTtcXG5cXHRcXHRsZXQgbWludXRlID0gKHRpbWVOb3cuZ2V0TWludXRlcygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldE1pbnV0ZXMoKTtcXG5cXHRcXHRsZXQgc2Vjb25kID0gKHRpbWVOb3cuZ2V0U2Vjb25kcygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldFNlY29uZHMoKTtcXG5cXHRcXHRsZXQgdGltZXN0YW1wID0gYCR7eWVhcn0ke21vbnRofSR7ZGF5fV8ke2hvdXJ9JHttaW51dGV9JHtzZWNvbmR9YDtcXG5cXHRcXHRhd2FpdCBucy50cnlXcml0ZVBvcnQoMSwgYHQke3RpbWVzdGFtcH1fJHt0eXBlfSA9ICR7b2JqfTtcXFxcbmApO1xcblxcblxcdFxcdGlmIChbJ0VSUk9SJywgJ1RFUk1JTkFMJ10uaW5kZXhPZih0eXBlKSAhPSAtMSkgbnMudHByaW50KGAke3RpbWVzdGFtcH0gJHt0eXBlfSA9ICR7b2JqfWApO1xcblxcdH1cXG5cXG5cXHRsZXQgc2VydmVyID0gbnMuYXJnc1swXTtcXG5cXHRsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShzZXJ2ZXIpO1xcblxcdGxldCBtaW5TZWN1cml0eSA9IG5zLmdldFNlcnZlck1pblNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRsZXQgbG9vcCA9IDA7XFxuXFx0bGV0IHByZXZpb3VzTW9uZXkgPSAwO1xcblxcblxcdHdoaWxlIChtYXhNb25leSAhPSAwKSB7XFxuXFx0XFx0bGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0bGV0IGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXG5cXHRcXHRsZXQgaGFja2VkTW9uZXkgPSAwO1xcblxcdFxcdGlmIChjdXJyZW50TW9uZXkgPiAwLjEgKiBtYXhNb25leSkge1xcblxcdFxcdFxcdGhhY2tlZE1vbmV5ID0gYXdhaXQgbnMuaGFjayhzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChjdXJyZW50TW9uZXkgPCAwLjkgKiBtYXhNb25leSkge1xcblxcdFxcdFxcdHdoaWxlIChjdXJyZW50TW9uZXkgPD0gcHJldmlvdXNNb25leSkge1xcblxcdFxcdFxcdFxcdGF3YWl0IG5zLmdyb3coc2VydmVyKTtcXG5cXHRcXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cHJldmlvdXNNb25leSA9IGN1cnJlbnRNb25leTtcXG5cXG5cXHRcXHRpZiAoY3VycmVudFNlY3VyaXR5ID4gMiAqIG1pblNlY3VyaXR5KSB7XFxuXFx0XFx0XFx0YXdhaXQgbnMud2Vha2VuKHNlcnZlcik7XFxuXFx0XFx0XFx0Y3VycmVudFNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRucy5wcmludChge2xvb3A6ICR7Kytsb29wfSwgaGFjazogJHtNYXRoLmZsb29yKGhhY2tlZE1vbmV5KX0sIG1vbmV5OiAke01hdGguZmxvb3IoY3VycmVudE1vbmV5KX0gLyAke01hdGguZmxvb3IobWF4TW9uZXkpfSA9PSAkeygoY3VycmVudE1vbmV5IC8gbWF4TW9uZXkpICogMTAwKS50b0ZpeGVkKDIpfSwgc2VjdXJpdHk6ICR7Y3VycmVudFNlY3VyaXR5LnRvRml4ZWQoMil9IC8gJHtNYXRoLmZsb29yKG1pblNlY3VyaXR5KX0gPT0gJHsoKGN1cnJlbnRTZWN1cml0eSAvIG1pblNlY3VyaXR5KSAqIDEwMCkudG9GaXhlZCg0KX19YCk7XFxuXFx0XFx0YXdhaXQgbnMuc2xlZXAoNTApO1xcblxcdH1cXG59XCIsXCJmaWxlbmFtZVwiOlwic2ltcGxlLWhhY2suanNcIixcInNlcnZlclwiOlwiaG9uZy1mYW5nLXRlYVwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiLFwiQ1NFQ1wiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjE1LFwiaGFja0RpZmZpY3VsdHlcIjoxMC4wMDE5OTk5OTk5OTg5MzcsXCJtaW5EaWZmaWN1bHR5XCI6NSxcIm1vbmV5QXZhaWxhYmxlXCI6MTYwNzE5MjkuMTYxMTQyNTg4LFwibW9uZXlNYXhcIjo3NTAwMDAwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6MCxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjozMCxcInNlcnZlckdyb3d0aFwiOjIwLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiaGFyYWtpcmktc3VzaGlcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtNjc4ODI0LmNjdFwiLFwidHlwZVwiOlwiQWxnb3JpdGhtaWMgU3RvY2sgVHJhZGVyIElWXCIsXCJkYXRhXCI6WzMsWzE4MiwxNjEsMzAsOTYsNTksNzhdXSxcInJld2FyZFwiOntcInR5cGVcIjoxfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiaGFyYWtpcmktc3VzaGlcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjMxLjcuMy42XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjoxNixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJIYXJhS2lyaSBTdXNoaSBCYXIgTmV0d29ya1wiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcInNpbXBsZS1oYWNrLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuXFx0bnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuXFx0YXN5bmMgZnVuY3Rpb24gd3JpdGVMb2codHlwZSwgb2JqKSB7XFxuXFx0XFx0bGV0IHRpbWVOb3cgPSBuZXcgRGF0ZSgpO1xcblxcdFxcdGxldCB5ZWFyID0gdGltZU5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpO1xcblxcdFxcdGxldCBtb250aCA9ICh0aW1lTm93LmdldE1vbnRoKCkgPCA5ID8gJzAnIDogJycpICsgKHRpbWVOb3cuZ2V0TW9udGgoKSArIDEpO1xcblxcdFxcdGxldCBkYXkgPSAodGltZU5vdy5nZXREYXRlKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0RGF0ZSgpO1xcblxcdFxcdGxldCBob3VyID0gKHRpbWVOb3cuZ2V0SG91cnMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRIb3VycygpO1xcblxcdFxcdGxldCBtaW51dGUgPSAodGltZU5vdy5nZXRNaW51dGVzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0TWludXRlcygpO1xcblxcdFxcdGxldCBzZWNvbmQgPSAodGltZU5vdy5nZXRTZWNvbmRzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0U2Vjb25kcygpO1xcblxcdFxcdGxldCB0aW1lc3RhbXAgPSBgJHt5ZWFyfSR7bW9udGh9JHtkYXl9XyR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xcblxcdFxcdGF3YWl0IG5zLnRyeVdyaXRlUG9ydCgxLCBgdCR7dGltZXN0YW1wfV8ke3R5cGV9ID0gJHtvYmp9O1xcXFxuYCk7XFxuXFxuXFx0XFx0aWYgKFsnRVJST1InLCAnVEVSTUlOQUwnXS5pbmRleE9mKHR5cGUpICE9IC0xKSBucy50cHJpbnQoYCR7dGltZXN0YW1wfSAke3R5cGV9ID0gJHtvYmp9YCk7XFxuXFx0fVxcblxcblxcdGxldCBzZXJ2ZXIgPSBucy5hcmdzWzBdO1xcblxcdGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KHNlcnZlcik7XFxuXFx0bGV0IG1pblNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyTWluU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcdGxldCBsb29wID0gMDtcXG5cXHRsZXQgcHJldmlvdXNNb25leSA9IDA7XFxuXFxuXFx0d2hpbGUgKG1heE1vbmV5ICE9IDApIHtcXG5cXHRcXHRsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRsZXQgY3VycmVudFNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcblxcdFxcdGxldCBoYWNrZWRNb25leSA9IDA7XFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA+IDAuMSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0aGFja2VkTW9uZXkgPSBhd2FpdCBucy5oYWNrKHNlcnZlcik7XFxuXFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA8IDAuOSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0d2hpbGUgKGN1cnJlbnRNb25leSA8PSBwcmV2aW91c01vbmV5KSB7XFxuXFx0XFx0XFx0XFx0YXdhaXQgbnMuZ3JvdyhzZXJ2ZXIpO1xcblxcdFxcdFxcdFxcdGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHRcXHRwcmV2aW91c01vbmV5ID0gY3VycmVudE1vbmV5O1xcblxcblxcdFxcdGlmIChjdXJyZW50U2VjdXJpdHkgPiAyICogbWluU2VjdXJpdHkpIHtcXG5cXHRcXHRcXHRhd2FpdCBucy53ZWFrZW4oc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0XFx0fVxcblxcblxcdFxcdG5zLnByaW50KGB7bG9vcDogJHsrK2xvb3B9LCBoYWNrOiAke01hdGguZmxvb3IoaGFja2VkTW9uZXkpfSwgbW9uZXk6ICR7TWF0aC5mbG9vcihjdXJyZW50TW9uZXkpfSAvICR7TWF0aC5mbG9vcihtYXhNb25leSl9ID09ICR7KChjdXJyZW50TW9uZXkgLyBtYXhNb25leSkgKiAxMDApLnRvRml4ZWQoMil9LCBzZWN1cml0eTogJHtjdXJyZW50U2VjdXJpdHkudG9GaXhlZCgyKX0gLyAke01hdGguZmxvb3IobWluU2VjdXJpdHkpfSA9PSAkeygoY3VycmVudFNlY3VyaXR5IC8gbWluU2VjdXJpdHkpICogMTAwKS50b0ZpeGVkKDQpfX1gKTtcXG5cXHRcXHRhd2FpdCBucy5zbGVlcCg1MCk7XFxuXFx0fVxcbn1cIixcImZpbGVuYW1lXCI6XCJzaW1wbGUtaGFjay5qc1wiLFwic2VydmVyXCI6XCJoYXJha2lyaS1zdXNoaVwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjE1LFwiaGFja0RpZmZpY3VsdHlcIjoxMC4wMDU5OTk5OTk5OTkyNjgsXCJtaW5EaWZmaWN1bHR5XCI6NSxcIm1vbmV5QXZhaWxhYmxlXCI6MjU4MDU1NzAuMjc4NTY5OTQ0LFwibW9uZXlNYXhcIjoxMDAwMDAwMDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjAsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6NDAsXCJzZXJ2ZXJHcm93dGhcIjo0MCxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcInBoYW50YXN5XCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwicGhhbnRhc3lcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjM0LjIuMi4zXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJQaGFudGFzeSBDbHViXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wic2ltcGxlLWhhY2suanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG5cXHRucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG5cXHRhc3luYyBmdW5jdGlvbiB3cml0ZUxvZyh0eXBlLCBvYmopIHtcXG5cXHRcXHRsZXQgdGltZU5vdyA9IG5ldyBEYXRlKCk7XFxuXFx0XFx0bGV0IHllYXIgPSB0aW1lTm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMik7XFxuXFx0XFx0bGV0IG1vbnRoID0gKHRpbWVOb3cuZ2V0TW9udGgoKSA8IDkgPyAnMCcgOiAnJykgKyAodGltZU5vdy5nZXRNb250aCgpICsgMSk7XFxuXFx0XFx0bGV0IGRheSA9ICh0aW1lTm93LmdldERhdGUoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXREYXRlKCk7XFxuXFx0XFx0bGV0IGhvdXIgPSAodGltZU5vdy5nZXRIb3VycygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldEhvdXJzKCk7XFxuXFx0XFx0bGV0IG1pbnV0ZSA9ICh0aW1lTm93LmdldE1pbnV0ZXMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRNaW51dGVzKCk7XFxuXFx0XFx0bGV0IHNlY29uZCA9ICh0aW1lTm93LmdldFNlY29uZHMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRTZWNvbmRzKCk7XFxuXFx0XFx0bGV0IHRpbWVzdGFtcCA9IGAke3llYXJ9JHttb250aH0ke2RheX1fJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XFxuXFx0XFx0YXdhaXQgbnMudHJ5V3JpdGVQb3J0KDEsIGB0JHt0aW1lc3RhbXB9XyR7dHlwZX0gPSAke29ian07XFxcXG5gKTtcXG5cXG5cXHRcXHRpZiAoWydFUlJPUicsICdURVJNSU5BTCddLmluZGV4T2YodHlwZSkgIT0gLTEpIG5zLnRwcmludChgJHt0aW1lc3RhbXB9ICR7dHlwZX0gPSAke29ian1gKTtcXG5cXHR9XFxuXFxuXFx0bGV0IHNlcnZlciA9IG5zLmFyZ3NbMF07XFxuXFx0bGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkoc2VydmVyKTtcXG5cXHRsZXQgbWluU2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJNaW5TZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0bGV0IGxvb3AgPSAwO1xcblxcdGxldCBwcmV2aW91c01vbmV5ID0gMDtcXG5cXG5cXHR3aGlsZSAobWF4TW9uZXkgIT0gMCkge1xcblxcdFxcdGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdGxldCBjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFxuXFx0XFx0bGV0IGhhY2tlZE1vbmV5ID0gMDtcXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5ID4gMC4xICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHRoYWNrZWRNb25leSA9IGF3YWl0IG5zLmhhY2soc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5IDwgMC45ICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHR3aGlsZSAoY3VycmVudE1vbmV5IDw9IHByZXZpb3VzTW9uZXkpIHtcXG5cXHRcXHRcXHRcXHRhd2FpdCBucy5ncm93KHNlcnZlcik7XFxuXFx0XFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdFxcdHByZXZpb3VzTW9uZXkgPSBjdXJyZW50TW9uZXk7XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRTZWN1cml0eSA+IDIgKiBtaW5TZWN1cml0eSkge1xcblxcdFxcdFxcdGF3YWl0IG5zLndlYWtlbihzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0bnMucHJpbnQoYHtsb29wOiAkeysrbG9vcH0sIGhhY2s6ICR7TWF0aC5mbG9vcihoYWNrZWRNb25leSl9LCBtb25leTogJHtNYXRoLmZsb29yKGN1cnJlbnRNb25leSl9IC8gJHtNYXRoLmZsb29yKG1heE1vbmV5KX0gPT0gJHsoKGN1cnJlbnRNb25leSAvIG1heE1vbmV5KSAqIDEwMCkudG9GaXhlZCgyKX0sIHNlY3VyaXR5OiAke2N1cnJlbnRTZWN1cml0eS50b0ZpeGVkKDIpfSAvICR7TWF0aC5mbG9vcihtaW5TZWN1cml0eSl9ID09ICR7KChjdXJyZW50U2VjdXJpdHkgLyBtaW5TZWN1cml0eSkgKiAxMDApLnRvRml4ZWQoNCl9fWApO1xcblxcdFxcdGF3YWl0IG5zLnNsZWVwKDUwKTtcXG5cXHR9XFxufVwiLFwiZmlsZW5hbWVcIjpcInNpbXBsZS1oYWNrLmpzXCIsXCJzZXJ2ZXJcIjpcInBoYW50YXN5XCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJuZWN0YXItbmV0XCIsXCJjb21wdXRla1wiLFwiam9obnNvbi1vcnRob1wiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MjAsXCJoYWNrRGlmZmljdWx0eVwiOjEzLjc0Mzk5OTk5OTk5OTgsXCJtaW5EaWZmaWN1bHR5XCI6NyxcIm1vbmV5QXZhaWxhYmxlXCI6MTYyOTc0MjQ0LjQxNTkwMDYyLFwibW9uZXlNYXhcIjo2MDAwMDAwMDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjIsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MTAwLFwic2VydmVyR3Jvd3RoXCI6MzUsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJtYXgtaGFyZHdhcmVcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtOTMyOTA5LmNjdFwiLFwidHlwZVwiOlwiUHJvcGVyIDItQ29sb3Jpbmcgb2YgYSBHcmFwaFwiLFwiZGF0YVwiOls2LFtbMCwxXSxbMiw0XSxbMSw0XV1dLFwicmV3YXJkXCI6e1widHlwZVwiOjN9fX1dLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcIm1heC1oYXJkd2FyZVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMjMuNy41LjJcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIk1heCBIYXJkd2FyZSBTdG9yZVwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcInNpbXBsZS1oYWNrLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuXFx0bnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuXFx0YXN5bmMgZnVuY3Rpb24gd3JpdGVMb2codHlwZSwgb2JqKSB7XFxuXFx0XFx0bGV0IHRpbWVOb3cgPSBuZXcgRGF0ZSgpO1xcblxcdFxcdGxldCB5ZWFyID0gdGltZU5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpO1xcblxcdFxcdGxldCBtb250aCA9ICh0aW1lTm93LmdldE1vbnRoKCkgPCA5ID8gJzAnIDogJycpICsgKHRpbWVOb3cuZ2V0TW9udGgoKSArIDEpO1xcblxcdFxcdGxldCBkYXkgPSAodGltZU5vdy5nZXREYXRlKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0RGF0ZSgpO1xcblxcdFxcdGxldCBob3VyID0gKHRpbWVOb3cuZ2V0SG91cnMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRIb3VycygpO1xcblxcdFxcdGxldCBtaW51dGUgPSAodGltZU5vdy5nZXRNaW51dGVzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0TWludXRlcygpO1xcblxcdFxcdGxldCBzZWNvbmQgPSAodGltZU5vdy5nZXRTZWNvbmRzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0U2Vjb25kcygpO1xcblxcdFxcdGxldCB0aW1lc3RhbXAgPSBgJHt5ZWFyfSR7bW9udGh9JHtkYXl9XyR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xcblxcdFxcdGF3YWl0IG5zLnRyeVdyaXRlUG9ydCgxLCBgdCR7dGltZXN0YW1wfV8ke3R5cGV9ID0gJHtvYmp9O1xcXFxuYCk7XFxuXFxuXFx0XFx0aWYgKFsnRVJST1InLCAnVEVSTUlOQUwnXS5pbmRleE9mKHR5cGUpICE9IC0xKSBucy50cHJpbnQoYCR7dGltZXN0YW1wfSAke3R5cGV9ID0gJHtvYmp9YCk7XFxuXFx0fVxcblxcblxcdGxldCBzZXJ2ZXIgPSBucy5hcmdzWzBdO1xcblxcdGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KHNlcnZlcik7XFxuXFx0bGV0IG1pblNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyTWluU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcdGxldCBsb29wID0gMDtcXG5cXHRsZXQgcHJldmlvdXNNb25leSA9IDA7XFxuXFxuXFx0d2hpbGUgKG1heE1vbmV5ICE9IDApIHtcXG5cXHRcXHRsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRsZXQgY3VycmVudFNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcblxcdFxcdGxldCBoYWNrZWRNb25leSA9IDA7XFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA+IDAuMSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0aGFja2VkTW9uZXkgPSBhd2FpdCBucy5oYWNrKHNlcnZlcik7XFxuXFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRNb25leSA8IDAuOSAqIG1heE1vbmV5KSB7XFxuXFx0XFx0XFx0d2hpbGUgKGN1cnJlbnRNb25leSA8PSBwcmV2aW91c01vbmV5KSB7XFxuXFx0XFx0XFx0XFx0YXdhaXQgbnMuZ3JvdyhzZXJ2ZXIpO1xcblxcdFxcdFxcdFxcdGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHRcXHRwcmV2aW91c01vbmV5ID0gY3VycmVudE1vbmV5O1xcblxcblxcdFxcdGlmIChjdXJyZW50U2VjdXJpdHkgPiAyICogbWluU2VjdXJpdHkpIHtcXG5cXHRcXHRcXHRhd2FpdCBucy53ZWFrZW4oc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0XFx0fVxcblxcblxcdFxcdG5zLnByaW50KGB7bG9vcDogJHsrK2xvb3B9LCBoYWNrOiAke01hdGguZmxvb3IoaGFja2VkTW9uZXkpfSwgbW9uZXk6ICR7TWF0aC5mbG9vcihjdXJyZW50TW9uZXkpfSAvICR7TWF0aC5mbG9vcihtYXhNb25leSl9ID09ICR7KChjdXJyZW50TW9uZXkgLyBtYXhNb25leSkgKiAxMDApLnRvRml4ZWQoMil9LCBzZWN1cml0eTogJHtjdXJyZW50U2VjdXJpdHkudG9GaXhlZCgyKX0gLyAke01hdGguZmxvb3IobWluU2VjdXJpdHkpfSA9PSAkeygoY3VycmVudFNlY3VyaXR5IC8gbWluU2VjdXJpdHkpICogMTAwKS50b0ZpeGVkKDQpfX1gKTtcXG5cXHRcXHRhd2FpdCBucy5zbGVlcCg1MCk7XFxuXFx0fVxcbn1cIixcImZpbGVuYW1lXCI6XCJzaW1wbGUtaGFjay5qc1wiLFwic2VydmVyXCI6XCJtYXgtaGFyZHdhcmVcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcIm4wMGRsZXNcIixcIm5lby1uZXRcIixcInNpbHZlci1oZWxpeFwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjp0cnVlLFwiYmFzZURpZmZpY3VsdHlcIjoxNSxcImhhY2tEaWZmaWN1bHR5XCI6MTAuMDk3OTk5OTk5OTk5NjgsXCJtaW5EaWZmaWN1bHR5XCI6NSxcIm1vbmV5QXZhaWxhYmxlXCI6ODc4MTkxNDEuNzQ0OTAyMTIsXCJtb25leU1heFwiOjI1MDAwMDAwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6MSxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjo4MCxcInNlcnZlckdyb3d0aFwiOjMwLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwib21lZ2EtbmV0XCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwib21lZ2EtbmV0XCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI5OS4xLjAuOFwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltcInRoZS1uZXctZ29kLmxpdFwiXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIk9tZWdhIFNvZnR3YXJlXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wic2ltcGxlLWhhY2suanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG5cXHRucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG5cXHRhc3luYyBmdW5jdGlvbiB3cml0ZUxvZyh0eXBlLCBvYmopIHtcXG5cXHRcXHRsZXQgdGltZU5vdyA9IG5ldyBEYXRlKCk7XFxuXFx0XFx0bGV0IHllYXIgPSB0aW1lTm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMik7XFxuXFx0XFx0bGV0IG1vbnRoID0gKHRpbWVOb3cuZ2V0TW9udGgoKSA8IDkgPyAnMCcgOiAnJykgKyAodGltZU5vdy5nZXRNb250aCgpICsgMSk7XFxuXFx0XFx0bGV0IGRheSA9ICh0aW1lTm93LmdldERhdGUoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXREYXRlKCk7XFxuXFx0XFx0bGV0IGhvdXIgPSAodGltZU5vdy5nZXRIb3VycygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldEhvdXJzKCk7XFxuXFx0XFx0bGV0IG1pbnV0ZSA9ICh0aW1lTm93LmdldE1pbnV0ZXMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRNaW51dGVzKCk7XFxuXFx0XFx0bGV0IHNlY29uZCA9ICh0aW1lTm93LmdldFNlY29uZHMoKSA8IDEwID8gJzAnIDogJycpICsgdGltZU5vdy5nZXRTZWNvbmRzKCk7XFxuXFx0XFx0bGV0IHRpbWVzdGFtcCA9IGAke3llYXJ9JHttb250aH0ke2RheX1fJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XFxuXFx0XFx0YXdhaXQgbnMudHJ5V3JpdGVQb3J0KDEsIGB0JHt0aW1lc3RhbXB9XyR7dHlwZX0gPSAke29ian07XFxcXG5gKTtcXG5cXG5cXHRcXHRpZiAoWydFUlJPUicsICdURVJNSU5BTCddLmluZGV4T2YodHlwZSkgIT0gLTEpIG5zLnRwcmludChgJHt0aW1lc3RhbXB9ICR7dHlwZX0gPSAke29ian1gKTtcXG5cXHR9XFxuXFxuXFx0bGV0IHNlcnZlciA9IG5zLmFyZ3NbMF07XFxuXFx0bGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkoc2VydmVyKTtcXG5cXHRsZXQgbWluU2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJNaW5TZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFx0bGV0IGxvb3AgPSAwO1xcblxcdGxldCBwcmV2aW91c01vbmV5ID0gMDtcXG5cXG5cXHR3aGlsZSAobWF4TW9uZXkgIT0gMCkge1xcblxcdFxcdGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdGxldCBjdXJyZW50U2VjdXJpdHkgPSBucy5nZXRTZXJ2ZXJTZWN1cml0eUxldmVsKHNlcnZlcik7XFxuXFxuXFx0XFx0bGV0IGhhY2tlZE1vbmV5ID0gMDtcXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5ID4gMC4xICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHRoYWNrZWRNb25leSA9IGF3YWl0IG5zLmhhY2soc2VydmVyKTtcXG5cXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoY3VycmVudE1vbmV5IDwgMC45ICogbWF4TW9uZXkpIHtcXG5cXHRcXHRcXHR3aGlsZSAoY3VycmVudE1vbmV5IDw9IHByZXZpb3VzTW9uZXkpIHtcXG5cXHRcXHRcXHRcXHRhd2FpdCBucy5ncm93KHNlcnZlcik7XFxuXFx0XFx0XFx0XFx0Y3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUoc2VydmVyKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdFxcdHByZXZpb3VzTW9uZXkgPSBjdXJyZW50TW9uZXk7XFxuXFxuXFx0XFx0aWYgKGN1cnJlbnRTZWN1cml0eSA+IDIgKiBtaW5TZWN1cml0eSkge1xcblxcdFxcdFxcdGF3YWl0IG5zLndlYWtlbihzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0bnMucHJpbnQoYHtsb29wOiAkeysrbG9vcH0sIGhhY2s6ICR7TWF0aC5mbG9vcihoYWNrZWRNb25leSl9LCBtb25leTogJHtNYXRoLmZsb29yKGN1cnJlbnRNb25leSl9IC8gJHtNYXRoLmZsb29yKG1heE1vbmV5KX0gPT0gJHsoKGN1cnJlbnRNb25leSAvIG1heE1vbmV5KSAqIDEwMCkudG9GaXhlZCgyKX0sIHNlY3VyaXR5OiAke2N1cnJlbnRTZWN1cml0eS50b0ZpeGVkKDIpfSAvICR7TWF0aC5mbG9vcihtaW5TZWN1cml0eSl9ID09ICR7KChjdXJyZW50U2VjdXJpdHkgLyBtaW5TZWN1cml0eSkgKiAxMDApLnRvRml4ZWQoNCl9fWApO1xcblxcdFxcdGF3YWl0IG5zLnNsZWVwKDUwKTtcXG5cXHR9XFxufVwiLFwiZmlsZW5hbWVcIjpcInNpbXBsZS1oYWNrLmpzXCIsXCJzZXJ2ZXJcIjpcIm9tZWdhLW5ldFwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiQ1NFQ1wiLFwibmV0bGlua1wiLFwiY3J1c2gtZml0bmVzc1wiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MjksXCJoYWNrRGlmZmljdWx0eVwiOjIwLjEwMzk5OTk5OTk5OTgwNCxcIm1pbkRpZmZpY3VsdHlcIjoxMCxcIm1vbmV5QXZhaWxhYmxlXCI6MzkzNTE0MzUyLjk1MTA4NTE1LFwibW9uZXlNYXhcIjoxNzA2MTgyMDUwLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjoyLFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjIwMCxcInNlcnZlckdyb3d0aFwiOjM0LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiY3J1c2gtZml0bmVzc1wiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC01NTc3NzktTmV0YnVybmVycy5jY3RcIixcInR5cGVcIjpcIk1pbmltdW0gUGF0aCBTdW0gaW4gYSBUcmlhbmdsZVwiLFwiZGF0YVwiOltbNF0sWzksN10sWzMsNSw2XSxbNiw5LDEsN10sWzksNyw3LDksOF0sWzIsOSwyLDUsMyw1XSxbOSw4LDEsMyw4LDksNl0sWzQsMSw3LDgsMSw4LDgsOV0sWzMsMSwyLDEsNiw1LDUsMSw4XSxbNyw0LDQsNSw5LDksNyw4LDgsNF0sWzcsMiwzLDUsMywyLDYsMyw2LDMsM11dLFwicmV3YXJkXCI6e1widHlwZVwiOjAsXCJuYW1lXCI6XCJOZXRidXJuZXJzXCJ9fX1dLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImNydXNoLWZpdG5lc3NcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjkxLjkuMy4wXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjowLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIkNydXNoIEZpdG5lc3NcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJzaW1wbGUtaGFjay5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcblxcdG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcblxcdGFzeW5jIGZ1bmN0aW9uIHdyaXRlTG9nKHR5cGUsIG9iaikge1xcblxcdFxcdGxldCB0aW1lTm93ID0gbmV3IERhdGUoKTtcXG5cXHRcXHRsZXQgeWVhciA9IHRpbWVOb3cuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyKTtcXG5cXHRcXHRsZXQgbW9udGggPSAodGltZU5vdy5nZXRNb250aCgpIDwgOSA/ICcwJyA6ICcnKSArICh0aW1lTm93LmdldE1vbnRoKCkgKyAxKTtcXG5cXHRcXHRsZXQgZGF5ID0gKHRpbWVOb3cuZ2V0RGF0ZSgpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldERhdGUoKTtcXG5cXHRcXHRsZXQgaG91ciA9ICh0aW1lTm93LmdldEhvdXJzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0SG91cnMoKTtcXG5cXHRcXHRsZXQgbWludXRlID0gKHRpbWVOb3cuZ2V0TWludXRlcygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldE1pbnV0ZXMoKTtcXG5cXHRcXHRsZXQgc2Vjb25kID0gKHRpbWVOb3cuZ2V0U2Vjb25kcygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldFNlY29uZHMoKTtcXG5cXHRcXHRsZXQgdGltZXN0YW1wID0gYCR7eWVhcn0ke21vbnRofSR7ZGF5fV8ke2hvdXJ9JHttaW51dGV9JHtzZWNvbmR9YDtcXG5cXHRcXHRhd2FpdCBucy50cnlXcml0ZVBvcnQoMSwgYHQke3RpbWVzdGFtcH1fJHt0eXBlfSA9ICR7b2JqfTtcXFxcbmApO1xcblxcblxcdFxcdGlmIChbJ0VSUk9SJywgJ1RFUk1JTkFMJ10uaW5kZXhPZih0eXBlKSAhPSAtMSkgbnMudHByaW50KGAke3RpbWVzdGFtcH0gJHt0eXBlfSA9ICR7b2JqfWApO1xcblxcdH1cXG5cXG5cXHRsZXQgc2VydmVyID0gbnMuYXJnc1swXTtcXG5cXHRsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShzZXJ2ZXIpO1xcblxcdGxldCBtaW5TZWN1cml0eSA9IG5zLmdldFNlcnZlck1pblNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRsZXQgbG9vcCA9IDA7XFxuXFx0bGV0IHByZXZpb3VzTW9uZXkgPSAwO1xcblxcblxcdHdoaWxlIChtYXhNb25leSAhPSAwKSB7XFxuXFx0XFx0bGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0bGV0IGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXG5cXHRcXHRsZXQgaGFja2VkTW9uZXkgPSAwO1xcblxcdFxcdGlmIChjdXJyZW50TW9uZXkgPiAwLjEgKiBtYXhNb25leSkge1xcblxcdFxcdFxcdGhhY2tlZE1vbmV5ID0gYXdhaXQgbnMuaGFjayhzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChjdXJyZW50TW9uZXkgPCAwLjkgKiBtYXhNb25leSkge1xcblxcdFxcdFxcdHdoaWxlIChjdXJyZW50TW9uZXkgPD0gcHJldmlvdXNNb25leSkge1xcblxcdFxcdFxcdFxcdGF3YWl0IG5zLmdyb3coc2VydmVyKTtcXG5cXHRcXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cHJldmlvdXNNb25leSA9IGN1cnJlbnRNb25leTtcXG5cXG5cXHRcXHRpZiAoY3VycmVudFNlY3VyaXR5ID4gMiAqIG1pblNlY3VyaXR5KSB7XFxuXFx0XFx0XFx0YXdhaXQgbnMud2Vha2VuKHNlcnZlcik7XFxuXFx0XFx0XFx0Y3VycmVudFNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRucy5wcmludChge2xvb3A6ICR7Kytsb29wfSwgaGFjazogJHtNYXRoLmZsb29yKGhhY2tlZE1vbmV5KX0sIG1vbmV5OiAke01hdGguZmxvb3IoY3VycmVudE1vbmV5KX0gLyAke01hdGguZmxvb3IobWF4TW9uZXkpfSA9PSAkeygoY3VycmVudE1vbmV5IC8gbWF4TW9uZXkpICogMTAwKS50b0ZpeGVkKDIpfSwgc2VjdXJpdHk6ICR7Y3VycmVudFNlY3VyaXR5LnRvRml4ZWQoMil9IC8gJHtNYXRoLmZsb29yKG1pblNlY3VyaXR5KX0gPT0gJHsoKGN1cnJlbnRTZWN1cml0eSAvIG1pblNlY3VyaXR5KSAqIDEwMCkudG9GaXhlZCg0KX19YCk7XFxuXFx0XFx0YXdhaXQgbnMuc2xlZXAoNTApO1xcblxcdH1cXG59XCIsXCJmaWxlbmFtZVwiOlwic2ltcGxlLWhhY2suanNcIixcInNlcnZlclwiOlwiY3J1c2gtZml0bmVzc1wifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wib21lZ2EtbmV0XCIsXCJ6Yi1pbnN0aXR1dGVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjQ1LFwiaGFja0RpZmZpY3VsdHlcIjo0NSxcIm1pbkRpZmZpY3VsdHlcIjoxNSxcIm1vbmV5QXZhaWxhYmxlXCI6NDg2NDczODEsXCJtb25leU1heFwiOjEyMTYxODQ1MjUsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjIsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MjM2LFwic2VydmVyR3Jvd3RoXCI6MjcsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJpcm9uLWd5bVwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC05ODcyMjAtU2VjdG9yMTIuY2N0XCIsXCJ0eXBlXCI6XCJDb21wcmVzc2lvbiBJSUk6IExaIENvbXByZXNzaW9uXCIsXCJkYXRhXCI6XCJSUExyelFCZlBMcnpRQmdyelFCZ3J6UUN6UUN6UUN6UURDelFDelFER1NrekVWMksxeUJyM3lCM3lCM3l5YVJ5YTNwdDRrRHQ0a2xcIixcInJld2FyZFwiOntcInR5cGVcIjowLFwibmFtZVwiOlwiU2VjdG9yLTEyXCJ9fX1dLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjpmYWxzZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJpcm9uLWd5bVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNDcuOC40LjJcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIklyb24gR3ltIE5ldHdvcmtcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJzaW1wbGUtaGFjay5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcblxcdG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcblxcdGFzeW5jIGZ1bmN0aW9uIHdyaXRlTG9nKHR5cGUsIG9iaikge1xcblxcdFxcdGxldCB0aW1lTm93ID0gbmV3IERhdGUoKTtcXG5cXHRcXHRsZXQgeWVhciA9IHRpbWVOb3cuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyKTtcXG5cXHRcXHRsZXQgbW9udGggPSAodGltZU5vdy5nZXRNb250aCgpIDwgOSA/ICcwJyA6ICcnKSArICh0aW1lTm93LmdldE1vbnRoKCkgKyAxKTtcXG5cXHRcXHRsZXQgZGF5ID0gKHRpbWVOb3cuZ2V0RGF0ZSgpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldERhdGUoKTtcXG5cXHRcXHRsZXQgaG91ciA9ICh0aW1lTm93LmdldEhvdXJzKCkgPCAxMCA/ICcwJyA6ICcnKSArIHRpbWVOb3cuZ2V0SG91cnMoKTtcXG5cXHRcXHRsZXQgbWludXRlID0gKHRpbWVOb3cuZ2V0TWludXRlcygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldE1pbnV0ZXMoKTtcXG5cXHRcXHRsZXQgc2Vjb25kID0gKHRpbWVOb3cuZ2V0U2Vjb25kcygpIDwgMTAgPyAnMCcgOiAnJykgKyB0aW1lTm93LmdldFNlY29uZHMoKTtcXG5cXHRcXHRsZXQgdGltZXN0YW1wID0gYCR7eWVhcn0ke21vbnRofSR7ZGF5fV8ke2hvdXJ9JHttaW51dGV9JHtzZWNvbmR9YDtcXG5cXHRcXHRhd2FpdCBucy50cnlXcml0ZVBvcnQoMSwgYHQke3RpbWVzdGFtcH1fJHt0eXBlfSA9ICR7b2JqfTtcXFxcbmApO1xcblxcblxcdFxcdGlmIChbJ0VSUk9SJywgJ1RFUk1JTkFMJ10uaW5kZXhPZih0eXBlKSAhPSAtMSkgbnMudHByaW50KGAke3RpbWVzdGFtcH0gJHt0eXBlfSA9ICR7b2JqfWApO1xcblxcdH1cXG5cXG5cXHRsZXQgc2VydmVyID0gbnMuYXJnc1swXTtcXG5cXHRsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShzZXJ2ZXIpO1xcblxcdGxldCBtaW5TZWN1cml0eSA9IG5zLmdldFNlcnZlck1pblNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXHRsZXQgbG9vcCA9IDA7XFxuXFx0bGV0IHByZXZpb3VzTW9uZXkgPSAwO1xcblxcblxcdHdoaWxlIChtYXhNb25leSAhPSAwKSB7XFxuXFx0XFx0bGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0bGV0IGN1cnJlbnRTZWN1cml0eSA9IG5zLmdldFNlcnZlclNlY3VyaXR5TGV2ZWwoc2VydmVyKTtcXG5cXG5cXHRcXHRsZXQgaGFja2VkTW9uZXkgPSAwO1xcblxcdFxcdGlmIChjdXJyZW50TW9uZXkgPiAwLjEgKiBtYXhNb25leSkge1xcblxcdFxcdFxcdGhhY2tlZE1vbmV5ID0gYXdhaXQgbnMuaGFjayhzZXJ2ZXIpO1xcblxcdFxcdFxcdGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKHNlcnZlcik7XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChjdXJyZW50TW9uZXkgPCAwLjkgKiBtYXhNb25leSkge1xcblxcdFxcdFxcdHdoaWxlIChjdXJyZW50TW9uZXkgPD0gcHJldmlvdXNNb25leSkge1xcblxcdFxcdFxcdFxcdGF3YWl0IG5zLmdyb3coc2VydmVyKTtcXG5cXHRcXHRcXHRcXHRjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShzZXJ2ZXIpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cHJldmlvdXNNb25leSA9IGN1cnJlbnRNb25leTtcXG5cXG5cXHRcXHRpZiAoY3VycmVudFNlY3VyaXR5ID4gMiAqIG1pblNlY3VyaXR5KSB7XFxuXFx0XFx0XFx0YXdhaXQgbnMud2Vha2VuKHNlcnZlcik7XFxuXFx0XFx0XFx0Y3VycmVudFNlY3VyaXR5ID0gbnMuZ2V0U2VydmVyU2VjdXJpdHlMZXZlbChzZXJ2ZXIpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRucy5wcmludChge2xvb3A6ICR7Kytsb29wfSwgaGFjazogJHtNYXRoLmZsb29yKGhhY2tlZE1vbmV5KX0sIG1vbmV5OiAke01hdGguZmxvb3IoY3VycmVudE1vbmV5KX0gLyAke01hdGguZmxvb3IobWF4TW9uZXkpfSA9PSAkeygoY3VycmVudE1vbmV5IC8gbWF4TW9uZXkpICogMTAwKS50b0ZpeGVkKDIpfSwgc2VjdXJpdHk6ICR7Y3VycmVudFNlY3VyaXR5LnRvRml4ZWQoMil9IC8gJHtNYXRoLmZsb29yKG1pblNlY3VyaXR5KX0gPT0gJHsoKGN1cnJlbnRTZWN1cml0eSAvIG1pblNlY3VyaXR5KSAqIDEwMCkudG9GaXhlZCg0KX19YCk7XFxuXFx0XFx0YXdhaXQgbnMuc2xlZXAoNTApO1xcblxcdH1cXG59XCIsXCJmaWxlbmFtZVwiOlwic2ltcGxlLWhhY2suanNcIixcInNlcnZlclwiOlwiaXJvbi1neW1cIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbWVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjMwLFwiaGFja0RpZmZpY3VsdHlcIjoyNS45OTM5OTk5OTk5OTk2MjcsXCJtaW5EaWZmaWN1bHR5XCI6MTAsXCJtb25leUF2YWlsYWJsZVwiOjEwMjE2MTkyNC4xNjkzNTg3MixcIm1vbmV5TWF4XCI6NTAwMDAwMDAwLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjoxLFwib3BlblBvcnRDb3VudFwiOjEsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEwMCxcInNlcnZlckdyb3d0aFwiOjIwLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwibWlsbGVuaXVtLWZpdG5lc3NcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtNzI3NzEzLmNjdFwiLFwidHlwZVwiOlwiSGFtbWluZ0NvZGVzOiBFbmNvZGVkIEJpbmFyeSB0byBJbnRlZ2VyXCIsXCJkYXRhXCI6XCIwMTAwMTAwMDExMDExMTEwXCIsXCJyZXdhcmRcIjp7XCJ0eXBlXCI6M319fSx7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC00MTMzOTQuY2N0XCIsXCJ0eXBlXCI6XCJUb3RhbCBXYXlzIHRvIFN1bSBJSVwiLFwiZGF0YVwiOls2MyxbMiwzLDUsMTEsMTIsMTMsMTQsMTUsMTYsMTksMjBdXSxcInJld2FyZFwiOntcInR5cGVcIjozfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcIm1pbGxlbml1bS1maXRuZXNzXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI0LjEuMC4wXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjoxMjgsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiTWlsbGVuaXVtIEZpdG5lc3MgTmV0d29ya1wiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcIkkuSS5JLklcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo1MCxcImhhY2tEaWZmaWN1bHR5XCI6NTAsXCJtaW5EaWZmaWN1bHR5XCI6MTcsXCJtb25leUF2YWlsYWJsZVwiOjI1MDAwMDAwMCxcIm1vbmV5TWF4XCI6NjI1MDAwMDAwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6MyxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjo1MDQsXCJzZXJ2ZXJHcm93dGhcIjozNCxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcInBvd2VyaG91c2UtZml0bmVzc1wiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC01NTQxMTQuY2N0XCIsXCJ0eXBlXCI6XCJGaW5kIExhcmdlc3QgUHJpbWUgRmFjdG9yXCIsXCJkYXRhXCI6MzMwOTQzMjMwLFwicmV3YXJkXCI6e1widHlwZVwiOjN9fX1dLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJwb3dlcmhvdXNlLWZpdG5lc3NcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjkzLjguNi41XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJQb3dlcmhvdXNlIEZpdG5lc3NcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJrdWFpLWdvbmdcIixcIlRoZS1DYXZlXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjo1OSxcImhhY2tEaWZmaWN1bHR5XCI6NTksXCJtaW5EaWZmaWN1bHR5XCI6MjAsXCJtb25leUF2YWlsYWJsZVwiOjkwMDAwMDAwMCxcIm1vbmV5TWF4XCI6MjI1MDAwMDAwMDAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MTAxMSxcInNlcnZlckdyb3d0aFwiOjU2LFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwic25hcC1maXRuZXNzXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W3tcImN0b3JcIjpcIkNvZGluZ0NvbnRyYWN0XCIsXCJkYXRhXCI6e1widHJpZXNcIjowLFwiZm5cIjpcImNvbnRyYWN0LTM2ODMzOS5jY3RcIixcInR5cGVcIjpcIkFsZ29yaXRobWljIFN0b2NrIFRyYWRlciBJSVwiLFwiZGF0YVwiOlsxNzQsNjksNDUsNjQsMTEyLDI2LDM3LDE4MCwxMDEsMTEwLDEwMCwxNjksMTA0LDE2MSwxOTMsMTAyLDkxLDYyLDM5LDU5LDE2NywxMjYsMTQ1LDg1LDE0MSwxMDEsMTE4LDEzNSw1MSwxMzYsMTg3LDEwOSwxNDYsMzYsMTE0LDE0NSw4OCwxMzUsMTY4LDU0LDk5LDE2MywxODMsMTksMTksMTkxXSxcInJld2FyZFwiOntcInR5cGVcIjoxfX19LHtcImN0b3JcIjpcIkNvZGluZ0NvbnRyYWN0XCIsXCJkYXRhXCI6e1widHJpZXNcIjowLFwiZm5cIjpcImNvbnRyYWN0LTM5ODEyNy5jY3RcIixcInR5cGVcIjpcIkZpbmQgQWxsIFZhbGlkIE1hdGggRXhwcmVzc2lvbnNcIixcImRhdGFcIjpbXCI3NzE2MTgxNTM1NlwiLC00MV0sXCJyZXdhcmRcIjp7XCJ0eXBlXCI6M319fV0sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcInNuYXAtZml0bmVzc1wiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNDMuOC4xLjJcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjAsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiU25hcCBGaXRuZXNzXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiYWV2dW0tcG9saWNlXCIsXCJ1bml0YWxpZmVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOnRydWUsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjUwLFwiaGFja0RpZmZpY3VsdHlcIjo1MCxcIm1pbkRpZmZpY3VsdHlcIjoxNyxcIm1vbmV5QXZhaWxhYmxlXCI6NDUwMDAwMDAwLFwibW9uZXlNYXhcIjoxMTI1MDAwMDAwMCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NCxcIm9wZW5Qb3J0Q291bnRcIjoyLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjo3ODgsXCJzZXJ2ZXJHcm93dGhcIjo1OSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcInJ1bjR0aGVoMTExelwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOlt7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC02NDQ2OTQuY2N0XCIsXCJ0eXBlXCI6XCJNaW5pbXVtIFBhdGggU3VtIGluIGEgVHJpYW5nbGVcIixcImRhdGFcIjpbWzhdLFsxLDZdLFsxLDYsOV0sWzIsMywzLDFdLFsyLDgsOSwyLDddLFs5LDQsNCw3LDUsN10sWzEsMSw4LDYsNywyLDZdLFs4LDksMywyLDIsOSw2LDRdLFszLDIsMiwxLDEsNiwzLDQsM10sWzMsMSw5LDgsMyw4LDcsOCw5LDZdXSxcInJld2FyZFwiOntcInR5cGVcIjozfX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwicnVuNHRoZWgxMTF6XCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCIzMi44LjguNVwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltcInNpbXVsYXRlZC1yZWFsaXR5LmxpdFwiLFwidGhlLW5ldy1nb2QubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiVGhlIFJ1bm5lcnNcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJ0YWl5YW5nLWRpZ2l0YWxcIixcImhlbGlvc1wiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo0LFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjUxOCxcInNlcnZlckdyb3d0aFwiOjEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJJLkkuSS5JXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjpmYWxzZSxcImhvc3RuYW1lXCI6XCJJLkkuSS5JXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI0NS40LjQuNFwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6NjQsXCJtZXNzYWdlc1wiOltcImRlbW9jcmFjeS1pcy1kZWFkLmxpdFwiXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIkkuSS5JLklcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJuZXRsaW5rXCIsXCJtaWxsZW5pdW0tZml0bmVzc1wiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjEsXCJoYWNrRGlmZmljdWx0eVwiOjEsXCJtaW5EaWZmaWN1bHR5XCI6MSxcIm1vbmV5QXZhaWxhYmxlXCI6MCxcIm1vbmV5TWF4XCI6MCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6MyxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjozNDQsXCJzZXJ2ZXJHcm93dGhcIjoxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiYXZtbml0ZS0wMmhcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtOTY3MTYwLmNjdFwiLFwidHlwZVwiOlwiSGFtbWluZ0NvZGVzOiBJbnRlZ2VyIHRvIEVuY29kZWQgQmluYXJ5XCIsXCJkYXRhXCI6MTg4NDE4OTc5OTM0LFwicmV3YXJkXCI6e1widHlwZVwiOjN9fX1dLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjp0cnVlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImF2bW5pdGUtMDJoXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI4Ni40LjguMlwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MTYsXCJtZXNzYWdlc1wiOltcImRlbW9jcmFjeS1pcy1kZWFkLmxpdFwiXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIk5pdGVTZWNcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJuZW8tbmV0XCIsXCJyb3RobWFuLXVuaVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjp0cnVlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjIsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MjE4LFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcIi5cIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbe1wiY3RvclwiOlwiQ29kaW5nQ29udHJhY3RcIixcImRhdGFcIjp7XCJ0cmllc1wiOjAsXCJmblwiOlwiY29udHJhY3QtNzE2MDUyLmNjdFwiLFwidHlwZVwiOlwiQWxnb3JpdGhtaWMgU3RvY2sgVHJhZGVyIElJSVwiLFwiZGF0YVwiOlsxNTMsMTMwLDExMSw2OSw3OCwxMTYsMTI4LDEzLDYzLDE4LDg5LDQwLDYzLDE0NCwxNjUsMjcsMTM1LDE0Myw4OCwxODgsMTc4LDEzOSwzMyw0NSw5OSw4MSwxODAsMTgyLDE0OSwxMywzOCwxNTUsMTI4LDEwNCw1MCw1MywxMzksMzgsNTEsODAsMzMsODgsMzQsMTUsOTksMTkyLDEzN10sXCJyZXdhcmRcIjp7XCJ0eXBlXCI6MX19fSx7XCJjdG9yXCI6XCJDb2RpbmdDb250cmFjdFwiLFwiZGF0YVwiOntcInRyaWVzXCI6MCxcImZuXCI6XCJjb250cmFjdC04NDA5MDEtTmV0YnVybmVycy5jY3RcIixcInR5cGVcIjpcIkhhbW1pbmdDb2RlczogSW50ZWdlciB0byBFbmNvZGVkIEJpbmFyeVwiLFwiZGF0YVwiOjYxMTIwNCxcInJld2FyZFwiOntcInR5cGVcIjowLFwibmFtZVwiOlwiTmV0YnVybmVyc1wifX19LHtcImN0b3JcIjpcIkNvZGluZ0NvbnRyYWN0XCIsXCJkYXRhXCI6e1widHJpZXNcIjowLFwiZm5cIjpcImNvbnRyYWN0LTcyNzU2Mi1OZXRidXJuZXJzLmNjdFwiLFwidHlwZVwiOlwiQ29tcHJlc3Npb24gSUk6IExaIERlY29tcHJlc3Npb25cIixcImRhdGFcIjpcIjNUd1I0MTk1VjVQQlRkQ3Q0ODRDU3haOTI5Wlp4UFo2aTRzMDR2ejFxODc5MDF1MWI0akM4MjY5Qzd0TmJCT2V6MTg1VGFuVDZcIixcInJld2FyZFwiOntcInR5cGVcIjowLFwibmFtZVwiOlwiTmV0YnVybmVyc1wifX19XSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwiLlwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNjEuNC4yLjZcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjE2LFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIi5cIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJzdG9ybXRlY2hcIixcImNsYXJraW5jXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjQsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6NTM5LFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcIkNTRUNcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6dHJ1ZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJDU0VDXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCIxLjEuNi41XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjo4LFwibWVzc2FnZXNcIjpbXCJkZW1vY3JhY3ktaXMtZGVhZC5saXRcIl0sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJDeWJlclNlY1wiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbmctZmFuZy10ZWFcIixcIm9tZWdhLW5ldFwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6dHJ1ZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOmZhbHNlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjoxLFwib3BlblBvcnRDb3VudFwiOjIsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjU4LFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcIlRoZS1DYXZlXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOnRydWUsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcIlRoZS1DYXZlXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCIzNy4wLjYuNlwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MCxcIm1lc3NhZ2VzXCI6W1wiYWxwaGEtb21lZ2EubGl0XCJdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiSGVsaW9zXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wicG93ZXJob3VzZS1maXRuZXNzXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjp0cnVlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MixcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6OTI1LFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcIncwcjFkX2Q0M20wblwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjpmYWxzZSxcImhhc0FkbWluUmlnaHRzXCI6ZmFsc2UsXCJob3N0bmFtZVwiOlwidzByMWRfZDQzbTBuXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI5Ni40LjkuOFwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MCxcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJ3MHIxZF9kNDNtMG5cIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjpmYWxzZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjEsXCJoYWNrRGlmZmljdWx0eVwiOjEsXCJtaW5EaWZmaWN1bHR5XCI6MSxcIm1vbmV5QXZhaWxhYmxlXCI6MCxcIm1vbmV5TWF4XCI6MCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjozMDAwLFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImRhcmt3ZWJcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOmZhbHNlLFwiaG9zdG5hbWVcIjpcImRhcmt3ZWJcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjYuMS4zLjRcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjAsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiZGFya3dlYlwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbWVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6ZmFsc2UsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MSxcInNlcnZlckdyb3d0aFwiOjEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJob21lLTBcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiaG9tZS0wXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI5MS4zLjMuMVwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wiZ3Jvdy1oZWxwZXIuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIC8vIFRPRE86IGFkZCBpbmNyZWFzaW5nIHRocmVzaG9sZCBpZiBubyBzZXJ2ZXJzIGxvd2VyIHRoYW4gY3VycmVudCB0aHJlc2hvbGRcXG4gICAgYXN5bmMgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG5zLnNjcmlwdFJ1bm5pbmcoJ3NpbXBsZS1oYWNrLmpzJywgbmV4dFNlcnZlcikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKG5leHRTZXJ2ZXIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRNb25leSA8IDAuMiAqIG1heE1vbmV5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbnMuZ3JvdyhuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhd2FpdCBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgbnMucHJpbnQoYFJ1bm5pbmcgc2NhbmApO1xcbiAgICAgICAgYXdhaXQgc2NhblNlcnZlcignaG9tZScpO1xcbiAgICB9XFxufVwiLFwiZmlsZW5hbWVcIjpcImdyb3ctaGVscGVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMFwifX1dLFtcImNvbnN0YW50cy5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG4vLyBpbXBvcnQgeyBFWENMVURFX1NFUlZFUlMgfSBmcm9tIFxcXCIuL2NvbnN0YW50cy5qc1xcXCI7XFxuXFxuZXhwb3J0IGNvbnN0IEVYQ0xVREVfU0VSVkVSUyA9IFtcXG4gICAgJ2hvbWUnLFxcbiAgICAnQ1NFQycsXFxuICAgICdhdm1uaXRlLTAyaCcsXFxuICAgICdJLkkuSS5JJyxcXG4gICAgJ3J1bjR0aGVoMTExeidcXG5dO1xcblxcbmZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyNTsgaW5kZXgrKykge1xcbiAgICBFWENMVURFX1NFUlZFUlMucHVzaChgaG9tZS0ke2luZGV4fWApO1xcbn1cXG5cXG5jb25zdCBDT01QTEVURURfRkFDVElPTlMgPSBbXFxuICAgICdDeWJlclNlYycsXFxuICAgICdOZXRidXJuZXJzJyxcXG4gICAgJ05pdGVTZWMnLFxcbiAgICAnVGhlIEJsYWNrIEhhbmQnLFxcbiAgICAnQWV2dW0nLFxcbiAgICAnU2VjdG9yLTEyJyxcXG4gICAgJ1ZvbGhhdmVuJyxcXG4gICAgJ1RpYW4gRGkgSHVpJ1xcbl07XCIsXCJmaWxlbmFtZVwiOlwiY29uc3RhbnRzLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMFwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjp0cnVlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjAsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEsXCJzZXJ2ZXJHcm93dGhcIjoxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiaG9tZS0xXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImhvbWUtMVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMC42LjEuN1wiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wiZ3Jvdy1oZWxwZXIuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIC8vIFRPRE86IGFkZCBpbmNyZWFzaW5nIHRocmVzaG9sZCBpZiBubyBzZXJ2ZXJzIGxvd2VyIHRoYW4gY3VycmVudCB0aHJlc2hvbGRcXG4gICAgYXN5bmMgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG5zLnNjcmlwdFJ1bm5pbmcoJ3NpbXBsZS1oYWNrLmpzJywgbmV4dFNlcnZlcikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKG5leHRTZXJ2ZXIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRNb25leSA8IDAuMiAqIG1heE1vbmV5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbnMuZ3JvdyhuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhd2FpdCBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgbnMucHJpbnQoYFJ1bm5pbmcgc2NhbmApO1xcbiAgICAgICAgYXdhaXQgc2NhblNlcnZlcignaG9tZScpO1xcbiAgICB9XFxufVwiLFwiZmlsZW5hbWVcIjpcImdyb3ctaGVscGVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMVwifX1dLFtcImNvbnN0YW50cy5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG4vLyBpbXBvcnQgeyBFWENMVURFX1NFUlZFUlMgfSBmcm9tIFxcXCIuL2NvbnN0YW50cy5qc1xcXCI7XFxuXFxuZXhwb3J0IGNvbnN0IEVYQ0xVREVfU0VSVkVSUyA9IFtcXG4gICAgJ2hvbWUnLFxcbiAgICAnQ1NFQycsXFxuICAgICdhdm1uaXRlLTAyaCcsXFxuICAgICdJLkkuSS5JJyxcXG4gICAgJ3J1bjR0aGVoMTExeidcXG5dO1xcblxcbmZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAxMDI0OyBpbmRleCsrKSB7XFxuICAgIEVYQ0xVREVfU0VSVkVSUy5wdXNoKGBob21lLSR7aW5kZXh9YCk7XFxufVxcblxcblxcbmNvbnN0IERBUktXRUJfUFJPR1JBTVMgPSBbXFxuICAgIHsgbmFtZTogJ0JydXRlU1NILmV4ZScsIGNvc3Q6IDAgfSxcXG4gICAgeyBuYW1lOiAnRlRQQ3JhY2suZXhlJywgY29zdDogMTUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdyZWxheVNNVFAuZXhlJywgY29zdDogNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdIVFRQV29ybS5leGUnLCBjb3N0OiAzMDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTUUxJbmplY3QuZXhlJywgY29zdDogMjUwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NlcnZlclByb2ZpbGVyLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYxLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYyLmV4ZScsIGNvc3Q6IDI1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0F1dG9MaW5rLmV4ZScsIGNvc3Q6IDEwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRm9ybXVsYXMuZXhlJywgY29zdDogNTAwMDAwMDAwMCB9XFxuXTtcXG5cXG5cXG5jb25zdCBDT01QTEVURURfRkFDVElPTlMgPSBbXFxuICAgICdDeWJlclNlYycsXFxuICAgICdOZXRidXJuZXJzJyxcXG4gICAgJ05pdGVTZWMnLFxcbiAgICAnVGhlIEJsYWNrIEhhbmQnLFxcbiAgICAnQWV2dW0nLFxcbiAgICAnU2VjdG9yLTEyJyxcXG4gICAgJ1ZvbGhhdmVuJyxcXG4gICAgJ1RpYW4gRGkgSHVpJ1xcbl07XCIsXCJmaWxlbmFtZVwiOlwiY29uc3RhbnRzLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMVwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjp0cnVlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjAsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEsXCJzZXJ2ZXJHcm93dGhcIjoxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiaG9tZS0yXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImhvbWUtMlwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMS41LjIuNVwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wiZ3Jvdy1oZWxwZXIuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIC8vIFRPRE86IGFkZCBpbmNyZWFzaW5nIHRocmVzaG9sZCBpZiBubyBzZXJ2ZXJzIGxvd2VyIHRoYW4gY3VycmVudCB0aHJlc2hvbGRcXG4gICAgYXN5bmMgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG5zLnNjcmlwdFJ1bm5pbmcoJ3NpbXBsZS1oYWNrLmpzJywgbmV4dFNlcnZlcikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKG5leHRTZXJ2ZXIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRNb25leSA8IDAuMiAqIG1heE1vbmV5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbnMuZ3JvdyhuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhd2FpdCBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgbnMucHJpbnQoYFJ1bm5pbmcgc2NhbmApO1xcbiAgICAgICAgYXdhaXQgc2NhblNlcnZlcignaG9tZScpO1xcbiAgICB9XFxufVwiLFwiZmlsZW5hbWVcIjpcImdyb3ctaGVscGVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMlwifX1dLFtcImNvbnN0YW50cy5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG4vLyBpbXBvcnQgeyBFWENMVURFX1NFUlZFUlMgfSBmcm9tIFxcXCIuL2NvbnN0YW50cy5qc1xcXCI7XFxuXFxuZXhwb3J0IGNvbnN0IEVYQ0xVREVfU0VSVkVSUyA9IFtcXG4gICAgJ2hvbWUnLFxcbiAgICAnQ1NFQycsXFxuICAgICdhdm1uaXRlLTAyaCcsXFxuICAgICdJLkkuSS5JJyxcXG4gICAgJ3J1bjR0aGVoMTExeidcXG5dO1xcblxcbmZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAxMDI0OyBpbmRleCsrKSB7XFxuICAgIEVYQ0xVREVfU0VSVkVSUy5wdXNoKGBob21lLSR7aW5kZXh9YCk7XFxufVxcblxcblxcbmNvbnN0IERBUktXRUJfUFJPR1JBTVMgPSBbXFxuICAgIHsgbmFtZTogJ0JydXRlU1NILmV4ZScsIGNvc3Q6IDAgfSxcXG4gICAgeyBuYW1lOiAnRlRQQ3JhY2suZXhlJywgY29zdDogMTUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdyZWxheVNNVFAuZXhlJywgY29zdDogNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdIVFRQV29ybS5leGUnLCBjb3N0OiAzMDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTUUxJbmplY3QuZXhlJywgY29zdDogMjUwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NlcnZlclByb2ZpbGVyLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYxLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYyLmV4ZScsIGNvc3Q6IDI1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0F1dG9MaW5rLmV4ZScsIGNvc3Q6IDEwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRm9ybXVsYXMuZXhlJywgY29zdDogNTAwMDAwMDAwMCB9XFxuXTtcXG5cXG5cXG5jb25zdCBDT01QTEVURURfRkFDVElPTlMgPSBbXFxuICAgICdDeWJlclNlYycsXFxuICAgICdOZXRidXJuZXJzJyxcXG4gICAgJ05pdGVTZWMnLFxcbiAgICAnVGhlIEJsYWNrIEhhbmQnLFxcbiAgICAnQWV2dW0nLFxcbiAgICAnU2VjdG9yLTEyJyxcXG4gICAgJ1ZvbGhhdmVuJyxcXG4gICAgJ1RpYW4gRGkgSHVpJ1xcbl07XCIsXCJmaWxlbmFtZVwiOlwiY29uc3RhbnRzLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMlwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjp0cnVlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjAsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEsXCJzZXJ2ZXJHcm93dGhcIjoxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiaG9tZS0zXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImhvbWUtM1wiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNDcuOS4zLjNcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcImdyb3ctaGVscGVyLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICAvLyBUT0RPOiBhZGQgaW5jcmVhc2luZyB0aHJlc2hvbGQgaWYgbm8gc2VydmVycyBsb3dlciB0aGFuIGN1cnJlbnQgdGhyZXNob2xkXFxuICAgIGFzeW5jIGZ1bmN0aW9uIHNjYW5TZXJ2ZXIoY3VycmVudFNlcnZlciwgcHJldmlvdXNTZXJ2ZXIgPSBjdXJyZW50U2VydmVyKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICBsZXQgbmV4dFNlcnZlciA9IGF2YWlsYWJsZVNlcnZlcnNbaV07XFxuXFxuICAgICAgICAgICAgaWYgKG5leHRTZXJ2ZXIgIT0gY3VycmVudFNlcnZlciAmJiBuZXh0U2VydmVyICE9IHByZXZpb3VzU2VydmVyKSB7XFxuICAgICAgICAgICAgICAgIGlmIChucy5zY3JpcHRSdW5uaW5nKCdzaW1wbGUtaGFjay5qcycsIG5leHRTZXJ2ZXIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShuZXh0U2VydmVyKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TW9uZXkgPCAwLjIgKiBtYXhNb25leSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5zLmdyb3cobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYXdhaXQgc2NhblNlcnZlcihuZXh0U2VydmVyLCBjdXJyZW50U2VydmVyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgd2hpbGUgKHRydWUpIHtcXG4gICAgICAgIG5zLnByaW50KGBSdW5uaW5nIHNjYW5gKTtcXG4gICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIoJ2hvbWUnKTtcXG4gICAgfVxcbn1cIixcImZpbGVuYW1lXCI6XCJncm93LWhlbHBlci5qc1wiLFwic2VydmVyXCI6XCJob21lLTNcIn19XSxbXCJjb25zdGFudHMuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuLy8gaW1wb3J0IHsgRVhDTFVERV9TRVJWRVJTIH0gZnJvbSBcXFwiLi9jb25zdGFudHMuanNcXFwiO1xcblxcbmV4cG9ydCBjb25zdCBFWENMVURFX1NFUlZFUlMgPSBbXFxuICAgICdob21lJyxcXG4gICAgJ0NTRUMnLFxcbiAgICAnYXZtbml0ZS0wMmgnLFxcbiAgICAnSS5JLkkuSScsXFxuICAgICdydW40dGhlaDExMXonXFxuXTtcXG5cXG5mb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMTAyNDsgaW5kZXgrKykge1xcbiAgICBFWENMVURFX1NFUlZFUlMucHVzaChgaG9tZS0ke2luZGV4fWApO1xcbn1cXG5cXG5cXG5jb25zdCBEQVJLV0VCX1BST0dSQU1TID0gW1xcbiAgICB7IG5hbWU6ICdCcnV0ZVNTSC5leGUnLCBjb3N0OiAwIH0sXFxuICAgIHsgbmFtZTogJ0ZUUENyYWNrLmV4ZScsIGNvc3Q6IDE1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAncmVsYXlTTVRQLmV4ZScsIGNvc3Q6IDUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnSFRUUFdvcm0uZXhlJywgY29zdDogMzAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU1FMSW5qZWN0LmV4ZScsIGNvc3Q6IDI1MDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTZXJ2ZXJQcm9maWxlci5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMS5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMi5leGUnLCBjb3N0OiAyNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdBdXRvTGluay5leGUnLCBjb3N0OiAxMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0Zvcm11bGFzLmV4ZScsIGNvc3Q6IDUwMDAwMDAwMDAgfVxcbl07XFxuXFxuXFxuY29uc3QgQ09NUExFVEVEX0ZBQ1RJT05TID0gW1xcbiAgICAnQ3liZXJTZWMnLFxcbiAgICAnTmV0YnVybmVycycsXFxuICAgICdOaXRlU2VjJyxcXG4gICAgJ1RoZSBCbGFjayBIYW5kJyxcXG4gICAgJ0FldnVtJyxcXG4gICAgJ1NlY3Rvci0xMicsXFxuICAgICdWb2xoYXZlbicsXFxuICAgICdUaWFuIERpIEh1aSdcXG5dO1wiLFwiZmlsZW5hbWVcIjpcImNvbnN0YW50cy5qc1wiLFwic2VydmVyXCI6XCJob21lLTNcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbWVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6dHJ1ZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjEsXCJoYWNrRGlmZmljdWx0eVwiOjEsXCJtaW5EaWZmaWN1bHR5XCI6MSxcIm1vbmV5QXZhaWxhYmxlXCI6MCxcIm1vbmV5TWF4XCI6MCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxLFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImhvbWUtNFwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjpmYWxzZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJob21lLTRcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjExLjkuMy44XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJncm93LWhlbHBlci5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICAvLyBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG4gICAgLy8gVE9ETzogYWRkIGluY3JlYXNpbmcgdGhyZXNob2xkIGlmIG5vIHNlcnZlcnMgbG93ZXIgdGhhbiBjdXJyZW50IHRocmVzaG9sZFxcbiAgICBhc3luYyBmdW5jdGlvbiBzY2FuU2VydmVyKGN1cnJlbnRTZXJ2ZXIsIHByZXZpb3VzU2VydmVyID0gY3VycmVudFNlcnZlcikge1xcbiAgICAgICAgbGV0IGF2YWlsYWJsZVNlcnZlcnMgPSBucy5zY2FuKGN1cnJlbnRTZXJ2ZXIpO1xcblxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdmFpbGFibGVTZXJ2ZXJzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgbGV0IG5leHRTZXJ2ZXIgPSBhdmFpbGFibGVTZXJ2ZXJzW2ldO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0U2VydmVyICE9IGN1cnJlbnRTZXJ2ZXIgJiYgbmV4dFNlcnZlciAhPSBwcmV2aW91c1NlcnZlcikge1xcbiAgICAgICAgICAgICAgICBpZiAobnMuc2NyaXB0UnVubmluZygnc2ltcGxlLWhhY2suanMnLCBuZXh0U2VydmVyKSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUobmV4dFNlcnZlcik7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE1vbmV5IDwgMC4yICogbWF4TW9uZXkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBucy5ncm93KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIobmV4dFNlcnZlciwgY3VycmVudFNlcnZlcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHdoaWxlICh0cnVlKSB7XFxuICAgICAgICBucy5wcmludChgUnVubmluZyBzY2FuYCk7XFxuICAgICAgICBhd2FpdCBzY2FuU2VydmVyKCdob21lJyk7XFxuICAgIH1cXG59XCIsXCJmaWxlbmFtZVwiOlwiZ3Jvdy1oZWxwZXIuanNcIixcInNlcnZlclwiOlwiaG9tZS00XCJ9fV0sW1wiY29uc3RhbnRzLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcbi8vIGltcG9ydCB7IEVYQ0xVREVfU0VSVkVSUyB9IGZyb20gXFxcIi4vY29uc3RhbnRzLmpzXFxcIjtcXG5cXG5leHBvcnQgY29uc3QgRVhDTFVERV9TRVJWRVJTID0gW1xcbiAgICAnaG9tZScsXFxuICAgICdDU0VDJyxcXG4gICAgJ2F2bW5pdGUtMDJoJyxcXG4gICAgJ0kuSS5JLkknLFxcbiAgICAncnVuNHRoZWgxMTF6J1xcbl07XFxuXFxuZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDEwMjQ7IGluZGV4KyspIHtcXG4gICAgRVhDTFVERV9TRVJWRVJTLnB1c2goYGhvbWUtJHtpbmRleH1gKTtcXG59XFxuXFxuXFxuY29uc3QgREFSS1dFQl9QUk9HUkFNUyA9IFtcXG4gICAgeyBuYW1lOiAnQnJ1dGVTU0guZXhlJywgY29zdDogMCB9LFxcbiAgICB7IG5hbWU6ICdGVFBDcmFjay5leGUnLCBjb3N0OiAxNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ3JlbGF5U01UUC5leGUnLCBjb3N0OiA1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0hUVFBXb3JtLmV4ZScsIGNvc3Q6IDMwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NRTEluamVjdC5leGUnLCBjb3N0OiAyNTAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU2VydmVyUHJvZmlsZXIuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjEuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjIuZXhlJywgY29zdDogMjUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnQXV0b0xpbmsuZXhlJywgY29zdDogMTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdGb3JtdWxhcy5leGUnLCBjb3N0OiA1MDAwMDAwMDAwIH1cXG5dO1xcblxcblxcbmNvbnN0IENPTVBMRVRFRF9GQUNUSU9OUyA9IFtcXG4gICAgJ0N5YmVyU2VjJyxcXG4gICAgJ05ldGJ1cm5lcnMnLFxcbiAgICAnTml0ZVNlYycsXFxuICAgICdUaGUgQmxhY2sgSGFuZCcsXFxuICAgICdBZXZ1bScsXFxuICAgICdTZWN0b3ItMTInLFxcbiAgICAnVm9saGF2ZW4nLFxcbiAgICAnVGlhbiBEaSBIdWknXFxuXTtcIixcImZpbGVuYW1lXCI6XCJjb25zdGFudHMuanNcIixcInNlcnZlclwiOlwiaG9tZS00XCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJob21lXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOnRydWUsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MSxcInNlcnZlckdyb3d0aFwiOjEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJob21lLTVcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiaG9tZS01XCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCIyMS43LjUuOFwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wiZ3Jvdy1oZWxwZXIuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIC8vIFRPRE86IGFkZCBpbmNyZWFzaW5nIHRocmVzaG9sZCBpZiBubyBzZXJ2ZXJzIGxvd2VyIHRoYW4gY3VycmVudCB0aHJlc2hvbGRcXG4gICAgYXN5bmMgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG5zLnNjcmlwdFJ1bm5pbmcoJ3NpbXBsZS1oYWNrLmpzJywgbmV4dFNlcnZlcikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKG5leHRTZXJ2ZXIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRNb25leSA8IDAuMiAqIG1heE1vbmV5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbnMuZ3JvdyhuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhd2FpdCBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgbnMucHJpbnQoYFJ1bm5pbmcgc2NhbmApO1xcbiAgICAgICAgYXdhaXQgc2NhblNlcnZlcignaG9tZScpO1xcbiAgICB9XFxufVwiLFwiZmlsZW5hbWVcIjpcImdyb3ctaGVscGVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtNVwifX1dLFtcImNvbnN0YW50cy5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG4vLyBpbXBvcnQgeyBFWENMVURFX1NFUlZFUlMgfSBmcm9tIFxcXCIuL2NvbnN0YW50cy5qc1xcXCI7XFxuXFxuZXhwb3J0IGNvbnN0IEVYQ0xVREVfU0VSVkVSUyA9IFtcXG4gICAgJ2hvbWUnLFxcbiAgICAnQ1NFQycsXFxuICAgICdhdm1uaXRlLTAyaCcsXFxuICAgICdJLkkuSS5JJyxcXG4gICAgJ3J1bjR0aGVoMTExeidcXG5dO1xcblxcbmZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAxMDI0OyBpbmRleCsrKSB7XFxuICAgIEVYQ0xVREVfU0VSVkVSUy5wdXNoKGBob21lLSR7aW5kZXh9YCk7XFxufVxcblxcblxcbmNvbnN0IERBUktXRUJfUFJPR1JBTVMgPSBbXFxuICAgIHsgbmFtZTogJ0JydXRlU1NILmV4ZScsIGNvc3Q6IDAgfSxcXG4gICAgeyBuYW1lOiAnRlRQQ3JhY2suZXhlJywgY29zdDogMTUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdyZWxheVNNVFAuZXhlJywgY29zdDogNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdIVFRQV29ybS5leGUnLCBjb3N0OiAzMDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTUUxJbmplY3QuZXhlJywgY29zdDogMjUwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NlcnZlclByb2ZpbGVyLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYxLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYyLmV4ZScsIGNvc3Q6IDI1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0F1dG9MaW5rLmV4ZScsIGNvc3Q6IDEwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRm9ybXVsYXMuZXhlJywgY29zdDogNTAwMDAwMDAwMCB9XFxuXTtcXG5cXG5cXG5jb25zdCBDT01QTEVURURfRkFDVElPTlMgPSBbXFxuICAgICdDeWJlclNlYycsXFxuICAgICdOZXRidXJuZXJzJyxcXG4gICAgJ05pdGVTZWMnLFxcbiAgICAnVGhlIEJsYWNrIEhhbmQnLFxcbiAgICAnQWV2dW0nLFxcbiAgICAnU2VjdG9yLTEyJyxcXG4gICAgJ1ZvbGhhdmVuJyxcXG4gICAgJ1RpYW4gRGkgSHVpJ1xcbl07XCIsXCJmaWxlbmFtZVwiOlwiY29uc3RhbnRzLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtNVwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjp0cnVlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjAsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEsXCJzZXJ2ZXJHcm93dGhcIjoxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiaG9tZS02XCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImhvbWUtNlwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNTcuNy4yLjdcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcImdyb3ctaGVscGVyLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICAvLyBUT0RPOiBhZGQgaW5jcmVhc2luZyB0aHJlc2hvbGQgaWYgbm8gc2VydmVycyBsb3dlciB0aGFuIGN1cnJlbnQgdGhyZXNob2xkXFxuICAgIGFzeW5jIGZ1bmN0aW9uIHNjYW5TZXJ2ZXIoY3VycmVudFNlcnZlciwgcHJldmlvdXNTZXJ2ZXIgPSBjdXJyZW50U2VydmVyKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICBsZXQgbmV4dFNlcnZlciA9IGF2YWlsYWJsZVNlcnZlcnNbaV07XFxuXFxuICAgICAgICAgICAgaWYgKG5leHRTZXJ2ZXIgIT0gY3VycmVudFNlcnZlciAmJiBuZXh0U2VydmVyICE9IHByZXZpb3VzU2VydmVyKSB7XFxuICAgICAgICAgICAgICAgIGlmIChucy5zY3JpcHRSdW5uaW5nKCdzaW1wbGUtaGFjay5qcycsIG5leHRTZXJ2ZXIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShuZXh0U2VydmVyKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TW9uZXkgPCAwLjIgKiBtYXhNb25leSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5zLmdyb3cobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYXdhaXQgc2NhblNlcnZlcihuZXh0U2VydmVyLCBjdXJyZW50U2VydmVyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgd2hpbGUgKHRydWUpIHtcXG4gICAgICAgIG5zLnByaW50KGBSdW5uaW5nIHNjYW5gKTtcXG4gICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIoJ2hvbWUnKTtcXG4gICAgfVxcbn1cIixcImZpbGVuYW1lXCI6XCJncm93LWhlbHBlci5qc1wiLFwic2VydmVyXCI6XCJob21lLTZcIn19XSxbXCJjb25zdGFudHMuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuLy8gaW1wb3J0IHsgRVhDTFVERV9TRVJWRVJTIH0gZnJvbSBcXFwiLi9jb25zdGFudHMuanNcXFwiO1xcblxcbmV4cG9ydCBjb25zdCBFWENMVURFX1NFUlZFUlMgPSBbXFxuICAgICdob21lJyxcXG4gICAgJ0NTRUMnLFxcbiAgICAnYXZtbml0ZS0wMmgnLFxcbiAgICAnSS5JLkkuSScsXFxuICAgICdydW40dGhlaDExMXonXFxuXTtcXG5cXG5mb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMTAyNDsgaW5kZXgrKykge1xcbiAgICBFWENMVURFX1NFUlZFUlMucHVzaChgaG9tZS0ke2luZGV4fWApO1xcbn1cXG5cXG5cXG5jb25zdCBEQVJLV0VCX1BST0dSQU1TID0gW1xcbiAgICB7IG5hbWU6ICdCcnV0ZVNTSC5leGUnLCBjb3N0OiAwIH0sXFxuICAgIHsgbmFtZTogJ0ZUUENyYWNrLmV4ZScsIGNvc3Q6IDE1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAncmVsYXlTTVRQLmV4ZScsIGNvc3Q6IDUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnSFRUUFdvcm0uZXhlJywgY29zdDogMzAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU1FMSW5qZWN0LmV4ZScsIGNvc3Q6IDI1MDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTZXJ2ZXJQcm9maWxlci5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMS5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMi5leGUnLCBjb3N0OiAyNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdBdXRvTGluay5leGUnLCBjb3N0OiAxMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0Zvcm11bGFzLmV4ZScsIGNvc3Q6IDUwMDAwMDAwMDAgfVxcbl07XFxuXFxuXFxuY29uc3QgQ09NUExFVEVEX0ZBQ1RJT05TID0gW1xcbiAgICAnQ3liZXJTZWMnLFxcbiAgICAnTmV0YnVybmVycycsXFxuICAgICdOaXRlU2VjJyxcXG4gICAgJ1RoZSBCbGFjayBIYW5kJyxcXG4gICAgJ0FldnVtJyxcXG4gICAgJ1NlY3Rvci0xMicsXFxuICAgICdWb2xoYXZlbicsXFxuICAgICdUaWFuIERpIEh1aSdcXG5dO1wiLFwiZmlsZW5hbWVcIjpcImNvbnN0YW50cy5qc1wiLFwic2VydmVyXCI6XCJob21lLTZcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbWVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6dHJ1ZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjEsXCJoYWNrRGlmZmljdWx0eVwiOjEsXCJtaW5EaWZmaWN1bHR5XCI6MSxcIm1vbmV5QXZhaWxhYmxlXCI6MCxcIm1vbmV5TWF4XCI6MCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxLFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImhvbWUtN1wiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjpmYWxzZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJob21lLTdcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjk1LjUuNC41XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJncm93LWhlbHBlci5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICAvLyBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG4gICAgLy8gVE9ETzogYWRkIGluY3JlYXNpbmcgdGhyZXNob2xkIGlmIG5vIHNlcnZlcnMgbG93ZXIgdGhhbiBjdXJyZW50IHRocmVzaG9sZFxcbiAgICBhc3luYyBmdW5jdGlvbiBzY2FuU2VydmVyKGN1cnJlbnRTZXJ2ZXIsIHByZXZpb3VzU2VydmVyID0gY3VycmVudFNlcnZlcikge1xcbiAgICAgICAgbGV0IGF2YWlsYWJsZVNlcnZlcnMgPSBucy5zY2FuKGN1cnJlbnRTZXJ2ZXIpO1xcblxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdmFpbGFibGVTZXJ2ZXJzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgbGV0IG5leHRTZXJ2ZXIgPSBhdmFpbGFibGVTZXJ2ZXJzW2ldO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0U2VydmVyICE9IGN1cnJlbnRTZXJ2ZXIgJiYgbmV4dFNlcnZlciAhPSBwcmV2aW91c1NlcnZlcikge1xcbiAgICAgICAgICAgICAgICBpZiAobnMuc2NyaXB0UnVubmluZygnc2ltcGxlLWhhY2suanMnLCBuZXh0U2VydmVyKSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUobmV4dFNlcnZlcik7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE1vbmV5IDwgMC4yICogbWF4TW9uZXkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBucy5ncm93KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIobmV4dFNlcnZlciwgY3VycmVudFNlcnZlcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHdoaWxlICh0cnVlKSB7XFxuICAgICAgICBucy5wcmludChgUnVubmluZyBzY2FuYCk7XFxuICAgICAgICBhd2FpdCBzY2FuU2VydmVyKCdob21lJyk7XFxuICAgIH1cXG59XCIsXCJmaWxlbmFtZVwiOlwiZ3Jvdy1oZWxwZXIuanNcIixcInNlcnZlclwiOlwiaG9tZS03XCJ9fV0sW1wiY29uc3RhbnRzLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcbi8vIGltcG9ydCB7IEVYQ0xVREVfU0VSVkVSUyB9IGZyb20gXFxcIi4vY29uc3RhbnRzLmpzXFxcIjtcXG5cXG5leHBvcnQgY29uc3QgRVhDTFVERV9TRVJWRVJTID0gW1xcbiAgICAnaG9tZScsXFxuICAgICdDU0VDJyxcXG4gICAgJ2F2bW5pdGUtMDJoJyxcXG4gICAgJ0kuSS5JLkknLFxcbiAgICAncnVuNHRoZWgxMTF6J1xcbl07XFxuXFxuZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDEwMjQ7IGluZGV4KyspIHtcXG4gICAgRVhDTFVERV9TRVJWRVJTLnB1c2goYGhvbWUtJHtpbmRleH1gKTtcXG59XFxuXFxuXFxuY29uc3QgREFSS1dFQl9QUk9HUkFNUyA9IFtcXG4gICAgeyBuYW1lOiAnQnJ1dGVTU0guZXhlJywgY29zdDogMCB9LFxcbiAgICB7IG5hbWU6ICdGVFBDcmFjay5leGUnLCBjb3N0OiAxNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ3JlbGF5U01UUC5leGUnLCBjb3N0OiA1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0hUVFBXb3JtLmV4ZScsIGNvc3Q6IDMwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NRTEluamVjdC5leGUnLCBjb3N0OiAyNTAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU2VydmVyUHJvZmlsZXIuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjEuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjIuZXhlJywgY29zdDogMjUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnQXV0b0xpbmsuZXhlJywgY29zdDogMTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdGb3JtdWxhcy5leGUnLCBjb3N0OiA1MDAwMDAwMDAwIH1cXG5dO1xcblxcblxcbmNvbnN0IENPTVBMRVRFRF9GQUNUSU9OUyA9IFtcXG4gICAgJ0N5YmVyU2VjJyxcXG4gICAgJ05ldGJ1cm5lcnMnLFxcbiAgICAnTml0ZVNlYycsXFxuICAgICdUaGUgQmxhY2sgSGFuZCcsXFxuICAgICdBZXZ1bScsXFxuICAgICdTZWN0b3ItMTInLFxcbiAgICAnVm9saGF2ZW4nLFxcbiAgICAnVGlhbiBEaSBIdWknXFxuXTtcIixcImZpbGVuYW1lXCI6XCJjb25zdGFudHMuanNcIixcInNlcnZlclwiOlwiaG9tZS03XCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJob21lXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOnRydWUsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MSxcInNlcnZlckdyb3d0aFwiOjEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJob21lLThcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiaG9tZS04XCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI0Mi4yLjEuM1wiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wiZ3Jvdy1oZWxwZXIuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIC8vIFRPRE86IGFkZCBpbmNyZWFzaW5nIHRocmVzaG9sZCBpZiBubyBzZXJ2ZXJzIGxvd2VyIHRoYW4gY3VycmVudCB0aHJlc2hvbGRcXG4gICAgYXN5bmMgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG5zLnNjcmlwdFJ1bm5pbmcoJ3NpbXBsZS1oYWNrLmpzJywgbmV4dFNlcnZlcikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKG5leHRTZXJ2ZXIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRNb25leSA8IDAuMiAqIG1heE1vbmV5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbnMuZ3JvdyhuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhd2FpdCBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgbnMucHJpbnQoYFJ1bm5pbmcgc2NhbmApO1xcbiAgICAgICAgYXdhaXQgc2NhblNlcnZlcignaG9tZScpO1xcbiAgICB9XFxufVwiLFwiZmlsZW5hbWVcIjpcImdyb3ctaGVscGVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtOFwifX1dLFtcImNvbnN0YW50cy5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG4vLyBpbXBvcnQgeyBFWENMVURFX1NFUlZFUlMgfSBmcm9tIFxcXCIuL2NvbnN0YW50cy5qc1xcXCI7XFxuXFxuZXhwb3J0IGNvbnN0IEVYQ0xVREVfU0VSVkVSUyA9IFtcXG4gICAgJ2hvbWUnLFxcbiAgICAnQ1NFQycsXFxuICAgICdhdm1uaXRlLTAyaCcsXFxuICAgICdJLkkuSS5JJyxcXG4gICAgJ3J1bjR0aGVoMTExeidcXG5dO1xcblxcbmZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAxMDI0OyBpbmRleCsrKSB7XFxuICAgIEVYQ0xVREVfU0VSVkVSUy5wdXNoKGBob21lLSR7aW5kZXh9YCk7XFxufVxcblxcblxcbmNvbnN0IERBUktXRUJfUFJPR1JBTVMgPSBbXFxuICAgIHsgbmFtZTogJ0JydXRlU1NILmV4ZScsIGNvc3Q6IDAgfSxcXG4gICAgeyBuYW1lOiAnRlRQQ3JhY2suZXhlJywgY29zdDogMTUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdyZWxheVNNVFAuZXhlJywgY29zdDogNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdIVFRQV29ybS5leGUnLCBjb3N0OiAzMDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTUUxJbmplY3QuZXhlJywgY29zdDogMjUwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NlcnZlclByb2ZpbGVyLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYxLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYyLmV4ZScsIGNvc3Q6IDI1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0F1dG9MaW5rLmV4ZScsIGNvc3Q6IDEwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRm9ybXVsYXMuZXhlJywgY29zdDogNTAwMDAwMDAwMCB9XFxuXTtcXG5cXG5cXG5jb25zdCBDT01QTEVURURfRkFDVElPTlMgPSBbXFxuICAgICdDeWJlclNlYycsXFxuICAgICdOZXRidXJuZXJzJyxcXG4gICAgJ05pdGVTZWMnLFxcbiAgICAnVGhlIEJsYWNrIEhhbmQnLFxcbiAgICAnQWV2dW0nLFxcbiAgICAnU2VjdG9yLTEyJyxcXG4gICAgJ1ZvbGhhdmVuJyxcXG4gICAgJ1RpYW4gRGkgSHVpJ1xcbl07XCIsXCJmaWxlbmFtZVwiOlwiY29uc3RhbnRzLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtOFwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjp0cnVlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjAsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEsXCJzZXJ2ZXJHcm93dGhcIjoxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiaG9tZS05XCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImhvbWUtOVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMjEuOS4yLjFcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcImdyb3ctaGVscGVyLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICAvLyBUT0RPOiBhZGQgaW5jcmVhc2luZyB0aHJlc2hvbGQgaWYgbm8gc2VydmVycyBsb3dlciB0aGFuIGN1cnJlbnQgdGhyZXNob2xkXFxuICAgIGFzeW5jIGZ1bmN0aW9uIHNjYW5TZXJ2ZXIoY3VycmVudFNlcnZlciwgcHJldmlvdXNTZXJ2ZXIgPSBjdXJyZW50U2VydmVyKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICBsZXQgbmV4dFNlcnZlciA9IGF2YWlsYWJsZVNlcnZlcnNbaV07XFxuXFxuICAgICAgICAgICAgaWYgKG5leHRTZXJ2ZXIgIT0gY3VycmVudFNlcnZlciAmJiBuZXh0U2VydmVyICE9IHByZXZpb3VzU2VydmVyKSB7XFxuICAgICAgICAgICAgICAgIGlmIChucy5zY3JpcHRSdW5uaW5nKCdzaW1wbGUtaGFjay5qcycsIG5leHRTZXJ2ZXIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShuZXh0U2VydmVyKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TW9uZXkgPCAwLjIgKiBtYXhNb25leSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5zLmdyb3cobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYXdhaXQgc2NhblNlcnZlcihuZXh0U2VydmVyLCBjdXJyZW50U2VydmVyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgd2hpbGUgKHRydWUpIHtcXG4gICAgICAgIG5zLnByaW50KGBSdW5uaW5nIHNjYW5gKTtcXG4gICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIoJ2hvbWUnKTtcXG4gICAgfVxcbn1cIixcImZpbGVuYW1lXCI6XCJncm93LWhlbHBlci5qc1wiLFwic2VydmVyXCI6XCJob21lLTlcIn19XSxbXCJjb25zdGFudHMuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuLy8gaW1wb3J0IHsgRVhDTFVERV9TRVJWRVJTIH0gZnJvbSBcXFwiLi9jb25zdGFudHMuanNcXFwiO1xcblxcbmV4cG9ydCBjb25zdCBFWENMVURFX1NFUlZFUlMgPSBbXFxuICAgICdob21lJyxcXG4gICAgJ0NTRUMnLFxcbiAgICAnYXZtbml0ZS0wMmgnLFxcbiAgICAnSS5JLkkuSScsXFxuICAgICdydW40dGhlaDExMXonXFxuXTtcXG5cXG5mb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMTAyNDsgaW5kZXgrKykge1xcbiAgICBFWENMVURFX1NFUlZFUlMucHVzaChgaG9tZS0ke2luZGV4fWApO1xcbn1cXG5cXG5cXG5jb25zdCBEQVJLV0VCX1BST0dSQU1TID0gW1xcbiAgICB7IG5hbWU6ICdCcnV0ZVNTSC5leGUnLCBjb3N0OiAwIH0sXFxuICAgIHsgbmFtZTogJ0ZUUENyYWNrLmV4ZScsIGNvc3Q6IDE1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAncmVsYXlTTVRQLmV4ZScsIGNvc3Q6IDUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnSFRUUFdvcm0uZXhlJywgY29zdDogMzAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU1FMSW5qZWN0LmV4ZScsIGNvc3Q6IDI1MDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTZXJ2ZXJQcm9maWxlci5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMS5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMi5leGUnLCBjb3N0OiAyNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdBdXRvTGluay5leGUnLCBjb3N0OiAxMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0Zvcm11bGFzLmV4ZScsIGNvc3Q6IDUwMDAwMDAwMDAgfVxcbl07XFxuXFxuXFxuY29uc3QgQ09NUExFVEVEX0ZBQ1RJT05TID0gW1xcbiAgICAnQ3liZXJTZWMnLFxcbiAgICAnTmV0YnVybmVycycsXFxuICAgICdOaXRlU2VjJyxcXG4gICAgJ1RoZSBCbGFjayBIYW5kJyxcXG4gICAgJ0FldnVtJyxcXG4gICAgJ1NlY3Rvci0xMicsXFxuICAgICdWb2xoYXZlbicsXFxuICAgICdUaWFuIERpIEh1aSdcXG5dO1wiLFwiZmlsZW5hbWVcIjpcImNvbnN0YW50cy5qc1wiLFwic2VydmVyXCI6XCJob21lLTlcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbWVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6dHJ1ZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjEsXCJoYWNrRGlmZmljdWx0eVwiOjEsXCJtaW5EaWZmaWN1bHR5XCI6MSxcIm1vbmV5QXZhaWxhYmxlXCI6MCxcIm1vbmV5TWF4XCI6MCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxLFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImhvbWUtMTBcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiaG9tZS0xMFwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNS4zLjcuOVwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wiZ3Jvdy1oZWxwZXIuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIC8vIFRPRE86IGFkZCBpbmNyZWFzaW5nIHRocmVzaG9sZCBpZiBubyBzZXJ2ZXJzIGxvd2VyIHRoYW4gY3VycmVudCB0aHJlc2hvbGRcXG4gICAgYXN5bmMgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG5zLnNjcmlwdFJ1bm5pbmcoJ3NpbXBsZS1oYWNrLmpzJywgbmV4dFNlcnZlcikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKG5leHRTZXJ2ZXIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRNb25leSA8IDAuMiAqIG1heE1vbmV5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbnMuZ3JvdyhuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhd2FpdCBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgbnMucHJpbnQoYFJ1bm5pbmcgc2NhbmApO1xcbiAgICAgICAgYXdhaXQgc2NhblNlcnZlcignaG9tZScpO1xcbiAgICB9XFxufVwiLFwiZmlsZW5hbWVcIjpcImdyb3ctaGVscGVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMTBcIn19XSxbXCJjb25zdGFudHMuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuLy8gaW1wb3J0IHsgRVhDTFVERV9TRVJWRVJTIH0gZnJvbSBcXFwiLi9jb25zdGFudHMuanNcXFwiO1xcblxcbmV4cG9ydCBjb25zdCBFWENMVURFX1NFUlZFUlMgPSBbXFxuICAgICdob21lJyxcXG4gICAgJ0NTRUMnLFxcbiAgICAnYXZtbml0ZS0wMmgnLFxcbiAgICAnSS5JLkkuSScsXFxuICAgICdydW40dGhlaDExMXonXFxuXTtcXG5cXG5mb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMTAyNDsgaW5kZXgrKykge1xcbiAgICBFWENMVURFX1NFUlZFUlMucHVzaChgaG9tZS0ke2luZGV4fWApO1xcbn1cXG5cXG5cXG5jb25zdCBEQVJLV0VCX1BST0dSQU1TID0gW1xcbiAgICB7IG5hbWU6ICdCcnV0ZVNTSC5leGUnLCBjb3N0OiAwIH0sXFxuICAgIHsgbmFtZTogJ0ZUUENyYWNrLmV4ZScsIGNvc3Q6IDE1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAncmVsYXlTTVRQLmV4ZScsIGNvc3Q6IDUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnSFRUUFdvcm0uZXhlJywgY29zdDogMzAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU1FMSW5qZWN0LmV4ZScsIGNvc3Q6IDI1MDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTZXJ2ZXJQcm9maWxlci5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMS5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMi5leGUnLCBjb3N0OiAyNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdBdXRvTGluay5leGUnLCBjb3N0OiAxMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0Zvcm11bGFzLmV4ZScsIGNvc3Q6IDUwMDAwMDAwMDAgfVxcbl07XFxuXFxuXFxuY29uc3QgQ09NUExFVEVEX0ZBQ1RJT05TID0gW1xcbiAgICAnQ3liZXJTZWMnLFxcbiAgICAnTmV0YnVybmVycycsXFxuICAgICdOaXRlU2VjJyxcXG4gICAgJ1RoZSBCbGFjayBIYW5kJyxcXG4gICAgJ0FldnVtJyxcXG4gICAgJ1NlY3Rvci0xMicsXFxuICAgICdWb2xoYXZlbicsXFxuICAgICdUaWFuIERpIEh1aSdcXG5dO1wiLFwiZmlsZW5hbWVcIjpcImNvbnN0YW50cy5qc1wiLFwic2VydmVyXCI6XCJob21lLTEwXCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJob21lXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOnRydWUsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MSxcInNlcnZlckdyb3d0aFwiOjEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJob21lLTExXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImhvbWUtMTFcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjM0LjcuMy44XCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJncm93LWhlbHBlci5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICAvLyBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG4gICAgLy8gVE9ETzogYWRkIGluY3JlYXNpbmcgdGhyZXNob2xkIGlmIG5vIHNlcnZlcnMgbG93ZXIgdGhhbiBjdXJyZW50IHRocmVzaG9sZFxcbiAgICBhc3luYyBmdW5jdGlvbiBzY2FuU2VydmVyKGN1cnJlbnRTZXJ2ZXIsIHByZXZpb3VzU2VydmVyID0gY3VycmVudFNlcnZlcikge1xcbiAgICAgICAgbGV0IGF2YWlsYWJsZVNlcnZlcnMgPSBucy5zY2FuKGN1cnJlbnRTZXJ2ZXIpO1xcblxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdmFpbGFibGVTZXJ2ZXJzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgbGV0IG5leHRTZXJ2ZXIgPSBhdmFpbGFibGVTZXJ2ZXJzW2ldO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0U2VydmVyICE9IGN1cnJlbnRTZXJ2ZXIgJiYgbmV4dFNlcnZlciAhPSBwcmV2aW91c1NlcnZlcikge1xcbiAgICAgICAgICAgICAgICBpZiAobnMuc2NyaXB0UnVubmluZygnc2ltcGxlLWhhY2suanMnLCBuZXh0U2VydmVyKSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUobmV4dFNlcnZlcik7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE1vbmV5IDwgMC4yICogbWF4TW9uZXkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBucy5ncm93KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIobmV4dFNlcnZlciwgY3VycmVudFNlcnZlcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHdoaWxlICh0cnVlKSB7XFxuICAgICAgICBucy5wcmludChgUnVubmluZyBzY2FuYCk7XFxuICAgICAgICBhd2FpdCBzY2FuU2VydmVyKCdob21lJyk7XFxuICAgIH1cXG59XCIsXCJmaWxlbmFtZVwiOlwiZ3Jvdy1oZWxwZXIuanNcIixcInNlcnZlclwiOlwiaG9tZS0xMVwifX1dLFtcImNvbnN0YW50cy5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG4vLyBpbXBvcnQgeyBFWENMVURFX1NFUlZFUlMgfSBmcm9tIFxcXCIuL2NvbnN0YW50cy5qc1xcXCI7XFxuXFxuZXhwb3J0IGNvbnN0IEVYQ0xVREVfU0VSVkVSUyA9IFtcXG4gICAgJ2hvbWUnLFxcbiAgICAnQ1NFQycsXFxuICAgICdhdm1uaXRlLTAyaCcsXFxuICAgICdJLkkuSS5JJyxcXG4gICAgJ3J1bjR0aGVoMTExeidcXG5dO1xcblxcbmZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAxMDI0OyBpbmRleCsrKSB7XFxuICAgIEVYQ0xVREVfU0VSVkVSUy5wdXNoKGBob21lLSR7aW5kZXh9YCk7XFxufVxcblxcblxcbmNvbnN0IERBUktXRUJfUFJPR1JBTVMgPSBbXFxuICAgIHsgbmFtZTogJ0JydXRlU1NILmV4ZScsIGNvc3Q6IDAgfSxcXG4gICAgeyBuYW1lOiAnRlRQQ3JhY2suZXhlJywgY29zdDogMTUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdyZWxheVNNVFAuZXhlJywgY29zdDogNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdIVFRQV29ybS5leGUnLCBjb3N0OiAzMDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTUUxJbmplY3QuZXhlJywgY29zdDogMjUwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NlcnZlclByb2ZpbGVyLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYxLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYyLmV4ZScsIGNvc3Q6IDI1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0F1dG9MaW5rLmV4ZScsIGNvc3Q6IDEwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRm9ybXVsYXMuZXhlJywgY29zdDogNTAwMDAwMDAwMCB9XFxuXTtcXG5cXG5cXG5jb25zdCBDT01QTEVURURfRkFDVElPTlMgPSBbXFxuICAgICdDeWJlclNlYycsXFxuICAgICdOZXRidXJuZXJzJyxcXG4gICAgJ05pdGVTZWMnLFxcbiAgICAnVGhlIEJsYWNrIEhhbmQnLFxcbiAgICAnQWV2dW0nLFxcbiAgICAnU2VjdG9yLTEyJyxcXG4gICAgJ1ZvbGhhdmVuJyxcXG4gICAgJ1RpYW4gRGkgSHVpJ1xcbl07XCIsXCJmaWxlbmFtZVwiOlwiY29uc3RhbnRzLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMTFcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbWVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6dHJ1ZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjEsXCJoYWNrRGlmZmljdWx0eVwiOjEsXCJtaW5EaWZmaWN1bHR5XCI6MSxcIm1vbmV5QXZhaWxhYmxlXCI6MCxcIm1vbmV5TWF4XCI6MCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxLFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImhvbWUtMTJcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiaG9tZS0xMlwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiODEuMS4xLjRcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcImdyb3ctaGVscGVyLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICAvLyBUT0RPOiBhZGQgaW5jcmVhc2luZyB0aHJlc2hvbGQgaWYgbm8gc2VydmVycyBsb3dlciB0aGFuIGN1cnJlbnQgdGhyZXNob2xkXFxuICAgIGFzeW5jIGZ1bmN0aW9uIHNjYW5TZXJ2ZXIoY3VycmVudFNlcnZlciwgcHJldmlvdXNTZXJ2ZXIgPSBjdXJyZW50U2VydmVyKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICBsZXQgbmV4dFNlcnZlciA9IGF2YWlsYWJsZVNlcnZlcnNbaV07XFxuXFxuICAgICAgICAgICAgaWYgKG5leHRTZXJ2ZXIgIT0gY3VycmVudFNlcnZlciAmJiBuZXh0U2VydmVyICE9IHByZXZpb3VzU2VydmVyKSB7XFxuICAgICAgICAgICAgICAgIGlmIChucy5zY3JpcHRSdW5uaW5nKCdzaW1wbGUtaGFjay5qcycsIG5leHRTZXJ2ZXIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShuZXh0U2VydmVyKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TW9uZXkgPCAwLjIgKiBtYXhNb25leSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5zLmdyb3cobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYXdhaXQgc2NhblNlcnZlcihuZXh0U2VydmVyLCBjdXJyZW50U2VydmVyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgd2hpbGUgKHRydWUpIHtcXG4gICAgICAgIG5zLnByaW50KGBSdW5uaW5nIHNjYW5gKTtcXG4gICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIoJ2hvbWUnKTtcXG4gICAgfVxcbn1cIixcImZpbGVuYW1lXCI6XCJncm93LWhlbHBlci5qc1wiLFwic2VydmVyXCI6XCJob21lLTEyXCJ9fV0sW1wiY29uc3RhbnRzLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcbi8vIGltcG9ydCB7IEVYQ0xVREVfU0VSVkVSUyB9IGZyb20gXFxcIi4vY29uc3RhbnRzLmpzXFxcIjtcXG5cXG5leHBvcnQgY29uc3QgRVhDTFVERV9TRVJWRVJTID0gW1xcbiAgICAnaG9tZScsXFxuICAgICdDU0VDJyxcXG4gICAgJ2F2bW5pdGUtMDJoJyxcXG4gICAgJ0kuSS5JLkknLFxcbiAgICAncnVuNHRoZWgxMTF6J1xcbl07XFxuXFxuZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDEwMjQ7IGluZGV4KyspIHtcXG4gICAgRVhDTFVERV9TRVJWRVJTLnB1c2goYGhvbWUtJHtpbmRleH1gKTtcXG59XFxuXFxuXFxuY29uc3QgREFSS1dFQl9QUk9HUkFNUyA9IFtcXG4gICAgeyBuYW1lOiAnQnJ1dGVTU0guZXhlJywgY29zdDogMCB9LFxcbiAgICB7IG5hbWU6ICdGVFBDcmFjay5leGUnLCBjb3N0OiAxNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ3JlbGF5U01UUC5leGUnLCBjb3N0OiA1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0hUVFBXb3JtLmV4ZScsIGNvc3Q6IDMwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NRTEluamVjdC5leGUnLCBjb3N0OiAyNTAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU2VydmVyUHJvZmlsZXIuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjEuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjIuZXhlJywgY29zdDogMjUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnQXV0b0xpbmsuZXhlJywgY29zdDogMTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdGb3JtdWxhcy5leGUnLCBjb3N0OiA1MDAwMDAwMDAwIH1cXG5dO1xcblxcblxcbmNvbnN0IENPTVBMRVRFRF9GQUNUSU9OUyA9IFtcXG4gICAgJ0N5YmVyU2VjJyxcXG4gICAgJ05ldGJ1cm5lcnMnLFxcbiAgICAnTml0ZVNlYycsXFxuICAgICdUaGUgQmxhY2sgSGFuZCcsXFxuICAgICdBZXZ1bScsXFxuICAgICdTZWN0b3ItMTInLFxcbiAgICAnVm9saGF2ZW4nLFxcbiAgICAnVGlhbiBEaSBIdWknXFxuXTtcIixcImZpbGVuYW1lXCI6XCJjb25zdGFudHMuanNcIixcInNlcnZlclwiOlwiaG9tZS0xMlwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjp0cnVlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjAsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEsXCJzZXJ2ZXJHcm93dGhcIjoxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiaG9tZS0xM1wiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjpmYWxzZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJob21lLTEzXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI2NC4xLjkuOFwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wiZ3Jvdy1oZWxwZXIuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIC8vIFRPRE86IGFkZCBpbmNyZWFzaW5nIHRocmVzaG9sZCBpZiBubyBzZXJ2ZXJzIGxvd2VyIHRoYW4gY3VycmVudCB0aHJlc2hvbGRcXG4gICAgYXN5bmMgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG5zLnNjcmlwdFJ1bm5pbmcoJ3NpbXBsZS1oYWNrLmpzJywgbmV4dFNlcnZlcikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKG5leHRTZXJ2ZXIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRNb25leSA8IDAuMiAqIG1heE1vbmV5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbnMuZ3JvdyhuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhd2FpdCBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgbnMucHJpbnQoYFJ1bm5pbmcgc2NhbmApO1xcbiAgICAgICAgYXdhaXQgc2NhblNlcnZlcignaG9tZScpO1xcbiAgICB9XFxufVwiLFwiZmlsZW5hbWVcIjpcImdyb3ctaGVscGVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMTNcIn19XSxbXCJjb25zdGFudHMuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuLy8gaW1wb3J0IHsgRVhDTFVERV9TRVJWRVJTIH0gZnJvbSBcXFwiLi9jb25zdGFudHMuanNcXFwiO1xcblxcbmV4cG9ydCBjb25zdCBFWENMVURFX1NFUlZFUlMgPSBbXFxuICAgICdob21lJyxcXG4gICAgJ0NTRUMnLFxcbiAgICAnYXZtbml0ZS0wMmgnLFxcbiAgICAnSS5JLkkuSScsXFxuICAgICdydW40dGhlaDExMXonXFxuXTtcXG5cXG5mb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMTAyNDsgaW5kZXgrKykge1xcbiAgICBFWENMVURFX1NFUlZFUlMucHVzaChgaG9tZS0ke2luZGV4fWApO1xcbn1cXG5cXG5cXG5jb25zdCBEQVJLV0VCX1BST0dSQU1TID0gW1xcbiAgICB7IG5hbWU6ICdCcnV0ZVNTSC5leGUnLCBjb3N0OiAwIH0sXFxuICAgIHsgbmFtZTogJ0ZUUENyYWNrLmV4ZScsIGNvc3Q6IDE1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAncmVsYXlTTVRQLmV4ZScsIGNvc3Q6IDUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnSFRUUFdvcm0uZXhlJywgY29zdDogMzAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU1FMSW5qZWN0LmV4ZScsIGNvc3Q6IDI1MDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTZXJ2ZXJQcm9maWxlci5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMS5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMi5leGUnLCBjb3N0OiAyNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdBdXRvTGluay5leGUnLCBjb3N0OiAxMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0Zvcm11bGFzLmV4ZScsIGNvc3Q6IDUwMDAwMDAwMDAgfVxcbl07XFxuXFxuXFxuY29uc3QgQ09NUExFVEVEX0ZBQ1RJT05TID0gW1xcbiAgICAnQ3liZXJTZWMnLFxcbiAgICAnTmV0YnVybmVycycsXFxuICAgICdOaXRlU2VjJyxcXG4gICAgJ1RoZSBCbGFjayBIYW5kJyxcXG4gICAgJ0FldnVtJyxcXG4gICAgJ1NlY3Rvci0xMicsXFxuICAgICdWb2xoYXZlbicsXFxuICAgICdUaWFuIERpIEh1aSdcXG5dO1wiLFwiZmlsZW5hbWVcIjpcImNvbnN0YW50cy5qc1wiLFwic2VydmVyXCI6XCJob21lLTEzXCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJob21lXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOnRydWUsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MSxcInNlcnZlckdyb3d0aFwiOjEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJob21lLTE0XCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImhvbWUtMTRcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjMuMy43LjJcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcImdyb3ctaGVscGVyLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICAvLyBUT0RPOiBhZGQgaW5jcmVhc2luZyB0aHJlc2hvbGQgaWYgbm8gc2VydmVycyBsb3dlciB0aGFuIGN1cnJlbnQgdGhyZXNob2xkXFxuICAgIGFzeW5jIGZ1bmN0aW9uIHNjYW5TZXJ2ZXIoY3VycmVudFNlcnZlciwgcHJldmlvdXNTZXJ2ZXIgPSBjdXJyZW50U2VydmVyKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICBsZXQgbmV4dFNlcnZlciA9IGF2YWlsYWJsZVNlcnZlcnNbaV07XFxuXFxuICAgICAgICAgICAgaWYgKG5leHRTZXJ2ZXIgIT0gY3VycmVudFNlcnZlciAmJiBuZXh0U2VydmVyICE9IHByZXZpb3VzU2VydmVyKSB7XFxuICAgICAgICAgICAgICAgIGlmIChucy5zY3JpcHRSdW5uaW5nKCdzaW1wbGUtaGFjay5qcycsIG5leHRTZXJ2ZXIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShuZXh0U2VydmVyKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TW9uZXkgPCAwLjIgKiBtYXhNb25leSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5zLmdyb3cobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYXdhaXQgc2NhblNlcnZlcihuZXh0U2VydmVyLCBjdXJyZW50U2VydmVyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgd2hpbGUgKHRydWUpIHtcXG4gICAgICAgIG5zLnByaW50KGBSdW5uaW5nIHNjYW5gKTtcXG4gICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIoJ2hvbWUnKTtcXG4gICAgfVxcbn1cIixcImZpbGVuYW1lXCI6XCJncm93LWhlbHBlci5qc1wiLFwic2VydmVyXCI6XCJob21lLTE0XCJ9fV0sW1wiY29uc3RhbnRzLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcbi8vIGltcG9ydCB7IEVYQ0xVREVfU0VSVkVSUyB9IGZyb20gXFxcIi4vY29uc3RhbnRzLmpzXFxcIjtcXG5cXG5leHBvcnQgY29uc3QgRVhDTFVERV9TRVJWRVJTID0gW1xcbiAgICAnaG9tZScsXFxuICAgICdDU0VDJyxcXG4gICAgJ2F2bW5pdGUtMDJoJyxcXG4gICAgJ0kuSS5JLkknLFxcbiAgICAncnVuNHRoZWgxMTF6J1xcbl07XFxuXFxuZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDEwMjQ7IGluZGV4KyspIHtcXG4gICAgRVhDTFVERV9TRVJWRVJTLnB1c2goYGhvbWUtJHtpbmRleH1gKTtcXG59XFxuXFxuXFxuY29uc3QgREFSS1dFQl9QUk9HUkFNUyA9IFtcXG4gICAgeyBuYW1lOiAnQnJ1dGVTU0guZXhlJywgY29zdDogMCB9LFxcbiAgICB7IG5hbWU6ICdGVFBDcmFjay5leGUnLCBjb3N0OiAxNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ3JlbGF5U01UUC5leGUnLCBjb3N0OiA1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0hUVFBXb3JtLmV4ZScsIGNvc3Q6IDMwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NRTEluamVjdC5leGUnLCBjb3N0OiAyNTAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU2VydmVyUHJvZmlsZXIuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjEuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjIuZXhlJywgY29zdDogMjUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnQXV0b0xpbmsuZXhlJywgY29zdDogMTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdGb3JtdWxhcy5leGUnLCBjb3N0OiA1MDAwMDAwMDAwIH1cXG5dO1xcblxcblxcbmNvbnN0IENPTVBMRVRFRF9GQUNUSU9OUyA9IFtcXG4gICAgJ0N5YmVyU2VjJyxcXG4gICAgJ05ldGJ1cm5lcnMnLFxcbiAgICAnTml0ZVNlYycsXFxuICAgICdUaGUgQmxhY2sgSGFuZCcsXFxuICAgICdBZXZ1bScsXFxuICAgICdTZWN0b3ItMTInLFxcbiAgICAnVm9saGF2ZW4nLFxcbiAgICAnVGlhbiBEaSBIdWknXFxuXTtcIixcImZpbGVuYW1lXCI6XCJjb25zdGFudHMuanNcIixcInNlcnZlclwiOlwiaG9tZS0xNFwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjp0cnVlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjAsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEsXCJzZXJ2ZXJHcm93dGhcIjoxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiaG9tZS0xNVwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjpmYWxzZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJob21lLTE1XCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCIxMi42LjguM1wiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wiZ3Jvdy1oZWxwZXIuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIC8vIFRPRE86IGFkZCBpbmNyZWFzaW5nIHRocmVzaG9sZCBpZiBubyBzZXJ2ZXJzIGxvd2VyIHRoYW4gY3VycmVudCB0aHJlc2hvbGRcXG4gICAgYXN5bmMgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG5zLnNjcmlwdFJ1bm5pbmcoJ3NpbXBsZS1oYWNrLmpzJywgbmV4dFNlcnZlcikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKG5leHRTZXJ2ZXIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRNb25leSA8IDAuMiAqIG1heE1vbmV5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbnMuZ3JvdyhuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhd2FpdCBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgbnMucHJpbnQoYFJ1bm5pbmcgc2NhbmApO1xcbiAgICAgICAgYXdhaXQgc2NhblNlcnZlcignaG9tZScpO1xcbiAgICB9XFxufVwiLFwiZmlsZW5hbWVcIjpcImdyb3ctaGVscGVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMTVcIn19XSxbXCJjb25zdGFudHMuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuLy8gaW1wb3J0IHsgRVhDTFVERV9TRVJWRVJTIH0gZnJvbSBcXFwiLi9jb25zdGFudHMuanNcXFwiO1xcblxcbmV4cG9ydCBjb25zdCBFWENMVURFX1NFUlZFUlMgPSBbXFxuICAgICdob21lJyxcXG4gICAgJ0NTRUMnLFxcbiAgICAnYXZtbml0ZS0wMmgnLFxcbiAgICAnSS5JLkkuSScsXFxuICAgICdydW40dGhlaDExMXonXFxuXTtcXG5cXG5mb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMTAyNDsgaW5kZXgrKykge1xcbiAgICBFWENMVURFX1NFUlZFUlMucHVzaChgaG9tZS0ke2luZGV4fWApO1xcbn1cXG5cXG5cXG5jb25zdCBEQVJLV0VCX1BST0dSQU1TID0gW1xcbiAgICB7IG5hbWU6ICdCcnV0ZVNTSC5leGUnLCBjb3N0OiAwIH0sXFxuICAgIHsgbmFtZTogJ0ZUUENyYWNrLmV4ZScsIGNvc3Q6IDE1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAncmVsYXlTTVRQLmV4ZScsIGNvc3Q6IDUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnSFRUUFdvcm0uZXhlJywgY29zdDogMzAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU1FMSW5qZWN0LmV4ZScsIGNvc3Q6IDI1MDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTZXJ2ZXJQcm9maWxlci5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMS5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMi5leGUnLCBjb3N0OiAyNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdBdXRvTGluay5leGUnLCBjb3N0OiAxMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0Zvcm11bGFzLmV4ZScsIGNvc3Q6IDUwMDAwMDAwMDAgfVxcbl07XFxuXFxuXFxuY29uc3QgQ09NUExFVEVEX0ZBQ1RJT05TID0gW1xcbiAgICAnQ3liZXJTZWMnLFxcbiAgICAnTmV0YnVybmVycycsXFxuICAgICdOaXRlU2VjJyxcXG4gICAgJ1RoZSBCbGFjayBIYW5kJyxcXG4gICAgJ0FldnVtJyxcXG4gICAgJ1NlY3Rvci0xMicsXFxuICAgICdWb2xoYXZlbicsXFxuICAgICdUaWFuIERpIEh1aSdcXG5dO1wiLFwiZmlsZW5hbWVcIjpcImNvbnN0YW50cy5qc1wiLFwic2VydmVyXCI6XCJob21lLTE1XCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJob21lXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOnRydWUsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MSxcInNlcnZlckdyb3d0aFwiOjEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJob21lLTE2XCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImhvbWUtMTZcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjMyLjMuNy4wXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJncm93LWhlbHBlci5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICAvLyBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG4gICAgLy8gVE9ETzogYWRkIGluY3JlYXNpbmcgdGhyZXNob2xkIGlmIG5vIHNlcnZlcnMgbG93ZXIgdGhhbiBjdXJyZW50IHRocmVzaG9sZFxcbiAgICBhc3luYyBmdW5jdGlvbiBzY2FuU2VydmVyKGN1cnJlbnRTZXJ2ZXIsIHByZXZpb3VzU2VydmVyID0gY3VycmVudFNlcnZlcikge1xcbiAgICAgICAgbGV0IGF2YWlsYWJsZVNlcnZlcnMgPSBucy5zY2FuKGN1cnJlbnRTZXJ2ZXIpO1xcblxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdmFpbGFibGVTZXJ2ZXJzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgbGV0IG5leHRTZXJ2ZXIgPSBhdmFpbGFibGVTZXJ2ZXJzW2ldO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0U2VydmVyICE9IGN1cnJlbnRTZXJ2ZXIgJiYgbmV4dFNlcnZlciAhPSBwcmV2aW91c1NlcnZlcikge1xcbiAgICAgICAgICAgICAgICBpZiAobnMuc2NyaXB0UnVubmluZygnc2ltcGxlLWhhY2suanMnLCBuZXh0U2VydmVyKSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUobmV4dFNlcnZlcik7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE1vbmV5IDwgMC4yICogbWF4TW9uZXkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBucy5ncm93KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIobmV4dFNlcnZlciwgY3VycmVudFNlcnZlcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHdoaWxlICh0cnVlKSB7XFxuICAgICAgICBucy5wcmludChgUnVubmluZyBzY2FuYCk7XFxuICAgICAgICBhd2FpdCBzY2FuU2VydmVyKCdob21lJyk7XFxuICAgIH1cXG59XCIsXCJmaWxlbmFtZVwiOlwiZ3Jvdy1oZWxwZXIuanNcIixcInNlcnZlclwiOlwiaG9tZS0xNlwifX1dLFtcImNvbnN0YW50cy5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG4vLyBpbXBvcnQgeyBFWENMVURFX1NFUlZFUlMgfSBmcm9tIFxcXCIuL2NvbnN0YW50cy5qc1xcXCI7XFxuXFxuZXhwb3J0IGNvbnN0IEVYQ0xVREVfU0VSVkVSUyA9IFtcXG4gICAgJ2hvbWUnLFxcbiAgICAnQ1NFQycsXFxuICAgICdhdm1uaXRlLTAyaCcsXFxuICAgICdJLkkuSS5JJyxcXG4gICAgJ3J1bjR0aGVoMTExeidcXG5dO1xcblxcbmZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAxMDI0OyBpbmRleCsrKSB7XFxuICAgIEVYQ0xVREVfU0VSVkVSUy5wdXNoKGBob21lLSR7aW5kZXh9YCk7XFxufVxcblxcblxcbmNvbnN0IERBUktXRUJfUFJPR1JBTVMgPSBbXFxuICAgIHsgbmFtZTogJ0JydXRlU1NILmV4ZScsIGNvc3Q6IDAgfSxcXG4gICAgeyBuYW1lOiAnRlRQQ3JhY2suZXhlJywgY29zdDogMTUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdyZWxheVNNVFAuZXhlJywgY29zdDogNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdIVFRQV29ybS5leGUnLCBjb3N0OiAzMDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTUUxJbmplY3QuZXhlJywgY29zdDogMjUwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NlcnZlclByb2ZpbGVyLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYxLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYyLmV4ZScsIGNvc3Q6IDI1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0F1dG9MaW5rLmV4ZScsIGNvc3Q6IDEwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRm9ybXVsYXMuZXhlJywgY29zdDogNTAwMDAwMDAwMCB9XFxuXTtcXG5cXG5cXG5jb25zdCBDT01QTEVURURfRkFDVElPTlMgPSBbXFxuICAgICdDeWJlclNlYycsXFxuICAgICdOZXRidXJuZXJzJyxcXG4gICAgJ05pdGVTZWMnLFxcbiAgICAnVGhlIEJsYWNrIEhhbmQnLFxcbiAgICAnQWV2dW0nLFxcbiAgICAnU2VjdG9yLTEyJyxcXG4gICAgJ1ZvbGhhdmVuJyxcXG4gICAgJ1RpYW4gRGkgSHVpJ1xcbl07XCIsXCJmaWxlbmFtZVwiOlwiY29uc3RhbnRzLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMTZcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbWVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6dHJ1ZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjEsXCJoYWNrRGlmZmljdWx0eVwiOjEsXCJtaW5EaWZmaWN1bHR5XCI6MSxcIm1vbmV5QXZhaWxhYmxlXCI6MCxcIm1vbmV5TWF4XCI6MCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxLFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImhvbWUtMTdcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiaG9tZS0xN1wiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNzYuNi41LjNcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcImdyb3ctaGVscGVyLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICAvLyBUT0RPOiBhZGQgaW5jcmVhc2luZyB0aHJlc2hvbGQgaWYgbm8gc2VydmVycyBsb3dlciB0aGFuIGN1cnJlbnQgdGhyZXNob2xkXFxuICAgIGFzeW5jIGZ1bmN0aW9uIHNjYW5TZXJ2ZXIoY3VycmVudFNlcnZlciwgcHJldmlvdXNTZXJ2ZXIgPSBjdXJyZW50U2VydmVyKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICBsZXQgbmV4dFNlcnZlciA9IGF2YWlsYWJsZVNlcnZlcnNbaV07XFxuXFxuICAgICAgICAgICAgaWYgKG5leHRTZXJ2ZXIgIT0gY3VycmVudFNlcnZlciAmJiBuZXh0U2VydmVyICE9IHByZXZpb3VzU2VydmVyKSB7XFxuICAgICAgICAgICAgICAgIGlmIChucy5zY3JpcHRSdW5uaW5nKCdzaW1wbGUtaGFjay5qcycsIG5leHRTZXJ2ZXIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShuZXh0U2VydmVyKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TW9uZXkgPCAwLjIgKiBtYXhNb25leSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5zLmdyb3cobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYXdhaXQgc2NhblNlcnZlcihuZXh0U2VydmVyLCBjdXJyZW50U2VydmVyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgd2hpbGUgKHRydWUpIHtcXG4gICAgICAgIG5zLnByaW50KGBSdW5uaW5nIHNjYW5gKTtcXG4gICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIoJ2hvbWUnKTtcXG4gICAgfVxcbn1cIixcImZpbGVuYW1lXCI6XCJncm93LWhlbHBlci5qc1wiLFwic2VydmVyXCI6XCJob21lLTE3XCJ9fV0sW1wiY29uc3RhbnRzLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcbi8vIGltcG9ydCB7IEVYQ0xVREVfU0VSVkVSUyB9IGZyb20gXFxcIi4vY29uc3RhbnRzLmpzXFxcIjtcXG5cXG5leHBvcnQgY29uc3QgRVhDTFVERV9TRVJWRVJTID0gW1xcbiAgICAnaG9tZScsXFxuICAgICdDU0VDJyxcXG4gICAgJ2F2bW5pdGUtMDJoJyxcXG4gICAgJ0kuSS5JLkknLFxcbiAgICAncnVuNHRoZWgxMTF6J1xcbl07XFxuXFxuZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDEwMjQ7IGluZGV4KyspIHtcXG4gICAgRVhDTFVERV9TRVJWRVJTLnB1c2goYGhvbWUtJHtpbmRleH1gKTtcXG59XFxuXFxuXFxuY29uc3QgREFSS1dFQl9QUk9HUkFNUyA9IFtcXG4gICAgeyBuYW1lOiAnQnJ1dGVTU0guZXhlJywgY29zdDogMCB9LFxcbiAgICB7IG5hbWU6ICdGVFBDcmFjay5leGUnLCBjb3N0OiAxNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ3JlbGF5U01UUC5leGUnLCBjb3N0OiA1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0hUVFBXb3JtLmV4ZScsIGNvc3Q6IDMwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NRTEluamVjdC5leGUnLCBjb3N0OiAyNTAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU2VydmVyUHJvZmlsZXIuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjEuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjIuZXhlJywgY29zdDogMjUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnQXV0b0xpbmsuZXhlJywgY29zdDogMTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdGb3JtdWxhcy5leGUnLCBjb3N0OiA1MDAwMDAwMDAwIH1cXG5dO1xcblxcblxcbmNvbnN0IENPTVBMRVRFRF9GQUNUSU9OUyA9IFtcXG4gICAgJ0N5YmVyU2VjJyxcXG4gICAgJ05ldGJ1cm5lcnMnLFxcbiAgICAnTml0ZVNlYycsXFxuICAgICdUaGUgQmxhY2sgSGFuZCcsXFxuICAgICdBZXZ1bScsXFxuICAgICdTZWN0b3ItMTInLFxcbiAgICAnVm9saGF2ZW4nLFxcbiAgICAnVGlhbiBEaSBIdWknXFxuXTtcIixcImZpbGVuYW1lXCI6XCJjb25zdGFudHMuanNcIixcInNlcnZlclwiOlwiaG9tZS0xN1wifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjp0cnVlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjAsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEsXCJzZXJ2ZXJHcm93dGhcIjoxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiaG9tZS0xOFwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjpmYWxzZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJob21lLTE4XCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCIzLjQuOS4wXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJncm93LWhlbHBlci5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICAvLyBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG4gICAgLy8gVE9ETzogYWRkIGluY3JlYXNpbmcgdGhyZXNob2xkIGlmIG5vIHNlcnZlcnMgbG93ZXIgdGhhbiBjdXJyZW50IHRocmVzaG9sZFxcbiAgICBhc3luYyBmdW5jdGlvbiBzY2FuU2VydmVyKGN1cnJlbnRTZXJ2ZXIsIHByZXZpb3VzU2VydmVyID0gY3VycmVudFNlcnZlcikge1xcbiAgICAgICAgbGV0IGF2YWlsYWJsZVNlcnZlcnMgPSBucy5zY2FuKGN1cnJlbnRTZXJ2ZXIpO1xcblxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdmFpbGFibGVTZXJ2ZXJzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgbGV0IG5leHRTZXJ2ZXIgPSBhdmFpbGFibGVTZXJ2ZXJzW2ldO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0U2VydmVyICE9IGN1cnJlbnRTZXJ2ZXIgJiYgbmV4dFNlcnZlciAhPSBwcmV2aW91c1NlcnZlcikge1xcbiAgICAgICAgICAgICAgICBpZiAobnMuc2NyaXB0UnVubmluZygnc2ltcGxlLWhhY2suanMnLCBuZXh0U2VydmVyKSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUobmV4dFNlcnZlcik7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE1vbmV5IDwgMC4yICogbWF4TW9uZXkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBucy5ncm93KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIobmV4dFNlcnZlciwgY3VycmVudFNlcnZlcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHdoaWxlICh0cnVlKSB7XFxuICAgICAgICBucy5wcmludChgUnVubmluZyBzY2FuYCk7XFxuICAgICAgICBhd2FpdCBzY2FuU2VydmVyKCdob21lJyk7XFxuICAgIH1cXG59XCIsXCJmaWxlbmFtZVwiOlwiZ3Jvdy1oZWxwZXIuanNcIixcInNlcnZlclwiOlwiaG9tZS0xOFwifX1dLFtcImNvbnN0YW50cy5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG4vLyBpbXBvcnQgeyBFWENMVURFX1NFUlZFUlMgfSBmcm9tIFxcXCIuL2NvbnN0YW50cy5qc1xcXCI7XFxuXFxuZXhwb3J0IGNvbnN0IEVYQ0xVREVfU0VSVkVSUyA9IFtcXG4gICAgJ2hvbWUnLFxcbiAgICAnQ1NFQycsXFxuICAgICdhdm1uaXRlLTAyaCcsXFxuICAgICdJLkkuSS5JJyxcXG4gICAgJ3J1bjR0aGVoMTExeidcXG5dO1xcblxcbmZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAxMDI0OyBpbmRleCsrKSB7XFxuICAgIEVYQ0xVREVfU0VSVkVSUy5wdXNoKGBob21lLSR7aW5kZXh9YCk7XFxufVxcblxcblxcbmNvbnN0IERBUktXRUJfUFJPR1JBTVMgPSBbXFxuICAgIHsgbmFtZTogJ0JydXRlU1NILmV4ZScsIGNvc3Q6IDAgfSxcXG4gICAgeyBuYW1lOiAnRlRQQ3JhY2suZXhlJywgY29zdDogMTUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdyZWxheVNNVFAuZXhlJywgY29zdDogNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdIVFRQV29ybS5leGUnLCBjb3N0OiAzMDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTUUxJbmplY3QuZXhlJywgY29zdDogMjUwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NlcnZlclByb2ZpbGVyLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYxLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYyLmV4ZScsIGNvc3Q6IDI1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0F1dG9MaW5rLmV4ZScsIGNvc3Q6IDEwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRm9ybXVsYXMuZXhlJywgY29zdDogNTAwMDAwMDAwMCB9XFxuXTtcXG5cXG5cXG5jb25zdCBDT01QTEVURURfRkFDVElPTlMgPSBbXFxuICAgICdDeWJlclNlYycsXFxuICAgICdOZXRidXJuZXJzJyxcXG4gICAgJ05pdGVTZWMnLFxcbiAgICAnVGhlIEJsYWNrIEhhbmQnLFxcbiAgICAnQWV2dW0nLFxcbiAgICAnU2VjdG9yLTEyJyxcXG4gICAgJ1ZvbGhhdmVuJyxcXG4gICAgJ1RpYW4gRGkgSHVpJ1xcbl07XCIsXCJmaWxlbmFtZVwiOlwiY29uc3RhbnRzLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMThcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbWVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6dHJ1ZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjEsXCJoYWNrRGlmZmljdWx0eVwiOjEsXCJtaW5EaWZmaWN1bHR5XCI6MSxcIm1vbmV5QXZhaWxhYmxlXCI6MCxcIm1vbmV5TWF4XCI6MCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxLFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImhvbWUtMTlcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiaG9tZS0xOVwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiMTkuMS42LjRcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcImdyb3ctaGVscGVyLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICAvLyBUT0RPOiBhZGQgaW5jcmVhc2luZyB0aHJlc2hvbGQgaWYgbm8gc2VydmVycyBsb3dlciB0aGFuIGN1cnJlbnQgdGhyZXNob2xkXFxuICAgIGFzeW5jIGZ1bmN0aW9uIHNjYW5TZXJ2ZXIoY3VycmVudFNlcnZlciwgcHJldmlvdXNTZXJ2ZXIgPSBjdXJyZW50U2VydmVyKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICBsZXQgbmV4dFNlcnZlciA9IGF2YWlsYWJsZVNlcnZlcnNbaV07XFxuXFxuICAgICAgICAgICAgaWYgKG5leHRTZXJ2ZXIgIT0gY3VycmVudFNlcnZlciAmJiBuZXh0U2VydmVyICE9IHByZXZpb3VzU2VydmVyKSB7XFxuICAgICAgICAgICAgICAgIGlmIChucy5zY3JpcHRSdW5uaW5nKCdzaW1wbGUtaGFjay5qcycsIG5leHRTZXJ2ZXIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShuZXh0U2VydmVyKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TW9uZXkgPCAwLjIgKiBtYXhNb25leSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5zLmdyb3cobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYXdhaXQgc2NhblNlcnZlcihuZXh0U2VydmVyLCBjdXJyZW50U2VydmVyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgd2hpbGUgKHRydWUpIHtcXG4gICAgICAgIG5zLnByaW50KGBSdW5uaW5nIHNjYW5gKTtcXG4gICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIoJ2hvbWUnKTtcXG4gICAgfVxcbn1cIixcImZpbGVuYW1lXCI6XCJncm93LWhlbHBlci5qc1wiLFwic2VydmVyXCI6XCJob21lLTE5XCJ9fV0sW1wiY29uc3RhbnRzLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcbi8vIGltcG9ydCB7IEVYQ0xVREVfU0VSVkVSUyB9IGZyb20gXFxcIi4vY29uc3RhbnRzLmpzXFxcIjtcXG5cXG5leHBvcnQgY29uc3QgRVhDTFVERV9TRVJWRVJTID0gW1xcbiAgICAnaG9tZScsXFxuICAgICdDU0VDJyxcXG4gICAgJ2F2bW5pdGUtMDJoJyxcXG4gICAgJ0kuSS5JLkknLFxcbiAgICAncnVuNHRoZWgxMTF6J1xcbl07XFxuXFxuZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDEwMjQ7IGluZGV4KyspIHtcXG4gICAgRVhDTFVERV9TRVJWRVJTLnB1c2goYGhvbWUtJHtpbmRleH1gKTtcXG59XFxuXFxuXFxuY29uc3QgREFSS1dFQl9QUk9HUkFNUyA9IFtcXG4gICAgeyBuYW1lOiAnQnJ1dGVTU0guZXhlJywgY29zdDogMCB9LFxcbiAgICB7IG5hbWU6ICdGVFBDcmFjay5leGUnLCBjb3N0OiAxNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ3JlbGF5U01UUC5leGUnLCBjb3N0OiA1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0hUVFBXb3JtLmV4ZScsIGNvc3Q6IDMwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NRTEluamVjdC5leGUnLCBjb3N0OiAyNTAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU2VydmVyUHJvZmlsZXIuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjEuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjIuZXhlJywgY29zdDogMjUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnQXV0b0xpbmsuZXhlJywgY29zdDogMTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdGb3JtdWxhcy5leGUnLCBjb3N0OiA1MDAwMDAwMDAwIH1cXG5dO1xcblxcblxcbmNvbnN0IENPTVBMRVRFRF9GQUNUSU9OUyA9IFtcXG4gICAgJ0N5YmVyU2VjJyxcXG4gICAgJ05ldGJ1cm5lcnMnLFxcbiAgICAnTml0ZVNlYycsXFxuICAgICdUaGUgQmxhY2sgSGFuZCcsXFxuICAgICdBZXZ1bScsXFxuICAgICdTZWN0b3ItMTInLFxcbiAgICAnVm9saGF2ZW4nLFxcbiAgICAnVGlhbiBEaSBIdWknXFxuXTtcIixcImZpbGVuYW1lXCI6XCJjb25zdGFudHMuanNcIixcInNlcnZlclwiOlwiaG9tZS0xOVwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjp0cnVlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjAsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEsXCJzZXJ2ZXJHcm93dGhcIjoxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19LFwiaG9tZS0yMFwiOntcImN0b3JcIjpcIlNlcnZlclwiLFwiZGF0YVwiOntcImNvbnRyYWN0c1wiOltdLFwiY3B1Q29yZXNcIjoxLFwiZnRwUG9ydE9wZW5cIjpmYWxzZSxcImhhc0FkbWluUmlnaHRzXCI6dHJ1ZSxcImhvc3RuYW1lXCI6XCJob21lLTIwXCIsXCJodHRwUG9ydE9wZW5cIjpmYWxzZSxcImlwXCI6XCI3NC42LjIuN1wiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wiZ3Jvdy1oZWxwZXIuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIC8vIFRPRE86IGFkZCBpbmNyZWFzaW5nIHRocmVzaG9sZCBpZiBubyBzZXJ2ZXJzIGxvd2VyIHRoYW4gY3VycmVudCB0aHJlc2hvbGRcXG4gICAgYXN5bmMgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG5zLnNjcmlwdFJ1bm5pbmcoJ3NpbXBsZS1oYWNrLmpzJywgbmV4dFNlcnZlcikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKG5leHRTZXJ2ZXIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRNb25leSA8IDAuMiAqIG1heE1vbmV5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbnMuZ3JvdyhuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhd2FpdCBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgbnMucHJpbnQoYFJ1bm5pbmcgc2NhbmApO1xcbiAgICAgICAgYXdhaXQgc2NhblNlcnZlcignaG9tZScpO1xcbiAgICB9XFxufVwiLFwiZmlsZW5hbWVcIjpcImdyb3ctaGVscGVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMjBcIn19XSxbXCJjb25zdGFudHMuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuLy8gaW1wb3J0IHsgRVhDTFVERV9TRVJWRVJTIH0gZnJvbSBcXFwiLi9jb25zdGFudHMuanNcXFwiO1xcblxcbmV4cG9ydCBjb25zdCBFWENMVURFX1NFUlZFUlMgPSBbXFxuICAgICdob21lJyxcXG4gICAgJ0NTRUMnLFxcbiAgICAnYXZtbml0ZS0wMmgnLFxcbiAgICAnSS5JLkkuSScsXFxuICAgICdydW40dGhlaDExMXonXFxuXTtcXG5cXG5mb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMTAyNDsgaW5kZXgrKykge1xcbiAgICBFWENMVURFX1NFUlZFUlMucHVzaChgaG9tZS0ke2luZGV4fWApO1xcbn1cXG5cXG5cXG5jb25zdCBEQVJLV0VCX1BST0dSQU1TID0gW1xcbiAgICB7IG5hbWU6ICdCcnV0ZVNTSC5leGUnLCBjb3N0OiAwIH0sXFxuICAgIHsgbmFtZTogJ0ZUUENyYWNrLmV4ZScsIGNvc3Q6IDE1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAncmVsYXlTTVRQLmV4ZScsIGNvc3Q6IDUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnSFRUUFdvcm0uZXhlJywgY29zdDogMzAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU1FMSW5qZWN0LmV4ZScsIGNvc3Q6IDI1MDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTZXJ2ZXJQcm9maWxlci5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMS5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMi5leGUnLCBjb3N0OiAyNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdBdXRvTGluay5leGUnLCBjb3N0OiAxMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0Zvcm11bGFzLmV4ZScsIGNvc3Q6IDUwMDAwMDAwMDAgfVxcbl07XFxuXFxuXFxuY29uc3QgQ09NUExFVEVEX0ZBQ1RJT05TID0gW1xcbiAgICAnQ3liZXJTZWMnLFxcbiAgICAnTmV0YnVybmVycycsXFxuICAgICdOaXRlU2VjJyxcXG4gICAgJ1RoZSBCbGFjayBIYW5kJyxcXG4gICAgJ0FldnVtJyxcXG4gICAgJ1NlY3Rvci0xMicsXFxuICAgICdWb2xoYXZlbicsXFxuICAgICdUaWFuIERpIEh1aSdcXG5dO1wiLFwiZmlsZW5hbWVcIjpcImNvbnN0YW50cy5qc1wiLFwic2VydmVyXCI6XCJob21lLTIwXCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJob21lXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOnRydWUsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MSxcInNlcnZlckdyb3d0aFwiOjEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJob21lLTIxXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImhvbWUtMjFcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjkxLjIuNS4zXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJncm93LWhlbHBlci5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICAvLyBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG4gICAgLy8gVE9ETzogYWRkIGluY3JlYXNpbmcgdGhyZXNob2xkIGlmIG5vIHNlcnZlcnMgbG93ZXIgdGhhbiBjdXJyZW50IHRocmVzaG9sZFxcbiAgICBhc3luYyBmdW5jdGlvbiBzY2FuU2VydmVyKGN1cnJlbnRTZXJ2ZXIsIHByZXZpb3VzU2VydmVyID0gY3VycmVudFNlcnZlcikge1xcbiAgICAgICAgbGV0IGF2YWlsYWJsZVNlcnZlcnMgPSBucy5zY2FuKGN1cnJlbnRTZXJ2ZXIpO1xcblxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdmFpbGFibGVTZXJ2ZXJzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgbGV0IG5leHRTZXJ2ZXIgPSBhdmFpbGFibGVTZXJ2ZXJzW2ldO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0U2VydmVyICE9IGN1cnJlbnRTZXJ2ZXIgJiYgbmV4dFNlcnZlciAhPSBwcmV2aW91c1NlcnZlcikge1xcbiAgICAgICAgICAgICAgICBpZiAobnMuc2NyaXB0UnVubmluZygnc2ltcGxlLWhhY2suanMnLCBuZXh0U2VydmVyKSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUobmV4dFNlcnZlcik7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE1vbmV5IDwgMC4yICogbWF4TW9uZXkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBucy5ncm93KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIobmV4dFNlcnZlciwgY3VycmVudFNlcnZlcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHdoaWxlICh0cnVlKSB7XFxuICAgICAgICBucy5wcmludChgUnVubmluZyBzY2FuYCk7XFxuICAgICAgICBhd2FpdCBzY2FuU2VydmVyKCdob21lJyk7XFxuICAgIH1cXG59XCIsXCJmaWxlbmFtZVwiOlwiZ3Jvdy1oZWxwZXIuanNcIixcInNlcnZlclwiOlwiaG9tZS0yMVwifX1dLFtcImNvbnN0YW50cy5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG4vLyBpbXBvcnQgeyBFWENMVURFX1NFUlZFUlMgfSBmcm9tIFxcXCIuL2NvbnN0YW50cy5qc1xcXCI7XFxuXFxuZXhwb3J0IGNvbnN0IEVYQ0xVREVfU0VSVkVSUyA9IFtcXG4gICAgJ2hvbWUnLFxcbiAgICAnQ1NFQycsXFxuICAgICdhdm1uaXRlLTAyaCcsXFxuICAgICdJLkkuSS5JJyxcXG4gICAgJ3J1bjR0aGVoMTExeidcXG5dO1xcblxcbmZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAxMDI0OyBpbmRleCsrKSB7XFxuICAgIEVYQ0xVREVfU0VSVkVSUy5wdXNoKGBob21lLSR7aW5kZXh9YCk7XFxufVxcblxcblxcbmNvbnN0IERBUktXRUJfUFJPR1JBTVMgPSBbXFxuICAgIHsgbmFtZTogJ0JydXRlU1NILmV4ZScsIGNvc3Q6IDAgfSxcXG4gICAgeyBuYW1lOiAnRlRQQ3JhY2suZXhlJywgY29zdDogMTUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdyZWxheVNNVFAuZXhlJywgY29zdDogNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdIVFRQV29ybS5leGUnLCBjb3N0OiAzMDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTUUxJbmplY3QuZXhlJywgY29zdDogMjUwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NlcnZlclByb2ZpbGVyLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYxLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYyLmV4ZScsIGNvc3Q6IDI1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0F1dG9MaW5rLmV4ZScsIGNvc3Q6IDEwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRm9ybXVsYXMuZXhlJywgY29zdDogNTAwMDAwMDAwMCB9XFxuXTtcXG5cXG5cXG5jb25zdCBDT01QTEVURURfRkFDVElPTlMgPSBbXFxuICAgICdDeWJlclNlYycsXFxuICAgICdOZXRidXJuZXJzJyxcXG4gICAgJ05pdGVTZWMnLFxcbiAgICAnVGhlIEJsYWNrIEhhbmQnLFxcbiAgICAnQWV2dW0nLFxcbiAgICAnU2VjdG9yLTEyJyxcXG4gICAgJ1ZvbGhhdmVuJyxcXG4gICAgJ1RpYW4gRGkgSHVpJ1xcbl07XCIsXCJmaWxlbmFtZVwiOlwiY29uc3RhbnRzLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMjFcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbWVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6dHJ1ZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjEsXCJoYWNrRGlmZmljdWx0eVwiOjEsXCJtaW5EaWZmaWN1bHR5XCI6MSxcIm1vbmV5QXZhaWxhYmxlXCI6MCxcIm1vbmV5TWF4XCI6MCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxLFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImhvbWUtMjJcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiaG9tZS0yMlwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiNy45LjQuMFwiLFwiaXNDb25uZWN0ZWRUb1wiOmZhbHNlLFwibWF4UmFtXCI6MzIsXCJtZXNzYWdlc1wiOltdLFwib3JnYW5pemF0aW9uTmFtZVwiOlwiXCIsXCJwcm9ncmFtc1wiOltdLFwic2NyaXB0c1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbW1wiZ3Jvdy1oZWxwZXIuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuXFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4obnMpIHtcXG4gICAgLy8gbnMuZGlzYWJsZUxvZygnQUxMJyk7XFxuXFxuICAgIC8vIFRPRE86IGFkZCBpbmNyZWFzaW5nIHRocmVzaG9sZCBpZiBubyBzZXJ2ZXJzIGxvd2VyIHRoYW4gY3VycmVudCB0aHJlc2hvbGRcXG4gICAgYXN5bmMgZnVuY3Rpb24gc2NhblNlcnZlcihjdXJyZW50U2VydmVyLCBwcmV2aW91c1NlcnZlciA9IGN1cnJlbnRTZXJ2ZXIpIHtcXG4gICAgICAgIGxldCBhdmFpbGFibGVTZXJ2ZXJzID0gbnMuc2NhbihjdXJyZW50U2VydmVyKTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmxlU2VydmVycy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGxldCBuZXh0U2VydmVyID0gYXZhaWxhYmxlU2VydmVyc1tpXTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFNlcnZlciAhPSBjdXJyZW50U2VydmVyICYmIG5leHRTZXJ2ZXIgIT0gcHJldmlvdXNTZXJ2ZXIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG5zLnNjcmlwdFJ1bm5pbmcoJ3NpbXBsZS1oYWNrLmpzJywgbmV4dFNlcnZlcikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXhNb25leSA9IG5zLmdldFNlcnZlck1heE1vbmV5KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRNb25leSA9IG5zLmdldFNlcnZlck1vbmV5QXZhaWxhYmxlKG5leHRTZXJ2ZXIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRNb25leSA8IDAuMiAqIG1heE1vbmV5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbnMuZ3JvdyhuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhd2FpdCBzY2FuU2VydmVyKG5leHRTZXJ2ZXIsIGN1cnJlbnRTZXJ2ZXIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgbnMucHJpbnQoYFJ1bm5pbmcgc2NhbmApO1xcbiAgICAgICAgYXdhaXQgc2NhblNlcnZlcignaG9tZScpO1xcbiAgICB9XFxufVwiLFwiZmlsZW5hbWVcIjpcImdyb3ctaGVscGVyLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMjJcIn19XSxbXCJjb25zdGFudHMuanNcIix7XCJjdG9yXCI6XCJTY3JpcHRcIixcImRhdGFcIjp7XCJjb2RlXCI6XCIvKiogQHBhcmFtIHtpbXBvcnQoXFxcIi5cXFwiKS5OUyB9IG5zICovXFxuLy8gaW1wb3J0IHsgRVhDTFVERV9TRVJWRVJTIH0gZnJvbSBcXFwiLi9jb25zdGFudHMuanNcXFwiO1xcblxcbmV4cG9ydCBjb25zdCBFWENMVURFX1NFUlZFUlMgPSBbXFxuICAgICdob21lJyxcXG4gICAgJ0NTRUMnLFxcbiAgICAnYXZtbml0ZS0wMmgnLFxcbiAgICAnSS5JLkkuSScsXFxuICAgICdydW40dGhlaDExMXonXFxuXTtcXG5cXG5mb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMTAyNDsgaW5kZXgrKykge1xcbiAgICBFWENMVURFX1NFUlZFUlMucHVzaChgaG9tZS0ke2luZGV4fWApO1xcbn1cXG5cXG5cXG5jb25zdCBEQVJLV0VCX1BST0dSQU1TID0gW1xcbiAgICB7IG5hbWU6ICdCcnV0ZVNTSC5leGUnLCBjb3N0OiAwIH0sXFxuICAgIHsgbmFtZTogJ0ZUUENyYWNrLmV4ZScsIGNvc3Q6IDE1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAncmVsYXlTTVRQLmV4ZScsIGNvc3Q6IDUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnSFRUUFdvcm0uZXhlJywgY29zdDogMzAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU1FMSW5qZWN0LmV4ZScsIGNvc3Q6IDI1MDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTZXJ2ZXJQcm9maWxlci5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMS5leGUnLCBjb3N0OiA1MDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRGVlcHNjYW5WMi5leGUnLCBjb3N0OiAyNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdBdXRvTGluay5leGUnLCBjb3N0OiAxMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0Zvcm11bGFzLmV4ZScsIGNvc3Q6IDUwMDAwMDAwMDAgfVxcbl07XFxuXFxuXFxuY29uc3QgQ09NUExFVEVEX0ZBQ1RJT05TID0gW1xcbiAgICAnQ3liZXJTZWMnLFxcbiAgICAnTmV0YnVybmVycycsXFxuICAgICdOaXRlU2VjJyxcXG4gICAgJ1RoZSBCbGFjayBIYW5kJyxcXG4gICAgJ0FldnVtJyxcXG4gICAgJ1NlY3Rvci0xMicsXFxuICAgICdWb2xoYXZlbicsXFxuICAgICdUaWFuIERpIEh1aSdcXG5dO1wiLFwiZmlsZW5hbWVcIjpcImNvbnN0YW50cy5qc1wiLFwic2VydmVyXCI6XCJob21lLTIyXCJ9fV1dfSxcInNlcnZlcnNPbk5ldHdvcmtcIjpbXCJob21lXCJdLFwic210cFBvcnRPcGVuXCI6ZmFsc2UsXCJzcWxQb3J0T3BlblwiOmZhbHNlLFwic3NoUG9ydE9wZW5cIjpmYWxzZSxcInRleHRGaWxlc1wiOntcImN0b3JcIjpcIkpTT05NYXBcIixcImRhdGFcIjpbXX0sXCJwdXJjaGFzZWRCeVBsYXllclwiOnRydWUsXCJiYWNrZG9vckluc3RhbGxlZFwiOmZhbHNlLFwiYmFzZURpZmZpY3VsdHlcIjoxLFwiaGFja0RpZmZpY3VsdHlcIjoxLFwibWluRGlmZmljdWx0eVwiOjEsXCJtb25leUF2YWlsYWJsZVwiOjAsXCJtb25leU1heFwiOjAsXCJudW1PcGVuUG9ydHNSZXF1aXJlZFwiOjUsXCJvcGVuUG9ydENvdW50XCI6MCxcInJlcXVpcmVkSGFja2luZ1NraWxsXCI6MSxcInNlcnZlckdyb3d0aFwiOjEsXCJydW5uaW5nU2NyaXB0c1wiOltdfX0sXCJob21lLTIzXCI6e1wiY3RvclwiOlwiU2VydmVyXCIsXCJkYXRhXCI6e1wiY29udHJhY3RzXCI6W10sXCJjcHVDb3Jlc1wiOjEsXCJmdHBQb3J0T3BlblwiOmZhbHNlLFwiaGFzQWRtaW5SaWdodHNcIjp0cnVlLFwiaG9zdG5hbWVcIjpcImhvbWUtMjNcIixcImh0dHBQb3J0T3BlblwiOmZhbHNlLFwiaXBcIjpcIjU3LjMuMi4yXCIsXCJpc0Nvbm5lY3RlZFRvXCI6ZmFsc2UsXCJtYXhSYW1cIjozMixcIm1lc3NhZ2VzXCI6W10sXCJvcmdhbml6YXRpb25OYW1lXCI6XCJcIixcInByb2dyYW1zXCI6W10sXCJzY3JpcHRzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltbXCJncm93LWhlbHBlci5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG5cXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihucykge1xcbiAgICAvLyBucy5kaXNhYmxlTG9nKCdBTEwnKTtcXG5cXG4gICAgLy8gVE9ETzogYWRkIGluY3JlYXNpbmcgdGhyZXNob2xkIGlmIG5vIHNlcnZlcnMgbG93ZXIgdGhhbiBjdXJyZW50IHRocmVzaG9sZFxcbiAgICBhc3luYyBmdW5jdGlvbiBzY2FuU2VydmVyKGN1cnJlbnRTZXJ2ZXIsIHByZXZpb3VzU2VydmVyID0gY3VycmVudFNlcnZlcikge1xcbiAgICAgICAgbGV0IGF2YWlsYWJsZVNlcnZlcnMgPSBucy5zY2FuKGN1cnJlbnRTZXJ2ZXIpO1xcblxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdmFpbGFibGVTZXJ2ZXJzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgbGV0IG5leHRTZXJ2ZXIgPSBhdmFpbGFibGVTZXJ2ZXJzW2ldO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0U2VydmVyICE9IGN1cnJlbnRTZXJ2ZXIgJiYgbmV4dFNlcnZlciAhPSBwcmV2aW91c1NlcnZlcikge1xcbiAgICAgICAgICAgICAgICBpZiAobnMuc2NyaXB0UnVubmluZygnc2ltcGxlLWhhY2suanMnLCBuZXh0U2VydmVyKSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1heE1vbmV5ID0gbnMuZ2V0U2VydmVyTWF4TW9uZXkobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudE1vbmV5ID0gbnMuZ2V0U2VydmVyTW9uZXlBdmFpbGFibGUobmV4dFNlcnZlcik7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE1vbmV5IDwgMC4yICogbWF4TW9uZXkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBucy5ncm93KG5leHRTZXJ2ZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIobmV4dFNlcnZlciwgY3VycmVudFNlcnZlcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHdoaWxlICh0cnVlKSB7XFxuICAgICAgICBucy5wcmludChgUnVubmluZyBzY2FuYCk7XFxuICAgICAgICBhd2FpdCBzY2FuU2VydmVyKCdob21lJyk7XFxuICAgIH1cXG59XCIsXCJmaWxlbmFtZVwiOlwiZ3Jvdy1oZWxwZXIuanNcIixcInNlcnZlclwiOlwiaG9tZS0yM1wifX1dLFtcImNvbnN0YW50cy5qc1wiLHtcImN0b3JcIjpcIlNjcmlwdFwiLFwiZGF0YVwiOntcImNvZGVcIjpcIi8qKiBAcGFyYW0ge2ltcG9ydChcXFwiLlxcXCIpLk5TIH0gbnMgKi9cXG4vLyBpbXBvcnQgeyBFWENMVURFX1NFUlZFUlMgfSBmcm9tIFxcXCIuL2NvbnN0YW50cy5qc1xcXCI7XFxuXFxuZXhwb3J0IGNvbnN0IEVYQ0xVREVfU0VSVkVSUyA9IFtcXG4gICAgJ2hvbWUnLFxcbiAgICAnQ1NFQycsXFxuICAgICdhdm1uaXRlLTAyaCcsXFxuICAgICdJLkkuSS5JJyxcXG4gICAgJ3J1bjR0aGVoMTExeidcXG5dO1xcblxcbmZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAxMDI0OyBpbmRleCsrKSB7XFxuICAgIEVYQ0xVREVfU0VSVkVSUy5wdXNoKGBob21lLSR7aW5kZXh9YCk7XFxufVxcblxcblxcbmNvbnN0IERBUktXRUJfUFJPR1JBTVMgPSBbXFxuICAgIHsgbmFtZTogJ0JydXRlU1NILmV4ZScsIGNvc3Q6IDAgfSxcXG4gICAgeyBuYW1lOiAnRlRQQ3JhY2suZXhlJywgY29zdDogMTUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdyZWxheVNNVFAuZXhlJywgY29zdDogNTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdIVFRQV29ybS5leGUnLCBjb3N0OiAzMDAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdTUUxJbmplY3QuZXhlJywgY29zdDogMjUwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NlcnZlclByb2ZpbGVyLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYxLmV4ZScsIGNvc3Q6IDUwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdEZWVwc2NhblYyLmV4ZScsIGNvc3Q6IDI1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0F1dG9MaW5rLmV4ZScsIGNvc3Q6IDEwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnRm9ybXVsYXMuZXhlJywgY29zdDogNTAwMDAwMDAwMCB9XFxuXTtcXG5cXG5cXG5jb25zdCBDT01QTEVURURfRkFDVElPTlMgPSBbXFxuICAgICdDeWJlclNlYycsXFxuICAgICdOZXRidXJuZXJzJyxcXG4gICAgJ05pdGVTZWMnLFxcbiAgICAnVGhlIEJsYWNrIEhhbmQnLFxcbiAgICAnQWV2dW0nLFxcbiAgICAnU2VjdG9yLTEyJyxcXG4gICAgJ1ZvbGhhdmVuJyxcXG4gICAgJ1RpYW4gRGkgSHVpJ1xcbl07XCIsXCJmaWxlbmFtZVwiOlwiY29uc3RhbnRzLmpzXCIsXCJzZXJ2ZXJcIjpcImhvbWUtMjNcIn19XV19LFwic2VydmVyc09uTmV0d29ya1wiOltcImhvbWVcIl0sXCJzbXRwUG9ydE9wZW5cIjpmYWxzZSxcInNxbFBvcnRPcGVuXCI6ZmFsc2UsXCJzc2hQb3J0T3BlblwiOmZhbHNlLFwidGV4dEZpbGVzXCI6e1wiY3RvclwiOlwiSlNPTk1hcFwiLFwiZGF0YVwiOltdfSxcInB1cmNoYXNlZEJ5UGxheWVyXCI6dHJ1ZSxcImJhY2tkb29ySW5zdGFsbGVkXCI6ZmFsc2UsXCJiYXNlRGlmZmljdWx0eVwiOjEsXCJoYWNrRGlmZmljdWx0eVwiOjEsXCJtaW5EaWZmaWN1bHR5XCI6MSxcIm1vbmV5QXZhaWxhYmxlXCI6MCxcIm1vbmV5TWF4XCI6MCxcIm51bU9wZW5Qb3J0c1JlcXVpcmVkXCI6NSxcIm9wZW5Qb3J0Q291bnRcIjowLFwicmVxdWlyZWRIYWNraW5nU2tpbGxcIjoxLFwic2VydmVyR3Jvd3RoXCI6MSxcInJ1bm5pbmdTY3JpcHRzXCI6W119fSxcImhvbWUtMjRcIjp7XCJjdG9yXCI6XCJTZXJ2ZXJcIixcImRhdGFcIjp7XCJjb250cmFjdHNcIjpbXSxcImNwdUNvcmVzXCI6MSxcImZ0cFBvcnRPcGVuXCI6ZmFsc2UsXCJoYXNBZG1pblJpZ2h0c1wiOnRydWUsXCJob3N0bmFtZVwiOlwiaG9tZS0yNFwiLFwiaHR0cFBvcnRPcGVuXCI6ZmFsc2UsXCJpcFwiOlwiODcuMS4wLjBcIixcImlzQ29ubmVjdGVkVG9cIjpmYWxzZSxcIm1heFJhbVwiOjMyLFwibWVzc2FnZXNcIjpbXSxcIm9yZ2FuaXphdGlvbk5hbWVcIjpcIlwiLFwicHJvZ3JhbXNcIjpbXSxcInNjcmlwdHNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W1tcImdyb3ctaGVscGVyLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcblxcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG5zKSB7XFxuICAgIC8vIG5zLmRpc2FibGVMb2coJ0FMTCcpO1xcblxcbiAgICAvLyBUT0RPOiBhZGQgaW5jcmVhc2luZyB0aHJlc2hvbGQgaWYgbm8gc2VydmVycyBsb3dlciB0aGFuIGN1cnJlbnQgdGhyZXNob2xkXFxuICAgIGFzeW5jIGZ1bmN0aW9uIHNjYW5TZXJ2ZXIoY3VycmVudFNlcnZlciwgcHJldmlvdXNTZXJ2ZXIgPSBjdXJyZW50U2VydmVyKSB7XFxuICAgICAgICBsZXQgYXZhaWxhYmxlU2VydmVycyA9IG5zLnNjYW4oY3VycmVudFNlcnZlcik7XFxuXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF2YWlsYWJsZVNlcnZlcnMubGVuZ3RoOyArK2kpIHtcXG4gICAgICAgICAgICBsZXQgbmV4dFNlcnZlciA9IGF2YWlsYWJsZVNlcnZlcnNbaV07XFxuXFxuICAgICAgICAgICAgaWYgKG5leHRTZXJ2ZXIgIT0gY3VycmVudFNlcnZlciAmJiBuZXh0U2VydmVyICE9IHByZXZpb3VzU2VydmVyKSB7XFxuICAgICAgICAgICAgICAgIGlmIChucy5zY3JpcHRSdW5uaW5nKCdzaW1wbGUtaGFjay5qcycsIG5leHRTZXJ2ZXIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF4TW9uZXkgPSBucy5nZXRTZXJ2ZXJNYXhNb25leShuZXh0U2VydmVyKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TW9uZXkgPSBucy5nZXRTZXJ2ZXJNb25leUF2YWlsYWJsZShuZXh0U2VydmVyKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TW9uZXkgPCAwLjIgKiBtYXhNb25leSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5zLmdyb3cobmV4dFNlcnZlcik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYXdhaXQgc2NhblNlcnZlcihuZXh0U2VydmVyLCBjdXJyZW50U2VydmVyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgd2hpbGUgKHRydWUpIHtcXG4gICAgICAgIG5zLnByaW50KGBSdW5uaW5nIHNjYW5gKTtcXG4gICAgICAgIGF3YWl0IHNjYW5TZXJ2ZXIoJ2hvbWUnKTtcXG4gICAgfVxcbn1cIixcImZpbGVuYW1lXCI6XCJncm93LWhlbHBlci5qc1wiLFwic2VydmVyXCI6XCJob21lLTI0XCJ9fV0sW1wiY29uc3RhbnRzLmpzXCIse1wiY3RvclwiOlwiU2NyaXB0XCIsXCJkYXRhXCI6e1wiY29kZVwiOlwiLyoqIEBwYXJhbSB7aW1wb3J0KFxcXCIuXFxcIikuTlMgfSBucyAqL1xcbi8vIGltcG9ydCB7IEVYQ0xVREVfU0VSVkVSUyB9IGZyb20gXFxcIi4vY29uc3RhbnRzLmpzXFxcIjtcXG5cXG5leHBvcnQgY29uc3QgRVhDTFVERV9TRVJWRVJTID0gW1xcbiAgICAnaG9tZScsXFxuICAgICdDU0VDJyxcXG4gICAgJ2F2bW5pdGUtMDJoJyxcXG4gICAgJ0kuSS5JLkknLFxcbiAgICAncnVuNHRoZWgxMTF6J1xcbl07XFxuXFxuZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDEwMjQ7IGluZGV4KyspIHtcXG4gICAgRVhDTFVERV9TRVJWRVJTLnB1c2goYGhvbWUtJHtpbmRleH1gKTtcXG59XFxuXFxuXFxuY29uc3QgREFSS1dFQl9QUk9HUkFNUyA9IFtcXG4gICAgeyBuYW1lOiAnQnJ1dGVTU0guZXhlJywgY29zdDogMCB9LFxcbiAgICB7IG5hbWU6ICdGVFBDcmFjay5leGUnLCBjb3N0OiAxNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ3JlbGF5U01UUC5leGUnLCBjb3N0OiA1MDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0hUVFBXb3JtLmV4ZScsIGNvc3Q6IDMwMDAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ1NRTEluamVjdC5leGUnLCBjb3N0OiAyNTAwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnU2VydmVyUHJvZmlsZXIuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjEuZXhlJywgY29zdDogNTAwMDAwIH0sXFxuICAgIHsgbmFtZTogJ0RlZXBzY2FuVjIuZXhlJywgY29zdDogMjUwMDAwMDAgfSxcXG4gICAgeyBuYW1lOiAnQXV0b0xpbmsuZXhlJywgY29zdDogMTAwMDAwMCB9LFxcbiAgICB7IG5hbWU6ICdGb3JtdWxhcy5leGUnLCBjb3N0OiA1MDAwMDAwMDAwIH1cXG5dO1xcblxcblxcbmNvbnN0IENPTVBMRVRFRF9GQUNUSU9OUyA9IFtcXG4gICAgJ0N5YmVyU2VjJyxcXG4gICAgJ05ldGJ1cm5lcnMnLFxcbiAgICAnTml0ZVNlYycsXFxuICAgICdUaGUgQmxhY2sgSGFuZCcsXFxuICAgICdBZXZ1bScsXFxuICAgICdTZWN0b3ItMTInLFxcbiAgICAnVm9saGF2ZW4nLFxcbiAgICAnVGlhbiBEaSBIdWknXFxuXTtcIixcImZpbGVuYW1lXCI6XCJjb25zdGFudHMuanNcIixcInNlcnZlclwiOlwiaG9tZS0yNFwifX1dXX0sXCJzZXJ2ZXJzT25OZXR3b3JrXCI6W1wiaG9tZVwiXSxcInNtdHBQb3J0T3BlblwiOmZhbHNlLFwic3FsUG9ydE9wZW5cIjpmYWxzZSxcInNzaFBvcnRPcGVuXCI6ZmFsc2UsXCJ0ZXh0RmlsZXNcIjp7XCJjdG9yXCI6XCJKU09OTWFwXCIsXCJkYXRhXCI6W119LFwicHVyY2hhc2VkQnlQbGF5ZXJcIjp0cnVlLFwiYmFja2Rvb3JJbnN0YWxsZWRcIjpmYWxzZSxcImJhc2VEaWZmaWN1bHR5XCI6MSxcImhhY2tEaWZmaWN1bHR5XCI6MSxcIm1pbkRpZmZpY3VsdHlcIjoxLFwibW9uZXlBdmFpbGFibGVcIjowLFwibW9uZXlNYXhcIjowLFwibnVtT3BlblBvcnRzUmVxdWlyZWRcIjo1LFwib3BlblBvcnRDb3VudFwiOjAsXCJyZXF1aXJlZEhhY2tpbmdTa2lsbFwiOjEsXCJzZXJ2ZXJHcm93dGhcIjoxLFwicnVubmluZ1NjcmlwdHNcIjpbXX19fSIsIkNvbXBhbmllc1NhdmUiOiJ7XCJFQ29ycFwiOntcImN0b3JcIjpcIkNvbXBhbnlcIixcImRhdGFcIjp7XCJmYXZvclwiOjAsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiTWVnYUNvcnBcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIkJhY2htYW4gJiBBc3NvY2lhdGVzXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJCbGFkZSBJbmR1c3RyaWVzXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJOV09cIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIkNsYXJrZSBJbmNvcnBvcmF0ZWRcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIk9tbmlUZWsgSW5jb3Jwb3JhdGVkXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJGb3VyIFNpZ21hXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJLdWFpR29uZyBJbnRlcm5hdGlvbmFsXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJGdWxjcnVtIFRlY2hub2xvZ2llc1wiOntcImN0b3JcIjpcIkNvbXBhbnlcIixcImRhdGFcIjp7XCJmYXZvclwiOjAsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiU3Rvcm0gVGVjaG5vbG9naWVzXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJEZWZDb21tXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJIZWxpb3MgTGFic1wiOntcImN0b3JcIjpcIkNvbXBhbnlcIixcImRhdGFcIjp7XCJmYXZvclwiOjAsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiVml0YUxpZmVcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIkljYXJ1cyBNaWNyb3N5c3RlbXNcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIlVuaXZlcnNhbCBFbmVyZ3lcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIkdhbGFjdGljIEN5YmVyc3lzdGVtc1wiOntcImN0b3JcIjpcIkNvbXBhbnlcIixcImRhdGFcIjp7XCJmYXZvclwiOjAsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiQWVyb0NvcnBcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIk9tbmlhIEN5YmVyc3lzdGVtc1wiOntcImN0b3JcIjpcIkNvbXBhbnlcIixcImRhdGFcIjp7XCJmYXZvclwiOjAsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiU29sYXJpcyBTcGFjZSBTeXN0ZW1zXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJEZWx0YU9uZVwiOntcImN0b3JcIjpcIkNvbXBhbnlcIixcImRhdGFcIjp7XCJmYXZvclwiOjAsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiR2xvYmFsIFBoYXJtYWNldXRpY2Fsc1wiOntcImN0b3JcIjpcIkNvbXBhbnlcIixcImRhdGFcIjp7XCJmYXZvclwiOjAsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiTm92YSBNZWRpY2FsXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJDZW50cmFsIEludGVsbGlnZW5jZSBBZ2VuY3lcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIk5hdGlvbmFsIFNlY3VyaXR5IEFnZW5jeVwiOntcImN0b3JcIjpcIkNvbXBhbnlcIixcImRhdGFcIjp7XCJmYXZvclwiOjAsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiV2F0Y2hkb2cgU2VjdXJpdHlcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIkxleG9Db3JwXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJSaG8gQ29uc3RydWN0aW9uXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJBbHBoYSBFbnRlcnByaXNlc1wiOntcImN0b3JcIjpcIkNvbXBhbnlcIixcImRhdGFcIjp7XCJmYXZvclwiOjAsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiQWV2dW0gUG9saWNlIEhlYWRxdWFydGVyc1wiOntcImN0b3JcIjpcIkNvbXBhbnlcIixcImRhdGFcIjp7XCJmYXZvclwiOjAsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiU3lzQ29yZSBTZWN1cml0aWVzXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJDb21wdVRla1wiOntcImN0b3JcIjpcIkNvbXBhbnlcIixcImRhdGFcIjp7XCJmYXZvclwiOjAsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiTmV0TGluayBUZWNobm9sb2dpZXNcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIkNhcm1pY2hhZWwgU2VjdXJpdHlcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIkZvb2ROU3R1ZmZcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIkpvZSdzIEd1bnNcIjp7XCJjdG9yXCI6XCJDb21wYW55XCIsXCJkYXRhXCI6e1wiZmF2b3JcIjowLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIk9tZWdhIFNvZnR3YXJlXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJOb29kbGUgQmFyXCI6e1wiY3RvclwiOlwiQ29tcGFueVwiLFwiZGF0YVwiOntcImZhdm9yXCI6MCxcInBsYXllclJlcHV0YXRpb25cIjowfX19IiwiRmFjdGlvbnNTYXZlIjoie1wiSWxsdW1pbmF0aVwiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjpmYWxzZSxcImlzTWVtYmVyXCI6ZmFsc2UsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiRGFlZGFsdXNcIjp7XCJjdG9yXCI6XCJGYWN0aW9uXCIsXCJkYXRhXCI6e1wiYWxyZWFkeUludml0ZWRcIjpmYWxzZSxcImZhdm9yXCI6MCxcImlzQmFubmVkXCI6ZmFsc2UsXCJpc01lbWJlclwiOmZhbHNlLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIlRoZSBDb3ZlbmFudFwiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjpmYWxzZSxcImlzTWVtYmVyXCI6ZmFsc2UsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiRUNvcnBcIjp7XCJjdG9yXCI6XCJGYWN0aW9uXCIsXCJkYXRhXCI6e1wiYWxyZWFkeUludml0ZWRcIjpmYWxzZSxcImZhdm9yXCI6MCxcImlzQmFubmVkXCI6ZmFsc2UsXCJpc01lbWJlclwiOmZhbHNlLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIk1lZ2FDb3JwXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6ZmFsc2UsXCJmYXZvclwiOjAsXCJpc0Jhbm5lZFwiOmZhbHNlLFwiaXNNZW1iZXJcIjpmYWxzZSxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJCYWNobWFuICYgQXNzb2NpYXRlc1wiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjpmYWxzZSxcImlzTWVtYmVyXCI6ZmFsc2UsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiQmxhZGUgSW5kdXN0cmllc1wiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjpmYWxzZSxcImlzTWVtYmVyXCI6ZmFsc2UsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiTldPXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6ZmFsc2UsXCJmYXZvclwiOjAsXCJpc0Jhbm5lZFwiOmZhbHNlLFwiaXNNZW1iZXJcIjpmYWxzZSxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJDbGFya2UgSW5jb3Jwb3JhdGVkXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6ZmFsc2UsXCJmYXZvclwiOjAsXCJpc0Jhbm5lZFwiOmZhbHNlLFwiaXNNZW1iZXJcIjpmYWxzZSxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJPbW5pVGVrIEluY29ycG9yYXRlZFwiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjpmYWxzZSxcImlzTWVtYmVyXCI6ZmFsc2UsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiRm91ciBTaWdtYVwiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjpmYWxzZSxcImlzTWVtYmVyXCI6ZmFsc2UsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiS3VhaUdvbmcgSW50ZXJuYXRpb25hbFwiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjpmYWxzZSxcImlzTWVtYmVyXCI6ZmFsc2UsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiRnVsY3J1bSBTZWNyZXQgVGVjaG5vbG9naWVzXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6ZmFsc2UsXCJmYXZvclwiOjAsXCJpc0Jhbm5lZFwiOmZhbHNlLFwiaXNNZW1iZXJcIjpmYWxzZSxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJCaXRSdW5uZXJzXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6ZmFsc2UsXCJmYXZvclwiOjAsXCJpc0Jhbm5lZFwiOmZhbHNlLFwiaXNNZW1iZXJcIjpmYWxzZSxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJUaGUgQmxhY2sgSGFuZFwiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjpmYWxzZSxcImlzTWVtYmVyXCI6ZmFsc2UsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiTml0ZVNlY1wiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOnRydWUsXCJmYXZvclwiOjEsXCJpc0Jhbm5lZFwiOmZhbHNlLFwiaXNNZW1iZXJcIjp0cnVlLFwicGxheWVyUmVwdXRhdGlvblwiOjEzMzA4LjIxOTM2MTA2MjIxfX0sXCJBZXZ1bVwiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjpmYWxzZSxcImlzTWVtYmVyXCI6ZmFsc2UsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiQ2hvbmdxaW5nXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6ZmFsc2UsXCJmYXZvclwiOjAsXCJpc0Jhbm5lZFwiOnRydWUsXCJpc01lbWJlclwiOmZhbHNlLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIklzaGltYVwiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjp0cnVlLFwiaXNNZW1iZXJcIjpmYWxzZSxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJOZXcgVG9reW9cIjp7XCJjdG9yXCI6XCJGYWN0aW9uXCIsXCJkYXRhXCI6e1wiYWxyZWFkeUludml0ZWRcIjpmYWxzZSxcImZhdm9yXCI6MCxcImlzQmFubmVkXCI6dHJ1ZSxcImlzTWVtYmVyXCI6ZmFsc2UsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiU2VjdG9yLTEyXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6dHJ1ZSxcImZhdm9yXCI6MSxcImlzQmFubmVkXCI6ZmFsc2UsXCJpc01lbWJlclwiOnRydWUsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6NTk5NzAuNzg4MTU2NzY1MzQ2fX0sXCJWb2xoYXZlblwiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjp0cnVlLFwiaXNNZW1iZXJcIjpmYWxzZSxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJTcGVha2VycyBmb3IgdGhlIERlYWRcIjp7XCJjdG9yXCI6XCJGYWN0aW9uXCIsXCJkYXRhXCI6e1wiYWxyZWFkeUludml0ZWRcIjpmYWxzZSxcImZhdm9yXCI6MCxcImlzQmFubmVkXCI6ZmFsc2UsXCJpc01lbWJlclwiOmZhbHNlLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIlRoZSBEYXJrIEFybXlcIjp7XCJjdG9yXCI6XCJGYWN0aW9uXCIsXCJkYXRhXCI6e1wiYWxyZWFkeUludml0ZWRcIjpmYWxzZSxcImZhdm9yXCI6MCxcImlzQmFubmVkXCI6ZmFsc2UsXCJpc01lbWJlclwiOmZhbHNlLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIlRoZSBTeW5kaWNhdGVcIjp7XCJjdG9yXCI6XCJGYWN0aW9uXCIsXCJkYXRhXCI6e1wiYWxyZWFkeUludml0ZWRcIjpmYWxzZSxcImZhdm9yXCI6MCxcImlzQmFubmVkXCI6ZmFsc2UsXCJpc01lbWJlclwiOmZhbHNlLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIlNpbGhvdWV0dGVcIjp7XCJjdG9yXCI6XCJGYWN0aW9uXCIsXCJkYXRhXCI6e1wiYWxyZWFkeUludml0ZWRcIjpmYWxzZSxcImZhdm9yXCI6MCxcImlzQmFubmVkXCI6ZmFsc2UsXCJpc01lbWJlclwiOmZhbHNlLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIlRldHJhZHNcIjp7XCJjdG9yXCI6XCJGYWN0aW9uXCIsXCJkYXRhXCI6e1wiYWxyZWFkeUludml0ZWRcIjpmYWxzZSxcImZhdm9yXCI6MCxcImlzQmFubmVkXCI6ZmFsc2UsXCJpc01lbWJlclwiOmZhbHNlLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fSxcIlNsdW0gU25ha2VzXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6ZmFsc2UsXCJmYXZvclwiOjAsXCJpc0Jhbm5lZFwiOmZhbHNlLFwiaXNNZW1iZXJcIjpmYWxzZSxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJOZXRidXJuZXJzXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6dHJ1ZSxcImZhdm9yXCI6MSxcImlzQmFubmVkXCI6ZmFsc2UsXCJpc01lbWJlclwiOnRydWUsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MzM4NjYuOTI0MDE4NDI0NDh9fSxcIlRpYW4gRGkgSHVpXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6ZmFsc2UsXCJmYXZvclwiOjAsXCJpc0Jhbm5lZFwiOmZhbHNlLFwiaXNNZW1iZXJcIjpmYWxzZSxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJDeWJlclNlY1wiOntcImN0b3JcIjpcIkZhY3Rpb25cIixcImRhdGFcIjp7XCJhbHJlYWR5SW52aXRlZFwiOmZhbHNlLFwiZmF2b3JcIjowLFwiaXNCYW5uZWRcIjpmYWxzZSxcImlzTWVtYmVyXCI6ZmFsc2UsXCJwbGF5ZXJSZXB1dGF0aW9uXCI6MH19LFwiQmxhZGVidXJuZXJzXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6ZmFsc2UsXCJmYXZvclwiOjAsXCJpc0Jhbm5lZFwiOmZhbHNlLFwiaXNNZW1iZXJcIjpmYWxzZSxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJDaHVyY2ggb2YgdGhlIE1hY2hpbmUgR29kXCI6e1wiY3RvclwiOlwiRmFjdGlvblwiLFwiZGF0YVwiOntcImFscmVhZHlJbnZpdGVkXCI6ZmFsc2UsXCJmYXZvclwiOjAsXCJpc0Jhbm5lZFwiOmZhbHNlLFwiaXNNZW1iZXJcIjpmYWxzZSxcInBsYXllclJlcHV0YXRpb25cIjowfX0sXCJTaGFkb3dzIG9mIEFuYXJjaHlcIjp7XCJjdG9yXCI6XCJGYWN0aW9uXCIsXCJkYXRhXCI6e1wiYWxyZWFkeUludml0ZWRcIjpmYWxzZSxcImZhdm9yXCI6MCxcImlzQmFubmVkXCI6ZmFsc2UsXCJpc01lbWJlclwiOmZhbHNlLFwicGxheWVyUmVwdXRhdGlvblwiOjB9fX0iLCJBbGlhc2VzU2F2ZSI6IntcImtpbGwtbnVrZVwiOlwiaG9tZTsgcnVuIGtpbGwtbnVrZS5qc1wiLFwia2lsbC1oYWNrXCI6XCJob21lOyBydW4ga2lsbC1hbGwtc2ltcGxlLWhhY2suanNcIixcImhhY2tuZXRcIjpcImhvbWU7IHJ1biBoYWNrbmV0LWJvdC5qc1wiLFwia2lsbC1ib3RcIjpcImhvbWU7IHJ1biBraWxsLWhhY2tuZXQuanNcIixcIm51a2VcIjpcImhvbWU7IHJ1biBhdXRvLW51a2UuanNcIixcImZsaWdodFwiOlwiaG9tZTsgcnVuIGZsMWdodC5leGVcIixcInN0YXJ0LWdyb3ctaGVscGVyc1wiOlwiaG9tZTsgcnVuIHN0YXJ0LWdyb3ctaGVscGVycy5qc1wiLFwiYmFja2Rvb3Itc2VydmVyXCI6XCJob21lOyBydW4gYmFja2Rvb3ItY29tbWFuZC5qc1wiLFwiZGFya3dlYlwiOlwiY29ubmVjdCBkYXJrd2ViOyBidXkgLWxcIixcImJ1eS1hbGxcIjpcImJ1eSBGVFBDcmFjay5leGU7IGJ1eSByZWxheVNNVFAuZXhlOyBidXkgSFRUUFdvcm0uZXhlOyBidXkgU1FMSW5qZWN0LmV4ZTsgYnV5IFNlcnZlclByb2ZpbGVyLmV4ZTsgYnV5IERlZXBzY2FuVjEuZXhlOyBidXkgRGVlcHNjYW5WMi5leGU7IGJ1eSBBdXRvTGluay5leGVcIn0iLCJHbG9iYWxBbGlhc2VzU2F2ZSI6IntcInN0YXJ0QWxsXCI6XCJob21lOyAuL2F1dG8tbnVrZS5qczsgLi9zdGFydC1ncm93LWhlbHBlcnMuanM7IC4vaGFja25ldC1ib3QuanM7XCIsXCJraWxsQWxsXCI6XCJob21lOyAuL2tpbGwtYWxsLXNpbXBsZS1oYWNrLmpzOyAuL2tpbGwtYWxsLWdyb3ctaGVscGVycy5qczsgLi9raWxsLWhhY2tuZXQuanM7IC4va2lsbC1udWtlLmpzO1wifSIsIlN0b2NrTWFya2V0U2F2ZSI6IntcImxhc3RVcGRhdGVcIjowLFwiT3JkZXJzXCI6e30sXCJzdG9yZWRDeWNsZXNcIjowLFwidGlja3NVbnRpbEN5Y2xlXCI6MH0iLCJTZXR0aW5nc1NhdmUiOiJ7XCJBY3RpdmVTY3JpcHRzU2VydmVyUGFnZVNpemVcIjoxMDAsXCJBY3RpdmVTY3JpcHRzU2NyaXB0UGFnZVNpemVcIjoxMCxcIkF1dG9leGVjU2NyaXB0XCI6XCJcIixcIkF1dG9zYXZlSW50ZXJ2YWxcIjo2MCxcIkNvZGVJbnN0cnVjdGlvblJ1blRpbWVcIjoyMCxcIkRpc2FibGVBU0NJSUFydFwiOmZhbHNlLFwiRGlzYWJsZUhvdGtleXNcIjpmYWxzZSxcIkRpc2FibGVUZXh0RWZmZWN0c1wiOmZhbHNlLFwiRGlzYWJsZU92ZXJ2aWV3UHJvZ3Jlc3NCYXJzXCI6ZmFsc2UsXCJFbmFibGVCYXNoSG90a2V5c1wiOmZhbHNlLFwiRW5hYmxlSGlzdG9yeVNlYXJjaFwiOmZhbHNlLFwiVGltZXN0YW1wc0Zvcm1hdFwiOlwiXCIsXCJMb2NhbGVcIjpcImVuXCIsXCJNYXhSZWNlbnRTY3JpcHRzQ2FwYWNpdHlcIjo1MCxcIk1heExvZ0NhcGFjaXR5XCI6NTAsXCJNYXhQb3J0Q2FwYWNpdHlcIjo1MCxcIk1heFRlcm1pbmFsQ2FwYWNpdHlcIjo1MDAsXCJSZW1vdGVGaWxlQXBpUG9ydFwiOjAsXCJTYXZlR2FtZU9uRmlsZVNhdmVcIjp0cnVlLFwiU3VwcHJlc3NCdXlBdWdtZW50YXRpb25Db25maXJtYXRpb25cIjpmYWxzZSxcIlN1cHByZXNzRmFjdGlvbkludml0ZXNcIjpmYWxzZSxcIlN1cHByZXNzTWVzc2FnZXNcIjpmYWxzZSxcIlN1cHByZXNzVHJhdmVsQ29uZmlybWF0aW9uXCI6ZmFsc2UsXCJTdXBwcmVzc0JsYWRlYnVybmVyUG9wdXBcIjpmYWxzZSxcIlN1cHByZXNzVElYUG9wdXBcIjpmYWxzZSxcIlN1cHByZXNzU2F2ZWRHYW1lVG9hc3RcIjpmYWxzZSxcIlN1cHByZXNzQXV0b3NhdmVEaXNhYmxlZFdhcm5pbmdzXCI6ZmFsc2UsXCJVc2VJRUM2MDAyN18yXCI6dHJ1ZSxcIlNob3dNaWRkbGVOdWxsVGltZVVuaXRcIjpmYWxzZSxcIkV4Y2x1ZGVSdW5uaW5nU2NyaXB0c0Zyb21TYXZlXCI6ZmFsc2UsXCJJc1NpZGViYXJPcGVuZWRcIjp0cnVlLFwidGhlbWVcIjp7XCJwcmltYXJ5bGlnaHRcIjpcIiMyOENGMjhcIixcInByaW1hcnlcIjpcIiMyMUE4MjFcIixcInByaW1hcnlkYXJrXCI6XCIjMTc3MzE3XCIsXCJzdWNjZXNzbGlnaHRcIjpcIiMxQ0ZGMUNcIixcInN1Y2Nlc3NcIjpcIiMxNkNBMTZcIixcInN1Y2Nlc3NkYXJrXCI6XCIjMEQ5MTBEXCIsXCJlcnJvcmxpZ2h0XCI6XCIjRkYzQjNCXCIsXCJlcnJvclwiOlwiI0MzMkQyRFwiLFwiZXJyb3JkYXJrXCI6XCIjOEUyMTIxXCIsXCJzZWNvbmRhcnlsaWdodFwiOlwiI0IzQjNCM1wiLFwic2Vjb25kYXJ5XCI6XCIjODM4MzgzXCIsXCJzZWNvbmRhcnlkYXJrXCI6XCIjNjc2NzY3XCIsXCJ3YXJuaW5nbGlnaHRcIjpcIiNGRkZGM0FcIixcIndhcm5pbmdcIjpcIiNDM0MzMkFcIixcIndhcm5pbmdkYXJrXCI6XCIjOEM4QzFFXCIsXCJpbmZvbGlnaHRcIjpcIiM2NENCRkZcIixcImluZm9cIjpcIiMzMzk5Q0NcIixcImluZm9kYXJrXCI6XCIjMjQ2RDkxXCIsXCJ3ZWxsbGlnaHRcIjpcIiM0MDQwNDBcIixcIndlbGxcIjpcIiMxQzFDMUNcIixcIndoaXRlXCI6XCIjQzNDM0MzXCIsXCJibGFja1wiOlwiIzBBMEIwQlwiLFwiaHBcIjpcIiNDNjJFMkVcIixcIm1vbmV5XCI6XCIjRDZCQjI3XCIsXCJoYWNrXCI6XCIjQURGRjJGXCIsXCJjb21iYXRcIjpcIiNFOEVEQ0RcIixcImNoYVwiOlwiIzhCNUZBRlwiLFwiaW50XCI6XCIjNTM3Q0M4XCIsXCJyZXBcIjpcIiNFOEVEQ0RcIixcImRpc2FibGVkXCI6XCIjNUFCNUE1XCIsXCJiYWNrZ3JvdW5kcHJpbWFyeVwiOlwiIzBDMEQwRVwiLFwiYmFja2dyb3VuZHNlY29uZGFyeVwiOlwiIzEyMTQxNVwiLFwiYnV0dG9uXCI6XCIjMjUyODI5XCJ9LFwic3R5bGVzXCI6e1wibGluZUhlaWdodFwiOjEuNSxcImZvbnRGYW1pbHlcIjpcIkx1Y2lkYSBDb25zb2xlLCBMdWNpZGEgU2FucyBVbmljb2RlLCBGaXJhIE1vbm8sIENvbnNvbGFzLCBDb3VyaWVyIE5ldywgQ291cmllciwgbW9ub3NwYWNlLCBUaW1lcyBOZXcgUm9tYW5cIn0sXCJvdmVydmlld1wiOntcInhcIjotOSxcInlcIjo5LFwib3BlbmVkXCI6dHJ1ZX0sXCJFZGl0b3JUaGVtZVwiOntcImNvbW1vblwiOntcImFjY2VudFwiOlwiQjVDRUE4XCIsXCJiZ1wiOlwiMUUxRTFFXCIsXCJmZ1wiOlwiRDRENEQ0XCJ9LFwic3ludGF4XCI6e1widGFnXCI6XCI1NjlDRDZcIixcImVudGl0eVwiOlwiNTY5Q0Q2XCIsXCJzdHJpbmdcIjpcIkNFOTE3OFwiLFwicmVnZXhwXCI6XCI2NDY2OTVcIixcIm1hcmt1cFwiOlwiNTY5Q0Q2XCIsXCJrZXl3b3JkXCI6XCI1NjlDRDZcIixcImNvbW1lbnRcIjpcIjZBOTk1NVwiLFwiY29uc3RhbnRcIjpcIjU2OUNENlwiLFwiZXJyb3JcIjpcIkY0NDc0N1wifSxcInVpXCI6e1wibGluZVwiOlwiMUUxRTFFXCIsXCJwYW5lbFwiOntcImJnXCI6XCIyNTI1MjZcIixcInNlbGVjdGVkXCI6XCIyNTI1MjZcIixcImJvcmRlclwiOlwiMUUxRTFFXCJ9LFwic2VsZWN0aW9uXCI6e1wiYmdcIjpcIkFERDZGRjI2XCJ9fSxcImJhc2VcIjpcInZzLWRhcmtcIixcImluaGVyaXRcIjp0cnVlfSxcIk93bmVkQXVnbWVudGF0aW9uc09yZGVyXCI6MCxcIlB1cmNoYXNlQXVnbWVudGF0aW9uc09yZGVyXCI6MixcIk1vbmFjb1RoZW1lXCI6XCJtb25va2FpXCIsXCJNb25hY29JbnNlcnRTcGFjZXNcIjp0cnVlLFwiTW9uYWNvVGFiU2l6ZVwiOjIsXCJNb25hY29EZXRlY3RJbmRlbnRhdGlvblwiOmZhbHNlLFwiTW9uYWNvRm9udEZhbWlseVwiOlwiTHVjaWRhIENvbnNvbGVcIixcIk1vbmFjb0ZvbnRTaXplXCI6MTUsXCJNb25hY29Gb250TGlnYXR1cmVzXCI6ZmFsc2UsXCJNb25hY29WaW1cIjpmYWxzZSxcIk1vbmFjb1dvcmRXcmFwXCI6XCJvZmZcIixcIk1vbmFjb0N1cnNvclN0eWxlXCI6XCJsaW5lXCIsXCJNb25hY29DdXJzb3JCbGlua2luZ1wiOlwiYmxpbmtcIixcImhpZGVUcmFpbGluZ0RlY2ltYWxaZXJvc1wiOmZhbHNlLFwiaGlkZVRob3VzYW5kc1NlcGFyYXRvclwiOmZhbHNlLFwidXNlRW5naW5lZXJpbmdOb3RhdGlvblwiOmZhbHNlLFwiZGlzYWJsZVN1ZmZpeGVzXCI6ZmFsc2V9IiwiVmVyc2lvblNhdmUiOiIzNCIsIkFsbEdhbmdzU2F2ZSI6IiIsIkxhc3RFeHBvcnRCb251cyI6IjE2OTMzODM5ODAwMjAiLCJTdGFuZWtzR2lmdFNhdmUiOiJ7XCJjdG9yXCI6XCJTdGFuZWtzR2lmdFwiLFwiZGF0YVwiOntcImZyYWdtZW50c1wiOltdLFwiaXNCb251c0NoYXJnaW5nXCI6ZmFsc2UsXCJzdG9yZWRDeWNsZXNcIjowfX0ifX0= |