{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\flow\\OnlineForm.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\flow\\OnlineForm.vue","mtime":1733309211970},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\babel.config.js","mtime":1733906004399},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDIuanMiOwppbXBvcnQgX3JlZ2VuZXJhdG9yUnVudGltZSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcmVnZW5lcmF0b3JSdW50aW1lLmpzIjsKaW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2RhdGFTaGFyZS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyI7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCgppbXBvcnQgRWlwSW5wdXQgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwSW5wdXQudnVlJzsKaW1wb3J0IEVpcENoZWNrYm94IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcENoZWNrYm94LnZ1ZSc7CmltcG9ydCBFaXBTZWxlY3QgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwU2VsZWN0LnZ1ZSc7CmltcG9ydCBFaXBSYWRpbyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBSYWRpby52dWUnOwppbXBvcnQgRWlwVXNlclNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFVzZXJTZWxlY3Rvci52dWUnOwppbXBvcnQgRWlwRGVtZW5zaW9uU2VsZWN0b3IgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvc2VsZWN0b3IvRWlwRGVtZW5zaW9uU2VsZWN0b3IudnVlJzsKaW1wb3J0IEVpcEpvYlNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcEpvYlNlbGVjdG9yLnZ1ZSc7CmltcG9ydCBFaXBPcmdTZWxlY3RvciBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9zZWxlY3Rvci9FaXBPcmdTZWxlY3Rvci52dWUnOwppbXBvcnQgRWlwUG9zdFNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFBvc3RTZWxlY3Rvci52dWUnOwppbXBvcnQgRWlwUm9sZVNlbGVjdG9yIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL3NlbGVjdG9yL0VpcFJvbGVTZWxlY3Rvci52dWUnOwppbXBvcnQgRWlwVGV4dGFyZWEgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVGV4dGFyZWEudnVlJzsKaW1wb3J0IEVpcEZvbnQgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwRm9udC52dWUnOwppbXBvcnQgRWlwRGlhbG9nIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcERpYWxvZy52dWUnOwppbXBvcnQgRWlwQXV0b2NvbXBsZXRlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcEF1dG9jb21wbGV0ZS52dWUnOwppbXBvcnQgRWlwQ2FzY2FkZXIgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwQ2FzY2FkZXIudnVlJzsKaW1wb3J0IEVpcFRyZWVzZWxlY3QgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVHJlZXNlbGVjdC52dWUnOwppbXBvcnQgRWlwQnV0dG9uIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcEJ1dHRvbi52dWUnOwppbXBvcnQgRWlwRGF0ZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBEYXRlLnZ1ZSc7CmltcG9ydCBFaXBJbWcgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwSW1nLnZ1ZSc7CmltcG9ydCBFaXBWaWV3ZXIgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwVmlld2VyLnZ1ZSc7CmltcG9ydCBFaXBTd2l0Y2ggZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwU3dpdGNoLnZ1ZSc7CnZhciBFaXBNYXAgPSBmdW5jdGlvbiBFaXBNYXAoKSB7CiAgcmV0dXJuIGltcG9ydCgiQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwTWFwLnZ1ZSIpOwp9Owp2YXIgRWlwRm9udFVlZGl0b3IgPSBmdW5jdGlvbiBFaXBGb250VWVkaXRvcigpIHsKICByZXR1cm4gaW1wb3J0KCJAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBGb250VWVkaXRvci52dWUiKTsKfTsKaW1wb3J0IEh0RmlsZSBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdEZpbGUudnVlJzsKaW1wb3J0IFZSdW50aW1lVGVtcGxhdGUgZnJvbSAndi1ydW50aW1lLXRlbXBsYXRlJzsKaW1wb3J0IEh0R2FuZ2VkU2VsZWN0IGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0R2FuZ2VkU2VsZWN0LnZ1ZSc7CmltcG9ydCBFaXBSZWxGbG93IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFJlbEZsb3cudnVlJzsKaW1wb3J0IEVpcFN1YkRpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdWJEaWFsb2cudnVlJzsKaW1wb3J0IEVpcFN1bkRpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdW5EaWFsb2cudnVlJzsKaW1wb3J0IEh0TGFiZWwgZnJvbSAnQC9jb21wb25lbnRzL2NvbnRyb2wvSHRMYWJlbC52dWUnOwppbXBvcnQgSHREaWdpdGFsIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0RGlnaXRhbC52dWUnOwppbXBvcnQgSHRDdXJyZW5jeSBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdEN1cnJlbmN5LnZ1ZSc7CmltcG9ydCBFaXBSZWFsdGltZUlucHV0IGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFJlYWx0aW1lSW5wdXQudnVlJzsKaW1wb3J0IEVpcFJlYWx0aW1lVGV4dGFyZWEgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwUmVhbHRpbWVUZXh0YXJlYS52dWUnOwppbXBvcnQgRWlwU3RlcCBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdGVwLnZ1ZSc7CmltcG9ydCBIdElucHV0QXV0b2NvbXBsZXRlIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0SW5wdXRBdXRvY29tcGxldGUudnVlJzsKaW1wb3J0IEh0VHJlZXNlbGVjdCBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9IdFRyZWVzZWxlY3QudnVlJzsKaW1wb3J0IEh0Q2FzY2FkZXIgZnJvbSAnQC9jb21wb25lbnRzL2NvbnRyb2wvSHRDYXNjYWRlci52dWUnOwppbXBvcnQgSHRUcmVlIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0VHJlZS52dWUnOwppbXBvcnQgRWlwVGFicyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBUYWJzLnZ1ZSc7CmltcG9ydCBFaXBTdWJQYWdpbmF0aW9uIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFN1YlBhZ2luYXRpb24udnVlJzsKaW1wb3J0IEVpcFN1YkltcG9ydERpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdWJJbXBvcnREaWFsb2cudnVlJzsKaW1wb3J0IEVpcFN1YkV4cG9ydERpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdWJFeHBvcnREaWFsb2cudnVlJzsKaW1wb3J0IEVpcEF0dGFjaG1lbnQgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwQXR0YWNobWVudC52dWUnOwppbXBvcnQgRWlwRGljIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcERpYy52dWUnOwppbXBvcnQgRWlwUGFnaW5hdGlvbkxheW91dCBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBQYWdpbmF0aW9uTGF5b3V0LnZ1ZSc7CmltcG9ydCBFaXBQYWdpbmF0aW9uIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFBhZ2luYXRpb24udnVlJzsKaW1wb3J0IEVpcENvbGxhcHNlIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcENvbGxhcHNlLnZ1ZSc7CmltcG9ydCBFaXBQYWdpbmF0aW9uU3RlcHMgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwUGFnaW5hdGlvblN0ZXBzLnZ1ZSc7CmltcG9ydCBFaXBEYXRhVmlldyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBEYXRhVmlldy52dWUnOwppbXBvcnQgRWlwSG90VGFibGUgZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvRWlwSG90VGFibGUudnVlJzsKaW1wb3J0IEVpcEhvdFN1YkRpYWxvZyBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBIb3RTdWJEaWFsb2cudnVlJzsKaW1wb3J0IENvbnRyYWN0UHJldmlldyBmcm9tICdAL2NvbXBvbmVudHMvY29tbW9uL0NvbnRyYWN0UHJldmlldy52dWUnOwppbXBvcnQgRWlwVGFnIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcFRhZy52dWUnOwppbXBvcnQgRWlwU3VidGFibGVCYWNrZmlsbCBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTdWJ0YWJsZUJhY2tmaWxsLnZ1ZSc7CmltcG9ydCBFaXBEaXZpZGVyIGZyb20gJ0AvY29tcG9uZW50cy9laXBDb250cm9sL0VpcERpdmlkZXIudnVlJzsKaW1wb3J0IEVpcE9mZmljZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBPZmZpY2UudnVlJzsKaW1wb3J0IEVpcFFyY29kZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBRcmNvZGUudnVlJzsKaW1wb3J0IEVpcFNpZ25hdHVyZSBmcm9tICdAL2NvbXBvbmVudHMvZWlwQ29udHJvbC9FaXBTaWduYXR1cmUudnVlJzsKaW1wb3J0IFN1YlBhZ2luYXRpb24gZnJvbSAnQC9jb21wb25lbnRzL2VpcENvbnRyb2wvYnVzL1N1YlBhZ2luYXRpb24uanMnOwppbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAnb25saW5lLWZvcm0nLAogIHByb3BzOiBbJ2h0bWwnLCAnZGF0YScsICdwZXJtaXNzaW9uJywgJ2lzVmlldycsICdpc1ByaW50JywgJ2luaXRGaWxsRGF0YScsICdmbG93S2V5JywgJ2Zvcm1JZCcsICdpc0xvb2snLCAnZmxvd0tleSddLAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBsb2FkZWRGYWlsOiBmYWxzZSwKICAgICAgLy/ooajljZXliqDovb1odG1s5piv5ZCm5aSx6LSlCiAgICAgIHN1YkJhY2tmaWxsOiBuZXcgTWFwKCksCiAgICAgIGhvdFRhYmxlRmlsbGJhY2s6IFN0cmluZwogICAgfTsKICB9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICB0aGlzLmluaXQoKTsKICB9LAogIHdhdGNoOiB7CiAgICBkYXRhOiB7CiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsLCBvbGRWYWx1ZSkgewogICAgICAgIHRoaXMuJHJvb3QuJGVtaXQoInVwZGF0ZURhdGEiLCBuZXdWYWwpOwogICAgICB9LAogICAgICBkZWVwOiB0cnVlLAogICAgICBpbW1lZGlhdGU6IHRydWUKICAgIH0sCiAgICBodG1sOiBmdW5jdGlvbiBodG1sKG5ld1ZhbCkgewogICAgICBpZiAobmV3VmFsKSB7CiAgICAgICAgdGhpcy5pbml0KCk7CiAgICAgIH0KICAgIH0sCiAgICBob3RUYWJsZUZpbGxiYWNrOiBmdW5jdGlvbiBob3RUYWJsZUZpbGxiYWNrKG5ld1ZhbCkgewogICAgICBpZiAobmV3VmFsKSB7CiAgICAgICAgdmFyIG5ld1ZhbEFycmF5ID0gbmV3VmFsLnNwbGl0KCdfdGltZXN0YW1wXycpOwogICAgICAgIHZhciBib1BhdGhBcnJheSA9IG5ld1ZhbEFycmF5WzBdLnNwbGl0KCcuJyk7CiAgICAgICAgdmFyIGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBib1BhdGhBcnJheVswXSArICcuJyArIGJvUGF0aEFycmF5WzFdOwogICAgICAgIHZhciBzdWJCbyA9IHRoaXMuZGF0YVtib1BhdGhBcnJheVswXV1bYm9QYXRoQXJyYXlbMV1dOwogICAgICAgIHRoaXMuJHJlZnMub25saW5lRm9ybS4kcmVmc1tob3RUYWJsZVJlZl0uZmlsbGJhY2tIb3RUYWJsZURhdGEoc3ViQm8pOwogICAgICB9CiAgICB9CiAgfSwKICBtZXRob2RzOiB7CiAgICBsb2FkU3VjY2VzczogZnVuY3Rpb24gbG9hZFN1Y2Nlc3MocmVzKSB7CiAgICAgIHRoaXMuJGVtaXQoImxvYWRTdWNjZXNzIiwgcmVzKTsKICAgIH0sCiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkgewogICAgICB2YXIgaW5pdEZpbGxEYXRhID0gdGhpcy5pbml0RmlsbERhdGE7CiAgICAgIHZhciBwZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9uOwogICAgICBWdWUuY29tcG9uZW50KCdodC1ydW50aW1lLXRlbXBsYXRlJywgewogICAgICAgIHByb3BzOiBbJ2h0bWwnLCAnZGF0YScsICdwZXJtaXNzaW9uJywgJ2lzVmlldycsICdpc1ByaW50J10sCiAgICAgICAgdGVtcGxhdGU6IHRoaXMuaHRtbCwKICAgICAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgbGVmdF9pbWFnZTogJycsCiAgICAgICAgICAgIHJpZ2h0X2ltYWdlOiAnJywKICAgICAgICAgICAgdHJhbnNpdGlvbkluZGV4OiAtMSwKICAgICAgICAgICAgY3VyVGFiSW5kZXg6ICd0YWJlX2NoZWNrXzAnLAogICAgICAgICAgICBlcnJNZXNnOiAnJywKICAgICAgICAgICAgZmlsbE9yZzoge30sCiAgICAgICAgICAgIGZpbGxPcmdDb25mTWFwOiB7fQogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgICAvLyDlrZDooajliY3nq6/liIbpobXov4fmu6TlmagKICAgICAgICAgIHBhZ2luZ1N1YkRhdGE6IGZ1bmN0aW9uIHBhZ2luZ1N1YkRhdGEoKSB7CiAgICAgICAgICAgIHZhciBtZSA9IHRoaXM7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YXBhdGgpIHsKICAgICAgICAgICAgICAvLyDpgJrov4flrZDooajmlbDmja7ot6/lvoTojrflj5bliIbpobXmlbDmja4KICAgICAgICAgICAgICByZXR1cm4gU3ViUGFnaW5hdGlvbi5wYWdpbmdCeVBhdGgoZGF0YXBhdGgsIG1lKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICAgICAgICAvLyDlpoLmnpzlvZPliY3ooajljZXnmoRlbGVtZW505Li6Q29tbWVudOivtOaYjuihqOWNleWKoOi9veWksei0peS6huOAggogICAgICAgICAgaWYgKHRoaXMuJGVsICYmIHRoaXMuJGVsLmNvbnN0cnVjdG9yID09IENvbW1lbnQpIHsKICAgICAgICAgICAgdGhpcy4kcGFyZW50LmxvYWRlZEZhaWwgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy4kdmFsaWRhdG9yID0gdGhpcy4kcm9vdC4kdmFsaWRhdG9yOwogICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbi50YWJsZSkgewogICAgICAgICAgICBmb3IgKHZhciBzdWJUYWJsZU5hbWUgaW4gdGhpcy5wZXJtaXNzaW9uLnRhYmxlKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbi50YWJsZVtzdWJUYWJsZU5hbWVdLnJlcXVpcmVkKSB7CiAgICAgICAgICAgICAgICB0aGlzLmFkZFN1YlRhYmxlQnlOYW1lKHN1YlRhYmxlTmFtZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLiRlbWl0KCJsb2FkU3VjY2VzcyIsIHRydWUpOwogICAgICAgICAgLy/liJ3lp4vljJZoYW5kc29udGFibGXmlbDmja4KICAgICAgICAgIGlmICh0aGlzLmRhdGEpIHsKICAgICAgICAgICAgdmFyIGZvcm1JZCA9IHRoaXMuZm9ybUlkOwogICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgICAgICBpZiAoIWZvcm1JZCkgewogICAgICAgICAgICAgIHRoaXMudG9Jbml0VGVtb2xhdGVEYXRhKGluaXRGaWxsRGF0YSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFyIGxvYWRpbmcgPSB0aGlzLiRsb2FkaW5nKHsKICAgICAgICAgICAgICAgIGxvY2s6IHRydWUsCiAgICAgICAgICAgICAgICB0ZXh0OiAn5q2j5Zyo6I635Y+W5Yid5aeL5YyW5L+h5oGvLi4uJywKICAgICAgICAgICAgICAgIHNwaW5uZXI6ICdlbC1pY29uLWxvYWRpbmcnLAogICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB0aGlzLiRodHRwLmdldCgnJHtmb3JtfS9mb3JtL2Zvcm0vdjEvcHJldmlld0Rlc2lnblZ1ZT9mb3JtSWQ9JyArIGZvcm1JZCkudGhlbihmdW5jdGlvbiAocmVzcCkgewogICAgICAgICAgICAgICAgaWYgKHJlc3AuZGF0YSkgewogICAgICAgICAgICAgICAgICB2YXIgZm9ybURhdGEgPSByZXNwLmRhdGEuZGF0YTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGZvcm1EYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1EYXRhLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXMuZGF0YVtrZXldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmRhdGFba2V5XSA9IGZvcm1EYXRhW2tleV07CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgX3RoaXMudG9Jbml0VGVtb2xhdGVEYXRhKGluaXRGaWxsRGF0YSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgIF90aGlzLnRvSW5pdFRlbW9sYXRlRGF0YShpbml0RmlsbERhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTsKICAgICAgICAgICAgICAgIF90aGlzLnRvSW5pdFRlbW9sYXRlRGF0YShpbml0RmlsbERhdGEpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5pc1ByaW50KSB7CiAgICAgICAgICAgIHRoaXMucHJpbnREZXRhaWwoKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIC8v5pS5di1ydW50aW1lLXRlbXBsYXRlLmVzLmpz55qE5rqQ56CB77yM5oiW6ICF5pS5di1ydW50aW1lLXRlbXBsYXRl55qE54mI5pys5pS55oiQMS41LjIKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICB0b0luaXRUZW1vbGF0ZURhdGE6IGZ1bmN0aW9uIHRvSW5pdFRlbW9sYXRlRGF0YShpbml0RmlsbERhdGEpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGZvcm1EYXRhID0gdGhpcy5kYXRhOwogICAgICAgICAgICB2YXIgcmVmcyA9IHRoaXMuJHJlZnM7CiAgICAgICAgICAgIGZvciAodmFyIGRlZiBpbiBmb3JtRGF0YSkgewogICAgICAgICAgICAgIGlmIChmb3JtRGF0YS5oYXNPd25Qcm9wZXJ0eShkZWYpKSB7CiAgICAgICAgICAgICAgICB2YXIgYm9EZWYgPSBmb3JtRGF0YVtkZWZdOwogICAgICAgICAgICAgICAgZm9yICh2YXIgYm8gaW4gYm9EZWYpIHsKICAgICAgICAgICAgICAgICAgaWYgKGJvRGVmLmhhc093blByb3BlcnR5KGJvKSAmJiBiby5pbmRleE9mKCdzdWJfJykgPT0gMCkgewogICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSAnaG90dGFibGUuJyArIGRlZiArICcuJyArIGJvOwogICAgICAgICAgICAgICAgICAgIGlmIChyZWZzW3JlZl0pIHsKICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnNbcmVmXS5maWxsYmFja0hvdFRhYmxlRGF0YShmb3JtRGF0YVtkZWZdW2JvXSwgcGVybWlzc2lvbik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0RmlsbERhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICByZWZzW3JlZl0uaW5pdFRlbXBsYXRlRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgcHJpbnREZXRhaWw6IGZ1bmN0aW9uIHByaW50RGV0YWlsKCkgewogICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdvbmxpbmUtZm9ybScpWzBdLmlubmVySFRNTDsKICAgICAgICAgICAgd2luZG93LnByaW50KCk7CiAgICAgICAgICAgIGlmICh0aGlzLmlzUHJpbnQpIHsKICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIuZ28oLTEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICB9LCAyMDApOwogICAgICAgICAgfSwKICAgICAgICAgIGxlYXZlVGFiVmVyaWZ5OiBmdW5jdGlvbiBsZWF2ZVRhYlZlcmlmeShhY3RpdmVOYW1lLCBvbGRBY3RpdmVOYW1lKSB7CiAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICAgICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7CiAgICAgICAgICAgICAgdmFyIGVycml0ZW1zLCBmb3JtRWxlbWVudEFyeSwgZnJtSW5zdCwgY2hpbGRyZW5zLCByZXN1bHQsIGN1ckVsLCBtc2csIF9pLCBfZXJyaXRlbXMsIGl0ZW0sIGZpZWxkTGFiZWw7CiAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkgewogICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgZXJyaXRlbXMgPSBbXTsKICAgICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudEFyeSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdvbmxpbmUtZm9ybScpOwogICAgICAgICAgICAgICAgICAgIGZybUluc3QgPSBmb3JtRWxlbWVudEFyeVswXS5fX3Z1ZV9fOwogICAgICAgICAgICAgICAgICAgIGNoaWxkcmVucyA9IGZybUluc3QuJHJlZnMub25saW5lRm9ybS4kcmVmczsKICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNjsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJtSW5zdC4kcm9vdC4kdmFsaWRhdG9yLnZhbGlkYXRlQWxsKCdjdXN0b20tZm9ybScpOwogICAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnRleHQuc2VudDsKICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICAgY3VyRWwgPSBjaGlsZHJlbnNbb2xkQWN0aXZlTmFtZV0uJGVsOwogICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLiR2YWxpZGF0b3IuZXJyb3JzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckVsLmNvbnRhaW5zKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGl0ZW0uZmllbGQpWzBdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGVycml0ZW1zLnB1c2goaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvL+aLvOaOpeaPkOekuua2iOaBrwogICAgICAgICAgICAgICAgICAgIG1zZyA9ICcnOwogICAgICAgICAgICAgICAgICAgIGZvciAoX2kgPSAwLCBfZXJyaXRlbXMgPSBlcnJpdGVtczsgX2kgPCBfZXJyaXRlbXMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gX2Vycml0ZW1zW19pXTsKICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTGFiZWwgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmZpZWxkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTGFiZWwgPSBpdGVtLmZpZWxkOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZmllbGQgJiYgaXRlbS5maWVsZC5pbmRleE9mKCctJykgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRMYWJlbCA9IGl0ZW0uZmllbGQuc3Vic3RyKGl0ZW0uZmllbGQuaW5kZXhPZignLScpICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gZmllbGRMYWJlbCArICcgJyArIGl0ZW0ubXNnICsgJzxici8+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZykgewogICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLiRub3RpZnkuZXJyb3IoewogICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogX3RoaXMyLiR0KCdjb21tb24uZXJyVGlwJyksCiAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbXNnCiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIF9jYWxsZWUpOwogICAgICAgICAgICB9KSkoKTsKICAgICAgICAgIH0sCiAgICAgICAgICAvL+WtkOihqOS4iuenuwogICAgICAgICAgdXA6IGZ1bmN0aW9uIHVwKGluZGV4LCBkYXRhKSB7CiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+W3sue7j+aYr+WIl+ihqOS4reesrOS4gOS9jScsCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgdGVtcCA9IGRhdGFbaW5kZXggLSAxXTsKICAgICAgICAgICAgICB0aGlzLiRwYXJlbnQubG9hZGVkRmFpbCA9IHRydWU7CiAgICAgICAgICAgICAgdGhpcy4kc2V0KGRhdGEsIGluZGV4IC0gMSwgZGF0YVtpbmRleF0pOwogICAgICAgICAgICAgIHRoaXMuJHNldChkYXRhLCBpbmRleCwgdGVtcCk7CiAgICAgICAgICAgICAgdGhpcy4kcGFyZW50LmxvYWRlZEZhaWwgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIC8v5a2Q6KGo5LiL56e7CiAgICAgICAgICBkb3duOiBmdW5jdGlvbiBkb3duKGluZGV4LCBkYXRhKSB7CiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gZGF0YS5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5bey57uP5piv5YiX6KGo5Lit5pyA5ZCO5LiA5L2NJywKICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuaXNUcmFuc2l0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICB2YXIgaSA9IGRhdGFbaW5kZXggKyAxXTsKICAgICAgICAgICAgICB0aGlzLiRwYXJlbnQubG9hZGVkRmFpbCA9IHRydWU7CiAgICAgICAgICAgICAgdGhpcy4kc2V0KGRhdGEsIGluZGV4ICsgMSwgZGF0YVtpbmRleF0pOwogICAgICAgICAgICAgIHRoaXMuJHNldChkYXRhLCBpbmRleCwgaSk7CiAgICAgICAgICAgICAgdGhpcy4kcGFyZW50LmxvYWRlZEZhaWwgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIC8v5a2Q6KGo5aSN5Yi25pWw5o2uCiAgICAgICAgICBjb3B5OiBmdW5jdGlvbiBjb3B5KG9iaiwgaXRlbSkgewogICAgICAgICAgICB2YXIgbmV3T25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSk7CiAgICAgICAgICAgIC8v5oqKaWTnva7nqbrku6XlhY3otbDnmoTkv67mlLnmlrnms5UKICAgICAgICAgICAgaWYgKG5ld09uZS5pZF8pIHsKICAgICAgICAgICAgICBkZWxldGUgbmV3T25lLmlkXzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobmV3T25lLnN1Yl9yb3dfcmVhZG9ubHkpIHsKICAgICAgICAgICAgICBkZWxldGUgbmV3T25lLnN1Yl9yb3dfcmVhZG9ubHk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmV3T25lLnN1Yl9ndWlkID0gdGhpcy5ndWlkKCk7CiAgICAgICAgICAgIG9iai5wdXNoKG5ld09uZSk7CiAgICAgICAgICB9LAogICAgICAgICAgLy/lrZDooajpu5jorqTlgLzlm57loasKICAgICAgICAgIGFkZFN1YlRhYjogZnVuY3Rpb24gYWRkU3ViVGFiKHN1YlRhYlBhdGgpIHsKICAgICAgICAgICAgdmFyIHBhdGhBcnIgPSBzdWJUYWJQYXRoLnNwbGl0KCcuJyk7CiAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDMpIHsKICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZDooajot6/lvoTmnInor68nLAogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFyIHN1YlRhYk5hbWUgPSBwYXRoQXJyWzJdLnJlcGxhY2UoJ3N1Yl8nLCAnJyk7CiAgICAgICAgICAgICAgdmFyIHN1YkluaXREYXRhID0gdGhpcy5kYXRhW3BhdGhBcnJbMV1dLmluaXREYXRhW3N1YlRhYk5hbWVdIHx8IHt9OwogICAgICAgICAgICAgIC8v5Yik5pat5b2T5YmN5a2Q6KGo5piv5ZCm5a2Y5pyJ5Zue5pi+5YC8CiAgICAgICAgICAgICAgaWYgKHRoaXMuJHBhcmVudC5zdWJCYWNrZmlsbCAmJiB0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwuaGFzKHN1YlRhYlBhdGgpKSB7CiAgICAgICAgICAgICAgICAvL3RoaXMuZGF0YVtwYXRoQXJyWzFdXVtwYXRoQXJyWzJdXS5wdXNoKHRoaXMuJHBhcmVudC5zdWJCYWNrZmlsbC5nZXQoc3ViVGFiUGF0aCkpOwogICAgICAgICAgICAgICAgc3ViSW5pdERhdGEgPSB0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwuZ2V0KHN1YlRhYlBhdGgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvL+aKiuaVsOe7hOmHjOmdoueahOWAvOS4uiBudWxsIOi9rOaNouS4uuepuuWtl+espuS4sgogICAgICAgICAgICAgIHZhciBzdHIgPSBKU09OLnN0cmluZ2lmeShzdWJJbml0RGF0YSkucmVwbGFjZSgvbnVsbC9nLCAnIiInKTsKICAgICAgICAgICAgICB2YXIgc3ViRGF0YSA9IEpTT04ucGFyc2Uoc3RyKTsKICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3ViRGF0YSkgewogICAgICAgICAgICAgICAgLy/ngrnmt7vliqDml7bliKTmlq3opoHmlrDlop7lrZDooajorrDlvZXkuK3nmoTlrZnooajmmK/lkKbmnInlgLwKICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignc3ViXycpID09IDAgJiYgc3ViRGF0YVtrZXldLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgc3ViRGF0YVtrZXldID0gW107IC8v5pyJ5YiZ5riF56m6CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyAvL+eCuea3u+WKoOaXtuWIpOaWreimgeaWsOWinuWtkOihqOiusOW9leS4reeahOWtl+auteaYr+WQpuacieWAvAogICAgICAgICAgICAgICAgLy8gaWYoc3ViRGF0YVtrZXldKXsKICAgICAgICAgICAgICAgIC8vICAgICBzdWJEYXRhW2tleV0gPSAiIjsvL+acieWImea4heepugogICAgICAgICAgICAgICAgLy8gfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgZmlsbE9iaiA9IHRoaXMudG9GaWxsT3JnKHBhdGhBcnJbMV0gKyAnLicgKyBwYXRoQXJyWzJdLCBzdWJEYXRhKTsKICAgICAgICAgICAgICBmaWxsT2JqLnN1Yl9ndWlkID0gdGhpcy5ndWlkKCk7CiAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhBcnJbMV1dW3BhdGhBcnJbMl1dLnB1c2goZmlsbE9iaik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBndWlkOiBmdW5jdGlvbiBndWlkKCkgewogICAgICAgICAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykgewogICAgICAgICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwKICAgICAgICAgICAgICAgIHYgPSBjID09ICd4JyA/IHIgOiByICYgMHgzIHwgMHg4OwogICAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgLy/lrZnooajpu5jorqTlgLzlm57loasKICAgICAgICAgIGFkZFN1blRhYjogZnVuY3Rpb24gYWRkU3VuVGFiKHN1YlRhYlBhdGgsIHN1YkluZGV4KSB7CiAgICAgICAgICAgIHZhciBwYXRoQXJyID0gc3ViVGFiUGF0aC5zcGxpdCgnLicpOwogICAgICAgICAgICBpZiAocGF0aEFyci5sZW5ndGggPCA0KSB7CiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Z6KGo6Lev5b6E5pyJ6K+vJywKICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHZhciBzdWJUYWJOYW1lID0gcGF0aEFyclsyXS5yZXBsYWNlKCdzdWJfJywgJycpOwogICAgICAgICAgICAgIHZhciBzdW5UYWJOYW1lID0gcGF0aEFyclszXS5yZXBsYWNlKCdzdWJfJywgJycpOwogICAgICAgICAgICAgIHZhciBzdWJJbml0RGF0YSA9IHRoaXMuZGF0YVtwYXRoQXJyWzFdXS5pbml0RGF0YVtzdWJUYWJOYW1lXS5pbml0RGF0YVtzdW5UYWJOYW1lXSB8fCB7fTsKICAgICAgICAgICAgICAvL+WIpOaWreW9k+WJjeWtmeihqOaYr+WQpuWtmOacieWbnuaYvuWAvAogICAgICAgICAgICAgIGlmICh0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwgJiYgdGhpcy4kcGFyZW50LnN1YkJhY2tmaWxsLmhhcyhzdWJUYWJQYXRoKSkgewogICAgICAgICAgICAgICAgLy90aGlzLmRhdGFbcGF0aEFyclsxXV1bcGF0aEFyclsyXV0ucHVzaCh0aGlzLiRwYXJlbnQuc3ViQmFja2ZpbGwuZ2V0KHN1YlRhYlBhdGgpKTsKICAgICAgICAgICAgICAgIHN1YkluaXREYXRhID0gdGhpcy4kcGFyZW50LnN1YkJhY2tmaWxsLmdldChzdWJUYWJQYXRoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy/miormlbDnu4Tph4zpnaLnmoTlgLzkuLogbnVsbCDovazmjaLkuLrnqbrlrZfnrKbkuLIKICAgICAgICAgICAgICB2YXIgc3RyID0gSlNPTi5zdHJpbmdpZnkoc3ViSW5pdERhdGEpLnJlcGxhY2UoL251bGwvZywgJyIiJyk7CiAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFbcGF0aEFyclsxXV1bcGF0aEFyclsyXV1bc3ViSW5kZXhdW3BhdGhBcnJbM11dKSB7CiAgICAgICAgICAgICAgICB2YXIga2V5ID0gW3BhdGhBcnJbM11dOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclsxXV1bcGF0aEFyclsyXV1bc3ViSW5kZXhdW2tleV0gPSB2YWx1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdmFyIHN1bkJvZGF0YSA9IEpTT04ucGFyc2Uoc3RyKTsKICAgICAgICAgICAgICBzdW5Cb2RhdGEuc3ViX2d1aWQgPSB0aGlzLmd1aWQoKTsKICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclsxXV1bcGF0aEFyclsyXV1bc3ViSW5kZXhdW3BhdGhBcnJbM11dLnB1c2goc3VuQm9kYXRhKTsKICAgICAgICAgICAgICB0aGlzLiRmb3JjZVVwZGF0ZSgpOyAvL+i/q+S9vyBWdWUg5a6e5L6L6YeN5paw5riy5p+TCgogICAgICAgICAgICAgIC8vIHRoaXMucGVybWlzc2lvbi50YWJsZVtzdW5UYWJOYW1lXS5yZXF1aXJlZCA9ICJmYWxzZSI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBhZGRTdWJUYWJsZUJ5TmFtZTogZnVuY3Rpb24gYWRkU3ViVGFibGVCeU5hbWUoc3ViVGFibGVOYW1lKSB7CiAgICAgICAgICAgIGZvciAodmFyIGJvQWxpYXMgaW4gdGhpcy5kYXRhKSB7CiAgICAgICAgICAgICAgdmFyIHN1YkluaXREYXRhID0gdGhpcy5kYXRhW2JvQWxpYXNdLmluaXREYXRhW3N1YlRhYmxlTmFtZV0gfHwge307CiAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdICYmIHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdLmxlbmd0aCA8IDEpIHsKICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdLnB1c2goSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzdWJJbml0RGF0YSkpKTsKICAgICAgICAgICAgICAgIC8vIOWtmeihqOW/heWhqyDpu5jorqTmt7vliqDkuIDmnaEKICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb24udGFibGUpIHsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdGFibGVOYW1lIGluIHRoaXMucGVybWlzc2lvbi50YWJsZSkgewogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb24udGFibGVbdGFibGVOYW1lXS5yZXF1aXJlZCkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdWzBdLmhhc093blByb3BlcnR5KCdzdWJfJyArIHRhYmxlTmFtZSkgJiYgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF1bJ3N1Yl8nICsgdGFibGVOYW1lXSAmJiB0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXVswXVsnc3ViXycgKyB0YWJsZU5hbWVdLmxlbmd0aCA8IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF1bJ3N1Yl8nICsgdGFibGVOYW1lXS5wdXNoKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3ViSW5pdERhdGEuaW5pdERhdGFbdGFibGVOYW1lXSkpKTsKICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF0uaGFzT3duUHJvcGVydHkoJ3N1Yl8nICsgdGFibGVOYW1lKSAmJiAhdGhpcy5kYXRhW2JvQWxpYXNdWydzdWJfJyArIHN1YlRhYmxlTmFtZV1bMF1bJ3N1Yl8nICsgdGFibGVOYW1lXSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbYm9BbGlhc11bJ3N1Yl8nICsgc3ViVGFibGVOYW1lXVswXVsnc3ViXycgKyB0YWJsZU5hbWVdID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtib0FsaWFzXVsnc3ViXycgKyBzdWJUYWJsZU5hbWVdWzBdWydzdWJfJyArIHRhYmxlTmFtZV0ucHVzaChzdWJJbml0RGF0YS5pbml0RGF0YVt0YWJsZU5hbWVdKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBkZWxldGVSb3c6IGZ1bmN0aW9uIGRlbGV0ZVJvdyhzdWJUYWJsZVBhdGgsIGl0ZW0pIHsKICAgICAgICAgICAgdmFyIHBhdGhBcnIgPSBzdWJUYWJsZVBhdGguc3BsaXQoJy4nKTsKICAgICAgICAgICAgaWYgKHBhdGhBcnIubGVuZ3RoIDwgMikgewogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtkOihqOi3r+W+hOacieivrycsCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgc3ViVGFiTmFtZSA9IHBhdGhBcnJbMV0ucmVwbGFjZSgnc3ViXycsICcnKTsKICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhW3BhdGhBcnJbMF1dW3BhdGhBcnJbMV1dLmxlbmd0aCA9PSAxICYmICh0aGlzLnBlcm1pc3Npb24udGFibGVbc3ViVGFiTmFtZV0ucmVxdWlyZWQgPT0gdHJ1ZSB8fCB0aGlzLnBlcm1pc3Npb24udGFibGVbc3ViVGFiTmFtZV0ucmVxdWlyZWQgPT0gJ3RydWUnKSkgewogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZDooajlv4XloavkuIDmnaHorrDlvZUnLAogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV0ucmVtb3ZlKGl0ZW0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgZGVsZXRlU3VuUm93OiBmdW5jdGlvbiBkZWxldGVTdW5Sb3coc3ViVGFibGVQYXRoLCBpdGVtLCBzdWJJbmRleCkgewogICAgICAgICAgICB2YXIgcGF0aEFyciA9IHN1YlRhYmxlUGF0aC5zcGxpdCgnLicpOwogICAgICAgICAgICBpZiAocGF0aEFyci5sZW5ndGggPCAzKSB7CiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Z6KGo6Lev5b6E5pyJ6K+vJywKICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHZhciBzdWJUYWJOYW1lID0gcGF0aEFyclsxXS5yZXBsYWNlKCdzdWJfJywgJycpOwogICAgICAgICAgICAgIHZhciBzdW5UYWJOYW1lID0gcGF0aEFyclsyXS5yZXBsYWNlKCdzdWJfJywgJycpOwogICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV1bc3ViSW5kZXhdW3BhdGhBcnJbMl1dLmxlbmd0aCA9PSAxICYmICh0aGlzLnBlcm1pc3Npb24udGFibGVbc3VuVGFiTmFtZV0ucmVxdWlyZWQgPT0gdHJ1ZSB8fCB0aGlzLnBlcm1pc3Npb24udGFibGVbc3ViVGFiTmFtZV0ucmVxdWlyZWQgPT0gJ3RydWUnKSkgewogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZnooajlv4XloavkuIDmnaHorrDlvZUnLAogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV1bc3ViSW5kZXhdW3BhdGhBcnJbMl1dLnJlbW92ZShpdGVtKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGNsZWFyQWxsOiBmdW5jdGlvbiBjbGVhckFsbChzdWJUYWJsZVBhdGgsIGlzSG90LCBpbmRleCkgewogICAgICAgICAgICB2YXIgcGF0aEFyciA9IHN1YlRhYmxlUGF0aC5zcGxpdCgnLicpOwogICAgICAgICAgICBpZiAocGF0aEFyci5sZW5ndGggPCAyKSB7CiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Q6KGo6Lev5b6E5pyJ6K+vJywKICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIC8v5a2Z6KGoCiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGluZGV4IHx8IGluZGV4ID09PSAwKSAmJiBwYXRoQXJyLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhBcnJbMF1dW3BhdGhBcnJbMV1dW2luZGV4XVtwYXRoQXJyWzJdXS5lbXB0eSgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHZhciBzdWJUYWJOYW1lID0gcGF0aEFyclsxXS5yZXBsYWNlKCdzdWJfJywgJycpOwogICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbcGF0aEFyclswXV1bcGF0aEFyclsxXV0ubGVuZ3RoID09IDEgJiYgKHRoaXMucGVybWlzc2lvbi50YWJsZVtzdWJUYWJOYW1lXS5yZXF1aXJlZCA9PSB0cnVlIHx8IHRoaXMucGVybWlzc2lvbi50YWJsZVtzdWJUYWJOYW1lXS5yZXF1aXJlZCA9PSAndHJ1ZScpKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtkOihqOW/heWhq+S4gOadoeiusOW9lScsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoQXJyWzBdXVtwYXRoQXJyWzFdXS5lbXB0eSgpOwogICAgICAgICAgICAgIGlmIChpc0hvdCkgewogICAgICAgICAgICAgICAgdmFyIGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBzdWJUYWJsZVBhdGg7CiAgICAgICAgICAgICAgICB0aGlzLiRyZWZzW2hvdFRhYmxlUmVmXS5maWxsYmFja0hvdFRhYmxlRGF0YShudWxsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBhZGRJbml0VGVtcGxhdGVEYXRhOiBmdW5jdGlvbiBhZGRJbml0VGVtcGxhdGVEYXRhKHN1YlRhYmxlUGF0aCkgewogICAgICAgICAgICB2YXIgaG90VGFibGVSZWYgPSAnaG90dGFibGUuJyArIHN1YlRhYmxlUGF0aDsKICAgICAgICAgICAgdGhpcy4kcmVmc1tob3RUYWJsZVJlZl0udG9BZGRJbml0VGVtcGxhdGVEYXRhKCk7CiAgICAgICAgICB9LAogICAgICAgICAgbWVyZ2VDZWxsUmVmcmVzaDogZnVuY3Rpb24gbWVyZ2VDZWxsUmVmcmVzaChzdWJUYWJsZVBhdGgpIHsKICAgICAgICAgICAgdmFyIGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBzdWJUYWJsZVBhdGg7CiAgICAgICAgICAgIHRoaXMuJHJlZnNbaG90VGFibGVSZWZdLm1lcmdlQ2VsbFJlZnJlc2goKTsKICAgICAgICAgIH0sCiAgICAgICAgICBleGVjQ2VsbE1hdGhFeHA6IGZ1bmN0aW9uIGV4ZWNDZWxsTWF0aEV4cChzdWJUYWJsZVBhdGgpIHsKICAgICAgICAgICAgdmFyIGhvdFRhYmxlUmVmID0gJ2hvdHRhYmxlLicgKyBzdWJUYWJsZVBhdGg7CiAgICAgICAgICAgIHRoaXMuJHJlZnNbaG90VGFibGVSZWZdLmV4ZWNDZWxsTWF0aEV4cCgpOwogICAgICAgICAgfSwKICAgICAgICAgIGV4ZWNDcm9zc01hcHBpbmc6IGZ1bmN0aW9uIGV4ZWNDcm9zc01hcHBpbmcoc3ViVGFibGVQYXRoKSB7CiAgICAgICAgICAgIHZhciBob3RUYWJsZVJlZiA9ICdob3R0YWJsZS4nICsgc3ViVGFibGVQYXRoOwogICAgICAgICAgICB0aGlzLiRyZWZzW2hvdFRhYmxlUmVmXS5leGVjQ3Jvc3NNYXBwaW5nKCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0SG90VGFibGVEYXRhOiBmdW5jdGlvbiBnZXRIb3RUYWJsZURhdGEoc3ViVGFibGVQYXRoKSB7CiAgICAgICAgICAgIHZhciBob3RUYWJsZVJlZiA9ICdob3R0YWJsZS4nICsgc3ViVGFibGVQYXRoOwogICAgICAgICAgICB0aGlzLiRyZWZzW2hvdFRhYmxlUmVmXS5nZXRIb3RUYWJsZURhdGEoKTsKICAgICAgICAgIH0sCiAgICAgICAgICAvL+eCueWHu+WIhumhteagoemqjOaMiemSruinpuWPkeS6i+S7tgogICAgICAgICAgbmV4dFN0ZXBDbGljazogZnVuY3Rpb24gbmV4dFN0ZXBDbGljayhpc0NoZWNrLCBpbmRleCwgd2F5KSB7CiAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICAgICAgICB2YXIgY2hpbGRyZW5zID0gdGhpcy4kcmVmcy5vbmxpbmVGb3JtLiRjaGlsZHJlblswXS4kcmVmczsKICAgICAgICAgICAgdmFyIG5leHRJbmRleCA9IHdheSA9PSAnYmFjaycgPyBpbmRleCAtIDEgOiBpbmRleCArIDE7CiAgICAgICAgICAgIC8v6L+b5YWl5LiL5LiA5Liq6aG1562+5bm25LiU6ZyA6KaB5qCh6aqM5b2T5YmN6aG1562+44CC5YiZ6L+b6KGM5qCh6aqMCiAgICAgICAgICAgIGlmICh3YXkgPT0gJ25leHQnICYmIGlzQ2hlY2sgPT0gJ3knKSB7CiAgICAgICAgICAgICAgdGhpcy4kdmFsaWRhdG9yLnZhbGlkYXRlQWxsKCdjdXN0b20tZm9ybScpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgewogICAgICAgICAgICAgICAgdmFyIGN1clRhYkhhc0Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgICAgICB2YXIgY3VyRWwgPSBjaGlsZHJlbnNbJ25leHRfc3RlcF9jaGVja18nICsgaW5kZXhdLiRlbDsKICAgICAgICAgICAgICAgICAgX3RoaXMzLiR2YWxpZGF0b3IuZXJyb3JzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY3VyRWwuY29udGFpbnMoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoaXRlbS5maWVsZClbMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICBjdXJUYWJIYXNFcnJvciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgfHwgIWN1clRhYkhhc0Vycm9yKSB7CiAgICAgICAgICAgICAgICAgIGNoaWxkcmVucy5lbF90YWJsZV9jaGVjay5jdXJyZW50TmFtZSA9IG5leHRJbmRleCArICcnOwogICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW5zQXJyYXkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjaGlsZHJlbnMpOwogICAgICAgICAgICAgICAgICBjaGlsZHJlbnNBcnJheS5yZW1vdmUoJ2NvbGxhcHNlJyk7CiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZHJlbnNBcnJheS5sZW5ndGggLSAzICYmIHdheSA9PSAnbmV4dCcpIHsKICAgICAgICAgICAgICAgICAgICBfdGhpczMuJHJvb3QuJGVtaXQoJ3N0YXJ0Rmxvd0J0bkNoYW5nZScsIHRydWUpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY2hpbGRyZW5zLmVsX3RhYmxlX2NoZWNrLmN1cnJlbnROYW1lID0gbmV4dEluZGV4ICsgJyc7CiAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuc0FycmF5ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY2hpbGRyZW5zKTsKICAgICAgICAgICAgICBjaGlsZHJlbnNBcnJheS5yZW1vdmUoJ2NvbGxhcHNlJyk7CiAgICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkcmVuc0FycmF5Lmxlbmd0aCAtIDMgJiYgd2F5ID09ICduZXh0JykgewogICAgICAgICAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnc3RhcnRGbG93QnRuQ2hhbmdlJywgdHJ1ZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgdG9GaWxsT3JnOiBmdW5jdGlvbiB0b0ZpbGxPcmcocGF0aCwgcm93KSB7CiAgICAgICAgICAgIHZhciBmaWxsT3JnQ29uZiA9IHRoaXMuZmlsbE9yZ0NvbmZNYXBbcGF0aF07CiAgICAgICAgICAgIHZhciBmaWxsT2JqID0ge307CiAgICAgICAgICAgIGlmIChmaWxsT3JnQ29uZiAmJiB0aGlzLmZpbGxPcmcpIHsKICAgICAgICAgICAgICBpZiAoZmlsbE9yZ0NvbmYubmFtZSkgewogICAgICAgICAgICAgICAgdmFyIG5hbWVQYXRoID0gZmlsbE9yZ0NvbmYubmFtZS5zcGxpdCgnLicpOwogICAgICAgICAgICAgICAgZmlsbE9ialtuYW1lUGF0aFtuYW1lUGF0aC5sZW5ndGggLSAxXV0gPSB0aGlzLmZpbGxPcmcubmFtZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGZpbGxPcmdDb25mLmlkKSB7CiAgICAgICAgICAgICAgICB2YXIgaWRQYXRoID0gZmlsbE9yZ0NvbmYuaWQuc3BsaXQoJy4nKTsKICAgICAgICAgICAgICAgIGZpbGxPYmpbaWRQYXRoW2lkUGF0aC5sZW5ndGggLSAxXV0gPSB0aGlzLmZpbGxPcmcuaWQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChmaWxsT3JnQ29uZi5jb2RlKSB7CiAgICAgICAgICAgICAgICB2YXIgY29kZVBhdGggPSBmaWxsT3JnQ29uZi5jb2RlLnNwbGl0KCcuJyk7CiAgICAgICAgICAgICAgICBmaWxsT2JqW2NvZGVQYXRoW2NvZGVQYXRoLmxlbmd0aCAtIDFdXSA9IHRoaXMuZmlsbE9yZy5jb2RlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZmlsbE9yZ0NvbmYuaW5zdElkKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5zdElkUGF0aCA9IGZpbGxPcmdDb25mLmluc3RJZC5zcGxpdCgnLicpOwogICAgICAgICAgICAgICAgZmlsbE9ialtpbnN0SWRQYXRoW2luc3RJZFBhdGgubGVuZ3RoIC0gMV1dID0gdGhpcy4kcGFyZW50LiRwYXJlbnQuaW5zdElkID8gdGhpcy4kcGFyZW50LiRwYXJlbnQuaW5zdElkIDogJyc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJvdyksIGZpbGxPYmopOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByb3c7CiAgICAgICAgICB9LAogICAgICAgICAgaW5pdEZpbGw6IGZ1bmN0aW9uIGluaXRGaWxsKHBhdGgsIGNvbmYpIHsKICAgICAgICAgICAgLy/mlLbpm4boh6rliqjlm57loavkv6Hmga8KICAgICAgICAgICAgaWYgKHBhdGggJiYgY29uZikgewogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB2YXIgY29uZkpzb24gPSB0aGlzLmZpbGxPcmdDb25mTWFwW3BhdGhdID8gdGhpcy5maWxsT3JnQ29uZk1hcFtwYXRoXSA6IEpTT04ucGFyc2UoY29uZik7CiAgICAgICAgICAgICAgICBpZiAoY29uZkpzb24uaWQgfHwgY29uZkpzb24uY29kZSB8fCBjb25mSnNvbi5uYW1lIHx8IGNvbmZKc29uLmluc3RJZCkgewogICAgICAgICAgICAgICAgICB0aGlzLmZpbGxPcmdDb25mTWFwW3BhdGhdID0gY29uZkpzb247CiAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdEZpcnN0RmlsbChwYXRoLCBjb25mSnNvbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBpbml0Rmlyc3RGaWxsOiBmdW5jdGlvbiBpbml0Rmlyc3RGaWxsKHBhdGgsIGNvbmYpIHsKICAgICAgICAgICAgLy/lpITnkIbnrKzkuIDooYznmoTlm57loasKICAgICAgICAgICAgdmFyIHBhdGhzID0gcGF0aC5zcGxpdCgnLicpOwogICAgICAgICAgICBpZiAodGhpcy5kYXRhW3BhdGhzWzBdXVtwYXRoc1sxXV0gJiYgdGhpcy5kYXRhW3BhdGhzWzBdXVtwYXRoc1sxXV0ubGVuZ3RoID09IDEgJiYgdGhpcy5maWxsT3JnLmlkKSB7CiAgICAgICAgICAgICAgaWYgKGNvbmYuaWQpIHsKICAgICAgICAgICAgICAgIHZhciBpZFBhdGggPSBjb25mLmlkLnNwbGl0KCcuJyk7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW2lkUGF0aFsyXV0pIHsKICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhzWzBdXVtwYXRoc1sxXV1bMF1baWRQYXRoWzJdXSA9IHRoaXMuZmlsbE9yZy5pZDsKICAgICAgICAgICAgICAgICAgaWYgKGNvbmYuY29kZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBjb2RlUGF0aCA9IGNvbmYuY29kZS5zcGxpdCgnLicpOwogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhW3BhdGhzWzBdXVtwYXRoc1sxXV1bMF1bY29kZVBhdGhbMl1dKSB7CiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtjb2RlUGF0aFsyXV0gPSB0aGlzLmZpbGxPcmcuY29kZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGNvbmYubmFtZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBuYW1lUGF0aCA9IGNvbmYubmFtZS5zcGxpdCgnLicpOwogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhW3BhdGhzWzBdXVtwYXRoc1sxXV1bMF1bbmFtZVBhdGhbMl1dKSB7CiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aHNbMF1dW3BhdGhzWzFdXVswXVtuYW1lUGF0aFsyXV0gPSB0aGlzLmZpbGxPcmcubmFtZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGNvbmYuaW5zdElkKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5zdElkUGF0aCA9IGNvbmYuaW5zdElkLnNwbGl0KCcuJyk7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW2luc3RJZFBhdGhbMl1dKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtwYXRoc1swXV1bcGF0aHNbMV1dWzBdW2luc3RJZFBhdGhbMl1dID0gdGhpcy4kcGFyZW50LiRwYXJlbnQuaW5zdElkID8gdGhpcy4kcGFyZW50LiRwYXJlbnQuaW5zdElkIDogJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgaXNTaG93QWRkQnV0dG9uOiBmdW5jdGlvbiBpc1Nob3dBZGRCdXR0b24ocGF0aCwgbWF4Um93LCBzdWJJbmRleCkgewogICAgICAgICAgICBpZiAobWF4Um93ID09PSAwKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHZhciBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLicpOwogICAgICAgICAgICBpZiAoc3ViSW5kZXggPj0gMCkgewogICAgICAgICAgICAgIGlmIChwYXRoQXJyLmxlbmd0aCA8IDQpIHsKICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5a2Q6KGo6Lev5b6E5pyJ6K+vJywKICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGFbcGF0aEFyclsxXV1bcGF0aEFyclsyXV1bc3ViSW5kZXhdW3BhdGhBcnJbM11dOwogICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoID49IG1heFJvdzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaWYgKHBhdGhBcnIubGVuZ3RoIDwgMykgewogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflrZDooajot6/lvoTmnInor68nLAogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgX2RhdGEgPSB0aGlzLmRhdGFbcGF0aEFyclsxXV1bcGF0aEFyclsyXV07CiAgICAgICAgICAgICAgICByZXR1cm4gX2RhdGEubGVuZ3RoID49IG1heFJvdzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY29tcG9uZW50czogewogICAgICAgICAgRWlwUGFnaW5hdGlvbjogRWlwUGFnaW5hdGlvbiwKICAgICAgICAgIEVpcFN1YlBhZ2luYXRpb246IEVpcFN1YlBhZ2luYXRpb24sCiAgICAgICAgICBFaXBTdWJJbXBvcnREaWFsb2c6IEVpcFN1YkltcG9ydERpYWxvZywKICAgICAgICAgIEVpcFN1YkV4cG9ydERpYWxvZzogRWlwU3ViRXhwb3J0RGlhbG9nLAogICAgICAgICAgRWlwUGFnaW5hdGlvbkxheW91dDogRWlwUGFnaW5hdGlvbkxheW91dCwKICAgICAgICAgIEVpcElucHV0OiBFaXBJbnB1dCwKICAgICAgICAgIEVpcENoZWNrYm94OiBFaXBDaGVja2JveCwKICAgICAgICAgIEVpcFNlbGVjdDogRWlwU2VsZWN0LAogICAgICAgICAgRWlwVXNlclNlbGVjdG9yOiBFaXBVc2VyU2VsZWN0b3IsCiAgICAgICAgICBFaXBEZW1lbnNpb25TZWxlY3RvcjogRWlwRGVtZW5zaW9uU2VsZWN0b3IsCiAgICAgICAgICBFaXBKb2JTZWxlY3RvcjogRWlwSm9iU2VsZWN0b3IsCiAgICAgICAgICBFaXBPcmdTZWxlY3RvcjogRWlwT3JnU2VsZWN0b3IsCiAgICAgICAgICBFaXBQb3N0U2VsZWN0b3I6IEVpcFBvc3RTZWxlY3RvciwKICAgICAgICAgIEVpcFJvbGVTZWxlY3RvcjogRWlwUm9sZVNlbGVjdG9yLAogICAgICAgICAgRWlwUmFkaW86IEVpcFJhZGlvLAogICAgICAgICAgRWlwVGV4dGFyZWE6IEVpcFRleHRhcmVhLAogICAgICAgICAgRWlwRm9udDogRWlwRm9udCwKICAgICAgICAgIEVpcERpYWxvZzogRWlwRGlhbG9nLAogICAgICAgICAgRWlwQnV0dG9uOiBFaXBCdXR0b24sCiAgICAgICAgICBFaXBEYXRlOiBFaXBEYXRlLAogICAgICAgICAgRWlwSW1nOiBFaXBJbWcsCiAgICAgICAgICBFaXBWaWV3ZXI6IEVpcFZpZXdlciwKICAgICAgICAgIEVpcFN3aXRjaDogRWlwU3dpdGNoLAogICAgICAgICAgSHRGaWxlOiBIdEZpbGUsCiAgICAgICAgICBWUnVudGltZVRlbXBsYXRlOiBWUnVudGltZVRlbXBsYXRlLAogICAgICAgICAgSHRHYW5nZWRTZWxlY3Q6IEh0R2FuZ2VkU2VsZWN0LAogICAgICAgICAgRWlwUmVsRmxvdzogRWlwUmVsRmxvdywKICAgICAgICAgIEVpcFN1YkRpYWxvZzogRWlwU3ViRGlhbG9nLAogICAgICAgICAgSHRMYWJlbDogSHRMYWJlbCwKICAgICAgICAgIEh0RGlnaXRhbDogSHREaWdpdGFsLAogICAgICAgICAgSHRDdXJyZW5jeTogSHRDdXJyZW5jeSwKICAgICAgICAgIEVpcFJlYWx0aW1lSW5wdXQ6IEVpcFJlYWx0aW1lSW5wdXQsCiAgICAgICAgICBFaXBSZWFsdGltZVRleHRhcmVhOiBFaXBSZWFsdGltZVRleHRhcmVhLAogICAgICAgICAgRWlwU3RlcDogRWlwU3RlcCwKICAgICAgICAgIEh0SW5wdXRBdXRvY29tcGxldGU6IEh0SW5wdXRBdXRvY29tcGxldGUsCiAgICAgICAgICBIdFRyZWVzZWxlY3Q6IEh0VHJlZXNlbGVjdCwKICAgICAgICAgIEh0Q2FzY2FkZXI6IEh0Q2FzY2FkZXIsCiAgICAgICAgICBIdFRyZWU6IEh0VHJlZSwKICAgICAgICAgIEVpcEF0dGFjaG1lbnQ6IEVpcEF0dGFjaG1lbnQsCiAgICAgICAgICBFaXBEaWM6IEVpcERpYywKICAgICAgICAgIEVpcEF1dG9jb21wbGV0ZTogRWlwQXV0b2NvbXBsZXRlLAogICAgICAgICAgRWlwQ2FzY2FkZXI6IEVpcENhc2NhZGVyLAogICAgICAgICAgRWlwVHJlZXNlbGVjdDogRWlwVHJlZXNlbGVjdCwKICAgICAgICAgIEVpcENvbGxhcHNlOiBFaXBDb2xsYXBzZSwKICAgICAgICAgIEVpcFBhZ2luYXRpb25TdGVwczogRWlwUGFnaW5hdGlvblN0ZXBzLAogICAgICAgICAgRWlwTWFwOiBFaXBNYXAsCiAgICAgICAgICBFaXBEYXRhVmlldzogRWlwRGF0YVZpZXcsCiAgICAgICAgICBFaXBTdW5EaWFsb2c6IEVpcFN1bkRpYWxvZywKICAgICAgICAgIEVpcFRhZzogRWlwVGFnLAogICAgICAgICAgRWlwSG90VGFibGU6IEVpcEhvdFRhYmxlLAogICAgICAgICAgRWlwSG90U3ViRGlhbG9nOiBFaXBIb3RTdWJEaWFsb2csCiAgICAgICAgICBDb250cmFjdFByZXZpZXc6IENvbnRyYWN0UHJldmlldywKICAgICAgICAgIEVpcFN1YnRhYmxlQmFja2ZpbGw6IEVpcFN1YnRhYmxlQmFja2ZpbGwsCiAgICAgICAgICBFaXBEaXZpZGVyOiBFaXBEaXZpZGVyLAogICAgICAgICAgRWlwT2ZmaWNlOiBFaXBPZmZpY2UsCiAgICAgICAgICBFaXBRcmNvZGU6IEVpcFFyY29kZSwKICAgICAgICAgIEVpcFNpZ25hdHVyZTogRWlwU2lnbmF0dXJlLAogICAgICAgICAgRWlwVGFiczogRWlwVGFicywKICAgICAgICAgIEVpcEZvbnRVZWRpdG9yOiBFaXBGb250VWVkaXRvcgogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQp9Ow=="},null]}