{"remainingRequest":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\bzzgj-fvue\\src\\components\\querySql\\DynamicView.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\src\\components\\querySql\\DynamicView.vue","mtime":1705895419329},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\babel.config.js","mtime":1725536844935},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9ienpnai1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyI7CmltcG9ydCBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9ienpnai1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNwbGljZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmV2ZXJ5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5yZWR1Y2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIudG8tZml4ZWQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNlYXJjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwovLwovLwovLwovLwovLwoKaW1wb3J0IHsgbWFwU3RhdGUsIG1hcEFjdGlvbnMgfSBmcm9tICd2dWV4JzsKaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJ2VsZW1lbnQtdWknOwppbXBvcnQgeyBMb2FkaW5nIH0gZnJvbSAnZWxlbWVudC11aSc7CmltcG9ydCBIdENoZWNrYm94IGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0Q2hlY2tib3gudnVlJzsKaW1wb3J0IEh0RGlhbG9nIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL0h0RGlhbG9nLnZ1ZSc7CmltcG9ydCBIdERpYWxvZ0J0biBmcm9tICdAL2NvbXBvbmVudHMvY29udHJvbC9odERpYWxvZ0J0bi52dWUnOwppbXBvcnQgdXRpbHMgZnJvbSAnQC91dGlscy5qcyc7CmltcG9ydCByZXEgZnJvbSAnQC9yZXF1ZXN0LmpzJzsKaW1wb3J0IHsgQmFzZTY0IH0gZnJvbSAnanMtYmFzZTY0JzsKaW1wb3J0IFZ1ZSBmcm9tICd2dWUnOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ2R5bmFtaWMtdmlldycsCiAgcHJvcHM6IHsKICAgIHNpbmdsZTogU3RyaW5nLAogICAgc3FsQWxpYXM6IFN0cmluZywKICAgIGFsaWFzOiBTdHJpbmcsCiAgICBodG1sOiBTdHJpbmcsCiAgICBxdWVyeVZpZXc6IE9iamVjdAogIH0sCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIHRoaXMuaW5pdCgpOwogIH0sCiAgd2F0Y2g6IHsKICAgIGh0bWw6IGZ1bmN0aW9uIGh0bWwobmV3VmFsKSB7CiAgICAgIGlmIChuZXdWYWwpIHsKICAgICAgICB0aGlzLmluaXQoKTsKICAgICAgfQogICAgfQogIH0sCiAgbWV0aG9kczogewogICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHsKICAgICAgVnVlLmNvbXBvbmVudCgnaHQtcnVudGltZS10ZW1wbGF0ZScsIHsKICAgICAgICBwcm9wczogewogICAgICAgICAgc2luZ2xlOiBTdHJpbmcsCiAgICAgICAgICBzcWxBbGlhczogU3RyaW5nLAogICAgICAgICAgYWxpYXM6IFN0cmluZywKICAgICAgICAgIGh0bWw6IFN0cmluZywKICAgICAgICAgIHF1ZXJ5VmlldzogT2JqZWN0CiAgICAgICAgfSwKICAgICAgICB0ZW1wbGF0ZTogdGhpcy5odG1sLAogICAgICAgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBicG1SdW5UaW1lOiB3aW5kb3cuY29udGV4dC5icG1SdW5UaW1lLAogICAgICAgICAgICBmaWxlTGlzdDogW10sCiAgICAgICAgICAgIHRhYmxlRGF0YTogewogICAgICAgICAgICAgIHNlbGVjdFJvd3M6IFtdLAogICAgICAgICAgICAgIHF1ZXJ5czogJycKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGlhbG9nRXhwb3J0VmlzaWJsZTogZmFsc2UsCiAgICAgICAgICAgIGV4cG9ydERhdGE6IHsKICAgICAgICAgICAgICBnZXRUeXBlOiAnYWxsJywKICAgICAgICAgICAgICBleHBGaWVsZDogW10KICAgICAgICAgICAgfSwKICAgICAgICAgICAgZXhwb3J0U2VsbGVjdGlvbjogW10sCiAgICAgICAgICAgIHNlYXJjaEZvcm06IHt9LAogICAgICAgICAgICBkaXNwbGF5RmllbGRzOiBbXSwKICAgICAgICAgICAgYWxhcm1TZXR0aW5nTWFwOiB7fSwKICAgICAgICAgICAgc3VtbWFyeVR5cGVNYXA6IHt9LAogICAgICAgICAgICBxdWVyeUZvcm06IHsKICAgICAgICAgICAgICBxdWVyeURhdGE6ICcnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHVwbG9hZFBhcmFtczogewogICAgICAgICAgICAgIGlkOiBbXQogICAgICAgICAgICB9LAogICAgICAgICAgICBmb3JtVHlwZTogZmFsc2UsCiAgICAgICAgICAgIGxhYmVsUG9zaXRpb246ICdsZWZ0JywKICAgICAgICAgICAgaW5jb25zOiAnZWwtaWNvbi1hcnJvdy1kb3duJywKICAgICAgICAgICAgZm9ybWF0dGVyTWFwOiB7fSwKICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgIGZ1bGxzY3JlZW46IHRydWUsCiAgICAgICAgICAgICAgbG9jazogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICB1cGxvYWRFcnJvcjogJy9ydW50aW1lL3Bob3RvRXJyb3JDc3YvdjEvdXBsb2FkRXJyb3JMaXN0JywKICAgICAgICAgICAgdXBvYWRQZGZUb0F6dXJlOiB3aW5kb3cuY29udGV4dC5icG1SdW5UaW1lICsgJy9ydW50aW1lL2Jsb2IvdjEvdXBvYWRQZGZUb0F6dXJlJywKICAgICAgICAgICAgdXBsb2FkVW5wcmVwYXJlOiAnL3J1bnRpbWUvYmxvYi92MS91cG9hZFRvQXp1cmUnLAogICAgICAgICAgICBzdW1tYXJ5U2V0dGluZzogW10sCiAgICAgICAgICAgIGFjdGl2ZU5hbWVzOiBbJzEnXQogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNvbXB1dGVkOiBtYXBTdGF0ZSh7CiAgICAgICAgICByb3dzOiBmdW5jdGlvbiByb3dzKHN0YXRlKSB7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5mb3JtLnF1ZXJ5U3FsVmlld1Jvd3M7CiAgICAgICAgICB9LAogICAgICAgICAgcGFnaW5hdGlvbjogZnVuY3Rpb24gcGFnaW5hdGlvbihzdGF0ZSkgewogICAgICAgICAgICByZXR1cm4gc3RhdGUuZm9ybS5xdWVyeVNxbFZpZXdQYWdpbmF0aW9uOwogICAgICAgICAgfSwKICAgICAgICAgIHRvdGFsOiBmdW5jdGlvbiB0b3RhbChzdGF0ZSkgewogICAgICAgICAgICByZXR1cm4gc3RhdGUuZm9ybS5xdWVyeVNxbFZpZXdUb3RhbDsKICAgICAgICAgIH0sCiAgICAgICAgICB1cGxvYWRIZWFkZXJzOiBmdW5jdGlvbiB1cGxvYWRIZWFkZXJzKHN0YXRlKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogIkJlYXJlciAiLmNvbmNhdChzdGF0ZS5sb2dpbi5jdXJyZW50VXNlci50b2tlbikKICAgICAgICAgICAgfTsKICAgICAgICAgIH0sCiAgICAgICAgICB1cGxvYWRFcnJvckh0dHA6IGZ1bmN0aW9uIHVwbG9hZEVycm9ySHR0cCgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnBtUnVuVGltZSArIHRoaXMudXBsb2FkRXJyb3I7CiAgICAgICAgICB9LAogICAgICAgICAgdXBsb2FkVW5wcmVwYXJlSHR0cDogZnVuY3Rpb24gdXBsb2FkVW5wcmVwYXJlSHR0cCgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnBtUnVuVGltZSArIHRoaXMudXBsb2FkVW5wcmVwYXJlOwogICAgICAgICAgfQogICAgICAgIH0pLAogICAgICAgIGNvbXBvbmVudHM6IHsKICAgICAgICAgIEh0Q2hlY2tib3g6IEh0Q2hlY2tib3gsCiAgICAgICAgICBIdERpYWxvZzogSHREaWFsb2csCiAgICAgICAgICBIdERpYWxvZ0J0bjogSHREaWFsb2dCdG4KICAgICAgICB9LAogICAgICAgIHdhdGNoOiB7CiAgICAgICAgICBmb3JtS2V5OiBmdW5jdGlvbiBmb3JtS2V5KG5ld1ZhbCkgewogICAgICAgICAgICBpZiAobmV3VmFsKSB7CiAgICAgICAgICAgICAgdGhpcy5pbml0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAndGFibGVEYXRhLnNlbGVjdFJvd3MnOiBmdW5jdGlvbiB0YWJsZURhdGFTZWxlY3RSb3dzKG5ld1ZhbCkgewogICAgICAgICAgICBpZiAobmV3VmFsLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICB2YXIgbWVfID0gdGhpczsKICAgICAgICAgICAgICBtZV8udXBsb2FkUGFyYW1zLmlkID0gW107CiAgICAgICAgICAgICAgbmV3VmFsLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIG1lXy51cGxvYWRQYXJhbXMuaWQucHVzaChpdGVtLklOU1RJRCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAkcm91dGU6ICdpbml0JywKICAgICAgICAgIHF1ZXJ5VmlldzogewogICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKG5ld1ZhbCwgb2xkVmFsKSB7CiAgICAgICAgICAgICAgaWYgKG5ld1ZhbC5zaG93cykgewogICAgICAgICAgICAgICAgdmFyIGRpc3BsYXlGaWVsZCA9IHV0aWxzLnBhcnNlVG9Kc29uKG5ld1ZhbC5zaG93cyk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BsYXlGaWVsZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICBpZiAoZGlzcGxheUZpZWxkW2ldLmhpZGRlbiA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RmllbGRzLnB1c2goZGlzcGxheUZpZWxkW2ldKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcGxheUZpZWxkW2ldLnN1bW1hcnlUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlUeXBlTWFwW2Rpc3BsYXlGaWVsZFtpXS5maWVsZE5hbWVdID0gZGlzcGxheUZpZWxkW2ldLnN1bW1hcnlUeXBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZGlzcGxheUZpZWxkW2ldLmZvcm1hdGVyKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZXJNYXBbZGlzcGxheUZpZWxkW2ldLmZpZWxkTmFtZV0gPSBkaXNwbGF5RmllbGRbaV0uZm9ybWF0ZXI7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlGaWVsZFtpXS5hbGFybVNldHRpbmcpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmFsYXJtU2V0dGluZ01hcFtkaXNwbGF5RmllbGRbaV0uZmllbGROYW1lXSA9IGRpc3BsYXlGaWVsZFtpXS5hbGFybVNldHRpbmc7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKG5ld1ZhbC5zdW1tYXJ5U2V0dGluZykgewogICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5U2V0dGluZyA9IEpTT04ucGFyc2UobmV3VmFsLnN1bW1hcnlTZXR0aW5nKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgLy/miZPljbAKICAgICAgICAgIHByaW50TGlzdDogZnVuY3Rpb24gcHJpbnRMaXN0KCkgewogICAgICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmludERhdGEnKS5pbm5lckhUTUw7CiAgICAgICAgICAgIHdpbmRvdy5wcmludCgpOwogICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgIH0sCiAgICAgICAgICAvL+eUn+aIkOS6jOe7tOeggQogICAgICAgICAgLy/ot6/nlLHot7PovawKICAgICAgICAgIHJvdXRlclB1c2g6IGZ1bmN0aW9uIHJvdXRlclB1c2godXJsKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHVybCk7CiAgICAgICAgICB9LAogICAgICAgICAgLy/mn6XnnIvkuI7lpITnkIbmtYHnqIvmjInpkq4KICAgICAgICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIGRpc3Bvc2Uocm93KSB7CiAgICAgICAgICAgIHZhciB1cmw7CiAgICAgICAgICAgIGlmIChyb3cuVEFTS0lEKSB7CiAgICAgICAgICAgICAgLy/lrqHmibnku7vliqEKICAgICAgICAgICAgICB1cmwgPSAnL3Rhc2svJyArIHJvdy5UQVNLSUQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy/mn6XnnIvmtYHnqIvlrp7kvosKICAgICAgICAgICAgICB1cmwgPSAnL2luc3QvJyArIHJvdy5JTlNUSUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2godXJsKTsKICAgICAgICAgIH0sCiAgICAgICAgICBoYW5kbGVTaXplQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVTaXplQ2hhbmdlKHNpemUpIHsKICAgICAgICAgICAgLy/mr4/pobXkuIvmi4nmmL7npLrmlbDmja4KICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2Zvcm0vc2V0UXVlcnlTcWxWaWV3UGFnaW5hdGlvblNpemUnLCBzaXplKTsKICAgICAgICAgICAgdGhpcy5zZWFyY2goKTsKICAgICAgICAgIH0sCiAgICAgICAgICBoYW5kbGVDdXJyZW50Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDdXJyZW50Q2hhbmdlKGN1cnJlbnRQYWdlKSB7CiAgICAgICAgICAgIC8v54K55Ye756ys5Yeg6aG1CiAgICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdmb3JtL3NldFF1ZXJ5U3FsVmlld1BhZ2luYXRpb25QYWdlTnVtJywgY3VycmVudFBhZ2UpOwogICAgICAgICAgICB0aGlzLnNlYXJjaCgpOwogICAgICAgICAgfSwKICAgICAgICAgIC8v5Zue6L2m5p+l6K+iCiAgICAgICAgICBzZWFyY2hFbnRlckZ1bjogZnVuY3Rpb24gc2VhcmNoRW50ZXJGdW4oZSkgewogICAgICAgICAgICB2YXIga2V5Q29kZSA9IHdpbmRvdy5ldmVudCA/IGUua2V5Q29kZSA6IGUud2hpY2g7CiAgICAgICAgICAgIGlmIChrZXlDb2RlID09IDEzKSB7CiAgICAgICAgICAgICAgdGhpcy5zZWFyY2goJ2ZpbmQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHNlYXJjaDogZnVuY3Rpb24gc2VhcmNoKHN0cikgewogICAgICAgICAgICB2YXIgbG9hZGluZyA9IHRoaXMuJGxvYWRpbmcodGhpcy5vcHRpb25zKTsKICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHt9OwogICAgICAgICAgICBpZiAoc3RyID09ICdmaW5kJykgewogICAgICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdmb3JtL3NldFF1ZXJ5U3FsVmlld1BhZ2luYXRpb25QYWdlTnVtJywgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy/liKTmlq3kuLrlkIjlubbmn6Xor6Lov5jmmK/liIblvIDmn6Xor6IKICAgICAgICAgICAgaWYgKHRoaXMuZm9ybVR5cGUpIHsKICAgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLmdldFF1ZXJ5RmlsdGVyKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy/liKTmlq3mmK/lkKbphY3nva7kuoblkIjlubbmn6Xor6IKICAgICAgICAgICAgICBpZiAoJCgnLnNlYXJjaC1xdWVyeScpLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIHBhcmFtcyA9IHRoaXMuZ2V0Q29uZGl0aW9uUXVlcnkoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcGFyYW1zID0gdGhpcy5nZXRRdWVyeUZpbHRlcigpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJC5pc0VtcHR5T2JqZWN0KHRoaXMuc2VhcmNoRm9ybSkpIHsKICAgICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZm9ybS9nZXRRdWVyeVNxbFZpZXdCeVBhZ2luYXRpb24nLCBwYXJhbXMpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgbG9hZGluZy5jbG9zZSgpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdmb3JtL2dldFF1ZXJ5U3FsVmlld0J5UGFnaW5hdGlvbicsIHBhcmFtcykudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBnZXRRdWVyeUZpbHRlcjogZnVuY3Rpb24gZ2V0UXVlcnlGaWx0ZXIoKSB7CiAgICAgICAgICAgIHZhciBvcGVyYXRpb25NYXAgPSB0aGlzLmdldFNlYXJjaEl0ZW1zKCk7IC8v5p+l6K+i5p2h5Lu257G75Z6LCiAgICAgICAgICAgIHZhciBmaWVsZFF1ZXJ5TWFwID0gdGhpcy5nZXRGaWVsZFF1ZXJ5KCk7IC8v5p+l6K+i5p2h5Lu25a2X5q61CiAgICAgICAgICAgIHZhciBzcGVjaWFsTWFwID0gdGhpcy5nZXRTcGVjaWFsTWFwKCk7IC8v6I635Y+W54m55q6K5p+l6K+i5oOF5Ya177yI6Ieq5a6a5LmJ5a+56K+d5qGG77yJCiAgICAgICAgICAgIHZhciBxdWVyeXMgPSBbXTsgLy/mn6Xor6LmnaHku7YKICAgICAgICAgICAgdmFyIHF1ZXJ5RmlsdGVyID0ge307CiAgICAgICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICAgICBwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9uCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7CiAgICAgICAgICAgICAgc3FsQWxpYXM6IHRoaXMuc3FsQWxpYXMsCiAgICAgICAgICAgICAgYWxpYXM6IHRoaXMuYWxpYXMKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcGFyYW1zLnBhZ2luYXRpb24gPSBwYWdlQmVhbjsKICAgICAgICAgICAgaWYgKCQuaXNFbXB0eU9iamVjdCh0aGlzLnNlYXJjaEZvcm0pKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtczsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5zZWFyY2hGb3JtKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VhcmNoRm9ybVtrZXldICE9ICd1bmRlZmluZWQnICYmIHRoaXMuc2VhcmNoRm9ybVtrZXldICE9ICcnKSB7CiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaEZvcm1ba2V5XSBpbnN0YW5jZW9mIEFycmF5KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvbk1hcFtrZXldID09PSAnQkVUV0VFTicpIHsKICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZUFycmF5ID0gW107CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2VhcmNoRm9ybVtrZXldLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQXJyYXkucHVzaCh0aGlzLnNlYXJjaEZvcm1ba2V5XVtpXSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZUFycmF5LmpvaW4oJywnKSwKICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25NYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb246ICdBTkQnCiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRoaXMuc2VhcmNoRm9ybVtrZXldLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWFyY2hGb3JtW2tleV1bX2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiAnbWFpbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25NYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvbjogJ0FORCcKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoRm9ybVtrZXldLmluY2x1ZGVzKCcsJykgJiYgIXNwZWNpYWxNYXBba2V5XSkgewogICAgICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnNlYXJjaEZvcm1ba2V5XS5zcGxpdCgnLCcpOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGFyci5sZW5ndGg7IF9pMisrKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyW19pMl0gPT0gJycgfHwgYXJyW19pMl0gPT0gbnVsbCB8fCB0eXBlb2YgYXJyW19pMl0gPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShfaTIsIDEpOwogICAgICAgICAgICAgICAgICAgICAgICBfaTIgPSBfaTIgLSAxOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiAodikgewogICAgICAgICAgICAgICAgICAgICAgcXVlcnlzLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eToga2V5LAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25NYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb246ICdBTkQnCiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eToga2V5LAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VhcmNoRm9ybVtrZXldLAogICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogb3BlcmF0aW9uTWFwW2tleV0sCiAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvbjogJ0FORCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBxdWVyeUZpbHRlciA9IHsKICAgICAgICAgICAgICAgIHBhZ2VCZWFuOiB0aGlzLnBhZ2luYXRpb24sCiAgICAgICAgICAgICAgICBxdWVyeXM6IHF1ZXJ5cwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgcGFyYW1zLnBhZ2luYXRpb24gPSBxdWVyeUZpbHRlcjsKICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgLy/ojrflj5bmn6Xor6LmnaHku7bnsbvlnosKICAgICAgICAgIGdldFNlYXJjaEl0ZW1zOiBmdW5jdGlvbiBnZXRTZWFyY2hJdGVtcygpIHsKICAgICAgICAgICAgdmFyIHNlYXJjaEl0ZW1zID0gJCgnLnNlYXJjaC1pdGVtJyk7CiAgICAgICAgICAgIHZhciBvcGVyYXRpb25NYXAgPSB7fTsgLy/mn6Xor6LmnaHku7bnsbvlnosKICAgICAgICAgICAgdmFyIG9wZXJhdGlvblR5cGUgPSB7CiAgICAgICAgICAgICAgTEs6ICdMSUtFJywKICAgICAgICAgICAgICBFUTogJ0VRVUFMJywKICAgICAgICAgICAgICBiZXR3ZWVuOiAnQkVUV0VFTicsCiAgICAgICAgICAgICAgTEZLOiAnTEVGVF9MSUtFJywKICAgICAgICAgICAgICBSSEs6ICdSSUdIVF9MSUtFJywKICAgICAgICAgICAgICBORTogJ05PVF9FUVVBTCcsCiAgICAgICAgICAgICAgTFQ6ICdMRVNTJywKICAgICAgICAgICAgICBMRTogJ0xFU1NfRVFVQUwnLAogICAgICAgICAgICAgIEdUOiAnR1JFQVQnLAogICAgICAgICAgICAgIEdFOiAnR1JFQVRfRVFVQUwnCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChzZWFyY2hJdGVtcykgewogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VhcmNoSXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBvcGVyYXRpb24gPSAnPSc7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mICQoc2VhcmNoSXRlbXNbaV0pLmF0dHIoJ2h0LXF1ZXJ5JykgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgLy/mn6Xor6LmnaHku7bnsbvlnosKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gJChzZWFyY2hJdGVtc1tpXSkuYXR0cignb3BlcmF0aW9uJyk7CiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk1hcFskKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCdodC1xdWVyeScpXSA9IHR5cGVvZiBvcGVyYXRpb25UeXBlW29wZXJhdGlvbl0gIT0gJ3VuZGVmaW5lZCcgPyBvcGVyYXRpb25UeXBlW29wZXJhdGlvbl0gOiBvcGVyYXRpb247CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAkKHNlYXJjaEl0ZW1zW2ldKS5jaGlsZHJlbigpLmF0dHIoJ2h0LXF1ZXJ5JykgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgLy/mn6Xor6LmnaHku7bnsbvlnosKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gJChzZWFyY2hJdGVtc1tpXSkuY2hpbGRyZW4oKS5hdHRyKCdvcGVyYXRpb24nKTsKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTWFwWyQoc2VhcmNoSXRlbXNbaV0pLmNoaWxkcmVuKCkuYXR0cignaHQtcXVlcnknKV0gPSB0eXBlb2Ygb3BlcmF0aW9uVHlwZVtvcGVyYXRpb25dICE9ICd1bmRlZmluZWQnID8gb3BlcmF0aW9uVHlwZVtvcGVyYXRpb25dIDogb3BlcmF0aW9uOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uTWFwOwogICAgICAgICAgfSwKICAgICAgICAgIC8v6I635Y+W5p+l6K+i5p2h5Lu25a2X5q61CiAgICAgICAgICBnZXRGaWVsZFF1ZXJ5OiBmdW5jdGlvbiBnZXRGaWVsZFF1ZXJ5KCkgewogICAgICAgICAgICB2YXIgc2VhcmNoSXRlbXMgPSAkKCcuc2VhcmNoLWl0ZW0nKTsKICAgICAgICAgICAgdmFyIGZpZWxkUXVlcnlNYXAgPSB7fTsgLy/mn6Xor6LmnaHku7blrZfmrrUKCiAgICAgICAgICAgIGlmIChzZWFyY2hJdGVtcykgewogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VhcmNoSXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuYXR0cignaHQtcXVlcnknKSAhPSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAvL+afpeivouadoeS7tuWtl+autQogICAgICAgICAgICAgICAgICBmaWVsZFF1ZXJ5TWFwWyQoc2VhcmNoSXRlbXNbaV0pLmF0dHIoJ2h0LXF1ZXJ5JyldID0gJChzZWFyY2hJdGVtc1tpXSkuYXR0cignZmllbGQtcXVlcnknKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mICQoc2VhcmNoSXRlbXNbaV0pLmNoaWxkcmVuKCkuYXR0cignaHQtcXVlcnknKSAhPSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAvL+afpeivouadoeS7tuWtl+autQogICAgICAgICAgICAgICAgICBmaWVsZFF1ZXJ5TWFwWyQoc2VhcmNoSXRlbXNbaV0pLmNoaWxkcmVuKCkuYXR0cignaHQtcXVlcnknKV0gPSAkKHNlYXJjaEl0ZW1zW2ldKS5jaGlsZHJlbigpLmF0dHIoJ2ZpZWxkLXF1ZXJ5Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmaWVsZFF1ZXJ5TWFwOwogICAgICAgICAgfSwKICAgICAgICAgIC8v6I635Y+W54m55q6K5p+l6K+i5oOF5Ya177yI6Ieq5a6a5LmJ5a+56K+d5qGG77yJCiAgICAgICAgICBnZXRTcGVjaWFsTWFwOiBmdW5jdGlvbiBnZXRTcGVjaWFsTWFwKCkgewogICAgICAgICAgICB2YXIgc2VhcmNoSXRlbXMgPSAkKCcuc2VhcmNoLWl0ZW0nKTsKICAgICAgICAgICAgdmFyIGZpZWxkUXVlcnlNYXAgPSB7fTsgLy/mn6Xor6LmnaHku7blrZfmrrUKCiAgICAgICAgICAgIGlmIChzZWFyY2hJdGVtcykgewogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VhcmNoSXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuYXR0cignaHQtcXVlcnknKSAhPSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAvL+afpeivouadoeS7tuWtl+autQogICAgICAgICAgICAgICAgICBmaWVsZFF1ZXJ5TWFwWyQoc2VhcmNoSXRlbXNbaV0pLmF0dHIoJ2h0LXF1ZXJ5JyldID0gdHlwZW9mICQoc2VhcmNoSXRlbXNbaV0pLmF0dHIoJ3NwZWNpYWwtcXVlcnknKSAhPSAndW5kZWZpbmVkJyA/IHRydWUgOiBmYWxzZTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mICQoc2VhcmNoSXRlbXNbaV0pLmNoaWxkcmVuKCkuYXR0cignaHQtcXVlcnknKSAhPSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAvL+afpeivouadoeS7tuWtl+autQogICAgICAgICAgICAgICAgICBmaWVsZFF1ZXJ5TWFwWyQoc2VhcmNoSXRlbXNbaV0pLmNoaWxkcmVuKCkuYXR0cignaHQtcXVlcnknKV0gPSB0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuY2hpbGRyZW4oKS5hdHRyKCdzcGVjaWFsLXF1ZXJ5JykgIT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmaWVsZFF1ZXJ5TWFwOwogICAgICAgICAgfSwKICAgICAgICAgIGdldENvbmRpdGlvblF1ZXJ5OiBmdW5jdGlvbiBnZXRDb25kaXRpb25RdWVyeSgpIHsKICAgICAgICAgICAgdmFyIHNlYXJjaEFsbCA9ICQoJy5zZWFyY2gtcXVlcnknKTsKICAgICAgICAgICAgdmFyIHZhbHVlcyA9ICcnOwogICAgICAgICAgICB2YXIgcXVlcnlzID0gW107IC8v5p+l6K+i5p2h5Lu2CiAgICAgICAgICAgIHZhciBxdWVyeUZpbHRlciA9IHt9OwogICAgICAgICAgICB2YXIgcGFnZUJlYW4gPSB7CiAgICAgICAgICAgICAgcGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbgogICAgICAgICAgICB9OwogICAgICAgICAgICB2YXIgcGFyYW1zID0gewogICAgICAgICAgICAgIHNxbEFsaWFzOiB0aGlzLnNxbEFsaWFzLAogICAgICAgICAgICAgIGFsaWFzOiB0aGlzLmFsaWFzCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHBhcmFtcy5wYWdpbmF0aW9uID0gcGFnZUJlYW47CiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5Rm9ybS5xdWVyeURhdGEgPT0gJycpIHsKICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgJCgkKHNlYXJjaEFsbFswXSkuY2hpbGRyZW4oKVswXSkuYXR0cignaHQtcXVpY2stc2VhcmNoJykgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgIHZhbHVlcyA9ICQoJChzZWFyY2hBbGxbMF0pLmNoaWxkcmVuKClbMF0pLmF0dHIoJ2h0LXF1aWNrLXNlYXJjaCcpOwogICAgICAgICAgICAgICAgdmFyIGFyciA9IHZhbHVlcy5zcGxpdCgnLCcpOwogICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGFyciksCiAgICAgICAgICAgICAgICAgIF9zdGVwOwogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBfc3RlcC52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5xdWVyeUZvcm0ucXVlcnlEYXRhLAogICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0xJS0UnLAogICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb246ICdPUicKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICAgIF9pdGVyYXRvci5lKGVycik7CiAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICBfaXRlcmF0b3IuZigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBxdWVyeUZpbHRlciA9IHsKICAgICAgICAgICAgICBwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9uLAogICAgICAgICAgICAgIHF1ZXJ5czogcXVlcnlzCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHBhcmFtcy5wYWdpbmF0aW9uID0gcXVlcnlGaWx0ZXI7CiAgICAgICAgICAgIHJldHVybiBwYXJhbXM7CiAgICAgICAgICB9LAogICAgICAgICAgLy/miZPlvIDpq5jnuqfmo4DntKIKICAgICAgICAgIGFkdmFuY2VkOiBmdW5jdGlvbiBhZHZhbmNlZCgpIHsKICAgICAgICAgICAgdGhpcy5mb3JtVHlwZSA9ICF0aGlzLmZvcm1UeXBlOwogICAgICAgICAgICBpZiAodGhpcy5mb3JtVHlwZSkgewogICAgICAgICAgICAgIHRoaXMuaW5jb25zID0gJ2VsLWljb24tYXJyb3ctdXAnOwogICAgICAgICAgICAgIHRoaXMucXVlcnlGb3JtLnF1ZXJ5RGF0YSA9ICcnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuaW5jb25zID0gJ2VsLWljb24tYXJyb3ctZG93bic7CiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtID0ge307CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7CiAgICAgICAgICAgIHRoaXMucXVlcnlGb3JtLnF1ZXJ5RGF0YSA9ICcnOwogICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0gPSB7fTsKICAgICAgICAgICAgdGhpcy5zZWFyY2goJ2ZpbmQnKTsKICAgICAgICAgIH0sCiAgICAgICAgICBoYW5kbGVTZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVNlbGVjdGlvbkNoYW5nZSh2YWwpIHsKICAgICAgICAgICAgdGhpcy50YWJsZURhdGEuc2VsZWN0Um93cyA9IHZhbDsKICAgICAgICAgIH0sCiAgICAgICAgICBzZWxlY3RhYmxlOiBmdW5jdGlvbiBzZWxlY3RhYmxlKHJvdywgaW5kZXgpIHsKICAgICAgICAgICAgaWYgKHJvdy5CQVRDSF9DT1ZFUl9GTEFHICE9ICdZRVMnICYmIHJvdy5OT0RFSUQgPT0gJ1VzZXJUYXNrMTcxJykgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0sCiAgICAgICAgICAvL+eCueWHu+WvvOWHuuaMiemSrgogICAgICAgICAgZXhwb3J0czogZnVuY3Rpb24gZXhwb3J0cygpIHsKICAgICAgICAgICAgdGhpcy5kaWFsb2dFeHBvcnRWaXNpYmxlID0gdHJ1ZTsKICAgICAgICAgIH0sCiAgICAgICAgICBwdW5jaE9yZGVyOiBmdW5jdGlvbiBwdW5jaE9yZGVyKCkgewogICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnc3RvcmVQcm9jZXNzL2Rvd25Mb2FkVG9GaWxlJywgJ0JhdGNoa2VpanlvJykudGhlbihmdW5jdGlvbiAocmVzKSB7fSk7CiAgICAgICAgICB9LAogICAgICAgICAgaGFuZGxlUmVtb3ZlOiBmdW5jdGlvbiBoYW5kbGVSZW1vdmUoZmlsZSwgZmlsZUxpc3QpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZSwgZmlsZUxpc3QpOwogICAgICAgICAgfSwKICAgICAgICAgIGJlZm9yZUF2YXRhclVwbG9hZDogZnVuY3Rpb24gYmVmb3JlQXZhdGFyVXBsb2FkKGZpbGUpIHsKICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZS5uYW1lLnNwbGl0KCcuJyk7CiAgICAgICAgICAgIHZhciBleHRlbnNpb24gPSBmaWxlTmFtZVtmaWxlTmFtZS5sZW5ndGggLSAxXSA9PT0gJ3BkZic7CiAgICAgICAgICAgIGlmICghZXh0ZW5zaW9uKSB7CiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5LiK5Lyg5qih5p2/5Y+q6IO95pivUERG5qC85byPIScsCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMudGFibGVEYXRhLnNlbGVjdFJvd3MubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICfor7fpgInmi6nopoHkuIrkvKDpgIHku5jnirbnmoTmoYjku7YnCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfSwKICAgICAgICAgIG9uU3VjY2Vzc1VwbG9hZDogZnVuY3Rpb24gb25TdWNjZXNzVXBsb2FkKHJlc3BvbnNlLCBmaWxlLCBmaWxlTGlzKSB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn6YCB5LuY54q25oiQ5YqfJyk7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBoYW5kbGVQcmV2aWV3OiBmdW5jdGlvbiBoYW5kbGVQcmV2aWV3KGZpbGUpIHt9LAogICAgICAgICAgLy/noa7lrprlr7zlh7oKICAgICAgICAgIHN1Ym1pdEV4cG9ydDogZnVuY3Rpb24gc3VibWl0RXhwb3J0KCkgewogICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgICAgICBpZiAoIXRoaXMuZXhwb3J0RGF0YSB8fCB0aGlzLmV4cG9ydERhdGEuZXhwRmllbGQubGVuZ3RoIDwgMSkgewogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLAogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+ivt+mAieaLqeimgeWvvOWHuueahOWtl+aute+8gScKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGV4cEZpZWxkID0gJyc7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5leHBvcnREYXRhLmV4cEZpZWxkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICBleHBGaWVsZCArPSAnLCc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGV4cEZpZWxkICs9IHRoaXMuZXhwb3J0RGF0YS5leHBGaWVsZFtpXS5maWVsZE5hbWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXhwRmllbGQgPSBCYXNlNjQuZW5jb2RlKGV4cEZpZWxkKS5yZXBsYWNlKC9cKy9nLCAnJTJCJyk7CiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7CiAgICAgICAgICAgICAgc3FsQWxpYXM6IHRoaXMuc3FsQWxpYXMsCiAgICAgICAgICAgICAgYWxpYXM6IHRoaXMuYWxpYXMKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgICAgICAgc3FsQWxpYXM6IHRoaXMuc3FsQWxpYXMsCiAgICAgICAgICAgICAgYWxpYXM6IHRoaXMuYWxpYXMsCiAgICAgICAgICAgICAgZ2V0VHlwZTogdGhpcy5leHBvcnREYXRhLmdldFR5cGUsCiAgICAgICAgICAgICAgZXhwRmllbGQ6IGV4cEZpZWxkCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGRhdGEucXVlcnkgPSB0aGlzLmdldFF1ZXJ5RmlsdGVyKCkucGFnaW5hdGlvbjsKICAgICAgICAgICAgdmFyIGxvYWRpbmdJbnN0YW5jZSA9IExvYWRpbmcuc2VydmljZSh7CiAgICAgICAgICAgICAgZnVsbHNjcmVlbjogdHJ1ZQogICAgICAgICAgICB9KTsgLy/lvIDlp4sKICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2Zvcm0vcXVlcnlTcWxWaWV3RXhwb3J0JywgZGF0YSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgbG9hZGluZ0luc3RhbmNlLmNsb3NlKCk7IC8vIOe7k+adnwogICAgICAgICAgICAgIF90aGlzLmRpYWxvZ0V4cG9ydFZpc2libGUgPSBmYWxzZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgLy/lj5bmtojlr7zlh7oKICAgICAgICAgIGV4cG9ydENhbmNlbDogZnVuY3Rpb24gZXhwb3J0Q2FuY2VsKCkgewogICAgICAgICAgICB0aGlzLmRpYWxvZ0V4cG9ydFZpc2libGUgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5leHBvcnREYXRhLmV4cEZpZWxkID0gW107CiAgICAgICAgICB9LAogICAgICAgICAgaGFuZGxlRXhwb3J0U2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVFeHBvcnRTZWxlY3Rpb25DaGFuZ2UodmFsKSB7CiAgICAgICAgICAgIHRoaXMuZXhwb3J0RGF0YS5leHBGaWVsZCA9IFtdOwogICAgICAgICAgICBpZiAodmFsKSB7CiAgICAgICAgICAgICAgdGhpcy5leHBvcnREYXRhLmV4cEZpZWxkID0gdmFsOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgLy/lhajpgIkKICAgICAgICAgIGhhbmRsZUV4cG9ydFNlbGVjdEFsbDogZnVuY3Rpb24gaGFuZGxlRXhwb3J0U2VsZWN0QWxsKCkgewogICAgICAgICAgICB0aGlzLmV4cG9ydERhdGEuZXhwRmllbGQgPSB0aGlzLmRpc3BsYXlGaWVsZHM7CiAgICAgICAgICB9LAogICAgICAgICAgLy/mjpLluo8KICAgICAgICAgIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoaW5kZXgsIHR5cGUpIHsKICAgICAgICAgICAgaWYgKCd1cCcgPT0gdHlwZSkgewogICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgewogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflt7Lnu4/mmK/liJfooajkuK3nrKzkuIDkvY0nLAogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHRoaXMuZGlzcGxheUZpZWxkc1tpbmRleCAtIDFdOwogICAgICAgICAgICAgICAgVnVlLnNldCh0aGlzLmRpc3BsYXlGaWVsZHMsIGluZGV4IC0gMSwgdGhpcy5kaXNwbGF5RmllbGRzW2luZGV4XSk7CiAgICAgICAgICAgICAgICBWdWUuc2V0KHRoaXMuZGlzcGxheUZpZWxkcywgaW5kZXgsIHRlbXApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuZGlzcGxheUZpZWxkcy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+W3sue7j+aYr+WIl+ihqOS4reacgOWQjuS4gOS9jScsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuaXNUcmFuc2l0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHZhciBpID0gdGhpcy5kaXNwbGF5RmllbGRzW2luZGV4ICsgMV07CiAgICAgICAgICAgICAgICBWdWUuc2V0KHRoaXMuZGlzcGxheUZpZWxkcywgaW5kZXggKyAxLCB0aGlzLmRpc3BsYXlGaWVsZHNbaW5kZXhdKTsKICAgICAgICAgICAgICAgIFZ1ZS5zZXQodGhpcy5kaXNwbGF5RmllbGRzLCBpbmRleCwgaSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0U3ViRW50c0J5Rm9ybUtleTogZnVuY3Rpb24gZ2V0U3ViRW50c0J5Rm9ybUtleShyZWZJZCkgewogICAgICAgICAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgICAgICAgICAgdmFyIF9tZSA9IHRoaXM7CiAgICAgICAgICAgIF9tZS50YWJzID0gW107CiAgICAgICAgICAgIGlmICghX21lLmVudHMgfHwgX21lLmVudHMubGVuZ3RoIDwgMSkgewogICAgICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdmb3JtL2dldFN1YkVudHNCeUZvcm1LZXknLCB0aGlzLnRlbXBsYXRlSW5mby5hbGlhcykudGhlbihmdW5jdGlvbiAoZW50cykgewogICAgICAgICAgICAgICAgX21lLmVudHMgPSBlbnRzOwogICAgICAgICAgICAgICAgX3RoaXMyLmdldFN1YkRhdGEoX21lLCByZWZJZCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5nZXRTdWJEYXRhKF9tZSwgcmVmSWQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0U3VtbWFyaWVzOiBmdW5jdGlvbiBnZXRTdW1tYXJpZXMocGFyYW0pIHsKICAgICAgICAgICAgdmFyIF9zdW1tYXJ5VHlwZU1hcCA9IHRoaXMuc3VtbWFyeVR5cGVNYXA7CiAgICAgICAgICAgIHZhciBjb2x1bW5zID0gcGFyYW0uY29sdW1ucywKICAgICAgICAgICAgICBkYXRhID0gcGFyYW0uZGF0YTsKICAgICAgICAgICAgdmFyIHN1bXMgPSBbXTsKICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGluZGV4KSB7CiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7CiAgICAgICAgICAgICAgICBzdW1zW2luZGV4XSA9ICflkIjorqEnOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX3N1bW1hcnlUeXBlTWFwW2NvbHVtbi5wcm9wZXJ0eV0gJiYgX3N1bW1hcnlUeXBlTWFwW2NvbHVtbi5wcm9wZXJ0eV0gPT0gJ3N1bScpIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBkYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKGl0ZW1bY29sdW1uLnByb3BlcnR5XSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGlmICghdmFsdWVzLmV2ZXJ5KGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpOwogICAgICAgICAgICAgICAgfSkpIHsKICAgICAgICAgICAgICAgICAgc3Vtc1tpbmRleF0gPSB2YWx1ZXMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXJyKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gTnVtYmVyKGN1cnIpOwogICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldiArIGN1cnI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBzdW1zW2luZGV4XSA9ICdOL0EnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBzdW1zOwogICAgICAgICAgfSwKICAgICAgICAgIGNvbHVtbkZvcm1hdHRlcjogZnVuY3Rpb24gY29sdW1uRm9ybWF0dGVyKHJvdywgY29sdW1uLCBjZWxsVmFsdWUpIHsKICAgICAgICAgICAgdmFyIGZvcm1hdHRlciA9IHRoaXMuZm9ybWF0dGVyTWFwW2NvbHVtbi5wcm9wZXJ0eV07CiAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgdmFyIHNjcmlwdCA9ICd2YXIgZm9ybWF0dGVyRnVuY3Rpb24gPSBmdW5jdGlvbihyb3csY29sdW1uLGNlbGxWYWx1ZSl7ICcgKyBmb3JtYXR0ZXIgKyAnfTsnOwogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGV2YWwoc2NyaXB0ICsgJ2Zvcm1hdHRlckZ1bmN0aW9uKHJvdyxjb2x1bW4sY2VsbFZhbHVlKTsnKTsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNlbGxWYWx1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIGNlbGxWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGRhdGVGb3JtYXR0ZXI6IGZ1bmN0aW9uIGRhdGVGb3JtYXR0ZXIocm93LCBjb2x1bW4sIGNlbGxWYWx1ZSkgewogICAgICAgICAgICBpZiAoY2VsbFZhbHVlKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGNlbGxWYWx1ZS5yZXBsYWNlKCcuMCcsICcnKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gY2VsbFZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0QWxhcm1Db2xvcjogZnVuY3Rpb24gZ2V0QWxhcm1Db2xvcihmaWVsZCwgY2VsbFZhbHVlKSB7CiAgICAgICAgICAgIHZhciBhbGFybVNldHRpbmcgPSB0aGlzLmFsYXJtU2V0dGluZ01hcFtmaWVsZF07CiAgICAgICAgICAgIHZhciB0eXBlID0gJyc7CiAgICAgICAgICAgIHRoaXMuZGlzcGxheUZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgaWYgKGl0ZW0uZmllbGROYW1lID09PSBmaWVsZCkgewogICAgICAgICAgICAgICAgdHlwZSA9IGl0ZW0uZGF0YVR5cGU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKGFsYXJtU2V0dGluZykgewogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB2YXIgYWxhcm1TZXR0aW5nSnNvbiA9IHV0aWxzLnBhcnNlVG9Kc29uKGFsYXJtU2V0dGluZyk7CiAgICAgICAgICAgICAgICB2YXIgYWxhcm1TY3JpcHQgPSAnJzsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxhcm1TZXR0aW5nSnNvbi5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICB2YXIgYWxhcm0gPSBhbGFybVNldHRpbmdKc29uW2ldOwogICAgICAgICAgICAgICAgICB2YXIgY29uZGl0aW9uID0gYWxhcm0uY29uZGl0aW9uOwogICAgICAgICAgICAgICAgICB2YXIgY29uZGl0aW9uU3RyID0gJyc7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgY29uZGl0aW9uLmxlbmd0aDsgbSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG0gPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TdHIgKz0gJyAmJiAnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ2JpZ2ludCcgfHwgdHlwZSA9PT0gJ2ludCcpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb25bbV0ub3AgPT0gJ2luZGV4T2YnICYmIGNvbmRpdGlvblttXS52YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyICsgJ1wnJyArIGNlbGxWYWx1ZSArICdcJy5pbmRleE9mKFwnJyArIGNvbmRpdGlvblttXS52YWwgKyAnXCcpIT0tMSc7CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvblttXS5vcCA9PSAnbm90SW5kZXhPZicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyICsgJ1wnJyArIGNlbGxWYWx1ZSArICdcJy5pbmRleE9mKFwnJyArIGNvbmRpdGlvblttXS52YWwgKyAnXCcpPT0tMSc7CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TdHIgPSBjb25kaXRpb25TdHIgKyBjZWxsVmFsdWUgKyBjb25kaXRpb25bbV0ub3AgKyBjb25kaXRpb25bbV0udmFsOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uW21dLm9wID09ICdpbmRleE9mJyAmJiBjb25kaXRpb25bbV0udmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciA9IGNvbmRpdGlvblN0ciArICdcJycgKyBjZWxsVmFsdWUgKyAnXCcuaW5kZXhPZihcJycgKyBjb25kaXRpb25bbV0udmFsICsgJ1wnKSE9LTEnOwogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25kaXRpb25bbV0ub3AgPT0gJ25vdEluZGV4T2YnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciA9IGNvbmRpdGlvblN0ciArICdcJycgKyBjZWxsVmFsdWUgKyAnXCcuaW5kZXhPZihcJycgKyBjb25kaXRpb25bbV0udmFsICsgJ1wnKT09LTEnOwogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyICsgJ1wnJyArIGNlbGxWYWx1ZSArICdcJycgKyBjb25kaXRpb25bbV0ub3AgKyAnXCcnICsgY29uZGl0aW9uW21dLnZhbCArICdcJyc7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyK2NlbGxWYWx1ZStjb25kaXRpb25bbV0ub3ArY29uZGl0aW9uW21dLnZhbDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKICAgICAgICAgICAgICAgICAgICBhbGFybVNjcmlwdCArPSAnIGVsc2UgJzsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB2YXIgY29sb3JTdHIgPSAnY29sb3I6JyArIGFsYXJtLmNvbG9yICsgJyc7CiAgICAgICAgICAgICAgICAgIGFsYXJtU2NyaXB0ID0gYWxhcm1TY3JpcHQgKyAnaWYoJyArIGNvbmRpdGlvblN0ciArICcpe3JldHVybiBcJycgKyBjb2xvclN0ciArICdcJzt9JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChhbGFybVNjcmlwdCkgewogICAgICAgICAgICAgICAgICBhbGFybVNjcmlwdCArPSAnZWxzZXsgcmV0dXJuICIiO30nOwogICAgICAgICAgICAgICAgICB2YXIgc2NyaXB0ID0gJ3ZhciBhbGFybUZ1bmN0aW9uID0gZnVuY3Rpb24oKXsgJyArIGFsYXJtU2NyaXB0ICsgJ307JzsKICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGV2YWwoc2NyaXB0ICsgJ2FsYXJtRnVuY3Rpb24oKTsnKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgc3VtbWFyeTogZnVuY3Rpb24gc3VtbWFyeShtZXRob2QsIGZpZWxkLCBkZWNpbWFsKSB7CiAgICAgICAgICAgIHZhciBsaXN0ID0gdGhpcy5yb3dzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIGl0ZW1bZmllbGRdICE9PSAnJzsKICAgICAgICAgICAgfSkubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXIoaXRlbVtmaWVsZF0pOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2NvdW50JykgewogICAgICAgICAgICAgIHJldHVybiBsaXN0Lmxlbmd0aDsKICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdzdW0nKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYSArIGI7CiAgICAgICAgICAgICAgfSkudG9GaXhlZChkZWNpbWFsKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdtaW4nKSB7CiAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsIF90b0NvbnN1bWFibGVBcnJheShsaXN0KSkudG9GaXhlZChkZWNpbWFsKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdtYXgnKSB7CiAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KE1hdGgsIF90b0NvbnN1bWFibGVBcnJheShsaXN0KSkudG9GaXhlZChkZWNpbWFsKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdhdmcnKSB7CiAgICAgICAgICAgICAgcmV0dXJuIChsaXN0LnJlZHVjZShmdW5jdGlvbiAoYSwgYikgewogICAgICAgICAgICAgICAgcmV0dXJuIGEgKyBiOwogICAgICAgICAgICAgIH0pIC8gbGlzdC5sZW5ndGgpLnRvRml4ZWQoZGVjaW1hbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBzaG93U2VhcmNoUGFuZTogZnVuY3Rpb24gc2hvd1NlYXJjaFBhbmUoKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQp9Ow=="},null]}