{"remainingRequest":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\babel-loader\\lib\\index.js!E:\\boman-framwork\\ruoyi-ui\\node_modules\\eslint-loader\\index.js??ref--13-0!E:\\boman-framwork\\ruoyi-ui\\src\\utils\\flow-desinger.js","dependencies":[{"path":"E:\\boman-framwork\\ruoyi-ui\\src\\utils\\flow-desinger.js","mtime":1623215520357},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:InVzZSBzdHJpY3QiOwoKdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKCJFOi9ib21hbi1mcmFtd29yay9ydW95aS11aS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHQiKS5kZWZhdWx0OwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7Cgp2YXIgX2RlZmluZVByb3BlcnR5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZSgiRTovYm9tYW4tZnJhbXdvcmsvcnVveWktdWkvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkiKSk7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsbC5qcyIpOwoKdmFyIF9pY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCIuL2ljb24uanMiKSk7CgpmdW5jdGlvbiBGbG93RGVzaWduZXIoZGlhZ3JhbURpdiwgZXZlbnQpIHsKICB2YXIgRyA9IGdvLkdyYXBoT2JqZWN0Lm1ha2U7CiAgdmFyIF90aGlzID0ge307CiAgdmFyIF9kZXNpZ25lciA9IHt9OwogIHZhciBteVBhbGV0dGUgPSBudWxsOwogIHZhciBfanNvbk5ld1N0ZXAgPSB7CiAgICBrZXk6IGd1aWQoKSwKICAgIHRleHQ6ICLlrqHmibnoioLngrkiLAogICAgcmVtYXJrOiAnJywKICAgIHR5cGU6IDAKICB9OwogIC8qKiDlpITnkIbkvKDlhaXkuovku7YgKi8KCiAgaWYgKGV2ZW50LnNob3dFZGl0Tm9kZSkgewogICAgLy/nvJbovpHoioLngrkKICAgIF90aGlzLnNob3dFZGl0Tm9kZSA9IGV2ZW50LnNob3dFZGl0Tm9kZTsKICB9CgogIGlmIChldmVudC5TZWxlY3Rpb25EZWxldGVkKSB7CiAgICAvL+WIoOmZpOS6i+S7tgogICAgX3RoaXMuU2VsZWN0aW9uRGVsZXRlZCA9IGV2ZW50LlNlbGVjdGlvbkRlbGV0ZWQ7CiAgfQoKICBpZiAoZXZlbnQuTGlua0RyYXduKSB7CiAgICAvL+e6v+eahOeUn+aIkOS6i+S7tgogICAgX3RoaXMuTGlua0RyYXduID0gZXZlbnQuTGlua0RyYXduOwogIH0KCiAgaWYgKGV2ZW50LmV4dGVybmFsb2JqZWN0c2Ryb3BwZWQpIHsKICAgIC8v6IqC54K555qE55Sf5oiQ5LqL5Lu2CiAgICBfdGhpcy5leHRlcm5hbG9iamVjdHNkcm9wcGVkID0gZXZlbnQuZXh0ZXJuYWxvYmplY3RzZHJvcHBlZDsKICB9CgogIGlmIChldmVudC5MaW5rUmVsaW5rZWQpIHsKICAgIC8v6L+e57q/5L+u5pS5CiAgICBfdGhpcy5MaW5rUmVsaW5rZWQgPSBldmVudC5MaW5rUmVsaW5rZWQ7CiAgfQogIC8qKiAtLS0tLS0tLXB1YmxpYyBtZXRob2QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiovCgogIC8qKg0KICAgKiDliJ3lp4vljJblm77kvovpnaLmnb8NCiAgICogMOWuoeaJueiKgueCuSAx5byA5aeL6IqC54K5IDLnu5PmnZ/oioLngrkgM+aTjeS9nOiKgueCuSA05pyN5Yqh6IqC54K5DQogICAqIEByZXR1cm5zIHsqfQ0KICAgKi8KCgogIHRoaXMuaW5pdFRvb2xiYXIgPSBmdW5jdGlvbiAoZGl2LCBtb2R1bGVUeXBlKSB7CiAgICB2YXIgbW9kZWxBcnIgPSBbLy8geyBrZXk6IGd1aWQoKSwgdGV4dDogIuW8gOWniyIsIGZpZ3VyZTogIlRlcm1pbmF0b3IiLCBmaWxsOiAiIzRmYmE0ZiIsIHR5cGU6IDEgfSwKICAgIHsKICAgICAga2V5OiBndWlkKCksCiAgICAgIHRleHQ6ICLlrqHmibnoioLngrkiLAogICAgICByZW1hcms6ICcnLAogICAgICB0eXBlOiAwLAogICAgICBjYXRlZ29yeTogJ0FwcHJvdmFsJwogICAgfSwgewogICAgICBrZXk6IGd1aWQoKSwKICAgICAgdGV4dDogIuaTjeS9nOiKgueCuSIsCiAgICAgIHJlbWFyazogJycsCiAgICAgIHR5cGU6IDQsCiAgICAgIGNhdGVnb3J5OiAnT3BlcmF0aW9uJwogICAgfSwgewogICAgICBrZXk6IGd1aWQoKSwKICAgICAgdGV4dDogIuacjeWKoeiKgueCuSIsCiAgICAgIHJlbWFyazogJycsCiAgICAgIHR5cGU6IDMsCiAgICAgIGNhdGVnb3J5OiAnU2VydmljZScKICAgIH0sIHsKICAgICAga2V5OiBndWlkKCksCiAgICAgIHRleHQ6ICLlrZDmtYHnqIvoioLngrkiLAogICAgICByZW1hcms6ICcnLAogICAgICB0eXBlOiA2LAogICAgICBjYXRlZ29yeTogJ1N1YnByb2Nlc3NlcycKICAgIH0gLy8geyBrZXk6IGd1aWQoKSwgdGV4dDogIue7k+adnyIsIGZpZ3VyZTogIlRlcm1pbmF0b3IiLCBmaWxsOiAiI0NFMDYyMCIsIHR5cGU6IDIgfQogICAgXTsKCiAgICBpZiAoIW1vZHVsZVR5cGUpIHsKICAgICAgbW9kZWxBcnIgPSBbewogICAgICAgIGtleTogZ3VpZCgpLAogICAgICAgIHRleHQ6ICLlrqHmibnoioLngrkiLAogICAgICAgIHJlbWFyazogJycsCiAgICAgICAgdHlwZTogMCwKICAgICAgICBjYXRlZ29yeTogJ0FwcHJvdmFsJwogICAgICB9XTsKICAgIH0KCiAgICBpZiAoIW15UGFsZXR0ZSkgewogICAgICB2YXIgUGFsZXR0ZSA9IEcoZ28uUGFsZXR0ZSwgZGl2LCAvLyDlv4XpobvmmK9ESVblhYPntKAKICAgICAgewogICAgICAgIG1heFNlbGVjdGlvbkNvdW50OiAzLAogICAgICAgIG5vZGVUZW1wbGF0ZU1hcDogX2Rlc2lnbmVyLm5vZGVUZW1wbGF0ZU1hcCwKICAgICAgICAvLyDot5/orr7orqHlm77lhbHlkIzkuIDlpZfmoLflvI/mqKHmnb8KICAgICAgICBtb2RlbDogbmV3IGdvLkdyYXBoTGlua3NNb2RlbChtb2RlbEFycikKICAgICAgfSk7CiAgICAgIG15UGFsZXR0ZSA9IFBhbGV0dGU7CiAgICB9IGVsc2UgewogICAgICBteVBhbGV0dGUubW9kZWwubm9kZURhdGFBcnJheSA9IG1vZGVsQXJyOwogICAgfQoKICAgIGNvbnNvbGUubG9nKG15UGFsZXR0ZSwgMjIyMjIyKTsKICAgIHJldHVybiBteVBhbGV0dGU7CiAgfTsKICAvKioNCiAgICog5Zyo6K6+6K6h6Z2i5p2/5Lit5pi+56S65rWB56iL5Zu+DQogICAqIEBwYXJhbSBmbG93RGF0YSAg5rWB56iL5Zu+anNvbuaVsOaNrg0KICAgKi8KCgogIHRoaXMuZGlzcGxheUZsb3cgPSBmdW5jdGlvbiAoZmxvd0RhdGEpIHsKICAgIGlmICghZmxvd0RhdGEpIHJldHVybjsKICAgIF9kZXNpZ25lci5tb2RlbCA9IGdvLk1vZGVsLmZyb21Kc29uKGZsb3dEYXRhKTsKICAgIHZhciBwb3MgPSBfZGVzaWduZXIubW9kZWwubW9kZWxEYXRhLnBvc2l0aW9uOyAvLyBpZiAocG9zKSBfZGVzaWduZXIuaW5pdGlhbFBvc2l0aW9uID0gZ28uUG9pbnQucGFyc2UocG9zKTsKCiAgICB0aGlzLmRpYWdyYW0gPSBfZGVzaWduZXI7IC8vIOabtOaUueaJgOaciei/nue6v+S4remXtOeahOaWh+acrOiDjOaZr+iJsgoKICAgIHNldExpbmtUZXh0QmcoKTsKICB9OwogIC8qKg0KICAgKiDliJvlu7rmlrDmraXpqqQNCiAgICovCgoKICB0aGlzLmNyZWF0ZVN0ZXAgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIganNvbk5ld1N0ZXAgPSB7CiAgICAgIGtleTogX2pzb25OZXdTdGVwLmtleSwKICAgICAgdGV4dDogX2pzb25OZXdTdGVwLnRleHQKICAgIH07CiAgICBqc29uTmV3U3RlcC5sb2MgPSAiMjcwIDE0MCI7IC8vIOKAnOaWsOatpemqpOKAneaYvuekuueahOS9jee9rgoKICAgIF9kZXNpZ25lci5tb2RlbC5hZGROb2RlRGF0YShqc29uTmV3U3RlcCk7CiAgfTsKICAvKioNCiAgICog6I635Y+W5rWB56iL5Zu+5pWw5o2uDQogICAqIEByZXR1cm5zIHsqfQ0KICAgKi8KCgogIHRoaXMuZ2V0Rmxvd0RhdGEgPSBmdW5jdGlvbiAoKSB7CiAgICBfZGVzaWduZXIubW9kZWwubW9kZWxEYXRhLnBvc2l0aW9uID0gZ28uUG9pbnQuc3RyaW5naWZ5KF9kZXNpZ25lci5wb3NpdGlvbik7CiAgICByZXR1cm4gX2Rlc2lnbmVyLm1vZGVsLnRvSnNvbigpOwogIH07CiAgLyoqDQogICAqIOajgOmqjOa1geeoi+WbvuaYr+WQpuinhOiMgw0KICAgKi8KCgogIHRoaXMuY2hlY2tEYXRhID0gZnVuY3Rpb24gKCkgewogICAgdmFyIGVyck1zZyA9ICIiOyAvLyDmo4Dmn6XvvJrmr4/kuKrmraXpqqTlv4XpobvljIXlkKvop5LoibIKCiAgICBpZiAoIV9kZXNpZ25lci5tb2RlbC5ub2RlRGF0YUFycmF5KSByZXR1cm4gJ+ivt+e7mOWItua1geeoi+Wbvic7IC8vICQuZWFjaChfZGVzaWduZXIubW9kZWwubm9kZURhdGFBcnJheSwgZnVuY3Rpb24oaSwgaXRlbSkgewogICAgLy8gICAgIGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgicmVtYXJrIikgfHwgaXRlbS5yZW1hcmsgPT09ICIiKSB7CiAgICAvLyAgICAgICAgIGVyck1zZyA9ICLor7fkuLrmraXpqqTjgJAiICsgaXRlbS50ZXh0ICsgIuOAkeiuvue9ruWkh+azqH4iOwogICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAvLyAgICAgfQogICAgLy8gfSk7CgogICAgX2Rlc2lnbmVyLm1vZGVsLm5vZGVEYXRhQXJyYXkubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgicmVtYXJrIikgfHwgaXRlbS5yZW1hcmsgPT09ICIiKSB7CiAgICAgICAgZXJyTXNnID0gIuivt+S4uuatpemqpOOAkCIgKyBpdGVtLnRleHQgKyAi44CR6K6+572u5aSH5rOofiI7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9KTsKCiAgICByZXR1cm4gZXJyTXNnOwogIH07CiAgLyoqIC0tLS0tLS0tcHVibGljIG1ldGhvZC0tLS0tLS0tLS0tLS1lbmQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qKi8KCgogIHRoaXMuZGlhZ3JhbSA9IGluaXQoZGlhZ3JhbURpdik7CiAgLyoqIC0tLS0tLS0tcHJpdmF0ZSBtZXRob2QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiovCgogIC8qKg0KICAgKiDliJ3lp4vljJbmtYHnqIvorr7orqHlmagNCiAgICogQHBhcmFtIGRpdklkIOiuvuiuoeWZqERpdg0KICAgKiANCiAgICogbm9kZSB0eXBlIA0KICAgKi8KCiAgZnVuY3Rpb24gaW5pdChkaXZJZCkgewogICAgdmFyIF9HLCBfRzIsIF9HMywgX0c0OwoKICAgIF9kZXNpZ25lciA9IEcoZ28uRGlhZ3JhbSwgZGl2SWQsIC8vIG11c3QgbmFtZSBvciByZWZlciB0byB0aGUgRElWIEhUTUwgZWxlbWVudAogICAgewogICAgICAvLyBncmlkOiBHKGdvLlBhbmVsLCAiR3JpZCIsICDog4zmma/moLwKICAgICAgLy8gICAgIEcoZ28uU2hhcGUsICJMaW5lSCIsIHsgc3Ryb2tlOiAibGlnaHRncmF5Iiwgc3Ryb2tlV2lkdGg6IDAuNSB9KSwKICAgICAgLy8gICAgIEcoZ28uU2hhcGUsICJMaW5lSCIsIHsgc3Ryb2tlOiAiZ3JheSIsIHN0cm9rZVdpZHRoOiAwLjUsIGludGVydmFsOiAxMCB9KSwKICAgICAgLy8gICAgIEcoZ28uU2hhcGUsICJMaW5lViIsIHsgc3Ryb2tlOiAibGlnaHRncmF5Iiwgc3Ryb2tlV2lkdGg6IDAuNSB9KSwKICAgICAgLy8gICAgIEcoZ28uU2hhcGUsICJMaW5lViIsIHsgc3Ryb2tlOiAiZ3JheSIsIHN0cm9rZVdpZHRoOiAwLjUsIGludGVydmFsOiAxMCB9KQogICAgICAvLyApLAogICAgICBhbGxvd0Ryb3A6IHRydWUsCiAgICAgIC8vIG11c3QgYmUgdHJ1ZSB0byBhY2NlcHQgZHJvcHMgZnJvbSB0aGUgUGFsZXR0ZQogICAgICBhbGxvd1RleHRFZGl0OiBmYWxzZSwKICAgICAgYWxsb3dIb3Jpem9udGFsU2Nyb2xsOiB0cnVlLAogICAgICBhbGxvd1ZlcnRpY2FsU2Nyb2xsOiB0cnVlLAogICAgICAvLyAiY2xpY2tDcmVhdGluZ1Rvb2wuaXNEb3VibGVDbGljayI6ZmFsc2UsCiAgICAgIC8vICJjbGlja0NyZWF0aW5nVG9vbC5hcmNoZXR5cGVOb2RlRGF0YSI6IHt9LCAvLyDlj4zlh7vliJvlu7rmlrDmraXpqqQKICAgICAgLy8gImRyYWdnaW5nVG9vbC5kcmFnc0xpbmsiOiB0cnVlLAogICAgICAiZHJhZ2dpbmdUb29sLmlzR3JpZFNuYXBFbmFibGVkIjogdHJ1ZSwKICAgICAgLy8gImxpbmtpbmdUb29sLmlzVW5jb25uZWN0ZWRMaW5rVmFsaWQiOiB0cnVlLAogICAgICAibGlua2luZ1Rvb2wucG9ydEdyYXZpdHkiOiAyMCwKICAgICAgLy8gInJlbGlua2luZ1Rvb2wuaXNVbmNvbm5lY3RlZExpbmtWYWxpZCI6IHRydWUsCiAgICAgICJyZWxpbmtpbmdUb29sLnBvcnRHcmF2aXR5IjogMjAsCiAgICAgICJyZWxpbmtpbmdUb29sLmZyb21IYW5kbGVBcmNoZXR5cGUiOiBHKGdvLlNoYXBlLCAiRGlhbW9uZCIsIHsKICAgICAgICBzZWdtZW50SW5kZXg6IDAsCiAgICAgICAgY3Vyc29yOiAicG9pbnRlciIsCiAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKDgsIDgpLAogICAgICAgIGZpbGw6ICJ0b21hdG8iLAogICAgICAgIHN0cm9rZTogImRhcmtyZWQiCiAgICAgIH0pLAogICAgICAicmVsaW5raW5nVG9vbC50b0hhbmRsZUFyY2hldHlwZSI6IEcoZ28uU2hhcGUsICJEaWFtb25kIiwgewogICAgICAgIHNlZ21lbnRJbmRleDogLTEsCiAgICAgICAgY3Vyc29yOiAicG9pbnRlciIsCiAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKDgsIDgpLAogICAgICAgIGZpbGw6ICJkYXJrcmVkIiwKICAgICAgICBzdHJva2U6ICJ0b21hdG8iCiAgICAgIH0pLAogICAgICAibGlua1Jlc2hhcGluZ1Rvb2wuaGFuZGxlQXJjaGV0eXBlIjogRyhnby5TaGFwZSwgIkRpYW1vbmQiLCB7CiAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKDcsIDcpLAogICAgICAgIGZpbGw6ICJsaWdodGJsdWUiLAogICAgICAgIHN0cm9rZTogImRlZXBza3libHVlIgogICAgICB9KSwKICAgICAgInVuZG9NYW5hZ2VyLmlzRW5hYmxlZCI6IGZhbHNlCiAgICB9KTsgLy8g5rWB56iL5Zu+5aaC5p6c5pyJ5Y+Y5Yqo77yM5YiZ5o+Q56S655So5oi35L+d5a2YCgogICAgX2Rlc2lnbmVyLmFkZERpYWdyYW1MaXN0ZW5lcigiTW9kaWZpZWQiLCBvbkRpYWdyYW1Nb2RpZmllZCk7IC8vIOWPjOWHu+S6i+S7tgoKCiAgICBfZGVzaWduZXIuYWRkRGlhZ3JhbUxpc3RlbmVyKCJPYmplY3REb3VibGVDbGlja2VkIiwgb25PYmplY3REb3VibGVDbGlja2VkKTsgLy8g56e76Zmk5LqL5Lu2CgoKICAgIF9kZXNpZ25lci5hZGREaWFncmFtTGlzdGVuZXIoIlNlbGVjdGlvbkRlbGV0ZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICBlLnN1YmplY3QuZWFjaChmdW5jdGlvbiAobikgewogICAgICAgIF90aGlzLlNlbGVjdGlvbkRlbGV0ZWQobi5kYXRhKTsKICAgICAgfSk7CiAgICB9KTsgLy/nur/nmoTnlJ/miJAKCgogICAgX2Rlc2lnbmVyLmFkZERpYWdyYW1MaXN0ZW5lcigiTGlua0RyYXduIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgZS5zdWJqZWN0LmRhdGEua2V5ID0gZ3VpZCgpOwoKICAgICAgX3RoaXMuTGlua0RyYXduKGUuc3ViamVjdC5kYXRhKTsKICAgIH0pOyAvL+e6v+eahOmHjee7mAoKCiAgICBfZGVzaWduZXIuYWRkRGlhZ3JhbUxpc3RlbmVyKCJMaW5rUmVsaW5rZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICBfdGhpcy5MaW5rUmVsaW5rZWQoZS5zdWJqZWN0LmRhdGEpOwogICAgfSk7IC8v5re75Yqg55uR5ZCs6IqC54K555Sf5oiQ5LqL5Lu2CgoKICAgIF9kZXNpZ25lci5hZGREaWFncmFtTGlzdGVuZXIoImV4dGVybmFsb2JqZWN0c2Ryb3BwZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICAvLyB2YXIganNvbk5ld1N0ZXAgPSB7a2V5Ol9qc29uTmV3U3RlcC5rZXksIHRleHQ6X2pzb25OZXdTdGVwLnRleHR9OwogICAgICBlLnN1YmplY3QuZWFjaChmdW5jdGlvbiAobikgewogICAgICAgIC8v5b6X5Yiw5LuOUGFsZXR0ZeaLlui/h+adpeeahOiKgueCuQogICAgICAgIF90aGlzLmV4dGVybmFsb2JqZWN0c2Ryb3BwZWQobi5kYXRhKTsKICAgICAgfSk7IC8vIGpzb25OZXdTdGVwLmxvYyA9ICItMTAwIDAiOy8vIOKAnOaWsOatpemqpOKAneaYvuekuueahOS9jee9rgogICAgICAvLyBqc29uTmV3U3RlcC50eXBlID0gMCAKICAgICAgLy8ganNvbk5ld1N0ZXAua2V5ID0gZ3VpZCgpCiAgICAgIC8vIC8vIF9kZXNpZ25lci5tb2RlbC5hZGROb2RlRGF0YShqc29uTmV3U3RlcCk7CiAgICAgIC8vIF90aGlzLmV4dGVybmFsb2JqZWN0c2Ryb3BwZWQoanNvbk5ld1N0ZXApCiAgICB9KTsgLy/nm5HlkKzoioLngrnmiJbnur/nmoTliKDpmaTliY3kuovku7YKCgogICAgX2Rlc2lnbmVyLmNvbW1hbmRIYW5kbGVyLmNhbkRlbGV0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uIChlKSB7CiAgICAgIC8v55So5L6L6I635Y+W6YCJ5Lit55qE6IqC54K55oiW57q/IAogICAgICByZXR1cm4gX2Rlc2lnbmVyLnNlbGVjdGlvbi5hbGwoZnVuY3Rpb24gKG5vZGVPckxpbmspIHsKICAgICAgICAvL+WIpOaWreaYr+WQpuaYr+W8gOWni+aIluiAhee7k+adn+iKgueCuQogICAgICAgIGlmIChub2RlT3JMaW5rLmRhdGEudHlwZSA9PT0gMSB8fCBub2RlT3JMaW5rLmRhdGEudHlwZSA9PT0gMikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfTsgLy8gdmFyIHRvb2wgPSBfZGVzaWduZXIudG9vbE1hbmFnZXIuY2xpY2tDcmVhdGluZ1Rvb2w7CiAgICAvLyB0b29sLmluc2VydFBhcnQgPSAobG9jKSA9PiB7CiAgICAvLyAgICAgdmFyIGpzb25OZXdTdGVwID0ge2tleTpfanNvbk5ld1N0ZXAua2V5LCB0ZXh0Ol9qc29uTmV3U3RlcC50ZXh0fTsKICAgIC8vICAgICBqc29uTmV3U3RlcC50eXBlID0gMCAKICAgIC8vICAgICBqc29uTmV3U3RlcC5sb2MgPSBgJHtsb2MueH0gJHtsb2MueX1gOwogICAgLy8gICAgIF9kZXNpZ25lci5tb2RlbC5hZGROb2RlRGF0YShqc29uTmV3U3RlcCk7CiAgICAvLyAgICAgX3RoaXMuZXh0ZXJuYWxvYmplY3RzZHJvcHBlZChqc29uTmV3U3RlcCkKICAgIC8vIH0KICAgIC8vIOa1geeoi+atpemqpOeahOagt+W8j+aooeadvwogICAgLy8gX2Rlc2lnbmVyLm5vZGVUZW1wbGF0ZSA9IGFwcHJvdmFsTm9kZVRlbXBsYXRlKCk7CiAgICAvLyBfZGVzaWduZXIubm9kZVRlbXBsYXRlID0gb3BlcmF0aW9uTm9kZVRlbXBsYXRlKCk7CiAgICAvLyBfZGVzaWduZXIubm9kZVRlbXBsYXRlTWFwLmFkZCgnQXBwcm92YWwnLGFwcHJvdmFsTm9kZVRlbXBsYXRlKQogICAgLy8g5pyN5Yqh6IqC54K5CgoKICAgIF9kZXNpZ25lci5ub2RlVGVtcGxhdGVNYXAuYWRkKCdTdWJwcm9jZXNzZXMnLCBHKGdvLk5vZGUsICJTcG90IiwgewogICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyCiAgICB9LCBuZXcgZ28uQmluZGluZygibG9jYXRpb24iLCAibG9jIiwgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSwgewogICAgICBzZWxlY3RhYmxlOiB0cnVlLAogICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogbWFrZU5vZGVTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSgpCiAgICB9LCBuZXcgZ28uQmluZGluZygiYW5nbGUiKS5tYWtlVHdvV2F5KCksIC8vIHRoZSBtYWluIG9iamVjdCBpcyBhIFBhbmVsIHRoYXQgc3Vycm91bmRzIGEgVGV4dEJsb2NrIHdpdGggYSBTaGFwZQogICAgRyhnby5QYW5lbCwgIkF1dG8iLCB7CiAgICAgIG5hbWU6ICJQQU5FTCIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJkZXNpcmVkU2l6ZSIsICJzaXplIiwgZ28uU2l6ZS5wYXJzZSkubWFrZVR3b1dheShnby5TaXplLnN0cmluZ2lmeSksIEcoZ28uU2hhcGUsICJSb3VuZGVkUmVjdGFuZ2xlIiwgLy8gZGVmYXVsdCBmaWd1cmUKICAgIHsKICAgICAgcG9ydElkOiAiIiwKICAgICAgLy8gdGhlIGRlZmF1bHQgcG9ydDogaWYgbm8gc3BvdCBvbiBsaW5rIGRhdGEsIHVzZSBjbG9zZXN0IHNpZGUKICAgICAgbmFtZTogIlBJUEUiLAogICAgICBmcm9tTGlua2FibGU6IHRydWUsCiAgICAgIHRvTGlua2FibGU6IHRydWUsCiAgICAgIGN1cnNvcjogInBvaW50ZXIiLAogICAgICBmaWxsOiAid2hpdGUiLAogICAgICAvLyBkZWZhdWx0IGNvbG9yCiAgICAgIHN0cm9rZVdpZHRoOiAxLAogICAgICBzdHJva2U6ICIjRENERUUyIgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImZpZ3VyZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlIiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VEYXNoQXJyYXkiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZVdpZHRoIiksIG5ldyBnby5CaW5kaW5nKCJmaWxsIikpLCBHKGdvLlNoYXBlLCB7CiAgICAgIG1hcmdpbjogNSwKICAgICAgZmlsbDogJ2JsYWNrJywKICAgICAgc3Ryb2tlV2lkdGg6IDAsCiAgICAgIHdpZHRoOiAyOCwKICAgICAgaGVpZ2h0OiAyMCwKICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LAogICAgICBnZW9tZXRyeTogZ28uR2VvbWV0cnkucGFyc2UoZ2VvRnVuYygnc3VicHJvY2Vzc2VzJykpCiAgICB9KSwgRyhnby5UZXh0QmxvY2ssIChfRyA9IHsKICAgICAgZm9udDogImJvbGQgMTFwdCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIiwKICAgICAgbWFyZ2luOiA4LAogICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCwKICAgICAgc3Ryb2tlOiAiIzM0MzQzNCIsCiAgICAgIHRleHRBbGlnbjogImNlbnRlciIsCiAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsCiAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBnby5TcG90LkNlbnRlcgogICAgfSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0csICJ3cmFwIiwgZ28uVGV4dEJsb2NrLldyYXBGaXQpLCAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShfRywgIm1pblNpemUiLCBuZXcgZ28uU2l6ZSgxMjYsIDI3KSksICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKF9HLCAibWF4U2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgTmFOKSksIF9HKSwgbmV3IGdvLkJpbmRpbmcoInRleHQiKS5tYWtlVHdvV2F5KCkpLCAvLyB0aGUgbGFiZWwgc2hvd3MgdGhlIG5vZGUgZGF0YSdzIHRleHQKICAgIHsKICAgICAgdG9vbFRpcDogLy8gdGhpcyB0b29sdGlwIEFkb3JubWVudCBpcyBzaGFyZWQgYnkgYWxsIG5vZGVzCiAgICAgIEcoZ28uQWRvcm5tZW50LCAiQXV0byIsIEcoZ28uU2hhcGUsIHsKICAgICAgICBmaWxsOiAiI0ZGRkZDQyIKICAgICAgfSksIEcoZ28uVGV4dEJsb2NrLCB7CiAgICAgICAgbWFyZ2luOiA0CiAgICAgIH0sIC8vIHRoZSB0b29sdGlwIHNob3dzIHRoZSByZXN1bHQgb2YgY2FsbGluZyBub2RlSW5mbyhkYXRhKQogICAgICBuZXcgZ28uQmluZGluZygidGV4dCIsICIiLCBub2RlSW5mbykpKSAvLyDnu5HlrprkuIrkuIvmlofoj5zljZUKICAgICAgLy8gY29udGV4dE1lbnU6IG1ha2VQYXJ0Q29udGV4dE1lbnUoKQoKICAgIH0pLCAvLyA05Liq6L+e5o6l54K5CiAgICBtYWtlTm9kZVBvcnQoIlQiLCBnby5TcG90LlRvcCwgZmFsc2UsIHRydWUpLCBtYWtlTm9kZVBvcnQoIkwiLCBnby5TcG90LkxlZnQsIHRydWUsIHRydWUpLCBtYWtlTm9kZVBvcnQoIlIiLCBnby5TcG90LlJpZ2h0LCB0cnVlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJCIiwgZ28uU3BvdC5Cb3R0b20sIHRydWUsIGZhbHNlKSwgewogICAgICBtb3VzZUVudGVyOiBmdW5jdGlvbiBtb3VzZUVudGVyKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgdHJ1ZSk7CiAgICAgIH0sCiAgICAgIG1vdXNlTGVhdmU6IGZ1bmN0aW9uIG1vdXNlTGVhdmUoZSwgbm9kZSkgewogICAgICAgIHNob3dOb2RlUG9ydChub2RlLCBmYWxzZSk7CiAgICAgIH0KICAgIH0pKTsgLy8g5pyN5Yqh6IqC54K5CgoKICAgIF9kZXNpZ25lci5ub2RlVGVtcGxhdGVNYXAuYWRkKCdTZXJ2aWNlJywgRyhnby5Ob2RlLCAiU3BvdCIsIHsKICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImxvY2F0aW9uIiwgImxvYyIsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksIHsKICAgICAgc2VsZWN0YWJsZTogdHJ1ZSwKICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IG1ha2VOb2RlU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUoKQogICAgfSwgbmV3IGdvLkJpbmRpbmcoImFuZ2xlIikubWFrZVR3b1dheSgpLCAvLyB0aGUgbWFpbiBvYmplY3QgaXMgYSBQYW5lbCB0aGF0IHN1cnJvdW5kcyBhIFRleHRCbG9jayB3aXRoIGEgU2hhcGUKICAgIEcoZ28uUGFuZWwsICJBdXRvIiwgewogICAgICBuYW1lOiAiUEFORUwiCiAgICB9LCBuZXcgZ28uQmluZGluZygiZGVzaXJlZFNpemUiLCAic2l6ZSIsIGdvLlNpemUucGFyc2UpLm1ha2VUd29XYXkoZ28uU2l6ZS5zdHJpbmdpZnkpLCBHKGdvLlNoYXBlLCAiUm91bmRlZFJlY3RhbmdsZSIsIC8vIGRlZmF1bHQgZmlndXJlCiAgICB7CiAgICAgIHBvcnRJZDogIiIsCiAgICAgIC8vIHRoZSBkZWZhdWx0IHBvcnQ6IGlmIG5vIHNwb3Qgb24gbGluayBkYXRhLCB1c2UgY2xvc2VzdCBzaWRlCiAgICAgIG5hbWU6ICJQSVBFIiwKICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLAogICAgICB0b0xpbmthYmxlOiB0cnVlLAogICAgICBjdXJzb3I6ICJwb2ludGVyIiwKICAgICAgZmlsbDogIndoaXRlIiwKICAgICAgLy8gZGVmYXVsdCBjb2xvcgogICAgICBzdHJva2VXaWR0aDogMSwKICAgICAgc3Ryb2tlOiAiI0RDREVFMiIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJmaWd1cmUiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlRGFzaEFycmF5IiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VXaWR0aCIpLCBuZXcgZ28uQmluZGluZygiZmlsbCIpKSwgRyhnby5TaGFwZSwgewogICAgICBtYXJnaW46IDUsCiAgICAgIGZpbGw6ICdibGFjaycsCiAgICAgIHN0cm9rZVdpZHRoOiAwLAogICAgICB3aWR0aDogMjgsCiAgICAgIGhlaWdodDogMjAsCiAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCwKICAgICAgZ2VvbWV0cnk6IGdvLkdlb21ldHJ5LnBhcnNlKGdlb0Z1bmMoJ3NlcnZpY2UnKSkKICAgIH0pLCBHKGdvLlRleHRCbG9jaywgKF9HMiA9IHsKICAgICAgZm9udDogImJvbGQgMTFwdCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIiwKICAgICAgbWFyZ2luOiA4LAogICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCwKICAgICAgc3Ryb2tlOiAiIzM0MzQzNCIsCiAgICAgIHRleHRBbGlnbjogImNlbnRlciIsCiAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsCiAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBnby5TcG90LkNlbnRlcgogICAgfSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0cyLCAid3JhcCIsIGdvLlRleHRCbG9jay5XcmFwRml0KSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0cyLCAibWluU2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgMjcpKSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0cyLCAibWF4U2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgTmFOKSksIF9HMiksIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IikubWFrZVR3b1dheSgpKSwgLy8gdGhlIGxhYmVsIHNob3dzIHRoZSBub2RlIGRhdGEncyB0ZXh0CiAgICB7CiAgICAgIHRvb2xUaXA6IC8vIHRoaXMgdG9vbHRpcCBBZG9ybm1lbnQgaXMgc2hhcmVkIGJ5IGFsbCBub2RlcwogICAgICBHKGdvLkFkb3JubWVudCwgIkF1dG8iLCBHKGdvLlNoYXBlLCB7CiAgICAgICAgZmlsbDogIiNGRkZGQ0MiCiAgICAgIH0pLCBHKGdvLlRleHRCbG9jaywgewogICAgICAgIG1hcmdpbjogNAogICAgICB9LCAvLyB0aGUgdG9vbHRpcCBzaG93cyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgbm9kZUluZm8oZGF0YSkKICAgICAgbmV3IGdvLkJpbmRpbmcoInRleHQiLCAiIiwgbm9kZUluZm8pKSkgLy8g57uR5a6a5LiK5LiL5paH6I+c5Y2VCiAgICAgIC8vIGNvbnRleHRNZW51OiBtYWtlUGFydENvbnRleHRNZW51KCkKCiAgICB9KSwgLy8gNOS4qui/nuaOpeeCuQogICAgbWFrZU5vZGVQb3J0KCJUIiwgZ28uU3BvdC5Ub3AsIGZhbHNlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJMIiwgZ28uU3BvdC5MZWZ0LCB0cnVlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJSIiwgZ28uU3BvdC5SaWdodCwgdHJ1ZSwgdHJ1ZSksIG1ha2VOb2RlUG9ydCgiQiIsIGdvLlNwb3QuQm90dG9tLCB0cnVlLCBmYWxzZSksIHsKICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24gbW91c2VFbnRlcihlLCBub2RlKSB7CiAgICAgICAgc2hvd05vZGVQb3J0KG5vZGUsIHRydWUpOwogICAgICB9LAogICAgICBtb3VzZUxlYXZlOiBmdW5jdGlvbiBtb3VzZUxlYXZlKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgZmFsc2UpOwogICAgICB9CiAgICB9KSk7IC8vIOWuoeaJueiKgueCuQoKCiAgICBfZGVzaWduZXIubm9kZVRlbXBsYXRlTWFwLmFkZCgnQXBwcm92YWwnLCBHKGdvLk5vZGUsICJTcG90IiwgewogICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyCiAgICB9LCBuZXcgZ28uQmluZGluZygibG9jYXRpb24iLCAibG9jIiwgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSwgewogICAgICBzZWxlY3RhYmxlOiB0cnVlLAogICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogbWFrZU5vZGVTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSgpCiAgICB9LCBuZXcgZ28uQmluZGluZygiYW5nbGUiKS5tYWtlVHdvV2F5KCksIC8vIHRoZSBtYWluIG9iamVjdCBpcyBhIFBhbmVsIHRoYXQgc3Vycm91bmRzIGEgVGV4dEJsb2NrIHdpdGggYSBTaGFwZQogICAgRyhnby5QYW5lbCwgIkF1dG8iLCB7CiAgICAgIG5hbWU6ICJQQU5FTCIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJkZXNpcmVkU2l6ZSIsICJzaXplIiwgZ28uU2l6ZS5wYXJzZSkubWFrZVR3b1dheShnby5TaXplLnN0cmluZ2lmeSksIEcoZ28uU2hhcGUsICJSb3VuZGVkUmVjdGFuZ2xlIiwgLy8gZGVmYXVsdCBmaWd1cmUKICAgIHsKICAgICAgcG9ydElkOiAiIiwKICAgICAgLy8gdGhlIGRlZmF1bHQgcG9ydDogaWYgbm8gc3BvdCBvbiBsaW5rIGRhdGEsIHVzZSBjbG9zZXN0IHNpZGUKICAgICAgbmFtZTogIlBJUEUiLAogICAgICBmcm9tTGlua2FibGU6IHRydWUsCiAgICAgIHRvTGlua2FibGU6IHRydWUsCiAgICAgIGN1cnNvcjogInBvaW50ZXIiLAogICAgICBmaWxsOiAid2hpdGUiLAogICAgICAvLyBkZWZhdWx0IGNvbG9yCiAgICAgIHN0cm9rZVdpZHRoOiAxLAogICAgICBzdHJva2U6ICIjRENERUUyIgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImZpZ3VyZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlIiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VEYXNoQXJyYXkiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZVdpZHRoIiksIG5ldyBnby5CaW5kaW5nKCJmaWxsIikpLCBHKGdvLlNoYXBlLCB7CiAgICAgIG1hcmdpbjogNSwKICAgICAgZmlsbDogJ2JsYWNrJywKICAgICAgc3Ryb2tlV2lkdGg6IDAsCiAgICAgIHdpZHRoOiAyOCwKICAgICAgaGVpZ2h0OiAyMCwKICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LAogICAgICBnZW9tZXRyeTogZ28uR2VvbWV0cnkucGFyc2UoZ2VvRnVuYygnYXBwcm92YWwnKSkKICAgIH0pLCBHKGdvLlRleHRCbG9jaywgKF9HMyA9IHsKICAgICAgZm9udDogImJvbGQgMTFwdCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIiwKICAgICAgbWFyZ2luOiA4LAogICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCwKICAgICAgc3Ryb2tlOiAiIzM0MzQzNCIsCiAgICAgIHRleHRBbGlnbjogImNlbnRlciIsCiAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsCiAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBnby5TcG90LkNlbnRlcgogICAgfSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0czLCAid3JhcCIsIGdvLlRleHRCbG9jay5XcmFwRml0KSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0czLCAibWluU2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgMjcpKSwgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkoX0czLCAibWF4U2l6ZSIsIG5ldyBnby5TaXplKDEyNiwgTmFOKSksIF9HMyksIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IikubWFrZVR3b1dheSgpKSwgLy8gdGhlIGxhYmVsIHNob3dzIHRoZSBub2RlIGRhdGEncyB0ZXh0CiAgICB7CiAgICAgIHRvb2xUaXA6IC8vIHRoaXMgdG9vbHRpcCBBZG9ybm1lbnQgaXMgc2hhcmVkIGJ5IGFsbCBub2RlcwogICAgICBHKGdvLkFkb3JubWVudCwgIkF1dG8iLCBHKGdvLlNoYXBlLCB7CiAgICAgICAgZmlsbDogIiNGRkZGQ0MiCiAgICAgIH0pLCBHKGdvLlRleHRCbG9jaywgewogICAgICAgIG1hcmdpbjogNAogICAgICB9LCAvLyB0aGUgdG9vbHRpcCBzaG93cyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgbm9kZUluZm8oZGF0YSkKICAgICAgbmV3IGdvLkJpbmRpbmcoInRleHQiLCAiIiwgbm9kZUluZm8pKSkgLy8g57uR5a6a5LiK5LiL5paH6I+c5Y2VCiAgICAgIC8vIGNvbnRleHRNZW51OiBtYWtlUGFydENvbnRleHRNZW51KCkKCiAgICB9KSwgLy8gNOS4qui/nuaOpeeCuQogICAgbWFrZU5vZGVQb3J0KCJUIiwgZ28uU3BvdC5Ub3AsIGZhbHNlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJMIiwgZ28uU3BvdC5MZWZ0LCB0cnVlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJSIiwgZ28uU3BvdC5SaWdodCwgdHJ1ZSwgdHJ1ZSksIG1ha2VOb2RlUG9ydCgiQiIsIGdvLlNwb3QuQm90dG9tLCB0cnVlLCBmYWxzZSksIHsKICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24gbW91c2VFbnRlcihlLCBub2RlKSB7CiAgICAgICAgc2hvd05vZGVQb3J0KG5vZGUsIHRydWUpOwogICAgICB9LAogICAgICBtb3VzZUxlYXZlOiBmdW5jdGlvbiBtb3VzZUxlYXZlKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgZmFsc2UpOwogICAgICB9CiAgICB9KSk7IC8vIOaTjeS9nOiKgueCuQoKCiAgICBfZGVzaWduZXIubm9kZVRlbXBsYXRlTWFwLmFkZCgnT3BlcmF0aW9uJywgRyhnby5Ob2RlLCAiU3BvdCIsIHsKICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImxvY2F0aW9uIiwgImxvYyIsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksIHsKICAgICAgc2VsZWN0YWJsZTogdHJ1ZSwKICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IG1ha2VOb2RlU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUoKQogICAgfSwgbmV3IGdvLkJpbmRpbmcoImFuZ2xlIikubWFrZVR3b1dheSgpLCAvLyB0aGUgbWFpbiBvYmplY3QgaXMgYSBQYW5lbCB0aGF0IHN1cnJvdW5kcyBhIFRleHRCbG9jayB3aXRoIGEgU2hhcGUKICAgIEcoZ28uUGFuZWwsICJBdXRvIiwgewogICAgICBuYW1lOiAiUEFORUwiCiAgICB9LCBuZXcgZ28uQmluZGluZygiZGVzaXJlZFNpemUiLCAic2l6ZSIsIGdvLlNpemUucGFyc2UpLm1ha2VUd29XYXkoZ28uU2l6ZS5zdHJpbmdpZnkpLCBHKGdvLlNoYXBlLCAiUm91bmRlZFJlY3RhbmdsZSIsIC8vIGRlZmF1bHQgZmlndXJlCiAgICB7CiAgICAgIHBvcnRJZDogIiIsCiAgICAgIC8vIHRoZSBkZWZhdWx0IHBvcnQ6IGlmIG5vIHNwb3Qgb24gbGluayBkYXRhLCB1c2UgY2xvc2VzdCBzaWRlCiAgICAgIG5hbWU6ICJQSVBFIiwKICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLAogICAgICB0b0xpbmthYmxlOiB0cnVlLAogICAgICBjdXJzb3I6ICJwb2ludGVyIiwKICAgICAgZmlsbDogIndoaXRlIiwKICAgICAgLy8gZGVmYXVsdCBjb2xvcgogICAgICBzdHJva2VXaWR0aDogMSwKICAgICAgc3Ryb2tlOiAiI0RDREVFMiIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJmaWd1cmUiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlRGFzaEFycmF5IiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VXaWR0aCIpLCBuZXcgZ28uQmluZGluZygiZmlsbCIpKSwgRyhnby5TaGFwZSwgewogICAgICBtYXJnaW46IDUsCiAgICAgIGZpbGw6ICdibGFjaycsCiAgICAgIHN0cm9rZVdpZHRoOiAwLAogICAgICB3aWR0aDogMjgsCiAgICAgIGhlaWdodDogMjAsCiAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCwKICAgICAgZ2VvbWV0cnk6IGdvLkdlb21ldHJ5LnBhcnNlKGdlb0Z1bmMoJ29wZXJhdGlvbicpKQogICAgfSksIEcoZ28uVGV4dEJsb2NrLCAoX0c0ID0gewogICAgICBmb250OiAiYm9sZCAxMXB0IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYiLAogICAgICBtYXJnaW46IDgsCiAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LAogICAgICBzdHJva2U6ICIjMzQzNDM0IiwKICAgICAgdGV4dEFsaWduOiAiY2VudGVyIiwKICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlciwKICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyCiAgICB9LCAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShfRzQsICJ3cmFwIiwgZ28uVGV4dEJsb2NrLldyYXBGaXQpLCAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShfRzQsICJtaW5TaXplIiwgbmV3IGdvLlNpemUoMTI2LCAyNykpLCAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShfRzQsICJtYXhTaXplIiwgbmV3IGdvLlNpemUoMTI2LCBOYU4pKSwgX0c0KSwgbmV3IGdvLkJpbmRpbmcoInRleHQiKS5tYWtlVHdvV2F5KCkpLCAvLyB0aGUgbGFiZWwgc2hvd3MgdGhlIG5vZGUgZGF0YSdzIHRleHQKICAgIHsKICAgICAgdG9vbFRpcDogLy8gdGhpcyB0b29sdGlwIEFkb3JubWVudCBpcyBzaGFyZWQgYnkgYWxsIG5vZGVzCiAgICAgIEcoZ28uQWRvcm5tZW50LCAiQXV0byIsIEcoZ28uU2hhcGUsIHsKICAgICAgICBmaWxsOiAiI0ZGRkZDQyIKICAgICAgfSksIEcoZ28uVGV4dEJsb2NrLCB7CiAgICAgICAgbWFyZ2luOiA0CiAgICAgIH0sIC8vIHRoZSB0b29sdGlwIHNob3dzIHRoZSByZXN1bHQgb2YgY2FsbGluZyBub2RlSW5mbyhkYXRhKQogICAgICBuZXcgZ28uQmluZGluZygidGV4dCIsICIiLCBub2RlSW5mbykpKSAvLyDnu5HlrprkuIrkuIvmlofoj5zljZUKICAgICAgLy8gY29udGV4dE1lbnU6IG1ha2VQYXJ0Q29udGV4dE1lbnUoKQoKICAgIH0pLCAvLyA05Liq6L+e5o6l54K5CiAgICBtYWtlTm9kZVBvcnQoIlQiLCBnby5TcG90LlRvcCwgZmFsc2UsIHRydWUpLCBtYWtlTm9kZVBvcnQoIkwiLCBnby5TcG90LkxlZnQsIHRydWUsIHRydWUpLCBtYWtlTm9kZVBvcnQoIlIiLCBnby5TcG90LlJpZ2h0LCB0cnVlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJCIiwgZ28uU3BvdC5Cb3R0b20sIHRydWUsIGZhbHNlKSwgewogICAgICBtb3VzZUVudGVyOiBmdW5jdGlvbiBtb3VzZUVudGVyKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgdHJ1ZSk7CiAgICAgIH0sCiAgICAgIG1vdXNlTGVhdmU6IGZ1bmN0aW9uIG1vdXNlTGVhdmUoZSwgbm9kZSkgewogICAgICAgIHNob3dOb2RlUG9ydChub2RlLCBmYWxzZSk7CiAgICAgIH0KICAgIH0pKTsgLy8g5re75Yqg5byA5aeL6IqC54K5CgoKICAgIF9kZXNpZ25lci5ub2RlVGVtcGxhdGVNYXAuYWRkKCJTdGFydCIsIEcoZ28uTm9kZSwgIlNwb3QiLCB7CiAgICAgIGxvY2F0aW9uU3BvdDogZ28uU3BvdC5DZW50ZXIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJsb2NhdGlvbiIsICJsb2MiLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLCB7CiAgICAgIHNlbGVjdGFibGU6IHRydWUsCiAgICAgIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiBtYWtlTm9kZVNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlKCkKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJhbmdsZSIpLm1ha2VUd29XYXkoKSwgRyhnby5QYW5lbCwgIkF1dG8iLCB7CiAgICAgIG5hbWU6ICJTdGFydCIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJkZXNpcmVkU2l6ZSIsICJzaXplIiwgZ28uU2l6ZS5wYXJzZSkubWFrZVR3b1dheShnby5TaXplLnN0cmluZ2lmeSksIEcoZ28uU2hhcGUsICJDaXJjbGUiLCAvLyBkZWZhdWx0IGZpZ3VyZQogICAgewogICAgICBwb3J0SWQ6ICIiLAogICAgICAvLyB0aGUgZGVmYXVsdCBwb3J0OiBpZiBubyBzcG90IG9uIGxpbmsgZGF0YSwgdXNlIGNsb3Nlc3Qgc2lkZQogICAgICBuYW1lOiAiU3RhcnQiLAogICAgICBmcm9tTGlua2FibGU6IHRydWUsCiAgICAgIHRvTGlua2FibGU6IHRydWUsCiAgICAgIGN1cnNvcjogInBvaW50ZXIiLAogICAgICBmaWxsOiAiIzVGNzc5MCIsCiAgICAgIC8vIGRlZmF1bHQgY29sb3IKICAgICAgc3Ryb2tlV2lkdGg6IDEsCiAgICAgIHN0cm9rZTogIiM1Rjc3OTAiIC8vIGdlb21ldHJ5U3RyaW5nOiAiRiBNMCAwIEwxMDAgMCBCLTkwIDE4MCAxMDAgMjUgMjUgMjUgTDAgNTAgQjkwIDE4MCAwIDI1IDI1IDI1IgoKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJmaWd1cmUiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlRGFzaEFycmF5IiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VXaWR0aCIpLCBuZXcgZ28uQmluZGluZygiZmlsbCIpKSwgRyhnby5UZXh0QmxvY2ssIHsKICAgICAgZm9udDogImJvbGQgMTFwdCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIiwKICAgICAgbWFyZ2luOiA4LAogICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCwKICAgICAgc3Ryb2tlOiAid2hpdGUiLAogICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IikubWFrZVR3b1dheSgpKSwgewogICAgICB0b29sVGlwOiBHKGdvLkFkb3JubWVudCwgIkF1dG8iLCBHKGdvLlNoYXBlLCB7CiAgICAgICAgZmlsbDogIiNGRkZGQ0MiCiAgICAgIH0pLCBHKGdvLlRleHRCbG9jaywgewogICAgICAgIG1hcmdpbjogNAogICAgICB9LCBuZXcgZ28uQmluZGluZygidGV4dCIsICIiLCBub2RlSW5mbykpKQogICAgfSksIC8vIDTkuKrov57mjqXngrkKICAgIG1ha2VOb2RlUG9ydCgiQiIsIGdvLlNwb3QuQm90dG9tLCB0cnVlLCBmYWxzZSksIHsKICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24gbW91c2VFbnRlcihlLCBub2RlKSB7CiAgICAgICAgc2hvd05vZGVQb3J0KG5vZGUsIHRydWUpOwogICAgICB9LAogICAgICBtb3VzZUxlYXZlOiBmdW5jdGlvbiBtb3VzZUxlYXZlKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgZmFsc2UpOwogICAgICB9CiAgICB9KSk7IC8vIOa3u+WKoOe7k+adn+iKgueCuQoKCiAgICBfZGVzaWduZXIubm9kZVRlbXBsYXRlTWFwLmFkZCgiRW5kIiwgRyhnby5Ob2RlLCAiU3BvdCIsIHsKICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImxvY2F0aW9uIiwgImxvYyIsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksIHsKICAgICAgc2VsZWN0YWJsZTogdHJ1ZSwKICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IG1ha2VOb2RlU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUoKQogICAgfSwgbmV3IGdvLkJpbmRpbmcoImFuZ2xlIikubWFrZVR3b1dheSgpLCBHKGdvLlBhbmVsLCAiQXV0byIsIHsKICAgICAgbmFtZTogIkVuZCIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJkZXNpcmVkU2l6ZSIsICJzaXplIiwgZ28uU2l6ZS5wYXJzZSkubWFrZVR3b1dheShnby5TaXplLnN0cmluZ2lmeSksIEcoZ28uU2hhcGUsICJDaXJjbGUiLCAvLyBkZWZhdWx0IGZpZ3VyZQogICAgewogICAgICBwb3J0SWQ6ICIiLAogICAgICAvLyB0aGUgZGVmYXVsdCBwb3J0OiBpZiBubyBzcG90IG9uIGxpbmsgZGF0YSwgdXNlIGNsb3Nlc3Qgc2lkZQogICAgICBuYW1lOiAiRW5kIiwKICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLAogICAgICB0b0xpbmthYmxlOiB0cnVlLAogICAgICBjdXJzb3I6ICJwb2ludGVyIiwKICAgICAgZmlsbDogIiM1Rjc3OTAiLAogICAgICAvLyBkZWZhdWx0IGNvbG9yCiAgICAgIHN0cm9rZVdpZHRoOiAxLAogICAgICBzdHJva2U6ICIjNUY3NzkwIiAvLyBnZW9tZXRyeVN0cmluZzogIkYgTTAgMCBMMTAwIDAgUTE3NSAyNSAxMDAgNTAgTDAgNTAgUS03NSAyNSAwIDAiCgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImZpZ3VyZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlIiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VEYXNoQXJyYXkiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZVdpZHRoIiksIG5ldyBnby5CaW5kaW5nKCJmaWxsIikpLCBHKGdvLlRleHRCbG9jaywgewogICAgICBmb250OiAiYm9sZCAxMXB0IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYiLAogICAgICBtYXJnaW46IDgsCiAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LAogICAgICBzdHJva2U6ICJ3aGl0ZSIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IikubWFrZVR3b1dheSgpKSwgewogICAgICB0b29sVGlwOiBHKGdvLkFkb3JubWVudCwgIkF1dG8iLCBHKGdvLlNoYXBlLCB7CiAgICAgICAgZmlsbDogIiNGRkZGQ0MiCiAgICAgIH0pLCBHKGdvLlRleHRCbG9jaywgewogICAgICAgIG1hcmdpbjogNAogICAgICB9LCBuZXcgZ28uQmluZGluZygidGV4dCIsICIiLCBub2RlSW5mbykpKQogICAgfSksIC8vIDTkuKrov57mjqXngrkKICAgIG1ha2VOb2RlUG9ydCgiVCIsIGdvLlNwb3QuVG9wLCBmYWxzZSwgdHJ1ZSksIHsKICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24gbW91c2VFbnRlcihlLCBub2RlKSB7CiAgICAgICAgc2hvd05vZGVQb3J0KG5vZGUsIHRydWUpOwogICAgICB9LAogICAgICBtb3VzZUxlYXZlOiBmdW5jdGlvbiBtb3VzZUxlYXZlKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgZmFsc2UpOwogICAgICB9CiAgICB9KSk7IC8vIOa1geeoi+i/nuaOpee6v+eahOagt+W8j+aooeadvwoKCiAgICBfZGVzaWduZXIubGlua1RlbXBsYXRlID0gbWFrZUxpbmtUZW1wbGF0ZSgpOwogICAgcmV0dXJuIF9kZXNpZ25lcjsKICB9CiAgLyoqDQogICAqIOeUn+aIkEdVSUQNCiAgICogQHJldHVybnMge3N0cmluZ30NCiAgICovCgoKICBmdW5jdGlvbiBndWlkKCkgewogICAgdmFyIHIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoMzAwMDAgLSAxICsgMSkgKyAxKTsKICAgIHJldHVybiBOdW1iZXIocik7CiAgfQoKICBmdW5jdGlvbiBnZW9GdW5jKGdlb25hbWUpIHsKICAgIGlmIChfaWNvbi5kZWZhdWx0W2dlb25hbWVdKSByZXR1cm4gX2ljb24uZGVmYXVsdFtnZW9uYW1lXTtlbHNlIHJldHVybiBfaWNvbi5kZWZhdWx0WyJhcHByb3ZhbCJdOyAvLyBkZWZhdWx0IGljb24KICB9CiAgLyoqDQogICAqIOaTjeS9nOiKgueCueagt+W8j+aooeadvw0KICAgKiBAcmV0dXJucyB7Kn0NCiAgICovCgoKICBmdW5jdGlvbiBvcGVyYXRpb25Ob2RlVGVtcGxhdGUoKSB7CiAgICB2YXIgX0c1OwoKICAgIHJldHVybiBHKGdvLk5vZGUsICJTcG90IiwgewogICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyCiAgICB9LCBuZXcgZ28uQmluZGluZygibG9jYXRpb24iLCAibG9jIiwgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSwgewogICAgICBzZWxlY3RhYmxlOiB0cnVlLAogICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogbWFrZU5vZGVTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSgpCiAgICB9LCBuZXcgZ28uQmluZGluZygiYW5nbGUiKS5tYWtlVHdvV2F5KCksIC8vIHRoZSBtYWluIG9iamVjdCBpcyBhIFBhbmVsIHRoYXQgc3Vycm91bmRzIGEgVGV4dEJsb2NrIHdpdGggYSBTaGFwZQogICAgRyhnby5QYW5lbCwgIkF1dG8iLCB7CiAgICAgIG5hbWU6ICJQQU5FTCIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJkZXNpcmVkU2l6ZSIsICJzaXplIiwgZ28uU2l6ZS5wYXJzZSkubWFrZVR3b1dheShnby5TaXplLnN0cmluZ2lmeSksIEcoZ28uU2hhcGUsICJSb3VuZGVkUmVjdGFuZ2xlIiwgLy8gZGVmYXVsdCBmaWd1cmUKICAgIHsKICAgICAgcG9ydElkOiAiIiwKICAgICAgLy8gdGhlIGRlZmF1bHQgcG9ydDogaWYgbm8gc3BvdCBvbiBsaW5rIGRhdGEsIHVzZSBjbG9zZXN0IHNpZGUKICAgICAgbmFtZTogIlBJUEUiLAogICAgICBmcm9tTGlua2FibGU6IHRydWUsCiAgICAgIHRvTGlua2FibGU6IHRydWUsCiAgICAgIGN1cnNvcjogInBvaW50ZXIiLAogICAgICBmaWxsOiAid2hpdGUiLAogICAgICAvLyBkZWZhdWx0IGNvbG9yCiAgICAgIHN0cm9rZVdpZHRoOiAxLAogICAgICBzdHJva2U6ICIjRENERUUyIgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImZpZ3VyZSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlIiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2VEYXNoQXJyYXkiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZVdpZHRoIiksIG5ldyBnby5CaW5kaW5nKCJmaWxsIikpLCBHKGdvLlNoYXBlLCB7CiAgICAgIG1hcmdpbjogNSwKICAgICAgZmlsbDogJ2JsYWNrJywKICAgICAgc3Ryb2tlV2lkdGg6IDAsCiAgICAgIHdpZHRoOiAyMCwKICAgICAgaGVpZ2h0OiAyMCwKICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LAogICAgICBnZW9tZXRyeTogZ28uR2VvbWV0cnkucGFyc2UoZ2VvRnVuYygnb3BlcmF0aW9uJykpCiAgICB9KSwgRyhnby5UZXh0QmxvY2ssIChfRzUgPSB7CiAgICAgIGZvbnQ6ICJib2xkIDExcHQgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiIsCiAgICAgIG1hcmdpbjogOCwKICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsCiAgICAgIHN0cm9rZTogIiMzNDM0MzQiLAogICAgICB0ZXh0QWxpZ246ICJjZW50ZXIiLAogICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLAogICAgICB2ZXJ0aWNhbEFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIKICAgIH0sICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKF9HNSwgIndyYXAiLCBnby5UZXh0QmxvY2suV3JhcEZpdCksICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKF9HNSwgIm1pblNpemUiLCBuZXcgZ28uU2l6ZSgxMjYsIDI3KSksICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKF9HNSwgIm1heFNpemUiLCBuZXcgZ28uU2l6ZSgxMjYsIE5hTikpLCBfRzUpLCBuZXcgZ28uQmluZGluZygidGV4dCIpLm1ha2VUd29XYXkoKSksIC8vIHRoZSBsYWJlbCBzaG93cyB0aGUgbm9kZSBkYXRhJ3MgdGV4dAogICAgewogICAgICB0b29sVGlwOiAvLyB0aGlzIHRvb2x0aXAgQWRvcm5tZW50IGlzIHNoYXJlZCBieSBhbGwgbm9kZXMKICAgICAgRyhnby5BZG9ybm1lbnQsICJBdXRvIiwgRyhnby5TaGFwZSwgewogICAgICAgIGZpbGw6ICIjRkZGRkNDIgogICAgICB9KSwgRyhnby5UZXh0QmxvY2ssIHsKICAgICAgICBtYXJnaW46IDQKICAgICAgfSwgLy8gdGhlIHRvb2x0aXAgc2hvd3MgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIG5vZGVJbmZvKGRhdGEpCiAgICAgIG5ldyBnby5CaW5kaW5nKCJ0ZXh0IiwgIiIsIG5vZGVJbmZvKSkpIC8vIOe7keWumuS4iuS4i+aWh+iPnOWNlQogICAgICAvLyBjb250ZXh0TWVudTogbWFrZVBhcnRDb250ZXh0TWVudSgpCgogICAgfSksIC8vIDTkuKrov57mjqXngrkKICAgIG1ha2VOb2RlUG9ydCgiVCIsIGdvLlNwb3QuVG9wLCBmYWxzZSwgdHJ1ZSksIG1ha2VOb2RlUG9ydCgiTCIsIGdvLlNwb3QuTGVmdCwgdHJ1ZSwgdHJ1ZSksIG1ha2VOb2RlUG9ydCgiUiIsIGdvLlNwb3QuUmlnaHQsIHRydWUsIHRydWUpLCBtYWtlTm9kZVBvcnQoIkIiLCBnby5TcG90LkJvdHRvbSwgdHJ1ZSwgZmFsc2UpLCB7CiAgICAgIG1vdXNlRW50ZXI6IGZ1bmN0aW9uIG1vdXNlRW50ZXIoZSwgbm9kZSkgewogICAgICAgIHNob3dOb2RlUG9ydChub2RlLCB0cnVlKTsKICAgICAgfSwKICAgICAgbW91c2VMZWF2ZTogZnVuY3Rpb24gbW91c2VMZWF2ZShlLCBub2RlKSB7CiAgICAgICAgc2hvd05vZGVQb3J0KG5vZGUsIGZhbHNlKTsKICAgICAgfQogICAgfSk7CiAgfQogIC8qKg0KICAgKiDmk43kvZzoioLngrnmoLflvI/mqKHmnb8NCiAgICogQHJldHVybnMgeyp9DQogICAqLwoKCiAgZnVuY3Rpb24gYXBwcm92YWxOb2RlVGVtcGxhdGUoKSB7CiAgICB2YXIgX0c2OwoKICAgIGNvbnNvbGUubG9nKDEyMjIpOwogICAgcmV0dXJuIEcoZ28uTm9kZSwgIlNwb3QiLCB7CiAgICAgIGxvY2F0aW9uU3BvdDogZ28uU3BvdC5DZW50ZXIKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJsb2NhdGlvbiIsICJsb2MiLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLCB7CiAgICAgIHNlbGVjdGFibGU6IHRydWUsCiAgICAgIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiBtYWtlTm9kZVNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlKCkKICAgIH0sIG5ldyBnby5CaW5kaW5nKCJhbmdsZSIpLm1ha2VUd29XYXkoKSwgLy8gdGhlIG1haW4gb2JqZWN0IGlzIGEgUGFuZWwgdGhhdCBzdXJyb3VuZHMgYSBUZXh0QmxvY2sgd2l0aCBhIFNoYXBlCiAgICBHKGdvLlBhbmVsLCAiQXV0byIsIHsKICAgICAgbmFtZTogIlBBTkVMIgogICAgfSwgbmV3IGdvLkJpbmRpbmcoImRlc2lyZWRTaXplIiwgInNpemUiLCBnby5TaXplLnBhcnNlKS5tYWtlVHdvV2F5KGdvLlNpemUuc3RyaW5naWZ5KSwgRyhnby5TaGFwZSwgIlJvdW5kZWRSZWN0YW5nbGUiLCAvLyBkZWZhdWx0IGZpZ3VyZQogICAgewogICAgICBwb3J0SWQ6ICIiLAogICAgICAvLyB0aGUgZGVmYXVsdCBwb3J0OiBpZiBubyBzcG90IG9uIGxpbmsgZGF0YSwgdXNlIGNsb3Nlc3Qgc2lkZQogICAgICBuYW1lOiAiUElQRSIsCiAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSwKICAgICAgdG9MaW5rYWJsZTogdHJ1ZSwKICAgICAgY3Vyc29yOiAicG9pbnRlciIsCiAgICAgIGZpbGw6ICJ3aGl0ZSIsCiAgICAgIC8vIGRlZmF1bHQgY29sb3IKICAgICAgc3Ryb2tlV2lkdGg6IDEsCiAgICAgIHN0cm9rZTogIiNEQ0RFRTIiCiAgICB9LCBuZXcgZ28uQmluZGluZygiZmlndXJlIiksIG5ldyBnby5CaW5kaW5nKCJzdHJva2UiKSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZURhc2hBcnJheSIpLCBuZXcgZ28uQmluZGluZygic3Ryb2tlV2lkdGgiKSwgbmV3IGdvLkJpbmRpbmcoImZpbGwiKSksIEcoZ28uU2hhcGUsIHsKICAgICAgbWFyZ2luOiA1LAogICAgICBmaWxsOiAnYmxhY2snLAogICAgICBzdHJva2VXaWR0aDogMCwKICAgICAgd2lkdGg6IDIwLAogICAgICBoZWlnaHQ6IDIwLAogICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wUmlnaHQsCiAgICAgIGdlb21ldHJ5OiBnby5HZW9tZXRyeS5wYXJzZShnZW9GdW5jKCdhcHByb3ZhbCcpKQogICAgfSksIEcoZ28uVGV4dEJsb2NrLCAoX0c2ID0gewogICAgICBmb250OiAiYm9sZCAxMXB0IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYiLAogICAgICBtYXJnaW46IDgsCiAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LAogICAgICBzdHJva2U6ICIjMzQzNDM0IiwKICAgICAgdGV4dEFsaWduOiAiY2VudGVyIiwKICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlciwKICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyCiAgICB9LCAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShfRzYsICJ3cmFwIiwgZ28uVGV4dEJsb2NrLldyYXBGaXQpLCAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShfRzYsICJtaW5TaXplIiwgbmV3IGdvLlNpemUoMTI2LCAyNykpLCAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShfRzYsICJtYXhTaXplIiwgbmV3IGdvLlNpemUoMTI2LCBOYU4pKSwgX0c2KSwgbmV3IGdvLkJpbmRpbmcoInRleHQiKS5tYWtlVHdvV2F5KCkpLCAvLyB0aGUgbGFiZWwgc2hvd3MgdGhlIG5vZGUgZGF0YSdzIHRleHQKICAgIHsKICAgICAgdG9vbFRpcDogLy8gdGhpcyB0b29sdGlwIEFkb3JubWVudCBpcyBzaGFyZWQgYnkgYWxsIG5vZGVzCiAgICAgIEcoZ28uQWRvcm5tZW50LCAiQXV0byIsIEcoZ28uU2hhcGUsIHsKICAgICAgICBmaWxsOiAiI0ZGRkZDQyIKICAgICAgfSksIEcoZ28uVGV4dEJsb2NrLCB7CiAgICAgICAgbWFyZ2luOiA0CiAgICAgIH0sIC8vIHRoZSB0b29sdGlwIHNob3dzIHRoZSByZXN1bHQgb2YgY2FsbGluZyBub2RlSW5mbyhkYXRhKQogICAgICBuZXcgZ28uQmluZGluZygidGV4dCIsICIiLCBub2RlSW5mbykpKSAvLyDnu5HlrprkuIrkuIvmlofoj5zljZUKICAgICAgLy8gY29udGV4dE1lbnU6IG1ha2VQYXJ0Q29udGV4dE1lbnUoKQoKICAgIH0pLCAvLyA05Liq6L+e5o6l54K5CiAgICBtYWtlTm9kZVBvcnQoIlQiLCBnby5TcG90LlRvcCwgZmFsc2UsIHRydWUpLCBtYWtlTm9kZVBvcnQoIkwiLCBnby5TcG90LkxlZnQsIHRydWUsIHRydWUpLCBtYWtlTm9kZVBvcnQoIlIiLCBnby5TcG90LlJpZ2h0LCB0cnVlLCB0cnVlKSwgbWFrZU5vZGVQb3J0KCJCIiwgZ28uU3BvdC5Cb3R0b20sIHRydWUsIGZhbHNlKSwgewogICAgICBtb3VzZUVudGVyOiBmdW5jdGlvbiBtb3VzZUVudGVyKGUsIG5vZGUpIHsKICAgICAgICBzaG93Tm9kZVBvcnQobm9kZSwgdHJ1ZSk7CiAgICAgIH0sCiAgICAgIG1vdXNlTGVhdmU6IGZ1bmN0aW9uIG1vdXNlTGVhdmUoZSwgbm9kZSkgewogICAgICAgIHNob3dOb2RlUG9ydChub2RlLCBmYWxzZSk7CiAgICAgIH0KICAgIH0pOwogIH0KICAvKioNCiAgICog6YCJ5Lit6IqC54K555qE5qC35byPDQogICAqIEByZXR1cm5zIHsqfQ0KICAgKi8KCgogIGZ1bmN0aW9uIG1ha2VOb2RlU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUoKSB7CiAgICByZXR1cm4gRyhnby5BZG9ybm1lbnQsICJBdXRvIiwgRyhnby5TaGFwZSwgewogICAgICBmaWxsOiBudWxsLAogICAgICBzdHJva2U6ICJkZWVwc2t5Ymx1ZSIsCiAgICAgIHN0cm9rZVdpZHRoOiAxLjUsCiAgICAgIHN0cm9rZURhc2hBcnJheTogWzQsIDJdCiAgICB9KSwgRyhnby5QbGFjZWhvbGRlcikpOwogIH0KICAvKioNCiAgICog5Yib5bu66L+e5o6l54K5DQogICAqIEBwYXJhbSBuYW1lDQogICAqIEBwYXJhbSBzcG90DQogICAqIEBwYXJhbSBvdXRwdXQNCiAgICogQHBhcmFtIGlucHV0DQogICAqIEByZXR1cm5zIHsqfQ0KICAgKi8KCgogIGZ1bmN0aW9uIG1ha2VOb2RlUG9ydChuYW1lLCBzcG90LCBvdXRwdXQsIGlucHV0KSB7CiAgICAvLyB0aGUgcG9ydCBpcyBiYXNpY2FsbHkganVzdCBhIHNtYWxsIHRyYW5zcGFyZW50IHNxdWFyZQogICAgcmV0dXJuIEcoZ28uU2hhcGUsICJDaXJjbGUiLCB7CiAgICAgIGZpbGw6IG51bGwsCiAgICAgIC8vIG5vdCBzZWVuLCBieSBkZWZhdWx0OyBzZXQgdG8gYSB0cmFuc2x1Y2VudCBncmF5IGJ5IHNob3dTbWFsbFBvcnRzLCBkZWZpbmVkIGJlbG93CiAgICAgIHN0cm9rZTogbnVsbCwKICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKDcsIDcpLAogICAgICBhbGlnbm1lbnQ6IHNwb3QsCiAgICAgIC8vIGFsaWduIHRoZSBwb3J0IG9uIHRoZSBtYWluIFNoYXBlCiAgICAgIGFsaWdubWVudEZvY3VzOiBzcG90LAogICAgICAvLyBqdXN0IGluc2lkZSB0aGUgU2hhcGUKICAgICAgcG9ydElkOiBuYW1lLAogICAgICAvLyBkZWNsYXJlIHRoaXMgb2JqZWN0IHRvIGJlIGEgInBvcnQiCiAgICAgIGZyb21TcG90OiBzcG90LAogICAgICB0b1Nwb3Q6IHNwb3QsCiAgICAgIC8vIGRlY2xhcmUgd2hlcmUgbGlua3MgbWF5IGNvbm5lY3QgYXQgdGhpcyBwb3J0CiAgICAgIGZyb21MaW5rYWJsZTogb3V0cHV0LAogICAgICB0b0xpbmthYmxlOiBpbnB1dCwKICAgICAgLy8gZGVjbGFyZSB3aGV0aGVyIHRoZSB1c2VyIG1heSBkcmF3IGxpbmtzIHRvL2Zyb20gaGVyZQogICAgICBjdXJzb3I6ICJwb2ludGVyIiAvLyBzaG93IGEgZGlmZmVyZW50IGN1cnNvciB0byBpbmRpY2F0ZSBwb3RlbnRpYWwgbGluayBwb2ludAoKICAgIH0pOwogIH0KICAvKioNCiAgICogdG9vbHRpcOS4iuaYvuekuueahOS/oeaBrw0KICAgKiBAcGFyYW0gZA0KICAgKiBAcmV0dXJucyB7c3RyaW5nfQ0KICAgKi8KCgogIGZ1bmN0aW9uIG5vZGVJbmZvKGQpIHsKICAgIHJldHVybiAn5Y+M5Ye75Y+v57yW6L6RJzsKICB9CiAgLyoqDQogICAqIOWPs+mUruiPnOWNlQ0KICAgKiBAcmV0dXJucyB7Kn0NCiAgICovCgoKICBmdW5jdGlvbiBtYWtlUGFydENvbnRleHRNZW51KCkgewogICAgcmV0dXJuIEcoZ28uQWRvcm5tZW50LCAiVmVydGljYWwiLCBtYWtlTWVudUl0ZW0oIue8lui+kSIsIGZ1bmN0aW9uIChlLCBvYmopIHsKICAgICAgLy8gT0JKIGlzIHRoaXMgQnV0dG9uCiAgICAgIHZhciBjb250ZXh0bWVudSA9IG9iai5wYXJ0OyAvLyB0aGUgQnV0dG9uIGlzIGluIHRoZSBjb250ZXh0IG1lbnUgQWRvcm5tZW50CgogICAgICB2YXIgcGFydCA9IGNvbnRleHRtZW51LmFkb3JuZWRQYXJ0OyAvLyB0aGUgYWRvcm5lZFBhcnQgaXMgdGhlIFBhcnQgdGhhdCB0aGUgY29udGV4dCBtZW51IGFkb3JucwogICAgICAvLyBub3cgY2FuIGRvIHNvbWV0aGluZyB3aXRoIFBBUlQsIG9yIHdpdGggaXRzIGRhdGEsIG9yIHdpdGggdGhlIEFkb3JubWVudCAodGhlIGNvbnRleHQgbWVudSkKCiAgICAgIHNob3dFZGl0Tm9kZShwYXJ0KTsKICAgIH0pLCBtYWtlTWVudUl0ZW0oIuWJquWIhyIsIGZ1bmN0aW9uIChlLCBvYmopIHsKICAgICAgZS5kaWFncmFtLmNvbW1hbmRIYW5kbGVyLmN1dFNlbGVjdGlvbigpOwogICAgfSwgZnVuY3Rpb24gKG8pIHsKICAgICAgcmV0dXJuIG8uZGlhZ3JhbS5jb21tYW5kSGFuZGxlci5jYW5DdXRTZWxlY3Rpb24oKTsKICAgIH0pLCBtYWtlTWVudUl0ZW0oIuWkjeWItiIsIGZ1bmN0aW9uIChlLCBvYmopIHsKICAgICAgZS5kaWFncmFtLmNvbW1hbmRIYW5kbGVyLmNvcHlTZWxlY3Rpb24oKTsKICAgIH0sIGZ1bmN0aW9uIChvKSB7CiAgICAgIHJldHVybiBvLmRpYWdyYW0uY29tbWFuZEhhbmRsZXIuY2FuQ29weVNlbGVjdGlvbigpOwogICAgfSksIG1ha2VNZW51SXRlbSgi5Yig6ZmkIiwgZnVuY3Rpb24gKGUsIG9iaikgewogICAgICBlLmRpYWdyYW0uY29tbWFuZEhhbmRsZXIuZGVsZXRlU2VsZWN0aW9uKCk7CiAgICB9LCBmdW5jdGlvbiAobykgewogICAgICByZXR1cm4gby5kaWFncmFtLmNvbW1hbmRIYW5kbGVyLmNhbkRlbGV0ZVNlbGVjdGlvbigpOwogICAgfSkpOwogIH0KICAvKioNCiAgICog55Sf5oiQ5Y+z6ZSu6I+c5Y2V6aG5DQogICAqIEBwYXJhbSB0ZXh0DQogICAqIEBwYXJhbSBhY3Rpb24NCiAgICogQHBhcmFtIHZpc2libGVQcmVkaWNhdGUNCiAgICogQHJldHVybnMgeyp9DQogICAqLwoKCiAgZnVuY3Rpb24gbWFrZU1lbnVJdGVtKHRleHQsIGFjdGlvbiwgdmlzaWJsZVByZWRpY2F0ZSkgewogICAgcmV0dXJuIEcoIkNvbnRleHRNZW51QnV0dG9uIiwgRyhnby5UZXh0QmxvY2ssIHRleHQsIHsKICAgICAgbWFyZ2luOiA1LAogICAgICB0ZXh0QWxpZ246ICJsZWZ0IiwKICAgICAgc3Ryb2tlOiAiIzU1NTU1NSIKICAgIH0pLCB7CiAgICAgIGNsaWNrOiBhY3Rpb24KICAgIH0sIC8vIGRvbid0IGJvdGhlciB3aXRoIGJpbmRpbmcgR3JhcGhPYmplY3QudmlzaWJsZSBpZiB0aGVyZSdzIG5vIHByZWRpY2F0ZQogICAgdmlzaWJsZVByZWRpY2F0ZSA/IG5ldyBnby5CaW5kaW5nKCJ2aXNpYmxlIiwgIiIsIHZpc2libGVQcmVkaWNhdGUpLm9mT2JqZWN0KCkgOiB7fSk7CiAgfQogIC8qKg0KICAgKiDmmK/lkKbmmL7npLrmraXpqqTnmoTov57mjqXngrkNCiAgICogQHBhcmFtIG5vZGUNCiAgICogQHBhcmFtIHNob3cNCiAgICovCgoKICBmdW5jdGlvbiBzaG93Tm9kZVBvcnQobm9kZSwgc2hvdykgewogICAgbm9kZS5wb3J0cy5lYWNoKGZ1bmN0aW9uIChwb3J0KSB7CiAgICAgIGlmIChwb3J0LnBvcnRJZCAhPT0gIiIpIHsKICAgICAgICAvLyBkb24ndCBjaGFuZ2UgdGhlIGRlZmF1bHQgcG9ydCwgd2hpY2ggaXMgdGhlIGJpZyBzaGFwZQogICAgICAgIHBvcnQuZmlsbCA9IHNob3cgPyAicmdiYSgyNTUsMCwwLC41KSIgOiBudWxsOwogICAgICB9CiAgICB9KTsKICB9CiAgLyoqDQogICAqIOi/nuaOpee6v+eahOmAieS4reagt+W8jw0KICAgKiBAcmV0dXJucyB7Kn0NCiAgICovCgoKICBmdW5jdGlvbiBtYWtlTGlua1NlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlKCkgewogICAgcmV0dXJuIEcoZ28uQWRvcm5tZW50LCAiTGluayIsIEcoZ28uU2hhcGUsIC8vIGlzUGFuZWxNYWluIGRlY2xhcmVzIHRoYXQgdGhpcyBTaGFwZSBzaGFyZXMgdGhlIExpbmsuZ2VvbWV0cnkKICAgIHsKICAgICAgaXNQYW5lbE1haW46IHRydWUsCiAgICAgIGZpbGw6IG51bGwsCiAgICAgIHN0cm9rZTogImRlZXBza3libHVlIiwKICAgICAgc3Ryb2tlV2lkdGg6IDAKICAgIH0pIC8vIHVzZSBzZWxlY3Rpb24gb2JqZWN0J3Mgc3Ryb2tlV2lkdGgKICAgICk7CiAgfQogIC8qKg0KICAgKiDlrprkuYnov57mjqXnur/nmoTmoLflvI/mqKHmnb8NCiAgICogQHJldHVybnMgeyp9DQogICAqLwoKCiAgZnVuY3Rpb24gbWFrZUxpbmtUZW1wbGF0ZSgpIHsKICAgIHJldHVybiBHKGdvLkxpbmssIC8vIHRoZSB3aG9sZSBsaW5rIHBhbmVsCiAgICB7CiAgICAgIHNlbGVjdGFibGU6IHRydWUsCiAgICAgIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiBtYWtlTGlua1NlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlKCkKICAgIH0sIHsKICAgICAgcmVsaW5rYWJsZUZyb206IHRydWUsCiAgICAgIHJlbGlua2FibGVUbzogdHJ1ZSwKICAgICAgcmVzaGFwYWJsZTogdHJ1ZQogICAgfSwgewogICAgICByb3V0aW5nOiBnby5MaW5rLkF2b2lkc05vZGVzLAogICAgICBjdXJ2ZTogZ28uTGluay5KdW1wT3ZlciwKICAgICAgY29ybmVyOiA1LAogICAgICB0b1Nob3J0TGVuZ3RoOiA0CiAgICB9LCBHKGdvLlNoYXBlLCAvLyDnur/mnaEKICAgIHsKICAgICAgaXNQYW5lbE1haW46IHRydWUsCiAgICAgIHN0cm9rZTogIiNENUQ1RDUiLAogICAgICBzdHJva2VXaWR0aDogMwogICAgfSksIEcoZ28uU2hhcGUsIC8vIOeureWktAogICAgewogICAgICB0b0Fycm93OiAic3RhbmRhcmQiLAogICAgICBzdHJva2U6IG51bGwsCiAgICAgIGZpbGw6ICcjRDVENUQ1JwogICAgfSwgbmV3IGdvLkJpbmRpbmcoInN0cm9rZSIpLCBuZXcgZ28uQmluZGluZygiZmlsbCIpLCBuZXcgZ28uQmluZGluZygiek9yZGVyIikpLCBHKGdvLlBhbmVsLCAiQXV0byIsIEcoZ28uU2hhcGUsIHsKICAgICAgZmlsbDogbnVsbCwKICAgICAgc3Ryb2tlOiBudWxsCiAgICB9LCBuZXcgZ28uQmluZGluZygiZmlsbCIsICJwRmlsbCIpLCBuZXcgZ28uQmluZGluZygiek9yZGVyIikpLCBHKGdvLlRleHRCbG9jaywgewogICAgICB0ZXh0QWxpZ246ICJjZW50ZXIiLAogICAgICBmb250OiAiMTBwdCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmIiwKICAgICAgc3Ryb2tlOiAiIzU1NTU1NSIsCiAgICAgIG1hcmdpbjogNAogICAgfSwgbmV3IGdvLkJpbmRpbmcoInRleHQiLCAidGV4dCIpLCBuZXcgZ28uQmluZGluZygiek9yZGVyIikpLCAvLyB0aGUgbGFiZWwgc2hvd3MgdGhlIG5vZGUgZGF0YSdzIHRleHQKICAgIHsKICAgICAgdG9vbFRpcDogLy8gdGhpcyB0b29sdGlwIEFkb3JubWVudCBpcyBzaGFyZWQgYnkgYWxsIG5vZGVzCiAgICAgIEcoZ28uQWRvcm5tZW50LCAiQXV0byIsIEcoZ28uU2hhcGUsIHsKICAgICAgICBmaWxsOiAiI0ZGRkZDQyIKICAgICAgfSksIEcoZ28uVGV4dEJsb2NrLCB7CiAgICAgICAgbWFyZ2luOiA0CiAgICAgIH0sIC8vIHRoZSB0b29sdGlwIHNob3dzIHRoZSByZXN1bHQgb2YgY2FsbGluZyBub2RlSW5mbyhkYXRhKQogICAgICBuZXcgZ28uQmluZGluZygidGV4dCIsICIiLCBub2RlSW5mbykpKSAvLyB0aGlzIGNvbnRleHQgbWVudSBBZG9ybm1lbnQgaXMgc2hhcmVkIGJ5IGFsbCBub2RlcwogICAgICAvLyBjb250ZXh0TWVudTogbWFrZVBhcnRDb250ZXh0TWVudSgpCgogICAgfSkpOwogIH0KICAvKioNCiAgICog5rWB56iL5Zu+5YWD57Sg55qE5Y+M5Ye75LqL5Lu2DQogICAqIEBwYXJhbSBldg0KICAgKi8KCgogIGZ1bmN0aW9uIG9uT2JqZWN0RG91YmxlQ2xpY2tlZChldikgewogICAgdmFyIHBhcnQgPSBldi5zdWJqZWN0LnBhcnQ7CiAgICBzaG93RWRpdE5vZGUocGFydCk7CiAgfQogIC8qKg0KICAgKiDmtYHnqIvlm77lpoLmnpzmnInlj5jliqjvvIzliJnmj5DnpLrnlKjmiLfkv53lrZgNCiAgICogQHBhcmFtIGUNCiAgICovCgoKICBmdW5jdGlvbiBvbkRpYWdyYW1Nb2RpZmllZChlKSB7CiAgICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0blNhdmVGbG93Iik7CiAgICBpZiAoYnV0dG9uKSBidXR0b24uZGlzYWJsZWQgPSAhX2Rlc2lnbmVyLmlzTW9kaWZpZWQ7CiAgICB2YXIgaWR4ID0gZG9jdW1lbnQudGl0bGUuaW5kZXhPZigiKiIpOwoKICAgIGlmIChfZGVzaWduZXIuaXNNb2RpZmllZCkgewogICAgICBpZiAoaWR4IDwgMCkgZG9jdW1lbnQudGl0bGUgKz0gIioiOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGlkeCA+PSAwKSBkb2N1bWVudC50aXRsZSA9IGRvY3VtZW50LnRpdGxlLnN1YnN0cigwLCBpZHgpOwogICAgfQogIH0KICAvKioNCiAgICog57yW6L6R6IqC54K55L+h5oGvDQogICAqLwoKCiAgZnVuY3Rpb24gc2hvd0VkaXROb2RlKG5vZGUpIHsKICAgIF90aGlzLnNob3dFZGl0Tm9kZShub2RlKTsKCiAgICByZXR1cm4gbm9kZTsKICB9CiAgLyoqDQogICAqIOabtOaWsOiKgueCueS/oeaBrw0KICAgKiBAcGFyYW0gb2xkRGF0YQ0KICAgKiBAcGFyYW0gbmV3RGF0YQ0KICAgKi8KCgogIGZ1bmN0aW9uIHVwZGF0ZU5vZGVEYXRhKG5vZGUsIHRleHQpIHsKICAgIF9kZXNpZ25lci5zdGFydFRyYW5zYWN0aW9uKCJ2YWNhdGUiKTsKCiAgICBfZGVzaWduZXIubW9kZWwuc2V0RGF0YVByb3BlcnR5KG5vZGUuZGF0YSwgInRleHQiLCB0ZXh0KTsKCiAgICBfZGVzaWduZXIuY29tbWl0VHJhbnNhY3Rpb24oInZhY2F0ZSIpOwogIH0KICAvKioNCiAgICog5pu05pS55omA5pyJ6L+e57q/5Lit6Ze055qE5paH5pys6IOM5pmv6ImyDQogICAqLwoKCiAgZnVuY3Rpb24gc2V0TGlua1RleHRCZygpIHsKICAgIF9kZXNpZ25lci5saW5rcy5lYWNoKGZ1bmN0aW9uIChsaW5rKSB7CiAgICAgIF9kZXNpZ25lci5zdGFydFRyYW5zYWN0aW9uKCJ2YWNhdGUiKTsKCiAgICAgIGlmIChsaW5rLmRhdGEudGV4dCkgewogICAgICAgIF9kZXNpZ25lci5tb2RlbC5zZXREYXRhUHJvcGVydHkobGluay5kYXRhLCAicEZpbGwiLCB3aW5kb3cuZ28uR3JhcGhPYmplY3QubWFrZShnby5CcnVzaCwgIlJhZGlhbCIsIHsKICAgICAgICAgIDA6ICJyZ2IoMjQwLCAyNDAsIDI0MCkiLAogICAgICAgICAgMC4zOiAicmdiKDI0MCwgMjQwLCAyNDApIiwKICAgICAgICAgIDE6ICJyZ2JhKDI0MCwgMjQwLCAyNDAsIDApIgogICAgICAgIH0pKTsKICAgICAgfQoKICAgICAgX2Rlc2lnbmVyLmNvbW1pdFRyYW5zYWN0aW9uKCJ2YWNhdGUiKTsKICAgIH0pOwogIH0KICAvKiogLS0tLS0tLS1wcml2YXRlIG1ldGhvZC0tLS0tLS0tLS0tLS0tLS0tLWVuZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qKi8KCgogIHJldHVybiB0aGlzOwp9Cgp2YXIgX2RlZmF1bHQgPSBGbG93RGVzaWduZXI7CmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0Ow=="},{"version":3,"sources":["E:/boman-framwork/ruoyi-ui/src/utils/flow-desinger.js"],"names":["FlowDesigner","diagramDiv","event","G","go","GraphObject","make","_this","_designer","myPalette","_jsonNewStep","key","guid","text","remark","type","showEditNode","SelectionDeleted","LinkDrawn","externalobjectsdropped","LinkRelinked","initToolbar","div","moduleType","modelArr","category","Palette","maxSelectionCount","nodeTemplateMap","model","GraphLinksModel","nodeDataArray","console","log","displayFlow","flowData","Model","fromJson","pos","modelData","position","diagram","setLinkTextBg","createStep","jsonNewStep","loc","addNodeData","getFlowData","Point","stringify","toJson","checkData","errMsg","map","item","hasOwnProperty","init","divId","Diagram","allowDrop","allowTextEdit","allowHorizontalScroll","allowVerticalScroll","Shape","segmentIndex","cursor","desiredSize","Size","fill","stroke","addDiagramListener","onDiagramModified","onObjectDoubleClicked","e","subject","each","n","data","commandHandler","canDeleteSelection","selection","all","nodeOrLink","add","Node","locationSpot","Spot","Center","Binding","parse","makeTwoWay","selectable","selectionAdornmentTemplate","makeNodeSelectionAdornmentTemplate","Panel","name","portId","fromLinkable","toLinkable","strokeWidth","margin","width","height","alignment","TopRight","geometry","Geometry","geoFunc","TextBlock","font","wrap","WrapFit","textAlign","verticalAlignment","NaN","toolTip","Adornment","nodeInfo","makeNodePort","Top","Left","Right","Bottom","mouseEnter","node","showNodePort","mouseLeave","overflow","OverflowEllipsis","linkTemplate","makeLinkTemplate","r","Math","floor","random","Number","geoname","icons","operationNodeTemplate","approvalNodeTemplate","strokeDashArray","Placeholder","spot","output","input","alignmentFocus","fromSpot","toSpot","d","makePartContextMenu","makeMenuItem","obj","contextmenu","part","adornedPart","cutSelection","o","canCutSelection","copySelection","canCopySelection","deleteSelection","action","visiblePredicate","click","ofObject","show","ports","port","makeLinkSelectionAdornmentTemplate","isPanelMain","Link","relinkableFrom","relinkableTo","reshapable","routing","AvoidsNodes","curve","JumpOver","corner","toShortLength","toArrow","ev","button","document","getElementById","disabled","isModified","idx","title","indexOf","substr","updateNodeData","startTransaction","setDataProperty","commitTransaction","links","link","window","Brush"],"mappings":"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","sourcesContent":["import icons from './icon.js'\r\n\r\nfunction FlowDesigner(diagramDiv,event) {\r\n var G = go.GraphObject.make;\r\n var _this = {};\r\n var _designer = {};\r\n var myPalette = null\r\n var _jsonNewStep = { key: guid(), text: \"审批节点\", remark: '', type: 0 };\r\n\r\n /** 处理传入事件 */\r\n if(event.showEditNode){ //编辑节点\r\n _this.showEditNode = event.showEditNode\r\n }\r\n if(event.SelectionDeleted){ //删除事件\r\n _this.SelectionDeleted = event.SelectionDeleted\r\n }\r\n if(event.LinkDrawn){ //线的生成事件\r\n _this.LinkDrawn = event.LinkDrawn\r\n }\r\n if(event.externalobjectsdropped){ //节点的生成事件\r\n _this.externalobjectsdropped = event.externalobjectsdropped\r\n }\r\n\r\n if(event.LinkRelinked){ //连线修改\r\n _this.LinkRelinked = event.LinkRelinked\r\n }\r\n\r\n /** --------public method----------------------------------------**/\r\n /**\r\n * 初始化图例面板\r\n * 0审批节点 1开始节点 2结束节点 3操作节点 4服务节点\r\n * @returns {*}\r\n */\r\n this.initToolbar = function(div,moduleType){\r\n \r\n let modelArr = [\r\n // { key: guid(), text: \"开始\", figure: \"Terminator\", fill: \"#4fba4f\", type: 1 },\r\n { key: guid(), text: \"审批节点\", remark: '', type: 0, category:'Approval' },\r\n { key: guid(), text: \"操作节点\", remark: '', type: 4, category:'Operation' },\r\n { key: guid(), text: \"服务节点\", remark: '', type: 3, category:'Service' },\r\n { key: guid(), text: \"子流程节点\", remark: '', type: 6, category:'Subprocesses' }\r\n // { key: guid(), text: \"结束\", figure: \"Terminator\", fill: \"#CE0620\", type: 2 }\r\n ]\r\n if(!moduleType){\r\n modelArr = [{ key: guid(), text: \"审批节点\", remark: '', type: 0, category:'Approval' }]\r\n }\r\n if(!myPalette){\r\n var Palette =\r\n G(go.Palette, div, // 必须是DIV元素\r\n {\r\n maxSelectionCount: 3,\r\n nodeTemplateMap: _designer.nodeTemplateMap, // 跟设计图共同一套样式模板\r\n model: new go.GraphLinksModel(modelArr)\r\n });\r\n \r\n myPalette = Palette\r\n }else{\r\n myPalette.model.nodeDataArray = modelArr\r\n }\r\n console.log(myPalette,222222)\r\n return myPalette;\r\n };\r\n\r\n /**\r\n * 在设计面板中显示流程图\r\n * @param flowData 流程图json数据\r\n */\r\n this.displayFlow = function (flowData) {\r\n\r\n if(!flowData) return;\r\n\r\n _designer.model = go.Model.fromJson(flowData);\r\n\r\n var pos = _designer.model.modelData.position;\r\n \r\n // if (pos) _designer.initialPosition = go.Point.parse(pos);\r\n this.diagram = _designer\r\n // 更改所有连线中间的文本背景色\r\n setLinkTextBg();\r\n };\r\n\r\n /**\r\n * 创建新步骤\r\n */\r\n this.createStep = function() {\r\n var jsonNewStep = {key:_jsonNewStep.key, text:_jsonNewStep.text};\r\n jsonNewStep.loc = \"270 140\";// “新步骤”显示的位置\r\n _designer.model.addNodeData(jsonNewStep);\r\n };\r\n\r\n /**\r\n * 获取流程图数据\r\n * @returns {*}\r\n */\r\n this.getFlowData = function () {\r\n _designer.model.modelData.position = go.Point.stringify(_designer.position);\r\n return _designer.model.toJson();\r\n };\r\n\r\n /**\r\n * 检验流程图是否规范\r\n */\r\n this.checkData = function() {\r\n var errMsg = \"\";\r\n\r\n // 检查:每个步骤必须包含角色\r\n if (!_designer.model.nodeDataArray) return '请绘制流程图';\r\n\r\n // $.each(_designer.model.nodeDataArray, function(i, item) {\r\n // if (!item.hasOwnProperty(\"remark\") || item.remark === \"\") {\r\n // errMsg = \"请为步骤【\" + item.text + \"】设置备注~\";\r\n // return false;\r\n // }\r\n // });\r\n\r\n _designer.model.nodeDataArray.map(item => {\r\n if (!item.hasOwnProperty(\"remark\") || item.remark === \"\") {\r\n errMsg = \"请为步骤【\" + item.text + \"】设置备注~\";\r\n return false;\r\n }\r\n })\r\n\r\n\r\n return errMsg;\r\n };\r\n\r\n\r\n\r\n /** --------public method-------------end---------------------------**/\r\n\r\n this.diagram = init(diagramDiv);\r\n\r\n /** --------private method----------------------------------------**/\r\n\r\n /**\r\n * 初始化流程设计器\r\n * @param divId 设计器Div\r\n * \r\n * node type \r\n */\r\n function init(divId) {\r\n _designer = G(go.Diagram, divId, // must name or refer to the DIV HTML element\r\n { \r\n // grid: G(go.Panel, \"Grid\", 背景格\r\n // G(go.Shape, \"LineH\", { stroke: \"lightgray\", strokeWidth: 0.5 }),\r\n // G(go.Shape, \"LineH\", { stroke: \"gray\", strokeWidth: 0.5, interval: 10 }),\r\n // G(go.Shape, \"LineV\", { stroke: \"lightgray\", strokeWidth: 0.5 }),\r\n // G(go.Shape, \"LineV\", { stroke: \"gray\", strokeWidth: 0.5, interval: 10 })\r\n // ),\r\n allowDrop: true, // must be true to accept drops from the Palette\r\n allowTextEdit: false,\r\n allowHorizontalScroll: true,\r\n allowVerticalScroll: true,\r\n // \"clickCreatingTool.isDoubleClick\":false,\r\n // \"clickCreatingTool.archetypeNodeData\": {}, // 双击创建新步骤\r\n // \"draggingTool.dragsLink\": true,\r\n \"draggingTool.isGridSnapEnabled\": true,\r\n // \"linkingTool.isUnconnectedLinkValid\": true,\r\n \"linkingTool.portGravity\": 20,\r\n // \"relinkingTool.isUnconnectedLinkValid\": true,\r\n \"relinkingTool.portGravity\": 20,\r\n \"relinkingTool.fromHandleArchetype\":\r\n G(go.Shape, \"Diamond\", { segmentIndex: 0, cursor: \"pointer\", desiredSize: new go.Size(8, 8), fill: \"tomato\", stroke: \"darkred\" }),\r\n \"relinkingTool.toHandleArchetype\":\r\n G(go.Shape, \"Diamond\", { segmentIndex: -1, cursor: \"pointer\", desiredSize: new go.Size(8, 8), fill: \"darkred\", stroke: \"tomato\" }),\r\n \"linkReshapingTool.handleArchetype\":\r\n G(go.Shape, \"Diamond\", { desiredSize: new go.Size(7, 7), fill: \"lightblue\", stroke: \"deepskyblue\" }),\r\n \"undoManager.isEnabled\": false\r\n });\r\n\r\n // 流程图如果有变动,则提示用户保存\r\n _designer.addDiagramListener(\"Modified\", onDiagramModified);\r\n\r\n // 双击事件\r\n _designer.addDiagramListener(\"ObjectDoubleClicked\", onObjectDoubleClicked);\r\n\r\n // 移除事件\r\n _designer.addDiagramListener(\"SelectionDeleted\", function(e) {\r\n e.subject.each(function(n){\r\n _this.SelectionDeleted(n.data)\r\n });\r\n })\r\n\r\n //线的生成\r\n _designer.addDiagramListener(\"LinkDrawn\", function(e) {\r\n e.subject.data.key = guid()\r\n _this.LinkDrawn(e.subject.data)\r\n })\r\n\r\n\r\n //线的重绘\r\n _designer.addDiagramListener(\"LinkRelinked\", function(e) {\r\n _this.LinkRelinked(e.subject.data)\r\n })\r\n\r\n //添加监听节点生成事件\r\n _designer.addDiagramListener(\"externalobjectsdropped\", function(e) {\r\n // var jsonNewStep = {key:_jsonNewStep.key, text:_jsonNewStep.text};\r\n e.subject.each(function(n){\r\n //得到从Palette拖过来的节点\r\n _this.externalobjectsdropped(n.data)\r\n });\r\n // jsonNewStep.loc = \"-100 0\";// “新步骤”显示的位置\r\n // jsonNewStep.type = 0 \r\n // jsonNewStep.key = guid()\r\n // // _designer.model.addNodeData(jsonNewStep);\r\n // _this.externalobjectsdropped(jsonNewStep)\r\n })\r\n\r\n\r\n //监听节点或线的删除前事件\r\n _designer.commandHandler.canDeleteSelection = function(e) { \r\n\t\t\t//用例获取选中的节点或线 \r\n\t\t\treturn _designer.selection.all(function(nodeOrLink) { \r\n\t\t\t\t//判断是否是开始或者结束节点\r\n\t\t\t\tif(nodeOrLink.data.type === 1 || nodeOrLink.data.type === 2){ \r\n\t\t\t\t\treturn false; \r\n\t\t\t\t}else{ \r\n\t\t\t\t\treturn true; \r\n\t\t\t\t} \r\n\t\t\t}); \r\n }\r\n \r\n // var tool = _designer.toolManager.clickCreatingTool;\r\n // tool.insertPart = (loc) => {\r\n // var jsonNewStep = {key:_jsonNewStep.key, text:_jsonNewStep.text};\r\n // jsonNewStep.type = 0 \r\n // jsonNewStep.loc = `${loc.x} ${loc.y}`;\r\n // _designer.model.addNodeData(jsonNewStep);\r\n // _this.externalobjectsdropped(jsonNewStep)\r\n // }\r\n \r\n\r\n // 流程步骤的样式模板\r\n // _designer.nodeTemplate = approvalNodeTemplate();\r\n // _designer.nodeTemplate = operationNodeTemplate();\r\n // _designer.nodeTemplateMap.add('Approval',approvalNodeTemplate)\r\n\r\n // 服务节点\r\n _designer.nodeTemplateMap.add('Subprocesses',\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 28, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('subprocesses'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n )\r\n )\r\n\r\n // 服务节点\r\n _designer.nodeTemplateMap.add('Service',\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 28, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('service'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n )\r\n )\r\n\r\n // 审批节点\r\n _designer.nodeTemplateMap.add('Approval',\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 28, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('approval'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n )\r\n )\r\n\r\n // 操作节点\r\n _designer.nodeTemplateMap.add('Operation',\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 28, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('operation'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n ) \r\n )\r\n // 添加开始节点\r\n _designer.nodeTemplateMap.add(\"Start\",\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n G(go.Panel, \"Auto\",\r\n { name: \"Start\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"Circle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"Start\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"#5F7790\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#5F7790\",\r\n // geometryString: \"F M0 0 L100 0 B-90 180 100 25 25 25 L0 50 B90 180 0 25 25 25\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin:8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"white\",\r\n overflow:go.TextBlock.OverflowEllipsis\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),\r\n {\r\n toolTip: G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 },\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n )\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n ));\r\n \r\n // 添加结束节点\r\n _designer.nodeTemplateMap.add(\"End\",\r\n G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n G(go.Panel, \"Auto\",\r\n { name: \"End\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"Circle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"End\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"#5F7790\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#5F7790\",\r\n // geometryString: \"F M0 0 L100 0 Q175 25 100 50 L0 50 Q-75 25 0 0\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"white\"\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),\r\n {\r\n toolTip: G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 },\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n )\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n ));\r\n\r\n // 流程连接线的样式模板\r\n _designer.linkTemplate = makeLinkTemplate();\r\n \r\n return _designer\r\n }\r\n\r\n /**\r\n * 生成GUID\r\n * @returns {string}\r\n */\r\n function guid() {\r\n var r = Math.floor(Math.random() * (30000 - 1 + 1) + 1);\r\n return Number(r);\r\n }\r\n\r\n function geoFunc(geoname) {\r\n if (icons[geoname]) return icons[geoname];\r\n else return icons[\"approval\"]; // default icon\r\n }\r\n\r\n /**\r\n * 操作节点样式模板\r\n * @returns {*}\r\n */\r\n function operationNodeTemplate(){\r\n return G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 20, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('operation'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * 操作节点样式模板\r\n * @returns {*}\r\n */\r\n function approvalNodeTemplate(){\r\n console.log(1222)\r\n return G(go.Node, \"Spot\",\r\n { locationSpot: go.Spot.Center },\r\n new go.Binding(\"location\", \"loc\", go.Point.parse).makeTwoWay(go.Point.stringify),\r\n { selectable: true, selectionAdornmentTemplate: makeNodeSelectionAdornmentTemplate() },\r\n new go.Binding(\"angle\").makeTwoWay(),\r\n // the main object is a Panel that surrounds a TextBlock with a Shape\r\n G(go.Panel, \"Auto\",\r\n { name: \"PANEL\" },\r\n new go.Binding(\"desiredSize\", \"size\", go.Size.parse).makeTwoWay(go.Size.stringify),\r\n G(go.Shape, \"RoundedRectangle\", // default figure\r\n {\r\n portId: \"\", // the default port: if no spot on link data, use closest side\r\n name: \"PIPE\",\r\n fromLinkable: true,\r\n toLinkable: true,\r\n cursor: \"pointer\",\r\n fill: \"white\", // default color\r\n strokeWidth: 1,\r\n stroke: \"#DCDEE2\"\r\n },\r\n new go.Binding(\"figure\"),\r\n new go.Binding(\"stroke\"),\r\n new go.Binding(\"strokeDashArray\"),\r\n new go.Binding(\"strokeWidth\"),\r\n new go.Binding(\"fill\")),\r\n G(go.Shape,\r\n { \r\n margin: 5, \r\n fill: 'black', \r\n strokeWidth: 0, \r\n width: 20, \r\n height: 20,\r\n alignment: go.Spot.TopRight,\r\n geometry: go.Geometry.parse(geoFunc('approval'))\r\n }),\r\n G(go.TextBlock,\r\n {\r\n font: \"bold 11pt Helvetica, Arial, sans-serif\",\r\n margin: 8,\r\n wrap: go.TextBlock.WrapFit,\r\n stroke: \"#343434\",\r\n textAlign: \"center\",\r\n alignment: go.Spot.Center,\r\n verticalAlignment: go.Spot.Center,\r\n wrap: go.TextBlock.WrapFit,\r\n minSize: new go.Size(126, 27),\r\n maxSize: new go.Size(126, NaN)\r\n },\r\n new go.Binding(\"text\").makeTwoWay()),// the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // 绑定上下文菜单\r\n // contextMenu: makePartContextMenu()\r\n }\r\n ),\r\n // 4个连接点\r\n makeNodePort(\"T\", go.Spot.Top, false, true),\r\n makeNodePort(\"L\", go.Spot.Left, true, true),\r\n makeNodePort(\"R\", go.Spot.Right, true, true),\r\n makeNodePort(\"B\", go.Spot.Bottom, true, false),\r\n {\r\n mouseEnter: function (e, node) { showNodePort(node, true); },\r\n mouseLeave: function (e, node) { showNodePort(node, false); }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * 选中节点的样式\r\n * @returns {*}\r\n */\r\n function makeNodeSelectionAdornmentTemplate(){\r\n return G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: null, stroke: \"deepskyblue\", strokeWidth: 1.5, strokeDashArray: [4, 2] }),\r\n G(go.Placeholder)\r\n );\r\n }\r\n\r\n /**\r\n * 创建连接点\r\n * @param name\r\n * @param spot\r\n * @param output\r\n * @param input\r\n * @returns {*}\r\n */\r\n function makeNodePort(name, spot, output, input) {\r\n // the port is basically just a small transparent square\r\n return G(go.Shape, \"Circle\",\r\n {\r\n fill: null, // not seen, by default; set to a translucent gray by showSmallPorts, defined below\r\n stroke: null,\r\n desiredSize: new go.Size(7, 7),\r\n alignment: spot, // align the port on the main Shape\r\n alignmentFocus: spot, // just inside the Shape\r\n portId: name, // declare this object to be a \"port\"\r\n fromSpot: spot,\r\n toSpot: spot, // declare where links may connect at this port\r\n fromLinkable: output,\r\n toLinkable: input, // declare whether the user may draw links to/from here\r\n cursor: \"pointer\" // show a different cursor to indicate potential link point\r\n });\r\n }\r\n\r\n /**\r\n * tooltip上显示的信息\r\n * @param d\r\n * @returns {string}\r\n */\r\n function nodeInfo(d) {\r\n return '双击可编辑';\r\n }\r\n\r\n /**\r\n * 右键菜单\r\n * @returns {*}\r\n */\r\n function makePartContextMenu(){\r\n return G(go.Adornment, \"Vertical\",\r\n makeMenuItem(\"编辑\",\r\n function(e, obj) { // OBJ is this Button\r\n var contextmenu = obj.part; // the Button is in the context menu Adornment\r\n var part = contextmenu.adornedPart; // the adornedPart is the Part that the context menu adorns\r\n // now can do something with PART, or with its data, or with the Adornment (the context menu)\r\n showEditNode(part);\r\n }),\r\n makeMenuItem(\"剪切\",\r\n function(e, obj) { e.diagram.commandHandler.cutSelection(); },\r\n function(o) { return o.diagram.commandHandler.canCutSelection(); }),\r\n makeMenuItem(\"复制\",\r\n function(e, obj) { e.diagram.commandHandler.copySelection(); },\r\n function(o) { return o.diagram.commandHandler.canCopySelection(); }),\r\n makeMenuItem(\"删除\",\r\n function(e, obj) { e.diagram.commandHandler.deleteSelection(); },\r\n function(o) { return o.diagram.commandHandler.canDeleteSelection(); })\r\n );\r\n }\r\n\r\n /**\r\n * 生成右键菜单项\r\n * @param text\r\n * @param action\r\n * @param visiblePredicate\r\n * @returns {*}\r\n */\r\n function makeMenuItem(text, action, visiblePredicate) {\r\n return G(\"ContextMenuButton\",\r\n G(go.TextBlock, text, {\r\n margin: 5,\r\n textAlign: \"left\",\r\n stroke: \"#555555\"\r\n }),\r\n { click: action },\r\n // don't bother with binding GraphObject.visible if there's no predicate\r\n visiblePredicate ? new go.Binding(\"visible\", \"\", visiblePredicate).ofObject() : {});\r\n }\r\n\r\n /**\r\n * 是否显示步骤的连接点\r\n * @param node\r\n * @param show\r\n */\r\n function showNodePort(node, show) {\r\n node.ports.each(function (port) {\r\n if (port.portId !== \"\") { // don't change the default port, which is the big shape\r\n port.fill = show ? \"rgba(255,0,0,.5)\" : null;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 连接线的选中样式\r\n * @returns {*}\r\n */\r\n function makeLinkSelectionAdornmentTemplate(){\r\n return G(go.Adornment, \"Link\",\r\n G(go.Shape,\r\n // isPanelMain declares that this Shape shares the Link.geometry\r\n { isPanelMain: true, fill: null, stroke: \"deepskyblue\", strokeWidth: 0 }) // use selection object's strokeWidth\r\n );\r\n }\r\n\r\n \r\n /**\r\n * 定义连接线的样式模板\r\n * @returns {*}\r\n */\r\n function makeLinkTemplate(){\r\n return G(go.Link, // the whole link panel\r\n { selectable: true, selectionAdornmentTemplate: makeLinkSelectionAdornmentTemplate() },\r\n { relinkableFrom: true, relinkableTo: true, reshapable: true },\r\n {\r\n routing: go.Link.AvoidsNodes,\r\n curve: go.Link.JumpOver,\r\n corner: 5,\r\n toShortLength: 4\r\n },\r\n G(go.Shape, // 线条\r\n { isPanelMain: true, stroke: \"#D5D5D5\", strokeWidth: 3 }),\r\n G(go.Shape, // 箭头\r\n { toArrow: \"standard\", stroke: null, fill: '#D5D5D5' }, new go.Binding(\"stroke\"), new go.Binding(\"fill\"), new go.Binding(\"zOrder\")),\r\n G(go.Panel, \"Auto\",\r\n G(go.Shape, {\r\n fill: null,\r\n stroke: null\r\n }, new go.Binding(\"fill\", \"pFill\"), new go.Binding(\"zOrder\")),\r\n G(go.TextBlock,\r\n {\r\n textAlign: \"center\",\r\n font: \"10pt helvetica, arial, sans-serif\",\r\n stroke: \"#555555\",\r\n margin: 4\r\n },\r\n new go.Binding(\"text\", \"text\"), new go.Binding(\"zOrder\")), // the label shows the node data's text\r\n {\r\n toolTip:// this tooltip Adornment is shared by all nodes\r\n G(go.Adornment, \"Auto\",\r\n G(go.Shape, { fill: \"#FFFFCC\" }),\r\n G(go.TextBlock, { margin: 4 }, // the tooltip shows the result of calling nodeInfo(data)\r\n new go.Binding(\"text\", \"\", nodeInfo))\r\n ),\r\n // this context menu Adornment is shared by all nodes\r\n // contextMenu: makePartContextMenu()\r\n }\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * 流程图元素的双击事件\r\n * @param ev\r\n */\r\n function onObjectDoubleClicked(ev) {\r\n var part = ev.subject.part;\r\n showEditNode(part);\r\n }\r\n\r\n /**\r\n * 流程图如果有变动,则提示用户保存\r\n * @param e\r\n */\r\n function onDiagramModified(e){\r\n var button = document.getElementById(\"btnSaveFlow\");\r\n if (button) button.disabled = !_designer.isModified;\r\n var idx = document.title.indexOf(\"*\");\r\n if (_designer.isModified) {\r\n if (idx < 0) document.title += \"*\";\r\n } else {\r\n if (idx >= 0) document.title = document.title.substr(0, idx);\r\n }\r\n }\r\n\r\n /**\r\n * 编辑节点信息\r\n */\r\n function showEditNode(node) {\r\n _this.showEditNode(node)\r\n return node\r\n }\r\n\r\n /**\r\n * 更新节点信息\r\n * @param oldData\r\n * @param newData\r\n */\r\n function updateNodeData(node, text) {\r\n _designer.startTransaction(\"vacate\");\r\n _designer.model.setDataProperty(node.data, \"text\", text);\r\n _designer.commitTransaction(\"vacate\");\r\n }\r\n\r\n /**\r\n * 更改所有连线中间的文本背景色\r\n */\r\n function setLinkTextBg() {\r\n _designer.links.each(function (link) {\r\n _designer.startTransaction(\"vacate\");\r\n if (link.data.text) {\r\n _designer.model.setDataProperty(link.data, \"pFill\", window.go.GraphObject.make(go.Brush, \"Radial\", {\r\n 0: \"rgb(240, 240, 240)\",\r\n 0.3: \"rgb(240, 240, 240)\",\r\n 1: \"rgba(240, 240, 240, 0)\"\r\n }));\r\n }\r\n _designer.commitTransaction(\"vacate\");\r\n });\r\n }\r\n\r\n /** --------private method------------------end----------------------**/\r\n\r\n return this;\r\n}\r\n\r\nexport default FlowDesigner\r\n"]}]}