diff --git a/packages/pathway-mapper/dist/index.es5.js b/packages/pathway-mapper/dist/index.es5.js index 688ae012..8c0d60ba 100644 --- a/packages/pathway-mapper/dist/index.es5.js +++ b/packages/pathway-mapper/dist/index.es5.js @@ -1,2 +1,2 @@ -module.exports=function(t){var e={};function a(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,a),o.l=!0,o.exports}return a.m=t,a.c=e,a.d=function(t,e,i){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(a.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)a.d(i,o,function(e){return t[e]}.bind(null,o));return i},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,"a",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p="",a(a.s=81)}([function(t,e){t.exports=require("react")},function(t,e){t.exports=require("react-bootstrap")},function(t,e){t.exports=require("mobx")},function(t,e){t.exports=require("autobind-decorator")},function(t,e){t.exports=require("jquery")},function(t,e){t.exports=require("mobx-react")},function(t,e){t.exports=require("lodash")},function(t,e){t.exports=require("cytoscape")},function(t){t.exports=JSON.parse('{"ACC-2016-TP53-RB-pathway":["ACC-2016-TP53-RB-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDK4\\twyMGXBw8cUj6\\tGENE\\t-1\\t262\\t231\\t","RB1\\tLrJe2ktmcVzK\\tGENE\\t-1\\t262\\t340\\t","CDKN2A\\tN18olkvEcUJu\\tGENE\\t-1\\t387\\t127\\t","TP53\\t-VLZ5keBcXa3\\tGENE\\t-1\\t488\\t340\\t","MDM2\\t79evo3OUcVFA\\tGENE\\t-1\\t488\\t231\\t","CCNE1\\t-le5m2j6cWa2\\tGENE\\t-1\\t80\\t340\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","d3auWK_1cit5\\t79evo3OUcVFA\\t-VLZ5keBcXa3\\tINHIBITS","w4Yp60k9chhi\\tN18olkvEcUJu\\t79evo3OUcVFA\\tINHIBITS","XhRgnqAscgwV\\tN18olkvEcUJu\\twyMGXBw8cUj6\\tINHIBITS","0E_Xe1cUckq-\\twyMGXBw8cUj6\\tLrJe2ktmcVzK\\tINHIBITS","K9h1lRMzclc1\\t-le5m2j6cWa2\\tLrJe2ktmcVzK\\tINHIBITS"],"ACC-2016-WNT-signaling-pathway":["ACC-2016-WNT-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CTNNB1\\taS-MtgKvdBTI\\tGENE\\t-1\\t396\\t371\\t","MEN1\\tWoDJQ15LdCGw\\tGENE\\t-1\\t615\\t371\\t","APC\\tquRewaVqdAAg\\tGENE\\t-1\\t396\\t277\\t","WNT\\tg2oPjTN1c_MF\\tFAMILY\\t-1\\t396\\t183\\t","ZNRF3\\tD1VT3C7Tc9uz\\tGENE\\t-1\\t396\\t87\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","mcDc9E8ddKPh\\tWoDJQ15LdCGw\\taS-MtgKvdBTI\\tINHIBITS","xhr-qCdhdMnS\\tg2oPjTN1c_MF\\tquRewaVqdAAg\\tINHIBITS","MRNaHfmqdLIB\\tquRewaVqdAAg\\taS-MtgKvdBTI\\tINHIBITS","V58DLRlddN04\\tD1VT3C7Tc9uz\\tg2oPjTN1c_MF\\tINHIBITS"],"BLCA-2014-Histone-modification-pathway":["BLCA-2014-Histone-modification-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","KDM1A\\tibAwJma20izY\\tGENE\\t-1\\t330\\t280\\t","K9 (Ac, me1-3)\\tUdMq7kedz9FO\\tPROCESS\\t-1\\t441\\t185\\t","K4 (me1-3)\\t6Itl25k-0F3S\\tPROCESS\\t-1\\t214\\t185\\t","KDM6B\\tKGmluEtPHXqp\\tGENE\\t_aOp5kW01GfD\\t685\\t332\\t","KDM4B\\t5_51HfxoHY9n\\tGENE\\tWWAQi_-h1FbJ\\t500\\t329\\t","H3\\t_L15u0RJ0Eq5\\tPROCESS\\t-1\\t1128\\t185\\t","K36 (me1-3)\\tyE8mFlUU0AcJ\\tPROCESS\\t-1\\t785\\t185\\t","KDM1B\\tf-uYX8eW0o-j\\tGENE\\t-1\\t330\\t338\\t","K27 (Ac, me1-3)\\tqU2DuUfoz_fU\\tPROCESS\\t-1\\t612\\t185\\t","K79 (me1-3)\\tsGOXj0dB0CoY\\tPROCESS\\t-1\\t945\\t185\\t","KDM4A\\tZN4FWAEl0yGP\\tGENE\\t-1\\t859\\t280\\t","KDM5B\\t2NfOJGRNHYQB\\tGENE\\tNnEeq-Df1E_j\\t151\\t333\\t","KDM4A\\tw2_Nlv2xHY9d\\tGENE\\tWWAQi_-h1FbJ\\t500\\t280\\t","Demethylases\\tHX269Het1CgI\\tPROCESS\\t-1\\t1107\\t280\\t","KDM4A-KDM4B\\tWWAQi_-h1FbJ\\tCOMPARTMENT\\t-1\\t500\\t304\\t","KDM5A-KDM5B\\tNnEeq-Df1E_j\\tCOMPARTMENT\\t-1\\t151\\t306\\t","KDM6A\\ttsbexFtHHXqU\\tGENE\\t_aOp5kW01GfD\\t685\\t280\\t","KDM5A\\tZGtryZF-HYPy\\tGENE\\tNnEeq-Df1E_j\\t151\\t280\\t","KDM6A-KDM6B\\t_aOp5kW01GfD\\tCOMPARTMENT\\t-1\\t685\\t306\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","QFzccFLP1rXn\\tUdMq7kedz9FO\\tqU2DuUfoz_fU\\tBINDS","1iLfbX2611ie\\tsGOXj0dB0CoY\\t_L15u0RJ0Eq5\\tBINDS","KtQPDuFH2B4M\\tNnEeq-Df1E_j\\t6Itl25k-0F3S\\tACTIVATES","1ufB4tsp2MbY\\tZN4FWAEl0yGP\\tyE8mFlUU0AcJ\\tACTIVATES","F6Hoq3VR2Fbi\\tibAwJma20izY\\t6Itl25k-0F3S\\tACTIVATES","c5Dw1pvh2GJ7\\tibAwJma20izY\\tUdMq7kedz9FO\\tACTIVATES","B85D8ro61xLn\\tyE8mFlUU0AcJ\\tsGOXj0dB0CoY\\tBINDS","e_aGaIGw1pWA\\t6Itl25k-0F3S\\tUdMq7kedz9FO\\tBINDS","EVjpyavJ2DfI\\tf-uYX8eW0o-j\\t6Itl25k-0F3S\\tACTIVATES","f0P9R0dZ2J5O\\t_aOp5kW01GfD\\tqU2DuUfoz_fU\\tACTIVATES","g_eFQ6zG2Hu-\\tWWAQi_-h1FbJ\\tUdMq7kedz9FO\\tACTIVATES","T1GuzceK1uZK\\tqU2DuUfoz_fU\\tyE8mFlUU0AcJ\\tBINDS"],"BLCA-2014-RTK-RAS-PI(3)K-pathway":["BLCA-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","ERBB2\\taqgx5yiY4na1\\tGENE\\tG_Vyif7SpoW2\\t584\\t98\\t","NRAS\\tAbEoLGCY4sp9\\tGENE\\tydhBmSAbpTKc\\t476\\t183\\t","TSC2\\tUD1lE2yO48n8\\tGENE\\t2_7tyoaRphSY\\t503\\t496\\t","PIK3CA\\ts5486n5gpU_K\\tGENE\\t-1\\t658\\t184\\t","PTEN\\ttiSgM3o0pX_z\\tGENE\\t-1\\t860\\t184\\t","FGFR3\\t5yUJdgCL4naU\\tGENE\\tG_Vyif7SpoW2\\t272\\t98\\t","Survival\\tt8b0oOIypis0\\tPROCESS\\t-1\\t791\\t584\\t","HRAS\\tLtxngbVT4spa\\tGENE\\tydhBmSAbpTKc\\t322\\t183\\t","RAS\\tG_Vyif7SpoW2\\tFAMILY\\t-1\\t506\\t98\\t","STK11\\t8wk4zb43pfsu\\tGENE\\t-1\\t317\\t469\\t","INPP4B\\tlGy7ILYwpZag\\tGENE\\t-1\\t804\\t266\\t","MTOR\\tVyT8z_EcpexB\\tGENE\\t-1\\t722\\t470\\t","TSC\\t2_7tyoaRphSY\\tFAMILY\\t-1\\t503\\t470\\t","Proliferation\\t1PYLl_CZpjUH\\tPROCESS\\t-1\\t665\\t584\\t","EGFR\\tMO1TWgRb4nbC\\tGENE\\tG_Vyif7SpoW2\\t429\\t98\\t","RAS\\tydhBmSAbpTKc\\tFAMILY\\t-1\\t399\\t183\\t","AKT\\tEuvUiqD6pbqL\\tGENE\\t-1\\t659\\t349\\t","TSC1\\tlj3YtBzu48oT\\tGENE\\t2_7tyoaRphSY\\t503\\t444\\t","ERBB3\\tSUuAzaJ-4nar\\tGENE\\tG_Vyif7SpoW2\\t739\\t98\\t","NF1\\tevdrZPc3pW-g\\tGENE\\t-1\\t399\\t270\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","arJi2bQrqEdS\\tevdrZPc3pW-g\\tydhBmSAbpTKc\\tINHIBITS","F1IgAgZPppxS\\tG_Vyif7SpoW2\\tydhBmSAbpTKc\\tACTIVATES","OqD_HmKHqQIw\\tEuvUiqD6pbqL\\t2_7tyoaRphSY\\tINHIBITS","PY7KfKiCqL9D\\tlGy7ILYwpZag\\ts5486n5gpU_K\\tINHIBITS","0PkuH29SqKeN\\ttiSgM3o0pX_z\\ts5486n5gpU_K\\tINHIBITS","zNMzC5CMqORJ\\ts5486n5gpU_K\\tEuvUiqD6pbqL\\tACTIVATES","UB7BIf_SqRqo\\t2_7tyoaRphSY\\tVyT8z_EcpexB\\tINHIBITS","OQI-iqX2qTLl\\t8wk4zb43pfsu\\t2_7tyoaRphSY\\tACTIVATES","9Vm-zOAgqGbc\\tydhBmSAbpTKc\\ts5486n5gpU_K\\tACTIVATES","uN421vA1qaeA\\tVyT8z_EcpexB\\tt8b0oOIypis0\\tACTIVATES","ZTgU7FgfqZmN\\tVyT8z_EcpexB\\t1PYLl_CZpjUH\\tACTIVATES"],"BLCA-2014-TP53-RB-pathway":["BLCA-2014-TP53-RB-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Cell cycle progression\\tok7nDiB9oQJI\\tPROCESS\\t-1\\t414\\t436\\t","CCNE1\\thm8HJrbqoWfo\\tGENE\\t-1\\t414\\t353\\t","TP53\\tJYRUofjRoSmI\\tGENE\\t-1\\t605\\t179\\t","MDM2\\t2XKi6b0joGD_\\tGENE\\t-1\\t413\\t179\\t","E2F3\\tmz71J5tHoOtX\\tGENE\\t-1\\t219\\t436\\t","Apoptosis\\t4-9gyc8LoX1s\\tPROCESS\\t-1\\t689\\t264\\t","CDKN2A\\t9A-DhP0-oFUi\\tGENE\\t-1\\t219\\t179\\t","CCND1\\tCsMIDjOQoHLw\\tGENE\\t-1\\t219\\t264\\t","FBXW7\\tmULNbFKfoZFg\\tGENE\\t-1\\t625\\t353\\t","ATM\\tjsI1OPG9oTvl\\tGENE\\t-1\\t605\\t85\\t","CDKN1A\\tmBClqwIZoU7d\\tGENE\\t-1\\t526\\t264\\t","RB1\\t-ACCNJRfoNBI\\tFAMILY\\t-1\\t219\\t353\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","B1RLlLrEo4cn\\tmz71J5tHoOtX\\tok7nDiB9oQJI\\tACTIVATES","As7hIoBSo17y\\tCsMIDjOQoHLw\\t-ACCNJRfoNBI\\tINHIBITS","mjgKjVX6ow0m\\t2XKi6b0joGD_\\tJYRUofjRoSmI\\tINHIBITS","5BaXTZDuo7H8\\tmULNbFKfoZFg\\thm8HJrbqoWfo\\tINHIBITS","PMdhVppIoyDR\\tJYRUofjRoSmI\\tmBClqwIZoU7d\\tACTIVATES","w2p9WUJxo22X\\t-ACCNJRfoNBI\\tmz71J5tHoOtX\\tINHIBITS","0hmD92TIo0ux\\t9A-DhP0-oFUi\\tCsMIDjOQoHLw\\tINHIBITS","RfMPHF4FouzT\\tjsI1OPG9oTvl\\tJYRUofjRoSmI\\tACTIVATES","toSMm4K7owET\\tJYRUofjRoSmI\\t2XKi6b0joGD_\\tACTIVATES","LPb5J4Quo8EC\\tmBClqwIZoU7d\\thm8HJrbqoWfo\\tINHIBITS","_PGdKZ50o5vL\\thm8HJrbqoWfo\\t-ACCNJRfoNBI\\tINHIBITS","Vcmxazyaoz8N\\t9A-DhP0-oFUi\\t2XKi6b0joGD_\\tINHIBITS","sABkuA1_oywi\\tJYRUofjRoSmI\\t4-9gyc8LoX1s\\tACTIVATES"],"BRCA-2012-Cell-cycle-signaling-pathway":["BRCA-2012-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","BRCA2\\tVHmofL2iBtHB\\tGENE\\t9ZypvHQTebqG\\t302\\t521\\t","p53/p21\\tK8vhHZlJewmz\\tPROCESS\\t-1\\t16\\t368\\t","Cell-cycle arrest\\trsfgLtPJBro0\\tPROCESS\\tPve6lcOCerP2\\t518\\t505\\t","BRCA1\\tPqa6yIQ4BtGs\\tGENE\\t9ZypvHQTebqG\\t145\\t521\\t","ATM\\tTQqdq6ZHdybO\\tGENE\\t-1\\t-54\\t427\\t","S/G2/M checkpoints\\teokFGf8gBroW\\tPROCESS\\tPve6lcOCerP2\\t518\\t452\\t","S-phase entry\\tplt5oIp7Broo\\tPROCESS\\tPve6lcOCerP2\\t518\\t401\\t","Cell cycle\\tPve6lcOCerP2\\tFAMILY\\t-1\\t518\\t453\\t","RB1\\tCequZQzRd8SZ\\tGENE\\t-1\\t321\\t329\\t","BRCA\\t9ZypvHQTebqG\\tFAMILY\\t-1\\t223\\t521\\t","CCNE1\\tglg_i-QQdz9z\\tGENE\\t-1\\t133\\t329\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","GjwkZT93eu2S\\tCequZQzRd8SZ\\tPve6lcOCerP2\\tACTIVATES","vbkfiLK9etui\\t9ZypvHQTebqG\\tPve6lcOCerP2\\tACTIVATES","dQvMCZFxeWIc\\tglg_i-QQdz9z\\tCequZQzRd8SZ\\tINHIBITS","OyM7Rh_ueTR2\\tTQqdq6ZHdybO\\tglg_i-QQdz9z\\tINHIBITS","fcvz9ztueiRb\\tTQqdq6ZHdybO\\t9ZypvHQTebqG\\tACTIVATES"],"BRCA-2012-RTK-RAS-PI(3)K-pathway":["BRCA-2012-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PIK3R1\\tLTI-_zA12M8_\\tGENE\\tQl_rV6PWbR4f\\t561\\t293\\t","MAP3K1\\tV2U7rAinbMri\\tGENE\\t-1\\t803\\t220\\t","IKBKB\\tv5be8J7cbT7P\\tGENE\\t-1\\t812\\t416\\t","AKT1\\t2eyyNjOs2P7t\\tGENE\\tb8_iWiV3bSnI\\t738\\t293\\t","PI3K\\tQl_rV6PWbR4f\\tFAMILY\\t-1\\t481\\t293\\t","NF-kB\\tf-dza7Cyd34R\\tPROCESS\\t-1\\t940\\t406\\t","PTEN\\tvmp2PR9WbESK\\tGENE\\t-1\\t480\\t218\\t","Proliferation\\tQgBC5rX5baS9\\tPROCESS\\t-1\\t1277\\t416\\t","MAP2K4\\thDh8Gi4cbOJg\\tGENE\\t-1\\t1075\\t220\\t","ERBB2\\tkuccSffw2Nzs\\tGENE\\tTi_1UFukcA6d\\t205\\t220\\t","PIK3CA\\tj3qYklwW2M9a\\tGENE\\tQl_rV6PWbR4f\\t402\\t293\\t","AKT3\\tpH6LKha-2P8C\\tGENE\\tb8_iWiV3bSnI\\t897\\t293\\t","PAK1\\tVjIN5hOKbQmQ\\tGENE\\t-1\\t480\\t416\\t","AKT\\tb8_iWiV3bSnI\\tFAMILY\\t-1\\t818\\t293\\t","CCND1\\tPKgbIo4AbVyY\\tGENE\\t-1\\t1084\\t416\\t","RTK\\tTi_1UFukcA6d\\tFAMILY\\t-1\\t205\\t292\\t","JNK/JUN Mediated Apoptosis\\t-MmWzJ2DbXrO\\tPROCESS\\t-1\\t1300\\t211\\t","IGF1R\\tL4qe8zf82Nz8\\tGENE\\tTi_1UFukcA6d\\t205\\t293\\t","EGFR\\tq9k-_XR32Nze\\tGENE\\tTi_1UFukcA6d\\t205\\t364\\t","Evading apoptosis\\tg1G4oW6RbY6F\\tPROCESS\\t-1\\t1274\\t293\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","fhs_9IT6cUqw\\tb8_iWiV3bSnI\\tg1G4oW6RbY6F\\tACTIVATES","teIhB-fucGLJ\\tVjIN5hOKbQmQ\\tb8_iWiV3bSnI\\tACTIVATES","huxShVp3cIQO\\tQl_rV6PWbR4f\\tb8_iWiV3bSnI\\tACTIVATES","WtHX5Q0hcXDM\\tPKgbIo4AbVyY\\tQgBC5rX5baS9\\tACTIVATES","wAq3PQHjcaoH\\tb8_iWiV3bSnI\\tv5be8J7cbT7P\\tACTIVATES","HE2KQFFscPqE\\thDh8Gi4cbOJg\\tPKgbIo4AbVyY\\tACTIVATES","kzZuvBjdcQut\\tPKgbIo4AbVyY\\thDh8Gi4cbOJg\\tINHIBITS","R6qp66fdcDsp\\tTi_1UFukcA6d\\tQl_rV6PWbR4f\\tACTIVATES","8xgflgJ1cSju\\tv5be8J7cbT7P\\tPKgbIo4AbVyY\\tACTIVATES","i-Pphq4BcWBa\\tb8_iWiV3bSnI\\tQgBC5rX5baS9\\tACTIVATES","4s_OHeX4cTjW\\thDh8Gi4cbOJg\\t-MmWzJ2DbXrO\\tACTIVATES","fegnTqNPcJpy\\tV2U7rAinbMri\\thDh8Gi4cbOJg\\tACTIVATES","tj1nKgy9cExZ\\tvmp2PR9WbESK\\tQl_rV6PWbR4f\\tINHIBITS"],"BRCA-2012-TP53-pathway":["BRCA-2012-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TP53\\tAtC08ZQJc2KU\\tGENE\\t-1\\t491\\t349\\t","Apoptosis\\toHj1iu9Nc3_k\\tPROCESS\\t-1\\t491\\t453\\t","MDM4\\teUAyFKEv_rSt\\tGENE\\tY4IgKFahc81t\\t690\\t375\\t","MDM2\\tEDekyeJO_rSa\\tGENE\\tY4IgKFahc81t\\t690\\t319\\t","AKT1\\tnWtQqBkt_evA\\tGENE\\t-1\\t491\\t245\\t","CHEK2\\tEZw1mFjYc0Pb\\tGENE\\t-1\\t300\\t350\\t","MDM\\tY4IgKFahc81t\\tFAMILY\\t-1\\t690\\t347\\t","ATM\\tDEtr5Wpj_eup\\tGENE\\t-1\\t300\\t245\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","EQR_Azwj_evL\\tDEtr5Wpj_eup\\tEZw1mFjYc0Pb\\tACTIVATES","sV9ZEeJ9dMg3\\tY4IgKFahc81t\\tAtC08ZQJc2KU\\tINHIBITS","kudrU-U-_evP\\tnWtQqBkt_evA\\tAtC08ZQJc2KU\\tINHIBITS","hxwMi4kydOBT\\tAtC08ZQJc2KU\\toHj1iu9Nc3_k\\tACTIVATES","uh5qfjUjdKB7\\tEZw1mFjYc0Pb\\tAtC08ZQJc2KU\\tACTIVATES"],"Cell Cycle":["Cell Cycle","","Regulation of mitotic cell cycle progression involving a signaling cascade of cyclins and cyclin-dependent kinases as well as a number of regulatory checkpoints.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","MDM2\\txPwjUPwi3Y86\\tGENE\\t-1\\t413\\t179","CDKN1A\\tFQbPaPlV3Y9Q\\tGENE\\t-1\\t526\\t264","FBXW7\\t_Honmyd33Y9K\\tGENE\\t-1\\t625\\t353","CCND1\\tKf3hsGsT3Y9F\\tGENE\\t-1\\t219\\t264","Cell cycle progression\\tyazwmMvz3Y8y\\tPROCESS\\t-1\\t414\\t436","CCNE1\\t4-ZVTw8b3Y81\\tGENE\\t-1\\t414\\t353","Apoptosis\\tSwnDUEnB3Y8_\\tPROCESS\\t-1\\t689\\t264","RB1\\tAFGazwPj3Y9U\\tFAMILY\\t-1\\t219\\t353","E2F3\\tb7YoPaEx3Y88\\tGENE\\t-1\\t219\\t436","CDKN2A\\tE6EgzvEy3Y9C\\tGENE\\t-1\\t219\\t179","TP53\\tmIL53nP63Y83\\tGENE\\t-1\\t605\\t179","ATM\\t4fc8CUod3Y9N\\tGENE\\t-1\\t605\\t85","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","3H557euy3Y9b\\t_Honmyd33Y9K\\t4-ZVTw8b3Y81\\tINHIBITS\\t","rC-lNx0W3Y9d\\tAFGazwPj3Y9U\\tb7YoPaEx3Y88\\tINHIBITS\\t","Qm2ZEnCl3Y9Z\\tKf3hsGsT3Y9F\\tAFGazwPj3Y9U\\tINHIBITS\\t","pPO3_YVM3Y9e\\tE6EgzvEy3Y9C\\tKf3hsGsT3Y9F\\tINHIBITS\\t","pGNnucwd3Y9g\\tmIL53nP63Y83\\txPwjUPwi3Y86\\tACTIVATES\\t","ygTYWu2k3Y9k\\tE6EgzvEy3Y9C\\txPwjUPwi3Y86\\tINHIBITS\\t","tq-BTuks3Y9i\\tFQbPaPlV3Y9Q\\t4-ZVTw8b3Y81\\tINHIBITS\\t","HPSR11Er3Y9b\\tmIL53nP63Y83\\tFQbPaPlV3Y9Q\\tACTIVATES\\t","h7AyF28j3Y9n\\tmIL53nP63Y83\\tSwnDUEnB3Y8_\\tACTIVATES\\t","vYHEvpqL3Y9f\\t4fc8CUod3Y9N\\tmIL53nP63Y83\\tACTIVATES\\t","4ELiZPT23Y9j\\t4-ZVTw8b3Y81\\tAFGazwPj3Y9U\\tINHIBITS\\t","jDEpTZhK3Y9X\\tb7YoPaEx3Y88\\tyazwmMvz3Y8y\\tACTIVATES\\t","_gVnliZV3Y9a\\txPwjUPwi3Y86\\tmIL53nP63Y83\\tINHIBITS\\t"],"COADREAD-2012-RTK-RAS-PI(3)K-pathway":["COADREAD-2012-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","IRS2\\tZvdL-fZM3WuZ\\tGENE\\t-1\\t189\\t452\\t","PIK3CA\\tMBUXnNN2z5Dt\\tGENE\\taDGGPsUl3doC\\t189\\t525\\t","KRAS\\trKR_2SY2z0N3\\tGENE\\tD6EmJIZx6Gzg\\t555\\t462\\t","ERBB2\\tStF--npjzyS_\\tGENE\\tjs1qiakd6GP4\\t404\\t298\\t","IGF2\\tWv-EmNFT15yN\\tGENE\\t-1\\t189\\t298\\t","PI3K\\taDGGPsUl3doC\\tFAMILY\\t-1\\t110\\t526\\t","BRAF\\tPUJ8AKki53pG\\tGENE\\t-1\\t479\\t549\\t","NRAS\\t8s1jKwvjz0Nm\\tGENE\\tD6EmJIZx6Gzg\\t406\\t462\\t","Cell survival\\t1UmcnGh24P6f\\tPROCESS\\t-1\\t323\\t697\\t","ERBB3\\tdg3Vl9qGzyTZ\\tGENE\\tjs1qiakd6GP4\\t556\\t300\\t","IGF1R\\tcYzz8jlS2HaK\\tGENE\\t-1\\t189\\t380\\t","RAS\\tD6EmJIZx6Gzg\\tFAMILY\\t-1\\t480\\t462\\t","PIK3R1\\to9hOOpRM0I1T\\tGENE\\taDGGPsUl3doC\\t32\\t527\\t","RTK\\tjs1qiakd6GP4\\tFAMILY\\t-1\\t480\\t299\\t","Translation\\tRmlBMHs64SgD\\tPROCESS\\t-1\\t478\\t696\\t","Proliferation\\trlRx40Am4Oyw\\tPROCESS\\t-1\\t164\\t697\\t","PTEN\\ttSZugv-P3gVw\\tGENE\\t-1\\t29\\t452\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","6Shu_O4w4GqO\\tcYzz8jlS2HaK\\tZvdL-fZM3WuZ\\tACTIVATES","kgTzvfUL0djR\\tMBUXnNN2z5Dt\\tRmlBMHs64SgD\\tNONE","LrWZyqWL6OUk\\tD6EmJIZx6Gzg\\tPUJ8AKki53pG\\tACTIVATES","MIyPv49C6PmS\\tPUJ8AKki53pG\\trlRx40Am4Oyw\\tACTIVATES","6nSDsRMc6QPJ\\tPUJ8AKki53pG\\t1UmcnGh24P6f\\tACTIVATES","AQSQDQcZ0XWo\\tZvdL-fZM3WuZ\\tMBUXnNN2z5Dt\\tACTIVATES","ZfrWje290c1T\\tMBUXnNN2z5Dt\\t1UmcnGh24P6f\\tACTIVATES","_hzFGzTL6RE2\\tPUJ8AKki53pG\\tRmlBMHs64SgD\\tACTIVATES","bp_I0EHv0cD4\\tMBUXnNN2z5Dt\\trlRx40Am4Oyw\\tACTIVATES","PQG4E-ga6Mza\\tjs1qiakd6GP4\\tD6EmJIZx6Gzg\\tACTIVATES","NKPl8Kdr0I1e\\to9hOOpRM0I1T\\tMBUXnNN2z5Dt\\tINHIBITS","OoqtDBRI0V5J\\ttSZugv-P3gVw\\tMBUXnNN2z5Dt\\tINHIBITS","Vqm7Wl0M4AE0\\tWv-EmNFT15yN\\tcYzz8jlS2HaK\\tACTIVATES","09Csuz540e3h\\tMBUXnNN2z5Dt\\tRmlBMHs64SgD\\tACTIVATES"],"COADREAD-2012-TGF-B-signaling-pathway":["COADREAD-2012-TGF-B-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TGF-B\\tnTPdmpNKy_zW\\tGENE\\t-1\\t-38\\t-358\\t","ACVR2A\\t4qJ5NXmkEupe\\tGENE\\tRckLIrYUzEOc\\t278\\t-262\\t","TGFBR2\\t7GmKbJadEtyf\\tGENE\\t5i_MJPAPzCI1\\t44\\t-262\\t","ACTIVIN\\tZc2sWHBVzArX\\tGENE\\t-1\\t360\\t-358\\t","ACVR2A-ACVR1B\\tRckLIrYUzEOc\\tCOMPARTMENT\\t-1\\t360\\t-262\\t","SMAD\\t7j1T7wlqzcoy\\tFAMILY\\t-1\\t158\\t-86\\t","SMAD2\\tEgBC5uQzE1qC\\tGENE\\t7j1T7wlqzcoy\\t82\\t-117\\t","SMAD4\\tQuKCy3EaE1pk\\tGENE\\t7j1T7wlqzcoy\\t160\\t-55\\t","MYC\\tBIYl4Hkdzdoj\\tGENE\\t-1\\t-65\\t74\\t","TGFBR1-TGFBR2\\t5i_MJPAPzCI1\\tCOMPARTMENT\\t-1\\t-38\\t-262\\t","TGFBR1\\tjQFRXXNIEtyK\\tGENE\\t5i_MJPAPzCI1\\t-121\\t-262\\t","ACVR1B\\tRSw1VMOMEupS\\tGENE\\tRckLIrYUzEOc\\t443\\t-262\\t","SMAD3\\tx-JW3Hq6E1qN\\tGENE\\t7j1T7wlqzcoy\\t235\\t-117\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","2jvzewjJ0UDH\\t5i_MJPAPzCI1\\t7j1T7wlqzcoy\\tACTIVATES","X5m06a6REtyq\\tjQFRXXNIEtyK\\t7GmKbJadEtyf\\tBINDS","76dv_Epi0O5A\\tnTPdmpNKy_zW\\t5i_MJPAPzCI1\\tACTIVATES","RBUTTCdV0RK3\\tZc2sWHBVzArX\\tRckLIrYUzEOc\\tACTIVATES","4m5j1DYC0VIG\\tRckLIrYUzEOc\\t7j1T7wlqzcoy\\tACTIVATES","aVez8qmz0X7C\\t7j1T7wlqzcoy\\tBIYl4Hkdzdoj\\tINHIBITS","dMNeGuPcEupl\\t4qJ5NXmkEupe\\tRSw1VMOMEupS\\tBINDS"],"COADREAD-2012-TP53-pathway":["COADREAD-2012-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Proliferation\\tFD2DCZc_8Eck\\tPROCESS\\t-1\\t569\\t199\\t","TP53\\t2LzUgOci77hf\\tGENE\\t-1\\t386\\t239\\t","DNA replication stress\\teArivqeT78y7\\tPROCESS\\t-1\\t204\\t145\\t","ATM\\tB4xPctkP764L\\tGENE\\t-1\\t386\\t145\\t","Oncogenic stress\\tR-scgH-q793l\\tPROCESS\\t-1\\t204\\t239\\t","Cell survival\\tltgdAJkI8Hs-\\tPROCESS\\t-1\\t569\\t266\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","igOuMrr-QXvV\\tR-scgH-q793l\\t2LzUgOci77hf\\tACTIVATES","WlE3wQIvQdms\\t2LzUgOci77hf\\tltgdAJkI8Hs-\\tINHIBITS","nfX2BMaKQcgf\\t2LzUgOci77hf\\tFD2DCZc_8Eck\\tINHIBITS","gVpKeF6ZQW1o\\teArivqeT78y7\\tB4xPctkP764L\\tACTIVATES","KXWREHzWQaXR\\tB4xPctkP764L\\t2LzUgOci77hf\\tACTIVATES"],"COADREAD-2012-WNT-signaling-pathway":["COADREAD-2012-WNT-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Proliferation, stem/progenitor phenotype\\tbl6HjsSUV6cV\\tPROCESS\\t-1\\t1030\\t629\\t","DKK3\\tGFrq4NgHEGRM\\tGENE\\tg331vTgZWK6e\\t255\\t154\\t","TCF7L2\\tfah7MVZYUjS9\\tGENE\\t-1\\t462\\t456\\t","DKK\\tg331vTgZWK6e\\tFAMILY\\t-1\\t333\\t125\\t","TCF7\\t6tzFiifNEEEJ\\tGENE\\t61GfHXD5WEXh\\t682\\t571\\t","DKK4\\tRAXuusnwEGQo\\tGENE\\tg331vTgZWK6e\\t411\\t154\\t","CTNNB1\\tEmU8OBXdUMCO\\tGENE\\t-1\\t682\\t392\\t","DKK1\\tUE5vCnmWEGQ6\\tGENE\\tg331vTgZWK6e\\t255\\t96\\t","CTNNB1-TCF7\\t61GfHXD5WEXh\\tCOMPARTMENT\\t-1\\t682\\t539\\t","AXIN2\\tH8L_66uLUHPT\\tGENE\\t-1\\t682\\t312\\t","FAM123B\\tXwg-_Y4_UGRt\\tGENE\\t-1\\t525\\t312\\t","APC\\txIqHk3KBUIjc\\tGENE\\t-1\\t838\\t312\\t","ARID1A\\th0U_424iUWu5\\tGENE\\t-1\\t1030\\t456\\t","CTNNB1\\tKZpYtS9vEEEm\\tGENE\\t61GfHXD5WEXh\\t682\\t507\\t","FZD10\\tP1FIiIlqEFL_\\tGENE\\tT5QZmrnYWA-N\\t762\\t199\\t","LRP5\\twGjsVLW4EFLn\\tGENE\\tT5QZmrnYWA-N\\t600\\t199\\t","WNT\\tcFdN3nQcTwwO\\tGENE\\t-1\\t682\\t47\\t","MYC\\t4hScAPjlUSym\\tGENE\\t-1\\t1030\\t535\\t","DKK2\\tzOVzq_6jEGRb\\tGENE\\tg331vTgZWK6e\\t411\\t96\\t","LRP5-FZD10\\tT5QZmrnYWA-N\\tCOMPARTMENT\\t-1\\t681\\t199\\t","FBXW7\\tbXlgw4GKUVh3\\tGENE\\t-1\\t862\\t456\\t","SOX9\\tPOzVx5kyURM7\\tGENE\\t-1\\t459\\t550\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","j9mmGRLjHKlo\\tEmU8OBXdUMCO\\t61GfHXD5WEXh\\tACTIVATES","f_sY8_lUHUPL\\t61GfHXD5WEXh\\t4hScAPjlUSym\\tINDUCES","esOZ1gJeWfDK\\tT5QZmrnYWA-N\\txIqHk3KBUIjc\\tINHIBITS","ADfnqwAaHX4H\\t4hScAPjlUSym\\tbl6HjsSUV6cV\\tACTIVATES","42Liap6TWjUw\\txIqHk3KBUIjc\\tEmU8OBXdUMCO\\tINHIBITS","Gi2m7VhSWdIe\\tT5QZmrnYWA-N\\tXwg-_Y4_UGRt\\tINHIBITS","hDuqU9RREFMQ\\twGjsVLW4EFLn\\tP1FIiIlqEFL_\\tBINDS","6Rn05rJaWhts\\tXwg-_Y4_UGRt\\tEmU8OBXdUMCO\\tINHIBITS","Rmg0swQ7HQ4z\\t61GfHXD5WEXh\\tPOzVx5kyURM7\\tREPRESSES","dYBVjbKCWM3N\\tg331vTgZWK6e\\tT5QZmrnYWA-N\\tINHIBITS","Z4VdiqohHMM_\\tfah7MVZYUjS9\\t61GfHXD5WEXh\\tINHIBITS","p11d6T2rHOIN\\tbXlgw4GKUVh3\\t61GfHXD5WEXh\\tINHIBITS","l1NcyeMdWigH\\tH8L_66uLUHPT\\tEmU8OBXdUMCO\\tINHIBITS","cdUCacfNHR1f\\tPOzVx5kyURM7\\t61GfHXD5WEXh\\tINHIBITS","IlOH9qIEHVc_\\tbXlgw4GKUVh3\\t4hScAPjlUSym\\tINHIBITS","kvbDlRZ2EEEx\\tKZpYtS9vEEEm\\t6tzFiifNEEEJ\\tBINDS","MUhUjbP3Wa2w\\tg331vTgZWK6e\\tcFdN3nQcTwwO\\tINHIBITS","2OZGWP_oWeBV\\tT5QZmrnYWA-N\\tH8L_66uLUHPT\\tINHIBITS","_xkBTQ9sHWYw\\th0U_424iUWu5\\t4hScAPjlUSym\\tREPRESSES","Af3sU0_EWJva\\tcFdN3nQcTwwO\\tT5QZmrnYWA-N\\tACTIVATES"],"ESAD-2017-Cell-cycle-pathway":["ESAD-2017-Cell-cycle-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDKN2A\\t0b0592b4-4330-47c9-9a88-7d8c7940a680\\tGENE\\t-1\\t219\\t205\\t","CYCLINS\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\tFAMILY\\t-1\\t612\\t205\\t","RB1\\t362e59dd-fb26-4d70-8a5e-357b38ed5e4b\\tGENE\\t-1\\t986\\t205\\t","CCNE1\\t65337ed5-11c6-4a91-a177-14c9c0fb42df\\tGENE\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t454\\t205\\t","CCND1\\ta3661efd-abce-474e-ab02-f2eb355d2487\\tGENE\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t613\\t205\\t","CDK6\\t4ad57397-dfc1-4efc-91fa-be799f5b885d\\tGENE\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t770\\t205\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","2c47aaf9-8ddc-4097-bc51-716d7dce4cb9\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t362e59dd-fb26-4d70-8a5e-357b38ed5e4b\\tINHIBITS","67638113-dece-48c9-8982-3e420e681508\\t0b0592b4-4330-47c9-9a88-7d8c7940a680\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\tINHIBITS"],"ESAD-2017-RTK-RAS-PI(3)K-pathway":["ESAD-2017-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PIK3R1\\t51f0d970-2e2b-47e2-90bd-0d0d881d70ed\\tGENE\\t-1\\t1056\\t335\\t","PTEN\\t8214d1b9-75ba-4fbb-86d2-fe45dd392767\\tGENE\\t-1\\t778\\t335\\t","PIK3CA\\t49a250be-042c-4910-9774-802dfb0e08f3\\tGENE\\t-1\\t918\\t227\\t","KRAS\\tbea46283-55f2-4650-acee-58d23d8c11fc\\tGENE\\t-1\\t358\\t227\\t","MYC\\tb33f6617-57e5-4e3a-bd28-6ff114d96321\\tGENE\\t-1\\t1256\\t227\\t","RTK\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\tFAMILY\\t-1\\t673\\t130\\t","MET\\t82180331-e6f8-4487-9c6c-1c898cb05cf1\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t595\\t130\\t","IGF1R\\te7741571-a281-4b1d-ab5f-1e6d22cd3cf7\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t754\\t130\\t","RTK\\t230ace17-b770-4cc8-8d00-55c2a2075c3e\\tFAMILY\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t1075\\t130\\t","FGFR1\\tfb4252b0-5bfd-495d-99bc-c7143789403c\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t914\\t130\\t","ERBB2\\t0c2d7f5d-9da8-4a3c-bf55-53976781fa86\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t271\\t130\\t","EGFR\\t34b79c41-bc49-4c8e-b5f7-ddad188915bb\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t434\\t130\\t","FGFR2\\t91dd9bca-e153-4016-8c4a-0dbb7e12d024\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t1075\\t130\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","0738d86a-d46d-4a8f-b3f4-b96baba1bfa1\\t49a250be-042c-4910-9774-802dfb0e08f3\\tb33f6617-57e5-4e3a-bd28-6ff114d96321\\tACTIVATES","625b533f-ac20-4dbf-abdc-2c9fe3cafe97\\t51f0d970-2e2b-47e2-90bd-0d0d881d70ed\\t49a250be-042c-4910-9774-802dfb0e08f3\\tINHIBITS","f687da01-5f2a-4168-b41f-04f0014ab954\\t8214d1b9-75ba-4fbb-86d2-fe45dd392767\\t49a250be-042c-4910-9774-802dfb0e08f3\\tINHIBITS","49ee44ff-b6ff-47f0-81bf-effa2cf34191\\t49a250be-042c-4910-9774-802dfb0e08f3\\tbea46283-55f2-4650-acee-58d23d8c11fc\\tACTIVATES","d1a956b7-db6a-4653-9da4-d0b26357fb5a\\tbea46283-55f2-4650-acee-58d23d8c11fc\\t49a250be-042c-4910-9774-802dfb0e08f3\\tACTIVATES","73b63049-5e6c-4793-8536-86b4ec006b2d\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t49a250be-042c-4910-9774-802dfb0e08f3\\tACTIVATES","49655771-0e8d-42ce-a71e-76d3bc8c742c\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\tbea46283-55f2-4650-acee-58d23d8c11fc\\tACTIVATES"],"ESAD-2017-WNT-CTNNB1-pathway":["ESAD-2017-WNT-CTNNB1-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PTCH1\\t623d9d6b-6d32-4a0a-a826-df9b880ca03a\\tGENE\\t-1\\t212\\t126\\t","APC\\t792b8fd9-ae87-4972-8da4-1140378b63e5\\tGENE\\t-1\\t382\\t126\\t","FBXW7\\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\\tGENE\\t-1\\t553\\t126\\t","ARID1A\\t1cdc0d84-e27f-44ed-981e-12994fed8711\\tGENE\\t-1\\t731\\t126\\t","CTNNB1\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tGENE\\t-1\\t446\\t214\\t","MYC\\tdd894023-67b6-4bcc-baad-a441556f4168\\tGENE\\t-1\\t793\\t214\\t","PIK3CA\\t8009d529-453b-4c3e-b694-7e0070b7f0a5\\tGENE\\t-1\\t793\\t303\\t","Cell proliferation\\td80f3360-7aa0-442a-ae2a-59f0e8379f86\\tPROCESS\\t-1\\t999\\t214\\t","Embryonic development\\t2e65076c-a0ae-47d9-8860-4ba6c1c89e1c\\tPROCESS\\t-1\\t210\\t214\\t","SMAD\\t08936961-1fad-4b39-ada5-839a1864de96\\tFAMILY\\t-1\\t985\\t126\\t","SMAD2\\t0235338c-0433-48b9-87e3-e50923aed67c\\tGENE\\t08936961-1fad-4b39-ada5-839a1864de96\\t901\\t126\\t","SMAD4\\t1b3e587e-ec76-417a-92ef-34976b0f46bd\\tGENE\\t08936961-1fad-4b39-ada5-839a1864de96\\t1070\\t126\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","a1155daf-ac03-4bbd-9ae0-0a738ec73d95\\t8009d529-453b-4c3e-b694-7e0070b7f0a5\\tdd894023-67b6-4bcc-baad-a441556f4168\\tACTIVATES","0562cbe7-7462-45c1-bd49-109e7ef97f74\\tdd894023-67b6-4bcc-baad-a441556f4168\\td80f3360-7aa0-442a-ae2a-59f0e8379f86\\tACTIVATES","b7fe88fe-76f0-4f45-b80c-eb9937d3fed0\\t623d9d6b-6d32-4a0a-a826-df9b880ca03a\\t2e65076c-a0ae-47d9-8860-4ba6c1c89e1c\\tINHIBITS","d1682a0d-a521-4f33-8097-a57b695d6fe4\\t792b8fd9-ae87-4972-8da4-1140378b63e5\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tINHIBITS","0e07ea0f-7144-42b7-831d-11a660f45ddb\\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tINHIBITS","91b66dea-a6b4-4991-8ac2-184904f361b0\\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\\tdd894023-67b6-4bcc-baad-a441556f4168\\tINHIBITS","ba347f10-d89d-47ed-97fc-8eed4454b4ba\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tdd894023-67b6-4bcc-baad-a441556f4168\\tACTIVATES","b8423ddf-8f5c-4718-81b4-132ae25ed3e5\\t1cdc0d84-e27f-44ed-981e-12994fed8711\\tdd894023-67b6-4bcc-baad-a441556f4168\\tINHIBITS","a7180fc6-8113-47eb-b090-39d1cc8c5825\\t08936961-1fad-4b39-ada5-839a1864de96\\tdd894023-67b6-4bcc-baad-a441556f4168\\tINHIBITS"],"GBM-2008-Cell-cycle-signaling-pathway":["GBM-2008-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","RB1\\t0cQitpJLOoEG\\tFAMILY\\t-1\\t472\\t279\\t","CYCLINS\\tSBGkYw2NOhMr\\tFAMILY\\t-1\\t472\\t168\\t","G1/S Progression\\t0kD7D3DGOtD1\\tPROCESS\\t-1\\t472\\t374\\t","CCND2\\tGrNFDrs1AoNL\\tGENE\\tSBGkYw2NOhMr\\t472\\t168\\t","CDKN2B\\tTbTnj_R5ONS9\\tGENE\\t-1\\t444\\t87\\t","CDK4\\tPs45UaX4AoNo\\tGENE\\tSBGkYw2NOhMr\\t317\\t168\\t","CDK6\\tVnEu6OlPAoNe\\tGENE\\tSBGkYw2NOhMr\\t627\\t168\\t","CDKN2C\\tr8WJLoQLOONy\\tGENE\\t-1\\t625\\t87\\t","CDKN2A\\tcnleYFDsOMzx\\tGENE\\t-1\\t294\\t87\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","Rpso-cKyOzoj\\tTbTnj_R5ONS9\\tSBGkYw2NOhMr\\tINHIBITS","3InwuSCoO0br\\tr8WJLoQLOONy\\tSBGkYw2NOhMr\\tINHIBITS","-zXgQSv4Oy04\\tcnleYFDsOMzx\\tSBGkYw2NOhMr\\tINHIBITS","6NO_fL3nO3r4\\tSBGkYw2NOhMr\\t0cQitpJLOoEG\\tINHIBITS","1pimX-ZiO6F6\\t0cQitpJLOoEG\\t0kD7D3DGOtD1\\tINHIBITS"],"GBM-2008-RTK-RAS-PI(3)K-pathway":["GBM-2008-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PDGFRA\\tiD415efHLG3J\\tGENE\\tIdrkrh8-K31j\\t441\\t-61\\t","RAS\\t8XXLbCwXLtrQ\\tFAMILY\\t-1\\t246\\t53\\t","NF1\\tKe7_FRmuLw42\\tGENE\\t-1\\t21\\t54\\t","RTK\\tIdrkrh8-K31j\\tFAMILY\\t-1\\t365\\t-61\\t","PI(3)K\\tuWMSz1XlL2nL\\tFAMILY\\t-1\\t529\\t50\\t","PTEN\\tLOErZTMUL6hc\\tGENE\\t-1\\t721\\t50\\t","AKT\\tsgb8KI1XMIrn\\tFAMILY\\t-1\\t529\\t129\\t","EGFR\\t7T8gHIR6LG2s\\tGENE\\tIdrkrh8-K31j\\t134\\t-61\\t","FOXO\\t1cIfqNkTMN--\\tGENE\\t-1\\t529\\t205\\t","MET\\tXcKqo6xILG3V\\tGENE\\tIdrkrh8-K31j\\t597\\t-61\\t","ERBB2\\tvJOD-MZOLG2-\\tGENE\\tIdrkrh8-K31j\\t287\\t-61\\t","Proliferation, survival, translation\\tk9I_xTrbMS6S\\tPROCESS\\t-1\\t247\\t206\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","ApGQ0rEtL1TV\\tKe7_FRmuLw42\\t8XXLbCwXLtrQ\\tINHIBITS","s5CFkxUKL0kl\\tIdrkrh8-K31j\\t8XXLbCwXLtrQ\\tACTIVATES","jrs5QL8rMbv3\\t8XXLbCwXLtrQ\\tk9I_xTrbMS6S\\tACTIVATES","WEpyeQmyMeC8\\tsgb8KI1XMIrn\\t1cIfqNkTMN--\\tINHIBITS","ytXepIulMGGL\\tIdrkrh8-K31j\\tuWMSz1XlL2nL\\tACTIVATES","_g47pqc4MGwz\\tLOErZTMUL6hc\\tuWMSz1XlL2nL\\tINHIBITS","u1UwLh90MdLo\\tuWMSz1XlL2nL\\tsgb8KI1XMIrn\\tACTIVATES"],"GBM-2008-TP53-pathway":["GBM-2008-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Activated oncogenes\\tx-laQtq0NSZI\\tPROCESS\\t-1\\t724\\t57\\t","MDM2\\tVIrh6R4jNYOQ\\tGENE\\t-1\\t724\\t208\\t","Apoptosis\\tLxZckK4_NmKp\\tPROCESS\\t-1\\t886\\t297\\t","MDM4\\t0z81KeWTNfOj\\tGENE\\t-1\\t886\\t234\\t","Senescence\\tX0XgoUzfNjH-\\tPROCESS\\t-1\\t546\\t297\\t","CDKN2A\\tIXX8d7kuNVHa\\tGENE\\t-1\\t724\\t135\\t","TP53\\t6RLrPg8rNa4o\\tGENE\\t-1\\t724\\t297\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","4PNvvSvKNtxu\\tIXX8d7kuNVHa\\tVIrh6R4jNYOQ\\tINHIBITS","gX_WY_rANxtC\\tVIrh6R4jNYOQ\\t6RLrPg8rNa4o\\tINHIBITS","EznJNkeAN1al\\t6RLrPg8rNa4o\\tX0XgoUzfNjH-\\tACTIVATES","kaHvTklZNzas\\t0z81KeWTNfOj\\t6RLrPg8rNa4o\\tINHIBITS","wTOjoJHdNq6N\\tx-laQtq0NSZI\\tIXX8d7kuNVHa\\tACTIVATES","5-9bxAL_N0gO\\t6RLrPg8rNa4o\\tLxZckK4_NmKp\\tACTIVATES"],"GBM-2013-Cell-cycle-signaling-pathway":["GBM-2013-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDKN2C\\tnFMLgWuEmv0Q\\tGENE\\t-1\\t667\\t136\\t","CDK4\\tszeVZ7Elmxvu\\tGENE\\t-1\\t386\\t249\\t","CDK6\\tWvJWw5HPm0Ab\\tGENE\\t-1\\t694\\t249\\t","Cyclins\\tAvEeR8GgnDvF\\tFAMILY\\t-1\\t541\\t249\\t","CDKN2A\\tWHDg2nj1B2yR\\tGENE\\t-1\\t320\\t136\\t","Cell cycle control\\tKJEq6EA_m3Cj\\tPROCESS\\t-1\\t793\\t383\\t","CDKN2B\\tv1zGJhukB2ym\\tGENE\\t-1\\t470\\t136\\t","RB1\\tNc0stK1rm13Y\\tFAMILY\\t-1\\t541\\t383\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","4yIGldfunbSO\\tNc0stK1rm13Y\\tKJEq6EA_m3Cj\\tACTIVATES","aqdBLSknB2zK\\tv1zGJhukB2ym\\tszeVZ7Elmxvu\\tINHIBITS","bxdBRxkfnYu4\\tszeVZ7Elmxvu\\tNc0stK1rm13Y\\tINHIBITS","AQXakgefnZf1\\tAvEeR8GgnDvF\\tNc0stK1rm13Y\\tINHIBITS","bdgYHwINnW4B\\tnFMLgWuEmv0Q\\tAvEeR8GgnDvF\\tINHIBITS","Xslj1XfeB2yz\\tWHDg2nj1B2yR\\tszeVZ7Elmxvu\\tINHIBITS","ve_EiwTjnXrI\\tnFMLgWuEmv0Q\\tWvJWw5HPm0Ab\\tINHIBITS","Q7Uq8jBIB2y5\\tWHDg2nj1B2yR\\tAvEeR8GgnDvF\\tINHIBITS","IL38zL5VB2yv\\tWHDg2nj1B2yR\\tWvJWw5HPm0Ab\\tINHIBITS","6jn1TNkoB2zN\\tv1zGJhukB2ym\\tAvEeR8GgnDvF\\tINHIBITS","BSaYCBi7naes\\tWvJWw5HPm0Ab\\tNc0stK1rm13Y\\tINHIBITS","JZERPNMdnWL9\\tnFMLgWuEmv0Q\\tszeVZ7Elmxvu\\tINHIBITS","n7Nithx-B2zB\\tv1zGJhukB2ym\\tWvJWw5HPm0Ab\\tINHIBITS"],"GBM-2013-RTK-RAS-PI(3)K-pathway":["GBM-2013-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","NF1\\tpQ2sq0Chk7o8\\tGENE\\t-1\\t843\\t223\\t","RAS\\tXfDonLT2k9rr\\tFAMILY\\t-1\\t674\\t223\\t","BRAF\\tJKmqofwVk_cd\\tGENE\\t-1\\t674\\t334\\t","EGFR\\tHG7A5p2q4D3f\\tGENE\\tZvpmFM7llCzi\\t331\\t113\\t","PI3K(3)K\\tE0625yTsk46l\\tGENE\\t-1\\t428\\t225\\t","AKT Pathway\\tTTwvf1BelBTM\\tPROCESS\\t-1\\t428\\t338\\t","MET\\tsZJ7Kmrg4D35\\tGENE\\tZvpmFM7llCzi\\t643\\t113\\t","MAPK Pathway\\tdAkBkKN-lAKT\\tPROCESS\\t-1\\t862\\t335\\t","PTEN\\t8kyYeHGHk4NK\\tGENE\\t-1\\t255\\t225\\t","RTK\\tZvpmFM7llCzi\\tFAMILY\\t-1\\t565\\t113\\t","FGFR\\t8z2n3qaU4D3L\\tGENE\\tZvpmFM7llCzi\\t800\\t113\\t","PDGFRA\\t-jXEzRew4D3r\\tGENE\\tZvpmFM7llCzi\\t487\\t113\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","f9EmKbzjlk77\\tJKmqofwVk_cd\\tdAkBkKN-lAKT\\tACTIVATES","qj0ZCvR8le5E\\t8kyYeHGHk4NK\\tE0625yTsk46l\\tINHIBITS","4DrueUbLljf-\\tE0625yTsk46l\\tTTwvf1BelBTM\\tACTIVATES","c4Kpa4R5lgcQ\\tZvpmFM7llCzi\\tXfDonLT2k9rr\\tACTIVATES","CEeo6oGYlifg\\tXfDonLT2k9rr\\tJKmqofwVk_cd\\tACTIVATES","zingzci6lhXA\\tpQ2sq0Chk7o8\\tXfDonLT2k9rr\\tINHIBITS","LTVgdZNOld9G\\tZvpmFM7llCzi\\tE0625yTsk46l\\tACTIVATES"],"GBM-2013-TP53-pathway":["GBM-2013-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TP53\\tux4NOBO4mBSe\\tGENE\\t-1\\t416\\t243\\t","MDM4\\tO3CQIh-OmCOD\\tGENE\\t-1\\t222\\t243\\t","Senescence/Apoptosis\\tTIZhBhfymDVV\\tPROCESS\\t-1\\t416\\t355\\t","MDM2\\tdNRsoLpZmAuu\\tGENE\\t-1\\t416\\t133\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","BrX7DMKemS8w\\tdNRsoLpZmAuu\\tux4NOBO4mBSe\\tINHIBITS","jHRb2o3YmTqF\\tO3CQIh-OmCOD\\tux4NOBO4mBSe\\tINHIBITS","MnYnmX_dmV0E\\tux4NOBO4mBSe\\tTIZhBhfymDVV\\tACTIVATES"],"HIPPO":["HIPPO","","Involved in the control of organ size. Central to this pathway is the regulation of the transcription co-activators YAP/TAZ that promote the transcription of genes involved in cell proliferation.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY\\tWIDTH\\tHEIGHT--","\\t8f940396-e035-4b9e-8574-b5eadf26e98c\\tFAMILY\\t-1\\t91\\t64\\t150\\t52","DCHS1\\t8d4d3dca-9217-4539-b15e-63ce7f5df09a\\tGENE\\t8f940396-e035-4b9e-8574-b5eadf26e98c\\t91\\t34\\t150\\t52","DCHS2\\tf51ccf81-94a8-425f-80ce-4d55489b9660\\tGENE\\t8f940396-e035-4b9e-8574-b5eadf26e98c\\t91\\t95\\t150\\t52","\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\tFAMILY\\t-1\\t369\\t61\\t150\\t52","FAT1\\t901800a8-6c9f-42f6-a9b6-2e8b1483ec63\\tGENE\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\t291\\t32\\t150\\t52","FAT2\\t775d810d-bfc1-434c-949d-71f4bd38d374\\tGENE\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\t448\\t31\\t150\\t52","FAT3\\tc4f71e12-c88e-409d-9f26-7bc84b3f6cb8\\tGENE\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\t291\\t92\\t150\\t52","FAT4\\t075bc3e3-74b9-4d0c-a20d-58b77cb3c3f6\\tGENE\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\t448\\t91\\t150\\t52","\\tde4dab24-648f-4406-8adf-0c08d62b3173\\tFAMILY\\t-1\\t714\\t60\\t150\\t52","TAOK1\\t3e53e820-8a91-4329-86f1-e59948a9003a\\tGENE\\tde4dab24-648f-4406-8adf-0c08d62b3173\\t636\\t32\\t150\\t52","TAOK3\\t7a7b38dc-e47d-4f33-9cec-3570a23b2f85\\tGENE\\tde4dab24-648f-4406-8adf-0c08d62b3173\\t636\\t89\\t150\\t52","TAOK2\\t8a51ead1-a5d3-41b8-bf2e-99fc2169857b\\tGENE\\tde4dab24-648f-4406-8adf-0c08d62b3173\\t793\\t31\\t150\\t52","\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\tFAMILY\\t-1\\t374\\t324\\t456.5888856128265\\t242.9161558761191","SAV1\\t267c0160-0919-403d-bd52-ea84c001f357\\tGENE\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\t277\\t257\\t150\\t52","\\t71e2f614-626b-4fbe-9e18-17c83c401062\\tFAMILY\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\t455\\t258\\t212.8900278180157\\t116.0130640290517","STK3\\t9f5e8c36-52a9-4e62-bf7c-b1f3b02d8740\\tGENE\\t71e2f614-626b-4fbe-9e18-17c83c401062\\t455\\t230\\t150\\t52","STK4\\t3e08fb0d-ef9f-49b9-8037-ed940df282af\\tGENE\\t71e2f614-626b-4fbe-9e18-17c83c401062\\t455\\t287\\t150\\t52","\\t7ef3236d-1aa7-4082-a396-751554a11282\\tFAMILY\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\t277\\t390\\t154.12303621103598\\t117.89002781801568","LATS1\\t2897d4be-7047-4af4-958b-b978a0d944f5\\tGENE\\t7ef3236d-1aa7-4082-a396-751554a11282\\t277\\t362\\t150\\t52","LATS2\\t944868e7-e040-49a8-8773-3da725d368c3\\tGENE\\t7ef3236d-1aa7-4082-a396-751554a11282\\t277\\t419\\t150\\t52","\\tb6626b2a-d8ef-4d7a-9645-8e9a7a538795\\tFAMILY\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\t455\\t390\\t150\\t52","MOB1A\\t54416ef1-d8c0-492d-b465-49adb95ad62e\\tGENE\\tb6626b2a-d8ef-4d7a-9645-8e9a7a538795\\t454\\t362\\t150\\t52","MOB1B\\t44429ea1-e73d-43f8-8caf-c7fb319956ff\\tGENE\\tb6626b2a-d8ef-4d7a-9645-8e9a7a538795\\t455\\t419\\t150\\t52","\\t4df2d8ec-903b-4445-a7a5-f5b105fd49f1\\tFAMILY\\t-1\\t710\\t324\\t150\\t52","NF2\\tfd29bca1-db7d-4f62-bce0-49510642adb3\\tGENE\\t4df2d8ec-903b-4445-a7a5-f5b105fd49f1\\t709\\t295\\t150\\t52","WWC1\\te9119bdc-4312-40a5-837e-dc079d103e63\\tGENE\\t4df2d8ec-903b-4445-a7a5-f5b105fd49f1\\t710\\t353\\t150\\t52","\\t8d5398c4-941f-4153-a392-ebaef3fff177\\tFAMILY\\t-1\\t373\\t590\\t179.71700255004964\\t76.76416879170804","YAP1\\t3cf01f62-ef45-4722-8cad-565456928871\\tGENE\\t8d5398c4-941f-4153-a392-ebaef3fff177\\t373\\t559\\t150\\t52","TAZ\\t9ed35563-0451-451b-a750-c33f5e94108f\\tGENE\\t8d5398c4-941f-4153-a392-ebaef3fff177\\t373\\t620\\t150\\t52","\\tbb742872-aa08-4e50-87de-846f64cea394\\tFAMILY\\t-1\\t91\\t590\\t150\\t52","CRB1\\t1ea26f01-462c-4a16-b568-b9de2242fa5b\\tGENE\\tbb742872-aa08-4e50-87de-846f64cea394\\t91\\t560\\t150\\t52","CRB2\\te054585c-47a2-4b4a-9cb7-cbbfc61e900f\\tGENE\\tbb742872-aa08-4e50-87de-846f64cea394\\t91\\t620\\t150\\t52","PTPN14\\td88a9331-971e-4ad2-817a-a3dadbebd4de\\tGENE\\t-1\\t606\\t538\\t150\\t52","\\t8f2ee28b-9fc4-4b61-ad07-e0c0b0b4c566\\tFAMILY\\t-1\\t606\\t672\\t150\\t52","CSNK1E\\t63916e9d-dcd6-45db-8fbe-3d480ef92c5f\\tGENE\\t8f2ee28b-9fc4-4b61-ad07-e0c0b0b4c566\\t606\\t640\\t150\\t52","CSNK1D\\t0e5136c0-186c-4aba-893c-7f0ce5bdf56d\\tGENE\\t8f2ee28b-9fc4-4b61-ad07-e0c0b0b4c566\\t606\\t705\\t150\\t52","TEAD2\\t0d1f1291-ec19-4f6d-8e74-1f11a020144b\\tGENE\\t-1\\t373\\t794\\t150\\t52","Cell proliferation and differentiation\\tfb37aa0c-49bb-4db6-b185-bc5a64a72540\\tPROCESS\\t-1\\t372\\t922\\t150\\t52","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\\tINTERACTION_PUBMED_ID\\tEDGE_NAME\\tEDGE_BENDS","17a941fe-ab44-43f4-8a4e-daa3939947a1\\t8f940396-e035-4b9e-8574-b5eadf26e98c\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\tACTIVATES\\t\\t\\t","a7d8a94f-4d02-46ed-8726-9c4e3e8bda7e\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\tACTIVATES\\t\\t\\t","ee173361-b9ad-458a-80d3-0138572470d4\\tde4dab24-648f-4406-8adf-0c08d62b3173\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\tACTIVATES\\t\\t\\t","e63e86f3-3b5e-4e37-8837-43d92a67ea7d\\t4df2d8ec-903b-4445-a7a5-f5b105fd49f1\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\tACTIVATES\\t\\t\\t","04ca3e1e-1693-4ec6-ab80-2724e2e3a0b9\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\t8d5398c4-941f-4153-a392-ebaef3fff177\\tINHIBITS\\t\\t\\t","81a3fb4e-3e69-47b6-b499-e9fdfe65a37e\\tbb742872-aa08-4e50-87de-846f64cea394\\t8d5398c4-941f-4153-a392-ebaef3fff177\\tINHIBITS\\t\\t\\t","b6c3a4db-545a-4c25-bf4a-f0a3a8de36d2\\t8f2ee28b-9fc4-4b61-ad07-e0c0b0b4c566\\t8d5398c4-941f-4153-a392-ebaef3fff177\\tINHIBITS\\t\\t\\t","fce1ac6e-bc2e-4369-ab6e-287731618cc1\\td88a9331-971e-4ad2-817a-a3dadbebd4de\\t8d5398c4-941f-4153-a392-ebaef3fff177\\tINHIBITS\\t\\t\\t","b3fafa92-cfc7-460d-94d1-09ce977c3111\\t8d5398c4-941f-4153-a392-ebaef3fff177\\t0d1f1291-ec19-4f6d-8e74-1f11a020144b\\tACTIVATES\\t\\t\\t","7b0d95b6-acc4-46a0-85e4-9cbacd5b11de\\t0d1f1291-ec19-4f6d-8e74-1f11a020144b\\tfb37aa0c-49bb-4db6-b185-bc5a64a72540\\tACTIVATES\\t\\t\\t"],"HNSC-2015-Apoptosis-pathway":["HNSC-2015-Apoptosis-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Cell cycle and survival\\temPjU9d6DgGP\\tPROCESS\\t-1\\t348\\t484\\t","TRAF3\\tIBsoHlQJDZF8\\tGENE\\t-1\\t530\\t285\\t","FADD\\tDLlGnDdfDTRw\\tGENE\\t-1\\t373\\t199\\t","TNFR-LTBR\\ts0lGLs3rDXus\\tCOMPARTMENT\\t-1\\t452\\t106\\t","LTBR\\tM8fueNVgIWYI\\tGENE\\ts0lGLs3rDXus\\t530\\t106\\t","Inflammation angiogenesis migration\\tyeoJnxV0DfTf\\tPROCESS\\t-1\\t581\\t484\\t","BIRC2\\t54AiNjv7DUd9\\tGENE\\t-1\\t530\\t199\\t","NF-kB\\tVeOlULKnDabs\\tGENE\\t-1\\t455\\t382\\t","CASP8\\tkpwET4bNDYMG\\tGENE\\t-1\\t373\\t285\\t","TNFR\\t1f2UD5ctIWYb\\tGENE\\ts0lGLs3rDXus\\t373\\t106\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","lvrnvkjrD9P-\\ts0lGLs3rDXus\\t54AiNjv7DUd9\\tACTIVATES","N_skSg-mECnc\\tkpwET4bNDYMG\\tVeOlULKnDabs\\tINHIBITS","OMDbwzxED_x2\\t54AiNjv7DUd9\\tkpwET4bNDYMG\\tINHIBITS","HH4ug7YuD7Fv\\ts0lGLs3rDXus\\tDLlGnDdfDTRw\\tACTIVATES","f-O5DenwEBjr\\t54AiNjv7DUd9\\tIBsoHlQJDZF8\\tINHIBITS","U1LEKmYqIWYs\\t1f2UD5ctIWYb\\tM8fueNVgIWYI\\tBINDS","hhJPfTk9EHgb\\tVeOlULKnDabs\\temPjU9d6DgGP\\tACTIVATES","h3Fekoz9EAiL\\tDLlGnDdfDTRw\\tkpwET4bNDYMG\\tACTIVATES","Acyl78aaEDXf\\tIBsoHlQJDZF8\\tVeOlULKnDabs\\tINHIBITS","O9oIu8SeEIN_\\tVeOlULKnDabs\\tyeoJnxV0DfTf\\tACTIVATES"],"HNSC-2015-Cell-cycle-signaling-pathway":["HNSC-2015-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDKN2A\\tprbNZ7N4F2yz\\tGENE\\t-1\\t346\\t201\\t","Cell cycle and survival\\tUF0yWD0cGVp6\\tPROCESS\\t-1\\t859\\t466\\t","let-7c\\t1Fbfq0EnF4FD\\tGENE\\t-1\\t761\\t201\\t","HRAS\\ttR7G7jSMFyKn\\tGENE\\t-1\\t456\\t71\\t","HPVE\\tOUtOuzrFGWsp\\tFAMILY\\t-1\\t347\\t333\\t","RB1\\tKkBOpjMSGBEp\\tFAMILY\\t-1\\t570\\t334\\t","TP53\\tm6QJybSmGSEj\\tGENE\\t-1\\t531\\t466\\t","MYC\\tPu1nPMkoGUcO\\tGENE\\t-1\\t931\\t334\\t","PIK3CA\\tz2FkIMy8FypC\\tGENE\\t-1\\t678\\t71\\t","CCND1\\tS0n0th2eCfb9\\tGENE\\t-swYow3RF5GO\\t570\\t171\\t","CYCLINS\\t-swYow3RF5GO\\tFAMILY\\t-1\\t570\\t197\\t","E2F1\\tBNAC4UcvF_fD\\tGENE\\t-1\\t764\\t334\\t","HPVE7\\t6jlQIfmICrjy\\tGENE\\tOUtOuzrFGWsp\\t347\\t360\\t","CDK6\\tPPI7pGMpCfcQ\\tGENE\\t-swYow3RF5GO\\t570\\t224\\t","HPVE6\\t4bkc06NyCrjd\\tGENE\\tOUtOuzrFGWsp\\t347\\t307\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","idn2SG2QHMC0\\tBNAC4UcvF_fD\\tUF0yWD0cGVp6\\tACTIVATES","njhnQe9vCfci\\tz2FkIMy8FypC\\tS0n0th2eCfb9\\tACTIVATES","5CzfV-h-HQkB\\tOUtOuzrFGWsp\\tm6QJybSmGSEj\\tINHIBITS","UpECTCkVHGkl\\t1Fbfq0EnF4FD\\t-swYow3RF5GO\\tINHIBITS","wnpqGTZ4HNFG\\tPu1nPMkoGUcO\\tUF0yWD0cGVp6\\tACTIVATES","WfTDsR48HJ8K\\t-swYow3RF5GO\\tKkBOpjMSGBEp\\tINHIBITS","mHie46k1HIGn\\tprbNZ7N4F2yz\\t-swYow3RF5GO\\tINHIBITS","EJXQGmWDCfcZ\\ttR7G7jSMFyKn\\tS0n0th2eCfb9\\tACTIVATES","naU-KiGLHOkS\\tOUtOuzrFGWsp\\tKkBOpjMSGBEp\\tINHIBITS","lU11XAdWHRyG\\tm6QJybSmGSEj\\tUF0yWD0cGVp6\\tINHIBITS","hgYpZiWwHLEw\\tKkBOpjMSGBEp\\tBNAC4UcvF_fD\\tINHIBITS"],"HNSC-2015-Notch-signaling-pathway":["HNSC-2015-Notch-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TP63\\t0_tmgKZGEdGo\\tGENE\\t-1\\t290\\t306\\t","Differentiation\\teeVhg40NEiK2\\tPROCESS\\t-1\\t553\\t481\\t","CTNNB1\\tB311fstqEcj1\\tGENE\\t-1\\t485\\t306\\t","FAT1\\tKm28lPDkEe1-\\tGENE\\t-1\\t676\\t253\\t","AJUBA\\txmIHMSMOEfhM\\tGENE\\t-1\\t676\\t350\\t","NFE2L2\\tuBK84iGaEx2k\\tGENE\\t-1\\t835\\t108\\t","Inflammation angiogenesis migration\\tcVmq2gc7EhfK\\tPROCESS\\t-1\\t290\\t480\\t","NOTCH\\tM36IzzXCEbYd\\tFAMILY\\t-1\\t485\\t108\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","ICbcotEzE6EA\\tKm28lPDkEe1-\\tB311fstqEcj1\\tINHIBITS","wuF8plb4E1Me\\tuBK84iGaEx2k\\tM36IzzXCEbYd\\tACTIVATES","aGzvs7zSE3y2\\t0_tmgKZGEdGo\\tM36IzzXCEbYd\\tINHIBITS","3EBZZzaxE5Fm\\tM36IzzXCEbYd\\tB311fstqEcj1\\tINHIBITS","_u545Mo9E_ul\\t0_tmgKZGEdGo\\teeVhg40NEiK2\\tINHIBITS","n1ZzhYJJE6z0\\txmIHMSMOEfhM\\tB311fstqEcj1\\tINHIBITS","qJsbtzEME7xA\\tB311fstqEcj1\\teeVhg40NEiK2\\tINHIBITS","qbufdsXRFBiJ\\t0_tmgKZGEdGo\\tcVmq2gc7EhfK\\tACTIVATES","XfMK86WqE21I\\tM36IzzXCEbYd\\t0_tmgKZGEdGo\\tINHIBITS"],"HNSC-2015-Oxidative-stress-response-pathway":["HNSC-2015-Oxidative-stress-response-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","NFE2L2\\tgt4I0Om0FTv6\\tGENE\\t-1\\t436\\t285\\t","KEAP1\\tZsX3OXk3FSsm\\tGENE\\t-1\\t529\\t167\\t","NOTCH\\tBvJxfxK3FnBO\\tGENE\\t-1\\t169\\t285\\t","CUL3\\tIcPGDcXRFSKm\\tGENE\\t-1\\t339\\t167\\t","Oxidative damage\\tfVzq-7uHFVEN\\tPROCESS\\t-1\\t436\\t413\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","EnpWtdTqFdCy\\tIcPGDcXRFSKm\\tgt4I0Om0FTv6\\tINHIBITS","evdmv52VFpzm\\tgt4I0Om0FTv6\\tBvJxfxK3FnBO\\tACTIVATES","cPEAdB0SFfMR\\tgt4I0Om0FTv6\\tfVzq-7uHFVEN\\tACTIVATES","H-KG07b7Fd8r\\tZsX3OXk3FSsm\\tgt4I0Om0FTv6\\tINHIBITS"],"HNSC-2015-RTK-RAS-PI(3)K-pathway":["HNSC-2015-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PIK3CA\\txi9Q36e2CS_G\\tGENE\\t-1\\t540\\t244\\t","NF-kB\\tOOiOvVaWCyaI\\tGENE\\t-1\\t878\\t459\\t","HRAS\\tCh4RV-nlCR-8\\tGENE\\t-1\\t320\\t244\\t","IGF1R\\tYDvyAEat8pkt\\tGENE\\tYgFgrMTKCakc\\t850\\t145\\t","ERBB2\\to8fELaID8pjp\\tGENE\\tYgFgrMTKCakc\\t385\\t145\\t","EGFR\\tmYeWqovL8pkK\\tGENE\\tYgFgrMTKCakc\\t227\\t145\\t","RTK\\tYgFgrMTKCakc\\tFAMILY\\t-1\\t538\\t145\\t","FGFR1\\ts8sttQyx8pj-\\tGENE\\tYgFgrMTKCakc\\t541\\t145\\t","PTEN\\tWh8DCYlCCT_j\\tGENE\\t-1\\t722\\t244\\t","CCND1\\ts_2ubRksCYIg\\tGENE\\t-1\\t403\\t337\\t","MYC\\tM33a4yWMGH-j\\tGENE\\t-1\\t540\\t459\\t","FGFR3\\t-jbsv2rK8pkb\\tGENE\\tYgFgrMTKCakc\\t696\\t145\\t","Cell cycle and survival\\tNZQP-jwUGJDJ\\tPROCESS\\t-1\\t540\\t568\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","Vp8BMTADCsgK\\tYgFgrMTKCakc\\txi9Q36e2CS_G\\tACTIVATES","zMOtnYBFCu5s\\txi9Q36e2CS_G\\ts_2ubRksCYIg\\tACTIVATES","P2bwQGViCuNZ\\tCh4RV-nlCR-8\\ts_2ubRksCYIg\\tACTIVATES","9-cqR59DCtQQ\\tWh8DCYlCCT_j\\txi9Q36e2CS_G\\tINHIBITS","kFlNIRpWC2i-\\txi9Q36e2CS_G\\tOOiOvVaWCyaI\\tACTIVATES","S3jvgVzsGPMY\\txi9Q36e2CS_G\\tM33a4yWMGH-j\\tACTIVATES","GnyxNL7aCqke\\tYgFgrMTKCakc\\tCh4RV-nlCR-8\\tACTIVATES","rrzkeHNUGQDo\\tM33a4yWMGH-j\\tNZQP-jwUGJDJ\\tACTIVATES"],"KIRC-2013-RTK-RAS-PI(3)K-pathway":["KIRC-2013-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TSC1\\tuggsxb8--Aro\\tGENE\\txqEGjsx0iLFB\\t702\\t215\\t","RHEB\\tB86G1W3Bjaf-\\tGENE\\t-1\\t653\\t670\\t","TSC2\\tYkjc8ADw-rzF\\tGENE\\tkKqxit2Aj0o5\\t727\\t575\\t","4E-BP1\\tunH_CS0VjeEN\\tGENE\\t-1\\t755\\t833\\t","TSC\\tkKqxit2Aj0o5\\tFAMILY\\t-1\\t647\\t575\\t","RHEB\\t2laMuTAjiL1w\\tGENE\\t-1\\t891\\t255\\t","HIF1a\\taDLkX3Z9j92r\\tGENE\\t-1\\t755\\t918\\t","GRB10\\tx5Guo0spjf2e\\tGENE\\t-1\\t839\\t414\\t","MTOR\\tMC8l6rXMiOdd\\tGENE\\t-1\\t1074\\t255\\t","TSC\\txqEGjsx0iLFB\\tFAMILY\\t-1\\t702\\t249\\t","SQSTM1\\txQtLvkz9iNc7\\tGENE\\t-1\\t943\\t153\\t","TSC1\\tJ-ydcJGW-rzg\\tGENE\\tkKqxit2Aj0o5\\t568\\t575\\t","EGFR\\tQFhgkr8diB8z\\tGENE\\t-1\\t164\\t312\\t","PI3K\\tbHiksp77jREY\\tFAMILY\\t-1\\t560\\t414\\t","AKT\\t-Wom9AxOiG4E\\tGENE\\t-1\\t528\\t255\\t","mTORC2\\tdbgxtYHIjWfx\\tGENE\\t-1\\t478\\t493\\t","MiR21\\tGmrxvGcKjTyz\\tGENE\\t-1\\t332\\t533\\t","PIK3CA\\tGBWHCv3viEa6\\tGENE\\t-1\\t354\\t255\\t","IGF1R\\tozct1VALiSY1\\tGENE\\t-1\\t165\\t216\\t","VHL\\t0_wT5Rrrj_Rx\\tGENE\\t-1\\t935\\t919\\t","mTORC1\\tcYFqGJE4jcVJ\\tGENE\\t-1\\t653\\t750\\t","TSC2\\tj9ld37Vz-AsM\\tGENE\\txqEGjsx0iLFB\\t702\\t283\\t","PTEN\\tW2_xSgDziDku\\tGENE\\t-1\\t354\\t174\\t","AKT\\t7HbV79PdjsOU\\tFAMILY\\t-1\\t653\\t494\\t","GNB2L1\\tSfiCTcbNiA5M\\tGENE\\t-1\\t88\\t112\\t","PTEN\\twRO7VWWjjSA-\\tGENE\\t-1\\t332\\t414\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","OpzjVyUGkJHV\\tGmrxvGcKjTyz\\twRO7VWWjjSA-\\tINHIBITS","18MKxE0wiw13\\txqEGjsx0iLFB\\t2laMuTAjiL1w\\tINHIBITS","G-HTkvEckQ4C\\tB86G1W3Bjaf-\\tcYFqGJE4jcVJ\\tACTIVATES","04k9T_t2itkQ\\tW2_xSgDziDku\\tGBWHCv3viEa6\\tINHIBITS","TqPzh3WykXc5\\tunH_CS0VjeEN\\tx5Guo0spjf2e\\tACTIVATES","S7T11oBFisjk\\tQFhgkr8diB8z\\tGBWHCv3viEa6\\tACTIVATES","ahebq1NykUH5\\tunH_CS0VjeEN\\taDLkX3Z9j92r\\tACTIVATES","6najj9ABkSVJ\\tcYFqGJE4jcVJ\\tunH_CS0VjeEN\\tACTIVATES","qPyUZvk3kMq-\\tdbgxtYHIjWfx\\t7HbV79PdjsOU\\tACTIVATES","qHd1pkOTiy5k\\t2laMuTAjiL1w\\tMC8l6rXMiOdd\\tACTIVATES","aPTPKe-XkVXQ\\t0_wT5Rrrj_Rx\\taDLkX3Z9j92r\\tINHIBITS","8vMP0eF_kPj5\\tkKqxit2Aj0o5\\tB86G1W3Bjaf-\\tINHIBITS","NZt5xBGSkYb0\\tx5Guo0spjf2e\\tbHiksp77jREY\\tINHIBITS","3fJZoOEQkKNq\\tbHiksp77jREY\\tdbgxtYHIjWfx\\tACTIVATES","rAhe36tpix6d\\txQtLvkz9iNc7\\tMC8l6rXMiOdd\\tINDUCES","CAu1f-WdkHx4\\twRO7VWWjjSA-\\tbHiksp77jREY\\tINHIBITS","4vMHKnyOkLIf\\tbHiksp77jREY\\t7HbV79PdjsOU\\tACTIVATES","J7kaij8Aivlh\\t-Wom9AxOiG4E\\txqEGjsx0iLFB\\tINHIBITS","fT5lfcHziqX2\\tSfiCTcbNiA5M\\tozct1VALiSY1\\tINDUCES","_2k1_2B-iri2\\tozct1VALiSY1\\tGBWHCv3viEa6\\tACTIVATES","kxVoCQxViupL\\tGBWHCv3viEa6\\t-Wom9AxOiG4E\\tACTIVATES","7jMvZJMZkN4v\\t7HbV79PdjsOU\\tkKqxit2Aj0o5\\tINHIBITS"],"LUAD-2014-Cell-cycle-signaling-pathway":["LUAD-2014-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CCND1\\tYWcsnrJvCMfJ\\tGENE\\tEaAZ2J517xuW\\t365\\t177\\t","RB1\\t-65hVCUu7wNj\\tGENE\\t-1\\t521\\t303\\t","CDKN2A\\tyiKTF0xl7qs-\\tGENE\\t-1\\t521\\t88\\t","CYCLINS\\tEaAZ2J517xuW\\tFAMILY\\t-1\\t521\\t177\\t","CDK4\\tpYVVzOz7CMfp\\tGENE\\tEaAZ2J517xuW\\t521\\t177\\t","Cell cycle progression\\tSBA7nphX7zI1\\tPROCESS\\t-1\\t521\\t400\\t","CCNE1\\t0FQDESQiCMfb\\tGENE\\tEaAZ2J517xuW\\t676\\t177\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","EbOzzWJa8KyF\\tEaAZ2J517xuW\\t-65hVCUu7wNj\\tINHIBITS","eB12pAOW8MCi\\t-65hVCUu7wNj\\tSBA7nphX7zI1\\tACTIVATES","u6mSj8wD8Jp9\\tyiKTF0xl7qs-\\tEaAZ2J517xuW\\tINHIBITS"],"LUAD-2014-Histone-modification-pathway":["LUAD-2014-Histone-modification-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","SETD2\\tTEmP07vg8mqu\\tGENE\\t-1\\t678\\t182\\t","ARID1B\\tZC3AHrzf8h-f\\tGENE\\t-1\\t379\\t168\\t","Histone methylation\\toQNlmw1I8ng2\\tPROCESS\\t-1\\t678\\t333\\t","ARID2\\tUWhx7SxC8jmN\\tGENE\\t-1\\t226\\t244\\t","ARID1A\\t0ddAggf58hhA\\tGENE\\t-1\\t226\\t168\\t","Nucleosome remodeling\\tkv9VBnuH8l5E\\tPROCESS\\t-1\\t306\\t341\\t","SMARCA4\\t6xqXYMOE8kSp\\tGENE\\t-1\\t379\\t244\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","7D5lYDIi83WM\\tZC3AHrzf8h-f\\tkv9VBnuH8l5E\\tACTIVATES","C0gJJbpq84Fz\\t6xqXYMOE8kSp\\tkv9VBnuH8l5E\\tACTIVATES","_MCNndis82m-\\tUWhx7SxC8jmN\\tkv9VBnuH8l5E\\tACTIVATES","fc6_K-lT85Yv\\tTEmP07vg8mqu\\toQNlmw1I8ng2\\tACTIVATES","PkwUIXyU81xJ\\t0ddAggf58hhA\\tkv9VBnuH8l5E\\tACTIVATES"],"LUAD-2014-Oxidative-stress-response-pathway":["LUAD-2014-Oxidative-stress-response-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","KEAP1\\tx6qal2M_6fp6\\tGENE\\t-1\\t292\\t147\\t","NFE2L2\\t3OAnmFLj6kBV\\tGENE\\t-1\\t381\\t244\\t","CUL3\\tax7M8UNp6gH0\\tGENE\\t-1\\t460\\t147\\t","Oxidative stress response\\tqQRuLibB6k26\\tPROCESS\\t-1\\t381\\t345\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","puzswCQS65LP\\tx6qal2M_6fp6\\t3OAnmFLj6kBV\\tINHIBITS","ASasYVxW65_T\\tax7M8UNp6gH0\\t3OAnmFLj6kBV\\tINHIBITS","5XC9ZlAR67EJ\\t3OAnmFLj6kBV\\tqQRuLibB6k26\\tINHIBITS"],"LUAD-2014-RTK-RAS-PI(3)K-pathway":["LUAD-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","KRAS\\thCWC-xR96DqX\\tGENE\\t0aa7a88C5GOW\\t612\\t170\\t","EGFR\\tR5V3H_6E6eEo\\tGENE\\tmFXQLvHD4isJ\\t304\\t68\\t","RAS\\t0aa7a88C5GOW\\tFAMILY\\t-1\\t690\\t202\\t","MAP2K1\\tcwgYdqrk4hBA\\tGENE\\t-1\\t690\\t439\\t","PIK3R1\\tbqBJhHco4YrE\\tGENE\\t-1\\t149\\t251\\t","TSC2\\tY9HFp8YO-n8e\\tGENE\\tEXtYcXdy4Qsz\\t470\\t384\\t","Translation\\t9M7XTM_-4WR7\\tPROCESS\\t-1\\t781\\t637\\t","AKT1\\t25v4OB1H4IlR\\tGENE\\t-1\\t393\\t279\\t","STK11\\ts7zEz-oY4ag8\\tGENE\\t-1\\t149\\t322\\t","ALK\\tpjtEjnD36eE_\\tGENE\\tmFXQLvHD4isJ\\t773\\t68\\t","AMPK\\tFyui5tkl4cr5\\tGENE\\t-1\\t149\\t390\\t","NRAS\\tnKsKU-PQ6DrJ\\tGENE\\t0aa7a88C5GOW\\t768\\t170\\t","Proliferation\\tecQpjv9Q4Urm\\tPROCESS\\t-1\\t465\\t637\\t","HRAS\\tup6fI0q16Dq0\\tGENE\\t0aa7a88C5GOW\\t612\\t233\\t","NF1\\tQkA8DtgZ4Feb\\tGENE\\t-1\\t988\\t207\\t","ERBB2\\tEXN40CQ46eDV\\tGENE\\tmFXQLvHD4isJ\\t458\\t68\\t","ROS1\\twLhuE7H66eEA\\tGENE\\tmFXQLvHD4isJ\\t1076\\t68\\t","TSC1\\tj4o-n6HA-n8F\\tGENE\\tEXtYcXdy4Qsz\\t316\\t384\\t","RIT1\\ttYpKvL066Dru\\tGENE\\t0aa7a88C5GOW\\t768\\t233\\t","RET\\tds40mB756eC4\\tGENE\\tmFXQLvHD4isJ\\t925\\t68\\t","PTEN\\tua2-F70X4XuC\\tGENE\\t-1\\t149\\t178\\t","Cell survival\\tNmj0_LZZ4VXj\\tPROCESS\\t-1\\t622\\t637\\t","MTOR\\tNCFq_dYD4Py9\\tGENE\\t-1\\t393\\t542\\t","TSC\\tEXtYcXdy4Qsz\\tFAMILY\\t-1\\t393\\t384\\t","MET\\tTXeWKOZB6eDs\\tGENE\\tmFXQLvHD4isJ\\t609\\t68\\t","BRAF\\t8-YqWx2X4f5G\\tGENE\\t-1\\t690\\t365\\t","PIK3CA\\t8Qu-Lwni4HZ-\\tGENE\\t-1\\t393\\t178\\t","RTK\\tmFXQLvHD4isJ\\tFAMILY\\t-1\\t690\\t68\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","IBP-n3fS5SVk\\tcwgYdqrk4hBA\\t9M7XTM_-4WR7\\tACTIVATES","gUN_eI4KYtT7\\tNCFq_dYD4Py9\\tecQpjv9Q4Urm\\tACTIVATES","m9Gf2Xzf5WX3\\tEXtYcXdy4Qsz\\tNCFq_dYD4Py9\\tACTIVATES","yqPnLI4M5aT7\\tFyui5tkl4cr5\\tNCFq_dYD4Py9\\tACTIVATES","lIoLBw5O5RdC\\tcwgYdqrk4hBA\\tNmj0_LZZ4VXj\\tACTIVATES","qg8iuvID5Mhz\\t0aa7a88C5GOW\\t8-YqWx2X4f5G\\tACTIVATES","o72iUn2l5c3a\\tua2-F70X4XuC\\t8Qu-Lwni4HZ-\\tINHIBITS","j1x2CWxh5Iy4\\tmFXQLvHD4isJ\\t0aa7a88C5GOW\\tACTIVATES","EuuexlE5Y05b\\tNCFq_dYD4Py9\\t9M7XTM_-4WR7\\tACTIVATES","8Uu5IYEq5KQg\\tQkA8DtgZ4Feb\\t0aa7a88C5GOW\\tINHIBITS","2pXFnqhL5OzR\\tcwgYdqrk4hBA\\tecQpjv9Q4Urm\\tACTIVATES","gE5bPX0c5VDK\\t25v4OB1H4IlR\\tEXtYcXdy4Qsz\\tINHIBITS","HshnmzcdYu-I\\tNCFq_dYD4Py9\\tNmj0_LZZ4VXj\\tACTIVATES","UuK2Sd1m5T5a\\t8Qu-Lwni4HZ-\\t25v4OB1H4IlR\\tACTIVATES","pSaMDCCD5eRf\\tbqBJhHco4YrE\\t8Qu-Lwni4HZ-\\tINHIBITS","6eV4lZbQYv3r\\tNCFq_dYD4Py9\\tNmj0_LZZ4VXj\\tACTIVATES","VFskMcwI5bY7\\ts7zEz-oY4ag8\\tFyui5tkl4cr5\\tACTIVATES","zPkLVdf35NoU\\t8-YqWx2X4f5G\\tcwgYdqrk4hBA\\tACTIVATES"],"LUAD-2014-TP53-pathway":["LUAD-2014-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TP53\\tCQjbRdgs7ItD\\tGENE\\t-1\\t436\\t249\\t","Cell survival\\tSVkWhzV37N80\\tPROCESS\\t-1\\t510\\t348\\t","Proliferation\\tfz0X8H7D7J7L\\tPROCESS\\t-1\\t342\\t347\\t","ATM\\tgjYBW9Ea7HZc\\tGENE\\t-1\\t510\\t151\\t","MDM2\\tSdbPatXY7HDu\\tGENE\\t-1\\t342\\t151\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","npAcARys7a_k\\tCQjbRdgs7ItD\\tSVkWhzV37N80\\tINHIBITS","VGJAIfU07X_O\\tSdbPatXY7HDu\\tCQjbRdgs7ItD\\tINHIBITS","yaRRpgbw7aKj\\tCQjbRdgs7ItD\\tfz0X8H7D7J7L\\tINHIBITS","6yEDoser7Y_S\\tgjYBW9Ea7HZc\\tCQjbRdgs7ItD\\tACTIVATES"],"LUSC-2012-Notch-signaling-pathway":["LUSC-2012-Notch-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TP63\\tjwpnNGJWSGmo\\tGENE\\t-1\\t665\\t118\\t","NOTCH1\\tuCLr0FZ-DVjI\\tGENE\\tqDU9qUkVWgQy\\t307\\t245\\t","NOTCH\\tqDU9qUkVWgQy\\tFAMILY\\t-1\\t385\\t245\\t","FOXP1\\tOQXnexCbWaQC\\tGENE\\t-1\\t781\\t245\\t","NOTCH2\\t8xqf1lEoDVjf\\tGENE\\tqDU9qUkVWgQy\\t462\\t245\\t","SOX2\\tz9OhKjOpSGPy\\tGENE\\t-1\\t392\\t118\\t","ASCL4\\tB7vcA7ATWYcn\\tGENE\\t-1\\t624\\t245\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","PLEAy9rIWrEw\\tz9OhKjOpSGPy\\tqDU9qUkVWgQy\\tINHIBITS","JC1sUBM-WtKp\\tz9OhKjOpSGPy\\tB7vcA7ATWYcn\\tINHIBITS","lP_hmn57Wt5k\\tz9OhKjOpSGPy\\tOQXnexCbWaQC\\tINHIBITS","NJbf1vyhWr_5\\tjwpnNGJWSGmo\\tqDU9qUkVWgQy\\tINHIBITS"],"LUSC-2012-Oxidative-stress-response-pathway":["LUSC-2012-Oxidative-stress-response-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CUL3\\tlReeCCfNRhiB\\tGENE\\t-1\\t567\\t154\\t","NFE2L2\\tb31Gx6nxRij2\\tGENE\\t-1\\t480\\t256\\t","KEAP1\\t74W2ldwARhHq\\tGENE\\t-1\\t381\\t154\\t","Oxidative stress response\\tHZ9RxRrPRkFz\\tPROCESS\\t-1\\t480\\t363\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","RQOk_9p-Rv2F\\tb31Gx6nxRij2\\tHZ9RxRrPRkFz\\tACTIVATES","CT9Gtmm5Rqtm\\t74W2ldwARhHq\\tb31Gx6nxRij2\\tINHIBITS","HHBAbZS1Rto5\\tlReeCCfNRhiB\\tb31Gx6nxRij2\\tINHIBITS"],"LUSC-2012-RTK-RAS-PI(3)K-pathway":["LUSC-2012-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","FGFR1\\tMvptxoO61bRr\\tGENE\\tyiHWlSi0ZceY\\t1097\\t185\\t","KRAS\\tsWfNqwir1dxE\\tGENE\\twfQD-GssZd01\\t894\\t292\\t","PTEN\\tZymRaEU8XIRY\\tGENE\\t-1\\t188\\t185\\t","ERBB3\\tRm4wq0_z1bQa\\tGENE\\tyiHWlSi0ZceY\\t936\\t185\\t","Proliferation\\tP8EboRv6ZME9\\tPROCESS\\t-1\\t494\\t543\\t","AMPK\\t02umJdNsXOpl\\tGENE\\t-1\\t42\\t405\\t","RTK\\tyiHWlSi0ZceY\\tFAMILY\\t-1\\t1023\\t185\\t","AKT\\toxyofYva1T05\\tFAMILY\\t-1\\t389\\t292\\t","AKT2\\tlarrnE_S1WJv\\tGENE\\toxyofYva1T05\\t389\\t292\\t","RAS\\twfQD-GssZd01\\tFAMILY\\t-1\\t894\\t292\\t","Translation\\tHR4vBeq2ZNsn\\tPROCESS\\t-1\\t798\\t543\\t","NF1\\tiabVj2PwYZp2\\tGENE\\t-1\\t1250\\t339\\t","FGFR3\\t2C2nCxu91bRd\\tGENE\\tyiHWlSi0ZceY\\t1424\\t185\\t","STK11\\tO4y17G4EXLUD\\tGENE\\t-1\\t-49\\t300\\t","EGFR\\tAx89UA0r1bQ9\\tGENE\\tyiHWlSi0ZceY\\t622\\t185\\t","TSC2\\tzY7tgwSJ1XbR\\tGENE\\tqLC0RZ4XXsZX\\t403\\t380\\t","TSC\\tqLC0RZ4XXsZX\\tFAMILY\\t-1\\t324\\t380\\t","MTOR\\t9xgTtYW2XQeX\\tGENE\\t-1\\t147\\t480\\t","RASA1\\tDvdwOn2xYWd3\\tGENE\\t-1\\t1250\\t270\\t","AKT3\\tzzXDUqB91WKC\\tGENE\\toxyofYva1T05\\t546\\t292\\t","FGFR2\\tXUUZCJbJ1bRO\\tGENE\\tyiHWlSi0ZceY\\t1259\\t185\\t","PI3K\\tFq9ew-K6XKj-\\tFAMILY\\t-1\\t383\\t185\\t","NRAS\\tW0krGYlI1dxY\\tGENE\\twfQD-GssZd01\\t1054\\t292\\t","ERBB2\\ttKS__G_N1bQt\\tGENE\\tyiHWlSi0ZceY\\t780\\t185\\t","AKT1\\tO_LJqz4I1WJd\\tGENE\\toxyofYva1T05\\t232\\t292\\t","HRAS\\tXIj4ze_l1dxl\\tGENE\\twfQD-GssZd01\\t734\\t292\\t","Cell survival\\tnNugUqXiZNB6\\tPROCESS\\t-1\\t644\\t543\\t","BRAF\\tT1CL0I79YgGR\\tGENE\\t-1\\t894\\t405\\t","PIK3CA\\tcykG-Tsv1fu4\\tGENE\\tFq9ew-K6XKj-\\t383\\t185\\t","TSC1\\t1paUtI_G1Xbd\\tGENE\\tqLC0RZ4XXsZX\\t245\\t380\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","QLi86o6iaTAU\\tT1CL0I79YgGR\\tnNugUqXiZNB6\\tACTIVATES","gB5T8yfp3IU3\\t9xgTtYW2XQeX\\tHR4vBeq2ZNsn\\tACTIVATES","sXH_uS-e1T1m\\toxyofYva1T05\\tHR4vBeq2ZNsn\\tACTIVATES","WUv8Ij4AaR-n\\tT1CL0I79YgGR\\tP8EboRv6ZME9\\tACTIVATES","RCM2k2xJ1T1r\\toxyofYva1T05\\tqLC0RZ4XXsZX\\tINHIBITS","4bGJbkzlaO_3\\tDvdwOn2xYWd3\\twfQD-GssZd01\\tINHIBITS","awuopxpi1T1c\\toxyofYva1T05\\tP8EboRv6ZME9\\tACTIVATES","WURhbp8YX5ol\\tO4y17G4EXLUD\\t02umJdNsXOpl\\tACTIVATES","fTcRATeQaEYa\\twfQD-GssZd01\\tT1CL0I79YgGR\\tACTIVATES","-RCFsGxvaQmo\\tiabVj2PwYZp2\\twfQD-GssZd01\\tINHIBITS","9dW1i3sN3Gtu\\t9xgTtYW2XQeX\\tP8EboRv6ZME9\\tACTIVATES","Uc5AjjxV3HcN\\t9xgTtYW2XQeX\\tnNugUqXiZNB6\\tACTIVATES","vYmJjY8pX14b\\tZymRaEU8XIRY\\tFq9ew-K6XKj-\\tINHIBITS","pzSfIS3bX6g_\\t02umJdNsXOpl\\t9xgTtYW2XQeX\\tACTIVATES","3eElg70UaNdN\\tyiHWlSi0ZceY\\twfQD-GssZd01\\tACTIVATES","-GLnxzAk1T1w\\toxyofYva1T05\\tnNugUqXiZNB6\\tACTIVATES","eDF8oz7ZaT8J\\tT1CL0I79YgGR\\tHR4vBeq2ZNsn\\tACTIVATES","vecmsBiI1T1S\\tFq9ew-K6XKj-\\toxyofYva1T05\\tACTIVATES"],"MYC":["MYC","","Involves a number of transcription regulation complexes: MYC-MAX, MAX-MXD, MAX-MGA, and the energy sensing, MondoA-Mlx complex in the regulation of apoptotic response and cell differentiation.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","MXD1\\tYd6m7-sCeh37\\tGENE\\tTrTubnzSeh3h\\t151\\t436","MXD4\\tplDFXS0peh30\\tGENE\\tTrTubnzSeh3h\\t488\\t436","MXI1\\tdNmw_8oVeh3k\\tGENE\\tTrTubnzSeh3h\\t651\\t436","MGA\\tGt92f6Iyeh3a\\tGENE\\tLwRHv9NUeh3R\\t580\\t310","MYC/MAX Complex\\tOCJ3wBBPeh4J\\tCOMPLEX\\t-1\\t479\\t172","MYC\\tKDr5caJdeh4X\\tGENE\\tOCJ3wBBPeh4J\\t313\\t172","MYCL\\tm1nG2P8zeh4p\\tGENE\\tOCJ3wBBPeh4J\\t645\\t173","MLXIPL\\t6ZvsmDKBeh3H\\tGENE\\tIuhA7dyleh3B\\t571\\t658","MAX/MXD Complex\\tTrTubnzSeh3h\\tCOMPLEX\\t-1\\t483\\t436","MAX\\tyGKkO3Ajeh3V\\tGENE\\tLwRHv9NUeh3R\\t344\\t310","MXD3\\ta19O0LiCeh3p\\tGENE\\tTrTubnzSeh3h\\t323\\t436","MLXIP\\tO9V1RuKxeh3K\\tGENE\\tIuhA7dyleh3B\\t395\\t656","MLX\\teH1TNcCVeh3F\\tGENE\\tIuhA7dyleh3B\\t490\\t550","MYCN\\tMn3yUjZveh4v\\tGENE\\tOCJ3wBBPeh4J\\t478\\t173","MLX/MONDO Complex\\tIuhA7dyleh3B\\tCOMPLEX\\t-1\\t483\\t604","MNT\\tmfvZ3Tqreh3u\\tGENE\\tTrTubnzSeh3h\\t815\\t436","MAX/MGA Complex\\tLwRHv9NUeh3R\\tCOMPLEX\\t-1\\t462\\t310","Cell growth, proliferation, apoptosis\\trU4TiKfKeh43\\tPROCESS\\t-1\\t-237\\t433","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","w4MBdulYeh48\\tOCJ3wBBPeh4J\\tyGKkO3Ajeh3V\\tBINDS\\t","kmXInTa9eh5O\\t6ZvsmDKBeh3H\\teH1TNcCVeh3F\\tBINDS\\t","Hv8GfgZPeh5T\\tyGKkO3Ajeh3V\\tGt92f6Iyeh3a\\tNONE\\t","9h-taWpfeh5Z\\tLwRHv9NUeh3R\\trU4TiKfKeh43\\tINHIBITS\\t","eTpDGcg6eh5B\\tOCJ3wBBPeh4J\\trU4TiKfKeh43\\tACTIVATES\\t","mfpvepQNeh5c\\tTrTubnzSeh3h\\tIuhA7dyleh3B\\tBINDS\\t","QJOD8bddeh5I\\tIuhA7dyleh3B\\trU4TiKfKeh43\\tACTIVATES\\t","9ShDYkfTeh5Q\\tO9V1RuKxeh3K\\teH1TNcCVeh3F\\tBINDS\\t","Vfrm_1Ezeh5E\\tTrTubnzSeh3h\\trU4TiKfKeh43\\tINHIBITS\\t","nrV2aZn8eh5L\\tyGKkO3Ajeh3V\\tTrTubnzSeh3h\\tBINDS\\t"],"NOTCH":["NOTCH","","Pathway involved in cell-cell communication, cell fate. Cleavage of Notch receptors leads to the displacement of a transcription repressor complex on RBPJ (a transcription factor also known as CSL) accompanied by recruitment of an activation complex (including MAMLs) leads to transcription of Notch target genes.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","NRARP\\tIyt-kiQdVYR4\\tGENE\\t-1\\t1392\\t357","CUL1\\tORzx_8_5UAjR\\tGENE\\t-1\\t861\\t171","CREBBP\\thrOQVgOCWtHH\\tGENE\\tamGWWOzfWrg1\\t1006\\t344","NCOR2\\ttRKlqV2HWQET\\tGENE\\t1WQdsd0RVSHH\\t919\\t500","SPEN\\tt3mLgYfBWQD4\\tGENE\\t1WQdsd0RVSHH\\t1078\\t439","NOTCH3\\t2YXLvEuJWVnS\\tGENE\\tfLn2ytnZVU-1\\t386\\t344"," \\tamGWWOzfWrg1\\tCOMPLEX\\t-1\\t1089\\t309","CNTN6\\t8xDiqqMtUlgK\\tGENE\\t-1\\t153\\t344","HES-X\\tCCp9TqYNVWpA\\tGENE\\t-1\\t1392\\t221","KAT2B\\tW6JlNq1wWtHA\\tGENE\\tamGWWOzfWrg1\\t1171\\t274","KDM5A\\tTHgZUx73WQED\\tGENE\\t1WQdsd0RVSHH\\t1240\\t439","DNER\\t8lwlJT8zUt7J\\tGENE\\t-1\\t386\\t439","NCOR1\\tVh9n-uUkWQDu\\tGENE\\t1WQdsd0RVSHH\\t917\\t440","CLEAVED NOTCH\\tH-nBa6GpUrhI\\tCOMPLEX\\t-1\\t781\\t316","FBXW7\\t5nfQJAxjT_z9\\tGENE\\t-1\\t630\\t171"," \\t1WQdsd0RVSHH\\tFAMILY\\t-1\\t1079\\t469","NOTCH1\\tVG_45lkLWVm6\\tGENE\\tfLn2ytnZVU-1\\t386\\t274","MALM3\\tdAIql3LLWtG5\\tGENE\\tamGWWOzfWrg1\\t1007\\t274","NOV\\tfhalsWFrUkbl\\tGENE\\t-1\\t153\\t274","JAG2\\tEjlh1U2VT-P2\\tGENE\\t-1\\t285\\t171"," \\tfLn2ytnZVU-1\\tCOMPLEX\\t-1\\t472\\t309","HEY-X\\t0mJB_ECxVXFr\\tGENE\\t-1\\t1392\\t288","PSEN2\\tXzuk75kgUufI\\tGENE\\t-1\\t558\\t439","EP300\\tq34LVe78WtHT\\tGENE\\tamGWWOzfWrg1\\t1170\\t344","NOTCH2\\tYBZcjlo4WVnH\\tGENE\\tfLn2ytnZVU-1\\t558\\t274","ARRDC1\\tQj8O9GJNT_AD\\tGENE\\t-1\\t454\\t171","NOTCH4\\tQf89YkiEWVne\\tGENE\\tfLn2ytnZVU-1\\t558\\t344","Cell growth, apoptosis\\tNvu3J1djU_IC\\tPROCESS\\t-1\\t1562\\t439","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","3ZGBwutXWvCf\\t1WQdsd0RVSHH\\tamGWWOzfWrg1\\tINHIBITS\\t","ojk1D4nOWbct\\tEjlh1U2VT-P2\\tfLn2ytnZVU-1\\tACTIVATES\\t","U40tVKQcWjcm\\tXzuk75kgUufI\\tfLn2ytnZVU-1\\tACTIVATES\\t","qgZ5w26hWm8v\\t8xDiqqMtUlgK\\tfLn2ytnZVU-1\\tINHIBITS\\t","xzRJacuuWiP-\\t5nfQJAxjT_z9\\tH-nBa6GpUrhI\\tINHIBITS\\t","_RaZlGxreARX\\tIyt-kiQdVYR4\\tNvu3J1djU_IC\\tINHIBITS\\t","6YudlCKlWygq\\tamGWWOzfWrg1\\tCCp9TqYNVWpA\\tACTIVATES\\t","6YYOMrO7W1Lu\\tamGWWOzfWrg1\\tIyt-kiQdVYR4\\tACTIVATES\\t","y9nj-EHqWlEU\\tfhalsWFrUkbl\\tfLn2ytnZVU-1\\tINHIBITS\\t","QgTnL-0zWfX-\\t8lwlJT8zUt7J\\tfLn2ytnZVU-1\\tACTIVATES\\t","YvuJzpCJWoS3\\tORzx_8_5UAjR\\t5nfQJAxjT_z9\\tACTIVATES\\t","QWoJOCVzW3SR\\t0mJB_ECxVXFr\\tNvu3J1djU_IC\\tACTIVATES\\t","9I6RH1JoWwwW\\tH-nBa6GpUrhI\\tamGWWOzfWrg1\\tACTIVATES\\t","4oG8A9OTWz_Z\\tamGWWOzfWrg1\\t0mJB_ECxVXFr\\tACTIVATES\\t","WZmI2ceJWg0e\\tQj8O9GJNT_AD\\tfLn2ytnZVU-1\\tINHIBITS\\t","U1KCxbf0W2Wy\\tCCp9TqYNVWpA\\tNvu3J1djU_IC\\tACTIVATES\\t"],"NRF2":["NRF2","","Involves the regulation of the transcription factor NFE2L2 by KEAP1. NFE2L2 regulates genes with the antioxidant response elements (ARE) that aid in cellular response against oxidative stress thought to aid in cancer chemoresistance.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","KEAP1\\tOkLgTv_3eszi\\tGENE\\t-1\\t294\\t147","CUL3\\tpxCvh_ojeszm\\tGENE\\t-1\\t469\\t147","Oxidative Stress Response\\tE9bpVpoWeszr\\tPROCESS\\t-1\\t598\\t240","NFE2L2\\tsKw8nuDgeszp\\tGENE\\t-1\\t385\\t240","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","wIxLZx13eszt\\tOkLgTv_3eszi\\tsKw8nuDgeszp\\tINHIBITS\\t","aWKwI8rJesz1\\tsKw8nuDgeszp\\tE9bpVpoWeszr\\tACTIVATES\\t","Ng79Bysjeszx\\tpxCvh_ojeszm\\tsKw8nuDgeszp\\tINHIBITS\\t"],"OV-2011-Cell-cycle-signaling-pathway":["OV-2011-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDKN2A\\toN50crvCRjmK\\tGENE\\t-1\\t635\\t68\\t","RB1\\ttJj5RrqJRq1h\\tGENE\\t-1\\t635\\t299\\t","CCNE1\\tSx3IX8ExBTXu\\tGENE\\tFY8bF0WdRsru\\t639\\t148\\t","CCND1\\tBIDGlk8LBTX9\\tGENE\\tFY8bF0WdRsru\\t550\\t207\\t","CYCLINS\\tFY8bF0WdRsru\\tFAMILY\\t-1\\t634\\t177\\t","Cell cycle progression\\tnnswnmMyRv3y\\tPROCESS\\t-1\\t635\\t373\\t","CCND2\\tIxg8lLJLBTXd\\tGENE\\tFY8bF0WdRsru\\t719\\t207\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","duEMY1UXR86v\\tFY8bF0WdRsru\\ttJj5RrqJRq1h\\tINHIBITS","__OC9xbiR-Fr\\ttJj5RrqJRq1h\\tnnswnmMyRv3y\\tACTIVATES","VqDZTZnER7cZ\\toN50crvCRjmK\\tFY8bF0WdRsru\\tINHIBITS"],"OV-2011-Notch-signaling-pathway":["OV-2011-Notch-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","MAML3\\twTL7UE_SDIWe\\tGENE\\tZ64sAxBCSrsH\\t800\\t380\\t","JAG1\\tEy82kzAQDKzS\\tGENE\\tHPXERf3USgjx\\t462\\t280\\t","MAML1\\tICfP9aB2DIWS\\tGENE\\tZ64sAxBCSrsH\\t800\\t247\\t","JAG2\\tFvIadI1RDKzA\\tGENE\\tHPXERf3USgjx\\t462\\t351\\t","JAG\\tHPXERf3USgjx\\tFAMILY\\t-1\\t462\\t315\\t","NOTCH3\\txiGB_3VdSfd3\\tGENE\\t-1\\t632\\t316\\t","MAML2\\t9xWqi9JKDIWF\\tGENE\\tZ64sAxBCSrsH\\t800\\t314\\t","MAML\\tZ64sAxBCSrsH\\tFAMILY\\t-1\\t800\\t314\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","osh5OcaxTA2q\\tHPXERf3USgjx\\txiGB_3VdSfd3\\tINHIBITS","AivX6u8YTCYD\\tZ64sAxBCSrsH\\txiGB_3VdSfd3\\tINHIBITS"],"OV-2011-RTK-RAS-PI(3)K-pathway":["OV-2011-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","KRAS\\t4SZmwk65Q2AX\\tGENE\\t-1\\t529\\t119\\t","AKT\\tJXx22AmtmHua\\tFAMILY\\t-1\\t263\\t234\\t","AKT2\\t1QP6Io9jmSsb\\tGENE\\tJXx22AmtmHua\\t263\\t203\\t","NF1\\tbKlDARX_QzeJ\\tGENE\\t-1\\t529\\t41\\t","Proliferation/survival\\teyOUahBEQth7\\tPROCESS\\t-1\\t413\\t402\\t","AKT1\\tpw2OFJfHmSsq\\tGENE\\tJXx22AmtmHua\\t263\\t265\\t","PTEN\\tqx1xPdYgQgUA\\tGENE\\t-1\\t263\\t41\\t","BRAF\\tXLdjd_rNQ5TF\\tGENE\\t-1\\t529\\t239\\t","PIK3CA\\t9WGkKXm-QhuR\\tGENE\\t-1\\t263\\t119\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","lwcl1MvdmPEO\\tJXx22AmtmHua\\teyOUahBEQth7\\tACTIVATES","6CO_N8liRIA4\\tbKlDARX_QzeJ\\t4SZmwk65Q2AX\\tINHIBITS","TDBL0RUZRJb3\\t4SZmwk65Q2AX\\tXLdjd_rNQ5TF\\tACTIVATES","uXgITAznRMO2\\tXLdjd_rNQ5TF\\teyOUahBEQth7\\tACTIVATES","vkkqRMcgQ90m\\t4SZmwk65Q2AX\\t9WGkKXm-QhuR\\tACTIVATES","oxMyRc9ImLT_\\t9WGkKXm-QhuR\\tJXx22AmtmHua\\tACTIVATES","_9kjQAkpdEP0\\tqx1xPdYgQgUA\\t9WGkKXm-QhuR\\tINHIBITS"],"PI3K":["PI3K","","A signaling cascade involving PI3K phosphorylation of AKT leading to the activation of the mTORC1 complex. The mTORC1 functions as a metabolic sensor and controls protein abundance by affecting processes involved in protein production and RNA translation leading to changes in cell growth and survival.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","AKT3\\teWz9lexke0kY\\tGENE\\tyEOAK96Ye0j-\\t752\\t327","RPTOR\\tKHzd_YdNe0jd\\tGENE\\tJKE-mm1le0jZ\\t759\\t730","PIK3CA\\tBpH76ff7e0iw\\tGENE\\t-1\\t595\\t176","PIK3R2\\t5lBs8QfFe0i_\\tGENE\\tiK4blWyDe0i1\\t804\\t167","RHEB\\t8eeCwYTqe0jC\\tGENE\\t-1\\t599\\t619","PIK3R\\tiK4blWyDe0i1\\tFAMILY\\t-1\\t804\\t166","AKT\\tyEOAK96Ye0j-\\tFAMILY\\t-1\\t594\\t327","mTORC2\\tMMeMHe4ze0kj\\tFAMILY\\t-1\\t421\\t730","TSC\\t3b8rKMrke0jF\\tFAMILY\\t-1\\t596\\t486","AKT2\\t9o76blkNe0kR\\tGENE\\tyEOAK96Ye0j-\\t594\\t327","mTORC1\\tJKE-mm1le0jZ\\tFAMILY\\t-1\\t678\\t730","PPP2R1A\\tHY1OO1uEe0jv\\tGENE\\t-1\\t971\\t326","PIK3R3\\tGy1IflZce0i5\\tGENE\\tiK4blWyDe0i1\\t804\\t227","PTEN\\tHL_nLOSce0jV\\tGENE\\t-1\\t594\\t91","MTOR\\t_WbyV7oYe0jj\\tGENE\\tJKE-mm1le0jZ\\t597\\t730","PIK3R1\\tj_DI0z3Xe0i8\\tGENE\\tiK4blWyDe0i1\\t804\\t106","Cell growth\\t_wytH85He0jQ\\tPROCESS\\t-1\\t601\\t860","INPP4B\\t2ZOWMzsce0j4\\tGENE\\t-1\\t372\\t178","TSC1\\tx2juQzTie0jM\\tGENE\\t3b8rKMrke0jF\\t596\\t459","TSC2\\tzs4f_I93e0jJ\\tGENE\\t3b8rKMrke0jF\\t596\\t513","RICTOR\\tDg3B9H1Me0ks\\tGENE\\tMMeMHe4ze0kj\\t421\\t730","AKT1\\tTDuOMRUee0kH\\tGENE\\tyEOAK96Ye0j-\\t437\\t327","STK11\\tURGrIXe2e0kd\\tGENE\\t-1\\t336\\t483","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","an7n5soQe0k8\\tyEOAK96Ye0j-\\t3b8rKMrke0jF\\tINHIBITS\\t","YeQpbZw0e0lG\\t3b8rKMrke0jF\\t8eeCwYTqe0jC\\tINHIBITS\\t","wjtVfwEee0lB\\tJKE-mm1le0jZ\\t_wytH85He0jQ\\tACTIVATES\\t","6Mr0F0gAe0lD\\tURGrIXe2e0kd\\t3b8rKMrke0jF\\tACTIVATES\\t","EigHAJh7e0lI\\tHL_nLOSce0jV\\tBpH76ff7e0iw\\tINHIBITS\\t","s7B8LZsde0k-\\tBpH76ff7e0iw\\tyEOAK96Ye0j-\\tACTIVATES\\t","1T4VmG08e0lL\\tiK4blWyDe0i1\\tBpH76ff7e0iw\\tINHIBITS\\t","3yNlj0Tge0k2\\t8eeCwYTqe0jC\\tJKE-mm1le0jZ\\tACTIVATES\\t","NuGuIugXe0k6\\t2ZOWMzsce0j4\\tBpH76ff7e0iw\\tINHIBITS\\t","pYhyONrDe0lP\\tDg3B9H1Me0ks\\tURGrIXe2e0kd\\tACTIVATES\\t","h-JnEMgBe0lN\\tHY1OO1uEe0jv\\tyEOAK96Ye0j-\\tINHIBITS\\t"],"RTK-RAS":["RTK-RAS","","A signaling cascade pathway initiated by activation of RTKs followed signal transduction through Ras then Raf and then MEK family members. This cascade leads to the activation of several transcription factors that regulate processes involving cell proliferation and survival.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","NRAS\\tQHZo7kkDfrMO\\tGENE\\tb8V1sXZDfrL1\\t1142\\t348","ROS1\\ttNj2tohofrKR\\tGENE\\t8tMooF5vfrKJ\\t664\\t166","KIT\\tgWlRUSfzfrKt\\tGENE\\t8tMooF5vfrKJ\\t1142\\t104","Translation\\t7CK2REgNfrKF\\tPROCESS\\t-1\\t881\\t625","PTPN11\\tjTtQAhJrfrJx\\tGENE\\t-1\\t504\\t348","RAS\\tb8V1sXZDfrL1\\tFAMILY\\t-1\\t1063\\t348","RET\\tyjRzsMVifrKy\\tGENE\\t8tMooF5vfrKJ\\t504\\t166","CBL\\t0a_o8sXafrJh\\tGENE\\t-1\\t504\\t262","Proliferation\\t3VFXQGLzfrJ-\\tPROCESS\\t-1\\t559\\t626","FLT3\\tIpmlW5vMfrLc\\tGENE\\t8tMooF5vfrKJ\\t982\\t166","NF1\\t59lXGxKMfrJn\\tGENE\\t-1\\t1142\\t262","NTRK2\\t5SlBGbo1frLr\\tGENE\\t8tMooF5vfrKJ\\t1302\\t166","ERRFI1\\t-V-9_6fAfrJj\\tGENE\\t-1\\t664\\t262","ARAF\\tcBahXkGvfrMn\\tGENE\\tsApg3-IVfrMe\\t982\\t429","FGFR3\\t1EucZO9pfrLJ\\tGENE\\t8tMooF5vfrKJ\\t824\\t104","HRAS\\tBB8hBTZ4frME\\tGENE\\tb8V1sXZDfrL1\\t982\\t348","MET\\t_yKldPkzfrKZ\\tGENE\\t8tMooF5vfrKJ\\t1142\\t41","RAF1\\tLk9sb9wzfrM5\\tGENE\\tsApg3-IVfrMe\\t1302\\t429","RAC1\\tzDRSUmjffrJ7\\tGENE\\t-1\\t614\\t511","FGFR1\\tRFZ2wD4YfrKf\\tGENE\\t8tMooF5vfrKJ\\t504\\t104","MEK\\t3psJQJmGfrJV\\tFAMILY\\t-1\\t1062\\t511","FGFR2\\tnTecsKLYfrKj\\tGENE\\t8tMooF5vfrKJ\\t664\\t104","KRAS\\te8tWMLoVfrL9\\tGENE\\tb8V1sXZDfrL1\\t824\\t348","BRAF\\tNM12nD_nfrMx\\tGENE\\tsApg3-IVfrMe\\t1142\\t429","ERBB2\\tC45Adl13frKV\\tGENE\\t8tMooF5vfrKJ\\t664\\t41","ERBB4\\tZ-e0kCBwfrKN\\tGENE\\t8tMooF5vfrKJ\\t982\\t41","MAPK1\\tR9ZNAxVRfrJ3\\tGENE\\t-1\\t783\\t511","RAF\\tsApg3-IVfrMe\\tFAMILY\\t-1\\t1142\\t429","EGFR\\t9Psi8emvfrK3\\tGENE\\t8tMooF5vfrKJ\\t504\\t41","RASA1\\tZSZjKexZfrJ0\\tGENE\\t-1\\t1301\\t262","FGFR4\\tMfs6mvKHfrKo\\tGENE\\t8tMooF5vfrKJ\\t982\\t104","IGF1R\\tCvsyhyzdfrLQ\\tGENE\\t8tMooF5vfrKJ\\t1302\\t104","ERBB3\\trORV55VHfrK9\\tGENE\\t8tMooF5vfrKJ\\t824\\t41","Cell survival\\tvmWLLGP3frKC\\tPROCESS\\t-1\\t718\\t626","SOS1\\tbdPjTyaDfrJu\\tGENE\\t-1\\t982\\t262","RIT1\\tpTVg5xU2frMW\\tGENE\\tb8V1sXZDfrL1\\t1302\\t348","MAP2K2\\tgqrpYTM0frJa\\tGENE\\t3psJQJmGfrJV\\t1142\\t511","ALK\\t1o_9LYSFfrLV\\tGENE\\t8tMooF5vfrKJ\\t824\\t166","NTRK1\\tT6ceghhpfrLj\\tGENE\\t8tMooF5vfrKJ\\t1142\\t166","RTKs\\t8tMooF5vfrKJ\\tFAMILY\\t-1\\t903\\t103","PDGFRA\\ty8PZ8iiyfrLD\\tGENE\\t8tMooF5vfrKJ\\t1302\\t41","MAP2K1\\tQ2i0HY0HfrJe\\tGENE\\t3psJQJmGfrJV\\t982\\t511","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","Rokn-zgqfrNN\\t-V-9_6fAfrJj\\t8tMooF5vfrKJ\\tINHIBITS\\t","BvZejKrrfrNX\\t59lXGxKMfrJn\\tb8V1sXZDfrL1\\tINHIBITS\\t","CEWkH2kYfrNa\\tZSZjKexZfrJ0\\tb8V1sXZDfrL1\\tINHIBITS\\t","In_EmpIgfrNv\\tR9ZNAxVRfrJ3\\t7CK2REgNfrKF\\tACTIVATES\\t","NYpLslu-frNh\\tsApg3-IVfrMe\\t3psJQJmGfrJV\\tACTIVATES\\t","8OWp0SRTfrNm\\tzDRSUmjffrJ7\\tR9ZNAxVRfrJ3\\tACTIVATES\\t","OnjXx-jmfrNk\\t3psJQJmGfrJV\\tR9ZNAxVRfrJ3\\tACTIVATES\\t","HPbM8huafrNU\\tbdPjTyaDfrJu\\tb8V1sXZDfrL1\\tACTIVATES\\t","qtmobl6_frNF\\t0a_o8sXafrJh\\t8tMooF5vfrKJ\\tINHIBITS\\t","8EmU4xtSfrNo\\tR9ZNAxVRfrJ3\\t3VFXQGLzfrJ-\\tACTIVATES\\t","n_C1QGZ2frNr\\tR9ZNAxVRfrJ3\\tvmWLLGP3frKC\\tACTIVATES\\t","vQrHXLexfrNR\\t8tMooF5vfrKJ\\tbdPjTyaDfrJu\\tACTIVATES\\t","gs6EgVUcfrNd\\tb8V1sXZDfrL1\\tsApg3-IVfrMe\\tACTIVATES\\t"],"SKCM-2015-Cell-cycle-signaling-pathway":["SKCM-2015-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDKN2A\\tnpKTJggFJS4I\\tGENE\\t-1\\t442\\t89\\t","CYCLINS\\tIba11JzIJVxh\\tFAMILY\\t-1\\t520\\t175\\t","CDK4\\tWcN_CcOrC9iS\\tGENE\\tIba11JzIJVxh\\t442\\t175\\t","E2F\\tXI_rBXYxJXPk\\tGENE\\t-1\\t520\\t372\\t","CCND1\\tv_gEFTZBC9il\\tGENE\\tIba11JzIJVxh\\t599\\t175\\t","Cell cycle progression\\te_ZEQUYtJz1B\\tPROCESS\\t-1\\t520\\t484\\t","RB1\\t4vxRSXTEJWO8\\tGENE\\t-1\\t520\\t276\\t","CDKN2B\\tuK5CVzIeJayA\\tGENE\\t-1\\t599\\t89\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","vJf6xitbJwIp\\tnpKTJggFJS4I\\tIba11JzIJVxh\\tINHIBITS","MrgZ3psqKpK7\\tXI_rBXYxJXPk\\te_ZEQUYtJz1B\\tACTIVATES","fQLLdtj0JzEP\\t4vxRSXTEJWO8\\tXI_rBXYxJXPk\\tINHIBITS","Msdh3q6kJxC4\\tuK5CVzIeJayA\\tIba11JzIJVxh\\tINHIBITS","vjchZOt9JyOV\\tIba11JzIJVxh\\t4vxRSXTEJWO8\\tINHIBITS"],"SKCM-2015-Histone-modification-pathway":["SKCM-2015-Histone-modification-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","AURKA\\tUUHLK2LeLlq4\\tGENE\\t-1\\t425\\t166\\t","PPP6C\\tyZeIXzgALlHL\\tGENE\\t-1\\t231\\t166\\t","ARID2\\t4dCj0PbWLn10\\tGENE\\t-1\\t425\\t308\\t","Genetic stability\\txWY6P0idNRza\\tPROCESS\\t-1\\t624\\t195\\t","Chromatin remodeling\\t-c29Xam0NfMu\\tPROCESS\\t-1\\t231\\t263\\t","Chromatid segregation\\tCl7g3xLYLmwQ\\tPROCESS\\t-1\\t624\\t133\\t","Transcriptional control\\tX7mpJiW8Lodu\\tPROCESS\\t-1\\t231\\t342\\t","Epigenetic regulation\\t8D0fnb8SLrSQ\\tPROCESS\\t-1\\t231\\t437\\t","IDH1\\tuHqIeo66Lqq9\\tGENE\\t-1\\t425\\t435\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","9WzDoyMZNXKq\\tUUHLK2LeLlq4\\tCl7g3xLYLmwQ\\tACTIVATES","nh2AMryLNpj_\\tuHqIeo66Lqq9\\t8D0fnb8SLrSQ\\tACTIVATES","3ixp2EynNWMa\\tyZeIXzgALlHL\\tUUHLK2LeLlq4\\tACTIVATES","-scKWlPDNX6-\\tUUHLK2LeLlq4\\txWY6P0idNRza\\tACTIVATES","8YJTZK-INn2c\\t4dCj0PbWLn10\\t-c29Xam0NfMu\\tACTIVATES","MdvHv-NFNoui\\t4dCj0PbWLn10\\tX7mpJiW8Lodu\\tACTIVATES"],"SKCM-2015-RTK-RAS-PI(3)K-pathway":["SKCM-2015-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Proliferation\\tOpbQ5N5BIR7T\\tPROCESS\\t-1\\t528\\t524\\t","NF1\\tz9P8VET8IH-v\\tGENE\\t-1\\t256\\t147\\t","NRAS\\tstZUUqWp9HOb\\tGENE\\tdQrC9TeNIX-m\\t374\\t236\\t","Survival\\tDXOfiysJIUYY\\tPROCESS\\t-1\\t1107\\t329\\t","RAS\\tdQrC9TeNIX-m\\tFAMILY\\t-1\\t529\\t236\\t","RAC1\\t8CZU3OY7IlD5\\tGENE\\t-1\\t880\\t364\\t","KIT\\tyhNL3UBnIL-5\\tGENE\\t-1\\t880\\t120\\t","AKT Pathway\\t5m3zxs1KINf7\\tPROCESS\\t-1\\t880\\t241\\t","MAP2K1\\teNN9GlQaIQwL\\tGENE\\t-1\\t528\\t435\\t","PTEN\\tRtyOk-X-ITE3\\tGENE\\t-1\\t1106\\t241\\t","BRAF\\t4dRiJZfvIPWm\\tGENE\\t-1\\t528\\t338\\t","KRAS\\thksSbzGD9HOJ\\tGENE\\tdQrC9TeNIX-m\\t685\\t236\\t","HRAS\\tNNEMBzDV9HNw\\tGENE\\tdQrC9TeNIX-m\\t530\\t236\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","soPzg51UIxxj\\t8CZU3OY7IlD5\\t5m3zxs1KINf7\\tACTIVATES","Cf02-ifyItuD\\tdQrC9TeNIX-m\\t4dRiJZfvIPWm\\tACTIVATES","BqXWl69hI1zW\\tyhNL3UBnIL-5\\t5m3zxs1KINf7\\tACTIVATES","1Aepvid-IqoA\\tz9P8VET8IH-v\\tdQrC9TeNIX-m\\tINHIBITS","J01_493NIzbP\\t4dRiJZfvIPWm\\t5m3zxs1KINf7\\tACTIVATES","PCKlXBgfIu2g\\t4dRiJZfvIPWm\\teNN9GlQaIQwL\\tACTIVATES","q7PHpnTgIwuD\\t8CZU3OY7IlD5\\teNN9GlQaIQwL\\tACTIVATES","FxAnigvrI2_i\\t5m3zxs1KINf7\\tDXOfiysJIUYY\\tACTIVATES","uglecyI1IsGD\\tyhNL3UBnIL-5\\tdQrC9TeNIX-m\\tACTIVATES","iCnUjDjmIvi5\\teNN9GlQaIQwL\\tOpbQ5N5BIR7T\\tACTIVATES","HEzFrHkCI0l-\\tRtyOk-X-ITE3\\t5m3zxs1KINf7\\tINHIBITS"],"SKCM-2015-TP53-pathway":["SKCM-2015-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Apoptosis\\tTc8UdIhSLCIT\\tPROCESS\\t-1\\t289\\t372\\t","TP53\\tGBRktWHeLBFQ\\tGENE\\t-1\\t381\\t273\\t","MDM2\\t-VggHhz9K-1w\\tGENE\\t-1\\t381\\t193\\t","CDKN2B\\tB3XBHs3yK9o7\\tGENE\\t-1\\t456\\t108\\t","Senescence\\tcLoUlZOZLD0x\\tPROCESS\\t-1\\t456\\t372\\t","CDKN2A\\thml0YQ9_K8tc\\tGENE\\t-1\\t289\\t108\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","gBzu2KRcLSuV\\tB3XBHs3yK9o7\\t-VggHhz9K-1w\\tINHIBITS","XenUWWntLTzX\\t-VggHhz9K-1w\\tGBRktWHeLBFQ\\tINHIBITS","WNkolmuaLVxV\\tGBRktWHeLBFQ\\tcLoUlZOZLD0x\\tACTIVATES","N3sY9gBuLVHA\\tGBRktWHeLBFQ\\tTc8UdIhSLCIT\\tACTIVATES","2r21RRvbLR21\\thml0YQ9_K8tc\\t-VggHhz9K-1w\\tINHIBITS"],"STAD-2014-RTK-RAS-PI(3)K-pathway":["STAD-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PTEN\\t6OFxgP6h9_xG\\tGENE\\t-1\\t341\\t496\\t","RASA1\\tY6PU3f3t93HB\\tGENE\\t-1\\t419\\t172\\t","KRAS\\txCs5lqYG7Z1Z\\tGENE\\t7oEmRnmC-RqY\\t341\\t265\\t","JAK2\\tL1LDTgi27i0r\\tGENE\\tuCiynVqo-CBg\\t167\\t366\\t","PIK3R1\\tij4dXcH1-Ah1\\tGENE\\t-1\\t516\\t496\\t","RAS\\t7oEmRnmC-RqY\\tFAMILY\\t-1\\t420\\t265\\t","NRAS\\tdwqmccUP7Z1E\\tGENE\\t7oEmRnmC-RqY\\t499\\t265\\t","ERBB2\\tL6F3ltyJ7i1T\\tGENE\\tuCiynVqo-CBg\\t167\\t233\\t","EGFR\\tOrbXhKLA7i1D\\tGENE\\tuCiynVqo-CBg\\t167\\t164\\t","FGFR2\\tGc4Ktrgt7i1M\\tGENE\\tuCiynVqo-CBg\\t167\\t430\\t","PIK3CA\\tWBOfcnh9993x\\tGENE\\t-1\\t419\\t394\\t","MET\\tgbmLOkrS7i1x\\tGENE\\tuCiynVqo-CBg\\t167\\t496\\t","RTK\\tuCiynVqo-CBg\\tFAMILY\\t-1\\t167\\t330\\t","ERBB3\\t6Uq7nWdq7i1f\\tGENE\\tuCiynVqo-CBg\\t167\\t299\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","20X5Aj7K-bWX\\t6OFxgP6h9_xG\\tWBOfcnh9993x\\tINHIBITS","VZzlIbfS-edr\\tuCiynVqo-CBg\\t7oEmRnmC-RqY\\tACTIVATES","KrNMU6gX-f84\\tuCiynVqo-CBg\\tWBOfcnh9993x\\tACTIVATES","1JHahVpJ-cGV\\tij4dXcH1-Ah1\\tWBOfcnh9993x\\tINHIBITS","IyUACdpr-YSa\\t7oEmRnmC-RqY\\tWBOfcnh9993x\\tACTIVATES","OPPikJRZ-XUc\\tY6PU3f3t93HB\\t7oEmRnmC-RqY\\tINHIBITS","vbNOH609-aVf\\tWBOfcnh9993x\\t7oEmRnmC-RqY\\tACTIVATES"],"TGF-Beta":["TGF-Beta","","A signaling network involved in growth, proliferation, apoptosis, and differentiation involving the activation of TGFβ receptors by the cytokine TGFβ that leads to the activation of gene transcription by SMADs.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","SMAD2\\t0qBZliXOfmft\\tGENE\\tXkk8SKlafmfn\\t335\\t410","SMAD\\tXkk8SKlafmfn\\tFAMILY\\t-1\\t424\\t446","Activin ligands\\tt_Q1Nr-BfmfR\\tGENE\\t-1\\t509\\t146","ACVR2B\\t9Ev1i-2HfmfX\\tGENE\\tboabbY81fmfT\\t508\\t307","TGFBR\\tfXKkJObYfmfb\\tFAMILY\\t-1\\t329\\t277","ACVR2A\\t_sm7432ofmfV\\tGENE\\tboabbY81fmfT\\t509\\t244","SMAD3\\tgepyfePvfmfz\\tGENE\\tXkk8SKlafmfn\\t514\\t410","TGFBR2\\tDOJnFoHNfmfi\\tGENE\\tfXKkJObYfmfb\\t329\\t311","TGFB ligands\\tgOOpkueqfmfM\\tGENE\\t-1\\t329\\t146","ACVR2\\tboabbY81fmfT\\tFAMILY\\t-1\\t508\\t275","TGFBR1\\tSb4zGrL3fmfe\\tGENE\\tfXKkJObYfmfb\\t329\\t244","Proliferation, stem/progenitor phenotype\\tA7jMDR2Mfmf-\\tPROCESS\\t-1\\t427\\t588","SMAD4\\tOKApI7Qwfmf4\\tGENE\\tXkk8SKlafmfn\\t428\\t483","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","7FzJ455ZfmgP\\tboabbY81fmfT\\tXkk8SKlafmfn\\tACTIVATES\\t","WEH0_CRqfmgL\\tfXKkJObYfmfb\\tXkk8SKlafmfn\\tACTIVATES\\t","hnOBi-Z1fmgI\\tt_Q1Nr-BfmfR\\tboabbY81fmfT\\tACTIVATES\\t","Ax3S1Kd8fmgE\\tgOOpkueqfmfM\\tfXKkJObYfmfb\\tACTIVATES\\t"],"THCA-2014-RTK-RAS-PI(3)K-pathway":["THCA-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","MTOR\\tG9y6ZBee_nmX\\tGENE\\t-1\\t649\\t417\\t","NRAS\\tOjQjq-cc7_5M\\tGENE\\tEOfQTOkE_iLF\\t646\\t25\\t","AKT\\tfi2ldWMn_lnk\\tGENE\\t-1\\t647\\t265\\t","BCL2\\tjwugB2iP_y0Y\\tGENE\\t-1\\t841\\t559\\t","NTR1\\turLIUCXQ70w-\\tGENE\\tKen9wGw8AKU3\\t293\\t-7\\t","RAS\\t1TJ8hV1I_ZR5\\tFAMILY\\t-1\\t374\\t186\\t","RAF\\txSi1Do6v_sYj\\tGENE\\t-1\\t841\\t186\\t","DUSPs\\t7C2rFt7t_fdn\\tGENE\\t-1\\t298\\t524\\t","BRAF\\tpq87LogY_1LI\\tGENE\\t-1\\t1024\\t186\\t","pERK\\tF4o-nfWI_urx\\tGENE\\t-1\\t841\\t344\\t","Apoptosis\\tAoCFeVPVAu6s\\tPROCESS\\t-1\\t841\\t636\\t","BRAF\\tPAsWh9Rz_dco\\tGENE\\t-1\\t167\\t276\\t","HRAS\\tLPvNA7nc7_57\\tGENE\\tEOfQTOkE_iLF\\t804\\t25\\t","NTR\\tKen9wGw8AKU3\\tFAMILY\\t-1\\t371\\t22\\t","BAD\\tUiVUw9Es_x5s\\tGENE\\t-1\\t841\\t489\\t","Cell proliferation/Growth\\ttGen8Qvz_qez\\tPROCESS\\t-1\\t298\\t628\\t","KRAS\\tr0hPxhCH7_5n\\tGENE\\tEOfQTOkE_iLF\\t961\\t25\\t","PI3K\\tK3RfoHn2_kQ2\\tGENE\\t-1\\t647\\t186\\t","pMEK\\tlMJhnvzk_tYZ\\tGENE\\t-1\\t841\\t264\\t","pMEK\\teM1eNr4K_cOi\\tGENE\\t-1\\t298\\t346\\t","p90\\t-6lLHt7R_v9K\\tGENE\\t-1\\t841\\t419\\t","NTR3\\tJtRMUb9N70xa\\tGENE\\tKen9wGw8AKU3\\t378\\t51\\t","Protein synthesis\\tWQ8orp6Y_ouv\\tPROCESS\\t-1\\t649\\t627\\t","RAS\\tEOfQTOkE_iLF\\tFAMILY\\t-1\\t804\\t25\\t","NTR2\\tWK-XNi2970xq\\tGENE\\tKen9wGw8AKU3\\t450\\t-7\\t","RET\\tCDUJn7rL_YRR\\tGENE\\t-1\\t167\\t186\\t","pERK\\tGyr_vYK7_eUm\\tGENE\\t-1\\t298\\t434\\t","RAF\\tEJdSJtPH_amI\\tGENE\\t-1\\t374\\t276\\t","TSC2\\tEhaBKk9-_mvL\\tGENE\\t-1\\t647\\t345\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","HComBP3QBFSr\\txSi1Do6v_sYj\\tlMJhnvzk_tYZ\\tACTIVATES","5ow_H43KBLyc\\tjwugB2iP_y0Y\\tAoCFeVPVAu6s\\tINHIBITS","lafIlqasBaaQ\\tEJdSJtPH_amI\\teM1eNr4K_cOi\\tACTIVATES","pCtfuSydBdaS\\t7C2rFt7t_fdn\\tGyr_vYK7_eUm\\tINHIBITS","YyPlgJXcA__s\\tEhaBKk9-_mvL\\tG9y6ZBee_nmX\\tINHIBITS","iA_J_DZbBefG\\t7C2rFt7t_fdn\\ttGen8Qvz_qez\\tACTIVATES","sJ4XKEpFA6LY\\tKen9wGw8AKU3\\tEOfQTOkE_iLF\\tACTIVATES","8BieawZKA3u7\\tCDUJn7rL_YRR\\t1TJ8hV1I_ZR5\\tACTIVATES","r79uM2_gBZKl\\t1TJ8hV1I_ZR5\\tEJdSJtPH_amI\\tACTIVATES","ACvH-CYzA8yR\\tEOfQTOkE_iLF\\tK3RfoHn2_kQ2\\tACTIVATES","TmRxcbx_Bbb7\\teM1eNr4K_cOi\\tGyr_vYK7_eUm\\tACTIVATES","teHhboSJBVGJ\\tpq87LogY_1LI\\txSi1Do6v_sYj\\tINHIBITS","XmrMteXSBBt-\\tG9y6ZBee_nmX\\tWQ8orp6Y_ouv\\tACTIVATES","hU00JaNWBYJR\\tPAsWh9Rz_dco\\teM1eNr4K_cOi\\tACTIVATES","FXb60wuvBcMi\\tGyr_vYK7_eUm\\t7C2rFt7t_fdn\\tACTIVATES","-iHJfCCVA_Hh\\tfi2ldWMn_lnk\\tEhaBKk9-_mvL\\tACTIVATES","aW6elpjvBKyK\\tUiVUw9Es_x5s\\tjwugB2iP_y0Y\\tINHIBITS","LlJV17wNBHMh\\tlMJhnvzk_tYZ\\tF4o-nfWI_urx\\tACTIVATES","z-CbE5XoBJ5o\\t-6lLHt7R_v9K\\tUiVUw9Es_x5s\\tINHIBITS","F9EcWkHvBUJ2\\tpq87LogY_1LI\\txSi1Do6v_sYj\\tACTIVATES","GqN5v_YIBEbi\\tEOfQTOkE_iLF\\txSi1Do6v_sYj\\tACTIVATES","FWnfRc3YBC44\\t-6lLHt7R_v9K\\tG9y6ZBee_nmX\\tINHIBITS","AV9s-fteA9y7\\tK3RfoHn2_kQ2\\tfi2ldWMn_lnk\\tACTIVATES","3BgREqkhA22-\\tKen9wGw8AKU3\\t1TJ8hV1I_ZR5\\tACTIVATES","r31OK-oJBIby\\tF4o-nfWI_urx\\t-6lLHt7R_v9K\\tACTIVATES"],"TP53":["TP53","","Pathway centered around the regulation of the tumor suppressor TP53, a gene that regulates apoptosis, cell cycle arrest, senescence, and DNA repair.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Cell survival, proliferation\\txDGjGXGMfyG3\\tPROCESS\\t-1\\t133\\t449","CDKN2A\\tgx_YWb90fyGp\\tGENE\\t-1\\t-23\\t235","MDM4\\tsT2W03HDfyGe\\tGENE\\tlK7pvMYZfyGU\\t319\\t127","DNA replication stress\\tYvaYsZcufyHH\\tPROCESS\\t-1\\t597\\t51","RPS6KA3\\tIu0kJKKGfyGM\\tGENE\\t-1\\t597\\t328","MDM2\\tqv-3H9tXfyGZ\\tGENE\\tlK7pvMYZfyGU\\t149\\t127","Senescence, apoptosis\\tIkv91AlOfyG-\\tPROCESS\\t-1\\t325\\t448","\\tlK7pvMYZfyGU\\tFAMILY\\t-1\\t234\\t127","TP53\\tES5FXiJLfyGu\\tGENE\\t-1\\t233\\t328","Oncogenic stress\\tHZxSxJBmfyHE\\tPROCESS\\t-1\\t333\\t222","ATM\\tc4Ad6ZYBfyGx\\tGENE\\t-1\\t597\\t130","CHEK2\\tJvx4WzdtfyGk\\tGENE\\t-1\\t597\\t225","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","8KZq5XsifyHL\\tES5FXiJLfyGu\\txDGjGXGMfyG3\\tINHIBITS\\t","5e5CkdqDfyHg\\tgx_YWb90fyGp\\tES5FXiJLfyGu\\tINHIBITS\\t","WAvkWWubfyHO\\tJvx4WzdtfyGk\\tIu0kJKKGfyGM\\tACTIVATES\\t","wMOYIFFAfyHS\\tgx_YWb90fyGp\\tlK7pvMYZfyGU\\tINHIBITS\\t","Zd519CgjfyHd\\tHZxSxJBmfyHE\\tES5FXiJLfyGu\\tACTIVATES\\t","lFKJrXsmfyHb\\tES5FXiJLfyGu\\tIkv91AlOfyG-\\tACTIVATES\\t","geyskuwAfyHV\\tlK7pvMYZfyGU\\tES5FXiJLfyGu\\tINHIBITS\\t","t-G0U6EJfyHR\\tIu0kJKKGfyGM\\tES5FXiJLfyGu\\tACTIVATES\\t","vNvONKmFfyHj\\tYvaYsZcufyHH\\tc4Ad6ZYBfyGx\\tACTIVATES\\t","25K5WaLwfyHX\\tc4Ad6ZYBfyGx\\tJvx4WzdtfyGk\\tACTIVATES\\t"],"UCEC-2013-RTK-RAS-PI(3)K-pathway":["UCEC-2013-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","RTK\\tZAPqdjSDgCgU\\tFAMILY\\t-1\\t391\\t148\\t","SOX17\\tBXxulVFjgHIs\\tGENE\\t-1\\t227\\t344\\t","KRAS\\t76Wg78V_gDdz\\tGENE\\t-1\\t391\\t260\\t","Proliferation\\tsoh0TxsPgq1P\\tPROCESS\\t-1\\t803\\t409\\t","PTEN\\tQha2pMPigm3R\\tGENE\\t-1\\t1085\\t215\\t","Translation\\t0L6ulMimgteS\\tPROCESS\\t-1\\t1056\\t409\\t","Proliferation\\tMsHCffb6gNY_\\tPROCESS\\t-1\\t391\\t515\\t","CTNNB1\\ti1tsajIagMAh\\tGENE\\t-1\\t391\\t430\\t","PIK3R1\\tOJ-s2c_vgnZa\\tGENE\\t-1\\t1085\\t295\\t","GSK3B\\twXwgUTNkgFnQ\\tGENE\\t-1\\t391\\t344\\t","FBXW7\\t57SvZmLzgKXg\\tGENE\\t-1\\t557\\t344\\t","Cell survival\\tNI-5QJa7gr4W\\tPROCESS\\t-1\\t935\\t409\\t","ERBB2\\tY1idRwsY3N1k\\tGENE\\tZAPqdjSDgCgU\\t469\\t148\\t","PIK3CA\\tsJDwUf9sgpI_\\tGENE\\t-1\\t915\\t256\\t","FGFR2\\tM56YC0J03N1R\\tGENE\\tZAPqdjSDgCgU\\t313\\t148\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","pauS7C64g9TO\\tOJ-s2c_vgnZa\\tsJDwUf9sgpI_\\tINHIBITS","9ZMCIs5Ygf4j\\twXwgUTNkgFnQ\\ti1tsajIagMAh\\tINHIBITS","BXhEIXgdhBkV\\tsJDwUf9sgpI_\\t0L6ulMimgteS\\tACTIVATES","DLrHfIVSgegJ\\t76Wg78V_gDdz\\twXwgUTNkgFnQ\\tINHIBITS","y_ifcFbCgcdH\\tZAPqdjSDgCgU\\t76Wg78V_gDdz\\tACTIVATES","F5LjanELggnD\\tBXxulVFjgHIs\\ti1tsajIagMAh\\tINHIBITS","2-tF8Ncmgiab\\ti1tsajIagMAh\\tMsHCffb6gNY_\\tACTIVATES","tJv0DWt8g-nF\\tsJDwUf9sgpI_\\tsoh0TxsPgq1P\\tACTIVATES","rps45EGCg_aW\\tsJDwUf9sgpI_\\tNI-5QJa7gr4W\\tACTIVATES","w8Id1r73g8Xz\\tQha2pMPigm3R\\tsJDwUf9sgpI_\\tINHIBITS","daN2ajyqghSz\\t57SvZmLzgKXg\\ti1tsajIagMAh\\tINHIBITS"],"WNT":["WNT","","Involved in both development and tissue homeostasis. The canonical Wnt pathway involves signal transduction initiated by Wnt ligand binding to Frizzled family receptors leading to the dysregulation of beta-catenin degradation and ultimately, the induction of transcription via TCF/LEF transcription factors by beta-catenin.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","SFRP3\\tEiQGCkYbf2Ue\\tGENE\\taqCo94T-f2UY\\t214\\t113","DKK\\tRpK5JOBLf2U5\\tFAMILY\\t-1\\t819\\t306","TLE1\\toLjLH1mCf2T6\\tGENE\\tz1BS71lif2T2\\t702\\t625","TLE4\\tUjSaC5Phf2T3\\tGENE\\tz1BS71lif2T2\\t858\\t685","SFRP1\\tLgjBpjM-f2Ux\\tGENE\\taqCo94T-f2UY\\t63\\t147","Groucho\\tz1BS71lif2T2\\tFAMILY\\t-1\\t780\\t655","APC\\tKzWeNNlbf2UJ\\tGENE\\t-1\\t228\\t521","TCF7L1\\tletl9duUf2WR\\tGENE\\tabIO9oDkf2WA\\t341\\t691","WIF1\\t5iL99X9Jf2Tw\\tGENE\\t-1\\t452\\t61","TLE2\\tR0vKN1sif2T9\\tGENE\\tz1BS71lif2T2\\t858\\t625","DKK1\\tDRSXFgEQf2U9\\tGENE\\tRpK5JOBLf2U5\\t739\\t275","TCF7L2\\tRPLZ4osLf2Wb\\tGENE\\tabIO9oDkf2WA\\t499\\t690","AXIN1\\tKq4oChNGf2Vz\\tGENE\\tkoQkppv4f2Vq\\t599\\t443","WNT Dual Receptor Complex\\tqRabkjW8f2VS\\tCOMPLEX\\t-1\\t458\\t304","SFRP2\\thqXcbX1yf2U1\\tGENE\\taqCo94T-f2UY\\t63\\t203","LRP5\\tDK7CkEYCf2Vi\\tGENE\\tqRabkjW8f2VS\\t536\\t276","TCF7\\tpK9uMdhUf2WH\\tGENE\\tabIO9oDkf2WA\\t422\\t632","TLE3\\tmA6zfzOUf2UA\\tGENE\\tz1BS71lif2T2\\t702\\t685","Cell proliferation\\thFWwt8jrf2UV\\tPROCESS\\t-1\\t135\\t667","TCF/LEF\\tabIO9oDkf2WA\\tCOMPLEX\\t-1\\t420\\t661","AXIN\\tkoQkppv4f2Vq\\tFAMILY\\t-1\\t678\\t443","RNF43\\telbyeD9tf2UD\\tGENE\\t-1\\t144\\t303","CTNNB1\\t3GRyWPj8f2UM\\tGENE\\t-1\\t417\\t485","DKK2\\tyYuxYP9Qf2VC\\tGENE\\tRpK5JOBLf2U5\\t899\\t275","FZDs\\tjR_K-66Df2VX\\tGENE\\tqRabkjW8f2VS\\t381\\t301","DKK4\\tlRy7Jj0Nf2VN\\tGENE\\tRpK5JOBLf2U5\\t899\\t337","SFRP\\taqCo94T-f2UY\\tFAMILY\\t-1\\t138\\t169","WNT ligands\\twCThVVjSf2Tz\\tGENE\\t-1\\t452\\t168","LRP6\\tnr8aMEmUf2Vd\\tGENE\\tqRabkjW8f2VS\\t536\\t332","GSK3B\\tmuxig_C-f2UG\\tGENE\\t-1\\t228\\t446","SFRP5\\tB0f2GOAff2Us\\tGENE\\taqCo94T-f2UY\\t214\\t226","AMER1\\tpAChF0thf2US\\tGENE\\t-1\\t599\\t519","SFRP4\\tQMwh9gC-f2Ul\\tGENE\\taqCo94T-f2UY\\t214\\t170","AXIN2\\tpD0TMIi_f2V5\\tGENE\\tkoQkppv4f2Vq\\t758\\t443","DKK3\\twStErGAEf2VH\\tGENE\\tRpK5JOBLf2U5\\t739\\t337","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","XWIzsv56f2Wm\\taqCo94T-f2UY\\twCThVVjSf2Tz\\tINHIBITS\\t","Bps0rTlOf2W1\\tpAChF0thf2US\\t3GRyWPj8f2UM\\tINHIBITS\\t","Bt39Pfi9f2W-\\tqRabkjW8f2VS\\tmuxig_C-f2UG\\tACTIVATES\\t","x3LsoTaTf2Ww\\telbyeD9tf2UD\\tqRabkjW8f2VS\\tINHIBITS\\t","PgNv7XZif2XA\\tmuxig_C-f2UG\\t3GRyWPj8f2UM\\tINHIBITS\\t","-u2h2V6ef2XK\\tabIO9oDkf2WA\\thFWwt8jrf2UV\\tACTIVATES\\t","an6n-VWDf2Wt\\twCThVVjSf2Tz\\tqRabkjW8f2VS\\tACTIVATES\\t","h4-_HrCRf2W4\\tqRabkjW8f2VS\\tkoQkppv4f2Vq\\tACTIVATES\\t","3NL_goRgf2W6\\tkoQkppv4f2Vq\\t3GRyWPj8f2UM\\tINHIBITS\\t","-q76c9PDf2Wy\\tRpK5JOBLf2U5\\tqRabkjW8f2VS\\tINHIBITS\\t","h9BN2IKjf2Wr\\t5iL99X9Jf2Tw\\twCThVVjSf2Tz\\tINHIBITS\\t","rRLoK5NMf2XD\\tKzWeNNlbf2UJ\\t3GRyWPj8f2UM\\tINHIBITS\\t","l7-kESH_f2XH\\tz1BS71lif2T2\\tabIO9oDkf2WA\\tINHIBITS\\t"]}')},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ3cHgiIGhlaWdodD0iNDdweCIgdmlld0JveD0iMCAwIDQ3IDQ3IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NyA0NzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGcgaWQ9IkxheWVyXzFfMTEwXyI+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTE3LjU2NywxNS45MzhsLTIuODU5LTIuNzAyYzAuMzMzLTAuNjA1LDAuNTM5LTEuMjksMC41MzktMi4wMjljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0LTQuMjM5DQoJCQkJYy0yLjM0MywwLTQuMjQzLDEuODk2LTQuMjQzLDQuMjM5YzAsMi4zNDMsMS45LDQuMjQxLDQuMjQzLDQuMjQxYzAuODI2LDAsMS41OS0wLjI0NiwyLjI0Mi0wLjY1NGwyLjg1NSwyLjY5OQ0KCQkJCUMxNi41MzYsMTYuOTIyLDE3LjAyMywxNi4zOTksMTcuNTY3LDE1LjkzOHoiLz4NCgkJCTxwYXRoIGQ9Ik0yOS42NiwxNS42bDMuNzk5LTYuMzkzYzAuMzc0LDAuMTA3LDAuNzYyLDAuMTg0LDEuMTY5LDAuMTg0YzIuMzQ3LDAsNC4yNDQtMS44OTgsNC4yNDQtNC4yNDENCgkJCQljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0NC00LjIzOWMtMi4zNDMsMC00LjIzOSwxLjg5Ni00LjIzOSw0LjIzOWMwLDEuMTYzLDAuNDY5LDIuMjE0LDEuMjI3LDIuOTgxbC0zLjc4Nyw2LjM3NQ0KCQkJCUMyOC40OCwxNC44MDEsMjkuMDk0LDE1LjE2OSwyOS42NiwxNS42eiIvPg0KCQkJPHBhdGggZD0iTTQyLjc2MiwyMC45NTJjLTEuODI0LDAtMy4zNjksMS4xNTktMy45NjgsMi43NzVsLTUuMjc4LTAuNTIxYzAsMC4wNCwwLjAwNiwwLjA3OCwwLjAwNiwwLjExNw0KCQkJCWMwLDAuNjg4LTAuMDc2LDEuMzYtMC4yMTMsMi4wMDlsNS4yNzYsMC41MjFjMC4zMTksMi4wMjQsMi4wNjIsMy41NzYsNC4xNzcsMy41NzZjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzOA0KCQkJCUM0NywyMi44NSw0NS4xMDQsMjAuOTUyLDQyLjc2MiwyMC45NTJ6Ii8+DQoJCQk8cGF0aCBkPSJNMjguMTk3LDM3LjYyNGwtMS4xOC01LjE1NmMtMC42NjYsMC4yMzItMS4zNTksMC4zOTgtMi4wODIsMC40ODFsMS4xODIsNS4xNTdjLTEuMzU1LDAuNzA5LTIuMjksMi4xMS0yLjI5LDMuNzQ2DQoJCQkJYzAsMi4zNDIsMS44OTYsNC4yMzcsNC4yNDMsNC4yMzdjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzN0MzMi4zMTEsMzkuNTUzLDMwLjQ3OSwzNy42OTIsMjguMTk3LDM3LjYyNHoiLz4NCgkJCTxwYXRoIGQ9Ik0xNC4zNTcsMjUuMzdsLTYuNTcsMi4yMDFjLTAuNzU4LTEuMTU4LTIuMDYzLTEuOTI2LTMuNTQ4LTEuOTI2QzEuODk2LDI1LjY0NSwwLDI3LjU0MiwwLDI5Ljg4NA0KCQkJCWMwLDIuMzQ1LDEuODk2LDQuMjQyLDQuMjM5LDQuMjQyYzIuMzQxLDAsNC4yNDItMS44OTcsNC4yNDItNC4yNDJjMC0wLjA5OC0wLjAyMS0wLjE4OC0wLjAyOS0wLjI4NGw2LjU5MS0yLjIwNw0KCQkJCUMxNC43NDYsMjYuNzUyLDE0LjUxLDI2LjA3NywxNC4zNTcsMjUuMzd6Ii8+DQoJCQk8Y2lyY2xlIGN4PSIyMy44MyIgY3k9IjIzLjMyMyIgcj0iNy4yNzEiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports=require("react-toastify")},function(t,e){t.exports=require("oncoprintjs")},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU1MC44MDFweCIgaGVpZ2h0PSI1NTAuODAxcHgiIHZpZXdCb3g9IjAgMCA1NTAuODAxIDU1MC44MDEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU1MC44MDEgNTUwLjgwMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTE0Ni43NDcsMjc2LjcwOGMwLTEzLjk5OC05LjcxMS0yMi4zNTItMjYuODg3LTIyLjM1MmMtNi45OSwwLTExLjcyNiwwLjY3NS0xNC4yMDQsMS4zNTV2NDQuOTI3DQoJCWMyLjkzMiwwLjY3Niw2LjUzOSwwLjg5NiwxMS41MiwwLjg5NkMxMzUuNDQ5LDMwMS41NDYsMTQ2Ljc0NywyOTIuMjgsMTQ2Ljc0NywyNzYuNzA4eiIvPg0KCTxwYXRoIGQ9Ik00ODguNDI2LDE5Ny4wMTlINDc1LjJ2LTYzLjgxNmMwLTAuMzk4LTAuMDYzLTAuNzk5LTAuMTE2LTEuMjAyYy0wLjAyMS0yLjUzNC0wLjgyNy01LjAyMy0yLjU2Mi02Ljk5NUwzNjYuMzI1LDMuNjk0DQoJCWMtMC4wMzItMC4wMzEtMC4wNjMtMC4wNDItMC4wODUtMC4wNzZjLTAuNjMzLTAuNzA3LTEuMzcxLTEuMjk1LTIuMTUxLTEuODA0Yy0wLjIzMS0wLjE1NS0wLjQ2NC0wLjI4NS0wLjcwNi0wLjQxOQ0KCQljLTAuNjc2LTAuMzY5LTEuMzkzLTAuNjc1LTIuMTMxLTAuODk2Yy0wLjItMC4wNTYtMC4zOC0wLjEzOC0wLjU4LTAuMTlDMzU5Ljg3LDAuMTE5LDM1OS4wMzcsMCwzNTguMTkzLDBIOTcuMg0KCQljLTExLjkxOCwwLTIxLjYsOS42OTMtMjEuNiwyMS42MDF2MTc1LjQxM0g2Mi4zNzdjLTE3LjA0OSwwLTMwLjg3MywxMy44MTgtMzAuODczLDMwLjg3M3YxNjAuNTQ1DQoJCWMwLDE3LjA0MywxMy44MjQsMzAuODcsMzAuODczLDMwLjg3aDEzLjIyNFY1MjkuMmMwLDExLjkwNyw5LjY4MiwyMS42MDEsMjEuNiwyMS42MDFoMzU2LjRjMTEuOTA3LDAsMjEuNi05LjY5MywyMS42LTIxLjYwMQ0KCQlWNDE5LjMwMmgxMy4yMjZjMTcuMDQ0LDAsMzAuODcxLTEzLjgyNywzMC44NzEtMzAuODd2LTE2MC41NEM1MTkuMjk3LDIxMC44MzgsNTA1LjQ3LDE5Ny4wMTksNDg4LjQyNiwxOTcuMDE5eiBNOTcuMiwyMS42MDUNCgkJaDI1MC4xOTN2MTEwLjUxM2MwLDUuOTY3LDQuODQxLDEwLjgsMTAuOCwxMC44aDk1LjQwN3Y1NC4xMDhIOTcuMlYyMS42MDV6IE0yMzQuMzQ0LDMzNS44NnY0NS44MzFoLTMxLjYwMVYyMjkuNTI0aDQwLjE4NA0KCQlsMzEuNjExLDU1Ljc1OWM5LjAyNSwxNi4wMzEsMTguMDY0LDM0Ljk4MywyNC44MjUsNTIuMTU0aDAuNjc1Yy0yLjI1Ny0yMC4xMDMtMi45MzMtNDAuNjQzLTIuOTMzLTYzLjQ0di00NC40NzNoMzEuNjE0djE1Mi4xNjcNCgkJaC0zNi4xMTdsLTMyLjUxNi01OC43MDNjLTkuMDQ5LTE2LjI1My0xOC45NzEtMzUuODkyLTI2LjQzOC01My43MjdsLTAuNjY1LDAuMjIyQzIzMy45MDYsMjg5LjU4LDIzNC4zNDQsMzExLjAyNywyMzQuMzQ0LDMzNS44NnoNCgkJIE03MS41NTYsMzgxLjY5MVYyMzEuNTZjMTAuNjEzLTEuODA0LDI1LjUxNi0zLjE1OSw0Ni41MDYtMy4xNTljMjEuMjE1LDAsMzYuMzUzLDQuMDYxLDQ2LjUwOSwxMi4xOTINCgkJYzkuNjk4LDcuNjczLDE2LjI1NSwyMC4zMTMsMTYuMjU1LDM1LjIxOWMwLDE0Ljg5Ny00Ljk1OSwyNy41NDktMTMuOTk5LDM2LjEyM2MtMTEuNzM4LDExLjA2My0yOS4xMjMsMTYuMDMxLTQ5LjQ0MSwxNi4wMzENCgkJYy00LjUyMiwwLTguNTkzLTAuMjMxLTExLjczNi0wLjY3NXY1NC40MTFINzEuNTU2VjM4MS42OTF6IE00NTMuNjAxLDUyMy4zNTNIOTcuMlY0MTkuMzAyaDM1Ni40VjUyMy4zNTN6IE00ODUuNjUyLDM3NC42ODgNCgkJYy0xMC42MSwzLjYwNy0zMC43MTMsOC41ODUtNTAuODA1LDguNTg1Yy0yNy43NTksMC00Ny44NzItNy4wMDMtNjEuODU3LTIwLjU0NWMtMTMuOTk1LTEzLjEtMjEuNjg0LTMyLjk3LTIxLjQ1Mi01NS4zMTgNCgkJYzAuMjIyLTUwLjU2OSwzNy4wMy03OS40NjMsODYuOTE3LTc5LjQ2M2MxOS42NDQsMCwzNC43ODMsMy44MjksNDIuMjE5LDcuNDQ2bC03LjIxNCwyNy41NDNjLTguMzY5LTMuNjE3LTE4Ljc1Mi02LjU1LTM1LjQ1OC02LjU1DQoJCWMtMjguNjU2LDAtNTAuMzQxLDE2LjI1Ni01MC4zNDEsNDkuMjJjMCwzMS4zODIsMTkuNjQ5LDQ5Ljg5Miw0Ny44NzIsNDkuODkyYzcuODk1LDAsMTQuMjE4LTAuOTAxLDE2LjkzNC0yLjI1N3YtMzEuODM1aC0yMy40OTMNCgkJdi0yNi44NjloNTYuNjc5VjM3NC42ODh6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU1MC44MDFweCIgaGVpZ2h0PSI1NTAuODAxcHgiIHZpZXdCb3g9IjAgMCA1NTAuODAxIDU1MC44MDEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU1MC44MDEgNTUwLjgwMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ4OC40MjYsMTk3LjAxOUg0NzUuMnYtNjMuODE2YzAtMC4zOTgtMC4wNjMtMC43OTktMC4xMTYtMS4yMDJjLTAuMDIxLTIuNTM0LTAuODI3LTUuMDIzLTIuNTYyLTYuOTk1TDM2Ni4zMjUsMy42OTQNCgkJYy0wLjAzMi0wLjAzMS0wLjA2My0wLjA0Mi0wLjA4NS0wLjA3NmMtMC42MzMtMC43MDctMS4zNzEtMS4yOTUtMi4xNTEtMS44MDRjLTAuMjMxLTAuMTU1LTAuNDY0LTAuMjg1LTAuNzA2LTAuNDE5DQoJCWMtMC42NzYtMC4zNjktMS4zOTMtMC42NzUtMi4xMzEtMC44OTZjLTAuMi0wLjA1Ni0wLjM4LTAuMTM4LTAuNTgtMC4xOUMzNTkuODcsMC4xMTksMzU5LjAzNywwLDM1OC4xOTMsMEg5Ny4yDQoJCWMtMTEuOTE4LDAtMjEuNiw5LjY5My0yMS42LDIxLjYwMXYxNzUuNDEzSDYyLjM3N2MtMTcuMDQ5LDAtMzAuODczLDEzLjgxOC0zMC44NzMsMzAuODczdjE2MC41NDUNCgkJYzAsMTcuMDQzLDEzLjgyNCwzMC44NywzMC44NzMsMzAuODdoMTMuMjI0VjUyOS4yYzAsMTEuOTA3LDkuNjgyLDIxLjYwMSwyMS42LDIxLjYwMWgzNTYuNGMxMS45MDcsMCwyMS42LTkuNjkzLDIxLjYtMjEuNjAxDQoJCVY0MTkuMzAyaDEzLjIyNmMxNy4wNDQsMCwzMC44NzEtMTMuODI3LDMwLjg3MS0zMC44N3YtMTYwLjU0QzUxOS4yOTcsMjEwLjgzOCw1MDUuNDcsMTk3LjAxOSw0ODguNDI2LDE5Ny4wMTl6IE05Ny4yLDIxLjYwNQ0KCQloMjUwLjE5M3YxMTAuNTEzYzAsNS45NjcsNC44NDEsMTAuOCwxMC44LDEwLjhoOTUuNDA3djU0LjEwOEg5Ny4yVjIxLjYwNXogTTMzOC44NzEsMjI1LjY3MkwyODQuNTQ1LDM4Ni45NmgtNDIuNTkxDQoJCWwtNTEuNjktMTYxLjI4OGgzOS45NjdsMTkuNjE3LDY4LjE5NmM1LjUwOCwxOS4xNDMsMTAuNTMxLDM3LjU2NywxNC4zNiw1Ny42N2gwLjcxN2M0LjA2MS0xOS4zODUsOS4wODktMzguNTI3LDE0LjU5Mi01Ni45NTMNCgkJbDIwLjU4NS02OC45MThoMzguNzdWMjI1LjY3MnogTTY4LjQ1OCwzNzkuNTRsNy40MTUtMzAuMTUzYzkuODExLDUuMDIxLDI0Ljg4OCwxMC4wNTEsNDAuNDM5LDEwLjA1MQ0KCQljMTYuNzUxLDAsMjUuNjA3LTYuOTM1LDI1LjYwNy0xNy40NjVjMC0xMC4wNTItNy42NjItMTUuNzk1LTI3LjA1LTIyLjczNGMtMjYuOC05LjMyOC00NC4yNjMtMjQuMTY4LTQ0LjI2My00Ny42MTENCgkJYzAtMjcuNTI0LDIyLjk3MS00OC41NzksNjEuMDE0LTQ4LjU3OWMxOC4xODgsMCwzMS41OTEsMy44MjMsNDEuMTU5LDguMTMxbC04LjEyNiwyOS40MzdjLTYuNDY1LTMuMTE2LTE3Ljk0NS03LjY1Ny0zMy43NDUtNy42NTcNCgkJYy0xNS43OTEsMC0yMy40NTQsNy4xODMtMjMuNDU0LDE1LjU1MmMwLDEwLjI5Niw5LjA4OSwxNC44NDIsMjkuOTE3LDIyLjczMWMyOC40NjgsMTAuNTM2LDQxLjg3MSwyNS4zNjUsNDEuODcxLDQ4LjA5NA0KCQljMCwyNy4wNDItMjAuODEyLDUwLjAxMy02NS4wOSw1MC4wMTNDOTUuNzMxLDM4OS4zNDksNzcuNTM4LDM4NC41NzEsNjguNDU4LDM3OS41NHogTTQ1My42MDEsNTIzLjM1M0g5Ny4yVjQxOS4zMDJoMzU2LjRWNTIzLjM1M3oNCgkJIE00ODguOTExLDM3OS41NGMtMTEuMjQzLDMuODIzLTMyLjUzNyw5LjEwMy01My44MzEsOS4xMDNjLTI5LjQzNywwLTUwLjczLTcuNDI2LTY1LjU3LTIxLjc3OQ0KCQljLTE0LjgzOS0xMy44NzUtMjIuOTcxLTM0Ljk0Mi0yMi43MzgtNTguNjI1YzAuMjUzLTUzLjYwNCwzOS4yNTUtODQuMjM1LDkyLjEzNy04NC4yMzVjMjAuODEsMCwzNi44NTIsNC4wNzMsNDQuNzQsNy44OTYNCgkJbC03LjY1NywyOS4yMDJjLTguODU5LTMuODI5LTE5Ljg0OS02Ljk1LTM3LjU2Ny02Ljk1Yy0zMC4zOTYsMC01My4zNTcsMTcuMjMzLTUzLjM1Nyw1Mi4xNzNjMCwzMy4yNjUsMjAuODEsNTIuODgyLDUwLjczLDUyLjg4Mg0KCQljOC4zNzUsMCwxNS4wNzItMC45NiwxNy45NC0yLjM5NXYtMzMuNzQ1aC0yNC44NzV2LTI4LjQ3MWg2MC4wNDlWMzc5LjU0TDQ4OC45MTEsMzc5LjU0eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports=require("tippy.js")},function(t,e){t.exports=require("file-saver")},function(t,e,a){},function(t,e){t.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZWRpdCI+PHBhdGggZD0iTTExIDRINGEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyI+PC9wYXRoPjxwYXRoIGQ9Ik0xOC41IDIuNWEyLjEyMSAyLjEyMSAwIDAgMSAzIDNMMTIgMTVsLTQgMSAxLTQgOS41LTkuNXoiPjwvcGF0aD48L3N2Zz4="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMjMuNjI1IDIzLjYyNSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjMuNjI1IDIzLjYyNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzAzMDEwNDsiIGQ9Ik0xMS44MTIsMEM1LjI4OSwwLDAsNS4yODksMCwxMS44MTJzNS4yODksMTEuODEzLDExLjgxMiwxMS44MTNzMTEuODEzLTUuMjksMTEuODEzLTExLjgxMw0KCQlTMTguMzM1LDAsMTEuODEyLDB6IE0xNC4yNzEsMTguMzA3Yy0wLjYwOCwwLjI0LTEuMDkyLDAuNDIyLTEuNDU1LDAuNTQ4Yy0wLjM2MiwwLjEyNi0wLjc4MywwLjE4OS0xLjI2MiwwLjE4OQ0KCQljLTAuNzM2LDAtMS4zMDktMC4xOC0xLjcxNy0wLjUzOXMtMC42MTEtMC44MTQtMC42MTEtMS4zNjdjMC0wLjIxNSwwLjAxNS0wLjQzNSwwLjA0NS0wLjY1OWMwLjAzMS0wLjIyNCwwLjA4LTAuNDc2LDAuMTQ3LTAuNzU5DQoJCWwwLjc2MS0yLjY4OGMwLjA2Ny0wLjI1OCwwLjEyNS0wLjUwMywwLjE3MS0wLjczMWMwLjA0Ni0wLjIzLDAuMDY4LTAuNDQxLDAuMDY4LTAuNjMzYzAtMC4zNDItMC4wNzEtMC41ODItMC4yMTItMC43MTcNCgkJYy0wLjE0My0wLjEzNS0wLjQxMi0wLjIwMS0wLjgxMy0wLjIwMWMtMC4xOTYsMC0wLjM5OCwwLjAyOS0wLjYwNSwwLjA5Yy0wLjIwNSwwLjA2My0wLjM4MywwLjEyLTAuNTI5LDAuMTc2bDAuMjAxLTAuODI4DQoJCWMwLjQ5OC0wLjIwMywwLjk3NS0wLjM3NywxLjQzLTAuNTIxYzAuNDU1LTAuMTQ2LDAuODg1LTAuMjE4LDEuMjktMC4yMThjMC43MzEsMCwxLjI5NSwwLjE3OCwxLjY5MiwwLjUzDQoJCWMwLjM5NSwwLjM1MywwLjU5NCwwLjgxMiwwLjU5NCwxLjM3NmMwLDAuMTE3LTAuMDE0LDAuMzIzLTAuMDQxLDAuNjE3Yy0wLjAyNywwLjI5NS0wLjA3OCwwLjU2NC0wLjE1MiwwLjgxMWwtMC43NTcsMi42OA0KCQljLTAuMDYyLDAuMjE1LTAuMTE3LDAuNDYxLTAuMTY3LDAuNzM2Yy0wLjA0OSwwLjI3NS0wLjA3MywwLjQ4NS0wLjA3MywwLjYyNmMwLDAuMzU2LDAuMDc5LDAuNTk5LDAuMjM5LDAuNzI4DQoJCWMwLjE1OCwwLjEyOSwwLjQzNSwwLjE5NCwwLjgyNywwLjE5NGMwLjE4NSwwLDAuMzkyLTAuMDMzLDAuNjI2LTAuMDk3YzAuMjMyLTAuMDY0LDAuNC0wLjEyMSwwLjUwNi0wLjE3TDE0LjI3MSwxOC4zMDd6DQoJCSBNMTQuMTM3LDcuNDI5Yy0wLjM1MywwLjMyOC0wLjc3OCwwLjQ5Mi0xLjI3NSwwLjQ5MmMtMC40OTYsMC0wLjkyNC0wLjE2NC0xLjI4LTAuNDkyYy0wLjM1NC0wLjMyOC0wLjUzMy0wLjcyNy0wLjUzMy0xLjE5Mw0KCQljMC0wLjQ2NSwwLjE4LTAuODY1LDAuNTMzLTEuMTk2YzAuMzU2LTAuMzMyLDAuNzg0LTAuNDk3LDEuMjgtMC40OTdjMC40OTcsMCwwLjkyMywwLjE2NSwxLjI3NSwwLjQ5Nw0KCQljMC4zNTMsMC4zMzEsMC41MywwLjczMSwwLjUzLDEuMTk2QzE0LjY2Nyw2LjcwMywxNC40OSw3LjEwMSwxNC4xMzcsNy40Mjl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDU3IDU3Ig0KICAgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTcgNTc7Ig0KICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImFkZC1zZWxlY3RlZC1uZXcuc3ZnIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSI+PG1ldGFkYXRhDQogICBpZD0ibWV0YWRhdGE0NyI+PHJkZjpSREY+PGNjOldvcmsNCiAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICBpZD0iZGVmczQ1Ij4NCgkNCgkNCgkNCgkNCjwvZGVmcz48c29kaXBvZGk6bmFtZWR2aWV3DQogICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgZ3JpZHRvbGVyYW5jZT0iMTAiDQogICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEwOTciDQogICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI3MTkiDQogICBpZD0ibmFtZWR2aWV3NDMiDQogICBzaG93Z3JpZD0iZmFsc2UiDQogICBpbmtzY2FwZTp6b29tPSI0LjE0MDM1MDkiDQogICBpbmtzY2FwZTpjeD0iLTEwLjc0Nzg4MSINCiAgIGlua3NjYXBlOmN5PSIyOC41Ig0KICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICBpbmtzY2FwZTp3aW5kb3cteT0iMCINCiAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiDQogICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+DQo8cGF0aA0KICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgIGlkPSJwYXRoMiINCiAgIGQ9Ik0gMjguNjYsNiBIIDkuMzQgQyA3LjQ5OCw2IDYsNy40OTggNiw5LjM0IFYgMjguNjYgQyA2LDMwLjUwMiA3LjQ5OCwzMiA5LjM0LDMyIEggMjguNjYgQyAzMC41MDIsMzIgMzIsMzAuNTAyIDMyLDI4LjY2IFYgOS4zNCBDIDMyLDcuNDk4IDMwLjUwMiw2IDI4LjY2LDYgWiIgLz48cGF0aA0KICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgIGlkPSJwYXRoOCINCiAgIGQ9Ik0gNTEsMzcgSCA0MSBWIDI3IGMgMCwtMS4xMDQgLTAuODk2LC0yIC0yLC0yIC0xLjEwNCwwIC0yLDAuODk2IC0yLDIgViAzNyBIIDI3IGMgLTEuMTA0LDAgLTIsMC44OTYgLTIsMiAwLDEuMTA0IDAuODk2LDIgMiwyIGggMTAgdiAxMCBjIDAsMS4xMDQgMC44OTYsMiAyLDIgMS4xMDQsMCAyLC0wLjg5NiAyLC0yIFYgNDEgaCAxMCBjIDEuMTA0LDAgMiwtMC44OTYgMiwtMiAwLC0xLjEwNCAtMC44OTYsLTIgLTIsLTIgeiIgLz4NCjxnDQogICBpZD0iZzEyIj4NCjwvZz4NCjxnDQogICBpZD0iZzE0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzE2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzE4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzIwIj4NCjwvZz4NCjxnDQogICBpZD0iZzIyIj4NCjwvZz4NCjxnDQogICBpZD0iZzI0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzI2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzI4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzMwIj4NCjwvZz4NCjxnDQogICBpZD0iZzMyIj4NCjwvZz4NCjxnDQogICBpZD0iZzM0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzM2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzM4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzQwIj4NCjwvZz4NCjwvc3ZnPg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTcgNTciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU3IDU3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNMjIuNjYsMEgzLjM0QzEuNDk4LDAsMCwxLjQ5OCwwLDMuMzR2MTkuMzJDMCwyNC41MDIsMS40OTgsMjYsMy4zNCwyNmgxOS4zMmMxLjg0MiwwLDMuMzQtMS40OTgsMy4zNC0zLjM0VjMuMzQNCgkJQzI2LDEuNDk4LDI0LjUwMiwwLDIyLjY2LDB6Ii8+DQoJPHBhdGggZD0iTTMzLjM0LDI2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMy4zNEM1NiwxLjQ5OCw1NC41MDIsMCw1Mi42NiwwSDMzLjM0QzMxLjQ5OCwwLDMwLDEuNDk4LDMwLDMuMzR2MTkuMzINCgkJQzMwLDI0LjUwMiwzMS40OTgsMjYsMzMuMzQsMjZ6Ii8+DQoJPHBhdGggZD0iTTIyLjY2LDMwSDMuMzRDMS40OTgsMzAsMCwzMS40OTgsMCwzMy4zNHYxOS4zMkMwLDU0LjUwMiwxLjQ5OCw1NiwzLjM0LDU2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMzMuMzQNCgkJQzI2LDMxLjQ5OCwyNC41MDIsMzAsMjIuNjYsMzB6Ii8+DQoJPHBhdGggZD0iTTU1LDQxSDQ1VjMxYzAtMS4xMDQtMC44OTYtMi0yLTJzLTIsMC44OTYtMiwydjEwSDMxYy0xLjEwNCwwLTIsMC44OTYtMiwyczAuODk2LDIsMiwyaDEwdjEwYzAsMS4xMDQsMC44OTYsMiwyLDINCgkJczItMC44OTYsMi0yVjQ1aDEwYzEuMTA0LDAsMi0wLjg5NiwyLTJTNTYuMTA0LDQxLDU1LDQxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports=require("tippy.js/dist/tippy.css")},function(t,e){t.exports=require("react-tooltip")},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTM1LjQzNiwwSDcuNzU1djYzLjk1MmgyNy42ODJMMzUuNDM2LDBMMzUuNDM2LDB6IE0zMi41NzMsNjEuMDg5SDEwLjYxOFYyLjg2M2gyMS45NTVWNjEuMDg5eiBNNzAuMjc0LDI2LjQ4OGgtMjcuNjgNCgkJdjM3LjQ2NGgyNy42ODJWMjYuNDg4SDcwLjI3NHogTTY3LjQxMiw2MS4wODlINDUuNDU3VjI5LjM1MWgyMS45NTVWNjEuMDg5eiBNNzQuNTcxLDcwLjM5NXY1LjAxMkgwLjgzNXYtNS4wMTJINzQuNTcxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjkwLjk1NnB4IiBoZWlnaHQ9IjkwLjk1N3B4IiB2aWV3Qm94PSIwIDAgOTAuOTU2IDkwLjk1NyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgOTAuOTU2IDkwLjk1NzsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQxLjY2MSwxMy41MDFIMTMuOTc5djYzLjk1M2gyNy42ODJWMTMuNTAxeiBNMzguNzk3LDc0LjU5MUgxNi44NDJWMTYuMzY2aDIxLjk1NVY3NC41OTF6IE03Ni40OTksMjYuNzQ3SDQ4LjgxOHYzNy40NjUNCgkJSDc2LjVMNzYuNDk5LDI2Ljc0N0w3Ni40OTksMjYuNzQ3eiBNNzMuNjM3LDYxLjM0N0g1MS42ODJWMjkuNjA5aDIxLjk1NVY2MS4zNDd6IE0xMC45NzgsNDIuOTczdjUuMDExSDB2LTUuMDExSDEwLjk3OHoNCgkJIE05MC45NTYsNDIuOTczdjUuMDExSDc5Ljk3OXYtNS4wMTFIOTAuOTU2eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTM1LjQzNiwxMS40NTRINy43NTV2NjMuOTUyaDI3LjY4MkwzNS40MzYsMTEuNDU0TDM1LjQzNiwxMS40NTR6IE0zMi41NzMsNzIuNTQzSDEwLjYxOFYxNC4zMTdoMjEuOTU1VjcyLjU0M3oNCgkJIE03MC4yNzQsMTEuNDU0aC0yNy42OHYzNy40NjRoMjcuNjgyVjExLjQ1NEg3MC4yNzR6IE02Ny40MTIsNDYuMDU1SDQ1LjQ1N1YxNC4zMTdoMjEuOTU1VjQ2LjA1NXogTTAuODM1LDUuMDExVjBoNzMuNzM2djUuMDExDQoJCUgwLjgzNXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjkwLjk1NnB4IiBoZWlnaHQ9IjkwLjk1NnB4IiB2aWV3Qm94PSIwIDAgOTAuOTU2IDkwLjk1NiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgOTAuOTU2IDkwLjk1NjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTc3LjQ1NCw0MS42NjFWMTMuOTc5SDEzLjUwMnYyNy42ODJINzcuNDU0eiBNMTYuMzY1LDM4Ljc5N1YxNi44NDJoNTguMjI2djIxLjk1NUgxNi4zNjV6IE02NC4yMSw3Ni40OTlWNDguODE4SDI2Ljc0Ng0KCQlWNzYuNUw2NC4yMSw3Ni40OTlMNjQuMjEsNzYuNDk5eiBNMjkuNjA5LDczLjYzN1Y1MS42ODJoMzEuNzM3djIxLjk1NUgyOS42MDl6IE00Ny45ODIsMTAuOTc4aC01LjAxVjBoNS4wMVYxMC45Nzh6DQoJCSBNNDcuOTgyLDkwLjk1NmgtNS4wMVY3OS45NzloNS4wMVY5MC45NTZ6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTc1LjQwNiwzNS40MzZWNy43NTVIMTEuNDU0djI3LjY4Mkw3NS40MDYsMzUuNDM2TDc1LjQwNiwzNS40MzZ6IE0xNC4zMTcsMzIuNTczVjEwLjYxOGg1OC4yMjZ2MjEuOTU1SDE0LjMxN3oNCgkJIE00OC45MTgsNzAuMjc1VjQyLjU5NUgxMS40NTR2MjcuNjgyTDQ4LjkxOCw3MC4yNzVMNDguOTE4LDcwLjI3NXogTTE0LjMxNyw2Ny40MTJWNDUuNDU3aDMxLjczOHYyMS45NTVIMTQuMzE3eiBNNS4wMTEsNzQuNTcxSDANCgkJVjAuODM1aDUuMDExVjc0LjU3MXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTYzLjk1MiwzNS40MzZWNy43NTVIMHYyNy42ODJMNjMuOTUyLDM1LjQzNkw2My45NTIsMzUuNDM2eiBNMi44NjMsMzIuNTczVjEwLjYxOEg2MS4wOXYyMS45NTVIMi44NjN6IE02My45NTIsNzAuMjc1DQoJCVY0Mi41OTVIMjYuNDg4djI3LjY4Mkw2My45NTIsNzAuMjc1TDYzLjk1Miw3MC4yNzV6IE0yOS4zNTEsNjcuNDEyVjQ1LjQ1N2gzMS43Mzd2MjEuOTU1SDI5LjM1MXogTTcwLjM5NSwwLjgzNWg1LjAxMnY3My43MzYNCgkJaC01LjAxMlYwLjgzNXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMS4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDYxMiA2MTIiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA2MTIgNjEyOyINCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImRlbGV0ZS1zaW1wbGUuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDMiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnM0MSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlkPSJuYW1lZHZpZXczOSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciDQogICAgIGlua3NjYXBlOmN4PSIyOTUuMDM0MDgiDQogICAgIGlua3NjYXBlOmN5PSIzMzAuODU0NDgiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9Imc1Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Nzg4MTM1LDAsMCwwLjk5Nzg4MTM1LDEuNzMwNDAxMiwwLjkyMzcyODQ3KSI+PHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNyINCiAgICAgICBkPSJNIDU4Ny44MjYsMTg2Ljk2NiBDIDU3MS43MSwxNDkuNjM0IDU0OS44ODIsMTE3LjE5OCA1MjIuMzQyLDg5LjY1OCA0OTQuODAyLDYyLjExOCA0NjIuMzY2LDQwLjI5IDQyNS4wMzQsMjQuMTc0IDM4Ny43MDIsOC4wNTggMzQ4LjAyNCwwIDMwNiwwIDI3Ny44NDgsMCAyNTAuNzE2LDMuNjcyIDIyNC42MDQsMTEuMDE2IDE5OC40OTIsMTguMzYgMTc0LjExNCwyOC42NjIgMTUxLjQ3LDQxLjkyMiAxMjguODI2LDU1LjE4MiAxMDguMjIyLDcxLjA5NCA4OS42NTgsODkuNjU4IDcxLjA5NCwxMDguMjIyIDU1LjE4MiwxMjguODI2IDQxLjkyMiwxNTEuNDcgMjguNjYyLDE3NC4xMTYgMTguMzYsMTk4LjQ5MiAxMS4wMTYsMjI0LjYwNCAzLjY3MiwyNTAuNzE2IDAsMjc3Ljg0OCAwLDMwNiBjIDAsMjguMTUyIDMuNjcyLDU1LjI4NCAxMS4wMTYsODEuMzk2IDcuMzQ0LDI2LjExIDE3LjY0Niw1MC40ODcgMzAuOTA2LDczLjEzNCAxMy4yNiwyMi42NDQgMjkuMTcyLDQzLjI0OSA0Ny43MzYsNjEuODEyIDE4LjU2NCwxOC41NjQgMzkuMTY4LDM0LjQ3OCA2MS44MTIsNDcuNzM2IDIyLjY0NCwxMy4yNiA0Ny4wMjIsMjMuNTYxIDczLjEzNCwzMC45MDYgQyAyNTAuNzE2LDYwOC4zMjggMjc3Ljg0OCw2MTIgMzA2LDYxMiBjIDI4LjE1MiwwIDU1LjI4NCwtMy42NzIgODEuMzk2LC0xMS4wMTYgMjYuMTExLC03LjM0NiA1MC40ODgsLTE3LjY0NiA3My4xMzUsLTMwLjkwNiAyMi42NDQsLTEzLjI1OSA0My4yNDksLTI5LjE3MiA2MS44MTIsLTQ3LjczNiAxOC41NjQsLTE4LjU2MyAzNC40NzgsLTM5LjE2OCA0Ny43MzYsLTYxLjgxMiAxMy4yNiwtMjIuNjQ2IDIzLjU2MSwtNDcuMDIzIDMwLjkwNiwtNzMuMTM1IEMgNjA4LjMyOCwzNjEuMjg0IDYxMiwzMzQuMTUyIDYxMiwzMDYgNjEyLDI2My45NzYgNjAzLjk0MiwyMjQuMjk4IDU4Ny44MjYsMTg2Ljk2NiBaIE0gNDY4LjE4LDM5MS42OCBjIDIuMDQsMi4wNCAzLjA2Myw0LjI4NCAzLjA2Myw2LjczMiAwLDIuNDQ4IC0xLjAyMSw0LjQ4OCAtMy4wNjMsNi4xMiBsIC01OS45NzYsNjAuNTg4IGMgLTEuNjMxLDEuNjMyIC0zLjg3NiwyLjQ0OCAtNi43MzIsMi40NDggLTIuODU0LDAgLTQuODk1LC0wLjgxNiAtNi4xMiwtMi40NDggTCAzMDkuMDYsMzc4LjgyOCAyMjMuMzgsNDY1LjEyIGMgLTIuNDQ4LDEuNjMyIC00LjY5MiwyLjQ0OCAtNi43MzIsMi40NDggLTEuNjMyLDAgLTMuNjcyLC0wLjgxNiAtNi4xMiwtMi40NDggbCAtNTkuOTc2LC02MC41ODggYyAtMi4wNCwtMS4yMjYgLTMuMDYsLTMuMjY3IC0zLjA2LC02LjEyIDAsLTIuNDQ4IDEuMDIsLTQuNjkyIDMuMDYsLTYuNzMyIGwgODUuNjgsLTg1LjY4IC04NS42OCwtODUuNjggYyAtMi4wNCwtMi4wNCAtMy4wNiwtNC4yODQgLTMuMDYsLTYuNzMyIDAsLTIuODU2IDEuMDIsLTQuODk2IDMuMDYsLTYuMTIgbCA1OS45NzYsLTYwLjU4OCBjIDEuNjMyLC0xLjYzMiAzLjY3MiwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDg1LjY4LDg2LjI5MiA4Ni4yOTIsLTg2LjI5MiBjIDEuNjM1LC0xLjYzMiAzLjY3NSwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDU5Ljk3Niw2MC41ODggYyAyLjA0LDEuNjMyIDMuMDYzLDMuNjcyIDMuMDYzLDYuMTIgMCwyLjQ0OCAtMS4wMjEsNC42OTIgLTMuMDYzLDYuNzMyIEwgMzgyLjUsMzA2IGwgODUuNjgsODUuNjggeiINCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48Zw0KICAgICBpZD0iZzM3IiAvPjwvc3ZnPg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU0MS45MTFweCIgaGVpZ2h0PSI1NDEuOTExcHgiIHZpZXdCb3g9IjAgMCA1NDEuOTExIDU0MS45MTEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU0MS45MTEgNTQxLjkxMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ2Ny44MjYsOC43ODF2NDcuNDUxSDc0LjA5MVY4Ljc4MWMwLTQuNjA4LTMuNzI5LTguMzM0LTguMzM0LTguMzM0Yy00LjYwNywwLTguMzM0LDMuNzI3LTguMzM0LDguMzM0djQ5LjA2OEg4LjMzNA0KCQlDMy43Myw1Ny44NDksMCw2MS41ODQsMCw2Ni4xODNjMCw0LjYwNywzLjczLDguMzM0LDguMzM0LDguMzM0aDQ5LjA4M3YzOTIuODY4SDguMzM0Yy00LjYwNCwwLTguMzM0LDMuNzI5LTguMzM0LDguMzM0DQoJCWMwLDQuNjEsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2NDkuMDc3YzAsNC42MDQsMy43MjcsOC4zMzQsOC4zMzQsOC4zMzRjNC42MDQsMCw4LjMzNC0zLjcyOSw4LjMzNC04LjMzNHYtNDkuMDc3aDM5My43NA0KCQl2NDkuMDc3YzAsNC42MDQsMy43MjksOC4zMzQsOC4zMzQsOC4zMzRjNC42MSwwLDguMzM0LTMuNzI5LDguMzM0LTguMzM0di00OS4wNzdoNDkuMDgzYzQuNjA0LDAsOC4zMzQtMy43MjQsOC4zMzQtOC4zMzQNCgkJYzAtNC42MDQtMy43MjktOC4zMzQtOC4zMzQtOC4zMzRoLTQ4LjMzMlY3NC41MTdoNDguMzMyYzQuNjA0LDAsOC4zMzQtMy43MjcsOC4zMzQtOC4zMzRjMC00LjU5OS0zLjcyOS04LjMzNC04LjMzNC04LjMzNGgtNDkuMDgzDQoJCVY4Ljc4MWMwLTQuNjA4LTMuNzI0LTguMzM0LTguMzM0LTguMzM0QzQ3MS41NTUsMC40NDYsNDY3LjgyNiw0LjE3Myw0NjcuODI2LDguNzgxeiBNNDY4LjIwNCwzNDAuNTI4djEyNi44NTdIMzQwLjQxM1YzNDAuNTI4DQoJCUg0NjguMjA0eiBNMzM0Ljg1NywzNDAuNTI4djEyNi44NTdIMjA3LjQzNlYzNDAuNTI4SDMzNC44NTd6IE0yMDEuNTA0LDM0MC41Mjh2MTI2Ljg1N0g3NC4wOTFWMzQwLjUyOEgyMDEuNTA0eiBNNDY4LjIwNCwyMDcuMTcyDQoJCXYxMjcuOEgzNDAuNDEzdi0xMjcuOEg0NjguMjA0eiBNMzM0Ljg1NywyMDcuMTcydjEyNy44SDIwNy40MzZ2LTEyNy44SDMzNC44NTd6IE0yMDEuNTA0LDIwNy4xNzJ2MTI3LjhINzQuMDkxdi0xMjcuOEgyMDEuNTA0eg0KCQkgTTQ2OC4yMDQsNzMuODI5djEyNy43ODhIMzQwLjQxM1Y3My44MjlINDY4LjIwNHogTTMzNC44NTcsNzMuODI5djEyNy43ODhIMjA3LjQzNlY3My44MjlIMzM0Ljg1N3ogTTIwMS41MDQsNzMuODI5djEyNy43ODgNCgkJSDc0LjA5MVY3My44MjlIMjAxLjUwNHogTTMyMy40MTQsODMuODg1VjE4OC43OUgyMTguNTA2VjgzLjg4NUgzMjMuNDE0eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQxOHB4IiBoZWlnaHQ9IjQxOHB4IiB2aWV3Qm94PSIwIDAgNDE4IDQxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDE4IDQxODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTkxLjYwNiwxNDMuNzAzYy0zLjE0Ni0zLjE0Ni03Ljg3Ny00LjA4Ny0xMS45ODgtMi4zODVjLTQuMTEsMS43MDMtNi43OSw1LjcxNC02Ljc5LDEwLjE2M3YxMTUuMDM3DQoJCQkJYzAsNC40NDksMi42OCw4LjQ2MSw2Ljc5LDEwLjE2NGMxLjM2MSwwLjU2MywyLjc5LDAuODM2LDQuMjA4LDAuODM2YzIuODYyLDAsNS42NzYtMS4xMTYsNy43OC0zLjIyMmw1Ny41Mi01Ny41MTkNCgkJCQljMi4wNjMtMi4wNjMsMy4yMjItNC44NjEsMy4yMjItNy43NzhzLTEuMTU5LTUuNzE2LTMuMjIyLTcuNzc4TDkxLjYwNiwxNDMuNzAzeiIvPg0KCQkJPHBhdGggZD0iTTMzOC4zODIsMTQxLjMxOGMtNC4xMDctMS43LTguODQxLTAuNzYzLTExLjk4NywyLjM4NWwtNTcuNTIxLDU3LjUxOWMtMi4wNjIsMi4wNjMtMy4yMjIsNC44NjEtMy4yMjIsNy43NzgNCgkJCQlzMS4xNTgsNS43MTYsMy4yMjIsNy43NzdsNTcuNTIxLDU3LjUyYzIuMTA0LDIuMTA0LDQuOTE4LDMuMjIzLDcuNzc5LDMuMjIzYzEuNDE3LDAsMi44NDgtMC4yNzIsNC4yMDgtMC44MzgNCgkJCQljNC4xMS0xLjcwMyw2Ljc5LTUuNzE0LDYuNzktMTAuMTYyVjE1MS40ODFDMzQ1LjE3MiwxNDcuMDMyLDM0Mi40OTIsMTQzLjAyMSwzMzguMzgyLDE0MS4zMTh6Ii8+DQoJCQk8cGF0aCBkPSJNMjEyLDBoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2MzVjMCw2LjA3NSw0LjkyNSwxMSwxMSwxMWg2YzYuMDc1LDAsMTEtNC45MjUsMTEtMTFWMTFDMjIzLDQuOTI1LDIxOC4wNzUsMCwyMTIsMHoiDQoJCQkJLz4NCgkJCTxwYXRoIGQ9Ik0yMTIsOTUuMzUyaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjcyLjQ3M2MwLDYuMDc1LDQuOTI1LDExLDExLDExaDZjNi4wNzUsMCwxMS00LjkyNSwxMS0xMXYtNzIuNDczDQoJCQkJQzIyMywxMDAuMjc2LDIxOC4wNzUsOTUuMzUyLDIxMiw5NS4zNTJ6Ii8+DQoJCQk8cGF0aCBkPSJNMjEyLDIyOC4xNzZoLTZjLTYuMDc1LDAtMTEsNC45MjYtMTEsMTF2NzIuNDc0YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzQNCgkJCQlDMjIzLDIzMy4xMDIsMjE4LjA3NSwyMjguMTc2LDIxMiwyMjguMTc2eiIvPg0KCQkJPHBhdGggZD0iTTIxMiwzNjFoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2MzVjMCw2LjA3NSw0LjkyNSwxMSwxMSwxMWg2YzYuMDc1LDAsMTEtNC45MjUsMTEtMTF2LTM1DQoJCQkJQzIyMywzNjUuOTI1LDIxOC4wNzUsMzYxLDIxMiwzNjF6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ5Ny4xOTlweCIgaGVpZ2h0PSI0OTcuMTk5cHgiIHZpZXdCb3g9IjAgMCA0OTcuMTk5IDQ5Ny4xOTkiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ5Ny4xOTkgNDk3LjE5OTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTE5MS4yLDI0OC42YzAtMTUuMyw1LjctMjguNywxNy4yLTQwLjJzMjQuOS0xNy4yLDQwLjItMTcuMkwxOTEuMiwyNDguNnogTTE3NCwyNjUuOGMtMS45LTUuNy0xLjktMTEuNS0xLjktMTcuMg0KCQljMC00Mi4xLDM0LjQtNzYuNSw3Ni41LTc2LjVjNS43MDEsMCwxMS41LDAsMTcuMjAxLDEuOWw1MS42LTUxLjZjLTIxLTUuNy00NC03LjctNjguOS03LjdDNzYuNSwxMTQuNywwLDI0OC42LDAsMjQ4LjYNCgkJczMwLjYsNTMuNSw5Ny41LDkzLjdMMTc0LDI2NS44eiBNMzA2LDI0OC42TDI0OC42LDMwNmMxNS4zLDAsMjguNzAxLTUuNyw0MC4yMDEtMTcuMkMzMDAuMTk5LDI3Ny4zLDMwNiwyNjMuODk5LDMwNiwyNDguNnoNCgkJIE0zOTkuNjk5LDE1NC44OTlsLTc2LjUsNzYuNWMxLjksNS43LDEuOSwxMS41LDEuOSwxNy4yYzAsNDIuMS0zNC40LDc2LjUtNzYuNSw3Ni41Yy01LjcsMC0xMS41LDAtMTcuMi0xLjlMMTc5LjgsMzc0LjgNCgkJYzIxLDUuNyw0NCw3LjYsNjguOCw3LjZjMTcyLjA5OSwwLDI0OC41OTktMTMzLjksMjQ4LjU5OS0xMzMuOVM0NjYuNiwxOTUuMSwzOTkuNjk5LDE1NC44OTl6IE00MDEuNCw3Ni44OTlsLTMyNC41LDMyNC41DQoJCWwxOC45LDE4LjlMNDIwLjQsOTUuN0w0MDEuNCw3Ni44OTl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ4NS4yMTVweCINCiAgIGhlaWdodD0iNDg1LjIxNXB4Ig0KICAgdmlld0JveD0iMCAwIDQ4NS4yMTUgNDg1LjIxNSINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ4NS4yMTUgNDg1LjIxNTsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJfbGF5b3V0LXByb3BlcnRpZXMuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGUgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEwODkiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjY2NiINCiAgICAgaWQ9Im5hbWVkdmlldzM3Ig0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOnpvb209IjAuNDg2MzgyMzMiDQogICAgIGlua3NjYXBlOmN4PSItNzYuMzQ1OTcyIg0KICAgICBpbmtzY2FwZTpjeT0iNDA3LjA4NzE2Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNjQ5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNTAiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9IkNhcGFfMSIgLz48Zw0KICAgICBpZD0iZzEwMzQ5Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMzMuNjE5OTE5LDIwLjA0OTY5MykiPjxnDQogICAgICAgaWQ9IkxheWVyXzFfMTEwXyI+PGcNCiAgICAgICAgIGlkPSJnMTAzNTIiPjxwYXRoDQogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICAgIGQ9Im0gMTcuNTY3LDE1LjkzOCAtMi44NTksLTIuNzAyIGMgMC4zMzMsLTAuNjA1IDAuNTM5LC0xLjI5IDAuNTM5LC0yLjAyOSAwLC0yLjM0MiAtMS44OTcsLTQuMjM5IC00LjI0LC00LjIzOSAtMi4zNDMsMCAtNC4yNDMsMS44OTYgLTQuMjQzLDQuMjM5IDAsMi4zNDMgMS45LDQuMjQxIDQuMjQzLDQuMjQxIDAuODI2LDAgMS41OSwtMC4yNDYgMi4yNDIsLTAuNjU0IGwgMi44NTUsMi42OTkgYyAwLjQzMiwtMC41NzEgMC45MTksLTEuMDk0IDEuNDYzLC0xLjU1NSB6Ig0KICAgICAgICAgICBpZD0icGF0aDEwMzU0IiAvPjxwYXRoDQogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICAgIGQ9Im0gMjkuNjYsMTUuNiAzLjc5OSwtNi4zOTMgYyAwLjM3NCwwLjEwNyAwLjc2MiwwLjE4NCAxLjE2OSwwLjE4NCAyLjM0NywwIDQuMjQ0LC0xLjg5OCA0LjI0NCwtNC4yNDEgMCwtMi4zNDIgLTEuODk3LC00LjIzOSAtNC4yNDQsLTQuMjM5IC0yLjM0MywwIC00LjIzOSwxLjg5NiAtNC4yMzksNC4yMzkgMCwxLjE2MyAwLjQ2OSwyLjIxNCAxLjIyNywyLjk4MSBsIC0zLjc4Nyw2LjM3NSBjIDAuNjUxLDAuMjk1IDEuMjY1LDAuNjYzIDEuODMxLDEuMDk0IHoiDQogICAgICAgICAgIGlkPSJwYXRoMTAzNTYiIC8+PHBhdGgNCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgICAgZD0ibSA0Mi43NjIsMjAuOTUyIGMgLTEuODI0LDAgLTMuMzY5LDEuMTU5IC0zLjk2OCwyLjc3NSBsIC01LjI3OCwtMC41MjEgYyAwLDAuMDQgMC4wMDYsMC4wNzggMC4wMDYsMC4xMTcgMCwwLjY4OCAtMC4wNzYsMS4zNiAtMC4yMTMsMi4wMDkgbCA1LjI3NiwwLjUyMSBjIDAuMzE5LDIuMDI0IDIuMDYyLDMuNTc2IDQuMTc3LDMuNTc2IDIuMzQyLDAgNC4yMzgsLTEuODk2IDQuMjM4LC00LjIzOCAwLC0yLjM0MSAtMS44OTYsLTQuMjM5IC00LjIzOCwtNC4yMzkgeiINCiAgICAgICAgICAgaWQ9InBhdGgxMDM1OCIgLz48cGF0aA0KICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgICBkPSJtIDI4LjE5NywzNy42MjQgLTEuMTgsLTUuMTU2IGMgLTAuNjY2LDAuMjMyIC0xLjM1OSwwLjM5OCAtMi4wODIsMC40ODEgbCAxLjE4Miw1LjE1NyBjIC0xLjM1NSwwLjcwOSAtMi4yOSwyLjExIC0yLjI5LDMuNzQ2IDAsMi4zNDIgMS44OTYsNC4yMzcgNC4yNDMsNC4yMzcgMi4zNDIsMCA0LjIzOCwtMS44OTYgNC4yMzgsLTQuMjM3IDAuMDAzLC0yLjI5OSAtMS44MjksLTQuMTYgLTQuMTExLC00LjIyOCB6Ig0KICAgICAgICAgICBpZD0icGF0aDEwMzYwIiAvPjxjaXJjbGUNCiAgICAgICAgICAgY3g9IjIzLjgzIg0KICAgICAgICAgICBjeT0iMjMuMzIzIg0KICAgICAgICAgICByPSI3LjI3MDk5OTkiDQogICAgICAgICAgIGlkPSJjaXJjbGUxMDM2NCIgLz48L2c+PC9nPjwvZz48Zw0KICAgICBpZD0iZzEwMzY2Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM2OCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzNzAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzcyIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM3NCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzNzYiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzc4Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM4MCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzODIiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzg0Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM4NiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzODgiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzkwIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM5MiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzOTQiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzQzMjAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDQuNzU0NDI3MSwwLDAsNC43NTQ0MjcxLDcuODM5OTM2MSwyNjAuNzI3NDEpIj48Zw0KICAgICAgIGlkPSJnNDI4MCI+PHBhdGgNCiAgICAgICAgIGlkPSJwYXRoNDI4MiINCiAgICAgICAgIGQ9Im0gNDEuNTM0LDI4LjY2IDEuOTU3LDAgQyA0NC44NzcsMjguNjYgNDYsMjcuNTM2IDQ2LDI2LjE1IGwgMCwtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IGwgLTEuOTUxLDAgMCwwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgbCAwLjAwNiwwIDAsLTEuOTUxIEMgMjguNjYsMS4xMjQgMjcuNTM3LDAgMjYuMTUsMCBsIC02LjMsMCBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSBsIDAsMS45NTUgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IGwgMCwtMC4wMDUgLTEuOTUxLDAgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSBsIDAsNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIGwgMS45NjQsMCAtMC4wMDYsLTAuMDE1IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IDAsMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBsIDYuMywwIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIGwgMCwtMS45NSAtMC4wMDYsMCBjIDEuMjA3LC0wLjM5MiAyLjM2MywtMC44NTYgMy40NTcsLTEuNDQgbCAxLjM4MSwxLjM3OSBjIDAuOTgsMC45NzkgMi41NjgsMC45NzkgMy41NDcsMCBsIDQuNDQzLC00LjQ0NSBjIDAuOTc5LC0wLjk3OSAwLjk3OSwtMi41NjYgMCwtMy41NDcgbCAtMS4zODMsLTEuMzgzIGMgMC41ODQsLTEuMDk0IDEuMDY4LC0yLjI1IDEuNDM2LC0zLjQ1NyBsIDEwZS00LDAuMDEzIHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48Zw0KICAgICAgIGlkPSJnNDI4NCIgLz48Zw0KICAgICAgIGlkPSJnNDI4NiIgLz48Zw0KICAgICAgIGlkPSJnNDI4OCIgLz48Zw0KICAgICAgIGlkPSJnNDI5MCIgLz48Zw0KICAgICAgIGlkPSJnNDI5MiIgLz48Zw0KICAgICAgIGlkPSJnNDI5NCIgLz48Zw0KICAgICAgIGlkPSJnNDI5NiIgLz48Zw0KICAgICAgIGlkPSJnNDI5OCIgLz48Zw0KICAgICAgIGlkPSJnNDMwMCIgLz48Zw0KICAgICAgIGlkPSJnNDMwMiIgLz48Zw0KICAgICAgIGlkPSJnNDMwNCIgLz48Zw0KICAgICAgIGlkPSJnNDMwNiIgLz48Zw0KICAgICAgIGlkPSJnNDMwOCIgLz48Zw0KICAgICAgIGlkPSJnNDMxMCIgLz48Zw0KICAgICAgIGlkPSJnNDMxMiIgLz48L2c+PC9zdmc+"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ4OC43OHB4IiBoZWlnaHQ9IjQ4OC43OHB4IiB2aWV3Qm94PSIwIDAgNDg4Ljc4IDQ4OC43OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDg4Ljc4IDQ4OC43ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0xNDEuNDA4LDExOS44NzJjMTIuMjkzLTEzLjExMiwyOS42NTMtMjAuNzcsNDcuNjI0LTIwLjc3aDI0Ny40MDVWNDcuODI4YzAtMTIuNTY5LTEwLjQ2OC0yMi42NTItMjMuMDM2LTIyLjY1Mkg3NS4zOTcNCgkJCWMtMTIuNTc1LDAtMjIuNDkxLDEwLjA4My0yMi40OTEsMjIuNjUydjEwMS4wNDZoNjEuNDQ1TDE0MS40MDgsMTE5Ljg3MnoiLz4NCgkJPHBhdGggZD0iTTQ4My4wMTksMTQ5LjI1M2MtMS43MDktMS45MjQtMy43MTctMy41NS01LjkyMy00Ljc4Yy0zLjM1Mi0xLjg2MS03LjE1MS0yLjkyLTExLjA3MS0yLjkySDE4OS4wMzJsMCwwDQoJCQljLTYsMC0xMS43MzUsMi40MDktMTUuOTgzLDYuNjAxYy0wLjIxNCwwLjIwOC0wLjQyMywwLjQzOC0wLjYyNiwwLjY1MWwtOS4yNzUsOS45MTFsLTIzLjYyMiwyNS4yMDcNCgkJCWMtMC41NDIsMC41NzMtMS4xMDUsMS4yMTktMS42OTQsMS43MzZjLTQuMTEzLDMuNTcyLTkuNDEsNS42NjctMTQuOTE1LDUuNjY3aC0wLjAwNUgyMi43NjhsMCwwDQoJCQljLTUuNjg0LDAtMTEuMTExLDIuMDIyLTE1LjI3MSw1Ljc5MWMtMC42NjcsMC41ODktMS4yOTMsMS4xNzktMS44ODgsMS44NTdjLTAuNDE3LDAuNDc5LTAuODAzLDAuOTQ4LTEuMTgzLDEuNDU5DQoJCQljLTMuNDgyLDQuNzQ0LTUuMDIsMTAuNjYxLTQuMjE3LDE2LjU0MmwyNi40NzksMTk0LjE4MmMzLjU2NSwyNi4xNCwyMy41NTMsNDYuNjEyLDQ4LjY5Miw1MS4yODQNCgkJCWMzLjU5MiwwLjY2Nyw3LjI4OCwxLjE2MywxMS4wNTgsMS4xNjNoMzE0LjI2MWMyNy43NjEsMCw1MS41MjItMTkuMDAzLDU4LjM1NC00NS4xOTRjMC43MDQtMi43MDYsMS4yMjYtNS41NjcsMS41NTUtOC40Mg0KCQkJbDE1LjI2NS0xMzIuMjg5bDEyLjc3Mi0xMTAuNjc0YzAuMDY3LTAuNjQ3LDAuMTA4LTEuMjkzLDAuMTI1LTEuOTI5QzQ4OC45NDcsMTU5LjI5OSw0ODYuOTA5LDE1My42MjMsNDgzLjAxOSwxNDkuMjUzeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ4OXB4Ig0KICAgaGVpZ2h0PSI0ODkuMDAxcHgiDQogICB2aWV3Qm94PSIwIDAgNDg5IDQ4OS4wMDEiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0ODkgNDg5LjAwMTsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJuZXcuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjY5MCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNDgwIg0KICAgICBpZD0ibmFtZWR2aWV3MzciDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6em9vbT0iMC40ODI2MTY1OSINCiAgICAgaW5rc2NhcGU6Y3g9IjI0NC41Ig0KICAgICBpbmtzY2FwZTpjeT0iMjQ0LjUwMDUiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnDQogICAgIGlkPSJnMyINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjE5Njc2OSwwLDAsMC45NjE5Njc2OSw5LjAxMDc4NDgsMTApIj48cGF0aA0KICAgICAgIGQ9Ik0gMzU1Ljc2OCwwIDg2LjIxOCwwIEMgNTMuMzMsMCAyNi41NzcsMjYuNzUzIDI2LjU3Nyw1OS42MzYgbCAwLDM2OS43MjkgYyAwLDMyLjg4MyAyNi43NTIsNTkuNjM2IDU5LjY0MSw1OS42MzYgbCAzMTYuNTY2LDAgYyAzMi44ODksLTEwZS00IDU5LjY0MSwtMjYuNzU0IDU5LjY0MSwtNTkuNjM3IGwgMCwtMzIwLjIwNCBMIDM1NS43NjgsMCBaIG0gNDcuMDE2LDQ0Ni40NzkgLTMxNi41NjYsMCBjIC05LjQzNywwIC0xNy4xMTksLTcuNjc4IC0xNy4xMTksLTE3LjExMyBsIDAsLTM2OS43MyBjIDAsLTkuNDM3IDcuNjgzLC0xNy4xMTQgMTcuMTE5LC0xNy4xMTQgbCAyNDguNjQyLDAgMCw0Ny42MDQgYyAwLDIxLjA0MyAxNy4xMDksMzguMTYyIDM4LjE1MiwzOC4zNzUgbCA0Ni44OTEsMC40NzcgMCwzMDAuMzg4IGMgMCw5LjQzNSAtNy42ODQsMTcuMTEzIC0xNy4xMTksMTcuMTEzIHoiDQogICAgICAgaWQ9InBhdGg1Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnDQogICAgIGlkPSJnNyIgLz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIyNi42MzM5NDJtbSINCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iDQogICB2aWV3Qm94PSIwIDAgMjYuNjMzOTQyIDI2LjYyMjc2NSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlkPSJzdmc4Ig0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InBvcnRhbC5zdmciPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczIiPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUwMDgiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUwMDYiDQogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTAxNiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTAxNCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUxMTIiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUxMTAiDQogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTEyMCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTExOCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUzMzIiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUzMzAiDQogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjEuOTc5ODk5Ig0KICAgICBpbmtzY2FwZTpjeD0iNTUuNTM1Njg4Ig0KICAgICBpbmtzY2FwZTpjeT0iLTUxLjA2MDgxOSINCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgZml0LW1hcmdpbi10b3A9IjAiDQogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCINCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCINCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE1Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDcuNDExNjExLC04OS4yODgwNCkiPg0KICAgIDxyZWN0DQogICAgICAgcnk9IjAiDQogICAgICAgeT0iOTYuMTU3Mzc5Ig0KICAgICAgIHg9IjYxLjE2MTQ3MiINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNCINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxyZWN0DQogICAgICAgcnk9IjAiDQogICAgICAgeT0iMTAzLjAyNjczIg0KICAgICAgIHg9IjU0LjI5MjEyMiINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNC0zIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSI4OS4yODgwNCINCiAgICAgICB4PSI2OC4wMzA4MjMiDQogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiDQogICAgICAgd2lkdGg9IjUuOTk5OTk5NSINCiAgICAgICBpZD0icmVjdDU1MDQtMy01Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSIxMDkuODk2MDciDQogICAgICAgeD0iNDcuNDIyNzc5Ig0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0LTMtNS05Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03Ig0KICAgICAgIGQ9Im0gNjguMzg0OTY3LDEwMi4xMjA4OSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgNS42MDkzNTQsLTUuNzIxOTI4IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwODcgaCAtNS45MTcwNTMgdiA1LjkxMDcwNSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NjYzIg0KICAgICAgIGQ9Im0gNDguMjczMDExLDEwMS4xOTY0OCB2IC03LjU4MjA1MyBjIDAsLTEuOTE0MTQ0IDEuNDE5NTExLC0zLjQ1NTEzNCAzLjE4Mjc2MSwtMy40NTUxMzQgdiAwIGggMTQuNzY3MjcxIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjcyMjc5OTY2O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJyZWN0NTYxNyINCiAgICAgICBkPSJtIDczLjIzNzgxMywxMDIuODMwNDMgNGUtNiw5LjE1NDk4IGMgMCwxLjcyNzE4IC0xLjM4MzI2MywzLjExNzY2IC0zLjEwMTQ4NSwzLjExNzY2IEggNTUuODQ2MDc3Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjYxNTQ3MTEyO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03LTQiDQogICAgICAgZD0ibSA2MS41MTU2MTgsMTA4Ljk5MDIzIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjAwOTksLTAuMjA1MDkgSCA2MS4xOTc5NyB2IDUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMzE3NjM0LDAuMDE2MyB6Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03LTQtMyINCiAgICAgICBkPSJtIDU5LjkzNzk3NSw5Ni4xOTM4NzQgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1NCw1LjcyMTkyNiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA5IGggNS45MTcwNTMgdiAtNS45MTA3MTEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zLTAiDQogICAgICAgZD0ibSA1My4wNjg2MzMsMTAzLjA2MzIyIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtNS42MDkzNTMsNS43MjE5MyA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA4IGggNS45MTcwNTMgdiAtNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMzE3NjM0LC0wLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1LjY3OHB4IiBoZWlnaHQ9IjQ1LjY3OHB4IiB2aWV3Qm94PSIwIDAgNDUuNjc4IDQ1LjY3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuNjc4IDQ1LjY3ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0zOC45ODgsNi42ODljLTguOTE5LTguOTE4LTIzLjM4LTguOTE5LTMyLjMsMGMtOC45MTgsOC45MTktOC45MTcsMjMuMzgsMCwzMi4yOTljOC45Miw4LjkxOSwyMy4zODEsOC45MTksMzIuMywwDQoJCQlDNDcuOTA4LDMwLjA2OSw0Ny45MDYsMTUuNjA4LDM4Ljk4OCw2LjY4OXogTTIxLjg5MywzNi4wMTZjLTEuNzMsMC0yLjkwNi0xLjI3Mi0yLjkwNi0yLjk3MWMwLTEuNzMsMS4yMDktMi45NzIsMi45MDYtMi45NzINCgkJCWMxLjc2NCwwLDIuOTA2LDEuMjQxLDIuOTM4LDIuOTcyQzI0LjgzMSwzNC43NDIsMjMuNjU2LDM2LjAxNiwyMS44OTMsMzYuMDE2eiBNMjYuMjE1LDIxLjk4MWMtMS4zMiwxLjQ2Ni0xLjg1NiwyLjg2MS0xLjgyLDQuNDY4DQoJCQljMCwxLjE5My0wLjk2OSwyLjE2Mi0yLjE2MywyLjE2MkgyMS43N2MtMS4xODIsMC0yLjE0NS0wLjk0OS0yLjE2MS0yLjEzMWwtMC4wMDUtMC4zMTdjLTAuMTA3LTEuODIzLDAuNTAxLTMuNjgxLDIuMTA5LTUuNjExDQoJCQljMS4xNDUtMS4zNTksMi4wNzItMi41MDIsMi4wNzItMy43MThjMC0xLjI1LTAuODIyLTIuMDczLTIuNjA3LTIuMTQ2Yy0wLjU0OSwwLTEuMTUsMC4wOTMtMS43MzEsMC4yNTYNCgkJCWMtMS4wNTYsMC4yOTctMi4xNTYtMC4yOTgtMi40ODItMS4zNDVsLTAuMDA2LTAuMDJjLTAuMzI5LTEuMDU0LDAuMjQ3LTIuMTc1LDEuMjk0LTIuNTIzYzEuMTU3LTAuMzg1LDIuNTc0LTAuNjU3LDQuMTQtMC42NTcNCgkJCWM0LjcyLDAsNi44NjQsMi42MDksNi44NjQsNS41NzZDMjkuMjU2LDE4LjY5MiwyNy41NzUsMjAuNDc5LDI2LjIxNSwyMS45ODF6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ3MS42MDhweCINCiAgIGhlaWdodD0iNDcxLjYwOHB4Ig0KICAgdmlld0JveD0iMCAwIDQ3MS42MDggNDcxLjYwOCINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJyZWRvLnN2ZyI+PG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQxIj48cmRmOlJERj48Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICAgIGlkPSJkZWZzMzkiIC8+PHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxIg0KICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgICBncmlkdG9sZXJhbmNlPSIxMCINCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjI5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MTYiDQogICAgIGlkPSJuYW1lZHZpZXczNyINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIwLjUwMDQxNTYiDQogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0Ig0KICAgICBpbmtzY2FwZTpjeT0iMjM1LjgwNCINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9ImczIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMSwwLDAsMSw0NzMuNjA2MjEsMCkiPjxwYXRoDQogICAgICAgZD0ibSAzODQuNTM1MTksOTEuMDY3NzQ0IGMgLTgxLjQ1OTU0LC04MS40NTY4NzkxIC0yMTQuMDA4MDcsLTgxLjQ1Njg3OTEgLTI5NS40NjU4MjgsMCAtODEuNDU3NzY0MSw4MS40NTY4NzYgLTgxLjQ1Njg3ODEsMjE0LjAxMTYwNiAwLDI5NS40NjU4MjYgODEuNDU2ODY4LDgxLjQ1OTUzIDIxNC4wMDU0MDgsODEuNDU5NTMgMjk1LjQ2NTgyOCwwIDgxLjQ1OTUzLC04MS40NTMzNCA4MS40NTk1MywtMjE0LjAwMjc1IDAsLTI5NS40NjU4MjYgeiBNIDM2OC4zMjg4MywzNzAuMzM4NzIgYyAtNzIuNTE4NTksNzIuNTE4NTkgLTE5MC41MzYzLDcyLjUxODU5IC0yNjMuMDY2MzksMCAtNzIuNTE2ODE3LC03Mi41MzAwOSAtNzIuNTE2ODE3LC0xOTAuNTQyNSAwLC0yNjMuMDY3MjcgNzIuNTI5MiwtNzIuNTI2NTU5IDE5MC41MzYyOSwtNzIuNTI2NTU5IDI2My4wNjYzOSwwIDcyLjUyNTY3LDcyLjUyNDc3IDcyLjUyNTY3LDE5MC41MzcxOCAwLDI2My4wNjcyNyB6IG0gMTIuNDQzNDcsLTE5OC4xMjc2IC0xMS42MjA3Niw1Mi4zMjk3MSBjIC0wLjMxMzUsMS40NDcwNiAtMS43NDM3MywyLjM0NjgyIC0zLjE4MjgyLDIuMDM1OTggLTAuNDQwMTQsLTAuMDkzOSAtMTAuOTUwMzYsLTIuMzU4MzQgLTI2LjI5ODU4LC0yLjM1ODM0IC0yNS44ODk0NCwwIC03MS42MjQxMyw2Ljg1MTg0IC0xMDEuODMxNzIsNDkuNTUzMzggbCA2LjI5NjU2LDYuMjk2NTcgNzAuNTAzODYsMzAuNTU5MTcgYyAyLjM2NTQyLDEuMDM3MDMgMy43NTc1OCwzLjUwNjk1IDMuMzkxODMsNi4wNjcyIC0wLjM1MDcsMi41NDk2MiAtMi4zNjEsNC41NTQ2MSAtNC45MzA5OSw0Ljg3MzQyIGwgLTE3NS42MDUxOSwyMi45NTkwMSBjIC0xLjc1ODc5LDAuMjMwMjUgLTMuNTM4ODMsLTAuMzc3MjYgLTQuNzk3MjYsLTEuNjI3NzIgLTEuMjY2NCwtMS4yNjE5NyAtMS44NTUzMiwtMy4wMzY3IC0xLjYzNTY5LC00LjgwNjEyIGwgMjIuOTU5LC0xNzUuNjA3ODUgYyAwLjE2NDczLC0xLjI4NSAwLjc1MzY0LC0yLjQzNjI3IDEuNjIzMywtMy4zMDUwMyAwLjg1ODE0LC0wLjg1OTAzIDEuOTg5MDQsLTEuNDQ3OTUgMy4yNjM0MSwtMS42MzEyNyAyLjU0Njk3LC0wLjM1Nzc4IDUuMDE3NzcsMS4wMzcwMyA2LjA1MzkyLDMuMzk0NDggbCAzMC41NjcxNCw3MC41MDY1MiAwLjE1NzYzLDAuMTU3NjMgYyA0Ny4xNDE5MSwtNTkuNDAxMTcgMTE1LjQxNTg0LC02Ni40ODk0NiAxNDUuMDI4MzEsLTY2LjQ4OTQ2IDEzLjU0NjkzLDAgMjYuNjk2MjIsMS4zNDUyMiAzOC4wMjM4NCwzLjg4Njg3IDEuNDUzMjYsMC4zMzIxIDIuMzYzNjUsMS43NjMyMiAyLjAzNDIxLDMuMjA1ODUgeiINCiAgICAgICBpZD0icGF0aDUiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcNCiAgICAgaWQ9Imc3IiAvPjxnDQogICAgIGlkPSJnOSIgLz48Zw0KICAgICBpZD0iZzExIiAvPjxnDQogICAgIGlkPSJnMTMiIC8+PGcNCiAgICAgaWQ9ImcxNSIgLz48Zw0KICAgICBpZD0iZzE3IiAvPjxnDQogICAgIGlkPSJnMTkiIC8+PGcNCiAgICAgaWQ9ImcyMSIgLz48Zw0KICAgICBpZD0iZzIzIiAvPjxnDQogICAgIGlkPSJnMjUiIC8+PGcNCiAgICAgaWQ9ImcyNyIgLz48Zw0KICAgICBpZD0iZzI5IiAvPjxnDQogICAgIGlkPSJnMzEiIC8+PGcNCiAgICAgaWQ9ImczMyIgLz48Zw0KICAgICBpZD0iZzM1IiAvPjwvc3ZnPg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDM5Mi42MiAzOTIuNjIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM5Mi42MiAzOTIuNjI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxyZWN0IHg9IjE0NC44NjYiIHk9IjMyMC44OTciIHdpZHRoPSIyMy41MDUiIGhlaWdodD0iMjUiLz4NCgk8cGF0aCBkPSJNMzA5Ljc5NSwwSDI2Ni40OUgxMjYuMTMxSDgyLjgyNUMzNy42NjcsMCwwLjkyOSwzNi43MzgsMC45MjksODEuODk2djIyOC44MjhjMCw0NS4xNTgsMzYuNzM4LDgxLjg5Niw4MS44OTYsODEuODk2aDU4LjMyDQoJCWgxMTMuNDQzaDU1LjIwNmM0NS4xNTcsMCw4MS44OTYtMzYuNzM4LDgxLjg5Ni04MS44OTZWODEuODk2QzM5MS42OTEsMzYuNzM4LDM1NC45NTIsMCwzMDkuNzk1LDB6IE0yNjYuNDksMzANCgkJYzE0LjM1NCwwLDI2LjAzLDkuNTQyLDI2LjAzLDIxLjI3VjE3NC4zM2MwLDExLjcyOS0xMS42NzcsMjEuMjcxLTI2LjAzLDIxLjI3MUgxMjYuMTMxYy0xNC4zNTQsMC0yNi4wMzEtOS41NDItMjYuMDMxLTIxLjI3MQ0KCQlWNTEuMjdjMC0xMS43MjgsMTEuNjc4LTIxLjI3LDI2LjAzMS0yMS4yN0gyNjYuNDl6IE0xNDEuMTQ2LDM2Mi42MmMtNi4yNTksMC0xMS4zNTItNS4wOTItMTEuMzUyLTExLjM1MXYtMzAuMDY2DQoJCWMwLTYuMjU5LDUuMDkzLTExLjM1MSwxMS4zNTItMTEuMzUxaDExMy40NDNjNi4yNTksMCwxMS4zNTEsNS4wOTIsMTEuMzUxLDExLjM1MXYzMC4wNjZjMCw2LjI1OS01LjA5MiwxMS4zNTEtMTEuMzUxLDExLjM1MQ0KCQlIMTQxLjE0NnogTTM2MS42OTEsMzEwLjcyNGMwLDI4LjYxNi0yMy4yOCw1MS44OTYtNTEuODk2LDUxLjg5NmgtMTUuNDUyYzEuMDMyLTMuNjEsMS41OTctNy40MTQsMS41OTctMTEuMzUxdi0zMC4wNjYNCgkJYzAtMjIuODAxLTE4LjU1LTQxLjM1MS00MS4zNTEtNDEuMzUxSDE0MS4xNDZjLTIyLjgwMiwwLTQxLjM1MiwxOC41NS00MS4zNTIsNDEuMzUxdjMwLjA2NmMwLDMuOTM3LDAuNTY1LDcuNzQyLDEuNTk3LDExLjM1MQ0KCQlIODIuODI1Yy0yOC42MTYsMC01MS44OTYtMjMuMjgtNTEuODk2LTUxLjg5NlY4MS44OTZjMC0yNS45MSwxOS4wODctNDcuNDQ0LDQzLjkzOC01MS4yODVDNzEuODExLDM2LjkzNSw3MC4xLDQzLjkyMSw3MC4xLDUxLjI3DQoJCVYxNzQuMzNjMCwyOC4yNzEsMjUuMTM2LDUxLjI3MSw1Ni4wMzEsNTEuMjcxSDI2Ni40OWMzMC44OTYsMCw1Ni4wMy0yMyw1Ni4wMy01MS4yNzFWNTEuMjdjMC03LjM0OC0xLjcxMS0xNC4zMzQtNC43NjctMjAuNjU5DQoJCWMyNC44NTEsMy44NDEsNDMuOTM4LDI1LjM3NSw0My45MzgsNTEuMjg1VjMxMC43MjR6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIyNi42MzM5NDJtbSINCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iDQogICB2aWV3Qm94PSIwIDAgMjYuNjMzOTQyIDI2LjYyMjc2NSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlkPSJzdmc4Ig0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InNldHRpbmdzLnN2ZyI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzMiI+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTAwOCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTAwNiINCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGg1MDE2Ig0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGg1MDE0Ig0KICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTExMiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTExMCINCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGg1MTIwIg0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGg1MTE4Ig0KICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTMzMiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTMzMCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICA8L2RlZnM+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iMS45Nzk4OTkiDQogICAgIGlua3NjYXBlOmN4PSI1NS41MzU2ODgiDQogICAgIGlua3NjYXBlOmN5PSItNTEuMDYwODE5Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTUiPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Ny40MTE2MTEsLTg5LjI4ODA0KSI+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSI5Ni4xNTczNzkiDQogICAgICAgeD0iNjEuMTYxNDcyIg0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSIxMDMuMDI2NzMiDQogICAgICAgeD0iNTQuMjkyMTIyIg0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0LTMiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHJ5PSIwIg0KICAgICAgIHk9Ijg5LjI4ODA0Ig0KICAgICAgIHg9IjY4LjAzMDgyMyINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNC0zLTUiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHJ5PSIwIg0KICAgICAgIHk9IjEwOS44OTYwNyINCiAgICAgICB4PSI0Ny40MjI3NzkiDQogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiDQogICAgICAgd2lkdGg9IjUuOTk5OTk5NSINCiAgICAgICBpZD0icmVjdDU1MDQtMy01LTkiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTciDQogICAgICAgZD0ibSA2OC4zODQ5NjcsMTAyLjEyMDg5IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MjggNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4wMDk5LC0wLjIwNTA4NyBoIC01LjkxNzA1MyB2IDUuOTEwNzA1IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjMxNzYzNCwwLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDU2NjMiDQogICAgICAgZD0ibSA0OC4yNzMwMTEsMTAxLjE5NjQ4IHYgLTcuNTgyMDUzIGMgMCwtMS45MTQxNDQgMS40MTk1MTEsLTMuNDU1MTM0IDMuMTgyNzYxLC0zLjQ1NTEzNCB2IDAgaCAxNC43NjcyNzEiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNzIyNzk5NjY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InJlY3Q1NjE3Ig0KICAgICAgIGQ9Im0gNzMuMjM3ODEzLDEwMi44MzA0MyA0ZS02LDkuMTU0OTggYyAwLDEuNzI3MTggLTEuMzgzMjYzLDMuMTE3NjYgLTMuMTAxNDg1LDMuMTE3NjYgSCA1NS44NDYwNzciDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNjE1NDcxMTI7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNCINCiAgICAgICBkPSJtIDYxLjUxNTYxOCwxMDguOTkwMjMgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDUuNjA5MzU0LC01LjcyMTkyIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwOSBIIDYxLjE5Nzk3IHYgNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zIg0KICAgICAgIGQ9Im0gNTkuOTM3OTc1LDk2LjE5Mzg3NCBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTUuNjA5MzU0LDUuNzIxOTI2IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDkgaCA1LjkxNzA1MyB2IC01LjkxMDcxMSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMzE3NjM0LC0wLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMtMCINCiAgICAgICBkPSJtIDUzLjA2ODYzMywxMDMuMDYzMjIgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1Myw1LjcyMTkzIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDggaCA1LjkxNzA1MyB2IC01LjkxMDcxIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPGcNCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjI5MzM0MjM5LDAsMCwwLjI5MzM0MjM5LDYwLjU1MTgwMywxMDIuNDE3MDUpIg0KICAgICAgIGlkPSJnNTQ4NiI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczIj4NCiAgICAgICAgPHBhdGgNCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgICAgZD0ibSA0MS41MzQsMjguNjYgaCAxLjk1NyBDIDQ0Ljg3NywyOC42NiA0NiwyNy41MzYgNDYsMjYuMTUgdiAtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IEggNDEuNTQgdiAwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgSCAyOC42NiBWIDIuNTEgQyAyOC42NiwxLjEyNCAyNy41MzcsMCAyNi4xNSwwIGggLTYuMyBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSB2IDEuOTU1IGwgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IFYgMTcuMzQxIEggMi41MDkgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSB2IDYuMzAxIGMgMCwxLjM4NyAxLjEyNCwyLjUxMSAyLjUwOSwyLjUxMSBIIDQuNDczIEwgNC40NjcsMjguNjQ3IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IHYgMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBoIDYuMyBjIDEuMzg3LDAgMi41MSwtMS4xMjMgMi41MSwtMi41MSB2IC0xLjk1IGggLTAuMDA2IGMgMS4yMDcsLTAuMzkyIDIuMzYzLC0wLjg1NiAzLjQ1NywtMS40NCBsIDEuMzgxLDEuMzc5IGMgMC45OCwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0NywwIGwgNC40NDMsLTQuNDQ1IGMgMC45NzksLTAuOTc5IDAuOTc5LC0yLjU2NiAwLC0zLjU0NyBsIC0xLjM4MywtMS4zODMgYyAwLjU4NCwtMS4wOTQgMS4wNjgsLTIuMjUgMS40MzYsLTMuNDU3IHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiDQogICAgICAgICAgIGlkPSJwYXRoNSIgLz4NCiAgICAgIDwvZz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzciIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9Imc5IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMTEiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcxMyIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzE1IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMTciIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcxOSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzIxIiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMjMiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcyNSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzI3IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMjkiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczMSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzMzIiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzUiIC8+DQogICAgPC9nPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjczLjA1OHB4IiBoZWlnaHQ9IjczLjA1OHB4IiB2aWV3Qm94PSIwIDAgNzMuMDU4IDczLjA1OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzMuMDU4IDczLjA1ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGcgaWQ9IkV5ZSI+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTcyLjg5MywzNS45NjVjLTAuNTgtMC45MjUtMTQuNDMyLTIyLjU0MS0zNS4xNi0yMi41NDFoLTIuNDA2Yy0yMC43MjksMC0zNC41OCwyMS42MTYtMzUuMTU5LDIyLjU0MQ0KCQkJCWMtMC4yMjMsMC4zNDctMC4yMjMsMC43OSwwLDEuMTM3YzAuNTc5LDAuOTE3LDE0LjQzMiwyMi41MzIsMzUuMTU5LDIyLjUzMmgyLjQwNmMyMC43MjksMCwzNC41OC0yMS42MTUsMzUuMTU5LTIyLjUzMg0KCQkJCUM3My4xMTMsMzYuNzU1LDczLjExMywzNi4zMTIsNzIuODkzLDM1Ljk2NXogTTQ1LjI2NywzNi41MjljMCw0LjY5LTMuOTIsOC41MDYtOC43MzYsOC41MDZjLTQuODE3LDAtOC43MzUtMy44MTItOC43MzUtOC41MDYNCgkJCQljMC00LjY4NywzLjkxOC04LjUwOCw4LjczNS04LjUwOEM0MS4zNDcsMjguMDIyLDQ1LjI2NywzMS44NDQsNDUuMjY3LDM2LjUyOXoiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ3MS42MDhweCINCiAgIGhlaWdodD0iNDcxLjYwOHB4Ig0KICAgdmlld0JveD0iMCAwIDQ3MS42MDggNDcxLjYwOCINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJ1bmRvLnN2ZyI+PG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQxIj48cmRmOlJERj48Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICAgIGlkPSJkZWZzMzkiIC8+PHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxIg0KICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgICBncmlkdG9sZXJhbmNlPSIxMCINCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjI5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MTYiDQogICAgIGlkPSJuYW1lZHZpZXczNyINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIwLjUwMDQxNTYiDQogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0Ig0KICAgICBpbmtzY2FwZTpjeT0iMjM1LjgwNCINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9ImczIj48cGF0aA0KICAgICAgIGQ9Im0gMzg0LjUzNTE5LDkxLjA2Nzc0NCBjIC04MS40NTk1NCwtODEuNDU2ODc5MSAtMjE0LjAwODA3LC04MS40NTY4NzkxIC0yOTUuNDY1ODI4LDAgLTgxLjQ1Nzc2NDEsODEuNDU2ODc2IC04MS40NTY4NzgxLDIxNC4wMTE2MDYgMCwyOTUuNDY1ODI2IDgxLjQ1Njg2OCw4MS40NTk1MyAyMTQuMDA1NDA4LDgxLjQ1OTUzIDI5NS40NjU4MjgsMCA4MS40NTk1MywtODEuNDUzMzQgODEuNDU5NTMsLTIxNC4wMDI3NSAwLC0yOTUuNDY1ODI2IHogTSAzNjguMzI4ODMsMzcwLjMzODcyIGMgLTcyLjUxODU5LDcyLjUxODU5IC0xOTAuNTM2Myw3Mi41MTg1OSAtMjYzLjA2NjM5LDAgLTcyLjUxNjgxNywtNzIuNTMwMDkgLTcyLjUxNjgxNywtMTkwLjU0MjUgMCwtMjYzLjA2NzI3IDcyLjUyOTIsLTcyLjUyNjU1OSAxOTAuNTM2MjksLTcyLjUyNjU1OSAyNjMuMDY2MzksMCA3Mi41MjU2Nyw3Mi41MjQ3NyA3Mi41MjU2NywxOTAuNTM3MTggMCwyNjMuMDY3MjcgeiBtIDEyLjQ0MzQ3LC0xOTguMTI3NiAtMTEuNjIwNzYsNTIuMzI5NzEgYyAtMC4zMTM1LDEuNDQ3MDYgLTEuNzQzNzMsMi4zNDY4MiAtMy4xODI4MiwyLjAzNTk4IC0wLjQ0MDE0LC0wLjA5MzkgLTEwLjk1MDM2LC0yLjM1ODM0IC0yNi4yOTg1OCwtMi4zNTgzNCAtMjUuODg5NDQsMCAtNzEuNjI0MTMsNi44NTE4NCAtMTAxLjgzMTcyLDQ5LjU1MzM4IGwgNi4yOTY1Niw2LjI5NjU3IDcwLjUwMzg2LDMwLjU1OTE3IGMgMi4zNjU0MiwxLjAzNzAzIDMuNzU3NTgsMy41MDY5NSAzLjM5MTgzLDYuMDY3MiAtMC4zNTA3LDIuNTQ5NjIgLTIuMzYxLDQuNTU0NjEgLTQuOTMwOTksNC44NzM0MiBsIC0xNzUuNjA1MTksMjIuOTU5MDEgYyAtMS43NTg3OSwwLjIzMDI1IC0zLjUzODgzLC0wLjM3NzI2IC00Ljc5NzI2LC0xLjYyNzcyIC0xLjI2NjQsLTEuMjYxOTcgLTEuODU1MzIsLTMuMDM2NyAtMS42MzU2OSwtNC44MDYxMiBsIDIyLjk1OSwtMTc1LjYwNzg1IGMgMC4xNjQ3MywtMS4yODUgMC43NTM2NCwtMi40MzYyNyAxLjYyMzMsLTMuMzA1MDMgMC44NTgxNCwtMC44NTkwMyAxLjk4OTA0LC0xLjQ0Nzk1IDMuMjYzNDEsLTEuNjMxMjcgMi41NDY5NywtMC4zNTc3OCA1LjAxNzc3LDEuMDM3MDMgNi4wNTM5MiwzLjM5NDQ4IGwgMzAuNTY3MTQsNzAuNTA2NTIgMC4xNTc2MywwLjE1NzYzIGMgNDcuMTQxOTEsLTU5LjQwMTE3IDExNS40MTU4NCwtNjYuNDg5NDYgMTQ1LjAyODMxLC02Ni40ODk0NiAxMy41NDY5MywwIDI2LjY5NjIyLDEuMzQ1MjIgMzguMDIzODQsMy44ODY4NyAxLjQ1MzI2LDAuMzMyMSAyLjM2MzY1LDEuNzYzMjIgMi4wMzQyMSwzLjIwNTg1IHoiDQogICAgICAgaWQ9InBhdGg1Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnDQogICAgIGlkPSJnNyIgLz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ3Ljg4NzMxIgogICB2aWV3Qm94PSIwIDAgMTYzLjEyNSA0NC44OTQzNTQiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMi4yICg3MzJhMDFkYTYzLCAyMDIyLTEyLTA5KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iY29tcGFydG1lbnQuc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDQwMSIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTYiCiAgICAgaW5rc2NhcGU6Y3g9IjkzLjMxMjg0MSIKICAgICBpbmtzY2FwZTpjeT0iMTQuNTIwOTQzIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU2MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMzY5IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIxOTEyIgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIgogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc0LjQ1MDM1LC0zMTYuMDU0MzYpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc1ODYxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuMjc4MjMiCiAgICAgICBoZWlnaHQ9IjQxLjEzNTczOCIKICAgICAgIHg9IjI3Ni40MTc4MiIKICAgICAgIHk9IjMxNy45MzM2NSIKICAgICAgIHJ5PSIyLjk1MjYyMTUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxHb29nbGUgRHJpdmVcdG9vbGJhclxtYWNyb21vbGVjdWxlLnBuZyIKICAgICAgIHJ4PSI0Ni44NTAxNjYiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0icmVjdDI5ODUiIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMDMuODM1MTEiCiAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzAzLjgzNTExIgogICAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkNvbXBhcnRtZW50PC90c3Bhbj48L3RleHQ+CiAgPC9nPgo8L3N2Zz4K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MzAwMSIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MzE0IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjIuMiAoNzMyYTAxZGE2MywgMjAyMi0xMi0wOSkiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvbXBsZXguc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDQwMSIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNS42NTY4NTQzIgogICAgIGlua3NjYXBlOmN4PSI2MC44MTExODMiCiAgICAgaW5rc2NhcGU6Y3k9IjIzLjE1Nzc0NyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAwOSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgdW5pdHM9InB4IgogICAgIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9ImZhbHNlIgogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIKICAgICBib3JkZXJsYXllcj0idHJ1ZSIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjIzMTI3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODkzNzQiCiAgICAgICBoZWlnaHQ9IjM4LjQzNDA0IgogICAgICAgeD0iMjc3LjY4MDYiCiAgICAgICB5PSIzMTkuMjg0NjEiCiAgICAgICByeT0iMCIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgeD0iMzI0LjcxNjA5IgogICAgICAgeT0iMzQyLjY5MTAxIgogICAgICAgaWQ9InRleHQ4MTgiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW44MTYiCiAgICAgICAgIHg9IjMyNC43MTYwOSIKICAgICAgICAgeT0iMzQyLjY5MTAxIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5Db21wbGV4PC90c3Bhbj48L3RleHQ+CiAgICA8cmVjdAogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC45Mzc1O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDYyMzUiCiAgICAgICB3aWR0aD0iOC40Mzc1IgogICAgICAgaGVpZ2h0PSI4LjQzNzUiCiAgICAgICB4PSIyNzYuMDY0OTciCiAgICAgICB5PSIzMTcuNjY4OTgiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMS4yNTQ5ODY4ZS02KSIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjkzNzU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NTU3NyIKICAgICAgIHdpZHRoPSI4LjQzNzUiCiAgICAgICBoZWlnaHQ9IjguNDM3NSIKICAgICAgIHg9IjQzMC43NTI0NyIKICAgICAgIHk9IjMxNy42Njg5OCIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjkzNzU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NjIyMSIKICAgICAgIHdpZHRoPSI4LjQzNzUiCiAgICAgICBoZWlnaHQ9IjguNDM3NSIKICAgICAgIHg9IjQzMC43NTI0NyIKICAgICAgIHk9IjM1MC44OTY3OSIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjkzNzU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NjIyMyIKICAgICAgIHdpZHRoPSI4LjQzNzUiCiAgICAgICBoZWlnaHQ9IjguNDM3NSIKICAgICAgIHg9IjI3Ni4wNjQ5NyIKICAgICAgIHk9IjM1MC44OTY3OSIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjkzNzUiCiAgICAgICBpZD0icmVjdDYyMzMiCiAgICAgICB3aWR0aD0iMi4zNDM3NSIKICAgICAgIGhlaWdodD0iMTEuNjcxODc1IgogICAgICAgeD0iNTU1LjUyNDcyIgogICAgICAgeT0iLTYyLjMwMjQzNyIKICAgICAgIHRyYW5zZm9ybT0icm90YXRlKDQ1LDEuMzQzMTA1MWUtNiwtMi4zMzExNTE3ZS02KSIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjkzNzUiCiAgICAgICBpZD0icmVjdDYyMzEiCiAgICAgICB3aWR0aD0iMi4zNDM3NSIKICAgICAgIGhlaWdodD0iMTEuNjcxODc1IgogICAgICAgeD0iLTc5LjE1NDg4NCIKICAgICAgIHk9Ii01NDEuMDE2MDUiCiAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSgxMzUpIiAvPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuOTM3NSIKICAgICAgIGlkPSJyZWN0NjIzNyIKICAgICAgIHdpZHRoPSIyLjM0Mzc1IgogICAgICAgaGVpZ2h0PSIxMS42NzE4NzUiCiAgICAgICB4PSI0MjYuNjA2NzUiCiAgICAgICB5PSIyMy41ODI1MzciCiAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSg0NSkiIC8+CiAgICA8cmVjdAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC45Mzc1IgogICAgICAgaWQ9InJlY3QzNzAwIgogICAgICAgd2lkdGg9IjIuMzQzNzUiCiAgICAgICBoZWlnaHQ9IjExLjY3MTg3NSIKICAgICAgIHg9IjQ5Ljc2MzExMSIKICAgICAgIHk9Ii00NTUuMTMxMDciCiAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSgxMzUpIiAvPgogIDwvZz4KPC9zdmc+Cg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTczLjk5OTM3IgogICBoZWlnaHQ9IjQ1LjA4MjAwMSIKICAgdmlld0JveD0iMCAwIDE2My4xMjQ0MiA0Mi4yNjQzNzYiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMi4yICg3MzJhMDFkYTYzLCAyMDIyLTEyLTA5KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZmFtaWx5LnN2ZyIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjExLjIiCiAgICAgaW5rc2NhcGU6Y3g9Ijc3Ljc2Nzg1NyIKICAgICBpbmtzY2FwZTpjeT0iNDAuMzU3MTQzIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU2MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMzY5IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIxOTEyIgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIgogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk4LC0zMTcuMDY5NzcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjI1NTExODM3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODY5MjkiCiAgICAgICBoZWlnaHQ9IjM5LjAwOTI1OCIKICAgICAgIHg9IjI3Ny42OTI1NCIKICAgICAgIHk9IjMxOC42OTczMyIKICAgICAgIHJ5PSIwIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcR29vZ2xlIERyaXZlXHRvb2xiYXJcbWFjcm9tb2xlY3VsZS5wbmciIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMzIuODYwMzIiCiAgICAgICB5PSIzNDIuMzkxNDIiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzMyLjg2MDMyIgogICAgICAgICB5PSIzNDIuMzkxNDIiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkZhbWlseTwvdHNwYW4+PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjIuMiAoNzMyYTAxZGE2MywgMjAyMi0xMi0wOSkiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImdlbmUuc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDQwMSIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMy45NTk3OTgiCiAgICAgaW5rc2NhcGU6Y3g9Ii0zNS44NjA0MTYiCiAgICAgaW5rc2NhcGU6Y3k9IjM4LjYzODMzNSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAwOSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgdW5pdHM9InB4IgogICAgIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiCiAgICAgaW5rc2NhcGU6ZGVza2NvbG9yPSIjZDFkMWQxIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQ0MDQiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzYuMDY0OTcsLTMxNy42Njg5NykiPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNjg3NTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDI5ODUiCiAgICAgICB3aWR0aD0iMTYxLjQzNzUyIgogICAgICAgaGVpZ2h0PSIzOS45Nzc2NDYiCiAgICAgICB4PSIyNzYuOTA4NzIiCiAgICAgICB5PSIzMTguNTEyNzMiCiAgICAgICByeT0iMTAuMzE2Nzk0IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcR29vZ2xlIERyaXZlXHRvb2xiYXJcbWFjcm9tb2xlY3VsZS5wbmciIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMzguMDc1NDciCiAgICAgICB5PSIzNDMuOTQ3MTEiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzM4LjA3NTQ3IgogICAgICAgICB5PSIzNDMuOTQ3MTEiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkdlbmU8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIxNzQiDQogICBoZWlnaHQ9IjQ0LjQ0MjgyMiINCiAgIHZpZXdCb3g9IjAgMCAxNjMuMTI1IDQxLjY2NTE0NiINCiAgIGlkPSJzdmc0Mzk5Ig0KICAgdmVyc2lvbj0iMS4xIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InByb2Nlc3Muc3ZnIj4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0NDAxIiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjEuNCINCiAgICAgaW5rc2NhcGU6Y3g9Ii02MC4yNDgwNzYiDQogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICB1bml0cz0icHgiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4NCiAgICA8dGV4dA0KICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjguMTI1cHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45Mzc1cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICB4PSIzMjguNzE1MTIiDQogICAgICAgeT0iMzQzLjg0MDkxIg0KICAgICAgIGlkPSJ0ZXh0ODE4Ij48dHNwYW4NCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiDQogICAgICAgICBpZD0idHNwYW44MTYiDQogICAgICAgICB4PSIzMjguNzE1MTIiDQogICAgICAgICB5PSIzNDMuODQwOTEiDQogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5Qcm9jZXNzPC90c3Bhbj48L3RleHQ+DQogIDwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9ICI0NCIgaGVpZ2h0PSAiNDQiIHZpZXdCb3g9IjAgMCA0NCA0NCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDQ0IDQ0Ij4NCiAgPGNpcmNsZSBjeD0iMjIiIGN5PSIyMiIgcj0iMjIiIGZpbGw9IiNmZmYiLz4NCiAgPHBhdGggZD0ibTIyLDBjLTEyLjIsMC0yMiw5LjgtMjIsMjJzOS44LDIyIDIyLDIyIDIyLTkuOCAyMi0yMi05LjgtMjItMjItMjJ6bS0xLjMsMTkuM2wtMS40LDEuNGMtMC40LDAuNC0xLDAuNC0xLjQsMGwtNC00Yy0wLjMtMC4zLTAuOS0wLjEtMC45LDAuNHYxYzAsMC42LTAuNCwxLTEsMWgtMmMtMC42LDAtMS0wLjQtMS0xdi04YzAtMC42IDAuNC0xIDEtMWg4YzAuNiwwIDEsMC40IDEsMXYyYzAsMC42LTAuNCwxLTEsMWgtMWMtMC40LDAtMC43LDAuNS0wLjQsMC45bDQsNGMwLjUsMC4zIDAuNSwwLjkgMC4xLDEuM3ptMTQuMywxNC43YzAsMC42LTAuNCwxLTEsMWgtOGMtMC42LDAtMS0wLjQtMS0xdi0yYzAtMC42IDAuNC0xIDEtMWgxYzAuNCwwIDAuNy0wLjUgMC40LTAuOWwtNC00Yy0wLjQtMC40LTAuNC0xIDAtMS40bDEuNC0xLjRjMC40LTAuNCAxLTAuNCAxLjQsMGw0LDRjMC4zLDAuMyAwLjksMC4xIDAuOS0wLjR2LTFjMC0wLjYgMC40LTEgMS0xaDJjMC42LDAgMSwwLjQgMSwxdjguMWgtMC4xeiIvPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iYWN0aXZhdGVzLnN2ZyINCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyINCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiDQogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIg0KICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQiPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0ibWFya2VyMTIwMiINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDEyMDAiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDk1OSINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICA8L2RlZnM+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTU5Ig0KICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyINCiAgICAgaW5rc2NhcGU6Y3k9IjE4LjQ2ODYyMSINCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4Ig0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgZml0LW1hcmdpbi10b3A9IjAiDQogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCINCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCINCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE3Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGUgLz4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4NCiAgICA8cGF0aA0KICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjMuNzQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDQ3LjM1MDg5Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTp0eXBlPSJzdGFyIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiDQogICAgICAgaWQ9InBhdGg0OTUzIg0KICAgICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICAgIHNvZGlwb2RpOmN4PSIyMTIuNDI5MDIiDQogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiINCiAgICAgICBzb2RpcG9kaTpyMT0iMTEuMDU3MzQ3Ig0KICAgICAgIHNvZGlwb2RpOnIyPSI1LjUyODY3MzYiDQogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiINCiAgICAgICBzb2RpcG9kaTphcmcyPSIxLjk2MTY0NTUiDQogICAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJ0cnVlIg0KICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiDQogICAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgICBkPSJtIDIxOS4xNzY1MiwyNjIuNTU4MTggLTE3LjcwNzU3LC03LjI5NjM3IDE1LjE3MjYyLC0xMS42ODcwMSB6Ig0KICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSINCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9IjAuMDc4NDg5NjUzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzk0MzQwOTgsMC44OTk3NzUwNCwtMC45MTg5NjQxOSwwLjM4NjEwNjYzLDQ3NC45ODU4MywxLjM2MTczMjkpIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iYmluZHMuc3ZnIg0KICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCINCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiDQogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzNCI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJtYXJrZXIxMjAyIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoMTIwMCINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoOTU5Ig0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogIDwvZGVmcz4NCiAgPHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBpZD0iYmFzZSINCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIg0KICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiDQogICAgIGlua3NjYXBlOmN4PSItNC44MTEwMzU3Ig0KICAgICBpbmtzY2FwZTpjeT0iMTguNDY4NjIxIg0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTciPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPg0KICAgIDxwYXRoDQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgZD0ibSAyNzUuNjQyNDcsMjkwLjU3MTc1IGggNjAuOTM3NSINCiAgICAgICBpZD0icGF0aDQ5NDkiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iaW5kdWNlcy5zdmciDQogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciDQogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMzAwIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCINCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0Ij4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9Im1hcmtlcjEyMDIiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGgxMjAwIg0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJUcmlhbmdsZU91dEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5NTkiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSINCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciDQogICAgIGlua3NjYXBlOmN5PSIxOC40Njg2MjEiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPg0KICA8bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNyI+DQogICAgPHJkZjpSREY+DQogICAgICA8Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPg0KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICAgICAgPGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4NCiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+DQogICAgICA8L2NjOldvcms+DQogICAgPC9yZGY6UkRGPg0KICA8L21ldGFkYXRhPg0KICA8Zw0KICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSINCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciINCiAgICAgaWQ9ImxheWVyMSINCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+DQogICAgPHBhdGgNCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo3LjQ5OTk5OTg3LDcuNDk5OTk5ODc7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowIg0KICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDQ3LjM1MDg5Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTp0eXBlPSJzdGFyIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiDQogICAgICAgaWQ9InBhdGg0OTUzIg0KICAgICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICAgIHNvZGlwb2RpOmN4PSIyMTIuNDI5MDIiDQogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiINCiAgICAgICBzb2RpcG9kaTpyMT0iMTEuMDU3MzQ3Ig0KICAgICAgIHNvZGlwb2RpOnIyPSI1LjUyODY3MzYiDQogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiINCiAgICAgICBzb2RpcG9kaTphcmcyPSIxLjk2MTY0NTUiDQogICAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJ0cnVlIg0KICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiDQogICAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgICBkPSJtIDIxOS4xNzY1MiwyNjIuNTU4MTggLTE3LjcwNzU3LC03LjI5NjM3IDE1LjE3MjYyLC0xMS42ODcwMSB6Ig0KICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSINCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9IjAuMDc4NDg5NjUzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzk0MzQwOTgsMC44OTk3NzUwNCwtMC45MTg5NjQxOSwwLjM4NjEwNjYzLDQ3NC45ODU4MywxLjM2MTczMjkpIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iaW5oaWJpdHMuc3ZnIg0KICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCINCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiDQogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzNCI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlN0b3BMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwLjAiDQogICAgICAgcmVmWD0iMC4wIg0KICAgICAgIGlkPSJTdG9wTCINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDk4NiINCiAgICAgICAgIGQ9Ik0gMC4wLDUuNjUgTCAwLjAsLTUuNjUiDQogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIgLz4NCiAgICA8L21hcmtlcj4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9Im1hcmtlcjEyMDIiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGgxMjAwIg0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJUcmlhbmdsZU91dEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5NTkiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSINCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciDQogICAgIGlua3NjYXBlOmN5PSIxMy45MjI5MzQiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPg0KICA8bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNyI+DQogICAgPHJkZjpSREY+DQogICAgICA8Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPg0KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICAgICAgPGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4NCiAgICAgICAgPGRjOnRpdGxlIC8+DQogICAgICA8L2NjOldvcms+DQogICAgPC9yZGY6UkRGPg0KICA8L21ldGFkYXRhPg0KICA8Zw0KICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSINCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciINCiAgICAgaWQ9ImxheWVyMSINCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+DQogICAgPHBhdGgNCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA1OS43ODA1Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi43NzU5Mzc1NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo4LjMyNzgxMjQ2LCAyLjc3NTkzNzQ5O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIg0KICAgICAgIGlkPSJyZWN0NDk4MSINCiAgICAgICB3aWR0aD0iMC45NzQxNjk1NSINCiAgICAgICBoZWlnaHQ9IjE1Ljg4OTcwMyINCiAgICAgICB4PSIzMzQuMjE3ODMiDQogICAgICAgeT0iMjgyLjYyNjg5IiAvPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0icmVwcmVzc2VzLnN2ZyINCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyINCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiDQogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIg0KICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQiPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJTdG9wTCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMC4wIg0KICAgICAgIHJlZlg9IjAuMCINCiAgICAgICBpZD0iU3RvcEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5ODYiDQogICAgICAgICBkPSJNIDAuMCw1LjY1IEwgMC4wLC01LjY1Ig0KICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJtYXJrZXIxMjAyIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoMTIwMCINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoOTU5Ig0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogIDwvZGVmcz4NCiAgPHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBpZD0iYmFzZSINCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIg0KICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiDQogICAgIGlua3NjYXBlOmN4PSItMjUuMzI5NzU5Ig0KICAgICBpbmtzY2FwZTpjeT0iMTMuOTIyOTM0Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTciPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZSAvPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPg0KICAgIDxwYXRoDQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6Ny40OTk5OTk4NywgNy40OTk5OTk4NztzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgZD0ibSAyNzUuNjQyNDcsMjkwLjU3MTc1IGggNTkuNzgwNSINCiAgICAgICBpZD0icGF0aDQ5NDkiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuNzc1OTM3NTY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6OC4zMjc4MTIzNSwgMi43NzU5Mzc0NTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSINCiAgICAgICBpZD0icmVjdDQ5ODEiDQogICAgICAgd2lkdGg9IjAuOTc0MTY5NTUiDQogICAgICAgaGVpZ2h0PSIxNS44ODk3MDMiDQogICAgICAgeD0iMzMyLjM0MjgzIg0KICAgICAgIHk9IjI4Mi42MjY4OSIgLz4NCiAgPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports=require("react-toastify/dist/ReactToastify.min.css")},function(t,e,a){},function(t,e,a){},function(t,e,a){},function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqIAAACxCAYAAAAf3N/vAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAGx6SURBVHhe7Z0HeBRV+/af9N5DgCT03nvvRVBARSkWFOxdP18sf7vY62vFrq/YGyqiYgOkifQeeie9916+c59MINnM7s7MlmyS58e1F8wh2Z2dOXPOfZ7zFLcqATEMwzAMwzCMk3FX/mYYhmEYhmEYp8JClGEYhmEYhmkQeGueYZooJSXFdPTAAdq3YzudOHqECvLz6fihQ1ReXkaRUS1p4rTpNHXmJRQYFKz8BuNMqior6dD+OPrzpx8pLydHtvkFBND4qRdQvyFDycPDQ7YxjY+S4mJateIXWrH0W0pLSSF3d3fqO2gwzbp6AXXp2Yvc3NyUn6wP94vGQUpiAq34fiklxp8RN62KPDw9aeDwkTRuylTy8fVVforRAgtRhmlilJaU0NZ/NtB3n3xMSRgkzeDr50d3PvgIDRo5yuLEyDiGrIwMev3pJ+jAnt1KSzVtO3SkhU88Ra1jYpUWprFxOG4fvfzYI5STnaW0VDNs7Di6eeF9FBAUpLTUh/uF64Mx9qsP36cVPyxVWqrxFwuGux9dRH0HD+ExVQe8Nc8wTYj8vFw5QL7xzJMWRSjAYJqVmSEW87wWbQgKC/IpOzNTOToH7mFhfoFyxDQ28Dzl5uRQcVGR0nKO/NxcKisrU47U4X7h+pSWllBqcpJydI7SklJx77OlhZTRDgtRhmkiYCt++ddf1VulM65JZWWleFUoR0xToqqqUvmXfrhfNA4qK1ls2gsWokyzAT49fy7/iX757hv5wr+TEuKbhEUQfmW7t2yhP376UWmxDvyYWrRs1aS3kOBjt/bP38/e8xXffye3PCvKy5WfsC94X7w/PqfmMzes+osK8vKUn2AYhmFqw0KUaRbkZGXRB6/+lz56/RX67N235Qv/fu/lFyk7M0P5qcZLQUE+rfvrT9XtQDVatGxJcxZcS9379G2yQhQBI98u+YjefuG5s/f8k7cXS9+9uN277L4Awfvt3raVXnzkQfk5NZ/55rNP07KvPqey0lLlJxmGYZgaWIgyzQL4V6WnpipH50hLTqZsIVIbO6ePH6eDe+sGN9QQ3bYtLXz8SVry82/0zaq18rX4y29p+uy5MmCpqVJWVkqZ6enK0TnQF7b9s0H6edkTvN+uLZupsKC+H1+q6GfWfAMZhrEv2CnCGH/s0EE6evCA/DtDzAPsF+9asBBlmgXm/K7QVllh3J/LFcB3O3PyhEzPZEpoeDjdfM/9NHTMWPLz91damwe+vn7UsWs35agumJRys7KVI/uA98P7qoGIZ29vb+WIYRhHAxGK7CH33XgtPXTbzfTw7bfIv++/6Xrau2M7i1EXgoUowzRyYPlLOHVKClJTevUfIEVQc0wlgrx+nbp3p4DAQKXlHMkJ8ZRw5pTdJiO8D94P72sKPh/ngfNhGMY5lJeX06F9e6mosFBpqQY7Igf37nGYnzijHxaiDNPIKS8rl2mY1GjXqTP5+PgoR80LiO+YNu2olUreRViPTxw5YrfJCO+D91OzSuPzcR6miwEvL2/yVrk37u4e5O7BQ3NzhfuFfaisqqSioroitIaSoiKbFqEoKqDm1uTm7ibvE6MP7tUM08iBCFILUoIFLjgkVFZ1aa4Eh4VS5+49lKO67N+9S9Wf0wh4H7yfGvh8nIcpwaGh1Klbd+XoHLHt21N4RKRyxDQ3uF+4Pj6+ftRv8JB6C4bwyEiKbtNGCFKWVnrgq8UwjRxsyatZ9tzEH0+v5r0d7O3lLTMDqFmY4M6A8ov2AO+D9zMFnys/X5yHKajCcu0d/48ef+V1uub2u2jB7XfSoy+/Snc/+jiFhIUpP8U0N7hfuD5Y3I+dMpWee+d9uuXe/6Orb7md7n3yaXritcXUoUtX5acYrbAQZRimyQLLRNuOHSmiRZTSco7srEw6ffyYDGqwBfw+3gfvZwo+F59vzkKC7b2e/frTBZfOommXzqbeAwaSn3+A8r9Mc4X7hesDMRrbrj1NuGAazZgzl4aMGkNhERHK/zJ6YCHKMEyTJjyyBXXsWt9KASsyks8XFxcrLcbA75tLko/PxeczDMMw6rhVcQ4DphmA9EYvPfoQpSQmKi3VwKfn3iefpU7d1NP81ICqTEveWkw7Nm1UWogGjRgpt9AioqLo1LGjtG3jP9JP8HBcHJWXm88Zic/s0rOXtHjAz6hVdIwmnyJY3pB25MPXXqGUpLrfQy9ubu40afp0mnvt9RQSanm7D5+bLL4/krXj+x3ZH6ean9OUNh06SF+3PgMHi9egBttWhOvCXz//REsWv1EvswDO8Z5FT1Hr2DZKi35Q0/+/ix6lMydOKC3VwGJyzR130XkXXqzqp4tz2bphPf3vzdfO1hbHVv4VN9xE5824iLw0pnvCEC7vz5bNdGDvHhkRrFarXAuTps+gK66/iYJCQpSW+uRkZ9G3H39Eq379VXx29fWEH+xNC++VwXFGQT/bvulf+vjN1yk9tdplAtfg8utupKkXz9R8PWooLyujE0ePyH57JG4fHRIv0whqveC5mT5rNs1ecI1ZCyXux7aNG+jNZ56WZXdrgywWdz38mEyrZg69/QKfh7Rh7//3JTp94rjSal9QAOO6u/5DA4YO0+z/iCIiGK/27tgm83eaPh9GaBUTQ7fe9wB1692nTvAfcoN+8s5i2rxurdJiO7Bwwi0C390UXPOTom+hSAq+Ww1anh9zoG8eittLu7duPZv3VG1xWxuk5OvWqzd1ES/MJR06dyFPLy/lf7WB52T9yr/o8/fekRkFADJ9wC1k1MRJMuBr15YtMkcyclVbcmdCXALGAoz7/YYMEefWR1PaQI9FAuXfDNNkyc3Opo1/r6pXahEPycgJk6Q4NAceVAiZlb8sV1qqSU5IEINHAa1e8ausoAORlpaSXE/smIIBB/6EeLD/XL6M0sSkG9O2LQUGB9eLrK4NylV+JgaL44cPKS22UEXx4hzgzxTTpq3q52KwhYDHd4P43bl5kzxvrZM5rvnJo0dpy/p18vqhshC2spydRB/frapSiIN//5HVlmpTWlJCPfr0o9YIMLBw7c2Ba4QUMX//vkKmi6kNgk5mzL6MIsVCRQ2I+U/ffYsSTp/zLa2oqJApoPoNGWp1gQASz5ymj994XdyfV2nnlk3inp7UXF1LjcTTp6lT924Uba5PQCT9s4GWfvqJ6Ofn8vLiuwQFh1B3IRDcPYxFDeM9Pnn7TdnnaqgU1wOLQK3XA2Dy3icE0Dsvv0DfLfkf7d+1Uwp1PMe2UyUXHr0GDBT3tb5AqQH3Bf2+oqJun4hq1ZqGjR1n8RnQ2y+KhVD4dsnHUvQ5CgTjZaanUX8hRK0Ji6yMdFr+zVf0xjNPyjEXYwDGAnuQL8ZvRKz3GTSIPJV0aOiTm8W1Rjld/NteJMXHCxEaRR2FqDJdSKJ4xbIvv5DGh9pYe37UwHi6QQjB159eRH/8tIyOHNhfnXRfw3dBn0bfRh/HPIS/IZwjdZRuThT9ecni1ykjLU1pITlWnzl5XN7Ld19+UQjVP6X7kbXgTpwzzh3fAd/p3zV/y3kNC4ia+6UGb80zjBUgNgpV0vLAGvT3bytox6Z/lRb9QLSu+f03evb/7hUr4S0WRSwGB7XzMAoGMYhbtS0RTHywyjxz/z2yVro1cW0NiKPvP/uEXnj4ATpx5LC8ps6kZXS0qrUO54VB01REagW/h99XE3/4PHyuOSAgcP1NwX0uLbFcDhQD/p5tW+np++6hjWtWy75oD3Df5Xcxc3/QCiudmsUfltIKlaIRWiksyKccFT9bLdejBiw0fv72a3rx0YfkAsER4FzycrId1of19gvcM3tlf7BEXm6OxWpkuB54tl969GH64fNPVZ8Je5CVkSmvRQ24C7DkWbMe6gXPFEQVFkOm4PMh0kyx9vyYgkXHR6+/KsTeC3YJnDwo+vzzYoxd/vWX9Rbd5igpLlG9VzC0LP/ma9W+qBXs3C1+7hn67J23pYXcHCxEGcYFwCAECwJErT1X9ZbAFhty3pmum/H5m9etobdeeNbwFq85sOX02lOL5ITlTBCJDGudGtiyzc+t3pLSC34Pv68GPg+faw6Ie7VqX9bAhH/04EFppc5Iq1+2trmCbfAfv/iMvvrogzpCpbFhtF84Gg8PT4tWNjzTeLZrb1U3dizlba2stG0hkpWRQR+8+rK0NtoT9H08A3gWTF1DGgrsiH28+HWzopaFKMO4CEiG/tVH79fZmqyNr78/tWjVSjmyHV9fX4qIaoG9a6WlWuQc3h9Hn7/3rsMsGlhpY7u/xg/QGViqsoRt1LTkJOVIH/g9/L4pjqymBOvX78u+t9lPWA0fX59q/0WN23quAixRG1evpl+Wfqu0NB/gMxrRwvEBcfB79PHxVY7qgmcZzzSebWeDntqiZSuz52YUbMdHtY52yDOM7fhlX31u026aNfAs4JnAs+EKbFq79qyLlinsI8o0C2zxEcXWzL6dO6RA0wIG7C49elLL6Bg5kNW84FOGAcjS9hbO00cIxO59+tTzqfHy8pI+ltgODgwKOvu+YRGR8vfUtpCwNQw/0NrngVdsuw504dzLaeCwEXUGWoicpZ8usbqticAjfMco8f6m723pfGpIT02VqU46de1m2KdQD7DkwKKD+2i6pYbtzrYdO8m69GpBRebAAL/tn39oy/r14qiudQRlVadcNJMCxH0yh5E+iYUCtt9++upLi/0IfQ2+bab3xtKrTfsONEP0CQQZeHqqBzzg8xGstmf7NqXlHMgQAB9CS75glrDlGYUohxCCH6MlzD0Pai9z/Rjfb9jYsRb9AG3xEdV7HXA+SHaPnQz8jNp30fIKDY+Q26dqbjgYIy6cc5kMEjJ9RuDiAx/p1StWiCPzVkIIZowZCAxU+3zTF66t6TUA+P2ho8eczQ2Mn4ts2VKMu8HyGP6R+H1L4625MbrmhWpo46ZeQOOmnC8X7KbgPbdu2CD9hWuDHabBo0ZZLKuMZyhu907pv2zJco/rjDEppl071XM0d31qQL/FTlvfwYMpKLj62qgByyz6mxbffwTrte/cWfS3DvXOB8F7aq4156iSwcI9+/ev14c5ap5pFtgSNY/B4uuPPrBobcGgd8m8q2iIGCCtBVXAerDq11+kcz2CZUyBs/k9TzytOTEyts+xrR+3a6fSUg3ExC333U+jJ07WFpWPAVK8x6tPPH42erI2sPJdetUCGnPeeZoi7RPEZPz7jz+I7/qz6uTWvnMX+s9jT0hHdmeAbaov3nuX/vjpR6XlHBAHNy+8z6JwNAWTwHuvvKQaqTv14kto3s23WLTSGOmTmPR/Fv0G/VGN8WLynCn6oczEYGYitAXcx1/Fc4AIW1MQMYwoY6OWKaPPKBYEf/60jD59Z7FqP4P4vPy6G2jQiFFykacVc88Vvt+dDz9Cg0eOVr3GeI5siZq3ZawyCp7Xf9f+Te++9KLqdi4WGLfd/6Bq5ovU5CR6ZdFjqu42Ndk5ps2aS9GxsZoj7nE+G1avlOdj6o88cPhIuv2BB8Vi3Ly4Avgen7z1phxrTZkxey5dfv2NujMx1IDx8a3nn6uTRQVoGXMR4Lpk8Zu05o/flJa69B8yVIyz86mzEMoIzLIExOPOzf/Sd598LBY/dUUxwPWff+ttcjwyZ9k9dugQvfzYQ9JfVQ28x6iJE+n8S2ZJYWzpnMrE+BS3a4c4nyV09MB+pbUuF112Oc295vo611778p9hGFW69upND73wMk2ecZGmyF6I1tlXL6AFt92pOhBmihUqIk0xGDsTOPsj8MacCMVEhNQ1Wr4jBmFYb+ffejvNWXCtHMxMQRRwvJh0nbUWtlRlCem3zA3E5sDP4/dMsVRNyVZKxaJI7TPByPET6Wox6bSOERO+A0Soq1IsJuMDe3erilCk57pXLOpgSdQjQpsbEJO/fPetqgiFNQ3WUGSBMAXPLp5hU8sgwDM/95pr5TiHrCBaRWhTJzM9gw4fUN9dGzF+At3x4CPS8mxNhIIaKzkW9OjrpiDgKm73LrM1962B+Wn+bbcLcf2AtCBbOyfs2vUfMozufuRxOQaqgfSGeSY++dwzGMYGINBmXT1f1hfWA1anw8eNE6v7EUrLOSAIjx7cL0WHM0GUpbkgojGTp1CfwYN1TyYQZag80qNv/UEJPqi2RKzrBedursoSRCUsUVrFP34OP68mXq1VU7IFWEThS2wK+lPvgYMoIKC+D2xTJzsrS94LU3BNLrhkttxGZMyDXZnVv60wG2Q0afqFcrGttrjBWHXq+HFVf/IuPXvKrW21hV9zBcI9JTGeMmulSqoBVvJps+YYykEq3WrEYkHNpebU0SMy+t8Iw8aMlfcQAlMPcJW4+PIrpFA2BTtlqSb+7SxEGcYGOnXvQR27dDNkgfIXogGJ3tX8ElOTkzWn37AX8A813Q4EmEh69Otn2MKH/JJ9Bw9RjuoCX1GIK2dhrsoSJmMkgi8t0yb+8XPy51VcK5DM2VHBI9j6Upv03cQfbx/7W2AbA9mZGZSjkt0hPCKCOnevnwOSOQeE0eG4fdJ9Rg305YnTppsVk1hEJqlsCYOefftRMNfGr0O1EE2SKZNMgasSdjOMgEVvlx69KCq6tdJyDixcjaRgwj2HO4u/ipi0BubDdh07U0zbdkrLOTCvYQFfe9HPTyjD2EBbsRJVW/VpAQ8rouDVtgwhNiA6nEmZEFdqjv0BgUHSncCohQ/bOQjSUHNDgBuAM4UogkTUAi7AscOHNA/Y+Dn8vCl4XwSa+fg6Jmk/3l9te6xK/Ckvc45l2ZXAxI6JTS0yGEErwRrcSJozCFRZ9tUXqv0evrCooY5n1xy47mrbvrDMoUiEp4bt5eYExFdxcZHcMjclOraNTe4jCGBVKyeMxUJ+fp5uVy+8H4K5jI77fgEB0jJqiuwzJoFRLEQZxgZ8hLAx6o+H3/P185dRr6YgubelMqGOoKSkhEpVVureQkDatL0mviesde4qfqIIBFMTEY4CQg4WbLXtr6Qzp6WvG8SNJfD/+Dn8vCkhYeEyyMxRVjgvby8ZnWoKtkgRMe7Ma+kSiHuBSU3te2NSNxrB3xzAAvCf1SvrBWPVMGLCBOo/dLhFIYL3UEumj/ybzq6g1hiAH3OhEIVq4HrZMm54eHqIsbr+OF1ZUWkxOt8cMBzYssuC81FLl4exCvNb7VGWhSjDMBIMWKqJtIXONiq2XRFzVZawhYVE8RgoLVHtw3tQ1VcTAQOWLEi2gommlTh/NTb+vbpOWcjmAvosSriaIos1uDedfmtvTh47Sn8s+8FspoHzZ15qsSADwKJMzdIGVxFpuW9C44a9wDirhiN8yhsLLEQZhmlWYHLt2a+/clQX5E+1Vi4R/28uzyre19rkbQsIGujYrZtqUALqzL/65CKZv9LZbh1M4wKpx3774XvVspKwyiFVD3JhMowzYCHKMEyzAtHUCGJR2zY6c+IEZVhJio7/x8+ZgvfD+5rL12cPYDXp3ruvTCqtBlwG/rvoUVp4zdUyT63RaFmm6QIL6PZN/9KWDeuUlrogsHDUhEkO7ccMUxsWogzDNCvgZoDqLK3btFVazpGVmUEnjxwx69iPdvw/fs4UvB/e19FuDBFRUTJBtSW/XeSFRKWhO+ZdRq8++Tjt27GdraSMJCUxgX5dql5MAzmCL7rsCtWcoQzjKFiIMgzT7AgOCaWuPXoqR+eA/+ehuL1UbCZ1Ftrx/2p+pHg/vK+jwdbpsHHjaOYV86wGN8D6tWntGnrqvoVsJWVkwvqVv/wsC2aocd5FF1PXnr2alE844/qwEGUYptkBX8suYsJVsyoeP3yYss3UTEY7/t8UvA/eT2/iZ6Mgtc5Fl19JNy68V7NPKltJmzcILDqwZzet+V29tCSS1qNErFqaNYZxJCxEGYZpdsDXEpHzannusHWJ1EymaZxk2ibRjv83Be+D93Nm5CtE74Tzp9HTi9+h0ZMmK63WMbWSonY86qozTRvkDP3l229US/giFzLqr0dG1a86xjCOhoUowzDNkvDICJlT1BQUEzi0b1+90qM4RrtaZSO8D97P2WALFdVL7njgYXr5wyXSdxTWUq3ASvrpO2/Rw7ffQv+u+dupxQUY52EtZ+ioiZOor4ESvgxjD7jXMQzTLEH1I1RBUvOzRA18pLipDY7Rbgp+35HVlLQAAYEcptfddTe98+33dOdDj1D33n2U/7VOemoKvfXCs/THTz8aSn7NuC6w5B8/fIhWfP+das7Q6DZt5AJGrVACwzgDFqIMwzRLICBRBQnVkExBYvi05GTlqBocqyWMd3Q1Jb0gjdToSefRolffoFc+/oxmXb1ARkNbAwL0u08+pp2bN+kuB8i4LgX5efSrEKGo720K8tFecOkcimnXXmlhGOfDQpRhmGYLqiDBkmhKTlY2HT144GzpSPyNY7Sb4uhqSkaBlTSmbVuae811tPjLb+jB51+k4WPHWxTMKJcJ0ZLFPqNNAlhAt27YQNv/3ai01KX/sGE0bOzY6ipIDNNAsBBlGKbZYq7KUlVVZXUaJ8UfVPqNimO0m+Loakr2AFH9/YcMo/88/gS9+cXXNGPOZWbzkJ44fJgO79/HVtEmQOKZ0/TL0m9U3S1CwsJo+qw5Tkk5xjCWYCHKMEyzxVKVpVPHjlJWRvV2Jv7GsSnOqKZkbyKjWtKVN95MNy28l3z96vu1ItckxGi5Yg1mGidYPP31808Uf/Kk0lKX8y68mLr06Mk5Q5kGh4UowzDNFktVltJTU+n08eNyWx5/49gUZ1VTsjfYih08cjSNHD9RaanLSSG6iwsLlSOmsQFrNiLk1/35h9JSF84ZyrgSLEQZhmnWmKuyhBKIR/bHUWFBgfxbrSSis6opOQJfX1/qN3So6hZ9RloqFeTnK0dMYwOBScu/+Ur2XVM4ZyjjarAQZRimWWOpytLRQwcp8fQp+bcpzq6mZG8QzBQUHKJ6/kUFhVRU1Lwtokh7pJbuyNVBztB1K/+UOW/VGDflfOo3ZKjL5wytCRRkmj4sRBmGkfj6+armwkSgQ2mJDbklxYReVlpGVeKPKfCtbOi0R5iQzVVZSjh1krZsWC//NqUhqinZG18/f3HP6yfAhwhQq6cPIMDV7llJcQlVVhgXbpXiM/HShZubzH+pFvVdUlwkRJn6d9ACChiUFBcrR42Dmpyhf/70o2pgXWz79rKevJpvsBE8vTylhdUU9B8Z6CfOxwj4LVz7ykrjYtTdzV3V9xtggWFaOc0ZwIXH38w5lYjrZcs54dkrL69fkMLdw108H67tw85ClGEYCfzF1KyCSOmTl5tteJCsFL+Xk5UlxagpiDb3dAGLorkqS9ie/uW7b1S3qRuqmpIzKC8rrVdZCsATFvfM3b2+8MN2vlrVKS2gb+H383Lrl5+0BCZ2uBh4eNY/n6zMDJvcCwrz8ygvp366LlcmLyeHfln6rdmcodNnz6VoFX9oo0DgqIlaCCL4VBu1auL3MtPSbLJIY7HkHxikHNUlIz1NNZOAo3EXCyY14Q7kOdlQ2axYLLxw/03BIs0/MEAu2lwVFqIMw0h8ff1kShdTIERPHDli1kJmDQS9HI7bJ8RG/UklPCJSTJANv1q3VGVJDfxcQ1dTshWIv8KCPFWrH76XmqUUk1lQSIhYtNRfPCBVUFpyknKkD4jeIwcOGBKyOB81y1dGSiqdOXncUBoqCKHD++MoMyNDaXF9cM6b16+l7RvVc4YOHjmKhowao7mPawGLSGRhUOPQvr2qPqpayM7MNFuOVCv4nvDfVstocfLoEbnwcTaQgqHhEaoL/jMnTpzN0qEXPMuJp09TSmKC0nIO7HoEBgXLRZurwkKUYRiJX0AAdezSVTmqy4ZVf1Fi/BnlSDsQAQf27KZdWzcrLefABNG2YyeX8LHEpGWuypIarlZNyQhYWBw9eFDVaujt60M+KpMlJrMWLVtTWGSk0nIOWL3X/PGbWLjoEx+YRA/t3UOrV/yitOgjTCxm1LIeIA3V2j9+p2xxXnqBKPh92Q+GF18NAdxHVvywVHV7Nlzcr+mz5whBom4hNIqnh4d0T1ETVnju9+3crnshUH3ffpN90xbgMtO2Q0fV75ySmEirRH/DItuZ4JxQZCIktH6AY4IQkpvXrTVkFYUldPVvv6oK/5atW4v730I5ck1YiDIMI8GkAnHl41PfEoZchO+8+Hy1ZVPjxIKtr41r/qYPXvuv6gCJqN1O3bq5jI+luSpLarTv3NklqylpBfdm/cq/aPnXXyotdYGVC1YUNSBquvXqrRzVZfWKFfT1/z6kLI2WRFhj1/75O73x7FPSCmYELKA6d+uuHNVlx6Z/6fP33qaUpESlxTIQAdv+2UCvPPGo2fybrgjE/x8/LZNWMVPc3NxpysWXUMeu4lmzs1UMz25su3ZiMVDfRQXW7U/eXizHAK3b4Cij+/m7b9PSTz9R3UHRC/y4zbki/LFsGX354XuUkZamtDgHLJxi29cfZ/B9f/jiM/pJPJP5edpdVNC3P3n7TSli1UDBDewauDJuYjXqfI9dhnEyZ06eoJcefUiuhGuDSfXeJ5+VgsgcGES//ugD6XtlCup4XzrvasN+jgf37aWXxXmZ+sYhqOD+p58Tq9lopcU8mMDfeObJeltZ8Am75b77afTEyZrFHraGFj/3DO3buUNpqU/7zl2o3+AhFKyyqgfw60pOiKddW7ZY3P5CCpm5112vKnwbAkQb//zdN/JeW+Py62+kC+dcZpN/q9E+iYUAfvfg3r1UWlo/pZQlMNyniolrx6ZNlJ6aorTWx9L3w3vs3raF3nj6SbM+mLCQ9R4wSCb7V9vix7VGrtK927dbnXS1PKPHDh2kVxY9ZvY7wfreo28/KaDVqmBhWzv+1Enas22rVUGM/nrnw4/IPKxqwg7XZ9vGDfTmM09L615tevUfQHc9/BiFhpu3vOvtF+gPW4V4fvvF51QtfPBJnDhtuvh941YxWP47CrHftWeversA+I7f/u8j1fGxhogWUdR/6FBqFROruouA8e/g3j1yoWvNL3Tg8JF0+wMPml0o1QbvBSv9R6+9qmopBub6BlyG0A6rqun4iT771vPPieeorhuEljEX92v9qpX0/isvmRXoOI/+Q4dTu06dzLouYXF/SFwvWJ7NWe6xoFy46EnRZ9QXauDYoUP08mMP1fMrbhkdTfc99Sy1URHNWkC/+OStN2nVr/V3Oq66+Vbpr1zTF1iIMs0CFqLqg6IpGCQ3iZX1uy+/YDjwRAtIAn/3o4ukZdFVwFCIrcRXn3jcYpALJkAM7rA02GJhMtIna0QgRI4eq4keYOm9+7EnLD4TBXl59L83X5cuG45GyzOKHK8/fvk5/fD5p0qL43A1Iapl8WgP4Id71yOPiUXo0Hrf++TRo/TaU4soyYD7jl70CFGA8RHj2c7Nm5QW7WD8/Y941juIxXdtbBGiAG4s7778Yr3ftzeXXjWfLrnyKlXXiRpcQYhqm50YhmkWYPAcOGKEHCQcBSw0l117PbXr2FFpcQ0wuZqrslSb6LZtqVV0jE0i1CiwfBw7eNBhIhTbuJMvvMjqvQkIChKLsPlCFJm3tDgTTLRTL75EBuQ0JyB64c+KlE2OBoszbP2r2a7QX/BMm4sIb0gg+q+84Sbpy6oXiNiM1FTV72wLCAqde821FN2mjdJif/As4JmwJEJdBRaiDMPUARaf6bPmyK1zCBN7golqwW130pBRozVbaZ2JuSpLtZHVlMy4JTgDoylxtDDlootlDXItFn6I9uv/338MTfCOAIJj/q23U/8hQ5WW5gEsTxXlzkn+bq7v4VnGM41n2xXFaJsOHemmhfca2oGxh6+qGu3Fc3PTwvuoVUyM0mI/8AzgWbBkeXclWIgymsG2bf6hfZTw5ft0/LUn5Cv+83cod+92qnLx6FIvL/UcmdW5M63UW3ZzU52YIdIQkWmLoMJ5qdV79vZG0vD6uRHVwPaGWooS5I9Dsm+cv15g8br8hpvotvsfkM719gDWsweefYHGTz3fJt9KR4II/h79+pv1W0V7tz59zfpt6QH9EalVTMF981TJiwlghVVNq2Qj8Em77q67ad7Nt6j6UKqBc8E9xfbd+PMvkM+DLcS2a6/62Zauhykto2PozocflS4ztlqCsDWpls4MSdytJYTH/+PnTMFzquYjWRu9/QK5PN3cHW+dx3lbuqZ4pvFs4xm31VKOMdGcaEQfwbXQA/pq5+495Lmdf8mlcgtdC7iuasng8flqfVVP8njMG/BBffC5l2jkhElKq23g/qDv4xnAs6AF9Cm164k+aMszhIICfir9WK0feSwSKP9mGoiyzDTK27uDcrZvpJwdmylj9a+UtXE1ZW1aS3n7dlDhqaNUdPwwVRQWkLsQKB4qN9fRlOVkUfIPn1HaH8uoJDmBKvJz5as0NYny9myjvAO7yScqmrxCxQrMgPBxNJgAEECDoIbaTDh/msytZ0kY1Qi9fTt21ElNE9u+nQzosEWoQQSfOXFS+oXVgM9DlGvfwUM0DbgQRWVlpdJHrLbFos+gQdK6pVVYmILPhrULIiM6tq30GUUwiJ5tKnz28HETaN6NN9Pca66Tk3tDbGlrBecG37P40ydlXkxTBgwfTlMvmkm+drD6eIvJNjcnWwYdiWVedaMAPnAjJ05UnQRwfuircbt2SD9NW8Bk3HvgIJp5xTwpQuG/aERgw3dw8IiRNHjUaCGSfSg9BYnttaXFwTng9+bfdjvNnn+NnJwP7N4t/ufc9Rg9+TzRh8bLRZsWcN3wXcZMOo+CQkMpLzubcrK1pXDCs9dHXJMrRX+9QizEIIjixHNVu8/3HzKMJl4w3awYxT1CTl5smdfuQ3jvSdMvlL7FSGxuDj39Ap+FnK+njh0V41v9HJL2BIFGF1wymyJamA96wvkgUn3seVOpa6/estpPalKSGJe0GSowlsIqf+N/7qWhY8bS4bi4OsFj+O7nz7xUCl18ll5grcX9Gz1pMgWLRQaeIUvBaQjQmjzjwnr+qJ5CbKJPILitdrolWF6xHa5nxyQwOJiGjR5DA0eMkvl5EcWv9fmpAdlOLrh0Ft149z00VLyX2thhDvnMpqbWmRuxqEQFrgHiWukV/TW4i/tTUVlBu7ZsrhOUBZ/TGWLerG2t5WClBqKqvEyIzk2UuWEllaTUdUq3iLi5fm07UuSECyigWx+brHFaKc/Po6Sln1C+EJuWcBcDYospMyls+DhyM9h5HQkeBjjToxQhMgtjsmgVG6s5j6X0F0pLlYMrVr4QVVod5i2BrbXk+PjqMprivDCxYzWrZwCAtTo1OUlMYDly7vIUA1prMXHYq5RfDRC6SJosg3ksjBywJISFR8gAC2f0UXtTp68oYMDGdrSaBdsoiB5PFtdTRjuL64mFCfqkOYtsDRBW6Skpsi/qRvSx4JAQGZTkqHsDH1YE25g7P/SPkNAwmcKr9jnU6V8Cvc+oOeo8Y2qIawJBgOAUCMYaEHWN9Dj5CCbU+Vxh4ZYkFr/lqChm5v3NobdfWP1+NmLLeIexCYEwqHRVVak+aECYY4vatDAB+gEEtiz96qB+q/asA1i0cU5yV0kFfC8IODyL+F72nBOsPT81aB0vrAExjf6D6kzAyBykhum9N3eNWIg2AOX5uZT8w+eUF7dLHBm7/BB6Lc6/hMJHn+fQiR5b7ml/LaeMdX9gVFZazQOLbdT02RQ6dKxDz4thGIZhmMYPKwUnU1lWKre3bRGhwDMknAK69HS42Cs6fVy6DGgRoaCytER8v58of7/4frzGYRiGYRjGAixEnUzBoTjK3bNN/MsGkebmRkG9+pNPC8dWdoFozt6ynsrzcpQWbVQU5ksramma+YTZDMMwDMMwLESdSGVJMeXu3kKVih+GUTyDQii4zyByMxBYoIfihNNUcMxYvd+S5ERKX/ubtJAyDMMwDMOowULUiSDavPDkUeXIKG4U1LMf+UY7LhEuqCorpdydm6g8V5819BxVMhNA/oE9vEXPMAzDMIwqLESdhRBjsDBWFJgvHagFj8BACu43hNw0pjIxSklqEuUfrJs+RC+wAGdtXiuDsxiGYRiGYUxhIeok4G9ZeOIwVWnMp2aOgM49yDe2vXLkGJByIS9uJ5XlZistxkGwE1tFGYZhGIZRg4Wok6jIz5NWRltAns7gPoNliiRHUpaVUR3VrzFS3hJVZWUy6l5vwBPDMAzDME0fh+QRLU1PpZydm6jg8D6qLCkhdx9fChk4gkIGjyR3B28puyoFh+NkacwKnRUTauPfsRvFzLuZPAODlBb7A2to1sa/KXXFUputtwDppfw796CWM+aST8topVUd+KXmH4qjnF2bzkbc+7aOpYhx55OP+JthGIZhmKaFXYUoosFRKShj/V+qkeGB3ftS69nzZdR3c0JWF1j3J6X9uUyIu3MlGPXg5uFJUdNmU9jICQ7NHYoqSglfvEeFxw8pLUZxo4CuPanlhZeRT5T1NFNFp45RihC/RSrBXChp2vLiKyik/zDxtm5KK8MwDMMwjR27KZrS9BQ688limT/SXHoiBL8gmTv8JZsTKOdZnHDKsAgFXuGRFNi1l+MT2J86SsWJ9Wts6yWo9wCKueIGqyIU1yRzwyo6/dFrqiIUwIqc+utSKjxxRGlhGIZhGKYpYBdVU5IUr1jRDist5qiivH07qPDoAeW4eWC7f6gbBXTqJsRohHLsGLBAgG+orXlOfVu3oajzLyEP/7p1g01B+dCMv1dQ6m9LZYS9JeBjCmu7refGMAzDMIzrYLMQRWBL0g+fUXHiGaXFMrBuQezAH7C5AGtxeU6WcqQfd19f6dbg5umltDiGkqQEKjSYwL4G+AOHj5tK3pEtlRZ1pC/q5nWUvuY3KUi1gO374uR45YhhGIZhmMaOTUIUVXPSV/1CRadPKC3aKE6Kp4pC40E7jQkILoh0WyoM+bSKId/YdsqRY8B55h/aa2PKJjcK7jtYbstb8+UsOnGYMiBCy8qUFutgEVOSKIQop4JiGIZhmCaBcSEqxED+/l2Uu3srDqrbNFKRn9tskpwj8rw46Yxx/1B3d+kb6hHguEh5gK1vmcBeCFKjeIWFU+iwcVYzI6AWffrfv1G5TtGLa1iakSJFM8MwDMMwjR/DQrS8IJ+yNq83ZOmrLC2liqIC5ahpU1lYKNNZGcVTCFAksXdokJJYVCBKvjQlUWkwgDi/4H5DZboli2ABc2APFZ40EnhUJaP6qyqNB30xDMMwDOM6GFY3JSkJ4mVQuLhh57Z5pOEpzUqj8uxM5Ug/2Jb3bmHZ39JWsJjI37/bpmwGPpEtKXTQSHLz9FRa1KksL6OCIwd0bcnXBv2GEzgxDMMwTNPAmBCtqpKR8pXFxvw83dw9HB544xKI6wRraEWJwUhvd3fy79CF3H39lQbHUJKcQIVmUidpQojDwB59ZYopa6DWPhYxRpE19jmXKMMwDMM0CQwJUfjowb/PqK+eR2AQeQaHKkdNF/g0lsA/tMxYhSIPvwAhRLs6dFse97Dg6AHpt2sUr7BICh4wzKo1FCD9ktHqUm4eHtXWYbGQYRiGYRim8eM4hWMBv9j2Di1T6SpgyxspkYTcq27QiY8QXd5RrZQjx4Agpbz9u20IAHKjwO59xLk69jwB8pL6teng8KT+DMMwDMM4B0MzOoQALJpGBAHKNQb27Fe9xdrEQWaAMqP+oW5u5Neuk7SKOpLi08epNC1ZOdKPR2AgBfcZqNnVwt3XT/YBI/i17SiT5TMMwzAM0zQwZloSIsk3ug256xYUbkKE9pdR4M0BBCkhVZER3L19pPDCdrSjQFGB/EP7rFY1soR/u86iL7RVjqzjERBIPq2sRNar4BkUIuvsQ8gyDMMwDNM0MLzH6RvTjgI6dlOOtOEb04YiJ06TIqvJowQqIVWVEWBxRsS8IynNTKfCE9bKspoH+UKD+gyU1ZS0gt8J7j/UavnP2sD3NHzMZPLX2d8YhmEYhnFtDAtRiI8IISqtlXKsAaIqes61mn++sSMDldKSDSeyRz5OhwZ0IXfosUPGXQcECBzyb99FWsj1ENCpO4UNH6vJtcPNw5Mixl9A4aMms28owzAMwzQxbJrZ4a/XetZ88o6IUlrUQDBLX2qz4HbysZbsvAmBnJzVvpf6A5WwHQ+LsyNTXFUUF8ltea113ushxGdAl56GxDIsnBCXYSMmWHQ9wDZ+q5lXUuTE6Zoi8hmGYRiGaVzYbGLy79iV2lxzJwV07SXFyVngRxrbnmLm3USx828jr/AWyn80D5AOqSwrQznSB1wX4IPrSAtgSXI8FSecUo704+EfIIRoL8M+rLCoR02bTVHT50rBWRsEM4WNGE8d7nyEQoeOcaifLMMwDMMwDYdblUD5t20gyX1asrQCYjvVN7YdeQYGK//Z/EBuzoQv3jcUrAQ3hjYL7tCUIN4ISNWUvnK5rPdutLY8/DVj5t1slzRcCJYqOn1C/u0ZEka+MW15G55hGIZhmgH2m+3d3MgnqjUF9Rog80o2ZxEKUQ5rqJE6/ADXEUn/HQVyh+YfijMsQiESsS0Pq6g9gHU0oEsPCuo9gPzatGcRyjAMwzDNBJ7xHQCMzIiYr6rQ73/pDP9QbMmXpqcoR/rxEIuMgE7dWDAyDMMwDGMTrCQcAPJzlmYIoWfA6wH+oQjqcpTIqyovowLkDi02njsU1Y0cnVqKYRiGYZimDwtRB4At+fKcbOVIH8iv6RUWoRzZnzJxXtW5Q425BiN6HQUJmkUuWIZhGCukJifROy89T1dPm0KXTRpH18+8kD59ZzFlZaQrP8E0JcrLymjDqr/onusXyPuN12P/7w7a/u9GqjRcKrt5w0LUAVQU5Es/TCN4hoY51L+2+MwJKssynjvUKyRMZkrQmzuUYRimqQFR8s/qVbTm99+otKQ6JiA/L5d+X/Yj7di0SQaGMk2LlKQk+v7zTyn+5EmlhejQvr207KsvxOLDWKac5g4LUQeAQKWKokLlSA9uMpG9o6yNclv+2EHDQVQAZUe9IppXKi6GYRg1EA+Qn1Pf6FBRXk7ZmWIeMFjQhHFdiouKqLiw/vyeJ/pBsaF5n2Eham8QMZ+dSVVipawXBCp5R7R0WN7M8twcKjp9XDnSj5uXl4yWd3dgIJWrgLRbOds3UuLXH9KJ15+kk28/T8k/fUWFQsizlYNhGGuwCG1eVFZW8Na8QeyXR5SRoKRn2h8/Usa6P6Uo1QMSuUdfcSMFduuttNiX3D3bKGnpJzJfpxGQVir2mjuFWG66FlH49mas/5Nytv1jxqrtJu5PL2p50eUNWq4Wj+2Zkydo/66dVG60OpYJAYFB1KVnT4pu05bcOSMCw1ilrLSUvv7oA/pl6bdKyzlmXb2ALp13NXmKBXxjRm2s8RVzVb8hQ6lFy+ZRsrs2xw4dopcfe4gy0+v6ALeMjqb7nnqW2rTvoLQwWmEhamdQ2hNiL3fXFqVFOxB4sfNvd0hEOkp5pvz6HWVt/BtH1Y06QZWjVhdf4dDUUg0FMh1kblxN6atXUGVxkdJqHhQbQHlb1M1vCH/ZtORkeu2pRXT04AGlxX6EhIXRtEtn0/jzp1FoeLjSyjCMKc1BiJoba4aPHU83LryHAoOaV85wFqL2h80edgaCpjzXYMR8YLDDEtmXF+RR0alj4l/GRGh10vmeTVKEliQn0JlP3qLUFT9oEqGgLDOdEr/5n/S5bQiyMzMpLSVZObIvOVlZ9JWYXO+/8ToZiIGADIZhmifmxpqkhHgqLChQjhjGOCxE7UxFYQGV5+UqR/rwDo8kDyH4HAHEVllmmnKkH+/wFuQX2145aiJUVVH+oX105uM3qODIfjRUt2sEC470v5YbTtVlCxXwR3KwD1pOdpZMS/Pbj9+fjQhmGKZ5YW6sqagol9v2DGMrLETtDFI3abWq1cHNjbzCIok8PJUG+wG/1cLjh6nCyHlJ3MivfWfyDA5VjpsAYgDN3budEr/5SAaXGaU44TQVHD+kHDU9sPX43ZKPadPaNRx8wTAMw9gdFqJ2BvlDjaRHQqQ8coi6OcDfEBHghSePSPFlBHff6lrwSGbfJIAI3beDkn/4TC4cbKGyolyWS23KkfQlJcX0wxefUcLpU0oLwzAMw9gHm4KVyvPzZIL04qR4Ks/NkpbA0ow0WRkIATchg0bKBOjNBnEpM/9ZRakrlkorpB7cff0o5vIbKLBHX6XFfsCPMeGL94XoylNa9OEb3UYGUdmr4hNEW0niaSpOTqAS0Xcqy8qoLCtd1uZHZH5gtz4U0K23w8qcwjqc+O3/ZL5XW8ECosWUmRQ+dopTa+8f3LeXXn70IcrLresGEhnVkq6+9TaKiIxSWqxTVVVJyQkJtO3ff2jL+vXyWI3Z86+hS668qtEHXzCMvWgOwUrmxprY9u3p/qefo5ato5WW5gEHK9kfXTMnhEzWv2vozJLFdPiJ/9CRpxaKf78p0xWhPWfnZpmnMnf3VtG2TL4QRd5cgMCC36AR65iHEKKO2PrGuRSdPEqVRQadyt3cyL9Td5vODedQKM4hZfnXdOK1J+ngw7fSiTefoaTvllDmhpWUvXktFRyOo8Jjh2Q/Sly6RJzzEeW37UtpWrI8D3uIUICSrH7tOjpVhFrC19+POnTpKtMwaX117dWbxk6ZSv95dBE98uLLZlOybF6/1mEBUgzDMEzzRNPsCcsnJu+jzz1Aycu+oPwDu+V2rzXKMlKpyoYqPo2OyorqiHkDRmZYRJFH1N7ASl144oghcQxktLwQooaS7IvrkH9wL51842k69c4L0lpcnHQGmX+VH1CnsriYyjLtXyoN+VPTV/1afQ52AnX3fWPaKUeNG4jpXv0H0OXX30Q+KkFzSOOSFH9G3FYOUGAYhmHsg1UhChGKvJgQEXqtmxBXbg4IvnFVKsvL5fUygod/gPTFtDewAJakJCpH+vGOiCKf6DbKkQ6EWIFlHJWJ9Ao/iF67XwtFFOft36U02I5nUAiFDh3tsJKsDUG1GO1Pnbp3V1rOgdJ2CadPc/UQhmEYC8CvHnlXV/6ynH757huLr79/W0FnTpxo1sGgFn1E4eeYvuoXyljzm26fR/HWFD56IkVdMLvpBLlYoSwni+I/WSwjqfUS3HcwtZ5zjV1FDaygmRv+orTffzRw/wRuuIeTxT2cpdsiinRR8Z+/K4WwXrxCwyl2/m12tTTCgp/w5QdKmiY7IARbxNip1OK8ixqkfzvSb8uS39vMK+bR7AXXkpcOvzf0w+TEBNq9bSvt372LjuyPq+dfpUabDh2oU7fu1GfgYPEaJBPtGwXDnDyHLZvpwN49dFC8kB/RCJOmz6Arrr+JgkJClBbtFBUW0qG4vbR761Y6duignKxQl9wSfv7+1K1Xb+oiXv0GD6EOnbvYxe8Q+WFPHD0i78uRuH3ivPbJ87MFNzd3mj5rtugj14jzDlBa61OQn08/fvEZrfhh6dnvH922Ld167/9Rl569qLS0hOJ27qBtG/+R9ytRLIBMGTVxEs2/9Q5NRReMXPfaeHp60aVXXU0z5lxGPrUWydZ8RC++4kp57vge6PuH4+KovNx8Xt7wyEj5/Xv26y/vdavomAZ3+3FFH1GjY4o1+g8ZStffvZCiWrVWWupjyUf0urvupgO7d9MfP/2o+1kKCg6m6aJ/TWiGhUQsClEkQIeYMJKg3d3Lm1rNuppCBgxXWoyBiGSIGQS0lCTHU4WSQLeypIhKUpOpSuWhRicty87QVe8d2+KewZhYlKh1IcLgF4mUSohkR6J5BGAh+AoCSU2YlaQmUfySxVSakaq0aEUIvlFCtE+fY2wL3AzYlk/45iPK379badGH0QAqJPVP+eVbytq0DkfVjTqAK0DMvJvII8B+yf3zD4jJTFwL9bKd+vFv35lirryZPEMaJqWVIycHTNDLv/1aTrCmTL34Epp38y2qW/emYGhBacCfvvqSNv69yiZLqq+fH02fPVd+vl5BmnjmtExB9e/aNeKcbLfm4rvf+fAjNHjkaDk2aAGTElJgff/ZEkpLSVFajdG9dx+aIxYDPfsPMFSKFfc3btdOWvrZJ3RI9CN7gwn13qeeleepBvrFdiHM3nzuaWllr83ICZOo94CBtOzLzyk1OUlpVQfi8Jb77qfREyebFWv2vO4Qifc++axYHHVTWiwL0QHDhksr1x4hloyAewvf7Ysvv5Jax7bR3NfsjSsJUXuOKWrgmkNMTpp+odlny5wQtRchoWHyHIaMHkMedtQDrozZUQzb8Fmb1xkSocBTCDa9CdAhKnO2baTTH75Kh59cSAf+70Y69tIjMjgq4Yv3pH9f1qY18oXAqOKEU3Lb2fQF4apHhAIIlJKUpHPvk5wgA2gQSIPPS1/5MyUIUX7yrefoyNP3VJeCNPF/hQAzEpzl5g6hGyzFrz0pzUyTUelGQS11I9vyCFjL27dT/MuAL6F4+P06dCF3P/PWFL1gYVJ05rgNeVTrggVKiykXN5gIdTSY1D3NWHktWXNqgwl464b19Mz999CGVX/ZPGFAsHwvhNMLDz9AJ44clhOSNXDfIQKevu8e2rhmtV1EKMB3kwJKwzkATFgfvf4qvfvyCzaLIQBh8Ly4Dsu//pJKiouVVm3g538Wi4wXhbBwhAgFpSWllJeTbf4eifYiMd6Wl9W3SEJcvP/KS1ZFKKisrL4P5u6Cva87RGeZjvF95+ZNhkUowDOz5vff6Nn/u5d2b91id9HV2LD3mKIG3jMrI8PhxUIsgUIii59/hn7/8XvZ55oD7srf9ZCJum3YxvSNbSfFqFbK83Mp4esPKfG7JfJzjaYacgaonpS+cjllrvuzzpY3clJCjOpGTPweAQH2XfFisD99wnCVJ4jigE7dyBMCWQf4/jm7thj3lfXzJ//2Xey6HYUFTmmamIg0CgdLwHUictJ0IZa7Ki2MKRCAm9etobdeeNbw9rc5sK2KutcQo5aACDp68CB9+NorlJGmd4fCfmBS++DVl2n9yj+VFvuACQplWLG9DX80LeDn8PP4vaY+wTnqujcEENFvPPMk7dj0r3y2miOOHFNcETyf3y75H239Z32zuOeqsz3EFbYykZzdCPCZ8xcTNbbntQDLIlI9GbaiNQC4RnlxO+tcI1jcjPhiurl7CAEWYFeLKCyzhccOqrouaAHppJC2Sa+rAPLI4nON3kcZHNXSvH+OIYQosZc1LLBnP5kft6H9tlwVCMDD++Po8/ferbftai+Q8/Szd9+m9FTzVi7UwP592feUkmQ8UM8cPr4+1T5cVp5XbAsv++pzKSAcBbaEN65ebTXQAf+Pn1PbQm6sePv4UFh4RI0z1Vkcdd3hExwYZD93IT3Ap/arj96X29LNDWeMKa4Ivuu3Sz6mM6dOKi1NF49FAuXfZynPyaKM1SsMC1EEm0SOmyqjiq0iOlnuri2UsfZ3IeK0O4+7ArCOBfUacNZqiC1ppLYinSsYvA98aSHC7AUEYeb6v6jCYP5QJLEPHzVJpm/SClZuuJd5+3bI+6obMbGH9B9KgT362V3oofBC0WnbH2jco6Be/Rs8AC89NVVuY5rWgA8ODaVREyfbNGFi4Ifz/57t25SWc3Ts2pX6Dx1mduseAnDpp0usbvvCz7NLj54UFR1NUa3rviJaRFFBXp4MpjEHvn9YRAR16tqN3E0WSzh/bF/DjwxBL+ZA8v+O3brX+3xLLySrnjH3cuo3ZIj0UTQHziFu9076bsn/LFof4YfWUXyHmHbtVD8PYis327x7FLYQYTHrO3iw9M00BwQ5xHtmeprSog4CLpCHVu1cTF9hEZHy3Ey3MdE3ho0dS9Ft2qrv8ohrc/rEcRnAo2V7FQFQ7Tt3plhx7Ws+G+993oUX0dAx48jL+5zBQ+t1V3tPS6/2nbvQJfOups7de9b5Tvju+3bukEJJCxCz6Pcto2PqvD/6IgS0pf6Ka41Aqe59+ph9/hyBI8caLWgdU8xdW7VXi5atpNAz/U4AgWI9+varN67UAGs7rgfulznQJ8eeN4UuuuxKmjFnLk2adiFNnDajzmvCBdOo94BBcgyAHzv6rin5ubnSZxTBiubOpymgGqyUhxrc3y2ReReNENRnIEXPuVaTiCnLTKP4T9+xa25HZyErDi24QwpvDK5GqypBsCNK3K9tR6XFRsS55OzYREk/fqbbV1YiBtqIsVOoxdRLdFlE4Web+PVHlH9wj9KiD2zLR19xIwV266202A9b+3QNvrHtqc382xvcP9SRAQQQB78u/ZY+f+8dpeUciBhfcPudqsFKUgTs2kmvPvE45au4hAQEBtKlVy2gMeedJwdXS+C9UhITacX339HKX39WjXCGOPjPY09Qq5gYpaUaCNifv/tGNdgKjJ96Ac2cd1V1RLIVq6ZRigoLaMniN2nNH78pLXVBdO6lV82nzmLitBaQgMkS/oZff/yhavQ4RNX8W2+TgVweKgIF1tA/f1pGn76zWFX4QXxeft0NNGjEqDoR4dbAFim2jHHPa2MtmAsL1g2rV9K7L71o0ed45PiJNG3WHLFY6KY5aMPadUcgFCqEoYiDPQJBIHbNBSvVAJF5iehvCD6x1u9h5V/16y8yrY+aSEKxiXueeFouFpxFQwYrWRtTkFECCwQ803qCGC3dN2sVsawFK/UeOIiuu/NusVjSFmCG5wHf0ZwvM+71wkVPWozkb+zUMzthK7fg6AExYZtfmVkClqKAzj01pSHCDciL2yWjzRsjCOZB/k+ABwYiR0XXWwXXzK5pm8Q9LDxx2JgIFUg/TSPb8uI+FifqT11Vg3eLVuTbOlY5si/+nbrZReiXZ2dSaZZlq1JzBWLxyIH9ZkXobfc/KFP7WJuMAQZwCMz5t95O8268WVVgJSfEU/zJE/WeuVIxyZw6dlQ5qgvEDUqgto6JdZgIBZnpGXT4gLqVbMT4CXTHg49Qt959NIkhWEWHjR1H9z35jExnZQrcTuJ275IBQGoUFxbSgb27VUUoUmTdK4QNotX1iFBHgnt9xfU30i33I5WTdaFeG0vXffjY8XTXw49Ja5c9RKgWIHgfeuFlmjzjIk39HqJ1thBCC267s46lt4bMjAw6efRos/AbBJbGFP+AALr9gYfoormX25TazZ5ANN5w90KKaWtmN0AF7P5ZKySClxFt0VioJ0SRHqko/pT4l7EvjYhi/3adMJMoLeZB2UkkGG9sW/IAifr92nUWIlJZNSlCFH/rBe9hz63estwcKjp9TDnSj3dUa2nt1YX43ghwQ8CWIUR/8e/Qxa4pm2oDf2XviBbiX7aJD5ldITHe0H1u6iAi21wQ0ZjJU6jP4MG6XS5glRg5YSL16FM/hRi21jBJlZtYS2ERhU+dKRA4sFYEBAQqLY4BE0aK6COZafUXLPAthZXPSA5SiOfzL5mlKlBOHT1CGanqQVnZWVmqvoW4HhdcMltuT7sSw0aPpckXXqQpRVhtLF13CJVpWAQ5UbBg8TXr6vnSMqYH3Jfh48bRwOEjlJZzQJgdPbhfLraaA5bGlNGTJlPfQUNcxl8fW+zYbjdiucR3wBjXrnNnpeUchWJOjT91Uvbvpkq9OwhrD6w+RvGNaUte4ZHKkWXKxOeUZTomF5ejgagJ7NqrzkMgBbWBvuIuJtuzgtYOIK1VWXaWcqQTCML2QhD665usYYWFNdToosJocJQmxAOMqkqo9GToBtUC3w/WZiNpuhoLsLaYirsaLPlFwpcL2+mmwKLXo18/8tYYvGhKUHCIFJBqwH/N1Je0TByrBTW4iT/ePsbOQQ/VgihJTKL1d5XgTgBBaQSMNbCItmjVSmk5B4R3Xo66T392ZgblqEQah0dEUOfu3eUE6iogXywS1QcE6l+QWrru7Tp1lrk4nUmn7j2oY5duhizv/mKxhCIOavcmNTlZCrTmgMUxpW9/8lZZlDUUGKdQbMKotT0wJJjadeykHJ0DOxnwFW3IlFKOpk4vxwSEgBujAS56tuUhDkqSE6nchdM0mUUMDoE9+9cT3FVy8jZiEfW0mwDDOaC2vFHXCrgaoH663vNBmqhiaUk3hiO35UvFYgd5X+2VzL448YwM6GuqlAuxnWXG/wlWHg939b6BHItqwRYQFdhyNGq5wMAOK4OaJRBbdqZCFJO32mRQJf6o5a60NxhHi5FBQyVTQ7QQQ7ZsgSMwJDwSlv26YOGQn59Xb8sW4gyiRS2qPrJlKwrWsF3sTMJbtKDW5oKcrGDpuse2bSdFrjNp276D9GE0Ar4/FhxqfQWLLCy2mgOWxpSo1q1dxhoK0L98Dd5vgHEVAWBqFIu5q9lYRKVV68xJ3cE2NaDqECrOwKpmDQwaJSkJinhrXGALGZWQ6myni8HP6HVz8/KWW/32AMIeFbHECVU36MRHCEKf1nWDP7SAClioZmUIWGE7dnPItjzymmau+8OuwXBlOZlywYbFVFMElrVjhw8pR+fAliEiTs2t+EvE4qdUxRoFqwUsGIYR/QOWTHe3+pMOgg5MRZaXt5dqeUlsayJq3FqqI1uBBaPQTB5dTFa2WCA9PD3E9ax/LSsrKtWjxEUfRXSv2neGyHFm9LUWILKNRmE78robwUd8plE/ZPyeL6r9qdwfbNVqLSzR2HHYmOIIxK02er+tgee7KVPnyawQD7EtgUO+bTpo3pavqqyQtdkb1WQuOhnKXba+5CrpC1sH8T2M5uxEHlG8tz1ARShkIjCEGKj9O/fQvy0PS0TimXqVprRi1AprFXFP8vbvlgn27dnPEARWcOQAVTbByQCCBfW4Tx45orScw09MjIiwNmeFwGCJajf1cOAArQaEWitxnmps/Hs1JZw2brnXirmJoyEsOLgnVZX1+7+7GHdQ1c2VwL2D2DaKK113xnZcZUxhHEudpxNWLaNbjm5eXhTQpafmJPaidxn2J6yDGGDgr+kT1VrWgkfC8dBh4yy+woaPp6hpsyn2qlso9upbzb6iL7+eIsZNpfDRk6n17AXU4c5HKHb+7XIb2Z5AgNnjoYJFFsnkjZayRFJ9/45ddQ/a0pKecMqwRdioFdYaZVnplLH2D1lz394UnjpKZekNV7HHEWCL+59VK+nLD95TtbggjU5M23bKkeviJcYinKuaPyuc/l99chFtWb+u2WxvMgzDuDLnFEdVFZWkpRi2anmFRmjelgcQO+7eln2l8DNe4S1kEnGPgEDpe4qI7shJM6jzwy9Rjxc+oB7PvUed7n+WOt7zJHX8zyJqs+AOan3pVRZfrS6ZJwVmUJ9BFNR7oNkXksxDsLa88DIKHTJaBmJZFGlmfOesIbfl7SBEKwrzhUA6Ztj659OiJfm01J8TDr6XpRkGRZm4ngFde+m2wloDW/Kpv/9oUzopS2DBln8kTlqDXQn4dq78ebnMQ6jn9cX779C9N1wrS+ippUqRkbxjxxuK9nY2eEa79+4rE5arkRR/hv676FFaeM3V8rubizZnGIZhHM9ZVQVrVmlqomGrFnI0wkdUM0K0eSIyskaAib9haYTgi557HXW672nquPAJ8gwKliIHaYEgkpGrEhWDCg7uNSy4HIL4Poh+b0jgViFrqhvBBkFYnpNtuKa9tMJ20G+FtQT6cNKPX1Denq2a+ggKEtRztbACPiN39zYqzzVf9aYhQPT08m++klV09LyWf/O1FGjmGDBsOA0eNUp0E/vdJ0cSERUlE7xb8iNLTU6S3/2OeZfRq08+Tvt2bGcrKcMwjJM5O6tUlhQZ9g/FdnxAlx4y6EYrEB6+Me1kScfouddS18dfo073PiW3wEMGIX+aGyV++7ESeFMXCNKszeuozMVEgFHcvb1tFmKwzBWdPCpzsxrBsCAUQq80LdlwpgXfVjF2rS2P65Cx8mfK2fGvpnUKhHfLGXMpuN+Qc4sijSDYruBwnCax25iJbdeeZl01n4IbuJqUHiCYh40bRzOvmGdVPCPIZdPaNfTUfQvZSsowDONkzo7Q5YjEyzEm7DxDw8mvjc6kyGLSx+QfffkNQniOlNV8aoBPX9pfy6sjk82ArVFb8p02NXDNkLbJ6FaxUUGIlBKlGSnGsh8IgYCKR+5CBNuLgoN7KH39X5rEIUR32PCxsrZ9QKfuuurqAwQt5WzfSOV56vkbmwIQobfc+3+yYohRP2ZUBXnnxefpmfvvMfz68sP3qURneVYkRL/o8ivpxoX3yiosWnC0lXTVrz/Tcw/9n+p31PJ6+bFHKG7nDuXdGIZhGj9nhWhZRprhnJ7wndS7tWkOCKmsLespb5/lwRY/h8h7V6I6BZOBydqgb2ltYJUsSamf+FcLEGSIljciCOGLiXywRqyCWHz4te1kszW4BrglJP/yrTwnLQR06y0D0ZCGyze2nQx20wuqkKGvGl0AuCrwCZ1y8UxZnhBlFm0JpoPF8dihg7Rn+zZDr71CDKrVWNcCApcmnD+Nnl78jqzEohVTKylq76O2uq3gPSBu1b6nlteBPbt1C3KGYRhXploBCBFRlptlKP0QJnFs6WqOlrdCweF9lLHmd6vn4hkQKMSvayVjlnlFjehQ+JbaIEYhghDFXWFwIYH8nQGduhkShHCTMGoRRBCavbblYRFO/eUbuaDSAtKMRU668GzuUvyNSlmw0uoB/TR76z+Gs024Iigt+OL7H9F1d/w/imhRP3l6YwMiGtH+dzzwML384RLpO6qnfCSspJ++8xY9fPst9O+av+sl0GcYhmGMI2ddbK+WZWYYClTyDAwmvzbtMdorLcYpSYqnlF++0ySo/Np1Iq9gF4rgFd9f+sja4TropUqIQbktbzDQDHXljaakQhCZMQHsRn5tO9glWh5uAaiclH9onzhQGi2AcqqRE6eTX+y5VEQQ4chliv6sF1iiXcUqigpG/3n8CXr6zXcsvh549gW53a4GEtr7+PrZzVLtKuD7tOnQga67625659vv6c6HHqHuvfso/2ud9NQUmVXgj59+VE8ezzAMw+imeqapKKfynEwoUnmoBwgYr7AI5cg4qDufvPxrucVsDbgBhAweqSs4yhk01MRdmpkmRbwRkMMUNd7dhfAwAkSokbylCNDya9OxbnUqA0D8ZW/bSJkbVskFlVWLtPj/0CGjZJCc6aIBW/O6fZ0FyIebs2OTS1hFff39pMDEdrqlV9/BQ2jS9BlyC96Uk8eOyi3gxuBuEBYRKUSz/gorKFU6etJ5tOjVN+iVjz+jWVcvoBAN5S4hQL/75GPauXmTS10fXIPQ8PB6fZphGMbVkcqpsqy0usqRXoTwgmXS3dd4fVUgg5P+WEaFxw8rLRYQnxkqRChEjKuBpP5GfOnkhGZgESARv1d0+oTx9EmBwbK8plERjX5jJPcsFhPwLbaVgiP7Ke3PH4UY1LZdCjeSFuddpLqIQZ5aVM7CfdSLK1lFtYAynf2GDKW2Heo/RxBba//4jbKz7BMMiKj1Tt26U++Bg+z26iNeE6fNoJlXzpOlEI2Cfh/Tti3NveY6WvzlN/Tg8y/KfKmWIu1RMvPX77+jLAM+oyFhYdR7wEDV72T0hdRa8266lbr26m1o/GEYhmlI5GhbUVhgSMh4+PiSvxCitlgCIYLT/vqJcnZtFkfWxZhvdFsKHTLG/uUgbQQTgJuHsTyiMrimypiAwfUrPHHYkH8v8IttTz5RxrblIbrKsoy5dMAdwFNP3lkVkNoredmX0j1AC/ADjbrwsrN+ofUQ9xCiHL6renElq6hWwiMiadTESeJr139+j+zfT4fi9tlFWLdo1Ypuvf8BevSlV+z2ekS8br7nPmrTvoPdxBdyjvYfMky6Nrz5xdc0Y85lZvOQnjh8mA7v1399Js+4iB587kXV72T0BTcLWLf1+L0yDMO4CooQLaRKA5GYXjLYxHhpRgiYzHV/Uda/a4Wisj6gI8o6cuI0zfXsnYqYDCHMhSpXGpwDhE9xvLHa2dgWh18kLIGGEPdMJnTXORkju4CtAW6wQCb/+IXmuvr4zKjpc8ivdRulRR0ktw/s3lfeT70gD2+1n6pB67aT8fTykoFJsAiagsjsdX/+Qfl5xgLgGjvwtb3yxpvppoX3kq9ffbcVXB+I0XKDftkMwzBMNVI1VRYXak55cw436U+H0ptGgCUhe/Nayljzm7QmWUUIg5DBoyiwW2+lwfUwujVvC0gfZNQKh+1x/w5dDIkugPRZsKbrxSMwiHzhi2nwcyE+k3/4jIqTzFcCqosbhQ4dTSEDhln9TFjaA7v3NhS0BKt07u6tMidvYyGqdTQNHzdeOarL/t276MiBuGrf22YI3BcGjxxNI8dPVFrqAl/aYrGIZxiGYYwjhSgmzkqdW7vu3t6ytryhYBMxseXt3U5pf/6k2b/Qv2NXihg7RUY8uyrSsuhElwEIn8Ljh+T2vBFkWdYI4+l5EK2udVu8Nj5Rrck7wphVuzw/j5KXf0OFJ4/KY6sSSfwA+mnUBbM0u5DA/QPXxgglQhwXnzmhHLk+yLM5ZNQYimpVP40WfCH/Wb2KCguMVc1qCvj6+lK/oUNVt+gz0lJlSVWGYRjGOO4QhdKqpXN71TMohHyiLW9zqgIRum8HJf/0JVUUabMmICo/6vxL7ZY031FAnDvTd7U8N0eInpPKkT5gvUXeTFu2xyGAK4p1WoTcqi3pRgLcEKGfvOxzyj+wW2mBrdMy3i1aUsyVN+iqmoQFRVCv/oaCltCn8+J2GthhaDhat4mloaPHKEd12bVli0xG31ytoli8BAWHSMFuSlFBIRVpHMOaIugTSPzPMI0N7ruuhTtuSEVhvu6Jxic6lrz0BpuIz4AITfrxc82WNIiCyEkzDKXVcTYQO24GEtPDGm0kKKQ4OZ5Ks9KVI30gIMevvfFteYD8pZUl+iLmPXz9xOd21h3gBhGKfpO310p5w1rd2Cu8BbW55g7yDAlXWjQCsSyujZGgJQBrraEsFA0EglyGjRtfnf7HhPy8XNq8bg2VFFv3Iff185X5R01BFH5pSePNu4mofB/f+guZiooKqlApbQv3HP9AdZelkqIi54p69GX/AOlmYEpJcRGVlxkozatQLr67ln7hLFzqujN2wVFjCvqCqy0i0TvVxhMAf348y00VQxZRWP38YjuopsAxiwERCrESPnoShQwY3ihuAtwGYBXVC2qW4/roAYFeRULwGAkyE2cqg4V0LyRMgFuF3tRNiJT30Zk8X7MIBW7V19E7siXFzr+1XqJ+uBPkH9xDiV9/RGl/LTdrucS1Qf15I/2uLDuj2nWgEU18SOM0eOQo5aguWzdsoBNHDsvB2xJeou+rbWFjiz8vN9vq7zc2ykXfgRgzxR3jo7+6xT8jPc2uteutAXEG9wIPz/pCNCszwybXgsL8PMrLyVaOGh5L1z0tNUUIF/1p5piGxdyYAnehHGRsMTimYAGVkaYt0NVZoGJbVkaGclQXLLAspZRr7LhTZYVuMQMrJdLvaLZqic6Su3e7LhEKAnsNoPAx8Au1Lem5s8B1MZJkH0JUr0UUVuzCU8cMiR0PMVjLfJk2XleIUL2pm+AfimAlrZTn51LS959pE6ESNxlAFzV9Nvm2ipUtOEdEsyd89QEdefoeOvPxm5SzcxPl7toiCymoITMKdOstMzXoBfcTiwSjKbUaAlj8RoyfSIFB9YO0crKzaNvGf6jUyqLD19dP5sk0BUL0xJEjZlf7rgwmukKxEFKz/MFSo2YpxdIlNDxCdQI9c+KEmGyM7WIYJSgkRCbwNyUjJZXOnDxuaDcG1uDD++Mo08zE2RBYuu4njx6RPr1M48LcmFJcVERHDhxQXQhaA890wulTdOpodZyBq4Bx4fiRQ8rROTw9veQ1cG/KFlEMQpWl+oQokqBrTaGE98/avFaIiU91iVBEc7ecPkeIpgClxfVxE6s3Pb6INchAMZ15RJEqqDQtRTnShwzGqVXe0iiVKHMoFjKaEQsXVC/SGnBWlplOiV99KH0utYLFQIspF8sUTBhwsAA6/uoiOvO/16XwrO2XXJaTSUWnj2NkUlrqIkufCuFsBFQIq2hEFhhYzlCRqf/QoUpLXTatXUPxJy37I/sFBFBHM2VDN6z6ixLjtWY5cB0gno8ePKhqOfT29SEfFdGDBTpSYoWE1vdpTzh9mjavW+tUqyiqT7Vuo56ia+0fv1N2ln43Egjq35f94FKLC0vXPSUxkTb+vVp+Z6bxYGlM2fj3KtEPxfitk9zsbFrxw1K5wHYVMB5Uj7H1UzEGBAVSTJt2ut3ZGhNya15uDevAO6KFpvQ22AZFeqaUn7+V1ZO0gu3UlhddbpfSoc7EXQgsQxY0IUQrdQzoEPdFp45TZZH+aGbk0wzs0Y/c/WwX+NjW1mNNQWCUT8toTQ9USXICxX/+LhUcPaC0WAcuI2GjJlHo4FHSyp/y05dCyH5gtmws+n3BkQNmM0agDj4KNhjZnq8Qn9+YApaAv78/jRg3gdTyZqLOOqyilgSUp7j+ELNqidUhYt958Xk6bKck+c4AfmjrV/5Fy7/+UmmpC3KNqlmQAcRfbPv6fu1VYsH5wxef0U/iPeF/6wwwmXfu1l05qsuOTf/S5++9TSlJiUqLZXD/t/2zgV554lGrC5OGwNx1B78s/ZZ+/vYbp113xnYsjSnJCQn0wav/1Tym4GcQePnGs0/RlvXrlNaGB/0R4wHGBYwPpsBtKqq1MYNIY8GtvLCgKuGL92SpRK2EDR9HLS+83OLWLrZt0/9aTpn/rNK1fYto/NZzrnHpfKHmgPBI+vELytm+UWnRBqyEbRbcodnKDJ/exK8/rE6erhOI/Dbzbydvg9WUaoOcmUnfLdGcPgpZD2Kvvo382loOPEPFpKSln0irr3bcKGTgcGp18RXSEpqy/Gu5/W7O2lmDd2QUxYrrAYGsBvyaE7/9WLf7CqypsbinoToDpTRycN9eevnRhygvt+6kGtu+Pd3/9HPUsrX697FGXk4OvfPS87T93/p9uHVsG1q46EnVsqA1YHtp8XPP0L6d5l0p2nfuQv0GD6FgFcuVVuAP2K1XH+rYpYvqwgaTzpmTJ+jg3r1WXQpMQf9JFcJsx6ZNUoCb4/Lrb6QL51xWHUhgAj5//aqV9P4rL0lBq4a/EIj9hw6ndp06kadhNxk3IYijZLlWc/6RABPwK4seM/t9PMTn9+jbT1zT3vK8TMFWfPypk7Rn21bKtlLaFKLhzocfkTlY1fIq49psWL2S3n3pRSo3WQQOHD6Sbn/gQbMC3xparjuuE65XB9EP1e6dGt7iO/UZNIhaRcfU+U74jK8/+kCKXFNmXb2ALp13tebPMMVRz7hezJ0H+gyslZb6nVbgC9q9T1/pHtSiZUultRptY0pn6j1gkAy4NO1zeJ7TU1Jo364dmhZP1u7bsUOH6OXHHqLM9LouNrgOE6dNp/BIbSkR4RN64ugR2r11i3RfUgPX5aaF99GYSZObtEVUtxCF1anFlJkUjpyeZi4Myj4mL/+K8vfvEUfafRixrd3qoisoZNAI8UGNzx8Cgjv11++E+F6No+pGDSA6O/aaO6T/pBaKzpyk+M/e1p/IXlzT8JETKWrabLv43eoVotYEN65f7s7NlLJiqQxQ0kNAl54UPfdaaZFO/f2H6ntgRYQCuAm0vPAyChs2VrXPQQzHL1lMpRn6/MsCu/ehmCtuJHeViE974KhJChP5P3+vpndffkF1IrckvgB+f9O6tfL34cflSGD9Wvj4E7LGem0w8ezetoXefOZph1m/kHf17seeoE7duikt9cnJyhLX4UUhaPUtTI1w6VXz5UstzRRAoM6PX35OP3z+qdLiOBpSiAJHXfeOXbuJe76ozrPVnIWoI5g840Kaf6uYC2v5XjtzTAFGhagj6CsW7Lfd/6AY6xrX7rBe9EtsMbC4+/mpDjCY+AuPHaTTH74qRChyPWoXY8jZCIEbPLBxRMirIs4b/rNu7vrOH5WlNLtHiGuMhOkV+fpLLyKIJ6j3ALuIUCPIPKtmHm64bkDEJ/0AX2J9382vXSdqdclV0pqeu28nZW/9R14nLcAtIn//LrM5bb2CQ2UuUl2IBRoS4rt51/cfdHWwuOzVv7+0jKnx75q/ZQSyOfD7A0eMoOmz5yotjgMiMy0lRU5UtYHf4rGDBx0mQlGbf/KFF1G7jpaLHiDAYO4111J0GwP5lnWCwKFCCxHwCOCZevElZjMjNCUcdd0zUlMpx4o1mLGNpPj4etZBZ44prkSrmBi6Qiz8m7oIBe4QlLoSd4sJvqq8/lY7JvTMDSsp/rN3qDRdXxANhFHkxBkUNmK8WStrYwDX0hMR4TpziVYKEao1YAzWx8ITh6V41QvEEQKV7IUUtB7avyssnqaiAUh/UNFv9LpxAGyBt569QPotI3dn1sZVurfRi+JPUnHCaeWoLrCY6t1e9wwIkjX8G2tfDgkLp5ETJsmtN1MQHLBr82a5VWsOWMSmz5pDM8TEAdHmKKoqkZRa/TwsnZ+tTLnoYjrvwos1Wbrad+ost9YwqTgSPFewBFsC25bzb72d+g9RD0hrSjjiuqOvVWpc4DL2xVljiquAfov+C/eR5oA7hAQijbVSVVEphEO8FJ41oOY3UuKk/PKd5mpJNWCrHymaIsaeJ//dqIEQDQrRb3HEAGfGn8kUpBsyJ5osgcVGcO+BhqL6zaE3gX95Xq5026gBojpz/V906r2XdAUl1QB/V/gTw6UBE3Hevp3i2uiPzK4oKKDcPVvVg4uEmETQEu6tViBCfVpXp45yFF5e3tJ/yBSk+nC3caBGvjpsCalFq6IaydGDB6zmZAwICqLLb7iJbrv/AbmF7gjcPTB81X/WsCBUS6tkK/CdvO6uu2nezbeo+lGqgcUIfC8ffO4lKe4dBfqCWtJ6U1pGx9CdDz8qtx/V0hzpoWV0tGpqHU8vT9WAt9rgvuH+mYLrquV7WMMR1x1+yR6m4x3GfJUFCcRSoHgGbFmMmnvGvcV87W6gcIpRzJ2HI7DUj+05poSEhqkuUrTcN09P0Q8cqFWGjx1PDzz7AvXqP8Cm/tOY8Fj0+KJFhSeO6KqPXZadRe7i4YPlM33lz5S64nvdPnQScZHDR0yQ6XZsKTXpSiBIKz9up64sAUiABx9HXw3ipeDwfsrdtVkIL72Ww7YUMf4CQ1H95qgUi47cPds0WyDxc8h/iocLv5fy4+fSz1Rv1gYAP9OYy647W3GrSrx3xvo/qVRXgNM5IJJlkn9T66dYcOFctYp/j4AgajF1pu6k/XrBRJ+alCQTzddm7HlTacDw4TYEv1SDCPqgkFDat2NbHdEJ8QI/LkRhW0uwjMG6XafONP78Cyg6tq3070KwjDXLnVbadOgot5tNg57kzoQYn+J27aCCPP0uLLWBsO89cBDNvGKeFKGYHIxc28DgYBo2egwNHDFKTLZeMpl2sZ0qu+CeTJs1m7r27GX1ngD8PL7HmEnnUZC4dnnZ2ZpT2eD9+4jrceWNN9MVQhRAOMTt3FHnnvYfMowmXjDdrBiVCwU/X+k+gSCSGiBCZ155FbUT9xU/Yw/sed37DBosn6/a3wvXAzsH+3bsoCIUhlGIbd9O+lLbIpi8fbzpzImTMuiuBnzeFNHnsVB0pBiqjbmxxt6gX86YM5e6WOjHto4p+N2ZV1Y/y7Cao4Rx7WDG2HbtxDlcRuGR5u+bj6+P+MxUGQBoL9BPxk2ZStfccZd8loPF2NuccKusqKjK+HsFpQlBqae6ks2IjhY2dAxFXTDLYQEdDQFyX575ZLHcbtYKLKhIVxU2VD1gpgZYoVN+/oayNiH1hI7JXFzryAkXUOTki+y6wsJC5AwCecykR3IUSOsVPeca8kflI4XyvByK//QtKjqtfUFVFzcKGzmBWk5HINc5C0fB4TgZNY/3t454j+FjqeWMuWSksIFeECiRFH+GSorFQCq6DaI2EdVrNDhCDQgUiIXKikrRd9ykJQFR2kb7EbbMUxITqvNy2qBHYZ2CRUMtUXsNtc9dN+J6BoeEyKAkR1kl4MOK/JaGzq8GO50n8msmx8ebL5soPgeiDgEytUUCLORI/ZSPQBZxPz2F2GsdE2vVIgog3JCCB2VG0bfCwiOkAHDU9a7ByHWHKGwVG6uaRgggkwAS5uM9YemFtdiWgKsa6twXcQ/Q32HVdpYIraHOWOMAbBlbtIwpEI/I+lHbsgvxikpGmelp0s0H9y2yZUt5HtZAGjPcl2IYnGwax7R/ZlPGTdyMKqMpaowi8z2OnFhtCW2EAR2WgMUP/o6Fx7WvHrVkIgDlOdl0Roit4nh9+ftg5Yudfxv5xtiexL42sPqiWlH+wb1Ki+NBuqXWc64l//adlZZq4BKiNw2ZKUgvFTPvJvHeXaRlO+vfNTIPriyBqwFkBYidd4tdUmMxDMMwTHNAqh5s23qHa8t9ZStIqB4x/nyKmjqzyYlQAGualmT/tYHfbXleNpZoSos6JSkJVGbABcK/YzfDFYIsgahwvLezfHsh9GKuvLmeCAXoS/h/SxZla5TnZstUTcf/+xgdefpeSkUaKY0iFFb9yAnT9EfYMwzDMEwzRgpRz9Dw6rQ+Dt4SgUiLnDRDRsg7Y+uyIYDQ9gwJ0ymIqoQIyrEYCY9gnKIzJ3RbrSGQgnoNcIgPLvpLUI9+Mg+qo/GNaSvzcuJvNSCGAzp3Jw8b3TxgWUXuUF3XWdzr0EEjxXXur/O+MwzDMEzzRipPCIrg/sOqLUoOAhHW8AeFNbSh8lg6A1xLrzD9fk4QQJZSF2EbHBWH1NIfWULWlVexINoLr8goChk8UgpwR4Egopgrb7LaP2V6qtj2ypHzQKBZxIQLmuziimEYhmEcxVm1hDyMkROn2zWqugYEl0BIhI+a6LRt3AbDzY28w4UQ1SlKkMTdkhWuNCONinUEQAEI/uA+g8gzwHxAh61AcIcOGUMB3XopLfaj+r1HU+z8W8k70vqWt4dfAIUOHePU4DcI31YXXynTdjEMwzAMo49zZjshoAJ79KPwMcjnaT/rFuqKt7n2LlnysLlsW3qGhukW9LCImk35VFVFRaeP6a6mBPEWgJr9Dr7uHv4BFDX1ErvmzoQrQQvxnq1mzqvO46kF2Yf7SvEtDqrbHAhcEnB+CKBiGIZhGEY/dfaPYUGLGHd+9TajrWJUiILgfkModsEd5NPSOTVxXQVP/yCZT1IPlSUlVJ6vXpIQEdy6qylBlHXvq7sqkFFkINFl19vFvQPR660vu646i4BONw4I2IhxUzXlZLUFJNGPvvwG8mvjfFcAhmEYhmkq1HNkxMSP6N+o6bOlpcsIEGGwFEULYaI3grwp4O7rS15h+gQgxKasOqQSOY98ncVndKZsCgmTQUrOdIWARRTpi+AzacgiqVg02918r7Rq6vWzrQEVl6Kmz5GC1hFgOz7mqluktZ9hGIZhGOOozvQQo+GjJlHbG/4j0/NoFRUQDhA/EBJhw8c1fX9QMyA7gEyHpWNLHNbO0vTUehUiEJxUcOSAxoTq58B982ntuOAzcyCHZuyC2ynq/Et0LWQgGuFrGSsEnhZ/UGsggr7VzCt1W6YtAytzH3mOzc3KzzAMwzCOQCa0V/6tCoRQ4fFDsiZ4wdGDdWrM14Bt/ICuvWREvH+7TroEWJNEXNLs7RspedkXuspXBvcfSq1nL6iTagl5LBO+fF9XonYIQGwbB8I/tAEpz8+j7E1r5LVAxSk1EMgWNmwshY2YYPcgI1l/HqVEf/7GrNuDVmSe0EnTKXzkRLnQYBiGYRjGdqwK0dpUlZVS0ZmTcqsYJSwxOcNHzk+IT80BJc2EwpNHKOGzd3UJIFxHVECq7c4Aa2jCV+9TRUG+0mKdwJ79pL+mM6PHrVGWmUbFiWdkv0H1Ke+oaFknHtv5RrfgtVKceJqSvv9Md0WqGpBAHyVY7V2ZimEYhmGaO7qEKKOdspwsiv9kMRUnnFZarIMUWrHzbz8b8APhn7z8a8resgFHss0asKa2mnU1hfQfxpbpWiA9VuaGlbJsJzIUWAPi2L9zDwofPVn6vDpaLDMMwzBMc4SFqINA8FHSd0sod882pcU6sGDGYEu9R195XJxwiuI/fZvKsjPlsRZgvYuZd7PDAnUaO7DGZv27lvL2bZc+ubhPNeCaIR8o/EuRvxRBTwzDMAzDOA4Wog4C/omZ6/6ktD+XWayYVBsEd7WYMlOmLSLx+/jdDPEe1mrQ1wBf3ahpsyls5AS24GkEQrSqvNxwhgiGYRiGYYzDasVBQAgi0bmewBYIVlhBERBWdPo45ezYpFmEAuS2DOrZj0WoDty9fViEMgzDMEwDwYrFgcDXU+8WOYRocfwpylj3h66UTRCfQb0HkKeTEtgzDMMwDMPYCgtRBwIR6hvTVjnSRmlGOiV89QHlH9yrtGgDuTeD+w5hayjDMAzDMI0GVi0OBBHs/u06S99N7VRReW62ri15WZGoZ3/yimihNDAMwzAMw7g+LEQdiRCIfu06kmeQY8uceoVFUnD/Ic22khXDMAzDMI0TFqIOxjsi6mxeUIcgxG5wn4Hk06K10sAwDMMwDNM4YCHqYNy8fci/Q1eHWSt9WrSi0MGjyc1Tz/Y/wzAMwzBMw8NC1MEgeCigSw+ZKN3eQNyGDBxBXpFRSgvDMAzDMEzjgYWoE0BEu1/bjsqR/fBpGUPB/YdypDzDMAzDMI0SVjBOwN3Hl4L7DZUlPO2Fm5eXrKDkxXlDGYZhGIZppLAQdRL+HbuQX5sOypHtBHTsRkG9+stgJYZhGIZhmMYIC1En4eEXQKFDRkvrqK14BARS2MiJ5OEfqLQwDMMwDMM0PliIOgskne/WmwK69lQaDCLeJ6T/MAro3F1pYBiGYRiGaZywEHUi8BGNGDOFPEPClBb9+LaOldZQN08vpYVhGIZhGKZxwkLUyfi26UDhoycbyvvp4edPkROnkzeX8mQYhmEYpgnAQtTJINVS2PBxFDpkjLj62i+//L0R4ymwRz8OUGIYhmEYpknAQrQBcPf2oRZTLqaQAcO1iUohQkOHjqGIcedzBSWGYRiGYZoMblUC5d+Mk6kqL6eszesofdXPVFGQr7TWBX6lkePPp7DRk8ndy1tpZRiGYRiGafywEHUBKgoLKHf3Vso/uIfKsjJES5VM9xTQrbeMkPcKj6z+QYZhGIZhmCYEC1GGYRiGYRimQWAfUYZhGIZhGKZBYCHKMAzDMAzDNABE/x/2nH13ciBkdAAAAABJRU5ErkJggg=="},function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh0AAABxCAYAAABxyRHvAAAABGdBTUEAALGPC/xhBQAAQABJREFUeAHt3QeYLEdxAOBBPBtjbIxlA8YEP4GMyME2CAS2HgIEmCSRjEWQSCKDyAgEepgghIgig0GPnDMyGR6YnHMGCRBRIGOwwXlcf0Mtc3Oze7t3t3v33nV93+7szvR0V1dXV1VXV3efrQ1oNin88Ic/bPLzpS99qfnyl7/cfOtb32rOOOOM5sc//nHz05/+tPnlL3/ZZBXOdrazNec85zmb85znPM15z3ve5k//9E+b7du3NwcccEBzyUtesjn/+c/fnO985yvXffbZZ5PWuqJVKVApUClQKVApsFdSYOfZNovR8ZOf/KT5+te/3nz6059uPvKRjxQD4wc/+EExOn7xi1+sC/UZJIyOP/mTP2kufvGLN1e+8pWbK17xis3+++9fDJF1KaRmUilQKVApUClQKVApMESBjTU6vvrVrzbvf//7m7e97W3F2GB0/N///d8QonO9d9GLXrS57GUv2xx66KHNjh07mktd6lJzLa9mXilQKVApUClQKbAFKbB4o+P73/9+8/a3v7155Stf2Xz4wx9uzjrrrE1Fd1MzV7rSlZrDDz+8ud71rlemZzYVghWZSoFKgUqBSoFKgT2TAoszOr7whS80u3btal796lc3p59++qYnl/iQC17wgs0NbnCD5sgjj2yucpWrbHqcK4KVApUClQKVApUCm5gC8zc6Pve5zzUnn3xyMTYEfq4FxGSc+9znbn73d3+3+Z3f+Z3mt37rt5pt27Y1DATwv//7v83//M//NP/xH/9RAkx//vOfNz/72c/WUmR5V3m8Hve4xz3K9MuaM6wZVApUClQKVApUCmw9CszP6Pje977XPOEJT2ie//znl1Ums9D2j//4j5s/+7M/a8RaXPrSl24udrGLNRe5yEWaP/iDPxgZHec4xzma3/7t315idDA40uhgeKTR8aMf/ag57bTTGitgvvKVrzTf+c53yioYaWcBRs/Nbnaz5gEPeECJAZnl3Zq2UqBSoFKgUqBSYItTYP2NDt6GF77whc0//MM/TD2N8nu/93vN5S53ueav//qvm4MPPrisJrHUlSdjHsAIsfT2U5/6VPOud72r+cQnPtF84xvfmKooXhXLce95z3uWD0OoQqVApUClQKVApUClwIoUWF+j49vf/nbzoAc9qHn5y1++Ysm8FAceeGDxHBxyyCFlxchG7Z1x5plnNp/85Ceb17/+9c1b3vKWYpCsVIGzn/3szdWudrXmhBNOaA466KCVktfnlQKVApUClQKVAludAutndFj2KubBstdJwEtgiuI2t7lNMTo2ytAYh+N3v/vd5tRTT21e9KIXNR/4wAdGG4+NS68+xx9/fHOXu9ylYYhUqBSoFKgUqBSoFKgUGKTA+hgdT33qU5tjjz22+fd///fBUtwUp3G7292uufOd71xiNMYm3CQPxIS89a1vbdTt3e9+90SsTAPd8Y53bB772MeWmJOJievDSoFKgUqBSoFKga1JgbUZHQIxH/rQhzYnnXTSWI+A1SVHHHFE8+AHP7hsRb6n0Znx8ZrXvKY58cQTGytxxoF6Xv/612+e8YxnlO3Xx6Wr9ysFKgUqBSoFKgW2KAVWb3T853/+Z3PMMcc0z3rWs8bS7hKXuESJeTjssMPGptkTHjjbRfDpk570pObpT39682//9m+DaJteEQz7ghe8oKy2GUxUb1YKVApUClQKVApsTQqszuj47//+7+Ze97rXRIPjtre9bfEOOOdkbwErc+ym+sAHPrD5/Oc/P1itNDys4LnwhS88mKberBSoFKgUqBSoFNiCFNg581GrPBz3v//9Bw0Oy0n33XffEgdxyimnlIPV9iaiMiiue93rNm9+85vLlJG9QvrAMPnnf/7nEr9iP5AKlQKVApUClQKVApUCv6LATEaHGI4nP/nJzdOe9rRl9GNwOEqesWEVy2ZblbIM4VXeUE8bl4ndsFeHnVH7wPB473vf29zvfvdr/vVf/7X/uP6vFKgUqBSoFKgU2JIUOPvOgGlq7vTXN73pTUXRml7pAkVsKsGUAk/AVgDGxt/8zd8U4+pjH/tY06cJelk+/F//9V9l6/S6nHYrcEWtY6VApUClQKXABArsntro+PKXv9yI0/jxj3+8LD8eDvtaXOMa11j2bG++YcVKHgTnxNz+tuo8Hla8bI/dVS9zmcuMzojZm2lS61YpUClQKVApUCkwhgK7p5pesf+G80ZOHzgd9g//8A+b5zznORt6EBr8NmoaQ1yHGJe73/3ug9u2W+nyiEc8onHKboVKgUqBSoFKgUqBrUyBFY0O0wTPfe5zyy6dfUJRuI9+9KPL/hT9Z4v6z+Cw9fod7nCHQS/MIvBwCu1xxx3X3OQmN1kWy2K5LWPNWTSTNk9bBJ61jEqBSoFKgUqBSoGNpMCKRodplcc97nHLcBQoStHbYXSjgBK3OZm9M2zgZSvyoemfReDn4LfHPOYxzV/8xV8sK860yz/90z81r3jFK8ZuorbspXqjUqBSoFKgUqBSYC+jwNliJN6OqxNledRRRzUveclLliW58pWvXLwftjffCEiD4ylPecqS4m9605uW5bwbgZcYDlum/93f/V3zL//yL0vwEmx7qUtdqtDM6pcKlQLzogA+FMCM58Qd+cwDyAflgL4YEWi9qOBp3lh19fHbsn749HFyXIGDJitUCuypFMDT+p2PgT+e3sNWik7eHMxGWDe84Q1HgiUbylH0b3zjGzcscHScwZH4baThQeA96lGPKjuxEv5dMB113/vetzzfCEYhkH0mAcG9WmWhvn1B3y9LvTei7n089tb/+M9BhXnSs8MVr3nNa666TcfRibFhWbjl89rcfx+ruHj9HvnIRzZXvOIVx70+1X154SkCVr38Puc5z1mMKDzKmHJMwWmnnVb2Bzrf+c7XfOUrXylnIP30pz8dved9RtCtb33rctDkVIVvoUTTyIUkB/mg/7omoO8kyLSrlSuT8t5qz+z9ZBXpRz/60caO34cffnhz8YtffEl7bHKa7Bw7BNKZH//4xy8zODDQ0UcfvWkNDgQ31UIQPvvZzy4HzS2yERgWpnkYbBijC4Tyi1/84uZWt7pVc+lLX7r7aO6/CexPfOITzZlnnjm2LG0rMNiKnBQUYxP3HhA8VvBMCuiVpx1qh6agetnVv6uggDb+0pe+VPjva1/7WmlDnrdXvepVazYA+ugo6wc/+EExPPA1oyANWsqf0l8tyM806fve977iOfziF7/Y/OxnPyvZnetc52r222+/5qCDDmouf/nLFwPr+c9/ftkhWb+TjtEFN/mkQjz3uc/dHHzwwatFaa9975e//GWDV6bdyBD9KTv9GA98//vfLyv0su3HEeo85zlPaS8D1gqrowDe3rVrV9kr66yzzmroGvR3rtkFLnCB1WW6EW+Fch6E8GS0MZIw9bLks//++7dnnHHG4DvzvhkrQdp73/veS/Dp49f9Hx6PNpTsvNFaln+M0NpXv/rVbYyuluEa7t32Pve5Txsddtl787yBdte5znXaYNTSrmEALMPNvYte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"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1Ljk1OHB4IiBoZWlnaHQ9IjQ1Ljk1OHB4IiB2aWV3Qm94PSIwIDAgNDUuOTU4IDQ1Ljk1OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuOTU4IDQ1Ljk1ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTIyLjk3OSwwQzEwLjI4OCwwLDAsMTAuMjg5LDAsMjIuOTc5czEwLjI4OCwyMi45NzksMjIuOTc5LDIyLjk3OWMxMi42OSwwLDIyLjk3OS0xMC4yODksMjIuOTc5LTIyLjk3OVMzNS42NywwLDIyLjk3OSwweg0KCQkgTTMyLjI1MywyNi45NzdoLTUuMzAxdjUuMjg5YzAsMi4yMDctMS43NjUsMy45OTYtMy45NzIsMy45OTZjLTIuMjA2LDAtMy45NzEtMS43ODktMy45NzEtMy45OTZ2LTUuMjkxSDEzLjcxDQoJCWMtMi4yMDcsMC00LjAwNi0xLjc4OS00LjAwNi0zLjk5N2MwLTIuMjA3LDEuNzk2LTMuOTk2LDQuMDAzLTMuOTk2aDUuMzAydi01LjI4OWMwLTIuMjA4LDEuNzY1LTMuOTk3LDMuOTcxLTMuOTk3DQoJCWMyLjIwOCwwLDMuOTcyLDEuNzg5LDMuOTcyLDMuOTk3djUuMjloNS4zMDFjMi4yMDcsMCwzLjk5NywxLjc5LDMuOTk3LDMuOTk3QzM2LjI1LDI1LjE4OCwzNC40NiwyNi45NzcsMzIuMjUzLDI2Ljk3N3oiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMS4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDYxMiA2MTIiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA2MTIgNjEyOyINCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImRlbGV0ZS1zaW1wbGUuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDMiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnM0MSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlkPSJuYW1lZHZpZXczOSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciDQogICAgIGlua3NjYXBlOmN4PSIyOTUuMDM0MDgiDQogICAgIGlua3NjYXBlOmN5PSIzMzAuODU0NDgiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9Imc1Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Nzg4MTM1LDAsMCwwLjk5Nzg4MTM1LDEuNzMwNDAxMiwwLjkyMzcyODQ3KSI+PHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNyINCiAgICAgICBkPSJNIDU4Ny44MjYsMTg2Ljk2NiBDIDU3MS43MSwxNDkuNjM0IDU0OS44ODIsMTE3LjE5OCA1MjIuMzQyLDg5LjY1OCA0OTQuODAyLDYyLjExOCA0NjIuMzY2LDQwLjI5IDQyNS4wMzQsMjQuMTc0IDM4Ny43MDIsOC4wNTggMzQ4LjAyNCwwIDMwNiwwIDI3Ny44NDgsMCAyNTAuNzE2LDMuNjcyIDIyNC42MDQsMTEuMDE2IDE5OC40OTIsMTguMzYgMTc0LjExNCwyOC42NjIgMTUxLjQ3LDQxLjkyMiAxMjguODI2LDU1LjE4MiAxMDguMjIyLDcxLjA5NCA4OS42NTgsODkuNjU4IDcxLjA5NCwxMDguMjIyIDU1LjE4MiwxMjguODI2IDQxLjkyMiwxNTEuNDcgMjguNjYyLDE3NC4xMTYgMTguMzYsMTk4LjQ5MiAxMS4wMTYsMjI0LjYwNCAzLjY3MiwyNTAuNzE2IDAsMjc3Ljg0OCAwLDMwNiBjIDAsMjguMTUyIDMuNjcyLDU1LjI4NCAxMS4wMTYsODEuMzk2IDcuMzQ0LDI2LjExIDE3LjY0Niw1MC40ODcgMzAuOTA2LDczLjEzNCAxMy4yNiwyMi42NDQgMjkuMTcyLDQzLjI0OSA0Ny43MzYsNjEuODEyIDE4LjU2NCwxOC41NjQgMzkuMTY4LDM0LjQ3OCA2MS44MTIsNDcuNzM2IDIyLjY0NCwxMy4yNiA0Ny4wMjIsMjMuNTYxIDczLjEzNCwzMC45MDYgQyAyNTAuNzE2LDYwOC4zMjggMjc3Ljg0OCw2MTIgMzA2LDYxMiBjIDI4LjE1MiwwIDU1LjI4NCwtMy42NzIgODEuMzk2LC0xMS4wMTYgMjYuMTExLC03LjM0NiA1MC40ODgsLTE3LjY0NiA3My4xMzUsLTMwLjkwNiAyMi42NDQsLTEzLjI1OSA0My4yNDksLTI5LjE3MiA2MS44MTIsLTQ3LjczNiAxOC41NjQsLTE4LjU2MyAzNC40NzgsLTM5LjE2OCA0Ny43MzYsLTYxLjgxMiAxMy4yNiwtMjIuNjQ2IDIzLjU2MSwtNDcuMDIzIDMwLjkwNiwtNzMuMTM1IEMgNjA4LjMyOCwzNjEuMjg0IDYxMiwzMzQuMTUyIDYxMiwzMDYgNjEyLDI2My45NzYgNjAzLjk0MiwyMjQuMjk4IDU4Ny44MjYsMTg2Ljk2NiBaIE0gNDY4LjE4LDM5MS42OCBjIDIuMDQsMi4wNCAzLjA2Myw0LjI4NCAzLjA2Myw2LjczMiAwLDIuNDQ4IC0xLjAyMSw0LjQ4OCAtMy4wNjMsNi4xMiBsIC01OS45NzYsNjAuNTg4IGMgLTEuNjMxLDEuNjMyIC0zLjg3NiwyLjQ0OCAtNi43MzIsMi40NDggLTIuODU0LDAgLTQuODk1LC0wLjgxNiAtNi4xMiwtMi40NDggTCAzMDkuMDYsMzc4LjgyOCAyMjMuMzgsNDY1LjEyIGMgLTIuNDQ4LDEuNjMyIC00LjY5MiwyLjQ0OCAtNi43MzIsMi40NDggLTEuNjMyLDAgLTMuNjcyLC0wLjgxNiAtNi4xMiwtMi40NDggbCAtNTkuOTc2LC02MC41ODggYyAtMi4wNCwtMS4yMjYgLTMuMDYsLTMuMjY3IC0zLjA2LC02LjEyIDAsLTIuNDQ4IDEuMDIsLTQuNjkyIDMuMDYsLTYuNzMyIGwgODUuNjgsLTg1LjY4IC04NS42OCwtODUuNjggYyAtMi4wNCwtMi4wNCAtMy4wNiwtNC4yODQgLTMuMDYsLTYuNzMyIDAsLTIuODU2IDEuMDIsLTQuODk2IDMuMDYsLTYuMTIgbCA1OS45NzYsLTYwLjU4OCBjIDEuNjMyLC0xLjYzMiAzLjY3MiwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDg1LjY4LDg2LjI5MiA4Ni4yOTIsLTg2LjI5MiBjIDEuNjM1LC0xLjYzMiAzLjY3NSwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDU5Ljk3Niw2MC41ODggYyAyLjA0LDEuNjMyIDMuMDYzLDMuNjcyIDMuMDYzLDYuMTIgMCwyLjQ0OCAtMS4wMjEsNC42OTIgLTMuMDYzLDYuNzMyIEwgMzgyLjUsMzA2IGwgODUuNjgsODUuNjggeiINCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48Zw0KICAgICBpZD0iZzM3IiAvPjwvc3ZnPg=="},function(t,e){t.exports=require("sharedb/lib/client")},function(t,e){t.exports=require("jquery-ui-dist/jquery-ui")},function(t,e){t.exports=require("cytoscape-edgehandles")},function(t,e){t.exports=require("cytoscape-edge-editing")},function(t,e){t.exports=require("cytoscape-fcose")},function(t,e){t.exports=require("cytoscape-node-editing")},function(t,e){t.exports=require("cytoscape-undo-redo")},function(t,e){t.exports=require("cytoscape-panzoom")},function(t,e){var a,i,o,n,r,l,c,g,I,s,d,u,C,N;t.exports=(a=[{selector:"node",style:{"text-valign":"center","text-halign":"center",color:"#1e2829",width:function(t){return t.data("w")||0},height:function(t){return t.data("h")||0},"background-color":"white",shape:function(t){return I(t)},"border-width":function(t){return n(t)},"border-color":function(t){return d(t)},"font-size":14,"background-opacity":function(t){return i(t)},"underlay-opacity":0,"underlay-color":"#ffc90e"}},{selector:"node[name]",style:{label:"data(name)"}},{selector:"node:parent",style:{shape:function(t){return I(t)},"text-valign":function(t){return"bottom"},"text-margin-y":2,"padding-left":function(t){return o(t)},"padding-right":function(t){return o(t)},"padding-bottom":function(t){return o(t)},"padding-top":function(t){return o(t)},"background-opacity":.5,"border-width":function(t){return r(t)},"border-color":function(t){return d(t)},"background-color":function(t){return s(t)}}},{selector:"edge",style:{"arrow-scale":1.7,"curve-style":"bezier","text-background-color":"#EEEEEE","text-background-opacity":0,"target-arrow-shape":function(t){return C(t)},width:1,"line-color":function(t){return u(t)},"target-arrow-color":function(t){return u(t)},"line-style":function(t){return N(t)},opacity:1,"underlay-opacity":0,"underlay-color":"#ffc90e"}},{selector:"edge[name]",style:{label:function(t){var e=t.data("name");return""===e?e:e+"\n ⁠"},"text-wrap":"wrap","edge-text-rotation":"autorotate","text-background-opacity":"0"}},{selector:".eh-handle",style:{"background-color":"#1abc9c",width:12,height:12,shape:"ellipse","overlay-opacity":0,"border-width":12,"border-opacity":0}},{selector:".eh-hover",css:{"background-color":"#1abc9c"}},{selector:".eh-source",css:{"border-width":2,"border-color":"#1abc9c"}},{selector:".eh-target",css:{"border-width":2,"background-color":"#1abc9c","border-color":"#1abc9c"}},{selector:".eh-preview, .eh-ghost-edge",css:{"line-color":"#1abc9c","target-arrow-color":"#1abc9c","source-arrow-color":"#1abc9c"}},{selector:".highlightedEdge",style:{width:3.5,"border-width":4,"line-color":"#1abc9c","target-arrow-color":"#1abc9c","arrow-scale":2}},{selector:".highlightedNode",style:{"border-width":function(t){return l(t)},"border-color":"#1abc9c","background-color":"#fff"}},{selector:".invalidGene",style:{"border-width":2,"border-color":"#e94332",color:"#e94332"}},{selector:".invalidGeneHighlight",style:{"border-width":3,"font-weight":"bold","border-color":"#e94332",color:"#e94332"}},{selector:"node:selected",style:{"border-width":function(t){return c(t)},"underlay-opacity":.25,"underlay-color":"#ffc90e"}},{selector:".highlightedNode:selected, .invalidGeneHighlight:selected",style:{"border-width":function(t){return g(t)}}},{selector:"edge:selected",style:{width:3,"underlay-opacity":.25,"underlay-color":"#ffc90e"}}],i=function(t){switch(t._private.data.type){case"FAMILY":case"COMPLEX":case"COMPARTMENT":return.5;default:return 1}},o=function(t){switch(t._private.data.type){case"FAMILY":return 5;case"COMPLEX":return"5";case"COMPARTMENT":case"PROCESS":return 10;default:return 5}},n=function(t){switch(t._private.data.type){case"GENE":return 1;case"PROCESS":return 0;default:return 2}},r=function(t){switch(t._private.data.type){case"GENE":return 1;case"PROCESS":return 0;case"FAMILY":return 2;case"COMPLEX":return 1;case"COMPARTMENT":return 4;default:return 1}},l=function(t){switch(t._private.data.type){case"GENE":return 3;case"PROCESS":return 1;case"FAMILY":return 4;case"COMPARTMENT":return 6;default:return 3}},c=function(t){switch(t._private.data.type){case"GENE":return 2;case"PROCESS":return 1;case"FAMILY":case"COMPARTMENT":default:return 3}},g=function(t){switch(t._private.data.type){case"GENE":return 3;case"PROCESS":return 1;case"FAMILY":return 4;case"COMPARTMENT":return 6;default:return 3}},I=function(t){switch(t._private.data.type){case"GENE":case"PROCESS":return"roundrectangle";case"FAMILY":return"rectangle";case"COMPARTMENT":return"barrel";case"COMPLEX":return"cutrectangle";default:return"roundrectangle"}},s=function(t){return"#fff"},d=function(t){switch(t._private.data.type){case"GENE":case"FAMILY":case"COMPLEX":case"COMPARTMENT":default:return"#000000"}},u=function(t){return"#1b1b1b"},C=function(t){switch(t._private.data.type){case"ACTIVATES":return"triangle";case"INHIBITS":return"tee";case"INDUCES":return"triangle";case"REPRESSES":return"tee";case"BINDS":default:return"none"}},N=function(t){switch(t._private.data.type){case"ACTIVATES":case"INHIBITS":return"solid";case"INDUCES":case"REPRESSES":return"dashed";case"BINDS":default:return"solid"}},a)},function(t,e){var a={zoomFactor:.05,zoomDelay:45,minZoom:.1,maxZoom:10,fitPadding:50,panSpeed:10,panDistance:10,panDragAreaSize:75,panMinPercentSpeed:.25,panInactiveArea:8,panIndicatorMinOpacity:.5,zoomOnly:!1,fitSelector:void 0,animateOnFit:function(){return!1},fitAnimationDuration:1e3,sliderHandleIcon:"fa fa-minus",zoomInIcon:"fa fa-plus",zoomOutIcon:"fa fa-minus",resetIcon:"fa fa-expand"};t.exports=a},function(t,e){t.exports=require("cytoscape-navigator")},function(t,e){t.exports=require("cytoscape-context-menus")},function(t,e){t.exports=require("konva")},function(t,e){t.exports=require("cytoscape-view-utilities")},function(t,e){t.exports=require("cytoscape-grid-guide")},function(t,e){t.exports=require("cytoscape-popper")},function(t,e){t.exports=require("cytoscape-layout-utilities")},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik00ODEuNTA4LDIxMC4zMzZMNjguNDE0LDM4LjkyNmMtMTcuNDAzLTcuMjIyLTM3LjA2NC00LjA0NS01MS4zMDksOC4yODdDMi44Niw1OS41NDctMy4wOTgsNzguNTUxLDEuNTU4LDk2LjgwOA0KCQkJTDM4LjMyNywyNDFoMTgwLjAyNmM4LjI4NCwwLDE1LjAwMSw2LjcxNiwxNS4wMDEsMTUuMDAxYzAsOC4yODQtNi43MTYsMTUuMDAxLTE1LjAwMSwxNS4wMDFIMzguMzI3TDEuNTU4LDQxNS4xOTMNCgkJCWMtNC42NTYsMTguMjU4LDEuMzAxLDM3LjI2MiwxNS41NDcsNDkuNTk1YzE0LjI3NCwxMi4zNTcsMzMuOTM3LDE1LjQ5NSw1MS4zMSw4LjI4N2w0MTMuMDk0LTE3MS40MDkNCgkJCUM1MDAuMzE3LDI5My44NjIsNTEyLDI3Ni4zNjQsNTEyLDI1Ni4wMDFDNTEyLDIzNS42MzgsNTAwLjMxNywyMTguMTM5LDQ4MS41MDgsMjEwLjMzNnoiLz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports=require("@datastructures-js/max-heap")},function(t,e,a){"use strict";a.r(e),a.d(e,"EModalType",(function(){return Ma})),a.d(e,"PathwayMapper",(function(){return Wa}));var i,o=a(3),n=a.n(o),r=a(2),l=a(5),c=a(0),g=a.n(c),I=a(1),s=a(10),d=(a(54),a(22)),u=a.n(d),C=(a(55),a(56),a(57),a(16),a(8)),N=a(15),p=function(){function t(){}return Object.defineProperty(t,"exportGraph",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a){var i=t.pathwayTitle+"\n\n";i+=t.pathwayDetails+"\n\n";var o=e.nodes(),n=e.edges();if(i+="--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY\tWIDTH\tHEIGHT--\n",o)for(var r=0;r4?b[4]:"0",p=b.length>5?b[5]:"0",M={group:"nodes",data:{id:d,name:s,type:u,w:b.length>7?b[6]:"PROCESS"===u?6*s.length+24:"150",h:b.length>7?b[7]:"PROCESS"===u?"24":"52",parent:-1},position:{x:parseInt(N),y:parseInt(p)}};"-1"!=C&&(M.data.parent=C),a.push(M)}for(var A=n;A4?b[4].split(";"):[],j=b.length>5?b[5]:"",w=b.length>6?b[6]:"",T=b.length>7?b[7]:"",f=[];if(w)for(var v=w.split(")"),L=0;L=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},A=function(){function t(){Object.defineProperty(this,"pathwayInfo",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(this),this.pathwayInfo={pathwayTitle:"New Pathway",pathwayDetails:""}}return Object.defineProperty(t.prototype,"getPathwayInfo",{get:function(){return this.pathwayInfo},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"setPathwayInfo",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.pathwayInfo=t}}),Object.defineProperty(t.prototype,"b64toBlob",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a){void 0===a&&(a=512),e=e||"";for(var i=atob(t),o=[],n=0;n0){var n=a[0],r=n.boundingBox(),l=n.outerHeight(),c=this;a.forEach((function(e,a){if(0!=a&&null==i[e.parent().id()]){var o=c.calculateNewPosition(t,e,r,l);c.changePosition(e,0,0,o)}})),this.editor.handleChangePositionByAlignment(c.movedNodes)}}}),Object.defineProperty(t.prototype,"calculateNewPosition",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a,i){var o,n=e.position(),r=e.boundingBox(),l=e.isParent()?e.outerHeight()-(r.h-e.outerHeight())/2-(e.outerHeight()-e.height())/2:e.height(),c=e.isParent()?r.h-e.outerHeight():0;if("vLeft"===t)o={x:a.x1+r.w/2,y:n.y};else if("vCen"===t)o={x:a.x1+a.w/2,y:n.y};else if("vRight"===t)o={x:a.x2-r.w/2,y:n.y};else if("hTop"===t)o={x:n.x,y:a.y1+r.h/2};else if("hMid"===t&&e.isParent()&&""==e.data("name"))o={x:n.x,y:a.y1+a.h/2};else if("hMid"===t)o={x:n.x,y:a.y1+i/2+c/2};else if("hBot"===t&&e.isParent()&&""==e.data("name"))o={x:n.x,y:a.y2-r.h/2};else{if("hBot"!==t)return void console.log("Error: wrong alignment name "+t);o={x:n.x,y:a.y1+i-l/2}}return o}}),Object.defineProperty(t.prototype,"changePosition",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a,i){if(t.isParent()){var o=t.children(),n=t.boundingBox(),r=this;o.forEach((function(t,e){var a=t.boundingBox(),o=-(n.x1-a.x1)-n.w/2+a.w/2,l=-(n.y1-a.y1)-n.h/2+a.h/2;t.isParent()?r.changePosition(t,0,0,{x:i.x+o,y:i.y+l}):r.changePosition(t,o,l,i)}))}else{var l={x:i.x+e,y:i.y+a};this.movedNodes.push({node:t,nextPosition:l,oldPosition:null})}}}),t}(),m=(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(t,e)},function(t,e){function a(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(a.prototype=e.prototype,new a)}),E=function(t){function e(e){return t.call(this,e)||this}return m(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{show:this.props.show,onHide:function(){t.props.handleClose(Ma.ABOUT)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"About")),g.a.createElement(I.Modal.Body,null,g.a.createElement("h3",{id:"about-model-header"},"PathwayMapper 2.3"),g.a.createElement("div",{className:"aboutImageContent"},g.a.createElement("img",{src:a(58),alt:"",height:"34px"})),g.a.createElement("div",{className:"aboutImageContent"},g.a.createElement("img",{src:a(59),alt:"",height:"34px"})),g.a.createElement("div",{className:"adressText"},g.a.createElement("p",null,"i-Vis information Visualization Lab"),g.a.createElement("p",null,"Bilkent University, Ankara, Turkey")),g.a.createElement("div",{className:"adressText"},g.a.createElement("p",null,"Memorial Sloan-Kettering Cancer Center"),g.a.createElement("p",null,"New York, USA"))),g.a.createElement(I.Modal.Footer,null,g.a.createElement("a",{href:"https://github.com/iVis-at-Bilkent/pathway-mapper"},"https://github.com/iVis-at-Bilkent/pathway-mapper")))}}),e}(g.a.Component),j=a(11),w=a(17),T=a.n(w),f=a(9),v=a.n(f),L=a(12),O=a.n(L),G=a(13),P=a.n(G),S=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),z=a(19),Z=a(20);function Y(t){return[parseInt(t[1]+t[2],16),parseInt(t[3]+t[4],16),parseInt(t[5]+t[6],16),1]}var R,x={type:"rectangle",fill:Y("#bebebe"),x:0,y:0,width:6,height:20,stroke:[0,0,0,0],"stroke-width":0},B=["Amplification","Deep Deletion","Fusion","Germline Mutation","Missense Mutation (putative driver)","Missense Mutation (unknown significance)","Other Mutation","Promoter Mutation","Truncating Mutation (putative driver)","Truncating Mutation (unknown significance)","Inframe Mutation (putative driver)","Inframe Mutation (unknown significance)"],Q=[{type:"rectangle",fill:Y("#ff0000"),x:0,y:0,width:6,height:20},{type:"rectangle",fill:Y("#0000ff"),x:0,y:0,width:6,height:20},{type:"rectangle",fill:Y("#8B00C9"),x:0,y:4,width:6,height:12},{type:"rectangle",fill:Y("#FFFFFF"),x:0,y:8.75,width:6,height:1.6},{type:"rectangle",fill:Y("#008000"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#53D400"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#cf58bc"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#00B7CE"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#000000"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#708090"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#993404"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#a68028"),x:0,y:6.66,width:6,height:6.66}],k=function(t){function e(e){return t.call(this,e)||this}return S(e,t),Object.defineProperty(e.prototype,"generateOncoprintLegend",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t="http://www.w3.org/2000/svg",e=document.createElementNS(t,"svg");return Q.forEach((function(a,i){var o=i%3*280,n=o+9,r=38*Math.floor(i/3),l=r+15,c=document.createElementNS(t,"g");a.stroke||(a.stroke=[0,0,0,0],a["stroke-width"]=0),c.appendChild(Object(j.shapeToSvg)(x,o,r)),c.appendChild(Object(j.shapeToSvg)(a,o,r));var g=document.createElementNS(t,"text");g.setAttributeNS(null,"x",n.toString()),g.setAttributeNS(null,"y",l.toString()),g.setAttributeNS(null,"font-size","12"),g.setAttributeNS(null,"font-family","Arial");var I=document.createTextNode(B[i]);g.appendChild(I),c.appendChild(g),e.appendChild(c)})),e.setAttribute("width","840"),e.setAttribute("height","175"),e.style.paddingTop="20px",e.setAttribute("xmlns",t),e}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{bsSize:"lg",id:"cBioHelpModal",className:"pathwayMapper",show:this.props.show,onHide:function(){t.props.handleClose(Ma.CHELP)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"PathwayMapper cBioPortal Edition 2.2")),!this.props.patientView&&g.a.createElement(I.Modal.Body,null,g.a.createElement("p",{className:"leftText"},"PathwayMapper shows you your genes of interest with the alteration frequencies of selected genetic profiles of the chosen study overlaid on a TCGA pathway using a white to red color scale (the more frequently altered a gene is, the more red it's shown). All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with highest ranking with the default ranking options but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table.",g.a.createElement("br",null),g.a.createElement("br",null),"Refer to the documentation ",g.a.createElement("a",{href:"https://github.com/iVis-at-Bilkent/pathway-mapper",target:"_blank"},"here")," for the notation used.",g.a.createElement("br",null),g.a.createElement("br",null),"To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table. Ranking criteria might be changed by changing the options at the bottom of the table.",g.a.createElement("br",null),g.a.createElement("br",null),"The buttons on top of the pathway are:",g.a.createElement("ul",null,g.a.createElement("table",{cellPadding:5},g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:O.a}))," ",g.a.createElement("td",null,"Save as PNG")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:P.a}))," ",g.a.createElement("td",null,"Save as SVG")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:v.a}))," ",g.a.createElement("td",null,"Perform layout: Layout is recalculated taking current node positions into account")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:z}))," ",g.a.createElement("td",null,"Add selected genes to query: You may select additional genes from the pathway by left clicking (Shift + left click to add more genes)")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:Z}))," ",g.a.createElement("td",null,"Add all valid genes to query: All valid gene symbols will be added to the query; others will be ignored")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:T.a}))," ",g.a.createElement("td",null,"Edit pathway: Edit both the topology and the geometry of the current pathway with the full blown PathwayMapper editor")))))),",",this.props.patientView&&g.a.createElement(I.Modal.Body,null,g.a.createElement("p",{className:"leftText"},"PathwayMapper shows you your genes of interest with the mutation types, copy number alterations and fusions of selected genetic profiles of the chosen study overlaid on a TCGA pathway using the OncoPrint color scheme. All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with the highest number of genes of interest matching the ones in a pathway but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table.",g.a.createElement("br",null),g.a.createElement("br",null),"Refer to the documentation ",g.a.createElement("a",{href:"https://github.com/iVis-at-Bilkent/pathway-mapper",target:"_blank"},"here")," for the notation used.",g.a.createElement("br",null),g.a.createElement("br",null),"Genetic alteration legend:",g.a.createElement("br",null),g.a.createElement("div",{className:"container",style:{paddingLeft:"45px",width:"fit-content"},dangerouslySetInnerHTML:{__html:this.generateOncoprintLegend().outerHTML}}),g.a.createElement("p",{style:{paddingLeft:"45px"}},"Putative driver and unknown significance annotations are based on data from OncoKB and CancerHotspots.org."),g.a.createElement("br",null),"To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table.",g.a.createElement("br",null),g.a.createElement("br",null),"The buttons on top of the pathway are:",g.a.createElement("ul",null,g.a.createElement("table",{cellPadding:5},g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:O.a}))," ",g.a.createElement("td",null,"Save as PNG")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:P.a}))," ",g.a.createElement("td",null,"Save as SVG")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:v.a}))," ",g.a.createElement("td",null,"Perform layout: Layout is recalculated taking current node positions into account")))))))}}),e}(g.a.Component),W=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),H=function(t){function e(e){return t.call(this,e)||this}return W(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{show:this.props.show,onHide:function(){t.props.handleClose(Ma.CONFIRMATION)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Confirmation")),g.a.createElement(I.Modal.Body,null,g.a.createElement("div",null,"All unsaved changes will be lost. Do you want to continue?")),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){e.pendingFunction(),t.props.handleClose(Ma.CONFIRMATION)}},"Yes"),g.a.createElement(I.Button,{onClick:function(){t.props.handleClose(Ma.CONFIRMATION)}},"No")))}}),e}(g.a.Component),U=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),V=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r};!function(t){t[t.GRID=0]="GRID",t[t.GUIDE=1]="GUIDE",t[t.NONE=2]="NONE"}(R||(R={}));var K=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"gridSize",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"guideColor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"defaultSettings",{enumerable:!0,configurable:!0,writable:!0,value:h.defaultGridGuideOptions}),Object.defineProperty(a,"enabledType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(a),a.gridSize=a.defaultSettings.gridSpacing,a.guideColor=a.defaultSettings.guidelinesStyle.strokeStyle,a}return U(e,t),Object.defineProperty(e.prototype,"setEnabledType",{enumerable:!1,configurable:!0,writable:!0,value:function(t){t!==this.enabledType?this.enabledType=t:this.enabledType=R.NONE}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{dialogClassName:"gridModal",show:this.props.show,onShow:function(){t.enabledType=t.props.pathwayActions.enabledType},onHide:function(){t.props.handleClose(Ma.GRID)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Grid Settings")),g.a.createElement(I.Modal.Body,null,g.a.createElement(I.Form,{id:"gripOptionsForm",className:"leftText"},g.a.createElement(I.Row,null,g.a.createElement(I.Col,{sm:8},g.a.createElement(I.ControlLabel,null,"Enable Grids:")),g.a.createElement(I.Col,{sm:4},g.a.createElement(I.Checkbox,{checked:this.enabledType===R.GRID,onChange:function(){t.setEnabledType(R.GRID)}}))),g.a.createElement(I.Row,null,g.a.createElement(I.Col,{sm:8},g.a.createElement(I.ControlLabel,null,"Enable Guidelines:")),g.a.createElement(I.Col,{sm:4},g.a.createElement(I.Checkbox,{checked:this.enabledType===R.GUIDE,onChange:function(){t.setEnabledType(R.GUIDE)}}))),g.a.createElement(I.Row,null,g.a.createElement(I.Col,{sm:8},g.a.createElement(I.ControlLabel,null,"Grid Size:")),g.a.createElement(I.Col,{sm:4},g.a.createElement(I.FormControl,{type:"text",value:this.gridSize,onChange:function(e){t.gridSize=e.target.value}}))),g.a.createElement(I.Row,{style:{marginTop:"10px"}},g.a.createElement(I.Col,{sm:8},g.a.createElement(I.ControlLabel,null,"Guideline Color:")),g.a.createElement(I.Col,{sm:4},g.a.createElement("input",{id:"guidelineColor",type:"color",className:"form-control",value:this.guideColor,onChange:function(e){t.guideColor=e.target.value}}))))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.enabledType=t.enabledType,t.props.pathwayActions.adjustGridSettings(t.gridSize,t.guideColor),t.props.pathwayActions.enabledType===R.GRID?t.props.pathwayActions.toggleGrid(!0):t.props.pathwayActions.enabledType===R.GUIDE?t.props.pathwayActions.toggleGuide(!0):t.props.pathwayActions.toggleGrid(!1),t.props.handleClose(Ma.GRID)}},"Save")))}}),V([r.observable],e.prototype,"gridSize",void 0),V([r.observable],e.prototype,"guideColor",void 0),V([r.observable],e.prototype,"enabledType",void 0),e=V([l.observer],e)}(g.a.Component),F=function(){function t(){}return Object.defineProperty(t,"createGraphHierarchy",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e=[],a={},i=0,o=t.length;i0?a[l.parent().id()].childNodes.push(l):e.push(l)}return e}}),Object.defineProperty(t,"createGraphHierarchyRealTime",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e=[],a={},i=0,o=t.length;i0||""!==a.outerHTML?i.GENOMICDATA_LABEL_Y_OFFSET:0;if(i.svg.appendChild(i.createNodeLabel(t,n)),e)for(;e.length>0;){var l=e[0],c=t.position(),g=l.getAttribute("x"),I=l.getAttribute("y");l.setAttribute("x",c.x-t.width()/2+parseFloat(g)),l.setAttribute("y",c.y-t.height()/2+parseFloat(I)),i.svg.appendChild(l)}else if(""!==a.outerHTML){c=t.position();var s=parseInt(a.getAttribute("width")),d=parseInt(a.getAttribute("height")),u=c.y+t.height()/2-(d+8);a.setAttribute("x",c.x-s/2),a.setAttribute("y",u),i.svg.appendChild(a)}if(t.childNodes)for(var C in t.childNodes)r(t.childNodes[C])};for(var l in n){var c=n[l];r(c)}return e.forEach((function(t){i.drawEdge(t)})),this.svg.outerHTML}}),Object.defineProperty(t.prototype,"drawEdge",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=t.sourceEndpoint(),a=t.targetEndpoint(),i=t.style("target-arrow-shape"),o=t.style("line-style"),n=t.style("curve-style"),r="segments"===n?t.segmentPoints():t.controlPoints(),l=this.createEdgeLabel(t);l&&this.svg.appendChild(l);var c={x:e.x,y:e.y},g={x:a.x,y:a.y};r&&r.length>0&&(c={x:r[r.length-1].x,y:r[r.length-1].y});var I=this.unitVector({x:a.x-c.x,y:a.y-c.y}),s=this.scale(I,-1),d=a.x,u=a.y;if("triangle"===i){d=a.x+this.TRIANGLE_ARROW_HEAD_HEIGHT*s.x,u=a.y+this.TRIANGLE_ARROW_HEAD_HEIGHT*s.y;var C=this.rotateVector(I,Math.PI/2),N=this.rotateVector(I,-Math.PI/2);C=this.scale(C,this.TRIANGLE_ARROW_HEAD_WIDTH/2),N=this.scale(N,this.TRIANGLE_ARROW_HEAD_WIDTH/2);var p=d+C.x,M=u+C.y;g={x:(p+(b=d+N.x))/2,y:(M+(y=u+N.y))/2};var A=document.createElementNS(this.SVGNameSpace,"polygon");A.setAttribute("points",p+","+M+","+b+","+y+","+a.x+","+a.y),this.svg.appendChild(A)}else if("tee"===i){d=a.x,u=a.y;C=this.rotateVector(I,Math.PI/2),N=this.rotateVector(I,-Math.PI/2);C=this.scale(C,this.T_ARROW_HEAD_HEIGHT/2),N=this.scale(N,this.T_ARROW_HEAD_HEIGHT/2);var b,y;p=d+C.x,M=u+C.y;g={x:(p+(b=d+N.x))/2,y:(M+(y=u+N.y))/2};var h=document.createElementNS(this.SVGNameSpace,"line");h.setAttribute("x1",p),h.setAttribute("y1",M),h.setAttribute("x2",b),h.setAttribute("y2",y),h.setAttribute("stroke-width",this.T_ARROW_HEAD_WIDTH.toString()),h.setAttribute("stroke","black"),this.svg.appendChild(h)}if(!r||r.length<1){var D=document.createElementNS(this.SVGNameSpace,"line");D.setAttribute("x1",e.x),D.setAttribute("y1",e.y),D.setAttribute("x2",g.x),D.setAttribute("y2",g.y),D.setAttribute("stroke-width",this.EDGE_WIDTH.toString()),D.setAttribute("stroke","black"),"dashed"===o&&D.setAttribute("stroke-dasharray",this.DASH_PARAMETERS),this.svg.appendChild(D)}else if("unbundled-bezier"===n||"bezier"===n){for(var m=document.createElementNS(this.SVGNameSpace,"path"),E=[],j=0;ja[a.length-1].value)return{lower:{value:a[a.length-1].value,color:a[a.length-1].color},upper:{value:1/0,color:a[a.length-1].color}};for(var i=0;i=a[i].value&&e0&&(s+=-1*d,d=0),I=function(t,e,a,i,o){var n=Math.log(1+i),r=Math.log(1+a),l=(Math.log(1+(o>=0?o:-1*o))-r)/(n-r)*(o>=0?.8:1.2);return{r:t.r+l*(e.r-t.r),g:t.g+l*(e.g-t.g),b:t.b+l*(e.b-t.b)}}(C,u,d,s,Number(o))}var N;N=void 0===o||"-"===o[0]||Number(o)>100?"rgb(210,210,210)":"rgb("+Math.round(I.r)+", "+Math.round(I.g)+", \n "+Math.round(I.b)+")";var p=document.createElementNS("http://www.w3.org/2000/svg","rect");p.setAttribute("x",t),p.setAttribute("y",e),p.setAttribute("width",a),p.setAttribute("height",i),void 0!==l&&void 0!==o?(p.setAttribute("style","stroke-width:2;stroke:"+l+";opacity:1;fill:"+N+";"),p.setAttribute("border-color","#ffffff")):p.setAttribute("style","stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:"+N+";"),"-"===o[0]&&(o=o.substr(1));var M=o<.5&&o>0?"<0.5":Number(o).toFixed(1),A=Number(o)>100?"N/P":M+"%",b=a/2-4*A.length,y=document.createElementNS("http://www.w3.org/2000/svg","text");y.setAttribute("x",t+b),y.setAttribute("y",e+i/2+14/3),y.setAttribute("font-family","Arial"),y.setAttribute("font-size","14"),void 0!==l&&void 0!==o&&o>=0&&o<=100&&y.setAttribute("border-color","red"),y.innerHTML=A,n.appendChild(p),null!=o&&void 0!==o&&n.appendChild(y)}var at,it,ot,nt=function(){function t(t){Object.defineProperty(this,"genomicDataMap",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"visibleGenomicDataMapByType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupedGenomicDataCount",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupedGenomicDataMap",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"patientData",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupComparisonData",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"DEFAULT_VISIBLE_GENOMIC_DATA_COUNT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"observers",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"colorScheme",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clearAllGenomicData",{enumerable:!0,configurable:!0,writable:!0,value:function(){this.genomicDataMap={},this.visibleGenomicDataMapByType={},this.groupedGenomicDataMap={},this.groupedGenomicDataCount=0}}),Object.defineProperty(this,"prepareGenomicDataShareDB",{enumerable:!0,configurable:!0,writable:!0,value:function(t){for(var e={},a=[],i={},o=t.split("\n"),n=o[0].split("\t"),r=1;r3?t-3:0)}}),Object.defineProperty(t.prototype,"updateColorScheme",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.colorScheme=t}}),Object.defineProperty(t.prototype,"showGenomicData",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=this,i=this.countVisibleGenomicDataByType();i<1?this.hideGenomicData():(this.cy.nodes('[type="GENE"]').forEach((function(a){a.data("w",e.getRequiredWidthForGenomicData(i)),t&&t(a)})),this.cy.style().selector('node[type="GENE"]').style("text-margin-y",(function(t){return t.data("name")in a.genomicDataMap?-15:0})).style("background-image",(function(t){var e=encodeURIComponent(a.generateSVGForNode(t).outerHTML);return"undefined"===e?"none":"data:image/svg+xml;utf8,"+e})).update())}}),Object.defineProperty(t.prototype,"generateHTMLContentForComparisonNodeTooltip",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=t.data("name"),i=this.groupComparisonData[a],o=q()("
");o.css({"max-width":"200px","max-height":"200px","word-wrap":"break-word","overflow-y":"auto","font-size":"12px"}),q()("
").css({"margin-top":0});var n=0;for(var r in i){var l=q()("
");l.css({"margin-top":0});var c=q()("
");c.css({"margin-top":0}),q()("
").css({height:"12px",width:"12px","background-color":e[n].color}),n++,c.append(q()("
 "+r+": "+i[r].toFixed(1)+"
")),l.append(c),o.append(c)}return o}}),Object.defineProperty(t.prototype,"showGroupComparisonData",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this,i=this.groupComparisonData;this.cy.nodes().forEach((function(t){t.data("w",1e3),e&&e(t)})),this.cy.style().selector('node[type="GENE"]').style("text-margin-y",(function(t){var e=t.data("name");return Object.keys(a.groupComparisonData).includes(e)?-15:0})).style("background-image",(function(e){var i=encodeURIComponent(a.generateSVGForGroupComparisonNode(e,t).outerHTML);return"undefined"===i?"none":"data:image/svg+xml;utf8,"+i})).update(),this.cy.on("mouseover",'node[type="GENE"]',(function(e){var o=e.target||e.cyTarget,n=o.data("name");if(i[n]){var r=o.popperRef(),l=document.createElement("div");document.body.appendChild(l);var c=tt()(l,{getReferenceClientRect:r.getBoundingClientRect,trigger:"manual",placement:"bottom",interactive:!0,theme:"cbioportal",content:function(){return a.generateHTMLContentForComparisonNodeTooltip(o,t).get(0)},onHidden:function(t){t.destroy(),l.remove()}});o.one("showqtipevent",(function(){c.show()})),o.on("mouseout",(function(){l&&l._tippy&&c.hide()})),o.trigger("showqtipevent")}}))}}),Object.defineProperty(t.prototype,"parseGenomicData",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.genomicDataMap=this.genomicDataMap||{},this.visibleGenomicDataMapByType=this.visibleGenomicDataMapByType||{},this.groupedGenomicDataMap=this.groupedGenomicDataMap||{};for(var a=[],i=t.split("\n"),o=i[0].split("\t"),n=1;n12?o-12:0),c=l-10;r.setAttribute("width",l),r.setAttribute("height",n.h),r.setAttribute("xmlns",a);var g={w:c,h:25,x:l/2-c/2,y:n.h/2+12.5-18},I=0;for(var s in e[i]){var d=e[i],u=s;if(this.visibleGenomicDataMapByType[i]){var C=this.getOncoprintColors(u);void 0!==d[u]?N(g.x+I*g.w/o,g.y,g.w/o,g.h,100,r,u,C):N(g.x+I*g.w/o,g.y,g.w/o,g.h,null,r,"",null),I++}}function N(t,e,i,o,n,r,l,c){if(n){var g=document.createElementNS(a,"rect");g.setAttribute("x",t),g.setAttribute("y",e),g.setAttribute("width",i),g.setAttribute("height",o),g.setAttribute("style","stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:"+c+";");var I=i/2-16,s=document.createElementNS(a,"text");"rgb(0,0,0)"===c&&s.setAttribute("fill","white"),s.setAttribute("x",t+I),s.setAttribute("y",e+o/2+14/3),s.setAttribute("font-family","Arial"),s.setAttribute("font-size","14"),s.innerHTML=l.substring(0,4),r.appendChild(g),r.appendChild(s)}else c="rgb(210,210,210)"}return r}}),Object.defineProperty(t.prototype,"generateOncoprintForPatientNode",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this.patientData[t.data("name")],a="http://www.w3.org/2000/svg",i=document.createElementNS(a,"svg");if(!e)return{outerHTML:""};var o=new j.GeneticAlterationRuleSet(e.geneticTrackRuleSetParams),n=o.getUniversalShapes(6,23),r=o.getSpecificShapesForDatum(e.geneticTrackData,6,23).map((function(t){return n.concat(t)}));return r.forEach((function(t,e){var o=9*e,n=document.createElementNS(a,"g");t.forEach((function(t){return n.appendChild(Object(j.shapeToSvg)(t,o,8))})),i.appendChild(n)})),i.setAttribute("width",(9*r.length).toString()),i.setAttribute("height",31..toString()),i.setAttribute("xmlns",a),i}}),Object.defineProperty(t.prototype,"getCNADisplayString",{enumerable:!1,configurable:!0,writable:!0,value:function(t){return{"-2":"HOMODELETED","-1":"HETLOSS",1:"GAIN",2:"AMPLIFIED"}[t]}}),Object.defineProperty(t.prototype,"generateSvgIconForSample",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){return''+e+""}}),Object.defineProperty(t.prototype,"generateHTMLContentForNodeTooltip",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this,i=e.sampleColors,o=e.sampleIndex,n=e[t.data("name")],r=q()("
");return r.css({"max-width":"200px","max-height":"200px","word-wrap":"break-word","overflow-y":"auto"}),n.geneticTrackData.forEach((function(t,e){var n=t.sample,l=i[n],c=(o[n]+1).toString(),g=a.generateSvgIconForSample(l,c),I=e>0?"10px":"0px",s=q()("
");s.css({"margin-top":I});var d=t.data,u=[],C=[],N=[];d.forEach((function(e){var i=e.gene.hugoGeneSymbol;if(t.disp_mut&&e.proteinChange&&"Fusion"!==e.mutationType){var o=e.proteinChange;u.push({gene:i,proteinChange:o})}if(t.disp_cna&&e.alteration){var n=e.alteration,r=a.getCNADisplayString(n);C.push({gene:i,cnaLabel:r})}if(t.disp_fusion&&e.proteinChange&&"Fusion"===e.mutationType){o=e.proteinChange;N.push({gene:i,proteinChange:o})}}));var p=u.length>0?"Mutation: ":"",M=C.length>0?"CNA: ":"",A=N.length>0?"Fusion: ":"";u.forEach((function(t,e){p+=""+t.gene+" "+t.proteinChange+"",e!==u.length-1?p+=", ":p+="
"})),C.forEach((function(t,e){M+=""+t.gene+" "+t.cnaLabel+"",e!==C.length-1?M+=", ":M+="
"})),N.forEach((function(t,e){A+=""+t.gene+" "+t.proteinChange+"",e!==N.length-1?A+=", ":A+="
"}));var b=" "+n+"
";s.append(q()("
"+g+b+p+M+A+NaN)),r.append(s)})),r}}),t}(),rt=function(){return(rt=Object.assign||function(t){for(var e,a=1,i=arguments.length;a=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},ct=a(6),gt=function(){function t(e,a,i,o,n,l,c,g,I,s,d,u){Object.defineProperty(this,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"genomicDataOverlayManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"edgeEditing",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"selectedNodeStack",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"layoutProperties",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"FIT_CONSTANT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"observers",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"svgExporter",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"undoRedoManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isCbioPortal",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isCollaborative",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shareDBManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"portalAccessor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"viewUtilities",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"profiles",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"genomicDataOverlayColorScheme",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"colorSchemeChangeCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"incrementChatMessageCountCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"newMessageCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"updatePathwayTitleCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(this),this.cy=i,this.isCollaborative=e,this.isCbioPortal=o,this.profiles=c,this.genomicDataOverlayColorScheme=g,this.colorSchemeChangeCallback=I,this.incrementChatMessageCountCallback=s,this.newMessageCallback=d;var C={bendPositionsFunction:function(t){return t.data("bendPointPositions")},controlPositionsFunction:function(t){return t.data("controlPointPositions")},undoable:!0,anchorShapeSizeFactor:6,enabled:!this.isCbioPortal,handleReconnectEdge:this.isCollaborative?this.reconnectEdge.bind(this):void 0,enableMultipleAnchorRemovalOption:!0};this.isCbioPortal||(this.edgeEditing=this.cy.edgeEditing(C)),this.portalAccessor=l,this.isCollaborative&&(this.shareDBManager=a),this.FIT_CONSTANT=50,this.layoutProperties=ct.clone(t.defaultLayoutProperties),this.observers=[],this.genomicDataOverlayManager=new nt(this.cy),this.svgExporter=new X(this.edgeEditing,this),this.selectedNodeStack={},this.undoRedoManager=n,this.undoRedoManager.action("changePositions",this.doChangePosition,this.undoChangePosition),this.undoRedoManager.action("changeNodeSize",this.doChangeNodeSize,this.undoChangeNodeSize),this.undoRedoManager.action("changeCompoundSize",this.doChangeCompoundSize,this.undoChangeCompoundSize),this.undoRedoManager.action("changeName",this.doChangename,this.undoChangeName),this.undoRedoManager.action("hideNode",this.doHide,this.undoHide),this.undoRedoManager.action("showAllNodes",this.doShow,this.undoShow),this.undoRedoManager.action("highlightInvalidGenes",this.doHighlightInvalidGenes,this.undoHighlightInvalidGenes),this.undoRedoManager.action("removeHighlightInvalidGenes",this.undoHighlightInvalidGenes,this.doHighlightInvalidGenes),this.undoRedoManager.action("highlightOthers",this.doHighlight,this.undoHighlight),this.undoRedoManager.action("removeOtherHighlight",this.undoHighlight,this.doHighlight)}return Object.defineProperty(t.prototype,"setProfile",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.profiles[t]=e}}),Object.defineProperty(t.prototype,"addProfile",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.profiles.push(t)}}),Object.defineProperty(t.prototype,"removeProfiles",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.profiles.length=0}}),Object.defineProperty(t.prototype,"setGenomicDataOverlayColorScheme",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.genomicDataOverlayColorScheme=t}}),Object.defineProperty(t.prototype,"setViewUtilities",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.viewUtilities=t}}),Object.defineProperty(t.prototype,"getGenomicDataOverlayColorScheme",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.genomicDataOverlayColorScheme}}),Object.defineProperty(t.prototype,"handleChangePositionByAlignment",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.isCollaborative?this.shareDBManager.changeElementsPositionByAlignment(t):this.undoRedoManager.do("changePositions",t)}}),Object.defineProperty(t.prototype,"doChangePosition",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e=[],a=0;a0&&(n.forEach((function(t){a[t.id()]=!0})),o=o.union(t(n))),o=o.union(e.remove()),i.cy.nodes().updateCompoundBounds(),o}(t);this.undoRedoManager.do("remove",o);for(var n=0;n0&&(r.data.source=g.id()),c.length>0&&(r.data.target=c.id()),!(c.length<0&&g.length<0)){var I=this.cy.filter('edge[source = "'+g.id()+'"][target = "'+c.id()+'"]'),s=!1;I.forEach((function(t){return t.data().type!=r.data.type||(s=!0,!1)})),s||(delete r.data.id,i.push(r))}}this.cy.add(i)}}),Object.defineProperty(t.prototype,"fitGraph",{enumerable:!1,configurable:!0,writable:!0,value:function(){if(this.isCollaborative){this.cy.fit(this.FIT_CONSTANT);var t={zoomLevel:this.cy.zoom(),panLevel:this.cy.pan()};this.updateGlobalOptions(t)}else this.cy.fit(this.FIT_CONSTANT)}}),Object.defineProperty(t.prototype,"loadFile",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a;this.isCollaborative?this.loadfileShareDB(t,e):this.loadFileCy(t,e),null===(a=this.edgeEditing)||void 0===a||a.initAnchorPoints(this.cy.edges()),this.fitGraph()}}),Object.defineProperty(t.prototype,"loadFileCy",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.removeElementCy(this.cy.elements()),this.addNodesCy(t),this.addEdgesCy(e)}}),Object.defineProperty(t.prototype,"loadfileShareDB",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.shareDBManager.loadGraph(t,e)}}),Object.defineProperty(t.prototype,"removeAllElements",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.isCollaborative?this.shareDBManager.removeAllElements():this.cy.remove(this.cy.elements())}}),Object.defineProperty(t.prototype,"updateHighlight",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){e?this.undoRedoManager.do("highlightOthers",t):this.undoRedoManager.do("removeOtherHighlight",t)}}),Object.defineProperty(t.prototype,"updateVisibility",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){e?this.viewUtilities.hide(t):this.viewUtilities.show(t)}}),Object.defineProperty(t.prototype,"updateElementCallback",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e,a,i,o,n=t.oi,r=n.id,l=this.cy.$("#"+r);if(this.changeNameCy(l,n.name),l.isNode())l.isParent()?(l.style("min-width",n.minWidth),l.style("min-width-bias-left",n.minWidthBiasLeft),l.style("min-width-bias-right",n.minWidthBiasRight),l.style("min-height",n.minHeight),l.style("min-height-bias-top",n.minHeightBiasTop),l.style("min-height-bias-bottom",n.minHeightBiasBottom)):(l.data("w",n.w),l.data("h",n.h),l.position({x:n.x,y:n.y})),this.updateVisibility(l,n.isHidden),this.updateHighlight(l,n.isHighlighted),n.isInvalidGene?this.doHighlightInvalidGenes(l):this.undoHighlightInvalidGenes(l);else if(l.isEdge()){var c=n.pubmedIDs;l.data("pubmedIDs",c),this.updateHighlight(l,n.isHighlighted);var g=n.anchorPoints;if(n.source!==l.source().id()||n.target!==l.target().id()){var I={source:n.source,target:n.target};l.move(I),null===(e=this.edgeEditing)||void 0===e||e.initAnchorPoints(l)}else{if("bezier"===n.edgeCurveStyle){var s=null===(a=this.edgeEditing)||void 0===a?void 0:a.getAnchorsAsArray(l);if(s&&s.length>0)for(var d=0;d=6?a.visibilityMap[t]=!1:a.visibilityMap[t]&&i++})),this.shareDBManager.addGenomicVisibilityData(a.visibilityMap)}else this.genomicDataOverlayManager.addGenomicDataLocally(t,e)}}),Object.defineProperty(t.prototype,"adjustVisibilityShareDB",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this.profiles.map((function(t){return t.profileId})).indexOf(t);this.setProfile(a,rt(rt({},this.profiles[a]),{enabled:e}))}}),Object.defineProperty(t.prototype,"addToProfiles",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.profiles.map((function(t){return t.profileId})).includes(t)||this.addProfile({profileId:t,enabled:!0})}}),Object.defineProperty(t.prototype,"addPortalGenomicData",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a){if(this.isCollaborative){var i=this.genomicDataOverlayManager.preparePortalGenomicDataShareDB(t);this.shareDBManager.addGenomicData(i.genomicDataMap),this.shareDBManager.groupGenomicData(Object.keys(i.visibilityMap),e),this.shareDBManager.addGenomicVisibilityData(i.visibilityMap)}else void 0!==a?this.genomicDataOverlayManager.addPortalGenomicData(t,e,a):this.genomicDataOverlayManager.addPortalGenomicData(t,e)}}),Object.defineProperty(t.prototype,"shareDBGenomicDataHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e="od"===Object.keys(t)[1],a=t.oi,i=t.p[1];e?this.genomicDataOverlayManager.removeGenomicDataWithGeneSymbol(i):this.genomicDataOverlayManager.addGenomicDataWithGeneSymbol(i,a)}}),Object.defineProperty(t.prototype,"shareDBGenomicDataGroupChangeHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a="od"===Object.keys(t)[1],i=t.oi,o=t.p[1];a?i||this.genomicDataOverlayManager.clearAllGenomicData():(this.genomicDataOverlayManager.addGenomicGroupData(o,i),1!==i.length&&console.log("Grouped genomic data expected to be of length 1"),i.forEach((function(t){e.addToProfiles(t)}))),this.genomicDataOverlayManager.showGenomicData((function(t){e.resizeElements(t)})),this.genomicDataOverlayManager.notifyObservers()}}),Object.defineProperty(t.prototype,"shareDBGenomicDataVisibilityHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=t.oi,i=t.p[1];"od"===Object.keys(t)[1]?(this.genomicDataOverlayManager.removeGenomicVisData(),this.removeProfiles()):(this.genomicDataOverlayManager.addGenomicVisData(i,a),this.adjustVisibilityShareDB(i,a)),this.genomicDataOverlayManager.showGenomicData((function(t){e.resizeElements(t)})),this.genomicDataOverlayManager.notifyObservers()}}),Object.defineProperty(t.prototype,"incrementNumberOfUsers",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.shareDBManager.incrementNumberOfUsers()}}),Object.defineProperty(t.prototype,"getUserId",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.shareDBManager.doc.data[this.shareDBManager.NUMBER_OF_USERS]}}),Object.defineProperty(t.prototype,"updateMessageCount",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.incrementChatMessageCountCallback(t)}}),Object.defineProperty(t.prototype,"updateGenomicDataColorSchemeHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=t.li;this.setGenomicDataOverlayColorScheme(a),this.colorSchemeChangeCallback(a),this.genomicDataOverlayManager.updateColorScheme(a),this.genomicDataOverlayManager.showGenomicData((function(t){e.resizeElements(t)})),this.genomicDataOverlayManager.notifyObservers()}}),Object.defineProperty(t.prototype,"resizeNodesToContent",{enumerable:!1,configurable:!0,writable:!0,value:function(t){if(this.isCollaborative){var e=this.genomicDataOverlayManager.countVisibleGenomicDataByType(),a=148+36*(e-3),i=this.shareDBManager;t.forEach((function(t){if(t.isParent())i.resizeCompound(t,0,0,0,0,0,0);else{var o=150,n=52;if(""!=t.data("name"))o=10*t.style("label").length+6,n=24;"PROCESS"!==t.data("type")&&e>0&&(n=52,e<4?150>o&&(o=150):a>o&&(o=a)),i.setSizeOfElement(t,o,n)}}))}else{var o=this.cy.undoRedo(),n=[],r=this.genomicDataOverlayManager.countVisibleGenomicDataByType(),l=150+36*(r-3);t.forEach((function(t){if(t.isParent()){i={ele:t,oldMinWidth:t.style("min-width"),newMinWidth:0,oldMinWidthBiasLeft:t.style("min-width-bias-left"),newMinWidthBiasLeft:0,oldMinWidthBiasRight:t.style("min-width-bias-right"),newMinWidthBiasRight:0,oldMinHeight:t.style("min-height"),newMinHeight:0,oldMinHeightBiasTop:t.style("min-height-bias-top"),newMinHeightBiasTop:0,oldMinHeightBiasBottom:t.style("min-height-bias-bottom"),newMinHeightBiasBottom:0};n.push({name:"changeCompoundSize",param:i})}else{var e=150,a=52;if(""!=t.data("name"))e=6*t.style("label").length+24,a=24;"PROCESS"!==t.data("type")&&r>0&&(a=52,r<4?150>e&&(e=150):l>e&&(e=l));var i={ele:t,oldWidth:t.width(),newWidth:e,oldHeight:t.height(),newHeight:a};n.push({name:"changeNodeSize",param:i})}})),o.do("batch",n)}this.cy.nodeEditing("get").refreshGrapples()}}),Object.defineProperty(t,"defaultLayoutProperties",{enumerable:!0,configurable:!0,writable:!0,value:{name:"fcose",nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:!0,randomize:!1,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,tilingPaddingVertical:10,tilingPaddingHorizontal:10,initialEnergyOnIncremental:.5,animationDuration:2e3,animationEasing:"cubic-bezier(0.17,0.72,0.41,0.98)",nodeDimensionsIncludeLabels:!0}}),lt([r.observable],t.prototype,"profiles",void 0),lt([r.observable],t.prototype,"genomicDataOverlayColorScheme",void 0),lt([r.action.bound],t.prototype,"setProfile",null),lt([r.action.bound],t.prototype,"addProfile",null),lt([r.action.bound],t.prototype,"removeProfiles",null),lt([r.action.bound],t.prototype,"setGenomicDataOverlayColorScheme",null),lt([n.a],t.prototype,"setViewUtilities",null),lt([n.a],t.prototype,"doHide",null),lt([n.a],t.prototype,"undoHide",null),lt([n.a],t.prototype,"doShow",null),lt([n.a],t.prototype,"undoShow",null),lt([n.a],t.prototype,"updateVisibility",null),t}(),It=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),st=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},dt=function(t){function e(e){var i=t.call(this,e)||this;return Object.defineProperty(i,"internalLayoutProperties",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(i),i.internalLayoutProperties=y.a.clone(gt.defaultLayoutProperties),a.layoutProperties=y.a.clone(gt.defaultLayoutProperties),i}var a;return It(e,t),a=e,Object.defineProperty(e.prototype,"updateInternalLayoutProperty",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.internalLayoutProperties[t]=e}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{id:"layoutPropertiesDiv",show:this.props.show,onEnter:function(){t.internalLayoutProperties=y.a.clone(a.layoutProperties)},onHide:function(){t.internalLayoutProperties=y.a.clone(a.layoutProperties),t.props.handleClose(Ma.LAYOUT)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Layout Properties")),g.a.createElement(I.Modal.Body,{id:"layoutPropsForm",className:"leftText"},g.a.createElement(I.Form,null,g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"control-label",sm:6},"Node Repulsion:"),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.nodeRepulsion.toString(),onChange:function(e){t.updateInternalLayoutProperty("nodeRepulsion",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Ideal Edge Length:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.idealEdgeLength.toString(),onChange:function(e){t.updateInternalLayoutProperty("idealEdgeLength",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Edge Elasticity:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.edgeElasticity.toString(),onChange:function(e){t.updateInternalLayoutProperty("edgeElasticity",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Nesting Factor:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.nestingFactor.toString(),onChange:function(e){t.updateInternalLayoutProperty("nestingFactor",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Gravity:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.gravity.toString(),onChange:function(e){t.updateInternalLayoutProperty("gravity",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Gravity Range:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.gravityRange.toString(),onChange:function(e){t.updateInternalLayoutProperty("gravityRange",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Compound Gravity:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.gravityCompound.toString(),onChange:function(e){t.updateInternalLayoutProperty("gravityCompound",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Compound Gravity Range:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.gravityRangeCompound.toString(),onChange:function(e){t.updateInternalLayoutProperty("gravityRangeCompound",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Number of Iterations:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.numIter.toString(),onChange:function(e){t.updateInternalLayoutProperty("numIter",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Tiling Vertical Padding:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.tilingPaddingVertical.toString(),onChange:function(e){t.updateInternalLayoutProperty("tilingPaddingVertical",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Tiling Horizontal Padding:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.tilingPaddingHorizontal.toString(),onChange:function(e){t.updateInternalLayoutProperty("tilingPaddingHorizontal",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Tile Disconnected:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.Checkbox,{className:"layProps",checked:this.internalLayoutProperties.tile,onChange:function(e){t.updateInternalLayoutProperty("tile",!t.internalLayoutProperties.tile)}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"control-label",sm:6},"Animate:"),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.Checkbox,{className:"layProps",checked:this.internalLayoutProperties.animate,onChange:function(e){t.updateInternalLayoutProperty("animate",!t.internalLayoutProperties.animate)}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Incremental:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.Checkbox,{className:"layProps",checked:!this.internalLayoutProperties.randomize,onChange:function(e){t.updateInternalLayoutProperty("randomize",!t.internalLayoutProperties.randomize)}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Incremental Cooling Factor:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.initialEnergyOnIncremental.toString(),onChange:function(e){t.updateInternalLayoutProperty("initialEnergyOnIncremental",Number(e.target.value))}}))))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){a.layoutProperties=y.a.clone(t.internalLayoutProperties),t.props.pathwayActions.setLayoutProperties(a.layoutProperties),t.props.handleClose(Ma.LAYOUT)}},"Save"),g.a.createElement(I.Button,{onClick:function(){t.internalLayoutProperties=y.a.clone(gt.defaultLayoutProperties),a.layoutProperties=y.a.clone(t.internalLayoutProperties),t.props.pathwayActions.setLayoutProperties(t.internalLayoutProperties)}},"Default")))}}),st([r.observable],e.prototype,"internalLayoutProperties",void 0),st([r.action.bound],e.prototype,"updateInternalLayoutProperty",null),e=a=st([l.observer],e)}(g.a.Component),ut=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Ct=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Nt=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"pathwayInfo",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),a}return ut(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return this.pathwayInfo=this.props.pathwayActions.getPathwayInfo,g.a.createElement(I.Modal,{id:"pathwayDetailsDiv",show:this.props.show,onHide:function(){t.props.handleClose(4)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Pathway Properties")),g.a.createElement(I.Modal.Body,null,g.a.createElement(I.Form,{id:"pathwayDetailsForm"},g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{style:{textAlign:"left"},sm:4},g.a.createElement(I.ControlLabel,null,"Pathway Title:")),g.a.createElement(I.Col,{sm:8},g.a.createElement(I.FormControl,{type:"text",onChange:function(e){t.pathwayInfo.pathwayTitle=e.target.value},value:this.pathwayInfo.pathwayTitle}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{style:{textAlign:"left"},sm:4},g.a.createElement(I.ControlLabel,null,"Pathway Description:")),g.a.createElement(I.Col,{sm:8},g.a.createElement("textarea",{className:"form-control",rows:3,onChange:function(e){t.pathwayInfo.pathwayDetails=e.target.value},value:this.pathwayInfo.pathwayDetails}))))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.setPathwayInfo(t.pathwayInfo),t.props.handleClose(Ma.PW_DETAILS)}},"Save")))}}),e=Ct([l.observer],e)}(g.a.Component),pt=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Mt=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},At=a(60),bt=a(61),yt=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"colorMappings",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"showUniqueValuesWarningModal",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(a),a.initColorMappings(),a}return pt(e,t),Object.defineProperty(e.prototype,"componentDidUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(t){!1===t.show&&!0===this.props.show&&this.initColorMappings()}}),Object.defineProperty(e.prototype,"initColorMappings",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.colorMappings=Object.entries(this.props.colorValueMapping).map((function(t){return{value:t[0],color:t[1]}})).sort((function(t,e){return Number(t.value)-Number(e.value)}))}}),Object.defineProperty(e.prototype,"handleColorChange",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.colorMappings[t].color=e}}),Object.defineProperty(e.prototype,"handleValueChange",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.colorMappings[t].value=e}}),Object.defineProperty(e.prototype,"addDefaultColorMapping",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.colorMappings.push({value:"0",color:"#ffffff"})}}),Object.defineProperty(e.prototype,"removeColorMapping",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.colorMappings.splice(t,1)}}),Object.defineProperty(e.prototype,"setDefaultColorMapping",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.colorMappings=[{value:"-100",color:"#0000ff"},{value:"0",color:"#ffffff"},{value:"100",color:"#ff0000"}]}}),Object.defineProperty(e.prototype,"setShowUniqueValuesWarningModal",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.showUniqueValuesWarningModal=t}}),Object.defineProperty(e.prototype,"handleSaveColorScheme",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t={};return this.colorMappings.forEach((function(e){t[e.value]=e.color})),Object.keys(t).length<2?(this.setShowUniqueValuesWarningModal(!0),!1):(this.props.handleColorMappingChange(t),!0)}}),Object.defineProperty(e.prototype,"close",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.props.handleClose(Ma.PROFILES_COLOR_SCHEME)}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=this.colorMappings.map((function(e,a){return g.a.createElement(I.Row,{style:{padding:"10px"}},g.a.createElement(I.Col,{md:2}),g.a.createElement(I.Col,{md:3},g.a.createElement("input",{value:e.value,style:{width:"50px"},onChange:function(e){var i=e.target.value;t.handleValueChange(a,i)}})),g.a.createElement(I.Col,{md:3},g.a.createElement("input",{type:"color",value:e.color,onChange:function(e){var i=e.target.value;t.handleColorChange(a,i)}})),g.a.createElement(I.Col,{md:1},g.a.createElement("img",{src:bt,className:"icon-small "+(t.colorMappings.length>2?"icon-enabled":"icon-disabled"),title:"Remove",onClick:function(){t.removeColorMapping(a)}})),g.a.createElement(I.Col,{md:2}))}));return g.a.createElement(I.Modal,{show:this.props.show,onHide:function(){t.close()},bsSize:"small"},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Study Data Overlay Color Scheme")),g.a.createElement(I.Modal.Body,null,g.a.createElement(I.Row,{style:{paddingTop:"10px",paddingLeft:"10px",paddingRight:"10px"}},g.a.createElement(I.Col,{md:2}),g.a.createElement(I.Col,{md:3},g.a.createElement("label",null,"Value")),g.a.createElement(I.Col,{md:3},g.a.createElement("label",null,"Color")),g.a.createElement(I.Col,{md:3})),g.a.createElement("hr",{className:"horizontal-rule"}),e,g.a.createElement("img",{src:At,className:"icon-small icon-enabled",onClick:this.addDefaultColorMapping,title:"Add New Value-Color Mapping"}),g.a.createElement(I.Modal,{show:this.showUniqueValuesWarningModal,onHide:function(){return t.setShowUniqueValuesWarningModal(!1)},bsSize:"small"},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Warning")),g.a.createElement(I.Modal.Body,null,g.a.createElement("p",null,"Please set at least two unique value-color mappings.")),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){t.setShowUniqueValuesWarningModal(!1)}},"OK")))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){t.close()}},"Cancel"),g.a.createElement(I.Button,{onClick:function(){t.setDefaultColorMapping()}},"Default"),g.a.createElement(I.Button,{onClick:function(){t.handleSaveColorScheme()&&t.close()}},"Save")))}}),Mt([r.observable],e.prototype,"colorMappings",void 0),Mt([r.observable],e.prototype,"showUniqueValuesWarningModal",void 0),Mt([r.action.bound],e.prototype,"handleColorChange",null),Mt([r.action.bound],e.prototype,"handleValueChange",null),Mt([r.action.bound],e.prototype,"addDefaultColorMapping",null),Mt([r.action.bound],e.prototype,"removeColorMapping",null),Mt([r.action.bound],e.prototype,"setDefaultColorMapping",null),Mt([r.action.bound],e.prototype,"setShowUniqueValuesWarningModal",null),Mt([n.a],e.prototype,"handleSaveColorScheme",null),Mt([n.a],e.prototype,"close",null),e=Mt([l.observer],e)}(g.a.Component),ht=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Dt=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},mt=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"showEnabledProfileWarningModal",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object(r.makeObservable)(a),a}return ht(e,t),Object.defineProperty(e.prototype,"setShowEnabledProfileWarningModal",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.showEnabledProfileWarningModal=t}}),Object.defineProperty(e.prototype,"profileEnabledMap",{get:function(){var t=this,e=[];this.props.profiles.forEach((function(a){a.enabled&&e.length-1;a[t.profileId]=i})),a},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"handleProfileLabelClicked",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.props.handleProfileLabelClicked(t)}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=this.props.profiles.map((function(e,a){return g.a.createElement(g.a.Fragment,{key:a},g.a.createElement(I.Button,{onClick:function(){var e=t.props.profiles.filter((function(t){return t.enabled})).length;t.props.profiles[a].enabled||e0?e:g.a.createElement("h4",{className:"modal-title"},"There is currently no data to show"),g.a.createElement(I.Modal,{show:this.showEnabledProfileWarningModal,onHide:function(){return t.setShowEnabledProfileWarningModal(!1)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Warning")),g.a.createElement(I.Modal.Body,null,g.a.createElement("p",null,"At most 6 data sets can be displayed at the same time, please disable some other data set before enabling this.")),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){t.setShowEnabledProfileWarningModal(!1)}},"OK")))))}}),Dt([r.observable],e.prototype,"showEnabledProfileWarningModal",void 0),Dt([r.action],e.prototype,"setShowEnabledProfileWarningModal",null),Dt([r.computed],e.prototype,"profileEnabledMap",null),e=Dt([l.observer],e)}(g.a.Component),Et=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),jt=function(t){function e(e){return t.call(this,e)||this}return Et(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{id:"quickHelpModal",show:this.props.show,onHide:function(){t.props.handleClose(Ma.HELP)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Quick Help")),g.a.createElement(I.Modal.Body,null,g.a.createElement("ul",{className:"leftText"},g.a.createElement("li",null,g.a.createElement("strong",null,"To add a node:")," Drag and drop from node palette"),g.a.createElement("li",null,g.a.createElement("strong",null,"To add an interaction:")," Click on interaction type; then click on small circle on source node and release on target node"),g.a.createElement("li",null,g.a.createElement("strong",null,"To add a node into a container (family, complex, compartment or process):"),' Drag the node into its container node or select nodes to be contained and right click on container node and choose "Add Selected Into This"'),g.a.createElement("li",null,g.a.createElement("strong",null,"To delete nodes/interactions:")," Select and perform Edit > Delete Selected"),g.a.createElement("li",null,g.a.createElement("strong",null,"To overlay experiment data:")," Select Alteration % > Load From cBioPortal..."))))}}),e}(g.a.Component),wt=function(){function t(){}return Object.defineProperty(t.prototype,"getDataTypes",{enumerable:!1,configurable:!0,writable:!0,value:function(){return[t.MUTATION,t.GENE_EXPRESSION,t.CNA]}}),Object.defineProperty(t.prototype,"fetchCancerStudies",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var a={},i=new XMLHttpRequest;i.onreadystatechange=function(){if(i.readyState===XMLHttpRequest.DONE&&200===i.status){for(var t=i.responseText.split(/\r?\n|\r/),o=1;o=t.Z_SCORE_UPPER_THRESHOLD||parseFloat(I[d])<=t.Z_SCORE_LOWER_THRESHOLD)&&s++:s++);c[a][I[1]]=s/l*100}i(c)}}),Object.defineProperty(t.prototype,"getProfileData",{enumerable:!1,configurable:!0,writable:!0,value:function(e,a){var i=new XMLHttpRequest,o=this;i.onreadystatechange=function(){i.readyState===XMLHttpRequest.DONE&&200===i.status&&(o.calcAlterationPercentages(i.responseText,e.geneticProfileId,a),s.toast.success(e.geneticProfileId+" has been succesfully loaded from cBioPortal."))};var n=t.GET_PROFILE_DATA_URL;n+="&case_set_id="+e.caseSetId+"_sequenced",n+="&genetic_profile_id="+e.geneticProfileId,n+="&gene_list=";for(var r=!0,l=0,c=e.genes;l=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Lt=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"dataTypes",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(a,"dataTypeFetchResultsReady",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(a,"currentlySelectedItemIndex",{enumerable:!0,configurable:!0,writable:!0,value:-1}),Object.defineProperty(a,"selectedStudies",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(a,"checkboxModalPosition",{enumerable:!0,configurable:!0,writable:!0,value:{bottom:0}}),Object.defineProperty(a,"selectedDataTypesPerStudy",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(a,"itemArray",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(a,"searchQuery",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(a,"showDataTypeSelectionModal",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(a,"studyListItemCheckboxChecked",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(a,"selectedStudyData",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"portalAccessor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(a),a.selectedStudyData=[],a.portalAccessor=new wt,a.fetchStudy(),a}return Tt(e,t),Object.defineProperty(e.prototype,"setDataTypeFetchResultsReady",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.dataTypeFetchResultsReady=t}}),Object.defineProperty(e.prototype,"setItemArray",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.itemArray=t}}),Object.defineProperty(e.prototype,"setSearchQuery",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.searchQuery=t}}),Object.defineProperty(e.prototype,"setSelectedStudyData",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedStudyData=t}}),Object.defineProperty(e.prototype,"setDataTypeProperties",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.dataTypes[t]=e}}),Object.defineProperty(e.prototype,"initStudyListItemCheckboxChecked",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.studyListItemCheckboxChecked=Array(t).fill(!1)}}),Object.defineProperty(e.prototype,"initSelectedDataTypesPerStudy",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedDataTypesPerStudy=Array(t).fill("")}}),Object.defineProperty(e.prototype,"toggleStudyListItemCheckboxChecked",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.studyListItemCheckboxChecked[t]=!this.studyListItemCheckboxChecked[t]}}),Object.defineProperty(e.prototype,"addSelectedStudy",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedStudies.push(t)}}),Object.defineProperty(e.prototype,"removeSelectedStudy",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedStudies=this.selectedStudies.filter((function(e){return e.data[0]!=t[0]}))}}),Object.defineProperty(e.prototype,"clearSelectedStudies",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.selectedStudies=[]}}),Object.defineProperty(e.prototype,"setShowDataTypeSelectionModal",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.showDataTypeSelectionModal=t}}),Object.defineProperty(e.prototype,"clearStudyCheckboxesChecked",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this.studyListItemCheckboxChecked.length;this.studyListItemCheckboxChecked=Array(t).fill(!1)}}),Object.defineProperty(e.prototype,"clearSelectedDataTypesPerStudy",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this.studyListItemCheckboxChecked.length;this.selectedDataTypesPerStudy=Array(t).fill("")}}),Object.defineProperty(e.prototype,"unselectDataTypesForStudy",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedDataTypesPerStudy[t]=""}}),Object.defineProperty(e.prototype,"preparePortalAccess",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this;this.setDataTypeFetchResultsReady(!1),this.portalAccessor.getSupportedGeneticProfiles(t,(function(t){e.disableAllDataTypes();for(var a=0,i=Object.keys(t);a1&&this.selectedStudyData[1]||"Choose study"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{id:"cbioPortalModal",show:this.props.show,onHide:function(){t.props.handleClose(Ma.STUDY),t.resetModal()}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Profile Data from cBioPortal")),g.a.createElement(I.Modal.Body,null,g.a.createElement("div",{id:"cancerDropDown",style:{textAlign:"left"}},g.a.createElement("h4",null,"Select Cancer Study"),g.a.createElement("form",null,g.a.createElement(I.FormControl,{type:"text",placeholder:"Search studies",onChange:function(e){return t.setSearchQuery(e.target.value)}})),g.a.createElement(I.ListGroup,{style:{maxHeight:"200px",overflow:"auto",marginTop:"10px",border:"1px solid #ccc",borderRadius:"4px"}},this.itemArray.length<1?g.a.createElement("span",null,"Fetching studies from cBioPortal..."):this.itemArray.map((function(t,e){return{item:t,index:e}})).filter((function(e){return e.item[1].toLowerCase().includes(t.searchQuery.toLowerCase())})).map((function(e){var a=e.item,i=e.index,o=a[1],n=a[0];return g.a.createElement(I.ListGroupItem,{id:"listgroupitem"+i,key:n,style:{padding:"5px 5px"}},g.a.createElement(I.Checkbox,{checked:t.studyListItemCheckboxChecked[i],style:{marginTop:"0px",marginBottom:"0px"},onClick:function(){var e=document.getElementById("listgroupitem"+i).getBoundingClientRect();t.checkboxModalPosition={bottom:e.bottom-30},t.setSelectedStudyData(a),t.preparePortalAccess(n),t.toggleStudyListItemCheckboxChecked(i),t.currentlySelectedItemIndex=i,t.studyListItemCheckboxChecked[i]?t.setShowDataTypeSelectionModal(!0):(t.removeSelectedStudy(a),t.unselectDataTypesForStudy(i))}},o),""!=t.selectedDataTypesPerStudy[i]&&g.a.createElement("span",{style:{fontSize:"12px",marginLeft:"25px"}},t.selectedDataTypesPerStudy[i]))})))),g.a.createElement("div",{style:{marginTop:"10px"}},g.a.createElement("p",{style:{textAlign:"left"}},g.a.createElement("b",null,"Warning:"),' At most six different data sets will be overlayed on the genes. You can toggle which ones are to be displayed via "Alteration %" ',">",' "View Settings" menu.')),g.a.createElement(I.Modal,{style:{position:"absolute",top:this.checkboxModalPosition.bottom+"px"},dialogClassName:"fitContent",show:this.showDataTypeSelectionModal,onHide:function(){t.setShowDataTypeSelectionModal(!1)}},g.a.createElement(I.Modal.Body,null,!1===this.dataTypeFetchResultsReady?g.a.createElement("span",null,"Fetching data types from cBioPortal..."):Object.keys(this.dataTypes).map((function(e){return g.a.createElement(I.Checkbox,{inline:!0,key:e,disabled:!t.dataTypes[e].enabled,onClick:function(){t.handleCheckboxClick(e)},checked:t.dataTypes[e].checked},e)}))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){var e=ft({},t.dataTypes);0==Object.keys(e).filter((function(t){return e[t].checked})).length&&(t.studyListItemCheckboxChecked[t.currentlySelectedItemIndex]=!1),t.setShowDataTypeSelectionModal(!1)}},"Cancel"),g.a.createElement(I.Button,{onClick:function(){var e=ft({},t.dataTypes);t.addSelectedStudy({data:t.selectedStudyData,dataTypes:e}),t.selectedDataTypesPerStudy[t.currentlySelectedItemIndex]=Object.keys(e).filter((function(t){return e[t].checked})).join(", "),t.setShowDataTypeSelectionModal(!1)}},"Add")))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{bsClass:"success",onClick:function(){t.selectedStudies.forEach((function(e){t.props.loadFromCBio(e.dataTypes,e.data)})),t.props.handleClose(Ma.STUDY),t.resetModal()}},"Load Data")))}}),vt([r.observable],e.prototype,"dataTypes",void 0),vt([r.observable],e.prototype,"dataTypeFetchResultsReady",void 0),vt([r.observable],e.prototype,"selectedStudies",void 0),vt([r.observable],e.prototype,"selectedDataTypesPerStudy",void 0),vt([r.observable],e.prototype,"itemArray",void 0),vt([r.observable],e.prototype,"searchQuery",void 0),vt([r.observable],e.prototype,"showDataTypeSelectionModal",void 0),vt([r.observable],e.prototype,"studyListItemCheckboxChecked",void 0),vt([r.observable],e.prototype,"selectedStudyData",void 0),vt([r.observable],e.prototype,"portalAccessor",void 0),vt([r.action.bound],e.prototype,"setDataTypeFetchResultsReady",null),vt([r.action.bound],e.prototype,"setItemArray",null),vt([r.action.bound],e.prototype,"setSearchQuery",null),vt([r.action.bound],e.prototype,"setSelectedStudyData",null),vt([r.action.bound],e.prototype,"setDataTypeProperties",null),vt([r.action.bound],e.prototype,"initStudyListItemCheckboxChecked",null),vt([r.action.bound],e.prototype,"initSelectedDataTypesPerStudy",null),vt([r.action.bound],e.prototype,"toggleStudyListItemCheckboxChecked",null),vt([r.action.bound],e.prototype,"addSelectedStudy",null),vt([r.action.bound],e.prototype,"removeSelectedStudy",null),vt([r.action.bound],e.prototype,"clearSelectedStudies",null),vt([r.action.bound],e.prototype,"setShowDataTypeSelectionModal",null),vt([r.action.bound],e.prototype,"clearStudyCheckboxesChecked",null),vt([r.action.bound],e.prototype,"clearSelectedDataTypesPerStudy",null),vt([r.action.bound],e.prototype,"unselectDataTypesForStudy",null),vt([n.a],e.prototype,"resetModal",null),vt([n.a],e.prototype,"handleCheckboxClick",null),vt([r.computed],e.prototype,"selectedStudyDataTitle",null),e=vt([l.observer],e)}(g.a.Component),Ot=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Gt=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Pt=["Cell Cycle","HIPPO","MYC","NOTCH","NRF2","PI3K","RTK-RAS","TGF-Beta","TP53","WNT"],St=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"bestPathways",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"shownPathways",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"dropDownTitle",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"selectedPathway",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isPercentageMatch",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isAlterationEnabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"considerOnlyTCGAPanPathways",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isExpanded",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"rankingCriteria",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(a,"COUNT_PERC_EXPLANATION",{enumerable:!0,configurable:!0,writable:!0,value:"Whether we should favor the number of genes of interest matching the ones in a pathway or the percentage of such genes in that pathway. For instance, suppose genes of interest are A, B, and C, and the pathway contains genes B, C, D, and E. When we consider count, the score is 2 (for the two genes that match). However, when we consider percentage the score will be 50% as 2 of the 4 genes in the pathway are among genes of interest."}),Object.defineProperty(a,"ALTERATION_EXPLANATION",{enumerable:!0,configurable:!0,writable:!0,value:"When this is checked, each matching gene will not directly contribute to the score as 1 unit but with the alteration frequency percentage of that gene. For instance, suppose genes of interest are A, B, and C with alteration frequencies of 0.5, 0.2, and 0.3, respectively, and the pathway contains genes B, C, D, and E. When this is option isn't checked, the score will be 2 for match count and 50% for the match percentage. However, when this option is checked, the scores will be 0.2+0.3=0.5 and (0.2+0.3)/4=12.5% for match count and percentage, respectively."}),Object.defineProperty(a,"TCGA_PANCAN_EXPLANATION",{enumerable:!0,configurable:!0,writable:!0,value:"The pathways listed above were retrieved from PathwayMapper. When this option is checked, only the pathways under TCGA > PanCanAtlas will be shown. Uncheck to show all."}),Object(r.makeObservable)(a),a.isPercentageMatch=void 0!==a.props.rankingChoices?a.props.rankingChoices.isPercentageMatch:0,a.isAlterationEnabled=void 0!==a.props.rankingChoices?a.props.rankingChoices.isAlterationEnabled:0,a.considerOnlyTCGAPanPathways=void 0===a.props.rankingChoices||a.props.rankingChoices.considerOnlyTCGAPanPathways,a.dropDownTitle=void 0!==a.props.rankingChoices?a.props.rankingChoices.dropDownTitle:"Match count",a.isExpanded=!1,a.onApplyClick(),void 0!==a.props.currentPathway&&a.props.currentPathway.length>0?a.selectedPathway=a.props.currentPathway:a.selectedPathway=a.shownPathways[0].pathwayName,a}return Ot(e,t),Object.defineProperty(e.prototype,"updateRankingChoices",{enumerable:!1,configurable:!0,writable:!0,value:function(){void 0!==this.props.updateRankingChoices&&this.props.updateRankingChoices(this.dropDownTitle,this.isAlterationEnabled,this.considerOnlyTCGAPanPathways,this.isPercentageMatch,this.selectedPathway)}}),Object.defineProperty(e.prototype,"setBestPathwayMethod",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.bestPathways=this.props.bestPathwaysAlgos[t],this.filterBestPathwaysByTCGAPanPathways()}}),Object.defineProperty(e.prototype,"onPathwayClick",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedPathway=t,this.updateRankingChoices(),this.props.pathwayActions.changePathway(this.selectedPathway)}}),Object.defineProperty(e.prototype,"onApplyClick",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.setBestPathwayMethod(2*this.isAlterationEnabled+this.isPercentageMatch),this.rankingCriteria=2*this.isAlterationEnabled+this.isPercentageMatch}}),Object.defineProperty(e.prototype,"filterBestPathwaysByTCGAPanPathways",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;this.shownPathways=this.bestPathways.filter((function(e){return!t.considerOnlyTCGAPanPathways||Pt.indexOf(e.pathwayName)>-1})),this.considerOnlyTCGAPanPathways&&Pt.indexOf(this.selectedPathway)<0&&(this.selectedPathway=this.shownPathways[0].pathwayName,this.props.pathwayActions.changePathway(this.selectedPathway))}}),Object.defineProperty(e.prototype,"toggleConsiderOnlyTCGAPanPathways",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.considerOnlyTCGAPanPathways=!this.considerOnlyTCGAPanPathways,this.updateRankingChoices(),this.filterBestPathwaysByTCGAPanPathways()}}),Object.defineProperty(e.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.props.pathwayActions.changePathway(this.selectedPathway)}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return this.setBestPathwayMethod(this.rankingCriteria),g.a.createElement("div",{id:"ranking-bar"},this.props.tableComponent&&this.props.tableComponent(this.shownPathways.map((function(t){return{name:t.pathwayName,score:t.score,genes:t.genesMatched}})),this.selectedPathway,this.onPathwayClick),g.a.createElement("div",{className:"indent"},g.a.createElement(I.Checkbox,{checked:this.considerOnlyTCGAPanPathways,id:"tcgaPathwaysCheckbox",onClick:this.toggleConsiderOnlyTCGAPanPathways,style:{fontSize:"13px"}},"Show TCGA PanCancer Atlas pathways only ",g.a.createElement("span",{"data-tip":this.TCGA_PANCAN_EXPLANATION,"data-border":"true","data-type":"light","data-place":"left","data-effect":"solid","data-html":"true","data-delay-hide":"500",className:"fa fa-question-circle styles-module__infoIcon__zMiog"}))),!this.props.patientView&&g.a.createElement("div",{className:"info-entry"},g.a.createElement("div",{id:"criteria-title",className:"info-title"},g.a.createElement("b",{style:{display:"inline-block"}}," Ranking options")),g.a.createElement("div",{className:"indent"},g.a.createElement(I.DropdownButton,{title:this.dropDownTitle,id:"0",style:{fontSize:"13px"}},g.a.createElement(I.MenuItem,{style:{fontSize:"13px"},onClick:function(){t.isPercentageMatch=0,t.dropDownTitle="Match count",t.onApplyClick(),t.updateRankingChoices()}},"Match count"),g.a.createElement(I.MenuItem,{style:{fontSize:"13px"},onClick:function(){t.isPercentageMatch=1,t.dropDownTitle="Match percentage",t.onApplyClick(),t.updateRankingChoices()}},"Match percentage"))," ",g.a.createElement("div",{"data-tip":this.COUNT_PERC_EXPLANATION,"data-border":"true","data-type":"light","data-place":"left","data-effect":"solid",className:"fa fa-question-circle styles-module__infoIcon__zMiog"}),g.a.createElement(I.Checkbox,{id:"alterationCheckBox",onClick:function(){t.isAlterationEnabled=1===t.isAlterationEnabled?0:1,t.onApplyClick(),t.updateRankingChoices()},style:{fontSize:"13px",marginTop:"18px",bottom:"4px"},checked:1===this.isAlterationEnabled},"Consider alteration frequency ",g.a.createElement("span",{"data-tip":this.ALTERATION_EXPLANATION,"data-border":"true","data-type":"light","data-place":"left","data-effect":"solid",className:"fa fa-question-circle styles-module__infoIcon__zMiog"})))))}}),Gt([r.observable],e.prototype,"dropDownTitle",void 0),Gt([r.observable],e.prototype,"selectedPathway",void 0),Gt([r.observable],e.prototype,"considerOnlyTCGAPanPathways",void 0),Gt([r.observable],e.prototype,"isExpanded",void 0),Gt([r.observable],e.prototype,"rankingCriteria",void 0),Gt([n.a],e.prototype,"updateRankingChoices",null),Gt([n.a],e.prototype,"setBestPathwayMethod",null),Gt([n.a],e.prototype,"onPathwayClick",null),Gt([n.a],e.prototype,"onApplyClick",null),Gt([r.action.bound],e.prototype,"filterBestPathwaysByTCGAPanPathways",null),Gt([r.action.bound],e.prototype,"toggleConsiderOnlyTCGAPanPathways",null),e=Gt([l.observer],e)}(g.a.Component),zt=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Zt=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Yt=a(19),Rt=a(20),xt=a(18),Bt=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"selectedGenes",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(a),a.selectedGenes=[],a}return zt(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e="q="+JSON.stringify(this.props.alterationData)+"&g="+this.props.genes.map((function(t){return t.hugoGeneSymbol})).join("+");return g.a.createElement("div",{id:"toolbar",style:{marginLeft:"0px"}},g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Save as PNG","data-place":"right","data-effect":"solid",src:O.a,onClick:function(){t.props.pathwayActions.saveAs("PNG")}}),g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Save as SVG","data-place":"right","data-effect":"solid",src:P.a,onClick:function(){t.props.pathwayActions.saveAs("SVG")}}),g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Perform layout","data-place":"right","data-effect":"solid",src:v.a,onClick:this.props.pathwayActions.performLayout}),!this.props.patientView&&!this.props.groupComparisonView&&[g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Add selected genes to query","data-place":"right","data-effect":"solid",src:Yt,onClick:function(){t.selectedGenes=t.props.pathwayActions.getSelectedNodes().filter((function(t){return"GENE"===t.data().type})).map((function(t){return t.data().name}));var e=t.props.pathwayActions.getSelectedNodes().filter((function(t){return"GENE"!==t.data().type})).map((function(t){return t.data().name})),a=[],i="";e.length>0&&(i+="Selection contains nodes that are not genes: "+e.join(", ")+". "),t.selectedGenes.forEach((function(e){t.props.validGenes.hasOwnProperty(e)||a.push(e)})),0===a.length?t.selectedGenes.length>0&&0===e.length&&t.props.onAddGenes(t.selectedGenes):i+="Following gene symbols are invalid or already in gene list: "+a.join(", ")+".",i.length>0&&t.props.showMessage(i)}}),g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Add all valid genes to query","data-place":"right","data-effect":"solid",src:Rt,onClick:function(){t.selectedGenes=t.props.pathwayGenes.filter((function(e){return t.props.validGenes.hasOwnProperty(e)})),t.selectedGenes.length>0&&t.props.onAddGenes(t.selectedGenes)}}),!this.props.groupComparisonView&&g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Edit pathway","data-place":"right","data-effect":"solid",src:T.a,onClick:function(){window.open("http://pathwaymapper.org/?pathwayName="+t.props.selectedPathway+"&"+e)}})],g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Help","data-place":"right","data-effect":"solid",src:xt,onClick:function(){t.props.handleOpen(Ma.CHELP)}}),this.props.genesSelectionComponent&&this.props.genesSelectionComponent())}}),Zt([r.observable],e.prototype,"selectedGenes",void 0),Zt([r.observable],e.prototype,"editor",void 0),e=Zt([l.observer],e)}(g.a.Component),Qt=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},kt=function(){function t(t,e,a,i,o,n){Object.defineProperty(this,"selectedPathway",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"fileManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"undoRedoManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pathwayHandler",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"handleOpen",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"profiles",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"gridOptionsManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"uploader",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"merger",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isCBioPortal",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isCollaborative",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"viewOperationsManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"overlayUploader",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"enabledType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"updatePathwayTitle",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(this),this.pathwayHandler=t,this.profiles=e,this.fileManager=a,this.handleOpen=i,this.isCBioPortal=o,this.isCollaborative=n,this.enabledType=R.NONE}return Object.defineProperty(t.prototype,"addProfile",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.profiles.push(t)}}),Object.defineProperty(t.prototype,"clearProfiles",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.profiles.length=0}}),Object.defineProperty(t.prototype,"emphasizeQueryGenes",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.editor&&this.editor.cy.nodes().forEach((function(e){var a=e.data().name,i=e.data().type;t.includes(a)&&"GENE"===i?e.style({"border-width":"4px","font-weight":"bold"}):e.style({"border-width":"2px","font-weight":"normal"})}))}}),Object.defineProperty(t.prototype,"getSelectedNodes",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.editor.cy.nodes(":selected")}}),Object.defineProperty(t.prototype,"setLayoutProperties",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.editor.saveLayoutProperties(t)}}),Object.defineProperty(t.prototype,"doesCyHaveElements",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.editor.cy.elements().length>0}}),Object.defineProperty(t.prototype,"toggleGrid",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.gridOptionsManager.setSnapToGuidelines(!1),this.gridOptionsManager.setShowGrid(t)}}),Object.defineProperty(t.prototype,"toggleGuide",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.gridOptionsManager.setSnapToGuidelines(t),this.gridOptionsManager.setShowGrid(!1)}}),Object.defineProperty(t.prototype,"adjustGridSettings",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.gridOptionsManager.currentProperties.gridSpacing=t,this.gridOptionsManager.currentProperties.guidelinesStyle.strokeStyle=e,this.gridOptionsManager.currentProperties.guidelinesStyle.horizontalDistColor=e,this.gridOptionsManager.currentProperties.guidelinesStyle.verticalDistColor=e}}),Object.defineProperty(t.prototype,"resizeToContent",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.resizeNodesToContent(this.editor.cy.nodes())}}),Object.defineProperty(t.prototype,"align",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.viewOperationsManager.handleNodeAlignment(t)}}),Object.defineProperty(t.prototype,"onChangeFile",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=t.target.files[0];this.processFile(a,e),t.target.value=""}}),Object.defineProperty(t.prototype,"uploadOverlay",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.overlayUploader.click()}}),Object.defineProperty(t.prototype,"overlayFromText",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=new FormData;a.append("graphFile",t);var i=new XMLHttpRequest;i.onreadystatechange=function(){if(i.readyState===XMLHttpRequest.DONE&&200===i.status){var t=i.responseText.split("\n");if(t.length>0)t[0].split("\t").slice(1).forEach((function(t){return e.addProfile({profileId:t,enabled:!0})}));else console.log("Error: No valid data");e.editor.addGenomicData(i.responseText)}},i.open("POST","/loadGraph"),i.send(a)}}),Object.defineProperty(t.prototype,"upload",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;this.editor.cy.elements().length>0?(this.handleOpen(Ma.CONFIRMATION),H.pendingFunction=function(){t.uploader.click()}):this.uploader.click()}}),Object.defineProperty(t.prototype,"merge",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.merger.click()}}),Object.defineProperty(t.prototype,"setOverlayUploader",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.overlayUploader=t}}),Object.defineProperty(t.prototype,"setUploaders",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){e?this.merger=t:this.uploader=t}}),Object.defineProperty(t.prototype,"getPathwayInfo",{get:function(){return this.fileManager.getPathwayInfo},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"setPathwayInfo",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.fileManager.setPathwayInfo(t)}}),Object.defineProperty(t.prototype,"undo",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.undoRedoManager.undo()}}),Object.defineProperty(t.prototype,"redo",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.undoRedoManager.redo()}}),Object.defineProperty(t.prototype,"export",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.eh.hide(),this.fileManager.saveGraph(t,this.editor)}}),Object.defineProperty(t.prototype,"resetUndoStack",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.undoRedoManager.reset()}}),Object.defineProperty(t.prototype,"newPathway",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=function(){t.editor.removeAllElements(),t.fileManager.setPathwayInfo({pathwayTitle:"New Pathway",pathwayDetails:""}),t.resetUndoStack(),t.pathwayHandler("Dummy")};this.editor.cy.elements().length>0?(this.handleOpen(Ma.CONFIRMATION),H.pendingFunction=e):e()}}),Object.defineProperty(t.prototype,"changePathwayTitle",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.updatePathwayTitle(t)}}),Object.defineProperty(t.prototype,"changePathway",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.pathwayHandler(t),this.isCBioPortal||(this.fileManager.setPathwayInfo({pathwayTitle:t,pathwayDetails:""}),this.editor&&this.resetUndoStack())}}),Object.defineProperty(t.prototype,"highlightNeighbours",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.highlightNeighbors()}}),Object.defineProperty(t.prototype,"highlightSelected",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.highlightSelected()}}),Object.defineProperty(t.prototype,"validateGenes",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.validateGenes()}}),Object.defineProperty(t.prototype,"showAll",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.showAllNodes()}}),Object.defineProperty(t.prototype,"hideSelected",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.hideSelectedNodes()}}),Object.defineProperty(t.prototype,"deleteSelected",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this.editor.cy.elements(":selected");this.editor.removeElement(t)}}),Object.defineProperty(t.prototype,"addEdge",{enumerable:!1,configurable:!0,writable:!0,value:function(t){if(window.edgeAddingMode=t+1,-1===t)return this.eh.disable(),void this.eh.hide();this.eh.enable()}}),Object.defineProperty(t.prototype,"changeNodeName",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this.editor.cy.$('[name="'+t+'"]')[0];this.editor.changeName(a,e)}}),Object.defineProperty(t.prototype,"addNode",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e={type:t.toUpperCase(),name:"New "+t,w:"150",h:"52"},a=this.editor.cy.extent(),i={x:(a.x1+a.x2)/2,y:(a.y1+a.y2)/2};this.editor.addNode(e,i),this.pathwayHandler("Additional Pathway")}}),Object.defineProperty(t.prototype,"searchGene",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e="node[name @*= '"+t+"']",a=this.editor.cy.filter(e),i=this.editor.cy.collection();a.forEach((function(t,e){t.hasClass("highlightedNode")||t.hasClass("invalidGeneHighlight")||(i=i.union(t))})),this.editor.highlightBySearch(i)}}),Object.defineProperty(t.prototype,"removeAllData",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.removeGenomicData(),this.clearProfiles()}}),Object.defineProperty(t.prototype,"removeAllHighlight",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.removeAllHighlight()}}),Object.defineProperty(t.prototype,"processFile",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this,i=new FormData;i.append("graphFile",t);var o=new XMLHttpRequest;o.onreadystatechange=function(){if(o.readyState===XMLHttpRequest.DONE)if(200===o.status){var t=p.parseGraph(o.responseText,!1);if(e){a.editor.mergeGraph(t.nodes,t.edges);var i=a.editor.cy.json();t.nodes=i.elements.nodes,t.edges=i.elements.edges,t.title="Additional Pathway"}else a.editor.loadFile(t.nodes,t.edges),a.fileManager.setPathwayInfo({pathwayTitle:t.title,pathwayDetails:t.description});a.pathwayHandler(t.title+"_imported"),a.resetUndoStack()}else console.error("Error processing file: "+o.readyState+o.responseText)},o.open("POST","/loadGraph"),o.send(i)}}),Object.defineProperty(t.prototype,"saveAs",{enumerable:!1,configurable:!0,writable:!0,value:function(t){"SVG"===t?this.fileManager.saveAsSVG(this.editor):"PNG"===t?this.fileManager.saveAsPNG(this.editor.cy):"JPEG"===t&&this.fileManager.saveAsJPEG(this.editor.cy)}}),Object.defineProperty(t.prototype,"editorHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a,i,o){this.editor=t,this.eh=e,this.undoRedoManager=a,this.viewOperationsManager=i,this.gridOptionsManager=o}}),Object.defineProperty(t.prototype,"exists",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=!1;return this.profiles.forEach((function(a){a.profileId===t&&(e=!0)})),e}}),Object.defineProperty(t.prototype,"loadSampleData",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.exists("lung")||this.exists("ovarian")||this.exists("breast")||(this.editor.addGenomicData("gene\tlung\tovarian\tbreast\nPTEN\t-7\t-20\t10\nNF1\t-12\t-4\t30\nPIK3CA\t18\t40\t-50\nKRAS\t11\t-5\t0\nZIYA\t0\t-2\t0\nAKT1\t3\t30\t-10\nAKT2\t6\t-3\t20\nAKT3\t6\t-3\t20\n\n"),this.isCollaborative||(this.addProfile({profileId:"lung",enabled:this.profiles.length<6}),this.addProfile({profileId:"ovarian",enabled:this.profiles.length<6}),this.addProfile({profileId:"breast",enabled:this.profiles.length<6})))}}),Object.defineProperty(t.prototype,"performLayout",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.performLayout()}}),Qt([r.observable],t.prototype,"selectedPathway",void 0),Qt([r.observable],t.prototype,"enabledType",void 0),Qt([r.action.bound],t.prototype,"addProfile",null),Qt([r.action.bound],t.prototype,"clearProfiles",null),Qt([n.a],t.prototype,"toggleGrid",null),Qt([n.a],t.prototype,"toggleGuide",null),Qt([n.a],t.prototype,"resizeToContent",null),Qt([n.a],t.prototype,"align",null),Qt([n.a],t.prototype,"onChangeFile",null),Qt([n.a],t.prototype,"upload",null),Qt([n.a],t.prototype,"merge",null),Qt([n.a],t.prototype,"setUploaders",null),Qt([r.computed],t.prototype,"getPathwayInfo",null),Qt([n.a],t.prototype,"setPathwayInfo",null),Qt([n.a],t.prototype,"undo",null),Qt([n.a],t.prototype,"redo",null),Qt([n.a],t.prototype,"export",null),Qt([n.a],t.prototype,"resetUndoStack",null),Qt([n.a],t.prototype,"newPathway",null),Qt([n.a],t.prototype,"changePathway",null),Qt([n.a],t.prototype,"highlightNeighbours",null),Qt([n.a],t.prototype,"highlightSelected",null),Qt([n.a],t.prototype,"validateGenes",null),Qt([n.a],t.prototype,"showAll",null),Qt([n.a],t.prototype,"hideSelected",null),Qt([n.a],t.prototype,"deleteSelected",null),Qt([n.a],t.prototype,"addEdge",null),Qt([n.a],t.prototype,"changeNodeName",null),Qt([n.a],t.prototype,"addNode",null),Qt([n.a],t.prototype,"searchGene",null),Qt([n.a],t.prototype,"removeAllData",null),Qt([n.a],t.prototype,"removeAllHighlight",null),Qt([n.a],t.prototype,"processFile",null),Qt([n.a],t.prototype,"saveAs",null),Qt([n.a],t.prototype,"editorHandler",null),Qt([n.a],t.prototype,"exists",null),Qt([n.a],t.prototype,"loadSampleData",null),Qt([n.a],t.prototype,"performLayout",null),t}(),Wt=a(18),Ht=a.n(Wt),Ut=a(23),Vt=a.n(Ut),Kt=a(24),Ft=a.n(Kt),Xt=a(25),Jt=a.n(Xt),qt=a(26),_t=a.n(qt),$t=a(27),te=a.n($t),ee=a(28),ae=a.n(ee),ie=a(29),oe=a.n(ie),ne=a(30),re=a.n(ne),le=a(31),ce=a.n(le),ge=a(32),Ie=a.n(ge),se=a(33),de=a.n(se),ue=a(34),Ce=a.n(ue),Ne=a(35),pe=a.n(Ne),Me=a(36),Ae=a.n(Me),be=a(37),ye=a.n(be),he=a(38),De=a.n(he),me=a(39),Ee=a.n(me),je=a(40),we=a.n(je),Te=a(41),fe=a.n(Te),ve=a(42),Le=a.n(ve),Oe=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Ge=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Pe=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"searchedGene",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(a),a.searchedGene="",a.props.pathwayActions.enabledType=R.NONE,a}return Oe(e,t),Object.defineProperty(e.prototype,"setEnabledType",{enumerable:!1,configurable:!0,writable:!0,value:function(t){t===this.props.pathwayActions.enabledType?this.props.pathwayActions.enabledType=R.NONE:this.props.pathwayActions.enabledType=t,this.props.pathwayActions.enabledType===R.GRID?this.props.pathwayActions.toggleGrid(!0):this.props.pathwayActions.enabledType===R.GUIDE?this.props.pathwayActions.toggleGuide(!0):this.props.pathwayActions.toggleGrid(!1)}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=[{svg:pe.a,function:this.props.pathwayActions.newPathway,tooltip:"New Pathway"},{svg:Ce.a,function:this.props.pathwayActions.upload,tooltip:"Import Pathway"},{svg:Ee.a,function:function(){t.props.pathwayActions.export(!1)},tooltip:"Export Pathway"}],a=[{svg:oe.a,function:this.props.pathwayActions.deleteSelected,tooltip:"Delete Selected"}];this.props.pathwayActions.isCollaborative||a.push({svg:Le.a,function:function(){t.props.pathwayActions.undo()},tooltip:"Undo"},{svg:De.a,function:function(){t.props.pathwayActions.redo()},tooltip:"Redo"});var i=[{svg:Jt.a,function:function(){t.props.pathwayActions.align("hTop")},tooltip:"Align Horizontal Top"},{svg:Ft.a,function:function(){t.props.pathwayActions.align("hMid")},tooltip:"Align Horizontal Middle"},{svg:Vt.a,function:function(){t.props.pathwayActions.align("hBot")},tooltip:"Align Horizontal Bottom"},{svg:te.a,function:function(){t.props.pathwayActions.align("vLeft")},tooltip:"Align Vertical Left"},{svg:_t.a,function:function(){t.props.pathwayActions.align("vCen")},tooltip:"Align Vertical Center"},{svg:ae.a,function:function(){t.props.pathwayActions.align("vRight")},tooltip:"Align Vertical Right"}],o=[{isFocused:this.props.pathwayActions.enabledType===R.GRID,svg:re.a,function:function(){t.setEnabledType(R.GRID)},tooltip:"Enable Grid: Show and snap to grid"},{isFocused:this.props.pathwayActions.enabledType===R.GUIDE,svg:ce.a,function:function(){t.setEnabledType(R.GUIDE)},tooltip:"Enable Guidelines: Enable and snap to alignment guidelines"}],n=[{svg:Ie.a,function:function(){t.props.pathwayActions.hideSelected()},tooltip:"Hide Selected"},{svg:fe.a,function:function(){t.props.pathwayActions.showAll()},tooltip:"Show All"}],r=[{svg:v.a,function:function(){t.props.pathwayActions.performLayout()},tooltip:"Perform Layout"},{svg:de.a,function:function(){t.props.handleOpen(Ma.LAYOUT)},tooltip:"Layout Properties"}],l=[e,a,i,o,n,[{svg:Ae.a,function:function(){t.props.handleOpen(Ma.STUDY)},tooltip:"Fetch Genomic Data From cBioPortal"},{svg:we.a,function:function(){t.props.handleOpen(Ma.PROFILES)},tooltip:"Genomic Data Visibility Settings"}],r,[{svg:ye.a,function:function(){t.props.handleOpen(Ma.HELP)},tooltip:"Quick Help"},{svg:Ht.a,function:function(){t.props.handleOpen(Ma.ABOUT)},tooltip:"About"}]];return g.a.createElement(I.Navbar,{fluid:!0,style:{backgroundColor:"#eff0f2",minHeight:"0px"},className:"pathway-toolbar"},g.a.createElement(I.ButtonToolbar,{className:"toolbar pathway-toolbar",style:{marginBottom:"0px",paddingBottom:"0px"}},l.map((function(t,e){return g.a.createElement(I.ButtonGroup,{key:e},t.map((function(t,e){return g.a.createElement(I.Button,{key:e,className:"toolbar-button"+(t.isFocused?" toolbar-button-focused":""),style:{padding:0}},g.a.createElement("img",{height:"22px",width:"22px",src:t.svg,"data-tip":t.tooltip,"data-place":"bottom","data-effect":"solid",onClick:t.function}))})))})),g.a.createElement(I.ButtonGroup,{id:"searchGeneToolbar"},g.a.createElement(I.FormGroup,null,g.a.createElement(I.InputGroup,null,g.a.createElement(I.FormControl,{id:"searchGene",type:"text",style:{maxHeight:"32px",borderTopRightRadius:0,borderBottomRightRadius:0},onChange:function(e){t.searchedGene=e.target.value},placeholder:"Search Genes...",onKeyPress:function(e){"Enter"===e.key&&t.props.pathwayActions.searchGene(t.searchedGene)}}),g.a.createElement(I.InputGroup.Addon,{id:"search-gene-input-group-addon",onClick:function(){t.props.pathwayActions.searchGene(t.searchedGene)},style:{cursor:"pointer"}},g.a.createElement(I.Glyphicon,{glyph:"search"})))))))}}),Ge([r.observable],e.prototype,"searchedGene",void 0),e=Ge([l.observer],e)}(g.a.Component),Se=a(7),ze=a.n(Se),Ze=a(43),Ye=a.n(Ze),Re=a(44),xe=a.n(Re),Be=a(45),Qe=a.n(Be),ke=a(46),We=a.n(ke),He=a(47),Ue=a.n(He),Ve=a(48),Ke=a.n(Ve),Fe=function(){function t(t,e,a,i,o){Object.defineProperty(this,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"handleOpen",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"undoRedoManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isCollaborative",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.cy=t,this.editor=e,this.handleOpen=a,this.undoRedoManager=i,this.isCollaborative=o,this.init()}return Object.defineProperty(t.prototype,"init",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=this,a=this.cy.scratch("cycontextmenus")?this.cy.contextMenus("get"):this.cy.contextMenus(),i=[{id:"deleteSelected",content:"Delete Selected",coreAsWell:!0,onClickFunction:function(){var a=t.cy.elements(":selected");e.editor.removeElement(a)},disabled:!1,hasTrailingDivider:!1},{id:"hideSelected",content:"Hide Selected",coreAsWell:!0,onClickFunction:function(){e.editor.hideSelectedNodes()},disabled:!1,hasTrailingDivider:!1},{id:"loadFromCBioPortal",content:"Load From cBioPortal...",coreAsWell:!0,onClickFunction:function(){t.handleOpen(Ma.STUDY)},disabled:!1,hasTrailingDivider:!1},{id:"remove",content:"Delete",selector:"node, edge",onClickFunction:function(t){var a=t.target,i=e.cy.nodes(":selected").union(a);e.editor.removeElement(i)},disabled:!1,hasTrailingDivider:!1,coreAsWell:!1},{id:"addSelected",content:"Add Selected Into This",selector:"node",onClickFunction:function(t){var a=t.target,i=e.cy.nodes(":selected"),o=a.data("type"),n=e.cy.collection();if(!("GENE"===a._private.data.type||i.size()<1)){var r=!1;if(i.forEach((function(t,i){return a.id()==t.id()?(r=!0,!1):!t.isParent()||!(r=e.isChildren(t,a))})),!r){var l=[];i.forEach((function(t){i.forEach((function(a){e.isChildren(t,a)&&l.push(a)}))})),l.forEach((function(t){t.unselect(),i=i.filter((function(e){return e!=t}))})),i.forEach((function(t,e){"FAMILY"==o||"COMPLEX"==o?"COMPARTMENT"!=t.data("type")&&"PROCESS"!=t.data("type")&&(n=n.add(t)):n=n.add(t)}));var c=a.id();e.editor.changeParents(n,c),i.unselect()}}},disabled:!1,hasTrailingDivider:!1,coreAsWell:!1},{id:"removeSelected",content:"Remove Selected From Parent",selector:"node",onClickFunction:function(t){var a=t.target,i=e.cy.nodes(":selected"),o=!1;i.forEach((function(t,i){return!t.isParent()||!(o=e.isChildren(t,a))})),o||(e.editor.changeParents(i,null),i.unselect())},disabled:!1,hasTrailingDivider:!1,coreAsWell:!1},{id:"performLayout",content:"Perform Layout",coreAsWell:!0,onClickFunction:function(){t.editor.performLayout()},disabled:!1,hasTrailingDivider:!1}],o=[{id:"undoAction",content:"Undo",coreAsWell:!0,onClickFunction:function(){t.undoRedoManager.undo()},disabled:!1,hasTrailingDivider:!1},{id:"redoAction",content:"Redo",coreAsWell:!0,onClickFunction:function(){t.undoRedoManager.redo()},disabled:!1,hasTrailingDivider:!1}];this.isCollaborative||(i=i.concat(o)),a.appendMenuItems(i)}}),Object.defineProperty(t.prototype,"isChildren",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){for(var a=e.parent()[0];a;){if(a.id()==t.id())return!0;a=a.parent()[0]}return!1}}),t}(),Xe=function(){function t(t,e){Object.defineProperty(this,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.cy=t,this.editor=e}return Object.defineProperty(t.prototype,"generateEdgeQtip",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=t.data("pubmedIDs"),i=document.createElement("div"),o=document.createElement("div");o.classList.add("row","node-tooltip-header"),o.innerHTML="INTERACTION DETAILS",i.append(o);var n=document.createElement("div");n.classList.add("col-xs-6","inputCol");var r=document.createElement("input");r.type="text",r.value=t.data("name"),r.classList.add("form-control"),r.addEventListener("change",(function(a){var i=a.target.value;e.editor.changeName(t,i)})),n.appendChild(r);var l=document.createElement("div");l.classList.add("row","geneDetails");var c=document.createElement("div");c.classList.add("col-xs-6","qtipLabel"),c.innerHTML="Label:",l.appendChild(c),l.appendChild(n),i.appendChild(l),i.appendChild(document.createElement("hr"));var g=document.createElement("div");g.classList.add("col-xs-6","inputCol");var I=document.createElement("input");I.type="text",I.classList.add("form-control"),I.addEventListener("change",(function(a){var i=a.target.value.split(";");a.target.value="",e.editor.addPubmedIDs(t,i),u(t.data("pubmedIDs"))})),g.appendChild(I);var s=document.createElement("div");s.classList.add("row","geneDetails");var d=document.createElement("div");function u(a){document.getElementsByClassName("pubmedIDList").length>0&&document.getElementsByClassName("pubmedIDList").item(0).remove();var o=document.createElement("div");o.classList.add("pubmedIDList"),o.appendChild(document.createElement("hr"));var n=document.createElement("label");for(var r in n.classList.add("col-xs-12","pubmedIDLabel"),n.innerHTML="Pubmed IDs",o.appendChild(n),a)if(a.hasOwnProperty(r)){var l=a[r];if(!isNaN(l)){var c=document.createElement("div"),g=document.createElement("i");g.classList.add("fa","fa-times","qtipRemovePmedID"),g.setAttribute("aria-hidden","true"),g.setAttribute("pubmedId",l),g.addEventListener("click",(function(a){a.target.parentElement.remove();var i=a.target.getAttribute("pubmedId");e.editor.removePubmedID(t,[i]),0===t.data("pubmedIDs").length&&document.getElementsByClassName("pubmedIDList").item(0).remove()}));var I=document.createElement("div"),s=document.createElement("label"),d=document.createElement("a");d.setAttribute("target","_blank");var u="https://www.ncbi.nlm.nih.gov/pubmed/"+l;d.setAttribute("href",u),d.innerHTML=l.toString(),s.appendChild(d),I.appendChild(s),I.appendChild(g),c.appendChild(I),o.appendChild(c)}}t.data("pubmedIDs").length>0&&i.appendChild(o)}return d.classList.add("col-xs-6","qtipLabel"),d.innerHTML="Add Pubmed ID(s):",s.appendChild(d),s.appendChild(g),i.appendChild(s),a.length>0&&u(a),i.classList.add("tooltip-text-style"),i}}),Object.defineProperty(t.prototype,"generateNodeQtip",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=document.createElement("div");a.classList.add("row","node-tooltip-header"),a.innerHTML=t.data("type").toUpperCase()+" DETAILS";var i=document.createElement("div");i.classList.add("col-xs-8","inputCol");var o=document.createElement("input");o.type="text",o.value=t.data("name"),o.classList.add("form-control"),o.addEventListener("change",(function(a){var i=a.target.value;e.editor.changeName(t,i)})),i.appendChild(o);var n=document.createElement("div"),r=document.createElement("div");r.classList.add("row","geneDetails");var l=document.createElement("div");if(l.classList.add("col-xs-4","qtipLabel"),l.innerHTML="Name:",r.appendChild(l),r.appendChild(i),n.append(a),n.append(r),"GENE"===t.data("type")){var c=document.createElement("div");c.classList.add("row","centerText","geneDetails");var g=document.createElement("button");g.type="button",g.classList.add("btn","btn-default"),g.innerHTML="My Cancer Genome",g.addEventListener("click",(function(e){e.preventDefault();var a=t.data("name");window.open("https://www.mycancergenome.org/content/gene/"+a)})),c.append(g),n.append(c)}return n.classList.add("tooltip-text-style"),n}}),Object.defineProperty(t.prototype,"addQtipToElements",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this;t.forEach((function(t){var a=t.popperRef(),i=document.createElement("div");document.body.appendChild(i);var o=tt()(i,{getReferenceClientRect:a.getBoundingClientRect,trigger:"manual",placement:"bottom",interactive:!0,theme:"pathwaymapper",content:function(){return t.isNode()?e.generateNodeQtip(t):e.generateEdgeQtip(t)},onHidden:function(t){t.destroy(),i.remove()}});e.cy.one("pan zoom",(function(){i&&i._tippy&&o.hide()})),t.one("showqtipevent",(function(){o.show()}))}))}}),Object.defineProperty(t.prototype,"capitalizeFirstLetter",{enumerable:!1,configurable:!0,writable:!0,value:function(t){return t.charAt(0).toUpperCase()+t.slice(1)}}),t}(),Je=function(){function t(t){Object.defineProperty(this,"NODEMAP_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"nodes"}),Object.defineProperty(this,"EDGEMAP_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"edges"}),Object.defineProperty(this,"LAYOUT_PROPS_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"layoutProperties"}),Object.defineProperty(this,"GLOBAL_OPTS_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"globalOptions"}),Object.defineProperty(this,"GENOMIC_DATA_MAP_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"genomicDataMap"}),Object.defineProperty(this,"VISIBLE_GENOMIC_DATA_MAP_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"visibleGenomicDataMapByType"}),Object.defineProperty(this,"GENOMIC_DATA_GROUP_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"genomicDataGroupList"}),Object.defineProperty(this,"GENOMIC_DATA_GROUP_COUNT",{enumerable:!0,configurable:!0,writable:!0,value:"genomicDataGroupCount"}),Object.defineProperty(this,"GENOMIC_DATA_COLOR_SCHEME_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"genomicDataColorScheme"}),Object.defineProperty(this,"CHAT_APPLICATION_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"chatMessages"}),Object.defineProperty(this,"CHAT_MESSAGES_COUNT",{enumerable:!0,configurable:!0,writable:!0,value:"chatMessagesCount"}),Object.defineProperty(this,"PATHWAY_TITLE",{enumerable:!0,configurable:!0,writable:!0,value:"pathwayTitle"}),Object.defineProperty(this,"NUMBER_OF_USERS",{enumerable:!0,configurable:!0,writable:!0,value:"numberOfUsers"}),Object.defineProperty(this,"WORK_ID",{enumerable:!0,configurable:!0,writable:!0,value:"id"}),Object.defineProperty(this,"doc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"postFileLoad",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"reconnectEdge",{enumerable:!0,configurable:!0,writable:!0,value:function(t,e,a){var i=this.doc.data[this.EDGEMAP_NAME],o=i[a.id],n=o.id;if(o.source=t,o.target=e,!i.hasOwnProperty(n))throw new Error("Element does not exist in Real Time");this.updateShareDBObject(this.EDGEMAP_NAME,n,o)}}),this.postFileLoad=t}return Object.defineProperty(t.prototype,"getDoc",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.doc}}),Object.defineProperty(t.prototype,"setEditor",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.editor=t}}),Object.defineProperty(t.prototype,"applyShareDBOperation",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.doc.submitOp(t,this.shareDBError)}}),Object.defineProperty(t.prototype,"clearShareDBGenomicData",{enumerable:!1,configurable:!0,writable:!0,value:function(){for(var t=[],e=this.doc.data[this.GENOMIC_DATA_MAP_NAME],a=this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME],i=this.doc.data[this.GENOMIC_DATA_GROUP_NAME],o=this.doc.data[this.GENOMIC_DATA_GROUP_COUNT],n=0,r=Object.keys(e);n=0&&o.push(l)}for(n=0;n0)for(var c=0,g=t.children;c0?(g.data.anchorPoints=g.data.bendPointPositions,delete g.data.bendPointPositions,I="segments"):g.data.controlPointPositions&&g.data.controlPointPositions.length>0&&(g.data.anchorPoints=g.data.controlPointPositions,delete g.data.controlPointPositions,I="unbundled-bezier");var s=g.data;s.edgeCurveStyle=I;var d=a.getCustomObjId();s.id=d;var u=a.edgeInitializer(s);a.insertShareDBObject(a.EDGEMAP_NAME,d,u)}}}),Object.defineProperty(t.prototype,"mergeGraph",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this,i=a.doc.data[this.NODEMAP_NAME],o={},n={},r={};for(var l in i){var c=i[l];o[c.id]=c,n[c.name]=c}function g(t,e){if(t.data.name in n){var i=n[t.data.name].id;if(r[t.data.id]=i,t.children.length>0)for(var o=0,l=t.children;o0)for(var s=0,d=t.children;s0&&e.pubmedIDs.push(t.pubmedIDs)):e.pubmedIDs=[],t.anchorPoints?(null==e.anchorPoints&&(e.anchorPoints=[]),Array.isArray(t.anchorPoints[0])?e.anchorPoints=t.anchorPoints[0]:e.anchorPoints=t.anchorPoints):e.anchorPoints=[],e}}),Object.defineProperty(t.prototype,"nodeInitializer",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e={};return e.id=t.id||this.getCustomObjId(),e.name=t.name||"undefined",e.type=t.type||"undefined",e.parent=t.parent||"undefined",e.x=t.x||"undefined",e.y=t.y||"undefined",e.w=t.w||"undefined",e.h=t.h||"undefined",e.minWidth=t.minWidth||0,e.minWidthBiasLeft=t.minWidth||0,e.minWidthBiasRight=t.minWidth||0,e.minHeight=t.minWidth||0,e.minHeightBiasTop=t.minWidth||0,e.minHeightBiasBottom=t.minWidth||0,e.isHidden=t.isHidden||!1,e.isInvalidGene=t.isInvalidGene||!1,e.isHighlighted=t.isHighlighted||!1,e}}),Object.defineProperty(t.prototype,"layoutPropertiesInitializer",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e={};return e.name=t.name||"undefined",e.nodeRepulsion=t.nodeRepulsion||"undefined",e.idealEdgeLength=t.idealEdgeLength||"undefined",e.edgeElasticity=t.edgeElasticity||"undefined",e.nestingFactor=t.nestingFactor||"undefined",e.gravity=t.gravity||"undefined",e.numIter=t.numIter||"undefined",e.tile=t.tile||"undefined",e.animate=t.animate||"undefined",e.randomize=t.randomize||!1,e.gravityRangeCompound=t.gravityRangeCompound||"undefined",e.gravityCompound=t.gravityCompound||"undefined",e.gravityRange=t.gravityRange||"undefined",e.tilingPaddingVertical=t.tilingPaddingVertical||"undefined",e.tilingPaddingHorizontal=t.tilingPaddingHorizontal||"undefined",e.initialEnergyOnIncremental=t.initialEnergyOnIncremental||"undefined",e}}),Object.defineProperty(t.prototype,"globalOptionsInitializer",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e={};return e.zoomLevel=t.zoomLevel||"undefined",e.panLevel=t.panLevel||"undefined",e}}),Object.defineProperty(t.prototype,"getCustomObjId",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=Date.now();return"undefined"!=typeof performance&&"function"==typeof performance.now&&(t+=performance.now()),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var a=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?a:3&a|8).toString(16)}))}}),Object.defineProperty(t.prototype,"getParam",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=new RegExp(t+"=(.*?)($|&)","g"),a=window.location.search.match(e);return a=a&&a.length?(a=a[0]).replace(t+"=","").replace("&",""):null}}),t}(),qe=(a(63),function(){function t(t,e,a){Object.defineProperty(this,"pathwayHandler",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.editor=t,this.cy=e,this.pathwayHandler=a,this.initNodeAdd()}return Object.defineProperty(t.prototype,"initNodeAdd",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e={height:30,width:30,padding:5,backgroundColorDiv:"#fbfbfb",borderColorDiv:"#fff",borderWidthDiv:"0px",borderRadiusDiv:"5px",icon:"",nodeParams:function(){return{}}},a=this;q.a.fn.cytoscapeNodeadd=function(i){var o=q.a.extend(!0,{},e,i),n=i,r={destroy:function(){q()(this).find(".ui-cytoscape-nodeadd").remove()},init:function(){return q()(this).each((function(){for(var e=0,i=o.components;e
');r.append(l);var c=q()('
');l.append(c),c.bind("mousedown",(function(t){t.stopPropagation(),t.preventDefault()})),r.find(".ui-cytoscape-nodeadd-nodediv").css({background:o.backgroundColorDiv,border:o.borderWidthDiv+" solid "+o.borderColorDiv,"border-radius":o.borderRadiusDiv}),r.find("#ui-cytoscape-nodeadd-icon").draggable({helper:"clone",cursor:"pointer"})}var g=q()(this);g.droppable({activeClass:"ui-state-highlight",drop:function(e,i){g.removeClass("ui-state-highlight");var o=g.offset(),n=e.pageX-o.left,r=e.pageY-o.top,l=q()(i.helper).attr("nodeType").toUpperCase(),c=t.cy,I={},s={};c.nodes().forEach((function(t){var e=t.renderedBoundingBox();n<=e.x2&&n>=e.x1&&r<=e.y2&&r>=e.y1&&"GENE"!=t.data().type&&(t.children().length>0&&(s[t.id()]=!0),s[t._private.data.parent]&&delete I[t._private.data.parent],I[t.id()]=t)}));var d=I[Object.keys(I)[0]],u={w:"0",h:"100",parent:0,type:l,name:"New "+q()(i.helper).attr("nodeType")};d&&("FAMILY"==d.data().type||"COMPLEX"==d.data().type?"COMPARTMENT"!=l&&"PROCESS"!=l&&(u.parent=d.id()):u.parent=d.id()),"PROCESS"===l?(u.w="100",u.h="35"):(u.w="150",u.h="52"),n=n/c.zoom()+c.extent().x1,r=r/c.zoom()+c.extent().y1,t.editor.addNode(u,{x:n,y:r}),a.pathwayHandler("Additional Pathway")}})}))}};return r[n]?r[n].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof n&&n?(q.a.error("No such function `"+n+"` for jquery.cytoscapenodeadd"),q()(this)):r.init.apply(this,arguments)},q.a.fn.cynodeadd=q.a.fn.cytoscapeNodeadd;try{ze()("core","nodeadd",(function(t){q()(this.container()).cytoscapeNodeadd(t)}))}catch(t){console.log(t)}}}),t}()),_e=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),$e=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r};window.$=q.a;var ta=a(64),ea=a(65),aa=a(66),ia=a(67),oa=a(68),na=a(69),ra=a(70),la=a(71),ca=a(72),ga=a(73),Ia=a(74),sa=a(75),da=a(76),ua=a(77),Ca=a(78),Na=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"cyDiv",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"edgeAddingMode",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"viewOperationsManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"qtipManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"genomicDataExplorerView",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"pathwayDetailsView",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"viewUtilities",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isCollaborative",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isCbioPortal",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"shareDBManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"cxtMenuManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"dragDropNodeAddManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"undoRedoManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"portalAccessor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isMountedFirst",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(a,"eh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"lastSelectedEdge",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),a.isCollaborative=e.isCollaborative,a.edgeAddingMode=0,a.isCbioPortal=e.isCbioPortal,a}return _e(e,t),Object.defineProperty(e.prototype,"componentWillUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.props.selectedPathway!==t.selectedPathway&&this.getPathway(t.selectedPathway)}}),Object.defineProperty(e.prototype,"componentDidUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.isCbioPortal&&t.selectedPathway!==this.props.selectedPathway&&this.props.onPathwayChangeCompleted()}}),Object.defineProperty(e.prototype,"getPathway",{enumerable:!1,configurable:!0,writable:!0,value:function(t){if(t&&""!==t){var e=C[t];if(e){var a=p.parseGraph(e,!0);this.editor.loadFile(a.nodes,a.edges)}}}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){return g.a.createElement("div",{className:this.props.isCbioPortal?"":"cyContainer",style:{border:"3px solid "+(this.isCbioPortal?"#4389c0":"#1abc9c")}},g.a.createElement("div",{ref:this.cyDivHandler,id:"cy",style:{height:this.isCbioPortal?"800px":"100%",borderRadius:"6px",marginTop:"0px"}}),!this.isCbioPortal&&g.a.createElement("div",{className:"cytoscape-navigator-wrapper"}))}}),Object.defineProperty(e.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.isMountedFirst&&(this.init(),this.isMountedFirst=!1),this.getPathway(this.props.selectedPathway)}}),Object.defineProperty(e.prototype,"cyDivHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.cyDiv=t}}),Object.defineProperty(e.prototype,"init",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.portalAccessor=new wt,this.initCyJS(),this.initCyHandlers(),this.initKeyboardHandlers(),this.initUndoRedoFunctionality(),this.initCBioPortalFunctionalities(),this.placePanzoomAndOverlay()}}),Object.defineProperty(e.prototype,"placePanzoomAndOverlay",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=q()(this.cyDiv).offset().top,e=q()(this.cyDiv).offset().left,a=q()(this.cyDiv).outerHeight(),i=q()(this.cyDiv).outerWidth(),o=this.isCbioPortal?0:q()(".cytoscape-navigator-wrapper").outerHeight(),n=this.isCbioPortal?0:q()(".cytoscape-navigator-wrapper").outerWidth();this.isCbioPortal||(q()(".cytoscape-navigator-wrapper").css("top",a+t-o-5+16),q()(".cytoscape-navigator-wrapper").css("left",i+e-n-5+24-.5+.35),q()(".cytoscape-navigator-wrapper").css("z-index",1039)),q()(".cytoscape-navigator-wrapper").css("z-index",1039),q()(".cy-panzoom").css("position","relative"),q()(".cy-panzoom").css("top",2),q()(".cy-panzoom").css("left",i-51),q()(".cy-panzoom").css("z-index",1039),q()(".cy-panzoom").css("width",200)}}),Object.defineProperty(e.prototype,"getPathwayData",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.pathwayDetailsView.getPathwayData()}}),Object.defineProperty(e.prototype,"initCyJS",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;try{na(ze.a,q.a)}catch(t){console.log(t)}try{this.isCbioPortal||ca(ze.a)}catch(t){console.log(t)}try{da(ze.a,q.a)}catch(t){console.log(t)}try{oa(ze.a)}catch(t){console.log(t)}try{ga(ze.a,q.a)}catch(t){console.log(t)}try{ia(ze.a,q.a,Ia)}catch(t){console.log(t)}try{ea(ze.a,q.a,Ia)}catch(t){console.log(t)}try{sa(ze.a,q.a)}catch(t){console.log(t)}try{ta(ze.a,q.a)}catch(t){console.log(t)}try{ua(ze.a)}catch(t){console.log(t)}try{aa(ze.a)}catch(t){console.log(t)}try{Ca(ze.a)}catch(t){console.log(t)}this.cy=ze()({container:this.cyDiv,boxSelectionEnabled:!0,autounselectify:!1,wheelSensitivity:.1,style:ra,textureOnViewport:!1,motionBlur:!0,layout:{name:"preset"}}),this.edgeAddingMode=0,this.undoRedoManager=this.cy.undoRedo(),this.shareDBManager=new Je((function(){t.shareDBManager.getDoc()})),this.editor=new gt(this.isCollaborative,this.shareDBManager,this.cy,this.isCbioPortal,this.undoRedoManager,this.portalAccessor,this.props.profiles,this.props.genomicDataOverlayColorScheme,this.props.colorSchemeChangeCallback,this.props.incrementChatMessageCountCallback,this.props.newMessageCallback,this.props.updatePathwayTitleCallback),this.shareDBManager.setEditor(this.editor),this.isCollaborative&&this.shareDBManager.initShareDB(),this.qtipManager=new Xe(this.cy,this.editor),this.cxtMenuManager=this.isCbioPortal?void 0:new Fe(this.cy,this.editor,this.props.handleOpen,this.undoRedoManager,this.props.isCollaborative),this.dragDropNodeAddManager=new qe(this.editor,this.cy,this.props.pathwayHandler),this.cy.panzoom(la),this.cy.layoutUtilities({desiredAspectRatio:this.cy.width()/this.cy.height()}),this.cy.nodeadd({components:[{container:q()("#simpleNodeDiv"),nodeType:"Gene",icon:We.a},{container:q()("#familyNodeDiv"),nodeType:"Family",icon:Qe.a},{container:q()("#complexNodeDiv"),nodeType:"Complex",icon:xe.a},{container:q()("#compartmentNodeDiv"),nodeType:"Compartment",icon:Ye.a},{container:q()("#processNodeDiv"),nodeType:"Process",icon:Ue.a}]});var e=this,a={preview:!0,stackOrder:4,handleSize:10,handleColor:"#1abc9c",handleLineType:"ghost",handleLineWidth:1,handleNodes:"node",hoverDelay:1,cxt:!1,enabled:!1,toggleOffOnLeave:!0,edgeType:function(t,e){return"flat"},handlePosition:function(t){return"middle top"},loopAllowed:function(t){return!1},nodeLoopOffset:-50,nodeParams:function(t,e){return{}},edgeParams:function(t,e,a){return{}},start:function(t){e.getGlobalEdgeType()},complete:function(t,a,i){e.cy.remove(i),e.editor.addEdge({source:t.id(),target:a[0].id(),type:e.getGlobalEdgeType(window.edgeAddingMode),pubmedIDs:[],name:""})},stop:function(t){e.edgeAddingMode=-1,e.eh.disable(),e.eh.hide(),e.props.setActiveEdge(-1)}};this.eh=this.cy.edgehandles(a),this.eh.disable(),this.props.editorHandler(this.editor,this.eh,this.undoRedoManager),this.isCbioPortal||this.cy.nodeEditing({padding:5,undoable:!0,grappleSize:8,grappleColor:"#ffc90e",inactiveGrappleStroke:"inside 1px blue",boundingRectangle:!0,boundingRectangleLineDash:[4,8],boundingRectangleLineColor:"ffc90e",boundingRectangleLineWidth:1.5,zIndex:999,moveSelectedNodesOnKeyEvents:function(){return!0},minWidth:function(t){var e=t.data("resizeMinWidth");return e||15},minHeight:function(t){var e=t.data("resizeMinHeight");return e||15},getCompoundMinWidth:function(t){return t.style("min-width")},getCompoundMinHeight:function(t){return t.style("min-height")},getCompoundMinWidthBiasRight:function(t){return t.style("min-width-bias-right")},getCompoundMinWidthBiasLeft:function(t){return t.style("min-width-bias-left")},getCompoundMinHeightBiasTop:function(t){return t.style("min-height-bias-top")},getCompoundMinHeightBiasBottom:function(t){return t.style("min-height-bias-bottom")},isFixedAspectRatioResizeMode:function(t){return t.is(".fixedAspectRatioResizeMode")},isNoResizeMode:function(t){},setWidth:function(t,e){t.data("w",e)},setHeight:function(t,e){t.data("h",e)},setCompoundMinWidth:function(t,e){t.style("min-width",e)},setCompoundMinHeight:function(t,e){t.style("min-height",e)},setCompoundMinWidthBiasLeft:function(t,e){t.style("min-width-bias-left",e)},setCompoundMinWidthBiasRight:function(t,e){t.style("min-width-bias-right",e)},setCompoundMinHeightBiasTop:function(t,e){t.style("min-height-bias-top",e)},setCompoundMinHeightBiasBottom:function(t,e){t.style("min-height-bias-bottom",e)},cursors:{default:"default",inactive:"not-allowed",nw:"nw-resize",n:"n-resize",ne:"ne-resize",e:"e-resize",se:"se-resize",s:"s-resize",sw:"sw-resize",w:"w-resize"},resizeToContentCueImage:Ke.a,resizeToContentFunction:this.editor.resizeNodesToContent.bind(this.editor)});this.isCbioPortal||this.cy.navigator({container:".cytoscape-navigator-wrapper",viewLiveFramerate:0,thumbnailEventFramerate:10,thumbnailLiveFramerate:!1,dblClickDelay:200,removeCustomContainer:!0,rerenderDelay:100});this.viewUtilities=this.cy.viewUtilities({node:{highlighted:{"border-width":2,"border-color":"#bc1142"},unhighlighted:{opacity:function(t){return t.css("opacity")}}},edge:{highlighted:{},unhighlighted:{opacity:function(t){return t.css("opacity")}}},setVisibilityOnHide:!1,setDisplayOnHide:!0,neighbor:function(){return!1},neighborSelectTime:500}),this.editor.setViewUtilities(this.viewUtilities),this.placePanzoomAndOverlay()}}),Object.defineProperty(e.prototype,"getGlobalEdgeType",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t="NONE";return 1===window.edgeAddingMode?t="ACTIVATES":2===window.edgeAddingMode?t="INHIBITS":3===window.edgeAddingMode?t="INDUCES":4===window.edgeAddingMode?t="REPRESSES":5===window.edgeAddingMode&&(t="BINDS"),t}}),Object.defineProperty(e.prototype,"initCyHandlers",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t,e,a=this,i=this;this.cy.on("tap",(function(a){var i=a.target;-1!==e&&-1!==t&&clearTimeout(e),t===i?(i.trigger("doubleTap"),t=-1):(e=setTimeout((function(){t=-1}),300),t=i)})),this.cy.on("doubleTap","node",(function(t){i.props.isCbioPortal||t.target===this&&(i.qtipManager.addQtipToElements(t.target),t.target.trigger("showqtipevent"))})),this.cy.on("doubleTap","edge",(function(t){i.props.isCbioPortal||t.target===this&&(i.qtipManager.addQtipToElements(t.target),t.target.trigger("showqtipevent"))})),this.cy.on("select","node",(function(t){a.editor.pushSelectedNodeStack(t.target)})),this.cy.on("unselect","node",(function(t){a.editor.removeElementFromSelectedNodeStack(t.target)})),this.cy.on("free","node",(function(t){var e=a.cy.nodes(":selected"),i=t.target;i=(i=i.union(i.descendants())).union(e),a.editor.moveElements(i)})),this.cy.on("layoutstop",(function(){a.editor.postLayout()})),this.cy.on("nodeediting.resizeend",(function(t,e,i){i.data("w",i.width()),i.data("h",i.height()),a.editor.resizeElements(i)})),this.cy.on("select","edge",(function(t){a.lastSelectedEdge=t.target})),this.cy.on("bendPointMovement",(function(){a.editor.updateEdgeAnchorPoints(a.lastSelectedEdge)})),this.cy.on("nodeediting.moveend",(function(){a.editor.changeNodePositionsByArrows(a.cy.nodes(":selected"))}))}}),Object.defineProperty(e.prototype,"initKeyboardHandlers",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;this.isCollaborative||this.isCbioPortal?(q()('a[role="redo"]').hide(),q()('a[role="undo"]').hide()):q()(document).keydown((function(e){89===e.which&&(e.ctrlKey||e.metaKey)?t.undoRedoManager.redo():90===e.which&&(e.ctrlKey||e.metaKey)&&t.undoRedoManager.undo()})),q()(document).keydown((function(e){if(65===e.which&&(e.ctrlKey||e.metaKey))"TEXTAREA"!=(a=document.activeElement.tagName)&&"INPUT"!=a&&(e.preventDefault(),t.cy.elements().select());else if(8===e.which||46===e.which){var a;if("TEXTAREA"!=(a=document.activeElement.tagName)&&"INPUT"!=a){var i=t.cy.$(":selected");t.editor.removeElement(i)}}}))}}),Object.defineProperty(e.prototype,"initUndoRedoFunctionality",{enumerable:!1,configurable:!0,writable:!0,value:function(){(this.isCollaborative||this.isCbioPortal)&&(q()('[role="undo"]').hide(),q()('[role="redo"]').hide())}}),Object.defineProperty(e.prototype,"initCBioPortalFunctionalities",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.isCbioPortal&&this.cy.contextMenus("get").destroy()}}),$e([n.a],e.prototype,"cyDivHandler",null),e=$e([l.observer],e)}(g.a.Component),pa=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}();var Ma,Aa,ba=function(t){function e(e){return t.call(this,e)||this}return pa(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){for(var t,e=this,a={},i=0,o=Object.keys(C);i30?t.substr(0,30)+"...":t))),g.a.createElement(I.Nav,{pullRight:!0},g.a.createElement(I.Navbar.Brand,null,g.a.createElement("a",{href:"#"},"PathwayMapper"))))}}),e}(g.a.Component),ya=a(49),ha=a.n(ya),Da=a(50),ma=a.n(Da),Ea=a(51),ja=a.n(Ea),wa=a(52),Ta=a.n(wa),fa=a(53),va=a.n(fa),La=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Oa=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Ga=function(t){function e(e){var a=t.call(this,e)||this;return Object(r.makeObservable)(a),a}return La(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){return g.a.createElement("div",{className:this.props.username===this.props.message.username&&this.props.message.userId===this.props.userId?"MyMessage":"OtherMessage"},g.a.createElement("div",{style:{color:this.props.message.userId===this.props.userId?["#1e90ff","#ff0000","#b0b000","#006400","#0000ff","#257359","#c71585","#fd713d"][this.props.message.userId%8]:["#8ec7fe","#f08c8c","#f6f7b6","#31ff31","#b3b3f7","#b2e5d4","#f17bc5","#fdb89e"][this.props.message.userId%8]}}," ",this.props.message.username+"_"+this.props.message.userId," "),g.a.createElement("div",{style:{whiteSpace:"pre"}},this.props.message.message))}}),e=Oa([l.observer],e)}(g.a.Component),Pa=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Sa=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},za=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"message",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(a,"charactersPerLine",{enumerable:!0,configurable:!0,writable:!0,value:21}),Object(r.makeObservable)(a),a.state={diffX:0,diffY:0,dragging:!1,styles:{}},a.handleSubmit=a.handleSubmit.bind(a),a.handleChange=a.handleChange.bind(a),a}return Pa(e,t),Object.defineProperty(e.prototype,"convertMessage",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e="",a=0;a=t.length-1)i=t.length-1;else if(" "===t.charAt(i+1));else for(;i>=0&&" "!==t.charAt(i);)i-=1;if(a>i){for(var o=a;o=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Ra=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"activeEdge",{enumerable:!0,configurable:!0,writable:!0,value:-1}),Object.defineProperty(a,"showChat",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object(r.makeObservable)(a),e.setActiveEdgeHandler(a.setActiveEdge),a}return Za(e,t),Object.defineProperty(e.prototype,"addEdge",{enumerable:!1,configurable:!0,writable:!0,value:function(t){if(t===this.activeEdge)return this.setActiveEdge(-1),void this.props.pathwayActions.addEdge(-1);this.setActiveEdge(t),this.props.pathwayActions.addEdge(t)}}),Object.defineProperty(e.prototype,"setActiveEdge",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.activeEdge=t}}),Object.defineProperty(e.prototype,"changeScroll",{enumerable:!1,configurable:!0,writable:!0,value:function(){document.getElementById("chatBoxxheader").children[0].scrollTop=document.getElementById("chatBoxxheader").children[0].scrollHeight}}),Object.defineProperty(e.prototype,"openChat",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.showChat=!this.showChat,setTimeout(this.changeScroll,50)}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=["Activates","Inhibits","Induces","Represses","Binds"],a=[ha.a,Ta.a,ja.a,va.a,ma.a],i=["simpleNodeDiv","familyNodeDiv","complexNodeDiv","compartmentNodeDiv","processNodeDiv"];return this.props.isCollaborative?g.a.createElement("div",{id:"pathway-sidebar",className:"sideBarWrapper"},g.a.createElement(I.Panel,{className:"pnl"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Network"),g.a.createElement(I.Panel.Body,{className:"pnl-body pathwayPanel"},g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.handleOpen(Ma.PW_DETAILS)}},"Properties")),g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.upload()}},"Import")),g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.export(!1)}},"Export")))),g.a.createElement(I.Panel,{className:"pnl"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Node Palette"),g.a.createElement(I.Panel.Body,{className:"pnl-body"},i.map((function(t){return g.a.createElement("div",{key:t,id:t,"data-tip":"Click on this and drag to the location on drawing canvas and release!","data-effect":"solid","data-place":"bottom","data-delay-show":"1000",className:"dragButtonContainer"})})))),g.a.createElement(I.Panel,{className:"pnl edgePanel"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Interaction Palette"),g.a.createElement(I.Panel.Body,{className:"pnl-body edgePaletteWrapper"},g.a.createElement("div",{className:"list-group edge-palette"},e.map((function(e,i){return g.a.createElement("div",{key:i,"data-tip":"Click to activate; then, start the interaction from the little circle on the source node!","data-effect":"solid","data-place":"bottom","data-delay-show":"1000"},g.a.createElement("a",{style:{marginBottom:"5px"},className:"list-group-item "+(t.activeEdge===i?"active":""),onClick:function(){t.addEdge(i)},href:"#"},g.a.createElement("img",{style:{width:"30px"},className:"pull-left",src:a[i]})," ",e))}))))),g.a.createElement(I.Panel,{className:"pnl edgePanel"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},g.a.createElement("button",{className:"chatButton",onClick:function(){return t.openChat()},onSubmit:function(){return 3}},this.showChat?"Chat <<":"Chat >>")),g.a.createElement("div",{id:"chat-box",className:"chatBoxBorder"},g.a.createElement(za,{messages:this.props.messages,addMessage:this.props.addMessage,showChat:this.showChat,username:this.props.username,openChat:this.openChat,userId:this.props.userId})))):g.a.createElement("div",{id:"pathway-sidebar",className:"sideBarWrapper"},g.a.createElement(I.Panel,{className:"pnl"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Network"),g.a.createElement(I.Panel.Body,{className:"pnl-body pathwayPanel"},g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.handleOpen(Ma.PW_DETAILS)}},"Properties")),g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.upload()}},"Import")),g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.export(!1)}},"Export")))),g.a.createElement(I.Panel,{className:"pnl"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Node Palette"),g.a.createElement(I.Panel.Body,{className:"pnl-body"},i.map((function(t){return g.a.createElement("div",{key:t,id:t,"data-tip":"Click on this and drag to the location on drawing canvas and release!","data-effect":"solid","data-place":"bottom","data-delay-show":"1000",className:"dragButtonContainer"})})))),g.a.createElement(I.Panel,{className:"pnl edgePanel"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Interaction Palette"),g.a.createElement(I.Panel.Body,{className:"pnl-body edgePaletteWrapper"},g.a.createElement("div",{className:"list-group edge-palette"},e.map((function(e,i){return g.a.createElement("div",{key:i,"data-tip":"Click to activate; then, start the interaction from the little circle on the source node!","data-effect":"solid","data-place":"bottom","data-delay-show":"1000"},g.a.createElement("a",{style:{marginBottom:"5px"},className:"list-group-item "+(t.activeEdge===i?"active":""),onClick:function(){t.addEdge(i)},href:"#"},g.a.createElement("img",{style:{width:"30px"},className:"pull-left",src:a[i]})," ",e))}))))))}}),Ya([r.observable],e.prototype,"activeEdge",void 0),Ya([r.observable],e.prototype,"showChat",void 0),Ya([r.action.bound],e.prototype,"setActiveEdge",null),Ya([r.action.bound],e.prototype,"openChat",null),e=Ya([l.observer],e)}(g.a.Component),xa=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Ba=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Qa=a(80),ka=Qa();!function(t){t[t.STUDY=0]="STUDY",t[t.CONFIRMATION=1]="CONFIRMATION",t[t.PROFILES=2]="PROFILES",t[t.ABOUT=3]="ABOUT",t[t.PW_DETAILS=4]="PW_DETAILS",t[t.GRID=5]="GRID",t[t.HELP=6]="HELP",t[t.LAYOUT=7]="LAYOUT",t[t.CHELP=8]="CHELP",t[t.PROFILES_COLOR_SCHEME=9]="PROFILES_COLOR_SCHEME"}(Ma||(Ma={})),function(t){t[t.Count=0]="Count",t[t.Percentage=1]="Percentage",t[t.CountWithAlteration=2]="CountWithAlteration",t[t.PercentageWithAlteration=3]="PercentageWithAlteration"}(Aa||(Aa={}));var Wa=function(t){function e(e){var i=t.call(this,e)||this;return Object.defineProperty(i,"MAX_ALLOWED_PROFILES_ENABLED",{enumerable:!0,configurable:!0,writable:!0,value:6}),Object.defineProperty(i,"selectedPathway",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"fileManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"pathwayActions",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"isModalShown",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"colorValueMap",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"portalAccessor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"alterationData",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"patientData",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(i,"groupComparisonData",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(i,"pathwayGeneMap",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(i,"bestPathwaysAlgos",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(i,"userId",{enumerable:!0,configurable:!0,writable:!0,value:-1}),Object.defineProperty(i,"oldName",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(i,"profiles",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(i,"chatMessages",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(i,"chatMessagesCount",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"genes",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(i,"renderTimes",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(i,"currentRankingScheme",{enumerable:!0,configurable:!0,writable:!0,value:void 0!==i.props.rankingChoices?2*i.props.rankingChoices.isAlterationEnabled+i.props.rankingChoices.isPercentageMatch:0}),Object.defineProperty(i,"setActiveEdge",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"viewOperationsManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"gridOptionsManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(i),i.genes=i.props.genes,i.fileManager=new A,i.pathwayActions=new kt(i.pathwayHandler,i.profiles,i.fileManager,i.handleOpen,i.props.isCBioPortal,i.props.isCollaborative),i.selectedPathway="",i.props.pathwayName&&i.pathwayActions.changePathway(i.props.pathwayName),i.isModalShown=[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1],i.alterationData={},i.extractAllGenes(),i.colorValueMap={"-100":"#0000ff",0:"#ffffff",100:"#ff0000"},i.chatMessagesCount=0,i.userId=i.props.userId,i.props.isCBioPortal&&(i.props.cBioAlterationData&&(!0===i.props.patientView?(i.calculatePatientData(i.props.cBioAlterationData),i.addSampleIconData(i.props.sampleIconData)):!0===i.props.groupComparisonView?i.calculateGroupComparisonData():i.calculateAlterationData(i.props.cBioAlterationData)),i.props.addGenomicDataHandler&&i.props.addGenomicDataHandler(i.addGenomicData),i.profiles.push({profileId:a.CBIO_PROFILE_NAME,enabled:!0}),i.getBestPathway(Aa.Count),i.getBestPathway(Aa.Percentage),i.getBestPathway(Aa.CountWithAlteration),i.getBestPathway(Aa.PercentageWithAlteration)),i}var a;return xa(e,t),a=e,Object.defineProperty(e.prototype,"setColorMapping",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.colorValueMap=t,this.editor.updateGenomicDataColorScheme(this.colorValueMap)}}),Object.defineProperty(e.prototype,"setSelectedPathway",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedPathway=t}}),Object.defineProperty(e.prototype,"setEditor",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.editor=t}}),Object.defineProperty(e.prototype,"addProfile",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.profiles.push(t)}}),Object.defineProperty(e.prototype,"toggleProfileEnabled",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.profiles[t].enabled=!this.profiles[t].enabled}}),Object.defineProperty(e.prototype,"calculateAlterationData",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this;this.alterationData[a.CBIO_PROFILE_NAME]={},t.forEach((function(t){var i=t.altered/t.sequenced*100;e.alterationData[a.CBIO_PROFILE_NAME][t.gene]=Object.is(i,NaN)?-101:i}))}}),Object.defineProperty(e.prototype,"calculateGroupComparisonData",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;this.alterationData[a.CBIO_PROFILE_NAME]={},this.props.genomicData.forEach((function(e){t.groupComparisonData[e.hugoGeneSymbol]={},t.props.activeGroups.forEach((function(a){t.groupComparisonData[e.hugoGeneSymbol][a.nameWithOrdinal]=e.groupsSet[a.nameWithOrdinal].alteredPercentage}))}))}}),Object.defineProperty(e.prototype,"calculatePatientData",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this;this.alterationData[a.CBIO_PROFILE_NAME]={};var i=t.map((function(t){return t.gene})).filter((function(t,e,a){return a.indexOf(t)==e}));this.patientData.PatientView=1,i.forEach((function(t){e.patientData[t]={}})),t.forEach((function(t){var i=t.altered/t.sequenced*100;e.alterationData[a.CBIO_PROFILE_NAME][t.gene]=Object.is(i,NaN)?-101:i,e.patientData[t.gene][t.percentAltered]=Object.is(i,NaN)?-101:i,e.patientData[t.gene].geneticTrackData=t.geneticTrackData,e.patientData[t.gene].geneticTrackRuleSetParams=t.geneticTrackRuleSetParams}))}}),Object.defineProperty(e.prototype,"simplifyDate",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e=0,a="",i=0;i=0;i--)e+=a*this.convertCharacter(t.charAt(i)),a*=10;return e}}),Object.defineProperty(e.prototype,"addChatMessage",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.editor.addNewMessage(t,this.chatMessagesCount),this.editor.incrementMessageCount()}}),Object.defineProperty(e.prototype,"updatePathwayTitleCallback",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.pathwayActions.changePathwayTitle(t)}}),Object.defineProperty(e.prototype,"addSampleIconData",{enumerable:!1,configurable:!0,writable:!0,value:function(t){t&&(this.patientData.sampleColors=t.sampleColors,this.patientData.sampleIndex=t.sampleIndex)}}),Object.defineProperty(e.prototype,"getGeneStudyMap",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e={},a=0,i=Object.keys(t);a0;){var g=ka.extractMax();c=g.getValue().pathwayName;n.push({score:g.getKey(),genesMatched:o[c],pathwayName:c})}return n}}),Object.defineProperty(e.prototype,"getBestPathway",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this.getBestPathways(t);this.bestPathwaysAlgos.length===this.currentRankingScheme&&void 0!==this.props.currentPathway&&""===this.props.currentPathway?this.setSelectedPathway(e[0].pathwayName):this.bestPathwaysAlgos.length===this.currentRankingScheme&&void 0!==this.props.currentPathway&&this.props.currentPathway.length>0?this.setSelectedPathway(this.props.currentPathway):this.bestPathwaysAlgos.length===this.currentRankingScheme&&this.setSelectedPathway(e[0].pathwayName),this.bestPathwaysAlgos.push(e)}}),Object.defineProperty(e.prototype,"getBestPathwayReRank",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this.getBestPathways(t);this.bestPathwaysAlgos.push(e)}}),Object.defineProperty(e.prototype,"includePathway",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){for(var a={},i=0,o=t.nodes;i1&&!0===this.props.groupComparisonView&&this.props.genes!==this.genes&&this.rankPathways(),this.renderTimes++;var a=g.a.createElement(Na,{profiles:this.profiles,isCbioPortal:this.props.isCBioPortal,isCollaborative:this.props.isCollaborative,setActiveEdge:this.setActiveEdge,editorHandler:this.editorHandler,selectedPathway:this.selectedPathway,pathwayHandler:this.pathwayHandler,handleOpen:this.handleOpen,onPathwayChangeCompleted:this.emphasizeQueryGenes,genomicDataOverlayColorScheme:this.colorValueMap,colorSchemeChangeCallback:this.colorSchemeChangeCallback,incrementChatMessageCountCallback:this.incrementChatMessageCountCallback,newMessageCallback:this.newMessageCallback,updatePathwayTitleCallback:this.updatePathwayTitleCallback});return g.a.createElement("div",{className:"pathwayMapper"},g.a.createElement("div",{style:e?{width:.99*window.innerWidth}:{},className:e?"cBioMode container":"customMargins"},!e&&g.a.createElement(g.a.Fragment,null,g.a.createElement("div",null,g.a.createElement(ba,{pathwayActions:this.pathwayActions,handleOpen:this.handleOpen,setActiveEdge:this.setActiveEdge})),g.a.createElement("div",null,g.a.createElement(Pe,{pathwayActions:this.pathwayActions,handleOpen:this.handleOpen}))),e&&g.a.createElement(I.Row,{style:{marginBottom:"6px"}},g.a.createElement(I.Col,{xs:2,style:{paddingRight:"0px",marginBottom:"5px"}},g.a.createElement(Bt,{pathwayActions:this.pathwayActions,selectedPathway:this.selectedPathway,alterationData:this.alterationData,genes:this.props.genes,handleOpen:this.handleOpen,validGenes:this.props.validGenes,showMessage:this.props.showMessage,pathwayGenes:Object.keys(this.pathwayGeneMap[this.selectedPathway]),onAddGenes:this.props.onAddGenes,patientView:this.props.patientView})),this.props.messageBanner?g.a.createElement(I.Col,{xs:4,style:{maxHeight:"32px",paddingRight:"0px"}},this.props.messageBanner()):g.a.createElement(I.Col,{xs:4,style:{maxHeight:"32px",paddingRight:"0px"}}),g.a.createElement(I.Col,{xs:3,style:{paddingLeft:"0px",marginTop:"12px",textAlign:"right",paddingRight:"25px"}},this.selectedPathway)),g.a.createElement("div",{className:e?"row":"mainContentWrapper"},!e&&g.a.createElement("div",null,g.a.createElement(Ra,{pathwayActions:this.pathwayActions,setActiveEdgeHandler:this.setActiveEdgeHandler,handleOpen:this.handleOpen,messages:this.chatMessages,addMessage:this.addMessage,username:this.props.userName,userId:this.userId,isCollaborative:this.props.isCollaborative})),e?g.a.createElement(I.Col,{xs:9},a,g.a.createElement("div",{style:{paddingRight:"9px",textAlign:"right",fontSize:"13px"}},"Powered by ",g.a.createElement("a",{href:"https://github.com/iVis-at-Bilkent/pathway-mapper",target:"_blank"},"PathwayMapper"))):a,e&&g.a.createElement(I.Col,{xs:3,style:{paddingLeft:"0px"}},g.a.createElement(St,{pathwayActions:this.pathwayActions,bestPathwaysAlgos:this.bestPathwaysAlgos,tableComponent:this.props.tableComponent,patientView:this.props.patientView,currentPathway:this.props.currentPathway,rankingChoices:this.props.rankingChoices,updateRankingChoices:this.props.updateRankingChoices}))),g.a.createElement("div",{id:"invisibles"},g.a.createElement("div",{id:"pm-modals"},g.a.createElement(mt,{profiles:this.profiles,editor:this.editor,show:this.isModalShown[Ma.PROFILES],handleClose:this.handleClose,handleProfileLabelClicked:this.toggleProfileEnabled,enabledProfileCountLimit:this.MAX_ALLOWED_PROFILES_ENABLED}),g.a.createElement(Nt,{show:this.isModalShown[Ma.PW_DETAILS],handleClose:this.handleClose,pathwayActions:this.pathwayActions}),g.a.createElement(K,{show:this.isModalShown[Ma.GRID],handleClose:this.handleClose,pathwayActions:this.pathwayActions}),g.a.createElement(jt,{show:this.isModalShown[Ma.HELP],handleClose:this.handleClose}),g.a.createElement(dt,{show:this.isModalShown[Ma.LAYOUT],handleClose:this.handleClose,pathwayActions:this.pathwayActions}),g.a.createElement(H,{show:this.isModalShown[Ma.CONFIRMATION],handleClose:this.handleClose}),g.a.createElement(k,{show:this.isModalShown[Ma.CHELP],handleClose:this.handleClose,patientView:this.props.patientView}),g.a.createElement(E,{show:this.isModalShown[Ma.ABOUT],handleClose:this.handleClose}),g.a.createElement(yt,{show:this.isModalShown[Ma.PROFILES_COLOR_SCHEME],handleClose:this.handleClose,colorValueMapping:this.colorValueMap,handleColorMappingChange:this.setColorMapping})),!this.props.isCBioPortal&&g.a.createElement(g.a.Fragment,null,g.a.createElement(Lt,{show:this.isModalShown[Ma.STUDY],loadFromCBio:this.loadFromCBio,handleClose:this.handleClose}),g.a.createElement(s.ToastContainer,{position:"bottom-left",autoClose:5e3,hideProgressBar:!1,newestOnTop:!1,closeOnClick:!0,rtl:!1,pauseOnFocusLoss:!0,draggable:!0,pauseOnHover:!0})),g.a.createElement(u.a,{clickable:!0,className:e?"":"pmTip",style:{maxWidth:"350px",zIndex:9999999}}),g.a.createElement("input",{id:"myInput",type:"file",ref:function(e){t.pathwayActions.setUploaders(e,!1)},style:{display:"none"},onChange:function(e){t.pathwayActions.onChangeFile(e,!1)}}),g.a.createElement("input",{id:"myInput2",type:"file",ref:function(e){t.pathwayActions.setUploaders(e,!0)},style:{display:"none"},onChange:function(e){t.pathwayActions.onChangeFile(e,!0)}}),g.a.createElement("input",{id:"myInput3",type:"file",ref:function(e){t.pathwayActions.setOverlayUploader(e)},style:{display:"none"},onChange:function(e){t.pathwayActions.overlayFromText(e.target.files[0])}}))))}}),Object.defineProperty(e.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.props.isCBioPortal?this.pathwayActions.emphasizeQueryGenes(this.props.genes.map((function(t){return t.hugoGeneSymbol}))):($(".container").css("width","auto"),$(".container").css("paddingLeft",0),$(".container").css("marginLeft",5))}}),Object.defineProperty(e.prototype,"componentDidUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.props.isCBioPortal&&this.pathwayActions.emphasizeQueryGenes(this.props.genes.map((function(t){return t.hugoGeneSymbol})))}}),Object.defineProperty(e.prototype,"handleOpen",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.isModalShown[t]=!0}}),Object.defineProperty(e.prototype,"handleClose",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.isModalShown[t]=!1}}),Object.defineProperty(e.prototype,"editorHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a){this.setEditor(t),this.gridOptionsManager=new h(this.editor.cy),this.viewOperationsManager=new D(this.editor,this.editor.cy),this.pathwayActions.editorHandler(t,e,a,this.viewOperationsManager,this.gridOptionsManager),this.props.isCBioPortal?this.props.patientView?this.editor.addPortalGenomicData(this.patientData,this.editor.getEmptyGroupID()):!0===this.props.groupComparisonView?this.editor.addPortalGenomicData(this.groupComparisonData,this.editor.getEmptyGroupID(),this.props.activeGroups):this.editor.addPortalGenomicData(this.alterationData,this.editor.getEmptyGroupID()):(this.portalAccessor=new wt,this.loadRedirectedPortalData())}}),Object.defineProperty(e.prototype,"pathwayHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this;this.setSelectedPathway(t),this.pathwayGeneMap[t]&&this.props.changePathwayHandler&&this.props.changePathwayHandler(Object.keys(this.pathwayGeneMap[t]).filter((function(t){return!e.alterationData[a.CBIO_PROFILE_NAME].hasOwnProperty(t)})))}}),Object.defineProperty(e,"CBIO_PROFILE_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"cBioPortal_data"}),Ba([r.observable],e.prototype,"selectedPathway",void 0),Ba([r.observable],e.prototype,"editor",void 0),Ba([r.observable],e.prototype,"isModalShown",void 0),Ba([r.observable],e.prototype,"colorValueMap",void 0),Ba([r.observable],e.prototype,"alterationData",void 0),Ba([r.observable],e.prototype,"patientData",void 0),Ba([r.observable],e.prototype,"groupComparisonData",void 0),Ba([r.observable],e.prototype,"pathwayGeneMap",void 0),Ba([r.observable],e.prototype,"bestPathwaysAlgos",void 0),Ba([r.observable],e.prototype,"userId",void 0),Ba([r.observable],e.prototype,"oldName",void 0),Ba([r.observable],e.prototype,"profiles",void 0),Ba([r.observable],e.prototype,"chatMessages",void 0),Ba([r.observable],e.prototype,"chatMessagesCount",void 0),Ba([r.action.bound],e.prototype,"setColorMapping",null),Ba([r.action],e.prototype,"setSelectedPathway",null),Ba([r.action],e.prototype,"setEditor",null),Ba([r.action],e.prototype,"addProfile",null),Ba([r.action],e.prototype,"toggleProfileEnabled",null),Ba([r.action.bound],e.prototype,"addMessage",null),Ba([r.action.bound],e.prototype,"addChatMessage",null),Ba([n.a],e.prototype,"includePathway",null),Ba([n.a],e.prototype,"getCountOfEnabledProfiles",null),Ba([n.a],e.prototype,"loadFromCBio",null),Ba([n.a],e.prototype,"setActiveEdgeHandler",null),Ba([n.a],e.prototype,"colorSchemeChangeCallback",null),Ba([n.a],e.prototype,"incrementChatMessageCountCallback",null),Ba([n.a],e.prototype,"newMessageCallback",null),Ba([n.a],e.prototype,"addGenomicData",null),Ba([n.a],e.prototype,"emphasizeQueryGenes",null),Ba([r.action.bound],e.prototype,"handleOpen",null),Ba([r.action.bound],e.prototype,"handleClose",null),Ba([n.a],e.prototype,"editorHandler",null),Ba([n.a],e.prototype,"pathwayHandler",null),e=a=Ba([l.observer],e)}(g.a.Component);e.default=Wa}]); +module.exports=function(t){var e={};function a(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,a),o.l=!0,o.exports}return a.m=t,a.c=e,a.d=function(t,e,i){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(a.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)a.d(i,o,function(e){return t[e]}.bind(null,o));return i},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,"a",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p="",a(a.s=81)}([function(t,e){t.exports=require("react")},function(t,e){t.exports=require("react-bootstrap")},function(t,e){t.exports=require("mobx")},function(t,e){t.exports=require("autobind-decorator")},function(t,e){t.exports=require("jquery")},function(t,e){t.exports=require("mobx-react")},function(t,e){t.exports=require("lodash")},function(t,e){t.exports=require("cytoscape")},function(t){t.exports=JSON.parse('{"ACC-2016-TP53-RB-pathway":["ACC-2016-TP53-RB-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDK4\\twyMGXBw8cUj6\\tGENE\\t-1\\t262\\t231\\t","RB1\\tLrJe2ktmcVzK\\tGENE\\t-1\\t262\\t340\\t","CDKN2A\\tN18olkvEcUJu\\tGENE\\t-1\\t387\\t127\\t","TP53\\t-VLZ5keBcXa3\\tGENE\\t-1\\t488\\t340\\t","MDM2\\t79evo3OUcVFA\\tGENE\\t-1\\t488\\t231\\t","CCNE1\\t-le5m2j6cWa2\\tGENE\\t-1\\t80\\t340\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","d3auWK_1cit5\\t79evo3OUcVFA\\t-VLZ5keBcXa3\\tINHIBITS","w4Yp60k9chhi\\tN18olkvEcUJu\\t79evo3OUcVFA\\tINHIBITS","XhRgnqAscgwV\\tN18olkvEcUJu\\twyMGXBw8cUj6\\tINHIBITS","0E_Xe1cUckq-\\twyMGXBw8cUj6\\tLrJe2ktmcVzK\\tINHIBITS","K9h1lRMzclc1\\t-le5m2j6cWa2\\tLrJe2ktmcVzK\\tINHIBITS"],"ACC-2016-WNT-signaling-pathway":["ACC-2016-WNT-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CTNNB1\\taS-MtgKvdBTI\\tGENE\\t-1\\t396\\t371\\t","MEN1\\tWoDJQ15LdCGw\\tGENE\\t-1\\t615\\t371\\t","APC\\tquRewaVqdAAg\\tGENE\\t-1\\t396\\t277\\t","WNT\\tg2oPjTN1c_MF\\tFAMILY\\t-1\\t396\\t183\\t","ZNRF3\\tD1VT3C7Tc9uz\\tGENE\\t-1\\t396\\t87\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","mcDc9E8ddKPh\\tWoDJQ15LdCGw\\taS-MtgKvdBTI\\tINHIBITS","xhr-qCdhdMnS\\tg2oPjTN1c_MF\\tquRewaVqdAAg\\tINHIBITS","MRNaHfmqdLIB\\tquRewaVqdAAg\\taS-MtgKvdBTI\\tINHIBITS","V58DLRlddN04\\tD1VT3C7Tc9uz\\tg2oPjTN1c_MF\\tINHIBITS"],"BLCA-2014-Histone-modification-pathway":["BLCA-2014-Histone-modification-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","KDM1A\\tibAwJma20izY\\tGENE\\t-1\\t330\\t280\\t","K9 (Ac, me1-3)\\tUdMq7kedz9FO\\tPROCESS\\t-1\\t441\\t185\\t","K4 (me1-3)\\t6Itl25k-0F3S\\tPROCESS\\t-1\\t214\\t185\\t","KDM6B\\tKGmluEtPHXqp\\tGENE\\t_aOp5kW01GfD\\t685\\t332\\t","KDM4B\\t5_51HfxoHY9n\\tGENE\\tWWAQi_-h1FbJ\\t500\\t329\\t","H3\\t_L15u0RJ0Eq5\\tPROCESS\\t-1\\t1128\\t185\\t","K36 (me1-3)\\tyE8mFlUU0AcJ\\tPROCESS\\t-1\\t785\\t185\\t","KDM1B\\tf-uYX8eW0o-j\\tGENE\\t-1\\t330\\t338\\t","K27 (Ac, me1-3)\\tqU2DuUfoz_fU\\tPROCESS\\t-1\\t612\\t185\\t","K79 (me1-3)\\tsGOXj0dB0CoY\\tPROCESS\\t-1\\t945\\t185\\t","KDM4A\\tZN4FWAEl0yGP\\tGENE\\t-1\\t859\\t280\\t","KDM5B\\t2NfOJGRNHYQB\\tGENE\\tNnEeq-Df1E_j\\t151\\t333\\t","KDM4A\\tw2_Nlv2xHY9d\\tGENE\\tWWAQi_-h1FbJ\\t500\\t280\\t","Demethylases\\tHX269Het1CgI\\tPROCESS\\t-1\\t1107\\t280\\t","KDM4A-KDM4B\\tWWAQi_-h1FbJ\\tCOMPARTMENT\\t-1\\t500\\t304\\t","KDM5A-KDM5B\\tNnEeq-Df1E_j\\tCOMPARTMENT\\t-1\\t151\\t306\\t","KDM6A\\ttsbexFtHHXqU\\tGENE\\t_aOp5kW01GfD\\t685\\t280\\t","KDM5A\\tZGtryZF-HYPy\\tGENE\\tNnEeq-Df1E_j\\t151\\t280\\t","KDM6A-KDM6B\\t_aOp5kW01GfD\\tCOMPARTMENT\\t-1\\t685\\t306\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","QFzccFLP1rXn\\tUdMq7kedz9FO\\tqU2DuUfoz_fU\\tBINDS","1iLfbX2611ie\\tsGOXj0dB0CoY\\t_L15u0RJ0Eq5\\tBINDS","KtQPDuFH2B4M\\tNnEeq-Df1E_j\\t6Itl25k-0F3S\\tACTIVATES","1ufB4tsp2MbY\\tZN4FWAEl0yGP\\tyE8mFlUU0AcJ\\tACTIVATES","F6Hoq3VR2Fbi\\tibAwJma20izY\\t6Itl25k-0F3S\\tACTIVATES","c5Dw1pvh2GJ7\\tibAwJma20izY\\tUdMq7kedz9FO\\tACTIVATES","B85D8ro61xLn\\tyE8mFlUU0AcJ\\tsGOXj0dB0CoY\\tBINDS","e_aGaIGw1pWA\\t6Itl25k-0F3S\\tUdMq7kedz9FO\\tBINDS","EVjpyavJ2DfI\\tf-uYX8eW0o-j\\t6Itl25k-0F3S\\tACTIVATES","f0P9R0dZ2J5O\\t_aOp5kW01GfD\\tqU2DuUfoz_fU\\tACTIVATES","g_eFQ6zG2Hu-\\tWWAQi_-h1FbJ\\tUdMq7kedz9FO\\tACTIVATES","T1GuzceK1uZK\\tqU2DuUfoz_fU\\tyE8mFlUU0AcJ\\tBINDS"],"BLCA-2014-RTK-RAS-PI(3)K-pathway":["BLCA-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","ERBB2\\taqgx5yiY4na1\\tGENE\\tG_Vyif7SpoW2\\t584\\t98\\t","NRAS\\tAbEoLGCY4sp9\\tGENE\\tydhBmSAbpTKc\\t476\\t183\\t","TSC2\\tUD1lE2yO48n8\\tGENE\\t2_7tyoaRphSY\\t503\\t496\\t","PIK3CA\\ts5486n5gpU_K\\tGENE\\t-1\\t658\\t184\\t","PTEN\\ttiSgM3o0pX_z\\tGENE\\t-1\\t860\\t184\\t","FGFR3\\t5yUJdgCL4naU\\tGENE\\tG_Vyif7SpoW2\\t272\\t98\\t","Survival\\tt8b0oOIypis0\\tPROCESS\\t-1\\t791\\t584\\t","HRAS\\tLtxngbVT4spa\\tGENE\\tydhBmSAbpTKc\\t322\\t183\\t","RAS\\tG_Vyif7SpoW2\\tFAMILY\\t-1\\t506\\t98\\t","STK11\\t8wk4zb43pfsu\\tGENE\\t-1\\t317\\t469\\t","INPP4B\\tlGy7ILYwpZag\\tGENE\\t-1\\t804\\t266\\t","MTOR\\tVyT8z_EcpexB\\tGENE\\t-1\\t722\\t470\\t","TSC\\t2_7tyoaRphSY\\tFAMILY\\t-1\\t503\\t470\\t","Proliferation\\t1PYLl_CZpjUH\\tPROCESS\\t-1\\t665\\t584\\t","EGFR\\tMO1TWgRb4nbC\\tGENE\\tG_Vyif7SpoW2\\t429\\t98\\t","RAS\\tydhBmSAbpTKc\\tFAMILY\\t-1\\t399\\t183\\t","AKT\\tEuvUiqD6pbqL\\tGENE\\t-1\\t659\\t349\\t","TSC1\\tlj3YtBzu48oT\\tGENE\\t2_7tyoaRphSY\\t503\\t444\\t","ERBB3\\tSUuAzaJ-4nar\\tGENE\\tG_Vyif7SpoW2\\t739\\t98\\t","NF1\\tevdrZPc3pW-g\\tGENE\\t-1\\t399\\t270\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","arJi2bQrqEdS\\tevdrZPc3pW-g\\tydhBmSAbpTKc\\tINHIBITS","F1IgAgZPppxS\\tG_Vyif7SpoW2\\tydhBmSAbpTKc\\tACTIVATES","OqD_HmKHqQIw\\tEuvUiqD6pbqL\\t2_7tyoaRphSY\\tINHIBITS","PY7KfKiCqL9D\\tlGy7ILYwpZag\\ts5486n5gpU_K\\tINHIBITS","0PkuH29SqKeN\\ttiSgM3o0pX_z\\ts5486n5gpU_K\\tINHIBITS","zNMzC5CMqORJ\\ts5486n5gpU_K\\tEuvUiqD6pbqL\\tACTIVATES","UB7BIf_SqRqo\\t2_7tyoaRphSY\\tVyT8z_EcpexB\\tINHIBITS","OQI-iqX2qTLl\\t8wk4zb43pfsu\\t2_7tyoaRphSY\\tACTIVATES","9Vm-zOAgqGbc\\tydhBmSAbpTKc\\ts5486n5gpU_K\\tACTIVATES","uN421vA1qaeA\\tVyT8z_EcpexB\\tt8b0oOIypis0\\tACTIVATES","ZTgU7FgfqZmN\\tVyT8z_EcpexB\\t1PYLl_CZpjUH\\tACTIVATES"],"BLCA-2014-TP53-RB-pathway":["BLCA-2014-TP53-RB-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Cell cycle progression\\tok7nDiB9oQJI\\tPROCESS\\t-1\\t414\\t436\\t","CCNE1\\thm8HJrbqoWfo\\tGENE\\t-1\\t414\\t353\\t","TP53\\tJYRUofjRoSmI\\tGENE\\t-1\\t605\\t179\\t","MDM2\\t2XKi6b0joGD_\\tGENE\\t-1\\t413\\t179\\t","E2F3\\tmz71J5tHoOtX\\tGENE\\t-1\\t219\\t436\\t","Apoptosis\\t4-9gyc8LoX1s\\tPROCESS\\t-1\\t689\\t264\\t","CDKN2A\\t9A-DhP0-oFUi\\tGENE\\t-1\\t219\\t179\\t","CCND1\\tCsMIDjOQoHLw\\tGENE\\t-1\\t219\\t264\\t","FBXW7\\tmULNbFKfoZFg\\tGENE\\t-1\\t625\\t353\\t","ATM\\tjsI1OPG9oTvl\\tGENE\\t-1\\t605\\t85\\t","CDKN1A\\tmBClqwIZoU7d\\tGENE\\t-1\\t526\\t264\\t","RB1\\t-ACCNJRfoNBI\\tFAMILY\\t-1\\t219\\t353\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","B1RLlLrEo4cn\\tmz71J5tHoOtX\\tok7nDiB9oQJI\\tACTIVATES","As7hIoBSo17y\\tCsMIDjOQoHLw\\t-ACCNJRfoNBI\\tINHIBITS","mjgKjVX6ow0m\\t2XKi6b0joGD_\\tJYRUofjRoSmI\\tINHIBITS","5BaXTZDuo7H8\\tmULNbFKfoZFg\\thm8HJrbqoWfo\\tINHIBITS","PMdhVppIoyDR\\tJYRUofjRoSmI\\tmBClqwIZoU7d\\tACTIVATES","w2p9WUJxo22X\\t-ACCNJRfoNBI\\tmz71J5tHoOtX\\tINHIBITS","0hmD92TIo0ux\\t9A-DhP0-oFUi\\tCsMIDjOQoHLw\\tINHIBITS","RfMPHF4FouzT\\tjsI1OPG9oTvl\\tJYRUofjRoSmI\\tACTIVATES","toSMm4K7owET\\tJYRUofjRoSmI\\t2XKi6b0joGD_\\tACTIVATES","LPb5J4Quo8EC\\tmBClqwIZoU7d\\thm8HJrbqoWfo\\tINHIBITS","_PGdKZ50o5vL\\thm8HJrbqoWfo\\t-ACCNJRfoNBI\\tINHIBITS","Vcmxazyaoz8N\\t9A-DhP0-oFUi\\t2XKi6b0joGD_\\tINHIBITS","sABkuA1_oywi\\tJYRUofjRoSmI\\t4-9gyc8LoX1s\\tACTIVATES"],"BRCA-2012-Cell-cycle-signaling-pathway":["BRCA-2012-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","BRCA2\\tVHmofL2iBtHB\\tGENE\\t9ZypvHQTebqG\\t302\\t521\\t","p53/p21\\tK8vhHZlJewmz\\tPROCESS\\t-1\\t16\\t368\\t","Cell-cycle arrest\\trsfgLtPJBro0\\tPROCESS\\tPve6lcOCerP2\\t518\\t505\\t","BRCA1\\tPqa6yIQ4BtGs\\tGENE\\t9ZypvHQTebqG\\t145\\t521\\t","ATM\\tTQqdq6ZHdybO\\tGENE\\t-1\\t-54\\t427\\t","S/G2/M checkpoints\\teokFGf8gBroW\\tPROCESS\\tPve6lcOCerP2\\t518\\t452\\t","S-phase entry\\tplt5oIp7Broo\\tPROCESS\\tPve6lcOCerP2\\t518\\t401\\t","Cell cycle\\tPve6lcOCerP2\\tFAMILY\\t-1\\t518\\t453\\t","RB1\\tCequZQzRd8SZ\\tGENE\\t-1\\t321\\t329\\t","BRCA\\t9ZypvHQTebqG\\tFAMILY\\t-1\\t223\\t521\\t","CCNE1\\tglg_i-QQdz9z\\tGENE\\t-1\\t133\\t329\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","GjwkZT93eu2S\\tCequZQzRd8SZ\\tPve6lcOCerP2\\tACTIVATES","vbkfiLK9etui\\t9ZypvHQTebqG\\tPve6lcOCerP2\\tACTIVATES","dQvMCZFxeWIc\\tglg_i-QQdz9z\\tCequZQzRd8SZ\\tINHIBITS","OyM7Rh_ueTR2\\tTQqdq6ZHdybO\\tglg_i-QQdz9z\\tINHIBITS","fcvz9ztueiRb\\tTQqdq6ZHdybO\\t9ZypvHQTebqG\\tACTIVATES"],"BRCA-2012-RTK-RAS-PI(3)K-pathway":["BRCA-2012-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PIK3R1\\tLTI-_zA12M8_\\tGENE\\tQl_rV6PWbR4f\\t561\\t293\\t","MAP3K1\\tV2U7rAinbMri\\tGENE\\t-1\\t803\\t220\\t","IKBKB\\tv5be8J7cbT7P\\tGENE\\t-1\\t812\\t416\\t","AKT1\\t2eyyNjOs2P7t\\tGENE\\tb8_iWiV3bSnI\\t738\\t293\\t","PI3K\\tQl_rV6PWbR4f\\tFAMILY\\t-1\\t481\\t293\\t","NF-kB\\tf-dza7Cyd34R\\tPROCESS\\t-1\\t940\\t406\\t","PTEN\\tvmp2PR9WbESK\\tGENE\\t-1\\t480\\t218\\t","Proliferation\\tQgBC5rX5baS9\\tPROCESS\\t-1\\t1277\\t416\\t","MAP2K4\\thDh8Gi4cbOJg\\tGENE\\t-1\\t1075\\t220\\t","ERBB2\\tkuccSffw2Nzs\\tGENE\\tTi_1UFukcA6d\\t205\\t220\\t","PIK3CA\\tj3qYklwW2M9a\\tGENE\\tQl_rV6PWbR4f\\t402\\t293\\t","AKT3\\tpH6LKha-2P8C\\tGENE\\tb8_iWiV3bSnI\\t897\\t293\\t","PAK1\\tVjIN5hOKbQmQ\\tGENE\\t-1\\t480\\t416\\t","AKT\\tb8_iWiV3bSnI\\tFAMILY\\t-1\\t818\\t293\\t","CCND1\\tPKgbIo4AbVyY\\tGENE\\t-1\\t1084\\t416\\t","RTK\\tTi_1UFukcA6d\\tFAMILY\\t-1\\t205\\t292\\t","JNK/JUN Mediated Apoptosis\\t-MmWzJ2DbXrO\\tPROCESS\\t-1\\t1300\\t211\\t","IGF1R\\tL4qe8zf82Nz8\\tGENE\\tTi_1UFukcA6d\\t205\\t293\\t","EGFR\\tq9k-_XR32Nze\\tGENE\\tTi_1UFukcA6d\\t205\\t364\\t","Evading apoptosis\\tg1G4oW6RbY6F\\tPROCESS\\t-1\\t1274\\t293\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","fhs_9IT6cUqw\\tb8_iWiV3bSnI\\tg1G4oW6RbY6F\\tACTIVATES","teIhB-fucGLJ\\tVjIN5hOKbQmQ\\tb8_iWiV3bSnI\\tACTIVATES","huxShVp3cIQO\\tQl_rV6PWbR4f\\tb8_iWiV3bSnI\\tACTIVATES","WtHX5Q0hcXDM\\tPKgbIo4AbVyY\\tQgBC5rX5baS9\\tACTIVATES","wAq3PQHjcaoH\\tb8_iWiV3bSnI\\tv5be8J7cbT7P\\tACTIVATES","HE2KQFFscPqE\\thDh8Gi4cbOJg\\tPKgbIo4AbVyY\\tACTIVATES","kzZuvBjdcQut\\tPKgbIo4AbVyY\\thDh8Gi4cbOJg\\tINHIBITS","R6qp66fdcDsp\\tTi_1UFukcA6d\\tQl_rV6PWbR4f\\tACTIVATES","8xgflgJ1cSju\\tv5be8J7cbT7P\\tPKgbIo4AbVyY\\tACTIVATES","i-Pphq4BcWBa\\tb8_iWiV3bSnI\\tQgBC5rX5baS9\\tACTIVATES","4s_OHeX4cTjW\\thDh8Gi4cbOJg\\t-MmWzJ2DbXrO\\tACTIVATES","fegnTqNPcJpy\\tV2U7rAinbMri\\thDh8Gi4cbOJg\\tACTIVATES","tj1nKgy9cExZ\\tvmp2PR9WbESK\\tQl_rV6PWbR4f\\tINHIBITS"],"BRCA-2012-TP53-pathway":["BRCA-2012-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TP53\\tAtC08ZQJc2KU\\tGENE\\t-1\\t491\\t349\\t","Apoptosis\\toHj1iu9Nc3_k\\tPROCESS\\t-1\\t491\\t453\\t","MDM4\\teUAyFKEv_rSt\\tGENE\\tY4IgKFahc81t\\t690\\t375\\t","MDM2\\tEDekyeJO_rSa\\tGENE\\tY4IgKFahc81t\\t690\\t319\\t","AKT1\\tnWtQqBkt_evA\\tGENE\\t-1\\t491\\t245\\t","CHEK2\\tEZw1mFjYc0Pb\\tGENE\\t-1\\t300\\t350\\t","MDM\\tY4IgKFahc81t\\tFAMILY\\t-1\\t690\\t347\\t","ATM\\tDEtr5Wpj_eup\\tGENE\\t-1\\t300\\t245\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","EQR_Azwj_evL\\tDEtr5Wpj_eup\\tEZw1mFjYc0Pb\\tACTIVATES","sV9ZEeJ9dMg3\\tY4IgKFahc81t\\tAtC08ZQJc2KU\\tINHIBITS","kudrU-U-_evP\\tnWtQqBkt_evA\\tAtC08ZQJc2KU\\tINHIBITS","hxwMi4kydOBT\\tAtC08ZQJc2KU\\toHj1iu9Nc3_k\\tACTIVATES","uh5qfjUjdKB7\\tEZw1mFjYc0Pb\\tAtC08ZQJc2KU\\tACTIVATES"],"Cell Cycle":["Cell Cycle","","Regulation of mitotic cell cycle progression involving a signaling cascade of cyclins and cyclin-dependent kinases as well as a number of regulatory checkpoints.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","MDM2\\txPwjUPwi3Y86\\tGENE\\t-1\\t413\\t179","CDKN1A\\tFQbPaPlV3Y9Q\\tGENE\\t-1\\t526\\t264","FBXW7\\t_Honmyd33Y9K\\tGENE\\t-1\\t625\\t353","CCND1\\tKf3hsGsT3Y9F\\tGENE\\t-1\\t219\\t264","Cell cycle progression\\tyazwmMvz3Y8y\\tPROCESS\\t-1\\t414\\t436","CCNE1\\t4-ZVTw8b3Y81\\tGENE\\t-1\\t414\\t353","Apoptosis\\tSwnDUEnB3Y8_\\tPROCESS\\t-1\\t689\\t264","RB1\\tAFGazwPj3Y9U\\tFAMILY\\t-1\\t219\\t353","E2F3\\tb7YoPaEx3Y88\\tGENE\\t-1\\t219\\t436","CDKN2A\\tE6EgzvEy3Y9C\\tGENE\\t-1\\t219\\t179","TP53\\tmIL53nP63Y83\\tGENE\\t-1\\t605\\t179","ATM\\t4fc8CUod3Y9N\\tGENE\\t-1\\t605\\t85","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","3H557euy3Y9b\\t_Honmyd33Y9K\\t4-ZVTw8b3Y81\\tINHIBITS\\t","rC-lNx0W3Y9d\\tAFGazwPj3Y9U\\tb7YoPaEx3Y88\\tINHIBITS\\t","Qm2ZEnCl3Y9Z\\tKf3hsGsT3Y9F\\tAFGazwPj3Y9U\\tINHIBITS\\t","pPO3_YVM3Y9e\\tE6EgzvEy3Y9C\\tKf3hsGsT3Y9F\\tINHIBITS\\t","pGNnucwd3Y9g\\tmIL53nP63Y83\\txPwjUPwi3Y86\\tACTIVATES\\t","ygTYWu2k3Y9k\\tE6EgzvEy3Y9C\\txPwjUPwi3Y86\\tINHIBITS\\t","tq-BTuks3Y9i\\tFQbPaPlV3Y9Q\\t4-ZVTw8b3Y81\\tINHIBITS\\t","HPSR11Er3Y9b\\tmIL53nP63Y83\\tFQbPaPlV3Y9Q\\tACTIVATES\\t","h7AyF28j3Y9n\\tmIL53nP63Y83\\tSwnDUEnB3Y8_\\tACTIVATES\\t","vYHEvpqL3Y9f\\t4fc8CUod3Y9N\\tmIL53nP63Y83\\tACTIVATES\\t","4ELiZPT23Y9j\\t4-ZVTw8b3Y81\\tAFGazwPj3Y9U\\tINHIBITS\\t","jDEpTZhK3Y9X\\tb7YoPaEx3Y88\\tyazwmMvz3Y8y\\tACTIVATES\\t","_gVnliZV3Y9a\\txPwjUPwi3Y86\\tmIL53nP63Y83\\tINHIBITS\\t"],"COADREAD-2012-RTK-RAS-PI(3)K-pathway":["COADREAD-2012-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","IRS2\\tZvdL-fZM3WuZ\\tGENE\\t-1\\t189\\t452\\t","PIK3CA\\tMBUXnNN2z5Dt\\tGENE\\taDGGPsUl3doC\\t189\\t525\\t","KRAS\\trKR_2SY2z0N3\\tGENE\\tD6EmJIZx6Gzg\\t555\\t462\\t","ERBB2\\tStF--npjzyS_\\tGENE\\tjs1qiakd6GP4\\t404\\t298\\t","IGF2\\tWv-EmNFT15yN\\tGENE\\t-1\\t189\\t298\\t","PI3K\\taDGGPsUl3doC\\tFAMILY\\t-1\\t110\\t526\\t","BRAF\\tPUJ8AKki53pG\\tGENE\\t-1\\t479\\t549\\t","NRAS\\t8s1jKwvjz0Nm\\tGENE\\tD6EmJIZx6Gzg\\t406\\t462\\t","Cell survival\\t1UmcnGh24P6f\\tPROCESS\\t-1\\t323\\t697\\t","ERBB3\\tdg3Vl9qGzyTZ\\tGENE\\tjs1qiakd6GP4\\t556\\t300\\t","IGF1R\\tcYzz8jlS2HaK\\tGENE\\t-1\\t189\\t380\\t","RAS\\tD6EmJIZx6Gzg\\tFAMILY\\t-1\\t480\\t462\\t","PIK3R1\\to9hOOpRM0I1T\\tGENE\\taDGGPsUl3doC\\t32\\t527\\t","RTK\\tjs1qiakd6GP4\\tFAMILY\\t-1\\t480\\t299\\t","Translation\\tRmlBMHs64SgD\\tPROCESS\\t-1\\t478\\t696\\t","Proliferation\\trlRx40Am4Oyw\\tPROCESS\\t-1\\t164\\t697\\t","PTEN\\ttSZugv-P3gVw\\tGENE\\t-1\\t29\\t452\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","6Shu_O4w4GqO\\tcYzz8jlS2HaK\\tZvdL-fZM3WuZ\\tACTIVATES","kgTzvfUL0djR\\tMBUXnNN2z5Dt\\tRmlBMHs64SgD\\tNONE","LrWZyqWL6OUk\\tD6EmJIZx6Gzg\\tPUJ8AKki53pG\\tACTIVATES","MIyPv49C6PmS\\tPUJ8AKki53pG\\trlRx40Am4Oyw\\tACTIVATES","6nSDsRMc6QPJ\\tPUJ8AKki53pG\\t1UmcnGh24P6f\\tACTIVATES","AQSQDQcZ0XWo\\tZvdL-fZM3WuZ\\tMBUXnNN2z5Dt\\tACTIVATES","ZfrWje290c1T\\tMBUXnNN2z5Dt\\t1UmcnGh24P6f\\tACTIVATES","_hzFGzTL6RE2\\tPUJ8AKki53pG\\tRmlBMHs64SgD\\tACTIVATES","bp_I0EHv0cD4\\tMBUXnNN2z5Dt\\trlRx40Am4Oyw\\tACTIVATES","PQG4E-ga6Mza\\tjs1qiakd6GP4\\tD6EmJIZx6Gzg\\tACTIVATES","NKPl8Kdr0I1e\\to9hOOpRM0I1T\\tMBUXnNN2z5Dt\\tINHIBITS","OoqtDBRI0V5J\\ttSZugv-P3gVw\\tMBUXnNN2z5Dt\\tINHIBITS","Vqm7Wl0M4AE0\\tWv-EmNFT15yN\\tcYzz8jlS2HaK\\tACTIVATES","09Csuz540e3h\\tMBUXnNN2z5Dt\\tRmlBMHs64SgD\\tACTIVATES"],"COADREAD-2012-TGF-B-signaling-pathway":["COADREAD-2012-TGF-B-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TGF-B\\tnTPdmpNKy_zW\\tGENE\\t-1\\t-38\\t-358\\t","ACVR2A\\t4qJ5NXmkEupe\\tGENE\\tRckLIrYUzEOc\\t278\\t-262\\t","TGFBR2\\t7GmKbJadEtyf\\tGENE\\t5i_MJPAPzCI1\\t44\\t-262\\t","ACTIVIN\\tZc2sWHBVzArX\\tGENE\\t-1\\t360\\t-358\\t","ACVR2A-ACVR1B\\tRckLIrYUzEOc\\tCOMPARTMENT\\t-1\\t360\\t-262\\t","SMAD\\t7j1T7wlqzcoy\\tFAMILY\\t-1\\t158\\t-86\\t","SMAD2\\tEgBC5uQzE1qC\\tGENE\\t7j1T7wlqzcoy\\t82\\t-117\\t","SMAD4\\tQuKCy3EaE1pk\\tGENE\\t7j1T7wlqzcoy\\t160\\t-55\\t","MYC\\tBIYl4Hkdzdoj\\tGENE\\t-1\\t-65\\t74\\t","TGFBR1-TGFBR2\\t5i_MJPAPzCI1\\tCOMPARTMENT\\t-1\\t-38\\t-262\\t","TGFBR1\\tjQFRXXNIEtyK\\tGENE\\t5i_MJPAPzCI1\\t-121\\t-262\\t","ACVR1B\\tRSw1VMOMEupS\\tGENE\\tRckLIrYUzEOc\\t443\\t-262\\t","SMAD3\\tx-JW3Hq6E1qN\\tGENE\\t7j1T7wlqzcoy\\t235\\t-117\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","2jvzewjJ0UDH\\t5i_MJPAPzCI1\\t7j1T7wlqzcoy\\tACTIVATES","X5m06a6REtyq\\tjQFRXXNIEtyK\\t7GmKbJadEtyf\\tBINDS","76dv_Epi0O5A\\tnTPdmpNKy_zW\\t5i_MJPAPzCI1\\tACTIVATES","RBUTTCdV0RK3\\tZc2sWHBVzArX\\tRckLIrYUzEOc\\tACTIVATES","4m5j1DYC0VIG\\tRckLIrYUzEOc\\t7j1T7wlqzcoy\\tACTIVATES","aVez8qmz0X7C\\t7j1T7wlqzcoy\\tBIYl4Hkdzdoj\\tINHIBITS","dMNeGuPcEupl\\t4qJ5NXmkEupe\\tRSw1VMOMEupS\\tBINDS"],"COADREAD-2012-TP53-pathway":["COADREAD-2012-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Proliferation\\tFD2DCZc_8Eck\\tPROCESS\\t-1\\t569\\t199\\t","TP53\\t2LzUgOci77hf\\tGENE\\t-1\\t386\\t239\\t","DNA replication stress\\teArivqeT78y7\\tPROCESS\\t-1\\t204\\t145\\t","ATM\\tB4xPctkP764L\\tGENE\\t-1\\t386\\t145\\t","Oncogenic stress\\tR-scgH-q793l\\tPROCESS\\t-1\\t204\\t239\\t","Cell survival\\tltgdAJkI8Hs-\\tPROCESS\\t-1\\t569\\t266\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","igOuMrr-QXvV\\tR-scgH-q793l\\t2LzUgOci77hf\\tACTIVATES","WlE3wQIvQdms\\t2LzUgOci77hf\\tltgdAJkI8Hs-\\tINHIBITS","nfX2BMaKQcgf\\t2LzUgOci77hf\\tFD2DCZc_8Eck\\tINHIBITS","gVpKeF6ZQW1o\\teArivqeT78y7\\tB4xPctkP764L\\tACTIVATES","KXWREHzWQaXR\\tB4xPctkP764L\\t2LzUgOci77hf\\tACTIVATES"],"COADREAD-2012-WNT-signaling-pathway":["COADREAD-2012-WNT-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Proliferation, stem/progenitor phenotype\\tbl6HjsSUV6cV\\tPROCESS\\t-1\\t1030\\t629\\t","DKK3\\tGFrq4NgHEGRM\\tGENE\\tg331vTgZWK6e\\t255\\t154\\t","TCF7L2\\tfah7MVZYUjS9\\tGENE\\t-1\\t462\\t456\\t","DKK\\tg331vTgZWK6e\\tFAMILY\\t-1\\t333\\t125\\t","TCF7\\t6tzFiifNEEEJ\\tGENE\\t61GfHXD5WEXh\\t682\\t571\\t","DKK4\\tRAXuusnwEGQo\\tGENE\\tg331vTgZWK6e\\t411\\t154\\t","CTNNB1\\tEmU8OBXdUMCO\\tGENE\\t-1\\t682\\t392\\t","DKK1\\tUE5vCnmWEGQ6\\tGENE\\tg331vTgZWK6e\\t255\\t96\\t","CTNNB1-TCF7\\t61GfHXD5WEXh\\tCOMPARTMENT\\t-1\\t682\\t539\\t","AXIN2\\tH8L_66uLUHPT\\tGENE\\t-1\\t682\\t312\\t","FAM123B\\tXwg-_Y4_UGRt\\tGENE\\t-1\\t525\\t312\\t","APC\\txIqHk3KBUIjc\\tGENE\\t-1\\t838\\t312\\t","ARID1A\\th0U_424iUWu5\\tGENE\\t-1\\t1030\\t456\\t","CTNNB1\\tKZpYtS9vEEEm\\tGENE\\t61GfHXD5WEXh\\t682\\t507\\t","FZD10\\tP1FIiIlqEFL_\\tGENE\\tT5QZmrnYWA-N\\t762\\t199\\t","LRP5\\twGjsVLW4EFLn\\tGENE\\tT5QZmrnYWA-N\\t600\\t199\\t","WNT\\tcFdN3nQcTwwO\\tGENE\\t-1\\t682\\t47\\t","MYC\\t4hScAPjlUSym\\tGENE\\t-1\\t1030\\t535\\t","DKK2\\tzOVzq_6jEGRb\\tGENE\\tg331vTgZWK6e\\t411\\t96\\t","LRP5-FZD10\\tT5QZmrnYWA-N\\tCOMPARTMENT\\t-1\\t681\\t199\\t","FBXW7\\tbXlgw4GKUVh3\\tGENE\\t-1\\t862\\t456\\t","SOX9\\tPOzVx5kyURM7\\tGENE\\t-1\\t459\\t550\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","j9mmGRLjHKlo\\tEmU8OBXdUMCO\\t61GfHXD5WEXh\\tACTIVATES","f_sY8_lUHUPL\\t61GfHXD5WEXh\\t4hScAPjlUSym\\tINDUCES","esOZ1gJeWfDK\\tT5QZmrnYWA-N\\txIqHk3KBUIjc\\tINHIBITS","ADfnqwAaHX4H\\t4hScAPjlUSym\\tbl6HjsSUV6cV\\tACTIVATES","42Liap6TWjUw\\txIqHk3KBUIjc\\tEmU8OBXdUMCO\\tINHIBITS","Gi2m7VhSWdIe\\tT5QZmrnYWA-N\\tXwg-_Y4_UGRt\\tINHIBITS","hDuqU9RREFMQ\\twGjsVLW4EFLn\\tP1FIiIlqEFL_\\tBINDS","6Rn05rJaWhts\\tXwg-_Y4_UGRt\\tEmU8OBXdUMCO\\tINHIBITS","Rmg0swQ7HQ4z\\t61GfHXD5WEXh\\tPOzVx5kyURM7\\tREPRESSES","dYBVjbKCWM3N\\tg331vTgZWK6e\\tT5QZmrnYWA-N\\tINHIBITS","Z4VdiqohHMM_\\tfah7MVZYUjS9\\t61GfHXD5WEXh\\tINHIBITS","p11d6T2rHOIN\\tbXlgw4GKUVh3\\t61GfHXD5WEXh\\tINHIBITS","l1NcyeMdWigH\\tH8L_66uLUHPT\\tEmU8OBXdUMCO\\tINHIBITS","cdUCacfNHR1f\\tPOzVx5kyURM7\\t61GfHXD5WEXh\\tINHIBITS","IlOH9qIEHVc_\\tbXlgw4GKUVh3\\t4hScAPjlUSym\\tINHIBITS","kvbDlRZ2EEEx\\tKZpYtS9vEEEm\\t6tzFiifNEEEJ\\tBINDS","MUhUjbP3Wa2w\\tg331vTgZWK6e\\tcFdN3nQcTwwO\\tINHIBITS","2OZGWP_oWeBV\\tT5QZmrnYWA-N\\tH8L_66uLUHPT\\tINHIBITS","_xkBTQ9sHWYw\\th0U_424iUWu5\\t4hScAPjlUSym\\tREPRESSES","Af3sU0_EWJva\\tcFdN3nQcTwwO\\tT5QZmrnYWA-N\\tACTIVATES"],"ESAD-2017-Cell-cycle-pathway":["ESAD-2017-Cell-cycle-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDKN2A\\t0b0592b4-4330-47c9-9a88-7d8c7940a680\\tGENE\\t-1\\t219\\t205\\t","CYCLINS\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\tFAMILY\\t-1\\t612\\t205\\t","RB1\\t362e59dd-fb26-4d70-8a5e-357b38ed5e4b\\tGENE\\t-1\\t986\\t205\\t","CCNE1\\t65337ed5-11c6-4a91-a177-14c9c0fb42df\\tGENE\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t454\\t205\\t","CCND1\\ta3661efd-abce-474e-ab02-f2eb355d2487\\tGENE\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t613\\t205\\t","CDK6\\t4ad57397-dfc1-4efc-91fa-be799f5b885d\\tGENE\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t770\\t205\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","2c47aaf9-8ddc-4097-bc51-716d7dce4cb9\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\t362e59dd-fb26-4d70-8a5e-357b38ed5e4b\\tINHIBITS","67638113-dece-48c9-8982-3e420e681508\\t0b0592b4-4330-47c9-9a88-7d8c7940a680\\tbfd14661-8f74-45d0-aec4-eff4de124c14\\tINHIBITS"],"ESAD-2017-RTK-RAS-PI(3)K-pathway":["ESAD-2017-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PIK3R1\\t51f0d970-2e2b-47e2-90bd-0d0d881d70ed\\tGENE\\t-1\\t1056\\t335\\t","PTEN\\t8214d1b9-75ba-4fbb-86d2-fe45dd392767\\tGENE\\t-1\\t778\\t335\\t","PIK3CA\\t49a250be-042c-4910-9774-802dfb0e08f3\\tGENE\\t-1\\t918\\t227\\t","KRAS\\tbea46283-55f2-4650-acee-58d23d8c11fc\\tGENE\\t-1\\t358\\t227\\t","MYC\\tb33f6617-57e5-4e3a-bd28-6ff114d96321\\tGENE\\t-1\\t1256\\t227\\t","RTK\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\tFAMILY\\t-1\\t673\\t130\\t","MET\\t82180331-e6f8-4487-9c6c-1c898cb05cf1\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t595\\t130\\t","IGF1R\\te7741571-a281-4b1d-ab5f-1e6d22cd3cf7\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t754\\t130\\t","RTK\\t230ace17-b770-4cc8-8d00-55c2a2075c3e\\tFAMILY\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t1075\\t130\\t","FGFR1\\tfb4252b0-5bfd-495d-99bc-c7143789403c\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t914\\t130\\t","ERBB2\\t0c2d7f5d-9da8-4a3c-bf55-53976781fa86\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t271\\t130\\t","EGFR\\t34b79c41-bc49-4c8e-b5f7-ddad188915bb\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t434\\t130\\t","FGFR2\\t91dd9bca-e153-4016-8c4a-0dbb7e12d024\\tGENE\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t1075\\t130\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","0738d86a-d46d-4a8f-b3f4-b96baba1bfa1\\t49a250be-042c-4910-9774-802dfb0e08f3\\tb33f6617-57e5-4e3a-bd28-6ff114d96321\\tACTIVATES","625b533f-ac20-4dbf-abdc-2c9fe3cafe97\\t51f0d970-2e2b-47e2-90bd-0d0d881d70ed\\t49a250be-042c-4910-9774-802dfb0e08f3\\tINHIBITS","f687da01-5f2a-4168-b41f-04f0014ab954\\t8214d1b9-75ba-4fbb-86d2-fe45dd392767\\t49a250be-042c-4910-9774-802dfb0e08f3\\tINHIBITS","49ee44ff-b6ff-47f0-81bf-effa2cf34191\\t49a250be-042c-4910-9774-802dfb0e08f3\\tbea46283-55f2-4650-acee-58d23d8c11fc\\tACTIVATES","d1a956b7-db6a-4653-9da4-d0b26357fb5a\\tbea46283-55f2-4650-acee-58d23d8c11fc\\t49a250be-042c-4910-9774-802dfb0e08f3\\tACTIVATES","73b63049-5e6c-4793-8536-86b4ec006b2d\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\t49a250be-042c-4910-9774-802dfb0e08f3\\tACTIVATES","49655771-0e8d-42ce-a71e-76d3bc8c742c\\td76b7fd4-b8f5-4e92-b2ce-b783fe58b9f2\\tbea46283-55f2-4650-acee-58d23d8c11fc\\tACTIVATES"],"ESAD-2017-WNT-CTNNB1-pathway":["ESAD-2017-WNT-CTNNB1-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PTCH1\\t623d9d6b-6d32-4a0a-a826-df9b880ca03a\\tGENE\\t-1\\t212\\t126\\t","APC\\t792b8fd9-ae87-4972-8da4-1140378b63e5\\tGENE\\t-1\\t382\\t126\\t","FBXW7\\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\\tGENE\\t-1\\t553\\t126\\t","ARID1A\\t1cdc0d84-e27f-44ed-981e-12994fed8711\\tGENE\\t-1\\t731\\t126\\t","CTNNB1\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tGENE\\t-1\\t446\\t214\\t","MYC\\tdd894023-67b6-4bcc-baad-a441556f4168\\tGENE\\t-1\\t793\\t214\\t","PIK3CA\\t8009d529-453b-4c3e-b694-7e0070b7f0a5\\tGENE\\t-1\\t793\\t303\\t","Cell proliferation\\td80f3360-7aa0-442a-ae2a-59f0e8379f86\\tPROCESS\\t-1\\t999\\t214\\t","Embryonic development\\t2e65076c-a0ae-47d9-8860-4ba6c1c89e1c\\tPROCESS\\t-1\\t210\\t214\\t","SMAD\\t08936961-1fad-4b39-ada5-839a1864de96\\tFAMILY\\t-1\\t985\\t126\\t","SMAD2\\t0235338c-0433-48b9-87e3-e50923aed67c\\tGENE\\t08936961-1fad-4b39-ada5-839a1864de96\\t901\\t126\\t","SMAD4\\t1b3e587e-ec76-417a-92ef-34976b0f46bd\\tGENE\\t08936961-1fad-4b39-ada5-839a1864de96\\t1070\\t126\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","a1155daf-ac03-4bbd-9ae0-0a738ec73d95\\t8009d529-453b-4c3e-b694-7e0070b7f0a5\\tdd894023-67b6-4bcc-baad-a441556f4168\\tACTIVATES","0562cbe7-7462-45c1-bd49-109e7ef97f74\\tdd894023-67b6-4bcc-baad-a441556f4168\\td80f3360-7aa0-442a-ae2a-59f0e8379f86\\tACTIVATES","b7fe88fe-76f0-4f45-b80c-eb9937d3fed0\\t623d9d6b-6d32-4a0a-a826-df9b880ca03a\\t2e65076c-a0ae-47d9-8860-4ba6c1c89e1c\\tINHIBITS","d1682a0d-a521-4f33-8097-a57b695d6fe4\\t792b8fd9-ae87-4972-8da4-1140378b63e5\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tINHIBITS","0e07ea0f-7144-42b7-831d-11a660f45ddb\\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tINHIBITS","91b66dea-a6b4-4991-8ac2-184904f361b0\\tfaa556d4-6e8d-456d-b9d0-a4c35873f9a8\\tdd894023-67b6-4bcc-baad-a441556f4168\\tINHIBITS","ba347f10-d89d-47ed-97fc-8eed4454b4ba\\td6eb299d-a7c3-4c78-b9e7-4808773bb690\\tdd894023-67b6-4bcc-baad-a441556f4168\\tACTIVATES","b8423ddf-8f5c-4718-81b4-132ae25ed3e5\\t1cdc0d84-e27f-44ed-981e-12994fed8711\\tdd894023-67b6-4bcc-baad-a441556f4168\\tINHIBITS","a7180fc6-8113-47eb-b090-39d1cc8c5825\\t08936961-1fad-4b39-ada5-839a1864de96\\tdd894023-67b6-4bcc-baad-a441556f4168\\tINHIBITS"],"GBM-2008-Cell-cycle-signaling-pathway":["GBM-2008-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","RB1\\t0cQitpJLOoEG\\tFAMILY\\t-1\\t472\\t279\\t","CYCLINS\\tSBGkYw2NOhMr\\tFAMILY\\t-1\\t472\\t168\\t","G1/S Progression\\t0kD7D3DGOtD1\\tPROCESS\\t-1\\t472\\t374\\t","CCND2\\tGrNFDrs1AoNL\\tGENE\\tSBGkYw2NOhMr\\t472\\t168\\t","CDKN2B\\tTbTnj_R5ONS9\\tGENE\\t-1\\t444\\t87\\t","CDK4\\tPs45UaX4AoNo\\tGENE\\tSBGkYw2NOhMr\\t317\\t168\\t","CDK6\\tVnEu6OlPAoNe\\tGENE\\tSBGkYw2NOhMr\\t627\\t168\\t","CDKN2C\\tr8WJLoQLOONy\\tGENE\\t-1\\t625\\t87\\t","CDKN2A\\tcnleYFDsOMzx\\tGENE\\t-1\\t294\\t87\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","Rpso-cKyOzoj\\tTbTnj_R5ONS9\\tSBGkYw2NOhMr\\tINHIBITS","3InwuSCoO0br\\tr8WJLoQLOONy\\tSBGkYw2NOhMr\\tINHIBITS","-zXgQSv4Oy04\\tcnleYFDsOMzx\\tSBGkYw2NOhMr\\tINHIBITS","6NO_fL3nO3r4\\tSBGkYw2NOhMr\\t0cQitpJLOoEG\\tINHIBITS","1pimX-ZiO6F6\\t0cQitpJLOoEG\\t0kD7D3DGOtD1\\tINHIBITS"],"GBM-2008-RTK-RAS-PI(3)K-pathway":["GBM-2008-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PDGFRA\\tiD415efHLG3J\\tGENE\\tIdrkrh8-K31j\\t441\\t-61\\t","RAS\\t8XXLbCwXLtrQ\\tFAMILY\\t-1\\t246\\t53\\t","NF1\\tKe7_FRmuLw42\\tGENE\\t-1\\t21\\t54\\t","RTK\\tIdrkrh8-K31j\\tFAMILY\\t-1\\t365\\t-61\\t","PI(3)K\\tuWMSz1XlL2nL\\tFAMILY\\t-1\\t529\\t50\\t","PTEN\\tLOErZTMUL6hc\\tGENE\\t-1\\t721\\t50\\t","AKT\\tsgb8KI1XMIrn\\tFAMILY\\t-1\\t529\\t129\\t","EGFR\\t7T8gHIR6LG2s\\tGENE\\tIdrkrh8-K31j\\t134\\t-61\\t","FOXO\\t1cIfqNkTMN--\\tGENE\\t-1\\t529\\t205\\t","MET\\tXcKqo6xILG3V\\tGENE\\tIdrkrh8-K31j\\t597\\t-61\\t","ERBB2\\tvJOD-MZOLG2-\\tGENE\\tIdrkrh8-K31j\\t287\\t-61\\t","Proliferation, survival, translation\\tk9I_xTrbMS6S\\tPROCESS\\t-1\\t247\\t206\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","ApGQ0rEtL1TV\\tKe7_FRmuLw42\\t8XXLbCwXLtrQ\\tINHIBITS","s5CFkxUKL0kl\\tIdrkrh8-K31j\\t8XXLbCwXLtrQ\\tACTIVATES","jrs5QL8rMbv3\\t8XXLbCwXLtrQ\\tk9I_xTrbMS6S\\tACTIVATES","WEpyeQmyMeC8\\tsgb8KI1XMIrn\\t1cIfqNkTMN--\\tINHIBITS","ytXepIulMGGL\\tIdrkrh8-K31j\\tuWMSz1XlL2nL\\tACTIVATES","_g47pqc4MGwz\\tLOErZTMUL6hc\\tuWMSz1XlL2nL\\tINHIBITS","u1UwLh90MdLo\\tuWMSz1XlL2nL\\tsgb8KI1XMIrn\\tACTIVATES"],"GBM-2008-TP53-pathway":["GBM-2008-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Activated oncogenes\\tx-laQtq0NSZI\\tPROCESS\\t-1\\t724\\t57\\t","MDM2\\tVIrh6R4jNYOQ\\tGENE\\t-1\\t724\\t208\\t","Apoptosis\\tLxZckK4_NmKp\\tPROCESS\\t-1\\t886\\t297\\t","MDM4\\t0z81KeWTNfOj\\tGENE\\t-1\\t886\\t234\\t","Senescence\\tX0XgoUzfNjH-\\tPROCESS\\t-1\\t546\\t297\\t","CDKN2A\\tIXX8d7kuNVHa\\tGENE\\t-1\\t724\\t135\\t","TP53\\t6RLrPg8rNa4o\\tGENE\\t-1\\t724\\t297\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","4PNvvSvKNtxu\\tIXX8d7kuNVHa\\tVIrh6R4jNYOQ\\tINHIBITS","gX_WY_rANxtC\\tVIrh6R4jNYOQ\\t6RLrPg8rNa4o\\tINHIBITS","EznJNkeAN1al\\t6RLrPg8rNa4o\\tX0XgoUzfNjH-\\tACTIVATES","kaHvTklZNzas\\t0z81KeWTNfOj\\t6RLrPg8rNa4o\\tINHIBITS","wTOjoJHdNq6N\\tx-laQtq0NSZI\\tIXX8d7kuNVHa\\tACTIVATES","5-9bxAL_N0gO\\t6RLrPg8rNa4o\\tLxZckK4_NmKp\\tACTIVATES"],"GBM-2013-Cell-cycle-signaling-pathway":["GBM-2013-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDKN2C\\tnFMLgWuEmv0Q\\tGENE\\t-1\\t667\\t136\\t","CDK4\\tszeVZ7Elmxvu\\tGENE\\t-1\\t386\\t249\\t","CDK6\\tWvJWw5HPm0Ab\\tGENE\\t-1\\t694\\t249\\t","Cyclins\\tAvEeR8GgnDvF\\tFAMILY\\t-1\\t541\\t249\\t","CDKN2A\\tWHDg2nj1B2yR\\tGENE\\t-1\\t320\\t136\\t","Cell cycle control\\tKJEq6EA_m3Cj\\tPROCESS\\t-1\\t793\\t383\\t","CDKN2B\\tv1zGJhukB2ym\\tGENE\\t-1\\t470\\t136\\t","RB1\\tNc0stK1rm13Y\\tFAMILY\\t-1\\t541\\t383\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","4yIGldfunbSO\\tNc0stK1rm13Y\\tKJEq6EA_m3Cj\\tACTIVATES","aqdBLSknB2zK\\tv1zGJhukB2ym\\tszeVZ7Elmxvu\\tINHIBITS","bxdBRxkfnYu4\\tszeVZ7Elmxvu\\tNc0stK1rm13Y\\tINHIBITS","AQXakgefnZf1\\tAvEeR8GgnDvF\\tNc0stK1rm13Y\\tINHIBITS","bdgYHwINnW4B\\tnFMLgWuEmv0Q\\tAvEeR8GgnDvF\\tINHIBITS","Xslj1XfeB2yz\\tWHDg2nj1B2yR\\tszeVZ7Elmxvu\\tINHIBITS","ve_EiwTjnXrI\\tnFMLgWuEmv0Q\\tWvJWw5HPm0Ab\\tINHIBITS","Q7Uq8jBIB2y5\\tWHDg2nj1B2yR\\tAvEeR8GgnDvF\\tINHIBITS","IL38zL5VB2yv\\tWHDg2nj1B2yR\\tWvJWw5HPm0Ab\\tINHIBITS","6jn1TNkoB2zN\\tv1zGJhukB2ym\\tAvEeR8GgnDvF\\tINHIBITS","BSaYCBi7naes\\tWvJWw5HPm0Ab\\tNc0stK1rm13Y\\tINHIBITS","JZERPNMdnWL9\\tnFMLgWuEmv0Q\\tszeVZ7Elmxvu\\tINHIBITS","n7Nithx-B2zB\\tv1zGJhukB2ym\\tWvJWw5HPm0Ab\\tINHIBITS"],"GBM-2013-RTK-RAS-PI(3)K-pathway":["GBM-2013-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","NF1\\tpQ2sq0Chk7o8\\tGENE\\t-1\\t843\\t223\\t","RAS\\tXfDonLT2k9rr\\tFAMILY\\t-1\\t674\\t223\\t","BRAF\\tJKmqofwVk_cd\\tGENE\\t-1\\t674\\t334\\t","EGFR\\tHG7A5p2q4D3f\\tGENE\\tZvpmFM7llCzi\\t331\\t113\\t","PI3K(3)K\\tE0625yTsk46l\\tGENE\\t-1\\t428\\t225\\t","AKT Pathway\\tTTwvf1BelBTM\\tPROCESS\\t-1\\t428\\t338\\t","MET\\tsZJ7Kmrg4D35\\tGENE\\tZvpmFM7llCzi\\t643\\t113\\t","MAPK Pathway\\tdAkBkKN-lAKT\\tPROCESS\\t-1\\t862\\t335\\t","PTEN\\t8kyYeHGHk4NK\\tGENE\\t-1\\t255\\t225\\t","RTK\\tZvpmFM7llCzi\\tFAMILY\\t-1\\t565\\t113\\t","FGFR\\t8z2n3qaU4D3L\\tGENE\\tZvpmFM7llCzi\\t800\\t113\\t","PDGFRA\\t-jXEzRew4D3r\\tGENE\\tZvpmFM7llCzi\\t487\\t113\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","f9EmKbzjlk77\\tJKmqofwVk_cd\\tdAkBkKN-lAKT\\tACTIVATES","qj0ZCvR8le5E\\t8kyYeHGHk4NK\\tE0625yTsk46l\\tINHIBITS","4DrueUbLljf-\\tE0625yTsk46l\\tTTwvf1BelBTM\\tACTIVATES","c4Kpa4R5lgcQ\\tZvpmFM7llCzi\\tXfDonLT2k9rr\\tACTIVATES","CEeo6oGYlifg\\tXfDonLT2k9rr\\tJKmqofwVk_cd\\tACTIVATES","zingzci6lhXA\\tpQ2sq0Chk7o8\\tXfDonLT2k9rr\\tINHIBITS","LTVgdZNOld9G\\tZvpmFM7llCzi\\tE0625yTsk46l\\tACTIVATES"],"GBM-2013-TP53-pathway":["GBM-2013-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TP53\\tux4NOBO4mBSe\\tGENE\\t-1\\t416\\t243\\t","MDM4\\tO3CQIh-OmCOD\\tGENE\\t-1\\t222\\t243\\t","Senescence/Apoptosis\\tTIZhBhfymDVV\\tPROCESS\\t-1\\t416\\t355\\t","MDM2\\tdNRsoLpZmAuu\\tGENE\\t-1\\t416\\t133\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","BrX7DMKemS8w\\tdNRsoLpZmAuu\\tux4NOBO4mBSe\\tINHIBITS","jHRb2o3YmTqF\\tO3CQIh-OmCOD\\tux4NOBO4mBSe\\tINHIBITS","MnYnmX_dmV0E\\tux4NOBO4mBSe\\tTIZhBhfymDVV\\tACTIVATES"],"HIPPO":["HIPPO","","Involved in the control of organ size. Central to this pathway is the regulation of the transcription co-activators YAP/TAZ that promote the transcription of genes involved in cell proliferation.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY\\tWIDTH\\tHEIGHT--","\\t8f940396-e035-4b9e-8574-b5eadf26e98c\\tFAMILY\\t-1\\t91\\t64\\t150\\t52","DCHS1\\t8d4d3dca-9217-4539-b15e-63ce7f5df09a\\tGENE\\t8f940396-e035-4b9e-8574-b5eadf26e98c\\t91\\t34\\t150\\t52","DCHS2\\tf51ccf81-94a8-425f-80ce-4d55489b9660\\tGENE\\t8f940396-e035-4b9e-8574-b5eadf26e98c\\t91\\t95\\t150\\t52","\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\tFAMILY\\t-1\\t369\\t61\\t150\\t52","FAT1\\t901800a8-6c9f-42f6-a9b6-2e8b1483ec63\\tGENE\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\t291\\t32\\t150\\t52","FAT2\\t775d810d-bfc1-434c-949d-71f4bd38d374\\tGENE\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\t448\\t31\\t150\\t52","FAT3\\tc4f71e12-c88e-409d-9f26-7bc84b3f6cb8\\tGENE\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\t291\\t92\\t150\\t52","FAT4\\t075bc3e3-74b9-4d0c-a20d-58b77cb3c3f6\\tGENE\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\t448\\t91\\t150\\t52","\\tde4dab24-648f-4406-8adf-0c08d62b3173\\tFAMILY\\t-1\\t714\\t60\\t150\\t52","TAOK1\\t3e53e820-8a91-4329-86f1-e59948a9003a\\tGENE\\tde4dab24-648f-4406-8adf-0c08d62b3173\\t636\\t32\\t150\\t52","TAOK3\\t7a7b38dc-e47d-4f33-9cec-3570a23b2f85\\tGENE\\tde4dab24-648f-4406-8adf-0c08d62b3173\\t636\\t89\\t150\\t52","TAOK2\\t8a51ead1-a5d3-41b8-bf2e-99fc2169857b\\tGENE\\tde4dab24-648f-4406-8adf-0c08d62b3173\\t793\\t31\\t150\\t52","\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\tFAMILY\\t-1\\t374\\t324\\t456.5888856128265\\t242.9161558761191","SAV1\\t267c0160-0919-403d-bd52-ea84c001f357\\tGENE\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\t277\\t257\\t150\\t52","\\t71e2f614-626b-4fbe-9e18-17c83c401062\\tFAMILY\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\t455\\t258\\t212.8900278180157\\t116.0130640290517","STK3\\t9f5e8c36-52a9-4e62-bf7c-b1f3b02d8740\\tGENE\\t71e2f614-626b-4fbe-9e18-17c83c401062\\t455\\t230\\t150\\t52","STK4\\t3e08fb0d-ef9f-49b9-8037-ed940df282af\\tGENE\\t71e2f614-626b-4fbe-9e18-17c83c401062\\t455\\t287\\t150\\t52","\\t7ef3236d-1aa7-4082-a396-751554a11282\\tFAMILY\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\t277\\t390\\t154.12303621103598\\t117.89002781801568","LATS1\\t2897d4be-7047-4af4-958b-b978a0d944f5\\tGENE\\t7ef3236d-1aa7-4082-a396-751554a11282\\t277\\t362\\t150\\t52","LATS2\\t944868e7-e040-49a8-8773-3da725d368c3\\tGENE\\t7ef3236d-1aa7-4082-a396-751554a11282\\t277\\t419\\t150\\t52","\\tb6626b2a-d8ef-4d7a-9645-8e9a7a538795\\tFAMILY\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\t455\\t390\\t150\\t52","MOB1A\\t54416ef1-d8c0-492d-b465-49adb95ad62e\\tGENE\\tb6626b2a-d8ef-4d7a-9645-8e9a7a538795\\t454\\t362\\t150\\t52","MOB1B\\t44429ea1-e73d-43f8-8caf-c7fb319956ff\\tGENE\\tb6626b2a-d8ef-4d7a-9645-8e9a7a538795\\t455\\t419\\t150\\t52","\\t4df2d8ec-903b-4445-a7a5-f5b105fd49f1\\tFAMILY\\t-1\\t710\\t324\\t150\\t52","NF2\\tfd29bca1-db7d-4f62-bce0-49510642adb3\\tGENE\\t4df2d8ec-903b-4445-a7a5-f5b105fd49f1\\t709\\t295\\t150\\t52","WWC1\\te9119bdc-4312-40a5-837e-dc079d103e63\\tGENE\\t4df2d8ec-903b-4445-a7a5-f5b105fd49f1\\t710\\t353\\t150\\t52","\\t8d5398c4-941f-4153-a392-ebaef3fff177\\tFAMILY\\t-1\\t373\\t590\\t179.71700255004964\\t76.76416879170804","YAP1\\t3cf01f62-ef45-4722-8cad-565456928871\\tGENE\\t8d5398c4-941f-4153-a392-ebaef3fff177\\t373\\t559\\t150\\t52","TAZ\\t9ed35563-0451-451b-a750-c33f5e94108f\\tGENE\\t8d5398c4-941f-4153-a392-ebaef3fff177\\t373\\t620\\t150\\t52","\\tbb742872-aa08-4e50-87de-846f64cea394\\tFAMILY\\t-1\\t91\\t590\\t150\\t52","CRB1\\t1ea26f01-462c-4a16-b568-b9de2242fa5b\\tGENE\\tbb742872-aa08-4e50-87de-846f64cea394\\t91\\t560\\t150\\t52","CRB2\\te054585c-47a2-4b4a-9cb7-cbbfc61e900f\\tGENE\\tbb742872-aa08-4e50-87de-846f64cea394\\t91\\t620\\t150\\t52","PTPN14\\td88a9331-971e-4ad2-817a-a3dadbebd4de\\tGENE\\t-1\\t606\\t538\\t150\\t52","\\t8f2ee28b-9fc4-4b61-ad07-e0c0b0b4c566\\tFAMILY\\t-1\\t606\\t672\\t150\\t52","CSNK1E\\t63916e9d-dcd6-45db-8fbe-3d480ef92c5f\\tGENE\\t8f2ee28b-9fc4-4b61-ad07-e0c0b0b4c566\\t606\\t640\\t150\\t52","CSNK1D\\t0e5136c0-186c-4aba-893c-7f0ce5bdf56d\\tGENE\\t8f2ee28b-9fc4-4b61-ad07-e0c0b0b4c566\\t606\\t705\\t150\\t52","TEAD2\\t0d1f1291-ec19-4f6d-8e74-1f11a020144b\\tGENE\\t-1\\t373\\t794\\t150\\t52","Cell proliferation and differentiation\\tfb37aa0c-49bb-4db6-b185-bc5a64a72540\\tPROCESS\\t-1\\t372\\t922\\t150\\t52","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\\tINTERACTION_PUBMED_ID\\tEDGE_NAME\\tEDGE_BENDS","17a941fe-ab44-43f4-8a4e-daa3939947a1\\t8f940396-e035-4b9e-8574-b5eadf26e98c\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\tACTIVATES\\t\\t\\t","a7d8a94f-4d02-46ed-8726-9c4e3e8bda7e\\t623300c3-2a9c-45d4-be51-ad67eea733b7\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\tACTIVATES\\t\\t\\t","ee173361-b9ad-458a-80d3-0138572470d4\\tde4dab24-648f-4406-8adf-0c08d62b3173\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\tACTIVATES\\t\\t\\t","e63e86f3-3b5e-4e37-8837-43d92a67ea7d\\t4df2d8ec-903b-4445-a7a5-f5b105fd49f1\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\tACTIVATES\\t\\t\\t","04ca3e1e-1693-4ec6-ab80-2724e2e3a0b9\\ta495c90c-7f17-4369-81bc-bc8894ba1c0d\\t8d5398c4-941f-4153-a392-ebaef3fff177\\tINHIBITS\\t\\t\\t","81a3fb4e-3e69-47b6-b499-e9fdfe65a37e\\tbb742872-aa08-4e50-87de-846f64cea394\\t8d5398c4-941f-4153-a392-ebaef3fff177\\tINHIBITS\\t\\t\\t","b6c3a4db-545a-4c25-bf4a-f0a3a8de36d2\\t8f2ee28b-9fc4-4b61-ad07-e0c0b0b4c566\\t8d5398c4-941f-4153-a392-ebaef3fff177\\tINHIBITS\\t\\t\\t","fce1ac6e-bc2e-4369-ab6e-287731618cc1\\td88a9331-971e-4ad2-817a-a3dadbebd4de\\t8d5398c4-941f-4153-a392-ebaef3fff177\\tINHIBITS\\t\\t\\t","b3fafa92-cfc7-460d-94d1-09ce977c3111\\t8d5398c4-941f-4153-a392-ebaef3fff177\\t0d1f1291-ec19-4f6d-8e74-1f11a020144b\\tACTIVATES\\t\\t\\t","7b0d95b6-acc4-46a0-85e4-9cbacd5b11de\\t0d1f1291-ec19-4f6d-8e74-1f11a020144b\\tfb37aa0c-49bb-4db6-b185-bc5a64a72540\\tACTIVATES\\t\\t\\t"],"HNSC-2015-Apoptosis-pathway":["HNSC-2015-Apoptosis-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Cell cycle and survival\\temPjU9d6DgGP\\tPROCESS\\t-1\\t348\\t484\\t","TRAF3\\tIBsoHlQJDZF8\\tGENE\\t-1\\t530\\t285\\t","FADD\\tDLlGnDdfDTRw\\tGENE\\t-1\\t373\\t199\\t","TNFR-LTBR\\ts0lGLs3rDXus\\tCOMPARTMENT\\t-1\\t452\\t106\\t","LTBR\\tM8fueNVgIWYI\\tGENE\\ts0lGLs3rDXus\\t530\\t106\\t","Inflammation angiogenesis migration\\tyeoJnxV0DfTf\\tPROCESS\\t-1\\t581\\t484\\t","BIRC2\\t54AiNjv7DUd9\\tGENE\\t-1\\t530\\t199\\t","NF-kB\\tVeOlULKnDabs\\tGENE\\t-1\\t455\\t382\\t","CASP8\\tkpwET4bNDYMG\\tGENE\\t-1\\t373\\t285\\t","TNFR\\t1f2UD5ctIWYb\\tGENE\\ts0lGLs3rDXus\\t373\\t106\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","lvrnvkjrD9P-\\ts0lGLs3rDXus\\t54AiNjv7DUd9\\tACTIVATES","N_skSg-mECnc\\tkpwET4bNDYMG\\tVeOlULKnDabs\\tINHIBITS","OMDbwzxED_x2\\t54AiNjv7DUd9\\tkpwET4bNDYMG\\tINHIBITS","HH4ug7YuD7Fv\\ts0lGLs3rDXus\\tDLlGnDdfDTRw\\tACTIVATES","f-O5DenwEBjr\\t54AiNjv7DUd9\\tIBsoHlQJDZF8\\tINHIBITS","U1LEKmYqIWYs\\t1f2UD5ctIWYb\\tM8fueNVgIWYI\\tBINDS","hhJPfTk9EHgb\\tVeOlULKnDabs\\temPjU9d6DgGP\\tACTIVATES","h3Fekoz9EAiL\\tDLlGnDdfDTRw\\tkpwET4bNDYMG\\tACTIVATES","Acyl78aaEDXf\\tIBsoHlQJDZF8\\tVeOlULKnDabs\\tINHIBITS","O9oIu8SeEIN_\\tVeOlULKnDabs\\tyeoJnxV0DfTf\\tACTIVATES"],"HNSC-2015-Cell-cycle-signaling-pathway":["HNSC-2015-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDKN2A\\tprbNZ7N4F2yz\\tGENE\\t-1\\t346\\t201\\t","Cell cycle and survival\\tUF0yWD0cGVp6\\tPROCESS\\t-1\\t859\\t466\\t","let-7c\\t1Fbfq0EnF4FD\\tGENE\\t-1\\t761\\t201\\t","HRAS\\ttR7G7jSMFyKn\\tGENE\\t-1\\t456\\t71\\t","HPVE\\tOUtOuzrFGWsp\\tFAMILY\\t-1\\t347\\t333\\t","RB1\\tKkBOpjMSGBEp\\tFAMILY\\t-1\\t570\\t334\\t","TP53\\tm6QJybSmGSEj\\tGENE\\t-1\\t531\\t466\\t","MYC\\tPu1nPMkoGUcO\\tGENE\\t-1\\t931\\t334\\t","PIK3CA\\tz2FkIMy8FypC\\tGENE\\t-1\\t678\\t71\\t","CCND1\\tS0n0th2eCfb9\\tGENE\\t-swYow3RF5GO\\t570\\t171\\t","CYCLINS\\t-swYow3RF5GO\\tFAMILY\\t-1\\t570\\t197\\t","E2F1\\tBNAC4UcvF_fD\\tGENE\\t-1\\t764\\t334\\t","HPVE7\\t6jlQIfmICrjy\\tGENE\\tOUtOuzrFGWsp\\t347\\t360\\t","CDK6\\tPPI7pGMpCfcQ\\tGENE\\t-swYow3RF5GO\\t570\\t224\\t","HPVE6\\t4bkc06NyCrjd\\tGENE\\tOUtOuzrFGWsp\\t347\\t307\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","idn2SG2QHMC0\\tBNAC4UcvF_fD\\tUF0yWD0cGVp6\\tACTIVATES","njhnQe9vCfci\\tz2FkIMy8FypC\\tS0n0th2eCfb9\\tACTIVATES","5CzfV-h-HQkB\\tOUtOuzrFGWsp\\tm6QJybSmGSEj\\tINHIBITS","UpECTCkVHGkl\\t1Fbfq0EnF4FD\\t-swYow3RF5GO\\tINHIBITS","wnpqGTZ4HNFG\\tPu1nPMkoGUcO\\tUF0yWD0cGVp6\\tACTIVATES","WfTDsR48HJ8K\\t-swYow3RF5GO\\tKkBOpjMSGBEp\\tINHIBITS","mHie46k1HIGn\\tprbNZ7N4F2yz\\t-swYow3RF5GO\\tINHIBITS","EJXQGmWDCfcZ\\ttR7G7jSMFyKn\\tS0n0th2eCfb9\\tACTIVATES","naU-KiGLHOkS\\tOUtOuzrFGWsp\\tKkBOpjMSGBEp\\tINHIBITS","lU11XAdWHRyG\\tm6QJybSmGSEj\\tUF0yWD0cGVp6\\tINHIBITS","hgYpZiWwHLEw\\tKkBOpjMSGBEp\\tBNAC4UcvF_fD\\tINHIBITS"],"HNSC-2015-Notch-signaling-pathway":["HNSC-2015-Notch-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TP63\\t0_tmgKZGEdGo\\tGENE\\t-1\\t290\\t306\\t","Differentiation\\teeVhg40NEiK2\\tPROCESS\\t-1\\t553\\t481\\t","CTNNB1\\tB311fstqEcj1\\tGENE\\t-1\\t485\\t306\\t","FAT1\\tKm28lPDkEe1-\\tGENE\\t-1\\t676\\t253\\t","AJUBA\\txmIHMSMOEfhM\\tGENE\\t-1\\t676\\t350\\t","NFE2L2\\tuBK84iGaEx2k\\tGENE\\t-1\\t835\\t108\\t","Inflammation angiogenesis migration\\tcVmq2gc7EhfK\\tPROCESS\\t-1\\t290\\t480\\t","NOTCH\\tM36IzzXCEbYd\\tFAMILY\\t-1\\t485\\t108\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","ICbcotEzE6EA\\tKm28lPDkEe1-\\tB311fstqEcj1\\tINHIBITS","wuF8plb4E1Me\\tuBK84iGaEx2k\\tM36IzzXCEbYd\\tACTIVATES","aGzvs7zSE3y2\\t0_tmgKZGEdGo\\tM36IzzXCEbYd\\tINHIBITS","3EBZZzaxE5Fm\\tM36IzzXCEbYd\\tB311fstqEcj1\\tINHIBITS","_u545Mo9E_ul\\t0_tmgKZGEdGo\\teeVhg40NEiK2\\tINHIBITS","n1ZzhYJJE6z0\\txmIHMSMOEfhM\\tB311fstqEcj1\\tINHIBITS","qJsbtzEME7xA\\tB311fstqEcj1\\teeVhg40NEiK2\\tINHIBITS","qbufdsXRFBiJ\\t0_tmgKZGEdGo\\tcVmq2gc7EhfK\\tACTIVATES","XfMK86WqE21I\\tM36IzzXCEbYd\\t0_tmgKZGEdGo\\tINHIBITS"],"HNSC-2015-Oxidative-stress-response-pathway":["HNSC-2015-Oxidative-stress-response-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","NFE2L2\\tgt4I0Om0FTv6\\tGENE\\t-1\\t436\\t285\\t","KEAP1\\tZsX3OXk3FSsm\\tGENE\\t-1\\t529\\t167\\t","NOTCH\\tBvJxfxK3FnBO\\tGENE\\t-1\\t169\\t285\\t","CUL3\\tIcPGDcXRFSKm\\tGENE\\t-1\\t339\\t167\\t","Oxidative damage\\tfVzq-7uHFVEN\\tPROCESS\\t-1\\t436\\t413\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","EnpWtdTqFdCy\\tIcPGDcXRFSKm\\tgt4I0Om0FTv6\\tINHIBITS","evdmv52VFpzm\\tgt4I0Om0FTv6\\tBvJxfxK3FnBO\\tACTIVATES","cPEAdB0SFfMR\\tgt4I0Om0FTv6\\tfVzq-7uHFVEN\\tACTIVATES","H-KG07b7Fd8r\\tZsX3OXk3FSsm\\tgt4I0Om0FTv6\\tINHIBITS"],"HNSC-2015-RTK-RAS-PI(3)K-pathway":["HNSC-2015-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PIK3CA\\txi9Q36e2CS_G\\tGENE\\t-1\\t540\\t244\\t","NF-kB\\tOOiOvVaWCyaI\\tGENE\\t-1\\t878\\t459\\t","HRAS\\tCh4RV-nlCR-8\\tGENE\\t-1\\t320\\t244\\t","IGF1R\\tYDvyAEat8pkt\\tGENE\\tYgFgrMTKCakc\\t850\\t145\\t","ERBB2\\to8fELaID8pjp\\tGENE\\tYgFgrMTKCakc\\t385\\t145\\t","EGFR\\tmYeWqovL8pkK\\tGENE\\tYgFgrMTKCakc\\t227\\t145\\t","RTK\\tYgFgrMTKCakc\\tFAMILY\\t-1\\t538\\t145\\t","FGFR1\\ts8sttQyx8pj-\\tGENE\\tYgFgrMTKCakc\\t541\\t145\\t","PTEN\\tWh8DCYlCCT_j\\tGENE\\t-1\\t722\\t244\\t","CCND1\\ts_2ubRksCYIg\\tGENE\\t-1\\t403\\t337\\t","MYC\\tM33a4yWMGH-j\\tGENE\\t-1\\t540\\t459\\t","FGFR3\\t-jbsv2rK8pkb\\tGENE\\tYgFgrMTKCakc\\t696\\t145\\t","Cell cycle and survival\\tNZQP-jwUGJDJ\\tPROCESS\\t-1\\t540\\t568\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","Vp8BMTADCsgK\\tYgFgrMTKCakc\\txi9Q36e2CS_G\\tACTIVATES","zMOtnYBFCu5s\\txi9Q36e2CS_G\\ts_2ubRksCYIg\\tACTIVATES","P2bwQGViCuNZ\\tCh4RV-nlCR-8\\ts_2ubRksCYIg\\tACTIVATES","9-cqR59DCtQQ\\tWh8DCYlCCT_j\\txi9Q36e2CS_G\\tINHIBITS","kFlNIRpWC2i-\\txi9Q36e2CS_G\\tOOiOvVaWCyaI\\tACTIVATES","S3jvgVzsGPMY\\txi9Q36e2CS_G\\tM33a4yWMGH-j\\tACTIVATES","GnyxNL7aCqke\\tYgFgrMTKCakc\\tCh4RV-nlCR-8\\tACTIVATES","rrzkeHNUGQDo\\tM33a4yWMGH-j\\tNZQP-jwUGJDJ\\tACTIVATES"],"KIRC-2013-RTK-RAS-PI(3)K-pathway":["KIRC-2013-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TSC1\\tuggsxb8--Aro\\tGENE\\txqEGjsx0iLFB\\t702\\t215\\t","RHEB\\tB86G1W3Bjaf-\\tGENE\\t-1\\t653\\t670\\t","TSC2\\tYkjc8ADw-rzF\\tGENE\\tkKqxit2Aj0o5\\t727\\t575\\t","4E-BP1\\tunH_CS0VjeEN\\tGENE\\t-1\\t755\\t833\\t","TSC\\tkKqxit2Aj0o5\\tFAMILY\\t-1\\t647\\t575\\t","RHEB\\t2laMuTAjiL1w\\tGENE\\t-1\\t891\\t255\\t","HIF1a\\taDLkX3Z9j92r\\tGENE\\t-1\\t755\\t918\\t","GRB10\\tx5Guo0spjf2e\\tGENE\\t-1\\t839\\t414\\t","MTOR\\tMC8l6rXMiOdd\\tGENE\\t-1\\t1074\\t255\\t","TSC\\txqEGjsx0iLFB\\tFAMILY\\t-1\\t702\\t249\\t","SQSTM1\\txQtLvkz9iNc7\\tGENE\\t-1\\t943\\t153\\t","TSC1\\tJ-ydcJGW-rzg\\tGENE\\tkKqxit2Aj0o5\\t568\\t575\\t","EGFR\\tQFhgkr8diB8z\\tGENE\\t-1\\t164\\t312\\t","PI3K\\tbHiksp77jREY\\tFAMILY\\t-1\\t560\\t414\\t","AKT\\t-Wom9AxOiG4E\\tGENE\\t-1\\t528\\t255\\t","mTORC2\\tdbgxtYHIjWfx\\tGENE\\t-1\\t478\\t493\\t","MiR21\\tGmrxvGcKjTyz\\tGENE\\t-1\\t332\\t533\\t","PIK3CA\\tGBWHCv3viEa6\\tGENE\\t-1\\t354\\t255\\t","IGF1R\\tozct1VALiSY1\\tGENE\\t-1\\t165\\t216\\t","VHL\\t0_wT5Rrrj_Rx\\tGENE\\t-1\\t935\\t919\\t","mTORC1\\tcYFqGJE4jcVJ\\tGENE\\t-1\\t653\\t750\\t","TSC2\\tj9ld37Vz-AsM\\tGENE\\txqEGjsx0iLFB\\t702\\t283\\t","PTEN\\tW2_xSgDziDku\\tGENE\\t-1\\t354\\t174\\t","AKT\\t7HbV79PdjsOU\\tFAMILY\\t-1\\t653\\t494\\t","GNB2L1\\tSfiCTcbNiA5M\\tGENE\\t-1\\t88\\t112\\t","PTEN\\twRO7VWWjjSA-\\tGENE\\t-1\\t332\\t414\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","OpzjVyUGkJHV\\tGmrxvGcKjTyz\\twRO7VWWjjSA-\\tINHIBITS","18MKxE0wiw13\\txqEGjsx0iLFB\\t2laMuTAjiL1w\\tINHIBITS","G-HTkvEckQ4C\\tB86G1W3Bjaf-\\tcYFqGJE4jcVJ\\tACTIVATES","04k9T_t2itkQ\\tW2_xSgDziDku\\tGBWHCv3viEa6\\tINHIBITS","TqPzh3WykXc5\\tunH_CS0VjeEN\\tx5Guo0spjf2e\\tACTIVATES","S7T11oBFisjk\\tQFhgkr8diB8z\\tGBWHCv3viEa6\\tACTIVATES","ahebq1NykUH5\\tunH_CS0VjeEN\\taDLkX3Z9j92r\\tACTIVATES","6najj9ABkSVJ\\tcYFqGJE4jcVJ\\tunH_CS0VjeEN\\tACTIVATES","qPyUZvk3kMq-\\tdbgxtYHIjWfx\\t7HbV79PdjsOU\\tACTIVATES","qHd1pkOTiy5k\\t2laMuTAjiL1w\\tMC8l6rXMiOdd\\tACTIVATES","aPTPKe-XkVXQ\\t0_wT5Rrrj_Rx\\taDLkX3Z9j92r\\tINHIBITS","8vMP0eF_kPj5\\tkKqxit2Aj0o5\\tB86G1W3Bjaf-\\tINHIBITS","NZt5xBGSkYb0\\tx5Guo0spjf2e\\tbHiksp77jREY\\tINHIBITS","3fJZoOEQkKNq\\tbHiksp77jREY\\tdbgxtYHIjWfx\\tACTIVATES","rAhe36tpix6d\\txQtLvkz9iNc7\\tMC8l6rXMiOdd\\tINDUCES","CAu1f-WdkHx4\\twRO7VWWjjSA-\\tbHiksp77jREY\\tINHIBITS","4vMHKnyOkLIf\\tbHiksp77jREY\\t7HbV79PdjsOU\\tACTIVATES","J7kaij8Aivlh\\t-Wom9AxOiG4E\\txqEGjsx0iLFB\\tINHIBITS","fT5lfcHziqX2\\tSfiCTcbNiA5M\\tozct1VALiSY1\\tINDUCES","_2k1_2B-iri2\\tozct1VALiSY1\\tGBWHCv3viEa6\\tACTIVATES","kxVoCQxViupL\\tGBWHCv3viEa6\\t-Wom9AxOiG4E\\tACTIVATES","7jMvZJMZkN4v\\t7HbV79PdjsOU\\tkKqxit2Aj0o5\\tINHIBITS"],"LUAD-2014-Cell-cycle-signaling-pathway":["LUAD-2014-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CCND1\\tYWcsnrJvCMfJ\\tGENE\\tEaAZ2J517xuW\\t365\\t177\\t","RB1\\t-65hVCUu7wNj\\tGENE\\t-1\\t521\\t303\\t","CDKN2A\\tyiKTF0xl7qs-\\tGENE\\t-1\\t521\\t88\\t","CYCLINS\\tEaAZ2J517xuW\\tFAMILY\\t-1\\t521\\t177\\t","CDK4\\tpYVVzOz7CMfp\\tGENE\\tEaAZ2J517xuW\\t521\\t177\\t","Cell cycle progression\\tSBA7nphX7zI1\\tPROCESS\\t-1\\t521\\t400\\t","CCNE1\\t0FQDESQiCMfb\\tGENE\\tEaAZ2J517xuW\\t676\\t177\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","EbOzzWJa8KyF\\tEaAZ2J517xuW\\t-65hVCUu7wNj\\tINHIBITS","eB12pAOW8MCi\\t-65hVCUu7wNj\\tSBA7nphX7zI1\\tACTIVATES","u6mSj8wD8Jp9\\tyiKTF0xl7qs-\\tEaAZ2J517xuW\\tINHIBITS"],"LUAD-2014-Histone-modification-pathway":["LUAD-2014-Histone-modification-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","SETD2\\tTEmP07vg8mqu\\tGENE\\t-1\\t678\\t182\\t","ARID1B\\tZC3AHrzf8h-f\\tGENE\\t-1\\t379\\t168\\t","Histone methylation\\toQNlmw1I8ng2\\tPROCESS\\t-1\\t678\\t333\\t","ARID2\\tUWhx7SxC8jmN\\tGENE\\t-1\\t226\\t244\\t","ARID1A\\t0ddAggf58hhA\\tGENE\\t-1\\t226\\t168\\t","Nucleosome remodeling\\tkv9VBnuH8l5E\\tPROCESS\\t-1\\t306\\t341\\t","SMARCA4\\t6xqXYMOE8kSp\\tGENE\\t-1\\t379\\t244\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","7D5lYDIi83WM\\tZC3AHrzf8h-f\\tkv9VBnuH8l5E\\tACTIVATES","C0gJJbpq84Fz\\t6xqXYMOE8kSp\\tkv9VBnuH8l5E\\tACTIVATES","_MCNndis82m-\\tUWhx7SxC8jmN\\tkv9VBnuH8l5E\\tACTIVATES","fc6_K-lT85Yv\\tTEmP07vg8mqu\\toQNlmw1I8ng2\\tACTIVATES","PkwUIXyU81xJ\\t0ddAggf58hhA\\tkv9VBnuH8l5E\\tACTIVATES"],"LUAD-2014-Oxidative-stress-response-pathway":["LUAD-2014-Oxidative-stress-response-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","KEAP1\\tx6qal2M_6fp6\\tGENE\\t-1\\t292\\t147\\t","NFE2L2\\t3OAnmFLj6kBV\\tGENE\\t-1\\t381\\t244\\t","CUL3\\tax7M8UNp6gH0\\tGENE\\t-1\\t460\\t147\\t","Oxidative stress response\\tqQRuLibB6k26\\tPROCESS\\t-1\\t381\\t345\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","puzswCQS65LP\\tx6qal2M_6fp6\\t3OAnmFLj6kBV\\tINHIBITS","ASasYVxW65_T\\tax7M8UNp6gH0\\t3OAnmFLj6kBV\\tINHIBITS","5XC9ZlAR67EJ\\t3OAnmFLj6kBV\\tqQRuLibB6k26\\tINHIBITS"],"LUAD-2014-RTK-RAS-PI(3)K-pathway":["LUAD-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","KRAS\\thCWC-xR96DqX\\tGENE\\t0aa7a88C5GOW\\t612\\t170\\t","EGFR\\tR5V3H_6E6eEo\\tGENE\\tmFXQLvHD4isJ\\t304\\t68\\t","RAS\\t0aa7a88C5GOW\\tFAMILY\\t-1\\t690\\t202\\t","MAP2K1\\tcwgYdqrk4hBA\\tGENE\\t-1\\t690\\t439\\t","PIK3R1\\tbqBJhHco4YrE\\tGENE\\t-1\\t149\\t251\\t","TSC2\\tY9HFp8YO-n8e\\tGENE\\tEXtYcXdy4Qsz\\t470\\t384\\t","Translation\\t9M7XTM_-4WR7\\tPROCESS\\t-1\\t781\\t637\\t","AKT1\\t25v4OB1H4IlR\\tGENE\\t-1\\t393\\t279\\t","STK11\\ts7zEz-oY4ag8\\tGENE\\t-1\\t149\\t322\\t","ALK\\tpjtEjnD36eE_\\tGENE\\tmFXQLvHD4isJ\\t773\\t68\\t","AMPK\\tFyui5tkl4cr5\\tGENE\\t-1\\t149\\t390\\t","NRAS\\tnKsKU-PQ6DrJ\\tGENE\\t0aa7a88C5GOW\\t768\\t170\\t","Proliferation\\tecQpjv9Q4Urm\\tPROCESS\\t-1\\t465\\t637\\t","HRAS\\tup6fI0q16Dq0\\tGENE\\t0aa7a88C5GOW\\t612\\t233\\t","NF1\\tQkA8DtgZ4Feb\\tGENE\\t-1\\t988\\t207\\t","ERBB2\\tEXN40CQ46eDV\\tGENE\\tmFXQLvHD4isJ\\t458\\t68\\t","ROS1\\twLhuE7H66eEA\\tGENE\\tmFXQLvHD4isJ\\t1076\\t68\\t","TSC1\\tj4o-n6HA-n8F\\tGENE\\tEXtYcXdy4Qsz\\t316\\t384\\t","RIT1\\ttYpKvL066Dru\\tGENE\\t0aa7a88C5GOW\\t768\\t233\\t","RET\\tds40mB756eC4\\tGENE\\tmFXQLvHD4isJ\\t925\\t68\\t","PTEN\\tua2-F70X4XuC\\tGENE\\t-1\\t149\\t178\\t","Cell survival\\tNmj0_LZZ4VXj\\tPROCESS\\t-1\\t622\\t637\\t","MTOR\\tNCFq_dYD4Py9\\tGENE\\t-1\\t393\\t542\\t","TSC\\tEXtYcXdy4Qsz\\tFAMILY\\t-1\\t393\\t384\\t","MET\\tTXeWKOZB6eDs\\tGENE\\tmFXQLvHD4isJ\\t609\\t68\\t","BRAF\\t8-YqWx2X4f5G\\tGENE\\t-1\\t690\\t365\\t","PIK3CA\\t8Qu-Lwni4HZ-\\tGENE\\t-1\\t393\\t178\\t","RTK\\tmFXQLvHD4isJ\\tFAMILY\\t-1\\t690\\t68\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","IBP-n3fS5SVk\\tcwgYdqrk4hBA\\t9M7XTM_-4WR7\\tACTIVATES","gUN_eI4KYtT7\\tNCFq_dYD4Py9\\tecQpjv9Q4Urm\\tACTIVATES","m9Gf2Xzf5WX3\\tEXtYcXdy4Qsz\\tNCFq_dYD4Py9\\tACTIVATES","yqPnLI4M5aT7\\tFyui5tkl4cr5\\tNCFq_dYD4Py9\\tACTIVATES","lIoLBw5O5RdC\\tcwgYdqrk4hBA\\tNmj0_LZZ4VXj\\tACTIVATES","qg8iuvID5Mhz\\t0aa7a88C5GOW\\t8-YqWx2X4f5G\\tACTIVATES","o72iUn2l5c3a\\tua2-F70X4XuC\\t8Qu-Lwni4HZ-\\tINHIBITS","j1x2CWxh5Iy4\\tmFXQLvHD4isJ\\t0aa7a88C5GOW\\tACTIVATES","EuuexlE5Y05b\\tNCFq_dYD4Py9\\t9M7XTM_-4WR7\\tACTIVATES","8Uu5IYEq5KQg\\tQkA8DtgZ4Feb\\t0aa7a88C5GOW\\tINHIBITS","2pXFnqhL5OzR\\tcwgYdqrk4hBA\\tecQpjv9Q4Urm\\tACTIVATES","gE5bPX0c5VDK\\t25v4OB1H4IlR\\tEXtYcXdy4Qsz\\tINHIBITS","HshnmzcdYu-I\\tNCFq_dYD4Py9\\tNmj0_LZZ4VXj\\tACTIVATES","UuK2Sd1m5T5a\\t8Qu-Lwni4HZ-\\t25v4OB1H4IlR\\tACTIVATES","pSaMDCCD5eRf\\tbqBJhHco4YrE\\t8Qu-Lwni4HZ-\\tINHIBITS","6eV4lZbQYv3r\\tNCFq_dYD4Py9\\tNmj0_LZZ4VXj\\tACTIVATES","VFskMcwI5bY7\\ts7zEz-oY4ag8\\tFyui5tkl4cr5\\tACTIVATES","zPkLVdf35NoU\\t8-YqWx2X4f5G\\tcwgYdqrk4hBA\\tACTIVATES"],"LUAD-2014-TP53-pathway":["LUAD-2014-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TP53\\tCQjbRdgs7ItD\\tGENE\\t-1\\t436\\t249\\t","Cell survival\\tSVkWhzV37N80\\tPROCESS\\t-1\\t510\\t348\\t","Proliferation\\tfz0X8H7D7J7L\\tPROCESS\\t-1\\t342\\t347\\t","ATM\\tgjYBW9Ea7HZc\\tGENE\\t-1\\t510\\t151\\t","MDM2\\tSdbPatXY7HDu\\tGENE\\t-1\\t342\\t151\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","npAcARys7a_k\\tCQjbRdgs7ItD\\tSVkWhzV37N80\\tINHIBITS","VGJAIfU07X_O\\tSdbPatXY7HDu\\tCQjbRdgs7ItD\\tINHIBITS","yaRRpgbw7aKj\\tCQjbRdgs7ItD\\tfz0X8H7D7J7L\\tINHIBITS","6yEDoser7Y_S\\tgjYBW9Ea7HZc\\tCQjbRdgs7ItD\\tACTIVATES"],"LUSC-2012-Notch-signaling-pathway":["LUSC-2012-Notch-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","TP63\\tjwpnNGJWSGmo\\tGENE\\t-1\\t665\\t118\\t","NOTCH1\\tuCLr0FZ-DVjI\\tGENE\\tqDU9qUkVWgQy\\t307\\t245\\t","NOTCH\\tqDU9qUkVWgQy\\tFAMILY\\t-1\\t385\\t245\\t","FOXP1\\tOQXnexCbWaQC\\tGENE\\t-1\\t781\\t245\\t","NOTCH2\\t8xqf1lEoDVjf\\tGENE\\tqDU9qUkVWgQy\\t462\\t245\\t","SOX2\\tz9OhKjOpSGPy\\tGENE\\t-1\\t392\\t118\\t","ASCL4\\tB7vcA7ATWYcn\\tGENE\\t-1\\t624\\t245\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","PLEAy9rIWrEw\\tz9OhKjOpSGPy\\tqDU9qUkVWgQy\\tINHIBITS","JC1sUBM-WtKp\\tz9OhKjOpSGPy\\tB7vcA7ATWYcn\\tINHIBITS","lP_hmn57Wt5k\\tz9OhKjOpSGPy\\tOQXnexCbWaQC\\tINHIBITS","NJbf1vyhWr_5\\tjwpnNGJWSGmo\\tqDU9qUkVWgQy\\tINHIBITS"],"LUSC-2012-Oxidative-stress-response-pathway":["LUSC-2012-Oxidative-stress-response-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CUL3\\tlReeCCfNRhiB\\tGENE\\t-1\\t567\\t154\\t","NFE2L2\\tb31Gx6nxRij2\\tGENE\\t-1\\t480\\t256\\t","KEAP1\\t74W2ldwARhHq\\tGENE\\t-1\\t381\\t154\\t","Oxidative stress response\\tHZ9RxRrPRkFz\\tPROCESS\\t-1\\t480\\t363\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","RQOk_9p-Rv2F\\tb31Gx6nxRij2\\tHZ9RxRrPRkFz\\tACTIVATES","CT9Gtmm5Rqtm\\t74W2ldwARhHq\\tb31Gx6nxRij2\\tINHIBITS","HHBAbZS1Rto5\\tlReeCCfNRhiB\\tb31Gx6nxRij2\\tINHIBITS"],"LUSC-2012-RTK-RAS-PI(3)K-pathway":["LUSC-2012-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","FGFR1\\tMvptxoO61bRr\\tGENE\\tyiHWlSi0ZceY\\t1097\\t185\\t","KRAS\\tsWfNqwir1dxE\\tGENE\\twfQD-GssZd01\\t894\\t292\\t","PTEN\\tZymRaEU8XIRY\\tGENE\\t-1\\t188\\t185\\t","ERBB3\\tRm4wq0_z1bQa\\tGENE\\tyiHWlSi0ZceY\\t936\\t185\\t","Proliferation\\tP8EboRv6ZME9\\tPROCESS\\t-1\\t494\\t543\\t","AMPK\\t02umJdNsXOpl\\tGENE\\t-1\\t42\\t405\\t","RTK\\tyiHWlSi0ZceY\\tFAMILY\\t-1\\t1023\\t185\\t","AKT\\toxyofYva1T05\\tFAMILY\\t-1\\t389\\t292\\t","AKT2\\tlarrnE_S1WJv\\tGENE\\toxyofYva1T05\\t389\\t292\\t","RAS\\twfQD-GssZd01\\tFAMILY\\t-1\\t894\\t292\\t","Translation\\tHR4vBeq2ZNsn\\tPROCESS\\t-1\\t798\\t543\\t","NF1\\tiabVj2PwYZp2\\tGENE\\t-1\\t1250\\t339\\t","FGFR3\\t2C2nCxu91bRd\\tGENE\\tyiHWlSi0ZceY\\t1424\\t185\\t","STK11\\tO4y17G4EXLUD\\tGENE\\t-1\\t-49\\t300\\t","EGFR\\tAx89UA0r1bQ9\\tGENE\\tyiHWlSi0ZceY\\t622\\t185\\t","TSC2\\tzY7tgwSJ1XbR\\tGENE\\tqLC0RZ4XXsZX\\t403\\t380\\t","TSC\\tqLC0RZ4XXsZX\\tFAMILY\\t-1\\t324\\t380\\t","MTOR\\t9xgTtYW2XQeX\\tGENE\\t-1\\t147\\t480\\t","RASA1\\tDvdwOn2xYWd3\\tGENE\\t-1\\t1250\\t270\\t","AKT3\\tzzXDUqB91WKC\\tGENE\\toxyofYva1T05\\t546\\t292\\t","FGFR2\\tXUUZCJbJ1bRO\\tGENE\\tyiHWlSi0ZceY\\t1259\\t185\\t","PI3K\\tFq9ew-K6XKj-\\tFAMILY\\t-1\\t383\\t185\\t","NRAS\\tW0krGYlI1dxY\\tGENE\\twfQD-GssZd01\\t1054\\t292\\t","ERBB2\\ttKS__G_N1bQt\\tGENE\\tyiHWlSi0ZceY\\t780\\t185\\t","AKT1\\tO_LJqz4I1WJd\\tGENE\\toxyofYva1T05\\t232\\t292\\t","HRAS\\tXIj4ze_l1dxl\\tGENE\\twfQD-GssZd01\\t734\\t292\\t","Cell survival\\tnNugUqXiZNB6\\tPROCESS\\t-1\\t644\\t543\\t","BRAF\\tT1CL0I79YgGR\\tGENE\\t-1\\t894\\t405\\t","PIK3CA\\tcykG-Tsv1fu4\\tGENE\\tFq9ew-K6XKj-\\t383\\t185\\t","TSC1\\t1paUtI_G1Xbd\\tGENE\\tqLC0RZ4XXsZX\\t245\\t380\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","QLi86o6iaTAU\\tT1CL0I79YgGR\\tnNugUqXiZNB6\\tACTIVATES","gB5T8yfp3IU3\\t9xgTtYW2XQeX\\tHR4vBeq2ZNsn\\tACTIVATES","sXH_uS-e1T1m\\toxyofYva1T05\\tHR4vBeq2ZNsn\\tACTIVATES","WUv8Ij4AaR-n\\tT1CL0I79YgGR\\tP8EboRv6ZME9\\tACTIVATES","RCM2k2xJ1T1r\\toxyofYva1T05\\tqLC0RZ4XXsZX\\tINHIBITS","4bGJbkzlaO_3\\tDvdwOn2xYWd3\\twfQD-GssZd01\\tINHIBITS","awuopxpi1T1c\\toxyofYva1T05\\tP8EboRv6ZME9\\tACTIVATES","WURhbp8YX5ol\\tO4y17G4EXLUD\\t02umJdNsXOpl\\tACTIVATES","fTcRATeQaEYa\\twfQD-GssZd01\\tT1CL0I79YgGR\\tACTIVATES","-RCFsGxvaQmo\\tiabVj2PwYZp2\\twfQD-GssZd01\\tINHIBITS","9dW1i3sN3Gtu\\t9xgTtYW2XQeX\\tP8EboRv6ZME9\\tACTIVATES","Uc5AjjxV3HcN\\t9xgTtYW2XQeX\\tnNugUqXiZNB6\\tACTIVATES","vYmJjY8pX14b\\tZymRaEU8XIRY\\tFq9ew-K6XKj-\\tINHIBITS","pzSfIS3bX6g_\\t02umJdNsXOpl\\t9xgTtYW2XQeX\\tACTIVATES","3eElg70UaNdN\\tyiHWlSi0ZceY\\twfQD-GssZd01\\tACTIVATES","-GLnxzAk1T1w\\toxyofYva1T05\\tnNugUqXiZNB6\\tACTIVATES","eDF8oz7ZaT8J\\tT1CL0I79YgGR\\tHR4vBeq2ZNsn\\tACTIVATES","vecmsBiI1T1S\\tFq9ew-K6XKj-\\toxyofYva1T05\\tACTIVATES"],"MYC":["MYC","","Involves a number of transcription regulation complexes: MYC-MAX, MAX-MXD, MAX-MGA, and the energy sensing, MondoA-Mlx complex in the regulation of apoptotic response and cell differentiation.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","MXD1\\tYd6m7-sCeh37\\tGENE\\tTrTubnzSeh3h\\t151\\t436","MXD4\\tplDFXS0peh30\\tGENE\\tTrTubnzSeh3h\\t488\\t436","MXI1\\tdNmw_8oVeh3k\\tGENE\\tTrTubnzSeh3h\\t651\\t436","MGA\\tGt92f6Iyeh3a\\tGENE\\tLwRHv9NUeh3R\\t580\\t310","MYC/MAX Complex\\tOCJ3wBBPeh4J\\tCOMPLEX\\t-1\\t479\\t172","MYC\\tKDr5caJdeh4X\\tGENE\\tOCJ3wBBPeh4J\\t313\\t172","MYCL\\tm1nG2P8zeh4p\\tGENE\\tOCJ3wBBPeh4J\\t645\\t173","MLXIPL\\t6ZvsmDKBeh3H\\tGENE\\tIuhA7dyleh3B\\t571\\t658","MAX/MXD Complex\\tTrTubnzSeh3h\\tCOMPLEX\\t-1\\t483\\t436","MAX\\tyGKkO3Ajeh3V\\tGENE\\tLwRHv9NUeh3R\\t344\\t310","MXD3\\ta19O0LiCeh3p\\tGENE\\tTrTubnzSeh3h\\t323\\t436","MLXIP\\tO9V1RuKxeh3K\\tGENE\\tIuhA7dyleh3B\\t395\\t656","MLX\\teH1TNcCVeh3F\\tGENE\\tIuhA7dyleh3B\\t490\\t550","MYCN\\tMn3yUjZveh4v\\tGENE\\tOCJ3wBBPeh4J\\t478\\t173","MLX/MONDO Complex\\tIuhA7dyleh3B\\tCOMPLEX\\t-1\\t483\\t604","MNT\\tmfvZ3Tqreh3u\\tGENE\\tTrTubnzSeh3h\\t815\\t436","MAX/MGA Complex\\tLwRHv9NUeh3R\\tCOMPLEX\\t-1\\t462\\t310","Cell growth, proliferation, apoptosis\\trU4TiKfKeh43\\tPROCESS\\t-1\\t-237\\t433","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","w4MBdulYeh48\\tOCJ3wBBPeh4J\\tyGKkO3Ajeh3V\\tBINDS\\t","kmXInTa9eh5O\\t6ZvsmDKBeh3H\\teH1TNcCVeh3F\\tBINDS\\t","Hv8GfgZPeh5T\\tyGKkO3Ajeh3V\\tGt92f6Iyeh3a\\tNONE\\t","9h-taWpfeh5Z\\tLwRHv9NUeh3R\\trU4TiKfKeh43\\tINHIBITS\\t","eTpDGcg6eh5B\\tOCJ3wBBPeh4J\\trU4TiKfKeh43\\tACTIVATES\\t","mfpvepQNeh5c\\tTrTubnzSeh3h\\tIuhA7dyleh3B\\tBINDS\\t","QJOD8bddeh5I\\tIuhA7dyleh3B\\trU4TiKfKeh43\\tACTIVATES\\t","9ShDYkfTeh5Q\\tO9V1RuKxeh3K\\teH1TNcCVeh3F\\tBINDS\\t","Vfrm_1Ezeh5E\\tTrTubnzSeh3h\\trU4TiKfKeh43\\tINHIBITS\\t","nrV2aZn8eh5L\\tyGKkO3Ajeh3V\\tTrTubnzSeh3h\\tBINDS\\t"],"NOTCH":["NOTCH","","Pathway involved in cell-cell communication, cell fate. Cleavage of Notch receptors leads to the displacement of a transcription repressor complex on RBPJ (a transcription factor also known as CSL) accompanied by recruitment of an activation complex (including MAMLs) leads to transcription of Notch target genes.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","NRARP\\tIyt-kiQdVYR4\\tGENE\\t-1\\t1392\\t357","CUL1\\tORzx_8_5UAjR\\tGENE\\t-1\\t861\\t171","CREBBP\\thrOQVgOCWtHH\\tGENE\\tamGWWOzfWrg1\\t1006\\t344","NCOR2\\ttRKlqV2HWQET\\tGENE\\t1WQdsd0RVSHH\\t919\\t500","SPEN\\tt3mLgYfBWQD4\\tGENE\\t1WQdsd0RVSHH\\t1078\\t439","NOTCH3\\t2YXLvEuJWVnS\\tGENE\\tfLn2ytnZVU-1\\t386\\t344"," \\tamGWWOzfWrg1\\tCOMPLEX\\t-1\\t1089\\t309","CNTN6\\t8xDiqqMtUlgK\\tGENE\\t-1\\t153\\t344","HES-X\\tCCp9TqYNVWpA\\tGENE\\t-1\\t1392\\t221","KAT2B\\tW6JlNq1wWtHA\\tGENE\\tamGWWOzfWrg1\\t1171\\t274","KDM5A\\tTHgZUx73WQED\\tGENE\\t1WQdsd0RVSHH\\t1240\\t439","DNER\\t8lwlJT8zUt7J\\tGENE\\t-1\\t386\\t439","NCOR1\\tVh9n-uUkWQDu\\tGENE\\t1WQdsd0RVSHH\\t917\\t440","CLEAVED NOTCH\\tH-nBa6GpUrhI\\tCOMPLEX\\t-1\\t781\\t316","FBXW7\\t5nfQJAxjT_z9\\tGENE\\t-1\\t630\\t171"," \\t1WQdsd0RVSHH\\tFAMILY\\t-1\\t1079\\t469","NOTCH1\\tVG_45lkLWVm6\\tGENE\\tfLn2ytnZVU-1\\t386\\t274","MALM3\\tdAIql3LLWtG5\\tGENE\\tamGWWOzfWrg1\\t1007\\t274","NOV\\tfhalsWFrUkbl\\tGENE\\t-1\\t153\\t274","JAG2\\tEjlh1U2VT-P2\\tGENE\\t-1\\t285\\t171"," \\tfLn2ytnZVU-1\\tCOMPLEX\\t-1\\t472\\t309","HEY-X\\t0mJB_ECxVXFr\\tGENE\\t-1\\t1392\\t288","PSEN2\\tXzuk75kgUufI\\tGENE\\t-1\\t558\\t439","EP300\\tq34LVe78WtHT\\tGENE\\tamGWWOzfWrg1\\t1170\\t344","NOTCH2\\tYBZcjlo4WVnH\\tGENE\\tfLn2ytnZVU-1\\t558\\t274","ARRDC1\\tQj8O9GJNT_AD\\tGENE\\t-1\\t454\\t171","NOTCH4\\tQf89YkiEWVne\\tGENE\\tfLn2ytnZVU-1\\t558\\t344","Cell growth, apoptosis\\tNvu3J1djU_IC\\tPROCESS\\t-1\\t1562\\t439","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","3ZGBwutXWvCf\\t1WQdsd0RVSHH\\tamGWWOzfWrg1\\tINHIBITS\\t","ojk1D4nOWbct\\tEjlh1U2VT-P2\\tfLn2ytnZVU-1\\tACTIVATES\\t","U40tVKQcWjcm\\tXzuk75kgUufI\\tfLn2ytnZVU-1\\tACTIVATES\\t","qgZ5w26hWm8v\\t8xDiqqMtUlgK\\tfLn2ytnZVU-1\\tINHIBITS\\t","xzRJacuuWiP-\\t5nfQJAxjT_z9\\tH-nBa6GpUrhI\\tINHIBITS\\t","_RaZlGxreARX\\tIyt-kiQdVYR4\\tNvu3J1djU_IC\\tINHIBITS\\t","6YudlCKlWygq\\tamGWWOzfWrg1\\tCCp9TqYNVWpA\\tACTIVATES\\t","6YYOMrO7W1Lu\\tamGWWOzfWrg1\\tIyt-kiQdVYR4\\tACTIVATES\\t","y9nj-EHqWlEU\\tfhalsWFrUkbl\\tfLn2ytnZVU-1\\tINHIBITS\\t","QgTnL-0zWfX-\\t8lwlJT8zUt7J\\tfLn2ytnZVU-1\\tACTIVATES\\t","YvuJzpCJWoS3\\tORzx_8_5UAjR\\t5nfQJAxjT_z9\\tACTIVATES\\t","QWoJOCVzW3SR\\t0mJB_ECxVXFr\\tNvu3J1djU_IC\\tACTIVATES\\t","9I6RH1JoWwwW\\tH-nBa6GpUrhI\\tamGWWOzfWrg1\\tACTIVATES\\t","4oG8A9OTWz_Z\\tamGWWOzfWrg1\\t0mJB_ECxVXFr\\tACTIVATES\\t","WZmI2ceJWg0e\\tQj8O9GJNT_AD\\tfLn2ytnZVU-1\\tINHIBITS\\t","U1KCxbf0W2Wy\\tCCp9TqYNVWpA\\tNvu3J1djU_IC\\tACTIVATES\\t"],"NRF2":["NRF2","","Involves the regulation of the transcription factor NFE2L2 by KEAP1. NFE2L2 regulates genes with the antioxidant response elements (ARE) that aid in cellular response against oxidative stress thought to aid in cancer chemoresistance.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","KEAP1\\tOkLgTv_3eszi\\tGENE\\t-1\\t294\\t147","CUL3\\tpxCvh_ojeszm\\tGENE\\t-1\\t469\\t147","Oxidative Stress Response\\tE9bpVpoWeszr\\tPROCESS\\t-1\\t598\\t240","NFE2L2\\tsKw8nuDgeszp\\tGENE\\t-1\\t385\\t240","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","wIxLZx13eszt\\tOkLgTv_3eszi\\tsKw8nuDgeszp\\tINHIBITS\\t","aWKwI8rJesz1\\tsKw8nuDgeszp\\tE9bpVpoWeszr\\tACTIVATES\\t","Ng79Bysjeszx\\tpxCvh_ojeszm\\tsKw8nuDgeszp\\tINHIBITS\\t"],"OV-2011-Cell-cycle-signaling-pathway":["OV-2011-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDKN2A\\toN50crvCRjmK\\tGENE\\t-1\\t635\\t68\\t","RB1\\ttJj5RrqJRq1h\\tGENE\\t-1\\t635\\t299\\t","CCNE1\\tSx3IX8ExBTXu\\tGENE\\tFY8bF0WdRsru\\t639\\t148\\t","CCND1\\tBIDGlk8LBTX9\\tGENE\\tFY8bF0WdRsru\\t550\\t207\\t","CYCLINS\\tFY8bF0WdRsru\\tFAMILY\\t-1\\t634\\t177\\t","Cell cycle progression\\tnnswnmMyRv3y\\tPROCESS\\t-1\\t635\\t373\\t","CCND2\\tIxg8lLJLBTXd\\tGENE\\tFY8bF0WdRsru\\t719\\t207\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","duEMY1UXR86v\\tFY8bF0WdRsru\\ttJj5RrqJRq1h\\tINHIBITS","__OC9xbiR-Fr\\ttJj5RrqJRq1h\\tnnswnmMyRv3y\\tACTIVATES","VqDZTZnER7cZ\\toN50crvCRjmK\\tFY8bF0WdRsru\\tINHIBITS"],"OV-2011-Notch-signaling-pathway":["OV-2011-Notch-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","MAML3\\twTL7UE_SDIWe\\tGENE\\tZ64sAxBCSrsH\\t800\\t380\\t","JAG1\\tEy82kzAQDKzS\\tGENE\\tHPXERf3USgjx\\t462\\t280\\t","MAML1\\tICfP9aB2DIWS\\tGENE\\tZ64sAxBCSrsH\\t800\\t247\\t","JAG2\\tFvIadI1RDKzA\\tGENE\\tHPXERf3USgjx\\t462\\t351\\t","JAG\\tHPXERf3USgjx\\tFAMILY\\t-1\\t462\\t315\\t","NOTCH3\\txiGB_3VdSfd3\\tGENE\\t-1\\t632\\t316\\t","MAML2\\t9xWqi9JKDIWF\\tGENE\\tZ64sAxBCSrsH\\t800\\t314\\t","MAML\\tZ64sAxBCSrsH\\tFAMILY\\t-1\\t800\\t314\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","osh5OcaxTA2q\\tHPXERf3USgjx\\txiGB_3VdSfd3\\tINHIBITS","AivX6u8YTCYD\\tZ64sAxBCSrsH\\txiGB_3VdSfd3\\tINHIBITS"],"OV-2011-RTK-RAS-PI(3)K-pathway":["OV-2011-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","KRAS\\t4SZmwk65Q2AX\\tGENE\\t-1\\t529\\t119\\t","AKT\\tJXx22AmtmHua\\tFAMILY\\t-1\\t263\\t234\\t","AKT2\\t1QP6Io9jmSsb\\tGENE\\tJXx22AmtmHua\\t263\\t203\\t","NF1\\tbKlDARX_QzeJ\\tGENE\\t-1\\t529\\t41\\t","Proliferation/survival\\teyOUahBEQth7\\tPROCESS\\t-1\\t413\\t402\\t","AKT1\\tpw2OFJfHmSsq\\tGENE\\tJXx22AmtmHua\\t263\\t265\\t","PTEN\\tqx1xPdYgQgUA\\tGENE\\t-1\\t263\\t41\\t","BRAF\\tXLdjd_rNQ5TF\\tGENE\\t-1\\t529\\t239\\t","PIK3CA\\t9WGkKXm-QhuR\\tGENE\\t-1\\t263\\t119\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","lwcl1MvdmPEO\\tJXx22AmtmHua\\teyOUahBEQth7\\tACTIVATES","6CO_N8liRIA4\\tbKlDARX_QzeJ\\t4SZmwk65Q2AX\\tINHIBITS","TDBL0RUZRJb3\\t4SZmwk65Q2AX\\tXLdjd_rNQ5TF\\tACTIVATES","uXgITAznRMO2\\tXLdjd_rNQ5TF\\teyOUahBEQth7\\tACTIVATES","vkkqRMcgQ90m\\t4SZmwk65Q2AX\\t9WGkKXm-QhuR\\tACTIVATES","oxMyRc9ImLT_\\t9WGkKXm-QhuR\\tJXx22AmtmHua\\tACTIVATES","_9kjQAkpdEP0\\tqx1xPdYgQgUA\\t9WGkKXm-QhuR\\tINHIBITS"],"PI3K":["PI3K","","A signaling cascade involving PI3K phosphorylation of AKT leading to the activation of the mTORC1 complex. The mTORC1 functions as a metabolic sensor and controls protein abundance by affecting processes involved in protein production and RNA translation leading to changes in cell growth and survival.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","AKT3\\teWz9lexke0kY\\tGENE\\tyEOAK96Ye0j-\\t752\\t327","RPTOR\\tKHzd_YdNe0jd\\tGENE\\tJKE-mm1le0jZ\\t759\\t730","PIK3CA\\tBpH76ff7e0iw\\tGENE\\t-1\\t595\\t176","PIK3R2\\t5lBs8QfFe0i_\\tGENE\\tiK4blWyDe0i1\\t804\\t167","RHEB\\t8eeCwYTqe0jC\\tGENE\\t-1\\t599\\t619","PIK3R\\tiK4blWyDe0i1\\tFAMILY\\t-1\\t804\\t166","AKT\\tyEOAK96Ye0j-\\tFAMILY\\t-1\\t594\\t327","mTORC2\\tMMeMHe4ze0kj\\tFAMILY\\t-1\\t421\\t730","TSC\\t3b8rKMrke0jF\\tFAMILY\\t-1\\t596\\t486","AKT2\\t9o76blkNe0kR\\tGENE\\tyEOAK96Ye0j-\\t594\\t327","mTORC1\\tJKE-mm1le0jZ\\tFAMILY\\t-1\\t678\\t730","PPP2R1A\\tHY1OO1uEe0jv\\tGENE\\t-1\\t971\\t326","PIK3R3\\tGy1IflZce0i5\\tGENE\\tiK4blWyDe0i1\\t804\\t227","PTEN\\tHL_nLOSce0jV\\tGENE\\t-1\\t594\\t91","MTOR\\t_WbyV7oYe0jj\\tGENE\\tJKE-mm1le0jZ\\t597\\t730","PIK3R1\\tj_DI0z3Xe0i8\\tGENE\\tiK4blWyDe0i1\\t804\\t106","Cell growth\\t_wytH85He0jQ\\tPROCESS\\t-1\\t601\\t860","INPP4B\\t2ZOWMzsce0j4\\tGENE\\t-1\\t372\\t178","TSC1\\tx2juQzTie0jM\\tGENE\\t3b8rKMrke0jF\\t596\\t459","TSC2\\tzs4f_I93e0jJ\\tGENE\\t3b8rKMrke0jF\\t596\\t513","RICTOR\\tDg3B9H1Me0ks\\tGENE\\tMMeMHe4ze0kj\\t421\\t730","AKT1\\tTDuOMRUee0kH\\tGENE\\tyEOAK96Ye0j-\\t437\\t327","STK11\\tURGrIXe2e0kd\\tGENE\\t-1\\t336\\t483","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","an7n5soQe0k8\\tyEOAK96Ye0j-\\t3b8rKMrke0jF\\tINHIBITS\\t","YeQpbZw0e0lG\\t3b8rKMrke0jF\\t8eeCwYTqe0jC\\tINHIBITS\\t","wjtVfwEee0lB\\tJKE-mm1le0jZ\\t_wytH85He0jQ\\tACTIVATES\\t","6Mr0F0gAe0lD\\tURGrIXe2e0kd\\t3b8rKMrke0jF\\tACTIVATES\\t","EigHAJh7e0lI\\tHL_nLOSce0jV\\tBpH76ff7e0iw\\tINHIBITS\\t","s7B8LZsde0k-\\tBpH76ff7e0iw\\tyEOAK96Ye0j-\\tACTIVATES\\t","1T4VmG08e0lL\\tiK4blWyDe0i1\\tBpH76ff7e0iw\\tINHIBITS\\t","3yNlj0Tge0k2\\t8eeCwYTqe0jC\\tJKE-mm1le0jZ\\tACTIVATES\\t","NuGuIugXe0k6\\t2ZOWMzsce0j4\\tBpH76ff7e0iw\\tINHIBITS\\t","pYhyONrDe0lP\\tDg3B9H1Me0ks\\tURGrIXe2e0kd\\tACTIVATES\\t","h-JnEMgBe0lN\\tHY1OO1uEe0jv\\tyEOAK96Ye0j-\\tINHIBITS\\t"],"RTK-RAS":["RTK-RAS","","A signaling cascade pathway initiated by activation of RTKs followed signal transduction through Ras then Raf and then MEK family members. This cascade leads to the activation of several transcription factors that regulate processes involving cell proliferation and survival.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","NRAS\\tQHZo7kkDfrMO\\tGENE\\tb8V1sXZDfrL1\\t1142\\t348","ROS1\\ttNj2tohofrKR\\tGENE\\t8tMooF5vfrKJ\\t664\\t166","KIT\\tgWlRUSfzfrKt\\tGENE\\t8tMooF5vfrKJ\\t1142\\t104","Translation\\t7CK2REgNfrKF\\tPROCESS\\t-1\\t881\\t625","PTPN11\\tjTtQAhJrfrJx\\tGENE\\t-1\\t504\\t348","RAS\\tb8V1sXZDfrL1\\tFAMILY\\t-1\\t1063\\t348","RET\\tyjRzsMVifrKy\\tGENE\\t8tMooF5vfrKJ\\t504\\t166","CBL\\t0a_o8sXafrJh\\tGENE\\t-1\\t504\\t262","Proliferation\\t3VFXQGLzfrJ-\\tPROCESS\\t-1\\t559\\t626","FLT3\\tIpmlW5vMfrLc\\tGENE\\t8tMooF5vfrKJ\\t982\\t166","NF1\\t59lXGxKMfrJn\\tGENE\\t-1\\t1142\\t262","NTRK2\\t5SlBGbo1frLr\\tGENE\\t8tMooF5vfrKJ\\t1302\\t166","ERRFI1\\t-V-9_6fAfrJj\\tGENE\\t-1\\t664\\t262","ARAF\\tcBahXkGvfrMn\\tGENE\\tsApg3-IVfrMe\\t982\\t429","FGFR3\\t1EucZO9pfrLJ\\tGENE\\t8tMooF5vfrKJ\\t824\\t104","HRAS\\tBB8hBTZ4frME\\tGENE\\tb8V1sXZDfrL1\\t982\\t348","MET\\t_yKldPkzfrKZ\\tGENE\\t8tMooF5vfrKJ\\t1142\\t41","RAF1\\tLk9sb9wzfrM5\\tGENE\\tsApg3-IVfrMe\\t1302\\t429","RAC1\\tzDRSUmjffrJ7\\tGENE\\t-1\\t614\\t511","FGFR1\\tRFZ2wD4YfrKf\\tGENE\\t8tMooF5vfrKJ\\t504\\t104","MEK\\t3psJQJmGfrJV\\tFAMILY\\t-1\\t1062\\t511","FGFR2\\tnTecsKLYfrKj\\tGENE\\t8tMooF5vfrKJ\\t664\\t104","KRAS\\te8tWMLoVfrL9\\tGENE\\tb8V1sXZDfrL1\\t824\\t348","BRAF\\tNM12nD_nfrMx\\tGENE\\tsApg3-IVfrMe\\t1142\\t429","ERBB2\\tC45Adl13frKV\\tGENE\\t8tMooF5vfrKJ\\t664\\t41","ERBB4\\tZ-e0kCBwfrKN\\tGENE\\t8tMooF5vfrKJ\\t982\\t41","MAPK1\\tR9ZNAxVRfrJ3\\tGENE\\t-1\\t783\\t511","RAF\\tsApg3-IVfrMe\\tFAMILY\\t-1\\t1142\\t429","EGFR\\t9Psi8emvfrK3\\tGENE\\t8tMooF5vfrKJ\\t504\\t41","RASA1\\tZSZjKexZfrJ0\\tGENE\\t-1\\t1301\\t262","FGFR4\\tMfs6mvKHfrKo\\tGENE\\t8tMooF5vfrKJ\\t982\\t104","IGF1R\\tCvsyhyzdfrLQ\\tGENE\\t8tMooF5vfrKJ\\t1302\\t104","ERBB3\\trORV55VHfrK9\\tGENE\\t8tMooF5vfrKJ\\t824\\t41","Cell survival\\tvmWLLGP3frKC\\tPROCESS\\t-1\\t718\\t626","SOS1\\tbdPjTyaDfrJu\\tGENE\\t-1\\t982\\t262","RIT1\\tpTVg5xU2frMW\\tGENE\\tb8V1sXZDfrL1\\t1302\\t348","MAP2K2\\tgqrpYTM0frJa\\tGENE\\t3psJQJmGfrJV\\t1142\\t511","ALK\\t1o_9LYSFfrLV\\tGENE\\t8tMooF5vfrKJ\\t824\\t166","NTRK1\\tT6ceghhpfrLj\\tGENE\\t8tMooF5vfrKJ\\t1142\\t166","RTKs\\t8tMooF5vfrKJ\\tFAMILY\\t-1\\t903\\t103","PDGFRA\\ty8PZ8iiyfrLD\\tGENE\\t8tMooF5vfrKJ\\t1302\\t41","MAP2K1\\tQ2i0HY0HfrJe\\tGENE\\t3psJQJmGfrJV\\t982\\t511","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","Rokn-zgqfrNN\\t-V-9_6fAfrJj\\t8tMooF5vfrKJ\\tINHIBITS\\t","BvZejKrrfrNX\\t59lXGxKMfrJn\\tb8V1sXZDfrL1\\tINHIBITS\\t","CEWkH2kYfrNa\\tZSZjKexZfrJ0\\tb8V1sXZDfrL1\\tINHIBITS\\t","In_EmpIgfrNv\\tR9ZNAxVRfrJ3\\t7CK2REgNfrKF\\tACTIVATES\\t","NYpLslu-frNh\\tsApg3-IVfrMe\\t3psJQJmGfrJV\\tACTIVATES\\t","8OWp0SRTfrNm\\tzDRSUmjffrJ7\\tR9ZNAxVRfrJ3\\tACTIVATES\\t","OnjXx-jmfrNk\\t3psJQJmGfrJV\\tR9ZNAxVRfrJ3\\tACTIVATES\\t","HPbM8huafrNU\\tbdPjTyaDfrJu\\tb8V1sXZDfrL1\\tACTIVATES\\t","qtmobl6_frNF\\t0a_o8sXafrJh\\t8tMooF5vfrKJ\\tINHIBITS\\t","8EmU4xtSfrNo\\tR9ZNAxVRfrJ3\\t3VFXQGLzfrJ-\\tACTIVATES\\t","n_C1QGZ2frNr\\tR9ZNAxVRfrJ3\\tvmWLLGP3frKC\\tACTIVATES\\t","vQrHXLexfrNR\\t8tMooF5vfrKJ\\tbdPjTyaDfrJu\\tACTIVATES\\t","gs6EgVUcfrNd\\tb8V1sXZDfrL1\\tsApg3-IVfrMe\\tACTIVATES\\t"],"SKCM-2015-Cell-cycle-signaling-pathway":["SKCM-2015-Cell-cycle-signaling-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","CDKN2A\\tnpKTJggFJS4I\\tGENE\\t-1\\t442\\t89\\t","CYCLINS\\tIba11JzIJVxh\\tFAMILY\\t-1\\t520\\t175\\t","CDK4\\tWcN_CcOrC9iS\\tGENE\\tIba11JzIJVxh\\t442\\t175\\t","E2F\\tXI_rBXYxJXPk\\tGENE\\t-1\\t520\\t372\\t","CCND1\\tv_gEFTZBC9il\\tGENE\\tIba11JzIJVxh\\t599\\t175\\t","Cell cycle progression\\te_ZEQUYtJz1B\\tPROCESS\\t-1\\t520\\t484\\t","RB1\\t4vxRSXTEJWO8\\tGENE\\t-1\\t520\\t276\\t","CDKN2B\\tuK5CVzIeJayA\\tGENE\\t-1\\t599\\t89\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","vJf6xitbJwIp\\tnpKTJggFJS4I\\tIba11JzIJVxh\\tINHIBITS","MrgZ3psqKpK7\\tXI_rBXYxJXPk\\te_ZEQUYtJz1B\\tACTIVATES","fQLLdtj0JzEP\\t4vxRSXTEJWO8\\tXI_rBXYxJXPk\\tINHIBITS","Msdh3q6kJxC4\\tuK5CVzIeJayA\\tIba11JzIJVxh\\tINHIBITS","vjchZOt9JyOV\\tIba11JzIJVxh\\t4vxRSXTEJWO8\\tINHIBITS"],"SKCM-2015-Histone-modification-pathway":["SKCM-2015-Histone-modification-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","AURKA\\tUUHLK2LeLlq4\\tGENE\\t-1\\t425\\t166\\t","PPP6C\\tyZeIXzgALlHL\\tGENE\\t-1\\t231\\t166\\t","ARID2\\t4dCj0PbWLn10\\tGENE\\t-1\\t425\\t308\\t","Genetic stability\\txWY6P0idNRza\\tPROCESS\\t-1\\t624\\t195\\t","Chromatin remodeling\\t-c29Xam0NfMu\\tPROCESS\\t-1\\t231\\t263\\t","Chromatid segregation\\tCl7g3xLYLmwQ\\tPROCESS\\t-1\\t624\\t133\\t","Transcriptional control\\tX7mpJiW8Lodu\\tPROCESS\\t-1\\t231\\t342\\t","Epigenetic regulation\\t8D0fnb8SLrSQ\\tPROCESS\\t-1\\t231\\t437\\t","IDH1\\tuHqIeo66Lqq9\\tGENE\\t-1\\t425\\t435\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","9WzDoyMZNXKq\\tUUHLK2LeLlq4\\tCl7g3xLYLmwQ\\tACTIVATES","nh2AMryLNpj_\\tuHqIeo66Lqq9\\t8D0fnb8SLrSQ\\tACTIVATES","3ixp2EynNWMa\\tyZeIXzgALlHL\\tUUHLK2LeLlq4\\tACTIVATES","-scKWlPDNX6-\\tUUHLK2LeLlq4\\txWY6P0idNRza\\tACTIVATES","8YJTZK-INn2c\\t4dCj0PbWLn10\\t-c29Xam0NfMu\\tACTIVATES","MdvHv-NFNoui\\t4dCj0PbWLn10\\tX7mpJiW8Lodu\\tACTIVATES"],"SKCM-2015-RTK-RAS-PI(3)K-pathway":["SKCM-2015-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Proliferation\\tOpbQ5N5BIR7T\\tPROCESS\\t-1\\t528\\t524\\t","NF1\\tz9P8VET8IH-v\\tGENE\\t-1\\t256\\t147\\t","NRAS\\tstZUUqWp9HOb\\tGENE\\tdQrC9TeNIX-m\\t374\\t236\\t","Survival\\tDXOfiysJIUYY\\tPROCESS\\t-1\\t1107\\t329\\t","RAS\\tdQrC9TeNIX-m\\tFAMILY\\t-1\\t529\\t236\\t","RAC1\\t8CZU3OY7IlD5\\tGENE\\t-1\\t880\\t364\\t","KIT\\tyhNL3UBnIL-5\\tGENE\\t-1\\t880\\t120\\t","AKT Pathway\\t5m3zxs1KINf7\\tPROCESS\\t-1\\t880\\t241\\t","MAP2K1\\teNN9GlQaIQwL\\tGENE\\t-1\\t528\\t435\\t","PTEN\\tRtyOk-X-ITE3\\tGENE\\t-1\\t1106\\t241\\t","BRAF\\t4dRiJZfvIPWm\\tGENE\\t-1\\t528\\t338\\t","KRAS\\thksSbzGD9HOJ\\tGENE\\tdQrC9TeNIX-m\\t685\\t236\\t","HRAS\\tNNEMBzDV9HNw\\tGENE\\tdQrC9TeNIX-m\\t530\\t236\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","soPzg51UIxxj\\t8CZU3OY7IlD5\\t5m3zxs1KINf7\\tACTIVATES","Cf02-ifyItuD\\tdQrC9TeNIX-m\\t4dRiJZfvIPWm\\tACTIVATES","BqXWl69hI1zW\\tyhNL3UBnIL-5\\t5m3zxs1KINf7\\tACTIVATES","1Aepvid-IqoA\\tz9P8VET8IH-v\\tdQrC9TeNIX-m\\tINHIBITS","J01_493NIzbP\\t4dRiJZfvIPWm\\t5m3zxs1KINf7\\tACTIVATES","PCKlXBgfIu2g\\t4dRiJZfvIPWm\\teNN9GlQaIQwL\\tACTIVATES","q7PHpnTgIwuD\\t8CZU3OY7IlD5\\teNN9GlQaIQwL\\tACTIVATES","FxAnigvrI2_i\\t5m3zxs1KINf7\\tDXOfiysJIUYY\\tACTIVATES","uglecyI1IsGD\\tyhNL3UBnIL-5\\tdQrC9TeNIX-m\\tACTIVATES","iCnUjDjmIvi5\\teNN9GlQaIQwL\\tOpbQ5N5BIR7T\\tACTIVATES","HEzFrHkCI0l-\\tRtyOk-X-ITE3\\t5m3zxs1KINf7\\tINHIBITS"],"SKCM-2015-TP53-pathway":["SKCM-2015-TP53-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Apoptosis\\tTc8UdIhSLCIT\\tPROCESS\\t-1\\t289\\t372\\t","TP53\\tGBRktWHeLBFQ\\tGENE\\t-1\\t381\\t273\\t","MDM2\\t-VggHhz9K-1w\\tGENE\\t-1\\t381\\t193\\t","CDKN2B\\tB3XBHs3yK9o7\\tGENE\\t-1\\t456\\t108\\t","Senescence\\tcLoUlZOZLD0x\\tPROCESS\\t-1\\t456\\t372\\t","CDKN2A\\thml0YQ9_K8tc\\tGENE\\t-1\\t289\\t108\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","gBzu2KRcLSuV\\tB3XBHs3yK9o7\\t-VggHhz9K-1w\\tINHIBITS","XenUWWntLTzX\\t-VggHhz9K-1w\\tGBRktWHeLBFQ\\tINHIBITS","WNkolmuaLVxV\\tGBRktWHeLBFQ\\tcLoUlZOZLD0x\\tACTIVATES","N3sY9gBuLVHA\\tGBRktWHeLBFQ\\tTc8UdIhSLCIT\\tACTIVATES","2r21RRvbLR21\\thml0YQ9_K8tc\\t-VggHhz9K-1w\\tINHIBITS"],"STAD-2014-RTK-RAS-PI(3)K-pathway":["STAD-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","PTEN\\t6OFxgP6h9_xG\\tGENE\\t-1\\t341\\t496\\t","RASA1\\tY6PU3f3t93HB\\tGENE\\t-1\\t419\\t172\\t","KRAS\\txCs5lqYG7Z1Z\\tGENE\\t7oEmRnmC-RqY\\t341\\t265\\t","JAK2\\tL1LDTgi27i0r\\tGENE\\tuCiynVqo-CBg\\t167\\t366\\t","PIK3R1\\tij4dXcH1-Ah1\\tGENE\\t-1\\t516\\t496\\t","RAS\\t7oEmRnmC-RqY\\tFAMILY\\t-1\\t420\\t265\\t","NRAS\\tdwqmccUP7Z1E\\tGENE\\t7oEmRnmC-RqY\\t499\\t265\\t","ERBB2\\tL6F3ltyJ7i1T\\tGENE\\tuCiynVqo-CBg\\t167\\t233\\t","EGFR\\tOrbXhKLA7i1D\\tGENE\\tuCiynVqo-CBg\\t167\\t164\\t","FGFR2\\tGc4Ktrgt7i1M\\tGENE\\tuCiynVqo-CBg\\t167\\t430\\t","PIK3CA\\tWBOfcnh9993x\\tGENE\\t-1\\t419\\t394\\t","MET\\tgbmLOkrS7i1x\\tGENE\\tuCiynVqo-CBg\\t167\\t496\\t","RTK\\tuCiynVqo-CBg\\tFAMILY\\t-1\\t167\\t330\\t","ERBB3\\t6Uq7nWdq7i1f\\tGENE\\tuCiynVqo-CBg\\t167\\t299\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","20X5Aj7K-bWX\\t6OFxgP6h9_xG\\tWBOfcnh9993x\\tINHIBITS","VZzlIbfS-edr\\tuCiynVqo-CBg\\t7oEmRnmC-RqY\\tACTIVATES","KrNMU6gX-f84\\tuCiynVqo-CBg\\tWBOfcnh9993x\\tACTIVATES","1JHahVpJ-cGV\\tij4dXcH1-Ah1\\tWBOfcnh9993x\\tINHIBITS","IyUACdpr-YSa\\t7oEmRnmC-RqY\\tWBOfcnh9993x\\tACTIVATES","OPPikJRZ-XUc\\tY6PU3f3t93HB\\t7oEmRnmC-RqY\\tINHIBITS","vbNOH609-aVf\\tWBOfcnh9993x\\t7oEmRnmC-RqY\\tACTIVATES"],"TGF-Beta":["TGF-Beta","","A signaling network involved in growth, proliferation, apoptosis, and differentiation involving the activation of TGFβ receptors by the cytokine TGFβ that leads to the activation of gene transcription by SMADs.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","SMAD2\\t0qBZliXOfmft\\tGENE\\tXkk8SKlafmfn\\t335\\t410","SMAD\\tXkk8SKlafmfn\\tFAMILY\\t-1\\t424\\t446","Activin ligands\\tt_Q1Nr-BfmfR\\tGENE\\t-1\\t509\\t146","ACVR2B\\t9Ev1i-2HfmfX\\tGENE\\tboabbY81fmfT\\t508\\t307","TGFBR\\tfXKkJObYfmfb\\tFAMILY\\t-1\\t329\\t277","ACVR2A\\t_sm7432ofmfV\\tGENE\\tboabbY81fmfT\\t509\\t244","SMAD3\\tgepyfePvfmfz\\tGENE\\tXkk8SKlafmfn\\t514\\t410","TGFBR2\\tDOJnFoHNfmfi\\tGENE\\tfXKkJObYfmfb\\t329\\t311","TGFB ligands\\tgOOpkueqfmfM\\tGENE\\t-1\\t329\\t146","ACVR2\\tboabbY81fmfT\\tFAMILY\\t-1\\t508\\t275","TGFBR1\\tSb4zGrL3fmfe\\tGENE\\tfXKkJObYfmfb\\t329\\t244","Proliferation, stem/progenitor phenotype\\tA7jMDR2Mfmf-\\tPROCESS\\t-1\\t427\\t588","SMAD4\\tOKApI7Qwfmf4\\tGENE\\tXkk8SKlafmfn\\t428\\t483","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","7FzJ455ZfmgP\\tboabbY81fmfT\\tXkk8SKlafmfn\\tACTIVATES\\t","WEH0_CRqfmgL\\tfXKkJObYfmfb\\tXkk8SKlafmfn\\tACTIVATES\\t","hnOBi-Z1fmgI\\tt_Q1Nr-BfmfR\\tboabbY81fmfT\\tACTIVATES\\t","Ax3S1Kd8fmgE\\tgOOpkueqfmfM\\tfXKkJObYfmfb\\tACTIVATES\\t"],"THCA-2014-RTK-RAS-PI(3)K-pathway":["THCA-2014-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","MTOR\\tG9y6ZBee_nmX\\tGENE\\t-1\\t649\\t417\\t","NRAS\\tOjQjq-cc7_5M\\tGENE\\tEOfQTOkE_iLF\\t646\\t25\\t","AKT\\tfi2ldWMn_lnk\\tGENE\\t-1\\t647\\t265\\t","BCL2\\tjwugB2iP_y0Y\\tGENE\\t-1\\t841\\t559\\t","NTR1\\turLIUCXQ70w-\\tGENE\\tKen9wGw8AKU3\\t293\\t-7\\t","RAS\\t1TJ8hV1I_ZR5\\tFAMILY\\t-1\\t374\\t186\\t","RAF\\txSi1Do6v_sYj\\tGENE\\t-1\\t841\\t186\\t","DUSPs\\t7C2rFt7t_fdn\\tGENE\\t-1\\t298\\t524\\t","BRAF\\tpq87LogY_1LI\\tGENE\\t-1\\t1024\\t186\\t","pERK\\tF4o-nfWI_urx\\tGENE\\t-1\\t841\\t344\\t","Apoptosis\\tAoCFeVPVAu6s\\tPROCESS\\t-1\\t841\\t636\\t","BRAF\\tPAsWh9Rz_dco\\tGENE\\t-1\\t167\\t276\\t","HRAS\\tLPvNA7nc7_57\\tGENE\\tEOfQTOkE_iLF\\t804\\t25\\t","NTR\\tKen9wGw8AKU3\\tFAMILY\\t-1\\t371\\t22\\t","BAD\\tUiVUw9Es_x5s\\tGENE\\t-1\\t841\\t489\\t","Cell proliferation/Growth\\ttGen8Qvz_qez\\tPROCESS\\t-1\\t298\\t628\\t","KRAS\\tr0hPxhCH7_5n\\tGENE\\tEOfQTOkE_iLF\\t961\\t25\\t","PI3K\\tK3RfoHn2_kQ2\\tGENE\\t-1\\t647\\t186\\t","pMEK\\tlMJhnvzk_tYZ\\tGENE\\t-1\\t841\\t264\\t","pMEK\\teM1eNr4K_cOi\\tGENE\\t-1\\t298\\t346\\t","p90\\t-6lLHt7R_v9K\\tGENE\\t-1\\t841\\t419\\t","NTR3\\tJtRMUb9N70xa\\tGENE\\tKen9wGw8AKU3\\t378\\t51\\t","Protein synthesis\\tWQ8orp6Y_ouv\\tPROCESS\\t-1\\t649\\t627\\t","RAS\\tEOfQTOkE_iLF\\tFAMILY\\t-1\\t804\\t25\\t","NTR2\\tWK-XNi2970xq\\tGENE\\tKen9wGw8AKU3\\t450\\t-7\\t","RET\\tCDUJn7rL_YRR\\tGENE\\t-1\\t167\\t186\\t","pERK\\tGyr_vYK7_eUm\\tGENE\\t-1\\t298\\t434\\t","RAF\\tEJdSJtPH_amI\\tGENE\\t-1\\t374\\t276\\t","TSC2\\tEhaBKk9-_mvL\\tGENE\\t-1\\t647\\t345\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","HComBP3QBFSr\\txSi1Do6v_sYj\\tlMJhnvzk_tYZ\\tACTIVATES","5ow_H43KBLyc\\tjwugB2iP_y0Y\\tAoCFeVPVAu6s\\tINHIBITS","lafIlqasBaaQ\\tEJdSJtPH_amI\\teM1eNr4K_cOi\\tACTIVATES","pCtfuSydBdaS\\t7C2rFt7t_fdn\\tGyr_vYK7_eUm\\tINHIBITS","YyPlgJXcA__s\\tEhaBKk9-_mvL\\tG9y6ZBee_nmX\\tINHIBITS","iA_J_DZbBefG\\t7C2rFt7t_fdn\\ttGen8Qvz_qez\\tACTIVATES","sJ4XKEpFA6LY\\tKen9wGw8AKU3\\tEOfQTOkE_iLF\\tACTIVATES","8BieawZKA3u7\\tCDUJn7rL_YRR\\t1TJ8hV1I_ZR5\\tACTIVATES","r79uM2_gBZKl\\t1TJ8hV1I_ZR5\\tEJdSJtPH_amI\\tACTIVATES","ACvH-CYzA8yR\\tEOfQTOkE_iLF\\tK3RfoHn2_kQ2\\tACTIVATES","TmRxcbx_Bbb7\\teM1eNr4K_cOi\\tGyr_vYK7_eUm\\tACTIVATES","teHhboSJBVGJ\\tpq87LogY_1LI\\txSi1Do6v_sYj\\tINHIBITS","XmrMteXSBBt-\\tG9y6ZBee_nmX\\tWQ8orp6Y_ouv\\tACTIVATES","hU00JaNWBYJR\\tPAsWh9Rz_dco\\teM1eNr4K_cOi\\tACTIVATES","FXb60wuvBcMi\\tGyr_vYK7_eUm\\t7C2rFt7t_fdn\\tACTIVATES","-iHJfCCVA_Hh\\tfi2ldWMn_lnk\\tEhaBKk9-_mvL\\tACTIVATES","aW6elpjvBKyK\\tUiVUw9Es_x5s\\tjwugB2iP_y0Y\\tINHIBITS","LlJV17wNBHMh\\tlMJhnvzk_tYZ\\tF4o-nfWI_urx\\tACTIVATES","z-CbE5XoBJ5o\\t-6lLHt7R_v9K\\tUiVUw9Es_x5s\\tINHIBITS","F9EcWkHvBUJ2\\tpq87LogY_1LI\\txSi1Do6v_sYj\\tACTIVATES","GqN5v_YIBEbi\\tEOfQTOkE_iLF\\txSi1Do6v_sYj\\tACTIVATES","FWnfRc3YBC44\\t-6lLHt7R_v9K\\tG9y6ZBee_nmX\\tINHIBITS","AV9s-fteA9y7\\tK3RfoHn2_kQ2\\tfi2ldWMn_lnk\\tACTIVATES","3BgREqkhA22-\\tKen9wGw8AKU3\\t1TJ8hV1I_ZR5\\tACTIVATES","r31OK-oJBIby\\tF4o-nfWI_urx\\t-6lLHt7R_v9K\\tACTIVATES"],"TP53":["TP53","","Pathway centered around the regulation of the tumor suppressor TP53, a gene that regulates apoptosis, cell cycle arrest, senescence, and DNA repair.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","Cell survival, proliferation\\txDGjGXGMfyG3\\tPROCESS\\t-1\\t133\\t449","CDKN2A\\tgx_YWb90fyGp\\tGENE\\t-1\\t-23\\t235","MDM4\\tsT2W03HDfyGe\\tGENE\\tlK7pvMYZfyGU\\t319\\t127","DNA replication stress\\tYvaYsZcufyHH\\tPROCESS\\t-1\\t597\\t51","RPS6KA3\\tIu0kJKKGfyGM\\tGENE\\t-1\\t597\\t328","MDM2\\tqv-3H9tXfyGZ\\tGENE\\tlK7pvMYZfyGU\\t149\\t127","Senescence, apoptosis\\tIkv91AlOfyG-\\tPROCESS\\t-1\\t325\\t448","\\tlK7pvMYZfyGU\\tFAMILY\\t-1\\t234\\t127","TP53\\tES5FXiJLfyGu\\tGENE\\t-1\\t233\\t328","Oncogenic stress\\tHZxSxJBmfyHE\\tPROCESS\\t-1\\t333\\t222","ATM\\tc4Ad6ZYBfyGx\\tGENE\\t-1\\t597\\t130","CHEK2\\tJvx4WzdtfyGk\\tGENE\\t-1\\t597\\t225","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","8KZq5XsifyHL\\tES5FXiJLfyGu\\txDGjGXGMfyG3\\tINHIBITS\\t","5e5CkdqDfyHg\\tgx_YWb90fyGp\\tES5FXiJLfyGu\\tINHIBITS\\t","WAvkWWubfyHO\\tJvx4WzdtfyGk\\tIu0kJKKGfyGM\\tACTIVATES\\t","wMOYIFFAfyHS\\tgx_YWb90fyGp\\tlK7pvMYZfyGU\\tINHIBITS\\t","Zd519CgjfyHd\\tHZxSxJBmfyHE\\tES5FXiJLfyGu\\tACTIVATES\\t","lFKJrXsmfyHb\\tES5FXiJLfyGu\\tIkv91AlOfyG-\\tACTIVATES\\t","geyskuwAfyHV\\tlK7pvMYZfyGU\\tES5FXiJLfyGu\\tINHIBITS\\t","t-G0U6EJfyHR\\tIu0kJKKGfyGM\\tES5FXiJLfyGu\\tACTIVATES\\t","vNvONKmFfyHj\\tYvaYsZcufyHH\\tc4Ad6ZYBfyGx\\tACTIVATES\\t","25K5WaLwfyHX\\tc4Ad6ZYBfyGx\\tJvx4WzdtfyGk\\tACTIVATES\\t"],"UCEC-2013-RTK-RAS-PI(3)K-pathway":["UCEC-2013-RTK-RAS-PI(3)K-pathway","","","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","RTK\\tZAPqdjSDgCgU\\tFAMILY\\t-1\\t391\\t148\\t","SOX17\\tBXxulVFjgHIs\\tGENE\\t-1\\t227\\t344\\t","KRAS\\t76Wg78V_gDdz\\tGENE\\t-1\\t391\\t260\\t","Proliferation\\tsoh0TxsPgq1P\\tPROCESS\\t-1\\t803\\t409\\t","PTEN\\tQha2pMPigm3R\\tGENE\\t-1\\t1085\\t215\\t","Translation\\t0L6ulMimgteS\\tPROCESS\\t-1\\t1056\\t409\\t","Proliferation\\tMsHCffb6gNY_\\tPROCESS\\t-1\\t391\\t515\\t","CTNNB1\\ti1tsajIagMAh\\tGENE\\t-1\\t391\\t430\\t","PIK3R1\\tOJ-s2c_vgnZa\\tGENE\\t-1\\t1085\\t295\\t","GSK3B\\twXwgUTNkgFnQ\\tGENE\\t-1\\t391\\t344\\t","FBXW7\\t57SvZmLzgKXg\\tGENE\\t-1\\t557\\t344\\t","Cell survival\\tNI-5QJa7gr4W\\tPROCESS\\t-1\\t935\\t409\\t","ERBB2\\tY1idRwsY3N1k\\tGENE\\tZAPqdjSDgCgU\\t469\\t148\\t","PIK3CA\\tsJDwUf9sgpI_\\tGENE\\t-1\\t915\\t256\\t","FGFR2\\tM56YC0J03N1R\\tGENE\\tZAPqdjSDgCgU\\t313\\t148\\t","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE","pauS7C64g9TO\\tOJ-s2c_vgnZa\\tsJDwUf9sgpI_\\tINHIBITS","9ZMCIs5Ygf4j\\twXwgUTNkgFnQ\\ti1tsajIagMAh\\tINHIBITS","BXhEIXgdhBkV\\tsJDwUf9sgpI_\\t0L6ulMimgteS\\tACTIVATES","DLrHfIVSgegJ\\t76Wg78V_gDdz\\twXwgUTNkgFnQ\\tINHIBITS","y_ifcFbCgcdH\\tZAPqdjSDgCgU\\t76Wg78V_gDdz\\tACTIVATES","F5LjanELggnD\\tBXxulVFjgHIs\\ti1tsajIagMAh\\tINHIBITS","2-tF8Ncmgiab\\ti1tsajIagMAh\\tMsHCffb6gNY_\\tACTIVATES","tJv0DWt8g-nF\\tsJDwUf9sgpI_\\tsoh0TxsPgq1P\\tACTIVATES","rps45EGCg_aW\\tsJDwUf9sgpI_\\tNI-5QJa7gr4W\\tACTIVATES","w8Id1r73g8Xz\\tQha2pMPigm3R\\tsJDwUf9sgpI_\\tINHIBITS","daN2ajyqghSz\\t57SvZmLzgKXg\\ti1tsajIagMAh\\tINHIBITS"],"WNT":["WNT","","Involved in both development and tissue homeostasis. The canonical Wnt pathway involves signal transduction initiated by Wnt ligand binding to Frizzled family receptors leading to the dysregulation of beta-catenin degradation and ultimately, the induction of transcription via TCF/LEF transcription factors by beta-catenin.","","--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY--","SFRP3\\tEiQGCkYbf2Ue\\tGENE\\taqCo94T-f2UY\\t214\\t113","DKK\\tRpK5JOBLf2U5\\tFAMILY\\t-1\\t819\\t306","TLE1\\toLjLH1mCf2T6\\tGENE\\tz1BS71lif2T2\\t702\\t625","TLE4\\tUjSaC5Phf2T3\\tGENE\\tz1BS71lif2T2\\t858\\t685","SFRP1\\tLgjBpjM-f2Ux\\tGENE\\taqCo94T-f2UY\\t63\\t147","Groucho\\tz1BS71lif2T2\\tFAMILY\\t-1\\t780\\t655","APC\\tKzWeNNlbf2UJ\\tGENE\\t-1\\t228\\t521","TCF7L1\\tletl9duUf2WR\\tGENE\\tabIO9oDkf2WA\\t341\\t691","WIF1\\t5iL99X9Jf2Tw\\tGENE\\t-1\\t452\\t61","TLE2\\tR0vKN1sif2T9\\tGENE\\tz1BS71lif2T2\\t858\\t625","DKK1\\tDRSXFgEQf2U9\\tGENE\\tRpK5JOBLf2U5\\t739\\t275","TCF7L2\\tRPLZ4osLf2Wb\\tGENE\\tabIO9oDkf2WA\\t499\\t690","AXIN1\\tKq4oChNGf2Vz\\tGENE\\tkoQkppv4f2Vq\\t599\\t443","WNT Dual Receptor Complex\\tqRabkjW8f2VS\\tCOMPLEX\\t-1\\t458\\t304","SFRP2\\thqXcbX1yf2U1\\tGENE\\taqCo94T-f2UY\\t63\\t203","LRP5\\tDK7CkEYCf2Vi\\tGENE\\tqRabkjW8f2VS\\t536\\t276","TCF7\\tpK9uMdhUf2WH\\tGENE\\tabIO9oDkf2WA\\t422\\t632","TLE3\\tmA6zfzOUf2UA\\tGENE\\tz1BS71lif2T2\\t702\\t685","Cell proliferation\\thFWwt8jrf2UV\\tPROCESS\\t-1\\t135\\t667","TCF/LEF\\tabIO9oDkf2WA\\tCOMPLEX\\t-1\\t420\\t661","AXIN\\tkoQkppv4f2Vq\\tFAMILY\\t-1\\t678\\t443","RNF43\\telbyeD9tf2UD\\tGENE\\t-1\\t144\\t303","CTNNB1\\t3GRyWPj8f2UM\\tGENE\\t-1\\t417\\t485","DKK2\\tyYuxYP9Qf2VC\\tGENE\\tRpK5JOBLf2U5\\t899\\t275","FZDs\\tjR_K-66Df2VX\\tGENE\\tqRabkjW8f2VS\\t381\\t301","DKK4\\tlRy7Jj0Nf2VN\\tGENE\\tRpK5JOBLf2U5\\t899\\t337","SFRP\\taqCo94T-f2UY\\tFAMILY\\t-1\\t138\\t169","WNT ligands\\twCThVVjSf2Tz\\tGENE\\t-1\\t452\\t168","LRP6\\tnr8aMEmUf2Vd\\tGENE\\tqRabkjW8f2VS\\t536\\t332","GSK3B\\tmuxig_C-f2UG\\tGENE\\t-1\\t228\\t446","SFRP5\\tB0f2GOAff2Us\\tGENE\\taqCo94T-f2UY\\t214\\t226","AMER1\\tpAChF0thf2US\\tGENE\\t-1\\t599\\t519","SFRP4\\tQMwh9gC-f2Ul\\tGENE\\taqCo94T-f2UY\\t214\\t170","AXIN2\\tpD0TMIi_f2V5\\tGENE\\tkoQkppv4f2Vq\\t758\\t443","DKK3\\twStErGAEf2VH\\tGENE\\tRpK5JOBLf2U5\\t739\\t337","","--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPEINTERACTION_PUBMED_ID","XWIzsv56f2Wm\\taqCo94T-f2UY\\twCThVVjSf2Tz\\tINHIBITS\\t","Bps0rTlOf2W1\\tpAChF0thf2US\\t3GRyWPj8f2UM\\tINHIBITS\\t","Bt39Pfi9f2W-\\tqRabkjW8f2VS\\tmuxig_C-f2UG\\tACTIVATES\\t","x3LsoTaTf2Ww\\telbyeD9tf2UD\\tqRabkjW8f2VS\\tINHIBITS\\t","PgNv7XZif2XA\\tmuxig_C-f2UG\\t3GRyWPj8f2UM\\tINHIBITS\\t","-u2h2V6ef2XK\\tabIO9oDkf2WA\\thFWwt8jrf2UV\\tACTIVATES\\t","an6n-VWDf2Wt\\twCThVVjSf2Tz\\tqRabkjW8f2VS\\tACTIVATES\\t","h4-_HrCRf2W4\\tqRabkjW8f2VS\\tkoQkppv4f2Vq\\tACTIVATES\\t","3NL_goRgf2W6\\tkoQkppv4f2Vq\\t3GRyWPj8f2UM\\tINHIBITS\\t","-q76c9PDf2Wy\\tRpK5JOBLf2U5\\tqRabkjW8f2VS\\tINHIBITS\\t","h9BN2IKjf2Wr\\t5iL99X9Jf2Tw\\twCThVVjSf2Tz\\tINHIBITS\\t","rRLoK5NMf2XD\\tKzWeNNlbf2UJ\\t3GRyWPj8f2UM\\tINHIBITS\\t","l7-kESH_f2XH\\tz1BS71lif2T2\\tabIO9oDkf2WA\\tINHIBITS\\t"]}')},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ3cHgiIGhlaWdodD0iNDdweCIgdmlld0JveD0iMCAwIDQ3IDQ3IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NyA0NzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGcgaWQ9IkxheWVyXzFfMTEwXyI+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTE3LjU2NywxNS45MzhsLTIuODU5LTIuNzAyYzAuMzMzLTAuNjA1LDAuNTM5LTEuMjksMC41MzktMi4wMjljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0LTQuMjM5DQoJCQkJYy0yLjM0MywwLTQuMjQzLDEuODk2LTQuMjQzLDQuMjM5YzAsMi4zNDMsMS45LDQuMjQxLDQuMjQzLDQuMjQxYzAuODI2LDAsMS41OS0wLjI0NiwyLjI0Mi0wLjY1NGwyLjg1NSwyLjY5OQ0KCQkJCUMxNi41MzYsMTYuOTIyLDE3LjAyMywxNi4zOTksMTcuNTY3LDE1LjkzOHoiLz4NCgkJCTxwYXRoIGQ9Ik0yOS42NiwxNS42bDMuNzk5LTYuMzkzYzAuMzc0LDAuMTA3LDAuNzYyLDAuMTg0LDEuMTY5LDAuMTg0YzIuMzQ3LDAsNC4yNDQtMS44OTgsNC4yNDQtNC4yNDENCgkJCQljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0NC00LjIzOWMtMi4zNDMsMC00LjIzOSwxLjg5Ni00LjIzOSw0LjIzOWMwLDEuMTYzLDAuNDY5LDIuMjE0LDEuMjI3LDIuOTgxbC0zLjc4Nyw2LjM3NQ0KCQkJCUMyOC40OCwxNC44MDEsMjkuMDk0LDE1LjE2OSwyOS42NiwxNS42eiIvPg0KCQkJPHBhdGggZD0iTTQyLjc2MiwyMC45NTJjLTEuODI0LDAtMy4zNjksMS4xNTktMy45NjgsMi43NzVsLTUuMjc4LTAuNTIxYzAsMC4wNCwwLjAwNiwwLjA3OCwwLjAwNiwwLjExNw0KCQkJCWMwLDAuNjg4LTAuMDc2LDEuMzYtMC4yMTMsMi4wMDlsNS4yNzYsMC41MjFjMC4zMTksMi4wMjQsMi4wNjIsMy41NzYsNC4xNzcsMy41NzZjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzOA0KCQkJCUM0NywyMi44NSw0NS4xMDQsMjAuOTUyLDQyLjc2MiwyMC45NTJ6Ii8+DQoJCQk8cGF0aCBkPSJNMjguMTk3LDM3LjYyNGwtMS4xOC01LjE1NmMtMC42NjYsMC4yMzItMS4zNTksMC4zOTgtMi4wODIsMC40ODFsMS4xODIsNS4xNTdjLTEuMzU1LDAuNzA5LTIuMjksMi4xMS0yLjI5LDMuNzQ2DQoJCQkJYzAsMi4zNDIsMS44OTYsNC4yMzcsNC4yNDMsNC4yMzdjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzN0MzMi4zMTEsMzkuNTUzLDMwLjQ3OSwzNy42OTIsMjguMTk3LDM3LjYyNHoiLz4NCgkJCTxwYXRoIGQ9Ik0xNC4zNTcsMjUuMzdsLTYuNTcsMi4yMDFjLTAuNzU4LTEuMTU4LTIuMDYzLTEuOTI2LTMuNTQ4LTEuOTI2QzEuODk2LDI1LjY0NSwwLDI3LjU0MiwwLDI5Ljg4NA0KCQkJCWMwLDIuMzQ1LDEuODk2LDQuMjQyLDQuMjM5LDQuMjQyYzIuMzQxLDAsNC4yNDItMS44OTcsNC4yNDItNC4yNDJjMC0wLjA5OC0wLjAyMS0wLjE4OC0wLjAyOS0wLjI4NGw2LjU5MS0yLjIwNw0KCQkJCUMxNC43NDYsMjYuNzUyLDE0LjUxLDI2LjA3NywxNC4zNTcsMjUuMzd6Ii8+DQoJCQk8Y2lyY2xlIGN4PSIyMy44MyIgY3k9IjIzLjMyMyIgcj0iNy4yNzEiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports=require("react-toastify")},function(t,e){t.exports=require("oncoprintjs")},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU1MC44MDFweCIgaGVpZ2h0PSI1NTAuODAxcHgiIHZpZXdCb3g9IjAgMCA1NTAuODAxIDU1MC44MDEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU1MC44MDEgNTUwLjgwMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTE0Ni43NDcsMjc2LjcwOGMwLTEzLjk5OC05LjcxMS0yMi4zNTItMjYuODg3LTIyLjM1MmMtNi45OSwwLTExLjcyNiwwLjY3NS0xNC4yMDQsMS4zNTV2NDQuOTI3DQoJCWMyLjkzMiwwLjY3Niw2LjUzOSwwLjg5NiwxMS41MiwwLjg5NkMxMzUuNDQ5LDMwMS41NDYsMTQ2Ljc0NywyOTIuMjgsMTQ2Ljc0NywyNzYuNzA4eiIvPg0KCTxwYXRoIGQ9Ik00ODguNDI2LDE5Ny4wMTlINDc1LjJ2LTYzLjgxNmMwLTAuMzk4LTAuMDYzLTAuNzk5LTAuMTE2LTEuMjAyYy0wLjAyMS0yLjUzNC0wLjgyNy01LjAyMy0yLjU2Mi02Ljk5NUwzNjYuMzI1LDMuNjk0DQoJCWMtMC4wMzItMC4wMzEtMC4wNjMtMC4wNDItMC4wODUtMC4wNzZjLTAuNjMzLTAuNzA3LTEuMzcxLTEuMjk1LTIuMTUxLTEuODA0Yy0wLjIzMS0wLjE1NS0wLjQ2NC0wLjI4NS0wLjcwNi0wLjQxOQ0KCQljLTAuNjc2LTAuMzY5LTEuMzkzLTAuNjc1LTIuMTMxLTAuODk2Yy0wLjItMC4wNTYtMC4zOC0wLjEzOC0wLjU4LTAuMTlDMzU5Ljg3LDAuMTE5LDM1OS4wMzcsMCwzNTguMTkzLDBIOTcuMg0KCQljLTExLjkxOCwwLTIxLjYsOS42OTMtMjEuNiwyMS42MDF2MTc1LjQxM0g2Mi4zNzdjLTE3LjA0OSwwLTMwLjg3MywxMy44MTgtMzAuODczLDMwLjg3M3YxNjAuNTQ1DQoJCWMwLDE3LjA0MywxMy44MjQsMzAuODcsMzAuODczLDMwLjg3aDEzLjIyNFY1MjkuMmMwLDExLjkwNyw5LjY4MiwyMS42MDEsMjEuNiwyMS42MDFoMzU2LjRjMTEuOTA3LDAsMjEuNi05LjY5MywyMS42LTIxLjYwMQ0KCQlWNDE5LjMwMmgxMy4yMjZjMTcuMDQ0LDAsMzAuODcxLTEzLjgyNywzMC44NzEtMzAuODd2LTE2MC41NEM1MTkuMjk3LDIxMC44MzgsNTA1LjQ3LDE5Ny4wMTksNDg4LjQyNiwxOTcuMDE5eiBNOTcuMiwyMS42MDUNCgkJaDI1MC4xOTN2MTEwLjUxM2MwLDUuOTY3LDQuODQxLDEwLjgsMTAuOCwxMC44aDk1LjQwN3Y1NC4xMDhIOTcuMlYyMS42MDV6IE0yMzQuMzQ0LDMzNS44NnY0NS44MzFoLTMxLjYwMVYyMjkuNTI0aDQwLjE4NA0KCQlsMzEuNjExLDU1Ljc1OWM5LjAyNSwxNi4wMzEsMTguMDY0LDM0Ljk4MywyNC44MjUsNTIuMTU0aDAuNjc1Yy0yLjI1Ny0yMC4xMDMtMi45MzMtNDAuNjQzLTIuOTMzLTYzLjQ0di00NC40NzNoMzEuNjE0djE1Mi4xNjcNCgkJaC0zNi4xMTdsLTMyLjUxNi01OC43MDNjLTkuMDQ5LTE2LjI1My0xOC45NzEtMzUuODkyLTI2LjQzOC01My43MjdsLTAuNjY1LDAuMjIyQzIzMy45MDYsMjg5LjU4LDIzNC4zNDQsMzExLjAyNywyMzQuMzQ0LDMzNS44NnoNCgkJIE03MS41NTYsMzgxLjY5MVYyMzEuNTZjMTAuNjEzLTEuODA0LDI1LjUxNi0zLjE1OSw0Ni41MDYtMy4xNTljMjEuMjE1LDAsMzYuMzUzLDQuMDYxLDQ2LjUwOSwxMi4xOTINCgkJYzkuNjk4LDcuNjczLDE2LjI1NSwyMC4zMTMsMTYuMjU1LDM1LjIxOWMwLDE0Ljg5Ny00Ljk1OSwyNy41NDktMTMuOTk5LDM2LjEyM2MtMTEuNzM4LDExLjA2My0yOS4xMjMsMTYuMDMxLTQ5LjQ0MSwxNi4wMzENCgkJYy00LjUyMiwwLTguNTkzLTAuMjMxLTExLjczNi0wLjY3NXY1NC40MTFINzEuNTU2VjM4MS42OTF6IE00NTMuNjAxLDUyMy4zNTNIOTcuMlY0MTkuMzAyaDM1Ni40VjUyMy4zNTN6IE00ODUuNjUyLDM3NC42ODgNCgkJYy0xMC42MSwzLjYwNy0zMC43MTMsOC41ODUtNTAuODA1LDguNTg1Yy0yNy43NTksMC00Ny44NzItNy4wMDMtNjEuODU3LTIwLjU0NWMtMTMuOTk1LTEzLjEtMjEuNjg0LTMyLjk3LTIxLjQ1Mi01NS4zMTgNCgkJYzAuMjIyLTUwLjU2OSwzNy4wMy03OS40NjMsODYuOTE3LTc5LjQ2M2MxOS42NDQsMCwzNC43ODMsMy44MjksNDIuMjE5LDcuNDQ2bC03LjIxNCwyNy41NDNjLTguMzY5LTMuNjE3LTE4Ljc1Mi02LjU1LTM1LjQ1OC02LjU1DQoJCWMtMjguNjU2LDAtNTAuMzQxLDE2LjI1Ni01MC4zNDEsNDkuMjJjMCwzMS4zODIsMTkuNjQ5LDQ5Ljg5Miw0Ny44NzIsNDkuODkyYzcuODk1LDAsMTQuMjE4LTAuOTAxLDE2LjkzNC0yLjI1N3YtMzEuODM1aC0yMy40OTMNCgkJdi0yNi44NjloNTYuNjc5VjM3NC42ODh6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU1MC44MDFweCIgaGVpZ2h0PSI1NTAuODAxcHgiIHZpZXdCb3g9IjAgMCA1NTAuODAxIDU1MC44MDEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU1MC44MDEgNTUwLjgwMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ4OC40MjYsMTk3LjAxOUg0NzUuMnYtNjMuODE2YzAtMC4zOTgtMC4wNjMtMC43OTktMC4xMTYtMS4yMDJjLTAuMDIxLTIuNTM0LTAuODI3LTUuMDIzLTIuNTYyLTYuOTk1TDM2Ni4zMjUsMy42OTQNCgkJYy0wLjAzMi0wLjAzMS0wLjA2My0wLjA0Mi0wLjA4NS0wLjA3NmMtMC42MzMtMC43MDctMS4zNzEtMS4yOTUtMi4xNTEtMS44MDRjLTAuMjMxLTAuMTU1LTAuNDY0LTAuMjg1LTAuNzA2LTAuNDE5DQoJCWMtMC42NzYtMC4zNjktMS4zOTMtMC42NzUtMi4xMzEtMC44OTZjLTAuMi0wLjA1Ni0wLjM4LTAuMTM4LTAuNTgtMC4xOUMzNTkuODcsMC4xMTksMzU5LjAzNywwLDM1OC4xOTMsMEg5Ny4yDQoJCWMtMTEuOTE4LDAtMjEuNiw5LjY5My0yMS42LDIxLjYwMXYxNzUuNDEzSDYyLjM3N2MtMTcuMDQ5LDAtMzAuODczLDEzLjgxOC0zMC44NzMsMzAuODczdjE2MC41NDUNCgkJYzAsMTcuMDQzLDEzLjgyNCwzMC44NywzMC44NzMsMzAuODdoMTMuMjI0VjUyOS4yYzAsMTEuOTA3LDkuNjgyLDIxLjYwMSwyMS42LDIxLjYwMWgzNTYuNGMxMS45MDcsMCwyMS42LTkuNjkzLDIxLjYtMjEuNjAxDQoJCVY0MTkuMzAyaDEzLjIyNmMxNy4wNDQsMCwzMC44NzEtMTMuODI3LDMwLjg3MS0zMC44N3YtMTYwLjU0QzUxOS4yOTcsMjEwLjgzOCw1MDUuNDcsMTk3LjAxOSw0ODguNDI2LDE5Ny4wMTl6IE05Ny4yLDIxLjYwNQ0KCQloMjUwLjE5M3YxMTAuNTEzYzAsNS45NjcsNC44NDEsMTAuOCwxMC44LDEwLjhoOTUuNDA3djU0LjEwOEg5Ny4yVjIxLjYwNXogTTMzOC44NzEsMjI1LjY3MkwyODQuNTQ1LDM4Ni45NmgtNDIuNTkxDQoJCWwtNTEuNjktMTYxLjI4OGgzOS45NjdsMTkuNjE3LDY4LjE5NmM1LjUwOCwxOS4xNDMsMTAuNTMxLDM3LjU2NywxNC4zNiw1Ny42N2gwLjcxN2M0LjA2MS0xOS4zODUsOS4wODktMzguNTI3LDE0LjU5Mi01Ni45NTMNCgkJbDIwLjU4NS02OC45MThoMzguNzdWMjI1LjY3MnogTTY4LjQ1OCwzNzkuNTRsNy40MTUtMzAuMTUzYzkuODExLDUuMDIxLDI0Ljg4OCwxMC4wNTEsNDAuNDM5LDEwLjA1MQ0KCQljMTYuNzUxLDAsMjUuNjA3LTYuOTM1LDI1LjYwNy0xNy40NjVjMC0xMC4wNTItNy42NjItMTUuNzk1LTI3LjA1LTIyLjczNGMtMjYuOC05LjMyOC00NC4yNjMtMjQuMTY4LTQ0LjI2My00Ny42MTENCgkJYzAtMjcuNTI0LDIyLjk3MS00OC41NzksNjEuMDE0LTQ4LjU3OWMxOC4xODgsMCwzMS41OTEsMy44MjMsNDEuMTU5LDguMTMxbC04LjEyNiwyOS40MzdjLTYuNDY1LTMuMTE2LTE3Ljk0NS03LjY1Ny0zMy43NDUtNy42NTcNCgkJYy0xNS43OTEsMC0yMy40NTQsNy4xODMtMjMuNDU0LDE1LjU1MmMwLDEwLjI5Niw5LjA4OSwxNC44NDIsMjkuOTE3LDIyLjczMWMyOC40NjgsMTAuNTM2LDQxLjg3MSwyNS4zNjUsNDEuODcxLDQ4LjA5NA0KCQljMCwyNy4wNDItMjAuODEyLDUwLjAxMy02NS4wOSw1MC4wMTNDOTUuNzMxLDM4OS4zNDksNzcuNTM4LDM4NC41NzEsNjguNDU4LDM3OS41NHogTTQ1My42MDEsNTIzLjM1M0g5Ny4yVjQxOS4zMDJoMzU2LjRWNTIzLjM1M3oNCgkJIE00ODguOTExLDM3OS41NGMtMTEuMjQzLDMuODIzLTMyLjUzNyw5LjEwMy01My44MzEsOS4xMDNjLTI5LjQzNywwLTUwLjczLTcuNDI2LTY1LjU3LTIxLjc3OQ0KCQljLTE0LjgzOS0xMy44NzUtMjIuOTcxLTM0Ljk0Mi0yMi43MzgtNTguNjI1YzAuMjUzLTUzLjYwNCwzOS4yNTUtODQuMjM1LDkyLjEzNy04NC4yMzVjMjAuODEsMCwzNi44NTIsNC4wNzMsNDQuNzQsNy44OTYNCgkJbC03LjY1NywyOS4yMDJjLTguODU5LTMuODI5LTE5Ljg0OS02Ljk1LTM3LjU2Ny02Ljk1Yy0zMC4zOTYsMC01My4zNTcsMTcuMjMzLTUzLjM1Nyw1Mi4xNzNjMCwzMy4yNjUsMjAuODEsNTIuODgyLDUwLjczLDUyLjg4Mg0KCQljOC4zNzUsMCwxNS4wNzItMC45NiwxNy45NC0yLjM5NXYtMzMuNzQ1aC0yNC44NzV2LTI4LjQ3MWg2MC4wNDlWMzc5LjU0TDQ4OC45MTEsMzc5LjU0eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports=require("tippy.js")},function(t,e){t.exports=require("file-saver")},function(t,e,a){},function(t,e){t.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZWRpdCI+PHBhdGggZD0iTTExIDRINGEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyI+PC9wYXRoPjxwYXRoIGQ9Ik0xOC41IDIuNWEyLjEyMSAyLjEyMSAwIDAgMSAzIDNMMTIgMTVsLTQgMSAxLTQgOS41LTkuNXoiPjwvcGF0aD48L3N2Zz4="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMjMuNjI1IDIzLjYyNSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjMuNjI1IDIzLjYyNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzAzMDEwNDsiIGQ9Ik0xMS44MTIsMEM1LjI4OSwwLDAsNS4yODksMCwxMS44MTJzNS4yODksMTEuODEzLDExLjgxMiwxMS44MTNzMTEuODEzLTUuMjksMTEuODEzLTExLjgxMw0KCQlTMTguMzM1LDAsMTEuODEyLDB6IE0xNC4yNzEsMTguMzA3Yy0wLjYwOCwwLjI0LTEuMDkyLDAuNDIyLTEuNDU1LDAuNTQ4Yy0wLjM2MiwwLjEyNi0wLjc4MywwLjE4OS0xLjI2MiwwLjE4OQ0KCQljLTAuNzM2LDAtMS4zMDktMC4xOC0xLjcxNy0wLjUzOXMtMC42MTEtMC44MTQtMC42MTEtMS4zNjdjMC0wLjIxNSwwLjAxNS0wLjQzNSwwLjA0NS0wLjY1OWMwLjAzMS0wLjIyNCwwLjA4LTAuNDc2LDAuMTQ3LTAuNzU5DQoJCWwwLjc2MS0yLjY4OGMwLjA2Ny0wLjI1OCwwLjEyNS0wLjUwMywwLjE3MS0wLjczMWMwLjA0Ni0wLjIzLDAuMDY4LTAuNDQxLDAuMDY4LTAuNjMzYzAtMC4zNDItMC4wNzEtMC41ODItMC4yMTItMC43MTcNCgkJYy0wLjE0My0wLjEzNS0wLjQxMi0wLjIwMS0wLjgxMy0wLjIwMWMtMC4xOTYsMC0wLjM5OCwwLjAyOS0wLjYwNSwwLjA5Yy0wLjIwNSwwLjA2My0wLjM4MywwLjEyLTAuNTI5LDAuMTc2bDAuMjAxLTAuODI4DQoJCWMwLjQ5OC0wLjIwMywwLjk3NS0wLjM3NywxLjQzLTAuNTIxYzAuNDU1LTAuMTQ2LDAuODg1LTAuMjE4LDEuMjktMC4yMThjMC43MzEsMCwxLjI5NSwwLjE3OCwxLjY5MiwwLjUzDQoJCWMwLjM5NSwwLjM1MywwLjU5NCwwLjgxMiwwLjU5NCwxLjM3NmMwLDAuMTE3LTAuMDE0LDAuMzIzLTAuMDQxLDAuNjE3Yy0wLjAyNywwLjI5NS0wLjA3OCwwLjU2NC0wLjE1MiwwLjgxMWwtMC43NTcsMi42OA0KCQljLTAuMDYyLDAuMjE1LTAuMTE3LDAuNDYxLTAuMTY3LDAuNzM2Yy0wLjA0OSwwLjI3NS0wLjA3MywwLjQ4NS0wLjA3MywwLjYyNmMwLDAuMzU2LDAuMDc5LDAuNTk5LDAuMjM5LDAuNzI4DQoJCWMwLjE1OCwwLjEyOSwwLjQzNSwwLjE5NCwwLjgyNywwLjE5NGMwLjE4NSwwLDAuMzkyLTAuMDMzLDAuNjI2LTAuMDk3YzAuMjMyLTAuMDY0LDAuNC0wLjEyMSwwLjUwNi0wLjE3TDE0LjI3MSwxOC4zMDd6DQoJCSBNMTQuMTM3LDcuNDI5Yy0wLjM1MywwLjMyOC0wLjc3OCwwLjQ5Mi0xLjI3NSwwLjQ5MmMtMC40OTYsMC0wLjkyNC0wLjE2NC0xLjI4LTAuNDkyYy0wLjM1NC0wLjMyOC0wLjUzMy0wLjcyNy0wLjUzMy0xLjE5Mw0KCQljMC0wLjQ2NSwwLjE4LTAuODY1LDAuNTMzLTEuMTk2YzAuMzU2LTAuMzMyLDAuNzg0LTAuNDk3LDEuMjgtMC40OTdjMC40OTcsMCwwLjkyMywwLjE2NSwxLjI3NSwwLjQ5Nw0KCQljMC4zNTMsMC4zMzEsMC41MywwLjczMSwwLjUzLDEuMTk2QzE0LjY2Nyw2LjcwMywxNC40OSw3LjEwMSwxNC4xMzcsNy40Mjl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDU3IDU3Ig0KICAgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTcgNTc7Ig0KICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImFkZC1zZWxlY3RlZC1uZXcuc3ZnIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSI+PG1ldGFkYXRhDQogICBpZD0ibWV0YWRhdGE0NyI+PHJkZjpSREY+PGNjOldvcmsNCiAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICBpZD0iZGVmczQ1Ij4NCgkNCgkNCgkNCgkNCjwvZGVmcz48c29kaXBvZGk6bmFtZWR2aWV3DQogICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgZ3JpZHRvbGVyYW5jZT0iMTAiDQogICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEwOTciDQogICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI3MTkiDQogICBpZD0ibmFtZWR2aWV3NDMiDQogICBzaG93Z3JpZD0iZmFsc2UiDQogICBpbmtzY2FwZTp6b29tPSI0LjE0MDM1MDkiDQogICBpbmtzY2FwZTpjeD0iLTEwLjc0Nzg4MSINCiAgIGlua3NjYXBlOmN5PSIyOC41Ig0KICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICBpbmtzY2FwZTp3aW5kb3cteT0iMCINCiAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiDQogICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+DQo8cGF0aA0KICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgIGlkPSJwYXRoMiINCiAgIGQ9Ik0gMjguNjYsNiBIIDkuMzQgQyA3LjQ5OCw2IDYsNy40OTggNiw5LjM0IFYgMjguNjYgQyA2LDMwLjUwMiA3LjQ5OCwzMiA5LjM0LDMyIEggMjguNjYgQyAzMC41MDIsMzIgMzIsMzAuNTAyIDMyLDI4LjY2IFYgOS4zNCBDIDMyLDcuNDk4IDMwLjUwMiw2IDI4LjY2LDYgWiIgLz48cGF0aA0KICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgIGlkPSJwYXRoOCINCiAgIGQ9Ik0gNTEsMzcgSCA0MSBWIDI3IGMgMCwtMS4xMDQgLTAuODk2LC0yIC0yLC0yIC0xLjEwNCwwIC0yLDAuODk2IC0yLDIgViAzNyBIIDI3IGMgLTEuMTA0LDAgLTIsMC44OTYgLTIsMiAwLDEuMTA0IDAuODk2LDIgMiwyIGggMTAgdiAxMCBjIDAsMS4xMDQgMC44OTYsMiAyLDIgMS4xMDQsMCAyLC0wLjg5NiAyLC0yIFYgNDEgaCAxMCBjIDEuMTA0LDAgMiwtMC44OTYgMiwtMiAwLC0xLjEwNCAtMC44OTYsLTIgLTIsLTIgeiIgLz4NCjxnDQogICBpZD0iZzEyIj4NCjwvZz4NCjxnDQogICBpZD0iZzE0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzE2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzE4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzIwIj4NCjwvZz4NCjxnDQogICBpZD0iZzIyIj4NCjwvZz4NCjxnDQogICBpZD0iZzI0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzI2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzI4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzMwIj4NCjwvZz4NCjxnDQogICBpZD0iZzMyIj4NCjwvZz4NCjxnDQogICBpZD0iZzM0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzM2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzM4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzQwIj4NCjwvZz4NCjwvc3ZnPg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTcgNTciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU3IDU3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNMjIuNjYsMEgzLjM0QzEuNDk4LDAsMCwxLjQ5OCwwLDMuMzR2MTkuMzJDMCwyNC41MDIsMS40OTgsMjYsMy4zNCwyNmgxOS4zMmMxLjg0MiwwLDMuMzQtMS40OTgsMy4zNC0zLjM0VjMuMzQNCgkJQzI2LDEuNDk4LDI0LjUwMiwwLDIyLjY2LDB6Ii8+DQoJPHBhdGggZD0iTTMzLjM0LDI2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMy4zNEM1NiwxLjQ5OCw1NC41MDIsMCw1Mi42NiwwSDMzLjM0QzMxLjQ5OCwwLDMwLDEuNDk4LDMwLDMuMzR2MTkuMzINCgkJQzMwLDI0LjUwMiwzMS40OTgsMjYsMzMuMzQsMjZ6Ii8+DQoJPHBhdGggZD0iTTIyLjY2LDMwSDMuMzRDMS40OTgsMzAsMCwzMS40OTgsMCwzMy4zNHYxOS4zMkMwLDU0LjUwMiwxLjQ5OCw1NiwzLjM0LDU2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMzMuMzQNCgkJQzI2LDMxLjQ5OCwyNC41MDIsMzAsMjIuNjYsMzB6Ii8+DQoJPHBhdGggZD0iTTU1LDQxSDQ1VjMxYzAtMS4xMDQtMC44OTYtMi0yLTJzLTIsMC44OTYtMiwydjEwSDMxYy0xLjEwNCwwLTIsMC44OTYtMiwyczAuODk2LDIsMiwyaDEwdjEwYzAsMS4xMDQsMC44OTYsMiwyLDINCgkJczItMC44OTYsMi0yVjQ1aDEwYzEuMTA0LDAsMi0wLjg5NiwyLTJTNTYuMTA0LDQxLDU1LDQxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports=require("tippy.js/dist/tippy.css")},function(t,e){t.exports=require("react-tooltip")},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTM1LjQzNiwwSDcuNzU1djYzLjk1MmgyNy42ODJMMzUuNDM2LDBMMzUuNDM2LDB6IE0zMi41NzMsNjEuMDg5SDEwLjYxOFYyLjg2M2gyMS45NTVWNjEuMDg5eiBNNzAuMjc0LDI2LjQ4OGgtMjcuNjgNCgkJdjM3LjQ2NGgyNy42ODJWMjYuNDg4SDcwLjI3NHogTTY3LjQxMiw2MS4wODlINDUuNDU3VjI5LjM1MWgyMS45NTVWNjEuMDg5eiBNNzQuNTcxLDcwLjM5NXY1LjAxMkgwLjgzNXYtNS4wMTJINzQuNTcxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjkwLjk1NnB4IiBoZWlnaHQ9IjkwLjk1N3B4IiB2aWV3Qm94PSIwIDAgOTAuOTU2IDkwLjk1NyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgOTAuOTU2IDkwLjk1NzsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQxLjY2MSwxMy41MDFIMTMuOTc5djYzLjk1M2gyNy42ODJWMTMuNTAxeiBNMzguNzk3LDc0LjU5MUgxNi44NDJWMTYuMzY2aDIxLjk1NVY3NC41OTF6IE03Ni40OTksMjYuNzQ3SDQ4LjgxOHYzNy40NjUNCgkJSDc2LjVMNzYuNDk5LDI2Ljc0N0w3Ni40OTksMjYuNzQ3eiBNNzMuNjM3LDYxLjM0N0g1MS42ODJWMjkuNjA5aDIxLjk1NVY2MS4zNDd6IE0xMC45NzgsNDIuOTczdjUuMDExSDB2LTUuMDExSDEwLjk3OHoNCgkJIE05MC45NTYsNDIuOTczdjUuMDExSDc5Ljk3OXYtNS4wMTFIOTAuOTU2eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTM1LjQzNiwxMS40NTRINy43NTV2NjMuOTUyaDI3LjY4MkwzNS40MzYsMTEuNDU0TDM1LjQzNiwxMS40NTR6IE0zMi41NzMsNzIuNTQzSDEwLjYxOFYxNC4zMTdoMjEuOTU1VjcyLjU0M3oNCgkJIE03MC4yNzQsMTEuNDU0aC0yNy42OHYzNy40NjRoMjcuNjgyVjExLjQ1NEg3MC4yNzR6IE02Ny40MTIsNDYuMDU1SDQ1LjQ1N1YxNC4zMTdoMjEuOTU1VjQ2LjA1NXogTTAuODM1LDUuMDExVjBoNzMuNzM2djUuMDExDQoJCUgwLjgzNXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjkwLjk1NnB4IiBoZWlnaHQ9IjkwLjk1NnB4IiB2aWV3Qm94PSIwIDAgOTAuOTU2IDkwLjk1NiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgOTAuOTU2IDkwLjk1NjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTc3LjQ1NCw0MS42NjFWMTMuOTc5SDEzLjUwMnYyNy42ODJINzcuNDU0eiBNMTYuMzY1LDM4Ljc5N1YxNi44NDJoNTguMjI2djIxLjk1NUgxNi4zNjV6IE02NC4yMSw3Ni40OTlWNDguODE4SDI2Ljc0Ng0KCQlWNzYuNUw2NC4yMSw3Ni40OTlMNjQuMjEsNzYuNDk5eiBNMjkuNjA5LDczLjYzN1Y1MS42ODJoMzEuNzM3djIxLjk1NUgyOS42MDl6IE00Ny45ODIsMTAuOTc4aC01LjAxVjBoNS4wMVYxMC45Nzh6DQoJCSBNNDcuOTgyLDkwLjk1NmgtNS4wMVY3OS45NzloNS4wMVY5MC45NTZ6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTc1LjQwNiwzNS40MzZWNy43NTVIMTEuNDU0djI3LjY4Mkw3NS40MDYsMzUuNDM2TDc1LjQwNiwzNS40MzZ6IE0xNC4zMTcsMzIuNTczVjEwLjYxOGg1OC4yMjZ2MjEuOTU1SDE0LjMxN3oNCgkJIE00OC45MTgsNzAuMjc1VjQyLjU5NUgxMS40NTR2MjcuNjgyTDQ4LjkxOCw3MC4yNzVMNDguOTE4LDcwLjI3NXogTTE0LjMxNyw2Ny40MTJWNDUuNDU3aDMxLjczOHYyMS45NTVIMTQuMzE3eiBNNS4wMTEsNzQuNTcxSDANCgkJVjAuODM1aDUuMDExVjc0LjU3MXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTYzLjk1MiwzNS40MzZWNy43NTVIMHYyNy42ODJMNjMuOTUyLDM1LjQzNkw2My45NTIsMzUuNDM2eiBNMi44NjMsMzIuNTczVjEwLjYxOEg2MS4wOXYyMS45NTVIMi44NjN6IE02My45NTIsNzAuMjc1DQoJCVY0Mi41OTVIMjYuNDg4djI3LjY4Mkw2My45NTIsNzAuMjc1TDYzLjk1Miw3MC4yNzV6IE0yOS4zNTEsNjcuNDEyVjQ1LjQ1N2gzMS43Mzd2MjEuOTU1SDI5LjM1MXogTTcwLjM5NSwwLjgzNWg1LjAxMnY3My43MzYNCgkJaC01LjAxMlYwLjgzNXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMS4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDYxMiA2MTIiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA2MTIgNjEyOyINCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImRlbGV0ZS1zaW1wbGUuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDMiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnM0MSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlkPSJuYW1lZHZpZXczOSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciDQogICAgIGlua3NjYXBlOmN4PSIyOTUuMDM0MDgiDQogICAgIGlua3NjYXBlOmN5PSIzMzAuODU0NDgiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9Imc1Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Nzg4MTM1LDAsMCwwLjk5Nzg4MTM1LDEuNzMwNDAxMiwwLjkyMzcyODQ3KSI+PHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNyINCiAgICAgICBkPSJNIDU4Ny44MjYsMTg2Ljk2NiBDIDU3MS43MSwxNDkuNjM0IDU0OS44ODIsMTE3LjE5OCA1MjIuMzQyLDg5LjY1OCA0OTQuODAyLDYyLjExOCA0NjIuMzY2LDQwLjI5IDQyNS4wMzQsMjQuMTc0IDM4Ny43MDIsOC4wNTggMzQ4LjAyNCwwIDMwNiwwIDI3Ny44NDgsMCAyNTAuNzE2LDMuNjcyIDIyNC42MDQsMTEuMDE2IDE5OC40OTIsMTguMzYgMTc0LjExNCwyOC42NjIgMTUxLjQ3LDQxLjkyMiAxMjguODI2LDU1LjE4MiAxMDguMjIyLDcxLjA5NCA4OS42NTgsODkuNjU4IDcxLjA5NCwxMDguMjIyIDU1LjE4MiwxMjguODI2IDQxLjkyMiwxNTEuNDcgMjguNjYyLDE3NC4xMTYgMTguMzYsMTk4LjQ5MiAxMS4wMTYsMjI0LjYwNCAzLjY3MiwyNTAuNzE2IDAsMjc3Ljg0OCAwLDMwNiBjIDAsMjguMTUyIDMuNjcyLDU1LjI4NCAxMS4wMTYsODEuMzk2IDcuMzQ0LDI2LjExIDE3LjY0Niw1MC40ODcgMzAuOTA2LDczLjEzNCAxMy4yNiwyMi42NDQgMjkuMTcyLDQzLjI0OSA0Ny43MzYsNjEuODEyIDE4LjU2NCwxOC41NjQgMzkuMTY4LDM0LjQ3OCA2MS44MTIsNDcuNzM2IDIyLjY0NCwxMy4yNiA0Ny4wMjIsMjMuNTYxIDczLjEzNCwzMC45MDYgQyAyNTAuNzE2LDYwOC4zMjggMjc3Ljg0OCw2MTIgMzA2LDYxMiBjIDI4LjE1MiwwIDU1LjI4NCwtMy42NzIgODEuMzk2LC0xMS4wMTYgMjYuMTExLC03LjM0NiA1MC40ODgsLTE3LjY0NiA3My4xMzUsLTMwLjkwNiAyMi42NDQsLTEzLjI1OSA0My4yNDksLTI5LjE3MiA2MS44MTIsLTQ3LjczNiAxOC41NjQsLTE4LjU2MyAzNC40NzgsLTM5LjE2OCA0Ny43MzYsLTYxLjgxMiAxMy4yNiwtMjIuNjQ2IDIzLjU2MSwtNDcuMDIzIDMwLjkwNiwtNzMuMTM1IEMgNjA4LjMyOCwzNjEuMjg0IDYxMiwzMzQuMTUyIDYxMiwzMDYgNjEyLDI2My45NzYgNjAzLjk0MiwyMjQuMjk4IDU4Ny44MjYsMTg2Ljk2NiBaIE0gNDY4LjE4LDM5MS42OCBjIDIuMDQsMi4wNCAzLjA2Myw0LjI4NCAzLjA2Myw2LjczMiAwLDIuNDQ4IC0xLjAyMSw0LjQ4OCAtMy4wNjMsNi4xMiBsIC01OS45NzYsNjAuNTg4IGMgLTEuNjMxLDEuNjMyIC0zLjg3NiwyLjQ0OCAtNi43MzIsMi40NDggLTIuODU0LDAgLTQuODk1LC0wLjgxNiAtNi4xMiwtMi40NDggTCAzMDkuMDYsMzc4LjgyOCAyMjMuMzgsNDY1LjEyIGMgLTIuNDQ4LDEuNjMyIC00LjY5MiwyLjQ0OCAtNi43MzIsMi40NDggLTEuNjMyLDAgLTMuNjcyLC0wLjgxNiAtNi4xMiwtMi40NDggbCAtNTkuOTc2LC02MC41ODggYyAtMi4wNCwtMS4yMjYgLTMuMDYsLTMuMjY3IC0zLjA2LC02LjEyIDAsLTIuNDQ4IDEuMDIsLTQuNjkyIDMuMDYsLTYuNzMyIGwgODUuNjgsLTg1LjY4IC04NS42OCwtODUuNjggYyAtMi4wNCwtMi4wNCAtMy4wNiwtNC4yODQgLTMuMDYsLTYuNzMyIDAsLTIuODU2IDEuMDIsLTQuODk2IDMuMDYsLTYuMTIgbCA1OS45NzYsLTYwLjU4OCBjIDEuNjMyLC0xLjYzMiAzLjY3MiwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDg1LjY4LDg2LjI5MiA4Ni4yOTIsLTg2LjI5MiBjIDEuNjM1LC0xLjYzMiAzLjY3NSwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDU5Ljk3Niw2MC41ODggYyAyLjA0LDEuNjMyIDMuMDYzLDMuNjcyIDMuMDYzLDYuMTIgMCwyLjQ0OCAtMS4wMjEsNC42OTIgLTMuMDYzLDYuNzMyIEwgMzgyLjUsMzA2IGwgODUuNjgsODUuNjggeiINCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48Zw0KICAgICBpZD0iZzM3IiAvPjwvc3ZnPg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU0MS45MTFweCIgaGVpZ2h0PSI1NDEuOTExcHgiIHZpZXdCb3g9IjAgMCA1NDEuOTExIDU0MS45MTEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU0MS45MTEgNTQxLjkxMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ2Ny44MjYsOC43ODF2NDcuNDUxSDc0LjA5MVY4Ljc4MWMwLTQuNjA4LTMuNzI5LTguMzM0LTguMzM0LTguMzM0Yy00LjYwNywwLTguMzM0LDMuNzI3LTguMzM0LDguMzM0djQ5LjA2OEg4LjMzNA0KCQlDMy43Myw1Ny44NDksMCw2MS41ODQsMCw2Ni4xODNjMCw0LjYwNywzLjczLDguMzM0LDguMzM0LDguMzM0aDQ5LjA4M3YzOTIuODY4SDguMzM0Yy00LjYwNCwwLTguMzM0LDMuNzI5LTguMzM0LDguMzM0DQoJCWMwLDQuNjEsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2NDkuMDc3YzAsNC42MDQsMy43MjcsOC4zMzQsOC4zMzQsOC4zMzRjNC42MDQsMCw4LjMzNC0zLjcyOSw4LjMzNC04LjMzNHYtNDkuMDc3aDM5My43NA0KCQl2NDkuMDc3YzAsNC42MDQsMy43MjksOC4zMzQsOC4zMzQsOC4zMzRjNC42MSwwLDguMzM0LTMuNzI5LDguMzM0LTguMzM0di00OS4wNzdoNDkuMDgzYzQuNjA0LDAsOC4zMzQtMy43MjQsOC4zMzQtOC4zMzQNCgkJYzAtNC42MDQtMy43MjktOC4zMzQtOC4zMzQtOC4zMzRoLTQ4LjMzMlY3NC41MTdoNDguMzMyYzQuNjA0LDAsOC4zMzQtMy43MjcsOC4zMzQtOC4zMzRjMC00LjU5OS0zLjcyOS04LjMzNC04LjMzNC04LjMzNGgtNDkuMDgzDQoJCVY4Ljc4MWMwLTQuNjA4LTMuNzI0LTguMzM0LTguMzM0LTguMzM0QzQ3MS41NTUsMC40NDYsNDY3LjgyNiw0LjE3Myw0NjcuODI2LDguNzgxeiBNNDY4LjIwNCwzNDAuNTI4djEyNi44NTdIMzQwLjQxM1YzNDAuNTI4DQoJCUg0NjguMjA0eiBNMzM0Ljg1NywzNDAuNTI4djEyNi44NTdIMjA3LjQzNlYzNDAuNTI4SDMzNC44NTd6IE0yMDEuNTA0LDM0MC41Mjh2MTI2Ljg1N0g3NC4wOTFWMzQwLjUyOEgyMDEuNTA0eiBNNDY4LjIwNCwyMDcuMTcyDQoJCXYxMjcuOEgzNDAuNDEzdi0xMjcuOEg0NjguMjA0eiBNMzM0Ljg1NywyMDcuMTcydjEyNy44SDIwNy40MzZ2LTEyNy44SDMzNC44NTd6IE0yMDEuNTA0LDIwNy4xNzJ2MTI3LjhINzQuMDkxdi0xMjcuOEgyMDEuNTA0eg0KCQkgTTQ2OC4yMDQsNzMuODI5djEyNy43ODhIMzQwLjQxM1Y3My44MjlINDY4LjIwNHogTTMzNC44NTcsNzMuODI5djEyNy43ODhIMjA3LjQzNlY3My44MjlIMzM0Ljg1N3ogTTIwMS41MDQsNzMuODI5djEyNy43ODgNCgkJSDc0LjA5MVY3My44MjlIMjAxLjUwNHogTTMyMy40MTQsODMuODg1VjE4OC43OUgyMTguNTA2VjgzLjg4NUgzMjMuNDE0eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQxOHB4IiBoZWlnaHQ9IjQxOHB4IiB2aWV3Qm94PSIwIDAgNDE4IDQxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDE4IDQxODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTkxLjYwNiwxNDMuNzAzYy0zLjE0Ni0zLjE0Ni03Ljg3Ny00LjA4Ny0xMS45ODgtMi4zODVjLTQuMTEsMS43MDMtNi43OSw1LjcxNC02Ljc5LDEwLjE2M3YxMTUuMDM3DQoJCQkJYzAsNC40NDksMi42OCw4LjQ2MSw2Ljc5LDEwLjE2NGMxLjM2MSwwLjU2MywyLjc5LDAuODM2LDQuMjA4LDAuODM2YzIuODYyLDAsNS42NzYtMS4xMTYsNy43OC0zLjIyMmw1Ny41Mi01Ny41MTkNCgkJCQljMi4wNjMtMi4wNjMsMy4yMjItNC44NjEsMy4yMjItNy43NzhzLTEuMTU5LTUuNzE2LTMuMjIyLTcuNzc4TDkxLjYwNiwxNDMuNzAzeiIvPg0KCQkJPHBhdGggZD0iTTMzOC4zODIsMTQxLjMxOGMtNC4xMDctMS43LTguODQxLTAuNzYzLTExLjk4NywyLjM4NWwtNTcuNTIxLDU3LjUxOWMtMi4wNjIsMi4wNjMtMy4yMjIsNC44NjEtMy4yMjIsNy43NzgNCgkJCQlzMS4xNTgsNS43MTYsMy4yMjIsNy43NzdsNTcuNTIxLDU3LjUyYzIuMTA0LDIuMTA0LDQuOTE4LDMuMjIzLDcuNzc5LDMuMjIzYzEuNDE3LDAsMi44NDgtMC4yNzIsNC4yMDgtMC44MzgNCgkJCQljNC4xMS0xLjcwMyw2Ljc5LTUuNzE0LDYuNzktMTAuMTYyVjE1MS40ODFDMzQ1LjE3MiwxNDcuMDMyLDM0Mi40OTIsMTQzLjAyMSwzMzguMzgyLDE0MS4zMTh6Ii8+DQoJCQk8cGF0aCBkPSJNMjEyLDBoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2MzVjMCw2LjA3NSw0LjkyNSwxMSwxMSwxMWg2YzYuMDc1LDAsMTEtNC45MjUsMTEtMTFWMTFDMjIzLDQuOTI1LDIxOC4wNzUsMCwyMTIsMHoiDQoJCQkJLz4NCgkJCTxwYXRoIGQ9Ik0yMTIsOTUuMzUyaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjcyLjQ3M2MwLDYuMDc1LDQuOTI1LDExLDExLDExaDZjNi4wNzUsMCwxMS00LjkyNSwxMS0xMXYtNzIuNDczDQoJCQkJQzIyMywxMDAuMjc2LDIxOC4wNzUsOTUuMzUyLDIxMiw5NS4zNTJ6Ii8+DQoJCQk8cGF0aCBkPSJNMjEyLDIyOC4xNzZoLTZjLTYuMDc1LDAtMTEsNC45MjYtMTEsMTF2NzIuNDc0YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzQNCgkJCQlDMjIzLDIzMy4xMDIsMjE4LjA3NSwyMjguMTc2LDIxMiwyMjguMTc2eiIvPg0KCQkJPHBhdGggZD0iTTIxMiwzNjFoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2MzVjMCw2LjA3NSw0LjkyNSwxMSwxMSwxMWg2YzYuMDc1LDAsMTEtNC45MjUsMTEtMTF2LTM1DQoJCQkJQzIyMywzNjUuOTI1LDIxOC4wNzUsMzYxLDIxMiwzNjF6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ5Ny4xOTlweCIgaGVpZ2h0PSI0OTcuMTk5cHgiIHZpZXdCb3g9IjAgMCA0OTcuMTk5IDQ5Ny4xOTkiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ5Ny4xOTkgNDk3LjE5OTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTE5MS4yLDI0OC42YzAtMTUuMyw1LjctMjguNywxNy4yLTQwLjJzMjQuOS0xNy4yLDQwLjItMTcuMkwxOTEuMiwyNDguNnogTTE3NCwyNjUuOGMtMS45LTUuNy0xLjktMTEuNS0xLjktMTcuMg0KCQljMC00Mi4xLDM0LjQtNzYuNSw3Ni41LTc2LjVjNS43MDEsMCwxMS41LDAsMTcuMjAxLDEuOWw1MS42LTUxLjZjLTIxLTUuNy00NC03LjctNjguOS03LjdDNzYuNSwxMTQuNywwLDI0OC42LDAsMjQ4LjYNCgkJczMwLjYsNTMuNSw5Ny41LDkzLjdMMTc0LDI2NS44eiBNMzA2LDI0OC42TDI0OC42LDMwNmMxNS4zLDAsMjguNzAxLTUuNyw0MC4yMDEtMTcuMkMzMDAuMTk5LDI3Ny4zLDMwNiwyNjMuODk5LDMwNiwyNDguNnoNCgkJIE0zOTkuNjk5LDE1NC44OTlsLTc2LjUsNzYuNWMxLjksNS43LDEuOSwxMS41LDEuOSwxNy4yYzAsNDIuMS0zNC40LDc2LjUtNzYuNSw3Ni41Yy01LjcsMC0xMS41LDAtMTcuMi0xLjlMMTc5LjgsMzc0LjgNCgkJYzIxLDUuNyw0NCw3LjYsNjguOCw3LjZjMTcyLjA5OSwwLDI0OC41OTktMTMzLjksMjQ4LjU5OS0xMzMuOVM0NjYuNiwxOTUuMSwzOTkuNjk5LDE1NC44OTl6IE00MDEuNCw3Ni44OTlsLTMyNC41LDMyNC41DQoJCWwxOC45LDE4LjlMNDIwLjQsOTUuN0w0MDEuNCw3Ni44OTl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ4NS4yMTVweCINCiAgIGhlaWdodD0iNDg1LjIxNXB4Ig0KICAgdmlld0JveD0iMCAwIDQ4NS4yMTUgNDg1LjIxNSINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ4NS4yMTUgNDg1LjIxNTsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJfbGF5b3V0LXByb3BlcnRpZXMuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGUgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEwODkiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjY2NiINCiAgICAgaWQ9Im5hbWVkdmlldzM3Ig0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOnpvb209IjAuNDg2MzgyMzMiDQogICAgIGlua3NjYXBlOmN4PSItNzYuMzQ1OTcyIg0KICAgICBpbmtzY2FwZTpjeT0iNDA3LjA4NzE2Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNjQ5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNTAiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9IkNhcGFfMSIgLz48Zw0KICAgICBpZD0iZzEwMzQ5Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMzMuNjE5OTE5LDIwLjA0OTY5MykiPjxnDQogICAgICAgaWQ9IkxheWVyXzFfMTEwXyI+PGcNCiAgICAgICAgIGlkPSJnMTAzNTIiPjxwYXRoDQogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICAgIGQ9Im0gMTcuNTY3LDE1LjkzOCAtMi44NTksLTIuNzAyIGMgMC4zMzMsLTAuNjA1IDAuNTM5LC0xLjI5IDAuNTM5LC0yLjAyOSAwLC0yLjM0MiAtMS44OTcsLTQuMjM5IC00LjI0LC00LjIzOSAtMi4zNDMsMCAtNC4yNDMsMS44OTYgLTQuMjQzLDQuMjM5IDAsMi4zNDMgMS45LDQuMjQxIDQuMjQzLDQuMjQxIDAuODI2LDAgMS41OSwtMC4yNDYgMi4yNDIsLTAuNjU0IGwgMi44NTUsMi42OTkgYyAwLjQzMiwtMC41NzEgMC45MTksLTEuMDk0IDEuNDYzLC0xLjU1NSB6Ig0KICAgICAgICAgICBpZD0icGF0aDEwMzU0IiAvPjxwYXRoDQogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICAgIGQ9Im0gMjkuNjYsMTUuNiAzLjc5OSwtNi4zOTMgYyAwLjM3NCwwLjEwNyAwLjc2MiwwLjE4NCAxLjE2OSwwLjE4NCAyLjM0NywwIDQuMjQ0LC0xLjg5OCA0LjI0NCwtNC4yNDEgMCwtMi4zNDIgLTEuODk3LC00LjIzOSAtNC4yNDQsLTQuMjM5IC0yLjM0MywwIC00LjIzOSwxLjg5NiAtNC4yMzksNC4yMzkgMCwxLjE2MyAwLjQ2OSwyLjIxNCAxLjIyNywyLjk4MSBsIC0zLjc4Nyw2LjM3NSBjIDAuNjUxLDAuMjk1IDEuMjY1LDAuNjYzIDEuODMxLDEuMDk0IHoiDQogICAgICAgICAgIGlkPSJwYXRoMTAzNTYiIC8+PHBhdGgNCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgICAgZD0ibSA0Mi43NjIsMjAuOTUyIGMgLTEuODI0LDAgLTMuMzY5LDEuMTU5IC0zLjk2OCwyLjc3NSBsIC01LjI3OCwtMC41MjEgYyAwLDAuMDQgMC4wMDYsMC4wNzggMC4wMDYsMC4xMTcgMCwwLjY4OCAtMC4wNzYsMS4zNiAtMC4yMTMsMi4wMDkgbCA1LjI3NiwwLjUyMSBjIDAuMzE5LDIuMDI0IDIuMDYyLDMuNTc2IDQuMTc3LDMuNTc2IDIuMzQyLDAgNC4yMzgsLTEuODk2IDQuMjM4LC00LjIzOCAwLC0yLjM0MSAtMS44OTYsLTQuMjM5IC00LjIzOCwtNC4yMzkgeiINCiAgICAgICAgICAgaWQ9InBhdGgxMDM1OCIgLz48cGF0aA0KICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgICBkPSJtIDI4LjE5NywzNy42MjQgLTEuMTgsLTUuMTU2IGMgLTAuNjY2LDAuMjMyIC0xLjM1OSwwLjM5OCAtMi4wODIsMC40ODEgbCAxLjE4Miw1LjE1NyBjIC0xLjM1NSwwLjcwOSAtMi4yOSwyLjExIC0yLjI5LDMuNzQ2IDAsMi4zNDIgMS44OTYsNC4yMzcgNC4yNDMsNC4yMzcgMi4zNDIsMCA0LjIzOCwtMS44OTYgNC4yMzgsLTQuMjM3IDAuMDAzLC0yLjI5OSAtMS44MjksLTQuMTYgLTQuMTExLC00LjIyOCB6Ig0KICAgICAgICAgICBpZD0icGF0aDEwMzYwIiAvPjxjaXJjbGUNCiAgICAgICAgICAgY3g9IjIzLjgzIg0KICAgICAgICAgICBjeT0iMjMuMzIzIg0KICAgICAgICAgICByPSI3LjI3MDk5OTkiDQogICAgICAgICAgIGlkPSJjaXJjbGUxMDM2NCIgLz48L2c+PC9nPjwvZz48Zw0KICAgICBpZD0iZzEwMzY2Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM2OCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzNzAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzcyIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM3NCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzNzYiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzc4Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM4MCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzODIiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzg0Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM4NiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzODgiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzkwIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM5MiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzOTQiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzQzMjAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDQuNzU0NDI3MSwwLDAsNC43NTQ0MjcxLDcuODM5OTM2MSwyNjAuNzI3NDEpIj48Zw0KICAgICAgIGlkPSJnNDI4MCI+PHBhdGgNCiAgICAgICAgIGlkPSJwYXRoNDI4MiINCiAgICAgICAgIGQ9Im0gNDEuNTM0LDI4LjY2IDEuOTU3LDAgQyA0NC44NzcsMjguNjYgNDYsMjcuNTM2IDQ2LDI2LjE1IGwgMCwtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IGwgLTEuOTUxLDAgMCwwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgbCAwLjAwNiwwIDAsLTEuOTUxIEMgMjguNjYsMS4xMjQgMjcuNTM3LDAgMjYuMTUsMCBsIC02LjMsMCBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSBsIDAsMS45NTUgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IGwgMCwtMC4wMDUgLTEuOTUxLDAgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSBsIDAsNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIGwgMS45NjQsMCAtMC4wMDYsLTAuMDE1IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IDAsMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBsIDYuMywwIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIGwgMCwtMS45NSAtMC4wMDYsMCBjIDEuMjA3LC0wLjM5MiAyLjM2MywtMC44NTYgMy40NTcsLTEuNDQgbCAxLjM4MSwxLjM3OSBjIDAuOTgsMC45NzkgMi41NjgsMC45NzkgMy41NDcsMCBsIDQuNDQzLC00LjQ0NSBjIDAuOTc5LC0wLjk3OSAwLjk3OSwtMi41NjYgMCwtMy41NDcgbCAtMS4zODMsLTEuMzgzIGMgMC41ODQsLTEuMDk0IDEuMDY4LC0yLjI1IDEuNDM2LC0zLjQ1NyBsIDEwZS00LDAuMDEzIHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48Zw0KICAgICAgIGlkPSJnNDI4NCIgLz48Zw0KICAgICAgIGlkPSJnNDI4NiIgLz48Zw0KICAgICAgIGlkPSJnNDI4OCIgLz48Zw0KICAgICAgIGlkPSJnNDI5MCIgLz48Zw0KICAgICAgIGlkPSJnNDI5MiIgLz48Zw0KICAgICAgIGlkPSJnNDI5NCIgLz48Zw0KICAgICAgIGlkPSJnNDI5NiIgLz48Zw0KICAgICAgIGlkPSJnNDI5OCIgLz48Zw0KICAgICAgIGlkPSJnNDMwMCIgLz48Zw0KICAgICAgIGlkPSJnNDMwMiIgLz48Zw0KICAgICAgIGlkPSJnNDMwNCIgLz48Zw0KICAgICAgIGlkPSJnNDMwNiIgLz48Zw0KICAgICAgIGlkPSJnNDMwOCIgLz48Zw0KICAgICAgIGlkPSJnNDMxMCIgLz48Zw0KICAgICAgIGlkPSJnNDMxMiIgLz48L2c+PC9zdmc+"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ4OC43OHB4IiBoZWlnaHQ9IjQ4OC43OHB4IiB2aWV3Qm94PSIwIDAgNDg4Ljc4IDQ4OC43OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDg4Ljc4IDQ4OC43ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0xNDEuNDA4LDExOS44NzJjMTIuMjkzLTEzLjExMiwyOS42NTMtMjAuNzcsNDcuNjI0LTIwLjc3aDI0Ny40MDVWNDcuODI4YzAtMTIuNTY5LTEwLjQ2OC0yMi42NTItMjMuMDM2LTIyLjY1Mkg3NS4zOTcNCgkJCWMtMTIuNTc1LDAtMjIuNDkxLDEwLjA4My0yMi40OTEsMjIuNjUydjEwMS4wNDZoNjEuNDQ1TDE0MS40MDgsMTE5Ljg3MnoiLz4NCgkJPHBhdGggZD0iTTQ4My4wMTksMTQ5LjI1M2MtMS43MDktMS45MjQtMy43MTctMy41NS01LjkyMy00Ljc4Yy0zLjM1Mi0xLjg2MS03LjE1MS0yLjkyLTExLjA3MS0yLjkySDE4OS4wMzJsMCwwDQoJCQljLTYsMC0xMS43MzUsMi40MDktMTUuOTgzLDYuNjAxYy0wLjIxNCwwLjIwOC0wLjQyMywwLjQzOC0wLjYyNiwwLjY1MWwtOS4yNzUsOS45MTFsLTIzLjYyMiwyNS4yMDcNCgkJCWMtMC41NDIsMC41NzMtMS4xMDUsMS4yMTktMS42OTQsMS43MzZjLTQuMTEzLDMuNTcyLTkuNDEsNS42NjctMTQuOTE1LDUuNjY3aC0wLjAwNUgyMi43NjhsMCwwDQoJCQljLTUuNjg0LDAtMTEuMTExLDIuMDIyLTE1LjI3MSw1Ljc5MWMtMC42NjcsMC41ODktMS4yOTMsMS4xNzktMS44ODgsMS44NTdjLTAuNDE3LDAuNDc5LTAuODAzLDAuOTQ4LTEuMTgzLDEuNDU5DQoJCQljLTMuNDgyLDQuNzQ0LTUuMDIsMTAuNjYxLTQuMjE3LDE2LjU0MmwyNi40NzksMTk0LjE4MmMzLjU2NSwyNi4xNCwyMy41NTMsNDYuNjEyLDQ4LjY5Miw1MS4yODQNCgkJCWMzLjU5MiwwLjY2Nyw3LjI4OCwxLjE2MywxMS4wNTgsMS4xNjNoMzE0LjI2MWMyNy43NjEsMCw1MS41MjItMTkuMDAzLDU4LjM1NC00NS4xOTRjMC43MDQtMi43MDYsMS4yMjYtNS41NjcsMS41NTUtOC40Mg0KCQkJbDE1LjI2NS0xMzIuMjg5bDEyLjc3Mi0xMTAuNjc0YzAuMDY3LTAuNjQ3LDAuMTA4LTEuMjkzLDAuMTI1LTEuOTI5QzQ4OC45NDcsMTU5LjI5OSw0ODYuOTA5LDE1My42MjMsNDgzLjAxOSwxNDkuMjUzeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ4OXB4Ig0KICAgaGVpZ2h0PSI0ODkuMDAxcHgiDQogICB2aWV3Qm94PSIwIDAgNDg5IDQ4OS4wMDEiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0ODkgNDg5LjAwMTsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJuZXcuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjY5MCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNDgwIg0KICAgICBpZD0ibmFtZWR2aWV3MzciDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6em9vbT0iMC40ODI2MTY1OSINCiAgICAgaW5rc2NhcGU6Y3g9IjI0NC41Ig0KICAgICBpbmtzY2FwZTpjeT0iMjQ0LjUwMDUiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnDQogICAgIGlkPSJnMyINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjE5Njc2OSwwLDAsMC45NjE5Njc2OSw5LjAxMDc4NDgsMTApIj48cGF0aA0KICAgICAgIGQ9Ik0gMzU1Ljc2OCwwIDg2LjIxOCwwIEMgNTMuMzMsMCAyNi41NzcsMjYuNzUzIDI2LjU3Nyw1OS42MzYgbCAwLDM2OS43MjkgYyAwLDMyLjg4MyAyNi43NTIsNTkuNjM2IDU5LjY0MSw1OS42MzYgbCAzMTYuNTY2LDAgYyAzMi44ODksLTEwZS00IDU5LjY0MSwtMjYuNzU0IDU5LjY0MSwtNTkuNjM3IGwgMCwtMzIwLjIwNCBMIDM1NS43NjgsMCBaIG0gNDcuMDE2LDQ0Ni40NzkgLTMxNi41NjYsMCBjIC05LjQzNywwIC0xNy4xMTksLTcuNjc4IC0xNy4xMTksLTE3LjExMyBsIDAsLTM2OS43MyBjIDAsLTkuNDM3IDcuNjgzLC0xNy4xMTQgMTcuMTE5LC0xNy4xMTQgbCAyNDguNjQyLDAgMCw0Ny42MDQgYyAwLDIxLjA0MyAxNy4xMDksMzguMTYyIDM4LjE1MiwzOC4zNzUgbCA0Ni44OTEsMC40NzcgMCwzMDAuMzg4IGMgMCw5LjQzNSAtNy42ODQsMTcuMTEzIC0xNy4xMTksMTcuMTEzIHoiDQogICAgICAgaWQ9InBhdGg1Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnDQogICAgIGlkPSJnNyIgLz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIyNi42MzM5NDJtbSINCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iDQogICB2aWV3Qm94PSIwIDAgMjYuNjMzOTQyIDI2LjYyMjc2NSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlkPSJzdmc4Ig0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InBvcnRhbC5zdmciPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczIiPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUwMDgiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUwMDYiDQogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTAxNiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTAxNCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUxMTIiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUxMTAiDQogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTEyMCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTExOCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUzMzIiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUzMzAiDQogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjEuOTc5ODk5Ig0KICAgICBpbmtzY2FwZTpjeD0iNTUuNTM1Njg4Ig0KICAgICBpbmtzY2FwZTpjeT0iLTUxLjA2MDgxOSINCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgZml0LW1hcmdpbi10b3A9IjAiDQogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCINCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCINCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE1Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDcuNDExNjExLC04OS4yODgwNCkiPg0KICAgIDxyZWN0DQogICAgICAgcnk9IjAiDQogICAgICAgeT0iOTYuMTU3Mzc5Ig0KICAgICAgIHg9IjYxLjE2MTQ3MiINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNCINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxyZWN0DQogICAgICAgcnk9IjAiDQogICAgICAgeT0iMTAzLjAyNjczIg0KICAgICAgIHg9IjU0LjI5MjEyMiINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNC0zIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSI4OS4yODgwNCINCiAgICAgICB4PSI2OC4wMzA4MjMiDQogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiDQogICAgICAgd2lkdGg9IjUuOTk5OTk5NSINCiAgICAgICBpZD0icmVjdDU1MDQtMy01Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSIxMDkuODk2MDciDQogICAgICAgeD0iNDcuNDIyNzc5Ig0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0LTMtNS05Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03Ig0KICAgICAgIGQ9Im0gNjguMzg0OTY3LDEwMi4xMjA4OSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgNS42MDkzNTQsLTUuNzIxOTI4IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwODcgaCAtNS45MTcwNTMgdiA1LjkxMDcwNSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NjYzIg0KICAgICAgIGQ9Im0gNDguMjczMDExLDEwMS4xOTY0OCB2IC03LjU4MjA1MyBjIDAsLTEuOTE0MTQ0IDEuNDE5NTExLC0zLjQ1NTEzNCAzLjE4Mjc2MSwtMy40NTUxMzQgdiAwIGggMTQuNzY3MjcxIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjcyMjc5OTY2O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJyZWN0NTYxNyINCiAgICAgICBkPSJtIDczLjIzNzgxMywxMDIuODMwNDMgNGUtNiw5LjE1NDk4IGMgMCwxLjcyNzE4IC0xLjM4MzI2MywzLjExNzY2IC0zLjEwMTQ4NSwzLjExNzY2IEggNTUuODQ2MDc3Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjYxNTQ3MTEyO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03LTQiDQogICAgICAgZD0ibSA2MS41MTU2MTgsMTA4Ljk5MDIzIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjAwOTksLTAuMjA1MDkgSCA2MS4xOTc5NyB2IDUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMzE3NjM0LDAuMDE2MyB6Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03LTQtMyINCiAgICAgICBkPSJtIDU5LjkzNzk3NSw5Ni4xOTM4NzQgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1NCw1LjcyMTkyNiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA5IGggNS45MTcwNTMgdiAtNS45MTA3MTEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zLTAiDQogICAgICAgZD0ibSA1My4wNjg2MzMsMTAzLjA2MzIyIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtNS42MDkzNTMsNS43MjE5MyA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA4IGggNS45MTcwNTMgdiAtNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMzE3NjM0LC0wLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1LjY3OHB4IiBoZWlnaHQ9IjQ1LjY3OHB4IiB2aWV3Qm94PSIwIDAgNDUuNjc4IDQ1LjY3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuNjc4IDQ1LjY3ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0zOC45ODgsNi42ODljLTguOTE5LTguOTE4LTIzLjM4LTguOTE5LTMyLjMsMGMtOC45MTgsOC45MTktOC45MTcsMjMuMzgsMCwzMi4yOTljOC45Miw4LjkxOSwyMy4zODEsOC45MTksMzIuMywwDQoJCQlDNDcuOTA4LDMwLjA2OSw0Ny45MDYsMTUuNjA4LDM4Ljk4OCw2LjY4OXogTTIxLjg5MywzNi4wMTZjLTEuNzMsMC0yLjkwNi0xLjI3Mi0yLjkwNi0yLjk3MWMwLTEuNzMsMS4yMDktMi45NzIsMi45MDYtMi45NzINCgkJCWMxLjc2NCwwLDIuOTA2LDEuMjQxLDIuOTM4LDIuOTcyQzI0LjgzMSwzNC43NDIsMjMuNjU2LDM2LjAxNiwyMS44OTMsMzYuMDE2eiBNMjYuMjE1LDIxLjk4MWMtMS4zMiwxLjQ2Ni0xLjg1NiwyLjg2MS0xLjgyLDQuNDY4DQoJCQljMCwxLjE5My0wLjk2OSwyLjE2Mi0yLjE2MywyLjE2MkgyMS43N2MtMS4xODIsMC0yLjE0NS0wLjk0OS0yLjE2MS0yLjEzMWwtMC4wMDUtMC4zMTdjLTAuMTA3LTEuODIzLDAuNTAxLTMuNjgxLDIuMTA5LTUuNjExDQoJCQljMS4xNDUtMS4zNTksMi4wNzItMi41MDIsMi4wNzItMy43MThjMC0xLjI1LTAuODIyLTIuMDczLTIuNjA3LTIuMTQ2Yy0wLjU0OSwwLTEuMTUsMC4wOTMtMS43MzEsMC4yNTYNCgkJCWMtMS4wNTYsMC4yOTctMi4xNTYtMC4yOTgtMi40ODItMS4zNDVsLTAuMDA2LTAuMDJjLTAuMzI5LTEuMDU0LDAuMjQ3LTIuMTc1LDEuMjk0LTIuNTIzYzEuMTU3LTAuMzg1LDIuNTc0LTAuNjU3LDQuMTQtMC42NTcNCgkJCWM0LjcyLDAsNi44NjQsMi42MDksNi44NjQsNS41NzZDMjkuMjU2LDE4LjY5MiwyNy41NzUsMjAuNDc5LDI2LjIxNSwyMS45ODF6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ3MS42MDhweCINCiAgIGhlaWdodD0iNDcxLjYwOHB4Ig0KICAgdmlld0JveD0iMCAwIDQ3MS42MDggNDcxLjYwOCINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJyZWRvLnN2ZyI+PG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQxIj48cmRmOlJERj48Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICAgIGlkPSJkZWZzMzkiIC8+PHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxIg0KICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgICBncmlkdG9sZXJhbmNlPSIxMCINCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjI5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MTYiDQogICAgIGlkPSJuYW1lZHZpZXczNyINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIwLjUwMDQxNTYiDQogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0Ig0KICAgICBpbmtzY2FwZTpjeT0iMjM1LjgwNCINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9ImczIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMSwwLDAsMSw0NzMuNjA2MjEsMCkiPjxwYXRoDQogICAgICAgZD0ibSAzODQuNTM1MTksOTEuMDY3NzQ0IGMgLTgxLjQ1OTU0LC04MS40NTY4NzkxIC0yMTQuMDA4MDcsLTgxLjQ1Njg3OTEgLTI5NS40NjU4MjgsMCAtODEuNDU3NzY0MSw4MS40NTY4NzYgLTgxLjQ1Njg3ODEsMjE0LjAxMTYwNiAwLDI5NS40NjU4MjYgODEuNDU2ODY4LDgxLjQ1OTUzIDIxNC4wMDU0MDgsODEuNDU5NTMgMjk1LjQ2NTgyOCwwIDgxLjQ1OTUzLC04MS40NTMzNCA4MS40NTk1MywtMjE0LjAwMjc1IDAsLTI5NS40NjU4MjYgeiBNIDM2OC4zMjg4MywzNzAuMzM4NzIgYyAtNzIuNTE4NTksNzIuNTE4NTkgLTE5MC41MzYzLDcyLjUxODU5IC0yNjMuMDY2MzksMCAtNzIuNTE2ODE3LC03Mi41MzAwOSAtNzIuNTE2ODE3LC0xOTAuNTQyNSAwLC0yNjMuMDY3MjcgNzIuNTI5MiwtNzIuNTI2NTU5IDE5MC41MzYyOSwtNzIuNTI2NTU5IDI2My4wNjYzOSwwIDcyLjUyNTY3LDcyLjUyNDc3IDcyLjUyNTY3LDE5MC41MzcxOCAwLDI2My4wNjcyNyB6IG0gMTIuNDQzNDcsLTE5OC4xMjc2IC0xMS42MjA3Niw1Mi4zMjk3MSBjIC0wLjMxMzUsMS40NDcwNiAtMS43NDM3MywyLjM0NjgyIC0zLjE4MjgyLDIuMDM1OTggLTAuNDQwMTQsLTAuMDkzOSAtMTAuOTUwMzYsLTIuMzU4MzQgLTI2LjI5ODU4LC0yLjM1ODM0IC0yNS44ODk0NCwwIC03MS42MjQxMyw2Ljg1MTg0IC0xMDEuODMxNzIsNDkuNTUzMzggbCA2LjI5NjU2LDYuMjk2NTcgNzAuNTAzODYsMzAuNTU5MTcgYyAyLjM2NTQyLDEuMDM3MDMgMy43NTc1OCwzLjUwNjk1IDMuMzkxODMsNi4wNjcyIC0wLjM1MDcsMi41NDk2MiAtMi4zNjEsNC41NTQ2MSAtNC45MzA5OSw0Ljg3MzQyIGwgLTE3NS42MDUxOSwyMi45NTkwMSBjIC0xLjc1ODc5LDAuMjMwMjUgLTMuNTM4ODMsLTAuMzc3MjYgLTQuNzk3MjYsLTEuNjI3NzIgLTEuMjY2NCwtMS4yNjE5NyAtMS44NTUzMiwtMy4wMzY3IC0xLjYzNTY5LC00LjgwNjEyIGwgMjIuOTU5LC0xNzUuNjA3ODUgYyAwLjE2NDczLC0xLjI4NSAwLjc1MzY0LC0yLjQzNjI3IDEuNjIzMywtMy4zMDUwMyAwLjg1ODE0LC0wLjg1OTAzIDEuOTg5MDQsLTEuNDQ3OTUgMy4yNjM0MSwtMS42MzEyNyAyLjU0Njk3LC0wLjM1Nzc4IDUuMDE3NzcsMS4wMzcwMyA2LjA1MzkyLDMuMzk0NDggbCAzMC41NjcxNCw3MC41MDY1MiAwLjE1NzYzLDAuMTU3NjMgYyA0Ny4xNDE5MSwtNTkuNDAxMTcgMTE1LjQxNTg0LC02Ni40ODk0NiAxNDUuMDI4MzEsLTY2LjQ4OTQ2IDEzLjU0NjkzLDAgMjYuNjk2MjIsMS4zNDUyMiAzOC4wMjM4NCwzLjg4Njg3IDEuNDUzMjYsMC4zMzIxIDIuMzYzNjUsMS43NjMyMiAyLjAzNDIxLDMuMjA1ODUgeiINCiAgICAgICBpZD0icGF0aDUiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcNCiAgICAgaWQ9Imc3IiAvPjxnDQogICAgIGlkPSJnOSIgLz48Zw0KICAgICBpZD0iZzExIiAvPjxnDQogICAgIGlkPSJnMTMiIC8+PGcNCiAgICAgaWQ9ImcxNSIgLz48Zw0KICAgICBpZD0iZzE3IiAvPjxnDQogICAgIGlkPSJnMTkiIC8+PGcNCiAgICAgaWQ9ImcyMSIgLz48Zw0KICAgICBpZD0iZzIzIiAvPjxnDQogICAgIGlkPSJnMjUiIC8+PGcNCiAgICAgaWQ9ImcyNyIgLz48Zw0KICAgICBpZD0iZzI5IiAvPjxnDQogICAgIGlkPSJnMzEiIC8+PGcNCiAgICAgaWQ9ImczMyIgLz48Zw0KICAgICBpZD0iZzM1IiAvPjwvc3ZnPg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDM5Mi42MiAzOTIuNjIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM5Mi42MiAzOTIuNjI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxyZWN0IHg9IjE0NC44NjYiIHk9IjMyMC44OTciIHdpZHRoPSIyMy41MDUiIGhlaWdodD0iMjUiLz4NCgk8cGF0aCBkPSJNMzA5Ljc5NSwwSDI2Ni40OUgxMjYuMTMxSDgyLjgyNUMzNy42NjcsMCwwLjkyOSwzNi43MzgsMC45MjksODEuODk2djIyOC44MjhjMCw0NS4xNTgsMzYuNzM4LDgxLjg5Niw4MS44OTYsODEuODk2aDU4LjMyDQoJCWgxMTMuNDQzaDU1LjIwNmM0NS4xNTcsMCw4MS44OTYtMzYuNzM4LDgxLjg5Ni04MS44OTZWODEuODk2QzM5MS42OTEsMzYuNzM4LDM1NC45NTIsMCwzMDkuNzk1LDB6IE0yNjYuNDksMzANCgkJYzE0LjM1NCwwLDI2LjAzLDkuNTQyLDI2LjAzLDIxLjI3VjE3NC4zM2MwLDExLjcyOS0xMS42NzcsMjEuMjcxLTI2LjAzLDIxLjI3MUgxMjYuMTMxYy0xNC4zNTQsMC0yNi4wMzEtOS41NDItMjYuMDMxLTIxLjI3MQ0KCQlWNTEuMjdjMC0xMS43MjgsMTEuNjc4LTIxLjI3LDI2LjAzMS0yMS4yN0gyNjYuNDl6IE0xNDEuMTQ2LDM2Mi42MmMtNi4yNTksMC0xMS4zNTItNS4wOTItMTEuMzUyLTExLjM1MXYtMzAuMDY2DQoJCWMwLTYuMjU5LDUuMDkzLTExLjM1MSwxMS4zNTItMTEuMzUxaDExMy40NDNjNi4yNTksMCwxMS4zNTEsNS4wOTIsMTEuMzUxLDExLjM1MXYzMC4wNjZjMCw2LjI1OS01LjA5MiwxMS4zNTEtMTEuMzUxLDExLjM1MQ0KCQlIMTQxLjE0NnogTTM2MS42OTEsMzEwLjcyNGMwLDI4LjYxNi0yMy4yOCw1MS44OTYtNTEuODk2LDUxLjg5NmgtMTUuNDUyYzEuMDMyLTMuNjEsMS41OTctNy40MTQsMS41OTctMTEuMzUxdi0zMC4wNjYNCgkJYzAtMjIuODAxLTE4LjU1LTQxLjM1MS00MS4zNTEtNDEuMzUxSDE0MS4xNDZjLTIyLjgwMiwwLTQxLjM1MiwxOC41NS00MS4zNTIsNDEuMzUxdjMwLjA2NmMwLDMuOTM3LDAuNTY1LDcuNzQyLDEuNTk3LDExLjM1MQ0KCQlIODIuODI1Yy0yOC42MTYsMC01MS44OTYtMjMuMjgtNTEuODk2LTUxLjg5NlY4MS44OTZjMC0yNS45MSwxOS4wODctNDcuNDQ0LDQzLjkzOC01MS4yODVDNzEuODExLDM2LjkzNSw3MC4xLDQzLjkyMSw3MC4xLDUxLjI3DQoJCVYxNzQuMzNjMCwyOC4yNzEsMjUuMTM2LDUxLjI3MSw1Ni4wMzEsNTEuMjcxSDI2Ni40OWMzMC44OTYsMCw1Ni4wMy0yMyw1Ni4wMy01MS4yNzFWNTEuMjdjMC03LjM0OC0xLjcxMS0xNC4zMzQtNC43NjctMjAuNjU5DQoJCWMyNC44NTEsMy44NDEsNDMuOTM4LDI1LjM3NSw0My45MzgsNTEuMjg1VjMxMC43MjR6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIyNi42MzM5NDJtbSINCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iDQogICB2aWV3Qm94PSIwIDAgMjYuNjMzOTQyIDI2LjYyMjc2NSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlkPSJzdmc4Ig0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InNldHRpbmdzLnN2ZyI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzMiI+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTAwOCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTAwNiINCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGg1MDE2Ig0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGg1MDE0Ig0KICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTExMiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTExMCINCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGg1MTIwIg0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGg1MTE4Ig0KICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTMzMiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTMzMCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICA8L2RlZnM+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iMS45Nzk4OTkiDQogICAgIGlua3NjYXBlOmN4PSI1NS41MzU2ODgiDQogICAgIGlua3NjYXBlOmN5PSItNTEuMDYwODE5Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTUiPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Ny40MTE2MTEsLTg5LjI4ODA0KSI+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSI5Ni4xNTczNzkiDQogICAgICAgeD0iNjEuMTYxNDcyIg0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSIxMDMuMDI2NzMiDQogICAgICAgeD0iNTQuMjkyMTIyIg0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0LTMiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHJ5PSIwIg0KICAgICAgIHk9Ijg5LjI4ODA0Ig0KICAgICAgIHg9IjY4LjAzMDgyMyINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNC0zLTUiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHJ5PSIwIg0KICAgICAgIHk9IjEwOS44OTYwNyINCiAgICAgICB4PSI0Ny40MjI3NzkiDQogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiDQogICAgICAgd2lkdGg9IjUuOTk5OTk5NSINCiAgICAgICBpZD0icmVjdDU1MDQtMy01LTkiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTciDQogICAgICAgZD0ibSA2OC4zODQ5NjcsMTAyLjEyMDg5IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MjggNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4wMDk5LC0wLjIwNTA4NyBoIC01LjkxNzA1MyB2IDUuOTEwNzA1IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjMxNzYzNCwwLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDU2NjMiDQogICAgICAgZD0ibSA0OC4yNzMwMTEsMTAxLjE5NjQ4IHYgLTcuNTgyMDUzIGMgMCwtMS45MTQxNDQgMS40MTk1MTEsLTMuNDU1MTM0IDMuMTgyNzYxLC0zLjQ1NTEzNCB2IDAgaCAxNC43NjcyNzEiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNzIyNzk5NjY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InJlY3Q1NjE3Ig0KICAgICAgIGQ9Im0gNzMuMjM3ODEzLDEwMi44MzA0MyA0ZS02LDkuMTU0OTggYyAwLDEuNzI3MTggLTEuMzgzMjYzLDMuMTE3NjYgLTMuMTAxNDg1LDMuMTE3NjYgSCA1NS44NDYwNzciDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNjE1NDcxMTI7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNCINCiAgICAgICBkPSJtIDYxLjUxNTYxOCwxMDguOTkwMjMgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDUuNjA5MzU0LC01LjcyMTkyIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwOSBIIDYxLjE5Nzk3IHYgNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zIg0KICAgICAgIGQ9Im0gNTkuOTM3OTc1LDk2LjE5Mzg3NCBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTUuNjA5MzU0LDUuNzIxOTI2IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDkgaCA1LjkxNzA1MyB2IC01LjkxMDcxMSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMzE3NjM0LC0wLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMtMCINCiAgICAgICBkPSJtIDUzLjA2ODYzMywxMDMuMDYzMjIgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1Myw1LjcyMTkzIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDggaCA1LjkxNzA1MyB2IC01LjkxMDcxIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPGcNCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjI5MzM0MjM5LDAsMCwwLjI5MzM0MjM5LDYwLjU1MTgwMywxMDIuNDE3MDUpIg0KICAgICAgIGlkPSJnNTQ4NiI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczIj4NCiAgICAgICAgPHBhdGgNCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgICAgZD0ibSA0MS41MzQsMjguNjYgaCAxLjk1NyBDIDQ0Ljg3NywyOC42NiA0NiwyNy41MzYgNDYsMjYuMTUgdiAtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IEggNDEuNTQgdiAwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgSCAyOC42NiBWIDIuNTEgQyAyOC42NiwxLjEyNCAyNy41MzcsMCAyNi4xNSwwIGggLTYuMyBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSB2IDEuOTU1IGwgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IFYgMTcuMzQxIEggMi41MDkgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSB2IDYuMzAxIGMgMCwxLjM4NyAxLjEyNCwyLjUxMSAyLjUwOSwyLjUxMSBIIDQuNDczIEwgNC40NjcsMjguNjQ3IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IHYgMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBoIDYuMyBjIDEuMzg3LDAgMi41MSwtMS4xMjMgMi41MSwtMi41MSB2IC0xLjk1IGggLTAuMDA2IGMgMS4yMDcsLTAuMzkyIDIuMzYzLC0wLjg1NiAzLjQ1NywtMS40NCBsIDEuMzgxLDEuMzc5IGMgMC45OCwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0NywwIGwgNC40NDMsLTQuNDQ1IGMgMC45NzksLTAuOTc5IDAuOTc5LC0yLjU2NiAwLC0zLjU0NyBsIC0xLjM4MywtMS4zODMgYyAwLjU4NCwtMS4wOTQgMS4wNjgsLTIuMjUgMS40MzYsLTMuNDU3IHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiDQogICAgICAgICAgIGlkPSJwYXRoNSIgLz4NCiAgICAgIDwvZz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzciIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9Imc5IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMTEiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcxMyIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzE1IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMTciIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcxOSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzIxIiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMjMiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcyNSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzI3IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMjkiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczMSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzMzIiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzUiIC8+DQogICAgPC9nPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjczLjA1OHB4IiBoZWlnaHQ9IjczLjA1OHB4IiB2aWV3Qm94PSIwIDAgNzMuMDU4IDczLjA1OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzMuMDU4IDczLjA1ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGcgaWQ9IkV5ZSI+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTcyLjg5MywzNS45NjVjLTAuNTgtMC45MjUtMTQuNDMyLTIyLjU0MS0zNS4xNi0yMi41NDFoLTIuNDA2Yy0yMC43MjksMC0zNC41OCwyMS42MTYtMzUuMTU5LDIyLjU0MQ0KCQkJCWMtMC4yMjMsMC4zNDctMC4yMjMsMC43OSwwLDEuMTM3YzAuNTc5LDAuOTE3LDE0LjQzMiwyMi41MzIsMzUuMTU5LDIyLjUzMmgyLjQwNmMyMC43MjksMCwzNC41OC0yMS42MTUsMzUuMTU5LTIyLjUzMg0KCQkJCUM3My4xMTMsMzYuNzU1LDczLjExMywzNi4zMTIsNzIuODkzLDM1Ljk2NXogTTQ1LjI2NywzNi41MjljMCw0LjY5LTMuOTIsOC41MDYtOC43MzYsOC41MDZjLTQuODE3LDAtOC43MzUtMy44MTItOC43MzUtOC41MDYNCgkJCQljMC00LjY4NywzLjkxOC04LjUwOCw4LjczNS04LjUwOEM0MS4zNDcsMjguMDIyLDQ1LjI2NywzMS44NDQsNDUuMjY3LDM2LjUyOXoiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ3MS42MDhweCINCiAgIGhlaWdodD0iNDcxLjYwOHB4Ig0KICAgdmlld0JveD0iMCAwIDQ3MS42MDggNDcxLjYwOCINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJ1bmRvLnN2ZyI+PG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQxIj48cmRmOlJERj48Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICAgIGlkPSJkZWZzMzkiIC8+PHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxIg0KICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgICBncmlkdG9sZXJhbmNlPSIxMCINCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjI5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MTYiDQogICAgIGlkPSJuYW1lZHZpZXczNyINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIwLjUwMDQxNTYiDQogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0Ig0KICAgICBpbmtzY2FwZTpjeT0iMjM1LjgwNCINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9ImczIj48cGF0aA0KICAgICAgIGQ9Im0gMzg0LjUzNTE5LDkxLjA2Nzc0NCBjIC04MS40NTk1NCwtODEuNDU2ODc5MSAtMjE0LjAwODA3LC04MS40NTY4NzkxIC0yOTUuNDY1ODI4LDAgLTgxLjQ1Nzc2NDEsODEuNDU2ODc2IC04MS40NTY4NzgxLDIxNC4wMTE2MDYgMCwyOTUuNDY1ODI2IDgxLjQ1Njg2OCw4MS40NTk1MyAyMTQuMDA1NDA4LDgxLjQ1OTUzIDI5NS40NjU4MjgsMCA4MS40NTk1MywtODEuNDUzMzQgODEuNDU5NTMsLTIxNC4wMDI3NSAwLC0yOTUuNDY1ODI2IHogTSAzNjguMzI4ODMsMzcwLjMzODcyIGMgLTcyLjUxODU5LDcyLjUxODU5IC0xOTAuNTM2Myw3Mi41MTg1OSAtMjYzLjA2NjM5LDAgLTcyLjUxNjgxNywtNzIuNTMwMDkgLTcyLjUxNjgxNywtMTkwLjU0MjUgMCwtMjYzLjA2NzI3IDcyLjUyOTIsLTcyLjUyNjU1OSAxOTAuNTM2MjksLTcyLjUyNjU1OSAyNjMuMDY2MzksMCA3Mi41MjU2Nyw3Mi41MjQ3NyA3Mi41MjU2NywxOTAuNTM3MTggMCwyNjMuMDY3MjcgeiBtIDEyLjQ0MzQ3LC0xOTguMTI3NiAtMTEuNjIwNzYsNTIuMzI5NzEgYyAtMC4zMTM1LDEuNDQ3MDYgLTEuNzQzNzMsMi4zNDY4MiAtMy4xODI4MiwyLjAzNTk4IC0wLjQ0MDE0LC0wLjA5MzkgLTEwLjk1MDM2LC0yLjM1ODM0IC0yNi4yOTg1OCwtMi4zNTgzNCAtMjUuODg5NDQsMCAtNzEuNjI0MTMsNi44NTE4NCAtMTAxLjgzMTcyLDQ5LjU1MzM4IGwgNi4yOTY1Niw2LjI5NjU3IDcwLjUwMzg2LDMwLjU1OTE3IGMgMi4zNjU0MiwxLjAzNzAzIDMuNzU3NTgsMy41MDY5NSAzLjM5MTgzLDYuMDY3MiAtMC4zNTA3LDIuNTQ5NjIgLTIuMzYxLDQuNTU0NjEgLTQuOTMwOTksNC44NzM0MiBsIC0xNzUuNjA1MTksMjIuOTU5MDEgYyAtMS43NTg3OSwwLjIzMDI1IC0zLjUzODgzLC0wLjM3NzI2IC00Ljc5NzI2LC0xLjYyNzcyIC0xLjI2NjQsLTEuMjYxOTcgLTEuODU1MzIsLTMuMDM2NyAtMS42MzU2OSwtNC44MDYxMiBsIDIyLjk1OSwtMTc1LjYwNzg1IGMgMC4xNjQ3MywtMS4yODUgMC43NTM2NCwtMi40MzYyNyAxLjYyMzMsLTMuMzA1MDMgMC44NTgxNCwtMC44NTkwMyAxLjk4OTA0LC0xLjQ0Nzk1IDMuMjYzNDEsLTEuNjMxMjcgMi41NDY5NywtMC4zNTc3OCA1LjAxNzc3LDEuMDM3MDMgNi4wNTM5MiwzLjM5NDQ4IGwgMzAuNTY3MTQsNzAuNTA2NTIgMC4xNTc2MywwLjE1NzYzIGMgNDcuMTQxOTEsLTU5LjQwMTE3IDExNS40MTU4NCwtNjYuNDg5NDYgMTQ1LjAyODMxLC02Ni40ODk0NiAxMy41NDY5MywwIDI2LjY5NjIyLDEuMzQ1MjIgMzguMDIzODQsMy44ODY4NyAxLjQ1MzI2LDAuMzMyMSAyLjM2MzY1LDEuNzYzMjIgMi4wMzQyMSwzLjIwNTg1IHoiDQogICAgICAgaWQ9InBhdGg1Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnDQogICAgIGlkPSJnNyIgLz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgd2lkdGg9IjE3NCINCiAgIGhlaWdodD0iNDcuODg3MzEiDQogICB2aWV3Qm94PSIwIDAgMTYzLjEyNSA0NC44OTQzNTQiDQogICBpZD0ic3ZnNDM5OSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMi4yICg3MzJhMDFkYTYzLCAyMDIyLTEyLTA5KSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvbXBhcnRtZW50LnN2ZyINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQ0MDEiIC8+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTYiDQogICAgIGlua3NjYXBlOmN4PSI5My4zMTI4NDEiDQogICAgIGlua3NjYXBlOmN5PSIxNC41MjA5NDMiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjI1NjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEzNjkiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSIxOTEyIg0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIHVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiDQogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQ0MDQiPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZSAvPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzQuNDUwMzUsLTMxNi4wNTQzNikiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTg2MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InJlY3QyOTg1Ig0KICAgICAgIHdpZHRoPSIxNTkuMjc4MjMiDQogICAgICAgaGVpZ2h0PSI0MS4xMzU3MzgiDQogICAgICAgeD0iMjc2LjQxNzgyIg0KICAgICAgIHk9IjMxNy45MzM2NSINCiAgICAgICByeT0iMi45NTI2MjE1Ig0KICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiDQogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUzLjk1OTk5OSINCiAgICAgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcR29vZ2xlIERyaXZlXHRvb2xiYXJcbWFjcm9tb2xlY3VsZS5wbmciDQogICAgICAgcng9IjQ2Ljg1MDE2NiINCiAgICAgICBpbmtzY2FwZTpsYWJlbD0icmVjdDI5ODUiIC8+DQogICAgPHRleHQNCiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgeD0iMzAzLjgzNTExIg0KICAgICAgIHk9IjM0Mi41NDQ0OSINCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuDQogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIg0KICAgICAgICAgaWQ9InRzcGFuODE2Ig0KICAgICAgICAgeD0iMzAzLjgzNTExIg0KICAgICAgICAgeT0iMzQyLjU0NDQ5Ig0KICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O3N0cm9rZS13aWR0aDowLjkzNzVweCI+Q29tcGFydG1lbnQ8L3RzcGFuPjwvdGV4dD4NCiAgPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgd2lkdGg9IjE3NCINCiAgIGhlaWdodD0iNDQuNDQzMDAxIg0KICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MzE0Ig0KICAgaWQ9InN2ZzQzOTkiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjIuMiAoNzMyYTAxZGE2MywgMjAyMi0xMi0wOSkiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJjb21wbGV4LnN2ZyINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQ0MDEiIC8+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iNS42NTY4NTQzIg0KICAgICBpbmtzY2FwZTpjeD0iNjAuODExMTgzIg0KICAgICBpbmtzY2FwZTpjeT0iMjMuMTU3NzQ3Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDA5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgdW5pdHM9InB4Ig0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSINCiAgICAgYm9yZGVybGF5ZXI9InRydWUiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzYuMDY0OTcsLTMxNy42Njg5NykiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My4yMzEyNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InJlY3QyOTg1Ig0KICAgICAgIHdpZHRoPSIxNTkuODkzNzQiDQogICAgICAgaGVpZ2h0PSIzOC40MzQwNCINCiAgICAgICB4PSIyNzcuNjgwNiINCiAgICAgICB5PSIzMTkuMjg0NjEiDQogICAgICAgcnk9IjAiDQogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUzLjk1OTk5OSINCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5Ig0KICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxHb29nbGUgRHJpdmVcdG9vbGJhclxtYWNyb21vbGVjdWxlLnBuZyIgLz4NCiAgICA8dGV4dA0KICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjguMTI1cHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45Mzc1cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICB4PSIzMjQuNzE2MDkiDQogICAgICAgeT0iMzQyLjY5MTAxIg0KICAgICAgIGlkPSJ0ZXh0ODE4Ij48dHNwYW4NCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiDQogICAgICAgICBpZD0idHNwYW44MTYiDQogICAgICAgICB4PSIzMjQuNzE2MDkiDQogICAgICAgICB5PSIzNDIuNjkxMDEiDQogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5Db21wbGV4PC90c3Bhbj48L3RleHQ+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjkzNzU7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICBpZD0icmVjdDYyMzUiDQogICAgICAgd2lkdGg9IjguNDM3NSINCiAgICAgICBoZWlnaHQ9IjguNDM3NSINCiAgICAgICB4PSIyNzYuMDY0OTciDQogICAgICAgeT0iMzE3LjY2ODk4Ig0KICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xLjI1NDk4NjhlLTYpIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC45Mzc1O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InJlY3Q1NTc3Ig0KICAgICAgIHdpZHRoPSI4LjQzNzUiDQogICAgICAgaGVpZ2h0PSI4LjQzNzUiDQogICAgICAgeD0iNDMwLjc1MjQ3Ig0KICAgICAgIHk9IjMxNy42Njg5OCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuOTM3NTtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGlkPSJyZWN0NjIyMSINCiAgICAgICB3aWR0aD0iOC40Mzc1Ig0KICAgICAgIGhlaWdodD0iOC40Mzc1Ig0KICAgICAgIHg9IjQzMC43NTI0NyINCiAgICAgICB5PSIzNTAuODk2NzkiIC8+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjkzNzU7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICBpZD0icmVjdDYyMjMiDQogICAgICAgd2lkdGg9IjguNDM3NSINCiAgICAgICBoZWlnaHQ9IjguNDM3NSINCiAgICAgICB4PSIyNzYuMDY0OTciDQogICAgICAgeT0iMzUwLjg5Njc5IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC45Mzc1Ig0KICAgICAgIGlkPSJyZWN0NjIzMyINCiAgICAgICB3aWR0aD0iMi4zNDM3NSINCiAgICAgICBoZWlnaHQ9IjExLjY3MTg3NSINCiAgICAgICB4PSI1NTUuNTI0NzIiDQogICAgICAgeT0iLTYyLjMwMjQzNyINCiAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSg0NSwxLjM0MzEwNTFlLTYsLTIuMzMxMTUxN2UtNikiIC8+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjkzNzUiDQogICAgICAgaWQ9InJlY3Q2MjMxIg0KICAgICAgIHdpZHRoPSIyLjM0Mzc1Ig0KICAgICAgIGhlaWdodD0iMTEuNjcxODc1Ig0KICAgICAgIHg9Ii03OS4xNTQ4ODQiDQogICAgICAgeT0iLTU0MS4wMTYwNSINCiAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSgxMzUpIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC45Mzc1Ig0KICAgICAgIGlkPSJyZWN0NjIzNyINCiAgICAgICB3aWR0aD0iMi4zNDM3NSINCiAgICAgICBoZWlnaHQ9IjExLjY3MTg3NSINCiAgICAgICB4PSI0MjYuNjA2NzUiDQogICAgICAgeT0iMjMuNTgyNTM3Ig0KICAgICAgIHRyYW5zZm9ybT0icm90YXRlKDQ1KSIgLz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuOTM3NSINCiAgICAgICBpZD0icmVjdDM3MDAiDQogICAgICAgd2lkdGg9IjIuMzQzNzUiDQogICAgICAgaGVpZ2h0PSIxMS42NzE4NzUiDQogICAgICAgeD0iNDkuNzYzMTExIg0KICAgICAgIHk9Ii00NTUuMTMxMDciDQogICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoMTM1KSIgLz4NCiAgPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgd2lkdGg9IjE3My45OTkzNyINCiAgIGhlaWdodD0iNDUuMDgyMDAxIg0KICAgdmlld0JveD0iMCAwIDE2My4xMjQ0MiA0Mi4yNjQzNzYiDQogICBpZD0ic3ZnNDM5OSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMi4yICg3MzJhMDFkYTYzLCAyMDIyLTEyLTA5KSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImZhbWlseS5zdmciDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIg0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0NDAxIiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjExLjIiDQogICAgIGlua3NjYXBlOmN4PSI3Ny43Njc4NTciDQogICAgIGlua3NjYXBlOmN5PSI0MC4zNTcxNDMiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjI1NjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEzNjkiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSIxOTEyIg0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIHVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiDQogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQ0MDQiPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZSAvPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzYuMDY0OTgsLTMxNy4wNjk3NykiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My4yNTUxMTgzNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InJlY3QyOTg1Ig0KICAgICAgIHdpZHRoPSIxNTkuODY5MjkiDQogICAgICAgaGVpZ2h0PSIzOS4wMDkyNTgiDQogICAgICAgeD0iMjc3LjY5MjU0Ig0KICAgICAgIHk9IjMxOC42OTczMyINCiAgICAgICByeT0iMCINCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTMuOTU5OTk5Ig0KICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiDQogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPg0KICAgIDx0ZXh0DQogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSINCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIHg9IjMzMi44NjAzMiINCiAgICAgICB5PSIzNDIuMzkxNDIiDQogICAgICAgaWQ9InRleHQ4MTgiPjx0c3Bhbg0KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgIGlkPSJ0c3BhbjgxNiINCiAgICAgICAgIHg9IjMzMi44NjAzMiINCiAgICAgICAgIHk9IjM0Mi4zOTE0MiINCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkZhbWlseTwvdHNwYW4+PC90ZXh0Pg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgd2lkdGg9IjE3NCINCiAgIGhlaWdodD0iNDQuNDQyODIyIg0KICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2Ig0KICAgaWQ9InN2ZzQzOTkiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjIuMiAoNzMyYTAxZGE2MywgMjAyMi0xMi0wOSkiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJnZW5lLnN2ZyINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQ0MDEiIC8+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iMy45NTk3OTgiDQogICAgIGlua3NjYXBlOmN4PSItMzUuODYwNDE2Ig0KICAgICBpbmtzY2FwZTpjeT0iMzguNjM4MzM1Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDA5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgdW5pdHM9InB4Ig0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iMCINCiAgICAgaW5rc2NhcGU6ZGVza2NvbG9yPSIjZDFkMWQxIiAvPg0KICA8bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDQwNCI+DQogICAgPHJkZjpSREY+DQogICAgICA8Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPg0KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICAgICAgPGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4NCiAgICAgICAgPGRjOnRpdGxlIC8+DQogICAgICA8L2NjOldvcms+DQogICAgPC9yZGY6UkRGPg0KICA8L21ldGFkYXRhPg0KICA8Zw0KICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSINCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciINCiAgICAgaWQ9ImxheWVyMSINCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3Ni4wNjQ5NywtMzE3LjY2ODk3KSI+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjY4NzU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGlkPSJyZWN0Mjk4NSINCiAgICAgICB3aWR0aD0iMTYxLjQzNzUyIg0KICAgICAgIGhlaWdodD0iMzkuOTc3NjQ2Ig0KICAgICAgIHg9IjI3Ni45MDg3MiINCiAgICAgICB5PSIzMTguNTEyNzMiDQogICAgICAgcnk9IjEwLjMxNjc5NCINCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTMuOTU5OTk5Ig0KICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiDQogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPg0KICAgIDx0ZXh0DQogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSINCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIHg9IjMzOC4wNzU0NyINCiAgICAgICB5PSIzNDMuOTQ3MTEiDQogICAgICAgaWQ9InRleHQ4MTgiPjx0c3Bhbg0KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgIGlkPSJ0c3BhbjgxNiINCiAgICAgICAgIHg9IjMzOC4wNzU0NyINCiAgICAgICAgIHk9IjM0My45NDcxMSINCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkdlbmU8L3RzcGFuPjwvdGV4dD4NCiAgPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIxNzQiDQogICBoZWlnaHQ9IjQ0LjQ0MjgyMiINCiAgIHZpZXdCb3g9IjAgMCAxNjMuMTI1IDQxLjY2NTE0NiINCiAgIGlkPSJzdmc0Mzk5Ig0KICAgdmVyc2lvbj0iMS4xIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InByb2Nlc3Muc3ZnIj4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0NDAxIiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjEuNCINCiAgICAgaW5rc2NhcGU6Y3g9Ii02MC4yNDgwNzYiDQogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICB1bml0cz0icHgiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4NCiAgICA8dGV4dA0KICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjguMTI1cHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45Mzc1cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICB4PSIzMjguNzE1MTIiDQogICAgICAgeT0iMzQzLjg0MDkxIg0KICAgICAgIGlkPSJ0ZXh0ODE4Ij48dHNwYW4NCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiDQogICAgICAgICBpZD0idHNwYW44MTYiDQogICAgICAgICB4PSIzMjguNzE1MTIiDQogICAgICAgICB5PSIzNDMuODQwOTEiDQogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5Qcm9jZXNzPC90c3Bhbj48L3RleHQ+DQogIDwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9ICI0NCIgaGVpZ2h0PSAiNDQiIHZpZXdCb3g9IjAgMCA0NCA0NCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDQ0IDQ0Ij4NCiAgPGNpcmNsZSBjeD0iMjIiIGN5PSIyMiIgcj0iMjIiIGZpbGw9IiNmZmYiLz4NCiAgPHBhdGggZD0ibTIyLDBjLTEyLjIsMC0yMiw5LjgtMjIsMjJzOS44LDIyIDIyLDIyIDIyLTkuOCAyMi0yMi05LjgtMjItMjItMjJ6bS0xLjMsMTkuM2wtMS40LDEuNGMtMC40LDAuNC0xLDAuNC0xLjQsMGwtNC00Yy0wLjMtMC4zLTAuOS0wLjEtMC45LDAuNHYxYzAsMC42LTAuNCwxLTEsMWgtMmMtMC42LDAtMS0wLjQtMS0xdi04YzAtMC42IDAuNC0xIDEtMWg4YzAuNiwwIDEsMC40IDEsMXYyYzAsMC42LTAuNCwxLTEsMWgtMWMtMC40LDAtMC43LDAuNS0wLjQsMC45bDQsNGMwLjUsMC4zIDAuNSwwLjkgMC4xLDEuM3ptMTQuMywxNC43YzAsMC42LTAuNCwxLTEsMWgtOGMtMC42LDAtMS0wLjQtMS0xdi0yYzAtMC42IDAuNC0xIDEtMWgxYzAuNCwwIDAuNy0wLjUgMC40LTAuOWwtNC00Yy0wLjQtMC40LTAuNC0xIDAtMS40bDEuNC0xLjRjMC40LTAuNCAxLTAuNCAxLjQsMGw0LDRjMC4zLDAuMyAwLjksMC4xIDAuOS0wLjR2LTFjMC0wLjYgMC40LTEgMS0xaDJjMC42LDAgMSwwLjQgMSwxdjguMWgtMC4xeiIvPg0KPC9zdmc+DQo="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iYWN0aXZhdGVzLnN2ZyINCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyINCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiDQogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIg0KICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQiPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0ibWFya2VyMTIwMiINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDEyMDAiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDk1OSINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICA8L2RlZnM+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTU5Ig0KICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyINCiAgICAgaW5rc2NhcGU6Y3k9IjE4LjQ2ODYyMSINCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4Ig0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgZml0LW1hcmdpbi10b3A9IjAiDQogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCINCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCINCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE3Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGUgLz4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4NCiAgICA8cGF0aA0KICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjMuNzQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDQ3LjM1MDg5Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTp0eXBlPSJzdGFyIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiDQogICAgICAgaWQ9InBhdGg0OTUzIg0KICAgICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICAgIHNvZGlwb2RpOmN4PSIyMTIuNDI5MDIiDQogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiINCiAgICAgICBzb2RpcG9kaTpyMT0iMTEuMDU3MzQ3Ig0KICAgICAgIHNvZGlwb2RpOnIyPSI1LjUyODY3MzYiDQogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiINCiAgICAgICBzb2RpcG9kaTphcmcyPSIxLjk2MTY0NTUiDQogICAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJ0cnVlIg0KICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiDQogICAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgICBkPSJtIDIxOS4xNzY1MiwyNjIuNTU4MTggLTE3LjcwNzU3LC03LjI5NjM3IDE1LjE3MjYyLC0xMS42ODcwMSB6Ig0KICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSINCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9IjAuMDc4NDg5NjUzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzk0MzQwOTgsMC44OTk3NzUwNCwtMC45MTg5NjQxOSwwLjM4NjEwNjYzLDQ3NC45ODU4MywxLjM2MTczMjkpIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iYmluZHMuc3ZnIg0KICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCINCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiDQogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzNCI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJtYXJrZXIxMjAyIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoMTIwMCINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoOTU5Ig0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogIDwvZGVmcz4NCiAgPHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBpZD0iYmFzZSINCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIg0KICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiDQogICAgIGlua3NjYXBlOmN4PSItNC44MTEwMzU3Ig0KICAgICBpbmtzY2FwZTpjeT0iMTguNDY4NjIxIg0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTciPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPg0KICAgIDxwYXRoDQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgZD0ibSAyNzUuNjQyNDcsMjkwLjU3MTc1IGggNjAuOTM3NSINCiAgICAgICBpZD0icGF0aDQ5NDkiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iaW5kdWNlcy5zdmciDQogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciDQogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMzAwIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCINCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0Ij4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9Im1hcmtlcjEyMDIiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGgxMjAwIg0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJUcmlhbmdsZU91dEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5NTkiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSINCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciDQogICAgIGlua3NjYXBlOmN5PSIxOC40Njg2MjEiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPg0KICA8bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNyI+DQogICAgPHJkZjpSREY+DQogICAgICA8Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPg0KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICAgICAgPGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4NCiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+DQogICAgICA8L2NjOldvcms+DQogICAgPC9yZGY6UkRGPg0KICA8L21ldGFkYXRhPg0KICA8Zw0KICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSINCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciINCiAgICAgaWQ9ImxheWVyMSINCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+DQogICAgPHBhdGgNCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo3LjQ5OTk5OTg3LDcuNDk5OTk5ODc7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowIg0KICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDQ3LjM1MDg5Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTp0eXBlPSJzdGFyIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiDQogICAgICAgaWQ9InBhdGg0OTUzIg0KICAgICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICAgIHNvZGlwb2RpOmN4PSIyMTIuNDI5MDIiDQogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiINCiAgICAgICBzb2RpcG9kaTpyMT0iMTEuMDU3MzQ3Ig0KICAgICAgIHNvZGlwb2RpOnIyPSI1LjUyODY3MzYiDQogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiINCiAgICAgICBzb2RpcG9kaTphcmcyPSIxLjk2MTY0NTUiDQogICAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJ0cnVlIg0KICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiDQogICAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgICBkPSJtIDIxOS4xNzY1MiwyNjIuNTU4MTggLTE3LjcwNzU3LC03LjI5NjM3IDE1LjE3MjYyLC0xMS42ODcwMSB6Ig0KICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSINCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9IjAuMDc4NDg5NjUzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzk0MzQwOTgsMC44OTk3NzUwNCwtMC45MTg5NjQxOSwwLjM4NjEwNjYzLDQ3NC45ODU4MywxLjM2MTczMjkpIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iaW5oaWJpdHMuc3ZnIg0KICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCINCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiDQogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzNCI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlN0b3BMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwLjAiDQogICAgICAgcmVmWD0iMC4wIg0KICAgICAgIGlkPSJTdG9wTCINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDk4NiINCiAgICAgICAgIGQ9Ik0gMC4wLDUuNjUgTCAwLjAsLTUuNjUiDQogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIgLz4NCiAgICA8L21hcmtlcj4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9Im1hcmtlcjEyMDIiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGgxMjAwIg0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJUcmlhbmdsZU91dEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5NTkiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSINCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciDQogICAgIGlua3NjYXBlOmN5PSIxMy45MjI5MzQiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPg0KICA8bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNyI+DQogICAgPHJkZjpSREY+DQogICAgICA8Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPg0KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICAgICAgPGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4NCiAgICAgICAgPGRjOnRpdGxlIC8+DQogICAgICA8L2NjOldvcms+DQogICAgPC9yZGY6UkRGPg0KICA8L21ldGFkYXRhPg0KICA8Zw0KICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSINCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciINCiAgICAgaWQ9ImxheWVyMSINCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+DQogICAgPHBhdGgNCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA1OS43ODA1Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi43NzU5Mzc1NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo4LjMyNzgxMjQ2LCAyLjc3NTkzNzQ5O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIg0KICAgICAgIGlkPSJyZWN0NDk4MSINCiAgICAgICB3aWR0aD0iMC45NzQxNjk1NSINCiAgICAgICBoZWlnaHQ9IjE1Ljg4OTcwMyINCiAgICAgICB4PSIzMzQuMjE3ODMiDQogICAgICAgeT0iMjgyLjYyNjg5IiAvPg0KICA8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0icmVwcmVzc2VzLnN2ZyINCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyINCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiDQogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIg0KICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQiPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJTdG9wTCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMC4wIg0KICAgICAgIHJlZlg9IjAuMCINCiAgICAgICBpZD0iU3RvcEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5ODYiDQogICAgICAgICBkPSJNIDAuMCw1LjY1IEwgMC4wLC01LjY1Ig0KICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJtYXJrZXIxMjAyIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoMTIwMCINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoOTU5Ig0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogIDwvZGVmcz4NCiAgPHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBpZD0iYmFzZSINCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIg0KICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiDQogICAgIGlua3NjYXBlOmN4PSItMjUuMzI5NzU5Ig0KICAgICBpbmtzY2FwZTpjeT0iMTMuOTIyOTM0Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTciPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZSAvPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPg0KICAgIDxwYXRoDQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6Ny40OTk5OTk4NywgNy40OTk5OTk4NztzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgZD0ibSAyNzUuNjQyNDcsMjkwLjU3MTc1IGggNTkuNzgwNSINCiAgICAgICBpZD0icGF0aDQ5NDkiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuNzc1OTM3NTY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6OC4zMjc4MTIzNSwgMi43NzU5Mzc0NTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSINCiAgICAgICBpZD0icmVjdDQ5ODEiDQogICAgICAgd2lkdGg9IjAuOTc0MTY5NTUiDQogICAgICAgaGVpZ2h0PSIxNS44ODk3MDMiDQogICAgICAgeD0iMzMyLjM0MjgzIg0KICAgICAgIHk9IjI4Mi42MjY4OSIgLz4NCiAgPC9nPg0KPC9zdmc+DQo="},function(t,e){t.exports=require("react-toastify/dist/ReactToastify.min.css")},function(t,e,a){},function(t,e,a){},function(t,e,a){},function(t,e){t.exports="data:image/png;base64,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"},function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh0AAABxCAYAAABxyRHvAAAABGdBTUEAALGPC/xhBQAAQABJREFUeAHt3QeYLEdxAOBBPBtjbIxlA8YEP4GMyME2CAS2HgIEmCSRjEWQSCKDyAgEepgghIgig0GPnDMyGR6YnHMGCRBRIGOwwXlcf0Mtc3Oze7t3t3v33nV93+7szvR0V1dXV1VXV3efrQ1oNin88Ic/bPLzpS99qfnyl7/cfOtb32rOOOOM5sc//nHz05/+tPnlL3/ZZBXOdrazNec85zmb85znPM15z3ve5k//9E+b7du3NwcccEBzyUtesjn/+c/fnO985yvXffbZZ5PWuqJVKVApUClQKVApsFdSYOfZNovR8ZOf/KT5+te/3nz6059uPvKRjxQD4wc/+EExOn7xi1+sC/UZJIyOP/mTP2kufvGLN1e+8pWbK17xis3+++9fDJF1KaRmUilQKVApUClQKVApMESBjTU6vvrVrzbvf//7m7e97W3F2GB0/N///d8QonO9d9GLXrS57GUv2xx66KHNjh07mktd6lJzLa9mXilQKVApUClQKbAFKbB4o+P73/9+8/a3v7155Stf2Xz4wx9uzjrrrE1Fd1MzV7rSlZrDDz+8ud71rlemZzYVghWZSoFKgUqBSoFKgT2TAoszOr7whS80u3btal796lc3p59++qYnl/iQC17wgs0NbnCD5sgjj2yucpWrbHqcK4KVApUClQKVApUCm5gC8zc6Pve5zzUnn3xyMTYEfq4FxGSc+9znbn73d3+3+Z3f+Z3mt37rt5pt27Y1DATwv//7v83//M//NP/xH/9RAkx//vOfNz/72c/WUmR5V3m8Hve4xz3K9MuaM6wZVApUClQKVApUCmw9CszP6Pje977XPOEJT2ie//znl1Ums9D2j//4j5s/+7M/a8RaXPrSl24udrGLNRe5yEWaP/iDPxgZHec4xzma3/7t315idDA40uhgeKTR8aMf/ag57bTTGitgvvKVrzTf+c53yioYaWcBRs/Nbnaz5gEPeECJAZnl3Zq2UqBSoFKgUqBSYItTYP2NDt6GF77whc0//MM/TD2N8nu/93vN5S53ueav//qvm4MPPrisJrHUlSdjHsAIsfT2U5/6VPOud72r+cQnPtF84xvfmKooXhXLce95z3uWD0OoQqVApUClQKVApUClwIoUWF+j49vf/nbzoAc9qHn5y1++Ysm8FAceeGDxHBxyyCFlxchG7Z1x5plnNp/85Ceb17/+9c1b3vKWYpCsVIGzn/3szdWudrXmhBNOaA466KCVktfnlQKVApUClQKVAludAutndFj2KubBstdJwEtgiuI2t7lNMTo2ytAYh+N3v/vd5tRTT21e9KIXNR/4wAdGG4+NS68+xx9/fHOXu9ylYYhUqBSoFKgUqBSoFKgUGKTA+hgdT33qU5tjjz22+fd///fBUtwUp3G7292uufOd71xiNMYm3CQPxIS89a1vbdTt3e9+90SsTAPd8Y53bB772MeWmJOJievDSoFKgUqBSoFKga1JgbUZHQIxH/rQhzYnnXTSWI+A1SVHHHFE8+AHP7hsRb6n0Znx8ZrXvKY58cQTGytxxoF6Xv/612+e8YxnlO3Xx6Wr9ysFKgUqBSoFKgW2KAVWb3T853/+Z3PMMcc0z3rWs8bS7hKXuESJeTjssMPGptkTHjjbRfDpk570pObpT39682//9m+DaJteEQz7ghe8oKy2GUxUb1YKVApUClQKVApsTQqszuj47//+7+Ze97rXRIPjtre9bfEOOOdkbwErc+ym+sAHPrD5/Oc/P1itNDys4LnwhS88mKberBSoFKgUqBSoFNiCFNg581GrPBz3v//9Bw0Oy0n33XffEgdxyimnlIPV9iaiMiiue93rNm9+85vLlJG9QvrAMPnnf/7nEr9iP5AKlQKVApUClQKVApUCv6LATEaHGI4nP/nJzdOe9rRl9GNwOEqesWEVy2ZblbIM4VXeUE8bl4ndsFeHnVH7wPB473vf29zvfvdr/vVf/7X/uP6vFKgUqBSoFKgU2JIUOPvOgGlq7vTXN73pTUXRml7pAkVsKsGUAk/AVgDGxt/8zd8U4+pjH/tY06cJelk+/F//9V9l6/S6nHYrcEWtY6VApUClQKXABArsntro+PKXv9yI0/jxj3+8LD8eDvtaXOMa11j2bG++YcVKHgTnxNz+tuo8Hla8bI/dVS9zmcuMzojZm2lS61YpUClQKVApUCkwhgK7p5pesf+G80ZOHzgd9g//8A+b5zznORt6EBr8NmoaQ1yHGJe73/3ug9u2W+nyiEc8onHKboVKgUqBSoFKgUqBrUyBFY0O0wTPfe5zyy6dfUJRuI9+9KPL/hT9Z4v6z+Cw9fod7nCHQS/MIvBwCu1xxx3X3OQmN1kWy2K5LWPNWTSTNk9bBJ61jEqBSoFKgUqBSoGNpMCKRodplcc97nHLcBQoStHbYXSjgBK3OZm9M2zgZSvyoemfReDn4LfHPOYxzV/8xV8sK860yz/90z81r3jFK8ZuorbspXqjUqBSoFKgUqBSYC+jwNliJN6OqxNledRRRzUveclLliW58pWvXLwftjffCEiD4ylPecqS4m9605uW5bwbgZcYDlum/93f/V3zL//yL0vwEmx7qUtdqtDM6pcKlQLzogA+FMCM58Qd+cwDyAflgL4YEWi9qOBp3lh19fHbsn749HFyXIGDJitUCuypFMDT+p2PgT+e3sNWik7eHMxGWDe84Q1HgiUbylH0b3zjGzcscHScwZH4baThQeA96lGPKjuxEv5dMB113/vetzzfCEYhkH0mAcG9WmWhvn1B3y9LvTei7n089tb/+M9BhXnSs8MVr3nNa666TcfRibFhWbjl89rcfx+ruHj9HvnIRzZXvOIVx70+1X154SkCVr38Puc5z1mMKDzKmHJMwWmnnVb2Bzrf+c7XfOUrXylnIP30pz8dved9RtCtb33rctDkVIVvoUTTyIUkB/mg/7omoO8kyLSrlSuT8t5qz+z9ZBXpRz/60caO34cffnhz8YtffEl7bHKa7Bw7BNKZH//4xy8zODDQ0UcfvWkNDgQ31UIQPvvZzy4HzS2yERgWpnkYbBijC4Tyi1/84uZWt7pVc+lLX7r7aO6/CexPfOITzZlnnjm2LG0rMNiKnBQUYxP3HhA8VvBMCuiVpx1qh6agetnVv6uggDb+0pe+VPjva1/7WmlDnrdXvepVazYA+ugo6wc/+EExPPA1oyANWsqf0l8tyM806fve977iOfziF7/Y/OxnPyvZnetc52r222+/5qCDDmouf/nLFwPr+c9/ftkhWb+TjtEFN/mkQjz3uc/dHHzwwatFaa9975e//GWDV6bdyBD9KTv9GA98//vfLyv0su3HEeo85zlPaS8D1gqrowDe3rVrV9kr66yzzmroGvR3rtkFLnCB1WW6EW+Fch6E8GS0MZIw9bLks//++7dnnHHG4DvzvhkrQdp73/veS/Dp49f9Hx6PNpTsvNFaln+M0NpXv/rVbYyuluEa7t32Pve5Txsddtl787yBdte5znXaYNTSrmEALMPNvYte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"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1Ljk1OHB4IiBoZWlnaHQ9IjQ1Ljk1OHB4IiB2aWV3Qm94PSIwIDAgNDUuOTU4IDQ1Ljk1OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuOTU4IDQ1Ljk1ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTIyLjk3OSwwQzEwLjI4OCwwLDAsMTAuMjg5LDAsMjIuOTc5czEwLjI4OCwyMi45NzksMjIuOTc5LDIyLjk3OWMxMi42OSwwLDIyLjk3OS0xMC4yODksMjIuOTc5LTIyLjk3OVMzNS42NywwLDIyLjk3OSwweg0KCQkgTTMyLjI1MywyNi45NzdoLTUuMzAxdjUuMjg5YzAsMi4yMDctMS43NjUsMy45OTYtMy45NzIsMy45OTZjLTIuMjA2LDAtMy45NzEtMS43ODktMy45NzEtMy45OTZ2LTUuMjkxSDEzLjcxDQoJCWMtMi4yMDcsMC00LjAwNi0xLjc4OS00LjAwNi0zLjk5N2MwLTIuMjA3LDEuNzk2LTMuOTk2LDQuMDAzLTMuOTk2aDUuMzAydi01LjI4OWMwLTIuMjA4LDEuNzY1LTMuOTk3LDMuOTcxLTMuOTk3DQoJCWMyLjIwOCwwLDMuOTcyLDEuNzg5LDMuOTcyLDMuOTk3djUuMjloNS4zMDFjMi4yMDcsMCwzLjk5NywxLjc5LDMuOTk3LDMuOTk3QzM2LjI1LDI1LjE4OCwzNC40NiwyNi45NzcsMzIuMjUzLDI2Ljk3N3oiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMS4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDYxMiA2MTIiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA2MTIgNjEyOyINCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImRlbGV0ZS1zaW1wbGUuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDMiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnM0MSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlkPSJuYW1lZHZpZXczOSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciDQogICAgIGlua3NjYXBlOmN4PSIyOTUuMDM0MDgiDQogICAgIGlua3NjYXBlOmN5PSIzMzAuODU0NDgiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9Imc1Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Nzg4MTM1LDAsMCwwLjk5Nzg4MTM1LDEuNzMwNDAxMiwwLjkyMzcyODQ3KSI+PHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNyINCiAgICAgICBkPSJNIDU4Ny44MjYsMTg2Ljk2NiBDIDU3MS43MSwxNDkuNjM0IDU0OS44ODIsMTE3LjE5OCA1MjIuMzQyLDg5LjY1OCA0OTQuODAyLDYyLjExOCA0NjIuMzY2LDQwLjI5IDQyNS4wMzQsMjQuMTc0IDM4Ny43MDIsOC4wNTggMzQ4LjAyNCwwIDMwNiwwIDI3Ny44NDgsMCAyNTAuNzE2LDMuNjcyIDIyNC42MDQsMTEuMDE2IDE5OC40OTIsMTguMzYgMTc0LjExNCwyOC42NjIgMTUxLjQ3LDQxLjkyMiAxMjguODI2LDU1LjE4MiAxMDguMjIyLDcxLjA5NCA4OS42NTgsODkuNjU4IDcxLjA5NCwxMDguMjIyIDU1LjE4MiwxMjguODI2IDQxLjkyMiwxNTEuNDcgMjguNjYyLDE3NC4xMTYgMTguMzYsMTk4LjQ5MiAxMS4wMTYsMjI0LjYwNCAzLjY3MiwyNTAuNzE2IDAsMjc3Ljg0OCAwLDMwNiBjIDAsMjguMTUyIDMuNjcyLDU1LjI4NCAxMS4wMTYsODEuMzk2IDcuMzQ0LDI2LjExIDE3LjY0Niw1MC40ODcgMzAuOTA2LDczLjEzNCAxMy4yNiwyMi42NDQgMjkuMTcyLDQzLjI0OSA0Ny43MzYsNjEuODEyIDE4LjU2NCwxOC41NjQgMzkuMTY4LDM0LjQ3OCA2MS44MTIsNDcuNzM2IDIyLjY0NCwxMy4yNiA0Ny4wMjIsMjMuNTYxIDczLjEzNCwzMC45MDYgQyAyNTAuNzE2LDYwOC4zMjggMjc3Ljg0OCw2MTIgMzA2LDYxMiBjIDI4LjE1MiwwIDU1LjI4NCwtMy42NzIgODEuMzk2LC0xMS4wMTYgMjYuMTExLC03LjM0NiA1MC40ODgsLTE3LjY0NiA3My4xMzUsLTMwLjkwNiAyMi42NDQsLTEzLjI1OSA0My4yNDksLTI5LjE3MiA2MS44MTIsLTQ3LjczNiAxOC41NjQsLTE4LjU2MyAzNC40NzgsLTM5LjE2OCA0Ny43MzYsLTYxLjgxMiAxMy4yNiwtMjIuNjQ2IDIzLjU2MSwtNDcuMDIzIDMwLjkwNiwtNzMuMTM1IEMgNjA4LjMyOCwzNjEuMjg0IDYxMiwzMzQuMTUyIDYxMiwzMDYgNjEyLDI2My45NzYgNjAzLjk0MiwyMjQuMjk4IDU4Ny44MjYsMTg2Ljk2NiBaIE0gNDY4LjE4LDM5MS42OCBjIDIuMDQsMi4wNCAzLjA2Myw0LjI4NCAzLjA2Myw2LjczMiAwLDIuNDQ4IC0xLjAyMSw0LjQ4OCAtMy4wNjMsNi4xMiBsIC01OS45NzYsNjAuNTg4IGMgLTEuNjMxLDEuNjMyIC0zLjg3NiwyLjQ0OCAtNi43MzIsMi40NDggLTIuODU0LDAgLTQuODk1LC0wLjgxNiAtNi4xMiwtMi40NDggTCAzMDkuMDYsMzc4LjgyOCAyMjMuMzgsNDY1LjEyIGMgLTIuNDQ4LDEuNjMyIC00LjY5MiwyLjQ0OCAtNi43MzIsMi40NDggLTEuNjMyLDAgLTMuNjcyLC0wLjgxNiAtNi4xMiwtMi40NDggbCAtNTkuOTc2LC02MC41ODggYyAtMi4wNCwtMS4yMjYgLTMuMDYsLTMuMjY3IC0zLjA2LC02LjEyIDAsLTIuNDQ4IDEuMDIsLTQuNjkyIDMuMDYsLTYuNzMyIGwgODUuNjgsLTg1LjY4IC04NS42OCwtODUuNjggYyAtMi4wNCwtMi4wNCAtMy4wNiwtNC4yODQgLTMuMDYsLTYuNzMyIDAsLTIuODU2IDEuMDIsLTQuODk2IDMuMDYsLTYuMTIgbCA1OS45NzYsLTYwLjU4OCBjIDEuNjMyLC0xLjYzMiAzLjY3MiwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDg1LjY4LDg2LjI5MiA4Ni4yOTIsLTg2LjI5MiBjIDEuNjM1LC0xLjYzMiAzLjY3NSwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDU5Ljk3Niw2MC41ODggYyAyLjA0LDEuNjMyIDMuMDYzLDMuNjcyIDMuMDYzLDYuMTIgMCwyLjQ0OCAtMS4wMjEsNC42OTIgLTMuMDYzLDYuNzMyIEwgMzgyLjUsMzA2IGwgODUuNjgsODUuNjggeiINCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48Zw0KICAgICBpZD0iZzM3IiAvPjwvc3ZnPg=="},function(t,e){t.exports=require("sharedb/lib/client")},function(t,e){t.exports=require("jquery-ui-dist/jquery-ui")},function(t,e){t.exports=require("cytoscape-edgehandles")},function(t,e){t.exports=require("cytoscape-edge-editing")},function(t,e){t.exports=require("cytoscape-fcose")},function(t,e){t.exports=require("cytoscape-node-editing")},function(t,e){t.exports=require("cytoscape-undo-redo")},function(t,e){t.exports=require("cytoscape-panzoom")},function(t,e){var a,i,o,n,r,l,c,g,I,s,d,u,C,N;t.exports=(a=[{selector:"node",style:{"text-valign":"center","text-halign":"center",color:"#1e2829",width:function(t){return t.data("w")||0},height:function(t){return t.data("h")||0},"background-color":"white",shape:function(t){return I(t)},"border-width":function(t){return n(t)},"border-color":function(t){return d(t)},"font-size":14,"background-opacity":function(t){return i(t)},"underlay-opacity":0,"underlay-color":"#ffc90e"}},{selector:"node[name]",style:{label:"data(name)"}},{selector:"node:parent",style:{shape:function(t){return I(t)},"text-valign":function(t){return"bottom"},"text-margin-y":2,"padding-left":function(t){return o(t)},"padding-right":function(t){return o(t)},"padding-bottom":function(t){return o(t)},"padding-top":function(t){return o(t)},"background-opacity":.5,"border-width":function(t){return r(t)},"border-color":function(t){return d(t)},"background-color":function(t){return s(t)}}},{selector:"edge",style:{"arrow-scale":1.7,"curve-style":"bezier","text-background-color":"#EEEEEE","text-background-opacity":0,"target-arrow-shape":function(t){return C(t)},width:1,"line-color":function(t){return u(t)},"target-arrow-color":function(t){return u(t)},"line-style":function(t){return N(t)},opacity:1,"underlay-opacity":0,"underlay-color":"#ffc90e"}},{selector:"edge[name]",style:{label:function(t){var e=t.data("name");return""===e?e:e+"\n ⁠"},"text-wrap":"wrap","edge-text-rotation":"autorotate","text-background-opacity":"0"}},{selector:".eh-handle",style:{"background-color":"#1abc9c",width:12,height:12,shape:"ellipse","overlay-opacity":0,"border-width":12,"border-opacity":0}},{selector:".eh-hover",css:{"background-color":"#1abc9c"}},{selector:".eh-source",css:{"border-width":2,"border-color":"#1abc9c"}},{selector:".eh-target",css:{"border-width":2,"background-color":"#1abc9c","border-color":"#1abc9c"}},{selector:".eh-preview, .eh-ghost-edge",css:{"line-color":"#1abc9c","target-arrow-color":"#1abc9c","source-arrow-color":"#1abc9c"}},{selector:".highlightedEdge",style:{width:3.5,"border-width":4,"line-color":"#1abc9c","target-arrow-color":"#1abc9c","arrow-scale":2}},{selector:".highlightedNode",style:{"border-width":function(t){return l(t)},"border-color":"#1abc9c","background-color":"#fff"}},{selector:".invalidGene",style:{"border-width":2,"border-color":"#e94332",color:"#e94332"}},{selector:".invalidGeneHighlight",style:{"border-width":3,"font-weight":"bold","border-color":"#e94332",color:"#e94332"}},{selector:"node:selected",style:{"border-width":function(t){return c(t)},"underlay-opacity":.25,"underlay-color":"#ffc90e"}},{selector:".highlightedNode:selected, .invalidGeneHighlight:selected",style:{"border-width":function(t){return g(t)}}},{selector:"edge:selected",style:{width:3,"underlay-opacity":.25,"underlay-color":"#ffc90e"}}],i=function(t){switch(t._private.data.type){case"FAMILY":case"COMPLEX":case"COMPARTMENT":return.5;default:return 1}},o=function(t){switch(t._private.data.type){case"FAMILY":return 5;case"COMPLEX":return"5";case"COMPARTMENT":case"PROCESS":return 10;default:return 5}},n=function(t){switch(t._private.data.type){case"GENE":return 1;case"PROCESS":return 0;default:return 2}},r=function(t){switch(t._private.data.type){case"GENE":return 1;case"PROCESS":return 0;case"FAMILY":return 2;case"COMPLEX":return 1;case"COMPARTMENT":return 4;default:return 1}},l=function(t){switch(t._private.data.type){case"GENE":return 3;case"PROCESS":return 1;case"FAMILY":return 4;case"COMPARTMENT":return 6;default:return 3}},c=function(t){switch(t._private.data.type){case"GENE":return 2;case"PROCESS":return 1;case"FAMILY":case"COMPARTMENT":default:return 3}},g=function(t){switch(t._private.data.type){case"GENE":return 3;case"PROCESS":return 1;case"FAMILY":return 4;case"COMPARTMENT":return 6;default:return 3}},I=function(t){switch(t._private.data.type){case"GENE":case"PROCESS":return"roundrectangle";case"FAMILY":return"rectangle";case"COMPARTMENT":return"barrel";case"COMPLEX":return"cutrectangle";default:return"roundrectangle"}},s=function(t){return"#fff"},d=function(t){switch(t._private.data.type){case"GENE":case"FAMILY":case"COMPLEX":case"COMPARTMENT":default:return"#000000"}},u=function(t){return"#1b1b1b"},C=function(t){switch(t._private.data.type){case"ACTIVATES":return"triangle";case"INHIBITS":return"tee";case"INDUCES":return"triangle";case"REPRESSES":return"tee";case"BINDS":default:return"none"}},N=function(t){switch(t._private.data.type){case"ACTIVATES":case"INHIBITS":return"solid";case"INDUCES":case"REPRESSES":return"dashed";case"BINDS":default:return"solid"}},a)},function(t,e){var a={zoomFactor:.05,zoomDelay:45,minZoom:.1,maxZoom:10,fitPadding:50,panSpeed:10,panDistance:10,panDragAreaSize:75,panMinPercentSpeed:.25,panInactiveArea:8,panIndicatorMinOpacity:.5,zoomOnly:!1,fitSelector:void 0,animateOnFit:function(){return!1},fitAnimationDuration:1e3,sliderHandleIcon:"fa fa-minus",zoomInIcon:"fa fa-plus",zoomOutIcon:"fa fa-minus",resetIcon:"fa fa-expand"};t.exports=a},function(t,e){t.exports=require("cytoscape-navigator")},function(t,e){t.exports=require("cytoscape-context-menus")},function(t,e){t.exports=require("konva")},function(t,e){t.exports=require("cytoscape-view-utilities")},function(t,e){t.exports=require("cytoscape-grid-guide")},function(t,e){t.exports=require("cytoscape-popper")},function(t,e){t.exports=require("cytoscape-layout-utilities")},function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik00ODEuNTA4LDIxMC4zMzZMNjguNDE0LDM4LjkyNmMtMTcuNDAzLTcuMjIyLTM3LjA2NC00LjA0NS01MS4zMDksOC4yODdDMi44Niw1OS41NDctMy4wOTgsNzguNTUxLDEuNTU4LDk2LjgwOA0KCQkJTDM4LjMyNywyNDFoMTgwLjAyNmM4LjI4NCwwLDE1LjAwMSw2LjcxNiwxNS4wMDEsMTUuMDAxYzAsOC4yODQtNi43MTYsMTUuMDAxLTE1LjAwMSwxNS4wMDFIMzguMzI3TDEuNTU4LDQxNS4xOTMNCgkJCWMtNC42NTYsMTguMjU4LDEuMzAxLDM3LjI2MiwxNS41NDcsNDkuNTk1YzE0LjI3NCwxMi4zNTcsMzMuOTM3LDE1LjQ5NSw1MS4zMSw4LjI4N2w0MTMuMDk0LTE3MS40MDkNCgkJCUM1MDAuMzE3LDI5My44NjIsNTEyLDI3Ni4zNjQsNTEyLDI1Ni4wMDFDNTEyLDIzNS42MzgsNTAwLjMxNywyMTguMTM5LDQ4MS41MDgsMjEwLjMzNnoiLz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="},function(t,e){t.exports=require("@datastructures-js/max-heap")},function(t,e,a){"use strict";a.r(e),a.d(e,"EModalType",(function(){return Ma})),a.d(e,"PathwayMapper",(function(){return Wa}));var i,o=a(3),n=a.n(o),r=a(2),l=a(5),c=a(0),g=a.n(c),I=a(1),s=a(10),d=(a(54),a(22)),u=a.n(d),C=(a(55),a(56),a(57),a(16),a(8)),N=a(15),p=function(){function t(){}return Object.defineProperty(t,"exportGraph",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a){var i=t.pathwayTitle+"\n\n";i+=t.pathwayDetails+"\n\n";var o=e.nodes(),n=e.edges();if(i+="--NODE_NAME\tNODE_ID\tNODE_TYPE\tPARENT_ID\tPOSX\tPOSY\tWIDTH\tHEIGHT--\n",o)for(var r=0;r4?b[4]:"0",p=b.length>5?b[5]:"0",M={group:"nodes",data:{id:d,name:s,type:u,w:b.length>7?b[6]:"PROCESS"===u?6*s.length+24:"150",h:b.length>7?b[7]:"PROCESS"===u?"24":"52",parent:-1},position:{x:parseInt(N),y:parseInt(p)}};"-1"!=C&&(M.data.parent=C),a.push(M)}for(var A=n;A4?b[4].split(";"):[],w=b.length>5?b[5]:"",j=b.length>6?b[6]:"",T=b.length>7?b[7]:"",f=[];if(j)for(var v=j.split(")"),L=0;L=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},A=function(){function t(){Object.defineProperty(this,"pathwayInfo",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(this),this.pathwayInfo={pathwayTitle:"New Pathway",pathwayDetails:""}}return Object.defineProperty(t.prototype,"getPathwayInfo",{get:function(){return this.pathwayInfo},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"setPathwayInfo",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.pathwayInfo=t}}),Object.defineProperty(t.prototype,"b64toBlob",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a){void 0===a&&(a=512),e=e||"";for(var i=atob(t),o=[],n=0;n0){var n=a[0],r=n.boundingBox(),l=n.outerHeight(),c=this;a.forEach((function(e,a){if(0!=a&&null==i[e.parent().id()]){var o=c.calculateNewPosition(t,e,r,l);c.changePosition(e,0,0,o)}})),this.editor.handleChangePositionByAlignment(c.movedNodes)}}}),Object.defineProperty(t.prototype,"calculateNewPosition",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a,i){var o,n=e.position(),r=e.boundingBox(),l=e.isParent()?e.outerHeight()-(r.h-e.outerHeight())/2-(e.outerHeight()-e.height())/2:e.height(),c=e.isParent()?r.h-e.outerHeight():0;if("vLeft"===t)o={x:a.x1+r.w/2,y:n.y};else if("vCen"===t)o={x:a.x1+a.w/2,y:n.y};else if("vRight"===t)o={x:a.x2-r.w/2,y:n.y};else if("hTop"===t)o={x:n.x,y:a.y1+r.h/2};else if("hMid"===t&&e.isParent()&&""==e.data("name"))o={x:n.x,y:a.y1+a.h/2};else if("hMid"===t)o={x:n.x,y:a.y1+i/2+c/2};else if("hBot"===t&&e.isParent()&&""==e.data("name"))o={x:n.x,y:a.y2-r.h/2};else{if("hBot"!==t)return void console.log("Error: wrong alignment name "+t);o={x:n.x,y:a.y1+i-l/2}}return o}}),Object.defineProperty(t.prototype,"changePosition",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a,i){if(t.isParent()){var o=t.children(),n=t.boundingBox(),r=this;o.forEach((function(t,e){var a=t.boundingBox(),o=-(n.x1-a.x1)-n.w/2+a.w/2,l=-(n.y1-a.y1)-n.h/2+a.h/2;t.isParent()?r.changePosition(t,0,0,{x:i.x+o,y:i.y+l}):r.changePosition(t,o,l,i)}))}else{var l={x:i.x+e,y:i.y+a};this.movedNodes.push({node:t,nextPosition:l,oldPosition:null})}}}),t}(),m=(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(t,e)},function(t,e){function a(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(a.prototype=e.prototype,new a)}),E=function(t){function e(e){return t.call(this,e)||this}return m(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{show:this.props.show,onHide:function(){t.props.handleClose(Ma.ABOUT)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"About")),g.a.createElement(I.Modal.Body,null,g.a.createElement("h3",{id:"about-model-header"},"PathwayMapper 2.3"),g.a.createElement("div",{className:"aboutImageContent"},g.a.createElement("img",{src:a(58),alt:"",height:"34px"})),g.a.createElement("div",{className:"aboutImageContent"},g.a.createElement("img",{src:a(59),alt:"",height:"34px"})),g.a.createElement("div",{className:"adressText"},g.a.createElement("p",null,"i-Vis information Visualization Lab"),g.a.createElement("p",null,"Bilkent University, Ankara, Turkey")),g.a.createElement("div",{className:"adressText"},g.a.createElement("p",null,"Memorial Sloan-Kettering Cancer Center"),g.a.createElement("p",null,"New York, USA"))),g.a.createElement(I.Modal.Footer,null,g.a.createElement("a",{href:"https://github.com/iVis-at-Bilkent/pathway-mapper"},"https://github.com/iVis-at-Bilkent/pathway-mapper")))}}),e}(g.a.Component),w=a(11),j=a(17),T=a.n(j),f=a(9),v=a.n(f),L=a(12),O=a.n(L),G=a(13),P=a.n(G),S=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),z=a(19),Z=a(20);function Y(t){return[parseInt(t[1]+t[2],16),parseInt(t[3]+t[4],16),parseInt(t[5]+t[6],16),1]}var R,x={type:"rectangle",fill:Y("#bebebe"),x:0,y:0,width:6,height:20,stroke:[0,0,0,0],"stroke-width":0},Q=["Amplification","Deep Deletion","Fusion","Germline Mutation","Missense Mutation (putative driver)","Missense Mutation (unknown significance)","Other Mutation","Promoter Mutation","Truncating Mutation (putative driver)","Truncating Mutation (unknown significance)","Inframe Mutation (putative driver)","Inframe Mutation (unknown significance)"],B=[{type:"rectangle",fill:Y("#ff0000"),x:0,y:0,width:6,height:20},{type:"rectangle",fill:Y("#0000ff"),x:0,y:0,width:6,height:20},{type:"rectangle",fill:Y("#8B00C9"),x:0,y:4,width:6,height:12},{type:"rectangle",fill:Y("#FFFFFF"),x:0,y:8.75,width:6,height:1.6},{type:"rectangle",fill:Y("#008000"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#53D400"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#cf58bc"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#00B7CE"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#000000"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#708090"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#993404"),x:0,y:6.66,width:6,height:6.66},{type:"rectangle",fill:Y("#a68028"),x:0,y:6.66,width:6,height:6.66}],k=function(t){function e(e){return t.call(this,e)||this}return S(e,t),Object.defineProperty(e.prototype,"generateOncoprintLegend",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t="http://www.w3.org/2000/svg",e=document.createElementNS(t,"svg");return B.forEach((function(a,i){var o=i%3*280,n=o+9,r=38*Math.floor(i/3),l=r+15,c=document.createElementNS(t,"g");a.stroke||(a.stroke=[0,0,0,0],a["stroke-width"]=0),c.appendChild(Object(w.shapeToSvg)(x,o,r)),c.appendChild(Object(w.shapeToSvg)(a,o,r));var g=document.createElementNS(t,"text");g.setAttributeNS(null,"x",n.toString()),g.setAttributeNS(null,"y",l.toString()),g.setAttributeNS(null,"font-size","12"),g.setAttributeNS(null,"font-family","Arial");var I=document.createTextNode(Q[i]);g.appendChild(I),c.appendChild(g),e.appendChild(c)})),e.setAttribute("width","840"),e.setAttribute("height","175"),e.style.paddingTop="20px",e.setAttribute("xmlns",t),e}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{bsSize:"lg",id:"cBioHelpModal",className:"pathwayMapper",show:this.props.show,onHide:function(){t.props.handleClose(Ma.CHELP)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"PathwayMapper cBioPortal Edition 2.2")),!this.props.patientView&&g.a.createElement(I.Modal.Body,null,g.a.createElement("p",{className:"leftText"},"PathwayMapper shows you your genes of interest with the alteration frequencies of selected genetic profiles of the chosen study overlaid on a TCGA pathway using a white to red color scale (the more frequently altered a gene is, the more red it's shown). All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with highest ranking with the default ranking options but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table.",g.a.createElement("br",null),g.a.createElement("br",null),"Refer to the documentation ",g.a.createElement("a",{href:"https://github.com/iVis-at-Bilkent/pathway-mapper",target:"_blank"},"here")," for the notation used.",g.a.createElement("br",null),g.a.createElement("br",null),"To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table. Ranking criteria might be changed by changing the options at the bottom of the table.",g.a.createElement("br",null),g.a.createElement("br",null),"The buttons on top of the pathway are:",g.a.createElement("ul",null,g.a.createElement("table",{cellPadding:5},g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:O.a}))," ",g.a.createElement("td",null,"Save as PNG")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:P.a}))," ",g.a.createElement("td",null,"Save as SVG")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:v.a}))," ",g.a.createElement("td",null,"Perform layout: Layout is recalculated taking current node positions into account")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:z}))," ",g.a.createElement("td",null,"Add selected genes to query: You may select additional genes from the pathway by left clicking (Shift + left click to add more genes)")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:Z}))," ",g.a.createElement("td",null,"Add all valid genes to query: All valid gene symbols will be added to the query; others will be ignored")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:T.a}))," ",g.a.createElement("td",null,"Edit pathway: Edit both the topology and the geometry of the current pathway with the full blown PathwayMapper editor")))))),",",this.props.patientView&&g.a.createElement(I.Modal.Body,null,g.a.createElement("p",{className:"leftText"},"PathwayMapper shows you your genes of interest with the mutation types, copy number alterations and fusions of selected genetic profiles of the chosen study overlaid on a TCGA pathway using the OncoPrint color scheme. All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with the highest number of genes of interest matching the ones in a pathway but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table.",g.a.createElement("br",null),g.a.createElement("br",null),"Refer to the documentation ",g.a.createElement("a",{href:"https://github.com/iVis-at-Bilkent/pathway-mapper",target:"_blank"},"here")," for the notation used.",g.a.createElement("br",null),g.a.createElement("br",null),"Genetic alteration legend:",g.a.createElement("br",null),g.a.createElement("div",{className:"container",style:{paddingLeft:"45px",width:"fit-content"},dangerouslySetInnerHTML:{__html:this.generateOncoprintLegend().outerHTML}}),g.a.createElement("p",{style:{paddingLeft:"45px"}},"Putative driver and unknown significance annotations are based on data from OncoKB and CancerHotspots.org."),g.a.createElement("br",null),"To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table.",g.a.createElement("br",null),g.a.createElement("br",null),"The buttons on top of the pathway are:",g.a.createElement("ul",null,g.a.createElement("table",{cellPadding:5},g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:O.a}))," ",g.a.createElement("td",null,"Save as PNG")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:P.a}))," ",g.a.createElement("td",null,"Save as SVG")),g.a.createElement("tr",null,g.a.createElement("td",null,g.a.createElement("img",{height:"22px",width:"22px",src:v.a}))," ",g.a.createElement("td",null,"Perform layout: Layout is recalculated taking current node positions into account")))))))}}),e}(g.a.Component),W=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),H=function(t){function e(e){return t.call(this,e)||this}return W(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{show:this.props.show,onHide:function(){t.props.handleClose(Ma.CONFIRMATION)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Confirmation")),g.a.createElement(I.Modal.Body,null,g.a.createElement("div",null,"All unsaved changes will be lost. Do you want to continue?")),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){e.pendingFunction(),t.props.handleClose(Ma.CONFIRMATION)}},"Yes"),g.a.createElement(I.Button,{onClick:function(){t.props.handleClose(Ma.CONFIRMATION)}},"No")))}}),e}(g.a.Component),U=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),V=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r};!function(t){t[t.GRID=0]="GRID",t[t.GUIDE=1]="GUIDE",t[t.NONE=2]="NONE"}(R||(R={}));var K=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"gridSize",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"guideColor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"defaultSettings",{enumerable:!0,configurable:!0,writable:!0,value:h.defaultGridGuideOptions}),Object.defineProperty(a,"enabledType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(a),a.gridSize=a.defaultSettings.gridSpacing,a.guideColor=a.defaultSettings.guidelinesStyle.strokeStyle,a}return U(e,t),Object.defineProperty(e.prototype,"setEnabledType",{enumerable:!1,configurable:!0,writable:!0,value:function(t){t!==this.enabledType?this.enabledType=t:this.enabledType=R.NONE}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{dialogClassName:"gridModal",show:this.props.show,onShow:function(){t.enabledType=t.props.pathwayActions.enabledType},onHide:function(){t.props.handleClose(Ma.GRID)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Grid Settings")),g.a.createElement(I.Modal.Body,null,g.a.createElement(I.Form,{id:"gripOptionsForm",className:"leftText"},g.a.createElement(I.Row,null,g.a.createElement(I.Col,{sm:8},g.a.createElement(I.ControlLabel,null,"Enable Grids:")),g.a.createElement(I.Col,{sm:4},g.a.createElement(I.Checkbox,{checked:this.enabledType===R.GRID,onChange:function(){t.setEnabledType(R.GRID)}}))),g.a.createElement(I.Row,null,g.a.createElement(I.Col,{sm:8},g.a.createElement(I.ControlLabel,null,"Enable Guidelines:")),g.a.createElement(I.Col,{sm:4},g.a.createElement(I.Checkbox,{checked:this.enabledType===R.GUIDE,onChange:function(){t.setEnabledType(R.GUIDE)}}))),g.a.createElement(I.Row,null,g.a.createElement(I.Col,{sm:8},g.a.createElement(I.ControlLabel,null,"Grid Size:")),g.a.createElement(I.Col,{sm:4},g.a.createElement(I.FormControl,{type:"text",value:this.gridSize,onChange:function(e){t.gridSize=e.target.value}}))),g.a.createElement(I.Row,{style:{marginTop:"10px"}},g.a.createElement(I.Col,{sm:8},g.a.createElement(I.ControlLabel,null,"Guideline Color:")),g.a.createElement(I.Col,{sm:4},g.a.createElement("input",{id:"guidelineColor",type:"color",className:"form-control",value:this.guideColor,onChange:function(e){t.guideColor=e.target.value}}))))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.enabledType=t.enabledType,t.props.pathwayActions.adjustGridSettings(t.gridSize,t.guideColor),t.props.pathwayActions.enabledType===R.GRID?t.props.pathwayActions.toggleGrid(!0):t.props.pathwayActions.enabledType===R.GUIDE?t.props.pathwayActions.toggleGuide(!0):t.props.pathwayActions.toggleGrid(!1),t.props.handleClose(Ma.GRID)}},"Save")))}}),V([r.observable],e.prototype,"gridSize",void 0),V([r.observable],e.prototype,"guideColor",void 0),V([r.observable],e.prototype,"enabledType",void 0),e=V([l.observer],e)}(g.a.Component),F=function(){function t(){}return Object.defineProperty(t,"createGraphHierarchy",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e=[],a={},i=0,o=t.length;i0?a[l.parent().id()].childNodes.push(l):e.push(l)}return e}}),Object.defineProperty(t,"createGraphHierarchyRealTime",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e=[],a={},i=0,o=t.length;i0||""!==a.outerHTML?i.GENOMICDATA_LABEL_Y_OFFSET:0;if(i.svg.appendChild(i.createNodeLabel(t,n)),e)for(;e.length>0;){var l=e[0],c=t.position(),g=l.getAttribute("x"),I=l.getAttribute("y");l.setAttribute("x",c.x-t.width()/2+parseFloat(g)),l.setAttribute("y",c.y-t.height()/2+parseFloat(I)),i.svg.appendChild(l)}else if(""!==a.outerHTML){c=t.position();var s=parseInt(a.getAttribute("width")),d=parseInt(a.getAttribute("height")),u=c.y+t.height()/2-(d+8);a.setAttribute("x",c.x-s/2),a.setAttribute("y",u),i.svg.appendChild(a)}if(t.childNodes)for(var C in t.childNodes)r(t.childNodes[C])};for(var l in n){var c=n[l];r(c)}return e.forEach((function(t){i.drawEdge(t)})),this.svg.outerHTML}}),Object.defineProperty(t.prototype,"drawEdge",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=t.sourceEndpoint(),a=t.targetEndpoint(),i=t.style("target-arrow-shape"),o=t.style("line-style"),n=t.style("curve-style"),r="segments"===n?t.segmentPoints():t.controlPoints(),l=this.createEdgeLabel(t);l&&this.svg.appendChild(l);var c={x:e.x,y:e.y},g={x:a.x,y:a.y};r&&r.length>0&&(c={x:r[r.length-1].x,y:r[r.length-1].y});var I=this.unitVector({x:a.x-c.x,y:a.y-c.y}),s=this.scale(I,-1),d=a.x,u=a.y;if("triangle"===i){d=a.x+this.TRIANGLE_ARROW_HEAD_HEIGHT*s.x,u=a.y+this.TRIANGLE_ARROW_HEAD_HEIGHT*s.y;var C=this.rotateVector(I,Math.PI/2),N=this.rotateVector(I,-Math.PI/2);C=this.scale(C,this.TRIANGLE_ARROW_HEAD_WIDTH/2),N=this.scale(N,this.TRIANGLE_ARROW_HEAD_WIDTH/2);var p=d+C.x,M=u+C.y;g={x:(p+(b=d+N.x))/2,y:(M+(y=u+N.y))/2};var A=document.createElementNS(this.SVGNameSpace,"polygon");A.setAttribute("points",p+","+M+","+b+","+y+","+a.x+","+a.y),this.svg.appendChild(A)}else if("tee"===i){d=a.x,u=a.y;C=this.rotateVector(I,Math.PI/2),N=this.rotateVector(I,-Math.PI/2);C=this.scale(C,this.T_ARROW_HEAD_HEIGHT/2),N=this.scale(N,this.T_ARROW_HEAD_HEIGHT/2);var b,y;p=d+C.x,M=u+C.y;g={x:(p+(b=d+N.x))/2,y:(M+(y=u+N.y))/2};var h=document.createElementNS(this.SVGNameSpace,"line");h.setAttribute("x1",p),h.setAttribute("y1",M),h.setAttribute("x2",b),h.setAttribute("y2",y),h.setAttribute("stroke-width",this.T_ARROW_HEAD_WIDTH.toString()),h.setAttribute("stroke","black"),this.svg.appendChild(h)}if(!r||r.length<1){var D=document.createElementNS(this.SVGNameSpace,"line");D.setAttribute("x1",e.x),D.setAttribute("y1",e.y),D.setAttribute("x2",g.x),D.setAttribute("y2",g.y),D.setAttribute("stroke-width",this.EDGE_WIDTH.toString()),D.setAttribute("stroke","black"),"dashed"===o&&D.setAttribute("stroke-dasharray",this.DASH_PARAMETERS),this.svg.appendChild(D)}else if("unbundled-bezier"===n||"bezier"===n){for(var m=document.createElementNS(this.SVGNameSpace,"path"),E=[],w=0;wa[a.length-1].value)return{lower:{value:a[a.length-1].value,color:a[a.length-1].color},upper:{value:1/0,color:a[a.length-1].color}};for(var i=0;i=a[i].value&&e0&&(s+=-1*d,d=0),I=function(t,e,a,i,o){var n=Math.log(1+i),r=Math.log(1+a),l=(Math.log(1+(o>=0?o:-1*o))-r)/(n-r)*(o>=0?.8:1.2);return{r:t.r+l*(e.r-t.r),g:t.g+l*(e.g-t.g),b:t.b+l*(e.b-t.b)}}(C,u,d,s,Number(o))}var N;N=void 0===o||"-"===o[0]||Number(o)>100?"rgb(210,210,210)":"rgb("+Math.round(I.r)+", "+Math.round(I.g)+", \n "+Math.round(I.b)+")";var p=document.createElementNS("http://www.w3.org/2000/svg","rect");p.setAttribute("x",t),p.setAttribute("y",e),p.setAttribute("width",a),p.setAttribute("height",i),void 0!==l&&void 0!==o?(p.setAttribute("style","stroke-width:2;stroke:"+l+";opacity:1;fill:"+N+";"),p.setAttribute("border-color","#ffffff")):p.setAttribute("style","stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:"+N+";"),"-"===o[0]&&(o=o.substr(1));var M=o<.5&&o>0?"<0.5":Number(o).toFixed(1),A=Number(o)>100?"N/P":M+"%",b=a/2-4*A.length,y=document.createElementNS("http://www.w3.org/2000/svg","text");y.setAttribute("x",t+b),y.setAttribute("y",e+i/2+14/3),y.setAttribute("font-family","Arial"),y.setAttribute("font-size","14"),void 0!==l&&void 0!==o&&o>=0&&o<=100&&y.setAttribute("border-color","red"),y.innerHTML=A,n.appendChild(p),null!=o&&void 0!==o&&n.appendChild(y)}var at,it,ot,nt=function(){function t(t){Object.defineProperty(this,"genomicDataMap",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"visibleGenomicDataMapByType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupedGenomicDataCount",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupedGenomicDataMap",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"patientData",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupComparisonData",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"DEFAULT_VISIBLE_GENOMIC_DATA_COUNT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"observers",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"colorScheme",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clearAllGenomicData",{enumerable:!0,configurable:!0,writable:!0,value:function(){this.genomicDataMap={},this.visibleGenomicDataMapByType={},this.groupedGenomicDataMap={},this.groupedGenomicDataCount=0}}),Object.defineProperty(this,"updateGenomicDataVisibility",{enumerable:!0,configurable:!0,writable:!0,value:function(t,e){t in this.visibleGenomicDataMapByType&&(this.visibleGenomicDataMapByType[t]=e)}}),Object.defineProperty(this,"hideGenomicData",{enumerable:!0,configurable:!0,writable:!0,value:function(){var t=this;this.cy.nodes('[type="GENE"]').forEach((function(e){e.data("w",t.getRequiredWidthForGenomicData(0))})),this.cy.style().selector('node[type="GENE"]').style("text-margin-y",0).style("background-image",(function(t){return"data:image/svg+xml;utf8,"})).update()}}),Object.defineProperty(this,"prepareGenomicData",{enumerable:!0,configurable:!0,writable:!0,value:function(t,e,a,i){if(a?(this.genomicDataMap={},this.visibleGenomicDataMapByType={}):(this.genomicDataMap=this.genomicDataMap||{},this.visibleGenomicDataMapByType=this.visibleGenomicDataMapByType||{}),i)for(var o in a||(this.groupComparisonData=t),t)for(var n in a||(void 0===this.groupedGenomicDataMap[e]&&(this.groupedGenomicDataMap[e]=[]),this.groupedGenomicDataMap[e].push(o)),this.visibleGenomicDataMapByType[o]=!0,t[o])a?(this.genomicDataMap[n]={},this.genomicDataMap[n][o]=t[o][n]):(void 0===this.genomicDataMap[n]&&(this.genomicDataMap[n]={}),this.genomicDataMap[n][o]=t[o][n].toFixed?t[o][n].toFixed(2):t[o][n]);else{this.groupedGenomicDataMap=this.groupedGenomicDataMap||{};for(var r=[],l=t.split("\n"),c=l[0].split("\t"),g=1;g3?t-3:0)}}),Object.defineProperty(t.prototype,"updateColorScheme",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.colorScheme=t}}),Object.defineProperty(t.prototype,"showGenomicData",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=this,i=this.countVisibleGenomicDataByType();i<1?this.hideGenomicData():(this.cy.nodes('[type="GENE"]').forEach((function(a){a.data("w",e.getRequiredWidthForGenomicData(i)),t&&t(a)})),this.cy.style().selector('node[type="GENE"]').style("text-margin-y",(function(t){return t.data("name")in a.genomicDataMap?-15:0})).style("background-image",(function(t){var e=encodeURIComponent(a.generateSVGForNode(t).outerHTML);return"undefined"===e?"none":"data:image/svg+xml;utf8,"+e})).update())}}),Object.defineProperty(t.prototype,"generateHTMLContentForComparisonNodeTooltip",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=t.data("name"),i=this.groupComparisonData[a],o=q()("
");o.css({"max-width":"200px","max-height":"200px","word-wrap":"break-word","overflow-y":"auto","font-size":"12px"}),q()("
").css({"margin-top":0});var n=0;for(var r in i){var l=q()("
");l.css({"margin-top":0});var c=q()("
");c.css({"margin-top":0}),q()("
").css({height:"12px",width:"12px","background-color":e[n].color}),n++,c.append(q()("
 "+r+": "+i[r].toFixed(1)+"
")),l.append(c),o.append(c)}return o}}),Object.defineProperty(t.prototype,"showGroupComparisonData",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this,i=this.groupComparisonData;this.cy.nodes().forEach((function(t){t.data("w",1e3),e&&e(t)})),this.cy.style().selector('node[type="GENE"]').style("text-margin-y",(function(t){var e=t.data("name");return Object.keys(a.groupComparisonData).includes(e)?-15:0})).style("background-image",(function(e){var i=encodeURIComponent(a.generateSVGForGroupComparisonNode(e,t).outerHTML);return"undefined"===i?"none":"data:image/svg+xml;utf8,"+i})).update(),this.cy.on("mouseover",'node[type="GENE"]',(function(e){var o=e.target||e.cyTarget,n=o.data("name");if(i[n]){var r=o.popperRef(),l=document.createElement("div");document.body.appendChild(l);var c=tt()(l,{getReferenceClientRect:r.getBoundingClientRect,trigger:"manual",placement:"bottom",interactive:!0,theme:"cbioportal",content:function(){return a.generateHTMLContentForComparisonNodeTooltip(o,t).get(0)},onHidden:function(t){t.destroy(),l.remove()}});o.one("showqtipevent",(function(){c.show()})),o.on("mouseout",(function(){l&&l._tippy&&c.hide()})),o.trigger("showqtipevent")}}))}}),Object.defineProperty(t.prototype,"registerObserver",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.observers.push(t)}}),Object.defineProperty(t.prototype,"notifyObservers",{enumerable:!1,configurable:!0,writable:!0,value:function(){for(var t=0,e=this.observers;t12?o-12:0),c=l-10;r.setAttribute("width",l),r.setAttribute("height",n.h),r.setAttribute("xmlns",a);var g={w:c,h:25,x:l/2-c/2,y:n.h/2+12.5-18},I=0;for(var s in e[i]){var d=e[i],u=s;if(this.visibleGenomicDataMapByType[i]){var C=this.getOncoprintColors(u);void 0!==d[u]?N(g.x+I*g.w/o,g.y,g.w/o,g.h,100,r,u,C):N(g.x+I*g.w/o,g.y,g.w/o,g.h,null,r,"",null),I++}}function N(t,e,i,o,n,r,l,c){if(n){var g=document.createElementNS(a,"rect");g.setAttribute("x",t),g.setAttribute("y",e),g.setAttribute("width",i),g.setAttribute("height",o),g.setAttribute("style","stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:"+c+";");var I=i/2-16,s=document.createElementNS(a,"text");"rgb(0,0,0)"===c&&s.setAttribute("fill","white"),s.setAttribute("x",t+I),s.setAttribute("y",e+o/2+14/3),s.setAttribute("font-family","Arial"),s.setAttribute("font-size","14"),s.innerHTML=l.substring(0,4),r.appendChild(g),r.appendChild(s)}else c="rgb(210,210,210)"}return r}}),Object.defineProperty(t.prototype,"generateOncoprintForPatientNode",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this.patientData[t.data("name")],a="http://www.w3.org/2000/svg",i=document.createElementNS(a,"svg");if(!e)return{outerHTML:""};var o=new w.GeneticAlterationRuleSet(e.geneticTrackRuleSetParams),n=o.getUniversalShapes(6,23),r=o.getSpecificShapesForDatum(e.geneticTrackData,6,23).map((function(t){return n.concat(t)}));return r.forEach((function(t,e){var o=9*e,n=document.createElementNS(a,"g");t.forEach((function(t){return n.appendChild(Object(w.shapeToSvg)(t,o,8))})),i.appendChild(n)})),i.setAttribute("width",(9*r.length).toString()),i.setAttribute("height",31..toString()),i.setAttribute("xmlns",a),i}}),Object.defineProperty(t.prototype,"getCNADisplayString",{enumerable:!1,configurable:!0,writable:!0,value:function(t){return{"-2":"HOMODELETED","-1":"HETLOSS",1:"GAIN",2:"AMPLIFIED"}[t]}}),Object.defineProperty(t.prototype,"generateSvgIconForSample",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){return''+e+""}}),Object.defineProperty(t.prototype,"generateHTMLContentForNodeTooltip",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this,i=e.sampleColors,o=e.sampleIndex,n=e[t.data("name")],r=q()("
");return r.css({"max-width":"200px","max-height":"200px","word-wrap":"break-word","overflow-y":"auto"}),n.geneticTrackData.forEach((function(t,e){var n=t.sample,l=i[n],c=(o[n]+1).toString(),g=a.generateSvgIconForSample(l,c),I=e>0?"10px":"0px",s=q()("
");s.css({"margin-top":I});var d=t.data,u=[],C=[],N=[];d.forEach((function(e){var i=e.gene.hugoGeneSymbol;if(t.disp_mut&&e.proteinChange&&"Fusion"!==e.mutationType){var o=e.proteinChange;u.push({gene:i,proteinChange:o})}if(t.disp_cna&&e.alteration){var n=e.alteration,r=a.getCNADisplayString(n);C.push({gene:i,cnaLabel:r})}if(t.disp_fusion&&e.proteinChange&&"Fusion"===e.mutationType){o=e.proteinChange;N.push({gene:i,proteinChange:o})}}));var p=u.length>0?"Mutation: ":"",M=C.length>0?"CNA: ":"",A=N.length>0?"Fusion: ":"";u.forEach((function(t,e){p+=""+t.gene+" "+t.proteinChange+"",e!==u.length-1?p+=", ":p+="
"})),C.forEach((function(t,e){M+=""+t.gene+" "+t.cnaLabel+"",e!==C.length-1?M+=", ":M+="
"})),N.forEach((function(t,e){A+=""+t.gene+" "+t.proteinChange+"",e!==N.length-1?A+=", ":A+="
"}));var b=" "+n+"
";s.append(q()("
"+g+b+p+M+A+NaN)),r.append(s)})),r}}),t}(),rt=function(){return(rt=Object.assign||function(t){for(var e,a=1,i=arguments.length;a=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},ct=a(6),gt=function(){function t(e,a,i,o,n,l,c,g,I,s,d,u){Object.defineProperty(this,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"genomicDataOverlayManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"edgeEditing",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"selectedNodeStack",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"layoutProperties",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"FIT_CONSTANT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"observers",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"svgExporter",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"undoRedoManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isCbioPortal",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isCollaborative",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shareDBManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"portalAccessor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"viewUtilities",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"profiles",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"genomicDataOverlayColorScheme",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"colorSchemeChangeCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"incrementChatMessageCountCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"newMessageCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"updatePathwayTitleCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(this),this.cy=i,this.isCollaborative=e,this.isCbioPortal=o,this.profiles=c,this.genomicDataOverlayColorScheme=g,this.colorSchemeChangeCallback=I,this.incrementChatMessageCountCallback=s,this.newMessageCallback=d;var C={bendPositionsFunction:function(t){return t.data("bendPointPositions")},controlPositionsFunction:function(t){return t.data("controlPointPositions")},undoable:!0,anchorShapeSizeFactor:6,enabled:!this.isCbioPortal,handleReconnectEdge:this.isCollaborative?this.reconnectEdge.bind(this):void 0,enableMultipleAnchorRemovalOption:!0};this.isCbioPortal||(this.edgeEditing=this.cy.edgeEditing(C)),this.portalAccessor=l,this.isCollaborative&&(this.shareDBManager=a),this.FIT_CONSTANT=50,this.layoutProperties=ct.clone(t.defaultLayoutProperties),this.observers=[],this.genomicDataOverlayManager=new nt(this.cy),this.svgExporter=new X(this.edgeEditing,this),this.selectedNodeStack={},this.undoRedoManager=n,this.undoRedoManager.action("changePositions",this.doChangePosition,this.undoChangePosition),this.undoRedoManager.action("changeNodeSize",this.doChangeNodeSize,this.undoChangeNodeSize),this.undoRedoManager.action("changeCompoundSize",this.doChangeCompoundSize,this.undoChangeCompoundSize),this.undoRedoManager.action("changeName",this.doChangename,this.undoChangeName),this.undoRedoManager.action("hideNode",this.doHide,this.undoHide),this.undoRedoManager.action("showAllNodes",this.doShow,this.undoShow),this.undoRedoManager.action("highlightInvalidGenes",this.doHighlightInvalidGenes,this.undoHighlightInvalidGenes),this.undoRedoManager.action("removeHighlightInvalidGenes",this.undoHighlightInvalidGenes,this.doHighlightInvalidGenes),this.undoRedoManager.action("highlightOthers",this.doHighlight,this.undoHighlight),this.undoRedoManager.action("removeOtherHighlight",this.undoHighlight,this.doHighlight)}return Object.defineProperty(t.prototype,"setProfile",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.profiles[t]=e}}),Object.defineProperty(t.prototype,"addProfile",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.profiles.push(t)}}),Object.defineProperty(t.prototype,"removeProfiles",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.profiles.length=0}}),Object.defineProperty(t.prototype,"setGenomicDataOverlayColorScheme",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.genomicDataOverlayColorScheme=t}}),Object.defineProperty(t.prototype,"setViewUtilities",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.viewUtilities=t}}),Object.defineProperty(t.prototype,"getGenomicDataOverlayColorScheme",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.genomicDataOverlayColorScheme}}),Object.defineProperty(t.prototype,"handleChangePositionByAlignment",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.isCollaborative?this.shareDBManager.changeElementsPositionByAlignment(t):this.undoRedoManager.do("changePositions",t)}}),Object.defineProperty(t.prototype,"doChangePosition",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e=[],a=0;a0&&(n.forEach((function(t){a[t.id()]=!0})),o=o.union(t(n))),o=o.union(e.remove()),i.cy.nodes().updateCompoundBounds(),o}(t);this.undoRedoManager.do("remove",o);for(var n=0;n0&&(r.data.source=g.id()),c.length>0&&(r.data.target=c.id()),!(c.length<0&&g.length<0)){var I=this.cy.filter('edge[source = "'+g.id()+'"][target = "'+c.id()+'"]'),s=!1;I.forEach((function(t){return t.data().type!=r.data.type||(s=!0,!1)})),s||(delete r.data.id,i.push(r))}}this.cy.add(i)}}),Object.defineProperty(t.prototype,"fitGraph",{enumerable:!1,configurable:!0,writable:!0,value:function(){if(this.isCollaborative){this.cy.fit(this.FIT_CONSTANT);var t={zoomLevel:this.cy.zoom(),panLevel:this.cy.pan()};this.updateGlobalOptions(t)}else this.cy.fit(this.FIT_CONSTANT)}}),Object.defineProperty(t.prototype,"loadFile",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a;this.isCollaborative?this.loadfileShareDB(t,e):this.loadFileCy(t,e),null===(a=this.edgeEditing)||void 0===a||a.initAnchorPoints(this.cy.edges()),this.fitGraph()}}),Object.defineProperty(t.prototype,"loadFileCy",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.removeElementCy(this.cy.elements()),this.addNodesCy(t),this.addEdgesCy(e)}}),Object.defineProperty(t.prototype,"loadfileShareDB",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.shareDBManager.loadGraph(t,e)}}),Object.defineProperty(t.prototype,"removeAllElements",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.isCollaborative?this.shareDBManager.removeAllElements():this.cy.remove(this.cy.elements())}}),Object.defineProperty(t.prototype,"updateHighlight",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){e?this.undoRedoManager.do("highlightOthers",t):this.undoRedoManager.do("removeOtherHighlight",t)}}),Object.defineProperty(t.prototype,"updateVisibility",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){e?this.viewUtilities.hide(t):this.viewUtilities.show(t)}}),Object.defineProperty(t.prototype,"updateElementCallback",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e,a,i,o,n=t.oi,r=n.id,l=this.cy.$("#"+r);if(this.changeNameCy(l,n.name),l.isNode())l.isParent()?(l.style("min-width",n.minWidth),l.style("min-width-bias-left",n.minWidthBiasLeft),l.style("min-width-bias-right",n.minWidthBiasRight),l.style("min-height",n.minHeight),l.style("min-height-bias-top",n.minHeightBiasTop),l.style("min-height-bias-bottom",n.minHeightBiasBottom)):(l.data("w",n.w),l.data("h",n.h),l.position({x:n.x,y:n.y})),this.updateVisibility(l,n.isHidden),this.updateHighlight(l,n.isHighlighted),n.isInvalidGene?this.doHighlightInvalidGenes(l):this.undoHighlightInvalidGenes(l);else if(l.isEdge()){var c=n.pubmedIDs;l.data("pubmedIDs",c),this.updateHighlight(l,n.isHighlighted);var g=n.anchorPoints;if(n.source!==l.source().id()||n.target!==l.target().id()){var I={source:n.source,target:n.target};l.move(I),null===(e=this.edgeEditing)||void 0===e||e.initAnchorPoints(l)}else{if("bezier"===n.edgeCurveStyle){var s=null===(a=this.edgeEditing)||void 0===a?void 0:a.getAnchorsAsArray(l);if(s&&s.length>0)for(var d=0;d=6?o.visibilityMap[t]=!1:o.visibilityMap[t]&&n++}))}this.shareDBManager.addGenomicVisibilityData(o.visibilityMap)}else void 0!==i?this.genomicDataOverlayManager.addGenomicDataLocally(t,a,e,i):this.genomicDataOverlayManager.addGenomicDataLocally(t,a,e)}}),Object.defineProperty(t.prototype,"adjustVisibilityShareDB",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this.profiles.map((function(t){return t.profileId})).indexOf(t);this.setProfile(a,rt(rt({},this.profiles[a]),{enabled:e}))}}),Object.defineProperty(t.prototype,"addToProfiles",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.profiles.map((function(t){return t.profileId})).includes(t)||this.addProfile({profileId:t,enabled:!0})}}),Object.defineProperty(t.prototype,"shareDBGenomicDataHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e="od"===Object.keys(t)[1],a=t.oi,i=t.p[1];e?this.genomicDataOverlayManager.removeGenomicDataWithGeneSymbol(i):this.genomicDataOverlayManager.addGenomicDataWithGeneSymbol(i,a)}}),Object.defineProperty(t.prototype,"shareDBGenomicDataGroupChangeHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a="od"===Object.keys(t)[1],i=t.oi,o=t.p[1];a?i||this.genomicDataOverlayManager.clearAllGenomicData():(this.genomicDataOverlayManager.addGenomicGroupData(o,i),1!==i.length&&console.log("Grouped genomic data expected to be of length 1"),i.forEach((function(t){e.addToProfiles(t)}))),this.genomicDataOverlayManager.showGenomicData((function(t){e.resizeElements(t)})),this.genomicDataOverlayManager.notifyObservers()}}),Object.defineProperty(t.prototype,"shareDBGenomicDataVisibilityHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=t.oi,i=t.p[1];"od"===Object.keys(t)[1]?(this.genomicDataOverlayManager.removeGenomicVisData(),this.removeProfiles()):(this.genomicDataOverlayManager.addGenomicVisData(i,a),this.adjustVisibilityShareDB(i,a)),this.genomicDataOverlayManager.showGenomicData((function(t){e.resizeElements(t)})),this.genomicDataOverlayManager.notifyObservers()}}),Object.defineProperty(t.prototype,"incrementNumberOfUsers",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.shareDBManager.incrementNumberOfUsers()}}),Object.defineProperty(t.prototype,"getUserId",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.shareDBManager.doc.data[this.shareDBManager.NUMBER_OF_USERS]}}),Object.defineProperty(t.prototype,"updateMessageCount",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.incrementChatMessageCountCallback(t)}}),Object.defineProperty(t.prototype,"updateGenomicDataColorSchemeHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=t.li;this.setGenomicDataOverlayColorScheme(a),this.colorSchemeChangeCallback(a),this.genomicDataOverlayManager.updateColorScheme(a),this.genomicDataOverlayManager.showGenomicData((function(t){e.resizeElements(t)})),this.genomicDataOverlayManager.notifyObservers()}}),Object.defineProperty(t.prototype,"resizeNodesToContent",{enumerable:!1,configurable:!0,writable:!0,value:function(t){if(this.isCollaborative){var e=this.genomicDataOverlayManager.countVisibleGenomicDataByType(),a=148+36*(e-3),i=this.shareDBManager;t.forEach((function(t){if(t.isParent())i.resizeCompound(t,0,0,0,0,0,0);else{var o=150,n=52;if(""!=t.data("name"))o=10*t.style("label").length+6,n=24;"PROCESS"!==t.data("type")&&e>0&&(n=52,e<4?150>o&&(o=150):a>o&&(o=a)),i.setSizeOfElement(t,o,n)}}))}else{var o=this.cy.undoRedo(),n=[],r=this.genomicDataOverlayManager.countVisibleGenomicDataByType(),l=150+36*(r-3);t.forEach((function(t){if(t.isParent()){i={ele:t,oldMinWidth:t.style("min-width"),newMinWidth:0,oldMinWidthBiasLeft:t.style("min-width-bias-left"),newMinWidthBiasLeft:0,oldMinWidthBiasRight:t.style("min-width-bias-right"),newMinWidthBiasRight:0,oldMinHeight:t.style("min-height"),newMinHeight:0,oldMinHeightBiasTop:t.style("min-height-bias-top"),newMinHeightBiasTop:0,oldMinHeightBiasBottom:t.style("min-height-bias-bottom"),newMinHeightBiasBottom:0};n.push({name:"changeCompoundSize",param:i})}else{var e=150,a=52;if(""!=t.data("name"))e=6*t.style("label").length+24,a=24;"PROCESS"!==t.data("type")&&r>0&&(a=52,r<4?150>e&&(e=150):l>e&&(e=l));var i={ele:t,oldWidth:t.width(),newWidth:e,oldHeight:t.height(),newHeight:a};n.push({name:"changeNodeSize",param:i})}})),o.do("batch",n)}this.cy.nodeEditing("get").refreshGrapples()}}),Object.defineProperty(t,"defaultLayoutProperties",{enumerable:!0,configurable:!0,writable:!0,value:{name:"fcose",nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:!0,randomize:!1,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,tilingPaddingVertical:10,tilingPaddingHorizontal:10,initialEnergyOnIncremental:.5,animationDuration:2e3,animationEasing:"cubic-bezier(0.17,0.72,0.41,0.98)",nodeDimensionsIncludeLabels:!0}}),lt([r.observable],t.prototype,"profiles",void 0),lt([r.observable],t.prototype,"genomicDataOverlayColorScheme",void 0),lt([r.action.bound],t.prototype,"setProfile",null),lt([r.action.bound],t.prototype,"addProfile",null),lt([r.action.bound],t.prototype,"removeProfiles",null),lt([r.action.bound],t.prototype,"setGenomicDataOverlayColorScheme",null),lt([n.a],t.prototype,"setViewUtilities",null),lt([n.a],t.prototype,"doHide",null),lt([n.a],t.prototype,"undoHide",null),lt([n.a],t.prototype,"doShow",null),lt([n.a],t.prototype,"undoShow",null),lt([n.a],t.prototype,"updateVisibility",null),t}(),It=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),st=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},dt=function(t){function e(e){var i=t.call(this,e)||this;return Object.defineProperty(i,"internalLayoutProperties",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(i),i.internalLayoutProperties=y.a.clone(gt.defaultLayoutProperties),a.layoutProperties=y.a.clone(gt.defaultLayoutProperties),i}var a;return It(e,t),a=e,Object.defineProperty(e.prototype,"updateInternalLayoutProperty",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.internalLayoutProperties[t]=e}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{id:"layoutPropertiesDiv",show:this.props.show,onEnter:function(){t.internalLayoutProperties=y.a.clone(a.layoutProperties)},onHide:function(){t.internalLayoutProperties=y.a.clone(a.layoutProperties),t.props.handleClose(Ma.LAYOUT)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Layout Properties")),g.a.createElement(I.Modal.Body,{id:"layoutPropsForm",className:"leftText"},g.a.createElement(I.Form,null,g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"control-label",sm:6},"Node Repulsion:"),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.nodeRepulsion.toString(),onChange:function(e){t.updateInternalLayoutProperty("nodeRepulsion",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Ideal Edge Length:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.idealEdgeLength.toString(),onChange:function(e){t.updateInternalLayoutProperty("idealEdgeLength",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Edge Elasticity:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.edgeElasticity.toString(),onChange:function(e){t.updateInternalLayoutProperty("edgeElasticity",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Nesting Factor:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.nestingFactor.toString(),onChange:function(e){t.updateInternalLayoutProperty("nestingFactor",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Gravity:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.gravity.toString(),onChange:function(e){t.updateInternalLayoutProperty("gravity",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Gravity Range:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.gravityRange.toString(),onChange:function(e){t.updateInternalLayoutProperty("gravityRange",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Compound Gravity:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.gravityCompound.toString(),onChange:function(e){t.updateInternalLayoutProperty("gravityCompound",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Compound Gravity Range:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.gravityRangeCompound.toString(),onChange:function(e){t.updateInternalLayoutProperty("gravityRangeCompound",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Number of Iterations:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.numIter.toString(),onChange:function(e){t.updateInternalLayoutProperty("numIter",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Tiling Vertical Padding:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.tilingPaddingVertical.toString(),onChange:function(e){t.updateInternalLayoutProperty("tilingPaddingVertical",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Tiling Horizontal Padding:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.tilingPaddingHorizontal.toString(),onChange:function(e){t.updateInternalLayoutProperty("tilingPaddingHorizontal",Number(e.target.value))}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Tile Disconnected:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.Checkbox,{className:"layProps",checked:this.internalLayoutProperties.tile,onChange:function(e){t.updateInternalLayoutProperty("tile",!t.internalLayoutProperties.tile)}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"control-label",sm:6},"Animate:"),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.Checkbox,{className:"layProps",checked:this.internalLayoutProperties.animate,onChange:function(e){t.updateInternalLayoutProperty("animate",!t.internalLayoutProperties.animate)}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Incremental:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.Checkbox,{className:"layProps",checked:!this.internalLayoutProperties.randomize,onChange:function(e){t.updateInternalLayoutProperty("randomize",!t.internalLayoutProperties.randomize)}}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{className:"rightAlignText",sm:6},g.a.createElement(I.ControlLabel,null,"Incremental Cooling Factor:")),g.a.createElement(I.Col,{sm:6},g.a.createElement(I.FormControl,{type:"number",value:this.internalLayoutProperties.initialEnergyOnIncremental.toString(),onChange:function(e){t.updateInternalLayoutProperty("initialEnergyOnIncremental",Number(e.target.value))}}))))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){a.layoutProperties=y.a.clone(t.internalLayoutProperties),t.props.pathwayActions.setLayoutProperties(a.layoutProperties),t.props.handleClose(Ma.LAYOUT)}},"Save"),g.a.createElement(I.Button,{onClick:function(){t.internalLayoutProperties=y.a.clone(gt.defaultLayoutProperties),a.layoutProperties=y.a.clone(t.internalLayoutProperties),t.props.pathwayActions.setLayoutProperties(t.internalLayoutProperties)}},"Default")))}}),st([r.observable],e.prototype,"internalLayoutProperties",void 0),st([r.action.bound],e.prototype,"updateInternalLayoutProperty",null),e=a=st([l.observer],e)}(g.a.Component),ut=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Ct=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Nt=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"pathwayInfo",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),a}return ut(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return this.pathwayInfo=this.props.pathwayActions.getPathwayInfo,g.a.createElement(I.Modal,{id:"pathwayDetailsDiv",show:this.props.show,onHide:function(){t.props.handleClose(4)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Pathway Properties")),g.a.createElement(I.Modal.Body,null,g.a.createElement(I.Form,{id:"pathwayDetailsForm"},g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{style:{textAlign:"left"},sm:4},g.a.createElement(I.ControlLabel,null,"Pathway Title:")),g.a.createElement(I.Col,{sm:8},g.a.createElement(I.FormControl,{type:"text",onChange:function(e){t.pathwayInfo.pathwayTitle=e.target.value},value:this.pathwayInfo.pathwayTitle}))),g.a.createElement(I.InputGroup,null,g.a.createElement(I.Col,{style:{textAlign:"left"},sm:4},g.a.createElement(I.ControlLabel,null,"Pathway Description:")),g.a.createElement(I.Col,{sm:8},g.a.createElement("textarea",{className:"form-control",rows:3,onChange:function(e){t.pathwayInfo.pathwayDetails=e.target.value},value:this.pathwayInfo.pathwayDetails}))))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.setPathwayInfo(t.pathwayInfo),t.props.handleClose(Ma.PW_DETAILS)}},"Save")))}}),e=Ct([l.observer],e)}(g.a.Component),pt=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Mt=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},At=a(60),bt=a(61),yt=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"colorMappings",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"showUniqueValuesWarningModal",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(a),a.initColorMappings(),a}return pt(e,t),Object.defineProperty(e.prototype,"componentDidUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(t){!1===t.show&&!0===this.props.show&&this.initColorMappings()}}),Object.defineProperty(e.prototype,"initColorMappings",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.colorMappings=Object.entries(this.props.colorValueMapping).map((function(t){return{value:t[0],color:t[1]}})).sort((function(t,e){return Number(t.value)-Number(e.value)}))}}),Object.defineProperty(e.prototype,"handleColorChange",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.colorMappings[t].color=e}}),Object.defineProperty(e.prototype,"handleValueChange",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.colorMappings[t].value=e}}),Object.defineProperty(e.prototype,"addDefaultColorMapping",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.colorMappings.push({value:"0",color:"#ffffff"})}}),Object.defineProperty(e.prototype,"removeColorMapping",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.colorMappings.splice(t,1)}}),Object.defineProperty(e.prototype,"setDefaultColorMapping",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.colorMappings=[{value:"-100",color:"#0000ff"},{value:"0",color:"#ffffff"},{value:"100",color:"#ff0000"}]}}),Object.defineProperty(e.prototype,"setShowUniqueValuesWarningModal",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.showUniqueValuesWarningModal=t}}),Object.defineProperty(e.prototype,"handleSaveColorScheme",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t={};return this.colorMappings.forEach((function(e){t[e.value]=e.color})),Object.keys(t).length<2?(this.setShowUniqueValuesWarningModal(!0),!1):(this.props.handleColorMappingChange(t),!0)}}),Object.defineProperty(e.prototype,"close",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.props.handleClose(Ma.PROFILES_COLOR_SCHEME)}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=this.colorMappings.map((function(e,a){return g.a.createElement(I.Row,{style:{padding:"10px"}},g.a.createElement(I.Col,{md:2}),g.a.createElement(I.Col,{md:3},g.a.createElement("input",{value:e.value,style:{width:"50px"},onChange:function(e){var i=e.target.value;t.handleValueChange(a,i)}})),g.a.createElement(I.Col,{md:3},g.a.createElement("input",{type:"color",value:e.color,onChange:function(e){var i=e.target.value;t.handleColorChange(a,i)}})),g.a.createElement(I.Col,{md:1},g.a.createElement("img",{src:bt,className:"icon-small "+(t.colorMappings.length>2?"icon-enabled":"icon-disabled"),title:"Remove",onClick:function(){t.removeColorMapping(a)}})),g.a.createElement(I.Col,{md:2}))}));return g.a.createElement(I.Modal,{show:this.props.show,onHide:function(){t.close()},bsSize:"small"},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Study Data Overlay Color Scheme")),g.a.createElement(I.Modal.Body,null,g.a.createElement(I.Row,{style:{paddingTop:"10px",paddingLeft:"10px",paddingRight:"10px"}},g.a.createElement(I.Col,{md:2}),g.a.createElement(I.Col,{md:3},g.a.createElement("label",null,"Value")),g.a.createElement(I.Col,{md:3},g.a.createElement("label",null,"Color")),g.a.createElement(I.Col,{md:3})),g.a.createElement("hr",{className:"horizontal-rule"}),e,g.a.createElement("img",{src:At,className:"icon-small icon-enabled",onClick:this.addDefaultColorMapping,title:"Add New Value-Color Mapping"}),g.a.createElement(I.Modal,{show:this.showUniqueValuesWarningModal,onHide:function(){return t.setShowUniqueValuesWarningModal(!1)},bsSize:"small"},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Warning")),g.a.createElement(I.Modal.Body,null,g.a.createElement("p",null,"Please set at least two unique value-color mappings.")),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){t.setShowUniqueValuesWarningModal(!1)}},"OK")))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){t.close()}},"Cancel"),g.a.createElement(I.Button,{onClick:function(){t.setDefaultColorMapping()}},"Default"),g.a.createElement(I.Button,{onClick:function(){t.handleSaveColorScheme()&&t.close()}},"Save")))}}),Mt([r.observable],e.prototype,"colorMappings",void 0),Mt([r.observable],e.prototype,"showUniqueValuesWarningModal",void 0),Mt([r.action.bound],e.prototype,"handleColorChange",null),Mt([r.action.bound],e.prototype,"handleValueChange",null),Mt([r.action.bound],e.prototype,"addDefaultColorMapping",null),Mt([r.action.bound],e.prototype,"removeColorMapping",null),Mt([r.action.bound],e.prototype,"setDefaultColorMapping",null),Mt([r.action.bound],e.prototype,"setShowUniqueValuesWarningModal",null),Mt([n.a],e.prototype,"handleSaveColorScheme",null),Mt([n.a],e.prototype,"close",null),e=Mt([l.observer],e)}(g.a.Component),ht=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Dt=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},mt=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"showEnabledProfileWarningModal",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object(r.makeObservable)(a),a}return ht(e,t),Object.defineProperty(e.prototype,"setShowEnabledProfileWarningModal",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.showEnabledProfileWarningModal=t}}),Object.defineProperty(e.prototype,"profileEnabledMap",{get:function(){var t=this,e=[];this.props.profiles.forEach((function(a){a.enabled&&e.length-1;a[t.profileId]=i})),a},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"handleProfileLabelClicked",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.props.handleProfileLabelClicked(t)}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=this.props.profiles.map((function(e,a){return g.a.createElement(g.a.Fragment,{key:a},g.a.createElement(I.Button,{onClick:function(){var e=t.props.profiles.filter((function(t){return t.enabled})).length;t.props.profiles[a].enabled||e0?e:g.a.createElement("h4",{className:"modal-title"},"There is currently no data to show"),g.a.createElement(I.Modal,{show:this.showEnabledProfileWarningModal,onHide:function(){return t.setShowEnabledProfileWarningModal(!1)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Warning")),g.a.createElement(I.Modal.Body,null,g.a.createElement("p",null,"At most 6 data sets can be displayed at the same time, please disable some other data set before enabling this.")),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){t.setShowEnabledProfileWarningModal(!1)}},"OK")))))}}),Dt([r.observable],e.prototype,"showEnabledProfileWarningModal",void 0),Dt([r.action],e.prototype,"setShowEnabledProfileWarningModal",null),Dt([r.computed],e.prototype,"profileEnabledMap",null),e=Dt([l.observer],e)}(g.a.Component),Et=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),wt=function(t){function e(e){return t.call(this,e)||this}return Et(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{id:"quickHelpModal",show:this.props.show,onHide:function(){t.props.handleClose(Ma.HELP)}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Quick Help")),g.a.createElement(I.Modal.Body,null,g.a.createElement("ul",{className:"leftText"},g.a.createElement("li",null,g.a.createElement("strong",null,"To add a node:")," Drag and drop from node palette"),g.a.createElement("li",null,g.a.createElement("strong",null,"To add an interaction:")," Click on interaction type; then click on small circle on source node and release on target node"),g.a.createElement("li",null,g.a.createElement("strong",null,"To add a node into a container (family, complex, compartment or process):"),' Drag the node into its container node or select nodes to be contained and right click on container node and choose "Add Selected Into This"'),g.a.createElement("li",null,g.a.createElement("strong",null,"To delete nodes/interactions:")," Select and perform Edit > Delete Selected"),g.a.createElement("li",null,g.a.createElement("strong",null,"To overlay experiment data:")," Select Alteration % > Load From cBioPortal..."))))}}),e}(g.a.Component),jt=function(){function t(){}return Object.defineProperty(t.prototype,"getDataTypes",{enumerable:!1,configurable:!0,writable:!0,value:function(){return[t.MUTATION,t.GENE_EXPRESSION,t.CNA]}}),Object.defineProperty(t.prototype,"fetchCancerStudies",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var a={},i=new XMLHttpRequest;i.onreadystatechange=function(){if(i.readyState===XMLHttpRequest.DONE&&200===i.status){for(var t=i.responseText.split(/\r?\n|\r/),o=1;o=t.Z_SCORE_UPPER_THRESHOLD||parseFloat(I[d])<=t.Z_SCORE_LOWER_THRESHOLD)&&s++:s++);c[a][I[1]]=s/l*100}i(c)}}),Object.defineProperty(t.prototype,"getProfileData",{enumerable:!1,configurable:!0,writable:!0,value:function(e,a){var i=new XMLHttpRequest,o=this;i.onreadystatechange=function(){i.readyState===XMLHttpRequest.DONE&&200===i.status&&(o.calcAlterationPercentages(i.responseText,e.geneticProfileId,a),s.toast.success(e.geneticProfileId+" has been succesfully loaded from cBioPortal."))};var n=t.GET_PROFILE_DATA_URL;n+="&case_set_id="+e.caseSetId+"_sequenced",n+="&genetic_profile_id="+e.geneticProfileId,n+="&gene_list=";for(var r=!0,l=0,c=e.genes;l=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Lt=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"dataTypes",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(a,"dataTypeFetchResultsReady",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(a,"currentlySelectedItemIndex",{enumerable:!0,configurable:!0,writable:!0,value:-1}),Object.defineProperty(a,"selectedStudies",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(a,"checkboxModalPosition",{enumerable:!0,configurable:!0,writable:!0,value:{bottom:0}}),Object.defineProperty(a,"selectedDataTypesPerStudy",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(a,"itemArray",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(a,"searchQuery",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(a,"showDataTypeSelectionModal",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(a,"studyListItemCheckboxChecked",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(a,"selectedStudyData",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"portalAccessor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(a),a.selectedStudyData=[],a.portalAccessor=new jt,a.fetchStudy(),a}return Tt(e,t),Object.defineProperty(e.prototype,"setDataTypeFetchResultsReady",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.dataTypeFetchResultsReady=t}}),Object.defineProperty(e.prototype,"setItemArray",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.itemArray=t}}),Object.defineProperty(e.prototype,"setSearchQuery",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.searchQuery=t}}),Object.defineProperty(e.prototype,"setSelectedStudyData",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedStudyData=t}}),Object.defineProperty(e.prototype,"setDataTypeProperties",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.dataTypes[t]=e}}),Object.defineProperty(e.prototype,"initStudyListItemCheckboxChecked",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.studyListItemCheckboxChecked=Array(t).fill(!1)}}),Object.defineProperty(e.prototype,"initSelectedDataTypesPerStudy",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedDataTypesPerStudy=Array(t).fill("")}}),Object.defineProperty(e.prototype,"toggleStudyListItemCheckboxChecked",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.studyListItemCheckboxChecked[t]=!this.studyListItemCheckboxChecked[t]}}),Object.defineProperty(e.prototype,"addSelectedStudy",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedStudies.push(t)}}),Object.defineProperty(e.prototype,"removeSelectedStudy",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedStudies=this.selectedStudies.filter((function(e){return e.data[0]!=t[0]}))}}),Object.defineProperty(e.prototype,"clearSelectedStudies",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.selectedStudies=[]}}),Object.defineProperty(e.prototype,"setShowDataTypeSelectionModal",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.showDataTypeSelectionModal=t}}),Object.defineProperty(e.prototype,"clearStudyCheckboxesChecked",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this.studyListItemCheckboxChecked.length;this.studyListItemCheckboxChecked=Array(t).fill(!1)}}),Object.defineProperty(e.prototype,"clearSelectedDataTypesPerStudy",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this.studyListItemCheckboxChecked.length;this.selectedDataTypesPerStudy=Array(t).fill("")}}),Object.defineProperty(e.prototype,"unselectDataTypesForStudy",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedDataTypesPerStudy[t]=""}}),Object.defineProperty(e.prototype,"preparePortalAccess",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this;this.setDataTypeFetchResultsReady(!1),this.portalAccessor.getSupportedGeneticProfiles(t,(function(t){e.disableAllDataTypes();for(var a=0,i=Object.keys(t);a1&&this.selectedStudyData[1]||"Choose study"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return g.a.createElement(I.Modal,{id:"cbioPortalModal",show:this.props.show,onHide:function(){t.props.handleClose(Ma.STUDY),t.resetModal()}},g.a.createElement(I.Modal.Header,{closeButton:!0},g.a.createElement(I.Modal.Title,null,"Profile Data from cBioPortal")),g.a.createElement(I.Modal.Body,null,g.a.createElement("div",{id:"cancerDropDown",style:{textAlign:"left"}},g.a.createElement("h4",null,"Select Cancer Study"),g.a.createElement("form",null,g.a.createElement(I.FormControl,{type:"text",placeholder:"Search studies",onChange:function(e){return t.setSearchQuery(e.target.value)}})),g.a.createElement(I.ListGroup,{style:{maxHeight:"200px",overflow:"auto",marginTop:"10px",border:"1px solid #ccc",borderRadius:"4px"}},this.itemArray.length<1?g.a.createElement("span",null,"Fetching studies from cBioPortal..."):this.itemArray.map((function(t,e){return{item:t,index:e}})).filter((function(e){return e.item[1].toLowerCase().includes(t.searchQuery.toLowerCase())})).map((function(e){var a=e.item,i=e.index,o=a[1],n=a[0];return g.a.createElement(I.ListGroupItem,{id:"listgroupitem"+i,key:n,style:{padding:"5px 5px"}},g.a.createElement(I.Checkbox,{checked:t.studyListItemCheckboxChecked[i],style:{marginTop:"0px",marginBottom:"0px"},onClick:function(){var e=document.getElementById("listgroupitem"+i).getBoundingClientRect();t.checkboxModalPosition={bottom:e.bottom-30},t.setSelectedStudyData(a),t.preparePortalAccess(n),t.toggleStudyListItemCheckboxChecked(i),t.currentlySelectedItemIndex=i,t.studyListItemCheckboxChecked[i]?t.setShowDataTypeSelectionModal(!0):(t.removeSelectedStudy(a),t.unselectDataTypesForStudy(i))}},o),""!=t.selectedDataTypesPerStudy[i]&&g.a.createElement("span",{style:{fontSize:"12px",marginLeft:"25px"}},t.selectedDataTypesPerStudy[i]))})))),g.a.createElement("div",{style:{marginTop:"10px"}},g.a.createElement("p",{style:{textAlign:"left"}},g.a.createElement("b",null,"Warning:"),' At most six different data sets will be overlayed on the genes. You can toggle which ones are to be displayed via "Alteration %" ',">",' "View Settings" menu.')),g.a.createElement(I.Modal,{style:{position:"absolute",top:this.checkboxModalPosition.bottom+"px"},dialogClassName:"fitContent",show:this.showDataTypeSelectionModal,onHide:function(){t.setShowDataTypeSelectionModal(!1)}},g.a.createElement(I.Modal.Body,null,!1===this.dataTypeFetchResultsReady?g.a.createElement("span",null,"Fetching data types from cBioPortal..."):Object.keys(this.dataTypes).map((function(e){return g.a.createElement(I.Checkbox,{inline:!0,key:e,disabled:!t.dataTypes[e].enabled,onClick:function(){t.handleCheckboxClick(e)},checked:t.dataTypes[e].checked},e)}))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{onClick:function(){var e=ft({},t.dataTypes);0==Object.keys(e).filter((function(t){return e[t].checked})).length&&(t.studyListItemCheckboxChecked[t.currentlySelectedItemIndex]=!1),t.setShowDataTypeSelectionModal(!1)}},"Cancel"),g.a.createElement(I.Button,{onClick:function(){var e=ft({},t.dataTypes);t.addSelectedStudy({data:t.selectedStudyData,dataTypes:e}),t.selectedDataTypesPerStudy[t.currentlySelectedItemIndex]=Object.keys(e).filter((function(t){return e[t].checked})).join(", "),t.setShowDataTypeSelectionModal(!1)}},"Add")))),g.a.createElement(I.Modal.Footer,null,g.a.createElement(I.Button,{bsClass:"success",onClick:function(){t.selectedStudies.forEach((function(e){t.props.loadFromCBio(e.dataTypes,e.data)})),t.props.handleClose(Ma.STUDY),t.resetModal()}},"Load Data")))}}),vt([r.observable],e.prototype,"dataTypes",void 0),vt([r.observable],e.prototype,"dataTypeFetchResultsReady",void 0),vt([r.observable],e.prototype,"selectedStudies",void 0),vt([r.observable],e.prototype,"selectedDataTypesPerStudy",void 0),vt([r.observable],e.prototype,"itemArray",void 0),vt([r.observable],e.prototype,"searchQuery",void 0),vt([r.observable],e.prototype,"showDataTypeSelectionModal",void 0),vt([r.observable],e.prototype,"studyListItemCheckboxChecked",void 0),vt([r.observable],e.prototype,"selectedStudyData",void 0),vt([r.observable],e.prototype,"portalAccessor",void 0),vt([r.action.bound],e.prototype,"setDataTypeFetchResultsReady",null),vt([r.action.bound],e.prototype,"setItemArray",null),vt([r.action.bound],e.prototype,"setSearchQuery",null),vt([r.action.bound],e.prototype,"setSelectedStudyData",null),vt([r.action.bound],e.prototype,"setDataTypeProperties",null),vt([r.action.bound],e.prototype,"initStudyListItemCheckboxChecked",null),vt([r.action.bound],e.prototype,"initSelectedDataTypesPerStudy",null),vt([r.action.bound],e.prototype,"toggleStudyListItemCheckboxChecked",null),vt([r.action.bound],e.prototype,"addSelectedStudy",null),vt([r.action.bound],e.prototype,"removeSelectedStudy",null),vt([r.action.bound],e.prototype,"clearSelectedStudies",null),vt([r.action.bound],e.prototype,"setShowDataTypeSelectionModal",null),vt([r.action.bound],e.prototype,"clearStudyCheckboxesChecked",null),vt([r.action.bound],e.prototype,"clearSelectedDataTypesPerStudy",null),vt([r.action.bound],e.prototype,"unselectDataTypesForStudy",null),vt([n.a],e.prototype,"resetModal",null),vt([n.a],e.prototype,"handleCheckboxClick",null),vt([r.computed],e.prototype,"selectedStudyDataTitle",null),e=vt([l.observer],e)}(g.a.Component),Ot=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Gt=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Pt=["Cell Cycle","HIPPO","MYC","NOTCH","NRF2","PI3K","RTK-RAS","TGF-Beta","TP53","WNT"],St=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"bestPathways",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"shownPathways",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"dropDownTitle",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"selectedPathway",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isPercentageMatch",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isAlterationEnabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"considerOnlyTCGAPanPathways",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isExpanded",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"rankingCriteria",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(a,"COUNT_PERC_EXPLANATION",{enumerable:!0,configurable:!0,writable:!0,value:"Whether we should favor the number of genes of interest matching the ones in a pathway or the percentage of such genes in that pathway. For instance, suppose genes of interest are A, B, and C, and the pathway contains genes B, C, D, and E. When we consider count, the score is 2 (for the two genes that match). However, when we consider percentage the score will be 50% as 2 of the 4 genes in the pathway are among genes of interest."}),Object.defineProperty(a,"ALTERATION_EXPLANATION",{enumerable:!0,configurable:!0,writable:!0,value:"When this is checked, each matching gene will not directly contribute to the score as 1 unit but with the alteration frequency percentage of that gene. For instance, suppose genes of interest are A, B, and C with alteration frequencies of 0.5, 0.2, and 0.3, respectively, and the pathway contains genes B, C, D, and E. When this is option isn't checked, the score will be 2 for match count and 50% for the match percentage. However, when this option is checked, the scores will be 0.2+0.3=0.5 and (0.2+0.3)/4=12.5% for match count and percentage, respectively."}),Object.defineProperty(a,"TCGA_PANCAN_EXPLANATION",{enumerable:!0,configurable:!0,writable:!0,value:"The pathways listed above were retrieved from PathwayMapper. When this option is checked, only the pathways under TCGA > PanCanAtlas will be shown. Uncheck to show all."}),Object(r.makeObservable)(a),a.isPercentageMatch=void 0!==a.props.rankingChoices?a.props.rankingChoices.isPercentageMatch:0,a.isAlterationEnabled=void 0!==a.props.rankingChoices?a.props.rankingChoices.isAlterationEnabled:0,a.considerOnlyTCGAPanPathways=void 0===a.props.rankingChoices||a.props.rankingChoices.considerOnlyTCGAPanPathways,a.dropDownTitle=void 0!==a.props.rankingChoices?a.props.rankingChoices.dropDownTitle:"Match count",a.isExpanded=!1,a.onApplyClick(),void 0!==a.props.currentPathway&&a.props.currentPathway.length>0?a.selectedPathway=a.props.currentPathway:a.selectedPathway=a.shownPathways[0].pathwayName,a}return Ot(e,t),Object.defineProperty(e.prototype,"updateRankingChoices",{enumerable:!1,configurable:!0,writable:!0,value:function(){void 0!==this.props.updateRankingChoices&&this.props.updateRankingChoices(this.dropDownTitle,this.isAlterationEnabled,this.considerOnlyTCGAPanPathways,this.isPercentageMatch,this.selectedPathway)}}),Object.defineProperty(e.prototype,"setBestPathwayMethod",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.bestPathways=this.props.bestPathwaysAlgos[t],this.filterBestPathwaysByTCGAPanPathways()}}),Object.defineProperty(e.prototype,"onPathwayClick",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedPathway=t,this.updateRankingChoices(),this.props.pathwayActions.changePathway(this.selectedPathway)}}),Object.defineProperty(e.prototype,"onApplyClick",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.setBestPathwayMethod(2*this.isAlterationEnabled+this.isPercentageMatch),this.rankingCriteria=2*this.isAlterationEnabled+this.isPercentageMatch}}),Object.defineProperty(e.prototype,"filterBestPathwaysByTCGAPanPathways",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;this.shownPathways=this.bestPathways.filter((function(e){return!t.considerOnlyTCGAPanPathways||Pt.indexOf(e.pathwayName)>-1})),this.considerOnlyTCGAPanPathways&&Pt.indexOf(this.selectedPathway)<0&&(this.selectedPathway=this.shownPathways[0].pathwayName,this.props.pathwayActions.changePathway(this.selectedPathway))}}),Object.defineProperty(e.prototype,"toggleConsiderOnlyTCGAPanPathways",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.considerOnlyTCGAPanPathways=!this.considerOnlyTCGAPanPathways,this.updateRankingChoices(),this.filterBestPathwaysByTCGAPanPathways()}}),Object.defineProperty(e.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.props.pathwayActions.changePathway(this.selectedPathway)}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;return this.setBestPathwayMethod(this.rankingCriteria),g.a.createElement("div",{id:"ranking-bar"},this.props.tableComponent&&this.props.tableComponent(this.shownPathways.map((function(t){return{name:t.pathwayName,score:t.score,genes:t.genesMatched}})),this.selectedPathway,this.onPathwayClick),g.a.createElement("div",{className:"indent"},g.a.createElement(I.Checkbox,{checked:this.considerOnlyTCGAPanPathways,id:"tcgaPathwaysCheckbox",onClick:this.toggleConsiderOnlyTCGAPanPathways,style:{fontSize:"13px"}},"Show TCGA PanCancer Atlas pathways only ",g.a.createElement("span",{"data-tip":this.TCGA_PANCAN_EXPLANATION,"data-border":"true","data-type":"light","data-place":"left","data-effect":"solid","data-html":"true","data-delay-hide":"500",className:"fa fa-question-circle styles-module__infoIcon__zMiog"}))),!this.props.patientView&&g.a.createElement("div",{className:"info-entry"},g.a.createElement("div",{id:"criteria-title",className:"info-title"},g.a.createElement("b",{style:{display:"inline-block"}}," Ranking options")),g.a.createElement("div",{className:"indent"},g.a.createElement(I.DropdownButton,{title:this.dropDownTitle,id:"0",style:{fontSize:"13px"}},g.a.createElement(I.MenuItem,{style:{fontSize:"13px"},onClick:function(){t.isPercentageMatch=0,t.dropDownTitle="Match count",t.onApplyClick(),t.updateRankingChoices()}},"Match count"),g.a.createElement(I.MenuItem,{style:{fontSize:"13px"},onClick:function(){t.isPercentageMatch=1,t.dropDownTitle="Match percentage",t.onApplyClick(),t.updateRankingChoices()}},"Match percentage"))," ",g.a.createElement("div",{"data-tip":this.COUNT_PERC_EXPLANATION,"data-border":"true","data-type":"light","data-place":"left","data-effect":"solid",className:"fa fa-question-circle styles-module__infoIcon__zMiog"}),g.a.createElement(I.Checkbox,{id:"alterationCheckBox",onClick:function(){t.isAlterationEnabled=1===t.isAlterationEnabled?0:1,t.onApplyClick(),t.updateRankingChoices()},style:{fontSize:"13px",marginTop:"18px",bottom:"4px"},checked:1===this.isAlterationEnabled},"Consider alteration frequency ",g.a.createElement("span",{"data-tip":this.ALTERATION_EXPLANATION,"data-border":"true","data-type":"light","data-place":"left","data-effect":"solid",className:"fa fa-question-circle styles-module__infoIcon__zMiog"})))))}}),Gt([r.observable],e.prototype,"dropDownTitle",void 0),Gt([r.observable],e.prototype,"selectedPathway",void 0),Gt([r.observable],e.prototype,"considerOnlyTCGAPanPathways",void 0),Gt([r.observable],e.prototype,"isExpanded",void 0),Gt([r.observable],e.prototype,"rankingCriteria",void 0),Gt([n.a],e.prototype,"updateRankingChoices",null),Gt([n.a],e.prototype,"setBestPathwayMethod",null),Gt([n.a],e.prototype,"onPathwayClick",null),Gt([n.a],e.prototype,"onApplyClick",null),Gt([r.action.bound],e.prototype,"filterBestPathwaysByTCGAPanPathways",null),Gt([r.action.bound],e.prototype,"toggleConsiderOnlyTCGAPanPathways",null),e=Gt([l.observer],e)}(g.a.Component),zt=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Zt=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Yt=a(19),Rt=a(20),xt=a(18),Qt=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"selectedGenes",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(a),a.selectedGenes=[],a}return zt(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e="q="+JSON.stringify(this.props.alterationData)+"&g="+this.props.genes.map((function(t){return t.hugoGeneSymbol})).join("+");return g.a.createElement("div",{id:"toolbar",style:{marginLeft:"0px"}},g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Save as PNG","data-place":"right","data-effect":"solid",src:O.a,onClick:function(){t.props.pathwayActions.saveAs("PNG")}}),g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Save as SVG","data-place":"right","data-effect":"solid",src:P.a,onClick:function(){t.props.pathwayActions.saveAs("SVG")}}),g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Perform layout","data-place":"right","data-effect":"solid",src:v.a,onClick:this.props.pathwayActions.performLayout}),!this.props.patientView&&!this.props.groupComparisonView&&[g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Add selected genes to query","data-place":"right","data-effect":"solid",src:Yt,onClick:function(){t.selectedGenes=t.props.pathwayActions.getSelectedNodes().filter((function(t){return"GENE"===t.data().type})).map((function(t){return t.data().name}));var e=t.props.pathwayActions.getSelectedNodes().filter((function(t){return"GENE"!==t.data().type})).map((function(t){return t.data().name})),a=[],i="";e.length>0&&(i+="Selection contains nodes that are not genes: "+e.join(", ")+". "),t.selectedGenes.forEach((function(e){t.props.validGenes.hasOwnProperty(e)||a.push(e)})),0===a.length?t.selectedGenes.length>0&&0===e.length&&t.props.onAddGenes(t.selectedGenes):i+="Following gene symbols are invalid or already in gene list: "+a.join(", ")+".",i.length>0&&t.props.showMessage(i)}}),g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Add all valid genes to query","data-place":"right","data-effect":"solid",src:Rt,onClick:function(){t.selectedGenes=t.props.pathwayGenes.filter((function(e){return t.props.validGenes.hasOwnProperty(e)})),t.selectedGenes.length>0&&t.props.onAddGenes(t.selectedGenes)}}),!this.props.groupComparisonView&&g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Edit pathway","data-place":"right","data-effect":"solid",src:T.a,onClick:function(){window.open("http://pathwaymapper.org/?pathwayName="+t.props.selectedPathway+"&"+e)}})],g.a.createElement("img",{height:"22px",width:"22px","data-border":"true","data-type":"light","data-tip":"Help","data-place":"right","data-effect":"solid",src:xt,onClick:function(){t.props.handleOpen(Ma.CHELP)}}),this.props.genesSelectionComponent&&this.props.genesSelectionComponent())}}),Zt([r.observable],e.prototype,"selectedGenes",void 0),Zt([r.observable],e.prototype,"editor",void 0),e=Zt([l.observer],e)}(g.a.Component),Bt=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},kt=function(){function t(t,e,a,i,o,n){Object.defineProperty(this,"selectedPathway",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"fileManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"undoRedoManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pathwayHandler",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"handleOpen",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"profiles",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"gridOptionsManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"uploader",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"merger",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isCBioPortal",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isCollaborative",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"viewOperationsManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"overlayUploader",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"enabledType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"updatePathwayTitle",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(this),this.pathwayHandler=t,this.profiles=e,this.fileManager=a,this.handleOpen=i,this.isCBioPortal=o,this.isCollaborative=n,this.enabledType=R.NONE}return Object.defineProperty(t.prototype,"addProfile",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.profiles.push(t)}}),Object.defineProperty(t.prototype,"clearProfiles",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.profiles.length=0}}),Object.defineProperty(t.prototype,"emphasizeQueryGenes",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.editor&&this.editor.cy.nodes().forEach((function(e){var a=e.data().name,i=e.data().type;t.includes(a)&&"GENE"===i?e.style({"border-width":"4px","font-weight":"bold"}):e.style({"border-width":"2px","font-weight":"normal"})}))}}),Object.defineProperty(t.prototype,"getSelectedNodes",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.editor.cy.nodes(":selected")}}),Object.defineProperty(t.prototype,"setLayoutProperties",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.editor.saveLayoutProperties(t)}}),Object.defineProperty(t.prototype,"doesCyHaveElements",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.editor.cy.elements().length>0}}),Object.defineProperty(t.prototype,"toggleGrid",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.gridOptionsManager.setSnapToGuidelines(!1),this.gridOptionsManager.setShowGrid(t)}}),Object.defineProperty(t.prototype,"toggleGuide",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.gridOptionsManager.setSnapToGuidelines(t),this.gridOptionsManager.setShowGrid(!1)}}),Object.defineProperty(t.prototype,"adjustGridSettings",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){this.gridOptionsManager.currentProperties.gridSpacing=t,this.gridOptionsManager.currentProperties.guidelinesStyle.strokeStyle=e,this.gridOptionsManager.currentProperties.guidelinesStyle.horizontalDistColor=e,this.gridOptionsManager.currentProperties.guidelinesStyle.verticalDistColor=e}}),Object.defineProperty(t.prototype,"resizeToContent",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.resizeNodesToContent(this.editor.cy.nodes())}}),Object.defineProperty(t.prototype,"align",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.viewOperationsManager.handleNodeAlignment(t)}}),Object.defineProperty(t.prototype,"onChangeFile",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=t.target.files[0];this.processFile(a,e),t.target.value=""}}),Object.defineProperty(t.prototype,"uploadOverlay",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.overlayUploader.click()}}),Object.defineProperty(t.prototype,"overlayFromText",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=new FormData;a.append("graphFile",t);var i=new XMLHttpRequest;i.onreadystatechange=function(){if(i.readyState===XMLHttpRequest.DONE&&200===i.status){var t=i.responseText.split("\n");if(t.length>0)t[0].split("\t").slice(1).forEach((function(t){return e.addProfile({profileId:t,enabled:!0})}));else console.log("Error: No valid data");e.editor.addGenomicData(i.responseText,!1)}},i.open("POST","/loadGraph"),i.send(a)}}),Object.defineProperty(t.prototype,"upload",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;this.editor.cy.elements().length>0?(this.handleOpen(Ma.CONFIRMATION),H.pendingFunction=function(){t.uploader.click()}):this.uploader.click()}}),Object.defineProperty(t.prototype,"merge",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.merger.click()}}),Object.defineProperty(t.prototype,"setOverlayUploader",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.overlayUploader=t}}),Object.defineProperty(t.prototype,"setUploaders",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){e?this.merger=t:this.uploader=t}}),Object.defineProperty(t.prototype,"getPathwayInfo",{get:function(){return this.fileManager.getPathwayInfo},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"setPathwayInfo",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.fileManager.setPathwayInfo(t)}}),Object.defineProperty(t.prototype,"undo",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.undoRedoManager.undo()}}),Object.defineProperty(t.prototype,"redo",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.undoRedoManager.redo()}}),Object.defineProperty(t.prototype,"export",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.eh.hide(),this.fileManager.saveGraph(t,this.editor)}}),Object.defineProperty(t.prototype,"resetUndoStack",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.undoRedoManager.reset()}}),Object.defineProperty(t.prototype,"newPathway",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=function(){t.editor.removeAllElements(),t.fileManager.setPathwayInfo({pathwayTitle:"New Pathway",pathwayDetails:""}),t.resetUndoStack(),t.pathwayHandler("Dummy")};this.editor.cy.elements().length>0?(this.handleOpen(Ma.CONFIRMATION),H.pendingFunction=e):e()}}),Object.defineProperty(t.prototype,"changePathwayTitle",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.updatePathwayTitle(t)}}),Object.defineProperty(t.prototype,"changePathway",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.pathwayHandler(t),this.isCBioPortal||(this.fileManager.setPathwayInfo({pathwayTitle:t,pathwayDetails:""}),this.editor&&this.resetUndoStack())}}),Object.defineProperty(t.prototype,"highlightNeighbours",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.highlightNeighbors()}}),Object.defineProperty(t.prototype,"highlightSelected",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.highlightSelected()}}),Object.defineProperty(t.prototype,"validateGenes",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.validateGenes()}}),Object.defineProperty(t.prototype,"showAll",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.showAllNodes()}}),Object.defineProperty(t.prototype,"hideSelected",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.hideSelectedNodes()}}),Object.defineProperty(t.prototype,"deleteSelected",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this.editor.cy.elements(":selected");this.editor.removeElement(t)}}),Object.defineProperty(t.prototype,"addEdge",{enumerable:!1,configurable:!0,writable:!0,value:function(t){if(window.edgeAddingMode=t+1,-1===t)return this.eh.disable(),void this.eh.hide();this.eh.enable()}}),Object.defineProperty(t.prototype,"changeNodeName",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this.editor.cy.$('[name="'+t+'"]')[0];this.editor.changeName(a,e)}}),Object.defineProperty(t.prototype,"addNode",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e={type:t.toUpperCase(),name:"New "+t,w:"150",h:"52"},a=this.editor.cy.extent(),i={x:(a.x1+a.x2)/2,y:(a.y1+a.y2)/2};this.editor.addNode(e,i),this.pathwayHandler("Additional Pathway")}}),Object.defineProperty(t.prototype,"searchGene",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e="node[name @*= '"+t+"']",a=this.editor.cy.filter(e),i=this.editor.cy.collection();a.forEach((function(t,e){t.hasClass("highlightedNode")||t.hasClass("invalidGeneHighlight")||(i=i.union(t))})),this.editor.highlightBySearch(i)}}),Object.defineProperty(t.prototype,"removeAllData",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.removeGenomicData(),this.clearProfiles()}}),Object.defineProperty(t.prototype,"removeAllHighlight",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.removeAllHighlight()}}),Object.defineProperty(t.prototype,"processFile",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this,i=new FormData;i.append("graphFile",t);var o=new XMLHttpRequest;o.onreadystatechange=function(){if(o.readyState===XMLHttpRequest.DONE)if(200===o.status){var t=p.parseGraph(o.responseText,!1);if(e){a.editor.mergeGraph(t.nodes,t.edges);var i=a.editor.cy.json();t.nodes=i.elements.nodes,t.edges=i.elements.edges,t.title="Additional Pathway"}else a.editor.loadFile(t.nodes,t.edges),a.fileManager.setPathwayInfo({pathwayTitle:t.title,pathwayDetails:t.description});a.pathwayHandler(t.title+"_imported"),a.resetUndoStack()}else console.error("Error processing file: "+o.readyState+o.responseText)},o.open("POST","/loadGraph"),o.send(i)}}),Object.defineProperty(t.prototype,"saveAs",{enumerable:!1,configurable:!0,writable:!0,value:function(t){"SVG"===t?this.fileManager.saveAsSVG(this.editor):"PNG"===t?this.fileManager.saveAsPNG(this.editor.cy):"JPEG"===t&&this.fileManager.saveAsJPEG(this.editor.cy)}}),Object.defineProperty(t.prototype,"editorHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a,i,o){this.editor=t,this.eh=e,this.undoRedoManager=a,this.viewOperationsManager=i,this.gridOptionsManager=o}}),Object.defineProperty(t.prototype,"exists",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=!1;return this.profiles.forEach((function(a){a.profileId===t&&(e=!0)})),e}}),Object.defineProperty(t.prototype,"loadSampleData",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.exists("lung")||this.exists("ovarian")||this.exists("breast")||(this.editor.addGenomicData("gene\tlung\tovarian\tbreast\nPTEN\t-7\t-20\t10\nNF1\t-12\t-4\t30\nPIK3CA\t18\t40\t-50\nKRAS\t11\t-5\t0\nZIYA\t0\t-2\t0\nAKT1\t3\t30\t-10\nAKT2\t6\t-3\t20\nAKT3\t6\t-3\t20\n\n",!1),this.isCollaborative||(this.addProfile({profileId:"lung",enabled:this.profiles.length<6}),this.addProfile({profileId:"ovarian",enabled:this.profiles.length<6}),this.addProfile({profileId:"breast",enabled:this.profiles.length<6})))}}),Object.defineProperty(t.prototype,"performLayout",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.editor.performLayout()}}),Bt([r.observable],t.prototype,"selectedPathway",void 0),Bt([r.observable],t.prototype,"enabledType",void 0),Bt([r.action.bound],t.prototype,"addProfile",null),Bt([r.action.bound],t.prototype,"clearProfiles",null),Bt([n.a],t.prototype,"toggleGrid",null),Bt([n.a],t.prototype,"toggleGuide",null),Bt([n.a],t.prototype,"resizeToContent",null),Bt([n.a],t.prototype,"align",null),Bt([n.a],t.prototype,"onChangeFile",null),Bt([n.a],t.prototype,"upload",null),Bt([n.a],t.prototype,"merge",null),Bt([n.a],t.prototype,"setUploaders",null),Bt([r.computed],t.prototype,"getPathwayInfo",null),Bt([n.a],t.prototype,"setPathwayInfo",null),Bt([n.a],t.prototype,"undo",null),Bt([n.a],t.prototype,"redo",null),Bt([n.a],t.prototype,"export",null),Bt([n.a],t.prototype,"resetUndoStack",null),Bt([n.a],t.prototype,"newPathway",null),Bt([n.a],t.prototype,"changePathway",null),Bt([n.a],t.prototype,"highlightNeighbours",null),Bt([n.a],t.prototype,"highlightSelected",null),Bt([n.a],t.prototype,"validateGenes",null),Bt([n.a],t.prototype,"showAll",null),Bt([n.a],t.prototype,"hideSelected",null),Bt([n.a],t.prototype,"deleteSelected",null),Bt([n.a],t.prototype,"addEdge",null),Bt([n.a],t.prototype,"changeNodeName",null),Bt([n.a],t.prototype,"addNode",null),Bt([n.a],t.prototype,"searchGene",null),Bt([n.a],t.prototype,"removeAllData",null),Bt([n.a],t.prototype,"removeAllHighlight",null),Bt([n.a],t.prototype,"processFile",null),Bt([n.a],t.prototype,"saveAs",null),Bt([n.a],t.prototype,"editorHandler",null),Bt([n.a],t.prototype,"exists",null),Bt([n.a],t.prototype,"loadSampleData",null),Bt([n.a],t.prototype,"performLayout",null),t}(),Wt=a(18),Ht=a.n(Wt),Ut=a(23),Vt=a.n(Ut),Kt=a(24),Ft=a.n(Kt),Xt=a(25),Jt=a.n(Xt),qt=a(26),_t=a.n(qt),$t=a(27),te=a.n($t),ee=a(28),ae=a.n(ee),ie=a(29),oe=a.n(ie),ne=a(30),re=a.n(ne),le=a(31),ce=a.n(le),ge=a(32),Ie=a.n(ge),se=a(33),de=a.n(se),ue=a(34),Ce=a.n(ue),Ne=a(35),pe=a.n(Ne),Me=a(36),Ae=a.n(Me),be=a(37),ye=a.n(be),he=a(38),De=a.n(he),me=a(39),Ee=a.n(me),we=a(40),je=a.n(we),Te=a(41),fe=a.n(Te),ve=a(42),Le=a.n(ve),Oe=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Ge=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Pe=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"searchedGene",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(a),a.searchedGene="",a.props.pathwayActions.enabledType=R.NONE,a}return Oe(e,t),Object.defineProperty(e.prototype,"setEnabledType",{enumerable:!1,configurable:!0,writable:!0,value:function(t){t===this.props.pathwayActions.enabledType?this.props.pathwayActions.enabledType=R.NONE:this.props.pathwayActions.enabledType=t,this.props.pathwayActions.enabledType===R.GRID?this.props.pathwayActions.toggleGrid(!0):this.props.pathwayActions.enabledType===R.GUIDE?this.props.pathwayActions.toggleGuide(!0):this.props.pathwayActions.toggleGrid(!1)}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=[{svg:pe.a,function:this.props.pathwayActions.newPathway,tooltip:"New Pathway"},{svg:Ce.a,function:this.props.pathwayActions.upload,tooltip:"Import Pathway"},{svg:Ee.a,function:function(){t.props.pathwayActions.export(!1)},tooltip:"Export Pathway"}],a=[{svg:oe.a,function:this.props.pathwayActions.deleteSelected,tooltip:"Delete Selected"}];this.props.pathwayActions.isCollaborative||a.push({svg:Le.a,function:function(){t.props.pathwayActions.undo()},tooltip:"Undo"},{svg:De.a,function:function(){t.props.pathwayActions.redo()},tooltip:"Redo"});var i=[{svg:Jt.a,function:function(){t.props.pathwayActions.align("hTop")},tooltip:"Align Horizontal Top"},{svg:Ft.a,function:function(){t.props.pathwayActions.align("hMid")},tooltip:"Align Horizontal Middle"},{svg:Vt.a,function:function(){t.props.pathwayActions.align("hBot")},tooltip:"Align Horizontal Bottom"},{svg:te.a,function:function(){t.props.pathwayActions.align("vLeft")},tooltip:"Align Vertical Left"},{svg:_t.a,function:function(){t.props.pathwayActions.align("vCen")},tooltip:"Align Vertical Center"},{svg:ae.a,function:function(){t.props.pathwayActions.align("vRight")},tooltip:"Align Vertical Right"}],o=[{isFocused:this.props.pathwayActions.enabledType===R.GRID,svg:re.a,function:function(){t.setEnabledType(R.GRID)},tooltip:"Enable Grid: Show and snap to grid"},{isFocused:this.props.pathwayActions.enabledType===R.GUIDE,svg:ce.a,function:function(){t.setEnabledType(R.GUIDE)},tooltip:"Enable Guidelines: Enable and snap to alignment guidelines"}],n=[{svg:Ie.a,function:function(){t.props.pathwayActions.hideSelected()},tooltip:"Hide Selected"},{svg:fe.a,function:function(){t.props.pathwayActions.showAll()},tooltip:"Show All"}],r=[{svg:v.a,function:function(){t.props.pathwayActions.performLayout()},tooltip:"Perform Layout"},{svg:de.a,function:function(){t.props.handleOpen(Ma.LAYOUT)},tooltip:"Layout Properties"}],l=[e,a,i,o,n,[{svg:Ae.a,function:function(){t.props.handleOpen(Ma.STUDY)},tooltip:"Fetch Genomic Data From cBioPortal"},{svg:je.a,function:function(){t.props.handleOpen(Ma.PROFILES)},tooltip:"Genomic Data Visibility Settings"}],r,[{svg:ye.a,function:function(){t.props.handleOpen(Ma.HELP)},tooltip:"Quick Help"},{svg:Ht.a,function:function(){t.props.handleOpen(Ma.ABOUT)},tooltip:"About"}]];return g.a.createElement(I.Navbar,{fluid:!0,style:{backgroundColor:"#eff0f2",minHeight:"0px"},className:"pathway-toolbar"},g.a.createElement(I.ButtonToolbar,{className:"toolbar pathway-toolbar",style:{marginBottom:"0px",paddingBottom:"0px"}},l.map((function(t,e){return g.a.createElement(I.ButtonGroup,{key:e},t.map((function(t,e){return g.a.createElement(I.Button,{key:e,className:"toolbar-button"+(t.isFocused?" toolbar-button-focused":""),style:{padding:0}},g.a.createElement("img",{height:"22px",width:"22px",src:t.svg,"data-tip":t.tooltip,"data-place":"bottom","data-effect":"solid",onClick:t.function}))})))})),g.a.createElement(I.ButtonGroup,{id:"searchGeneToolbar"},g.a.createElement(I.FormGroup,null,g.a.createElement(I.InputGroup,null,g.a.createElement(I.FormControl,{id:"searchGene",type:"text",style:{maxHeight:"32px",borderTopRightRadius:0,borderBottomRightRadius:0},onChange:function(e){t.searchedGene=e.target.value},placeholder:"Search Genes...",onKeyPress:function(e){"Enter"===e.key&&t.props.pathwayActions.searchGene(t.searchedGene)}}),g.a.createElement(I.InputGroup.Addon,{id:"search-gene-input-group-addon",onClick:function(){t.props.pathwayActions.searchGene(t.searchedGene)},style:{cursor:"pointer"}},g.a.createElement(I.Glyphicon,{glyph:"search"})))))))}}),Ge([r.observable],e.prototype,"searchedGene",void 0),e=Ge([l.observer],e)}(g.a.Component),Se=a(7),ze=a.n(Se),Ze=a(43),Ye=a.n(Ze),Re=a(44),xe=a.n(Re),Qe=a(45),Be=a.n(Qe),ke=a(46),We=a.n(ke),He=a(47),Ue=a.n(He),Ve=a(48),Ke=a.n(Ve),Fe=function(){function t(t,e,a,i,o){Object.defineProperty(this,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"handleOpen",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"undoRedoManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isCollaborative",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.cy=t,this.editor=e,this.handleOpen=a,this.undoRedoManager=i,this.isCollaborative=o,this.init()}return Object.defineProperty(t.prototype,"init",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=this,a=this.cy.scratch("cycontextmenus")?this.cy.contextMenus("get"):this.cy.contextMenus(),i=[{id:"deleteSelected",content:"Delete Selected",coreAsWell:!0,onClickFunction:function(){var a=t.cy.elements(":selected");e.editor.removeElement(a)},disabled:!1,hasTrailingDivider:!1},{id:"hideSelected",content:"Hide Selected",coreAsWell:!0,onClickFunction:function(){e.editor.hideSelectedNodes()},disabled:!1,hasTrailingDivider:!1},{id:"loadFromCBioPortal",content:"Load From cBioPortal...",coreAsWell:!0,onClickFunction:function(){t.handleOpen(Ma.STUDY)},disabled:!1,hasTrailingDivider:!1},{id:"remove",content:"Delete",selector:"node, edge",onClickFunction:function(t){var a=t.target,i=e.cy.nodes(":selected").union(a);e.editor.removeElement(i)},disabled:!1,hasTrailingDivider:!1,coreAsWell:!1},{id:"addSelected",content:"Add Selected Into This",selector:"node",onClickFunction:function(t){var a=t.target,i=e.cy.nodes(":selected"),o=a.data("type"),n=e.cy.collection();if(!("GENE"===a._private.data.type||i.size()<1)){var r=!1;if(i.forEach((function(t,i){return a.id()==t.id()?(r=!0,!1):!t.isParent()||!(r=e.isChildren(t,a))})),!r){var l=[];i.forEach((function(t){i.forEach((function(a){e.isChildren(t,a)&&l.push(a)}))})),l.forEach((function(t){t.unselect(),i=i.filter((function(e){return e!=t}))})),i.forEach((function(t,e){"FAMILY"==o||"COMPLEX"==o?"COMPARTMENT"!=t.data("type")&&"PROCESS"!=t.data("type")&&(n=n.add(t)):n=n.add(t)}));var c=a.id();e.editor.changeParents(n,c),i.unselect()}}},disabled:!1,hasTrailingDivider:!1,coreAsWell:!1},{id:"removeSelected",content:"Remove Selected From Parent",selector:"node",onClickFunction:function(t){var a=t.target,i=e.cy.nodes(":selected"),o=!1;i.forEach((function(t,i){return!t.isParent()||!(o=e.isChildren(t,a))})),o||(e.editor.changeParents(i,null),i.unselect())},disabled:!1,hasTrailingDivider:!1,coreAsWell:!1},{id:"performLayout",content:"Perform Layout",coreAsWell:!0,onClickFunction:function(){t.editor.performLayout()},disabled:!1,hasTrailingDivider:!1}],o=[{id:"undoAction",content:"Undo",coreAsWell:!0,onClickFunction:function(){t.undoRedoManager.undo()},disabled:!1,hasTrailingDivider:!1},{id:"redoAction",content:"Redo",coreAsWell:!0,onClickFunction:function(){t.undoRedoManager.redo()},disabled:!1,hasTrailingDivider:!1}];this.isCollaborative||(i=i.concat(o)),a.appendMenuItems(i)}}),Object.defineProperty(t.prototype,"isChildren",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){for(var a=e.parent()[0];a;){if(a.id()==t.id())return!0;a=a.parent()[0]}return!1}}),t}(),Xe=function(){function t(t,e){Object.defineProperty(this,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.cy=t,this.editor=e}return Object.defineProperty(t.prototype,"generateEdgeQtip",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=t.data("pubmedIDs"),i=document.createElement("div"),o=document.createElement("div");o.classList.add("row","node-tooltip-header"),o.innerHTML="INTERACTION DETAILS",i.append(o);var n=document.createElement("div");n.classList.add("col-xs-6","inputCol");var r=document.createElement("input");r.type="text",r.value=t.data("name"),r.classList.add("form-control"),r.addEventListener("change",(function(a){var i=a.target.value;e.editor.changeName(t,i)})),n.appendChild(r);var l=document.createElement("div");l.classList.add("row","geneDetails");var c=document.createElement("div");c.classList.add("col-xs-6","qtipLabel"),c.innerHTML="Label:",l.appendChild(c),l.appendChild(n),i.appendChild(l),i.appendChild(document.createElement("hr"));var g=document.createElement("div");g.classList.add("col-xs-6","inputCol");var I=document.createElement("input");I.type="text",I.classList.add("form-control"),I.addEventListener("change",(function(a){var i=a.target.value.split(";");a.target.value="",e.editor.addPubmedIDs(t,i),u(t.data("pubmedIDs"))})),g.appendChild(I);var s=document.createElement("div");s.classList.add("row","geneDetails");var d=document.createElement("div");function u(a){document.getElementsByClassName("pubmedIDList").length>0&&document.getElementsByClassName("pubmedIDList").item(0).remove();var o=document.createElement("div");o.classList.add("pubmedIDList"),o.appendChild(document.createElement("hr"));var n=document.createElement("label");for(var r in n.classList.add("col-xs-12","pubmedIDLabel"),n.innerHTML="Pubmed IDs",o.appendChild(n),a)if(a.hasOwnProperty(r)){var l=a[r];if(!isNaN(l)){var c=document.createElement("div"),g=document.createElement("i");g.classList.add("fa","fa-times","qtipRemovePmedID"),g.setAttribute("aria-hidden","true"),g.setAttribute("pubmedId",l),g.addEventListener("click",(function(a){a.target.parentElement.remove();var i=a.target.getAttribute("pubmedId");e.editor.removePubmedID(t,[i]),0===t.data("pubmedIDs").length&&document.getElementsByClassName("pubmedIDList").item(0).remove()}));var I=document.createElement("div"),s=document.createElement("label"),d=document.createElement("a");d.setAttribute("target","_blank");var u="https://www.ncbi.nlm.nih.gov/pubmed/"+l;d.setAttribute("href",u),d.innerHTML=l.toString(),s.appendChild(d),I.appendChild(s),I.appendChild(g),c.appendChild(I),o.appendChild(c)}}t.data("pubmedIDs").length>0&&i.appendChild(o)}return d.classList.add("col-xs-6","qtipLabel"),d.innerHTML="Add Pubmed ID(s):",s.appendChild(d),s.appendChild(g),i.appendChild(s),a.length>0&&u(a),i.classList.add("tooltip-text-style"),i}}),Object.defineProperty(t.prototype,"generateNodeQtip",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this,a=document.createElement("div");a.classList.add("row","node-tooltip-header"),a.innerHTML=t.data("type").toUpperCase()+" DETAILS";var i=document.createElement("div");i.classList.add("col-xs-8","inputCol");var o=document.createElement("input");o.type="text",o.value=t.data("name"),o.classList.add("form-control"),o.addEventListener("change",(function(a){var i=a.target.value;e.editor.changeName(t,i)})),i.appendChild(o);var n=document.createElement("div"),r=document.createElement("div");r.classList.add("row","geneDetails");var l=document.createElement("div");if(l.classList.add("col-xs-4","qtipLabel"),l.innerHTML="Name:",r.appendChild(l),r.appendChild(i),n.append(a),n.append(r),"GENE"===t.data("type")){var c=document.createElement("div");c.classList.add("row","centerText","geneDetails");var g=document.createElement("button");g.type="button",g.classList.add("btn","btn-default"),g.innerHTML="My Cancer Genome",g.addEventListener("click",(function(e){e.preventDefault();var a=t.data("name");window.open("https://www.mycancergenome.org/content/gene/"+a)})),c.append(g),n.append(c)}return n.classList.add("tooltip-text-style"),n}}),Object.defineProperty(t.prototype,"addQtipToElements",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this;t.forEach((function(t){var a=t.popperRef(),i=document.createElement("div");document.body.appendChild(i);var o=tt()(i,{getReferenceClientRect:a.getBoundingClientRect,trigger:"manual",placement:"bottom",interactive:!0,theme:"pathwaymapper",content:function(){return t.isNode()?e.generateNodeQtip(t):e.generateEdgeQtip(t)},onHidden:function(t){t.destroy(),i.remove()}});e.cy.one("pan zoom",(function(){i&&i._tippy&&o.hide()})),t.one("showqtipevent",(function(){o.show()}))}))}}),Object.defineProperty(t.prototype,"capitalizeFirstLetter",{enumerable:!1,configurable:!0,writable:!0,value:function(t){return t.charAt(0).toUpperCase()+t.slice(1)}}),t}(),Je=function(){function t(t){Object.defineProperty(this,"NODEMAP_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"nodes"}),Object.defineProperty(this,"EDGEMAP_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"edges"}),Object.defineProperty(this,"LAYOUT_PROPS_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"layoutProperties"}),Object.defineProperty(this,"GLOBAL_OPTS_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"globalOptions"}),Object.defineProperty(this,"GENOMIC_DATA_MAP_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"genomicDataMap"}),Object.defineProperty(this,"VISIBLE_GENOMIC_DATA_MAP_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"visibleGenomicDataMapByType"}),Object.defineProperty(this,"GENOMIC_DATA_GROUP_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"genomicDataGroupList"}),Object.defineProperty(this,"GENOMIC_DATA_GROUP_COUNT",{enumerable:!0,configurable:!0,writable:!0,value:"genomicDataGroupCount"}),Object.defineProperty(this,"GENOMIC_DATA_COLOR_SCHEME_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"genomicDataColorScheme"}),Object.defineProperty(this,"CHAT_APPLICATION_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"chatMessages"}),Object.defineProperty(this,"CHAT_MESSAGES_COUNT",{enumerable:!0,configurable:!0,writable:!0,value:"chatMessagesCount"}),Object.defineProperty(this,"PATHWAY_TITLE",{enumerable:!0,configurable:!0,writable:!0,value:"pathwayTitle"}),Object.defineProperty(this,"NUMBER_OF_USERS",{enumerable:!0,configurable:!0,writable:!0,value:"numberOfUsers"}),Object.defineProperty(this,"WORK_ID",{enumerable:!0,configurable:!0,writable:!0,value:"id"}),Object.defineProperty(this,"doc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"postFileLoad",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"reconnectEdge",{enumerable:!0,configurable:!0,writable:!0,value:function(t,e,a){var i=this.doc.data[this.EDGEMAP_NAME],o=i[a.id],n=o.id;if(o.source=t,o.target=e,!i.hasOwnProperty(n))throw new Error("Element does not exist in Real Time");this.updateShareDBObject(this.EDGEMAP_NAME,n,o)}}),this.postFileLoad=t}return Object.defineProperty(t.prototype,"getDoc",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.doc}}),Object.defineProperty(t.prototype,"setEditor",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.editor=t}}),Object.defineProperty(t.prototype,"applyShareDBOperation",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.doc.submitOp(t,this.shareDBError)}}),Object.defineProperty(t.prototype,"clearShareDBGenomicData",{enumerable:!1,configurable:!0,writable:!0,value:function(){for(var t=[],e=this.doc.data[this.GENOMIC_DATA_MAP_NAME],a=this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME],i=this.doc.data[this.GENOMIC_DATA_GROUP_NAME],o=this.doc.data[this.GENOMIC_DATA_GROUP_COUNT],n=0,r=Object.keys(e);n=0&&o.push(l)}for(n=0;n0)for(var c=0,g=t.children;c0?(g.data.anchorPoints=g.data.bendPointPositions,delete g.data.bendPointPositions,I="segments"):g.data.controlPointPositions&&g.data.controlPointPositions.length>0&&(g.data.anchorPoints=g.data.controlPointPositions,delete g.data.controlPointPositions,I="unbundled-bezier");var s=g.data;s.edgeCurveStyle=I;var d=a.getCustomObjId();s.id=d;var u=a.edgeInitializer(s);a.insertShareDBObject(a.EDGEMAP_NAME,d,u)}}}),Object.defineProperty(t.prototype,"mergeGraph",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var a=this,i=a.doc.data[this.NODEMAP_NAME],o={},n={},r={};for(var l in i){var c=i[l];o[c.id]=c,n[c.name]=c}function g(t,e){if(t.data.name in n){var i=n[t.data.name].id;if(r[t.data.id]=i,t.children.length>0)for(var o=0,l=t.children;o0)for(var s=0,d=t.children;s0&&e.pubmedIDs.push(t.pubmedIDs)):e.pubmedIDs=[],t.anchorPoints?(null==e.anchorPoints&&(e.anchorPoints=[]),Array.isArray(t.anchorPoints[0])?e.anchorPoints=t.anchorPoints[0]:e.anchorPoints=t.anchorPoints):e.anchorPoints=[],e}}),Object.defineProperty(t.prototype,"nodeInitializer",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e={};return e.id=t.id||this.getCustomObjId(),e.name=t.name||"undefined",e.type=t.type||"undefined",e.parent=t.parent||"undefined",e.x=t.x||"undefined",e.y=t.y||"undefined",e.w=t.w||"undefined",e.h=t.h||"undefined",e.minWidth=t.minWidth||0,e.minWidthBiasLeft=t.minWidth||0,e.minWidthBiasRight=t.minWidth||0,e.minHeight=t.minWidth||0,e.minHeightBiasTop=t.minWidth||0,e.minHeightBiasBottom=t.minWidth||0,e.isHidden=t.isHidden||!1,e.isInvalidGene=t.isInvalidGene||!1,e.isHighlighted=t.isHighlighted||!1,e}}),Object.defineProperty(t.prototype,"layoutPropertiesInitializer",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e={};return e.name=t.name||"undefined",e.nodeRepulsion=t.nodeRepulsion||"undefined",e.idealEdgeLength=t.idealEdgeLength||"undefined",e.edgeElasticity=t.edgeElasticity||"undefined",e.nestingFactor=t.nestingFactor||"undefined",e.gravity=t.gravity||"undefined",e.numIter=t.numIter||"undefined",e.tile=t.tile||"undefined",e.animate=t.animate||"undefined",e.randomize=t.randomize||!1,e.gravityRangeCompound=t.gravityRangeCompound||"undefined",e.gravityCompound=t.gravityCompound||"undefined",e.gravityRange=t.gravityRange||"undefined",e.tilingPaddingVertical=t.tilingPaddingVertical||"undefined",e.tilingPaddingHorizontal=t.tilingPaddingHorizontal||"undefined",e.initialEnergyOnIncremental=t.initialEnergyOnIncremental||"undefined",e}}),Object.defineProperty(t.prototype,"globalOptionsInitializer",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e={};return e.zoomLevel=t.zoomLevel||"undefined",e.panLevel=t.panLevel||"undefined",e}}),Object.defineProperty(t.prototype,"getCustomObjId",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=Date.now();return"undefined"!=typeof performance&&"function"==typeof performance.now&&(t+=performance.now()),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var a=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?a:3&a|8).toString(16)}))}}),Object.defineProperty(t.prototype,"getParam",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=new RegExp(t+"=(.*?)($|&)","g"),a=window.location.search.match(e);return a=a&&a.length?(a=a[0]).replace(t+"=","").replace("&",""):null}}),t}(),qe=(a(63),function(){function t(t,e,a){Object.defineProperty(this,"pathwayHandler",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.editor=t,this.cy=e,this.pathwayHandler=a,this.initNodeAdd()}return Object.defineProperty(t.prototype,"initNodeAdd",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e={height:30,width:30,padding:5,backgroundColorDiv:"#fbfbfb",borderColorDiv:"#fff",borderWidthDiv:"0px",borderRadiusDiv:"5px",icon:"",nodeParams:function(){return{}}},a=this;q.a.fn.cytoscapeNodeadd=function(i){var o=q.a.extend(!0,{},e,i),n=i,r={destroy:function(){q()(this).find(".ui-cytoscape-nodeadd").remove()},init:function(){return q()(this).each((function(){for(var e=0,i=o.components;e
');r.append(l);var c=q()('
');l.append(c),c.bind("mousedown",(function(t){t.stopPropagation(),t.preventDefault()})),r.find(".ui-cytoscape-nodeadd-nodediv").css({background:o.backgroundColorDiv,border:o.borderWidthDiv+" solid "+o.borderColorDiv,"border-radius":o.borderRadiusDiv}),r.find("#ui-cytoscape-nodeadd-icon").draggable({helper:"clone",cursor:"pointer"})}var g=q()(this);g.droppable({activeClass:"ui-state-highlight",drop:function(e,i){g.removeClass("ui-state-highlight");var o=g.offset(),n=e.pageX-o.left,r=e.pageY-o.top,l=q()(i.helper).attr("nodeType").toUpperCase(),c=t.cy,I={},s={};c.nodes().forEach((function(t){var e=t.renderedBoundingBox();n<=e.x2&&n>=e.x1&&r<=e.y2&&r>=e.y1&&"GENE"!=t.data().type&&(t.children().length>0&&(s[t.id()]=!0),s[t._private.data.parent]&&delete I[t._private.data.parent],I[t.id()]=t)}));var d=I[Object.keys(I)[0]],u={w:"0",h:"100",parent:0,type:l,name:"New "+q()(i.helper).attr("nodeType")};d&&("FAMILY"==d.data().type||"COMPLEX"==d.data().type?"COMPARTMENT"!=l&&"PROCESS"!=l&&(u.parent=d.id()):u.parent=d.id()),"PROCESS"===l?(u.w="100",u.h="35"):(u.w="150",u.h="52"),n=n/c.zoom()+c.extent().x1,r=r/c.zoom()+c.extent().y1,t.editor.addNode(u,{x:n,y:r}),a.pathwayHandler("Additional Pathway")}})}))}};return r[n]?r[n].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof n&&n?(q.a.error("No such function `"+n+"` for jquery.cytoscapenodeadd"),q()(this)):r.init.apply(this,arguments)},q.a.fn.cynodeadd=q.a.fn.cytoscapeNodeadd;try{ze()("core","nodeadd",(function(t){q()(this.container()).cytoscapeNodeadd(t)}))}catch(t){console.log(t)}}}),t}()),_e=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),$e=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r};window.$=q.a;var ta=a(64),ea=a(65),aa=a(66),ia=a(67),oa=a(68),na=a(69),ra=a(70),la=a(71),ca=a(72),ga=a(73),Ia=a(74),sa=a(75),da=a(76),ua=a(77),Ca=a(78),Na=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"cy",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"cyDiv",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"edgeAddingMode",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"viewOperationsManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"qtipManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"genomicDataExplorerView",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"pathwayDetailsView",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"viewUtilities",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isCollaborative",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isCbioPortal",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"shareDBManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"cxtMenuManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"dragDropNodeAddManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"undoRedoManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"portalAccessor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"isMountedFirst",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(a,"eh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(a,"lastSelectedEdge",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),a.isCollaborative=e.isCollaborative,a.edgeAddingMode=0,a.isCbioPortal=e.isCbioPortal,a}return _e(e,t),Object.defineProperty(e.prototype,"componentWillUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.props.selectedPathway!==t.selectedPathway&&this.getPathway(t.selectedPathway)}}),Object.defineProperty(e.prototype,"componentDidUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.isCbioPortal&&t.selectedPathway!==this.props.selectedPathway&&this.props.onPathwayChangeCompleted()}}),Object.defineProperty(e.prototype,"getPathway",{enumerable:!1,configurable:!0,writable:!0,value:function(t){if(t&&""!==t){var e=C[t];if(e){var a=p.parseGraph(e,!0);this.editor.loadFile(a.nodes,a.edges)}}}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){return g.a.createElement("div",{className:this.props.isCbioPortal?"":"cyContainer",style:{border:"3px solid "+(this.isCbioPortal?"#4389c0":"#1abc9c")}},g.a.createElement("div",{ref:this.cyDivHandler,id:"cy",style:{height:this.isCbioPortal?"800px":"100%",borderRadius:"6px",marginTop:"0px"}}),!this.isCbioPortal&&g.a.createElement("div",{className:"cytoscape-navigator-wrapper"}))}}),Object.defineProperty(e.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.isMountedFirst&&(this.init(),this.isMountedFirst=!1),this.getPathway(this.props.selectedPathway)}}),Object.defineProperty(e.prototype,"cyDivHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.cyDiv=t}}),Object.defineProperty(e.prototype,"init",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.portalAccessor=new jt,this.initCyJS(),this.initCyHandlers(),this.initKeyboardHandlers(),this.initUndoRedoFunctionality(),this.initCBioPortalFunctionalities(),this.placePanzoomAndOverlay()}}),Object.defineProperty(e.prototype,"placePanzoomAndOverlay",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=q()(this.cyDiv).offset().top,e=q()(this.cyDiv).offset().left,a=q()(this.cyDiv).outerHeight(),i=q()(this.cyDiv).outerWidth(),o=this.isCbioPortal?0:q()(".cytoscape-navigator-wrapper").outerHeight(),n=this.isCbioPortal?0:q()(".cytoscape-navigator-wrapper").outerWidth();this.isCbioPortal||(q()(".cytoscape-navigator-wrapper").css("top",a+t-o-5+16),q()(".cytoscape-navigator-wrapper").css("left",i+e-n-5+24-.5+.35),q()(".cytoscape-navigator-wrapper").css("z-index",1039)),q()(".cytoscape-navigator-wrapper").css("z-index",1039),q()(".cy-panzoom").css("position","relative"),q()(".cy-panzoom").css("top",2),q()(".cy-panzoom").css("left",i-51),q()(".cy-panzoom").css("z-index",1039),q()(".cy-panzoom").css("width",200)}}),Object.defineProperty(e.prototype,"getPathwayData",{enumerable:!1,configurable:!0,writable:!0,value:function(){return this.pathwayDetailsView.getPathwayData()}}),Object.defineProperty(e.prototype,"initCyJS",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;try{na(ze.a,q.a)}catch(t){console.log(t)}try{this.isCbioPortal||ca(ze.a)}catch(t){console.log(t)}try{da(ze.a,q.a)}catch(t){console.log(t)}try{oa(ze.a)}catch(t){console.log(t)}try{ga(ze.a,q.a)}catch(t){console.log(t)}try{ia(ze.a,q.a,Ia)}catch(t){console.log(t)}try{ea(ze.a,q.a,Ia)}catch(t){console.log(t)}try{sa(ze.a,q.a)}catch(t){console.log(t)}try{ta(ze.a,q.a)}catch(t){console.log(t)}try{ua(ze.a)}catch(t){console.log(t)}try{aa(ze.a)}catch(t){console.log(t)}try{Ca(ze.a)}catch(t){console.log(t)}this.cy=ze()({container:this.cyDiv,boxSelectionEnabled:!0,autounselectify:!1,wheelSensitivity:.1,style:ra,textureOnViewport:!1,motionBlur:!0,layout:{name:"preset"}}),this.edgeAddingMode=0,this.undoRedoManager=this.cy.undoRedo(),this.shareDBManager=new Je((function(){t.shareDBManager.getDoc()})),this.editor=new gt(this.isCollaborative,this.shareDBManager,this.cy,this.isCbioPortal,this.undoRedoManager,this.portalAccessor,this.props.profiles,this.props.genomicDataOverlayColorScheme,this.props.colorSchemeChangeCallback,this.props.incrementChatMessageCountCallback,this.props.newMessageCallback,this.props.updatePathwayTitleCallback),this.shareDBManager.setEditor(this.editor),this.isCollaborative&&this.shareDBManager.initShareDB(),this.qtipManager=new Xe(this.cy,this.editor),this.cxtMenuManager=this.isCbioPortal?void 0:new Fe(this.cy,this.editor,this.props.handleOpen,this.undoRedoManager,this.props.isCollaborative),this.dragDropNodeAddManager=new qe(this.editor,this.cy,this.props.pathwayHandler),this.cy.panzoom(la),this.cy.layoutUtilities({desiredAspectRatio:this.cy.width()/this.cy.height()}),this.cy.nodeadd({components:[{container:q()("#simpleNodeDiv"),nodeType:"Gene",icon:We.a},{container:q()("#familyNodeDiv"),nodeType:"Family",icon:Be.a},{container:q()("#complexNodeDiv"),nodeType:"Complex",icon:xe.a},{container:q()("#compartmentNodeDiv"),nodeType:"Compartment",icon:Ye.a},{container:q()("#processNodeDiv"),nodeType:"Process",icon:Ue.a}]});var e=this,a={preview:!0,stackOrder:4,handleSize:10,handleColor:"#1abc9c",handleLineType:"ghost",handleLineWidth:1,handleNodes:"node",hoverDelay:1,cxt:!1,enabled:!1,toggleOffOnLeave:!0,edgeType:function(t,e){return"flat"},handlePosition:function(t){return"middle top"},loopAllowed:function(t){return!1},nodeLoopOffset:-50,nodeParams:function(t,e){return{}},edgeParams:function(t,e,a){return{}},start:function(t){e.getGlobalEdgeType()},complete:function(t,a,i){e.cy.remove(i),e.editor.addEdge({source:t.id(),target:a[0].id(),type:e.getGlobalEdgeType(window.edgeAddingMode),pubmedIDs:[],name:""})},stop:function(t){e.edgeAddingMode=-1,e.eh.disable(),e.eh.hide(),e.props.setActiveEdge(-1)}};this.eh=this.cy.edgehandles(a),this.eh.disable(),this.props.editorHandler(this.editor,this.eh,this.undoRedoManager),this.isCbioPortal||this.cy.nodeEditing({padding:5,undoable:!0,grappleSize:8,grappleColor:"#ffc90e",inactiveGrappleStroke:"inside 1px blue",boundingRectangle:!0,boundingRectangleLineDash:[4,8],boundingRectangleLineColor:"ffc90e",boundingRectangleLineWidth:1.5,zIndex:999,moveSelectedNodesOnKeyEvents:function(){return!0},minWidth:function(t){var e=t.data("resizeMinWidth");return e||15},minHeight:function(t){var e=t.data("resizeMinHeight");return e||15},getCompoundMinWidth:function(t){return t.style("min-width")},getCompoundMinHeight:function(t){return t.style("min-height")},getCompoundMinWidthBiasRight:function(t){return t.style("min-width-bias-right")},getCompoundMinWidthBiasLeft:function(t){return t.style("min-width-bias-left")},getCompoundMinHeightBiasTop:function(t){return t.style("min-height-bias-top")},getCompoundMinHeightBiasBottom:function(t){return t.style("min-height-bias-bottom")},isFixedAspectRatioResizeMode:function(t){return t.is(".fixedAspectRatioResizeMode")},isNoResizeMode:function(t){},setWidth:function(t,e){t.data("w",e)},setHeight:function(t,e){t.data("h",e)},setCompoundMinWidth:function(t,e){t.style("min-width",e)},setCompoundMinHeight:function(t,e){t.style("min-height",e)},setCompoundMinWidthBiasLeft:function(t,e){t.style("min-width-bias-left",e)},setCompoundMinWidthBiasRight:function(t,e){t.style("min-width-bias-right",e)},setCompoundMinHeightBiasTop:function(t,e){t.style("min-height-bias-top",e)},setCompoundMinHeightBiasBottom:function(t,e){t.style("min-height-bias-bottom",e)},cursors:{default:"default",inactive:"not-allowed",nw:"nw-resize",n:"n-resize",ne:"ne-resize",e:"e-resize",se:"se-resize",s:"s-resize",sw:"sw-resize",w:"w-resize"},resizeToContentCueImage:Ke.a,resizeToContentFunction:this.editor.resizeNodesToContent.bind(this.editor)});this.isCbioPortal||this.cy.navigator({container:".cytoscape-navigator-wrapper",viewLiveFramerate:0,thumbnailEventFramerate:10,thumbnailLiveFramerate:!1,dblClickDelay:200,removeCustomContainer:!0,rerenderDelay:100});this.viewUtilities=this.cy.viewUtilities({node:{highlighted:{"border-width":2,"border-color":"#bc1142"},unhighlighted:{opacity:function(t){return t.css("opacity")}}},edge:{highlighted:{},unhighlighted:{opacity:function(t){return t.css("opacity")}}},setVisibilityOnHide:!1,setDisplayOnHide:!0,neighbor:function(){return!1},neighborSelectTime:500}),this.editor.setViewUtilities(this.viewUtilities),this.placePanzoomAndOverlay()}}),Object.defineProperty(e.prototype,"getGlobalEdgeType",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t="NONE";return 1===window.edgeAddingMode?t="ACTIVATES":2===window.edgeAddingMode?t="INHIBITS":3===window.edgeAddingMode?t="INDUCES":4===window.edgeAddingMode?t="REPRESSES":5===window.edgeAddingMode&&(t="BINDS"),t}}),Object.defineProperty(e.prototype,"initCyHandlers",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t,e,a=this,i=this;this.cy.on("tap",(function(a){var i=a.target;-1!==e&&-1!==t&&clearTimeout(e),t===i?(i.trigger("doubleTap"),t=-1):(e=setTimeout((function(){t=-1}),300),t=i)})),this.cy.on("doubleTap","node",(function(t){i.props.isCbioPortal||t.target===this&&(i.qtipManager.addQtipToElements(t.target),t.target.trigger("showqtipevent"))})),this.cy.on("doubleTap","edge",(function(t){i.props.isCbioPortal||t.target===this&&(i.qtipManager.addQtipToElements(t.target),t.target.trigger("showqtipevent"))})),this.cy.on("select","node",(function(t){a.editor.pushSelectedNodeStack(t.target)})),this.cy.on("unselect","node",(function(t){a.editor.removeElementFromSelectedNodeStack(t.target)})),this.cy.on("free","node",(function(t){var e=a.cy.nodes(":selected"),i=t.target;i=(i=i.union(i.descendants())).union(e),a.editor.moveElements(i)})),this.cy.on("layoutstop",(function(){a.editor.postLayout()})),this.cy.on("nodeediting.resizeend",(function(t,e,i){i.data("w",i.width()),i.data("h",i.height()),a.editor.resizeElements(i)})),this.cy.on("select","edge",(function(t){a.lastSelectedEdge=t.target})),this.cy.on("bendPointMovement",(function(){a.editor.updateEdgeAnchorPoints(a.lastSelectedEdge)})),this.cy.on("nodeediting.moveend",(function(){a.editor.changeNodePositionsByArrows(a.cy.nodes(":selected"))}))}}),Object.defineProperty(e.prototype,"initKeyboardHandlers",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;this.isCollaborative||this.isCbioPortal?(q()('a[role="redo"]').hide(),q()('a[role="undo"]').hide()):q()(document).keydown((function(e){89===e.which&&(e.ctrlKey||e.metaKey)?t.undoRedoManager.redo():90===e.which&&(e.ctrlKey||e.metaKey)&&t.undoRedoManager.undo()})),q()(document).keydown((function(e){if(65===e.which&&(e.ctrlKey||e.metaKey))"TEXTAREA"!=(a=document.activeElement.tagName)&&"INPUT"!=a&&(e.preventDefault(),t.cy.elements().select());else if(8===e.which||46===e.which){var a;if("TEXTAREA"!=(a=document.activeElement.tagName)&&"INPUT"!=a){var i=t.cy.$(":selected");t.editor.removeElement(i)}}}))}}),Object.defineProperty(e.prototype,"initUndoRedoFunctionality",{enumerable:!1,configurable:!0,writable:!0,value:function(){(this.isCollaborative||this.isCbioPortal)&&(q()('[role="undo"]').hide(),q()('[role="redo"]').hide())}}),Object.defineProperty(e.prototype,"initCBioPortalFunctionalities",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.isCbioPortal&&this.cy.contextMenus("get").destroy()}}),$e([n.a],e.prototype,"cyDivHandler",null),e=$e([l.observer],e)}(g.a.Component),pa=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}();var Ma,Aa,ba=function(t){function e(e){return t.call(this,e)||this}return pa(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){for(var t,e=this,a={},i=0,o=Object.keys(C);i30?t.substr(0,30)+"...":t))),g.a.createElement(I.Nav,{pullRight:!0},g.a.createElement(I.Navbar.Brand,null,g.a.createElement("a",{href:"#"},"PathwayMapper"))))}}),e}(g.a.Component),ya=a(49),ha=a.n(ya),Da=a(50),ma=a.n(Da),Ea=a(51),wa=a.n(Ea),ja=a(52),Ta=a.n(ja),fa=a(53),va=a.n(fa),La=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Oa=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Ga=function(t){function e(e){var a=t.call(this,e)||this;return Object(r.makeObservable)(a),a}return La(e,t),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){return g.a.createElement("div",{className:this.props.username===this.props.message.username&&this.props.message.userId===this.props.userId?"MyMessage":"OtherMessage"},g.a.createElement("div",{style:{color:this.props.message.userId===this.props.userId?["#1e90ff","#ff0000","#b0b000","#006400","#0000ff","#257359","#c71585","#fd713d"][this.props.message.userId%8]:["#8ec7fe","#f08c8c","#f6f7b6","#31ff31","#b3b3f7","#b2e5d4","#f17bc5","#fdb89e"][this.props.message.userId%8]}}," ",this.props.message.username+"_"+this.props.message.userId," "),g.a.createElement("div",{style:{whiteSpace:"pre"}},this.props.message.message))}}),e=Oa([l.observer],e)}(g.a.Component),Pa=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Sa=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},za=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"message",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(a,"charactersPerLine",{enumerable:!0,configurable:!0,writable:!0,value:21}),Object(r.makeObservable)(a),a.state={diffX:0,diffY:0,dragging:!1,styles:{}},a.handleSubmit=a.handleSubmit.bind(a),a.handleChange=a.handleChange.bind(a),a}return Pa(e,t),Object.defineProperty(e.prototype,"convertMessage",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e="",a=0;a=t.length-1)i=t.length-1;else if(" "===t.charAt(i+1));else for(;i>=0&&" "!==t.charAt(i);)i-=1;if(a>i){for(var o=a;o=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Ra=function(t){function e(e){var a=t.call(this,e)||this;return Object.defineProperty(a,"activeEdge",{enumerable:!0,configurable:!0,writable:!0,value:-1}),Object.defineProperty(a,"showChat",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object(r.makeObservable)(a),e.setActiveEdgeHandler(a.setActiveEdge),a}return Za(e,t),Object.defineProperty(e.prototype,"addEdge",{enumerable:!1,configurable:!0,writable:!0,value:function(t){if(t===this.activeEdge)return this.setActiveEdge(-1),void this.props.pathwayActions.addEdge(-1);this.setActiveEdge(t),this.props.pathwayActions.addEdge(t)}}),Object.defineProperty(e.prototype,"setActiveEdge",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.activeEdge=t}}),Object.defineProperty(e.prototype,"changeScroll",{enumerable:!1,configurable:!0,writable:!0,value:function(){document.getElementById("chatBoxxheader").children[0].scrollTop=document.getElementById("chatBoxxheader").children[0].scrollHeight}}),Object.defineProperty(e.prototype,"openChat",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.showChat=!this.showChat,setTimeout(this.changeScroll,50)}}),Object.defineProperty(e.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this,e=["Activates","Inhibits","Induces","Represses","Binds"],a=[ha.a,Ta.a,wa.a,va.a,ma.a],i=["simpleNodeDiv","familyNodeDiv","complexNodeDiv","compartmentNodeDiv","processNodeDiv"];return this.props.isCollaborative?g.a.createElement("div",{id:"pathway-sidebar",className:"sideBarWrapper"},g.a.createElement(I.Panel,{className:"pnl"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Network"),g.a.createElement(I.Panel.Body,{className:"pnl-body pathwayPanel"},g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.handleOpen(Ma.PW_DETAILS)}},"Properties")),g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.upload()}},"Import")),g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.export(!1)}},"Export")))),g.a.createElement(I.Panel,{className:"pnl"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Node Palette"),g.a.createElement(I.Panel.Body,{className:"pnl-body"},i.map((function(t){return g.a.createElement("div",{key:t,id:t,"data-tip":"Click on this and drag to the location on drawing canvas and release!","data-effect":"solid","data-place":"bottom","data-delay-show":"1000",className:"dragButtonContainer"})})))),g.a.createElement(I.Panel,{className:"pnl edgePanel"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Interaction Palette"),g.a.createElement(I.Panel.Body,{className:"pnl-body edgePaletteWrapper"},g.a.createElement("div",{className:"list-group edge-palette"},e.map((function(e,i){return g.a.createElement("div",{key:i,"data-tip":"Click to activate; then, start the interaction from the little circle on the source node!","data-effect":"solid","data-place":"bottom","data-delay-show":"1000"},g.a.createElement("a",{style:{marginBottom:"5px"},className:"list-group-item "+(t.activeEdge===i?"active":""),onClick:function(){t.addEdge(i)},href:"#"},g.a.createElement("img",{style:{width:"30px"},className:"pull-left",src:a[i]})," ",e))}))))),g.a.createElement(I.Panel,{className:"pnl edgePanel"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},g.a.createElement("button",{className:"chatButton",onClick:function(){return t.openChat()},onSubmit:function(){return 3}},this.showChat?"Chat <<":"Chat >>")),g.a.createElement("div",{id:"chat-box",className:"chatBoxBorder"},g.a.createElement(za,{messages:this.props.messages,addMessage:this.props.addMessage,showChat:this.showChat,username:this.props.username,openChat:this.openChat,userId:this.props.userId})))):g.a.createElement("div",{id:"pathway-sidebar",className:"sideBarWrapper"},g.a.createElement(I.Panel,{className:"pnl"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Network"),g.a.createElement(I.Panel.Body,{className:"pnl-body pathwayPanel"},g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.handleOpen(Ma.PW_DETAILS)}},"Properties")),g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.upload()}},"Import")),g.a.createElement("div",{className:"buttonContainer"},g.a.createElement(I.Button,{onClick:function(){t.props.pathwayActions.export(!1)}},"Export")))),g.a.createElement(I.Panel,{className:"pnl"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Node Palette"),g.a.createElement(I.Panel.Body,{className:"pnl-body"},i.map((function(t){return g.a.createElement("div",{key:t,id:t,"data-tip":"Click on this and drag to the location on drawing canvas and release!","data-effect":"solid","data-place":"bottom","data-delay-show":"1000",className:"dragButtonContainer"})})))),g.a.createElement(I.Panel,{className:"pnl edgePanel"},g.a.createElement(I.Panel.Heading,{className:"pnl-header"},"Interaction Palette"),g.a.createElement(I.Panel.Body,{className:"pnl-body edgePaletteWrapper"},g.a.createElement("div",{className:"list-group edge-palette"},e.map((function(e,i){return g.a.createElement("div",{key:i,"data-tip":"Click to activate; then, start the interaction from the little circle on the source node!","data-effect":"solid","data-place":"bottom","data-delay-show":"1000"},g.a.createElement("a",{style:{marginBottom:"5px"},className:"list-group-item "+(t.activeEdge===i?"active":""),onClick:function(){t.addEdge(i)},href:"#"},g.a.createElement("img",{style:{width:"30px"},className:"pull-left",src:a[i]})," ",e))}))))))}}),Ya([r.observable],e.prototype,"activeEdge",void 0),Ya([r.observable],e.prototype,"showChat",void 0),Ya([r.action.bound],e.prototype,"setActiveEdge",null),Ya([r.action.bound],e.prototype,"openChat",null),e=Ya([l.observer],e)}(g.a.Component),xa=function(){var t=function(e,a){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a])})(e,a)};return function(e,a){function i(){this.constructor=e}t(e,a),e.prototype=null===a?Object.create(a):(i.prototype=a.prototype,new i)}}(),Qa=function(t,e,a,i){var o,n=arguments.length,r=n<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,a,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(n<3?o(r):n>3?o(e,a,r):o(e,a))||r);return n>3&&r&&Object.defineProperty(e,a,r),r},Ba=a(80),ka=Ba();!function(t){t[t.STUDY=0]="STUDY",t[t.CONFIRMATION=1]="CONFIRMATION",t[t.PROFILES=2]="PROFILES",t[t.ABOUT=3]="ABOUT",t[t.PW_DETAILS=4]="PW_DETAILS",t[t.GRID=5]="GRID",t[t.HELP=6]="HELP",t[t.LAYOUT=7]="LAYOUT",t[t.CHELP=8]="CHELP",t[t.PROFILES_COLOR_SCHEME=9]="PROFILES_COLOR_SCHEME"}(Ma||(Ma={})),function(t){t[t.Count=0]="Count",t[t.Percentage=1]="Percentage",t[t.CountWithAlteration=2]="CountWithAlteration",t[t.PercentageWithAlteration=3]="PercentageWithAlteration"}(Aa||(Aa={}));var Wa=function(t){function e(e){var i=t.call(this,e)||this;return Object.defineProperty(i,"MAX_ALLOWED_PROFILES_ENABLED",{enumerable:!0,configurable:!0,writable:!0,value:6}),Object.defineProperty(i,"selectedPathway",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"fileManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"editor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"pathwayActions",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"isModalShown",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"colorValueMap",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"portalAccessor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"alterationData",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"patientData",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(i,"groupComparisonData",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(i,"pathwayGeneMap",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(i,"bestPathwaysAlgos",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(i,"userId",{enumerable:!0,configurable:!0,writable:!0,value:-1}),Object.defineProperty(i,"oldName",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(i,"profiles",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(i,"chatMessages",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(i,"chatMessagesCount",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"genes",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(i,"renderTimes",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(i,"currentRankingScheme",{enumerable:!0,configurable:!0,writable:!0,value:void 0!==i.props.rankingChoices?2*i.props.rankingChoices.isAlterationEnabled+i.props.rankingChoices.isPercentageMatch:0}),Object.defineProperty(i,"setActiveEdge",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"viewOperationsManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(i,"gridOptionsManager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object(r.makeObservable)(i),i.genes=i.props.genes,i.fileManager=new A,i.pathwayActions=new kt(i.pathwayHandler,i.profiles,i.fileManager,i.handleOpen,i.props.isCBioPortal,i.props.isCollaborative),i.selectedPathway="",i.props.pathwayName&&i.pathwayActions.changePathway(i.props.pathwayName),i.isModalShown=[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1],i.alterationData={},i.extractAllGenes(),i.colorValueMap={"-100":"#0000ff",0:"#ffffff",100:"#ff0000"},i.chatMessagesCount=0,i.userId=i.props.userId,i.props.isCBioPortal&&(i.props.cBioAlterationData&&(!0===i.props.patientView?(i.calculatePatientData(i.props.cBioAlterationData),i.addSampleIconData(i.props.sampleIconData)):!0===i.props.groupComparisonView?i.calculateGroupComparisonData():i.calculateAlterationData(i.props.cBioAlterationData)),i.props.addGenomicDataHandler&&i.props.addGenomicDataHandler(i.addGenomicData),i.profiles.push({profileId:a.CBIO_PROFILE_NAME,enabled:!0}),i.getBestPathway(Aa.Count),i.getBestPathway(Aa.Percentage),i.getBestPathway(Aa.CountWithAlteration),i.getBestPathway(Aa.PercentageWithAlteration)),i}var a;return xa(e,t),a=e,Object.defineProperty(e.prototype,"setColorMapping",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.colorValueMap=t,this.editor.updateGenomicDataColorScheme(this.colorValueMap)}}),Object.defineProperty(e.prototype,"setSelectedPathway",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.selectedPathway=t}}),Object.defineProperty(e.prototype,"setEditor",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.editor=t}}),Object.defineProperty(e.prototype,"addProfile",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.profiles.push(t)}}),Object.defineProperty(e.prototype,"toggleProfileEnabled",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.profiles[t].enabled=!this.profiles[t].enabled}}),Object.defineProperty(e.prototype,"calculateAlterationData",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this;this.alterationData[a.CBIO_PROFILE_NAME]={},t.forEach((function(t){var i=t.altered/t.sequenced*100;e.alterationData[a.CBIO_PROFILE_NAME][t.gene]=Object.is(i,NaN)?-101:i}))}}),Object.defineProperty(e.prototype,"calculateGroupComparisonData",{enumerable:!1,configurable:!0,writable:!0,value:function(){var t=this;this.alterationData[a.CBIO_PROFILE_NAME]={},this.props.genomicData.forEach((function(e){t.groupComparisonData[e.hugoGeneSymbol]={},t.props.activeGroups.forEach((function(a){t.groupComparisonData[e.hugoGeneSymbol][a.nameWithOrdinal]=e.groupsSet[a.nameWithOrdinal].alteredPercentage}))}))}}),Object.defineProperty(e.prototype,"calculatePatientData",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this;this.alterationData[a.CBIO_PROFILE_NAME]={};var i=t.map((function(t){return t.gene})).filter((function(t,e,a){return a.indexOf(t)==e}));this.patientData.PatientView=1,i.forEach((function(t){e.patientData[t]={}})),t.forEach((function(t){var i=t.altered/t.sequenced*100;e.alterationData[a.CBIO_PROFILE_NAME][t.gene]=Object.is(i,NaN)?-101:i,e.patientData[t.gene][t.percentAltered]=Object.is(i,NaN)?-101:i,e.patientData[t.gene].geneticTrackData=t.geneticTrackData,e.patientData[t.gene].geneticTrackRuleSetParams=t.geneticTrackRuleSetParams}))}}),Object.defineProperty(e.prototype,"simplifyDate",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e=0,a="",i=0;i=0;i--)e+=a*this.convertCharacter(t.charAt(i)),a*=10;return e}}),Object.defineProperty(e.prototype,"addChatMessage",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.editor.addNewMessage(t,this.chatMessagesCount),this.editor.incrementMessageCount()}}),Object.defineProperty(e.prototype,"updatePathwayTitleCallback",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.pathwayActions.changePathwayTitle(t)}}),Object.defineProperty(e.prototype,"addSampleIconData",{enumerable:!1,configurable:!0,writable:!0,value:function(t){t&&(this.patientData.sampleColors=t.sampleColors,this.patientData.sampleIndex=t.sampleIndex)}}),Object.defineProperty(e.prototype,"getGeneStudyMap",{enumerable:!1,configurable:!0,writable:!0,value:function(t){for(var e={},a=0,i=Object.keys(t);a0;){var g=ka.extractMax();c=g.getValue().pathwayName;n.push({score:g.getKey(),genesMatched:o[c],pathwayName:c})}return n}}),Object.defineProperty(e.prototype,"getBestPathway",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this.getBestPathways(t);this.bestPathwaysAlgos.length===this.currentRankingScheme&&void 0!==this.props.currentPathway&&""===this.props.currentPathway?this.setSelectedPathway(e[0].pathwayName):this.bestPathwaysAlgos.length===this.currentRankingScheme&&void 0!==this.props.currentPathway&&this.props.currentPathway.length>0?this.setSelectedPathway(this.props.currentPathway):this.bestPathwaysAlgos.length===this.currentRankingScheme&&this.setSelectedPathway(e[0].pathwayName),this.bestPathwaysAlgos.push(e)}}),Object.defineProperty(e.prototype,"getBestPathwayReRank",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this.getBestPathways(t);this.bestPathwaysAlgos.push(e)}}),Object.defineProperty(e.prototype,"includePathway",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){for(var a={},i=0,o=t.nodes;i1&&!0===this.props.groupComparisonView&&this.props.genes!==this.genes&&this.rankPathways(),this.renderTimes++;var a=g.a.createElement(Na,{profiles:this.profiles,isCbioPortal:this.props.isCBioPortal,isCollaborative:this.props.isCollaborative,setActiveEdge:this.setActiveEdge,editorHandler:this.editorHandler,selectedPathway:this.selectedPathway,pathwayHandler:this.pathwayHandler,handleOpen:this.handleOpen,onPathwayChangeCompleted:this.emphasizeQueryGenes,genomicDataOverlayColorScheme:this.colorValueMap,colorSchemeChangeCallback:this.colorSchemeChangeCallback,incrementChatMessageCountCallback:this.incrementChatMessageCountCallback,newMessageCallback:this.newMessageCallback,updatePathwayTitleCallback:this.updatePathwayTitleCallback});return g.a.createElement("div",{className:"pathwayMapper"},g.a.createElement("div",{style:e?{width:.99*window.innerWidth}:{},className:e?"cBioMode container":"customMargins"},!e&&g.a.createElement(g.a.Fragment,null,g.a.createElement("div",null,g.a.createElement(ba,{pathwayActions:this.pathwayActions,handleOpen:this.handleOpen,setActiveEdge:this.setActiveEdge})),g.a.createElement("div",null,g.a.createElement(Pe,{pathwayActions:this.pathwayActions,handleOpen:this.handleOpen}))),e&&g.a.createElement(I.Row,{style:{marginBottom:"6px"}},g.a.createElement(I.Col,{xs:2,style:{paddingRight:"0px",marginBottom:"5px"}},g.a.createElement(Qt,{pathwayActions:this.pathwayActions,selectedPathway:this.selectedPathway,alterationData:this.alterationData,genes:this.props.genes,handleOpen:this.handleOpen,validGenes:this.props.validGenes,showMessage:this.props.showMessage,pathwayGenes:Object.keys(this.pathwayGeneMap[this.selectedPathway]),onAddGenes:this.props.onAddGenes,patientView:this.props.patientView})),this.props.messageBanner?g.a.createElement(I.Col,{xs:4,style:{maxHeight:"32px",paddingRight:"0px"}},this.props.messageBanner()):g.a.createElement(I.Col,{xs:4,style:{maxHeight:"32px",paddingRight:"0px"}}),g.a.createElement(I.Col,{xs:3,style:{paddingLeft:"0px",marginTop:"12px",textAlign:"right",paddingRight:"25px"}},this.selectedPathway)),g.a.createElement("div",{className:e?"row":"mainContentWrapper"},!e&&g.a.createElement("div",null,g.a.createElement(Ra,{pathwayActions:this.pathwayActions,setActiveEdgeHandler:this.setActiveEdgeHandler,handleOpen:this.handleOpen,messages:this.chatMessages,addMessage:this.addMessage,username:this.props.userName,userId:this.userId,isCollaborative:this.props.isCollaborative})),e?g.a.createElement(I.Col,{xs:9},a,g.a.createElement("div",{style:{paddingRight:"9px",textAlign:"right",fontSize:"13px"}},"Powered by ",g.a.createElement("a",{href:"https://github.com/iVis-at-Bilkent/pathway-mapper",target:"_blank"},"PathwayMapper"))):a,e&&g.a.createElement(I.Col,{xs:3,style:{paddingLeft:"0px"}},g.a.createElement(St,{pathwayActions:this.pathwayActions,bestPathwaysAlgos:this.bestPathwaysAlgos,tableComponent:this.props.tableComponent,patientView:this.props.patientView,currentPathway:this.props.currentPathway,rankingChoices:this.props.rankingChoices,updateRankingChoices:this.props.updateRankingChoices}))),g.a.createElement("div",{id:"invisibles"},g.a.createElement("div",{id:"pm-modals"},g.a.createElement(mt,{profiles:this.profiles,editor:this.editor,show:this.isModalShown[Ma.PROFILES],handleClose:this.handleClose,handleProfileLabelClicked:this.toggleProfileEnabled,enabledProfileCountLimit:this.MAX_ALLOWED_PROFILES_ENABLED}),g.a.createElement(Nt,{show:this.isModalShown[Ma.PW_DETAILS],handleClose:this.handleClose,pathwayActions:this.pathwayActions}),g.a.createElement(K,{show:this.isModalShown[Ma.GRID],handleClose:this.handleClose,pathwayActions:this.pathwayActions}),g.a.createElement(wt,{show:this.isModalShown[Ma.HELP],handleClose:this.handleClose}),g.a.createElement(dt,{show:this.isModalShown[Ma.LAYOUT],handleClose:this.handleClose,pathwayActions:this.pathwayActions}),g.a.createElement(H,{show:this.isModalShown[Ma.CONFIRMATION],handleClose:this.handleClose}),g.a.createElement(k,{show:this.isModalShown[Ma.CHELP],handleClose:this.handleClose,patientView:this.props.patientView}),g.a.createElement(E,{show:this.isModalShown[Ma.ABOUT],handleClose:this.handleClose}),g.a.createElement(yt,{show:this.isModalShown[Ma.PROFILES_COLOR_SCHEME],handleClose:this.handleClose,colorValueMapping:this.colorValueMap,handleColorMappingChange:this.setColorMapping})),!this.props.isCBioPortal&&g.a.createElement(g.a.Fragment,null,g.a.createElement(Lt,{show:this.isModalShown[Ma.STUDY],loadFromCBio:this.loadFromCBio,handleClose:this.handleClose}),g.a.createElement(s.ToastContainer,{position:"bottom-left",autoClose:5e3,hideProgressBar:!1,newestOnTop:!1,closeOnClick:!0,rtl:!1,pauseOnFocusLoss:!0,draggable:!0,pauseOnHover:!0})),g.a.createElement(u.a,{clickable:!0,className:e?"":"pmTip",style:{maxWidth:"350px",zIndex:9999999}}),g.a.createElement("input",{id:"myInput",type:"file",ref:function(e){t.pathwayActions.setUploaders(e,!1)},style:{display:"none"},onChange:function(e){t.pathwayActions.onChangeFile(e,!1)}}),g.a.createElement("input",{id:"myInput2",type:"file",ref:function(e){t.pathwayActions.setUploaders(e,!0)},style:{display:"none"},onChange:function(e){t.pathwayActions.onChangeFile(e,!0)}}),g.a.createElement("input",{id:"myInput3",type:"file",ref:function(e){t.pathwayActions.setOverlayUploader(e)},style:{display:"none"},onChange:function(e){t.pathwayActions.overlayFromText(e.target.files[0])}}))))}}),Object.defineProperty(e.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.props.isCBioPortal?this.pathwayActions.emphasizeQueryGenes(this.props.genes.map((function(t){return t.hugoGeneSymbol}))):($(".container").css("width","auto"),$(".container").css("paddingLeft",0),$(".container").css("marginLeft",5))}}),Object.defineProperty(e.prototype,"componentDidUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.props.isCBioPortal&&this.pathwayActions.emphasizeQueryGenes(this.props.genes.map((function(t){return t.hugoGeneSymbol})))}}),Object.defineProperty(e.prototype,"handleOpen",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.isModalShown[t]=!0}}),Object.defineProperty(e.prototype,"handleClose",{enumerable:!1,configurable:!0,writable:!0,value:function(t){this.isModalShown[t]=!1}}),Object.defineProperty(e.prototype,"editorHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e,a){this.setEditor(t),this.gridOptionsManager=new h(this.editor.cy),this.viewOperationsManager=new D(this.editor,this.editor.cy),this.pathwayActions.editorHandler(t,e,a,this.viewOperationsManager,this.gridOptionsManager),this.props.isCBioPortal?this.props.patientView?this.editor.addGenomicData(this.patientData,!0,this.editor.getEmptyGroupID()):!0===this.props.groupComparisonView?this.editor.addGenomicData(this.groupComparisonData,!0,this.editor.getEmptyGroupID(),this.props.activeGroups):this.editor.addGenomicData(this.alterationData,!0,this.editor.getEmptyGroupID()):(this.portalAccessor=new jt,this.loadRedirectedPortalData())}}),Object.defineProperty(e.prototype,"pathwayHandler",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=this;this.setSelectedPathway(t),this.pathwayGeneMap[t]&&this.props.changePathwayHandler&&this.props.changePathwayHandler(Object.keys(this.pathwayGeneMap[t]).filter((function(t){return!e.alterationData[a.CBIO_PROFILE_NAME].hasOwnProperty(t)})))}}),Object.defineProperty(e,"CBIO_PROFILE_NAME",{enumerable:!0,configurable:!0,writable:!0,value:"cBioPortal_data"}),Qa([r.observable],e.prototype,"selectedPathway",void 0),Qa([r.observable],e.prototype,"editor",void 0),Qa([r.observable],e.prototype,"isModalShown",void 0),Qa([r.observable],e.prototype,"colorValueMap",void 0),Qa([r.observable],e.prototype,"alterationData",void 0),Qa([r.observable],e.prototype,"patientData",void 0),Qa([r.observable],e.prototype,"groupComparisonData",void 0),Qa([r.observable],e.prototype,"pathwayGeneMap",void 0),Qa([r.observable],e.prototype,"bestPathwaysAlgos",void 0),Qa([r.observable],e.prototype,"userId",void 0),Qa([r.observable],e.prototype,"oldName",void 0),Qa([r.observable],e.prototype,"profiles",void 0),Qa([r.observable],e.prototype,"chatMessages",void 0),Qa([r.observable],e.prototype,"chatMessagesCount",void 0),Qa([r.action.bound],e.prototype,"setColorMapping",null),Qa([r.action],e.prototype,"setSelectedPathway",null),Qa([r.action],e.prototype,"setEditor",null),Qa([r.action],e.prototype,"addProfile",null),Qa([r.action],e.prototype,"toggleProfileEnabled",null),Qa([r.action.bound],e.prototype,"addMessage",null),Qa([r.action.bound],e.prototype,"addChatMessage",null),Qa([n.a],e.prototype,"includePathway",null),Qa([n.a],e.prototype,"getCountOfEnabledProfiles",null),Qa([n.a],e.prototype,"loadFromCBio",null),Qa([n.a],e.prototype,"setActiveEdgeHandler",null),Qa([n.a],e.prototype,"colorSchemeChangeCallback",null),Qa([n.a],e.prototype,"incrementChatMessageCountCallback",null),Qa([n.a],e.prototype,"newMessageCallback",null),Qa([n.a],e.prototype,"addGenomicData",null),Qa([n.a],e.prototype,"emphasizeQueryGenes",null),Qa([r.action.bound],e.prototype,"handleOpen",null),Qa([r.action.bound],e.prototype,"handleClose",null),Qa([n.a],e.prototype,"editorHandler",null),Qa([n.a],e.prototype,"pathwayHandler",null),e=a=Qa([l.observer],e)}(g.a.Component);e.default=Wa}]); //# sourceMappingURL=index.es5.js.map \ No newline at end of file diff --git a/packages/pathway-mapper/dist/index.es5.js.map b/packages/pathway-mapper/dist/index.es5.js.map index 994e3d51..16c0a1fd 100644 --- a/packages/pathway-mapper/dist/index.es5.js.map +++ b/packages/pathway-mapper/dist/index.es5.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://pathway-mapper/webpack/bootstrap","webpack://pathway-mapper/external \"react\"","webpack://pathway-mapper/external \"react-bootstrap\"","webpack://pathway-mapper/external \"mobx\"","webpack://pathway-mapper/external \"autobind-decorator\"","webpack://pathway-mapper/external \"jquery\"","webpack://pathway-mapper/external \"mobx-react\"","webpack://pathway-mapper/external \"lodash\"","webpack://pathway-mapper/external \"cytoscape\"","webpack://pathway-mapper/./src/images/toolbar/layout-cose.svg","webpack://pathway-mapper/external \"react-toastify\"","webpack://pathway-mapper/external \"oncoprintjs\"","webpack://pathway-mapper/./src/images/toolbar/save_png.svg","webpack://pathway-mapper/./src/images/toolbar/save_svg.svg","webpack://pathway-mapper/external \"tippy.js\"","webpack://pathway-mapper/external \"file-saver\"","webpack://pathway-mapper/./src/images/toolbar/edit.svg","webpack://pathway-mapper/./src/images/toolbar/about.svg","webpack://pathway-mapper/./src/images/toolbar/add-selected.svg","webpack://pathway-mapper/./src/images/toolbar/add-all.svg","webpack://pathway-mapper/external \"tippy.js/dist/tippy.css\"","webpack://pathway-mapper/external \"react-tooltip\"","webpack://pathway-mapper/./src/images/toolbar/align/align-horizontal-bottom.svg","webpack://pathway-mapper/./src/images/toolbar/align/align-horizontal-middle.svg","webpack://pathway-mapper/./src/images/toolbar/align/align-horizontal-top.svg","webpack://pathway-mapper/./src/images/toolbar/align/align-vertical-center.svg","webpack://pathway-mapper/./src/images/toolbar/align/align-vertical-left.svg","webpack://pathway-mapper/./src/images/toolbar/align/align-vertical-right.svg","webpack://pathway-mapper/./src/images/toolbar/delete-simple.svg","webpack://pathway-mapper/./src/images/toolbar/grid.svg","webpack://pathway-mapper/./src/images/toolbar/guidelines.svg","webpack://pathway-mapper/./src/images/toolbar/hide-selected.svg","webpack://pathway-mapper/./src/images/toolbar/layout-properties.svg","webpack://pathway-mapper/./src/images/toolbar/load.svg","webpack://pathway-mapper/./src/images/toolbar/new.svg","webpack://pathway-mapper/./src/images/toolbar/portal.svg","webpack://pathway-mapper/./src/images/toolbar/quick-help.svg","webpack://pathway-mapper/./src/images/toolbar/redo.svg","webpack://pathway-mapper/./src/images/toolbar/save.svg","webpack://pathway-mapper/./src/images/toolbar/settings.svg","webpack://pathway-mapper/./src/images/toolbar/show-all.svg","webpack://pathway-mapper/./src/images/toolbar/undo.svg","webpack://pathway-mapper/./src/images/nodes/compartment.svg","webpack://pathway-mapper/./src/images/nodes/complex.svg","webpack://pathway-mapper/./src/images/nodes/family.svg","webpack://pathway-mapper/./src/images/nodes/gene.svg","webpack://pathway-mapper/./src/images/nodes/process.svg","webpack://pathway-mapper/./src/images/resizeCue.svg","webpack://pathway-mapper/./src/images/edges/activates.svg","webpack://pathway-mapper/./src/images/edges/binds.svg","webpack://pathway-mapper/./src/images/edges/induces.svg","webpack://pathway-mapper/./src/images/edges/inhibits.svg","webpack://pathway-mapper/./src/images/edges/represses.svg","webpack://pathway-mapper/external \"react-toastify/dist/ReactToastify.min.css\"","webpack://pathway-mapper/./src/images/about/i-vis.png","webpack://pathway-mapper/./src/images/about/mskcc.png","webpack://pathway-mapper/./src/images/add.svg","webpack://pathway-mapper/./src/images/delete-simple.svg","webpack://pathway-mapper/external \"sharedb/lib/client\"","webpack://pathway-mapper/external \"jquery-ui-dist/jquery-ui\"","webpack://pathway-mapper/external \"cytoscape-edgehandles\"","webpack://pathway-mapper/external \"cytoscape-edge-editing\"","webpack://pathway-mapper/external \"cytoscape-fcose\"","webpack://pathway-mapper/external \"cytoscape-node-editing\"","webpack://pathway-mapper/external \"cytoscape-undo-redo\"","webpack://pathway-mapper/external \"cytoscape-panzoom\"","webpack://pathway-mapper/./src/utils/GraphStyleSheet.tsx","webpack://pathway-mapper/./src/utils/PanzoomOptions.tsx","webpack://pathway-mapper/external \"cytoscape-navigator\"","webpack://pathway-mapper/external \"cytoscape-context-menus\"","webpack://pathway-mapper/external \"konva\"","webpack://pathway-mapper/external \"cytoscape-view-utilities\"","webpack://pathway-mapper/external \"cytoscape-grid-guide\"","webpack://pathway-mapper/external \"cytoscape-popper\"","webpack://pathway-mapper/external \"cytoscape-layout-utilities\"","webpack://pathway-mapper/./src/images/send.svg","webpack://pathway-mapper/external \"@datastructures-js/max-heap\"","webpack://pathway-mapper/./src/utils/SaveLoadUtility.tsx","webpack://pathway-mapper/./src/managers/FileOperationsManager.tsx","webpack://pathway-mapper/./src/managers/GridOptionsManager.tsx","webpack://pathway-mapper/./src/managers/ViewOperationsManager.tsx","webpack://pathway-mapper/./src/modals/AboutModal.tsx","webpack://pathway-mapper/./src/modals/CBioHelpModal.tsx","webpack://pathway-mapper/./src/modals/GridSettings.tsx","webpack://pathway-mapper/./src/modals/ConfirmationModal.tsx","webpack://pathway-mapper/./src/utils/GraphUtilities.tsx","webpack://pathway-mapper/./src/utils/SVGExporter.ts","webpack://pathway-mapper/./src/managers/GenomicDataOverlayManager.ts","webpack://pathway-mapper/./src/managers/ShareDBManager.tsx","webpack://pathway-mapper/./src/managers/EditorActionsManager.tsx","webpack://pathway-mapper/./src/modals/LayoutProperties.tsx","webpack://pathway-mapper/./src/modals/PathwayDetailsModal.tsx","webpack://pathway-mapper/./src/modals/ProfilesColorSchemeModal.tsx","webpack://pathway-mapper/./src/modals/ProfilesModal.tsx","webpack://pathway-mapper/./src/modals/QuickHelpModal.tsx","webpack://pathway-mapper/./src/utils/CBioPortalAccessor.tsx","webpack://pathway-mapper/./src/modals/StudyModal.tsx","webpack://pathway-mapper/./src/ui/Ranking.tsx","webpack://pathway-mapper/./src/ui/Toolbar.tsx","webpack://pathway-mapper/./src/utils/PathwayActions.ts","webpack://pathway-mapper/./src/ui/Buttonbar.tsx","webpack://pathway-mapper/./src/managers/ContextMenuManager.tsx","webpack://pathway-mapper/./src/managers/QtipManager.tsx","webpack://pathway-mapper/./src/utils/DragDropNodeAddPlugin.tsx","webpack://pathway-mapper/./src/ui/CytoscapeArea.tsx","webpack://pathway-mapper/./src/ui/Menubar.tsx","webpack://pathway-mapper/./src/ui/react-pathway-mapper.tsx","webpack://pathway-mapper/./src/ui/ChatMessage.tsx","webpack://pathway-mapper/./src/ui/ChatBox.tsx","webpack://pathway-mapper/./src/ui/Sidebar.tsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","styleSheet","nodeBackgroundOpacityFunction","compoundPaddingFunction","borderWidthFunction","parentBorderWidthFunction","highlightedBorderWidthFunction","selectedBorderWidthFunction","selectedHighlightedBorderWidthFunction","parentNodeShapeFunc","nodeBackgroundColorFunction","nodeBorderColorFunction","edgeColorHandler","edgeTargetArrowTypeHandler","edgeLineTypeHandler","selector","style","ele","data","edge","label","css","_private","panzoomOptions","zoomFactor","zoomDelay","minZoom","maxZoom","fitPadding","panSpeed","panDistance","panDragAreaSize","panMinPercentSpeed","panInactiveArea","panIndicatorMinOpacity","zoomOnly","fitSelector","undefined","animateOnFit","fitAnimationDuration","sliderHandleIcon","zoomInIcon","zoomOutIcon","resetIcon","pathwayDetails","cy","edgeEditing","returnString","pathwayTitle","nodes","edges","length","this","exportNode","edgeID","edgeType","source","target","pubmedIDs","pubmedString","edgeName","edgeCurveStyle","numberOfAnchorPoints","anchors","getAnchorsAsArray","anchorPointPositions","j","nodeMap","id","node","nodeName","nodeID","pos","position","nodeType","nodeW","nodeH","parseInt","x","y","graph","isArray","lines","split","edgesStartIndex","title","description","graphDataIndex","isFound","includes","lineData","parentID","posX","posY","newNode","group","type","w","h","parent","push","edgeSource","edgeTarget","anchorPoints","anchorPair","separatorIndex","indexOf","substring","parseFloat","edgeData","newEdge","pathwayInfo","other","b64Data","contentType","sliceSize","byteCharacters","atob","byteArrays","offset","slice","byteNumbers","Array","charCodeAt","byteArray","Uint8Array","Blob","graphData","jpeg","b64data","substr","imageData","b64toBlob","blob","fileName","editor","exportSVG","png","isSIFNX","pathwayData","exportAsSIFNX","exportGraph","currentProperties","changeParameters","GridOptionsManager","defaultGridGuideOptions","params","clone","refreshGridOptionsExtension","state","geometricGuideline","snapToAlignmentLocationDuringDrag","distributionGuidelines","drawGrid","snapToGridDuringDrag","gridGuide","snapToGridOnRelease","snapToAlignmentLocationOnRelease","initPosAlignment","centerToEdgeAlignment","resize","parentPadding","gridSpacing","zoomDash","panGrid","gridStackOrder","gridColor","lineWidth","guidelinesStackOrder","guidelinesTolerance","guidelinesStyle","strokeStyle","geometricGuidelineRange","range","minDistRange","distGuidelineOffset","horizontalDistColor","verticalDistColor","initPosAlignmentColor","lineDash","horizontalDistLine","verticalDistLine","initPosAlignmentLine","parentSpacing","movedNodes","param","tmpNodes","selectedNodeStack","collection","add","forEach","isParent","firstSelected","firstBbox","boundingBox","firstOuterHeight","outerHeight","self","index","newPosition","calculateNewPosition","changePosition","handleChangePositionByAlignment","referenceBbox","referenceOuterHeight","currentPos","currentBbox","moveParam","height","labelHeight","x1","x2","y1","y2","console","log","dx","dy","newPos","childNodes","children","parentBbox","childNode","childBbox","_dx","_dy","nextPosition","oldPosition","props","show","onHide","handleClose","EModalType","ABOUT","Header","closeButton","Title","Body","className","src","alt","Footer","href","Component","addSelImage","addAllImage","hexToRGBA","str","EGridType","defaultShape","fill","width","stroke","labels","shapeBank","svgNameSpace","svgElement","document","createElementNS","shape","offsetX","textOffsetX","cellWidth","offsetY","Math","floor","textOffsetY","g","appendChild","text","setAttributeNS","toString","textNode","createTextNode","setAttribute","paddingTop","bsSize","CHELP","patientView","cellPadding","paddingLeft","dangerouslySetInnerHTML","__html","generateOncoprintLegend","outerHTML","CONFIRMATION","onClick","ConfirmationModal","pendingFunction","gridSize","defaultSettings","guideColor","newType","enabledType","NONE","dialogClassName","onShow","pathwayActions","GRID","sm","checked","onChange","setEnabledType","GUIDE","e","marginTop","adjustGridSettings","toggleGrid","toggleGuide","GridSettings","tree","mappedArr","len","arrElem","mappedElem","SVGNameSpace","EDGE_ARROW_SCALE","svg","resetSVG","cyBounds","extent","nodeTree","createGraphHierarchy","traverseFunction","genomicDataSVG","getGenomicDataSVG","oncoprintDataSVG","getOncoprintDataSVG","createRect","labelOffset","GENOMICDATA_LABEL_Y_OFFSET","createNodeLabel","elemSVG","nodePosition","svgX","getAttribute","svgY","rootLevelNode","drawEdge","sourceEndpoint","targetEndpoint","targetArrowShape","lineStyle","curveStyle","segmentPoints","controlPoints","labelElement","createEdgeLabel","lastAnchor","edgeEndpoint","unitV","unitVector","inverseUnitV","scale","targetX","targetY","TRIANGLE_ARROW_HEAD_HEIGHT","point1Vector","rotateVector","PI","point2Vector","TRIANGLE_ARROW_HEAD_WIDTH","point1X","point1Y","point2X","point2Y","polySVG","T_ARROW_HEAD_HEIGHT","lineSVG","T_ARROW_HEAD_WIDTH","EDGE_WIDTH","DASH_PARAMETERS","pathSVG","pathPoints","furtherEndPoint","join","polylineSVG","polylinePoints","nodeRectangle","COMPOUND_MARGIN","createStyleForNodes","genomicDataOffset","verticalTextOffset","svgText","NODE_FONT_SIZE","innerHTML","strokeWidth","NODE_STROKE_WIDTH","strokeColor","NODE_STROKE_COLOR","fillColor","NODE_FILL_COLOR","opacity","NODE_OPACITY","strokeOpacity","ROUNDING_FACTOR","COMPARTMENT_STROKE_WIDTH","FAMILY_FILL_COLOR","FAMILY_STROKE_COLOR","styleString","labelText","svgTextElement","fontSize","fontFamily","labelRotationAngle","getEdgeLabelRotationAngle","lineHeight","rscratch","labelLineHeight","sin","labelAngle","cos","labelPos","labelX","labelY","toDegrees","radians","v","inverseLength","sqrt","scalar","genomicDataRectangleGenerator","percent","parentSVG","colorScheme","groupColor","temp","limits","pairs","entries","map","hex","result","color","Number","exec","b","sort","o1","o2","lower","Infinity","upper","findValueColorInterval","upperValue","lowerValue","upperColor","lowerColor","up","low","ratio","getMappedColor","colorString","round","overlayRect","textPercent","toFixed","xOffset","sharedb","socket","connection","genomicDataMap","visibleGenomicDataMapByType","groupedGenomicDataMap","groupedGenomicDataCount","genomicData","cancerTypes","metaLineColumns","DEFAULT_VISIBLE_GENOMIC_DATA_COUNT","lineContent","geneSymbol","visibilityMap","_key","isVisible","getRequiredWidthForGenomicData","update","patientData","observers","oldCount","groupID","parseGenomicData","showGenomicData","notifyObservers","geneMap","visMap","cancerKey","groupsToBeRendered","groupComparisonData","keys","cancerStudy","cancerData","showPatientData","showGroupComparisonData","genomicDataBoxCount","cancerType","countVisibleGenomicDataByType","nodeLabel","eleBBox","reqWidth","overlayRecBoxW","overLayRectBBox","overlayRecBoxH","genomicFrequencyData","maxGenomicDataBoxCount","genomicBoxCounter","percentageInGroup","colorValueMap","resizeNodeCallback","hideGenomicData","encodeURIComponent","generateSVGForNode","wrapper","counter","sampleWrapper2","append","generateSVGForGroupComparisonNode","on","event","cyTarget","ref","popperRef","dummyDomEle","createElement","body","tip","getReferenceClientRect","getBoundingClientRect","trigger","placement","interactive","theme","content","generateHTMLContentForComparisonNodeTooltip","onHidden","instance","destroy","remove","one","hide","observer","notify","geneData","count","altType","geneticTrackData","generateOncoprintForPatientNode","generateHTMLContentForNodeTooltip","selectedGene","oncoprintColors","Missense_Mutation","inframe","truncating","Fusion","AMP","gain","heatloss","homdel","DeepDel","in_frame_del","alterationBoxCount","getAlterationCountForPatient","genomicAlterationData","alterationType","getOncoprintColors","genomicDataRectangleGeneratorPatient","textLength","ruleset","geneticTrackRuleSetParams","universalShapes","getUniversalShapes","shapesPerDatum","getSpecificShapesForDatum","specificShapes","concat","shapes","alterationTypeKey","iconColor","iconText","sampleIconColorMap","sampleColors","sampleIndexMap","sampleIndex","sample","sampleId","sampleIconSvgHTML","generateSvgIconForSample","margin","sampleWrapper","sampleData","mutationInfo","cnaInfo","fusionInfo","gene","hugoGeneSymbol","disp_mut","proteinChange","mutationType","disp_cna","alteration","cnaLabelKey","cnaLabel","getCNADisplayString","disp_fusion","mutationInfoHTML","cnaInfoHTML","fusionInfoHTML","mutation","cna","fusion","sampleIdHTML","_","isCollaborative","shareDBManager","cyInst","isCBioPortal","undoRedoManager","portalAccessor","profiles","genomicDataOverlayColorScheme","colorSchemeChangeCallback","incrementChatMessageCountCallback","newMessageCallback","updatePathwayTitleCallback","isCbioPortal","edgeEditingOptions","bendPositionsFunction","controlPositionsFunction","undoable","anchorShapeSizeFactor","enabled","handleReconnectEdge","reconnectEdge","enableMultipleAnchorRemovalOption","FIT_CONSTANT","layoutProperties","EditorActionsManager","defaultLayoutProperties","genomicDataOverlayManager","svgExporter","action","doChangePosition","undoChangePosition","doChangeNodeSize","undoChangeNodeSize","doChangeCompoundSize","undoChangeCompoundSize","doChangename","undoChangeName","doHide","undoHide","doShow","undoShow","doHighlightInvalidGenes","undoHighlightInvalidGenes","doHighlight","undoHighlight","profile","scheme","viewUtilitiesRef","viewUtilities","movedNodeArr","changeElementsPositionByAlignment","do","newMovedNodes","currentNodePosition","doc","WORK_ID","message","messages","values","newMessage","username","userId","date","setTimeout","updateChatBoxHeight","getElementById","scrollTop","scrollHeight","CHAT_MESSAGES_COUNT","incrementMessageCount","chatMessage","chatMessageKey","addNewMessage","selectedNodes","changeNodePositionsShareDB","args","newWidth","newHeight","oldWidth","oldHeight","newMinWidth","newMinWidthBiasLeft","newMinWidthBiasRight","newMinHeight","newMinHeightBiasTop","newMinHeightBiasBottom","oldMinWidth","oldMinWidthBiasLeft","oldMinWidthBiasRight","oldMinHeight","oldMinHeightBiasTop","oldMinHeightBiasBottom","newName","changeName","changeNameCy","currentName","oldName","newArgs","sel","nodesToHide","each","ch","selected","visible","elements","unselect","changeVisibility","hid","invalidHighlightedGenesIDs","invalidGenesIDs","highlightedGenesIDs","highlightedEdgesIDs","hiddenGenesIDs","$","addClass","geneSymbols","getGeneSymbols","validateGenes","validGeneSymbols","invalidGenes","geneName","changeHighlightInvalidGenes","highlightedGenes","nodesToAddInvalidHighlight","hasClass","union","actions","geneIDs","nodesToRemoveInvalidHighlight","removeClass","elementsToHighlight","changeHighlight","neighbors","neighborhood","nodesToRemoveHighlight","isEdge","removeInvalidGeneHighlights","removeOtherHighlight","undoRedo","parentNodes","moveElements","newState","zoomLevel","zoom","panLevel","pan","updateGlobalOptions","getEmptyGroupID","cancerNames","groupGenomicData","addPubmedIDs","pubmedArray","validPubmedIDs","filter","isNaN","apply","uniq","removePubmedID","difference","anchorPointsArray","updateEdgeAnchorPoints","registerObserver","dataMap","addGenomicVisibilityData","updateGenomicDataVisibility","setGenomicDataOverlayColorScheme","updateGenomicDataOverlayColorScheme","updateColorScheme","op","globalOptions","li","newOptions","newLayoutProps","updateLayoutProperties","options","eles","nodeData","posData","addNewNodeToShareDB","addNodetoCy","addNode","nodeArr","updateCompoundBounds","isRemove","oi","od","cyEle","removeElementCy","addNewNodeLocally","realtimeNode","addNewNode","addNewEdgeShareDB","addNewEdgetoCy","addEdge","newEdges","addNewEdge","addNewEdgeLocally","realTimeNodeArray","realTimeEdgeArray","nodeList","realTimeNode","nodeWidth","nodeHeight","compoundMinWidth","minWidth","compoundMinWidthBiasLeft","minWidthBiasLeft","compoundMinWidthBiasRight","minWidthBiasRight","compoundMinHeight","minHeight","compoundMinHeightBiasTop","minHeightBiasTop","compoundMinHeightBiasBottom","minHeightBiasBottom","edgeList","tmpData","initAnchorPoints","sourceID","targetID","reconnectEdgeInShareDB","location","move","removeElementsFromShareDB","removeElementsCy","removeElement","newParentId","changeParentShareDB","parentData","parameters","parentElem","firstTime","posDiffX","posDiffY","elementById","classRef","nodeObj","nodeRef","connectedEdges","topMostNodes","tpMostNodes","parentMap","nodeParent","getTopLevelParents","rootNodeR","NodeObj","traverseNodes","rootNodeObj","lengthOfChildrenArray","changeParent","lockedNodes","removedEles","removeNodes","removedNode","moveElement","resizeCompound","previousWidth","previousHeight","resizeElement","mergeGraph","mergeGraphCy","fitGraph","nodesToBeAdded","edgesToBeAdded","sourceNode","targetNode","cySourceNode","edgesBtw","fit","loadfileShareDB","loadFileCy","addNodesCy","addEdgesCy","loadGraph","removeAllElements","isHighlighted","isHidden","eleID","isNode","updateVisibility","updateHighlight","isInvalidGene","deleteSelectedAnchor","clearGenomicData","clearAllGenomicData","parsedGenomicData","prepareGenomicDataShareDB","addGenomicData","study","addGenomicDataLocally","profileId","isEnabled","targetProfileIndex","setProfile","addProfile","activeGroups","preparePortalGenomicDataShareDB","addPortalGenomicData","newData","removeGenomicDataWithGeneSymbol","addGenomicDataWithGeneSymbol","addGenomicGroupData","addToProfiles","resizeElements","removeGenomicVisData","removeProfiles","addGenomicVisData","adjustVisibilityShareDB","incrementNumberOfUsers","NUMBER_OF_USERS","messageCount","setSizeOfElement","ur","nodeEditing","refreshGrapples","nodeRepulsion","idealEdgeLength","edgeElasticity","nestingFactor","gravity","numIter","tile","animate","randomize","gravityRangeCompound","gravityCompound","gravityRange","tilingPaddingVertical","tilingPaddingHorizontal","initialEnergyOnIncremental","animationDuration","animationEasing","nodeDimensionsIncludeLabels","bound","a","internalLayoutProperties","LayoutProperties","val","onEnter","LAYOUT","updateInternalLayoutProperty","setLayoutProperties","getPathwayInfo","textAlign","rows","setPathwayInfo","PW_DETAILS","PathwayDetailsModal","addButtonImg","deleteButtonImg","initColorMappings","prevProps","colorMappings","colorValueMapping","splice","showUniqueValuesWarningModal","mapping","pair","setShowUniqueValuesWarningModal","handleColorMappingChange","PROFILES_COLOR_SCHEME","mappingElements","padding","md","handleValueChange","handleColorChange","removeColorMapping","close","paddingRight","addDefaultColorMapping","setDefaultColorMapping","handleSaveColorScheme","ProfilesColorSchemeModal","showEnabledProfileWarningModal","enabledProfiles","enabledProfileCountLimit","profileEnabledMap","handleProfileLabelClicked","profileLabels","Fragment","enabledProfileCount","setShowEnabledProfileWarningModal","cursor","bsStyle","PROFILES","ProfilesModal","HELP","CBioPortalAccessor","MUTATION","GENE_EXPRESSION","CNA","callbackFunction","cancerStudies","request","XMLHttpRequest","onreadystatechange","readyState","DONE","status","responseText","error","open","GET_ALL_CANCER_STUDIES_URL","send","outData","cancerProfileName","isSupportedCancerProfile","GET_GENETIC_PROFILES_URL","endsWith","MRNA_EXP_STUDY_NAME","CNA_EXP_STUDY_NAME","MUTATION_EXP_STUDY_NAME","paramLines","geneticProfileId","startIndex","startsWith","numOfTumorSamples","geneticProfileType","getDataType","profileDataAlteration","CNA_GAIN","CNA_DELETION","Z_SCORE_UPPER_THRESHOLD","Z_SCORE_LOWER_THRESHOLD","calcAlterationPercentages","success","queryURL","GET_PROFILE_DATA_URL","caseSetId","isFirst","genes","nodeSymbols","JSON","parse","validGeneArray","highlightInvalidGenes","VALIDATE_GENES_URL","setRequestHeader","stringify","bottom","selectedStudyData","fetchStudy","ready","dataTypeFetchResultsReady","itemArray","query","searchQuery","dataType","properties","dataTypes","studyCount","studyListItemCheckboxChecked","selectedDataTypesPerStudy","studyIndex","selectedStudy","selectedStudies","showDataTypeSelectionModal","studyId","setDataTypeFetchResultsReady","getSupportedGeneticProfiles","disableAllDataTypes","setDataTypeProperties","selectedStudiesCount","checkedDatasCount","getDataTypes","fetchCancerStudies","studyTitle","studyData","numOfStudies","initStudyListItemCheckboxChecked","initSelectedDataTypesPerStudy","setItemArray","setSelectedStudyData","clearSelectedStudies","clearStudyCheckboxesChecked","clearSelectedDataTypesPerStudy","currentlySelectedItemIndex","STUDY","resetModal","placeholder","setSearchQuery","maxHeight","overflow","border","borderRadius","item","obj","toLowerCase","marginBottom","boundingRect","checkboxModalPosition","preparePortalAccess","toggleStudyListItemCheckboxChecked","setShowDataTypeSelectionModal","removeSelectedStudy","unselectDataTypesForStudy","marginLeft","top","inline","disabled","handleCheckboxClick","currentDataTypes","addSelectedStudy","bsClass","loadFromCBio","StudyModal","TCGA_PANCAN_PATHWAY_NAMES","isPercentageMatch","rankingChoices","isAlterationEnabled","considerOnlyTCGAPanPathways","dropDownTitle","isExpanded","onApplyClick","currentPathway","selectedPathway","shownPathways","pathwayName","updateRankingChoices","bestPathways","bestPathwaysAlgos","filterBestPathwaysByTCGAPanPathways","pathway","changePathway","setBestPathwayMethod","rankingCriteria","tableComponent","score","genesMatched","onPathwayClick","toggleConsiderOnlyTCGAPanPathways","TCGA_PANCAN_EXPLANATION","display","COUNT_PERC_EXPLANATION","ALTERATION_EXPLANATION","Ranking","aboutImage","selectedGenes","studyQuery","alterationData","saveAs","performLayout","groupComparisonView","getSelectedNodes","noneGeneList","validGenes","onAddGenes","showMessage","pathwayGenes","window","handleOpen","genesSelectionComponent","Toolbar","pathwayHandler","fileManager","queryGenes","saveLayoutProperties","gridOptionsManager","setSnapToGuidelines","setShowGrid","resizeNodesToContent","viewOperationsManager","handleNodeAlignment","isMerge","file","files","processFile","overlayUploader","click","formData","FormData","linesOfData","uploader","merger","inputRef","undo","redo","eh","saveGraph","reset","commitNewPathway","resetUndoStack","updatePathwayTitle","highlightNeighbors","highlightSelected","showAllNodes","hideSelectedNodes","selectedEles","edgeTypeIndex","edgeAddingMode","disable","enable","cyNode","toUpperCase","nodesContainingSearchedGene","nodesToSelect","highlightBySearch","removeGenomicData","clearProfiles","removeAllHighlight","parseGraph","graphJSON","json","loadFile","saveAsSVG","saveAsPNG","saveAsJPEG","exists","searchedGene","fileFunctions","function","newPathway","tooltip","upload","export","modFunctions","deleteSelected","alignFunctions","align","utilFunctions","isFocused","visibilityFunctions","hideSelected","showAll","layoutFunctions","allFunctions","fluid","backgroundColor","paddingBottom","functions","borderTopRightRadius","borderBottomRightRadius","onKeyPress","searchGene","Addon","glyph","Buttonbar","init","ctxMenus","scratch","contextMenus","menuItems","coreAsWell","onClickFunction","hasTrailingDivider","selectedElements","containerType","validNodes","size","notValid","tmpNode","isChildren","childsToBeRemoved","tmpNode1","tmpNode2","element","compId","changeParents","nonCollabItems","appendMenuItems","queryNode","pubmedData","header","classList","textInputWrapper","inputElement","addEventListener","edgeLabelRowElement","colElement","pubmedTextInputWrapper","pubmedIdInputElement","pubmedIdsToAdd","generatePubmedLinks","pubmedIdRowElement","pubmedIdColElement","argData","getElementsByClassName","pubmedIdListWrapper","pubmedIdLabel","pubmedId","pubmedIdListElement","pubmedIdRemoveButton","parentElement","pubmedContent","pubmedIdLink","pubmedLink","rowElement","buttonWrapper","button","preventDefault","generateNodeQtip","generateEdgeQtip","string","charAt","postFileLoadCallback","edgeMap","EDGEMAP_NAME","Error","updateShareDBObject","postFileLoad","submitOp","shareDBError","ops","genomicMap","GENOMIC_DATA_MAP_NAME","VISIBLE_GENOMIC_DATA_MAP_NAME","genomicDataGroupMap","GENOMIC_DATA_GROUP_NAME","genomicDataGroupCount","GENOMIC_DATA_GROUP_COUNT","na","mapName","objectKey","LAYOUT_PROPS_NAME","GLOBAL_OPTS_NAME","getGlobalOptions","ld","CHAT_APPLICATION_NAME","GENOMIC_DATA_COLOR_SCHEME_NAME","subscribe","err","WebSocket","host","Connection","getParam","loadFileCallback","onFileLoaded","createNewDocument","new_id","getCustomObjId","genomicDataGroupList","chatMessagesCount","numberOfUsers","genomicDataColorScheme","chatMessages","history","pushState","fetch","initializeSharedDBDoc","syncInitialSharedDocData","initSharedDocEventHandlers","NODEMAP_NAME","shareDBLayoutProperties","visDataMap","chatMessageCount","loadMessages","updateMessageCount","invalidHighlightedGenes","hiddenGenes","tmpNodeId","highlightedEdges","tmpEdge","tmpEdgeId","bendPoint","pubmedID","edgeLabel","edgeInitializer","tmpEdgeID","newEdgeID","applyShareDBOperation","addNewElementsLocally","highlightElementsInitially","updateLayoutPropertiesCallback","changeGlobalOptions","insertShareDBObject","currentMap","getGenomicDataOverlayColorScheme","updateGenomicDataColorSchemeHandler","key_g","nodeAddRemoveHandler","shareDBNodeAddRemoveEventCallBack","edgeAddRemoveHandler","shareDBEdgeAddRemoveEventCallBack","genomicDataAddRemoveHandler","shareDBGenomicDataHandler","genomicDataVisibilityChangeHandler","shareDBGenomicDataVisibilityHandler","checkShareDBGenomicData","genomicDataGroupChangeHandler","shareDBGenomicDataGroupChangeHandler","updateElementHandler","updateElementCallback","updateLayoutPropsHandler","updateGlobalOptionsHandler","handleOp","path","isReplaceEvent","isShareDBReplaceEvent","updateMessages","PATHWAY_TITLE","updatePathwayTitleBack","returnCount","incrementShareDBGroupCount","inGroupId","genomicGroupMap","genomicVisMap","currentGroup","clearShareDBGenomicData","genomicMapEntry","elementID","realTimeEdge","realTimeGeneratedID","nodeInitializer","deleteShareDBObject","coll","currentX","currentY","nodeIDs","isInvalid","collaborativeNode","nonDuplicateArray","removedIndices","tmpID","rootNode","nodeLookupTable","traverseFromRoot","parId","refNode","refNodeId","currentWidth","currentHeight","newNodeData","newNodeId","newSource","newTarget","oldIdNewIdMap","traverseTree","createGraphHierarchyRealTime","bendPointPositions","controlPointPositions","realTimeNodeMap","realTimeNodeLookupTable","realTimeNodeNameLookupTable","nodeMapItem","sameNodeId","newLayoutProperties","updateShareDBLayoutProperties","updateShareDBGlobalOptions","newColorScheme","updateShareDBGenomicDataOverlayColorScheme","Date","now","performance","replace","random","urlParam","regExp","RegExp","match","search","initNodeAdd","nodeAddClass","defaults","backgroundColorDiv","borderColorDiv","borderWidthDiv","borderRadiusDiv","icon","nodeParams","fn","cytoscapeNodeadd","extend","find","components","component","dragContainer","container","$nodeadd","$nodeDragHandle","stopPropagation","background","draggable","helper","$container","droppable","activeClass","drop","ui","currentOffset","relX","pageX","left","relY","pageY","attr","nodeBbox","renderedBoundingBox","arguments","cynodeadd","edgeHandles","fcose","panzoom","panzoomOpts","konva","popper","layoutUtilities","nextProps","getPathway","onPathwayChangeCompleted","pathways","allEles","cyDivHandler","isMountedFirst","div","cyDiv","initCyJS","initCyHandlers","initKeyboardHandlers","initUndoRedoFunctionality","initCBioPortalFunctionalities","placePanzoomAndOverlay","topCy","leftCy","heightCy","widthCy","outerWidth","heightNavigator","widthNavigator","pathwayDetailsView","getPathwayData","boxSelectionEnabled","autounselectify","wheelSensitivity","textureOnViewport","motionBlur","layout","getDoc","setEditor","initShareDB","qtipManager","cxtMenuManager","dragDropNodeAddManager","desiredAspectRatio","nodeadd","edgeHandleDefaults","preview","stackOrder","handleSize","handleColor","handleLineType","handleLineWidth","handleNodes","hoverDelay","cxt","toggleOffOnLeave","handlePosition","loopAllowed","nodeLoopOffset","edgeParams","start","getGlobalEdgeType","complete","targetNodes","addedEntities","stop","setActiveEdge","edgehandles","editorHandler","grappleSize","grappleColor","inactiveGrappleStroke","boundingRectangle","boundingRectangleLineDash","boundingRectangleLineColor","boundingRectangleLineWidth","zIndex","moveSelectedNodesOnKeyEvents","getCompoundMinWidth","getCompoundMinHeight","getCompoundMinWidthBiasRight","getCompoundMinWidthBiasLeft","getCompoundMinHeightBiasTop","getCompoundMinHeightBiasBottom","isFixedAspectRatioResizeMode","is","isNoResizeMode","setWidth","setHeight","setCompoundMinWidth","setCompoundMinHeight","setCompoundMinWidthBiasLeft","setCompoundMinWidthBiasRight","minHeightBiasRight","setCompoundMinHeightBiasTop","setCompoundMinHeightBiasBottom","cursors","default","inactive","nw","ne","se","sw","resizeToContentCueImage","resizeToContentFunction","navigator","viewLiveFramerate","thumbnailEventFramerate","thumbnailLiveFramerate","dblClickDelay","removeCustomContainer","rerenderDelay","highlighted","unhighlighted","setVisibilityOnHide","setDisplayOnHide","neighbor","neighborSelectTime","setViewUtilities","tappedBefore","tappedTimeout","that","tappedNow","clearTimeout","addQtipToElements","pushSelectedNodeStack","removeElementFromSelectedNodeStack","descendants","postLayout","_e","_type","lastSelectedEdge","changeNodePositionsByArrows","keydown","which","ctrlKey","metaKey","tn","activeElement","tagName","select","CytoscapeArea","RankingMode","pathwayDropdownData","pwName","isPancanatlas","dashPos","pwHead","eventKey","doesCyHaveElements","merge","resizeToContent","highlightNeighbours","loadSampleData","uploadOverlay","removeAllData","pullRight","Brand","whiteSpace","ChatBox","diffX","diffY","dragging","styles","handleSubmit","handleChange","convertedMessage","lastIndexinLine","charactersPerLine","openChat","handleElement","addMessage","convertMessage","elmnt","pos1","pos2","pos3","pos4","elementDrag","clientX","clientY","offsetTop","offsetLeft","closeDragElement","onmouseup","onmousemove","onmousedown","showChat","onMouseEnter","dragElement","onMouseDown","ChatMessage","onSubmit","onReset","autoComplete","setActiveEdgeHandler","edgeIndex","activeEdge","changeScroll","edgeTypes","edgeImgs","nodeIds","Heading","Sidebar","maxHeapFn","maxHeap","isModalShown","extractAllGenes","cBioAlterationData","calculatePatientData","addSampleIconData","sampleIconData","calculateGroupComparisonData","calculateAlterationData","addGenomicDataHandler","CBIO_PROFILE_NAME","getBestPathway","Count","Percentage","CountWithAlteration","PercentageWithAlteration","PathwayMapper","updateGenomicDataColorScheme","geneAltData","perc","altered","sequenced","NaN","datum","datum2","nameWithOrdinal","groupsSet","alteredPercentage","uniqueTypes","percentAltered","gapCount","simplifiedDate","Message","db_id","getDBId","localStorage","getItem","setItem","numberOfUsersInLocal","numberOfUsersConverted","convertToNumber","getUserId","userName","simplifyDate","toLocaleString","addChatMessage","updateScroll","character","converted","powOf10","convertCharacter","changePathwayTitle","studyGeneMap","geneAlterationMap","sum","rankingMode","getGeneStudyMap","alterationPerGene","getAlterationAveragePerGene","matchedGenesMap","pathwayGeneMap","enrichedGroup","max","geneCount","geneType","insert","extractMax","getValue","getKey","getBestPathways","currentRankingScheme","setSelectedPathway","geneHash","includePathway","getBestPathwayReRank","redirectedProfile","countOfEnabledProfiles","numberOfEnabledProfiles","getCountOfEnabledProfiles","metadata","warn","enableNewProfile","MAX_ALLOWED_PROFILES_ENABLED","newProfile","getProfileData","visibilityObject","emphasizeQueryGenes","renderTimes","rankPathways","cytoComp","innerWidth","xs","messageBanner","toggleProfileEnabled","setColorMapping","autoClose","hideProgressBar","newestOnTop","closeOnClick","rtl","pauseOnFocusLoss","pauseOnHover","clickable","maxWidth","setUploaders","onChangeFile","setOverlayUploader","overlayFromText","modalId","loadRedirectedPortalData","changePathwayHandler"],"mappings":"2BACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,I,gBClFrDhC,EAAOD,QAAUkC,QAAQ,U,cCAzBjC,EAAOD,QAAUkC,QAAQ,oB,cCAzBjC,EAAOD,QAAUkC,QAAQ,S,cCAzBjC,EAAOD,QAAUkC,QAAQ,uB,cCAzBjC,EAAOD,QAAUkC,QAAQ,W,cCAzBjC,EAAOD,QAAUkC,QAAQ,e,cCAzBjC,EAAOD,QAAUkC,QAAQ,W,cCAzBjC,EAAOD,QAAUkC,QAAQ,c,+1oFCAzBjC,EAAOD,QAAU,8uF,cCAjBC,EAAOD,QAAUkC,QAAQ,mB,cCAzBjC,EAAOD,QAAUkC,QAAQ,gB,cCAzBjC,EAAOD,QAAU,klH,cCAjBC,EAAOD,QAAU,kgH,cCAjBC,EAAOD,QAAUkC,QAAQ,a,cCAzBjC,EAAOD,QAAUkC,QAAQ,e,gCCAzBjC,EAAOD,QAAU,sgB,cCAjBC,EAAOD,QAAU,0hF,cCAjBC,EAAOD,QAAU,0xG,cCAjBC,EAAOD,QAAU,8lD,cCAjBC,EAAOD,QAAUkC,QAAQ,4B,cCAzBjC,EAAOD,QAAUkC,QAAQ,kB,cCAzBjC,EAAOD,QAAU,kwC,cCAjBC,EAAOD,QAAU,s0C,cCAjBC,EAAOD,QAAU,kxC,cCAjBC,EAAOD,QAAU,8zC,cCAjBC,EAAOD,QAAU,syC,cCAjBC,EAAOD,QAAU,kyC,cCAjBC,EAAOD,QAAU,k/J,cCAjBC,EAAOD,QAAU,sgF,cCAjBC,EAAOD,QAAU,0kF,cCAjBC,EAAOD,QAAU,8xD,cCAjBC,EAAOD,QAAU,kyR,cCAjBC,EAAOD,QAAU,0tE,cCAjBC,EAAOD,QAAU,80G,cCAjBC,EAAOD,QAAU,8mT,cCAjBC,EAAOD,QAAU,0gE,cCAjBC,EAAOD,QAAU,89I,cCAjBC,EAAOD,QAAU,89E,cCAjBC,EAAOD,QAAU,06Y,cCAjBC,EAAOD,QAAU,sjD,cCAjBC,EAAOD,QAAU,k4I,cCAjBC,EAAOD,QAAU,83H,cCAjBC,EAAOD,QAAU,0kM,cCAjBC,EAAOD,QAAU,0yH,cCAjBC,EAAOD,QAAU,kyH,cCAjBC,EAAOD,QAAU,kpG,cCAjBC,EAAOD,QAAU,skC,cCAjBC,EAAOD,QAAU,k/K,cCAjBC,EAAOD,QAAU,80I,cCAjBC,EAAOD,QAAU,khL,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","file":"index.es5.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 81);\n","module.exports = require(\"react\");","module.exports = require(\"react-bootstrap\");","module.exports = require(\"mobx\");","module.exports = require(\"autobind-decorator\");","module.exports = require(\"jquery\");","module.exports = require(\"mobx-react\");","module.exports = require(\"lodash\");","module.exports = require(\"cytoscape\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ3cHgiIGhlaWdodD0iNDdweCIgdmlld0JveD0iMCAwIDQ3IDQ3IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NyA0NzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGcgaWQ9IkxheWVyXzFfMTEwXyI+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTE3LjU2NywxNS45MzhsLTIuODU5LTIuNzAyYzAuMzMzLTAuNjA1LDAuNTM5LTEuMjksMC41MzktMi4wMjljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0LTQuMjM5DQoJCQkJYy0yLjM0MywwLTQuMjQzLDEuODk2LTQuMjQzLDQuMjM5YzAsMi4zNDMsMS45LDQuMjQxLDQuMjQzLDQuMjQxYzAuODI2LDAsMS41OS0wLjI0NiwyLjI0Mi0wLjY1NGwyLjg1NSwyLjY5OQ0KCQkJCUMxNi41MzYsMTYuOTIyLDE3LjAyMywxNi4zOTksMTcuNTY3LDE1LjkzOHoiLz4NCgkJCTxwYXRoIGQ9Ik0yOS42NiwxNS42bDMuNzk5LTYuMzkzYzAuMzc0LDAuMTA3LDAuNzYyLDAuMTg0LDEuMTY5LDAuMTg0YzIuMzQ3LDAsNC4yNDQtMS44OTgsNC4yNDQtNC4yNDENCgkJCQljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0NC00LjIzOWMtMi4zNDMsMC00LjIzOSwxLjg5Ni00LjIzOSw0LjIzOWMwLDEuMTYzLDAuNDY5LDIuMjE0LDEuMjI3LDIuOTgxbC0zLjc4Nyw2LjM3NQ0KCQkJCUMyOC40OCwxNC44MDEsMjkuMDk0LDE1LjE2OSwyOS42NiwxNS42eiIvPg0KCQkJPHBhdGggZD0iTTQyLjc2MiwyMC45NTJjLTEuODI0LDAtMy4zNjksMS4xNTktMy45NjgsMi43NzVsLTUuMjc4LTAuNTIxYzAsMC4wNCwwLjAwNiwwLjA3OCwwLjAwNiwwLjExNw0KCQkJCWMwLDAuNjg4LTAuMDc2LDEuMzYtMC4yMTMsMi4wMDlsNS4yNzYsMC41MjFjMC4zMTksMi4wMjQsMi4wNjIsMy41NzYsNC4xNzcsMy41NzZjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzOA0KCQkJCUM0NywyMi44NSw0NS4xMDQsMjAuOTUyLDQyLjc2MiwyMC45NTJ6Ii8+DQoJCQk8cGF0aCBkPSJNMjguMTk3LDM3LjYyNGwtMS4xOC01LjE1NmMtMC42NjYsMC4yMzItMS4zNTksMC4zOTgtMi4wODIsMC40ODFsMS4xODIsNS4xNTdjLTEuMzU1LDAuNzA5LTIuMjksMi4xMS0yLjI5LDMuNzQ2DQoJCQkJYzAsMi4zNDIsMS44OTYsNC4yMzcsNC4yNDMsNC4yMzdjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzN0MzMi4zMTEsMzkuNTUzLDMwLjQ3OSwzNy42OTIsMjguMTk3LDM3LjYyNHoiLz4NCgkJCTxwYXRoIGQ9Ik0xNC4zNTcsMjUuMzdsLTYuNTcsMi4yMDFjLTAuNzU4LTEuMTU4LTIuMDYzLTEuOTI2LTMuNTQ4LTEuOTI2QzEuODk2LDI1LjY0NSwwLDI3LjU0MiwwLDI5Ljg4NA0KCQkJCWMwLDIuMzQ1LDEuODk2LDQuMjQyLDQuMjM5LDQuMjQyYzIuMzQxLDAsNC4yNDItMS44OTcsNC4yNDItNC4yNDJjMC0wLjA5OC0wLjAyMS0wLjE4OC0wLjAyOS0wLjI4NGw2LjU5MS0yLjIwNw0KCQkJCUMxNC43NDYsMjYuNzUyLDE0LjUxLDI2LjA3NywxNC4zNTcsMjUuMzd6Ii8+DQoJCQk8Y2lyY2xlIGN4PSIyMy44MyIgY3k9IjIzLjMyMyIgcj0iNy4yNzEiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = require(\"react-toastify\");","module.exports = require(\"oncoprintjs\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU1MC44MDFweCIgaGVpZ2h0PSI1NTAuODAxcHgiIHZpZXdCb3g9IjAgMCA1NTAuODAxIDU1MC44MDEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU1MC44MDEgNTUwLjgwMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTE0Ni43NDcsMjc2LjcwOGMwLTEzLjk5OC05LjcxMS0yMi4zNTItMjYuODg3LTIyLjM1MmMtNi45OSwwLTExLjcyNiwwLjY3NS0xNC4yMDQsMS4zNTV2NDQuOTI3DQoJCWMyLjkzMiwwLjY3Niw2LjUzOSwwLjg5NiwxMS41MiwwLjg5NkMxMzUuNDQ5LDMwMS41NDYsMTQ2Ljc0NywyOTIuMjgsMTQ2Ljc0NywyNzYuNzA4eiIvPg0KCTxwYXRoIGQ9Ik00ODguNDI2LDE5Ny4wMTlINDc1LjJ2LTYzLjgxNmMwLTAuMzk4LTAuMDYzLTAuNzk5LTAuMTE2LTEuMjAyYy0wLjAyMS0yLjUzNC0wLjgyNy01LjAyMy0yLjU2Mi02Ljk5NUwzNjYuMzI1LDMuNjk0DQoJCWMtMC4wMzItMC4wMzEtMC4wNjMtMC4wNDItMC4wODUtMC4wNzZjLTAuNjMzLTAuNzA3LTEuMzcxLTEuMjk1LTIuMTUxLTEuODA0Yy0wLjIzMS0wLjE1NS0wLjQ2NC0wLjI4NS0wLjcwNi0wLjQxOQ0KCQljLTAuNjc2LTAuMzY5LTEuMzkzLTAuNjc1LTIuMTMxLTAuODk2Yy0wLjItMC4wNTYtMC4zOC0wLjEzOC0wLjU4LTAuMTlDMzU5Ljg3LDAuMTE5LDM1OS4wMzcsMCwzNTguMTkzLDBIOTcuMg0KCQljLTExLjkxOCwwLTIxLjYsOS42OTMtMjEuNiwyMS42MDF2MTc1LjQxM0g2Mi4zNzdjLTE3LjA0OSwwLTMwLjg3MywxMy44MTgtMzAuODczLDMwLjg3M3YxNjAuNTQ1DQoJCWMwLDE3LjA0MywxMy44MjQsMzAuODcsMzAuODczLDMwLjg3aDEzLjIyNFY1MjkuMmMwLDExLjkwNyw5LjY4MiwyMS42MDEsMjEuNiwyMS42MDFoMzU2LjRjMTEuOTA3LDAsMjEuNi05LjY5MywyMS42LTIxLjYwMQ0KCQlWNDE5LjMwMmgxMy4yMjZjMTcuMDQ0LDAsMzAuODcxLTEzLjgyNywzMC44NzEtMzAuODd2LTE2MC41NEM1MTkuMjk3LDIxMC44MzgsNTA1LjQ3LDE5Ny4wMTksNDg4LjQyNiwxOTcuMDE5eiBNOTcuMiwyMS42MDUNCgkJaDI1MC4xOTN2MTEwLjUxM2MwLDUuOTY3LDQuODQxLDEwLjgsMTAuOCwxMC44aDk1LjQwN3Y1NC4xMDhIOTcuMlYyMS42MDV6IE0yMzQuMzQ0LDMzNS44NnY0NS44MzFoLTMxLjYwMVYyMjkuNTI0aDQwLjE4NA0KCQlsMzEuNjExLDU1Ljc1OWM5LjAyNSwxNi4wMzEsMTguMDY0LDM0Ljk4MywyNC44MjUsNTIuMTU0aDAuNjc1Yy0yLjI1Ny0yMC4xMDMtMi45MzMtNDAuNjQzLTIuOTMzLTYzLjQ0di00NC40NzNoMzEuNjE0djE1Mi4xNjcNCgkJaC0zNi4xMTdsLTMyLjUxNi01OC43MDNjLTkuMDQ5LTE2LjI1My0xOC45NzEtMzUuODkyLTI2LjQzOC01My43MjdsLTAuNjY1LDAuMjIyQzIzMy45MDYsMjg5LjU4LDIzNC4zNDQsMzExLjAyNywyMzQuMzQ0LDMzNS44NnoNCgkJIE03MS41NTYsMzgxLjY5MVYyMzEuNTZjMTAuNjEzLTEuODA0LDI1LjUxNi0zLjE1OSw0Ni41MDYtMy4xNTljMjEuMjE1LDAsMzYuMzUzLDQuMDYxLDQ2LjUwOSwxMi4xOTINCgkJYzkuNjk4LDcuNjczLDE2LjI1NSwyMC4zMTMsMTYuMjU1LDM1LjIxOWMwLDE0Ljg5Ny00Ljk1OSwyNy41NDktMTMuOTk5LDM2LjEyM2MtMTEuNzM4LDExLjA2My0yOS4xMjMsMTYuMDMxLTQ5LjQ0MSwxNi4wMzENCgkJYy00LjUyMiwwLTguNTkzLTAuMjMxLTExLjczNi0wLjY3NXY1NC40MTFINzEuNTU2VjM4MS42OTF6IE00NTMuNjAxLDUyMy4zNTNIOTcuMlY0MTkuMzAyaDM1Ni40VjUyMy4zNTN6IE00ODUuNjUyLDM3NC42ODgNCgkJYy0xMC42MSwzLjYwNy0zMC43MTMsOC41ODUtNTAuODA1LDguNTg1Yy0yNy43NTksMC00Ny44NzItNy4wMDMtNjEuODU3LTIwLjU0NWMtMTMuOTk1LTEzLjEtMjEuNjg0LTMyLjk3LTIxLjQ1Mi01NS4zMTgNCgkJYzAuMjIyLTUwLjU2OSwzNy4wMy03OS40NjMsODYuOTE3LTc5LjQ2M2MxOS42NDQsMCwzNC43ODMsMy44MjksNDIuMjE5LDcuNDQ2bC03LjIxNCwyNy41NDNjLTguMzY5LTMuNjE3LTE4Ljc1Mi02LjU1LTM1LjQ1OC02LjU1DQoJCWMtMjguNjU2LDAtNTAuMzQxLDE2LjI1Ni01MC4zNDEsNDkuMjJjMCwzMS4zODIsMTkuNjQ5LDQ5Ljg5Miw0Ny44NzIsNDkuODkyYzcuODk1LDAsMTQuMjE4LTAuOTAxLDE2LjkzNC0yLjI1N3YtMzEuODM1aC0yMy40OTMNCgkJdi0yNi44NjloNTYuNjc5VjM3NC42ODh6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU1MC44MDFweCIgaGVpZ2h0PSI1NTAuODAxcHgiIHZpZXdCb3g9IjAgMCA1NTAuODAxIDU1MC44MDEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU1MC44MDEgNTUwLjgwMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ4OC40MjYsMTk3LjAxOUg0NzUuMnYtNjMuODE2YzAtMC4zOTgtMC4wNjMtMC43OTktMC4xMTYtMS4yMDJjLTAuMDIxLTIuNTM0LTAuODI3LTUuMDIzLTIuNTYyLTYuOTk1TDM2Ni4zMjUsMy42OTQNCgkJYy0wLjAzMi0wLjAzMS0wLjA2My0wLjA0Mi0wLjA4NS0wLjA3NmMtMC42MzMtMC43MDctMS4zNzEtMS4yOTUtMi4xNTEtMS44MDRjLTAuMjMxLTAuMTU1LTAuNDY0LTAuMjg1LTAuNzA2LTAuNDE5DQoJCWMtMC42NzYtMC4zNjktMS4zOTMtMC42NzUtMi4xMzEtMC44OTZjLTAuMi0wLjA1Ni0wLjM4LTAuMTM4LTAuNTgtMC4xOUMzNTkuODcsMC4xMTksMzU5LjAzNywwLDM1OC4xOTMsMEg5Ny4yDQoJCWMtMTEuOTE4LDAtMjEuNiw5LjY5My0yMS42LDIxLjYwMXYxNzUuNDEzSDYyLjM3N2MtMTcuMDQ5LDAtMzAuODczLDEzLjgxOC0zMC44NzMsMzAuODczdjE2MC41NDUNCgkJYzAsMTcuMDQzLDEzLjgyNCwzMC44NywzMC44NzMsMzAuODdoMTMuMjI0VjUyOS4yYzAsMTEuOTA3LDkuNjgyLDIxLjYwMSwyMS42LDIxLjYwMWgzNTYuNGMxMS45MDcsMCwyMS42LTkuNjkzLDIxLjYtMjEuNjAxDQoJCVY0MTkuMzAyaDEzLjIyNmMxNy4wNDQsMCwzMC44NzEtMTMuODI3LDMwLjg3MS0zMC44N3YtMTYwLjU0QzUxOS4yOTcsMjEwLjgzOCw1MDUuNDcsMTk3LjAxOSw0ODguNDI2LDE5Ny4wMTl6IE05Ny4yLDIxLjYwNQ0KCQloMjUwLjE5M3YxMTAuNTEzYzAsNS45NjcsNC44NDEsMTAuOCwxMC44LDEwLjhoOTUuNDA3djU0LjEwOEg5Ny4yVjIxLjYwNXogTTMzOC44NzEsMjI1LjY3MkwyODQuNTQ1LDM4Ni45NmgtNDIuNTkxDQoJCWwtNTEuNjktMTYxLjI4OGgzOS45NjdsMTkuNjE3LDY4LjE5NmM1LjUwOCwxOS4xNDMsMTAuNTMxLDM3LjU2NywxNC4zNiw1Ny42N2gwLjcxN2M0LjA2MS0xOS4zODUsOS4wODktMzguNTI3LDE0LjU5Mi01Ni45NTMNCgkJbDIwLjU4NS02OC45MThoMzguNzdWMjI1LjY3MnogTTY4LjQ1OCwzNzkuNTRsNy40MTUtMzAuMTUzYzkuODExLDUuMDIxLDI0Ljg4OCwxMC4wNTEsNDAuNDM5LDEwLjA1MQ0KCQljMTYuNzUxLDAsMjUuNjA3LTYuOTM1LDI1LjYwNy0xNy40NjVjMC0xMC4wNTItNy42NjItMTUuNzk1LTI3LjA1LTIyLjczNGMtMjYuOC05LjMyOC00NC4yNjMtMjQuMTY4LTQ0LjI2My00Ny42MTENCgkJYzAtMjcuNTI0LDIyLjk3MS00OC41NzksNjEuMDE0LTQ4LjU3OWMxOC4xODgsMCwzMS41OTEsMy44MjMsNDEuMTU5LDguMTMxbC04LjEyNiwyOS40MzdjLTYuNDY1LTMuMTE2LTE3Ljk0NS03LjY1Ny0zMy43NDUtNy42NTcNCgkJYy0xNS43OTEsMC0yMy40NTQsNy4xODMtMjMuNDU0LDE1LjU1MmMwLDEwLjI5Niw5LjA4OSwxNC44NDIsMjkuOTE3LDIyLjczMWMyOC40NjgsMTAuNTM2LDQxLjg3MSwyNS4zNjUsNDEuODcxLDQ4LjA5NA0KCQljMCwyNy4wNDItMjAuODEyLDUwLjAxMy02NS4wOSw1MC4wMTNDOTUuNzMxLDM4OS4zNDksNzcuNTM4LDM4NC41NzEsNjguNDU4LDM3OS41NHogTTQ1My42MDEsNTIzLjM1M0g5Ny4yVjQxOS4zMDJoMzU2LjRWNTIzLjM1M3oNCgkJIE00ODguOTExLDM3OS41NGMtMTEuMjQzLDMuODIzLTMyLjUzNyw5LjEwMy01My44MzEsOS4xMDNjLTI5LjQzNywwLTUwLjczLTcuNDI2LTY1LjU3LTIxLjc3OQ0KCQljLTE0LjgzOS0xMy44NzUtMjIuOTcxLTM0Ljk0Mi0yMi43MzgtNTguNjI1YzAuMjUzLTUzLjYwNCwzOS4yNTUtODQuMjM1LDkyLjEzNy04NC4yMzVjMjAuODEsMCwzNi44NTIsNC4wNzMsNDQuNzQsNy44OTYNCgkJbC03LjY1NywyOS4yMDJjLTguODU5LTMuODI5LTE5Ljg0OS02Ljk1LTM3LjU2Ny02Ljk1Yy0zMC4zOTYsMC01My4zNTcsMTcuMjMzLTUzLjM1Nyw1Mi4xNzNjMCwzMy4yNjUsMjAuODEsNTIuODgyLDUwLjczLDUyLjg4Mg0KCQljOC4zNzUsMCwxNS4wNzItMC45NiwxNy45NC0yLjM5NXYtMzMuNzQ1aC0yNC44NzV2LTI4LjQ3MWg2MC4wNDlWMzc5LjU0TDQ4OC45MTEsMzc5LjU0eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = require(\"tippy.js\");","module.exports = require(\"file-saver\");","module.exports = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZWRpdCI+PHBhdGggZD0iTTExIDRINGEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyI+PC9wYXRoPjxwYXRoIGQ9Ik0xOC41IDIuNWEyLjEyMSAyLjEyMSAwIDAgMSAzIDNMMTIgMTVsLTQgMSAxLTQgOS41LTkuNXoiPjwvcGF0aD48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMjMuNjI1IDIzLjYyNSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjMuNjI1IDIzLjYyNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzAzMDEwNDsiIGQ9Ik0xMS44MTIsMEM1LjI4OSwwLDAsNS4yODksMCwxMS44MTJzNS4yODksMTEuODEzLDExLjgxMiwxMS44MTNzMTEuODEzLTUuMjksMTEuODEzLTExLjgxMw0KCQlTMTguMzM1LDAsMTEuODEyLDB6IE0xNC4yNzEsMTguMzA3Yy0wLjYwOCwwLjI0LTEuMDkyLDAuNDIyLTEuNDU1LDAuNTQ4Yy0wLjM2MiwwLjEyNi0wLjc4MywwLjE4OS0xLjI2MiwwLjE4OQ0KCQljLTAuNzM2LDAtMS4zMDktMC4xOC0xLjcxNy0wLjUzOXMtMC42MTEtMC44MTQtMC42MTEtMS4zNjdjMC0wLjIxNSwwLjAxNS0wLjQzNSwwLjA0NS0wLjY1OWMwLjAzMS0wLjIyNCwwLjA4LTAuNDc2LDAuMTQ3LTAuNzU5DQoJCWwwLjc2MS0yLjY4OGMwLjA2Ny0wLjI1OCwwLjEyNS0wLjUwMywwLjE3MS0wLjczMWMwLjA0Ni0wLjIzLDAuMDY4LTAuNDQxLDAuMDY4LTAuNjMzYzAtMC4zNDItMC4wNzEtMC41ODItMC4yMTItMC43MTcNCgkJYy0wLjE0My0wLjEzNS0wLjQxMi0wLjIwMS0wLjgxMy0wLjIwMWMtMC4xOTYsMC0wLjM5OCwwLjAyOS0wLjYwNSwwLjA5Yy0wLjIwNSwwLjA2My0wLjM4MywwLjEyLTAuNTI5LDAuMTc2bDAuMjAxLTAuODI4DQoJCWMwLjQ5OC0wLjIwMywwLjk3NS0wLjM3NywxLjQzLTAuNTIxYzAuNDU1LTAuMTQ2LDAuODg1LTAuMjE4LDEuMjktMC4yMThjMC43MzEsMCwxLjI5NSwwLjE3OCwxLjY5MiwwLjUzDQoJCWMwLjM5NSwwLjM1MywwLjU5NCwwLjgxMiwwLjU5NCwxLjM3NmMwLDAuMTE3LTAuMDE0LDAuMzIzLTAuMDQxLDAuNjE3Yy0wLjAyNywwLjI5NS0wLjA3OCwwLjU2NC0wLjE1MiwwLjgxMWwtMC43NTcsMi42OA0KCQljLTAuMDYyLDAuMjE1LTAuMTE3LDAuNDYxLTAuMTY3LDAuNzM2Yy0wLjA0OSwwLjI3NS0wLjA3MywwLjQ4NS0wLjA3MywwLjYyNmMwLDAuMzU2LDAuMDc5LDAuNTk5LDAuMjM5LDAuNzI4DQoJCWMwLjE1OCwwLjEyOSwwLjQzNSwwLjE5NCwwLjgyNywwLjE5NGMwLjE4NSwwLDAuMzkyLTAuMDMzLDAuNjI2LTAuMDk3YzAuMjMyLTAuMDY0LDAuNC0wLjEyMSwwLjUwNi0wLjE3TDE0LjI3MSwxOC4zMDd6DQoJCSBNMTQuMTM3LDcuNDI5Yy0wLjM1MywwLjMyOC0wLjc3OCwwLjQ5Mi0xLjI3NSwwLjQ5MmMtMC40OTYsMC0wLjkyNC0wLjE2NC0xLjI4LTAuNDkyYy0wLjM1NC0wLjMyOC0wLjUzMy0wLjcyNy0wLjUzMy0xLjE5Mw0KCQljMC0wLjQ2NSwwLjE4LTAuODY1LDAuNTMzLTEuMTk2YzAuMzU2LTAuMzMyLDAuNzg0LTAuNDk3LDEuMjgtMC40OTdjMC40OTcsMCwwLjkyMywwLjE2NSwxLjI3NSwwLjQ5Nw0KCQljMC4zNTMsMC4zMzEsMC41MywwLjczMSwwLjUzLDEuMTk2QzE0LjY2Nyw2LjcwMywxNC40OSw3LjEwMSwxNC4xMzcsNy40Mjl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDU3IDU3Ig0KICAgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTcgNTc7Ig0KICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImFkZC1zZWxlY3RlZC1uZXcuc3ZnIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSI+PG1ldGFkYXRhDQogICBpZD0ibWV0YWRhdGE0NyI+PHJkZjpSREY+PGNjOldvcmsNCiAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICBpZD0iZGVmczQ1Ij4NCgkNCgkNCgkNCgkNCjwvZGVmcz48c29kaXBvZGk6bmFtZWR2aWV3DQogICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgZ3JpZHRvbGVyYW5jZT0iMTAiDQogICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEwOTciDQogICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI3MTkiDQogICBpZD0ibmFtZWR2aWV3NDMiDQogICBzaG93Z3JpZD0iZmFsc2UiDQogICBpbmtzY2FwZTp6b29tPSI0LjE0MDM1MDkiDQogICBpbmtzY2FwZTpjeD0iLTEwLjc0Nzg4MSINCiAgIGlua3NjYXBlOmN5PSIyOC41Ig0KICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICBpbmtzY2FwZTp3aW5kb3cteT0iMCINCiAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiDQogICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+DQo8cGF0aA0KICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgIGlkPSJwYXRoMiINCiAgIGQ9Ik0gMjguNjYsNiBIIDkuMzQgQyA3LjQ5OCw2IDYsNy40OTggNiw5LjM0IFYgMjguNjYgQyA2LDMwLjUwMiA3LjQ5OCwzMiA5LjM0LDMyIEggMjguNjYgQyAzMC41MDIsMzIgMzIsMzAuNTAyIDMyLDI4LjY2IFYgOS4zNCBDIDMyLDcuNDk4IDMwLjUwMiw2IDI4LjY2LDYgWiIgLz48cGF0aA0KICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgIGlkPSJwYXRoOCINCiAgIGQ9Ik0gNTEsMzcgSCA0MSBWIDI3IGMgMCwtMS4xMDQgLTAuODk2LC0yIC0yLC0yIC0xLjEwNCwwIC0yLDAuODk2IC0yLDIgViAzNyBIIDI3IGMgLTEuMTA0LDAgLTIsMC44OTYgLTIsMiAwLDEuMTA0IDAuODk2LDIgMiwyIGggMTAgdiAxMCBjIDAsMS4xMDQgMC44OTYsMiAyLDIgMS4xMDQsMCAyLC0wLjg5NiAyLC0yIFYgNDEgaCAxMCBjIDEuMTA0LDAgMiwtMC44OTYgMiwtMiAwLC0xLjEwNCAtMC44OTYsLTIgLTIsLTIgeiIgLz4NCjxnDQogICBpZD0iZzEyIj4NCjwvZz4NCjxnDQogICBpZD0iZzE0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzE2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzE4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzIwIj4NCjwvZz4NCjxnDQogICBpZD0iZzIyIj4NCjwvZz4NCjxnDQogICBpZD0iZzI0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzI2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzI4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzMwIj4NCjwvZz4NCjxnDQogICBpZD0iZzMyIj4NCjwvZz4NCjxnDQogICBpZD0iZzM0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzM2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzM4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzQwIj4NCjwvZz4NCjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTcgNTciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU3IDU3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNMjIuNjYsMEgzLjM0QzEuNDk4LDAsMCwxLjQ5OCwwLDMuMzR2MTkuMzJDMCwyNC41MDIsMS40OTgsMjYsMy4zNCwyNmgxOS4zMmMxLjg0MiwwLDMuMzQtMS40OTgsMy4zNC0zLjM0VjMuMzQNCgkJQzI2LDEuNDk4LDI0LjUwMiwwLDIyLjY2LDB6Ii8+DQoJPHBhdGggZD0iTTMzLjM0LDI2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMy4zNEM1NiwxLjQ5OCw1NC41MDIsMCw1Mi42NiwwSDMzLjM0QzMxLjQ5OCwwLDMwLDEuNDk4LDMwLDMuMzR2MTkuMzINCgkJQzMwLDI0LjUwMiwzMS40OTgsMjYsMzMuMzQsMjZ6Ii8+DQoJPHBhdGggZD0iTTIyLjY2LDMwSDMuMzRDMS40OTgsMzAsMCwzMS40OTgsMCwzMy4zNHYxOS4zMkMwLDU0LjUwMiwxLjQ5OCw1NiwzLjM0LDU2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMzMuMzQNCgkJQzI2LDMxLjQ5OCwyNC41MDIsMzAsMjIuNjYsMzB6Ii8+DQoJPHBhdGggZD0iTTU1LDQxSDQ1VjMxYzAtMS4xMDQtMC44OTYtMi0yLTJzLTIsMC44OTYtMiwydjEwSDMxYy0xLjEwNCwwLTIsMC44OTYtMiwyczAuODk2LDIsMiwyaDEwdjEwYzAsMS4xMDQsMC44OTYsMiwyLDINCgkJczItMC44OTYsMi0yVjQ1aDEwYzEuMTA0LDAsMi0wLjg5NiwyLTJTNTYuMTA0LDQxLDU1LDQxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = require(\"tippy.js/dist/tippy.css\");","module.exports = require(\"react-tooltip\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTM1LjQzNiwwSDcuNzU1djYzLjk1MmgyNy42ODJMMzUuNDM2LDBMMzUuNDM2LDB6IE0zMi41NzMsNjEuMDg5SDEwLjYxOFYyLjg2M2gyMS45NTVWNjEuMDg5eiBNNzAuMjc0LDI2LjQ4OGgtMjcuNjgNCgkJdjM3LjQ2NGgyNy42ODJWMjYuNDg4SDcwLjI3NHogTTY3LjQxMiw2MS4wODlINDUuNDU3VjI5LjM1MWgyMS45NTVWNjEuMDg5eiBNNzQuNTcxLDcwLjM5NXY1LjAxMkgwLjgzNXYtNS4wMTJINzQuNTcxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjkwLjk1NnB4IiBoZWlnaHQ9IjkwLjk1N3B4IiB2aWV3Qm94PSIwIDAgOTAuOTU2IDkwLjk1NyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgOTAuOTU2IDkwLjk1NzsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQxLjY2MSwxMy41MDFIMTMuOTc5djYzLjk1M2gyNy42ODJWMTMuNTAxeiBNMzguNzk3LDc0LjU5MUgxNi44NDJWMTYuMzY2aDIxLjk1NVY3NC41OTF6IE03Ni40OTksMjYuNzQ3SDQ4LjgxOHYzNy40NjUNCgkJSDc2LjVMNzYuNDk5LDI2Ljc0N0w3Ni40OTksMjYuNzQ3eiBNNzMuNjM3LDYxLjM0N0g1MS42ODJWMjkuNjA5aDIxLjk1NVY2MS4zNDd6IE0xMC45NzgsNDIuOTczdjUuMDExSDB2LTUuMDExSDEwLjk3OHoNCgkJIE05MC45NTYsNDIuOTczdjUuMDExSDc5Ljk3OXYtNS4wMTFIOTAuOTU2eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTM1LjQzNiwxMS40NTRINy43NTV2NjMuOTUyaDI3LjY4MkwzNS40MzYsMTEuNDU0TDM1LjQzNiwxMS40NTR6IE0zMi41NzMsNzIuNTQzSDEwLjYxOFYxNC4zMTdoMjEuOTU1VjcyLjU0M3oNCgkJIE03MC4yNzQsMTEuNDU0aC0yNy42OHYzNy40NjRoMjcuNjgyVjExLjQ1NEg3MC4yNzR6IE02Ny40MTIsNDYuMDU1SDQ1LjQ1N1YxNC4zMTdoMjEuOTU1VjQ2LjA1NXogTTAuODM1LDUuMDExVjBoNzMuNzM2djUuMDExDQoJCUgwLjgzNXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjkwLjk1NnB4IiBoZWlnaHQ9IjkwLjk1NnB4IiB2aWV3Qm94PSIwIDAgOTAuOTU2IDkwLjk1NiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgOTAuOTU2IDkwLjk1NjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTc3LjQ1NCw0MS42NjFWMTMuOTc5SDEzLjUwMnYyNy42ODJINzcuNDU0eiBNMTYuMzY1LDM4Ljc5N1YxNi44NDJoNTguMjI2djIxLjk1NUgxNi4zNjV6IE02NC4yMSw3Ni40OTlWNDguODE4SDI2Ljc0Ng0KCQlWNzYuNUw2NC4yMSw3Ni40OTlMNjQuMjEsNzYuNDk5eiBNMjkuNjA5LDczLjYzN1Y1MS42ODJoMzEuNzM3djIxLjk1NUgyOS42MDl6IE00Ny45ODIsMTAuOTc4aC01LjAxVjBoNS4wMVYxMC45Nzh6DQoJCSBNNDcuOTgyLDkwLjk1NmgtNS4wMVY3OS45NzloNS4wMVY5MC45NTZ6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTc1LjQwNiwzNS40MzZWNy43NTVIMTEuNDU0djI3LjY4Mkw3NS40MDYsMzUuNDM2TDc1LjQwNiwzNS40MzZ6IE0xNC4zMTcsMzIuNTczVjEwLjYxOGg1OC4yMjZ2MjEuOTU1SDE0LjMxN3oNCgkJIE00OC45MTgsNzAuMjc1VjQyLjU5NUgxMS40NTR2MjcuNjgyTDQ4LjkxOCw3MC4yNzVMNDguOTE4LDcwLjI3NXogTTE0LjMxNyw2Ny40MTJWNDUuNDU3aDMxLjczOHYyMS45NTVIMTQuMzE3eiBNNS4wMTEsNzQuNTcxSDANCgkJVjAuODM1aDUuMDExVjc0LjU3MXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTYzLjk1MiwzNS40MzZWNy43NTVIMHYyNy42ODJMNjMuOTUyLDM1LjQzNkw2My45NTIsMzUuNDM2eiBNMi44NjMsMzIuNTczVjEwLjYxOEg2MS4wOXYyMS45NTVIMi44NjN6IE02My45NTIsNzAuMjc1DQoJCVY0Mi41OTVIMjYuNDg4djI3LjY4Mkw2My45NTIsNzAuMjc1TDYzLjk1Miw3MC4yNzV6IE0yOS4zNTEsNjcuNDEyVjQ1LjQ1N2gzMS43Mzd2MjEuOTU1SDI5LjM1MXogTTcwLjM5NSwwLjgzNWg1LjAxMnY3My43MzYNCgkJaC01LjAxMlYwLjgzNXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMS4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDYxMiA2MTIiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA2MTIgNjEyOyINCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImRlbGV0ZS1zaW1wbGUuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDMiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnM0MSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlkPSJuYW1lZHZpZXczOSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciDQogICAgIGlua3NjYXBlOmN4PSIyOTUuMDM0MDgiDQogICAgIGlua3NjYXBlOmN5PSIzMzAuODU0NDgiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9Imc1Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Nzg4MTM1LDAsMCwwLjk5Nzg4MTM1LDEuNzMwNDAxMiwwLjkyMzcyODQ3KSI+PHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNyINCiAgICAgICBkPSJNIDU4Ny44MjYsMTg2Ljk2NiBDIDU3MS43MSwxNDkuNjM0IDU0OS44ODIsMTE3LjE5OCA1MjIuMzQyLDg5LjY1OCA0OTQuODAyLDYyLjExOCA0NjIuMzY2LDQwLjI5IDQyNS4wMzQsMjQuMTc0IDM4Ny43MDIsOC4wNTggMzQ4LjAyNCwwIDMwNiwwIDI3Ny44NDgsMCAyNTAuNzE2LDMuNjcyIDIyNC42MDQsMTEuMDE2IDE5OC40OTIsMTguMzYgMTc0LjExNCwyOC42NjIgMTUxLjQ3LDQxLjkyMiAxMjguODI2LDU1LjE4MiAxMDguMjIyLDcxLjA5NCA4OS42NTgsODkuNjU4IDcxLjA5NCwxMDguMjIyIDU1LjE4MiwxMjguODI2IDQxLjkyMiwxNTEuNDcgMjguNjYyLDE3NC4xMTYgMTguMzYsMTk4LjQ5MiAxMS4wMTYsMjI0LjYwNCAzLjY3MiwyNTAuNzE2IDAsMjc3Ljg0OCAwLDMwNiBjIDAsMjguMTUyIDMuNjcyLDU1LjI4NCAxMS4wMTYsODEuMzk2IDcuMzQ0LDI2LjExIDE3LjY0Niw1MC40ODcgMzAuOTA2LDczLjEzNCAxMy4yNiwyMi42NDQgMjkuMTcyLDQzLjI0OSA0Ny43MzYsNjEuODEyIDE4LjU2NCwxOC41NjQgMzkuMTY4LDM0LjQ3OCA2MS44MTIsNDcuNzM2IDIyLjY0NCwxMy4yNiA0Ny4wMjIsMjMuNTYxIDczLjEzNCwzMC45MDYgQyAyNTAuNzE2LDYwOC4zMjggMjc3Ljg0OCw2MTIgMzA2LDYxMiBjIDI4LjE1MiwwIDU1LjI4NCwtMy42NzIgODEuMzk2LC0xMS4wMTYgMjYuMTExLC03LjM0NiA1MC40ODgsLTE3LjY0NiA3My4xMzUsLTMwLjkwNiAyMi42NDQsLTEzLjI1OSA0My4yNDksLTI5LjE3MiA2MS44MTIsLTQ3LjczNiAxOC41NjQsLTE4LjU2MyAzNC40NzgsLTM5LjE2OCA0Ny43MzYsLTYxLjgxMiAxMy4yNiwtMjIuNjQ2IDIzLjU2MSwtNDcuMDIzIDMwLjkwNiwtNzMuMTM1IEMgNjA4LjMyOCwzNjEuMjg0IDYxMiwzMzQuMTUyIDYxMiwzMDYgNjEyLDI2My45NzYgNjAzLjk0MiwyMjQuMjk4IDU4Ny44MjYsMTg2Ljk2NiBaIE0gNDY4LjE4LDM5MS42OCBjIDIuMDQsMi4wNCAzLjA2Myw0LjI4NCAzLjA2Myw2LjczMiAwLDIuNDQ4IC0xLjAyMSw0LjQ4OCAtMy4wNjMsNi4xMiBsIC01OS45NzYsNjAuNTg4IGMgLTEuNjMxLDEuNjMyIC0zLjg3NiwyLjQ0OCAtNi43MzIsMi40NDggLTIuODU0LDAgLTQuODk1LC0wLjgxNiAtNi4xMiwtMi40NDggTCAzMDkuMDYsMzc4LjgyOCAyMjMuMzgsNDY1LjEyIGMgLTIuNDQ4LDEuNjMyIC00LjY5MiwyLjQ0OCAtNi43MzIsMi40NDggLTEuNjMyLDAgLTMuNjcyLC0wLjgxNiAtNi4xMiwtMi40NDggbCAtNTkuOTc2LC02MC41ODggYyAtMi4wNCwtMS4yMjYgLTMuMDYsLTMuMjY3IC0zLjA2LC02LjEyIDAsLTIuNDQ4IDEuMDIsLTQuNjkyIDMuMDYsLTYuNzMyIGwgODUuNjgsLTg1LjY4IC04NS42OCwtODUuNjggYyAtMi4wNCwtMi4wNCAtMy4wNiwtNC4yODQgLTMuMDYsLTYuNzMyIDAsLTIuODU2IDEuMDIsLTQuODk2IDMuMDYsLTYuMTIgbCA1OS45NzYsLTYwLjU4OCBjIDEuNjMyLC0xLjYzMiAzLjY3MiwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDg1LjY4LDg2LjI5MiA4Ni4yOTIsLTg2LjI5MiBjIDEuNjM1LC0xLjYzMiAzLjY3NSwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDU5Ljk3Niw2MC41ODggYyAyLjA0LDEuNjMyIDMuMDYzLDMuNjcyIDMuMDYzLDYuMTIgMCwyLjQ0OCAtMS4wMjEsNC42OTIgLTMuMDYzLDYuNzMyIEwgMzgyLjUsMzA2IGwgODUuNjgsODUuNjggeiINCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48Zw0KICAgICBpZD0iZzM3IiAvPjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU0MS45MTFweCIgaGVpZ2h0PSI1NDEuOTExcHgiIHZpZXdCb3g9IjAgMCA1NDEuOTExIDU0MS45MTEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU0MS45MTEgNTQxLjkxMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ2Ny44MjYsOC43ODF2NDcuNDUxSDc0LjA5MVY4Ljc4MWMwLTQuNjA4LTMuNzI5LTguMzM0LTguMzM0LTguMzM0Yy00LjYwNywwLTguMzM0LDMuNzI3LTguMzM0LDguMzM0djQ5LjA2OEg4LjMzNA0KCQlDMy43Myw1Ny44NDksMCw2MS41ODQsMCw2Ni4xODNjMCw0LjYwNywzLjczLDguMzM0LDguMzM0LDguMzM0aDQ5LjA4M3YzOTIuODY4SDguMzM0Yy00LjYwNCwwLTguMzM0LDMuNzI5LTguMzM0LDguMzM0DQoJCWMwLDQuNjEsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2NDkuMDc3YzAsNC42MDQsMy43MjcsOC4zMzQsOC4zMzQsOC4zMzRjNC42MDQsMCw4LjMzNC0zLjcyOSw4LjMzNC04LjMzNHYtNDkuMDc3aDM5My43NA0KCQl2NDkuMDc3YzAsNC42MDQsMy43MjksOC4zMzQsOC4zMzQsOC4zMzRjNC42MSwwLDguMzM0LTMuNzI5LDguMzM0LTguMzM0di00OS4wNzdoNDkuMDgzYzQuNjA0LDAsOC4zMzQtMy43MjQsOC4zMzQtOC4zMzQNCgkJYzAtNC42MDQtMy43MjktOC4zMzQtOC4zMzQtOC4zMzRoLTQ4LjMzMlY3NC41MTdoNDguMzMyYzQuNjA0LDAsOC4zMzQtMy43MjcsOC4zMzQtOC4zMzRjMC00LjU5OS0zLjcyOS04LjMzNC04LjMzNC04LjMzNGgtNDkuMDgzDQoJCVY4Ljc4MWMwLTQuNjA4LTMuNzI0LTguMzM0LTguMzM0LTguMzM0QzQ3MS41NTUsMC40NDYsNDY3LjgyNiw0LjE3Myw0NjcuODI2LDguNzgxeiBNNDY4LjIwNCwzNDAuNTI4djEyNi44NTdIMzQwLjQxM1YzNDAuNTI4DQoJCUg0NjguMjA0eiBNMzM0Ljg1NywzNDAuNTI4djEyNi44NTdIMjA3LjQzNlYzNDAuNTI4SDMzNC44NTd6IE0yMDEuNTA0LDM0MC41Mjh2MTI2Ljg1N0g3NC4wOTFWMzQwLjUyOEgyMDEuNTA0eiBNNDY4LjIwNCwyMDcuMTcyDQoJCXYxMjcuOEgzNDAuNDEzdi0xMjcuOEg0NjguMjA0eiBNMzM0Ljg1NywyMDcuMTcydjEyNy44SDIwNy40MzZ2LTEyNy44SDMzNC44NTd6IE0yMDEuNTA0LDIwNy4xNzJ2MTI3LjhINzQuMDkxdi0xMjcuOEgyMDEuNTA0eg0KCQkgTTQ2OC4yMDQsNzMuODI5djEyNy43ODhIMzQwLjQxM1Y3My44MjlINDY4LjIwNHogTTMzNC44NTcsNzMuODI5djEyNy43ODhIMjA3LjQzNlY3My44MjlIMzM0Ljg1N3ogTTIwMS41MDQsNzMuODI5djEyNy43ODgNCgkJSDc0LjA5MVY3My44MjlIMjAxLjUwNHogTTMyMy40MTQsODMuODg1VjE4OC43OUgyMTguNTA2VjgzLjg4NUgzMjMuNDE0eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQxOHB4IiBoZWlnaHQ9IjQxOHB4IiB2aWV3Qm94PSIwIDAgNDE4IDQxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDE4IDQxODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTkxLjYwNiwxNDMuNzAzYy0zLjE0Ni0zLjE0Ni03Ljg3Ny00LjA4Ny0xMS45ODgtMi4zODVjLTQuMTEsMS43MDMtNi43OSw1LjcxNC02Ljc5LDEwLjE2M3YxMTUuMDM3DQoJCQkJYzAsNC40NDksMi42OCw4LjQ2MSw2Ljc5LDEwLjE2NGMxLjM2MSwwLjU2MywyLjc5LDAuODM2LDQuMjA4LDAuODM2YzIuODYyLDAsNS42NzYtMS4xMTYsNy43OC0zLjIyMmw1Ny41Mi01Ny41MTkNCgkJCQljMi4wNjMtMi4wNjMsMy4yMjItNC44NjEsMy4yMjItNy43NzhzLTEuMTU5LTUuNzE2LTMuMjIyLTcuNzc4TDkxLjYwNiwxNDMuNzAzeiIvPg0KCQkJPHBhdGggZD0iTTMzOC4zODIsMTQxLjMxOGMtNC4xMDctMS43LTguODQxLTAuNzYzLTExLjk4NywyLjM4NWwtNTcuNTIxLDU3LjUxOWMtMi4wNjIsMi4wNjMtMy4yMjIsNC44NjEtMy4yMjIsNy43NzgNCgkJCQlzMS4xNTgsNS43MTYsMy4yMjIsNy43NzdsNTcuNTIxLDU3LjUyYzIuMTA0LDIuMTA0LDQuOTE4LDMuMjIzLDcuNzc5LDMuMjIzYzEuNDE3LDAsMi44NDgtMC4yNzIsNC4yMDgtMC44MzgNCgkJCQljNC4xMS0xLjcwMyw2Ljc5LTUuNzE0LDYuNzktMTAuMTYyVjE1MS40ODFDMzQ1LjE3MiwxNDcuMDMyLDM0Mi40OTIsMTQzLjAyMSwzMzguMzgyLDE0MS4zMTh6Ii8+DQoJCQk8cGF0aCBkPSJNMjEyLDBoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2MzVjMCw2LjA3NSw0LjkyNSwxMSwxMSwxMWg2YzYuMDc1LDAsMTEtNC45MjUsMTEtMTFWMTFDMjIzLDQuOTI1LDIxOC4wNzUsMCwyMTIsMHoiDQoJCQkJLz4NCgkJCTxwYXRoIGQ9Ik0yMTIsOTUuMzUyaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjcyLjQ3M2MwLDYuMDc1LDQuOTI1LDExLDExLDExaDZjNi4wNzUsMCwxMS00LjkyNSwxMS0xMXYtNzIuNDczDQoJCQkJQzIyMywxMDAuMjc2LDIxOC4wNzUsOTUuMzUyLDIxMiw5NS4zNTJ6Ii8+DQoJCQk8cGF0aCBkPSJNMjEyLDIyOC4xNzZoLTZjLTYuMDc1LDAtMTEsNC45MjYtMTEsMTF2NzIuNDc0YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzQNCgkJCQlDMjIzLDIzMy4xMDIsMjE4LjA3NSwyMjguMTc2LDIxMiwyMjguMTc2eiIvPg0KCQkJPHBhdGggZD0iTTIxMiwzNjFoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2MzVjMCw2LjA3NSw0LjkyNSwxMSwxMSwxMWg2YzYuMDc1LDAsMTEtNC45MjUsMTEtMTF2LTM1DQoJCQkJQzIyMywzNjUuOTI1LDIxOC4wNzUsMzYxLDIxMiwzNjF6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ5Ny4xOTlweCIgaGVpZ2h0PSI0OTcuMTk5cHgiIHZpZXdCb3g9IjAgMCA0OTcuMTk5IDQ5Ny4xOTkiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ5Ny4xOTkgNDk3LjE5OTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTE5MS4yLDI0OC42YzAtMTUuMyw1LjctMjguNywxNy4yLTQwLjJzMjQuOS0xNy4yLDQwLjItMTcuMkwxOTEuMiwyNDguNnogTTE3NCwyNjUuOGMtMS45LTUuNy0xLjktMTEuNS0xLjktMTcuMg0KCQljMC00Mi4xLDM0LjQtNzYuNSw3Ni41LTc2LjVjNS43MDEsMCwxMS41LDAsMTcuMjAxLDEuOWw1MS42LTUxLjZjLTIxLTUuNy00NC03LjctNjguOS03LjdDNzYuNSwxMTQuNywwLDI0OC42LDAsMjQ4LjYNCgkJczMwLjYsNTMuNSw5Ny41LDkzLjdMMTc0LDI2NS44eiBNMzA2LDI0OC42TDI0OC42LDMwNmMxNS4zLDAsMjguNzAxLTUuNyw0MC4yMDEtMTcuMkMzMDAuMTk5LDI3Ny4zLDMwNiwyNjMuODk5LDMwNiwyNDguNnoNCgkJIE0zOTkuNjk5LDE1NC44OTlsLTc2LjUsNzYuNWMxLjksNS43LDEuOSwxMS41LDEuOSwxNy4yYzAsNDIuMS0zNC40LDc2LjUtNzYuNSw3Ni41Yy01LjcsMC0xMS41LDAtMTcuMi0xLjlMMTc5LjgsMzc0LjgNCgkJYzIxLDUuNyw0NCw3LjYsNjguOCw3LjZjMTcyLjA5OSwwLDI0OC41OTktMTMzLjksMjQ4LjU5OS0xMzMuOVM0NjYuNiwxOTUuMSwzOTkuNjk5LDE1NC44OTl6IE00MDEuNCw3Ni44OTlsLTMyNC41LDMyNC41DQoJCWwxOC45LDE4LjlMNDIwLjQsOTUuN0w0MDEuNCw3Ni44OTl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ4NS4yMTVweCINCiAgIGhlaWdodD0iNDg1LjIxNXB4Ig0KICAgdmlld0JveD0iMCAwIDQ4NS4yMTUgNDg1LjIxNSINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ4NS4yMTUgNDg1LjIxNTsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJfbGF5b3V0LXByb3BlcnRpZXMuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGUgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEwODkiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjY2NiINCiAgICAgaWQ9Im5hbWVkdmlldzM3Ig0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOnpvb209IjAuNDg2MzgyMzMiDQogICAgIGlua3NjYXBlOmN4PSItNzYuMzQ1OTcyIg0KICAgICBpbmtzY2FwZTpjeT0iNDA3LjA4NzE2Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNjQ5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNTAiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9IkNhcGFfMSIgLz48Zw0KICAgICBpZD0iZzEwMzQ5Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMzMuNjE5OTE5LDIwLjA0OTY5MykiPjxnDQogICAgICAgaWQ9IkxheWVyXzFfMTEwXyI+PGcNCiAgICAgICAgIGlkPSJnMTAzNTIiPjxwYXRoDQogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICAgIGQ9Im0gMTcuNTY3LDE1LjkzOCAtMi44NTksLTIuNzAyIGMgMC4zMzMsLTAuNjA1IDAuNTM5LC0xLjI5IDAuNTM5LC0yLjAyOSAwLC0yLjM0MiAtMS44OTcsLTQuMjM5IC00LjI0LC00LjIzOSAtMi4zNDMsMCAtNC4yNDMsMS44OTYgLTQuMjQzLDQuMjM5IDAsMi4zNDMgMS45LDQuMjQxIDQuMjQzLDQuMjQxIDAuODI2LDAgMS41OSwtMC4yNDYgMi4yNDIsLTAuNjU0IGwgMi44NTUsMi42OTkgYyAwLjQzMiwtMC41NzEgMC45MTksLTEuMDk0IDEuNDYzLC0xLjU1NSB6Ig0KICAgICAgICAgICBpZD0icGF0aDEwMzU0IiAvPjxwYXRoDQogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICAgIGQ9Im0gMjkuNjYsMTUuNiAzLjc5OSwtNi4zOTMgYyAwLjM3NCwwLjEwNyAwLjc2MiwwLjE4NCAxLjE2OSwwLjE4NCAyLjM0NywwIDQuMjQ0LC0xLjg5OCA0LjI0NCwtNC4yNDEgMCwtMi4zNDIgLTEuODk3LC00LjIzOSAtNC4yNDQsLTQuMjM5IC0yLjM0MywwIC00LjIzOSwxLjg5NiAtNC4yMzksNC4yMzkgMCwxLjE2MyAwLjQ2OSwyLjIxNCAxLjIyNywyLjk4MSBsIC0zLjc4Nyw2LjM3NSBjIDAuNjUxLDAuMjk1IDEuMjY1LDAuNjYzIDEuODMxLDEuMDk0IHoiDQogICAgICAgICAgIGlkPSJwYXRoMTAzNTYiIC8+PHBhdGgNCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgICAgZD0ibSA0Mi43NjIsMjAuOTUyIGMgLTEuODI0LDAgLTMuMzY5LDEuMTU5IC0zLjk2OCwyLjc3NSBsIC01LjI3OCwtMC41MjEgYyAwLDAuMDQgMC4wMDYsMC4wNzggMC4wMDYsMC4xMTcgMCwwLjY4OCAtMC4wNzYsMS4zNiAtMC4yMTMsMi4wMDkgbCA1LjI3NiwwLjUyMSBjIDAuMzE5LDIuMDI0IDIuMDYyLDMuNTc2IDQuMTc3LDMuNTc2IDIuMzQyLDAgNC4yMzgsLTEuODk2IDQuMjM4LC00LjIzOCAwLC0yLjM0MSAtMS44OTYsLTQuMjM5IC00LjIzOCwtNC4yMzkgeiINCiAgICAgICAgICAgaWQ9InBhdGgxMDM1OCIgLz48cGF0aA0KICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgICBkPSJtIDI4LjE5NywzNy42MjQgLTEuMTgsLTUuMTU2IGMgLTAuNjY2LDAuMjMyIC0xLjM1OSwwLjM5OCAtMi4wODIsMC40ODEgbCAxLjE4Miw1LjE1NyBjIC0xLjM1NSwwLjcwOSAtMi4yOSwyLjExIC0yLjI5LDMuNzQ2IDAsMi4zNDIgMS44OTYsNC4yMzcgNC4yNDMsNC4yMzcgMi4zNDIsMCA0LjIzOCwtMS44OTYgNC4yMzgsLTQuMjM3IDAuMDAzLC0yLjI5OSAtMS44MjksLTQuMTYgLTQuMTExLC00LjIyOCB6Ig0KICAgICAgICAgICBpZD0icGF0aDEwMzYwIiAvPjxjaXJjbGUNCiAgICAgICAgICAgY3g9IjIzLjgzIg0KICAgICAgICAgICBjeT0iMjMuMzIzIg0KICAgICAgICAgICByPSI3LjI3MDk5OTkiDQogICAgICAgICAgIGlkPSJjaXJjbGUxMDM2NCIgLz48L2c+PC9nPjwvZz48Zw0KICAgICBpZD0iZzEwMzY2Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM2OCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzNzAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzcyIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM3NCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzNzYiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzc4Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM4MCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzODIiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzg0Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM4NiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzODgiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzkwIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM5MiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzOTQiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzQzMjAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDQuNzU0NDI3MSwwLDAsNC43NTQ0MjcxLDcuODM5OTM2MSwyNjAuNzI3NDEpIj48Zw0KICAgICAgIGlkPSJnNDI4MCI+PHBhdGgNCiAgICAgICAgIGlkPSJwYXRoNDI4MiINCiAgICAgICAgIGQ9Im0gNDEuNTM0LDI4LjY2IDEuOTU3LDAgQyA0NC44NzcsMjguNjYgNDYsMjcuNTM2IDQ2LDI2LjE1IGwgMCwtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IGwgLTEuOTUxLDAgMCwwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgbCAwLjAwNiwwIDAsLTEuOTUxIEMgMjguNjYsMS4xMjQgMjcuNTM3LDAgMjYuMTUsMCBsIC02LjMsMCBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSBsIDAsMS45NTUgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IGwgMCwtMC4wMDUgLTEuOTUxLDAgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSBsIDAsNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIGwgMS45NjQsMCAtMC4wMDYsLTAuMDE1IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IDAsMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBsIDYuMywwIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIGwgMCwtMS45NSAtMC4wMDYsMCBjIDEuMjA3LC0wLjM5MiAyLjM2MywtMC44NTYgMy40NTcsLTEuNDQgbCAxLjM4MSwxLjM3OSBjIDAuOTgsMC45NzkgMi41NjgsMC45NzkgMy41NDcsMCBsIDQuNDQzLC00LjQ0NSBjIDAuOTc5LC0wLjk3OSAwLjk3OSwtMi41NjYgMCwtMy41NDcgbCAtMS4zODMsLTEuMzgzIGMgMC41ODQsLTEuMDk0IDEuMDY4LC0yLjI1IDEuNDM2LC0zLjQ1NyBsIDEwZS00LDAuMDEzIHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48Zw0KICAgICAgIGlkPSJnNDI4NCIgLz48Zw0KICAgICAgIGlkPSJnNDI4NiIgLz48Zw0KICAgICAgIGlkPSJnNDI4OCIgLz48Zw0KICAgICAgIGlkPSJnNDI5MCIgLz48Zw0KICAgICAgIGlkPSJnNDI5MiIgLz48Zw0KICAgICAgIGlkPSJnNDI5NCIgLz48Zw0KICAgICAgIGlkPSJnNDI5NiIgLz48Zw0KICAgICAgIGlkPSJnNDI5OCIgLz48Zw0KICAgICAgIGlkPSJnNDMwMCIgLz48Zw0KICAgICAgIGlkPSJnNDMwMiIgLz48Zw0KICAgICAgIGlkPSJnNDMwNCIgLz48Zw0KICAgICAgIGlkPSJnNDMwNiIgLz48Zw0KICAgICAgIGlkPSJnNDMwOCIgLz48Zw0KICAgICAgIGlkPSJnNDMxMCIgLz48Zw0KICAgICAgIGlkPSJnNDMxMiIgLz48L2c+PC9zdmc+\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ4OC43OHB4IiBoZWlnaHQ9IjQ4OC43OHB4IiB2aWV3Qm94PSIwIDAgNDg4Ljc4IDQ4OC43OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDg4Ljc4IDQ4OC43ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0xNDEuNDA4LDExOS44NzJjMTIuMjkzLTEzLjExMiwyOS42NTMtMjAuNzcsNDcuNjI0LTIwLjc3aDI0Ny40MDVWNDcuODI4YzAtMTIuNTY5LTEwLjQ2OC0yMi42NTItMjMuMDM2LTIyLjY1Mkg3NS4zOTcNCgkJCWMtMTIuNTc1LDAtMjIuNDkxLDEwLjA4My0yMi40OTEsMjIuNjUydjEwMS4wNDZoNjEuNDQ1TDE0MS40MDgsMTE5Ljg3MnoiLz4NCgkJPHBhdGggZD0iTTQ4My4wMTksMTQ5LjI1M2MtMS43MDktMS45MjQtMy43MTctMy41NS01LjkyMy00Ljc4Yy0zLjM1Mi0xLjg2MS03LjE1MS0yLjkyLTExLjA3MS0yLjkySDE4OS4wMzJsMCwwDQoJCQljLTYsMC0xMS43MzUsMi40MDktMTUuOTgzLDYuNjAxYy0wLjIxNCwwLjIwOC0wLjQyMywwLjQzOC0wLjYyNiwwLjY1MWwtOS4yNzUsOS45MTFsLTIzLjYyMiwyNS4yMDcNCgkJCWMtMC41NDIsMC41NzMtMS4xMDUsMS4yMTktMS42OTQsMS43MzZjLTQuMTEzLDMuNTcyLTkuNDEsNS42NjctMTQuOTE1LDUuNjY3aC0wLjAwNUgyMi43NjhsMCwwDQoJCQljLTUuNjg0LDAtMTEuMTExLDIuMDIyLTE1LjI3MSw1Ljc5MWMtMC42NjcsMC41ODktMS4yOTMsMS4xNzktMS44ODgsMS44NTdjLTAuNDE3LDAuNDc5LTAuODAzLDAuOTQ4LTEuMTgzLDEuNDU5DQoJCQljLTMuNDgyLDQuNzQ0LTUuMDIsMTAuNjYxLTQuMjE3LDE2LjU0MmwyNi40NzksMTk0LjE4MmMzLjU2NSwyNi4xNCwyMy41NTMsNDYuNjEyLDQ4LjY5Miw1MS4yODQNCgkJCWMzLjU5MiwwLjY2Nyw3LjI4OCwxLjE2MywxMS4wNTgsMS4xNjNoMzE0LjI2MWMyNy43NjEsMCw1MS41MjItMTkuMDAzLDU4LjM1NC00NS4xOTRjMC43MDQtMi43MDYsMS4yMjYtNS41NjcsMS41NTUtOC40Mg0KCQkJbDE1LjI2NS0xMzIuMjg5bDEyLjc3Mi0xMTAuNjc0YzAuMDY3LTAuNjQ3LDAuMTA4LTEuMjkzLDAuMTI1LTEuOTI5QzQ4OC45NDcsMTU5LjI5OSw0ODYuOTA5LDE1My42MjMsNDgzLjAxOSwxNDkuMjUzeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ4OXB4Ig0KICAgaGVpZ2h0PSI0ODkuMDAxcHgiDQogICB2aWV3Qm94PSIwIDAgNDg5IDQ4OS4wMDEiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0ODkgNDg5LjAwMTsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJuZXcuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjY5MCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNDgwIg0KICAgICBpZD0ibmFtZWR2aWV3MzciDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6em9vbT0iMC40ODI2MTY1OSINCiAgICAgaW5rc2NhcGU6Y3g9IjI0NC41Ig0KICAgICBpbmtzY2FwZTpjeT0iMjQ0LjUwMDUiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnDQogICAgIGlkPSJnMyINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjE5Njc2OSwwLDAsMC45NjE5Njc2OSw5LjAxMDc4NDgsMTApIj48cGF0aA0KICAgICAgIGQ9Ik0gMzU1Ljc2OCwwIDg2LjIxOCwwIEMgNTMuMzMsMCAyNi41NzcsMjYuNzUzIDI2LjU3Nyw1OS42MzYgbCAwLDM2OS43MjkgYyAwLDMyLjg4MyAyNi43NTIsNTkuNjM2IDU5LjY0MSw1OS42MzYgbCAzMTYuNTY2LDAgYyAzMi44ODksLTEwZS00IDU5LjY0MSwtMjYuNzU0IDU5LjY0MSwtNTkuNjM3IGwgMCwtMzIwLjIwNCBMIDM1NS43NjgsMCBaIG0gNDcuMDE2LDQ0Ni40NzkgLTMxNi41NjYsMCBjIC05LjQzNywwIC0xNy4xMTksLTcuNjc4IC0xNy4xMTksLTE3LjExMyBsIDAsLTM2OS43MyBjIDAsLTkuNDM3IDcuNjgzLC0xNy4xMTQgMTcuMTE5LC0xNy4xMTQgbCAyNDguNjQyLDAgMCw0Ny42MDQgYyAwLDIxLjA0MyAxNy4xMDksMzguMTYyIDM4LjE1MiwzOC4zNzUgbCA0Ni44OTEsMC40NzcgMCwzMDAuMzg4IGMgMCw5LjQzNSAtNy42ODQsMTcuMTEzIC0xNy4xMTksMTcuMTEzIHoiDQogICAgICAgaWQ9InBhdGg1Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnDQogICAgIGlkPSJnNyIgLz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIyNi42MzM5NDJtbSINCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iDQogICB2aWV3Qm94PSIwIDAgMjYuNjMzOTQyIDI2LjYyMjc2NSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlkPSJzdmc4Ig0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InBvcnRhbC5zdmciPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczIiPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUwMDgiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUwMDYiDQogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTAxNiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTAxNCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUxMTIiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUxMTAiDQogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTEyMCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTExOCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUzMzIiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUzMzAiDQogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjEuOTc5ODk5Ig0KICAgICBpbmtzY2FwZTpjeD0iNTUuNTM1Njg4Ig0KICAgICBpbmtzY2FwZTpjeT0iLTUxLjA2MDgxOSINCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgZml0LW1hcmdpbi10b3A9IjAiDQogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCINCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCINCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE1Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDcuNDExNjExLC04OS4yODgwNCkiPg0KICAgIDxyZWN0DQogICAgICAgcnk9IjAiDQogICAgICAgeT0iOTYuMTU3Mzc5Ig0KICAgICAgIHg9IjYxLjE2MTQ3MiINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNCINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxyZWN0DQogICAgICAgcnk9IjAiDQogICAgICAgeT0iMTAzLjAyNjczIg0KICAgICAgIHg9IjU0LjI5MjEyMiINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNC0zIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSI4OS4yODgwNCINCiAgICAgICB4PSI2OC4wMzA4MjMiDQogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiDQogICAgICAgd2lkdGg9IjUuOTk5OTk5NSINCiAgICAgICBpZD0icmVjdDU1MDQtMy01Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSIxMDkuODk2MDciDQogICAgICAgeD0iNDcuNDIyNzc5Ig0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0LTMtNS05Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03Ig0KICAgICAgIGQ9Im0gNjguMzg0OTY3LDEwMi4xMjA4OSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgNS42MDkzNTQsLTUuNzIxOTI4IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwODcgaCAtNS45MTcwNTMgdiA1LjkxMDcwNSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NjYzIg0KICAgICAgIGQ9Im0gNDguMjczMDExLDEwMS4xOTY0OCB2IC03LjU4MjA1MyBjIDAsLTEuOTE0MTQ0IDEuNDE5NTExLC0zLjQ1NTEzNCAzLjE4Mjc2MSwtMy40NTUxMzQgdiAwIGggMTQuNzY3MjcxIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjcyMjc5OTY2O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJyZWN0NTYxNyINCiAgICAgICBkPSJtIDczLjIzNzgxMywxMDIuODMwNDMgNGUtNiw5LjE1NDk4IGMgMCwxLjcyNzE4IC0xLjM4MzI2MywzLjExNzY2IC0zLjEwMTQ4NSwzLjExNzY2IEggNTUuODQ2MDc3Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjYxNTQ3MTEyO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03LTQiDQogICAgICAgZD0ibSA2MS41MTU2MTgsMTA4Ljk5MDIzIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjAwOTksLTAuMjA1MDkgSCA2MS4xOTc5NyB2IDUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMzE3NjM0LDAuMDE2MyB6Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03LTQtMyINCiAgICAgICBkPSJtIDU5LjkzNzk3NSw5Ni4xOTM4NzQgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1NCw1LjcyMTkyNiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA5IGggNS45MTcwNTMgdiAtNS45MTA3MTEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zLTAiDQogICAgICAgZD0ibSA1My4wNjg2MzMsMTAzLjA2MzIyIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtNS42MDkzNTMsNS43MjE5MyA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA4IGggNS45MTcwNTMgdiAtNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMzE3NjM0LC0wLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1LjY3OHB4IiBoZWlnaHQ9IjQ1LjY3OHB4IiB2aWV3Qm94PSIwIDAgNDUuNjc4IDQ1LjY3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuNjc4IDQ1LjY3ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0zOC45ODgsNi42ODljLTguOTE5LTguOTE4LTIzLjM4LTguOTE5LTMyLjMsMGMtOC45MTgsOC45MTktOC45MTcsMjMuMzgsMCwzMi4yOTljOC45Miw4LjkxOSwyMy4zODEsOC45MTksMzIuMywwDQoJCQlDNDcuOTA4LDMwLjA2OSw0Ny45MDYsMTUuNjA4LDM4Ljk4OCw2LjY4OXogTTIxLjg5MywzNi4wMTZjLTEuNzMsMC0yLjkwNi0xLjI3Mi0yLjkwNi0yLjk3MWMwLTEuNzMsMS4yMDktMi45NzIsMi45MDYtMi45NzINCgkJCWMxLjc2NCwwLDIuOTA2LDEuMjQxLDIuOTM4LDIuOTcyQzI0LjgzMSwzNC43NDIsMjMuNjU2LDM2LjAxNiwyMS44OTMsMzYuMDE2eiBNMjYuMjE1LDIxLjk4MWMtMS4zMiwxLjQ2Ni0xLjg1NiwyLjg2MS0xLjgyLDQuNDY4DQoJCQljMCwxLjE5My0wLjk2OSwyLjE2Mi0yLjE2MywyLjE2MkgyMS43N2MtMS4xODIsMC0yLjE0NS0wLjk0OS0yLjE2MS0yLjEzMWwtMC4wMDUtMC4zMTdjLTAuMTA3LTEuODIzLDAuNTAxLTMuNjgxLDIuMTA5LTUuNjExDQoJCQljMS4xNDUtMS4zNTksMi4wNzItMi41MDIsMi4wNzItMy43MThjMC0xLjI1LTAuODIyLTIuMDczLTIuNjA3LTIuMTQ2Yy0wLjU0OSwwLTEuMTUsMC4wOTMtMS43MzEsMC4yNTYNCgkJCWMtMS4wNTYsMC4yOTctMi4xNTYtMC4yOTgtMi40ODItMS4zNDVsLTAuMDA2LTAuMDJjLTAuMzI5LTEuMDU0LDAuMjQ3LTIuMTc1LDEuMjk0LTIuNTIzYzEuMTU3LTAuMzg1LDIuNTc0LTAuNjU3LDQuMTQtMC42NTcNCgkJCWM0LjcyLDAsNi44NjQsMi42MDksNi44NjQsNS41NzZDMjkuMjU2LDE4LjY5MiwyNy41NzUsMjAuNDc5LDI2LjIxNSwyMS45ODF6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ3MS42MDhweCINCiAgIGhlaWdodD0iNDcxLjYwOHB4Ig0KICAgdmlld0JveD0iMCAwIDQ3MS42MDggNDcxLjYwOCINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJyZWRvLnN2ZyI+PG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQxIj48cmRmOlJERj48Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICAgIGlkPSJkZWZzMzkiIC8+PHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxIg0KICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgICBncmlkdG9sZXJhbmNlPSIxMCINCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjI5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MTYiDQogICAgIGlkPSJuYW1lZHZpZXczNyINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIwLjUwMDQxNTYiDQogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0Ig0KICAgICBpbmtzY2FwZTpjeT0iMjM1LjgwNCINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9ImczIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMSwwLDAsMSw0NzMuNjA2MjEsMCkiPjxwYXRoDQogICAgICAgZD0ibSAzODQuNTM1MTksOTEuMDY3NzQ0IGMgLTgxLjQ1OTU0LC04MS40NTY4NzkxIC0yMTQuMDA4MDcsLTgxLjQ1Njg3OTEgLTI5NS40NjU4MjgsMCAtODEuNDU3NzY0MSw4MS40NTY4NzYgLTgxLjQ1Njg3ODEsMjE0LjAxMTYwNiAwLDI5NS40NjU4MjYgODEuNDU2ODY4LDgxLjQ1OTUzIDIxNC4wMDU0MDgsODEuNDU5NTMgMjk1LjQ2NTgyOCwwIDgxLjQ1OTUzLC04MS40NTMzNCA4MS40NTk1MywtMjE0LjAwMjc1IDAsLTI5NS40NjU4MjYgeiBNIDM2OC4zMjg4MywzNzAuMzM4NzIgYyAtNzIuNTE4NTksNzIuNTE4NTkgLTE5MC41MzYzLDcyLjUxODU5IC0yNjMuMDY2MzksMCAtNzIuNTE2ODE3LC03Mi41MzAwOSAtNzIuNTE2ODE3LC0xOTAuNTQyNSAwLC0yNjMuMDY3MjcgNzIuNTI5MiwtNzIuNTI2NTU5IDE5MC41MzYyOSwtNzIuNTI2NTU5IDI2My4wNjYzOSwwIDcyLjUyNTY3LDcyLjUyNDc3IDcyLjUyNTY3LDE5MC41MzcxOCAwLDI2My4wNjcyNyB6IG0gMTIuNDQzNDcsLTE5OC4xMjc2IC0xMS42MjA3Niw1Mi4zMjk3MSBjIC0wLjMxMzUsMS40NDcwNiAtMS43NDM3MywyLjM0NjgyIC0zLjE4MjgyLDIuMDM1OTggLTAuNDQwMTQsLTAuMDkzOSAtMTAuOTUwMzYsLTIuMzU4MzQgLTI2LjI5ODU4LC0yLjM1ODM0IC0yNS44ODk0NCwwIC03MS42MjQxMyw2Ljg1MTg0IC0xMDEuODMxNzIsNDkuNTUzMzggbCA2LjI5NjU2LDYuMjk2NTcgNzAuNTAzODYsMzAuNTU5MTcgYyAyLjM2NTQyLDEuMDM3MDMgMy43NTc1OCwzLjUwNjk1IDMuMzkxODMsNi4wNjcyIC0wLjM1MDcsMi41NDk2MiAtMi4zNjEsNC41NTQ2MSAtNC45MzA5OSw0Ljg3MzQyIGwgLTE3NS42MDUxOSwyMi45NTkwMSBjIC0xLjc1ODc5LDAuMjMwMjUgLTMuNTM4ODMsLTAuMzc3MjYgLTQuNzk3MjYsLTEuNjI3NzIgLTEuMjY2NCwtMS4yNjE5NyAtMS44NTUzMiwtMy4wMzY3IC0xLjYzNTY5LC00LjgwNjEyIGwgMjIuOTU5LC0xNzUuNjA3ODUgYyAwLjE2NDczLC0xLjI4NSAwLjc1MzY0LC0yLjQzNjI3IDEuNjIzMywtMy4zMDUwMyAwLjg1ODE0LC0wLjg1OTAzIDEuOTg5MDQsLTEuNDQ3OTUgMy4yNjM0MSwtMS42MzEyNyAyLjU0Njk3LC0wLjM1Nzc4IDUuMDE3NzcsMS4wMzcwMyA2LjA1MzkyLDMuMzk0NDggbCAzMC41NjcxNCw3MC41MDY1MiAwLjE1NzYzLDAuMTU3NjMgYyA0Ny4xNDE5MSwtNTkuNDAxMTcgMTE1LjQxNTg0LC02Ni40ODk0NiAxNDUuMDI4MzEsLTY2LjQ4OTQ2IDEzLjU0NjkzLDAgMjYuNjk2MjIsMS4zNDUyMiAzOC4wMjM4NCwzLjg4Njg3IDEuNDUzMjYsMC4zMzIxIDIuMzYzNjUsMS43NjMyMiAyLjAzNDIxLDMuMjA1ODUgeiINCiAgICAgICBpZD0icGF0aDUiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcNCiAgICAgaWQ9Imc3IiAvPjxnDQogICAgIGlkPSJnOSIgLz48Zw0KICAgICBpZD0iZzExIiAvPjxnDQogICAgIGlkPSJnMTMiIC8+PGcNCiAgICAgaWQ9ImcxNSIgLz48Zw0KICAgICBpZD0iZzE3IiAvPjxnDQogICAgIGlkPSJnMTkiIC8+PGcNCiAgICAgaWQ9ImcyMSIgLz48Zw0KICAgICBpZD0iZzIzIiAvPjxnDQogICAgIGlkPSJnMjUiIC8+PGcNCiAgICAgaWQ9ImcyNyIgLz48Zw0KICAgICBpZD0iZzI5IiAvPjxnDQogICAgIGlkPSJnMzEiIC8+PGcNCiAgICAgaWQ9ImczMyIgLz48Zw0KICAgICBpZD0iZzM1IiAvPjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDM5Mi42MiAzOTIuNjIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM5Mi42MiAzOTIuNjI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxyZWN0IHg9IjE0NC44NjYiIHk9IjMyMC44OTciIHdpZHRoPSIyMy41MDUiIGhlaWdodD0iMjUiLz4NCgk8cGF0aCBkPSJNMzA5Ljc5NSwwSDI2Ni40OUgxMjYuMTMxSDgyLjgyNUMzNy42NjcsMCwwLjkyOSwzNi43MzgsMC45MjksODEuODk2djIyOC44MjhjMCw0NS4xNTgsMzYuNzM4LDgxLjg5Niw4MS44OTYsODEuODk2aDU4LjMyDQoJCWgxMTMuNDQzaDU1LjIwNmM0NS4xNTcsMCw4MS44OTYtMzYuNzM4LDgxLjg5Ni04MS44OTZWODEuODk2QzM5MS42OTEsMzYuNzM4LDM1NC45NTIsMCwzMDkuNzk1LDB6IE0yNjYuNDksMzANCgkJYzE0LjM1NCwwLDI2LjAzLDkuNTQyLDI2LjAzLDIxLjI3VjE3NC4zM2MwLDExLjcyOS0xMS42NzcsMjEuMjcxLTI2LjAzLDIxLjI3MUgxMjYuMTMxYy0xNC4zNTQsMC0yNi4wMzEtOS41NDItMjYuMDMxLTIxLjI3MQ0KCQlWNTEuMjdjMC0xMS43MjgsMTEuNjc4LTIxLjI3LDI2LjAzMS0yMS4yN0gyNjYuNDl6IE0xNDEuMTQ2LDM2Mi42MmMtNi4yNTksMC0xMS4zNTItNS4wOTItMTEuMzUyLTExLjM1MXYtMzAuMDY2DQoJCWMwLTYuMjU5LDUuMDkzLTExLjM1MSwxMS4zNTItMTEuMzUxaDExMy40NDNjNi4yNTksMCwxMS4zNTEsNS4wOTIsMTEuMzUxLDExLjM1MXYzMC4wNjZjMCw2LjI1OS01LjA5MiwxMS4zNTEtMTEuMzUxLDExLjM1MQ0KCQlIMTQxLjE0NnogTTM2MS42OTEsMzEwLjcyNGMwLDI4LjYxNi0yMy4yOCw1MS44OTYtNTEuODk2LDUxLjg5NmgtMTUuNDUyYzEuMDMyLTMuNjEsMS41OTctNy40MTQsMS41OTctMTEuMzUxdi0zMC4wNjYNCgkJYzAtMjIuODAxLTE4LjU1LTQxLjM1MS00MS4zNTEtNDEuMzUxSDE0MS4xNDZjLTIyLjgwMiwwLTQxLjM1MiwxOC41NS00MS4zNTIsNDEuMzUxdjMwLjA2NmMwLDMuOTM3LDAuNTY1LDcuNzQyLDEuNTk3LDExLjM1MQ0KCQlIODIuODI1Yy0yOC42MTYsMC01MS44OTYtMjMuMjgtNTEuODk2LTUxLjg5NlY4MS44OTZjMC0yNS45MSwxOS4wODctNDcuNDQ0LDQzLjkzOC01MS4yODVDNzEuODExLDM2LjkzNSw3MC4xLDQzLjkyMSw3MC4xLDUxLjI3DQoJCVYxNzQuMzNjMCwyOC4yNzEsMjUuMTM2LDUxLjI3MSw1Ni4wMzEsNTEuMjcxSDI2Ni40OWMzMC44OTYsMCw1Ni4wMy0yMyw1Ni4wMy01MS4yNzFWNTEuMjdjMC03LjM0OC0xLjcxMS0xNC4zMzQtNC43NjctMjAuNjU5DQoJCWMyNC44NTEsMy44NDEsNDMuOTM4LDI1LjM3NSw0My45MzgsNTEuMjg1VjMxMC43MjR6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIyNi42MzM5NDJtbSINCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iDQogICB2aWV3Qm94PSIwIDAgMjYuNjMzOTQyIDI2LjYyMjc2NSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlkPSJzdmc4Ig0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InNldHRpbmdzLnN2ZyI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzMiI+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTAwOCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTAwNiINCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGg1MDE2Ig0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGg1MDE0Ig0KICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTExMiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTExMCINCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGg1MTIwIg0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGg1MTE4Ig0KICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTMzMiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTMzMCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICA8L2RlZnM+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iMS45Nzk4OTkiDQogICAgIGlua3NjYXBlOmN4PSI1NS41MzU2ODgiDQogICAgIGlua3NjYXBlOmN5PSItNTEuMDYwODE5Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTUiPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Ny40MTE2MTEsLTg5LjI4ODA0KSI+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSI5Ni4xNTczNzkiDQogICAgICAgeD0iNjEuMTYxNDcyIg0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSIxMDMuMDI2NzMiDQogICAgICAgeD0iNTQuMjkyMTIyIg0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0LTMiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHJ5PSIwIg0KICAgICAgIHk9Ijg5LjI4ODA0Ig0KICAgICAgIHg9IjY4LjAzMDgyMyINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNC0zLTUiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHJ5PSIwIg0KICAgICAgIHk9IjEwOS44OTYwNyINCiAgICAgICB4PSI0Ny40MjI3NzkiDQogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiDQogICAgICAgd2lkdGg9IjUuOTk5OTk5NSINCiAgICAgICBpZD0icmVjdDU1MDQtMy01LTkiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTciDQogICAgICAgZD0ibSA2OC4zODQ5NjcsMTAyLjEyMDg5IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MjggNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4wMDk5LC0wLjIwNTA4NyBoIC01LjkxNzA1MyB2IDUuOTEwNzA1IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjMxNzYzNCwwLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDU2NjMiDQogICAgICAgZD0ibSA0OC4yNzMwMTEsMTAxLjE5NjQ4IHYgLTcuNTgyMDUzIGMgMCwtMS45MTQxNDQgMS40MTk1MTEsLTMuNDU1MTM0IDMuMTgyNzYxLC0zLjQ1NTEzNCB2IDAgaCAxNC43NjcyNzEiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNzIyNzk5NjY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InJlY3Q1NjE3Ig0KICAgICAgIGQ9Im0gNzMuMjM3ODEzLDEwMi44MzA0MyA0ZS02LDkuMTU0OTggYyAwLDEuNzI3MTggLTEuMzgzMjYzLDMuMTE3NjYgLTMuMTAxNDg1LDMuMTE3NjYgSCA1NS44NDYwNzciDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNjE1NDcxMTI7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNCINCiAgICAgICBkPSJtIDYxLjUxNTYxOCwxMDguOTkwMjMgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDUuNjA5MzU0LC01LjcyMTkyIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwOSBIIDYxLjE5Nzk3IHYgNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zIg0KICAgICAgIGQ9Im0gNTkuOTM3OTc1LDk2LjE5Mzg3NCBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTUuNjA5MzU0LDUuNzIxOTI2IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDkgaCA1LjkxNzA1MyB2IC01LjkxMDcxMSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMzE3NjM0LC0wLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMtMCINCiAgICAgICBkPSJtIDUzLjA2ODYzMywxMDMuMDYzMjIgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1Myw1LjcyMTkzIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDggaCA1LjkxNzA1MyB2IC01LjkxMDcxIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPGcNCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjI5MzM0MjM5LDAsMCwwLjI5MzM0MjM5LDYwLjU1MTgwMywxMDIuNDE3MDUpIg0KICAgICAgIGlkPSJnNTQ4NiI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczIj4NCiAgICAgICAgPHBhdGgNCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgICAgZD0ibSA0MS41MzQsMjguNjYgaCAxLjk1NyBDIDQ0Ljg3NywyOC42NiA0NiwyNy41MzYgNDYsMjYuMTUgdiAtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IEggNDEuNTQgdiAwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgSCAyOC42NiBWIDIuNTEgQyAyOC42NiwxLjEyNCAyNy41MzcsMCAyNi4xNSwwIGggLTYuMyBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSB2IDEuOTU1IGwgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IFYgMTcuMzQxIEggMi41MDkgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSB2IDYuMzAxIGMgMCwxLjM4NyAxLjEyNCwyLjUxMSAyLjUwOSwyLjUxMSBIIDQuNDczIEwgNC40NjcsMjguNjQ3IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IHYgMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBoIDYuMyBjIDEuMzg3LDAgMi41MSwtMS4xMjMgMi41MSwtMi41MSB2IC0xLjk1IGggLTAuMDA2IGMgMS4yMDcsLTAuMzkyIDIuMzYzLC0wLjg1NiAzLjQ1NywtMS40NCBsIDEuMzgxLDEuMzc5IGMgMC45OCwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0NywwIGwgNC40NDMsLTQuNDQ1IGMgMC45NzksLTAuOTc5IDAuOTc5LC0yLjU2NiAwLC0zLjU0NyBsIC0xLjM4MywtMS4zODMgYyAwLjU4NCwtMS4wOTQgMS4wNjgsLTIuMjUgMS40MzYsLTMuNDU3IHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiDQogICAgICAgICAgIGlkPSJwYXRoNSIgLz4NCiAgICAgIDwvZz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzciIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9Imc5IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMTEiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcxMyIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzE1IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMTciIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcxOSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzIxIiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMjMiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcyNSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzI3IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMjkiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczMSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzMzIiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzUiIC8+DQogICAgPC9nPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjczLjA1OHB4IiBoZWlnaHQ9IjczLjA1OHB4IiB2aWV3Qm94PSIwIDAgNzMuMDU4IDczLjA1OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzMuMDU4IDczLjA1ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGcgaWQ9IkV5ZSI+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTcyLjg5MywzNS45NjVjLTAuNTgtMC45MjUtMTQuNDMyLTIyLjU0MS0zNS4xNi0yMi41NDFoLTIuNDA2Yy0yMC43MjksMC0zNC41OCwyMS42MTYtMzUuMTU5LDIyLjU0MQ0KCQkJCWMtMC4yMjMsMC4zNDctMC4yMjMsMC43OSwwLDEuMTM3YzAuNTc5LDAuOTE3LDE0LjQzMiwyMi41MzIsMzUuMTU5LDIyLjUzMmgyLjQwNmMyMC43MjksMCwzNC41OC0yMS42MTUsMzUuMTU5LTIyLjUzMg0KCQkJCUM3My4xMTMsMzYuNzU1LDczLjExMywzNi4zMTIsNzIuODkzLDM1Ljk2NXogTTQ1LjI2NywzNi41MjljMCw0LjY5LTMuOTIsOC41MDYtOC43MzYsOC41MDZjLTQuODE3LDAtOC43MzUtMy44MTItOC43MzUtOC41MDYNCgkJCQljMC00LjY4NywzLjkxOC04LjUwOCw4LjczNS04LjUwOEM0MS4zNDcsMjguMDIyLDQ1LjI2NywzMS44NDQsNDUuMjY3LDM2LjUyOXoiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ3MS42MDhweCINCiAgIGhlaWdodD0iNDcxLjYwOHB4Ig0KICAgdmlld0JveD0iMCAwIDQ3MS42MDggNDcxLjYwOCINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJ1bmRvLnN2ZyI+PG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQxIj48cmRmOlJERj48Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICAgIGlkPSJkZWZzMzkiIC8+PHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxIg0KICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgICBncmlkdG9sZXJhbmNlPSIxMCINCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjI5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MTYiDQogICAgIGlkPSJuYW1lZHZpZXczNyINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIwLjUwMDQxNTYiDQogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0Ig0KICAgICBpbmtzY2FwZTpjeT0iMjM1LjgwNCINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9ImczIj48cGF0aA0KICAgICAgIGQ9Im0gMzg0LjUzNTE5LDkxLjA2Nzc0NCBjIC04MS40NTk1NCwtODEuNDU2ODc5MSAtMjE0LjAwODA3LC04MS40NTY4NzkxIC0yOTUuNDY1ODI4LDAgLTgxLjQ1Nzc2NDEsODEuNDU2ODc2IC04MS40NTY4NzgxLDIxNC4wMTE2MDYgMCwyOTUuNDY1ODI2IDgxLjQ1Njg2OCw4MS40NTk1MyAyMTQuMDA1NDA4LDgxLjQ1OTUzIDI5NS40NjU4MjgsMCA4MS40NTk1MywtODEuNDUzMzQgODEuNDU5NTMsLTIxNC4wMDI3NSAwLC0yOTUuNDY1ODI2IHogTSAzNjguMzI4ODMsMzcwLjMzODcyIGMgLTcyLjUxODU5LDcyLjUxODU5IC0xOTAuNTM2Myw3Mi41MTg1OSAtMjYzLjA2NjM5LDAgLTcyLjUxNjgxNywtNzIuNTMwMDkgLTcyLjUxNjgxNywtMTkwLjU0MjUgMCwtMjYzLjA2NzI3IDcyLjUyOTIsLTcyLjUyNjU1OSAxOTAuNTM2MjksLTcyLjUyNjU1OSAyNjMuMDY2MzksMCA3Mi41MjU2Nyw3Mi41MjQ3NyA3Mi41MjU2NywxOTAuNTM3MTggMCwyNjMuMDY3MjcgeiBtIDEyLjQ0MzQ3LC0xOTguMTI3NiAtMTEuNjIwNzYsNTIuMzI5NzEgYyAtMC4zMTM1LDEuNDQ3MDYgLTEuNzQzNzMsMi4zNDY4MiAtMy4xODI4MiwyLjAzNTk4IC0wLjQ0MDE0LC0wLjA5MzkgLTEwLjk1MDM2LC0yLjM1ODM0IC0yNi4yOTg1OCwtMi4zNTgzNCAtMjUuODg5NDQsMCAtNzEuNjI0MTMsNi44NTE4NCAtMTAxLjgzMTcyLDQ5LjU1MzM4IGwgNi4yOTY1Niw2LjI5NjU3IDcwLjUwMzg2LDMwLjU1OTE3IGMgMi4zNjU0MiwxLjAzNzAzIDMuNzU3NTgsMy41MDY5NSAzLjM5MTgzLDYuMDY3MiAtMC4zNTA3LDIuNTQ5NjIgLTIuMzYxLDQuNTU0NjEgLTQuOTMwOTksNC44NzM0MiBsIC0xNzUuNjA1MTksMjIuOTU5MDEgYyAtMS43NTg3OSwwLjIzMDI1IC0zLjUzODgzLC0wLjM3NzI2IC00Ljc5NzI2LC0xLjYyNzcyIC0xLjI2NjQsLTEuMjYxOTcgLTEuODU1MzIsLTMuMDM2NyAtMS42MzU2OSwtNC44MDYxMiBsIDIyLjk1OSwtMTc1LjYwNzg1IGMgMC4xNjQ3MywtMS4yODUgMC43NTM2NCwtMi40MzYyNyAxLjYyMzMsLTMuMzA1MDMgMC44NTgxNCwtMC44NTkwMyAxLjk4OTA0LC0xLjQ0Nzk1IDMuMjYzNDEsLTEuNjMxMjcgMi41NDY5NywtMC4zNTc3OCA1LjAxNzc3LDEuMDM3MDMgNi4wNTM5MiwzLjM5NDQ4IGwgMzAuNTY3MTQsNzAuNTA2NTIgMC4xNTc2MywwLjE1NzYzIGMgNDcuMTQxOTEsLTU5LjQwMTE3IDExNS40MTU4NCwtNjYuNDg5NDYgMTQ1LjAyODMxLC02Ni40ODk0NiAxMy41NDY5MywwIDI2LjY5NjIyLDEuMzQ1MjIgMzguMDIzODQsMy44ODY4NyAxLjQ1MzI2LDAuMzMyMSAyLjM2MzY1LDEuNzYzMjIgMi4wMzQyMSwzLjIwNTg1IHoiDQogICAgICAgaWQ9InBhdGg1Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnDQogICAgIGlkPSJnNyIgLz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ3Ljg4NzMxIgogICB2aWV3Qm94PSIwIDAgMTYzLjEyNSA0NC44OTQzNTQiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMi4yICg3MzJhMDFkYTYzLCAyMDIyLTEyLTA5KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iY29tcGFydG1lbnQuc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDQwMSIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTYiCiAgICAgaW5rc2NhcGU6Y3g9IjkzLjMxMjg0MSIKICAgICBpbmtzY2FwZTpjeT0iMTQuNTIwOTQzIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU2MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMzY5IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIxOTEyIgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIgogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc0LjQ1MDM1LC0zMTYuMDU0MzYpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc1ODYxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuMjc4MjMiCiAgICAgICBoZWlnaHQ9IjQxLjEzNTczOCIKICAgICAgIHg9IjI3Ni40MTc4MiIKICAgICAgIHk9IjMxNy45MzM2NSIKICAgICAgIHJ5PSIyLjk1MjYyMTUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxHb29nbGUgRHJpdmVcdG9vbGJhclxtYWNyb21vbGVjdWxlLnBuZyIKICAgICAgIHJ4PSI0Ni44NTAxNjYiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0icmVjdDI5ODUiIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMDMuODM1MTEiCiAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzAzLjgzNTExIgogICAgICAgICB5PSIzNDIuNTQ0NDkiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkNvbXBhcnRtZW50PC90c3Bhbj48L3RleHQ+CiAgPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MzAwMSIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MzE0IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjIuMiAoNzMyYTAxZGE2MywgMjAyMi0xMi0wOSkiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvbXBsZXguc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDQwMSIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNS42NTY4NTQzIgogICAgIGlua3NjYXBlOmN4PSI2MC44MTExODMiCiAgICAgaW5rc2NhcGU6Y3k9IjIzLjE1Nzc0NyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAwOSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgdW5pdHM9InB4IgogICAgIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9ImZhbHNlIgogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIKICAgICBib3JkZXJsYXllcj0idHJ1ZSIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjIzMTI3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODkzNzQiCiAgICAgICBoZWlnaHQ9IjM4LjQzNDA0IgogICAgICAgeD0iMjc3LjY4MDYiCiAgICAgICB5PSIzMTkuMjg0NjEiCiAgICAgICByeT0iMCIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgeD0iMzI0LjcxNjA5IgogICAgICAgeT0iMzQyLjY5MTAxIgogICAgICAgaWQ9InRleHQ4MTgiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW44MTYiCiAgICAgICAgIHg9IjMyNC43MTYwOSIKICAgICAgICAgeT0iMzQyLjY5MTAxIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5Db21wbGV4PC90c3Bhbj48L3RleHQ+CiAgICA8cmVjdAogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC45Mzc1O3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDYyMzUiCiAgICAgICB3aWR0aD0iOC40Mzc1IgogICAgICAgaGVpZ2h0PSI4LjQzNzUiCiAgICAgICB4PSIyNzYuMDY0OTciCiAgICAgICB5PSIzMTcuNjY4OTgiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMS4yNTQ5ODY4ZS02KSIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjkzNzU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NTU3NyIKICAgICAgIHdpZHRoPSI4LjQzNzUiCiAgICAgICBoZWlnaHQ9IjguNDM3NSIKICAgICAgIHg9IjQzMC43NTI0NyIKICAgICAgIHk9IjMxNy42Njg5OCIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjkzNzU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NjIyMSIKICAgICAgIHdpZHRoPSI4LjQzNzUiCiAgICAgICBoZWlnaHQ9IjguNDM3NSIKICAgICAgIHg9IjQzMC43NTI0NyIKICAgICAgIHk9IjM1MC44OTY3OSIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjkzNzU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NjIyMyIKICAgICAgIHdpZHRoPSI4LjQzNzUiCiAgICAgICBoZWlnaHQ9IjguNDM3NSIKICAgICAgIHg9IjI3Ni4wNjQ5NyIKICAgICAgIHk9IjM1MC44OTY3OSIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjkzNzUiCiAgICAgICBpZD0icmVjdDYyMzMiCiAgICAgICB3aWR0aD0iMi4zNDM3NSIKICAgICAgIGhlaWdodD0iMTEuNjcxODc1IgogICAgICAgeD0iNTU1LjUyNDcyIgogICAgICAgeT0iLTYyLjMwMjQzNyIKICAgICAgIHRyYW5zZm9ybT0icm90YXRlKDQ1LDEuMzQzMTA1MWUtNiwtMi4zMzExNTE3ZS02KSIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjkzNzUiCiAgICAgICBpZD0icmVjdDYyMzEiCiAgICAgICB3aWR0aD0iMi4zNDM3NSIKICAgICAgIGhlaWdodD0iMTEuNjcxODc1IgogICAgICAgeD0iLTc5LjE1NDg4NCIKICAgICAgIHk9Ii01NDEuMDE2MDUiCiAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSgxMzUpIiAvPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuOTM3NSIKICAgICAgIGlkPSJyZWN0NjIzNyIKICAgICAgIHdpZHRoPSIyLjM0Mzc1IgogICAgICAgaGVpZ2h0PSIxMS42NzE4NzUiCiAgICAgICB4PSI0MjYuNjA2NzUiCiAgICAgICB5PSIyMy41ODI1MzciCiAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSg0NSkiIC8+CiAgICA8cmVjdAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC45Mzc1IgogICAgICAgaWQ9InJlY3QzNzAwIgogICAgICAgd2lkdGg9IjIuMzQzNzUiCiAgICAgICBoZWlnaHQ9IjExLjY3MTg3NSIKICAgICAgIHg9IjQ5Ljc2MzExMSIKICAgICAgIHk9Ii00NTUuMTMxMDciCiAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSgxMzUpIiAvPgogIDwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTczLjk5OTM3IgogICBoZWlnaHQ9IjQ1LjA4MjAwMSIKICAgdmlld0JveD0iMCAwIDE2My4xMjQ0MiA0Mi4yNjQzNzYiCiAgIGlkPSJzdmc0Mzk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMi4yICg3MzJhMDFkYTYzLCAyMDIyLTEyLTA5KSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZmFtaWx5LnN2ZyIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQ0MDEiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjExLjIiCiAgICAgaW5rc2NhcGU6Y3g9Ijc3Ljc2Nzg1NyIKICAgICBpbmtzY2FwZTpjeT0iNDAuMzU3MTQzIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU2MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMzY5IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIxOTEyIgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIgogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk4LC0zMTcuMDY5NzcpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjI1NTExODM3O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0Mjk4NSIKICAgICAgIHdpZHRoPSIxNTkuODY5MjkiCiAgICAgICBoZWlnaHQ9IjM5LjAwOTI1OCIKICAgICAgIHg9IjI3Ny42OTI1NCIKICAgICAgIHk9IjMxOC42OTczMyIKICAgICAgIHJ5PSIwIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcR29vZ2xlIERyaXZlXHRvb2xiYXJcbWFjcm9tb2xlY3VsZS5wbmciIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMzIuODYwMzIiCiAgICAgICB5PSIzNDIuMzkxNDIiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzMyLjg2MDMyIgogICAgICAgICB5PSIzNDIuMzkxNDIiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkZhbWlseTwvdHNwYW4+PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTc0IgogICBoZWlnaHQ9IjQ0LjQ0MjgyMiIKICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2IgogICBpZD0ic3ZnNDM5OSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjIuMiAoNzMyYTAxZGE2MywgMjAyMi0xMi0wOSkiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImdlbmUuc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDQwMSIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMy45NTk3OTgiCiAgICAgaW5rc2NhcGU6Y3g9Ii0zNS44NjA0MTYiCiAgICAgaW5rc2NhcGU6Y3k9IjM4LjYzODMzNSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAwOSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgdW5pdHM9InB4IgogICAgIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiCiAgICAgaW5rc2NhcGU6ZGVza2NvbG9yPSIjZDFkMWQxIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQ0MDQiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzYuMDY0OTcsLTMxNy42Njg5NykiPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNjg3NTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDI5ODUiCiAgICAgICB3aWR0aD0iMTYxLjQzNzUyIgogICAgICAgaGVpZ2h0PSIzOS45Nzc2NDYiCiAgICAgICB4PSIyNzYuOTA4NzIiCiAgICAgICB5PSIzMTguNTEyNzMiCiAgICAgICByeT0iMTAuMzE2Nzk0IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUzLjk1OTk5OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcR29vZ2xlIERyaXZlXHRvb2xiYXJcbWFjcm9tb2xlY3VsZS5wbmciIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4PSIzMzguMDc1NDciCiAgICAgICB5PSIzNDMuOTQ3MTEiCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjgxNiIKICAgICAgICAgeD0iMzM4LjA3NTQ3IgogICAgICAgICB5PSIzNDMuOTQ3MTEiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkdlbmU8L3RzcGFuPjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIxNzQiDQogICBoZWlnaHQ9IjQ0LjQ0MjgyMiINCiAgIHZpZXdCb3g9IjAgMCAxNjMuMTI1IDQxLjY2NTE0NiINCiAgIGlkPSJzdmc0Mzk5Ig0KICAgdmVyc2lvbj0iMS4xIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InByb2Nlc3Muc3ZnIj4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0NDAxIiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjEuNCINCiAgICAgaW5rc2NhcGU6Y3g9Ii02MC4yNDgwNzYiDQogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICB1bml0cz0icHgiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4NCiAgICA8dGV4dA0KICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjguMTI1cHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45Mzc1cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICB4PSIzMjguNzE1MTIiDQogICAgICAgeT0iMzQzLjg0MDkxIg0KICAgICAgIGlkPSJ0ZXh0ODE4Ij48dHNwYW4NCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiDQogICAgICAgICBpZD0idHNwYW44MTYiDQogICAgICAgICB4PSIzMjguNzE1MTIiDQogICAgICAgICB5PSIzNDMuODQwOTEiDQogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5Qcm9jZXNzPC90c3Bhbj48L3RleHQ+DQogIDwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9ICI0NCIgaGVpZ2h0PSAiNDQiIHZpZXdCb3g9IjAgMCA0NCA0NCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDQ0IDQ0Ij4NCiAgPGNpcmNsZSBjeD0iMjIiIGN5PSIyMiIgcj0iMjIiIGZpbGw9IiNmZmYiLz4NCiAgPHBhdGggZD0ibTIyLDBjLTEyLjIsMC0yMiw5LjgtMjIsMjJzOS44LDIyIDIyLDIyIDIyLTkuOCAyMi0yMi05LjgtMjItMjItMjJ6bS0xLjMsMTkuM2wtMS40LDEuNGMtMC40LDAuNC0xLDAuNC0xLjQsMGwtNC00Yy0wLjMtMC4zLTAuOS0wLjEtMC45LDAuNHYxYzAsMC42LTAuNCwxLTEsMWgtMmMtMC42LDAtMS0wLjQtMS0xdi04YzAtMC42IDAuNC0xIDEtMWg4YzAuNiwwIDEsMC40IDEsMXYyYzAsMC42LTAuNCwxLTEsMWgtMWMtMC40LDAtMC43LDAuNS0wLjQsMC45bDQsNGMwLjUsMC4zIDAuNSwwLjkgMC4xLDEuM3ptMTQuMywxNC43YzAsMC42LTAuNCwxLTEsMWgtOGMtMC42LDAtMS0wLjQtMS0xdi0yYzAtMC42IDAuNC0xIDEtMWgxYzAuNCwwIDAuNy0wLjUgMC40LTAuOWwtNC00Yy0wLjQtMC40LTAuNC0xIDAtMS40bDEuNC0xLjRjMC40LTAuNCAxLTAuNCAxLjQsMGw0LDRjMC4zLDAuMyAwLjksMC4xIDAuOS0wLjR2LTFjMC0wLjYgMC40LTEgMS0xaDJjMC42LDAgMSwwLjQgMSwxdjguMWgtMC4xeiIvPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iYWN0aXZhdGVzLnN2ZyINCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyINCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiDQogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIg0KICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQiPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0ibWFya2VyMTIwMiINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDEyMDAiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDk1OSINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICA8L2RlZnM+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTU5Ig0KICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyINCiAgICAgaW5rc2NhcGU6Y3k9IjE4LjQ2ODYyMSINCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4Ig0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgZml0LW1hcmdpbi10b3A9IjAiDQogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCINCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCINCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE3Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGUgLz4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4NCiAgICA8cGF0aA0KICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjMuNzQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDQ3LjM1MDg5Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTp0eXBlPSJzdGFyIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiDQogICAgICAgaWQ9InBhdGg0OTUzIg0KICAgICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICAgIHNvZGlwb2RpOmN4PSIyMTIuNDI5MDIiDQogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiINCiAgICAgICBzb2RpcG9kaTpyMT0iMTEuMDU3MzQ3Ig0KICAgICAgIHNvZGlwb2RpOnIyPSI1LjUyODY3MzYiDQogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiINCiAgICAgICBzb2RpcG9kaTphcmcyPSIxLjk2MTY0NTUiDQogICAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJ0cnVlIg0KICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiDQogICAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgICBkPSJtIDIxOS4xNzY1MiwyNjIuNTU4MTggLTE3LjcwNzU3LC03LjI5NjM3IDE1LjE3MjYyLC0xMS42ODcwMSB6Ig0KICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSINCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9IjAuMDc4NDg5NjUzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzk0MzQwOTgsMC44OTk3NzUwNCwtMC45MTg5NjQxOSwwLjM4NjEwNjYzLDQ3NC45ODU4MywxLjM2MTczMjkpIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iYmluZHMuc3ZnIg0KICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCINCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiDQogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzNCI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJtYXJrZXIxMjAyIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoMTIwMCINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoOTU5Ig0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogIDwvZGVmcz4NCiAgPHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBpZD0iYmFzZSINCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIg0KICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiDQogICAgIGlua3NjYXBlOmN4PSItNC44MTEwMzU3Ig0KICAgICBpbmtzY2FwZTpjeT0iMTguNDY4NjIxIg0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTciPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPg0KICAgIDxwYXRoDQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgZD0ibSAyNzUuNjQyNDcsMjkwLjU3MTc1IGggNjAuOTM3NSINCiAgICAgICBpZD0icGF0aDQ5NDkiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iaW5kdWNlcy5zdmciDQogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciDQogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMzAwIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCINCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0Ij4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9Im1hcmtlcjEyMDIiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGgxMjAwIg0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJUcmlhbmdsZU91dEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5NTkiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSINCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciDQogICAgIGlua3NjYXBlOmN5PSIxOC40Njg2MjEiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPg0KICA8bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNyI+DQogICAgPHJkZjpSREY+DQogICAgICA8Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPg0KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICAgICAgPGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4NCiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+DQogICAgICA8L2NjOldvcms+DQogICAgPC9yZGY6UkRGPg0KICA8L21ldGFkYXRhPg0KICA8Zw0KICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSINCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciINCiAgICAgaWQ9ImxheWVyMSINCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+DQogICAgPHBhdGgNCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo3LjQ5OTk5OTg3LDcuNDk5OTk5ODc7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowIg0KICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDQ3LjM1MDg5Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTp0eXBlPSJzdGFyIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiDQogICAgICAgaWQ9InBhdGg0OTUzIg0KICAgICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICAgIHNvZGlwb2RpOmN4PSIyMTIuNDI5MDIiDQogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiINCiAgICAgICBzb2RpcG9kaTpyMT0iMTEuMDU3MzQ3Ig0KICAgICAgIHNvZGlwb2RpOnIyPSI1LjUyODY3MzYiDQogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiINCiAgICAgICBzb2RpcG9kaTphcmcyPSIxLjk2MTY0NTUiDQogICAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJ0cnVlIg0KICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiDQogICAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgICBkPSJtIDIxOS4xNzY1MiwyNjIuNTU4MTggLTE3LjcwNzU3LC03LjI5NjM3IDE1LjE3MjYyLC0xMS42ODcwMSB6Ig0KICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSINCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9IjAuMDc4NDg5NjUzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzk0MzQwOTgsMC44OTk3NzUwNCwtMC45MTg5NjQxOSwwLjM4NjEwNjYzLDQ3NC45ODU4MywxLjM2MTczMjkpIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iaW5oaWJpdHMuc3ZnIg0KICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCINCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiDQogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzNCI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlN0b3BMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwLjAiDQogICAgICAgcmVmWD0iMC4wIg0KICAgICAgIGlkPSJTdG9wTCINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDk4NiINCiAgICAgICAgIGQ9Ik0gMC4wLDUuNjUgTCAwLjAsLTUuNjUiDQogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIgLz4NCiAgICA8L21hcmtlcj4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9Im1hcmtlcjEyMDIiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGgxMjAwIg0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJUcmlhbmdsZU91dEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5NTkiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSINCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciDQogICAgIGlua3NjYXBlOmN5PSIxMy45MjI5MzQiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPg0KICA8bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNyI+DQogICAgPHJkZjpSREY+DQogICAgICA8Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPg0KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICAgICAgPGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4NCiAgICAgICAgPGRjOnRpdGxlIC8+DQogICAgICA8L2NjOldvcms+DQogICAgPC9yZGY6UkRGPg0KICA8L21ldGFkYXRhPg0KICA8Zw0KICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSINCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciINCiAgICAgaWQ9ImxheWVyMSINCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+DQogICAgPHBhdGgNCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA1OS43ODA1Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi43NzU5Mzc1NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo4LjMyNzgxMjQ2LCAyLjc3NTkzNzQ5O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIg0KICAgICAgIGlkPSJyZWN0NDk4MSINCiAgICAgICB3aWR0aD0iMC45NzQxNjk1NSINCiAgICAgICBoZWlnaHQ9IjE1Ljg4OTcwMyINCiAgICAgICB4PSIzMzQuMjE3ODMiDQogICAgICAgeT0iMjgyLjYyNjg5IiAvPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0icmVwcmVzc2VzLnN2ZyINCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyINCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiDQogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIg0KICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQiPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJTdG9wTCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMC4wIg0KICAgICAgIHJlZlg9IjAuMCINCiAgICAgICBpZD0iU3RvcEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5ODYiDQogICAgICAgICBkPSJNIDAuMCw1LjY1IEwgMC4wLC01LjY1Ig0KICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJtYXJrZXIxMjAyIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoMTIwMCINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoOTU5Ig0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogIDwvZGVmcz4NCiAgPHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBpZD0iYmFzZSINCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIg0KICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiDQogICAgIGlua3NjYXBlOmN4PSItMjUuMzI5NzU5Ig0KICAgICBpbmtzY2FwZTpjeT0iMTMuOTIyOTM0Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTciPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZSAvPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPg0KICAgIDxwYXRoDQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6Ny40OTk5OTk4NywgNy40OTk5OTk4NztzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgZD0ibSAyNzUuNjQyNDcsMjkwLjU3MTc1IGggNTkuNzgwNSINCiAgICAgICBpZD0icGF0aDQ5NDkiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuNzc1OTM3NTY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6OC4zMjc4MTIzNSwgMi43NzU5Mzc0NTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSINCiAgICAgICBpZD0icmVjdDQ5ODEiDQogICAgICAgd2lkdGg9IjAuOTc0MTY5NTUiDQogICAgICAgaGVpZ2h0PSIxNS44ODk3MDMiDQogICAgICAgeD0iMzMyLjM0MjgzIg0KICAgICAgIHk9IjI4Mi42MjY4OSIgLz4NCiAgPC9nPg0KPC9zdmc+DQo=\"","module.exports = require(\"react-toastify/dist/ReactToastify.min.css\");","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh0AAABxCAYAAABxyRHvAAAABGdBTUEAALGPC/xhBQAAQABJREFUeAHt3QeYLEdxAOBBPBtjbIxlA8YEP4GMyME2CAS2HgIEmCSRjEWQSCKDyAgEepgghIgig0GPnDMyGR6YnHMGCRBRIGOwwXlcf0Mtc3Oze7t3t3v33nV93+7szvR0V1dXV1VXV3efrQ1oNin88Ic/bPLzpS99qfnyl7/cfOtb32rOOOOM5sc//nHz05/+tPnlL3/ZZBXOdrazNec85zmb85znPM15z3ve5k//9E+b7du3NwcccEBzyUtesjn/+c/fnO985yvXffbZZ5PWuqJVKVApUClQKVApsFdSYOfZNovR8ZOf/KT5+te/3nz6059uPvKRjxQD4wc/+EExOn7xi1+sC/UZJIyOP/mTP2kufvGLN1e+8pWbK17xis3+++9fDJF1KaRmUilQKVApUClQKVApMESBjTU6vvrVrzbvf//7m7e97W3F2GB0/N///d8QonO9d9GLXrS57GUv2xx66KHNjh07mktd6lJzLa9mXilQKVApUClQKbAFKbB4o+P73/9+8/a3v7155Stf2Xz4wx9uzjrrrE1Fd1MzV7rSlZrDDz+8ud71rlemZzYVghWZSoFKgUqBSoFKgT2TAoszOr7whS80u3btal796lc3p59++qYnl/iQC17wgs0NbnCD5sgjj2yucpWrbHqcK4KVApUClQKVApUCm5gC8zc6Pve5zzUnn3xyMTYEfq4FxGSc+9znbn73d3+3+Z3f+Z3mt37rt5pt27Y1DATwv//7v83//M//NP/xH/9RAkx//vOfNz/72c/WUmR5V3m8Hve4xz3K9MuaM6wZVApUClQKVApUCmw9CszP6Pje977XPOEJT2ie//znl1Ums9D2j//4j5s/+7M/a8RaXPrSl24udrGLNRe5yEWaP/iDPxgZHec4xzma3/7t315idDA40uhgeKTR8aMf/ag57bTTGitgvvKVrzTf+c53yioYaWcBRs/Nbnaz5gEPeECJAZnl3Zq2UqBSoFKgUqBSYItTYP2NDt6GF77whc0//MM/TD2N8nu/93vN5S53ueav//qvm4MPPrisJrHUlSdjHsAIsfT2U5/6VPOud72r+cQnPtF84xvfmKooXhXLce95z3uWD0OoQqVApUClQKVApUClwIoUWF+j49vf/nbzoAc9qHn5y1++Ysm8FAceeGDxHBxyyCFlxchG7Z1x5plnNp/85Ceb17/+9c1b3vKWYpCsVIGzn/3szdWudrXmhBNOaA466KCVktfnlQKVApUClQKVAludAutndFj2KubBstdJwEtgiuI2t7lNMTo2ytAYh+N3v/vd5tRTT21e9KIXNR/4wAdGG4+NS68+xx9/fHOXu9ylYYhUqBSoFKgUqBSoFKgUGKTA+hgdT33qU5tjjz22+fd///fBUtwUp3G7292uufOd71xiNMYm3CQPxIS89a1vbdTt3e9+90SsTAPd8Y53bB772MeWmJOJievDSoFKgUqBSoFKga1JgbUZHQIxH/rQhzYnnXTSWI+A1SVHHHFE8+AHP7hsRb6n0Znx8ZrXvKY58cQTGytxxoF6Xv/612+e8YxnlO3Xx6Wr9ysFKgUqBSoFKgW2KAVWb3T853/+Z3PMMcc0z3rWs8bS7hKXuESJeTjssMPGptkTHjjbRfDpk570pObpT39682//9m+DaJteEQz7ghe8oKy2GUxUb1YKVApUClQKVApsTQqszuj47//+7+Ze97rXRIPjtre9bfEOOOdkbwErc+ym+sAHPrD5/Oc/P1itNDys4LnwhS88mKberBSoFKgUqBSoFNiCFNg581GrPBz3v//9Bw0Oy0n33XffEgdxyimnlIPV9iaiMiiue93rNm9+85vLlJG9QvrAMPnnf/7nEr9iP5AKlQKVApUClQKVApUCv6LATEaHGI4nP/nJzdOe9rRl9GNwOEqesWEVy2ZblbIM4VXeUE8bl4ndsFeHnVH7wPB473vf29zvfvdr/vVf/7X/uP6vFKgUqBSoFKgU2JIUOPvOgGlq7vTXN73pTUXRml7pAkVsKsGUAk/AVgDGxt/8zd8U4+pjH/tY06cJelk+/F//9V9l6/S6nHYrcEWtY6VApUClQKXABArsntro+PKXv9yI0/jxj3+8LD8eDvtaXOMa11j2bG++YcVKHgTnxNz+tuo8Hla8bI/dVS9zmcuMzojZm2lS61YpUClQKVApUCkwhgK7p5pesf+G80ZOHzgd9g//8A+b5zznORt6EBr8NmoaQ1yHGJe73/3ug9u2W+nyiEc8onHKboVKgUqBSoFKgUqBrUyBFY0O0wTPfe5zyy6dfUJRuI9+9KPL/hT9Z4v6z+Cw9fod7nCHQS/MIvBwCu1xxx3X3OQmN1kWy2K5LWPNWTSTNk9bBJ61jEqBSoFKgUqBSoGNpMCKRodplcc97nHLcBQoStHbYXSjgBK3OZm9M2zgZSvyoemfReDn4LfHPOYxzV/8xV8sK860yz/90z81r3jFK8ZuorbspXqjUqBSoFKgUqBSYC+jwNliJN6OqxNledRRRzUveclLliW58pWvXLwftjffCEiD4ylPecqS4m9605uW5bwbgZcYDlum/93f/V3zL//yL0vwEmx7qUtdqtDM6pcKlQLzogA+FMCM58Qd+cwDyAflgL4YEWi9qOBp3lh19fHbsn749HFyXIGDJitUCuypFMDT+p2PgT+e3sNWik7eHMxGWDe84Q1HgiUbylH0b3zjGzcscHScwZH4baThQeA96lGPKjuxEv5dMB113/vetzzfCEYhkH0mAcG9WmWhvn1B3y9LvTei7n089tb/+M9BhXnSs8MVr3nNa666TcfRibFhWbjl89rcfx+ruHj9HvnIRzZXvOIVx70+1X154SkCVr38Puc5z1mMKDzKmHJMwWmnnVb2Bzrf+c7XfOUrXylnIP30pz8dved9RtCtb33rctDkVIVvoUTTyIUkB/mg/7omoO8kyLSrlSuT8t5qz+z9ZBXpRz/60caO34cffnhz8YtffEl7bHKa7Bw7BNKZH//4xy8zODDQ0UcfvWkNDgQ31UIQPvvZzy4HzS2yERgWpnkYbBijC4Tyi1/84uZWt7pVc+lLX7r7aO6/CexPfOITzZlnnjm2LG0rMNiKnBQUYxP3HhA8VvBMCuiVpx1qh6agetnVv6uggDb+0pe+VPjva1/7WmlDnrdXvepVazYA+ugo6wc/+EExPPA1oyANWsqf0l8tyM806fve977iOfziF7/Y/OxnPyvZnetc52r222+/5qCDDmouf/nLFwPr+c9/ftkhWb+TjtEFN/mkQjz3uc/dHHzwwatFaa9975e//GWDV6bdyBD9KTv9GA98//vfLyv0su3HEeo85zlPaS8D1gqrowDe3rVrV9kr66yzzmroGvR3rtkFLnCB1WW6EW+Fch6E8GS0MZIw9bLks//++7dnnHHG4DvzvhkrQdp73/veS/Dp49f9Hx6PNpTsvNFaln+M0NpXv/rVbYyuluEa7t32Pve5Txsddtl787yBdte5znXaYNTSrmEALMPNvYte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\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1Ljk1OHB4IiBoZWlnaHQ9IjQ1Ljk1OHB4IiB2aWV3Qm94PSIwIDAgNDUuOTU4IDQ1Ljk1OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuOTU4IDQ1Ljk1ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTIyLjk3OSwwQzEwLjI4OCwwLDAsMTAuMjg5LDAsMjIuOTc5czEwLjI4OCwyMi45NzksMjIuOTc5LDIyLjk3OWMxMi42OSwwLDIyLjk3OS0xMC4yODksMjIuOTc5LTIyLjk3OVMzNS42NywwLDIyLjk3OSwweg0KCQkgTTMyLjI1MywyNi45NzdoLTUuMzAxdjUuMjg5YzAsMi4yMDctMS43NjUsMy45OTYtMy45NzIsMy45OTZjLTIuMjA2LDAtMy45NzEtMS43ODktMy45NzEtMy45OTZ2LTUuMjkxSDEzLjcxDQoJCWMtMi4yMDcsMC00LjAwNi0xLjc4OS00LjAwNi0zLjk5N2MwLTIuMjA3LDEuNzk2LTMuOTk2LDQuMDAzLTMuOTk2aDUuMzAydi01LjI4OWMwLTIuMjA4LDEuNzY1LTMuOTk3LDMuOTcxLTMuOTk3DQoJCWMyLjIwOCwwLDMuOTcyLDEuNzg5LDMuOTcyLDMuOTk3djUuMjloNS4zMDFjMi4yMDcsMCwzLjk5NywxLjc5LDMuOTk3LDMuOTk3QzM2LjI1LDI1LjE4OCwzNC40NiwyNi45NzcsMzIuMjUzLDI2Ljk3N3oiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMS4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDYxMiA2MTIiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA2MTIgNjEyOyINCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImRlbGV0ZS1zaW1wbGUuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDMiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnM0MSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlkPSJuYW1lZHZpZXczOSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciDQogICAgIGlua3NjYXBlOmN4PSIyOTUuMDM0MDgiDQogICAgIGlua3NjYXBlOmN5PSIzMzAuODU0NDgiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9Imc1Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Nzg4MTM1LDAsMCwwLjk5Nzg4MTM1LDEuNzMwNDAxMiwwLjkyMzcyODQ3KSI+PHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNyINCiAgICAgICBkPSJNIDU4Ny44MjYsMTg2Ljk2NiBDIDU3MS43MSwxNDkuNjM0IDU0OS44ODIsMTE3LjE5OCA1MjIuMzQyLDg5LjY1OCA0OTQuODAyLDYyLjExOCA0NjIuMzY2LDQwLjI5IDQyNS4wMzQsMjQuMTc0IDM4Ny43MDIsOC4wNTggMzQ4LjAyNCwwIDMwNiwwIDI3Ny44NDgsMCAyNTAuNzE2LDMuNjcyIDIyNC42MDQsMTEuMDE2IDE5OC40OTIsMTguMzYgMTc0LjExNCwyOC42NjIgMTUxLjQ3LDQxLjkyMiAxMjguODI2LDU1LjE4MiAxMDguMjIyLDcxLjA5NCA4OS42NTgsODkuNjU4IDcxLjA5NCwxMDguMjIyIDU1LjE4MiwxMjguODI2IDQxLjkyMiwxNTEuNDcgMjguNjYyLDE3NC4xMTYgMTguMzYsMTk4LjQ5MiAxMS4wMTYsMjI0LjYwNCAzLjY3MiwyNTAuNzE2IDAsMjc3Ljg0OCAwLDMwNiBjIDAsMjguMTUyIDMuNjcyLDU1LjI4NCAxMS4wMTYsODEuMzk2IDcuMzQ0LDI2LjExIDE3LjY0Niw1MC40ODcgMzAuOTA2LDczLjEzNCAxMy4yNiwyMi42NDQgMjkuMTcyLDQzLjI0OSA0Ny43MzYsNjEuODEyIDE4LjU2NCwxOC41NjQgMzkuMTY4LDM0LjQ3OCA2MS44MTIsNDcuNzM2IDIyLjY0NCwxMy4yNiA0Ny4wMjIsMjMuNTYxIDczLjEzNCwzMC45MDYgQyAyNTAuNzE2LDYwOC4zMjggMjc3Ljg0OCw2MTIgMzA2LDYxMiBjIDI4LjE1MiwwIDU1LjI4NCwtMy42NzIgODEuMzk2LC0xMS4wMTYgMjYuMTExLC03LjM0NiA1MC40ODgsLTE3LjY0NiA3My4xMzUsLTMwLjkwNiAyMi42NDQsLTEzLjI1OSA0My4yNDksLTI5LjE3MiA2MS44MTIsLTQ3LjczNiAxOC41NjQsLTE4LjU2MyAzNC40NzgsLTM5LjE2OCA0Ny43MzYsLTYxLjgxMiAxMy4yNiwtMjIuNjQ2IDIzLjU2MSwtNDcuMDIzIDMwLjkwNiwtNzMuMTM1IEMgNjA4LjMyOCwzNjEuMjg0IDYxMiwzMzQuMTUyIDYxMiwzMDYgNjEyLDI2My45NzYgNjAzLjk0MiwyMjQuMjk4IDU4Ny44MjYsMTg2Ljk2NiBaIE0gNDY4LjE4LDM5MS42OCBjIDIuMDQsMi4wNCAzLjA2Myw0LjI4NCAzLjA2Myw2LjczMiAwLDIuNDQ4IC0xLjAyMSw0LjQ4OCAtMy4wNjMsNi4xMiBsIC01OS45NzYsNjAuNTg4IGMgLTEuNjMxLDEuNjMyIC0zLjg3NiwyLjQ0OCAtNi43MzIsMi40NDggLTIuODU0LDAgLTQuODk1LC0wLjgxNiAtNi4xMiwtMi40NDggTCAzMDkuMDYsMzc4LjgyOCAyMjMuMzgsNDY1LjEyIGMgLTIuNDQ4LDEuNjMyIC00LjY5MiwyLjQ0OCAtNi43MzIsMi40NDggLTEuNjMyLDAgLTMuNjcyLC0wLjgxNiAtNi4xMiwtMi40NDggbCAtNTkuOTc2LC02MC41ODggYyAtMi4wNCwtMS4yMjYgLTMuMDYsLTMuMjY3IC0zLjA2LC02LjEyIDAsLTIuNDQ4IDEuMDIsLTQuNjkyIDMuMDYsLTYuNzMyIGwgODUuNjgsLTg1LjY4IC04NS42OCwtODUuNjggYyAtMi4wNCwtMi4wNCAtMy4wNiwtNC4yODQgLTMuMDYsLTYuNzMyIDAsLTIuODU2IDEuMDIsLTQuODk2IDMuMDYsLTYuMTIgbCA1OS45NzYsLTYwLjU4OCBjIDEuNjMyLC0xLjYzMiAzLjY3MiwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDg1LjY4LDg2LjI5MiA4Ni4yOTIsLTg2LjI5MiBjIDEuNjM1LC0xLjYzMiAzLjY3NSwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDU5Ljk3Niw2MC41ODggYyAyLjA0LDEuNjMyIDMuMDYzLDMuNjcyIDMuMDYzLDYuMTIgMCwyLjQ0OCAtMS4wMjEsNC42OTIgLTMuMDYzLDYuNzMyIEwgMzgyLjUsMzA2IGwgODUuNjgsODUuNjggeiINCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48Zw0KICAgICBpZD0iZzM3IiAvPjwvc3ZnPg==\"","module.exports = require(\"sharedb/lib/client\");","module.exports = require(\"jquery-ui-dist/jquery-ui\");","module.exports = require(\"cytoscape-edgehandles\");","module.exports = require(\"cytoscape-edge-editing\");","module.exports = require(\"cytoscape-fcose\");","module.exports = require(\"cytoscape-node-editing\");","module.exports = require(\"cytoscape-undo-redo\");","module.exports = require(\"cytoscape-panzoom\");","module.exports = (function()\r\n{\r\n var styleSheet = [\r\n {\r\n selector: 'node',\r\n style:\r\n {\r\n 'text-valign': 'center',\r\n 'text-halign': 'center',\r\n 'color': '#1e2829',\r\n 'width': function (ele)\r\n {\r\n return ele.data('w') || 0;\r\n },\r\n 'height': function (ele)\r\n {\r\n return ele.data('h') || 0;\r\n },\r\n 'background-color': 'white',\r\n 'shape': function(ele)\r\n {\r\n return parentNodeShapeFunc( ele );\r\n },\r\n 'border-width': function(ele)\r\n {\r\n return borderWidthFunction( ele );\r\n },\r\n 'border-color': function(ele)\r\n {\r\n return nodeBorderColorFunction(ele);\r\n },\r\n 'font-size': 14,\r\n 'background-opacity': function(ele)\r\n {\r\n return nodeBackgroundOpacityFunction(ele);\r\n },\r\n 'underlay-opacity': 0,\r\n 'underlay-color': '#ffc90e'\r\n }\r\n },\r\n {\r\n selector: 'node[name]',\r\n style: {\r\n 'label': 'data(name)'\r\n }\r\n },\r\n {\r\n selector: 'node:parent',\r\n style:\r\n {\r\n 'shape': function(ele)\r\n {\r\n return parentNodeShapeFunc( ele );\r\n },\r\n 'text-valign': function(ele)\r\n {\r\n return 'bottom';\r\n },\r\n 'text-margin-y' : 2,\r\n 'padding-left': function(ele){ return compoundPaddingFunction(ele); },\r\n 'padding-right': function(ele){ return compoundPaddingFunction(ele); },\r\n 'padding-bottom': function(ele){ return compoundPaddingFunction(ele); },\r\n 'padding-top': function(ele){ return compoundPaddingFunction(ele); },\r\n 'background-opacity': 0.5,\r\n 'border-width': function(ele)\r\n {\r\n return parentBorderWidthFunction( ele );\r\n },\r\n 'border-color': function(ele)\r\n {\r\n return nodeBorderColorFunction(ele);\r\n },\r\n 'background-color': function(ele){\r\n return nodeBackgroundColorFunction(ele);\r\n }\r\n }\r\n },\r\n {\r\n selector: 'edge',\r\n style:\r\n {\r\n 'arrow-scale': 1.7,\r\n 'curve-style': 'bezier',\r\n 'text-background-color': '#EEEEEE',\r\n 'text-background-opacity': 0,\r\n 'target-arrow-shape': function( ele )\r\n {\r\n return edgeTargetArrowTypeHandler(ele);\r\n },\r\n 'width': 1,\r\n 'line-color': function( ele )\r\n {\r\n return edgeColorHandler(ele);\r\n },\r\n 'target-arrow-color': function( ele )\r\n {\r\n return edgeColorHandler(ele);\r\n },\r\n 'line-style': function(ele)\r\n {\r\n return edgeLineTypeHandler(ele);\r\n },\r\n 'opacity': 1,\r\n 'underlay-opacity': 0,\r\n 'underlay-color': '#ffc90e'\r\n }\r\n },\r\n {\r\n selector: 'edge[name]',\r\n style: {\r\n 'label': function(edge) {\r\n const label = edge.data('name');\r\n if (label === \"\") {\r\n return label;\r\n }\r\n //https://github.com/cytoscape/cytoscape.js/issues/2329\r\n return (label + \"\\n \\u2060\"); \r\n },\r\n 'text-wrap': 'wrap',\r\n 'edge-text-rotation': 'autorotate',\r\n 'text-background-opacity': '0'\r\n }\r\n },\r\n\r\n // some style for the Edge Handles !!!\r\n\r\n {\r\n selector: '.eh-handle',\r\n style: {\r\n 'background-color': '#1abc9c',\r\n 'width': 12,\r\n 'height': 12,\r\n 'shape': 'ellipse',\r\n 'overlay-opacity': 0,\r\n 'border-width': 12, // makes the handle easier to hit\r\n 'border-opacity': 0\r\n }\r\n },\r\n\r\n {\r\n selector: '.eh-hover',\r\n css: {\r\n 'background-color': '#1abc9c'\r\n }\r\n },\r\n\r\n {\r\n selector: '.eh-source',\r\n css: {\r\n 'border-width': 2,\r\n 'border-color': '#1abc9c'\r\n }\r\n },\r\n\r\n {\r\n selector: '.eh-target',\r\n css: {\r\n 'border-width': 2,\r\n 'background-color': '#1abc9c',\r\n 'border-color': '#1abc9c'\r\n }\r\n },\r\n\r\n {\r\n selector: '.eh-preview, .eh-ghost-edge',\r\n css: {\r\n 'line-color': '#1abc9c',\r\n 'target-arrow-color': '#1abc9c',\r\n 'source-arrow-color': '#1abc9c'\r\n }\r\n },\r\n\r\n {\r\n selector: '.highlightedEdge',\r\n style:\r\n {\r\n 'width': 3.5,\r\n 'border-width':4,\r\n 'line-color' : '#1abc9c' ,\r\n 'target-arrow-color': '#1abc9c',\r\n 'arrow-scale': 2\r\n }\r\n },\r\n {\r\n selector: '.highlightedNode',\r\n style:\r\n {\r\n 'border-width': function(ele)\r\n {\r\n return highlightedBorderWidthFunction( ele );\r\n },\r\n 'border-color': '#1abc9c',\r\n 'background-color': '#fff',\r\n }\r\n },\r\n {\r\n selector: '.invalidGene',\r\n style:\r\n {\r\n 'border-width': 2,\r\n 'border-color': '#e94332',\r\n 'color': '#e94332'\r\n }\r\n },\r\n {\r\n // The css properties when a node is highlighted and an invalid gene\r\n selector: '.invalidGeneHighlight',\r\n style:\r\n {\r\n 'border-width': 3,\r\n 'font-weight' : 'bold',\r\n 'border-color': '#e94332',\r\n 'color': '#e94332',\r\n }\r\n },\r\n {\r\n selector: 'node:selected',\r\n style:\r\n {\r\n 'border-width': function(ele)\r\n {\r\n return selectedBorderWidthFunction( ele );\r\n },\r\n 'underlay-opacity': 0.25,\r\n 'underlay-color': '#ffc90e'\r\n }\r\n },\r\n {\r\n selector: '.highlightedNode:selected, .invalidGeneHighlight:selected',\r\n style:\r\n {\r\n 'border-width': function(ele)\r\n {\r\n return selectedHighlightedBorderWidthFunction( ele );\r\n },\r\n }\r\n },\r\n {\r\n selector: 'edge:selected',\r\n style:\r\n {\r\n 'width' : 3,\r\n 'underlay-opacity': 0.25,\r\n 'underlay-color': '#ffc90e'\r\n }\r\n },\r\n ];\r\n\r\n\r\n var nodeBackgroundOpacityFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"FAMILY\": return 0.5;\r\n case \"COMPLEX\": return 0.5;\r\n case \"COMPARTMENT\": return 0.5;\r\n default: return 1;\r\n }\r\n };\r\n\r\n\r\n var compoundPaddingFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"FAMILY\": return 5;\r\n case \"COMPLEX\": return '5'; \r\n case \"COMPARTMENT\": return 10;\r\n case \"PROCESS\": return 10;\r\n default: return 5;\r\n }\r\n };\r\n\r\n var contentFunction = function( ele )\r\n {\r\n if (ele._private.data.name) {\r\n return ele._private.data.name;\r\n }\r\n return 'newNode';\r\n };\r\n\r\n var vTextPositionFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 'center';\r\n case \"FAMILY\": return 'top';\r\n case \"COMPLEX\": return 'top';\r\n case \"COMPARTMENT\": return 'top';\r\n default: return 'center';\r\n }\r\n };\r\n\r\n var borderWidthFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 1;\r\n case \"PROCESS\": return 0;\r\n default: return 2;\r\n }\r\n };\r\n\r\n var parentBorderWidthFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 1;\r\n case \"PROCESS\": return 0;\r\n case \"FAMILY\": return 2;\r\n case \"COMPLEX\": return 1;\r\n case \"COMPARTMENT\": return 4;\r\n default: return 1;\r\n }\r\n };\r\n\r\n var highlightedBorderWidthFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 3;\r\n case \"PROCESS\": return 1;\r\n case \"FAMILY\": return 4;\r\n case \"COMPARTMENT\": return 6;\r\n default: return 3;\r\n }\r\n };\r\n\r\n var selectedBorderWidthFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 2;\r\n case \"PROCESS\": return 1;\r\n case \"FAMILY\": return 3;\r\n case \"COMPARTMENT\": return 3;\r\n default: return 3;\r\n }\r\n };\r\n var selectedHighlightedBorderWidthFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 3;\r\n case \"PROCESS\": return 1;\r\n case \"FAMILY\": return 4;\r\n case \"COMPARTMENT\": return 6;\r\n default: return 3;\r\n }\r\n };\r\n\r\n\r\n var parentNodeShapeFunc = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return \"roundrectangle\";\r\n case \"PROCESS\": return \"roundrectangle\";\r\n case \"FAMILY\": return \"rectangle\";\r\n case \"COMPARTMENT\": return \"barrel\";\r\n case \"COMPLEX\": return \"cutrectangle\";\r\n default: return \"roundrectangle\";\r\n }\r\n };\r\n\r\n var nodeBackgroundColorFunction = function( ele )\r\n {\r\n return \"#fff\";\r\n };\r\n\r\n var nodeBorderColorFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return \"#000000\";\r\n case \"FAMILY\": return \"#000000\";\r\n case \"COMPLEX\": return \"#000000\";\r\n case \"COMPARTMENT\": return \"#000000\";\r\n default: return \"#000000\";\r\n }\r\n };\r\n\r\n var edgeColorHandler = function( ele )\r\n {\r\n return \"#1b1b1b\";\r\n };\r\n\r\n var edgeTargetArrowTypeHandler = function( ele )\r\n {\r\n switch (ele._private.data['type']){\r\n case \"ACTIVATES\": return \"triangle\";\r\n case \"INHIBITS\": return \"tee\";\r\n case \"INDUCES\": return \"triangle\";\r\n case \"REPRESSES\": return \"tee\";\r\n case \"BINDS\": return \"none\";\r\n default: return \"none\";\r\n }\r\n };\r\n\r\n var edgeLineTypeHandler = function( ele )\r\n {\r\n switch (ele._private.data['type']){\r\n case \"ACTIVATES\": return \"solid\";\r\n case \"INHIBITS\": return \"solid\";\r\n case \"INDUCES\": return \"dashed\";\r\n case \"REPRESSES\": return \"dashed\";\r\n case \"BINDS\": return \"solid\";\r\n default: return \"solid\";\r\n }\r\n };\r\n\r\n return styleSheet;\r\n})();\r\n","var panzoomOptions =\r\n{\r\n zoomFactor: 0.05, // zoom factor per zoom tick\r\n zoomDelay: 45, // how many ms between zoom ticks\r\n minZoom: 0.1, // min zoom level\r\n maxZoom: 10, // max zoom level\r\n fitPadding: 50, // padding when fitting\r\n panSpeed: 10, // how many ms in between pan ticks\r\n panDistance: 10, // max pan distance per tick\r\n panDragAreaSize: 75, // the length of the pan drag box in which the vector for panning is calculated (bigger = finer control of pan speed and direction)\r\n panMinPercentSpeed: 0.25, // the slowest speed we can pan by (as a percent of panSpeed)\r\n panInactiveArea: 8, // radius of inactive area in pan drag box\r\n panIndicatorMinOpacity: 0.5, // min opacity of pan indicator (the draggable nib); scales from this to 1.0\r\n zoomOnly: false, // a minimal version of the ui only with zooming (useful on systems with bad mousewheel resolution)\r\n fitSelector: undefined, // selector of elements to fit\r\n animateOnFit: function(){ // whether to animate on fit\r\n return false;\r\n },\r\n fitAnimationDuration: 1000, // duration of animation on fit\r\n\r\n // icon class names\r\n sliderHandleIcon: 'fa fa-minus',\r\n zoomInIcon: 'fa fa-plus',\r\n zoomOutIcon: 'fa fa-minus',\r\n resetIcon: 'fa fa-expand'\r\n};\r\n\r\nmodule.exports = panzoomOptions;\r\n","module.exports = require(\"cytoscape-navigator\");","module.exports = require(\"cytoscape-context-menus\");","module.exports = require(\"konva\");","module.exports = require(\"cytoscape-view-utilities\");","module.exports = require(\"cytoscape-grid-guide\");","module.exports = require(\"cytoscape-popper\");","module.exports = require(\"cytoscape-layout-utilities\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik00ODEuNTA4LDIxMC4zMzZMNjguNDE0LDM4LjkyNmMtMTcuNDAzLTcuMjIyLTM3LjA2NC00LjA0NS01MS4zMDksOC4yODdDMi44Niw1OS41NDctMy4wOTgsNzguNTUxLDEuNTU4LDk2LjgwOA0KCQkJTDM4LjMyNywyNDFoMTgwLjAyNmM4LjI4NCwwLDE1LjAwMSw2LjcxNiwxNS4wMDEsMTUuMDAxYzAsOC4yODQtNi43MTYsMTUuMDAxLTE1LjAwMSwxNS4wMDFIMzguMzI3TDEuNTU4LDQxNS4xOTMNCgkJCWMtNC42NTYsMTguMjU4LDEuMzAxLDM3LjI2MiwxNS41NDcsNDkuNTk1YzE0LjI3NCwxMi4zNTcsMzMuOTM3LDE1LjQ5NSw1MS4zMSw4LjI4N2w0MTMuMDk0LTE3MS40MDkNCgkJCUM1MDAuMzE3LDI5My44NjIsNTEyLDI3Ni4zNjQsNTEyLDI1Ni4wMDFDNTEyLDIzNS42MzgsNTAwLjMxNywyMTguMTM5LDQ4MS41MDgsMjEwLjMzNnoiLz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = require(\"@datastructures-js/max-heap\");","import { IPathwayInfo } from \"../managers/FileOperationsManager\";\r\n\r\nexport default class SaveLoadUtility{\r\n //Exports given json graph(based on cy.export()) into a string\r\n static exportGraph(pathwayDetails: IPathwayInfo, cy, edgeEditing)\r\n {\r\n var returnString = pathwayDetails.pathwayTitle + '\\n\\n';\r\n returnString += pathwayDetails.pathwayDetails +'\\n\\n';\r\n\r\n //Get nodes and edges\r\n var nodes = cy.nodes();\r\n var edges = cy.edges();\r\n\r\n //Prepare Meta Line\r\n returnString += '--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY\\tWIDTH\\tHEIGHT--'+'\\n';\r\n\r\n if (nodes)\r\n {\r\n for (let i = 0; i < nodes.length; i++)\r\n {\r\n returnString += this.exportNode(nodes[i]);\r\n }\r\n }\r\n\r\n //Put a blank line between nodes and edges\r\n returnString += '\\n';\r\n returnString += '--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\\tINTERACTION_PUBMED_ID\\tEDGE_NAME\\tEDGE_BENDS\\tEDGE_CURVE_STYLE\\n';\r\n\r\n if (edges) {\r\n //Write edges\r\n for (let i = 0; i < edges.length; i++)\r\n {\r\n var edgeID = edges[i].data('id');\r\n var edgeType = edges[i].data('type');\r\n var source = edges[i].data('source');\r\n var target = edges[i].data('target');\r\n var pubmedIDs = edges[i].data('pubmedIDs');\r\n var pubmedString = \"\";\r\n var edgeName = (edges[i].data('name')) ? edges[i].data('name') : \"\";\r\n var edgeCurveStyle = edges[i].css('curve-style');\r\n\r\n var numberOfAnchorPoints = 0;\r\n var anchors = edgeEditing.getAnchorsAsArray(edges[i])\r\n if (anchors !== undefined)\r\n numberOfAnchorPoints = anchors.length/2;\r\n var anchorPointPositions = \"\";\r\n for (var j = 0; j < numberOfAnchorPoints; j++)\r\n {\r\n anchorPointPositions += \"(\" + anchors[2*j] + \";\" +\r\n anchors[2*j+1] + \")\";\r\n }\r\n\r\n if (pubmedIDs != undefined) {\r\n for (var j = 0; j < pubmedIDs.length; j++)\r\n {\r\n pubmedString += pubmedIDs[j];\r\n if (j != pubmedIDs.length - 1)\r\n pubmedString += \";\"\r\n }\r\n }\r\n\r\n returnString += edgeID + '\\t' +\r\n source + '\\t' +\r\n target + '\\t' +\r\n edgeType + '\\t' +\r\n pubmedString + '\\t' +\r\n edgeName + '\\t' +\r\n anchorPointPositions + '\\t' + \r\n edgeCurveStyle + '\\n';\r\n }\r\n }\r\n\r\n //Finally return a string that includes whole graph lovely and peacefully :)\r\n return returnString;\r\n }\r\n static exportAsSIFNX(cy: any)\r\n {\r\n let returnString = \"\";\r\n\r\n //Get nodes and edges\r\n const nodes = cy.nodes();\r\n const edges = cy.edges();\r\n const nodeMap = {};\r\n //Put a blank line between nodes and edges\r\n returnString += '\\n';\r\n returnString += 'PARTICIPANT\\tPARTICIPANT_TYPE\\tPARENT_ID\\tPOSX\\tPOSY\\tWIDTH\\tHEIGHT'+'\\n';\r\n\r\n if (nodes)\r\n {\r\n for (var i = 0; i < nodes.length; i++)\r\n {\r\n returnString += this.exportNode(nodes[i]);\r\n\r\n nodeMap[nodes[i].id()] = nodes[i];\r\n }\r\n }\r\n\r\n //Put a blank line between nodes and edges\r\n returnString += '\\n';\r\n returnString += 'PARTICIPANT_A\\tPARTICIPANT_B\\tTYPE\\tPUBMED_IDS\\n';\r\n\r\n \r\n if (edges) {\r\n //Write edges\r\n for (var i = 0; i < edges.length; i++)\r\n {\r\n var edgeType = edges[i].data(\"type\");\r\n var source = edges[i].data(\"source\");\r\n var target = edges[i].data(\"target\");\r\n var edgeName = edges[i].data(\"name\");\r\n var pubmedIDs = edges[i].data(\"pubmedIDs\");\r\n var pubmedString = \"\";\r\n\r\n if (pubmedIDs != undefined) {\r\n for (var j = 0; j < pubmedIDs.length; j++)\r\n {\r\n pubmedString += pubmedIDs[j];\r\n if (j != pubmedIDs.length - 1)\r\n pubmedString += \";\"\r\n }\r\n }\r\n\r\n returnString += nodeMap[source].data(\"name\") + '\\t' +\r\n nodeMap[target].data(\"name\") + '\\t' +\r\n edgeType + '\\t' +\r\n pubmedString + '\\t' +\r\n edgeName + '\\n';\r\n }\r\n }\r\n\r\n //Finally return a string that includes whole graph lovely and peacefully :)\r\n return returnString;\r\n }\r\n static exportNode(node)\r\n {\r\n //Node specific data fields\r\n var nodeName = node.data(\"name\");\r\n var parentID = node.data(\"parent\");\r\n var nodeID = node.data(\"id\");\r\n var pos = node.position();\r\n var nodeType = node.data(\"type\");\r\n var nodeW = node.data(\"w\");\r\n var nodeH = node.data(\"h\");\r\n\r\n //Check if node has a parent, if not set parent id -1\r\n if (node.data(\"parent\"))\r\n {\r\n parentID = node.data(\"parent\");\r\n }\r\n else\r\n {\r\n parentID = -1;\r\n }\r\n\r\n // Write a line for a node\r\n return nodeName + '\\t' +\r\n nodeID + '\\t' +\r\n nodeType + '\\t' +\r\n parentID + '\\t' +\r\n parseInt(pos.x) + '\\t' +\r\n parseInt(pos.y) + '\\t' +\r\n nodeW + '\\t' +\r\n nodeH + '\\n';\r\n }\r\n static parseGraph(graph, isArray) {\r\n\r\n const allEles = [];\r\n const nodes = [];\r\n const edges = [];\r\n\r\n // By lines\r\n // Match all new line character representations\r\n var seperator = /\\r?\\n|\\r/;\r\n var lines = (isArray) ? graph : graph.split(seperator);\r\n var edgesStartIndex = -1;\r\n var title = lines[0];\r\n var description = lines[2];\r\n\r\n // In old version description used to expand in multiple lines\r\n // graphDataIndex holds the line index where the first --NODE_NAME occurs and is used later to load nodes\r\n let graphDataIndex = 3;\r\n let isFound = false;\r\n while (graphDataIndex < lines.length) {\r\n if (lines[graphDataIndex].includes(\"--NODE_NAME\")) {\r\n isFound = true;\r\n break;\r\n }\r\n description += \"\\n\" + lines[graphDataIndex];\r\n graphDataIndex++;\r\n }\r\n graphDataIndex++;\r\n // TODO AMENDMENT\r\n if(!isFound){\r\n graphDataIndex = 2;\r\n }\r\n //TODO Legacy pathways workaround\r\n if (lines[0].includes(\"--NODE_NAME\")) {\r\n graphDataIndex = 1;\r\n title = \"New Pathway\";\r\n description = \"\";\r\n }\r\n\r\n // start from first line skip node meta data\r\n for (var i = graphDataIndex; i < lines.length; i++) {\r\n // If we encounter a blank line, that means we need to parse edges from now on !\r\n // so skip blank line and edge meta line\r\n if (lines[i].length == 0 || lines[i] === \"\") {\r\n edgesStartIndex = i + 2;\r\n break;\r\n }\r\n\r\n //Fetch a line for nodes\r\n var lineData = lines[i].split('\\t');\r\n var nodeName = lineData[0];\r\n var nodeID = lineData[1];\r\n var nodeType = lineData[2];\r\n var parentID = lineData[3];\r\n var posX = (lineData.length > 4) ? lineData[4] : \"0\";\r\n var posY = (lineData.length > 5) ? lineData[5] : \"0\";\r\n var nodeW = (lineData.length > 7) ? lineData[6] : (nodeType === 'PROCESS') ? (nodeName.length * 6 + 24) : \"150\";\r\n var nodeH = (lineData.length > 7) ? lineData[7] : (nodeType === 'PROCESS') ? \"24\" : \"52\";\r\n\r\n if(nodeName === \" \" || nodeName === \"\"){\r\n //nodeName = \"No Name \" + (i + 1);\r\n }\r\n\r\n\r\n var newNode = {\r\n group: 'nodes',\r\n data:\r\n {\r\n id: nodeID,\r\n name: nodeName,\r\n type: nodeType,\r\n w: nodeW,\r\n h: nodeH,\r\n parent: -1\r\n },\r\n position:\r\n {\r\n x: parseInt(posX),\r\n y: parseInt(posY)\r\n }\r\n };\r\n\r\n if (parentID != '-1') {\r\n newNode.data.parent = parentID;\r\n }\r\n nodes.push(newNode);\r\n }\r\n //Read edges\r\n for (let i = edgesStartIndex; i < lines.length; i++) {\r\n //If we reach EOF we break loop\r\n if (lines[i].length == 0) {\r\n break;\r\n }\r\n\r\n var lineData = lines[i].split('\\t');\r\n var edgeID = lineData[0];\r\n var edgeSource = lineData[1];\r\n var edgeTarget = lineData[2];\r\n var edgeType = lineData[3];\r\n var pubmedIDs = (lineData.length > 4) ? lineData[4].split(';') : [];\r\n var label = (lineData.length > 5) ? lineData[5] : '';\r\n var anchorPoints = (lineData.length > 6) ? lineData[6] : '';\r\n var edgeCurveStyle = (lineData.length > 7) ? lineData[7] : '';\r\n\r\n var anchorPointPositions = [];\r\n if (anchorPoints) {\r\n var anchorPair = anchorPoints.split(')'); //The last element of anchorPair array is \"\"\r\n for (var j = 0; j < anchorPair.length - 1; j++) {\r\n var separatorIndex = anchorPair[j].indexOf(\";\");\r\n var x = anchorPair[j].substring(1, separatorIndex);\r\n var y = anchorPair[j].substring(separatorIndex + 1, anchorPair[j].length);\r\n anchorPointPositions.push({x: parseFloat(x), y: parseFloat(y)});\r\n }\r\n }\r\n\r\n var edgeData = {\r\n id: edgeID,//((isFound) ? edgeID : i - edgesStartIndex),\r\n type: edgeType,//((isFound) ? edgeType : edgeTarget),\r\n source: edgeSource,//((isFound) ? edgeSource : edgeID),\r\n target: edgeTarget,//((isFound) ? edgeTarget : edgeSource),\r\n pubmedIDs: pubmedIDs,\r\n name: label,\r\n }\r\n\r\n if (edgeCurveStyle === \"unbundled-bezier\") {\r\n edgeData['controlPointPositions'] = anchorPointPositions;\r\n }\r\n else {\r\n edgeData['bendPointPositions'] = anchorPointPositions;\r\n }\r\n\r\n const newEdge = {\r\n group: 'edges', \r\n data: edgeData\r\n };\r\n edges.push(newEdge);\r\n }\r\n return {title: title, description: description, nodes: nodes, edges: edges};\r\n }\r\n}\r\n","import { saveAs } from 'file-saver';\r\nimport { action, computed, makeObservable, observable } from 'mobx';\r\nimport SaveLoadUtility from '../utils/SaveLoadUtility';\r\nimport EditorActionsManager from './EditorActionsManager.js';\r\n\r\nexport interface IPathwayInfo{\r\n pathwayTitle: string;\r\n pathwayDetails: string;\r\n}\r\n\r\nexport default class FileOperationsManager{\r\n\r\n @observable\r\n pathwayInfo: IPathwayInfo;\r\n\r\n constructor(){\r\n makeObservable(this);\r\n this.pathwayInfo = {pathwayTitle: \"New Pathway\", pathwayDetails: \"\"};\r\n }\r\n\r\n\r\n @computed get\r\n getPathwayInfo(){\r\n return this.pathwayInfo;\r\n }\r\n\r\n @action\r\n setPathwayInfo(other: IPathwayInfo){\r\n this.pathwayInfo = other;\r\n }\r\n \r\n // see http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript\r\n b64toBlob(b64Data, contentType, sliceSize = 512)\r\n {\r\n contentType = contentType || '';\r\n\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n var byteArray = new Uint8Array(byteNumbers);\r\n\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n };\r\n\r\n saveAsJPEG(cy: any)\r\n {\r\n const graphData = cy.jpeg();\r\n // this is to remove the beginning of the pngContent: data:img/png;base64,\r\n const b64data = graphData.substr(graphData.indexOf(\",\") + 1);\r\n const imageData = this.b64toBlob(b64data, \"image/jpeg\");\r\n const blob = new Blob([imageData]);\r\n const fileName = this.pathwayInfo.pathwayTitle + \".jpg\"\r\n saveAs(blob, fileName);\r\n };\r\n\r\n saveAsSVG(editor: EditorActionsManager){\r\n const returnString: any = editor.exportSVG();\r\n const fileName = this.pathwayInfo.pathwayTitle + \".svg\"\r\n const blob = new Blob([returnString], {type: \"text/plain;charset=utf-8\"});\r\n saveAs(blob, fileName);\r\n }\r\n\r\n saveAsPNG(cy: any)\r\n {\r\n const graphData = cy.png();\r\n // this is to remove the beginning of the pngContent: data:img/png;base64,\r\n const b64data = graphData.substr(graphData.indexOf(\",\") + 1);\r\n const imageData = this.b64toBlob(b64data, \"image/png\");\r\n const blob = new Blob([imageData]);\r\n const fileName = this.pathwayInfo.pathwayTitle + \".png\"\r\n saveAs(blob, fileName);\r\n };\r\n \r\n\r\n saveGraph(isSIFNX: boolean, editor: EditorActionsManager)\r\n {\r\n const pathwayData = this.pathwayInfo;\r\n const returnString = (isSIFNX) ? SaveLoadUtility.exportAsSIFNX(editor.cy):\r\n SaveLoadUtility.exportGraph(pathwayData, editor.cy, editor.edgeEditing);\r\n const blob = new Blob([returnString], {type: \"text/plain;charset=utf-8\"});\r\n const fileName = pathwayData.pathwayTitle + \".txt\";\r\n saveAs(blob, fileName);\r\n };\r\n}","import _ from \"lodash\";\r\n\r\nexport default class GridOptionsManager\r\n{\r\n\r\n static defaultGridGuideOptions = \r\n {\r\n // On/Off Modules\r\n /* From the following four snap options, at most one should be true at a given time */\r\n snapToGridOnRelease: false, // Snap to grid on release\r\n snapToGridDuringDrag: false, // Snap to grid during drag\r\n snapToAlignmentLocationOnRelease: false, // Snap to alignment location on release\r\n snapToAlignmentLocationDuringDrag: false, // Snap to alignment location during drag\r\n distributionGuidelines: false, // Distribution guidelines\r\n geometricGuideline: false, // Geometric guidelines\r\n initPosAlignment: false, // Guideline to initial mouse position\r\n centerToEdgeAlignment: false, // Center to edge alignment\r\n resize: false, // Adjust node sizes to cell sizes\r\n parentPadding: false, // Adjust parent sizes to cell sizes by padding\r\n drawGrid: false, // Draw grid background\r\n\r\n // General\r\n gridSpacing: 20, // Distance between the lines of the grid.\r\n\r\n // Draw Grid\r\n zoomDash: true, // Determines whether the size of the dashes should change when the drawing is zoomed in and out if grid is drawn.\r\n panGrid: true, // Determines whether the grid should move then the user moves the graph if grid is drawn.\r\n gridStackOrder: -1, // Namely z-index\r\n gridColor: '#dedede', // Color of grid lines\r\n lineWidth: 1.0, // Width of grid lines\r\n\r\n // Guidelines\r\n guidelinesStackOrder: 4, // z-index of guidelines\r\n guidelinesTolerance: 5.00, // Tolerance distance for rendered positions of nodes' interaction.\r\n guidelinesStyle: { // Set ctx properties of line. Properties are here:\r\n strokeStyle: \"#4286f4\", // color of geometric guidelines\r\n geometricGuidelineRange: 750, // range of geometric guidelines\r\n range: 500, // max range of distribution guidelines\r\n minDistRange: 10, // min range for distribution guidelines\r\n distGuidelineOffset: 10, // shift amount of distribution guidelines\r\n horizontalDistColor: \"#4286f4\", // color of horizontal distribution alignment\r\n verticalDistColor: \"#4286f4\", // color of vertical distribution alignment\r\n initPosAlignmentColor: \"#34495E\", // color of alignment to initial mouse location\r\n lineDash: [6, 8], // line style of geometric guidelines\r\n horizontalDistLine: [0, 0], // line style of horizontal distribution guidelines\r\n verticalDistLine: [0, 0], // line style of vertical distribution guidelines\r\n initPosAlignmentLine: [0, 0], // line style of alignment to initial mouse position\r\n },\r\n\r\n // Parent Padding\r\n parentSpacing: -1 // -1 to set paddings of parents to gridSpacing\r\n };\r\n currentProperties: any;\r\n cy: any;\r\n constructor(cy: any)\r\n {\r\n this.cy = cy;\r\n\r\n this.currentProperties = {};\r\n this.changeParameters(GridOptionsManager.defaultGridGuideOptions);\r\n\r\n }\r\n\r\n changeParameters(params)\r\n {\r\n this.currentProperties = _.clone(params);\r\n this.refreshGridOptionsExtension();\r\n }\r\n\r\n getCurrentOptions()\r\n {\r\n return this.currentProperties;\r\n }\r\n\r\n getDefaultOptions()\r\n {\r\n return GridOptionsManager.defaultGridGuideOptions;\r\n }\r\n\r\n setSnapToGuidelines(state)\r\n {\r\n this.currentProperties.geometricGuideline = state;\r\n this.currentProperties.snapToAlignmentLocationDuringDrag = state;\r\n this.currentProperties.distributionGuidelines = state;\r\n this.refreshGridOptionsExtension();\r\n //this.appManager.gridOptionsView.changeParameters();\r\n }\r\n\r\n setShowGrid(state)\r\n {\r\n this.currentProperties.drawGrid = state;\r\n this.currentProperties.snapToGridDuringDrag = state;\r\n this.refreshGridOptionsExtension();\r\n }\r\n\r\n refreshGridOptionsExtension()\r\n {\r\n this.cy.gridGuide(this.currentProperties);\r\n }\r\n\r\n //TODO expose individual functions related for changing parameters from toolbar here\r\n\r\n}\r\n","import EditorActionsManager from \"./EditorActionsManager\";\r\n\r\nexport default class ViewOperationsManager{\r\n movedNodes: any[];\r\n editor: EditorActionsManager;\r\n cy: any;\r\n\r\n constructor(editor: EditorActionsManager,cy: any)\r\n {\r\n this.cy = cy;\r\n this.editor = editor;\r\n this.movedNodes = [];\r\n }\r\n\r\n //TODO use align function from cytoscape.js-grid-guide extension\r\n handleNodeAlignment(param)\r\n {\r\n var tmpNodes = this.editor.selectedNodeStack;\r\n var nodes = this.cy.collection();\r\n var nodeMap = {};\r\n this.movedNodes = [];\r\n\r\n for (const key in tmpNodes)\r\n {\r\n nodes = nodes.add(tmpNodes[key]);\r\n }\r\n\r\n nodes.forEach(function(node)\r\n {\r\n if (node.isParent())\r\n {\r\n nodeMap[node.id()] = node;\r\n }\r\n });\r\n\r\n\r\n if (nodes.length > 0)\r\n {\r\n var firstSelected = nodes[0];\r\n var firstBbox = firstSelected.boundingBox();\r\n //OuterHeight variable added due to miscalculation of boundingBox function in pathwaymapper\r\n var firstOuterHeight = firstSelected.outerHeight();\r\n var self = this;\r\n nodes.forEach(function(node,index)\r\n {\r\n if (index == 0)\r\n {\r\n return ;\r\n }\r\n\r\n //If parent of selected node is in selection do nothing !\r\n if (nodeMap[node.parent().id()] == null)\r\n {\r\n var newPosition = self.calculateNewPosition(param, node, firstBbox, firstOuterHeight);\r\n //Recursively traverse leaf nodes\r\n self.changePosition(node,0,0,newPosition);\r\n }\r\n });\r\n this.editor.handleChangePositionByAlignment(self.movedNodes);\r\n }\r\n }\r\n\r\n /*\r\n Determine new position according to the alignment\r\n node that node.position works on center positions thats why all calculations\r\n are performed accordingly\r\n */\r\n calculateNewPosition(param, node, referenceBbox, referenceOuterHeight)\r\n {\r\n var currentPos = node.position();\r\n var currentBbox = node.boundingBox();\r\n var newPosition;\r\n //This parameter is used to move the compounds less upwards when they contain label\r\n var moveParam = node.isParent() ? node.outerHeight() - ((currentBbox.h - node.outerHeight())/2) - ((node.outerHeight() - node.height())/2) : node.height();\r\n //This param is used only when the node is parent, for simple nodes is 0\r\n var labelHeight = node.isParent()? currentBbox.h - node.outerHeight(): 0;\r\n\r\n if (param === 'vLeft')\r\n {\r\n newPosition = {x: referenceBbox.x1+currentBbox.w/2, y: currentPos.y};\r\n }\r\n else if (param === 'vCen')\r\n {\r\n newPosition = {x: referenceBbox.x1+referenceBbox.w/2, y: currentPos.y};\r\n }\r\n else if (param === 'vRight')\r\n {\r\n newPosition = {x: referenceBbox.x2-currentBbox.w/2, y: currentPos.y};\r\n }\r\n else if (param === 'hTop')\r\n {\r\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + currentBbox.h/2};\r\n }\r\n //Checks for the case where compounds don't have names (name isn't taken in consideration in that case)\r\n else if (param === 'hMid' && node.isParent() && node.data('name') == \"\")\r\n {\r\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceBbox.h/2};\r\n }\r\n else if (param === 'hMid' )\r\n {\r\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceOuterHeight/2 + labelHeight/2};\r\n }\r\n //Checks for the case where compounds don't have names (name isn't taken in consideration in that case)\r\n else if (param === 'hBot' && node.isParent() && node.data('name') == \"\")\r\n {\r\n newPosition = {x: currentPos.x, y: referenceBbox.y2 - currentBbox.h/2};\r\n }\r\n else if (param === 'hBot')\r\n {\r\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceOuterHeight - moveParam/2};\r\n }\r\n else {\r\n console.log('Error: wrong alignment name ' + param);\r\n return;\r\n }\r\n\r\n return newPosition;\r\n }\r\n\r\n //Recursively move leaf nodes\r\n changePosition(node, dx, dy, newPos)\r\n {\r\n if (node.isParent())\r\n {\r\n var childNodes = node.children();\r\n var parentBbox = node.boundingBox();\r\n var self = this;\r\n childNodes.forEach(function(childNode, index)\r\n {\r\n var childBbox = childNode.boundingBox();\r\n var _dx = -(parentBbox.x1 - childBbox.x1)-parentBbox.w/2+childBbox.w/2;\r\n var _dy = -(parentBbox.y1 - childBbox.y1)-parentBbox.h/2+childBbox.h/2;\r\n\r\n //If further compound node is found, set position accordingly\r\n if (childNode.isParent())\r\n {\r\n self.changePosition(childNode, 0, 0, {x: newPos.x+_dx, y:newPos.y+_dy});\r\n }\r\n else\r\n {\r\n self.changePosition(childNode, _dx, _dy, newPos);\r\n }\r\n\r\n });\r\n }\r\n else\r\n {\r\n //Move locally and let editor actions manager know a move happened\r\n //If in collaborative mode editor actions manager will update collaborative model\r\n var position =\r\n {\r\n x: newPos.x+dx,\r\n y: newPos.y+dy\r\n };\r\n\r\n this.movedNodes.push({node: node, nextPosition: position, oldPosition: null});\r\n }\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\ninterface IAboutModalProps{\r\n show: boolean;\r\n handleClose: Function;\r\n}\r\n\r\nexport default class AboutModal extends React.Component {\r\n\r\n constructor(props: IAboutModalProps){\r\n super(props);\r\n }\r\n\r\n render(){\r\n\r\n\r\n return(\r\n \r\n {this.props.handleClose(EModalType.ABOUT)}}\r\n >\r\n \r\n About\r\n \r\n \r\n

PathwayMapper 2.3

\r\n
\r\n \"\"\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n

i-Vis information Visualization Lab

\r\n

Bilkent University, Ankara, Turkey

\r\n
\r\n
\r\n

Memorial Sloan-Kettering Cancer Center

\r\n

New York, USA

\r\n
\r\n
\r\n \r\n https://github.com/iVis-at-Bilkent/pathway-mapper\r\n \r\n \r\n\r\n )\r\n\r\n\r\n }\r\n\r\n}\r\n","import { RGBAColor, shapeToSvg } from 'oncoprintjs';\r\nimport React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\n// @ts-ignore\r\nimport openImage from \"../images/toolbar/edit.svg\";\r\n// @ts-ignore\r\nimport layoutImage from \"../images/toolbar/layout-cose.svg\";\r\n// @ts-ignore\r\nimport savePNGImage from \"../images/toolbar/save_png.svg\";\r\n// @ts-ignore\r\nimport saveSVGImage from \"../images/toolbar/save_svg.svg\";\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\n// @ts-ignore\r\nconst addSelImage = require(\"../images/toolbar/add-selected.svg\");\r\n// @ts-ignore\r\nconst addAllImage = require(\"../images/toolbar/add-all.svg\");\r\n\r\n\r\ninterface ICBioHelpModalProps{\r\n show: boolean;\r\n handleClose: (modalId: EModalType) => void;\r\n patientView ?: boolean;\r\n}\r\n\r\n// https://github.com/cBioPortal/cbioportal-frontend/blob/29a93c5e992ca1affd3d027355015164ae3602bd/src/shared/lib/Colors.ts\r\nconst CNA_COLOR_AMP = '#ff0000';\r\nconst CNA_COLOR_HOMDEL = '#0000ff';\r\nconst DEFAULT_GREY = '#bebebe';\r\nconst MUT_COLOR_MISSENSE = '#008000';\r\nconst MUT_COLOR_MISSENSE_PASSENGER = '#53D400';\r\nconst MUT_COLOR_INFRAME = '#993404';\r\nconst MUT_COLOR_INFRAME_PASSENGER = '#a68028';\r\nconst MUT_COLOR_TRUNC = '#000000';\r\nconst MUT_COLOR_TRUNC_PASSENGER = '#708090';\r\nconst MUT_COLOR_FUSION = '#8B00C9';\r\nconst MUT_COLOR_PROMOTER = '#00B7CE';\r\nconst MUT_COLOR_OTHER = '#cf58bc';\r\nconst MUT_COLOR_GERMLINE = '#FFFFFF';\r\n\r\nexport function hexToRGBA(str: string): [number, number, number, number] {\r\n const r = parseInt(str[1] + str[2], 16);\r\n const g = parseInt(str[3] + str[4], 16);\r\n const b = parseInt(str[5] + str[6], 16);\r\n return [r, g, b, 1];\r\n}\r\n\r\n// always used shape\r\nconst defaultShape = {\r\n type: 'rectangle',\r\n fill: hexToRGBA(DEFAULT_GREY),\r\n x: 0,\r\n y: 0,\r\n width: 6,\r\n height: 20,\r\n stroke: [0,0,0,0] as RGBAColor,\r\n 'stroke-width': 0\r\n};\r\n\r\nconst labels = [\r\n 'Amplification',\r\n 'Deep Deletion',\r\n 'Fusion',\r\n 'Germline Mutation',\r\n 'Missense Mutation (putative driver)',\r\n 'Missense Mutation (unknown significance)',\r\n 'Other Mutation',\r\n 'Promoter Mutation',\r\n 'Truncating Mutation (putative driver)',\r\n 'Truncating Mutation (unknown significance)',\r\n 'Inframe Mutation (putative driver)',\r\n 'Inframe Mutation (unknown significance)'\r\n];\r\n\r\n// conditional shapes\r\nconst shapeBank = [\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(CNA_COLOR_AMP),\r\n x: 0,\r\n y: 0,\r\n width: 6,\r\n height: 20\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(CNA_COLOR_HOMDEL),\r\n x: 0,\r\n y: 0,\r\n width: 6,\r\n height: 20\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_FUSION),\r\n x: 0,\r\n y: 4,\r\n width: 6,\r\n height: 12\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_GERMLINE),\r\n x: 0,\r\n y: 8.75,\r\n width: 6,\r\n height: 1.6\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_MISSENSE),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_MISSENSE_PASSENGER),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_OTHER),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_PROMOTER),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_TRUNC),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_TRUNC_PASSENGER),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_INFRAME),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_INFRAME_PASSENGER),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n];\r\n\r\nexport default class CBioHelpModal extends React.Component{\r\n\r\n\r\n constructor(props: ICBioHelpModalProps){\r\n super(props);\r\n }\r\n\r\n generateOncoprintLegend() {\r\n const svgNameSpace = 'http://www.w3.org/2000/svg'\r\n const svgElement = document.createElementNS(svgNameSpace, 'svg')\r\n\r\n const legendEleWidth = 280\r\n \r\n const cellWidth = 6\r\n const cellHeight = 23\r\n const cellVerticalPadding = 15\r\n const cellMarginRight = cellWidth + 3\r\n\r\n shapeBank.forEach((shape, index) => {\r\n const offsetX = (index % 3) * (legendEleWidth)\r\n const textOffsetX = offsetX + cellMarginRight\r\n const offsetY = Math.floor(index / 3) * (cellHeight + cellVerticalPadding)\r\n const textOffsetY = offsetY + 15\r\n const g = document.createElementNS(svgNameSpace, 'g')\r\n if (!shape[\"stroke\"]) {\r\n shape[\"stroke\"] = [0,0,0,0];\r\n shape[\"stroke-width\"] = 0;\r\n }\r\n g.appendChild(shapeToSvg(defaultShape, offsetX, offsetY))\r\n g.appendChild(shapeToSvg(shape, offsetX, offsetY))\r\n \r\n const text = document.createElementNS(svgNameSpace, 'text');\r\n text.setAttributeNS(null, 'x', textOffsetX.toString());\r\n text.setAttributeNS(null, 'y', textOffsetY.toString());\r\n text.setAttributeNS(null, 'font-size', '12');\r\n text.setAttributeNS(null, 'font-family', 'Arial');\r\n var textNode = document.createTextNode(labels[index]);\r\n text.appendChild(textNode)\r\n\r\n g.appendChild(text);\r\n svgElement.appendChild(g)\r\n });\r\n\r\n svgElement.setAttribute(\r\n 'width', '840')\r\n svgElement.setAttribute(\r\n 'height','175')\r\n svgElement.style.paddingTop = '20px'\r\n // This is important you need to include this to succesfully render in cytoscape.js!\r\n svgElement.setAttribute('xmlns', svgNameSpace)\r\n \r\n return svgElement\r\n }\r\n\r\n render(){\r\n\r\n const legendPadding = '45px';\r\n\r\n return( \r\n {this.props.handleClose(EModalType.CHELP)}}>\r\n \r\n PathwayMapper cBioPortal Edition 2.2\r\n \r\n {(!this.props.patientView &&\r\n \r\n

\r\n PathwayMapper shows you your genes of interest with the alteration frequencies of selected genetic profiles of the chosen study overlaid on a TCGA pathway using a white to red color scale (the more frequently altered a gene is, the more red it's shown). All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with highest ranking with the default ranking options but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table. \r\n
\r\n
\r\n Refer to the documentation here for the notation used.\r\n
\r\n
\r\n To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table. Ranking criteria might be changed by changing the options at the bottom of the table. \r\n
\r\n
\r\n The buttons on top of the pathway are:\r\n

    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    Save as PNG
    Save as SVG
    Perform layout: Layout is recalculated taking current node positions into account
    Add selected genes to query: You may select additional genes from the pathway by left clicking (Shift + left click to add more genes)
    Add all valid genes to query: All valid gene symbols will be added to the query; others will be ignored
    Edit pathway: Edit both the topology and the geometry of the current pathway with the full blown PathwayMapper editor
    \r\n
\r\n

\r\n
)\r\n },\r\n {(this.props.patientView &&\r\n \r\n

\r\n PathwayMapper shows you your genes of interest with the mutation types, copy number alterations and fusions of selected genetic profiles of the chosen study overlaid on a TCGA pathway using the OncoPrint color scheme. All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with the highest number of genes of interest matching the ones in a pathway but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table. \r\n
\r\n
\r\n Refer to the documentation here for the notation used.\r\n
\r\n
\r\n Genetic alteration legend:\r\n
\r\n

\r\n
\r\n

Putative driver and unknown significance annotations are based on data from OncoKB and CancerHotspots.org.

\r\n
\r\n To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table.\r\n
\r\n
\r\n The buttons on top of the pathway are:\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    Save as PNG
    Save as SVG
    Perform layout: Layout is recalculated taking current node positions into account
    \r\n
\r\n

\r\n
\r\n )}\r\n
\r\n\r\n );\r\n }\r\n\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport { Button, Checkbox, Col, ControlLabel, Form, FormControl, Row, Modal } from 'react-bootstrap';\r\nimport GridOptionsManager from '../managers/GridOptionsManager';\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\nimport PathwayActions from '../utils/PathwayActions';\r\ninterface IGridSettingsProps{\r\n show: boolean;\r\n handleClose: Function;\r\n pathwayActions: PathwayActions;\r\n}\r\n\r\nexport enum EGridType{\r\n GRID,\r\n GUIDE,\r\n NONE\r\n}\r\n\r\n@observer\r\nexport default class GridSettings extends React.Component{\r\n\r\n\r\n\r\n @observable\r\n private gridSize: number;\r\n \r\n @observable\r\n private guideColor: string;\r\n\r\n private defaultSettings = GridOptionsManager.defaultGridGuideOptions;\r\n\r\n @observable\r\n private enabledType: EGridType;\r\n constructor(props: IGridSettingsProps){\r\n super(props);\r\n makeObservable(this);\r\n \r\n this.gridSize = this.defaultSettings.gridSpacing;\r\n this.guideColor = this.defaultSettings.guidelinesStyle.strokeStyle;\r\n }\r\n\r\n setEnabledType(newType: EGridType){\r\n if(newType === this.enabledType){\r\n this.enabledType = EGridType.NONE;\r\n return;\r\n }\r\n\r\n this.enabledType = newType;\r\n }\r\n\r\n render(){\r\n\r\n return(\r\n {this.enabledType = this.props.pathwayActions.enabledType;}}\r\n onHide={() => {\r\n this.props.handleClose(EModalType.GRID);\r\n }}>\r\n \r\n \r\n Grid Settings\r\n \r\n \r\n \r\n
\r\n \r\n \r\n Enable Grids:\r\n \r\n\r\n \r\n {this.setEnabledType(EGridType.GRID);}}>\r\n \r\n \r\n \r\n \r\n Enable Guidelines:\r\n \r\n\r\n \r\n {this.setEnabledType(EGridType.GUIDE);}}>\r\n \r\n \r\n \r\n \r\n Grid Size:\r\n \r\n\r\n \r\n {this.gridSize = e.target.value;}}/>\r\n \r\n \r\n \r\n \r\n Guideline Color:\r\n \r\n\r\n \r\n {this.guideColor = e.target.value;}}/>\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n\r\n\r\n } \r\n}","import React from 'react';\r\nimport {Modal, Button} from 'react-bootstrap';\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\n\r\ninterface IConfirmationModalProps{\r\n show: boolean;\r\n handleClose: (modalId: EModalType) => void;\r\n}\r\n\r\nexport default class ConfirmationModal extends React.Component{\r\n\r\n static pendingFunction: Function;\r\n\r\n constructor(props: IConfirmationModalProps){\r\n super(props);\r\n\r\n }\r\n\r\n render(){\r\n\r\n\r\n return(\r\n {this.props.handleClose(EModalType.CONFIRMATION);}}\r\n >\r\n \r\n Confirmation\r\n \r\n \r\n
\r\n All unsaved changes will be lost. Do you want to continue?\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}","/**\r\n * Created by istemi on 27.09.2016.\r\n */\r\n\r\nexport default class GraphUtilities {\r\n \r\n \r\n static createGraphHierarchy(nodes)\r\n {\r\n //Some arrays and maps for creating graph hierarchy\r\n var tree = [];\r\n var mappedArr = {};\r\n\r\n // First map the nodes of the array to an object -> create a hash table.\r\n for (var i = 0, len = nodes.length; i < len; i++)\r\n {\r\n var arrElem = nodes[i];\r\n mappedArr[arrElem.id()] = arrElem;\r\n mappedArr[arrElem.id()].childNodes = [];\r\n }\r\n\r\n for (var id in mappedArr)\r\n {\r\n var mappedElem = mappedArr[id];\r\n\r\n // If the element is not at the root level, add it to its parent array of children.\r\n if (mappedElem.parent().length > 0)\r\n {\r\n mappedArr[mappedElem.parent().id()].childNodes.push(mappedElem);\r\n }\r\n // If the element is at the root level, add it to first level elements array.\r\n else\r\n {\r\n tree.push(mappedElem);\r\n }\r\n }\r\n return tree;\r\n };\r\n\r\n /*\r\n * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child\r\n * relationship by a field 'parent' which represents to the id of the parent node This function is specific\r\n * for the needs of TCGA Pathway Curation Tool 04/07/2016\r\n *\r\n * @param nodes {array}: flat list of nodes of a graph\r\n * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes\r\n * of each node in the returned array.\r\n * a node in corresponding level.\r\n *\r\n * */\r\n static createGraphHierarchyRealTime(nodes)\r\n {\r\n //Some arrays and maps for creating graph hierarchy\r\n var tree = [];\r\n var mappedArr = {};\r\n\r\n // First map the nodes of the array to an object -> create a hash table.\r\n for (var i = 0, len = nodes.length; i < len; i++)\r\n {\r\n var arrElem = nodes[i];\r\n mappedArr[arrElem.data.id] = arrElem;\r\n mappedArr[arrElem.data.id].children = [];\r\n }\r\n for (var id in mappedArr)\r\n {\r\n var mappedElem = mappedArr[id];\r\n\r\n // If the element is not at the root level, add it to its parent array of children.\r\n if (mappedElem.data.parent != -1)\r\n {\r\n mappedArr[mappedElem.data.parent].children.push(mappedElem);\r\n }\r\n // If the element is at the root level, add it to first level elements array.\r\n else\r\n {\r\n tree.push(mappedElem);\r\n }\r\n }\r\n return tree;\r\n };\r\n}","import EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport GraphUtilities from \"../utils/GraphUtilities\";\r\n\r\nexport default class SVGExporter {\r\n SVGNameSpace = \"http://www.w3.org/2000/svg\";\r\n svg = document.createElementNS(this.SVGNameSpace, \"svg\");\r\n NODE_FILL_COLOR = \"rgb(255,255,255)\";\r\n FAMILY_FILL_COLOR = \"rgb(255,255,255)\";\r\n FAMILY_STROKE_COLOR = \"rgb(204,204,204)\";\r\n NODE_STROKE_COLOR = \"rgb(0,0,0)\";\r\n COMPARTMENT_STROKE_WIDTH = 2;\r\n NODE_STROKE_WIDTH = 1;\r\n NODE_OPACITY = 0.5;\r\n ROUNDING_FACTOR = 6;\r\n GENOMICDATA_LABEL_Y_OFFSET = -15;\r\n EDGE_ARROW_SCALE = 1.7;\r\n EDGE_WIDTH = 1;\r\n T_ARROW_HEAD_WIDTH = 2 * this.EDGE_ARROW_SCALE;\r\n T_ARROW_HEAD_HEIGHT = 8 * this.EDGE_ARROW_SCALE;\r\n TRIANGLE_ARROW_HEAD_HEIGHT = 8 * this.EDGE_ARROW_SCALE;\r\n TRIANGLE_ARROW_HEAD_WIDTH = 8 * this.EDGE_ARROW_SCALE;\r\n DASH_PARAMETERS = \"5, 3\";\r\n COMPOUND_MARGIN = 8;\r\n NODE_FONT_SIZE = 14;\r\n\r\n edgeEditing: any;\r\n editor: EditorActionsManager;\r\n constructor(edgeEditing: any, editor: EditorActionsManager) {\r\n this.edgeEditing = edgeEditing;\r\n this.editor = editor;\r\n }\r\n\r\n resetSVG() {\r\n this.svg = document.createElementNS(this.SVGNameSpace, \"svg\");\r\n }\r\n\r\n exportGraph(nodes, edges) {\r\n //Reset SVG\r\n this.resetSVG();\r\n this.svg.setAttribute(\"version\", \"1.1\");\r\n this.svg.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\r\n //Set viewport of output SVG\r\n var cyBounds = this.editor.cy.extent();\r\n this.svg.setAttribute(\r\n \"viewBox\",\r\n cyBounds.x1 + \" \" + cyBounds.y1 + \" \" + cyBounds.w + \" \" + cyBounds.h\r\n );\r\n\r\n var self = this;\r\n var nodeMap = {};\r\n\r\n var nodeTree = GraphUtilities.createGraphHierarchy(nodes);\r\n var traverseFunction = function(node) {\r\n //Create SVG for current node\r\n nodeMap[node.id()] = node;\r\n var genomicDataSVG = self.editor.getGenomicDataSVG(node).children;\r\n var oncoprintDataSVG = self.editor.getOncoprintDataSVG(node);\r\n self.svg.appendChild(self.createRect(node));\r\n var labelOffset =\r\n (genomicDataSVG && genomicDataSVG.length > 0) ||\r\n oncoprintDataSVG.outerHTML !== \"\"\r\n ? self.GENOMICDATA_LABEL_Y_OFFSET\r\n : 0;\r\n self.svg.appendChild(self.createNodeLabel(node, labelOffset));\r\n\r\n //Append Genomic Data SVG\r\n if (genomicDataSVG) {\r\n while (genomicDataSVG.length > 0) {\r\n var elemSVG = genomicDataSVG[0];\r\n var nodePosition = node.position();\r\n var svgX = elemSVG.getAttribute(\"x\");\r\n var svgY = elemSVG.getAttribute(\"y\");\r\n elemSVG.setAttribute(\r\n \"x\",\r\n nodePosition.x - node.width() / 2 + parseFloat(svgX)\r\n );\r\n elemSVG.setAttribute(\r\n \"y\",\r\n nodePosition.y - node.height() / 2 + parseFloat(svgY)\r\n );\r\n self.svg.appendChild(elemSVG);\r\n }\r\n }\r\n //Append Oncoprint Data SVG\r\n else if (oncoprintDataSVG.outerHTML !== \"\") {\r\n var nodePosition = node.position();\r\n\r\n const width = parseInt(oncoprintDataSVG.getAttribute(\"width\"));\r\n const height = parseInt(oncoprintDataSVG.getAttribute(\"height\"));\r\n const verticalPadding = 8;\r\n\r\n const y =\r\n nodePosition.y + node.height() / 2 - (height + verticalPadding);\r\n oncoprintDataSVG.setAttribute(\"x\", nodePosition.x - width / 2);\r\n oncoprintDataSVG.setAttribute(\"y\", y);\r\n self.svg.appendChild(oncoprintDataSVG);\r\n }\r\n\r\n //Traverse children\r\n if (node.childNodes) {\r\n for (var i in node.childNodes) {\r\n traverseFunction(node.childNodes[i]);\r\n }\r\n }\r\n };\r\n\r\n //Traverse node hierarchy\r\n for (var i in nodeTree) {\r\n var rootLevelNode = nodeTree[i];\r\n traverseFunction(rootLevelNode);\r\n }\r\n\r\n edges.forEach(function(edge) {\r\n self.drawEdge(edge);\r\n });\r\n\r\n return this.svg.outerHTML;\r\n }\r\n\r\n drawEdge(edge) {\r\n const sourceEndpoint = edge.sourceEndpoint();\r\n const targetEndpoint = edge.targetEndpoint();\r\n const targetArrowShape = edge.style(\"target-arrow-shape\");\r\n const lineStyle = edge.style(\"line-style\");\r\n const curveStyle = edge.style(\"curve-style\");\r\n const anchorPoints = curveStyle === \"segments\" ? \r\n edge.segmentPoints() : \r\n edge.controlPoints();\r\n\r\n const labelElement = this.createEdgeLabel(edge);\r\n if (labelElement) {\r\n this.svg.appendChild(labelElement);\r\n }\r\n\r\n let lastAnchor = {\r\n x: sourceEndpoint.x,\r\n y: sourceEndpoint.y\r\n }\r\n let edgeEndpoint = {\r\n x: targetEndpoint.x,\r\n y: targetEndpoint.y\r\n };\r\n\r\n if (anchorPoints && anchorPoints.length > 0) {\r\n lastAnchor = {\r\n x: anchorPoints[anchorPoints.length - 1].x,\r\n y: anchorPoints[anchorPoints.length - 1].y\r\n }\r\n }\r\n\r\n var unitV = this.unitVector({\r\n x: targetEndpoint.x - lastAnchor.x,\r\n y: targetEndpoint.y - lastAnchor.y,\r\n });\r\n var inverseUnitV = this.scale(unitV, -1);\r\n\r\n var targetX = targetEndpoint.x;\r\n var targetY = targetEndpoint.y;\r\n\r\n //Draw Triangle arrow head\r\n if (targetArrowShape === \"triangle\") {\r\n targetX =\r\n targetEndpoint.x +\r\n this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.x;\r\n targetY =\r\n targetEndpoint.y +\r\n this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.y;\r\n\r\n var point1Vector = this.rotateVector(unitV, Math.PI / 2);\r\n var point2Vector = this.rotateVector(unitV, -Math.PI / 2);\r\n\r\n point1Vector = this.scale(\r\n point1Vector,\r\n this.TRIANGLE_ARROW_HEAD_WIDTH / 2\r\n );\r\n point2Vector = this.scale(\r\n point2Vector,\r\n this.TRIANGLE_ARROW_HEAD_WIDTH / 2\r\n );\r\n\r\n var point1X = targetX + point1Vector.x;\r\n var point1Y = targetY + point1Vector.y;\r\n\r\n var point2X = targetX + point2Vector.x;\r\n var point2Y = targetY + point2Vector.y;\r\n\r\n edgeEndpoint = {\r\n x: (point1X + point2X) / 2,\r\n y: (point1Y + point2Y) / 2\r\n }\r\n\r\n var polySVG = document.createElementNS(this.SVGNameSpace, \"polygon\");\r\n polySVG.setAttribute(\r\n \"points\",\r\n point1X +\r\n \",\" +\r\n point1Y +\r\n \",\" +\r\n point2X +\r\n \",\" +\r\n point2Y +\r\n \",\" +\r\n targetEndpoint.x +\r\n \",\" +\r\n targetEndpoint.y\r\n );\r\n\r\n this.svg.appendChild(polySVG);\r\n }\r\n //Draw T type arrow head\r\n else if (targetArrowShape === \"tee\") {\r\n targetX =\r\n targetEndpoint.x \r\n targetY =\r\n targetEndpoint.y \r\n\r\n //Calculate T shape points\r\n var point1Vector = this.rotateVector(unitV, Math.PI / 2);\r\n var point2Vector = this.rotateVector(unitV, -Math.PI / 2);\r\n point1Vector = this.scale(point1Vector, this.T_ARROW_HEAD_HEIGHT / 2);\r\n point2Vector = this.scale(point2Vector, this.T_ARROW_HEAD_HEIGHT / 2);\r\n\r\n var point1X = targetX + point1Vector.x;\r\n var point1Y = targetY + point1Vector.y;\r\n var point2X = targetX + point2Vector.x;\r\n var point2Y = targetY + point2Vector.y;\r\n\r\n edgeEndpoint = {\r\n x: (point1X + point2X) / 2,\r\n y: (point1Y + point2Y) / 2\r\n }\r\n\r\n //Draw edge arrow line here !\r\n var lineSVG = document.createElementNS(this.SVGNameSpace, \"line\");\r\n lineSVG.setAttribute(\"x1\", point1X);\r\n lineSVG.setAttribute(\"y1\", point1Y);\r\n lineSVG.setAttribute(\"x2\", point2X);\r\n lineSVG.setAttribute(\"y2\", point2Y);\r\n lineSVG.setAttribute(\"stroke-width\", this.T_ARROW_HEAD_WIDTH.toString());\r\n lineSVG.setAttribute(\"stroke\", \"black\");\r\n this.svg.appendChild(lineSVG);\r\n }\r\n \r\n // no anchors means a single line connecting source and target end points\r\n if (!anchorPoints || anchorPoints.length < 1) {\r\n const lineSVG = document.createElementNS(this.SVGNameSpace, \"line\");\r\n lineSVG.setAttribute(\"x1\", sourceEndpoint.x);\r\n lineSVG.setAttribute(\"y1\", sourceEndpoint.y);\r\n lineSVG.setAttribute(\"x2\", edgeEndpoint.x);\r\n lineSVG.setAttribute(\"y2\", edgeEndpoint.y);\r\n lineSVG.setAttribute(\"stroke-width\", this.EDGE_WIDTH.toString());\r\n lineSVG.setAttribute(\"stroke\", \"black\");\r\n if (lineStyle === \"dashed\") {\r\n lineSVG.setAttribute(\"stroke-dasharray\", this.DASH_PARAMETERS);\r\n }\r\n this.svg.appendChild(lineSVG);\r\n }\r\n else if (curveStyle === \"unbundled-bezier\" || curveStyle === \"bezier\") {\r\n const pathSVG = document.createElementNS(this.SVGNameSpace, \"path\");\r\n let pathPoints: string[] = [];\r\n\r\n for (let i = 0; i < anchorPoints.length; i++) {\r\n if (i === 0) {\r\n pathPoints.push(\"M\" + sourceEndpoint.x + \",\" + sourceEndpoint.y);\r\n pathPoints.push(\"Q\" + anchorPoints[i].x + \",\" + anchorPoints[i].y);\r\n if (anchorPoints.length === 1) {\r\n pathPoints.push(edgeEndpoint.x + \",\" + edgeEndpoint.y);\r\n }\r\n else {\r\n const furtherEndPoint = {\r\n x: (anchorPoints[i].x + anchorPoints[i+1].x) / 2,\r\n y: (anchorPoints[i].y + anchorPoints[i+1].y) / 2 \r\n }\r\n pathPoints.push(furtherEndPoint.x + \",\" + furtherEndPoint.y);\r\n }\r\n }\r\n else {\r\n if (i < anchorPoints.length - 1) {\r\n const furtherEndPoint = {\r\n x: (anchorPoints[i].x + anchorPoints[i+1].x) / 2,\r\n y: (anchorPoints[i].y + anchorPoints[i+1].y) / 2 \r\n }\r\n pathPoints.push(\"T\" + furtherEndPoint.x + \",\" + furtherEndPoint.y);\r\n }\r\n else {\r\n pathPoints.push(\"T\" + edgeEndpoint.x + \",\" + edgeEndpoint.y);\r\n }\r\n }\r\n }\r\n pathSVG.setAttribute(\r\n 'd',\r\n pathPoints.join(\" \")\r\n );\r\n pathSVG.setAttribute('stroke-width', this.EDGE_WIDTH.toString());\r\n pathSVG.setAttribute('stroke', 'black');\r\n if (lineStyle === \"dashed\") {\r\n pathSVG.setAttribute(\"stroke-dasharray\", this.DASH_PARAMETERS);\r\n }\r\n pathSVG.setAttribute('fill', 'none');\r\n this.svg.appendChild(pathSVG);\r\n }\r\n // anchors means polyline\r\n else {\r\n const polylineSVG = document.createElementNS(this.SVGNameSpace, \"polyline\");\r\n let polylinePoints: string[] = [];\r\n\r\n for (let i = 0; i < anchorPoints.length; i++) {\r\n if (i === 0) {\r\n polylinePoints.push(sourceEndpoint.x + \",\" + sourceEndpoint.y);\r\n polylinePoints.push(anchorPoints[i].x + \",\" + anchorPoints[i].y);\r\n if (anchorPoints.length === 1) {\r\n polylinePoints.push(edgeEndpoint.x + \",\" + edgeEndpoint.y);\r\n }\r\n }\r\n else if (i === anchorPoints.length - 1) {\r\n polylinePoints.push(anchorPoints[i].x + \",\" + anchorPoints[i].y);\r\n polylinePoints.push(edgeEndpoint.x + \",\" + edgeEndpoint.y);\r\n }\r\n else {\r\n polylinePoints.push(anchorPoints[i].x + \",\" + anchorPoints[i].y);\r\n }\r\n }\r\n polylineSVG.setAttribute(\r\n 'points',\r\n polylinePoints.join(\" \")\r\n );\r\n polylineSVG.setAttribute('stroke-width', this.EDGE_WIDTH.toString());\r\n polylineSVG.setAttribute('stroke', 'black');\r\n if (lineStyle === \"dashed\") {\r\n lineSVG.setAttribute(\"stroke-dasharray\", this.DASH_PARAMETERS);\r\n }\r\n polylineSVG.setAttribute('fill', 'none');\r\n this.svg.appendChild(polylineSVG);\r\n }\r\n \r\n }\r\n\r\n createRect(node) {\r\n var nodeRectangle = document.createElementNS(this.SVGNameSpace, \"rect\");\r\n var nodePosition = node.position();\r\n if (node.isParent()) {\r\n nodeRectangle.setAttribute(\r\n \"x\",\r\n nodePosition.x - node.width() / 2 - this.COMPOUND_MARGIN / 2 + \"\"\r\n );\r\n nodeRectangle.setAttribute(\r\n \"y\",\r\n nodePosition.y - node.height() / 2 - this.COMPOUND_MARGIN / 2 + \"\"\r\n );\r\n nodeRectangle.setAttribute(\"width\", node.width() + this.COMPOUND_MARGIN);\r\n nodeRectangle.setAttribute(\r\n \"height\",\r\n node.height() + this.COMPOUND_MARGIN\r\n );\r\n } else {\r\n nodeRectangle.setAttribute(\"x\", nodePosition.x - node.width() / 2 + \"\");\r\n nodeRectangle.setAttribute(\"y\", nodePosition.y - node.height() / 2 + \"\");\r\n nodeRectangle.setAttribute(\"width\", node.width());\r\n nodeRectangle.setAttribute(\"height\", node.height());\r\n }\r\n\r\n nodeRectangle = this.createStyleForNodes(node, nodeRectangle);\r\n\r\n return nodeRectangle;\r\n }\r\n\r\n createNodeLabel(node, genomicDataOffset) {\r\n var verticalTextOffset = 5;\r\n var nodePosition = node.position();\r\n var svgText = document.createElementNS(this.SVGNameSpace, \"text\");\r\n\r\n if (node.isParent()) {\r\n verticalTextOffset = 20;\r\n svgText.setAttribute(\"x\", nodePosition.x);\r\n svgText.setAttribute(\r\n \"y\",\r\n nodePosition.y + node.height() / 2 + verticalTextOffset\r\n );\r\n } else {\r\n svgText.setAttribute(\"x\", nodePosition.x);\r\n svgText.setAttribute(\r\n \"y\",\r\n nodePosition.y + verticalTextOffset + genomicDataOffset\r\n );\r\n }\r\n\r\n svgText.setAttribute(\"font-family\", \"Arial\");\r\n svgText.setAttribute(\"text-anchor\", \"middle\");\r\n svgText.setAttribute(\"font-size\", this.NODE_FONT_SIZE.toString());\r\n svgText.innerHTML = node.data(\"name\");\r\n return svgText;\r\n }\r\n\r\n createStyleForNodes(node, nodeRectangle) {\r\n var nodeType = node.data().type;\r\n var strokeWidth = node.css(\"border-width\") || this.NODE_STROKE_WIDTH;\r\n var strokeColor = this.NODE_STROKE_COLOR;\r\n var fillColor = this.NODE_FILL_COLOR;\r\n var opacity = this.NODE_OPACITY;\r\n var strokeOpacity = 1;\r\n\r\n if (nodeType == \"GENE\" || nodeType == \"COMPARTMENT\") {\r\n nodeRectangle.setAttribute(\"rx\", this.ROUNDING_FACTOR);\r\n nodeRectangle.setAttribute(\"ry\", this.ROUNDING_FACTOR);\r\n\r\n if (nodeType == \"COMPARTMENT\")\r\n strokeWidth = this.COMPARTMENT_STROKE_WIDTH;\r\n }\r\n\r\n if (nodeType == \"PROCESS\") {\r\n opacity = 0;\r\n strokeOpacity = 0;\r\n }\r\n\r\n if (nodeType == \"FAMILY\") {\r\n fillColor = this.FAMILY_FILL_COLOR;\r\n strokeColor = this.FAMILY_STROKE_COLOR;\r\n }\r\n\r\n var styleString =\r\n \"stroke-width:\" +\r\n strokeWidth +\r\n \";\" +\r\n \"stroke:\" +\r\n strokeColor +\r\n \";\" +\r\n \"fill-opacity:\" +\r\n opacity +\r\n \";\" +\r\n \"fill:\" +\r\n fillColor +\r\n \";\" +\r\n \"stroke-opacity:\" +\r\n strokeOpacity +\r\n \";\";\r\n\r\n nodeRectangle.setAttribute(\"style\", styleString);\r\n\r\n return nodeRectangle;\r\n }\r\n\r\n createEdgeLabel(edge) {\r\n const labelText = edge.data(\"name\");\r\n \r\n if (labelText === \"\") {\r\n return undefined;\r\n }\r\n const svgTextElement = document.createElementNS(this.SVGNameSpace, \"text\");\r\n\r\n const fontSize = edge.style(\"font-size\");\r\n const fontFamily = edge.style(\"font-family\");\r\n\r\n // get rotation angle in degrees for transform: rotate()\r\n const labelRotationAngle = this.getEdgeLabelRotationAngle(edge);\r\n const lineHeight = edge._private.rscratch.labelLineHeight;\r\n\r\n // adjust margins to compensate for the label hack (see stylesheet)\r\n const dx = (lineHeight / 4) * Math.sin(edge._private.rscratch.labelAngle);\r\n const dy = (lineHeight / 4) * Math.cos(edge._private.rscratch.labelAngle);\r\n\r\n const labelPos = {\r\n x: edge._private.rscratch.labelX + dx,\r\n y: edge._private.rscratch.labelY - dy\r\n }\r\n\r\n svgTextElement.setAttribute('x', labelPos.x.toString());\r\n svgTextElement.setAttribute('y', labelPos.y.toString());\r\n svgTextElement.setAttribute(\"font-family\", fontFamily);\r\n svgTextElement.setAttribute(\"text-anchor\", \"middle\");\r\n svgTextElement.setAttribute(\"font-size\", fontSize);\r\n\r\n svgTextElement.innerHTML = labelText;\r\n\r\n // adjusting for autorotate option\r\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#rotate \r\n svgTextElement.setAttribute(\r\n \"transform\", \r\n \"rotate(\" + \r\n labelRotationAngle +\r\n \" \" +\r\n labelPos.x.toString() +\r\n \" \" +\r\n labelPos.y.toString()+\r\n \")\");\r\n\r\n return svgTextElement;\r\n }\r\n\r\n getEdgeLabelRotationAngle(edge) {\r\n const labelAngle = edge._private.rscratch.labelAngle;\r\n\r\n if (!labelAngle) {\r\n return 0;\r\n }\r\n\r\n return this.toDegrees(labelAngle);\r\n }\r\n\r\n toDegrees(radians) {\r\n const pi = Math.PI;\r\n return radians * (180/pi);\r\n }\r\n\r\n unitVector(v) {\r\n var inverseLength = 1 / Math.sqrt(v.x * v.x + v.y * v.y);\r\n\r\n return {\r\n x: v.x * inverseLength,\r\n y: v.y * inverseLength,\r\n };\r\n }\r\n\r\n rotateVector(v, radians) {\r\n var newX = v.x * Math.cos(radians) - v.y * Math.sin(radians);\r\n var newY = v.x * Math.sin(radians) + v.y * Math.cos(radians);\r\n\r\n return { x: newX, y: newY };\r\n }\r\n\r\n scale(v, scalar) {\r\n var newX = v.x * scalar;\r\n var newY = v.y * scalar;\r\n\r\n return { x: newX, y: newY };\r\n }\r\n}\r\n","import $ from \"jquery\";\r\nimport { forEach } from \"lodash\";\r\nimport { GeneticAlterationRuleSet, shapeToSvg } from \"oncoprintjs\";\r\nimport tippy from \"tippy.js\";\r\nimport \"tippy.js/dist/tippy.css\"; // optional for styling\r\nimport { groupComparisonData, IColorValueMap } from \"../ui/react-pathway-mapper\";\r\n\r\ninterface Color {\r\n r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\ninterface ValueColorPair {\r\n value: number;\r\n color: Color;\r\n}\r\n\r\nconst svgNameSpace = \"http://www.w3.org/2000/svg\";\r\n\r\nfunction hexToRGB(hex: string) {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n }\r\n : null;\r\n}\r\nfunction swap(a, b) {\r\n let temp = a;\r\n a = b;\r\n b = temp;\r\n}\r\n\r\nfunction findValueColorInterval(\r\n colorScheme: IColorValueMap,\r\n value: number\r\n): { lower: ValueColorPair; upper: ValueColorPair } {\r\n const pairs = Object.entries(colorScheme)\r\n .map(([value, color]) => {\r\n return {\r\n value: Number(value),\r\n color: hexToRGB(color),\r\n };\r\n })\r\n .sort((o1, o2) => {\r\n return o1.value - o2.value;\r\n });\r\n\r\n if (value < pairs[0].value) {\r\n return {\r\n lower: {\r\n value: -Infinity,\r\n color: pairs[0].color,\r\n },\r\n upper: {\r\n value: pairs[0].value,\r\n color: pairs[0].color,\r\n },\r\n };\r\n } else if (value > pairs[pairs.length - 1].value) {\r\n return {\r\n lower: {\r\n value: pairs[pairs.length - 1].value,\r\n color: pairs[pairs.length - 1].color,\r\n },\r\n upper: {\r\n value: Infinity,\r\n color: pairs[pairs.length - 1].color,\r\n },\r\n };\r\n } else {\r\n for (let i = 0; i < pairs.length - 1; i++) {\r\n if (value >= pairs[i].value && value < pairs[i + 1].value) {\r\n return {\r\n lower: {\r\n value: pairs[i].value,\r\n color: pairs[i].color,\r\n },\r\n upper: {\r\n value: pairs[i + 1].value,\r\n color: pairs[i + 1].color,\r\n },\r\n };\r\n }\r\n }\r\n\r\n return {\r\n lower: {\r\n value: -Infinity,\r\n color: pairs[0].color,\r\n },\r\n upper: {\r\n value: Infinity,\r\n color: pairs[pairs.length - 1].color,\r\n },\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Map the percentage value to r,g,b values using a log scale, i.e instead of taking the ratio linearly by taking differences\r\n * between the lower and upper color r,g,b values, take the differences between their Math.log values. This makes the color\r\n * scale up to the upper value much quicker, i.e in a 0-100 mapping a value of 20 doesn't map to 1/5 way between two colors\r\n * but closer to half way. This is done because high numbers in alteration values are extremely rare and even small numbers\r\n * are usually significant.\r\n */\r\nfunction getMappedColor(\r\n lowerColor: Color,\r\n upperColor: Color,\r\n lowerValue: number,\r\n upperValue: number,\r\n percent: number\r\n): Color {\r\n const up = Math.log(1 + upperValue);\r\n const low = Math.log(1 + lowerValue);\r\n const p = Math.log(1 + (percent >= 0 ? percent : percent * -1));\r\n\r\n // arbitrary value used to slow down the scaling of log instead of getting too much into math\r\n const scalingFactor = percent >= 0 ? 0.8 : 1.2;\r\n\r\n const ratio = ((p - low) / (up - low)) * scalingFactor;\r\n\r\n return {\r\n r: lowerColor.r + ratio * (upperColor.r - lowerColor.r),\r\n g: lowerColor.g + ratio * (upperColor.g - lowerColor.g),\r\n b: lowerColor.b + ratio * (upperColor.b - lowerColor.b),\r\n };\r\n}\r\n\r\nfunction genomicDataRectangleGenerator(\r\n x,\r\n y,\r\n w,\r\n h,\r\n percent,\r\n parentSVG,\r\n colorScheme,\r\n groupColor?\r\n) {\r\n const limits = findValueColorInterval(colorScheme, Number(percent));\r\n let color: Color = { r: 255, g: 255, b: 255 };\r\n if (limits.lower.value === -Infinity) {\r\n color = limits.upper.color;\r\n } else if (limits.upper.value === Infinity) {\r\n color = limits.lower.color;\r\n } else {\r\n let upperValue = limits.upper.value;\r\n let lowerValue = limits.lower.value;\r\n let upperColor = limits.upper.color;\r\n let lowerColor = limits.lower.color;\r\n\r\n if (lowerValue < 0 && upperValue <= 0) {\r\n lowerValue *= -1;\r\n upperValue *= -1;\r\n swap(lowerValue, upperValue);\r\n } else if (lowerValue < 0 && upperValue > 0) {\r\n upperValue += lowerValue * -1;\r\n lowerValue = 0;\r\n }\r\n\r\n color = getMappedColor(\r\n lowerColor,\r\n upperColor,\r\n lowerValue,\r\n upperValue,\r\n Number(percent)\r\n );\r\n }\r\n\r\n let colorString = \"\";\r\n colorString = ( percent === undefined || percent[0] === '-' || Number(percent) > 100 ) ? \"rgb(210,210,210)\" : `rgb(${Math.round(color.r)}, ${Math.round(color.g )}, \r\n ${Math.round(color.b)})`;\r\n // Rectangle Part\r\n const overlayRect = document.createElementNS(svgNameSpace, \"rect\");\r\n overlayRect.setAttribute(\"x\", x);\r\n overlayRect.setAttribute(\"y\", y);\r\n overlayRect.setAttribute(\"width\", w);\r\n overlayRect.setAttribute(\"height\", h);\r\n if( groupColor !== undefined && percent !== undefined ){\r\n overlayRect.setAttribute(\"style\", \"stroke-width:2;stroke:\" + groupColor + \";\" + \"opacity:1;fill:\" + colorString + \";\" );\r\n overlayRect.setAttribute(\"border-color\", \"#ffffff\");\r\n }\r\n else {\r\n overlayRect.setAttribute(\"style\", \"stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:\" + colorString + \";\");\r\n }\r\n // Text Part\r\n if (percent[0] === \"-\") {\r\n percent = percent.substr(1);\r\n }\r\n const textPercent = percent < 0.5 && percent > 0 ? \"<0.5\" : Number(percent).toFixed(1);\r\n const text = Number(percent) > 100 ? \"N/P\" : textPercent + \"%\";\r\n const fontSize = 14;\r\n const textLength = text.length;\r\n const xOffset = w / 2 - textLength * 4;\r\n const yOffset = fontSize / 3;\r\n const svgText = document.createElementNS(svgNameSpace, \"text\");\r\n svgText.setAttribute(\"x\", x + xOffset);\r\n svgText.setAttribute(\"y\", y + h / 2 + yOffset);\r\n svgText.setAttribute(\"font-family\", \"Arial\");\r\n svgText.setAttribute(\"font-size\", fontSize + \"\");\r\n if( groupColor !== undefined && percent !== undefined && percent >= 0 && percent <= 100 ){\r\n svgText.setAttribute(\"border-color\", \"red\");\r\n }\r\n svgText.innerHTML = text;\r\n parentSVG.appendChild(overlayRect);\r\n if( percent != undefined && percent !== undefined )\r\n parentSVG.appendChild(svgText);\r\n}\r\n\r\nexport default class GenomicDataOverlayManager {\r\n public genomicDataMap: {};\r\n public visibleGenomicDataMapByType: {};\r\n public groupedGenomicDataCount: number;\r\n public groupedGenomicDataMap: {};\r\n public patientData: any;\r\n public groupComparisonData: groupComparisonData;\r\n private DEFAULT_VISIBLE_GENOMIC_DATA_COUNT: number;\r\n private observers: any[];\r\n private cy: any;\r\n private colorScheme: IColorValueMap;\r\n\r\n constructor(cy: any) {\r\n this.cy = cy;\r\n this.genomicDataMap = {};\r\n this.patientData = {};\r\n this.visibleGenomicDataMapByType = {};\r\n this.groupedGenomicDataMap = {};\r\n this.groupedGenomicDataCount = 0;\r\n this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT = 6;\r\n this.colorScheme = {\r\n \"-100\": \"#0000ff\",\r\n \"0\": \"#ffffff\",\r\n \"100\": \"#ff0000\",\r\n };\r\n // Observer-observable pattern related stuff\r\n this.observers = [];\r\n }\r\n\r\n getEmptyGroupID() {\r\n const oldCount = this.groupedGenomicDataCount;\r\n this.groupedGenomicDataCount++;\r\n return oldCount;\r\n }\r\n\r\n addGenomicDataLocally(genomicData, groupID) {\r\n this.parseGenomicData(genomicData, groupID);\r\n this.showGenomicData();\r\n this.notifyObservers();\r\n }\r\n\r\n preparePortalGenomicDataShareDB(genomicData) {\r\n const geneMap = {};\r\n const visMap = {};\r\n\r\n for (const cancerKey in genomicData) {\r\n for (const geneSymbol in genomicData[cancerKey]) {\r\n geneMap[geneSymbol] = {};\r\n geneMap[geneSymbol][cancerKey] = genomicData[cancerKey][geneSymbol];\r\n }\r\n\r\n visMap[cancerKey] = true;\r\n }\r\n\r\n return {\r\n genomicDataMap: geneMap,\r\n visibilityMap: visMap,\r\n };\r\n }\r\n\r\n addGenomicData(data) {\r\n this.genomicDataMap = data;\r\n }\r\n\r\n removeGenomicVisData() {\r\n this.visibleGenomicDataMapByType = {};\r\n }\r\n\r\n addGenomicDataWithGeneSymbol(geneSymbol, data) {\r\n this.genomicDataMap[geneSymbol] = data;\r\n }\r\n\r\n addGenomicGroupData(groupID, data) {\r\n this.groupedGenomicDataMap[groupID] = data;\r\n }\r\n\r\n addPortalGenomicData(data, groupID, groupsToBeRendered?) {\r\n\r\n this.groupComparisonData = data;\r\n for (const cancerStudy of Object.keys(data)) {\r\n this.visibleGenomicDataMapByType[cancerStudy] = true;\r\n // Group current cancer study according to the groupID\r\n if (this.groupedGenomicDataMap[groupID] === undefined) {\r\n this.groupedGenomicDataMap[groupID] = [];\r\n }\r\n\r\n this.groupedGenomicDataMap[groupID].push(cancerStudy);\r\n\r\n var cancerData = data[cancerStudy];\r\n\r\n for (const geneSymbol of Object.keys(cancerData)) {\r\n if (this.genomicDataMap[geneSymbol] === undefined)\r\n this.genomicDataMap[geneSymbol] = {};\r\n\r\n this.genomicDataMap[geneSymbol][cancerStudy] = data[cancerStudy][\r\n geneSymbol\r\n ].toFixed\r\n ? data[cancerStudy][geneSymbol].toFixed(2)\r\n : data[cancerStudy][geneSymbol];\r\n }\r\n }\r\n //This parameter is used as flag for PatientView PathwayMapper Functions\r\n if (data[\"PatientView\"] == 1) {\r\n this.patientData = data;\r\n this.showPatientData();\r\n }\r\n else if( groupsToBeRendered !== undefined){\r\n this.showGroupComparisonData(groupsToBeRendered);\r\n } \r\n else {\r\n this.showGenomicData();\r\n }\r\n this.notifyObservers();\r\n }\r\n\r\n clearAllGenomicData = function() {\r\n this.genomicDataMap = {};\r\n this.visibleGenomicDataMapByType = {};\r\n this.groupedGenomicDataMap = {};\r\n this.groupedGenomicDataCount = 0;\r\n };\r\n\r\n removeGenomicData() {\r\n this.genomicDataMap = {};\r\n }\r\n\r\n removeGenomicDataWithGeneSymbol(geneSymbol) {\r\n this.genomicDataMap[geneSymbol] = {};\r\n }\r\n\r\n addGenomicVisData(key, data) {\r\n this.visibleGenomicDataMapByType[key] = data;\r\n }\r\n\r\n prepareGenomicDataShareDB = function(genomicData) {\r\n const genomicDataMap = {};\r\n const cancerTypes = [];\r\n const visibleGenomicDataMapByType = {};\r\n\r\n // By lines\r\n const lines = genomicData.split(\"\\n\");\r\n // First line is meta data !\r\n const metaLineColumns = lines[0].split(\"\\t\");\r\n\r\n // Parse cancer types\r\n for (let i = 1; i < metaLineColumns.length; i++) {\r\n cancerTypes.push(metaLineColumns[i]);\r\n // Update initially visible genomic data boxes !\r\n if (i - 1 < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) {\r\n visibleGenomicDataMapByType[cancerTypes[i - 1]] = true;\r\n } else {\r\n visibleGenomicDataMapByType[cancerTypes[i - 1]] = false;\r\n }\r\n }\r\n\r\n // parse genomic data\r\n for (let i = 1; i < lines.length; i++) {\r\n // EOF check\r\n if (lines[i].length === 0) {\r\n break;\r\n }\r\n\r\n // Split each line by tab and parse genomic data content\r\n const lineContent = lines[i].split(\"\\t\");\r\n const geneSymbol = lineContent[0];\r\n\r\n // If current gene entry is not in genomic data map create new hashmap entry\r\n if (!(geneSymbol in genomicDataMap)) {\r\n genomicDataMap[geneSymbol] = {};\r\n }\r\n\r\n // Add each entry of genomic data\r\n for (let j = 1; j < lineContent.length; j++) {\r\n genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j];\r\n }\r\n }\r\n\r\n const returnObj = {\r\n genomicDataMap: genomicDataMap,\r\n visibilityMap: visibleGenomicDataMapByType,\r\n };\r\n\r\n return returnObj;\r\n };\r\n\r\n updateGenomicDataVisibility = function(_key, isVisible) {\r\n if (_key in this.visibleGenomicDataMapByType) {\r\n this.visibleGenomicDataMapByType[_key] = isVisible;\r\n }\r\n };\r\n\r\n hideGenomicData = function() {\r\n\r\n this.cy.nodes('[type=\"GENE\"]').forEach(node => {\r\n node.data('w', this.getRequiredWidthForGenomicData(0));\r\n })\r\n\r\n this.cy\r\n .style()\r\n .selector('node[type=\"GENE\"]')\r\n .style(\"text-margin-y\", 0)\r\n .style(\"background-image\", function(ele) {\r\n const dataURI = \"data:image/svg+xml;utf8,\";\r\n return dataURI;\r\n })\r\n .update();\r\n };\r\n\r\n countVisibleGenomicDataByType() {\r\n // Count the genomic data that will be displayed on nodes' body\r\n let genomicDataBoxCount = 0;\r\n for (let cancerType in this.visibleGenomicDataMapByType) {\r\n if (this.visibleGenomicDataMapByType[cancerType]) {\r\n genomicDataBoxCount++;\r\n }\r\n }\r\n\r\n return genomicDataBoxCount;\r\n }\r\n\r\n generateSVGForNode(ele) {\r\n const genomicDataBoxCount = this.countVisibleGenomicDataByType();\r\n\r\n // Experimental data overlay part !\r\n const dataURI = \"data:image/svg+xml;utf8,\";\r\n const svgNameSpace = \"http://www.w3.org/2000/svg\";\r\n\r\n const nodeLabel = ele.data(\"name\");\r\n // If there is no genomic data for this node return !\r\n if (!(nodeLabel in this.genomicDataMap)) {\r\n return dataURI;\r\n }\r\n\r\n const eleBBox = ele.boundingBox();\r\n const reqWidth = this.getRequiredWidthForGenomicData(genomicDataBoxCount);\r\n const overlayRecBoxW = reqWidth - 10;\r\n const overlayRecBoxH = 25;\r\n const svg: any = document.createElementNS(svgNameSpace, \"svg\");\r\n // It seems this should be set according to the node size !\r\n svg.setAttribute(\"width\", reqWidth);\r\n svg.setAttribute(\"height\", eleBBox.h);\r\n // This is important you need to include this to succesfully render in cytoscape.js!\r\n svg.setAttribute(\"xmlns\", svgNameSpace);\r\n\r\n // Overlay Data Rect\r\n const overLayRectBBox = {\r\n w: overlayRecBoxW,\r\n h: overlayRecBoxH,\r\n x: reqWidth / 2 - overlayRecBoxW / 2,\r\n y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18,\r\n };\r\n\r\n const genomicFrequencyData = this.genomicDataMap[nodeLabel];\r\n\r\n let maxGenomicDataBoxCount = /*(genomicDataBoxCount > 3) ? 3:*/ genomicDataBoxCount;\r\n let genomicBoxCounter = 0;\r\n\r\n for (let i in this.groupedGenomicDataMap) {\r\n for (let j in this.groupedGenomicDataMap[i]) {\r\n const cancerType = this.groupedGenomicDataMap[i][j];\r\n if (!this.visibleGenomicDataMapByType[cancerType]) {\r\n continue;\r\n }\r\n\r\n genomicDataRectangleGenerator(\r\n overLayRectBBox.x +\r\n (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount,\r\n overLayRectBBox.y,\r\n overLayRectBBox.w / maxGenomicDataBoxCount,\r\n overLayRectBBox.h,\r\n genomicFrequencyData[cancerType] !== undefined ? genomicFrequencyData[cancerType] : null,\r\n svg,\r\n this.colorScheme\r\n );\r\n\r\n genomicBoxCounter++;\r\n }\r\n } \r\n return svg;\r\n }\r\n generateSVGForGroupComparisonNode(ele, groupsToBeRendered? ) {\r\n const genomicDataBoxCount = 0;\r\n\r\n // Experimental data overlay part !\r\n const dataURI = \"data:image/svg+xml;utf8,\";\r\n const svgNameSpace = \"http://www.w3.org/2000/svg\";\r\n\r\n const nodeLabel = ele.data(\"name\");\r\n // If there is no genomic data for this node return !\r\n if (!(Object.keys(this.groupComparisonData).includes(nodeLabel) )) {\r\n return dataURI;\r\n }\r\n\r\n const eleBBox = ele.boundingBox();\r\n const reqWidth = this.getRequiredWidthForGenomicData(groupsToBeRendered.length);\r\n const overlayRecBoxW = reqWidth - 10;\r\n const overlayRecBoxH = 25;\r\n const svg: any = document.createElementNS(svgNameSpace, \"svg\");\r\n // It seems this should be set according to the node size !\r\n svg.setAttribute(\"width\", reqWidth);\r\n svg.setAttribute(\"height\", eleBBox.h);\r\n // This is important you need to include this to succesfully render in cytoscape.js!\r\n svg.setAttribute(\"xmlns\", svgNameSpace);\r\n ele.style(\"width\", reqWidth + 10 );\r\n\r\n // Overlay Data Rect\r\n const overLayRectBBox = {\r\n w: overlayRecBoxW,\r\n h: overlayRecBoxH,\r\n x: reqWidth / 2 - overlayRecBoxW / 2,\r\n y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18,\r\n };\r\n\r\n\r\n let maxGenomicDataBoxCount = groupsToBeRendered.length;\r\n let genomicBoxCounter = 0;\r\n\r\n /* for (let i in this.groupComparisonData) {\r\n if( i !== nodeLabel)\r\n continue;*/\r\n let i = nodeLabel;\r\n for (let j in this.groupComparisonData[i]) {\r\n const percentageInGroup = this.groupComparisonData[i][j];\r\n if (percentageInGroup !== undefined && i === nodeLabel) {\r\n genomicDataRectangleGenerator(\r\n overLayRectBBox.x +\r\n (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount,\r\n overLayRectBBox.y,\r\n (overLayRectBBox.w ) / maxGenomicDataBoxCount - 2,\r\n overLayRectBBox.h,\r\n percentageInGroup,\r\n svg,\r\n this.colorScheme,\r\n groupsToBeRendered[genomicBoxCounter].color\r\n );\r\n genomicBoxCounter++;\r\n } else if( i === nodeLabel ){\r\n genomicDataRectangleGenerator(\r\n overLayRectBBox.x +\r\n (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount,\r\n overLayRectBBox.y,\r\n (overLayRectBBox.w ) / maxGenomicDataBoxCount - 4,\r\n overLayRectBBox.h,\r\n 0,\r\n svg,\r\n this.colorScheme,\r\n groupsToBeRendered[genomicBoxCounter].color\r\n );\r\n genomicBoxCounter++;\r\n }\r\n \r\n\r\n \r\n }\r\n return svg;\r\n }\r\n\r\n // Just an utility function to calculate required width for genes for genomic data !\r\n getRequiredWidthForGenomicData(genomicDataBoxCount) {\r\n const term = genomicDataBoxCount > 3 ? genomicDataBoxCount - 3 : 0;\r\n return 150 + term * 35;\r\n }\r\n\r\n updateColorScheme(colorValueMap: IColorValueMap) {\r\n this.colorScheme = colorValueMap;\r\n }\r\n\r\n showGenomicData(resizeNodeCallback?: (node: any) => void) {\r\n const self = this;\r\n\r\n const genomicDataBoxCount = this.countVisibleGenomicDataByType();\r\n\r\n if (genomicDataBoxCount < 1) {\r\n // Hide all genomic data and return\r\n this.hideGenomicData();\r\n return;\r\n }\r\n\r\n this.cy.nodes('[type=\"GENE\"]').forEach(node => {\r\n node.data('w', this.getRequiredWidthForGenomicData(genomicDataBoxCount));\r\n if (resizeNodeCallback) {\r\n resizeNodeCallback(node);\r\n }\r\n });\r\n\r\n this.cy\r\n .style()\r\n .selector('node[type=\"GENE\"]')\r\n .style(\"text-margin-y\", function(ele) {\r\n const nodeLabel = ele.data(\"name\");\r\n // If there is no genomic data for this node return !\r\n if (!(nodeLabel in self.genomicDataMap)) {\r\n return 0;\r\n }\r\n\r\n // Else shift label in Y axis\r\n return -15;\r\n })\r\n .style(\"background-image\", function(ele) {\r\n const x = encodeURIComponent(self.generateSVGForNode(ele).outerHTML);\r\n if (x === \"undefined\") {\r\n return \"none\";\r\n }\r\n const dataURI = \"data:image/svg+xml;utf8,\" + x;\r\n return dataURI;\r\n })\r\n .update();\r\n }\r\n\r\n generateHTMLContentForComparisonNodeTooltip(ele, groupsToBeRendered) {\r\n const tooltipMaxHeight = \"200px\";\r\n const tooltipMaxWidth = \"200px\";\r\n const marginBetweenSamples = \"12px\";\r\n \r\n const nodeLabel = ele.data(\"name\");\r\n const data = this.groupComparisonData[nodeLabel];\r\n \r\n // Outer wrapper for the entire tooltip\r\n let wrapper = $(\"
\");\r\n wrapper.css({\r\n \"max-width\": tooltipMaxWidth,\r\n \"max-height\": tooltipMaxHeight,\r\n \"word-wrap\": \"break-word\",\r\n \"overflow-y\": \"auto\",\r\n \"font-size\" : \"12px\",\r\n });\r\n\r\n // Inner wrapper for a single sample\r\n let sampleWrapper = $(\"
\");\r\n sampleWrapper.css({\r\n \"margin-top\": 0,\r\n });\r\n let counter = 0;\r\n for ( let j in data ){\r\n let sampleWrapper2 = $(\"
\");\r\n sampleWrapper2.css({\r\n \"margin-top\": 0,\r\n });\r\n let sampleWrapper = $(\"
\");\r\n sampleWrapper.css({\r\n \"margin-top\": 0\r\n //\"display\" : \"inline-flex\"\r\n });\r\n let sampleWrapperSquare = $(\"
\");\r\n sampleWrapperSquare.css({\r\n \"height\": \"12px\",\r\n \"width\": \"12px\",\r\n \"background-color\": groupsToBeRendered[counter].color,\r\n });\r\n\r\n counter++;\r\n sampleWrapper.append(\r\n $(\r\n \"
\" + \"
\" + \"■\" + \"
\" \r\n + \" \" + j + \": \" + data[j].toFixed(1)\r\n + \"
\" \r\n ));\r\n sampleWrapper2.append(sampleWrapper);\r\n wrapper.append(sampleWrapper);\r\n }\r\n return wrapper;\r\n }\r\n\r\n showGroupComparisonData(groupsToBeRendered : any[],resizeNodeCallback?: (node: any) => void, ) {\r\n const self = this;\r\n const data = this.groupComparisonData;\r\n const genomicDataBoxCount = 0;\r\n if (genomicDataBoxCount < 1) {\r\n // Hide all genomic data and return\r\n //this.hideGenomicData();\r\n //return;\r\n }\r\n\r\n this.cy.nodes().forEach(node => {\r\n node.data('w', 1000);\r\n if (resizeNodeCallback) {\r\n resizeNodeCallback(node);\r\n }\r\n });\r\n\r\n this.cy\r\n .style()\r\n .selector('node[type=\"GENE\"]')\r\n .style(\"text-margin-y\", function(ele) {\r\n const nodeLabel = ele.data(\"name\");\r\n // If there is no genomic data for this node return !\r\n if ( !(Object.keys(self.groupComparisonData).includes(nodeLabel))) {\r\n return 0;\r\n }\r\n \r\n // Else shift label in Y axis\r\n return -15;\r\n })\r\n .style(\"background-image\", function(ele) {\r\n const x = encodeURIComponent(self.generateSVGForGroupComparisonNode(ele,groupsToBeRendered).outerHTML);\r\n if (x === \"undefined\") {\r\n return \"none\";\r\n }\r\n const dataURI = \"data:image/svg+xml;utf8,\" + x;\r\n return dataURI;\r\n })\r\n .update();\r\n\r\n this.cy.on(\"mouseover\", 'node[type=\"GENE\"]', function(event) {\r\n const node = event.target || event.cyTarget;\r\n const nodeLabel = node.data(\"name\");\r\n if (!data[nodeLabel]) {\r\n return;\r\n }\r\n\r\n let ref = node.popperRef();\r\n let dummyDomEle = document.createElement(\"div\");\r\n document.body.appendChild(dummyDomEle);\r\n\r\n let tip = tippy(dummyDomEle, {\r\n // tippy props:\r\n getReferenceClientRect: ref.getBoundingClientRect, // https://atomiks.github.io/tippyjs/v6/all-props/#getreferenceclientrect\r\n trigger: \"manual\", // mandatory, we cause the tippy to show programmatically.\r\n placement: \"bottom\",\r\n interactive: true,\r\n theme: \"cbioportal\",\r\n // your own custom props\r\n // content prop can be used when the target is a single element https://atomiks.github.io/tippyjs/v6/constructor/#prop\r\n content: () => {\r\n let content = self.generateHTMLContentForComparisonNodeTooltip(node, groupsToBeRendered)\r\n .get(0);\r\n\r\n return content;\r\n },\r\n onHidden(instance) {\r\n instance.destroy();\r\n dummyDomEle.remove();\r\n },\r\n });\r\n\r\n node.one(\"showqtipevent\", function() {\r\n tip.show();\r\n });\r\n\r\n node.on(\"mouseout\", function() {\r\n if (dummyDomEle && dummyDomEle[\"_tippy\"]) {\r\n tip.hide();\r\n }\r\n });\r\n\r\n node.trigger(\"showqtipevent\");\r\n });\r\n }\r\n\r\n parseGenomicData(genomicData, groupID) {\r\n this.genomicDataMap = this.genomicDataMap || {};\r\n this.visibleGenomicDataMapByType = this.visibleGenomicDataMapByType || {};\r\n this.groupedGenomicDataMap = this.groupedGenomicDataMap || {};\r\n const cancerTypes = [];\r\n\r\n // By lines\r\n const lines = genomicData.split(\"\\n\");\r\n // First line is meta data !\r\n const metaLineColumns = lines[0].split(\"\\t\");\r\n\r\n // Parse cancer types\r\n for (let i = 1; i < metaLineColumns.length; i++) {\r\n cancerTypes.push(metaLineColumns[i]);\r\n const visibleGenomicDataCount = Object.keys(this.visibleGenomicDataMapByType).length;\r\n // Update initially visible genomic data boxes !\r\n if (visibleGenomicDataCount < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) {\r\n this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = true;\r\n } else {\r\n this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = false;\r\n }\r\n\r\n if (this.groupedGenomicDataMap[groupID] === undefined) {\r\n this.groupedGenomicDataMap[groupID] = [];\r\n }\r\n this.groupedGenomicDataMap[groupID].push(cancerTypes[i - 1]);\r\n }\r\n\r\n // parse genomic data\r\n for (let i = 1; i < lines.length; i++) {\r\n // EOF check\r\n if (lines[i].length === 0) {\r\n break;\r\n }\r\n\r\n // Split each line by tab and parse genomic data content\r\n const lineContent = lines[i].split(\"\\t\");\r\n const geneSymbol = lineContent[0];\r\n\r\n // If current gene entry is not in genomic data map create new map\r\n if (!(geneSymbol in this.genomicDataMap)) {\r\n this.genomicDataMap[geneSymbol] = {};\r\n }\r\n\r\n // Add each entry of genomic data\r\n for (let j = 1; j < lineContent.length; j++) {\r\n this.genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j];\r\n }\r\n }\r\n }\r\n\r\n // Simple observer-observable pattern for views!!!!!\r\n registerObserver(observer) {\r\n this.observers.push(observer);\r\n }\r\n\r\n notifyObservers() {\r\n for (const observer of this.observers) {\r\n observer.notify();\r\n }\r\n }\r\n\r\n //This method is needed to calculate the alteration Types for each gene\r\n getAlterationCountForPatient(geneData) {\r\n let count = 0;\r\n for (let altType in geneData) {\r\n count++;\r\n }\r\n return count;\r\n }\r\n\r\n //These methods are created to be used in CbioPortal PatientView they are not used\r\n //in ResultView Page or PathwayMapper Editor\r\n\r\n showPatientData() {\r\n const self = this;\r\n\r\n const data = this.patientData;\r\n\r\n // const genomicDataBoxCount = 3 //this.countVisibleGenomicDataByType(); //CHANGE\r\n const genomicDataBoxCount = data.geneticTrackData\r\n ? data.geneticTrackData.length\r\n : 3;\r\n if (genomicDataBoxCount < 1) {\r\n // Hide all genomic data and return\r\n this.hideGenomicData();\r\n return;\r\n }\r\n\r\n this.cy\r\n .style()\r\n .selector('node[type=\"GENE\"]')\r\n // It used to change the width of nodes only locally\r\n .style(\"width\", (ele) => {\r\n return this.getRequiredWidthForGenomicData(genomicDataBoxCount);\r\n })\r\n .style(\"text-margin-y\", function(ele) {\r\n const nodeLabel = ele.data(\"name\");\r\n\r\n // If there is no genomic data for this node return !\r\n if (!(nodeLabel in data)) {\r\n return 0;\r\n }\r\n\r\n // Else shift label in Y axis\r\n return -15;\r\n })\r\n .style(\"background-image\", function(ele) {\r\n const x = encodeURIComponent(\r\n // self.generateSVGForPatientNode(ele, data).outerHTML\r\n self.generateOncoprintForPatientNode(ele).outerHTML\r\n );\r\n if (x === \"undefined\") {\r\n return \"none\";\r\n }\r\n const dataURI = \"data:image/svg+xml;utf8,\" + x;\r\n return dataURI;\r\n })\r\n .update();\r\n\r\n this.cy.on(\"mouseover\", 'node[type=\"GENE\"]', function(event) {\r\n const node = event.target || event.cyTarget;\r\n const nodeLabel = node.data(\"name\");\r\n if (!data[nodeLabel]) {\r\n return;\r\n }\r\n\r\n let ref = node.popperRef();\r\n let dummyDomEle = document.createElement(\"div\");\r\n document.body.appendChild(dummyDomEle);\r\n\r\n let tip = tippy(dummyDomEle, {\r\n // tippy props:\r\n getReferenceClientRect: ref.getBoundingClientRect, // https://atomiks.github.io/tippyjs/v6/all-props/#getreferenceclientrect\r\n trigger: \"manual\", // mandatory, we cause the tippy to show programmatically.\r\n placement: \"bottom\",\r\n interactive: true,\r\n theme: \"cbioportal\",\r\n // your own custom props\r\n // content prop can be used when the target is a single element https://atomiks.github.io/tippyjs/v6/constructor/#prop\r\n content: () => {\r\n let content = self\r\n .generateHTMLContentForNodeTooltip(node, data)\r\n .get(0);\r\n\r\n return content;\r\n },\r\n onHidden(instance) {\r\n instance.destroy();\r\n dummyDomEle.remove();\r\n },\r\n });\r\n\r\n node.one(\"showqtipevent\", function() {\r\n tip.show();\r\n });\r\n\r\n node.on(\"mouseout\", function() {\r\n if (dummyDomEle && dummyDomEle[\"_tippy\"]) {\r\n tip.hide();\r\n }\r\n });\r\n\r\n node.trigger(\"showqtipevent\");\r\n });\r\n }\r\n\r\n //Every mutation type has a unique color coded. This method is used to retrieve the colors\r\n getOncoprintColors(selectedGene) {\r\n const oncoprintColors = {\r\n Missense_Mutation: \"rgb(0,128,0)\",\r\n inframe: \"#993404\",\r\n truncating: \"#000000\",\r\n Fusion: \"rgb(139,0,201)\",\r\n AMP: \"rgb(255,0,0)\",\r\n gain: \"#ffb6c1\",\r\n heatloss: \"#8fd8d8\",\r\n homdel: \"rgb(0,0,255)\",\r\n DeepDel: \"rgb(0,0,255)\",\r\n \"5'Flank\": \"rgb(207,88,188)\",\r\n in_frame_del: \"rgb(166,128,40)\",\r\n };\r\n\r\n if (oncoprintColors[selectedGene] !== undefined) {\r\n return oncoprintColors[selectedGene];\r\n } else {\r\n //Types are not on the list corresponds to black\r\n return \"rgb(0,0,0)\";\r\n }\r\n }\r\n generateSVGForPatientNode(ele, patientData) {\r\n //Here we should use the parameter patientData when calculating the expressions\r\n const genomicDataBoxCount = this.countVisibleGenomicDataByType();\r\n // Experimental data overlay part !\r\n const dataURI = \"data:image/svg+xml;utf8,\";\r\n const svgNameSpace = \"http://www.w3.org/2000/svg\";\r\n //nodeLabel refers to the nodeLabels in the overlay data\r\n const nodeLabel = ele.data(\"name\");\r\n // If there is no genomic data for this node return !\r\n if (!(nodeLabel in patientData)) {\r\n return dataURI;\r\n }\r\n //this parameter refers to the count of alteration types for each gene\r\n const alterationBoxCount = this.getAlterationCountForPatient(\r\n patientData[nodeLabel]\r\n );\r\n\r\n const eleBBox = ele.boundingBox();\r\n const svg: any = document.createElementNS(svgNameSpace, \"svg\");\r\n //this parameter is set to 12 since there are 12 different possiblities for types\r\n const term = alterationBoxCount > 12 ? alterationBoxCount - 12 : 0;\r\n const reqWidth = 150 + term * 35;\r\n\r\n const overlayRecBoxW = reqWidth - 10;\r\n const overlayRecBoxH = 25;\r\n\r\n // It seems this should be set according to the node size !\r\n svg.setAttribute(\"width\", reqWidth);\r\n svg.setAttribute(\"height\", eleBBox.h);\r\n // This is important you need to include this to succesfully render in cytoscape.js!\r\n svg.setAttribute(\"xmlns\", svgNameSpace);\r\n\r\n // Overlay Data Rect\r\n const overLayRectBBox = {\r\n w: overlayRecBoxW,\r\n h: overlayRecBoxH,\r\n x: reqWidth / 2 - overlayRecBoxW / 2,\r\n y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18,\r\n };\r\n let genomicBoxCounter = 0;\r\n //required width is calculated for each gene since box count is different for each gene\r\n for (let j in patientData[nodeLabel]) {\r\n const genomicAlterationData = patientData[nodeLabel];\r\n const alterationType = j;\r\n\r\n if (!this.visibleGenomicDataMapByType[nodeLabel]) {\r\n continue;\r\n }\r\n //get the color string corresponding to the alterationType\r\n let colorString = this.getOncoprintColors(alterationType);\r\n\r\n if (genomicAlterationData[alterationType] !== undefined) {\r\n genomicDataRectangleGeneratorPatient(\r\n overLayRectBBox.x +\r\n (genomicBoxCounter * overLayRectBBox.w) / alterationBoxCount,\r\n overLayRectBBox.y,\r\n overLayRectBBox.w / alterationBoxCount,\r\n overLayRectBBox.h,\r\n 100,\r\n svg,\r\n alterationType,\r\n colorString\r\n );\r\n } else {\r\n genomicDataRectangleGeneratorPatient(\r\n overLayRectBBox.x +\r\n (genomicBoxCounter * overLayRectBBox.w) / alterationBoxCount,\r\n overLayRectBBox.y,\r\n overLayRectBBox.w / alterationBoxCount,\r\n overLayRectBBox.h,\r\n null,\r\n svg,\r\n \"\",\r\n null\r\n );\r\n }\r\n\r\n genomicBoxCounter++;\r\n }\r\n //This function differs from genomicRectangleGenerator. genomicDataRectangleGeneratorPatient\r\n //has an extra parameter text. In patient view alterationTypes of genes are displayed instead of\r\n //alteration percentage. Hence a text is sent to this method which is alterationType\r\n function genomicDataRectangleGeneratorPatient(\r\n x,\r\n y,\r\n w,\r\n h,\r\n percent,\r\n parentSVG,\r\n text,\r\n colorString\r\n ) {\r\n if (percent) {\r\n const isNegativePercent = percent < 0;\r\n // Rectangle Part\r\n const overlayRect = document.createElementNS(svgNameSpace, \"rect\");\r\n overlayRect.setAttribute(\"x\", x);\r\n overlayRect.setAttribute(\"y\", y);\r\n overlayRect.setAttribute(\"width\", w);\r\n overlayRect.setAttribute(\"height\", h);\r\n overlayRect.setAttribute(\r\n \"style\",\r\n \"stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:\" + colorString + \";\"\r\n );\r\n\r\n // Text Part\r\n const fontSize = 14;\r\n const textLength = 4;\r\n const xOffset = w / 2 - textLength * 4;\r\n const yOffset = fontSize / 3;\r\n\r\n const svgText = document.createElementNS(svgNameSpace, \"text\");\r\n if (colorString === \"rgb(0,0,0)\") {\r\n svgText.setAttribute(\"fill\", \"white\");\r\n }\r\n svgText.setAttribute(\"x\", x + xOffset);\r\n svgText.setAttribute(\"y\", y + h / 2 + yOffset);\r\n\r\n svgText.setAttribute(\"font-family\", \"Arial\");\r\n svgText.setAttribute(\"font-size\", fontSize + \"\");\r\n\r\n //first 4 letters of the alterationTypes are used\r\n svgText.innerHTML = text.substring(0, 4);\r\n parentSVG.appendChild(overlayRect);\r\n parentSVG.appendChild(svgText);\r\n } else {\r\n //Normally\r\n colorString = \"rgb(210,210,210)\";\r\n }\r\n }\r\n\r\n return svg;\r\n }\r\n\r\n generateOncoprintForPatientNode(ele) {\r\n // const dataURI = 'data:image/svg+xml;utf8,'\r\n // nodeLabel refers to the nodeLabels in the overlay data\r\n const patientData = this.patientData;\r\n const nodeLabel = ele.data(\"name\");\r\n const genomicData = patientData[nodeLabel];\r\n\r\n const svgNameSpace = \"http://www.w3.org/2000/svg\";\r\n const svgElement: any = document.createElementNS(svgNameSpace, \"svg\");\r\n\r\n if (!genomicData) {\r\n return { outerHTML: \"\" };\r\n }\r\n\r\n const ruleset = new GeneticAlterationRuleSet(\r\n genomicData.geneticTrackRuleSetParams\r\n );\r\n const cellWidth = 6;\r\n const cellPadding = 3;\r\n const cellHeight = 23;\r\n const cellVerticalPadding = 8;\r\n\r\n const universalShapes = ruleset.getUniversalShapes(cellWidth, cellHeight);\r\n\r\n const specificShapesPerDatum = ruleset.getSpecificShapesForDatum(\r\n genomicData.geneticTrackData,\r\n cellWidth,\r\n cellHeight\r\n );\r\n\r\n const shapesPerDatum = specificShapesPerDatum.map((specificShapes) =>\r\n universalShapes.concat(specificShapes)\r\n );\r\n\r\n shapesPerDatum.forEach((shapes, index) => {\r\n const offsetX = index * (cellWidth + cellPadding); // width + padding\r\n const offsetY = cellVerticalPadding;\r\n const g = document.createElementNS(svgNameSpace, \"g\");\r\n shapes.forEach((shape) =>\r\n g.appendChild(shapeToSvg(shape, offsetX, offsetY))\r\n );\r\n svgElement.appendChild(g);\r\n });\r\n\r\n // It seems this should be set according to the node size !\r\n svgElement.setAttribute(\r\n \"width\",\r\n ((cellWidth + cellPadding) * shapesPerDatum.length).toString()\r\n );\r\n svgElement.setAttribute(\r\n \"height\",\r\n (cellHeight + cellVerticalPadding).toString()\r\n );\r\n // This is important you need to include this to succesfully render in cytoscape.js!\r\n svgElement.setAttribute(\"xmlns\", svgNameSpace);\r\n\r\n return svgElement;\r\n }\r\n\r\n // Mapping of alteration type keys to strings\r\n // See: https://github.com/cBioPortal/cbioportal-frontend/blob/442e108208846255feb1ed5b309218cd44927fb9/src/shared/components/oncoprint/TooltipUtils.ts#L599\r\n getCNADisplayString(alterationTypeKey: number) {\r\n const disp_cna: { [integerCN: string]: string } = {\r\n \"-2\": \"HOMODELETED\",\r\n \"-1\": \"HETLOSS\",\r\n \"1\": \"GAIN\",\r\n \"2\": \"AMPLIFIED\",\r\n };\r\n return disp_cna[alterationTypeKey];\r\n }\r\n\r\n generateSvgIconForSample(iconColor: string, iconText: string) {\r\n var html =\r\n '' +\r\n '' +\r\n '' +\r\n \"\" +\r\n '' +\r\n '' +\r\n iconText +\r\n \"\" +\r\n \"\" +\r\n \"\";\r\n\r\n return html;\r\n }\r\n\r\n generateHTMLContentForNodeTooltip(ele, patientData) {\r\n const tooltipMaxHeight = \"200px\";\r\n const tooltipMaxWidth = \"200px\";\r\n const marginBetweenSamples = \"10px\";\r\n const sampleIconColorMap = patientData.sampleColors;\r\n const sampleIndexMap = patientData.sampleIndex;\r\n\r\n const nodeLabel = ele.data(\"name\");\r\n const data = patientData[nodeLabel];\r\n\r\n // Outer wrapper for the entire tooltip\r\n var wrapper = $(\"
\");\r\n wrapper.css({\r\n \"max-width\": tooltipMaxWidth,\r\n \"max-height\": tooltipMaxHeight,\r\n \"word-wrap\": \"break-word\",\r\n \"overflow-y\": \"auto\",\r\n });\r\n\r\n data.geneticTrackData.forEach((sample, sampleIndex) => {\r\n const sampleId = sample.sample;\r\n const iconColor = sampleIconColorMap[sampleId];\r\n const iconText = (sampleIndexMap[sampleId] + 1).toString();\r\n const sampleIconSvgHTML = this.generateSvgIconForSample(\r\n iconColor,\r\n iconText\r\n );\r\n\r\n const margin = sampleIndex > 0 ? marginBetweenSamples : \"0px\";\r\n\r\n // Inner wrapper for a single sample\r\n var sampleWrapper = $(\"
\");\r\n sampleWrapper.css({\r\n \"margin-top\": margin,\r\n });\r\n\r\n const sampleData = sample.data;\r\n var mutationInfo = [];\r\n var cnaInfo = [];\r\n var fusionInfo = [];\r\n sampleData.forEach((data) => {\r\n const geneSymbol = data.gene.hugoGeneSymbol;\r\n\r\n if (\r\n sample.disp_mut &&\r\n data.proteinChange &&\r\n data.mutationType !== \"Fusion\"\r\n ) {\r\n const proteinChange = data.proteinChange;\r\n mutationInfo.push({\r\n gene: geneSymbol,\r\n proteinChange: proteinChange,\r\n });\r\n }\r\n\r\n if (sample.disp_cna && data.alteration) {\r\n const cnaLabelKey = data.alteration;\r\n const cnaLabel = this.getCNADisplayString(cnaLabelKey);\r\n cnaInfo.push({\r\n gene: geneSymbol,\r\n cnaLabel: cnaLabel,\r\n });\r\n }\r\n\r\n if (\r\n sample.disp_fusion &&\r\n data.proteinChange &&\r\n data.mutationType === \"Fusion\"\r\n ) {\r\n const proteinChange = data.proteinChange;\r\n fusionInfo.push({\r\n gene: geneSymbol,\r\n proteinChange: proteinChange,\r\n });\r\n }\r\n });\r\n // Prepare HTML for tooltip\r\n var mutationInfoHTML = mutationInfo.length > 0 ? \"Mutation: \" : \"\";\r\n var cnaInfoHTML = cnaInfo.length > 0 ? \"CNA: \" : \"\";\r\n var fusionInfoHTML = fusionInfo.length > 0 ? \"Fusion: \" : \"\";\r\n\r\n mutationInfo.forEach((mutation, index) => {\r\n mutationInfoHTML +=\r\n \"\" + mutation.gene + \" \" + mutation.proteinChange + \"\";\r\n if (index !== mutationInfo.length - 1) {\r\n mutationInfoHTML += \", \";\r\n } else {\r\n mutationInfoHTML += \"
\";\r\n }\r\n });\r\n\r\n cnaInfo.forEach((cna, index) => {\r\n cnaInfoHTML += \"\" + cna.gene + \" \" + cna.cnaLabel + \"\";\r\n if (index !== cnaInfo.length - 1) {\r\n cnaInfoHTML += \", \";\r\n } else {\r\n cnaInfoHTML += \"
\";\r\n }\r\n });\r\n\r\n fusionInfo.forEach((fusion, index) => {\r\n fusionInfoHTML +=\r\n \"\" + fusion.gene + \" \" + fusion.proteinChange + \"\";\r\n if (index !== fusionInfo.length - 1) {\r\n fusionInfoHTML += \", \";\r\n } else {\r\n fusionInfoHTML += \"
\";\r\n }\r\n });\r\n const sampleIdHTML = \" \" + sampleId + \"\" + \"
\";\r\n sampleWrapper.append(\r\n $(\r\n \"
\" +\r\n sampleIconSvgHTML +\r\n sampleIdHTML +\r\n mutationInfoHTML +\r\n cnaInfoHTML +\r\n fusionInfoHTML +\r\n +\"
\"\r\n )\r\n );\r\n wrapper.append(sampleWrapper);\r\n });\r\n\r\n return wrapper;\r\n }\r\n}\r\n","import _, { add } from \"lodash\";\r\nimport { toast, ToastContainer } from \"react-toastify\";\r\nimport { ChatMessageMetaData, IColorValueMap } from \"../ui/react-pathway-mapper\";\r\nimport GraphUtilities from \"../utils/GraphUtilities\";\r\nimport EditorActionsManager from \"./EditorActionsManager\";\r\n\r\nlet sharedb;\r\nlet socket;\r\nlet connection;\r\n\r\nexport default class ShareDBManager {\r\n\r\n readonly NODEMAP_NAME = 'nodes';\r\n readonly EDGEMAP_NAME = 'edges';\r\n readonly LAYOUT_PROPS_NAME = 'layoutProperties';\r\n readonly GLOBAL_OPTS_NAME = 'globalOptions';\r\n //For storing genomic data information per gene\r\n readonly GENOMIC_DATA_MAP_NAME = 'genomicDataMap';\r\n //For storing visibility information of genomic data according to the cancer type\r\n readonly VISIBLE_GENOMIC_DATA_MAP_NAME = 'visibleGenomicDataMapByType';\r\n readonly GENOMIC_DATA_GROUP_NAME = 'genomicDataGroupList';\r\n readonly GENOMIC_DATA_GROUP_COUNT = 'genomicDataGroupCount';\r\n readonly GENOMIC_DATA_COLOR_SCHEME_NAME = 'genomicDataColorScheme';\r\n readonly CHAT_APPLICATION_NAME = 'chatMessages';\r\n readonly CHAT_MESSAGES_COUNT = 'chatMessagesCount';\r\n readonly PATHWAY_TITLE = 'pathwayTitle';\r\n readonly NUMBER_OF_USERS = 'numberOfUsers';\r\n readonly WORK_ID = 'id';\r\n \r\n doc: any;\r\n postFileLoad: any;\r\n editor: EditorActionsManager;\r\n constructor(postFileLoadCallback) {\r\n //Doc data maps names and keys\r\n this.postFileLoad = postFileLoadCallback;\r\n };\r\n\r\n\r\n\r\n getDoc(){\r\n return this.doc;\r\n }\r\n\r\n setEditor(editor: EditorActionsManager){\r\n this.editor = editor;\r\n }\r\n\r\n //Applies any given sharDB opeation to shared document and notifies other clients\r\n applyShareDBOperation(op) {\r\n this.doc.submitOp(op, this.shareDBError);\r\n };\r\n\r\n //Clears genomic data in shared document and notifies other clients\r\n clearShareDBGenomicData() {\r\n var ops = [];\r\n var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME];\r\n var visMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\r\n var genomicDataGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME];\r\n var genomicDataGroupCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\r\n //Reset all genomic maps\r\n for (const key of Object.keys(genomicMap)) {\r\n ops.push({p: [this.GENOMIC_DATA_MAP_NAME, key], od: genomicMap[key]});\r\n }\r\n for (const key of Object.keys(visMap)) {\r\n ops.push({p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, key], od: visMap[key]});\r\n }\r\n for (const key of Object.keys(genomicDataGroupMap)) {\r\n ops.push({p: [this.GENOMIC_DATA_GROUP_NAME, key], od: genomicDataGroupMap[key]});\r\n }\r\n //Reset genomic data group count to 0\r\n ops.push({p: [this.GENOMIC_DATA_GROUP_COUNT], na: -genomicDataGroupCount});\r\n this.doc.submitOp(ops, this.shareDBError);\r\n };\r\n\r\n /*\r\n * Updates shared document object\r\n * @param mapName: map name of the object\r\n * @param objectKey: key of the object\r\n * @param object: new object\r\n *\r\n */\r\n updateShareDBObject(mapName, objectKey, object) {\r\n this.doc.submitOp([{\r\n p: [mapName, objectKey],\r\n od: this.doc.data[mapName][objectKey],\r\n oi: object\r\n }], this.shareDBError);\r\n };\r\n\r\n /*\r\n * Inserts a new shared document object\r\n * @param mapName: map name of the object\r\n * @param objectKey: key of the object\r\n * @param object: new object\r\n *\r\n */\r\n insertShareDBObject(mapName, objectKey, object) {\r\n this.doc.submitOp([{p: [mapName, objectKey], oi: object}], this.shareDBError);\r\n };\r\n\r\n /*\r\n * Deletes a shared document object\r\n * @param mapName: map name of the object\r\n * @param objectKey: key of the object\r\n *\r\n */\r\n deleteShareDBObject(mapName, objectKey) {\r\n this.doc.submitOp([{p: [mapName, objectKey], od: this.doc.data[mapName][objectKey]}], this.shareDBError);\r\n };\r\n\r\n //Initializes layout properties of the shared document\r\n initializeShareDBLayoutProperties() {\r\n this.doc.submitOp([{\r\n p: [this.LAYOUT_PROPS_NAME, 0],\r\n li: [this.editor.layoutProperties]\r\n }], this.shareDBError);\r\n };\r\n\r\n //Initializes global options of the shared document\r\n initializeShareDBGlobalOptions() {\r\n this.doc.submitOp([{\r\n p: [this.GLOBAL_OPTS_NAME, 0],\r\n li: [this.editor.getGlobalOptions()]\r\n }], this.shareDBError);\r\n };\r\n\r\n /*\r\n * Updates layout properties of the shared document and notifies other clients\r\n * @param object: new layout properties object\r\n *\r\n */\r\n updateShareDBLayoutProperties(object) {\r\n this.doc.submitOp([{\r\n p: [this.LAYOUT_PROPS_NAME, 0],\r\n ld: this.doc.data[this.LAYOUT_PROPS_NAME][0],\r\n li: object\r\n }], this.shareDBError);\r\n };\r\n\r\n /*\r\n * Updates global options of the shared document and notifies other clients\r\n * @param object: new global options object\r\n *\r\n */\r\n\r\n getUserId() {\r\n return this.doc.data[this.NUMBER_OF_USERS];\r\n }\r\n\r\n incrementMessageCount(){\r\n this.doc.submitOp([{p: [this.CHAT_MESSAGES_COUNT], na: 1}], this.shareDBError);\r\n }\r\n\r\n incrementNumberOfUsers(){\r\n this.doc.submitOp([{p: [this.NUMBER_OF_USERS], na: 1}], this.shareDBError);\r\n }\r\n\r\n addNewMessage( object : ChatMessageMetaData, chatMessageKey : number){\r\n this.doc.submitOp([{p: [this.CHAT_APPLICATION_NAME, chatMessageKey], oi: object}], this.shareDBError);\r\n };\r\n\r\n updateShareDBGlobalOptions(object) {\r\n this.doc.submitOp([{\r\n p: [this.GLOBAL_OPTS_NAME, 0],\r\n ld: this.doc.data[this.GLOBAL_OPTS_NAME][0],\r\n li: object\r\n }], this.shareDBError);\r\n };\r\n\r\n updateShareDBGenomicDataOverlayColorScheme(object : IColorValueMap) {\r\n this.doc.submitOp([{\r\n p: [this.GENOMIC_DATA_COLOR_SCHEME_NAME, 0],\r\n ld: this.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME][0],\r\n li: object\r\n }], this.shareDBError);\r\n };\r\n\r\n //Increments shared data group count\r\n //Use this function to increment and keep the group count synchronized\r\n incrementShareDBGroupCount() {\r\n this.doc.submitOp([{p: [this.GENOMIC_DATA_GROUP_COUNT], na: 1}], this.shareDBError);\r\n };\r\n\r\n //Checks whether given operation is a replace or add/delete operation\r\n isShareDBReplaceEvent(op) {\r\n return (op.hasOwnProperty(\"oi\") && op.hasOwnProperty(\"od\"))\r\n || (op.hasOwnProperty(\"li\") && op.hasOwnProperty(\"ld\"));\r\n };\r\n\r\n /*\r\n * Gets the initial value of the shared document\r\n * without this function shared document values cannot be reached\r\n */\r\n initializeSharedDBDoc() {\r\n this.doc.subscribe();\r\n };\r\n\r\n shareDBError(err) {\r\n if (err) {\r\n console.error(err);\r\n }\r\n };\r\n\r\n initShareDB() {\r\n sharedb = require('sharedb/lib/client');\r\n socket = new WebSocket('ws://' + window.location.host);\r\n connection = new sharedb.Connection(socket);\r\n\r\n var self = this;\r\n\r\n var id = this.getParam('id');\r\n\r\n var loadFileCallback = function () {\r\n self.onFileLoaded();\r\n };\r\n\r\n //Creates new shared db document and initializes values\r\n var createNewDocument = () => {\r\n var new_id = self.getCustomObjId();\r\n var data = {\r\n id: new_id,\r\n nodes: {},\r\n edges: {},\r\n layoutProperties: [this.editor.layoutProperties],\r\n globalOptions: [this.editor.getGlobalOptions()],\r\n genomicDataMap: {},\r\n visibleGenomicDataMapByType: {},\r\n genomicDataGroupList: {},\r\n genomicDataGroupCount: 0,\r\n chatMessagesCount: 0,\r\n numberOfUsers: 0,\r\n pathwayTitle: [],\r\n genomicDataColorScheme: [{\r\n '-100' : \"#0000ff\",\r\n '0' : \"#ffffff\",\r\n '100' : \"#ff0000\"\r\n }], chatMessages : {}\r\n };\r\n window.history.pushState(null, null, '?id=' + new_id);\r\n self.doc = connection.get('cy', new_id);\r\n self.doc.create(data, loadFileCallback);\r\n };\r\n\r\n //Check if id exists in parameters\r\n //If exists open the shared document\r\n if (id) {\r\n // Check any document exists with given id\r\n this.doc = connection.get('cy', id);\r\n this.doc.fetch(function (err) {\r\n if (err)\r\n throw err;\r\n\r\n if (self.doc.type === null) {\r\n createNewDocument();\r\n return;\r\n }\r\n self.doc.subscribe(loadFileCallback);\r\n });\r\n }\r\n else {\r\n //Create new shared document\r\n createNewDocument();\r\n }\r\n };\r\n\r\n /*\r\n * After a file has been initialized and loaded, we can access the\r\n * document. We will wire up the data in shared document to the UI.\r\n *\r\n */\r\n onFileLoaded() {\r\n this.initializeSharedDBDoc();\r\n this.syncInitialSharedDocData();\r\n this.initSharedDocEventHandlers();\r\n\r\n this.postFileLoad();\r\n };\r\n\r\n /*\r\n * Synchronizes initial data in the shared document to\r\n * client's application.\r\n */\r\n syncInitialSharedDocData() {\r\n var self = this;\r\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\r\n var edgeMap = self.doc.data[this.EDGEMAP_NAME];\r\n var shareDBLayoutProperties = self.doc.data[this.LAYOUT_PROPS_NAME][0];\r\n var globalOptions = self.doc.data[this.GLOBAL_OPTS_NAME][0];\r\n var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME];\r\n var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\r\n var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME];\r\n var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\r\n var chatMessages = self.doc.data[this.CHAT_APPLICATION_NAME];\r\n var chatMessageCount = self.doc.data[this.CHAT_MESSAGES_COUNT];\r\n let genomicDataColorScheme;\r\n \r\n if (self.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME]) {\r\n genomicDataColorScheme = self.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME][0];\r\n }\r\n\r\n self.editor.loadMessages( chatMessages );\r\n self.editor.updateMessageCount( chatMessageCount );\r\n var invalidGenes = [];\r\n var highlightedGenes = [];\r\n var invalidHighlightedGenes = [];\r\n var hiddenGenes = [];\r\n for (const key of Object.keys(nodeMap)) {\r\n var tmpNode = nodeMap[key];\r\n var tmpNodeId = tmpNode.id;\r\n\r\n if (tmpNode.isInvalidGene && tmpNode.isHighlighted) {\r\n invalidHighlightedGenes.push(tmpNodeId);\r\n }\r\n else if (tmpNode.isInvalidGene) {\r\n invalidGenes.push(tmpNodeId);\r\n }\r\n else if (tmpNode.isHighlighted) {\r\n highlightedGenes.push(tmpNodeId);\r\n }\r\n if (tmpNode.isHidden) {\r\n hiddenGenes.push(tmpNodeId);\r\n }\r\n }\r\n var highlightedEdges = [];\r\n for (const key of Object.keys(edgeMap)) {\r\n var tmpEdge = edgeMap[key];\r\n var tmpEdgeId = tmpEdge.id;\r\n if (tmpEdge.isHighlighted) {\r\n highlightedEdges.push(tmpEdgeId);\r\n }\r\n }\r\n\r\n //TODO Workaround for legacy pathways\r\n\r\n // Workaround for backward compatibility of legacy pathways\r\n // Addition of pubmed id field on server if legacy collaborative\r\n // pathways does not have !\r\n for (const key of Object.keys(edgeMap)) {\r\n const tmpEdge = edgeMap[key];\r\n\r\n if (tmpEdge.pubmedIDs == undefined \r\n || tmpEdge.name == undefined \r\n || tmpEdge.bendPoint == undefined \r\n || tmpEdge.anchorPoints == undefined\r\n || tmpEdge.edgeCurveStyle == undefined) {\r\n const pubmedIDs = (tmpEdge.pubmedIDs == undefined) ? [] : tmpEdge.pubmedID;\r\n const edgeLabel = (tmpEdge.name == undefined) ? \"\" : tmpEdge.name;\r\n let anchorPoints = [];\r\n if (tmpEdge.bendPoint) {\r\n anchorPoints = tmpEdge.bendPoint;\r\n }\r\n else if (tmpEdge.anchorPoints) {\r\n anchorPoints = tmpEdge.anchorPoints;\r\n }\r\n const edgeCurveStyle = tmpEdge.edgeCurveStyle ? tmpEdge.edgeCurveStyle : \"bezier\";\r\n\r\n const param = {\r\n type: tmpEdge.type,\r\n source: tmpEdge.source,\r\n id: self.getCustomObjId(),\r\n target: tmpEdge.target,\r\n pubmedID: pubmedIDs,\r\n name: edgeLabel,\r\n anchorPoints: anchorPoints,\r\n edgeCurveStyle: edgeCurveStyle\r\n };\r\n\r\n const newEdge: any = self.edgeInitializer(param);\r\n\r\n\r\n const tmpEdgeID = tmpEdge.id;\r\n const newEdgeID = newEdge.id;\r\n\r\n const ops = [\r\n {p: [self.EDGEMAP_NAME, tmpEdgeID], od: tmpEdge},\r\n {p: [self.EDGEMAP_NAME, newEdgeID], oi: newEdge}\r\n ]\r\n self.applyShareDBOperation(ops);\r\n }\r\n\r\n }\r\n\r\n //Add real time nodes to local graph\r\n this.editor.addNewElementsLocally(nodeMap, edgeMap);\r\n //Adds different type of highlight to nodes and hides if their property is hidden\r\n this.editor.highlightElementsInitially(invalidHighlightedGenes, invalidGenes, highlightedGenes, highlightedEdges, hiddenGenes);\r\n\r\n //Update layout properties & global options!!\r\n if (shareDBLayoutProperties.name == \"cose-bilkent\") {\r\n shareDBLayoutProperties.name = \"fcose\";\r\n this.updateLayoutProperties(shareDBLayoutProperties);\r\n }\r\n this.editor.updateLayoutPropertiesCallback({li: shareDBLayoutProperties});\r\n this.editor.changeGlobalOptions({li: globalOptions});\r\n\r\n //Sync already available genomic data !\r\n\r\n if (!groupedGenomicDataMap) {\r\n\r\n self.insertShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', []);\r\n for (const key of Object.keys(visDataMap)) {\r\n var currentMap = _.clone(groupedGenomicDataMap['0']);\r\n // currentMap.push(visibilityMapKeys[key]);\r\n self.updateShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', currentMap);\r\n }\r\n }\r\n\r\n if (!groupedGenomicDataCount) {\r\n var count = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT];\r\n var op = [{\r\n p: [self.GENOMIC_DATA_GROUP_COUNT],\r\n na: -count\r\n }];\r\n self.applyShareDBOperation(op);\r\n groupedGenomicDataCount = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT];\r\n }\r\n\r\n if (!genomicDataColorScheme) {\r\n genomicDataColorScheme = this.editor.getGenomicDataOverlayColorScheme();\r\n const op = [{\r\n p: [self.GENOMIC_DATA_COLOR_SCHEME_NAME],\r\n oi: [genomicDataColorScheme]\r\n }];\r\n this.applyShareDBOperation(op);\r\n }\r\n\r\n this.editor.updateGenomicDataColorSchemeHandler({li: genomicDataColorScheme});\r\n\r\n for (const key_g of Object.keys(genomicDataMap)) {\r\n this.editor.genomicDataOverlayManager.genomicDataMap[key_g] =\r\n genomicDataMap[key_g];\r\n\r\n }\r\n\r\n for (const key_g of Object.keys(groupedGenomicDataMap)) {\r\n this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key_g] =\r\n groupedGenomicDataMap[key_g];\r\n const data = groupedGenomicDataMap[key_g];\r\n if(data.length !== 1){\r\n console.log(\"Grouped genomic data expected to be of length 1 (from sync)\");\r\n }\r\n data.forEach((profileId: any) => {this.editor.addToProfiles(profileId)});\r\n }\r\n\r\n for (const key_g of Object.keys(visDataMap)) {\r\n this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key_g] =\r\n visDataMap[key_g];\r\n this.editor.adjustVisibilityShareDB(key_g, visDataMap[key_g]);\r\n \r\n }\r\n\r\n //Does not seem necessary for not but just for sake of completeness\r\n this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount;\r\n\r\n this.editor.genomicDataOverlayManager.showGenomicData((node: any) => {\r\n this.editor.resizeElements(node);\r\n });\r\n this.editor.genomicDataOverlayManager.notifyObservers();\r\n this.editor.cy.style().update();\r\n this.editor.cy.fit(50);\r\n };\r\n\r\n /*\r\n * Initialize event listeners for any operation coming from shareDB\r\n *\r\n */\r\n initSharedDocEventHandlers () {\r\n\r\n var self = this;\r\n\r\n //Setup event handlers for maps\r\n var nodeAddRemoveHandler = function (op) {\r\n self.editor.shareDBNodeAddRemoveEventCallBack(op);\r\n };\r\n\r\n var edgeAddRemoveHandler = function (op) {\r\n self.editor.shareDBEdgeAddRemoveEventCallBack(op);\r\n };\r\n\r\n var genomicDataAddRemoveHandler = function (op) {\r\n self.editor.shareDBGenomicDataHandler(op);\r\n };\r\n\r\n var genomicDataVisibilityChangeHandler = function (op) {\r\n self.editor.shareDBGenomicDataVisibilityHandler(op);\r\n self.checkShareDBGenomicData();\r\n };\r\n\r\n var genomicDataGroupChangeHandler = function (op) {\r\n self.editor.shareDBGenomicDataGroupChangeHandler(op);\r\n };\r\n\r\n var updateElementHandler = function (op) {\r\n self.editor.updateElementCallback(op);\r\n };\r\n\r\n var updateLayoutPropsHandler = function (op) {\r\n self.editor.updateLayoutPropertiesCallback(op);\r\n };\r\n\r\n var updateGlobalOptionsHandler = function (op) {\r\n self.editor.changeGlobalOptions(op);\r\n };\r\n\r\n var updateGenomicDataColorSchemeHandler = function (op) {\r\n self.editor.updateGenomicDataColorSchemeHandler(op);\r\n }\r\n\r\n\r\n //Event listeners for maps\r\n this.doc.on('op', function (op, source) {\r\n for (var i = 0; i < op.length; i++) {\r\n var handleOp = op[i];\r\n var path = handleOp.p[0];\r\n var isReplaceEvent = self.isShareDBReplaceEvent(handleOp);\r\n\r\n if( path === self.CHAT_APPLICATION_NAME){\r\n self.editor.updateMessages( self.doc.data[self.CHAT_APPLICATION_NAME][handleOp.p[1]]);\r\n }\r\n if( path === self.CHAT_MESSAGES_COUNT){\r\n self.editor.updateMessageCount(self.doc.data[self.CHAT_MESSAGES_COUNT]);\r\n }\r\n \r\n if( path === self.PATHWAY_TITLE ){\r\n self.editor.updatePathwayTitleBack( self.doc.data[self.PATHWAY_TITLE][0])\r\n }\r\n\r\n if (!isReplaceEvent) {\r\n if (path === self.NODEMAP_NAME) {\r\n nodeAddRemoveHandler(handleOp);\r\n }\r\n else if (path === self.EDGEMAP_NAME) {\r\n edgeAddRemoveHandler(handleOp);\r\n }\r\n else if (path === self.GENOMIC_DATA_MAP_NAME) {\r\n genomicDataAddRemoveHandler(handleOp);\r\n }\r\n else if (path === self.VISIBLE_GENOMIC_DATA_MAP_NAME) {\r\n genomicDataVisibilityChangeHandler(handleOp);\r\n }\r\n else if (path === self.GENOMIC_DATA_GROUP_NAME) {\r\n genomicDataGroupChangeHandler(handleOp);\r\n }\r\n }\r\n else { //Then it is update event\r\n if (path === self.NODEMAP_NAME) {\r\n updateElementHandler(handleOp);\r\n }\r\n else if (path === self.EDGEMAP_NAME) {\r\n updateElementHandler(handleOp);\r\n }\r\n else if (path === self.LAYOUT_PROPS_NAME) {\r\n updateLayoutPropsHandler(handleOp);\r\n }\r\n else if (path === self.GLOBAL_OPTS_NAME) {\r\n updateGlobalOptionsHandler(handleOp);\r\n }\r\n else if (path === self.GENOMIC_DATA_COLOR_SCHEME_NAME) {\r\n updateGenomicDataColorSchemeHandler(handleOp);\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n /*\r\n * Make sure that genomic cloud data is syncronized\r\n */\r\n checkShareDBGenomicData () {\r\n\r\n var self = this;\r\n var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME];\r\n var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\r\n var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME];\r\n var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\r\n\r\n for (var key in genomicDataMap) {\r\n this.editor.genomicDataOverlayManager.genomicDataMap[key] =\r\n genomicDataMap[key];\r\n }\r\n\r\n for (var key in visDataMap) {\r\n this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key] =\r\n visDataMap[key];\r\n }\r\n\r\n for (var key in groupedGenomicDataMap) {\r\n this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key] =\r\n groupedGenomicDataMap[key];\r\n }\r\n this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount;\r\n this.editor.genomicDataOverlayManager.showGenomicData((node: any) => {\r\n this.editor.resizeElements(node);\r\n });\r\n this.editor.genomicDataOverlayManager.notifyObservers();\r\n };\r\n \r\n /*\r\n * Gets the first empty index from the shared document\r\n * genomic data group count and increments counter by 1\r\n *\r\n */\r\n\r\n getEmptyGroupID() {\r\n var returnCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\r\n this.incrementShareDBGroupCount();\r\n return returnCount;\r\n };\r\n\r\n /*\r\n * Gets the first empty index from the shared document\r\n * Initializes & inserts a new genomic data\r\n * by group id or group name\r\n *\r\n */\r\n groupGenomicData(cancerNames, inGroupId) {\r\n var genomicGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME];\r\n var genomicVisMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\r\n\r\n var groupID = \"\" + inGroupId;\r\n var currentGroup = [];\r\n\r\n if (genomicGroupMap.hasOwnProperty(groupID))\r\n currentGroup = _.clone(genomicGroupMap[groupID]);\r\n\r\n for (var i in cancerNames) {\r\n if (!genomicVisMap.hasOwnProperty(cancerNames[i]))\r\n currentGroup.push(cancerNames[i]);\r\n }\r\n\r\n // If group id already exists change existing object\r\n if (genomicGroupMap.hasOwnProperty(groupID)) {\r\n this.updateShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup);\r\n }\r\n else {\r\n //Insert new group\r\n this.insertShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup);\r\n }\r\n\r\n };\r\n\r\n //Clears genomic data on shared document\r\n clearGenomicData() {\r\n this.clearShareDBGenomicData();\r\n };\r\n\r\n addGenomicData(geneData) {\r\n var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME];\r\n\r\n //Iterate over all genmoic data which is mapped by geneSymbol to list of alteration values\r\n //that are also mapped by cancer name and associated value\r\n var ops = [];\r\n for (var geneSymbol in geneData) {\r\n var genomicMapEntry = {};\r\n if (genomicMap.hasOwnProperty(geneSymbol))\r\n genomicMapEntry = _.clone(genomicMap[geneSymbol]);\r\n\r\n for (var cancerType in geneData[geneSymbol]) {\r\n if (!(cancerType in genomicMapEntry))\r\n genomicMapEntry[cancerType] = parseInt(geneData[geneSymbol][cancerType]).toFixed(2);\r\n }\r\n ops.push({\r\n p: [this.GENOMIC_DATA_MAP_NAME, geneSymbol],\r\n oi: genomicMapEntry\r\n });\r\n }\r\n this.applyShareDBOperation(ops);\r\n };\r\n\r\n addGenomicVisibilityData(visMap) {\r\n var ops = [];\r\n for (var cancerStudy in visMap) {\r\n ops.push({\r\n p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, cancerStudy],\r\n oi: visMap[cancerStudy]\r\n });\r\n }\r\n this.applyShareDBOperation(ops);\r\n };\r\n\r\n changeVisibility(nodesToHide, isHidden) {\r\n var self = this;\r\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\r\n\r\n nodesToHide.forEach(function (ele) {\r\n var nodeID = ele.id();\r\n if (nodeMap.hasOwnProperty(nodeID)) {\r\n var realTimeNode = nodeMap[nodeID];\r\n realTimeNode.isHidden = isHidden;\r\n self.updateShareDBObject(self.NODEMAP_NAME, nodeID, realTimeNode);\r\n }\r\n });\r\n };\r\n\r\n changeHighlight(elementsToHighlight, isHighlighted) {\r\n var self = this;\r\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\r\n var edgeMap = self.doc.data[this.EDGEMAP_NAME];\r\n\r\n elementsToHighlight.forEach(function (ele) {\r\n var elementID = ele.id();\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var realTimeNode = nodeMap[elementID];\r\n realTimeNode.isHighlighted = isHighlighted;\r\n self.updateShareDBObject(self.NODEMAP_NAME, elementID, realTimeNode);\r\n }\r\n if (edgeMap.hasOwnProperty(elementID)) {\r\n var realTimeEdge = edgeMap[elementID];\r\n realTimeEdge.isHighlighted = isHighlighted;\r\n self.updateShareDBObject(self.EDGEMAP_NAME, elementID, realTimeEdge);\r\n }\r\n });\r\n };\r\n\r\n addNewNode(nodeData, posData) {\r\n var realTimeGeneratedID = this.getCustomObjId();\r\n var params = {\r\n name: nodeData.name,\r\n type: nodeData.type,\r\n id: realTimeGeneratedID,\r\n parent: nodeData.parent,\r\n w: nodeData.w,\r\n h: nodeData.h,\r\n minWidth: nodeData.minWidth,\r\n minWidthBiasLeft: nodeData.minWidthBiasLeft,\r\n minWidthBiasRight: nodeData.minWidthBiasRight,\r\n minHeight: nodeData.minHeight,\r\n minHeightBiasTop: nodeData.minHeightBiasTop,\r\n minHeightBiasBottom: nodeData.minHeightBiasBottom\r\n };\r\n\r\n //Ensures new node is compatible with the other nodes\r\n var newNode = this.nodeInitializer(params);\r\n if (posData) {\r\n newNode.x = posData.x;\r\n newNode.y = posData.y;\r\n }\r\n this.insertShareDBObject(this.NODEMAP_NAME, realTimeGeneratedID, newNode);\r\n };\r\n\r\n addNewEdge(edgeData) {\r\n var realTimeGeneratedID = this.getCustomObjId();\r\n var params = {\r\n type: edgeData.type,\r\n id: realTimeGeneratedID,\r\n source: edgeData.source,\r\n target: edgeData.target,\r\n pubmedIDs: edgeData.pubmedIDs,\r\n name: edgeData.name,\r\n anchorPoints: edgeData.anchorPoints\r\n };\r\n\r\n //Ensures new edge is compatible with the other edge\r\n var newEdge = this.edgeInitializer(params);\r\n this.insertShareDBObject(this.EDGEMAP_NAME, realTimeGeneratedID, newEdge);\r\n };\r\n\r\n reconnectEdge = function(sourceID, targetID, edgeData) {\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n var edge = edgeMap[edgeData.id];\r\n var edgeID = edge.id;\r\n\r\n edge.source = sourceID;\r\n edge.target = targetID;\r\n\r\n if(edgeMap.hasOwnProperty(edgeID)) {\r\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, edge);\r\n }\r\n else {\r\n throw new Error('Element does not exist in Real Time');\r\n }\r\n };\r\n\r\n\r\n removeElement (elementID) {\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n this.deleteShareDBObject(this.NODEMAP_NAME, elementID);\r\n }\r\n else if (edgeMap.hasOwnProperty(elementID)) {\r\n this.deleteShareDBObject(this.EDGEMAP_NAME, elementID);\r\n }\r\n else {\r\n throw new Error('Element does not exist in Real Time');\r\n }\r\n };\r\n\r\n moveElement (ele) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n var elementID = ele.id();\r\n var newPos = ele.position();\r\n\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.x = newPos.x;\r\n tmpNode.y = newPos.y;\r\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n };\r\n\r\n //This function is used for movements of all selected elements wrt alignment selected\r\n changeElementsPositionByAlignment (coll) {\r\n var self = this;\r\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\r\n\r\n coll.forEach(function (ele) {\r\n var elementID = ele.node.id();\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.x = ele.nextPosition.x;\r\n tmpNode.y = ele.nextPosition.y;\r\n self.updateShareDBObject(self.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n });\r\n };\r\n\r\n resizeElement (ele, previousWidth, previousHeight) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n var elementID = ele.id();\r\n var newWidth = ele.width();\r\n var newHeight = ele.height();\r\n var currentX = ele.position('x');\r\n var currentY = ele.position('y');\r\n\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.x = currentX + newWidth - previousWidth;\r\n tmpNode.y = currentY + newHeight - previousHeight;\r\n tmpNode.w = newWidth;\r\n tmpNode.h = newHeight;\r\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n };\r\n\r\n setSizeOfElement (ele, newWidth, newHeight) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n var elementID = ele.id();\r\n\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.w = newWidth;\r\n tmpNode.h = newHeight;\r\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n };\r\n\r\n resizeCompound (ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n var elementID = ele.id();\r\n var currentX = ele.position('x');\r\n var currentY = ele.position('y');\r\n\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.x = currentX;\r\n tmpNode.y = currentY;\r\n tmpNode.minWidth = minWidth;\r\n tmpNode.minWidthBiasLeft = minWidthBiasLeft;\r\n tmpNode.minWidthBiasRight = minWidthBiasRight;\r\n tmpNode.minHeight = minHeight;\r\n tmpNode.minHeightBiasTop = minHeightBiasTop;\r\n tmpNode.minHeightBiasBottom = minHeightBiasBottom;\r\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n };\r\n\r\n changeNodePositionsShareDB (nodes) {\r\n var self = this;\r\n var nodeMap = self.doc.data[self.NODEMAP_NAME];\r\n\r\n nodes.forEach(function (ele) {\r\n var nodeID = ele.id();\r\n if (nodeMap.hasOwnProperty(nodeID)) {\r\n var realTimeNode = nodeMap[nodeID];\r\n realTimeNode.x = ele.position('x');\r\n realTimeNode.y = ele.position('y');\r\n self.updateShareDBObject(self\r\n .NODEMAP_NAME, nodeID, realTimeNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n });\r\n };\r\n\r\n changeHighlightInvalidGenes (nodeIDs, isInvalid) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n //TODO check compound operation inside or outside of for ?\r\n for (var i in nodeIDs) {\r\n var nodeID = nodeIDs[i];\r\n if (nodeMap.hasOwnProperty(nodeID)) {\r\n var collaborativeNode = nodeMap[nodeID];\r\n collaborativeNode.isInvalidGene = isInvalid;\r\n this.updateShareDBObject(this.NODEMAP_NAME, nodeID, collaborativeNode);\r\n }\r\n }\r\n\r\n };\r\n\r\n addPubmedIDs (edgeID, pubmedIDs) {\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n\r\n\r\n if (edgeMap.hasOwnProperty(edgeID)) {\r\n var tmpEdge = edgeMap[edgeID];\r\n var nonDuplicateArray = [];\r\n for (var i = 0; i < pubmedIDs.length; i++) {\r\n if (tmpEdge.pubmedIDs.indexOf(pubmedIDs[i]) < 0) {\r\n nonDuplicateArray.push(pubmedIDs[i]);\r\n }\r\n }\r\n tmpEdge.pubmedIDs = tmpEdge.pubmedIDs.concat(nonDuplicateArray);\r\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\r\n }\r\n else {\r\n throw new Error('Edge does not exist in real time !!! ');\r\n }\r\n };\r\n\r\n removePubmedID(edgeID, pubmedIDs) {\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n\r\n if (edgeMap.hasOwnProperty(edgeID)) {\r\n var tmpEdge = edgeMap[edgeID];\r\n var removedIndices = [];\r\n for (var i = 0; i < pubmedIDs.length; i++) {\r\n var tmpID = pubmedIDs[i];\r\n var index = tmpEdge.pubmedIDs.indexOf(tmpID);\r\n if (index >= 0) {\r\n removedIndices.push(index);\r\n }\r\n }\r\n for (var i = 0; i < removedIndices.length; i++) {\r\n tmpEdge.pubmedIDs.remove(removedIndices[i]);\r\n }\r\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\r\n\r\n }\r\n else {\r\n throw new Error('Edge does not exist in real time !!! ');\r\n }\r\n };\r\n\r\n updateEdgeAnchorPoints(edgeID, anchorPointsArray, edgeCurveStyle) {\r\n\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n \r\n if (edgeMap.hasOwnProperty(edgeID)) {\r\n var tmpEdge = edgeMap[edgeID];\r\n tmpEdge.anchorPoints = anchorPointsArray;\r\n tmpEdge.edgeCurveStyle = edgeCurveStyle;\r\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\r\n }\r\n else {\r\n throw new Error('Edge does not exist in real time !!! ');\r\n }\r\n };\r\n\r\n changeName(ele, newName) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n\r\n var elementID = ele.id();\r\n\r\n if (ele.isNode()) {\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.name = newName;\r\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n }\r\n else {\r\n if (edgeMap.hasOwnProperty(elementID)) {\r\n var tmpEdge = edgeMap[elementID];\r\n tmpEdge.name = newName;\r\n this.updateShareDBObject(this.EDGEMAP_NAME, elementID, tmpEdge);\r\n }\r\n else {\r\n throw new Error('Element does not exist in edges !!! ');\r\n }\r\n }\r\n };\r\n\r\n changeParent(rootNode, newParentId, connectedEdges) {\r\n var self = this;\r\n var nodeLookupTable = {};\r\n\r\n function traverseFromRoot(rootNode, parId) {\r\n /*\r\n remove outermost node,\r\n create new real time node with given parentId,\r\n pass id of this real time node to children,\r\n repeat in a recursive manner\r\n after that restore the edges that dissapear by removed nodes\r\n during change parent\r\n */\r\n\r\n var refNode = rootNode.nodeRef;\r\n var children = rootNode.children;\r\n var newParentId = parId;\r\n\r\n if (refNode) {\r\n var refNodeId = refNode.id();\r\n var nodeData = refNode.data();\r\n var posData = refNode.position();\r\n var currentWidth = refNode.data('w');\r\n var currentHeight = refNode.data('h');\r\n\r\n var newNodeData =\r\n {\r\n name: nodeData.name,\r\n type: nodeData.type,\r\n x: posData.x,\r\n y: posData.y,\r\n w: currentWidth,\r\n h: currentHeight,\r\n parent: -1\r\n };\r\n\r\n if (parId) {\r\n newNodeData.parent = parId;\r\n }\r\n\r\n self.removeElement(refNodeId);\r\n var newNode = self.nodeInitializer(newNodeData);\r\n var newNodeId = newNode.id;\r\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\r\n newParentId = newNodeId;\r\n nodeLookupTable[refNodeId] = newNodeId;\r\n }\r\n\r\n for (const childNode of children) {\r\n traverseFromRoot(childNode, newParentId);\r\n }\r\n }\r\n\r\n //Begin traversing from given root node\r\n traverseFromRoot(rootNode, newParentId);\r\n\r\n //Restore edges that dissapear by the change parent operation\r\n //TODO compound operations ?\r\n connectedEdges.forEach(function (edge, index) {\r\n var edgeData = edge.data();\r\n self.removeElement(edge.id());\r\n\r\n var newSource = nodeLookupTable[edgeData.source];\r\n var newTarget = nodeLookupTable[edgeData.target];\r\n\r\n if (newSource) {\r\n edgeData.source = newSource;\r\n }\r\n\r\n if (newTarget) {\r\n edgeData.target = newTarget;\r\n }\r\n\r\n self.addNewEdge(edgeData);\r\n });\r\n };\r\n\r\n removeAllElements() {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n var ops = [];\r\n\r\n //Remove all real time nodes\r\n for (const key of Object.keys(nodeMap)) {\r\n ops.push({\r\n p: [this.NODEMAP_NAME, key],\r\n od: nodeMap[key]\r\n });\r\n }\r\n\r\n //Remove all real time edges\r\n for (const key of Object.keys(edgeMap)) {\r\n ops.push({\r\n p: [this.EDGEMAP_NAME, key],\r\n od: edgeMap[key]\r\n });\r\n }\r\n\r\n this.applyShareDBOperation(ops);\r\n };\r\n\r\n loadGraph(nodes, edges) {\r\n var self = this;\r\n this.removeAllElements();\r\n\r\n //Function that traverses graph tree recursively.\r\n var oldIdNewIdMap = {};\r\n\r\n function traverseTree(node, newParentId) {\r\n node.data.x = node.position.x;\r\n node.data.y = node.position.y;\r\n\r\n //Update parent !\r\n if (newParentId) {\r\n var parent = node.data.parent;\r\n if (parent) {\r\n node.data.parent = newParentId;\r\n }\r\n }\r\n\r\n //Create new real time node\r\n var newNodeId = self.getCustomObjId();\r\n var params = node.data;\r\n oldIdNewIdMap[params.id] = newNodeId;\r\n var newNode = self.nodeInitializer(params);\r\n newNode.id = newNodeId;\r\n\r\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\r\n\r\n //If node has children recursively traverse sub graphs and update parent field of child nodes\r\n if (node.children.length > 0) {\r\n for (const tmpNode of node.children) {\r\n traverseTree(tmpNode, newNodeId);\r\n }\r\n }\r\n }\r\n\r\n //Create graph hierarchy from given list of flat nodes\r\n var tree = GraphUtilities.createGraphHierarchyRealTime(nodes);\r\n //Traverse from root nodes of tree\r\n for (const rootLevelNode of tree) {\r\n traverseTree(rootLevelNode, undefined);\r\n }\r\n\r\n /*\r\n Create real time edges, update the source and target fields, since new ids will be generated for the nodes in\r\n real time\r\n */\r\n for (const edge of edges) {\r\n edge.data.source = oldIdNewIdMap[edge.data.source];\r\n edge.data.target = oldIdNewIdMap[edge.data.target];\r\n\r\n var edgeCurveStyle = \"bezier\";\r\n if (edge.data.bendPointPositions && edge.data.bendPointPositions.length > 0) {\r\n edge.data['anchorPoints'] = edge.data['bendPointPositions'];\r\n delete edge.data['bendPointPositions'];\r\n edgeCurveStyle = \"segments\";\r\n }\r\n else if (edge.data.controlPointPositions && edge.data.controlPointPositions.length > 0) {\r\n edge.data['anchorPoints'] = edge.data['controlPointPositions'];\r\n delete edge.data['controlPointPositions'];\r\n edgeCurveStyle = \"unbundled-bezier\";\r\n }\r\n\r\n var params = edge.data;\r\n params.edgeCurveStyle = edgeCurveStyle;\r\n var newEdgeID = self.getCustomObjId();\r\n params.id = newEdgeID;\r\n \r\n var newEdge = self.edgeInitializer(params);\r\n self.insertShareDBObject(self.EDGEMAP_NAME, newEdgeID, newEdge);\r\n }\r\n };\r\n\r\n mergeGraph (nodes, edges) {\r\n var self = this;\r\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\r\n\r\n var realTimeNodeMap = nodeMap;\r\n var realTimeNodeLookupTable = {};\r\n var realTimeNodeNameLookupTable = {};\r\n var oldIdNewIdMap = {};\r\n\r\n //Create lookup table for real time nodes\r\n //items are stored in an array in the resulting array of nodeMap.items()\r\n // [0] - id, [1] - object\r\n for (var i in realTimeNodeMap) {\r\n var nodeMapItem = realTimeNodeMap[i];\r\n realTimeNodeLookupTable[nodeMapItem.id] = nodeMapItem;\r\n realTimeNodeNameLookupTable[nodeMapItem.name] = nodeMapItem;\r\n }\r\n\r\n //Recursive traverse definition\r\n function traverseTree(node, newParentId) {\r\n //Search by name !\r\n //We have not found a node that exist in the graph, add normally\r\n if (!(node.data.name in realTimeNodeNameLookupTable)) {\r\n node.data.x = node.position.x;\r\n node.data.y = node.position.y;\r\n\r\n //Update parent !\r\n if (newParentId) {\r\n var parent = node.data.parent;\r\n if (parent) {\r\n node.data.parent = newParentId;\r\n }\r\n }\r\n\r\n //Create new real time node\r\n var newNodeId = self.getCustomObjId();\r\n oldIdNewIdMap[node.data.id] = newNodeId;\r\n var newNode = self.nodeInitializer(node.data);\r\n newNode.id = newNodeId;\r\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\r\n\r\n //If node has children recursively traverse sub graphs and update parent field of child nodes\r\n if (node.children.length > 0) {\r\n for (const tmpNode of node.children) {\r\n traverseTree(tmpNode, newNodeId);\r\n }\r\n }\r\n }\r\n // At this point there exists another node in the graph with the same name as 'node'\r\n // we need to update parent field of children of this node if any\r\n else {\r\n var sameNameNode = realTimeNodeNameLookupTable[node.data.name];\r\n var sameNodeId = sameNameNode.id;\r\n oldIdNewIdMap[node.data.id] = sameNodeId;\r\n\r\n //If node has children recursively traverse sub graphs and update parent field of child nodes\r\n if (node.children.length > 0) {\r\n for (const tmpNode of node.children) {\r\n traverseTree(tmpNode, sameNodeId);\r\n }\r\n }\r\n }\r\n }\r\n\r\n //Traverse from root nodes of tree\r\n var tree = GraphUtilities.createGraphHierarchyRealTime(nodes);\r\n for (const rootLevelNode of tree) {\r\n traverseTree(rootLevelNode, rootLevelNode.data.id);\r\n }\r\n\r\n /*\r\n Create real time edges, update the source and target fields, since new ids will be generated for the nodes in\r\n real time\r\n */\r\n var ops = [];\r\n for (const edge of edges) {\r\n edge.data.source = oldIdNewIdMap[edge.data.source];\r\n edge.data.target = oldIdNewIdMap[edge.data.target];\r\n var newEdge = self.edgeInitializer(edge.data);\r\n var newEdgeID = this.getCustomObjId();\r\n newEdge.id = newEdgeID;\r\n ops.push({\r\n p: [self.EDGEMAP_NAME, newEdgeID],\r\n oi: newEdge\r\n });\r\n }\r\n self.applyShareDBOperation(ops);\r\n };\r\n\r\n updateLayoutProperties (newLayoutProperties) {\r\n this.updateShareDBLayoutProperties(newLayoutProperties);\r\n };\r\n\r\n updateGlobalOptions (newOptions) {\r\n this.updateShareDBGlobalOptions(newOptions);\r\n };\r\n\r\n updateGenomicDataOverlayColorScheme(newColorScheme: IColorValueMap) {\r\n this.updateShareDBGenomicDataOverlayColorScheme(newColorScheme);\r\n }\r\n\r\n /*\r\n * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child\r\n * relationship by a field 'parent' which represents to the id of the parent node This function is specific\r\n * for the needs of TCGA Pathway Curation Tool 04/07/2016\r\n *\r\n * @param nodes {array}: flat list of nodes of a graph\r\n * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes\r\n * of each node in the returned array.\r\n * a node in corresponding level.\r\n *\r\n * */\r\n createGraphHierarchy (nodes) {\r\n //Some arrays and maps for creating graph hierarchy\r\n var tree = [];\r\n var mappedArr = {};\r\n\r\n // First map the nodes of the array to an object -> create a hash table.\r\n for (var i = 0, len = nodes.length; i < len; i++) {\r\n var arrElem = nodes[i];\r\n mappedArr[arrElem.data.id] = arrElem;\r\n mappedArr[arrElem.data.id].children = [];\r\n }\r\n\r\n for (const id of Object.keys(mappedArr)) {\r\n var mappedElem = mappedArr[id];\r\n\r\n // If the element is not at the root level, add it to its parent array of children.\r\n if (mappedElem.data.parent) {\r\n mappedArr[mappedElem.data.parent].children.push(mappedElem);\r\n }\r\n // If the element is at the root level, add it to first level elements array.\r\n else {\r\n tree.push(mappedElem);\r\n }\r\n }\r\n return tree;\r\n };\r\n\r\n //Makes sure that edge is compatible with edges in shared document\r\n edgeInitializer (params) {\r\n var edge: any = {};\r\n edge.id = params.id || this.getCustomObjId();\r\n edge.type = params.type || \"undefined\";\r\n edge.source = params.source || \"undefined\";\r\n edge.target = params.target || \"undefined\";\r\n edge.name = params.name || \"\";\r\n edge.isHighlighted = params.isHighlighted || false;\r\n edge.anchorPoints = params.anchorPoints || [];\r\n edge.edgeCurveStyle = params.edgeCurveStyle || \"bezier\"\r\n\r\n if (params.pubmedIDs) {\r\n if (edge.pubmedIDs == undefined) {\r\n edge.pubmedIDs = [];\r\n }\r\n if(params.pubmedIDs.length > 0)\r\n edge.pubmedIDs.push(params.pubmedIDs);\r\n }\r\n else {\r\n edge.pubmedIDs = [];\r\n }\r\n\r\n if (params.anchorPoints) {\r\n if (edge.anchorPoints == undefined) {\r\n edge.anchorPoints = [];\r\n }\r\n // legacy workaround\r\n if (Array.isArray(params.anchorPoints[0])) {\r\n edge.anchorPoints = params.anchorPoints[0];\r\n }\r\n else {\r\n edge.anchorPoints = params.anchorPoints;\r\n }\r\n }\r\n else {\r\n edge.anchorPoints = [];\r\n }\r\n return edge;\r\n };\r\n\r\n //Makes sure that node is compatible with nodes in shared document\r\n nodeInitializer(params) {\r\n var node: any = {};\r\n node.id = params.id || this.getCustomObjId();\r\n node.name = params.name || \"undefined\";\r\n node.type = params.type || \"undefined\";\r\n node.parent = params.parent || \"undefined\";\r\n node.x = params.x || \"undefined\";\r\n node.y = params.y || \"undefined\";\r\n node.w = params.w || \"undefined\";\r\n node.h = params.h || \"undefined\";\r\n node.minWidth = params.minWidth || 0;\r\n node.minWidthBiasLeft = params.minWidth || 0;\r\n node.minWidthBiasRight = params.minWidth || 0;\r\n node.minHeight = params.minWidth || 0;\r\n node.minHeightBiasTop = params.minWidth || 0;\r\n node.minHeightBiasBottom = params.minWidth || 0;\r\n node.isHidden = params.isHidden || false;\r\n node.isInvalidGene = params.isInvalidGene || false;\r\n node.isHighlighted = params.isHighlighted || false;\r\n return node;\r\n };\r\n\r\n //Makes sure that layout properties is compatible with layout properties in shared document\r\n layoutPropertiesInitializer (params) {\r\n var layoutProperties: any = {};\r\n layoutProperties.name = params.name || 'undefined';\r\n layoutProperties.nodeRepulsion = params.nodeRepulsion || 'undefined';\r\n // this.nodeOverlap = params.nodeOverlap || 'undefined';\r\n layoutProperties.idealEdgeLength = params.idealEdgeLength || 'undefined';\r\n layoutProperties.edgeElasticity = params.edgeElasticity || 'undefined';\r\n layoutProperties.nestingFactor = params.nestingFactor || 'undefined';\r\n layoutProperties.gravity = params.gravity || 'undefined';\r\n layoutProperties.numIter = params.numIter || 'undefined';\r\n layoutProperties.tile = params.tile || 'undefined';\r\n layoutProperties.animate = params.animate || 'undefined';\r\n layoutProperties.randomize = params.randomize || false;\r\n layoutProperties.gravityRangeCompound = params.gravityRangeCompound || 'undefined';\r\n layoutProperties.gravityCompound = params.gravityCompound || 'undefined';\r\n layoutProperties.gravityRange = params.gravityRange || 'undefined';\r\n layoutProperties.tilingPaddingVertical = params.tilingPaddingVertical || 'undefined';\r\n layoutProperties.tilingPaddingHorizontal = params.tilingPaddingHorizontal || 'undefined';\r\n layoutProperties.initialEnergyOnIncremental = params.initialEnergyOnIncremental || 'undefined';\r\n return layoutProperties;\r\n };\r\n\r\n //Makes sure that global options is compatible with global options in shared document\r\n globalOptionsInitializer (params) {\r\n var globalOptions: any = {};\r\n globalOptions.zoomLevel = params.zoomLevel || 'undefined';\r\n globalOptions.panLevel = params.panLevel || 'undefined';\r\n return globalOptions;\r\n };\r\n\r\n //Create unique ID for elements\r\n getCustomObjId () {\r\n // see http://stackoverflow.com/a/8809472\r\n // we need to take care of our own IDs because the ones automatically generated by cytoscape (also UUID)\r\n // don't comply with xsd:SID type that must not begin with a number\r\n // Public Domain/MIT\r\n var d = Date.now();\r\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\r\n d += performance.now(); //use high-precision timer if available\r\n }\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = (d + Math.random() * 16) % 16 | 0;\r\n d = Math.floor(d / 16);\r\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n };\r\n\r\n getParam (urlParam) {\r\n const regExp = new RegExp(urlParam + '=(.*?)($|&)', 'g');\r\n let match: any = window.location.search.match(regExp);\r\n if (match && match.length) {\r\n match = match[0];\r\n match = match.replace(urlParam + '=', '').replace('&', '');\r\n } else {\r\n match = null;\r\n }\r\n return match;\r\n };\r\n\r\n}\r\n","import autobind from \"autobind-decorator\";\r\nimport { action, makeObservable, observable } from \"mobx\";\r\nimport LayoutProperties, { ILayoutProperties } from \"../modals/LayoutProperties\";\r\nimport { ChatMessageMetaData, IColorValueMap, IProfileMetaData } from \"../ui/react-pathway-mapper\";\r\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\r\nimport SVGExporter from \"../utils/SVGExporter\";\r\nimport GenomicDataOverlayManager from \"./GenomicDataOverlayManager\";\r\nimport ShareDBManager from \"./ShareDBManager\";\r\n\r\nconst _ = require('lodash');\r\n\r\nexport default class EditorActionsManager {\r\n\r\n public static defaultLayoutProperties: ILayoutProperties =\r\n {\r\n name: 'fcose',\r\n nodeRepulsion: 4500,\r\n idealEdgeLength: 50,\r\n edgeElasticity: 0.45,\r\n nestingFactor: 0.1,\r\n gravity: 0.25,\r\n numIter: 2500,\r\n tile: true,\r\n animate: true,\r\n randomize: false,\r\n gravityRangeCompound: 1.5,\r\n // Gravity force (constant) for compounds\r\n gravityCompound: 1.0,\r\n // Gravity range (constant)\r\n gravityRange: 3.8,\r\n // Amount of vertical space to put between degree zero nodes during tiling (can also be a function)\r\n tilingPaddingVertical: 10,\r\n // Amount of horizontal space to put between degree zero nodes during tiling (can also be a function)\r\n tilingPaddingHorizontal: 10,\r\n // Initial cooling factor for incremental layout\r\n initialEnergyOnIncremental: 0.5,\r\n animationDuration: 2000,\r\n animationEasing: 'cubic-bezier(0.17,0.72,0.41,0.98)',\r\n nodeDimensionsIncludeLabels: true\r\n };\r\n\r\n public cy: any;\r\n public genomicDataOverlayManager: GenomicDataOverlayManager;\r\n public edgeEditing: any;\r\n public selectedNodeStack: any;\r\n public layoutProperties: ILayoutProperties;\r\n\r\n private FIT_CONSTANT: number;\r\n private observers: any[];\r\n private svgExporter: SVGExporter;\r\n private undoRedoManager: any;\r\n private isCbioPortal: boolean;\r\n private isCollaborative: boolean;\r\n private shareDBManager: ShareDBManager;\r\n private portalAccessor: CBioPortalAccessor;\r\n private viewUtilities: any;\r\n\r\n @observable\r\n private profiles: IProfileMetaData[];\r\n\r\n @observable\r\n private genomicDataOverlayColorScheme: IColorValueMap;\r\n\r\n private colorSchemeChangeCallback: (IColorValueMap) => void;\r\n private incrementChatMessageCountCallback: (number) => void;\r\n private newMessageCallback: (ChatMessageMetaData) => void;\r\n private updatePathwayTitleCallback: (string) => void;\r\n\r\n constructor(isCollaborative: boolean, shareDBManager: any, cyInst: any, isCBioPortal: boolean,\r\n undoRedoManager: any, portalAccessor: CBioPortalAccessor, profiles: IProfileMetaData[],\r\n genomicDataOverlayColorScheme: IColorValueMap, colorSchemeChangeCallback: (IColorValueMap) => void, incrementChatMessageCountCallback: (number) => void\r\n , newMessageCallback: (ChatMessageMetaData) => void, updatePathwayTitleCallback : (string) => void)\r\n {\r\n // Set cy instance and set real time manager reference if collaborative mode\r\n makeObservable(this);\r\n this.cy = cyInst;\r\n this.isCollaborative = isCollaborative;\r\n this.isCbioPortal = isCBioPortal;\r\n this.profiles = profiles;\r\n this.genomicDataOverlayColorScheme = genomicDataOverlayColorScheme;\r\n this.colorSchemeChangeCallback = colorSchemeChangeCallback;\r\n this.incrementChatMessageCountCallback = incrementChatMessageCountCallback;\r\n this.newMessageCallback = newMessageCallback;\r\n\r\n const edgeEditingOptions = {\r\n bendPositionsFunction: function(ele) {\r\n return ele.data('bendPointPositions');\r\n },\r\n // A function parameter to get control point positions, should return positions of control points\r\n controlPositionsFunction: function(ele) {\r\n return ele.data('controlPointPositions');\r\n },\r\n // whether the anchor editing operations are undoable (requires cytoscape-undo-redo.js)\r\n undoable: true,\r\n // the size of bend shape is obtained by multipling width of edge with this parameter\r\n anchorShapeSizeFactor: 6,\r\n // whether to start the plugin in the enabled state\r\n enabled: !this.isCbioPortal,\r\n \r\n handleReconnectEdge: this.isCollaborative ? \r\n this.reconnectEdge.bind(this) :\r\n undefined,\r\n\r\n enableMultipleAnchorRemovalOption: true\r\n };\r\n \r\n if(!this.isCbioPortal){\r\n this.edgeEditing = this.cy.edgeEditing(edgeEditingOptions);\r\n\r\n }\r\n this.portalAccessor = portalAccessor;\r\n if(this.isCollaborative) {\r\n this.shareDBManager = shareDBManager;\r\n }\r\n\r\n this.FIT_CONSTANT = 50;\r\n\r\n this.layoutProperties = _.clone(EditorActionsManager.defaultLayoutProperties);\r\n this.observers = [];\r\n this.genomicDataOverlayManager = new GenomicDataOverlayManager(this.cy);\r\n this.svgExporter = new SVGExporter(this.edgeEditing, this);\r\n\r\n this.selectedNodeStack = {};\r\n this.undoRedoManager = undoRedoManager;\r\n this.undoRedoManager.action(\"changePositions\", this.doChangePosition, this.undoChangePosition);\r\n this.undoRedoManager.action(\"changeNodeSize\", this.doChangeNodeSize, this.undoChangeNodeSize);\r\n this.undoRedoManager.action(\"changeCompoundSize\", this.doChangeCompoundSize, this.undoChangeCompoundSize);\r\n this.undoRedoManager.action(\"changeName\", this.doChangename, this.undoChangeName);\r\n this.undoRedoManager.action(\"hideNode\", this.doHide, this.undoHide);\r\n this.undoRedoManager.action(\"showAllNodes\", this.doShow, this.undoShow);\r\n // HighlightOthers is the type of highlight from the menu and by searching, while highlightInvalidGenes is for only invalid genes\r\n this.undoRedoManager.action(\"highlightInvalidGenes\", this.doHighlightInvalidGenes, this.undoHighlightInvalidGenes);\r\n this.undoRedoManager.action(\"removeHighlightInvalidGenes\", this.undoHighlightInvalidGenes, this.doHighlightInvalidGenes);\r\n this.undoRedoManager.action(\"highlightOthers\", this.doHighlight, this.undoHighlight);\r\n this.undoRedoManager.action(\"removeOtherHighlight\", this.undoHighlight, this.doHighlight);\r\n\r\n };\r\n\r\n @action.bound\r\n setProfile(index: number, profile: IProfileMetaData) {\r\n this.profiles[index] = profile;\r\n }\r\n\r\n @action.bound\r\n addProfile(profile: IProfileMetaData) {\r\n this.profiles.push(profile);\r\n }\r\n\r\n @action.bound\r\n removeProfiles() {\r\n this.profiles.length = 0;\r\n }\r\n\r\n @action.bound\r\n setGenomicDataOverlayColorScheme(scheme: IColorValueMap) {\r\n this.genomicDataOverlayColorScheme = scheme;\r\n }\r\n\r\n @autobind\r\n setViewUtilities(viewUtilitiesRef: any) {\r\n this.viewUtilities = viewUtilitiesRef;\r\n }\r\n\r\n getGenomicDataOverlayColorScheme() : IColorValueMap {\r\n return this.genomicDataOverlayColorScheme;\r\n }\r\n\r\n handleChangePositionByAlignment(movedNodeArr: any)\r\n {\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeElementsPositionByAlignment(movedNodeArr);\r\n else\r\n this.undoRedoManager.do(\"changePositions\", movedNodeArr)\r\n };\r\n\r\n /*\r\n * Undo redo for changing positions of nodes via programatically (node.position)\r\n * **/\r\n doChangePosition(movedNodes: any)\r\n {\r\n const newMovedNodes = [];\r\n\r\n for(let i = 0; i < movedNodes.length; i++)\r\n {\r\n const currentNodePosition =\r\n {\r\n x: movedNodes[i].node.position().x,\r\n y: movedNodes[i].node.position().y\r\n };\r\n newMovedNodes.push({node: movedNodes[i].node, oldPosition: currentNodePosition, nextPosition: movedNodes[i].nextPosition});\r\n movedNodes[i].node.position(movedNodes[i].nextPosition);\r\n }\r\n\r\n return newMovedNodes;\r\n };\r\n\r\n undoChangePosition(movedNodes: any)\r\n {\r\n var newMovedNodes = [];\r\n\r\n for(var i = 0; i < movedNodes.length; i++)\r\n {\r\n var currentNodePosition =\r\n {\r\n x: movedNodes[i].node.position().x,\r\n y: movedNodes[i].node.position().y\r\n };\r\n newMovedNodes.push({node: movedNodes[i].node, oldPosition: movedNodes[i].oldPosition, nextPosition: currentNodePosition});\r\n movedNodes[i].node.position(movedNodes[i].oldPosition);\r\n }\r\n\r\n return newMovedNodes;\r\n };\r\n\r\n\r\n getDBId(){\r\n return this.shareDBManager.doc.data[this.shareDBManager.WORK_ID];\r\n }\r\n updatePathwayTitleBack( pathwayTitle : string){\r\n this.updatePathwayTitleCallback( pathwayTitle);\r\n }\r\n updateMessages( message : ChatMessageMetaData ){\r\n this.newMessageCallback( message );\r\n }\r\n\r\n loadMessages( messages: ChatMessageMetaData[] ){\r\n for( const message of Object.values( messages) ){\r\n const newMessage = {\r\n username : message.username,\r\n message : message.message,\r\n id: message.id,\r\n userId: message.userId,\r\n date: message.date\r\n };\r\n this.newMessageCallback(newMessage);\r\n }\r\n setTimeout(this.updateChatBoxHeight,850 );\r\n }\r\n updateChatBoxHeight(){\r\n document.getElementById('chatBoxxheader').children[0].scrollTop = document.getElementById('chatBoxxheader').children[0].scrollHeight;\r\n }\r\n getMessageCount(){\r\n return this.shareDBManager.doc.data[this.shareDBManager.CHAT_MESSAGES_COUNT];\r\n }\r\n\r\n incrementMessageCount(){\r\n this.shareDBManager.incrementMessageCount();\r\n }\r\n\r\n addNewMessage( chatMessage : ChatMessageMetaData, chatMessageKey: number ){\r\n this.shareDBManager.addNewMessage( chatMessage, chatMessageKey );\r\n }\r\n\r\n changeNodePositionsByArrows(selectedNodes: any)\r\n {\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeNodePositionsShareDB(selectedNodes);\r\n //node-editing extension already deals for the movement in local mode\r\n };\r\n\r\n /*\r\n * Undo redo for changing size of nodes\r\n * **/\r\n doChangeNodeSize (args: any)\r\n {\r\n args.ele.data('w', args.newWidth);\r\n args.ele.data('h', args.newHeight);\r\n\r\n return args;\r\n };\r\n\r\n undoChangeNodeSize(args: any)\r\n {\r\n args.ele.data('w', args.oldWidth);\r\n args.ele.data('h', args.oldHeight);\r\n return args;\r\n };\r\n\r\n /*\r\n * Undo redo for changing size of compounds\r\n * **/\r\n doChangeCompoundSize(args: any)\r\n {\r\n args.ele.style('min-width', args.newMinWidth);\r\n args.ele.style('min-width-bias-left', args.newMinWidthBiasLeft);\r\n args.ele.style('min-width-bias-right', args.newMinWidthBiasRight);\r\n args.ele.style('min-height', args.newMinHeight);\r\n args.ele.style('min-height-bias-top', args.newMinHeightBiasTop);\r\n args.ele.style('min-height-bias-bottom', args.newMinHeightBiasBottom);\r\n\r\n return args;\r\n };\r\n\r\n undoChangeCompoundSize(args: any)\r\n {\r\n if (args.oldMinWidth == undefined)\r\n {\r\n args.ele.style('min-width', 0);\r\n args.ele.style('min-width-bias-left', 0);\r\n args.ele.style('min-width-bias-right', 0);\r\n\r\n }\r\n else {\r\n args.ele.style('min-width', args.oldMinWidth);\r\n args.ele.style('min-width-bias-left', args.oldMinWidthBiasLeft);\r\n args.ele.style('min-width-bias-right', args.oldMinWidthBiasRight);\r\n }\r\n if (args.oldMinHeight == undefined)\r\n {\r\n args.ele.style('min-height', 0);\r\n args.ele.style('min-height-bias-top', 0);\r\n args.ele.style('min-height-bias-bottom', 0);\r\n }\r\n else {\r\n args.ele.style('min-height', args.oldMinHeight);\r\n args.ele.style('min-height-bias-top', args.oldMinHeightBiasTop);\r\n args.ele.style('min-height-bias-bottom', args.oldMinHeightBiasBottom);\r\n }\r\n\r\n return args;\r\n };\r\n\r\n changeName(ele: any, newName: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.shareDBManager.changeName(ele, newName);\r\n }\r\n else\r\n {\r\n this.changeNameCy(ele, newName);\r\n }\r\n };\r\n\r\n changeNameCy(ele: any, newName: any)\r\n {\r\n var currentName = ele.data('name');\r\n var args = {ele: ele, oldName: currentName, newName: newName};\r\n this.undoRedoManager.do('changeName', args);\r\n };\r\n\r\n /*\r\n * Undo redo for changing name of nodes\r\n * **/\r\n doChangename(args: any)\r\n {\r\n\r\n var currentName = args.ele.data('name');\r\n var newArgs = {ele: args.ele, newName: args.newName, oldName: currentName};\r\n args.ele.data('name', args.newName);\r\n\r\n return newArgs;\r\n };\r\n\r\n undoChangeName(args: any)\r\n {\r\n\r\n var currentName = args.ele.data('name');\r\n var newArgs = {ele: args.ele, newName: args.newName, oldName: currentName};\r\n args.ele.data('name', args.oldName);\r\n\r\n return newArgs;\r\n };\r\n\r\n hideSelectedNodes()\r\n {\r\n //Hides the selected elements\r\n var sel = this.cy.nodes(\":selected\");\r\n var nodesToHide = sel;\r\n var b = true;\r\n //Hides the parents if they have no children\r\n sel.parent().each((parent: any) =>\r\n {\r\n b=true;\r\n parent.children().each(function(ch: any)\r\n {\r\n if (!ch.selected())\r\n {\r\n if (ch.visible()) b=false;\r\n }\r\n }\r\n );\r\n if (b) nodesToHide = nodesToHide.add(parent);\r\n });\r\n this.cy.elements(\":selected\").unselect();\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeVisibility(nodesToHide, true);\r\n else\r\n this.undoRedoManager.do('hideNode', nodesToHide);\r\n };\r\n\r\n /*\r\n * Undo redo for hiding nodes\r\n * **/\r\n @autobind\r\n doHide(args: any)\r\n {\r\n this.viewUtilities.hide(args);\r\n return args;\r\n };\r\n\r\n @autobind\r\n undoHide(args: any)\r\n {\r\n this.viewUtilities.show(args);\r\n return args;\r\n };\r\n\r\n showAllNodes()\r\n {\r\n var hid = this.cy.nodes(\":hidden\");\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeVisibility(hid, false);\r\n else\r\n this.undoRedoManager.do('showAllNodes', hid);\r\n };\r\n\r\n /*\r\n * Undo redo for showing all nodes\r\n * **/\r\n @autobind\r\n doShow(args: any)\r\n {\r\n this.viewUtilities.show(args);\r\n return args;\r\n };\r\n\r\n @autobind\r\n undoShow(args: any)\r\n {\r\n this.viewUtilities.hide(args);\r\n return args;\r\n };\r\n\r\n highlightElementsInitially(invalidHighlightedGenesIDs: string[], invalidGenesIDs: string[],\r\n highlightedGenesIDs: string[], highlightedEdgesIDs: string[], hiddenGenesIDs: string[])\r\n {\r\n for (var i in invalidHighlightedGenesIDs)\r\n {\r\n this.cy.$('#'+invalidHighlightedGenesIDs[i]).addClass('invalidGeneHighlight');\r\n }\r\n for (var i in invalidGenesIDs)\r\n {\r\n this.cy.$('#'+invalidGenesIDs[i]).addClass('invalidGene');\r\n }\r\n for (var i in highlightedGenesIDs)\r\n {\r\n this.cy.$('#'+highlightedGenesIDs[i]).addClass('highlightedNode');\r\n }\r\n for (var i in highlightedEdgesIDs)\r\n {\r\n this.cy.$('#'+highlightedEdgesIDs[i]).addClass('highlightedEdge');\r\n }\r\n for (var i in hiddenGenesIDs)\r\n {\r\n this.viewUtilities.hide(this.cy.$('#'+hiddenGenesIDs[i]))\r\n }\r\n };\r\n\r\n validateGenes()\r\n {\r\n var geneSymbols = this.getGeneSymbols();\r\n this.portalAccessor.validateGenes(geneSymbols, this);\r\n }\r\n\r\n //Get all gene symbols\r\n getGeneSymbols()\r\n {\r\n var geneSymbols: any[] = [];\r\n this.cy.nodes().forEach( function (gene: any)\r\n {\r\n if(gene.data().type === \"GENE\")\r\n geneSymbols.push(gene.data().name);\r\n });\r\n return geneSymbols;\r\n }\r\n\r\n\r\n highlightInvalidGenes(validGeneSymbols: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n var invalidGenes: any[] = [];\r\n this.cy.nodes().forEach( function (gene: any)\r\n {\r\n if(gene.data().type === \"GENE\")\r\n {\r\n var geneName = gene.data().name;\r\n if(validGeneSymbols.indexOf(geneName) < 0)\r\n invalidGenes.push(gene.id());\r\n }\r\n });\r\n this.shareDBManager.changeHighlightInvalidGenes(invalidGenes, true);\r\n // TODO: Amendment by Ziya\r\n /*\r\n if (invalidGenes.length > 0)\r\n this.notificationManager.createNotification(\"Invalid genes are highlighted\",\"fail\");\r\n else\r\n this.notificationManager.createNotification(\"All gene symbols are valid\",\"success\");*/\r\n }\r\n else\r\n {\r\n var highlightedGenes = this.cy.collection();\r\n this.cy.nodes().forEach( function (gene: any)\r\n {\r\n if(gene.data().type === \"GENE\")\r\n {\r\n var geneName = gene.data().name;\r\n if(validGeneSymbols.indexOf(geneName) < 0)\r\n highlightedGenes = highlightedGenes.add(gene);\r\n }\r\n });\r\n // TODO: Amendment by Ziya\r\n /*\r\n if (highlightedGenes.size() > 0)\r\n this.notificationManager.createNotification(\"Invalid genes are highlighted\",\"fail\");\r\n else\r\n this.notificationManager.createNotification(\"All gene symbols are valid\",\"success\");*/\r\n\r\n var nodesToAddInvalidHighlight = this.cy.collection();\r\n highlightedGenes.forEach(function(ele: any){\r\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('invalidGene'))\r\n nodesToAddInvalidHighlight = nodesToAddInvalidHighlight.union(ele);\r\n });\r\n this.undoRedoManager.do('highlightInvalidGenes', nodesToAddInvalidHighlight);\r\n }\r\n }\r\n\r\n removeInvalidGeneHighlights(actions: any[])\r\n {\r\n if (this.isCollaborative)\r\n {\r\n var geneIDs: any[] = [];\r\n this.cy.nodes().forEach( function (gene: any)\r\n {\r\n if(gene.data().type === \"GENE\")\r\n {\r\n if(gene.hasClass('invalidGeneHighlight') || gene.hasClass('invalidGene'))\r\n geneIDs.push(gene.id());\r\n }\r\n });\r\n this.shareDBManager.changeHighlightInvalidGenes(geneIDs, false);\r\n }\r\n else\r\n {\r\n var nodesToRemoveInvalidHighlight = this.cy.collection();\r\n this.cy.nodes().forEach(function(ele: any){\r\n if (ele.hasClass('invalidGeneHighlight') || ele.hasClass('invalidGene'))\r\n nodesToRemoveInvalidHighlight = nodesToRemoveInvalidHighlight.union(ele);\r\n });\r\n actions.push({name: \"removeHighlightInvalidGenes\", param: nodesToRemoveInvalidHighlight});\r\n // this.undoRedoManager.do('removeHighlightInvalidGenes', nodesToRemoveInvalidHighlight);\r\n }\r\n }\r\n\r\n doHighlightInvalidGenes(args: any)\r\n {\r\n args.each(function(n: any)\r\n {\r\n if(n.hasClass('highlightedNode'))\r\n {\r\n n.removeClass('highlightedNode');\r\n n.addClass(\"invalidGeneHighlight\");\r\n }\r\n else\r\n n.addClass(\"invalidGene\");\r\n });\r\n return args;\r\n };\r\n\r\n undoHighlightInvalidGenes(args: any)\r\n {\r\n args.each(function(n: any)\r\n {\r\n if(n.hasClass('invalidGeneHighlight'))\r\n {\r\n n.removeClass('invalidGeneHighlight');\r\n n.addClass(\"highlightedNode\");\r\n }\r\n else\r\n n.removeClass(\"invalidGene\");\r\n });\r\n return args;\r\n }\r\n\r\n highlightSelected()\r\n {\r\n var sel = this.cy.elements(\":selected\");\r\n sel.unselect();\r\n var elementsToHighlight = this.cy.collection();\r\n sel.forEach(function(ele: any){\r\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge'))\r\n elementsToHighlight = elementsToHighlight.union(ele);\r\n });\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeHighlight(elementsToHighlight, true);\r\n else\r\n this.undoRedoManager.do('highlightOthers', elementsToHighlight);\r\n };\r\n\r\n highlightNeighbors()\r\n {\r\n var sel = this.cy.elements(\":selected\");\r\n var neighbors = sel.neighborhood();\r\n neighbors = neighbors.union(sel);\r\n neighbors.unselect();\r\n var elementsToHighlight = this.cy.collection();\r\n neighbors.forEach(function(ele: any){\r\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge'))\r\n elementsToHighlight = elementsToHighlight.union(ele);\r\n });\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeHighlight(elementsToHighlight, true);\r\n else\r\n this.undoRedoManager.do('highlightOthers', elementsToHighlight);\r\n };\r\n\r\n highlightBySearch(args: any[])\r\n {\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeHighlight(args, true);\r\n else\r\n this.undoRedoManager.do('highlightOthers', args);\r\n };\r\n\r\n removeOtherHighlight(actions: any[])\r\n {\r\n var nodesToRemoveHighlight = this.cy.collection();\r\n //TODO cytoscape selectors may provide more handy functionality instead of iterating over !\r\n this.cy.elements().forEach(function(ele: any){\r\n if (ele.hasClass('highlightedNode') || ele.hasClass('highlightedEdge') || ele.hasClass('invalidGeneHighlight'))\r\n nodesToRemoveHighlight = nodesToRemoveHighlight.add(ele);\r\n });\r\n\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeHighlight(nodesToRemoveHighlight, false);\r\n else\r\n actions.push({name: \"removeOtherHighlight\", param: nodesToRemoveHighlight});\r\n // this.undoRedoManager.do('removeOtherHighlight', nodesToRemoveHighlight);\r\n };\r\n\r\n /*\r\n * Undo redo for highlighting of nodes\r\n * **/\r\n doHighlight(args: any)\r\n {\r\n args.each(function(n: any)\r\n {\r\n if (n.isEdge())\r\n n.addClass(\"highlightedEdge\");\r\n else\r\n {\r\n if(n.hasClass('invalidGene'))\r\n {\r\n n.removeClass(\"invalidGene\");\r\n n.addClass(\"invalidGeneHighlight\");\r\n }\r\n else\r\n n.addClass(\"highlightedNode\");\r\n }\r\n });\r\n return args;\r\n };\r\n\r\n undoHighlight(args: any)\r\n {\r\n args.each(function(n: any)\r\n {\r\n if (n.isEdge())\r\n n.removeClass(\"highlightedEdge\");\r\n else\r\n {\r\n if(n.hasClass('invalidGeneHighlight'))\r\n {\r\n n.removeClass(\"invalidGeneHighlight\");\r\n n.addClass(\"invalidGene\");\r\n }\r\n else\r\n n.removeClass(\"highlightedNode\");\r\n }\r\n });\r\n return args;\r\n };\r\n\r\n removeAllHighlight()\r\n {\r\n let actions: any[] = [];\r\n this.removeInvalidGeneHighlights(actions);\r\n this.removeOtherHighlight(actions);\r\n this.cy.undoRedo().do(\"batch\", actions);\r\n };\r\n\r\n postLayout()\r\n {\r\n if (this.isCollaborative)\r\n {\r\n //Previously this.cy.nodes() was sent as an argument in moveElements function but it caused a problem when\r\n // the compound node was moved before the child nodes\r\n var movedNodes = this.cy.collection();\r\n var parentNodes = this.cy.collection();\r\n this.cy.nodes().forEach(function(node: any)\r\n {\r\n if (!node.isParent())\r\n movedNodes = movedNodes.add(node);\r\n else\r\n parentNodes = parentNodes.add(node);\r\n });\r\n this.moveElements(movedNodes);\r\n this.moveElements(parentNodes);\r\n\r\n var newState = {\r\n zoomLevel: this.cy.zoom(),\r\n panLevel: this.cy.pan()\r\n };\r\n this.updateGlobalOptions(newState);\r\n }\r\n };\r\n\r\n /*\r\n * Gets the first empty index from the list in cloud model\r\n * **/\r\n getEmptyGroupID()\r\n {\r\n if(this.isCollaborative)\r\n return this.shareDBManager.getEmptyGroupID();\r\n else\r\n return this.genomicDataOverlayManager.getEmptyGroupID();\r\n };\r\n\r\n /*\r\n * Gets the first empty index from the list in cloud model\r\n * **/\r\n groupGenomicData(cancerNames: any[], groupID: string)\r\n {\r\n return this.shareDBManager.groupGenomicData(cancerNames, groupID);\r\n };\r\n\r\n addPubmedIDs(edge: any, pubmedIDs: number[])\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.shareDBManager.addPubmedIDs(edge.id(), pubmedIDs);\r\n }\r\n else\r\n {\r\n var pubmedArray = edge.data('pubmedIDs');\r\n var validPubmedIDs = _.filter(pubmedIDs, function(id: number){\r\n return !isNaN(id);\r\n });\r\n pubmedArray.push.apply(pubmedArray,validPubmedIDs);\r\n edge.data('pubmedIDs', _.uniq(pubmedArray));\r\n }\r\n }\r\n\r\n removePubmedID(edge: any, pubmedIDs: number[])\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.shareDBManager.removePubmedID(edge.id(), pubmedIDs);\r\n }\r\n else\r\n {\r\n var pubmedArray = edge.data('pubmedIDs');\r\n edge.data('pubmedIDs', _.difference(pubmedArray, pubmedIDs));\r\n }\r\n }\r\n\r\n updateEdgeAnchorPoints(edge: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n var edgeCurveStyle = edge.css('curve-style')\r\n var numberOfAnchorPoints = 0;\r\n var anchors = this.edgeEditing?.getAnchorsAsArray(edge);\r\n if (anchors !== undefined)\r\n numberOfAnchorPoints = anchors.length / 2;\r\n var anchorPointsArray = [];\r\n for (var j = 0; j < numberOfAnchorPoints; j++)\r\n {\r\n anchorPointsArray.push(\r\n {\r\n x: anchors[2*j],\r\n y: anchors[2*j+1]\r\n }\r\n );\r\n }\r\n this.shareDBManager.updateEdgeAnchorPoints(edge.id(), anchorPointsArray, edgeCurveStyle);\r\n }\r\n }\r\n\r\n //Related to order the nodes according to the selection of user\r\n pushSelectedNodeStack(ele: any)\r\n {\r\n this.selectedNodeStack[ele.id()] = ele;\r\n }\r\n\r\n removeElementFromSelectedNodeStack(ele: any)\r\n {\r\n var nodeID = ele.id();\r\n if (nodeID in this.selectedNodeStack)\r\n delete this.selectedNodeStack[ele.id()];\r\n }\r\n\r\n clearSelectedNodeStack()\r\n {\r\n this.selectedNodeStack = {};\r\n }\r\n\r\n exportSVG()\r\n {\r\n return this.svgExporter.exportGraph(this.cy.nodes(), this.cy.edges());\r\n }\r\n\r\n //Simple observer-observable pattern for views!!!!!\r\n registerObserver(observer: any)\r\n {\r\n this.observers.push(observer);\r\n };\r\n\r\n notifyObservers()\r\n {\r\n for (var i in this.observers)\r\n {\r\n var observer = this.observers[i];\r\n observer.notify();\r\n }\r\n };\r\n\r\n registerGenomicDataObserver(observer: any)\r\n {\r\n this.genomicDataOverlayManager.registerObserver(observer);\r\n }\r\n\r\n updateGenomicDataVisibility(dataMap: any)\r\n {\r\n if(this.isCollaborative)\r\n {\r\n //TODO compound OP\r\n // this.shareDBManager.clearGenomicVisData();\r\n this.shareDBManager.addGenomicVisibilityData(dataMap);\r\n }\r\n else\r\n {\r\n for (var _key in dataMap)\r\n {\r\n this.genomicDataOverlayManager.updateGenomicDataVisibility(_key, dataMap[_key]);\r\n }\r\n this.genomicDataOverlayManager.showGenomicData();\r\n }\r\n }\r\n\r\n updateGenomicDataColorScheme(colorValueMap: IColorValueMap)\r\n {\r\n this.setGenomicDataOverlayColorScheme(colorValueMap);\r\n\r\n if(this.isCollaborative)\r\n {\r\n this.shareDBManager.updateGenomicDataOverlayColorScheme(colorValueMap);\r\n }\r\n else\r\n {\r\n this.genomicDataOverlayManager.updateColorScheme(colorValueMap);\r\n this.genomicDataOverlayManager.showGenomicData();\r\n }\r\n }\r\n\r\n //Global options related functions, zoom etc..\r\n getGlobalOptions()\r\n {\r\n return {\r\n zoomLevel: this.cy.zoom(),\r\n panLevel: this.cy.pan()\r\n };\r\n }\r\n\r\n changeGlobalOptions(op: any)\r\n {\r\n var globalOptions = op.li;\r\n this.cy.zoom(globalOptions.zoomLevel);\r\n this.cy.pan(globalOptions.panLevel);\r\n }\r\n\r\n updateGlobalOptions(newOptions: any)\r\n {\r\n if(this.isCollaborative)\r\n this.shareDBManager.updateGlobalOptions(newOptions);\r\n }\r\n\r\n //Layout properties related functions\r\n saveLayoutProperties(newLayoutProps: any)\r\n {\r\n if(this.isCollaborative)\r\n {\r\n // Call a real time function that updated real time object and\r\n // its callback (updateLayoutPropertiesCallback) will handle sync of this object\r\n // across collaborators\r\n this.shareDBManager.updateLayoutProperties(newLayoutProps);\r\n }\r\n else\r\n {\r\n this.layoutProperties = _.clone(newLayoutProps);\r\n }\r\n };\r\n\r\n updateLayoutPropertiesCallback(op: any)\r\n {\r\n var newLayoutProps = op.li;\r\n this.layoutProperties = _.clone(newLayoutProps);\r\n LayoutProperties.layoutProperties = _.clone(this.layoutProperties);\r\n //Notify observers to reflect changes on colalborative object to the views\r\n this.notifyObservers();\r\n };\r\n\r\n performLayout()\r\n {\r\n this.undoRedoManager.do(\"layout\", {options: this.layoutProperties, eles: null, zoom: this.cy.zoom(), pan: this.cy.pan()});\r\n };\r\n\r\n //Node Related Functions\r\n addNode(nodeData: any, posData: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.addNewNodeToShareDB(nodeData, posData);\r\n }\r\n else\r\n {\r\n this.addNodetoCy(nodeData,posData);\r\n }\r\n };\r\n\r\n addNodes(nodes: any[])\r\n {\r\n for (var i in nodes)\r\n {\r\n this.addNode(nodes[i].data, nodes[i].position);\r\n }\r\n };\r\n\r\n addNodesCy(nodes: any[])\r\n {\r\n var nodeArr: any[] = [];\r\n for (var i in nodes)\r\n {\r\n var nodeData = nodes[i].data;\r\n var posData = nodes[i].position;\r\n\r\n var newNode =\r\n {\r\n group: \"nodes\",\r\n data: nodeData,\r\n position: {}\r\n };\r\n\r\n if (nodeData.parent === undefined )\r\n {\r\n delete newNode.data.parent;\r\n }\r\n\r\n if (posData)\r\n {\r\n newNode.position =\r\n {\r\n x: posData.x,\r\n y: posData.y\r\n }\r\n }\r\n nodeArr[i] = newNode;\r\n }\r\n\r\n this.cy.add(nodeArr);\r\n this.cy.nodes().updateCompoundBounds();\r\n\r\n };\r\n\r\n addNodetoCy(nodeData: any, posData: any)\r\n {\r\n var newNode =\r\n {\r\n group: \"nodes\",\r\n data: nodeData,\r\n position: {}\r\n };\r\n\r\n if (nodeData.parent === undefined )\r\n {\r\n delete newNode.data.parent;\r\n }\r\n\r\n if (posData)\r\n {\r\n newNode.position =\r\n {\r\n x: posData.x,\r\n y: posData.y\r\n }\r\n }\r\n\r\n //his.cy.add(newNode);\r\n this.cy.nodes().updateCompoundBounds();\r\n this.undoRedoManager.do(\"add\", newNode);\r\n };\r\n\r\n shareDBNodeAddRemoveEventCallBack(op: any)\r\n {\r\n //Get real time node object and sync it to node addition or removal\r\n var isRemove = Object.keys(op)[1] === 'od';\r\n var node = op.oi || op.od;\r\n //Removal Operation\r\n if (isRemove)\r\n {\r\n var nodeID = op.p[1];\r\n //Remove element from existing graph\r\n var cyEle = this.cy.$(\"#\" + nodeID);\r\n this.removeElementCy(cyEle);\r\n this.cy.nodes().updateCompoundBounds();\r\n }\r\n //Addition Operation\r\n else\r\n {\r\n this.addNewNodeLocally(node);\r\n }\r\n };\r\n\r\n addNewNodeLocally(realtimeNode: any)\r\n {\r\n var nodeData =\r\n {\r\n id: realtimeNode.id,\r\n type: realtimeNode.type,\r\n name: realtimeNode.name,\r\n parent: realtimeNode.parent,\r\n w: realtimeNode.w,\r\n h: realtimeNode.h\r\n };\r\n\r\n if (realtimeNode.x != \"undefined\" && realtimeNode.y != \"undefined\")\r\n {\r\n this.addNodetoCy(nodeData, {x: realtimeNode.x, y: realtimeNode.y});\r\n }\r\n else\r\n {\r\n // TODO: Amendment by Ziya\r\n this.addNodetoCy(nodeData, null);\r\n }\r\n\r\n this.cy.nodes().updateCompoundBounds();\r\n };\r\n\r\n addNewNodeToShareDB(nodeData: any, posData: any)\r\n {\r\n this.shareDBManager.addNewNode(nodeData,posData);\r\n };\r\n\r\n //Edge related functions\r\n addEdge(edgeData: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.addNewEdgeShareDB(edgeData);\r\n }\r\n else\r\n {\r\n this.addNewEdgetoCy(edgeData);\r\n }\r\n };\r\n\r\n addEdges(edges: any[])\r\n {\r\n for (var i in edges)\r\n {\r\n this.addEdge(edges[i].data);\r\n }\r\n };\r\n\r\n addEdgesCy(edges: any[])\r\n {\r\n const newEdges = [];\r\n\r\n\r\n for (var i in edges)\r\n {\r\n const newEdge =\r\n {\r\n group: \"edges\",\r\n data: edges[i].data\r\n };\r\n newEdges.push(newEdge);\r\n }\r\n this.cy.add(newEdges);\r\n };\r\n\r\n addNewEdgeShareDB(edgeData: any)\r\n {\r\n this.shareDBManager.addNewEdge(edgeData);\r\n };\r\n\r\n addNewEdgetoCy(edgeData: any)\r\n {\r\n var newEdge =\r\n {\r\n group: \"edges\",\r\n data: edgeData\r\n };\r\n this.undoRedoManager.do(\"add\", newEdge);\r\n };\r\n\r\n shareDBEdgeAddRemoveEventCallBack(op: any)\r\n {\r\n\r\n //Get real time node object and sync it to node addition or removal\r\n var isRemove = Object.keys(op)[1] === 'od';\r\n var edge = op.oi || op.od;\r\n\r\n //Removal Operation\r\n if (isRemove)\r\n {\r\n var edgeID = op.p[1];\r\n //Remove element from existing graph\r\n var cyEle = this.cy.$(\"#\" + edgeID);\r\n this.removeElementCy(cyEle);\r\n }\r\n //Addition Operation\r\n else\r\n {\r\n this.addNewEdgeLocally(edge);\r\n }\r\n };\r\n\r\n addNewElementsLocally(realTimeNodeArray: any[], realTimeEdgeArray: any[])\r\n {\r\n const nodeList: any[] = [];\r\n const nodeMap: any = {};\r\n\r\n for (var i in realTimeNodeArray)\r\n {\r\n var realTimeNode = realTimeNodeArray[i];\r\n\r\n var nodeID = realTimeNode.id;\r\n\r\n //Added for backward compatibility when width was not defined\r\n var nodeWidth = (realTimeNode.w == undefined) ? 150 : realTimeNode.w ;\r\n var nodeHeight = (realTimeNode.h == undefined) ? 52 : realTimeNode.h ;\r\n var compoundMinWidth = (realTimeNode.minWidth == undefined) ? 0 : realTimeNode.minWidth ;\r\n var compoundMinWidthBiasLeft = (realTimeNode.minWidthBiasLeft == undefined) ? 0 : realTimeNode.minWidthBiasLeft ;\r\n var compoundMinWidthBiasRight = (realTimeNode.minWidthBiasRight == undefined) ? 0 : realTimeNode.minWidthBiasRight ;\r\n var compoundMinHeight = (realTimeNode.minHeight == undefined) ? 0 : realTimeNode.minHeight ;\r\n var compoundMinHeightBiasTop = (realTimeNode.minHeightBiasTop == undefined) ? 0 : realTimeNode.minHeightBiasTop ;\r\n var compoundMinHeightBiasBottom = (realTimeNode.minHeightBiasBottom == undefined) ? 0 : realTimeNode.minHeightBiasBottom;\r\n\r\n const nodeData =\r\n {\r\n group: 'nodes',\r\n // TODO: Amendment by Ziya\r\n position: {},\r\n data:\r\n {\r\n id: nodeID,\r\n type: realTimeNode.type,\r\n name: realTimeNode.name,\r\n parent: realTimeNode.parent,\r\n w: nodeWidth,\r\n h: nodeHeight\r\n },\r\n style:\r\n {\r\n 'min-width': compoundMinWidth,\r\n 'min-width-bias-left': compoundMinWidthBiasLeft,\r\n 'min-width-bias-right': compoundMinWidthBiasRight,\r\n 'min-height': compoundMinHeight,\r\n 'min-height-bias-top': compoundMinHeightBiasTop,\r\n 'min-height-bias-bottom': compoundMinHeightBiasBottom\r\n }\r\n };\r\n\r\n if (nodeData.data.parent === undefined )\r\n {\r\n delete nodeData.data.parent;\r\n }\r\n\r\n if (realTimeNode.x && realTimeNode.y)\r\n {\r\n nodeData.position =\r\n {\r\n x: realTimeNode.x,\r\n y: realTimeNode.y\r\n }\r\n }\r\n\r\n nodeMap[nodeID] = nodeData;\r\n nodeList.push(nodeData);\r\n }\r\n\r\n var edgeList = [];\r\n for (var i in realTimeEdgeArray)\r\n {\r\n var edge = realTimeEdgeArray[i];\r\n var edgeID = edge.id;\r\n\r\n //If source and and target is somehow lost in remote model do not create this edge\r\n if(!(edge.source in nodeMap && edge.target in nodeMap))\r\n continue\r\n\r\n var tmpData = {\r\n id: edgeID,\r\n type: edge.type,\r\n source: edge.source,\r\n target: edge.target,\r\n pubmedIDs: edge.pubmedIDs,\r\n name: edge.name,\r\n }\r\n\r\n if (edge.edgeCurveStyle == \"unbundled-bezier\") {\r\n tmpData['controlPointPositions'] = edge.anchorPoints;\r\n }\r\n else {\r\n tmpData['bendPointPositions'] = edge.anchorPoints;\r\n }\r\n\r\n var edgeData =\r\n {\r\n group: 'edges',\r\n data: tmpData\r\n };\r\n\r\n edgeList.push(edgeData);\r\n }\r\n\r\n this.cy.add(nodeList);\r\n this.cy.add(edgeList);\r\n\r\n this.edgeEditing?.initAnchorPoints(this.cy.edges());\r\n\r\n this.cy.nodes().updateCompoundBounds();\r\n }\r\n\r\n addNewEdgeLocally(edge: any)\r\n {\r\n var edgeData ={\r\n id: edge.id,\r\n type: edge.type,\r\n source: edge.source,\r\n target: edge.target,\r\n pubmedIDs: edge.pubmedIDs,\r\n name: edge.name\r\n };\r\n if (edge.edgeCurveStyle == \"unbundled-bezier\") {\r\n edgeData['controlPointPositions'] = edge.anchorPoints;\r\n }\r\n else {\r\n edgeData['bendPointPositions'] = edge.anchorPoints;\r\n }\r\n this.addNewEdgetoCy(edgeData);\r\n this.edgeEditing?.initAnchorPoints(this.cy.getElementById( edge.id ));\r\n };\r\n\r\n reconnectEdge(sourceID: string, targetID: string, edgeData: any) {\r\n\r\n if(this.isCollaborative){\r\n var edge = this.cy.getElementById(edgeData.id);\r\n this.reconnectEdgeInShareDB(sourceID, targetID, edgeData);\r\n }\r\n else{\r\n var location = {\r\n source: sourceID,\r\n target: targetID\r\n };\r\n\r\n var edge = this.cy.getElementById(edgeData.id);\r\n edge.move(location);\r\n }\r\n\r\n return this.cy.getElementById(edgeData.id);\r\n };\r\n\r\n reconnectEdgeInShareDB(sourceID: string, targetID: string, edgeData: any) {\r\n this.shareDBManager.reconnectEdge(sourceID, targetID, edgeData);\r\n };\r\n\r\n //Removal functions\r\n removeElement(ele: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.removeElementsFromShareDB(ele);\r\n }\r\n else\r\n {\r\n this.removeElementsCy(ele);\r\n }\r\n };\r\n\r\n removeElementCy(ele: any)\r\n {\r\n this.undoRedoManager.do(\"remove\", ele);\r\n };\r\n\r\n removeElementsCy(ele: any)\r\n {\r\n this.undoRedoManager.do(\"remove\", ele);\r\n };\r\n\r\n removeElementsFromShareDB(eles: any[])\r\n {\r\n var self = this;\r\n eles.forEach(function (ele)\r\n {\r\n self.shareDBManager.removeElement(ele.id());\r\n });\r\n };\r\n\r\n removeElementFromShareDB(ele: any)\r\n {\r\n this.shareDBManager.removeElement(ele.id());\r\n };\r\n\r\n changeParents(eles: any[], newParentId: string)\r\n {\r\n if(this.isCollaborative)\r\n {\r\n this.changeParentShareDB(eles, newParentId);\r\n }\r\n else\r\n {\r\n var parentData = newParentId ? newParentId : null;\r\n\r\n // Old manual way to change parents in local mode\r\n //this.changeParentCy(eles, newParentId);\r\n\r\n //Save element's previous width & height in dim array\r\n const dim : any[]= [];\r\n const id : any[]= [];\r\n eles.forEach(function (ele: any)\r\n {\r\n var parameters =\r\n {\r\n id: ele.id(),\r\n width: ele.data(\"w\"),\r\n height: ele.data(\"h\")\r\n };\r\n dim.push(parameters);\r\n id.push(ele.id());\r\n });\r\n\r\n const parentElem = this.cy.getElementById(parentData);\r\n var param = {\r\n firstTime: true,\r\n parentData: parentData, // It keeps the newParentId (Just an id for each nodes for the first time)\r\n nodes: eles,\r\n posDiffX: (!parentData) ? 0 : parentElem.position('x') - eles[0].position('x'),\r\n posDiffY: (!parentData) ? 0 : parentElem.position('y') - eles[0].position('y')\r\n };\r\n this.undoRedoManager.do('changeParent', param);\r\n\r\n //The elements after change parent operation are different so we find them by using the saved ids\r\n // and add them to the collection\r\n var collection = this.cy.collection();\r\n for (var i in id)\r\n {\r\n var elementById = this.cy.getElementById(id[i]);\r\n collection = collection.add(elementById);\r\n }\r\n //Set their previous size to the new elements in the collection\r\n collection.forEach(function (ele: any, i: number)\r\n {\r\n if (ele.id() == dim[i].id)\r\n ele.data(\"w\", dim[i].width);\r\n ele.data(\"h\", dim[i].height);\r\n });\r\n }\r\n };\r\n\r\n changeParentShareDB (eles: any, newParentId: string)\r\n {\r\n\r\n var classRef = this;\r\n function getTopLevelParents(eles: any[])\r\n {\r\n var tpMostNodes = classRef.cy.collection();\r\n const parentMap : any = {};\r\n\r\n //Get all parents\r\n eles.forEach(function (node)\r\n {\r\n if(node.isParent())\r\n parentMap[node.id()] = node;\r\n });\r\n\r\n //Get all parents\r\n eles.forEach(function (node)\r\n {\r\n var nodeParent = node.parent();\r\n\r\n if(parentMap[nodeParent.id()] === undefined)\r\n tpMostNodes = tpMostNodes.union(node);\r\n });\r\n\r\n return tpMostNodes;\r\n }\r\n\r\n\r\n class NodeObj{\r\n public nodeRef: any;\r\n public children: any;\r\n constructor(nodeObj: any){\r\n this.nodeRef = nodeObj;\r\n this.children = [];\r\n }\r\n }\r\n var connectedEdges = eles.connectedEdges();\r\n // Traverses given elements and constructs subgraph relations\r\n // creates a nested structure into rootnodeObj\r\n function traverseNodes(eles: any[], rootNodeObj: any)\r\n {\r\n eles.forEach(function (ele)\r\n {\r\n connectedEdges = connectedEdges.union(ele.connectedEdges());\r\n\r\n if(ele.isParent())\r\n {\r\n rootNodeObj.children.push(new NodeObj(ele));\r\n var lengthOfChildrenArray = rootNodeObj.children.length;\r\n traverseNodes(ele.children(), rootNodeObj.children[lengthOfChildrenArray-1]);\r\n }\r\n else\r\n {\r\n rootNodeObj.children.push(new NodeObj(ele));\r\n }\r\n });\r\n }\r\n\r\n //Create new collection\r\n var topMostNodes = getTopLevelParents(eles);\r\n\r\n var rootNodeR = new NodeObj(null);\r\n\r\n traverseNodes(topMostNodes, rootNodeR);\r\n this.shareDBManager.changeParent(rootNodeR, newParentId, connectedEdges);\r\n };\r\n\r\n changeParentCy(eles: any[], newParentId: string)\r\n {\r\n let lockedNodes: any = {};\r\n const self = this;\r\n\r\n function removeNodes(nodes: any)\r\n {\r\n //Get removed edges first\r\n let removedEles = nodes.connectedEdges().remove();\r\n const children = nodes.children();\r\n\r\n if (children != null && children.length > 0)\r\n {\r\n children.forEach(function(childNode: any)\r\n {\r\n lockedNodes[childNode.id()] = true;\r\n });\r\n\r\n removedEles = removedEles.union(removeNodes(children));\r\n }\r\n\r\n removedEles = removedEles.union(nodes.remove());\r\n self.cy.nodes().updateCompoundBounds();\r\n return removedEles;\r\n }\r\n\r\n\r\n var removedEles = removeNodes(eles);\r\n this.undoRedoManager.do(\"remove\", removedEles);\r\n\r\n for (var i = 0; i < removedEles.length; i++)\r\n {\r\n var removedNode = removedEles[i];\r\n\r\n //Just alter the parent id of corresponding nodes !\r\n if (removedNode.isEdge() || lockedNodes[removedNode.id()])\r\n {\r\n continue;\r\n }\r\n\r\n removedNode._private.data.parent = newParentId;\r\n if(removedNode._private.parent){\r\n delete removedNode._private.parent;\r\n }\r\n }\r\n\r\n self.cy.add(removedEles);\r\n this.undoRedoManager.do(\"add\", removedEles);\r\n self.cy.nodes().updateCompoundBounds();\r\n };\r\n\r\n moveElements(eles: any[])\r\n {\r\n var classRef = this;\r\n //Sync movement to real time api\r\n if(this.isCollaborative)\r\n {\r\n eles.forEach(function (ele: any)\r\n {\r\n classRef.shareDBManager.moveElement(ele);\r\n });\r\n }\r\n };\r\n\r\n resizeElements(ele: any)\r\n {\r\n if(this.isCollaborative) {\r\n if (!ele.isParent()) {\r\n var previousWidth = ele.width();\r\n var previousHeight = ele.height();\r\n //Sync movement to real time api\r\n this.shareDBManager.resizeElement(ele, previousWidth, previousHeight);\r\n }\r\n else {\r\n var minWidth = ele.style('min-width');\r\n var minWidthBiasLeft = ele.style('min-width-bias-left');\r\n var minWidthBiasRight = ele.style('min-width-bias-right');\r\n var minHeight = ele.style('min-height');\r\n var minHeightBiasTop = ele.style('min-height-bias-top');\r\n var minHeightBiasBottom = ele.style('min-height-bias-bottom');\r\n\r\n //Sync movement to real time api\r\n this.shareDBManager.resizeCompound(ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom);\r\n }\r\n }\r\n };\r\n\r\n mergeGraph(nodes: any[], edges: any[])\r\n {\r\n if (this.isCollaborative)\r\n {\r\n //Collaborative usage\r\n this.shareDBManager.mergeGraph(nodes,edges);\r\n }\r\n else\r\n {\r\n //Local usage file load\r\n this.mergeGraphCy(nodes,edges);\r\n }\r\n this.fitGraph();\r\n };\r\n\r\n mergeGraphCy(nodes: any[], edges: any[])\r\n {\r\n //Define arrays and maps\r\n const nodesToBeAdded = [];\r\n const edgesToBeAdded = [];\r\n const nodeMap : any= {};\r\n\r\n //Iterate over nodes and find nodes that does not exist in current graph by looking their name\r\n for (var index in nodes)\r\n {\r\n var ele = nodes[index];\r\n nodeMap[ele.data.id] = ele;\r\n\r\n if (this.cy.filter('node[name = \"'+ele.data.name+'\"]').length <= 0)\r\n {\r\n nodesToBeAdded.push(ele);\r\n }\r\n }\r\n\r\n this.cy.add(nodesToBeAdded);\r\n\r\n //Iterate over all edges\r\n for (var index in edges)\r\n {\r\n //Get corresponding source and target node in merge file\r\n var ele = edges[index];\r\n var sourceNode = nodeMap[ele.data.source];\r\n var targetNode = nodeMap[ele.data.target];\r\n\r\n //Check if there are nodes with same name in current graph\r\n var cySourceNode = this.cy.nodes('[name=\"'+sourceNode.data.name+'\"]');\r\n var targetNode = this.cy.nodes('[name=\"'+targetNode.data.name+'\"]');\r\n\r\n if (cySourceNode.length > 0)\r\n {\r\n ele.data.source = cySourceNode.id();\r\n }\r\n\r\n if (targetNode.length > 0)\r\n {\r\n ele.data.target = targetNode.id();\r\n }\r\n\r\n if (targetNode.length < 0 && cySourceNode.length < 0 ) {\r\n continue;\r\n }\r\n\r\n var edgesBtw = this.cy.filter('edge[source = \"'+cySourceNode.id()+'\"][target = \"'+targetNode.id()+'\"]');\r\n\r\n //We assume there could be one edge between source and target node with same type\r\n var isFound = false;\r\n edgesBtw.forEach(function(edge: any)\r\n {\r\n if (edge.data().type == ele.data.type)\r\n {\r\n isFound = true;\r\n return false;\r\n }\r\n //TODO: AMENDMENT by Ziya\r\n return true;\r\n });\r\n\r\n if (!isFound)\r\n {\r\n delete ele.data.id;\r\n edgesToBeAdded.push(ele);\r\n }\r\n }\r\n\r\n this.cy.add(edgesToBeAdded);\r\n };\r\n\r\n fitGraph()\r\n {\r\n if(this.isCollaborative)\r\n {\r\n this.cy.fit(this.FIT_CONSTANT);\r\n var newState =\r\n {\r\n zoomLevel: this.cy.zoom(),\r\n panLevel: this.cy.pan()\r\n };\r\n this.updateGlobalOptions(newState);\r\n }\r\n else\r\n {\r\n this.cy.fit(this.FIT_CONSTANT);\r\n }\r\n }\r\n\r\n loadFile(nodes: any[], edges: any[])\r\n {\r\n if (this.isCollaborative)\r\n {\r\n //Real time load graph\r\n this.loadfileShareDB(nodes, edges);\r\n }\r\n else\r\n {\r\n //Local usage file load\r\n this.loadFileCy(nodes,edges);\r\n }\r\n \r\n this.edgeEditing?.initAnchorPoints(this.cy.edges());\r\n \r\n this.fitGraph();\r\n };\r\n\r\n loadFileCy(nodes: any[], edges: any[])\r\n {\r\n //Remove all elements\r\n this.removeElementCy(this.cy.elements());\r\n\r\n this.addNodesCy(nodes);\r\n this.addEdgesCy(edges);\r\n };\r\n\r\n loadfileShareDB(nodes: any[], edges: any[])\r\n {\r\n this.shareDBManager.loadGraph(nodes,edges);\r\n };\r\n\r\n removeAllElements()\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.shareDBManager.removeAllElements();\r\n }\r\n else\r\n {\r\n this.cy.remove(this.cy.elements());\r\n }\r\n };\r\n\r\n updateHighlight(ele: any, isHighlighted: boolean)\r\n {\r\n if (isHighlighted)\r\n this.undoRedoManager.do('highlightOthers', ele);\r\n else\r\n this.undoRedoManager.do('removeOtherHighlight', ele);\r\n };\r\n\r\n\r\n @autobind\r\n updateVisibility(ele: any, isHidden: boolean)\r\n {\r\n if (isHidden)\r\n this.viewUtilities.hide(ele);\r\n else\r\n this.viewUtilities.show(ele);\r\n };\r\n\r\n updateElementCallback(op: any)\r\n {\r\n var ele = op.oi;\r\n var eleID = ele.id;\r\n var cyEle = this.cy.$(\"#\" + eleID);\r\n this.changeNameCy(cyEle, ele.name);\r\n\r\n if (cyEle.isNode())\r\n {\r\n //Width and height of simple nodes and compounds is changed differently\r\n if (cyEle.isParent())\r\n {\r\n cyEle.style(\"min-width\", ele.minWidth);\r\n cyEle.style(\"min-width-bias-left\", ele.minWidthBiasLeft);\r\n cyEle.style(\"min-width-bias-right\", ele.minWidthBiasRight);\r\n cyEle.style(\"min-height\", ele.minHeight);\r\n cyEle.style(\"min-height-bias-top\", ele.minHeightBiasTop);\r\n cyEle.style(\"min-height-bias-bottom\", ele.minHeightBiasBottom);\r\n }\r\n else\r\n {\r\n cyEle.data('w', ele.w);\r\n cyEle.data('h', ele.h);\r\n //Position is changed only for simple nodes because the\r\n //position of compounds is defined by simple nodes' position\r\n cyEle.position({x: ele.x, y: ele.y});\r\n }\r\n\r\n this.updateVisibility(cyEle, ele.isHidden);\r\n this.updateHighlight(cyEle, ele.isHighlighted);\r\n\r\n if(ele.isInvalidGene)\r\n {\r\n this.doHighlightInvalidGenes(cyEle);\r\n }\r\n else\r\n {\r\n this.undoHighlightInvalidGenes(cyEle);\r\n }\r\n }\r\n else if(cyEle.isEdge())\r\n {\r\n var pubmedArray = ele.pubmedIDs;\r\n cyEle.data('pubmedIDs', pubmedArray);\r\n this.updateHighlight(cyEle, ele.isHighlighted);\r\n\r\n var anchorPoints = ele.anchorPoints;\r\n\r\n //If edge is reconnected\r\n if ( ele.source !== cyEle.source().id() || ele.target !== cyEle.target().id()){\r\n var location = {\r\n source: ele.source,\r\n target: ele.target\r\n };\r\n cyEle.move(location);\r\n //make sure that bend points are same\r\n this.edgeEditing?.initAnchorPoints(cyEle);\r\n }\r\n else {\r\n if (ele.edgeCurveStyle === \"bezier\") {\r\n const anchors = this.edgeEditing?.getAnchorsAsArray(cyEle);\r\n if (anchors && anchors.length > 0) {\r\n for (let i = 0; i < anchors.length / 2; i++) {\r\n this.edgeEditing?.deleteSelectedAnchor(cyEle, 0);\r\n }\r\n }\r\n }\r\n else if (ele.edgeCurveStyle === \"unbundled-bezier\") {\r\n cyEle.data('controlPointPositions', anchorPoints);\r\n }\r\n else {\r\n cyEle.data('bendPointPositions', anchorPoints);\r\n }\r\n this.edgeEditing?.initAnchorPoints(cyEle);\r\n }\r\n }\r\n };\r\n\r\n getGenomicDataSVG(node: any)\r\n {\r\n // @ts-ignore\r\n return this.genomicDataOverlayManager.generateSVGForNode(node);\r\n }\r\n\r\n getOncoprintDataSVG(node: any) \r\n {\r\n return this.genomicDataOverlayManager.generateOncoprintForPatientNode(node);\r\n }\r\n\r\n removeGenomicData()\r\n {\r\n if(this.isCollaborative)\r\n {\r\n this.shareDBManager.clearGenomicData();\r\n }\r\n else\r\n {\r\n // TODO wrap this in afunction in genomic data overlay manager\r\n this.genomicDataOverlayManager.clearAllGenomicData();\r\n this.genomicDataOverlayManager.hideGenomicData();\r\n this.genomicDataOverlayManager.notifyObservers();\r\n }\r\n\r\n }\r\n\r\n addGenomicData(genomicData: any)\r\n {\r\n const groupID = this.getEmptyGroupID();\r\n\r\n if(this.isCollaborative)\r\n {\r\n var parsedGenomicData = this.genomicDataOverlayManager.prepareGenomicDataShareDB(genomicData);\r\n this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap);\r\n this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap),\r\n groupID);\r\n \r\n let currentVisibleGenomicDataCount = this.genomicDataOverlayManager.countVisibleGenomicDataByType();\r\n Object.keys(parsedGenomicData.visibilityMap).forEach(study => {\r\n if (parsedGenomicData.visibilityMap[study] && (currentVisibleGenomicDataCount >= 6)) {\r\n parsedGenomicData.visibilityMap[study] = false;\r\n }\r\n else if(parsedGenomicData.visibilityMap[study]) {\r\n currentVisibleGenomicDataCount++;\r\n }\r\n });\r\n\r\n this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap);\r\n }\r\n else\r\n {\r\n this.genomicDataOverlayManager.addGenomicDataLocally(genomicData, groupID);\r\n }\r\n }\r\n\r\n adjustVisibilityShareDB(profileId: string, isEnabled: boolean){\r\n const targetProfileIndex = this.profiles.map(profile => profile.profileId).indexOf(profileId);\r\n this.setProfile(targetProfileIndex, {\r\n ...this.profiles[targetProfileIndex],\r\n enabled: isEnabled\r\n }); \r\n }\r\n\r\n addToProfiles(profileId: string){\r\n // Check if this profile already exists\r\n if(this.profiles.map(profile => profile.profileId).includes(profileId)){\r\n return;\r\n }\r\n\r\n this.addProfile({\r\n profileId: profileId, \r\n enabled: true\r\n });\r\n }\r\n\r\n addPortalGenomicData(genomicData: any, groupID: any, activeGroups?: any[])\r\n {\r\n \r\n if(this.isCollaborative)\r\n {\r\n var parsedGenomicData = this.genomicDataOverlayManager.preparePortalGenomicDataShareDB(genomicData);\r\n this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap);\r\n this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap),\r\n groupID);\r\n this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap);\r\n }\r\n else\r\n {\r\n if( activeGroups !== undefined){\r\n this.genomicDataOverlayManager.addPortalGenomicData(genomicData, groupID, activeGroups);\r\n }\r\n else {\r\n this.genomicDataOverlayManager.addPortalGenomicData(genomicData, groupID);\r\n }\r\n }\r\n }\r\n\r\n shareDBGenomicDataHandler(op: any)\r\n {\r\n var isRemove = Object.keys(op)[1] === 'od';\r\n var newData = op.oi;\r\n var geneSymbol = op.p[1];\r\n\r\n\r\n if(!isRemove)\r\n {\r\n this.genomicDataOverlayManager.addGenomicDataWithGeneSymbol(geneSymbol, newData);\r\n\r\n }\r\n // Removal\r\n else\r\n {\r\n this.genomicDataOverlayManager.removeGenomicDataWithGeneSymbol(geneSymbol);\r\n }\r\n }\r\n\r\n\r\n shareDBGenomicDataGroupChangeHandler(op: any)\r\n {\r\n\r\n var isRemove = Object.keys(op)[1] === 'od';\r\n var data = op.oi;\r\n var key = op.p[1];\r\n\r\n // Addition\r\n if(!isRemove)\r\n {\r\n this.genomicDataOverlayManager.addGenomicGroupData(key, data);\r\n if(data.length !== 1){\r\n console.log(\"Grouped genomic data expected to be of length 1\");\r\n }\r\n data.forEach((profileId: any) => {this.addToProfiles(profileId)});\r\n }\r\n else if (!data) {\r\n this.genomicDataOverlayManager.clearAllGenomicData();\r\n }\r\n this.genomicDataOverlayManager.showGenomicData((node: any) => {\r\n this.resizeElements(node);\r\n } );\r\n this.genomicDataOverlayManager.notifyObservers();\r\n }\r\n\r\n shareDBGenomicDataVisibilityHandler(op: any)\r\n {\r\n var data = op.oi;\r\n var key = op.p[1];\r\n var isRemove = Object.keys(op)[1] === 'od';\r\n // Addition\r\n if(!isRemove)\r\n {\r\n this.genomicDataOverlayManager.addGenomicVisData(key, data);\r\n\r\n this.adjustVisibilityShareDB(key, data);\r\n }\r\n // Removal\r\n else\r\n {\r\n this.genomicDataOverlayManager.removeGenomicVisData();\r\n this.removeProfiles();\r\n }\r\n\r\n this.genomicDataOverlayManager.showGenomicData((node: any) => {\r\n this.resizeElements(node);\r\n } );\r\n this.genomicDataOverlayManager.notifyObservers();\r\n }\r\n\r\n\r\n incrementNumberOfUsers(){\r\n this.shareDBManager.incrementNumberOfUsers();\r\n }\r\n getUserId(){\r\n let userId = this.shareDBManager.doc.data[this.shareDBManager.NUMBER_OF_USERS];\r\n return userId;\r\n }\r\n\r\n updateMessageCount( messageCount : number){\r\n this.incrementChatMessageCountCallback( messageCount);\r\n }\r\n updateGenomicDataColorSchemeHandler(op: any)\r\n {\r\n let colorScheme = op.li;\r\n \r\n this.setGenomicDataOverlayColorScheme(colorScheme);\r\n\r\n this.colorSchemeChangeCallback(colorScheme);\r\n \r\n this.genomicDataOverlayManager.updateColorScheme(colorScheme);\r\n this.genomicDataOverlayManager.showGenomicData((node: any) => {\r\n this.resizeElements(node);\r\n } );\r\n this.genomicDataOverlayManager.notifyObservers();\r\n }\r\n\r\n resizeNodesToContent(nodes: any[])\r\n {\r\n if(this.isCollaborative)\r\n {\r\n const visibleNumberOfData = this.genomicDataOverlayManager.countVisibleGenomicDataByType();\r\n const labelWithData = 148 + (visibleNumberOfData-3) * 36;\r\n const rt = this.shareDBManager;\r\n nodes.forEach(function( ele ){\r\n if (!ele.isParent())\r\n {\r\n var newWidth = 150;\r\n var newHeight = 52;\r\n if (ele.data('name') != \"\")\r\n {\r\n var labelLength = ele.style('label').length*10 + 6;\r\n newWidth = labelLength;\r\n newHeight = 24;\r\n }\r\n if (ele.data('type') !== \"PROCESS\" && visibleNumberOfData > 0)\r\n {\r\n newHeight = 52;\r\n if (visibleNumberOfData < 4)\r\n {\r\n if (150 > newWidth)\r\n newWidth = 150;\r\n }\r\n else\r\n {\r\n if (labelWithData > newWidth)\r\n newWidth = labelWithData;\r\n }\r\n }\r\n rt.setSizeOfElement(ele, newWidth, newHeight);\r\n }\r\n else\r\n {\r\n //Set the minWidth, minHeight and other properties of compound to 0\r\n rt.resizeCompound(ele, 0, 0, 0, 0, 0, 0);\r\n }\r\n });\r\n }\r\n else\r\n {\r\n const ur = this.cy.undoRedo();\r\n const actions: any[] = [];\r\n\r\n const visibleNumberOfData = this.genomicDataOverlayManager.countVisibleGenomicDataByType();\r\n const labelWithData = 150 + (visibleNumberOfData-3) * 36;\r\n nodes.forEach(function( ele: any){\r\n if (!ele.isParent())\r\n {\r\n let newWidth = 150;\r\n let newHeight = 52;\r\n if (ele.data('name') != \"\") {\r\n var labelLength = ele.style('label').length * 6 + 24;\r\n newWidth = labelLength;\r\n newHeight = 24;\r\n }\r\n if (ele.data('type') !== \"PROCESS\" && \r\n visibleNumberOfData > 0) {\r\n \r\n newHeight = 52;\r\n if (visibleNumberOfData < 4) {\r\n if (150 > newWidth)\r\n newWidth = 150;\r\n }\r\n else {\r\n if (labelWithData > newWidth)\r\n newWidth = labelWithData;\r\n }\r\n }\r\n const args = {\r\n ele: ele,\r\n oldWidth: ele.width(),\r\n newWidth: newWidth,\r\n oldHeight: ele.height(),\r\n newHeight: newHeight\r\n };\r\n actions.push({name: \"changeNodeSize\", param: args});\r\n }\r\n else\r\n {\r\n const args = {\r\n ele: ele,\r\n oldMinWidth: ele.style(\"min-width\"),\r\n newMinWidth: 0,\r\n oldMinWidthBiasLeft: ele.style(\"min-width-bias-left\"),\r\n newMinWidthBiasLeft: 0,\r\n oldMinWidthBiasRight: ele.style(\"min-width-bias-right\"),\r\n newMinWidthBiasRight: 0,\r\n oldMinHeight: ele.style(\"min-height\"),\r\n newMinHeight: 0,\r\n oldMinHeightBiasTop: ele.style(\"min-height-bias-top\"),\r\n newMinHeightBiasTop: 0,\r\n oldMinHeightBiasBottom: ele.style(\"min-height-bias-bottom\"),\r\n newMinHeightBiasBottom: 0\r\n };\r\n actions.push({name: \"changeCompoundSize\", param: args});\r\n }\r\n });\r\n\r\n ur.do(\"batch\", actions);\r\n }\r\n this.cy.nodeEditing('get').refreshGrapples();\r\n };\r\n\r\n\r\n\r\n}\r\n","import _ from \"lodash\";\r\nimport { action, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n Col,\r\n ControlLabel,\r\n Form,\r\n FormControl,\r\n InputGroup,\r\n Modal\r\n} from \"react-bootstrap\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport { EModalType } from \"../ui/react-pathway-mapper\";\r\nimport PathwayActions from \"../utils/PathwayActions\";\r\n\r\ninterface ILayoutPropertiesProps {\r\n show: boolean;\r\n handleClose: (modelId: EModalType) => void;\r\n pathwayActions: PathwayActions;\r\n}\r\n\r\nexport interface ILayoutProperties {\r\n name: string;\r\n animationDuration: number;\r\n animationEasing: string;\r\n nodeRepulsion: number;\r\n idealEdgeLength: number;\r\n edgeElasticity: number;\r\n nestingFactor: number;\r\n gravity: number;\r\n numIter: number;\r\n gravityRangeCompound: number;\r\n gravityCompound: number;\r\n gravityRange: number;\r\n tilingPaddingVertical: number;\r\n tilingPaddingHorizontal: number;\r\n initialEnergyOnIncremental: number;\r\n tile: boolean;\r\n animate: boolean;\r\n randomize: boolean;\r\n nodeDimensionsIncludeLabels: boolean\r\n}\r\n\r\n@observer\r\nexport default class LayoutProperties extends React.Component<\r\n ILayoutPropertiesProps\r\n> {\r\n static layoutProperties: ILayoutProperties;\r\n\r\n @observable\r\n internalLayoutProperties: ILayoutProperties;\r\n\r\n constructor(props: ILayoutPropertiesProps) {\r\n super(props);\r\n makeObservable(this);\r\n this.internalLayoutProperties = _.clone(\r\n EditorActionsManager.defaultLayoutProperties\r\n );\r\n LayoutProperties.layoutProperties = _.clone(EditorActionsManager.defaultLayoutProperties);\r\n }\r\n\r\n @action.bound\r\n updateInternalLayoutProperty(property: string, val: boolean | number) {\r\n this.internalLayoutProperties[property] = val;\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n {\r\n this.internalLayoutProperties = _.clone(LayoutProperties.layoutProperties);\r\n }}\r\n onHide={() => {\r\n this.internalLayoutProperties = _.clone(LayoutProperties.layoutProperties);\r\n this.props.handleClose(EModalType.LAYOUT);\r\n }}\r\n >\r\n \r\n \r\n Layout Properties\r\n \r\n \r\n \r\n
\r\n \r\n \r\n Node Repulsion:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"nodeRepulsion\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Ideal Edge Length:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"idealEdgeLength\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Edge Elasticity:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"edgeElasticity\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Nesting Factor:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"nestingFactor\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Gravity:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"gravity\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Gravity Range:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"gravityRange\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Compound Gravity:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"gravityCompound\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Compound Gravity Range:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"gravityRangeCompound\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Number of Iterations:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"numIter\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Tiling Vertical Padding:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"tilingPaddingVertical\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Tiling Horizontal Padding:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"tilingPaddingHorizontal\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Tile Disconnected:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"tile\", !this.internalLayoutProperties.tile);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n Animate:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"animate\",!this.internalLayoutProperties.animate);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n Incremental:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"randomize\", !this.internalLayoutProperties.randomize);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n Incremental Cooling Factor:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"initialEnergyOnIncremental\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n {\r\n LayoutProperties.layoutProperties = _.clone(this.internalLayoutProperties);\r\n this.props.pathwayActions.setLayoutProperties(\r\n LayoutProperties.layoutProperties\r\n );\r\n this.props.handleClose(EModalType.LAYOUT);\r\n }}\r\n >\r\n Save\r\n \r\n\r\n {\r\n this.internalLayoutProperties = _.clone(\r\n EditorActionsManager.defaultLayoutProperties\r\n );\r\n LayoutProperties.layoutProperties = _.clone(this.internalLayoutProperties);\r\n this.props.pathwayActions.setLayoutProperties(\r\n this.internalLayoutProperties\r\n );\r\n }}\r\n >\r\n Default\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import { observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport { Button, Col, ControlLabel, Form, FormControl, InputGroup, Modal } from 'react-bootstrap';\r\nimport { IPathwayInfo } from '../managers/FileOperationsManager';\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\nimport PathwayActions from '../utils/PathwayActions';\r\n\r\ninterface IPathwayDetailsModalProps{\r\n show: boolean;\r\n handleClose: Function;\r\n pathwayActions: PathwayActions;\r\n}\r\n\r\n@observer\r\nexport default class PathwayDetailsModal extends React.Component{\r\n\r\n pathwayInfo: IPathwayInfo;\r\n\r\n constructor(props: IPathwayDetailsModalProps){\r\n super(props);\r\n }\r\n\r\n render(){\r\n\r\n this.pathwayInfo = this.props.pathwayActions.getPathwayInfo;\r\n\r\n return(\r\n\r\n {this.props.handleClose(4)}}>\r\n \r\n Pathway Properties\r\n \r\n \r\n
\r\n\r\n \r\n \r\n Pathway Title:\r\n \r\n \r\n {this.pathwayInfo.pathwayTitle = e.target.value;}}value={this.pathwayInfo.pathwayTitle}/>\r\n \r\n \r\n\r\n \r\n \r\n Pathway Description:\r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n\r\n )\r\n\r\n }\r\n}","import autobind from \"autobind-decorator\";\r\nimport { action, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport { Button, Col, Modal, Row } from \"react-bootstrap\";\r\nimport { EModalType, IColorValueMap } from \"../ui/react-pathway-mapper\";\r\n\r\nconst addButtonImg = require(\"../images/add.svg\");\r\nconst deleteButtonImg = require(\"../images/delete-simple.svg\");\r\n\r\ninterface IValueColorObj {\r\n value: string;\r\n color: string;\r\n}\r\n\r\ninterface IProfilesColorSchemeModalProps {\r\n show: boolean;\r\n handleClose: (modalId: EModalType) => void;\r\n colorValueMapping: IColorValueMap;\r\n handleColorMappingChange: (colorMapping: IColorValueMap) => void;\r\n}\r\n\r\n@observer\r\nexport default class ProfilesColorSchemeModal extends React.Component<\r\n IProfilesColorSchemeModalProps,\r\n {}\r\n> {\r\n @observable\r\n colorMappings: IValueColorObj[];\r\n\r\n @observable\r\n showUniqueValuesWarningModal: boolean;\r\n\r\n constructor(props: IProfilesColorSchemeModalProps) {\r\n super(props);\r\n makeObservable(this);\r\n this.initColorMappings();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.show === false && this.props.show === true) {\r\n this.initColorMappings();\r\n }\r\n }\r\n\r\n initColorMappings() {\r\n this.colorMappings = Object.entries(this.props.colorValueMapping)\r\n .map(([value, color]) => {\r\n return {\r\n value: value,\r\n color: color,\r\n };\r\n })\r\n .sort((o1, o2) => {\r\n return Number(o1.value) - Number(o2.value);\r\n });\r\n }\r\n\r\n @action.bound\r\n handleColorChange(index: number, color: string) {\r\n this.colorMappings[index].color = color;\r\n }\r\n\r\n @action.bound\r\n handleValueChange(index: number, value: string) {\r\n this.colorMappings[index].value = value;\r\n }\r\n\r\n @action.bound\r\n addDefaultColorMapping() {\r\n this.colorMappings.push({ value: \"0\", color: \"#ffffff\" });\r\n }\r\n\r\n @action.bound\r\n removeColorMapping(index: number) {\r\n this.colorMappings.splice(index, 1);\r\n }\r\n\r\n @action.bound\r\n setDefaultColorMapping() {\r\n this.colorMappings = [\r\n { value: \"-100\", color: \"#0000ff\" },\r\n { value: \"0\", color: \"#ffffff\" },\r\n { value: \"100\", color: \"#ff0000\" },\r\n ];\r\n }\r\n\r\n @action.bound\r\n setShowUniqueValuesWarningModal(val: boolean) {\r\n this.showUniqueValuesWarningModal = val;\r\n }\r\n\r\n @autobind\r\n handleSaveColorScheme(): boolean {\r\n const mapping = {};\r\n this.colorMappings.forEach((pair) => {\r\n mapping[pair.value] = pair.color;\r\n });\r\n\r\n if (Object.keys(mapping).length < 2) {\r\n this.setShowUniqueValuesWarningModal(true);\r\n return false;\r\n } else {\r\n this.props.handleColorMappingChange(mapping);\r\n return true;\r\n }\r\n }\r\n\r\n @autobind\r\n close() {\r\n this.props.handleClose(EModalType.PROFILES_COLOR_SCHEME);\r\n }\r\n\r\n render() {\r\n const mappingElements = this.colorMappings.map((mapping, index) => (\r\n \r\n \r\n \r\n {\r\n const value = event.target.value;\r\n this.handleValueChange(index, value);\r\n }}\r\n >\r\n \r\n \r\n {\r\n const color = event.target.value;\r\n this.handleColorChange(index, color);\r\n }}\r\n />\r\n \r\n \r\n 2 ? \"icon-enabled\" : \"icon-disabled\")\r\n }\r\n title={\"Remove\"}\r\n onClick={() => {\r\n this.removeColorMapping(index);\r\n }}\r\n >\r\n \r\n \r\n \r\n ));\r\n\r\n return (\r\n {\r\n this.close();\r\n }}\r\n bsSize=\"small\"\r\n >\r\n \r\n Study Data Overlay Color Scheme\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {mappingElements}\r\n \r\n\r\n this.setShowUniqueValuesWarningModal(false)}\r\n bsSize=\"small\"\r\n >\r\n \r\n \r\n Warning \r\n \r\n \r\n \r\n

Please set at least two unique value-color mappings.

\r\n
\r\n \r\n {\r\n this.setShowUniqueValuesWarningModal(false);\r\n }}\r\n >\r\n OK\r\n \r\n \r\n \r\n
\r\n\r\n \r\n {\r\n this.close();\r\n }}\r\n >\r\n Cancel\r\n \r\n {\r\n this.setDefaultColorMapping();\r\n }}\r\n >\r\n Default\r\n \r\n {\r\n const close = this.handleSaveColorScheme();\r\n if (close) {\r\n this.close();\r\n }\r\n }}\r\n >\r\n Save\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport { Button, Modal } from \"react-bootstrap\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport { EModalType, IProfileMetaData } from \"../ui/react-pathway-mapper\";\r\ninterface IProfilesModalProps {\r\n profiles: IProfileMetaData[];\r\n editor: EditorActionsManager;\r\n show: boolean;\r\n handleClose: Function;\r\n handleProfileLabelClicked: (index: number) => void;\r\n enabledProfileCountLimit: number;\r\n}\r\n\r\n@observer\r\nexport default class ProfilesModal extends React.Component<\r\n IProfilesModalProps,\r\n {}\r\n> {\r\n\r\n\r\n @observable\r\n showEnabledProfileWarningModal: boolean = false;\r\n\r\n constructor(props: IProfilesModalProps) {\r\n super(props);\r\n\r\n makeObservable(this);\r\n }\r\n\r\n @action\r\n setShowEnabledProfileWarningModal(val: boolean) {\r\n this.showEnabledProfileWarningModal = val;\r\n }\r\n\r\n @computed get profileEnabledMap() {\r\n\r\n const enabledProfiles: IProfileMetaData[] = [];\r\n this.props.profiles.forEach(profile => {\r\n if (profile.enabled && enabledProfiles.length < this.props.enabledProfileCountLimit) {\r\n enabledProfiles.push(profile);\r\n }\r\n });\r\n\r\n const profileEnabledMap = {};\r\n this.props.profiles.forEach((profile: IProfileMetaData) => {\r\n const enabled = enabledProfiles.indexOf(profile) > -1;\r\n profileEnabledMap[profile.profileId] = enabled;\r\n });\r\n return profileEnabledMap;\r\n }\r\n\r\n handleProfileLabelClicked(index: number) {\r\n this.props.handleProfileLabelClicked(index);\r\n }\r\n\r\n render() {\r\n const profileLabels = this.props.profiles.map(\r\n (profile: IProfileMetaData, i: number) => (\r\n \r\n {\r\n const enabledProfileCount = this.props.profiles.filter(profile => profile.enabled).length;\r\n if (this.props.profiles[i].enabled || enabledProfileCount < this.props.enabledProfileCountLimit) {\r\n this.handleProfileLabelClicked(i);\r\n this.props.editor.updateGenomicDataVisibility(\r\n this.profileEnabledMap\r\n );\r\n }\r\n else {\r\n this.setShowEnabledProfileWarningModal(true);\r\n }\r\n }}\r\n style={{\r\n cursor: \"pointer\",\r\n margin: \"10px\"\r\n }}\r\n bsStyle={this.props.profiles[i].enabled ? \"primary\" : \"default\"}\r\n >\r\n {profile.profileId}\r\n \r\n \r\n )\r\n );\r\n\r\n return (\r\n {\r\n this.props.handleClose(EModalType.PROFILES);\r\n }}\r\n >\r\n \r\n Genomic Data Set(s) to Show\r\n \r\n \r\n {profileLabels.length > 0 ? (\r\n profileLabels\r\n ) : (\r\n

There is currently no data to show

\r\n )}\r\n this.setShowEnabledProfileWarningModal(false)}>\r\n \r\n \r\n Warning\r\n \r\n \r\n \r\n

At most 6 data sets can be displayed at the same time, please disable some other data set before enabling this.

\r\n
\r\n \r\n {\r\n this.setShowEnabledProfileWarningModal(false);\r\n }}>\r\n OK\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\nimport {Modal} from 'react-bootstrap';\r\ninterface IQuickHelpModalProps{\r\n show: boolean;\r\n handleClose: (modalId: EModalType) => void;\r\n}\r\n\r\nexport default class QuickHelpModal extends React.Component{\r\n\r\n constructor(props: IQuickHelpModalProps){\r\n super(props);\r\n }\r\n\r\n render(){\r\n\r\n\r\n return(\r\n {this.props.handleClose(EModalType.HELP)}}>\r\n \r\n Quick Help\r\n \r\n \r\n
    \r\n
  • To add a node: Drag and drop from node palette
  • \r\n
  • To add an interaction: Click on interaction type; then click on small circle on source node and release on target node
  • \r\n
  • To add a node into a container (family, complex, compartment or process): Drag the node into its container node or select nodes to be contained and right click on container node and choose \"Add Selected Into This\"
  • \r\n
  • To delete nodes/interactions: Select and perform Edit > Delete Selected
  • \r\n
  • To overlay experiment data: Select Alteration % > Load From cBioPortal...
  • \r\n
\r\n
\r\n\r\n
\r\n\r\n );\r\n }\r\n\r\n\r\n}","import _ from \"lodash\";\r\nimport { toast } from 'react-toastify';\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\n\r\n\r\nexport default class CBioPortalAccessor{\r\n static readonly CNA_GAIN = 2;\r\n\r\n static readonly GET_ALL_CANCER_STUDIES_URL = \"https://www.cbioportal.org/webservice.do?cmd=getCancerStudies\";\r\n static readonly GET_GENETIC_PROFILES_URL = \"https://www.cbioportal.org/webservice.do?cmd=getGeneticProfiles&cancer_study_id=\";\r\n static readonly GET_PROFILE_DATA_URL = \"https://www.cbioportal.org/webservice.do?cmd=getProfileData\";\r\n static readonly MRNA_EXP_STUDY_NAME = \"_mrna_median_Zscores\";\r\n static readonly CNA_EXP_STUDY_NAME = \"_gistic\";\r\n static readonly VALIDATE_GENES_URL = 'https://www.cbioportal.org/api/genes/fetch?geneIdType=HUGO_GENE_SYMBOL&projection=ID'\r\n static readonly MUTATION_EXP_STUDY_NAME = \"_mutations\";\r\n\r\n static readonly CNA_DELETION = -2;\r\n static readonly Z_SCORE_UPPER_THRESHOLD = 2;\r\n static readonly Z_SCORE_LOWER_THRESHOLD = -2;\r\n \r\n static readonly MUTATION = \"Mutation\";\r\n static readonly GENE_EXPRESSION = \"Gene Expression\";\r\n static readonly CNA = \"Copy Number Alteration\";\r\n\r\n getDataTypes(){\r\n return [CBioPortalAccessor.MUTATION, CBioPortalAccessor.GENE_EXPRESSION, CBioPortalAccessor.CNA];\r\n }\r\n\r\n /*\r\n * Retrieves all cancer studies from cBioPortal\r\n * **/\r\n fetchCancerStudies(callbackFunction)\r\n {\r\n var cancerStudies = {};\r\n var request = new XMLHttpRequest();\r\n request.onreadystatechange = function ()\r\n {\r\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\r\n {\r\n // By lines\r\n // Match all new line character representations\r\n var seperator = /\\r?\\n|\\r/;\r\n var lines = request.responseText.split(seperator);\r\n\r\n // start from first line skip node meta data\r\n for(var i = 1; i < lines.length; i++)\r\n {\r\n if (lines[i].length <= 0)\r\n continue;\r\n\r\n var lineData = lines[i].split('\\t');\r\n cancerStudies[lineData[0]] = lineData;\r\n }\r\n callbackFunction(cancerStudies);\r\n }\r\n else if (request.readyState === XMLHttpRequest.DONE && request.status !== 200)\r\n {\r\n toast.error(\"Could not retrieve studies!\");\r\n }\r\n };\r\n request.open(\"GET\", CBioPortalAccessor.GET_ALL_CANCER_STUDIES_URL);\r\n request.send();\r\n };\r\n\r\n /**\r\n * Retrieves all genetic profiles for given cancerStudy from cBioPortal\r\n */\r\n getSupportedGeneticProfiles(cancerStudy, callbackFunction)\r\n {\r\n var outData = {};\r\n var request = new XMLHttpRequest();\r\n var self = this;\r\n request.onreadystatechange = function ()\r\n {\r\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\r\n {\r\n // By lines\r\n // Match all new line character representations\r\n var seperator = /\\r?\\n|\\r/;\r\n var lines = request.responseText.split(seperator);\r\n\r\n // start from first line skip node meta data\r\n for(var i = 1; i < lines.length; i++)\r\n {\r\n if (lines[i].length <= 0)\r\n continue;\r\n\r\n var lineData = lines[i].split('\\t');\r\n var cancerProfileName = lineData[0];\r\n if(self.isSupportedCancerProfile(cancerProfileName))\r\n {\r\n outData[cancerProfileName] = lineData;\r\n }\r\n }\r\n\r\n callbackFunction(outData);\r\n }\r\n else if (request.readyState === XMLHttpRequest.DONE && request.status !== 200)\r\n {\r\n console.error(\"Error retrieving studies\");\r\n }\r\n };\r\n request.open(\"GET\", CBioPortalAccessor.GET_GENETIC_PROFILES_URL + cancerStudy);\r\n request.send();\r\n };\r\n\r\n isSupportedCancerProfile(cancerProfileName: string)\r\n {\r\n return (cancerProfileName.endsWith(CBioPortalAccessor.MRNA_EXP_STUDY_NAME) ||\r\n cancerProfileName.endsWith(CBioPortalAccessor.CNA_EXP_STUDY_NAME) ||\r\n cancerProfileName.endsWith(CBioPortalAccessor.MUTATION_EXP_STUDY_NAME));\r\n };\r\n\r\n static getDataType(cancerProfileName: string)\r\n {\r\n if ( cancerProfileName.endsWith(this.MRNA_EXP_STUDY_NAME))\r\n {\r\n return this.GENE_EXPRESSION;\r\n }\r\n else if ( cancerProfileName.endsWith(this.CNA_EXP_STUDY_NAME))\r\n {\r\n return this.CNA;\r\n }\r\n else if ( cancerProfileName.endsWith(this.MUTATION_EXP_STUDY_NAME))\r\n {\r\n return this.MUTATION;\r\n }\r\n\r\n return \"\";\r\n }\r\n \r\n\r\n calcAlterationPercentages(paramLines, geneticProfileId, callbackFunction)\r\n {\r\n // By lines\r\n // Match all new line character representations\r\n const seperator = /\\r?\\n|\\r/;\r\n const lines = paramLines.split(seperator);\r\n let startIndex = 0;\r\n\r\n //Find starting index of actual data skip commented lines\r\n for (const i in lines)\r\n {\r\n if(!lines[i].startsWith('#'))\r\n {\r\n startIndex = parseInt(i);\r\n break;\r\n }\r\n }\r\n\r\n //Total number of tumor samples in the response\r\n const tumorSamples = lines[startIndex].split('\\t');\r\n const numOfTumorSamples = tumorSamples.length - 2;\r\n const outData: {} = {};\r\n outData[geneticProfileId] = {};\r\n\r\n const geneticProfileType = CBioPortalAccessor.getDataType(geneticProfileId);\r\n // skip meta line and iterate over tumor sample data\r\n for(let i = startIndex + 1; i < lines.length; i++)\r\n {\r\n if (lines[i].length <= 0)\r\n continue;\r\n\r\n //Iterate over samples for each gene to calculate profile data\r\n const lineData: string[] = lines[i].split('\\t');\r\n let profileDataAlteration = 0;\r\n for(let j = 2; j < lineData.length; j++)\r\n {\r\n if(lineData[j] !== 'NaN')\r\n {\r\n if( geneticProfileType === CBioPortalAccessor.MUTATION )\r\n profileDataAlteration++;\r\n else if ( (geneticProfileType === CBioPortalAccessor.CNA) \r\n && ( parseInt(lineData[j]) === CBioPortalAccessor.CNA_GAIN || parseInt(lineData[j]) === CBioPortalAccessor.CNA_DELETION ) ){\r\n profileDataAlteration++;\r\n }\r\n else if ( (geneticProfileType === CBioPortalAccessor.GENE_EXPRESSION) \r\n && (parseFloat(lineData[j]) >= CBioPortalAccessor.Z_SCORE_UPPER_THRESHOLD \r\n || parseFloat(lineData[j]) <= CBioPortalAccessor.Z_SCORE_LOWER_THRESHOLD)){\r\n profileDataAlteration++;\r\n }\r\n }\r\n }\r\n\r\n //\r\n outData[geneticProfileId][lineData[1]] = ( profileDataAlteration / numOfTumorSamples ) * 100;\r\n }\r\n\r\n callbackFunction(outData);\r\n }\r\n\r\n\r\n /*\r\n *\r\n * Retrieves profile data associated with the parameters below from cBioPortal\r\n * @params\r\n {\r\n caseSetId: \"gbm_tcga\",\r\n geneticProfileId: \"gbm_tcga_mutations\",\r\n genes: [\"BRCA1\", \"BRCA2\", \"TP53\"]\r\n }\r\n * */\r\n getProfileData(params, callbackFunction)\r\n {\r\n //params\r\n //caseSetId, geneticProfileId, genes\r\n\r\n const outData = {};\r\n const request = new XMLHttpRequest();\r\n const self = this;\r\n request.onreadystatechange = function ()\r\n {\r\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\r\n {\r\n self.calcAlterationPercentages(request.responseText, params.geneticProfileId, callbackFunction);\r\n toast.success(params.geneticProfileId + \" has been succesfully loaded from cBioPortal.\");\r\n }\r\n };\r\n\r\n //Create query URL\r\n let queryURL = CBioPortalAccessor.GET_PROFILE_DATA_URL;\r\n //Fetch sequenced case list !!\r\n queryURL += \"&case_set_id=\" + params.caseSetId + \"_sequenced\";\r\n queryURL += \"&genetic_profile_id=\" + params.geneticProfileId;\r\n queryURL += \"&gene_list=\";\r\n let isFirst = true;\r\n for(const gene of params.genes)\r\n {\r\n if(!isFirst){\r\n queryURL += \"+\";\r\n } else {\r\n isFirst = false;\r\n }\r\n queryURL += gene;\r\n \r\n }\r\n request.open(\"GET\", queryURL);\r\n request.send();\r\n };\r\n\r\n validateGenes(nodeSymbols, editor: EditorActionsManager)\r\n {\r\n const request = new XMLHttpRequest();\r\n const self = this;\r\n\r\n request.onreadystatechange = function ()\r\n {\r\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\r\n {\r\n const validGeneSymbols = JSON.parse(request.responseText);\r\n const validGeneArray = _.map(validGeneSymbols, function(object)\r\n {\r\n return object.hugoGeneSymbol;\r\n });\r\n editor.highlightInvalidGenes(validGeneArray);\r\n }\r\n };\r\n const queryURL = CBioPortalAccessor.VALIDATE_GENES_URL;\r\n request.open(\"POST\", queryURL);\r\n request.setRequestHeader(\"Content-type\", \"application/json\");\r\n request.send(JSON.stringify(nodeSymbols));\r\n }\r\n}\r\n","import autobind from \"autobind-decorator\";\r\nimport { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n FormControl,\r\n ListGroup,\r\n ListGroupItem,\r\n Modal,\r\n} from \"react-bootstrap\";\r\nimport { toast } from \"react-toastify\";\r\nimport { EModalType, IDataTypeMetaData } from \"../ui/react-pathway-mapper\";\r\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\r\n\r\ninterface IStudyModalProps {\r\n show: boolean;\r\n loadFromCBio: Function;\r\n handleClose: Function;\r\n}\r\n\r\n@observer\r\nexport default class StudyModal extends React.Component {\r\n @observable\r\n dataTypes: { [dataType: string]: IDataTypeMetaData } = {};\r\n\r\n @observable\r\n dataTypeFetchResultsReady: boolean = false;\r\n\r\n currentlySelectedItemIndex = -1;\r\n\r\n @observable\r\n selectedStudies: {\r\n data: any[];\r\n dataTypes: { [dataType: string]: IDataTypeMetaData };\r\n }[] = [];\r\n\r\n checkboxModalPosition: {\r\n bottom: number;\r\n } = {\r\n bottom: 0,\r\n };\r\n\r\n @observable\r\n selectedDataTypesPerStudy: string[] = [];\r\n\r\n @observable\r\n itemArray: any[] = [];\r\n\r\n @observable\r\n searchQuery: string = \"\";\r\n\r\n @observable\r\n showDataTypeSelectionModal = false;\r\n\r\n @observable\r\n studyListItemCheckboxChecked: boolean[] = [];\r\n\r\n @observable\r\n selectedStudyData: any[];\r\n\r\n @observable\r\n portalAccessor: CBioPortalAccessor;\r\n\r\n constructor(props: IStudyModalProps) {\r\n super(props);\r\n makeObservable(this);\r\n this.selectedStudyData = [];\r\n this.portalAccessor = new CBioPortalAccessor();\r\n this.fetchStudy();\r\n }\r\n\r\n @action.bound\r\n setDataTypeFetchResultsReady(ready: boolean) {\r\n this.dataTypeFetchResultsReady = ready;\r\n }\r\n\r\n @action.bound\r\n setItemArray(itemArray: any[]) {\r\n this.itemArray = itemArray;\r\n }\r\n\r\n @action.bound\r\n setSearchQuery(query: string) {\r\n this.searchQuery = query;\r\n }\r\n\r\n @action.bound\r\n setSelectedStudyData(data: any[]) {\r\n this.selectedStudyData = data;\r\n }\r\n\r\n @action.bound\r\n setDataTypeProperties(dataType: string, properties: IDataTypeMetaData) {\r\n this.dataTypes[dataType] = properties;\r\n }\r\n\r\n @action.bound\r\n initStudyListItemCheckboxChecked(studyCount: number) {\r\n this.studyListItemCheckboxChecked = Array(studyCount).fill(false);\r\n }\r\n\r\n @action.bound\r\n initSelectedDataTypesPerStudy(studyCount: number) {\r\n this.selectedDataTypesPerStudy = Array(studyCount).fill(\"\");\r\n }\r\n\r\n @action.bound\r\n toggleStudyListItemCheckboxChecked(studyIndex: number) {\r\n this.studyListItemCheckboxChecked[studyIndex] = !this\r\n .studyListItemCheckboxChecked[studyIndex];\r\n }\r\n\r\n @action.bound\r\n addSelectedStudy(selectedStudy: {\r\n data: any[];\r\n dataTypes: { [dataType: string]: IDataTypeMetaData };\r\n }) {\r\n this.selectedStudies.push(selectedStudy);\r\n }\r\n\r\n @action.bound\r\n removeSelectedStudy(selectedStudyData: any[]) {\r\n this.selectedStudies = this.selectedStudies.filter(\r\n (study) => study.data[0] != selectedStudyData[0]\r\n );\r\n }\r\n\r\n @action.bound\r\n clearSelectedStudies() {\r\n this.selectedStudies = [];\r\n }\r\n\r\n @action.bound\r\n setShowDataTypeSelectionModal(show: boolean) {\r\n this.showDataTypeSelectionModal = show;\r\n }\r\n\r\n @action.bound\r\n clearStudyCheckboxesChecked() {\r\n const length = this.studyListItemCheckboxChecked.length;\r\n this.studyListItemCheckboxChecked = Array(length).fill(false);\r\n }\r\n\r\n @action.bound\r\n clearSelectedDataTypesPerStudy() {\r\n const length = this.studyListItemCheckboxChecked.length;\r\n this.selectedDataTypesPerStudy = Array(length).fill(\"\");\r\n }\r\n\r\n @action.bound\r\n unselectDataTypesForStudy(index: number) {\r\n this.selectedDataTypesPerStudy[index] = \"\";\r\n }\r\n\r\n preparePortalAccess(studyId: string) {\r\n this.setDataTypeFetchResultsReady(false);\r\n this.portalAccessor.getSupportedGeneticProfiles(studyId, (data) => {\r\n this.disableAllDataTypes();\r\n // Iterate through profiles\r\n for (const profile of Object.keys(data)) {\r\n const type = CBioPortalAccessor.getDataType(profile);\r\n if (type !== \"\") {\r\n this.setDataTypeProperties(type, {\r\n ...this.dataTypes[type],\r\n enabled: true,\r\n profile: profile,\r\n });\r\n setTimeout(() => this.setDataTypeFetchResultsReady(true), 500);\r\n }\r\n }\r\n });\r\n }\r\n\r\n disableAllDataTypes() {\r\n for (const dataType of Object.keys(this.dataTypes)) {\r\n this.setDataTypeProperties(dataType, {\r\n enabled: false,\r\n checked: false,\r\n profile: undefined,\r\n });\r\n }\r\n }\r\n\r\n getSelectedStudiesCount(){\r\n let selectedStudiesCount = 0;\r\n for (const study of Object.values(this.selectedStudies))\r\n {\r\n for( const dataTypeOfStudy of Object.values( study.dataTypes ) ){\r\n selectedStudiesCount += dataTypeOfStudy.checked === true ? 1 : 0;\r\n }\r\n }\r\n return selectedStudiesCount;\r\n }\r\n\r\n getCheckedDatas( dataTypes: { [dataType: string]: IDataTypeMetaData }){\r\n let checkedDatasCount = 0;\r\n for( const dataTypee of Object.values( dataTypes ) ){\r\n checkedDatasCount += dataTypee.checked === true ? 1 : 0;\r\n }\r\n return checkedDatasCount;\r\n }\r\n\r\n\r\n fetchStudy() {\r\n this.portalAccessor.getDataTypes().forEach((dataType) => {\r\n this.setDataTypeProperties(dataType, {\r\n enabled: false,\r\n checked: false,\r\n profile: undefined,\r\n });\r\n });\r\n\r\n this.portalAccessor.fetchCancerStudies((cancerStudies: any) => {\r\n let temp = [];\r\n for (const studyTitle in cancerStudies) {\r\n if (!cancerStudies.hasOwnProperty(studyTitle)) {\r\n continue;\r\n }\r\n const studyData = cancerStudies[studyTitle];\r\n temp.push(studyData);\r\n }\r\n const numOfStudies = temp.length;\r\n this.initStudyListItemCheckboxChecked(numOfStudies);\r\n this.initSelectedDataTypesPerStudy(numOfStudies);\r\n\r\n this.setItemArray(temp);\r\n });\r\n }\r\n\r\n @autobind\r\n resetModal() {\r\n this.disableAllDataTypes();\r\n this.setSelectedStudyData([]);\r\n this.clearSelectedStudies();\r\n this.clearStudyCheckboxesChecked();\r\n this.clearSelectedDataTypesPerStudy();\r\n this.currentlySelectedItemIndex = -1;\r\n this.searchQuery = \"\";\r\n }\r\n\r\n @autobind\r\n handleCheckboxClick(dataType) {\r\n this.setDataTypeProperties(dataType, {\r\n ...this.dataTypes[dataType],\r\n checked: !this.dataTypes[dataType].checked,\r\n });\r\n }\r\n\r\n @computed\r\n get selectedStudyDataTitle() {\r\n if (this.selectedStudyData.length > 1) {\r\n return this.selectedStudyData[1] || \"Choose study\";\r\n } else {\r\n return \"Choose study\";\r\n }\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n {\r\n this.props.handleClose(EModalType.STUDY);\r\n this.resetModal();\r\n }}\r\n >\r\n \r\n Profile Data from cBioPortal\r\n \r\n \r\n \r\n

Select Cancer Study

\r\n
\r\n this.setSearchQuery(event.target.value)}\r\n />\r\n \r\n \r\n {this.itemArray.length < 1 ? (\r\n Fetching studies from cBioPortal...\r\n ) : (\r\n this.itemArray\r\n .map((item, index) => {\r\n return { item: item, index: index };\r\n })\r\n .filter((obj) =>\r\n obj.item[1]\r\n .toLowerCase()\r\n .includes(this.searchQuery.toLowerCase())\r\n )\r\n .map((obj) => {\r\n const item = obj.item;\r\n const index = obj.index;\r\n\r\n const studyTitle = item[1];\r\n const studyId = item[0];\r\n return (\r\n \r\n {\r\n const boundingRect = document\r\n .getElementById(\"listgroupitem\" + index)\r\n .getBoundingClientRect();\r\n const modalMargin = 30;\r\n this.checkboxModalPosition = {\r\n bottom: boundingRect.bottom - modalMargin,\r\n };\r\n this.setSelectedStudyData(item);\r\n this.preparePortalAccess(studyId);\r\n this.toggleStudyListItemCheckboxChecked(index);\r\n this.currentlySelectedItemIndex = index;\r\n\r\n if (this.studyListItemCheckboxChecked[index]) {\r\n this.setShowDataTypeSelectionModal(true);\r\n } else {\r\n this.removeSelectedStudy(item);\r\n this.unselectDataTypesForStudy(index);\r\n }\r\n }}\r\n >\r\n {studyTitle}\r\n \r\n {this.selectedDataTypesPerStudy[index] != \"\" && (\r\n \r\n {this.selectedDataTypesPerStudy[index]}\r\n \r\n )}\r\n \r\n );\r\n })\r\n )}\r\n \r\n \r\n
\r\n

\r\n Warning: At most six different data sets will be overlayed on the genes. You can toggle which ones are to be displayed via \"Alteration %\" {\">\"} \"View Settings\" menu.\r\n

\r\n
\r\n {\r\n this.setShowDataTypeSelectionModal(false);\r\n }}\r\n >\r\n \r\n {this.dataTypeFetchResultsReady === false ? (\r\n Fetching data types from cBioPortal...\r\n ) : (\r\n Object.keys(this.dataTypes).map((dataType: string) => {\r\n return (\r\n {\r\n this.handleCheckboxClick(dataType);\r\n }}\r\n checked={this.dataTypes[dataType].checked}\r\n >\r\n {dataType}\r\n \r\n );\r\n })\r\n )}\r\n \r\n \r\n {\r\n const currentDataTypes = { ...this.dataTypes };\r\n const selectedCount = Object.keys(currentDataTypes).filter(\r\n (dataType) => {\r\n return currentDataTypes[dataType].checked;\r\n }\r\n ).length;\r\n if (selectedCount == 0) {\r\n this.studyListItemCheckboxChecked[\r\n this.currentlySelectedItemIndex\r\n ] = false;\r\n }\r\n this.setShowDataTypeSelectionModal(false);\r\n }}\r\n >\r\n Cancel\r\n \r\n {\r\n const currentDataTypes = { ...this.dataTypes };\r\n this.addSelectedStudy({\r\n data: this.selectedStudyData,\r\n dataTypes: currentDataTypes,\r\n });\r\n this.selectedDataTypesPerStudy[\r\n this.currentlySelectedItemIndex\r\n ] = Object.keys(currentDataTypes)\r\n .filter((dataType) => {\r\n return currentDataTypes[dataType].checked;\r\n })\r\n .join(\", \");\r\n this.setShowDataTypeSelectionModal(false);\r\n }}\r\n >\r\n Add\r\n \r\n \r\n \r\n
\r\n\r\n \r\n {\r\n this.selectedStudies.forEach((study) => {\r\n this.props.loadFromCBio(study.dataTypes, study.data);\r\n });\r\n this.props.handleClose(EModalType.STUDY);\r\n this.resetModal();\r\n }}\r\n >\r\n Load Data\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import autobind from \"autobind-decorator\";\r\nimport { action, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from 'react';\r\nimport { Checkbox, DropdownButton, MenuItem } from \"react-bootstrap\";\r\nimport PathwayActions from '../utils/PathwayActions.js';\r\nimport { IPathwayMapperTable, PMParameters } from \"./react-pathway-mapper\";\r\n\r\ninterface IRankingProps{\r\n pathwayActions: PathwayActions;\r\n bestPathwaysAlgos: any[][];\r\n tableComponent: (data: IPathwayMapperTable[], selectedPathway: string, onPathwaySelect: (pathway: string) => void) => JSX.Element;\r\n patientView ?: boolean;\r\n currentPathway?: string;\r\n rankingChoices?: PMParameters;\r\n updateRankingChoices ?: (drowDownTitle : string, isAlterationEnabled: number, considerOnlyTCGAPanPathways : boolean, \r\n isPercentageMatch : number, selectedPathway : string) =>void;\r\n}\r\n\r\nconst TCGA_PANCAN_PATHWAY_NAMES = [\r\n \"Cell Cycle\", \r\n \"HIPPO\", \r\n \"MYC\",\r\n \"NOTCH\",\r\n \"NRF2\",\r\n \"PI3K\",\r\n \"RTK-RAS\",\r\n \"TGF-Beta\",\r\n \"TP53\",\r\n \"WNT\"\r\n];\r\n\r\n\r\n@observer\r\nexport default class Ranking extends React.Component{\r\n // @observable\r\n bestPathways: any[];\r\n\r\n // @observable\r\n shownPathways: any[];\r\n\r\n @observable\r\n dropDownTitle: string;\r\n\r\n @observable\r\n selectedPathway: string;\r\n isPercentageMatch: number;\r\n isAlterationEnabled: number;\r\n\r\n @observable\r\n considerOnlyTCGAPanPathways: boolean;\r\n\r\n @observable\r\n isExpanded: boolean;\r\n\r\n @observable\r\n rankingCriteria : number = 0;\r\n\r\n readonly COUNT_PERC_EXPLANATION = \"Whether we should favor the number of genes of interest matching the ones in a pathway or the percentage of such genes in that pathway. For instance, suppose genes of interest are A, B, and C, and the pathway contains genes B, C, D, and E. When we consider count, the score is 2 (for the two genes that match). However, when we consider percentage the score will be 50% as 2 of the 4 genes in the pathway are among genes of interest.\";\r\n readonly ALTERATION_EXPLANATION = \"When this is checked, each matching gene will not directly contribute to the score as 1 unit but with the alteration frequency percentage of that gene. For instance, suppose genes of interest are A, B, and C with alteration frequencies of 0.5, 0.2, and 0.3, respectively, and the pathway contains genes B, C, D, and E. When this is option isn't checked, the score will be 2 for match count and 50% for the match percentage. However, when this option is checked, the scores will be 0.2+0.3=0.5 and (0.2+0.3)/4=12.5% for match count and percentage, respectively.\";\r\n readonly TCGA_PANCAN_EXPLANATION = \"The pathways listed above were retrieved from PathwayMapper. When this option is checked, only the pathways under TCGA > PanCanAtlas will be shown. Uncheck to show all.\";\r\n\r\n constructor(props: IRankingProps){\r\n super(props);\r\n makeObservable(this);\r\n \r\n this.isPercentageMatch = (this.props.rankingChoices !== undefined ? this.props.rankingChoices.isPercentageMatch : 0 );\r\n this.isAlterationEnabled = (this.props.rankingChoices !== undefined ? this.props.rankingChoices.isAlterationEnabled : 0 );\r\n this.considerOnlyTCGAPanPathways = (this.props.rankingChoices !== undefined ? this.props.rankingChoices.considerOnlyTCGAPanPathways : true );\r\n this.dropDownTitle = (this.props.rankingChoices !== undefined ? this.props.rankingChoices.dropDownTitle : \"Match count\" );\r\n this.isExpanded = false;\r\n this.onApplyClick();\r\n if( this.props.currentPathway !== undefined && this.props.currentPathway.length > 0){\r\n this.selectedPathway = this.props.currentPathway;\r\n }\r\n else {\r\n this.selectedPathway = this.shownPathways[0].pathwayName;\r\n }\r\n }\r\n\r\n @autobind \r\n updateRankingChoices(){\r\n if( this.props.updateRankingChoices !== undefined){\r\n this.props.updateRankingChoices(this.dropDownTitle, this.isAlterationEnabled, this.considerOnlyTCGAPanPathways, this.isPercentageMatch, this.selectedPathway);\r\n }\r\n };\r\n\r\n @autobind\r\n setBestPathwayMethod(i: number){\r\n this.bestPathways = this.props.bestPathwaysAlgos[i];\r\n this.filterBestPathwaysByTCGAPanPathways();\r\n }\r\n\r\n @autobind\r\n onPathwayClick(pathway: string){\r\n this.selectedPathway = pathway;\r\n this.updateRankingChoices();\r\n this.props.pathwayActions.changePathway(this.selectedPathway);\r\n }\r\n\r\n @autobind\r\n onApplyClick(){\r\n // Mapping from dropdown + checkbox selection to pathway method.\r\n this.setBestPathwayMethod(2 * this.isAlterationEnabled + this.isPercentageMatch);\r\n this.rankingCriteria = 2 * this.isAlterationEnabled + this.isPercentageMatch;\r\n }\r\n\r\n @action.bound \r\n filterBestPathwaysByTCGAPanPathways() {\r\n this.shownPathways = this.bestPathways.filter((data: any) => {\r\n if (this.considerOnlyTCGAPanPathways) {\r\n return TCGA_PANCAN_PATHWAY_NAMES.indexOf(data.pathwayName) > -1;\r\n }\r\n return true;\r\n });\r\n // change selected pathway if we are filtered and doesn't exist\r\n if (this.considerOnlyTCGAPanPathways \r\n && TCGA_PANCAN_PATHWAY_NAMES.indexOf(this.selectedPathway) < 0) {\r\n this.selectedPathway = this.shownPathways[0].pathwayName;\r\n this.props.pathwayActions.changePathway(this.selectedPathway);\r\n }\r\n }\r\n\r\n @action.bound\r\n toggleConsiderOnlyTCGAPanPathways() {\r\n this.considerOnlyTCGAPanPathways = !this.considerOnlyTCGAPanPathways;\r\n this.updateRankingChoices();\r\n this.filterBestPathwaysByTCGAPanPathways();\r\n }\r\n\r\n\r\n componentDidMount(): void {\r\n this.props.pathwayActions.changePathway(this.selectedPathway);\r\n }\r\n\r\n render(){\r\n const lengthThreshold = 13;\r\n this.setBestPathwayMethod(this.rankingCriteria);\r\n \r\n return (\r\n
\r\n\r\n {/*\r\n
\r\n  Pathways\r\n
*/}\r\n\r\n { this.props.tableComponent &&\r\n this.props.tableComponent(\r\n this.shownPathways.map((data: any) => ({\r\n name: data.pathwayName, score: data.score, genes: data.genesMatched\r\n })),\r\n this.selectedPathway,\r\n this.onPathwayClick)\r\n }\r\n {\r\n
\r\n \r\n Show TCGA PanCancer Atlas pathways only  \r\n \r\n \r\n \r\n
\r\n }\r\n {(!this.props.patientView &&\r\n
\r\n {\r\n
\r\n \r\n  Ranking options\r\n \r\n
\r\n }\r\n
\r\n \r\n {this.isPercentageMatch = 0; this.dropDownTitle = \"Match count\"; this.onApplyClick(); this.updateRankingChoices();} }>Match count\r\n {this.isPercentageMatch = 1; this.dropDownTitle = \"Match percentage\"; this.onApplyClick(); this.updateRankingChoices();}}>Match percentage\r\n \r\n   \r\n
\r\n\r\n {this.isAlterationEnabled = (this.isAlterationEnabled === 1) ? 0 : 1; this.onApplyClick(); this.updateRankingChoices();}}\r\n style={{fontSize: \"13px\", marginTop: \"18px\", bottom: \"4px\"}} checked = {this.isAlterationEnabled === 1}>\r\n Consider alteration frequency  \r\n \r\n \r\n
\r\n
\r\n )}\r\n
\r\n \r\n );\r\n \r\n }\r\n\r\n \r\n}\r\n","import { makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from 'react';\r\n// @ts-ignore\r\nimport openImage from \"../images/toolbar/edit.svg\";\r\n// @ts-ignore\r\nimport layoutImage from \"../images/toolbar/layout-cose.svg\";\r\n// @ts-ignore\r\nimport savePNGImage from \"../images/toolbar/save_png.svg\";\r\n// @ts-ignore\r\nimport saveSVGImage from \"../images/toolbar/save_svg.svg\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport { EModalType, IAlterationData, IPathwayMapperTable } from '../ui/react-pathway-mapper';\r\nimport PathwayActions from '../utils/PathwayActions';\r\n// @ts-ignore\r\nconst addSelImage = require(\"../images/toolbar/add-selected.svg\");\r\n// @ts-ignore\r\nconst addAllImage = require(\"../images/toolbar/add-all.svg\");\r\n// @ts-ignore\r\nconst aboutImage = require(\"../images/toolbar/about.svg\");\r\n\r\ninterface IToolbarProps {\r\n pathwayActions: PathwayActions;\r\n selectedPathway: string;\r\n alterationData: IAlterationData;\r\n handleOpen: (modalId: number) => void;\r\n genes: any[];\r\n validGenes: any;\r\n showMessage: (message: string) => void;\r\n pathwayGenes: string[];\r\n onAddGenes: (selectedGenes: string[]) => void;\r\n patientView ?: boolean;\r\n genesSelectionComponent?: () => JSX.Element;\r\n groupComparisonView?: boolean;\r\n}\r\n\r\n@observer\r\nexport default class Toolbar extends React.Component{\r\n\r\n @observable\r\n selectedGenes: string[];\r\n\r\n @observable\r\n private editor: EditorActionsManager;\r\n constructor(props: IToolbarProps){\r\n super(props);\r\n makeObservable(this);\r\n\r\n this.selectedGenes = [];\r\n }\r\n \r\n render(){\r\n\r\n const studyQuery = \"q=\" + JSON.stringify(this.props.alterationData) + \"&g=\" + this.props.genes.map(gene => gene.hugoGeneSymbol).join(\"+\");\r\n return (\r\n
\r\n {this.props.pathwayActions.saveAs(\"PNG\");}}/>\r\n\r\n {this.props.pathwayActions.saveAs(\"SVG\");}}/>\r\n\r\n \r\n {(!this.props.patientView && !this.props.groupComparisonView && [\r\n {\r\n this.selectedGenes = this.props.pathwayActions.getSelectedNodes()\r\n .filter((node: any) => node.data().type === \"GENE\")\r\n .map((node: any) => node.data().name as string);\r\n\t const noneGeneList = this.props.pathwayActions.getSelectedNodes()\r\n .filter((node: any) => node.data().type !== \"GENE\")\r\n .map((node: any) => node.data().name as string);\r\n const invalidGenes: string[] = [];\r\n\t let message = \"\";\r\n if(noneGeneList.length > 0){\r\n message += \"Selection contains nodes that are not genes: \" + noneGeneList.join(', ') + \". \";\r\n }\r\n\r\n this.selectedGenes.forEach((gene: string) => {\r\n if(!this.props.validGenes.hasOwnProperty(gene)){\r\n invalidGenes.push(gene);\r\n }\r\n });\r\n\r\n if(invalidGenes.length === 0){\r\n\r\n if(this.selectedGenes.length > 0 && noneGeneList.length === 0){\r\n this.props.onAddGenes(this.selectedGenes);\r\n }\r\n } else {\r\n\t message += \"Following gene symbols are invalid or already in gene list: \" + invalidGenes.join(\", \") + \".\";\r\n }\r\n\r\n\t if(message.length > 0) {\r\n\t this.props.showMessage(message);\r\n\t }\r\n }}/>\r\n ,\r\n \r\n {\r\n\r\n this.selectedGenes = this.props.pathwayGenes.filter((gene: string) => {\r\n return this.props.validGenes.hasOwnProperty(gene);\r\n });\r\n \r\n if(this.selectedGenes.length > 0){\r\n this.props.onAddGenes(this.selectedGenes);\r\n }\r\n }}/>,\r\n \r\n\r\n !this.props.groupComparisonView && {{window.open(\"http://pathwaymapper.org/?pathwayName=\" + this.props.selectedPathway +\"&\"+ studyQuery )}}}/>\r\n ])}\r\n {this.props.handleOpen(EModalType.CHELP); }}/>\r\n { this.props.genesSelectionComponent && this.props.genesSelectionComponent()}\r\n
);\r\n }\r\n}\r\n","import autobind from \"autobind-decorator\";\r\nimport { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { toast } from \"react-toastify\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport FileOperationsManager, {\r\n IPathwayInfo\r\n} from \"../managers/FileOperationsManager\";\r\nimport GridOptionsManager from \"../managers/GridOptionsManager\";\r\nimport ViewOperationsManager from \"../managers/ViewOperationsManager\";\r\nimport ConfirmationModal from \"../modals/ConfirmationModal\";\r\nimport { EGridType } from \"../modals/GridSettings\";\r\nimport { ILayoutProperties } from \"../modals/LayoutProperties\";\r\nimport {\r\n EModalType, IPathwayData, IProfileMetaData\r\n} from \"../ui/react-pathway-mapper\";\r\nimport SaveLoadUtility from \"./SaveLoadUtility\";\r\n\r\nexport default class PathwayActions {\r\n @observable\r\n selectedPathway: string;\r\n fileManager: FileOperationsManager;\r\n editor: EditorActionsManager;\r\n undoRedoManager: any;\r\n pathwayHandler: (pathwayName: string) => void;\r\n handleOpen: (modalId: EModalType) => void;\r\n eh: any;\r\n profiles: IProfileMetaData[];\r\n gridOptionsManager: GridOptionsManager;\r\n\r\n uploader: any;\r\n merger: any;\r\n isCBioPortal: boolean;\r\n isCollaborative: boolean;\r\n viewOperationsManager: ViewOperationsManager;\r\n overlayUploader: any;\r\n\r\n @observable\r\n enabledType: EGridType;\r\n\r\n private updatePathwayTitle :(string) => void;\r\n\r\n constructor(\r\n pathwayHandler: (pathwayName: string) => void,\r\n profiles: IProfileMetaData[],\r\n fileManager: FileOperationsManager,\r\n handleOpen: (modalId: EModalType) => void,\r\n isCBioPortal: boolean,\r\n isCollaborative: boolean\r\n ) {\r\n makeObservable(this);\r\n this.pathwayHandler = pathwayHandler;\r\n this.profiles = profiles;\r\n this.fileManager = fileManager;\r\n this.handleOpen = handleOpen;\r\n this.isCBioPortal = isCBioPortal;\r\n this.isCollaborative = isCollaborative;\r\n this.enabledType = EGridType.NONE;\r\n }\r\n\r\n @action.bound\r\n addProfile(profile: IProfileMetaData) {\r\n this.profiles.push(profile);\r\n }\r\n\r\n @action.bound\r\n clearProfiles() {\r\n this.profiles.length = 0;\r\n }\r\n\r\n emphasizeQueryGenes(queryGenes: string[]) {\r\n if (this.editor)\r\n this.editor.cy.nodes().forEach((node: any) => {\r\n const nodeName = node.data().name;\r\n const nodeType = node.data().type;\r\n if (queryGenes.includes(nodeName) && nodeType === \"GENE\") {\r\n node.style({ \"border-width\": \"4px\", \"font-weight\": \"bold\" });\r\n }\r\n else{\r\n node.style({\"border-width\": \"2px\", \"font-weight\": \"normal\"});\r\n }\r\n });\r\n }\r\n\r\n getSelectedNodes() {\r\n return this.editor.cy.nodes(\":selected\");\r\n }\r\n\r\n setLayoutProperties(layoutProperties: ILayoutProperties) {\r\n this.editor.saveLayoutProperties(layoutProperties);\r\n }\r\n\r\n doesCyHaveElements() {\r\n return this.editor.cy.elements().length > 0;\r\n }\r\n\r\n @autobind\r\n toggleGrid(isEnabled: boolean) {\r\n this.gridOptionsManager.setSnapToGuidelines(false);\r\n this.gridOptionsManager.setShowGrid(isEnabled);\r\n }\r\n\r\n @autobind\r\n toggleGuide(isEnabled: boolean) {\r\n this.gridOptionsManager.setSnapToGuidelines(isEnabled);\r\n this.gridOptionsManager.setShowGrid(false);\r\n }\r\n\r\n adjustGridSettings(gridSize: number, color: string) {\r\n this.gridOptionsManager.currentProperties.gridSpacing = gridSize;\r\n this.gridOptionsManager.currentProperties.guidelinesStyle.strokeStyle = color;\r\n this.gridOptionsManager.currentProperties.guidelinesStyle.horizontalDistColor = color;\r\n this.gridOptionsManager.currentProperties.guidelinesStyle.verticalDistColor = color;\r\n }\r\n\r\n @autobind\r\n resizeToContent() {\r\n this.editor.resizeNodesToContent(this.editor.cy.nodes());\r\n }\r\n\r\n @autobind\r\n align(param: string) {\r\n this.viewOperationsManager.handleNodeAlignment(param);\r\n }\r\n\r\n @autobind\r\n onChangeFile(e: any, isMerge: boolean) {\r\n const file = e.target.files[0] as File;\r\n this.processFile(file, isMerge);\r\n //Can't load the same file twice in a row without this\r\n e.target.value = \"\";\r\n }\r\n\r\n uploadOverlay() {\r\n this.overlayUploader.click();\r\n }\r\n\r\n overlayFromText(file: File) {\r\n // Create a new FormData object.\r\n const formData = new FormData();\r\n formData.append(\"graphFile\", file);\r\n const request = new XMLHttpRequest();\r\n request.onreadystatechange = () => {\r\n if (\r\n request.readyState === XMLHttpRequest.DONE &&\r\n request.status === 200\r\n ) {\r\n const linesOfData = request.responseText.split(\"\\n\");\r\n if (linesOfData.length > 0) {\r\n const profileIdsFromFile = linesOfData[0].split(\"\\t\").slice(1);\r\n profileIdsFromFile.forEach(id =>\r\n this.addProfile({ profileId: id, enabled: true })\r\n );\r\n } else {\r\n console.log(\"Error: No valid data\");\r\n }\r\n this.editor.addGenomicData(request.responseText);\r\n }\r\n };\r\n request.open(\"POST\", \"/loadGraph\");\r\n request.send(formData);\r\n }\r\n\r\n @autobind\r\n upload() {\r\n if (this.editor.cy.elements().length > 0) {\r\n this.handleOpen(EModalType.CONFIRMATION);\r\n ConfirmationModal.pendingFunction = () => {\r\n this.uploader.click();\r\n };\r\n } else {\r\n this.uploader.click();\r\n }\r\n }\r\n\r\n @autobind\r\n merge() {\r\n this.merger.click();\r\n }\r\n\r\n setOverlayUploader(inputRef: any) {\r\n this.overlayUploader = inputRef;\r\n }\r\n\r\n @autobind\r\n setUploaders(inputRef: any, isMerge: boolean) {\r\n if (isMerge) this.merger = inputRef;\r\n else this.uploader = inputRef;\r\n }\r\n\r\n @computed\r\n get getPathwayInfo() {\r\n return this.fileManager.getPathwayInfo;\r\n }\r\n\r\n @autobind\r\n setPathwayInfo(other: IPathwayInfo) {\r\n this.fileManager.setPathwayInfo(other);\r\n }\r\n\r\n @autobind\r\n undo() {\r\n this.undoRedoManager.undo();\r\n }\r\n\r\n @autobind\r\n redo() {\r\n this.undoRedoManager.redo();\r\n }\r\n\r\n @autobind\r\n export(isSIFNX: boolean) {\r\n //this.editor.cy.remove('.eh-handle');\r\n this.eh.hide();\r\n this.fileManager.saveGraph(isSIFNX, this.editor);\r\n }\r\n\r\n @autobind\r\n resetUndoStack() {\r\n this.undoRedoManager.reset();\r\n }\r\n\r\n @autobind\r\n newPathway() {\r\n const commitNewPathway = () => {\r\n this.editor.removeAllElements();\r\n this.fileManager.setPathwayInfo({\r\n pathwayTitle: \"New Pathway\",\r\n pathwayDetails: \"\"\r\n });\r\n //this.removeAllData()\r\n this.resetUndoStack();\r\n this.pathwayHandler(\"Dummy\");\r\n };\r\n\r\n if (this.editor.cy.elements().length > 0) {\r\n this.handleOpen(EModalType.CONFIRMATION);\r\n ConfirmationModal.pendingFunction = commitNewPathway;\r\n } else {\r\n commitNewPathway();\r\n }\r\n }\r\n\r\nchangePathwayTitle(pathwayTitle : string){\r\n this.updatePathwayTitle( pathwayTitle);\r\n}\r\n\r\n @autobind\r\n changePathway(pathwayName: string) {\r\n this.pathwayHandler(pathwayName);\r\n if (!this.isCBioPortal) {\r\n this.fileManager.setPathwayInfo({\r\n pathwayTitle: pathwayName,\r\n pathwayDetails: \"\",\r\n });\r\n // At the beginning changePathway is called editor is not ready hence removeData shall not be called\r\n if (this.editor) {\r\n //this.removeAllData()\r\n this.resetUndoStack();\r\n }\r\n }\r\n }\r\n\r\n @autobind\r\n highlightNeighbours() {\r\n this.editor.highlightNeighbors();\r\n }\r\n\r\n @autobind\r\n highlightSelected() {\r\n this.editor.highlightSelected();\r\n }\r\n\r\n @autobind\r\n validateGenes() {\r\n this.editor.validateGenes();\r\n }\r\n\r\n @autobind\r\n showAll() {\r\n this.editor.showAllNodes();\r\n }\r\n\r\n @autobind\r\n hideSelected() {\r\n this.editor.hideSelectedNodes();\r\n }\r\n\r\n @autobind\r\n deleteSelected() {\r\n const selectedEles = this.editor.cy.elements(\":selected\");\r\n this.editor.removeElement(selectedEles);\r\n }\r\n\r\n @autobind\r\n addEdge(edgeTypeIndex: number) {\r\n // @ts-ignore\r\n window.edgeAddingMode = edgeTypeIndex + 1;\r\n if (edgeTypeIndex === -1) {\r\n this.eh.disable();\r\n this.eh.hide();\r\n return;\r\n } else {\r\n // @ts-ignore\r\n this.eh.enable();\r\n }\r\n }\r\n\r\n @autobind\r\n changeNodeName(oldName: string, newName: string) {\r\n const cyNode = this.editor.cy.$('[name=\"' + oldName + '\"]')[0];\r\n this.editor.changeName(cyNode, newName);\r\n }\r\n\r\n @autobind\r\n addNode(nodeType) {\r\n const nodeData = {\r\n type: nodeType.toUpperCase(),\r\n name: \"New \" + nodeType,\r\n w: \"150\",\r\n h: \"52\"\r\n };\r\n const extent = this.editor.cy.extent();\r\n const posData = {\r\n x: (extent.x1 + extent.x2) / 2,\r\n y: (extent.y1 + extent.y2) / 2\r\n };\r\n\r\n this.editor.addNode(nodeData, posData);\r\n this.pathwayHandler(\"Additional Pathway\");\r\n }\r\n\r\n @autobind\r\n searchGene(geneName: string) {\r\n const selector = \"node[name @*= '\" + geneName + \"']\";\r\n const nodesContainingSearchedGene = this.editor.cy.filter(selector);\r\n let nodesToSelect = this.editor.cy.collection();\r\n nodesContainingSearchedGene.forEach(function(ele, index) {\r\n if (\r\n !ele.hasClass(\"highlightedNode\") &&\r\n !ele.hasClass(\"invalidGeneHighlight\")\r\n )\r\n nodesToSelect = nodesToSelect.union(ele);\r\n });\r\n this.editor.highlightBySearch(nodesToSelect);\r\n }\r\n\r\n @autobind\r\n removeAllData() {\r\n this.editor.removeGenomicData();\r\n this.clearProfiles();\r\n }\r\n\r\n @autobind\r\n removeAllHighlight() {\r\n this.editor.removeAllHighlight();\r\n }\r\n\r\n @autobind\r\n processFile(file: File, isMerge: boolean) {\r\n // Create a new FormData object.\r\n const formData = new FormData();\r\n formData.append(\"graphFile\", file);\r\n const request = new XMLHttpRequest();\r\n request.onreadystatechange = () => {\r\n if (request.readyState === XMLHttpRequest.DONE) {\r\n if (request.status === 200) {\r\n const pathwayData: IPathwayData = SaveLoadUtility.parseGraph(\r\n request.responseText,\r\n false\r\n );\r\n\r\n if (isMerge) {\r\n this.editor.mergeGraph(pathwayData.nodes, pathwayData.edges);\r\n const graphJSON = this.editor.cy.json();\r\n\r\n //TODO change file name maybe, probabyly not necessary ?\r\n // Pathway nodes and edges are now combination of both previous and new pathway.\r\n pathwayData.nodes = graphJSON.elements.nodes; //this.editor.cy.nodes().map((node) => ({data: node.data()}));\r\n pathwayData.edges = graphJSON.elements.edges; //this.editor.cy.edges().map((edge) => ({data: edge.data()}));\r\n pathwayData.title = \"Additional Pathway\";\r\n } else {\r\n this.editor.loadFile(pathwayData.nodes, pathwayData.edges);\r\n this.fileManager.setPathwayInfo({\r\n pathwayTitle: pathwayData.title,\r\n pathwayDetails: pathwayData.description\r\n });\r\n }\r\n\r\n this.pathwayHandler(pathwayData.title + \"_imported\");\r\n this.resetUndoStack();\r\n } else {\r\n console.error(\r\n \"Error processing file: \" +\r\n request.readyState +\r\n request.responseText\r\n );\r\n }\r\n }\r\n };\r\n request.open(\"POST\", \"/loadGraph\");\r\n request.send(formData);\r\n }\r\n\r\n @autobind\r\n saveAs(type: string) {\r\n if (type === \"SVG\") {\r\n this.fileManager.saveAsSVG(this.editor);\r\n } else if (type === \"PNG\") {\r\n this.fileManager.saveAsPNG(this.editor.cy);\r\n } else if (type === \"JPEG\") {\r\n this.fileManager.saveAsJPEG(this.editor.cy);\r\n }\r\n }\r\n\r\n @autobind\r\n editorHandler(\r\n editor,\r\n eh,\r\n undoRedoManager,\r\n viewOperationsManager: ViewOperationsManager,\r\n gridOptionsManager: GridOptionsManager\r\n ) {\r\n this.editor = editor;\r\n this.eh = eh;\r\n this.undoRedoManager = undoRedoManager;\r\n this.viewOperationsManager = viewOperationsManager;\r\n this.gridOptionsManager = gridOptionsManager;\r\n }\r\n\r\n @autobind\r\n exists(profileId: string){\r\n\r\n let exists = false;\r\n this.profiles.forEach((profile: IProfileMetaData) => {\r\n if(profile.profileId === profileId){\r\n exists = true;\r\n }\r\n });\r\n\r\n return exists;\r\n }\r\n\r\n @autobind\r\n loadSampleData() {\r\n const data =\r\n \"gene\\tlung\\tovarian\\tbreast\\n\" +\r\n \"PTEN\\t-7\\t-20\\t10\\n\" +\r\n \"NF1\\t-12\\t-4\\t30\\n\" +\r\n \"PIK3CA\\t18\\t40\\t-50\\n\" +\r\n \"KRAS\\t11\\t-5\\t0\\n\" +\r\n \"ZIYA\\t0\\t-2\\t0\\n\" +\r\n \"AKT1\\t3\\t30\\t-10\\n\" +\r\n \"AKT2\\t6\\t-3\\t20\\n\" +\r\n \"AKT3\\t6\\t-3\\t20\\n\" +\r\n \"\\n\";\r\n\r\n if (this.exists(\"lung\") || this.exists(\"ovarian\") || this.exists(\"breast\")) {\r\n return;\r\n } \r\n\r\n this.editor.addGenomicData(data);\r\n\r\n if (!this.isCollaborative) {\r\n this.addProfile({ profileId: \"lung\", enabled: this.profiles.length < 6 ? true : false });\r\n this.addProfile({ profileId: \"ovarian\", enabled: this.profiles.length < 6 ? true : false });\r\n this.addProfile({ profileId: \"breast\", enabled: this.profiles.length < 6 ? true : false });\r\n }\r\n \r\n }\r\n\r\n @autobind\r\n performLayout() {\r\n this.editor.performLayout();\r\n }\r\n}\r\n","import { makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport { Button, ButtonGroup, ButtonToolbar, FormControl, FormGroup, Glyphicon, InputGroup, Navbar, Form} from \"react-bootstrap\";\r\n// @ts-ignore\r\nimport aboutSvg from '../images/toolbar/about.svg';\r\n// @ts-ignore\r\nimport ahbSvg from '../images/toolbar/align/align-horizontal-bottom.svg';\r\n// @ts-ignore\r\nimport ahmSvg from '../images/toolbar/align/align-horizontal-middle.svg';\r\n// @ts-ignore\r\nimport ahtSvg from '../images/toolbar/align/align-horizontal-top.svg';\r\n// @ts-ignore\r\nimport avcSvg from '../images/toolbar/align/align-vertical-center.svg';\r\n// @ts-ignore\r\nimport avlSvg from '../images/toolbar/align/align-vertical-left.svg';\r\n// @ts-ignore\r\nimport avrSvg from '../images/toolbar/align/align-vertical-right.svg';\r\n// @ts-ignore\r\nimport deleteSvg from '../images/toolbar/delete-simple.svg';\r\n// @ts-ignore\r\nimport gridSvg from '../images/toolbar/grid.svg';\r\n// @ts-ignore\r\nimport guideSvg from '../images/toolbar/guidelines.svg';\r\n// @ts-ignore\r\nimport hideSvg from '../images/toolbar/hide-selected.svg';\r\n// @ts-ignore\r\nimport layoutSvg from '../images/toolbar/layout-cose.svg';\r\n// @ts-ignore\r\nimport layoutPropSvg from '../images/toolbar/layout-properties.svg';\r\n// @ts-ignore\r\nimport loadSvg from '../images/toolbar/load.svg';\r\n// @ts-ignore\r\nimport newSvg from '../images/toolbar/new.svg';\r\n// @ts-ignore\r\nimport portalSvg from '../images/toolbar/portal.svg';\r\n// @ts-ignore\r\nimport helpSvg from '../images/toolbar/quick-help.svg';\r\n// @ts-ignore\r\nimport redoSvg from '../images/toolbar/redo.svg';\r\n// @ts-ignore\r\nimport saveSvg from '../images/toolbar/save.svg';\r\n// @ts-ignore\r\nimport setingsSvg from '../images/toolbar/settings.svg';\r\n// @ts-ignore\r\nimport showSvg from '../images/toolbar/show-all.svg';\r\n// @ts-ignore\r\nimport undoSvg from '../images/toolbar/undo.svg';\r\nimport { EGridType } from \"../modals/GridSettings\";\r\nimport PathwayActions from \"../utils/PathwayActions\";\r\nimport { EModalType } from \"./react-pathway-mapper\";\r\n\r\n\r\ninterface IButtonbarProps {\r\n pathwayActions: PathwayActions;\r\n handleOpen: (modelId: EModalType) => void;\r\n}\r\n\r\ninterface ISVGFunction{\r\n svg: any;\r\n function: () => void;\r\n tooltip: string; \r\n isFocused?: boolean;\r\n}\r\n\r\n\r\n@observer\r\nexport default class Buttonbar extends React.Component{\r\n\r\n\r\n @observable\r\n private searchedGene: string;\r\n\r\n\r\n constructor(props: IButtonbarProps) {\r\n super(props);\r\n makeObservable(this);\r\n \r\n this.searchedGene = \"\";\r\n this.props.pathwayActions.enabledType = EGridType.NONE;\r\n }\r\n\r\n setEnabledType(newType: EGridType){\r\n if(newType === this.props.pathwayActions.enabledType){\r\n this.props.pathwayActions.enabledType = EGridType.NONE;\r\n } else {\r\n this.props.pathwayActions.enabledType = newType;\r\n }\r\n\r\n // Enabled type calculated\r\n\r\n if(this.props.pathwayActions.enabledType === EGridType.GRID){\r\n this.props.pathwayActions.toggleGrid(true);\r\n }\r\n else if(this.props.pathwayActions.enabledType === EGridType.GUIDE){\r\n this.props.pathwayActions.toggleGuide(true);\r\n } else {\r\n this.props.pathwayActions.toggleGrid(false); // This will disable both.\r\n }\r\n }\r\n render() {\r\n \r\n const fileFunctions: ISVGFunction[] = [\r\n {svg: newSvg, function: this.props.pathwayActions.newPathway, tooltip: \"New Pathway\"},\r\n {svg: loadSvg, function: this.props.pathwayActions.upload, tooltip: \"Import Pathway\" },\r\n {svg: saveSvg, function: () => {this.props.pathwayActions.export(false)}, tooltip: \"Export Pathway\"}];\r\n \r\n const modFunctions: ISVGFunction[] = [\r\n {svg: deleteSvg, function: this.props.pathwayActions.deleteSelected, tooltip: \"Delete Selected\"}];\r\n\r\n if(!this.props.pathwayActions.isCollaborative){\r\n modFunctions.push({svg: undoSvg, function: () => {this.props.pathwayActions.undo();}, tooltip: \"Undo\"},\r\n {svg: redoSvg, function: () => {this.props.pathwayActions.redo();}, tooltip: \"Redo\"});\r\n }\r\n const alignFunctions: ISVGFunction[] = [\r\n {svg: ahtSvg, function: () => {this.props.pathwayActions.align(\"hTop\");}, tooltip: \"Align Horizontal Top\"},\r\n {svg: ahmSvg, function: () => {this.props.pathwayActions.align(\"hMid\");}, tooltip: \"Align Horizontal Middle\"},\r\n {svg: ahbSvg, function: () => {this.props.pathwayActions.align(\"hBot\");}, tooltip: \"Align Horizontal Bottom\"},\r\n {svg: avlSvg, function: () => {this.props.pathwayActions.align(\"vLeft\");}, tooltip: \"Align Vertical Left\"},\r\n {svg: avcSvg, function: () => {this.props.pathwayActions.align(\"vCen\");}, tooltip: \"Align Vertical Center\"},\r\n {svg: avrSvg, function: () => {this.props.pathwayActions.align(\"vRight\");}, tooltip: \"Align Vertical Right\"}];\r\n \r\n const utilFunctions: ISVGFunction[] = [\r\n {isFocused: this.props.pathwayActions.enabledType === EGridType.GRID, svg: gridSvg, function: () => {this.setEnabledType(EGridType.GRID);}, tooltip: \"Enable Grid: Show and snap to grid\"},\r\n {isFocused: this.props.pathwayActions.enabledType === EGridType.GUIDE, svg: guideSvg, function: () => {this.setEnabledType(EGridType.GUIDE);}, tooltip: \"Enable Guidelines: Enable and snap to alignment guidelines\"}];\r\n\r\n const visibilityFunctions: ISVGFunction[] = [\r\n {svg: hideSvg, function: () => {this.props.pathwayActions.hideSelected();}, tooltip: \"Hide Selected\"},\r\n {svg: showSvg, function: () => {this.props.pathwayActions.showAll();}, tooltip: \"Show All\"}];\r\n\r\n const layoutFunctions: ISVGFunction[] = [\r\n {svg: layoutSvg, function: () => {this.props.pathwayActions.performLayout();}, tooltip: \"Perform Layout\"},\r\n {svg: layoutPropSvg, function: () => {this.props.handleOpen(EModalType.LAYOUT);}, tooltip: \"Layout Properties\"}];\r\n\r\n const portalFunctions: ISVGFunction[] = [\r\n {svg: portalSvg, function: () => {this.props.handleOpen(EModalType.STUDY);}, tooltip: \"Fetch Genomic Data From cBioPortal\"},\r\n {svg: setingsSvg, function: () => {this.props.handleOpen(EModalType.PROFILES);}, tooltip: \"Genomic Data Visibility Settings\"}];\r\n\r\n const infoFunctions: ISVGFunction[] = [\r\n {svg: helpSvg, function: () => {this.props.handleOpen(EModalType.HELP);}, tooltip: \"Quick Help\"},\r\n {svg: aboutSvg, function: () => {this.props.handleOpen(EModalType.ABOUT);}, tooltip: \"About\"}];\r\n \r\n const allFunctions = [fileFunctions, modFunctions, alignFunctions, utilFunctions, visibilityFunctions, portalFunctions, layoutFunctions, infoFunctions];\r\n\r\n \r\n return (\r\n \r\n \r\n { allFunctions.map((functions, index) =>\r\n \r\n { functions.map((svg: ISVGFunction, index) => \r\n (\r\n )\r\n )\r\n }\r\n )\r\n }\r\n \r\n \r\n \r\n { this.searchedGene = e.target.value;}}\r\n placeholder=\"Search Genes...\"\r\n onKeyPress={(e: any) => { if (e.key !== \"Enter\") return; this.props.pathwayActions.searchGene(this.searchedGene) }} />\r\n {this.props.pathwayActions.searchGene(this.searchedGene)}}\r\n style={{cursor: 'pointer'}}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n}\r\n","import { EModalType } from \"../ui/react-pathway-mapper\";\r\nimport EditorActionsManager from \"./EditorActionsManager\";\r\n\r\nexport default class ContextMenuManager {\r\n private cy: any;\r\n private editor: EditorActionsManager;\r\n private handleOpen: (modalId: EModalType) => void;\r\n private undoRedoManager: any;\r\n private isCollaborative: any;\r\n constructor(\r\n cy: any,\r\n editor: EditorActionsManager,\r\n handleOpen: (modalId: EModalType) => void,\r\n undoRedoManager: any,\r\n isCollaborative: boolean\r\n ) {\r\n this.cy = cy;\r\n this.editor = editor;\r\n this.handleOpen = handleOpen;\r\n this.undoRedoManager = undoRedoManager;\r\n this.isCollaborative = isCollaborative;\r\n this.init();\r\n }\r\n\r\n init() {\r\n const classRef = this;\r\n\r\n const ctxMenus = this.cy.scratch('cycontextmenus')\r\n ? this.cy.contextMenus('get')\r\n : this.cy.contextMenus();\r\n\r\n let menuItems = [\r\n {\r\n id: 'deleteSelected',\r\n content: 'Delete Selected',\r\n coreAsWell: true,\r\n onClickFunction: () => {\r\n const selectedEles = this.cy.elements(':selected');\r\n classRef.editor.removeElement(selectedEles);\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n {\r\n id: 'hideSelected',\r\n content: 'Hide Selected',\r\n coreAsWell: true,\r\n onClickFunction: function() {\r\n classRef.editor.hideSelectedNodes();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n {\r\n id: 'loadFromCBioPortal',\r\n content: 'Load From cBioPortal...',\r\n coreAsWell: true,\r\n onClickFunction: () => {\r\n this.handleOpen(EModalType.STUDY);\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n //Context menu items when clicking on nodes/compounds\r\n {\r\n id: 'remove',\r\n content: 'Delete',\r\n selector: 'node, edge',\r\n onClickFunction: function(event) {\r\n var ele = event.target;\r\n // The function to be executed on click\r\n var selectedElements = classRef.cy.nodes(':selected').union(ele);\r\n classRef.editor.removeElement(selectedElements);\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n coreAsWell: false,\r\n },\r\n {\r\n id: 'addSelected',\r\n content: 'Add Selected Into This',\r\n selector: 'node',\r\n onClickFunction: function(event) {\r\n var ele = event.target;\r\n var selectedNodes = classRef.cy.nodes(':selected');\r\n var containerType = ele.data('type');\r\n var validNodes = classRef.cy.collection();\r\n\r\n //Do nothing if node is GENE\r\n if (\r\n ele._private.data['type'] === 'GENE' ||\r\n selectedNodes.size() < 1\r\n ) {\r\n return;\r\n }\r\n //Prevent actions like adding root node to children & addition to itself\r\n else {\r\n var notValid = false;\r\n selectedNodes.forEach(function(tmpNode, i) {\r\n if (ele.id() == tmpNode.id()) {\r\n notValid = true;\r\n return false;\r\n }\r\n\r\n if (tmpNode.isParent()) {\r\n notValid = classRef.isChildren(tmpNode, ele);\r\n if (notValid) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (notValid) {\r\n return;\r\n }\r\n }\r\n\r\n let childsToBeRemoved = [];\r\n selectedNodes.forEach(function(tmpNode1) {\r\n selectedNodes.forEach(function(tmpNode2) {\r\n if (classRef.isChildren(tmpNode1, tmpNode2)) {\r\n childsToBeRemoved.push(tmpNode2);\r\n }\r\n });\r\n });\r\n\r\n childsToBeRemoved.forEach(function(tmpNode) {\r\n tmpNode.unselect();\r\n selectedNodes = selectedNodes.filter(function(element) {\r\n return element != tmpNode;\r\n });\r\n });\r\n\r\n selectedNodes.forEach(function(tmpNode, i) {\r\n if (containerType == \"FAMILY\" || containerType == \"COMPLEX\") {\r\n if (\r\n tmpNode.data('type') != \"COMPARTMENT\" &&\r\n tmpNode.data('type') != \"PROCESS\"\r\n ) {\r\n validNodes = validNodes.add(tmpNode);\r\n }\r\n } else {\r\n validNodes = validNodes.add(tmpNode);\r\n }\r\n });\r\n\r\n var compId = ele.id();\r\n classRef.editor.changeParents(validNodes, compId);\r\n //Unselecting nodes to remove them from selectedNodeStack\r\n selectedNodes.unselect();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n coreAsWell: false,\r\n },\r\n {\r\n id: 'removeSelected',\r\n content: 'Remove Selected From Parent',\r\n selector: 'node',\r\n onClickFunction: function(event) {\r\n const ele = event.target;\r\n const selectedNodes = classRef.cy.nodes(':selected');\r\n\r\n let notValid = false;\r\n selectedNodes.forEach(function(tmpNode, i) {\r\n if (tmpNode.isParent()) {\r\n notValid = classRef.isChildren(tmpNode, ele);\r\n if (notValid) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (notValid) {\r\n return;\r\n }\r\n\r\n classRef.editor.changeParents(selectedNodes, null);\r\n //Unselecting nodes to remove them from selectedNodeStack\r\n selectedNodes.unselect();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n coreAsWell: false,\r\n },\r\n {\r\n id: 'performLayout',\r\n content: 'Perform Layout',\r\n coreAsWell: true,\r\n onClickFunction: () => {\r\n this.editor.performLayout();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n ];\r\n let nonCollabItems = [\r\n //Context menu items when clicking on blank space\r\n {\r\n id: 'undoAction',\r\n content: 'Undo',\r\n coreAsWell: true,\r\n onClickFunction: () => {\r\n this.undoRedoManager.undo();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n {\r\n id: 'redoAction',\r\n content: 'Redo',\r\n coreAsWell: true,\r\n onClickFunction: () => {\r\n this.undoRedoManager.redo();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n ];\r\n\r\n if (!this.isCollaborative) {\r\n menuItems = menuItems.concat(nonCollabItems);\r\n }\r\n ctxMenus.appendMenuItems(menuItems);\r\n }\r\n\r\n //TODO better move this to another class\r\n //Utility function to check whether query node is children of given node\r\n isChildren(node, queryNode) {\r\n var parent = queryNode.parent()[0];\r\n while (parent) {\r\n if (parent.id() == node.id()) {\r\n return true;\r\n }\r\n parent = parent.parent()[0];\r\n }\r\n return false;\r\n }\r\n}\r\n","import tippy from 'tippy.js';\r\nimport 'tippy.js/dist/tippy.css'; // optional for styling\r\nimport EditorActionsManager from \"./EditorActionsManager\";\r\nexport default class QtipManager{\r\n private cy: any;\r\n private editor: any;\r\n constructor(cy: any, editor: EditorActionsManager)\r\n {\r\n this.cy = cy;\r\n this.editor = editor;\r\n }\r\n\r\n generateEdgeQtip(edge) {\r\n const self = this;\r\n const pubmedURL = 'https://www.ncbi.nlm.nih.gov/pubmed/';\r\n const pubmedData = edge.data('pubmedIDs');\r\n\r\n const wrapper = document.createElement('div');\r\n\r\n // header\r\n const header = document.createElement('div');\r\n header.classList.add('row', 'node-tooltip-header');\r\n header.innerHTML = \"INTERACTION DETAILS\";\r\n\r\n wrapper.append(header);\r\n\r\n // edge label input\r\n const textInputWrapper = document.createElement('div');\r\n textInputWrapper.classList.add('col-xs-6', 'inputCol');\r\n\r\n const inputElement = document.createElement('input');\r\n inputElement.type = 'text';\r\n inputElement.value = edge.data('name');\r\n inputElement.classList.add('form-control');\r\n\r\n inputElement.addEventListener(\"change\", function(event) {\r\n // @ts-ignore\r\n const value = event.target.value;\r\n self.editor.changeName(edge, value);\r\n });\r\n\r\n textInputWrapper.appendChild(inputElement);\r\n\r\n const edgeLabelRowElement = document.createElement('div');\r\n edgeLabelRowElement.classList.add('row', 'geneDetails');\r\n const colElement = document.createElement('div');\r\n colElement.classList.add('col-xs-6', 'qtipLabel');\r\n colElement.innerHTML = \"Label:\";\r\n\r\n edgeLabelRowElement.appendChild(colElement);\r\n edgeLabelRowElement.appendChild(textInputWrapper);\r\n\r\n wrapper.appendChild(edgeLabelRowElement);\r\n \r\n wrapper.appendChild(document.createElement('hr'));\r\n\r\n // pubmed id input\r\n const pubmedTextInputWrapper = document.createElement('div');\r\n pubmedTextInputWrapper.classList.add('col-xs-6', 'inputCol');\r\n\r\n const pubmedIdInputElement = document.createElement('input');\r\n pubmedIdInputElement.type = 'text';\r\n pubmedIdInputElement.classList.add('form-control');\r\n\r\n pubmedIdInputElement.addEventListener(\"change\", function(event) {\r\n // @ts-ignore\r\n const value = event.target.value;\r\n const pubmedIdsToAdd = value.split(';');\r\n \r\n // @ts-ignore\r\n event.target.value = \"\";\r\n\r\n self.editor.addPubmedIDs(edge, pubmedIdsToAdd);\r\n\r\n const pubmedIds = edge.data(\"pubmedIDs\")\r\n generatePubmedLinks(pubmedIds);\r\n });\r\n\r\n pubmedTextInputWrapper.appendChild(pubmedIdInputElement);\r\n\r\n const pubmedIdRowElement = document.createElement('div');\r\n pubmedIdRowElement.classList.add('row', 'geneDetails');\r\n const pubmedIdColElement = document.createElement('div');\r\n pubmedIdColElement.classList.add('col-xs-6', 'qtipLabel');\r\n pubmedIdColElement.innerHTML = \"Add Pubmed ID(s):\";\r\n\r\n pubmedIdRowElement.appendChild(pubmedIdColElement);\r\n pubmedIdRowElement.appendChild(pubmedTextInputWrapper);\r\n\r\n wrapper.appendChild(pubmedIdRowElement);\r\n\r\n if (pubmedData.length > 0) {\r\n generatePubmedLinks(pubmedData);\r\n }\r\n\r\n function generatePubmedLinks(argData) {\r\n if (document.getElementsByClassName(\"pubmedIDList\").length > 0) {\r\n document.getElementsByClassName(\"pubmedIDList\").item(0).remove();\r\n }\r\n const pubmedIdListWrapper = document.createElement('div');\r\n pubmedIdListWrapper.classList.add(\"pubmedIDList\");\r\n\r\n pubmedIdListWrapper.appendChild(document.createElement('hr'));\r\n\r\n const pubmedIdLabel = document.createElement('label');\r\n pubmedIdLabel.classList.add(\"col-xs-12\", \"pubmedIDLabel\");\r\n pubmedIdLabel.innerHTML = \"Pubmed IDs\";\r\n\r\n pubmedIdListWrapper.appendChild(pubmedIdLabel);\r\n\r\n for (var key in argData)\r\n {\r\n if(!argData.hasOwnProperty(key)){\r\n continue;\r\n }\r\n const pubmedId = argData[key];\r\n\r\n if (isNaN(pubmedId))\r\n continue;\r\n\r\n const pubmedIdListElement = document.createElement('div');\r\n\r\n const pubmedIdRemoveButton = document.createElement('i');\r\n pubmedIdRemoveButton.classList.add('fa', 'fa-times', 'qtipRemovePmedID');\r\n pubmedIdRemoveButton.setAttribute('aria-hidden', 'true');\r\n pubmedIdRemoveButton.setAttribute('pubmedId', pubmedId);\r\n\r\n pubmedIdRemoveButton.addEventListener(\"click\", function(event) {\r\n (event.target as HTMLElement).parentElement.remove();\r\n const pubmedId = (event.target as HTMLElement).getAttribute('pubmedId');\r\n self.editor.removePubmedID(edge, [pubmedId]);\r\n const pubmedIds = edge.data('pubmedIDs');\r\n if (pubmedIds.length === 0) {\r\n document.getElementsByClassName(\"pubmedIDList\").item(0).remove();\r\n }\r\n });\r\n \r\n const pubmedContent = document.createElement('div');\r\n const pubmedIdLabel = document.createElement('label');\r\n const pubmedIdLink = document.createElement('a');\r\n pubmedIdLink.setAttribute('target', '_blank');\r\n const pubmedLink = pubmedURL + pubmedId;\r\n pubmedIdLink.setAttribute('href', pubmedLink);\r\n pubmedIdLink.innerHTML = pubmedId.toString();\r\n\r\n pubmedIdLabel.appendChild(pubmedIdLink);\r\n pubmedContent.appendChild(pubmedIdLabel);\r\n pubmedContent.appendChild(pubmedIdRemoveButton);\r\n pubmedIdListElement.appendChild(pubmedContent);\r\n\r\n pubmedIdListWrapper.appendChild(pubmedIdListElement);\r\n }\r\n if (edge.data('pubmedIDs').length > 0) {\r\n wrapper.appendChild(pubmedIdListWrapper);\r\n }\r\n }\r\n\r\n wrapper.classList.add(\"tooltip-text-style\");\r\n return wrapper;\r\n }\r\n\r\n generateNodeQtip(node) {\r\n const self = this;\r\n\r\n const header = document.createElement('div');\r\n header.classList.add('row', 'node-tooltip-header');\r\n header.innerHTML = node.data('type').toUpperCase() + \" DETAILS\";\r\n\r\n const textInputWrapper = document.createElement('div');\r\n textInputWrapper.classList.add('col-xs-8', 'inputCol');\r\n\r\n const inputElement = document.createElement('input');\r\n inputElement.type = 'text';\r\n inputElement.value = node.data('name');\r\n inputElement.classList.add('form-control');\r\n\r\n inputElement.addEventListener(\"change\", function(event) {\r\n // @ts-ignore\r\n const value = event.target.value;\r\n self.editor.changeName(node, value);\r\n });\r\n\r\n textInputWrapper.appendChild(inputElement);\r\n\r\n const wrapper = document.createElement('div');\r\n const rowElement = document.createElement('div');\r\n rowElement.classList.add('row', 'geneDetails');\r\n const colElement = document.createElement('div');\r\n colElement.classList.add('col-xs-4', 'qtipLabel');\r\n colElement.innerHTML = \"Name:\";\r\n\r\n rowElement.appendChild(colElement);\r\n rowElement.appendChild(textInputWrapper);\r\n\r\n wrapper.append(header);\r\n wrapper.append(rowElement);\r\n\r\n if (node.data('type') === \"GENE\") {\r\n const buttonWrapper = document.createElement('div');\r\n buttonWrapper.classList.add('row', 'centerText', 'geneDetails');\r\n \r\n const button = document.createElement('button');\r\n button.type = 'button';\r\n button.classList.add('btn', 'btn-default');\r\n button.innerHTML = \"My Cancer Genome\";\r\n button.addEventListener(\"click\", function (event) {\r\n event.preventDefault();\r\n const name = node.data('name');\r\n window.open(\"https://www.mycancergenome.org/content/gene/\" + name);\r\n })\r\n\r\n buttonWrapper.append(button);\r\n wrapper.append(buttonWrapper)\r\n }\r\n\r\n wrapper.classList.add(\"tooltip-text-style\");\r\n return wrapper;\r\n }\r\n\r\n addQtipToElements(eles)\r\n {\r\n const self = this;\r\n eles.forEach(function(ele)\r\n {\r\n let ref = ele.popperRef();\r\n let dummyDomEle = document.createElement('div');\r\n document.body.appendChild(dummyDomEle);\r\n let tip = tippy(dummyDomEle, { // tippy props:\r\n getReferenceClientRect: ref.getBoundingClientRect, // https://atomiks.github.io/tippyjs/v6/all-props/#getreferenceclientrect\r\n trigger: 'manual', // mandatory, we cause the tippy to show programmatically.\r\n placement: 'bottom',\r\n interactive: true,\r\n theme: 'pathwaymapper',\r\n // your own custom props\r\n // content prop can be used when the target is a single element https://atomiks.github.io/tippyjs/v6/constructor/#prop\r\n content: () => {\r\n let content = ele.isNode() ? \r\n self.generateNodeQtip(ele) :\r\n self.generateEdgeQtip(ele);\r\n \r\n return content;\r\n },\r\n onHidden(instance) {\r\n instance.destroy();\r\n dummyDomEle.remove();\r\n }\r\n });\r\n \r\n self.cy.one(\"pan zoom\", function() {\r\n if (dummyDomEle && dummyDomEle[\"_tippy\"]) {\r\n tip.hide();\r\n }\r\n });\r\n\r\n ele.one(\"showqtipevent\", function() {\r\n tip.show();\r\n });\r\n });\r\n }\r\n\r\n\r\n //Utility Functions\r\n capitalizeFirstLetter(string)\r\n {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n }\r\n\r\n\r\n}\r\n","import cytoscape from 'cytoscape';\r\nimport $ from \"jquery\";\r\nimport 'jquery-ui-dist/jquery-ui';\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\n\r\n\r\nexport default class DragDropNodeAddPlugin {\r\n\r\n\r\n\r\n pathwayHandler: (pathwayName: string) => void;\r\n\r\n private cy: any;\r\n private editor: EditorActionsManager;\r\n\r\n constructor(editor: EditorActionsManager, cy: any, pathwayHandler: (pathwayName: string) => void)\r\n {\r\n this.editor = editor;\r\n this.cy = cy;\r\n this.pathwayHandler = pathwayHandler;\r\n this.initNodeAdd();\r\n }\r\n\r\n //TODO JQUERY IS IGNORED\r\n initNodeAdd()\r\n {\r\n var nodeAddClass = this;\r\n var defaults = {\r\n height: 30, //height of the icon container\r\n width: 30, //width of the icon container\r\n padding: 5, //padding of the icon container(from right & top)\r\n backgroundColorDiv: '#fbfbfb', //background color of the icon container\r\n borderColorDiv: '#fff', //border color of the icon container\r\n borderWidthDiv: '0px', //border width of the icon container\r\n borderRadiusDiv: '5px', //border radius of the icon container\r\n\r\n icon: '', //icon class name\r\n\r\n nodeParams: function(){\r\n // return element object to be passed to cy.add() for adding node\r\n return {};\r\n }\r\n };\r\n\r\n const self = this;\r\n\r\n // @ts-ignore\r\n $.fn.cytoscapeNodeadd = function(params: any) {\r\n var options = $.extend(true, {}, defaults, params);\r\n var fn = params;\r\n\r\n var functions = {\r\n destroy: function() {\r\n var $this = $(this);\r\n\r\n $this.find(\".ui-cytoscape-nodeadd\").remove();\r\n },\r\n init: function()\r\n {\r\n return $(this).each(function()\r\n {\r\n var components = options.components;\r\n for (const component of components)\r\n {\r\n var dragContainer = component.container;\r\n //var explanationText = component.explanationText;\r\n\r\n var $nodeadd = $('
');\r\n dragContainer.append($nodeadd);\r\n var $nodeDragHandle = $('
\\\r\n \\\r\n \\\r\n \\\r\n
');\r\n $nodeadd.append($nodeDragHandle);\r\n\r\n $nodeDragHandle.bind(\"mousedown\", function(e: any)\r\n {\r\n e.stopPropagation(); // don't trigger dragging of nodeadd\r\n e.preventDefault(); // don't cause text selection\r\n });\r\n\r\n //Setup UI\r\n dragContainer.find(\".ui-cytoscape-nodeadd-nodediv\").css({\r\n background: options.backgroundColorDiv,\r\n border: options.borderWidthDiv + ' solid ' + options.borderColorDiv,\r\n 'border-radius': options.borderRadiusDiv\r\n });\r\n\r\n //Init Draggable\r\n dragContainer.find(\"#ui-cytoscape-nodeadd-icon\").draggable({\r\n helper: \"clone\",\r\n cursor: \"pointer\"\r\n });\r\n }\r\n\r\n // @ts-ignore TODO: AMENDMENT ATTENTION\r\n var $container = $(this);\r\n //Init Droppable\r\n // @ts-ignore TODO: Droppable is ignored\r\n $container.droppable({\r\n activeClass: \"ui-state-highlight\",\r\n // accept: \"#ui-cytoscape-nodeadd-icon\",\r\n drop: function(event: any, ui: any) {\r\n $container.removeClass(\"ui-state-highlight\");\r\n\r\n var currentOffset = $container.offset();\r\n var relX = event.pageX - currentOffset.left;\r\n var relY = event.pageY - currentOffset.top;\r\n\r\n var nodeType = $(ui.helper).attr('nodeType').toUpperCase();\r\n\r\n var cy = nodeAddClass.cy;\r\n\r\n //Hold a map for parents and candidate parent nodes for this addition\r\n var nodeMap = {};\r\n var parentMap = {};\r\n //Loop through nodes for hit testing about drag position on canvas\r\n cy.nodes().forEach(function(node: any)\r\n {\r\n var nodeBbox = node.renderedBoundingBox();\r\n //Rectangle point test\r\n if ( (relX <= nodeBbox.x2 && relX >= nodeBbox.x1) && (relY <= nodeBbox.y2 && relY >= nodeBbox.y1) && node.data().type != 'GENE' )\r\n {\r\n //If node has a children put an entry to the parentMap\r\n if (node.children().length > 0)\r\n {\r\n parentMap[node.id()] = true;\r\n }\r\n\r\n //If parent of this node is already added to the node map remove it, since our candidate is in deeper level !\r\n if (parentMap[node._private.data.parent])\r\n {\r\n delete nodeMap[node._private.data.parent];\r\n }\r\n\r\n //Add an entry to node map\r\n nodeMap[node.id()] = node;\r\n }\r\n });\r\n\r\n //Check if any parent found, if so set parent field\r\n var parent = nodeMap[Object.keys(nodeMap)[0]];\r\n var nodeData = {w: \"0\", h: \"100\", parent: 0, type: nodeType, name:'New '+ $(ui.helper).attr('nodeType')};\r\n if (parent)\r\n {\r\n if(parent.data().type == \"FAMILY\" || parent.data().type == \"COMPLEX\")\r\n {\r\n if(nodeType != \"COMPARTMENT\" && nodeType != \"PROCESS\")\r\n {\r\n nodeData.parent = parent.id();\r\n }\r\n }\r\n else\r\n {\r\n nodeData.parent = parent.id();\r\n }\r\n }\r\n if (nodeType === \"PROCESS\") {\r\n nodeData.w = \"100\";\r\n nodeData.h = \"35\";\r\n }\r\n else {\r\n nodeData.w = \"150\";\r\n nodeData.h = \"52\";\r\n }\r\n\r\n //Adjust position according to the zoom level and pan !\r\n //To set rendered position !!!\r\n //TODO refactor this !\r\n relX = relX / cy.zoom() + cy.extent().x1;\r\n relY = relY / cy.zoom() + cy.extent().y1;\r\n nodeAddClass.editor.addNode(nodeData,{x: relX,y: relY});\r\n self.pathwayHandler(\"Additional Pathway\");\r\n\r\n }\r\n });\r\n\r\n });\r\n }\r\n };\r\n\r\n if (functions[fn]) {\r\n return functions[fn].apply(this, Array.prototype.slice.call(arguments, 1));\r\n } else if (typeof fn == 'object' || !fn) {\r\n return functions.init.apply(this, arguments);\r\n } else {\r\n $.error(\"No such function `\" + fn + \"` for jquery.cytoscapenodeadd\");\r\n }\r\n\r\n return $(this);\r\n };\r\n\r\n // @ts-ignore\r\n $.fn.cynodeadd = $.fn.cytoscapeNodeadd;\r\n try{\r\n /* Adding as an extension to the core functionality of cytoscape.js*/\r\n cytoscape('core', 'nodeadd', function(options: any) {\r\n\r\n // @ts-ignore\r\n $(this.container()).cytoscapeNodeadd(options);\r\n });\r\n } catch(err){\r\n console.log(err);\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n}\r\n","import autobind from \"autobind-decorator\";\r\nimport cytoscape from 'cytoscape';\r\nimport $ from \"jquery\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from 'react';\r\nimport pathways from \"../data/pathways.json\";\r\n// @ts-ignore\r\nimport compartmentImg from \"../images/nodes/compartment.svg\";\r\n// @ts-ignore\r\nimport complexImg from \"../images/nodes/complex.svg\";\r\n// @ts-ignore\r\nimport familyImg from \"../images/nodes/family.svg\";\r\n// @ts-ignore\r\nimport geneImg from \"../images/nodes/gene.svg\";\r\n// @ts-ignore\r\nimport processImg from \"../images/nodes/process.svg\";\r\n// @ts-ignore\r\nimport resizeCue from '../images/resizeCue.svg';\r\nimport ContextMenuManager from \"../managers/ContextMenuManager\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport QtipManager from \"../managers/QtipManager\";\r\nimport ShareDBManager from \"../managers/ShareDBManager\";\r\nimport ViewOperationsManager from \"../managers/ViewOperationsManager\";\r\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\r\nimport DragDropNodeAddPlugin from \"../utils/DragDropNodeAddPlugin\";\r\nimport SaveLoadUtility from \"../utils/SaveLoadUtility\";\r\nimport { ChatMessageMetaData, EModalType, IColorValueMap, IProfileMetaData } from './react-pathway-mapper';\r\n\r\n// @ts-ignore\r\nwindow.$ = $;\r\n\r\nconst edgeHandles = require('cytoscape-edgehandles');\r\nconst edgeEditing = require('cytoscape-edge-editing');\r\nconst fcose = require('cytoscape-fcose');\r\nconst nodeEditing = require('cytoscape-node-editing');\r\nconst undoRedo = require('cytoscape-undo-redo');\r\nconst panzoom = require('cytoscape-panzoom');\r\nconst styleSheet = require('../utils/GraphStyleSheet.tsx');\r\nconst panzoomOpts = require('../utils/PanzoomOptions.tsx');\r\nconst navigator = require('cytoscape-navigator');\r\nconst contextMenus = require('cytoscape-context-menus');\r\nconst konva = require('konva');\r\nconst viewUtilities = require('cytoscape-view-utilities');\r\nconst gridGuide = require('cytoscape-grid-guide');\r\nconst popper = require('cytoscape-popper');\r\nconst layoutUtilities = require('cytoscape-layout-utilities');\r\n\r\ntype PathwayMapperType = {\r\n isCollaborative: boolean;\r\n isCbioPortal: boolean;\r\n editorHandler: Function;\r\n selectedPathway: string;\r\n setActiveEdge: Function;\r\n profiles: IProfileMetaData[];\r\n pathwayHandler: (pathwayName: string) => void;\r\n handleOpen: (modalId: EModalType) => void;\r\n onPathwayChangeCompleted: () => void;\r\n genomicDataOverlayColorScheme: IColorValueMap;\r\n colorSchemeChangeCallback: (IColorValueMap) => void;\r\n incrementChatMessageCountCallback:( number) => void;\r\n newMessageCallback: (ChatMessageMetaData) => void;\r\n updatePathwayTitleCallback: (string) => void;\r\n};\r\n@observer\r\nexport default class CytoscapeArea extends React.Component{\r\n private cy:any;\r\n private cyDiv: HTMLDivElement | undefined;\r\n private editor: EditorActionsManager;\r\n private edgeAddingMode: any;\r\n private viewOperationsManager: ViewOperationsManager;\r\n private qtipManager: QtipManager;\r\n private genomicDataExplorerView: any;\r\n private pathwayDetailsView: any;\r\n private viewUtilities: any;\r\n private isCollaborative: boolean;\r\n private isCbioPortal: boolean;\r\n private shareDBManager: ShareDBManager;\r\n private cxtMenuManager: ContextMenuManager | undefined;\r\n private dragDropNodeAddManager: DragDropNodeAddPlugin;\r\n private undoRedoManager: any;\r\n private portalAccessor: CBioPortalAccessor;\r\n private isMountedFirst = true;\r\n private eh: any;\r\n private lastSelectedEdge: any;\r\n\r\n\r\n constructor (props: PathwayMapperType) {\r\n super(props);\r\n this.isCollaborative = props.isCollaborative;\r\n this.edgeAddingMode = 0;\r\n this.isCbioPortal = props.isCbioPortal;\r\n }\r\n\r\n componentWillUpdate(nextProps: PathwayMapperType) {\r\n\r\n if (this.props.selectedPathway !== nextProps.selectedPathway) {\r\n this.getPathway(nextProps.selectedPathway);\r\n }\r\n \r\n }\r\n\r\n componentDidUpdate(prevProps: PathwayMapperType) {\r\n if (this.isCbioPortal && \r\n prevProps.selectedPathway !== this.props.selectedPathway) {\r\n this.props.onPathwayChangeCompleted();\r\n }\r\n }\r\n\r\n // This method only opens pathways that are available in pathway.json. Namely, imported or merged pathways are not opened via this method.\r\n // Yet, they individually call parsing method.\r\n getPathway(selectedPathway: string){\r\n\r\n if(!selectedPathway || selectedPathway === '') return;\r\n\r\n const data = pathways[selectedPathway];\r\n\r\n // It might be non-existent due to pathway being created using collaborative mode, or pathway loaded elsewhere (import vs.)\r\n if(!data){ \r\n return;\r\n }\r\n // TODO Problematic const data = pathways[\"../samples/BLCA-2014-RTK-RAS-PI(3)K-pathway.txt\"];\r\n\r\n const parsedGraph = SaveLoadUtility.parseGraph(data, true);\r\n\r\n\r\n const allEles = parsedGraph;\r\n this.editor.loadFile(allEles.nodes, allEles.edges);\r\n }\r\n\r\n render(){\r\n return (
\r\n
\r\n {!this.isCbioPortal &&
}\r\n
);\r\n }\r\n\r\n componentDidMount(): void {\r\n if(this.isMountedFirst){\r\n this.init();\r\n this.isMountedFirst = false;\r\n }\r\n this.getPathway(this.props.selectedPathway);\r\n }\r\n\r\n @autobind\r\n cyDivHandler(div:HTMLDivElement){\r\n this.cyDiv = div;\r\n }\r\n\r\n init(){\r\n\r\n // Create portal accessor\r\n this.portalAccessor = new CBioPortalAccessor();\r\n\r\n // Initializes cytoscape\r\n this.initCyJS();\r\n // Initialize cytoscape based handlers here\r\n this.initCyHandlers();\r\n this.initKeyboardHandlers();\r\n this.initUndoRedoFunctionality();\r\n this.initCBioPortalFunctionalities();\r\n this.placePanzoomAndOverlay();\r\n\r\n //this.appManager = this;\r\n }\r\n\r\n placePanzoomAndOverlay(){\r\n //TODO place navigator !!!\r\n var offset = 5;\r\n // @ts-ignore\r\n var topCy = $(this.cyDiv).offset().top;\r\n //var bottomCy = $('.cyContainer').offset().bottom;\r\n // @ts-ignore\r\n var leftCy = $(this.cyDiv).offset().left;\r\n //var rightCy = $('.cyContainer').offset().right;\r\n // @ts-ignore\r\n var heightCy = $(this.cyDiv).outerHeight();\r\n // @ts-ignore\r\n var widthCy = $(this.cyDiv).outerWidth();\r\n var heightNavigator = !this.isCbioPortal ? $('.cytoscape-navigator-wrapper').outerHeight() : 0;\r\n var widthNavigator = !this.isCbioPortal ? $('.cytoscape-navigator-wrapper').outerWidth() : 0;\r\n\r\n if(!this.isCbioPortal) {\r\n \r\n $('.cytoscape-navigator-wrapper').css('top', heightCy + topCy - heightNavigator - offset + 16);\r\n $('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator - offset + 24 - 0.5 + 0.35);\r\n $('.cytoscape-navigator-wrapper').css('z-index', 1039);\r\n }\r\n $('.cytoscape-navigator-wrapper').css('z-index', 1039);\r\n\r\n //Relative is used so that its position depends on the below properties\r\n $('.cy-panzoom').css('position', 'relative');\r\n $('.cy-panzoom').css('top', 2);\r\n $('.cy-panzoom').css('left', widthCy - 51);\r\n $('.cy-panzoom').css('z-index', 1039);\r\n //Makes the width of panzoom container to 0\r\n $('.cy-panzoom').css('width', 200);\r\n }\r\n\r\n getPathwayData() {\r\n return this.pathwayDetailsView.getPathwayData();\r\n }\r\n\r\n initCyJS() {\r\n \r\n try {\r\n panzoom(cytoscape, $); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n if( !this.isCbioPortal){\r\n navigator(cytoscape); // register extension\r\n }\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n gridGuide(cytoscape, $); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n undoRedo(cytoscape); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n contextMenus(cytoscape, $); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n nodeEditing(cytoscape, $, konva); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n edgeEditing(cytoscape, $, konva); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n viewUtilities(cytoscape, $); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n edgeHandles(cytoscape, $);\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try {\r\n popper(cytoscape);\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n try {\r\n fcose(cytoscape);\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n try {\r\n layoutUtilities(cytoscape);\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n\r\n this.cy = cytoscape({\r\n container: this.cyDiv,\r\n boxSelectionEnabled: true,\r\n autounselectify: false,\r\n wheelSensitivity: 0.1,\r\n style: styleSheet,\r\n textureOnViewport: false,\r\n motionBlur: true,\r\n layout: {name: 'preset'}\r\n });\r\n\r\n this.edgeAddingMode = 0;\r\n // var allEles = SaveLoadUtilities.parseGraph(sampleGraph);\r\n\r\n this.undoRedoManager = this.cy.undoRedo();\r\n // Create Manager Classes\r\n this.shareDBManager = new ShareDBManager(() => {\r\n const dbDoc = this.shareDBManager.getDoc();\r\n });\r\n this.editor = new EditorActionsManager(this.isCollaborative,\r\n this.shareDBManager,\r\n this.cy,\r\n this.isCbioPortal,\r\n this.undoRedoManager,\r\n this.portalAccessor,\r\n this.props.profiles,\r\n this.props.genomicDataOverlayColorScheme,\r\n this.props.colorSchemeChangeCallback, this.props.incrementChatMessageCountCallback,this.props.newMessageCallback, this.props.updatePathwayTitleCallback);\r\n this.shareDBManager.setEditor(this.editor);\r\n if(this.isCollaborative){\r\n this.shareDBManager.initShareDB();\r\n }\r\n\r\n this.qtipManager = new QtipManager(this.cy, this.editor);\r\n \r\n this.cxtMenuManager = !this.isCbioPortal ? new ContextMenuManager(this.cy, this.editor, this.props.handleOpen, \r\n this.undoRedoManager, this.props.isCollaborative) : undefined;\r\n\r\n \r\n this.dragDropNodeAddManager = new DragDropNodeAddPlugin(this.editor, this.cy, this.props.pathwayHandler);\r\n\r\n // Initialize panzoom\r\n this.cy.panzoom(panzoomOpts);\r\n\r\n this.cy.layoutUtilities({\r\n desiredAspectRatio: this.cy.width() / this.cy.height()\r\n });\r\n\r\n // Node Add initialization\r\n this.cy.nodeadd(\r\n {\r\n // Once the explanationText is cast to uppercase they will be node types\r\n components:\r\n [\r\n {\r\n container: $('#simpleNodeDiv'),\r\n nodeType: 'Gene',\r\n icon: geneImg\r\n },\r\n {\r\n container: $('#familyNodeDiv'),\r\n nodeType: 'Family',\r\n icon: familyImg\r\n },\r\n {\r\n container: $('#complexNodeDiv'),\r\n nodeType: 'Complex',\r\n icon: complexImg\r\n },\r\n {\r\n container: $('#compartmentNodeDiv'),\r\n nodeType: 'Compartment',\r\n icon: compartmentImg\r\n },\r\n {\r\n container: $('#processNodeDiv'),\r\n nodeType: 'Process',\r\n icon: processImg\r\n }\r\n ]\r\n\r\n });\r\n const self = this;\r\n const edgeHandleDefaults ={\r\n preview: true, // whether to show added edges preview before releasing selection\r\n stackOrder: 4, // Controls stack order of edgehandles canvas element by setting it's z-index\r\n handleSize: 10, // the size of the edge handle put on nodes\r\n handleColor: '#1abc9c', // the colour of the handle and the line drawn from it\r\n handleLineType: 'ghost', // can be 'ghost' for real edge, 'straight' for a straight line, or 'draw' for a draw-as-you-go line\r\n handleLineWidth: 1, // width of handle line in pixels\r\n handleNodes: 'node', // selector/filter function for whether edges can be made from a given node\r\n hoverDelay: 1, // time spend over a target node before it is considered a target selection\r\n cxt: false, // whether cxt events trigger edgehandles (useful on touch)\r\n enabled: false, // whether to start the extension in the enabled state\r\n toggleOffOnLeave: true, // whether an edge is cancelled by leaving a node (true), or whether you need to go over again to cancel (false; allows multiple edges in one pass)\r\n edgeType: function( sourceNode, targetNode ) {\r\n // can return 'flat' for flat edges between nodes or 'node' for intermediate node between them\r\n // returning null/undefined means an edge can't be added between the two nodes\r\n return 'flat';\r\n },\r\n handlePosition: function( node ){\r\n return 'middle top'; // sets the position of the handle in the format of \"X-AXIS Y-AXIS\" such as \"left top\", \"middle top\"\r\n },\r\n loopAllowed: function( node ) {\r\n // for the specified node, return whether edges from itself to itself are allowed\r\n return false;\r\n },\r\n nodeLoopOffset: -50, // offset for edgeType: 'node' loops\r\n nodeParams: function( sourceNode, targetNode ) {\r\n // for edges between the specified source and target\r\n // return element object to be passed to cy.add() for intermediary node\r\n return {};\r\n },\r\n edgeParams: function( sourceNode, targetNode, i ) {\r\n // for edges between the specified source and target\r\n // return element object to be passed to cy.add() for edge\r\n // NB: i indicates edge index in case of edgeType: 'node'\r\n return {};\r\n },\r\n start: function( sourceNode )\r\n {\r\n // fired when edgehandles interaction starts (drag on handle)\r\n var type = self.getGlobalEdgeType();\r\n //self.cy.edgehandles('option', 'ghostEdgeType', type);\r\n },\r\n complete: function( sourceNode, targetNodes, addedEntities )\r\n {\r\n // // Remove recently added edge !\r\n // // FBI takes this case from now on :O\r\n // // We will take care of addition in our manager :)\r\n self.cy.remove(addedEntities);\r\n self.editor.addEdge({\r\n source: sourceNode.id(),\r\n target: targetNodes[0].id(),\r\n // @ts-ignore\r\n type: self.getGlobalEdgeType(window.edgeAddingMode),\r\n pubmedIDs: [],\r\n name: \"\"\r\n });\r\n },\r\n stop: function( sourceNode )\r\n {\r\n // fired when edgehandles interaction is stopped (either complete with added edges or incomplete)\r\n //TODO refactor this, so terrible for now\r\n //$('.edge-palette a').blur().removeClass('active');\r\n self.edgeAddingMode = -1;\r\n self.eh.disable();\r\n self.eh.hide();\r\n self.props.setActiveEdge(-1);\r\n },\r\n };\r\n //Edge Handles initialization\r\n this.eh = this.cy.edgehandles(edgeHandleDefaults);\r\n this.eh.disable();\r\n this.props.editorHandler(this.editor, this.eh, this.undoRedoManager);\r\n\r\n if(!this.isCbioPortal) {\r\n this.cy.nodeEditing({\r\n padding: 5, // spacing between node and grapples/rectangle\r\n undoable: true, // and if cy.undoRedo exists\r\n\r\n grappleSize: 8, // size of square dots\r\n grappleColor: \"#ffc90e\", // color of grapples\r\n inactiveGrappleStroke: \"inside 1px blue\",\r\n boundingRectangle: true, // enable/disable bounding rectangle\r\n boundingRectangleLineDash: [4, 8], // line dash of bounding rectangle\r\n boundingRectangleLineColor: \"ffc90e\",\r\n boundingRectangleLineWidth: 1.5,\r\n zIndex: 999,\r\n\r\n moveSelectedNodesOnKeyEvents: function () {\r\n return true;\r\n },\r\n\r\n minWidth: function (node) {\r\n var data = node.data(\"resizeMinWidth\");\r\n return data ? data : 15;\r\n }, // a function returns min width of node\r\n minHeight: function (node) {\r\n var data = node.data(\"resizeMinHeight\");\r\n return data ? data : 15;\r\n }, // a function returns min height of node\r\n\r\n // Getters for some style properties the defaults returns ele.css('property-name')\r\n // you are encouraged to override these getters\r\n getCompoundMinWidth: function (node) {\r\n return node.style('min-width');\r\n },\r\n getCompoundMinHeight: function (node) {\r\n return node.style('min-height');\r\n },\r\n getCompoundMinWidthBiasRight: function (node) {\r\n return node.style('min-width-bias-right');\r\n },\r\n getCompoundMinWidthBiasLeft: function (node) {\r\n return node.style('min-width-bias-left');\r\n },\r\n getCompoundMinHeightBiasTop: function (node) {\r\n return node.style('min-height-bias-top');\r\n },\r\n getCompoundMinHeightBiasBottom: function (node) {\r\n return node.style('min-height-bias-bottom');\r\n },\r\n\r\n\r\n isFixedAspectRatioResizeMode: function (node) {\r\n return node.is(\".fixedAspectRatioResizeMode\")\r\n },// with only 4 active grapples (at corners)\r\n isNoResizeMode: function (node) {\r\n return undefined;\r\n }, // no active grapples\r\n\r\n // These optional function will be executed to set the width/height of a node in this extension\r\n // Using node.css() is not a recommended way (http://js.cytoscape.org/#eles.style) to do this. Therefore, overriding these defaults\r\n // so that a data field or something like that will be used to set node dimentions instead of directly calling node.css()\r\n // is highly recommended (Of course this will require a proper setting in the stylesheet).\r\n setWidth: function (node, width) {\r\n node.data('w', width)\r\n },\r\n setHeight: function (node, height) {\r\n node.data('h', height);\r\n },\r\n setCompoundMinWidth: function (node, minWidth) {\r\n node.style('min-width', minWidth);\r\n },\r\n setCompoundMinHeight: function (node, minHeight) {\r\n node.style('min-height', minHeight);\r\n },\r\n setCompoundMinWidthBiasLeft: function (node, minWidthBiasLeft) {\r\n node.style('min-width-bias-left', minWidthBiasLeft);\r\n },\r\n setCompoundMinWidthBiasRight: function (node, minHeightBiasRight) {\r\n node.style('min-width-bias-right', minHeightBiasRight);\r\n },\r\n setCompoundMinHeightBiasTop: function (node, minHeightBiasTop) {\r\n node.style('min-height-bias-top', minHeightBiasTop);\r\n },\r\n setCompoundMinHeightBiasBottom: function (node, minHeightBiasBottom) {\r\n node.style('min-height-bias-bottom', minHeightBiasBottom);\r\n },\r\n\r\n cursors: { // See http://www.w3schools.com/cssref/tryit.asp?filename=trycss_cursor\r\n // May take any \"cursor\" css property\r\n default: \"default\", // to be set after resizing finished or mouseleave\r\n inactive: \"not-allowed\",\r\n nw: \"nw-resize\",\r\n n: \"n-resize\",\r\n ne: \"ne-resize\",\r\n e: \"e-resize\",\r\n se: \"se-resize\",\r\n s: \"s-resize\",\r\n sw: \"sw-resize\",\r\n w: \"w-resize\"\r\n },\r\n resizeToContentCueImage: resizeCue,\r\n resizeToContentFunction: this.editor.resizeNodesToContent.bind(this.editor),\r\n });\r\n }\r\n //Navigator for cytoscape js\r\n var navDefaults = {\r\n container: '.cytoscape-navigator-wrapper' // can be a HTML or jQuery element or jQuery selector\r\n , viewLiveFramerate: 0 // set false to update graph pan only on drag end; set 0 to do it instantly; set a number (frames per second) to update not more than N times per second\r\n , thumbnailEventFramerate: 10 // max thumbnail's updates per second triggered by graph updates\r\n , thumbnailLiveFramerate: false // max thumbnail's updates per second. Set false to disable\r\n , dblClickDelay: 200 // milliseconds\r\n , removeCustomContainer: true // destroy the container specified by user on plugin destroy\r\n , rerenderDelay: 100 // ms to throttle rerender updates to the panzoom for performance\r\n };\r\n\r\n //TODO: AMENDMENT declaration removed\r\n if( !this.isCbioPortal ){\r\n this.cy.navigator(navDefaults); // get navigator instance, nav\r\n }\r\n const viewUtilitiesOpts = {\r\n node: {\r\n highlighted: {\r\n 'border-width': 2,\r\n 'border-color': '#bc1142'\r\n }, // styles for when nodes are highlighted.\r\n unhighlighted: {\r\n 'opacity': function (ele: any) {\r\n // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities\r\n return ele.css('opacity');\r\n }\r\n }// styles for when nodes are unhighlighted.}\r\n },\r\n edge: {\r\n highlighted: {}, // styles for when edges are highlighted.\r\n unhighlighted: {\r\n 'opacity': function (ele: any) {\r\n // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities\r\n return ele.css('opacity');\r\n }\r\n } // styles for when edges are unhighlighted.\r\n },\r\n setVisibilityOnHide: false, // whether to set visibility on hide/show\r\n setDisplayOnHide: true, // whether to set display on hide/show\r\n neighbor: () => { // return desired neighbors of tapheld node\r\n return false;\r\n },\r\n neighborSelectTime: 500 //ms, time to taphold to select desired neighbors\r\n };\r\n\r\n this.viewUtilities = this.cy.viewUtilities(viewUtilitiesOpts);\r\n\r\n this.editor.setViewUtilities(this.viewUtilities);\r\n\r\n this.placePanzoomAndOverlay();\r\n }\r\n\r\n getGlobalEdgeType()\r\n {\r\n var type = \"NONE\";\r\n // @ts-ignore\r\n if (window.edgeAddingMode === 1)\r\n {\r\n type = 'ACTIVATES';\r\n }\r\n // @ts-ignore\r\n else if (window.edgeAddingMode === 2)\r\n {\r\n type = 'INHIBITS';\r\n }\r\n // @ts-ignore\r\n else if (window.edgeAddingMode === 3)\r\n {\r\n type = 'INDUCES';\r\n }\r\n // @ts-ignore\r\n else if (window.edgeAddingMode === 4)\r\n {\r\n type = 'REPRESSES';\r\n }\r\n // @ts-ignore\r\n else if (window.edgeAddingMode === 5)\r\n {\r\n type = 'BINDS';\r\n }\r\n return type;\r\n }\r\n\r\n initCyHandlers(){\r\n var that = this;\r\n\r\n var tappedBefore: any;\r\n var tappedTimeout: number;\r\n this.cy.on('tap', function (event: any) {\r\n var tappedNow = event.target;\r\n if (tappedTimeout !== -1 && tappedBefore !== -1) {\r\n clearTimeout(tappedTimeout);\r\n }\r\n if (tappedBefore === tappedNow) {\r\n tappedNow.trigger('doubleTap');\r\n tappedBefore = -1;\r\n } else {\r\n // @ts-ignore TODO AMENDMENTsa\r\n tappedTimeout = setTimeout(function () {\r\n tappedBefore = -1;\r\n }, 300);\r\n tappedBefore = tappedNow;\r\n }\r\n });\r\n\r\n this.cy.on('doubleTap', 'node', function (e: any) {\r\n\r\n // if cBioPortal ignore\r\n if(that.props.isCbioPortal) return;\r\n\r\n const eventIsDirect = (e.target === this);\r\n \r\n if (eventIsDirect) { \r\n that.qtipManager.addQtipToElements(e.target); \r\n e.target.trigger(\"showqtipevent\");\r\n }\r\n });\r\n \r\n this.cy.on('doubleTap', 'edge', function (e: any) {\r\n \r\n // if cBioPortal ignore\r\n if(that.props.isCbioPortal) return;\r\n \r\n const eventIsDirect = (e.target === this);\r\n \r\n if (eventIsDirect) {\r\n that.qtipManager.addQtipToElements(e.target); \r\n e.target.trigger(\"showqtipevent\");\r\n }\r\n });\r\n\r\n this.cy.on('select', 'node', (e: any) => {\r\n this.editor.pushSelectedNodeStack(e.target);\r\n });\r\n\r\n this.cy.on('unselect', 'node', (e: any) => {\r\n this.editor.removeElementFromSelectedNodeStack(e.target);\r\n });\r\n\r\n this.cy.on('free', 'node', (e: any) => {\r\n //Collect all nodes with descendants in case of compounds\r\n var selectedNodes = this.cy.nodes(':selected');\r\n var nodes = e.target;\r\n nodes = nodes.union(nodes.descendants());\r\n nodes = nodes.union(selectedNodes);\r\n this.editor.moveElements(nodes);\r\n });\r\n\r\n this.cy.on('layoutstop', () => {\r\n this.editor.postLayout();\r\n });\r\n\r\n this.cy.on(\"nodeediting.resizeend\", (_e: any, _type: any, node: any) => {\r\n \r\n //Updates 'data' properties from 'style'\r\n node.data('w', node.width());\r\n node.data('h', node.height());\r\n //Used for collaborative mode\r\n this.editor.resizeElements(node);\r\n });\r\n\r\n this.cy.on('select', 'edge', (e: any) => {\r\n this.lastSelectedEdge = e.target;\r\n });\r\n\r\n this.cy.on('bendPointMovement', () => {\r\n this.editor.updateEdgeAnchorPoints(this.lastSelectedEdge);\r\n });\r\n\r\n this.cy.on('nodeediting.moveend', () => {\r\n this.editor.changeNodePositionsByArrows(this.cy.nodes(\":selected\"));\r\n });\r\n\r\n }\r\n\r\n initKeyboardHandlers() {\r\n if (!this.isCollaborative && !this.isCbioPortal) {\r\n $(document).keydown((e: any) => {\r\n if (e.which === 89 && (e.ctrlKey || e.metaKey)) {\r\n this.undoRedoManager.redo();\r\n }\r\n else if (e.which === 90 && (e.ctrlKey || e.metaKey)) {\r\n this.undoRedoManager.undo();\r\n }\r\n });\r\n }\r\n else {\r\n $('a[role=\"redo\"]').hide();\r\n $('a[role=\"undo\"]').hide();\r\n }\r\n $(document).keydown((e: any) => {\r\n if (e.which === 65 && (e.ctrlKey || e.metaKey)) {\r\n // @ts-ignore\r\n var tn = document.activeElement.tagName;\r\n if (tn != \"TEXTAREA\" && tn != \"INPUT\") {\r\n e.preventDefault();\r\n this.cy.elements().select();\r\n }\r\n }\r\n else if (e.which === 8 || e.which === 46) {\r\n // @ts-ignore\r\n var tn = document.activeElement.tagName;\r\n if (tn != \"TEXTAREA\" && tn != \"INPUT\") {\r\n var selectedElements = this.cy.$(':selected');\r\n this.editor.removeElement(selectedElements);\r\n }\r\n }\r\n });\r\n }\r\n\r\n initUndoRedoFunctionality() {\r\n if (this.isCollaborative || this.isCbioPortal) {\r\n $('[role=\"undo\"]').hide();\r\n $('[role=\"redo\"]').hide();\r\n /* TODO: AMENDMENT\r\n document.getElementById(\"localOrCollaborativeToolbar\").style.display = \"none\";\r\n */\r\n }\r\n }\r\n\r\n\r\n initCBioPortalFunctionalities() {\r\n if (this.isCbioPortal) {\r\n const contextMenu = this.cy.contextMenus('get');\r\n\r\n contextMenu.destroy();\r\n }\r\n }\r\n\r\n\r\n}","import React from 'react';\r\nimport { MenuItem, Nav, Navbar, NavDropdown, NavItem,Button, InputGroup,Form, FormGroup, FormControl, ControlLabel, ButtonGroup } from 'react-bootstrap';\r\nimport pathways from \"../data/pathways.json\";\r\nimport ConfirmationModal from '../modals/ConfirmationModal';\r\nimport PathwayActions from '../utils/PathwayActions';\r\nimport { EModalType } from './react-pathway-mapper';\r\n\r\ninterface IMenubarProps{\r\n pathwayActions: PathwayActions;\r\n handleOpen: (modalId: EModalType) => void;\r\n setActiveEdge: Function;\r\n}\r\n\r\nfunction truncatePathwayTitle( pathwayTitle : string){\r\n if( pathwayTitle.length > 30)\r\n return pathwayTitle.substr(0, 30) + \"...\";\r\n else \r\n return pathwayTitle;\r\n}\r\n\r\nexport default class Menubar extends React.Component{\r\n\r\n constructor(props: IMenubarProps){\r\n super(props);\r\n }\r\n\r\n render(){\r\n const nodeTypes = [\"Gene\", \"Family\", \"Complex\", \"Compartment\", \"Process\"];\r\n const edgeTypes = [\"Activates\", \"Inhibits\", \"Induces\", \"Represses\", \"Binds\"];\r\n\r\n const pathwayDropdownData: {[pwHead: string]: string[]} = {};\r\n for(const pwName of Object.keys(pathways)){\r\n // If a pathway name ain't include 'pathway' word then it is under pancanatlas.\r\n const isPancanatlas = !pwName.includes('pathway');\r\n const dashPos = pwName.indexOf('-');\r\n const pwHead = (isPancanatlas) ? 'PanCanAtlas' : pwName.substring(0, dashPos);\r\n if(pwHead in pathwayDropdownData){\r\n pathwayDropdownData[pwHead].push(pwName);\r\n } else {\r\n pathwayDropdownData[pwHead] = [pwName];\r\n }\r\n }\r\n\r\n return(\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}","import autobind from \"autobind-decorator\";\r\nimport { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport { getPlainObjectKeys } from \"mobx/dist/internal\";\r\nimport { IGeneticAlterationRuleSetParams } from 'oncoprintjs';\r\nimport React from 'react';\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { toast, ToastContainer } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.min.css';\r\nimport ReactTooltip from 'react-tooltip';\r\nimport { IgnorePlugin } from \"webpack\";\r\nimport \"../css/pmv1.css\";\r\nimport \"../css/pmv2.css\";\r\nimport '../css/qtip.css';\r\nimport \"../css/supp.css\";\r\nimport pathways from \"../data/pathways.json\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport FileOperationsManager from '../managers/FileOperationsManager';\r\nimport GridOptionsManager from '../managers/GridOptionsManager';\r\nimport ViewOperationsManager from '../managers/ViewOperationsManager';\r\nimport AboutModal from '../modals/AboutModal';\r\nimport CBioHelpModal from '../modals/CBioHelpModal';\r\nimport ConfirmationModal from '../modals/ConfirmationModal';\r\nimport GridSettings from '../modals/GridSettings';\r\nimport LayoutProperties from '../modals/LayoutProperties';\r\nimport PathwayDetailsModal from '../modals/PathwayDetailsModal';\r\nimport ProfilesColorSchemeModal from \"../modals/ProfilesColorSchemeModal\";\r\nimport ProfilesModal from '../modals/ProfilesModal';\r\nimport QuickHelpModal from '../modals/QuickHelpModal';\r\nimport StudyModal from '../modals/StudyModal';\r\nimport Ranking from \"../ui/Ranking\";\r\nimport Toolbar from \"../ui/Toolbar\";\r\nimport CBioPortalAccessor from '../utils/CBioPortalAccessor';\r\nimport PathwayActions from '../utils/PathwayActions';\r\nimport SaveLoadUtility from '../utils/SaveLoadUtility';\r\nimport Buttonbar from \"./Buttonbar\";\r\nimport CytoscapeArea from \"./CytoscapeArea\";\r\nimport Menubar from './Menubar';\r\nimport Sidebar from './Sidebar';\r\n\r\nconst maxHeapFn = require('@datastructures-js/max-heap');\r\nlet maxHeap = maxHeapFn();\r\n\r\ninterface IPathwayMapperProps{\r\n isCBioPortal: boolean;\r\n genes: any[];\r\n newGenes? : any[];\r\n genomicData?: any[];\r\n isCollaborative?: boolean;\r\n userName: string;\r\n userId: number;\r\n cBioAlterationData?: ICBioData[];\r\n sampleIconData?: ISampleIconData,\r\n pathwayName? : string;\r\n alterationData?: IAlterationData;\r\n onAddGenes?: (selectedGenes: string[]) => void;\r\n changePathwayHandler?: (pathwayGenes: string[]) => void;\r\n addGenomicDataHandler?: (addGenomicData: (alterationData: ICBioData[]) => void) => void;\r\n tableComponent?: (data: IPathwayMapperTable[], selectedPathway: string, onPathwaySelect: (pathway: string) => void) => JSX.Element;\r\n genesSelectionComponent?: () => JSX.Element;\r\n validGenes?: any;\r\n toast: any;\r\n showMessage: (message: string) => void;\r\n //PatientView variable\r\n patientView ?: boolean;\r\n groupComparisonView ?: boolean;\r\n activeGroups ?: any[];\r\n messageBanner? : () => JSX.Element;\r\n currentPathway ?: string;\r\n rankingChoices ?: PMParameters;\r\n updateRankingChoices ?: (drowDownTitle : string, isAlterationEnabled: number, considerOnlyTCGAPanPathways : boolean, isPercentageMatch : number, selectedPathway : string) =>void;\r\n}\r\n\r\nexport interface PMParameters{\r\n dropDownTitle: string;\r\n isPercentageMatch: number;\r\n isAlterationEnabled: number;\r\n considerOnlyTCGAPanPathways: boolean;\r\n}\r\nexport interface ICBioData{\r\n altered: number;\r\n gene: string;\r\n percentAltered: string​;\r\n sequenced: number;\r\n geneticTrackData?: any[]; // TODO GeneticTrackDatum[]: this is currently a private type within cbioportal repo\r\n geneticTrackRuleSetParams?: IGeneticAlterationRuleSetParams;\r\n groupsSet?: { [id: string]: CountSummary & { alteredPercentage: number } };\r\n}\r\n\r\ninterface CountSummary {\r\n 'alteredCount': number;\r\n 'name': string;\r\n 'profiledCount': number;\r\n};\r\n\r\nexport interface ISampleIconData {\r\n sampleIndex: { [s: string]: number },\r\n sampleColors: { [s: string]: string }\r\n}\r\n\r\n/**\r\n * Maps integer values to color code strings\r\n */\r\nexport interface IColorValueMap {\r\n [value: string]: string\r\n}\r\n\r\nexport enum EModalType{\r\n STUDY,\r\n CONFIRMATION,\r\n PROFILES,\r\n ABOUT,\r\n PW_DETAILS,\r\n GRID,\r\n HELP,\r\n LAYOUT,\r\n CHELP,\r\n PROFILES_COLOR_SCHEME\r\n}\r\n\r\nexport interface IPathwayData{\r\n title: string;\r\n description: string;\r\n nodes: any[];\r\n edges: any[];\r\n}\r\n\r\nexport interface IAlterationData{\r\n [key: string]: {[key: string]: number};\r\n}\r\n\r\nexport interface groupComparisonData{\r\n [key:string]: {[key:string]: number };\r\n}\r\n\r\nexport interface IProfileMetaData{\r\n profileId: string;\r\n studyId?: string;\r\n enabled: boolean;\r\n}\r\n\r\nexport interface IDataTypeMetaData{\r\n enabled: boolean;\r\n checked: boolean;\r\n profile: string;\r\n}\r\n\r\nexport interface ChatMessageMetaData{\r\n message : string;\r\n username : string;\r\n id: number;\r\n userId: number;\r\n date: string;\r\n}\r\n\r\nexport interface IPathwayMapperTable{\r\n name: string;\r\n score: number;\r\n genes: string[];\r\n}\r\n\r\nenum RankingMode {\r\n Count = 0,\r\n Percentage = 1,\r\n CountWithAlteration = 2,\r\n PercentageWithAlteration = 3,\r\n}\r\n\r\n@observer\r\nexport class PathwayMapper extends React.Component {\r\n static readonly CBIO_PROFILE_NAME = \"cBioPortal_data\";\r\n\r\n\r\n readonly MAX_ALLOWED_PROFILES_ENABLED = 6;\r\n \r\n @observable\r\n selectedPathway: string;\r\n\r\n fileManager: FileOperationsManager;\r\n\r\n @observable\r\n editor: EditorActionsManager;\r\n\r\n pathwayActions: PathwayActions;\r\n\r\n @observable\r\n isModalShown: boolean[];\r\n\r\n @observable\r\n colorValueMap: IColorValueMap;\r\n\r\n portalAccessor: CBioPortalAccessor;\r\n\r\n @observable\r\n alterationData: IAlterationData;\r\n\r\n @observable\r\n patientData: any [][] = [];\r\n\r\n @observable\r\n groupComparisonData: groupComparisonData ={} ;\r\n\r\n @observable\r\n pathwayGeneMap: {[key: string]: {[key: string]: string}} = {};\r\n\r\n @observable\r\n bestPathwaysAlgos: any[][] = [];\r\n\r\n @observable\r\n userId: number= -1;\r\n\r\n @observable\r\n oldName = \"\";\r\n \r\n @observable\r\n profiles: IProfileMetaData[] = [];\r\n\r\n @observable \r\n chatMessages: ChatMessageMetaData[] = [];\r\n \r\n @observable \r\n chatMessagesCount: number;\r\n\r\n genes: any[] = [];\r\n\r\n renderTimes : number = 0;\r\n\r\n currentRankingScheme = (this.props.rankingChoices !== undefined ? 2 * this.props.rankingChoices.isAlterationEnabled + this.props.rankingChoices.isPercentageMatch : 0);\r\n\r\n setActiveEdge: (edgeId: number) => void;\r\n viewOperationsManager: ViewOperationsManager;\r\n gridOptionsManager: GridOptionsManager;\r\n\r\n\r\n constructor(props: IPathwayMapperProps){\r\n super(props);\r\n makeObservable(this);\r\n\r\n this.genes = this.props.genes;\r\n \r\n this.fileManager = new FileOperationsManager();\r\n this.pathwayActions = new PathwayActions(this.pathwayHandler, this.profiles, this.fileManager, \r\n this.handleOpen, this.props.isCBioPortal, this.props.isCollaborative);\r\n this.selectedPathway = \"\";\r\n if(this.props.pathwayName){\r\n this.pathwayActions.changePathway(this.props.pathwayName);\r\n }\r\n this.isModalShown = [false, false, false, false, false, false, false, false, false, false];\r\n // TODO: Change below\r\n this.alterationData = {}; //{\"study1_gistic\" : {\"CDK4\": 11, \"MDM2\": 19, \"TP53\": 29}, \"study2_gistic\" : {\"MDM2\": 99, \"TP53\": 98}, \"study3_mutations\": {\"MDM2\": 1, \"TP53\": 2}};\r\n this.extractAllGenes();\r\n\r\n this.colorValueMap = {\r\n '-100' : \"#0000ff\",\r\n '0' : \"#ffffff\",\r\n '100' : \"#ff0000\"\r\n }\r\n\r\n this.chatMessagesCount = 0;\r\n\r\n this.userId = this.props.userId ;\r\n\r\n if(this.props.isCBioPortal){\r\n //this.overlayPortalData();\r\n \r\n // If cBioPortal mode is 'on' it is very likely to have cBioALterationData\r\n // but to be on the safe side below assertion is made.\r\n if(this.props.cBioAlterationData ){\r\n if( this.props.patientView === true){\r\n //PatientView PathwayMapper has a different functionality\r\n //Alteration types are overlayed instead of alterationpercentage\r\n this.calculatePatientData(this.props.cBioAlterationData);\r\n this.addSampleIconData(this.props.sampleIconData);\r\n }\r\n else if( this.props.groupComparisonView === true){\r\n this.calculateGroupComparisonData();\r\n }\r\n else{\r\n this.calculateAlterationData(this.props.cBioAlterationData);\r\n\r\n }\r\n }\r\n\r\n if(this.props.addGenomicDataHandler){\r\n this.props.addGenomicDataHandler(this.addGenomicData);\r\n }\r\n\r\n this.profiles.push({profileId: PathwayMapper.CBIO_PROFILE_NAME, enabled: true});\r\n this.getBestPathway(RankingMode.Count);\r\n this.getBestPathway(RankingMode.Percentage);\r\n this.getBestPathway(RankingMode.CountWithAlteration);\r\n this.getBestPathway(RankingMode.PercentageWithAlteration);\r\n }\r\n /*\r\n const profile1 = {profileId: \"study1_gistic\", studyId: \"study1\", enabled: true};\r\n const profile2 = {profileId: \"study2_gistic\", studyId: \"study2\", enabled: true};\r\n const profile3 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\r\n const profile4 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\r\n const profile5 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\r\n const profile6 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\r\n this.profiles.push(profile1, profile2, profile3, profile4, profile5, profile6);\r\n */\r\n\r\n }\r\n\r\n @action.bound\r\n setColorMapping(colorValueMap: IColorValueMap) {\r\n this.colorValueMap = colorValueMap;\r\n this.editor.updateGenomicDataColorScheme(this.colorValueMap);\r\n }\r\n\r\n @action\r\n setSelectedPathway(pathway: string) {\r\n this.selectedPathway = pathway;\r\n }\r\n\r\n @action\r\n setEditor(editor: EditorActionsManager) {\r\n this.editor = editor;\r\n }\r\n\r\n @action\r\n addProfile(profile: IProfileMetaData) {\r\n this.profiles.push(profile);\r\n }\r\n\r\n @action\r\n toggleProfileEnabled(index: number) {\r\n this.profiles[index].enabled = !this.profiles[index].enabled;\r\n }\r\n\r\n calculateAlterationData(cBioAlterationData: ICBioData[]){\r\n // Transform cBioDataAlteration into AlterationData\r\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME] = {};\r\n cBioAlterationData.forEach((geneAltData: ICBioData) => {\r\n const perc = (geneAltData.altered / geneAltData.sequenced) * 100;\r\n \r\n // NaN value is replaced with -101 since NaN value leads to some runtime exceptions (such as with toFixed() function),\r\n // hence it is represented as -101. It will be recognized in the genomic data svg creation to show N/P instead of\r\n // a percentage. -101 is chosen because this percentage is impossible to get.\r\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME][geneAltData.gene] = ((Object.is(perc, NaN) ? -101 : perc));\r\n \r\n\r\n });\r\n }\r\n \r\n calculateGroupComparisonData(){\r\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME] = {};\r\n this.props.genomicData.forEach(datum => {\r\n this.groupComparisonData[datum.hugoGeneSymbol] = {};\r\n this.props.activeGroups.forEach( datum2 => {this.groupComparisonData[datum.hugoGeneSymbol][datum2.nameWithOrdinal] = \r\n datum.groupsSet[datum2.nameWithOrdinal].alteredPercentage;\r\n }); \r\n })\r\n }\r\n\r\n calculatePatientData(cBioAlterationData: ICBioData[]){\r\n // Transform cBioDataAlteration into Patient Data every alteration is accepted 100% altered\r\n\r\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME] = {};\r\n \r\n const allTypes = cBioAlterationData.map(x => x.gene); \r\n //const allTypes = cBioAlterationData.map(x => x.percentAltered);\r\n const uniqueTypes = allTypes.filter((x, i, a) => a.indexOf(x) == i)\r\n //This is a flag for GenomicDataOverlayManager showPatientData\r\n this.patientData[\"PatientView\"] = 1;\r\n\r\n uniqueTypes.forEach(x => {\r\n this.patientData[x]= {};\r\n });\r\n\r\n cBioAlterationData.forEach((geneAltData: ICBioData) => {\r\n const perc = (geneAltData.altered / geneAltData.sequenced) * 100;\r\n\r\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME][geneAltData.gene] = ((Object.is(perc, NaN) ? -101 : perc));\r\n\r\n this.patientData[geneAltData.gene][geneAltData.percentAltered] = ((Object.is(perc, NaN) ? -101 : perc));\r\n this.patientData[geneAltData.gene][\"geneticTrackData\"] = geneAltData.geneticTrackData;\r\n this.patientData[geneAltData.gene][\"geneticTrackRuleSetParams\"] = geneAltData.geneticTrackRuleSetParams;\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n simplifyDate(date: string){\r\n let gapCount = 0;\r\n let simplifiedDate = \"\";\r\n for( let i = 0; i < date.length; i++){\r\n if( date.charAt(i) === ' ') {\r\n gapCount = gapCount + 1;\r\n if( gapCount === 5)\r\n break;\r\n if( gapCount === 4)\r\n simplifiedDate = simplifiedDate + \"\\n\";\r\n else\r\n simplifiedDate = simplifiedDate + \" \"; \r\n }\r\n else\r\n simplifiedDate = simplifiedDate + date.charAt(i);\r\n }\r\n return simplifiedDate;\r\n }\r\n @action.bound\r\n addMessage( Message: string){\r\n if( Message === \"\" ){\r\n return ;\r\n }\r\n if( this.userId === -1 ){\r\n let db_id = this.editor.getDBId();\r\n if(localStorage.getItem( \"chat\" + db_id + \"numberOfUsers\") === null )\r\n localStorage.setItem( \"chat\" + db_id + \"numberOfUsers\", \"\" + 0);\r\n let numberOfUsersInLocal = localStorage.getItem( \"chat\" + db_id + \"numberOfUsers\");\r\n let numberOfUsersConverted = this.convertToNumber( numberOfUsersInLocal );\r\n\r\n this.userId = this.editor.getUserId();\r\n this.userId += 1;\r\n this.editor.incrementNumberOfUsers(); \r\n\r\n localStorage.setItem( \"chat\" + db_id + numberOfUsersConverted, this.props.userName);\r\n numberOfUsersConverted += 1;\r\n localStorage.setItem( \"chat\" + db_id + numberOfUsersConverted, \"\" + this.userId );\r\n numberOfUsersConverted += 1;\r\n\r\n localStorage.setItem( \"chat\" + db_id + \"numberOfUsers\", \"\" + numberOfUsersConverted) ;\r\n\r\n \r\n\r\n }\r\n const newMessage = {\r\n message : Message,\r\n username : this.props.userName,\r\n \r\n id: this.chatMessagesCount,\r\n userId : this.userId,\r\n date: this.simplifyDate(Date().toLocaleString())\r\n };\r\n\r\n this.addChatMessage(newMessage);\r\n setTimeout(this.updateScroll,50);\r\n }\r\n updateScroll(){\r\n document.getElementById('chatBoxxheader').children[0].scrollTop = document.getElementById('chatBoxxheader').children[0].scrollHeight;\r\n }\r\n\r\n convertCharacter( character ){\r\n if( character === '0')\r\n return 0;\r\n if( character === '1')\r\n return 1;\r\n if( character === '2')\r\n return 2;\r\n if( character === '3')\r\n return 3;\r\n if( character === '4')\r\n return 4;\r\n if( character === '5')\r\n return 5;\r\n if( character === '6')\r\n return 6;\r\n if( character === '7')\r\n return 7;\r\n if( character === '8')\r\n return 8;\r\n if( character === '9')\r\n return 9;\r\n return -1;\r\n }\r\n convertToNumber(value: string) {\r\n let converted : number = 0;\r\n let powOf10 = 1;\r\n for( let i = value.length - 1; i >= 0; i--){\r\n converted = converted + powOf10 * ( this.convertCharacter(value.charAt(i)));\r\n powOf10 *= 10;\r\n }\r\n return converted;\r\n }\r\n\r\n @action.bound\r\n addChatMessage( newMessage : ChatMessageMetaData){\r\n this.editor.addNewMessage( newMessage, this.chatMessagesCount);\r\n this.editor.incrementMessageCount();\r\n }\r\n \r\n\r\n updatePathwayTitleCallback( pathwayTitle: string){\r\n this.pathwayActions.changePathwayTitle( pathwayTitle)\r\n }\r\n\r\n addSampleIconData(sampleIconData: any) {\r\n if (sampleIconData) {\r\n this.patientData[\"sampleColors\"] = sampleIconData.sampleColors;\r\n this.patientData[\"sampleIndex\"] = sampleIconData.sampleIndex;\r\n }\r\n }\r\n\r\n getGeneStudyMap(studyGeneMap: any){\r\n \r\n const genomicDataMap: any = {};\r\n for (const cancerStudy of Object.keys(studyGeneMap)) {\r\n\r\n const cancerData = studyGeneMap[cancerStudy];\r\n\r\n for (const geneSymbol of Object.keys(cancerData)) {\r\n if (genomicDataMap[geneSymbol] === undefined) genomicDataMap[geneSymbol] = {};\r\n\r\n genomicDataMap[geneSymbol][cancerStudy] = studyGeneMap[cancerStudy][geneSymbol].toFixed(2);\r\n }\r\n }\r\n return genomicDataMap;\r\n }\r\n\r\n getAlterationAveragePerGene(genomicDataMap: any){\r\n\r\n const geneAlterationMap: any = {};\r\n for(const gene of Object.keys(genomicDataMap)){\r\n let sum = 0, count = 0;\r\n\r\n for(const alteration of Object.values(genomicDataMap[gene])){\r\n sum += parseFloat(alteration as string);\r\n count++;\r\n }\r\n if(count === 0){\r\n geneAlterationMap[gene] = 0;\r\n } else {\r\n geneAlterationMap[gene] = sum / count;\r\n }\r\n }\r\n\r\n return geneAlterationMap;\r\n }\r\n\r\n\r\n getBestPathways(rankingMode: RankingMode) {\r\n const genomicDataMap = this.getGeneStudyMap(this.alterationData);\r\n const alterationPerGene = this.getAlterationAveragePerGene(genomicDataMap);\r\n maxHeap = maxHeapFn();\r\n const matchedGenesMap: any = {};\r\n const bestPathways: any[] = [];\r\n for (const pathwayName in this.pathwayGeneMap){\r\n if (this.pathwayGeneMap.hasOwnProperty(pathwayName)) {\r\n const genesMatching = [];\r\n // Calculate sum of all alterations\r\n let sumOfAlterations = 0;\r\n this.props.genes.forEach(gene => {\r\n if(this.pathwayGeneMap[pathwayName].hasOwnProperty(gene.hugoGeneSymbol) &&\r\n this.pathwayGeneMap[pathwayName][gene.hugoGeneSymbol] === \"GENE\") {\r\n genesMatching.push(gene.hugoGeneSymbol);\r\n if (this.props.groupComparisonView) {\r\n // if enriched group exists use the alteration percentage of the enriched group\r\n if (gene.enrichedGroup && gene.groupsSet[gene.enrichedGroup]) {\r\n sumOfAlterations += gene.groupsSet[gene.enrichedGroup].alteredPercentage || 0;\r\n }\r\n // else use the max value\r\n else {\r\n sumOfAlterations += Math.max(...Object.values(gene.groupsSet).map(v => (v as any).alteredPercentage || 0));\r\n }\r\n }\r\n else {\r\n sumOfAlterations += alterationPerGene[gene.hugoGeneSymbol] || 0;\r\n }\r\n }\r\n });\r\n matchedGenesMap[pathwayName] = genesMatching;\r\n const geneCount = Object.values(this.pathwayGeneMap[pathwayName]).filter(geneType => geneType === \"GENE\").length;\r\n\r\n if(rankingMode === 0){\r\n maxHeap.insert( genesMatching.length, {pathwayName: pathwayName});\r\n } else if(rankingMode === 1){\r\n maxHeap.insert( genesMatching.length / geneCount * 100, {pathwayName: pathwayName});\r\n } else if(rankingMode === 2){\r\n maxHeap.insert( sumOfAlterations, {pathwayName: pathwayName});\r\n } else if(rankingMode === 3){\r\n maxHeap.insert( genesMatching.length * sumOfAlterations / geneCount, {pathwayName: pathwayName});\r\n }\r\n\r\n }\r\n }\r\n while(maxHeap.size() > 0) {\r\n const top = maxHeap.extractMax();\r\n const pathwayName = top.getValue().pathwayName;\r\n bestPathways.push({score: top.getKey(), genesMatched: matchedGenesMap[pathwayName], pathwayName: pathwayName});\r\n }\r\n return bestPathways;\r\n }\r\n\r\n /**\r\n * \r\n * @param rankingMode: number => 0 = Count, 1 = Percentage, 2 = Count with Alteration, 3 = Percentage with Alteration\r\n * \r\n */\r\n getBestPathway(rankingMode: RankingMode) {\r\n const bestPathways = this.getBestPathways(rankingMode);\r\n if(this.bestPathwaysAlgos.length === this.currentRankingScheme && this.props.currentPathway !== undefined && this.props.currentPathway === \"\") // First pathway of the first method is shown as the default pathway.\r\n this.setSelectedPathway(bestPathways[0].pathwayName);\r\n else if ( this.bestPathwaysAlgos.length === this.currentRankingScheme && this.props.currentPathway !== undefined && this.props.currentPathway.length > 0)\r\n this.setSelectedPathway(this.props.currentPathway);\r\n else if ( this.bestPathwaysAlgos.length === this.currentRankingScheme)\r\n this.setSelectedPathway(bestPathways[0].pathwayName);\r\n this.bestPathwaysAlgos.push(bestPathways);\r\n }\r\n\r\n getBestPathwayReRank(rankingMode: RankingMode) {\r\n const bestPathways = this.getBestPathways(rankingMode);\r\n this.bestPathwaysAlgos.push(bestPathways);\r\n }\r\n \r\n // This method extracts all genes of a pathway and adds it to the pathwayGeneMap\r\n // so that it can be used by percentage calculation and genomic data \r\n // Note: Pathway title\r\n @autobind\r\n includePathway(pathwayData?: IPathwayData, pathwayName?: string){\r\n const genes = pathwayData.nodes;\r\n const geneHash: any = {};\r\n\r\n for(const gene of genes){\r\n\r\n if(gene.data.type === \"GENE\"){\r\n geneHash[gene.data.name] = gene.data.type;\r\n }\r\n }\r\n\r\n this.pathwayGeneMap[pathwayData.title] = geneHash;\r\n\r\n }\r\n\r\n extractAllGenes(){\r\n for(const pathwayName in pathways){\r\n if(pathways.hasOwnProperty(pathwayName)){\r\n\r\n const pathwayData: IPathwayData = SaveLoadUtility.parseGraph(pathways[pathwayName], true);\r\n this.includePathway(pathwayData);\r\n }\r\n }\r\n }\r\n\r\n rankPathways(){\r\n this.bestPathwaysAlgos = [];\r\n this.getBestPathwayReRank(RankingMode.Count);\r\n this.getBestPathwayReRank(RankingMode.Percentage);\r\n this.getBestPathwayReRank(RankingMode.CountWithAlteration);\r\n this.getBestPathwayReRank(RankingMode.PercentageWithAlteration);\r\n this.genes = this.props.genes;\r\n }\r\n\r\n loadRedirectedPortalData(){\r\n\r\n if(!this.props.alterationData){ // If size 0 that means it is not redirected.\r\n return;\r\n }\r\n \r\n const redirectedProfiles = Object.keys(this.props.alterationData).map((data: string) : IProfileMetaData => ({profileId: data, enabled: true}));\r\n redirectedProfiles.forEach((redirectedProfile) => {\r\n this.addProfile(redirectedProfile);\r\n });\r\n this.editor.addPortalGenomicData(this.props.alterationData, this.editor.getEmptyGroupID());\r\n }\r\n\r\n exists(profileId: string){\r\n\r\n let exists = false;\r\n this.profiles.forEach((profile: IProfileMetaData) => {\r\n if(profile.profileId === profileId){\r\n exists = true;\r\n }\r\n });\r\n\r\n return exists;\r\n }\r\n\r\n @autobind\r\n getCountOfEnabledProfiles(){\r\n let countOfEnabledProfiles = 0;\r\n for( const profile of Object.values(this.profiles) ){\r\n countOfEnabledProfiles += ( profile.enabled === true ? 1 : 0 );\r\n }\r\n return countOfEnabledProfiles;\r\n }\r\n\r\n @autobind\r\n loadFromCBio(dataTypes: {[dataType: string]: IDataTypeMetaData}, studyData: any[]){\r\n if(!this.pathwayActions.doesCyHaveElements()){\r\n toast.warn('Your pathway is empty!');\r\n return;\r\n }\r\n\r\n let numberOfEnabledProfiles = this.getCountOfEnabledProfiles();\r\n for (const metadata of Object.values(dataTypes))\r\n {\r\n if(!metadata.checked) {\r\n continue;\r\n } \r\n if(this.exists(metadata.profile)){\r\n toast.warn(metadata.profile + \" already exists.\");\r\n continue;\r\n }\r\n\r\n const studyId = studyData[0];\r\n const profileId = metadata.profile;\r\n const enableNewProfile = numberOfEnabledProfiles < this.MAX_ALLOWED_PROFILES_ENABLED;\r\n if( enableNewProfile === true)\r\n numberOfEnabledProfiles++;\r\n\r\n const newProfile = {\r\n studyId: studyId,\r\n profileId: profileId,\r\n enabled: enableNewProfile\r\n }\r\n\r\n this.addProfile(newProfile);\r\n\r\n const genes = this.editor.cy.nodes()\r\n .filter(node => node.data(\"type\") === \"GENE\")\r\n .map(node => node.data(\"name\"));\r\n\r\n \r\n this.portalAccessor.getProfileData({\r\n caseSetId: studyId,\r\n geneticProfileId: profileId,\r\n genes: genes\r\n },\r\n (data: any) => {\r\n this.editor.addPortalGenomicData(data, this.editor.getEmptyGroupID());\r\n let visibilityObject = {};\r\n visibilityObject[newProfile.profileId] = newProfile.enabled;\r\n this.editor.updateGenomicDataVisibility(visibilityObject);\r\n });\r\n \r\n }\r\n }\r\n\r\n @autobind\r\n setActiveEdgeHandler(setActiveEdge: (edgeId: number) => void){\r\n this.setActiveEdge = setActiveEdge;\r\n }\r\n\r\n @autobind\r\n colorSchemeChangeCallback(colorScheme: IColorValueMap) {\r\n this.colorValueMap = colorScheme;\r\n }\r\n\r\n @autobind\r\n incrementChatMessageCountCallback( chatMessageCount: number) {\r\n this.chatMessagesCount = chatMessageCount;\r\n }\r\n\r\n @autobind\r\n newMessageCallback( message : ChatMessageMetaData ){\r\n this.chatMessages.push(message);\r\n setTimeout(this.updateScroll,50);\r\n }\r\n\r\n @autobind\r\n addGenomicData(cBioAlterationData: ICBioData[]){\r\n\r\n this.calculateAlterationData(cBioAlterationData);\r\n this.editor.removeGenomicData();\r\n this.editor.addPortalGenomicData(this.alterationData, this.editor.getEmptyGroupID());\r\n }\r\n\r\n @autobind\r\n emphasizeQueryGenes() {\r\n this.pathwayActions.emphasizeQueryGenes(this.props.genes.map((gene: any) => gene.hugoGeneSymbol));\r\n }\r\n\r\n render() {\r\n const isCBioPortal = this.props.isCBioPortal; \r\n if( this.renderTimes > 1 && this.props.groupComparisonView === true && this.props.genes !== this.genes) {\r\n this.rankPathways();\r\n }\r\n this.renderTimes++;\r\n\r\n const cytoComp = ;\r\n\r\n return (\r\n\r\n
\r\n
\r\n {!isCBioPortal && \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n { isCBioPortal &&\r\n \r\n \r\n \r\n \r\n {this.props.messageBanner ?\r\n {this.props.messageBanner()}\r\n :\r\n \r\n }\r\n \r\n {this.selectedPathway}\r\n \r\n \r\n }\r\n \r\n
\r\n {\r\n (!isCBioPortal && \r\n
\r\n \r\n
)\r\n }\r\n\r\n { isCBioPortal ?\r\n (\r\n {cytoComp}\r\n
Powered by PathwayMapper
\r\n )\r\n : (cytoComp)\r\n }\r\n {\r\n (isCBioPortal &&\r\n \r\n \r\n )\r\n }\r\n
\r\n\r\n {/* isCBioPortal &&\r\n \r\n Powered by PathwayMapper\r\n */\r\n }\r\n\r\n { (
\r\n\r\n {\r\n (
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
)\r\n }\r\n { !this.props.isCBioPortal &&\r\n \r\n \r\n \r\n \r\n }\r\n \r\n\r\n {this.pathwayActions.setUploaders(ref, false);}}\r\n style={{display: 'none'}}\r\n onChange={(e) => {this.pathwayActions.onChangeFile(e, false);}}\r\n />\r\n {this.pathwayActions.setUploaders(ref, true);}}\r\n style={{display: 'none'}}\r\n onChange={(e) => {this.pathwayActions.onChangeFile(e, true);}}\r\n />\r\n {this.pathwayActions.setOverlayUploader(ref);}}\r\n style={{display: 'none'}}\r\n onChange={(e) => {this.pathwayActions.overlayFromText(e.target.files[0]);}}\r\n />\r\n
)\r\n }\r\n
\r\n
\r\n );\r\n }\r\n\r\n componentDidMount(){\r\n if(!this.props.isCBioPortal){\r\n $(\".container\").css('width', \"auto\");\r\n $(\".container\").css('paddingLeft', 0);\r\n $(\".container\").css('marginLeft', 5);\r\n } else {\r\n this.pathwayActions.emphasizeQueryGenes(this.props.genes.map((gene: any) => gene.hugoGeneSymbol));\r\n }\r\n }\r\n\r\n componentDidUpdate(){\r\n if(this.props.isCBioPortal){\r\n this.pathwayActions.emphasizeQueryGenes(this.props.genes.map((gene: any) => gene.hugoGeneSymbol));\r\n }\r\n }\r\n\r\n @action.bound\r\n handleOpen(modalId: EModalType){\r\n this.isModalShown[modalId] = true;\r\n }\r\n\r\n @action.bound\r\n handleClose(modalId: EModalType){\r\n this.isModalShown[modalId] = false;\r\n }\r\n\r\n @autobind\r\n editorHandler(editor, eh, undoRedoManager){\r\n\r\n this.setEditor(editor);\r\n this.gridOptionsManager = new GridOptionsManager(this.editor.cy);\r\n this.viewOperationsManager = new ViewOperationsManager(this.editor, this.editor.cy);\r\n this.pathwayActions.editorHandler(editor, eh, undoRedoManager, this.viewOperationsManager, this.gridOptionsManager);\r\n \r\n if(this.props.isCBioPortal){\r\n if(this.props.patientView){\r\n this.editor.addPortalGenomicData(this.patientData, this.editor.getEmptyGroupID());\r\n }\r\n else if( this.props.groupComparisonView === true) {\r\n this.editor.addPortalGenomicData(this.groupComparisonData, this.editor.getEmptyGroupID(), this.props.activeGroups);\r\n }\r\n else{\r\n this.editor.addPortalGenomicData(this.alterationData, this.editor.getEmptyGroupID());\r\n }\r\n } else {\r\n this.portalAccessor = new CBioPortalAccessor();\r\n this.loadRedirectedPortalData();\r\n }\r\n\r\n }\r\n\r\n @autobind\r\n pathwayHandler(pathway: string){\r\n this.setSelectedPathway(pathway);\r\n if(this.pathwayGeneMap[pathway] && this.props.changePathwayHandler)\r\n this.props.changePathwayHandler(\r\n Object.keys(this.pathwayGeneMap[pathway])\r\n .filter(gene => (!this.alterationData[PathwayMapper.CBIO_PROFILE_NAME].hasOwnProperty(gene)))\r\n );\r\n }\r\n}\r\n\r\nexport default PathwayMapper;","import autobind from \"autobind-decorator\";\r\nimport { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React ,{Component} from \"react\";\r\nimport \"../css/supp.css\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n FormControl,\r\n ListGroup,\r\n ListGroupItem,\r\n Modal,\r\n} from \"react-bootstrap\";\r\nimport { toast } from \"react-toastify\";\r\nimport { ChatMessageMetaData, EModalType, IDataTypeMetaData } from \"../ui/react-pathway-mapper\";\r\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\r\n\r\ninterface ChatMessageProps {\r\n message: ChatMessageMetaData;\r\n username: string;\r\n userId: number;\r\n}\r\n\r\n@observer\r\nexport default class ChatBox extends React.Component{\r\n\r\n constructor(props: ChatMessageProps) {\r\n super(props);\r\n makeObservable(this);\r\n }\r\n\r\n render() { \r\n /*let MyMessageColors = ['#1e90ff', '#ff0000', '#ffd700', '#006400', '#0000ff', '#257359', '#c71585', '#ff4500']; \r\n let OthersMessageColors = ['#8ec7fe', '#ff7f7f', '#ffeb7f', '#31ff31', '#7f7fff', '#b2e5d4', '#f17bc5', '#ffa27f' ]; */\r\n let MyMessageColors = ['#1e90ff', '#ff0000', '#b0b000', '#006400', '#0000ff', '#257359', '#c71585', '#fd713d'];\r\n let OthersMessageColors = ['#8ec7fe', '#f08c8c', '#f6f7b6', '#31ff31', '#b3b3f7', '#b2e5d4', '#f17bc5', '#fdb89e' ]; \r\n return (\r\n
\r\n
{this.props.message.username + \"_\" + this.props.message.userId }
\r\n
{this.props.message.message}
\r\n
\r\n );\r\n }\r\n}\r\n","import autobind, { boundMethod } from \"autobind-decorator\";\r\nimport { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React ,{Component} from \"react\";\r\nimport ChatMessage from \"./ChatMessage\";\r\nimport \"../css/supp.css\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n FormControl,\r\n ListGroup,\r\n ListGroupItem,\r\n Modal,\r\n} from \"react-bootstrap\";\r\nimport { toast } from \"react-toastify\";\r\nimport { ChatMessageMetaData, EModalType, IDataTypeMetaData } from \"../ui/react-pathway-mapper\";\r\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\r\nimport { threadId } from \"worker_threads\";\r\n\r\ninterface ChatBoxProps {\r\n messages: ChatMessageMetaData[];\r\n addMessage: Function;\r\n showChat: boolean;\r\n username: string;\r\n openChat: Function;\r\n userId: number;\r\n}\r\n\r\n@observer\r\nexport default class ChatBox extends React.Component{\r\n\r\n message: string = \"\";\r\n charactersPerLine: number = 21;\r\n\r\n constructor(props: ChatBoxProps) {\r\n super(props);\r\n makeObservable(this);\r\n this.state = {\r\n diffX: 0,\r\n diffY: 0,\r\n dragging: false,\r\n styles: {}\r\n }\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.handleChange = this.handleChange.bind(this); \r\n }\r\n\r\n convertMessage( message: string){\r\n let convertedMessage = \"\";\r\n let index = 0;\r\n \r\n while(index < message.length) {\r\n let lastIndexinLine = index + this.charactersPerLine - 1;\r\n if( lastIndexinLine >= message.length - 1 ){\r\n lastIndexinLine = message.length - 1;\r\n }\r\n\r\n else if( message.charAt( lastIndexinLine + 1 ) === \" \" ) { \r\n }\r\n else {\r\n while( lastIndexinLine >= 0 ) {\r\n if( message.charAt( lastIndexinLine) === \" \" ){\r\n break;\r\n }\r\n lastIndexinLine = lastIndexinLine - 1;\r\n }\r\n }\r\n if( index > lastIndexinLine ){\r\n for( let i = index ; i < index + this.charactersPerLine; i++){\r\n convertedMessage = convertedMessage + message.charAt( i );\r\n }\r\n convertedMessage = convertedMessage + \"-\";\r\n convertedMessage = convertedMessage + \"\\n\";\r\n index = index + this.charactersPerLine;\r\n } \r\n else {\r\n for( let i = index ; i <= lastIndexinLine; i++){\r\n convertedMessage = convertedMessage + message.charAt( i );\r\n }\r\n convertedMessage = convertedMessage + \"\\n\";\r\n index = lastIndexinLine + 1;\r\n } \r\n } \r\n return convertedMessage;\r\n }\r\n\r\n handleClose(){\r\n this.props.openChat();\r\n }\r\n\r\n handleElement( element){\r\n element.value = \"\";\r\n }\r\n\r\n handleSubmit(event){\r\n event.preventDefault();\r\n let element = document.getElementById(\"message-text\");\r\n this.handleElement(document.getElementById(\"message-text\"));\r\n this.props.addMessage(this.convertMessage(this.message));\r\n this.message = \"\";\r\n }\r\n \r\n handleChange(event){\r\n this.message = event.target.value;\r\n }\r\n\r\n @autobind\r\n dragElement(elmnt) {\r\n var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;\r\n document.getElementById(\"chatBoxxDrag\").onmousedown = dragMouseDown;\r\n\r\n function dragMouseDown(e) {\r\n e = e || window.event;\r\n e.preventDefault();\r\n // get the mouse cursor position at startup:\r\n pos3 = e.clientX;\r\n pos4 = e.clientY;\r\n document.onmouseup = closeDragElement;\r\n // call a function whenever the cursor moves:\r\n document.onmousemove = elementDrag;\r\n }\r\n\r\n function elementDrag(e) {\r\n e = e || window.event;\r\n e.preventDefault();\r\n // calculate the new cursor position:\r\n pos1 = pos3 - e.clientX;\r\n pos2 = pos4 - e.clientY;\r\n pos3 = e.clientX;\r\n pos4 = e.clientY;\r\n // set the element's new position:\r\n elmnt.style.top = (elmnt.offsetTop - pos2) + \"px\";\r\n elmnt.style.left = (elmnt.offsetLeft - pos1) + \"px\";\r\n }\r\n\r\n function closeDragElement() {\r\n /* stop moving when mouse button is released:
\r\n */\r\n document.onmouseup = null;\r\n document.onmousemove = null;\r\n }\r\n}\r\n\r\n\r\n render() {\r\n return (\r\n
this.dragElement(document.getElementById(\"chatBoxx\"))} onMouseDown={()=>{this.dragElement(document.getElementById(\"chatBoxx\"))}} >\r\n
\r\n
\r\n \r\n { \r\n this.props.messages\r\n .map( (message) => {\r\n const id = message.id;\r\n if( message.username === this.props.username && this.props.userId === message.userId ) {\r\n return (\r\n
\r\n
{message.date}
\r\n \r\n
\r\n );\r\n }\r\n else{\r\n return (\r\n
\r\n \r\n
{message.date}
\r\n
\r\n );\r\n }\r\n\r\n })\r\n }\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
(this.props.addMessage(this.convertMessage(this.message),), this.message = \"\")} > \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import { action, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport { Button, Panel } from \"react-bootstrap\";\r\nimport \"../css/supp.css\";\r\n// @ts-ignore\r\nimport acImg from \"../images/edges/activates.svg\";\r\n// @ts-ignore\r\nimport bindImg from \"../images/edges/binds.svg\";\r\n// @ts-ignore\r\nimport indImg from \"../images/edges/induces.svg\";\r\n// @ts-ignore\r\nimport inhImg from \"../images/edges/inhibits.svg\";\r\n// @ts-ignore\r\nimport repImg from \"../images/edges/represses.svg\";\r\nimport PathwayActions from \"../utils/PathwayActions\";\r\nimport ChatBox from \"./ChatBox\";\r\n\r\nimport { ChatMessageMetaData, EModalType } from \"./react-pathway-mapper\";\r\nimport {\r\n Checkbox,\r\n FormControl,\r\n ListGroup,\r\n ListGroupItem,\r\n Modal,\r\n} from \"react-bootstrap\";\r\n\r\n\r\ninterface ISideBarProps{\r\n pathwayActions: PathwayActions;\r\n setActiveEdgeHandler: Function;\r\n handleOpen: Function;\r\n messages: ChatMessageMetaData[];\r\n addMessage: Function;\r\n username: string;\r\n userId: number;\r\n isCollaborative: boolean;\r\n}\r\n\r\n@observer\r\nexport default class Sidebar extends React.Component{\r\n\r\n @observable\r\n activeEdge: number = -1;\r\n\r\n @observable\r\n showChat: boolean = false; \r\n\r\n constructor(props: ISideBarProps){\r\n super(props);\r\n makeObservable(this);\r\n props.setActiveEdgeHandler(this.setActiveEdge);\r\n \r\n }\r\n\r\n addEdge(edgeIndex: number){\r\n if(edgeIndex === this.activeEdge){\r\n this.setActiveEdge(-1);\r\n this.props.pathwayActions.addEdge(-1);\r\n return;\r\n }\r\n this.setActiveEdge(edgeIndex);\r\n this.props.pathwayActions.addEdge(edgeIndex);\r\n }\r\n\r\n @action.bound\r\n setActiveEdge(edgeIndex: number){\r\n this.activeEdge = edgeIndex;\r\n }\r\n\r\n changeScroll(){\r\n document.getElementById('chatBoxxheader').children[0].scrollTop = document.getElementById('chatBoxxheader').children[0].scrollHeight;\r\n }\r\n @action.bound\r\n openChat(){\r\n this.showChat = !this.showChat;\r\n setTimeout(this.changeScroll, 50);\r\n }\r\n\r\n\r\n render(){\r\n\r\n const edgeTypes = [\"Activates\", \"Inhibits\", \"Induces\", \"Represses\", \"Binds\"];\r\n\r\n const edgeImgs = [acImg, inhImg, indImg, repImg, bindImg];\r\n\r\n const nodeIds = [\"simpleNodeDiv\", \"familyNodeDiv\", \"complexNodeDiv\", \"compartmentNodeDiv\", \"processNodeDiv\"];\r\n if( this.props.isCollaborative){\r\n return(\r\n
\r\n \r\n \r\n Network\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n Node Palette\r\n \r\n \r\n \r\n {\r\n nodeIds.map((id) => {\r\n return (\r\n
\r\n
);\r\n })\r\n }\r\n
\r\n
\r\n\r\n \r\n \r\n Interaction Palette\r\n \r\n \r\n
\r\n {\r\n edgeTypes.map((edgeType: string, i: number) => {\r\n return ();\r\n })\r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n else {\r\n return(\r\n
\r\n \r\n \r\n Network\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n Node Palette\r\n \r\n \r\n \r\n {\r\n nodeIds.map((id) => {\r\n return (\r\n
\r\n
);\r\n })\r\n }\r\n
\r\n
\r\n\r\n \r\n \r\n Interaction Palette\r\n \r\n \r\n
\r\n {\r\n edgeTypes.map((edgeType: string, i: number) => {\r\n return ();\r\n })\r\n }\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n}"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://pathway-mapper/webpack/bootstrap","webpack://pathway-mapper/external \"react\"","webpack://pathway-mapper/external \"react-bootstrap\"","webpack://pathway-mapper/external \"mobx\"","webpack://pathway-mapper/external \"autobind-decorator\"","webpack://pathway-mapper/external \"jquery\"","webpack://pathway-mapper/external \"mobx-react\"","webpack://pathway-mapper/external \"lodash\"","webpack://pathway-mapper/external \"cytoscape\"","webpack://pathway-mapper/./src/images/toolbar/layout-cose.svg","webpack://pathway-mapper/external \"react-toastify\"","webpack://pathway-mapper/external \"oncoprintjs\"","webpack://pathway-mapper/./src/images/toolbar/save_png.svg","webpack://pathway-mapper/./src/images/toolbar/save_svg.svg","webpack://pathway-mapper/external \"tippy.js\"","webpack://pathway-mapper/external \"file-saver\"","webpack://pathway-mapper/./src/images/toolbar/edit.svg","webpack://pathway-mapper/./src/images/toolbar/about.svg","webpack://pathway-mapper/./src/images/toolbar/add-selected.svg","webpack://pathway-mapper/./src/images/toolbar/add-all.svg","webpack://pathway-mapper/external \"tippy.js/dist/tippy.css\"","webpack://pathway-mapper/external \"react-tooltip\"","webpack://pathway-mapper/./src/images/toolbar/align/align-horizontal-bottom.svg","webpack://pathway-mapper/./src/images/toolbar/align/align-horizontal-middle.svg","webpack://pathway-mapper/./src/images/toolbar/align/align-horizontal-top.svg","webpack://pathway-mapper/./src/images/toolbar/align/align-vertical-center.svg","webpack://pathway-mapper/./src/images/toolbar/align/align-vertical-left.svg","webpack://pathway-mapper/./src/images/toolbar/align/align-vertical-right.svg","webpack://pathway-mapper/./src/images/toolbar/delete-simple.svg","webpack://pathway-mapper/./src/images/toolbar/grid.svg","webpack://pathway-mapper/./src/images/toolbar/guidelines.svg","webpack://pathway-mapper/./src/images/toolbar/hide-selected.svg","webpack://pathway-mapper/./src/images/toolbar/layout-properties.svg","webpack://pathway-mapper/./src/images/toolbar/load.svg","webpack://pathway-mapper/./src/images/toolbar/new.svg","webpack://pathway-mapper/./src/images/toolbar/portal.svg","webpack://pathway-mapper/./src/images/toolbar/quick-help.svg","webpack://pathway-mapper/./src/images/toolbar/redo.svg","webpack://pathway-mapper/./src/images/toolbar/save.svg","webpack://pathway-mapper/./src/images/toolbar/settings.svg","webpack://pathway-mapper/./src/images/toolbar/show-all.svg","webpack://pathway-mapper/./src/images/toolbar/undo.svg","webpack://pathway-mapper/./src/images/nodes/compartment.svg","webpack://pathway-mapper/./src/images/nodes/complex.svg","webpack://pathway-mapper/./src/images/nodes/family.svg","webpack://pathway-mapper/./src/images/nodes/gene.svg","webpack://pathway-mapper/./src/images/nodes/process.svg","webpack://pathway-mapper/./src/images/resizeCue.svg","webpack://pathway-mapper/./src/images/edges/activates.svg","webpack://pathway-mapper/./src/images/edges/binds.svg","webpack://pathway-mapper/./src/images/edges/induces.svg","webpack://pathway-mapper/./src/images/edges/inhibits.svg","webpack://pathway-mapper/./src/images/edges/represses.svg","webpack://pathway-mapper/external \"react-toastify/dist/ReactToastify.min.css\"","webpack://pathway-mapper/./src/images/about/i-vis.png","webpack://pathway-mapper/./src/images/about/mskcc.png","webpack://pathway-mapper/./src/images/add.svg","webpack://pathway-mapper/./src/images/delete-simple.svg","webpack://pathway-mapper/external \"sharedb/lib/client\"","webpack://pathway-mapper/external \"jquery-ui-dist/jquery-ui\"","webpack://pathway-mapper/external \"cytoscape-edgehandles\"","webpack://pathway-mapper/external \"cytoscape-edge-editing\"","webpack://pathway-mapper/external \"cytoscape-fcose\"","webpack://pathway-mapper/external \"cytoscape-node-editing\"","webpack://pathway-mapper/external \"cytoscape-undo-redo\"","webpack://pathway-mapper/external \"cytoscape-panzoom\"","webpack://pathway-mapper/./src/utils/GraphStyleSheet.tsx","webpack://pathway-mapper/./src/utils/PanzoomOptions.tsx","webpack://pathway-mapper/external \"cytoscape-navigator\"","webpack://pathway-mapper/external \"cytoscape-context-menus\"","webpack://pathway-mapper/external \"konva\"","webpack://pathway-mapper/external \"cytoscape-view-utilities\"","webpack://pathway-mapper/external \"cytoscape-grid-guide\"","webpack://pathway-mapper/external \"cytoscape-popper\"","webpack://pathway-mapper/external \"cytoscape-layout-utilities\"","webpack://pathway-mapper/./src/images/send.svg","webpack://pathway-mapper/external \"@datastructures-js/max-heap\"","webpack://pathway-mapper/./src/utils/SaveLoadUtility.tsx","webpack://pathway-mapper/./src/managers/FileOperationsManager.tsx","webpack://pathway-mapper/./src/managers/GridOptionsManager.tsx","webpack://pathway-mapper/./src/managers/ViewOperationsManager.tsx","webpack://pathway-mapper/./src/modals/AboutModal.tsx","webpack://pathway-mapper/./src/modals/CBioHelpModal.tsx","webpack://pathway-mapper/./src/modals/GridSettings.tsx","webpack://pathway-mapper/./src/modals/ConfirmationModal.tsx","webpack://pathway-mapper/./src/utils/GraphUtilities.tsx","webpack://pathway-mapper/./src/utils/SVGExporter.ts","webpack://pathway-mapper/./src/managers/GenomicDataOverlayManager.ts","webpack://pathway-mapper/./src/managers/ShareDBManager.tsx","webpack://pathway-mapper/./src/managers/EditorActionsManager.tsx","webpack://pathway-mapper/./src/modals/LayoutProperties.tsx","webpack://pathway-mapper/./src/modals/PathwayDetailsModal.tsx","webpack://pathway-mapper/./src/modals/ProfilesColorSchemeModal.tsx","webpack://pathway-mapper/./src/modals/ProfilesModal.tsx","webpack://pathway-mapper/./src/modals/QuickHelpModal.tsx","webpack://pathway-mapper/./src/utils/CBioPortalAccessor.tsx","webpack://pathway-mapper/./src/modals/StudyModal.tsx","webpack://pathway-mapper/./src/ui/Ranking.tsx","webpack://pathway-mapper/./src/ui/Toolbar.tsx","webpack://pathway-mapper/./src/utils/PathwayActions.ts","webpack://pathway-mapper/./src/ui/Buttonbar.tsx","webpack://pathway-mapper/./src/managers/ContextMenuManager.tsx","webpack://pathway-mapper/./src/managers/QtipManager.tsx","webpack://pathway-mapper/./src/utils/DragDropNodeAddPlugin.tsx","webpack://pathway-mapper/./src/ui/CytoscapeArea.tsx","webpack://pathway-mapper/./src/ui/Menubar.tsx","webpack://pathway-mapper/./src/ui/react-pathway-mapper.tsx","webpack://pathway-mapper/./src/ui/ChatMessage.tsx","webpack://pathway-mapper/./src/ui/ChatBox.tsx","webpack://pathway-mapper/./src/ui/Sidebar.tsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","styleSheet","nodeBackgroundOpacityFunction","compoundPaddingFunction","borderWidthFunction","parentBorderWidthFunction","highlightedBorderWidthFunction","selectedBorderWidthFunction","selectedHighlightedBorderWidthFunction","parentNodeShapeFunc","nodeBackgroundColorFunction","nodeBorderColorFunction","edgeColorHandler","edgeTargetArrowTypeHandler","edgeLineTypeHandler","selector","style","ele","data","edge","label","css","_private","panzoomOptions","zoomFactor","zoomDelay","minZoom","maxZoom","fitPadding","panSpeed","panDistance","panDragAreaSize","panMinPercentSpeed","panInactiveArea","panIndicatorMinOpacity","zoomOnly","fitSelector","undefined","animateOnFit","fitAnimationDuration","sliderHandleIcon","zoomInIcon","zoomOutIcon","resetIcon","pathwayDetails","cy","edgeEditing","returnString","pathwayTitle","nodes","edges","length","this","exportNode","edgeID","edgeType","source","target","pubmedIDs","pubmedString","edgeName","edgeCurveStyle","numberOfAnchorPoints","anchors","getAnchorsAsArray","anchorPointPositions","j","nodeMap","id","node","nodeName","nodeID","pos","position","nodeType","nodeW","nodeH","parseInt","x","y","graph","isArray","lines","split","edgesStartIndex","title","description","graphDataIndex","isFound","includes","lineData","parentID","posX","posY","newNode","group","type","w","h","parent","push","edgeSource","edgeTarget","anchorPoints","anchorPair","separatorIndex","indexOf","substring","parseFloat","edgeData","newEdge","pathwayInfo","other","b64Data","contentType","sliceSize","byteCharacters","atob","byteArrays","offset","slice","byteNumbers","Array","charCodeAt","byteArray","Uint8Array","Blob","graphData","jpeg","b64data","substr","imageData","b64toBlob","blob","fileName","editor","exportSVG","png","isSIFNX","pathwayData","exportAsSIFNX","exportGraph","currentProperties","changeParameters","GridOptionsManager","defaultGridGuideOptions","params","clone","refreshGridOptionsExtension","state","geometricGuideline","snapToAlignmentLocationDuringDrag","distributionGuidelines","drawGrid","snapToGridDuringDrag","gridGuide","snapToGridOnRelease","snapToAlignmentLocationOnRelease","initPosAlignment","centerToEdgeAlignment","resize","parentPadding","gridSpacing","zoomDash","panGrid","gridStackOrder","gridColor","lineWidth","guidelinesStackOrder","guidelinesTolerance","guidelinesStyle","strokeStyle","geometricGuidelineRange","range","minDistRange","distGuidelineOffset","horizontalDistColor","verticalDistColor","initPosAlignmentColor","lineDash","horizontalDistLine","verticalDistLine","initPosAlignmentLine","parentSpacing","movedNodes","param","tmpNodes","selectedNodeStack","collection","add","forEach","isParent","firstSelected","firstBbox","boundingBox","firstOuterHeight","outerHeight","self","index","newPosition","calculateNewPosition","changePosition","handleChangePositionByAlignment","referenceBbox","referenceOuterHeight","currentPos","currentBbox","moveParam","height","labelHeight","x1","x2","y1","y2","console","log","dx","dy","newPos","childNodes","children","parentBbox","childNode","childBbox","_dx","_dy","nextPosition","oldPosition","props","show","onHide","handleClose","EModalType","ABOUT","Header","closeButton","Title","Body","className","src","alt","Footer","href","Component","addSelImage","addAllImage","hexToRGBA","str","EGridType","defaultShape","fill","width","stroke","labels","shapeBank","svgNameSpace","svgElement","document","createElementNS","shape","offsetX","textOffsetX","cellWidth","offsetY","Math","floor","textOffsetY","g","appendChild","text","setAttributeNS","toString","textNode","createTextNode","setAttribute","paddingTop","bsSize","CHELP","patientView","cellPadding","paddingLeft","dangerouslySetInnerHTML","__html","generateOncoprintLegend","outerHTML","CONFIRMATION","onClick","ConfirmationModal","pendingFunction","gridSize","defaultSettings","guideColor","newType","enabledType","NONE","dialogClassName","onShow","pathwayActions","GRID","sm","checked","onChange","setEnabledType","GUIDE","e","marginTop","adjustGridSettings","toggleGrid","toggleGuide","GridSettings","tree","mappedArr","len","arrElem","mappedElem","SVGNameSpace","EDGE_ARROW_SCALE","svg","resetSVG","cyBounds","extent","nodeTree","createGraphHierarchy","traverseFunction","genomicDataSVG","getGenomicDataSVG","oncoprintDataSVG","getOncoprintDataSVG","createRect","labelOffset","GENOMICDATA_LABEL_Y_OFFSET","createNodeLabel","elemSVG","nodePosition","svgX","getAttribute","svgY","rootLevelNode","drawEdge","sourceEndpoint","targetEndpoint","targetArrowShape","lineStyle","curveStyle","segmentPoints","controlPoints","labelElement","createEdgeLabel","lastAnchor","edgeEndpoint","unitV","unitVector","inverseUnitV","scale","targetX","targetY","TRIANGLE_ARROW_HEAD_HEIGHT","point1Vector","rotateVector","PI","point2Vector","TRIANGLE_ARROW_HEAD_WIDTH","point1X","point1Y","point2X","point2Y","polySVG","T_ARROW_HEAD_HEIGHT","lineSVG","T_ARROW_HEAD_WIDTH","EDGE_WIDTH","DASH_PARAMETERS","pathSVG","pathPoints","furtherEndPoint","join","polylineSVG","polylinePoints","nodeRectangle","COMPOUND_MARGIN","createStyleForNodes","genomicDataOffset","verticalTextOffset","svgText","NODE_FONT_SIZE","innerHTML","strokeWidth","NODE_STROKE_WIDTH","strokeColor","NODE_STROKE_COLOR","fillColor","NODE_FILL_COLOR","opacity","NODE_OPACITY","strokeOpacity","ROUNDING_FACTOR","COMPARTMENT_STROKE_WIDTH","FAMILY_FILL_COLOR","FAMILY_STROKE_COLOR","styleString","labelText","svgTextElement","fontSize","fontFamily","labelRotationAngle","getEdgeLabelRotationAngle","lineHeight","rscratch","labelLineHeight","sin","labelAngle","cos","labelPos","labelX","labelY","toDegrees","radians","v","inverseLength","sqrt","scalar","genomicDataRectangleGenerator","percent","parentSVG","colorScheme","groupColor","temp","limits","pairs","entries","map","hex","result","color","Number","exec","b","sort","o1","o2","lower","Infinity","upper","findValueColorInterval","upperValue","lowerValue","upperColor","lowerColor","up","low","ratio","getMappedColor","colorString","round","overlayRect","textPercent","toFixed","xOffset","sharedb","socket","connection","genomicDataMap","visibleGenomicDataMapByType","groupedGenomicDataMap","groupedGenomicDataCount","_key","isVisible","getRequiredWidthForGenomicData","update","genomicData","groupID","isCollaborative","isFromPortal","cancerStudy","groupComparisonData","geneSymbol","cancerTypes","metaLineColumns","keys","DEFAULT_VISIBLE_GENOMIC_DATA_COUNT","lineContent","visibilityMap","patientData","observers","oldCount","activeGroups","prepareGenomicData","showPatientData","showGroupComparisonData","showGenomicData","notifyObservers","genomicDataBoxCount","cancerType","countVisibleGenomicDataByType","nodeLabel","eleBBox","reqWidth","overlayRecBoxW","overLayRectBBox","overlayRecBoxH","maxGenomicDataBoxCount","genomicBoxCounter","groupsToBeRendered","percentageInGroup","colorValueMap","resizeNodeCallback","hideGenomicData","encodeURIComponent","generateSVGForNode","wrapper","counter","sampleWrapper2","append","generateSVGForGroupComparisonNode","on","event","cyTarget","ref","popperRef","dummyDomEle","createElement","body","tip","getReferenceClientRect","getBoundingClientRect","trigger","placement","interactive","theme","content","generateHTMLContentForComparisonNodeTooltip","onHidden","instance","destroy","remove","one","hide","observer","notify","geneData","count","altType","geneticTrackData","generateOncoprintForPatientNode","generateHTMLContentForNodeTooltip","selectedGene","oncoprintColors","Missense_Mutation","inframe","truncating","Fusion","AMP","gain","heatloss","homdel","DeepDel","in_frame_del","alterationBoxCount","getAlterationCountForPatient","genomicAlterationData","alterationType","getOncoprintColors","genomicDataRectangleGeneratorPatient","textLength","ruleset","geneticTrackRuleSetParams","universalShapes","getUniversalShapes","shapesPerDatum","getSpecificShapesForDatum","specificShapes","concat","shapes","alterationTypeKey","iconColor","iconText","sampleIconColorMap","sampleColors","sampleIndexMap","sampleIndex","sample","sampleId","sampleIconSvgHTML","generateSvgIconForSample","margin","sampleWrapper","sampleData","mutationInfo","cnaInfo","fusionInfo","gene","hugoGeneSymbol","disp_mut","proteinChange","mutationType","disp_cna","alteration","cnaLabelKey","cnaLabel","getCNADisplayString","disp_fusion","mutationInfoHTML","cnaInfoHTML","fusionInfoHTML","mutation","cna","fusion","sampleIdHTML","_","shareDBManager","cyInst","isCBioPortal","undoRedoManager","portalAccessor","profiles","genomicDataOverlayColorScheme","colorSchemeChangeCallback","incrementChatMessageCountCallback","newMessageCallback","updatePathwayTitleCallback","isCbioPortal","edgeEditingOptions","bendPositionsFunction","controlPositionsFunction","undoable","anchorShapeSizeFactor","enabled","handleReconnectEdge","reconnectEdge","enableMultipleAnchorRemovalOption","FIT_CONSTANT","layoutProperties","EditorActionsManager","defaultLayoutProperties","genomicDataOverlayManager","svgExporter","action","doChangePosition","undoChangePosition","doChangeNodeSize","undoChangeNodeSize","doChangeCompoundSize","undoChangeCompoundSize","doChangename","undoChangeName","doHide","undoHide","doShow","undoShow","doHighlightInvalidGenes","undoHighlightInvalidGenes","doHighlight","undoHighlight","profile","scheme","viewUtilitiesRef","viewUtilities","movedNodeArr","changeElementsPositionByAlignment","do","newMovedNodes","currentNodePosition","doc","WORK_ID","message","messages","values","newMessage","username","userId","date","setTimeout","updateChatBoxHeight","getElementById","scrollTop","scrollHeight","CHAT_MESSAGES_COUNT","incrementMessageCount","chatMessage","chatMessageKey","addNewMessage","selectedNodes","changeNodePositionsShareDB","args","newWidth","newHeight","oldWidth","oldHeight","newMinWidth","newMinWidthBiasLeft","newMinWidthBiasRight","newMinHeight","newMinHeightBiasTop","newMinHeightBiasBottom","oldMinWidth","oldMinWidthBiasLeft","oldMinWidthBiasRight","oldMinHeight","oldMinHeightBiasTop","oldMinHeightBiasBottom","newName","changeName","changeNameCy","currentName","oldName","newArgs","sel","nodesToHide","each","ch","selected","visible","elements","unselect","changeVisibility","hid","invalidHighlightedGenesIDs","invalidGenesIDs","highlightedGenesIDs","highlightedEdgesIDs","hiddenGenesIDs","$","addClass","geneSymbols","getGeneSymbols","validateGenes","validGeneSymbols","invalidGenes","geneName","changeHighlightInvalidGenes","highlightedGenes","nodesToAddInvalidHighlight","hasClass","union","actions","geneIDs","nodesToRemoveInvalidHighlight","removeClass","elementsToHighlight","changeHighlight","neighbors","neighborhood","nodesToRemoveHighlight","isEdge","removeInvalidGeneHighlights","removeOtherHighlight","undoRedo","parentNodes","moveElements","newState","zoomLevel","zoom","panLevel","pan","updateGlobalOptions","getEmptyGroupID","cancerNames","groupGenomicData","addPubmedIDs","pubmedArray","validPubmedIDs","filter","isNaN","apply","uniq","removePubmedID","difference","anchorPointsArray","updateEdgeAnchorPoints","registerObserver","dataMap","addGenomicVisibilityData","updateGenomicDataVisibility","setGenomicDataOverlayColorScheme","updateGenomicDataOverlayColorScheme","updateColorScheme","op","globalOptions","li","newOptions","newLayoutProps","updateLayoutProperties","options","eles","nodeData","posData","addNewNodeToShareDB","addNodetoCy","addNode","nodeArr","updateCompoundBounds","isRemove","oi","od","cyEle","removeElementCy","addNewNodeLocally","realtimeNode","addNewNode","addNewEdgeShareDB","addNewEdgetoCy","addEdge","newEdges","addNewEdge","addNewEdgeLocally","realTimeNodeArray","realTimeEdgeArray","nodeList","realTimeNode","nodeWidth","nodeHeight","compoundMinWidth","minWidth","compoundMinWidthBiasLeft","minWidthBiasLeft","compoundMinWidthBiasRight","minWidthBiasRight","compoundMinHeight","minHeight","compoundMinHeightBiasTop","minHeightBiasTop","compoundMinHeightBiasBottom","minHeightBiasBottom","edgeList","tmpData","initAnchorPoints","sourceID","targetID","reconnectEdgeInShareDB","location","move","removeElementsFromShareDB","removeElementsCy","removeElement","newParentId","changeParentShareDB","parentData","parameters","parentElem","firstTime","posDiffX","posDiffY","elementById","classRef","nodeObj","nodeRef","connectedEdges","topMostNodes","tpMostNodes","parentMap","nodeParent","getTopLevelParents","rootNodeR","NodeObj","traverseNodes","rootNodeObj","lengthOfChildrenArray","changeParent","lockedNodes","removedEles","removeNodes","removedNode","moveElement","resizeCompound","previousWidth","previousHeight","resizeElement","mergeGraph","mergeGraphCy","fitGraph","nodesToBeAdded","edgesToBeAdded","sourceNode","targetNode","cySourceNode","edgesBtw","fit","loadfileShareDB","loadFileCy","addNodesCy","addEdgesCy","loadGraph","removeAllElements","isHighlighted","isHidden","eleID","isNode","updateVisibility","updateHighlight","isInvalidGene","deleteSelectedAnchor","clearGenomicData","clearAllGenomicData","parsedGenomicData","addGenomicData","study","addGenomicDataLocally","profileId","isEnabled","targetProfileIndex","setProfile","addProfile","newData","removeGenomicDataWithGeneSymbol","addGenomicDataWithGeneSymbol","addGenomicGroupData","addToProfiles","resizeElements","removeGenomicVisData","removeProfiles","addGenomicVisData","adjustVisibilityShareDB","incrementNumberOfUsers","NUMBER_OF_USERS","messageCount","setSizeOfElement","ur","nodeEditing","refreshGrapples","nodeRepulsion","idealEdgeLength","edgeElasticity","nestingFactor","gravity","numIter","tile","animate","randomize","gravityRangeCompound","gravityCompound","gravityRange","tilingPaddingVertical","tilingPaddingHorizontal","initialEnergyOnIncremental","animationDuration","animationEasing","nodeDimensionsIncludeLabels","bound","a","internalLayoutProperties","LayoutProperties","val","onEnter","LAYOUT","updateInternalLayoutProperty","setLayoutProperties","getPathwayInfo","textAlign","rows","setPathwayInfo","PW_DETAILS","PathwayDetailsModal","addButtonImg","deleteButtonImg","initColorMappings","prevProps","colorMappings","colorValueMapping","splice","showUniqueValuesWarningModal","mapping","pair","setShowUniqueValuesWarningModal","handleColorMappingChange","PROFILES_COLOR_SCHEME","mappingElements","padding","md","handleValueChange","handleColorChange","removeColorMapping","close","paddingRight","addDefaultColorMapping","setDefaultColorMapping","handleSaveColorScheme","ProfilesColorSchemeModal","showEnabledProfileWarningModal","enabledProfiles","enabledProfileCountLimit","profileEnabledMap","handleProfileLabelClicked","profileLabels","Fragment","enabledProfileCount","setShowEnabledProfileWarningModal","cursor","bsStyle","PROFILES","ProfilesModal","HELP","CBioPortalAccessor","MUTATION","GENE_EXPRESSION","CNA","callbackFunction","cancerStudies","request","XMLHttpRequest","onreadystatechange","readyState","DONE","status","responseText","error","open","GET_ALL_CANCER_STUDIES_URL","send","outData","cancerProfileName","isSupportedCancerProfile","GET_GENETIC_PROFILES_URL","endsWith","MRNA_EXP_STUDY_NAME","CNA_EXP_STUDY_NAME","MUTATION_EXP_STUDY_NAME","paramLines","geneticProfileId","startIndex","startsWith","numOfTumorSamples","geneticProfileType","getDataType","profileDataAlteration","CNA_GAIN","CNA_DELETION","Z_SCORE_UPPER_THRESHOLD","Z_SCORE_LOWER_THRESHOLD","calcAlterationPercentages","success","queryURL","GET_PROFILE_DATA_URL","caseSetId","isFirst","genes","nodeSymbols","JSON","parse","validGeneArray","highlightInvalidGenes","VALIDATE_GENES_URL","setRequestHeader","stringify","bottom","selectedStudyData","fetchStudy","ready","dataTypeFetchResultsReady","itemArray","query","searchQuery","dataType","properties","dataTypes","studyCount","studyListItemCheckboxChecked","selectedDataTypesPerStudy","studyIndex","selectedStudy","selectedStudies","showDataTypeSelectionModal","studyId","setDataTypeFetchResultsReady","getSupportedGeneticProfiles","disableAllDataTypes","setDataTypeProperties","selectedStudiesCount","checkedDatasCount","getDataTypes","fetchCancerStudies","studyTitle","studyData","numOfStudies","initStudyListItemCheckboxChecked","initSelectedDataTypesPerStudy","setItemArray","setSelectedStudyData","clearSelectedStudies","clearStudyCheckboxesChecked","clearSelectedDataTypesPerStudy","currentlySelectedItemIndex","STUDY","resetModal","placeholder","setSearchQuery","maxHeight","overflow","border","borderRadius","item","obj","toLowerCase","marginBottom","boundingRect","checkboxModalPosition","preparePortalAccess","toggleStudyListItemCheckboxChecked","setShowDataTypeSelectionModal","removeSelectedStudy","unselectDataTypesForStudy","marginLeft","top","inline","disabled","handleCheckboxClick","currentDataTypes","addSelectedStudy","bsClass","loadFromCBio","StudyModal","TCGA_PANCAN_PATHWAY_NAMES","isPercentageMatch","rankingChoices","isAlterationEnabled","considerOnlyTCGAPanPathways","dropDownTitle","isExpanded","onApplyClick","currentPathway","selectedPathway","shownPathways","pathwayName","updateRankingChoices","bestPathways","bestPathwaysAlgos","filterBestPathwaysByTCGAPanPathways","pathway","changePathway","setBestPathwayMethod","rankingCriteria","tableComponent","score","genesMatched","onPathwayClick","toggleConsiderOnlyTCGAPanPathways","TCGA_PANCAN_EXPLANATION","display","COUNT_PERC_EXPLANATION","ALTERATION_EXPLANATION","Ranking","aboutImage","selectedGenes","studyQuery","alterationData","saveAs","performLayout","groupComparisonView","getSelectedNodes","noneGeneList","validGenes","onAddGenes","showMessage","pathwayGenes","window","handleOpen","genesSelectionComponent","Toolbar","pathwayHandler","fileManager","queryGenes","saveLayoutProperties","gridOptionsManager","setSnapToGuidelines","setShowGrid","resizeNodesToContent","viewOperationsManager","handleNodeAlignment","isMerge","file","files","processFile","overlayUploader","click","formData","FormData","linesOfData","uploader","merger","inputRef","undo","redo","eh","saveGraph","reset","commitNewPathway","resetUndoStack","updatePathwayTitle","highlightNeighbors","highlightSelected","showAllNodes","hideSelectedNodes","selectedEles","edgeTypeIndex","edgeAddingMode","disable","enable","cyNode","toUpperCase","nodesContainingSearchedGene","nodesToSelect","highlightBySearch","removeGenomicData","clearProfiles","removeAllHighlight","parseGraph","graphJSON","json","loadFile","saveAsSVG","saveAsPNG","saveAsJPEG","exists","searchedGene","fileFunctions","function","newPathway","tooltip","upload","export","modFunctions","deleteSelected","alignFunctions","align","utilFunctions","isFocused","visibilityFunctions","hideSelected","showAll","layoutFunctions","allFunctions","fluid","backgroundColor","paddingBottom","functions","borderTopRightRadius","borderBottomRightRadius","onKeyPress","searchGene","Addon","glyph","Buttonbar","init","ctxMenus","scratch","contextMenus","menuItems","coreAsWell","onClickFunction","hasTrailingDivider","selectedElements","containerType","validNodes","size","notValid","tmpNode","isChildren","childsToBeRemoved","tmpNode1","tmpNode2","element","compId","changeParents","nonCollabItems","appendMenuItems","queryNode","pubmedData","header","classList","textInputWrapper","inputElement","addEventListener","edgeLabelRowElement","colElement","pubmedTextInputWrapper","pubmedIdInputElement","pubmedIdsToAdd","generatePubmedLinks","pubmedIdRowElement","pubmedIdColElement","argData","getElementsByClassName","pubmedIdListWrapper","pubmedIdLabel","pubmedId","pubmedIdListElement","pubmedIdRemoveButton","parentElement","pubmedContent","pubmedIdLink","pubmedLink","rowElement","buttonWrapper","button","preventDefault","generateNodeQtip","generateEdgeQtip","string","charAt","postFileLoadCallback","edgeMap","EDGEMAP_NAME","Error","updateShareDBObject","postFileLoad","submitOp","shareDBError","ops","genomicMap","GENOMIC_DATA_MAP_NAME","visMap","VISIBLE_GENOMIC_DATA_MAP_NAME","genomicDataGroupMap","GENOMIC_DATA_GROUP_NAME","genomicDataGroupCount","GENOMIC_DATA_GROUP_COUNT","na","mapName","objectKey","LAYOUT_PROPS_NAME","GLOBAL_OPTS_NAME","getGlobalOptions","ld","CHAT_APPLICATION_NAME","GENOMIC_DATA_COLOR_SCHEME_NAME","subscribe","err","WebSocket","host","Connection","getParam","loadFileCallback","onFileLoaded","createNewDocument","new_id","getCustomObjId","genomicDataGroupList","chatMessagesCount","numberOfUsers","genomicDataColorScheme","chatMessages","history","pushState","fetch","initializeSharedDBDoc","syncInitialSharedDocData","initSharedDocEventHandlers","NODEMAP_NAME","shareDBLayoutProperties","visDataMap","chatMessageCount","loadMessages","updateMessageCount","invalidHighlightedGenes","hiddenGenes","tmpNodeId","highlightedEdges","tmpEdge","tmpEdgeId","bendPoint","pubmedID","edgeLabel","edgeInitializer","tmpEdgeID","newEdgeID","applyShareDBOperation","addNewElementsLocally","highlightElementsInitially","updateLayoutPropertiesCallback","changeGlobalOptions","insertShareDBObject","currentMap","getGenomicDataOverlayColorScheme","updateGenomicDataColorSchemeHandler","key_g","nodeAddRemoveHandler","shareDBNodeAddRemoveEventCallBack","edgeAddRemoveHandler","shareDBEdgeAddRemoveEventCallBack","genomicDataAddRemoveHandler","shareDBGenomicDataHandler","genomicDataVisibilityChangeHandler","shareDBGenomicDataVisibilityHandler","checkShareDBGenomicData","genomicDataGroupChangeHandler","shareDBGenomicDataGroupChangeHandler","updateElementHandler","updateElementCallback","updateLayoutPropsHandler","updateGlobalOptionsHandler","handleOp","path","isReplaceEvent","isShareDBReplaceEvent","updateMessages","PATHWAY_TITLE","updatePathwayTitleBack","returnCount","incrementShareDBGroupCount","inGroupId","genomicGroupMap","genomicVisMap","currentGroup","clearShareDBGenomicData","genomicMapEntry","elementID","realTimeEdge","realTimeGeneratedID","nodeInitializer","deleteShareDBObject","coll","currentX","currentY","nodeIDs","isInvalid","collaborativeNode","nonDuplicateArray","removedIndices","tmpID","rootNode","nodeLookupTable","traverseFromRoot","parId","refNode","refNodeId","currentWidth","currentHeight","newNodeData","newNodeId","newSource","newTarget","oldIdNewIdMap","traverseTree","createGraphHierarchyRealTime","bendPointPositions","controlPointPositions","realTimeNodeMap","realTimeNodeLookupTable","realTimeNodeNameLookupTable","nodeMapItem","sameNodeId","newLayoutProperties","updateShareDBLayoutProperties","updateShareDBGlobalOptions","newColorScheme","updateShareDBGenomicDataOverlayColorScheme","Date","now","performance","replace","random","urlParam","regExp","RegExp","match","search","initNodeAdd","nodeAddClass","defaults","backgroundColorDiv","borderColorDiv","borderWidthDiv","borderRadiusDiv","icon","nodeParams","fn","cytoscapeNodeadd","extend","find","components","component","dragContainer","container","$nodeadd","$nodeDragHandle","stopPropagation","background","draggable","helper","$container","droppable","activeClass","drop","ui","currentOffset","relX","pageX","left","relY","pageY","attr","nodeBbox","renderedBoundingBox","arguments","cynodeadd","edgeHandles","fcose","panzoom","panzoomOpts","konva","popper","layoutUtilities","nextProps","getPathway","onPathwayChangeCompleted","pathways","allEles","cyDivHandler","isMountedFirst","div","cyDiv","initCyJS","initCyHandlers","initKeyboardHandlers","initUndoRedoFunctionality","initCBioPortalFunctionalities","placePanzoomAndOverlay","topCy","leftCy","heightCy","widthCy","outerWidth","heightNavigator","widthNavigator","pathwayDetailsView","getPathwayData","boxSelectionEnabled","autounselectify","wheelSensitivity","textureOnViewport","motionBlur","layout","getDoc","setEditor","initShareDB","qtipManager","cxtMenuManager","dragDropNodeAddManager","desiredAspectRatio","nodeadd","edgeHandleDefaults","preview","stackOrder","handleSize","handleColor","handleLineType","handleLineWidth","handleNodes","hoverDelay","cxt","toggleOffOnLeave","handlePosition","loopAllowed","nodeLoopOffset","edgeParams","start","getGlobalEdgeType","complete","targetNodes","addedEntities","stop","setActiveEdge","edgehandles","editorHandler","grappleSize","grappleColor","inactiveGrappleStroke","boundingRectangle","boundingRectangleLineDash","boundingRectangleLineColor","boundingRectangleLineWidth","zIndex","moveSelectedNodesOnKeyEvents","getCompoundMinWidth","getCompoundMinHeight","getCompoundMinWidthBiasRight","getCompoundMinWidthBiasLeft","getCompoundMinHeightBiasTop","getCompoundMinHeightBiasBottom","isFixedAspectRatioResizeMode","is","isNoResizeMode","setWidth","setHeight","setCompoundMinWidth","setCompoundMinHeight","setCompoundMinWidthBiasLeft","setCompoundMinWidthBiasRight","minHeightBiasRight","setCompoundMinHeightBiasTop","setCompoundMinHeightBiasBottom","cursors","default","inactive","nw","ne","se","sw","resizeToContentCueImage","resizeToContentFunction","navigator","viewLiveFramerate","thumbnailEventFramerate","thumbnailLiveFramerate","dblClickDelay","removeCustomContainer","rerenderDelay","highlighted","unhighlighted","setVisibilityOnHide","setDisplayOnHide","neighbor","neighborSelectTime","setViewUtilities","tappedBefore","tappedTimeout","that","tappedNow","clearTimeout","addQtipToElements","pushSelectedNodeStack","removeElementFromSelectedNodeStack","descendants","postLayout","_e","_type","lastSelectedEdge","changeNodePositionsByArrows","keydown","which","ctrlKey","metaKey","tn","activeElement","tagName","select","CytoscapeArea","RankingMode","pathwayDropdownData","pwName","isPancanatlas","dashPos","pwHead","eventKey","doesCyHaveElements","merge","resizeToContent","highlightNeighbours","loadSampleData","uploadOverlay","removeAllData","pullRight","Brand","whiteSpace","ChatBox","diffX","diffY","dragging","styles","handleSubmit","handleChange","convertedMessage","lastIndexinLine","charactersPerLine","openChat","handleElement","addMessage","convertMessage","elmnt","pos1","pos2","pos3","pos4","elementDrag","clientX","clientY","offsetTop","offsetLeft","closeDragElement","onmouseup","onmousemove","onmousedown","showChat","onMouseEnter","dragElement","onMouseDown","ChatMessage","onSubmit","onReset","autoComplete","setActiveEdgeHandler","edgeIndex","activeEdge","changeScroll","edgeTypes","edgeImgs","nodeIds","Heading","Sidebar","maxHeapFn","maxHeap","isModalShown","extractAllGenes","cBioAlterationData","calculatePatientData","addSampleIconData","sampleIconData","calculateGroupComparisonData","calculateAlterationData","addGenomicDataHandler","CBIO_PROFILE_NAME","getBestPathway","Count","Percentage","CountWithAlteration","PercentageWithAlteration","PathwayMapper","updateGenomicDataColorScheme","geneAltData","perc","altered","sequenced","NaN","datum","datum2","nameWithOrdinal","groupsSet","alteredPercentage","uniqueTypes","percentAltered","gapCount","simplifiedDate","Message","db_id","getDBId","localStorage","getItem","setItem","numberOfUsersInLocal","numberOfUsersConverted","convertToNumber","getUserId","userName","simplifyDate","toLocaleString","addChatMessage","updateScroll","character","converted","powOf10","convertCharacter","changePathwayTitle","studyGeneMap","cancerData","geneAlterationMap","sum","rankingMode","getGeneStudyMap","alterationPerGene","getAlterationAveragePerGene","matchedGenesMap","pathwayGeneMap","enrichedGroup","max","geneCount","geneType","insert","extractMax","getValue","getKey","getBestPathways","currentRankingScheme","setSelectedPathway","geneHash","includePathway","getBestPathwayReRank","redirectedProfile","countOfEnabledProfiles","numberOfEnabledProfiles","getCountOfEnabledProfiles","metadata","warn","enableNewProfile","MAX_ALLOWED_PROFILES_ENABLED","newProfile","getProfileData","visibilityObject","emphasizeQueryGenes","renderTimes","rankPathways","cytoComp","innerWidth","xs","messageBanner","toggleProfileEnabled","setColorMapping","autoClose","hideProgressBar","newestOnTop","closeOnClick","rtl","pauseOnFocusLoss","pauseOnHover","clickable","maxWidth","setUploaders","onChangeFile","setOverlayUploader","overlayFromText","modalId","loadRedirectedPortalData","changePathwayHandler"],"mappings":"2BACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,I,gBClFrDhC,EAAOD,QAAUkC,QAAQ,U,cCAzBjC,EAAOD,QAAUkC,QAAQ,oB,cCAzBjC,EAAOD,QAAUkC,QAAQ,S,cCAzBjC,EAAOD,QAAUkC,QAAQ,uB,cCAzBjC,EAAOD,QAAUkC,QAAQ,W,cCAzBjC,EAAOD,QAAUkC,QAAQ,e,cCAzBjC,EAAOD,QAAUkC,QAAQ,W,cCAzBjC,EAAOD,QAAUkC,QAAQ,c,+1oFCAzBjC,EAAOD,QAAU,8uF,cCAjBC,EAAOD,QAAUkC,QAAQ,mB,cCAzBjC,EAAOD,QAAUkC,QAAQ,gB,cCAzBjC,EAAOD,QAAU,klH,cCAjBC,EAAOD,QAAU,kgH,cCAjBC,EAAOD,QAAUkC,QAAQ,a,cCAzBjC,EAAOD,QAAUkC,QAAQ,e,gCCAzBjC,EAAOD,QAAU,sgB,cCAjBC,EAAOD,QAAU,0hF,cCAjBC,EAAOD,QAAU,0xG,cCAjBC,EAAOD,QAAU,8lD,cCAjBC,EAAOD,QAAUkC,QAAQ,4B,cCAzBjC,EAAOD,QAAUkC,QAAQ,kB,cCAzBjC,EAAOD,QAAU,kwC,cCAjBC,EAAOD,QAAU,s0C,cCAjBC,EAAOD,QAAU,kxC,cCAjBC,EAAOD,QAAU,8zC,cCAjBC,EAAOD,QAAU,syC,cCAjBC,EAAOD,QAAU,kyC,cCAjBC,EAAOD,QAAU,k/J,cCAjBC,EAAOD,QAAU,sgF,cCAjBC,EAAOD,QAAU,0kF,cCAjBC,EAAOD,QAAU,8xD,cCAjBC,EAAOD,QAAU,kyR,cCAjBC,EAAOD,QAAU,0tE,cCAjBC,EAAOD,QAAU,80G,cCAjBC,EAAOD,QAAU,8mT,cCAjBC,EAAOD,QAAU,0gE,cCAjBC,EAAOD,QAAU,89I,cCAjBC,EAAOD,QAAU,89E,cCAjBC,EAAOD,QAAU,06Y,cCAjBC,EAAOD,QAAU,sjD,cCAjBC,EAAOD,QAAU,k4I,cCAjBC,EAAOD,QAAU,s/H,cCAjBC,EAAOD,QAAU,8wM,cCAjBC,EAAOD,QAAU,85H,cCAjBC,EAAOD,QAAU,s5H,cCAjBC,EAAOD,QAAU,kpG,cCAjBC,EAAOD,QAAU,skC,cCAjBC,EAAOD,QAAU,k/K,cCAjBC,EAAOD,QAAU,80I,cCAjBC,EAAOD,QAAU,khL,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","file":"index.es5.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 81);\n","module.exports = require(\"react\");","module.exports = require(\"react-bootstrap\");","module.exports = require(\"mobx\");","module.exports = require(\"autobind-decorator\");","module.exports = require(\"jquery\");","module.exports = require(\"mobx-react\");","module.exports = require(\"lodash\");","module.exports = require(\"cytoscape\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ3cHgiIGhlaWdodD0iNDdweCIgdmlld0JveD0iMCAwIDQ3IDQ3IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NyA0NzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGcgaWQ9IkxheWVyXzFfMTEwXyI+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTE3LjU2NywxNS45MzhsLTIuODU5LTIuNzAyYzAuMzMzLTAuNjA1LDAuNTM5LTEuMjksMC41MzktMi4wMjljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0LTQuMjM5DQoJCQkJYy0yLjM0MywwLTQuMjQzLDEuODk2LTQuMjQzLDQuMjM5YzAsMi4zNDMsMS45LDQuMjQxLDQuMjQzLDQuMjQxYzAuODI2LDAsMS41OS0wLjI0NiwyLjI0Mi0wLjY1NGwyLjg1NSwyLjY5OQ0KCQkJCUMxNi41MzYsMTYuOTIyLDE3LjAyMywxNi4zOTksMTcuNTY3LDE1LjkzOHoiLz4NCgkJCTxwYXRoIGQ9Ik0yOS42NiwxNS42bDMuNzk5LTYuMzkzYzAuMzc0LDAuMTA3LDAuNzYyLDAuMTg0LDEuMTY5LDAuMTg0YzIuMzQ3LDAsNC4yNDQtMS44OTgsNC4yNDQtNC4yNDENCgkJCQljMC0yLjM0Mi0xLjg5Ny00LjIzOS00LjI0NC00LjIzOWMtMi4zNDMsMC00LjIzOSwxLjg5Ni00LjIzOSw0LjIzOWMwLDEuMTYzLDAuNDY5LDIuMjE0LDEuMjI3LDIuOTgxbC0zLjc4Nyw2LjM3NQ0KCQkJCUMyOC40OCwxNC44MDEsMjkuMDk0LDE1LjE2OSwyOS42NiwxNS42eiIvPg0KCQkJPHBhdGggZD0iTTQyLjc2MiwyMC45NTJjLTEuODI0LDAtMy4zNjksMS4xNTktMy45NjgsMi43NzVsLTUuMjc4LTAuNTIxYzAsMC4wNCwwLjAwNiwwLjA3OCwwLjAwNiwwLjExNw0KCQkJCWMwLDAuNjg4LTAuMDc2LDEuMzYtMC4yMTMsMi4wMDlsNS4yNzYsMC41MjFjMC4zMTksMi4wMjQsMi4wNjIsMy41NzYsNC4xNzcsMy41NzZjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzOA0KCQkJCUM0NywyMi44NSw0NS4xMDQsMjAuOTUyLDQyLjc2MiwyMC45NTJ6Ii8+DQoJCQk8cGF0aCBkPSJNMjguMTk3LDM3LjYyNGwtMS4xOC01LjE1NmMtMC42NjYsMC4yMzItMS4zNTksMC4zOTgtMi4wODIsMC40ODFsMS4xODIsNS4xNTdjLTEuMzU1LDAuNzA5LTIuMjksMi4xMS0yLjI5LDMuNzQ2DQoJCQkJYzAsMi4zNDIsMS44OTYsNC4yMzcsNC4yNDMsNC4yMzdjMi4zNDIsMCw0LjIzOC0xLjg5Niw0LjIzOC00LjIzN0MzMi4zMTEsMzkuNTUzLDMwLjQ3OSwzNy42OTIsMjguMTk3LDM3LjYyNHoiLz4NCgkJCTxwYXRoIGQ9Ik0xNC4zNTcsMjUuMzdsLTYuNTcsMi4yMDFjLTAuNzU4LTEuMTU4LTIuMDYzLTEuOTI2LTMuNTQ4LTEuOTI2QzEuODk2LDI1LjY0NSwwLDI3LjU0MiwwLDI5Ljg4NA0KCQkJCWMwLDIuMzQ1LDEuODk2LDQuMjQyLDQuMjM5LDQuMjQyYzIuMzQxLDAsNC4yNDItMS44OTcsNC4yNDItNC4yNDJjMC0wLjA5OC0wLjAyMS0wLjE4OC0wLjAyOS0wLjI4NGw2LjU5MS0yLjIwNw0KCQkJCUMxNC43NDYsMjYuNzUyLDE0LjUxLDI2LjA3NywxNC4zNTcsMjUuMzd6Ii8+DQoJCQk8Y2lyY2xlIGN4PSIyMy44MyIgY3k9IjIzLjMyMyIgcj0iNy4yNzEiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = require(\"react-toastify\");","module.exports = require(\"oncoprintjs\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU1MC44MDFweCIgaGVpZ2h0PSI1NTAuODAxcHgiIHZpZXdCb3g9IjAgMCA1NTAuODAxIDU1MC44MDEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU1MC44MDEgNTUwLjgwMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTE0Ni43NDcsMjc2LjcwOGMwLTEzLjk5OC05LjcxMS0yMi4zNTItMjYuODg3LTIyLjM1MmMtNi45OSwwLTExLjcyNiwwLjY3NS0xNC4yMDQsMS4zNTV2NDQuOTI3DQoJCWMyLjkzMiwwLjY3Niw2LjUzOSwwLjg5NiwxMS41MiwwLjg5NkMxMzUuNDQ5LDMwMS41NDYsMTQ2Ljc0NywyOTIuMjgsMTQ2Ljc0NywyNzYuNzA4eiIvPg0KCTxwYXRoIGQ9Ik00ODguNDI2LDE5Ny4wMTlINDc1LjJ2LTYzLjgxNmMwLTAuMzk4LTAuMDYzLTAuNzk5LTAuMTE2LTEuMjAyYy0wLjAyMS0yLjUzNC0wLjgyNy01LjAyMy0yLjU2Mi02Ljk5NUwzNjYuMzI1LDMuNjk0DQoJCWMtMC4wMzItMC4wMzEtMC4wNjMtMC4wNDItMC4wODUtMC4wNzZjLTAuNjMzLTAuNzA3LTEuMzcxLTEuMjk1LTIuMTUxLTEuODA0Yy0wLjIzMS0wLjE1NS0wLjQ2NC0wLjI4NS0wLjcwNi0wLjQxOQ0KCQljLTAuNjc2LTAuMzY5LTEuMzkzLTAuNjc1LTIuMTMxLTAuODk2Yy0wLjItMC4wNTYtMC4zOC0wLjEzOC0wLjU4LTAuMTlDMzU5Ljg3LDAuMTE5LDM1OS4wMzcsMCwzNTguMTkzLDBIOTcuMg0KCQljLTExLjkxOCwwLTIxLjYsOS42OTMtMjEuNiwyMS42MDF2MTc1LjQxM0g2Mi4zNzdjLTE3LjA0OSwwLTMwLjg3MywxMy44MTgtMzAuODczLDMwLjg3M3YxNjAuNTQ1DQoJCWMwLDE3LjA0MywxMy44MjQsMzAuODcsMzAuODczLDMwLjg3aDEzLjIyNFY1MjkuMmMwLDExLjkwNyw5LjY4MiwyMS42MDEsMjEuNiwyMS42MDFoMzU2LjRjMTEuOTA3LDAsMjEuNi05LjY5MywyMS42LTIxLjYwMQ0KCQlWNDE5LjMwMmgxMy4yMjZjMTcuMDQ0LDAsMzAuODcxLTEzLjgyNywzMC44NzEtMzAuODd2LTE2MC41NEM1MTkuMjk3LDIxMC44MzgsNTA1LjQ3LDE5Ny4wMTksNDg4LjQyNiwxOTcuMDE5eiBNOTcuMiwyMS42MDUNCgkJaDI1MC4xOTN2MTEwLjUxM2MwLDUuOTY3LDQuODQxLDEwLjgsMTAuOCwxMC44aDk1LjQwN3Y1NC4xMDhIOTcuMlYyMS42MDV6IE0yMzQuMzQ0LDMzNS44NnY0NS44MzFoLTMxLjYwMVYyMjkuNTI0aDQwLjE4NA0KCQlsMzEuNjExLDU1Ljc1OWM5LjAyNSwxNi4wMzEsMTguMDY0LDM0Ljk4MywyNC44MjUsNTIuMTU0aDAuNjc1Yy0yLjI1Ny0yMC4xMDMtMi45MzMtNDAuNjQzLTIuOTMzLTYzLjQ0di00NC40NzNoMzEuNjE0djE1Mi4xNjcNCgkJaC0zNi4xMTdsLTMyLjUxNi01OC43MDNjLTkuMDQ5LTE2LjI1My0xOC45NzEtMzUuODkyLTI2LjQzOC01My43MjdsLTAuNjY1LDAuMjIyQzIzMy45MDYsMjg5LjU4LDIzNC4zNDQsMzExLjAyNywyMzQuMzQ0LDMzNS44NnoNCgkJIE03MS41NTYsMzgxLjY5MVYyMzEuNTZjMTAuNjEzLTEuODA0LDI1LjUxNi0zLjE1OSw0Ni41MDYtMy4xNTljMjEuMjE1LDAsMzYuMzUzLDQuMDYxLDQ2LjUwOSwxMi4xOTINCgkJYzkuNjk4LDcuNjczLDE2LjI1NSwyMC4zMTMsMTYuMjU1LDM1LjIxOWMwLDE0Ljg5Ny00Ljk1OSwyNy41NDktMTMuOTk5LDM2LjEyM2MtMTEuNzM4LDExLjA2My0yOS4xMjMsMTYuMDMxLTQ5LjQ0MSwxNi4wMzENCgkJYy00LjUyMiwwLTguNTkzLTAuMjMxLTExLjczNi0wLjY3NXY1NC40MTFINzEuNTU2VjM4MS42OTF6IE00NTMuNjAxLDUyMy4zNTNIOTcuMlY0MTkuMzAyaDM1Ni40VjUyMy4zNTN6IE00ODUuNjUyLDM3NC42ODgNCgkJYy0xMC42MSwzLjYwNy0zMC43MTMsOC41ODUtNTAuODA1LDguNTg1Yy0yNy43NTksMC00Ny44NzItNy4wMDMtNjEuODU3LTIwLjU0NWMtMTMuOTk1LTEzLjEtMjEuNjg0LTMyLjk3LTIxLjQ1Mi01NS4zMTgNCgkJYzAuMjIyLTUwLjU2OSwzNy4wMy03OS40NjMsODYuOTE3LTc5LjQ2M2MxOS42NDQsMCwzNC43ODMsMy44MjksNDIuMjE5LDcuNDQ2bC03LjIxNCwyNy41NDNjLTguMzY5LTMuNjE3LTE4Ljc1Mi02LjU1LTM1LjQ1OC02LjU1DQoJCWMtMjguNjU2LDAtNTAuMzQxLDE2LjI1Ni01MC4zNDEsNDkuMjJjMCwzMS4zODIsMTkuNjQ5LDQ5Ljg5Miw0Ny44NzIsNDkuODkyYzcuODk1LDAsMTQuMjE4LTAuOTAxLDE2LjkzNC0yLjI1N3YtMzEuODM1aC0yMy40OTMNCgkJdi0yNi44NjloNTYuNjc5VjM3NC42ODh6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU1MC44MDFweCIgaGVpZ2h0PSI1NTAuODAxcHgiIHZpZXdCb3g9IjAgMCA1NTAuODAxIDU1MC44MDEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU1MC44MDEgNTUwLjgwMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ4OC40MjYsMTk3LjAxOUg0NzUuMnYtNjMuODE2YzAtMC4zOTgtMC4wNjMtMC43OTktMC4xMTYtMS4yMDJjLTAuMDIxLTIuNTM0LTAuODI3LTUuMDIzLTIuNTYyLTYuOTk1TDM2Ni4zMjUsMy42OTQNCgkJYy0wLjAzMi0wLjAzMS0wLjA2My0wLjA0Mi0wLjA4NS0wLjA3NmMtMC42MzMtMC43MDctMS4zNzEtMS4yOTUtMi4xNTEtMS44MDRjLTAuMjMxLTAuMTU1LTAuNDY0LTAuMjg1LTAuNzA2LTAuNDE5DQoJCWMtMC42NzYtMC4zNjktMS4zOTMtMC42NzUtMi4xMzEtMC44OTZjLTAuMi0wLjA1Ni0wLjM4LTAuMTM4LTAuNTgtMC4xOUMzNTkuODcsMC4xMTksMzU5LjAzNywwLDM1OC4xOTMsMEg5Ny4yDQoJCWMtMTEuOTE4LDAtMjEuNiw5LjY5My0yMS42LDIxLjYwMXYxNzUuNDEzSDYyLjM3N2MtMTcuMDQ5LDAtMzAuODczLDEzLjgxOC0zMC44NzMsMzAuODczdjE2MC41NDUNCgkJYzAsMTcuMDQzLDEzLjgyNCwzMC44NywzMC44NzMsMzAuODdoMTMuMjI0VjUyOS4yYzAsMTEuOTA3LDkuNjgyLDIxLjYwMSwyMS42LDIxLjYwMWgzNTYuNGMxMS45MDcsMCwyMS42LTkuNjkzLDIxLjYtMjEuNjAxDQoJCVY0MTkuMzAyaDEzLjIyNmMxNy4wNDQsMCwzMC44NzEtMTMuODI3LDMwLjg3MS0zMC44N3YtMTYwLjU0QzUxOS4yOTcsMjEwLjgzOCw1MDUuNDcsMTk3LjAxOSw0ODguNDI2LDE5Ny4wMTl6IE05Ny4yLDIxLjYwNQ0KCQloMjUwLjE5M3YxMTAuNTEzYzAsNS45NjcsNC44NDEsMTAuOCwxMC44LDEwLjhoOTUuNDA3djU0LjEwOEg5Ny4yVjIxLjYwNXogTTMzOC44NzEsMjI1LjY3MkwyODQuNTQ1LDM4Ni45NmgtNDIuNTkxDQoJCWwtNTEuNjktMTYxLjI4OGgzOS45NjdsMTkuNjE3LDY4LjE5NmM1LjUwOCwxOS4xNDMsMTAuNTMxLDM3LjU2NywxNC4zNiw1Ny42N2gwLjcxN2M0LjA2MS0xOS4zODUsOS4wODktMzguNTI3LDE0LjU5Mi01Ni45NTMNCgkJbDIwLjU4NS02OC45MThoMzguNzdWMjI1LjY3MnogTTY4LjQ1OCwzNzkuNTRsNy40MTUtMzAuMTUzYzkuODExLDUuMDIxLDI0Ljg4OCwxMC4wNTEsNDAuNDM5LDEwLjA1MQ0KCQljMTYuNzUxLDAsMjUuNjA3LTYuOTM1LDI1LjYwNy0xNy40NjVjMC0xMC4wNTItNy42NjItMTUuNzk1LTI3LjA1LTIyLjczNGMtMjYuOC05LjMyOC00NC4yNjMtMjQuMTY4LTQ0LjI2My00Ny42MTENCgkJYzAtMjcuNTI0LDIyLjk3MS00OC41NzksNjEuMDE0LTQ4LjU3OWMxOC4xODgsMCwzMS41OTEsMy44MjMsNDEuMTU5LDguMTMxbC04LjEyNiwyOS40MzdjLTYuNDY1LTMuMTE2LTE3Ljk0NS03LjY1Ny0zMy43NDUtNy42NTcNCgkJYy0xNS43OTEsMC0yMy40NTQsNy4xODMtMjMuNDU0LDE1LjU1MmMwLDEwLjI5Niw5LjA4OSwxNC44NDIsMjkuOTE3LDIyLjczMWMyOC40NjgsMTAuNTM2LDQxLjg3MSwyNS4zNjUsNDEuODcxLDQ4LjA5NA0KCQljMCwyNy4wNDItMjAuODEyLDUwLjAxMy02NS4wOSw1MC4wMTNDOTUuNzMxLDM4OS4zNDksNzcuNTM4LDM4NC41NzEsNjguNDU4LDM3OS41NHogTTQ1My42MDEsNTIzLjM1M0g5Ny4yVjQxOS4zMDJoMzU2LjRWNTIzLjM1M3oNCgkJIE00ODguOTExLDM3OS41NGMtMTEuMjQzLDMuODIzLTMyLjUzNyw5LjEwMy01My44MzEsOS4xMDNjLTI5LjQzNywwLTUwLjczLTcuNDI2LTY1LjU3LTIxLjc3OQ0KCQljLTE0LjgzOS0xMy44NzUtMjIuOTcxLTM0Ljk0Mi0yMi43MzgtNTguNjI1YzAuMjUzLTUzLjYwNCwzOS4yNTUtODQuMjM1LDkyLjEzNy04NC4yMzVjMjAuODEsMCwzNi44NTIsNC4wNzMsNDQuNzQsNy44OTYNCgkJbC03LjY1NywyOS4yMDJjLTguODU5LTMuODI5LTE5Ljg0OS02Ljk1LTM3LjU2Ny02Ljk1Yy0zMC4zOTYsMC01My4zNTcsMTcuMjMzLTUzLjM1Nyw1Mi4xNzNjMCwzMy4yNjUsMjAuODEsNTIuODgyLDUwLjczLDUyLjg4Mg0KCQljOC4zNzUsMCwxNS4wNzItMC45NiwxNy45NC0yLjM5NXYtMzMuNzQ1aC0yNC44NzV2LTI4LjQ3MWg2MC4wNDlWMzc5LjU0TDQ4OC45MTEsMzc5LjU0eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = require(\"tippy.js\");","module.exports = require(\"file-saver\");","module.exports = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZWRpdCI+PHBhdGggZD0iTTExIDRINGEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyI+PC9wYXRoPjxwYXRoIGQ9Ik0xOC41IDIuNWEyLjEyMSAyLjEyMSAwIDAgMSAzIDNMMTIgMTVsLTQgMSAxLTQgOS41LTkuNXoiPjwvcGF0aD48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMjMuNjI1IDIzLjYyNSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjMuNjI1IDIzLjYyNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzAzMDEwNDsiIGQ9Ik0xMS44MTIsMEM1LjI4OSwwLDAsNS4yODksMCwxMS44MTJzNS4yODksMTEuODEzLDExLjgxMiwxMS44MTNzMTEuODEzLTUuMjksMTEuODEzLTExLjgxMw0KCQlTMTguMzM1LDAsMTEuODEyLDB6IE0xNC4yNzEsMTguMzA3Yy0wLjYwOCwwLjI0LTEuMDkyLDAuNDIyLTEuNDU1LDAuNTQ4Yy0wLjM2MiwwLjEyNi0wLjc4MywwLjE4OS0xLjI2MiwwLjE4OQ0KCQljLTAuNzM2LDAtMS4zMDktMC4xOC0xLjcxNy0wLjUzOXMtMC42MTEtMC44MTQtMC42MTEtMS4zNjdjMC0wLjIxNSwwLjAxNS0wLjQzNSwwLjA0NS0wLjY1OWMwLjAzMS0wLjIyNCwwLjA4LTAuNDc2LDAuMTQ3LTAuNzU5DQoJCWwwLjc2MS0yLjY4OGMwLjA2Ny0wLjI1OCwwLjEyNS0wLjUwMywwLjE3MS0wLjczMWMwLjA0Ni0wLjIzLDAuMDY4LTAuNDQxLDAuMDY4LTAuNjMzYzAtMC4zNDItMC4wNzEtMC41ODItMC4yMTItMC43MTcNCgkJYy0wLjE0My0wLjEzNS0wLjQxMi0wLjIwMS0wLjgxMy0wLjIwMWMtMC4xOTYsMC0wLjM5OCwwLjAyOS0wLjYwNSwwLjA5Yy0wLjIwNSwwLjA2My0wLjM4MywwLjEyLTAuNTI5LDAuMTc2bDAuMjAxLTAuODI4DQoJCWMwLjQ5OC0wLjIwMywwLjk3NS0wLjM3NywxLjQzLTAuNTIxYzAuNDU1LTAuMTQ2LDAuODg1LTAuMjE4LDEuMjktMC4yMThjMC43MzEsMCwxLjI5NSwwLjE3OCwxLjY5MiwwLjUzDQoJCWMwLjM5NSwwLjM1MywwLjU5NCwwLjgxMiwwLjU5NCwxLjM3NmMwLDAuMTE3LTAuMDE0LDAuMzIzLTAuMDQxLDAuNjE3Yy0wLjAyNywwLjI5NS0wLjA3OCwwLjU2NC0wLjE1MiwwLjgxMWwtMC43NTcsMi42OA0KCQljLTAuMDYyLDAuMjE1LTAuMTE3LDAuNDYxLTAuMTY3LDAuNzM2Yy0wLjA0OSwwLjI3NS0wLjA3MywwLjQ4NS0wLjA3MywwLjYyNmMwLDAuMzU2LDAuMDc5LDAuNTk5LDAuMjM5LDAuNzI4DQoJCWMwLjE1OCwwLjEyOSwwLjQzNSwwLjE5NCwwLjgyNywwLjE5NGMwLjE4NSwwLDAuMzkyLTAuMDMzLDAuNjI2LTAuMDk3YzAuMjMyLTAuMDY0LDAuNC0wLjEyMSwwLjUwNi0wLjE3TDE0LjI3MSwxOC4zMDd6DQoJCSBNMTQuMTM3LDcuNDI5Yy0wLjM1MywwLjMyOC0wLjc3OCwwLjQ5Mi0xLjI3NSwwLjQ5MmMtMC40OTYsMC0wLjkyNC0wLjE2NC0xLjI4LTAuNDkyYy0wLjM1NC0wLjMyOC0wLjUzMy0wLjcyNy0wLjUzMy0xLjE5Mw0KCQljMC0wLjQ2NSwwLjE4LTAuODY1LDAuNTMzLTEuMTk2YzAuMzU2LTAuMzMyLDAuNzg0LTAuNDk3LDEuMjgtMC40OTdjMC40OTcsMCwwLjkyMywwLjE2NSwxLjI3NSwwLjQ5Nw0KCQljMC4zNTMsMC4zMzEsMC41MywwLjczMSwwLjUzLDEuMTk2QzE0LjY2Nyw2LjcwMywxNC40OSw3LjEwMSwxNC4xMzcsNy40Mjl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDU3IDU3Ig0KICAgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTcgNTc7Ig0KICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImFkZC1zZWxlY3RlZC1uZXcuc3ZnIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi40ICg1ZGE2ODljMzEzLCAyMDE5LTAxLTE0KSI+PG1ldGFkYXRhDQogICBpZD0ibWV0YWRhdGE0NyI+PHJkZjpSREY+PGNjOldvcmsNCiAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICBpZD0iZGVmczQ1Ij4NCgkNCgkNCgkNCgkNCjwvZGVmcz48c29kaXBvZGk6bmFtZWR2aWV3DQogICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgZ3JpZHRvbGVyYW5jZT0iMTAiDQogICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEwOTciDQogICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI3MTkiDQogICBpZD0ibmFtZWR2aWV3NDMiDQogICBzaG93Z3JpZD0iZmFsc2UiDQogICBpbmtzY2FwZTp6b29tPSI0LjE0MDM1MDkiDQogICBpbmtzY2FwZTpjeD0iLTEwLjc0Nzg4MSINCiAgIGlua3NjYXBlOmN5PSIyOC41Ig0KICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICBpbmtzY2FwZTp3aW5kb3cteT0iMCINCiAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiDQogICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+DQo8cGF0aA0KICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgIGlkPSJwYXRoMiINCiAgIGQ9Ik0gMjguNjYsNiBIIDkuMzQgQyA3LjQ5OCw2IDYsNy40OTggNiw5LjM0IFYgMjguNjYgQyA2LDMwLjUwMiA3LjQ5OCwzMiA5LjM0LDMyIEggMjguNjYgQyAzMC41MDIsMzIgMzIsMzAuNTAyIDMyLDI4LjY2IFYgOS4zNCBDIDMyLDcuNDk4IDMwLjUwMiw2IDI4LjY2LDYgWiIgLz48cGF0aA0KICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgIGlkPSJwYXRoOCINCiAgIGQ9Ik0gNTEsMzcgSCA0MSBWIDI3IGMgMCwtMS4xMDQgLTAuODk2LC0yIC0yLC0yIC0xLjEwNCwwIC0yLDAuODk2IC0yLDIgViAzNyBIIDI3IGMgLTEuMTA0LDAgLTIsMC44OTYgLTIsMiAwLDEuMTA0IDAuODk2LDIgMiwyIGggMTAgdiAxMCBjIDAsMS4xMDQgMC44OTYsMiAyLDIgMS4xMDQsMCAyLC0wLjg5NiAyLC0yIFYgNDEgaCAxMCBjIDEuMTA0LDAgMiwtMC44OTYgMiwtMiAwLC0xLjEwNCAtMC44OTYsLTIgLTIsLTIgeiIgLz4NCjxnDQogICBpZD0iZzEyIj4NCjwvZz4NCjxnDQogICBpZD0iZzE0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzE2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzE4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzIwIj4NCjwvZz4NCjxnDQogICBpZD0iZzIyIj4NCjwvZz4NCjxnDQogICBpZD0iZzI0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzI2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzI4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzMwIj4NCjwvZz4NCjxnDQogICBpZD0iZzMyIj4NCjwvZz4NCjxnDQogICBpZD0iZzM0Ij4NCjwvZz4NCjxnDQogICBpZD0iZzM2Ij4NCjwvZz4NCjxnDQogICBpZD0iZzM4Ij4NCjwvZz4NCjxnDQogICBpZD0iZzQwIj4NCjwvZz4NCjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTcgNTciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU3IDU3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNMjIuNjYsMEgzLjM0QzEuNDk4LDAsMCwxLjQ5OCwwLDMuMzR2MTkuMzJDMCwyNC41MDIsMS40OTgsMjYsMy4zNCwyNmgxOS4zMmMxLjg0MiwwLDMuMzQtMS40OTgsMy4zNC0zLjM0VjMuMzQNCgkJQzI2LDEuNDk4LDI0LjUwMiwwLDIyLjY2LDB6Ii8+DQoJPHBhdGggZD0iTTMzLjM0LDI2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMy4zNEM1NiwxLjQ5OCw1NC41MDIsMCw1Mi42NiwwSDMzLjM0QzMxLjQ5OCwwLDMwLDEuNDk4LDMwLDMuMzR2MTkuMzINCgkJQzMwLDI0LjUwMiwzMS40OTgsMjYsMzMuMzQsMjZ6Ii8+DQoJPHBhdGggZD0iTTIyLjY2LDMwSDMuMzRDMS40OTgsMzAsMCwzMS40OTgsMCwzMy4zNHYxOS4zMkMwLDU0LjUwMiwxLjQ5OCw1NiwzLjM0LDU2aDE5LjMyYzEuODQyLDAsMy4zNC0xLjQ5OCwzLjM0LTMuMzRWMzMuMzQNCgkJQzI2LDMxLjQ5OCwyNC41MDIsMzAsMjIuNjYsMzB6Ii8+DQoJPHBhdGggZD0iTTU1LDQxSDQ1VjMxYzAtMS4xMDQtMC44OTYtMi0yLTJzLTIsMC44OTYtMiwydjEwSDMxYy0xLjEwNCwwLTIsMC44OTYtMiwyczAuODk2LDIsMiwyaDEwdjEwYzAsMS4xMDQsMC44OTYsMiwyLDINCgkJczItMC44OTYsMi0yVjQ1aDEwYzEuMTA0LDAsMi0wLjg5NiwyLTJTNTYuMTA0LDQxLDU1LDQxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = require(\"tippy.js/dist/tippy.css\");","module.exports = require(\"react-tooltip\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTM1LjQzNiwwSDcuNzU1djYzLjk1MmgyNy42ODJMMzUuNDM2LDBMMzUuNDM2LDB6IE0zMi41NzMsNjEuMDg5SDEwLjYxOFYyLjg2M2gyMS45NTVWNjEuMDg5eiBNNzAuMjc0LDI2LjQ4OGgtMjcuNjgNCgkJdjM3LjQ2NGgyNy42ODJWMjYuNDg4SDcwLjI3NHogTTY3LjQxMiw2MS4wODlINDUuNDU3VjI5LjM1MWgyMS45NTVWNjEuMDg5eiBNNzQuNTcxLDcwLjM5NXY1LjAxMkgwLjgzNXYtNS4wMTJINzQuNTcxeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjkwLjk1NnB4IiBoZWlnaHQ9IjkwLjk1N3B4IiB2aWV3Qm94PSIwIDAgOTAuOTU2IDkwLjk1NyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgOTAuOTU2IDkwLjk1NzsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQxLjY2MSwxMy41MDFIMTMuOTc5djYzLjk1M2gyNy42ODJWMTMuNTAxeiBNMzguNzk3LDc0LjU5MUgxNi44NDJWMTYuMzY2aDIxLjk1NVY3NC41OTF6IE03Ni40OTksMjYuNzQ3SDQ4LjgxOHYzNy40NjUNCgkJSDc2LjVMNzYuNDk5LDI2Ljc0N0w3Ni40OTksMjYuNzQ3eiBNNzMuNjM3LDYxLjM0N0g1MS42ODJWMjkuNjA5aDIxLjk1NVY2MS4zNDd6IE0xMC45NzgsNDIuOTczdjUuMDExSDB2LTUuMDExSDEwLjk3OHoNCgkJIE05MC45NTYsNDIuOTczdjUuMDExSDc5Ljk3OXYtNS4wMTFIOTAuOTU2eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTM1LjQzNiwxMS40NTRINy43NTV2NjMuOTUyaDI3LjY4MkwzNS40MzYsMTEuNDU0TDM1LjQzNiwxMS40NTR6IE0zMi41NzMsNzIuNTQzSDEwLjYxOFYxNC4zMTdoMjEuOTU1VjcyLjU0M3oNCgkJIE03MC4yNzQsMTEuNDU0aC0yNy42OHYzNy40NjRoMjcuNjgyVjExLjQ1NEg3MC4yNzR6IE02Ny40MTIsNDYuMDU1SDQ1LjQ1N1YxNC4zMTdoMjEuOTU1VjQ2LjA1NXogTTAuODM1LDUuMDExVjBoNzMuNzM2djUuMDExDQoJCUgwLjgzNXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjkwLjk1NnB4IiBoZWlnaHQ9IjkwLjk1NnB4IiB2aWV3Qm94PSIwIDAgOTAuOTU2IDkwLjk1NiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgOTAuOTU2IDkwLjk1NjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTc3LjQ1NCw0MS42NjFWMTMuOTc5SDEzLjUwMnYyNy42ODJINzcuNDU0eiBNMTYuMzY1LDM4Ljc5N1YxNi44NDJoNTguMjI2djIxLjk1NUgxNi4zNjV6IE02NC4yMSw3Ni40OTlWNDguODE4SDI2Ljc0Ng0KCQlWNzYuNUw2NC4yMSw3Ni40OTlMNjQuMjEsNzYuNDk5eiBNMjkuNjA5LDczLjYzN1Y1MS42ODJoMzEuNzM3djIxLjk1NUgyOS42MDl6IE00Ny45ODIsMTAuOTc4aC01LjAxVjBoNS4wMVYxMC45Nzh6DQoJCSBNNDcuOTgyLDkwLjk1NmgtNS4wMVY3OS45NzloNS4wMVY5MC45NTZ6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTc1LjQwNiwzNS40MzZWNy43NTVIMTEuNDU0djI3LjY4Mkw3NS40MDYsMzUuNDM2TDc1LjQwNiwzNS40MzZ6IE0xNC4zMTcsMzIuNTczVjEwLjYxOGg1OC4yMjZ2MjEuOTU1SDE0LjMxN3oNCgkJIE00OC45MTgsNzAuMjc1VjQyLjU5NUgxMS40NTR2MjcuNjgyTDQ4LjkxOCw3MC4yNzVMNDguOTE4LDcwLjI3NXogTTE0LjMxNyw2Ny40MTJWNDUuNDU3aDMxLjczOHYyMS45NTVIMTQuMzE3eiBNNS4wMTEsNzQuNTcxSDANCgkJVjAuODM1aDUuMDExVjc0LjU3MXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc1LjQwNnB4IiBoZWlnaHQ9Ijc1LjQwNnB4IiB2aWV3Qm94PSIwIDAgNzUuNDA2IDc1LjQwNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzUuNDA2IDc1LjQwNjsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTYzLjk1MiwzNS40MzZWNy43NTVIMHYyNy42ODJMNjMuOTUyLDM1LjQzNkw2My45NTIsMzUuNDM2eiBNMi44NjMsMzIuNTczVjEwLjYxOEg2MS4wOXYyMS45NTVIMi44NjN6IE02My45NTIsNzAuMjc1DQoJCVY0Mi41OTVIMjYuNDg4djI3LjY4Mkw2My45NTIsNzAuMjc1TDYzLjk1Miw3MC4yNzV6IE0yOS4zNTEsNjcuNDEyVjQ1LjQ1N2gzMS43Mzd2MjEuOTU1SDI5LjM1MXogTTcwLjM5NSwwLjgzNWg1LjAxMnY3My43MzYNCgkJaC01LjAxMlYwLjgzNXoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMS4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDYxMiA2MTIiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA2MTIgNjEyOyINCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImRlbGV0ZS1zaW1wbGUuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDMiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnM0MSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlkPSJuYW1lZHZpZXczOSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciDQogICAgIGlua3NjYXBlOmN4PSIyOTUuMDM0MDgiDQogICAgIGlua3NjYXBlOmN5PSIzMzAuODU0NDgiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9Imc1Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Nzg4MTM1LDAsMCwwLjk5Nzg4MTM1LDEuNzMwNDAxMiwwLjkyMzcyODQ3KSI+PHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNyINCiAgICAgICBkPSJNIDU4Ny44MjYsMTg2Ljk2NiBDIDU3MS43MSwxNDkuNjM0IDU0OS44ODIsMTE3LjE5OCA1MjIuMzQyLDg5LjY1OCA0OTQuODAyLDYyLjExOCA0NjIuMzY2LDQwLjI5IDQyNS4wMzQsMjQuMTc0IDM4Ny43MDIsOC4wNTggMzQ4LjAyNCwwIDMwNiwwIDI3Ny44NDgsMCAyNTAuNzE2LDMuNjcyIDIyNC42MDQsMTEuMDE2IDE5OC40OTIsMTguMzYgMTc0LjExNCwyOC42NjIgMTUxLjQ3LDQxLjkyMiAxMjguODI2LDU1LjE4MiAxMDguMjIyLDcxLjA5NCA4OS42NTgsODkuNjU4IDcxLjA5NCwxMDguMjIyIDU1LjE4MiwxMjguODI2IDQxLjkyMiwxNTEuNDcgMjguNjYyLDE3NC4xMTYgMTguMzYsMTk4LjQ5MiAxMS4wMTYsMjI0LjYwNCAzLjY3MiwyNTAuNzE2IDAsMjc3Ljg0OCAwLDMwNiBjIDAsMjguMTUyIDMuNjcyLDU1LjI4NCAxMS4wMTYsODEuMzk2IDcuMzQ0LDI2LjExIDE3LjY0Niw1MC40ODcgMzAuOTA2LDczLjEzNCAxMy4yNiwyMi42NDQgMjkuMTcyLDQzLjI0OSA0Ny43MzYsNjEuODEyIDE4LjU2NCwxOC41NjQgMzkuMTY4LDM0LjQ3OCA2MS44MTIsNDcuNzM2IDIyLjY0NCwxMy4yNiA0Ny4wMjIsMjMuNTYxIDczLjEzNCwzMC45MDYgQyAyNTAuNzE2LDYwOC4zMjggMjc3Ljg0OCw2MTIgMzA2LDYxMiBjIDI4LjE1MiwwIDU1LjI4NCwtMy42NzIgODEuMzk2LC0xMS4wMTYgMjYuMTExLC03LjM0NiA1MC40ODgsLTE3LjY0NiA3My4xMzUsLTMwLjkwNiAyMi42NDQsLTEzLjI1OSA0My4yNDksLTI5LjE3MiA2MS44MTIsLTQ3LjczNiAxOC41NjQsLTE4LjU2MyAzNC40NzgsLTM5LjE2OCA0Ny43MzYsLTYxLjgxMiAxMy4yNiwtMjIuNjQ2IDIzLjU2MSwtNDcuMDIzIDMwLjkwNiwtNzMuMTM1IEMgNjA4LjMyOCwzNjEuMjg0IDYxMiwzMzQuMTUyIDYxMiwzMDYgNjEyLDI2My45NzYgNjAzLjk0MiwyMjQuMjk4IDU4Ny44MjYsMTg2Ljk2NiBaIE0gNDY4LjE4LDM5MS42OCBjIDIuMDQsMi4wNCAzLjA2Myw0LjI4NCAzLjA2Myw2LjczMiAwLDIuNDQ4IC0xLjAyMSw0LjQ4OCAtMy4wNjMsNi4xMiBsIC01OS45NzYsNjAuNTg4IGMgLTEuNjMxLDEuNjMyIC0zLjg3NiwyLjQ0OCAtNi43MzIsMi40NDggLTIuODU0LDAgLTQuODk1LC0wLjgxNiAtNi4xMiwtMi40NDggTCAzMDkuMDYsMzc4LjgyOCAyMjMuMzgsNDY1LjEyIGMgLTIuNDQ4LDEuNjMyIC00LjY5MiwyLjQ0OCAtNi43MzIsMi40NDggLTEuNjMyLDAgLTMuNjcyLC0wLjgxNiAtNi4xMiwtMi40NDggbCAtNTkuOTc2LC02MC41ODggYyAtMi4wNCwtMS4yMjYgLTMuMDYsLTMuMjY3IC0zLjA2LC02LjEyIDAsLTIuNDQ4IDEuMDIsLTQuNjkyIDMuMDYsLTYuNzMyIGwgODUuNjgsLTg1LjY4IC04NS42OCwtODUuNjggYyAtMi4wNCwtMi4wNCAtMy4wNiwtNC4yODQgLTMuMDYsLTYuNzMyIDAsLTIuODU2IDEuMDIsLTQuODk2IDMuMDYsLTYuMTIgbCA1OS45NzYsLTYwLjU4OCBjIDEuNjMyLC0xLjYzMiAzLjY3MiwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDg1LjY4LDg2LjI5MiA4Ni4yOTIsLTg2LjI5MiBjIDEuNjM1LC0xLjYzMiAzLjY3NSwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDU5Ljk3Niw2MC41ODggYyAyLjA0LDEuNjMyIDMuMDYzLDMuNjcyIDMuMDYzLDYuMTIgMCwyLjQ0OCAtMS4wMjEsNC42OTIgLTMuMDYzLDYuNzMyIEwgMzgyLjUsMzA2IGwgODUuNjgsODUuNjggeiINCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48Zw0KICAgICBpZD0iZzM3IiAvPjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjU0MS45MTFweCIgaGVpZ2h0PSI1NDEuOTExcHgiIHZpZXdCb3g9IjAgMCA1NDEuOTExIDU0MS45MTEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU0MS45MTEgNTQxLjkxMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ2Ny44MjYsOC43ODF2NDcuNDUxSDc0LjA5MVY4Ljc4MWMwLTQuNjA4LTMuNzI5LTguMzM0LTguMzM0LTguMzM0Yy00LjYwNywwLTguMzM0LDMuNzI3LTguMzM0LDguMzM0djQ5LjA2OEg4LjMzNA0KCQlDMy43Myw1Ny44NDksMCw2MS41ODQsMCw2Ni4xODNjMCw0LjYwNywzLjczLDguMzM0LDguMzM0LDguMzM0aDQ5LjA4M3YzOTIuODY4SDguMzM0Yy00LjYwNCwwLTguMzM0LDMuNzI5LTguMzM0LDguMzM0DQoJCWMwLDQuNjEsMy43Myw4LjMzNCw4LjMzNCw4LjMzNGg0OS4wODN2NDkuMDc3YzAsNC42MDQsMy43MjcsOC4zMzQsOC4zMzQsOC4zMzRjNC42MDQsMCw4LjMzNC0zLjcyOSw4LjMzNC04LjMzNHYtNDkuMDc3aDM5My43NA0KCQl2NDkuMDc3YzAsNC42MDQsMy43MjksOC4zMzQsOC4zMzQsOC4zMzRjNC42MSwwLDguMzM0LTMuNzI5LDguMzM0LTguMzM0di00OS4wNzdoNDkuMDgzYzQuNjA0LDAsOC4zMzQtMy43MjQsOC4zMzQtOC4zMzQNCgkJYzAtNC42MDQtMy43MjktOC4zMzQtOC4zMzQtOC4zMzRoLTQ4LjMzMlY3NC41MTdoNDguMzMyYzQuNjA0LDAsOC4zMzQtMy43MjcsOC4zMzQtOC4zMzRjMC00LjU5OS0zLjcyOS04LjMzNC04LjMzNC04LjMzNGgtNDkuMDgzDQoJCVY4Ljc4MWMwLTQuNjA4LTMuNzI0LTguMzM0LTguMzM0LTguMzM0QzQ3MS41NTUsMC40NDYsNDY3LjgyNiw0LjE3Myw0NjcuODI2LDguNzgxeiBNNDY4LjIwNCwzNDAuNTI4djEyNi44NTdIMzQwLjQxM1YzNDAuNTI4DQoJCUg0NjguMjA0eiBNMzM0Ljg1NywzNDAuNTI4djEyNi44NTdIMjA3LjQzNlYzNDAuNTI4SDMzNC44NTd6IE0yMDEuNTA0LDM0MC41Mjh2MTI2Ljg1N0g3NC4wOTFWMzQwLjUyOEgyMDEuNTA0eiBNNDY4LjIwNCwyMDcuMTcyDQoJCXYxMjcuOEgzNDAuNDEzdi0xMjcuOEg0NjguMjA0eiBNMzM0Ljg1NywyMDcuMTcydjEyNy44SDIwNy40MzZ2LTEyNy44SDMzNC44NTd6IE0yMDEuNTA0LDIwNy4xNzJ2MTI3LjhINzQuMDkxdi0xMjcuOEgyMDEuNTA0eg0KCQkgTTQ2OC4yMDQsNzMuODI5djEyNy43ODhIMzQwLjQxM1Y3My44MjlINDY4LjIwNHogTTMzNC44NTcsNzMuODI5djEyNy43ODhIMjA3LjQzNlY3My44MjlIMzM0Ljg1N3ogTTIwMS41MDQsNzMuODI5djEyNy43ODgNCgkJSDc0LjA5MVY3My44MjlIMjAxLjUwNHogTTMyMy40MTQsODMuODg1VjE4OC43OUgyMTguNTA2VjgzLjg4NUgzMjMuNDE0eiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQxOHB4IiBoZWlnaHQ9IjQxOHB4IiB2aWV3Qm94PSIwIDAgNDE4IDQxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDE4IDQxODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTkxLjYwNiwxNDMuNzAzYy0zLjE0Ni0zLjE0Ni03Ljg3Ny00LjA4Ny0xMS45ODgtMi4zODVjLTQuMTEsMS43MDMtNi43OSw1LjcxNC02Ljc5LDEwLjE2M3YxMTUuMDM3DQoJCQkJYzAsNC40NDksMi42OCw4LjQ2MSw2Ljc5LDEwLjE2NGMxLjM2MSwwLjU2MywyLjc5LDAuODM2LDQuMjA4LDAuODM2YzIuODYyLDAsNS42NzYtMS4xMTYsNy43OC0zLjIyMmw1Ny41Mi01Ny41MTkNCgkJCQljMi4wNjMtMi4wNjMsMy4yMjItNC44NjEsMy4yMjItNy43NzhzLTEuMTU5LTUuNzE2LTMuMjIyLTcuNzc4TDkxLjYwNiwxNDMuNzAzeiIvPg0KCQkJPHBhdGggZD0iTTMzOC4zODIsMTQxLjMxOGMtNC4xMDctMS43LTguODQxLTAuNzYzLTExLjk4NywyLjM4NWwtNTcuNTIxLDU3LjUxOWMtMi4wNjIsMi4wNjMtMy4yMjIsNC44NjEtMy4yMjIsNy43NzgNCgkJCQlzMS4xNTgsNS43MTYsMy4yMjIsNy43NzdsNTcuNTIxLDU3LjUyYzIuMTA0LDIuMTA0LDQuOTE4LDMuMjIzLDcuNzc5LDMuMjIzYzEuNDE3LDAsMi44NDgtMC4yNzIsNC4yMDgtMC44MzgNCgkJCQljNC4xMS0xLjcwMyw2Ljc5LTUuNzE0LDYuNzktMTAuMTYyVjE1MS40ODFDMzQ1LjE3MiwxNDcuMDMyLDM0Mi40OTIsMTQzLjAyMSwzMzguMzgyLDE0MS4zMTh6Ii8+DQoJCQk8cGF0aCBkPSJNMjEyLDBoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2MzVjMCw2LjA3NSw0LjkyNSwxMSwxMSwxMWg2YzYuMDc1LDAsMTEtNC45MjUsMTEtMTFWMTFDMjIzLDQuOTI1LDIxOC4wNzUsMCwyMTIsMHoiDQoJCQkJLz4NCgkJCTxwYXRoIGQ9Ik0yMTIsOTUuMzUyaC02Yy02LjA3NSwwLTExLDQuOTI1LTExLDExdjcyLjQ3M2MwLDYuMDc1LDQuOTI1LDExLDExLDExaDZjNi4wNzUsMCwxMS00LjkyNSwxMS0xMXYtNzIuNDczDQoJCQkJQzIyMywxMDAuMjc2LDIxOC4wNzUsOTUuMzUyLDIxMiw5NS4zNTJ6Ii8+DQoJCQk8cGF0aCBkPSJNMjEyLDIyOC4xNzZoLTZjLTYuMDc1LDAtMTEsNC45MjYtMTEsMTF2NzIuNDc0YzAsNi4wNzUsNC45MjUsMTEsMTEsMTFoNmM2LjA3NSwwLDExLTQuOTI1LDExLTExdi03Mi40NzQNCgkJCQlDMjIzLDIzMy4xMDIsMjE4LjA3NSwyMjguMTc2LDIxMiwyMjguMTc2eiIvPg0KCQkJPHBhdGggZD0iTTIxMiwzNjFoLTZjLTYuMDc1LDAtMTEsNC45MjUtMTEsMTF2MzVjMCw2LjA3NSw0LjkyNSwxMSwxMSwxMWg2YzYuMDc1LDAsMTEtNC45MjUsMTEtMTF2LTM1DQoJCQkJQzIyMywzNjUuOTI1LDIxOC4wNzUsMzYxLDIxMiwzNjF6Ii8+DQoJCTwvZz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ5Ny4xOTlweCIgaGVpZ2h0PSI0OTcuMTk5cHgiIHZpZXdCb3g9IjAgMCA0OTcuMTk5IDQ5Ny4xOTkiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ5Ny4xOTkgNDk3LjE5OTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTE5MS4yLDI0OC42YzAtMTUuMyw1LjctMjguNywxNy4yLTQwLjJzMjQuOS0xNy4yLDQwLjItMTcuMkwxOTEuMiwyNDguNnogTTE3NCwyNjUuOGMtMS45LTUuNy0xLjktMTEuNS0xLjktMTcuMg0KCQljMC00Mi4xLDM0LjQtNzYuNSw3Ni41LTc2LjVjNS43MDEsMCwxMS41LDAsMTcuMjAxLDEuOWw1MS42LTUxLjZjLTIxLTUuNy00NC03LjctNjguOS03LjdDNzYuNSwxMTQuNywwLDI0OC42LDAsMjQ4LjYNCgkJczMwLjYsNTMuNSw5Ny41LDkzLjdMMTc0LDI2NS44eiBNMzA2LDI0OC42TDI0OC42LDMwNmMxNS4zLDAsMjguNzAxLTUuNyw0MC4yMDEtMTcuMkMzMDAuMTk5LDI3Ny4zLDMwNiwyNjMuODk5LDMwNiwyNDguNnoNCgkJIE0zOTkuNjk5LDE1NC44OTlsLTc2LjUsNzYuNWMxLjksNS43LDEuOSwxMS41LDEuOSwxNy4yYzAsNDIuMS0zNC40LDc2LjUtNzYuNSw3Ni41Yy01LjcsMC0xMS41LDAtMTcuMi0xLjlMMTc5LjgsMzc0LjgNCgkJYzIxLDUuNyw0NCw3LjYsNjguOCw3LjZjMTcyLjA5OSwwLDI0OC41OTktMTMzLjksMjQ4LjU5OS0xMzMuOVM0NjYuNiwxOTUuMSwzOTkuNjk5LDE1NC44OTl6IE00MDEuNCw3Ni44OTlsLTMyNC41LDMyNC41DQoJCWwxOC45LDE4LjlMNDIwLjQsOTUuN0w0MDEuNCw3Ni44OTl6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ4NS4yMTVweCINCiAgIGhlaWdodD0iNDg1LjIxNXB4Ig0KICAgdmlld0JveD0iMCAwIDQ4NS4yMTUgNDg1LjIxNSINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ4NS4yMTUgNDg1LjIxNTsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJfbGF5b3V0LXByb3BlcnRpZXMuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGUgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEwODkiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjY2NiINCiAgICAgaWQ9Im5hbWVkdmlldzM3Ig0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOnpvb209IjAuNDg2MzgyMzMiDQogICAgIGlua3NjYXBlOmN4PSItNzYuMzQ1OTcyIg0KICAgICBpbmtzY2FwZTpjeT0iNDA3LjA4NzE2Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNjQ5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNTAiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9IkNhcGFfMSIgLz48Zw0KICAgICBpZD0iZzEwMzQ5Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMzMuNjE5OTE5LDIwLjA0OTY5MykiPjxnDQogICAgICAgaWQ9IkxheWVyXzFfMTEwXyI+PGcNCiAgICAgICAgIGlkPSJnMTAzNTIiPjxwYXRoDQogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICAgIGQ9Im0gMTcuNTY3LDE1LjkzOCAtMi44NTksLTIuNzAyIGMgMC4zMzMsLTAuNjA1IDAuNTM5LC0xLjI5IDAuNTM5LC0yLjAyOSAwLC0yLjM0MiAtMS44OTcsLTQuMjM5IC00LjI0LC00LjIzOSAtMi4zNDMsMCAtNC4yNDMsMS44OTYgLTQuMjQzLDQuMjM5IDAsMi4zNDMgMS45LDQuMjQxIDQuMjQzLDQuMjQxIDAuODI2LDAgMS41OSwtMC4yNDYgMi4yNDIsLTAuNjU0IGwgMi44NTUsMi42OTkgYyAwLjQzMiwtMC41NzEgMC45MTksLTEuMDk0IDEuNDYzLC0xLjU1NSB6Ig0KICAgICAgICAgICBpZD0icGF0aDEwMzU0IiAvPjxwYXRoDQogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICAgIGQ9Im0gMjkuNjYsMTUuNiAzLjc5OSwtNi4zOTMgYyAwLjM3NCwwLjEwNyAwLjc2MiwwLjE4NCAxLjE2OSwwLjE4NCAyLjM0NywwIDQuMjQ0LC0xLjg5OCA0LjI0NCwtNC4yNDEgMCwtMi4zNDIgLTEuODk3LC00LjIzOSAtNC4yNDQsLTQuMjM5IC0yLjM0MywwIC00LjIzOSwxLjg5NiAtNC4yMzksNC4yMzkgMCwxLjE2MyAwLjQ2OSwyLjIxNCAxLjIyNywyLjk4MSBsIC0zLjc4Nyw2LjM3NSBjIDAuNjUxLDAuMjk1IDEuMjY1LDAuNjYzIDEuODMxLDEuMDk0IHoiDQogICAgICAgICAgIGlkPSJwYXRoMTAzNTYiIC8+PHBhdGgNCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgICAgZD0ibSA0Mi43NjIsMjAuOTUyIGMgLTEuODI0LDAgLTMuMzY5LDEuMTU5IC0zLjk2OCwyLjc3NSBsIC01LjI3OCwtMC41MjEgYyAwLDAuMDQgMC4wMDYsMC4wNzggMC4wMDYsMC4xMTcgMCwwLjY4OCAtMC4wNzYsMS4zNiAtMC4yMTMsMi4wMDkgbCA1LjI3NiwwLjUyMSBjIDAuMzE5LDIuMDI0IDIuMDYyLDMuNTc2IDQuMTc3LDMuNTc2IDIuMzQyLDAgNC4yMzgsLTEuODk2IDQuMjM4LC00LjIzOCAwLC0yLjM0MSAtMS44OTYsLTQuMjM5IC00LjIzOCwtNC4yMzkgeiINCiAgICAgICAgICAgaWQ9InBhdGgxMDM1OCIgLz48cGF0aA0KICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgICBkPSJtIDI4LjE5NywzNy42MjQgLTEuMTgsLTUuMTU2IGMgLTAuNjY2LDAuMjMyIC0xLjM1OSwwLjM5OCAtMi4wODIsMC40ODEgbCAxLjE4Miw1LjE1NyBjIC0xLjM1NSwwLjcwOSAtMi4yOSwyLjExIC0yLjI5LDMuNzQ2IDAsMi4zNDIgMS44OTYsNC4yMzcgNC4yNDMsNC4yMzcgMi4zNDIsMCA0LjIzOCwtMS44OTYgNC4yMzgsLTQuMjM3IDAuMDAzLC0yLjI5OSAtMS44MjksLTQuMTYgLTQuMTExLC00LjIyOCB6Ig0KICAgICAgICAgICBpZD0icGF0aDEwMzYwIiAvPjxjaXJjbGUNCiAgICAgICAgICAgY3g9IjIzLjgzIg0KICAgICAgICAgICBjeT0iMjMuMzIzIg0KICAgICAgICAgICByPSI3LjI3MDk5OTkiDQogICAgICAgICAgIGlkPSJjaXJjbGUxMDM2NCIgLz48L2c+PC9nPjwvZz48Zw0KICAgICBpZD0iZzEwMzY2Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM2OCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzNzAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzcyIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM3NCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzNzYiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzc4Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM4MCINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzODIiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzg0Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM4NiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzODgiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzEwMzkwIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjU1NTY1MSwwLDAsOS41NTU2NTEsMTcuNjE5OTE5LDE4LjA0OTY5MykiIC8+PGcNCiAgICAgaWQ9ImcxMDM5MiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoOS41NTU2NTEsMCwwLDkuNTU1NjUxLDE3LjYxOTkxOSwxOC4wNDk2OTMpIiAvPjxnDQogICAgIGlkPSJnMTAzOTQiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNTU1NjUxLDAsMCw5LjU1NTY1MSwxNy42MTk5MTksMTguMDQ5NjkzKSIgLz48Zw0KICAgICBpZD0iZzQzMjAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDQuNzU0NDI3MSwwLDAsNC43NTQ0MjcxLDcuODM5OTM2MSwyNjAuNzI3NDEpIj48Zw0KICAgICAgIGlkPSJnNDI4MCI+PHBhdGgNCiAgICAgICAgIGlkPSJwYXRoNDI4MiINCiAgICAgICAgIGQ9Im0gNDEuNTM0LDI4LjY2IDEuOTU3LDAgQyA0NC44NzcsMjguNjYgNDYsMjcuNTM2IDQ2LDI2LjE1IGwgMCwtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IGwgLTEuOTUxLDAgMCwwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgbCAwLjAwNiwwIDAsLTEuOTUxIEMgMjguNjYsMS4xMjQgMjcuNTM3LDAgMjYuMTUsMCBsIC02LjMsMCBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSBsIDAsMS45NTUgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IGwgMCwtMC4wMDUgLTEuOTUxLDAgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSBsIDAsNi4zMDEgYyAwLDEuMzg3IDEuMTI0LDIuNTExIDIuNTA5LDIuNTExIGwgMS45NjQsMCAtMC4wMDYsLTAuMDE1IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IDAsMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBsIDYuMywwIGMgMS4zODcsMCAyLjUxLC0xLjEyMyAyLjUxLC0yLjUxIGwgMCwtMS45NSAtMC4wMDYsMCBjIDEuMjA3LC0wLjM5MiAyLjM2MywtMC44NTYgMy40NTcsLTEuNDQgbCAxLjM4MSwxLjM3OSBjIDAuOTgsMC45NzkgMi41NjgsMC45NzkgMy41NDcsMCBsIDQuNDQzLC00LjQ0NSBjIDAuOTc5LC0wLjk3OSAwLjk3OSwtMi41NjYgMCwtMy41NDcgbCAtMS4zODMsLTEuMzgzIGMgMC41ODQsLTEuMDk0IDEuMDY4LC0yLjI1IDEuNDM2LC0zLjQ1NyBsIDEwZS00LDAuMDEzIHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48Zw0KICAgICAgIGlkPSJnNDI4NCIgLz48Zw0KICAgICAgIGlkPSJnNDI4NiIgLz48Zw0KICAgICAgIGlkPSJnNDI4OCIgLz48Zw0KICAgICAgIGlkPSJnNDI5MCIgLz48Zw0KICAgICAgIGlkPSJnNDI5MiIgLz48Zw0KICAgICAgIGlkPSJnNDI5NCIgLz48Zw0KICAgICAgIGlkPSJnNDI5NiIgLz48Zw0KICAgICAgIGlkPSJnNDI5OCIgLz48Zw0KICAgICAgIGlkPSJnNDMwMCIgLz48Zw0KICAgICAgIGlkPSJnNDMwMiIgLz48Zw0KICAgICAgIGlkPSJnNDMwNCIgLz48Zw0KICAgICAgIGlkPSJnNDMwNiIgLz48Zw0KICAgICAgIGlkPSJnNDMwOCIgLz48Zw0KICAgICAgIGlkPSJnNDMxMCIgLz48Zw0KICAgICAgIGlkPSJnNDMxMiIgLz48L2c+PC9zdmc+\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ4OC43OHB4IiBoZWlnaHQ9IjQ4OC43OHB4IiB2aWV3Qm94PSIwIDAgNDg4Ljc4IDQ4OC43OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDg4Ljc4IDQ4OC43ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0xNDEuNDA4LDExOS44NzJjMTIuMjkzLTEzLjExMiwyOS42NTMtMjAuNzcsNDcuNjI0LTIwLjc3aDI0Ny40MDVWNDcuODI4YzAtMTIuNTY5LTEwLjQ2OC0yMi42NTItMjMuMDM2LTIyLjY1Mkg3NS4zOTcNCgkJCWMtMTIuNTc1LDAtMjIuNDkxLDEwLjA4My0yMi40OTEsMjIuNjUydjEwMS4wNDZoNjEuNDQ1TDE0MS40MDgsMTE5Ljg3MnoiLz4NCgkJPHBhdGggZD0iTTQ4My4wMTksMTQ5LjI1M2MtMS43MDktMS45MjQtMy43MTctMy41NS01LjkyMy00Ljc4Yy0zLjM1Mi0xLjg2MS03LjE1MS0yLjkyLTExLjA3MS0yLjkySDE4OS4wMzJsMCwwDQoJCQljLTYsMC0xMS43MzUsMi40MDktMTUuOTgzLDYuNjAxYy0wLjIxNCwwLjIwOC0wLjQyMywwLjQzOC0wLjYyNiwwLjY1MWwtOS4yNzUsOS45MTFsLTIzLjYyMiwyNS4yMDcNCgkJCWMtMC41NDIsMC41NzMtMS4xMDUsMS4yMTktMS42OTQsMS43MzZjLTQuMTEzLDMuNTcyLTkuNDEsNS42NjctMTQuOTE1LDUuNjY3aC0wLjAwNUgyMi43NjhsMCwwDQoJCQljLTUuNjg0LDAtMTEuMTExLDIuMDIyLTE1LjI3MSw1Ljc5MWMtMC42NjcsMC41ODktMS4yOTMsMS4xNzktMS44ODgsMS44NTdjLTAuNDE3LDAuNDc5LTAuODAzLDAuOTQ4LTEuMTgzLDEuNDU5DQoJCQljLTMuNDgyLDQuNzQ0LTUuMDIsMTAuNjYxLTQuMjE3LDE2LjU0MmwyNi40NzksMTk0LjE4MmMzLjU2NSwyNi4xNCwyMy41NTMsNDYuNjEyLDQ4LjY5Miw1MS4yODQNCgkJCWMzLjU5MiwwLjY2Nyw3LjI4OCwxLjE2MywxMS4wNTgsMS4xNjNoMzE0LjI2MWMyNy43NjEsMCw1MS41MjItMTkuMDAzLDU4LjM1NC00NS4xOTRjMC43MDQtMi43MDYsMS4yMjYtNS41NjcsMS41NTUtOC40Mg0KCQkJbDE1LjI2NS0xMzIuMjg5bDEyLjc3Mi0xMTAuNjc0YzAuMDY3LTAuNjQ3LDAuMTA4LTEuMjkzLDAuMTI1LTEuOTI5QzQ4OC45NDcsMTU5LjI5OSw0ODYuOTA5LDE1My42MjMsNDgzLjAxOSwxNDkuMjUzeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ4OXB4Ig0KICAgaGVpZ2h0PSI0ODkuMDAxcHgiDQogICB2aWV3Qm94PSIwIDAgNDg5IDQ4OS4wMDEiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0ODkgNDg5LjAwMTsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJuZXcuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDEiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnMzOSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjY5MCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNDgwIg0KICAgICBpZD0ibmFtZWR2aWV3MzciDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6em9vbT0iMC40ODI2MTY1OSINCiAgICAgaW5rc2NhcGU6Y3g9IjI0NC41Ig0KICAgICBpbmtzY2FwZTpjeT0iMjQ0LjUwMDUiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FwYV8xIiAvPjxnDQogICAgIGlkPSJnMyINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjE5Njc2OSwwLDAsMC45NjE5Njc2OSw5LjAxMDc4NDgsMTApIj48cGF0aA0KICAgICAgIGQ9Ik0gMzU1Ljc2OCwwIDg2LjIxOCwwIEMgNTMuMzMsMCAyNi41NzcsMjYuNzUzIDI2LjU3Nyw1OS42MzYgbCAwLDM2OS43MjkgYyAwLDMyLjg4MyAyNi43NTIsNTkuNjM2IDU5LjY0MSw1OS42MzYgbCAzMTYuNTY2LDAgYyAzMi44ODksLTEwZS00IDU5LjY0MSwtMjYuNzU0IDU5LjY0MSwtNTkuNjM3IGwgMCwtMzIwLjIwNCBMIDM1NS43NjgsMCBaIG0gNDcuMDE2LDQ0Ni40NzkgLTMxNi41NjYsMCBjIC05LjQzNywwIC0xNy4xMTksLTcuNjc4IC0xNy4xMTksLTE3LjExMyBsIDAsLTM2OS43MyBjIDAsLTkuNDM3IDcuNjgzLC0xNy4xMTQgMTcuMTE5LC0xNy4xMTQgbCAyNDguNjQyLDAgMCw0Ny42MDQgYyAwLDIxLjA0MyAxNy4xMDksMzguMTYyIDM4LjE1MiwzOC4zNzUgbCA0Ni44OTEsMC40NzcgMCwzMDAuMzg4IGMgMCw5LjQzNSAtNy42ODQsMTcuMTEzIC0xNy4xMTksMTcuMTEzIHoiDQogICAgICAgaWQ9InBhdGg1Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnDQogICAgIGlkPSJnNyIgLz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIyNi42MzM5NDJtbSINCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iDQogICB2aWV3Qm94PSIwIDAgMjYuNjMzOTQyIDI2LjYyMjc2NSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlkPSJzdmc4Ig0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InBvcnRhbC5zdmciPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczIiPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUwMDgiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUwMDYiDQogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTAxNiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTAxNCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUxMTIiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUxMTAiDQogICAgICAgICBkPSJNIDAsMCBIIDMxMi4wNDMgViA3NC40NDgyIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTEyMCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTExOCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDUzMzIiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDUzMzAiDQogICAgICAgICBkPSJNIDAsNzQuNDQ4IEggMzEyLjA0MyBWIDAgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjEuOTc5ODk5Ig0KICAgICBpbmtzY2FwZTpjeD0iNTUuNTM1Njg4Ig0KICAgICBpbmtzY2FwZTpjeT0iLTUxLjA2MDgxOSINCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgZml0LW1hcmdpbi10b3A9IjAiDQogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCINCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCINCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE1Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDcuNDExNjExLC04OS4yODgwNCkiPg0KICAgIDxyZWN0DQogICAgICAgcnk9IjAiDQogICAgICAgeT0iOTYuMTU3Mzc5Ig0KICAgICAgIHg9IjYxLjE2MTQ3MiINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNCINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NTQwODYzMztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxyZWN0DQogICAgICAgcnk9IjAiDQogICAgICAgeT0iMTAzLjAyNjczIg0KICAgICAgIHg9IjU0LjI5MjEyMiINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNC0zIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSI4OS4yODgwNCINCiAgICAgICB4PSI2OC4wMzA4MjMiDQogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiDQogICAgICAgd2lkdGg9IjUuOTk5OTk5NSINCiAgICAgICBpZD0icmVjdDU1MDQtMy01Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSIxMDkuODk2MDciDQogICAgICAgeD0iNDcuNDIyNzc5Ig0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0LTMtNS05Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03Ig0KICAgICAgIGQ9Im0gNjguMzg0OTY3LDEwMi4xMjA4OSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgNS42MDkzNTQsLTUuNzIxOTI4IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwODcgaCAtNS45MTcwNTMgdiA1LjkxMDcwNSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NjYzIg0KICAgICAgIGQ9Im0gNDguMjczMDExLDEwMS4xOTY0OCB2IC03LjU4MjA1MyBjIDAsLTEuOTE0MTQ0IDEuNDE5NTExLC0zLjQ1NTEzNCAzLjE4Mjc2MSwtMy40NTUxMzQgdiAwIGggMTQuNzY3MjcxIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjcyMjc5OTY2O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJyZWN0NTYxNyINCiAgICAgICBkPSJtIDczLjIzNzgxMywxMDIuODMwNDMgNGUtNiw5LjE1NDk4IGMgMCwxLjcyNzE4IC0xLjM4MzI2MywzLjExNzY2IC0zLjEwMTQ4NSwzLjExNzY2IEggNTUuODQ2MDc3Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojOTg5NDk0O3N0cm9rZS13aWR0aDoxLjYxNTQ3MTEyO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03LTQiDQogICAgICAgZD0ibSA2MS41MTU2MTgsMTA4Ljk5MDIzIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjAwOTksLTAuMjA1MDkgSCA2MS4xOTc5NyB2IDUuOTEwNzEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMzE3NjM0LDAuMDE2MyB6Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNTU1MS03LTQtMyINCiAgICAgICBkPSJtIDU5LjkzNzk3NSw5Ni4xOTM4NzQgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1NCw1LjcyMTkyNiA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA5IGggNS45MTcwNTMgdiAtNS45MTA3MTEgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC0wLjMxNzYzNCwtMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zLTAiDQogICAgICAgZD0ibSA1My4wNjg2MzMsMTAzLjA2MzIyIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtNS42MDkzNTMsNS43MjE5MyA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDAuMDA5OSwwLjIwNTA4IGggNS45MTcwNTMgdiAtNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMzE3NjM0LC0wLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1LjY3OHB4IiBoZWlnaHQ9IjQ1LjY3OHB4IiB2aWV3Qm94PSIwIDAgNDUuNjc4IDQ1LjY3OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuNjc4IDQ1LjY3ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0zOC45ODgsNi42ODljLTguOTE5LTguOTE4LTIzLjM4LTguOTE5LTMyLjMsMGMtOC45MTgsOC45MTktOC45MTcsMjMuMzgsMCwzMi4yOTljOC45Miw4LjkxOSwyMy4zODEsOC45MTksMzIuMywwDQoJCQlDNDcuOTA4LDMwLjA2OSw0Ny45MDYsMTUuNjA4LDM4Ljk4OCw2LjY4OXogTTIxLjg5MywzNi4wMTZjLTEuNzMsMC0yLjkwNi0xLjI3Mi0yLjkwNi0yLjk3MWMwLTEuNzMsMS4yMDktMi45NzIsMi45MDYtMi45NzINCgkJCWMxLjc2NCwwLDIuOTA2LDEuMjQxLDIuOTM4LDIuOTcyQzI0LjgzMSwzNC43NDIsMjMuNjU2LDM2LjAxNiwyMS44OTMsMzYuMDE2eiBNMjYuMjE1LDIxLjk4MWMtMS4zMiwxLjQ2Ni0xLjg1NiwyLjg2MS0xLjgyLDQuNDY4DQoJCQljMCwxLjE5My0wLjk2OSwyLjE2Mi0yLjE2MywyLjE2MkgyMS43N2MtMS4xODIsMC0yLjE0NS0wLjk0OS0yLjE2MS0yLjEzMWwtMC4wMDUtMC4zMTdjLTAuMTA3LTEuODIzLDAuNTAxLTMuNjgxLDIuMTA5LTUuNjExDQoJCQljMS4xNDUtMS4zNTksMi4wNzItMi41MDIsMi4wNzItMy43MThjMC0xLjI1LTAuODIyLTIuMDczLTIuNjA3LTIuMTQ2Yy0wLjU0OSwwLTEuMTUsMC4wOTMtMS43MzEsMC4yNTYNCgkJCWMtMS4wNTYsMC4yOTctMi4xNTYtMC4yOTgtMi40ODItMS4zNDVsLTAuMDA2LTAuMDJjLTAuMzI5LTEuMDU0LDAuMjQ3LTIuMTc1LDEuMjk0LTIuNTIzYzEuMTU3LTAuMzg1LDIuNTc0LTAuNjU3LDQuMTQtMC42NTcNCgkJCWM0LjcyLDAsNi44NjQsMi42MDksNi44NjQsNS41NzZDMjkuMjU2LDE4LjY5MiwyNy41NzUsMjAuNDc5LDI2LjIxNSwyMS45ODF6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ3MS42MDhweCINCiAgIGhlaWdodD0iNDcxLjYwOHB4Ig0KICAgdmlld0JveD0iMCAwIDQ3MS42MDggNDcxLjYwOCINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJyZWRvLnN2ZyI+PG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQxIj48cmRmOlJERj48Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICAgIGlkPSJkZWZzMzkiIC8+PHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxIg0KICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgICBncmlkdG9sZXJhbmNlPSIxMCINCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjI5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MTYiDQogICAgIGlkPSJuYW1lZHZpZXczNyINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIwLjUwMDQxNTYiDQogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0Ig0KICAgICBpbmtzY2FwZTpjeT0iMjM1LjgwNCINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9ImczIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMSwwLDAsMSw0NzMuNjA2MjEsMCkiPjxwYXRoDQogICAgICAgZD0ibSAzODQuNTM1MTksOTEuMDY3NzQ0IGMgLTgxLjQ1OTU0LC04MS40NTY4NzkxIC0yMTQuMDA4MDcsLTgxLjQ1Njg3OTEgLTI5NS40NjU4MjgsMCAtODEuNDU3NzY0MSw4MS40NTY4NzYgLTgxLjQ1Njg3ODEsMjE0LjAxMTYwNiAwLDI5NS40NjU4MjYgODEuNDU2ODY4LDgxLjQ1OTUzIDIxNC4wMDU0MDgsODEuNDU5NTMgMjk1LjQ2NTgyOCwwIDgxLjQ1OTUzLC04MS40NTMzNCA4MS40NTk1MywtMjE0LjAwMjc1IDAsLTI5NS40NjU4MjYgeiBNIDM2OC4zMjg4MywzNzAuMzM4NzIgYyAtNzIuNTE4NTksNzIuNTE4NTkgLTE5MC41MzYzLDcyLjUxODU5IC0yNjMuMDY2MzksMCAtNzIuNTE2ODE3LC03Mi41MzAwOSAtNzIuNTE2ODE3LC0xOTAuNTQyNSAwLC0yNjMuMDY3MjcgNzIuNTI5MiwtNzIuNTI2NTU5IDE5MC41MzYyOSwtNzIuNTI2NTU5IDI2My4wNjYzOSwwIDcyLjUyNTY3LDcyLjUyNDc3IDcyLjUyNTY3LDE5MC41MzcxOCAwLDI2My4wNjcyNyB6IG0gMTIuNDQzNDcsLTE5OC4xMjc2IC0xMS42MjA3Niw1Mi4zMjk3MSBjIC0wLjMxMzUsMS40NDcwNiAtMS43NDM3MywyLjM0NjgyIC0zLjE4MjgyLDIuMDM1OTggLTAuNDQwMTQsLTAuMDkzOSAtMTAuOTUwMzYsLTIuMzU4MzQgLTI2LjI5ODU4LC0yLjM1ODM0IC0yNS44ODk0NCwwIC03MS42MjQxMyw2Ljg1MTg0IC0xMDEuODMxNzIsNDkuNTUzMzggbCA2LjI5NjU2LDYuMjk2NTcgNzAuNTAzODYsMzAuNTU5MTcgYyAyLjM2NTQyLDEuMDM3MDMgMy43NTc1OCwzLjUwNjk1IDMuMzkxODMsNi4wNjcyIC0wLjM1MDcsMi41NDk2MiAtMi4zNjEsNC41NTQ2MSAtNC45MzA5OSw0Ljg3MzQyIGwgLTE3NS42MDUxOSwyMi45NTkwMSBjIC0xLjc1ODc5LDAuMjMwMjUgLTMuNTM4ODMsLTAuMzc3MjYgLTQuNzk3MjYsLTEuNjI3NzIgLTEuMjY2NCwtMS4yNjE5NyAtMS44NTUzMiwtMy4wMzY3IC0xLjYzNTY5LC00LjgwNjEyIGwgMjIuOTU5LC0xNzUuNjA3ODUgYyAwLjE2NDczLC0xLjI4NSAwLjc1MzY0LC0yLjQzNjI3IDEuNjIzMywtMy4zMDUwMyAwLjg1ODE0LC0wLjg1OTAzIDEuOTg5MDQsLTEuNDQ3OTUgMy4yNjM0MSwtMS42MzEyNyAyLjU0Njk3LC0wLjM1Nzc4IDUuMDE3NzcsMS4wMzcwMyA2LjA1MzkyLDMuMzk0NDggbCAzMC41NjcxNCw3MC41MDY1MiAwLjE1NzYzLDAuMTU3NjMgYyA0Ny4xNDE5MSwtNTkuNDAxMTcgMTE1LjQxNTg0LC02Ni40ODk0NiAxNDUuMDI4MzEsLTY2LjQ4OTQ2IDEzLjU0NjkzLDAgMjYuNjk2MjIsMS4zNDUyMiAzOC4wMjM4NCwzLjg4Njg3IDEuNDUzMjYsMC4zMzIxIDIuMzYzNjUsMS43NjMyMiAyLjAzNDIxLDMuMjA1ODUgeiINCiAgICAgICBpZD0icGF0aDUiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcNCiAgICAgaWQ9Imc3IiAvPjxnDQogICAgIGlkPSJnOSIgLz48Zw0KICAgICBpZD0iZzExIiAvPjxnDQogICAgIGlkPSJnMTMiIC8+PGcNCiAgICAgaWQ9ImcxNSIgLz48Zw0KICAgICBpZD0iZzE3IiAvPjxnDQogICAgIGlkPSJnMTkiIC8+PGcNCiAgICAgaWQ9ImcyMSIgLz48Zw0KICAgICBpZD0iZzIzIiAvPjxnDQogICAgIGlkPSJnMjUiIC8+PGcNCiAgICAgaWQ9ImcyNyIgLz48Zw0KICAgICBpZD0iZzI5IiAvPjxnDQogICAgIGlkPSJnMzEiIC8+PGcNCiAgICAgaWQ9ImczMyIgLz48Zw0KICAgICBpZD0iZzM1IiAvPjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDM5Mi42MiAzOTIuNjIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM5Mi42MiAzOTIuNjI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxyZWN0IHg9IjE0NC44NjYiIHk9IjMyMC44OTciIHdpZHRoPSIyMy41MDUiIGhlaWdodD0iMjUiLz4NCgk8cGF0aCBkPSJNMzA5Ljc5NSwwSDI2Ni40OUgxMjYuMTMxSDgyLjgyNUMzNy42NjcsMCwwLjkyOSwzNi43MzgsMC45MjksODEuODk2djIyOC44MjhjMCw0NS4xNTgsMzYuNzM4LDgxLjg5Niw4MS44OTYsODEuODk2aDU4LjMyDQoJCWgxMTMuNDQzaDU1LjIwNmM0NS4xNTcsMCw4MS44OTYtMzYuNzM4LDgxLjg5Ni04MS44OTZWODEuODk2QzM5MS42OTEsMzYuNzM4LDM1NC45NTIsMCwzMDkuNzk1LDB6IE0yNjYuNDksMzANCgkJYzE0LjM1NCwwLDI2LjAzLDkuNTQyLDI2LjAzLDIxLjI3VjE3NC4zM2MwLDExLjcyOS0xMS42NzcsMjEuMjcxLTI2LjAzLDIxLjI3MUgxMjYuMTMxYy0xNC4zNTQsMC0yNi4wMzEtOS41NDItMjYuMDMxLTIxLjI3MQ0KCQlWNTEuMjdjMC0xMS43MjgsMTEuNjc4LTIxLjI3LDI2LjAzMS0yMS4yN0gyNjYuNDl6IE0xNDEuMTQ2LDM2Mi42MmMtNi4yNTksMC0xMS4zNTItNS4wOTItMTEuMzUyLTExLjM1MXYtMzAuMDY2DQoJCWMwLTYuMjU5LDUuMDkzLTExLjM1MSwxMS4zNTItMTEuMzUxaDExMy40NDNjNi4yNTksMCwxMS4zNTEsNS4wOTIsMTEuMzUxLDExLjM1MXYzMC4wNjZjMCw2LjI1OS01LjA5MiwxMS4zNTEtMTEuMzUxLDExLjM1MQ0KCQlIMTQxLjE0NnogTTM2MS42OTEsMzEwLjcyNGMwLDI4LjYxNi0yMy4yOCw1MS44OTYtNTEuODk2LDUxLjg5NmgtMTUuNDUyYzEuMDMyLTMuNjEsMS41OTctNy40MTQsMS41OTctMTEuMzUxdi0zMC4wNjYNCgkJYzAtMjIuODAxLTE4LjU1LTQxLjM1MS00MS4zNTEtNDEuMzUxSDE0MS4xNDZjLTIyLjgwMiwwLTQxLjM1MiwxOC41NS00MS4zNTIsNDEuMzUxdjMwLjA2NmMwLDMuOTM3LDAuNTY1LDcuNzQyLDEuNTk3LDExLjM1MQ0KCQlIODIuODI1Yy0yOC42MTYsMC01MS44OTYtMjMuMjgtNTEuODk2LTUxLjg5NlY4MS44OTZjMC0yNS45MSwxOS4wODctNDcuNDQ0LDQzLjkzOC01MS4yODVDNzEuODExLDM2LjkzNSw3MC4xLDQzLjkyMSw3MC4xLDUxLjI3DQoJCVYxNzQuMzNjMCwyOC4yNzEsMjUuMTM2LDUxLjI3MSw1Ni4wMzEsNTEuMjcxSDI2Ni40OWMzMC44OTYsMCw1Ni4wMy0yMyw1Ni4wMy01MS4yNzFWNTEuMjdjMC03LjM0OC0xLjcxMS0xNC4zMzQtNC43NjctMjAuNjU5DQoJCWMyNC44NTEsMy44NDEsNDMuOTM4LDI1LjM3NSw0My45MzgsNTEuMjg1VjMxMC43MjR6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIyNi42MzM5NDJtbSINCiAgIGhlaWdodD0iMjYuNjIyNzY1bW0iDQogICB2aWV3Qm94PSIwIDAgMjYuNjMzOTQyIDI2LjYyMjc2NSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlkPSJzdmc4Ig0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InNldHRpbmdzLnN2ZyI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzMiI+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTAwOCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTAwNiINCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGg1MDE2Ig0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGg1MDE0Ig0KICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTExMiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTExMCINCiAgICAgICAgIGQ9Ik0gMCwwIEggMzEyLjA0MyBWIDc0LjQ0ODIgSCAwIFoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGg1MTIwIg0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGg1MTE4Ig0KICAgICAgICAgZD0iTSAwLDc0LjQ0OCBIIDMxMi4wNDMgViAwIEggMCBaIiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoNTMzMiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoNTMzMCINCiAgICAgICAgIGQ9Ik0gMCw3NC40NDggSCAzMTIuMDQzIFYgMCBIIDAgWiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICA8L2RlZnM+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iMS45Nzk4OTkiDQogICAgIGlua3NjYXBlOmN4PSI1NS41MzU2ODgiDQogICAgIGlua3NjYXBlOmN5PSItNTEuMDYwODE5Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTUiPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Ny40MTE2MTEsLTg5LjI4ODA0KSI+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSI5Ni4xNTczNzkiDQogICAgICAgeD0iNjEuMTYxNDcyIg0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjc0NTA5ODA1O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU1NDA4NjMzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPHJlY3QNCiAgICAgICByeT0iMCINCiAgICAgICB5PSIxMDMuMDI2NzMiDQogICAgICAgeD0iNTQuMjkyMTIyIg0KICAgICAgIGhlaWdodD0iNS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSI1Ljk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q1NTA0LTMiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHJ5PSIwIg0KICAgICAgIHk9Ijg5LjI4ODA0Ig0KICAgICAgIHg9IjY4LjAzMDgyMyINCiAgICAgICBoZWlnaHQ9IjUuOTk5OTk5NSINCiAgICAgICB3aWR0aD0iNS45OTk5OTk1Ig0KICAgICAgIGlkPSJyZWN0NTUwNC0zLTUiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHJ5PSIwIg0KICAgICAgIHk9IjEwOS44OTYwNyINCiAgICAgICB4PSI0Ny40MjI3NzkiDQogICAgICAgaGVpZ2h0PSI1Ljk5OTk5OTUiDQogICAgICAgd2lkdGg9IjUuOTk5OTk5NSINCiAgICAgICBpZD0icmVjdDU1MDQtMy01LTkiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNTg4MjM1MzI7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTU0MDg2MzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTciDQogICAgICAgZD0ibSA2OC4zODQ5NjcsMTAyLjEyMDg5IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCA1LjYwOTM1NCwtNS43MjE5MjggNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4wMDk5LC0wLjIwNTA4NyBoIC01LjkxNzA1MyB2IDUuOTEwNzA1IGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAwLjMxNzYzNCwwLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUzMjtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDU2NjMiDQogICAgICAgZD0ibSA0OC4yNzMwMTEsMTAxLjE5NjQ4IHYgLTcuNTgyMDUzIGMgMCwtMS45MTQxNDQgMS40MTk1MTEsLTMuNDU1MTM0IDMuMTgyNzYxLC0zLjQ1NTEzNCB2IDAgaCAxNC43NjcyNzEiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNzIyNzk5NjY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InJlY3Q1NjE3Ig0KICAgICAgIGQ9Im0gNzMuMjM3ODEzLDEwMi44MzA0MyA0ZS02LDkuMTU0OTggYyAwLDEuNzI3MTggLTEuMzgzMjYzLDMuMTE3NjYgLTMuMTAxNDg1LDMuMTE3NjYgSCA1NS44NDYwNzciDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM5ODk0OTQ7c3Ryb2tlLXdpZHRoOjEuNjE1NDcxMTI7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNCINCiAgICAgICBkPSJtIDYxLjUxNTYxOCwxMDguOTkwMjMgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIDUuNjA5MzU0LC01LjcyMTkyIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMDA5OSwtMC4yMDUwOSBIIDYxLjE5Nzk3IHYgNS45MTA3MSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4zMTc2MzQsMC4wMTYzIHoiDQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC45ODk5OTk5OTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuODA4NjE1NTc7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1NTUxLTctNC0zIg0KICAgICAgIGQ9Im0gNTkuOTM3OTc1LDk2LjE5Mzg3NCBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTUuNjA5MzU0LDUuNzIxOTI2IDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDkgaCA1LjkxNzA1MyB2IC01LjkxMDcxMSBhIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgLTAuMzE3NjM0LC0wLjAxNjMgeiINCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk4OTk5OTk5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44MDg2MTU1NztzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDU1NTEtNy00LTMtMCINCiAgICAgICBkPSJtIDUzLjA2ODYzMywxMDMuMDYzMjIgYSA1LjYwOTA3MzQsNS43MjE5NTg0IDAgMCAwIC01LjYwOTM1Myw1LjcyMTkzIDUuNjA5MDczNCw1LjcyMTk1ODQgMCAwIDAgMC4wMDk5LDAuMjA1MDggaCA1LjkxNzA1MyB2IC01LjkxMDcxIGEgNS42MDkwNzM0LDUuNzIxOTU4NCAwIDAgMCAtMC4zMTc2MzQsLTAuMDE2MyB6Ig0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuOTg5OTk5OTk7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjU4ODIzNTMyO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjgwODYxNTU3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAiIC8+DQogICAgPGcNCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjI5MzM0MjM5LDAsMCwwLjI5MzM0MjM5LDYwLjU1MTgwMywxMDIuNDE3MDUpIg0KICAgICAgIGlkPSJnNTQ4NiI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczIj4NCiAgICAgICAgPHBhdGgNCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgICAgZD0ibSA0MS41MzQsMjguNjYgaCAxLjk1NyBDIDQ0Ljg3NywyOC42NiA0NiwyNy41MzYgNDYsMjYuMTUgdiAtNi4zIGMgMCwtMS4zODUgLTEuMTI0LC0yLjUwOSAtMi41MDksLTIuNTA5IEggNDEuNTQgdiAwLjAwNiBDIDQxLjE0OCwxNi4xNCA0MC42ODcsMTQuOTgzIDQwLjEwMywxMy44ODkgbCAxLjM4MSwtMS4zODEgYyAwLjk3OSwtMC45OCAwLjk3OSwtMi41NjkgMCwtMy41NDkgTCAzNy4wNCw0LjUxNyBjIC0wLjk3OSwtMC45NzkgLTIuNTY3LC0wLjk3OSAtMy41NDcsMCBsIC0xLjM4MiwxLjM4IEMgMzEuMDE3LDUuMzEzIDI5Ljg2MSw0Ljg1MiAyOC42NTQsNC40NjEgSCAyOC42NiBWIDIuNTEgQyAyOC42NiwxLjEyNCAyNy41MzcsMCAyNi4xNSwwIGggLTYuMyBjIC0xLjM4NiwwIC0yLjUwOSwxLjEyNCAtMi41MDksMi41MSB2IDEuOTU1IGwgMC4wMTQsLTEwZS00IGMgLTEuMjA3LDAuMzY3IC0yLjM2MywwLjg1IC0zLjQ1OCwxLjQzNSBMIDEyLjUxNiw0LjUxOCBjIC0wLjk4LC0wLjk3OSAtMi41NjgsLTAuOTc5IC0zLjU0OCwwIEwgNC41MjUsOC45NjEgQyAzLjU0Niw5Ljk0IDMuNTQ1LDExLjUyNyA0LjUyMywxMi41MDcgTCA1LjksMTMuODg5IEMgNS4zMTYsMTQuOTgzIDQuODUxLDE2LjE0IDQuNDYsMTcuMzQ2IFYgMTcuMzQxIEggMi41MDkgQyAxLjEyNCwxNy4zNDEgMCwxOC40NjUgMCwxOS44NSB2IDYuMzAxIGMgMCwxLjM4NyAxLjEyNCwyLjUxMSAyLjUwOSwyLjUxMSBIIDQuNDczIEwgNC40NjcsMjguNjQ3IGMgMC4zNjcsMS4yMDcgMC44NTMsMi4zNjIgMS40MzYsMy40NTcgbCAtMS4zOCwxLjM4MSBjIC0wLjk4LDAuOTc5IC0wLjk3OSwyLjU2NyAwLDMuNTQ3IGwgNC40NDMsNC40NDIgYyAwLjk3OSwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0OCwwIGwgMS4zODEsLTEuMzgxIGMgMS4wOTQsMC41ODQgMi4yNTEsMS4wNzIgMy40NTgsMS40MzggbCAtMC4wMTQsLTAuMDA2IHYgMS45NjUgYyAwLDEuMzg3IDEuMTIzLDIuNTEgMi41MDksMi41MSBoIDYuMyBjIDEuMzg3LDAgMi41MSwtMS4xMjMgMi41MSwtMi41MSB2IC0xLjk1IGggLTAuMDA2IGMgMS4yMDcsLTAuMzkyIDIuMzYzLC0wLjg1NiAzLjQ1NywtMS40NCBsIDEuMzgxLDEuMzc5IGMgMC45OCwwLjk3OSAyLjU2OCwwLjk3OSAzLjU0NywwIGwgNC40NDMsLTQuNDQ1IGMgMC45NzksLTAuOTc5IDAuOTc5LC0yLjU2NiAwLC0zLjU0NyBsIC0xLjM4MywtMS4zODMgYyAwLjU4NCwtMS4wOTQgMS4wNjgsLTIuMjUgMS40MzYsLTMuNDU3IHogTSAyMy4wMjEsMzYuNzE0IEMgMTUuNDQ0LDM2LjcyMyA5LjI3OCwzMC41NTcgOS4yODcsMjIuOTggOS4yOTYsMTUuNDQxIDE1LjQ1LDkuMjg3IDIyLjk4OSw5LjI3OCBjIDcuNTc4LC0wLjAwOSAxMy43NDQsNi4xNTcgMTMuNzM0LDEzLjczNCAtMC4wMSw3LjUzOSAtNi4xNjIsMTMuNjkzIC0xMy43MDIsMTMuNzAyIHoiDQogICAgICAgICAgIGlkPSJwYXRoNSIgLz4NCiAgICAgIDwvZz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzciIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9Imc5IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMTEiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcxMyIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzE1IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMTciIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcxOSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzIxIiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMjMiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImcyNSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzI3IiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMjkiIC8+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczMSIgLz4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzMzIiAvPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzUiIC8+DQogICAgPC9nPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjczLjA1OHB4IiBoZWlnaHQ9IjczLjA1OHB4IiB2aWV3Qm94PSIwIDAgNzMuMDU4IDczLjA1OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzMuMDU4IDczLjA1ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGcgaWQ9IkV5ZSI+DQoJCTxnPg0KCQkJPHBhdGggZD0iTTcyLjg5MywzNS45NjVjLTAuNTgtMC45MjUtMTQuNDMyLTIyLjU0MS0zNS4xNi0yMi41NDFoLTIuNDA2Yy0yMC43MjksMC0zNC41OCwyMS42MTYtMzUuMTU5LDIyLjU0MQ0KCQkJCWMtMC4yMjMsMC4zNDctMC4yMjMsMC43OSwwLDEuMTM3YzAuNTc5LDAuOTE3LDE0LjQzMiwyMi41MzIsMzUuMTU5LDIyLjUzMmgyLjQwNmMyMC43MjksMCwzNC41OC0yMS42MTUsMzUuMTU5LTIyLjUzMg0KCQkJCUM3My4xMTMsMzYuNzU1LDczLjExMywzNi4zMTIsNzIuODkzLDM1Ljk2NXogTTQ1LjI2NywzNi41MjljMCw0LjY5LTMuOTIsOC41MDYtOC43MzYsOC41MDZjLTQuODE3LDAtOC43MzUtMy44MTItOC43MzUtOC41MDYNCgkJCQljMC00LjY4NywzLjkxOC04LjUwOCw4LjczNS04LjUwOEM0MS4zNDcsMjguMDIyLDQ1LjI2NywzMS44NDQsNDUuMjY3LDM2LjUyOXoiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgd2lkdGg9IjQ3MS42MDhweCINCiAgIGhlaWdodD0iNDcxLjYwOHB4Ig0KICAgdmlld0JveD0iMCAwIDQ3MS42MDggNDcxLjYwOCINCiAgIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ3MS42MDggNDcxLjYwODsiDQogICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJ1bmRvLnN2ZyI+PG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQxIj48cmRmOlJERj48Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzDQogICAgIGlkPSJkZWZzMzkiIC8+PHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxIg0KICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIg0KICAgICBncmlkdG9sZXJhbmNlPSIxMCINCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjI5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MTYiDQogICAgIGlkPSJuYW1lZHZpZXczNyINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIwLjUwMDQxNTYiDQogICAgIGlua3NjYXBlOmN4PSIyMzUuODA0Ig0KICAgICBpbmtzY2FwZTpjeT0iMjM1LjgwNCINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9ImczIj48cGF0aA0KICAgICAgIGQ9Im0gMzg0LjUzNTE5LDkxLjA2Nzc0NCBjIC04MS40NTk1NCwtODEuNDU2ODc5MSAtMjE0LjAwODA3LC04MS40NTY4NzkxIC0yOTUuNDY1ODI4LDAgLTgxLjQ1Nzc2NDEsODEuNDU2ODc2IC04MS40NTY4NzgxLDIxNC4wMTE2MDYgMCwyOTUuNDY1ODI2IDgxLjQ1Njg2OCw4MS40NTk1MyAyMTQuMDA1NDA4LDgxLjQ1OTUzIDI5NS40NjU4MjgsMCA4MS40NTk1MywtODEuNDUzMzQgODEuNDU5NTMsLTIxNC4wMDI3NSAwLC0yOTUuNDY1ODI2IHogTSAzNjguMzI4ODMsMzcwLjMzODcyIGMgLTcyLjUxODU5LDcyLjUxODU5IC0xOTAuNTM2Myw3Mi41MTg1OSAtMjYzLjA2NjM5LDAgLTcyLjUxNjgxNywtNzIuNTMwMDkgLTcyLjUxNjgxNywtMTkwLjU0MjUgMCwtMjYzLjA2NzI3IDcyLjUyOTIsLTcyLjUyNjU1OSAxOTAuNTM2MjksLTcyLjUyNjU1OSAyNjMuMDY2MzksMCA3Mi41MjU2Nyw3Mi41MjQ3NyA3Mi41MjU2NywxOTAuNTM3MTggMCwyNjMuMDY3MjcgeiBtIDEyLjQ0MzQ3LC0xOTguMTI3NiAtMTEuNjIwNzYsNTIuMzI5NzEgYyAtMC4zMTM1LDEuNDQ3MDYgLTEuNzQzNzMsMi4zNDY4MiAtMy4xODI4MiwyLjAzNTk4IC0wLjQ0MDE0LC0wLjA5MzkgLTEwLjk1MDM2LC0yLjM1ODM0IC0yNi4yOTg1OCwtMi4zNTgzNCAtMjUuODg5NDQsMCAtNzEuNjI0MTMsNi44NTE4NCAtMTAxLjgzMTcyLDQ5LjU1MzM4IGwgNi4yOTY1Niw2LjI5NjU3IDcwLjUwMzg2LDMwLjU1OTE3IGMgMi4zNjU0MiwxLjAzNzAzIDMuNzU3NTgsMy41MDY5NSAzLjM5MTgzLDYuMDY3MiAtMC4zNTA3LDIuNTQ5NjIgLTIuMzYxLDQuNTU0NjEgLTQuOTMwOTksNC44NzM0MiBsIC0xNzUuNjA1MTksMjIuOTU5MDEgYyAtMS43NTg3OSwwLjIzMDI1IC0zLjUzODgzLC0wLjM3NzI2IC00Ljc5NzI2LC0xLjYyNzcyIC0xLjI2NjQsLTEuMjYxOTcgLTEuODU1MzIsLTMuMDM2NyAtMS42MzU2OSwtNC44MDYxMiBsIDIyLjk1OSwtMTc1LjYwNzg1IGMgMC4xNjQ3MywtMS4yODUgMC43NTM2NCwtMi40MzYyNyAxLjYyMzMsLTMuMzA1MDMgMC44NTgxNCwtMC44NTkwMyAxLjk4OTA0LC0xLjQ0Nzk1IDMuMjYzNDEsLTEuNjMxMjcgMi41NDY5NywtMC4zNTc3OCA1LjAxNzc3LDEuMDM3MDMgNi4wNTM5MiwzLjM5NDQ4IGwgMzAuNTY3MTQsNzAuNTA2NTIgMC4xNTc2MywwLjE1NzYzIGMgNDcuMTQxOTEsLTU5LjQwMTE3IDExNS40MTU4NCwtNjYuNDg5NDYgMTQ1LjAyODMxLC02Ni40ODk0NiAxMy41NDY5MywwIDI2LjY5NjIyLDEuMzQ1MjIgMzguMDIzODQsMy44ODY4NyAxLjQ1MzI2LDAuMzMyMSAyLjM2MzY1LDEuNzYzMjIgMi4wMzQyMSwzLjIwNTg1IHoiDQogICAgICAgaWQ9InBhdGg1Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnDQogICAgIGlkPSJnNyIgLz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgd2lkdGg9IjE3NCINCiAgIGhlaWdodD0iNDcuODg3MzEiDQogICB2aWV3Qm94PSIwIDAgMTYzLjEyNSA0NC44OTQzNTQiDQogICBpZD0ic3ZnNDM5OSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMi4yICg3MzJhMDFkYTYzLCAyMDIyLTEyLTA5KSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvbXBhcnRtZW50LnN2ZyINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQ0MDEiIC8+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTYiDQogICAgIGlua3NjYXBlOmN4PSI5My4zMTI4NDEiDQogICAgIGlua3NjYXBlOmN5PSIxNC41MjA5NDMiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjI1NjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEzNjkiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSIxOTEyIg0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIHVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiDQogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQ0MDQiPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZSAvPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzQuNDUwMzUsLTMxNi4wNTQzNikiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTg2MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InJlY3QyOTg1Ig0KICAgICAgIHdpZHRoPSIxNTkuMjc4MjMiDQogICAgICAgaGVpZ2h0PSI0MS4xMzU3MzgiDQogICAgICAgeD0iMjc2LjQxNzgyIg0KICAgICAgIHk9IjMxNy45MzM2NSINCiAgICAgICByeT0iMi45NTI2MjE1Ig0KICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1My45NTk5OTkiDQogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUzLjk1OTk5OSINCiAgICAgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcR29vZ2xlIERyaXZlXHRvb2xiYXJcbWFjcm9tb2xlY3VsZS5wbmciDQogICAgICAgcng9IjQ2Ljg1MDE2NiINCiAgICAgICBpbmtzY2FwZTpsYWJlbD0icmVjdDI5ODUiIC8+DQogICAgPHRleHQNCiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIg0KICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjI4LjEyNXB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgeD0iMzAzLjgzNTExIg0KICAgICAgIHk9IjM0Mi41NDQ0OSINCiAgICAgICBpZD0idGV4dDgxOCI+PHRzcGFuDQogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIg0KICAgICAgICAgaWQ9InRzcGFuODE2Ig0KICAgICAgICAgeD0iMzAzLjgzNTExIg0KICAgICAgICAgeT0iMzQyLjU0NDQ5Ig0KICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O3N0cm9rZS13aWR0aDowLjkzNzVweCI+Q29tcGFydG1lbnQ8L3RzcGFuPjwvdGV4dD4NCiAgPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgd2lkdGg9IjE3NCINCiAgIGhlaWdodD0iNDQuNDQzMDAxIg0KICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MzE0Ig0KICAgaWQ9InN2ZzQzOTkiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjIuMiAoNzMyYTAxZGE2MywgMjAyMi0xMi0wOSkiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJjb21wbGV4LnN2ZyINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQ0MDEiIC8+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iNS42NTY4NTQzIg0KICAgICBpbmtzY2FwZTpjeD0iNjAuODExMTgzIg0KICAgICBpbmtzY2FwZTpjeT0iMjMuMTU3NzQ3Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDA5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgdW5pdHM9InB4Ig0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSINCiAgICAgYm9yZGVybGF5ZXI9InRydWUiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzYuMDY0OTcsLTMxNy42Njg5NykiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My4yMzEyNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InJlY3QyOTg1Ig0KICAgICAgIHdpZHRoPSIxNTkuODkzNzQiDQogICAgICAgaGVpZ2h0PSIzOC40MzQwNCINCiAgICAgICB4PSIyNzcuNjgwNiINCiAgICAgICB5PSIzMTkuMjg0NjEiDQogICAgICAgcnk9IjAiDQogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUzLjk1OTk5OSINCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTMuOTU5OTk5Ig0KICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxHb29nbGUgRHJpdmVcdG9vbGJhclxtYWNyb21vbGVjdWxlLnBuZyIgLz4NCiAgICA8dGV4dA0KICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjguMTI1cHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45Mzc1cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICB4PSIzMjQuNzE2MDkiDQogICAgICAgeT0iMzQyLjY5MTAxIg0KICAgICAgIGlkPSJ0ZXh0ODE4Ij48dHNwYW4NCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiDQogICAgICAgICBpZD0idHNwYW44MTYiDQogICAgICAgICB4PSIzMjQuNzE2MDkiDQogICAgICAgICB5PSIzNDIuNjkxMDEiDQogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5Db21wbGV4PC90c3Bhbj48L3RleHQ+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjkzNzU7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICBpZD0icmVjdDYyMzUiDQogICAgICAgd2lkdGg9IjguNDM3NSINCiAgICAgICBoZWlnaHQ9IjguNDM3NSINCiAgICAgICB4PSIyNzYuMDY0OTciDQogICAgICAgeT0iMzE3LjY2ODk4Ig0KICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xLjI1NDk4NjhlLTYpIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC45Mzc1O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InJlY3Q1NTc3Ig0KICAgICAgIHdpZHRoPSI4LjQzNzUiDQogICAgICAgaGVpZ2h0PSI4LjQzNzUiDQogICAgICAgeD0iNDMwLjc1MjQ3Ig0KICAgICAgIHk9IjMxNy42Njg5OCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuOTM3NTtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGlkPSJyZWN0NjIyMSINCiAgICAgICB3aWR0aD0iOC40Mzc1Ig0KICAgICAgIGhlaWdodD0iOC40Mzc1Ig0KICAgICAgIHg9IjQzMC43NTI0NyINCiAgICAgICB5PSIzNTAuODk2NzkiIC8+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjkzNzU7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICBpZD0icmVjdDYyMjMiDQogICAgICAgd2lkdGg9IjguNDM3NSINCiAgICAgICBoZWlnaHQ9IjguNDM3NSINCiAgICAgICB4PSIyNzYuMDY0OTciDQogICAgICAgeT0iMzUwLjg5Njc5IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC45Mzc1Ig0KICAgICAgIGlkPSJyZWN0NjIzMyINCiAgICAgICB3aWR0aD0iMi4zNDM3NSINCiAgICAgICBoZWlnaHQ9IjExLjY3MTg3NSINCiAgICAgICB4PSI1NTUuNTI0NzIiDQogICAgICAgeT0iLTYyLjMwMjQzNyINCiAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSg0NSwxLjM0MzEwNTFlLTYsLTIuMzMxMTUxN2UtNikiIC8+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjkzNzUiDQogICAgICAgaWQ9InJlY3Q2MjMxIg0KICAgICAgIHdpZHRoPSIyLjM0Mzc1Ig0KICAgICAgIGhlaWdodD0iMTEuNjcxODc1Ig0KICAgICAgIHg9Ii03OS4xNTQ4ODQiDQogICAgICAgeT0iLTU0MS4wMTYwNSINCiAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSgxMzUpIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC45Mzc1Ig0KICAgICAgIGlkPSJyZWN0NjIzNyINCiAgICAgICB3aWR0aD0iMi4zNDM3NSINCiAgICAgICBoZWlnaHQ9IjExLjY3MTg3NSINCiAgICAgICB4PSI0MjYuNjA2NzUiDQogICAgICAgeT0iMjMuNTgyNTM3Ig0KICAgICAgIHRyYW5zZm9ybT0icm90YXRlKDQ1KSIgLz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuOTM3NSINCiAgICAgICBpZD0icmVjdDM3MDAiDQogICAgICAgd2lkdGg9IjIuMzQzNzUiDQogICAgICAgaGVpZ2h0PSIxMS42NzE4NzUiDQogICAgICAgeD0iNDkuNzYzMTExIg0KICAgICAgIHk9Ii00NTUuMTMxMDciDQogICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoMTM1KSIgLz4NCiAgPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgd2lkdGg9IjE3My45OTkzNyINCiAgIGhlaWdodD0iNDUuMDgyMDAxIg0KICAgdmlld0JveD0iMCAwIDE2My4xMjQ0MiA0Mi4yNjQzNzYiDQogICBpZD0ic3ZnNDM5OSINCiAgIHZlcnNpb249IjEuMSINCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMi4yICg3MzJhMDFkYTYzLCAyMDIyLTEyLTA5KSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImZhbWlseS5zdmciDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIg0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0NDAxIiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjExLjIiDQogICAgIGlua3NjYXBlOmN4PSI3Ny43Njc4NTciDQogICAgIGlua3NjYXBlOmN5PSI0MC4zNTcxNDMiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjI1NjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEzNjkiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSIxOTEyIg0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIHVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiDQogICAgIGlua3NjYXBlOmRlc2tjb2xvcj0iI2QxZDFkMSIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTQ0MDQiPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZSAvPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzYuMDY0OTgsLTMxNy4wNjk3NykiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My4yNTUxMTgzNztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InJlY3QyOTg1Ig0KICAgICAgIHdpZHRoPSIxNTkuODY5MjkiDQogICAgICAgaGVpZ2h0PSIzOS4wMDkyNTgiDQogICAgICAgeD0iMjc3LjY5MjU0Ig0KICAgICAgIHk9IjMxOC42OTczMyINCiAgICAgICByeT0iMCINCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTMuOTU5OTk5Ig0KICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiDQogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPg0KICAgIDx0ZXh0DQogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSINCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIHg9IjMzMi44NjAzMiINCiAgICAgICB5PSIzNDIuMzkxNDIiDQogICAgICAgaWQ9InRleHQ4MTgiPjx0c3Bhbg0KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgIGlkPSJ0c3BhbjgxNiINCiAgICAgICAgIHg9IjMzMi44NjAzMiINCiAgICAgICAgIHk9IjM0Mi4zOTE0MiINCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkZhbWlseTwvdHNwYW4+PC90ZXh0Pg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgd2lkdGg9IjE3NCINCiAgIGhlaWdodD0iNDQuNDQyODIyIg0KICAgdmlld0JveD0iMCAwIDE2My4xMjUgNDEuNjY1MTQ2Ig0KICAgaWQ9InN2ZzQzOTkiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjIuMiAoNzMyYTAxZGE2MywgMjAyMi0xMi0wOSkiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJnZW5lLnN2ZyINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQ0MDEiIC8+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iMy45NTk3OTgiDQogICAgIGlua3NjYXBlOmN4PSItMzUuODYwNDE2Ig0KICAgICBpbmtzY2FwZTpjeT0iMzguNjM4MzM1Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDA5Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgdW5pdHM9InB4Ig0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iMCINCiAgICAgaW5rc2NhcGU6ZGVza2NvbG9yPSIjZDFkMWQxIiAvPg0KICA8bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDQwNCI+DQogICAgPHJkZjpSREY+DQogICAgICA8Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPg0KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICAgICAgPGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4NCiAgICAgICAgPGRjOnRpdGxlIC8+DQogICAgICA8L2NjOldvcms+DQogICAgPC9yZGY6UkRGPg0KICA8L21ldGFkYXRhPg0KICA8Zw0KICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSINCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciINCiAgICAgaWQ9ImxheWVyMSINCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3Ni4wNjQ5NywtMzE3LjY2ODk3KSI+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjY4NzU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGlkPSJyZWN0Mjk4NSINCiAgICAgICB3aWR0aD0iMTYxLjQzNzUyIg0KICAgICAgIGhlaWdodD0iMzkuOTc3NjQ2Ig0KICAgICAgIHg9IjI3Ni45MDg3MiINCiAgICAgICB5PSIzMTguNTEyNzMiDQogICAgICAgcnk9IjEwLjMxNjc5NCINCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTMuOTU5OTk5Ig0KICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1My45NTk5OTkiDQogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXEdvb2dsZSBEcml2ZVx0b29sYmFyXG1hY3JvbW9sZWN1bGUucG5nIiAvPg0KICAgIDx0ZXh0DQogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSINCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToyOC4xMjVweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkzNzVweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIHg9IjMzOC4wNzU0NyINCiAgICAgICB5PSIzNDMuOTQ3MTEiDQogICAgICAgaWQ9InRleHQ4MTgiPjx0c3Bhbg0KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgIGlkPSJ0c3BhbjgxNiINCiAgICAgICAgIHg9IjMzOC4wNzU0NyINCiAgICAgICAgIHk9IjM0My45NDcxMSINCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtzdHJva2Utd2lkdGg6MC45Mzc1cHgiPkdlbmU8L3RzcGFuPjwvdGV4dD4NCiAgPC9nPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIxNzQiDQogICBoZWlnaHQ9IjQ0LjQ0MjgyMiINCiAgIHZpZXdCb3g9IjAgMCAxNjMuMTI1IDQxLjY2NTE0NiINCiAgIGlkPSJzdmc0Mzk5Ig0KICAgdmVyc2lvbj0iMS4xIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSINCiAgIHNvZGlwb2RpOmRvY25hbWU9InByb2Nlc3Muc3ZnIj4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0NDAxIiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjEuNCINCiAgICAgaW5rc2NhcGU6Y3g9Ii02MC4yNDgwNzYiDQogICAgIGlua3NjYXBlOmN5PSI5My41MTExNjYiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICB1bml0cz0icHgiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0NDA0Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc2LjA2NDk3LC0zMTcuNjY4OTcpIj4NCiAgICA8dGV4dA0KICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MjguMTI1cHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45Mzc1cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICB4PSIzMjguNzE1MTIiDQogICAgICAgeT0iMzQzLjg0MDkxIg0KICAgICAgIGlkPSJ0ZXh0ODE4Ij48dHNwYW4NCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiDQogICAgICAgICBpZD0idHNwYW44MTYiDQogICAgICAgICB4PSIzMjguNzE1MTIiDQogICAgICAgICB5PSIzNDMuODQwOTEiDQogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7c3Ryb2tlLXdpZHRoOjAuOTM3NXB4Ij5Qcm9jZXNzPC90c3Bhbj48L3RleHQ+DQogIDwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9ICI0NCIgaGVpZ2h0PSAiNDQiIHZpZXdCb3g9IjAgMCA0NCA0NCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDQ0IDQ0Ij4NCiAgPGNpcmNsZSBjeD0iMjIiIGN5PSIyMiIgcj0iMjIiIGZpbGw9IiNmZmYiLz4NCiAgPHBhdGggZD0ibTIyLDBjLTEyLjIsMC0yMiw5LjgtMjIsMjJzOS44LDIyIDIyLDIyIDIyLTkuOCAyMi0yMi05LjgtMjItMjItMjJ6bS0xLjMsMTkuM2wtMS40LDEuNGMtMC40LDAuNC0xLDAuNC0xLjQsMGwtNC00Yy0wLjMtMC4zLTAuOS0wLjEtMC45LDAuNHYxYzAsMC42LTAuNCwxLTEsMWgtMmMtMC42LDAtMS0wLjQtMS0xdi04YzAtMC42IDAuNC0xIDEtMWg4YzAuNiwwIDEsMC40IDEsMXYyYzAsMC42LTAuNCwxLTEsMWgtMWMtMC40LDAtMC43LDAuNS0wLjQsMC45bDQsNGMwLjUsMC4zIDAuNSwwLjkgMC4xLDEuM3ptMTQuMywxNC43YzAsMC42LTAuNCwxLTEsMWgtOGMtMC42LDAtMS0wLjQtMS0xdi0yYzAtMC42IDAuNC0xIDEtMWgxYzAuNCwwIDAuNy0wLjUgMC40LTAuOWwtNC00Yy0wLjQtMC40LTAuNC0xIDAtMS40bDEuNC0xLjRjMC40LTAuNCAxLTAuNCAxLjQsMGw0LDRjMC4zLDAuMyAwLjksMC4xIDAuOS0wLjR2LTFjMC0wLjYgMC40LTEgMS0xaDJjMC42LDAgMSwwLjQgMSwxdjguMWgtMC4xeiIvPg0KPC9zdmc+DQo=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iYWN0aXZhdGVzLnN2ZyINCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyINCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiDQogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIg0KICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQiPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0ibWFya2VyMTIwMiINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDEyMDAiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDk1OSINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICA8L2RlZnM+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9ImJhc2UiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6em9vbT0iNy45MTk1OTU5Ig0KICAgICBpbmtzY2FwZTpjeD0iLTQuODExMDM1NyINCiAgICAgaW5rc2NhcGU6Y3k9IjE4LjQ2ODYyMSINCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4Ig0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSINCiAgICAgZml0LW1hcmdpbi10b3A9IjAiDQogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCINCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCINCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE3Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGUgLz4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjc1LjY0MjQ3LC0yODEuMjk2NDkpIj4NCiAgICA8cGF0aA0KICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjMuNzQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDQ3LjM1MDg5Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTp0eXBlPSJzdGFyIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiDQogICAgICAgaWQ9InBhdGg0OTUzIg0KICAgICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICAgIHNvZGlwb2RpOmN4PSIyMTIuNDI5MDIiDQogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiINCiAgICAgICBzb2RpcG9kaTpyMT0iMTEuMDU3MzQ3Ig0KICAgICAgIHNvZGlwb2RpOnIyPSI1LjUyODY3MzYiDQogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiINCiAgICAgICBzb2RpcG9kaTphcmcyPSIxLjk2MTY0NTUiDQogICAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJ0cnVlIg0KICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiDQogICAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgICBkPSJtIDIxOS4xNzY1MiwyNjIuNTU4MTggLTE3LjcwNzU3LC03LjI5NjM3IDE1LjE3MjYyLC0xMS42ODcwMSB6Ig0KICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSINCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9IjAuMDc4NDg5NjUzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzk0MzQwOTgsMC44OTk3NzUwNCwtMC45MTg5NjQxOSwwLjM4NjEwNjYzLDQ3NC45ODU4MywxLjM2MTczMjkpIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iYmluZHMuc3ZnIg0KICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCINCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiDQogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzNCI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJtYXJrZXIxMjAyIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoMTIwMCINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoOTU5Ig0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogIDwvZGVmcz4NCiAgPHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBpZD0iYmFzZSINCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIg0KICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiDQogICAgIGlua3NjYXBlOmN4PSItNC44MTEwMzU3Ig0KICAgICBpbmtzY2FwZTpjeT0iMTguNDY4NjIxIg0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTciPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPg0KICAgIDxwYXRoDQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgZD0ibSAyNzUuNjQyNDcsMjkwLjU3MTc1IGggNjAuOTM3NSINCiAgICAgICBpZD0icGF0aDQ5NDkiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iaW5kdWNlcy5zdmciDQogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9IkM6XFVzZXJzXHVndXJcRGVza3RvcFxpbnRlcmFjdGlvbi1sZWdlbmQuMjAxNi4wNC4wMS5wbmciDQogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMzAwIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMwMCINCiAgIHZpZXdCb3g9IjAgMCA2MC45Mzc1MDEgMTguNTUwNTE2Ij4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0Ij4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9Im1hcmtlcjEyMDIiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGgxMjAwIg0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJUcmlhbmdsZU91dEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5NTkiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSINCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciDQogICAgIGlua3NjYXBlOmN5PSIxOC40Njg2MjEiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPg0KICA8bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNyI+DQogICAgPHJkZjpSREY+DQogICAgICA8Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPg0KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICAgICAgPGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4NCiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+DQogICAgICA8L2NjOldvcms+DQogICAgPC9yZGY6UkRGPg0KICA8L21ldGFkYXRhPg0KICA8Zw0KICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSINCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciINCiAgICAgaWQ9ImxheWVyMSINCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+DQogICAgPHBhdGgNCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo3LjQ5OTk5OTg3LDcuNDk5OTk5ODc7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowIg0KICAgICAgIGQ9Im0gMjc1LjY0MjQ3LDI5MC41NzE3NSBoIDQ3LjM1MDg5Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTp0eXBlPSJzdGFyIg0KICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjc1O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3BhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiDQogICAgICAgaWQ9InBhdGg0OTUzIg0KICAgICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICAgIHNvZGlwb2RpOmN4PSIyMTIuNDI5MDIiDQogICAgICAgc29kaXBvZGk6Y3k9IjI1My43OTgyNiINCiAgICAgICBzb2RpcG9kaTpyMT0iMTEuMDU3MzQ3Ig0KICAgICAgIHNvZGlwb2RpOnIyPSI1LjUyODY3MzYiDQogICAgICAgc29kaXBvZGk6YXJnMT0iMC45MTQ0NDc5NiINCiAgICAgICBzb2RpcG9kaTphcmcyPSIxLjk2MTY0NTUiDQogICAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJ0cnVlIg0KICAgICAgIGlua3NjYXBlOnJvdW5kZWQ9IjAiDQogICAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgICBkPSJtIDIxOS4xNzY1MiwyNjIuNTU4MTggLTE3LjcwNzU3LC03LjI5NjM3IDE1LjE3MjYyLC0xMS42ODcwMSB6Ig0KICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteD0iLTIuNjk0NjIxOSINCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9IjAuMDc4NDg5NjUzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzk0MzQwOTgsMC44OTk3NzUwNCwtMC45MTg5NjQxOSwwLjM4NjEwNjYzLDQ3NC45ODU4MywxLjM2MTczMjkpIiAvPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iaW5oaWJpdHMuc3ZnIg0KICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSJDOlxVc2Vyc1x1Z3VyXERlc2t0b3BcaW50ZXJhY3Rpb24tbGVnZW5kLjIwMTYuMDQuMDEucG5nIg0KICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMwMCINCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMDAiDQogICB2aWV3Qm94PSIwIDAgNjAuOTM3NTAxIDE4LjU1MDUxNiI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzNCI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlN0b3BMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwLjAiDQogICAgICAgcmVmWD0iMC4wIg0KICAgICAgIGlkPSJTdG9wTCINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpbmtzY2FwZTppc3N0b2NrPSJ0cnVlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBpZD0icGF0aDk4NiINCiAgICAgICAgIGQ9Ik0gMC4wLDUuNjUgTCAwLjAsLTUuNjUiDQogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSIgLz4NCiAgICA8L21hcmtlcj4NCiAgICA8bWFya2VyDQogICAgICAgaW5rc2NhcGU6c3RvY2tpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIG9yaWVudD0iYXV0byINCiAgICAgICByZWZZPSIwIg0KICAgICAgIHJlZlg9IjAiDQogICAgICAgaWQ9Im1hcmtlcjEyMDIiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGgxMjAwIg0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJUcmlhbmdsZU91dEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5NTkiDQogICAgICAgICBkPSJNIDUuNzcsMCAtMi44OCw1IFYgLTUgWiINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMDNwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjgpIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8L21hcmtlcj4NCiAgPC9kZWZzPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJiYXNlIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSINCiAgICAgaW5rc2NhcGU6Y3g9Ii00LjgxMTAzNTciDQogICAgIGlua3NjYXBlOmN5PSIxMy45MjI5MzQiDQogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCINCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIGZpdC1tYXJnaW4tdG9wPSIwIg0KICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiDQogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiDQogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIiAvPg0KICA8bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNyI+DQogICAgPHJkZjpSREY+DQogICAgICA8Y2M6V29yaw0KICAgICAgICAgcmRmOmFib3V0PSIiPg0KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4NCiAgICAgICAgPGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4NCiAgICAgICAgPGRjOnRpdGxlIC8+DQogICAgICA8L2NjOldvcms+DQogICAgPC9yZGY6UkRGPg0KICA8L21ldGFkYXRhPg0KICA8Zw0KICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSINCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciINCiAgICAgaWQ9ImxheWVyMSINCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI3NS42NDI0NywtMjgxLjI5NjQ5KSI+DQogICAgPHBhdGgNCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozLjc0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICBkPSJtIDI3NS42NDI0NywyOTAuNTcxNzUgaCA1OS43ODA1Ig0KICAgICAgIGlkPSJwYXRoNDk0OSINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+DQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC43NDUwOTgwNDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi43NzU5Mzc1NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo4LjMyNzgxMjQ2LCAyLjc3NTkzNzQ5O3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIg0KICAgICAgIGlkPSJyZWN0NDk4MSINCiAgICAgICB3aWR0aD0iMC45NzQxNjk1NSINCiAgICAgICBoZWlnaHQ9IjE1Ljg4OTcwMyINCiAgICAgICB4PSIzMzQuMjE3ODMiDQogICAgICAgeT0iMjgyLjYyNjg5IiAvPg0KICA8L2c+DQo8L3N2Zz4NCg==\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSI2NSINCiAgIGhlaWdodD0iMTkuNzg3MjE4Ig0KICAgaWQ9InN2ZzIiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0icmVwcmVzc2VzLnN2ZyINCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNcdWd1clxEZXNrdG9wXGludGVyYWN0aW9uLWxlZ2VuZC4yMDE2LjA0LjAxLnBuZyINCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMDAiDQogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzAwIg0KICAgdmlld0JveD0iMCAwIDYwLjkzNzUwMSAxOC41NTA1MTYiPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQiPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJTdG9wTCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMC4wIg0KICAgICAgIHJlZlg9IjAuMCINCiAgICAgICBpZD0iU3RvcEwiDQogICAgICAgc3R5bGU9Im92ZXJmbG93OnZpc2libGUiDQogICAgICAgaW5rc2NhcGU6aXNzdG9jaz0idHJ1ZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgaWQ9InBhdGg5ODYiDQogICAgICAgICBkPSJNIDAuMCw1LjY1IEwgMC4wLC01LjY1Ig0KICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiIC8+DQogICAgPC9tYXJrZXI+DQogICAgPG1hcmtlcg0KICAgICAgIGlua3NjYXBlOnN0b2NraWQ9IlRyaWFuZ2xlT3V0TCINCiAgICAgICBvcmllbnQ9ImF1dG8iDQogICAgICAgcmVmWT0iMCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIGlkPSJtYXJrZXIxMjAyIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoMTIwMCINCiAgICAgICAgIGQ9Ik0gNS43NywwIC0yLjg4LDUgViAtNSBaIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwM3B0O3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuOCkiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDwvbWFya2VyPg0KICAgIDxtYXJrZXINCiAgICAgICBpbmtzY2FwZTpzdG9ja2lkPSJUcmlhbmdsZU91dEwiDQogICAgICAgb3JpZW50PSJhdXRvIg0KICAgICAgIHJlZlk9IjAiDQogICAgICAgcmVmWD0iMCINCiAgICAgICBpZD0iVHJpYW5nbGVPdXRMIg0KICAgICAgIHN0eWxlPSJvdmVyZmxvdzp2aXNpYmxlIg0KICAgICAgIGlua3NjYXBlOmlzc3RvY2s9InRydWUiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIGlkPSJwYXRoOTU5Ig0KICAgICAgICAgZD0iTSA1Ljc3LDAgLTIuODgsNSBWIC01IFoiDQogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjAwMDAwMDAzcHQ7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44KSINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPC9tYXJrZXI+DQogIDwvZGVmcz4NCiAgPHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBpZD0iYmFzZSINCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIg0KICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp6b29tPSI3LjkxOTU5NTkiDQogICAgIGlua3NjYXBlOmN4PSItMjUuMzI5NzU5Ig0KICAgICBpbmtzY2FwZTpjeT0iMTMuOTIyOTM0Ig0KICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBmaXQtbWFyZ2luLXRvcD0iMCINCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIg0KICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIg0KICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4NCiAgPG1ldGFkYXRhDQogICAgIGlkPSJtZXRhZGF0YTciPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAgICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZSAvPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGcNCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiDQogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiDQogICAgIGlkPSJsYXllcjEiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNzUuNjQyNDcsLTI4MS4yOTY0OSkiPg0KICAgIDxwYXRoDQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6My43NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6Ny40OTk5OTk4NywgNy40OTk5OTk4NztzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgZD0ibSAyNzUuNjQyNDcsMjkwLjU3MTc1IGggNTkuNzgwNSINCiAgICAgICBpZD0icGF0aDQ5NDkiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNzQ1MDk4MDQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuNzc1OTM3NTY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6OC4zMjc4MTIzNSwgMi43NzU5Mzc0NTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7cGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSINCiAgICAgICBpZD0icmVjdDQ5ODEiDQogICAgICAgd2lkdGg9IjAuOTc0MTY5NTUiDQogICAgICAgaGVpZ2h0PSIxNS44ODk3MDMiDQogICAgICAgeD0iMzMyLjM0MjgzIg0KICAgICAgIHk9IjI4Mi42MjY4OSIgLz4NCiAgPC9nPg0KPC9zdmc+DQo=\"","module.exports = require(\"react-toastify/dist/ReactToastify.min.css\");","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh0AAABxCAYAAABxyRHvAAAABGdBTUEAALGPC/xhBQAAQABJREFUeAHt3QeYLEdxAOBBPBtjbIxlA8YEP4GMyME2CAS2HgIEmCSRjEWQSCKDyAgEepgghIgig0GPnDMyGR6YnHMGCRBRIGOwwXlcf0Mtc3Oze7t3t3v33nV93+7szvR0V1dXV1VXV3efrQ1oNin88Ic/bPLzpS99qfnyl7/cfOtb32rOOOOM5sc//nHz05/+tPnlL3/ZZBXOdrazNec85zmb85znPM15z3ve5k//9E+b7du3NwcccEBzyUtesjn/+c/fnO985yvXffbZZ5PWuqJVKVApUClQKVApsFdSYOfZNovR8ZOf/KT5+te/3nz6059uPvKRjxQD4wc/+EExOn7xi1+sC/UZJIyOP/mTP2kufvGLN1e+8pWbK17xis3+++9fDJF1KaRmUilQKVApUClQKVApMESBjTU6vvrVrzbvf//7m7e97W3F2GB0/N///d8QonO9d9GLXrS57GUv2xx66KHNjh07mktd6lJzLa9mXilQKVApUClQKbAFKbB4o+P73/9+8/a3v7155Stf2Xz4wx9uzjrrrE1Fd1MzV7rSlZrDDz+8ud71rlemZzYVghWZSoFKgUqBSoFKgT2TAoszOr7whS80u3btal796lc3p59++qYnl/iQC17wgs0NbnCD5sgjj2yucpWrbHqcK4KVApUClQKVApUCm5gC8zc6Pve5zzUnn3xyMTYEfq4FxGSc+9znbn73d3+3+Z3f+Z3mt37rt5pt27Y1DATwv//7v83//M//NP/xH/9RAkx//vOfNz/72c/WUmR5V3m8Hve4xz3K9MuaM6wZVApUClQKVApUCmw9CszP6Pje977XPOEJT2ie//znl1Ums9D2j//4j5s/+7M/a8RaXPrSl24udrGLNRe5yEWaP/iDPxgZHec4xzma3/7t315idDA40uhgeKTR8aMf/ag57bTTGitgvvKVrzTf+c53yioYaWcBRs/Nbnaz5gEPeECJAZnl3Zq2UqBSoFKgUqBSYItTYP2NDt6GF77whc0//MM/TD2N8nu/93vN5S53ueav//qvm4MPPrisJrHUlSdjHsAIsfT2U5/6VPOud72r+cQnPtF84xvfmKooXhXLce95z3uWD0OoQqVApUClQKVApUClwIoUWF+j49vf/nbzoAc9qHn5y1++Ysm8FAceeGDxHBxyyCFlxchG7Z1x5plnNp/85Ceb17/+9c1b3vKWYpCsVIGzn/3szdWudrXmhBNOaA466KCVktfnlQKVApUClQKVAludAutndFj2KubBstdJwEtgiuI2t7lNMTo2ytAYh+N3v/vd5tRTT21e9KIXNR/4wAdGG4+NS68+xx9/fHOXu9ylYYhUqBSoFKgUqBSoFKgUGKTA+hgdT33qU5tjjz22+fd///fBUtwUp3G7292uufOd71xiNMYm3CQPxIS89a1vbdTt3e9+90SsTAPd8Y53bB772MeWmJOJievDSoFKgUqBSoFKga1JgbUZHQIxH/rQhzYnnXTSWI+A1SVHHHFE8+AHP7hsRb6n0Znx8ZrXvKY58cQTGytxxoF6Xv/612+e8YxnlO3Xx6Wr9ysFKgUqBSoFKgW2KAVWb3T853/+Z3PMMcc0z3rWs8bS7hKXuESJeTjssMPGptkTHjjbRfDpk570pObpT39682//9m+DaJteEQz7ghe8oKy2GUxUb1YKVApUClQKVApsTQqszuj47//+7+Ze97rXRIPjtre9bfEOOOdkbwErc+ym+sAHPrD5/Oc/P1itNDys4LnwhS88mKberBSoFKgUqBSoFNiCFNg581GrPBz3v//9Bw0Oy0n33XffEgdxyimnlIPV9iaiMiiue93rNm9+85vLlJG9QvrAMPnnf/7nEr9iP5AKlQKVApUClQKVApUCv6LATEaHGI4nP/nJzdOe9rRl9GNwOEqesWEVy2ZblbIM4VXeUE8bl4ndsFeHnVH7wPB473vf29zvfvdr/vVf/7X/uP6vFKgUqBSoFKgU2JIUOPvOgGlq7vTXN73pTUXRml7pAkVsKsGUAk/AVgDGxt/8zd8U4+pjH/tY06cJelk+/F//9V9l6/S6nHYrcEWtY6VApUClQKXABArsntro+PKXv9yI0/jxj3+8LD8eDvtaXOMa11j2bG++YcVKHgTnxNz+tuo8Hla8bI/dVS9zmcuMzojZm2lS61YpUClQKVApUCkwhgK7p5pesf+G80ZOHzgd9g//8A+b5zznORt6EBr8NmoaQ1yHGJe73/3ug9u2W+nyiEc8onHKboVKgUqBSoFKgUqBrUyBFY0O0wTPfe5zyy6dfUJRuI9+9KPL/hT9Z4v6z+Cw9fod7nCHQS/MIvBwCu1xxx3X3OQmN1kWy2K5LWPNWTSTNk9bBJ61jEqBSoFKgUqBSoGNpMCKRodplcc97nHLcBQoStHbYXSjgBK3OZm9M2zgZSvyoemfReDn4LfHPOYxzV/8xV8sK860yz/90z81r3jFK8ZuorbspXqjUqBSoFKgUqBSYC+jwNliJN6OqxNledRRRzUveclLliW58pWvXLwftjffCEiD4ylPecqS4m9605uW5bwbgZcYDlum/93f/V3zL//yL0vwEmx7qUtdqtDM6pcKlQLzogA+FMCM58Qd+cwDyAflgL4YEWi9qOBp3lh19fHbsn749HFyXIGDJitUCuypFMDT+p2PgT+e3sNWik7eHMxGWDe84Q1HgiUbylH0b3zjGzcscHScwZH4baThQeA96lGPKjuxEv5dMB113/vetzzfCEYhkH0mAcG9WmWhvn1B3y9LvTei7n089tb/+M9BhXnSs8MVr3nNa666TcfRibFhWbjl89rcfx+ruHj9HvnIRzZXvOIVx70+1X154SkCVr38Puc5z1mMKDzKmHJMwWmnnVb2Bzrf+c7XfOUrXylnIP30pz8dved9RtCtb33rctDkVIVvoUTTyIUkB/mg/7omoO8kyLSrlSuT8t5qz+z9ZBXpRz/60caO34cffnhz8YtffEl7bHKa7Bw7BNKZH//4xy8zODDQ0UcfvWkNDgQ31UIQPvvZzy4HzS2yERgWpnkYbBijC4Tyi1/84uZWt7pVc+lLX7r7aO6/CexPfOITzZlnnjm2LG0rMNiKnBQUYxP3HhA8VvBMCuiVpx1qh6agetnVv6uggDb+0pe+VPjva1/7WmlDnrdXvepVazYA+ugo6wc/+EExPPA1oyANWsqf0l8tyM806fve977iOfziF7/Y/OxnPyvZnetc52r222+/5qCDDmouf/nLFwPr+c9/ftkhWb+TjtEFN/mkQjz3uc/dHHzwwatFaa9975e//GWDV6bdyBD9KTv9GA98//vfLyv0su3HEeo85zlPaS8D1gqrowDe3rVrV9kr66yzzmroGvR3rtkFLnCB1WW6EW+Fch6E8GS0MZIw9bLks//++7dnnHHG4DvzvhkrQdp73/veS/Dp49f9Hx6PNpTsvNFaln+M0NpXv/rVbYyuluEa7t32Pve5Txsddtl787yBdte5znXaYNTSrmEALMPNvYte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\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1Ljk1OHB4IiBoZWlnaHQ9IjQ1Ljk1OHB4IiB2aWV3Qm94PSIwIDAgNDUuOTU4IDQ1Ljk1OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuOTU4IDQ1Ljk1ODsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTIyLjk3OSwwQzEwLjI4OCwwLDAsMTAuMjg5LDAsMjIuOTc5czEwLjI4OCwyMi45NzksMjIuOTc5LDIyLjk3OWMxMi42OSwwLDIyLjk3OS0xMC4yODksMjIuOTc5LTIyLjk3OVMzNS42NywwLDIyLjk3OSwweg0KCQkgTTMyLjI1MywyNi45NzdoLTUuMzAxdjUuMjg5YzAsMi4yMDctMS43NjUsMy45OTYtMy45NzIsMy45OTZjLTIuMjA2LDAtMy45NzEtMS43ODktMy45NzEtMy45OTZ2LTUuMjkxSDEzLjcxDQoJCWMtMi4yMDcsMC00LjAwNi0xLjc4OS00LjAwNi0zLjk5N2MwLTIuMjA3LDEuNzk2LTMuOTk2LDQuMDAzLTMuOTk2aDUuMzAydi01LjI4OWMwLTIuMjA4LDEuNzY1LTMuOTk3LDMuOTcxLTMuOTk3DQoJCWMyLjIwOCwwLDMuOTcyLDEuNzg5LDMuOTcyLDMuOTk3djUuMjloNS4zMDFjMi4yMDcsMCwzLjk5NywxLjc5LDMuOTk3LDMuOTk3QzM2LjI1LDI1LjE4OCwzNC40NiwyNi45NzcsMzIuMjUzLDI2Ljk3N3oiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMS4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQoNCjxzdmcNCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyINCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiDQogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpZD0iQ2FwYV8xIg0KICAgeD0iMHB4Ig0KICAgeT0iMHB4Ig0KICAgdmlld0JveD0iMCAwIDYxMiA2MTIiDQogICBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA2MTIgNjEyOyINCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIxMzcyNSINCiAgIHNvZGlwb2RpOmRvY25hbWU9ImRlbGV0ZS1zaW1wbGUuc3ZnIj48bWV0YWRhdGENCiAgICAgaWQ9Im1ldGFkYXRhNDMiPjxyZGY6UkRGPjxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUNCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMNCiAgICAgaWQ9ImRlZnM0MSIgLz48c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciDQogICAgIGlkPSJuYW1lZHZpZXczOSINCiAgICAgc2hvd2dyaWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTp6b29tPSIxLjA5MDcwMDciDQogICAgIGlua3NjYXBlOmN4PSIyOTUuMDM0MDgiDQogICAgIGlua3NjYXBlOmN5PSIzMzAuODU0NDgiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJDYXBhXzEiIC8+PGcNCiAgICAgaWQ9Imc1Ig0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Nzg4MTM1LDAsMCwwLjk5Nzg4MTM1LDEuNzMwNDAxMiwwLjkyMzcyODQ3KSI+PHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNyINCiAgICAgICBkPSJNIDU4Ny44MjYsMTg2Ljk2NiBDIDU3MS43MSwxNDkuNjM0IDU0OS44ODIsMTE3LjE5OCA1MjIuMzQyLDg5LjY1OCA0OTQuODAyLDYyLjExOCA0NjIuMzY2LDQwLjI5IDQyNS4wMzQsMjQuMTc0IDM4Ny43MDIsOC4wNTggMzQ4LjAyNCwwIDMwNiwwIDI3Ny44NDgsMCAyNTAuNzE2LDMuNjcyIDIyNC42MDQsMTEuMDE2IDE5OC40OTIsMTguMzYgMTc0LjExNCwyOC42NjIgMTUxLjQ3LDQxLjkyMiAxMjguODI2LDU1LjE4MiAxMDguMjIyLDcxLjA5NCA4OS42NTgsODkuNjU4IDcxLjA5NCwxMDguMjIyIDU1LjE4MiwxMjguODI2IDQxLjkyMiwxNTEuNDcgMjguNjYyLDE3NC4xMTYgMTguMzYsMTk4LjQ5MiAxMS4wMTYsMjI0LjYwNCAzLjY3MiwyNTAuNzE2IDAsMjc3Ljg0OCAwLDMwNiBjIDAsMjguMTUyIDMuNjcyLDU1LjI4NCAxMS4wMTYsODEuMzk2IDcuMzQ0LDI2LjExIDE3LjY0Niw1MC40ODcgMzAuOTA2LDczLjEzNCAxMy4yNiwyMi42NDQgMjkuMTcyLDQzLjI0OSA0Ny43MzYsNjEuODEyIDE4LjU2NCwxOC41NjQgMzkuMTY4LDM0LjQ3OCA2MS44MTIsNDcuNzM2IDIyLjY0NCwxMy4yNiA0Ny4wMjIsMjMuNTYxIDczLjEzNCwzMC45MDYgQyAyNTAuNzE2LDYwOC4zMjggMjc3Ljg0OCw2MTIgMzA2LDYxMiBjIDI4LjE1MiwwIDU1LjI4NCwtMy42NzIgODEuMzk2LC0xMS4wMTYgMjYuMTExLC03LjM0NiA1MC40ODgsLTE3LjY0NiA3My4xMzUsLTMwLjkwNiAyMi42NDQsLTEzLjI1OSA0My4yNDksLTI5LjE3MiA2MS44MTIsLTQ3LjczNiAxOC41NjQsLTE4LjU2MyAzNC40NzgsLTM5LjE2OCA0Ny43MzYsLTYxLjgxMiAxMy4yNiwtMjIuNjQ2IDIzLjU2MSwtNDcuMDIzIDMwLjkwNiwtNzMuMTM1IEMgNjA4LjMyOCwzNjEuMjg0IDYxMiwzMzQuMTUyIDYxMiwzMDYgNjEyLDI2My45NzYgNjAzLjk0MiwyMjQuMjk4IDU4Ny44MjYsMTg2Ljk2NiBaIE0gNDY4LjE4LDM5MS42OCBjIDIuMDQsMi4wNCAzLjA2Myw0LjI4NCAzLjA2Myw2LjczMiAwLDIuNDQ4IC0xLjAyMSw0LjQ4OCAtMy4wNjMsNi4xMiBsIC01OS45NzYsNjAuNTg4IGMgLTEuNjMxLDEuNjMyIC0zLjg3NiwyLjQ0OCAtNi43MzIsMi40NDggLTIuODU0LDAgLTQuODk1LC0wLjgxNiAtNi4xMiwtMi40NDggTCAzMDkuMDYsMzc4LjgyOCAyMjMuMzgsNDY1LjEyIGMgLTIuNDQ4LDEuNjMyIC00LjY5MiwyLjQ0OCAtNi43MzIsMi40NDggLTEuNjMyLDAgLTMuNjcyLC0wLjgxNiAtNi4xMiwtMi40NDggbCAtNTkuOTc2LC02MC41ODggYyAtMi4wNCwtMS4yMjYgLTMuMDYsLTMuMjY3IC0zLjA2LC02LjEyIDAsLTIuNDQ4IDEuMDIsLTQuNjkyIDMuMDYsLTYuNzMyIGwgODUuNjgsLTg1LjY4IC04NS42OCwtODUuNjggYyAtMi4wNCwtMi4wNCAtMy4wNiwtNC4yODQgLTMuMDYsLTYuNzMyIDAsLTIuODU2IDEuMDIsLTQuODk2IDMuMDYsLTYuMTIgbCA1OS45NzYsLTYwLjU4OCBjIDEuNjMyLC0xLjYzMiAzLjY3MiwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDg1LjY4LDg2LjI5MiA4Ni4yOTIsLTg2LjI5MiBjIDEuNjM1LC0xLjYzMiAzLjY3NSwtMi40NDggNi4xMiwtMi40NDggMi40NDgsMCA0LjY5MiwwLjgxNiA2LjczMiwyLjQ0OCBsIDU5Ljk3Niw2MC41ODggYyAyLjA0LDEuNjMyIDMuMDYzLDMuNjcyIDMuMDYzLDYuMTIgMCwyLjQ0OCAtMS4wMjEsNC42OTIgLTMuMDYzLDYuNzMyIEwgMzgyLjUsMzA2IGwgODUuNjgsODUuNjggeiINCiAgICAgICBzdHlsZT0iZmlsbDojMDEwMDAyIiAvPjwvZz48Zw0KICAgICBpZD0iZzkiIC8+PGcNCiAgICAgaWQ9ImcxMSIgLz48Zw0KICAgICBpZD0iZzEzIiAvPjxnDQogICAgIGlkPSJnMTUiIC8+PGcNCiAgICAgaWQ9ImcxNyIgLz48Zw0KICAgICBpZD0iZzE5IiAvPjxnDQogICAgIGlkPSJnMjEiIC8+PGcNCiAgICAgaWQ9ImcyMyIgLz48Zw0KICAgICBpZD0iZzI1IiAvPjxnDQogICAgIGlkPSJnMjciIC8+PGcNCiAgICAgaWQ9ImcyOSIgLz48Zw0KICAgICBpZD0iZzMxIiAvPjxnDQogICAgIGlkPSJnMzMiIC8+PGcNCiAgICAgaWQ9ImczNSIgLz48Zw0KICAgICBpZD0iZzM3IiAvPjwvc3ZnPg==\"","module.exports = require(\"sharedb/lib/client\");","module.exports = require(\"jquery-ui-dist/jquery-ui\");","module.exports = require(\"cytoscape-edgehandles\");","module.exports = require(\"cytoscape-edge-editing\");","module.exports = require(\"cytoscape-fcose\");","module.exports = require(\"cytoscape-node-editing\");","module.exports = require(\"cytoscape-undo-redo\");","module.exports = require(\"cytoscape-panzoom\");","module.exports = (function()\r\n{\r\n var styleSheet = [\r\n {\r\n selector: 'node',\r\n style:\r\n {\r\n 'text-valign': 'center',\r\n 'text-halign': 'center',\r\n 'color': '#1e2829',\r\n 'width': function (ele)\r\n {\r\n return ele.data('w') || 0;\r\n },\r\n 'height': function (ele)\r\n {\r\n return ele.data('h') || 0;\r\n },\r\n 'background-color': 'white',\r\n 'shape': function(ele)\r\n {\r\n return parentNodeShapeFunc( ele );\r\n },\r\n 'border-width': function(ele)\r\n {\r\n return borderWidthFunction( ele );\r\n },\r\n 'border-color': function(ele)\r\n {\r\n return nodeBorderColorFunction(ele);\r\n },\r\n 'font-size': 14,\r\n 'background-opacity': function(ele)\r\n {\r\n return nodeBackgroundOpacityFunction(ele);\r\n },\r\n 'underlay-opacity': 0,\r\n 'underlay-color': '#ffc90e'\r\n }\r\n },\r\n {\r\n selector: 'node[name]',\r\n style: {\r\n 'label': 'data(name)'\r\n }\r\n },\r\n {\r\n selector: 'node:parent',\r\n style:\r\n {\r\n 'shape': function(ele)\r\n {\r\n return parentNodeShapeFunc( ele );\r\n },\r\n 'text-valign': function(ele)\r\n {\r\n return 'bottom';\r\n },\r\n 'text-margin-y' : 2,\r\n 'padding-left': function(ele){ return compoundPaddingFunction(ele); },\r\n 'padding-right': function(ele){ return compoundPaddingFunction(ele); },\r\n 'padding-bottom': function(ele){ return compoundPaddingFunction(ele); },\r\n 'padding-top': function(ele){ return compoundPaddingFunction(ele); },\r\n 'background-opacity': 0.5,\r\n 'border-width': function(ele)\r\n {\r\n return parentBorderWidthFunction( ele );\r\n },\r\n 'border-color': function(ele)\r\n {\r\n return nodeBorderColorFunction(ele);\r\n },\r\n 'background-color': function(ele){\r\n return nodeBackgroundColorFunction(ele);\r\n }\r\n }\r\n },\r\n {\r\n selector: 'edge',\r\n style:\r\n {\r\n 'arrow-scale': 1.7,\r\n 'curve-style': 'bezier',\r\n 'text-background-color': '#EEEEEE',\r\n 'text-background-opacity': 0,\r\n 'target-arrow-shape': function( ele )\r\n {\r\n return edgeTargetArrowTypeHandler(ele);\r\n },\r\n 'width': 1,\r\n 'line-color': function( ele )\r\n {\r\n return edgeColorHandler(ele);\r\n },\r\n 'target-arrow-color': function( ele )\r\n {\r\n return edgeColorHandler(ele);\r\n },\r\n 'line-style': function(ele)\r\n {\r\n return edgeLineTypeHandler(ele);\r\n },\r\n 'opacity': 1,\r\n 'underlay-opacity': 0,\r\n 'underlay-color': '#ffc90e'\r\n }\r\n },\r\n {\r\n selector: 'edge[name]',\r\n style: {\r\n 'label': function(edge) {\r\n const label = edge.data('name');\r\n if (label === \"\") {\r\n return label;\r\n }\r\n //https://github.com/cytoscape/cytoscape.js/issues/2329\r\n return (label + \"\\n \\u2060\"); \r\n },\r\n 'text-wrap': 'wrap',\r\n 'edge-text-rotation': 'autorotate',\r\n 'text-background-opacity': '0'\r\n }\r\n },\r\n\r\n // some style for the Edge Handles !!!\r\n\r\n {\r\n selector: '.eh-handle',\r\n style: {\r\n 'background-color': '#1abc9c',\r\n 'width': 12,\r\n 'height': 12,\r\n 'shape': 'ellipse',\r\n 'overlay-opacity': 0,\r\n 'border-width': 12, // makes the handle easier to hit\r\n 'border-opacity': 0\r\n }\r\n },\r\n\r\n {\r\n selector: '.eh-hover',\r\n css: {\r\n 'background-color': '#1abc9c'\r\n }\r\n },\r\n\r\n {\r\n selector: '.eh-source',\r\n css: {\r\n 'border-width': 2,\r\n 'border-color': '#1abc9c'\r\n }\r\n },\r\n\r\n {\r\n selector: '.eh-target',\r\n css: {\r\n 'border-width': 2,\r\n 'background-color': '#1abc9c',\r\n 'border-color': '#1abc9c'\r\n }\r\n },\r\n\r\n {\r\n selector: '.eh-preview, .eh-ghost-edge',\r\n css: {\r\n 'line-color': '#1abc9c',\r\n 'target-arrow-color': '#1abc9c',\r\n 'source-arrow-color': '#1abc9c'\r\n }\r\n },\r\n\r\n {\r\n selector: '.highlightedEdge',\r\n style:\r\n {\r\n 'width': 3.5,\r\n 'border-width':4,\r\n 'line-color' : '#1abc9c' ,\r\n 'target-arrow-color': '#1abc9c',\r\n 'arrow-scale': 2\r\n }\r\n },\r\n {\r\n selector: '.highlightedNode',\r\n style:\r\n {\r\n 'border-width': function(ele)\r\n {\r\n return highlightedBorderWidthFunction( ele );\r\n },\r\n 'border-color': '#1abc9c',\r\n 'background-color': '#fff',\r\n }\r\n },\r\n {\r\n selector: '.invalidGene',\r\n style:\r\n {\r\n 'border-width': 2,\r\n 'border-color': '#e94332',\r\n 'color': '#e94332'\r\n }\r\n },\r\n {\r\n // The css properties when a node is highlighted and an invalid gene\r\n selector: '.invalidGeneHighlight',\r\n style:\r\n {\r\n 'border-width': 3,\r\n 'font-weight' : 'bold',\r\n 'border-color': '#e94332',\r\n 'color': '#e94332',\r\n }\r\n },\r\n {\r\n selector: 'node:selected',\r\n style:\r\n {\r\n 'border-width': function(ele)\r\n {\r\n return selectedBorderWidthFunction( ele );\r\n },\r\n 'underlay-opacity': 0.25,\r\n 'underlay-color': '#ffc90e'\r\n }\r\n },\r\n {\r\n selector: '.highlightedNode:selected, .invalidGeneHighlight:selected',\r\n style:\r\n {\r\n 'border-width': function(ele)\r\n {\r\n return selectedHighlightedBorderWidthFunction( ele );\r\n },\r\n }\r\n },\r\n {\r\n selector: 'edge:selected',\r\n style:\r\n {\r\n 'width' : 3,\r\n 'underlay-opacity': 0.25,\r\n 'underlay-color': '#ffc90e'\r\n }\r\n },\r\n ];\r\n\r\n\r\n var nodeBackgroundOpacityFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"FAMILY\": return 0.5;\r\n case \"COMPLEX\": return 0.5;\r\n case \"COMPARTMENT\": return 0.5;\r\n default: return 1;\r\n }\r\n };\r\n\r\n\r\n var compoundPaddingFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"FAMILY\": return 5;\r\n case \"COMPLEX\": return '5'; \r\n case \"COMPARTMENT\": return 10;\r\n case \"PROCESS\": return 10;\r\n default: return 5;\r\n }\r\n };\r\n\r\n var contentFunction = function( ele )\r\n {\r\n if (ele._private.data.name) {\r\n return ele._private.data.name;\r\n }\r\n return 'newNode';\r\n };\r\n\r\n var vTextPositionFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 'center';\r\n case \"FAMILY\": return 'top';\r\n case \"COMPLEX\": return 'top';\r\n case \"COMPARTMENT\": return 'top';\r\n default: return 'center';\r\n }\r\n };\r\n\r\n var borderWidthFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 1;\r\n case \"PROCESS\": return 0;\r\n default: return 2;\r\n }\r\n };\r\n\r\n var parentBorderWidthFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 1;\r\n case \"PROCESS\": return 0;\r\n case \"FAMILY\": return 2;\r\n case \"COMPLEX\": return 1;\r\n case \"COMPARTMENT\": return 4;\r\n default: return 1;\r\n }\r\n };\r\n\r\n var highlightedBorderWidthFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 3;\r\n case \"PROCESS\": return 1;\r\n case \"FAMILY\": return 4;\r\n case \"COMPARTMENT\": return 6;\r\n default: return 3;\r\n }\r\n };\r\n\r\n var selectedBorderWidthFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 2;\r\n case \"PROCESS\": return 1;\r\n case \"FAMILY\": return 3;\r\n case \"COMPARTMENT\": return 3;\r\n default: return 3;\r\n }\r\n };\r\n var selectedHighlightedBorderWidthFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return 3;\r\n case \"PROCESS\": return 1;\r\n case \"FAMILY\": return 4;\r\n case \"COMPARTMENT\": return 6;\r\n default: return 3;\r\n }\r\n };\r\n\r\n\r\n var parentNodeShapeFunc = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return \"roundrectangle\";\r\n case \"PROCESS\": return \"roundrectangle\";\r\n case \"FAMILY\": return \"rectangle\";\r\n case \"COMPARTMENT\": return \"barrel\";\r\n case \"COMPLEX\": return \"cutrectangle\";\r\n default: return \"roundrectangle\";\r\n }\r\n };\r\n\r\n var nodeBackgroundColorFunction = function( ele )\r\n {\r\n return \"#fff\";\r\n };\r\n\r\n var nodeBorderColorFunction = function( ele )\r\n {\r\n switch (ele._private.data['type'])\r\n {\r\n case \"GENE\": return \"#000000\";\r\n case \"FAMILY\": return \"#000000\";\r\n case \"COMPLEX\": return \"#000000\";\r\n case \"COMPARTMENT\": return \"#000000\";\r\n default: return \"#000000\";\r\n }\r\n };\r\n\r\n var edgeColorHandler = function( ele )\r\n {\r\n return \"#1b1b1b\";\r\n };\r\n\r\n var edgeTargetArrowTypeHandler = function( ele )\r\n {\r\n switch (ele._private.data['type']){\r\n case \"ACTIVATES\": return \"triangle\";\r\n case \"INHIBITS\": return \"tee\";\r\n case \"INDUCES\": return \"triangle\";\r\n case \"REPRESSES\": return \"tee\";\r\n case \"BINDS\": return \"none\";\r\n default: return \"none\";\r\n }\r\n };\r\n\r\n var edgeLineTypeHandler = function( ele )\r\n {\r\n switch (ele._private.data['type']){\r\n case \"ACTIVATES\": return \"solid\";\r\n case \"INHIBITS\": return \"solid\";\r\n case \"INDUCES\": return \"dashed\";\r\n case \"REPRESSES\": return \"dashed\";\r\n case \"BINDS\": return \"solid\";\r\n default: return \"solid\";\r\n }\r\n };\r\n\r\n return styleSheet;\r\n})();\r\n","var panzoomOptions =\r\n{\r\n zoomFactor: 0.05, // zoom factor per zoom tick\r\n zoomDelay: 45, // how many ms between zoom ticks\r\n minZoom: 0.1, // min zoom level\r\n maxZoom: 10, // max zoom level\r\n fitPadding: 50, // padding when fitting\r\n panSpeed: 10, // how many ms in between pan ticks\r\n panDistance: 10, // max pan distance per tick\r\n panDragAreaSize: 75, // the length of the pan drag box in which the vector for panning is calculated (bigger = finer control of pan speed and direction)\r\n panMinPercentSpeed: 0.25, // the slowest speed we can pan by (as a percent of panSpeed)\r\n panInactiveArea: 8, // radius of inactive area in pan drag box\r\n panIndicatorMinOpacity: 0.5, // min opacity of pan indicator (the draggable nib); scales from this to 1.0\r\n zoomOnly: false, // a minimal version of the ui only with zooming (useful on systems with bad mousewheel resolution)\r\n fitSelector: undefined, // selector of elements to fit\r\n animateOnFit: function(){ // whether to animate on fit\r\n return false;\r\n },\r\n fitAnimationDuration: 1000, // duration of animation on fit\r\n\r\n // icon class names\r\n sliderHandleIcon: 'fa fa-minus',\r\n zoomInIcon: 'fa fa-plus',\r\n zoomOutIcon: 'fa fa-minus',\r\n resetIcon: 'fa fa-expand'\r\n};\r\n\r\nmodule.exports = panzoomOptions;\r\n","module.exports = require(\"cytoscape-navigator\");","module.exports = require(\"cytoscape-context-menus\");","module.exports = require(\"konva\");","module.exports = require(\"cytoscape-view-utilities\");","module.exports = require(\"cytoscape-grid-guide\");","module.exports = require(\"cytoscape-popper\");","module.exports = require(\"cytoscape-layout-utilities\");","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik00ODEuNTA4LDIxMC4zMzZMNjguNDE0LDM4LjkyNmMtMTcuNDAzLTcuMjIyLTM3LjA2NC00LjA0NS01MS4zMDksOC4yODdDMi44Niw1OS41NDctMy4wOTgsNzguNTUxLDEuNTU4LDk2LjgwOA0KCQkJTDM4LjMyNywyNDFoMTgwLjAyNmM4LjI4NCwwLDE1LjAwMSw2LjcxNiwxNS4wMDEsMTUuMDAxYzAsOC4yODQtNi43MTYsMTUuMDAxLTE1LjAwMSwxNS4wMDFIMzguMzI3TDEuNTU4LDQxNS4xOTMNCgkJCWMtNC42NTYsMTguMjU4LDEuMzAxLDM3LjI2MiwxNS41NDcsNDkuNTk1YzE0LjI3NCwxMi4zNTcsMzMuOTM3LDE1LjQ5NSw1MS4zMSw4LjI4N2w0MTMuMDk0LTE3MS40MDkNCgkJCUM1MDAuMzE3LDI5My44NjIsNTEyLDI3Ni4zNjQsNTEyLDI1Ni4wMDFDNTEyLDIzNS42MzgsNTAwLjMxNywyMTguMTM5LDQ4MS41MDgsMjEwLjMzNnoiLz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"","module.exports = require(\"@datastructures-js/max-heap\");","import { IPathwayInfo } from \"../managers/FileOperationsManager\";\r\n\r\nexport default class SaveLoadUtility{\r\n //Exports given json graph(based on cy.export()) into a string\r\n static exportGraph(pathwayDetails: IPathwayInfo, cy, edgeEditing)\r\n {\r\n var returnString = pathwayDetails.pathwayTitle + '\\n\\n';\r\n returnString += pathwayDetails.pathwayDetails +'\\n\\n';\r\n\r\n //Get nodes and edges\r\n var nodes = cy.nodes();\r\n var edges = cy.edges();\r\n\r\n //Prepare Meta Line\r\n returnString += '--NODE_NAME\\tNODE_ID\\tNODE_TYPE\\tPARENT_ID\\tPOSX\\tPOSY\\tWIDTH\\tHEIGHT--'+'\\n';\r\n\r\n if (nodes)\r\n {\r\n for (let i = 0; i < nodes.length; i++)\r\n {\r\n returnString += this.exportNode(nodes[i]);\r\n }\r\n }\r\n\r\n //Put a blank line between nodes and edges\r\n returnString += '\\n';\r\n returnString += '--EDGE_ID\\tSOURCE\\tTARGET\\tEDGE_TYPE\\tINTERACTION_PUBMED_ID\\tEDGE_NAME\\tEDGE_BENDS\\tEDGE_CURVE_STYLE\\n';\r\n\r\n if (edges) {\r\n //Write edges\r\n for (let i = 0; i < edges.length; i++)\r\n {\r\n var edgeID = edges[i].data('id');\r\n var edgeType = edges[i].data('type');\r\n var source = edges[i].data('source');\r\n var target = edges[i].data('target');\r\n var pubmedIDs = edges[i].data('pubmedIDs');\r\n var pubmedString = \"\";\r\n var edgeName = (edges[i].data('name')) ? edges[i].data('name') : \"\";\r\n var edgeCurveStyle = edges[i].css('curve-style');\r\n\r\n var numberOfAnchorPoints = 0;\r\n var anchors = edgeEditing.getAnchorsAsArray(edges[i])\r\n if (anchors !== undefined)\r\n numberOfAnchorPoints = anchors.length/2;\r\n var anchorPointPositions = \"\";\r\n for (var j = 0; j < numberOfAnchorPoints; j++)\r\n {\r\n anchorPointPositions += \"(\" + anchors[2*j] + \";\" +\r\n anchors[2*j+1] + \")\";\r\n }\r\n\r\n if (pubmedIDs != undefined) {\r\n for (var j = 0; j < pubmedIDs.length; j++)\r\n {\r\n pubmedString += pubmedIDs[j];\r\n if (j != pubmedIDs.length - 1)\r\n pubmedString += \";\"\r\n }\r\n }\r\n\r\n returnString += edgeID + '\\t' +\r\n source + '\\t' +\r\n target + '\\t' +\r\n edgeType + '\\t' +\r\n pubmedString + '\\t' +\r\n edgeName + '\\t' +\r\n anchorPointPositions + '\\t' + \r\n edgeCurveStyle + '\\n';\r\n }\r\n }\r\n\r\n //Finally return a string that includes whole graph lovely and peacefully :)\r\n return returnString;\r\n }\r\n static exportAsSIFNX(cy: any)\r\n {\r\n let returnString = \"\";\r\n\r\n //Get nodes and edges\r\n const nodes = cy.nodes();\r\n const edges = cy.edges();\r\n const nodeMap = {};\r\n //Put a blank line between nodes and edges\r\n returnString += '\\n';\r\n returnString += 'PARTICIPANT\\tPARTICIPANT_TYPE\\tPARENT_ID\\tPOSX\\tPOSY\\tWIDTH\\tHEIGHT'+'\\n';\r\n\r\n if (nodes)\r\n {\r\n for (var i = 0; i < nodes.length; i++)\r\n {\r\n returnString += this.exportNode(nodes[i]);\r\n\r\n nodeMap[nodes[i].id()] = nodes[i];\r\n }\r\n }\r\n\r\n //Put a blank line between nodes and edges\r\n returnString += '\\n';\r\n returnString += 'PARTICIPANT_A\\tPARTICIPANT_B\\tTYPE\\tPUBMED_IDS\\n';\r\n\r\n \r\n if (edges) {\r\n //Write edges\r\n for (var i = 0; i < edges.length; i++)\r\n {\r\n var edgeType = edges[i].data(\"type\");\r\n var source = edges[i].data(\"source\");\r\n var target = edges[i].data(\"target\");\r\n var edgeName = edges[i].data(\"name\");\r\n var pubmedIDs = edges[i].data(\"pubmedIDs\");\r\n var pubmedString = \"\";\r\n\r\n if (pubmedIDs != undefined) {\r\n for (var j = 0; j < pubmedIDs.length; j++)\r\n {\r\n pubmedString += pubmedIDs[j];\r\n if (j != pubmedIDs.length - 1)\r\n pubmedString += \";\"\r\n }\r\n }\r\n\r\n returnString += nodeMap[source].data(\"name\") + '\\t' +\r\n nodeMap[target].data(\"name\") + '\\t' +\r\n edgeType + '\\t' +\r\n pubmedString + '\\t' +\r\n edgeName + '\\n';\r\n }\r\n }\r\n\r\n //Finally return a string that includes whole graph lovely and peacefully :)\r\n return returnString;\r\n }\r\n static exportNode(node)\r\n {\r\n //Node specific data fields\r\n var nodeName = node.data(\"name\");\r\n var parentID = node.data(\"parent\");\r\n var nodeID = node.data(\"id\");\r\n var pos = node.position();\r\n var nodeType = node.data(\"type\");\r\n var nodeW = node.data(\"w\");\r\n var nodeH = node.data(\"h\");\r\n\r\n //Check if node has a parent, if not set parent id -1\r\n if (node.data(\"parent\"))\r\n {\r\n parentID = node.data(\"parent\");\r\n }\r\n else\r\n {\r\n parentID = -1;\r\n }\r\n\r\n // Write a line for a node\r\n return nodeName + '\\t' +\r\n nodeID + '\\t' +\r\n nodeType + '\\t' +\r\n parentID + '\\t' +\r\n parseInt(pos.x) + '\\t' +\r\n parseInt(pos.y) + '\\t' +\r\n nodeW + '\\t' +\r\n nodeH + '\\n';\r\n }\r\n static parseGraph(graph, isArray) {\r\n\r\n const allEles = [];\r\n const nodes = [];\r\n const edges = [];\r\n\r\n // By lines\r\n // Match all new line character representations\r\n var seperator = /\\r?\\n|\\r/;\r\n var lines = (isArray) ? graph : graph.split(seperator);\r\n var edgesStartIndex = -1;\r\n var title = lines[0];\r\n var description = lines[2];\r\n\r\n // In old version description used to expand in multiple lines\r\n // graphDataIndex holds the line index where the first --NODE_NAME occurs and is used later to load nodes\r\n let graphDataIndex = 3;\r\n let isFound = false;\r\n while (graphDataIndex < lines.length) {\r\n if (lines[graphDataIndex].includes(\"--NODE_NAME\")) {\r\n isFound = true;\r\n break;\r\n }\r\n description += \"\\n\" + lines[graphDataIndex];\r\n graphDataIndex++;\r\n }\r\n graphDataIndex++;\r\n // TODO AMENDMENT\r\n if(!isFound){\r\n graphDataIndex = 2;\r\n }\r\n //TODO Legacy pathways workaround\r\n if (lines[0].includes(\"--NODE_NAME\")) {\r\n graphDataIndex = 1;\r\n title = \"New Pathway\";\r\n description = \"\";\r\n }\r\n\r\n // start from first line skip node meta data\r\n for (var i = graphDataIndex; i < lines.length; i++) {\r\n // If we encounter a blank line, that means we need to parse edges from now on !\r\n // so skip blank line and edge meta line\r\n if (lines[i].length == 0 || lines[i] === \"\") {\r\n edgesStartIndex = i + 2;\r\n break;\r\n }\r\n\r\n //Fetch a line for nodes\r\n var lineData = lines[i].split('\\t');\r\n var nodeName = lineData[0];\r\n var nodeID = lineData[1];\r\n var nodeType = lineData[2];\r\n var parentID = lineData[3];\r\n var posX = (lineData.length > 4) ? lineData[4] : \"0\";\r\n var posY = (lineData.length > 5) ? lineData[5] : \"0\";\r\n var nodeW = (lineData.length > 7) ? lineData[6] : (nodeType === 'PROCESS') ? (nodeName.length * 6 + 24) : \"150\";\r\n var nodeH = (lineData.length > 7) ? lineData[7] : (nodeType === 'PROCESS') ? \"24\" : \"52\";\r\n\r\n if(nodeName === \" \" || nodeName === \"\"){\r\n //nodeName = \"No Name \" + (i + 1);\r\n }\r\n\r\n\r\n var newNode = {\r\n group: 'nodes',\r\n data:\r\n {\r\n id: nodeID,\r\n name: nodeName,\r\n type: nodeType,\r\n w: nodeW,\r\n h: nodeH,\r\n parent: -1\r\n },\r\n position:\r\n {\r\n x: parseInt(posX),\r\n y: parseInt(posY)\r\n }\r\n };\r\n\r\n if (parentID != '-1') {\r\n newNode.data.parent = parentID;\r\n }\r\n nodes.push(newNode);\r\n }\r\n //Read edges\r\n for (let i = edgesStartIndex; i < lines.length; i++) {\r\n //If we reach EOF we break loop\r\n if (lines[i].length == 0) {\r\n break;\r\n }\r\n\r\n var lineData = lines[i].split('\\t');\r\n var edgeID = lineData[0];\r\n var edgeSource = lineData[1];\r\n var edgeTarget = lineData[2];\r\n var edgeType = lineData[3];\r\n var pubmedIDs = (lineData.length > 4) ? lineData[4].split(';') : [];\r\n var label = (lineData.length > 5) ? lineData[5] : '';\r\n var anchorPoints = (lineData.length > 6) ? lineData[6] : '';\r\n var edgeCurveStyle = (lineData.length > 7) ? lineData[7] : '';\r\n\r\n var anchorPointPositions = [];\r\n if (anchorPoints) {\r\n var anchorPair = anchorPoints.split(')'); //The last element of anchorPair array is \"\"\r\n for (var j = 0; j < anchorPair.length - 1; j++) {\r\n var separatorIndex = anchorPair[j].indexOf(\";\");\r\n var x = anchorPair[j].substring(1, separatorIndex);\r\n var y = anchorPair[j].substring(separatorIndex + 1, anchorPair[j].length);\r\n anchorPointPositions.push({x: parseFloat(x), y: parseFloat(y)});\r\n }\r\n }\r\n\r\n var edgeData = {\r\n id: edgeID,//((isFound) ? edgeID : i - edgesStartIndex),\r\n type: edgeType,//((isFound) ? edgeType : edgeTarget),\r\n source: edgeSource,//((isFound) ? edgeSource : edgeID),\r\n target: edgeTarget,//((isFound) ? edgeTarget : edgeSource),\r\n pubmedIDs: pubmedIDs,\r\n name: label,\r\n }\r\n\r\n if (edgeCurveStyle === \"unbundled-bezier\") {\r\n edgeData['controlPointPositions'] = anchorPointPositions;\r\n }\r\n else {\r\n edgeData['bendPointPositions'] = anchorPointPositions;\r\n }\r\n\r\n const newEdge = {\r\n group: 'edges', \r\n data: edgeData\r\n };\r\n edges.push(newEdge);\r\n }\r\n return {title: title, description: description, nodes: nodes, edges: edges};\r\n }\r\n}\r\n","import { saveAs } from 'file-saver';\r\nimport { action, computed, makeObservable, observable } from 'mobx';\r\nimport SaveLoadUtility from '../utils/SaveLoadUtility';\r\nimport EditorActionsManager from './EditorActionsManager.js';\r\n\r\nexport interface IPathwayInfo{\r\n pathwayTitle: string;\r\n pathwayDetails: string;\r\n}\r\n\r\nexport default class FileOperationsManager{\r\n\r\n @observable\r\n pathwayInfo: IPathwayInfo;\r\n\r\n constructor(){\r\n makeObservable(this);\r\n this.pathwayInfo = {pathwayTitle: \"New Pathway\", pathwayDetails: \"\"};\r\n }\r\n\r\n\r\n @computed get\r\n getPathwayInfo(){\r\n return this.pathwayInfo;\r\n }\r\n\r\n @action\r\n setPathwayInfo(other: IPathwayInfo){\r\n this.pathwayInfo = other;\r\n }\r\n \r\n // see http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript\r\n b64toBlob(b64Data, contentType, sliceSize = 512)\r\n {\r\n contentType = contentType || '';\r\n\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n var byteArray = new Uint8Array(byteNumbers);\r\n\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n };\r\n\r\n saveAsJPEG(cy: any)\r\n {\r\n const graphData = cy.jpeg();\r\n // this is to remove the beginning of the pngContent: data:img/png;base64,\r\n const b64data = graphData.substr(graphData.indexOf(\",\") + 1);\r\n const imageData = this.b64toBlob(b64data, \"image/jpeg\");\r\n const blob = new Blob([imageData]);\r\n const fileName = this.pathwayInfo.pathwayTitle + \".jpg\"\r\n saveAs(blob, fileName);\r\n };\r\n\r\n saveAsSVG(editor: EditorActionsManager){\r\n const returnString: any = editor.exportSVG();\r\n const fileName = this.pathwayInfo.pathwayTitle + \".svg\"\r\n const blob = new Blob([returnString], {type: \"text/plain;charset=utf-8\"});\r\n saveAs(blob, fileName);\r\n }\r\n\r\n saveAsPNG(cy: any)\r\n {\r\n const graphData = cy.png();\r\n // this is to remove the beginning of the pngContent: data:img/png;base64,\r\n const b64data = graphData.substr(graphData.indexOf(\",\") + 1);\r\n const imageData = this.b64toBlob(b64data, \"image/png\");\r\n const blob = new Blob([imageData]);\r\n const fileName = this.pathwayInfo.pathwayTitle + \".png\"\r\n saveAs(blob, fileName);\r\n };\r\n \r\n\r\n saveGraph(isSIFNX: boolean, editor: EditorActionsManager)\r\n {\r\n const pathwayData = this.pathwayInfo;\r\n const returnString = (isSIFNX) ? SaveLoadUtility.exportAsSIFNX(editor.cy):\r\n SaveLoadUtility.exportGraph(pathwayData, editor.cy, editor.edgeEditing);\r\n const blob = new Blob([returnString], {type: \"text/plain;charset=utf-8\"});\r\n const fileName = pathwayData.pathwayTitle + \".txt\";\r\n saveAs(blob, fileName);\r\n };\r\n}","import _ from \"lodash\";\r\n\r\nexport default class GridOptionsManager\r\n{\r\n\r\n static defaultGridGuideOptions = \r\n {\r\n // On/Off Modules\r\n /* From the following four snap options, at most one should be true at a given time */\r\n snapToGridOnRelease: false, // Snap to grid on release\r\n snapToGridDuringDrag: false, // Snap to grid during drag\r\n snapToAlignmentLocationOnRelease: false, // Snap to alignment location on release\r\n snapToAlignmentLocationDuringDrag: false, // Snap to alignment location during drag\r\n distributionGuidelines: false, // Distribution guidelines\r\n geometricGuideline: false, // Geometric guidelines\r\n initPosAlignment: false, // Guideline to initial mouse position\r\n centerToEdgeAlignment: false, // Center to edge alignment\r\n resize: false, // Adjust node sizes to cell sizes\r\n parentPadding: false, // Adjust parent sizes to cell sizes by padding\r\n drawGrid: false, // Draw grid background\r\n\r\n // General\r\n gridSpacing: 20, // Distance between the lines of the grid.\r\n\r\n // Draw Grid\r\n zoomDash: true, // Determines whether the size of the dashes should change when the drawing is zoomed in and out if grid is drawn.\r\n panGrid: true, // Determines whether the grid should move then the user moves the graph if grid is drawn.\r\n gridStackOrder: -1, // Namely z-index\r\n gridColor: '#dedede', // Color of grid lines\r\n lineWidth: 1.0, // Width of grid lines\r\n\r\n // Guidelines\r\n guidelinesStackOrder: 4, // z-index of guidelines\r\n guidelinesTolerance: 5.00, // Tolerance distance for rendered positions of nodes' interaction.\r\n guidelinesStyle: { // Set ctx properties of line. Properties are here:\r\n strokeStyle: \"#4286f4\", // color of geometric guidelines\r\n geometricGuidelineRange: 750, // range of geometric guidelines\r\n range: 500, // max range of distribution guidelines\r\n minDistRange: 10, // min range for distribution guidelines\r\n distGuidelineOffset: 10, // shift amount of distribution guidelines\r\n horizontalDistColor: \"#4286f4\", // color of horizontal distribution alignment\r\n verticalDistColor: \"#4286f4\", // color of vertical distribution alignment\r\n initPosAlignmentColor: \"#34495E\", // color of alignment to initial mouse location\r\n lineDash: [6, 8], // line style of geometric guidelines\r\n horizontalDistLine: [0, 0], // line style of horizontal distribution guidelines\r\n verticalDistLine: [0, 0], // line style of vertical distribution guidelines\r\n initPosAlignmentLine: [0, 0], // line style of alignment to initial mouse position\r\n },\r\n\r\n // Parent Padding\r\n parentSpacing: -1 // -1 to set paddings of parents to gridSpacing\r\n };\r\n currentProperties: any;\r\n cy: any;\r\n constructor(cy: any)\r\n {\r\n this.cy = cy;\r\n\r\n this.currentProperties = {};\r\n this.changeParameters(GridOptionsManager.defaultGridGuideOptions);\r\n\r\n }\r\n\r\n changeParameters(params)\r\n {\r\n this.currentProperties = _.clone(params);\r\n this.refreshGridOptionsExtension();\r\n }\r\n\r\n getCurrentOptions()\r\n {\r\n return this.currentProperties;\r\n }\r\n\r\n getDefaultOptions()\r\n {\r\n return GridOptionsManager.defaultGridGuideOptions;\r\n }\r\n\r\n setSnapToGuidelines(state)\r\n {\r\n this.currentProperties.geometricGuideline = state;\r\n this.currentProperties.snapToAlignmentLocationDuringDrag = state;\r\n this.currentProperties.distributionGuidelines = state;\r\n this.refreshGridOptionsExtension();\r\n //this.appManager.gridOptionsView.changeParameters();\r\n }\r\n\r\n setShowGrid(state)\r\n {\r\n this.currentProperties.drawGrid = state;\r\n this.currentProperties.snapToGridDuringDrag = state;\r\n this.refreshGridOptionsExtension();\r\n }\r\n\r\n refreshGridOptionsExtension()\r\n {\r\n this.cy.gridGuide(this.currentProperties);\r\n }\r\n\r\n //TODO expose individual functions related for changing parameters from toolbar here\r\n\r\n}\r\n","import EditorActionsManager from \"./EditorActionsManager\";\r\n\r\nexport default class ViewOperationsManager{\r\n movedNodes: any[];\r\n editor: EditorActionsManager;\r\n cy: any;\r\n\r\n constructor(editor: EditorActionsManager,cy: any)\r\n {\r\n this.cy = cy;\r\n this.editor = editor;\r\n this.movedNodes = [];\r\n }\r\n\r\n //TODO use align function from cytoscape.js-grid-guide extension\r\n handleNodeAlignment(param)\r\n {\r\n var tmpNodes = this.editor.selectedNodeStack;\r\n var nodes = this.cy.collection();\r\n var nodeMap = {};\r\n this.movedNodes = [];\r\n\r\n for (const key in tmpNodes)\r\n {\r\n nodes = nodes.add(tmpNodes[key]);\r\n }\r\n\r\n nodes.forEach(function(node)\r\n {\r\n if (node.isParent())\r\n {\r\n nodeMap[node.id()] = node;\r\n }\r\n });\r\n\r\n\r\n if (nodes.length > 0)\r\n {\r\n var firstSelected = nodes[0];\r\n var firstBbox = firstSelected.boundingBox();\r\n //OuterHeight variable added due to miscalculation of boundingBox function in pathwaymapper\r\n var firstOuterHeight = firstSelected.outerHeight();\r\n var self = this;\r\n nodes.forEach(function(node,index)\r\n {\r\n if (index == 0)\r\n {\r\n return ;\r\n }\r\n\r\n //If parent of selected node is in selection do nothing !\r\n if (nodeMap[node.parent().id()] == null)\r\n {\r\n var newPosition = self.calculateNewPosition(param, node, firstBbox, firstOuterHeight);\r\n //Recursively traverse leaf nodes\r\n self.changePosition(node,0,0,newPosition);\r\n }\r\n });\r\n this.editor.handleChangePositionByAlignment(self.movedNodes);\r\n }\r\n }\r\n\r\n /*\r\n Determine new position according to the alignment\r\n node that node.position works on center positions thats why all calculations\r\n are performed accordingly\r\n */\r\n calculateNewPosition(param, node, referenceBbox, referenceOuterHeight)\r\n {\r\n var currentPos = node.position();\r\n var currentBbox = node.boundingBox();\r\n var newPosition;\r\n //This parameter is used to move the compounds less upwards when they contain label\r\n var moveParam = node.isParent() ? node.outerHeight() - ((currentBbox.h - node.outerHeight())/2) - ((node.outerHeight() - node.height())/2) : node.height();\r\n //This param is used only when the node is parent, for simple nodes is 0\r\n var labelHeight = node.isParent()? currentBbox.h - node.outerHeight(): 0;\r\n\r\n if (param === 'vLeft')\r\n {\r\n newPosition = {x: referenceBbox.x1+currentBbox.w/2, y: currentPos.y};\r\n }\r\n else if (param === 'vCen')\r\n {\r\n newPosition = {x: referenceBbox.x1+referenceBbox.w/2, y: currentPos.y};\r\n }\r\n else if (param === 'vRight')\r\n {\r\n newPosition = {x: referenceBbox.x2-currentBbox.w/2, y: currentPos.y};\r\n }\r\n else if (param === 'hTop')\r\n {\r\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + currentBbox.h/2};\r\n }\r\n //Checks for the case where compounds don't have names (name isn't taken in consideration in that case)\r\n else if (param === 'hMid' && node.isParent() && node.data('name') == \"\")\r\n {\r\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceBbox.h/2};\r\n }\r\n else if (param === 'hMid' )\r\n {\r\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceOuterHeight/2 + labelHeight/2};\r\n }\r\n //Checks for the case where compounds don't have names (name isn't taken in consideration in that case)\r\n else if (param === 'hBot' && node.isParent() && node.data('name') == \"\")\r\n {\r\n newPosition = {x: currentPos.x, y: referenceBbox.y2 - currentBbox.h/2};\r\n }\r\n else if (param === 'hBot')\r\n {\r\n newPosition = {x: currentPos.x, y: referenceBbox.y1 + referenceOuterHeight - moveParam/2};\r\n }\r\n else {\r\n console.log('Error: wrong alignment name ' + param);\r\n return;\r\n }\r\n\r\n return newPosition;\r\n }\r\n\r\n //Recursively move leaf nodes\r\n changePosition(node, dx, dy, newPos)\r\n {\r\n if (node.isParent())\r\n {\r\n var childNodes = node.children();\r\n var parentBbox = node.boundingBox();\r\n var self = this;\r\n childNodes.forEach(function(childNode, index)\r\n {\r\n var childBbox = childNode.boundingBox();\r\n var _dx = -(parentBbox.x1 - childBbox.x1)-parentBbox.w/2+childBbox.w/2;\r\n var _dy = -(parentBbox.y1 - childBbox.y1)-parentBbox.h/2+childBbox.h/2;\r\n\r\n //If further compound node is found, set position accordingly\r\n if (childNode.isParent())\r\n {\r\n self.changePosition(childNode, 0, 0, {x: newPos.x+_dx, y:newPos.y+_dy});\r\n }\r\n else\r\n {\r\n self.changePosition(childNode, _dx, _dy, newPos);\r\n }\r\n\r\n });\r\n }\r\n else\r\n {\r\n //Move locally and let editor actions manager know a move happened\r\n //If in collaborative mode editor actions manager will update collaborative model\r\n var position =\r\n {\r\n x: newPos.x+dx,\r\n y: newPos.y+dy\r\n };\r\n\r\n this.movedNodes.push({node: node, nextPosition: position, oldPosition: null});\r\n }\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\ninterface IAboutModalProps{\r\n show: boolean;\r\n handleClose: Function;\r\n}\r\n\r\nexport default class AboutModal extends React.Component {\r\n\r\n constructor(props: IAboutModalProps){\r\n super(props);\r\n }\r\n\r\n render(){\r\n\r\n\r\n return(\r\n \r\n {this.props.handleClose(EModalType.ABOUT)}}\r\n >\r\n \r\n About\r\n \r\n \r\n

PathwayMapper 2.3

\r\n
\r\n \"\"\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n

i-Vis information Visualization Lab

\r\n

Bilkent University, Ankara, Turkey

\r\n
\r\n
\r\n

Memorial Sloan-Kettering Cancer Center

\r\n

New York, USA

\r\n
\r\n
\r\n \r\n https://github.com/iVis-at-Bilkent/pathway-mapper\r\n \r\n \r\n\r\n )\r\n\r\n\r\n }\r\n\r\n}\r\n","import { RGBAColor, shapeToSvg } from 'oncoprintjs';\r\nimport React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\n// @ts-ignore\r\nimport openImage from \"../images/toolbar/edit.svg\";\r\n// @ts-ignore\r\nimport layoutImage from \"../images/toolbar/layout-cose.svg\";\r\n// @ts-ignore\r\nimport savePNGImage from \"../images/toolbar/save_png.svg\";\r\n// @ts-ignore\r\nimport saveSVGImage from \"../images/toolbar/save_svg.svg\";\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\n// @ts-ignore\r\nconst addSelImage = require(\"../images/toolbar/add-selected.svg\");\r\n// @ts-ignore\r\nconst addAllImage = require(\"../images/toolbar/add-all.svg\");\r\n\r\n\r\ninterface ICBioHelpModalProps{\r\n show: boolean;\r\n handleClose: (modalId: EModalType) => void;\r\n patientView ?: boolean;\r\n}\r\n\r\n// https://github.com/cBioPortal/cbioportal-frontend/blob/29a93c5e992ca1affd3d027355015164ae3602bd/src/shared/lib/Colors.ts\r\nconst CNA_COLOR_AMP = '#ff0000';\r\nconst CNA_COLOR_HOMDEL = '#0000ff';\r\nconst DEFAULT_GREY = '#bebebe';\r\nconst MUT_COLOR_MISSENSE = '#008000';\r\nconst MUT_COLOR_MISSENSE_PASSENGER = '#53D400';\r\nconst MUT_COLOR_INFRAME = '#993404';\r\nconst MUT_COLOR_INFRAME_PASSENGER = '#a68028';\r\nconst MUT_COLOR_TRUNC = '#000000';\r\nconst MUT_COLOR_TRUNC_PASSENGER = '#708090';\r\nconst MUT_COLOR_FUSION = '#8B00C9';\r\nconst MUT_COLOR_PROMOTER = '#00B7CE';\r\nconst MUT_COLOR_OTHER = '#cf58bc';\r\nconst MUT_COLOR_GERMLINE = '#FFFFFF';\r\n\r\nexport function hexToRGBA(str: string): [number, number, number, number] {\r\n const r = parseInt(str[1] + str[2], 16);\r\n const g = parseInt(str[3] + str[4], 16);\r\n const b = parseInt(str[5] + str[6], 16);\r\n return [r, g, b, 1];\r\n}\r\n\r\n// always used shape\r\nconst defaultShape = {\r\n type: 'rectangle',\r\n fill: hexToRGBA(DEFAULT_GREY),\r\n x: 0,\r\n y: 0,\r\n width: 6,\r\n height: 20,\r\n stroke: [0,0,0,0] as RGBAColor,\r\n 'stroke-width': 0\r\n};\r\n\r\nconst labels = [\r\n 'Amplification',\r\n 'Deep Deletion',\r\n 'Fusion',\r\n 'Germline Mutation',\r\n 'Missense Mutation (putative driver)',\r\n 'Missense Mutation (unknown significance)',\r\n 'Other Mutation',\r\n 'Promoter Mutation',\r\n 'Truncating Mutation (putative driver)',\r\n 'Truncating Mutation (unknown significance)',\r\n 'Inframe Mutation (putative driver)',\r\n 'Inframe Mutation (unknown significance)'\r\n];\r\n\r\n// conditional shapes\r\nconst shapeBank = [\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(CNA_COLOR_AMP),\r\n x: 0,\r\n y: 0,\r\n width: 6,\r\n height: 20\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(CNA_COLOR_HOMDEL),\r\n x: 0,\r\n y: 0,\r\n width: 6,\r\n height: 20\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_FUSION),\r\n x: 0,\r\n y: 4,\r\n width: 6,\r\n height: 12\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_GERMLINE),\r\n x: 0,\r\n y: 8.75,\r\n width: 6,\r\n height: 1.6\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_MISSENSE),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_MISSENSE_PASSENGER),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_OTHER),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_PROMOTER),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_TRUNC),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_TRUNC_PASSENGER),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_INFRAME),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n {\r\n type: 'rectangle',\r\n fill: hexToRGBA(MUT_COLOR_INFRAME_PASSENGER),\r\n x: 0,\r\n y: 6.66,\r\n width: 6,\r\n height: 6.66\r\n },\r\n];\r\n\r\nexport default class CBioHelpModal extends React.Component{\r\n\r\n\r\n constructor(props: ICBioHelpModalProps){\r\n super(props);\r\n }\r\n\r\n generateOncoprintLegend() {\r\n const svgNameSpace = 'http://www.w3.org/2000/svg'\r\n const svgElement = document.createElementNS(svgNameSpace, 'svg')\r\n\r\n const legendEleWidth = 280\r\n \r\n const cellWidth = 6\r\n const cellHeight = 23\r\n const cellVerticalPadding = 15\r\n const cellMarginRight = cellWidth + 3\r\n\r\n shapeBank.forEach((shape, index) => {\r\n const offsetX = (index % 3) * (legendEleWidth)\r\n const textOffsetX = offsetX + cellMarginRight\r\n const offsetY = Math.floor(index / 3) * (cellHeight + cellVerticalPadding)\r\n const textOffsetY = offsetY + 15\r\n const g = document.createElementNS(svgNameSpace, 'g')\r\n if (!shape[\"stroke\"]) {\r\n shape[\"stroke\"] = [0,0,0,0];\r\n shape[\"stroke-width\"] = 0;\r\n }\r\n g.appendChild(shapeToSvg(defaultShape, offsetX, offsetY))\r\n g.appendChild(shapeToSvg(shape, offsetX, offsetY))\r\n \r\n const text = document.createElementNS(svgNameSpace, 'text');\r\n text.setAttributeNS(null, 'x', textOffsetX.toString());\r\n text.setAttributeNS(null, 'y', textOffsetY.toString());\r\n text.setAttributeNS(null, 'font-size', '12');\r\n text.setAttributeNS(null, 'font-family', 'Arial');\r\n var textNode = document.createTextNode(labels[index]);\r\n text.appendChild(textNode)\r\n\r\n g.appendChild(text);\r\n svgElement.appendChild(g)\r\n });\r\n\r\n svgElement.setAttribute(\r\n 'width', '840')\r\n svgElement.setAttribute(\r\n 'height','175')\r\n svgElement.style.paddingTop = '20px'\r\n // This is important you need to include this to succesfully render in cytoscape.js!\r\n svgElement.setAttribute('xmlns', svgNameSpace)\r\n \r\n return svgElement\r\n }\r\n\r\n render(){\r\n\r\n const legendPadding = '45px';\r\n\r\n return( \r\n {this.props.handleClose(EModalType.CHELP)}}>\r\n \r\n PathwayMapper cBioPortal Edition 2.2\r\n \r\n {(!this.props.patientView &&\r\n \r\n

\r\n PathwayMapper shows you your genes of interest with the alteration frequencies of selected genetic profiles of the chosen study overlaid on a TCGA pathway using a white to red color scale (the more frequently altered a gene is, the more red it's shown). All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with highest ranking with the default ranking options but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table. \r\n
\r\n
\r\n Refer to the documentation here for the notation used.\r\n
\r\n
\r\n To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table. Ranking criteria might be changed by changing the options at the bottom of the table. \r\n
\r\n
\r\n The buttons on top of the pathway are:\r\n

    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    Save as PNG
    Save as SVG
    Perform layout: Layout is recalculated taking current node positions into account
    Add selected genes to query: You may select additional genes from the pathway by left clicking (Shift + left click to add more genes)
    Add all valid genes to query: All valid gene symbols will be added to the query; others will be ignored
    Edit pathway: Edit both the topology and the geometry of the current pathway with the full blown PathwayMapper editor
    \r\n
\r\n

\r\n
)\r\n },\r\n {(this.props.patientView &&\r\n \r\n

\r\n PathwayMapper shows you your genes of interest with the mutation types, copy number alterations and fusions of selected genetic profiles of the chosen study overlaid on a TCGA pathway using the OncoPrint color scheme. All available TCGA pathways are ranked with the aim to choose the pathway that matches your interest the most. By default we display the pathway with the highest number of genes of interest matching the ones in a pathway but you may look at your genes of interest in the context of other pathways as well by choosing from the pathway table. \r\n
\r\n
\r\n Refer to the documentation here for the notation used.\r\n
\r\n
\r\n Genetic alteration legend:\r\n
\r\n

\r\n
\r\n

Putative driver and unknown significance annotations are based on data from OncoKB and CancerHotspots.org.

\r\n
\r\n To search for a particular pathway of your interest, use the search field on top of the pathway table. To switch to another pathway, click on the button in the associated row of the pathway table.\r\n
\r\n
\r\n The buttons on top of the pathway are:\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    Save as PNG
    Save as SVG
    Perform layout: Layout is recalculated taking current node positions into account
    \r\n
\r\n

\r\n
\r\n )}\r\n
\r\n\r\n );\r\n }\r\n\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport { Button, Checkbox, Col, ControlLabel, Form, FormControl, Row, Modal } from 'react-bootstrap';\r\nimport GridOptionsManager from '../managers/GridOptionsManager';\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\nimport PathwayActions from '../utils/PathwayActions';\r\ninterface IGridSettingsProps{\r\n show: boolean;\r\n handleClose: Function;\r\n pathwayActions: PathwayActions;\r\n}\r\n\r\nexport enum EGridType{\r\n GRID,\r\n GUIDE,\r\n NONE\r\n}\r\n\r\n@observer\r\nexport default class GridSettings extends React.Component{\r\n\r\n\r\n\r\n @observable\r\n private gridSize: number;\r\n \r\n @observable\r\n private guideColor: string;\r\n\r\n private defaultSettings = GridOptionsManager.defaultGridGuideOptions;\r\n\r\n @observable\r\n private enabledType: EGridType;\r\n constructor(props: IGridSettingsProps){\r\n super(props);\r\n makeObservable(this);\r\n \r\n this.gridSize = this.defaultSettings.gridSpacing;\r\n this.guideColor = this.defaultSettings.guidelinesStyle.strokeStyle;\r\n }\r\n\r\n setEnabledType(newType: EGridType){\r\n if(newType === this.enabledType){\r\n this.enabledType = EGridType.NONE;\r\n return;\r\n }\r\n\r\n this.enabledType = newType;\r\n }\r\n\r\n render(){\r\n\r\n return(\r\n {this.enabledType = this.props.pathwayActions.enabledType;}}\r\n onHide={() => {\r\n this.props.handleClose(EModalType.GRID);\r\n }}>\r\n \r\n \r\n Grid Settings\r\n \r\n \r\n \r\n
\r\n \r\n \r\n Enable Grids:\r\n \r\n\r\n \r\n {this.setEnabledType(EGridType.GRID);}}>\r\n \r\n \r\n \r\n \r\n Enable Guidelines:\r\n \r\n\r\n \r\n {this.setEnabledType(EGridType.GUIDE);}}>\r\n \r\n \r\n \r\n \r\n Grid Size:\r\n \r\n\r\n \r\n {this.gridSize = e.target.value;}}/>\r\n \r\n \r\n \r\n \r\n Guideline Color:\r\n \r\n\r\n \r\n {this.guideColor = e.target.value;}}/>\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n\r\n\r\n } \r\n}","import React from 'react';\r\nimport {Modal, Button} from 'react-bootstrap';\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\n\r\ninterface IConfirmationModalProps{\r\n show: boolean;\r\n handleClose: (modalId: EModalType) => void;\r\n}\r\n\r\nexport default class ConfirmationModal extends React.Component{\r\n\r\n static pendingFunction: Function;\r\n\r\n constructor(props: IConfirmationModalProps){\r\n super(props);\r\n\r\n }\r\n\r\n render(){\r\n\r\n\r\n return(\r\n {this.props.handleClose(EModalType.CONFIRMATION);}}\r\n >\r\n \r\n Confirmation\r\n \r\n \r\n
\r\n All unsaved changes will be lost. Do you want to continue?\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}","/**\r\n * Created by istemi on 27.09.2016.\r\n */\r\n\r\nexport default class GraphUtilities {\r\n \r\n \r\n static createGraphHierarchy(nodes)\r\n {\r\n //Some arrays and maps for creating graph hierarchy\r\n var tree = [];\r\n var mappedArr = {};\r\n\r\n // First map the nodes of the array to an object -> create a hash table.\r\n for (var i = 0, len = nodes.length; i < len; i++)\r\n {\r\n var arrElem = nodes[i];\r\n mappedArr[arrElem.id()] = arrElem;\r\n mappedArr[arrElem.id()].childNodes = [];\r\n }\r\n\r\n for (var id in mappedArr)\r\n {\r\n var mappedElem = mappedArr[id];\r\n\r\n // If the element is not at the root level, add it to its parent array of children.\r\n if (mappedElem.parent().length > 0)\r\n {\r\n mappedArr[mappedElem.parent().id()].childNodes.push(mappedElem);\r\n }\r\n // If the element is at the root level, add it to first level elements array.\r\n else\r\n {\r\n tree.push(mappedElem);\r\n }\r\n }\r\n return tree;\r\n };\r\n\r\n /*\r\n * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child\r\n * relationship by a field 'parent' which represents to the id of the parent node This function is specific\r\n * for the needs of TCGA Pathway Curation Tool 04/07/2016\r\n *\r\n * @param nodes {array}: flat list of nodes of a graph\r\n * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes\r\n * of each node in the returned array.\r\n * a node in corresponding level.\r\n *\r\n * */\r\n static createGraphHierarchyRealTime(nodes)\r\n {\r\n //Some arrays and maps for creating graph hierarchy\r\n var tree = [];\r\n var mappedArr = {};\r\n\r\n // First map the nodes of the array to an object -> create a hash table.\r\n for (var i = 0, len = nodes.length; i < len; i++)\r\n {\r\n var arrElem = nodes[i];\r\n mappedArr[arrElem.data.id] = arrElem;\r\n mappedArr[arrElem.data.id].children = [];\r\n }\r\n for (var id in mappedArr)\r\n {\r\n var mappedElem = mappedArr[id];\r\n\r\n // If the element is not at the root level, add it to its parent array of children.\r\n if (mappedElem.data.parent != -1)\r\n {\r\n mappedArr[mappedElem.data.parent].children.push(mappedElem);\r\n }\r\n // If the element is at the root level, add it to first level elements array.\r\n else\r\n {\r\n tree.push(mappedElem);\r\n }\r\n }\r\n return tree;\r\n };\r\n}","import EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport GraphUtilities from \"../utils/GraphUtilities\";\r\n\r\nexport default class SVGExporter {\r\n SVGNameSpace = \"http://www.w3.org/2000/svg\";\r\n svg = document.createElementNS(this.SVGNameSpace, \"svg\");\r\n NODE_FILL_COLOR = \"rgb(255,255,255)\";\r\n FAMILY_FILL_COLOR = \"rgb(255,255,255)\";\r\n FAMILY_STROKE_COLOR = \"rgb(204,204,204)\";\r\n NODE_STROKE_COLOR = \"rgb(0,0,0)\";\r\n COMPARTMENT_STROKE_WIDTH = 2;\r\n NODE_STROKE_WIDTH = 1;\r\n NODE_OPACITY = 0.5;\r\n ROUNDING_FACTOR = 6;\r\n GENOMICDATA_LABEL_Y_OFFSET = -15;\r\n EDGE_ARROW_SCALE = 1.7;\r\n EDGE_WIDTH = 1;\r\n T_ARROW_HEAD_WIDTH = 2 * this.EDGE_ARROW_SCALE;\r\n T_ARROW_HEAD_HEIGHT = 8 * this.EDGE_ARROW_SCALE;\r\n TRIANGLE_ARROW_HEAD_HEIGHT = 8 * this.EDGE_ARROW_SCALE;\r\n TRIANGLE_ARROW_HEAD_WIDTH = 8 * this.EDGE_ARROW_SCALE;\r\n DASH_PARAMETERS = \"5, 3\";\r\n COMPOUND_MARGIN = 8;\r\n NODE_FONT_SIZE = 14;\r\n\r\n edgeEditing: any;\r\n editor: EditorActionsManager;\r\n constructor(edgeEditing: any, editor: EditorActionsManager) {\r\n this.edgeEditing = edgeEditing;\r\n this.editor = editor;\r\n }\r\n\r\n resetSVG() {\r\n this.svg = document.createElementNS(this.SVGNameSpace, \"svg\");\r\n }\r\n\r\n exportGraph(nodes, edges) {\r\n //Reset SVG\r\n this.resetSVG();\r\n this.svg.setAttribute(\"version\", \"1.1\");\r\n this.svg.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\r\n //Set viewport of output SVG\r\n var cyBounds = this.editor.cy.extent();\r\n this.svg.setAttribute(\r\n \"viewBox\",\r\n cyBounds.x1 + \" \" + cyBounds.y1 + \" \" + cyBounds.w + \" \" + cyBounds.h\r\n );\r\n\r\n var self = this;\r\n var nodeMap = {};\r\n\r\n var nodeTree = GraphUtilities.createGraphHierarchy(nodes);\r\n var traverseFunction = function(node) {\r\n //Create SVG for current node\r\n nodeMap[node.id()] = node;\r\n var genomicDataSVG = self.editor.getGenomicDataSVG(node).children;\r\n var oncoprintDataSVG = self.editor.getOncoprintDataSVG(node);\r\n self.svg.appendChild(self.createRect(node));\r\n var labelOffset =\r\n (genomicDataSVG && genomicDataSVG.length > 0) ||\r\n oncoprintDataSVG.outerHTML !== \"\"\r\n ? self.GENOMICDATA_LABEL_Y_OFFSET\r\n : 0;\r\n self.svg.appendChild(self.createNodeLabel(node, labelOffset));\r\n\r\n //Append Genomic Data SVG\r\n if (genomicDataSVG) {\r\n while (genomicDataSVG.length > 0) {\r\n var elemSVG = genomicDataSVG[0];\r\n var nodePosition = node.position();\r\n var svgX = elemSVG.getAttribute(\"x\");\r\n var svgY = elemSVG.getAttribute(\"y\");\r\n elemSVG.setAttribute(\r\n \"x\",\r\n nodePosition.x - node.width() / 2 + parseFloat(svgX)\r\n );\r\n elemSVG.setAttribute(\r\n \"y\",\r\n nodePosition.y - node.height() / 2 + parseFloat(svgY)\r\n );\r\n self.svg.appendChild(elemSVG);\r\n }\r\n }\r\n //Append Oncoprint Data SVG\r\n else if (oncoprintDataSVG.outerHTML !== \"\") {\r\n var nodePosition = node.position();\r\n\r\n const width = parseInt(oncoprintDataSVG.getAttribute(\"width\"));\r\n const height = parseInt(oncoprintDataSVG.getAttribute(\"height\"));\r\n const verticalPadding = 8;\r\n\r\n const y =\r\n nodePosition.y + node.height() / 2 - (height + verticalPadding);\r\n oncoprintDataSVG.setAttribute(\"x\", nodePosition.x - width / 2);\r\n oncoprintDataSVG.setAttribute(\"y\", y);\r\n self.svg.appendChild(oncoprintDataSVG);\r\n }\r\n\r\n //Traverse children\r\n if (node.childNodes) {\r\n for (var i in node.childNodes) {\r\n traverseFunction(node.childNodes[i]);\r\n }\r\n }\r\n };\r\n\r\n //Traverse node hierarchy\r\n for (var i in nodeTree) {\r\n var rootLevelNode = nodeTree[i];\r\n traverseFunction(rootLevelNode);\r\n }\r\n\r\n edges.forEach(function(edge) {\r\n self.drawEdge(edge);\r\n });\r\n\r\n return this.svg.outerHTML;\r\n }\r\n\r\n drawEdge(edge) {\r\n const sourceEndpoint = edge.sourceEndpoint();\r\n const targetEndpoint = edge.targetEndpoint();\r\n const targetArrowShape = edge.style(\"target-arrow-shape\");\r\n const lineStyle = edge.style(\"line-style\");\r\n const curveStyle = edge.style(\"curve-style\");\r\n const anchorPoints = curveStyle === \"segments\" ? \r\n edge.segmentPoints() : \r\n edge.controlPoints();\r\n\r\n const labelElement = this.createEdgeLabel(edge);\r\n if (labelElement) {\r\n this.svg.appendChild(labelElement);\r\n }\r\n\r\n let lastAnchor = {\r\n x: sourceEndpoint.x,\r\n y: sourceEndpoint.y\r\n }\r\n let edgeEndpoint = {\r\n x: targetEndpoint.x,\r\n y: targetEndpoint.y\r\n };\r\n\r\n if (anchorPoints && anchorPoints.length > 0) {\r\n lastAnchor = {\r\n x: anchorPoints[anchorPoints.length - 1].x,\r\n y: anchorPoints[anchorPoints.length - 1].y\r\n }\r\n }\r\n\r\n var unitV = this.unitVector({\r\n x: targetEndpoint.x - lastAnchor.x,\r\n y: targetEndpoint.y - lastAnchor.y,\r\n });\r\n var inverseUnitV = this.scale(unitV, -1);\r\n\r\n var targetX = targetEndpoint.x;\r\n var targetY = targetEndpoint.y;\r\n\r\n //Draw Triangle arrow head\r\n if (targetArrowShape === \"triangle\") {\r\n targetX =\r\n targetEndpoint.x +\r\n this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.x;\r\n targetY =\r\n targetEndpoint.y +\r\n this.TRIANGLE_ARROW_HEAD_HEIGHT * inverseUnitV.y;\r\n\r\n var point1Vector = this.rotateVector(unitV, Math.PI / 2);\r\n var point2Vector = this.rotateVector(unitV, -Math.PI / 2);\r\n\r\n point1Vector = this.scale(\r\n point1Vector,\r\n this.TRIANGLE_ARROW_HEAD_WIDTH / 2\r\n );\r\n point2Vector = this.scale(\r\n point2Vector,\r\n this.TRIANGLE_ARROW_HEAD_WIDTH / 2\r\n );\r\n\r\n var point1X = targetX + point1Vector.x;\r\n var point1Y = targetY + point1Vector.y;\r\n\r\n var point2X = targetX + point2Vector.x;\r\n var point2Y = targetY + point2Vector.y;\r\n\r\n edgeEndpoint = {\r\n x: (point1X + point2X) / 2,\r\n y: (point1Y + point2Y) / 2\r\n }\r\n\r\n var polySVG = document.createElementNS(this.SVGNameSpace, \"polygon\");\r\n polySVG.setAttribute(\r\n \"points\",\r\n point1X +\r\n \",\" +\r\n point1Y +\r\n \",\" +\r\n point2X +\r\n \",\" +\r\n point2Y +\r\n \",\" +\r\n targetEndpoint.x +\r\n \",\" +\r\n targetEndpoint.y\r\n );\r\n\r\n this.svg.appendChild(polySVG);\r\n }\r\n //Draw T type arrow head\r\n else if (targetArrowShape === \"tee\") {\r\n targetX =\r\n targetEndpoint.x \r\n targetY =\r\n targetEndpoint.y \r\n\r\n //Calculate T shape points\r\n var point1Vector = this.rotateVector(unitV, Math.PI / 2);\r\n var point2Vector = this.rotateVector(unitV, -Math.PI / 2);\r\n point1Vector = this.scale(point1Vector, this.T_ARROW_HEAD_HEIGHT / 2);\r\n point2Vector = this.scale(point2Vector, this.T_ARROW_HEAD_HEIGHT / 2);\r\n\r\n var point1X = targetX + point1Vector.x;\r\n var point1Y = targetY + point1Vector.y;\r\n var point2X = targetX + point2Vector.x;\r\n var point2Y = targetY + point2Vector.y;\r\n\r\n edgeEndpoint = {\r\n x: (point1X + point2X) / 2,\r\n y: (point1Y + point2Y) / 2\r\n }\r\n\r\n //Draw edge arrow line here !\r\n var lineSVG = document.createElementNS(this.SVGNameSpace, \"line\");\r\n lineSVG.setAttribute(\"x1\", point1X);\r\n lineSVG.setAttribute(\"y1\", point1Y);\r\n lineSVG.setAttribute(\"x2\", point2X);\r\n lineSVG.setAttribute(\"y2\", point2Y);\r\n lineSVG.setAttribute(\"stroke-width\", this.T_ARROW_HEAD_WIDTH.toString());\r\n lineSVG.setAttribute(\"stroke\", \"black\");\r\n this.svg.appendChild(lineSVG);\r\n }\r\n \r\n // no anchors means a single line connecting source and target end points\r\n if (!anchorPoints || anchorPoints.length < 1) {\r\n const lineSVG = document.createElementNS(this.SVGNameSpace, \"line\");\r\n lineSVG.setAttribute(\"x1\", sourceEndpoint.x);\r\n lineSVG.setAttribute(\"y1\", sourceEndpoint.y);\r\n lineSVG.setAttribute(\"x2\", edgeEndpoint.x);\r\n lineSVG.setAttribute(\"y2\", edgeEndpoint.y);\r\n lineSVG.setAttribute(\"stroke-width\", this.EDGE_WIDTH.toString());\r\n lineSVG.setAttribute(\"stroke\", \"black\");\r\n if (lineStyle === \"dashed\") {\r\n lineSVG.setAttribute(\"stroke-dasharray\", this.DASH_PARAMETERS);\r\n }\r\n this.svg.appendChild(lineSVG);\r\n }\r\n else if (curveStyle === \"unbundled-bezier\" || curveStyle === \"bezier\") {\r\n const pathSVG = document.createElementNS(this.SVGNameSpace, \"path\");\r\n let pathPoints: string[] = [];\r\n\r\n for (let i = 0; i < anchorPoints.length; i++) {\r\n if (i === 0) {\r\n pathPoints.push(\"M\" + sourceEndpoint.x + \",\" + sourceEndpoint.y);\r\n pathPoints.push(\"Q\" + anchorPoints[i].x + \",\" + anchorPoints[i].y);\r\n if (anchorPoints.length === 1) {\r\n pathPoints.push(edgeEndpoint.x + \",\" + edgeEndpoint.y);\r\n }\r\n else {\r\n const furtherEndPoint = {\r\n x: (anchorPoints[i].x + anchorPoints[i+1].x) / 2,\r\n y: (anchorPoints[i].y + anchorPoints[i+1].y) / 2 \r\n }\r\n pathPoints.push(furtherEndPoint.x + \",\" + furtherEndPoint.y);\r\n }\r\n }\r\n else {\r\n if (i < anchorPoints.length - 1) {\r\n const furtherEndPoint = {\r\n x: (anchorPoints[i].x + anchorPoints[i+1].x) / 2,\r\n y: (anchorPoints[i].y + anchorPoints[i+1].y) / 2 \r\n }\r\n pathPoints.push(\"T\" + furtherEndPoint.x + \",\" + furtherEndPoint.y);\r\n }\r\n else {\r\n pathPoints.push(\"T\" + edgeEndpoint.x + \",\" + edgeEndpoint.y);\r\n }\r\n }\r\n }\r\n pathSVG.setAttribute(\r\n 'd',\r\n pathPoints.join(\" \")\r\n );\r\n pathSVG.setAttribute('stroke-width', this.EDGE_WIDTH.toString());\r\n pathSVG.setAttribute('stroke', 'black');\r\n if (lineStyle === \"dashed\") {\r\n pathSVG.setAttribute(\"stroke-dasharray\", this.DASH_PARAMETERS);\r\n }\r\n pathSVG.setAttribute('fill', 'none');\r\n this.svg.appendChild(pathSVG);\r\n }\r\n // anchors means polyline\r\n else {\r\n const polylineSVG = document.createElementNS(this.SVGNameSpace, \"polyline\");\r\n let polylinePoints: string[] = [];\r\n\r\n for (let i = 0; i < anchorPoints.length; i++) {\r\n if (i === 0) {\r\n polylinePoints.push(sourceEndpoint.x + \",\" + sourceEndpoint.y);\r\n polylinePoints.push(anchorPoints[i].x + \",\" + anchorPoints[i].y);\r\n if (anchorPoints.length === 1) {\r\n polylinePoints.push(edgeEndpoint.x + \",\" + edgeEndpoint.y);\r\n }\r\n }\r\n else if (i === anchorPoints.length - 1) {\r\n polylinePoints.push(anchorPoints[i].x + \",\" + anchorPoints[i].y);\r\n polylinePoints.push(edgeEndpoint.x + \",\" + edgeEndpoint.y);\r\n }\r\n else {\r\n polylinePoints.push(anchorPoints[i].x + \",\" + anchorPoints[i].y);\r\n }\r\n }\r\n polylineSVG.setAttribute(\r\n 'points',\r\n polylinePoints.join(\" \")\r\n );\r\n polylineSVG.setAttribute('stroke-width', this.EDGE_WIDTH.toString());\r\n polylineSVG.setAttribute('stroke', 'black');\r\n if (lineStyle === \"dashed\") {\r\n lineSVG.setAttribute(\"stroke-dasharray\", this.DASH_PARAMETERS);\r\n }\r\n polylineSVG.setAttribute('fill', 'none');\r\n this.svg.appendChild(polylineSVG);\r\n }\r\n \r\n }\r\n\r\n createRect(node) {\r\n var nodeRectangle = document.createElementNS(this.SVGNameSpace, \"rect\");\r\n var nodePosition = node.position();\r\n if (node.isParent()) {\r\n nodeRectangle.setAttribute(\r\n \"x\",\r\n nodePosition.x - node.width() / 2 - this.COMPOUND_MARGIN / 2 + \"\"\r\n );\r\n nodeRectangle.setAttribute(\r\n \"y\",\r\n nodePosition.y - node.height() / 2 - this.COMPOUND_MARGIN / 2 + \"\"\r\n );\r\n nodeRectangle.setAttribute(\"width\", node.width() + this.COMPOUND_MARGIN);\r\n nodeRectangle.setAttribute(\r\n \"height\",\r\n node.height() + this.COMPOUND_MARGIN\r\n );\r\n } else {\r\n nodeRectangle.setAttribute(\"x\", nodePosition.x - node.width() / 2 + \"\");\r\n nodeRectangle.setAttribute(\"y\", nodePosition.y - node.height() / 2 + \"\");\r\n nodeRectangle.setAttribute(\"width\", node.width());\r\n nodeRectangle.setAttribute(\"height\", node.height());\r\n }\r\n\r\n nodeRectangle = this.createStyleForNodes(node, nodeRectangle);\r\n\r\n return nodeRectangle;\r\n }\r\n\r\n createNodeLabel(node, genomicDataOffset) {\r\n var verticalTextOffset = 5;\r\n var nodePosition = node.position();\r\n var svgText = document.createElementNS(this.SVGNameSpace, \"text\");\r\n\r\n if (node.isParent()) {\r\n verticalTextOffset = 20;\r\n svgText.setAttribute(\"x\", nodePosition.x);\r\n svgText.setAttribute(\r\n \"y\",\r\n nodePosition.y + node.height() / 2 + verticalTextOffset\r\n );\r\n } else {\r\n svgText.setAttribute(\"x\", nodePosition.x);\r\n svgText.setAttribute(\r\n \"y\",\r\n nodePosition.y + verticalTextOffset + genomicDataOffset\r\n );\r\n }\r\n\r\n svgText.setAttribute(\"font-family\", \"Arial\");\r\n svgText.setAttribute(\"text-anchor\", \"middle\");\r\n svgText.setAttribute(\"font-size\", this.NODE_FONT_SIZE.toString());\r\n svgText.innerHTML = node.data(\"name\");\r\n return svgText;\r\n }\r\n\r\n createStyleForNodes(node, nodeRectangle) {\r\n var nodeType = node.data().type;\r\n var strokeWidth = node.css(\"border-width\") || this.NODE_STROKE_WIDTH;\r\n var strokeColor = this.NODE_STROKE_COLOR;\r\n var fillColor = this.NODE_FILL_COLOR;\r\n var opacity = this.NODE_OPACITY;\r\n var strokeOpacity = 1;\r\n\r\n if (nodeType == \"GENE\" || nodeType == \"COMPARTMENT\") {\r\n nodeRectangle.setAttribute(\"rx\", this.ROUNDING_FACTOR);\r\n nodeRectangle.setAttribute(\"ry\", this.ROUNDING_FACTOR);\r\n\r\n if (nodeType == \"COMPARTMENT\")\r\n strokeWidth = this.COMPARTMENT_STROKE_WIDTH;\r\n }\r\n\r\n if (nodeType == \"PROCESS\") {\r\n opacity = 0;\r\n strokeOpacity = 0;\r\n }\r\n\r\n if (nodeType == \"FAMILY\") {\r\n fillColor = this.FAMILY_FILL_COLOR;\r\n strokeColor = this.FAMILY_STROKE_COLOR;\r\n }\r\n\r\n var styleString =\r\n \"stroke-width:\" +\r\n strokeWidth +\r\n \";\" +\r\n \"stroke:\" +\r\n strokeColor +\r\n \";\" +\r\n \"fill-opacity:\" +\r\n opacity +\r\n \";\" +\r\n \"fill:\" +\r\n fillColor +\r\n \";\" +\r\n \"stroke-opacity:\" +\r\n strokeOpacity +\r\n \";\";\r\n\r\n nodeRectangle.setAttribute(\"style\", styleString);\r\n\r\n return nodeRectangle;\r\n }\r\n\r\n createEdgeLabel(edge) {\r\n const labelText = edge.data(\"name\");\r\n \r\n if (labelText === \"\") {\r\n return undefined;\r\n }\r\n const svgTextElement = document.createElementNS(this.SVGNameSpace, \"text\");\r\n\r\n const fontSize = edge.style(\"font-size\");\r\n const fontFamily = edge.style(\"font-family\");\r\n\r\n // get rotation angle in degrees for transform: rotate()\r\n const labelRotationAngle = this.getEdgeLabelRotationAngle(edge);\r\n const lineHeight = edge._private.rscratch.labelLineHeight;\r\n\r\n // adjust margins to compensate for the label hack (see stylesheet)\r\n const dx = (lineHeight / 4) * Math.sin(edge._private.rscratch.labelAngle);\r\n const dy = (lineHeight / 4) * Math.cos(edge._private.rscratch.labelAngle);\r\n\r\n const labelPos = {\r\n x: edge._private.rscratch.labelX + dx,\r\n y: edge._private.rscratch.labelY - dy\r\n }\r\n\r\n svgTextElement.setAttribute('x', labelPos.x.toString());\r\n svgTextElement.setAttribute('y', labelPos.y.toString());\r\n svgTextElement.setAttribute(\"font-family\", fontFamily);\r\n svgTextElement.setAttribute(\"text-anchor\", \"middle\");\r\n svgTextElement.setAttribute(\"font-size\", fontSize);\r\n\r\n svgTextElement.innerHTML = labelText;\r\n\r\n // adjusting for autorotate option\r\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#rotate \r\n svgTextElement.setAttribute(\r\n \"transform\", \r\n \"rotate(\" + \r\n labelRotationAngle +\r\n \" \" +\r\n labelPos.x.toString() +\r\n \" \" +\r\n labelPos.y.toString()+\r\n \")\");\r\n\r\n return svgTextElement;\r\n }\r\n\r\n getEdgeLabelRotationAngle(edge) {\r\n const labelAngle = edge._private.rscratch.labelAngle;\r\n\r\n if (!labelAngle) {\r\n return 0;\r\n }\r\n\r\n return this.toDegrees(labelAngle);\r\n }\r\n\r\n toDegrees(radians) {\r\n const pi = Math.PI;\r\n return radians * (180/pi);\r\n }\r\n\r\n unitVector(v) {\r\n var inverseLength = 1 / Math.sqrt(v.x * v.x + v.y * v.y);\r\n\r\n return {\r\n x: v.x * inverseLength,\r\n y: v.y * inverseLength,\r\n };\r\n }\r\n\r\n rotateVector(v, radians) {\r\n var newX = v.x * Math.cos(radians) - v.y * Math.sin(radians);\r\n var newY = v.x * Math.sin(radians) + v.y * Math.cos(radians);\r\n\r\n return { x: newX, y: newY };\r\n }\r\n\r\n scale(v, scalar) {\r\n var newX = v.x * scalar;\r\n var newY = v.y * scalar;\r\n\r\n return { x: newX, y: newY };\r\n }\r\n}\r\n","import $ from \"jquery\";\r\nimport { GeneticAlterationRuleSet, shapeToSvg } from \"oncoprintjs\";\r\nimport tippy from \"tippy.js\";\r\nimport \"tippy.js/dist/tippy.css\"; // optional for styling\r\nimport { groupComparisonData, IColorValueMap } from \"../ui/react-pathway-mapper\";\r\n\r\ninterface Color {\r\n r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\ninterface ValueColorPair {\r\n value: number;\r\n color: Color;\r\n}\r\n\r\nconst svgNameSpace = \"http://www.w3.org/2000/svg\";\r\n\r\nfunction hexToRGB(hex: string) {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n }\r\n : null;\r\n}\r\nfunction swap(a, b) {\r\n let temp = a;\r\n a = b;\r\n b = temp;\r\n}\r\n\r\nfunction findValueColorInterval(\r\n colorScheme: IColorValueMap,\r\n value: number\r\n): { lower: ValueColorPair; upper: ValueColorPair } {\r\n const pairs = Object.entries(colorScheme)\r\n .map(([value, color]) => {\r\n return {\r\n value: Number(value),\r\n color: hexToRGB(color),\r\n };\r\n })\r\n .sort((o1, o2) => {\r\n return o1.value - o2.value;\r\n });\r\n\r\n if (value < pairs[0].value) {\r\n return {\r\n lower: {\r\n value: -Infinity,\r\n color: pairs[0].color,\r\n },\r\n upper: {\r\n value: pairs[0].value,\r\n color: pairs[0].color,\r\n },\r\n };\r\n } else if (value > pairs[pairs.length - 1].value) {\r\n return {\r\n lower: {\r\n value: pairs[pairs.length - 1].value,\r\n color: pairs[pairs.length - 1].color,\r\n },\r\n upper: {\r\n value: Infinity,\r\n color: pairs[pairs.length - 1].color,\r\n },\r\n };\r\n } else {\r\n for (let i = 0; i < pairs.length - 1; i++) {\r\n if (value >= pairs[i].value && value < pairs[i + 1].value) {\r\n return {\r\n lower: {\r\n value: pairs[i].value,\r\n color: pairs[i].color,\r\n },\r\n upper: {\r\n value: pairs[i + 1].value,\r\n color: pairs[i + 1].color,\r\n },\r\n };\r\n }\r\n }\r\n\r\n return {\r\n lower: {\r\n value: -Infinity,\r\n color: pairs[0].color,\r\n },\r\n upper: {\r\n value: Infinity,\r\n color: pairs[pairs.length - 1].color,\r\n },\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Map the percentage value to r,g,b values using a log scale, i.e instead of taking the ratio linearly by taking differences\r\n * between the lower and upper color r,g,b values, take the differences between their Math.log values. This makes the color\r\n * scale up to the upper value much quicker, i.e in a 0-100 mapping a value of 20 doesn't map to 1/5 way between two colors\r\n * but closer to half way. This is done because high numbers in alteration values are extremely rare and even small numbers\r\n * are usually significant.\r\n */\r\nfunction getMappedColor(\r\n lowerColor: Color,\r\n upperColor: Color,\r\n lowerValue: number,\r\n upperValue: number,\r\n percent: number\r\n): Color {\r\n const up = Math.log(1 + upperValue);\r\n const low = Math.log(1 + lowerValue);\r\n const p = Math.log(1 + (percent >= 0 ? percent : percent * -1));\r\n\r\n // arbitrary value used to slow down the scaling of log instead of getting too much into math\r\n const scalingFactor = percent >= 0 ? 0.8 : 1.2;\r\n\r\n const ratio = ((p - low) / (up - low)) * scalingFactor;\r\n\r\n return {\r\n r: lowerColor.r + ratio * (upperColor.r - lowerColor.r),\r\n g: lowerColor.g + ratio * (upperColor.g - lowerColor.g),\r\n b: lowerColor.b + ratio * (upperColor.b - lowerColor.b),\r\n };\r\n}\r\n\r\nfunction genomicDataRectangleGenerator(\r\n x,\r\n y,\r\n w,\r\n h,\r\n percent,\r\n parentSVG,\r\n colorScheme,\r\n groupColor?\r\n) {\r\n const limits = findValueColorInterval(colorScheme, Number(percent));\r\n let color: Color = { r: 255, g: 255, b: 255 };\r\n if (limits.lower.value === -Infinity) {\r\n color = limits.upper.color;\r\n } else if (limits.upper.value === Infinity) {\r\n color = limits.lower.color;\r\n } else {\r\n let upperValue = limits.upper.value;\r\n let lowerValue = limits.lower.value;\r\n let upperColor = limits.upper.color;\r\n let lowerColor = limits.lower.color;\r\n\r\n if (lowerValue < 0 && upperValue <= 0) {\r\n lowerValue *= -1;\r\n upperValue *= -1;\r\n swap(lowerValue, upperValue);\r\n } else if (lowerValue < 0 && upperValue > 0) {\r\n upperValue += lowerValue * -1;\r\n lowerValue = 0;\r\n }\r\n\r\n color = getMappedColor(\r\n lowerColor,\r\n upperColor,\r\n lowerValue,\r\n upperValue,\r\n Number(percent)\r\n );\r\n }\r\n\r\n let colorString = \"\";\r\n colorString = ( percent === undefined || percent[0] === '-' || Number(percent) > 100 ) ? \"rgb(210,210,210)\" : `rgb(${Math.round(color.r)}, ${Math.round(color.g )}, \r\n ${Math.round(color.b)})`;\r\n // Rectangle Part\r\n const overlayRect = document.createElementNS(svgNameSpace, \"rect\");\r\n overlayRect.setAttribute(\"x\", x);\r\n overlayRect.setAttribute(\"y\", y);\r\n overlayRect.setAttribute(\"width\", w);\r\n overlayRect.setAttribute(\"height\", h);\r\n if( groupColor !== undefined && percent !== undefined ){\r\n overlayRect.setAttribute(\"style\", \"stroke-width:2;stroke:\" + groupColor + \";\" + \"opacity:1;fill:\" + colorString + \";\" );\r\n overlayRect.setAttribute(\"border-color\", \"#ffffff\");\r\n }\r\n else {\r\n overlayRect.setAttribute(\"style\", \"stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:\" + colorString + \";\");\r\n }\r\n // Text Part\r\n if (percent[0] === \"-\") {\r\n percent = percent.substr(1);\r\n }\r\n const textPercent = percent < 0.5 && percent > 0 ? \"<0.5\" : Number(percent).toFixed(1);\r\n const text = Number(percent) > 100 ? \"N/P\" : textPercent + \"%\";\r\n const fontSize = 14;\r\n const textLength = text.length;\r\n const xOffset = w / 2 - textLength * 4;\r\n const yOffset = fontSize / 3;\r\n const svgText = document.createElementNS(svgNameSpace, \"text\");\r\n svgText.setAttribute(\"x\", x + xOffset);\r\n svgText.setAttribute(\"y\", y + h / 2 + yOffset);\r\n svgText.setAttribute(\"font-family\", \"Arial\");\r\n svgText.setAttribute(\"font-size\", fontSize + \"\");\r\n if( groupColor !== undefined && percent !== undefined && percent >= 0 && percent <= 100 ){\r\n svgText.setAttribute(\"border-color\", \"red\");\r\n }\r\n svgText.innerHTML = text;\r\n parentSVG.appendChild(overlayRect);\r\n if( percent != undefined && percent !== undefined )\r\n parentSVG.appendChild(svgText);\r\n}\r\n\r\nexport default class GenomicDataOverlayManager {\r\n public genomicDataMap: {};\r\n public visibleGenomicDataMapByType: {};\r\n public groupedGenomicDataCount: number;\r\n public groupedGenomicDataMap: {};\r\n public patientData: any;\r\n public groupComparisonData: groupComparisonData;\r\n private DEFAULT_VISIBLE_GENOMIC_DATA_COUNT: number;\r\n private observers: any[];\r\n private cy: any;\r\n private colorScheme: IColorValueMap;\r\n\r\n constructor(cy: any) {\r\n this.cy = cy;\r\n this.genomicDataMap = {};\r\n this.patientData = {};\r\n this.visibleGenomicDataMapByType = {};\r\n this.groupedGenomicDataMap = {};\r\n this.groupedGenomicDataCount = 0;\r\n this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT = 6;\r\n this.colorScheme = {\r\n \"-100\": \"#0000ff\",\r\n \"0\": \"#ffffff\",\r\n \"100\": \"#ff0000\",\r\n };\r\n // Observer-observable pattern related stuff\r\n this.observers = [];\r\n }\r\n\r\n getEmptyGroupID() {\r\n const oldCount = this.groupedGenomicDataCount;\r\n this.groupedGenomicDataCount++;\r\n return oldCount;\r\n }\r\n\r\n addGenomicDataLocally(genomicData: any, groupID: any, isFromPortal: boolean, activeGroups?: any[]) {\r\n this.prepareGenomicData(genomicData, groupID, false, isFromPortal);\r\n \r\n if (isFromPortal) {\r\n if (genomicData[\"PatientView\"] == 1) {\r\n this.patientData = genomicData;\r\n this.showPatientData();\r\n } else if(activeGroups !== undefined){\r\n this.showGroupComparisonData(activeGroups);\r\n } else {\r\n this.showGenomicData();\r\n }\r\n } else {\r\n this.showGenomicData();\r\n }\r\n \r\n this.notifyObservers();\r\n }\r\n\r\n addGenomicData(data) {\r\n this.genomicDataMap = data;\r\n }\r\n\r\n removeGenomicVisData() {\r\n this.visibleGenomicDataMapByType = {};\r\n }\r\n\r\n addGenomicDataWithGeneSymbol(geneSymbol, data) {\r\n this.genomicDataMap[geneSymbol] = data;\r\n }\r\n\r\n addGenomicGroupData(groupID, data) {\r\n this.groupedGenomicDataMap[groupID] = data;\r\n }\r\n \r\n clearAllGenomicData = function() {\r\n this.genomicDataMap = {};\r\n this.visibleGenomicDataMapByType = {};\r\n this.groupedGenomicDataMap = {};\r\n this.groupedGenomicDataCount = 0;\r\n };\r\n\r\n removeGenomicData() {\r\n this.genomicDataMap = {};\r\n }\r\n\r\n removeGenomicDataWithGeneSymbol(geneSymbol) {\r\n this.genomicDataMap[geneSymbol] = {};\r\n }\r\n\r\n addGenomicVisData(key, data) {\r\n this.visibleGenomicDataMapByType[key] = data;\r\n }\r\n \r\n updateGenomicDataVisibility = function(_key, isVisible) {\r\n if (_key in this.visibleGenomicDataMapByType) {\r\n this.visibleGenomicDataMapByType[_key] = isVisible;\r\n }\r\n };\r\n\r\n hideGenomicData = function() {\r\n\r\n this.cy.nodes('[type=\"GENE\"]').forEach(node => {\r\n node.data('w', this.getRequiredWidthForGenomicData(0));\r\n })\r\n\r\n this.cy\r\n .style()\r\n .selector('node[type=\"GENE\"]')\r\n .style(\"text-margin-y\", 0)\r\n .style(\"background-image\", function(ele) {\r\n const dataURI = \"data:image/svg+xml;utf8,\";\r\n return dataURI;\r\n })\r\n .update();\r\n };\r\n\r\n countVisibleGenomicDataByType() {\r\n // Count the genomic data that will be displayed on nodes' body\r\n let genomicDataBoxCount = 0;\r\n for (let cancerType in this.visibleGenomicDataMapByType) {\r\n if (this.visibleGenomicDataMapByType[cancerType]) {\r\n genomicDataBoxCount++;\r\n }\r\n }\r\n\r\n return genomicDataBoxCount;\r\n }\r\n\r\n generateSVGForNode(ele) {\r\n const genomicDataBoxCount = this.countVisibleGenomicDataByType();\r\n\r\n // Experimental data overlay part !\r\n const dataURI = \"data:image/svg+xml;utf8,\";\r\n const svgNameSpace = \"http://www.w3.org/2000/svg\";\r\n\r\n const nodeLabel = ele.data(\"name\");\r\n // If there is no genomic data for this node return !\r\n if (!(nodeLabel in this.genomicDataMap)) {\r\n return dataURI;\r\n }\r\n\r\n const eleBBox = ele.boundingBox();\r\n const reqWidth = this.getRequiredWidthForGenomicData(genomicDataBoxCount);\r\n const overlayRecBoxW = reqWidth - 10;\r\n const overlayRecBoxH = 25;\r\n const svg: any = document.createElementNS(svgNameSpace, \"svg\");\r\n // It seems this should be set according to the node size !\r\n svg.setAttribute(\"width\", reqWidth);\r\n svg.setAttribute(\"height\", eleBBox.h);\r\n // This is important you need to include this to succesfully render in cytoscape.js!\r\n svg.setAttribute(\"xmlns\", svgNameSpace);\r\n\r\n // Overlay Data Rect\r\n const overLayRectBBox = {\r\n w: overlayRecBoxW,\r\n h: overlayRecBoxH,\r\n x: reqWidth / 2 - overlayRecBoxW / 2,\r\n y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18,\r\n };\r\n\r\n let maxGenomicDataBoxCount = /*(genomicDataBoxCount > 3) ? 3:*/ genomicDataBoxCount;\r\n let genomicBoxCounter = 0;\r\n\r\n for (let i in this.groupedGenomicDataMap) {\r\n for (let j in this.groupedGenomicDataMap[i]) {\r\n if (!this.visibleGenomicDataMapByType[this.groupedGenomicDataMap[i][j]]) {\r\n continue;\r\n }\r\n if (!this.genomicDataMap[nodeLabel][this.groupedGenomicDataMap[i][j]]) {\r\n this.genomicDataMap[nodeLabel][this.groupedGenomicDataMap[i][j]] = \"0.00\";\r\n }\r\n genomicDataRectangleGenerator(\r\n overLayRectBBox.x +\r\n (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount,\r\n overLayRectBBox.y,\r\n overLayRectBBox.w / maxGenomicDataBoxCount,\r\n overLayRectBBox.h,\r\n this.genomicDataMap[nodeLabel][this.groupedGenomicDataMap[i][j]],\r\n svg,\r\n this.colorScheme\r\n );\r\n\r\n genomicBoxCounter++;\r\n }\r\n } \r\n return svg;\r\n }\r\n generateSVGForGroupComparisonNode(ele, groupsToBeRendered? ) {\r\n const genomicDataBoxCount = 0;\r\n\r\n // Experimental data overlay part !\r\n const dataURI = \"data:image/svg+xml;utf8,\";\r\n const svgNameSpace = \"http://www.w3.org/2000/svg\";\r\n\r\n const nodeLabel = ele.data(\"name\");\r\n // If there is no genomic data for this node return !\r\n if (!(Object.keys(this.groupComparisonData).includes(nodeLabel) )) {\r\n return dataURI;\r\n }\r\n\r\n const eleBBox = ele.boundingBox();\r\n const reqWidth = this.getRequiredWidthForGenomicData(groupsToBeRendered.length);\r\n const overlayRecBoxW = reqWidth - 10;\r\n const overlayRecBoxH = 25;\r\n const svg: any = document.createElementNS(svgNameSpace, \"svg\");\r\n // It seems this should be set according to the node size !\r\n svg.setAttribute(\"width\", reqWidth);\r\n svg.setAttribute(\"height\", eleBBox.h);\r\n // This is important you need to include this to succesfully render in cytoscape.js!\r\n svg.setAttribute(\"xmlns\", svgNameSpace);\r\n ele.style(\"width\", reqWidth + 10 );\r\n\r\n // Overlay Data Rect\r\n const overLayRectBBox = {\r\n w: overlayRecBoxW,\r\n h: overlayRecBoxH,\r\n x: reqWidth / 2 - overlayRecBoxW / 2,\r\n y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18,\r\n };\r\n\r\n\r\n let maxGenomicDataBoxCount = groupsToBeRendered.length;\r\n let genomicBoxCounter = 0;\r\n\r\n let i = nodeLabel;\r\n for (let j in this.groupComparisonData[i]) {\r\n const percentageInGroup = this.groupComparisonData[i][j];\r\n if (percentageInGroup !== undefined && i === nodeLabel) {\r\n genomicDataRectangleGenerator(\r\n overLayRectBBox.x +\r\n (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount,\r\n overLayRectBBox.y,\r\n (overLayRectBBox.w ) / maxGenomicDataBoxCount - 2,\r\n overLayRectBBox.h,\r\n percentageInGroup,\r\n svg,\r\n this.colorScheme,\r\n groupsToBeRendered[genomicBoxCounter].color\r\n );\r\n genomicBoxCounter++;\r\n } else if( i === nodeLabel ){\r\n genomicDataRectangleGenerator(\r\n overLayRectBBox.x +\r\n (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount,\r\n overLayRectBBox.y,\r\n (overLayRectBBox.w ) / maxGenomicDataBoxCount - 4,\r\n overLayRectBBox.h,\r\n 0,\r\n svg,\r\n this.colorScheme,\r\n groupsToBeRendered[genomicBoxCounter].color\r\n );\r\n genomicBoxCounter++;\r\n }\r\n }\r\n return svg;\r\n }\r\n\r\n // Just an utility function to calculate required width for genes for genomic data !\r\n getRequiredWidthForGenomicData(genomicDataBoxCount) {\r\n const term = genomicDataBoxCount > 3 ? genomicDataBoxCount - 3 : 0;\r\n return 150 + term * 35;\r\n }\r\n\r\n updateColorScheme(colorValueMap: IColorValueMap) {\r\n this.colorScheme = colorValueMap;\r\n }\r\n\r\n showGenomicData(resizeNodeCallback?: (node: any) => void) {\r\n const self = this;\r\n\r\n const genomicDataBoxCount = this.countVisibleGenomicDataByType();\r\n\r\n if (genomicDataBoxCount < 1) {\r\n // Hide all genomic data and return\r\n this.hideGenomicData();\r\n return;\r\n }\r\n\r\n this.cy.nodes('[type=\"GENE\"]').forEach(node => {\r\n node.data('w', this.getRequiredWidthForGenomicData(genomicDataBoxCount));\r\n if (resizeNodeCallback) {\r\n resizeNodeCallback(node);\r\n }\r\n });\r\n\r\n this.cy\r\n .style()\r\n .selector('node[type=\"GENE\"]')\r\n .style(\"text-margin-y\", function(ele) {\r\n const nodeLabel = ele.data(\"name\");\r\n // If there is no genomic data for this node return !\r\n if (!(nodeLabel in self.genomicDataMap)) {\r\n return 0;\r\n }\r\n\r\n // Else shift label in Y axis\r\n return -15;\r\n })\r\n .style(\"background-image\", function(ele) {\r\n const x = encodeURIComponent(self.generateSVGForNode(ele).outerHTML);\r\n if (x === \"undefined\") {\r\n return \"none\";\r\n }\r\n const dataURI = \"data:image/svg+xml;utf8,\" + x;\r\n return dataURI;\r\n })\r\n .update();\r\n }\r\n\r\n generateHTMLContentForComparisonNodeTooltip(ele, groupsToBeRendered) {\r\n const tooltipMaxHeight = \"200px\";\r\n const tooltipMaxWidth = \"200px\";\r\n const marginBetweenSamples = \"12px\";\r\n \r\n const nodeLabel = ele.data(\"name\");\r\n const data = this.groupComparisonData[nodeLabel];\r\n \r\n // Outer wrapper for the entire tooltip\r\n let wrapper = $(\"
\");\r\n wrapper.css({\r\n \"max-width\": tooltipMaxWidth,\r\n \"max-height\": tooltipMaxHeight,\r\n \"word-wrap\": \"break-word\",\r\n \"overflow-y\": \"auto\",\r\n \"font-size\" : \"12px\",\r\n });\r\n\r\n // Inner wrapper for a single sample\r\n let sampleWrapper = $(\"
\");\r\n sampleWrapper.css({\r\n \"margin-top\": 0,\r\n });\r\n let counter = 0;\r\n for ( let j in data ){\r\n let sampleWrapper2 = $(\"
\");\r\n sampleWrapper2.css({\r\n \"margin-top\": 0,\r\n });\r\n let sampleWrapper = $(\"
\");\r\n sampleWrapper.css({\r\n \"margin-top\": 0\r\n //\"display\" : \"inline-flex\"\r\n });\r\n let sampleWrapperSquare = $(\"
\");\r\n sampleWrapperSquare.css({\r\n \"height\": \"12px\",\r\n \"width\": \"12px\",\r\n \"background-color\": groupsToBeRendered[counter].color,\r\n });\r\n\r\n counter++;\r\n sampleWrapper.append(\r\n $(\r\n \"
\" + \"
\" + \"■\" + \"
\" \r\n + \" \" + j + \": \" + data[j].toFixed(1)\r\n + \"
\" \r\n ));\r\n sampleWrapper2.append(sampleWrapper);\r\n wrapper.append(sampleWrapper);\r\n }\r\n return wrapper;\r\n }\r\n\r\n showGroupComparisonData(groupsToBeRendered : any[],resizeNodeCallback?: (node: any) => void, ) {\r\n const self = this;\r\n const data = this.groupComparisonData;\r\n const genomicDataBoxCount = 0;\r\n if (genomicDataBoxCount < 1) {\r\n // Hide all genomic data and return\r\n //this.hideGenomicData();\r\n //return;\r\n }\r\n\r\n this.cy.nodes().forEach(node => {\r\n node.data('w', 1000);\r\n if (resizeNodeCallback) {\r\n resizeNodeCallback(node);\r\n }\r\n });\r\n\r\n this.cy\r\n .style()\r\n .selector('node[type=\"GENE\"]')\r\n .style(\"text-margin-y\", function(ele) {\r\n const nodeLabel = ele.data(\"name\");\r\n // If there is no genomic data for this node return !\r\n if ( !(Object.keys(self.groupComparisonData).includes(nodeLabel))) {\r\n return 0;\r\n }\r\n \r\n // Else shift label in Y axis\r\n return -15;\r\n })\r\n .style(\"background-image\", function(ele) {\r\n const x = encodeURIComponent(self.generateSVGForGroupComparisonNode(ele,groupsToBeRendered).outerHTML);\r\n if (x === \"undefined\") {\r\n return \"none\";\r\n }\r\n const dataURI = \"data:image/svg+xml;utf8,\" + x;\r\n return dataURI;\r\n })\r\n .update();\r\n\r\n this.cy.on(\"mouseover\", 'node[type=\"GENE\"]', function(event) {\r\n const node = event.target || event.cyTarget;\r\n const nodeLabel = node.data(\"name\");\r\n if (!data[nodeLabel]) {\r\n return;\r\n }\r\n\r\n let ref = node.popperRef();\r\n let dummyDomEle = document.createElement(\"div\");\r\n document.body.appendChild(dummyDomEle);\r\n\r\n let tip = tippy(dummyDomEle, {\r\n // tippy props:\r\n getReferenceClientRect: ref.getBoundingClientRect, // https://atomiks.github.io/tippyjs/v6/all-props/#getreferenceclientrect\r\n trigger: \"manual\", // mandatory, we cause the tippy to show programmatically.\r\n placement: \"bottom\",\r\n interactive: true,\r\n theme: \"cbioportal\",\r\n // your own custom props\r\n // content prop can be used when the target is a single element https://atomiks.github.io/tippyjs/v6/constructor/#prop\r\n content: () => {\r\n let content = self.generateHTMLContentForComparisonNodeTooltip(node, groupsToBeRendered)\r\n .get(0);\r\n\r\n return content;\r\n },\r\n onHidden(instance) {\r\n instance.destroy();\r\n dummyDomEle.remove();\r\n },\r\n });\r\n\r\n node.one(\"showqtipevent\", function() {\r\n tip.show();\r\n });\r\n\r\n node.on(\"mouseout\", function() {\r\n if (dummyDomEle && dummyDomEle[\"_tippy\"]) {\r\n tip.hide();\r\n }\r\n });\r\n\r\n node.trigger(\"showqtipevent\");\r\n });\r\n }\r\n\r\n prepareGenomicData = function (\r\n genomicData: any,\r\n groupID: any,\r\n isCollaborative: boolean,\r\n isFromPortal: boolean\r\n ) {\r\n if (isCollaborative) {\r\n this.genomicDataMap = {};\r\n this.visibleGenomicDataMapByType = {};\r\n } else {\r\n this.genomicDataMap = this.genomicDataMap || {};\r\n this.visibleGenomicDataMapByType = this.visibleGenomicDataMapByType || {};\r\n }\r\n \r\n if (isFromPortal) {\r\n\r\n if (!isCollaborative) {\r\n this.groupComparisonData = genomicData;\r\n }\r\n\r\n for (const cancerStudy in genomicData) {\r\n if (!isCollaborative) {\r\n if (this.groupedGenomicDataMap[groupID] === undefined) {\r\n this.groupedGenomicDataMap[groupID] = [];\r\n }\r\n \r\n this.groupedGenomicDataMap[groupID].push(cancerStudy);\r\n }\r\n \r\n this.visibleGenomicDataMapByType[cancerStudy] = true;\r\n \r\n for (const geneSymbol in genomicData[cancerStudy]) {\r\n if (!isCollaborative) {\r\n if (this.genomicDataMap[geneSymbol] === undefined) {\r\n this.genomicDataMap[geneSymbol] = {};\r\n }\r\n \r\n this.genomicDataMap[geneSymbol][cancerStudy] = genomicData[\r\n cancerStudy\r\n ][geneSymbol].toFixed\r\n ? genomicData[cancerStudy][geneSymbol].toFixed(2)\r\n : genomicData[cancerStudy][geneSymbol];\r\n } else {\r\n this.genomicDataMap[geneSymbol] = {};\r\n this.genomicDataMap[geneSymbol][cancerStudy] =\r\n genomicData[cancerStudy][geneSymbol];\r\n }\r\n }\r\n }\r\n } else {\r\n this.groupedGenomicDataMap = this.groupedGenomicDataMap || {};\r\n const cancerTypes = [];\r\n \r\n const lines = genomicData.split(\"\\n\");\r\n // First line is meta data!\r\n const metaLineColumns = lines[0].split(\"\\t\");\r\n \r\n // Parse cancer types\r\n for (let i = 1; i < metaLineColumns.length; i++) {\r\n cancerTypes.push(metaLineColumns[i]);\r\n const visibleGenomicDataCount = isCollaborative\r\n ? i - 1\r\n : Object.keys(this.visibleGenomicDataMapByType).length;\r\n // Update initially visible genomic data boxes!\r\n if (visibleGenomicDataCount < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) {\r\n this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = true;\r\n } else {\r\n this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = false;\r\n }\r\n \r\n if (!isCollaborative) {\r\n if (this.groupedGenomicDataMap[groupID] === undefined) {\r\n this.groupedGenomicDataMap[groupID] = [];\r\n }\r\n this.groupedGenomicDataMap[groupID].push(cancerTypes[i - 1]);\r\n }\r\n }\r\n \r\n // parse genomic data\r\n for (let i = 1; i < lines.length; i++) {\r\n // EOF check\r\n if (lines[i].length === 0) {\r\n break;\r\n }\r\n \r\n // Split each line by tab and parse genomic data content\r\n const lineContent = lines[i].split(\"\\t\");\r\n const geneSymbol = lineContent[0];\r\n \r\n // If current gene entry is not in genomic data map create new map\r\n if (!(geneSymbol in this.genomicDataMap)) {\r\n this.genomicDataMap[geneSymbol] = {};\r\n }\r\n \r\n // Add each entry of genomic data\r\n for (let j = 1; j < lineContent.length; j++) {\r\n this.genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j];\r\n }\r\n }\r\n }\r\n \r\n return {\r\n genomicDataMap: this.genomicDataMap,\r\n visibilityMap: this.visibleGenomicDataMapByType,\r\n };\r\n }\r\n \r\n // Simple observer-observable pattern for views!!!!!\r\n registerObserver(observer) {\r\n this.observers.push(observer);\r\n }\r\n\r\n notifyObservers() {\r\n for (const observer of this.observers) {\r\n observer.notify();\r\n }\r\n }\r\n\r\n //This method is needed to calculate the alteration Types for each gene\r\n getAlterationCountForPatient(geneData) {\r\n let count = 0;\r\n for (let altType in geneData) {\r\n count++;\r\n }\r\n return count;\r\n }\r\n\r\n //These methods are created to be used in CbioPortal PatientView they are not used\r\n //in ResultView Page or PathwayMapper Editor\r\n\r\n showPatientData() {\r\n const self = this;\r\n\r\n const data = this.patientData;\r\n\r\n // const genomicDataBoxCount = 3 //this.countVisibleGenomicDataByType(); //CHANGE\r\n const genomicDataBoxCount = data.geneticTrackData\r\n ? data.geneticTrackData.length\r\n : 3;\r\n if (genomicDataBoxCount < 1) {\r\n // Hide all genomic data and return\r\n this.hideGenomicData();\r\n return;\r\n }\r\n\r\n this.cy\r\n .style()\r\n .selector('node[type=\"GENE\"]')\r\n // It used to change the width of nodes only locally\r\n .style(\"width\", (ele) => {\r\n return this.getRequiredWidthForGenomicData(genomicDataBoxCount);\r\n })\r\n .style(\"text-margin-y\", function(ele) {\r\n const nodeLabel = ele.data(\"name\");\r\n\r\n // If there is no genomic data for this node return !\r\n if (!(nodeLabel in data)) {\r\n return 0;\r\n }\r\n\r\n // Else shift label in Y axis\r\n return -15;\r\n })\r\n .style(\"background-image\", function(ele) {\r\n const x = encodeURIComponent(\r\n // self.generateSVGForPatientNode(ele, data).outerHTML\r\n self.generateOncoprintForPatientNode(ele).outerHTML\r\n );\r\n if (x === \"undefined\") {\r\n return \"none\";\r\n }\r\n const dataURI = \"data:image/svg+xml;utf8,\" + x;\r\n return dataURI;\r\n })\r\n .update();\r\n\r\n this.cy.on(\"mouseover\", 'node[type=\"GENE\"]', function(event) {\r\n const node = event.target || event.cyTarget;\r\n const nodeLabel = node.data(\"name\");\r\n if (!data[nodeLabel]) {\r\n return;\r\n }\r\n\r\n let ref = node.popperRef();\r\n let dummyDomEle = document.createElement(\"div\");\r\n document.body.appendChild(dummyDomEle);\r\n\r\n let tip = tippy(dummyDomEle, {\r\n // tippy props:\r\n getReferenceClientRect: ref.getBoundingClientRect, // https://atomiks.github.io/tippyjs/v6/all-props/#getreferenceclientrect\r\n trigger: \"manual\", // mandatory, we cause the tippy to show programmatically.\r\n placement: \"bottom\",\r\n interactive: true,\r\n theme: \"cbioportal\",\r\n // your own custom props\r\n // content prop can be used when the target is a single element https://atomiks.github.io/tippyjs/v6/constructor/#prop\r\n content: () => {\r\n let content = self\r\n .generateHTMLContentForNodeTooltip(node, data)\r\n .get(0);\r\n\r\n return content;\r\n },\r\n onHidden(instance) {\r\n instance.destroy();\r\n dummyDomEle.remove();\r\n },\r\n });\r\n\r\n node.one(\"showqtipevent\", function() {\r\n tip.show();\r\n });\r\n\r\n node.on(\"mouseout\", function() {\r\n if (dummyDomEle && dummyDomEle[\"_tippy\"]) {\r\n tip.hide();\r\n }\r\n });\r\n\r\n node.trigger(\"showqtipevent\");\r\n });\r\n }\r\n\r\n //Every mutation type has a unique color coded. This method is used to retrieve the colors\r\n getOncoprintColors(selectedGene) {\r\n const oncoprintColors = {\r\n Missense_Mutation: \"rgb(0,128,0)\",\r\n inframe: \"#993404\",\r\n truncating: \"#000000\",\r\n Fusion: \"rgb(139,0,201)\",\r\n AMP: \"rgb(255,0,0)\",\r\n gain: \"#ffb6c1\",\r\n heatloss: \"#8fd8d8\",\r\n homdel: \"rgb(0,0,255)\",\r\n DeepDel: \"rgb(0,0,255)\",\r\n \"5'Flank\": \"rgb(207,88,188)\",\r\n in_frame_del: \"rgb(166,128,40)\",\r\n };\r\n\r\n if (oncoprintColors[selectedGene] !== undefined) {\r\n return oncoprintColors[selectedGene];\r\n } else {\r\n //Types are not on the list corresponds to black\r\n return \"rgb(0,0,0)\";\r\n }\r\n }\r\n generateSVGForPatientNode(ele, patientData) {\r\n //Here we should use the parameter patientData when calculating the expressions\r\n const genomicDataBoxCount = this.countVisibleGenomicDataByType();\r\n // Experimental data overlay part !\r\n const dataURI = \"data:image/svg+xml;utf8,\";\r\n const svgNameSpace = \"http://www.w3.org/2000/svg\";\r\n //nodeLabel refers to the nodeLabels in the overlay data\r\n const nodeLabel = ele.data(\"name\");\r\n // If there is no genomic data for this node return !\r\n if (!(nodeLabel in patientData)) {\r\n return dataURI;\r\n }\r\n //this parameter refers to the count of alteration types for each gene\r\n const alterationBoxCount = this.getAlterationCountForPatient(\r\n patientData[nodeLabel]\r\n );\r\n\r\n const eleBBox = ele.boundingBox();\r\n const svg: any = document.createElementNS(svgNameSpace, \"svg\");\r\n //this parameter is set to 12 since there are 12 different possiblities for types\r\n const term = alterationBoxCount > 12 ? alterationBoxCount - 12 : 0;\r\n const reqWidth = 150 + term * 35;\r\n\r\n const overlayRecBoxW = reqWidth - 10;\r\n const overlayRecBoxH = 25;\r\n\r\n // It seems this should be set according to the node size !\r\n svg.setAttribute(\"width\", reqWidth);\r\n svg.setAttribute(\"height\", eleBBox.h);\r\n // This is important you need to include this to succesfully render in cytoscape.js!\r\n svg.setAttribute(\"xmlns\", svgNameSpace);\r\n\r\n // Overlay Data Rect\r\n const overLayRectBBox = {\r\n w: overlayRecBoxW,\r\n h: overlayRecBoxH,\r\n x: reqWidth / 2 - overlayRecBoxW / 2,\r\n y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18,\r\n };\r\n let genomicBoxCounter = 0;\r\n //required width is calculated for each gene since box count is different for each gene\r\n for (let j in patientData[nodeLabel]) {\r\n const genomicAlterationData = patientData[nodeLabel];\r\n const alterationType = j;\r\n\r\n if (!this.visibleGenomicDataMapByType[nodeLabel]) {\r\n continue;\r\n }\r\n //get the color string corresponding to the alterationType\r\n let colorString = this.getOncoprintColors(alterationType);\r\n\r\n if (genomicAlterationData[alterationType] !== undefined) {\r\n genomicDataRectangleGeneratorPatient(\r\n overLayRectBBox.x +\r\n (genomicBoxCounter * overLayRectBBox.w) / alterationBoxCount,\r\n overLayRectBBox.y,\r\n overLayRectBBox.w / alterationBoxCount,\r\n overLayRectBBox.h,\r\n 100,\r\n svg,\r\n alterationType,\r\n colorString\r\n );\r\n } else {\r\n genomicDataRectangleGeneratorPatient(\r\n overLayRectBBox.x +\r\n (genomicBoxCounter * overLayRectBBox.w) / alterationBoxCount,\r\n overLayRectBBox.y,\r\n overLayRectBBox.w / alterationBoxCount,\r\n overLayRectBBox.h,\r\n null,\r\n svg,\r\n \"\",\r\n null\r\n );\r\n }\r\n\r\n genomicBoxCounter++;\r\n }\r\n //This function differs from genomicRectangleGenerator. genomicDataRectangleGeneratorPatient\r\n //has an extra parameter text. In patient view alterationTypes of genes are displayed instead of\r\n //alteration percentage. Hence a text is sent to this method which is alterationType\r\n function genomicDataRectangleGeneratorPatient(\r\n x,\r\n y,\r\n w,\r\n h,\r\n percent,\r\n parentSVG,\r\n text,\r\n colorString\r\n ) {\r\n if (percent) {\r\n const isNegativePercent = percent < 0;\r\n // Rectangle Part\r\n const overlayRect = document.createElementNS(svgNameSpace, \"rect\");\r\n overlayRect.setAttribute(\"x\", x);\r\n overlayRect.setAttribute(\"y\", y);\r\n overlayRect.setAttribute(\"width\", w);\r\n overlayRect.setAttribute(\"height\", h);\r\n overlayRect.setAttribute(\r\n \"style\",\r\n \"stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:\" + colorString + \";\"\r\n );\r\n\r\n // Text Part\r\n const fontSize = 14;\r\n const textLength = 4;\r\n const xOffset = w / 2 - textLength * 4;\r\n const yOffset = fontSize / 3;\r\n\r\n const svgText = document.createElementNS(svgNameSpace, \"text\");\r\n if (colorString === \"rgb(0,0,0)\") {\r\n svgText.setAttribute(\"fill\", \"white\");\r\n }\r\n svgText.setAttribute(\"x\", x + xOffset);\r\n svgText.setAttribute(\"y\", y + h / 2 + yOffset);\r\n\r\n svgText.setAttribute(\"font-family\", \"Arial\");\r\n svgText.setAttribute(\"font-size\", fontSize + \"\");\r\n\r\n //first 4 letters of the alterationTypes are used\r\n svgText.innerHTML = text.substring(0, 4);\r\n parentSVG.appendChild(overlayRect);\r\n parentSVG.appendChild(svgText);\r\n } else {\r\n //Normally\r\n colorString = \"rgb(210,210,210)\";\r\n }\r\n }\r\n\r\n return svg;\r\n }\r\n\r\n generateOncoprintForPatientNode(ele) {\r\n // const dataURI = 'data:image/svg+xml;utf8,'\r\n // nodeLabel refers to the nodeLabels in the overlay data\r\n const patientData = this.patientData;\r\n const nodeLabel = ele.data(\"name\");\r\n const genomicData = patientData[nodeLabel];\r\n\r\n const svgNameSpace = \"http://www.w3.org/2000/svg\";\r\n const svgElement: any = document.createElementNS(svgNameSpace, \"svg\");\r\n\r\n if (!genomicData) {\r\n return { outerHTML: \"\" };\r\n }\r\n\r\n const ruleset = new GeneticAlterationRuleSet(\r\n genomicData.geneticTrackRuleSetParams\r\n );\r\n const cellWidth = 6;\r\n const cellPadding = 3;\r\n const cellHeight = 23;\r\n const cellVerticalPadding = 8;\r\n\r\n const universalShapes = ruleset.getUniversalShapes(cellWidth, cellHeight);\r\n\r\n const specificShapesPerDatum = ruleset.getSpecificShapesForDatum(\r\n genomicData.geneticTrackData,\r\n cellWidth,\r\n cellHeight\r\n );\r\n\r\n const shapesPerDatum = specificShapesPerDatum.map((specificShapes) =>\r\n universalShapes.concat(specificShapes)\r\n );\r\n\r\n shapesPerDatum.forEach((shapes, index) => {\r\n const offsetX = index * (cellWidth + cellPadding); // width + padding\r\n const offsetY = cellVerticalPadding;\r\n const g = document.createElementNS(svgNameSpace, \"g\");\r\n shapes.forEach((shape) =>\r\n g.appendChild(shapeToSvg(shape, offsetX, offsetY))\r\n );\r\n svgElement.appendChild(g);\r\n });\r\n\r\n // It seems this should be set according to the node size !\r\n svgElement.setAttribute(\r\n \"width\",\r\n ((cellWidth + cellPadding) * shapesPerDatum.length).toString()\r\n );\r\n svgElement.setAttribute(\r\n \"height\",\r\n (cellHeight + cellVerticalPadding).toString()\r\n );\r\n // This is important you need to include this to succesfully render in cytoscape.js!\r\n svgElement.setAttribute(\"xmlns\", svgNameSpace);\r\n\r\n return svgElement;\r\n }\r\n\r\n // Mapping of alteration type keys to strings\r\n // See: https://github.com/cBioPortal/cbioportal-frontend/blob/442e108208846255feb1ed5b309218cd44927fb9/src/shared/components/oncoprint/TooltipUtils.ts#L599\r\n getCNADisplayString(alterationTypeKey: number) {\r\n const disp_cna: { [integerCN: string]: string } = {\r\n \"-2\": \"HOMODELETED\",\r\n \"-1\": \"HETLOSS\",\r\n \"1\": \"GAIN\",\r\n \"2\": \"AMPLIFIED\",\r\n };\r\n return disp_cna[alterationTypeKey];\r\n }\r\n\r\n generateSvgIconForSample(iconColor: string, iconText: string) {\r\n var html =\r\n '' +\r\n '' +\r\n '' +\r\n \"\" +\r\n '' +\r\n '' +\r\n iconText +\r\n \"\" +\r\n \"\" +\r\n \"\";\r\n\r\n return html;\r\n }\r\n\r\n generateHTMLContentForNodeTooltip(ele, patientData) {\r\n const tooltipMaxHeight = \"200px\";\r\n const tooltipMaxWidth = \"200px\";\r\n const marginBetweenSamples = \"10px\";\r\n const sampleIconColorMap = patientData.sampleColors;\r\n const sampleIndexMap = patientData.sampleIndex;\r\n\r\n const nodeLabel = ele.data(\"name\");\r\n const data = patientData[nodeLabel];\r\n\r\n // Outer wrapper for the entire tooltip\r\n var wrapper = $(\"
\");\r\n wrapper.css({\r\n \"max-width\": tooltipMaxWidth,\r\n \"max-height\": tooltipMaxHeight,\r\n \"word-wrap\": \"break-word\",\r\n \"overflow-y\": \"auto\",\r\n });\r\n\r\n data.geneticTrackData.forEach((sample, sampleIndex) => {\r\n const sampleId = sample.sample;\r\n const iconColor = sampleIconColorMap[sampleId];\r\n const iconText = (sampleIndexMap[sampleId] + 1).toString();\r\n const sampleIconSvgHTML = this.generateSvgIconForSample(\r\n iconColor,\r\n iconText\r\n );\r\n\r\n const margin = sampleIndex > 0 ? marginBetweenSamples : \"0px\";\r\n\r\n // Inner wrapper for a single sample\r\n var sampleWrapper = $(\"
\");\r\n sampleWrapper.css({\r\n \"margin-top\": margin,\r\n });\r\n\r\n const sampleData = sample.data;\r\n var mutationInfo = [];\r\n var cnaInfo = [];\r\n var fusionInfo = [];\r\n sampleData.forEach((data) => {\r\n const geneSymbol = data.gene.hugoGeneSymbol;\r\n\r\n if (\r\n sample.disp_mut &&\r\n data.proteinChange &&\r\n data.mutationType !== \"Fusion\"\r\n ) {\r\n const proteinChange = data.proteinChange;\r\n mutationInfo.push({\r\n gene: geneSymbol,\r\n proteinChange: proteinChange,\r\n });\r\n }\r\n\r\n if (sample.disp_cna && data.alteration) {\r\n const cnaLabelKey = data.alteration;\r\n const cnaLabel = this.getCNADisplayString(cnaLabelKey);\r\n cnaInfo.push({\r\n gene: geneSymbol,\r\n cnaLabel: cnaLabel,\r\n });\r\n }\r\n\r\n if (\r\n sample.disp_fusion &&\r\n data.proteinChange &&\r\n data.mutationType === \"Fusion\"\r\n ) {\r\n const proteinChange = data.proteinChange;\r\n fusionInfo.push({\r\n gene: geneSymbol,\r\n proteinChange: proteinChange,\r\n });\r\n }\r\n });\r\n // Prepare HTML for tooltip\r\n var mutationInfoHTML = mutationInfo.length > 0 ? \"Mutation: \" : \"\";\r\n var cnaInfoHTML = cnaInfo.length > 0 ? \"CNA: \" : \"\";\r\n var fusionInfoHTML = fusionInfo.length > 0 ? \"Fusion: \" : \"\";\r\n\r\n mutationInfo.forEach((mutation, index) => {\r\n mutationInfoHTML +=\r\n \"\" + mutation.gene + \" \" + mutation.proteinChange + \"\";\r\n if (index !== mutationInfo.length - 1) {\r\n mutationInfoHTML += \", \";\r\n } else {\r\n mutationInfoHTML += \"
\";\r\n }\r\n });\r\n\r\n cnaInfo.forEach((cna, index) => {\r\n cnaInfoHTML += \"\" + cna.gene + \" \" + cna.cnaLabel + \"\";\r\n if (index !== cnaInfo.length - 1) {\r\n cnaInfoHTML += \", \";\r\n } else {\r\n cnaInfoHTML += \"
\";\r\n }\r\n });\r\n\r\n fusionInfo.forEach((fusion, index) => {\r\n fusionInfoHTML +=\r\n \"\" + fusion.gene + \" \" + fusion.proteinChange + \"\";\r\n if (index !== fusionInfo.length - 1) {\r\n fusionInfoHTML += \", \";\r\n } else {\r\n fusionInfoHTML += \"
\";\r\n }\r\n });\r\n const sampleIdHTML = \" \" + sampleId + \"\" + \"
\";\r\n sampleWrapper.append(\r\n $(\r\n \"
\" +\r\n sampleIconSvgHTML +\r\n sampleIdHTML +\r\n mutationInfoHTML +\r\n cnaInfoHTML +\r\n fusionInfoHTML +\r\n +\"
\"\r\n )\r\n );\r\n wrapper.append(sampleWrapper);\r\n });\r\n\r\n return wrapper;\r\n }\r\n}\r\n","import _, { add } from \"lodash\";\r\nimport { toast, ToastContainer } from \"react-toastify\";\r\nimport { ChatMessageMetaData, IColorValueMap } from \"../ui/react-pathway-mapper\";\r\nimport GraphUtilities from \"../utils/GraphUtilities\";\r\nimport EditorActionsManager from \"./EditorActionsManager\";\r\n\r\nlet sharedb;\r\nlet socket;\r\nlet connection;\r\n\r\nexport default class ShareDBManager {\r\n\r\n readonly NODEMAP_NAME = 'nodes';\r\n readonly EDGEMAP_NAME = 'edges';\r\n readonly LAYOUT_PROPS_NAME = 'layoutProperties';\r\n readonly GLOBAL_OPTS_NAME = 'globalOptions';\r\n //For storing genomic data information per gene\r\n readonly GENOMIC_DATA_MAP_NAME = 'genomicDataMap';\r\n //For storing visibility information of genomic data according to the cancer type\r\n readonly VISIBLE_GENOMIC_DATA_MAP_NAME = 'visibleGenomicDataMapByType';\r\n readonly GENOMIC_DATA_GROUP_NAME = 'genomicDataGroupList';\r\n readonly GENOMIC_DATA_GROUP_COUNT = 'genomicDataGroupCount';\r\n readonly GENOMIC_DATA_COLOR_SCHEME_NAME = 'genomicDataColorScheme';\r\n readonly CHAT_APPLICATION_NAME = 'chatMessages';\r\n readonly CHAT_MESSAGES_COUNT = 'chatMessagesCount';\r\n readonly PATHWAY_TITLE = 'pathwayTitle';\r\n readonly NUMBER_OF_USERS = 'numberOfUsers';\r\n readonly WORK_ID = 'id';\r\n \r\n doc: any;\r\n postFileLoad: any;\r\n editor: EditorActionsManager;\r\n constructor(postFileLoadCallback) {\r\n //Doc data maps names and keys\r\n this.postFileLoad = postFileLoadCallback;\r\n };\r\n\r\n\r\n\r\n getDoc(){\r\n return this.doc;\r\n }\r\n\r\n setEditor(editor: EditorActionsManager){\r\n this.editor = editor;\r\n }\r\n\r\n //Applies any given sharDB opeation to shared document and notifies other clients\r\n applyShareDBOperation(op) {\r\n this.doc.submitOp(op, this.shareDBError);\r\n };\r\n\r\n //Clears genomic data in shared document and notifies other clients\r\n clearShareDBGenomicData() {\r\n var ops = [];\r\n var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME];\r\n var visMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\r\n var genomicDataGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME];\r\n var genomicDataGroupCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\r\n //Reset all genomic maps\r\n for (const key of Object.keys(genomicMap)) {\r\n ops.push({p: [this.GENOMIC_DATA_MAP_NAME, key], od: genomicMap[key]});\r\n }\r\n for (const key of Object.keys(visMap)) {\r\n ops.push({p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, key], od: visMap[key]});\r\n }\r\n for (const key of Object.keys(genomicDataGroupMap)) {\r\n ops.push({p: [this.GENOMIC_DATA_GROUP_NAME, key], od: genomicDataGroupMap[key]});\r\n }\r\n //Reset genomic data group count to 0\r\n ops.push({p: [this.GENOMIC_DATA_GROUP_COUNT], na: -genomicDataGroupCount});\r\n this.doc.submitOp(ops, this.shareDBError);\r\n };\r\n\r\n /*\r\n * Updates shared document object\r\n * @param mapName: map name of the object\r\n * @param objectKey: key of the object\r\n * @param object: new object\r\n *\r\n */\r\n updateShareDBObject(mapName, objectKey, object) {\r\n this.doc.submitOp([{\r\n p: [mapName, objectKey],\r\n od: this.doc.data[mapName][objectKey],\r\n oi: object\r\n }], this.shareDBError);\r\n };\r\n\r\n /*\r\n * Inserts a new shared document object\r\n * @param mapName: map name of the object\r\n * @param objectKey: key of the object\r\n * @param object: new object\r\n *\r\n */\r\n insertShareDBObject(mapName, objectKey, object) {\r\n this.doc.submitOp([{p: [mapName, objectKey], oi: object}], this.shareDBError);\r\n };\r\n\r\n /*\r\n * Deletes a shared document object\r\n * @param mapName: map name of the object\r\n * @param objectKey: key of the object\r\n *\r\n */\r\n deleteShareDBObject(mapName, objectKey) {\r\n this.doc.submitOp([{p: [mapName, objectKey], od: this.doc.data[mapName][objectKey]}], this.shareDBError);\r\n };\r\n\r\n //Initializes layout properties of the shared document\r\n initializeShareDBLayoutProperties() {\r\n this.doc.submitOp([{\r\n p: [this.LAYOUT_PROPS_NAME, 0],\r\n li: [this.editor.layoutProperties]\r\n }], this.shareDBError);\r\n };\r\n\r\n //Initializes global options of the shared document\r\n initializeShareDBGlobalOptions() {\r\n this.doc.submitOp([{\r\n p: [this.GLOBAL_OPTS_NAME, 0],\r\n li: [this.editor.getGlobalOptions()]\r\n }], this.shareDBError);\r\n };\r\n\r\n /*\r\n * Updates layout properties of the shared document and notifies other clients\r\n * @param object: new layout properties object\r\n *\r\n */\r\n updateShareDBLayoutProperties(object) {\r\n this.doc.submitOp([{\r\n p: [this.LAYOUT_PROPS_NAME, 0],\r\n ld: this.doc.data[this.LAYOUT_PROPS_NAME][0],\r\n li: object\r\n }], this.shareDBError);\r\n };\r\n\r\n /*\r\n * Updates global options of the shared document and notifies other clients\r\n * @param object: new global options object\r\n *\r\n */\r\n\r\n getUserId() {\r\n return this.doc.data[this.NUMBER_OF_USERS];\r\n }\r\n\r\n incrementMessageCount(){\r\n this.doc.submitOp([{p: [this.CHAT_MESSAGES_COUNT], na: 1}], this.shareDBError);\r\n }\r\n\r\n incrementNumberOfUsers(){\r\n this.doc.submitOp([{p: [this.NUMBER_OF_USERS], na: 1}], this.shareDBError);\r\n }\r\n\r\n addNewMessage( object : ChatMessageMetaData, chatMessageKey : number){\r\n this.doc.submitOp([{p: [this.CHAT_APPLICATION_NAME, chatMessageKey], oi: object}], this.shareDBError);\r\n };\r\n\r\n updateShareDBGlobalOptions(object) {\r\n this.doc.submitOp([{\r\n p: [this.GLOBAL_OPTS_NAME, 0],\r\n ld: this.doc.data[this.GLOBAL_OPTS_NAME][0],\r\n li: object\r\n }], this.shareDBError);\r\n };\r\n\r\n updateShareDBGenomicDataOverlayColorScheme(object : IColorValueMap) {\r\n this.doc.submitOp([{\r\n p: [this.GENOMIC_DATA_COLOR_SCHEME_NAME, 0],\r\n ld: this.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME][0],\r\n li: object\r\n }], this.shareDBError);\r\n };\r\n\r\n //Increments shared data group count\r\n //Use this function to increment and keep the group count synchronized\r\n incrementShareDBGroupCount() {\r\n this.doc.submitOp([{p: [this.GENOMIC_DATA_GROUP_COUNT], na: 1}], this.shareDBError);\r\n };\r\n\r\n //Checks whether given operation is a replace or add/delete operation\r\n isShareDBReplaceEvent(op) {\r\n return (op.hasOwnProperty(\"oi\") && op.hasOwnProperty(\"od\"))\r\n || (op.hasOwnProperty(\"li\") && op.hasOwnProperty(\"ld\"));\r\n };\r\n\r\n /*\r\n * Gets the initial value of the shared document\r\n * without this function shared document values cannot be reached\r\n */\r\n initializeSharedDBDoc() {\r\n this.doc.subscribe();\r\n };\r\n\r\n shareDBError(err) {\r\n if (err) {\r\n console.error(err);\r\n }\r\n };\r\n\r\n initShareDB() {\r\n sharedb = require('sharedb/lib/client');\r\n socket = new WebSocket('ws://' + window.location.host);\r\n connection = new sharedb.Connection(socket);\r\n\r\n var self = this;\r\n\r\n var id = this.getParam('id');\r\n\r\n var loadFileCallback = function () {\r\n self.onFileLoaded();\r\n };\r\n\r\n //Creates new shared db document and initializes values\r\n var createNewDocument = () => {\r\n var new_id = self.getCustomObjId();\r\n var data = {\r\n id: new_id,\r\n nodes: {},\r\n edges: {},\r\n layoutProperties: [this.editor.layoutProperties],\r\n globalOptions: [this.editor.getGlobalOptions()],\r\n genomicDataMap: {},\r\n visibleGenomicDataMapByType: {},\r\n genomicDataGroupList: {},\r\n genomicDataGroupCount: 0,\r\n chatMessagesCount: 0,\r\n numberOfUsers: 0,\r\n pathwayTitle: [],\r\n genomicDataColorScheme: [{\r\n '-100' : \"#0000ff\",\r\n '0' : \"#ffffff\",\r\n '100' : \"#ff0000\"\r\n }], chatMessages : {}\r\n };\r\n window.history.pushState(null, null, '?id=' + new_id);\r\n self.doc = connection.get('cy', new_id);\r\n self.doc.create(data, loadFileCallback);\r\n };\r\n\r\n //Check if id exists in parameters\r\n //If exists open the shared document\r\n if (id) {\r\n // Check any document exists with given id\r\n this.doc = connection.get('cy', id);\r\n this.doc.fetch(function (err) {\r\n if (err)\r\n throw err;\r\n\r\n if (self.doc.type === null) {\r\n createNewDocument();\r\n return;\r\n }\r\n self.doc.subscribe(loadFileCallback);\r\n });\r\n }\r\n else {\r\n //Create new shared document\r\n createNewDocument();\r\n }\r\n };\r\n\r\n /*\r\n * After a file has been initialized and loaded, we can access the\r\n * document. We will wire up the data in shared document to the UI.\r\n *\r\n */\r\n onFileLoaded() {\r\n this.initializeSharedDBDoc();\r\n this.syncInitialSharedDocData();\r\n this.initSharedDocEventHandlers();\r\n\r\n this.postFileLoad();\r\n };\r\n\r\n /*\r\n * Synchronizes initial data in the shared document to\r\n * client's application.\r\n */\r\n syncInitialSharedDocData() {\r\n var self = this;\r\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\r\n var edgeMap = self.doc.data[this.EDGEMAP_NAME];\r\n var shareDBLayoutProperties = self.doc.data[this.LAYOUT_PROPS_NAME][0];\r\n var globalOptions = self.doc.data[this.GLOBAL_OPTS_NAME][0];\r\n var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME];\r\n var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\r\n var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME];\r\n var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\r\n var chatMessages = self.doc.data[this.CHAT_APPLICATION_NAME];\r\n var chatMessageCount = self.doc.data[this.CHAT_MESSAGES_COUNT];\r\n let genomicDataColorScheme;\r\n \r\n if (self.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME]) {\r\n genomicDataColorScheme = self.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME][0];\r\n }\r\n\r\n self.editor.loadMessages( chatMessages );\r\n self.editor.updateMessageCount( chatMessageCount );\r\n var invalidGenes = [];\r\n var highlightedGenes = [];\r\n var invalidHighlightedGenes = [];\r\n var hiddenGenes = [];\r\n for (const key of Object.keys(nodeMap)) {\r\n var tmpNode = nodeMap[key];\r\n var tmpNodeId = tmpNode.id;\r\n\r\n if (tmpNode.isInvalidGene && tmpNode.isHighlighted) {\r\n invalidHighlightedGenes.push(tmpNodeId);\r\n }\r\n else if (tmpNode.isInvalidGene) {\r\n invalidGenes.push(tmpNodeId);\r\n }\r\n else if (tmpNode.isHighlighted) {\r\n highlightedGenes.push(tmpNodeId);\r\n }\r\n if (tmpNode.isHidden) {\r\n hiddenGenes.push(tmpNodeId);\r\n }\r\n }\r\n var highlightedEdges = [];\r\n for (const key of Object.keys(edgeMap)) {\r\n var tmpEdge = edgeMap[key];\r\n var tmpEdgeId = tmpEdge.id;\r\n if (tmpEdge.isHighlighted) {\r\n highlightedEdges.push(tmpEdgeId);\r\n }\r\n }\r\n\r\n //TODO Workaround for legacy pathways\r\n\r\n // Workaround for backward compatibility of legacy pathways\r\n // Addition of pubmed id field on server if legacy collaborative\r\n // pathways does not have !\r\n for (const key of Object.keys(edgeMap)) {\r\n const tmpEdge = edgeMap[key];\r\n\r\n if (tmpEdge.pubmedIDs == undefined \r\n || tmpEdge.name == undefined \r\n || tmpEdge.bendPoint == undefined \r\n || tmpEdge.anchorPoints == undefined\r\n || tmpEdge.edgeCurveStyle == undefined) {\r\n const pubmedIDs = (tmpEdge.pubmedIDs == undefined) ? [] : tmpEdge.pubmedID;\r\n const edgeLabel = (tmpEdge.name == undefined) ? \"\" : tmpEdge.name;\r\n let anchorPoints = [];\r\n if (tmpEdge.bendPoint) {\r\n anchorPoints = tmpEdge.bendPoint;\r\n }\r\n else if (tmpEdge.anchorPoints) {\r\n anchorPoints = tmpEdge.anchorPoints;\r\n }\r\n const edgeCurveStyle = tmpEdge.edgeCurveStyle ? tmpEdge.edgeCurveStyle : \"bezier\";\r\n\r\n const param = {\r\n type: tmpEdge.type,\r\n source: tmpEdge.source,\r\n id: self.getCustomObjId(),\r\n target: tmpEdge.target,\r\n pubmedID: pubmedIDs,\r\n name: edgeLabel,\r\n anchorPoints: anchorPoints,\r\n edgeCurveStyle: edgeCurveStyle\r\n };\r\n\r\n const newEdge: any = self.edgeInitializer(param);\r\n\r\n\r\n const tmpEdgeID = tmpEdge.id;\r\n const newEdgeID = newEdge.id;\r\n\r\n const ops = [\r\n {p: [self.EDGEMAP_NAME, tmpEdgeID], od: tmpEdge},\r\n {p: [self.EDGEMAP_NAME, newEdgeID], oi: newEdge}\r\n ]\r\n self.applyShareDBOperation(ops);\r\n }\r\n\r\n }\r\n\r\n //Add real time nodes to local graph\r\n this.editor.addNewElementsLocally(nodeMap, edgeMap);\r\n //Adds different type of highlight to nodes and hides if their property is hidden\r\n this.editor.highlightElementsInitially(invalidHighlightedGenes, invalidGenes, highlightedGenes, highlightedEdges, hiddenGenes);\r\n\r\n //Update layout properties & global options!!\r\n if (shareDBLayoutProperties.name == \"cose-bilkent\") {\r\n shareDBLayoutProperties.name = \"fcose\";\r\n this.updateLayoutProperties(shareDBLayoutProperties);\r\n }\r\n this.editor.updateLayoutPropertiesCallback({li: shareDBLayoutProperties});\r\n this.editor.changeGlobalOptions({li: globalOptions});\r\n\r\n //Sync already available genomic data !\r\n\r\n if (!groupedGenomicDataMap) {\r\n\r\n self.insertShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', []);\r\n for (const key of Object.keys(visDataMap)) {\r\n var currentMap = _.clone(groupedGenomicDataMap['0']);\r\n // currentMap.push(visibilityMapKeys[key]);\r\n self.updateShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', currentMap);\r\n }\r\n }\r\n\r\n if (!groupedGenomicDataCount) {\r\n var count = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT];\r\n var op = [{\r\n p: [self.GENOMIC_DATA_GROUP_COUNT],\r\n na: -count\r\n }];\r\n self.applyShareDBOperation(op);\r\n groupedGenomicDataCount = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT];\r\n }\r\n\r\n if (!genomicDataColorScheme) {\r\n genomicDataColorScheme = this.editor.getGenomicDataOverlayColorScheme();\r\n const op = [{\r\n p: [self.GENOMIC_DATA_COLOR_SCHEME_NAME],\r\n oi: [genomicDataColorScheme]\r\n }];\r\n this.applyShareDBOperation(op);\r\n }\r\n\r\n this.editor.updateGenomicDataColorSchemeHandler({li: genomicDataColorScheme});\r\n\r\n for (const key_g of Object.keys(genomicDataMap)) {\r\n this.editor.genomicDataOverlayManager.genomicDataMap[key_g] =\r\n genomicDataMap[key_g];\r\n\r\n }\r\n\r\n for (const key_g of Object.keys(groupedGenomicDataMap)) {\r\n this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key_g] =\r\n groupedGenomicDataMap[key_g];\r\n const data = groupedGenomicDataMap[key_g];\r\n if(data.length !== 1){\r\n console.log(\"Grouped genomic data expected to be of length 1 (from sync)\");\r\n }\r\n data.forEach((profileId: any) => {this.editor.addToProfiles(profileId)});\r\n }\r\n\r\n for (const key_g of Object.keys(visDataMap)) {\r\n this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key_g] =\r\n visDataMap[key_g];\r\n this.editor.adjustVisibilityShareDB(key_g, visDataMap[key_g]);\r\n \r\n }\r\n\r\n //Does not seem necessary for not but just for sake of completeness\r\n this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount;\r\n\r\n this.editor.genomicDataOverlayManager.showGenomicData((node: any) => {\r\n this.editor.resizeElements(node);\r\n });\r\n this.editor.genomicDataOverlayManager.notifyObservers();\r\n this.editor.cy.style().update();\r\n this.editor.cy.fit(50);\r\n };\r\n\r\n /*\r\n * Initialize event listeners for any operation coming from shareDB\r\n *\r\n */\r\n initSharedDocEventHandlers () {\r\n\r\n var self = this;\r\n\r\n //Setup event handlers for maps\r\n var nodeAddRemoveHandler = function (op) {\r\n self.editor.shareDBNodeAddRemoveEventCallBack(op);\r\n };\r\n\r\n var edgeAddRemoveHandler = function (op) {\r\n self.editor.shareDBEdgeAddRemoveEventCallBack(op);\r\n };\r\n\r\n var genomicDataAddRemoveHandler = function (op) {\r\n self.editor.shareDBGenomicDataHandler(op);\r\n };\r\n\r\n var genomicDataVisibilityChangeHandler = function (op) {\r\n self.editor.shareDBGenomicDataVisibilityHandler(op);\r\n self.checkShareDBGenomicData();\r\n };\r\n\r\n var genomicDataGroupChangeHandler = function (op) {\r\n self.editor.shareDBGenomicDataGroupChangeHandler(op);\r\n };\r\n\r\n var updateElementHandler = function (op) {\r\n self.editor.updateElementCallback(op);\r\n };\r\n\r\n var updateLayoutPropsHandler = function (op) {\r\n self.editor.updateLayoutPropertiesCallback(op);\r\n };\r\n\r\n var updateGlobalOptionsHandler = function (op) {\r\n self.editor.changeGlobalOptions(op);\r\n };\r\n\r\n var updateGenomicDataColorSchemeHandler = function (op) {\r\n self.editor.updateGenomicDataColorSchemeHandler(op);\r\n }\r\n\r\n\r\n //Event listeners for maps\r\n this.doc.on('op', function (op, source) {\r\n for (var i = 0; i < op.length; i++) {\r\n var handleOp = op[i];\r\n var path = handleOp.p[0];\r\n var isReplaceEvent = self.isShareDBReplaceEvent(handleOp);\r\n\r\n if( path === self.CHAT_APPLICATION_NAME){\r\n self.editor.updateMessages( self.doc.data[self.CHAT_APPLICATION_NAME][handleOp.p[1]]);\r\n }\r\n if( path === self.CHAT_MESSAGES_COUNT){\r\n self.editor.updateMessageCount(self.doc.data[self.CHAT_MESSAGES_COUNT]);\r\n }\r\n \r\n if( path === self.PATHWAY_TITLE ){\r\n self.editor.updatePathwayTitleBack( self.doc.data[self.PATHWAY_TITLE][0])\r\n }\r\n\r\n if (!isReplaceEvent) {\r\n if (path === self.NODEMAP_NAME) {\r\n nodeAddRemoveHandler(handleOp);\r\n }\r\n else if (path === self.EDGEMAP_NAME) {\r\n edgeAddRemoveHandler(handleOp);\r\n }\r\n else if (path === self.GENOMIC_DATA_MAP_NAME) {\r\n genomicDataAddRemoveHandler(handleOp);\r\n }\r\n else if (path === self.VISIBLE_GENOMIC_DATA_MAP_NAME) {\r\n genomicDataVisibilityChangeHandler(handleOp);\r\n }\r\n else if (path === self.GENOMIC_DATA_GROUP_NAME) {\r\n genomicDataGroupChangeHandler(handleOp);\r\n }\r\n }\r\n else { //Then it is update event\r\n if (path === self.NODEMAP_NAME) {\r\n updateElementHandler(handleOp);\r\n }\r\n else if (path === self.EDGEMAP_NAME) {\r\n updateElementHandler(handleOp);\r\n }\r\n else if (path === self.LAYOUT_PROPS_NAME) {\r\n updateLayoutPropsHandler(handleOp);\r\n }\r\n else if (path === self.GLOBAL_OPTS_NAME) {\r\n updateGlobalOptionsHandler(handleOp);\r\n }\r\n else if (path === self.GENOMIC_DATA_COLOR_SCHEME_NAME) {\r\n updateGenomicDataColorSchemeHandler(handleOp);\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n /*\r\n * Make sure that genomic cloud data is syncronized\r\n */\r\n checkShareDBGenomicData () {\r\n\r\n var self = this;\r\n var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME];\r\n var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\r\n var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME];\r\n var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\r\n\r\n for (var key in genomicDataMap) {\r\n this.editor.genomicDataOverlayManager.genomicDataMap[key] =\r\n genomicDataMap[key];\r\n }\r\n\r\n for (var key in visDataMap) {\r\n this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key] =\r\n visDataMap[key];\r\n }\r\n\r\n for (var key in groupedGenomicDataMap) {\r\n this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key] =\r\n groupedGenomicDataMap[key];\r\n }\r\n this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount;\r\n this.editor.genomicDataOverlayManager.showGenomicData((node: any) => {\r\n this.editor.resizeElements(node);\r\n });\r\n this.editor.genomicDataOverlayManager.notifyObservers();\r\n };\r\n \r\n /*\r\n * Gets the first empty index from the shared document\r\n * genomic data group count and increments counter by 1\r\n *\r\n */\r\n\r\n getEmptyGroupID() {\r\n var returnCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT];\r\n this.incrementShareDBGroupCount();\r\n return returnCount;\r\n };\r\n\r\n /*\r\n * Gets the first empty index from the shared document\r\n * Initializes & inserts a new genomic data\r\n * by group id or group name\r\n *\r\n */\r\n groupGenomicData(cancerNames, inGroupId) {\r\n var genomicGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME];\r\n var genomicVisMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME];\r\n\r\n var groupID = \"\" + inGroupId;\r\n var currentGroup = [];\r\n\r\n if (genomicGroupMap.hasOwnProperty(groupID))\r\n currentGroup = _.clone(genomicGroupMap[groupID]);\r\n\r\n for (var i in cancerNames) {\r\n if (!genomicVisMap.hasOwnProperty(cancerNames[i]))\r\n currentGroup.push(cancerNames[i]);\r\n }\r\n\r\n // If group id already exists change existing object\r\n if (genomicGroupMap.hasOwnProperty(groupID)) {\r\n this.updateShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup);\r\n }\r\n else {\r\n //Insert new group\r\n this.insertShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup);\r\n }\r\n\r\n };\r\n\r\n //Clears genomic data on shared document\r\n clearGenomicData() {\r\n this.clearShareDBGenomicData();\r\n };\r\n\r\n addGenomicData(geneData) {\r\n var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME];\r\n\r\n //Iterate over all genmoic data which is mapped by geneSymbol to list of alteration values\r\n //that are also mapped by cancer name and associated value\r\n var ops = [];\r\n for (var geneSymbol in geneData) {\r\n var genomicMapEntry = {};\r\n if (genomicMap.hasOwnProperty(geneSymbol))\r\n genomicMapEntry = _.clone(genomicMap[geneSymbol]);\r\n\r\n for (var cancerType in geneData[geneSymbol]) {\r\n if (!(cancerType in genomicMapEntry))\r\n genomicMapEntry[cancerType] = parseInt(geneData[geneSymbol][cancerType]).toFixed(2);\r\n }\r\n ops.push({\r\n p: [this.GENOMIC_DATA_MAP_NAME, geneSymbol],\r\n oi: genomicMapEntry\r\n });\r\n }\r\n this.applyShareDBOperation(ops);\r\n };\r\n\r\n addGenomicVisibilityData(visMap) {\r\n var ops = [];\r\n for (var cancerStudy in visMap) {\r\n ops.push({\r\n p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, cancerStudy],\r\n oi: visMap[cancerStudy]\r\n });\r\n }\r\n this.applyShareDBOperation(ops);\r\n };\r\n\r\n changeVisibility(nodesToHide, isHidden) {\r\n var self = this;\r\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\r\n\r\n nodesToHide.forEach(function (ele) {\r\n var nodeID = ele.id();\r\n if (nodeMap.hasOwnProperty(nodeID)) {\r\n var realTimeNode = nodeMap[nodeID];\r\n realTimeNode.isHidden = isHidden;\r\n self.updateShareDBObject(self.NODEMAP_NAME, nodeID, realTimeNode);\r\n }\r\n });\r\n };\r\n\r\n changeHighlight(elementsToHighlight, isHighlighted) {\r\n var self = this;\r\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\r\n var edgeMap = self.doc.data[this.EDGEMAP_NAME];\r\n\r\n elementsToHighlight.forEach(function (ele) {\r\n var elementID = ele.id();\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var realTimeNode = nodeMap[elementID];\r\n realTimeNode.isHighlighted = isHighlighted;\r\n self.updateShareDBObject(self.NODEMAP_NAME, elementID, realTimeNode);\r\n }\r\n if (edgeMap.hasOwnProperty(elementID)) {\r\n var realTimeEdge = edgeMap[elementID];\r\n realTimeEdge.isHighlighted = isHighlighted;\r\n self.updateShareDBObject(self.EDGEMAP_NAME, elementID, realTimeEdge);\r\n }\r\n });\r\n };\r\n\r\n addNewNode(nodeData, posData) {\r\n var realTimeGeneratedID = this.getCustomObjId();\r\n var params = {\r\n name: nodeData.name,\r\n type: nodeData.type,\r\n id: realTimeGeneratedID,\r\n parent: nodeData.parent,\r\n w: nodeData.w,\r\n h: nodeData.h,\r\n minWidth: nodeData.minWidth,\r\n minWidthBiasLeft: nodeData.minWidthBiasLeft,\r\n minWidthBiasRight: nodeData.minWidthBiasRight,\r\n minHeight: nodeData.minHeight,\r\n minHeightBiasTop: nodeData.minHeightBiasTop,\r\n minHeightBiasBottom: nodeData.minHeightBiasBottom\r\n };\r\n\r\n //Ensures new node is compatible with the other nodes\r\n var newNode = this.nodeInitializer(params);\r\n if (posData) {\r\n newNode.x = posData.x;\r\n newNode.y = posData.y;\r\n }\r\n this.insertShareDBObject(this.NODEMAP_NAME, realTimeGeneratedID, newNode);\r\n };\r\n\r\n addNewEdge(edgeData) {\r\n var realTimeGeneratedID = this.getCustomObjId();\r\n var params = {\r\n type: edgeData.type,\r\n id: realTimeGeneratedID,\r\n source: edgeData.source,\r\n target: edgeData.target,\r\n pubmedIDs: edgeData.pubmedIDs,\r\n name: edgeData.name,\r\n anchorPoints: edgeData.anchorPoints\r\n };\r\n\r\n //Ensures new edge is compatible with the other edge\r\n var newEdge = this.edgeInitializer(params);\r\n this.insertShareDBObject(this.EDGEMAP_NAME, realTimeGeneratedID, newEdge);\r\n };\r\n\r\n reconnectEdge = function(sourceID, targetID, edgeData) {\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n var edge = edgeMap[edgeData.id];\r\n var edgeID = edge.id;\r\n\r\n edge.source = sourceID;\r\n edge.target = targetID;\r\n\r\n if(edgeMap.hasOwnProperty(edgeID)) {\r\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, edge);\r\n }\r\n else {\r\n throw new Error('Element does not exist in Real Time');\r\n }\r\n };\r\n\r\n\r\n removeElement (elementID) {\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n this.deleteShareDBObject(this.NODEMAP_NAME, elementID);\r\n }\r\n else if (edgeMap.hasOwnProperty(elementID)) {\r\n this.deleteShareDBObject(this.EDGEMAP_NAME, elementID);\r\n }\r\n else {\r\n throw new Error('Element does not exist in Real Time');\r\n }\r\n };\r\n\r\n moveElement (ele) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n var elementID = ele.id();\r\n var newPos = ele.position();\r\n\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.x = newPos.x;\r\n tmpNode.y = newPos.y;\r\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n };\r\n\r\n //This function is used for movements of all selected elements wrt alignment selected\r\n changeElementsPositionByAlignment (coll) {\r\n var self = this;\r\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\r\n\r\n coll.forEach(function (ele) {\r\n var elementID = ele.node.id();\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.x = ele.nextPosition.x;\r\n tmpNode.y = ele.nextPosition.y;\r\n self.updateShareDBObject(self.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n });\r\n };\r\n\r\n resizeElement (ele, previousWidth, previousHeight) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n var elementID = ele.id();\r\n var newWidth = ele.width();\r\n var newHeight = ele.height();\r\n var currentX = ele.position('x');\r\n var currentY = ele.position('y');\r\n\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.x = currentX + newWidth - previousWidth;\r\n tmpNode.y = currentY + newHeight - previousHeight;\r\n tmpNode.w = newWidth;\r\n tmpNode.h = newHeight;\r\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n };\r\n\r\n setSizeOfElement (ele, newWidth, newHeight) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n var elementID = ele.id();\r\n\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.w = newWidth;\r\n tmpNode.h = newHeight;\r\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n };\r\n\r\n resizeCompound (ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n var elementID = ele.id();\r\n var currentX = ele.position('x');\r\n var currentY = ele.position('y');\r\n\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.x = currentX;\r\n tmpNode.y = currentY;\r\n tmpNode.minWidth = minWidth;\r\n tmpNode.minWidthBiasLeft = minWidthBiasLeft;\r\n tmpNode.minWidthBiasRight = minWidthBiasRight;\r\n tmpNode.minHeight = minHeight;\r\n tmpNode.minHeightBiasTop = minHeightBiasTop;\r\n tmpNode.minHeightBiasBottom = minHeightBiasBottom;\r\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n };\r\n\r\n changeNodePositionsShareDB (nodes) {\r\n var self = this;\r\n var nodeMap = self.doc.data[self.NODEMAP_NAME];\r\n\r\n nodes.forEach(function (ele) {\r\n var nodeID = ele.id();\r\n if (nodeMap.hasOwnProperty(nodeID)) {\r\n var realTimeNode = nodeMap[nodeID];\r\n realTimeNode.x = ele.position('x');\r\n realTimeNode.y = ele.position('y');\r\n self.updateShareDBObject(self\r\n .NODEMAP_NAME, nodeID, realTimeNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n });\r\n };\r\n\r\n changeHighlightInvalidGenes (nodeIDs, isInvalid) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n\r\n //TODO check compound operation inside or outside of for ?\r\n for (var i in nodeIDs) {\r\n var nodeID = nodeIDs[i];\r\n if (nodeMap.hasOwnProperty(nodeID)) {\r\n var collaborativeNode = nodeMap[nodeID];\r\n collaborativeNode.isInvalidGene = isInvalid;\r\n this.updateShareDBObject(this.NODEMAP_NAME, nodeID, collaborativeNode);\r\n }\r\n }\r\n\r\n };\r\n\r\n addPubmedIDs (edgeID, pubmedIDs) {\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n\r\n\r\n if (edgeMap.hasOwnProperty(edgeID)) {\r\n var tmpEdge = edgeMap[edgeID];\r\n var nonDuplicateArray = [];\r\n for (var i = 0; i < pubmedIDs.length; i++) {\r\n if (tmpEdge.pubmedIDs.indexOf(pubmedIDs[i]) < 0) {\r\n nonDuplicateArray.push(pubmedIDs[i]);\r\n }\r\n }\r\n tmpEdge.pubmedIDs = tmpEdge.pubmedIDs.concat(nonDuplicateArray);\r\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\r\n }\r\n else {\r\n throw new Error('Edge does not exist in real time !!! ');\r\n }\r\n };\r\n\r\n removePubmedID(edgeID, pubmedIDs) {\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n\r\n if (edgeMap.hasOwnProperty(edgeID)) {\r\n var tmpEdge = edgeMap[edgeID];\r\n var removedIndices = [];\r\n for (var i = 0; i < pubmedIDs.length; i++) {\r\n var tmpID = pubmedIDs[i];\r\n var index = tmpEdge.pubmedIDs.indexOf(tmpID);\r\n if (index >= 0) {\r\n removedIndices.push(index);\r\n }\r\n }\r\n for (var i = 0; i < removedIndices.length; i++) {\r\n tmpEdge.pubmedIDs.remove(removedIndices[i]);\r\n }\r\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\r\n\r\n }\r\n else {\r\n throw new Error('Edge does not exist in real time !!! ');\r\n }\r\n };\r\n\r\n updateEdgeAnchorPoints(edgeID, anchorPointsArray, edgeCurveStyle) {\r\n\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n \r\n if (edgeMap.hasOwnProperty(edgeID)) {\r\n var tmpEdge = edgeMap[edgeID];\r\n tmpEdge.anchorPoints = anchorPointsArray;\r\n tmpEdge.edgeCurveStyle = edgeCurveStyle;\r\n this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge);\r\n }\r\n else {\r\n throw new Error('Edge does not exist in real time !!! ');\r\n }\r\n };\r\n\r\n changeName(ele, newName) {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n\r\n var elementID = ele.id();\r\n\r\n if (ele.isNode()) {\r\n if (nodeMap.hasOwnProperty(elementID)) {\r\n var tmpNode = nodeMap[elementID];\r\n tmpNode.name = newName;\r\n this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode);\r\n }\r\n else {\r\n throw new Error('Element does not exist in nodes !!! ');\r\n }\r\n }\r\n else {\r\n if (edgeMap.hasOwnProperty(elementID)) {\r\n var tmpEdge = edgeMap[elementID];\r\n tmpEdge.name = newName;\r\n this.updateShareDBObject(this.EDGEMAP_NAME, elementID, tmpEdge);\r\n }\r\n else {\r\n throw new Error('Element does not exist in edges !!! ');\r\n }\r\n }\r\n };\r\n\r\n changeParent(rootNode, newParentId, connectedEdges) {\r\n var self = this;\r\n var nodeLookupTable = {};\r\n\r\n function traverseFromRoot(rootNode, parId) {\r\n /*\r\n remove outermost node,\r\n create new real time node with given parentId,\r\n pass id of this real time node to children,\r\n repeat in a recursive manner\r\n after that restore the edges that dissapear by removed nodes\r\n during change parent\r\n */\r\n\r\n var refNode = rootNode.nodeRef;\r\n var children = rootNode.children;\r\n var newParentId = parId;\r\n\r\n if (refNode) {\r\n var refNodeId = refNode.id();\r\n var nodeData = refNode.data();\r\n var posData = refNode.position();\r\n var currentWidth = refNode.data('w');\r\n var currentHeight = refNode.data('h');\r\n\r\n var newNodeData =\r\n {\r\n name: nodeData.name,\r\n type: nodeData.type,\r\n x: posData.x,\r\n y: posData.y,\r\n w: currentWidth,\r\n h: currentHeight,\r\n parent: -1\r\n };\r\n\r\n if (parId) {\r\n newNodeData.parent = parId;\r\n }\r\n\r\n self.removeElement(refNodeId);\r\n var newNode = self.nodeInitializer(newNodeData);\r\n var newNodeId = newNode.id;\r\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\r\n newParentId = newNodeId;\r\n nodeLookupTable[refNodeId] = newNodeId;\r\n }\r\n\r\n for (const childNode of children) {\r\n traverseFromRoot(childNode, newParentId);\r\n }\r\n }\r\n\r\n //Begin traversing from given root node\r\n traverseFromRoot(rootNode, newParentId);\r\n\r\n //Restore edges that dissapear by the change parent operation\r\n //TODO compound operations ?\r\n connectedEdges.forEach(function (edge, index) {\r\n var edgeData = edge.data();\r\n self.removeElement(edge.id());\r\n\r\n var newSource = nodeLookupTable[edgeData.source];\r\n var newTarget = nodeLookupTable[edgeData.target];\r\n\r\n if (newSource) {\r\n edgeData.source = newSource;\r\n }\r\n\r\n if (newTarget) {\r\n edgeData.target = newTarget;\r\n }\r\n\r\n self.addNewEdge(edgeData);\r\n });\r\n };\r\n\r\n removeAllElements() {\r\n var nodeMap = this.doc.data[this.NODEMAP_NAME];\r\n var edgeMap = this.doc.data[this.EDGEMAP_NAME];\r\n var ops = [];\r\n\r\n //Remove all real time nodes\r\n for (const key of Object.keys(nodeMap)) {\r\n ops.push({\r\n p: [this.NODEMAP_NAME, key],\r\n od: nodeMap[key]\r\n });\r\n }\r\n\r\n //Remove all real time edges\r\n for (const key of Object.keys(edgeMap)) {\r\n ops.push({\r\n p: [this.EDGEMAP_NAME, key],\r\n od: edgeMap[key]\r\n });\r\n }\r\n\r\n this.applyShareDBOperation(ops);\r\n };\r\n\r\n loadGraph(nodes, edges) {\r\n var self = this;\r\n this.removeAllElements();\r\n\r\n //Function that traverses graph tree recursively.\r\n var oldIdNewIdMap = {};\r\n\r\n function traverseTree(node, newParentId) {\r\n node.data.x = node.position.x;\r\n node.data.y = node.position.y;\r\n\r\n //Update parent !\r\n if (newParentId) {\r\n var parent = node.data.parent;\r\n if (parent) {\r\n node.data.parent = newParentId;\r\n }\r\n }\r\n\r\n //Create new real time node\r\n var newNodeId = self.getCustomObjId();\r\n var params = node.data;\r\n oldIdNewIdMap[params.id] = newNodeId;\r\n var newNode = self.nodeInitializer(params);\r\n newNode.id = newNodeId;\r\n\r\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\r\n\r\n //If node has children recursively traverse sub graphs and update parent field of child nodes\r\n if (node.children.length > 0) {\r\n for (const tmpNode of node.children) {\r\n traverseTree(tmpNode, newNodeId);\r\n }\r\n }\r\n }\r\n\r\n //Create graph hierarchy from given list of flat nodes\r\n var tree = GraphUtilities.createGraphHierarchyRealTime(nodes);\r\n //Traverse from root nodes of tree\r\n for (const rootLevelNode of tree) {\r\n traverseTree(rootLevelNode, undefined);\r\n }\r\n\r\n /*\r\n Create real time edges, update the source and target fields, since new ids will be generated for the nodes in\r\n real time\r\n */\r\n for (const edge of edges) {\r\n edge.data.source = oldIdNewIdMap[edge.data.source];\r\n edge.data.target = oldIdNewIdMap[edge.data.target];\r\n\r\n var edgeCurveStyle = \"bezier\";\r\n if (edge.data.bendPointPositions && edge.data.bendPointPositions.length > 0) {\r\n edge.data['anchorPoints'] = edge.data['bendPointPositions'];\r\n delete edge.data['bendPointPositions'];\r\n edgeCurveStyle = \"segments\";\r\n }\r\n else if (edge.data.controlPointPositions && edge.data.controlPointPositions.length > 0) {\r\n edge.data['anchorPoints'] = edge.data['controlPointPositions'];\r\n delete edge.data['controlPointPositions'];\r\n edgeCurveStyle = \"unbundled-bezier\";\r\n }\r\n\r\n var params = edge.data;\r\n params.edgeCurveStyle = edgeCurveStyle;\r\n var newEdgeID = self.getCustomObjId();\r\n params.id = newEdgeID;\r\n \r\n var newEdge = self.edgeInitializer(params);\r\n self.insertShareDBObject(self.EDGEMAP_NAME, newEdgeID, newEdge);\r\n }\r\n };\r\n\r\n mergeGraph (nodes, edges) {\r\n var self = this;\r\n var nodeMap = self.doc.data[this.NODEMAP_NAME];\r\n\r\n var realTimeNodeMap = nodeMap;\r\n var realTimeNodeLookupTable = {};\r\n var realTimeNodeNameLookupTable = {};\r\n var oldIdNewIdMap = {};\r\n\r\n //Create lookup table for real time nodes\r\n //items are stored in an array in the resulting array of nodeMap.items()\r\n // [0] - id, [1] - object\r\n for (var i in realTimeNodeMap) {\r\n var nodeMapItem = realTimeNodeMap[i];\r\n realTimeNodeLookupTable[nodeMapItem.id] = nodeMapItem;\r\n realTimeNodeNameLookupTable[nodeMapItem.name] = nodeMapItem;\r\n }\r\n\r\n //Recursive traverse definition\r\n function traverseTree(node, newParentId) {\r\n //Search by name !\r\n //We have not found a node that exist in the graph, add normally\r\n if (!(node.data.name in realTimeNodeNameLookupTable)) {\r\n node.data.x = node.position.x;\r\n node.data.y = node.position.y;\r\n\r\n //Update parent !\r\n if (newParentId) {\r\n var parent = node.data.parent;\r\n if (parent) {\r\n node.data.parent = newParentId;\r\n }\r\n }\r\n\r\n //Create new real time node\r\n var newNodeId = self.getCustomObjId();\r\n oldIdNewIdMap[node.data.id] = newNodeId;\r\n var newNode = self.nodeInitializer(node.data);\r\n newNode.id = newNodeId;\r\n self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode);\r\n\r\n //If node has children recursively traverse sub graphs and update parent field of child nodes\r\n if (node.children.length > 0) {\r\n for (const tmpNode of node.children) {\r\n traverseTree(tmpNode, newNodeId);\r\n }\r\n }\r\n }\r\n // At this point there exists another node in the graph with the same name as 'node'\r\n // we need to update parent field of children of this node if any\r\n else {\r\n var sameNameNode = realTimeNodeNameLookupTable[node.data.name];\r\n var sameNodeId = sameNameNode.id;\r\n oldIdNewIdMap[node.data.id] = sameNodeId;\r\n\r\n //If node has children recursively traverse sub graphs and update parent field of child nodes\r\n if (node.children.length > 0) {\r\n for (const tmpNode of node.children) {\r\n traverseTree(tmpNode, sameNodeId);\r\n }\r\n }\r\n }\r\n }\r\n\r\n //Traverse from root nodes of tree\r\n var tree = GraphUtilities.createGraphHierarchyRealTime(nodes);\r\n for (const rootLevelNode of tree) {\r\n traverseTree(rootLevelNode, rootLevelNode.data.id);\r\n }\r\n\r\n /*\r\n Create real time edges, update the source and target fields, since new ids will be generated for the nodes in\r\n real time\r\n */\r\n var ops = [];\r\n for (const edge of edges) {\r\n edge.data.source = oldIdNewIdMap[edge.data.source];\r\n edge.data.target = oldIdNewIdMap[edge.data.target];\r\n var newEdge = self.edgeInitializer(edge.data);\r\n var newEdgeID = this.getCustomObjId();\r\n newEdge.id = newEdgeID;\r\n ops.push({\r\n p: [self.EDGEMAP_NAME, newEdgeID],\r\n oi: newEdge\r\n });\r\n }\r\n self.applyShareDBOperation(ops);\r\n };\r\n\r\n updateLayoutProperties (newLayoutProperties) {\r\n this.updateShareDBLayoutProperties(newLayoutProperties);\r\n };\r\n\r\n updateGlobalOptions (newOptions) {\r\n this.updateShareDBGlobalOptions(newOptions);\r\n };\r\n\r\n updateGenomicDataOverlayColorScheme(newColorScheme: IColorValueMap) {\r\n this.updateShareDBGenomicDataOverlayColorScheme(newColorScheme);\r\n }\r\n\r\n /*\r\n * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child\r\n * relationship by a field 'parent' which represents to the id of the parent node This function is specific\r\n * for the needs of TCGA Pathway Curation Tool 04/07/2016\r\n *\r\n * @param nodes {array}: flat list of nodes of a graph\r\n * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes\r\n * of each node in the returned array.\r\n * a node in corresponding level.\r\n *\r\n * */\r\n createGraphHierarchy (nodes) {\r\n //Some arrays and maps for creating graph hierarchy\r\n var tree = [];\r\n var mappedArr = {};\r\n\r\n // First map the nodes of the array to an object -> create a hash table.\r\n for (var i = 0, len = nodes.length; i < len; i++) {\r\n var arrElem = nodes[i];\r\n mappedArr[arrElem.data.id] = arrElem;\r\n mappedArr[arrElem.data.id].children = [];\r\n }\r\n\r\n for (const id of Object.keys(mappedArr)) {\r\n var mappedElem = mappedArr[id];\r\n\r\n // If the element is not at the root level, add it to its parent array of children.\r\n if (mappedElem.data.parent) {\r\n mappedArr[mappedElem.data.parent].children.push(mappedElem);\r\n }\r\n // If the element is at the root level, add it to first level elements array.\r\n else {\r\n tree.push(mappedElem);\r\n }\r\n }\r\n return tree;\r\n };\r\n\r\n //Makes sure that edge is compatible with edges in shared document\r\n edgeInitializer (params) {\r\n var edge: any = {};\r\n edge.id = params.id || this.getCustomObjId();\r\n edge.type = params.type || \"undefined\";\r\n edge.source = params.source || \"undefined\";\r\n edge.target = params.target || \"undefined\";\r\n edge.name = params.name || \"\";\r\n edge.isHighlighted = params.isHighlighted || false;\r\n edge.anchorPoints = params.anchorPoints || [];\r\n edge.edgeCurveStyle = params.edgeCurveStyle || \"bezier\"\r\n\r\n if (params.pubmedIDs) {\r\n if (edge.pubmedIDs == undefined) {\r\n edge.pubmedIDs = [];\r\n }\r\n if(params.pubmedIDs.length > 0)\r\n edge.pubmedIDs.push(params.pubmedIDs);\r\n }\r\n else {\r\n edge.pubmedIDs = [];\r\n }\r\n\r\n if (params.anchorPoints) {\r\n if (edge.anchorPoints == undefined) {\r\n edge.anchorPoints = [];\r\n }\r\n // legacy workaround\r\n if (Array.isArray(params.anchorPoints[0])) {\r\n edge.anchorPoints = params.anchorPoints[0];\r\n }\r\n else {\r\n edge.anchorPoints = params.anchorPoints;\r\n }\r\n }\r\n else {\r\n edge.anchorPoints = [];\r\n }\r\n return edge;\r\n };\r\n\r\n //Makes sure that node is compatible with nodes in shared document\r\n nodeInitializer(params) {\r\n var node: any = {};\r\n node.id = params.id || this.getCustomObjId();\r\n node.name = params.name || \"undefined\";\r\n node.type = params.type || \"undefined\";\r\n node.parent = params.parent || \"undefined\";\r\n node.x = params.x || \"undefined\";\r\n node.y = params.y || \"undefined\";\r\n node.w = params.w || \"undefined\";\r\n node.h = params.h || \"undefined\";\r\n node.minWidth = params.minWidth || 0;\r\n node.minWidthBiasLeft = params.minWidth || 0;\r\n node.minWidthBiasRight = params.minWidth || 0;\r\n node.minHeight = params.minWidth || 0;\r\n node.minHeightBiasTop = params.minWidth || 0;\r\n node.minHeightBiasBottom = params.minWidth || 0;\r\n node.isHidden = params.isHidden || false;\r\n node.isInvalidGene = params.isInvalidGene || false;\r\n node.isHighlighted = params.isHighlighted || false;\r\n return node;\r\n };\r\n\r\n //Makes sure that layout properties is compatible with layout properties in shared document\r\n layoutPropertiesInitializer (params) {\r\n var layoutProperties: any = {};\r\n layoutProperties.name = params.name || 'undefined';\r\n layoutProperties.nodeRepulsion = params.nodeRepulsion || 'undefined';\r\n // this.nodeOverlap = params.nodeOverlap || 'undefined';\r\n layoutProperties.idealEdgeLength = params.idealEdgeLength || 'undefined';\r\n layoutProperties.edgeElasticity = params.edgeElasticity || 'undefined';\r\n layoutProperties.nestingFactor = params.nestingFactor || 'undefined';\r\n layoutProperties.gravity = params.gravity || 'undefined';\r\n layoutProperties.numIter = params.numIter || 'undefined';\r\n layoutProperties.tile = params.tile || 'undefined';\r\n layoutProperties.animate = params.animate || 'undefined';\r\n layoutProperties.randomize = params.randomize || false;\r\n layoutProperties.gravityRangeCompound = params.gravityRangeCompound || 'undefined';\r\n layoutProperties.gravityCompound = params.gravityCompound || 'undefined';\r\n layoutProperties.gravityRange = params.gravityRange || 'undefined';\r\n layoutProperties.tilingPaddingVertical = params.tilingPaddingVertical || 'undefined';\r\n layoutProperties.tilingPaddingHorizontal = params.tilingPaddingHorizontal || 'undefined';\r\n layoutProperties.initialEnergyOnIncremental = params.initialEnergyOnIncremental || 'undefined';\r\n return layoutProperties;\r\n };\r\n\r\n //Makes sure that global options is compatible with global options in shared document\r\n globalOptionsInitializer (params) {\r\n var globalOptions: any = {};\r\n globalOptions.zoomLevel = params.zoomLevel || 'undefined';\r\n globalOptions.panLevel = params.panLevel || 'undefined';\r\n return globalOptions;\r\n };\r\n\r\n //Create unique ID for elements\r\n getCustomObjId () {\r\n // see http://stackoverflow.com/a/8809472\r\n // we need to take care of our own IDs because the ones automatically generated by cytoscape (also UUID)\r\n // don't comply with xsd:SID type that must not begin with a number\r\n // Public Domain/MIT\r\n var d = Date.now();\r\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\r\n d += performance.now(); //use high-precision timer if available\r\n }\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = (d + Math.random() * 16) % 16 | 0;\r\n d = Math.floor(d / 16);\r\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n };\r\n\r\n getParam (urlParam) {\r\n const regExp = new RegExp(urlParam + '=(.*?)($|&)', 'g');\r\n let match: any = window.location.search.match(regExp);\r\n if (match && match.length) {\r\n match = match[0];\r\n match = match.replace(urlParam + '=', '').replace('&', '');\r\n } else {\r\n match = null;\r\n }\r\n return match;\r\n };\r\n\r\n}\r\n","import autobind from \"autobind-decorator\";\r\nimport { action, makeObservable, observable } from \"mobx\";\r\nimport LayoutProperties, { ILayoutProperties } from \"../modals/LayoutProperties\";\r\nimport { ChatMessageMetaData, IColorValueMap, IProfileMetaData } from \"../ui/react-pathway-mapper\";\r\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\r\nimport SVGExporter from \"../utils/SVGExporter\";\r\nimport GenomicDataOverlayManager from \"./GenomicDataOverlayManager\";\r\nimport ShareDBManager from \"./ShareDBManager\";\r\n\r\nconst _ = require('lodash');\r\n\r\nexport default class EditorActionsManager {\r\n\r\n public static defaultLayoutProperties: ILayoutProperties =\r\n {\r\n name: 'fcose',\r\n nodeRepulsion: 4500,\r\n idealEdgeLength: 50,\r\n edgeElasticity: 0.45,\r\n nestingFactor: 0.1,\r\n gravity: 0.25,\r\n numIter: 2500,\r\n tile: true,\r\n animate: true,\r\n randomize: false,\r\n gravityRangeCompound: 1.5,\r\n // Gravity force (constant) for compounds\r\n gravityCompound: 1.0,\r\n // Gravity range (constant)\r\n gravityRange: 3.8,\r\n // Amount of vertical space to put between degree zero nodes during tiling (can also be a function)\r\n tilingPaddingVertical: 10,\r\n // Amount of horizontal space to put between degree zero nodes during tiling (can also be a function)\r\n tilingPaddingHorizontal: 10,\r\n // Initial cooling factor for incremental layout\r\n initialEnergyOnIncremental: 0.5,\r\n animationDuration: 2000,\r\n animationEasing: 'cubic-bezier(0.17,0.72,0.41,0.98)',\r\n nodeDimensionsIncludeLabels: true\r\n };\r\n\r\n public cy: any;\r\n public genomicDataOverlayManager: GenomicDataOverlayManager;\r\n public edgeEditing: any;\r\n public selectedNodeStack: any;\r\n public layoutProperties: ILayoutProperties;\r\n\r\n private FIT_CONSTANT: number;\r\n private observers: any[];\r\n private svgExporter: SVGExporter;\r\n private undoRedoManager: any;\r\n private isCbioPortal: boolean;\r\n private isCollaborative: boolean;\r\n private shareDBManager: ShareDBManager;\r\n private portalAccessor: CBioPortalAccessor;\r\n private viewUtilities: any;\r\n\r\n @observable\r\n private profiles: IProfileMetaData[];\r\n\r\n @observable\r\n private genomicDataOverlayColorScheme: IColorValueMap;\r\n\r\n private colorSchemeChangeCallback: (IColorValueMap) => void;\r\n private incrementChatMessageCountCallback: (number) => void;\r\n private newMessageCallback: (ChatMessageMetaData) => void;\r\n private updatePathwayTitleCallback: (string) => void;\r\n\r\n constructor(isCollaborative: boolean, shareDBManager: any, cyInst: any, isCBioPortal: boolean,\r\n undoRedoManager: any, portalAccessor: CBioPortalAccessor, profiles: IProfileMetaData[],\r\n genomicDataOverlayColorScheme: IColorValueMap, colorSchemeChangeCallback: (IColorValueMap) => void, incrementChatMessageCountCallback: (number) => void\r\n , newMessageCallback: (ChatMessageMetaData) => void, updatePathwayTitleCallback : (string) => void)\r\n {\r\n // Set cy instance and set real time manager reference if collaborative mode\r\n makeObservable(this);\r\n this.cy = cyInst;\r\n this.isCollaborative = isCollaborative;\r\n this.isCbioPortal = isCBioPortal;\r\n this.profiles = profiles;\r\n this.genomicDataOverlayColorScheme = genomicDataOverlayColorScheme;\r\n this.colorSchemeChangeCallback = colorSchemeChangeCallback;\r\n this.incrementChatMessageCountCallback = incrementChatMessageCountCallback;\r\n this.newMessageCallback = newMessageCallback;\r\n\r\n const edgeEditingOptions = {\r\n bendPositionsFunction: function(ele) {\r\n return ele.data('bendPointPositions');\r\n },\r\n // A function parameter to get control point positions, should return positions of control points\r\n controlPositionsFunction: function(ele) {\r\n return ele.data('controlPointPositions');\r\n },\r\n // whether the anchor editing operations are undoable (requires cytoscape-undo-redo.js)\r\n undoable: true,\r\n // the size of bend shape is obtained by multipling width of edge with this parameter\r\n anchorShapeSizeFactor: 6,\r\n // whether to start the plugin in the enabled state\r\n enabled: !this.isCbioPortal,\r\n \r\n handleReconnectEdge: this.isCollaborative ? \r\n this.reconnectEdge.bind(this) :\r\n undefined,\r\n\r\n enableMultipleAnchorRemovalOption: true\r\n };\r\n \r\n if(!this.isCbioPortal){\r\n this.edgeEditing = this.cy.edgeEditing(edgeEditingOptions);\r\n\r\n }\r\n this.portalAccessor = portalAccessor;\r\n if(this.isCollaborative) {\r\n this.shareDBManager = shareDBManager;\r\n }\r\n\r\n this.FIT_CONSTANT = 50;\r\n\r\n this.layoutProperties = _.clone(EditorActionsManager.defaultLayoutProperties);\r\n this.observers = [];\r\n this.genomicDataOverlayManager = new GenomicDataOverlayManager(this.cy);\r\n this.svgExporter = new SVGExporter(this.edgeEditing, this);\r\n\r\n this.selectedNodeStack = {};\r\n this.undoRedoManager = undoRedoManager;\r\n this.undoRedoManager.action(\"changePositions\", this.doChangePosition, this.undoChangePosition);\r\n this.undoRedoManager.action(\"changeNodeSize\", this.doChangeNodeSize, this.undoChangeNodeSize);\r\n this.undoRedoManager.action(\"changeCompoundSize\", this.doChangeCompoundSize, this.undoChangeCompoundSize);\r\n this.undoRedoManager.action(\"changeName\", this.doChangename, this.undoChangeName);\r\n this.undoRedoManager.action(\"hideNode\", this.doHide, this.undoHide);\r\n this.undoRedoManager.action(\"showAllNodes\", this.doShow, this.undoShow);\r\n // HighlightOthers is the type of highlight from the menu and by searching, while highlightInvalidGenes is for only invalid genes\r\n this.undoRedoManager.action(\"highlightInvalidGenes\", this.doHighlightInvalidGenes, this.undoHighlightInvalidGenes);\r\n this.undoRedoManager.action(\"removeHighlightInvalidGenes\", this.undoHighlightInvalidGenes, this.doHighlightInvalidGenes);\r\n this.undoRedoManager.action(\"highlightOthers\", this.doHighlight, this.undoHighlight);\r\n this.undoRedoManager.action(\"removeOtherHighlight\", this.undoHighlight, this.doHighlight);\r\n\r\n };\r\n\r\n @action.bound\r\n setProfile(index: number, profile: IProfileMetaData) {\r\n this.profiles[index] = profile;\r\n }\r\n\r\n @action.bound\r\n addProfile(profile: IProfileMetaData) {\r\n this.profiles.push(profile);\r\n }\r\n\r\n @action.bound\r\n removeProfiles() {\r\n this.profiles.length = 0;\r\n }\r\n\r\n @action.bound\r\n setGenomicDataOverlayColorScheme(scheme: IColorValueMap) {\r\n this.genomicDataOverlayColorScheme = scheme;\r\n }\r\n\r\n @autobind\r\n setViewUtilities(viewUtilitiesRef: any) {\r\n this.viewUtilities = viewUtilitiesRef;\r\n }\r\n\r\n getGenomicDataOverlayColorScheme() : IColorValueMap {\r\n return this.genomicDataOverlayColorScheme;\r\n }\r\n\r\n handleChangePositionByAlignment(movedNodeArr: any)\r\n {\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeElementsPositionByAlignment(movedNodeArr);\r\n else\r\n this.undoRedoManager.do(\"changePositions\", movedNodeArr)\r\n };\r\n\r\n /*\r\n * Undo redo for changing positions of nodes via programatically (node.position)\r\n * **/\r\n doChangePosition(movedNodes: any)\r\n {\r\n const newMovedNodes = [];\r\n\r\n for(let i = 0; i < movedNodes.length; i++)\r\n {\r\n const currentNodePosition =\r\n {\r\n x: movedNodes[i].node.position().x,\r\n y: movedNodes[i].node.position().y\r\n };\r\n newMovedNodes.push({node: movedNodes[i].node, oldPosition: currentNodePosition, nextPosition: movedNodes[i].nextPosition});\r\n movedNodes[i].node.position(movedNodes[i].nextPosition);\r\n }\r\n\r\n return newMovedNodes;\r\n };\r\n\r\n undoChangePosition(movedNodes: any)\r\n {\r\n var newMovedNodes = [];\r\n\r\n for(var i = 0; i < movedNodes.length; i++)\r\n {\r\n var currentNodePosition =\r\n {\r\n x: movedNodes[i].node.position().x,\r\n y: movedNodes[i].node.position().y\r\n };\r\n newMovedNodes.push({node: movedNodes[i].node, oldPosition: movedNodes[i].oldPosition, nextPosition: currentNodePosition});\r\n movedNodes[i].node.position(movedNodes[i].oldPosition);\r\n }\r\n\r\n return newMovedNodes;\r\n };\r\n\r\n\r\n getDBId(){\r\n return this.shareDBManager.doc.data[this.shareDBManager.WORK_ID];\r\n }\r\n updatePathwayTitleBack( pathwayTitle : string){\r\n this.updatePathwayTitleCallback( pathwayTitle);\r\n }\r\n updateMessages( message : ChatMessageMetaData ){\r\n this.newMessageCallback( message );\r\n }\r\n\r\n loadMessages( messages: ChatMessageMetaData[] ){\r\n for( const message of Object.values( messages) ){\r\n const newMessage = {\r\n username : message.username,\r\n message : message.message,\r\n id: message.id,\r\n userId: message.userId,\r\n date: message.date\r\n };\r\n this.newMessageCallback(newMessage);\r\n }\r\n setTimeout(this.updateChatBoxHeight,850 );\r\n }\r\n updateChatBoxHeight(){\r\n document.getElementById('chatBoxxheader').children[0].scrollTop = document.getElementById('chatBoxxheader').children[0].scrollHeight;\r\n }\r\n getMessageCount(){\r\n return this.shareDBManager.doc.data[this.shareDBManager.CHAT_MESSAGES_COUNT];\r\n }\r\n\r\n incrementMessageCount(){\r\n this.shareDBManager.incrementMessageCount();\r\n }\r\n\r\n addNewMessage( chatMessage : ChatMessageMetaData, chatMessageKey: number ){\r\n this.shareDBManager.addNewMessage( chatMessage, chatMessageKey );\r\n }\r\n\r\n changeNodePositionsByArrows(selectedNodes: any)\r\n {\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeNodePositionsShareDB(selectedNodes);\r\n //node-editing extension already deals for the movement in local mode\r\n };\r\n\r\n /*\r\n * Undo redo for changing size of nodes\r\n * **/\r\n doChangeNodeSize (args: any)\r\n {\r\n args.ele.data('w', args.newWidth);\r\n args.ele.data('h', args.newHeight);\r\n\r\n return args;\r\n };\r\n\r\n undoChangeNodeSize(args: any)\r\n {\r\n args.ele.data('w', args.oldWidth);\r\n args.ele.data('h', args.oldHeight);\r\n return args;\r\n };\r\n\r\n /*\r\n * Undo redo for changing size of compounds\r\n * **/\r\n doChangeCompoundSize(args: any)\r\n {\r\n args.ele.style('min-width', args.newMinWidth);\r\n args.ele.style('min-width-bias-left', args.newMinWidthBiasLeft);\r\n args.ele.style('min-width-bias-right', args.newMinWidthBiasRight);\r\n args.ele.style('min-height', args.newMinHeight);\r\n args.ele.style('min-height-bias-top', args.newMinHeightBiasTop);\r\n args.ele.style('min-height-bias-bottom', args.newMinHeightBiasBottom);\r\n\r\n return args;\r\n };\r\n\r\n undoChangeCompoundSize(args: any)\r\n {\r\n if (args.oldMinWidth == undefined)\r\n {\r\n args.ele.style('min-width', 0);\r\n args.ele.style('min-width-bias-left', 0);\r\n args.ele.style('min-width-bias-right', 0);\r\n\r\n }\r\n else {\r\n args.ele.style('min-width', args.oldMinWidth);\r\n args.ele.style('min-width-bias-left', args.oldMinWidthBiasLeft);\r\n args.ele.style('min-width-bias-right', args.oldMinWidthBiasRight);\r\n }\r\n if (args.oldMinHeight == undefined)\r\n {\r\n args.ele.style('min-height', 0);\r\n args.ele.style('min-height-bias-top', 0);\r\n args.ele.style('min-height-bias-bottom', 0);\r\n }\r\n else {\r\n args.ele.style('min-height', args.oldMinHeight);\r\n args.ele.style('min-height-bias-top', args.oldMinHeightBiasTop);\r\n args.ele.style('min-height-bias-bottom', args.oldMinHeightBiasBottom);\r\n }\r\n\r\n return args;\r\n };\r\n\r\n changeName(ele: any, newName: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.shareDBManager.changeName(ele, newName);\r\n }\r\n else\r\n {\r\n this.changeNameCy(ele, newName);\r\n }\r\n };\r\n\r\n changeNameCy(ele: any, newName: any)\r\n {\r\n var currentName = ele.data('name');\r\n var args = {ele: ele, oldName: currentName, newName: newName};\r\n this.undoRedoManager.do('changeName', args);\r\n };\r\n\r\n /*\r\n * Undo redo for changing name of nodes\r\n * **/\r\n doChangename(args: any)\r\n {\r\n\r\n var currentName = args.ele.data('name');\r\n var newArgs = {ele: args.ele, newName: args.newName, oldName: currentName};\r\n args.ele.data('name', args.newName);\r\n\r\n return newArgs;\r\n };\r\n\r\n undoChangeName(args: any)\r\n {\r\n\r\n var currentName = args.ele.data('name');\r\n var newArgs = {ele: args.ele, newName: args.newName, oldName: currentName};\r\n args.ele.data('name', args.oldName);\r\n\r\n return newArgs;\r\n };\r\n\r\n hideSelectedNodes()\r\n {\r\n //Hides the selected elements\r\n var sel = this.cy.nodes(\":selected\");\r\n var nodesToHide = sel;\r\n var b = true;\r\n //Hides the parents if they have no children\r\n sel.parent().each((parent: any) =>\r\n {\r\n b=true;\r\n parent.children().each(function(ch: any)\r\n {\r\n if (!ch.selected())\r\n {\r\n if (ch.visible()) b=false;\r\n }\r\n }\r\n );\r\n if (b) nodesToHide = nodesToHide.add(parent);\r\n });\r\n this.cy.elements(\":selected\").unselect();\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeVisibility(nodesToHide, true);\r\n else\r\n this.undoRedoManager.do('hideNode', nodesToHide);\r\n };\r\n\r\n /*\r\n * Undo redo for hiding nodes\r\n * **/\r\n @autobind\r\n doHide(args: any)\r\n {\r\n this.viewUtilities.hide(args);\r\n return args;\r\n };\r\n\r\n @autobind\r\n undoHide(args: any)\r\n {\r\n this.viewUtilities.show(args);\r\n return args;\r\n };\r\n\r\n showAllNodes()\r\n {\r\n var hid = this.cy.nodes(\":hidden\");\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeVisibility(hid, false);\r\n else\r\n this.undoRedoManager.do('showAllNodes', hid);\r\n };\r\n\r\n /*\r\n * Undo redo for showing all nodes\r\n * **/\r\n @autobind\r\n doShow(args: any)\r\n {\r\n this.viewUtilities.show(args);\r\n return args;\r\n };\r\n\r\n @autobind\r\n undoShow(args: any)\r\n {\r\n this.viewUtilities.hide(args);\r\n return args;\r\n };\r\n\r\n highlightElementsInitially(invalidHighlightedGenesIDs: string[], invalidGenesIDs: string[],\r\n highlightedGenesIDs: string[], highlightedEdgesIDs: string[], hiddenGenesIDs: string[])\r\n {\r\n for (var i in invalidHighlightedGenesIDs)\r\n {\r\n this.cy.$('#'+invalidHighlightedGenesIDs[i]).addClass('invalidGeneHighlight');\r\n }\r\n for (var i in invalidGenesIDs)\r\n {\r\n this.cy.$('#'+invalidGenesIDs[i]).addClass('invalidGene');\r\n }\r\n for (var i in highlightedGenesIDs)\r\n {\r\n this.cy.$('#'+highlightedGenesIDs[i]).addClass('highlightedNode');\r\n }\r\n for (var i in highlightedEdgesIDs)\r\n {\r\n this.cy.$('#'+highlightedEdgesIDs[i]).addClass('highlightedEdge');\r\n }\r\n for (var i in hiddenGenesIDs)\r\n {\r\n this.viewUtilities.hide(this.cy.$('#'+hiddenGenesIDs[i]))\r\n }\r\n };\r\n\r\n validateGenes()\r\n {\r\n var geneSymbols = this.getGeneSymbols();\r\n this.portalAccessor.validateGenes(geneSymbols, this);\r\n }\r\n\r\n //Get all gene symbols\r\n getGeneSymbols()\r\n {\r\n var geneSymbols: any[] = [];\r\n this.cy.nodes().forEach( function (gene: any)\r\n {\r\n if(gene.data().type === \"GENE\")\r\n geneSymbols.push(gene.data().name);\r\n });\r\n return geneSymbols;\r\n }\r\n\r\n\r\n highlightInvalidGenes(validGeneSymbols: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n var invalidGenes: any[] = [];\r\n this.cy.nodes().forEach( function (gene: any)\r\n {\r\n if(gene.data().type === \"GENE\")\r\n {\r\n var geneName = gene.data().name;\r\n if(validGeneSymbols.indexOf(geneName) < 0)\r\n invalidGenes.push(gene.id());\r\n }\r\n });\r\n this.shareDBManager.changeHighlightInvalidGenes(invalidGenes, true);\r\n // TODO: Amendment by Ziya\r\n /*\r\n if (invalidGenes.length > 0)\r\n this.notificationManager.createNotification(\"Invalid genes are highlighted\",\"fail\");\r\n else\r\n this.notificationManager.createNotification(\"All gene symbols are valid\",\"success\");*/\r\n }\r\n else\r\n {\r\n var highlightedGenes = this.cy.collection();\r\n this.cy.nodes().forEach( function (gene: any)\r\n {\r\n if(gene.data().type === \"GENE\")\r\n {\r\n var geneName = gene.data().name;\r\n if(validGeneSymbols.indexOf(geneName) < 0)\r\n highlightedGenes = highlightedGenes.add(gene);\r\n }\r\n });\r\n // TODO: Amendment by Ziya\r\n /*\r\n if (highlightedGenes.size() > 0)\r\n this.notificationManager.createNotification(\"Invalid genes are highlighted\",\"fail\");\r\n else\r\n this.notificationManager.createNotification(\"All gene symbols are valid\",\"success\");*/\r\n\r\n var nodesToAddInvalidHighlight = this.cy.collection();\r\n highlightedGenes.forEach(function(ele: any){\r\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('invalidGene'))\r\n nodesToAddInvalidHighlight = nodesToAddInvalidHighlight.union(ele);\r\n });\r\n this.undoRedoManager.do('highlightInvalidGenes', nodesToAddInvalidHighlight);\r\n }\r\n }\r\n\r\n removeInvalidGeneHighlights(actions: any[])\r\n {\r\n if (this.isCollaborative)\r\n {\r\n var geneIDs: any[] = [];\r\n this.cy.nodes().forEach( function (gene: any)\r\n {\r\n if(gene.data().type === \"GENE\")\r\n {\r\n if(gene.hasClass('invalidGeneHighlight') || gene.hasClass('invalidGene'))\r\n geneIDs.push(gene.id());\r\n }\r\n });\r\n this.shareDBManager.changeHighlightInvalidGenes(geneIDs, false);\r\n }\r\n else\r\n {\r\n var nodesToRemoveInvalidHighlight = this.cy.collection();\r\n this.cy.nodes().forEach(function(ele: any){\r\n if (ele.hasClass('invalidGeneHighlight') || ele.hasClass('invalidGene'))\r\n nodesToRemoveInvalidHighlight = nodesToRemoveInvalidHighlight.union(ele);\r\n });\r\n actions.push({name: \"removeHighlightInvalidGenes\", param: nodesToRemoveInvalidHighlight});\r\n // this.undoRedoManager.do('removeHighlightInvalidGenes', nodesToRemoveInvalidHighlight);\r\n }\r\n }\r\n\r\n doHighlightInvalidGenes(args: any)\r\n {\r\n args.each(function(n: any)\r\n {\r\n if(n.hasClass('highlightedNode'))\r\n {\r\n n.removeClass('highlightedNode');\r\n n.addClass(\"invalidGeneHighlight\");\r\n }\r\n else\r\n n.addClass(\"invalidGene\");\r\n });\r\n return args;\r\n };\r\n\r\n undoHighlightInvalidGenes(args: any)\r\n {\r\n args.each(function(n: any)\r\n {\r\n if(n.hasClass('invalidGeneHighlight'))\r\n {\r\n n.removeClass('invalidGeneHighlight');\r\n n.addClass(\"highlightedNode\");\r\n }\r\n else\r\n n.removeClass(\"invalidGene\");\r\n });\r\n return args;\r\n }\r\n\r\n highlightSelected()\r\n {\r\n var sel = this.cy.elements(\":selected\");\r\n sel.unselect();\r\n var elementsToHighlight = this.cy.collection();\r\n sel.forEach(function(ele: any){\r\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge'))\r\n elementsToHighlight = elementsToHighlight.union(ele);\r\n });\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeHighlight(elementsToHighlight, true);\r\n else\r\n this.undoRedoManager.do('highlightOthers', elementsToHighlight);\r\n };\r\n\r\n highlightNeighbors()\r\n {\r\n var sel = this.cy.elements(\":selected\");\r\n var neighbors = sel.neighborhood();\r\n neighbors = neighbors.union(sel);\r\n neighbors.unselect();\r\n var elementsToHighlight = this.cy.collection();\r\n neighbors.forEach(function(ele: any){\r\n if (!ele.hasClass('invalidGeneHighlight') && !ele.hasClass('highlightedNode') && !ele.hasClass('highlightedEdge'))\r\n elementsToHighlight = elementsToHighlight.union(ele);\r\n });\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeHighlight(elementsToHighlight, true);\r\n else\r\n this.undoRedoManager.do('highlightOthers', elementsToHighlight);\r\n };\r\n\r\n highlightBySearch(args: any[])\r\n {\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeHighlight(args, true);\r\n else\r\n this.undoRedoManager.do('highlightOthers', args);\r\n };\r\n\r\n removeOtherHighlight(actions: any[])\r\n {\r\n var nodesToRemoveHighlight = this.cy.collection();\r\n //TODO cytoscape selectors may provide more handy functionality instead of iterating over !\r\n this.cy.elements().forEach(function(ele: any){\r\n if (ele.hasClass('highlightedNode') || ele.hasClass('highlightedEdge') || ele.hasClass('invalidGeneHighlight'))\r\n nodesToRemoveHighlight = nodesToRemoveHighlight.add(ele);\r\n });\r\n\r\n if (this.isCollaborative)\r\n this.shareDBManager.changeHighlight(nodesToRemoveHighlight, false);\r\n else\r\n actions.push({name: \"removeOtherHighlight\", param: nodesToRemoveHighlight});\r\n // this.undoRedoManager.do('removeOtherHighlight', nodesToRemoveHighlight);\r\n };\r\n\r\n /*\r\n * Undo redo for highlighting of nodes\r\n * **/\r\n doHighlight(args: any)\r\n {\r\n args.each(function(n: any)\r\n {\r\n if (n.isEdge())\r\n n.addClass(\"highlightedEdge\");\r\n else\r\n {\r\n if(n.hasClass('invalidGene'))\r\n {\r\n n.removeClass(\"invalidGene\");\r\n n.addClass(\"invalidGeneHighlight\");\r\n }\r\n else\r\n n.addClass(\"highlightedNode\");\r\n }\r\n });\r\n return args;\r\n };\r\n\r\n undoHighlight(args: any)\r\n {\r\n args.each(function(n: any)\r\n {\r\n if (n.isEdge())\r\n n.removeClass(\"highlightedEdge\");\r\n else\r\n {\r\n if(n.hasClass('invalidGeneHighlight'))\r\n {\r\n n.removeClass(\"invalidGeneHighlight\");\r\n n.addClass(\"invalidGene\");\r\n }\r\n else\r\n n.removeClass(\"highlightedNode\");\r\n }\r\n });\r\n return args;\r\n };\r\n\r\n removeAllHighlight()\r\n {\r\n let actions: any[] = [];\r\n this.removeInvalidGeneHighlights(actions);\r\n this.removeOtherHighlight(actions);\r\n this.cy.undoRedo().do(\"batch\", actions);\r\n };\r\n\r\n postLayout()\r\n {\r\n if (this.isCollaborative)\r\n {\r\n //Previously this.cy.nodes() was sent as an argument in moveElements function but it caused a problem when\r\n // the compound node was moved before the child nodes\r\n var movedNodes = this.cy.collection();\r\n var parentNodes = this.cy.collection();\r\n this.cy.nodes().forEach(function(node: any)\r\n {\r\n if (!node.isParent())\r\n movedNodes = movedNodes.add(node);\r\n else\r\n parentNodes = parentNodes.add(node);\r\n });\r\n this.moveElements(movedNodes);\r\n this.moveElements(parentNodes);\r\n\r\n var newState = {\r\n zoomLevel: this.cy.zoom(),\r\n panLevel: this.cy.pan()\r\n };\r\n this.updateGlobalOptions(newState);\r\n }\r\n };\r\n\r\n /*\r\n * Gets the first empty index from the list in cloud model\r\n * **/\r\n getEmptyGroupID()\r\n {\r\n if(this.isCollaborative)\r\n return this.shareDBManager.getEmptyGroupID();\r\n else\r\n return this.genomicDataOverlayManager.getEmptyGroupID();\r\n };\r\n\r\n /*\r\n * Gets the first empty index from the list in cloud model\r\n * **/\r\n groupGenomicData(cancerNames: any[], groupID: string)\r\n {\r\n return this.shareDBManager.groupGenomicData(cancerNames, groupID);\r\n };\r\n\r\n addPubmedIDs(edge: any, pubmedIDs: number[])\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.shareDBManager.addPubmedIDs(edge.id(), pubmedIDs);\r\n }\r\n else\r\n {\r\n var pubmedArray = edge.data('pubmedIDs');\r\n var validPubmedIDs = _.filter(pubmedIDs, function(id: number){\r\n return !isNaN(id);\r\n });\r\n pubmedArray.push.apply(pubmedArray,validPubmedIDs);\r\n edge.data('pubmedIDs', _.uniq(pubmedArray));\r\n }\r\n }\r\n\r\n removePubmedID(edge: any, pubmedIDs: number[])\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.shareDBManager.removePubmedID(edge.id(), pubmedIDs);\r\n }\r\n else\r\n {\r\n var pubmedArray = edge.data('pubmedIDs');\r\n edge.data('pubmedIDs', _.difference(pubmedArray, pubmedIDs));\r\n }\r\n }\r\n\r\n updateEdgeAnchorPoints(edge: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n var edgeCurveStyle = edge.css('curve-style')\r\n var numberOfAnchorPoints = 0;\r\n var anchors = this.edgeEditing?.getAnchorsAsArray(edge);\r\n if (anchors !== undefined)\r\n numberOfAnchorPoints = anchors.length / 2;\r\n var anchorPointsArray = [];\r\n for (var j = 0; j < numberOfAnchorPoints; j++)\r\n {\r\n anchorPointsArray.push(\r\n {\r\n x: anchors[2*j],\r\n y: anchors[2*j+1]\r\n }\r\n );\r\n }\r\n this.shareDBManager.updateEdgeAnchorPoints(edge.id(), anchorPointsArray, edgeCurveStyle);\r\n }\r\n }\r\n\r\n //Related to order the nodes according to the selection of user\r\n pushSelectedNodeStack(ele: any)\r\n {\r\n this.selectedNodeStack[ele.id()] = ele;\r\n }\r\n\r\n removeElementFromSelectedNodeStack(ele: any)\r\n {\r\n var nodeID = ele.id();\r\n if (nodeID in this.selectedNodeStack)\r\n delete this.selectedNodeStack[ele.id()];\r\n }\r\n\r\n clearSelectedNodeStack()\r\n {\r\n this.selectedNodeStack = {};\r\n }\r\n\r\n exportSVG()\r\n {\r\n return this.svgExporter.exportGraph(this.cy.nodes(), this.cy.edges());\r\n }\r\n\r\n //Simple observer-observable pattern for views!!!!!\r\n registerObserver(observer: any)\r\n {\r\n this.observers.push(observer);\r\n };\r\n\r\n notifyObservers()\r\n {\r\n for (var i in this.observers)\r\n {\r\n var observer = this.observers[i];\r\n observer.notify();\r\n }\r\n };\r\n\r\n registerGenomicDataObserver(observer: any)\r\n {\r\n this.genomicDataOverlayManager.registerObserver(observer);\r\n }\r\n\r\n updateGenomicDataVisibility(dataMap: any)\r\n {\r\n if(this.isCollaborative)\r\n {\r\n //TODO compound OP\r\n // this.shareDBManager.clearGenomicVisData();\r\n this.shareDBManager.addGenomicVisibilityData(dataMap);\r\n }\r\n else\r\n {\r\n for (var _key in dataMap)\r\n {\r\n this.genomicDataOverlayManager.updateGenomicDataVisibility(_key, dataMap[_key]);\r\n }\r\n this.genomicDataOverlayManager.showGenomicData();\r\n }\r\n }\r\n\r\n updateGenomicDataColorScheme(colorValueMap: IColorValueMap)\r\n {\r\n this.setGenomicDataOverlayColorScheme(colorValueMap);\r\n\r\n if(this.isCollaborative)\r\n {\r\n this.shareDBManager.updateGenomicDataOverlayColorScheme(colorValueMap);\r\n }\r\n else\r\n {\r\n this.genomicDataOverlayManager.updateColorScheme(colorValueMap);\r\n this.genomicDataOverlayManager.showGenomicData();\r\n }\r\n }\r\n\r\n //Global options related functions, zoom etc..\r\n getGlobalOptions()\r\n {\r\n return {\r\n zoomLevel: this.cy.zoom(),\r\n panLevel: this.cy.pan()\r\n };\r\n }\r\n\r\n changeGlobalOptions(op: any)\r\n {\r\n var globalOptions = op.li;\r\n this.cy.zoom(globalOptions.zoomLevel);\r\n this.cy.pan(globalOptions.panLevel);\r\n }\r\n\r\n updateGlobalOptions(newOptions: any)\r\n {\r\n if(this.isCollaborative)\r\n this.shareDBManager.updateGlobalOptions(newOptions);\r\n }\r\n\r\n //Layout properties related functions\r\n saveLayoutProperties(newLayoutProps: any)\r\n {\r\n if(this.isCollaborative)\r\n {\r\n // Call a real time function that updated real time object and\r\n // its callback (updateLayoutPropertiesCallback) will handle sync of this object\r\n // across collaborators\r\n this.shareDBManager.updateLayoutProperties(newLayoutProps);\r\n }\r\n else\r\n {\r\n this.layoutProperties = _.clone(newLayoutProps);\r\n }\r\n };\r\n\r\n updateLayoutPropertiesCallback(op: any)\r\n {\r\n var newLayoutProps = op.li;\r\n this.layoutProperties = _.clone(newLayoutProps);\r\n LayoutProperties.layoutProperties = _.clone(this.layoutProperties);\r\n //Notify observers to reflect changes on colalborative object to the views\r\n this.notifyObservers();\r\n };\r\n\r\n performLayout()\r\n {\r\n this.undoRedoManager.do(\"layout\", {options: this.layoutProperties, eles: null, zoom: this.cy.zoom(), pan: this.cy.pan()});\r\n };\r\n\r\n //Node Related Functions\r\n addNode(nodeData: any, posData: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.addNewNodeToShareDB(nodeData, posData);\r\n }\r\n else\r\n {\r\n this.addNodetoCy(nodeData,posData);\r\n }\r\n };\r\n\r\n addNodes(nodes: any[])\r\n {\r\n for (var i in nodes)\r\n {\r\n this.addNode(nodes[i].data, nodes[i].position);\r\n }\r\n };\r\n\r\n addNodesCy(nodes: any[])\r\n {\r\n var nodeArr: any[] = [];\r\n for (var i in nodes)\r\n {\r\n var nodeData = nodes[i].data;\r\n var posData = nodes[i].position;\r\n\r\n var newNode =\r\n {\r\n group: \"nodes\",\r\n data: nodeData,\r\n position: {}\r\n };\r\n\r\n if (nodeData.parent === undefined )\r\n {\r\n delete newNode.data.parent;\r\n }\r\n\r\n if (posData)\r\n {\r\n newNode.position =\r\n {\r\n x: posData.x,\r\n y: posData.y\r\n }\r\n }\r\n nodeArr[i] = newNode;\r\n }\r\n\r\n this.cy.add(nodeArr);\r\n this.cy.nodes().updateCompoundBounds();\r\n\r\n };\r\n\r\n addNodetoCy(nodeData: any, posData: any)\r\n {\r\n var newNode =\r\n {\r\n group: \"nodes\",\r\n data: nodeData,\r\n position: {}\r\n };\r\n\r\n if (nodeData.parent === undefined )\r\n {\r\n delete newNode.data.parent;\r\n }\r\n\r\n if (posData)\r\n {\r\n newNode.position =\r\n {\r\n x: posData.x,\r\n y: posData.y\r\n }\r\n }\r\n\r\n //his.cy.add(newNode);\r\n this.cy.nodes().updateCompoundBounds();\r\n this.undoRedoManager.do(\"add\", newNode);\r\n };\r\n\r\n shareDBNodeAddRemoveEventCallBack(op: any)\r\n {\r\n //Get real time node object and sync it to node addition or removal\r\n var isRemove = Object.keys(op)[1] === 'od';\r\n var node = op.oi || op.od;\r\n //Removal Operation\r\n if (isRemove)\r\n {\r\n var nodeID = op.p[1];\r\n //Remove element from existing graph\r\n var cyEle = this.cy.$(\"#\" + nodeID);\r\n this.removeElementCy(cyEle);\r\n this.cy.nodes().updateCompoundBounds();\r\n }\r\n //Addition Operation\r\n else\r\n {\r\n this.addNewNodeLocally(node);\r\n }\r\n };\r\n\r\n addNewNodeLocally(realtimeNode: any)\r\n {\r\n var nodeData =\r\n {\r\n id: realtimeNode.id,\r\n type: realtimeNode.type,\r\n name: realtimeNode.name,\r\n parent: realtimeNode.parent,\r\n w: realtimeNode.w,\r\n h: realtimeNode.h\r\n };\r\n\r\n if (realtimeNode.x != \"undefined\" && realtimeNode.y != \"undefined\")\r\n {\r\n this.addNodetoCy(nodeData, {x: realtimeNode.x, y: realtimeNode.y});\r\n }\r\n else\r\n {\r\n // TODO: Amendment by Ziya\r\n this.addNodetoCy(nodeData, null);\r\n }\r\n\r\n this.cy.nodes().updateCompoundBounds();\r\n };\r\n\r\n addNewNodeToShareDB(nodeData: any, posData: any)\r\n {\r\n this.shareDBManager.addNewNode(nodeData,posData);\r\n };\r\n\r\n //Edge related functions\r\n addEdge(edgeData: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.addNewEdgeShareDB(edgeData);\r\n }\r\n else\r\n {\r\n this.addNewEdgetoCy(edgeData);\r\n }\r\n };\r\n\r\n addEdges(edges: any[])\r\n {\r\n for (var i in edges)\r\n {\r\n this.addEdge(edges[i].data);\r\n }\r\n };\r\n\r\n addEdgesCy(edges: any[])\r\n {\r\n const newEdges = [];\r\n\r\n\r\n for (var i in edges)\r\n {\r\n const newEdge =\r\n {\r\n group: \"edges\",\r\n data: edges[i].data\r\n };\r\n newEdges.push(newEdge);\r\n }\r\n this.cy.add(newEdges);\r\n };\r\n\r\n addNewEdgeShareDB(edgeData: any)\r\n {\r\n this.shareDBManager.addNewEdge(edgeData);\r\n };\r\n\r\n addNewEdgetoCy(edgeData: any)\r\n {\r\n var newEdge =\r\n {\r\n group: \"edges\",\r\n data: edgeData\r\n };\r\n this.undoRedoManager.do(\"add\", newEdge);\r\n };\r\n\r\n shareDBEdgeAddRemoveEventCallBack(op: any)\r\n {\r\n\r\n //Get real time node object and sync it to node addition or removal\r\n var isRemove = Object.keys(op)[1] === 'od';\r\n var edge = op.oi || op.od;\r\n\r\n //Removal Operation\r\n if (isRemove)\r\n {\r\n var edgeID = op.p[1];\r\n //Remove element from existing graph\r\n var cyEle = this.cy.$(\"#\" + edgeID);\r\n this.removeElementCy(cyEle);\r\n }\r\n //Addition Operation\r\n else\r\n {\r\n this.addNewEdgeLocally(edge);\r\n }\r\n };\r\n\r\n addNewElementsLocally(realTimeNodeArray: any[], realTimeEdgeArray: any[])\r\n {\r\n const nodeList: any[] = [];\r\n const nodeMap: any = {};\r\n\r\n for (var i in realTimeNodeArray)\r\n {\r\n var realTimeNode = realTimeNodeArray[i];\r\n\r\n var nodeID = realTimeNode.id;\r\n\r\n //Added for backward compatibility when width was not defined\r\n var nodeWidth = (realTimeNode.w == undefined) ? 150 : realTimeNode.w ;\r\n var nodeHeight = (realTimeNode.h == undefined) ? 52 : realTimeNode.h ;\r\n var compoundMinWidth = (realTimeNode.minWidth == undefined) ? 0 : realTimeNode.minWidth ;\r\n var compoundMinWidthBiasLeft = (realTimeNode.minWidthBiasLeft == undefined) ? 0 : realTimeNode.minWidthBiasLeft ;\r\n var compoundMinWidthBiasRight = (realTimeNode.minWidthBiasRight == undefined) ? 0 : realTimeNode.minWidthBiasRight ;\r\n var compoundMinHeight = (realTimeNode.minHeight == undefined) ? 0 : realTimeNode.minHeight ;\r\n var compoundMinHeightBiasTop = (realTimeNode.minHeightBiasTop == undefined) ? 0 : realTimeNode.minHeightBiasTop ;\r\n var compoundMinHeightBiasBottom = (realTimeNode.minHeightBiasBottom == undefined) ? 0 : realTimeNode.minHeightBiasBottom;\r\n\r\n const nodeData =\r\n {\r\n group: 'nodes',\r\n // TODO: Amendment by Ziya\r\n position: {},\r\n data:\r\n {\r\n id: nodeID,\r\n type: realTimeNode.type,\r\n name: realTimeNode.name,\r\n parent: realTimeNode.parent,\r\n w: nodeWidth,\r\n h: nodeHeight\r\n },\r\n style:\r\n {\r\n 'min-width': compoundMinWidth,\r\n 'min-width-bias-left': compoundMinWidthBiasLeft,\r\n 'min-width-bias-right': compoundMinWidthBiasRight,\r\n 'min-height': compoundMinHeight,\r\n 'min-height-bias-top': compoundMinHeightBiasTop,\r\n 'min-height-bias-bottom': compoundMinHeightBiasBottom\r\n }\r\n };\r\n\r\n if (nodeData.data.parent === undefined )\r\n {\r\n delete nodeData.data.parent;\r\n }\r\n\r\n if (realTimeNode.x && realTimeNode.y)\r\n {\r\n nodeData.position =\r\n {\r\n x: realTimeNode.x,\r\n y: realTimeNode.y\r\n }\r\n }\r\n\r\n nodeMap[nodeID] = nodeData;\r\n nodeList.push(nodeData);\r\n }\r\n\r\n var edgeList = [];\r\n for (var i in realTimeEdgeArray)\r\n {\r\n var edge = realTimeEdgeArray[i];\r\n var edgeID = edge.id;\r\n\r\n //If source and and target is somehow lost in remote model do not create this edge\r\n if(!(edge.source in nodeMap && edge.target in nodeMap))\r\n continue\r\n\r\n var tmpData = {\r\n id: edgeID,\r\n type: edge.type,\r\n source: edge.source,\r\n target: edge.target,\r\n pubmedIDs: edge.pubmedIDs,\r\n name: edge.name,\r\n }\r\n\r\n if (edge.edgeCurveStyle == \"unbundled-bezier\") {\r\n tmpData['controlPointPositions'] = edge.anchorPoints;\r\n }\r\n else {\r\n tmpData['bendPointPositions'] = edge.anchorPoints;\r\n }\r\n\r\n var edgeData =\r\n {\r\n group: 'edges',\r\n data: tmpData\r\n };\r\n\r\n edgeList.push(edgeData);\r\n }\r\n\r\n this.cy.add(nodeList);\r\n this.cy.add(edgeList);\r\n\r\n this.edgeEditing?.initAnchorPoints(this.cy.edges());\r\n\r\n this.cy.nodes().updateCompoundBounds();\r\n }\r\n\r\n addNewEdgeLocally(edge: any)\r\n {\r\n var edgeData ={\r\n id: edge.id,\r\n type: edge.type,\r\n source: edge.source,\r\n target: edge.target,\r\n pubmedIDs: edge.pubmedIDs,\r\n name: edge.name\r\n };\r\n if (edge.edgeCurveStyle == \"unbundled-bezier\") {\r\n edgeData['controlPointPositions'] = edge.anchorPoints;\r\n }\r\n else {\r\n edgeData['bendPointPositions'] = edge.anchorPoints;\r\n }\r\n this.addNewEdgetoCy(edgeData);\r\n this.edgeEditing?.initAnchorPoints(this.cy.getElementById( edge.id ));\r\n };\r\n\r\n reconnectEdge(sourceID: string, targetID: string, edgeData: any) {\r\n\r\n if(this.isCollaborative){\r\n var edge = this.cy.getElementById(edgeData.id);\r\n this.reconnectEdgeInShareDB(sourceID, targetID, edgeData);\r\n }\r\n else{\r\n var location = {\r\n source: sourceID,\r\n target: targetID\r\n };\r\n\r\n var edge = this.cy.getElementById(edgeData.id);\r\n edge.move(location);\r\n }\r\n\r\n return this.cy.getElementById(edgeData.id);\r\n };\r\n\r\n reconnectEdgeInShareDB(sourceID: string, targetID: string, edgeData: any) {\r\n this.shareDBManager.reconnectEdge(sourceID, targetID, edgeData);\r\n };\r\n\r\n //Removal functions\r\n removeElement(ele: any)\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.removeElementsFromShareDB(ele);\r\n }\r\n else\r\n {\r\n this.removeElementsCy(ele);\r\n }\r\n };\r\n\r\n removeElementCy(ele: any)\r\n {\r\n this.undoRedoManager.do(\"remove\", ele);\r\n };\r\n\r\n removeElementsCy(ele: any)\r\n {\r\n this.undoRedoManager.do(\"remove\", ele);\r\n };\r\n\r\n removeElementsFromShareDB(eles: any[])\r\n {\r\n var self = this;\r\n eles.forEach(function (ele)\r\n {\r\n self.shareDBManager.removeElement(ele.id());\r\n });\r\n };\r\n\r\n removeElementFromShareDB(ele: any)\r\n {\r\n this.shareDBManager.removeElement(ele.id());\r\n };\r\n\r\n changeParents(eles: any[], newParentId: string)\r\n {\r\n if(this.isCollaborative)\r\n {\r\n this.changeParentShareDB(eles, newParentId);\r\n }\r\n else\r\n {\r\n var parentData = newParentId ? newParentId : null;\r\n\r\n // Old manual way to change parents in local mode\r\n //this.changeParentCy(eles, newParentId);\r\n\r\n //Save element's previous width & height in dim array\r\n const dim : any[]= [];\r\n const id : any[]= [];\r\n eles.forEach(function (ele: any)\r\n {\r\n var parameters =\r\n {\r\n id: ele.id(),\r\n width: ele.data(\"w\"),\r\n height: ele.data(\"h\")\r\n };\r\n dim.push(parameters);\r\n id.push(ele.id());\r\n });\r\n\r\n const parentElem = this.cy.getElementById(parentData);\r\n var param = {\r\n firstTime: true,\r\n parentData: parentData, // It keeps the newParentId (Just an id for each nodes for the first time)\r\n nodes: eles,\r\n posDiffX: (!parentData) ? 0 : parentElem.position('x') - eles[0].position('x'),\r\n posDiffY: (!parentData) ? 0 : parentElem.position('y') - eles[0].position('y')\r\n };\r\n this.undoRedoManager.do('changeParent', param);\r\n\r\n //The elements after change parent operation are different so we find them by using the saved ids\r\n // and add them to the collection\r\n var collection = this.cy.collection();\r\n for (var i in id)\r\n {\r\n var elementById = this.cy.getElementById(id[i]);\r\n collection = collection.add(elementById);\r\n }\r\n //Set their previous size to the new elements in the collection\r\n collection.forEach(function (ele: any, i: number)\r\n {\r\n if (ele.id() == dim[i].id)\r\n ele.data(\"w\", dim[i].width);\r\n ele.data(\"h\", dim[i].height);\r\n });\r\n }\r\n };\r\n\r\n changeParentShareDB (eles: any, newParentId: string)\r\n {\r\n\r\n var classRef = this;\r\n function getTopLevelParents(eles: any[])\r\n {\r\n var tpMostNodes = classRef.cy.collection();\r\n const parentMap : any = {};\r\n\r\n //Get all parents\r\n eles.forEach(function (node)\r\n {\r\n if(node.isParent())\r\n parentMap[node.id()] = node;\r\n });\r\n\r\n //Get all parents\r\n eles.forEach(function (node)\r\n {\r\n var nodeParent = node.parent();\r\n\r\n if(parentMap[nodeParent.id()] === undefined)\r\n tpMostNodes = tpMostNodes.union(node);\r\n });\r\n\r\n return tpMostNodes;\r\n }\r\n\r\n\r\n class NodeObj{\r\n public nodeRef: any;\r\n public children: any;\r\n constructor(nodeObj: any){\r\n this.nodeRef = nodeObj;\r\n this.children = [];\r\n }\r\n }\r\n var connectedEdges = eles.connectedEdges();\r\n // Traverses given elements and constructs subgraph relations\r\n // creates a nested structure into rootnodeObj\r\n function traverseNodes(eles: any[], rootNodeObj: any)\r\n {\r\n eles.forEach(function (ele)\r\n {\r\n connectedEdges = connectedEdges.union(ele.connectedEdges());\r\n\r\n if(ele.isParent())\r\n {\r\n rootNodeObj.children.push(new NodeObj(ele));\r\n var lengthOfChildrenArray = rootNodeObj.children.length;\r\n traverseNodes(ele.children(), rootNodeObj.children[lengthOfChildrenArray-1]);\r\n }\r\n else\r\n {\r\n rootNodeObj.children.push(new NodeObj(ele));\r\n }\r\n });\r\n }\r\n\r\n //Create new collection\r\n var topMostNodes = getTopLevelParents(eles);\r\n\r\n var rootNodeR = new NodeObj(null);\r\n\r\n traverseNodes(topMostNodes, rootNodeR);\r\n this.shareDBManager.changeParent(rootNodeR, newParentId, connectedEdges);\r\n };\r\n\r\n changeParentCy(eles: any[], newParentId: string)\r\n {\r\n let lockedNodes: any = {};\r\n const self = this;\r\n\r\n function removeNodes(nodes: any)\r\n {\r\n //Get removed edges first\r\n let removedEles = nodes.connectedEdges().remove();\r\n const children = nodes.children();\r\n\r\n if (children != null && children.length > 0)\r\n {\r\n children.forEach(function(childNode: any)\r\n {\r\n lockedNodes[childNode.id()] = true;\r\n });\r\n\r\n removedEles = removedEles.union(removeNodes(children));\r\n }\r\n\r\n removedEles = removedEles.union(nodes.remove());\r\n self.cy.nodes().updateCompoundBounds();\r\n return removedEles;\r\n }\r\n\r\n\r\n var removedEles = removeNodes(eles);\r\n this.undoRedoManager.do(\"remove\", removedEles);\r\n\r\n for (var i = 0; i < removedEles.length; i++)\r\n {\r\n var removedNode = removedEles[i];\r\n\r\n //Just alter the parent id of corresponding nodes !\r\n if (removedNode.isEdge() || lockedNodes[removedNode.id()])\r\n {\r\n continue;\r\n }\r\n\r\n removedNode._private.data.parent = newParentId;\r\n if(removedNode._private.parent){\r\n delete removedNode._private.parent;\r\n }\r\n }\r\n\r\n self.cy.add(removedEles);\r\n this.undoRedoManager.do(\"add\", removedEles);\r\n self.cy.nodes().updateCompoundBounds();\r\n };\r\n\r\n moveElements(eles: any[])\r\n {\r\n var classRef = this;\r\n //Sync movement to real time api\r\n if(this.isCollaborative)\r\n {\r\n eles.forEach(function (ele: any)\r\n {\r\n classRef.shareDBManager.moveElement(ele);\r\n });\r\n }\r\n };\r\n\r\n resizeElements(ele: any)\r\n {\r\n if(this.isCollaborative) {\r\n if (!ele.isParent()) {\r\n var previousWidth = ele.width();\r\n var previousHeight = ele.height();\r\n //Sync movement to real time api\r\n this.shareDBManager.resizeElement(ele, previousWidth, previousHeight);\r\n }\r\n else {\r\n var minWidth = ele.style('min-width');\r\n var minWidthBiasLeft = ele.style('min-width-bias-left');\r\n var minWidthBiasRight = ele.style('min-width-bias-right');\r\n var minHeight = ele.style('min-height');\r\n var minHeightBiasTop = ele.style('min-height-bias-top');\r\n var minHeightBiasBottom = ele.style('min-height-bias-bottom');\r\n\r\n //Sync movement to real time api\r\n this.shareDBManager.resizeCompound(ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom);\r\n }\r\n }\r\n };\r\n\r\n mergeGraph(nodes: any[], edges: any[])\r\n {\r\n if (this.isCollaborative)\r\n {\r\n //Collaborative usage\r\n this.shareDBManager.mergeGraph(nodes,edges);\r\n }\r\n else\r\n {\r\n //Local usage file load\r\n this.mergeGraphCy(nodes,edges);\r\n }\r\n this.fitGraph();\r\n };\r\n\r\n mergeGraphCy(nodes: any[], edges: any[])\r\n {\r\n //Define arrays and maps\r\n const nodesToBeAdded = [];\r\n const edgesToBeAdded = [];\r\n const nodeMap : any= {};\r\n\r\n //Iterate over nodes and find nodes that does not exist in current graph by looking their name\r\n for (var index in nodes)\r\n {\r\n var ele = nodes[index];\r\n nodeMap[ele.data.id] = ele;\r\n\r\n if (this.cy.filter('node[name = \"'+ele.data.name+'\"]').length <= 0)\r\n {\r\n nodesToBeAdded.push(ele);\r\n }\r\n }\r\n\r\n this.cy.add(nodesToBeAdded);\r\n\r\n //Iterate over all edges\r\n for (var index in edges)\r\n {\r\n //Get corresponding source and target node in merge file\r\n var ele = edges[index];\r\n var sourceNode = nodeMap[ele.data.source];\r\n var targetNode = nodeMap[ele.data.target];\r\n\r\n //Check if there are nodes with same name in current graph\r\n var cySourceNode = this.cy.nodes('[name=\"'+sourceNode.data.name+'\"]');\r\n var targetNode = this.cy.nodes('[name=\"'+targetNode.data.name+'\"]');\r\n\r\n if (cySourceNode.length > 0)\r\n {\r\n ele.data.source = cySourceNode.id();\r\n }\r\n\r\n if (targetNode.length > 0)\r\n {\r\n ele.data.target = targetNode.id();\r\n }\r\n\r\n if (targetNode.length < 0 && cySourceNode.length < 0 ) {\r\n continue;\r\n }\r\n\r\n var edgesBtw = this.cy.filter('edge[source = \"'+cySourceNode.id()+'\"][target = \"'+targetNode.id()+'\"]');\r\n\r\n //We assume there could be one edge between source and target node with same type\r\n var isFound = false;\r\n edgesBtw.forEach(function(edge: any)\r\n {\r\n if (edge.data().type == ele.data.type)\r\n {\r\n isFound = true;\r\n return false;\r\n }\r\n //TODO: AMENDMENT by Ziya\r\n return true;\r\n });\r\n\r\n if (!isFound)\r\n {\r\n delete ele.data.id;\r\n edgesToBeAdded.push(ele);\r\n }\r\n }\r\n\r\n this.cy.add(edgesToBeAdded);\r\n };\r\n\r\n fitGraph()\r\n {\r\n if(this.isCollaborative)\r\n {\r\n this.cy.fit(this.FIT_CONSTANT);\r\n var newState =\r\n {\r\n zoomLevel: this.cy.zoom(),\r\n panLevel: this.cy.pan()\r\n };\r\n this.updateGlobalOptions(newState);\r\n }\r\n else\r\n {\r\n this.cy.fit(this.FIT_CONSTANT);\r\n }\r\n }\r\n\r\n loadFile(nodes: any[], edges: any[])\r\n {\r\n if (this.isCollaborative)\r\n {\r\n //Real time load graph\r\n this.loadfileShareDB(nodes, edges);\r\n }\r\n else\r\n {\r\n //Local usage file load\r\n this.loadFileCy(nodes,edges);\r\n }\r\n \r\n this.edgeEditing?.initAnchorPoints(this.cy.edges());\r\n \r\n this.fitGraph();\r\n };\r\n\r\n loadFileCy(nodes: any[], edges: any[])\r\n {\r\n //Remove all elements\r\n this.removeElementCy(this.cy.elements());\r\n\r\n this.addNodesCy(nodes);\r\n this.addEdgesCy(edges);\r\n };\r\n\r\n loadfileShareDB(nodes: any[], edges: any[])\r\n {\r\n this.shareDBManager.loadGraph(nodes,edges);\r\n };\r\n\r\n removeAllElements()\r\n {\r\n if (this.isCollaborative)\r\n {\r\n this.shareDBManager.removeAllElements();\r\n }\r\n else\r\n {\r\n this.cy.remove(this.cy.elements());\r\n }\r\n };\r\n\r\n updateHighlight(ele: any, isHighlighted: boolean)\r\n {\r\n if (isHighlighted)\r\n this.undoRedoManager.do('highlightOthers', ele);\r\n else\r\n this.undoRedoManager.do('removeOtherHighlight', ele);\r\n };\r\n\r\n\r\n @autobind\r\n updateVisibility(ele: any, isHidden: boolean)\r\n {\r\n if (isHidden)\r\n this.viewUtilities.hide(ele);\r\n else\r\n this.viewUtilities.show(ele);\r\n };\r\n\r\n updateElementCallback(op: any)\r\n {\r\n var ele = op.oi;\r\n var eleID = ele.id;\r\n var cyEle = this.cy.$(\"#\" + eleID);\r\n this.changeNameCy(cyEle, ele.name);\r\n\r\n if (cyEle.isNode())\r\n {\r\n //Width and height of simple nodes and compounds is changed differently\r\n if (cyEle.isParent())\r\n {\r\n cyEle.style(\"min-width\", ele.minWidth);\r\n cyEle.style(\"min-width-bias-left\", ele.minWidthBiasLeft);\r\n cyEle.style(\"min-width-bias-right\", ele.minWidthBiasRight);\r\n cyEle.style(\"min-height\", ele.minHeight);\r\n cyEle.style(\"min-height-bias-top\", ele.minHeightBiasTop);\r\n cyEle.style(\"min-height-bias-bottom\", ele.minHeightBiasBottom);\r\n }\r\n else\r\n {\r\n cyEle.data('w', ele.w);\r\n cyEle.data('h', ele.h);\r\n //Position is changed only for simple nodes because the\r\n //position of compounds is defined by simple nodes' position\r\n cyEle.position({x: ele.x, y: ele.y});\r\n }\r\n\r\n this.updateVisibility(cyEle, ele.isHidden);\r\n this.updateHighlight(cyEle, ele.isHighlighted);\r\n\r\n if(ele.isInvalidGene)\r\n {\r\n this.doHighlightInvalidGenes(cyEle);\r\n }\r\n else\r\n {\r\n this.undoHighlightInvalidGenes(cyEle);\r\n }\r\n }\r\n else if(cyEle.isEdge())\r\n {\r\n var pubmedArray = ele.pubmedIDs;\r\n cyEle.data('pubmedIDs', pubmedArray);\r\n this.updateHighlight(cyEle, ele.isHighlighted);\r\n\r\n var anchorPoints = ele.anchorPoints;\r\n\r\n //If edge is reconnected\r\n if ( ele.source !== cyEle.source().id() || ele.target !== cyEle.target().id()){\r\n var location = {\r\n source: ele.source,\r\n target: ele.target\r\n };\r\n cyEle.move(location);\r\n //make sure that bend points are same\r\n this.edgeEditing?.initAnchorPoints(cyEle);\r\n }\r\n else {\r\n if (ele.edgeCurveStyle === \"bezier\") {\r\n const anchors = this.edgeEditing?.getAnchorsAsArray(cyEle);\r\n if (anchors && anchors.length > 0) {\r\n for (let i = 0; i < anchors.length / 2; i++) {\r\n this.edgeEditing?.deleteSelectedAnchor(cyEle, 0);\r\n }\r\n }\r\n }\r\n else if (ele.edgeCurveStyle === \"unbundled-bezier\") {\r\n cyEle.data('controlPointPositions', anchorPoints);\r\n }\r\n else {\r\n cyEle.data('bendPointPositions', anchorPoints);\r\n }\r\n this.edgeEditing?.initAnchorPoints(cyEle);\r\n }\r\n }\r\n };\r\n\r\n getGenomicDataSVG(node: any)\r\n {\r\n // @ts-ignore\r\n return this.genomicDataOverlayManager.generateSVGForNode(node);\r\n }\r\n\r\n getOncoprintDataSVG(node: any) \r\n {\r\n return this.genomicDataOverlayManager.generateOncoprintForPatientNode(node);\r\n }\r\n\r\n removeGenomicData()\r\n {\r\n if(this.isCollaborative)\r\n {\r\n this.shareDBManager.clearGenomicData();\r\n }\r\n else\r\n {\r\n // TODO wrap this in afunction in genomic data overlay manager\r\n this.genomicDataOverlayManager.clearAllGenomicData();\r\n this.genomicDataOverlayManager.hideGenomicData();\r\n this.genomicDataOverlayManager.notifyObservers();\r\n }\r\n\r\n }\r\n\r\n addGenomicData(genomicData: any, isFromPortal: boolean, groupID?: any, activeGroups?: any[])\r\n {\r\n if (!isFromPortal) {\r\n groupID = this.getEmptyGroupID();\r\n }\r\n \r\n if (this.isCollaborative) {\r\n var parsedGenomicData = this.genomicDataOverlayManager.prepareGenomicData(\r\n genomicData,\r\n null,\r\n this.isCollaborative,\r\n isFromPortal\r\n );\r\n this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap);\r\n this.shareDBManager.groupGenomicData(\r\n Object.keys(parsedGenomicData.visibilityMap),\r\n groupID\r\n );\r\n \r\n if (!isFromPortal) {\r\n let currentVisibleGenomicDataCount =\r\n this.genomicDataOverlayManager.countVisibleGenomicDataByType();\r\n Object.keys(parsedGenomicData.visibilityMap).forEach((study) => {\r\n if (\r\n parsedGenomicData.visibilityMap[study] &&\r\n currentVisibleGenomicDataCount >= 6\r\n ) {\r\n parsedGenomicData.visibilityMap[study] = false;\r\n } else if (parsedGenomicData.visibilityMap[study]) {\r\n currentVisibleGenomicDataCount++;\r\n }\r\n });\r\n }\r\n \r\n this.shareDBManager.addGenomicVisibilityData(\r\n parsedGenomicData.visibilityMap\r\n );\r\n } else {\r\n if (activeGroups !== undefined) {\r\n this.genomicDataOverlayManager.addGenomicDataLocally(genomicData, groupID, isFromPortal, activeGroups);\r\n } else {\r\n this.genomicDataOverlayManager.addGenomicDataLocally(genomicData, groupID, isFromPortal);\r\n }\r\n \r\n }\r\n } \r\n\r\n adjustVisibilityShareDB(profileId: string, isEnabled: boolean){\r\n const targetProfileIndex = this.profiles.map(profile => profile.profileId).indexOf(profileId);\r\n this.setProfile(targetProfileIndex, {\r\n ...this.profiles[targetProfileIndex],\r\n enabled: isEnabled\r\n }); \r\n }\r\n\r\n addToProfiles(profileId: string){\r\n // Check if this profile already exists\r\n if(this.profiles.map(profile => profile.profileId).includes(profileId)){\r\n return;\r\n }\r\n\r\n this.addProfile({\r\n profileId: profileId, \r\n enabled: true\r\n });\r\n }\r\n\r\n shareDBGenomicDataHandler(op: any)\r\n {\r\n var isRemove = Object.keys(op)[1] === 'od';\r\n var newData = op.oi;\r\n var geneSymbol = op.p[1];\r\n\r\n\r\n if(!isRemove)\r\n {\r\n this.genomicDataOverlayManager.addGenomicDataWithGeneSymbol(geneSymbol, newData);\r\n\r\n }\r\n // Removal\r\n else\r\n {\r\n this.genomicDataOverlayManager.removeGenomicDataWithGeneSymbol(geneSymbol);\r\n }\r\n }\r\n\r\n\r\n shareDBGenomicDataGroupChangeHandler(op: any)\r\n {\r\n\r\n var isRemove = Object.keys(op)[1] === 'od';\r\n var data = op.oi;\r\n var key = op.p[1];\r\n\r\n // Addition\r\n if(!isRemove)\r\n {\r\n this.genomicDataOverlayManager.addGenomicGroupData(key, data);\r\n if(data.length !== 1){\r\n console.log(\"Grouped genomic data expected to be of length 1\");\r\n }\r\n data.forEach((profileId: any) => {this.addToProfiles(profileId)});\r\n }\r\n else if (!data) {\r\n this.genomicDataOverlayManager.clearAllGenomicData();\r\n }\r\n this.genomicDataOverlayManager.showGenomicData((node: any) => {\r\n this.resizeElements(node);\r\n } );\r\n this.genomicDataOverlayManager.notifyObservers();\r\n }\r\n\r\n shareDBGenomicDataVisibilityHandler(op: any)\r\n {\r\n var data = op.oi;\r\n var key = op.p[1];\r\n var isRemove = Object.keys(op)[1] === 'od';\r\n // Addition\r\n if(!isRemove)\r\n {\r\n this.genomicDataOverlayManager.addGenomicVisData(key, data);\r\n\r\n this.adjustVisibilityShareDB(key, data);\r\n }\r\n // Removal\r\n else\r\n {\r\n this.genomicDataOverlayManager.removeGenomicVisData();\r\n this.removeProfiles();\r\n }\r\n\r\n this.genomicDataOverlayManager.showGenomicData((node: any) => {\r\n this.resizeElements(node);\r\n } );\r\n this.genomicDataOverlayManager.notifyObservers();\r\n }\r\n\r\n\r\n incrementNumberOfUsers(){\r\n this.shareDBManager.incrementNumberOfUsers();\r\n }\r\n getUserId(){\r\n let userId = this.shareDBManager.doc.data[this.shareDBManager.NUMBER_OF_USERS];\r\n return userId;\r\n }\r\n\r\n updateMessageCount( messageCount : number){\r\n this.incrementChatMessageCountCallback( messageCount);\r\n }\r\n updateGenomicDataColorSchemeHandler(op: any)\r\n {\r\n let colorScheme = op.li;\r\n \r\n this.setGenomicDataOverlayColorScheme(colorScheme);\r\n\r\n this.colorSchemeChangeCallback(colorScheme);\r\n \r\n this.genomicDataOverlayManager.updateColorScheme(colorScheme);\r\n this.genomicDataOverlayManager.showGenomicData((node: any) => {\r\n this.resizeElements(node);\r\n } );\r\n this.genomicDataOverlayManager.notifyObservers();\r\n }\r\n\r\n resizeNodesToContent(nodes: any[])\r\n {\r\n if(this.isCollaborative)\r\n {\r\n const visibleNumberOfData = this.genomicDataOverlayManager.countVisibleGenomicDataByType();\r\n const labelWithData = 148 + (visibleNumberOfData-3) * 36;\r\n const rt = this.shareDBManager;\r\n nodes.forEach(function( ele ){\r\n if (!ele.isParent())\r\n {\r\n var newWidth = 150;\r\n var newHeight = 52;\r\n if (ele.data('name') != \"\")\r\n {\r\n var labelLength = ele.style('label').length*10 + 6;\r\n newWidth = labelLength;\r\n newHeight = 24;\r\n }\r\n if (ele.data('type') !== \"PROCESS\" && visibleNumberOfData > 0)\r\n {\r\n newHeight = 52;\r\n if (visibleNumberOfData < 4)\r\n {\r\n if (150 > newWidth)\r\n newWidth = 150;\r\n }\r\n else\r\n {\r\n if (labelWithData > newWidth)\r\n newWidth = labelWithData;\r\n }\r\n }\r\n rt.setSizeOfElement(ele, newWidth, newHeight);\r\n }\r\n else\r\n {\r\n //Set the minWidth, minHeight and other properties of compound to 0\r\n rt.resizeCompound(ele, 0, 0, 0, 0, 0, 0);\r\n }\r\n });\r\n }\r\n else\r\n {\r\n const ur = this.cy.undoRedo();\r\n const actions: any[] = [];\r\n\r\n const visibleNumberOfData = this.genomicDataOverlayManager.countVisibleGenomicDataByType();\r\n const labelWithData = 150 + (visibleNumberOfData-3) * 36;\r\n nodes.forEach(function( ele: any){\r\n if (!ele.isParent())\r\n {\r\n let newWidth = 150;\r\n let newHeight = 52;\r\n if (ele.data('name') != \"\") {\r\n var labelLength = ele.style('label').length * 6 + 24;\r\n newWidth = labelLength;\r\n newHeight = 24;\r\n }\r\n if (ele.data('type') !== \"PROCESS\" && \r\n visibleNumberOfData > 0) {\r\n \r\n newHeight = 52;\r\n if (visibleNumberOfData < 4) {\r\n if (150 > newWidth)\r\n newWidth = 150;\r\n }\r\n else {\r\n if (labelWithData > newWidth)\r\n newWidth = labelWithData;\r\n }\r\n }\r\n const args = {\r\n ele: ele,\r\n oldWidth: ele.width(),\r\n newWidth: newWidth,\r\n oldHeight: ele.height(),\r\n newHeight: newHeight\r\n };\r\n actions.push({name: \"changeNodeSize\", param: args});\r\n }\r\n else\r\n {\r\n const args = {\r\n ele: ele,\r\n oldMinWidth: ele.style(\"min-width\"),\r\n newMinWidth: 0,\r\n oldMinWidthBiasLeft: ele.style(\"min-width-bias-left\"),\r\n newMinWidthBiasLeft: 0,\r\n oldMinWidthBiasRight: ele.style(\"min-width-bias-right\"),\r\n newMinWidthBiasRight: 0,\r\n oldMinHeight: ele.style(\"min-height\"),\r\n newMinHeight: 0,\r\n oldMinHeightBiasTop: ele.style(\"min-height-bias-top\"),\r\n newMinHeightBiasTop: 0,\r\n oldMinHeightBiasBottom: ele.style(\"min-height-bias-bottom\"),\r\n newMinHeightBiasBottom: 0\r\n };\r\n actions.push({name: \"changeCompoundSize\", param: args});\r\n }\r\n });\r\n\r\n ur.do(\"batch\", actions);\r\n }\r\n this.cy.nodeEditing('get').refreshGrapples();\r\n };\r\n\r\n\r\n\r\n}\r\n","import _ from \"lodash\";\r\nimport { action, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n Col,\r\n ControlLabel,\r\n Form,\r\n FormControl,\r\n InputGroup,\r\n Modal\r\n} from \"react-bootstrap\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport { EModalType } from \"../ui/react-pathway-mapper\";\r\nimport PathwayActions from \"../utils/PathwayActions\";\r\n\r\ninterface ILayoutPropertiesProps {\r\n show: boolean;\r\n handleClose: (modelId: EModalType) => void;\r\n pathwayActions: PathwayActions;\r\n}\r\n\r\nexport interface ILayoutProperties {\r\n name: string;\r\n animationDuration: number;\r\n animationEasing: string;\r\n nodeRepulsion: number;\r\n idealEdgeLength: number;\r\n edgeElasticity: number;\r\n nestingFactor: number;\r\n gravity: number;\r\n numIter: number;\r\n gravityRangeCompound: number;\r\n gravityCompound: number;\r\n gravityRange: number;\r\n tilingPaddingVertical: number;\r\n tilingPaddingHorizontal: number;\r\n initialEnergyOnIncremental: number;\r\n tile: boolean;\r\n animate: boolean;\r\n randomize: boolean;\r\n nodeDimensionsIncludeLabels: boolean\r\n}\r\n\r\n@observer\r\nexport default class LayoutProperties extends React.Component<\r\n ILayoutPropertiesProps\r\n> {\r\n static layoutProperties: ILayoutProperties;\r\n\r\n @observable\r\n internalLayoutProperties: ILayoutProperties;\r\n\r\n constructor(props: ILayoutPropertiesProps) {\r\n super(props);\r\n makeObservable(this);\r\n this.internalLayoutProperties = _.clone(\r\n EditorActionsManager.defaultLayoutProperties\r\n );\r\n LayoutProperties.layoutProperties = _.clone(EditorActionsManager.defaultLayoutProperties);\r\n }\r\n\r\n @action.bound\r\n updateInternalLayoutProperty(property: string, val: boolean | number) {\r\n this.internalLayoutProperties[property] = val;\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n {\r\n this.internalLayoutProperties = _.clone(LayoutProperties.layoutProperties);\r\n }}\r\n onHide={() => {\r\n this.internalLayoutProperties = _.clone(LayoutProperties.layoutProperties);\r\n this.props.handleClose(EModalType.LAYOUT);\r\n }}\r\n >\r\n \r\n \r\n Layout Properties\r\n \r\n \r\n \r\n
\r\n \r\n \r\n Node Repulsion:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"nodeRepulsion\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Ideal Edge Length:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"idealEdgeLength\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Edge Elasticity:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"edgeElasticity\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Nesting Factor:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"nestingFactor\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Gravity:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"gravity\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Gravity Range:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"gravityRange\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Compound Gravity:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"gravityCompound\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Compound Gravity Range:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"gravityRangeCompound\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Number of Iterations:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"numIter\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Tiling Vertical Padding:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"tilingPaddingVertical\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Tiling Horizontal Padding:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"tilingPaddingHorizontal\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n Tile Disconnected:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"tile\", !this.internalLayoutProperties.tile);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n Animate:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"animate\",!this.internalLayoutProperties.animate);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n Incremental:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"randomize\", !this.internalLayoutProperties.randomize);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n Incremental Cooling Factor:\r\n \r\n\r\n \r\n {\r\n this.updateInternalLayoutProperty(\"initialEnergyOnIncremental\", Number(e.target.value));\r\n }}\r\n />\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n {\r\n LayoutProperties.layoutProperties = _.clone(this.internalLayoutProperties);\r\n this.props.pathwayActions.setLayoutProperties(\r\n LayoutProperties.layoutProperties\r\n );\r\n this.props.handleClose(EModalType.LAYOUT);\r\n }}\r\n >\r\n Save\r\n \r\n\r\n {\r\n this.internalLayoutProperties = _.clone(\r\n EditorActionsManager.defaultLayoutProperties\r\n );\r\n LayoutProperties.layoutProperties = _.clone(this.internalLayoutProperties);\r\n this.props.pathwayActions.setLayoutProperties(\r\n this.internalLayoutProperties\r\n );\r\n }}\r\n >\r\n Default\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import { observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport { Button, Col, ControlLabel, Form, FormControl, InputGroup, Modal } from 'react-bootstrap';\r\nimport { IPathwayInfo } from '../managers/FileOperationsManager';\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\nimport PathwayActions from '../utils/PathwayActions';\r\n\r\ninterface IPathwayDetailsModalProps{\r\n show: boolean;\r\n handleClose: Function;\r\n pathwayActions: PathwayActions;\r\n}\r\n\r\n@observer\r\nexport default class PathwayDetailsModal extends React.Component{\r\n\r\n pathwayInfo: IPathwayInfo;\r\n\r\n constructor(props: IPathwayDetailsModalProps){\r\n super(props);\r\n }\r\n\r\n render(){\r\n\r\n this.pathwayInfo = this.props.pathwayActions.getPathwayInfo;\r\n\r\n return(\r\n\r\n {this.props.handleClose(4)}}>\r\n \r\n Pathway Properties\r\n \r\n \r\n
\r\n\r\n \r\n \r\n Pathway Title:\r\n \r\n \r\n {this.pathwayInfo.pathwayTitle = e.target.value;}}value={this.pathwayInfo.pathwayTitle}/>\r\n \r\n \r\n\r\n \r\n \r\n Pathway Description:\r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n\r\n )\r\n\r\n }\r\n}","import autobind from \"autobind-decorator\";\r\nimport { action, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport { Button, Col, Modal, Row } from \"react-bootstrap\";\r\nimport { EModalType, IColorValueMap } from \"../ui/react-pathway-mapper\";\r\n\r\nconst addButtonImg = require(\"../images/add.svg\");\r\nconst deleteButtonImg = require(\"../images/delete-simple.svg\");\r\n\r\ninterface IValueColorObj {\r\n value: string;\r\n color: string;\r\n}\r\n\r\ninterface IProfilesColorSchemeModalProps {\r\n show: boolean;\r\n handleClose: (modalId: EModalType) => void;\r\n colorValueMapping: IColorValueMap;\r\n handleColorMappingChange: (colorMapping: IColorValueMap) => void;\r\n}\r\n\r\n@observer\r\nexport default class ProfilesColorSchemeModal extends React.Component<\r\n IProfilesColorSchemeModalProps,\r\n {}\r\n> {\r\n @observable\r\n colorMappings: IValueColorObj[];\r\n\r\n @observable\r\n showUniqueValuesWarningModal: boolean;\r\n\r\n constructor(props: IProfilesColorSchemeModalProps) {\r\n super(props);\r\n makeObservable(this);\r\n this.initColorMappings();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.show === false && this.props.show === true) {\r\n this.initColorMappings();\r\n }\r\n }\r\n\r\n initColorMappings() {\r\n this.colorMappings = Object.entries(this.props.colorValueMapping)\r\n .map(([value, color]) => {\r\n return {\r\n value: value,\r\n color: color,\r\n };\r\n })\r\n .sort((o1, o2) => {\r\n return Number(o1.value) - Number(o2.value);\r\n });\r\n }\r\n\r\n @action.bound\r\n handleColorChange(index: number, color: string) {\r\n this.colorMappings[index].color = color;\r\n }\r\n\r\n @action.bound\r\n handleValueChange(index: number, value: string) {\r\n this.colorMappings[index].value = value;\r\n }\r\n\r\n @action.bound\r\n addDefaultColorMapping() {\r\n this.colorMappings.push({ value: \"0\", color: \"#ffffff\" });\r\n }\r\n\r\n @action.bound\r\n removeColorMapping(index: number) {\r\n this.colorMappings.splice(index, 1);\r\n }\r\n\r\n @action.bound\r\n setDefaultColorMapping() {\r\n this.colorMappings = [\r\n { value: \"-100\", color: \"#0000ff\" },\r\n { value: \"0\", color: \"#ffffff\" },\r\n { value: \"100\", color: \"#ff0000\" },\r\n ];\r\n }\r\n\r\n @action.bound\r\n setShowUniqueValuesWarningModal(val: boolean) {\r\n this.showUniqueValuesWarningModal = val;\r\n }\r\n\r\n @autobind\r\n handleSaveColorScheme(): boolean {\r\n const mapping = {};\r\n this.colorMappings.forEach((pair) => {\r\n mapping[pair.value] = pair.color;\r\n });\r\n\r\n if (Object.keys(mapping).length < 2) {\r\n this.setShowUniqueValuesWarningModal(true);\r\n return false;\r\n } else {\r\n this.props.handleColorMappingChange(mapping);\r\n return true;\r\n }\r\n }\r\n\r\n @autobind\r\n close() {\r\n this.props.handleClose(EModalType.PROFILES_COLOR_SCHEME);\r\n }\r\n\r\n render() {\r\n const mappingElements = this.colorMappings.map((mapping, index) => (\r\n \r\n \r\n \r\n {\r\n const value = event.target.value;\r\n this.handleValueChange(index, value);\r\n }}\r\n >\r\n \r\n \r\n {\r\n const color = event.target.value;\r\n this.handleColorChange(index, color);\r\n }}\r\n />\r\n \r\n \r\n 2 ? \"icon-enabled\" : \"icon-disabled\")\r\n }\r\n title={\"Remove\"}\r\n onClick={() => {\r\n this.removeColorMapping(index);\r\n }}\r\n >\r\n \r\n \r\n \r\n ));\r\n\r\n return (\r\n {\r\n this.close();\r\n }}\r\n bsSize=\"small\"\r\n >\r\n \r\n Study Data Overlay Color Scheme\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {mappingElements}\r\n \r\n\r\n this.setShowUniqueValuesWarningModal(false)}\r\n bsSize=\"small\"\r\n >\r\n \r\n \r\n Warning \r\n \r\n \r\n \r\n

Please set at least two unique value-color mappings.

\r\n
\r\n \r\n {\r\n this.setShowUniqueValuesWarningModal(false);\r\n }}\r\n >\r\n OK\r\n \r\n \r\n \r\n
\r\n\r\n \r\n {\r\n this.close();\r\n }}\r\n >\r\n Cancel\r\n \r\n {\r\n this.setDefaultColorMapping();\r\n }}\r\n >\r\n Default\r\n \r\n {\r\n const close = this.handleSaveColorScheme();\r\n if (close) {\r\n this.close();\r\n }\r\n }}\r\n >\r\n Save\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport { Button, Modal } from \"react-bootstrap\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport { EModalType, IProfileMetaData } from \"../ui/react-pathway-mapper\";\r\ninterface IProfilesModalProps {\r\n profiles: IProfileMetaData[];\r\n editor: EditorActionsManager;\r\n show: boolean;\r\n handleClose: Function;\r\n handleProfileLabelClicked: (index: number) => void;\r\n enabledProfileCountLimit: number;\r\n}\r\n\r\n@observer\r\nexport default class ProfilesModal extends React.Component<\r\n IProfilesModalProps,\r\n {}\r\n> {\r\n\r\n\r\n @observable\r\n showEnabledProfileWarningModal: boolean = false;\r\n\r\n constructor(props: IProfilesModalProps) {\r\n super(props);\r\n\r\n makeObservable(this);\r\n }\r\n\r\n @action\r\n setShowEnabledProfileWarningModal(val: boolean) {\r\n this.showEnabledProfileWarningModal = val;\r\n }\r\n\r\n @computed get profileEnabledMap() {\r\n\r\n const enabledProfiles: IProfileMetaData[] = [];\r\n this.props.profiles.forEach(profile => {\r\n if (profile.enabled && enabledProfiles.length < this.props.enabledProfileCountLimit) {\r\n enabledProfiles.push(profile);\r\n }\r\n });\r\n\r\n const profileEnabledMap = {};\r\n this.props.profiles.forEach((profile: IProfileMetaData) => {\r\n const enabled = enabledProfiles.indexOf(profile) > -1;\r\n profileEnabledMap[profile.profileId] = enabled;\r\n });\r\n return profileEnabledMap;\r\n }\r\n\r\n handleProfileLabelClicked(index: number) {\r\n this.props.handleProfileLabelClicked(index);\r\n }\r\n\r\n render() {\r\n const profileLabels = this.props.profiles.map(\r\n (profile: IProfileMetaData, i: number) => (\r\n \r\n {\r\n const enabledProfileCount = this.props.profiles.filter(profile => profile.enabled).length;\r\n if (this.props.profiles[i].enabled || enabledProfileCount < this.props.enabledProfileCountLimit) {\r\n this.handleProfileLabelClicked(i);\r\n this.props.editor.updateGenomicDataVisibility(\r\n this.profileEnabledMap\r\n );\r\n }\r\n else {\r\n this.setShowEnabledProfileWarningModal(true);\r\n }\r\n }}\r\n style={{\r\n cursor: \"pointer\",\r\n margin: \"10px\"\r\n }}\r\n bsStyle={this.props.profiles[i].enabled ? \"primary\" : \"default\"}\r\n >\r\n {profile.profileId}\r\n \r\n \r\n )\r\n );\r\n\r\n return (\r\n {\r\n this.props.handleClose(EModalType.PROFILES);\r\n }}\r\n >\r\n \r\n Genomic Data Set(s) to Show\r\n \r\n \r\n {profileLabels.length > 0 ? (\r\n profileLabels\r\n ) : (\r\n

There is currently no data to show

\r\n )}\r\n this.setShowEnabledProfileWarningModal(false)}>\r\n \r\n \r\n Warning\r\n \r\n \r\n \r\n

At most 6 data sets can be displayed at the same time, please disable some other data set before enabling this.

\r\n
\r\n \r\n {\r\n this.setShowEnabledProfileWarningModal(false);\r\n }}>\r\n OK\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { EModalType } from '../ui/react-pathway-mapper';\r\nimport {Modal} from 'react-bootstrap';\r\ninterface IQuickHelpModalProps{\r\n show: boolean;\r\n handleClose: (modalId: EModalType) => void;\r\n}\r\n\r\nexport default class QuickHelpModal extends React.Component{\r\n\r\n constructor(props: IQuickHelpModalProps){\r\n super(props);\r\n }\r\n\r\n render(){\r\n\r\n\r\n return(\r\n {this.props.handleClose(EModalType.HELP)}}>\r\n \r\n Quick Help\r\n \r\n \r\n
    \r\n
  • To add a node: Drag and drop from node palette
  • \r\n
  • To add an interaction: Click on interaction type; then click on small circle on source node and release on target node
  • \r\n
  • To add a node into a container (family, complex, compartment or process): Drag the node into its container node or select nodes to be contained and right click on container node and choose \"Add Selected Into This\"
  • \r\n
  • To delete nodes/interactions: Select and perform Edit > Delete Selected
  • \r\n
  • To overlay experiment data: Select Alteration % > Load From cBioPortal...
  • \r\n
\r\n
\r\n\r\n
\r\n\r\n );\r\n }\r\n\r\n\r\n}","import _ from \"lodash\";\r\nimport { toast } from 'react-toastify';\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\n\r\n\r\nexport default class CBioPortalAccessor{\r\n static readonly CNA_GAIN = 2;\r\n\r\n static readonly GET_ALL_CANCER_STUDIES_URL = \"https://www.cbioportal.org/webservice.do?cmd=getCancerStudies\";\r\n static readonly GET_GENETIC_PROFILES_URL = \"https://www.cbioportal.org/webservice.do?cmd=getGeneticProfiles&cancer_study_id=\";\r\n static readonly GET_PROFILE_DATA_URL = \"https://www.cbioportal.org/webservice.do?cmd=getProfileData\";\r\n static readonly MRNA_EXP_STUDY_NAME = \"_mrna_median_Zscores\";\r\n static readonly CNA_EXP_STUDY_NAME = \"_gistic\";\r\n static readonly VALIDATE_GENES_URL = 'https://www.cbioportal.org/api/genes/fetch?geneIdType=HUGO_GENE_SYMBOL&projection=ID'\r\n static readonly MUTATION_EXP_STUDY_NAME = \"_mutations\";\r\n\r\n static readonly CNA_DELETION = -2;\r\n static readonly Z_SCORE_UPPER_THRESHOLD = 2;\r\n static readonly Z_SCORE_LOWER_THRESHOLD = -2;\r\n \r\n static readonly MUTATION = \"Mutation\";\r\n static readonly GENE_EXPRESSION = \"Gene Expression\";\r\n static readonly CNA = \"Copy Number Alteration\";\r\n\r\n getDataTypes(){\r\n return [CBioPortalAccessor.MUTATION, CBioPortalAccessor.GENE_EXPRESSION, CBioPortalAccessor.CNA];\r\n }\r\n\r\n /*\r\n * Retrieves all cancer studies from cBioPortal\r\n * **/\r\n fetchCancerStudies(callbackFunction)\r\n {\r\n var cancerStudies = {};\r\n var request = new XMLHttpRequest();\r\n request.onreadystatechange = function ()\r\n {\r\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\r\n {\r\n // By lines\r\n // Match all new line character representations\r\n var seperator = /\\r?\\n|\\r/;\r\n var lines = request.responseText.split(seperator);\r\n\r\n // start from first line skip node meta data\r\n for(var i = 1; i < lines.length; i++)\r\n {\r\n if (lines[i].length <= 0)\r\n continue;\r\n\r\n var lineData = lines[i].split('\\t');\r\n cancerStudies[lineData[0]] = lineData;\r\n }\r\n callbackFunction(cancerStudies);\r\n }\r\n else if (request.readyState === XMLHttpRequest.DONE && request.status !== 200)\r\n {\r\n toast.error(\"Could not retrieve studies!\");\r\n }\r\n };\r\n request.open(\"GET\", CBioPortalAccessor.GET_ALL_CANCER_STUDIES_URL);\r\n request.send();\r\n };\r\n\r\n /**\r\n * Retrieves all genetic profiles for given cancerStudy from cBioPortal\r\n */\r\n getSupportedGeneticProfiles(cancerStudy, callbackFunction)\r\n {\r\n var outData = {};\r\n var request = new XMLHttpRequest();\r\n var self = this;\r\n request.onreadystatechange = function ()\r\n {\r\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\r\n {\r\n // By lines\r\n // Match all new line character representations\r\n var seperator = /\\r?\\n|\\r/;\r\n var lines = request.responseText.split(seperator);\r\n\r\n // start from first line skip node meta data\r\n for(var i = 1; i < lines.length; i++)\r\n {\r\n if (lines[i].length <= 0)\r\n continue;\r\n\r\n var lineData = lines[i].split('\\t');\r\n var cancerProfileName = lineData[0];\r\n if(self.isSupportedCancerProfile(cancerProfileName))\r\n {\r\n outData[cancerProfileName] = lineData;\r\n }\r\n }\r\n\r\n callbackFunction(outData);\r\n }\r\n else if (request.readyState === XMLHttpRequest.DONE && request.status !== 200)\r\n {\r\n console.error(\"Error retrieving studies\");\r\n }\r\n };\r\n request.open(\"GET\", CBioPortalAccessor.GET_GENETIC_PROFILES_URL + cancerStudy);\r\n request.send();\r\n };\r\n\r\n isSupportedCancerProfile(cancerProfileName: string)\r\n {\r\n return (cancerProfileName.endsWith(CBioPortalAccessor.MRNA_EXP_STUDY_NAME) ||\r\n cancerProfileName.endsWith(CBioPortalAccessor.CNA_EXP_STUDY_NAME) ||\r\n cancerProfileName.endsWith(CBioPortalAccessor.MUTATION_EXP_STUDY_NAME));\r\n };\r\n\r\n static getDataType(cancerProfileName: string)\r\n {\r\n if ( cancerProfileName.endsWith(this.MRNA_EXP_STUDY_NAME))\r\n {\r\n return this.GENE_EXPRESSION;\r\n }\r\n else if ( cancerProfileName.endsWith(this.CNA_EXP_STUDY_NAME))\r\n {\r\n return this.CNA;\r\n }\r\n else if ( cancerProfileName.endsWith(this.MUTATION_EXP_STUDY_NAME))\r\n {\r\n return this.MUTATION;\r\n }\r\n\r\n return \"\";\r\n }\r\n \r\n\r\n calcAlterationPercentages(paramLines, geneticProfileId, callbackFunction)\r\n {\r\n // By lines\r\n // Match all new line character representations\r\n const seperator = /\\r?\\n|\\r/;\r\n const lines = paramLines.split(seperator);\r\n let startIndex = 0;\r\n\r\n //Find starting index of actual data skip commented lines\r\n for (const i in lines)\r\n {\r\n if(!lines[i].startsWith('#'))\r\n {\r\n startIndex = parseInt(i);\r\n break;\r\n }\r\n }\r\n\r\n //Total number of tumor samples in the response\r\n const tumorSamples = lines[startIndex].split('\\t');\r\n const numOfTumorSamples = tumorSamples.length - 2;\r\n const outData: {} = {};\r\n outData[geneticProfileId] = {};\r\n\r\n const geneticProfileType = CBioPortalAccessor.getDataType(geneticProfileId);\r\n // skip meta line and iterate over tumor sample data\r\n for(let i = startIndex + 1; i < lines.length; i++)\r\n {\r\n if (lines[i].length <= 0)\r\n continue;\r\n\r\n //Iterate over samples for each gene to calculate profile data\r\n const lineData: string[] = lines[i].split('\\t');\r\n let profileDataAlteration = 0;\r\n for(let j = 2; j < lineData.length; j++)\r\n {\r\n if(lineData[j] !== 'NaN')\r\n {\r\n if( geneticProfileType === CBioPortalAccessor.MUTATION )\r\n profileDataAlteration++;\r\n else if ( (geneticProfileType === CBioPortalAccessor.CNA) \r\n && ( parseInt(lineData[j]) === CBioPortalAccessor.CNA_GAIN || parseInt(lineData[j]) === CBioPortalAccessor.CNA_DELETION ) ){\r\n profileDataAlteration++;\r\n }\r\n else if ( (geneticProfileType === CBioPortalAccessor.GENE_EXPRESSION) \r\n && (parseFloat(lineData[j]) >= CBioPortalAccessor.Z_SCORE_UPPER_THRESHOLD \r\n || parseFloat(lineData[j]) <= CBioPortalAccessor.Z_SCORE_LOWER_THRESHOLD)){\r\n profileDataAlteration++;\r\n }\r\n }\r\n }\r\n\r\n //\r\n outData[geneticProfileId][lineData[1]] = ( profileDataAlteration / numOfTumorSamples ) * 100;\r\n }\r\n\r\n callbackFunction(outData);\r\n }\r\n\r\n\r\n /*\r\n *\r\n * Retrieves profile data associated with the parameters below from cBioPortal\r\n * @params\r\n {\r\n caseSetId: \"gbm_tcga\",\r\n geneticProfileId: \"gbm_tcga_mutations\",\r\n genes: [\"BRCA1\", \"BRCA2\", \"TP53\"]\r\n }\r\n * */\r\n getProfileData(params, callbackFunction)\r\n {\r\n //params\r\n //caseSetId, geneticProfileId, genes\r\n\r\n const outData = {};\r\n const request = new XMLHttpRequest();\r\n const self = this;\r\n request.onreadystatechange = function ()\r\n {\r\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\r\n {\r\n self.calcAlterationPercentages(request.responseText, params.geneticProfileId, callbackFunction);\r\n toast.success(params.geneticProfileId + \" has been succesfully loaded from cBioPortal.\");\r\n }\r\n };\r\n\r\n //Create query URL\r\n let queryURL = CBioPortalAccessor.GET_PROFILE_DATA_URL;\r\n //Fetch sequenced case list !!\r\n queryURL += \"&case_set_id=\" + params.caseSetId + \"_sequenced\";\r\n queryURL += \"&genetic_profile_id=\" + params.geneticProfileId;\r\n queryURL += \"&gene_list=\";\r\n let isFirst = true;\r\n for(const gene of params.genes)\r\n {\r\n if(!isFirst){\r\n queryURL += \"+\";\r\n } else {\r\n isFirst = false;\r\n }\r\n queryURL += gene;\r\n \r\n }\r\n request.open(\"GET\", queryURL);\r\n request.send();\r\n };\r\n\r\n validateGenes(nodeSymbols, editor: EditorActionsManager)\r\n {\r\n const request = new XMLHttpRequest();\r\n const self = this;\r\n\r\n request.onreadystatechange = function ()\r\n {\r\n if(request.readyState === XMLHttpRequest.DONE && request.status === 200)\r\n {\r\n const validGeneSymbols = JSON.parse(request.responseText);\r\n const validGeneArray = _.map(validGeneSymbols, function(object)\r\n {\r\n return object.hugoGeneSymbol;\r\n });\r\n editor.highlightInvalidGenes(validGeneArray);\r\n }\r\n };\r\n const queryURL = CBioPortalAccessor.VALIDATE_GENES_URL;\r\n request.open(\"POST\", queryURL);\r\n request.setRequestHeader(\"Content-type\", \"application/json\");\r\n request.send(JSON.stringify(nodeSymbols));\r\n }\r\n}\r\n","import autobind from \"autobind-decorator\";\r\nimport { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n FormControl,\r\n ListGroup,\r\n ListGroupItem,\r\n Modal,\r\n} from \"react-bootstrap\";\r\nimport { EModalType, IDataTypeMetaData } from \"../ui/react-pathway-mapper\";\r\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\r\n\r\ninterface IStudyModalProps {\r\n show: boolean;\r\n loadFromCBio: Function;\r\n handleClose: Function;\r\n}\r\n\r\n@observer\r\nexport default class StudyModal extends React.Component {\r\n @observable\r\n dataTypes: { [dataType: string]: IDataTypeMetaData } = {};\r\n\r\n @observable\r\n dataTypeFetchResultsReady: boolean = false;\r\n\r\n currentlySelectedItemIndex = -1;\r\n\r\n @observable\r\n selectedStudies: {\r\n data: any[];\r\n dataTypes: { [dataType: string]: IDataTypeMetaData };\r\n }[] = [];\r\n\r\n checkboxModalPosition: {\r\n bottom: number;\r\n } = {\r\n bottom: 0,\r\n };\r\n\r\n @observable\r\n selectedDataTypesPerStudy: string[] = [];\r\n\r\n @observable\r\n itemArray: any[] = [];\r\n\r\n @observable\r\n searchQuery: string = \"\";\r\n\r\n @observable\r\n showDataTypeSelectionModal = false;\r\n\r\n @observable\r\n studyListItemCheckboxChecked: boolean[] = [];\r\n\r\n @observable\r\n selectedStudyData: any[];\r\n\r\n @observable\r\n portalAccessor: CBioPortalAccessor;\r\n\r\n constructor(props: IStudyModalProps) {\r\n super(props);\r\n makeObservable(this);\r\n this.selectedStudyData = [];\r\n this.portalAccessor = new CBioPortalAccessor();\r\n this.fetchStudy();\r\n }\r\n\r\n @action.bound\r\n setDataTypeFetchResultsReady(ready: boolean) {\r\n this.dataTypeFetchResultsReady = ready;\r\n }\r\n\r\n @action.bound\r\n setItemArray(itemArray: any[]) {\r\n this.itemArray = itemArray;\r\n }\r\n\r\n @action.bound\r\n setSearchQuery(query: string) {\r\n this.searchQuery = query;\r\n }\r\n\r\n @action.bound\r\n setSelectedStudyData(data: any[]) {\r\n this.selectedStudyData = data;\r\n }\r\n\r\n @action.bound\r\n setDataTypeProperties(dataType: string, properties: IDataTypeMetaData) {\r\n this.dataTypes[dataType] = properties;\r\n }\r\n\r\n @action.bound\r\n initStudyListItemCheckboxChecked(studyCount: number) {\r\n this.studyListItemCheckboxChecked = Array(studyCount).fill(false);\r\n }\r\n\r\n @action.bound\r\n initSelectedDataTypesPerStudy(studyCount: number) {\r\n this.selectedDataTypesPerStudy = Array(studyCount).fill(\"\");\r\n }\r\n\r\n @action.bound\r\n toggleStudyListItemCheckboxChecked(studyIndex: number) {\r\n this.studyListItemCheckboxChecked[studyIndex] = !this\r\n .studyListItemCheckboxChecked[studyIndex];\r\n }\r\n\r\n @action.bound\r\n addSelectedStudy(selectedStudy: {\r\n data: any[];\r\n dataTypes: { [dataType: string]: IDataTypeMetaData };\r\n }) {\r\n this.selectedStudies.push(selectedStudy);\r\n }\r\n\r\n @action.bound\r\n removeSelectedStudy(selectedStudyData: any[]) {\r\n this.selectedStudies = this.selectedStudies.filter(\r\n (study) => study.data[0] != selectedStudyData[0]\r\n );\r\n }\r\n\r\n @action.bound\r\n clearSelectedStudies() {\r\n this.selectedStudies = [];\r\n }\r\n\r\n @action.bound\r\n setShowDataTypeSelectionModal(show: boolean) {\r\n this.showDataTypeSelectionModal = show;\r\n }\r\n\r\n @action.bound\r\n clearStudyCheckboxesChecked() {\r\n const length = this.studyListItemCheckboxChecked.length;\r\n this.studyListItemCheckboxChecked = Array(length).fill(false);\r\n }\r\n\r\n @action.bound\r\n clearSelectedDataTypesPerStudy() {\r\n const length = this.studyListItemCheckboxChecked.length;\r\n this.selectedDataTypesPerStudy = Array(length).fill(\"\");\r\n }\r\n\r\n @action.bound\r\n unselectDataTypesForStudy(index: number) {\r\n this.selectedDataTypesPerStudy[index] = \"\";\r\n }\r\n\r\n preparePortalAccess(studyId: string) {\r\n this.setDataTypeFetchResultsReady(false);\r\n this.portalAccessor.getSupportedGeneticProfiles(studyId, (data) => {\r\n this.disableAllDataTypes();\r\n // Iterate through profiles\r\n for (const profile of Object.keys(data)) {\r\n const type = CBioPortalAccessor.getDataType(profile);\r\n if (type !== \"\") {\r\n this.setDataTypeProperties(type, {\r\n ...this.dataTypes[type],\r\n enabled: true,\r\n profile: profile,\r\n });\r\n setTimeout(() => this.setDataTypeFetchResultsReady(true), 500);\r\n }\r\n }\r\n });\r\n }\r\n\r\n disableAllDataTypes() {\r\n for (const dataType of Object.keys(this.dataTypes)) {\r\n this.setDataTypeProperties(dataType, {\r\n enabled: false,\r\n checked: false,\r\n profile: undefined,\r\n });\r\n }\r\n }\r\n\r\n getSelectedStudiesCount() {\r\n let selectedStudiesCount = 0;\r\n for (const study of Object.values(this.selectedStudies)) {\r\n for (const dataTypeOfStudy of Object.values(study.dataTypes)) {\r\n selectedStudiesCount += dataTypeOfStudy.checked === true ? 1 : 0;\r\n }\r\n }\r\n return selectedStudiesCount;\r\n }\r\n\r\n getCheckedDatas(dataTypes: { [dataType: string]: IDataTypeMetaData }) {\r\n let checkedDatasCount = 0;\r\n for (const dataTypee of Object.values(dataTypes)) {\r\n checkedDatasCount += dataTypee.checked === true ? 1 : 0;\r\n }\r\n return checkedDatasCount;\r\n }\r\n\r\n fetchStudy() {\r\n this.portalAccessor.getDataTypes().forEach((dataType) => {\r\n this.setDataTypeProperties(dataType, {\r\n enabled: false,\r\n checked: false,\r\n profile: undefined,\r\n });\r\n });\r\n\r\n this.portalAccessor.fetchCancerStudies((cancerStudies: any) => {\r\n let temp = [];\r\n for (const studyTitle in cancerStudies) {\r\n if (!cancerStudies.hasOwnProperty(studyTitle)) {\r\n continue;\r\n }\r\n const studyData = cancerStudies[studyTitle];\r\n temp.push(studyData);\r\n }\r\n const numOfStudies = temp.length;\r\n this.initStudyListItemCheckboxChecked(numOfStudies);\r\n this.initSelectedDataTypesPerStudy(numOfStudies);\r\n\r\n this.setItemArray(temp);\r\n });\r\n }\r\n\r\n @autobind\r\n resetModal() {\r\n this.disableAllDataTypes();\r\n this.setSelectedStudyData([]);\r\n this.clearSelectedStudies();\r\n this.clearStudyCheckboxesChecked();\r\n this.clearSelectedDataTypesPerStudy();\r\n this.currentlySelectedItemIndex = -1;\r\n this.searchQuery = \"\";\r\n }\r\n\r\n @autobind\r\n handleCheckboxClick(dataType) {\r\n this.setDataTypeProperties(dataType, {\r\n ...this.dataTypes[dataType],\r\n checked: !this.dataTypes[dataType].checked,\r\n });\r\n }\r\n\r\n @computed\r\n get selectedStudyDataTitle() {\r\n if (this.selectedStudyData.length > 1) {\r\n return this.selectedStudyData[1] || \"Choose study\";\r\n } else {\r\n return \"Choose study\";\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n {\r\n this.props.handleClose(EModalType.STUDY);\r\n this.resetModal();\r\n }}\r\n >\r\n \r\n Profile Data from cBioPortal\r\n \r\n \r\n \r\n

Select Cancer Study

\r\n
\r\n this.setSearchQuery(event.target.value)}\r\n />\r\n \r\n \r\n {this.itemArray.length < 1 ? (\r\n Fetching studies from cBioPortal...\r\n ) : (\r\n this.itemArray\r\n .map((item, index) => {\r\n return { item: item, index: index };\r\n })\r\n .filter((obj) =>\r\n obj.item[1]\r\n .toLowerCase()\r\n .includes(this.searchQuery.toLowerCase())\r\n )\r\n .map((obj) => {\r\n const item = obj.item;\r\n const index = obj.index;\r\n\r\n const studyTitle = item[1];\r\n const studyId = item[0];\r\n return (\r\n \r\n {\r\n const boundingRect = document\r\n .getElementById(\"listgroupitem\" + index)\r\n .getBoundingClientRect();\r\n const modalMargin = 30;\r\n this.checkboxModalPosition = {\r\n bottom: boundingRect.bottom - modalMargin,\r\n };\r\n this.setSelectedStudyData(item);\r\n this.preparePortalAccess(studyId);\r\n this.toggleStudyListItemCheckboxChecked(index);\r\n this.currentlySelectedItemIndex = index;\r\n\r\n if (this.studyListItemCheckboxChecked[index]) {\r\n this.setShowDataTypeSelectionModal(true);\r\n } else {\r\n this.removeSelectedStudy(item);\r\n this.unselectDataTypesForStudy(index);\r\n }\r\n }}\r\n >\r\n {studyTitle}\r\n \r\n {this.selectedDataTypesPerStudy[index] != \"\" && (\r\n \r\n {this.selectedDataTypesPerStudy[index]}\r\n \r\n )}\r\n \r\n );\r\n })\r\n )}\r\n \r\n
\r\n \r\n \r\n Warning: At most six different data sets will be overlayed\r\n on the genes. You can toggle which ones are to be displayed via\r\n \"Alteration %\" {\">\"} \"View Settings\" menu.\r\n

\r\n
\r\n {\r\n this.setShowDataTypeSelectionModal(false);\r\n }}\r\n >\r\n \r\n {this.dataTypeFetchResultsReady === false ? (\r\n Fetching data types from cBioPortal...\r\n ) : (\r\n Object.keys(this.dataTypes).map((dataType: string) => {\r\n return (\r\n {\r\n this.handleCheckboxClick(dataType);\r\n }}\r\n checked={this.dataTypes[dataType].checked}\r\n >\r\n {dataType}\r\n \r\n );\r\n })\r\n )}\r\n \r\n \r\n {\r\n const currentDataTypes = { ...this.dataTypes };\r\n const selectedCount = Object.keys(currentDataTypes).filter(\r\n (dataType) => {\r\n return currentDataTypes[dataType].checked;\r\n }\r\n ).length;\r\n if (selectedCount == 0) {\r\n this.studyListItemCheckboxChecked[\r\n this.currentlySelectedItemIndex\r\n ] = false;\r\n }\r\n this.setShowDataTypeSelectionModal(false);\r\n }}\r\n >\r\n Cancel\r\n \r\n {\r\n const currentDataTypes = { ...this.dataTypes };\r\n this.addSelectedStudy({\r\n data: this.selectedStudyData,\r\n dataTypes: currentDataTypes,\r\n });\r\n this.selectedDataTypesPerStudy[\r\n this.currentlySelectedItemIndex\r\n ] = Object.keys(currentDataTypes)\r\n .filter((dataType) => {\r\n return currentDataTypes[dataType].checked;\r\n })\r\n .join(\", \");\r\n this.setShowDataTypeSelectionModal(false);\r\n }}\r\n >\r\n Add\r\n \r\n \r\n \r\n \r\n\r\n \r\n {\r\n this.selectedStudies.forEach((study) => {\r\n this.props.loadFromCBio(study.dataTypes, study.data);\r\n });\r\n this.props.handleClose(EModalType.STUDY);\r\n this.resetModal();\r\n }}\r\n >\r\n Load Data\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import autobind from \"autobind-decorator\";\r\nimport { action, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from 'react';\r\nimport { Checkbox, DropdownButton, MenuItem } from \"react-bootstrap\";\r\nimport PathwayActions from '../utils/PathwayActions.js';\r\nimport { IPathwayMapperTable, PMParameters } from \"./react-pathway-mapper\";\r\n\r\ninterface IRankingProps{\r\n pathwayActions: PathwayActions;\r\n bestPathwaysAlgos: any[][];\r\n tableComponent: (data: IPathwayMapperTable[], selectedPathway: string, onPathwaySelect: (pathway: string) => void) => JSX.Element;\r\n patientView ?: boolean;\r\n currentPathway?: string;\r\n rankingChoices?: PMParameters;\r\n updateRankingChoices ?: (drowDownTitle : string, isAlterationEnabled: number, considerOnlyTCGAPanPathways : boolean, \r\n isPercentageMatch : number, selectedPathway : string) =>void;\r\n}\r\n\r\nconst TCGA_PANCAN_PATHWAY_NAMES = [\r\n \"Cell Cycle\", \r\n \"HIPPO\", \r\n \"MYC\",\r\n \"NOTCH\",\r\n \"NRF2\",\r\n \"PI3K\",\r\n \"RTK-RAS\",\r\n \"TGF-Beta\",\r\n \"TP53\",\r\n \"WNT\"\r\n];\r\n\r\n\r\n@observer\r\nexport default class Ranking extends React.Component{\r\n // @observable\r\n bestPathways: any[];\r\n\r\n // @observable\r\n shownPathways: any[];\r\n\r\n @observable\r\n dropDownTitle: string;\r\n\r\n @observable\r\n selectedPathway: string;\r\n isPercentageMatch: number;\r\n isAlterationEnabled: number;\r\n\r\n @observable\r\n considerOnlyTCGAPanPathways: boolean;\r\n\r\n @observable\r\n isExpanded: boolean;\r\n\r\n @observable\r\n rankingCriteria : number = 0;\r\n\r\n readonly COUNT_PERC_EXPLANATION = \"Whether we should favor the number of genes of interest matching the ones in a pathway or the percentage of such genes in that pathway. For instance, suppose genes of interest are A, B, and C, and the pathway contains genes B, C, D, and E. When we consider count, the score is 2 (for the two genes that match). However, when we consider percentage the score will be 50% as 2 of the 4 genes in the pathway are among genes of interest.\";\r\n readonly ALTERATION_EXPLANATION = \"When this is checked, each matching gene will not directly contribute to the score as 1 unit but with the alteration frequency percentage of that gene. For instance, suppose genes of interest are A, B, and C with alteration frequencies of 0.5, 0.2, and 0.3, respectively, and the pathway contains genes B, C, D, and E. When this is option isn't checked, the score will be 2 for match count and 50% for the match percentage. However, when this option is checked, the scores will be 0.2+0.3=0.5 and (0.2+0.3)/4=12.5% for match count and percentage, respectively.\";\r\n readonly TCGA_PANCAN_EXPLANATION = \"The pathways listed above were retrieved from PathwayMapper. When this option is checked, only the pathways under TCGA > PanCanAtlas will be shown. Uncheck to show all.\";\r\n\r\n constructor(props: IRankingProps){\r\n super(props);\r\n makeObservable(this);\r\n \r\n this.isPercentageMatch = (this.props.rankingChoices !== undefined ? this.props.rankingChoices.isPercentageMatch : 0 );\r\n this.isAlterationEnabled = (this.props.rankingChoices !== undefined ? this.props.rankingChoices.isAlterationEnabled : 0 );\r\n this.considerOnlyTCGAPanPathways = (this.props.rankingChoices !== undefined ? this.props.rankingChoices.considerOnlyTCGAPanPathways : true );\r\n this.dropDownTitle = (this.props.rankingChoices !== undefined ? this.props.rankingChoices.dropDownTitle : \"Match count\" );\r\n this.isExpanded = false;\r\n this.onApplyClick();\r\n if( this.props.currentPathway !== undefined && this.props.currentPathway.length > 0){\r\n this.selectedPathway = this.props.currentPathway;\r\n }\r\n else {\r\n this.selectedPathway = this.shownPathways[0].pathwayName;\r\n }\r\n }\r\n\r\n @autobind \r\n updateRankingChoices(){\r\n if( this.props.updateRankingChoices !== undefined){\r\n this.props.updateRankingChoices(this.dropDownTitle, this.isAlterationEnabled, this.considerOnlyTCGAPanPathways, this.isPercentageMatch, this.selectedPathway);\r\n }\r\n };\r\n\r\n @autobind\r\n setBestPathwayMethod(i: number){\r\n this.bestPathways = this.props.bestPathwaysAlgos[i];\r\n this.filterBestPathwaysByTCGAPanPathways();\r\n }\r\n\r\n @autobind\r\n onPathwayClick(pathway: string){\r\n this.selectedPathway = pathway;\r\n this.updateRankingChoices();\r\n this.props.pathwayActions.changePathway(this.selectedPathway);\r\n }\r\n\r\n @autobind\r\n onApplyClick(){\r\n // Mapping from dropdown + checkbox selection to pathway method.\r\n this.setBestPathwayMethod(2 * this.isAlterationEnabled + this.isPercentageMatch);\r\n this.rankingCriteria = 2 * this.isAlterationEnabled + this.isPercentageMatch;\r\n }\r\n\r\n @action.bound \r\n filterBestPathwaysByTCGAPanPathways() {\r\n this.shownPathways = this.bestPathways.filter((data: any) => {\r\n if (this.considerOnlyTCGAPanPathways) {\r\n return TCGA_PANCAN_PATHWAY_NAMES.indexOf(data.pathwayName) > -1;\r\n }\r\n return true;\r\n });\r\n // change selected pathway if we are filtered and doesn't exist\r\n if (this.considerOnlyTCGAPanPathways \r\n && TCGA_PANCAN_PATHWAY_NAMES.indexOf(this.selectedPathway) < 0) {\r\n this.selectedPathway = this.shownPathways[0].pathwayName;\r\n this.props.pathwayActions.changePathway(this.selectedPathway);\r\n }\r\n }\r\n\r\n @action.bound\r\n toggleConsiderOnlyTCGAPanPathways() {\r\n this.considerOnlyTCGAPanPathways = !this.considerOnlyTCGAPanPathways;\r\n this.updateRankingChoices();\r\n this.filterBestPathwaysByTCGAPanPathways();\r\n }\r\n\r\n\r\n componentDidMount(): void {\r\n this.props.pathwayActions.changePathway(this.selectedPathway);\r\n }\r\n\r\n render(){\r\n const lengthThreshold = 13;\r\n this.setBestPathwayMethod(this.rankingCriteria);\r\n \r\n return (\r\n
\r\n\r\n {/*\r\n
\r\n  Pathways\r\n
*/}\r\n\r\n { this.props.tableComponent &&\r\n this.props.tableComponent(\r\n this.shownPathways.map((data: any) => ({\r\n name: data.pathwayName, score: data.score, genes: data.genesMatched\r\n })),\r\n this.selectedPathway,\r\n this.onPathwayClick)\r\n }\r\n {\r\n
\r\n \r\n Show TCGA PanCancer Atlas pathways only  \r\n \r\n \r\n \r\n
\r\n }\r\n {(!this.props.patientView &&\r\n
\r\n {\r\n
\r\n \r\n  Ranking options\r\n \r\n
\r\n }\r\n
\r\n \r\n {this.isPercentageMatch = 0; this.dropDownTitle = \"Match count\"; this.onApplyClick(); this.updateRankingChoices();} }>Match count\r\n {this.isPercentageMatch = 1; this.dropDownTitle = \"Match percentage\"; this.onApplyClick(); this.updateRankingChoices();}}>Match percentage\r\n \r\n   \r\n
\r\n\r\n {this.isAlterationEnabled = (this.isAlterationEnabled === 1) ? 0 : 1; this.onApplyClick(); this.updateRankingChoices();}}\r\n style={{fontSize: \"13px\", marginTop: \"18px\", bottom: \"4px\"}} checked = {this.isAlterationEnabled === 1}>\r\n Consider alteration frequency  \r\n \r\n \r\n
\r\n
\r\n )}\r\n
\r\n \r\n );\r\n \r\n }\r\n\r\n \r\n}\r\n","import { makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from 'react';\r\n// @ts-ignore\r\nimport openImage from \"../images/toolbar/edit.svg\";\r\n// @ts-ignore\r\nimport layoutImage from \"../images/toolbar/layout-cose.svg\";\r\n// @ts-ignore\r\nimport savePNGImage from \"../images/toolbar/save_png.svg\";\r\n// @ts-ignore\r\nimport saveSVGImage from \"../images/toolbar/save_svg.svg\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport { EModalType, IAlterationData, IPathwayMapperTable } from '../ui/react-pathway-mapper';\r\nimport PathwayActions from '../utils/PathwayActions';\r\n// @ts-ignore\r\nconst addSelImage = require(\"../images/toolbar/add-selected.svg\");\r\n// @ts-ignore\r\nconst addAllImage = require(\"../images/toolbar/add-all.svg\");\r\n// @ts-ignore\r\nconst aboutImage = require(\"../images/toolbar/about.svg\");\r\n\r\ninterface IToolbarProps {\r\n pathwayActions: PathwayActions;\r\n selectedPathway: string;\r\n alterationData: IAlterationData;\r\n handleOpen: (modalId: number) => void;\r\n genes: any[];\r\n validGenes: any;\r\n showMessage: (message: string) => void;\r\n pathwayGenes: string[];\r\n onAddGenes: (selectedGenes: string[]) => void;\r\n patientView ?: boolean;\r\n genesSelectionComponent?: () => JSX.Element;\r\n groupComparisonView?: boolean;\r\n}\r\n\r\n@observer\r\nexport default class Toolbar extends React.Component{\r\n\r\n @observable\r\n selectedGenes: string[];\r\n\r\n @observable\r\n private editor: EditorActionsManager;\r\n constructor(props: IToolbarProps){\r\n super(props);\r\n makeObservable(this);\r\n\r\n this.selectedGenes = [];\r\n }\r\n \r\n render(){\r\n\r\n const studyQuery = \"q=\" + JSON.stringify(this.props.alterationData) + \"&g=\" + this.props.genes.map(gene => gene.hugoGeneSymbol).join(\"+\");\r\n return (\r\n
\r\n {this.props.pathwayActions.saveAs(\"PNG\");}}/>\r\n\r\n {this.props.pathwayActions.saveAs(\"SVG\");}}/>\r\n\r\n \r\n {(!this.props.patientView && !this.props.groupComparisonView && [\r\n {\r\n this.selectedGenes = this.props.pathwayActions.getSelectedNodes()\r\n .filter((node: any) => node.data().type === \"GENE\")\r\n .map((node: any) => node.data().name as string);\r\n\t const noneGeneList = this.props.pathwayActions.getSelectedNodes()\r\n .filter((node: any) => node.data().type !== \"GENE\")\r\n .map((node: any) => node.data().name as string);\r\n const invalidGenes: string[] = [];\r\n\t let message = \"\";\r\n if(noneGeneList.length > 0){\r\n message += \"Selection contains nodes that are not genes: \" + noneGeneList.join(', ') + \". \";\r\n }\r\n\r\n this.selectedGenes.forEach((gene: string) => {\r\n if(!this.props.validGenes.hasOwnProperty(gene)){\r\n invalidGenes.push(gene);\r\n }\r\n });\r\n\r\n if(invalidGenes.length === 0){\r\n\r\n if(this.selectedGenes.length > 0 && noneGeneList.length === 0){\r\n this.props.onAddGenes(this.selectedGenes);\r\n }\r\n } else {\r\n\t message += \"Following gene symbols are invalid or already in gene list: \" + invalidGenes.join(\", \") + \".\";\r\n }\r\n\r\n\t if(message.length > 0) {\r\n\t this.props.showMessage(message);\r\n\t }\r\n }}/>\r\n ,\r\n \r\n {\r\n\r\n this.selectedGenes = this.props.pathwayGenes.filter((gene: string) => {\r\n return this.props.validGenes.hasOwnProperty(gene);\r\n });\r\n \r\n if(this.selectedGenes.length > 0){\r\n this.props.onAddGenes(this.selectedGenes);\r\n }\r\n }}/>,\r\n \r\n\r\n !this.props.groupComparisonView && {{window.open(\"http://pathwaymapper.org/?pathwayName=\" + this.props.selectedPathway +\"&\"+ studyQuery )}}}/>\r\n ])}\r\n {this.props.handleOpen(EModalType.CHELP); }}/>\r\n { this.props.genesSelectionComponent && this.props.genesSelectionComponent()}\r\n
);\r\n }\r\n}\r\n","import autobind from \"autobind-decorator\";\r\nimport { action, computed, makeObservable, observable } from \"mobx\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport FileOperationsManager, {\r\n IPathwayInfo\r\n} from \"../managers/FileOperationsManager\";\r\nimport GridOptionsManager from \"../managers/GridOptionsManager\";\r\nimport ViewOperationsManager from \"../managers/ViewOperationsManager\";\r\nimport ConfirmationModal from \"../modals/ConfirmationModal\";\r\nimport { EGridType } from \"../modals/GridSettings\";\r\nimport { ILayoutProperties } from \"../modals/LayoutProperties\";\r\nimport {\r\n EModalType, IPathwayData, IProfileMetaData\r\n} from \"../ui/react-pathway-mapper\";\r\nimport SaveLoadUtility from \"./SaveLoadUtility\";\r\n\r\nexport default class PathwayActions {\r\n @observable\r\n selectedPathway: string;\r\n fileManager: FileOperationsManager;\r\n editor: EditorActionsManager;\r\n undoRedoManager: any;\r\n pathwayHandler: (pathwayName: string) => void;\r\n handleOpen: (modalId: EModalType) => void;\r\n eh: any;\r\n profiles: IProfileMetaData[];\r\n gridOptionsManager: GridOptionsManager;\r\n\r\n uploader: any;\r\n merger: any;\r\n isCBioPortal: boolean;\r\n isCollaborative: boolean;\r\n viewOperationsManager: ViewOperationsManager;\r\n overlayUploader: any;\r\n\r\n @observable\r\n enabledType: EGridType;\r\n\r\n private updatePathwayTitle :(string) => void;\r\n\r\n constructor(\r\n pathwayHandler: (pathwayName: string) => void,\r\n profiles: IProfileMetaData[],\r\n fileManager: FileOperationsManager,\r\n handleOpen: (modalId: EModalType) => void,\r\n isCBioPortal: boolean,\r\n isCollaborative: boolean\r\n ) {\r\n makeObservable(this);\r\n this.pathwayHandler = pathwayHandler;\r\n this.profiles = profiles;\r\n this.fileManager = fileManager;\r\n this.handleOpen = handleOpen;\r\n this.isCBioPortal = isCBioPortal;\r\n this.isCollaborative = isCollaborative;\r\n this.enabledType = EGridType.NONE;\r\n }\r\n\r\n @action.bound\r\n addProfile(profile: IProfileMetaData) {\r\n this.profiles.push(profile);\r\n }\r\n\r\n @action.bound\r\n clearProfiles() {\r\n this.profiles.length = 0;\r\n }\r\n\r\n emphasizeQueryGenes(queryGenes: string[]) {\r\n if (this.editor)\r\n this.editor.cy.nodes().forEach((node: any) => {\r\n const nodeName = node.data().name;\r\n const nodeType = node.data().type;\r\n if (queryGenes.includes(nodeName) && nodeType === \"GENE\") {\r\n node.style({ \"border-width\": \"4px\", \"font-weight\": \"bold\" });\r\n }\r\n else{\r\n node.style({\"border-width\": \"2px\", \"font-weight\": \"normal\"});\r\n }\r\n });\r\n }\r\n\r\n getSelectedNodes() {\r\n return this.editor.cy.nodes(\":selected\");\r\n }\r\n\r\n setLayoutProperties(layoutProperties: ILayoutProperties) {\r\n this.editor.saveLayoutProperties(layoutProperties);\r\n }\r\n\r\n doesCyHaveElements() {\r\n return this.editor.cy.elements().length > 0;\r\n }\r\n\r\n @autobind\r\n toggleGrid(isEnabled: boolean) {\r\n this.gridOptionsManager.setSnapToGuidelines(false);\r\n this.gridOptionsManager.setShowGrid(isEnabled);\r\n }\r\n\r\n @autobind\r\n toggleGuide(isEnabled: boolean) {\r\n this.gridOptionsManager.setSnapToGuidelines(isEnabled);\r\n this.gridOptionsManager.setShowGrid(false);\r\n }\r\n\r\n adjustGridSettings(gridSize: number, color: string) {\r\n this.gridOptionsManager.currentProperties.gridSpacing = gridSize;\r\n this.gridOptionsManager.currentProperties.guidelinesStyle.strokeStyle = color;\r\n this.gridOptionsManager.currentProperties.guidelinesStyle.horizontalDistColor = color;\r\n this.gridOptionsManager.currentProperties.guidelinesStyle.verticalDistColor = color;\r\n }\r\n\r\n @autobind\r\n resizeToContent() {\r\n this.editor.resizeNodesToContent(this.editor.cy.nodes());\r\n }\r\n\r\n @autobind\r\n align(param: string) {\r\n this.viewOperationsManager.handleNodeAlignment(param);\r\n }\r\n\r\n @autobind\r\n onChangeFile(e: any, isMerge: boolean) {\r\n const file = e.target.files[0] as File;\r\n this.processFile(file, isMerge);\r\n //Can't load the same file twice in a row without this\r\n e.target.value = \"\";\r\n }\r\n\r\n uploadOverlay() {\r\n this.overlayUploader.click();\r\n }\r\n\r\n overlayFromText(file: File) {\r\n // Create a new FormData object.\r\n const formData = new FormData();\r\n formData.append(\"graphFile\", file);\r\n const request = new XMLHttpRequest();\r\n request.onreadystatechange = () => {\r\n if (\r\n request.readyState === XMLHttpRequest.DONE &&\r\n request.status === 200\r\n ) {\r\n const linesOfData = request.responseText.split(\"\\n\");\r\n if (linesOfData.length > 0) {\r\n const profileIdsFromFile = linesOfData[0].split(\"\\t\").slice(1);\r\n profileIdsFromFile.forEach(id =>\r\n this.addProfile({ profileId: id, enabled: true })\r\n );\r\n } else {\r\n console.log(\"Error: No valid data\");\r\n }\r\n this.editor.addGenomicData(request.responseText, false);\r\n }\r\n };\r\n request.open(\"POST\", \"/loadGraph\");\r\n request.send(formData);\r\n }\r\n\r\n @autobind\r\n upload() {\r\n if (this.editor.cy.elements().length > 0) {\r\n this.handleOpen(EModalType.CONFIRMATION);\r\n ConfirmationModal.pendingFunction = () => {\r\n this.uploader.click();\r\n };\r\n } else {\r\n this.uploader.click();\r\n }\r\n }\r\n\r\n @autobind\r\n merge() {\r\n this.merger.click();\r\n }\r\n\r\n setOverlayUploader(inputRef: any) {\r\n this.overlayUploader = inputRef;\r\n }\r\n\r\n @autobind\r\n setUploaders(inputRef: any, isMerge: boolean) {\r\n if (isMerge) this.merger = inputRef;\r\n else this.uploader = inputRef;\r\n }\r\n\r\n @computed\r\n get getPathwayInfo() {\r\n return this.fileManager.getPathwayInfo;\r\n }\r\n\r\n @autobind\r\n setPathwayInfo(other: IPathwayInfo) {\r\n this.fileManager.setPathwayInfo(other);\r\n }\r\n\r\n @autobind\r\n undo() {\r\n this.undoRedoManager.undo();\r\n }\r\n\r\n @autobind\r\n redo() {\r\n this.undoRedoManager.redo();\r\n }\r\n\r\n @autobind\r\n export(isSIFNX: boolean) {\r\n //this.editor.cy.remove('.eh-handle');\r\n this.eh.hide();\r\n this.fileManager.saveGraph(isSIFNX, this.editor);\r\n }\r\n\r\n @autobind\r\n resetUndoStack() {\r\n this.undoRedoManager.reset();\r\n }\r\n\r\n @autobind\r\n newPathway() {\r\n const commitNewPathway = () => {\r\n this.editor.removeAllElements();\r\n this.fileManager.setPathwayInfo({\r\n pathwayTitle: \"New Pathway\",\r\n pathwayDetails: \"\"\r\n });\r\n //this.removeAllData()\r\n this.resetUndoStack();\r\n this.pathwayHandler(\"Dummy\");\r\n };\r\n\r\n if (this.editor.cy.elements().length > 0) {\r\n this.handleOpen(EModalType.CONFIRMATION);\r\n ConfirmationModal.pendingFunction = commitNewPathway;\r\n } else {\r\n commitNewPathway();\r\n }\r\n }\r\n\r\nchangePathwayTitle(pathwayTitle : string){\r\n this.updatePathwayTitle( pathwayTitle);\r\n}\r\n\r\n @autobind\r\n changePathway(pathwayName: string) {\r\n this.pathwayHandler(pathwayName);\r\n if (!this.isCBioPortal) {\r\n this.fileManager.setPathwayInfo({\r\n pathwayTitle: pathwayName,\r\n pathwayDetails: \"\",\r\n });\r\n // At the beginning changePathway is called editor is not ready hence removeData shall not be called\r\n if (this.editor) {\r\n //this.removeAllData()\r\n this.resetUndoStack();\r\n }\r\n }\r\n }\r\n\r\n @autobind\r\n highlightNeighbours() {\r\n this.editor.highlightNeighbors();\r\n }\r\n\r\n @autobind\r\n highlightSelected() {\r\n this.editor.highlightSelected();\r\n }\r\n\r\n @autobind\r\n validateGenes() {\r\n this.editor.validateGenes();\r\n }\r\n\r\n @autobind\r\n showAll() {\r\n this.editor.showAllNodes();\r\n }\r\n\r\n @autobind\r\n hideSelected() {\r\n this.editor.hideSelectedNodes();\r\n }\r\n\r\n @autobind\r\n deleteSelected() {\r\n const selectedEles = this.editor.cy.elements(\":selected\");\r\n this.editor.removeElement(selectedEles);\r\n }\r\n\r\n @autobind\r\n addEdge(edgeTypeIndex: number) {\r\n // @ts-ignore\r\n window.edgeAddingMode = edgeTypeIndex + 1;\r\n if (edgeTypeIndex === -1) {\r\n this.eh.disable();\r\n this.eh.hide();\r\n return;\r\n } else {\r\n // @ts-ignore\r\n this.eh.enable();\r\n }\r\n }\r\n\r\n @autobind\r\n changeNodeName(oldName: string, newName: string) {\r\n const cyNode = this.editor.cy.$('[name=\"' + oldName + '\"]')[0];\r\n this.editor.changeName(cyNode, newName);\r\n }\r\n\r\n @autobind\r\n addNode(nodeType) {\r\n const nodeData = {\r\n type: nodeType.toUpperCase(),\r\n name: \"New \" + nodeType,\r\n w: \"150\",\r\n h: \"52\"\r\n };\r\n const extent = this.editor.cy.extent();\r\n const posData = {\r\n x: (extent.x1 + extent.x2) / 2,\r\n y: (extent.y1 + extent.y2) / 2\r\n };\r\n\r\n this.editor.addNode(nodeData, posData);\r\n this.pathwayHandler(\"Additional Pathway\");\r\n }\r\n\r\n @autobind\r\n searchGene(geneName: string) {\r\n const selector = \"node[name @*= '\" + geneName + \"']\";\r\n const nodesContainingSearchedGene = this.editor.cy.filter(selector);\r\n let nodesToSelect = this.editor.cy.collection();\r\n nodesContainingSearchedGene.forEach(function(ele, index) {\r\n if (\r\n !ele.hasClass(\"highlightedNode\") &&\r\n !ele.hasClass(\"invalidGeneHighlight\")\r\n )\r\n nodesToSelect = nodesToSelect.union(ele);\r\n });\r\n this.editor.highlightBySearch(nodesToSelect);\r\n }\r\n\r\n @autobind\r\n removeAllData() {\r\n this.editor.removeGenomicData();\r\n this.clearProfiles();\r\n }\r\n\r\n @autobind\r\n removeAllHighlight() {\r\n this.editor.removeAllHighlight();\r\n }\r\n\r\n @autobind\r\n processFile(file: File, isMerge: boolean) {\r\n // Create a new FormData object.\r\n const formData = new FormData();\r\n formData.append(\"graphFile\", file);\r\n const request = new XMLHttpRequest();\r\n request.onreadystatechange = () => {\r\n if (request.readyState === XMLHttpRequest.DONE) {\r\n if (request.status === 200) {\r\n const pathwayData: IPathwayData = SaveLoadUtility.parseGraph(\r\n request.responseText,\r\n false\r\n );\r\n\r\n if (isMerge) {\r\n this.editor.mergeGraph(pathwayData.nodes, pathwayData.edges);\r\n const graphJSON = this.editor.cy.json();\r\n\r\n //TODO change file name maybe, probabyly not necessary ?\r\n // Pathway nodes and edges are now combination of both previous and new pathway.\r\n pathwayData.nodes = graphJSON.elements.nodes; //this.editor.cy.nodes().map((node) => ({data: node.data()}));\r\n pathwayData.edges = graphJSON.elements.edges; //this.editor.cy.edges().map((edge) => ({data: edge.data()}));\r\n pathwayData.title = \"Additional Pathway\";\r\n } else {\r\n this.editor.loadFile(pathwayData.nodes, pathwayData.edges);\r\n this.fileManager.setPathwayInfo({\r\n pathwayTitle: pathwayData.title,\r\n pathwayDetails: pathwayData.description\r\n });\r\n }\r\n\r\n this.pathwayHandler(pathwayData.title + \"_imported\");\r\n this.resetUndoStack();\r\n } else {\r\n console.error(\r\n \"Error processing file: \" +\r\n request.readyState +\r\n request.responseText\r\n );\r\n }\r\n }\r\n };\r\n request.open(\"POST\", \"/loadGraph\");\r\n request.send(formData);\r\n }\r\n\r\n @autobind\r\n saveAs(type: string) {\r\n if (type === \"SVG\") {\r\n this.fileManager.saveAsSVG(this.editor);\r\n } else if (type === \"PNG\") {\r\n this.fileManager.saveAsPNG(this.editor.cy);\r\n } else if (type === \"JPEG\") {\r\n this.fileManager.saveAsJPEG(this.editor.cy);\r\n }\r\n }\r\n\r\n @autobind\r\n editorHandler(\r\n editor,\r\n eh,\r\n undoRedoManager,\r\n viewOperationsManager: ViewOperationsManager,\r\n gridOptionsManager: GridOptionsManager\r\n ) {\r\n this.editor = editor;\r\n this.eh = eh;\r\n this.undoRedoManager = undoRedoManager;\r\n this.viewOperationsManager = viewOperationsManager;\r\n this.gridOptionsManager = gridOptionsManager;\r\n }\r\n\r\n @autobind\r\n exists(profileId: string){\r\n\r\n let exists = false;\r\n this.profiles.forEach((profile: IProfileMetaData) => {\r\n if(profile.profileId === profileId){\r\n exists = true;\r\n }\r\n });\r\n\r\n return exists;\r\n }\r\n\r\n @autobind\r\n loadSampleData() {\r\n const data =\r\n \"gene\\tlung\\tovarian\\tbreast\\n\" +\r\n \"PTEN\\t-7\\t-20\\t10\\n\" +\r\n \"NF1\\t-12\\t-4\\t30\\n\" +\r\n \"PIK3CA\\t18\\t40\\t-50\\n\" +\r\n \"KRAS\\t11\\t-5\\t0\\n\" +\r\n \"ZIYA\\t0\\t-2\\t0\\n\" +\r\n \"AKT1\\t3\\t30\\t-10\\n\" +\r\n \"AKT2\\t6\\t-3\\t20\\n\" +\r\n \"AKT3\\t6\\t-3\\t20\\n\" +\r\n \"\\n\";\r\n\r\n if (this.exists(\"lung\") || this.exists(\"ovarian\") || this.exists(\"breast\")) {\r\n return;\r\n } \r\n\r\n this.editor.addGenomicData(data, false);\r\n\r\n if (!this.isCollaborative) {\r\n this.addProfile({ profileId: \"lung\", enabled: this.profiles.length < 6 ? true : false });\r\n this.addProfile({ profileId: \"ovarian\", enabled: this.profiles.length < 6 ? true : false });\r\n this.addProfile({ profileId: \"breast\", enabled: this.profiles.length < 6 ? true : false });\r\n }\r\n \r\n }\r\n\r\n @autobind\r\n performLayout() {\r\n this.editor.performLayout();\r\n }\r\n}\r\n","import { makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport { Button, ButtonGroup, ButtonToolbar, FormControl, FormGroup, Glyphicon, InputGroup, Navbar, Form} from \"react-bootstrap\";\r\n// @ts-ignore\r\nimport aboutSvg from '../images/toolbar/about.svg';\r\n// @ts-ignore\r\nimport ahbSvg from '../images/toolbar/align/align-horizontal-bottom.svg';\r\n// @ts-ignore\r\nimport ahmSvg from '../images/toolbar/align/align-horizontal-middle.svg';\r\n// @ts-ignore\r\nimport ahtSvg from '../images/toolbar/align/align-horizontal-top.svg';\r\n// @ts-ignore\r\nimport avcSvg from '../images/toolbar/align/align-vertical-center.svg';\r\n// @ts-ignore\r\nimport avlSvg from '../images/toolbar/align/align-vertical-left.svg';\r\n// @ts-ignore\r\nimport avrSvg from '../images/toolbar/align/align-vertical-right.svg';\r\n// @ts-ignore\r\nimport deleteSvg from '../images/toolbar/delete-simple.svg';\r\n// @ts-ignore\r\nimport gridSvg from '../images/toolbar/grid.svg';\r\n// @ts-ignore\r\nimport guideSvg from '../images/toolbar/guidelines.svg';\r\n// @ts-ignore\r\nimport hideSvg from '../images/toolbar/hide-selected.svg';\r\n// @ts-ignore\r\nimport layoutSvg from '../images/toolbar/layout-cose.svg';\r\n// @ts-ignore\r\nimport layoutPropSvg from '../images/toolbar/layout-properties.svg';\r\n// @ts-ignore\r\nimport loadSvg from '../images/toolbar/load.svg';\r\n// @ts-ignore\r\nimport newSvg from '../images/toolbar/new.svg';\r\n// @ts-ignore\r\nimport portalSvg from '../images/toolbar/portal.svg';\r\n// @ts-ignore\r\nimport helpSvg from '../images/toolbar/quick-help.svg';\r\n// @ts-ignore\r\nimport redoSvg from '../images/toolbar/redo.svg';\r\n// @ts-ignore\r\nimport saveSvg from '../images/toolbar/save.svg';\r\n// @ts-ignore\r\nimport setingsSvg from '../images/toolbar/settings.svg';\r\n// @ts-ignore\r\nimport showSvg from '../images/toolbar/show-all.svg';\r\n// @ts-ignore\r\nimport undoSvg from '../images/toolbar/undo.svg';\r\nimport { EGridType } from \"../modals/GridSettings\";\r\nimport PathwayActions from \"../utils/PathwayActions\";\r\nimport { EModalType } from \"./react-pathway-mapper\";\r\n\r\n\r\ninterface IButtonbarProps {\r\n pathwayActions: PathwayActions;\r\n handleOpen: (modelId: EModalType) => void;\r\n}\r\n\r\ninterface ISVGFunction{\r\n svg: any;\r\n function: () => void;\r\n tooltip: string; \r\n isFocused?: boolean;\r\n}\r\n\r\n\r\n@observer\r\nexport default class Buttonbar extends React.Component{\r\n\r\n\r\n @observable\r\n private searchedGene: string;\r\n\r\n\r\n constructor(props: IButtonbarProps) {\r\n super(props);\r\n makeObservable(this);\r\n \r\n this.searchedGene = \"\";\r\n this.props.pathwayActions.enabledType = EGridType.NONE;\r\n }\r\n\r\n setEnabledType(newType: EGridType){\r\n if(newType === this.props.pathwayActions.enabledType){\r\n this.props.pathwayActions.enabledType = EGridType.NONE;\r\n } else {\r\n this.props.pathwayActions.enabledType = newType;\r\n }\r\n\r\n // Enabled type calculated\r\n\r\n if(this.props.pathwayActions.enabledType === EGridType.GRID){\r\n this.props.pathwayActions.toggleGrid(true);\r\n }\r\n else if(this.props.pathwayActions.enabledType === EGridType.GUIDE){\r\n this.props.pathwayActions.toggleGuide(true);\r\n } else {\r\n this.props.pathwayActions.toggleGrid(false); // This will disable both.\r\n }\r\n }\r\n render() {\r\n \r\n const fileFunctions: ISVGFunction[] = [\r\n {svg: newSvg, function: this.props.pathwayActions.newPathway, tooltip: \"New Pathway\"},\r\n {svg: loadSvg, function: this.props.pathwayActions.upload, tooltip: \"Import Pathway\" },\r\n {svg: saveSvg, function: () => {this.props.pathwayActions.export(false)}, tooltip: \"Export Pathway\"}];\r\n \r\n const modFunctions: ISVGFunction[] = [\r\n {svg: deleteSvg, function: this.props.pathwayActions.deleteSelected, tooltip: \"Delete Selected\"}];\r\n\r\n if(!this.props.pathwayActions.isCollaborative){\r\n modFunctions.push({svg: undoSvg, function: () => {this.props.pathwayActions.undo();}, tooltip: \"Undo\"},\r\n {svg: redoSvg, function: () => {this.props.pathwayActions.redo();}, tooltip: \"Redo\"});\r\n }\r\n const alignFunctions: ISVGFunction[] = [\r\n {svg: ahtSvg, function: () => {this.props.pathwayActions.align(\"hTop\");}, tooltip: \"Align Horizontal Top\"},\r\n {svg: ahmSvg, function: () => {this.props.pathwayActions.align(\"hMid\");}, tooltip: \"Align Horizontal Middle\"},\r\n {svg: ahbSvg, function: () => {this.props.pathwayActions.align(\"hBot\");}, tooltip: \"Align Horizontal Bottom\"},\r\n {svg: avlSvg, function: () => {this.props.pathwayActions.align(\"vLeft\");}, tooltip: \"Align Vertical Left\"},\r\n {svg: avcSvg, function: () => {this.props.pathwayActions.align(\"vCen\");}, tooltip: \"Align Vertical Center\"},\r\n {svg: avrSvg, function: () => {this.props.pathwayActions.align(\"vRight\");}, tooltip: \"Align Vertical Right\"}];\r\n \r\n const utilFunctions: ISVGFunction[] = [\r\n {isFocused: this.props.pathwayActions.enabledType === EGridType.GRID, svg: gridSvg, function: () => {this.setEnabledType(EGridType.GRID);}, tooltip: \"Enable Grid: Show and snap to grid\"},\r\n {isFocused: this.props.pathwayActions.enabledType === EGridType.GUIDE, svg: guideSvg, function: () => {this.setEnabledType(EGridType.GUIDE);}, tooltip: \"Enable Guidelines: Enable and snap to alignment guidelines\"}];\r\n\r\n const visibilityFunctions: ISVGFunction[] = [\r\n {svg: hideSvg, function: () => {this.props.pathwayActions.hideSelected();}, tooltip: \"Hide Selected\"},\r\n {svg: showSvg, function: () => {this.props.pathwayActions.showAll();}, tooltip: \"Show All\"}];\r\n\r\n const layoutFunctions: ISVGFunction[] = [\r\n {svg: layoutSvg, function: () => {this.props.pathwayActions.performLayout();}, tooltip: \"Perform Layout\"},\r\n {svg: layoutPropSvg, function: () => {this.props.handleOpen(EModalType.LAYOUT);}, tooltip: \"Layout Properties\"}];\r\n\r\n const portalFunctions: ISVGFunction[] = [\r\n {svg: portalSvg, function: () => {this.props.handleOpen(EModalType.STUDY);}, tooltip: \"Fetch Genomic Data From cBioPortal\"},\r\n {svg: setingsSvg, function: () => {this.props.handleOpen(EModalType.PROFILES);}, tooltip: \"Genomic Data Visibility Settings\"}];\r\n\r\n const infoFunctions: ISVGFunction[] = [\r\n {svg: helpSvg, function: () => {this.props.handleOpen(EModalType.HELP);}, tooltip: \"Quick Help\"},\r\n {svg: aboutSvg, function: () => {this.props.handleOpen(EModalType.ABOUT);}, tooltip: \"About\"}];\r\n \r\n const allFunctions = [fileFunctions, modFunctions, alignFunctions, utilFunctions, visibilityFunctions, portalFunctions, layoutFunctions, infoFunctions];\r\n\r\n \r\n return (\r\n \r\n \r\n { allFunctions.map((functions, index) =>\r\n \r\n { functions.map((svg: ISVGFunction, index) => \r\n (\r\n )\r\n )\r\n }\r\n )\r\n }\r\n \r\n \r\n \r\n { this.searchedGene = e.target.value;}}\r\n placeholder=\"Search Genes...\"\r\n onKeyPress={(e: any) => { if (e.key !== \"Enter\") return; this.props.pathwayActions.searchGene(this.searchedGene) }} />\r\n {this.props.pathwayActions.searchGene(this.searchedGene)}}\r\n style={{cursor: 'pointer'}}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n}\r\n","import { EModalType } from \"../ui/react-pathway-mapper\";\r\nimport EditorActionsManager from \"./EditorActionsManager\";\r\n\r\nexport default class ContextMenuManager {\r\n private cy: any;\r\n private editor: EditorActionsManager;\r\n private handleOpen: (modalId: EModalType) => void;\r\n private undoRedoManager: any;\r\n private isCollaborative: any;\r\n constructor(\r\n cy: any,\r\n editor: EditorActionsManager,\r\n handleOpen: (modalId: EModalType) => void,\r\n undoRedoManager: any,\r\n isCollaborative: boolean\r\n ) {\r\n this.cy = cy;\r\n this.editor = editor;\r\n this.handleOpen = handleOpen;\r\n this.undoRedoManager = undoRedoManager;\r\n this.isCollaborative = isCollaborative;\r\n this.init();\r\n }\r\n\r\n init() {\r\n const classRef = this;\r\n\r\n const ctxMenus = this.cy.scratch('cycontextmenus')\r\n ? this.cy.contextMenus('get')\r\n : this.cy.contextMenus();\r\n\r\n let menuItems = [\r\n {\r\n id: 'deleteSelected',\r\n content: 'Delete Selected',\r\n coreAsWell: true,\r\n onClickFunction: () => {\r\n const selectedEles = this.cy.elements(':selected');\r\n classRef.editor.removeElement(selectedEles);\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n {\r\n id: 'hideSelected',\r\n content: 'Hide Selected',\r\n coreAsWell: true,\r\n onClickFunction: function() {\r\n classRef.editor.hideSelectedNodes();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n {\r\n id: 'loadFromCBioPortal',\r\n content: 'Load From cBioPortal...',\r\n coreAsWell: true,\r\n onClickFunction: () => {\r\n this.handleOpen(EModalType.STUDY);\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n //Context menu items when clicking on nodes/compounds\r\n {\r\n id: 'remove',\r\n content: 'Delete',\r\n selector: 'node, edge',\r\n onClickFunction: function(event) {\r\n var ele = event.target;\r\n // The function to be executed on click\r\n var selectedElements = classRef.cy.nodes(':selected').union(ele);\r\n classRef.editor.removeElement(selectedElements);\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n coreAsWell: false,\r\n },\r\n {\r\n id: 'addSelected',\r\n content: 'Add Selected Into This',\r\n selector: 'node',\r\n onClickFunction: function(event) {\r\n var ele = event.target;\r\n var selectedNodes = classRef.cy.nodes(':selected');\r\n var containerType = ele.data('type');\r\n var validNodes = classRef.cy.collection();\r\n\r\n //Do nothing if node is GENE\r\n if (\r\n ele._private.data['type'] === 'GENE' ||\r\n selectedNodes.size() < 1\r\n ) {\r\n return;\r\n }\r\n //Prevent actions like adding root node to children & addition to itself\r\n else {\r\n var notValid = false;\r\n selectedNodes.forEach(function(tmpNode, i) {\r\n if (ele.id() == tmpNode.id()) {\r\n notValid = true;\r\n return false;\r\n }\r\n\r\n if (tmpNode.isParent()) {\r\n notValid = classRef.isChildren(tmpNode, ele);\r\n if (notValid) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (notValid) {\r\n return;\r\n }\r\n }\r\n\r\n let childsToBeRemoved = [];\r\n selectedNodes.forEach(function(tmpNode1) {\r\n selectedNodes.forEach(function(tmpNode2) {\r\n if (classRef.isChildren(tmpNode1, tmpNode2)) {\r\n childsToBeRemoved.push(tmpNode2);\r\n }\r\n });\r\n });\r\n\r\n childsToBeRemoved.forEach(function(tmpNode) {\r\n tmpNode.unselect();\r\n selectedNodes = selectedNodes.filter(function(element) {\r\n return element != tmpNode;\r\n });\r\n });\r\n\r\n selectedNodes.forEach(function(tmpNode, i) {\r\n if (containerType == \"FAMILY\" || containerType == \"COMPLEX\") {\r\n if (\r\n tmpNode.data('type') != \"COMPARTMENT\" &&\r\n tmpNode.data('type') != \"PROCESS\"\r\n ) {\r\n validNodes = validNodes.add(tmpNode);\r\n }\r\n } else {\r\n validNodes = validNodes.add(tmpNode);\r\n }\r\n });\r\n\r\n var compId = ele.id();\r\n classRef.editor.changeParents(validNodes, compId);\r\n //Unselecting nodes to remove them from selectedNodeStack\r\n selectedNodes.unselect();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n coreAsWell: false,\r\n },\r\n {\r\n id: 'removeSelected',\r\n content: 'Remove Selected From Parent',\r\n selector: 'node',\r\n onClickFunction: function(event) {\r\n const ele = event.target;\r\n const selectedNodes = classRef.cy.nodes(':selected');\r\n\r\n let notValid = false;\r\n selectedNodes.forEach(function(tmpNode, i) {\r\n if (tmpNode.isParent()) {\r\n notValid = classRef.isChildren(tmpNode, ele);\r\n if (notValid) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (notValid) {\r\n return;\r\n }\r\n\r\n classRef.editor.changeParents(selectedNodes, null);\r\n //Unselecting nodes to remove them from selectedNodeStack\r\n selectedNodes.unselect();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n coreAsWell: false,\r\n },\r\n {\r\n id: 'performLayout',\r\n content: 'Perform Layout',\r\n coreAsWell: true,\r\n onClickFunction: () => {\r\n this.editor.performLayout();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n ];\r\n let nonCollabItems = [\r\n //Context menu items when clicking on blank space\r\n {\r\n id: 'undoAction',\r\n content: 'Undo',\r\n coreAsWell: true,\r\n onClickFunction: () => {\r\n this.undoRedoManager.undo();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n {\r\n id: 'redoAction',\r\n content: 'Redo',\r\n coreAsWell: true,\r\n onClickFunction: () => {\r\n this.undoRedoManager.redo();\r\n },\r\n disabled: false,\r\n hasTrailingDivider: false,\r\n },\r\n ];\r\n\r\n if (!this.isCollaborative) {\r\n menuItems = menuItems.concat(nonCollabItems);\r\n }\r\n ctxMenus.appendMenuItems(menuItems);\r\n }\r\n\r\n //TODO better move this to another class\r\n //Utility function to check whether query node is children of given node\r\n isChildren(node, queryNode) {\r\n var parent = queryNode.parent()[0];\r\n while (parent) {\r\n if (parent.id() == node.id()) {\r\n return true;\r\n }\r\n parent = parent.parent()[0];\r\n }\r\n return false;\r\n }\r\n}\r\n","import tippy from 'tippy.js';\r\nimport 'tippy.js/dist/tippy.css'; // optional for styling\r\nimport EditorActionsManager from \"./EditorActionsManager\";\r\nexport default class QtipManager{\r\n private cy: any;\r\n private editor: any;\r\n constructor(cy: any, editor: EditorActionsManager)\r\n {\r\n this.cy = cy;\r\n this.editor = editor;\r\n }\r\n\r\n generateEdgeQtip(edge) {\r\n const self = this;\r\n const pubmedURL = 'https://www.ncbi.nlm.nih.gov/pubmed/';\r\n const pubmedData = edge.data('pubmedIDs');\r\n\r\n const wrapper = document.createElement('div');\r\n\r\n // header\r\n const header = document.createElement('div');\r\n header.classList.add('row', 'node-tooltip-header');\r\n header.innerHTML = \"INTERACTION DETAILS\";\r\n\r\n wrapper.append(header);\r\n\r\n // edge label input\r\n const textInputWrapper = document.createElement('div');\r\n textInputWrapper.classList.add('col-xs-6', 'inputCol');\r\n\r\n const inputElement = document.createElement('input');\r\n inputElement.type = 'text';\r\n inputElement.value = edge.data('name');\r\n inputElement.classList.add('form-control');\r\n\r\n inputElement.addEventListener(\"change\", function(event) {\r\n // @ts-ignore\r\n const value = event.target.value;\r\n self.editor.changeName(edge, value);\r\n });\r\n\r\n textInputWrapper.appendChild(inputElement);\r\n\r\n const edgeLabelRowElement = document.createElement('div');\r\n edgeLabelRowElement.classList.add('row', 'geneDetails');\r\n const colElement = document.createElement('div');\r\n colElement.classList.add('col-xs-6', 'qtipLabel');\r\n colElement.innerHTML = \"Label:\";\r\n\r\n edgeLabelRowElement.appendChild(colElement);\r\n edgeLabelRowElement.appendChild(textInputWrapper);\r\n\r\n wrapper.appendChild(edgeLabelRowElement);\r\n \r\n wrapper.appendChild(document.createElement('hr'));\r\n\r\n // pubmed id input\r\n const pubmedTextInputWrapper = document.createElement('div');\r\n pubmedTextInputWrapper.classList.add('col-xs-6', 'inputCol');\r\n\r\n const pubmedIdInputElement = document.createElement('input');\r\n pubmedIdInputElement.type = 'text';\r\n pubmedIdInputElement.classList.add('form-control');\r\n\r\n pubmedIdInputElement.addEventListener(\"change\", function(event) {\r\n // @ts-ignore\r\n const value = event.target.value;\r\n const pubmedIdsToAdd = value.split(';');\r\n \r\n // @ts-ignore\r\n event.target.value = \"\";\r\n\r\n self.editor.addPubmedIDs(edge, pubmedIdsToAdd);\r\n\r\n const pubmedIds = edge.data(\"pubmedIDs\")\r\n generatePubmedLinks(pubmedIds);\r\n });\r\n\r\n pubmedTextInputWrapper.appendChild(pubmedIdInputElement);\r\n\r\n const pubmedIdRowElement = document.createElement('div');\r\n pubmedIdRowElement.classList.add('row', 'geneDetails');\r\n const pubmedIdColElement = document.createElement('div');\r\n pubmedIdColElement.classList.add('col-xs-6', 'qtipLabel');\r\n pubmedIdColElement.innerHTML = \"Add Pubmed ID(s):\";\r\n\r\n pubmedIdRowElement.appendChild(pubmedIdColElement);\r\n pubmedIdRowElement.appendChild(pubmedTextInputWrapper);\r\n\r\n wrapper.appendChild(pubmedIdRowElement);\r\n\r\n if (pubmedData.length > 0) {\r\n generatePubmedLinks(pubmedData);\r\n }\r\n\r\n function generatePubmedLinks(argData) {\r\n if (document.getElementsByClassName(\"pubmedIDList\").length > 0) {\r\n document.getElementsByClassName(\"pubmedIDList\").item(0).remove();\r\n }\r\n const pubmedIdListWrapper = document.createElement('div');\r\n pubmedIdListWrapper.classList.add(\"pubmedIDList\");\r\n\r\n pubmedIdListWrapper.appendChild(document.createElement('hr'));\r\n\r\n const pubmedIdLabel = document.createElement('label');\r\n pubmedIdLabel.classList.add(\"col-xs-12\", \"pubmedIDLabel\");\r\n pubmedIdLabel.innerHTML = \"Pubmed IDs\";\r\n\r\n pubmedIdListWrapper.appendChild(pubmedIdLabel);\r\n\r\n for (var key in argData)\r\n {\r\n if(!argData.hasOwnProperty(key)){\r\n continue;\r\n }\r\n const pubmedId = argData[key];\r\n\r\n if (isNaN(pubmedId))\r\n continue;\r\n\r\n const pubmedIdListElement = document.createElement('div');\r\n\r\n const pubmedIdRemoveButton = document.createElement('i');\r\n pubmedIdRemoveButton.classList.add('fa', 'fa-times', 'qtipRemovePmedID');\r\n pubmedIdRemoveButton.setAttribute('aria-hidden', 'true');\r\n pubmedIdRemoveButton.setAttribute('pubmedId', pubmedId);\r\n\r\n pubmedIdRemoveButton.addEventListener(\"click\", function(event) {\r\n (event.target as HTMLElement).parentElement.remove();\r\n const pubmedId = (event.target as HTMLElement).getAttribute('pubmedId');\r\n self.editor.removePubmedID(edge, [pubmedId]);\r\n const pubmedIds = edge.data('pubmedIDs');\r\n if (pubmedIds.length === 0) {\r\n document.getElementsByClassName(\"pubmedIDList\").item(0).remove();\r\n }\r\n });\r\n \r\n const pubmedContent = document.createElement('div');\r\n const pubmedIdLabel = document.createElement('label');\r\n const pubmedIdLink = document.createElement('a');\r\n pubmedIdLink.setAttribute('target', '_blank');\r\n const pubmedLink = pubmedURL + pubmedId;\r\n pubmedIdLink.setAttribute('href', pubmedLink);\r\n pubmedIdLink.innerHTML = pubmedId.toString();\r\n\r\n pubmedIdLabel.appendChild(pubmedIdLink);\r\n pubmedContent.appendChild(pubmedIdLabel);\r\n pubmedContent.appendChild(pubmedIdRemoveButton);\r\n pubmedIdListElement.appendChild(pubmedContent);\r\n\r\n pubmedIdListWrapper.appendChild(pubmedIdListElement);\r\n }\r\n if (edge.data('pubmedIDs').length > 0) {\r\n wrapper.appendChild(pubmedIdListWrapper);\r\n }\r\n }\r\n\r\n wrapper.classList.add(\"tooltip-text-style\");\r\n return wrapper;\r\n }\r\n\r\n generateNodeQtip(node) {\r\n const self = this;\r\n\r\n const header = document.createElement('div');\r\n header.classList.add('row', 'node-tooltip-header');\r\n header.innerHTML = node.data('type').toUpperCase() + \" DETAILS\";\r\n\r\n const textInputWrapper = document.createElement('div');\r\n textInputWrapper.classList.add('col-xs-8', 'inputCol');\r\n\r\n const inputElement = document.createElement('input');\r\n inputElement.type = 'text';\r\n inputElement.value = node.data('name');\r\n inputElement.classList.add('form-control');\r\n\r\n inputElement.addEventListener(\"change\", function(event) {\r\n // @ts-ignore\r\n const value = event.target.value;\r\n self.editor.changeName(node, value);\r\n });\r\n\r\n textInputWrapper.appendChild(inputElement);\r\n\r\n const wrapper = document.createElement('div');\r\n const rowElement = document.createElement('div');\r\n rowElement.classList.add('row', 'geneDetails');\r\n const colElement = document.createElement('div');\r\n colElement.classList.add('col-xs-4', 'qtipLabel');\r\n colElement.innerHTML = \"Name:\";\r\n\r\n rowElement.appendChild(colElement);\r\n rowElement.appendChild(textInputWrapper);\r\n\r\n wrapper.append(header);\r\n wrapper.append(rowElement);\r\n\r\n if (node.data('type') === \"GENE\") {\r\n const buttonWrapper = document.createElement('div');\r\n buttonWrapper.classList.add('row', 'centerText', 'geneDetails');\r\n \r\n const button = document.createElement('button');\r\n button.type = 'button';\r\n button.classList.add('btn', 'btn-default');\r\n button.innerHTML = \"My Cancer Genome\";\r\n button.addEventListener(\"click\", function (event) {\r\n event.preventDefault();\r\n const name = node.data('name');\r\n window.open(\"https://www.mycancergenome.org/content/gene/\" + name);\r\n })\r\n\r\n buttonWrapper.append(button);\r\n wrapper.append(buttonWrapper)\r\n }\r\n\r\n wrapper.classList.add(\"tooltip-text-style\");\r\n return wrapper;\r\n }\r\n\r\n addQtipToElements(eles)\r\n {\r\n const self = this;\r\n eles.forEach(function(ele)\r\n {\r\n let ref = ele.popperRef();\r\n let dummyDomEle = document.createElement('div');\r\n document.body.appendChild(dummyDomEle);\r\n let tip = tippy(dummyDomEle, { // tippy props:\r\n getReferenceClientRect: ref.getBoundingClientRect, // https://atomiks.github.io/tippyjs/v6/all-props/#getreferenceclientrect\r\n trigger: 'manual', // mandatory, we cause the tippy to show programmatically.\r\n placement: 'bottom',\r\n interactive: true,\r\n theme: 'pathwaymapper',\r\n // your own custom props\r\n // content prop can be used when the target is a single element https://atomiks.github.io/tippyjs/v6/constructor/#prop\r\n content: () => {\r\n let content = ele.isNode() ? \r\n self.generateNodeQtip(ele) :\r\n self.generateEdgeQtip(ele);\r\n \r\n return content;\r\n },\r\n onHidden(instance) {\r\n instance.destroy();\r\n dummyDomEle.remove();\r\n }\r\n });\r\n \r\n self.cy.one(\"pan zoom\", function() {\r\n if (dummyDomEle && dummyDomEle[\"_tippy\"]) {\r\n tip.hide();\r\n }\r\n });\r\n\r\n ele.one(\"showqtipevent\", function() {\r\n tip.show();\r\n });\r\n });\r\n }\r\n\r\n\r\n //Utility Functions\r\n capitalizeFirstLetter(string)\r\n {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n }\r\n\r\n\r\n}\r\n","import cytoscape from 'cytoscape';\r\nimport $ from \"jquery\";\r\nimport 'jquery-ui-dist/jquery-ui';\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\n\r\n\r\nexport default class DragDropNodeAddPlugin {\r\n\r\n\r\n\r\n pathwayHandler: (pathwayName: string) => void;\r\n\r\n private cy: any;\r\n private editor: EditorActionsManager;\r\n\r\n constructor(editor: EditorActionsManager, cy: any, pathwayHandler: (pathwayName: string) => void)\r\n {\r\n this.editor = editor;\r\n this.cy = cy;\r\n this.pathwayHandler = pathwayHandler;\r\n this.initNodeAdd();\r\n }\r\n\r\n //TODO JQUERY IS IGNORED\r\n initNodeAdd()\r\n {\r\n var nodeAddClass = this;\r\n var defaults = {\r\n height: 30, //height of the icon container\r\n width: 30, //width of the icon container\r\n padding: 5, //padding of the icon container(from right & top)\r\n backgroundColorDiv: '#fbfbfb', //background color of the icon container\r\n borderColorDiv: '#fff', //border color of the icon container\r\n borderWidthDiv: '0px', //border width of the icon container\r\n borderRadiusDiv: '5px', //border radius of the icon container\r\n\r\n icon: '', //icon class name\r\n\r\n nodeParams: function(){\r\n // return element object to be passed to cy.add() for adding node\r\n return {};\r\n }\r\n };\r\n\r\n const self = this;\r\n\r\n // @ts-ignore\r\n $.fn.cytoscapeNodeadd = function(params: any) {\r\n var options = $.extend(true, {}, defaults, params);\r\n var fn = params;\r\n\r\n var functions = {\r\n destroy: function() {\r\n var $this = $(this);\r\n\r\n $this.find(\".ui-cytoscape-nodeadd\").remove();\r\n },\r\n init: function()\r\n {\r\n return $(this).each(function()\r\n {\r\n var components = options.components;\r\n for (const component of components)\r\n {\r\n var dragContainer = component.container;\r\n //var explanationText = component.explanationText;\r\n\r\n var $nodeadd = $('
');\r\n dragContainer.append($nodeadd);\r\n var $nodeDragHandle = $('
\\\r\n \\\r\n \\\r\n \\\r\n
');\r\n $nodeadd.append($nodeDragHandle);\r\n\r\n $nodeDragHandle.bind(\"mousedown\", function(e: any)\r\n {\r\n e.stopPropagation(); // don't trigger dragging of nodeadd\r\n e.preventDefault(); // don't cause text selection\r\n });\r\n\r\n //Setup UI\r\n dragContainer.find(\".ui-cytoscape-nodeadd-nodediv\").css({\r\n background: options.backgroundColorDiv,\r\n border: options.borderWidthDiv + ' solid ' + options.borderColorDiv,\r\n 'border-radius': options.borderRadiusDiv\r\n });\r\n\r\n //Init Draggable\r\n dragContainer.find(\"#ui-cytoscape-nodeadd-icon\").draggable({\r\n helper: \"clone\",\r\n cursor: \"pointer\"\r\n });\r\n }\r\n\r\n // @ts-ignore TODO: AMENDMENT ATTENTION\r\n var $container = $(this);\r\n //Init Droppable\r\n // @ts-ignore TODO: Droppable is ignored\r\n $container.droppable({\r\n activeClass: \"ui-state-highlight\",\r\n // accept: \"#ui-cytoscape-nodeadd-icon\",\r\n drop: function(event: any, ui: any) {\r\n $container.removeClass(\"ui-state-highlight\");\r\n\r\n var currentOffset = $container.offset();\r\n var relX = event.pageX - currentOffset.left;\r\n var relY = event.pageY - currentOffset.top;\r\n\r\n var nodeType = $(ui.helper).attr('nodeType').toUpperCase();\r\n\r\n var cy = nodeAddClass.cy;\r\n\r\n //Hold a map for parents and candidate parent nodes for this addition\r\n var nodeMap = {};\r\n var parentMap = {};\r\n //Loop through nodes for hit testing about drag position on canvas\r\n cy.nodes().forEach(function(node: any)\r\n {\r\n var nodeBbox = node.renderedBoundingBox();\r\n //Rectangle point test\r\n if ( (relX <= nodeBbox.x2 && relX >= nodeBbox.x1) && (relY <= nodeBbox.y2 && relY >= nodeBbox.y1) && node.data().type != 'GENE' )\r\n {\r\n //If node has a children put an entry to the parentMap\r\n if (node.children().length > 0)\r\n {\r\n parentMap[node.id()] = true;\r\n }\r\n\r\n //If parent of this node is already added to the node map remove it, since our candidate is in deeper level !\r\n if (parentMap[node._private.data.parent])\r\n {\r\n delete nodeMap[node._private.data.parent];\r\n }\r\n\r\n //Add an entry to node map\r\n nodeMap[node.id()] = node;\r\n }\r\n });\r\n\r\n //Check if any parent found, if so set parent field\r\n var parent = nodeMap[Object.keys(nodeMap)[0]];\r\n var nodeData = {w: \"0\", h: \"100\", parent: 0, type: nodeType, name:'New '+ $(ui.helper).attr('nodeType')};\r\n if (parent)\r\n {\r\n if(parent.data().type == \"FAMILY\" || parent.data().type == \"COMPLEX\")\r\n {\r\n if(nodeType != \"COMPARTMENT\" && nodeType != \"PROCESS\")\r\n {\r\n nodeData.parent = parent.id();\r\n }\r\n }\r\n else\r\n {\r\n nodeData.parent = parent.id();\r\n }\r\n }\r\n if (nodeType === \"PROCESS\") {\r\n nodeData.w = \"100\";\r\n nodeData.h = \"35\";\r\n }\r\n else {\r\n nodeData.w = \"150\";\r\n nodeData.h = \"52\";\r\n }\r\n\r\n //Adjust position according to the zoom level and pan !\r\n //To set rendered position !!!\r\n //TODO refactor this !\r\n relX = relX / cy.zoom() + cy.extent().x1;\r\n relY = relY / cy.zoom() + cy.extent().y1;\r\n nodeAddClass.editor.addNode(nodeData,{x: relX,y: relY});\r\n self.pathwayHandler(\"Additional Pathway\");\r\n\r\n }\r\n });\r\n\r\n });\r\n }\r\n };\r\n\r\n if (functions[fn]) {\r\n return functions[fn].apply(this, Array.prototype.slice.call(arguments, 1));\r\n } else if (typeof fn == 'object' || !fn) {\r\n return functions.init.apply(this, arguments);\r\n } else {\r\n $.error(\"No such function `\" + fn + \"` for jquery.cytoscapenodeadd\");\r\n }\r\n\r\n return $(this);\r\n };\r\n\r\n // @ts-ignore\r\n $.fn.cynodeadd = $.fn.cytoscapeNodeadd;\r\n try{\r\n /* Adding as an extension to the core functionality of cytoscape.js*/\r\n cytoscape('core', 'nodeadd', function(options: any) {\r\n\r\n // @ts-ignore\r\n $(this.container()).cytoscapeNodeadd(options);\r\n });\r\n } catch(err){\r\n console.log(err);\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n}\r\n","import autobind from \"autobind-decorator\";\r\nimport cytoscape from 'cytoscape';\r\nimport $ from \"jquery\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from 'react';\r\nimport pathways from \"../data/pathways.json\";\r\n// @ts-ignore\r\nimport compartmentImg from \"../images/nodes/compartment.svg\";\r\n// @ts-ignore\r\nimport complexImg from \"../images/nodes/complex.svg\";\r\n// @ts-ignore\r\nimport familyImg from \"../images/nodes/family.svg\";\r\n// @ts-ignore\r\nimport geneImg from \"../images/nodes/gene.svg\";\r\n// @ts-ignore\r\nimport processImg from \"../images/nodes/process.svg\";\r\n// @ts-ignore\r\nimport resizeCue from '../images/resizeCue.svg';\r\nimport ContextMenuManager from \"../managers/ContextMenuManager\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport QtipManager from \"../managers/QtipManager\";\r\nimport ShareDBManager from \"../managers/ShareDBManager\";\r\nimport ViewOperationsManager from \"../managers/ViewOperationsManager\";\r\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\r\nimport DragDropNodeAddPlugin from \"../utils/DragDropNodeAddPlugin\";\r\nimport SaveLoadUtility from \"../utils/SaveLoadUtility\";\r\nimport { ChatMessageMetaData, EModalType, IColorValueMap, IProfileMetaData } from './react-pathway-mapper';\r\n\r\n// @ts-ignore\r\nwindow.$ = $;\r\n\r\nconst edgeHandles = require('cytoscape-edgehandles');\r\nconst edgeEditing = require('cytoscape-edge-editing');\r\nconst fcose = require('cytoscape-fcose');\r\nconst nodeEditing = require('cytoscape-node-editing');\r\nconst undoRedo = require('cytoscape-undo-redo');\r\nconst panzoom = require('cytoscape-panzoom');\r\nconst styleSheet = require('../utils/GraphStyleSheet.tsx');\r\nconst panzoomOpts = require('../utils/PanzoomOptions.tsx');\r\nconst navigator = require('cytoscape-navigator');\r\nconst contextMenus = require('cytoscape-context-menus');\r\nconst konva = require('konva');\r\nconst viewUtilities = require('cytoscape-view-utilities');\r\nconst gridGuide = require('cytoscape-grid-guide');\r\nconst popper = require('cytoscape-popper');\r\nconst layoutUtilities = require('cytoscape-layout-utilities');\r\n\r\ntype PathwayMapperType = {\r\n isCollaborative: boolean;\r\n isCbioPortal: boolean;\r\n editorHandler: Function;\r\n selectedPathway: string;\r\n setActiveEdge: Function;\r\n profiles: IProfileMetaData[];\r\n pathwayHandler: (pathwayName: string) => void;\r\n handleOpen: (modalId: EModalType) => void;\r\n onPathwayChangeCompleted: () => void;\r\n genomicDataOverlayColorScheme: IColorValueMap;\r\n colorSchemeChangeCallback: (IColorValueMap) => void;\r\n incrementChatMessageCountCallback:( number) => void;\r\n newMessageCallback: (ChatMessageMetaData) => void;\r\n updatePathwayTitleCallback: (string) => void;\r\n};\r\n@observer\r\nexport default class CytoscapeArea extends React.Component{\r\n private cy:any;\r\n private cyDiv: HTMLDivElement | undefined;\r\n private editor: EditorActionsManager;\r\n private edgeAddingMode: any;\r\n private viewOperationsManager: ViewOperationsManager;\r\n private qtipManager: QtipManager;\r\n private genomicDataExplorerView: any;\r\n private pathwayDetailsView: any;\r\n private viewUtilities: any;\r\n private isCollaborative: boolean;\r\n private isCbioPortal: boolean;\r\n private shareDBManager: ShareDBManager;\r\n private cxtMenuManager: ContextMenuManager | undefined;\r\n private dragDropNodeAddManager: DragDropNodeAddPlugin;\r\n private undoRedoManager: any;\r\n private portalAccessor: CBioPortalAccessor;\r\n private isMountedFirst = true;\r\n private eh: any;\r\n private lastSelectedEdge: any;\r\n\r\n\r\n constructor (props: PathwayMapperType) {\r\n super(props);\r\n this.isCollaborative = props.isCollaborative;\r\n this.edgeAddingMode = 0;\r\n this.isCbioPortal = props.isCbioPortal;\r\n }\r\n\r\n componentWillUpdate(nextProps: PathwayMapperType) {\r\n\r\n if (this.props.selectedPathway !== nextProps.selectedPathway) {\r\n this.getPathway(nextProps.selectedPathway);\r\n }\r\n \r\n }\r\n\r\n componentDidUpdate(prevProps: PathwayMapperType) {\r\n if (this.isCbioPortal && \r\n prevProps.selectedPathway !== this.props.selectedPathway) {\r\n this.props.onPathwayChangeCompleted();\r\n }\r\n }\r\n\r\n // This method only opens pathways that are available in pathway.json. Namely, imported or merged pathways are not opened via this method.\r\n // Yet, they individually call parsing method.\r\n getPathway(selectedPathway: string){\r\n\r\n if(!selectedPathway || selectedPathway === '') return;\r\n\r\n const data = pathways[selectedPathway];\r\n\r\n // It might be non-existent due to pathway being created using collaborative mode, or pathway loaded elsewhere (import vs.)\r\n if(!data){ \r\n return;\r\n }\r\n // TODO Problematic const data = pathways[\"../samples/BLCA-2014-RTK-RAS-PI(3)K-pathway.txt\"];\r\n\r\n const parsedGraph = SaveLoadUtility.parseGraph(data, true);\r\n\r\n\r\n const allEles = parsedGraph;\r\n this.editor.loadFile(allEles.nodes, allEles.edges);\r\n }\r\n\r\n render(){\r\n return (
\r\n
\r\n {!this.isCbioPortal &&
}\r\n
);\r\n }\r\n\r\n componentDidMount(): void {\r\n if(this.isMountedFirst){\r\n this.init();\r\n this.isMountedFirst = false;\r\n }\r\n this.getPathway(this.props.selectedPathway);\r\n }\r\n\r\n @autobind\r\n cyDivHandler(div:HTMLDivElement){\r\n this.cyDiv = div;\r\n }\r\n\r\n init(){\r\n\r\n // Create portal accessor\r\n this.portalAccessor = new CBioPortalAccessor();\r\n\r\n // Initializes cytoscape\r\n this.initCyJS();\r\n // Initialize cytoscape based handlers here\r\n this.initCyHandlers();\r\n this.initKeyboardHandlers();\r\n this.initUndoRedoFunctionality();\r\n this.initCBioPortalFunctionalities();\r\n this.placePanzoomAndOverlay();\r\n\r\n //this.appManager = this;\r\n }\r\n\r\n placePanzoomAndOverlay(){\r\n //TODO place navigator !!!\r\n var offset = 5;\r\n // @ts-ignore\r\n var topCy = $(this.cyDiv).offset().top;\r\n //var bottomCy = $('.cyContainer').offset().bottom;\r\n // @ts-ignore\r\n var leftCy = $(this.cyDiv).offset().left;\r\n //var rightCy = $('.cyContainer').offset().right;\r\n // @ts-ignore\r\n var heightCy = $(this.cyDiv).outerHeight();\r\n // @ts-ignore\r\n var widthCy = $(this.cyDiv).outerWidth();\r\n var heightNavigator = !this.isCbioPortal ? $('.cytoscape-navigator-wrapper').outerHeight() : 0;\r\n var widthNavigator = !this.isCbioPortal ? $('.cytoscape-navigator-wrapper').outerWidth() : 0;\r\n\r\n if(!this.isCbioPortal) {\r\n \r\n $('.cytoscape-navigator-wrapper').css('top', heightCy + topCy - heightNavigator - offset + 16);\r\n $('.cytoscape-navigator-wrapper').css('left', widthCy + leftCy - widthNavigator - offset + 24 - 0.5 + 0.35);\r\n $('.cytoscape-navigator-wrapper').css('z-index', 1039);\r\n }\r\n $('.cytoscape-navigator-wrapper').css('z-index', 1039);\r\n\r\n //Relative is used so that its position depends on the below properties\r\n $('.cy-panzoom').css('position', 'relative');\r\n $('.cy-panzoom').css('top', 2);\r\n $('.cy-panzoom').css('left', widthCy - 51);\r\n $('.cy-panzoom').css('z-index', 1039);\r\n //Makes the width of panzoom container to 0\r\n $('.cy-panzoom').css('width', 200);\r\n }\r\n\r\n getPathwayData() {\r\n return this.pathwayDetailsView.getPathwayData();\r\n }\r\n\r\n initCyJS() {\r\n \r\n try {\r\n panzoom(cytoscape, $); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n if( !this.isCbioPortal){\r\n navigator(cytoscape); // register extension\r\n }\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n gridGuide(cytoscape, $); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n undoRedo(cytoscape); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n contextMenus(cytoscape, $); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n nodeEditing(cytoscape, $, konva); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n edgeEditing(cytoscape, $, konva); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n viewUtilities(cytoscape, $); // register extension\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try { \r\n edgeHandles(cytoscape, $);\r\n } catch(err){\r\n console.log(err);\r\n }\r\n try {\r\n popper(cytoscape);\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n try {\r\n fcose(cytoscape);\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n try {\r\n layoutUtilities(cytoscape);\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n\r\n this.cy = cytoscape({\r\n container: this.cyDiv,\r\n boxSelectionEnabled: true,\r\n autounselectify: false,\r\n wheelSensitivity: 0.1,\r\n style: styleSheet,\r\n textureOnViewport: false,\r\n motionBlur: true,\r\n layout: {name: 'preset'}\r\n });\r\n\r\n this.edgeAddingMode = 0;\r\n // var allEles = SaveLoadUtilities.parseGraph(sampleGraph);\r\n\r\n this.undoRedoManager = this.cy.undoRedo();\r\n // Create Manager Classes\r\n this.shareDBManager = new ShareDBManager(() => {\r\n const dbDoc = this.shareDBManager.getDoc();\r\n });\r\n this.editor = new EditorActionsManager(this.isCollaborative,\r\n this.shareDBManager,\r\n this.cy,\r\n this.isCbioPortal,\r\n this.undoRedoManager,\r\n this.portalAccessor,\r\n this.props.profiles,\r\n this.props.genomicDataOverlayColorScheme,\r\n this.props.colorSchemeChangeCallback, this.props.incrementChatMessageCountCallback,this.props.newMessageCallback, this.props.updatePathwayTitleCallback);\r\n this.shareDBManager.setEditor(this.editor);\r\n if(this.isCollaborative){\r\n this.shareDBManager.initShareDB();\r\n }\r\n\r\n this.qtipManager = new QtipManager(this.cy, this.editor);\r\n \r\n this.cxtMenuManager = !this.isCbioPortal ? new ContextMenuManager(this.cy, this.editor, this.props.handleOpen, \r\n this.undoRedoManager, this.props.isCollaborative) : undefined;\r\n\r\n \r\n this.dragDropNodeAddManager = new DragDropNodeAddPlugin(this.editor, this.cy, this.props.pathwayHandler);\r\n\r\n // Initialize panzoom\r\n this.cy.panzoom(panzoomOpts);\r\n\r\n this.cy.layoutUtilities({\r\n desiredAspectRatio: this.cy.width() / this.cy.height()\r\n });\r\n\r\n // Node Add initialization\r\n this.cy.nodeadd(\r\n {\r\n // Once the explanationText is cast to uppercase they will be node types\r\n components:\r\n [\r\n {\r\n container: $('#simpleNodeDiv'),\r\n nodeType: 'Gene',\r\n icon: geneImg\r\n },\r\n {\r\n container: $('#familyNodeDiv'),\r\n nodeType: 'Family',\r\n icon: familyImg\r\n },\r\n {\r\n container: $('#complexNodeDiv'),\r\n nodeType: 'Complex',\r\n icon: complexImg\r\n },\r\n {\r\n container: $('#compartmentNodeDiv'),\r\n nodeType: 'Compartment',\r\n icon: compartmentImg\r\n },\r\n {\r\n container: $('#processNodeDiv'),\r\n nodeType: 'Process',\r\n icon: processImg\r\n }\r\n ]\r\n\r\n });\r\n const self = this;\r\n const edgeHandleDefaults ={\r\n preview: true, // whether to show added edges preview before releasing selection\r\n stackOrder: 4, // Controls stack order of edgehandles canvas element by setting it's z-index\r\n handleSize: 10, // the size of the edge handle put on nodes\r\n handleColor: '#1abc9c', // the colour of the handle and the line drawn from it\r\n handleLineType: 'ghost', // can be 'ghost' for real edge, 'straight' for a straight line, or 'draw' for a draw-as-you-go line\r\n handleLineWidth: 1, // width of handle line in pixels\r\n handleNodes: 'node', // selector/filter function for whether edges can be made from a given node\r\n hoverDelay: 1, // time spend over a target node before it is considered a target selection\r\n cxt: false, // whether cxt events trigger edgehandles (useful on touch)\r\n enabled: false, // whether to start the extension in the enabled state\r\n toggleOffOnLeave: true, // whether an edge is cancelled by leaving a node (true), or whether you need to go over again to cancel (false; allows multiple edges in one pass)\r\n edgeType: function( sourceNode, targetNode ) {\r\n // can return 'flat' for flat edges between nodes or 'node' for intermediate node between them\r\n // returning null/undefined means an edge can't be added between the two nodes\r\n return 'flat';\r\n },\r\n handlePosition: function( node ){\r\n return 'middle top'; // sets the position of the handle in the format of \"X-AXIS Y-AXIS\" such as \"left top\", \"middle top\"\r\n },\r\n loopAllowed: function( node ) {\r\n // for the specified node, return whether edges from itself to itself are allowed\r\n return false;\r\n },\r\n nodeLoopOffset: -50, // offset for edgeType: 'node' loops\r\n nodeParams: function( sourceNode, targetNode ) {\r\n // for edges between the specified source and target\r\n // return element object to be passed to cy.add() for intermediary node\r\n return {};\r\n },\r\n edgeParams: function( sourceNode, targetNode, i ) {\r\n // for edges between the specified source and target\r\n // return element object to be passed to cy.add() for edge\r\n // NB: i indicates edge index in case of edgeType: 'node'\r\n return {};\r\n },\r\n start: function( sourceNode )\r\n {\r\n // fired when edgehandles interaction starts (drag on handle)\r\n var type = self.getGlobalEdgeType();\r\n //self.cy.edgehandles('option', 'ghostEdgeType', type);\r\n },\r\n complete: function( sourceNode, targetNodes, addedEntities )\r\n {\r\n // // Remove recently added edge !\r\n // // FBI takes this case from now on :O\r\n // // We will take care of addition in our manager :)\r\n self.cy.remove(addedEntities);\r\n self.editor.addEdge({\r\n source: sourceNode.id(),\r\n target: targetNodes[0].id(),\r\n // @ts-ignore\r\n type: self.getGlobalEdgeType(window.edgeAddingMode),\r\n pubmedIDs: [],\r\n name: \"\"\r\n });\r\n },\r\n stop: function( sourceNode )\r\n {\r\n // fired when edgehandles interaction is stopped (either complete with added edges or incomplete)\r\n //TODO refactor this, so terrible for now\r\n //$('.edge-palette a').blur().removeClass('active');\r\n self.edgeAddingMode = -1;\r\n self.eh.disable();\r\n self.eh.hide();\r\n self.props.setActiveEdge(-1);\r\n },\r\n };\r\n //Edge Handles initialization\r\n this.eh = this.cy.edgehandles(edgeHandleDefaults);\r\n this.eh.disable();\r\n this.props.editorHandler(this.editor, this.eh, this.undoRedoManager);\r\n\r\n if(!this.isCbioPortal) {\r\n this.cy.nodeEditing({\r\n padding: 5, // spacing between node and grapples/rectangle\r\n undoable: true, // and if cy.undoRedo exists\r\n\r\n grappleSize: 8, // size of square dots\r\n grappleColor: \"#ffc90e\", // color of grapples\r\n inactiveGrappleStroke: \"inside 1px blue\",\r\n boundingRectangle: true, // enable/disable bounding rectangle\r\n boundingRectangleLineDash: [4, 8], // line dash of bounding rectangle\r\n boundingRectangleLineColor: \"ffc90e\",\r\n boundingRectangleLineWidth: 1.5,\r\n zIndex: 999,\r\n\r\n moveSelectedNodesOnKeyEvents: function () {\r\n return true;\r\n },\r\n\r\n minWidth: function (node) {\r\n var data = node.data(\"resizeMinWidth\");\r\n return data ? data : 15;\r\n }, // a function returns min width of node\r\n minHeight: function (node) {\r\n var data = node.data(\"resizeMinHeight\");\r\n return data ? data : 15;\r\n }, // a function returns min height of node\r\n\r\n // Getters for some style properties the defaults returns ele.css('property-name')\r\n // you are encouraged to override these getters\r\n getCompoundMinWidth: function (node) {\r\n return node.style('min-width');\r\n },\r\n getCompoundMinHeight: function (node) {\r\n return node.style('min-height');\r\n },\r\n getCompoundMinWidthBiasRight: function (node) {\r\n return node.style('min-width-bias-right');\r\n },\r\n getCompoundMinWidthBiasLeft: function (node) {\r\n return node.style('min-width-bias-left');\r\n },\r\n getCompoundMinHeightBiasTop: function (node) {\r\n return node.style('min-height-bias-top');\r\n },\r\n getCompoundMinHeightBiasBottom: function (node) {\r\n return node.style('min-height-bias-bottom');\r\n },\r\n\r\n\r\n isFixedAspectRatioResizeMode: function (node) {\r\n return node.is(\".fixedAspectRatioResizeMode\")\r\n },// with only 4 active grapples (at corners)\r\n isNoResizeMode: function (node) {\r\n return undefined;\r\n }, // no active grapples\r\n\r\n // These optional function will be executed to set the width/height of a node in this extension\r\n // Using node.css() is not a recommended way (http://js.cytoscape.org/#eles.style) to do this. Therefore, overriding these defaults\r\n // so that a data field or something like that will be used to set node dimentions instead of directly calling node.css()\r\n // is highly recommended (Of course this will require a proper setting in the stylesheet).\r\n setWidth: function (node, width) {\r\n node.data('w', width)\r\n },\r\n setHeight: function (node, height) {\r\n node.data('h', height);\r\n },\r\n setCompoundMinWidth: function (node, minWidth) {\r\n node.style('min-width', minWidth);\r\n },\r\n setCompoundMinHeight: function (node, minHeight) {\r\n node.style('min-height', minHeight);\r\n },\r\n setCompoundMinWidthBiasLeft: function (node, minWidthBiasLeft) {\r\n node.style('min-width-bias-left', minWidthBiasLeft);\r\n },\r\n setCompoundMinWidthBiasRight: function (node, minHeightBiasRight) {\r\n node.style('min-width-bias-right', minHeightBiasRight);\r\n },\r\n setCompoundMinHeightBiasTop: function (node, minHeightBiasTop) {\r\n node.style('min-height-bias-top', minHeightBiasTop);\r\n },\r\n setCompoundMinHeightBiasBottom: function (node, minHeightBiasBottom) {\r\n node.style('min-height-bias-bottom', minHeightBiasBottom);\r\n },\r\n\r\n cursors: { // See http://www.w3schools.com/cssref/tryit.asp?filename=trycss_cursor\r\n // May take any \"cursor\" css property\r\n default: \"default\", // to be set after resizing finished or mouseleave\r\n inactive: \"not-allowed\",\r\n nw: \"nw-resize\",\r\n n: \"n-resize\",\r\n ne: \"ne-resize\",\r\n e: \"e-resize\",\r\n se: \"se-resize\",\r\n s: \"s-resize\",\r\n sw: \"sw-resize\",\r\n w: \"w-resize\"\r\n },\r\n resizeToContentCueImage: resizeCue,\r\n resizeToContentFunction: this.editor.resizeNodesToContent.bind(this.editor),\r\n });\r\n }\r\n //Navigator for cytoscape js\r\n var navDefaults = {\r\n container: '.cytoscape-navigator-wrapper' // can be a HTML or jQuery element or jQuery selector\r\n , viewLiveFramerate: 0 // set false to update graph pan only on drag end; set 0 to do it instantly; set a number (frames per second) to update not more than N times per second\r\n , thumbnailEventFramerate: 10 // max thumbnail's updates per second triggered by graph updates\r\n , thumbnailLiveFramerate: false // max thumbnail's updates per second. Set false to disable\r\n , dblClickDelay: 200 // milliseconds\r\n , removeCustomContainer: true // destroy the container specified by user on plugin destroy\r\n , rerenderDelay: 100 // ms to throttle rerender updates to the panzoom for performance\r\n };\r\n\r\n //TODO: AMENDMENT declaration removed\r\n if( !this.isCbioPortal ){\r\n this.cy.navigator(navDefaults); // get navigator instance, nav\r\n }\r\n const viewUtilitiesOpts = {\r\n node: {\r\n highlighted: {\r\n 'border-width': 2,\r\n 'border-color': '#bc1142'\r\n }, // styles for when nodes are highlighted.\r\n unhighlighted: {\r\n 'opacity': function (ele: any) {\r\n // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities\r\n return ele.css('opacity');\r\n }\r\n }// styles for when nodes are unhighlighted.}\r\n },\r\n edge: {\r\n highlighted: {}, // styles for when edges are highlighted.\r\n unhighlighted: {\r\n 'opacity': function (ele: any) {\r\n // We return the same opacity because to override the unhibhlighted ele opacity in view-utilities\r\n return ele.css('opacity');\r\n }\r\n } // styles for when edges are unhighlighted.\r\n },\r\n setVisibilityOnHide: false, // whether to set visibility on hide/show\r\n setDisplayOnHide: true, // whether to set display on hide/show\r\n neighbor: () => { // return desired neighbors of tapheld node\r\n return false;\r\n },\r\n neighborSelectTime: 500 //ms, time to taphold to select desired neighbors\r\n };\r\n\r\n this.viewUtilities = this.cy.viewUtilities(viewUtilitiesOpts);\r\n\r\n this.editor.setViewUtilities(this.viewUtilities);\r\n\r\n this.placePanzoomAndOverlay();\r\n }\r\n\r\n getGlobalEdgeType()\r\n {\r\n var type = \"NONE\";\r\n // @ts-ignore\r\n if (window.edgeAddingMode === 1)\r\n {\r\n type = 'ACTIVATES';\r\n }\r\n // @ts-ignore\r\n else if (window.edgeAddingMode === 2)\r\n {\r\n type = 'INHIBITS';\r\n }\r\n // @ts-ignore\r\n else if (window.edgeAddingMode === 3)\r\n {\r\n type = 'INDUCES';\r\n }\r\n // @ts-ignore\r\n else if (window.edgeAddingMode === 4)\r\n {\r\n type = 'REPRESSES';\r\n }\r\n // @ts-ignore\r\n else if (window.edgeAddingMode === 5)\r\n {\r\n type = 'BINDS';\r\n }\r\n return type;\r\n }\r\n\r\n initCyHandlers(){\r\n var that = this;\r\n\r\n var tappedBefore: any;\r\n var tappedTimeout: number;\r\n this.cy.on('tap', function (event: any) {\r\n var tappedNow = event.target;\r\n if (tappedTimeout !== -1 && tappedBefore !== -1) {\r\n clearTimeout(tappedTimeout);\r\n }\r\n if (tappedBefore === tappedNow) {\r\n tappedNow.trigger('doubleTap');\r\n tappedBefore = -1;\r\n } else {\r\n // @ts-ignore TODO AMENDMENTsa\r\n tappedTimeout = setTimeout(function () {\r\n tappedBefore = -1;\r\n }, 300);\r\n tappedBefore = tappedNow;\r\n }\r\n });\r\n\r\n this.cy.on('doubleTap', 'node', function (e: any) {\r\n\r\n // if cBioPortal ignore\r\n if(that.props.isCbioPortal) return;\r\n\r\n const eventIsDirect = (e.target === this);\r\n \r\n if (eventIsDirect) { \r\n that.qtipManager.addQtipToElements(e.target); \r\n e.target.trigger(\"showqtipevent\");\r\n }\r\n });\r\n \r\n this.cy.on('doubleTap', 'edge', function (e: any) {\r\n \r\n // if cBioPortal ignore\r\n if(that.props.isCbioPortal) return;\r\n \r\n const eventIsDirect = (e.target === this);\r\n \r\n if (eventIsDirect) {\r\n that.qtipManager.addQtipToElements(e.target); \r\n e.target.trigger(\"showqtipevent\");\r\n }\r\n });\r\n\r\n this.cy.on('select', 'node', (e: any) => {\r\n this.editor.pushSelectedNodeStack(e.target);\r\n });\r\n\r\n this.cy.on('unselect', 'node', (e: any) => {\r\n this.editor.removeElementFromSelectedNodeStack(e.target);\r\n });\r\n\r\n this.cy.on('free', 'node', (e: any) => {\r\n //Collect all nodes with descendants in case of compounds\r\n var selectedNodes = this.cy.nodes(':selected');\r\n var nodes = e.target;\r\n nodes = nodes.union(nodes.descendants());\r\n nodes = nodes.union(selectedNodes);\r\n this.editor.moveElements(nodes);\r\n });\r\n\r\n this.cy.on('layoutstop', () => {\r\n this.editor.postLayout();\r\n });\r\n\r\n this.cy.on(\"nodeediting.resizeend\", (_e: any, _type: any, node: any) => {\r\n \r\n //Updates 'data' properties from 'style'\r\n node.data('w', node.width());\r\n node.data('h', node.height());\r\n //Used for collaborative mode\r\n this.editor.resizeElements(node);\r\n });\r\n\r\n this.cy.on('select', 'edge', (e: any) => {\r\n this.lastSelectedEdge = e.target;\r\n });\r\n\r\n this.cy.on('bendPointMovement', () => {\r\n this.editor.updateEdgeAnchorPoints(this.lastSelectedEdge);\r\n });\r\n\r\n this.cy.on('nodeediting.moveend', () => {\r\n this.editor.changeNodePositionsByArrows(this.cy.nodes(\":selected\"));\r\n });\r\n\r\n }\r\n\r\n initKeyboardHandlers() {\r\n if (!this.isCollaborative && !this.isCbioPortal) {\r\n $(document).keydown((e: any) => {\r\n if (e.which === 89 && (e.ctrlKey || e.metaKey)) {\r\n this.undoRedoManager.redo();\r\n }\r\n else if (e.which === 90 && (e.ctrlKey || e.metaKey)) {\r\n this.undoRedoManager.undo();\r\n }\r\n });\r\n }\r\n else {\r\n $('a[role=\"redo\"]').hide();\r\n $('a[role=\"undo\"]').hide();\r\n }\r\n $(document).keydown((e: any) => {\r\n if (e.which === 65 && (e.ctrlKey || e.metaKey)) {\r\n // @ts-ignore\r\n var tn = document.activeElement.tagName;\r\n if (tn != \"TEXTAREA\" && tn != \"INPUT\") {\r\n e.preventDefault();\r\n this.cy.elements().select();\r\n }\r\n }\r\n else if (e.which === 8 || e.which === 46) {\r\n // @ts-ignore\r\n var tn = document.activeElement.tagName;\r\n if (tn != \"TEXTAREA\" && tn != \"INPUT\") {\r\n var selectedElements = this.cy.$(':selected');\r\n this.editor.removeElement(selectedElements);\r\n }\r\n }\r\n });\r\n }\r\n\r\n initUndoRedoFunctionality() {\r\n if (this.isCollaborative || this.isCbioPortal) {\r\n $('[role=\"undo\"]').hide();\r\n $('[role=\"redo\"]').hide();\r\n /* TODO: AMENDMENT\r\n document.getElementById(\"localOrCollaborativeToolbar\").style.display = \"none\";\r\n */\r\n }\r\n }\r\n\r\n\r\n initCBioPortalFunctionalities() {\r\n if (this.isCbioPortal) {\r\n const contextMenu = this.cy.contextMenus('get');\r\n\r\n contextMenu.destroy();\r\n }\r\n }\r\n\r\n\r\n}","import React from 'react';\r\nimport { MenuItem, Nav, Navbar, NavDropdown, NavItem,Button, InputGroup,Form, FormGroup, FormControl, ControlLabel, ButtonGroup } from 'react-bootstrap';\r\nimport pathways from \"../data/pathways.json\";\r\nimport ConfirmationModal from '../modals/ConfirmationModal';\r\nimport PathwayActions from '../utils/PathwayActions';\r\nimport { EModalType } from './react-pathway-mapper';\r\n\r\ninterface IMenubarProps{\r\n pathwayActions: PathwayActions;\r\n handleOpen: (modalId: EModalType) => void;\r\n setActiveEdge: Function;\r\n}\r\n\r\nfunction truncatePathwayTitle( pathwayTitle : string){\r\n if( pathwayTitle.length > 30)\r\n return pathwayTitle.substr(0, 30) + \"...\";\r\n else \r\n return pathwayTitle;\r\n}\r\n\r\nexport default class Menubar extends React.Component{\r\n\r\n constructor(props: IMenubarProps){\r\n super(props);\r\n }\r\n\r\n render(){\r\n const nodeTypes = [\"Gene\", \"Family\", \"Complex\", \"Compartment\", \"Process\"];\r\n const edgeTypes = [\"Activates\", \"Inhibits\", \"Induces\", \"Represses\", \"Binds\"];\r\n\r\n const pathwayDropdownData: {[pwHead: string]: string[]} = {};\r\n for(const pwName of Object.keys(pathways)){\r\n // If a pathway name ain't include 'pathway' word then it is under pancanatlas.\r\n const isPancanatlas = !pwName.includes('pathway');\r\n const dashPos = pwName.indexOf('-');\r\n const pwHead = (isPancanatlas) ? 'PanCanAtlas' : pwName.substring(0, dashPos);\r\n if(pwHead in pathwayDropdownData){\r\n pathwayDropdownData[pwHead].push(pwName);\r\n } else {\r\n pathwayDropdownData[pwHead] = [pwName];\r\n }\r\n }\r\n\r\n return(\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}","import autobind from \"autobind-decorator\";\r\nimport { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport { getPlainObjectKeys } from \"mobx/dist/internal\";\r\nimport { IGeneticAlterationRuleSetParams } from 'oncoprintjs';\r\nimport React from 'react';\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { toast, ToastContainer } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.min.css';\r\nimport ReactTooltip from 'react-tooltip';\r\nimport { IgnorePlugin } from \"webpack\";\r\nimport \"../css/pmv1.css\";\r\nimport \"../css/pmv2.css\";\r\nimport '../css/qtip.css';\r\nimport \"../css/supp.css\";\r\nimport pathways from \"../data/pathways.json\";\r\nimport EditorActionsManager from \"../managers/EditorActionsManager\";\r\nimport FileOperationsManager from '../managers/FileOperationsManager';\r\nimport GridOptionsManager from '../managers/GridOptionsManager';\r\nimport ViewOperationsManager from '../managers/ViewOperationsManager';\r\nimport AboutModal from '../modals/AboutModal';\r\nimport CBioHelpModal from '../modals/CBioHelpModal';\r\nimport ConfirmationModal from '../modals/ConfirmationModal';\r\nimport GridSettings from '../modals/GridSettings';\r\nimport LayoutProperties from '../modals/LayoutProperties';\r\nimport PathwayDetailsModal from '../modals/PathwayDetailsModal';\r\nimport ProfilesColorSchemeModal from \"../modals/ProfilesColorSchemeModal\";\r\nimport ProfilesModal from '../modals/ProfilesModal';\r\nimport QuickHelpModal from '../modals/QuickHelpModal';\r\nimport StudyModal from '../modals/StudyModal';\r\nimport Ranking from \"../ui/Ranking\";\r\nimport Toolbar from \"../ui/Toolbar\";\r\nimport CBioPortalAccessor from '../utils/CBioPortalAccessor';\r\nimport PathwayActions from '../utils/PathwayActions';\r\nimport SaveLoadUtility from '../utils/SaveLoadUtility';\r\nimport Buttonbar from \"./Buttonbar\";\r\nimport CytoscapeArea from \"./CytoscapeArea\";\r\nimport Menubar from './Menubar';\r\nimport Sidebar from './Sidebar';\r\n\r\nconst maxHeapFn = require('@datastructures-js/max-heap');\r\nlet maxHeap = maxHeapFn();\r\n\r\ninterface IPathwayMapperProps{\r\n isCBioPortal: boolean;\r\n genes: any[];\r\n newGenes? : any[];\r\n genomicData?: any[];\r\n isCollaborative?: boolean;\r\n userName: string;\r\n userId: number;\r\n cBioAlterationData?: ICBioData[];\r\n sampleIconData?: ISampleIconData,\r\n pathwayName? : string;\r\n alterationData?: IAlterationData;\r\n onAddGenes?: (selectedGenes: string[]) => void;\r\n changePathwayHandler?: (pathwayGenes: string[]) => void;\r\n addGenomicDataHandler?: (addGenomicData: (alterationData: ICBioData[]) => void) => void;\r\n tableComponent?: (data: IPathwayMapperTable[], selectedPathway: string, onPathwaySelect: (pathway: string) => void) => JSX.Element;\r\n genesSelectionComponent?: () => JSX.Element;\r\n validGenes?: any;\r\n toast: any;\r\n showMessage: (message: string) => void;\r\n //PatientView variable\r\n patientView ?: boolean;\r\n groupComparisonView ?: boolean;\r\n activeGroups ?: any[];\r\n messageBanner? : () => JSX.Element;\r\n currentPathway ?: string;\r\n rankingChoices ?: PMParameters;\r\n updateRankingChoices ?: (drowDownTitle : string, isAlterationEnabled: number, considerOnlyTCGAPanPathways : boolean, isPercentageMatch : number, selectedPathway : string) =>void;\r\n}\r\n\r\nexport interface PMParameters{\r\n dropDownTitle: string;\r\n isPercentageMatch: number;\r\n isAlterationEnabled: number;\r\n considerOnlyTCGAPanPathways: boolean;\r\n}\r\nexport interface ICBioData{\r\n altered: number;\r\n gene: string;\r\n percentAltered: string​;\r\n sequenced: number;\r\n geneticTrackData?: any[]; // TODO GeneticTrackDatum[]: this is currently a private type within cbioportal repo\r\n geneticTrackRuleSetParams?: IGeneticAlterationRuleSetParams;\r\n groupsSet?: { [id: string]: CountSummary & { alteredPercentage: number } };\r\n}\r\n\r\ninterface CountSummary {\r\n 'alteredCount': number;\r\n 'name': string;\r\n 'profiledCount': number;\r\n};\r\n\r\nexport interface ISampleIconData {\r\n sampleIndex: { [s: string]: number },\r\n sampleColors: { [s: string]: string }\r\n}\r\n\r\n/**\r\n * Maps integer values to color code strings\r\n */\r\nexport interface IColorValueMap {\r\n [value: string]: string\r\n}\r\n\r\nexport enum EModalType{\r\n STUDY,\r\n CONFIRMATION,\r\n PROFILES,\r\n ABOUT,\r\n PW_DETAILS,\r\n GRID,\r\n HELP,\r\n LAYOUT,\r\n CHELP,\r\n PROFILES_COLOR_SCHEME\r\n}\r\n\r\nexport interface IPathwayData{\r\n title: string;\r\n description: string;\r\n nodes: any[];\r\n edges: any[];\r\n}\r\n\r\nexport interface IAlterationData{\r\n [key: string]: {[key: string]: number};\r\n}\r\n\r\nexport interface groupComparisonData{\r\n [key:string]: {[key:string]: number };\r\n}\r\n\r\nexport interface IProfileMetaData{\r\n profileId: string;\r\n studyId?: string;\r\n enabled: boolean;\r\n}\r\n\r\nexport interface IDataTypeMetaData{\r\n enabled: boolean;\r\n checked: boolean;\r\n profile: string;\r\n}\r\n\r\nexport interface ChatMessageMetaData{\r\n message : string;\r\n username : string;\r\n id: number;\r\n userId: number;\r\n date: string;\r\n}\r\n\r\nexport interface IPathwayMapperTable{\r\n name: string;\r\n score: number;\r\n genes: string[];\r\n}\r\n\r\nenum RankingMode {\r\n Count = 0,\r\n Percentage = 1,\r\n CountWithAlteration = 2,\r\n PercentageWithAlteration = 3,\r\n}\r\n\r\n@observer\r\nexport class PathwayMapper extends React.Component {\r\n static readonly CBIO_PROFILE_NAME = \"cBioPortal_data\";\r\n\r\n\r\n readonly MAX_ALLOWED_PROFILES_ENABLED = 6;\r\n \r\n @observable\r\n selectedPathway: string;\r\n\r\n fileManager: FileOperationsManager;\r\n\r\n @observable\r\n editor: EditorActionsManager;\r\n\r\n pathwayActions: PathwayActions;\r\n\r\n @observable\r\n isModalShown: boolean[];\r\n\r\n @observable\r\n colorValueMap: IColorValueMap;\r\n\r\n portalAccessor: CBioPortalAccessor;\r\n\r\n @observable\r\n alterationData: IAlterationData;\r\n\r\n @observable\r\n patientData: any [][] = [];\r\n\r\n @observable\r\n groupComparisonData: groupComparisonData ={} ;\r\n\r\n @observable\r\n pathwayGeneMap: {[key: string]: {[key: string]: string}} = {};\r\n\r\n @observable\r\n bestPathwaysAlgos: any[][] = [];\r\n\r\n @observable\r\n userId: number= -1;\r\n\r\n @observable\r\n oldName = \"\";\r\n \r\n @observable\r\n profiles: IProfileMetaData[] = [];\r\n\r\n @observable \r\n chatMessages: ChatMessageMetaData[] = [];\r\n \r\n @observable \r\n chatMessagesCount: number;\r\n\r\n genes: any[] = [];\r\n\r\n renderTimes : number = 0;\r\n\r\n currentRankingScheme = (this.props.rankingChoices !== undefined ? 2 * this.props.rankingChoices.isAlterationEnabled + this.props.rankingChoices.isPercentageMatch : 0);\r\n\r\n setActiveEdge: (edgeId: number) => void;\r\n viewOperationsManager: ViewOperationsManager;\r\n gridOptionsManager: GridOptionsManager;\r\n\r\n\r\n constructor(props: IPathwayMapperProps){\r\n super(props);\r\n makeObservable(this);\r\n\r\n this.genes = this.props.genes;\r\n \r\n this.fileManager = new FileOperationsManager();\r\n this.pathwayActions = new PathwayActions(this.pathwayHandler, this.profiles, this.fileManager, \r\n this.handleOpen, this.props.isCBioPortal, this.props.isCollaborative);\r\n this.selectedPathway = \"\";\r\n if(this.props.pathwayName){\r\n this.pathwayActions.changePathway(this.props.pathwayName);\r\n }\r\n this.isModalShown = [false, false, false, false, false, false, false, false, false, false];\r\n // TODO: Change below\r\n this.alterationData = {}; //{\"study1_gistic\" : {\"CDK4\": 11, \"MDM2\": 19, \"TP53\": 29}, \"study2_gistic\" : {\"MDM2\": 99, \"TP53\": 98}, \"study3_mutations\": {\"MDM2\": 1, \"TP53\": 2}};\r\n this.extractAllGenes();\r\n\r\n this.colorValueMap = {\r\n '-100' : \"#0000ff\",\r\n '0' : \"#ffffff\",\r\n '100' : \"#ff0000\"\r\n }\r\n\r\n this.chatMessagesCount = 0;\r\n\r\n this.userId = this.props.userId ;\r\n\r\n if(this.props.isCBioPortal){\r\n //this.overlayPortalData();\r\n \r\n // If cBioPortal mode is 'on' it is very likely to have cBioALterationData\r\n // but to be on the safe side below assertion is made.\r\n if(this.props.cBioAlterationData ){\r\n if( this.props.patientView === true){\r\n //PatientView PathwayMapper has a different functionality\r\n //Alteration types are overlayed instead of alterationpercentage\r\n this.calculatePatientData(this.props.cBioAlterationData);\r\n this.addSampleIconData(this.props.sampleIconData);\r\n }\r\n else if( this.props.groupComparisonView === true){\r\n this.calculateGroupComparisonData();\r\n }\r\n else{\r\n this.calculateAlterationData(this.props.cBioAlterationData);\r\n\r\n }\r\n }\r\n\r\n if(this.props.addGenomicDataHandler){\r\n this.props.addGenomicDataHandler(this.addGenomicData);\r\n }\r\n\r\n this.profiles.push({profileId: PathwayMapper.CBIO_PROFILE_NAME, enabled: true});\r\n this.getBestPathway(RankingMode.Count);\r\n this.getBestPathway(RankingMode.Percentage);\r\n this.getBestPathway(RankingMode.CountWithAlteration);\r\n this.getBestPathway(RankingMode.PercentageWithAlteration);\r\n }\r\n /*\r\n const profile1 = {profileId: \"study1_gistic\", studyId: \"study1\", enabled: true};\r\n const profile2 = {profileId: \"study2_gistic\", studyId: \"study2\", enabled: true};\r\n const profile3 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\r\n const profile4 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\r\n const profile5 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\r\n const profile6 = {profileId: \"study3_mutations\", studyId: \"study3\", enabled: true};\r\n this.profiles.push(profile1, profile2, profile3, profile4, profile5, profile6);\r\n */\r\n\r\n }\r\n\r\n @action.bound\r\n setColorMapping(colorValueMap: IColorValueMap) {\r\n this.colorValueMap = colorValueMap;\r\n this.editor.updateGenomicDataColorScheme(this.colorValueMap);\r\n }\r\n\r\n @action\r\n setSelectedPathway(pathway: string) {\r\n this.selectedPathway = pathway;\r\n }\r\n\r\n @action\r\n setEditor(editor: EditorActionsManager) {\r\n this.editor = editor;\r\n }\r\n\r\n @action\r\n addProfile(profile: IProfileMetaData) {\r\n this.profiles.push(profile);\r\n }\r\n\r\n @action\r\n toggleProfileEnabled(index: number) {\r\n this.profiles[index].enabled = !this.profiles[index].enabled;\r\n }\r\n\r\n calculateAlterationData(cBioAlterationData: ICBioData[]){\r\n // Transform cBioDataAlteration into AlterationData\r\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME] = {};\r\n cBioAlterationData.forEach((geneAltData: ICBioData) => {\r\n const perc = (geneAltData.altered / geneAltData.sequenced) * 100;\r\n \r\n // NaN value is replaced with -101 since NaN value leads to some runtime exceptions (such as with toFixed() function),\r\n // hence it is represented as -101. It will be recognized in the genomic data svg creation to show N/P instead of\r\n // a percentage. -101 is chosen because this percentage is impossible to get.\r\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME][geneAltData.gene] = ((Object.is(perc, NaN) ? -101 : perc));\r\n \r\n\r\n });\r\n }\r\n \r\n calculateGroupComparisonData(){\r\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME] = {};\r\n this.props.genomicData.forEach(datum => {\r\n this.groupComparisonData[datum.hugoGeneSymbol] = {};\r\n this.props.activeGroups.forEach( datum2 => {this.groupComparisonData[datum.hugoGeneSymbol][datum2.nameWithOrdinal] = \r\n datum.groupsSet[datum2.nameWithOrdinal].alteredPercentage;\r\n }); \r\n })\r\n }\r\n\r\n calculatePatientData(cBioAlterationData: ICBioData[]){\r\n // Transform cBioDataAlteration into Patient Data every alteration is accepted 100% altered\r\n\r\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME] = {};\r\n \r\n const allTypes = cBioAlterationData.map(x => x.gene); \r\n //const allTypes = cBioAlterationData.map(x => x.percentAltered);\r\n const uniqueTypes = allTypes.filter((x, i, a) => a.indexOf(x) == i)\r\n //This is a flag for GenomicDataOverlayManager showPatientData\r\n this.patientData[\"PatientView\"] = 1;\r\n\r\n uniqueTypes.forEach(x => {\r\n this.patientData[x]= {};\r\n });\r\n\r\n cBioAlterationData.forEach((geneAltData: ICBioData) => {\r\n const perc = (geneAltData.altered / geneAltData.sequenced) * 100;\r\n\r\n this.alterationData[PathwayMapper.CBIO_PROFILE_NAME][geneAltData.gene] = ((Object.is(perc, NaN) ? -101 : perc));\r\n\r\n this.patientData[geneAltData.gene][geneAltData.percentAltered] = ((Object.is(perc, NaN) ? -101 : perc));\r\n this.patientData[geneAltData.gene][\"geneticTrackData\"] = geneAltData.geneticTrackData;\r\n this.patientData[geneAltData.gene][\"geneticTrackRuleSetParams\"] = geneAltData.geneticTrackRuleSetParams;\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n simplifyDate(date: string){\r\n let gapCount = 0;\r\n let simplifiedDate = \"\";\r\n for( let i = 0; i < date.length; i++){\r\n if( date.charAt(i) === ' ') {\r\n gapCount = gapCount + 1;\r\n if( gapCount === 5)\r\n break;\r\n if( gapCount === 4)\r\n simplifiedDate = simplifiedDate + \"\\n\";\r\n else\r\n simplifiedDate = simplifiedDate + \" \"; \r\n }\r\n else\r\n simplifiedDate = simplifiedDate + date.charAt(i);\r\n }\r\n return simplifiedDate;\r\n }\r\n @action.bound\r\n addMessage( Message: string){\r\n if( Message === \"\" ){\r\n return ;\r\n }\r\n if( this.userId === -1 ){\r\n let db_id = this.editor.getDBId();\r\n if(localStorage.getItem( \"chat\" + db_id + \"numberOfUsers\") === null )\r\n localStorage.setItem( \"chat\" + db_id + \"numberOfUsers\", \"\" + 0);\r\n let numberOfUsersInLocal = localStorage.getItem( \"chat\" + db_id + \"numberOfUsers\");\r\n let numberOfUsersConverted = this.convertToNumber( numberOfUsersInLocal );\r\n\r\n this.userId = this.editor.getUserId();\r\n this.userId += 1;\r\n this.editor.incrementNumberOfUsers(); \r\n\r\n localStorage.setItem( \"chat\" + db_id + numberOfUsersConverted, this.props.userName);\r\n numberOfUsersConverted += 1;\r\n localStorage.setItem( \"chat\" + db_id + numberOfUsersConverted, \"\" + this.userId );\r\n numberOfUsersConverted += 1;\r\n\r\n localStorage.setItem( \"chat\" + db_id + \"numberOfUsers\", \"\" + numberOfUsersConverted) ;\r\n\r\n \r\n\r\n }\r\n const newMessage = {\r\n message : Message,\r\n username : this.props.userName,\r\n \r\n id: this.chatMessagesCount,\r\n userId : this.userId,\r\n date: this.simplifyDate(Date().toLocaleString())\r\n };\r\n\r\n this.addChatMessage(newMessage);\r\n setTimeout(this.updateScroll,50);\r\n }\r\n updateScroll(){\r\n document.getElementById('chatBoxxheader').children[0].scrollTop = document.getElementById('chatBoxxheader').children[0].scrollHeight;\r\n }\r\n\r\n convertCharacter( character ){\r\n if( character === '0')\r\n return 0;\r\n if( character === '1')\r\n return 1;\r\n if( character === '2')\r\n return 2;\r\n if( character === '3')\r\n return 3;\r\n if( character === '4')\r\n return 4;\r\n if( character === '5')\r\n return 5;\r\n if( character === '6')\r\n return 6;\r\n if( character === '7')\r\n return 7;\r\n if( character === '8')\r\n return 8;\r\n if( character === '9')\r\n return 9;\r\n return -1;\r\n }\r\n convertToNumber(value: string) {\r\n let converted : number = 0;\r\n let powOf10 = 1;\r\n for( let i = value.length - 1; i >= 0; i--){\r\n converted = converted + powOf10 * ( this.convertCharacter(value.charAt(i)));\r\n powOf10 *= 10;\r\n }\r\n return converted;\r\n }\r\n\r\n @action.bound\r\n addChatMessage( newMessage : ChatMessageMetaData){\r\n this.editor.addNewMessage( newMessage, this.chatMessagesCount);\r\n this.editor.incrementMessageCount();\r\n }\r\n \r\n\r\n updatePathwayTitleCallback( pathwayTitle: string){\r\n this.pathwayActions.changePathwayTitle( pathwayTitle)\r\n }\r\n\r\n addSampleIconData(sampleIconData: any) {\r\n if (sampleIconData) {\r\n this.patientData[\"sampleColors\"] = sampleIconData.sampleColors;\r\n this.patientData[\"sampleIndex\"] = sampleIconData.sampleIndex;\r\n }\r\n }\r\n\r\n getGeneStudyMap(studyGeneMap: any){\r\n \r\n const genomicDataMap: any = {};\r\n for (const cancerStudy of Object.keys(studyGeneMap)) {\r\n\r\n const cancerData = studyGeneMap[cancerStudy];\r\n\r\n for (const geneSymbol of Object.keys(cancerData)) {\r\n if (genomicDataMap[geneSymbol] === undefined) genomicDataMap[geneSymbol] = {};\r\n\r\n genomicDataMap[geneSymbol][cancerStudy] = studyGeneMap[cancerStudy][geneSymbol].toFixed(2);\r\n }\r\n }\r\n return genomicDataMap;\r\n }\r\n\r\n getAlterationAveragePerGene(genomicDataMap: any){\r\n\r\n const geneAlterationMap: any = {};\r\n for(const gene of Object.keys(genomicDataMap)){\r\n let sum = 0, count = 0;\r\n\r\n for(const alteration of Object.values(genomicDataMap[gene])){\r\n sum += parseFloat(alteration as string);\r\n count++;\r\n }\r\n if(count === 0){\r\n geneAlterationMap[gene] = 0;\r\n } else {\r\n geneAlterationMap[gene] = sum / count;\r\n }\r\n }\r\n\r\n return geneAlterationMap;\r\n }\r\n\r\n\r\n getBestPathways(rankingMode: RankingMode) {\r\n const genomicDataMap = this.getGeneStudyMap(this.alterationData);\r\n const alterationPerGene = this.getAlterationAveragePerGene(genomicDataMap);\r\n maxHeap = maxHeapFn();\r\n const matchedGenesMap: any = {};\r\n const bestPathways: any[] = [];\r\n for (const pathwayName in this.pathwayGeneMap){\r\n if (this.pathwayGeneMap.hasOwnProperty(pathwayName)) {\r\n const genesMatching = [];\r\n // Calculate sum of all alterations\r\n let sumOfAlterations = 0;\r\n this.props.genes.forEach(gene => {\r\n if(this.pathwayGeneMap[pathwayName].hasOwnProperty(gene.hugoGeneSymbol) &&\r\n this.pathwayGeneMap[pathwayName][gene.hugoGeneSymbol] === \"GENE\") {\r\n genesMatching.push(gene.hugoGeneSymbol);\r\n if (this.props.groupComparisonView) {\r\n // if enriched group exists use the alteration percentage of the enriched group\r\n if (gene.enrichedGroup && gene.groupsSet[gene.enrichedGroup]) {\r\n sumOfAlterations += gene.groupsSet[gene.enrichedGroup].alteredPercentage || 0;\r\n }\r\n // else use the max value\r\n else {\r\n sumOfAlterations += Math.max(...Object.values(gene.groupsSet).map(v => (v as any).alteredPercentage || 0));\r\n }\r\n }\r\n else {\r\n sumOfAlterations += alterationPerGene[gene.hugoGeneSymbol] || 0;\r\n }\r\n }\r\n });\r\n matchedGenesMap[pathwayName] = genesMatching;\r\n const geneCount = Object.values(this.pathwayGeneMap[pathwayName]).filter(geneType => geneType === \"GENE\").length;\r\n\r\n if(rankingMode === 0){\r\n maxHeap.insert( genesMatching.length, {pathwayName: pathwayName});\r\n } else if(rankingMode === 1){\r\n maxHeap.insert( genesMatching.length / geneCount * 100, {pathwayName: pathwayName});\r\n } else if(rankingMode === 2){\r\n maxHeap.insert( sumOfAlterations, {pathwayName: pathwayName});\r\n } else if(rankingMode === 3){\r\n maxHeap.insert( genesMatching.length * sumOfAlterations / geneCount, {pathwayName: pathwayName});\r\n }\r\n\r\n }\r\n }\r\n while(maxHeap.size() > 0) {\r\n const top = maxHeap.extractMax();\r\n const pathwayName = top.getValue().pathwayName;\r\n bestPathways.push({score: top.getKey(), genesMatched: matchedGenesMap[pathwayName], pathwayName: pathwayName});\r\n }\r\n return bestPathways;\r\n }\r\n\r\n /**\r\n * \r\n * @param rankingMode: number => 0 = Count, 1 = Percentage, 2 = Count with Alteration, 3 = Percentage with Alteration\r\n * \r\n */\r\n getBestPathway(rankingMode: RankingMode) {\r\n const bestPathways = this.getBestPathways(rankingMode);\r\n if(this.bestPathwaysAlgos.length === this.currentRankingScheme && this.props.currentPathway !== undefined && this.props.currentPathway === \"\") // First pathway of the first method is shown as the default pathway.\r\n this.setSelectedPathway(bestPathways[0].pathwayName);\r\n else if ( this.bestPathwaysAlgos.length === this.currentRankingScheme && this.props.currentPathway !== undefined && this.props.currentPathway.length > 0)\r\n this.setSelectedPathway(this.props.currentPathway);\r\n else if ( this.bestPathwaysAlgos.length === this.currentRankingScheme)\r\n this.setSelectedPathway(bestPathways[0].pathwayName);\r\n this.bestPathwaysAlgos.push(bestPathways);\r\n }\r\n\r\n getBestPathwayReRank(rankingMode: RankingMode) {\r\n const bestPathways = this.getBestPathways(rankingMode);\r\n this.bestPathwaysAlgos.push(bestPathways);\r\n }\r\n \r\n // This method extracts all genes of a pathway and adds it to the pathwayGeneMap\r\n // so that it can be used by percentage calculation and genomic data \r\n // Note: Pathway title\r\n @autobind\r\n includePathway(pathwayData?: IPathwayData, pathwayName?: string){\r\n const genes = pathwayData.nodes;\r\n const geneHash: any = {};\r\n\r\n for(const gene of genes){\r\n\r\n if(gene.data.type === \"GENE\"){\r\n geneHash[gene.data.name] = gene.data.type;\r\n }\r\n }\r\n\r\n this.pathwayGeneMap[pathwayData.title] = geneHash;\r\n\r\n }\r\n\r\n extractAllGenes(){\r\n for(const pathwayName in pathways){\r\n if(pathways.hasOwnProperty(pathwayName)){\r\n\r\n const pathwayData: IPathwayData = SaveLoadUtility.parseGraph(pathways[pathwayName], true);\r\n this.includePathway(pathwayData);\r\n }\r\n }\r\n }\r\n\r\n rankPathways(){\r\n this.bestPathwaysAlgos = [];\r\n this.getBestPathwayReRank(RankingMode.Count);\r\n this.getBestPathwayReRank(RankingMode.Percentage);\r\n this.getBestPathwayReRank(RankingMode.CountWithAlteration);\r\n this.getBestPathwayReRank(RankingMode.PercentageWithAlteration);\r\n this.genes = this.props.genes;\r\n }\r\n\r\n loadRedirectedPortalData(){\r\n\r\n if(!this.props.alterationData){ // If size 0 that means it is not redirected.\r\n return;\r\n }\r\n \r\n const redirectedProfiles = Object.keys(this.props.alterationData).map((data: string) : IProfileMetaData => ({profileId: data, enabled: true}));\r\n redirectedProfiles.forEach((redirectedProfile) => {\r\n this.addProfile(redirectedProfile);\r\n });\r\n this.editor.addGenomicData(this.props.alterationData, true, this.editor.getEmptyGroupID());\r\n }\r\n\r\n exists(profileId: string){\r\n\r\n let exists = false;\r\n this.profiles.forEach((profile: IProfileMetaData) => {\r\n if(profile.profileId === profileId){\r\n exists = true;\r\n }\r\n });\r\n\r\n return exists;\r\n }\r\n\r\n @autobind\r\n getCountOfEnabledProfiles(){\r\n let countOfEnabledProfiles = 0;\r\n for( const profile of Object.values(this.profiles) ){\r\n countOfEnabledProfiles += ( profile.enabled === true ? 1 : 0 );\r\n }\r\n return countOfEnabledProfiles;\r\n }\r\n\r\n @autobind\r\n loadFromCBio(dataTypes: {[dataType: string]: IDataTypeMetaData}, studyData: any[]){\r\n if(!this.pathwayActions.doesCyHaveElements()){\r\n toast.warn('Your pathway is empty!');\r\n return;\r\n }\r\n\r\n let numberOfEnabledProfiles = this.getCountOfEnabledProfiles();\r\n for (const metadata of Object.values(dataTypes))\r\n {\r\n if(!metadata.checked) {\r\n continue;\r\n } \r\n if(this.exists(metadata.profile)){\r\n toast.warn(metadata.profile + \" already exists.\");\r\n continue;\r\n }\r\n\r\n const studyId = studyData[0];\r\n const profileId = metadata.profile;\r\n const enableNewProfile = numberOfEnabledProfiles < this.MAX_ALLOWED_PROFILES_ENABLED;\r\n if( enableNewProfile === true)\r\n numberOfEnabledProfiles++;\r\n\r\n const newProfile = {\r\n studyId: studyId,\r\n profileId: profileId,\r\n enabled: enableNewProfile\r\n }\r\n\r\n this.addProfile(newProfile);\r\n\r\n const genes = this.editor.cy.nodes()\r\n .filter(node => node.data(\"type\") === \"GENE\")\r\n .map(node => node.data(\"name\"));\r\n\r\n \r\n this.portalAccessor.getProfileData({\r\n caseSetId: studyId,\r\n geneticProfileId: profileId,\r\n genes: genes\r\n },\r\n (genomicData: any) => {\r\n this.editor.addGenomicData(genomicData, true, this.editor.getEmptyGroupID());\r\n let visibilityObject = {};\r\n visibilityObject[newProfile.profileId] = newProfile.enabled;\r\n this.editor.updateGenomicDataVisibility(visibilityObject);\r\n });\r\n \r\n }\r\n }\r\n\r\n @autobind\r\n setActiveEdgeHandler(setActiveEdge: (edgeId: number) => void){\r\n this.setActiveEdge = setActiveEdge;\r\n }\r\n\r\n @autobind\r\n colorSchemeChangeCallback(colorScheme: IColorValueMap) {\r\n this.colorValueMap = colorScheme;\r\n }\r\n\r\n @autobind\r\n incrementChatMessageCountCallback( chatMessageCount: number) {\r\n this.chatMessagesCount = chatMessageCount;\r\n }\r\n\r\n @autobind\r\n newMessageCallback( message : ChatMessageMetaData ){\r\n this.chatMessages.push(message);\r\n setTimeout(this.updateScroll, 50);\r\n }\r\n\r\n @autobind\r\n addGenomicData(cBioAlterationData: ICBioData[]){\r\n\r\n this.calculateAlterationData(cBioAlterationData);\r\n this.editor.removeGenomicData();\r\n this.editor.addGenomicData(this.alterationData, true, this.editor.getEmptyGroupID());\r\n }\r\n\r\n @autobind\r\n emphasizeQueryGenes() {\r\n this.pathwayActions.emphasizeQueryGenes(this.props.genes.map((gene: any) => gene.hugoGeneSymbol));\r\n }\r\n\r\n render() {\r\n const isCBioPortal = this.props.isCBioPortal; \r\n if( this.renderTimes > 1 && this.props.groupComparisonView === true && this.props.genes !== this.genes) {\r\n this.rankPathways();\r\n }\r\n this.renderTimes++;\r\n\r\n const cytoComp = ;\r\n\r\n return (\r\n\r\n
\r\n
\r\n {!isCBioPortal && \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n { isCBioPortal &&\r\n \r\n \r\n \r\n \r\n {this.props.messageBanner ?\r\n {this.props.messageBanner()}\r\n :\r\n \r\n }\r\n \r\n {this.selectedPathway}\r\n \r\n \r\n }\r\n \r\n
\r\n {\r\n (!isCBioPortal && \r\n
\r\n \r\n
)\r\n }\r\n\r\n { isCBioPortal ?\r\n (\r\n {cytoComp}\r\n
Powered by PathwayMapper
\r\n )\r\n : (cytoComp)\r\n }\r\n {\r\n (isCBioPortal &&\r\n \r\n \r\n )\r\n }\r\n
\r\n\r\n {/* isCBioPortal &&\r\n \r\n Powered by PathwayMapper\r\n */\r\n }\r\n\r\n { (
\r\n\r\n {\r\n (
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
)\r\n }\r\n { !this.props.isCBioPortal &&\r\n \r\n \r\n \r\n \r\n }\r\n \r\n\r\n {this.pathwayActions.setUploaders(ref, false);}}\r\n style={{display: 'none'}}\r\n onChange={(e) => {this.pathwayActions.onChangeFile(e, false);}}\r\n />\r\n {this.pathwayActions.setUploaders(ref, true);}}\r\n style={{display: 'none'}}\r\n onChange={(e) => {this.pathwayActions.onChangeFile(e, true);}}\r\n />\r\n {this.pathwayActions.setOverlayUploader(ref);}}\r\n style={{display: 'none'}}\r\n onChange={(e) => {this.pathwayActions.overlayFromText(e.target.files[0]);}}\r\n />\r\n
)\r\n }\r\n
\r\n
\r\n );\r\n }\r\n\r\n componentDidMount(){\r\n if(!this.props.isCBioPortal){\r\n $(\".container\").css('width', \"auto\");\r\n $(\".container\").css('paddingLeft', 0);\r\n $(\".container\").css('marginLeft', 5);\r\n } else {\r\n this.pathwayActions.emphasizeQueryGenes(this.props.genes.map((gene: any) => gene.hugoGeneSymbol));\r\n }\r\n }\r\n\r\n componentDidUpdate(){\r\n if(this.props.isCBioPortal){\r\n this.pathwayActions.emphasizeQueryGenes(this.props.genes.map((gene: any) => gene.hugoGeneSymbol));\r\n }\r\n }\r\n\r\n @action.bound\r\n handleOpen(modalId: EModalType){\r\n this.isModalShown[modalId] = true;\r\n }\r\n\r\n @action.bound\r\n handleClose(modalId: EModalType){\r\n this.isModalShown[modalId] = false;\r\n }\r\n\r\n @autobind\r\n editorHandler(editor, eh, undoRedoManager) {\r\n this.setEditor(editor);\r\n this.gridOptionsManager = new GridOptionsManager(this.editor.cy);\r\n this.viewOperationsManager = new ViewOperationsManager(\r\n this.editor,\r\n this.editor.cy,\r\n );\r\n this.pathwayActions.editorHandler(\r\n editor,\r\n eh,\r\n undoRedoManager,\r\n this.viewOperationsManager,\r\n this.gridOptionsManager,\r\n );\r\n \r\n if (this.props.isCBioPortal) {\r\n if (this.props.patientView) {\r\n this.editor.addGenomicData(\r\n this.patientData,\r\n true,\r\n this.editor.getEmptyGroupID(),\r\n );\r\n } else if (this.props.groupComparisonView === true) {\r\n this.editor.addGenomicData(\r\n this.groupComparisonData,\r\n true,\r\n this.editor.getEmptyGroupID(),\r\n this.props.activeGroups,\r\n );\r\n } else {\r\n this.editor.addGenomicData(\r\n this.alterationData,\r\n true,\r\n this.editor.getEmptyGroupID(),\r\n );\r\n }\r\n } else {\r\n this.portalAccessor = new CBioPortalAccessor();\r\n this.loadRedirectedPortalData();\r\n }\r\n }\r\n\r\n @autobind\r\n pathwayHandler(pathway: string){\r\n this.setSelectedPathway(pathway);\r\n if(this.pathwayGeneMap[pathway] && this.props.changePathwayHandler)\r\n this.props.changePathwayHandler(\r\n Object.keys(this.pathwayGeneMap[pathway])\r\n .filter(gene => (!this.alterationData[PathwayMapper.CBIO_PROFILE_NAME].hasOwnProperty(gene)))\r\n );\r\n }\r\n}\r\n\r\nexport default PathwayMapper;","import autobind from \"autobind-decorator\";\r\nimport { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React ,{Component} from \"react\";\r\nimport \"../css/supp.css\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n FormControl,\r\n ListGroup,\r\n ListGroupItem,\r\n Modal,\r\n} from \"react-bootstrap\";\r\nimport { toast } from \"react-toastify\";\r\nimport { ChatMessageMetaData, EModalType, IDataTypeMetaData } from \"../ui/react-pathway-mapper\";\r\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\r\n\r\ninterface ChatMessageProps {\r\n message: ChatMessageMetaData;\r\n username: string;\r\n userId: number;\r\n}\r\n\r\n@observer\r\nexport default class ChatBox extends React.Component{\r\n\r\n constructor(props: ChatMessageProps) {\r\n super(props);\r\n makeObservable(this);\r\n }\r\n\r\n render() { \r\n /*let MyMessageColors = ['#1e90ff', '#ff0000', '#ffd700', '#006400', '#0000ff', '#257359', '#c71585', '#ff4500']; \r\n let OthersMessageColors = ['#8ec7fe', '#ff7f7f', '#ffeb7f', '#31ff31', '#7f7fff', '#b2e5d4', '#f17bc5', '#ffa27f' ]; */\r\n let MyMessageColors = ['#1e90ff', '#ff0000', '#b0b000', '#006400', '#0000ff', '#257359', '#c71585', '#fd713d'];\r\n let OthersMessageColors = ['#8ec7fe', '#f08c8c', '#f6f7b6', '#31ff31', '#b3b3f7', '#b2e5d4', '#f17bc5', '#fdb89e' ]; \r\n return (\r\n
\r\n
{this.props.message.username + \"_\" + this.props.message.userId }
\r\n
{this.props.message.message}
\r\n
\r\n );\r\n }\r\n}\r\n","import autobind, { boundMethod } from \"autobind-decorator\";\r\nimport { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React ,{Component} from \"react\";\r\nimport ChatMessage from \"./ChatMessage\";\r\nimport \"../css/supp.css\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n FormControl,\r\n ListGroup,\r\n ListGroupItem,\r\n Modal,\r\n} from \"react-bootstrap\";\r\nimport { toast } from \"react-toastify\";\r\nimport { ChatMessageMetaData, EModalType, IDataTypeMetaData } from \"../ui/react-pathway-mapper\";\r\nimport CBioPortalAccessor from \"../utils/CBioPortalAccessor\";\r\nimport { threadId } from \"worker_threads\";\r\n\r\ninterface ChatBoxProps {\r\n messages: ChatMessageMetaData[];\r\n addMessage: Function;\r\n showChat: boolean;\r\n username: string;\r\n openChat: Function;\r\n userId: number;\r\n}\r\n\r\n@observer\r\nexport default class ChatBox extends React.Component{\r\n\r\n message: string = \"\";\r\n charactersPerLine: number = 21;\r\n\r\n constructor(props: ChatBoxProps) {\r\n super(props);\r\n makeObservable(this);\r\n this.state = {\r\n diffX: 0,\r\n diffY: 0,\r\n dragging: false,\r\n styles: {}\r\n }\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.handleChange = this.handleChange.bind(this); \r\n }\r\n\r\n convertMessage( message: string){\r\n let convertedMessage = \"\";\r\n let index = 0;\r\n \r\n while(index < message.length) {\r\n let lastIndexinLine = index + this.charactersPerLine - 1;\r\n if( lastIndexinLine >= message.length - 1 ){\r\n lastIndexinLine = message.length - 1;\r\n }\r\n\r\n else if( message.charAt( lastIndexinLine + 1 ) === \" \" ) { \r\n }\r\n else {\r\n while( lastIndexinLine >= 0 ) {\r\n if( message.charAt( lastIndexinLine) === \" \" ){\r\n break;\r\n }\r\n lastIndexinLine = lastIndexinLine - 1;\r\n }\r\n }\r\n if( index > lastIndexinLine ){\r\n for( let i = index ; i < index + this.charactersPerLine; i++){\r\n convertedMessage = convertedMessage + message.charAt( i );\r\n }\r\n convertedMessage = convertedMessage + \"-\";\r\n convertedMessage = convertedMessage + \"\\n\";\r\n index = index + this.charactersPerLine;\r\n } \r\n else {\r\n for( let i = index ; i <= lastIndexinLine; i++){\r\n convertedMessage = convertedMessage + message.charAt( i );\r\n }\r\n convertedMessage = convertedMessage + \"\\n\";\r\n index = lastIndexinLine + 1;\r\n } \r\n } \r\n return convertedMessage;\r\n }\r\n\r\n handleClose(){\r\n this.props.openChat();\r\n }\r\n\r\n handleElement( element){\r\n element.value = \"\";\r\n }\r\n\r\n handleSubmit(event){\r\n event.preventDefault();\r\n let element = document.getElementById(\"message-text\");\r\n this.handleElement(document.getElementById(\"message-text\"));\r\n this.props.addMessage(this.convertMessage(this.message));\r\n this.message = \"\";\r\n }\r\n \r\n handleChange(event){\r\n this.message = event.target.value;\r\n }\r\n\r\n @autobind\r\n dragElement(elmnt) {\r\n var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;\r\n document.getElementById(\"chatBoxxDrag\").onmousedown = dragMouseDown;\r\n\r\n function dragMouseDown(e) {\r\n e = e || window.event;\r\n e.preventDefault();\r\n // get the mouse cursor position at startup:\r\n pos3 = e.clientX;\r\n pos4 = e.clientY;\r\n document.onmouseup = closeDragElement;\r\n // call a function whenever the cursor moves:\r\n document.onmousemove = elementDrag;\r\n }\r\n\r\n function elementDrag(e) {\r\n e = e || window.event;\r\n e.preventDefault();\r\n // calculate the new cursor position:\r\n pos1 = pos3 - e.clientX;\r\n pos2 = pos4 - e.clientY;\r\n pos3 = e.clientX;\r\n pos4 = e.clientY;\r\n // set the element's new position:\r\n elmnt.style.top = (elmnt.offsetTop - pos2) + \"px\";\r\n elmnt.style.left = (elmnt.offsetLeft - pos1) + \"px\";\r\n }\r\n\r\n function closeDragElement() {\r\n /* stop moving when mouse button is released:
\r\n */\r\n document.onmouseup = null;\r\n document.onmousemove = null;\r\n }\r\n}\r\n\r\n\r\n render() {\r\n return (\r\n
this.dragElement(document.getElementById(\"chatBoxx\"))} onMouseDown={()=>{this.dragElement(document.getElementById(\"chatBoxx\"))}} >\r\n
\r\n
\r\n \r\n { \r\n this.props.messages\r\n .map( (message) => {\r\n const id = message.id;\r\n if( message.username === this.props.username && this.props.userId === message.userId ) {\r\n return (\r\n
\r\n
{message.date}
\r\n \r\n
\r\n );\r\n }\r\n else{\r\n return (\r\n
\r\n \r\n
{message.date}
\r\n
\r\n );\r\n }\r\n\r\n })\r\n }\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
(this.props.addMessage(this.convertMessage(this.message),), this.message = \"\")} > \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import { action, makeObservable, observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport React from \"react\";\r\nimport { Button, Panel } from \"react-bootstrap\";\r\nimport \"../css/supp.css\";\r\n// @ts-ignore\r\nimport acImg from \"../images/edges/activates.svg\";\r\n// @ts-ignore\r\nimport bindImg from \"../images/edges/binds.svg\";\r\n// @ts-ignore\r\nimport indImg from \"../images/edges/induces.svg\";\r\n// @ts-ignore\r\nimport inhImg from \"../images/edges/inhibits.svg\";\r\n// @ts-ignore\r\nimport repImg from \"../images/edges/represses.svg\";\r\nimport PathwayActions from \"../utils/PathwayActions\";\r\nimport ChatBox from \"./ChatBox\";\r\n\r\nimport { ChatMessageMetaData, EModalType } from \"./react-pathway-mapper\";\r\nimport {\r\n Checkbox,\r\n FormControl,\r\n ListGroup,\r\n ListGroupItem,\r\n Modal,\r\n} from \"react-bootstrap\";\r\n\r\n\r\ninterface ISideBarProps{\r\n pathwayActions: PathwayActions;\r\n setActiveEdgeHandler: Function;\r\n handleOpen: Function;\r\n messages: ChatMessageMetaData[];\r\n addMessage: Function;\r\n username: string;\r\n userId: number;\r\n isCollaborative: boolean;\r\n}\r\n\r\n@observer\r\nexport default class Sidebar extends React.Component{\r\n\r\n @observable\r\n activeEdge: number = -1;\r\n\r\n @observable\r\n showChat: boolean = false; \r\n\r\n constructor(props: ISideBarProps){\r\n super(props);\r\n makeObservable(this);\r\n props.setActiveEdgeHandler(this.setActiveEdge);\r\n \r\n }\r\n\r\n addEdge(edgeIndex: number){\r\n if(edgeIndex === this.activeEdge){\r\n this.setActiveEdge(-1);\r\n this.props.pathwayActions.addEdge(-1);\r\n return;\r\n }\r\n this.setActiveEdge(edgeIndex);\r\n this.props.pathwayActions.addEdge(edgeIndex);\r\n }\r\n\r\n @action.bound\r\n setActiveEdge(edgeIndex: number){\r\n this.activeEdge = edgeIndex;\r\n }\r\n\r\n changeScroll(){\r\n document.getElementById('chatBoxxheader').children[0].scrollTop = document.getElementById('chatBoxxheader').children[0].scrollHeight;\r\n }\r\n @action.bound\r\n openChat(){\r\n this.showChat = !this.showChat;\r\n setTimeout(this.changeScroll, 50);\r\n }\r\n\r\n\r\n render(){\r\n\r\n const edgeTypes = [\"Activates\", \"Inhibits\", \"Induces\", \"Represses\", \"Binds\"];\r\n\r\n const edgeImgs = [acImg, inhImg, indImg, repImg, bindImg];\r\n\r\n const nodeIds = [\"simpleNodeDiv\", \"familyNodeDiv\", \"complexNodeDiv\", \"compartmentNodeDiv\", \"processNodeDiv\"];\r\n if( this.props.isCollaborative){\r\n return(\r\n
\r\n \r\n \r\n Network\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n Node Palette\r\n \r\n \r\n \r\n {\r\n nodeIds.map((id) => {\r\n return (\r\n
\r\n
);\r\n })\r\n }\r\n
\r\n
\r\n\r\n \r\n \r\n Interaction Palette\r\n \r\n \r\n
\r\n {\r\n edgeTypes.map((edgeType: string, i: number) => {\r\n return ();\r\n })\r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n else {\r\n return(\r\n
\r\n \r\n \r\n Network\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n Node Palette\r\n \r\n \r\n \r\n {\r\n nodeIds.map((id) => {\r\n return (\r\n
\r\n
);\r\n })\r\n }\r\n
\r\n
\r\n\r\n \r\n \r\n Interaction Palette\r\n \r\n \r\n
\r\n {\r\n edgeTypes.map((edgeType: string, i: number) => {\r\n return ();\r\n })\r\n }\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/pathway-mapper/dist/managers/EditorActionsManager.d.ts b/packages/pathway-mapper/dist/managers/EditorActionsManager.d.ts index 7c4964c4..524f8893 100644 --- a/packages/pathway-mapper/dist/managers/EditorActionsManager.d.ts +++ b/packages/pathway-mapper/dist/managers/EditorActionsManager.d.ts @@ -143,10 +143,9 @@ export default class EditorActionsManager { getGenomicDataSVG(node: any): any; getOncoprintDataSVG(node: any): any; removeGenomicData(): void; - addGenomicData(genomicData: any): void; + addGenomicData(genomicData: any, isFromPortal: boolean, groupID?: any, activeGroups?: any[]): void; adjustVisibilityShareDB(profileId: string, isEnabled: boolean): void; addToProfiles(profileId: string): void; - addPortalGenomicData(genomicData: any, groupID: any, activeGroups?: any[]): void; shareDBGenomicDataHandler(op: any): void; shareDBGenomicDataGroupChangeHandler(op: any): void; shareDBGenomicDataVisibilityHandler(op: any): void; diff --git a/packages/pathway-mapper/dist/managers/GenomicDataOverlayManager.d.ts b/packages/pathway-mapper/dist/managers/GenomicDataOverlayManager.d.ts index efe3225c..13c71e60 100644 --- a/packages/pathway-mapper/dist/managers/GenomicDataOverlayManager.d.ts +++ b/packages/pathway-mapper/dist/managers/GenomicDataOverlayManager.d.ts @@ -14,24 +14,15 @@ export default class GenomicDataOverlayManager { private colorScheme; constructor(cy: any); getEmptyGroupID(): number; - addGenomicDataLocally(genomicData: any, groupID: any): void; - preparePortalGenomicDataShareDB(genomicData: any): { - genomicDataMap: {}; - visibilityMap: {}; - }; + addGenomicDataLocally(genomicData: any, groupID: any, isFromPortal: boolean, activeGroups?: any[]): void; addGenomicData(data: any): void; removeGenomicVisData(): void; addGenomicDataWithGeneSymbol(geneSymbol: any, data: any): void; addGenomicGroupData(groupID: any, data: any): void; - addPortalGenomicData(data: any, groupID: any, groupsToBeRendered?: any): void; clearAllGenomicData: () => void; removeGenomicData(): void; removeGenomicDataWithGeneSymbol(geneSymbol: any): void; addGenomicVisData(key: any, data: any): void; - prepareGenomicDataShareDB: (genomicData: any) => { - genomicDataMap: {}; - visibilityMap: {}; - }; updateGenomicDataVisibility: (_key: any, isVisible: any) => void; hideGenomicData: () => void; countVisibleGenomicDataByType(): number; @@ -42,7 +33,10 @@ export default class GenomicDataOverlayManager { showGenomicData(resizeNodeCallback?: (node: any) => void): void; generateHTMLContentForComparisonNodeTooltip(ele: any, groupsToBeRendered: any): JQuery; showGroupComparisonData(groupsToBeRendered: any[], resizeNodeCallback?: (node: any) => void): void; - parseGenomicData(genomicData: any, groupID: any): void; + prepareGenomicData: (genomicData: any, groupID: any, isCollaborative: boolean, isFromPortal: boolean) => { + genomicDataMap: any; + visibilityMap: any; + }; registerObserver(observer: any): void; notifyObservers(): void; getAlterationCountForPatient(geneData: any): number; diff --git a/packages/pathway-mapper/package.json b/packages/pathway-mapper/package.json index 1ff9abd8..14e96600 100644 --- a/packages/pathway-mapper/package.json +++ b/packages/pathway-mapper/package.json @@ -40,9 +40,9 @@ "cytoscape-fcose": "github:iVis-at-Bilkent/cytoscape.js-fcose#unstable", "cytoscape-grid-guide": "github:iVis-at-Bilkent/cytoscape.js-grid-guide#unstable", "cytoscape-layout-utilities": "github:iVis-at-Bilkent/cytoscape.js-layout-utilities#unstable", - "cytoscape-navigator": "^2.0.2", + "cytoscape-navigator": "^1.3.3", "cytoscape-node-editing": "github:iVis-at-Bilkent/cytoscape.js-node-editing#unstable", - "cytoscape-panzoom": "~2.5.3", + "cytoscape-panzoom": "~2.5.2", "cytoscape-popper": "^2.0.0", "cytoscape-undo-redo": "github:iVis-at-Bilkent/cytoscape.js-undo-redo#unstable", "cytoscape-view-utilities": "github:iVis-at-Bilkent/cytoscape.js-view-utilities#unstable", diff --git a/packages/pathway-mapper/src/managers/EditorActionsManager.tsx b/packages/pathway-mapper/src/managers/EditorActionsManager.tsx index 2d72efca..6b27b395 100644 --- a/packages/pathway-mapper/src/managers/EditorActionsManager.tsx +++ b/packages/pathway-mapper/src/managers/EditorActionsManager.tsx @@ -1797,34 +1797,52 @@ export default class EditorActionsManager { } - addGenomicData(genomicData: any) - { - const groupID = this.getEmptyGroupID(); - - if(this.isCollaborative) - { - var parsedGenomicData = this.genomicDataOverlayManager.prepareGenomicDataShareDB(genomicData); - this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap); - this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap), - groupID); - - let currentVisibleGenomicDataCount = this.genomicDataOverlayManager.countVisibleGenomicDataByType(); - Object.keys(parsedGenomicData.visibilityMap).forEach(study => { - if (parsedGenomicData.visibilityMap[study] && (currentVisibleGenomicDataCount >= 6)) { - parsedGenomicData.visibilityMap[study] = false; - } - else if(parsedGenomicData.visibilityMap[study]) { - currentVisibleGenomicDataCount++; - } + addGenomicData(genomicData: any, isFromPortal: boolean, groupID?: any, activeGroups?: any[]) + { + if (!isFromPortal) { + groupID = this.getEmptyGroupID(); + } + + if (this.isCollaborative) { + var parsedGenomicData = this.genomicDataOverlayManager.prepareGenomicData( + genomicData, + null, + this.isCollaborative, + isFromPortal + ); + this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap); + this.shareDBManager.groupGenomicData( + Object.keys(parsedGenomicData.visibilityMap), + groupID + ); + + if (!isFromPortal) { + let currentVisibleGenomicDataCount = + this.genomicDataOverlayManager.countVisibleGenomicDataByType(); + Object.keys(parsedGenomicData.visibilityMap).forEach((study) => { + if ( + parsedGenomicData.visibilityMap[study] && + currentVisibleGenomicDataCount >= 6 + ) { + parsedGenomicData.visibilityMap[study] = false; + } else if (parsedGenomicData.visibilityMap[study]) { + currentVisibleGenomicDataCount++; + } }); - - this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap); - } - else - { - this.genomicDataOverlayManager.addGenomicDataLocally(genomicData, groupID); + } + + this.shareDBManager.addGenomicVisibilityData( + parsedGenomicData.visibilityMap + ); + } else { + if (activeGroups !== undefined) { + this.genomicDataOverlayManager.addGenomicDataLocally(genomicData, groupID, isFromPortal, activeGroups); + } else { + this.genomicDataOverlayManager.addGenomicDataLocally(genomicData, groupID, isFromPortal); + } + } - } + } adjustVisibilityShareDB(profileId: string, isEnabled: boolean){ const targetProfileIndex = this.profiles.map(profile => profile.profileId).indexOf(profileId); @@ -1846,28 +1864,6 @@ export default class EditorActionsManager { }); } - addPortalGenomicData(genomicData: any, groupID: any, activeGroups?: any[]) - { - - if(this.isCollaborative) - { - var parsedGenomicData = this.genomicDataOverlayManager.preparePortalGenomicDataShareDB(genomicData); - this.shareDBManager.addGenomicData(parsedGenomicData.genomicDataMap); - this.shareDBManager.groupGenomicData(Object.keys(parsedGenomicData.visibilityMap), - groupID); - this.shareDBManager.addGenomicVisibilityData(parsedGenomicData.visibilityMap); - } - else - { - if( activeGroups !== undefined){ - this.genomicDataOverlayManager.addPortalGenomicData(genomicData, groupID, activeGroups); - } - else { - this.genomicDataOverlayManager.addPortalGenomicData(genomicData, groupID); - } - } - } - shareDBGenomicDataHandler(op: any) { var isRemove = Object.keys(op)[1] === 'od'; diff --git a/packages/pathway-mapper/src/managers/GenomicDataOverlayManager.ts b/packages/pathway-mapper/src/managers/GenomicDataOverlayManager.ts index c00757c2..63ecb401 100644 --- a/packages/pathway-mapper/src/managers/GenomicDataOverlayManager.ts +++ b/packages/pathway-mapper/src/managers/GenomicDataOverlayManager.ts @@ -1,9 +1,11 @@ import $ from "jquery"; -import { forEach } from "lodash"; import { GeneticAlterationRuleSet, shapeToSvg } from "oncoprintjs"; import tippy from "tippy.js"; import "tippy.js/dist/tippy.css"; // optional for styling -import { groupComparisonData, IColorValueMap } from "../ui/react-pathway-mapper"; +import { + groupComparisonData, + IColorValueMap, +} from "../ui/react-pathway-mapper"; interface Color { r: number; @@ -172,43 +174,62 @@ function genomicDataRectangleGenerator( } let colorString = ""; - colorString = ( percent === undefined || percent[0] === '-' || Number(percent) > 100 ) ? "rgb(210,210,210)" : `rgb(${Math.round(color.r)}, ${Math.round(color.g )}, + colorString = + percent === undefined || percent[0] === "-" || Number(percent) > 100 + ? "rgb(210,210,210)" + : `rgb(${Math.round(color.r)}, ${Math.round(color.g)}, ${Math.round(color.b)})`; - // Rectangle Part - const overlayRect = document.createElementNS(svgNameSpace, "rect"); - overlayRect.setAttribute("x", x); - overlayRect.setAttribute("y", y); - overlayRect.setAttribute("width", w); - overlayRect.setAttribute("height", h); - if( groupColor !== undefined && percent !== undefined ){ - overlayRect.setAttribute("style", "stroke-width:2;stroke:" + groupColor + ";" + "opacity:1;fill:" + colorString + ";" ); - overlayRect.setAttribute("border-color", "#ffffff"); - } - else { - overlayRect.setAttribute("style", "stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:" + colorString + ";"); - } - // Text Part - if (percent[0] === "-") { - percent = percent.substr(1); - } - const textPercent = percent < 0.5 && percent > 0 ? "<0.5" : Number(percent).toFixed(1); - const text = Number(percent) > 100 ? "N/P" : textPercent + "%"; - const fontSize = 14; - const textLength = text.length; - const xOffset = w / 2 - textLength * 4; - const yOffset = fontSize / 3; - const svgText = document.createElementNS(svgNameSpace, "text"); - svgText.setAttribute("x", x + xOffset); - svgText.setAttribute("y", y + h / 2 + yOffset); - svgText.setAttribute("font-family", "Arial"); - svgText.setAttribute("font-size", fontSize + ""); - if( groupColor !== undefined && percent !== undefined && percent >= 0 && percent <= 100 ){ - svgText.setAttribute("border-color", "red"); - } - svgText.innerHTML = text; - parentSVG.appendChild(overlayRect); - if( percent != undefined && percent !== undefined ) - parentSVG.appendChild(svgText); + // Rectangle Part + const overlayRect = document.createElementNS(svgNameSpace, "rect"); + overlayRect.setAttribute("x", x); + overlayRect.setAttribute("y", y); + overlayRect.setAttribute("width", w); + overlayRect.setAttribute("height", h); + if (groupColor !== undefined && percent !== undefined) { + overlayRect.setAttribute( + "style", + "stroke-width:2;stroke:" + + groupColor + + ";" + + "opacity:1;fill:" + + colorString + + ";" + ); + overlayRect.setAttribute("border-color", "#ffffff"); + } else { + overlayRect.setAttribute( + "style", + "stroke-width:1;stroke:rgb(0,0,0);opacity:1;fill:" + colorString + ";" + ); + } + // Text Part + if (percent[0] === "-") { + percent = percent.substr(1); + } + const textPercent = + percent < 0.5 && percent > 0 ? "<0.5" : Number(percent).toFixed(1); + const text = Number(percent) > 100 ? "N/P" : textPercent + "%"; + const fontSize = 14; + const textLength = text.length; + const xOffset = w / 2 - textLength * 4; + const yOffset = fontSize / 3; + const svgText = document.createElementNS(svgNameSpace, "text"); + svgText.setAttribute("x", x + xOffset); + svgText.setAttribute("y", y + h / 2 + yOffset); + svgText.setAttribute("font-family", "Arial"); + svgText.setAttribute("font-size", fontSize + ""); + if ( + groupColor !== undefined && + percent !== undefined && + percent >= 0 && + percent <= 100 + ) { + svgText.setAttribute("border-color", "red"); + } + svgText.innerHTML = text; + parentSVG.appendChild(overlayRect); + if (percent != undefined && percent !== undefined) + parentSVG.appendChild(svgText); } export default class GenomicDataOverlayManager { @@ -246,29 +267,28 @@ export default class GenomicDataOverlayManager { return oldCount; } - addGenomicDataLocally(genomicData, groupID) { - this.parseGenomicData(genomicData, groupID); - this.showGenomicData(); - this.notifyObservers(); - } - - preparePortalGenomicDataShareDB(genomicData) { - const geneMap = {}; - const visMap = {}; - - for (const cancerKey in genomicData) { - for (const geneSymbol in genomicData[cancerKey]) { - geneMap[geneSymbol] = {}; - geneMap[geneSymbol][cancerKey] = genomicData[cancerKey][geneSymbol]; + addGenomicDataLocally( + genomicData: any, + groupID: any, + isFromPortal: boolean, + activeGroups?: any[] + ) { + this.prepareGenomicData(genomicData, groupID, false, isFromPortal); + + if (isFromPortal) { + if (genomicData["PatientView"] == 1) { + this.patientData = genomicData; + this.showPatientData(); + } else if (activeGroups !== undefined) { + this.showGroupComparisonData(activeGroups); + } else { + this.showGenomicData(); } - - visMap[cancerKey] = true; + } else { + this.showGenomicData(); } - return { - genomicDataMap: geneMap, - visibilityMap: visMap, - }; + this.notifyObservers(); } addGenomicData(data) { @@ -287,45 +307,6 @@ export default class GenomicDataOverlayManager { this.groupedGenomicDataMap[groupID] = data; } - addPortalGenomicData(data, groupID, groupsToBeRendered?) { - - this.groupComparisonData = data; - for (const cancerStudy of Object.keys(data)) { - this.visibleGenomicDataMapByType[cancerStudy] = true; - // Group current cancer study according to the groupID - if (this.groupedGenomicDataMap[groupID] === undefined) { - this.groupedGenomicDataMap[groupID] = []; - } - - this.groupedGenomicDataMap[groupID].push(cancerStudy); - - var cancerData = data[cancerStudy]; - - for (const geneSymbol of Object.keys(cancerData)) { - if (this.genomicDataMap[geneSymbol] === undefined) - this.genomicDataMap[geneSymbol] = {}; - - this.genomicDataMap[geneSymbol][cancerStudy] = data[cancerStudy][ - geneSymbol - ].toFixed - ? data[cancerStudy][geneSymbol].toFixed(2) - : data[cancerStudy][geneSymbol]; - } - } - //This parameter is used as flag for PatientView PathwayMapper Functions - if (data["PatientView"] == 1) { - this.patientData = data; - this.showPatientData(); - } - else if( groupsToBeRendered !== undefined){ - this.showGroupComparisonData(groupsToBeRendered); - } - else { - this.showGenomicData(); - } - this.notifyObservers(); - } - clearAllGenomicData = function() { this.genomicDataMap = {}; this.visibleGenomicDataMapByType = {}; @@ -345,57 +326,6 @@ export default class GenomicDataOverlayManager { this.visibleGenomicDataMapByType[key] = data; } - prepareGenomicDataShareDB = function(genomicData) { - const genomicDataMap = {}; - const cancerTypes = []; - const visibleGenomicDataMapByType = {}; - - // By lines - const lines = genomicData.split("\n"); - // First line is meta data ! - const metaLineColumns = lines[0].split("\t"); - - // Parse cancer types - for (let i = 1; i < metaLineColumns.length; i++) { - cancerTypes.push(metaLineColumns[i]); - // Update initially visible genomic data boxes ! - if (i - 1 < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) { - visibleGenomicDataMapByType[cancerTypes[i - 1]] = true; - } else { - visibleGenomicDataMapByType[cancerTypes[i - 1]] = false; - } - } - - // parse genomic data - for (let i = 1; i < lines.length; i++) { - // EOF check - if (lines[i].length === 0) { - break; - } - - // Split each line by tab and parse genomic data content - const lineContent = lines[i].split("\t"); - const geneSymbol = lineContent[0]; - - // If current gene entry is not in genomic data map create new hashmap entry - if (!(geneSymbol in genomicDataMap)) { - genomicDataMap[geneSymbol] = {}; - } - - // Add each entry of genomic data - for (let j = 1; j < lineContent.length; j++) { - genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j]; - } - } - - const returnObj = { - genomicDataMap: genomicDataMap, - visibilityMap: visibleGenomicDataMapByType, - }; - - return returnObj; - }; - updateGenomicDataVisibility = function(_key, isVisible) { if (_key in this.visibleGenomicDataMapByType) { this.visibleGenomicDataMapByType[_key] = isVisible; @@ -403,10 +333,9 @@ export default class GenomicDataOverlayManager { }; hideGenomicData = function() { - - this.cy.nodes('[type="GENE"]').forEach(node => { - node.data('w', this.getRequiredWidthForGenomicData(0)); - }) + this.cy.nodes('[type="GENE"]').forEach((node) => { + node.data("w", this.getRequiredWidthForGenomicData(0)); + }); this.cy .style() @@ -463,49 +392,51 @@ export default class GenomicDataOverlayManager { y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18, }; - const genomicFrequencyData = this.genomicDataMap[nodeLabel]; - let maxGenomicDataBoxCount = /*(genomicDataBoxCount > 3) ? 3:*/ genomicDataBoxCount; let genomicBoxCounter = 0; for (let i in this.groupedGenomicDataMap) { for (let j in this.groupedGenomicDataMap[i]) { - const cancerType = this.groupedGenomicDataMap[i][j]; - if (!this.visibleGenomicDataMapByType[cancerType]) { + if ( + !this.visibleGenomicDataMapByType[this.groupedGenomicDataMap[i][j]] + ) { continue; } - - genomicDataRectangleGenerator( - overLayRectBBox.x + - (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount, - overLayRectBBox.y, - overLayRectBBox.w / maxGenomicDataBoxCount, - overLayRectBBox.h, - genomicFrequencyData[cancerType] !== undefined ? genomicFrequencyData[cancerType] : null, - svg, - this.colorScheme - ); + if (!this.genomicDataMap[nodeLabel][this.groupedGenomicDataMap[i][j]]) { + this.genomicDataMap[nodeLabel][this.groupedGenomicDataMap[i][j]] = + "0.00"; + } + genomicDataRectangleGenerator( + overLayRectBBox.x + + (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount, + overLayRectBBox.y, + overLayRectBBox.w / maxGenomicDataBoxCount, + overLayRectBBox.h, + this.genomicDataMap[nodeLabel][this.groupedGenomicDataMap[i][j]], + svg, + this.colorScheme + ); genomicBoxCounter++; } - } + } return svg; } - generateSVGForGroupComparisonNode(ele, groupsToBeRendered? ) { - const genomicDataBoxCount = 0; - + generateSVGForGroupComparisonNode(ele, groupsToBeRendered?) { // Experimental data overlay part ! const dataURI = "data:image/svg+xml;utf8,"; const svgNameSpace = "http://www.w3.org/2000/svg"; const nodeLabel = ele.data("name"); // If there is no genomic data for this node return ! - if (!(Object.keys(this.groupComparisonData).includes(nodeLabel) )) { + if (!Object.keys(this.groupComparisonData).includes(nodeLabel)) { return dataURI; } const eleBBox = ele.boundingBox(); - const reqWidth = this.getRequiredWidthForGenomicData(groupsToBeRendered.length); + const reqWidth = this.getRequiredWidthForGenomicData( + groupsToBeRendered.length + ); const overlayRecBoxW = reqWidth - 10; const overlayRecBoxH = 25; const svg: any = document.createElementNS(svgNameSpace, "svg"); @@ -514,7 +445,7 @@ export default class GenomicDataOverlayManager { svg.setAttribute("height", eleBBox.h); // This is important you need to include this to succesfully render in cytoscape.js! svg.setAttribute("xmlns", svgNameSpace); - ele.style("width", reqWidth + 10 ); + ele.style("width", reqWidth + 10); // Overlay Data Rect const overLayRectBBox = { @@ -524,47 +455,29 @@ export default class GenomicDataOverlayManager { y: eleBBox.h / 2 + overlayRecBoxH / 2 - 18, }; - let maxGenomicDataBoxCount = groupsToBeRendered.length; let genomicBoxCounter = 0; - /* for (let i in this.groupComparisonData) { - if( i !== nodeLabel) - continue;*/ - let i = nodeLabel; - for (let j in this.groupComparisonData[i]) { - const percentageInGroup = this.groupComparisonData[i][j]; - if (percentageInGroup !== undefined && i === nodeLabel) { - genomicDataRectangleGenerator( - overLayRectBBox.x + - (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount, - overLayRectBBox.y, - (overLayRectBBox.w ) / maxGenomicDataBoxCount - 2, - overLayRectBBox.h, - percentageInGroup, - svg, - this.colorScheme, - groupsToBeRendered[genomicBoxCounter].color - ); - genomicBoxCounter++; - } else if( i === nodeLabel ){ - genomicDataRectangleGenerator( - overLayRectBBox.x + + let i = nodeLabel; + for (let j in this.groupComparisonData[i]) { + if (!this.groupComparisonData[i][j]) { + this.groupComparisonData[i][j] = 0; + } + if (i === nodeLabel) { + genomicDataRectangleGenerator( + overLayRectBBox.x + (genomicBoxCounter * overLayRectBBox.w) / maxGenomicDataBoxCount, overLayRectBBox.y, - (overLayRectBBox.w ) / maxGenomicDataBoxCount - 4, + overLayRectBBox.w / maxGenomicDataBoxCount - 2, overLayRectBBox.h, - 0, + this.groupComparisonData[i][j], svg, this.colorScheme, groupsToBeRendered[genomicBoxCounter].color - ); - genomicBoxCounter++; - } - - - + ); + genomicBoxCounter++; } + } return svg; } @@ -589,8 +502,8 @@ export default class GenomicDataOverlayManager { return; } - this.cy.nodes('[type="GENE"]').forEach(node => { - node.data('w', this.getRequiredWidthForGenomicData(genomicDataBoxCount)); + this.cy.nodes('[type="GENE"]').forEach((node) => { + node.data("w", this.getRequiredWidthForGenomicData(genomicDataBoxCount)); if (resizeNodeCallback) { resizeNodeCallback(node); } @@ -624,10 +537,10 @@ export default class GenomicDataOverlayManager { const tooltipMaxHeight = "200px"; const tooltipMaxWidth = "200px"; const marginBetweenSamples = "12px"; - + const nodeLabel = ele.data("name"); const data = this.groupComparisonData[nodeLabel]; - + // Outer wrapper for the entire tooltip let wrapper = $("
"); wrapper.css({ @@ -635,57 +548,69 @@ export default class GenomicDataOverlayManager { "max-height": tooltipMaxHeight, "word-wrap": "break-word", "overflow-y": "auto", - "font-size" : "12px", + "font-size": "12px", }); // Inner wrapper for a single sample let sampleWrapper = $("
"); sampleWrapper.css({ - "margin-top": 0, + "margin-top": 0, }); let counter = 0; - for ( let j in data ){ - let sampleWrapper2 = $("
"); - sampleWrapper2.css({ - "margin-top": 0, - }); - let sampleWrapper = $("
"); - sampleWrapper.css({ - "margin-top": 0 - //"display" : "inline-flex" - }); - let sampleWrapperSquare = $("
"); - sampleWrapperSquare.css({ - "height": "12px", - "width": "12px", - "background-color": groupsToBeRendered[counter].color, - }); - - counter++; - sampleWrapper.append( + for (let j in data) { + let sampleWrapper2 = $("
"); + sampleWrapper2.css({ + "margin-top": 0, + }); + let sampleWrapper = $("
"); + sampleWrapper.css({ + "margin-top": 0, + //"display" : "inline-flex" + }); + let sampleWrapperSquare = $("
"); + sampleWrapperSquare.css({ + height: "12px", + width: "12px", + "background-color": groupsToBeRendered[counter].color, + }); + + counter++; + sampleWrapper.append( $( - "
" + "
" + "■" + "
" - + " " + j + ": " + data[j].toFixed(1) - + "
" - )); - sampleWrapper2.append(sampleWrapper); - wrapper.append(sampleWrapper); - } + "
" + + "
" + + "■" + + "
" + + " " + + j + + ": " + + data[j].toFixed(1) + + "
" + ) + ); + sampleWrapper2.append(sampleWrapper); + wrapper.append(sampleWrapper); + } return wrapper; } - showGroupComparisonData(groupsToBeRendered : any[],resizeNodeCallback?: (node: any) => void, ) { + showGroupComparisonData( + groupsToBeRendered: any[], + resizeNodeCallback?: (node: any) => void + ) { const self = this; const data = this.groupComparisonData; const genomicDataBoxCount = 0; - if (genomicDataBoxCount < 1) { + if (genomicDataBoxCount < 1) { // Hide all genomic data and return //this.hideGenomicData(); //return; } - this.cy.nodes().forEach(node => { - node.data('w', 1000); + this.cy.nodes().forEach((node) => { + node.data("w", 1000); if (resizeNodeCallback) { resizeNodeCallback(node); } @@ -697,15 +622,18 @@ export default class GenomicDataOverlayManager { .style("text-margin-y", function(ele) { const nodeLabel = ele.data("name"); // If there is no genomic data for this node return ! - if ( !(Object.keys(self.groupComparisonData).includes(nodeLabel))) { + if (!Object.keys(self.groupComparisonData).includes(nodeLabel)) { return 0; } - + // Else shift label in Y axis return -15; }) .style("background-image", function(ele) { - const x = encodeURIComponent(self.generateSVGForGroupComparisonNode(ele,groupsToBeRendered).outerHTML); + const x = encodeURIComponent( + self.generateSVGForGroupComparisonNode(ele, groupsToBeRendered) + .outerHTML + ); if (x === "undefined") { return "none"; } @@ -735,7 +663,11 @@ export default class GenomicDataOverlayManager { // your own custom props // content prop can be used when the target is a single element https://atomiks.github.io/tippyjs/v6/constructor/#prop content: () => { - let content = self.generateHTMLContentForComparisonNodeTooltip(node, groupsToBeRendered) + let content = self + .generateHTMLContentForComparisonNodeTooltip( + node, + groupsToBeRendered + ) .get(0); return content; @@ -760,56 +692,111 @@ export default class GenomicDataOverlayManager { }); } - parseGenomicData(genomicData, groupID) { - this.genomicDataMap = this.genomicDataMap || {}; - this.visibleGenomicDataMapByType = this.visibleGenomicDataMapByType || {}; - this.groupedGenomicDataMap = this.groupedGenomicDataMap || {}; - const cancerTypes = []; - - // By lines - const lines = genomicData.split("\n"); - // First line is meta data ! - const metaLineColumns = lines[0].split("\t"); - - // Parse cancer types - for (let i = 1; i < metaLineColumns.length; i++) { - cancerTypes.push(metaLineColumns[i]); - const visibleGenomicDataCount = Object.keys(this.visibleGenomicDataMapByType).length; - // Update initially visible genomic data boxes ! - if (visibleGenomicDataCount < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) { - this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = true; - } else { - this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = false; + prepareGenomicData = function( + genomicData: any, + groupID: any, + isCollaborative: boolean, + isFromPortal: boolean + ) { + if (isCollaborative) { + this.genomicDataMap = {}; + this.visibleGenomicDataMapByType = {}; + } else { + this.genomicDataMap = this.genomicDataMap || {}; + this.visibleGenomicDataMapByType = this.visibleGenomicDataMapByType || {}; + } + + if (isFromPortal) { + if (!isCollaborative) { + this.groupComparisonData = genomicData; } - if (this.groupedGenomicDataMap[groupID] === undefined) { - this.groupedGenomicDataMap[groupID] = []; + for (const cancerStudy in genomicData) { + if (!isCollaborative) { + if (this.groupedGenomicDataMap[groupID] === undefined) { + this.groupedGenomicDataMap[groupID] = []; + } + + this.groupedGenomicDataMap[groupID].push(cancerStudy); + } + + this.visibleGenomicDataMapByType[cancerStudy] = true; + + for (const geneSymbol in genomicData[cancerStudy]) { + if (!isCollaborative) { + if (this.genomicDataMap[geneSymbol] === undefined) { + this.genomicDataMap[geneSymbol] = {}; + } + + this.genomicDataMap[geneSymbol][cancerStudy] = genomicData[ + cancerStudy + ][geneSymbol].toFixed + ? genomicData[cancerStudy][geneSymbol].toFixed(2) + : genomicData[cancerStudy][geneSymbol]; + } else { + this.genomicDataMap[geneSymbol] = {}; + this.genomicDataMap[geneSymbol][cancerStudy] = + genomicData[cancerStudy][geneSymbol]; + } + } } - this.groupedGenomicDataMap[groupID].push(cancerTypes[i - 1]); - } + } else { + this.groupedGenomicDataMap = this.groupedGenomicDataMap || {}; + const cancerTypes = []; + + const lines = genomicData.split("\n"); + // First line is meta data! + const metaLineColumns = lines[0].split("\t"); + + // Parse cancer types + for (let i = 1; i < metaLineColumns.length; i++) { + cancerTypes.push(metaLineColumns[i]); + const visibleGenomicDataCount = isCollaborative + ? i - 1 + : Object.keys(this.visibleGenomicDataMapByType).length; + // Update initially visible genomic data boxes! + if (visibleGenomicDataCount < this.DEFAULT_VISIBLE_GENOMIC_DATA_COUNT) { + this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = true; + } else { + this.visibleGenomicDataMapByType[cancerTypes[i - 1]] = false; + } - // parse genomic data - for (let i = 1; i < lines.length; i++) { - // EOF check - if (lines[i].length === 0) { - break; + if (!isCollaborative) { + if (this.groupedGenomicDataMap[groupID] === undefined) { + this.groupedGenomicDataMap[groupID] = []; + } + this.groupedGenomicDataMap[groupID].push(cancerTypes[i - 1]); + } } - // Split each line by tab and parse genomic data content - const lineContent = lines[i].split("\t"); - const geneSymbol = lineContent[0]; + // parse genomic data + for (let i = 1; i < lines.length; i++) { + // EOF check + if (lines[i].length === 0) { + break; + } - // If current gene entry is not in genomic data map create new map - if (!(geneSymbol in this.genomicDataMap)) { - this.genomicDataMap[geneSymbol] = {}; - } + // Split each line by tab and parse genomic data content + const lineContent = lines[i].split("\t"); + const geneSymbol = lineContent[0]; + + // If current gene entry is not in genomic data map create new map + if (!(geneSymbol in this.genomicDataMap)) { + this.genomicDataMap[geneSymbol] = {}; + } - // Add each entry of genomic data - for (let j = 1; j < lineContent.length; j++) { - this.genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j]; + // Add each entry of genomic data + for (let j = 1; j < lineContent.length; j++) { + this.genomicDataMap[geneSymbol][cancerTypes[j - 1]] = lineContent[j]; + } } } - } + + return { + genomicDataMap: this.genomicDataMap, + visibilityMap: this.visibleGenomicDataMapByType, + }; + }; // Simple observer-observable pattern for views!!!!! registerObserver(observer) { diff --git a/packages/pathway-mapper/src/managers/ShareDBManager.tsx b/packages/pathway-mapper/src/managers/ShareDBManager.tsx index 58472ed4..db661182 100644 --- a/packages/pathway-mapper/src/managers/ShareDBManager.tsx +++ b/packages/pathway-mapper/src/managers/ShareDBManager.tsx @@ -1,6 +1,8 @@ -import _, { add } from "lodash"; -import { toast, ToastContainer } from "react-toastify"; -import { ChatMessageMetaData, IColorValueMap } from "../ui/react-pathway-mapper"; +import _ from "lodash"; +import { + ChatMessageMetaData, + IColorValueMap, +} from "../ui/react-pathway-mapper"; import GraphUtilities from "../utils/GraphUtilities"; import EditorActionsManager from "./EditorActionsManager"; @@ -9,1009 +11,1073 @@ let socket; let connection; export default class ShareDBManager { - - readonly NODEMAP_NAME = 'nodes'; - readonly EDGEMAP_NAME = 'edges'; - readonly LAYOUT_PROPS_NAME = 'layoutProperties'; - readonly GLOBAL_OPTS_NAME = 'globalOptions'; - //For storing genomic data information per gene - readonly GENOMIC_DATA_MAP_NAME = 'genomicDataMap'; - //For storing visibility information of genomic data according to the cancer type - readonly VISIBLE_GENOMIC_DATA_MAP_NAME = 'visibleGenomicDataMapByType'; - readonly GENOMIC_DATA_GROUP_NAME = 'genomicDataGroupList'; - readonly GENOMIC_DATA_GROUP_COUNT = 'genomicDataGroupCount'; - readonly GENOMIC_DATA_COLOR_SCHEME_NAME = 'genomicDataColorScheme'; - readonly CHAT_APPLICATION_NAME = 'chatMessages'; - readonly CHAT_MESSAGES_COUNT = 'chatMessagesCount'; - readonly PATHWAY_TITLE = 'pathwayTitle'; - readonly NUMBER_OF_USERS = 'numberOfUsers'; - readonly WORK_ID = 'id'; - - doc: any; - postFileLoad: any; - editor: EditorActionsManager; - constructor(postFileLoadCallback) { - //Doc data maps names and keys - this.postFileLoad = postFileLoadCallback; - }; - - - - getDoc(){ - return this.doc; + readonly NODEMAP_NAME = "nodes"; + readonly EDGEMAP_NAME = "edges"; + readonly LAYOUT_PROPS_NAME = "layoutProperties"; + readonly GLOBAL_OPTS_NAME = "globalOptions"; + //For storing genomic data information per gene + readonly GENOMIC_DATA_MAP_NAME = "genomicDataMap"; + //For storing visibility information of genomic data according to the cancer type + readonly VISIBLE_GENOMIC_DATA_MAP_NAME = "visibleGenomicDataMapByType"; + readonly GENOMIC_DATA_GROUP_NAME = "genomicDataGroupList"; + readonly GENOMIC_DATA_GROUP_COUNT = "genomicDataGroupCount"; + readonly GENOMIC_DATA_COLOR_SCHEME_NAME = "genomicDataColorScheme"; + readonly CHAT_APPLICATION_NAME = "chatMessages"; + readonly CHAT_MESSAGES_COUNT = "chatMessagesCount"; + readonly PATHWAY_TITLE = "pathwayTitle"; + readonly NUMBER_OF_USERS = "numberOfUsers"; + readonly WORK_ID = "id"; + + doc: any; + postFileLoad: any; + editor: EditorActionsManager; + constructor(postFileLoadCallback) { + //Doc data maps names and keys + this.postFileLoad = postFileLoadCallback; + } + + getDoc() { + return this.doc; + } + + setEditor(editor: EditorActionsManager) { + this.editor = editor; + } + + //Applies any given sharDB opeation to shared document and notifies other clients + applyShareDBOperation(op) { + this.doc.submitOp(op, this.shareDBError); + } + + //Clears genomic data in shared document and notifies other clients + clearShareDBGenomicData() { + var ops = []; + var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME]; + var visMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; + var genomicDataGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME]; + var genomicDataGroupCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; + //Reset all genomic maps + for (const key of Object.keys(genomicMap)) { + ops.push({ p: [this.GENOMIC_DATA_MAP_NAME, key], od: genomicMap[key] }); } - - setEditor(editor: EditorActionsManager){ - this.editor = editor; + for (const key of Object.keys(visMap)) { + ops.push({ + p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, key], + od: visMap[key], + }); } - - //Applies any given sharDB opeation to shared document and notifies other clients - applyShareDBOperation(op) { - this.doc.submitOp(op, this.shareDBError); - }; - - //Clears genomic data in shared document and notifies other clients - clearShareDBGenomicData() { - var ops = []; - var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME]; - var visMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; - var genomicDataGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME]; - var genomicDataGroupCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; - //Reset all genomic maps - for (const key of Object.keys(genomicMap)) { - ops.push({p: [this.GENOMIC_DATA_MAP_NAME, key], od: genomicMap[key]}); - } - for (const key of Object.keys(visMap)) { - ops.push({p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, key], od: visMap[key]}); - } - for (const key of Object.keys(genomicDataGroupMap)) { - ops.push({p: [this.GENOMIC_DATA_GROUP_NAME, key], od: genomicDataGroupMap[key]}); - } - //Reset genomic data group count to 0 - ops.push({p: [this.GENOMIC_DATA_GROUP_COUNT], na: -genomicDataGroupCount}); - this.doc.submitOp(ops, this.shareDBError); - }; - - /* - * Updates shared document object - * @param mapName: map name of the object - * @param objectKey: key of the object - * @param object: new object - * - */ - updateShareDBObject(mapName, objectKey, object) { - this.doc.submitOp([{ - p: [mapName, objectKey], - od: this.doc.data[mapName][objectKey], - oi: object - }], this.shareDBError); - }; - - /* - * Inserts a new shared document object - * @param mapName: map name of the object - * @param objectKey: key of the object - * @param object: new object - * - */ - insertShareDBObject(mapName, objectKey, object) { - this.doc.submitOp([{p: [mapName, objectKey], oi: object}], this.shareDBError); - }; - - /* - * Deletes a shared document object - * @param mapName: map name of the object - * @param objectKey: key of the object - * - */ - deleteShareDBObject(mapName, objectKey) { - this.doc.submitOp([{p: [mapName, objectKey], od: this.doc.data[mapName][objectKey]}], this.shareDBError); - }; - - //Initializes layout properties of the shared document - initializeShareDBLayoutProperties() { - this.doc.submitOp([{ - p: [this.LAYOUT_PROPS_NAME, 0], - li: [this.editor.layoutProperties] - }], this.shareDBError); - }; - - //Initializes global options of the shared document - initializeShareDBGlobalOptions() { - this.doc.submitOp([{ - p: [this.GLOBAL_OPTS_NAME, 0], - li: [this.editor.getGlobalOptions()] - }], this.shareDBError); - }; - - /* - * Updates layout properties of the shared document and notifies other clients - * @param object: new layout properties object - * - */ - updateShareDBLayoutProperties(object) { - this.doc.submitOp([{ - p: [this.LAYOUT_PROPS_NAME, 0], - ld: this.doc.data[this.LAYOUT_PROPS_NAME][0], - li: object - }], this.shareDBError); - }; - - /* - * Updates global options of the shared document and notifies other clients - * @param object: new global options object - * - */ - - getUserId() { - return this.doc.data[this.NUMBER_OF_USERS]; + for (const key of Object.keys(genomicDataGroupMap)) { + ops.push({ + p: [this.GENOMIC_DATA_GROUP_NAME, key], + od: genomicDataGroupMap[key], + }); } - - incrementMessageCount(){ - this.doc.submitOp([{p: [this.CHAT_MESSAGES_COUNT], na: 1}], this.shareDBError); + //Reset genomic data group count to 0 + ops.push({ + p: [this.GENOMIC_DATA_GROUP_COUNT], + na: -genomicDataGroupCount, + }); + this.doc.submitOp(ops, this.shareDBError); + } + + /* + * Updates shared document object + * @param mapName: map name of the object + * @param objectKey: key of the object + * @param object: new object + * + */ + updateShareDBObject(mapName, objectKey, object) { + this.doc.submitOp( + [ + { + p: [mapName, objectKey], + od: this.doc.data[mapName][objectKey], + oi: object, + }, + ], + this.shareDBError + ); + } + + /* + * Inserts a new shared document object + * @param mapName: map name of the object + * @param objectKey: key of the object + * @param object: new object + * + */ + insertShareDBObject(mapName, objectKey, object) { + this.doc.submitOp( + [{ p: [mapName, objectKey], oi: object }], + this.shareDBError + ); + } + + /* + * Deletes a shared document object + * @param mapName: map name of the object + * @param objectKey: key of the object + * + */ + deleteShareDBObject(mapName, objectKey) { + this.doc.submitOp( + [{ p: [mapName, objectKey], od: this.doc.data[mapName][objectKey] }], + this.shareDBError + ); + } + + //Initializes layout properties of the shared document + initializeShareDBLayoutProperties() { + this.doc.submitOp( + [ + { + p: [this.LAYOUT_PROPS_NAME, 0], + li: [this.editor.layoutProperties], + }, + ], + this.shareDBError + ); + } + + //Initializes global options of the shared document + initializeShareDBGlobalOptions() { + this.doc.submitOp( + [ + { + p: [this.GLOBAL_OPTS_NAME, 0], + li: [this.editor.getGlobalOptions()], + }, + ], + this.shareDBError + ); + } + + /* + * Updates layout properties of the shared document and notifies other clients + * @param object: new layout properties object + * + */ + updateShareDBLayoutProperties(object) { + this.doc.submitOp( + [ + { + p: [this.LAYOUT_PROPS_NAME, 0], + ld: this.doc.data[this.LAYOUT_PROPS_NAME][0], + li: object, + }, + ], + this.shareDBError + ); + } + + /* + * Updates global options of the shared document and notifies other clients + * @param object: new global options object + * + */ + + getUserId() { + return this.doc.data[this.NUMBER_OF_USERS]; + } + + incrementMessageCount() { + this.doc.submitOp( + [{ p: [this.CHAT_MESSAGES_COUNT], na: 1 }], + this.shareDBError + ); + } + + incrementNumberOfUsers() { + this.doc.submitOp( + [{ p: [this.NUMBER_OF_USERS], na: 1 }], + this.shareDBError + ); + } + + addNewMessage(object: ChatMessageMetaData, chatMessageKey: number) { + this.doc.submitOp( + [{ p: [this.CHAT_APPLICATION_NAME, chatMessageKey], oi: object }], + this.shareDBError + ); + } + + updateShareDBGlobalOptions(object) { + this.doc.submitOp( + [ + { + p: [this.GLOBAL_OPTS_NAME, 0], + ld: this.doc.data[this.GLOBAL_OPTS_NAME][0], + li: object, + }, + ], + this.shareDBError + ); + } + + updateShareDBGenomicDataOverlayColorScheme(object: IColorValueMap) { + this.doc.submitOp( + [ + { + p: [this.GENOMIC_DATA_COLOR_SCHEME_NAME, 0], + ld: this.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME][0], + li: object, + }, + ], + this.shareDBError + ); + } + + //Increments shared data group count + //Use this function to increment and keep the group count synchronized + incrementShareDBGroupCount() { + this.doc.submitOp( + [{ p: [this.GENOMIC_DATA_GROUP_COUNT], na: 1 }], + this.shareDBError + ); + } + + //Checks whether given operation is a replace or add/delete operation + isShareDBReplaceEvent(op) { + return ( + (op.hasOwnProperty("oi") && op.hasOwnProperty("od")) || + (op.hasOwnProperty("li") && op.hasOwnProperty("ld")) + ); + } + + /* + * Gets the initial value of the shared document + * without this function shared document values cannot be reached + */ + initializeSharedDBDoc() { + this.doc.subscribe(); + } + + shareDBError(err) { + if (err) { + console.error(err); } + } - incrementNumberOfUsers(){ - this.doc.submitOp([{p: [this.NUMBER_OF_USERS], na: 1}], this.shareDBError); + initShareDB() { + sharedb = require("sharedb/lib/client"); + socket = new WebSocket("ws://" + window.location.host); + if (window.location.protocol === "https:") { + socket = socket.replace("ws:", "wss:"); } + connection = new sharedb.Connection(socket); - addNewMessage( object : ChatMessageMetaData, chatMessageKey : number){ - this.doc.submitOp([{p: [this.CHAT_APPLICATION_NAME, chatMessageKey], oi: object}], this.shareDBError); - }; - - updateShareDBGlobalOptions(object) { - this.doc.submitOp([{ - p: [this.GLOBAL_OPTS_NAME, 0], - ld: this.doc.data[this.GLOBAL_OPTS_NAME][0], - li: object - }], this.shareDBError); - }; - - updateShareDBGenomicDataOverlayColorScheme(object : IColorValueMap) { - this.doc.submitOp([{ - p: [this.GENOMIC_DATA_COLOR_SCHEME_NAME, 0], - ld: this.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME][0], - li: object - }], this.shareDBError); - }; - - //Increments shared data group count - //Use this function to increment and keep the group count synchronized - incrementShareDBGroupCount() { - this.doc.submitOp([{p: [this.GENOMIC_DATA_GROUP_COUNT], na: 1}], this.shareDBError); - }; - - //Checks whether given operation is a replace or add/delete operation - isShareDBReplaceEvent(op) { - return (op.hasOwnProperty("oi") && op.hasOwnProperty("od")) - || (op.hasOwnProperty("li") && op.hasOwnProperty("ld")); - }; - - /* - * Gets the initial value of the shared document - * without this function shared document values cannot be reached - */ - initializeSharedDBDoc() { - this.doc.subscribe(); - }; - - shareDBError(err) { - if (err) { - console.error(err); - } - }; - - initShareDB() { - sharedb = require('sharedb/lib/client'); - socket = new WebSocket('ws://' + window.location.host); - connection = new sharedb.Connection(socket); + var self = this; - var self = this; + var id = this.getParam("id"); - var id = this.getParam('id'); - - var loadFileCallback = function () { - self.onFileLoaded(); - }; - - //Creates new shared db document and initializes values - var createNewDocument = () => { - var new_id = self.getCustomObjId(); - var data = { - id: new_id, - nodes: {}, - edges: {}, - layoutProperties: [this.editor.layoutProperties], - globalOptions: [this.editor.getGlobalOptions()], - genomicDataMap: {}, - visibleGenomicDataMapByType: {}, - genomicDataGroupList: {}, - genomicDataGroupCount: 0, - chatMessagesCount: 0, - numberOfUsers: 0, - pathwayTitle: [], - genomicDataColorScheme: [{ - '-100' : "#0000ff", - '0' : "#ffffff", - '100' : "#ff0000" - }], chatMessages : {} - }; - window.history.pushState(null, null, '?id=' + new_id); - self.doc = connection.get('cy', new_id); - self.doc.create(data, loadFileCallback); - }; - - //Check if id exists in parameters - //If exists open the shared document - if (id) { - // Check any document exists with given id - this.doc = connection.get('cy', id); - this.doc.fetch(function (err) { - if (err) - throw err; - - if (self.doc.type === null) { - createNewDocument(); - return; - } - self.doc.subscribe(loadFileCallback); - }); - } - else { - //Create new shared document - createNewDocument(); - } - }; - - /* - * After a file has been initialized and loaded, we can access the - * document. We will wire up the data in shared document to the UI. - * - */ - onFileLoaded() { - this.initializeSharedDBDoc(); - this.syncInitialSharedDocData(); - this.initSharedDocEventHandlers(); - - this.postFileLoad(); + var loadFileCallback = function() { + self.onFileLoaded(); }; - /* - * Synchronizes initial data in the shared document to - * client's application. - */ - syncInitialSharedDocData() { - var self = this; - var nodeMap = self.doc.data[this.NODEMAP_NAME]; - var edgeMap = self.doc.data[this.EDGEMAP_NAME]; - var shareDBLayoutProperties = self.doc.data[this.LAYOUT_PROPS_NAME][0]; - var globalOptions = self.doc.data[this.GLOBAL_OPTS_NAME][0]; - var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME]; - var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; - var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME]; - var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; - var chatMessages = self.doc.data[this.CHAT_APPLICATION_NAME]; - var chatMessageCount = self.doc.data[this.CHAT_MESSAGES_COUNT]; - let genomicDataColorScheme; - - if (self.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME]) { - genomicDataColorScheme = self.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME][0]; - } - - self.editor.loadMessages( chatMessages ); - self.editor.updateMessageCount( chatMessageCount ); - var invalidGenes = []; - var highlightedGenes = []; - var invalidHighlightedGenes = []; - var hiddenGenes = []; - for (const key of Object.keys(nodeMap)) { - var tmpNode = nodeMap[key]; - var tmpNodeId = tmpNode.id; - - if (tmpNode.isInvalidGene && tmpNode.isHighlighted) { - invalidHighlightedGenes.push(tmpNodeId); - } - else if (tmpNode.isInvalidGene) { - invalidGenes.push(tmpNodeId); - } - else if (tmpNode.isHighlighted) { - highlightedGenes.push(tmpNodeId); - } - if (tmpNode.isHidden) { - hiddenGenes.push(tmpNodeId); - } - } - var highlightedEdges = []; - for (const key of Object.keys(edgeMap)) { - var tmpEdge = edgeMap[key]; - var tmpEdgeId = tmpEdge.id; - if (tmpEdge.isHighlighted) { - highlightedEdges.push(tmpEdgeId); - } - } - - //TODO Workaround for legacy pathways - - // Workaround for backward compatibility of legacy pathways - // Addition of pubmed id field on server if legacy collaborative - // pathways does not have ! - for (const key of Object.keys(edgeMap)) { - const tmpEdge = edgeMap[key]; - - if (tmpEdge.pubmedIDs == undefined - || tmpEdge.name == undefined - || tmpEdge.bendPoint == undefined - || tmpEdge.anchorPoints == undefined - || tmpEdge.edgeCurveStyle == undefined) { - const pubmedIDs = (tmpEdge.pubmedIDs == undefined) ? [] : tmpEdge.pubmedID; - const edgeLabel = (tmpEdge.name == undefined) ? "" : tmpEdge.name; - let anchorPoints = []; - if (tmpEdge.bendPoint) { - anchorPoints = tmpEdge.bendPoint; - } - else if (tmpEdge.anchorPoints) { - anchorPoints = tmpEdge.anchorPoints; - } - const edgeCurveStyle = tmpEdge.edgeCurveStyle ? tmpEdge.edgeCurveStyle : "bezier"; - - const param = { - type: tmpEdge.type, - source: tmpEdge.source, - id: self.getCustomObjId(), - target: tmpEdge.target, - pubmedID: pubmedIDs, - name: edgeLabel, - anchorPoints: anchorPoints, - edgeCurveStyle: edgeCurveStyle - }; - - const newEdge: any = self.edgeInitializer(param); - - - const tmpEdgeID = tmpEdge.id; - const newEdgeID = newEdge.id; - - const ops = [ - {p: [self.EDGEMAP_NAME, tmpEdgeID], od: tmpEdge}, - {p: [self.EDGEMAP_NAME, newEdgeID], oi: newEdge} - ] - self.applyShareDBOperation(ops); - } - - } - - //Add real time nodes to local graph - this.editor.addNewElementsLocally(nodeMap, edgeMap); - //Adds different type of highlight to nodes and hides if their property is hidden - this.editor.highlightElementsInitially(invalidHighlightedGenes, invalidGenes, highlightedGenes, highlightedEdges, hiddenGenes); - - //Update layout properties & global options!! - if (shareDBLayoutProperties.name == "cose-bilkent") { - shareDBLayoutProperties.name = "fcose"; - this.updateLayoutProperties(shareDBLayoutProperties); - } - this.editor.updateLayoutPropertiesCallback({li: shareDBLayoutProperties}); - this.editor.changeGlobalOptions({li: globalOptions}); - - //Sync already available genomic data ! - - if (!groupedGenomicDataMap) { - - self.insertShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', []); - for (const key of Object.keys(visDataMap)) { - var currentMap = _.clone(groupedGenomicDataMap['0']); - // currentMap.push(visibilityMapKeys[key]); - self.updateShareDBObject(self.GENOMIC_DATA_MAP_NAME, '0', currentMap); - } - } - - if (!groupedGenomicDataCount) { - var count = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT]; - var op = [{ - p: [self.GENOMIC_DATA_GROUP_COUNT], - na: -count - }]; - self.applyShareDBOperation(op); - groupedGenomicDataCount = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT]; - } - - if (!genomicDataColorScheme) { - genomicDataColorScheme = this.editor.getGenomicDataOverlayColorScheme(); - const op = [{ - p: [self.GENOMIC_DATA_COLOR_SCHEME_NAME], - oi: [genomicDataColorScheme] - }]; - this.applyShareDBOperation(op); - } - - this.editor.updateGenomicDataColorSchemeHandler({li: genomicDataColorScheme}); - - for (const key_g of Object.keys(genomicDataMap)) { - this.editor.genomicDataOverlayManager.genomicDataMap[key_g] = - genomicDataMap[key_g]; - - } - - for (const key_g of Object.keys(groupedGenomicDataMap)) { - this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key_g] = - groupedGenomicDataMap[key_g]; - const data = groupedGenomicDataMap[key_g]; - if(data.length !== 1){ - console.log("Grouped genomic data expected to be of length 1 (from sync)"); - } - data.forEach((profileId: any) => {this.editor.addToProfiles(profileId)}); - } - - for (const key_g of Object.keys(visDataMap)) { - this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key_g] = - visDataMap[key_g]; - this.editor.adjustVisibilityShareDB(key_g, visDataMap[key_g]); - - } - - //Does not seem necessary for not but just for sake of completeness - this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount; - - this.editor.genomicDataOverlayManager.showGenomicData((node: any) => { - this.editor.resizeElements(node); - }); - this.editor.genomicDataOverlayManager.notifyObservers(); - this.editor.cy.style().update(); - this.editor.cy.fit(50); + //Creates new shared db document and initializes values + var createNewDocument = () => { + var new_id = self.getCustomObjId(); + var data = { + id: new_id, + nodes: {}, + edges: {}, + layoutProperties: [this.editor.layoutProperties], + globalOptions: [this.editor.getGlobalOptions()], + genomicDataMap: {}, + visibleGenomicDataMapByType: {}, + genomicDataGroupList: {}, + genomicDataGroupCount: 0, + chatMessagesCount: 0, + numberOfUsers: 0, + pathwayTitle: [], + genomicDataColorScheme: [ + { + "-100": "#0000ff", + "0": "#ffffff", + "100": "#ff0000", + }, + ], + chatMessages: {}, + }; + window.history.pushState(null, null, "?id=" + new_id); + self.doc = connection.get("cy", new_id); + self.doc.create(data, loadFileCallback); }; - /* - * Initialize event listeners for any operation coming from shareDB - * - */ - initSharedDocEventHandlers () { - - var self = this; - - //Setup event handlers for maps - var nodeAddRemoveHandler = function (op) { - self.editor.shareDBNodeAddRemoveEventCallBack(op); - }; - - var edgeAddRemoveHandler = function (op) { - self.editor.shareDBEdgeAddRemoveEventCallBack(op); - }; - - var genomicDataAddRemoveHandler = function (op) { - self.editor.shareDBGenomicDataHandler(op); - }; - - var genomicDataVisibilityChangeHandler = function (op) { - self.editor.shareDBGenomicDataVisibilityHandler(op); - self.checkShareDBGenomicData(); - }; - - var genomicDataGroupChangeHandler = function (op) { - self.editor.shareDBGenomicDataGroupChangeHandler(op); - }; - - var updateElementHandler = function (op) { - self.editor.updateElementCallback(op); - }; + //Check if id exists in parameters + //If exists open the shared document + if (id) { + // Check any document exists with given id + this.doc = connection.get("cy", id); + this.doc.fetch(function(err) { + if (err) throw err; + + if (self.doc.type === null) { + createNewDocument(); + return; + } + self.doc.subscribe(loadFileCallback); + }); + } else { + //Create new shared document + createNewDocument(); + } + } + + /* + * After a file has been initialized and loaded, we can access the + * document. We will wire up the data in shared document to the UI. + * + */ + onFileLoaded() { + this.initializeSharedDBDoc(); + this.syncInitialSharedDocData(); + this.initSharedDocEventHandlers(); + + this.postFileLoad(); + } + + /* + * Synchronizes initial data in the shared document to + * client's application. + */ + syncInitialSharedDocData() { + var self = this; + var nodeMap = self.doc.data[this.NODEMAP_NAME]; + var edgeMap = self.doc.data[this.EDGEMAP_NAME]; + var shareDBLayoutProperties = self.doc.data[this.LAYOUT_PROPS_NAME][0]; + var globalOptions = self.doc.data[this.GLOBAL_OPTS_NAME][0]; + var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME]; + var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; + var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME]; + var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; + var chatMessages = self.doc.data[this.CHAT_APPLICATION_NAME]; + var chatMessageCount = self.doc.data[this.CHAT_MESSAGES_COUNT]; + let genomicDataColorScheme; + + if (self.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME]) { + genomicDataColorScheme = + self.doc.data[this.GENOMIC_DATA_COLOR_SCHEME_NAME][0]; + } - var updateLayoutPropsHandler = function (op) { - self.editor.updateLayoutPropertiesCallback(op); - }; + self.editor.loadMessages(chatMessages); + self.editor.updateMessageCount(chatMessageCount); + var invalidGenes = []; + var highlightedGenes = []; + var invalidHighlightedGenes = []; + var hiddenGenes = []; + for (const key of Object.keys(nodeMap)) { + var tmpNode = nodeMap[key]; + var tmpNodeId = tmpNode.id; + + if (tmpNode.isInvalidGene && tmpNode.isHighlighted) { + invalidHighlightedGenes.push(tmpNodeId); + } else if (tmpNode.isInvalidGene) { + invalidGenes.push(tmpNodeId); + } else if (tmpNode.isHighlighted) { + highlightedGenes.push(tmpNodeId); + } + if (tmpNode.isHidden) { + hiddenGenes.push(tmpNodeId); + } + } + var highlightedEdges = []; + for (const key of Object.keys(edgeMap)) { + var tmpEdge = edgeMap[key]; + var tmpEdgeId = tmpEdge.id; + if (tmpEdge.isHighlighted) { + highlightedEdges.push(tmpEdgeId); + } + } - var updateGlobalOptionsHandler = function (op) { - self.editor.changeGlobalOptions(op); + //TODO Workaround for legacy pathways + + // Workaround for backward compatibility of legacy pathways + // Addition of pubmed id field on server if legacy collaborative + // pathways does not have ! + for (const key of Object.keys(edgeMap)) { + const tmpEdge = edgeMap[key]; + + if ( + tmpEdge.pubmedIDs == undefined || + tmpEdge.name == undefined || + tmpEdge.bendPoint == undefined || + tmpEdge.anchorPoints == undefined || + tmpEdge.edgeCurveStyle == undefined + ) { + const pubmedIDs = + tmpEdge.pubmedIDs == undefined ? [] : tmpEdge.pubmedID; + const edgeLabel = tmpEdge.name == undefined ? "" : tmpEdge.name; + let anchorPoints = []; + if (tmpEdge.bendPoint) { + anchorPoints = tmpEdge.bendPoint; + } else if (tmpEdge.anchorPoints) { + anchorPoints = tmpEdge.anchorPoints; + } + const edgeCurveStyle = tmpEdge.edgeCurveStyle + ? tmpEdge.edgeCurveStyle + : "bezier"; + + const param = { + type: tmpEdge.type, + source: tmpEdge.source, + id: self.getCustomObjId(), + target: tmpEdge.target, + pubmedID: pubmedIDs, + name: edgeLabel, + anchorPoints: anchorPoints, + edgeCurveStyle: edgeCurveStyle, }; - var updateGenomicDataColorSchemeHandler = function (op) { - self.editor.updateGenomicDataColorSchemeHandler(op); - } - - - //Event listeners for maps - this.doc.on('op', function (op, source) { - for (var i = 0; i < op.length; i++) { - var handleOp = op[i]; - var path = handleOp.p[0]; - var isReplaceEvent = self.isShareDBReplaceEvent(handleOp); - - if( path === self.CHAT_APPLICATION_NAME){ - self.editor.updateMessages( self.doc.data[self.CHAT_APPLICATION_NAME][handleOp.p[1]]); - } - if( path === self.CHAT_MESSAGES_COUNT){ - self.editor.updateMessageCount(self.doc.data[self.CHAT_MESSAGES_COUNT]); - } - - if( path === self.PATHWAY_TITLE ){ - self.editor.updatePathwayTitleBack( self.doc.data[self.PATHWAY_TITLE][0]) - } - - if (!isReplaceEvent) { - if (path === self.NODEMAP_NAME) { - nodeAddRemoveHandler(handleOp); - } - else if (path === self.EDGEMAP_NAME) { - edgeAddRemoveHandler(handleOp); - } - else if (path === self.GENOMIC_DATA_MAP_NAME) { - genomicDataAddRemoveHandler(handleOp); - } - else if (path === self.VISIBLE_GENOMIC_DATA_MAP_NAME) { - genomicDataVisibilityChangeHandler(handleOp); - } - else if (path === self.GENOMIC_DATA_GROUP_NAME) { - genomicDataGroupChangeHandler(handleOp); - } - } - else { //Then it is update event - if (path === self.NODEMAP_NAME) { - updateElementHandler(handleOp); - } - else if (path === self.EDGEMAP_NAME) { - updateElementHandler(handleOp); - } - else if (path === self.LAYOUT_PROPS_NAME) { - updateLayoutPropsHandler(handleOp); - } - else if (path === self.GLOBAL_OPTS_NAME) { - updateGlobalOptionsHandler(handleOp); - } - else if (path === self.GENOMIC_DATA_COLOR_SCHEME_NAME) { - updateGenomicDataColorSchemeHandler(handleOp); - } - } - } - }); - }; + const newEdge: any = self.edgeInitializer(param); - /* - * Make sure that genomic cloud data is syncronized - */ - checkShareDBGenomicData () { - - var self = this; - var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME]; - var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; - var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME]; - var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; - - for (var key in genomicDataMap) { - this.editor.genomicDataOverlayManager.genomicDataMap[key] = - genomicDataMap[key]; - } + const tmpEdgeID = tmpEdge.id; + const newEdgeID = newEdge.id; - for (var key in visDataMap) { - this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key] = - visDataMap[key]; - } + const ops = [ + { p: [self.EDGEMAP_NAME, tmpEdgeID], od: tmpEdge }, + { p: [self.EDGEMAP_NAME, newEdgeID], oi: newEdge }, + ]; + self.applyShareDBOperation(ops); + } + } - for (var key in groupedGenomicDataMap) { - this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key] = - groupedGenomicDataMap[key]; - } - this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount; - this.editor.genomicDataOverlayManager.showGenomicData((node: any) => { - this.editor.resizeElements(node); - }); - this.editor.genomicDataOverlayManager.notifyObservers(); - }; - - /* - * Gets the first empty index from the shared document - * genomic data group count and increments counter by 1 - * - */ - - getEmptyGroupID() { - var returnCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; - this.incrementShareDBGroupCount(); - return returnCount; - }; + //Add real time nodes to local graph + this.editor.addNewElementsLocally(nodeMap, edgeMap); + //Adds different type of highlight to nodes and hides if their property is hidden + this.editor.highlightElementsInitially( + invalidHighlightedGenes, + invalidGenes, + highlightedGenes, + highlightedEdges, + hiddenGenes + ); + + //Update layout properties & global options!! + if (shareDBLayoutProperties.name == "cose-bilkent") { + shareDBLayoutProperties.name = "fcose"; + this.updateLayoutProperties(shareDBLayoutProperties); + } + this.editor.updateLayoutPropertiesCallback({ li: shareDBLayoutProperties }); + this.editor.changeGlobalOptions({ li: globalOptions }); + + //Sync already available genomic data ! + + if (!groupedGenomicDataMap) { + self.insertShareDBObject(self.GENOMIC_DATA_MAP_NAME, "0", []); + for (const key of Object.keys(visDataMap)) { + var currentMap = _.clone(groupedGenomicDataMap["0"]); + // currentMap.push(visibilityMapKeys[key]); + self.updateShareDBObject(self.GENOMIC_DATA_MAP_NAME, "0", currentMap); + } + } - /* - * Gets the first empty index from the shared document - * Initializes & inserts a new genomic data - * by group id or group name - * - */ - groupGenomicData(cancerNames, inGroupId) { - var genomicGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME]; - var genomicVisMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; - - var groupID = "" + inGroupId; - var currentGroup = []; - - if (genomicGroupMap.hasOwnProperty(groupID)) - currentGroup = _.clone(genomicGroupMap[groupID]); - - for (var i in cancerNames) { - if (!genomicVisMap.hasOwnProperty(cancerNames[i])) - currentGroup.push(cancerNames[i]); - } + if (!groupedGenomicDataCount) { + var count = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT]; + var op = [ + { + p: [self.GENOMIC_DATA_GROUP_COUNT], + na: -count, + }, + ]; + self.applyShareDBOperation(op); + groupedGenomicDataCount = self.doc.data[self.GENOMIC_DATA_GROUP_COUNT]; + } - // If group id already exists change existing object - if (genomicGroupMap.hasOwnProperty(groupID)) { - this.updateShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup); - } - else { - //Insert new group - this.insertShareDBObject(this.GENOMIC_DATA_GROUP_NAME, groupID, currentGroup); - } + if (!genomicDataColorScheme) { + genomicDataColorScheme = this.editor.getGenomicDataOverlayColorScheme(); + const op = [ + { + p: [self.GENOMIC_DATA_COLOR_SCHEME_NAME], + oi: [genomicDataColorScheme], + }, + ]; + this.applyShareDBOperation(op); + } - }; + this.editor.updateGenomicDataColorSchemeHandler({ + li: genomicDataColorScheme, + }); - //Clears genomic data on shared document - clearGenomicData() { - this.clearShareDBGenomicData(); - }; + for (const key_g of Object.keys(genomicDataMap)) { + this.editor.genomicDataOverlayManager.genomicDataMap[key_g] = + genomicDataMap[key_g]; + } - addGenomicData(geneData) { - var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME]; - - //Iterate over all genmoic data which is mapped by geneSymbol to list of alteration values - //that are also mapped by cancer name and associated value - var ops = []; - for (var geneSymbol in geneData) { - var genomicMapEntry = {}; - if (genomicMap.hasOwnProperty(geneSymbol)) - genomicMapEntry = _.clone(genomicMap[geneSymbol]); - - for (var cancerType in geneData[geneSymbol]) { - if (!(cancerType in genomicMapEntry)) - genomicMapEntry[cancerType] = parseInt(geneData[geneSymbol][cancerType]).toFixed(2); - } - ops.push({ - p: [this.GENOMIC_DATA_MAP_NAME, geneSymbol], - oi: genomicMapEntry - }); - } - this.applyShareDBOperation(ops); - }; + for (const key_g of Object.keys(groupedGenomicDataMap)) { + this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key_g] = + groupedGenomicDataMap[key_g]; + const data = groupedGenomicDataMap[key_g]; + if (data.length !== 1) { + console.log( + "Grouped genomic data expected to be of length 1 (from sync)" + ); + } + data.forEach((profileId: any) => { + this.editor.addToProfiles(profileId); + }); + } - addGenomicVisibilityData(visMap) { - var ops = []; - for (var cancerStudy in visMap) { - ops.push({ - p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, cancerStudy], - oi: visMap[cancerStudy] - }); - } - this.applyShareDBOperation(ops); - }; + for (const key_g of Object.keys(visDataMap)) { + this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key_g] = + visDataMap[key_g]; + this.editor.adjustVisibilityShareDB(key_g, visDataMap[key_g]); + } - changeVisibility(nodesToHide, isHidden) { - var self = this; - var nodeMap = self.doc.data[this.NODEMAP_NAME]; - - nodesToHide.forEach(function (ele) { - var nodeID = ele.id(); - if (nodeMap.hasOwnProperty(nodeID)) { - var realTimeNode = nodeMap[nodeID]; - realTimeNode.isHidden = isHidden; - self.updateShareDBObject(self.NODEMAP_NAME, nodeID, realTimeNode); - } - }); + //Does not seem necessary for not but just for sake of completeness + this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount; + + this.editor.genomicDataOverlayManager.showGenomicData((node: any) => { + this.editor.resizeElements(node); + }); + this.editor.genomicDataOverlayManager.notifyObservers(); + this.editor.cy.style().update(); + this.editor.cy.fit(50); + } + + /* + * Initialize event listeners for any operation coming from shareDB + * + */ + initSharedDocEventHandlers() { + var self = this; + + //Setup event handlers for maps + var nodeAddRemoveHandler = function(op) { + self.editor.shareDBNodeAddRemoveEventCallBack(op); }; - changeHighlight(elementsToHighlight, isHighlighted) { - var self = this; - var nodeMap = self.doc.data[this.NODEMAP_NAME]; - var edgeMap = self.doc.data[this.EDGEMAP_NAME]; - - elementsToHighlight.forEach(function (ele) { - var elementID = ele.id(); - if (nodeMap.hasOwnProperty(elementID)) { - var realTimeNode = nodeMap[elementID]; - realTimeNode.isHighlighted = isHighlighted; - self.updateShareDBObject(self.NODEMAP_NAME, elementID, realTimeNode); - } - if (edgeMap.hasOwnProperty(elementID)) { - var realTimeEdge = edgeMap[elementID]; - realTimeEdge.isHighlighted = isHighlighted; - self.updateShareDBObject(self.EDGEMAP_NAME, elementID, realTimeEdge); - } - }); + var edgeAddRemoveHandler = function(op) { + self.editor.shareDBEdgeAddRemoveEventCallBack(op); }; - addNewNode(nodeData, posData) { - var realTimeGeneratedID = this.getCustomObjId(); - var params = { - name: nodeData.name, - type: nodeData.type, - id: realTimeGeneratedID, - parent: nodeData.parent, - w: nodeData.w, - h: nodeData.h, - minWidth: nodeData.minWidth, - minWidthBiasLeft: nodeData.minWidthBiasLeft, - minWidthBiasRight: nodeData.minWidthBiasRight, - minHeight: nodeData.minHeight, - minHeightBiasTop: nodeData.minHeightBiasTop, - minHeightBiasBottom: nodeData.minHeightBiasBottom - }; - - //Ensures new node is compatible with the other nodes - var newNode = this.nodeInitializer(params); - if (posData) { - newNode.x = posData.x; - newNode.y = posData.y; - } - this.insertShareDBObject(this.NODEMAP_NAME, realTimeGeneratedID, newNode); + var genomicDataAddRemoveHandler = function(op) { + self.editor.shareDBGenomicDataHandler(op); }; - addNewEdge(edgeData) { - var realTimeGeneratedID = this.getCustomObjId(); - var params = { - type: edgeData.type, - id: realTimeGeneratedID, - source: edgeData.source, - target: edgeData.target, - pubmedIDs: edgeData.pubmedIDs, - name: edgeData.name, - anchorPoints: edgeData.anchorPoints - }; - - //Ensures new edge is compatible with the other edge - var newEdge = this.edgeInitializer(params); - this.insertShareDBObject(this.EDGEMAP_NAME, realTimeGeneratedID, newEdge); + var genomicDataVisibilityChangeHandler = function(op) { + self.editor.shareDBGenomicDataVisibilityHandler(op); + self.checkShareDBGenomicData(); }; - reconnectEdge = function(sourceID, targetID, edgeData) { - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - var edge = edgeMap[edgeData.id]; - var edgeID = edge.id; - - edge.source = sourceID; - edge.target = targetID; - - if(edgeMap.hasOwnProperty(edgeID)) { - this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, edge); - } - else { - throw new Error('Element does not exist in Real Time'); - } + var genomicDataGroupChangeHandler = function(op) { + self.editor.shareDBGenomicDataGroupChangeHandler(op); }; - - removeElement (elementID) { - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - - if (nodeMap.hasOwnProperty(elementID)) { - this.deleteShareDBObject(this.NODEMAP_NAME, elementID); - } - else if (edgeMap.hasOwnProperty(elementID)) { - this.deleteShareDBObject(this.EDGEMAP_NAME, elementID); - } - else { - throw new Error('Element does not exist in Real Time'); - } + var updateElementHandler = function(op) { + self.editor.updateElementCallback(op); }; - moveElement (ele) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - - var elementID = ele.id(); - var newPos = ele.position(); - - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.x = newPos.x; - tmpNode.y = newPos.y; - this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); - } - else { - throw new Error('Element does not exist in nodes !!! '); - } + var updateLayoutPropsHandler = function(op) { + self.editor.updateLayoutPropertiesCallback(op); }; - //This function is used for movements of all selected elements wrt alignment selected - changeElementsPositionByAlignment (coll) { - var self = this; - var nodeMap = self.doc.data[this.NODEMAP_NAME]; - - coll.forEach(function (ele) { - var elementID = ele.node.id(); - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.x = ele.nextPosition.x; - tmpNode.y = ele.nextPosition.y; - self.updateShareDBObject(self.NODEMAP_NAME, elementID, tmpNode); - } - else { - throw new Error('Element does not exist in nodes !!! '); - } - }); + var updateGlobalOptionsHandler = function(op) { + self.editor.changeGlobalOptions(op); }; - resizeElement (ele, previousWidth, previousHeight) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - - var elementID = ele.id(); - var newWidth = ele.width(); - var newHeight = ele.height(); - var currentX = ele.position('x'); - var currentY = ele.position('y'); - - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.x = currentX + newWidth - previousWidth; - tmpNode.y = currentY + newHeight - previousHeight; - tmpNode.w = newWidth; - tmpNode.h = newHeight; - this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); - } - else { - throw new Error('Element does not exist in nodes !!! '); - } + var updateGenomicDataColorSchemeHandler = function(op) { + self.editor.updateGenomicDataColorSchemeHandler(op); }; - setSizeOfElement (ele, newWidth, newHeight) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; + //Event listeners for maps + this.doc.on("op", function(op, source) { + for (var i = 0; i < op.length; i++) { + var handleOp = op[i]; + var path = handleOp.p[0]; + var isReplaceEvent = self.isShareDBReplaceEvent(handleOp); + + if (path === self.CHAT_APPLICATION_NAME) { + self.editor.updateMessages( + self.doc.data[self.CHAT_APPLICATION_NAME][handleOp.p[1]] + ); + } + if (path === self.CHAT_MESSAGES_COUNT) { + self.editor.updateMessageCount( + self.doc.data[self.CHAT_MESSAGES_COUNT] + ); + } + + if (path === self.PATHWAY_TITLE) { + self.editor.updatePathwayTitleBack( + self.doc.data[self.PATHWAY_TITLE][0] + ); + } + + if (!isReplaceEvent) { + if (path === self.NODEMAP_NAME) { + nodeAddRemoveHandler(handleOp); + } else if (path === self.EDGEMAP_NAME) { + edgeAddRemoveHandler(handleOp); + } else if (path === self.GENOMIC_DATA_MAP_NAME) { + genomicDataAddRemoveHandler(handleOp); + } else if (path === self.VISIBLE_GENOMIC_DATA_MAP_NAME) { + genomicDataVisibilityChangeHandler(handleOp); + } else if (path === self.GENOMIC_DATA_GROUP_NAME) { + genomicDataGroupChangeHandler(handleOp); + } + } else { + //Then it is update event + if (path === self.NODEMAP_NAME) { + updateElementHandler(handleOp); + } else if (path === self.EDGEMAP_NAME) { + updateElementHandler(handleOp); + } else if (path === self.LAYOUT_PROPS_NAME) { + updateLayoutPropsHandler(handleOp); + } else if (path === self.GLOBAL_OPTS_NAME) { + updateGlobalOptionsHandler(handleOp); + } else if (path === self.GENOMIC_DATA_COLOR_SCHEME_NAME) { + updateGenomicDataColorSchemeHandler(handleOp); + } + } + } + }); + } + + /* + * Make sure that genomic cloud data is syncronized + */ + checkShareDBGenomicData() { + var self = this; + var genomicDataMap = self.doc.data[this.GENOMIC_DATA_MAP_NAME]; + var visDataMap = self.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; + var groupedGenomicDataMap = self.doc.data[this.GENOMIC_DATA_GROUP_NAME]; + var groupedGenomicDataCount = self.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; + + for (var key in genomicDataMap) { + this.editor.genomicDataOverlayManager.genomicDataMap[key] = + genomicDataMap[key]; + } - var elementID = ele.id(); + for (var key in visDataMap) { + this.editor.genomicDataOverlayManager.visibleGenomicDataMapByType[key] = + visDataMap[key]; + } - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.w = newWidth; - tmpNode.h = newHeight; - this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); - } - else { - throw new Error('Element does not exist in nodes !!! '); - } - }; + for (var key in groupedGenomicDataMap) { + this.editor.genomicDataOverlayManager.groupedGenomicDataMap[key] = + groupedGenomicDataMap[key]; + } + this.editor.genomicDataOverlayManager.groupedGenomicDataCount = groupedGenomicDataCount; + this.editor.genomicDataOverlayManager.showGenomicData((node: any) => { + this.editor.resizeElements(node); + }); + this.editor.genomicDataOverlayManager.notifyObservers(); + } + + /* + * Gets the first empty index from the shared document + * genomic data group count and increments counter by 1 + * + */ + + getEmptyGroupID() { + var returnCount = this.doc.data[this.GENOMIC_DATA_GROUP_COUNT]; + this.incrementShareDBGroupCount(); + return returnCount; + } + + /* + * Gets the first empty index from the shared document + * Initializes & inserts a new genomic data + * by group id or group name + * + */ + groupGenomicData(cancerNames, inGroupId) { + var genomicGroupMap = this.doc.data[this.GENOMIC_DATA_GROUP_NAME]; + var genomicVisMap = this.doc.data[this.VISIBLE_GENOMIC_DATA_MAP_NAME]; + + var groupID = "" + inGroupId; + var currentGroup = []; + + if (genomicGroupMap.hasOwnProperty(groupID)) + currentGroup = _.clone(genomicGroupMap[groupID]); + + for (var i in cancerNames) { + if (!genomicVisMap.hasOwnProperty(cancerNames[i])) + currentGroup.push(cancerNames[i]); + } - resizeCompound (ele, minWidth, minWidthBiasLeft, minWidthBiasRight, minHeight, minHeightBiasTop, minHeightBiasBottom) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - - var elementID = ele.id(); - var currentX = ele.position('x'); - var currentY = ele.position('y'); - - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.x = currentX; - tmpNode.y = currentY; - tmpNode.minWidth = minWidth; - tmpNode.minWidthBiasLeft = minWidthBiasLeft; - tmpNode.minWidthBiasRight = minWidthBiasRight; - tmpNode.minHeight = minHeight; - tmpNode.minHeightBiasTop = minHeightBiasTop; - tmpNode.minHeightBiasBottom = minHeightBiasBottom; - this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); - } - else { - throw new Error('Element does not exist in nodes !!! '); - } + // If group id already exists change existing object + if (genomicGroupMap.hasOwnProperty(groupID)) { + this.updateShareDBObject( + this.GENOMIC_DATA_GROUP_NAME, + groupID, + currentGroup + ); + } else { + //Insert new group + this.insertShareDBObject( + this.GENOMIC_DATA_GROUP_NAME, + groupID, + currentGroup + ); + } + } + + //Clears genomic data on shared document + clearGenomicData() { + this.clearShareDBGenomicData(); + } + + addGenomicData(geneData) { + var genomicMap = this.doc.data[this.GENOMIC_DATA_MAP_NAME]; + + //Iterate over all genmoic data which is mapped by geneSymbol to list of alteration values + //that are also mapped by cancer name and associated value + var ops = []; + for (var geneSymbol in geneData) { + var genomicMapEntry = {}; + if (genomicMap.hasOwnProperty(geneSymbol)) + genomicMapEntry = _.clone(genomicMap[geneSymbol]); + + for (var cancerType in geneData[geneSymbol]) { + if (!(cancerType in genomicMapEntry)) + genomicMapEntry[cancerType] = parseInt( + geneData[geneSymbol][cancerType] + ).toFixed(2); + } + ops.push({ + p: [this.GENOMIC_DATA_MAP_NAME, geneSymbol], + oi: genomicMapEntry, + }); + } + this.applyShareDBOperation(ops); + } + + addGenomicVisibilityData(visMap) { + var ops = []; + for (var cancerStudy in visMap) { + ops.push({ + p: [this.VISIBLE_GENOMIC_DATA_MAP_NAME, cancerStudy], + oi: visMap[cancerStudy], + }); + } + this.applyShareDBOperation(ops); + } + + changeVisibility(nodesToHide, isHidden) { + var self = this; + var nodeMap = self.doc.data[this.NODEMAP_NAME]; + + nodesToHide.forEach(function(ele) { + var nodeID = ele.id(); + if (nodeMap.hasOwnProperty(nodeID)) { + var realTimeNode = nodeMap[nodeID]; + realTimeNode.isHidden = isHidden; + self.updateShareDBObject(self.NODEMAP_NAME, nodeID, realTimeNode); + } + }); + } + + changeHighlight(elementsToHighlight, isHighlighted) { + var self = this; + var nodeMap = self.doc.data[this.NODEMAP_NAME]; + var edgeMap = self.doc.data[this.EDGEMAP_NAME]; + + elementsToHighlight.forEach(function(ele) { + var elementID = ele.id(); + if (nodeMap.hasOwnProperty(elementID)) { + var realTimeNode = nodeMap[elementID]; + realTimeNode.isHighlighted = isHighlighted; + self.updateShareDBObject(self.NODEMAP_NAME, elementID, realTimeNode); + } + if (edgeMap.hasOwnProperty(elementID)) { + var realTimeEdge = edgeMap[elementID]; + realTimeEdge.isHighlighted = isHighlighted; + self.updateShareDBObject(self.EDGEMAP_NAME, elementID, realTimeEdge); + } + }); + } + + addNewNode(nodeData, posData) { + var realTimeGeneratedID = this.getCustomObjId(); + var params = { + name: nodeData.name, + type: nodeData.type, + id: realTimeGeneratedID, + parent: nodeData.parent, + w: nodeData.w, + h: nodeData.h, + minWidth: nodeData.minWidth, + minWidthBiasLeft: nodeData.minWidthBiasLeft, + minWidthBiasRight: nodeData.minWidthBiasRight, + minHeight: nodeData.minHeight, + minHeightBiasTop: nodeData.minHeightBiasTop, + minHeightBiasBottom: nodeData.minHeightBiasBottom, }; - changeNodePositionsShareDB (nodes) { - var self = this; - var nodeMap = self.doc.data[self.NODEMAP_NAME]; - - nodes.forEach(function (ele) { - var nodeID = ele.id(); - if (nodeMap.hasOwnProperty(nodeID)) { - var realTimeNode = nodeMap[nodeID]; - realTimeNode.x = ele.position('x'); - realTimeNode.y = ele.position('y'); - self.updateShareDBObject(self - .NODEMAP_NAME, nodeID, realTimeNode); - } - else { - throw new Error('Element does not exist in nodes !!! '); - } - }); + //Ensures new node is compatible with the other nodes + var newNode = this.nodeInitializer(params); + if (posData) { + newNode.x = posData.x; + newNode.y = posData.y; + } + this.insertShareDBObject(this.NODEMAP_NAME, realTimeGeneratedID, newNode); + } + + addNewEdge(edgeData) { + var realTimeGeneratedID = this.getCustomObjId(); + var params = { + type: edgeData.type, + id: realTimeGeneratedID, + source: edgeData.source, + target: edgeData.target, + pubmedIDs: edgeData.pubmedIDs, + name: edgeData.name, + anchorPoints: edgeData.anchorPoints, }; - changeHighlightInvalidGenes (nodeIDs, isInvalid) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - - //TODO check compound operation inside or outside of for ? - for (var i in nodeIDs) { - var nodeID = nodeIDs[i]; - if (nodeMap.hasOwnProperty(nodeID)) { - var collaborativeNode = nodeMap[nodeID]; - collaborativeNode.isInvalidGene = isInvalid; - this.updateShareDBObject(this.NODEMAP_NAME, nodeID, collaborativeNode); - } - } + //Ensures new edge is compatible with the other edge + var newEdge = this.edgeInitializer(params); + this.insertShareDBObject(this.EDGEMAP_NAME, realTimeGeneratedID, newEdge); + } - }; + reconnectEdge = function(sourceID, targetID, edgeData) { + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + var edge = edgeMap[edgeData.id]; + var edgeID = edge.id; - addPubmedIDs (edgeID, pubmedIDs) { - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + edge.source = sourceID; + edge.target = targetID; + if (edgeMap.hasOwnProperty(edgeID)) { + this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, edge); + } else { + throw new Error("Element does not exist in Real Time"); + } + }; + + removeElement(elementID) { + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + + if (nodeMap.hasOwnProperty(elementID)) { + this.deleteShareDBObject(this.NODEMAP_NAME, elementID); + } else if (edgeMap.hasOwnProperty(elementID)) { + this.deleteShareDBObject(this.EDGEMAP_NAME, elementID); + } else { + throw new Error("Element does not exist in Real Time"); + } + } - if (edgeMap.hasOwnProperty(edgeID)) { - var tmpEdge = edgeMap[edgeID]; - var nonDuplicateArray = []; - for (var i = 0; i < pubmedIDs.length; i++) { - if (tmpEdge.pubmedIDs.indexOf(pubmedIDs[i]) < 0) { - nonDuplicateArray.push(pubmedIDs[i]); - } - } - tmpEdge.pubmedIDs = tmpEdge.pubmedIDs.concat(nonDuplicateArray); - this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); - } - else { - throw new Error('Edge does not exist in real time !!! '); - } - }; + moveElement(ele) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; - removePubmedID(edgeID, pubmedIDs) { - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - - if (edgeMap.hasOwnProperty(edgeID)) { - var tmpEdge = edgeMap[edgeID]; - var removedIndices = []; - for (var i = 0; i < pubmedIDs.length; i++) { - var tmpID = pubmedIDs[i]; - var index = tmpEdge.pubmedIDs.indexOf(tmpID); - if (index >= 0) { - removedIndices.push(index); - } - } - for (var i = 0; i < removedIndices.length; i++) { - tmpEdge.pubmedIDs.remove(removedIndices[i]); - } - this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); + var elementID = ele.id(); + var newPos = ele.position(); - } - else { - throw new Error('Edge does not exist in real time !!! '); - } - }; + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.x = newPos.x; + tmpNode.y = newPos.y; + this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); + } else { + throw new Error("Element does not exist in nodes !!! "); + } + } + + //This function is used for movements of all selected elements wrt alignment selected + changeElementsPositionByAlignment(coll) { + var self = this; + var nodeMap = self.doc.data[this.NODEMAP_NAME]; + + coll.forEach(function(ele) { + var elementID = ele.node.id(); + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.x = ele.nextPosition.x; + tmpNode.y = ele.nextPosition.y; + self.updateShareDBObject(self.NODEMAP_NAME, elementID, tmpNode); + } else { + throw new Error("Element does not exist in nodes !!! "); + } + }); + } + + resizeElement(ele, previousWidth, previousHeight) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + + var elementID = ele.id(); + var newWidth = ele.width(); + var newHeight = ele.height(); + var currentX = ele.position("x"); + var currentY = ele.position("y"); + + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.x = currentX + newWidth - previousWidth; + tmpNode.y = currentY + newHeight - previousHeight; + tmpNode.w = newWidth; + tmpNode.h = newHeight; + this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); + } else { + throw new Error("Element does not exist in nodes !!! "); + } + } - updateEdgeAnchorPoints(edgeID, anchorPointsArray, edgeCurveStyle) { + setSizeOfElement(ele, newWidth, newHeight) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - - if (edgeMap.hasOwnProperty(edgeID)) { - var tmpEdge = edgeMap[edgeID]; - tmpEdge.anchorPoints = anchorPointsArray; - tmpEdge.edgeCurveStyle = edgeCurveStyle; - this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); - } - else { - throw new Error('Edge does not exist in real time !!! '); - } - }; + var elementID = ele.id(); - changeName(ele, newName) { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - - var elementID = ele.id(); - - if (ele.isNode()) { - if (nodeMap.hasOwnProperty(elementID)) { - var tmpNode = nodeMap[elementID]; - tmpNode.name = newName; - this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); - } - else { - throw new Error('Element does not exist in nodes !!! '); - } - } - else { - if (edgeMap.hasOwnProperty(elementID)) { - var tmpEdge = edgeMap[elementID]; - tmpEdge.name = newName; - this.updateShareDBObject(this.EDGEMAP_NAME, elementID, tmpEdge); - } - else { - throw new Error('Element does not exist in edges !!! '); - } - } - }; + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.w = newWidth; + tmpNode.h = newHeight; + this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); + } else { + throw new Error("Element does not exist in nodes !!! "); + } + } + + resizeCompound( + ele, + minWidth, + minWidthBiasLeft, + minWidthBiasRight, + minHeight, + minHeightBiasTop, + minHeightBiasBottom + ) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + + var elementID = ele.id(); + var currentX = ele.position("x"); + var currentY = ele.position("y"); + + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.x = currentX; + tmpNode.y = currentY; + tmpNode.minWidth = minWidth; + tmpNode.minWidthBiasLeft = minWidthBiasLeft; + tmpNode.minWidthBiasRight = minWidthBiasRight; + tmpNode.minHeight = minHeight; + tmpNode.minHeightBiasTop = minHeightBiasTop; + tmpNode.minHeightBiasBottom = minHeightBiasBottom; + this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); + } else { + throw new Error("Element does not exist in nodes !!! "); + } + } + + changeNodePositionsShareDB(nodes) { + var self = this; + var nodeMap = self.doc.data[self.NODEMAP_NAME]; + + nodes.forEach(function(ele) { + var nodeID = ele.id(); + if (nodeMap.hasOwnProperty(nodeID)) { + var realTimeNode = nodeMap[nodeID]; + realTimeNode.x = ele.position("x"); + realTimeNode.y = ele.position("y"); + self.updateShareDBObject(self.NODEMAP_NAME, nodeID, realTimeNode); + } else { + throw new Error("Element does not exist in nodes !!! "); + } + }); + } + + changeHighlightInvalidGenes(nodeIDs, isInvalid) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + + //TODO check compound operation inside or outside of for ? + for (var i in nodeIDs) { + var nodeID = nodeIDs[i]; + if (nodeMap.hasOwnProperty(nodeID)) { + var collaborativeNode = nodeMap[nodeID]; + collaborativeNode.isInvalidGene = isInvalid; + this.updateShareDBObject(this.NODEMAP_NAME, nodeID, collaborativeNode); + } + } + } + + addPubmedIDs(edgeID, pubmedIDs) { + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + + if (edgeMap.hasOwnProperty(edgeID)) { + var tmpEdge = edgeMap[edgeID]; + var nonDuplicateArray = []; + for (var i = 0; i < pubmedIDs.length; i++) { + if (tmpEdge.pubmedIDs.indexOf(pubmedIDs[i]) < 0) { + nonDuplicateArray.push(pubmedIDs[i]); + } + } + tmpEdge.pubmedIDs = tmpEdge.pubmedIDs.concat(nonDuplicateArray); + this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); + } else { + throw new Error("Edge does not exist in real time !!! "); + } + } + + removePubmedID(edgeID, pubmedIDs) { + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + + if (edgeMap.hasOwnProperty(edgeID)) { + var tmpEdge = edgeMap[edgeID]; + var removedIndices = []; + for (var i = 0; i < pubmedIDs.length; i++) { + var tmpID = pubmedIDs[i]; + var index = tmpEdge.pubmedIDs.indexOf(tmpID); + if (index >= 0) { + removedIndices.push(index); + } + } + for (var i = 0; i < removedIndices.length; i++) { + tmpEdge.pubmedIDs.remove(removedIndices[i]); + } + this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); + } else { + throw new Error("Edge does not exist in real time !!! "); + } + } + + updateEdgeAnchorPoints(edgeID, anchorPointsArray, edgeCurveStyle) { + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + + if (edgeMap.hasOwnProperty(edgeID)) { + var tmpEdge = edgeMap[edgeID]; + tmpEdge.anchorPoints = anchorPointsArray; + tmpEdge.edgeCurveStyle = edgeCurveStyle; + this.updateShareDBObject(this.EDGEMAP_NAME, edgeID, tmpEdge); + } else { + throw new Error("Edge does not exist in real time !!! "); + } + } + + changeName(ele, newName) { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + + var elementID = ele.id(); + + if (ele.isNode()) { + if (nodeMap.hasOwnProperty(elementID)) { + var tmpNode = nodeMap[elementID]; + tmpNode.name = newName; + this.updateShareDBObject(this.NODEMAP_NAME, elementID, tmpNode); + } else { + throw new Error("Element does not exist in nodes !!! "); + } + } else { + if (edgeMap.hasOwnProperty(elementID)) { + var tmpEdge = edgeMap[elementID]; + tmpEdge.name = newName; + this.updateShareDBObject(this.EDGEMAP_NAME, elementID, tmpEdge); + } else { + throw new Error("Element does not exist in edges !!! "); + } + } + } - changeParent(rootNode, newParentId, connectedEdges) { - var self = this; - var nodeLookupTable = {}; + changeParent(rootNode, newParentId, connectedEdges) { + var self = this; + var nodeLookupTable = {}; - function traverseFromRoot(rootNode, parId) { - /* + function traverseFromRoot(rootNode, parId) { + /* remove outermost node, create new real time node with given parentId, pass id of this real time node to children, @@ -1020,427 +1086,433 @@ export default class ShareDBManager { during change parent */ - var refNode = rootNode.nodeRef; - var children = rootNode.children; - var newParentId = parId; - - if (refNode) { - var refNodeId = refNode.id(); - var nodeData = refNode.data(); - var posData = refNode.position(); - var currentWidth = refNode.data('w'); - var currentHeight = refNode.data('h'); - - var newNodeData = - { - name: nodeData.name, - type: nodeData.type, - x: posData.x, - y: posData.y, - w: currentWidth, - h: currentHeight, - parent: -1 - }; - - if (parId) { - newNodeData.parent = parId; - } - - self.removeElement(refNodeId); - var newNode = self.nodeInitializer(newNodeData); - var newNodeId = newNode.id; - self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); - newParentId = newNodeId; - nodeLookupTable[refNodeId] = newNodeId; - } - - for (const childNode of children) { - traverseFromRoot(childNode, newParentId); - } + var refNode = rootNode.nodeRef; + var children = rootNode.children; + var newParentId = parId; + + if (refNode) { + var refNodeId = refNode.id(); + var nodeData = refNode.data(); + var posData = refNode.position(); + var currentWidth = refNode.data("w"); + var currentHeight = refNode.data("h"); + + var newNodeData = { + name: nodeData.name, + type: nodeData.type, + x: posData.x, + y: posData.y, + w: currentWidth, + h: currentHeight, + parent: -1, + }; + + if (parId) { + newNodeData.parent = parId; } - //Begin traversing from given root node - traverseFromRoot(rootNode, newParentId); + self.removeElement(refNodeId); + var newNode = self.nodeInitializer(newNodeData); + var newNodeId = newNode.id; + self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); + newParentId = newNodeId; + nodeLookupTable[refNodeId] = newNodeId; + } - //Restore edges that dissapear by the change parent operation - //TODO compound operations ? - connectedEdges.forEach(function (edge, index) { - var edgeData = edge.data(); - self.removeElement(edge.id()); + for (const childNode of children) { + traverseFromRoot(childNode, newParentId); + } + } - var newSource = nodeLookupTable[edgeData.source]; - var newTarget = nodeLookupTable[edgeData.target]; + //Begin traversing from given root node + traverseFromRoot(rootNode, newParentId); + + //Restore edges that dissapear by the change parent operation + //TODO compound operations ? + connectedEdges.forEach(function(edge, index) { + var edgeData = edge.data(); + self.removeElement(edge.id()); + + var newSource = nodeLookupTable[edgeData.source]; + var newTarget = nodeLookupTable[edgeData.target]; + + if (newSource) { + edgeData.source = newSource; + } + + if (newTarget) { + edgeData.target = newTarget; + } + + self.addNewEdge(edgeData); + }); + } + + removeAllElements() { + var nodeMap = this.doc.data[this.NODEMAP_NAME]; + var edgeMap = this.doc.data[this.EDGEMAP_NAME]; + var ops = []; + + //Remove all real time nodes + for (const key of Object.keys(nodeMap)) { + ops.push({ + p: [this.NODEMAP_NAME, key], + od: nodeMap[key], + }); + } - if (newSource) { - edgeData.source = newSource; - } + //Remove all real time edges + for (const key of Object.keys(edgeMap)) { + ops.push({ + p: [this.EDGEMAP_NAME, key], + od: edgeMap[key], + }); + } - if (newTarget) { - edgeData.target = newTarget; - } + this.applyShareDBOperation(ops); + } - self.addNewEdge(edgeData); - }); - }; + loadGraph(nodes, edges) { + var self = this; + this.removeAllElements(); - removeAllElements() { - var nodeMap = this.doc.data[this.NODEMAP_NAME]; - var edgeMap = this.doc.data[this.EDGEMAP_NAME]; - var ops = []; - - //Remove all real time nodes - for (const key of Object.keys(nodeMap)) { - ops.push({ - p: [this.NODEMAP_NAME, key], - od: nodeMap[key] - }); - } + //Function that traverses graph tree recursively. + var oldIdNewIdMap = {}; + + function traverseTree(node, newParentId) { + node.data.x = node.position.x; + node.data.y = node.position.y; - //Remove all real time edges - for (const key of Object.keys(edgeMap)) { - ops.push({ - p: [this.EDGEMAP_NAME, key], - od: edgeMap[key] - }); + //Update parent ! + if (newParentId) { + var parent = node.data.parent; + if (parent) { + node.data.parent = newParentId; } + } - this.applyShareDBOperation(ops); - }; + //Create new real time node + var newNodeId = self.getCustomObjId(); + var params = node.data; + oldIdNewIdMap[params.id] = newNodeId; + var newNode = self.nodeInitializer(params); + newNode.id = newNodeId; - loadGraph(nodes, edges) { - var self = this; - this.removeAllElements(); - - //Function that traverses graph tree recursively. - var oldIdNewIdMap = {}; - - function traverseTree(node, newParentId) { - node.data.x = node.position.x; - node.data.y = node.position.y; - - //Update parent ! - if (newParentId) { - var parent = node.data.parent; - if (parent) { - node.data.parent = newParentId; - } - } - - //Create new real time node - var newNodeId = self.getCustomObjId(); - var params = node.data; - oldIdNewIdMap[params.id] = newNodeId; - var newNode = self.nodeInitializer(params); - newNode.id = newNodeId; - - self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); - - //If node has children recursively traverse sub graphs and update parent field of child nodes - if (node.children.length > 0) { - for (const tmpNode of node.children) { - traverseTree(tmpNode, newNodeId); - } - } - } + self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); - //Create graph hierarchy from given list of flat nodes - var tree = GraphUtilities.createGraphHierarchyRealTime(nodes); - //Traverse from root nodes of tree - for (const rootLevelNode of tree) { - traverseTree(rootLevelNode, undefined); + //If node has children recursively traverse sub graphs and update parent field of child nodes + if (node.children.length > 0) { + for (const tmpNode of node.children) { + traverseTree(tmpNode, newNodeId); } + } + } + + //Create graph hierarchy from given list of flat nodes + var tree = GraphUtilities.createGraphHierarchyRealTime(nodes); + //Traverse from root nodes of tree + for (const rootLevelNode of tree) { + traverseTree(rootLevelNode, undefined); + } - /* + /* Create real time edges, update the source and target fields, since new ids will be generated for the nodes in real time */ - for (const edge of edges) { - edge.data.source = oldIdNewIdMap[edge.data.source]; - edge.data.target = oldIdNewIdMap[edge.data.target]; - - var edgeCurveStyle = "bezier"; - if (edge.data.bendPointPositions && edge.data.bendPointPositions.length > 0) { - edge.data['anchorPoints'] = edge.data['bendPointPositions']; - delete edge.data['bendPointPositions']; - edgeCurveStyle = "segments"; - } - else if (edge.data.controlPointPositions && edge.data.controlPointPositions.length > 0) { - edge.data['anchorPoints'] = edge.data['controlPointPositions']; - delete edge.data['controlPointPositions']; - edgeCurveStyle = "unbundled-bezier"; - } - - var params = edge.data; - params.edgeCurveStyle = edgeCurveStyle; - var newEdgeID = self.getCustomObjId(); - params.id = newEdgeID; - - var newEdge = self.edgeInitializer(params); - self.insertShareDBObject(self.EDGEMAP_NAME, newEdgeID, newEdge); - } - }; - - mergeGraph (nodes, edges) { - var self = this; - var nodeMap = self.doc.data[this.NODEMAP_NAME]; - - var realTimeNodeMap = nodeMap; - var realTimeNodeLookupTable = {}; - var realTimeNodeNameLookupTable = {}; - var oldIdNewIdMap = {}; - - //Create lookup table for real time nodes - //items are stored in an array in the resulting array of nodeMap.items() - // [0] - id, [1] - object - for (var i in realTimeNodeMap) { - var nodeMapItem = realTimeNodeMap[i]; - realTimeNodeLookupTable[nodeMapItem.id] = nodeMapItem; - realTimeNodeNameLookupTable[nodeMapItem.name] = nodeMapItem; - } + for (const edge of edges) { + edge.data.source = oldIdNewIdMap[edge.data.source]; + edge.data.target = oldIdNewIdMap[edge.data.target]; + + var edgeCurveStyle = "bezier"; + if ( + edge.data.bendPointPositions && + edge.data.bendPointPositions.length > 0 + ) { + edge.data["anchorPoints"] = edge.data["bendPointPositions"]; + delete edge.data["bendPointPositions"]; + edgeCurveStyle = "segments"; + } else if ( + edge.data.controlPointPositions && + edge.data.controlPointPositions.length > 0 + ) { + edge.data["anchorPoints"] = edge.data["controlPointPositions"]; + delete edge.data["controlPointPositions"]; + edgeCurveStyle = "unbundled-bezier"; + } + + var params = edge.data; + params.edgeCurveStyle = edgeCurveStyle; + var newEdgeID = self.getCustomObjId(); + params.id = newEdgeID; + + var newEdge = self.edgeInitializer(params); + self.insertShareDBObject(self.EDGEMAP_NAME, newEdgeID, newEdge); + } + } + + mergeGraph(nodes, edges) { + var self = this; + var nodeMap = self.doc.data[this.NODEMAP_NAME]; + + var realTimeNodeMap = nodeMap; + var realTimeNodeLookupTable = {}; + var realTimeNodeNameLookupTable = {}; + var oldIdNewIdMap = {}; + + //Create lookup table for real time nodes + //items are stored in an array in the resulting array of nodeMap.items() + // [0] - id, [1] - object + for (var i in realTimeNodeMap) { + var nodeMapItem = realTimeNodeMap[i]; + realTimeNodeLookupTable[nodeMapItem.id] = nodeMapItem; + realTimeNodeNameLookupTable[nodeMapItem.name] = nodeMapItem; + } - //Recursive traverse definition - function traverseTree(node, newParentId) { - //Search by name ! - //We have not found a node that exist in the graph, add normally - if (!(node.data.name in realTimeNodeNameLookupTable)) { - node.data.x = node.position.x; - node.data.y = node.position.y; - - //Update parent ! - if (newParentId) { - var parent = node.data.parent; - if (parent) { - node.data.parent = newParentId; - } - } - - //Create new real time node - var newNodeId = self.getCustomObjId(); - oldIdNewIdMap[node.data.id] = newNodeId; - var newNode = self.nodeInitializer(node.data); - newNode.id = newNodeId; - self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); - - //If node has children recursively traverse sub graphs and update parent field of child nodes - if (node.children.length > 0) { - for (const tmpNode of node.children) { - traverseTree(tmpNode, newNodeId); - } - } - } - // At this point there exists another node in the graph with the same name as 'node' - // we need to update parent field of children of this node if any - else { - var sameNameNode = realTimeNodeNameLookupTable[node.data.name]; - var sameNodeId = sameNameNode.id; - oldIdNewIdMap[node.data.id] = sameNodeId; - - //If node has children recursively traverse sub graphs and update parent field of child nodes - if (node.children.length > 0) { - for (const tmpNode of node.children) { - traverseTree(tmpNode, sameNodeId); - } - } - } - } + //Recursive traverse definition + function traverseTree(node, newParentId) { + //Search by name ! + //We have not found a node that exist in the graph, add normally + if (!(node.data.name in realTimeNodeNameLookupTable)) { + node.data.x = node.position.x; + node.data.y = node.position.y; + + //Update parent ! + if (newParentId) { + var parent = node.data.parent; + if (parent) { + node.data.parent = newParentId; + } + } + + //Create new real time node + var newNodeId = self.getCustomObjId(); + oldIdNewIdMap[node.data.id] = newNodeId; + var newNode = self.nodeInitializer(node.data); + newNode.id = newNodeId; + self.insertShareDBObject(self.NODEMAP_NAME, newNodeId, newNode); + + //If node has children recursively traverse sub graphs and update parent field of child nodes + if (node.children.length > 0) { + for (const tmpNode of node.children) { + traverseTree(tmpNode, newNodeId); + } + } + } + // At this point there exists another node in the graph with the same name as 'node' + // we need to update parent field of children of this node if any + else { + var sameNameNode = realTimeNodeNameLookupTable[node.data.name]; + var sameNodeId = sameNameNode.id; + oldIdNewIdMap[node.data.id] = sameNodeId; + + //If node has children recursively traverse sub graphs and update parent field of child nodes + if (node.children.length > 0) { + for (const tmpNode of node.children) { + traverseTree(tmpNode, sameNodeId); + } + } + } + } - //Traverse from root nodes of tree - var tree = GraphUtilities.createGraphHierarchyRealTime(nodes); - for (const rootLevelNode of tree) { - traverseTree(rootLevelNode, rootLevelNode.data.id); - } + //Traverse from root nodes of tree + var tree = GraphUtilities.createGraphHierarchyRealTime(nodes); + for (const rootLevelNode of tree) { + traverseTree(rootLevelNode, rootLevelNode.data.id); + } - /* + /* Create real time edges, update the source and target fields, since new ids will be generated for the nodes in real time */ - var ops = []; - for (const edge of edges) { - edge.data.source = oldIdNewIdMap[edge.data.source]; - edge.data.target = oldIdNewIdMap[edge.data.target]; - var newEdge = self.edgeInitializer(edge.data); - var newEdgeID = this.getCustomObjId(); - newEdge.id = newEdgeID; - ops.push({ - p: [self.EDGEMAP_NAME, newEdgeID], - oi: newEdge - }); - } - self.applyShareDBOperation(ops); - }; - - updateLayoutProperties (newLayoutProperties) { - this.updateShareDBLayoutProperties(newLayoutProperties); - }; - - updateGlobalOptions (newOptions) { - this.updateShareDBGlobalOptions(newOptions); - }; - - updateGenomicDataOverlayColorScheme(newColorScheme: IColorValueMap) { - this.updateShareDBGenomicDataOverlayColorScheme(newColorScheme); + var ops = []; + for (const edge of edges) { + edge.data.source = oldIdNewIdMap[edge.data.source]; + edge.data.target = oldIdNewIdMap[edge.data.target]; + var newEdge = self.edgeInitializer(edge.data); + var newEdgeID = this.getCustomObjId(); + newEdge.id = newEdgeID; + ops.push({ + p: [self.EDGEMAP_NAME, newEdgeID], + oi: newEdge, + }); + } + self.applyShareDBOperation(ops); + } + + updateLayoutProperties(newLayoutProperties) { + this.updateShareDBLayoutProperties(newLayoutProperties); + } + + updateGlobalOptions(newOptions) { + this.updateShareDBGlobalOptions(newOptions); + } + + updateGenomicDataOverlayColorScheme(newColorScheme: IColorValueMap) { + this.updateShareDBGenomicDataOverlayColorScheme(newColorScheme); + } + + /* + * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child + * relationship by a field 'parent' which represents to the id of the parent node This function is specific + * for the needs of TCGA Pathway Curation Tool 04/07/2016 + * + * @param nodes {array}: flat list of nodes of a graph + * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes + * of each node in the returned array. + * a node in corresponding level. + * + * */ + createGraphHierarchy(nodes) { + //Some arrays and maps for creating graph hierarchy + var tree = []; + var mappedArr = {}; + + // First map the nodes of the array to an object -> create a hash table. + for (var i = 0, len = nodes.length; i < len; i++) { + var arrElem = nodes[i]; + mappedArr[arrElem.data.id] = arrElem; + mappedArr[arrElem.data.id].children = []; } - /* - * Creates graph hierarchy from given flat list of nodes list, nodes list is assumed to have parent-child - * relationship by a field 'parent' which represents to the id of the parent node This function is specific - * for the needs of TCGA Pathway Curation Tool 04/07/2016 - * - * @param nodes {array}: flat list of nodes of a graph - * @return {array}: Tree representation in array, entries are root level nodes. node.children gives children nodes - * of each node in the returned array. - * a node in corresponding level. - * - * */ - createGraphHierarchy (nodes) { - //Some arrays and maps for creating graph hierarchy - var tree = []; - var mappedArr = {}; - - // First map the nodes of the array to an object -> create a hash table. - for (var i = 0, len = nodes.length; i < len; i++) { - var arrElem = nodes[i]; - mappedArr[arrElem.data.id] = arrElem; - mappedArr[arrElem.data.id].children = []; - } - - for (const id of Object.keys(mappedArr)) { - var mappedElem = mappedArr[id]; - - // If the element is not at the root level, add it to its parent array of children. - if (mappedElem.data.parent) { - mappedArr[mappedElem.data.parent].children.push(mappedElem); - } - // If the element is at the root level, add it to first level elements array. - else { - tree.push(mappedElem); - } - } - return tree; - }; - - //Makes sure that edge is compatible with edges in shared document - edgeInitializer (params) { - var edge: any = {}; - edge.id = params.id || this.getCustomObjId(); - edge.type = params.type || "undefined"; - edge.source = params.source || "undefined"; - edge.target = params.target || "undefined"; - edge.name = params.name || ""; - edge.isHighlighted = params.isHighlighted || false; - edge.anchorPoints = params.anchorPoints || []; - edge.edgeCurveStyle = params.edgeCurveStyle || "bezier" - - if (params.pubmedIDs) { - if (edge.pubmedIDs == undefined) { - edge.pubmedIDs = []; - } - if(params.pubmedIDs.length > 0) - edge.pubmedIDs.push(params.pubmedIDs); - } - else { - edge.pubmedIDs = []; - } - - if (params.anchorPoints) { - if (edge.anchorPoints == undefined) { - edge.anchorPoints = []; - } - // legacy workaround - if (Array.isArray(params.anchorPoints[0])) { - edge.anchorPoints = params.anchorPoints[0]; - } - else { - edge.anchorPoints = params.anchorPoints; - } - } - else { - edge.anchorPoints = []; - } - return edge; - }; - - //Makes sure that node is compatible with nodes in shared document - nodeInitializer(params) { - var node: any = {}; - node.id = params.id || this.getCustomObjId(); - node.name = params.name || "undefined"; - node.type = params.type || "undefined"; - node.parent = params.parent || "undefined"; - node.x = params.x || "undefined"; - node.y = params.y || "undefined"; - node.w = params.w || "undefined"; - node.h = params.h || "undefined"; - node.minWidth = params.minWidth || 0; - node.minWidthBiasLeft = params.minWidth || 0; - node.minWidthBiasRight = params.minWidth || 0; - node.minHeight = params.minWidth || 0; - node.minHeightBiasTop = params.minWidth || 0; - node.minHeightBiasBottom = params.minWidth || 0; - node.isHidden = params.isHidden || false; - node.isInvalidGene = params.isInvalidGene || false; - node.isHighlighted = params.isHighlighted || false; - return node; - }; - - //Makes sure that layout properties is compatible with layout properties in shared document - layoutPropertiesInitializer (params) { - var layoutProperties: any = {}; - layoutProperties.name = params.name || 'undefined'; - layoutProperties.nodeRepulsion = params.nodeRepulsion || 'undefined'; - // this.nodeOverlap = params.nodeOverlap || 'undefined'; - layoutProperties.idealEdgeLength = params.idealEdgeLength || 'undefined'; - layoutProperties.edgeElasticity = params.edgeElasticity || 'undefined'; - layoutProperties.nestingFactor = params.nestingFactor || 'undefined'; - layoutProperties.gravity = params.gravity || 'undefined'; - layoutProperties.numIter = params.numIter || 'undefined'; - layoutProperties.tile = params.tile || 'undefined'; - layoutProperties.animate = params.animate || 'undefined'; - layoutProperties.randomize = params.randomize || false; - layoutProperties.gravityRangeCompound = params.gravityRangeCompound || 'undefined'; - layoutProperties.gravityCompound = params.gravityCompound || 'undefined'; - layoutProperties.gravityRange = params.gravityRange || 'undefined'; - layoutProperties.tilingPaddingVertical = params.tilingPaddingVertical || 'undefined'; - layoutProperties.tilingPaddingHorizontal = params.tilingPaddingHorizontal || 'undefined'; - layoutProperties.initialEnergyOnIncremental = params.initialEnergyOnIncremental || 'undefined'; - return layoutProperties; - }; - - //Makes sure that global options is compatible with global options in shared document - globalOptionsInitializer (params) { - var globalOptions: any = {}; - globalOptions.zoomLevel = params.zoomLevel || 'undefined'; - globalOptions.panLevel = params.panLevel || 'undefined'; - return globalOptions; - }; - - //Create unique ID for elements - getCustomObjId () { - // see http://stackoverflow.com/a/8809472 - // we need to take care of our own IDs because the ones automatically generated by cytoscape (also UUID) - // don't comply with xsd:SID type that must not begin with a number - // Public Domain/MIT - var d = Date.now(); - if (typeof performance !== 'undefined' && typeof performance.now === 'function') { - d += performance.now(); //use high-precision timer if available - } - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = (d + Math.random() * 16) % 16 | 0; - d = Math.floor(d / 16); - return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); - }); - }; - - getParam (urlParam) { - const regExp = new RegExp(urlParam + '=(.*?)($|&)', 'g'); - let match: any = window.location.search.match(regExp); - if (match && match.length) { - match = match[0]; - match = match.replace(urlParam + '=', '').replace('&', ''); - } else { - match = null; - } - return match; - }; + for (const id of Object.keys(mappedArr)) { + var mappedElem = mappedArr[id]; + + // If the element is not at the root level, add it to its parent array of children. + if (mappedElem.data.parent) { + mappedArr[mappedElem.data.parent].children.push(mappedElem); + } + // If the element is at the root level, add it to first level elements array. + else { + tree.push(mappedElem); + } + } + return tree; + } + + //Makes sure that edge is compatible with edges in shared document + edgeInitializer(params) { + var edge: any = {}; + edge.id = params.id || this.getCustomObjId(); + edge.type = params.type || "undefined"; + edge.source = params.source || "undefined"; + edge.target = params.target || "undefined"; + edge.name = params.name || ""; + edge.isHighlighted = params.isHighlighted || false; + edge.anchorPoints = params.anchorPoints || []; + edge.edgeCurveStyle = params.edgeCurveStyle || "bezier"; + + if (params.pubmedIDs) { + if (edge.pubmedIDs == undefined) { + edge.pubmedIDs = []; + } + if (params.pubmedIDs.length > 0) edge.pubmedIDs.push(params.pubmedIDs); + } else { + edge.pubmedIDs = []; + } + if (params.anchorPoints) { + if (edge.anchorPoints == undefined) { + edge.anchorPoints = []; + } + // legacy workaround + if (Array.isArray(params.anchorPoints[0])) { + edge.anchorPoints = params.anchorPoints[0]; + } else { + edge.anchorPoints = params.anchorPoints; + } + } else { + edge.anchorPoints = []; + } + return edge; + } + + //Makes sure that node is compatible with nodes in shared document + nodeInitializer(params) { + var node: any = {}; + node.id = params.id || this.getCustomObjId(); + node.name = params.name || "undefined"; + node.type = params.type || "undefined"; + node.parent = params.parent || "undefined"; + node.x = params.x || "undefined"; + node.y = params.y || "undefined"; + node.w = params.w || "undefined"; + node.h = params.h || "undefined"; + node.minWidth = params.minWidth || 0; + node.minWidthBiasLeft = params.minWidth || 0; + node.minWidthBiasRight = params.minWidth || 0; + node.minHeight = params.minWidth || 0; + node.minHeightBiasTop = params.minWidth || 0; + node.minHeightBiasBottom = params.minWidth || 0; + node.isHidden = params.isHidden || false; + node.isInvalidGene = params.isInvalidGene || false; + node.isHighlighted = params.isHighlighted || false; + return node; + } + + //Makes sure that layout properties is compatible with layout properties in shared document + layoutPropertiesInitializer(params) { + var layoutProperties: any = {}; + layoutProperties.name = params.name || "undefined"; + layoutProperties.nodeRepulsion = params.nodeRepulsion || "undefined"; + // this.nodeOverlap = params.nodeOverlap || 'undefined'; + layoutProperties.idealEdgeLength = params.idealEdgeLength || "undefined"; + layoutProperties.edgeElasticity = params.edgeElasticity || "undefined"; + layoutProperties.nestingFactor = params.nestingFactor || "undefined"; + layoutProperties.gravity = params.gravity || "undefined"; + layoutProperties.numIter = params.numIter || "undefined"; + layoutProperties.tile = params.tile || "undefined"; + layoutProperties.animate = params.animate || "undefined"; + layoutProperties.randomize = params.randomize || false; + layoutProperties.gravityRangeCompound = + params.gravityRangeCompound || "undefined"; + layoutProperties.gravityCompound = params.gravityCompound || "undefined"; + layoutProperties.gravityRange = params.gravityRange || "undefined"; + layoutProperties.tilingPaddingVertical = + params.tilingPaddingVertical || "undefined"; + layoutProperties.tilingPaddingHorizontal = + params.tilingPaddingHorizontal || "undefined"; + layoutProperties.initialEnergyOnIncremental = + params.initialEnergyOnIncremental || "undefined"; + return layoutProperties; + } + + //Makes sure that global options is compatible with global options in shared document + globalOptionsInitializer(params) { + var globalOptions: any = {}; + globalOptions.zoomLevel = params.zoomLevel || "undefined"; + globalOptions.panLevel = params.panLevel || "undefined"; + return globalOptions; + } + + //Create unique ID for elements + getCustomObjId() { + // see http://stackoverflow.com/a/8809472 + // we need to take care of our own IDs because the ones automatically generated by cytoscape (also UUID) + // don't comply with xsd:SID type that must not begin with a number + // Public Domain/MIT + var d = Date.now(); + if ( + typeof performance !== "undefined" && + typeof performance.now === "function" + ) { + d += performance.now(); //use high-precision timer if available + } + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { + var r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c === "x" ? r : (r & 0x3) | 0x8).toString(16); + }); + } + + getParam(urlParam) { + const regExp = new RegExp(urlParam + "=(.*?)($|&)", "g"); + let match: any = window.location.search.match(regExp); + if (match && match.length) { + match = match[0]; + match = match.replace(urlParam + "=", "").replace("&", ""); + } else { + match = null; + } + return match; + } } diff --git a/packages/pathway-mapper/src/modals/StudyModal.tsx b/packages/pathway-mapper/src/modals/StudyModal.tsx index 012db115..6e4c1854 100644 --- a/packages/pathway-mapper/src/modals/StudyModal.tsx +++ b/packages/pathway-mapper/src/modals/StudyModal.tsx @@ -10,7 +10,6 @@ import { ListGroupItem, Modal, } from "react-bootstrap"; -import { toast } from "react-toastify"; import { EModalType, IDataTypeMetaData } from "../ui/react-pathway-mapper"; import CBioPortalAccessor from "../utils/CBioPortalAccessor"; @@ -183,26 +182,24 @@ export default class StudyModal extends React.Component { } } - getSelectedStudiesCount(){ + getSelectedStudiesCount() { let selectedStudiesCount = 0; - for (const study of Object.values(this.selectedStudies)) - { - for( const dataTypeOfStudy of Object.values( study.dataTypes ) ){ - selectedStudiesCount += dataTypeOfStudy.checked === true ? 1 : 0; - } + for (const study of Object.values(this.selectedStudies)) { + for (const dataTypeOfStudy of Object.values(study.dataTypes)) { + selectedStudiesCount += dataTypeOfStudy.checked === true ? 1 : 0; + } } return selectedStudiesCount; } - getCheckedDatas( dataTypes: { [dataType: string]: IDataTypeMetaData }){ + getCheckedDatas(dataTypes: { [dataType: string]: IDataTypeMetaData }) { let checkedDatasCount = 0; - for( const dataTypee of Object.values( dataTypes ) ){ - checkedDatasCount += dataTypee.checked === true ? 1 : 0; - } + for (const dataTypee of Object.values(dataTypes)) { + checkedDatasCount += dataTypee.checked === true ? 1 : 0; + } return checkedDatasCount; } - fetchStudy() { this.portalAccessor.getDataTypes().forEach((dataType) => { this.setDataTypeProperties(dataType, { @@ -258,7 +255,6 @@ export default class StudyModal extends React.Component { } render() { - return ( { )}
-
-

- Warning: At most six different data sets will be overlayed on the genes. You can toggle which ones are to be displayed via "Alteration %" {">"} "View Settings" menu. +

+

+ Warning: At most six different data sets will be overlayed + on the genes. You can toggle which ones are to be displayed via + "Alteration %" {">"} "View Settings" menu.

{ redirectedProfiles.forEach((redirectedProfile) => { this.addProfile(redirectedProfile); }); - this.editor.addPortalGenomicData(this.props.alterationData, this.editor.getEmptyGroupID()); + this.editor.addGenomicData(this.props.alterationData, true, this.editor.getEmptyGroupID()); } exists(profileId: string){ @@ -719,8 +719,8 @@ export class PathwayMapper extends React.Component { geneticProfileId: profileId, genes: genes }, - (data: any) => { - this.editor.addPortalGenomicData(data, this.editor.getEmptyGroupID()); + (genomicData: any) => { + this.editor.addGenomicData(genomicData, true, this.editor.getEmptyGroupID()); let visibilityObject = {}; visibilityObject[newProfile.profileId] = newProfile.enabled; this.editor.updateGenomicDataVisibility(visibilityObject); @@ -747,7 +747,7 @@ export class PathwayMapper extends React.Component { @autobind newMessageCallback( message : ChatMessageMetaData ){ this.chatMessages.push(message); - setTimeout(this.updateScroll,50); + setTimeout(this.updateScroll, 50); } @autobind @@ -755,7 +755,7 @@ export class PathwayMapper extends React.Component { this.calculateAlterationData(cBioAlterationData); this.editor.removeGenomicData(); - this.editor.addPortalGenomicData(this.alterationData, this.editor.getEmptyGroupID()); + this.editor.addGenomicData(this.alterationData, true, this.editor.getEmptyGroupID()); } @autobind @@ -948,28 +948,46 @@ export class PathwayMapper extends React.Component { } @autobind - editorHandler(editor, eh, undoRedoManager){ - + editorHandler(editor, eh, undoRedoManager) { this.setEditor(editor); this.gridOptionsManager = new GridOptionsManager(this.editor.cy); - this.viewOperationsManager = new ViewOperationsManager(this.editor, this.editor.cy); - this.pathwayActions.editorHandler(editor, eh, undoRedoManager, this.viewOperationsManager, this.gridOptionsManager); - - if(this.props.isCBioPortal){ - if(this.props.patientView){ - this.editor.addPortalGenomicData(this.patientData, this.editor.getEmptyGroupID()); - } - else if( this.props.groupComparisonView === true) { - this.editor.addPortalGenomicData(this.groupComparisonData, this.editor.getEmptyGroupID(), this.props.activeGroups); - } - else{ - this.editor.addPortalGenomicData(this.alterationData, this.editor.getEmptyGroupID()); + this.viewOperationsManager = new ViewOperationsManager( + this.editor, + this.editor.cy, + ); + this.pathwayActions.editorHandler( + editor, + eh, + undoRedoManager, + this.viewOperationsManager, + this.gridOptionsManager, + ); + + if (this.props.isCBioPortal) { + if (this.props.patientView) { + this.editor.addGenomicData( + this.patientData, + true, + this.editor.getEmptyGroupID(), + ); + } else if (this.props.groupComparisonView === true) { + this.editor.addGenomicData( + this.groupComparisonData, + true, + this.editor.getEmptyGroupID(), + this.props.activeGroups, + ); + } else { + this.editor.addGenomicData( + this.alterationData, + true, + this.editor.getEmptyGroupID(), + ); } } else { this.portalAccessor = new CBioPortalAccessor(); this.loadRedirectedPortalData(); } - } @autobind diff --git a/packages/pathway-mapper/src/utils/PathwayActions.ts b/packages/pathway-mapper/src/utils/PathwayActions.ts index 988d1581..d0015635 100644 --- a/packages/pathway-mapper/src/utils/PathwayActions.ts +++ b/packages/pathway-mapper/src/utils/PathwayActions.ts @@ -1,9 +1,8 @@ import autobind from "autobind-decorator"; import { action, computed, makeObservable, observable } from "mobx"; -import { toast } from "react-toastify"; import EditorActionsManager from "../managers/EditorActionsManager"; import FileOperationsManager, { - IPathwayInfo + IPathwayInfo, } from "../managers/FileOperationsManager"; import GridOptionsManager from "../managers/GridOptionsManager"; import ViewOperationsManager from "../managers/ViewOperationsManager"; @@ -11,7 +10,9 @@ import ConfirmationModal from "../modals/ConfirmationModal"; import { EGridType } from "../modals/GridSettings"; import { ILayoutProperties } from "../modals/LayoutProperties"; import { - EModalType, IPathwayData, IProfileMetaData + EModalType, + IPathwayData, + IProfileMetaData, } from "../ui/react-pathway-mapper"; import SaveLoadUtility from "./SaveLoadUtility"; @@ -37,7 +38,7 @@ export default class PathwayActions { @observable enabledType: EGridType; - private updatePathwayTitle :(string) => void; + private updatePathwayTitle: (string) => void; constructor( pathwayHandler: (pathwayName: string) => void, @@ -74,9 +75,8 @@ export default class PathwayActions { const nodeType = node.data().type; if (queryGenes.includes(nodeName) && nodeType === "GENE") { node.style({ "border-width": "4px", "font-weight": "bold" }); - } - else{ - node.style({"border-width": "2px", "font-weight": "normal"}); + } else { + node.style({ "border-width": "2px", "font-weight": "normal" }); } }); } @@ -147,13 +147,13 @@ export default class PathwayActions { const linesOfData = request.responseText.split("\n"); if (linesOfData.length > 0) { const profileIdsFromFile = linesOfData[0].split("\t").slice(1); - profileIdsFromFile.forEach(id => + profileIdsFromFile.forEach((id) => this.addProfile({ profileId: id, enabled: true }) ); } else { console.log("Error: No valid data"); } - this.editor.addGenomicData(request.responseText); + this.editor.addGenomicData(request.responseText, false); } }; request.open("POST", "/loadGraph"); @@ -225,7 +225,7 @@ export default class PathwayActions { this.editor.removeAllElements(); this.fileManager.setPathwayInfo({ pathwayTitle: "New Pathway", - pathwayDetails: "" + pathwayDetails: "", }); //this.removeAllData() this.resetUndoStack(); @@ -240,9 +240,9 @@ export default class PathwayActions { } } -changePathwayTitle(pathwayTitle : string){ - this.updatePathwayTitle( pathwayTitle); -} + changePathwayTitle(pathwayTitle: string) { + this.updatePathwayTitle(pathwayTitle); + } @autobind changePathway(pathwayName: string) { @@ -317,12 +317,12 @@ changePathwayTitle(pathwayTitle : string){ type: nodeType.toUpperCase(), name: "New " + nodeType, w: "150", - h: "52" + h: "52", }; const extent = this.editor.cy.extent(); const posData = { x: (extent.x1 + extent.x2) / 2, - y: (extent.y1 + extent.y2) / 2 + y: (extent.y1 + extent.y2) / 2, }; this.editor.addNode(nodeData, posData); @@ -382,7 +382,7 @@ changePathwayTitle(pathwayTitle : string){ this.editor.loadFile(pathwayData.nodes, pathwayData.edges); this.fileManager.setPathwayInfo({ pathwayTitle: pathwayData.title, - pathwayDetails: pathwayData.description + pathwayDetails: pathwayData.description, }); } @@ -428,11 +428,10 @@ changePathwayTitle(pathwayTitle : string){ } @autobind - exists(profileId: string){ - + exists(profileId: string) { let exists = false; this.profiles.forEach((profile: IProfileMetaData) => { - if(profile.profileId === profileId){ + if (profile.profileId === profileId) { exists = true; } }); @@ -454,18 +453,30 @@ changePathwayTitle(pathwayTitle : string){ "AKT3\t6\t-3\t20\n" + "\n"; - if (this.exists("lung") || this.exists("ovarian") || this.exists("breast")) { + if ( + this.exists("lung") || + this.exists("ovarian") || + this.exists("breast") + ) { return; - } + } - this.editor.addGenomicData(data); + this.editor.addGenomicData(data, false); if (!this.isCollaborative) { - this.addProfile({ profileId: "lung", enabled: this.profiles.length < 6 ? true : false }); - this.addProfile({ profileId: "ovarian", enabled: this.profiles.length < 6 ? true : false }); - this.addProfile({ profileId: "breast", enabled: this.profiles.length < 6 ? true : false }); + this.addProfile({ + profileId: "lung", + enabled: this.profiles.length < 6 ? true : false, + }); + this.addProfile({ + profileId: "ovarian", + enabled: this.profiles.length < 6 ? true : false, + }); + this.addProfile({ + profileId: "breast", + enabled: this.profiles.length < 6 ? true : false, + }); } - } @autobind diff --git a/yarn.lock b/yarn.lock index e72d99d4..5362e837 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5436,16 +5436,18 @@ cytoscape-edgehandles@^3.5.1: convex-minkowski-sum "^1.0.0" d3-delaunay "^5.3.0" -cytoscape-navigator@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/cytoscape-navigator/-/cytoscape-navigator-2.0.2.tgz#4f839797ff05d921be3f22b26c5f237c730f0996" - integrity sha512-TZFBLFWEMW858UOt4rzusOjtDj7YT5vNx2uCwpUuicUYbaWCHHcUROBZWO+hiuSPWpVhvGLFlOq3NBcAVYOAgw== +cytoscape-navigator@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/cytoscape-navigator/-/cytoscape-navigator-1.3.3.tgz#94109951f87f0a0c131693ea91b3da66c9e80686" + integrity sha512-OngSzPm/3p/8toTaVS8FROp51ymVB/IAfnEMaXX0escKlRK+h7XWrHhdDVI6rvSAKdVjYIa4LZ7vNi3kDRhT4w== + dependencies: + jquery "^2.0.0 || ^1.4.0" "cytoscape-node-editing@github:iVis-at-Bilkent/cytoscape.js-node-editing#unstable": version "3.2.1" resolved "https://codeload.github.com/iVis-at-Bilkent/cytoscape.js-node-editing/tar.gz/2ea4f63a0da8f13b5e7462d2380e48964d9c042f" -cytoscape-panzoom@~2.5.3: +cytoscape-panzoom@~2.5.2: version "2.5.3" resolved "https://registry.yarnpkg.com/cytoscape-panzoom/-/cytoscape-panzoom-2.5.3.tgz#edf041b5aa8be1cbe3c001f16a8b2193b46127a7" integrity sha512-//qLOqbbFUCGddarNKHDZArItOJHgnkQ1TvxI9nV2/8aOOl/5wuEOHmra3fL/aWSjB4AYpYTG4LX7w96uWfRTQ== @@ -9916,6 +9918,11 @@ jquery-ui-dist@^1.12.1: resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== +"jquery@^2.0.0 || ^1.4.0": + version "2.2.4" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02" + integrity sha512-lBHj60ezci2u1v2FqnZIraShGgEXq35qCzMv4lITyHGppTnA13rwR0MgwyNJh9TnDs3aXUvd1xjAotfraMHX/Q== + jquery@^3.0.0, jquery@^3.2.1: version "3.5.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5"