{"remainingRequest":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\eslint-loader\\index.js??ref--13-0!D:\\jenkins\\workspace\\ljzc-fvue\\src\\views\\BigScreen\\js\\DistrictReformMethods.js","dependencies":[{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\src\\views\\BigScreen\\js\\DistrictReformMethods.js","mtime":1701311301928},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\babel.config.js","mtime":1701311296006},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvbGp6Yy1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQtaW5kZXguanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIjsKaW1wb3J0ICogYXMgZWNoYXJ0cyBmcm9tICdlY2hhcnRzJzsKaW1wb3J0IHsgUmFkYXIgfSBmcm9tICdAYW50di9nMnBsb3QnOwppbXBvcnQgY3EgZnJvbSAnQC9hc3NldHMvanMvY3EuanMnOwppbXBvcnQgbWFpbjkgZnJvbSAnQC9hc3NldHMvanMvbWFpbjkuanMnOwppbXBvcnQgZGlhbG9nQ29uZmlnIGZyb20gJ0Avdmlld3MvQmlnU2NyZWVuL2pzL0Rpc3RyaWN0UmVmb3JtRGlhbG9nQ29uZmlnLmpzJzsKaW1wb3J0IHsgbWFwU3RhdGUgfSBmcm9tICd2dWV4JzsKaW1wb3J0IFZ1ZVNlYW1sZXNzU2Nyb2xsIGZyb20gJ3Z1ZS1zZWFtbGVzcy1zY3JvbGwnOwppbXBvcnQgZGlhbG9nQ29tcG9uZW50cyBmcm9tICdAL3ZpZXdzL0JpZ1NjcmVlbi9qcy9kaWFsb2dfY29tcG9uZW50cy5qcyc7CmltcG9ydCBFYXN5RGlhbG9nIGZyb20gJ0Avdmlld3MvQmlnU2NyZWVuL2NvbXBvbmVudHMvZWFzeS1kaWFsb2cvaW5kZXgudnVlJzsKaW1wb3J0IGZha2VEYXRhIGZyb20gJ0Avdmlld3MvQmlnU2NyZWVuL2pzL2Zha2VEYXRhX2Rpc3RyaWN0LmpzJzsKaW1wb3J0IGFwaUxpc3QgZnJvbSAnQC9hcGkvYmlnU2NyZWVuL2Rpc3RyaWNWaWV3LmpzJzsKaW1wb3J0IGJpZ1NjcmVlbk1peGluIGZyb20gJ0AvbWl4aW5zL2JpZ1NjcmVlbk1peGluLmpzJzsKaW1wb3J0IHV0aWxzIGZyb20gJ0AvdXRpbHMuanMnOwppbXBvcnQgc2NyZWVuSGVhZGVyIGZyb20gJ0Avdmlld3MvQmlnU2NyZWVuL2NvbXBvbmVudHMvc2NyZWVuSGVhZGVyLnZ1ZSc7CmltcG9ydCBkYXRhTWl4aW4gZnJvbSAnQC92aWV3cy9CaWdTY3JlZW4vanMvRGlzdHJpY3RSZWZvcm1NZXRob2RzLmpzJzsKaW1wb3J0IHsgc2l6ZSB9IGZyb20gJ2xvZGFzaCc7CmltcG9ydCBTd2lwZXIgZnJvbSAnc3dpcGVyJzsKLy8gaW1wb3J0ICJzd2lwZXIvZGlzdC9jc3Mvc3dpcGVyLmNzcyI7Ci8vIGltcG9ydCAnc3dpcGVyL3N3aXBlci5zY3NzJwovLyBpbXBvcnQgeyBzd2lwZXIsIHN3aXBlclNsaWRlIH0gZnJvbSAidnVlLWF3ZXNvbWUtc3dpcGVyIjsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdEaXN0cmljdFJlZm9ybU1peGluJywKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgbWFwS2V5QXJyOiBbCiAgICAgIC8vICdzeW5HcmFkZScsCiAgICAgIC8vICdkaWdpdEdyYWRlJywKICAgICAgLy8gJ2NvdW50cnlGaXJtR3JhZGUnLAogICAgICAvLyAnbXVHcmFkZScsCiAgICAgIC8vICdmaXJtR3JhZGUnLAogICAgICAvLyAnY3JlZGl0R3JhZGUnLAogICAgICAnYWxsR3JhZGUnLAogICAgICAvLyAnbmF0aW9uYWxQcm9qZWN0R3JhZGUnLCAvL+WbveS8geaUuemdqQogICAgICAvLyAnbmF0aW9uYWxQcm9qZWN0R3JhZGUnLCAvL+S6qeWdh+iuuuiLsembhAogICAgICAnbGlzdGVkQ29tcGFuaWVzR3JhZGUnLAogICAgICAvL+S8geS4muS4iuW4ggogICAgICAnY3JlZGl0R3JhZGUnLAogICAgICAvL+S/oeeUqOmHjeW6hgogICAgICAnbmF0aW9uYWxQcm9qZWN0R3JhZGUnLAogICAgICAvL+WbveWutuivleeCuQogICAgICAnbmF0aW9ud2lkZUdyYWRlJywKICAgICAgLy/lhajlm73ogq/lrpoKICAgICAgJ2NpdHlHcmFkZScsCiAgICAgIC8v5YWo5biC5o6o5bm/CiAgICAgICdzYXRpc2ZpZWRHcmFkZScsCiAgICAgIC8v5ruh5oSP5bqmCiAgICAgIC8vICdjaXR5UHJvamVjdEdyYWRlJywKICAgICAgLy8gJ3dvcmthYmxlUGFzc0dyYWRlJywgIC8v6aqM5pS26YCa6L+H546H77yI5YyF5ous5biC57qn77yJCiAgICAgICduYXRpb25hbFBhc3NHcmFkZScsCiAgICAgIC8v6aqM5pS26YCa6L+H546H77yI5LiN5YyF5ous5biC57qn77yJCiAgICAgIC8vICd3b3JrYWJsZUFkZEdyYWRlJywgLy/mlrDlop7or5XngrnvvIjljIXmi6zluILnuqfvvIkKICAgICAgJ3dvcmthYmxlTmF0aW9uYWxBZGRHcmFkZScgLy/mlrDlop7or5XngrnvvIjkuI3ljIXmi6zluILnuqfvvIkKCiAgICAgIC8vICdtZWRpYUdyYWRlJywKICAgICAgXSwKICAgICAgc3dpcGVyOiBudWxsLAogICAgICBzd2lwZXJPcHRpb246IHsKICAgICAgICBsb29wOiB0cnVlLAogICAgICAgIGF1dG9wbGF5OiB7CiAgICAgICAgICBkaXNhYmxlT25JbnRlcmFjdGlvbjogZmFsc2UsCiAgICAgICAgICBkZWxheTogNTAwMAogICAgICAgIH0sCiAgICAgICAgZGlyZWN0aW9uOiAndmVydGljYWwnLAogICAgICAgIHNsaWRlc1BlclZpZXc6IDUsCiAgICAgICAgY2VudGVyZWRTbGlkZXM6IHRydWUsCiAgICAgICAgY2VudGVyZWRTbGlkZXNCb3VuZHM6IHRydWUsCiAgICAgICAgZ3JhYkN1cnNvcjogdHJ1ZQogICAgICB9LAogICAgICAvLyBzbGlkZURhdGE6IFsKICAgICAgLy8gICAgIHsgbmFtZTogJ+e7vOWQiOaOkuWQjScgfSwKICAgICAgLy8gICAgIHsgbmFtZTogJ+WbveWutuivleeCuScgfSwKICAgICAgLy8gICAgIHsgbmFtZTogJ+W4gue6p+ivleeCuScgfSwKICAgICAgLy8gICAgIHsgbmFtZTogJ+mqjOaUtueOhycgfSwKICAgICAgLy8gICAgIHsgbmFtZTogJ+aWsOWinuivleeCuScgfSwKICAgICAgLy8gICAgIHsgbmFtZTogJ+WFqOWbveiCr+WumicgfSwKICAgICAgLy8gICAgIHsgbmFtZTogJ+WFqOW4guaOqOW5vycgfSwKICAgICAgLy8gICAgIHsgbmFtZTogJ+WkruWqkuaKpemBkycgfSwKICAgICAgLy8gICAgIHsgbmFtZTogJ+a7oeaEj+W6picgfSwKICAgICAgLy8gXSwKICAgICAgdGltZXI6IG51bGwsCiAgICAgIGtpbmRJbmRleDogMCwKICAgICAgbWFwRGF0YUtpZGU6IFtdLAogICAgICAvLyDlnLDlm77lkITmjIfmoIfmlbDmja4KICAgICAgbWFwRGF0YUFsbDogW10sCiAgICAgIC8vIOWcsOWbvuWQhOaMh+agh+e7vOWQiOaVsOaNrgogICAgICBlaWdodEluZGV4OiBbewogICAgICAgIG5hbWU6ICfmlbDlrZfph43luoYnLAogICAgICAgIG51bWJlcjogMCwKICAgICAgICB1bml0OiAnJScsCiAgICAgICAgY29tcDogJ21hcFRhcmdldF85JywKICAgICAgICBpbWd1cmw6ICd6ZF8wOS5wbmcnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5Zu95LyB5pS56Z2pJywKICAgICAgICBudW1iZXI6IDAsCiAgICAgICAgdW5pdDogJ+WIhicsCiAgICAgICAgY29tcDogJ21hcFRhcmdldF8xMCcsCiAgICAgICAgaW1ndXJsOiAnemRfMTAucG5nJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+S6qeWdh+iuuuiLsembhCcsCiAgICAgICAgbnVtYmVyOiAwLAogICAgICAgIHVuaXQ6ICfliIYnLAogICAgICAgIGNvbXA6ICdtYXBUYXJnZXRfMTEnLAogICAgICAgIGltZ3VybDogJ3pkXzExLnBuZycKICAgICAgfSwgewogICAgICAgIG5hbWU6ICfkvIHkuJrkuIrluIInLAogICAgICAgIG51bWJlcjogMCwKICAgICAgICB1bml0OiAn5YiGJywKICAgICAgICBjb21wOiAnbWFwVGFyZ2V0XzEyJywKICAgICAgICBpbWd1cmw6ICd6ZF8xMi5wbmcnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5L+h55So6YeN5bqGJywKICAgICAgICBudW1iZXI6IDAsCiAgICAgICAgdW5pdDogJ+WIhicsCiAgICAgICAgY29tcDogJ21hcFRhcmdldF8xMycsCiAgICAgICAgaW1ndXJsOiAnemRfMTMucG5nJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+WbveWutuivleeCuScsCiAgICAgICAgbnVtYmVyOiAwLAogICAgICAgIHVuaXQ6ICfkuKonLAogICAgICAgIGNvbXA6ICdtYXBUYXJnZXRfMScsCiAgICAgICAgaW1ndXJsOiAnemRfMDEucG5nJwogICAgICB9LAogICAgICAvLyB7CiAgICAgIC8vICAgICBuYW1lOiAn5biC57qn6K+V54K5JywKICAgICAgLy8gICAgIG51bWJlcjogMCwKICAgICAgLy8gICAgIHVuaXQ6ICfkuKonLAogICAgICAvLyAgICAgY29tcDogJ21hcFRhcmdldF8yJywKICAgICAgLy8gICAgIGltZ3VybDogJ3pkXzAyLnBuZycKICAgICAgLy8gfSwKICAgICAgewogICAgICAgIG5hbWU6ICfpqozmlLbnjocnLAogICAgICAgIG51bWJlcjogMCwKICAgICAgICB1bml0OiAnJScsCiAgICAgICAgY29tcDogJ21hcFRhcmdldF8zJywKICAgICAgICBpbWd1cmw6ICd6ZF8wMy5wbmcnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5paw5aKe6K+V54K5JywKICAgICAgICBudW1iZXI6IDAsCiAgICAgICAgdW5pdDogJ+S4qicsCiAgICAgICAgY29tcDogJ21hcFRhcmdldF80JywKICAgICAgICBpbWd1cmw6ICd6ZF8wNC5wbmcnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5YWo5Zu96IKv5a6aJywKICAgICAgICBudW1iZXI6IDAsCiAgICAgICAgdW5pdDogJ+asoScsCiAgICAgICAgY29tcDogJ21hcFRhcmdldF81JywKICAgICAgICBpbWd1cmw6ICd6ZF8wNS5wbmcnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5YWo5biC5o6o5bm/JywKICAgICAgICBudW1iZXI6IDAsCiAgICAgICAgdW5pdDogJ+asoScsCiAgICAgICAgY29tcDogJ21hcFRhcmdldF82JywKICAgICAgICBpbWd1cmw6ICd6ZF8wNi5wbmcnCiAgICAgIH0sCiAgICAgIC8vIHsKICAgICAgLy8gICAgIG5hbWU6ICflpK7lqpLmiqXpgZMnLAogICAgICAvLyAgICAgbnVtYmVyOiAwLAogICAgICAvLyAgICAgdW5pdDogJ+asoScsCiAgICAgIC8vICAgICBjb21wOiAnbWFwVGFyZ2V0XzcnLAogICAgICAvLyAgICAgaW1ndXJsOiAnemRfMDcucG5nJwogICAgICAvLyB9LAogICAgICB7CiAgICAgICAgbmFtZTogJ+a7oeaEj+W6picsCiAgICAgICAgbnVtYmVyOiAwLAogICAgICAgIHVuaXQ6ICfliIYnLAogICAgICAgIGNvbXA6ICdtYXBUYXJnZXRfOCcsCiAgICAgICAgaW1ndXJsOiAnemRfMDgucG5nJwogICAgICB9XSwKICAgICAgbG9hZGluZ0NvbG9yOiAncmdiYSg2LCA0NiwgMTA2LCAwLjAxKScsCiAgICAgIGxvYWRPYmo6IHsKICAgICAgICBzY3JvbGxMaXN0RGF0YTE6IGZhbHNlLAogICAgICAgIHNjcm9sbExpc3REYXRhMjogZmFsc2UsCiAgICAgICAgYnJhbmRMaXN0OiBmYWxzZSwKICAgICAgICBwaWxvdFJlZm9ybTogZmFsc2UsCiAgICAgICAgc2Nyb2xsQm9yYWREYXRhOiBmYWxzZSwKICAgICAgICBzY3JvbGxMaXN0RGF0YUJvdHRvbTogZmFsc2UsCiAgICAgICAgbG9hZGluZ01hcDogZmFsc2UKICAgICAgfSwKICAgICAgZ2diYl9zc2x5OiBbXSwKICAgICAgc2hvd1dvcmtQbGF0OiBmYWxzZSwKICAgICAgd29ya1BsYXRNZW51OiBbXSwKICAgICAgY3VycmVudFRhYkNvbXBvbmVudDogJycsCiAgICAgIHRhYmxlT3B0aW9uczogbnVsbCwKICAgICAgZGlhbG9nT3B0aW9uOiB7CiAgICAgICAgZGlhbG9nVGl0bGU6ICcnLAogICAgICAgIHdpZHRoOiAnNTAlJwogICAgICB9LAogICAgICBzaG93RWFzeTogZmFsc2UsCiAgICAgIG1hcERpYWxvZ1Nob3c6IGZhbHNlLAogICAgICBtYXBEaWFsb2dUb3A6IDAsCiAgICAgIG1hcERpYWxvZ2xlZnQ6IDAsCiAgICAgIC8vIOWcsOWbvuWIhuexu+minOiJsuWAvAogICAgICB0eXBlQ29sb3IxOiAnIzM5OEM4RicsCiAgICAgIC8vIOS8mAogICAgICB0eXBlQ29sb3IyOiAnIzE5NzBjMScsCiAgICAgIC8vIOiJrwogICAgICB0eXBlQ29sb3IzOiAnI0IwODI1QycsCiAgICAgIC8vIOS4gOiIrAogICAgICAvLyDkuLvln47kuZ3ljLrljLrln5/nvJbnoIEKICAgICAgbWFpbjlDb2RlOiBbJzUwMDEwMzAwMDAwMCcsICc1MDAxMTIwMDAwMDAnLCAnNTAwMTA4MDAwMDAwJywgJzUwMDEwNjAwMDAwMCcsICc1MDAxMDQwMDAwMDAnLCAnNTAwMTA3MDAwMDAwJywgJzUwMDEwNTAwMDAwMCcsICc1MDAxMTMwMDAwMDAnLCAnNTAwMTA5MDAwMDAwJ10sCiAgICAgIGN1cnJlbnRNZW51OiB7CiAgICAgICAgbmFtZTogJycKICAgICAgfSwKICAgICAgY3VycmVudEtleTogJ0Rpc3RyaWN0UmVmb3JtVmlldycsCiAgICAgIG1lbnVEYXRhOiBbXSwKICAgICAgYWN0aXZlQnRuOiAxLAogICAgICBhY3RpdmVCdG5LZXk6ICdjb21wb3NpdGUnLAogICAgICBteUNoYXJ0Q1E6IG51bGwsCiAgICAgIG15Q2hhcnRNYWluOiBudWxsLAogICAgICBvcHRpb25DUTogbnVsbCwKICAgICAgb3B0aW9uTWFpbjogbnVsbCwKICAgICAgLy8g5Y2V6aG55oyH5pWw5o6S6KGM5qacCiAgICAgIHNpbmdsZWhlYWRlcjogW3sKICAgICAgICBuYW1lOiAn5oyH5pWwJywKICAgICAgICB3aWR0aDogJzMzLjMzJScKICAgICAgfSwgewogICAgICAgIG5hbWU6ICflhaXmppzljLrljr8nLAogICAgICAgIHdpZHRoOiAnMzMuMzMlJwogICAgICB9LAogICAgICAvLyB7CiAgICAgIC8vICAgICBuYW1lOiAn5b6X5YiGJywKICAgICAgLy8gICAgIHdpZHRoOiAnMjUlJywKICAgICAgLy8gfSwKICAgICAgLy8gewogICAgICAvLyAgICAgbmFtZTogJ+WFqOW4guaOkuS9jScsICAvL+aUvuWcqOWMuuWOv+WQjeWtl+WJjemdouWxleekugogICAgICAvLyAgICAgd2lkdGg6ICcxNiUnLAogICAgICAvLyB9LAogICAgICB7CiAgICAgICAgbmFtZTogJ+WFpeamnOW9ouW8jycsCiAgICAgICAgLy8g5pi+56S6IOidieiBlOWGoOWGmyAg5paw6L+b5Yag5YabCiAgICAgICAgd2lkdGg6ICczMy4zMyUnCiAgICAgIH1dLAogICAgICAvLyDmjIfmlbDmjpLooYzmppwKICAgICAgc2Nyb2xsaGVhZGVyMTogW3sKICAgICAgICBuYW1lOiAn5Yy65Y6/JywKICAgICAgICB3aWR0aDogJzI4JScKICAgICAgfSwgewogICAgICAgIG5hbWU6ICflvpfliIYnLAogICAgICAgIHdpZHRoOiAnMTglJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+WMuuWfn+aOkuS9jScsCiAgICAgICAgd2lkdGg6ICcxOCUnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5YWo5biC5o6S5L2NJywKICAgICAgICB3aWR0aDogJzE4JScKICAgICAgfSwgewogICAgICAgIG5hbWU6ICfljLrln5/lj5jljJYnLAogICAgICAgIHdpZHRoOiAnMTglJwogICAgICB9XSwKICAgICAgc2Nyb2xsTGlzdERhdGExOiBbXSwKICAgICAgLy8g5LiA5Zyw5Yib5pawCiAgICAgIHNjcm9sbGhlYWRlcjI6IFt7CiAgICAgICAgbmFtZTogJ+WMuuWOvycsCiAgICAgICAgd2lkdGg6ICcyMCUnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAnQScsCiAgICAgICAgd2lkdGg6ICcxMiUnLAogICAgICAgIHR5cGU6ICdsZXZlbCcKICAgICAgfSwgewogICAgICAgIG5hbWU6ICdCJywKICAgICAgICB3aWR0aDogJzEyJScsCiAgICAgICAgdHlwZTogJ2xldmVsJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ0MnLAogICAgICAgIHdpZHRoOiAnMTIlJywKICAgICAgICB0eXBlOiAnbGV2ZWwnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAnRCcsCiAgICAgICAgd2lkdGg6ICcxMiUnLAogICAgICAgIHR5cGU6ICdsZXZlbCcKICAgICAgfSwKICAgICAgLy8gewogICAgICAvLyAgICAgbmFtZTogJ0UnLAogICAgICAvLyAgICAgd2lkdGg6ICcxMiUnLAogICAgICAvLyAgICAgdHlwZTogJ2xldmVsJwogICAgICAvLyB9LAogICAgICB7CiAgICAgICAgbmFtZTogJ+W+l+WIhicsCiAgICAgICAgd2lkdGg6ICcxMCUnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5o6S5ZCNJywKICAgICAgICB3aWR0aDogJzEwJScKICAgICAgfSwgewogICAgICAgIG5hbWU6ICfmgLvmoaPkvY0nLAogICAgICAgIHdpZHRoOiAnMTUlJwogICAgICB9XSwKICAgICAgc2Nyb2xsTGlzdERhdGEyOiBbXSwKICAgICAgLy8g5pS56Z2p5ZOB54mMCiAgICAgIHNjcm9sbGhlYWRlcjM6IFt7CiAgICAgICAgbmFtZTogJ+WMuuWOvycsCiAgICAgICAgd2lkdGg6ICcyMCUnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5YWo5Zu96IKv5a6aJywKICAgICAgICB3aWR0aDogJzE2JScKICAgICAgICAvLyB0eXBlOiAnbCcsCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5YWo5biC5o6o5bm/JywKICAgICAgICB3aWR0aDogJzE2JScKICAgICAgICAvLyB0eXBlOiAnbCcsCiAgICAgIH0sCiAgICAgIC8vIHsKICAgICAgLy8gICAgIG5hbWU6ICflpK7lqpLmiqXpgZMnLAogICAgICAvLyAgICAgd2lkdGg6ICcxNiUnLAogICAgICAvLyAgICAgLy8gdHlwZTogJ2wnLAogICAgICAvLyB9LAogICAgICB7CiAgICAgICAgbmFtZTogJ+aOkuWQjScsCiAgICAgICAgd2lkdGg6ICcxNiUnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5Y+Y5YyWJywKICAgICAgICB3aWR0aDogJzE2JScKICAgICAgfV0sCiAgICAgIHNjcm9sbExpc3REYXRhMzogW10sCiAgICAgIC8vIOWcsOWbvua7muWKqOaVsOaNrgogICAgICBzY3JvbGxCb3JhZERhdGE6IFsKICAgICAgICAvLyAgICAgewogICAgICAgIC8vICAgICAgICAgaWQ6IDEsCiAgICAgICAgLy8gICAgICAgICBuYW1lOiAn5rGf5rSl5Li+5YqeeHjnjrDlnLrkvJonLAogICAgICAgIC8vICAgICB9LAogICAgICAgIC8vICAgICB7CiAgICAgICAgLy8gICAgICAgICBpZDogMiwKICAgICAgICAvLyAgICAgICAgIG5hbWU6ICfmsZ/mtKXljLrpmYbmtbfmlrDpgJrpgZPmiZPpgJp4eOS4gOWFrOmHjCcsCiAgICAgICAgLy8gICAgIH0sCiAgICAgICAgLy8gICAgIHsKICAgICAgICAvLyAgICAgICAgIGlkOiAzLAogICAgICAgIC8vICAgICAgICAgbmFtZTogJ+aymeWdquWdneWMuumZhua1t+aWsOmAmumBk+aJk+mAmnh45LiA5YWs6YeMJywKICAgICAgICAvLyAgICAgfSwKICAgICAgICAvLyAgICAgewogICAgICAgIC8vICAgICAgICAgaWQ6IDQsCiAgICAgICAgLy8gICAgICAgICBuYW1lOiAn5YyX56Ka5Yy66ZmG5rW35paw6YCa6YGT5omT6YCaeHjkuIDlhazph4wnLAogICAgICAgIC8vICAgICB9LAogICAgICAgIC8vICAgICB7CiAgICAgICAgLy8gICAgICAgICBpZDogNSwKICAgICAgICAvLyAgICAgICAgIG5hbWU6ICfljZflsrjljLrpmYbmtbfmlrDpgJrpgZPmiZPpgJp4eOS4gOWFrOmHjCcsCiAgICAgICAgLy8gICAgIH0sCiAgICAgICAgLy8gICAgIHsKICAgICAgICAvLyAgICAgICAgIGlkOiA2LAogICAgICAgIC8vICAgICAgICAgbmFtZTogJ+axn+a0peWMuumZhua1t+aWsOmAmumBk+aJk+mAmnh45LiA5YWs6YeMJywKICAgICAgICAvLyAgICAgfSwKICAgICAgICAvLyAgICAgewogICAgICAgIC8vICAgICAgICAgaWQ6IDcsCiAgICAgICAgLy8gICAgICAgICBuYW1lOiAn5YyX56Ka5Yy66ZmG5rW35paw6YCa6YGT5omT6YCaeHjkuIDlhazph4wnLAogICAgICAgIC8vICAgICB9LAogICAgICBdLAogICAgICAvLyDmjIfmlbDmjpLooYzmppwKICAgICAgc2Nyb2xsaGVhZGVyQm90dG9tOiBbewogICAgICAgIG5hbWU6ICfljLrljr8nLAogICAgICAgIHdpZHRoOiAnMjAlJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+aPkOWHuumcgOaxgicsCiAgICAgICAgd2lkdGg6ICcxOCUnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn6L2s5YyW5Li65riF5Y2VJywKICAgICAgICB3aWR0aDogJzI0JScKICAgICAgfSwgewogICAgICAgIG5hbWU6ICfotKjmlYjmjIfmlbAnLAogICAgICAgIHdpZHRoOiAnMTglJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+aOkuWQjScsCiAgICAgICAgd2lkdGg6ICcyMCUnCiAgICAgIH1dLAogICAgICBzY3JvbGxMaXN0RGF0YUJvdHRvbTogW10sCiAgICAgIHJlZm9ybUJyYW5kRGF0YTogW3sKICAgICAgICB0aW1lOiAnMeaciCcsCiAgICAgICAgdmFsdWU6IDQsCiAgICAgICAgY291bnQ6IDEKICAgICAgfSwgewogICAgICAgIHRpbWU6ICcy5pyIJywKICAgICAgICB2YWx1ZTogNSwKICAgICAgICBjb3VudDogMgogICAgICB9LCB7CiAgICAgICAgdGltZTogJzPmnIgnLAogICAgICAgIHZhbHVlOiAyLAogICAgICAgIGNvdW50OiA0CiAgICAgIH0sIHsKICAgICAgICB0aW1lOiAnNOaciCcsCiAgICAgICAgdmFsdWU6IDEsCiAgICAgICAgY291bnQ6IDMKICAgICAgfSwgewogICAgICAgIHRpbWU6ICc15pyIJywKICAgICAgICB2YWx1ZTogMiwKICAgICAgICBjb3VudDogMQogICAgICB9LCB7CiAgICAgICAgdGltZTogJzbmnIgnLAogICAgICAgIHZhbHVlOiA0LAogICAgICAgIGNvdW50OiA0CiAgICAgIH1dLAogICAgICByZWZvcm1CcmFuZE9wdGlvbjogbnVsbCwKICAgICAgcmVmb3JtQnJhbmRDaGFydDogbnVsbCwKICAgICAgcmVmb3JtRGF0YTogbnVsbCwKICAgICAgLy8g6Zu36L6+IOaAu+S5puiusOaMh+ekugogICAgICByYXlDaGFydDogbnVsbCwKICAgICAgcmF5Q2hhcnRPcHRpb246IG51bGwsCiAgICAgIC8vIOWvueaOpeaXtiBtYXjorr7nva7kuLrlgLznmoQxLjLlgI0KICAgICAgcmF5Q2hhcnREYXRhOiBbewogICAgICAgIG5hbWU6ICfnu4/mtY7lkoznpL7kvJrmsJHnlJ8nLAogICAgICAgIHZhbHVlOiA2MCwKICAgICAgICB0eXBlOiAn5Lmg6L+R5bmz5oC75Lmm6K6w6YeN6KaB5oyH56S65om556S644CB6YeN6KaB6K6y6K+d57K+56WeJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+e7j+a1juWSjOekvuS8muawkeeUnycsCiAgICAgICAgdmFsdWU6IDcwLAogICAgICAgIHR5cGU6ICfnvqTkvJfkvIHkuJrln7rlsYLmiYDnm7wnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn57uP5rWO5ZKM56S+5Lya5rCR55SfJywKICAgICAgICB2YWx1ZTogODAsCiAgICAgICAgdHlwZTogJ+WFtuS7luecgeW4guWFiOi/m+e7j+mqjCcKICAgICAgfSwgewogICAgICAgIG5hbWU6ICfmlofljJYnLAogICAgICAgIHZhbHVlOiA4MCwKICAgICAgICB0eXBlOiAn5Lmg6L+R5bmz5oC75Lmm6K6w6YeN6KaB5oyH56S65om556S644CB6YeN6KaB6K6y6K+d57K+56WeJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+aWh+WMlicsCiAgICAgICAgdmFsdWU6IDcwLAogICAgICAgIHR5cGU6ICfnvqTkvJfkvIHkuJrln7rlsYLmiYDnm7wnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5paH5YyWJywKICAgICAgICB2YWx1ZTogNjAsCiAgICAgICAgdHlwZTogJ+WFtuS7luecgeW4guWFiOi/m+e7j+mqjCcKICAgICAgfSwgewogICAgICAgIG5hbWU6ICflubPlronms5XmsrsnLAogICAgICAgIHZhbHVlOiA0MCwKICAgICAgICB0eXBlOiAn5Lmg6L+R5bmz5oC75Lmm6K6w6YeN6KaB5oyH56S65om556S644CB6YeN6KaB6K6y6K+d57K+56WeJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+W5s+WuieazleayuycsCiAgICAgICAgdmFsdWU6IDUwLAogICAgICAgIHR5cGU6ICfnvqTkvJfkvIHkuJrln7rlsYLmiYDnm7wnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5bmz5a6J5rOV5rK7JywKICAgICAgICB2YWx1ZTogMjAsCiAgICAgICAgdHlwZTogJ+WFtuS7luecgeW4guWFiOi/m+e7j+mqjCcKICAgICAgfSwgewogICAgICAgIG5hbWU6ICfmsJHkuLvms5XliLYnLAogICAgICAgIHZhbHVlOiA3MCwKICAgICAgICB0eXBlOiAn5Lmg6L+R5bmz5oC75Lmm6K6w6YeN6KaB5oyH56S65om556S644CB6YeN6KaB6K6y6K+d57K+56WeJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+awkeS4u+azleWIticsCiAgICAgICAgdmFsdWU6IDQwLAogICAgICAgIHR5cGU6ICfnvqTkvJfkvIHkuJrln7rlsYLmiYDnm7wnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5rCR5Li75rOV5Yi2JywKICAgICAgICB2YWx1ZTogMTAsCiAgICAgICAgdHlwZTogJ+WFtuS7luecgeW4guWFiOi/m+e7j+mqjCcKICAgICAgfSwgewogICAgICAgIG5hbWU6ICflhZrlu7rnu5/pooYnLAogICAgICAgIHZhbHVlOiA2MCwKICAgICAgICB0eXBlOiAn5Lmg6L+R5bmz5oC75Lmm6K6w6YeN6KaB5oyH56S65om556S644CB6YeN6KaB6K6y6K+d57K+56WeJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+WFmuW7uue7n+mihicsCiAgICAgICAgdmFsdWU6IDUwLAogICAgICAgIHR5cGU6ICfnvqTkvJfkvIHkuJrln7rlsYLmiYDnm7wnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5YWa5bu657uf6aKGJywKICAgICAgICB2YWx1ZTogMzAsCiAgICAgICAgdHlwZTogJ+WFtuS7luecgeW4guWFiOi/m+e7j+mqjCcKICAgICAgfV0sCiAgICAgIC8vIOmbt+i+viDmiYDlsZ7poobln58KICAgICAgcmF5Q2hhcnQyOiBudWxsLAogICAgICByYXlDaGFydE9wdGlvbjI6IG51bGwsCiAgICAgIC8vIOWvueaOpeaXtiBtYXjorr7nva7kuLrlgLznmoQxLjLlgI0KICAgICAgcmF5Q2hhcnREYXRhMjogW3sKICAgICAgICBuYW1lOiAn57uP5rWO5ZKM56S+5Lya5rCR55SfJywKICAgICAgICB2YWx1ZTogMjAsCiAgICAgICAgdHlwZTogJ+WbveWutue6pycKICAgICAgfSwgewogICAgICAgIG5hbWU6ICfnu4/mtY7lkoznpL7kvJrmsJHnlJ8nLAogICAgICAgIHZhbHVlOiAxMjAsCiAgICAgICAgdHlwZTogJ+W4gue6pycKICAgICAgfSwgewogICAgICAgIG5hbWU6ICfmlofljJYnLAogICAgICAgIHZhbHVlOiAyMCwKICAgICAgICB0eXBlOiAn5Zu95a6257qnJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+aWh+WMlicsCiAgICAgICAgdmFsdWU6IDgwLAogICAgICAgIHR5cGU6ICfluILnuqcnCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAn5bmz5a6J5rOV5rK7JywKICAgICAgICB2YWx1ZTogMTgsCiAgICAgICAgdHlwZTogJ+WbveWutue6pycKICAgICAgfSwgewogICAgICAgIG5hbWU6ICflubPlronms5XmsrsnLAogICAgICAgIHZhbHVlOiA3OCwKICAgICAgICB0eXBlOiAn5biC57qnJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+awkeS4u+azleWIticsCiAgICAgICAgdmFsdWU6IDUsCiAgICAgICAgdHlwZTogJ+WbveWutue6pycKICAgICAgfSwgewogICAgICAgIG5hbWU6ICfmsJHkuLvms5XliLYnLAogICAgICAgIHZhbHVlOiAxMTUsCiAgICAgICAgdHlwZTogJ+W4gue6pycKICAgICAgfSwgewogICAgICAgIG5hbWU6ICflhZrlu7rnu5/pooYnLAogICAgICAgIHZhbHVlOiAxMCwKICAgICAgICB0eXBlOiAn5Zu95a6257qnJwogICAgICB9LCB7CiAgICAgICAgbmFtZTogJ+WFmuW7uue7n+mihicsCiAgICAgICAgdmFsdWU6IDcwLAogICAgICAgIHR5cGU6ICfluILnuqcnCiAgICAgIH1dLAogICAgICAvLyDpg6jnvbLml7bpl7QKICAgICAgZGVwbG95VGltZUNoYXJ0OiBudWxsLAogICAgICBkZXBsb3lUaW1lT3B0aW9uOiBudWxsLAogICAgICBkZXBsb3lUaW1lRGF0YTogW10sCiAgICAgIC8vIOebvOacmwogICAgICBob3BlQ2hhcnQ6IG51bGwsCiAgICAgIGhvcGVPcHRpb246IG51bGwsCiAgICAgIGhvcGVEYXRhOiBbXSwKICAgICAgLy8g6ZyA5rGC5p2l5rqQCiAgICAgIHF1YXJ0ZXJEYXRhOiBbewogICAgICAgIHZhbHVlOiAxLAogICAgICAgIG5hbWU6ICfkuIDlraPluqYnCiAgICAgIH0sIHsKICAgICAgICB2YWx1ZTogMiwKICAgICAgICBuYW1lOiAn5LqM5a2j5bqmJwogICAgICB9LCB7CiAgICAgICAgdmFsdWU6IDMsCiAgICAgICAgbmFtZTogJ+S4ieWto+W6picKICAgICAgfSwgewogICAgICAgIHZhbHVlOiA0LAogICAgICAgIG5hbWU6ICflm5vlraPluqYnCiAgICAgIH1dLAogICAgICBnZ2JiX2x5cWQ6IFtdLAogICAgICBoZWF0QmFyQ2hhcnQ6IG51bGwsCiAgICAgIGhlYXRCYXJPcHRpb246IG51bGwsCiAgICAgIGxlZ2VuZEJvdHRvbTogW10sCiAgICAgIGxlZ2VuZFRvcDogW10sCiAgICAgIGhlYXRCYXJEYXRhOiBbXSwKICAgICAgLy/lk4HniYzmppxjaGFydOaVsOaNrgogICAgICBicmFuZENoYXJ0RGF0YTE6IFtdLAogICAgICBicmFuZENoYXJ0RGF0YTI6IFtdLAogICAgICBicmFuZENoYXJ0RGF0YTM6IFtdLAogICAgICB4QXhpc0RhdGE6IFtdLAogICAgICAvL+aUuemdqeivleeCueaIkOaenAogICAgICAvLyDlvaLmiJDliLbluqbmiJDmnpwKICAgICAgYWNoaWV2ZW1lbnQxOiB7CiAgICAgICAgdG90YWxBY2hpZXZlbWVudDogMCwKICAgICAgICBnYXBRQWNoaWV2ZW1lbnQ6IDAKICAgICAgfSwKICAgICAgLy8g5pCt5bu65bel5L2c5bmz5Y+wCiAgICAgIGFjaGlldmVtZW50MjogewogICAgICAgIHRvdGFsQWNoaWV2ZW1lbnQ6IDAsCiAgICAgICAgZ2FwUUFjaGlldmVtZW50OiAwCiAgICAgIH0sCiAgICAgIC8vIOS4iue6v+W6lOeUqOWcuuaZrwogICAgICBhY2hpZXZlbWVudDM6IHsKICAgICAgICB0b3RhbEFjaGlldmVtZW50OiAwLAogICAgICAgIGdhcFFBY2hpZXZlbWVudDogMAogICAgICB9LAogICAgICAvLyDpg6jnvbLml7bpl7QKICAgICAgZGVwbG95bWVudFRpbWVEYXRhOiB7fSwKICAgICAgZGVwbG95bWVudFRpbWVZZWFyOiBbXSwKICAgICAgZGVwbG95bWVudFRpbWVEYXRhMTogW10sCiAgICAgIGRlcGxveW1lbnRUaW1lRGF0YTI6IFtdLAogICAgICAvLyDmjIfmlbAg5Y2V6aG5CiAgICAgIGluZGV4U2luZ2xlRGF0YTogW10sCiAgICAgIC8vIOWcsOWbvuaVsOaNrgogICAgICBjb21wb3NpdGVNYXBEYXRhOiBbXSwKICAgICAgd29ya2FibGVNYXBEYXRhOiBbXSwKICAgICAgYnJhbmRNYXBEYXRhOiBbXSwKICAgICAgc2F0aXNmYWN0aW9uTWFwRGF0YTogW10sCiAgICAgIHJpc2tNYXBEYXRhOiBbXSwKICAgICAgZnhjZDogW10sCiAgICAgIC8v5LqL5Lu26aOO6Zmp56iL5bqmCiAgICAgIHF1YXJ0ZXI6IG51bGwsCiAgICAgIHllYXI6IG51bGwsCiAgICAgIGN1cnJlbnRRdWFydGVyOiBudWxsLAogICAgICBsanhxR3JhZGU6ICcnLAogICAgICBneHFHcmFkZTogJycKICAgIH07CiAgfSwKICBjb21wb25lbnRzOiB7CiAgICAvLyBzd2lwZXIsCiAgICAvLyBzd2lwZXJTbGlkZQogIH0sCiAgY29tcHV0ZWQ6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbWFwU3RhdGUoewogICAgZnJvbnRNZW51czogZnVuY3Rpb24gZnJvbnRNZW51cyhzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUubWVudS5mcm9udE1lbnVzOwogICAgfQogIH0pKSwge30sIHsKICAgIG9wdGlvblNpbmdsZUhlaWdodFRpbWU6IGZ1bmN0aW9uIG9wdGlvblNpbmdsZUhlaWdodFRpbWUoKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgc3RlcDogMC4xCiAgICAgIH07CiAgICB9CiAgfSksCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIHRoaXMuZ2diYl9zc2x5ID0gdXRpbHMuZ2V0RGljdEl0ZW1zRnJvbUNhY2hlKCdnZ2JiX3NzbHknKTsKICAgIHRoaXMuZ2diYl9seXFkID0gdXRpbHMuZ2V0RGljdEl0ZW1zRnJvbUNhY2hlKCdnZ2JiX2x5cWQnKTsKICAgIHRoaXMuZnhjZCA9IHV0aWxzLmdldERpY3RJdGVtc0Zyb21DYWNoZSgnZnhjZCcpOwogIH0sCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHsKICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgdGhpcy5ub3dRdWFydGVyKCk7CiAgICB2YXIgc2VhcmNoRGF0ZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3NlYXJjaERhdGUnKTsKICAgIGlmIChzZWFyY2hEYXRlKSB7CiAgICAgIHNlYXJjaERhdGUgPSBKU09OLnBhcnNlKHNlYXJjaERhdGUpOwogICAgICB0aGlzLnllYXIgPSBzZWFyY2hEYXRlLnllYXI7CiAgICAgIHRoaXMucXVhcnRlciA9IHNlYXJjaERhdGUucXVhcnRlcjsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuY2hlY2tRdWFydGVyKCk7CiAgICB9CiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgIF90aGlzMi5pbml0TWFwTWFpbigpOwogICAgICBfdGhpczIuaW5pdE1hcENRKCk7CiAgICAgIF90aGlzMi5sb2FkRGF0YSgnaW5pdCcpOwogICAgICAvLyB0aGlzLiRyZWZzLm15U3dpcGVyLnN3aXBlci5hdXRvcGxheS5zdG9wKCkKICAgICAgLy8gY29uc29sZS5sb2coJ+W9k+WJjeeahHN3aXBlcuWunuS+iycsIHRoaXMuc3dpcGVyLCApCiAgICB9KTsKICAgIHRoaXMuJGJ1cy4kb24oJ2NoYW5nZURhdGUnLCBmdW5jdGlvbiAoc2VhcmNoRGF0ZSkgewogICAgICBfdGhpczIucXVhcnRlciA9IHNlYXJjaERhdGUucXVhcnRlcjsKICAgICAgX3RoaXMyLnllYXIgPSBzZWFyY2hEYXRlLnllYXI7CiAgICAgIGlmIChfdGhpczIuJHJvdXRlLnBhdGggPT0gJy9EaXN0cmljdFJlZm9ybVZpZXcnKSB7CiAgICAgICAgX3RoaXMyLmxvYWREYXRhKCk7CiAgICAgIH0KICAgIH0pOwogICAgLy8gdGhpcy5pbml0U3dpcGVyKCk7CiAgICB0aGlzLiRyb290LiRvbigncmVzaXplJywgZnVuY3Rpb24gKCkgewogICAgICBfdGhpczIucmVzaXplKDUwMCk7CiAgICB9KTsKICB9LAogIGJlZm9yZURlc3Rvcnk6IGZ1bmN0aW9uIGJlZm9yZURlc3RvcnkoKSB7CiAgICB2YXIgdG9vbHRpcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kYXRhLXRvb2x0aXAnKTsKICAgIEFycmF5LmZyb20odG9vbHRpcCkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICBpdGVtLnJlbW92ZSgpOwogICAgfSk7CiAgICBjbGVhckludGVydmFsKHRoaXMudGltZXIpOwogIH0sCiAgbWV0aG9kczogewogICAgaGFuZGxlSW5kZXhEZXRhaWw6IGZ1bmN0aW9uIGhhbmRsZUluZGV4RGV0YWlsKGl0ZW0pIHsKICAgICAgY29uc29sZS5sb2coaXRlbSk7CiAgICAgIGlmIChpdGVtLm51bWJlcikgewogICAgICAgIHRoaXMuaGFuZGxlRGV0YWlsKGl0ZW0uY29tcCk7CiAgICAgIH0KICAgIH0sCiAgICBpbml0U3dpcGVyOiBmdW5jdGlvbiBpbml0U3dpcGVyKCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICB0aGlzLnN3aXBlciA9IG5ldyBTd2lwZXIoJy5zd2lwZXItY29udGFpbmVyJywgewogICAgICAgIGxvb3A6IHRydWUsCiAgICAgICAgYXV0b3BsYXk6IHRydWUsCiAgICAgICAgZGlyZWN0aW9uOiAndmVydGljYWwnLAogICAgICAgIHNsaWRlc1BlclZpZXc6IDUsCiAgICAgICAgc3BhY2VCZXR3ZWVuOiAxMCwKICAgICAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiB0cnVlLAogICAgICAgIGNlbnRlcmVkU2xpZGVzOiB0cnVlLAogICAgICAgIGNlbnRlcmVkU2xpZGVzQm91bmRzOiB0cnVlLAogICAgICAgIGdyYWJDdXJzb3I6IHRydWUsCiAgICAgICAgYWxsb3dUb3VjaE1vdmU6IGZhbHNlLAogICAgICAgIG9uOiB7CiAgICAgICAgICBjbGljazogZnVuY3Rpb24gY2xpY2soKSB7CiAgICAgICAgICAgIC8vIGxldCBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShfdGhpcy5zd2lwZXIpKQogICAgICAgICAgICB2YXIgZG9tID0gX3RoaXMuc3dpcGVyLmNsaWNrZWRTbGlkZTsKICAgICAgICAgICAgdmFyIGluZGV4ID0gZG9tLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSAtIDA7CiAgICAgICAgICAgIF90aGlzLnNsaWRlQ2hhbmdlKGluZGV4KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIHNsaWRlQ2hhbmdlOiBmdW5jdGlvbiBzbGlkZUNoYW5nZShpbmRleCkgewogICAgICAvLyDmraTop4TliJnmoLnmja5pbmRleOWSjOWcsOWbvuWvueW6lGluZGV45pWw5o2u5b6X5p2l77yM5rKh5pyJ5YW35L2T6KeE5b6LCiAgICAgIC8vIGNvbnNvbGUubG9nKGluZGV4IDwgMTMpOwogICAgICAvLyBpZiAoaW5kZXggPCA3KSB7CiAgICAgIC8vICAgICB0aGlzLmtpbmRJbmRleCA9IGluZGV4ICsgMQogICAgICAvLyB9IGVsc2UgaWYgKGluZGV4IDwgMTMpIHsKICAgICAgLy8gICAgIHRoaXMua2luZEluZGV4ID0gaW5kZXggLSA2CiAgICAgIC8vIH0gZWxzZSB7CiAgICAgIC8vICAgICB0aGlzLmtpbmRJbmRleCA9IGluZGV4IC0gMTMKICAgICAgLy8gfQogICAgICAvLyBjb25zb2xlLmxvZyhpbmRleCwnaW5kZXgnKTsKICAgICAgdGhpcy5raW5kSW5kZXggPSBpbmRleDsKICAgICAgY29uc29sZS5sb2codGhpcy5raW5kSW5kZXgpOwogICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLm1hcEtleUFyclt0aGlzLmtpbmRJbmRleF0sIHRoaXMua2luZEluZGV4LCBpbmRleCkKICAgICAgdGhpcy5jaGFuZ2VNYXBUeXBlKCk7CiAgICAgIC8vIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcikKICAgICAgLy8gdGhpcy50aW1lciA9IHNldEludGVydmFsKCgpID0+IHsKICAgICAgLy8gICAgIHRoaXMuY2hhbmdlTWFwVHlwZSgpCiAgICAgIC8vIH0sIDUwMDApCiAgICB9LAogICAgaGFuZGxlRGV0YWlsOiBmdW5jdGlvbiBoYW5kbGVEZXRhaWwoY29tcCwgdHlwZSkgewogICAgICBpZiAoY29tcCA9PSAncmVmb3JtUGlsb3QnKSB7CiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goewogICAgICAgICAgcGF0aDogJy9EZXRhaWxDb21wb25lbnQnLAogICAgICAgICAgbmFtZTogJ0RldGFpbENvbXBvbmVudCcsCiAgICAgICAgICBxdWVyeTogewogICAgICAgICAgICBjb21wOiBjb21wLAogICAgICAgICAgICB0eXBlOiAnMScsCiAgICAgICAgICAgIG51bVR5cGU6ICduYXRpb25hbFByb2plY3QnCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAoY29tcCA9PSAncmVmb3JtTmV3c1NpbmdsZScpIHsKICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7CiAgICAgICAgICBwYXRoOiAnL0RldGFpbENvbXBvbmVudCcsCiAgICAgICAgICBuYW1lOiAnRGV0YWlsQ29tcG9uZW50JywKICAgICAgICAgIHF1ZXJ5OiB7CiAgICAgICAgICAgIGNvbXA6IGNvbXAsCiAgICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7CiAgICAgICAgICBwYXRoOiAnL0RldGFpbENvbXBvbmVudCcsCiAgICAgICAgICBuYW1lOiAnRGV0YWlsQ29tcG9uZW50JywKICAgICAgICAgIHF1ZXJ5OiB7CiAgICAgICAgICAgIGNvbXA6IGNvbXAsCiAgICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIGdldEZpbGVEYXRhOiBmdW5jdGlvbiBnZXRGaWxlRGF0YSh0eXBlKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICBpZiAodHlwZSA9PSAnc2F0aXNmYWN0aW9uJykgewogICAgICAgIHZhciBkYXRhID0gdGhpcy5xcy5zdHJpbmdpZnkoewogICAgICAgICAgeWVhcjogdGhpcy55ZWFyLAogICAgICAgICAgcXVhcnRlcjogdGhpcy5xdWFydGVyCiAgICAgICAgfSk7CiAgICAgICAgYXBpTGlzdC5zYXRpc2ZhY3Rpb25GaWxlKGRhdGEsIGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgIGlmIChyZXMuc2F0aXNmYWN0aW9uICYmIHJlcy5zYXRpc2ZhY3Rpb24uaWQpIHsKICAgICAgICAgICAgX3RoaXMzLm9wZW5TdWJEaWFsb2coJ3NhdGlzZmFjdGlvblJlcG9ydCcsIHsKICAgICAgICAgICAgICBmaWxlSWQ6IHJlcy5zYXRpc2ZhY3Rpb24uaWQKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfdGhpczMub3BlblN1YkRpYWxvZygnc2F0aXNmYWN0aW9uUmVwb3J0Jyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICBub3dRdWFydGVyOiBmdW5jdGlvbiBub3dRdWFydGVyKCkgewogICAgICB2YXIgbW9udGggPSBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxOwogICAgICBpZiAobW9udGggPD0gMykgewogICAgICAgIHRoaXMuY3VycmVudFF1YXJ0ZXIgPSAxOwogICAgICB9IGVsc2UgaWYgKG1vbnRoIDw9IDYpIHsKICAgICAgICB0aGlzLmN1cnJlbnRRdWFydGVyID0gMjsKICAgICAgfSBlbHNlIGlmIChtb250aCA8PSA5KSB7CiAgICAgICAgdGhpcy5jdXJyZW50UXVhcnRlciA9IDM7CiAgICAgIH0gZWxzZSBpZiAobW9udGggPD0gMTIpIHsKICAgICAgICB0aGlzLmN1cnJlbnRRdWFydGVyID0gNDsKICAgICAgfQogICAgfSwKICAgIGNoZWNrUXVhcnRlcjogZnVuY3Rpb24gY2hlY2tRdWFydGVyKCkgewogICAgICB0aGlzLnllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7CiAgICAgIHZhciBtb250aCA9IG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDE7CiAgICAgIGlmIChtb250aCA8PSAzKSB7CiAgICAgICAgdGhpcy5xdWFydGVyID0gMTsKICAgICAgfSBlbHNlIGlmIChtb250aCA8PSA2KSB7CiAgICAgICAgdGhpcy5xdWFydGVyID0gMjsKICAgICAgfSBlbHNlIGlmIChtb250aCA8PSA5KSB7CiAgICAgICAgdGhpcy5xdWFydGVyID0gMzsKICAgICAgfSBlbHNlIGlmIChtb250aCA8PSAxMikgewogICAgICAgIHRoaXMucXVhcnRlciA9IDQ7CiAgICAgIH0KICAgIH0sCiAgICBnb1RvU3ViOiBmdW5jdGlvbiBnb1RvU3ViKHR5cGUpIHsKICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgbGp4cTogewogICAgICAgICAgbmFtZTogJ+S4pOaxn+aWsOWMuicsCiAgICAgICAgICBjb2RlOiAnNTAwMTkxMDAwMDAwJwogICAgICAgIH0sCiAgICAgICAgZ3hxOiB7CiAgICAgICAgICBuYW1lOiAn6auY5paw5Yy6JywKICAgICAgICAgIGNvZGU6ICc1MDAxOTMwMDAwMDAnCiAgICAgICAgfQogICAgICB9OwogICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7CiAgICAgICAgcGF0aDogJy9EaXN0cmljdFJlZm9ybVN1YlZpZXcnLAogICAgICAgIHF1ZXJ5OiB7CiAgICAgICAgICBuYW1lOiBkYXRhW3R5cGVdLm5hbWUsCiAgICAgICAgICBjb2RlOiBkYXRhW3R5cGVdLmNvZGUKICAgICAgICB9CiAgICAgIH0pOwogICAgICB2YXIgdG9vbHRpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2RhdGEtdG9vbHRpcCcpOwogICAgICBBcnJheS5mcm9tKHRvb2x0aXApLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICBpdGVtLnJlbW92ZSgpOwogICAgICB9KTsKICAgIH0sCiAgICBjb252ZXJ0RGF0YTogZnVuY3Rpb24gY29udmVydERhdGEoZGF0YSwgbWFwRGF0YSwga2V5LCBzaG93VGl0bGUpIHsKICAgICAgLy8gY29uc29sZS5sb2coa2V5LCAia2V5IikKICAgICAgLy8gWycjMjBBMzY3JywgJyMzODc3QjInLCAnI0UzQzQyOCcsICcjRTQ5MzE3JywgJyNCMDQzMzInXQogICAgICB2YXIgcmVzID0gW107CiAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkgewogICAgICAgIHZhciBvYmogPSBkYXRhW2ldLnByb3BlcnRpZXM7CiAgICAgICAgdmFyIGNvbG9yID0gJyMwODFjNDcnOwogICAgICAgIHZhciBmaW5kID0gbWFwRGF0YS5maW5kKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICByZXR1cm4gaXRlbS51bml0Q29kZSA9PSBvYmouY29kZTsKICAgICAgICB9KTsKICAgICAgICBpZiAoZmluZCkgewogICAgICAgICAgaWYgKGZpbmRba2V5XSA9PSAnQScpIHsKICAgICAgICAgICAgY29sb3IgPSAnIzIwQTM2Nyc7CiAgICAgICAgICB9IGVsc2UgaWYgKGZpbmRba2V5XSA9PSAnQicpIHsKICAgICAgICAgICAgY29sb3IgPSAnIzM4NzdCMic7CiAgICAgICAgICB9IGVsc2UgaWYgKGZpbmRba2V5XSA9PSAnQycpIHsKICAgICAgICAgICAgY29sb3IgPSAnI0UzQzQyOCc7CiAgICAgICAgICB9IGVsc2UgaWYgKGZpbmRba2V5XSA9PSAnRCcpIHsKICAgICAgICAgICAgY29sb3IgPSAnI0U0OTMxNyc7CiAgICAgICAgICB9IGVsc2UgaWYgKGZpbmRba2V5XSA9PSAnRScpIHsKICAgICAgICAgICAgY29sb3IgPSAnI0IwNDMzMic7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBzaG93ID0gdHJ1ZTsKICAgICAgICB2YXIgb2Zmc2V0ID0gWzAsIDBdOwogICAgICAgIGlmIChbJ+a4neS4reWMuicsICflpKfmuKHlj6PljLonLCAn5rGf5YyX5Yy6JywgJ+aymeWdquWdneWMuicsICfkuZ3pvpnlnaHljLonLCAn5Y2X5bK45Yy6JywgJ+WMl+eimuWMuicsICfmuJ3ljJfljLonLCAn5be05Y2X5Yy6JywgJ+S4pOaxn+aWsOWMuicsICfpq5jmlrDljLonXS5pbmNsdWRlcyhvYmoubmFtZSkpIHsKICAgICAgICAgIHNob3cgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKFsn5rKZ5Z2q5Z2d5Yy6J10uaW5jbHVkZXMob2JqLm5hbWUpKSB7CiAgICAgICAgICBvZmZzZXQgPSBbLTEwLCAwXTsKICAgICAgICB9CiAgICAgICAgaWYgKFsn5Lmd6b6Z5Z2h5Yy6J10uaW5jbHVkZXMob2JqLm5hbWUpKSB7CiAgICAgICAgICBvZmZzZXQgPSBbLTEwLCAtMTBdOwogICAgICAgIH0KICAgICAgICBpZiAoWyflpKfmuKHlj6PljLonXS5pbmNsdWRlcyhvYmoubmFtZSkpIHsKICAgICAgICAgIG9mZnNldCA9IFswLCA1XTsKICAgICAgICB9CiAgICAgICAgaWYgKFsn5rGf5YyX5Yy6J10uaW5jbHVkZXMob2JqLm5hbWUpKSB7CiAgICAgICAgICBvZmZzZXQgPSBbMTAsIDBdOwogICAgICAgIH0KICAgICAgICBpZiAoWyfljZflsrjljLonXS5pbmNsdWRlcyhvYmoubmFtZSkpIHsKICAgICAgICAgIG9mZnNldCA9IFsxMCwgNl07CiAgICAgICAgfQogICAgICAgIGlmIChbJ+e2puaxn+WMuiddLmluY2x1ZGVzKG9iai5uYW1lKSkgewogICAgICAgICAgb2Zmc2V0ID0gWzAsIDIwXTsKICAgICAgICB9CiAgICAgICAgaWYgKHNob3dUaXRsZSAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgIHNob3cgPSBzaG93VGl0bGU7CiAgICAgICAgfQogICAgICAgIGlmIChvYmoubmFtZSA9PSAn5Lik5rGf5paw5Yy6JyB8fCBvYmoubmFtZSA9PSAn6auY5paw5Yy6JykgewogICAgICAgICAgc2hvdyA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXMucHVzaCh7CiAgICAgICAgICBuYW1lOiBvYmoubmFtZSwKICAgICAgICAgIHZhbHVlOiBmaW5kID8gZmluZFsndW5pdENvZGUnXSA6IDAsCiAgICAgICAgICBpdGVtU3R5bGU6IHsKICAgICAgICAgICAgY29sb3I6IGNvbG9yLAogICAgICAgICAgICBhcmVhQ29sb3I6IGNvbG9yLAogICAgICAgICAgICBsYWJlbDogewogICAgICAgICAgICAgIHNob3c6IHNob3cKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGxhYmVsOiB7CiAgICAgICAgICAgIG5vcm1hbDogewogICAgICAgICAgICAgIHNob3c6IHNob3csCiAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsCiAgICAgICAgICAgICAgLy/mmK/lkKblr7nmloflrZfov5vooYzlgY/np7vjgILpu5jorqTkuI3lgY/np7vjgILkvovlpoLvvJpbMzAsIDQwXSDooajnpLrmloflrZflnKjmqKrlkJHkuIrlgY/np7sgMzDvvIznurXlkJHkuIrlgY/np7sgNDDjgIIKICAgICAgICAgICAgICBwb3NpdGlvbjogJ2luc2lkZScsCiAgICAgICAgICAgICAgLy/moIfnrb7nmoTkvY3nva7jgIIvLyDnu53lr7nnmoTlg4/ntKDlgLxbMTAsIDEwXQogICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsCiAgICAgICAgICAgICAgZm9udFNpemU6IDEyCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBlbXBoYXNpczogewogICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICBfbG9vcCgpOwogICAgICB9CiAgICAgIHJldHVybiByZXM7CiAgICB9LAogICAgbG9hZERhdGE6IGZ1bmN0aW9uIGxvYWREYXRhKHR5cGUpIHsKICAgICAgLy8gdHlwZSA9PSBpbml0ICDliJ3lp4vljJbmn6Xor6IKICAgICAgLy8gdGhpcy5nZXRHaXNEYXRhKCkKICAgICAgdGhpcy5nZXRNYXBEYXRhKCk7CiAgICAgIHRoaXMubG9hZE5ld3MoKTsgLy8g5paw6Ze75Yqo5oCBCiAgICAgIHRoaXMuZ2V0VGFyZ2V0KCk7IC8vIOmHjeeCueWFs+azqAogICAgICB0aGlzLmdldEluZGV4KCk7IC8vIOWIm+WFiOS6ieS8mCAg4oiaCiAgICAgIC8vIHRoaXMuZ2V0QnJvYWQoKSAvLyDkuIDlnLDliJvmlrAg5YWo5biC5o6o5bm/IOKImgogICAgICB0aGlzLmdldEJyYW5kKHR5cGUpOyAvLyDlk4HniYzmppwg4oiaCiAgICAgIHRoaXMuZ2V0UGlsb3RSZWZvcm0odHlwZSk7IC8vIOaUuemdqeivleeCueKImgogICAgICAvLyB0aGlzLmdldERlbWFuZEhlYXRMaXN0KHR5cGUpLy8g6ZyA5rGC54Ot5Yqb5qacIOKImgogICAgfSwKICAgIGdldE1hcERhdGE6IGZ1bmN0aW9uIGdldE1hcERhdGEoKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICB0aGlzLmxvYWRPYmoubG9hZGluZ01hcCA9IHRydWU7CiAgICAgIHZhciBkYXRhID0gdGhpcy5xcy5zdHJpbmdpZnkoewogICAgICAgIHR5cGU6ICdjb21wb3NpdGUnLAogICAgICAgIHF1YXJ0ZXI6IHRoaXMucXVhcnRlciwKICAgICAgICB5ZWFyOiB0aGlzLnllYXIKICAgICAgfSk7CiAgICAgIGFwaUxpc3Quc3RhdGVtZW50RGV0YWlsKGRhdGEsIGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpczQubG9hZE9iai5sb2FkaW5nTWFwID0gZmFsc2U7CiAgICAgICAgdmFyIGRhdGEgPSByZXMgfHwgW107CiAgICAgICAgX3RoaXM0Lm1hcERhdGFLaWRlID0gZGF0YTsKICAgICAgICAvLyB0aGlzLm1hcERhdGFLaWRlLmZvckVhY2goaXRlbT0+ewogICAgICAgIC8vICAgICAvLyBpdGVtLm51bWJlckdyYWRlID0gJ0EnCiAgICAgICAgLy8gICAgIGl0ZW0uY291bnRyeUZpcm1HcmFkZSA9ICdFJwogICAgICAgIC8vICAgICBpdGVtLm11R3JhZGUgPSAnRScKICAgICAgICAvLyAgICAgaXRlbS5maXJtR3JhZGUgPSAnRScKICAgICAgICAvLyAgICAgaXRlbS5jcmVkaXRHcmFkZSA9ICdFJwogICAgICAgIC8vIH0pCgogICAgICAgIF90aGlzNC5wcmVNYXBEYXRhKCk7CiAgICAgIH0pOwogICAgfSwKICAgIGdldEFsbFNjcm9lOiBmdW5jdGlvbiBnZXRBbGxTY3JvZShkYXRhKSB7CiAgICAgIHZhciBzY3JvZSA9IHRoaXMuZGVmaW5lTGV2ZWxTY3JvZShkYXRhLm5hdGlvbmFsUHJvamVjdEdyYWRlKSArIHRoaXMuZGVmaW5lTGV2ZWxTY3JvZShkYXRhLmNpdHlQcm9qZWN0R3JhZGUpICsgdGhpcy5kZWZpbmVMZXZlbFNjcm9lKGRhdGEud29ya2FibGVQYXNzR3JhZGUpICsgdGhpcy5kZWZpbmVMZXZlbFNjcm9lKGRhdGEud29ya2FibGVBZGRHcmFkZSkgKyB0aGlzLmRlZmluZUxldmVsU2Nyb2UoZGF0YS5uYXRpb253aWRlR3JhZGUpICsgdGhpcy5kZWZpbmVMZXZlbFNjcm9lKGRhdGEuY2l0eUdyYWRlKSArIHRoaXMuZGVmaW5lTGV2ZWxTY3JvZShkYXRhLm1lZGlhR3JhZGUpICsgdGhpcy5kZWZpbmVMZXZlbFNjcm9lKGRhdGEuc2F0aXNmaWVkR3JhZGUpOwogICAgICByZXR1cm4gc2Nyb2U7CiAgICB9LAogICAgZGVmaW5lTGV2ZWxTY3JvZTogZnVuY3Rpb24gZGVmaW5lTGV2ZWxTY3JvZShncmFkZSkgewogICAgICBpZiAoZ3JhZGUgPT0gJ0EnKSB7CiAgICAgICAgcmV0dXJuIDM7CiAgICAgIH0gZWxzZSBpZiAoZ3JhZGUgPT0gJ0InKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICAgIH0gZWxzZSBpZiAoZ3JhZGUgPT0gJ0MnKSB7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0gZWxzZSBpZiAoZ3JhZGUgPT0gJ0QnKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9IGVsc2UgaWYgKGdyYWRlID09ICdFJykgewogICAgICAgIHJldHVybiAtMzsKICAgICAgfQogICAgfSwKICAgIGdldFRhcmdldDogZnVuY3Rpb24gZ2V0VGFyZ2V0KCkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgYXBpTGlzdC5nZXRUYXJnZXQoewogICAgICAgIHF1YXJ0ZXI6IHRoaXMucXVhcnRlciwKICAgICAgICB5ZWFyOiB0aGlzLnllYXIKICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgaWYgKHJlcy5zdGF0ZSkgewogICAgICAgICAgLy8gdGhpcy5laWdodEluZGV4WzBdLm51bWJlciA9IHJlcy52YWx1ZS5uYXRpb25hbFByb2plY3ROdW0KICAgICAgICAgIC8vIHRoaXMuZWlnaHRJbmRleFsxXS5udW1iZXIgPSByZXMudmFsdWUuY2l0eVByb2plY3ROdW0KICAgICAgICAgIC8vIHRoaXMuZWlnaHRJbmRleFsyXS5udW1iZXIgPSByZXMudmFsdWUucGFzc1JhdGUKICAgICAgICAgIC8vIHRoaXMuZWlnaHRJbmRleFszXS5udW1iZXIgPSByZXMudmFsdWUuYWRkTnVtCiAgICAgICAgICAvLyB0aGlzLmVpZ2h0SW5kZXhbNF0ubnVtYmVyID0gcmVzLnZhbHVlLm5hdGlvbndpZGVOdW0KICAgICAgICAgIC8vIHRoaXMuZWlnaHRJbmRleFs1XS5udW1iZXIgPSByZXMudmFsdWUuY2l0eU51bQogICAgICAgICAgLy8gdGhpcy5laWdodEluZGV4WzZdLm51bWJlciA9IHJlcy52YWx1ZS5tZWRpYU51bQogICAgICAgICAgLy8gdGhpcy5laWdodEluZGV4WzddLm51bWJlciA9IHJlcy52YWx1ZS5zYXRpc2ZpZWQKICAgICAgICAgIC8vIHRoaXMuZWlnaHRJbmRleFswXS5udW1iZXIgPSB0aGlzLnF1YXJ0ZXIgPT0gMiA/IDEwMCA6IDAKICAgICAgICAgIF90aGlzNS5laWdodEluZGV4WzBdLm51bWJlciA9IHJlcy52YWx1ZS5kaWdpdFJhdGU7CiAgICAgICAgICAvLyB0aGlzLmVpZ2h0SW5kZXhbMV0ubnVtYmVyID0gMTAwCiAgICAgICAgICAvLyB0aGlzLmVpZ2h0SW5kZXhbMl0ubnVtYmVyID0gMTAwCiAgICAgICAgICAvLyDkvIHkuJrkuIrluIIKICAgICAgICAgIC8vIHJlcy52YWx1ZS5saXN0ZWRDb21wYW5pZXNEaXZpZGUgfHwgMTAwCiAgICAgICAgICBfdGhpczUuZWlnaHRJbmRleFszXS5udW1iZXIgPSByZXMudmFsdWUubGlzdGVkQ29tcGFuaWVzRGl2aWRlIHx8IDA7CiAgICAgICAgICBfdGhpczUuZWlnaHRJbmRleFs0XS5udW1iZXIgPSByZXMudmFsdWUuY3JlZGl0UmF0ZSB8fCAwOwogICAgICAgICAgX3RoaXM1LmVpZ2h0SW5kZXhbNV0ubnVtYmVyID0gcmVzLnZhbHVlLm5hdGlvbmFsUHJvamVjdE51bTsKICAgICAgICAgIF90aGlzNS5laWdodEluZGV4WzZdLm51bWJlciA9IHJlcy52YWx1ZS5uYXRpb25hbFBhc3NSYXRlOwogICAgICAgICAgX3RoaXM1LmVpZ2h0SW5kZXhbN10ubnVtYmVyID0gcmVzLnZhbHVlLm5hdGlvbmFsQWRkTnVtOwogICAgICAgICAgX3RoaXM1LmVpZ2h0SW5kZXhbOF0ubnVtYmVyID0gcmVzLnZhbHVlLm5hdGlvbndpZGVOdW07CiAgICAgICAgICBfdGhpczUuZWlnaHRJbmRleFs5XS5udW1iZXIgPSByZXMudmFsdWUuY2l0eU51bTsKICAgICAgICAgIF90aGlzNS5laWdodEluZGV4WzEwXS5udW1iZXIgPSByZXMudmFsdWUuc2F0aXNmaWVkOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgZ2V0SW5kZXg6IGZ1bmN0aW9uIGdldEluZGV4KCkgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKICAgICAgdGhpcy5sb2FkT2JqLnNjcm9sbExpc3REYXRhMiA9IHRydWU7CiAgICAgIHZhciBkYXRhID0gdGhpcy5xcy5zdHJpbmdpZnkoewogICAgICAgIHF1YXJ0ZXI6IHRoaXMucXVhcnRlciwKICAgICAgICB5ZWFyOiB0aGlzLnllYXIKICAgICAgfSk7CiAgICAgIGFwaUxpc3QuZ2V0SW5kZXgoZGF0YSwgZnVuY3Rpb24gKHJlcykgewogICAgICAgIGlmIChyZXMgJiYgcmVzLnZhbHVlKSB7CiAgICAgICAgICBfdGhpczYuc2Nyb2xsTGlzdERhdGEyID0gcmVzLnZhbHVlOwogICAgICAgICAgX3RoaXM2Lm1hcERhdGFBbGwgPSByZXMudmFsdWUgfHwgW107CiAgICAgICAgICAvLyB0aGlzLnByZU1hcERhdGEoKQogICAgICAgIH0KICAgICAgICBfdGhpczYubG9hZE9iai5zY3JvbGxMaXN0RGF0YTIgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9LAogICAgLy8gZ2V0QnJvYWQoKSB7CiAgICAvLyAgICAgdGhpcy5sb2FkT2JqLnNjcm9sbExpc3REYXRhMiA9IHRydWUKICAgIC8vICAgICBsZXQgZGF0YSA9IHRoaXMucXMuc3RyaW5naWZ5KHsKICAgIC8vICAgICAgICAgdHlwZTogMSwKICAgIC8vICAgICAgICAgcXVhcnRlcjogdGhpcy5xdWFydGVyLAogICAgLy8gICAgICAgICB5ZWFyOiB0aGlzLnllYXIsCiAgICAvLyAgICAgfSkKICAgIC8vICAgICBhcGlMaXN0LmdldEJyb2FkKGRhdGEsIChyZXMpID0+IHsKICAgIC8vICAgICAgICAgaWYgKHJlcyAmJiByZXMudmFsdWUpIHsKICAgIC8vICAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGlzdERhdGEyID0gcmVzLnZhbHVlCiAgICAvLyAgICAgICAgIH0KICAgIC8vICAgICAgICAgdGhpcy5sb2FkT2JqLnNjcm9sbExpc3REYXRhMiA9IGZhbHNlCiAgICAvLyAgICAgfSkKICAgIC8vIH0sCiAgICBnZXRCcmFuZDogZnVuY3Rpb24gZ2V0QnJhbmQodHlwZSkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgdGhpcy5sb2FkT2JqLmJyYW5kTGlzdCA9IHRydWU7CiAgICAgIHRoaXMuYnJhbmRDaGFydERhdGExLmxlbmd0aCA9IDEyOwogICAgICB0aGlzLmJyYW5kQ2hhcnREYXRhMi5sZW5ndGggPSAxMjsKICAgICAgdGhpcy5icmFuZENoYXJ0RGF0YTMubGVuZ3RoID0gMTI7CiAgICAgIHZhciBkYXRhID0gdGhpcy5xcy5zdHJpbmdpZnkoewogICAgICAgIHF1YXJ0ZXI6IHRoaXMucXVhcnRlciwKICAgICAgICB5ZWFyOiB0aGlzLnllYXIKICAgICAgfSk7CiAgICAgIGFwaUxpc3QuZ2V0QnJhbmQoZGF0YSwgZnVuY3Rpb24gKHJlcykgewogICAgICAgIGlmIChyZXMgJiYgcmVzLnZhbHVlICYmIHJlcy52YWx1ZS5icmFuZCkgewogICAgICAgICAgX3RoaXM3LnNjcm9sbExpc3REYXRhMyA9IHJlcy52YWx1ZS5icmFuZDsKICAgICAgICB9CiAgICAgICAgaWYgKHJlcyAmJiByZXMudmFsdWUgJiYgcmVzLnZhbHVlLmNoYXJ0KSB7CiAgICAgICAgICB2YXIgY2hhcnREYXRhID0gcmVzLnZhbHVlLmNoYXJ0OwogICAgICAgICAgLy8g5p+l6K+i5b2T5bm0MS0xMuaciC0tLS0tLS0tCiAgICAgICAgICBjaGFydERhdGFbMV0uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkgewogICAgICAgICAgICBfdGhpczcuYnJhbmRDaGFydERhdGExW2ldID0gaXRlbS5lZmZlY3RDb3VudDsKICAgICAgICAgIH0pOwogICAgICAgICAgY2hhcnREYXRhWzJdLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHsKICAgICAgICAgICAgX3RoaXM3LmJyYW5kQ2hhcnREYXRhMltpXSA9IGl0ZW0uZWZmZWN0Q291bnQ7CiAgICAgICAgICB9KTsKICAgICAgICAgIGNoYXJ0RGF0YVszXS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpKSB7CiAgICAgICAgICAgIF90aGlzNy5icmFuZENoYXJ0RGF0YTNbaV0gPSBpdGVtLmVmZmVjdENvdW50OwogICAgICAgICAgfSk7CiAgICAgICAgICBfdGhpczcueEF4aXNEYXRhID0gW107CiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMjsgaSsrKSB7CiAgICAgICAgICAgIF90aGlzNy54QXhpc0RhdGEucHVzaChpICsgJ+aciCcpOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIOagueaNruW9k+WJjeaciOW+gOWJjeafpeivoi0tLS0tLS0tCiAgICAgICAgICAvLyBsZXQgeyBYRGF0YSwgYXJyMSwgYXJyMiwgYXJyMyB9ID0gdGhpcy5mb3JtYXRCcmFuZENoYXJ0RGF0YShjaGFydERhdGEpCiAgICAgICAgICAvLyB0aGlzLnhBeGlzRGF0YSA9IFhEYXRhCiAgICAgICAgICAvLyB0aGlzLmJyYW5kQ2hhcnREYXRhMSA9IGFycjEKICAgICAgICAgIC8vIHRoaXMuYnJhbmRDaGFydERhdGEyID0gYXJyMgogICAgICAgICAgLy8gdGhpcy5icmFuZENoYXJ0RGF0YTMgPSBhcnIzCiAgICAgICAgfQogICAgICAgIGlmICh0eXBlKSB7CiAgICAgICAgICBfdGhpczcuaW5pdFJlZm9ybUJyYW5kKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzNy5yZWZvcm1CcmFuZE9wdGlvbi5zZXJpZXNbMF0uZGF0YSA9IF90aGlzNy5icmFuZENoYXJ0RGF0YTEgfHwgW107CiAgICAgICAgICBfdGhpczcucmVmb3JtQnJhbmRPcHRpb24uc2VyaWVzWzFdLmRhdGEgPSBfdGhpczcuYnJhbmRDaGFydERhdGEyIHx8IFtdOwogICAgICAgICAgLy8gdGhpcy5yZWZvcm1CcmFuZE9wdGlvbi5zZXJpZXNbMl0uZGF0YSA9IHRoaXMuYnJhbmRDaGFydERhdGEzIHx8IFtdCiAgICAgICAgICBfdGhpczcucmVmb3JtQnJhbmRPcHRpb24ueEF4aXMuZGF0YSA9IF90aGlzNy54QXhpc0RhdGE7CiAgICAgICAgICBfdGhpczcucmVmb3JtQnJhbmRDaGFydC5zZXRPcHRpb24oX3RoaXM3LnJlZm9ybUJyYW5kT3B0aW9uKTsKICAgICAgICB9CiAgICAgICAgX3RoaXM3LmxvYWRPYmouYnJhbmRMaXN0ID0gZmFsc2U7CiAgICAgIH0pOwogICAgfSwKICAgIGZvcm1hdEJyYW5kQ2hhcnREYXRhOiBmdW5jdGlvbiBmb3JtYXRCcmFuZENoYXJ0RGF0YShjaGFydERhdGEpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgIC8v5ZCR5YmN5p+l6K+iCiAgICAgIHZhciBYRGF0YSA9IFtdOwogICAgICB2YXIgX190aGlzWWVhciA9IHRoaXMueWVhciArICcvJzsKICAgICAgdmFyIF9fbHNldFllYXIgPSB0aGlzLnllYXIgLSAxICsgJy8nOwogICAgICBpZiAodGhpcy5xdWFydGVyIDwgNCkgewogICAgICAgIGZvciAodmFyIG0gPSB0aGlzLnF1YXJ0ZXIgKiAzICsgMTsgbSA8PSAxMjsgbSsrKSB7CiAgICAgICAgICBYRGF0YS5wdXNoKF9fbHNldFllYXIgKyBtKTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgX20gPSAxOyBfbSA8PSB0aGlzLnF1YXJ0ZXIgKiAzOyBfbSsrKSB7CiAgICAgICAgICBYRGF0YS5wdXNoKF9fdGhpc1llYXIgKyBfbSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAodmFyIF9tMiA9IDE7IF9tMiA8PSAxMjsgX20yKyspIHsKICAgICAgICAgIFhEYXRhLnB1c2goX190aGlzWWVhciArIF9tMik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBhcnIxID0gW10sCiAgICAgICAgYXJyMiA9IFtdLAogICAgICAgIGFycjMgPSBbXTsKICAgICAgaWYgKGNoYXJ0RGF0YVsxXSkgewogICAgICAgIHZhciBfdGhpc1llYXIgPSBbXTsKICAgICAgICB2YXIgX2xhc3RZZWFyID0gW107CiAgICAgICAgY2hhcnREYXRhWzFdLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIGlmIChpdGVtLmVmZmVjdE1vbnRoIDw9IF90aGlzOC5xdWFydGVyICogMykgewogICAgICAgICAgICBfdGhpc1llYXIucHVzaChpdGVtLmVmZmVjdENvdW50KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9sYXN0WWVhci5wdXNoKGl0ZW0uZWZmZWN0Q291bnQpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGFycjEgPSBbXS5jb25jYXQoX2xhc3RZZWFyLCBfdGhpc1llYXIpOwogICAgICB9CiAgICAgIGlmIChjaGFydERhdGFbMl0pIHsKICAgICAgICB2YXIgX3RoaXNZZWFyMiA9IFtdOwogICAgICAgIHZhciBfbGFzdFllYXIyID0gW107CiAgICAgICAgY2hhcnREYXRhWzJdLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIGlmIChpdGVtLmVmZmVjdE1vbnRoIDw9IF90aGlzOC5xdWFydGVyICogMykgewogICAgICAgICAgICBfdGhpc1llYXIyLnB1c2goaXRlbS5lZmZlY3RDb3VudCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfbGFzdFllYXIyLnB1c2goaXRlbS5lZmZlY3RDb3VudCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgYXJyMiA9IFtdLmNvbmNhdChfbGFzdFllYXIyLCBfdGhpc1llYXIyKTsKICAgICAgfQogICAgICBpZiAoY2hhcnREYXRhWzNdKSB7CiAgICAgICAgdmFyIF90aGlzWWVhcjMgPSBbXTsKICAgICAgICB2YXIgX2xhc3RZZWFyMyA9IFtdOwogICAgICAgIGNoYXJ0RGF0YVszXS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICBpZiAoaXRlbS5lZmZlY3RNb250aCA8PSBfdGhpczgucXVhcnRlciAqIDMpIHsKICAgICAgICAgICAgX3RoaXNZZWFyMy5wdXNoKGl0ZW0uZWZmZWN0Q291bnQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2xhc3RZZWFyMy5wdXNoKGl0ZW0uZWZmZWN0Q291bnQpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGFycjMgPSBbXS5jb25jYXQoX2xhc3RZZWFyMywgX3RoaXNZZWFyMyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBYRGF0YTogWERhdGEsCiAgICAgICAgYXJyMTogYXJyMSwKICAgICAgICBhcnIyOiBhcnIyLAogICAgICAgIGFycjM6IGFycjMKICAgICAgfTsKICAgIH0sCiAgICBnZXRQaWxvdFJlZm9ybTogZnVuY3Rpb24gZ2V0UGlsb3RSZWZvcm0odHlwZSkgewogICAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgICAgdGhpcy5sb2FkT2JqLnBpbG90UmVmb3JtID0gdHJ1ZTsKICAgICAgdmFyIGRhdGEgPSB0aGlzLnFzLnN0cmluZ2lmeSh7CiAgICAgICAgcXVhcnRlcjogdGhpcy5xdWFydGVyLAogICAgICAgIHllYXI6IHRoaXMueWVhcgogICAgICB9KTsKICAgICAgYXBpTGlzdC5nZXRQaWxvdFJlZm9ybShkYXRhLCBmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgaWYgKHJlcyAmJiByZXMudmFsdWUgJiYgcmVzLnZhbHVlLmNoYXJ0KSB7CiAgICAgICAgICBfdGhpczkuZGVwbG95bWVudFRpbWVEYXRhID0ge307CiAgICAgICAgICBfdGhpczkuZGVwbG95bWVudFRpbWVZZWFyID0gW107CiAgICAgICAgICBfdGhpczkuZGVwbG95bWVudFRpbWVEYXRhMSA9IFtdOwogICAgICAgICAgX3RoaXM5LmRlcGxveW1lbnRUaW1lRGF0YTIgPSBbXTsKICAgICAgICAgIHZhciBfZGF0YSA9IHJlcy52YWx1ZS5jaGFydDsKICAgICAgICAgIF9kYXRhWzFdICYmIF9kYXRhWzFdLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgaWYgKCFfdGhpczkuZGVwbG95bWVudFRpbWVEYXRhW2l0ZW0ueF0pIHsKICAgICAgICAgICAgICBfdGhpczkuZGVwbG95bWVudFRpbWVEYXRhW2l0ZW0ueF0gPSB7CiAgICAgICAgICAgICAgICBjb3VudHJ5OiBpdGVtLnkKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF90aGlzOS5kZXBsb3ltZW50VGltZURhdGFbaXRlbS54XS5jb3VudHJ5ID0gaXRlbS55OwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIF9kYXRhWzJdICYmIF9kYXRhWzJdLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgaWYgKCFfdGhpczkuZGVwbG95bWVudFRpbWVEYXRhW2l0ZW0ueF0pIHsKICAgICAgICAgICAgICBfdGhpczkuZGVwbG95bWVudFRpbWVEYXRhW2l0ZW0ueF0gPSB7CiAgICAgICAgICAgICAgICBjaXR5OiBpdGVtLnkKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF90aGlzOS5kZXBsb3ltZW50VGltZURhdGFbaXRlbS54XS5jaXR5ID0gaXRlbS55OwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGZvciAodmFyIHllYXIgaW4gX3RoaXM5LmRlcGxveW1lbnRUaW1lRGF0YSkgewogICAgICAgICAgICBfdGhpczkuZGVwbG95bWVudFRpbWVZZWFyLnB1c2goeWVhcik7CiAgICAgICAgICAgIHZhciBjaXR5ID0gX3RoaXM5LmRlcGxveW1lbnRUaW1lRGF0YVt5ZWFyXS5jaXR5IHx8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFyIGNvdW50cnkgPSBfdGhpczkuZGVwbG95bWVudFRpbWVEYXRhW3llYXJdLmNvdW50cnkgfHwgdW5kZWZpbmVkOwogICAgICAgICAgICBfdGhpczkuZGVwbG95bWVudFRpbWVEYXRhMS5wdXNoKGNpdHkpOwogICAgICAgICAgICBfdGhpczkuZGVwbG95bWVudFRpbWVEYXRhMi5wdXNoKGNvdW50cnkpOwogICAgICAgICAgfQogICAgICAgICAgY29uc29sZS5sb2coX3RoaXM5LmRlcGxveW1lbnRUaW1lRGF0YTEpOwogICAgICAgICAgaWYgKHR5cGUpIHsKICAgICAgICAgICAgX3RoaXM5LmluaXRMaW5lQ2hhcnQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF90aGlzOS5kZXBsb3lUaW1lT3B0aW9uLnhBeGlzLmRhdGEgPSBfdGhpczkuZGVwbG95bWVudFRpbWVZZWFyOwogICAgICAgICAgICBfdGhpczkuZGVwbG95VGltZU9wdGlvbi5zZXJpZXNbMF0uZGF0YSA9IF90aGlzOS5kZXBsb3ltZW50VGltZURhdGEyOwogICAgICAgICAgICAvLyB0aGlzLmRlcGxveVRpbWVPcHRpb24uc2VyaWVzWzFdLmRhdGEgPSB0aGlzLmRlcGxveW1lbnRUaW1lRGF0YTIKICAgICAgICAgICAgX3RoaXM5LmRlcGxveVRpbWVDaGFydC5zZXRPcHRpb24oX3RoaXM5LmRlcGxveVRpbWVPcHRpb24pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocmVzICYmIHJlcy52YWx1ZSAmJiByZXMudmFsdWUuYWNoaWV2ZW1lbnQpIHsKICAgICAgICAgIHJlcy52YWx1ZS5hY2hpZXZlbWVudC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgIGlmIChpdGVtLmFjaGlldmVtZW50VHlwZSA9PSAxKSB7CiAgICAgICAgICAgICAgX3RoaXM5LmFjaGlldmVtZW50MS50b3RhbEFjaGlldmVtZW50ID0gaXRlbS50b3RhbEFjaGlldmVtZW50IHx8IDA7CiAgICAgICAgICAgICAgX3RoaXM5LmFjaGlldmVtZW50MS5nYXBRQWNoaWV2ZW1lbnQgPSBpdGVtLmdhcFFBY2hpZXZlbWVudCB8fCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpdGVtLmFjaGlldmVtZW50VHlwZSA9PSAyKSB7CiAgICAgICAgICAgICAgX3RoaXM5LmFjaGlldmVtZW50Mi50b3RhbEFjaGlldmVtZW50ID0gaXRlbS50b3RhbEFjaGlldmVtZW50IHx8IDA7CiAgICAgICAgICAgICAgX3RoaXM5LmFjaGlldmVtZW50Mi5nYXBRQWNoaWV2ZW1lbnQgPSBpdGVtLmdhcFFBY2hpZXZlbWVudCB8fCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpdGVtLmFjaGlldmVtZW50VHlwZSA9PSAzKSB7CiAgICAgICAgICAgICAgX3RoaXM5LmFjaGlldmVtZW50My50b3RhbEFjaGlldmVtZW50ID0gaXRlbS50b3RhbEFjaGlldmVtZW50IHx8IDA7CiAgICAgICAgICAgICAgX3RoaXM5LmFjaGlldmVtZW50My5nYXBRQWNoaWV2ZW1lbnQgPSBpdGVtLmdhcFFBY2hpZXZlbWVudCB8fCAwOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgX3RoaXM5LmxvYWRPYmoucGlsb3RSZWZvcm0gPSBmYWxzZTsKICAgICAgfSk7CiAgICB9LAogICAgZ2V0R2lzRGF0YTogZnVuY3Rpb24gZ2V0R2lzRGF0YSgpIHsKICAgICAgdmFyIF90aGlzMTAgPSB0aGlzOwogICAgICB0aGlzLmxvYWRPYmoubG9hZGluZ01hcCA9IHRydWU7CiAgICAgIC8vIGNvbXBvc2l0ZSDnu7zlkIjor4Tku7fmjIfmlbDjgIF3b3JrYWJsZSDmlLnpnanokL3lrp7lipvjgIFicmFuZCDlk4HniYzmmL7npLrluqbjgIFzYXRpc2ZhY3Rpb24g5pS56Z2p5ruh5oSP5bqm44CBcmlzayDpo47pmannrqHmjqflipsKICAgICAgdmFyIHR5cGVzID0gWydjb21wb3NpdGUnLCAnd29ya2FibGUnLCAnYnJhbmQnLCAnc2F0aXNmYWN0aW9uJywgJ3Jpc2snXTsKICAgICAgdHlwZXMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkgewogICAgICAgIHZhciBkYXRhID0gX3RoaXMxMC5xcy5zdHJpbmdpZnkoewogICAgICAgICAgdHlwZTogdHlwZSwKICAgICAgICAgIHF1YXJ0ZXI6IF90aGlzMTAucXVhcnRlciwKICAgICAgICAgIHllYXI6IF90aGlzMTAueWVhcgogICAgICAgIH0pOwogICAgICAgIGFwaUxpc3QuZ2V0R2lzRGF0YShkYXRhLCBmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICBfdGhpczEwWyIiLmNvbmNhdCh0eXBlLCAiTWFwRGF0YSIpXSA9IF90aGlzMTAuZm9ybWF0TWFwRGF0YSh0eXBlLCByZXMpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICBmb3JtYXRNYXBEYXRhOiBmdW5jdGlvbiBmb3JtYXRNYXBEYXRhKHR5cGUsIHJlcykgewogICAgICBpZiAodHlwZSA9PSB0aGlzLmFjdGl2ZUJ0bktleSkgewogICAgICAgIHRoaXMuaGFuZGxlTWFwQXJlYShyZXMsIHRoaXMuYWN0aXZlQnRuS2V5KTsKICAgICAgICB0aGlzLmxvYWRPYmoubG9hZGluZ01hcCA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmICh0eXBlID09ICdyaXNrJykgewogICAgICAgIHZhciBjb2RlQXJyID0gW107CiAgICAgICAgdmFyIHRlbXAgPSBbXTsKICAgICAgICByZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaWYgKCFjb2RlQXJyLmluY2x1ZGVzKGl0ZW0udW5pdENvZGUpKSB7CiAgICAgICAgICAgIGNvZGVBcnIucHVzaChpdGVtLnVuaXRDb2RlKTsKICAgICAgICAgICAgdGVtcC5wdXNoKHsKICAgICAgICAgICAgICB1bml0Q29kZTogaXRlbS51bml0Q29kZSwKICAgICAgICAgICAgICBldmVudERhdGE6IFt7CiAgICAgICAgICAgICAgICByaXNrTmFtZTogaXRlbS5yaXNrTmFtZSwKICAgICAgICAgICAgICAgIHJpc2tMZXZlbDogaXRlbS5yaXNrTGV2ZWwsCiAgICAgICAgICAgICAgICByaXNrVHlwZTogaXRlbS5yaXNrVHlwZQogICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGkgPSBjb2RlQXJyLmZpbmRJbmRleChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgICAgICAgcmV0dXJuIGtleSA9PSBpdGVtLnVuaXRDb2RlOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGVtcFtpXS5ldmVudERhdGEucHVzaCh7CiAgICAgICAgICAgICAgcmlza05hbWU6IGl0ZW0ucmlza05hbWUsCiAgICAgICAgICAgICAgcmlza0xldmVsOiBpdGVtLnJpc2tMZXZlbCwKICAgICAgICAgICAgICByaXNrVHlwZTogaXRlbS5yaXNrVHlwZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdGVtcDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcmVzOwogICAgICB9CiAgICB9LAogICAgZ2V0RGVtYW5kSGVhdExpc3Q6IGZ1bmN0aW9uIGdldERlbWFuZEhlYXRMaXN0KHR5cGUpIHsKICAgICAgdmFyIF90aGlzMTEgPSB0aGlzOwogICAgICB0aGlzLmxvYWRPYmouc2Nyb2xsTGlzdERhdGFCb3R0b20gPSB0cnVlOwogICAgICB2YXIgZGF0YSA9IHRoaXMucXMuc3RyaW5naWZ5KHsKICAgICAgICBxdWFydGVyOiB0aGlzLnF1YXJ0ZXIsCiAgICAgICAgeWVhcjogdGhpcy55ZWFyCiAgICAgIH0pOwogICAgICAvLyDnu7zlkIgKICAgICAgYXBpTGlzdC5nZXREZW1hbmRIZWF0TGlzdChkYXRhLCBmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgaWYgKHJlcy5jaGFydCkgewogICAgICAgICAgdmFyIGNoYXJ0RGF0YSA9IHJlcy5jaGFydDsKICAgICAgICAgIHZhciBoZWF0QmFyRGF0YSA9IFtdLAogICAgICAgICAgICBseXFkID0ge307CiAgICAgICAgICBpZiAoX3RoaXMxMS5xdWFydGVyID09IDEpIHsKICAgICAgICAgICAgaGVhdEJhckRhdGFbMF0gPSBbJ+mcgOaxguadpea6kCcsICcx5pyIJywgJzLmnIgnLCAnM+aciCddOwogICAgICAgICAgfSBlbHNlIGlmIChfdGhpczExLnF1YXJ0ZXIgPT0gMikgewogICAgICAgICAgICBoZWF0QmFyRGF0YVswXSA9IFsn6ZyA5rGC5p2l5rqQJywgJzTmnIgnLCAnNeaciCcsICc25pyIJ107CiAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzMTEucXVhcnRlciA9PSAzKSB7CiAgICAgICAgICAgIGhlYXRCYXJEYXRhWzBdID0gWyfpnIDmsYLmnaXmupAnLCAnN+aciCcsICc45pyIJywgJznmnIgnXTsKICAgICAgICAgIH0gZWxzZSBpZiAoX3RoaXMxMS5xdWFydGVyID09IDQpIHsKICAgICAgICAgICAgaGVhdEJhckRhdGFbMF0gPSBbJ+mcgOaxguadpea6kCcsICcxMOaciCcsICcxMeaciCcsICcxMuaciCddOwogICAgICAgICAgfQogICAgICAgICAgX3RoaXMxMS5sZWdlbmRUb3AgPSBbXTsKICAgICAgICAgIF90aGlzMTEubGVnZW5kQm90dG9tID0gW107CiAgICAgICAgICBfdGhpczExLmdnYmJfbHlxZCA9IHV0aWxzLmdldERpY3RJdGVtc0Zyb21DYWNoZSgnZ2diYl9seXFkJyk7CiAgICAgICAgICBfdGhpczExLmdnYmJfbHlxZC5mb3JFYWNoKGZ1bmN0aW9uIChxZCwgaSkgewogICAgICAgICAgICBseXFkW3FkLnZhbHVlXSA9IFtxZC5uYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTsKICAgICAgICAgICAgaWYgKGkgKyAxIDw9IF90aGlzMTEuZ2diYl9seXFkLmxlbmd0aCAvIDIpIHsKICAgICAgICAgICAgICBfdGhpczExLmxlZ2VuZFRvcC5wdXNoKHsKICAgICAgICAgICAgICAgIG5hbWU6IHFkLm5hbWUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfdGhpczExLmxlZ2VuZEJvdHRvbS5wdXNoKHsKICAgICAgICAgICAgICAgIG5hbWU6IHFkLm5hbWUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBjaGFydERhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICB2YXIgaW5kZXggPSAxOwogICAgICAgICAgICBpZiAoWzEsIDQsIDcsIDEwXS5pbmNsdWRlcyhpdGVtLngpKSB7CiAgICAgICAgICAgICAgaW5kZXggPSAxOwogICAgICAgICAgICB9IGVsc2UgaWYgKFsyLCA1LCA4LCAxMV0uaW5jbHVkZXMoaXRlbS54KSkgewogICAgICAgICAgICAgIGluZGV4ID0gMjsKICAgICAgICAgICAgfSBlbHNlIGlmIChbMywgNiwgOSwgMTJdLmluY2x1ZGVzKGl0ZW0ueCkpIHsKICAgICAgICAgICAgICBpbmRleCA9IDM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbHlxZFtpdGVtLmxlZ2VuZF1baW5kZXhdID0gaXRlbS55OwogICAgICAgICAgfSk7CiAgICAgICAgICBmb3IgKHZhciBxZFZhbHVlIGluIGx5cWQpIHsKICAgICAgICAgICAgaGVhdEJhckRhdGEucHVzaChseXFkW3FkVmFsdWVdKTsKICAgICAgICAgIH0KICAgICAgICAgIF90aGlzMTEuaGVhdEJhckRhdGEgPSBoZWF0QmFyRGF0YTsKICAgICAgICAgIGlmICh0eXBlKSB7CiAgICAgICAgICAgIF90aGlzMTEuaW5pdEJhckNoYXJ0KCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfdGhpczExLmhlYXRCYXJPcHRpb24uZGF0YXNldC5zb3VyY2UgPSBfdGhpczExLmhlYXRCYXJEYXRhOwogICAgICAgICAgICBfdGhpczExLmhlYXRCYXJPcHRpb24ubGVnZW5kWzBdLmRhdGEgPSBfdGhpczExLmxlZ2VuZFRvcDsKICAgICAgICAgICAgX3RoaXMxMS5oZWF0QmFyT3B0aW9uLmxlZ2VuZFsxXS5kYXRhID0gX3RoaXMxMS5sZWdlbmRCb3R0b207CiAgICAgICAgICAgIF90aGlzMTEuaGVhdEJhckNoYXJ0LnNldE9wdGlvbihfdGhpczExLmhlYXRCYXJPcHRpb24pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfdGhpczExLnNjcm9sbExpc3REYXRhQm90dG9tID0gcmVzLmRlbWFuZFJhbmsgfHwgW107CiAgICAgICAgX3RoaXMxMS5sb2FkT2JqLnNjcm9sbExpc3REYXRhQm90dG9tID0gZmFsc2U7CiAgICAgIH0pOwogICAgfSwKICAgIGluaXRCYXJDaGFydDogZnVuY3Rpb24gaW5pdEJhckNoYXJ0KCkgewogICAgICB2YXIgX3RoaXMxMiA9IHRoaXM7CiAgICAgIHZhciBjaGFydERvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWF0LWJhci1jaGFydCcpOwogICAgICB0aGlzLmhlYXRCYXJDaGFydCA9IGVjaGFydHMuaW5pdChjaGFydERvbSk7CiAgICAgIHRoaXMuaGVhdEJhck9wdGlvbiA9IHsKICAgICAgICBkYXRhc2V0OiB7CiAgICAgICAgICBzb3VyY2U6IHRoaXMuaGVhdEJhckRhdGEKICAgICAgICB9LAogICAgICAgIGdyaWQ6IHsKICAgICAgICAgIC8v5Zu+6KGo56a75aSW5bGC55uS5a2Q55qE6Led56a7CiAgICAgICAgICB0b3A6ICczMiUnLAogICAgICAgICAgYm90dG9tOiAnMiUnLAogICAgICAgICAgbGVmdDogJzElJywKICAgICAgICAgIHJpZ2h0OiAnMiUnLAogICAgICAgICAgY29udGFpbkxhYmVsOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB4QXhpczogewogICAgICAgICAgdHlwZTogJ2NhdGVnb3J5JywKICAgICAgICAgIGJvdW5kYXJ5R2FwOiB0cnVlLAogICAgICAgICAgYXhpc1RpY2s6IGZhbHNlLAogICAgICAgICAgYXhpc0xpbmU6IHsKICAgICAgICAgICAgbGluZVN0eWxlOiB7CiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDE1NCwxOTksMjIwLCAwLjIpJwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgYXhpc0xhYmVsOiB7CiAgICAgICAgICAgIGNvbG9yOiAnI0Q3RjFGRicKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHlBeGlzOiB7CiAgICAgICAgICB0eXBlOiAndmFsdWUnLAogICAgICAgICAgLy8gbWluOiAwLAogICAgICAgICAgLy8gc3BsaXROdW1iZXI6IDUsCiAgICAgICAgICAvLyBpbnRlcnZhbDogMSwKICAgICAgICAgIGF4aXNMYWJlbDogewogICAgICAgICAgICBjb2xvcjogJyNEN0YxRkYnLAogICAgICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uIGZvcm1hdHRlcih2YWwpIHsKICAgICAgICAgICAgICBpZiAodmFsID49IDEgJiYgcGFyc2VJbnQodmFsLCAxMCkgPT09IHZhbCB8fCB2YWwgPT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGF4aXNMaW5lOiB7CiAgICAgICAgICAgIGxpbmVTdHlsZTogewogICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgxNTQsMTk5LDIyMCwgMC4yKScKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHNwbGl0TGluZTogewogICAgICAgICAgICBsaW5lU3R5bGU6IHsKICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMTU0LDE5OSwyMjAsIDAuMiknCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHRvb2x0aXA6IHsKICAgICAgICAgIHRyaWdnZXI6ICdheGlzJywKICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoNiwgNDcsIDEwNywgMSknLAogICAgICAgICAgYm9yZGVyQ29sb3I6ICdyZ2JhKDIsIDExNSwgMjMzLCAxKScsCiAgICAgICAgICB0ZXh0U3R5bGU6IHsKICAgICAgICAgICAgY29sb3I6ICcjZmZmJwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGVnZW5kOiBbewogICAgICAgICAgbGVmdDogJ2NlbnRlcicsCiAgICAgICAgICBkYXRhOiB0aGlzLmxlZ2VuZFRvcCwKICAgICAgICAgIGluYWN0aXZlQ29sb3I6ICcjMzMzMzMzJywKICAgICAgICAgIGJvcmRlclJhZGl1czogNiwKICAgICAgICAgIGl0ZW1XaWR0aDogMTQsCiAgICAgICAgICBpdGVtSGVpZ2h0OiA2LAogICAgICAgICAgaXRlbUdhcDogNDAsCiAgICAgICAgICB0ZXh0U3R5bGU6IHsKICAgICAgICAgICAgY29sb3I6ICcjQjFFM0ZGJwogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIGxlZnQ6ICdjZW50ZXInLAogICAgICAgICAgdG9wOiAnMTQlJywKICAgICAgICAgIGRhdGE6IHRoaXMubGVnZW5kQm90dG9tLAogICAgICAgICAgaW5hY3RpdmVDb2xvcjogJyMzMzMzMzMnLAogICAgICAgICAgYm9yZGVyUmFkaXVzOiA2LAogICAgICAgICAgaXRlbVdpZHRoOiAxNCwKICAgICAgICAgIGl0ZW1IZWlnaHQ6IDYsCiAgICAgICAgICBpdGVtR2FwOiA0MCwKICAgICAgICAgIHRleHRTdHlsZTogewogICAgICAgICAgICBjb2xvcjogJyNCMUUzRkYnCiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgY29sb3I6IFsnIzU5QzA2QycsICcjRjVCMzUxJywgJyMyRTg0RDAnLCAnI0ZGOTdBRSddLAogICAgICAgIHNlcmllczogW3sKICAgICAgICAgIHR5cGU6ICdiYXInLAogICAgICAgICAgc2VyaWVzTGF5b3V0Qnk6ICdyb3cnLAogICAgICAgICAgYmFyV2lkdGg6IDgsCiAgICAgICAgICBiYXJHYXA6ICc4MCUnLAogICAgICAgICAgaXRlbVN0eWxlOiB7CiAgICAgICAgICAgIGJvcmRlclJhZGl1czogNSwKICAgICAgICAgICAgY29sb3I6IG5ldyBlY2hhcnRzLmdyYXBoaWMuTGluZWFyR3JhZGllbnQoMCwgMCwgMCwgMSwgW3sKICAgICAgICAgICAgICBvZmZzZXQ6IDAsCiAgICAgICAgICAgICAgY29sb3I6ICcjNTlDMDZDJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgb2Zmc2V0OiAxLAogICAgICAgICAgICAgIGNvbG9yOiAncmdiYSg4OSwxOTIsMTA4LDAuMyknCiAgICAgICAgICAgIH1dKQogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHR5cGU6ICdiYXInLAogICAgICAgICAgc2VyaWVzTGF5b3V0Qnk6ICdyb3cnLAogICAgICAgICAgYmFyV2lkdGg6IDgsCiAgICAgICAgICBiYXJHYXA6ICc4MCUnLAogICAgICAgICAgaXRlbVN0eWxlOiB7CiAgICAgICAgICAgIGJvcmRlclJhZGl1czogNSwKICAgICAgICAgICAgY29sb3I6IG5ldyBlY2hhcnRzLmdyYXBoaWMuTGluZWFyR3JhZGllbnQoMCwgMCwgMCwgMSwgW3sKICAgICAgICAgICAgICBvZmZzZXQ6IDAsCiAgICAgICAgICAgICAgY29sb3I6ICcjMzg2QTk3JwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgb2Zmc2V0OiAxLAogICAgICAgICAgICAgIGNvbG9yOiAncmdiYSg1NiwxMDYsMTUxLDAuMyknCiAgICAgICAgICAgIH1dKQogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHR5cGU6ICdiYXInLAogICAgICAgICAgc2VyaWVzTGF5b3V0Qnk6ICdyb3cnLAogICAgICAgICAgYmFyV2lkdGg6IDgsCiAgICAgICAgICBiYXJHYXA6ICc4MCUnLAogICAgICAgICAgaXRlbVN0eWxlOiB7CiAgICAgICAgICAgIGJvcmRlclJhZGl1czogNSwKICAgICAgICAgICAgY29sb3I6IG5ldyBlY2hhcnRzLmdyYXBoaWMuTGluZWFyR3JhZGllbnQoMCwgMCwgMCwgMSwgW3sKICAgICAgICAgICAgICBvZmZzZXQ6IDAsCiAgICAgICAgICAgICAgY29sb3I6ICcjRjhCNTUxJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgb2Zmc2V0OiAxLAogICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgyNDgsMTgxLDgxLDAuMyknCiAgICAgICAgICAgIH1dKQogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHR5cGU6ICdiYXInLAogICAgICAgICAgc2VyaWVzTGF5b3V0Qnk6ICdyb3cnLAogICAgICAgICAgYmFyV2lkdGg6IDgsCiAgICAgICAgICBiYXJHYXA6ICc4MCUnLAogICAgICAgICAgaXRlbVN0eWxlOiB7CiAgICAgICAgICAgIGJvcmRlclJhZGl1czogNSwKICAgICAgICAgICAgY29sb3I6IG5ldyBlY2hhcnRzLmdyYXBoaWMuTGluZWFyR3JhZGllbnQoMCwgMCwgMCwgMSwgW3sKICAgICAgICAgICAgICBvZmZzZXQ6IDAsCiAgICAgICAgICAgICAgY29sb3I6ICcjRkZCQkM5JwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgb2Zmc2V0OiAxLAogICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgyNTUsMTg3LDIwMSwwLjMpJwogICAgICAgICAgICB9XSkKICAgICAgICAgIH0KICAgICAgICB9XQogICAgICB9OwogICAgICB0aGlzLmhlYXRCYXJPcHRpb24gJiYgdGhpcy5oZWF0QmFyQ2hhcnQuc2V0T3B0aW9uKHRoaXMuaGVhdEJhck9wdGlvbik7CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIF90aGlzMTIuaGVhdEJhckNoYXJ0LnJlc2l6ZSgpOwogICAgICB9KTsKICAgIH0sCiAgICBnZXREaWN0TmFtZTogZnVuY3Rpb24gZ2V0RGljdE5hbWUoY29kZSwgdmFsdWUpIHsKICAgICAgcmV0dXJuIHV0aWxzLmdldERpY3ROYW1lKGNvZGUsIHZhbHVlKTsKICAgIH0sCiAgICBoYW5kbGVOZXdzRGV0YWlsOiBmdW5jdGlvbiBoYW5kbGVOZXdzRGV0YWlsKGNvbHVtbikgewogICAgICB0aGlzLmhhbmRsZURldGFpbCgncmVmb3JtTmV3c1NpbmdsZScsIGNvbHVtbi5pZCk7CiAgICAgIC8vIGlmIChjb2x1bW4uaXNVcmwpIHsKICAgICAgLy8gICAgIHdpbmRvdy5vcGVuKGNvbHVtbi51cmwsICdfYmxhbmsnKQogICAgICAvLyB9IGVsc2UgewogICAgICAvLyAgICAgdGhpcy5oYW5kbGVEZXRhaWwoCiAgICAgIC8vICAgICAgICAgJ3JlZm9ybU5ld3NTaW5nbGUnCiAgICAgIC8vICAgICApCiAgICAgIC8vIH0KICAgIH0sCiAgICBsb2FkTmV3czogZnVuY3Rpb24gbG9hZE5ld3MoKSB7CiAgICAgIHZhciBfdGhpczEzID0gdGhpczsKICAgICAgdGhpcy5sb2FkT2JqLnNjcm9sbEJvcmFkRGF0YSA9IHRydWU7CiAgICAgIHZhciBkYXRhID0gewogICAgICAgIHBhZ2VCZWFuOiB7CiAgICAgICAgICBwYWdlU2l6ZTogLTEsCiAgICAgICAgICBwYWdlOiAxCiAgICAgICAgfSwKICAgICAgICBxdWVyeXM6IFt7CiAgICAgICAgICBncm91cDogJ21haW4nLAogICAgICAgICAgb3BlcmF0aW9uOiAnRVFVQUwnLAogICAgICAgICAgcGFyZW50R3JvdXA6ICcnLAogICAgICAgICAgcHJvcGVydHk6ICduLk9QRVJBVEVfVFlQRV8nLAogICAgICAgICAgcmVsYXRpb246ICdBTkQnLAogICAgICAgICAgdmFsdWU6ICcyJwogICAgICAgIH0sIHsKICAgICAgICAgIGdyb3VwOiAnbWFpbicsCiAgICAgICAgICBvcGVyYXRpb246ICdFUVVBTCcsCiAgICAgICAgICBwYXJlbnRHcm91cDogJycsCiAgICAgICAgICBwcm9wZXJ0eTogJ24uRVhDRUxMRU5UXycsCiAgICAgICAgICByZWxhdGlvbjogJ0FORCcsCiAgICAgICAgICB2YWx1ZTogJzMnCiAgICAgICAgfV0KICAgICAgfTsKICAgICAgYXBpTGlzdC5nZXROZXdzKGRhdGEsIGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpczEzLnNjcm9sbEJvcmFkRGF0YSA9IHJlcy5yb3dzOwogICAgICAgIF90aGlzMTMubG9hZE9iai5zY3JvbGxCb3JhZERhdGEgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9LAogICAgZ2V0TmV3c0RldGFpbDogZnVuY3Rpb24gZ2V0TmV3c0RldGFpbCh0eXBlLCByb3cpIHsKICAgICAgdGhpcy5jdXJyZW50VGFiQ29tcG9uZW50ID0gZGlhbG9nQ29uZmlnLmRpYWxvZ09wdGlvblt0eXBlXS5jb21wb25lbnROYW1lID8gZGlhbG9nQ29uZmlnLmRpYWxvZ09wdGlvblt0eXBlXS5jb21wb25lbnROYW1lIDogdHlwZTsgLy8g5Yqo5oCB57uE5Lu25ZCN56ewCiAgICAgIGlmIChyb3cpIHsKICAgICAgICBkaWFsb2dDb25maWcuZGlhbG9nT3B0aW9uW3R5cGVdLm9wdGlvbi5kaWFsb2dUaXRsZSA9IHJvdy50aXRsZTsKICAgICAgfQogICAgICB0aGlzLnRhYmxlT3B0aW9ucyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZGlhbG9nQ29uZmlnLmRpYWxvZ09wdGlvblt0eXBlXS5kYXRhT3B0aW9ucyksIHt9LCB7CiAgICAgICAgaWQ6IHJvdy5pZAogICAgICB9KTsgLy90YWJsZeeahOafpeivouWPguaVsAogICAgICB0aGlzLmRpYWxvZ09wdGlvbiA9IGRpYWxvZ0NvbmZpZy5kaWFsb2dPcHRpb25bdHlwZV0ub3B0aW9uOyAvL+W8ueeql+mFjee9ruWPguaVsAogICAgICB0aGlzLnNob3dFYXN5ID0gdHJ1ZTsKICAgIH0sCiAgICBvcGVuU3ViRGlhbG9nOiBmdW5jdGlvbiBvcGVuU3ViRGlhbG9nKHR5cGUsIGRhdGFPcHRpb25zKSB7CiAgICAgIHRoaXMuY3VycmVudFRhYkNvbXBvbmVudCA9IGRpYWxvZ0NvbmZpZy5kaWFsb2dPcHRpb25bdHlwZV0uY29tcG9uZW50TmFtZSA/IGRpYWxvZ0NvbmZpZy5kaWFsb2dPcHRpb25bdHlwZV0uY29tcG9uZW50TmFtZSA6IHR5cGU7IC8vIOWKqOaAgee7hOS7tuWQjeensAogICAgICBpZiAoZGF0YU9wdGlvbnMpIHsKICAgICAgICB0aGlzLnRhYmxlT3B0aW9ucyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZGlhbG9nQ29uZmlnLmRpYWxvZ09wdGlvblt0eXBlXS5kYXRhT3B0aW9ucyksIGRhdGFPcHRpb25zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnRhYmxlT3B0aW9ucyA9IGRpYWxvZ0NvbmZpZy5kaWFsb2dPcHRpb25bdHlwZV0uZGF0YU9wdGlvbnM7IC8vdGFibGXnmoTmn6Xor6Llj4LmlbAKICAgICAgfQogICAgICB0aGlzLmRpYWxvZ09wdGlvbiA9IGRpYWxvZ0NvbmZpZy5kaWFsb2dPcHRpb25bdHlwZV0ub3B0aW9uOyAvL+W8ueeql+mFjee9ruWPguaVsAogICAgICB0aGlzLnNob3dFYXN5ID0gdHJ1ZTsKICAgIH0sCiAgICBpbml0TGluZUNoYXJ0OiBmdW5jdGlvbiBpbml0TGluZUNoYXJ0KCkgewogICAgICB2YXIgY2hhcnREb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVwbG95bWVudFRpbWUnKTsKICAgICAgdGhpcy5kZXBsb3lUaW1lQ2hhcnQgPSBlY2hhcnRzLmluaXQoY2hhcnREb20pOwogICAgICB0aGlzLmRlcGxveVRpbWVPcHRpb24gPSB7CiAgICAgICAgZ3JpZDogewogICAgICAgICAgLy/lm77ooajnprvlpJblsYLnm5LlrZDnmoTot53nprsKICAgICAgICAgIHRvcDogJzUlJywKICAgICAgICAgIGJvdHRvbTogJzYlJywKICAgICAgICAgIGxlZnQ6IDAsCiAgICAgICAgICByaWdodDogJzYlJywKICAgICAgICAgIGNvbnRhaW5MYWJlbDogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgdG9vbHRpcDogewogICAgICAgICAgdHJpZ2dlcjogJ2F4aXMnLAogICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSg2LCA0NywgMTA3LCAxKScsCiAgICAgICAgICBib3JkZXJDb2xvcjogJ3JnYmEoMiwgMTE1LCAyMzMsIDEpJywKICAgICAgICAgIHRleHRTdHlsZTogewogICAgICAgICAgICBjb2xvcjogJyNmZmYnCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAvLyBsZWdlbmQ6IHsKICAgICAgICAvLyAgICAgZGF0YTogWyfluILnuqcnLCAn5Zu95a6257qnJ10sCiAgICAgICAgLy8gICAgIGluYWN0aXZlQ29sb3I6ICcjMzMzMzMzJywKICAgICAgICAvLyAgICAgaXRlbVdpZHRoOiAyMCwKICAgICAgICAvLyAgICAgaXRlbUhlaWdodDogNiwKICAgICAgICAvLyAgICAgdGV4dFN0eWxlOiB7CiAgICAgICAgLy8gICAgICAgICBjb2xvcjogJyNCMUUzRkYnLAogICAgICAgIC8vICAgICB9LAogICAgICAgIC8vIH0sCiAgICAgICAgeEF4aXM6IHsKICAgICAgICAgIHR5cGU6ICdjYXRlZ29yeScsCiAgICAgICAgICBib3VuZGFyeUdhcDogZmFsc2UsCiAgICAgICAgICBheGlzVGljazogZmFsc2UsCiAgICAgICAgICBheGlzTGluZTogewogICAgICAgICAgICBsaW5lU3R5bGU6IHsKICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMTU0LDE5OSwyMjAsIDAuMiknCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBheGlzTGFiZWw6IHsKICAgICAgICAgICAgY29sb3I6ICcjRDdGMUZGJwogICAgICAgICAgfSwKICAgICAgICAgIGRhdGE6IHRoaXMuZGVwbG95bWVudFRpbWVZZWFyCiAgICAgICAgfSwKICAgICAgICB5QXhpczogewogICAgICAgICAgdHlwZTogJ3ZhbHVlJywKICAgICAgICAgIG1pbjogMCwKICAgICAgICAgIHNwbGl0TnVtYmVyOiA1LAogICAgICAgICAgYXhpc0xhYmVsOiB7CiAgICAgICAgICAgIGNvbG9yOiAnI0Q3RjFGRicsCiAgICAgICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24gZm9ybWF0dGVyKHZhbCkgewogICAgICAgICAgICAgIGlmICh2YWwgPj0gMSAmJiBwYXJzZUludCh2YWwsIDEwKSA9PT0gdmFsIHx8IHZhbCA9PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgYXhpc0xpbmU6IHsKICAgICAgICAgICAgbGluZVN0eWxlOiB7CiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDE1NCwxOTksMjIwLCAwLjIpJwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgc3BsaXRMaW5lOiB7CiAgICAgICAgICAgIGxpbmVTdHlsZTogewogICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgxNTQsMTk5LDIyMCwgMC4yKScKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY29sb3I6IFsnIzAwRkZGRicsICcjQ0UwMUUwJ10sCiAgICAgICAgc2VyaWVzOiBbCiAgICAgICAgLy8gewogICAgICAgIC8vICAgICBuYW1lOiAn5biC57qnJywKICAgICAgICAvLyAgICAgZGF0YTogdGhpcy5kZXBsb3ltZW50VGltZURhdGExLAogICAgICAgIC8vICAgICB0eXBlOiAnbGluZScsCiAgICAgICAgLy8gICAgIHN5bWJvbDogJ2VtcHR5Q2lyY2xlJywKICAgICAgICAvLyAgICAgc3ltYm9sU2l6ZTogNCwKICAgICAgICAvLyAgICAgYXJlYVN0eWxlOiB7CiAgICAgICAgLy8gICAgICAgICBjb2xvcjogewogICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICdsaW5lYXInLAogICAgICAgIC8vICAgICAgICAgICAgIHg6IDAsCiAgICAgICAgLy8gICAgICAgICAgICAgeTogMCwKICAgICAgICAvLyAgICAgICAgICAgICB4MjogMCwKICAgICAgICAvLyAgICAgICAgICAgICB5MjogMSwKICAgICAgICAvLyAgICAgICAgICAgICBjb2xvclN0b3BzOiBbCiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHsKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMCwKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLDI1NSwyNTUsMSknLCAvLyAwJSDlpITnmoTpopzoibIKICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSwKICAgICAgICAvLyAgICAgICAgICAgICAgICAgewogICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLjQsCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwyNTUsMjU1LCAwLjIpJywgLy8gMCUg5aSE55qE6aKc6ImyCiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sCiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHsKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMSwKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLDI1NSwyNTUsMCknLCAvLyAxMDAlIOWkhOeahOminOiJsgogICAgICAgIC8vICAgICAgICAgICAgICAgICB9LAogICAgICAgIC8vICAgICAgICAgICAgIF0sCiAgICAgICAgLy8gICAgICAgICAgICAgZ2xvYmFsOiBmYWxzZSwgLy8g57y655yB5Li6IGZhbHNlCiAgICAgICAgLy8gICAgICAgICB9LAogICAgICAgIC8vICAgICB9LAogICAgICAgIC8vIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogJ+WbveWutue6pycsCiAgICAgICAgICBkYXRhOiB0aGlzLmRlcGxveW1lbnRUaW1lRGF0YTIsCiAgICAgICAgICB0eXBlOiAnbGluZScsCiAgICAgICAgICBzeW1ib2w6ICdlbXB0eUNpcmNsZScsCiAgICAgICAgICBzeW1ib2xTaXplOiA0LAogICAgICAgICAgYXJlYVN0eWxlOiB7CiAgICAgICAgICAgIGNvbG9yOiB7CiAgICAgICAgICAgICAgdHlwZTogJ2xpbmVhcicsCiAgICAgICAgICAgICAgeDogMCwKICAgICAgICAgICAgICB5OiAwLAogICAgICAgICAgICAgIHgyOiAwLAogICAgICAgICAgICAgIHkyOiAxLAogICAgICAgICAgICAgIGNvbG9yU3RvcHM6IFt7CiAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsCiAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMjA2LCAxLCAyMjQsIDEpJyAvLyAwJSDlpITnmoTpopzoibIKICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBvZmZzZXQ6IDAuNCwKICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgyMDYsIDEsIDIyNCwgMC4yKScgLy8gMCUg5aSE55qE6aKc6ImyCiAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgb2Zmc2V0OiAxLAogICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDIwNiwgMSwgMjI0LCAwKScgLy8gMTAwJSDlpITnmoTpopzoibIKICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICBnbG9iYWw6IGZhbHNlIC8vIOe8uuecgeS4uiBmYWxzZQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfV0KICAgICAgfTsKICAgICAgdGhpcy5kZXBsb3lUaW1lT3B0aW9uICYmIHRoaXMuZGVwbG95VGltZUNoYXJ0LnNldE9wdGlvbih0aGlzLmRlcGxveVRpbWVPcHRpb24pOwogICAgfSwKICAgIGluaXRSZWZvcm1CcmFuZDogZnVuY3Rpb24gaW5pdFJlZm9ybUJyYW5kKCkgewogICAgICB2YXIgY2hhcnREb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVmb3JtLWJyYW5kJyk7CiAgICAgIHRoaXMucmVmb3JtQnJhbmRDaGFydCA9IGVjaGFydHMuaW5pdChjaGFydERvbSk7CiAgICAgIHRoaXMucmVmb3JtQnJhbmRPcHRpb24gPSB7CiAgICAgICAgZ3JpZDogewogICAgICAgICAgLy/lm77ooajnprvlpJblsYLnm5LlrZDnmoTot53nprsKICAgICAgICAgIHRvcDogJzI0JScsCiAgICAgICAgICBib3R0b206IDAsCiAgICAgICAgICBsZWZ0OiAwLAogICAgICAgICAgcmlnaHQ6IDAsCiAgICAgICAgICBjb250YWluTGFiZWw6IHRydWUKICAgICAgICB9LAogICAgICAgIHRvb2x0aXA6IHsKICAgICAgICAgIHRyaWdnZXI6ICdheGlzJywKICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoNiwgNDcsIDEwNywgMSknLAogICAgICAgICAgYm9yZGVyQ29sb3I6ICdyZ2JhKDIsIDExNSwgMjMzLCAxKScsCiAgICAgICAgICB0ZXh0U3R5bGU6IHsKICAgICAgICAgICAgY29sb3I6ICcjZmZmJwogICAgICAgICAgfSwKICAgICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24gZm9ybWF0dGVyKHBhcmFtcykgewogICAgICAgICAgICB2YXIgdGlwU3RyaW5nID0gcGFyYW1zWzBdLmF4aXNWYWx1ZSArICI8YnIgLz4iOwogICAgICAgICAgICB2YXIgc2VyaWVzTmFtZSA9IFsn6I635YWo5Zu95oCn6IKv5a6a6K+E5Lu3JywgJ+iOt+WFqOW4guaOqOW5vycsICfojrfkuK3lpK7lqpLkvZPmt7HluqbkuJPpopjmiqXpgZMnXTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIHRpcFN0cmluZyArPSAiPGRpdiBzdHlsZT1cIndpZHRoOiAyNDBweDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6IGNlbnRlcjtkaXNwbGF5OmZsZXg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6NXB4O2JvcmRlci1yYWRpdXM6MTBweDt3aWR0aDo5cHg7aGVpZ2h0OjlweDtiYWNrZ3JvdW5kOiIuY29uY2F0KHBhcmFtc1tpXS5jb2xvciwgIlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiPiIpLmNvbmNhdChzZXJpZXNOYW1lW2ldLCAiPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7XCI+IikuY29uY2F0KHBhcmFtc1tpXS52YWx1ZSwgIjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGlwU3RyaW5nOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGVnZW5kOiB7CiAgICAgICAgICBkYXRhOiBbJ+WFqOWbveiCr+WumicsICflhajluILmjqjlub8nLCAn5aSu5aqS5oql6YGTJ10sCiAgICAgICAgICBpbmFjdGl2ZUNvbG9yOiAnIzMzMzMzMycsCiAgICAgICAgICBib3JkZXJSYWRpdXM6IDYsCiAgICAgICAgICBpdGVtV2lkdGg6IDIwLAogICAgICAgICAgaXRlbUhlaWdodDogNiwKICAgICAgICAgIHRleHRTdHlsZTogewogICAgICAgICAgICBjb2xvcjogJyNCMUUzRkYnCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB4QXhpczogewogICAgICAgICAgdHlwZTogJ2NhdGVnb3J5JywKICAgICAgICAgIGJvdW5kYXJ5R2FwOiB0cnVlLAogICAgICAgICAgYXhpc1RpY2s6IGZhbHNlLAogICAgICAgICAgYXhpc0xpbmU6IHsKICAgICAgICAgICAgbGluZVN0eWxlOiB7CiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDE1NCwxOTksMjIwLCAwLjIpJwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgYXhpc0xhYmVsOiB7CiAgICAgICAgICAgIGNvbG9yOiAnI0Q3RjFGRicKICAgICAgICAgIH0sCiAgICAgICAgICBkYXRhOiB0aGlzLnhBeGlzRGF0YQogICAgICAgIH0sCiAgICAgICAgeUF4aXM6IHsKICAgICAgICAgIHR5cGU6ICd2YWx1ZScsCiAgICAgICAgICBtaW46IDAsCiAgICAgICAgICBzcGxpdE51bWJlcjogMywKICAgICAgICAgIGF4aXNMYWJlbDogewogICAgICAgICAgICBjb2xvcjogJyNEN0YxRkYnLAogICAgICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uIGZvcm1hdHRlcih2YWwpIHsKICAgICAgICAgICAgICBpZiAodmFsID49IDEgJiYgcGFyc2VJbnQodmFsLCAxMCkgPT09IHZhbCB8fCB2YWwgPT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGF4aXNMaW5lOiB7CiAgICAgICAgICAgIGxpbmVTdHlsZTogewogICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgxNTQsMTk5LDIyMCwgMC4yKScKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHNwbGl0TGluZTogewogICAgICAgICAgICBsaW5lU3R5bGU6IHsKICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMTU0LDE5OSwyMjAsIDAuMiknCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNvbG9yOiBbJyM1OUMwNkMnLCAnIzY0YjRmZicsICcjRkZCNTFGJ10sCiAgICAgICAgc2VyaWVzOiBbewogICAgICAgICAgbmFtZTogJ+WFqOWbveiCr+WumicsCiAgICAgICAgICBkYXRhOiB0aGlzLmJyYW5kQ2hhcnREYXRhMSwKICAgICAgICAgIHR5cGU6ICdiYXInLAogICAgICAgICAgYmFyV2lkdGg6IDYsCiAgICAgICAgICBpdGVtU3R5bGU6IHsKICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA1CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgbmFtZTogJ+WFqOW4guaOqOW5vycsCiAgICAgICAgICBkYXRhOiB0aGlzLmJyYW5kQ2hhcnREYXRhMiwKICAgICAgICAgIHR5cGU6ICdiYXInLAogICAgICAgICAgYmFyV2lkdGg6IDYsCiAgICAgICAgICBpdGVtU3R5bGU6IHsKICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA1CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIHsKICAgICAgICAvLyAgICAgbmFtZTogJ+WkruWqkuaKpemBkycsCiAgICAgICAgLy8gICAgIGRhdGE6IHRoaXMuYnJhbmRDaGFydERhdGEzLAogICAgICAgIC8vICAgICB0eXBlOiAnbGluZScsCiAgICAgICAgLy8gICAgIHN5bWJvbDogJ2VtcHR5Q2lyY2xlJywKICAgICAgICAvLyAgICAgc3ltYm9sU2l6ZTogNCwKICAgICAgICAvLyAgICAgYXJlYVN0eWxlOiB7CiAgICAgICAgLy8gICAgICAgICBjb2xvcjogewogICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICdsaW5lYXInLAogICAgICAgIC8vICAgICAgICAgICAgIHg6IDAsCiAgICAgICAgLy8gICAgICAgICAgICAgeTogMCwKICAgICAgICAvLyAgICAgICAgICAgICB4MjogMCwKICAgICAgICAvLyAgICAgICAgICAgICB5MjogMSwKICAgICAgICAvLyAgICAgICAgICAgICBjb2xvclN0b3BzOiBbCiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHsKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMCwKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgyNTUsIDE4MSwgMzEsIDEpJywgLy8gMCUg5aSE55qE6aKc6ImyCiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sCiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHsKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMC40LAogICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDI1NSwgMTgxLCAzMSwgMC4yKScsIC8vIDAlIOWkhOeahOminOiJsgogICAgICAgIC8vICAgICAgICAgICAgICAgICB9LAogICAgICAgIC8vICAgICAgICAgICAgICAgICB7CiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMjU1LCAxODEsIDMxLCAwKScsIC8vIDEwMCUg5aSE55qE6aKc6ImyCiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sCiAgICAgICAgLy8gICAgICAgICAgICAgXSwKICAgICAgICAvLyAgICAgICAgICAgICBnbG9iYWw6IGZhbHNlLCAvLyDnvLrnnIHkuLogZmFsc2UKICAgICAgICAvLyAgICAgICAgIH0sCiAgICAgICAgLy8gICAgIH0sCiAgICAgICAgLy8gfSwKICAgICAgICBdCiAgICAgIH07CiAgICAgIHRoaXMucmVmb3JtQnJhbmRPcHRpb24gJiYgdGhpcy5yZWZvcm1CcmFuZENoYXJ0LnNldE9wdGlvbih0aGlzLnJlZm9ybUJyYW5kT3B0aW9uKTsKICAgIH0sCiAgICAvLyDliIfmjaLlnLDlm77liIbnsbvmjInpkq4KICAgIGNoYW5nZU1hcEJ0bjogZnVuY3Rpb24gY2hhbmdlTWFwQnRuKGtleSkgewogICAgICB0aGlzLmFjdGl2ZUJ0bktleSA9IGtleTsKICAgICAgaWYgKGtleSA9PSAnY29tcG9zaXRlJykgewogICAgICAgIHRoaXMuaGFuZGxlTWFwQXJlYSh0aGlzLmNvbXBvc2l0ZU1hcERhdGEsIGtleSk7CiAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICd3b3JrYWJsZScpIHsKICAgICAgICB0aGlzLmhhbmRsZU1hcEFyZWEodGhpcy53b3JrYWJsZU1hcERhdGEsIGtleSk7CiAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICdicmFuZCcpIHsKICAgICAgICB0aGlzLmhhbmRsZU1hcEFyZWEodGhpcy5icmFuZE1hcERhdGEsIGtleSk7CiAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICdzYXRpc2ZhY3Rpb24nKSB7CiAgICAgICAgdGhpcy5oYW5kbGVNYXBBcmVhKHRoaXMuc2F0aXNmYWN0aW9uTWFwRGF0YSwga2V5KTsKICAgICAgfSBlbHNlIGlmIChrZXkgPT0gJ3Jpc2snKSB7CiAgICAgICAgdGhpcy5oYW5kbGVNYXBBcmVhKHRoaXMucmlza01hcERhdGEsIGtleSk7CiAgICAgIH0KICAgIH0sCiAgICAvLyDmjInpkq7liIfmjaLlhoXlrrkKICAgIGNoYW5nZUJ0blRhYjogZnVuY3Rpb24gY2hhbmdlQnRuVGFiKGl0ZW0pIHsKICAgICAgdGhpcy5hY3RpdmVCdG4gPSBpdGVtOwogICAgfSwKICAgIC8vIOWHhuWkh+WcsOWbvuaVsOaNrgogICAgcHJlTWFwRGF0YTogZnVuY3Rpb24gcHJlTWFwRGF0YShkYXRhKSB7CiAgICAgIC8vIHRoaXMuaGFuZGxlTWFwQXJlYSh0aGlzLm1hcERhdGFBbGwsICdzeW5HcmFkZScpCiAgICAgIHRoaXMuaGFuZGxlTWFwQXJlYSh0aGlzLm1hcERhdGFLaWRlLCAnYWxsR3JhZGUnKTsKICAgICAgLy8gdGhpcy5oYW5kbGVNYXBBcmVhKHRoaXMubWFwRGF0YUtpZGUsICduYXRpb25hbFByb2plY3RHcmFkZScpCgogICAgICAvLyB0aGlzLmtpbmRJbmRleCA9IDE7CiAgICAgIC8vIHRoaXMuJG5leHRUaWNrKCgpID0+IHsKICAgICAgLy8gICAgICB0aGlzLiRyZWZzLm15U3dpcGVyLnN3aXBlci5hdXRvcGxheS5zdGFydCgpCiAgICAgIC8vIH0pCiAgICAgIC8vIHRoaXMuc3dpcGVyLnNsaWRlTmV4dCgpCiAgICAgIHRoaXMuY2hhbmdlTWFwVHlwZSgpOwogICAgICB0aGlzLmluaXRTd2lwZXIoKTsKICAgICAgLy8gdGhpcy50aW1lciA9IHNldEludGVydmFsKCgpID0+IHsKICAgICAgLy8gICAgIHRoaXMuY2hhbmdlTWFwVHlwZSgpCiAgICAgIC8vIH0sIDUwMDApCiAgICB9LAogICAgY2hhbmdlTWFwVHlwZTogZnVuY3Rpb24gY2hhbmdlTWFwVHlwZSgpIHsKICAgICAgLy8gY29uc29sZS5sb2codGhpcy5raW5kSW5kZXgpCiAgICAgIC8vIGxldCBkYXRhCiAgICAgIC8vIGlmICh0aGlzLmtpbmRJbmRleCA9PSAwKSB7CiAgICAgIC8vICAgICBkYXRhID0gdGhpcy5tYXBEYXRhQWxsCiAgICAgIC8vIH0gZWxzZSB7CiAgICAgIC8vICAgICBkYXRhID0gdGhpcy5tYXBEYXRhS2lkZQogICAgICAvLyB9CiAgICAgIHZhciBkYXRhID0gdGhpcy5tYXBEYXRhS2lkZTsKICAgICAgdmFyIGxqeHFHcmFkZSA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgcmV0dXJuIGl0ZW0udW5pdENvZGUgPT09ICc1MDAxOTEwMDAwMDAnOwogICAgICB9KTsKICAgICAgdmFyIGd4cUdyYWRlID0gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICByZXR1cm4gaXRlbS51bml0Q29kZSA9PT0gJzUwMDE5MzAwMDAwMCc7CiAgICAgIH0pOwogICAgICBjb25zb2xlLmxvZyhsanhxR3JhZGUsIGd4cUdyYWRlKTsKICAgICAgdGhpcy5sanhxR3JhZGUgPSBsanhxR3JhZGVbMF1bdGhpcy5tYXBLZXlBcnJbdGhpcy5raW5kSW5kZXhdXTsKICAgICAgdGhpcy5neHFHcmFkZSA9IGd4cUdyYWRlWzBdW3RoaXMubWFwS2V5QXJyW3RoaXMua2luZEluZGV4XV07CiAgICAgIHRoaXMuaGFuZGxlTWFwQXJlYShkYXRhLCB0aGlzLm1hcEtleUFyclt0aGlzLmtpbmRJbmRleF0pOwoKICAgICAgLy8gdGhpcy5raW5kSW5kZXggPSB0aGlzLmtpbmRJbmRleCArIDEKCiAgICAgIC8vIGlmICh0aGlzLmtpbmRJbmRleCA9PSA3KSB7CiAgICAgIC8vICAgICB0aGlzLmtpbmRJbmRleCA9IDAKICAgICAgLy8gfQogICAgfSwKICAgIGhhbmRsZU1hcEFyZWE6IGZ1bmN0aW9uIGhhbmRsZU1hcEFyZWEobWFya0RhdGEsIGtleSkgewogICAgICB0aGlzLm9wdGlvbkNRLnNlcmllc1swXS5kYXRhID0gdGhpcy5jb252ZXJ0RGF0YShjcS5mZWF0dXJlcywgbWFya0RhdGEsIGtleSk7CiAgICAgIHRoaXMub3B0aW9uTWFpbi5zZXJpZXNbMF0uZGF0YSA9IHRoaXMuY29udmVydERhdGEobWFpbjkuZmVhdHVyZXMsIG1hcmtEYXRhLCBrZXksIHRydWUpOwogICAgICB0aGlzLm15Q2hhcnRDUS5zZXRPcHRpb24odGhpcy5vcHRpb25DUSk7CiAgICAgIHRoaXMubXlDaGFydE1haW4uc2V0T3B0aW9uKHRoaXMub3B0aW9uTWFpbik7CiAgICAgIGlmICh0aGlzLnN3aXBlcikgewogICAgICAgIHRoaXMuc3dpcGVyLnNsaWRlTmV4dCgpOwogICAgICB9CiAgICB9LAogICAgaW5pdE1hcENROiBmdW5jdGlvbiBpbml0TWFwQ1EoKSB7CiAgICAgIHZhciBfdGhpczE0ID0gdGhpczsKICAgICAgdmFyIGRvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcS1jb250aWFuZXInKTsKICAgICAgdmFyIHdpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZShkb20pLmdldFByb3BlcnR5VmFsdWUoJ3dpZHRoJykucmVwbGFjZSgncHgnLCAnJyk7CiAgICAgIHZhciBoZWlnaHQgPSBnZXRDb21wdXRlZFN0eWxlKGRvbSkuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0JykucmVwbGFjZSgncHgnLCAnJyk7CiAgICAgIHdpZHRoID0gcGFyc2VJbnQod2lkdGgsIDEwKTsKICAgICAgaGVpZ2h0ID0gcGFyc2VJbnQoaGVpZ2h0LCAxMCk7CiAgICAgIHRoaXMubXlDaGFydENRID0gZWNoYXJ0cy5pbml0KGRvbSwgbnVsbCwgewogICAgICAgIHJlbmRlcmVyOiAnc3ZnJywKICAgICAgICB3aWR0aDogd2lkdGgsCiAgICAgICAgaGVpZ2h0OiBoZWlnaHQKICAgICAgfSk7CiAgICAgIC8vIOazqOWGjCBlY2hhcnRzIOWcsOWbvgoKICAgICAgZWNoYXJ0cy5yZWdpc3Rlck1hcCgnY3EnLCBjcSk7CiAgICAgIHZhciBtYXJrUG9pbnREYXRhID0gW107CiAgICAgIHZhciBtYXAgPSAnY3EnLAogICAgICAgIHRvcCA9ICIzOCUiLAogICAgICAgIGxlZnQgPSAnLTE2JScsCiAgICAgICAgem9vbSA9IDEuMiwKICAgICAgICBhc3BlY3RTY2FsZSA9IDEsCiAgICAgICAgY2VudGVyID0gWzEwNi41MDQ5LCAyOV0sCiAgICAgICAgLy8g5Zyw5Zu+5Lit5b+D5L2N572u77yMIOatpOWkhOeahOe6rOW6puS4juS4i+mdoueahGNlbnRlcuebuOW3rjHluqbmmK/lvaLmiJDpmLTlvbHnmoTot53nprvvvIzlj6/oh6rlt7Hpmo/mhI/osIPmlbQKICAgICAgICBsYXlvdXRDZW50ZXIgPSBbJzUwJScsICc1MCUnXTsKICAgICAgdGhpcy5vcHRpb25DUSA9IHsKICAgICAgICBzZXJpZXM6IFt7CiAgICAgICAgICBuYW1lOiAn6YeN5bqGJywKICAgICAgICAgIHR5cGU6ICdtYXAnLAogICAgICAgICAgLy/phY3nva7mmL7npLrmlrnlvI/kuLrnlKjmiLfoh6rlrprkuYkKICAgICAgICAgIG1hcDogbWFwLAogICAgICAgICAgem9vbTogem9vbSwKICAgICAgICAgIC8vIOWcsOWbvuavlOS+iwogICAgICAgICAgemxldmVsOiAxMDAsCiAgICAgICAgICBjZW50ZXI6IGNlbnRlciwKICAgICAgICAgIC8vIOWcsOWbvuS4reW/g+S9jee9ru+8jCDmraTlpITnmoTnuqzluqbkuI7kuIvpnaLnmoRjZW50ZXLnm7jlt64x5bqm5piv5b2i5oiQ6Zi05b2x55qE6Led56a777yM5Y+v6Ieq5bex6ZqP5oSP6LCD5pW0CiAgICAgICAgICBhc3BlY3RTY2FsZTogYXNwZWN0U2NhbGUsCiAgICAgICAgICByb2FtOiBmYWxzZSwKICAgICAgICAgIHNjYWxlTGltaXQ6IHsKICAgICAgICAgICAgbWluOiAwLjYsCiAgICAgICAgICAgIG1heDogNAogICAgICAgICAgfSwKICAgICAgICAgIGl0ZW1TdHlsZTogewogICAgICAgICAgICBub3JtYWw6IHsKICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMSwKICAgICAgICAgICAgICAvL+iuvue9ruWkluWxgui+ueahhgogICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnIzJkZGNmZCcKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGVtcGhhc2lzOiB7CiAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlCiAgICAgICAgICB9LAogICAgICAgICAgdG9wOiB0b3AsCiAgICAgICAgICBsZWZ0OiBsZWZ0LAogICAgICAgICAgZGF0YTogdGhpcy5jb252ZXJ0RGF0YShjcS5mZWF0dXJlcywgZmFrZURhdGEuYnRua2V5MSwgJ3Jpc2snKQogICAgICAgIH1dCiAgICAgIH07CiAgICAgIHRoaXMubXlDaGFydENRLnNldE9wdGlvbih0aGlzLm9wdGlvbkNRKTsKICAgICAgdGhpcy5teUNoYXJ0Q1Eub24oJ2NsaWNrJywgZnVuY3Rpb24gKHBhcmFtcykgewogICAgICAgIHZhciBjb2RlID0gcGFyYW1zLnZhbHVlOwogICAgICAgIGlmICghY29kZSkgewogICAgICAgICAgY29kZSA9IF90aGlzMTQuZ2V0QXJlYUNvZGUocGFyYW1zLm5hbWUsIGNxKTsKICAgICAgICB9CiAgICAgICAgX3RoaXMxNC4kcm91dGVyLnB1c2goewogICAgICAgICAgcGF0aDogJy9EaXN0cmljdFJlZm9ybVN1YlZpZXcnLAogICAgICAgICAgcXVlcnk6IHsKICAgICAgICAgICAgbmFtZTogcGFyYW1zLm5hbWUsCiAgICAgICAgICAgIGNvZGU6IGNvZGUKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB2YXIgdG9vbHRpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2RhdGEtdG9vbHRpcCcpOwogICAgICAgIEFycmF5LmZyb20odG9vbHRpcCkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaXRlbS5yZW1vdmUoKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgb3BlbkRpYWxvZzogZnVuY3Rpb24gb3BlbkRpYWxvZyhwb3NpdGlvbikgewogICAgICBpZiAoIXRoaXMubWFwRGlhbG9nU2hvdykgdGhpcy5tYXBEaWFsb2dTaG93ID0gdHJ1ZTsKICAgICAgdGhpcy5tYXBEaWFsb2dsZWZ0ID0gcG9zaXRpb24uY2xpZW50WCArIDEwOwogICAgICB0aGlzLm1hcERpYWxvZ1RvcCA9IHBvc2l0aW9uLmNsaWVudFkgKyAxMDsKICAgIH0sCiAgICBpbml0TWFwTWFpbjogZnVuY3Rpb24gaW5pdE1hcE1haW4oKSB7CiAgICAgIHZhciBfdGhpczE1ID0gdGhpczsKICAgICAgdGhpcy5teUNoYXJ0TWFpbiA9IGVjaGFydHMuaW5pdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbjktY29udGlhbmVyJyksIG51bGwsIHsKICAgICAgICByZW5kZXJlcjogJ3N2ZycKICAgICAgfSk7CiAgICAgIC8vIOazqOWGjCBlY2hhcnRzIOWcsOWbvgogICAgICBlY2hhcnRzLnJlZ2lzdGVyTWFwKCdtYWluOScsIG1haW45KTsKICAgICAgdmFyIG1hcmtQb2ludERhdGEgPSBbXTsKICAgICAgdmFyIHRvcCA9IDI0LAogICAgICAgIGxlZnQgPSA0NSwKICAgICAgICB6b29tID0gMS4yLAogICAgICAgIG1hcCA9ICdtYWluOScsCiAgICAgICAgYXNwZWN0U2NhbGUgPSAxLAogICAgICAgIGxheW91dENlbnRlciA9IFsnNTAlJywgJzUwJSddLAogICAgICAgIGNlbnRlciA9IFsxMDYuMjA0OTYyLCAyOS41MzMxNTVdOyAvLyDlnLDlm77kuK3lv4PkvY3nva7vvIwg5q2k5aSE55qE57qs5bqm5LiO5LiL6Z2i55qEY2VudGVy55u45beuMeW6puaYr+W9ouaIkOmYtOW9seeahOi3neemu++8jOWPr+iHquW3semaj+aEj+iwg+aVtAogICAgICB0aGlzLm9wdGlvbk1haW4gPSB7CiAgICAgICAgZ2VvOiBbewogICAgICAgICAgbWFwOiBtYXAsCiAgICAgICAgICB6b29tOiB6b29tLAogICAgICAgICAgemxldmVsOiAwLAogICAgICAgICAgYXNwZWN0U2NhbGU6IGFzcGVjdFNjYWxlLAogICAgICAgICAgaXRlbVN0eWxlOiB7CiAgICAgICAgICAgIG5vcm1hbDogewogICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAwCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBlbXBoYXNpczogewogICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZQogICAgICAgICAgfSwKICAgICAgICAgIHRvb2x0aXA6IHsKICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgIH0sCiAgICAgICAgICB0b3A6IHRvcCwKICAgICAgICAgIGxlZnQ6IGxlZnQKICAgICAgICAgIC8vIGxheW91dENlbnRlcgogICAgICAgIH1dLAogICAgICAgIHNlcmllczogW3sKICAgICAgICAgIG5hbWU6ICfph43luobkuLvln44nLAogICAgICAgICAgdHlwZTogJ21hcCcsCiAgICAgICAgICBtYXA6IG1hcCwKICAgICAgICAgIHpvb206IHpvb20sCiAgICAgICAgICAvLyDlnLDlm77mr5TkvosKICAgICAgICAgIHpsZXZlbDogMTAwLAogICAgICAgICAgLy8gY2VudGVyLCAvLyDlnLDlm77kuK3lv4PkvY3nva7vvIwg5q2k5aSE55qE57qs5bqm5LiO5LiL6Z2i55qEY2VudGVy55u45beuMeW6puaYr+W9ouaIkOmYtOW9seeahOi3neemu++8jOWPr+iHquW3semaj+aEj+iwg+aVtAogICAgICAgICAgYXNwZWN0U2NhbGU6IGFzcGVjdFNjYWxlLAogICAgICAgICAgaXRlbVN0eWxlOiB7CiAgICAgICAgICAgIG5vcm1hbDogewogICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLAogICAgICAgICAgICAgIC8v6K6+572u5aSW5bGC6L655qGGCiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd3aGl0ZScKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGVtcGhhc2lzOiB7CiAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlLAogICAgICAgICAgICBpdGVtU3R5bGU6IHsKICAgICAgICAgICAgICBhcmVhQ29sb3I6ICd5ZWxsb3cnCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB0b3A6IHRvcCwKICAgICAgICAgIGxlZnQ6IGxlZnQsCiAgICAgICAgICBkYXRhOiB0aGlzLmNvbnZlcnREYXRhKG1haW45LmZlYXR1cmVzLCBmYWtlRGF0YS5idG5rZXkxLCAncmlzaycsIHRydWUpCiAgICAgICAgfV0KICAgICAgfTsKICAgICAgdGhpcy5teUNoYXJ0TWFpbi5zZXRPcHRpb24odGhpcy5vcHRpb25NYWluKTsKICAgICAgdGhpcy5teUNoYXJ0TWFpbi5vbignY2xpY2snLCBmdW5jdGlvbiAocGFyYW1zKSB7CiAgICAgICAgdmFyIGNvZGUgPSBwYXJhbXMudmFsdWU7CiAgICAgICAgaWYgKCFjb2RlKSB7CiAgICAgICAgICBjb2RlID0gX3RoaXMxNS5nZXRBcmVhQ29kZShwYXJhbXMubmFtZSwgbWFpbjkpOwogICAgICAgIH0KICAgICAgICBfdGhpczE1LiRyb3V0ZXIucHVzaCh7CiAgICAgICAgICBwYXRoOiAnL0Rpc3RyaWN0UmVmb3JtU3ViVmlldycsCiAgICAgICAgICBxdWVyeTogewogICAgICAgICAgICBuYW1lOiBwYXJhbXMubmFtZSwKICAgICAgICAgICAgY29kZTogY29kZQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHZhciB0b29sdGlwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRhdGEtdG9vbHRpcCcpOwogICAgICAgIEFycmF5LmZyb20odG9vbHRpcCkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaXRlbS5yZW1vdmUoKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgZ2V0QXJlYUNvZGU6IGZ1bmN0aW9uIGdldEFyZWFDb2RlKG5hbWUsIGRhdGFUeXBlKSB7CiAgICAgIHZhciBjb2RlOwogICAgICBkYXRhVHlwZS5mZWF0dXJlcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgaWYgKGl0ZW0ucHJvcGVydGllcy5uYW1lID09IG5hbWUpIHsKICAgICAgICAgIGNvZGUgPSBpdGVtLnByb3BlcnRpZXMuY29kZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gY29kZTsKICAgIH0sCiAgICByZXNpemU6IGZ1bmN0aW9uIHJlc2l6ZShkZWxheSkgewogICAgICB2YXIgX3RoaXMxNiA9IHRoaXM7CiAgICAgIC8vIOWKqOaAgeiuoeeul+ihqOagvOeahOmrmOW6pu+8jOiHqumAguW6lOW9k+WJjeWuueWZqAogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NxLWNvbnRpYW5lcicpOwogICAgICAgIGlmICghZG9tKSByZXR1cm47CiAgICAgICAgdmFyIHdpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZShkb20pLmdldFByb3BlcnR5VmFsdWUoJ3dpZHRoJykucmVwbGFjZSgncHgnLCAnJyk7CiAgICAgICAgdmFyIGhlaWdodCA9IGdldENvbXB1dGVkU3R5bGUoZG9tKS5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKS5yZXBsYWNlKCdweCcsICcnKTsKICAgICAgICB3aWR0aCA9IHBhcnNlSW50KHdpZHRoLCAxMCk7CiAgICAgICAgaGVpZ2h0ID0gcGFyc2VJbnQoaGVpZ2h0LCAxMCk7CiAgICAgICAgX3RoaXMxNi5teUNoYXJ0Q1EucmVzaXplKHsKICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0CiAgICAgICAgfSk7CiAgICAgICAgX3RoaXMxNi5teUNoYXJ0TWFpbi5yZXNpemUoKTsKICAgICAgICBfdGhpczE2LmRlcGxveVRpbWVDaGFydC5yZXNpemUoKTsKICAgICAgICBfdGhpczE2LnJlZm9ybUJyYW5kQ2hhcnQucmVzaXplKCk7CiAgICAgIH0sIGRlbGF5IHx8IDApOwogICAgfQogIH0KfTs="},null]}