| 1 |
- {"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js!D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\front\\item\\zyAdmin\\src\\pages\\system\\maintain\\systemFile\\opendir.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\system\\maintain\\systemFile\\opendir.vue","mtime":1761614939077},{"path":"D:\\front\\item\\zyAdmin\\babel.config.js","mtime":1761614925168},{"path":"D:\\front\\item\\zyAdmin\\.babelrc","mtime":1761614925165},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js","mtime":1761614927320},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1761614937402}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICJEOi9mcm9udC9pdGVtL3p5QWRtaW4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIjsKaW1wb3J0IF9yZWdlbmVyYXRvciBmcm9tICJEOi9mcm9udC9pdGVtL3p5QWRtaW4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3JlZ2VuZXJhdG9yLmpzIjsKaW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gIkQ6L2Zyb250L2l0ZW0venlBZG1pbi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQtaW5kZXguanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKaW1wb3J0IHsgcmVzb2x2ZUNvbXBvbmVudCB9IGZyb20gJ3Z1ZSc7CmltcG9ydCB7IG9wZW5kaXJMaXN0QXBpLCBvcGVuZmlsZUFwaSwgc2F2ZWZpbGVBcGksIG9wZW5kaXJMb2dpbkFwaSwgY3JlYXRlRm9sZGVyLCBjcmVhdGVGaWxlLCBkZWxGb2xkZXIsIHJlbmFtZSwgZmlsZU1hcmssIG1hcmtTYXZlIH0gZnJvbSAnQC9hcGkvc3lzdGVtJzsKaW1wb3J0IENvZGVNaXJyb3IgZnJvbSAnY29kZW1pcnJvci9saWIvY29kZW1pcnJvcic7CmltcG9ydCBsb2dpbkZyb20gZnJvbSAnLi9jb21wb25lbnRzL2xvZ2luRnJvbSc7CmltcG9ydCB7IHNldENvb2tpZXMsIGdldENvb2tpZXMsIHJlbW92ZUNvb2tpZXMgfSBmcm9tICdAL2xpYnMvdXRpbCc7Ci8vIGltcG9ydCBGdWxsc2NyZWVuIGZyb20gJ0AvbGF5b3V0L2NvbXBvbmVudHMvZnVsbHNjcmVlbic7CmltcG9ydCAqIGFzIG1vbmFjbyBmcm9tICdtb25hY28tZWRpdG9yJzsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdvcGVuZGlyJywKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgbW9kYWxzOiBmYWxzZSwKICAgICAgLy/nvJbovpHlmajlvIDlhbMKICAgICAgZWRpdG9yOiAnJywKICAgICAgLy/lvZPliY3nvJbovpHlmajlr7nosaEKICAgICAgZWRpdG9ySW5kZXg6IFsKICAgICAgLy/pgInpobnljaHmlbDnu4QKICAgICAgewogICAgICAgIHRhYjogdHJ1ZSwKICAgICAgICBpbmRleDogJzAnLAogICAgICAgIHRpdGxlOiAnJywKICAgICAgICBpY29uOiAnJwogICAgICB9XSwKICAgICAgZWRpdG9yTGlzdDogW10sCiAgICAgIC8v57yW6L6R5Zmo5pWw57uECiAgICAgIGluZGV4RWRpdG9yOiAwLAogICAgICAvL+W9k+WJjee8lui+keWZqOe0ouW8lQogICAgICBjb2RlOiAnJywKICAgICAgLy/lvZPliY3mlofku7bmiZPlvIDml7bnmoTlhoXlrrkKICAgICAgbmF2TGlzdDogW10sCiAgICAgIC8v5bem5L6n5a+86Iiq5pWw5o2uCiAgICAgIG5hdkl0ZW06IHt9LAogICAgICAvL+W3puS+p+WvvOiIqueCueWHu+aYr+mAieS4reeahOaVsOaNrgogICAgICBjb250ZXh0RGF0YTogbnVsbCwKICAgICAgLy/lt6bkvqflr7zoiKrlj7PplK7ngrnlh7vmmK/kuqfnlJ/nmoTmlbDmja7lr7nosaEKCiAgICAgIGZpbGVUeXBlOiAnJywKICAgICAgLy8g5paH5Lu25pON5L2c57G75Z6LIGNyZWF0ZUZvbGRlcnzliJvlu7rmlofku7blpLkgY3JlYXRlRmlsZXzliJvlu7rmlofku7YgZGVsRm9sZGVyfOWIoOmZpOaWh+S7tuWkueaIluiAheaWh+S7tgogICAgICBjbGFzc05hbWU6ICcnLAogICAgICAvL+WFqOWxjyBjbGFzc+WQjQogICAgICAvLyBmdWxsc2NyZWVuOmZhbHNlLCAgLy8g5piv5ZCm5YWo5bGPCiAgICAgIGlzU2F2ZTogdHJ1ZSwKICAgICAgLy/lvZPliY3mlofku7bmmK/lkKbkv53lrZgKCiAgICAgIGlzU2hvd0xvZ246IGZhbHNlLAogICAgICAvLyDnmbvlvZUKICAgICAgaXNTaG93TGlzdDogZmFsc2UsCiAgICAgIC8vIOeZu+W9leS5i+WQjuWIl+ihqAoKICAgICAgc3BpblNob3c6IGZhbHNlLAogICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgdGFiTGlzdDogW10sCiAgICAgIGZvcm1JdGVtOiB7CiAgICAgICAgLy/orrDlvZXlvZPliY3ot6/lvoTkv6Hmga/vvIzojrflj5bmlofku7bliJfooajml7bkvb/nlKgKICAgICAgICBkaXI6ICcnLAogICAgICAgIHN1cGVyaW9yOiAwLAogICAgICAgIGZpbGVkaXI6ICcnLAogICAgICAgIGZpbGVUb2tlbjogZ2V0Q29va2llcygnZmlsZV90b2tlbicpCiAgICAgIH0sCiAgICAgIGRpcjogJycsCiAgICAgIC8v5b2T5YmN5a6M5pW05paH5Lu26Lev5b6ECiAgICAgIC8vIHJvd3M6IHt9LCAgLy8KICAgICAgcGF0aG5hbWU6ICcnLAogICAgICAvLyDlvZPliY3mlofku7bot6/lvoQKICAgICAgdGl0bGU6ICcnLAogICAgICAvL+W9k+WJjeaWh+S7tuagh+mimAoKICAgICAgZm9ybUZpbGU6IHsKICAgICAgICAvL+mHjeWRveWQjeihqOWNlQogICAgICAgIGZpbGVuYW1lOiAnJwogICAgICB9LAogICAgICBydWxlSW5saW5lOiB7CiAgICAgICAgZmlsZW5hbWU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfor7fovpPlhaXmlofku7bmiJbmlofku7blpLnnmoTlkI3lrZcnLAogICAgICAgICAgdHJpZ2dlcjogJ2JsdXInCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgZm9ybVNob3c6IGZhbHNlLAogICAgICAvL+ihqOWNleW8gOWFswogICAgICBmb3JtVGl0bGU6ICcnLAogICAgICAvL+ihqOWNleagh+mimAogICAgICBmaWxlVG9rZW46IGdldENvb2tpZXMoJ2ZpbGVfdG9rZW4nKSwKICAgICAgcm91dGVMaXN0OiBbXSwKICAgICAgLy8gIOaJk+W8gOaWh+S7tui3r+W+hAogICAgICBwcm9wczogewogICAgICAgIGxhYmVsOiAndGl0bGUnLAogICAgICAgIGNoaWxkcmVuOiAnY2hpbGRyZW4nLAogICAgICAgIGlzTGVhZjogJ2lzTGVhZicKICAgICAgfQogICAgfTsKICB9LAogIGNvbXBvbmVudHM6IHsKICAgIGxvZ2luRnJvbTogbG9naW5Gcm9tCiAgfSwKICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkgewogICAgLy8gdGhpcy5pbml0RWRpdG9yKCk7CiAgfSwKICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkgewogICAgdGhpcy5nZXRMaXN0KCk7CiAgfSwKICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkgewogICAgcmVtb3ZlQ29va2llcygnZmlsZV90b2tlbicpOwogIH0sCiAgY29tcHV0ZWQ6IHt9LAogIG1ldGhvZHM6IHsKICAgIC8vIOeCueWHu+ihjAogICAgY3VycmVudENoYW5nZTogZnVuY3Rpb24gY3VycmVudENoYW5nZShjdXJyZW50Um93KSB7CiAgICAgIGlmIChjdXJyZW50Um93LmlzRGlyKSB7CiAgICAgICAgdGhpcy5vcGVuKGN1cnJlbnRSb3cpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuZWRpdChjdXJyZW50Um93KTsKICAgICAgfQogICAgfSwKICAgIC8qKg0KICAgICAqIOaWh+S7tuWIl+ihqA0KICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZyZXNoICAgLy8g5piv5ZCm6YeN5paw5Yqg6L29IGJvb2wNCiAgICAgKiBAcGFyYW0ge09iamVjdH0gaXNfZWRpdCAgIC8vIOaYr+WQpuaYr+e8lui+keWZqOS4reeahOWIt+aWsCBib29sDQogICAgICovCiAgICBnZXRMaXN0OiBmdW5jdGlvbiBnZXRMaXN0KHJlZnJlc2gsIGlzX2VkaXQpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIHBhcmFtczsKICAgICAgaWYgKHJlZnJlc2gpIHsKICAgICAgICBwYXJhbXMgPSB7CiAgICAgICAgICBkaXI6ICcnLAogICAgICAgICAgc3VwZXJpb3I6IDAsCiAgICAgICAgICBmaWxlZGlyOiAnJywKICAgICAgICAgIGZpbGVUb2tlbjogdGhpcy5maWxlVG9rZW4KICAgICAgICB9OwogICAgICB9IGVsc2UgewogICAgICAgIHBhcmFtcyA9IHRoaXMuZm9ybUl0ZW07CiAgICAgICAgcGFyYW1zLmZpbGVUb2tlbiA9IHRoaXMuZmlsZVRva2VuOwogICAgICB9CiAgICAgIGlmICghaXNfZWRpdCkgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgb3BlbmRpckxpc3RBcGkocGFyYW1zKS50aGVuKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWYgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yKCkubShmdW5jdGlvbiBfY2FsbGVlKHJlcykgewogICAgICAgICAgdmFyIGRhdGE7CiAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQpIHsKICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQubikgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTsKICAgICAgICAgICAgICAgIF90aGlzLnJvdXRlTGlzdCA9IGRhdGEucm91dGVMaXN0OwogICAgICAgICAgICAgICAgaWYgKGlzX2VkaXQpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMubmF2TGlzdCA9IGRhdGEubmF2TGlzdDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIF90aGlzLm5hdkxpc3RGb3JUYWIgPSBkYXRhLm5hdkxpc3Q7CiAgICAgICAgICAgICAgICAgIF90aGlzLnRhYkxpc3QgPSBkYXRhLmxpc3Q7CiAgICAgICAgICAgICAgICAgIC8vIHRoaXMubmF2TGlzdCA9IGRhdGEubmF2TGlzdDsKICAgICAgICAgICAgICAgICAgX3RoaXMuaXNTaG93TGlzdCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfdGhpcy5kaXIgPSBkYXRhLmRpcjsKICAgICAgICAgICAgICAgIF90aGlzLmlzU2hvd0xvZ24gPSBmYWxzZTsKICAgICAgICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYSgyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbGxlZSk7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gpIHsKICAgICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXMuY2F0Y2hGdW4ocmVzKTsKICAgICAgfSk7CiAgICB9LAogICAgLy/mlrDlu7rmlofku7blkI7ph43mlrDliqDovb3lt6bkvqflr7zoiKoKICAgIGdldExpc3RJdGVtOiBmdW5jdGlvbiBnZXRMaXN0SXRlbShkYXRhKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICBvcGVuZGlyTGlzdEFwaShkYXRhKS50aGVuKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWYyID0gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvcigpLm0oZnVuY3Rpb24gX2NhbGxlZTIocmVzKSB7CiAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQyKSB7CiAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Mi5uKSB7CiAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgX3RoaXMyLiRzZXQoX3RoaXMyLmNvbnRleHREYXRhLCAnY2hpbGRyZW4nLCByZXMuZGF0YS5uYXZMaXN0KTsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmEoMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIF9jYWxsZWUyKTsKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDIpIHsKICAgICAgICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICAgIH0oKSkuY2F0Y2goZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzMi5jYXRjaEZ1bihyZXMpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDov5Tlm57kuIrnuqcKICAgIGdvQmFjazogZnVuY3Rpb24gZ29CYWNrKGlzX2VkaXQpIHsKICAgICAgdGhpcy5mb3JtSXRlbSA9IHsKICAgICAgICBkaXI6IHRoaXMuZGlyLAogICAgICAgIHN1cGVyaW9yOiAxLAogICAgICAgIGZpbGVkaXI6ICcnCiAgICAgIH07CiAgICAgIHRoaXMuZ2V0TGlzdChmYWxzZSwgaXNfZWRpdCk7CiAgICB9LAogICAgLy8g5omT5byACiAgICBvcGVuOiBmdW5jdGlvbiBvcGVuKHJvdykgewogICAgICAvLyB0aGlzLnJvd3MgPSByb3c7CiAgICAgIHRoaXMuZm9ybUl0ZW0gPSB7CiAgICAgICAgZGlyOiByb3cucGF0aCwKICAgICAgICBzdXBlcmlvcjogMCwKICAgICAgICBmaWxlZGlyOiByb3cuZmlsZW5hbWUsCiAgICAgICAgZmlsZVRva2VuOiB0aGlzLmZpbGVUb2tlbgogICAgICB9OwogICAgICB0aGlzLmdldExpc3QoZmFsc2UsIGZhbHNlKTsKICAgIH0sCiAgICBqdW1wUm91dGU6IGZ1bmN0aW9uIGp1bXBSb3V0ZShpdGVtKSB7CiAgICAgIHZhciBkYXRhID0gewogICAgICAgIHBhdGg6IGl0ZW0ucm91dGUsCiAgICAgICAgZmlsZW5hbWU6ICcnCiAgICAgIH07CiAgICAgIHRoaXMub3BlbihkYXRhKTsKICAgIH0sCiAgICByZWZyZXNoUm91dGU6IGZ1bmN0aW9uIHJlZnJlc2hSb3V0ZSgpIHsKICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgcGF0aDogdGhpcy5yb3V0ZUxpc3RbdGhpcy5yb3V0ZUxpc3QubGVuZ3RoIC0gMV0ucm91dGUsCiAgICAgICAgZmlsZW5hbWU6ICcnCiAgICAgIH07CiAgICAgIHRoaXMub3BlbihkYXRhKTsKICAgIH0sCiAgICAvLyDnvJbovpHDnwogICAgZWRpdDogZnVuY3Rpb24gZWRpdChyb3cpIHsKICAgICAgdGhpcy5uYXZJdGVtID0gcm93OwogICAgICB0aGlzLnNwaW5TaG93ID0gdHJ1ZTsKICAgICAgdGhpcy5wYXRobmFtZSA9IHJvdy5wYXRobmFtZTsKICAgICAgdGhpcy50aXRsZSA9IHJvdy5maWxlbmFtZTsKICAgICAgdGhpcy5lZGl0b3JJbmRleFswXS50aXRsZSA9IHJvdy5maWxlbmFtZTsKICAgICAgdGhpcy5lZGl0b3JJbmRleFswXS5wYXRobmFtZSA9IHJvdy5wYXRobmFtZTsKICAgICAgdGhpcy5uYXZMaXN0ID0gdGhpcy5uYXZMaXN0Rm9yVGFiOwogICAgICB0aGlzLmRpciA9IHJvdy5wYXRoOwogICAgICAvLyDliJvlu7rku6PnoIHlrrnlmagKICAgICAgaWYgKHRoaXMuZWRpdG9yTGlzdC5sZW5ndGggPD0gMCkgewogICAgICAgIC8vIHRoaXMuaW5pdEVkaXRvcigpOwogICAgICB9CiAgICAgIHRoaXMub3BlbmZpbGUocm93LnBhdGhuYW1lLCBmYWxzZSk7CiAgICB9LAogICAgLyoqDQogICAgICog5aSH5rOoDQogICAgICovCiAgICBtYXJrOiBmdW5jdGlvbiBtYXJrKHJvdykgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgdGhpcy4kbW9kYWxGb3JtKGZpbGVNYXJrKHsKICAgICAgICBwYXRoOiByb3cucGF0aG5hbWUsCiAgICAgICAgZmlsZVRva2VuOiB0aGlzLmZpbGVUb2tlbgogICAgICB9KSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIF90aGlzMy5nZXRMaXN0KHRydWUsIGZhbHNlKTsKICAgICAgfSk7CiAgICB9LAogICAgLyoqDQogICAgICog5L+d5a2YDQogICAgICogQHBhcmFtIHtPYmplY3R9IGluZGV4ICAgLy8g5b2T5YmN57Si5byVDQogICAgICogQHBhcmFtIHtPYmplY3R9IHR5cGUgICAgLy8gdHJ1ZSDkuI3mm7TmlrDlvZPliY3mnKzlnLDmlbDmja7vvIxmYWxzZeaIluiAheS4uuepuiDmm7TmlrDlvZPliY3mlbDmja4NCiAgICAgKi8KICAgIHNhdmVmaWxlOiBmdW5jdGlvbiBzYXZlZmlsZShpbmRleCwgdHlwZSkgewogICAgICB2YXIgY29kZSA9IHRoaXMuZWRpdG9yTGlzdFtpbmRleF0uZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgIHZhciBkYXRhID0gewogICAgICAgIGNvbW1lbnQ6IGNvZGUsCiAgICAgICAgZmlsZXBhdGg6IHRoaXMuZWRpdG9yTGlzdFtpbmRleF0ucGF0aCwKICAgICAgICBmaWxlVG9rZW46IHRoaXMuZmlsZVRva2VuCiAgICAgIH07CiAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgc2F2ZWZpbGVBcGkoZGF0YSkudGhlbigvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfcmVmMyA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IoKS5tKGZ1bmN0aW9uIF9jYWxsZWUzKHJlcykgewogICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcigpLncoZnVuY3Rpb24gKF9jb250ZXh0MykgewogICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDMubikgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGlmICghdHlwZSkgewogICAgICAgICAgICAgICAgICB0aGF0LmNvZGUgPSBjb2RlOwogICAgICAgICAgICAgICAgICB0aGF0LmlzU2F2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgIHRoYXQuZWRpdG9ySW5kZXhbaW5kZXhdLmljb24gPSAnJzsKICAgICAgICAgICAgICAgICAgdGhhdC5lZGl0b3JMaXN0W2luZGV4XS5pc1NhdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhhdC4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOwogICAgICAgICAgICAgICAgdGhhdC4kTW9kYWwucmVtb3ZlKCk7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hKDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlMyk7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gzKSB7CiAgICAgICAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB0aGF0LmNhdGNoRnVuKHJlcyk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOWIt+aWsAogICAgcmVmcmVzaGZpbGU6IGZ1bmN0aW9uIHJlZnJlc2hmaWxlKCkgewogICAgICAvLyDliLfmlrDnvJbovpHlmagKICAgICAgaWYgKHRoaXMuZWRpdG9yTGlzdFt0aGlzLmluZGV4RWRpdG9yXSkgdGhpcy5vcGVuZmlsZSh0aGlzLmVkaXRvckxpc3RbdGhpcy5pbmRleEVkaXRvcl0ucGF0aCwgdHJ1ZSk7CiAgICB9LAogICAgLy/orqHnrpd0b2tlbui/h+acn+aXtumXtAogICAgZ2V0RXhwaXJlc1RpbWU6IGZ1bmN0aW9uIGdldEV4cGlyZXNUaW1lKGV4cGlyZXNUaW1lKSB7CiAgICAgIHZhciBub3dUaW1lTnVtID0gTWF0aC5yb3VuZChuZXcgRGF0ZSgpIC8gMTAwMCk7CiAgICAgIHZhciBleHBpcmVzVGltZU51bSA9IGV4cGlyZXNUaW1lIC0gbm93VGltZU51bTsKICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocGFyc2VGbG9hdChwYXJzZUZsb2F0KGV4cGlyZXNUaW1lTnVtIC8gNjApIC8gNjApIC8gMjQpOwogICAgfSwKICAgIC8vIOS+p+i+ueagj+W8guatpeWKoOi9vQogICAgbG9hZERhdGE6IGZ1bmN0aW9uIGxvYWREYXRhKGl0ZW0sIGNhbGxiYWNrKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICBpZiAoIWl0ZW0uZGF0YS5pc0xlYWYpIHsKICAgICAgICB0aGlzLmZvcm1JdGVtID0gewogICAgICAgICAgZGlyOiBpdGVtLmRhdGEucGF0aCwKICAgICAgICAgIHN1cGVyaW9yOiAwLAogICAgICAgICAgZmlsZWRpcjogaXRlbS5kYXRhLnRpdGxlLAogICAgICAgICAgZmlsZVRva2VuOiB0aGlzLmZpbGVUb2tlbgogICAgICAgIH07CiAgICAgICAgb3BlbmRpckxpc3RBcGkodGhpcy5mb3JtSXRlbSkudGhlbigvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIF9yZWY0ID0gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvcigpLm0oZnVuY3Rpb24gX2NhbGxlZTQocmVzKSB7CiAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IoKS53KGZ1bmN0aW9uIChfY29udGV4dDQpIHsKICAgICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDQubikgewogICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXMuZGF0YS5uYXZMaXN0KTsKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5hKDIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgX2NhbGxlZTQpOwogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDQpIHsKICAgICAgICAgICAgcmV0dXJuIF9yZWY0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICB9OwogICAgICAgIH0oKSkuY2F0Y2goZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMTEwMDA4KSB7CiAgICAgICAgICAgIF90aGlzNC4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsKICAgICAgICAgICAgX3RoaXM0LmlzU2hvd0xvZ24gPSB0cnVlOwogICAgICAgICAgICBfdGhpczQuaXNTaG93TGlzdCA9IGZhbHNlOwogICAgICAgICAgICBfdGhpczQubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3RoaXM0LmNhdGNoRnVuKHJlcyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICAvLyDoh6rlrprkuYnmmL7npLoKICAgIHJlbmRlckNvbnRlbnQ6IGZ1bmN0aW9uIHJlbmRlckNvbnRlbnQoaCwgX3JlZjUpIHsKICAgICAgdmFyIG5vZGUgPSBfcmVmNS5ub2RlLAogICAgICAgIGRhdGEgPSBfcmVmNS5kYXRhLAogICAgICAgIHJvb3QgPSBfcmVmNS5yb290OwogICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgIHJldHVybiBoKCdzcGFuJywgewogICAgICAgIHN0eWxlOiBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7CiAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJywKICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLAogICAgICAgICAgdXNlclNlbGVjdDogJ251bGwnLAogICAgICAgICAgY29sb3I6ICcjY2NjY2NjJwogICAgICAgIH0sICJkaXNwbGF5IiwgJ2lubGluZS1ibG9jaycpLCAid2lkdGgiLCAnMTAwJScpLCAiYm9yZGVyUmFkaXMiLCAnNXB4JyksCiAgICAgICAgb246IHsKICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljaygpIHsKICAgICAgICAgICAgdGhhdC5jbGlja0RpcihkYXRhLCByb290LCBub2RlKTsKICAgICAgICAgIH0sCiAgICAgICAgICBjb250ZXh0bWVudTogZnVuY3Rpb24gY29udGV4dG1lbnUoKSB7CiAgICAgICAgICAgIC8vIHRoYXQuaGFuZGxlQ29udGV4dERlbEZvbGRlcihkYXRhLHJvb3Qsbm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LCBbaCgnc3BhbicsIFtoKCdJY29uJywgewogICAgICAgIHByb3BzOiB7CiAgICAgICAgICB0eXBlOiAhZGF0YS5pc0xlYWYgPyAnbWQtZm9sZGVyJyA6ICdpb3MtZG9jdW1lbnQtb3V0bGluZScKICAgICAgICB9LAogICAgICAgIHN0eWxlOiB7CiAgICAgICAgICBtYXJnaW5SaWdodDogJzhweCcKICAgICAgICB9CiAgICAgIH0pLCBoKCdzcGFuJywgewogICAgICAgIGF0dHJzOiB7CiAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZQogICAgICAgIH0KICAgICAgfSwgZGF0YS50aXRsZSldKV0pOwogICAgfSwKICAgIC8qKg0KICAgICAqIOS+p+i+ueagj+eCueWHu+S6i+S7tg0KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhDQogICAgICovCiAgICBjbGlja0RpcjogZnVuY3Rpb24gY2xpY2tEaXIoZGF0YSwgcm9vdCwgbm9kZSkgewogICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgIHRoYXQubmF2SXRlbSA9IGRhdGE7CiAgICAgIHRoYXQucGF0aG5hbWUgPSBkYXRhLnBhdGhuYW1lOwogICAgICBpZiAoIWRhdGEuaXNEaXIpIHsKICAgICAgICB2YXIgaSA9IHRoYXQuZWRpdG9ySW5kZXguZmluZEluZGV4KGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICByZXR1cm4gZS5wYXRobmFtZSA9PT0gZGF0YS5wYXRobmFtZTsKICAgICAgICB9KTsKICAgICAgICBpZiAoaSA+IC0xKSB7CiAgICAgICAgICB0aGF0LmluZGV4RWRpdG9yID0gaS50b1N0cmluZygpOwogICAgICAgICAgdGhhdC50b2dnbGVFZGl0b3IoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGluZGV4ID0gdGhhdC5lZGl0b3JJbmRleC5sZW5ndGg7CiAgICAgICAgICAvLyDliJvlu7p0YWJzCiAgICAgICAgICB0aGF0LmVkaXRvckluZGV4LnB1c2goewogICAgICAgICAgICB0YWI6IHRydWUsCiAgICAgICAgICAgIGluZGV4OiBpbmRleC50b1N0cmluZygpLAogICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSwKICAgICAgICAgICAgaWNvbjogJycsCiAgICAgICAgICAgIHBhdGhuYW1lOiBkYXRhLnBhdGhuYW1lCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoYXQuaW5kZXhFZGl0b3IgPSBpbmRleC50b1N0cmluZygpOwogICAgICAgICAgLy8g5Yib5bu65Luj56CB5a655ZmoCiAgICAgICAgICB0aGF0LmluaXRFZGl0b3IoKTsKICAgICAgICAgIHRoYXQub3BlbmZpbGUoZGF0YS5wYXRobmFtZSwgdHJ1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgLy/kvqfovrnmoI/lj7PplK7ngrnlh7vkuovku7YKICAgIGhhbmRsZUNvbnRleHRNZW51OiBmdW5jdGlvbiBoYW5kbGVDb250ZXh0TWVudShkYXRhLCBldmVudCwgcG9zaXRpb24pIHsKICAgICAgcG9zaXRpb24ubGVmdCA9IE51bWJlcihwb3NpdGlvbi5sZWZ0LnNsaWNlKDAsIC0yKSkgKyA3NSArICdweCc7CiAgICAgIHRoaXMuY29udGV4dERhdGEgPSBkYXRhOwogICAgfSwKICAgIC8vIOaWh+S7tuaTjeS9nOexu+WeiyBjcmVhdGVGb2xkZXJ85Yib5bu65paH5Lu25aS5IGNyZWF0ZUZpbGV85Yib5bu65paH5Lu2IGRlbEZvbGRlcnzliKDpmaTmlofku7blpLnmiJbogIXmlofku7YgcmVuYW1lRmlsZXzmlofku7bph43lkb3lkI0KICAgIC8v5Yib5bu65paH5Lu25aS5CiAgICBoYW5kbGVDb250ZXh0Q3JlYXRlRm9sZGVyOiBmdW5jdGlvbiBoYW5kbGVDb250ZXh0Q3JlYXRlRm9sZGVyKCkgewogICAgICB0aGlzLmZvcm1GaWxlLmZpbGVuYW1lID0gJyc7CiAgICAgIHRoaXMuZm9ybVRpdGxlID0gJ+WIm+W7uuaWh+S7tuWkuSc7CiAgICAgIHRoaXMuZm9ybVNob3cgPSB0cnVlOwogICAgICB0aGlzLmZpbGVUeXBlID0gJ2NyZWF0ZUZvbGRlcic7CiAgICB9LAogICAgLy/liJvlu7rmlofku7YKICAgIGhhbmRsZUNvbnRleHRDcmVhdGVGaWxlOiBmdW5jdGlvbiBoYW5kbGVDb250ZXh0Q3JlYXRlRmlsZSgpIHsKICAgICAgdGhpcy5mb3JtRmlsZS5maWxlbmFtZSA9ICcnOwogICAgICB0aGlzLmZvcm1UaXRsZSA9ICfliJvlu7rmlofku7YnOwogICAgICB0aGlzLmZvcm1TaG93ID0gdHJ1ZTsKICAgICAgdGhpcy5maWxlVHlwZSA9ICdjcmVhdGVGaWxlJzsKICAgIH0sCiAgICAvL+WIoOmZpOaWh+S7tgogICAgaGFuZGxlQ29udGV4dERlbEZvbGRlcjogZnVuY3Rpb24gaGFuZGxlQ29udGV4dERlbEZvbGRlcigpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgdGhhdC4kTW9kYWwuY29uZmlybSh7CiAgICAgICAgdGl0bGU6ICfliKDpmaTmlofku7blpLnlkozmlofku7YnLAogICAgICAgIGNvbnRlbnQ6ICfmgqjnoa7lrpropoHliKDpmaTmlLnmlofku7bvvJ8nLAogICAgICAgIGxvYWRpbmc6IHRydWUsCiAgICAgICAgb25PazogZnVuY3Rpb24gb25PaygpIHsKICAgICAgICAgIHZhciBkYXRhID0gewogICAgICAgICAgICBwYXRoOiB0aGF0LmNvbnRleHREYXRhLnBhdGhuYW1lLAogICAgICAgICAgICBmaWxlVG9rZW46IF90aGlzNS5maWxlVG9rZW4KICAgICAgICAgIH07CiAgICAgICAgICBkZWxGb2xkZXIoZGF0YSkudGhlbigvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgX3JlZjYgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yKCkubShmdW5jdGlvbiBfY2FsbGVlNShyZXMpIHsKICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQ1KSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDUubikgewogICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgdGhhdC5sb29wRGVsKHRoYXQubmF2TGlzdCwgdGhhdC5jb250ZXh0RGF0YS5ub2RlS2V5KTsKICAgICAgICAgICAgICAgICAgICB0aGF0LiRNb2RhbC5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICB0aGF0LiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpOwogICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5hKDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIF9jYWxsZWU1KTsKICAgICAgICAgICAgfSkpOwogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94NSkgewogICAgICAgICAgICAgIHJldHVybiBfcmVmNi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgICAgICB9OwogICAgICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgIHRoYXQuY2F0Y2hGdW4ocmVzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgb25DYW5jZWw6IGZ1bmN0aW9uIG9uQ2FuY2VsKCkgewogICAgICAgICAgdGhhdC4kbWVzc2FnZS5pbmZvKCflj5bmtojliKDpmaQnKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIC8v6YeN5ZG95ZCNCiAgICBoYW5kbGVDb250ZXh0UmVuYW1lOiBmdW5jdGlvbiBoYW5kbGVDb250ZXh0UmVuYW1lKCkgewogICAgICB0aGlzLmZvcm1GaWxlLmZpbGVuYW1lID0gdGhpcy5jb250ZXh0RGF0YS50aXRsZTsKICAgICAgdGhpcy5mb3JtVGl0bGUgPSAn6YeN5ZG95ZCN5paH5Lu2JzsKICAgICAgdGhpcy5mb3JtU2hvdyA9IHRydWU7CiAgICAgIHRoaXMuZmlsZVR5cGUgPSAncmVuYW1lRmlsZSc7CiAgICB9LAogICAgLy/miZPlvIDmlofku7YKICAgIG9wZW5maWxlOiBmdW5jdGlvbiBvcGVuZmlsZShwYXRoLCBpc19lZGl0KSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgIHZhciBwYXJhbXMgPSB7CiAgICAgICAgZmlsZXBhdGg6IHBhdGgsCiAgICAgICAgZmlsZVRva2VuOiB0aGlzLmZpbGVUb2tlbgogICAgICB9OwogICAgICBvcGVuZmlsZUFwaShwYXJhbXMpLnRoZW4oLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICB2YXIgX3JlZjcgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yKCkubShmdW5jdGlvbiBfY2FsbGVlNihyZXMpIHsKICAgICAgICAgIHZhciBkYXRhOwogICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcigpLncoZnVuY3Rpb24gKF9jb250ZXh0NikgewogICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDYubikgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGlmICghaXNfZWRpdCkgewogICAgICAgICAgICAgICAgICB0aGF0Lm1vZGFscyA9IHRydWU7CiAgICAgICAgICAgICAgICAgIHRoYXQuc3BpblNob3cgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgX3RoaXM2LmluaXRFZGl0b3IoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTsKICAgICAgICAgICAgICAgIHRoYXQuY29kZSA9IGRhdGEuY29udGVudDsKICAgICAgICAgICAgICAgIC8vIOS/neWtmOebuOWvueS/oeaBrwoKICAgICAgICAgICAgICAgIHRoYXQuZWRpdG9yTGlzdFt0aGF0LmluZGV4RWRpdG9yXS5vbGRDb2RlID0gdGhhdC5jb2RlOwogICAgICAgICAgICAgICAgX3RoaXM2LiRuZXh0VGljayhmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICB0aGF0LmVkaXRvckxpc3RbdGhhdC5pbmRleEVkaXRvciB8fCAwXS5wYXRoID0gcGF0aDsKICAgICAgICAgICAgICAgICAgdGhhdC5lZGl0b3JMaXN0W3RoYXQuaW5kZXhFZGl0b3IgfHwgMF0ucGF0aG5hbWUgPSBwYXRoOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAvL+aUueWPmOWxnuaApwogICAgICAgICAgICAgICAgdGhhdC5jaGFuZ2VNb2RlbChkYXRhLm1vZGUsIHRoYXQuY29kZSk7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5hKDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlNik7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g2KSB7CiAgICAgICAgICByZXR1cm4gX3JlZjcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB0aGF0LmNhdGNoRnVuKHJlcyk7CiAgICAgIH0pOwogICAgfSwKICAgIC8qKg0KICAgICAqIOWIneWni+WMlue8lui+keWZqA0KICAgICAqLwogICAgaW5pdEVkaXRvcjogZnVuY3Rpb24gaW5pdEVkaXRvcigpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CiAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgdGhhdC4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgIC8vIOWIneWni+WMlue8lui+keWZqO+8jOehruS/nWRvbeW3sue7j+a4suafkwogICAgICAgIHRoYXQuZWRpdG9yID0gbW9uYWNvLmVkaXRvci5jcmVhdGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcl8nICsgdGhhdC5pbmRleEVkaXRvciksIHsKICAgICAgICAgIHZhbHVlOiB0aGF0LmNvZGUsCiAgICAgICAgICAvL+e8lui+keWZqOWIneWni+aYvuekuuaWh+WtlwogICAgICAgICAgbGFuZ3VhZ2U6ICdzcWwnLAogICAgICAgICAgLy/or63oqIDmlK/mjIHoh6rooYzmn6XpmIVkZW1vCiAgICAgICAgICBhdXRvbWF0aWNMYXlvdXQ6IHRydWUsCiAgICAgICAgICAvL+iHquWKqOW4g+WxgAogICAgICAgICAgdGhlbWU6ICd2cycsCiAgICAgICAgICAvL+WumOaWueiHquW4puS4ieenjeS4u+mimHZzLCBoYy1ibGFjaywgb3IgdnMtZGFyawogICAgICAgICAgZm9sZGluZ1N0cmF0ZWd5OiAnaW5kZW50YXRpb24nLAogICAgICAgICAgLy8g5Luj56CB5Y+v5YiG5bCP5q615oqY5Y+gCiAgICAgICAgICBvdmVydmlld1J1bGVyQm9yZGVyOiBmYWxzZSwKICAgICAgICAgIC8vIOS4jeimgea7muWKqOadoeeahOi+ueahhgogICAgICAgICAgc2Nyb2xsYmFyOiB7CiAgICAgICAgICAgIC8vIOa7muWKqOadoeiuvue9rgogICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhclNpemU6IDQsCiAgICAgICAgICAgIC8vIOerlua7muWKqOadoQogICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZTogMTAgLy8g5qiq5rua5Yqo5p2hCiAgICAgICAgICB9LAogICAgICAgICAgYXV0b0luZGVudDogdHJ1ZSwKICAgICAgICAgIC8vIOiHquWKqOW4g+WxgAogICAgICAgICAgdGFiU2l6ZTogNCwKICAgICAgICAgIC8vIHRhYue8qei/m+mVv+W6pgogICAgICAgICAgYXV0b0Nsb3NpbmdPdmVydHlwZTogJ2Fsd2F5cycKICAgICAgICB9KTsKICAgICAgICAvL+a3u+WKoOaMiemUruebkeWQrAogICAgICAgIHRoYXQuZWRpdG9yLmFkZENvbW1hbmQobW9uYWNvLktleU1vZC5DdHJsQ21kIHwgbW9uYWNvLktleUNvZGUuS0VZX1MsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoYXQuc2F2ZWZpbGUodGhhdC5pbmRleEVkaXRvcik7CiAgICAgICAgfSk7CiAgICAgICAgdGhhdC5lZGl0b3Iub25LZXlVcChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyDlvZPplK7nm5jmjInkuIvvvIzliKTmlq3lvZPliY3nvJbovpHlmajmlofmnKzkuI7lt7Lkv53lrZjnmoTnvJbovpHlmajmlofmnKzmmK/lkKbkuIDoh7QKICAgICAgICAgIGlmICh0aGF0LmVkaXRvci5nZXRWYWx1ZSgpICE9IHRoYXQuY29kZSkgewogICAgICAgICAgICB0aGF0LmlzU2F2ZSA9IGZhbHNlOwogICAgICAgICAgICB0aGF0LmVkaXRvckluZGV4W3RoYXQuaW5kZXhFZGl0b3JdLmljb24gPSAnbWQtd2FybmluZyc7CiAgICAgICAgICAgIHRoYXQuZWRpdG9yTGlzdFt0aGF0LmluZGV4RWRpdG9yXS5pc1NhdmUgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGF0LmVkaXRvckxpc3QucHVzaCh7CiAgICAgICAgICBlZGl0b3I6IHRoYXQuZWRpdG9yLAogICAgICAgICAgb2xkQ29kZTogdGhhdC5jb2RlLAogICAgICAgICAgcGF0aDogX3RoaXM3LnBhdGhuYW1lLAogICAgICAgICAgaXNTYXZlOiB0cnVlLAogICAgICAgICAgaW5kZXg6IHRoYXQuaW5kZXhFZGl0b3IKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgLyoqDQogICAgICog5YiH5o2i6K+t6KiADQogICAgICogQHBhcmFtIHtPYmplY3R9IG1vZGUNCiAgICAgKi8KICAgIGNoYW5nZU1vZGVsOiBmdW5jdGlvbiBjaGFuZ2VNb2RlbChtb2RlLCB2YWx1ZSkgewogICAgICB2YXIgb2xkTW9kZWwgPSB0aGlzLmVkaXRvckxpc3RbdGhpcy5pbmRleEVkaXRvcl0uZWRpdG9yLmdldE1vZGVsKCk7IC8v6I635Y+W5pen5qih5Z6LCiAgICAgIC8vIHZhciB2YWx1ZSA9IHRoaXMuZWRpdG9yLmdldFZhbHVlKCk7Ly/ojrflj5bml6fnmoTmlofmnKwKICAgICAgLy/liJvlu7rmlrDmqKHlnovvvIx2YWx1ZeS4uuaXp+aWh+acrO+8jGlk5Li6bW9kZUlk77yM5Y2z6K+t6KiA77yIbGFuZ3VhZ2UuaWTvvIkKICAgICAgLy9tb2Rlc0lkc+WNs+S4uuaUr+aMgeivreiogAogICAgICAvLyB2YXIgbW9kZXNJZHMgPSBtb25hY28ubGFuZ3VhZ2VzLmdldExhbmd1YWdlcygpLm1hcChmdW5jdGlvbihsYW5nKSB7IHJldHVybiBsYW5nLmlkOyB9KTsKICAgICAgaWYgKCFtb2RlKSBtb2RlID0gb2xkTW9kZWwuZ2V0TGFuZ3VhZ2VJZCgpOwogICAgICAvLyBpZighdmFsdWUpIHZhbHVlID0gdGhpcy5lZGl0b3IuZ2V0VmFsdWUoKTsKCiAgICAgIHZhciBuZXdNb2RlbCA9IG1vbmFjby5lZGl0b3IuY3JlYXRlTW9kZWwodmFsdWUsIG1vZGUpOwogICAgICAvL+WwhuaXp+aooeWei+mUgOavgQogICAgICBpZiAob2xkTW9kZWwpIHsKICAgICAgICBvbGRNb2RlbC5kaXNwb3NlKCk7CiAgICAgIH0KICAgICAgLy/orr7nva7mlrDmqKHlnosKICAgICAgdGhpcy5lZGl0b3JMaXN0W3RoaXMuaW5kZXhFZGl0b3JdLmVkaXRvci5zZXRNb2RlbChuZXdNb2RlbCk7CiAgICB9LAogICAgLy8g5paH5Lu25pON5L2c57G75Z6LIGNyZWF0ZUZvbGRlcnzliJvlu7rmlofku7blpLkgY3JlYXRlRmlsZXzliJvlu7rmlofku7YgZGVsRm9sZGVyfOWIoOmZpOaWh+S7tuWkueaIluiAheaWh+S7tgogICAgaGFuZGxlU3VibWl0OiBmdW5jdGlvbiBoYW5kbGVTdWJtaXQobmFtZSkgewogICAgICB2YXIgX3RoaXM4ID0gdGhpczsKICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICB2YXIgZGF0YSA9ICcnOwogICAgICB2YXIgZGF0YUl0ZW0gPSAnJzsKICAgICAgdGhpcy4kcmVmc1tuYW1lXS52YWxpZGF0ZShmdW5jdGlvbiAodmFsaWQpIHsKICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgIHN3aXRjaCAodGhhdC5maWxlVHlwZSkgewogICAgICAgICAgICBjYXNlICdjcmVhdGVGb2xkZXInOgogICAgICAgICAgICAgIGRhdGEgPSB7CiAgICAgICAgICAgICAgICBwYXRoOiB0aGF0LmNvbnRleHREYXRhLnBhdGhuYW1lLAogICAgICAgICAgICAgICAgbmFtZTogdGhhdC5mb3JtRmlsZS5maWxlbmFtZSwKICAgICAgICAgICAgICAgIGZpbGVUb2tlbjogX3RoaXM4LmZpbGVUb2tlbgogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgY3JlYXRlRm9sZGVyKGRhdGEpLnRoZW4oLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBfcmVmOCA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IoKS5tKGZ1bmN0aW9uIF9jYWxsZWU3KHJlcykgewogICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQ3KSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ3Lm4pIHsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUl0ZW0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiB0aGF0LmNvbnRleHREYXRhLnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJpb3I6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZWRpcjogdGhhdC5jb250ZXh0RGF0YS50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlVG9rZW46IF90aGlzOC5maWxlVG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5nZXRMaXN0SXRlbShkYXRhSXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0LmZvcm1TaG93KSB0aGF0LmZvcm1TaG93ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuJG1lc3NhZ2Uuc3VjY2Vzcygn5Yib5bu65oiQ5YqfJyk7CiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDcuYSgyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWU3KTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g3KSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmOC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIHRoYXQuY2F0Y2hGdW4ocmVzKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnY3JlYXRlRmlsZSc6CiAgICAgICAgICAgICAgZGF0YSA9IHsKICAgICAgICAgICAgICAgIHBhdGg6IHRoYXQuY29udGV4dERhdGEucGF0aG5hbWUsCiAgICAgICAgICAgICAgICBuYW1lOiB0aGF0LmZvcm1GaWxlLmZpbGVuYW1lLAogICAgICAgICAgICAgICAgZmlsZVRva2VuOiBfdGhpczguZmlsZVRva2VuCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBjcmVhdGVGaWxlKGRhdGEpLnRoZW4oLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBfcmVmOSA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IoKS5tKGZ1bmN0aW9uIF9jYWxsZWU4KHJlcykgewogICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQ4KSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ4Lm4pIHsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUl0ZW0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiB0aGF0LmNvbnRleHREYXRhLnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJpb3I6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZWRpcjogdGhhdC5jb250ZXh0RGF0YS50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlVG9rZW46IF90aGlzOC5maWxlVG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5nZXRMaXN0SXRlbShkYXRhSXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0LmZvcm1TaG93KSB0aGF0LmZvcm1TaG93ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuJG1lc3NhZ2Uuc3VjY2Vzcygn5Yib5bu65oiQ5YqfJyk7CiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDguYSgyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWU4KTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g4KSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmOS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIHRoYXQuY2F0Y2hGdW4ocmVzKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAncmVuYW1lRmlsZSc6CiAgICAgICAgICAgICAgZGF0YSA9IHsKICAgICAgICAgICAgICAgIG5ld25hbWU6IHRoYXQuY29udGV4dERhdGEucGF0aCArICdcXCcgKyB0aGF0LmZvcm1GaWxlLmZpbGVuYW1lLAogICAgICAgICAgICAgICAgb2xkbmFtZTogdGhhdC5jb250ZXh0RGF0YS5wYXRobmFtZSwKICAgICAgICAgICAgICAgIGZpbGVUb2tlbjogX3RoaXM4LmZpbGVUb2tlbgogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgcmVuYW1lKGRhdGEpLnRoZW4oLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBfcmVmMCA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IoKS5tKGZ1bmN0aW9uIF9jYWxsZWU5KHJlcykgewogICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQ5KSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ5Lm4pIHsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC4kc2V0KHRoYXQuY29udGV4dERhdGEsICd0aXRsZScsIHRoYXQuZm9ybUZpbGUuZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LiRtZXNzYWdlLnN1Y2Nlc3MoJ+S/ruaUueaIkOWKnycpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5mb3JtU2hvdykgdGhhdC5mb3JtU2hvdyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ5LmEoMik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlOSk7CiAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94OSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjAuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgICAgICB0aGF0LmNhdGNoRnVuKHJlcyk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzOC4kbWVzc2FnZS5lcnJvcignRmFpbCEnKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIC8qKg0KICAgICAqIOmAgOWHuuihqOWNlQ0KICAgICAqLwogICAgZm9ybUV4aXQ6IGZ1bmN0aW9uIGZvcm1FeGl0KCkgewogICAgICB0aGlzLmZvcm1TaG93ID0gZmFsc2U7CiAgICB9LAogICAgLyoqDQogICAgICog5aSE55CG5o6l5Y+j5Zue6LCDDQogICAgICogQHBhcmFtIHtPYmplY3R9IHJlcw0KICAgICAqLwogICAgY2F0Y2hGdW46IGZ1bmN0aW9uIGNhdGNoRnVuKHJlcykgewogICAgICBpZiAocmVzLnN0YXR1cykgewogICAgICAgIGlmIChyZXMuc3RhdHVzID09IDQwMCkgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsKICAgICAgICBpZiAocmVzLnN0YXR1cyA9PSAxMTAwMDgpIHsKICAgICAgICAgIC8vIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7CiAgICAgICAgICB0aGlzLmlzU2hvd0xvZ24gPSB0cnVlOwogICAgICAgICAgdGhpcy5pc1Nob3dMaXN0ID0gZmFsc2U7CiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gdGhpcy4kbWVzc2FnZS5lcnJvcign5paH5Lu257yW56CB5LiN6KKr5YW85a6577yM5peg5rOV5q2j56Gu6K+75Y+W5paH5Lu2IScpOwogICAgICB9CiAgICAgIC8v5YWz6Zet6JKZ54mI5bGCCiAgICAgIGlmICh0aGlzLnNwaW5TaG93KSB0aGlzLnNwaW5TaG93ID0gZmFsc2U7CiAgICAgIC8vIOWFs+mXreaWh+S7tuWIl+ihqOWxleekugogICAgICBpZiAodGhpcy5sb2FkaW5nKSB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgIH0sCiAgICBsb29wRGVsOiBmdW5jdGlvbiBsb29wRGVsKGRhdGEsIG5vZGVLZXkpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CiAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHsKICAgICAgICBpZiAoaXRlbS5ub2RlS2V5ID09PSBub2RlS2V5KSB7CiAgICAgICAgICByZXR1cm4gZGF0YS5zcGxpY2UoaW5kZXgsIDEpOwogICAgICAgIH0KICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXM5Lmxvb3BEZWwoaXRlbS5jaGlsZHJlbiwgbm9kZUtleSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICAvKioNCiAgICAgKiDnqpflj6PmnIDlpKfljJYNCiAgICAgKi8KICAgIHdpbkNoYW5nZXM6IGZ1bmN0aW9uIHdpbkNoYW5nZXMoKSB7CiAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSkgewogICAgICAgIHRoaXMuY2xhc3NOYW1lID0gJyc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5jbGFzc05hbWUgPSAnZGl5LWZ1bGxzY3JlZW4nOwogICAgICB9CiAgICB9LAogICAgLyoqDQogICAgICog5YiH5o2i6YCJ6aG55Y2hDQogICAgICogQHBhcmFtIHtPYmplY3R9IGluZGV4DQogICAgICovCiAgICB0b2dnbGVFZGl0b3I6IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvcigpIHsKICAgICAgdmFyIGluZGV4ID0gTnVtYmVyKHRoaXMuaW5kZXhFZGl0b3IpOwogICAgICB0aGlzLmNvZGUgPSB0aGlzLmVkaXRvckxpc3RbaW5kZXhdLm9sZENvZGU7IC8v6K6+572u5paH5Lu25omT5byA5pe255qE5Luj56CBCiAgICAgIHRoaXMuZWRpdG9yID0gdGhpcy5lZGl0b3JMaXN0W2luZGV4XS5lZGl0b3I7IC8v6K6+572u57yW6L6R5Zmo5a6e5L6LCiAgICB9LAogICAgaXNFZGl0TWFyazogZnVuY3Rpb24gaXNFZGl0TWFyayhyb3cpIHsKICAgICAgdmFyIF90aGlzMCA9IHRoaXM7CiAgICAgIHRyeSB7CiAgICAgICAgcm93LmlzX2VkaXQgPSB0cnVlOwogICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBfdGhpczAuJHJlZnMubWFyay5mb2N1cygpOwogICAgICAgIH0pOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTsKICAgICAgfQogICAgfSwKICAgIGlzRWRpdEJsdXI6IGZ1bmN0aW9uIGlzRWRpdEJsdXIocm93KSB7CiAgICAgIHZhciBfdGhpczEgPSB0aGlzOwogICAgICByb3cuaXNfZWRpdCA9IGZhbHNlOwogICAgICB2YXIgZGF0YSA9IHsKICAgICAgICBmdWxsX3BhdGg6IHJvdy5yZWFsX3BhdGgsCiAgICAgICAgbWFyazogcm93Lm1hcmsKICAgICAgfTsKICAgICAgbWFya1NhdmUodGhpcy5maWxlVG9rZW4sIGRhdGEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIC8vIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikgewogICAgICAgIF90aGlzMS4kbWVzc2FnZS5lcnJvcihlcnIubXNnKTsKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlVGFiUmVtb3ZlOiBmdW5jdGlvbiBoYW5kbGVUYWJSZW1vdmUoaW5kZXgpIHsKICAgICAgdmFyIHRoYXQgPSB0aGlzOwoKICAgICAgLy8g5YWz6Zet6YCJ6aG55Y2hCiAgICAgIHRoYXQuZWRpdG9ySW5kZXhbaW5kZXhdLnRhYiA9IGZhbHNlOyAvLyDlhbPpl63pgInpobnljaEKICAgICAgLy8g5Yik5pat5b2T5YmN5paH5Lu25pyJ5rKh5pyJ5L+d5a2YCiAgICAgIGlmICghdGhhdC5lZGl0b3JMaXN0W2luZGV4XS5pc1NhdmUpIHsKICAgICAgICB0aGF0LiRNb2RhbC5jb25maXJtKHsKICAgICAgICAgIHRpdGxlOiAn5paH5Lu25pyq5L+d5a2YJywKICAgICAgICAgIGNvbnRlbnQ6ICfmgqjmmK/lkKbpnIDopoHkv53lrZjlvZPliY3mlofku7YnLAogICAgICAgICAgbG9hZGluZzogdHJ1ZSwKICAgICAgICAgIG9uT2s6IGZ1bmN0aW9uIG9uT2soKSB7CiAgICAgICAgICAgIC8vIOS/neWtmOaWh+S7tgogICAgICAgICAgICB0aGF0LnNhdmVmaWxlKGluZGV4KTsKICAgICAgICAgIH0sCiAgICAgICAgICBvbkNhbmNlbDogZnVuY3Rpb24gb25DYW5jZWwoKSB7CiAgICAgICAgICAgIHRoYXQuJG1lc3NhZ2UuaW5mbygn5Y+W5raI5L+d5a2YJyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICAvL+e8lui+keWZqOeKtuaAgeWPmOWMlgogICAgZWRpdE1vZGFsQ2hhbmdlOiBmdW5jdGlvbiBlZGl0TW9kYWxDaGFuZ2UoKSB7CiAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgdGhhdC5lZGl0b3JMaXN0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgewogICAgICAgIGlmICh2YWx1ZS5pc1NhdmUgPT09IGZhbHNlKSB7CiAgICAgICAgICBpZiAoY29uZmlybSgiIi5jb25jYXQodGhhdC5lZGl0b3JJbmRleFtpbmRleF0udGl0bGUsICJcdTY1ODdcdTRFRjZcdTY3MkFcdTRGRERcdTVCNTgsXHU2NjJGXHU1NDI2XHU4OTgxXHU0RkREXHU1QjU4XHU4QkU1XHU2NTg3XHU0RUY2IikpKSB7CiAgICAgICAgICAgIC8vIOS/neWtmOW9k+WJjeaWh+S7tgogICAgICAgICAgICB0aGF0LnNhdmVmaWxlKGluZGV4LCB0cnVlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoYXQuJG1lc3NhZ2UuaW5mbygiXHU1REYyXHU1M0Q2XHU2RDg4Ii5jb25jYXQodGhhdC5lZGl0b3JJbmRleFtpbmRleF0udGl0bGUsICJcdTY1ODdcdTRFRjZcdTRGRERcdTVCNTgiKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIOmUgOavgeW9k+WJjee8lui+keWZqAogICAgICAgIHRoYXQuZWRpdG9yTGlzdFtpbmRleF0uZWRpdG9yLmRpc3Bvc2UoKTsKICAgICAgICB0aGF0LmVkaXRvckxpc3RbaW5kZXhdLmVkaXRvciA9IG51bGw7CiAgICAgIH0pOwogICAgICAvLyDliJ3lp4vor53mlbDmja4KICAgICAgdGhhdC5tb2RhbHMgPSBmYWxzZTsgLy/nvJbovpHlmajlvIDlhbMKICAgICAgdGhhdC5lZGl0b3IgPSAnJzsgLy/lvZPliY3nvJbovpHlmajlr7nosaEKICAgICAgdGhhdC5lZGl0b3JJbmRleCA9IFsKICAgICAgLy/pgInpobnljaHmlbDnu4QKICAgICAgewogICAgICAgIHRhYjogdHJ1ZSwKICAgICAgICBpbmRleDogJzAnLAogICAgICAgIHRpdGxlOiAnJywKICAgICAgICBpY29uOiAnJwogICAgICB9XTsKICAgICAgdGhhdC5lZGl0b3JMaXN0ID0gW107IC8v57yW6L6R5Zmo5pWw57uECiAgICAgIHRoYXQuaW5kZXhFZGl0b3IgPSAnMCc7IC8v5b2T5YmN57yW6L6R5Zmo57Si5byVCiAgICAgIHRoYXQuY29kZSA9ICcnOyAvL+W9k+WJjeaWh+S7tuaJk+W8gOaXtueahOWGheWuuQogICAgICB0aGF0Lm5hdkxpc3QgPSBbXTsgLy/lt6bkvqflr7zoiKrmlbDmja4KICAgICAgdGhhdC5uYXZJdGVtID0ge307IC8v5bem5L6n5a+86Iiq54K55Ye75piv6YCJ5Lit55qE5pWw5o2uCiAgICAgIHRoYXQuY29udGV4dERhdGEgPSBudWxsOyAvL+W3puS+p+WvvOiIquWPs+mUrueCueWHu+aYr+S6p+eUn+eahOaVsOaNruWvueixoQogICAgfQogIH0KfTs="},{"version":3,"names":["resolveComponent","opendirListApi","openfileApi","savefileApi","opendirLoginApi","createFolder","createFile","delFolder","rename","fileMark","markSave","CodeMirror","loginFrom","setCookies","getCookies","removeCookies","monaco","name","data","modals","editor","editorIndex","tab","index","title","icon","editorList","indexEditor","code","navList","navItem","contextData","fileType","className","isSave","isShowLogn","isShowList","spinShow","loading","tabList","formItem","dir","superior","filedir","fileToken","pathname","formFile","filename","ruleInline","required","message","trigger","formShow","formTitle","routeList","props","label","children","isLeaf","components","mounted","created","getList","beforeDestroy","computed","methods","currentChange","currentRow","isDir","open","edit","refresh","is_edit","_this","params","then","_ref","_asyncToGenerator","_regenerator","m","_callee","res","w","_context","n","navListForTab","list","a","_x","apply","arguments","catch","catchFun","getListItem","_this2","_ref2","_callee2","_context2","$set","_x2","goBack","row","path","jumpRoute","item","route","refreshRoute","length","openfile","mark","_this3","$modalForm","savefile","type","getValue","comment","filepath","that","_ref3","_callee3","_context3","$message","success","msg","$Modal","remove","_x3","refreshfile","getExpiresTime","expiresTime","nowTimeNum","Math","round","Date","expiresTimeNum","parseFloat","loadData","callback","_this4","_ref4","_callee4","_context4","_x4","status","error","renderContent","h","_ref5","node","root","style","_defineProperty","display","cursor","userSelect","color","on","click","clickDir","contextmenu","marginRight","attrs","i","findIndex","e","toString","toggleEditor","push","initEditor","handleContextMenu","event","position","left","Number","slice","handleContextCreateFolder","handleContextCreateFile","handleContextDelFolder","_this5","confirm","content","onOk","_ref6","_callee5","_context5","loopDel","nodeKey","_x5","onCancel","info","handleContextRename","_this6","_ref7","_callee6","_context6","oldCode","$nextTick","changeModel","mode","_x6","_this7","create","document","getElementById","value","language","automaticLayout","theme","foldingStrategy","overviewRulerBorder","scrollbar","verticalScrollbarSize","horizontalScrollbarSize","autoIndent","tabSize","autoClosingOvertype","addCommand","KeyMod","CtrlCmd","KeyCode","KEY_S","onKeyUp","oldModel","getModel","getLanguageId","newModel","createModel","dispose","setModel","handleSubmit","_this8","dataItem","$refs","validate","valid","_ref8","_callee7","_context7","_x7","_ref9","_callee8","_context8","_x8","newname","oldname","_ref0","_callee9","_context9","_x9","formExit","_this9","forEach","splice","winChanges","isEditMark","_this0","focus","console","log","isEditBlur","_this1","full_path","real_path","err","handleTabRemove","editModalChange","concat"],"sources":["src/pages/system/maintain/systemFile/opendir.vue"],"sourcesContent":["<template>\r\n <div>\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt\" v-loading=\"spinShow\">\r\n <div v-if=\"isShowList\" class=\"backs-box\">\r\n <div class=\"backs\">\r\n <span class=\"back\" v-db-click @click=\"goBack(false)\">\r\n <i class=\"el-icon-back icon\" />\r\n </span>\r\n <span class=\"item\" v-for=\"(item, index) in routeList\" :key=\"index\" v-db-click @click=\"jumpRoute(item)\">\r\n <span class=\"key\">{{ item.key }}</span>\r\n <i class=\"forward el-icon-arrow-right\" v-if=\"index < routeList.length - 1\" />\r\n </span>\r\n </div>\r\n <span class=\"refresh\" v-db-click @click=\"refreshRoute\">\r\n <i class=\"el-icon-refresh-right icon\" />\r\n </span>\r\n </div>\r\n <el-table\r\n v-if=\"isShowList\"\r\n ref=\"selection\"\r\n :data=\"tabList\"\r\n v-loading=\"loading\"\r\n empty-text=\"暂无数据\"\r\n class=\"mt14\"\r\n >\r\n <el-table-column label=\"文件/文件夹名\" min-width=\"150\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"file-name\" v-db-click @click=\"currentChange(scope.row)\">\r\n <i v-if=\"scope.row.isDir\" class=\"el-icon-folder mr5\" />\r\n <i v-else class=\"el-icon-document mr5\" />\r\n <span>{{ scope.row.filename }}</span>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"文件/文件夹大小\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.size }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"更新时间\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.mtime }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"备注\" min-width=\"120\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"mark\">\r\n <div v-if=\"scope.row.is_edit\" class=\"table-mark\" v-db-click @click=\"isEditMark(scope.row)\">\r\n {{ scope.row.mark }}\r\n </div>\r\n <el-input ref=\"mark\" v-else v-model=\"scope.row.mark\" @blur=\"isEditBlur(scope.row)\"></el-input>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" fixed=\"right\" width=\"60\">\r\n <template slot-scope=\"scope\">\r\n <el-button type=\"text\" v-db-click @click=\"open(scope.row)\" v-if=\"scope.row.isDir\">打开</el-button>\r\n <el-button type=\"text\" v-db-click @click=\"edit(scope.row)\" v-else>编辑</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </el-card>\r\n <el-dialog\r\n :visible.sync=\"modals\"\r\n :custom-class=\"className\"\r\n :close-on-click-modal=\"false\"\r\n width=\"80%\"\r\n top=\"5vh\"\r\n @close=\"editModalChange\"\r\n append-to-body\r\n :title=\"editorIndex[indexEditor].title\"\r\n >\r\n <p slot=\"header\" class=\"diy-header\" ref=\"diyHeader\">\r\n <span>{{ title }}</span>\r\n <i\r\n v-db-click\r\n @click=\"winChanges\"\r\n class=\"diy-header-icon\"\r\n :class=\"className ? 'el-icon-cpu' : 'el-icon-full-screen'\"\r\n style=\"font-size: 20px\"\r\n />\r\n </p>\r\n <div style=\"height: 100%\">\r\n <div class=\"top-button\">\r\n <el-button type=\"primary\" id=\"savefile\" class=\"diy-button\" v-db-click @click=\"savefile(indexEditor)\"\r\n >保存</el-button\r\n >\r\n <el-button id=\"refresh\" class=\"diy-button\" v-db-click @click=\"refreshfile\">刷新</el-button>\r\n </div>\r\n <div class=\"file-box\">\r\n <div class=\"show-info\">\r\n <div class=\"show-text\" :title=\"navItem.pathname\">目录: {{ navItem.pathname }}</div>\r\n <div class=\"diy-button-list\">\r\n <el-button class=\"diy-button\" v-db-click @click=\"goBack(true)\">返回上一级</el-button>\r\n <el-button class=\"diy-button\" v-db-click @click=\"getList(true, true)\">刷新</el-button>\r\n </div>\r\n </div>\r\n <div class=\"file-left\">\r\n <el-tree\r\n class=\"diy-tree-render\"\r\n :data=\"navList\"\r\n :render-content=\"renderContent\"\r\n :load=\"loadData\"\r\n @node-contextmenu=\"handleContextMenu\"\r\n expand-node\r\n lazy\r\n :props=\"props\"\r\n >\r\n <!-- <template transfer slot=\"contextMenu\">\r\n <DropdownItem v-if=\"contextData && contextData.isDir\" v-db-click @click.native=\"handleContextCreateFolder()\"\r\n >新建文件夹</DropdownItem\r\n >\r\n <DropdownItem v-if=\"contextData && contextData.isDir\" v-db-click @click.native=\"handleContextCreateFile()\"\r\n >新建文件</DropdownItem\r\n >\r\n <DropdownItem v-db-click @click.native=\"handleContextRename()\">重命名</DropdownItem>\r\n <DropdownItem v-db-click @click.native=\"handleContextDelFolder()\" style=\"color: #ed4014\">删除</DropdownItem>\r\n </template> -->\r\n </el-tree>\r\n </div>\r\n <div class=\"file-fix\"></div>\r\n <div class=\"file-content\">\r\n <el-tabs\r\n type=\"card\"\r\n v-model=\"indexEditor\"\r\n style=\"height: 100%\"\r\n @tab-click=\"toggleEditor\"\r\n :animated=\"false\"\r\n closable\r\n @tab-remove=\"handleTabRemove\"\r\n >\r\n <el-tab-pane\r\n v-for=\"value in editorIndex\"\r\n :key=\"value.index\"\r\n :name=\"value.index.toString()\"\r\n :label=\"value.title\"\r\n :icon=\"value.icon\"\r\n v-if=\"value.tab\"\r\n >\r\n <div\r\n ref=\"container\"\r\n :id=\"'container_' + value.index\"\r\n style=\"height: 100%; min-height: calc(80vh - 100px)\"\r\n ></div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n </div>\r\n </div>\r\n </el-dialog>\r\n\r\n <div v-show=\"formShow\" class=\"diy-from\">\r\n <div class=\"diy-from-header\">\r\n {{ formTitle\r\n }}<span :title=\"contextData ? contextData.pathname : ''\">{{ contextData ? contextData.pathname : '' }}</span>\r\n </div>\r\n <el-form ref=\"formInline\" :model=\"formFile\" :rules=\"ruleInline\" inline>\r\n <el-form-item prop=\"filename\" class=\"diy-file\">\r\n <el-input type=\"text\" class=\"diy-file\" v-model=\"formFile.filename\" placeholder=\"请输入名字\">\r\n <i class=\"el-icon-folder-opened\" slot=\"prepend\"></i>\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button class=\"diy-button\" v-db-click @click=\"handleSubmit('formInline')\">确定</el-button>\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button class=\"diy-button\" v-db-click @click=\"formExit()\">取消</el-button>\r\n </el-form-item>\r\n <div class=\"form-mask\" v-show=\"formShow\"></div>\r\n </el-form>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { resolveComponent } from 'vue';\r\nimport {\r\n opendirListApi,\r\n openfileApi,\r\n savefileApi,\r\n opendirLoginApi,\r\n createFolder,\r\n createFile,\r\n delFolder,\r\n rename,\r\n fileMark,\r\n markSave,\r\n} from '@/api/system';\r\nimport CodeMirror from 'codemirror/lib/codemirror';\r\nimport loginFrom from './components/loginFrom';\r\nimport { setCookies, getCookies, removeCookies } from '@/libs/util';\r\n// import Fullscreen from '@/layout/components/fullscreen';\r\nimport * as monaco from 'monaco-editor';\r\nexport default {\r\n name: 'opendir',\r\n data() {\r\n return {\r\n modals: false, //编辑器开关\r\n editor: '', //当前编辑器对象\r\n editorIndex: [\r\n //选项卡数组\r\n {\r\n tab: true,\r\n index: '0',\r\n title: '',\r\n icon: '',\r\n },\r\n ],\r\n editorList: [], //编辑器数组\r\n indexEditor: 0, //当前编辑器索引\r\n code: '', //当前文件打开时的内容\r\n navList: [], //左侧导航数据\r\n navItem: {}, //左侧导航点击是选中的数据\r\n contextData: null, //左侧导航右键点击是产生的数据对象\r\n\r\n fileType: '', // 文件操作类型 createFolder|创建文件夹 createFile|创建文件 delFolder|删除文件夹或者文件\r\n className: '', //全屏 class名\r\n // fullscreen:false, // 是否全屏\r\n isSave: true, //当前文件是否保存\r\n\r\n isShowLogn: false, // 登录\r\n isShowList: false, // 登录之后列表\r\n\r\n spinShow: false,\r\n loading: false,\r\n tabList: [],\r\n\r\n formItem: {\r\n //记录当前路径信息,获取文件列表时使用\r\n dir: '',\r\n superior: 0,\r\n filedir: '',\r\n fileToken: getCookies('file_token'),\r\n },\r\n dir: '', //当前完整文件路径\r\n // rows: {}, //\r\n pathname: '', // 当前文件路径\r\n title: '', //当前文件标题\r\n\r\n formFile: {\r\n //重命名表单\r\n filename: '',\r\n },\r\n ruleInline: {\r\n filename: [{ required: true, message: '请输入文件或文件夹的名字', trigger: 'blur' }],\r\n },\r\n formShow: false, //表单开关\r\n formTitle: '', //表单标题\r\n fileToken: getCookies('file_token'),\r\n routeList: [], // 打开文件路径\r\n props: {\r\n label: 'title',\r\n children: 'children',\r\n isLeaf: 'isLeaf',\r\n },\r\n };\r\n },\r\n\r\n components: {\r\n loginFrom,\r\n },\r\n mounted() {\r\n // this.initEditor();\r\n },\r\n created() {\r\n this.getList();\r\n },\r\n beforeDestroy() {\r\n removeCookies('file_token');\r\n },\r\n computed: {},\r\n methods: {\r\n // 点击行\r\n currentChange(currentRow) {\r\n if (currentRow.isDir) {\r\n this.open(currentRow);\r\n } else {\r\n this.edit(currentRow);\r\n }\r\n },\r\n /**\r\n * 文件列表\r\n * @param {Object} refresh // 是否重新加载 bool\r\n * @param {Object} is_edit // 是否是编辑器中的刷新 bool\r\n */\r\n getList(refresh, is_edit) {\r\n let params;\r\n if (refresh) {\r\n params = {\r\n dir: '',\r\n superior: 0,\r\n filedir: '',\r\n fileToken: this.fileToken,\r\n };\r\n } else {\r\n params = this.formItem;\r\n params.fileToken = this.fileToken;\r\n }\r\n if (!is_edit) this.loading = true;\r\n opendirListApi(params)\r\n .then(async (res) => {\r\n let data = res.data;\r\n this.routeList = data.routeList;\r\n\r\n if (is_edit) {\r\n this.navList = data.navList;\r\n } else {\r\n this.navListForTab = data.navList;\r\n this.tabList = data.list;\r\n // this.navList = data.navList;\r\n this.isShowList = true;\r\n }\r\n this.dir = data.dir;\r\n this.isShowLogn = false;\r\n this.loading = false;\r\n })\r\n .catch((res) => {\r\n this.catchFun(res);\r\n });\r\n },\r\n //新建文件后重新加载左侧导航\r\n getListItem(data) {\r\n opendirListApi(data)\r\n .then(async (res) => {\r\n this.$set(this.contextData, 'children', res.data.navList);\r\n })\r\n .catch((res) => {\r\n this.catchFun(res);\r\n });\r\n },\r\n\r\n // 返回上级\r\n goBack(is_edit) {\r\n this.formItem = {\r\n dir: this.dir,\r\n superior: 1,\r\n filedir: '',\r\n };\r\n this.getList(false, is_edit);\r\n },\r\n // 打开\r\n open(row) {\r\n // this.rows = row;\r\n this.formItem = {\r\n dir: row.path,\r\n superior: 0,\r\n filedir: row.filename,\r\n fileToken: this.fileToken,\r\n };\r\n this.getList(false, false);\r\n },\r\n jumpRoute(item) {\r\n let data = {\r\n path: item.route,\r\n filename: '',\r\n };\r\n this.open(data);\r\n },\r\n refreshRoute() {\r\n let data = {\r\n path: this.routeList[this.routeList.length - 1].route,\r\n filename: '',\r\n };\r\n this.open(data);\r\n },\r\n // 编辑ß\r\n edit(row) {\r\n this.navItem = row;\r\n this.spinShow = true;\r\n this.pathname = row.pathname;\r\n this.title = row.filename;\r\n this.editorIndex[0].title = row.filename;\r\n this.editorIndex[0].pathname = row.pathname;\r\n this.navList = this.navListForTab;\r\n this.dir = row.path;\r\n // 创建代码容器\r\n if (this.editorList.length <= 0) {\r\n // this.initEditor();\r\n }\r\n this.openfile(row.pathname, false);\r\n },\r\n /**\r\n * 备注\r\n */\r\n mark(row) {\r\n this.$modalForm(\r\n fileMark({\r\n path: row.pathname,\r\n fileToken: this.fileToken,\r\n }),\r\n ).then(() => this.getList(true, false));\r\n },\r\n /**\r\n * 保存\r\n * @param {Object} index // 当前索引\r\n * @param {Object} type // true 不更新当前本地数据,false或者为空 更新当前数据\r\n */\r\n savefile(index, type) {\r\n let code = this.editorList[index].editor.getValue();\r\n let data = {\r\n comment: code,\r\n filepath: this.editorList[index].path,\r\n fileToken: this.fileToken,\r\n };\r\n let that = this;\r\n savefileApi(data)\r\n .then(async (res) => {\r\n if (!type) {\r\n that.code = code;\r\n that.isSave = true;\r\n that.editorIndex[index].icon = '';\r\n that.editorList[index].isSave = true;\r\n }\r\n that.$message.success(res.msg);\r\n that.$Modal.remove();\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n },\r\n // 刷新\r\n refreshfile() {\r\n // 刷新编辑器\r\n if (this.editorList[this.indexEditor]) this.openfile(this.editorList[this.indexEditor].path, true);\r\n },\r\n //计算token过期时间\r\n getExpiresTime(expiresTime) {\r\n let nowTimeNum = Math.round(new Date() / 1000);\r\n let expiresTimeNum = expiresTime - nowTimeNum;\r\n return parseFloat(parseFloat(parseFloat(expiresTimeNum / 60) / 60) / 24);\r\n },\r\n // 侧边栏异步加载\r\n loadData(item, callback) {\r\n if (!item.data.isLeaf) {\r\n this.formItem = {\r\n dir: item.data.path,\r\n superior: 0,\r\n filedir: item.data.title,\r\n fileToken: this.fileToken,\r\n };\r\n opendirListApi(this.formItem)\r\n .then(async (res) => {\r\n callback(res.data.navList);\r\n })\r\n .catch((res) => {\r\n if (res.status == 110008) {\r\n this.$message.error(res.msg);\r\n this.isShowLogn = true;\r\n this.isShowList = false;\r\n this.loading = false;\r\n } else {\r\n this.catchFun(res);\r\n }\r\n });\r\n }\r\n },\r\n // 自定义显示\r\n renderContent(h, { node, data, root }) {\r\n let that = this;\r\n return h(\r\n 'span',\r\n {\r\n style: {\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n userSelect: 'null',\r\n color: '#cccccc',\r\n display: 'inline-block',\r\n width: '100%',\r\n borderRadis: '5px',\r\n },\r\n on: {\r\n click: () => {\r\n that.clickDir(data, root, node);\r\n },\r\n contextmenu: () => {\r\n // that.handleContextDelFolder(data,root,node);\r\n },\r\n },\r\n },\r\n [\r\n h('span', [\r\n h('Icon', {\r\n props: {\r\n type: !data.isLeaf ? 'md-folder' : 'ios-document-outline',\r\n },\r\n style: {\r\n marginRight: '8px',\r\n },\r\n }),\r\n h(\r\n 'span',\r\n {\r\n attrs: {\r\n title: data.title,\r\n },\r\n },\r\n data.title,\r\n ),\r\n ]),\r\n ],\r\n );\r\n },\r\n /**\r\n * 侧边栏点击事件\r\n * @param {Object} data\r\n */\r\n clickDir(data, root, node) {\r\n let that = this;\r\n that.navItem = data;\r\n that.pathname = data.pathname;\r\n\r\n if (!data.isDir) {\r\n let i = that.editorIndex.findIndex((e) => {\r\n return e.pathname === data.pathname;\r\n });\r\n if (i > -1) {\r\n that.indexEditor = i.toString();\r\n that.toggleEditor();\r\n } else {\r\n let index = that.editorIndex.length;\r\n // 创建tabs\r\n that.editorIndex.push({\r\n tab: true,\r\n index: index.toString(),\r\n title: data.title,\r\n icon: '',\r\n pathname: data.pathname,\r\n });\r\n that.indexEditor = index.toString();\r\n // 创建代码容器\r\n that.initEditor();\r\n that.openfile(data.pathname, true);\r\n }\r\n }\r\n },\r\n //侧边栏右键点击事件\r\n handleContextMenu(data, event, position) {\r\n position.left = Number(position.left.slice(0, -2)) + 75 + 'px';\r\n this.contextData = data;\r\n },\r\n // 文件操作类型 createFolder|创建文件夹 createFile|创建文件 delFolder|删除文件夹或者文件 renameFile|文件重命名\r\n //创建文件夹\r\n handleContextCreateFolder() {\r\n this.formFile.filename = '';\r\n this.formTitle = '创建文件夹';\r\n this.formShow = true;\r\n this.fileType = 'createFolder';\r\n },\r\n //创建文件\r\n handleContextCreateFile() {\r\n this.formFile.filename = '';\r\n this.formTitle = '创建文件';\r\n this.formShow = true;\r\n this.fileType = 'createFile';\r\n },\r\n //删除文件\r\n handleContextDelFolder() {\r\n let that = this;\r\n that.$Modal.confirm({\r\n title: '删除文件夹和文件',\r\n content: '您确定要删除改文件?',\r\n loading: true,\r\n onOk: () => {\r\n let data = {\r\n path: that.contextData.pathname,\r\n fileToken: this.fileToken,\r\n };\r\n delFolder(data)\r\n .then(async (res) => {\r\n that.loopDel(that.navList, that.contextData.nodeKey);\r\n that.$Modal.remove();\r\n that.$message.success('删除成功');\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n },\r\n onCancel: () => {\r\n that.$message.info('取消删除');\r\n },\r\n });\r\n },\r\n //重命名\r\n handleContextRename() {\r\n this.formFile.filename = this.contextData.title;\r\n this.formTitle = '重命名文件';\r\n this.formShow = true;\r\n this.fileType = 'renameFile';\r\n },\r\n //打开文件\r\n openfile(path, is_edit) {\r\n let that = this;\r\n let params = {\r\n filepath: path,\r\n fileToken: this.fileToken,\r\n };\r\n\r\n openfileApi(params)\r\n .then(async (res) => {\r\n if (!is_edit) {\r\n that.modals = true;\r\n that.spinShow = false;\r\n this.initEditor();\r\n }\r\n let data = res.data;\r\n that.code = data.content;\r\n // 保存相对信息\r\n\r\n that.editorList[that.indexEditor].oldCode = that.code;\r\n this.$nextTick((e) => {\r\n that.editorList[that.indexEditor || 0].path = path;\r\n that.editorList[that.indexEditor || 0].pathname = path;\r\n });\r\n //改变属性\r\n that.changeModel(data.mode, that.code);\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n },\r\n /**\r\n * 初始化编辑器\r\n */\r\n initEditor() {\r\n let that = this;\r\n that.$nextTick(() => {\r\n // 初始化编辑器,确保dom已经渲染\r\n that.editor = monaco.editor.create(document.getElementById('container_' + that.indexEditor), {\r\n value: that.code, //编辑器初始显示文字\r\n language: 'sql', //语言支持自行查阅demo\r\n automaticLayout: true, //自动布局\r\n theme: 'vs', //官方自带三种主题vs, hc-black, or vs-dark\r\n foldingStrategy: 'indentation', // 代码可分小段折叠\r\n overviewRulerBorder: false, // 不要滚动条的边框\r\n scrollbar: {\r\n // 滚动条设置\r\n verticalScrollbarSize: 4, // 竖滚动条\r\n horizontalScrollbarSize: 10, // 横滚动条\r\n },\r\n autoIndent: true, // 自动布局\r\n tabSize: 4, // tab缩进长度\r\n autoClosingOvertype: 'always',\r\n });\r\n //添加按键监听\r\n that.editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_S, function () {\r\n that.savefile(that.indexEditor);\r\n });\r\n that.editor.onKeyUp(() => {\r\n // 当键盘按下,判断当前编辑器文本与已保存的编辑器文本是否一致\r\n if (that.editor.getValue() != that.code) {\r\n that.isSave = false;\r\n that.editorIndex[that.indexEditor].icon = 'md-warning';\r\n that.editorList[that.indexEditor].isSave = false;\r\n }\r\n });\r\n that.editorList.push({\r\n editor: that.editor,\r\n oldCode: that.code,\r\n path: this.pathname,\r\n isSave: true,\r\n index: that.indexEditor,\r\n });\r\n });\r\n },\r\n /**\r\n * 切换语言\r\n * @param {Object} mode\r\n */\r\n changeModel(mode, value) {\r\n var oldModel = this.editorList[this.indexEditor].editor.getModel(); //获取旧模型\r\n // var value = this.editor.getValue();//获取旧的文本\r\n //创建新模型,value为旧文本,id为modeId,即语言(language.id)\r\n //modesIds即为支持语言\r\n // var modesIds = monaco.languages.getLanguages().map(function(lang) { return lang.id; });\r\n if (!mode) mode = oldModel.getLanguageId();\r\n // if(!value) value = this.editor.getValue();\r\n\r\n var newModel = monaco.editor.createModel(value, mode);\r\n //将旧模型销毁\r\n if (oldModel) {\r\n oldModel.dispose();\r\n }\r\n //设置新模型\r\n this.editorList[this.indexEditor].editor.setModel(newModel);\r\n },\r\n // 文件操作类型 createFolder|创建文件夹 createFile|创建文件 delFolder|删除文件夹或者文件\r\n handleSubmit(name) {\r\n let that = this;\r\n let data = '';\r\n let dataItem = '';\r\n this.$refs[name].validate((valid) => {\r\n if (valid) {\r\n switch (that.fileType) {\r\n case 'createFolder':\r\n data = {\r\n path: that.contextData.pathname,\r\n name: that.formFile.filename,\r\n fileToken: this.fileToken,\r\n };\r\n createFolder(data)\r\n .then(async (res) => {\r\n dataItem = {\r\n dir: that.contextData.path,\r\n superior: 0,\r\n filedir: that.contextData.title,\r\n fileToken: this.fileToken,\r\n };\r\n that.getListItem(dataItem);\r\n if (that.formShow) that.formShow = false;\r\n that.$message.success('创建成功');\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n break;\r\n case 'createFile':\r\n data = {\r\n path: that.contextData.pathname,\r\n name: that.formFile.filename,\r\n fileToken: this.fileToken,\r\n };\r\n createFile(data)\r\n .then(async (res) => {\r\n dataItem = {\r\n dir: that.contextData.path,\r\n superior: 0,\r\n filedir: that.contextData.title,\r\n fileToken: this.fileToken,\r\n };\r\n that.getListItem(dataItem);\r\n if (that.formShow) that.formShow = false;\r\n that.$message.success('创建成功');\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n break;\r\n case 'renameFile':\r\n data = {\r\n newname: that.contextData.path + '\\\\' + that.formFile.filename,\r\n oldname: that.contextData.pathname,\r\n fileToken: this.fileToken,\r\n };\r\n rename(data)\r\n .then(async (res) => {\r\n that.$set(that.contextData, 'title', that.formFile.filename);\r\n that.$message.success('修改成功');\r\n if (that.formShow) that.formShow = false;\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n break;\r\n }\r\n } else {\r\n this.$message.error('Fail!');\r\n }\r\n });\r\n },\r\n /**\r\n * 退出表单\r\n */\r\n formExit() {\r\n this.formShow = false;\r\n },\r\n\r\n /**\r\n * 处理接口回调\r\n * @param {Object} res\r\n */\r\n catchFun(res) {\r\n if (res.status) {\r\n if (res.status == 400) this.$message.error(res.msg);\r\n if (res.status == 110008) {\r\n // this.$message.error(res.msg);\r\n this.isShowLogn = true;\r\n this.isShowList = false;\r\n this.loading = false;\r\n }\r\n } else {\r\n // this.$message.error('文件编码不被兼容,无法正确读取文件!');\r\n }\r\n //关闭蒙版层\r\n if (this.spinShow) this.spinShow = false;\r\n // 关闭文件列表展示\r\n if (this.loading) this.loading = false;\r\n },\r\n loopDel(data, nodeKey) {\r\n data.forEach((item, index) => {\r\n if (item.nodeKey === nodeKey) {\r\n return data.splice(index, 1);\r\n }\r\n if (item.children.length > 0) {\r\n return this.loopDel(item.children, nodeKey);\r\n }\r\n });\r\n },\r\n /**\r\n * 窗口最大化\r\n */\r\n winChanges() {\r\n if (this.className) {\r\n this.className = '';\r\n } else {\r\n this.className = 'diy-fullscreen';\r\n }\r\n },\r\n /**\r\n * 切换选项卡\r\n * @param {Object} index\r\n */\r\n toggleEditor() {\r\n let index = Number(this.indexEditor);\r\n this.code = this.editorList[index].oldCode; //设置文件打开时的代码\r\n this.editor = this.editorList[index].editor; //设置编辑器实例\r\n },\r\n isEditMark(row) {\r\n try {\r\n row.is_edit = true;\r\n this.$nextTick((e) => {\r\n this.$refs.mark.focus();\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n },\r\n isEditBlur(row) {\r\n row.is_edit = false;\r\n let data = {\r\n full_path: row.real_path,\r\n mark: row.mark,\r\n };\r\n markSave(this.fileToken, data)\r\n .then((res) => {\r\n // this.$message.success(res.msg);\r\n })\r\n .catch((err) => {\r\n this.$message.error(err.msg);\r\n });\r\n },\r\n handleTabRemove(index) {\r\n let that = this;\r\n\r\n // 关闭选项卡\r\n that.editorIndex[index].tab = false; // 关闭选项卡\r\n // 判断当前文件有没有保存\r\n if (!that.editorList[index].isSave) {\r\n that.$Modal.confirm({\r\n title: '文件未保存',\r\n content: '您是否需要保存当前文件',\r\n loading: true,\r\n onOk: () => {\r\n // 保存文件\r\n that.savefile(index);\r\n },\r\n onCancel: () => {\r\n that.$message.info('取消保存');\r\n },\r\n });\r\n }\r\n },\r\n //编辑器状态变化\r\n editModalChange() {\r\n let that = this;\r\n that.editorList.forEach(function (value, index) {\r\n if (value.isSave === false) {\r\n if (confirm(`${that.editorIndex[index].title}文件未保存,是否要保存该文件`)) {\r\n // 保存当前文件\r\n that.savefile(index, true);\r\n } else {\r\n that.$message.info(`已取消${that.editorIndex[index].title}文件保存`);\r\n }\r\n }\r\n // 销毁当前编辑器\r\n that.editorList[index].editor.dispose();\r\n that.editorList[index].editor = null;\r\n });\r\n // 初始话数据\r\n that.modals = false; //编辑器开关\r\n that.editor = ''; //当前编辑器对象\r\n that.editorIndex = [\r\n //选项卡数组\r\n {\r\n tab: true,\r\n index: '0',\r\n title: '',\r\n icon: '',\r\n },\r\n ];\r\n that.editorList = []; //编辑器数组\r\n that.indexEditor = '0'; //当前编辑器索引\r\n that.code = ''; //当前文件打开时的内容\r\n that.navList = []; //左侧导航数据\r\n that.navItem = {}; //左侧导航点击是选中的数据\r\n that.contextData = null; //左侧导航右键点击是产生的数据对象\r\n },\r\n },\r\n};\r\n</script>\r\n<style scoped>\r\n.file-left ::v-deep .ivu-tree-title {\r\n font-weight: 500;\r\n font-family: SourceHanSansSC-regular, '微软雅黑', Arial, Helvetica, sans-serif;\r\n}\r\n.file-content ::v-deep .ivu-tabs.ivu-tabs-card > .ivu-tabs-bar .ivu-tabs-tab-active {\r\n border-bottom: 1px solid orange;\r\n}\r\n</style>\r\n<style lang=\"scss\" scoped>\r\n.file-left {\r\n padding-left: 10px;\r\n color: #cccccc;\r\n}\r\n.mr5 {\r\n margin-right: 5px;\r\n}\r\n.backs-box {\r\n display: flex;\r\n justify-content: space-between;\r\n min-width: 800px;\r\n max-width: max-content;\r\n border: 1px solid #cfcfcf;\r\n background: #f6f6f6;\r\n .refresh {\r\n background: #fff;\r\n border-left: 1px solid #cfcfcf;\r\n padding: 0 8px 0 10px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n }\r\n .refresh {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n }\r\n .refresh:hover,\r\n .back:hover {\r\n background: #2d8cf0;\r\n border-color: #38983b;\r\n color: #fff;\r\n }\r\n}\r\n.file-name {\r\n cursor: pointer;\r\n}\r\n.backs {\r\n cursor: pointer;\r\n display: inline-block;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n .back {\r\n height: 100%;\r\n background: #fff;\r\n border-right: 1px solid #cfcfcf;\r\n padding: 6px 8px 0 10px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n }\r\n .item:last-child {\r\n padding-right: 5px !important;\r\n }\r\n .item {\r\n padding: 0 0 0 8px;\r\n font-size: 12px;\r\n line-height: 33px;\r\n color: #555;\r\n display: flex;\r\n align-items: center;\r\n .key {\r\n margin-right: 3px;\r\n }\r\n }\r\n .item:hover {\r\n background: #fff;\r\n }\r\n}\r\n::v-deep .CodeMirror {\r\n height: 70vh !important;\r\n}\r\n.file-box {\r\n display: flex;\r\n align-items: flex-start;\r\n justify-content: space-between;\r\n position: relative;\r\n min-height: calc(100% - 35px);\r\n overflow: hidden;\r\n}\r\n.file-box {\r\n .file-left {\r\n position: absolute;\r\n top: 58px;\r\n left: 0;\r\n height: calc(100% - 58px);\r\n\r\n width: 25%;\r\n max-width: 250px;\r\n overflow: auto;\r\n background-color: #292929;\r\n }\r\n .file-fix {\r\n flex: 1;\r\n max-width: 250px;\r\n min-height: calc(100% - 35px);\r\n\r\n min-height: calc(100% - 35px);\r\n background-color: #292929;\r\n }\r\n}\r\n.file-box {\r\n .file-content {\r\n flex: 3;\r\n overflow: hidden;\r\n min-height: calc(100% - 35px);\r\n height: 100%;\r\n }\r\n}\r\n::v-deep .el-dialog__body {\r\n padding: 0 !important;\r\n height: 80vh;\r\n max-height: 80vh;\r\n}\r\n.diy-button {\r\n height: 35px;\r\n padding: 0 15px;\r\n font-size: 13px;\r\n text-align: center;\r\n color: #fff;\r\n border: 0;\r\n border-right: 1px solid #4c4c4c;\r\n cursor: pointer;\r\n border-radius: 0;\r\n background-color: #565656;\r\n}\r\n.form-mask {\r\n z-index: -1;\r\n width: 100%;\r\n height: 100%;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n margin: auto;\r\n background: rgba(0, 0, 0, 0.3);\r\n}\r\n.table-mark {\r\n cursor: text;\r\n}\r\n.table-mark:hover {\r\n border: 1px solid #c2c2c2;\r\n padding: 3px 5px;\r\n}\r\n.mark ::v-deep .el-input__inner {\r\n background: #fff;\r\n border-radius: 0.39rem;\r\n}\r\n.mark ::v-deep .el-input__inner,\r\n.el-input__inner:hover,\r\n.el-input__inner:focus {\r\n border: transparent;\r\n box-shadow: none;\r\n}\r\n.diy-from-header {\r\n height: 30px;\r\n line-height: 30px;\r\n background-color: #fff;\r\n text-align: left;\r\n padding-left: 20px;\r\n font-size: 16px;\r\n margin-bottom: 15px;\r\n\r\n span {\r\n display: inline-block;\r\n float: right;\r\n color: #999;\r\n text-align: right;\r\n font-size: 12px;\r\n width: 280px;\r\n word-break: keep-all; /* 不换行 */\r\n white-space: nowrap; /* 不换行 */\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n}\r\n.diy-from {\r\n z-index: 9999;\r\n width: 400px;\r\n height: 100px;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n margin: auto;\r\n text-align: center;\r\n background-color: #2f2f2f;\r\n}\r\n.top-button {\r\n background-color: #292929;\r\n}\r\n.show-info {\r\n background-color: #292929;\r\n color: #fff;\r\n width: 25%;\r\n max-width: 250px;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 1122;\r\n .diy-button {\r\n width: 50%;\r\n height: 25px;\r\n line-height: 8px;\r\n }\r\n .diy-button-list {\r\n display: flex;\r\n align-items: center;\r\n }\r\n .show-text {\r\n padding-left: 10px;\r\n word-break: keep-all; /* 不换行 */\r\n white-space: nowrap; /* 不换行 */\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n padding: 7px 5px;\r\n }\r\n}\r\n\r\nbody ::v-deep .ivu-select-dropdown {\r\n background: #fff;\r\n}\r\n::v-deep .el-tabs__item {\r\n background-color: #fff;\r\n}\r\n::v-deep .el-tree {\r\n background-color: #292929 !important;\r\n}\r\n.file-box {\r\n .file-left::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n}\r\n.file-box {\r\n .file-left::-webkit-scrollbar-thumb {\r\n border-radius: 10px;\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n background: rgba(255, 255, 255, 0.2);\r\n }\r\n}\r\n.file-box {\r\n .file-left::-webkit-scrollbar-track {\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n border-radius: 0;\r\n background: rgba(0, 0, 0, 0.1);\r\n }\r\n}\r\n.diy-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n .diy-header-icon {\r\n margin-right: 30px;\r\n cursor: pointer;\r\n }\r\n .diy-header-icon:hover {\r\n opacity: 0.8;\r\n }\r\n}\r\n::v-deep .diy-fullscreen {\r\n overflow: hidden;\r\n .ivu-modal {\r\n top: 0px;\r\n left: 0px;\r\n right: 0px;\r\n bottom: 0px;\r\n height: 100%;\r\n width: 100% !important;\r\n .ivu-modal-content {\r\n height: 100%;\r\n .ivu-modal-body {\r\n height: 100%;\r\n }\r\n }\r\n .ivu-tabs {\r\n .ivu-tabs-content-animated {\r\n height: 92%;\r\n background-color: #2f2f2f !important;\r\n }\r\n }\r\n .ivu-tabs-content {\r\n height: 100%;\r\n }\r\n .ivu-tabs {\r\n .ivu-tabs-tabpane {\r\n height: 92%;\r\n }\r\n }\r\n }\r\n}\r\n::v-deep .ivu-modal {\r\n top: 70px;\r\n}\r\n.ivu-modal-content {\r\n .ivu-modal-body {\r\n min-height: 632px;\r\n height: 80vh;\r\n overflow: hidden;\r\n }\r\n}\r\n.ivu-tabs {\r\n .ivu-tabs-content-animated {\r\n min-height: 580px;\r\n height: 73vh;\r\n margin-top: -1px;\r\n }\r\n .ivu-tabs-tabpane {\r\n min-height: 580px;\r\n height: 73vh;\r\n margin-top: -1px;\r\n }\r\n}\r\n.ivu-tabs-nav .ivu-tabs-tab .ivu-icon {\r\n color: #f00;\r\n}\r\n::v-deepbody .ivu-select-dropdown .ivu-dropdown-transfer {\r\n background: red !important;\r\n}\r\n.file-left ::v-deep .ivu-select-dropdown.ivu-dropdown-transfer .ivu-dropdown-menu .ivu-dropdown-item:hover {\r\n background-color: #e5e5e5 !important;\r\n}\r\n::v-deep .ivu-tabs.ivu-tabs-card > .ivu-tabs-bar .ivu-tabs-nav-container {\r\n background-color: #333;\r\n}\r\n</style>\r\n"],"mappings":"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","ignoreList":[]}]}
|