{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\eslint-loader\\index.js??ref--13-0!D:\\jenkins\\workspace\\xcjy-fvue\\src\\store\\storeProcess.js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\store\\storeProcess.js","mtime":1741314105284},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\babel.config.js","mtime":1741314102158},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS94Y2p5LWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIjsKaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNwbGljZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwppbXBvcnQgcHJvY2VzcyBmcm9tICJAL2FwaS9wcm9jZXNzLmpzIjsKaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJ2VsZW1lbnQtdWknOwppbXBvcnQgeyBMb2FkaW5nIH0gZnJvbSAiZWxlbWVudC11aSI7CnZhciBzdGF0ZSA9IHsKICBwYWdpbmF0aW9uOiB7fSwKICAvL+WIhumhteWPguaVsAogIHJvd3M6IFtdLAogIC8v5YiX6KGo5pWw5o2uCiAgdG90YWw6IDAsCiAgLy/liJfooajmlbDmja7mgLvmnaHmlbAKICB0cmVlOiBbXSwKICAvL+a1geeoi+WIhuexu+aVsOaNrgogIHJvd3NCdG46IFtdLAogIC8v5pON5L2c5oyJ6ZKuCiAgYXBwcm92YWxJdGVtOiBbXSwKICAvL+WuoeaJueW4uOeUqOivrQogIG9waW5pb25zOiBbXSwKICAvL+WuoeaJueiusOW9lQogIG5vZGVzOiBbXSwKICAvL+S7u+WKoeiKgueCuQogIGNoZWNrZWROb2RlczogW10sCiAgLy/ot5/ouKrkuobnmoTku7vliqHoioLngrkKICBicG1FeGVTdGFja3NVc2VyTm9kZTogW10sCiAgLy/lj6/pqbPlm57nmoTku7vliqHoioLngrkKICByZWxhdGVkSW5mb3JtYXRpb246IHt9LAogIC8v55u45YWz5L+h5oGvCiAgZHVlVGltZToge30sCiAgLy/ku7vliqHlu7bmnJ/mtojmga8KICBuZXh0RXhlY3V0b3I6IG51bGwsCiAgLy8g6aG65bqP562+572yIOS4i+S4gOatpeaJp+ihjOS6ugogIGZvcmNlTG9jazogZmFsc2UsCiAgLy/mmK/lkKblvLrliLbnrb7mlLYKICBzaWduYXR1cmVDb25maWc6IHsKICAgIHN0YXR1czogJ2Rpc2FibGUnLAogICAgZmllbGQ6ICcnLAogICAgaXNDb3ZlcjogZmFsc2UsCiAgICBzZWNyZXRGcmVlOiBmYWxzZSwKICAgIHBhc3N3b3JkOiAnJwogIH0gLy/nrb7nq6DphY3nva4gc3RhdHVzOmRpc2FibGUo5pyq5ZCv55SoKe+8jHN0YXJ077yI5byA5aeL77yJ77yMaW5nKOi/m+ihjOS4rSnvvIxzdWNjZXNzKOaIkOWKnynvvIxmYWlsKOWksei0pSkKfTsKdmFyIGdldHRlcnMgPSB7fTsKdmFyIGFjdGlvbnMgPSB7CiAgLy/mm7TmlrDmr4/pobXkuIvmi4nmmL7npLrmlbDmja4KICBzZXRQYWdpbmF0aW9uU2l6ZTogZnVuY3Rpb24gc2V0UGFnaW5hdGlvblNpemUoX3JlZiwgc2l6ZSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7CiAgICBjb21taXQoInNldFBhZ2luYXRpb25TaXplIiwgc2l6ZSk7CiAgfSwKICAvL+abtOaWsOesrOWHoOmhtQogIHNldFBhZ2luYXRpb25QYWdlTnVtOiBmdW5jdGlvbiBzZXRQYWdpbmF0aW9uUGFnZU51bShfcmVmMiwgY3VycmVudFBhZ2UpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMi5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjIuc3RhdGU7CiAgICBjb21taXQoInNldFBhZ2luYXRpb25QYWdlTnVtIiwgY3VycmVudFBhZ2UpOwogIH0sCiAgLy/ojrflj5bmtYHnqIvliIbnsbvliJfooagKICBnZXRGbG93VHJlZTogZnVuY3Rpb24gZ2V0Rmxvd1RyZWUoX3JlZjMpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMy5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjMuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldEZsb3dUcmVlKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgICAgY29tbWl0KCJzZXRGbG93VHJlZXMiLCByZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5b6F5Yqe5YiX6KGoCiAgZ2V0VG9kb0J5UGFnaW5hdGlvbjogZnVuY3Rpb24gZ2V0VG9kb0J5UGFnaW5hdGlvbihfcmVmNCwgcGFnaW5hdGlvbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWY0LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNC5zdGF0ZTsKICAgIGNvbW1pdCgiY2xlYXJMaXN0RGF0YSIpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRUb2RvQnlQYWdpbmF0aW9uKHBhZ2luYXRpb24sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGNvbW1pdCgic2V0Um93cyIsIHJlc3BvbnNlLmRhdGEucm93cyk7IC8v5b6F5Yqe5pWw5o2uCiAgICAgICAgY29tbWl0KCJzZXRUb3RhbCIsIHJlc3BvbnNlLmRhdGEudG90YWwpOyAvL+aAu+aVsOaNruadoeaVsAogICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICJwYWdlIjogcmVzcG9uc2UuZGF0YS5wYWdlLAogICAgICAgICAgInBhZ2VTaXplIjogcmVzcG9uc2UuZGF0YS5wYWdlU2l6ZSwKICAgICAgICAgICJzaG93VG90YWwiOiAidHJ1ZSIKICAgICAgICB9OyAvL+aOpeWPo+aWueazlei/lOWbnueahHBhZ2VCZWFuCiAgICAgICAgY29tbWl0KCJzZXRQYWdpbmF0aW9uIiwgcGFnZUJlYW4pOyAvL+aYvuekuuesrOWHoOmhte+8jOavj+mhteaYvuekuuWkmuWwkeadoQogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YS5yb3dzKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W6aKG5a+85b6F5Yqe5YiX6KGoCiAgZ2V0TGVhZGVyVG9kb0J5UGFnaW5hdGlvbjogZnVuY3Rpb24gZ2V0TGVhZGVyVG9kb0J5UGFnaW5hdGlvbihfcmVmNSwgcGFnaW5hdGlvbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWY1LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNS5zdGF0ZTsKICAgIGNvbW1pdCgiY2xlYXJMaXN0RGF0YSIpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRMZWFkZXJUb2RvQnlQYWdpbmF0aW9uKHBhZ2luYXRpb24sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGNvbW1pdCgic2V0Um93cyIsIHJlc3BvbnNlLmRhdGEucm93cyk7IC8v5b6F5Yqe5pWw5o2uCiAgICAgICAgY29tbWl0KCJzZXRUb3RhbCIsIHJlc3BvbnNlLmRhdGEudG90YWwpOyAvL+aAu+aVsOaNruadoeaVsAogICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICJwYWdlIjogcmVzcG9uc2UuZGF0YS5wYWdlLAogICAgICAgICAgInBhZ2VTaXplIjogcmVzcG9uc2UuZGF0YS5wYWdlU2l6ZSwKICAgICAgICAgICJzaG93VG90YWwiOiAidHJ1ZSIKICAgICAgICB9OyAvL+aOpeWPo+aWueazlei/lOWbnueahHBhZ2VCZWFuCiAgICAgICAgY29tbWl0KCJzZXRQYWdpbmF0aW9uIiwgcGFnZUJlYW4pOyAvL+aYvuekuuesrOWHoOmhte+8jOavj+mhteaYvuekuuWkmuWwkeadoQogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+iOt+WPluaIkei9rOWKnueahOWIl+ihqAogIGdldERlbGVnYXRlOiBmdW5jdGlvbiBnZXREZWxlZ2F0ZShfcmVmNiwgcGFnaW5hdGlvbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWY2LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNi5zdGF0ZTsKICAgIGNvbW1pdCgiY2xlYXJMaXN0RGF0YSIpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXREZWxlZ2F0ZShwYWdpbmF0aW9uLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBjb21taXQoInNldFJvd3MiLCByZXNwb25zZS5kYXRhLnJvd3MpOyAvL+W+heWKnuaVsOaNrgogICAgICAgIGNvbW1pdCgic2V0VG90YWwiLCByZXNwb25zZS5kYXRhLnRvdGFsKTsgLy/mgLvmlbDmja7mnaHmlbAKICAgICAgICB2YXIgcGFnZUJlYW4gPSB7CiAgICAgICAgICAicGFnZSI6IHJlc3BvbnNlLmRhdGEucGFnZSwKICAgICAgICAgICJwYWdlU2l6ZSI6IHJlc3BvbnNlLmRhdGEucGFnZVNpemUsCiAgICAgICAgICAic2hvd1RvdGFsIjogInRydWUiCiAgICAgICAgfTsgLy/mjqXlj6Pmlrnms5Xov5Tlm57nmoRwYWdlQmVhbgogICAgICAgIGNvbW1pdCgic2V0UGFnaW5hdGlvbiIsIHBhZ2VCZWFuKTsgLy/mmL7npLrnrKzlh6DpobXvvIzmr4/pobXmmL7npLrlpJrlsJHmnaEKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEucm93cyk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+iOt+WPluaIkeS8oOmYheeahOS7u+WKoeWIl+ihqAogIGdldE15Tm90aWNlUmVhZExpc3Q6IGZ1bmN0aW9uIGdldE15Tm90aWNlUmVhZExpc3QoX3JlZjcsIHBhZ2luYXRpb24pIHsKICAgIHZhciBjb21taXQgPSBfcmVmNy5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjcuc3RhdGU7CiAgICBjb21taXQoImNsZWFyTGlzdERhdGEiKTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0TXlOb3RpY2VSZWFkTGlzdChwYWdpbmF0aW9uLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBjb21taXQoInNldFJvd3MiLCByZXNwb25zZS5kYXRhLnJvd3MpOyAvL+W+heWKnuaVsOaNrgogICAgICAgIGNvbW1pdCgic2V0VG90YWwiLCByZXNwb25zZS5kYXRhLnRvdGFsKTsgLy/mgLvmlbDmja7mnaHmlbAKICAgICAgICB2YXIgcGFnZUJlYW4gPSB7CiAgICAgICAgICAicGFnZSI6IHJlc3BvbnNlLmRhdGEucGFnZSwKICAgICAgICAgICJwYWdlU2l6ZSI6IHJlc3BvbnNlLmRhdGEucGFnZVNpemUsCiAgICAgICAgICAic2hvd1RvdGFsIjogInRydWUiCiAgICAgICAgfTsgLy/mjqXlj6Pmlrnms5Xov5Tlm57nmoRwYWdlQmVhbgogICAgICAgIGNvbW1pdCgic2V0UGFnaW5hdGlvbiIsIHBhZ2VCZWFuKTsgLy/mmL7npLrnrKzlh6DpobXvvIzmr4/pobXmmL7npLrlpJrlsJHmnaEKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEucm93cyk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+WIoOmZpOS8oOmYheS7u+WKoQogIGRlbEJwbVRhc2tOb3RpY2VCeUlkOiBmdW5jdGlvbiBkZWxCcG1UYXNrTm90aWNlQnlJZChfcmVmOCwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmOC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjguc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmRlbEJwbVRhc2tOb3RpY2VCeUlkKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5b6F6ZiF5YiX6KGoCiAgZ2V0Tm90aWNlVG9kb1JlYWRMaXN0OiBmdW5jdGlvbiBnZXROb3RpY2VUb2RvUmVhZExpc3QoX3JlZjksIHBhZ2luYXRpb24pIHsKICAgIHZhciBjb21taXQgPSBfcmVmOS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjkuc3RhdGU7CiAgICBjb21taXQoImNsZWFyTGlzdERhdGEiKTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0Tm90aWNlVG9kb1JlYWRMaXN0KHBhZ2luYXRpb24sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGNvbW1pdCgic2V0Um93cyIsIHJlc3BvbnNlLmRhdGEucm93cyk7IC8v5b6F5Yqe5pWw5o2uCiAgICAgICAgY29tbWl0KCJzZXRUb3RhbCIsIHJlc3BvbnNlLmRhdGEudG90YWwpOyAvL+aAu+aVsOaNruadoeaVsAogICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICJwYWdlIjogcmVzcG9uc2UuZGF0YS5wYWdlLAogICAgICAgICAgInBhZ2VTaXplIjogcmVzcG9uc2UuZGF0YS5wYWdlU2l6ZSwKICAgICAgICAgICJzaG93VG90YWwiOiAidHJ1ZSIKICAgICAgICB9OyAvL+aOpeWPo+aWueazlei/lOWbnueahHBhZ2VCZWFuCiAgICAgICAgY29tbWl0KCJzZXRQYWdpbmF0aW9uIiwgcGFnZUJlYW4pOyAvL+aYvuekuuesrOWHoOmhte+8jOavj+mhteaYvuekuuWkmuWwkeadoQogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YS5yb3dzKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5bey6ZiF5YiX6KGoCiAgZ2V0Tm90aWNlRG9uZVJlYWRMaXN0OiBmdW5jdGlvbiBnZXROb3RpY2VEb25lUmVhZExpc3QoX3JlZjEwLCBwYWdpbmF0aW9uKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjEwLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMTAuc3RhdGU7CiAgICBjb21taXQoImNsZWFyTGlzdERhdGEiKTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0Tm90aWNlRG9uZVJlYWRMaXN0KHBhZ2luYXRpb24sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGNvbW1pdCgic2V0Um93cyIsIHJlc3BvbnNlLmRhdGEucm93cyk7IC8v5b6F5Yqe5pWw5o2uCiAgICAgICAgY29tbWl0KCJzZXRUb3RhbCIsIHJlc3BvbnNlLmRhdGEudG90YWwpOyAvL+aAu+aVsOaNruadoeaVsAogICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICJwYWdlIjogcmVzcG9uc2UuZGF0YS5wYWdlLAogICAgICAgICAgInBhZ2VTaXplIjogcmVzcG9uc2UuZGF0YS5wYWdlU2l6ZSwKICAgICAgICAgICJzaG93VG90YWwiOiAidHJ1ZSIKICAgICAgICB9OyAvL+aOpeWPo+aWueazlei/lOWbnueahHBhZ2VCZWFuCiAgICAgICAgY29tbWl0KCJzZXRQYWdpbmF0aW9uIiwgcGFnZUJlYW4pOyAvL+aYvuekuuesrOWHoOmhte+8jOavj+mhteaYvuekuuWkmuWwkeadoQogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YS5yb3dzKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5bey5Yqe5YiX6KGoCiAgZ2V0RG9uZUJ5UGFnaW5hdGlvbjogZnVuY3Rpb24gZ2V0RG9uZUJ5UGFnaW5hdGlvbihfcmVmMTEsIHBhZ2luYXRpb24pIHsKICAgIHZhciBjb21taXQgPSBfcmVmMTEuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYxMS5zdGF0ZTsKICAgIGNvbW1pdCgiY2xlYXJMaXN0RGF0YSIpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXREb25lQnlQYWdpbmF0aW9uKHBhZ2luYXRpb24sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHZhciByZXZva2VEYXRhID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNwb25zZS5kYXRhLnJvd3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGlmICghKHJlc3BvbnNlLmRhdGEucm93c1tpXS5zdGF0dXMgIT0gJ3J1bm5pbmcnIHx8IHJlc3BvbnNlLmRhdGEucm93c1tpXS5vcGluaW9uU3RhdHVzICE9ICdhZ3JlZScpIHx8IHJlc3BvbnNlLmRhdGEucm93c1tpXS5vcGluaW9uU3RhdHVzID09ICdpbnF1JykgewogICAgICAgICAgICByZXNwb25zZS5kYXRhLnJvd3NbaV0ucmV2b2tlID0gdHJ1ZTsKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByZXZva2VEYXRhLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgaWYgKHJldm9rZURhdGFbal0uaWQgPT0gcmVzcG9uc2UuZGF0YS5yb3dzW2ldLmlkICYmIHJldm9rZURhdGFbal0udGFza0tleSA9PSByZXNwb25zZS5kYXRhLnJvd3NbaV0udGFza0tleSAmJiByZXNwb25zZS5kYXRhLnJvd3NbaV0ucmV2b2tlID09IHRydWUpIHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEucm93c1tpXS5yZXZva2UgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV2b2tlRGF0YS5wdXNoKHJlc3BvbnNlLmRhdGEucm93c1tpXSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXNwb25zZS5kYXRhLnJvd3NbaV0ucmV2b2tlID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBkYXRhUm93cyA9IHJlc3BvbnNlLmRhdGEucm93czsKICAgICAgICBjb21taXQoInNldFJvd3MiLCBkYXRhUm93cyk7IC8v5bey5Yqe5pWw5o2uCiAgICAgICAgY29tbWl0KCJzZXRUb3RhbCIsIHJlc3BvbnNlLmRhdGEudG90YWwpOyAvL+aAu+aVsOaNruadoeaVsAogICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICJwYWdlIjogcmVzcG9uc2UuZGF0YS5wYWdlLAogICAgICAgICAgInBhZ2VTaXplIjogcmVzcG9uc2UuZGF0YS5wYWdlU2l6ZSwKICAgICAgICAgICJzaG93VG90YWwiOiAidHJ1ZSIKICAgICAgICB9OyAvL+aOpeWPo+aWueazlei/lOWbnueahHBhZ2VCZWFuCiAgICAgICAgY29tbWl0KCJzZXRQYWdpbmF0aW9uIiwgcGFnZUJlYW4pOyAvL+aYvuekuuesrOWHoOmhte+8jOavj+mhteaYvuekuuWkmuWwkeadoQogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YS5yb3dzKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5oiR55qE6K+35rGC5YiX6KGoCiAgZ2V0TXlSZXF1ZXN0QnlQYWdpbmF0aW9uOiBmdW5jdGlvbiBnZXRNeVJlcXVlc3RCeVBhZ2luYXRpb24oX3JlZjEyLCBwYWdpbmF0aW9uKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjEyLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMTIuc3RhdGU7CiAgICBjb21taXQoImNsZWFyTGlzdERhdGEiKTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0TXlSZXF1ZXN0QnlQYWdpbmF0aW9uKHBhZ2luYXRpb24sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGNvbW1pdCgic2V0Um93cyIsIHJlc3BvbnNlLmRhdGEucm93cyk7IC8v5b6F5Yqe5pWw5o2uCiAgICAgICAgY29tbWl0KCJzZXRUb3RhbCIsIHJlc3BvbnNlLmRhdGEudG90YWwpOyAvL+aAu+aVsOaNruadoeaVsAogICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICJwYWdlIjogcmVzcG9uc2UuZGF0YS5wYWdlLAogICAgICAgICAgInBhZ2VTaXplIjogcmVzcG9uc2UuZGF0YS5wYWdlU2l6ZSwKICAgICAgICAgICJzaG93VG90YWwiOiAidHJ1ZSIKICAgICAgICB9OyAvL+aOpeWPo+aWueazlei/lOWbnueahHBhZ2VCZWFuCiAgICAgICAgY29tbWl0KCJzZXRQYWdpbmF0aW9uIiwgcGFnZUJlYW4pOyAvL+aYvuekuuesrOWHoOmhte+8jOavj+mhteaYvuekuuWkmuWwkeadoQogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YS5yb3dzKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5paw5bu65rWB56iL5YiX6KGoCiAgZ2V0Rmxvd0xpc3RCeVBhZ2luYXRpb246IGZ1bmN0aW9uIGdldEZsb3dMaXN0QnlQYWdpbmF0aW9uKF9yZWYxMywgcGFnaW5hdGlvbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWYxMy5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjEzLnN0YXRlOwogICAgY29tbWl0KCJjbGVhckxpc3REYXRhIik7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldEZsb3dMaXN0QnlQYWdpbmF0aW9uKHBhZ2luYXRpb24sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGNvbW1pdCgic2V0Um93cyIsIHJlc3BvbnNlLmRhdGEucm93cyk7IC8v5b6F5Yqe5pWw5o2uCiAgICAgICAgY29tbWl0KCJzZXRUb3RhbCIsIHJlc3BvbnNlLmRhdGEudG90YWwpOyAvL+aAu+aVsOaNruadoeaVsAogICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICJwYWdlIjogcmVzcG9uc2UuZGF0YS5wYWdlLAogICAgICAgICAgInBhZ2VTaXplIjogcmVzcG9uc2UuZGF0YS5wYWdlU2l6ZSwKICAgICAgICAgICJzaG93VG90YWwiOiAidHJ1ZSIKICAgICAgICB9OyAvL+aOpeWPo+aWueazlei/lOWbnueahHBhZ2VCZWFuCiAgICAgICAgY29tbWl0KCJzZXRQYWdpbmF0aW9uIiwgcGFnZUJlYW4pOyAvL+aYvuekuuesrOWHoOmhte+8jOavj+mhteaYvuekuuWkmuWwkeadoQogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YS5yb3dzKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5pKk5ZueCiAgcmV2b2tlSW5zdGFuY2U6IGZ1bmN0aW9uIHJldm9rZUluc3RhbmNlKF9yZWYxNCwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYxNC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjE0LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5yZXZva2VJbnN0YW5jZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEudmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+WuoeaJueafpeeci+mhtemdouaSpOWbngogIHJldm9rZUluc3RhbmNlQnRuOiBmdW5jdGlvbiByZXZva2VJbnN0YW5jZUJ0bihfcmVmMTUsIGRhdGEsIGlzSGFuZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYxNS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjE1LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5yZXZva2VJbnN0YW5jZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKGRhdGEuaXNIYW5kUmV2b2tlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5blrqHmibnmk43kvZzmjInpkq4KICB0YXNrRGV0YWlsOiBmdW5jdGlvbiB0YXNrRGV0YWlsKF9yZWYxNiwgcGFyYW1zKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjE2LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMTYuc3RhdGU7CiAgICBwcm9jZXNzLnRhc2tEZXRhaWwocGFyYW1zLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgcmVzcG9uc2UuZGF0YS5pc0FkZFNpZ24gPSBwYXJhbXMuaXNBZGRTaWduOwogICAgICBjb21taXQoInNldEJ1dHRvblJvd3MiLCByZXNwb25zZS5kYXRhKTsKICAgICAgY29tbWl0KCJzZXROZXh0RXhlY3V0b3IiLCByZXNwb25zZS5kYXRhLm1hcCk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5a6h5om55bi455So6K+tCiAgZ2V0QXBwcm92YWxCeURlZktleUFuZFR5cGVJZDogZnVuY3Rpb24gZ2V0QXBwcm92YWxCeURlZktleUFuZFR5cGVJZChfcmVmMTcsIGRlZktleSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYxNy5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjE3LnN0YXRlOwogICAgcHJvY2Vzcy5nZXRBcHByb3ZhbEJ5RGVmS2V5QW5kVHlwZUlkKGRlZktleSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgIGNvbW1pdCgic2V0QXBwcm92YWxJdGVtIiwgcmVzcG9uc2UuZGF0YSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5a6h5om56K6w5b2VCiAgZ2V0T3BpbmlvbnNCeUlkOiBmdW5jdGlvbiBnZXRPcGluaW9uc0J5SWQoX3JlZjE4LCBwYXJhbSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYxOC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjE4LnN0YXRlOwogICAgcHJvY2Vzcy5nZXRPcGluaW9uc0J5SWQocGFyYW0sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICByZXNwb25zZS5wYXJhbSA9IHBhcmFtOwogICAgICBjb21taXQoInNldE9waW5pb25zIiwgcmVzcG9uc2UpOwogICAgfSk7CiAgfSwKICAvL+iOt+WPluWPr+i3n+i4queahOS7u+WKoeiKgueCuQogIHRhc2tOb2RlOiBmdW5jdGlvbiB0YXNrTm9kZShfcmVmMTksIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMTkuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYxOS5zdGF0ZTsKICAgIHByb2Nlc3MudGFza05vZGUoZGF0YS5kZWZJZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgIHZhciBub2RlcyA9IHJlc3BvbnNlLmRhdGEuYnBtRGVmTGF5b3V0Lmxpc3RMYXlvdXQ7CiAgICAgIHZhciBub2Rlc0NvcHkgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChub2Rlc1tpXS5ub2RlVHlwZSAhPSAnU1RBUlQnICYmIG5vZGVzW2ldLm5vZGVUeXBlICE9ICdFTkQnICYmIG5vZGVzW2ldLm5vZGVUeXBlICE9ICdJTkNMVVNJVkVHQVRFV0FZJyAmJiBub2Rlc1tpXS5ub2RlVHlwZSAhPSAnRVhDTFVTSVZFR0FURVdBWScgJiYgbm9kZXNbaV0ubm9kZVR5cGUgIT0gJ1BBUkFMTEVMR0FURVdBWScpIHsKICAgICAgICAgIG5vZGVzQ29weS5wdXNoKF9vYmplY3RTcHJlYWQoe30sIG5vZGVzW2ldKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbW1pdCgic2V0Tm9kZXMiLCBub2Rlc0NvcHkpOwogICAgICAvL+agueaNrua1geeoi+WunuS+i2lk6I635Y+W5bey6Lef6Liq55qE6IqC54K5CiAgICAgIHByb2Nlc3MuZ2V0Rm9sbG93ZWROb2RlKGRhdGEucHJvSW5zdCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgdmFyIGZvbGxvd2VkTm9kZUlkcyA9IHJlc3BvbnNlLmRhdGEudmFsdWUgfHwgJyc7CiAgICAgICAgdmFyIGNoZWNrZWQgPSBbXTsKICAgICAgICBzdGF0ZS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICBpZiAoZm9sbG93ZWROb2RlSWRzLmluZGV4T2YoaXRlbS5ub2RlSWQpID4gLTEpIHsKICAgICAgICAgICAgY2hlY2tlZC5wdXNoKGl0ZW0ubm9kZUlkKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBjb21taXQoInNldENoZWNrZWROb2RlcyIsIGNoZWNrZWQpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/pgInmi6nku7vliqHoioLngrnml7bpgInmi6nor6XlpI3pgInmoYYKICBzZXRDaGVja2VkUHVzaDogZnVuY3Rpb24gc2V0Q2hlY2tlZFB1c2goX3JlZjIwLCB2YWx1ZSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyMC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjIwLnN0YXRlOwogICAgY29tbWl0KCJzZXRDaGVja2VkUHVzaCIsIHZhbHVlKTsKICB9LAogIHNldENoZWNrZWRTcGxpY2U6IGZ1bmN0aW9uIHNldENoZWNrZWRTcGxpY2UoX3JlZjIxLCB2YWx1ZSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyMS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjIxLnN0YXRlOwogICAgY29tbWl0KCJzZXRDaGVja2VkU3BsaWNlIiwgdmFsdWUpOwogIH0sCiAgLy/moLnmja7ku7vliqFJROiOt+WPluS7u+WKoeaYjue7hgogIGdldFRhc2tCeUlkOiBmdW5jdGlvbiBnZXRUYXNrQnlJZChfcmVmMjIsIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjIyLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMjIuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfooajljZXmlbDmja7liqDovb3kuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgcHJvY2Vzcy5nZXRUYXNrQnlJZChpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5Lu75YqhSUTojrflj5bku7vliqHmmI7nu4YKICBnZXROb3RpY2U6IGZ1bmN0aW9uIGdldE5vdGljZShfcmVmMjMsIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjIzLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMjMuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldE5vdGljZShpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5a6e5L6LaWTojrflj5blrp7kvovlr7nosaEKICBnZXRJbnN0YW5jZUJ5SW5zdElkOiBmdW5jdGlvbiBnZXRJbnN0YW5jZUJ5SW5zdElkKF9yZWYyNCwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMjQuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYyNC5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0SW5zdGFuY2VCeUluc3RJZChpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5a6e5L6LSUTliKTmlq3mtYHnqIvmmK/lkKbnu5PmnZ8KICBpc0VuZDogZnVuY3Rpb24gaXNFbmQoX3JlZjI1LCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyNS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjI1LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5pc0VuZChpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVqZWN0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/mlrDlop4s5pu05paw5Lu75Yqh6Lef6Liq6KGo5pWw5o2uCiAgdGFza0ZvbGxvd1NhdmU6IGZ1bmN0aW9uIHRhc2tGb2xsb3dTYXZlKF9yZWYyNiwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyNi5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjI2LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy50YXNrRm9sbG93U2F2ZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6amz5Zue6K6+572uCiAgdGFza1RvUmVqZWN0OiBmdW5jdGlvbiB0YXNrVG9SZWplY3QoX3JlZjI3LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjI3LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMjcuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnRhc2tUb1JlamVjdChkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBjb21taXQoInNldEJwbUV4ZVN0YWNrc1VzZXJOb2RlIiwgcmVzcG9uc2UuZGF0YS5icG1FeGVTdGFja3NVc2VyTm9kZSk7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5L+d5a2Y6amz5Zue6K6+572uCiAgcmVqZWN0Q29tcGxldGU6IGZ1bmN0aW9uIHJlamVjdENvbXBsZXRlKF9yZWYyOCwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyOC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjI4LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5yZWplY3RDb21wbGV0ZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5L+d5a2Y6L2s5Yqe6K6+572uCiAgZGVsZWdhdGU6IGZ1bmN0aW9uIGRlbGVnYXRlKF9yZWYyOSwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyOS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjI5LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5kZWxlZ2F0ZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5rWB56iL5Lyg6ZiFCiAgdHJhbnNUb01vcmU6IGZ1bmN0aW9uIHRyYW5zVG9Nb3JlKF9yZWYzMCwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzMC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjMwLnN0YXRlOwogICAgdmFyIGxvYWRpbmcgPSBMb2FkaW5nLnNlcnZpY2UoewogICAgICBmdWxsc2NyZWVuOiB0cnVlLAogICAgICBsb2NrOiB0cnVlLAogICAgICB0ZXh0OiAn5q2j5Zyo5aSE55CG5Lit77yM6K+36ICQ5b+D562J5b6FLi4uJywKICAgICAgc3Bpbm5lcjogJ2VsLWljb24tbG9hZGluZycsCiAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuNyknCiAgICB9KTsgLy/lvIDlp4sKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MudHJhbnNUb01vcmUoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5b6B6K+i6K6+572uCiAgdGFza1RvSW5xdTogZnVuY3Rpb24gdGFza1RvSW5xdShfcmVmMzEsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMzEuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYzMS5zdGF0ZTsKICAgIHZhciBsb2FkaW5nID0gTG9hZGluZy5zZXJ2aWNlKHsKICAgICAgZnVsbHNjcmVlbjogdHJ1ZSwKICAgICAgbG9jazogdHJ1ZSwKICAgICAgdGV4dDogJ+ato+WcqOWkhOeQhuS4re+8jOivt+iAkOW/g+etieW+hS4uLicsCiAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICBiYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjcpJwogICAgfSk7IC8v5byA5aeLCiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnRhc2tUb0lucXUoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5rWB56iL57uI5q2iCiAgZG9FbmRQcm9jZXNzOiBmdW5jdGlvbiBkb0VuZFByb2Nlc3MoX3JlZjMyLCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjMyLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMzIuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfmraPlnKjlpITnkIbkuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5kb0VuZFByb2Nlc3MoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5rWB6L2s6K6+572uCiAgdGFza1RvVHJhbnM6IGZ1bmN0aW9uIHRhc2tUb1RyYW5zKF9yZWYzMywgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzMy5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjMzLnN0YXRlOwogICAgdmFyIGxvYWRpbmcgPSBMb2FkaW5nLnNlcnZpY2UoewogICAgICBmdWxsc2NyZWVuOiB0cnVlLAogICAgICBsb2NrOiB0cnVlLAogICAgICB0ZXh0OiAn5q2j5Zyo5aSE55CG5Lit77yM6K+36ICQ5b+D562J5b6FLi4uJywKICAgICAgc3Bpbm5lcjogJ2VsLWljb24tbG9hZGluZycsCiAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuNyknCiAgICB9KTsgLy/lvIDlp4sKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MudGFza1RvVHJhbnMoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5pmu6YCa5Lu75Yqh5Yqg562+CiAgdXNlclRhc2tUb1NpZ246IGZ1bmN0aW9uIHVzZXJUYXNrVG9TaWduKF9yZWYzNCwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzNC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjM0LnN0YXRlOwogICAgdmFyIGxvYWRpbmcgPSBMb2FkaW5nLnNlcnZpY2UoewogICAgICBmdWxsc2NyZWVuOiB0cnVlLAogICAgICBsb2NrOiB0cnVlLAogICAgICB0ZXh0OiAn5q2j5Zyo5aSE55CG5Lit77yM6K+36ICQ5b+D562J5b6FLi4uJywKICAgICAgc3Bpbm5lcjogJ2VsLWljb24tbG9hZGluZycsCiAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuNyknCiAgICB9KTsgLy/lvIDlp4sKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MudXNlclRhc2tUb1NpZ24oZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5rWB56iL5Zu+CiAgZ2V0QnBtSW1hZ2U6IGZ1bmN0aW9uIGdldEJwbUltYWdlKF9yZWYzNSwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzNS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjM1LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5pbnN0YW5jZUZsb3dJbWFnZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICB2YXIgZGVmSWQgPSByZXNwb25zZS5kYXRhLmluc3RhbmNlSWQgPyAnJyA6IHJlc3BvbnNlLmRhdGEuZGVmSWQ7CiAgICAgICAgcHJvY2Vzcy5nZXRCcG1JbWFnZSgnJywgcmVzcG9uc2UuZGF0YS5pbnN0YW5jZUlkLCBkZWZJZCwgZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgICAgICJyb3dzIjogcmVzcG9uc2UuZGF0YSwKICAgICAgICAgICAgImltZyI6IHJlcy5kYXRhCiAgICAgICAgICB9OwogICAgICAgICAgcmVzb2x2ZShkYXRhKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5b6B6K+i6K6+572uCiAgdGFza1RvSW5xdVJlcGx5OiBmdW5jdGlvbiB0YXNrVG9JbnF1UmVwbHkoX3JlZjM2LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjM2LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMzYuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfmraPlnKjlpITnkIbkuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy50YXNrVG9JbnF1UmVwbHkoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5pmu6YCa55So5oi36IqC54K55Yqg562+5Y+N6aaICiAgdXNlckFkZFNpZ246IGZ1bmN0aW9uIHVzZXJBZGRTaWduKF9yZWYzNywgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzNy5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjM3LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy51c2VyQWRkU2lnbihkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5rKf6YCa6K6+572uCiAgY29tbXVuaWNhdGU6IGZ1bmN0aW9uIGNvbW11bmljYXRlKF9yZWYzOCwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzOC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjM4LnN0YXRlOwogICAgdmFyIGxvYWRpbmcgPSBMb2FkaW5nLnNlcnZpY2UoewogICAgICBmdWxsc2NyZWVuOiB0cnVlLAogICAgICBsb2NrOiB0cnVlLAogICAgICB0ZXh0OiAn5q2j5Zyo5aSE55CG5Lit77yM6K+36ICQ5b+D562J5b6FLi4uJywKICAgICAgc3Bpbm5lcjogJ2VsLWljb24tbG9hZGluZycsCiAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuNyknCiAgICB9KTsgLy/lvIDlp4sKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuY29tbXVuaWNhdGUoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5rKf6YCa5Y+N6aaICiAgZG9OZXh0Y29tbXU6IGZ1bmN0aW9uIGRvTmV4dGNvbW11KF9yZWYzOSwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzOS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjM5LnN0YXRlOwogICAgdmFyIGxvYWRpbmcgPSBMb2FkaW5nLnNlcnZpY2UoewogICAgICBmdWxsc2NyZWVuOiB0cnVlLAogICAgICBsb2NrOiB0cnVlLAogICAgICB0ZXh0OiAn5q2j5Zyo5aSE55CG5Lit77yM6K+36ICQ5b+D562J5b6FLi4uJywKICAgICAgc3Bpbm5lcjogJ2VsLWljb24tbG9hZGluZycsCiAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuNyknCiAgICB9KTsgLy/lvIDlp4sKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZG9OZXh0Y29tbXUoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5Lya562+5Lu75Yqh5Yqg562+CiAgdGFza1NpZ25Vc2VyczogZnVuY3Rpb24gdGFza1NpZ25Vc2VycyhfcmVmNDAsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNDAuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY0MC5zdGF0ZTsKICAgIHZhciBsb2FkaW5nID0gTG9hZGluZy5zZXJ2aWNlKHsKICAgICAgZnVsbHNjcmVlbjogdHJ1ZSwKICAgICAgbG9jazogdHJ1ZSwKICAgICAgdGV4dDogJ+ato+WcqOWkhOeQhuS4re+8jOivt+iAkOW/g+etieW+hS4uLicsCiAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICBiYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjcpJwogICAgfSk7IC8v5byA5aeLCiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnRhc2tTaWduVXNlcnMoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5Lyg6ZiF5Zue5aSNCiAgZG9OZXh0Q29weXRvOiBmdW5jdGlvbiBkb05leHRDb3B5dG8oX3JlZjQxLCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjQxLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNDEuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfmraPlnKjlpITnkIbkuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5kb05leHRDb3B5dG8oZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOyAvLyDnu5PmnZ8KICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5Lu75Yqh5piv5ZCm6IO96ZSB5a6aCiAgY2FuTG9jazogZnVuY3Rpb24gY2FuTG9jayhfcmVmNDIsIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjQyLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNDIuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmNhbkxvY2soaWQsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+iOt+WPluS7u+WKoemUgeWumueKtuaAgQogIGxvY2tVbmxvY2s6IGZ1bmN0aW9uIGxvY2tVbmxvY2soX3JlZjQzLCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY0My5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjQzLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5sb2NrVW5sb2NrKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSA9PSAxKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogIuW3suetvuaUtiIsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmRhdGEgPT0gMykgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6ICLlt7Llj5bmtojnrb7mlLYiLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/lpITnkIbku7vliqEKICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUoX3JlZjQ0LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjQ0LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNDQuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfku7vliqHlpITnkIbkuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5jb21wbGV0ZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/lkK/liqjmtYHnqIsKICBzdGFydDogZnVuY3Rpb24gc3RhcnQoX3JlZjQ1LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjQ1LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNDUuc3RhdGU7CiAgICB2YXIgbG9hZGluZyA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgIGxvY2s6IHRydWUsCiAgICAgIHRleHQ6ICfmtYHnqIvlkK/liqjkuK3vvIzor7fogJDlv4PnrYnlvoUuLi4nLAogICAgICBzcGlubmVyOiAnZWwtaWNvbi1sb2FkaW5nJywKICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgIH0pOyAvL+W8gOWniwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5zdGFydChkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWplY3QoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+S/neWtmOiNieeovwogIHNhdmVEcmFmdDogZnVuY3Rpb24gc2F2ZURyYWZ0KF9yZWY0NiwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY0Ni5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjQ2LnN0YXRlOwogICAgdmFyIGxvYWRpbmcgPSBMb2FkaW5nLnNlcnZpY2UoewogICAgICBmdWxsc2NyZWVuOiB0cnVlLAogICAgICBsb2NrOiB0cnVlLAogICAgICB0ZXh0OiAn5L+d5a2Y6I2J56i/5Lit77yM6K+36ICQ5b+D562J5b6FLi4uJywKICAgICAgc3Bpbm5lcjogJ2VsLWljb24tbG9hZGluZycsCiAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuNyknCiAgICB9KTsgLy/lvIDlp4sKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3Muc2F2ZURyYWZ0KGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGxvYWRpbmcuY2xvc2UoKTsgLy8g57uT5p2fCiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/lrqHmibnpobXpnaLkv53lrZgKICBzYXZlVGFza0RyYWZ0OiBmdW5jdGlvbiBzYXZlVGFza0RyYWZ0KF9yZWY0NywgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY0Ny5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjQ3LnN0YXRlOwogICAgdmFyIGxvYWRpbmcgPSBMb2FkaW5nLnNlcnZpY2UoewogICAgICBmdWxsc2NyZWVuOiB0cnVlLAogICAgICBsb2NrOiB0cnVlLAogICAgICB0ZXh0OiAn5L+d5a2Y6I2J56i/5Lit77yM6K+36ICQ5b+D562J5b6FLi4uJywKICAgICAgc3Bpbm5lcjogJ2VsLWljb24tbG9hZGluZycsCiAgICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuNyknCiAgICB9KTsgLy/lvIDlp4sKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3Muc2F2ZVRhc2tEcmFmdChkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5rWB56iL5a6e5L6LSUTojrflj5bnm7jlhbPkv6Hmga8KICBnZXRSZWxhdGVkSW5mb3JtYXRpb25CeUlkOiBmdW5jdGlvbiBnZXRSZWxhdGVkSW5mb3JtYXRpb25CeUlkKF9yZWY0OCwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNDguY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY0OC5zdGF0ZTsKICAgIHByb2Nlc3MuZ2V0UmVsYXRlZEluZm9ybWF0aW9uQnlJZChpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgIGNvbW1pdCgic2V0UmVsYXRlZEluZm9ybWF0aW9uIiwgcmVzcG9uc2UuZGF0YSk7CiAgICB9KTsKICB9LAogIC8v5re75Yqg6ZiF6K+76K6w5b2VCiAgYWRkUmVhZFJlY29yZDogZnVuY3Rpb24gYWRkUmVhZFJlY29yZChfcmVmNDksIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjQ5LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNDkuc3RhdGU7CiAgICBwcm9jZXNzLmFkZFJlYWRSZWNvcmQoaWQsIGZ1bmN0aW9uIChyZXNwb25zZSkge30pOwogIH0sCiAgLy/moLnmja7mtYHnqIvlrp7kvotJROiOt+WPlumYheivu+iusOW9lQogIGdldEJ5UmVjb3JkSW5zdElkOiBmdW5jdGlvbiBnZXRCeVJlY29yZEluc3RJZChfcmVmNTAsIHBhZ2luYXRpb24pIHsKICAgIHZhciBjb21taXQgPSBfcmVmNTAuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY1MC5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0QnlSZWNvcmRJbnN0SWQocGFnaW5hdGlvbiwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEucm93c1swXSAhPSBudWxsKSB7CiAgICAgICAgICBjb21taXQoInNldFJvd3MiLCByZXNwb25zZS5kYXRhLnJvd3MpOyAvL+mYheivu+iusOaVsOaNrgogICAgICAgICAgY29tbWl0KCJzZXRUb3RhbCIsIHJlc3BvbnNlLmRhdGEudG90YWwpOyAvL+aAu+aVsOaNruadoeaVsAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb21taXQoInNldFJvd3MiLCBbXSk7IC8v6ZiF6K+76K6w5pWw5o2uCiAgICAgICAgICBjb21taXQoInNldFRvdGFsIiwgMCk7IC8v5oC75pWw5o2u5p2h5pWwCiAgICAgICAgfQogICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICJwYWdlIjogcmVzcG9uc2UuZGF0YS5wYWdlLAogICAgICAgICAgInBhZ2VTaXplIjogcmVzcG9uc2UuZGF0YS5wYWdlU2l6ZSwKICAgICAgICAgICJzaG93VG90YWwiOiAidHJ1ZSIKICAgICAgICB9OyAvL+aOpeWPo+aWueazlei/lOWbnueahHBhZ2VCZWFuCiAgICAgICAgY29tbWl0KCJzZXRQYWdpbmF0aW9uIiwgcGFnZUJlYW4pOyAvL+aYvuekuuesrOWHoOmhte+8jOavj+mhteaYvuekuuWkmuWwkeadoQogICAgICAgIHJlc29sdmUoKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5Yig6Zmk6I2J56i/CiAgcmVtb3ZlRHJhZnRCeUlkOiBmdW5jdGlvbiByZW1vdmVEcmFmdEJ5SWQoX3JlZjUxLCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY1MS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjUxLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5yZW1vdmVEcmFmdEJ5SWQoaWQsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/pgLvovpHliKDpmaTmtYHnqIvlrp7kvosKICBkb0VuZFByb2Nlc3NCeUlkOiBmdW5jdGlvbiBkb0VuZFByb2Nlc3NCeUlkKF9yZWY1MiwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNTIuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY1Mi5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZG9FbmRQcm9jZXNzQnlJZChpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiAi57uI5q2i5oiQ5YqfIiwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5rWB56iL5a6e5L6LSUTnu4jmraLmtYHnqIsKICByZXN0b3JlOiBmdW5jdGlvbiByZXN0b3JlKF9yZWY1MywgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNTMuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY1My5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MucmVzdG9yZShpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiAi5Yig6Zmk5oiQ5YqfIiwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v55+l5Lya5Lu75Yqh5b6F5Yqe6L2s5bey5YqeCiAgbm90aWNlVHVybkRvZGU6IGZ1bmN0aW9uIG5vdGljZVR1cm5Eb2RlKF9yZWY1NCwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNTQuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY1NC5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3Mubm90aWNlVHVybkRvZGUoaWQsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUoKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5Lu75YqhaWTojrflj5bmnIDmlrDnmoTlu7bmnJ/kv6Hmga8KICBicG1UYXNrRHVlVGltZTogZnVuY3Rpb24gYnBtVGFza0R1ZVRpbWUoX3JlZjU1LCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY1NS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjU1LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5icG1UYXNrRHVlVGltZShpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgY29tbWl0KCJzZXREdWVUaW1lIiwgcmVzcG9uc2UuZGF0YSk7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2uaWTojrflj5bliLDmnJ/ml7bpl7QKICBnZXRFeHBpcmF0aW9uRGF0ZTogZnVuY3Rpb24gZ2V0RXhwaXJhdGlvbkRhdGUoX3JlZjU2LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjU2LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNTYuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldEV4cGlyYXRpb25EYXRlKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+a3u+WKoOS7u+WKoeacn+mZkOe7n+iuoeS/oeaBrwogIGR1ZVRpbWVTYXZlOiBmdW5jdGlvbiBkdWVUaW1lU2F2ZShfcmVmNTcsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNTcuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY1Ny5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZHVlVGltZVNhdmUoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+iOt+WPluWQjue7reWPr+i3s+i9rOiKgueCuQogIGdldEFmdGVySnVtcE5vZGVzOiBmdW5jdGlvbiBnZXRBZnRlckp1bXBOb2RlcyhfcmVmNTgsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNTguY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY1OC5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0QWZ0ZXJKdW1wTm9kZXMoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5L+d5a2Y6KGo5Y2V5pWw5o2uCiAgc2F2ZUZvcm1EYXRhOiBmdW5jdGlvbiBzYXZlRm9ybURhdGEoX3JlZjU5LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjU5LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNTkuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnNhdmVGb3JtRGF0YShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja5pZOiOt+WPluWIsOacn+aXtumXtAogIGdldEN1ck5vZGVQcm9wZXJ0aWVzOiBmdW5jdGlvbiBnZXRDdXJOb2RlUHJvcGVydGllcyhfcmVmNjAsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNjAuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY2MC5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0Q3VyTm9kZVByb3BlcnRpZXMoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W57uf6K6h5Zu+6KGoCiAgZ2V0RWNoYXJ0RGF0YTogZnVuY3Rpb24gZ2V0RWNoYXJ0RGF0YShfcmVmNjEsIHBhZ2luYXRpb24pIHsKICAgIHZhciBjb21taXQgPSBfcmVmNjEuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY2MS5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0RWNoYXJ0RGF0YShwYWdpbmF0aW9uLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICB2YXIgZGF0YSA9IHsKICAgICAgICAgIG9wdGlvbnM6IFtdCiAgICAgICAgfTsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgZGF0YS5vcHRpb25zID0gcmVzcG9uc2UuZGF0YS52YWx1ZTsKICAgICAgICB9CiAgICAgICAgcmVzb2x2ZShkYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5a6h5om55oSP6KeBCiAgZ2V0Tm9kZW9waW5pb25zOiBmdW5jdGlvbiBnZXROb2Rlb3BpbmlvbnMoX3JlZjYyLCBwYWdpbmF0aW9uKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjYyLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNjIuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldE5vZGVvcGluaW9ucyhwYWdpbmF0aW9uLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/pgJrov4dib+aVsOaNruWPkei1t+a1geeoiwogIHN0YXJ0Rm9ybTogZnVuY3Rpb24gc3RhcnRGb3JtKF9yZWY2MywgcGFnaW5hdGlvbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWY2My5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjYzLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5zdGFydEZvcm0ocGFnaW5hdGlvbiwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v6I635Y+W5a6h57Sn5oCl54q25oCB6YWN572uCiAgZ2V0VXJnZW50U3RhdGVDb25mOiBmdW5jdGlvbiBnZXRVcmdlbnRTdGF0ZUNvbmYoX3JlZjY0LCBwYXJhbSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY2NC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjY0LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRVcmdlbnRTdGF0ZUNvbmYocGFyYW0sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+agueaNrua1geeoi+WunuS+i0lE44CB5YKs5Yqe5Lq6SUTojrflj5blgqzlip7orrDlvZUKICBnZXRVcmdybnRCeUlkOiBmdW5jdGlvbiBnZXRVcmdybnRCeUlkKF9yZWY2NSwgcGFyYW0pIHsKICAgIHZhciBjb21taXQgPSBfcmVmNjUuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY2NS5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0VXJncm50QnlJZChwYXJhbSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgY29tbWl0KCJzZXRSb3dzIiwgcmVzcG9uc2UuZGF0YS5yb3dzKTsgLy/lgqzlip7mlbDmja4KICAgICAgICBjb21taXQoInNldFRvdGFsIiwgcmVzcG9uc2UuZGF0YS50b3RhbCk7IC8v5oC75pWw5o2u5p2h5pWwCiAgICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgICAgInBhZ2UiOiByZXNwb25zZS5kYXRhLnBhZ2UsCiAgICAgICAgICAicGFnZVNpemUiOiByZXNwb25zZS5kYXRhLnBhZ2VTaXplLAogICAgICAgICAgInNob3dUb3RhbCI6ICJ0cnVlIgogICAgICAgIH07IC8v5o6l5Y+j5pa55rOV6L+U5Zue55qEcGFnZUJlYW4KICAgICAgICBjb21taXQoInNldFBhZ2luYXRpb24iLCBwYWdlQmVhbik7IC8v5pi+56S656ys5Yeg6aG177yM5q+P6aG15pi+56S65aSa5bCR5p2hCiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhLnJvd3MpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7mtYHnqIvlrp7kvotJROiOt+WPluW9k+WJjeS7u+WKoeiKgueCueWuoeaJueS6ugogIGdldEV4Y3V0b3JOYW1lQnlJbnN0SWQ6IGZ1bmN0aW9uIGdldEV4Y3V0b3JOYW1lQnlJbnN0SWQoX3JlZjY2LCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY2Ni5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjY2LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRFeGN1dG9yTmFtZUJ5SW5zdElkKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/moLnmja7mtYHnqIvlrprkuYlpZOiOt+WPlua1geeoi+S/oeaBrwogIGRlZkdldDogZnVuY3Rpb24gZGVmR2V0KF9yZWY2NywgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNjcuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY2Ny5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZGVmR2V0KGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/lj5HpgIHkurrlt6Xlgqzlip4KICBzZW5kQnBtVGFza1VyZ2VudDogZnVuY3Rpb24gc2VuZEJwbVRhc2tVcmdlbnQoX3JlZjY4LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjY4LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNjguc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnNlbmRCcG1UYXNrVXJnZW50KGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/lj5blm57ovazlip7mtYHnqIsKICByZXRyaWV2ZUJwbVRhc2s6IGZ1bmN0aW9uIHJldHJpZXZlQnBtVGFzayhfcmVmNjksIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjY5LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNjkuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnJldHJpZXZlQnBtVGFzayhpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+iOt+WPluW3suWKnueahOWunuS+iwogIGdldERvbmVCeUluc3RJZDogZnVuY3Rpb24gZ2V0RG9uZUJ5SW5zdElkKF9yZWY3MCwgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNzAuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY3MC5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0RG9uZUJ5SW5zdElkKGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5rWB6L2s6K6+572uCiAgdGFza1RvQXBwcm92ZUxpbmU6IGZ1bmN0aW9uIHRhc2tUb0FwcHJvdmVMaW5lKF9yZWY3MSwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY3MS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjcxLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy50YXNrVG9BcHByb3ZlTGluZShkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIHRhc2tUb1NpZ25TZXF1ZW5jZTogZnVuY3Rpb24gdGFza1RvU2lnblNlcXVlbmNlKF9yZWY3MiwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY3Mi5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjcyLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy50YXNrVG9TaWduU2VxdWVuY2UoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvLyDmj5DkuqTlubbooYznrb7nvbLorr7nva4KICB0YXNrVG9TaWduTGluZTogZnVuY3Rpb24gdGFza1RvU2lnbkxpbmUoX3JlZjczLCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjczLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNzMuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnRhc2tUb1NpZ25MaW5lKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/mkqTlm57mtYHovazku7vliqEKICByZXZva2VUcmFuczogZnVuY3Rpb24gcmV2b2tlVHJhbnMoX3JlZjc0LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjc0LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNzQuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLnJldm9rZVRyYW5zKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlKSB7CiAgICAgICAgICBNZXNzYWdlLnN1Y2Nlc3MoewogICAgICAgICAgICBkdXJhdGlvbjogMTUwMCwKICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLAogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/mkqTlm57ku7vliqEg562+572y5pKk5ZueCiAgcmV2b2tlQ3VzdG9tU2lnbjogZnVuY3Rpb24gcmV2b2tlQ3VzdG9tU2lnbihfcmVmNzUsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNzUuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY3NS5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MucmV2b2tlQ3VzdG9tU2lnbihkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSkgewogICAgICAgICAgTWVzc2FnZS5zdWNjZXNzKHsKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHsKICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIHJldm9rZVNpZ25MaW5lOiBmdW5jdGlvbiByZXZva2VTaWduTGluZShfcmVmNzYsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNzYuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY3Ni5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MucmV2b2tlU2lnbkxpbmUoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIE1lc3NhZ2Uuc3VjY2Vzcyh7CiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwLAogICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICBnZXRTaWduTGluZXNJbnN0SWROb2RlSWQ6IGZ1bmN0aW9uIGdldFNpZ25MaW5lc0luc3RJZE5vZGVJZChfcmVmNzcsIGRhdGEpIHsKICAgIHZhciBjb21taXQgPSBfcmVmNzcuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY3Ny5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHByb2Nlc3MuZ2V0U2lnbkxpbmVzSW5zdElkTm9kZUlkKGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7CiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5Li76ZSuSUTlvoXlip7ojrflj5bnn6XkvJrku7vliqHkv6Hmga8KICBnZXRCcG1UYXNrTm90aWNlQnlJZDogZnVuY3Rpb24gZ2V0QnBtVGFza05vdGljZUJ5SWQoX3JlZjc4LCBpZCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY3OC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjc4LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRCcG1UYXNrTm90aWNlQnlJZChpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5Li76ZSuSUTojrflj5blt7Llip7nn6XkvJrku7vliqHkv6Hmga8KICBnZXRCcG1UYXNrTm90aWNlRG9uZUJ5SWQ6IGZ1bmN0aW9uIGdldEJwbVRhc2tOb3RpY2VEb25lQnlJZChfcmVmNzksIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjc5LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNzkuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldEJwbVRhc2tOb3RpY2VEb25lQnlJZChpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5Lu75YqhSWTojrflj5blrqHmibnljoblj7LmlbDmja7vvIjlj6rmnInkuIDmnaHvvIkKICBnZXRUYXNrS2V5QnlUYXNrSWQ6IGZ1bmN0aW9uIGdldFRhc2tLZXlCeVRhc2tJZChfcmVmODAsIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjgwLmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmODAuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldFRhc2tLZXlCeVRhc2tJZChpZCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5Lu75Yqh6IqC54K5SUTlkozmtYHnqIvlrp7kvotJROiOt+WPluWuoeaJueWOhuWPsuaVsOaNru+8iOWPquacieS4gOadoe+8iQogIGdldFRhc2tLZXlCeU5vZGVJZDogZnVuY3Rpb24gZ2V0VGFza0tleUJ5Tm9kZUlkKF9yZWY4MSwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY4MS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjgxLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcHJvY2Vzcy5nZXRUYXNrS2V5QnlOb2RlSWQoZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5qC55o2u5rWB56iL5a6a5LmJSUTojrflj5bor6XmtYHnqIvnmoTlhbblroPlvoXlip7vvIzlpoLmnpzojrflj5bkuI3liLDvvIzliJnov5Tlm57lhbblroPlvoXlip4o6L+U5Zue5LiA5p2hKQogIGdldE5leHRUYXNrQnlEZWZJZDogZnVuY3Rpb24gZ2V0TmV4dFRhc2tCeURlZklkKF9yZWY4MiwgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY4Mi5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjgyLnN0YXRlOwogICAgdmFyIGxvYWRpbmcgPSBMb2FkaW5nLnNlcnZpY2UoewogICAgICBmdWxsc2NyZWVuOiB0cnVlLAogICAgICBsb2NrOiB0cnVlLAogICAgICB0ZXh0OiAn5q2j5Zyo6I635Y+W5LiL5LiA5Liq5Lu75YqhLOivt+eojeetiS4uLicsCiAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICBiYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjcpJwogICAgfSk7IC8v5byA5aeLCiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwcm9jZXNzLmdldE5leHRUYXNrQnlEZWZJZChkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAoIXJlc3BvbnNlLmRhdGEgfHwgIXJlc3BvbnNlLmRhdGEudmFsdWUpIHsKICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTsKICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7CiAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7CiAgICAgICAgICB9LCAyMDAwKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICBpbml0U2lnbmF0dXJlOiBmdW5jdGlvbiBpbml0U2lnbmF0dXJlKF9yZWY4MywgZGF0YSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWY4My5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjgzLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgY29tbWl0KCJpbml0U2lnbmF0dXJlIiwgZGF0YSk7IC8v5YKs5Yqe5pWw5o2uCiAgICAgIHJlc29sdmUoKTsKICAgIH0pOwogIH0sCiAgc2V0U2lnbmF0dXJlU3RhdHVzOiBmdW5jdGlvbiBzZXRTaWduYXR1cmVTdGF0dXMoX3JlZjg0LCBzdGF0dXMpIHsKICAgIHZhciBjb21taXQgPSBfcmVmODQuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY4NC5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIGNvbW1pdCgic2V0U2lnbmF0dXJlU3RhdHVzIiwgc3RhdHVzKTsgLy/lgqzlip7mlbDmja4KICAgICAgcmVzb2x2ZSgpOwogICAgfSk7CiAgfSwKICBkb1NpZ25hdHVyZTogZnVuY3Rpb24gZG9TaWduYXR1cmUoX3JlZjg1LCBkYXRhKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjg1LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmODUuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBjb21taXQoInNldFNpZ25hdHVyZSIsIGRhdGEpOyAvL+WCrOWKnuaVsOaNrgogICAgICByZXNvbHZlKCk7CiAgICB9KTsKICB9Cn07CnZhciBtdXRhdGlvbnMgPSB7CiAgY2xlYXJMaXN0RGF0YTogZnVuY3Rpb24gY2xlYXJMaXN0RGF0YShzdGF0ZSkgewogICAgc3RhdGUucm93cyA9IFtdOwogICAgc3RhdGUucGFnaW5hdGlvbiA9IHt9OwogIH0sCiAgc2V0UGFnaW5hdGlvbjogZnVuY3Rpb24gc2V0UGFnaW5hdGlvbihzdGF0ZSwgcGFnaW5hdGlvbikgewogICAgc3RhdGUucGFnaW5hdGlvbiA9IHBhZ2luYXRpb247CiAgfSwKICBzZXRQYWdpbmF0aW9uU2l6ZTogZnVuY3Rpb24gc2V0UGFnaW5hdGlvblNpemUoc3RhdGUsIHNpemUpIHsKICAgIHN0YXRlLnBhZ2luYXRpb24ucGFnZVNpemUgPSBzaXplOwogIH0sCiAgc2V0UGFnaW5hdGlvblBhZ2VOdW06IGZ1bmN0aW9uIHNldFBhZ2luYXRpb25QYWdlTnVtKHN0YXRlLCBjdXJyZW50UGFnZSkgewogICAgc3RhdGUucGFnaW5hdGlvbi5wYWdlID0gY3VycmVudFBhZ2U7CiAgfSwKICBzZXRSb3dzOiBmdW5jdGlvbiBzZXRSb3dzKHN0YXRlLCByb3dzKSB7CiAgICBzdGF0ZS5yb3dzID0gcm93czsKICB9LAogIHNldFRvdGFsOiBmdW5jdGlvbiBzZXRUb3RhbChzdGF0ZSwgdG90YWwpIHsKICAgIHN0YXRlLnRvdGFsID0gdG90YWw7CiAgfSwKICBzZXRGbG93VHJlZXM6IGZ1bmN0aW9uIHNldEZsb3dUcmVlcyhzdGF0ZSwgdHJlZSkgewogICAgc3RhdGUudHJlZSA9IHRyZWU7CiAgfSwKICBzZXRCdXR0b25Sb3dzOiBmdW5jdGlvbiBzZXRCdXR0b25Sb3dzKHN0YXRlLCByb3dzKSB7CiAgICB2YXIgcmVzID0gW107CiAgICBpZiAocm93cy5idXR0b25zICYmIHJvd3MuYnV0dG9ucy5sZW5ndGggPiAwKSB7CiAgICAgIC8v5piv55So5oi35Lu75YqhMeiKgueCue+8iOWNs+WPkei1t+S6uuiKgueCue+8iSDlj6rog73lrZjlnKgg5ZCM5oSPICAg5b6B6K+iICAgICDkv53lrZggIOaMiemSrgogICAgICAvLyBpZihyb3dzLmlzTm9kZUlkT25lKXsKICAgICAgLy8gICBmb3IobGV0IGkgPTA7aTxyb3dzLmJ1dHRvbnMubGVuZ3RoO2krKyl7CiAgICAgIC8vICAgICAvL+WIpOaWreaYr+WQpuWtmOWcqOWQjOaEjyDlvoHor6Ig5L+d5a2YICDmjInpkq4KICAgICAgLy8gICAgIGlmKHJvd3MuYnV0dG9uc1tpXS5hbGlhcz09ImFncmVlIiB8fCAgcm93cy5idXR0b25zW2ldLmFsaWFzPT0ic2F2ZURyYWZ0IiB8fCAgcm93cy5idXR0b25zW2ldLmFsaWFzPT0iaW5xdSIpewogICAgICAvLyAgICAgICByZXMucHVzaChyb3dzLmJ1dHRvbnNbaV0pOwogICAgICAvLyAgICAgfQogICAgICAvLyAgIH0KICAgICAgLy8gfWVsc2V7CiAgICAgIHJlcyA9IF90b0NvbnN1bWFibGVBcnJheShyb3dzLmJ1dHRvbnMpOwogICAgICB2YXIgc3RhcnRUcmFucyA9IHt9OwogICAgICB2YXIgZW5kUHJvY2VzcyA9IHt9OwogICAgICB2YXIgbG9ja1VubG9jayA9IHt9OwogICAgICB2YXIgc2F2ZURyYWZ0ID0ge307CiAgICAgIHZhciBoYW5nVXAgPSB7fTsKICAgICAgdmFyIGNhbmNlbEhhbmdVcCA9IHt9OwogICAgICAvL+mHjeaWsOaOkuW6jyDmjInnhacg5ZCM5oSPIOWPjeWvuSDpqbPlm54g5b6B6K+iIOi9rOWKniDmtYHovawg57uI5q2iIOetvuaUtiDkv53lrZgKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmJ1dHRvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAocm93cy5idXR0b25zW2ldLmFsaWFzID09ICJzdGFydFRyYW5zIikgewogICAgICAgICAgLy/mtYHovawKICAgICAgICAgIHN0YXJ0VHJhbnMgPSByb3dzLmJ1dHRvbnNbaV07CiAgICAgICAgICByZXMucmVtb3ZlKHJvd3MuYnV0dG9uc1tpXSk7CiAgICAgICAgfSBlbHNlIGlmIChyb3dzLmJ1dHRvbnNbaV0uYWxpYXMgPT0gImVuZFByb2Nlc3MiKSB7CiAgICAgICAgICAvL+e7iOatogogICAgICAgICAgZW5kUHJvY2VzcyA9IHJvd3MuYnV0dG9uc1tpXTsKICAgICAgICAgIHJlcy5yZW1vdmUocm93cy5idXR0b25zW2ldKTsKICAgICAgICB9IGVsc2UgaWYgKHJvd3MuYnV0dG9uc1tpXS5hbGlhcyA9PSAibG9ja1VubG9jayIpIHsKICAgICAgICAgIC8v562+5pS2CiAgICAgICAgICBsb2NrVW5sb2NrID0gcm93cy5idXR0b25zW2ldOwogICAgICAgICAgcmVzLnJlbW92ZShyb3dzLmJ1dHRvbnNbaV0pOwogICAgICAgICAgaWYgKHJvd3MuYnV0dG9uc1tpXS5pc0xvY2spIHsKICAgICAgICAgICAgc3RhdGUuZm9yY2VMb2NrID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHJvd3MuYnV0dG9uc1tpXS5hbGlhcyA9PSAic2F2ZURyYWZ0IikgewogICAgICAgICAgLy/kv53lrZgKICAgICAgICAgIHNhdmVEcmFmdCA9IHJvd3MuYnV0dG9uc1tpXTsKICAgICAgICAgIHJlcy5yZW1vdmUocm93cy5idXR0b25zW2ldKTsKICAgICAgICB9IGVsc2UgaWYgKHJvd3MuYnV0dG9uc1tpXS5hbGlhcyA9PSAiaGFuZ1VwIikgewogICAgICAgICAgaGFuZ1VwID0gcm93cy5idXR0b25zW2ldOwogICAgICAgICAgcmVzLnJlbW92ZShyb3dzLmJ1dHRvbnNbaV0pOwogICAgICAgIH0gZWxzZSBpZiAocm93cy5idXR0b25zW2ldLmFsaWFzID09ICJjYW5jZWxIYW5nVXAiKSB7CiAgICAgICAgICBjYW5jZWxIYW5nVXAgPSByb3dzLmJ1dHRvbnNbaV07CiAgICAgICAgICByZXMucmVtb3ZlKHJvd3MuYnV0dG9uc1tpXSk7CiAgICAgICAgfQogICAgICAgIC8v5Yik5pat5piv5ZCm5piv5Yqg562+5Lu75YqhCiAgICAgICAgaWYgKHJvd3MuaXNBZGRTaWduKSB7CiAgICAgICAgICBpZiAocm93cy5idXR0b25zW2ldLmFsaWFzID09ICJpbnF1IikgewogICAgICAgICAgICAvL+W+geivogogICAgICAgICAgICByZXMucmVtb3ZlKHJvd3MuYnV0dG9uc1tpXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8v5Yik5pat5piv5ZCm5piv5Yqg562+5Lu75YqhCiAgICAgIGlmICghcm93cy5pc0FkZFNpZ24pIHsKICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoc3RhcnRUcmFucykgIT0gInt9IikgewogICAgICAgICAgcmVzLnB1c2goc3RhcnRUcmFucyk7CiAgICAgICAgfQogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShsb2NrVW5sb2NrKSAhPSAie30iKSB7CiAgICAgICAgICByZXMucHVzaChsb2NrVW5sb2NrKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGVuZFByb2Nlc3MpICE9ICJ7fSIpIHsKICAgICAgICByZXMucHVzaChlbmRQcm9jZXNzKTsKICAgICAgfQogICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoc2F2ZURyYWZ0KSAhPSAie30iKSB7CiAgICAgICAgcmVzLnB1c2goc2F2ZURyYWZ0KTsKICAgICAgfQogICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoaGFuZ1VwKSAhPSAie30iKSB7CiAgICAgICAgcmVzLnB1c2goaGFuZ1VwKTsKICAgICAgfQogICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoY2FuY2VsSGFuZ1VwKSAhPSAie30iKSB7CiAgICAgICAgcmVzLnB1c2goY2FuY2VsSGFuZ1VwKTsKICAgICAgfQogICAgfQogICAgLy8gfQogICAgc3RhdGUucm93c0J0biA9IHJlczsKICB9LAogIHNldEFwcHJvdmFsSXRlbTogZnVuY3Rpb24gc2V0QXBwcm92YWxJdGVtKHN0YXRlLCBhcHByb3ZhbEl0ZW0pIHsKICAgIHN0YXRlLmFwcHJvdmFsSXRlbSA9IGFwcHJvdmFsSXRlbTsKICB9LAogIHNldE9waW5pb25zOiBmdW5jdGlvbiBzZXRPcGluaW9ucyhzdGF0ZSwgb3BpbmlvbnMpIHsKICAgIHZhciBwYXJhbSA9IG9waW5pb25zLnBhcmFtOwogICAgdmFyIGRhdGFzID0ge307CiAgICB2YXIgcmVzID0gW107CiAgICAvL+mZhOS7tuWSjOato+aWh+Wtl+espuS4sui9rOWvueixoQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGluaW9ucy5kYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgIGRhdGFzID0gb3BpbmlvbnMuZGF0YVtpXTsKICAgICAgaWYgKG9waW5pb25zLmRhdGFbaV0uZmlsZXMpIHsKICAgICAgICBkYXRhcy5maWxlcyA9IEpTT04ucGFyc2Uob3BpbmlvbnMuZGF0YVtpXS5maWxlcyk7CiAgICAgIH0KICAgICAgaWYgKG9waW5pb25zLmRhdGFbaV0uemZpbGVzKSB7CiAgICAgICAgZGF0YXMuemZpbGVzID0gSlNPTi5wYXJzZShvcGluaW9ucy5kYXRhW2ldLnpmaWxlcyk7CiAgICAgIH0KICAgICAgcmVzLnB1c2goZGF0YXMpOwogICAgfQogICAgLy/liKTmlq3kvJrnrb7ku7vliqHmmK/lkKbpgInmi6kg5YWB6K645Y+C6ICD5oSP6KeBICAo6YCJ5oup5ZCm77yaZmFsc2XvvIzliJnlrqHmibnml7bkuI3lhYHorrjlj4LogIPlkIznjq/oioLlhbbku5bkvJrnrb7kurrlkZjnmoTmhI/op4EpCiAgICBpZiAoIXBhcmFtLnJlZmVyT3BpbmlvbiAmJiBwYXJhbS5ub2RlVHlwZSA9PSAiU0lHTlRBU0siKSB7CiAgICAgIHByb2Nlc3MudGFza05vZGUocGFyYW0uZGVmSWQsIGZ1bmN0aW9uIChyKSB7CiAgICAgICAgdmFyIG5vZGVzID0gci5kYXRhLmJwbURlZkxheW91dC5saXN0TGF5b3V0OwogICAgICAgIHZhciBzaWduTm9kZXMgPSBbXTsgLy/kvJrnrb7ku7vliqHoioLngrkKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vZGVzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICBpZiAobm9kZXNbal0ubm9kZVR5cGUgPT0gcGFyYW0ubm9kZVR5cGUpIHsKICAgICAgICAgICAgc2lnbk5vZGVzLnB1c2gobm9kZXNbal0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvL+WIoOmZpOWFtuS7luS8muetvuS7u+WKoeWuoeaJueS6uuWRmOeahOWuoeaJueiusOW9lQogICAgICAgIGZvciAodmFyIGkgPSByZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2lnbk5vZGVzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIGlmIChzaWduTm9kZXNbal0ubm9kZUlkID09IHBhcmFtLm5vZGVJZCAmJiBzaWduTm9kZXNbal0ubm9kZUlkID09IHJlc1tpXS50YXNrS2V5ICYmIHJlc1tpXS50YXNrSWQgIT0gcGFyYW0udGFza0lkKSB7CiAgICAgICAgICAgICAgcmVzLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBzdGF0ZS5vcGluaW9ucyA9IHJlczsKICB9LAogIHNldE5vZGVzOiBmdW5jdGlvbiBzZXROb2RlcyhzdGF0ZSwgbm9kZXMpIHsKICAgIHN0YXRlLm5vZGVzID0gbm9kZXM7CiAgfSwKICBzZXRDaGVja2VkTm9kZXM6IGZ1bmN0aW9uIHNldENoZWNrZWROb2RlcyhzdGF0ZSwgY2hlY2tlZE5vZGVzKSB7CiAgICBzdGF0ZS5jaGVja2VkTm9kZXMgPSBjaGVja2VkTm9kZXM7CiAgfSwKICBzZXRDaGVja2VkUHVzaDogZnVuY3Rpb24gc2V0Q2hlY2tlZFB1c2goc3RhdGUsIHZhbHVlKSB7CiAgICBzdGF0ZS5jaGVja2VkTm9kZXMucHVzaCh2YWx1ZSk7CiAgfSwKICBzZXRDaGVja2VkU3BsaWNlOiBmdW5jdGlvbiBzZXRDaGVja2VkU3BsaWNlKHN0YXRlLCB2YWx1ZSkgewogICAgc3RhdGUuY2hlY2tlZE5vZGVzLnNwbGljZSh2YWx1ZSwgMSk7CiAgfSwKICBzZXRCcG1FeGVTdGFja3NVc2VyTm9kZTogZnVuY3Rpb24gc2V0QnBtRXhlU3RhY2tzVXNlck5vZGUoc3RhdGUsIGJwbUV4ZVN0YWNrc1VzZXJOb2RlKSB7CiAgICBzdGF0ZS5icG1FeGVTdGFja3NVc2VyTm9kZSA9IGJwbUV4ZVN0YWNrc1VzZXJOb2RlOwogIH0sCiAgc2V0UmVsYXRlZEluZm9ybWF0aW9uOiBmdW5jdGlvbiBzZXRSZWxhdGVkSW5mb3JtYXRpb24oc3RhdGUsIHJlbGF0ZWRJbmZvcm1hdGlvbikgewogICAgc3RhdGUucmVsYXRlZEluZm9ybWF0aW9uID0gcmVsYXRlZEluZm9ybWF0aW9uOwogIH0sCiAgc2V0RHVlVGltZTogZnVuY3Rpb24gc2V0RHVlVGltZShzdGF0ZSwgZHVlVGltZSkgewogICAgc3RhdGUuZHVlVGltZSA9IGR1ZVRpbWU7CiAgfSwKICBzZXROZXh0RXhlY3V0b3I6IGZ1bmN0aW9uIHNldE5leHRFeGVjdXRvcihzdGF0ZSwgbmV4dEV4ZWN1dG9yKSB7CiAgICBzdGF0ZS5uZXh0RXhlY3V0b3IgPSBuZXh0RXhlY3V0b3I7CiAgfSwKICBzZXRTaWduYXR1cmU6IGZ1bmN0aW9uIHNldFNpZ25hdHVyZShzdGF0ZSwgc2lnbmF0dXJlKSB7CiAgICBzdGF0ZS5zaWduYXR1cmVDb25maWcgPSBzaWduYXR1cmU7CiAgfSwKICBzZXRTaWduYXR1cmVTdGF0dXM6IGZ1bmN0aW9uIHNldFNpZ25hdHVyZVN0YXR1cyhzdGF0ZSwgc3RhdHVzKSB7CiAgICBzdGF0ZS5zaWduYXR1cmVDb25maWcuc3RhdHVzID0gc3RhdHVzOwogIH0sCiAgaW5pdFNpZ25hdHVyZTogZnVuY3Rpb24gaW5pdFNpZ25hdHVyZShzdGF0ZSwgZGF0YSkgewogICAgc3RhdGUuc2lnbmF0dXJlQ29uZmlnID0gewogICAgICBzdGF0dXM6ICdkaXNhYmxlJywKICAgICAgZmllbGQ6ICcnLAogICAgICBpc0NvdmVyOiBmYWxzZSwKICAgICAgc2VjcmV0RnJlZTogZmFsc2UsCiAgICAgIHBhc3N3b3JkOiAnJwogICAgfTsKICB9Cn07CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lc3BhY2VkOiB0cnVlLAogIHN0YXRlOiBzdGF0ZSwKICBnZXR0ZXJzOiBnZXR0ZXJzLAogIGFjdGlvbnM6IGFjdGlvbnMsCiAgbXV0YXRpb25zOiBtdXRhdGlvbnMKfTs="},null]}