{"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\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\flow\\OnlineForm.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\flow\\OnlineForm.vue","mtime":1705040076821},{"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\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvbGp6Yy1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2xqemMtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CmltcG9ydCAicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCgppbXBvcnQgRWlwSW5wdXQgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwSW5wdXQudnVlJzsKaW1wb3J0IEVpcENoZWNrYm94IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcENoZWNrYm94LnZ1ZSc7CmltcG9ydCBFaXBTZWxlY3QgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwU2VsZWN0LnZ1ZSc7CmltcG9ydCBFaXBSYWRpbyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBSYWRpby52dWUnOwppbXBvcnQgRWlwVXNlclNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFVzZXJTZWxlY3Rvci52dWUnOwppbXBvcnQgRWlwRGVtZW5zaW9uU2VsZWN0b3IgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvc2VsZWN0b3IvRWlwRGVtZW5zaW9uU2VsZWN0b3IudnVlJzsKaW1wb3J0IEVpcEpvYlNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcEpvYlNlbGVjdG9yLnZ1ZSc7CmltcG9ydCBFaXBPcmdTZWxlY3RvciBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9zZWxlY3Rvci9FaXBPcmdTZWxlY3Rvci52dWUnOwppbXBvcnQgRWlwUG9zdFNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFBvc3RTZWxlY3Rvci52dWUnOwppbXBvcnQgRWlwUm9sZVNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFJvbGVTZWxlY3Rvci52dWUnOwppbXBvcnQgRWlwVGV4dGFyZWEgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVGV4dGFyZWEudnVlJzsKaW1wb3J0IEVpcEZvbnQgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwRm9udC52dWUnOwppbXBvcnQgRWlwRGlhbG9nIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcERpYWxvZy52dWUnOwppbXBvcnQgRWlwQXV0b2NvbXBsZXRlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcEF1dG9jb21wbGV0ZS52dWUnOwppbXBvcnQgRWlwQ2FzY2FkZXIgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwQ2FzY2FkZXIudnVlJzsKaW1wb3J0IEVpcFRyZWVzZWxlY3QgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVHJlZXNlbGVjdC52dWUnOwppbXBvcnQgRWlwQnV0dG9uIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcEJ1dHRvbi52dWUnOwppbXBvcnQgRWlwRGF0ZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBEYXRlLnZ1ZSc7CmltcG9ydCBFaXBJbWcgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwSW1nLnZ1ZSc7CmltcG9ydCBFaXBWaWV3ZXIgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVmlld2VyLnZ1ZSc7CmltcG9ydCBFaXBTd2l0Y2ggZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwU3dpdGNoLnZ1ZSc7CnZhciBFaXBNYXAgPSBmdW5jdGlvbiBFaXBNYXAoKSB7CiAgcmV0dXJuIGltcG9ydCgiQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwTWFwLnZ1ZSIpOwp9Owp2YXIgRWlwRm9udFVlZGl0b3IgPSBmdW5jdGlvbiBFaXBGb250VWVkaXRvcigpIHsKICByZXR1cm4gaW1wb3J0KCJAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBGb250VWVkaXRvci52dWUiKTsKfTsKaW1wb3J0IEh0RmlsZSBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdEZpbGUudnVlJzsKaW1wb3J0IFZSdW50aW1lVGVtcGxhdGUgZnJvbSAndi1ydW50aW1lLXRlbXBsYXRlJzsKaW1wb3J0IEh0R2FuZ2VkU2VsZWN0IGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0R2FuZ2VkU2VsZWN0LnZ1ZSc7CmltcG9ydCBFaXBSZWxGbG93IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFJlbEZsb3cudnVlJzsKaW1wb3J0IEVpcFN1YkRpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdWJEaWFsb2cudnVlJzsKaW1wb3J0IEVpcFN1bkRpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdW5EaWFsb2cudnVlJzsKaW1wb3J0IEh0TGFiZWwgZnJvbSAnQC9jb21wb25lbnRzL2NvbnRyb2wvSHRMYWJlbC52dWUnOwppbXBvcnQgSHREaWdpdGFsIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0RGlnaXRhbC52dWUnOwppbXBvcnQgSHRDdXJyZW5jeSBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdEN1cnJlbmN5LnZ1ZSc7CmltcG9ydCBFaXBSZWFsdGltZUlucHV0IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFJlYWx0aW1lSW5wdXQudnVlJzsKaW1wb3J0IEVpcFJlYWx0aW1lVGV4dGFyZWEgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwUmVhbHRpbWVUZXh0YXJlYS52dWUnOwppbXBvcnQgRWlwU3RlcCBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdGVwLnZ1ZSc7CmltcG9ydCBIdElucHV0QXV0b2NvbXBsZXRlIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0SW5wdXRBdXRvY29tcGxldGUudnVlJzsKaW1wb3J0IEh0VHJlZXNlbGVjdCBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdFRyZWVzZWxlY3QudnVlJzsKaW1wb3J0IEh0Q2FzY2FkZXIgZnJvbSAnQC9jb21wb25lbnRzL2NvbnRyb2wvSHRDYXNjYWRlci52dWUnOwppbXBvcnQgSHRUcmVlIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0VHJlZS52dWUnOwppbXBvcnQgRWlwVGFicyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBUYWJzLnZ1ZSc7CmltcG9ydCBFaXBTdWJQYWdpbmF0aW9uIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFN1YlBhZ2luYXRpb24udnVlJzsKaW1wb3J0IEVpcFN1YkltcG9ydERpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdWJJbXBvcnREaWFsb2cudnVlJzsKaW1wb3J0IEVpcFN1YkV4cG9ydERpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdWJFeHBvcnREaWFsb2cudnVlJzsKaW1wb3J0IEVpcEF0dGFjaG1lbnQgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwQXR0YWNobWVudC52dWUnOwppbXBvcnQgRWlwRGljIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcERpYy52dWUnOwppbXBvcnQgRWlwUGFnaW5hdGlvbkxheW91dCBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBQYWdpbmF0aW9uTGF5b3V0LnZ1ZSc7CmltcG9ydCBFaXBQYWdpbmF0aW9uIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFBhZ2luYXRpb24udnVlJzsKaW1wb3J0IEVpcENvbGxhcHNlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcENvbGxhcHNlLnZ1ZSc7CmltcG9ydCBFaXBQYWdpbmF0aW9uU3RlcHMgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwUGFnaW5hdGlvblN0ZXBzLnZ1ZSc7CmltcG9ydCBFaXBEYXRhVmlldyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBEYXRhVmlldy52dWUnOwppbXBvcnQgRWlwSG90VGFibGUgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwSG90VGFibGUudnVlJzsKaW1wb3J0IEVpcEhvdFN1YkRpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBIb3RTdWJEaWFsb2cudnVlJzsKaW1wb3J0IENvbnRyYWN0UHJldmlldyBmcm9tICdAL2NvbXBvbmVudHMvY29tbW9uL0NvbnRyYWN0UHJldmlldy52dWUnOwppbXBvcnQgRWlwVGFnIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFRhZy52dWUnOwppbXBvcnQgRWlwU3VidGFibGVCYWNrZmlsbCBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdWJ0YWJsZUJhY2tmaWxsLnZ1ZSc7CmltcG9ydCBFaXBEaXZpZGVyIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcERpdmlkZXIudnVlJzsKaW1wb3J0IEVpcE9mZmljZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBPZmZpY2UudnVlJzsKaW1wb3J0IEVpcFFyY29kZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBRcmNvZGUudnVlJzsKaW1wb3J0IEVpcFNpZ25hdHVyZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTaWduYXR1cmUudnVlJzsKaW1wb3J0IFN1YlBhZ2luYXRpb24gZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvYnVzL1N1YlBhZ2luYXRpb24uanMnOwppbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAnb25saW5lLWZvcm0nLAogIHByb3BzOiBbJ2h0bWwnLCAnZGF0YScsICdwZXJtaXNzaW9uJywgJ2lzVmlldycsICdpc1ByaW50JywgJ2luaXRGaWxsRGF0YScsICdmbG93S2V5JywgJ2Zvcm1JZCcsICdpc0xvb2snLCAnZmxvd0tleSddLAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBsb2FkZWRGYWlsOiBmYWxzZSwKICAgICAgLy/ooajljZXliqDovb1odG1s5piv5ZCm5aSx6LSlCiAgICAgIHN1YkJhY2tmaWxsOiBuZXcgTWFwKCksCiAgICAgIGhvdFRhYmxlRmlsbGJhY2s6IFN0cmluZwogICAgfTsKICB9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICB0aGlzLmluaXQoKTsKICB9LAogIHdhdGNoOiB7CiAgICBkYXRhOiB7CiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsLCBvbGRWYWx1ZSkgewogICAgICAgIHRoaXMuJHJvb3QuJGVtaXQoInVwZGF0ZURhdGEiLCBuZXdWYWwpOwogICAgICB9LAogICAgICBkZWVwOiB0cnVlLAogICAgICBpbW1lZGlhdGU6IHRydWUKICAgIH0sCiAgICBodG1sOiBmdW5jdGlvbiBodG1sKG5ld1ZhbCkgewogICAgICBpZiAobmV3VmFsKSB7CiAgICAgICAgdGhpcy5pbml0KCk7CiAgICAgIH0KICAgIH0sCiAgICBob3RUYWJsZUZpbGxiYWNrOiBmdW5jdGlvbiBob3RUYWJsZUZpbGxiYWNrKG5ld1ZhbCkgewogICAgICBpZiAobmV3VmFsKSB7CiAgICAgICAgdmFyIG5ld1ZhbEFycmF5ID0gbmV3VmFsLnNwbGl0KCdfdGltZXN0YW1wXycpOwogICAgICAgIHZhciBib1BhdGhBcnJheSA9IG5ld1ZhbEFycmF5WzBdLnNwbGl0KCcuJyk7CiAgICAgICAgdmFyIGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBib1BhdGhBcnJheVswXSArICcuJyArIGJvUGF0aEFycmF5WzFdOwogICAgICAgIHZhciBzdWJCbyA9IHRoaXMuZGF0YVtib1BhdGhBcnJheVswXV1bYm9QYXRoQXJyYXlbMV1dOwogICAgICAgIHRoaXMuJHJlZnMub25saW5lRm9ybS4kcmVmc1tob3RUYWJsZVJlZl0uZmlsbGJhY2tIb3RUYWJsZURhdGEoc3ViQm8pOwogICAgICB9CiAgICB9CiAgfSwKICBtZXRob2RzOiB7CiAgICBsb2FkU3VjY2VzczogZnVuY3Rpb24gbG9hZFN1Y2Nlc3MocmVzKSB7CiAgICAgIHRoaXMuJGVtaXQoImxvYWRTdWNjZXNzIiwgcmVzKTsKICAgIH0sCiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkgewogICAgICB2YXIgaW5pdEZpbGxEYXRhID0gdGhpcy5pbml0RmlsbERhdGE7CiAgICAgIHZhciBwZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9uOwogICAgICBWdWUuY29tcG9uZW50KCdodC1ydW50aW1lLXRlbXBsYXRlJywgewogICAgICAgIHByb3BzOiBbJ2h0bWwnLCAnZGF0YScsICdwZXJtaXNzaW9uJywgJ2lzVmlldycsICdpc1ByaW50J10sCiAgICAgICAgdGVtcGxhdGU6IHRoaXMuaHRtbCwKICAgICAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgbGVmdF9pbWFnZTogJycsCiAgICAgICAgICAgIHJpZ2h0X2ltYWdlOiAnJywKICAgICAgICAgICAgdHJhbnNpdGlvbkluZGV4OiAtMSwKICAgICAgICAgICAgY3VyVGFiSW5kZXg6ICd0YWJlX2NoZWNrXzAnLAogICAgICAgICAgICBlcnJNZXNnOiAnJywKICAgICAgICAgICAgZmlsbE9yZzoge30sCiAgICAgICAgICAgIGZpbGxPcmdDb25mTWFwOiB7fQogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgICAvLyDlrZDooajliY3nq6/liIbpobXov4fmu6TlmagKICAgICAgICAgIHBhZ2luZ1N1YkRhdGE6IGZ1bmN0aW9uIHBhZ2luZ1N1YkRhdGEoKSB7CiAgICAgICAgICAgIHZhciBtZSA9IHRoaXM7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YXBhdGgpIHsKICAgICAgICAgICAgICAvLyDpgJrov4flrZDooajmlbDmja7ot6/lvoTojrflj5bliIbpobXmlbDmja4KICAgICAgICAgICAgICByZXR1cm4gU3ViUGFnaW5hdGlvbi5wYWdpbmdCeVBhdGgoZGF0YXBhdGgsIG1lKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICAgICAgICAvLyDlpoLmnpzlvZPliY3ooajljZXnmoRlbGVtZW505Li6Q29tbWVudOivtOaYjuihqOWNleWKoOi9veWksei0peS6huOAggogICAgICAgICAgaWYgKHRoaXMuJGVsICYmIHRoaXMuJGVsLmNvbnN0cnVjdG9yID09IENvbW1lbnQpIHsKICAgICAgICAgICAgdGhpcy4kcGFyZW50LmxvYWRlZEZhaWwgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy4kdmFsaWRhdG9yID0gdGhpcy4kcm9vdC4kdmFsaWRhdG9yOwogICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbi50YWJsZSkgewogICAgICAgICAgICBmb3IgKHZhciBzdWJUYWJsZU5hbWUgaW4gdGhpcy5wZXJtaXNzaW9uLnRhYmxlKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbi50YWJsZVtzdWJUYWJsZU5hbWVdLnJlcXVpcmVkKSB7CiAgICAgICAgICAgICAgICB0aGlzLmFkZFN1YlRhYmxlQnlOYW1lKHN1YlRhYmxlTmFtZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLiRlbWl0KCJsb2FkU3VjY2VzcyIsIHRydWUpOwogICAgICAgICAgLy/liJ3lp4vljJZoYW5kc29udGFibGXmlbDmja4KICAgICAgICAgIGlmICh0aGlzLmRhdGEpIHsKICAgICAgICAgICAgdmFyIGZvcm1JZCA9IHRoaXMuZm9ybUlkOwogICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgICAgICBpZiAoIWZvcm1JZCkgewogICAgICAgICAgICAgIHRoaXMudG9Jbml0VGVtb2xhdGVEYXRhKGluaXRGaWxsRGF0YSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFyIGxvYWRpbmcgPSB0aGlzLiRsb2FkaW5nKHsKICAgICAgICAgICAgICAgIGxvY2s6IHRydWUsCiAgICAgICAgICAgICAgICB0ZXh0OiAn5q2j5Zyo6I635Y+W5Yid5aeL5YyW5L+h5oGvLi4uJywKICAgICAgICAgICAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB0aGlzLiRodHRwLmdldCgnJHtmb3JtfS9mb3JtL2Zvcm0vdjEvcHJldmlld0Rlc2lnblZ1ZT9mb3JtSWQ9JyArIGZvcm1JZCkudGhlbihmdW5jdGlvbiAocmVzcCkgewogICAgICAgICAgICAgICAgaWYgKHJlc3AuZGF0YSkgewogICAgICAgICAgICAgICAgICB2YXIgZm9ybURhdGEgPSByZXNwLmRhdGEuZGF0YTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGZvcm1EYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1EYXRhLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXMuZGF0YVtrZXldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmRhdGFba2V5XSA9IGZvcm1EYXRhW2tleV07CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgX3RoaXMudG9Jbml0VGVtb2xhdGVEYXRhKGluaXRGaWxsRGF0YSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgIF90aGlzLnRvSW5pdFRlbW9sYXRlRGF0YShpbml0RmlsbERhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTsKICAgICAgICAgICAgICAgIF90aGlzLnRvSW5pdFRlbW9sYXRlRGF0YShpbml0RmlsbERhdGEpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5pc1ByaW50KSB7CiAgICAgICAgICAgIHRoaXMucHJpbnREZXRhaWwoKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIC8v5pS5di1ydW50aW1lLXRlbXBsYXRlLmVzLmpz55qE5rqQ56CB77yM5oiW6ICF5pS5di1ydW50aW1lLXRlbXBsYXRl55qE54mI5pys5pS55oiQMS41LjIKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICB0b0luaXRUZW1vbGF0ZURhdGE6IGZ1bmN0aW9uIHRvSW5pdFRlbW9sYXRlRGF0YShpbml0RmlsbERhdGEpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGZvcm1EYXRhID0gdGhpcy5kYXRhOwogICAgICAgICAgICB2YXIgcmVmcyA9IHRoaXMuJHJlZnM7CiAgICAgICAgICAgIGZvciAodmFyIGRlZiBpbiBmb3JtRGF0YSkgewogICAgICAgICAgICAgIGlmIChmb3JtRGF0YS5oYXNPd25Qcm9wZXJ0eShkZWYpKSB7CiAgICAgICAgICAgICAgICB2YXIgYm9EZWYgPSBmb3JtRGF0YVtkZWZdOwogICAgICAgICAgICAgICAgZm9yICh2YXIgYm8gaW4gYm9EZWYpIHsKICAgICAgICAgICAgICAgICAgaWYgKGJvRGVmLmhhc093blByb3BlcnR5KGJvKSAmJiBiby5pbmRleE9mKCdzdWJfJykgPT0gMCkgewogICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSAnaG90dGFibGUuJyArIGRlZiArICcuJyArIGJvOwogICAgICAgICAgICAgICAgICAgIGlmIChyZWZzW3JlZl0pIHsKICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnNbcmVmXS5maWxsYmFja0hvdFRhYmxlRGF0YShmb3JtRGF0YVtkZWZdW2JvXSwgcGVybWlzc2lvbik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0RmlsbERhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICByZWZzW3JlZl0uaW5pdFRlbXBsYXRlRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgcHJpbnREZXRhaWw6IGZ1bmN0aW9uIHByaW50RGV0YWlsKCkgewogICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdvbmxpbmUtZm9ybScpWzBdLmlubmVySFRNTDsKICAgICAgICAgICAgd2luZG93LnByaW50KCk7CiAgICAgICAgICAgIGlmICh0aGlzLmlzUHJpbnQpIHsKICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIuZ28oLTEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICB9LCAyMDApOwogICAgICAgICAgfSwKICAgICAgICAgIGxlYXZlVGFiVmVyaWZ5OiBmdW5jdGlvbiBsZWF2ZVRhYlZlcmlmeShhY3RpdmVOYW1lLCBvbGRBY3RpdmVOYW1lKSB7CiAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICAgICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBfY2FsbGVlKCkgewogICAgICAgICAgICAgIHZhciBlcnJpdGVtcywgZm9ybUVsZW1lbnRBcnksIGZybUluc3QsIGNoaWxkcmVucywgcmVzdWx0LCBjdXJFbCwgbXNnLCBfaSwgX2Vycml0ZW1zLCBpdGVtLCBmaWVsZExhYmVsOwogICAgICAgICAgICAgIHJldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkgewogICAgICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHsKICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgIGVycml0ZW1zID0gW107CiAgICAgICAgICAgICAgICAgICAgZm9ybUVsZW1lbnRBcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnb25saW5lLWZvcm0nKTsKICAgICAgICAgICAgICAgICAgICBmcm1JbnN0ID0gZm9ybUVsZW1lbnRBcnlbMF0uX192dWVfXzsKICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbnMgPSBmcm1JbnN0LiRyZWZzLm9ubGluZUZvcm0uJHJlZnM7CiAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDY7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZybUluc3QuJHJvb3QuJHZhbGlkYXRvci52YWxpZGF0ZUFsbCgnY3VzdG9tLWZvcm0nKTsKICAgICAgICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jb250ZXh0LnNlbnQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgIGN1ckVsID0gY2hpbGRyZW5zW29sZEFjdGl2ZU5hbWVdLiRlbDsKICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi4kdmFsaWRhdG9yLmVycm9ycy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJFbC5jb250YWlucyhkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShpdGVtLmZpZWxkKVswXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJpdGVtcy5wdXNoKGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy/mi7zmjqXmj5DnpLrmtojmga8KICAgICAgICAgICAgICAgICAgICBtc2cgPSAnJzsKICAgICAgICAgICAgICAgICAgICBmb3IgKF9pID0gMCwgX2Vycml0ZW1zID0gZXJyaXRlbXM7IF9pIDwgX2Vycml0ZW1zLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IF9lcnJpdGVtc1tfaV07CiAgICAgICAgICAgICAgICAgICAgICBmaWVsZExhYmVsID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5maWVsZCkgewogICAgICAgICAgICAgICAgICAgICAgICBmaWVsZExhYmVsID0gaXRlbS5maWVsZDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmZpZWxkICYmIGl0ZW0uZmllbGQuaW5kZXhPZignLScpICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTGFiZWwgPSBpdGVtLmZpZWxkLnN1YnN0cihpdGVtLmZpZWxkLmluZGV4T2YoJy0nKSArIDEpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgbXNnICs9IGZpZWxkTGFiZWwgKyAnICcgKyBpdGVtLm1zZyArICc8YnIvPic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChtc2cpIHsKICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi4kbm90aWZ5LmVycm9yKHsKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF90aGlzMi4kdCgnY29tbW9uLmVyclRpcCcpLAogICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVVzZUhUTUxTdHJpbmc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1zZwogICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCBfY2FsbGVlKTsKICAgICAgICAgICAgfSkpKCk7CiAgICAgICAgICB9LAogICAgICAgICAgLy/lrZDooajkuIrnp7sKICAgICAgICAgIHVwOiBmdW5jdGlvbiB1cChpbmRleCwgZGF0YSkgewogICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHsKICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflt7Lnu4/mmK/liJfooajkuK3nrKzkuIDkvY0nLAogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFyIHRlbXAgPSBkYXRhW2luZGV4IC0gMV07CiAgICAgICAgICAgICAgdGhpcy4kcGFyZW50LmxvYWRlZEZhaWwgPSB0cnVlOwogICAgICAgICAgICAgIHRoaXMuJHNldChkYXRhLCBpbmRleCAtIDEsIGRhdGFbaW5kZXhdKTsKICAgICAgICAgICAgICB0aGlzLiRzZXQoZGF0YSwgaW5kZXgsIHRlbXApOwogICAgICAgICAgICAgIHRoaXMuJHBhcmVudC5sb2FkZWRGYWlsID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAvL+WtkOihqOS4i+enuwogICAgICAgICAgZG93bjogZnVuY3Rpb24gZG93bihpbmRleCwgZGF0YSkgewogICAgICAgICAgICBpZiAoaW5kZXggPT09IGRhdGEubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+W3sue7j+aYr+WIl+ihqOS4reacgOWQjuS4gOS9jScsCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLmlzVHJhbnNpdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgdmFyIGkgPSBkYXRhW2luZGV4ICsgMV07CiAgICAgICAgICAgICAgdGhpcy4kcGFyZW50LmxvYWRlZEZhaWwgPSB0cnVlOwogICAgICAgICAgICAgIHRoaXMuJHNldChkYXRhLCBpbmRleCArIDEsIGRhdGFbaW5kZXhdKTsKICAgICAgICAgICAgICB0aGlzLiRzZXQoZGF0YSwgaW5kZXgsIGkpOwogICAgICAgICAgICAgIHRoaXMuJHBhcmVudC5sb2FkZWRGYWlsID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAvL+WtkOihqOWkjeWItuaVsOaNrgogICAgICAgICAgY29weTogZnVuY3Rpb24gY29weShvYmosIGl0ZW0pIHsKICAgICAgICAgICAgdmFyIG5ld09uZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpOwogICAgICAgICAgICAvL+aKimlk572u56m65Lul5YWN6LWw55qE5L+u5pS55pa55rOVCiAgICAgICAgICAgIGlmIChuZXdPbmUuaWRfKSB7CiAgICAgICAgICAgICAgZGVsZXRlIG5ld09uZS5pZF87CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG5ld09uZS5zdWJfcm93X3JlYWRvbmx5KSB7CiAgICAgICAgICAgICAgZGVsZXRlIG5ld09uZS5zdWJfcm93X3JlYWRvbmx5OwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5ld09uZS5zdWJfZ3VpZCA9IHRoaXMuZ3VpZCgpOwogICAgICAgICAgICBvYmoucHVzaChuZXdPbmUpOwogICAgICAgICAgfSwKICAgICAgICAgIC8v5a2Q6KGo6buY6K6k5YC85Zue5aGrCiAgICAgICAgICBhZGRTdWJUYWI6IGZ1bmN0aW9uIGFkZFN1YlRhYihzdWJUYWJQYXRoKSB7CiAgICAgICAgICAgIHZhciBwYXRoQXJyID0gc3ViVGFiUGF0aC5zcGxpdCgnLicpOwogICAgICAgICAgICBpZiAocGF0aEFyci5sZW5ndGggPCAzKSB7CiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Q6KGo6Lev5b6E5pyJ6K+vJywKICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHZhciBzdWJUYWJOYW1lID0gcGF0aEFyclsyXS5yZXBsYWNlKCdzdWJfJywgJycpOwogICAgICAgICAgICAgIHZhciBzdWJJbml0RGF0YSA9IHRoaXMuZGF0YVtwYXRoQXJyWzFdXS5pbml0RGF0YVtzdWJUYWJOYW1lXSB8fCB7fTsKICAgICAgICAgICAgICAvL+WIpOaWreW9k+WJjeWtkOihqOaYr+WQpuWtmOacieWbnuaYvuWAvAogICAgICAgICAgICAgIGlmICh0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwgJiYgdGhpcy4kcGFyZW50LnN1YkJhY2tmaWxsLmhhcyhzdWJUYWJQYXRoKSkgewogICAgICAgICAgICAgICAgLy90aGlzLmRhdGFbcGF0aEFyclsxXV1bcGF0aEFyclsyXV0ucHVzaCh0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwuZ2V0KHN1YlRhYlBhdGgpKTsKICAgICAgICAgICAgICAgIHN1YkluaXREYXRhID0gdGhpcy4kcGFyZW50LnN1YkJhY2tmaWxsLmdldChzdWJUYWJQYXRoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy/miormlbDnu4Tph4zpnaLnmoTlgLzkuLogbnVsbCDovazmjaLkuLrnqbrlrZfnrKbkuLIKICAgICAgICAgICAgICB2YXIgc3RyID0gSlNPTi5zdHJpbmdpZnkoc3ViSW5pdERhdGEpLnJlcGxhY2UoL251bGwvZywgJyIiJyk7CiAgICAgICAgICAgICAgdmFyIHN1YkRhdGEgPSBKU09OLnBhcnNlKHN0cik7CiAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHN1YkRhdGEpIHsKICAgICAgICAgICAgICAgIC8v54K55re75Yqg5pe25Yik5pat6KaB5paw5aKe5a2Q6KGo6K6w5b2V5Lit55qE5a2Z6KGo5piv5ZCm5pyJ5YC8CiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ3N1Yl8nKSA9PSAwICYmIHN1YkRhdGFba2V5XS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgIHN1YkRhdGFba2V5XSA9IFtdOyAvL+acieWImea4heepugogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gLy/ngrnmt7vliqDml7bliKTmlq3opoHmlrDlop7lrZDooajorrDlvZXkuK3nmoTlrZfmrrXmmK/lkKbmnInlgLwKICAgICAgICAgICAgICAgIC8vIGlmKHN1YkRhdGFba2V5XSl7CiAgICAgICAgICAgICAgICAvLyAgICAgc3ViRGF0YVtrZXldID0gIiI7Ly/mnInliJnmuIXnqboKICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdmFyIGZpbGxPYmogPSB0aGlzLnRvRmlsbE9yZyhwYXRoQXJyWzFdICsgJy4nICsgcGF0aEFyclsyXSwgc3ViRGF0YSk7CiAgICAgICAgICAgICAgZmlsbE9iai5zdWJfZ3VpZCA9IHRoaXMuZ3VpZCgpOwogICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoQXJyWzFdXVtwYXRoQXJyWzJdXS5wdXNoKGZpbGxPYmopOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgZ3VpZDogZnVuY3Rpb24gZ3VpZCgpIHsKICAgICAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHsKICAgICAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsCiAgICAgICAgICAgICAgICB2ID0gYyA9PSAneCcgPyByIDogciAmIDB4MyB8IDB4ODsKICAgICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIC8v5a2Z6KGo6buY6K6k5YC85Zue5aGrCiAgICAgICAgICBhZGRTdW5UYWI6IGZ1bmN0aW9uIGFkZFN1blRhYihzdWJUYWJQYXRoLCBzdWJJbmRleCkgewogICAgICAgICAgICB2YXIgcGF0aEFyciA9IHN1YlRhYlBhdGguc3BsaXQoJy4nKTsKICAgICAgICAgICAgaWYgKHBhdGhBcnIubGVuZ3RoIDwgNCkgewogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtmeihqOi3r+W+hOacieivrycsCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgc3ViVGFiTmFtZSA9IHBhdGhBcnJbMl0ucmVwbGFjZSgnc3ViXycsICcnKTsKICAgICAgICAgICAgICB2YXIgc3VuVGFiTmFtZSA9IHBhdGhBcnJbM10ucmVwbGFjZSgnc3ViXycsICcnKTsKICAgICAgICAgICAgICB2YXIgc3ViSW5pdERhdGEgPSB0aGlzLmRhdGFbcGF0aEFyclsxXV0uaW5pdERhdGFbc3ViVGFiTmFtZV0uaW5pdERhdGFbc3VuVGFiTmFtZV0gfHwge307CiAgICAgICAgICAgICAgLy/liKTmlq3lvZPliY3lrZnooajmmK/lkKblrZjmnInlm57mmL7lgLwKICAgICAgICAgICAgICBpZiAodGhpcy4kcGFyZW50LnN1YkJhY2tmaWxsICYmIHRoaXMuJHBhcmVudC5zdWJCYWNrZmlsbC5oYXMoc3ViVGFiUGF0aCkpIHsKICAgICAgICAgICAgICAgIC8vdGhpcy5kYXRhW3BhdGhBcnJbMV1dW3BhdGhBcnJbMl1dLnB1c2godGhpcy4kcGFyZW50LnN1YkJhY2tmaWxsLmdldChzdWJUYWJQYXRoKSk7CiAgICAgICAgICAgICAgICBzdWJJbml0RGF0YSA9IHRoaXMuJHBhcmVudC5zdWJCYWNrZmlsbC5nZXQoc3ViVGFiUGF0aCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIC8v5oqK5pWw57uE6YeM6Z2i55qE5YC85Li6IG51bGwg6L2s5o2i5Li656m65a2X56ym5LiyCiAgICAgICAgICAgICAgdmFyIHN0ciA9IEpTT04uc3RyaW5naWZ5KHN1YkluaXREYXRhKS5yZXBsYWNlKC9udWxsL2csICciIicpOwogICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhW3BhdGhBcnJbMV1dW3BhdGhBcnJbMl1dW3N1YkluZGV4XVtwYXRoQXJyWzNdXSkgewogICAgICAgICAgICAgICAgdmFyIGtleSA9IFtwYXRoQXJyWzNdXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhBcnJbMV1dW3BhdGhBcnJbMl1dW3N1YkluZGV4XVtrZXldID0gdmFsdWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBzdW5Cb2RhdGEgPSBKU09OLnBhcnNlKHN0cik7CiAgICAgICAgICAgICAgc3VuQm9kYXRhLnN1Yl9ndWlkID0gdGhpcy5ndWlkKCk7CiAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhBcnJbMV1dW3BhdGhBcnJbMl1dW3N1YkluZGV4XVtwYXRoQXJyWzNdXS5wdXNoKHN1bkJvZGF0YSk7CiAgICAgICAgICAgICAgdGhpcy4kZm9yY2VVcGRhdGUoKTsgLy/ov6vkvb8gVnVlIOWunuS+i+mHjeaWsOa4suafkwoKICAgICAgICAgICAgICAvLyB0aGlzLnBlcm1pc3Npb24udGFibGVbc3VuVGFiTmFtZV0ucmVxdWlyZWQgPSAiZmFsc2UiOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgYWRkU3ViVGFibGVCeU5hbWU6IGZ1bmN0aW9uIGFkZFN1YlRhYmxlQnlOYW1lKHN1YlRhYmxlTmFtZSkgewogICAgICAgICAgICBmb3IgKHZhciBib0FsaWFzIGluIHRoaXMuZGF0YSkgewogICAgICAgICAgICAgIHZhciBzdWJJbml0RGF0YSA9IHRoaXMuZGF0YVtib0FsaWFzXS5pbml0RGF0YVtzdWJUYWJsZU5hbWVdIHx8IHt9OwogICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXSAmJiB0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXS5sZW5ndGggPCAxKSB7CiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXS5wdXNoKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3ViSW5pdERhdGEpKSk7CiAgICAgICAgICAgICAgICAvLyDlrZnooajlv4Xloasg6buY6K6k5re75Yqg5LiA5p2hCiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9uLnRhYmxlKSB7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIHRhYmxlTmFtZSBpbiB0aGlzLnBlcm1pc3Npb24udGFibGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9uLnRhYmxlW3RhYmxlTmFtZV0ucmVxdWlyZWQpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXVswXS5oYXNPd25Qcm9wZXJ0eSgnc3ViXycgKyB0YWJsZU5hbWUpICYmIHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdWzBdWydzdWJfJyArIHRhYmxlTmFtZV0gJiYgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF1bJ3N1Yl8nICsgdGFibGVOYW1lXS5sZW5ndGggPCAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdWzBdWydzdWJfJyArIHRhYmxlTmFtZV0ucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHN1YkluaXREYXRhLmluaXREYXRhW3RhYmxlTmFtZV0pKSk7CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdWzBdLmhhc093blByb3BlcnR5KCdzdWJfJyArIHRhYmxlTmFtZSkgJiYgIXRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdWzBdWydzdWJfJyArIHRhYmxlTmFtZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF1bJ3N1Yl8nICsgdGFibGVOYW1lXSA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXVswXVsnc3ViXycgKyB0YWJsZU5hbWVdLnB1c2goc3ViSW5pdERhdGEuaW5pdERhdGFbdGFibGVOYW1lXSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgZGVsZXRlUm93OiBmdW5jdGlvbiBkZWxldGVSb3coc3ViVGFibGVQYXRoLCBpdGVtKSB7CiAgICAgICAgICAgIHZhciBwYXRoQXJyID0gc3ViVGFibGVQYXRoLnNwbGl0KCcuJyk7CiAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDIpIHsKICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZDooajot6/lvoTmnInor68nLAogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFyIHN1YlRhYk5hbWUgPSBwYXRoQXJyWzFdLnJlcGxhY2UoJ3N1Yl8nLCAnJyk7CiAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtwYXRoQXJyWzBdXVtwYXRoQXJyWzFdXS5sZW5ndGggPT0gMSAmJiAodGhpcy5wZXJtaXNzaW9uLnRhYmxlW3N1YlRhYk5hbWVdLnJlcXVpcmVkID09IHRydWUgfHwgdGhpcy5wZXJtaXNzaW9uLnRhYmxlW3N1YlRhYk5hbWVdLnJlcXVpcmVkID09ICd0cnVlJykpIHsKICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Q6KGo5b+F5aGr5LiA5p2h6K6w5b2VJywKICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhBcnJbMF1dW3BhdGhBcnJbMV1dLnJlbW92ZShpdGVtKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGRlbGV0ZVN1blJvdzogZnVuY3Rpb24gZGVsZXRlU3VuUm93KHN1YlRhYmxlUGF0aCwgaXRlbSwgc3ViSW5kZXgpIHsKICAgICAgICAgICAgdmFyIHBhdGhBcnIgPSBzdWJUYWJsZVBhdGguc3BsaXQoJy4nKTsKICAgICAgICAgICAgaWYgKHBhdGhBcnIubGVuZ3RoIDwgMykgewogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtmeihqOi3r+W+hOacieivrycsCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgc3ViVGFiTmFtZSA9IHBhdGhBcnJbMV0ucmVwbGFjZSgnc3ViXycsICcnKTsKICAgICAgICAgICAgICB2YXIgc3VuVGFiTmFtZSA9IHBhdGhBcnJbMl0ucmVwbGFjZSgnc3ViXycsICcnKTsKICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhW3BhdGhBcnJbMF1dW3BhdGhBcnJbMV1dW3N1YkluZGV4XVtwYXRoQXJyWzJdXS5sZW5ndGggPT0gMSAmJiAodGhpcy5wZXJtaXNzaW9uLnRhYmxlW3N1blRhYk5hbWVdLnJlcXVpcmVkID09IHRydWUgfHwgdGhpcy5wZXJtaXNzaW9uLnRhYmxlW3N1YlRhYk5hbWVdLnJlcXVpcmVkID09ICd0cnVlJykpIHsKICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Z6KGo5b+F5aGr5LiA5p2h6K6w5b2VJywKICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhBcnJbMF1dW3BhdGhBcnJbMV1dW3N1YkluZGV4XVtwYXRoQXJyWzJdXS5yZW1vdmUoaXRlbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBjbGVhckFsbDogZnVuY3Rpb24gY2xlYXJBbGwoc3ViVGFibGVQYXRoLCBpc0hvdCwgaW5kZXgpIHsKICAgICAgICAgICAgdmFyIHBhdGhBcnIgPSBzdWJUYWJsZVBhdGguc3BsaXQoJy4nKTsKICAgICAgICAgICAgaWYgKHBhdGhBcnIubGVuZ3RoIDwgMikgewogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtkOihqOi3r+W+hOacieivrycsCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAvL+WtmeihqAogICAgICAgICAgICB9IGVsc2UgaWYgKChpbmRleCB8fCBpbmRleCA9PT0gMCkgJiYgcGF0aEFyci5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoQXJyWzBdXVtwYXRoQXJyWzFdXVtpbmRleF1bcGF0aEFyclsyXV0uZW1wdHkoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgc3ViVGFiTmFtZSA9IHBhdGhBcnJbMV0ucmVwbGFjZSgnc3ViXycsICcnKTsKICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhW3BhdGhBcnJbMF1dW3BhdGhBcnJbMV1dLmxlbmd0aCA9PSAxICYmICh0aGlzLnBlcm1pc3Npb24udGFibGVbc3ViVGFiTmFtZV0ucmVxdWlyZWQgPT0gdHJ1ZSB8fCB0aGlzLnBlcm1pc3Npb24udGFibGVbc3ViVGFiTmFtZV0ucmVxdWlyZWQgPT0gJ3RydWUnKSkgewogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZDooajlv4XloavkuIDmnaHorrDlvZUnLAogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV0uZW1wdHkoKTsKICAgICAgICAgICAgICBpZiAoaXNIb3QpIHsKICAgICAgICAgICAgICAgIHZhciBob3RUYWJsZVJlZiA9ICdob3R0YWJsZS4nICsgc3ViVGFibGVQYXRoOwogICAgICAgICAgICAgICAgdGhpcy4kcmVmc1tob3RUYWJsZVJlZl0uZmlsbGJhY2tIb3RUYWJsZURhdGEobnVsbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgYWRkSW5pdFRlbXBsYXRlRGF0YTogZnVuY3Rpb24gYWRkSW5pdFRlbXBsYXRlRGF0YShzdWJUYWJsZVBhdGgpIHsKICAgICAgICAgICAgdmFyIGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBzdWJUYWJsZVBhdGg7CiAgICAgICAgICAgIHRoaXMuJHJlZnNbaG90VGFibGVSZWZdLnRvQWRkSW5pdFRlbXBsYXRlRGF0YSgpOwogICAgICAgICAgfSwKICAgICAgICAgIG1lcmdlQ2VsbFJlZnJlc2g6IGZ1bmN0aW9uIG1lcmdlQ2VsbFJlZnJlc2goc3ViVGFibGVQYXRoKSB7CiAgICAgICAgICAgIHZhciBob3RUYWJsZVJlZiA9ICdob3R0YWJsZS4nICsgc3ViVGFibGVQYXRoOwogICAgICAgICAgICB0aGlzLiRyZWZzW2hvdFRhYmxlUmVmXS5tZXJnZUNlbGxSZWZyZXNoKCk7CiAgICAgICAgICB9LAogICAgICAgICAgZXhlY0NlbGxNYXRoRXhwOiBmdW5jdGlvbiBleGVjQ2VsbE1hdGhFeHAoc3ViVGFibGVQYXRoKSB7CiAgICAgICAgICAgIHZhciBob3RUYWJsZVJlZiA9ICdob3R0YWJsZS4nICsgc3ViVGFibGVQYXRoOwogICAgICAgICAgICB0aGlzLiRyZWZzW2hvdFRhYmxlUmVmXS5leGVjQ2VsbE1hdGhFeHAoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBleGVjQ3Jvc3NNYXBwaW5nOiBmdW5jdGlvbiBleGVjQ3Jvc3NNYXBwaW5nKHN1YlRhYmxlUGF0aCkgewogICAgICAgICAgICB2YXIgaG90VGFibGVSZWYgPSAnaG90dGFibGUuJyArIHN1YlRhYmxlUGF0aDsKICAgICAgICAgICAgdGhpcy4kcmVmc1tob3RUYWJsZVJlZl0uZXhlY0Nyb3NzTWFwcGluZygpOwogICAgICAgICAgfSwKICAgICAgICAgIGdldEhvdFRhYmxlRGF0YTogZnVuY3Rpb24gZ2V0SG90VGFibGVEYXRhKHN1YlRhYmxlUGF0aCkgewogICAgICAgICAgICB2YXIgaG90VGFibGVSZWYgPSAnaG90dGFibGUuJyArIHN1YlRhYmxlUGF0aDsKICAgICAgICAgICAgdGhpcy4kcmVmc1tob3RUYWJsZVJlZl0uZ2V0SG90VGFibGVEYXRhKCk7CiAgICAgICAgICB9LAogICAgICAgICAgLy/ngrnlh7vliIbpobXmoKHpqozmjInpkq7op6blj5Hkuovku7YKICAgICAgICAgIG5leHRTdGVwQ2xpY2s6IGZ1bmN0aW9uIG5leHRTdGVwQ2xpY2soaXNDaGVjaywgaW5kZXgsIHdheSkgewogICAgICAgICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgICAgICAgdmFyIGNoaWxkcmVucyA9IHRoaXMuJHJlZnMub25saW5lRm9ybS4kY2hpbGRyZW5bMF0uJHJlZnM7CiAgICAgICAgICAgIHZhciBuZXh0SW5kZXggPSB3YXkgPT0gJ2JhY2snID8gaW5kZXggLSAxIDogaW5kZXggKyAxOwogICAgICAgICAgICAvL+i/m+WFpeS4i+S4gOS4qumhteetvuW5tuS4lOmcgOimgeagoemqjOW9k+WJjemhteetvuOAguWImei/m+ihjOagoemqjAogICAgICAgICAgICBpZiAod2F5ID09ICduZXh0JyAmJiBpc0NoZWNrID09ICd5JykgewogICAgICAgICAgICAgIHRoaXMuJHZhbGlkYXRvci52YWxpZGF0ZUFsbCgnY3VzdG9tLWZvcm0nKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgIHZhciBjdXJUYWJIYXNFcnJvciA9IGZhbHNlOwogICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgdmFyIGN1ckVsID0gY2hpbGRyZW5zWyduZXh0X3N0ZXBfY2hlY2tfJyArIGluZGV4XS4kZWw7CiAgICAgICAgICAgICAgICAgIF90aGlzMy4kdmFsaWRhdG9yLmVycm9ycy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckVsLmNvbnRhaW5zKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGl0ZW0uZmllbGQpWzBdKSkgewogICAgICAgICAgICAgICAgICAgICAgY3VyVGFiSGFzRXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IHx8ICFjdXJUYWJIYXNFcnJvcikgewogICAgICAgICAgICAgICAgICBjaGlsZHJlbnMuZWxfdGFibGVfY2hlY2suY3VycmVudE5hbWUgPSBuZXh0SW5kZXggKyAnJzsKICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuc0FycmF5ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY2hpbGRyZW5zKTsKICAgICAgICAgICAgICAgICAgY2hpbGRyZW5zQXJyYXkucmVtb3ZlKCdjb2xsYXBzZScpOwogICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGRyZW5zQXJyYXkubGVuZ3RoIC0gMyAmJiB3YXkgPT0gJ25leHQnKSB7CiAgICAgICAgICAgICAgICAgICAgX3RoaXMzLiRyb290LiRlbWl0KCdzdGFydEZsb3dCdG5DaGFuZ2UnLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNoaWxkcmVucy5lbF90YWJsZV9jaGVjay5jdXJyZW50TmFtZSA9IG5leHRJbmRleCArICcnOwogICAgICAgICAgICAgIHZhciBjaGlsZHJlbnNBcnJheSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNoaWxkcmVucyk7CiAgICAgICAgICAgICAgY2hpbGRyZW5zQXJyYXkucmVtb3ZlKCdjb2xsYXBzZScpOwogICAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZHJlbnNBcnJheS5sZW5ndGggLSAzICYmIHdheSA9PSAnbmV4dCcpIHsKICAgICAgICAgICAgICAgIHRoaXMuJHJvb3QuJGVtaXQoJ3N0YXJ0Rmxvd0J0bkNoYW5nZScsIHRydWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHRvRmlsbE9yZzogZnVuY3Rpb24gdG9GaWxsT3JnKHBhdGgsIHJvdykgewogICAgICAgICAgICB2YXIgZmlsbE9yZ0NvbmYgPSB0aGlzLmZpbGxPcmdDb25mTWFwW3BhdGhdOwogICAgICAgICAgICB2YXIgZmlsbE9iaiA9IHt9OwogICAgICAgICAgICBpZiAoZmlsbE9yZ0NvbmYgJiYgdGhpcy5maWxsT3JnKSB7CiAgICAgICAgICAgICAgaWYgKGZpbGxPcmdDb25mLm5hbWUpIHsKICAgICAgICAgICAgICAgIHZhciBuYW1lUGF0aCA9IGZpbGxPcmdDb25mLm5hbWUuc3BsaXQoJy4nKTsKICAgICAgICAgICAgICAgIGZpbGxPYmpbbmFtZVBhdGhbbmFtZVBhdGgubGVuZ3RoIC0gMV1dID0gdGhpcy5maWxsT3JnLm5hbWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChmaWxsT3JnQ29uZi5pZCkgewogICAgICAgICAgICAgICAgdmFyIGlkUGF0aCA9IGZpbGxPcmdDb25mLmlkLnNwbGl0KCcuJyk7CiAgICAgICAgICAgICAgICBmaWxsT2JqW2lkUGF0aFtpZFBhdGgubGVuZ3RoIC0gMV1dID0gdGhpcy5maWxsT3JnLmlkOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZmlsbE9yZ0NvbmYuY29kZSkgewogICAgICAgICAgICAgICAgdmFyIGNvZGVQYXRoID0gZmlsbE9yZ0NvbmYuY29kZS5zcGxpdCgnLicpOwogICAgICAgICAgICAgICAgZmlsbE9ialtjb2RlUGF0aFtjb2RlUGF0aC5sZW5ndGggLSAxXV0gPSB0aGlzLmZpbGxPcmcuY29kZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGZpbGxPcmdDb25mLmluc3RJZCkgewogICAgICAgICAgICAgICAgdmFyIGluc3RJZFBhdGggPSBmaWxsT3JnQ29uZi5pbnN0SWQuc3BsaXQoJy4nKTsKICAgICAgICAgICAgICAgIGZpbGxPYmpbaW5zdElkUGF0aFtpbnN0SWRQYXRoLmxlbmd0aCAtIDFdXSA9IHRoaXMuJHBhcmVudC4kcGFyZW50Lmluc3RJZCA/IHRoaXMuJHBhcmVudC4kcGFyZW50Lmluc3RJZCA6ICcnOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByb3cpLCBmaWxsT2JqKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcm93OwogICAgICAgICAgfSwKICAgICAgICAgIGluaXRGaWxsOiBmdW5jdGlvbiBpbml0RmlsbChwYXRoLCBjb25mKSB7CiAgICAgICAgICAgIC8v5pS26ZuG6Ieq5Yqo5Zue5aGr5L+h5oGvCiAgICAgICAgICAgIGlmIChwYXRoICYmIGNvbmYpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgdmFyIGNvbmZKc29uID0gdGhpcy5maWxsT3JnQ29uZk1hcFtwYXRoXSA/IHRoaXMuZmlsbE9yZ0NvbmZNYXBbcGF0aF0gOiBKU09OLnBhcnNlKGNvbmYpOwogICAgICAgICAgICAgICAgaWYgKGNvbmZKc29uLmlkIHx8IGNvbmZKc29uLmNvZGUgfHwgY29uZkpzb24ubmFtZSB8fCBjb25mSnNvbi5pbnN0SWQpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5maWxsT3JnQ29uZk1hcFtwYXRoXSA9IGNvbmZKc29uOwogICAgICAgICAgICAgICAgICB0aGlzLmluaXRGaXJzdEZpbGwocGF0aCwgY29uZkpzb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgaW5pdEZpcnN0RmlsbDogZnVuY3Rpb24gaW5pdEZpcnN0RmlsbChwYXRoLCBjb25mKSB7CiAgICAgICAgICAgIC8v5aSE55CG56ys5LiA6KGM55qE5Zue5aGrCiAgICAgICAgICAgIHZhciBwYXRocyA9IHBhdGguc3BsaXQoJy4nKTsKICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dICYmIHRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dLmxlbmd0aCA9PSAxICYmIHRoaXMuZmlsbE9yZy5pZCkgewogICAgICAgICAgICAgIGlmIChjb25mLmlkKSB7CiAgICAgICAgICAgICAgICB2YXIgaWRQYXRoID0gY29uZi5pZC5zcGxpdCgnLicpOwogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtpZFBhdGhbMl1dKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW2lkUGF0aFsyXV0gPSB0aGlzLmZpbGxPcmcuaWQ7CiAgICAgICAgICAgICAgICAgIGlmIChjb25mLmNvZGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVBhdGggPSBjb25mLmNvZGUuc3BsaXQoJy4nKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW2NvZGVQYXRoWzJdXSkgewogICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhzWzBdXVtwYXRoc1sxXV1bMF1bY29kZVBhdGhbMl1dID0gdGhpcy5maWxsT3JnLmNvZGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChjb25mLm5hbWUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZVBhdGggPSBjb25mLm5hbWUuc3BsaXQoJy4nKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW25hbWVQYXRoWzJdXSkgewogICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhzWzBdXVtwYXRoc1sxXV1bMF1bbmFtZVBhdGhbMl1dID0gdGhpcy5maWxsT3JnLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChjb25mLmluc3RJZCkgewogICAgICAgICAgICAgICAgdmFyIGluc3RJZFBhdGggPSBjb25mLmluc3RJZC5zcGxpdCgnLicpOwogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtpbnN0SWRQYXRoWzJdXSkgewogICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtpbnN0SWRQYXRoWzJdXSA9IHRoaXMuJHBhcmVudC4kcGFyZW50Lmluc3RJZCA/IHRoaXMuJHBhcmVudC4kcGFyZW50Lmluc3RJZCA6ICcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGlzU2hvd0FkZEJ1dHRvbjogZnVuY3Rpb24gaXNTaG93QWRkQnV0dG9uKHBhdGgsIG1heFJvdywgc3ViSW5kZXgpIHsKICAgICAgICAgICAgaWYgKG1heFJvdyA9PT0gMCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB2YXIgcGF0aEFyciA9IHBhdGguc3BsaXQoJy4nKTsKICAgICAgICAgICAgaWYgKHN1YkluZGV4ID49IDApIHsKICAgICAgICAgICAgICBpZiAocGF0aEFyci5sZW5ndGggPCA0KSB7CiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtkOihqOi3r+W+hOacieivrycsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhW3BhdGhBcnJbMV1dW3BhdGhBcnJbMl1dW3N1YkluZGV4XVtwYXRoQXJyWzNdXTsKICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCA+PSBtYXhSb3c7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDMpIHsKICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Q6KGo6Lev5b6E5pyJ6K+vJywKICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIF9kYXRhID0gdGhpcy5kYXRhW3BhdGhBcnJbMV1dW3BhdGhBcnJbMl1dOwogICAgICAgICAgICAgICAgcmV0dXJuIF9kYXRhLmxlbmd0aCA+PSBtYXhSb3c7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNvbXBvbmVudHM6IHsKICAgICAgICAgIEVpcFBhZ2luYXRpb246IEVpcFBhZ2luYXRpb24sCiAgICAgICAgICBFaXBTdWJQYWdpbmF0aW9uOiBFaXBTdWJQYWdpbmF0aW9uLAogICAgICAgICAgRWlwU3ViSW1wb3J0RGlhbG9nOiBFaXBTdWJJbXBvcnREaWFsb2csCiAgICAgICAgICBFaXBTdWJFeHBvcnREaWFsb2c6IEVpcFN1YkV4cG9ydERpYWxvZywKICAgICAgICAgIEVpcFBhZ2luYXRpb25MYXlvdXQ6IEVpcFBhZ2luYXRpb25MYXlvdXQsCiAgICAgICAgICBFaXBJbnB1dDogRWlwSW5wdXQsCiAgICAgICAgICBFaXBDaGVja2JveDogRWlwQ2hlY2tib3gsCiAgICAgICAgICBFaXBTZWxlY3Q6IEVpcFNlbGVjdCwKICAgICAgICAgIEVpcFVzZXJTZWxlY3RvcjogRWlwVXNlclNlbGVjdG9yLAogICAgICAgICAgRWlwRGVtZW5zaW9uU2VsZWN0b3I6IEVpcERlbWVuc2lvblNlbGVjdG9yLAogICAgICAgICAgRWlwSm9iU2VsZWN0b3I6IEVpcEpvYlNlbGVjdG9yLAogICAgICAgICAgRWlwT3JnU2VsZWN0b3I6IEVpcE9yZ1NlbGVjdG9yLAogICAgICAgICAgRWlwUG9zdFNlbGVjdG9yOiBFaXBQb3N0U2VsZWN0b3IsCiAgICAgICAgICBFaXBSb2xlU2VsZWN0b3I6IEVpcFJvbGVTZWxlY3RvciwKICAgICAgICAgIEVpcFJhZGlvOiBFaXBSYWRpbywKICAgICAgICAgIEVpcFRleHRhcmVhOiBFaXBUZXh0YXJlYSwKICAgICAgICAgIEVpcEZvbnQ6IEVpcEZvbnQsCiAgICAgICAgICBFaXBEaWFsb2c6IEVpcERpYWxvZywKICAgICAgICAgIEVpcEJ1dHRvbjogRWlwQnV0dG9uLAogICAgICAgICAgRWlwRGF0ZTogRWlwRGF0ZSwKICAgICAgICAgIEVpcEltZzogRWlwSW1nLAogICAgICAgICAgRWlwVmlld2VyOiBFaXBWaWV3ZXIsCiAgICAgICAgICBFaXBTd2l0Y2g6IEVpcFN3aXRjaCwKICAgICAgICAgIEh0RmlsZTogSHRGaWxlLAogICAgICAgICAgVlJ1bnRpbWVUZW1wbGF0ZTogVlJ1bnRpbWVUZW1wbGF0ZSwKICAgICAgICAgIEh0R2FuZ2VkU2VsZWN0OiBIdEdhbmdlZFNlbGVjdCwKICAgICAgICAgIEVpcFJlbEZsb3c6IEVpcFJlbEZsb3csCiAgICAgICAgICBFaXBTdWJEaWFsb2c6IEVpcFN1YkRpYWxvZywKICAgICAgICAgIEh0TGFiZWw6IEh0TGFiZWwsCiAgICAgICAgICBIdERpZ2l0YWw6IEh0RGlnaXRhbCwKICAgICAgICAgIEh0Q3VycmVuY3k6IEh0Q3VycmVuY3ksCiAgICAgICAgICBFaXBSZWFsdGltZUlucHV0OiBFaXBSZWFsdGltZUlucHV0LAogICAgICAgICAgRWlwUmVhbHRpbWVUZXh0YXJlYTogRWlwUmVhbHRpbWVUZXh0YXJlYSwKICAgICAgICAgIEVpcFN0ZXA6IEVpcFN0ZXAsCiAgICAgICAgICBIdElucHV0QXV0b2NvbXBsZXRlOiBIdElucHV0QXV0b2NvbXBsZXRlLAogICAgICAgICAgSHRUcmVlc2VsZWN0OiBIdFRyZWVzZWxlY3QsCiAgICAgICAgICBIdENhc2NhZGVyOiBIdENhc2NhZGVyLAogICAgICAgICAgSHRUcmVlOiBIdFRyZWUsCiAgICAgICAgICBFaXBBdHRhY2htZW50OiBFaXBBdHRhY2htZW50LAogICAgICAgICAgRWlwRGljOiBFaXBEaWMsCiAgICAgICAgICBFaXBBdXRvY29tcGxldGU6IEVpcEF1dG9jb21wbGV0ZSwKICAgICAgICAgIEVpcENhc2NhZGVyOiBFaXBDYXNjYWRlciwKICAgICAgICAgIEVpcFRyZWVzZWxlY3Q6IEVpcFRyZWVzZWxlY3QsCiAgICAgICAgICBFaXBDb2xsYXBzZTogRWlwQ29sbGFwc2UsCiAgICAgICAgICBFaXBQYWdpbmF0aW9uU3RlcHM6IEVpcFBhZ2luYXRpb25TdGVwcywKICAgICAgICAgIEVpcE1hcDogRWlwTWFwLAogICAgICAgICAgRWlwRGF0YVZpZXc6IEVpcERhdGFWaWV3LAogICAgICAgICAgRWlwU3VuRGlhbG9nOiBFaXBTdW5EaWFsb2csCiAgICAgICAgICBFaXBUYWc6IEVpcFRhZywKICAgICAgICAgIEVpcEhvdFRhYmxlOiBFaXBIb3RUYWJsZSwKICAgICAgICAgIEVpcEhvdFN1YkRpYWxvZzogRWlwSG90U3ViRGlhbG9nLAogICAgICAgICAgQ29udHJhY3RQcmV2aWV3OiBDb250cmFjdFByZXZpZXcsCiAgICAgICAgICBFaXBTdWJ0YWJsZUJhY2tmaWxsOiBFaXBTdWJ0YWJsZUJhY2tmaWxsLAogICAgICAgICAgRWlwRGl2aWRlcjogRWlwRGl2aWRlciwKICAgICAgICAgIEVpcE9mZmljZTogRWlwT2ZmaWNlLAogICAgICAgICAgRWlwUXJjb2RlOiBFaXBRcmNvZGUsCiAgICAgICAgICBFaXBTaWduYXR1cmU6IEVpcFNpZ25hdHVyZSwKICAgICAgICAgIEVpcFRhYnM6IEVpcFRhYnMsCiAgICAgICAgICBFaXBGb250VWVkaXRvcjogRWlwRm9udFVlZGl0b3IKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KfTs="},null]}