Version Description
Download this release
Release Info
Developer | mihche |
Plugin | WPBruiser {no- Captcha anti-Spam} |
Version | 3.1.19 |
Comparing to | |
See all releases |
Code changes from version 3.1.18 to 3.1.19
- 3.0.14/assets/admin/images/affiliatewp-logo-128x128.png +0 -0
- 3.0.14/assets/admin/images/country-blocking-128x128.png +0 -0
- 3.0.14/assets/admin/images/favicon.png +0 -0
- 3.0.14/assets/admin/images/flags/ad.gif +0 -0
- 3.0.14/assets/admin/images/flags/ae.gif +0 -0
- 3.0.14/assets/admin/images/flags/af.gif +0 -0
- 3.0.14/assets/admin/images/flags/ag.gif +0 -0
- 3.0.14/assets/admin/images/flags/ai.gif +0 -0
- 3.0.14/assets/admin/images/flags/al.gif +0 -0
- 3.0.14/assets/admin/images/flags/am.gif +0 -0
- 3.0.14/assets/admin/images/flags/an.gif +0 -0
- 3.0.14/assets/admin/images/flags/ao.gif +0 -0
- 3.0.14/assets/admin/images/flags/aq.gif +0 -0
- 3.0.14/assets/admin/images/flags/ar.gif +0 -0
- 3.0.14/assets/admin/images/flags/as.gif +0 -0
- 3.0.14/assets/admin/images/flags/at.gif +0 -0
- 3.0.14/assets/admin/images/flags/au.gif +0 -0
- 3.0.14/assets/admin/images/flags/aw.gif +0 -0
- 3.0.14/assets/admin/images/flags/ax.gif +0 -0
- 3.0.14/assets/admin/images/flags/az.gif +0 -0
- 3.0.14/assets/admin/images/flags/ba.gif +0 -0
- 3.0.14/assets/admin/images/flags/bb.gif +0 -0
- 3.0.14/assets/admin/images/flags/bd.gif +0 -0
- 3.0.14/assets/admin/images/flags/be.gif +0 -0
- 3.0.14/assets/admin/images/flags/bf.gif +0 -0
- 3.0.14/assets/admin/images/flags/bg.gif +0 -0
- 3.0.14/assets/admin/images/flags/bh.gif +0 -0
- 3.0.14/assets/admin/images/flags/bi.gif +0 -0
- 3.0.14/assets/admin/images/flags/bj.gif +0 -0
- 3.0.14/assets/admin/images/flags/bl.gif +0 -0
- 3.0.14/assets/admin/images/flags/bm.gif +0 -0
- 3.0.14/assets/admin/images/flags/bn.gif +0 -0
- 3.0.14/assets/admin/images/flags/bo.gif +0 -0
- 3.0.14/assets/admin/images/flags/br.gif +0 -0
- 3.0.14/assets/admin/images/flags/bs.gif +0 -0
- 3.0.14/assets/admin/images/flags/bt.gif +0 -0
- 3.0.14/assets/admin/images/flags/bv.gif +0 -0
- 3.0.14/assets/admin/images/flags/bw.gif +0 -0
- 3.0.14/assets/admin/images/flags/by.gif +0 -0
- 3.0.14/assets/admin/images/flags/bz.gif +0 -0
- 3.0.14/assets/admin/images/flags/ca.gif +0 -0
- 3.0.14/assets/admin/images/flags/catalonia.gif +0 -0
- 3.0.14/assets/admin/images/flags/cc.gif +0 -0
- 3.0.14/assets/admin/images/flags/cd.gif +0 -0
- 3.0.14/assets/admin/images/flags/cf.gif +0 -0
- 3.0.14/assets/admin/images/flags/cg.gif +0 -0
- 3.0.14/assets/admin/images/flags/ch.gif +0 -0
- 3.0.14/assets/admin/images/flags/ci.gif +0 -0
- 3.0.14/assets/admin/images/flags/ck.gif +0 -0
- 3.0.14/assets/admin/images/flags/cl.gif +0 -0
- 3.0.14/assets/admin/images/flags/cm.gif +0 -0
- 3.0.14/assets/admin/images/flags/cn.gif +0 -0
- 3.0.14/assets/admin/images/flags/co.gif +0 -0
- 3.0.14/assets/admin/images/flags/cr.gif +0 -0
- 3.0.14/assets/admin/images/flags/cs.gif +0 -0
- 3.0.14/assets/admin/images/flags/cu.gif +0 -0
- 3.0.14/assets/admin/images/flags/cv.gif +0 -0
- 3.0.14/assets/admin/images/flags/cx.gif +0 -0
- 3.0.14/assets/admin/images/flags/cy.gif +0 -0
- 3.0.14/assets/admin/images/flags/cz.gif +0 -0
- 3.0.14/assets/admin/images/flags/de.gif +0 -0
- 3.0.14/assets/admin/images/flags/dj.gif +0 -0
- 3.0.14/assets/admin/images/flags/dk.gif +0 -0
- 3.0.14/assets/admin/images/flags/dm.gif +0 -0
- 3.0.14/assets/admin/images/flags/do.gif +0 -0
- 3.0.14/assets/admin/images/flags/dz.gif +0 -0
- 3.0.14/assets/admin/images/flags/ec.gif +0 -0
- 3.0.14/assets/admin/images/flags/ee.gif +0 -0
- 3.0.14/assets/admin/images/flags/eg.gif +0 -0
- 3.0.14/assets/admin/images/flags/eh.gif +0 -0
- 3.0.14/assets/admin/images/flags/england.gif +0 -0
- 3.0.14/assets/admin/images/flags/er.gif +0 -0
- 3.0.14/assets/admin/images/flags/es.gif +0 -0
- 3.0.14/assets/admin/images/flags/et.gif +0 -0
- 3.0.14/assets/admin/images/flags/eu.gif +0 -0
- 3.0.14/assets/admin/images/flags/fam.gif +0 -0
- 3.0.14/assets/admin/images/flags/fi.gif +0 -0
- 3.0.14/assets/admin/images/flags/fj.gif +0 -0
- 3.0.14/assets/admin/images/flags/fk.gif +0 -0
- 3.0.14/assets/admin/images/flags/fm.gif +0 -0
- 3.0.14/assets/admin/images/flags/fo.gif +0 -0
- 3.0.14/assets/admin/images/flags/fr.gif +0 -0
- 3.0.14/assets/admin/images/flags/ga.gif +0 -0
- 3.0.14/assets/admin/images/flags/gb.gif +0 -0
- 3.0.14/assets/admin/images/flags/gd.gif +0 -0
- 3.0.14/assets/admin/images/flags/ge.gif +0 -0
- 3.0.14/assets/admin/images/flags/gf.gif +0 -0
- 3.0.14/assets/admin/images/flags/gg.gif +0 -0
- 3.0.14/assets/admin/images/flags/gh.gif +0 -0
- 3.0.14/assets/admin/images/flags/gi.gif +0 -0
- 3.0.14/assets/admin/images/flags/gl.gif +0 -0
- 3.0.14/assets/admin/images/flags/gm.gif +0 -0
- 3.0.14/assets/admin/images/flags/gn.gif +0 -0
- 3.0.14/assets/admin/images/flags/gp.gif +0 -0
- 3.0.14/assets/admin/images/flags/gq.gif +0 -0
- 3.0.14/assets/admin/images/flags/gr.gif +0 -0
- 3.0.14/assets/admin/images/flags/gs.gif +0 -0
- 3.0.14/assets/admin/images/flags/gt.gif +0 -0
- 3.0.14/assets/admin/images/flags/gu.gif +0 -0
- 3.0.14/assets/admin/images/flags/gw.gif +0 -0
- 3.0.14/assets/admin/images/flags/gy.gif +0 -0
- 3.0.14/assets/admin/images/flags/hk.gif +0 -0
- 3.0.14/assets/admin/images/flags/hm.gif +0 -0
- 3.0.14/assets/admin/images/flags/hn.gif +0 -0
- 3.0.14/assets/admin/images/flags/hr.gif +0 -0
- 3.0.14/assets/admin/images/flags/ht.gif +0 -0
- 3.0.14/assets/admin/images/flags/hu.gif +0 -0
- 3.0.14/assets/admin/images/flags/id.gif +0 -0
- 3.0.14/assets/admin/images/flags/ie.gif +0 -0
- 3.0.14/assets/admin/images/flags/il.gif +0 -0
- 3.0.14/assets/admin/images/flags/im.gif +0 -0
- 3.0.14/assets/admin/images/flags/in.gif +0 -0
- 3.0.14/assets/admin/images/flags/io.gif +0 -0
- 3.0.14/assets/admin/images/flags/iq.gif +0 -0
- 3.0.14/assets/admin/images/flags/ir.gif +0 -0
- 3.0.14/assets/admin/images/flags/is.gif +0 -0
- 3.0.14/assets/admin/images/flags/it.gif +0 -0
- 3.0.14/assets/admin/images/flags/je.gif +0 -0
- 3.0.14/assets/admin/images/flags/jm.gif +0 -0
- 3.0.14/assets/admin/images/flags/jo.gif +0 -0
- 3.0.14/assets/admin/images/flags/jp.gif +0 -0
- 3.0.14/assets/admin/images/flags/ke.gif +0 -0
- 3.0.14/assets/admin/images/flags/kg.gif +0 -0
- 3.0.14/assets/admin/images/flags/kh.gif +0 -0
- 3.0.14/assets/admin/images/flags/ki.gif +0 -0
- 3.0.14/assets/admin/images/flags/km.gif +0 -0
- 3.0.14/assets/admin/images/flags/kn.gif +0 -0
- 3.0.14/assets/admin/images/flags/kp.gif +0 -0
- 3.0.14/assets/admin/images/flags/kr.gif +0 -0
- 3.0.14/assets/admin/images/flags/kw.gif +0 -0
- 3.0.14/assets/admin/images/flags/ky.gif +0 -0
- 3.0.14/assets/admin/images/flags/kz.gif +0 -0
- 3.0.14/assets/admin/images/flags/la.gif +0 -0
- 3.0.14/assets/admin/images/flags/lb.gif +0 -0
- 3.0.14/assets/admin/images/flags/lc.gif +0 -0
- 3.0.14/assets/admin/images/flags/li.gif +0 -0
- 3.0.14/assets/admin/images/flags/lk.gif +0 -0
- 3.0.14/assets/admin/images/flags/lr.gif +0 -0
- 3.0.14/assets/admin/images/flags/ls.gif +0 -0
- 3.0.14/assets/admin/images/flags/lt.gif +0 -0
- 3.0.14/assets/admin/images/flags/lu.gif +0 -0
- 3.0.14/assets/admin/images/flags/lv.gif +0 -0
- 3.0.14/assets/admin/images/flags/ly.gif +0 -0
- 3.0.14/assets/admin/images/flags/ma.gif +0 -0
- 3.0.14/assets/admin/images/flags/mc.gif +0 -0
- 3.0.14/assets/admin/images/flags/md.gif +0 -0
- 3.0.14/assets/admin/images/flags/me.gif +0 -0
- 3.0.14/assets/admin/images/flags/mf.gif +0 -0
- 3.0.14/assets/admin/images/flags/mg.gif +0 -0
- 3.0.14/assets/admin/images/flags/mh.gif +0 -0
- 3.0.14/assets/admin/images/flags/mk.gif +0 -0
- 3.0.14/assets/admin/images/flags/ml.gif +0 -0
- 3.0.14/assets/admin/images/flags/mm.gif +0 -0
- 3.0.14/assets/admin/images/flags/mn.gif +0 -0
- 3.0.14/assets/admin/images/flags/mo.gif +0 -0
- 3.0.14/assets/admin/images/flags/mp.gif +0 -0
- 3.0.14/assets/admin/images/flags/mq.gif +0 -0
- 3.0.14/assets/admin/images/flags/mr.gif +0 -0
- 3.0.14/assets/admin/images/flags/ms.gif +0 -0
- 3.0.14/assets/admin/images/flags/mt.gif +0 -0
- 3.0.14/assets/admin/images/flags/mu.gif +0 -0
- 3.0.14/assets/admin/images/flags/mv.gif +0 -0
- 3.0.14/assets/admin/images/flags/mw.gif +0 -0
- 3.0.14/assets/admin/images/flags/mx.gif +0 -0
- 3.0.14/assets/admin/images/flags/my.gif +0 -0
- 3.0.14/assets/admin/images/flags/mz.gif +0 -0
- 3.0.14/assets/admin/images/flags/na.gif +0 -0
- 3.0.14/assets/admin/images/flags/nc.gif +0 -0
- 3.0.14/assets/admin/images/flags/ne.gif +0 -0
- 3.0.14/assets/admin/images/flags/nf.gif +0 -0
- 3.0.14/assets/admin/images/flags/ng.gif +0 -0
- 3.0.14/assets/admin/images/flags/ni.gif +0 -0
- 3.0.14/assets/admin/images/flags/nl.gif +0 -0
- 3.0.14/assets/admin/images/flags/no.gif +0 -0
- 3.0.14/assets/admin/images/flags/np.gif +0 -0
- 3.0.14/assets/admin/images/flags/nr.gif +0 -0
- 3.0.14/assets/admin/images/flags/nu.gif +0 -0
- 3.0.14/assets/admin/images/flags/nz.gif +0 -0
- 3.0.14/assets/admin/images/flags/om.gif +0 -0
- 3.0.14/assets/admin/images/flags/pa.gif +0 -0
- 3.0.14/assets/admin/images/flags/pe.gif +0 -0
- 3.0.14/assets/admin/images/flags/pf.gif +0 -0
- 3.0.14/assets/admin/images/flags/pg.gif +0 -0
- 3.0.14/assets/admin/images/flags/ph.gif +0 -0
- 3.0.14/assets/admin/images/flags/pk.gif +0 -0
- 3.0.14/assets/admin/images/flags/pl.gif +0 -0
- 3.0.14/assets/admin/images/flags/pm.gif +0 -0
- 3.0.14/assets/admin/images/flags/pn.gif +0 -0
- 3.0.14/assets/admin/images/flags/pr.gif +0 -0
- 3.0.14/assets/admin/images/flags/ps.gif +0 -0
- 3.0.14/assets/admin/images/flags/pt.gif +0 -0
- 3.0.14/assets/admin/images/flags/pw.gif +0 -0
- 3.0.14/assets/admin/images/flags/py.gif +0 -0
- 3.0.14/assets/admin/images/flags/qa.gif +0 -0
- 3.0.14/assets/admin/images/flags/re.gif +0 -0
- 3.0.14/assets/admin/images/flags/ro.gif +0 -0
- 3.0.14/assets/admin/images/flags/rs.gif +0 -0
- 3.0.14/assets/admin/images/flags/ru.gif +0 -0
- 3.0.14/assets/admin/images/flags/rw.gif +0 -0
- 3.0.14/assets/admin/images/flags/sa.gif +0 -0
- 3.0.14/assets/admin/images/flags/sb.gif +0 -0
- 3.0.14/assets/admin/images/flags/sc.gif +0 -0
- 3.0.14/assets/admin/images/flags/scotland.gif +0 -0
- 3.0.14/assets/admin/images/flags/sd.gif +0 -0
- 3.0.14/assets/admin/images/flags/se.gif +0 -0
- 3.0.14/assets/admin/images/flags/sg.gif +0 -0
- 3.0.14/assets/admin/images/flags/sh.gif +0 -0
- 3.0.14/assets/admin/images/flags/si.gif +0 -0
- 3.0.14/assets/admin/images/flags/sj.gif +0 -0
- 3.0.14/assets/admin/images/flags/sk.gif +0 -0
- 3.0.14/assets/admin/images/flags/sl.gif +0 -0
- 3.0.14/assets/admin/images/flags/sm.gif +0 -0
- 3.0.14/assets/admin/images/flags/sn.gif +0 -0
- 3.0.14/assets/admin/images/flags/so.gif +0 -0
- 3.0.14/assets/admin/images/flags/sr.gif +0 -0
- 3.0.14/assets/admin/images/flags/st.gif +0 -0
- 3.0.14/assets/admin/images/flags/sv.gif +0 -0
- 3.0.14/assets/admin/images/flags/sy.gif +0 -0
- 3.0.14/assets/admin/images/flags/sz.gif +0 -0
- 3.0.14/assets/admin/images/flags/tc.gif +0 -0
- 3.0.14/assets/admin/images/flags/td.gif +0 -0
- 3.0.14/assets/admin/images/flags/tf.gif +0 -0
- 3.0.14/assets/admin/images/flags/tg.gif +0 -0
- 3.0.14/assets/admin/images/flags/th.gif +0 -0
- 3.0.14/assets/admin/images/flags/tj.gif +0 -0
- 3.0.14/assets/admin/images/flags/tk.gif +0 -0
- 3.0.14/assets/admin/images/flags/tl.gif +0 -0
- 3.0.14/assets/admin/images/flags/tm.gif +0 -0
- 3.0.14/assets/admin/images/flags/tn.gif +0 -0
- 3.0.14/assets/admin/images/flags/to.gif +0 -0
- 3.0.14/assets/admin/images/flags/tr.gif +0 -0
- 3.0.14/assets/admin/images/flags/tt.gif +0 -0
- 3.0.14/assets/admin/images/flags/tv.gif +0 -0
- 3.0.14/assets/admin/images/flags/tw.gif +0 -0
- 3.0.14/assets/admin/images/flags/tz.gif +0 -0
- 3.0.14/assets/admin/images/flags/ua.gif +0 -0
- 3.0.14/assets/admin/images/flags/ug.gif +0 -0
- 3.0.14/assets/admin/images/flags/um.gif +0 -0
- 3.0.14/assets/admin/images/flags/us.gif +0 -0
- 3.0.14/assets/admin/images/flags/uy.gif +0 -0
- 3.0.14/assets/admin/images/flags/uz.gif +0 -0
- 3.0.14/assets/admin/images/flags/va.gif +0 -0
- 3.0.14/assets/admin/images/flags/vc.gif +0 -0
- 3.0.14/assets/admin/images/flags/ve.gif +0 -0
- 3.0.14/assets/admin/images/flags/vg.gif +0 -0
- 3.0.14/assets/admin/images/flags/vi.gif +0 -0
- 3.0.14/assets/admin/images/flags/vn.gif +0 -0
- 3.0.14/assets/admin/images/flags/vu.gif +0 -0
- 3.0.14/assets/admin/images/flags/wales.gif +0 -0
- 3.0.14/assets/admin/images/flags/wf.gif +0 -0
- 3.0.14/assets/admin/images/flags/ws.gif +0 -0
- 3.0.14/assets/admin/images/flags/ye.gif +0 -0
- 3.0.14/assets/admin/images/flags/yt.gif +0 -0
- 3.0.14/assets/admin/images/flags/za.gif +0 -0
- 3.0.14/assets/admin/images/flags/zm.gif +0 -0
- 3.0.14/assets/admin/images/flags/zw.gif +0 -0
- 3.0.14/assets/admin/images/fscf-logo-128x128.png +0 -0
- 3.0.14/assets/admin/images/gdbc-favicon.png +0 -0
- 3.0.14/assets/admin/images/gdbc-logo.png +0 -0
- 3.0.14/assets/admin/images/gravity-forms-logo-128x128.png +0 -0
- 3.0.14/assets/admin/images/memberpress-logo-128x128.png +0 -0
- 3.0.14/assets/admin/images/ninja-forms-logo-128x128.png +0 -0
- 3.0.14/assets/admin/images/quform-logo-128x128.png +0 -0
- 3.0.14/assets/admin/images/upme-logo-128x128.png +0 -0
- 3.0.14/assets/admin/images/userpro-logo-128x128.png +0 -0
- 3.0.14/assets/admin/images/wpbr-logo.png +0 -0
- 3.0.14/assets/admin/scripts/bootstrap.min.js +1 -0
- 3.0.14/assets/admin/scripts/easy-pie-chart.js +359 -0
- 3.0.14/assets/admin/scripts/gdbc-admin.js +211 -0
- 3.0.14/assets/admin/scripts/gdbc-reports.js +828 -0
- 3.0.14/assets/admin/scripts/jquery-flot-tooltip.js +571 -0
- 3.0.14/assets/admin/scripts/jquery-flot.js +3601 -0
- 3.0.14/assets/admin/scripts/jquery-jvectormap-1.2.2.min.js +8 -0
- 3.0.14/assets/admin/scripts/jquery-jvectormap-world-mill-en.js +1 -0
- 3.0.14/assets/admin/scripts/morris.js +1892 -0
- 3.0.14/assets/admin/scripts/multiselect.min.js +10 -0
- 3.0.14/assets/admin/scripts/raphael.js +11 -0
- 3.0.14/assets/admin/styles/bootstrap.css +6174 -0
- 3.0.14/assets/admin/styles/fonts/glyphicons-halflings-regular.eot +0 -0
- 3.0.14/assets/admin/styles/fonts/glyphicons-halflings-regular.svg +229 -0
- 3.0.14/assets/admin/styles/fonts/glyphicons-halflings-regular.ttf +0 -0
- 3.0.14/assets/admin/styles/fonts/glyphicons-halflings-regular.woff +0 -0
- 3.0.14/assets/admin/styles/gdbc-admin.css +928 -0
- 3.0.14/assets/admin/styles/morris.css +2 -0
- 3.0.14/assets/public/scripts/gdbc-client-new.js.php +144 -0
- 3.0.14/assets/public/scripts/gdbc-client.js.php +84 -0
- 3.0.14/assets/public/scripts/gdbc-public.js +33 -0
- 3.0.14/assets/public/scripts/gdbc-refresh-tokens.js +1 -0
- 3.0.14/assets/public/scripts/index.php +1 -0
- 3.0.14/engine/GdbcAjaxController.php +198 -0
- 3.0.14/engine/GdbcBruteGuardian.php +237 -0
- 3.0.14/engine/GdbcIPUtils.php +431 -0
- 3.0.14/engine/GdbcModulesController.php +754 -0
- 3.0.14/engine/GdbcNotificationsController.php +154 -0
- 3.0.14/engine/GdbcRequestController.php +294 -0
- 3.0.14/engine/GdbcTaskScheduler.php +58 -0
- 3.0.14/engine/GdbcUpdatesController.php +360 -0
- 3.0.14/engine/GoodByeCaptchaAdmin.php +376 -0
- 3.0.14/engine/GoodByeCaptchaPublic.php +135 -0
- 3.0.14/engine/GoodByeCaptchaUtils.php +685 -0
- 3.0.14/engine/admin/GdbcAdminNotice.php +33 -0
- 3.0.14/engine/admin/pages/GdbcBaseAdminPage.php +400 -0
- 3.0.14/engine/admin/pages/GdbcContactFormsAdminPage.php +58 -0
- 3.0.14/engine/admin/pages/GdbcECommerceAdminPage.php +42 -0
- 3.0.14/engine/admin/pages/GdbcExtensionsAdminPage.php +54 -0
- 3.0.14/engine/admin/pages/GdbcLicensesAdminPage.php +39 -0
- 3.0.14/engine/admin/pages/GdbcMembershipAdminPage.php +53 -0
- 3.0.14/engine/admin/pages/GdbcNotificationsAdminPage.php +41 -0
- 3.0.14/engine/admin/pages/GdbcOthersAdminPage.php +29 -0
3.0.14/assets/admin/images/affiliatewp-logo-128x128.png
ADDED
Binary file
|
3.0.14/assets/admin/images/country-blocking-128x128.png
ADDED
Binary file
|
3.0.14/assets/admin/images/favicon.png
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ad.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ae.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/af.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ag.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ai.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/al.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/am.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/an.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ao.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/aq.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ar.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/as.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/at.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/au.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/aw.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ax.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/az.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ba.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bb.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bd.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/be.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bf.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bg.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bh.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bi.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bj.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bl.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bn.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bo.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/br.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bs.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bt.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bv.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bw.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/by.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/bz.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ca.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/catalonia.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cc.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cd.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cf.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cg.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ch.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ci.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ck.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cl.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cn.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/co.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cr.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cs.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cu.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cv.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cx.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cy.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/cz.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/de.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/dj.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/dk.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/dm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/do.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/dz.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ec.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ee.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/eg.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/eh.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/england.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/er.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/es.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/et.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/eu.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/fam.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/fi.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/fj.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/fk.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/fm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/fo.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/fr.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ga.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gb.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gd.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ge.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gf.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gg.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gh.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gi.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gl.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gn.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gp.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gq.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gr.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gs.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gt.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gu.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gw.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/gy.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/hk.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/hm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/hn.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/hr.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ht.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/hu.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/id.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ie.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/il.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/im.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/in.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/io.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/iq.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ir.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/is.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/it.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/je.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/jm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/jo.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/jp.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ke.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/kg.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/kh.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ki.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/km.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/kn.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/kp.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/kr.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/kw.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ky.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/kz.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/la.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/lb.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/lc.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/li.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/lk.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/lr.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ls.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/lt.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/lu.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/lv.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ly.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ma.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mc.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/md.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/me.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mf.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mg.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mh.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mk.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ml.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mn.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mo.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mp.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mq.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mr.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ms.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mt.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mu.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mv.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mw.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mx.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/my.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/mz.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/na.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/nc.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ne.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/nf.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ng.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ni.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/nl.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/no.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/np.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/nr.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/nu.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/nz.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/om.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/pa.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/pe.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/pf.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/pg.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ph.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/pk.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/pl.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/pm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/pn.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/pr.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ps.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/pt.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/pw.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/py.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/qa.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/re.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ro.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/rs.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ru.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/rw.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sa.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sb.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sc.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/scotland.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sd.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/se.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sg.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sh.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/si.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sj.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sk.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sl.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sn.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/so.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sr.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/st.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sv.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sy.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/sz.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tc.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/td.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tf.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tg.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/th.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tj.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tk.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tl.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tn.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/to.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tr.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tt.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tv.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tw.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/tz.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ua.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ug.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/um.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/us.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/uy.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/uz.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/va.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/vc.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ve.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/vg.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/vi.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/vn.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/vu.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/wales.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/wf.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ws.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/ye.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/yt.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/za.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/zm.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/flags/zw.gif
ADDED
Binary file
|
3.0.14/assets/admin/images/fscf-logo-128x128.png
ADDED
Binary file
|
3.0.14/assets/admin/images/gdbc-favicon.png
ADDED
Binary file
|
3.0.14/assets/admin/images/gdbc-logo.png
ADDED
Binary file
|
3.0.14/assets/admin/images/gravity-forms-logo-128x128.png
ADDED
Binary file
|
3.0.14/assets/admin/images/memberpress-logo-128x128.png
ADDED
Binary file
|
3.0.14/assets/admin/images/ninja-forms-logo-128x128.png
ADDED
Binary file
|
3.0.14/assets/admin/images/quform-logo-128x128.png
ADDED
Binary file
|
3.0.14/assets/admin/images/upme-logo-128x128.png
ADDED
Binary file
|
3.0.14/assets/admin/images/userpro-logo-128x128.png
ADDED
Binary file
|
3.0.14/assets/admin/images/wpbr-logo.png
ADDED
Binary file
|
3.0.14/assets/admin/scripts/bootstrap.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
|
3.0.14/assets/admin/scripts/easy-pie-chart.js
ADDED
@@ -0,0 +1,359 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**!
|
2 |
+
* easyPieChart
|
3 |
+
* Lightweight plugin to render simple, animated and retina optimized pie charts
|
4 |
+
*
|
5 |
+
* @license
|
6 |
+
* @author Robert Fleischmann <rendro87@gmail.com> (http://robert-fleischmann.de)
|
7 |
+
* @version 2.1.5
|
8 |
+
**/
|
9 |
+
|
10 |
+
(function(root, factory) {
|
11 |
+
if(typeof exports === 'object') {
|
12 |
+
module.exports = factory(require('jquery'));
|
13 |
+
}
|
14 |
+
else if(typeof define === 'function' && define.amd) {
|
15 |
+
define(['jquery'], factory);
|
16 |
+
}
|
17 |
+
else {
|
18 |
+
factory(root.jQuery);
|
19 |
+
}
|
20 |
+
}(this, function($) {
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Renderer to render the chart on a canvas object
|
24 |
+
* @param {DOMElement} el DOM element to host the canvas (root of the plugin)
|
25 |
+
* @param {object} options options object of the plugin
|
26 |
+
*/
|
27 |
+
var CanvasRenderer = function(el, options) {
|
28 |
+
var cachedBackground;
|
29 |
+
var canvas = document.createElement('canvas');
|
30 |
+
|
31 |
+
el.appendChild(canvas);
|
32 |
+
|
33 |
+
if (typeof(G_vmlCanvasManager) !== 'undefined') {
|
34 |
+
G_vmlCanvasManager.initElement(canvas);
|
35 |
+
}
|
36 |
+
|
37 |
+
var ctx = canvas.getContext('2d');
|
38 |
+
|
39 |
+
canvas.width = canvas.height = options.size;
|
40 |
+
|
41 |
+
// canvas on retina devices
|
42 |
+
var scaleBy = 1;
|
43 |
+
if (window.devicePixelRatio > 1) {
|
44 |
+
scaleBy = window.devicePixelRatio;
|
45 |
+
canvas.style.width = canvas.style.height = [options.size, 'px'].join('');
|
46 |
+
canvas.width = canvas.height = options.size * scaleBy;
|
47 |
+
ctx.scale(scaleBy, scaleBy);
|
48 |
+
}
|
49 |
+
|
50 |
+
// move 0,0 coordinates to the center
|
51 |
+
ctx.translate(options.size / 2, options.size / 2);
|
52 |
+
|
53 |
+
// rotate canvas -90deg
|
54 |
+
ctx.rotate((-1 / 2 + options.rotate / 180) * Math.PI);
|
55 |
+
|
56 |
+
var radius = (options.size - options.lineWidth) / 2;
|
57 |
+
if (options.scaleColor && options.scaleLength) {
|
58 |
+
radius -= options.scaleLength + 2; // 2 is the distance between scale and bar
|
59 |
+
}
|
60 |
+
|
61 |
+
// IE polyfill for Date
|
62 |
+
Date.now = Date.now || function() {
|
63 |
+
return +(new Date());
|
64 |
+
};
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Draw a circle around the center of the canvas
|
68 |
+
* @param {strong} color Valid CSS color string
|
69 |
+
* @param {number} lineWidth Width of the line in px
|
70 |
+
* @param {number} percent Percentage to draw (float between -1 and 1)
|
71 |
+
*/
|
72 |
+
var drawCircle = function(color, lineWidth, percent) {
|
73 |
+
percent = Math.min(Math.max(-1, percent || 0), 1);
|
74 |
+
var isNegative = percent <= 0 ? true : false;
|
75 |
+
|
76 |
+
ctx.beginPath();
|
77 |
+
ctx.arc(0, 0, radius, 0, Math.PI * 2 * percent, isNegative);
|
78 |
+
|
79 |
+
ctx.strokeStyle = color;
|
80 |
+
ctx.lineWidth = lineWidth;
|
81 |
+
|
82 |
+
ctx.stroke();
|
83 |
+
};
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Draw the scale of the chart
|
87 |
+
*/
|
88 |
+
var drawScale = function() {
|
89 |
+
var offset;
|
90 |
+
var length;
|
91 |
+
|
92 |
+
ctx.lineWidth = 1;
|
93 |
+
ctx.fillStyle = options.scaleColor;
|
94 |
+
|
95 |
+
ctx.save();
|
96 |
+
for (var i = 24; i > 0; --i) {
|
97 |
+
if (i % 6 === 0) {
|
98 |
+
length = options.scaleLength;
|
99 |
+
offset = 0;
|
100 |
+
} else {
|
101 |
+
length = options.scaleLength * 0.6;
|
102 |
+
offset = options.scaleLength - length;
|
103 |
+
}
|
104 |
+
ctx.fillRect(-options.size/2 + offset, 0, length, 1);
|
105 |
+
ctx.rotate(Math.PI / 12);
|
106 |
+
}
|
107 |
+
ctx.restore();
|
108 |
+
};
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Request animation frame wrapper with polyfill
|
112 |
+
* @return {function} Request animation frame method or timeout fallback
|
113 |
+
*/
|
114 |
+
var reqAnimationFrame = (function() {
|
115 |
+
return window.requestAnimationFrame ||
|
116 |
+
window.webkitRequestAnimationFrame ||
|
117 |
+
window.mozRequestAnimationFrame ||
|
118 |
+
function(callback) {
|
119 |
+
window.setTimeout(callback, 1000 / 60);
|
120 |
+
};
|
121 |
+
}());
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Draw the background of the plugin including the scale and the track
|
125 |
+
*/
|
126 |
+
var drawBackground = function() {
|
127 |
+
if(options.scaleColor) drawScale();
|
128 |
+
if(options.trackColor) drawCircle(options.trackColor, options.lineWidth, 1);
|
129 |
+
};
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Canvas accessor
|
133 |
+
*/
|
134 |
+
this.getCanvas = function() {
|
135 |
+
return canvas;
|
136 |
+
};
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Canvas 2D context 'ctx' accessor
|
140 |
+
*/
|
141 |
+
this.getCtx = function() {
|
142 |
+
return ctx;
|
143 |
+
};
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Clear the complete canvas
|
147 |
+
*/
|
148 |
+
this.clear = function() {
|
149 |
+
ctx.clearRect(options.size / -2, options.size / -2, options.size, options.size);
|
150 |
+
};
|
151 |
+
|
152 |
+
/**
|
153 |
+
* Draw the complete chart
|
154 |
+
* @param {number} percent Percent shown by the chart between -100 and 100
|
155 |
+
*/
|
156 |
+
this.draw = function(percent) {
|
157 |
+
// do we need to render a background
|
158 |
+
if (!!options.scaleColor || !!options.trackColor) {
|
159 |
+
// getImageData and putImageData are supported
|
160 |
+
if (ctx.getImageData && ctx.putImageData) {
|
161 |
+
if (!cachedBackground) {
|
162 |
+
drawBackground();
|
163 |
+
cachedBackground = ctx.getImageData(0, 0, options.size * scaleBy, options.size * scaleBy);
|
164 |
+
} else {
|
165 |
+
ctx.putImageData(cachedBackground, 0, 0);
|
166 |
+
}
|
167 |
+
} else {
|
168 |
+
this.clear();
|
169 |
+
drawBackground();
|
170 |
+
}
|
171 |
+
} else {
|
172 |
+
this.clear();
|
173 |
+
}
|
174 |
+
|
175 |
+
ctx.lineCap = options.lineCap;
|
176 |
+
|
177 |
+
// if barcolor is a function execute it and pass the percent as a value
|
178 |
+
var color;
|
179 |
+
if (typeof(options.barColor) === 'function') {
|
180 |
+
color = options.barColor(percent);
|
181 |
+
} else {
|
182 |
+
color = options.barColor;
|
183 |
+
}
|
184 |
+
|
185 |
+
// draw bar
|
186 |
+
drawCircle(color, options.lineWidth, percent / 100);
|
187 |
+
}.bind(this);
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Animate from some percent to some other percentage
|
191 |
+
* @param {number} from Starting percentage
|
192 |
+
* @param {number} to Final percentage
|
193 |
+
*/
|
194 |
+
this.animate = function(from, to) {
|
195 |
+
var startTime = Date.now();
|
196 |
+
options.onStart(from, to);
|
197 |
+
var animation = function() {
|
198 |
+
var process = Math.min(Date.now() - startTime, options.animate.duration);
|
199 |
+
var currentValue = options.easing(this, process, from, to - from, options.animate.duration);
|
200 |
+
this.draw(currentValue);
|
201 |
+
options.onStep(from, to, currentValue);
|
202 |
+
if (process >= options.animate.duration) {
|
203 |
+
options.onStop(from, to);
|
204 |
+
} else {
|
205 |
+
reqAnimationFrame(animation);
|
206 |
+
}
|
207 |
+
}.bind(this);
|
208 |
+
|
209 |
+
reqAnimationFrame(animation);
|
210 |
+
}.bind(this);
|
211 |
+
};
|
212 |
+
|
213 |
+
var EasyPieChart = function(el, opts) {
|
214 |
+
var defaultOptions = {
|
215 |
+
barColor: '#ef1e25',
|
216 |
+
trackColor: '#f9f9f9',
|
217 |
+
scaleColor: '#dfe0e0',
|
218 |
+
scaleLength: 5,
|
219 |
+
lineCap: 'round',
|
220 |
+
lineWidth: 3,
|
221 |
+
size: 110,
|
222 |
+
rotate: 0,
|
223 |
+
animate: {
|
224 |
+
duration: 1000,
|
225 |
+
enabled: true
|
226 |
+
},
|
227 |
+
easing: function (x, t, b, c, d) { // more can be found here: http://gsgd.co.uk/sandbox/jquery/easing/
|
228 |
+
t = t / (d/2);
|
229 |
+
if (t < 1) {
|
230 |
+
return c / 2 * t * t + b;
|
231 |
+
}
|
232 |
+
return -c/2 * ((--t)*(t-2) - 1) + b;
|
233 |
+
},
|
234 |
+
onStart: function(from, to) {
|
235 |
+
return;
|
236 |
+
},
|
237 |
+
onStep: function(from, to, currentValue) {
|
238 |
+
return;
|
239 |
+
},
|
240 |
+
onStop: function(from, to) {
|
241 |
+
return;
|
242 |
+
}
|
243 |
+
};
|
244 |
+
|
245 |
+
// detect present renderer
|
246 |
+
if (typeof(CanvasRenderer) !== 'undefined') {
|
247 |
+
defaultOptions.renderer = CanvasRenderer;
|
248 |
+
} else if (typeof(SVGRenderer) !== 'undefined') {
|
249 |
+
defaultOptions.renderer = SVGRenderer;
|
250 |
+
} else {
|
251 |
+
throw new Error('Please load either the SVG- or the CanvasRenderer');
|
252 |
+
}
|
253 |
+
|
254 |
+
var options = {};
|
255 |
+
var currentValue = 0;
|
256 |
+
|
257 |
+
/**
|
258 |
+
* Initialize the plugin by creating the options object and initialize rendering
|
259 |
+
*/
|
260 |
+
var init = function() {
|
261 |
+
this.el = el;
|
262 |
+
this.options = options;
|
263 |
+
|
264 |
+
// merge user options into default options
|
265 |
+
for (var i in defaultOptions) {
|
266 |
+
if (defaultOptions.hasOwnProperty(i)) {
|
267 |
+
options[i] = opts && typeof(opts[i]) !== 'undefined' ? opts[i] : defaultOptions[i];
|
268 |
+
if (typeof(options[i]) === 'function') {
|
269 |
+
options[i] = options[i].bind(this);
|
270 |
+
}
|
271 |
+
}
|
272 |
+
}
|
273 |
+
|
274 |
+
// check for jQuery easing
|
275 |
+
if (typeof(options.easing) === 'string' && typeof(jQuery) !== 'undefined' && jQuery.isFunction(jQuery.easing[options.easing])) {
|
276 |
+
options.easing = jQuery.easing[options.easing];
|
277 |
+
} else {
|
278 |
+
options.easing = defaultOptions.easing;
|
279 |
+
}
|
280 |
+
|
281 |
+
// process earlier animate option to avoid bc breaks
|
282 |
+
if (typeof(options.animate) === 'number') {
|
283 |
+
options.animate = {
|
284 |
+
duration: options.animate,
|
285 |
+
enabled: true
|
286 |
+
};
|
287 |
+
}
|
288 |
+
|
289 |
+
if (typeof(options.animate) === 'boolean' && !options.animate) {
|
290 |
+
options.animate = {
|
291 |
+
duration: 1000,
|
292 |
+
enabled: options.animate
|
293 |
+
};
|
294 |
+
}
|
295 |
+
|
296 |
+
// create renderer
|
297 |
+
this.renderer = new options.renderer(el, options);
|
298 |
+
|
299 |
+
// initial draw
|
300 |
+
this.renderer.draw(currentValue);
|
301 |
+
|
302 |
+
// initial update
|
303 |
+
if (el.dataset && el.dataset.percent) {
|
304 |
+
this.update(parseFloat(el.dataset.percent));
|
305 |
+
} else if (el.getAttribute && el.getAttribute('data-percent')) {
|
306 |
+
this.update(parseFloat(el.getAttribute('data-percent')));
|
307 |
+
}
|
308 |
+
}.bind(this);
|
309 |
+
|
310 |
+
/**
|
311 |
+
* Update the value of the chart
|
312 |
+
* @param {number} newValue Number between 0 and 100
|
313 |
+
* @return {object} Instance of the plugin for method chaining
|
314 |
+
*/
|
315 |
+
this.update = function(newValue) {
|
316 |
+
newValue = parseFloat(newValue);
|
317 |
+
if (options.animate.enabled) {
|
318 |
+
this.renderer.animate(currentValue, newValue);
|
319 |
+
} else {
|
320 |
+
this.renderer.draw(newValue);
|
321 |
+
}
|
322 |
+
currentValue = newValue;
|
323 |
+
return this;
|
324 |
+
}.bind(this);
|
325 |
+
|
326 |
+
/**
|
327 |
+
* Disable animation
|
328 |
+
* @return {object} Instance of the plugin for method chaining
|
329 |
+
*/
|
330 |
+
this.disableAnimation = function() {
|
331 |
+
options.animate.enabled = false;
|
332 |
+
return this;
|
333 |
+
};
|
334 |
+
|
335 |
+
/**
|
336 |
+
* Enable animation
|
337 |
+
* @return {object} Instance of the plugin for method chaining
|
338 |
+
*/
|
339 |
+
this.enableAnimation = function() {
|
340 |
+
options.animate.enabled = true;
|
341 |
+
return this;
|
342 |
+
};
|
343 |
+
|
344 |
+
init();
|
345 |
+
};
|
346 |
+
|
347 |
+
$.fn.easyPieChart = function(options) {
|
348 |
+
return this.each(function() {
|
349 |
+
var instanceOptions;
|
350 |
+
|
351 |
+
if (!$.data(this, 'easyPieChart')) {
|
352 |
+
instanceOptions = $.extend({}, options, $(this).data());
|
353 |
+
$.data(this, 'easyPieChart', new EasyPieChart(this, instanceOptions));
|
354 |
+
}
|
355 |
+
});
|
356 |
+
};
|
357 |
+
|
358 |
+
|
359 |
+
}));
|
3.0.14/assets/admin/scripts/gdbc-admin.js
ADDED
@@ -0,0 +1,211 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
Mailchimp Ajax Submit
|
3 |
+
jQuery Plugin
|
4 |
+
Author: Siddharth Doshi
|
5 |
+
|
6 |
+
Use:
|
7 |
+
===
|
8 |
+
$('#form_id').ajaxchimp(options);
|
9 |
+
|
10 |
+
- Form should have one <input> element with attribute 'type=email'
|
11 |
+
- Form should have one label element with attribute 'for=email_input_id' (used to display error/success message)
|
12 |
+
- All options are optional.
|
13 |
+
|
14 |
+
Options:
|
15 |
+
=======
|
16 |
+
options = {
|
17 |
+
language: 'en',
|
18 |
+
callback: callbackFunction,
|
19 |
+
url: 'http://blahblah.us1.list-manage.com/subscribe/post?u=5afsdhfuhdsiufdba6f8802&id=4djhfdsh99f'
|
20 |
+
}
|
21 |
+
|
22 |
+
Notes:
|
23 |
+
=====
|
24 |
+
To get the mailchimp JSONP url (undocumented), change 'post?' to 'post-json?' and add '&c=?' to the end.
|
25 |
+
For e.g. 'http://blahblah.us1.list-manage.com/subscribe/post-json?u=5afsdhfuhdsiufdba6f8802&id=4djhfdsh99f&c=?',
|
26 |
+
*/
|
27 |
+
|
28 |
+
(function ($) {
|
29 |
+
'use strict';
|
30 |
+
|
31 |
+
$.ajaxChimp = {
|
32 |
+
responses: {
|
33 |
+
'Thanks! We have sent you a confirmation email' : 0,
|
34 |
+
'Please enter a valid email address' : 1,
|
35 |
+
'An email address must contain a single @' : 2,
|
36 |
+
'The domain portion of the email address is invalid' : 3,
|
37 |
+
'The username portion of the email address is invalid' : 4,
|
38 |
+
'This email address looks fake or invalid' : 5
|
39 |
+
},
|
40 |
+
translations: {
|
41 |
+
'en': null
|
42 |
+
},
|
43 |
+
init: function (selector, options) {
|
44 |
+
$(selector).ajaxChimp(options);
|
45 |
+
}
|
46 |
+
};
|
47 |
+
|
48 |
+
$.fn.ajaxChimp = function (options) {
|
49 |
+
$(this).each(function(i, elem) {
|
50 |
+
var form = $(elem);
|
51 |
+
var email = form.find('input[type=email]');
|
52 |
+
var label = form.find('label[for=' + email.attr('id') + ']');
|
53 |
+
|
54 |
+
var settings = $.extend({
|
55 |
+
'url': form.attr('action'),
|
56 |
+
'language': 'en'
|
57 |
+
}, options);
|
58 |
+
|
59 |
+
var url = settings.url.replace('/post?', '/post-json?').concat('&c=?');
|
60 |
+
|
61 |
+
form.attr('novalidate', 'true');
|
62 |
+
email.attr('name', 'EMAIL');
|
63 |
+
|
64 |
+
form.submit(function () {
|
65 |
+
var msg;
|
66 |
+
function successCallback(resp) {
|
67 |
+
if (resp.result === 'success') {
|
68 |
+
msg = "Thanks! We've sent a confirmation email";
|
69 |
+
label.removeClass('error').addClass('valid');
|
70 |
+
email.removeClass('error').addClass('valid');
|
71 |
+
}
|
72 |
+
else
|
73 |
+
{
|
74 |
+
email.removeClass('valid').addClass('error');
|
75 |
+
label.removeClass('valid').addClass('error');
|
76 |
+
var index = -1;
|
77 |
+
try {
|
78 |
+
var parts = resp.msg.split(' - ', 2);
|
79 |
+
if (parts[1] === undefined) {
|
80 |
+
msg = resp.msg;
|
81 |
+
} else {
|
82 |
+
var i = parseInt(parts[0], 10);
|
83 |
+
if (i.toString() === parts[0]) {
|
84 |
+
index = parts[0];
|
85 |
+
msg = parts[1];
|
86 |
+
} else {
|
87 |
+
index = -1;
|
88 |
+
msg = resp.msg;
|
89 |
+
}
|
90 |
+
}
|
91 |
+
}
|
92 |
+
catch (e) {
|
93 |
+
index = -1;
|
94 |
+
msg = resp.msg;
|
95 |
+
}
|
96 |
+
}
|
97 |
+
|
98 |
+
// Translate and display message
|
99 |
+
if (
|
100 |
+
settings.language !== 'en'
|
101 |
+
&& $.ajaxChimp.responses[msg] !== undefined
|
102 |
+
&& $.ajaxChimp.translations
|
103 |
+
&& $.ajaxChimp.translations[settings.language]
|
104 |
+
&& $.ajaxChimp.translations[settings.language][$.ajaxChimp.responses[msg]]
|
105 |
+
) {
|
106 |
+
msg = $.ajaxChimp.translations[settings.language][$.ajaxChimp.responses[msg]];
|
107 |
+
}
|
108 |
+
label.html(msg);
|
109 |
+
|
110 |
+
label.show(2000);
|
111 |
+
if (settings.callback) {
|
112 |
+
settings.callback(resp);
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
var data = {};
|
117 |
+
var dataArray = form.serializeArray();
|
118 |
+
$.each(dataArray, function (index, item) {
|
119 |
+
data[item.name] = item.value;
|
120 |
+
});
|
121 |
+
|
122 |
+
$.ajax({
|
123 |
+
url: url,
|
124 |
+
data: data,
|
125 |
+
success: successCallback,
|
126 |
+
dataType: 'jsonp',
|
127 |
+
error: function (resp, text) {
|
128 |
+
console.log('mailchimp ajax submit error: ' + text);
|
129 |
+
}
|
130 |
+
});
|
131 |
+
|
132 |
+
// Translate and display submit message
|
133 |
+
var submitMsg = 'Submitting...';
|
134 |
+
if(
|
135 |
+
settings.language !== 'en'
|
136 |
+
&& $.ajaxChimp.translations
|
137 |
+
&& $.ajaxChimp.translations[settings.language]
|
138 |
+
&& $.ajaxChimp.translations[settings.language]['submit']
|
139 |
+
) {
|
140 |
+
submitMsg = $.ajaxChimp.translations[settings.language]['submit'];
|
141 |
+
}
|
142 |
+
label.html(submitMsg).show(2000);
|
143 |
+
|
144 |
+
return false;
|
145 |
+
});
|
146 |
+
});
|
147 |
+
return this;
|
148 |
+
};
|
149 |
+
})(jQuery);
|
150 |
+
|
151 |
+
jQuery( document ).ready(function($) {
|
152 |
+
var maxLogsDaysElm = $('#gdbcsettings-settings-MaxLogsDays');
|
153 |
+
|
154 |
+
if(maxLogsDaysElm.length !== 0) {
|
155 |
+
if(maxLogsDaysElm.val() == 0) {
|
156 |
+
maxLogsDaysElm.parent().children('p').first().toggle(false);
|
157 |
+
maxLogsDaysElm.parent().children('p').last().toggle(true);
|
158 |
+
}
|
159 |
+
|
160 |
+
maxLogsDaysElm.change(function () {
|
161 |
+
if ($(this).val() != 0) {
|
162 |
+
$(this).parent().children('p').first().toggle(true);
|
163 |
+
$(this).parent().children('p').last().toggle(false);
|
164 |
+
}
|
165 |
+
else {
|
166 |
+
$(this).parent().children('p').first().toggle(false);
|
167 |
+
$(this).parent().children('p').last().toggle(true);
|
168 |
+
}
|
169 |
+
|
170 |
+
});
|
171 |
+
}
|
172 |
+
|
173 |
+
$('div.mch-admin-notice.is-dismissible').each(function(){
|
174 |
+
var noticeElm = $(this);
|
175 |
+
noticeElm.on('click', '.notice-dismiss', function(event){
|
176 |
+
|
177 |
+
jQuery.ajax({
|
178 |
+
type : "post",
|
179 |
+
cache: false,
|
180 |
+
dataType : "json",
|
181 |
+
url : GdbcAdmin.ajaxUrl,
|
182 |
+
data : {
|
183 |
+
action: 'gdbc-dismiss-' + noticeElm.prop('id'),
|
184 |
+
ajaxRequestNonce: GdbcAdmin.ajaxRequestNonce
|
185 |
+
}
|
186 |
+
});
|
187 |
+
|
188 |
+
})
|
189 |
+
|
190 |
+
});
|
191 |
+
|
192 |
+
$('#gdbc-subscribe-frm').ajaxChimp({
|
193 |
+
url: '//wpbruiser.us12.list-manage.com/subscribe/post?u=5a2f4e669c2e2427b7e6d8ad9&id=5da2802c23',
|
194 |
+
callback: function(resp){
|
195 |
+
if (resp.result !== 'success')
|
196 |
+
return;
|
197 |
+
jQuery.ajax({
|
198 |
+
type : "post",
|
199 |
+
cache: false,
|
200 |
+
dataType : "json",
|
201 |
+
url : GdbcAdmin.ajaxUrl,
|
202 |
+
data : {
|
203 |
+
action: 'gdbc-user-subscribed-newsletter' ,
|
204 |
+
ajaxRequestNonce: GdbcAdmin.ajaxRequestNonce
|
205 |
+
}
|
206 |
+
});
|
207 |
+
|
208 |
+
}
|
209 |
+
});
|
210 |
+
|
211 |
+
});
|
3.0.14/assets/admin/scripts/gdbc-reports.js
ADDED
@@ -0,0 +1,828 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery( document ).ready(function($) {
|
2 |
+
|
3 |
+
|
4 |
+
if ($("#flot-container").length > 0)
|
5 |
+
initializeModulesPage();
|
6 |
+
else
|
7 |
+
initializeDashboard();
|
8 |
+
|
9 |
+
function initializeDashboard()
|
10 |
+
{
|
11 |
+
|
12 |
+
|
13 |
+
displayDashBoardAttemptsChart();
|
14 |
+
displayAttemptsPerModuleAndSectionChart();
|
15 |
+
displayLatestAttemptsTable();
|
16 |
+
displayLocationsOnMap();
|
17 |
+
displayAttemptsPerClientIpTable();
|
18 |
+
|
19 |
+
//displayPercentagePieChart();
|
20 |
+
displayTotalAttemptsPerModule()
|
21 |
+
}
|
22 |
+
|
23 |
+
|
24 |
+
function initializeModulesPage()
|
25 |
+
{
|
26 |
+
displayModulesChart();
|
27 |
+
displayModulesTables();
|
28 |
+
}
|
29 |
+
|
30 |
+
function displayModulesTables()
|
31 |
+
{
|
32 |
+
$("[id^='wid-id-']").each(function() {
|
33 |
+
var moduleId = $(this).attr('id').substr(7);
|
34 |
+
displayModuleTable(moduleId, 1, 'CreatedDate');
|
35 |
+
});
|
36 |
+
}
|
37 |
+
|
38 |
+
function displayAttemptsPerModuleAndSectionChart()
|
39 |
+
{
|
40 |
+
var ajaxData = {};
|
41 |
+
ajaxData['action'] = 'retrieveAttemptsPerModuleAndSection';
|
42 |
+
ajaxData['ajaxRequestNonce'] = GdbcAdmin.ajaxRequestNonce;
|
43 |
+
|
44 |
+
$.ajax({
|
45 |
+
type: "post",
|
46 |
+
cache: false,
|
47 |
+
dataType: "json",
|
48 |
+
url: GdbcAdmin.ajaxUrl,
|
49 |
+
data: ajaxData,
|
50 |
+
success: function (response) {
|
51 |
+
|
52 |
+
Morris.Bar({
|
53 |
+
element: 'gdbc-barchart-holder',
|
54 |
+
data: response,
|
55 |
+
hoverCallback: function(index, options, content) {
|
56 |
+
|
57 |
+
var moduleInfo = response[index];
|
58 |
+
|
59 |
+
if(!moduleInfo.attempts)
|
60 |
+
return '';
|
61 |
+
|
62 |
+
var label = moduleInfo.module;
|
63 |
+
if(moduleInfo.section.length)
|
64 |
+
label += '/' + moduleInfo.section;
|
65 |
+
|
66 |
+
var hover = '<div>';
|
67 |
+
|
68 |
+
hover += '<p>' + label + '</p>';
|
69 |
+
hover += '<p><span>' + moduleInfo.attempts + ' attempts' + '</span></p>';
|
70 |
+
|
71 |
+
hover += '</div>';
|
72 |
+
return hover;
|
73 |
+
},
|
74 |
+
xkey: 'y',
|
75 |
+
ykeys: ['attempts'],
|
76 |
+
grid:true,
|
77 |
+
hideHover:'auto',
|
78 |
+
labels: ['Series A', 'Series B']
|
79 |
+
});
|
80 |
+
}
|
81 |
+
});
|
82 |
+
|
83 |
+
}
|
84 |
+
|
85 |
+
|
86 |
+
function displayAttemptsPerClientIpTable(pageNumber)
|
87 |
+
{
|
88 |
+
if(typeof pageNumber === 'undefined')
|
89 |
+
pageNumber = 1;
|
90 |
+
|
91 |
+
var tableBody = $('#ip-attempts-holder table tbody');
|
92 |
+
if (tableBody.length === 0)
|
93 |
+
return;
|
94 |
+
|
95 |
+
var ajaxData = {};
|
96 |
+
ajaxData['action'] = 'retrieveAttemptsPerClientIp';
|
97 |
+
ajaxData['pageNumber'] = pageNumber;
|
98 |
+
ajaxData['ajaxRequestNonce'] = GdbcAdmin.ajaxRequestNonce;
|
99 |
+
|
100 |
+
|
101 |
+
$.ajax({
|
102 |
+
type: "post",
|
103 |
+
cache: false,
|
104 |
+
dataType: "json",
|
105 |
+
url: GdbcAdmin.ajaxUrl,
|
106 |
+
data: ajaxData,
|
107 |
+
success: function (response) {
|
108 |
+
|
109 |
+
tableBody.empty();
|
110 |
+
|
111 |
+
var totalPages = 0;
|
112 |
+
|
113 |
+
$.each(response, function(index, attempt) {
|
114 |
+
|
115 |
+
var row = $('<tr></tr>');
|
116 |
+
|
117 |
+
row.append($('<td>' + attempt.Country + '</td>'));
|
118 |
+
|
119 |
+
var clientIpHtml = attempt.IsIpBlocked ? '<i class="glyphicon glyphicon-minus-sign icon-danger" style="margin-right: 5px"></i>' : '<i class="glyphicon glyphicon-eye-open" style="margin-right: 5px"></i>';
|
120 |
+
|
121 |
+
|
122 |
+
row.append($('<td>' + clientIpHtml + attempt.ClientIp + '</td>'));
|
123 |
+
|
124 |
+
row.append($('<td>' + attempt.Attempts + '</td>'));
|
125 |
+
|
126 |
+
var blockCell = $('<td></td>');
|
127 |
+
blockCell.append(createBlockIpButtonGroup(attempt.ClientIp, !attempt.IsIpBlocked));
|
128 |
+
row.append(blockCell);
|
129 |
+
|
130 |
+
tableBody.append(row);
|
131 |
+
|
132 |
+
totalPages = attempt.Pages;
|
133 |
+
})
|
134 |
+
|
135 |
+
$('#ip-attempts-holder div.module-pagination').empty();
|
136 |
+
$('#ip-attempts-holder div.module-pagination').append(showPagination(pageNumber, totalPages));
|
137 |
+
|
138 |
+
$('#ip-attempts-holder div.module-pagination li[class!="disabled"] a').on('click', function(){
|
139 |
+
var newPage = $(this).html();
|
140 |
+
if (newPage == '...' || newPage == pageNumber)
|
141 |
+
return;
|
142 |
+
else if (newPage == 'Next')
|
143 |
+
newPage = pageNumber + 1;
|
144 |
+
else if (newPage == 'Prev')
|
145 |
+
newPage = pageNumber - 1;
|
146 |
+
|
147 |
+
displayAttemptsPerClientIpTable(newPage);
|
148 |
+
|
149 |
+
return false;
|
150 |
+
});
|
151 |
+
|
152 |
+
}
|
153 |
+
});
|
154 |
+
}
|
155 |
+
|
156 |
+
|
157 |
+
|
158 |
+
function displayModuleTable(moduleId, pageNumber, $orderBy)
|
159 |
+
{
|
160 |
+
if (moduleId == null || moduleId < 1 || moduleId >= 100)
|
161 |
+
return;
|
162 |
+
|
163 |
+
var ajaxData = {};
|
164 |
+
ajaxData['action'] = 'retrieveDetailedAttemptsPerModule';
|
165 |
+
ajaxData['moduleId'] = moduleId;
|
166 |
+
ajaxData['pageNumber'] = pageNumber;
|
167 |
+
ajaxData['orderBy'] = $orderBy;
|
168 |
+
ajaxData['ajaxRequestNonce'] = GdbcAdmin.ajaxRequestNonce;
|
169 |
+
|
170 |
+
$.ajax({
|
171 |
+
type : "post",
|
172 |
+
cache: false,
|
173 |
+
dataType : "json",
|
174 |
+
url : GdbcAdmin.ajaxUrl,
|
175 |
+
data : ajaxData,
|
176 |
+
success: function(response) {
|
177 |
+
|
178 |
+
$.each(response, function(prop, moduleData) {
|
179 |
+
if ('PaginationInfo' == prop) {
|
180 |
+
|
181 |
+
if (moduleData == 0) {
|
182 |
+
$('#wid-id-' + moduleId + ' table tbody').html('<td style="text-align: center; padding-top: 15px">No records found</td>');
|
183 |
+
return;
|
184 |
+
}
|
185 |
+
|
186 |
+
$('#mp-' + moduleId).empty();
|
187 |
+
$('#mp-' + moduleId).append(showPagination(moduleData[0], moduleData[1]));
|
188 |
+
$('#wid-id-' + moduleId + ' .module-pagination li[class!="disabled"] a').on('click', function(){
|
189 |
+
var newPage = $(this).html();
|
190 |
+
if (newPage == '...' || newPage == pageNumber)
|
191 |
+
return;
|
192 |
+
else if (newPage == 'Next')
|
193 |
+
newPage = parseInt(pageNumber, 10) + 1;
|
194 |
+
else if (newPage == 'Prev')
|
195 |
+
newPage = parseInt(pageNumber, 10) - 1;
|
196 |
+
|
197 |
+
var modId = $(this).parent().parent().parent().attr('id').substr(3);
|
198 |
+
|
199 |
+
displayModuleTable(modId , newPage, '');
|
200 |
+
|
201 |
+
return false;
|
202 |
+
});
|
203 |
+
|
204 |
+
}
|
205 |
+
|
206 |
+
if ('ModuleDataHeader' == prop)
|
207 |
+
displayModuleTableHeader('wid-id-' + moduleId, moduleData);
|
208 |
+
|
209 |
+
if ('ModuleDataRows' == prop)
|
210 |
+
displayModuleTableBody('wid-id-' +moduleId, response);
|
211 |
+
|
212 |
+
});
|
213 |
+
|
214 |
+
}
|
215 |
+
});
|
216 |
+
}
|
217 |
+
|
218 |
+
function displayModuleTableHeader(containerId, dataValues)
|
219 |
+
{
|
220 |
+
var tableHeader = $('#' + containerId + ' table thead tr');
|
221 |
+
if (tableHeader.length == 0)
|
222 |
+
return;
|
223 |
+
tableHeader.empty();
|
224 |
+
$.each(dataValues, function(k,v){
|
225 |
+
var headerCell = $('<th>' + v + '</th>');
|
226 |
+
tableHeader.append(headerCell);
|
227 |
+
});
|
228 |
+
tableHeader.append('<th></th>');
|
229 |
+
}
|
230 |
+
|
231 |
+
function displayModuleTableBody(containerId, ajaxResponse)
|
232 |
+
{
|
233 |
+
|
234 |
+
var tableBody = $('#' + containerId + ' table tbody');
|
235 |
+
if (tableBody.length === 0)
|
236 |
+
return;
|
237 |
+
|
238 |
+
tableBody.empty();
|
239 |
+
|
240 |
+
$.each(ajaxResponse.ModuleDataRows, function (index, tableData) {
|
241 |
+
var row = $('<tr></tr>');
|
242 |
+
var clientIp = 'N/A';
|
243 |
+
$.each(ajaxResponse.ModuleDataHeader, function (key, header) {
|
244 |
+
|
245 |
+
if(typeof tableData[key] === 'undefined')
|
246 |
+
tableData[key] = 'N/A';
|
247 |
+
|
248 |
+
|
249 |
+
if(key === 'ClientIp') {
|
250 |
+
clientIp = tableData[key];
|
251 |
+
if(tableData.IsIpBlocked) {
|
252 |
+
tableData[key] = '<i class="glyphicon glyphicon-minus-sign icon-danger" style="margin-right: 5px"></i>' + tableData[key];
|
253 |
+
}
|
254 |
+
else{
|
255 |
+
tableData[key] = '<i class="glyphicon glyphicon-eye-open" style="margin-right: 5px"></i>' + tableData[key];
|
256 |
+
}
|
257 |
+
}
|
258 |
+
var cell = $('<td>' + tableData[key] + '</td>');
|
259 |
+
|
260 |
+
row.append(cell);
|
261 |
+
|
262 |
+
});
|
263 |
+
|
264 |
+
var blockCell = $('<td></td>');
|
265 |
+
blockCell.append(createBlockIpButtonGroup(clientIp, !tableData.IsIpBlocked));
|
266 |
+
row.append(blockCell);
|
267 |
+
|
268 |
+
tableBody.append(row);
|
269 |
+
|
270 |
+
|
271 |
+
});
|
272 |
+
|
273 |
+
}
|
274 |
+
|
275 |
+
function showPagination(pageNumber, totalPages)
|
276 |
+
{
|
277 |
+
var ulContainer = $('<ul class="pagination pagination-sm"></ul>');
|
278 |
+
var firstPageLi = $('<li><a>1</a></li>');
|
279 |
+
var lastPageLi = $('<li><a>' + totalPages + '</a>');
|
280 |
+
var previousLi = $('<li><a>Prev</a></li>');
|
281 |
+
var nextLi = $('<li><a>Next</a></li>');
|
282 |
+
var separatorLi1 = $('<li><a>...</a></li>');
|
283 |
+
var separatorLi2 = $('<li><a>...</a></li>');
|
284 |
+
|
285 |
+
var currentPageLi = $('<li class="active"><a>' + pageNumber + '</a></li>');
|
286 |
+
|
287 |
+
pageNumber = parseInt(pageNumber, 10);
|
288 |
+
totalPages = parseInt(totalPages, 10);
|
289 |
+
|
290 |
+
if (totalPages == 1) {
|
291 |
+
firstPageLi = null;
|
292 |
+
lastPageLi = null;
|
293 |
+
previousLi.addClass('disabled');
|
294 |
+
nextLi.addClass('disabled');
|
295 |
+
}
|
296 |
+
else if (pageNumber == 1) {
|
297 |
+
previousLi.addClass('disabled');
|
298 |
+
firstPageLi = null;
|
299 |
+
}
|
300 |
+
else if (pageNumber == totalPages) {
|
301 |
+
nextLi.addClass('disabled');
|
302 |
+
lastPageLi = null;
|
303 |
+
}
|
304 |
+
|
305 |
+
var numberOfAdditionalPages = 1; // = 2; two additional pages in the left, two additional pages in the right (if available)
|
306 |
+
var prevPagesArray = new Array();
|
307 |
+
var nextPagesArray = new Array();
|
308 |
+
|
309 |
+
for (var i = 0; i < numberOfAdditionalPages; i++ ){
|
310 |
+
if (pageNumber - i > 2)
|
311 |
+
prevPagesArray[i] = $('<li><a>' + (pageNumber - i - 1) + '</a></li>');
|
312 |
+
|
313 |
+
if ((pageNumber + i + 1) < totalPages)
|
314 |
+
nextPagesArray[i] = $('<li><a>' + (pageNumber + i + 1) + '</a></li>');
|
315 |
+
}
|
316 |
+
|
317 |
+
ulContainer.append(previousLi);
|
318 |
+
|
319 |
+
if (firstPageLi != null) {
|
320 |
+
ulContainer.append(firstPageLi);
|
321 |
+
if (prevPagesArray.length > 0)
|
322 |
+
{
|
323 |
+
var firstPageNumber = parseInt(firstPageLi.text(), 10);
|
324 |
+
var nextPageNumber = parseInt(prevPagesArray[0].text(), 10);
|
325 |
+
if ( (nextPageNumber - firstPageNumber) > 1)
|
326 |
+
ulContainer.append(separatorLi1);
|
327 |
+
}
|
328 |
+
}
|
329 |
+
for(var i = numberOfAdditionalPages-1; i >= 0; i--)
|
330 |
+
ulContainer.append(prevPagesArray[i]);
|
331 |
+
|
332 |
+
ulContainer.append(currentPageLi);
|
333 |
+
|
334 |
+
for(var i = 0; i < numberOfAdditionalPages; i++)
|
335 |
+
ulContainer.append(nextPagesArray[i]);
|
336 |
+
|
337 |
+
if (lastPageLi != null) {
|
338 |
+
if (nextPagesArray.length > 0)
|
339 |
+
{
|
340 |
+
var lastPageNumber = lastPageLi.text();
|
341 |
+
var prevPageNumber = nextPagesArray[nextPagesArray.length - 1].text();
|
342 |
+
if ((parseInt(lastPageNumber, 10) - parseInt(prevPageNumber, 10)) > 1)
|
343 |
+
ulContainer.append(separatorLi2);
|
344 |
+
}
|
345 |
+
ulContainer.append(lastPageLi);
|
346 |
+
}
|
347 |
+
|
348 |
+
ulContainer.append(nextLi);
|
349 |
+
|
350 |
+
return ulContainer;
|
351 |
+
}
|
352 |
+
|
353 |
+
function displayModulesChart()
|
354 |
+
{
|
355 |
+
var toggles = $("#modules-chart");
|
356 |
+
var target = $("#flot-container");
|
357 |
+
|
358 |
+
var data = [];
|
359 |
+
|
360 |
+
var options = {
|
361 |
+
grid : {
|
362 |
+
hoverable : true
|
363 |
+
},
|
364 |
+
tooltip : true,
|
365 |
+
tooltipOpts : {
|
366 |
+
content: '%s: %y',
|
367 |
+
//dateFormat: '%b %y',
|
368 |
+
defaultTheme : false
|
369 |
+
},
|
370 |
+
legend: {show: false},
|
371 |
+
xaxis : {
|
372 |
+
mode : "time"
|
373 |
+
},
|
374 |
+
yaxes : {
|
375 |
+
tickFormatter : function(val) {
|
376 |
+
return "$" + val;
|
377 |
+
},
|
378 |
+
max : 1200
|
379 |
+
}
|
380 |
+
|
381 |
+
};
|
382 |
+
|
383 |
+
|
384 |
+
var ajaxData = {};
|
385 |
+
ajaxData['action'] = 'retrieveDetailedAttemptsForChart';
|
386 |
+
ajaxData['ajaxRequestNonce'] = GdbcAdmin.ajaxRequestNonce;
|
387 |
+
$.ajax({
|
388 |
+
type : "post",
|
389 |
+
cache: false,
|
390 |
+
dataType : "json",
|
391 |
+
url : GdbcAdmin.ajaxUrl,
|
392 |
+
data : ajaxData,
|
393 |
+
success: function(response){
|
394 |
+
|
395 |
+
$.each(response, function(prop, modulesData){
|
396 |
+
if (prop === 'ModulesDescriptionArray' && $("#flot-container").length) {
|
397 |
+
var i = 0;
|
398 |
+
$.each(modulesData, function(key, value){
|
399 |
+
var label = $('<label class="checkbox" for="gra-' + i + '"></label>');
|
400 |
+
var input = $('<input type="checkbox" checked="checked" id="gra-' + i + '" name="gra-' + i + '">');
|
401 |
+
var italic = $('<i></i>');
|
402 |
+
label.append(input, italic, value);
|
403 |
+
$(".inline-group").append(label);
|
404 |
+
i++;
|
405 |
+
});
|
406 |
+
} else if (prop === 'ModulesAttemptsArray' && $("#flot-container").length) {
|
407 |
+
|
408 |
+
var colorArray = ['#931313', '#638167', '#65596B', '#60747C', '#B09B5B', '#3276B1', '#C0C0C0', '#FDDC9A', '#575FB5', '#57B599', '#46CC41', '#C93A24'];
|
409 |
+
var i = 0;
|
410 |
+
$.each(modulesData, function(key, value){
|
411 |
+
var $graphObj = {
|
412 |
+
label : '%x - ' + $('#gra-'+i).parent().text() + ' attempts',
|
413 |
+
data : value,
|
414 |
+
color : colorArray[i],
|
415 |
+
lines : {
|
416 |
+
show : true,
|
417 |
+
lineWidth : 3
|
418 |
+
},
|
419 |
+
points : {
|
420 |
+
show : true
|
421 |
+
}
|
422 |
+
};
|
423 |
+
data[i] = $graphObj;
|
424 |
+
i++;
|
425 |
+
});
|
426 |
+
}
|
427 |
+
|
428 |
+
});
|
429 |
+
toggles.find(':checkbox').on('change', function() {
|
430 |
+
plotNow();
|
431 |
+
});
|
432 |
+
plotNow()
|
433 |
+
}
|
434 |
+
});
|
435 |
+
|
436 |
+
|
437 |
+
|
438 |
+
var plot2 = null;
|
439 |
+
|
440 |
+
function plotNow() {
|
441 |
+
var d = [];
|
442 |
+
toggles.find(':checkbox').each(function() {
|
443 |
+
if ($(this).is(':checked')) {
|
444 |
+
d.push(data[$(this).attr("name").substr(4, 1)]);
|
445 |
+
}
|
446 |
+
});
|
447 |
+
if (d.length > 0) {
|
448 |
+
if (plot2) {
|
449 |
+
plot2.setData(d);
|
450 |
+
plot2.draw();
|
451 |
+
} else {
|
452 |
+
plot2 = $.plot(target, d, options);
|
453 |
+
}
|
454 |
+
}
|
455 |
+
|
456 |
+
}
|
457 |
+
}
|
458 |
+
|
459 |
+
function displayDashBoardAttemptsChart() {
|
460 |
+
var ajaxData = {};
|
461 |
+
ajaxData['action'] = 'retrieveInitialDashboardData';
|
462 |
+
ajaxData['ajaxRequestNonce'] = GdbcAdmin.ajaxRequestNonce;
|
463 |
+
$.ajax({
|
464 |
+
type : "post",
|
465 |
+
cache: false,
|
466 |
+
dataType : "json",
|
467 |
+
url : GdbcAdmin.ajaxUrl,
|
468 |
+
data : ajaxData,
|
469 |
+
success: function(response){
|
470 |
+
|
471 |
+
$.each(response, function(prop, chartData){
|
472 |
+
if (prop === 'ChartDataArray' && $("#chart-container").length) {
|
473 |
+
var chartArray = [];
|
474 |
+
var attemptsCounter = 0;
|
475 |
+
$.each(chartData, function(key, value){
|
476 |
+
chartArray.push([parseInt(key), value]);
|
477 |
+
attemptsCounter += parseInt(value);
|
478 |
+
});
|
479 |
+
displayAttemptsChart("#chart-container", chartArray);
|
480 |
+
if(attemptsCounter > 9) {
|
481 |
+
$("a.btn-rate-gdbc").css('display', 'inline-block');
|
482 |
+
}
|
483 |
+
}
|
484 |
+
});
|
485 |
+
}
|
486 |
+
});
|
487 |
+
}
|
488 |
+
|
489 |
+
function displayAttemptsChart(placeHolderId, data) {
|
490 |
+
|
491 |
+
console.log(data);
|
492 |
+
|
493 |
+
// var data = [[1304301600*1000, 20], [1304388000*1000, 30], [1304474400*1000, 40], [1304553600*1000, 10], [1304640000*1000, 23], [1304726400*1000, 16] ];
|
494 |
+
|
495 |
+
|
496 |
+
var options = {
|
497 |
+
xaxis : {
|
498 |
+
mode : "time",
|
499 |
+
tickLength : 5
|
500 |
+
},
|
501 |
+
yaxis : {
|
502 |
+
mode : "number",
|
503 |
+
tickFormatter: suffixFormatter
|
504 |
+
},
|
505 |
+
series : {
|
506 |
+
lines : {
|
507 |
+
show : true,
|
508 |
+
lineWidth : 1,
|
509 |
+
fill : true,
|
510 |
+
fillColor : {
|
511 |
+
colors : [{
|
512 |
+
opacity : 0.1
|
513 |
+
}, {
|
514 |
+
opacity : 0.15
|
515 |
+
}]
|
516 |
+
}
|
517 |
+
},
|
518 |
+
shadowSize : 0,
|
519 |
+
points : { show: false, fill: true }
|
520 |
+
},
|
521 |
+
selection : {
|
522 |
+
mode : "x"
|
523 |
+
},
|
524 |
+
grid : {
|
525 |
+
hoverable : true,
|
526 |
+
clickable : true,
|
527 |
+
tickColor : "#efefef",
|
528 |
+
borderWidth : 0,
|
529 |
+
borderColor : "#efefef"
|
530 |
+
},
|
531 |
+
tooltip:{
|
532 |
+
show:true,
|
533 |
+
content : '<div id = "flotTip"><p>%y attempts </p><p><b>%x</b></p>',
|
534 |
+
xDateFormat: "%b %d, %Y",
|
535 |
+
shifts: {
|
536 |
+
x: 10,
|
537 |
+
y: 10
|
538 |
+
},
|
539 |
+
defaultTheme: false
|
540 |
+
},
|
541 |
+
//tooltip : true,
|
542 |
+
//tooltipOpts : {
|
543 |
+
// content : "<span>%y</span> attempts on <b>%x</b>",
|
544 |
+
// dateFormat : "%b %0d, %y",
|
545 |
+
// defaultTheme : false
|
546 |
+
//},
|
547 |
+
colors : ["#6595b4"]
|
548 |
+
};
|
549 |
+
|
550 |
+
$.plot($(placeHolderId), [data], options);
|
551 |
+
}
|
552 |
+
|
553 |
+
function displayLatestAttemptsTable()
|
554 |
+
{
|
555 |
+
if ($('#latest-attempts-table').length == 0)
|
556 |
+
return;
|
557 |
+
|
558 |
+
var ajaxData = {};
|
559 |
+
ajaxData['action'] = 'retrieveLatestAttemptsTable';
|
560 |
+
ajaxData['ajaxRequestNonce'] = GdbcAdmin.ajaxRequestNonce;
|
561 |
+
var dataHeaderArr = null;
|
562 |
+
$.ajax({
|
563 |
+
type : "post",
|
564 |
+
cache: false,
|
565 |
+
dataType : "json",
|
566 |
+
url : GdbcAdmin.ajaxUrl,
|
567 |
+
data : ajaxData,
|
568 |
+
success: function(response){
|
569 |
+
|
570 |
+
if(response.success !== true)
|
571 |
+
return;
|
572 |
+
|
573 |
+
$('#latest-attempts-table thead tr').empty();
|
574 |
+
|
575 |
+
$.each(response.data.TableHeader, function (key, header) {
|
576 |
+
var cell = $('<th>' + header + '</th>');
|
577 |
+
$('#latest-attempts-table thead tr').append(cell);
|
578 |
+
});
|
579 |
+
|
580 |
+
$('#latest-attempts-table thead tr').append($('<th></th>'));
|
581 |
+
|
582 |
+
$('#latest-attempts-table tbody').empty();
|
583 |
+
$.each(response.data.TableData, function (index, tableData) {
|
584 |
+
var row = $('<tr></tr>');
|
585 |
+
var clientIp = 'N/A';
|
586 |
+
$.each(response.data.TableHeader, function (key, header) {
|
587 |
+
|
588 |
+
if(typeof tableData[key] === 'undefined')
|
589 |
+
tableData[key] = 'N/A';
|
590 |
+
|
591 |
+
if(key === 'ClientIp') {
|
592 |
+
clientIp = tableData[key];
|
593 |
+
|
594 |
+
if(tableData.IsIpBlocked) {
|
595 |
+
tableData[key] = '<i class="glyphicon glyphicon-minus-sign icon-danger" style="margin-right: 5px"></i>' + tableData[key];
|
596 |
+
}
|
597 |
+
else{
|
598 |
+
tableData[key] = '<i class="glyphicon glyphicon-eye-open" style="margin-right: 5px"></i>' + tableData[key];
|
599 |
+
}
|
600 |
+
}
|
601 |
+
var cell = $('<td>' + tableData[key] + '</td>');
|
602 |
+
row.append(cell);
|
603 |
+
});
|
604 |
+
|
605 |
+
var blockCell = $('<td></td>');
|
606 |
+
blockCell.append(createBlockIpButtonGroup(clientIp, !tableData.IsIpBlocked));
|
607 |
+
row.append(blockCell);
|
608 |
+
|
609 |
+
$('#latest-attempts-table tbody').append(row);
|
610 |
+
|
611 |
+
});
|
612 |
+
|
613 |
+
}
|
614 |
+
});
|
615 |
+
}
|
616 |
+
|
617 |
+
function displayLocationsOnMap()
|
618 |
+
{
|
619 |
+
if ($('#vector-map').length == 0)
|
620 |
+
return;
|
621 |
+
|
622 |
+
$('#vector-map').vectorMap({
|
623 |
+
map : 'world_mill_en',
|
624 |
+
backgroundColor : '#fff',
|
625 |
+
regionStyle : {
|
626 |
+
initial : {
|
627 |
+
fill : '#c4c4c4'
|
628 |
+
},
|
629 |
+
hover : {
|
630 |
+
"fill-opacity" : 1
|
631 |
+
}
|
632 |
+
},
|
633 |
+
series : {
|
634 |
+
regions : [{
|
635 |
+
values : attemptsCountryArray,
|
636 |
+
scale : ['#85a8b6', '#4d7686'],
|
637 |
+
normalizeFunction : 'polynomial'
|
638 |
+
}]
|
639 |
+
},
|
640 |
+
|
641 |
+
onRegionLabelShow : function(e, el, code) {
|
642 |
+
if ( typeof attemptsCountryArray[code] == 'undefined') {
|
643 |
+
e.preventDefault();
|
644 |
+
} else {
|
645 |
+
var countryLbl = attemptsCountryArray[code];
|
646 |
+
var attemptLbl = ' total attempts';
|
647 |
+
if (countryLbl == 1)
|
648 |
+
attemptLbl = ' attempt';
|
649 |
+
el.html(el.html() + ': ' + countryLbl + attemptLbl);
|
650 |
+
}
|
651 |
+
}
|
652 |
+
});
|
653 |
+
}
|
654 |
+
|
655 |
+
|
656 |
+
function displayTotalAttemptsPerModule()
|
657 |
+
{
|
658 |
+
if ($('#gdbc-pie-chart').length == 0)
|
659 |
+
return;
|
660 |
+
|
661 |
+
var ajaxData = {};
|
662 |
+
ajaxData['action'] = 'retrieveTotalAttemptsPerModule';
|
663 |
+
ajaxData['ajaxRequestNonce'] = GdbcAdmin.ajaxRequestNonce;
|
664 |
+
$.ajax({
|
665 |
+
type : "post",
|
666 |
+
cache: false,
|
667 |
+
dataType : "json",
|
668 |
+
url : GdbcAdmin.ajaxUrl,
|
669 |
+
data : ajaxData,
|
670 |
+
success: function(response) {
|
671 |
+
|
672 |
+
$.each(response, function(prop, moduleData) {
|
673 |
+
if ('TopAttemptsArrayPerModule' == prop) {
|
674 |
+
$('#gdbc-pie-chart table tbody').empty();
|
675 |
+
if (moduleData == 0)
|
676 |
+
$('#gdbc-pie-chart table tbody').append($('<tr><td colspan="4" class="text-center">No records found</tr>'));
|
677 |
+
else {
|
678 |
+
|
679 |
+
$.each(moduleData, function (k, v) {
|
680 |
+
var tableRow = $('<tr></tr>');
|
681 |
+
tableRow.append($('<td>' + v.label + '</td>'));
|
682 |
+
tableRow.append($('<td>' + v.value + '</td>'));
|
683 |
+
$('#gdbc-pie-chart table tbody').append(tableRow);
|
684 |
+
});
|
685 |
+
|
686 |
+
if ($('#gdbc-stats').length == 0)
|
687 |
+
return;
|
688 |
+
|
689 |
+
Morris.Donut({
|
690 |
+
element: 'gdbc-stats',
|
691 |
+
data: moduleData,
|
692 |
+
formatter: function (x, data) {
|
693 |
+
return data.percent + "%"
|
694 |
+
}
|
695 |
+
});
|
696 |
+
|
697 |
+
}
|
698 |
+
}
|
699 |
+
});
|
700 |
+
}
|
701 |
+
});
|
702 |
+
}
|
703 |
+
|
704 |
+
|
705 |
+
function createBlockIpButtonGroup(ip, shouldBlock)
|
706 |
+
{
|
707 |
+
var group = $('<div class="btn-group display-inline pull-right text-align-left hidden-tablet"></div>');
|
708 |
+
group.append(createBlockLinkButton());
|
709 |
+
group.append(createBlockLinkOptions(ip, shouldBlock));
|
710 |
+
return group;
|
711 |
+
}
|
712 |
+
|
713 |
+
function createBlockLinkButton()
|
714 |
+
{
|
715 |
+
return $('<button data-toggle="dropdown" class="btn btn-xs btn-default dropdown-toggle">' +
|
716 |
+
'<i class="glyphicon glyphicon-remove-circle icon-primary"></i>' +
|
717 |
+
'</button>');
|
718 |
+
}
|
719 |
+
|
720 |
+
|
721 |
+
function manageIp(ip, shouldBlock, clickedElement)
|
722 |
+
{
|
723 |
+
var ajaxData = {};
|
724 |
+
ajaxData['action'] = 'manageClientIpAddress';
|
725 |
+
ajaxData['clientIp'] = ip;
|
726 |
+
ajaxData['shouldBlock'] = shouldBlock;
|
727 |
+
ajaxData['ajaxRequestNonce'] = GdbcAdmin.ajaxRequestNonce;
|
728 |
+
jQuery.ajax({
|
729 |
+
type : "post",
|
730 |
+
cache: false,
|
731 |
+
dataType : "json",
|
732 |
+
url : GdbcAdmin.ajaxUrl,
|
733 |
+
data : ajaxData,
|
734 |
+
success: function(response) {
|
735 |
+
if(!response.success){
|
736 |
+
return;
|
737 |
+
}
|
738 |
+
|
739 |
+
updatePageIpIcons(ip, shouldBlock);
|
740 |
+
|
741 |
+
var cell = clickedElement.closest('td');
|
742 |
+
cell.empty();
|
743 |
+
cell.append(createBlockIpButtonGroup(ip, (shouldBlock == 0) ? 1 : 0));
|
744 |
+
}
|
745 |
+
});
|
746 |
+
|
747 |
+
}
|
748 |
+
|
749 |
+
function createBlockLinkOptions(ip, shouldBlock)
|
750 |
+
{
|
751 |
+
var blockIpLink = '<a href="javascript:void(0);" class="block-' +ip+ '"> <i class="glyphicon glyphicon-remove icon-danger" style = "margin-right: 5px"></i>Block Ip Address</a>';
|
752 |
+
var unblockIpLink = '<a href="javascript:void(0);" class="unblock-' +ip+ '"> <i class="glyphicon glyphicon-ok icon-success" style = "margin-right: 5px"></i>UnBlock Ip Address</a>';
|
753 |
+
|
754 |
+
var insertLink = '<li> ' + (shouldBlock ? blockIpLink : unblockIpLink) + ' <li>';
|
755 |
+
|
756 |
+
var blockMenu = $('<ul class="dropdown-menu dropdown-menu-xs pull-right manage-ip-action-holder">' + insertLink +
|
757 |
+
'<li class="divider"><li>' +
|
758 |
+
'<li> <a href="javascript:void(0);">Cancel</a> <li>' +
|
759 |
+
'</ul>');
|
760 |
+
|
761 |
+
blockMenu.on('click', 'a', function(){
|
762 |
+
var classAttr = $(this).attr('class');
|
763 |
+
if (!classAttr)
|
764 |
+
return void(0);
|
765 |
+
|
766 |
+
if (classAttr.lastIndexOf('block-') === 0) {
|
767 |
+
var ip = classAttr.substr(6);
|
768 |
+
manageIp(ip, 1, $(this));
|
769 |
+
|
770 |
+
} else if (classAttr.lastIndexOf('unblock-') === 0) {
|
771 |
+
var ip = classAttr.substr(8);
|
772 |
+
manageIp(ip, 0, $(this));
|
773 |
+
}
|
774 |
+
|
775 |
+
});
|
776 |
+
|
777 |
+
return blockMenu;
|
778 |
+
}
|
779 |
+
|
780 |
+
|
781 |
+
|
782 |
+
function updatePageIpIcons(ip, shouldBlock)
|
783 |
+
{
|
784 |
+
$.each($("table i.glyphicon:first-child"), function(){
|
785 |
+
var cellIp = $.trim($(this).parent().text());
|
786 |
+
if (cellIp == ip){
|
787 |
+
if (shouldBlock) {
|
788 |
+
$(this).attr("class", "glyphicon glyphicon-minus-sign icon-danger");
|
789 |
+
}
|
790 |
+
else {
|
791 |
+
$(this).attr("class", "glyphicon glyphicon-eye-open");
|
792 |
+
}
|
793 |
+
}
|
794 |
+
});
|
795 |
+
}
|
796 |
+
|
797 |
+
// Util Functions Section
|
798 |
+
function suffixFormatter(val)
|
799 |
+
{
|
800 |
+
return Math.round(val);
|
801 |
+
}
|
802 |
+
|
803 |
+
|
804 |
+
$('#gdbc-modal-holder').on('show.bs.modal', function (event) {
|
805 |
+
|
806 |
+
$(".modal-body").hide();
|
807 |
+
$(".modal-dialog").append("<div class = 'report-spinner'></div>");
|
808 |
+
|
809 |
+
var clickedButton = $(event.relatedTarget)
|
810 |
+
var attemptId = clickedButton.data('attempt');
|
811 |
+
var modalDialog = $(this);
|
812 |
+
|
813 |
+
var ajaxData = {};
|
814 |
+
ajaxData['action'] = 'retrieveFormattedBlockedContent';
|
815 |
+
ajaxData['attemptId'] = attemptId;
|
816 |
+
ajaxData['ajaxRequestNonce'] = GdbcAdmin.ajaxRequestNonce;
|
817 |
+
|
818 |
+
modalDialog.find('.modal-body').load( GdbcAdmin.ajaxUrl, ajaxData, function() {
|
819 |
+
$('div').removeClass('report-spinner');
|
820 |
+
$(".modal-body").show();
|
821 |
+
});
|
822 |
+
})
|
823 |
+
|
824 |
+
//$('#gdbc-modal-holder').on('hidden.bs.modal', function () {
|
825 |
+
// $(this).find('.modal-body').empty();
|
826 |
+
//});
|
827 |
+
|
828 |
+
});
|
3.0.14/assets/admin/scripts/jquery-flot-tooltip.js
ADDED
@@ -0,0 +1,571 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* jquery.flot.tooltip
|
3 |
+
*
|
4 |
+
* description: easy-to-use tooltips for Flot charts
|
5 |
+
* version: 0.8.5
|
6 |
+
* authors: Krzysztof Urbas @krzysu [myviews.pl],Evan Steinkerchner @Roundaround
|
7 |
+
* website: https://github.com/krzysu/flot.tooltip
|
8 |
+
*
|
9 |
+
* build on 2015-06-12
|
10 |
+
* released under MIT License, 2012
|
11 |
+
*/
|
12 |
+
(function ($) {
|
13 |
+
// plugin options, default values
|
14 |
+
var defaultOptions = {
|
15 |
+
tooltip: {
|
16 |
+
show: false,
|
17 |
+
cssClass: "flotTip",
|
18 |
+
content: "%s | X: %x | Y: %y",
|
19 |
+
// allowed templates are:
|
20 |
+
// %s -> series label,
|
21 |
+
// %c -> series color,
|
22 |
+
// %lx -> x axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels),
|
23 |
+
// %ly -> y axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels),
|
24 |
+
// %x -> X value,
|
25 |
+
// %y -> Y value,
|
26 |
+
// %x.2 -> precision of X value,
|
27 |
+
// %p -> percent
|
28 |
+
// %n -> value (not percent) of pie chart
|
29 |
+
xDateFormat: null,
|
30 |
+
yDateFormat: null,
|
31 |
+
monthNames: null,
|
32 |
+
dayNames: null,
|
33 |
+
shifts: {
|
34 |
+
x: 10,
|
35 |
+
y: 20
|
36 |
+
},
|
37 |
+
defaultTheme: true,
|
38 |
+
snap: true,
|
39 |
+
lines: false,
|
40 |
+
|
41 |
+
// callbacks
|
42 |
+
onHover: function (flotItem, $tooltipEl) {},
|
43 |
+
|
44 |
+
$compat: false
|
45 |
+
}
|
46 |
+
};
|
47 |
+
|
48 |
+
// dummy default options object for legacy code (<0.8.5) - is deleted later
|
49 |
+
defaultOptions.tooltipOpts = defaultOptions.tooltip;
|
50 |
+
|
51 |
+
// object
|
52 |
+
var FlotTooltip = function (plot) {
|
53 |
+
// variables
|
54 |
+
this.tipPosition = {x: 0, y: 0};
|
55 |
+
|
56 |
+
this.init(plot);
|
57 |
+
};
|
58 |
+
|
59 |
+
// main plugin function
|
60 |
+
FlotTooltip.prototype.init = function (plot) {
|
61 |
+
var that = this;
|
62 |
+
|
63 |
+
// detect other flot plugins
|
64 |
+
var plotPluginsLength = $.plot.plugins.length;
|
65 |
+
this.plotPlugins = [];
|
66 |
+
|
67 |
+
if (plotPluginsLength) {
|
68 |
+
for (var p = 0; p < plotPluginsLength; p++) {
|
69 |
+
this.plotPlugins.push($.plot.plugins[p].name);
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
plot.hooks.bindEvents.push(function (plot, eventHolder) {
|
74 |
+
|
75 |
+
// get plot options
|
76 |
+
that.plotOptions = plot.getOptions();
|
77 |
+
|
78 |
+
// for legacy (<0.8.5) implementations
|
79 |
+
if (typeof(that.plotOptions.tooltip) === 'boolean') {
|
80 |
+
that.plotOptions.tooltipOpts.show = that.plotOptions.tooltip;
|
81 |
+
that.plotOptions.tooltip = that.plotOptions.tooltipOpts;
|
82 |
+
delete that.plotOptions.tooltipOpts;
|
83 |
+
}
|
84 |
+
|
85 |
+
// if not enabled return
|
86 |
+
if (that.plotOptions.tooltip.show === false || typeof that.plotOptions.tooltip.show === 'undefined') return;
|
87 |
+
|
88 |
+
// shortcut to access tooltip options
|
89 |
+
that.tooltipOptions = that.plotOptions.tooltip;
|
90 |
+
|
91 |
+
if (that.tooltipOptions.$compat) {
|
92 |
+
that.wfunc = 'width';
|
93 |
+
that.hfunc = 'height';
|
94 |
+
} else {
|
95 |
+
that.wfunc = 'innerWidth';
|
96 |
+
that.hfunc = 'innerHeight';
|
97 |
+
}
|
98 |
+
|
99 |
+
// create tooltip DOM element
|
100 |
+
var $tip = that.getDomElement();
|
101 |
+
|
102 |
+
// bind event
|
103 |
+
$( plot.getPlaceholder() ).bind("plothover", plothover);
|
104 |
+
|
105 |
+
$(eventHolder).bind('mousemove', mouseMove);
|
106 |
+
});
|
107 |
+
|
108 |
+
plot.hooks.shutdown.push(function (plot, eventHolder){
|
109 |
+
$(plot.getPlaceholder()).unbind("plothover", plothover);
|
110 |
+
$(eventHolder).unbind("mousemove", mouseMove);
|
111 |
+
});
|
112 |
+
|
113 |
+
function mouseMove(e){
|
114 |
+
var pos = {};
|
115 |
+
pos.x = e.pageX;
|
116 |
+
pos.y = e.pageY;
|
117 |
+
plot.setTooltipPosition(pos);
|
118 |
+
}
|
119 |
+
|
120 |
+
function plothover(event, pos, item) {
|
121 |
+
// Simple distance formula.
|
122 |
+
var lineDistance = function (p1x, p1y, p2x, p2y) {
|
123 |
+
return Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y));
|
124 |
+
};
|
125 |
+
|
126 |
+
// Here is some voodoo magic for determining the distance to a line form a given point {x, y}.
|
127 |
+
var dotLineLength = function (x, y, x0, y0, x1, y1, o) {
|
128 |
+
if (o && !(o =
|
129 |
+
function (x, y, x0, y0, x1, y1) {
|
130 |
+
if (typeof x0 !== 'undefined') return { x: x0, y: y };
|
131 |
+
else if (typeof y0 !== 'undefined') return { x: x, y: y0 };
|
132 |
+
|
133 |
+
var left,
|
134 |
+
tg = -1 / ((y1 - y0) / (x1 - x0));
|
135 |
+
|
136 |
+
return {
|
137 |
+
x: left = (x1 * (x * tg - y + y0) + x0 * (x * -tg + y - y1)) / (tg * (x1 - x0) + y0 - y1),
|
138 |
+
y: tg * left - tg * x + y
|
139 |
+
};
|
140 |
+
} (x, y, x0, y0, x1, y1),
|
141 |
+
o.x >= Math.min(x0, x1) && o.x <= Math.max(x0, x1) && o.y >= Math.min(y0, y1) && o.y <= Math.max(y0, y1))
|
142 |
+
) {
|
143 |
+
var l1 = lineDistance(x, y, x0, y0), l2 = lineDistance(x, y, x1, y1);
|
144 |
+
return l1 > l2 ? l2 : l1;
|
145 |
+
} else {
|
146 |
+
var a = y0 - y1, b = x1 - x0, c = x0 * y1 - y0 * x1;
|
147 |
+
return Math.abs(a * x + b * y + c) / Math.sqrt(a * a + b * b);
|
148 |
+
}
|
149 |
+
};
|
150 |
+
|
151 |
+
if (item) {
|
152 |
+
plot.showTooltip(item, that.tooltipOptions.snap ? item : pos);
|
153 |
+
} else if (that.plotOptions.series.lines.show && that.tooltipOptions.lines === true) {
|
154 |
+
var maxDistance = that.plotOptions.grid.mouseActiveRadius;
|
155 |
+
|
156 |
+
var closestTrace = {
|
157 |
+
distance: maxDistance + 1
|
158 |
+
};
|
159 |
+
|
160 |
+
var ttPos = pos;
|
161 |
+
|
162 |
+
$.each(plot.getData(), function (i, series) {
|
163 |
+
var xBeforeIndex = 0,
|
164 |
+
xAfterIndex = -1;
|
165 |
+
|
166 |
+
// Our search here assumes our data is sorted via the x-axis.
|
167 |
+
// TODO: Improve efficiency somehow - search smaller sets of data.
|
168 |
+
for (var j = 1; j < series.data.length; j++) {
|
169 |
+
if (series.data[j - 1][0] <= pos.x && series.data[j][0] >= pos.x) {
|
170 |
+
xBeforeIndex = j - 1;
|
171 |
+
xAfterIndex = j;
|
172 |
+
}
|
173 |
+
}
|
174 |
+
|
175 |
+
if (xAfterIndex === -1) {
|
176 |
+
plot.hideTooltip();
|
177 |
+
return;
|
178 |
+
}
|
179 |
+
|
180 |
+
var pointPrev = { x: series.data[xBeforeIndex][0], y: series.data[xBeforeIndex][1] },
|
181 |
+
pointNext = { x: series.data[xAfterIndex][0], y: series.data[xAfterIndex][1] };
|
182 |
+
|
183 |
+
var distToLine = dotLineLength(series.xaxis.p2c(pos.x), series.yaxis.p2c(pos.y), series.xaxis.p2c(pointPrev.x),
|
184 |
+
series.yaxis.p2c(pointPrev.y), series.xaxis.p2c(pointNext.x), series.yaxis.p2c(pointNext.y), false);
|
185 |
+
|
186 |
+
if (distToLine < closestTrace.distance) {
|
187 |
+
|
188 |
+
var closestIndex = lineDistance(pointPrev.x, pointPrev.y, pos.x, pos.y) <
|
189 |
+
lineDistance(pos.x, pos.y, pointNext.x, pointNext.y) ? xBeforeIndex : xAfterIndex;
|
190 |
+
|
191 |
+
var pointSize = series.datapoints.pointsize;
|
192 |
+
|
193 |
+
// Calculate the point on the line vertically closest to our cursor.
|
194 |
+
var pointOnLine = [
|
195 |
+
pos.x,
|
196 |
+
pointPrev.y + ((pointNext.y - pointPrev.y) * ((pos.x - pointPrev.x) / (pointNext.x - pointPrev.x)))
|
197 |
+
];
|
198 |
+
|
199 |
+
var item = {
|
200 |
+
datapoint: pointOnLine,
|
201 |
+
dataIndex: closestIndex,
|
202 |
+
series: series,
|
203 |
+
seriesIndex: i
|
204 |
+
};
|
205 |
+
|
206 |
+
closestTrace = {
|
207 |
+
distance: distToLine,
|
208 |
+
item: item
|
209 |
+
};
|
210 |
+
|
211 |
+
if (that.tooltipOptions.snap) {
|
212 |
+
ttPos = {
|
213 |
+
pageX: series.xaxis.p2c(pointOnLine[0]),
|
214 |
+
pageY: series.yaxis.p2c(pointOnLine[1])
|
215 |
+
};
|
216 |
+
}
|
217 |
+
}
|
218 |
+
});
|
219 |
+
|
220 |
+
if (closestTrace.distance < maxDistance + 1)
|
221 |
+
plot.showTooltip(closestTrace.item, ttPos);
|
222 |
+
else
|
223 |
+
plot.hideTooltip();
|
224 |
+
} else {
|
225 |
+
plot.hideTooltip();
|
226 |
+
}
|
227 |
+
}
|
228 |
+
|
229 |
+
// Quick little function for setting the tooltip position.
|
230 |
+
plot.setTooltipPosition = function (pos) {
|
231 |
+
var $tip = that.getDomElement();
|
232 |
+
|
233 |
+
var totalTipWidth = $tip.outerWidth() + that.tooltipOptions.shifts.x;
|
234 |
+
var totalTipHeight = $tip.outerHeight() + that.tooltipOptions.shifts.y;
|
235 |
+
if ((pos.x - $(window).scrollLeft()) > ($(window)[that.wfunc]() - totalTipWidth)) {
|
236 |
+
pos.x -= totalTipWidth;
|
237 |
+
}
|
238 |
+
if ((pos.y - $(window).scrollTop()) > ($(window)[that.hfunc]() - totalTipHeight)) {
|
239 |
+
pos.y -= totalTipHeight;
|
240 |
+
}
|
241 |
+
|
242 |
+
/*
|
243 |
+
The section applies the new positioning ONLY if pos.x and pos.y
|
244 |
+
are numbers. If they are undefined or not a number, use the last
|
245 |
+
known numerical position. This hack fixes a bug that kept pie
|
246 |
+
charts from keeping their tooltip positioning.
|
247 |
+
*/
|
248 |
+
|
249 |
+
if (isNaN(pos.x)) {
|
250 |
+
that.tipPosition.x = that.tipPosition.xPrev;
|
251 |
+
}
|
252 |
+
else {
|
253 |
+
that.tipPosition.x = pos.x;
|
254 |
+
that.tipPosition.xPrev = pos.x;
|
255 |
+
}
|
256 |
+
if (isNaN(pos.y)) {
|
257 |
+
that.tipPosition.y = that.tipPosition.yPrev;
|
258 |
+
}
|
259 |
+
else {
|
260 |
+
that.tipPosition.y = pos.y;
|
261 |
+
that.tipPosition.yPrev = pos.y;
|
262 |
+
}
|
263 |
+
|
264 |
+
};
|
265 |
+
|
266 |
+
// Quick little function for showing the tooltip.
|
267 |
+
plot.showTooltip = function (target, position, targetPosition) {
|
268 |
+
var $tip = that.getDomElement();
|
269 |
+
|
270 |
+
// convert tooltip content template to real tipText
|
271 |
+
var tipText = that.stringFormat(that.tooltipOptions.content, target);
|
272 |
+
if (tipText === '')
|
273 |
+
return;
|
274 |
+
|
275 |
+
$tip.html(tipText);
|
276 |
+
plot.setTooltipPosition({ x: position.pageX, y: position.pageY });
|
277 |
+
$tip.css({
|
278 |
+
left: that.tipPosition.x + that.tooltipOptions.shifts.x,
|
279 |
+
top: that.tipPosition.y + that.tooltipOptions.shifts.y
|
280 |
+
}).show();
|
281 |
+
|
282 |
+
// run callback
|
283 |
+
if (typeof that.tooltipOptions.onHover === 'function') {
|
284 |
+
that.tooltipOptions.onHover(target, $tip);
|
285 |
+
}
|
286 |
+
};
|
287 |
+
|
288 |
+
// Quick little function for hiding the tooltip.
|
289 |
+
plot.hideTooltip = function () {
|
290 |
+
that.getDomElement().hide().html('');
|
291 |
+
};
|
292 |
+
};
|
293 |
+
|
294 |
+
/**
|
295 |
+
* get or create tooltip DOM element
|
296 |
+
* @return jQuery object
|
297 |
+
*/
|
298 |
+
FlotTooltip.prototype.getDomElement = function () {
|
299 |
+
var $tip = $('.' + this.tooltipOptions.cssClass);
|
300 |
+
|
301 |
+
if( $tip.length === 0 ){
|
302 |
+
$tip = $('<div />').addClass(this.tooltipOptions.cssClass);
|
303 |
+
$tip.appendTo('body').hide().css({position: 'absolute'});
|
304 |
+
|
305 |
+
if(this.tooltipOptions.defaultTheme) {
|
306 |
+
$tip.css({
|
307 |
+
'background': '#fff',
|
308 |
+
'z-index': '1040',
|
309 |
+
'padding': '0.4em 0.6em',
|
310 |
+
'border-radius': '0.5em',
|
311 |
+
'font-size': '0.8em',
|
312 |
+
'border': '1px solid #111',
|
313 |
+
'display': 'none',
|
314 |
+
'white-space': 'nowrap'
|
315 |
+
});
|
316 |
+
}
|
317 |
+
}
|
318 |
+
|
319 |
+
return $tip;
|
320 |
+
};
|
321 |
+
|
322 |
+
/**
|
323 |
+
* core function, create tooltip content
|
324 |
+
* @param {string} content - template with tooltip content
|
325 |
+
* @param {object} item - Flot item
|
326 |
+
* @return {string} real tooltip content for current item
|
327 |
+
*/
|
328 |
+
FlotTooltip.prototype.stringFormat = function (content, item) {
|
329 |
+
var percentPattern = /%p\.{0,1}(\d{0,})/;
|
330 |
+
var seriesPattern = /%s/;
|
331 |
+
var colorPattern = /%c/;
|
332 |
+
var xLabelPattern = /%lx/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded
|
333 |
+
var yLabelPattern = /%ly/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded
|
334 |
+
var xPattern = /%x\.{0,1}(\d{0,})/;
|
335 |
+
var yPattern = /%y\.{0,1}(\d{0,})/;
|
336 |
+
var xPatternWithoutPrecision = "%x";
|
337 |
+
var yPatternWithoutPrecision = "%y";
|
338 |
+
var customTextPattern = "%ct";
|
339 |
+
var nPiePattern = "%n";
|
340 |
+
|
341 |
+
var x, y, customText, p, n;
|
342 |
+
|
343 |
+
// for threshold plugin we need to read data from different place
|
344 |
+
if (typeof item.series.threshold !== "undefined") {
|
345 |
+
x = item.datapoint[0];
|
346 |
+
y = item.datapoint[1];
|
347 |
+
customText = item.datapoint[2];
|
348 |
+
}
|
349 |
+
|
350 |
+
// for CurvedLines plugin we need to read data from different place
|
351 |
+
else if (typeof item.series.curvedLines !== "undefined") {
|
352 |
+
x = item.datapoint[0];
|
353 |
+
y = item.datapoint[1];
|
354 |
+
}
|
355 |
+
|
356 |
+
else if (typeof item.series.lines !== "undefined" && item.series.lines.steps) {
|
357 |
+
x = item.series.datapoints.points[item.dataIndex * 2];
|
358 |
+
y = item.series.datapoints.points[item.dataIndex * 2 + 1];
|
359 |
+
// TODO: where to find custom text in this variant?
|
360 |
+
customText = "";
|
361 |
+
} else {
|
362 |
+
x = item.series.data[item.dataIndex][0];
|
363 |
+
y = item.series.data[item.dataIndex][1];
|
364 |
+
customText = item.series.data[item.dataIndex][2];
|
365 |
+
}
|
366 |
+
|
367 |
+
// I think this is only in case of threshold plugin
|
368 |
+
if (item.series.label === null && item.series.originSeries) {
|
369 |
+
item.series.label = item.series.originSeries.label;
|
370 |
+
}
|
371 |
+
|
372 |
+
// if it is a function callback get the content string
|
373 |
+
if (typeof(content) === 'function') {
|
374 |
+
content = content(item.series.label, x, y, item);
|
375 |
+
}
|
376 |
+
|
377 |
+
// the case where the passed content is equal to false
|
378 |
+
if (typeof(content) === 'boolean' && !content) {
|
379 |
+
return '';
|
380 |
+
}
|
381 |
+
|
382 |
+
/* replacement of %ct and other multi-character templates must
|
383 |
+
precede the replacement of single-character templates
|
384 |
+
to avoid conflict between '%c' and '%ct' and similar substrings
|
385 |
+
*/
|
386 |
+
if (customText)
|
387 |
+
content = content.replace(customTextPattern, customText);
|
388 |
+
|
389 |
+
// percent match for pie charts and stacked percent
|
390 |
+
if (typeof (item.series.percent) !== 'undefined') {
|
391 |
+
p = item.series.percent;
|
392 |
+
} else if (typeof (item.series.percents) !== 'undefined') {
|
393 |
+
p = item.series.percents[item.dataIndex];
|
394 |
+
}
|
395 |
+
if (typeof p === 'number') {
|
396 |
+
content = this.adjustValPrecision(percentPattern, content, p);
|
397 |
+
}
|
398 |
+
|
399 |
+
// replace %n with number of items represented by slice in pie charts
|
400 |
+
if (item.series.hasOwnProperty('pie')) {
|
401 |
+
if (typeof (item.series.data[0][1] !== 'undefined')) {
|
402 |
+
n = item.series.data[0][1];
|
403 |
+
}
|
404 |
+
}
|
405 |
+
if (typeof n === 'number') {
|
406 |
+
content = content.replace(nPiePattern, n);
|
407 |
+
}
|
408 |
+
|
409 |
+
// series match
|
410 |
+
if (typeof(item.series.label) !== 'undefined') {
|
411 |
+
content = content.replace(seriesPattern, item.series.label);
|
412 |
+
} else {
|
413 |
+
//remove %s if label is undefined
|
414 |
+
content = content.replace(seriesPattern, "");
|
415 |
+
}
|
416 |
+
|
417 |
+
// color match
|
418 |
+
if (typeof(item.series.color) !== 'undefined') {
|
419 |
+
content = content.replace(colorPattern, item.series.color);
|
420 |
+
} else {
|
421 |
+
//remove %s if color is undefined
|
422 |
+
content = content.replace(colorPattern, "");
|
423 |
+
}
|
424 |
+
|
425 |
+
// x axis label match
|
426 |
+
if (this.hasAxisLabel('xaxis', item)) {
|
427 |
+
content = content.replace(xLabelPattern, item.series.xaxis.options.axisLabel);
|
428 |
+
} else {
|
429 |
+
//remove %lx if axis label is undefined or axislabels plugin not present
|
430 |
+
content = content.replace(xLabelPattern, "");
|
431 |
+
}
|
432 |
+
|
433 |
+
// y axis label match
|
434 |
+
if (this.hasAxisLabel('yaxis', item)) {
|
435 |
+
content = content.replace(yLabelPattern, item.series.yaxis.options.axisLabel);
|
436 |
+
} else {
|
437 |
+
//remove %ly if axis label is undefined or axislabels plugin not present
|
438 |
+
content = content.replace(yLabelPattern, "");
|
439 |
+
}
|
440 |
+
|
441 |
+
// time mode axes with custom dateFormat
|
442 |
+
if (this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) {
|
443 |
+
content = content.replace(xPattern, this.timestampToDate(x, this.tooltipOptions.xDateFormat, item.series.xaxis.options));
|
444 |
+
}
|
445 |
+
if (this.isTimeMode('yaxis', item) && this.isYDateFormat(item)) {
|
446 |
+
content = content.replace(yPattern, this.timestampToDate(y, this.tooltipOptions.yDateFormat, item.series.yaxis.options));
|
447 |
+
}
|
448 |
+
|
449 |
+
// set precision if defined
|
450 |
+
if (typeof x === 'number') {
|
451 |
+
content = this.adjustValPrecision(xPattern, content, x);
|
452 |
+
}
|
453 |
+
if (typeof y === 'number') {
|
454 |
+
content = this.adjustValPrecision(yPattern, content, y);
|
455 |
+
}
|
456 |
+
|
457 |
+
// change x from number to given label, if given
|
458 |
+
if (typeof item.series.xaxis.ticks !== 'undefined') {
|
459 |
+
|
460 |
+
var ticks;
|
461 |
+
if (this.hasRotatedXAxisTicks(item)) {
|
462 |
+
// xaxis.ticks will be an empty array if tickRotor is being used, but the values are available in rotatedTicks
|
463 |
+
ticks = 'rotatedTicks';
|
464 |
+
} else {
|
465 |
+
ticks = 'ticks';
|
466 |
+
}
|
467 |
+
|
468 |
+
// see https://github.com/krzysu/flot.tooltip/issues/65
|
469 |
+
var tickIndex = item.dataIndex + item.seriesIndex;
|
470 |
+
|
471 |
+
for (var xIndex in item.series.xaxis[ticks]) {
|
472 |
+
if (item.series.xaxis[ticks].hasOwnProperty(tickIndex) && !this.isTimeMode('xaxis', item)) {
|
473 |
+
var valueX = (this.isCategoriesMode('xaxis', item)) ? item.series.xaxis[ticks][tickIndex].label : item.series.xaxis[ticks][tickIndex].v;
|
474 |
+
if (valueX === x) {
|
475 |
+
content = content.replace(xPattern, item.series.xaxis[ticks][tickIndex].label);
|
476 |
+
}
|
477 |
+
}
|
478 |
+
}
|
479 |
+
}
|
480 |
+
|
481 |
+
// change y from number to given label, if given
|
482 |
+
if (typeof item.series.yaxis.ticks !== 'undefined') {
|
483 |
+
for (var yIndex in item.series.yaxis.ticks) {
|
484 |
+
if (item.series.yaxis.ticks.hasOwnProperty(yIndex)) {
|
485 |
+
var valueY = (this.isCategoriesMode('yaxis', item)) ? item.series.yaxis.ticks[yIndex].label : item.series.yaxis.ticks[yIndex].v;
|
486 |
+
if (valueY === y) {
|
487 |
+
content = content.replace(yPattern, item.series.yaxis.ticks[yIndex].label);
|
488 |
+
}
|
489 |
+
}
|
490 |
+
}
|
491 |
+
}
|
492 |
+
|
493 |
+
// if no value customization, use tickFormatter by default
|
494 |
+
if (typeof item.series.xaxis.tickFormatter !== 'undefined') {
|
495 |
+
//escape dollar
|
496 |
+
content = content.replace(xPatternWithoutPrecision, item.series.xaxis.tickFormatter(x, item.series.xaxis).replace(/\$/g, '$$'));
|
497 |
+
}
|
498 |
+
if (typeof item.series.yaxis.tickFormatter !== 'undefined') {
|
499 |
+
//escape dollar
|
500 |
+
content = content.replace(yPatternWithoutPrecision, item.series.yaxis.tickFormatter(y, item.series.yaxis).replace(/\$/g, '$$'));
|
501 |
+
}
|
502 |
+
|
503 |
+
return content;
|
504 |
+
};
|
505 |
+
|
506 |
+
// helpers just for readability
|
507 |
+
FlotTooltip.prototype.isTimeMode = function (axisName, item) {
|
508 |
+
return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'time');
|
509 |
+
};
|
510 |
+
|
511 |
+
FlotTooltip.prototype.isXDateFormat = function (item) {
|
512 |
+
return (typeof this.tooltipOptions.xDateFormat !== 'undefined' && this.tooltipOptions.xDateFormat !== null);
|
513 |
+
};
|
514 |
+
|
515 |
+
FlotTooltip.prototype.isYDateFormat = function (item) {
|
516 |
+
return (typeof this.tooltipOptions.yDateFormat !== 'undefined' && this.tooltipOptions.yDateFormat !== null);
|
517 |
+
};
|
518 |
+
|
519 |
+
FlotTooltip.prototype.isCategoriesMode = function (axisName, item) {
|
520 |
+
return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'categories');
|
521 |
+
};
|
522 |
+
|
523 |
+
//
|
524 |
+
FlotTooltip.prototype.timestampToDate = function (tmst, dateFormat, options) {
|
525 |
+
var theDate = $.plot.dateGenerator(tmst, options);
|
526 |
+
return $.plot.formatDate(theDate, dateFormat, this.tooltipOptions.monthNames, this.tooltipOptions.dayNames);
|
527 |
+
};
|
528 |
+
|
529 |
+
//
|
530 |
+
FlotTooltip.prototype.adjustValPrecision = function (pattern, content, value) {
|
531 |
+
|
532 |
+
var precision;
|
533 |
+
var matchResult = content.match(pattern);
|
534 |
+
if( matchResult !== null ) {
|
535 |
+
if(RegExp.$1 !== '') {
|
536 |
+
precision = RegExp.$1;
|
537 |
+
value = value.toFixed(precision);
|
538 |
+
|
539 |
+
// only replace content if precision exists, in other case use thickformater
|
540 |
+
content = content.replace(pattern, value);
|
541 |
+
}
|
542 |
+
}
|
543 |
+
return content;
|
544 |
+
};
|
545 |
+
|
546 |
+
// other plugins detection below
|
547 |
+
|
548 |
+
// check if flot-axislabels plugin (https://github.com/markrcote/flot-axislabels) is used and that an axis label is given
|
549 |
+
FlotTooltip.prototype.hasAxisLabel = function (axisName, item) {
|
550 |
+
return ($.inArray('axisLabels', this.plotPlugins) !== -1 && typeof item.series[axisName].options.axisLabel !== 'undefined' && item.series[axisName].options.axisLabel.length > 0);
|
551 |
+
};
|
552 |
+
|
553 |
+
// check whether flot-tickRotor, a plugin which allows rotation of X-axis ticks, is being used
|
554 |
+
FlotTooltip.prototype.hasRotatedXAxisTicks = function (item) {
|
555 |
+
return ($.inArray('tickRotor',this.plotPlugins) !== -1 && typeof item.series.xaxis.rotatedTicks !== 'undefined');
|
556 |
+
};
|
557 |
+
|
558 |
+
//
|
559 |
+
var init = function (plot) {
|
560 |
+
new FlotTooltip(plot);
|
561 |
+
};
|
562 |
+
|
563 |
+
// define Flot plugin
|
564 |
+
$.plot.plugins.push({
|
565 |
+
init: init,
|
566 |
+
options: defaultOptions,
|
567 |
+
name: 'tooltip',
|
568 |
+
version: '0.8.5'
|
569 |
+
});
|
570 |
+
|
571 |
+
})(jQuery);
|
3.0.14/assets/admin/scripts/jquery-flot.js
ADDED
@@ -0,0 +1,3601 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* Javascript plotting library for jQuery, version 0.8.3.
|
2 |
+
|
3 |
+
Copyright (c) 2007-2014 IOLA and Ole Laursen.
|
4 |
+
Licensed under the MIT license.
|
5 |
+
|
6 |
+
*/
|
7 |
+
|
8 |
+
// first an inline dependency, jquery.colorhelpers.js, we inline it here
|
9 |
+
// for convenience
|
10 |
+
|
11 |
+
/* Plugin for jQuery for working with colors.
|
12 |
+
*
|
13 |
+
* Version 1.1.
|
14 |
+
*
|
15 |
+
* Inspiration from jQuery color animation plugin by John Resig.
|
16 |
+
*
|
17 |
+
* Released under the MIT license by Ole Laursen, October 2009.
|
18 |
+
*
|
19 |
+
* Examples:
|
20 |
+
*
|
21 |
+
* $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()
|
22 |
+
* var c = $.color.extract($("#mydiv"), 'background-color');
|
23 |
+
* console.log(c.r, c.g, c.b, c.a);
|
24 |
+
* $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"
|
25 |
+
*
|
26 |
+
* Note that .scale() and .add() return the same modified object
|
27 |
+
* instead of making a new one.
|
28 |
+
*
|
29 |
+
* V. 1.1: Fix error handling so e.g. parsing an empty string does
|
30 |
+
* produce a color rather than just crashing.
|
31 |
+
*/
|
32 |
+
(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);
|
33 |
+
|
34 |
+
// the actual Flot code
|
35 |
+
(function($) {
|
36 |
+
|
37 |
+
// Cache the prototype hasOwnProperty for faster access
|
38 |
+
|
39 |
+
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
40 |
+
|
41 |
+
// A shim to provide 'detach' to jQuery versions prior to 1.4. Using a DOM
|
42 |
+
// operation produces the same effect as detach, i.e. removing the element
|
43 |
+
// without touching its jQuery data.
|
44 |
+
|
45 |
+
// Do not merge this into Flot 0.9, since it requires jQuery 1.4.4+.
|
46 |
+
|
47 |
+
if (!$.fn.detach) {
|
48 |
+
$.fn.detach = function() {
|
49 |
+
return this.each(function() {
|
50 |
+
if (this.parentNode) {
|
51 |
+
this.parentNode.removeChild( this );
|
52 |
+
}
|
53 |
+
});
|
54 |
+
};
|
55 |
+
}
|
56 |
+
|
57 |
+
///////////////////////////////////////////////////////////////////////////
|
58 |
+
// The Canvas object is a wrapper around an HTML5 <canvas> tag.
|
59 |
+
//
|
60 |
+
// @constructor
|
61 |
+
// @param {string} cls List of classes to apply to the canvas.
|
62 |
+
// @param {element} container Element onto which to append the canvas.
|
63 |
+
//
|
64 |
+
// Requiring a container is a little iffy, but unfortunately canvas
|
65 |
+
// operations don't work unless the canvas is attached to the DOM.
|
66 |
+
|
67 |
+
function Canvas(cls, container) {
|
68 |
+
|
69 |
+
var element = container.children("." + cls)[0];
|
70 |
+
|
71 |
+
if (element == null) {
|
72 |
+
|
73 |
+
element = document.createElement("canvas");
|
74 |
+
element.className = cls;
|
75 |
+
|
76 |
+
$(element).css({ direction: "ltr", position: "absolute", left: 0, top: 0 })
|
77 |
+
.appendTo(container);
|
78 |
+
|
79 |
+
// If HTML5 Canvas isn't available, fall back to [Ex|Flash]canvas
|
80 |
+
|
81 |
+
if (!element.getContext) {
|
82 |
+
if (window.G_vmlCanvasManager) {
|
83 |
+
element = window.G_vmlCanvasManager.initElement(element);
|
84 |
+
} else {
|
85 |
+
throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.");
|
86 |
+
}
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
this.element = element;
|
91 |
+
|
92 |
+
var context = this.context = element.getContext("2d");
|
93 |
+
|
94 |
+
// Determine the screen's ratio of physical to device-independent
|
95 |
+
// pixels. This is the ratio between the canvas width that the browser
|
96 |
+
// advertises and the number of pixels actually present in that space.
|
97 |
+
|
98 |
+
// The iPhone 4, for example, has a device-independent width of 320px,
|
99 |
+
// but its screen is actually 640px wide. It therefore has a pixel
|
100 |
+
// ratio of 2, while most normal devices have a ratio of 1.
|
101 |
+
|
102 |
+
var devicePixelRatio = window.devicePixelRatio || 1,
|
103 |
+
backingStoreRatio =
|
104 |
+
context.webkitBackingStorePixelRatio ||
|
105 |
+
context.mozBackingStorePixelRatio ||
|
106 |
+
context.msBackingStorePixelRatio ||
|
107 |
+
context.oBackingStorePixelRatio ||
|
108 |
+
context.backingStorePixelRatio || 1;
|
109 |
+
|
110 |
+
this.pixelRatio = devicePixelRatio / backingStoreRatio;
|
111 |
+
|
112 |
+
// Size the canvas to match the internal dimensions of its container
|
113 |
+
|
114 |
+
this.resize(container.width(), container.height());
|
115 |
+
|
116 |
+
// Collection of HTML div layers for text overlaid onto the canvas
|
117 |
+
|
118 |
+
this.textContainer = null;
|
119 |
+
this.text = {};
|
120 |
+
|
121 |
+
// Cache of text fragments and metrics, so we can avoid expensively
|
122 |
+
// re-calculating them when the plot is re-rendered in a loop.
|
123 |
+
|
124 |
+
this._textCache = {};
|
125 |
+
}
|
126 |
+
|
127 |
+
// Resizes the canvas to the given dimensions.
|
128 |
+
//
|
129 |
+
// @param {number} width New width of the canvas, in pixels.
|
130 |
+
// @param {number} width New height of the canvas, in pixels.
|
131 |
+
|
132 |
+
Canvas.prototype.resize = function(width, height) {
|
133 |
+
|
134 |
+
if (width <= 0 || height <= 0) {
|
135 |
+
throw new Error("Invalid dimensions for plot, width = " + width + ", height = " + height);
|
136 |
+
}
|
137 |
+
|
138 |
+
var element = this.element,
|
139 |
+
context = this.context,
|
140 |
+
pixelRatio = this.pixelRatio;
|
141 |
+
|
142 |
+
// Resize the canvas, increasing its density based on the display's
|
143 |
+
// pixel ratio; basically giving it more pixels without increasing the
|
144 |
+
// size of its element, to take advantage of the fact that retina
|
145 |
+
// displays have that many more pixels in the same advertised space.
|
146 |
+
|
147 |
+
// Resizing should reset the state (excanvas seems to be buggy though)
|
148 |
+
|
149 |
+
if (this.width != width) {
|
150 |
+
element.width = width * pixelRatio;
|
151 |
+
element.style.width = width + "px";
|
152 |
+
this.width = width;
|
153 |
+
}
|
154 |
+
|
155 |
+
if (this.height != height) {
|
156 |
+
element.height = height * pixelRatio;
|
157 |
+
element.style.height = height + "px";
|
158 |
+
this.height = height;
|
159 |
+
}
|
160 |
+
|
161 |
+
// Save the context, so we can reset in case we get replotted. The
|
162 |
+
// restore ensure that we're really back at the initial state, and
|
163 |
+
// should be safe even if we haven't saved the initial state yet.
|
164 |
+
|
165 |
+
context.restore();
|
166 |
+
context.save();
|
167 |
+
|
168 |
+
// Scale the coordinate space to match the display density; so even though we
|
169 |
+
// may have twice as many pixels, we still want lines and other drawing to
|
170 |
+
// appear at the same size; the extra pixels will just make them crisper.
|
171 |
+
|
172 |
+
context.scale(pixelRatio, pixelRatio);
|
173 |
+
};
|
174 |
+
|
175 |
+
// Clears the entire canvas area, not including any overlaid HTML text
|
176 |
+
|
177 |
+
Canvas.prototype.clear = function() {
|
178 |
+
this.context.clearRect(0, 0, this.width, this.height);
|
179 |
+
};
|
180 |
+
|
181 |
+
// Finishes rendering the canvas, including managing the text overlay.
|
182 |
+
|
183 |
+
Canvas.prototype.render = function() {
|
184 |
+
|
185 |
+
var cache = this._textCache;
|
186 |
+
|
187 |
+
// For each text layer, add elements marked as active that haven't
|
188 |
+
// already been rendered, and remove those that are no longer active.
|
189 |
+
|
190 |
+
for (var layerKey in cache) {
|
191 |
+
if (hasOwnProperty.call(cache, layerKey)) {
|
192 |
+
|
193 |
+
var layer = this.getTextLayer(layerKey),
|
194 |
+
layerCache = cache[layerKey];
|
195 |
+
|
196 |
+
layer.hide();
|
197 |
+
|
198 |
+
for (var styleKey in layerCache) {
|
199 |
+
if (hasOwnProperty.call(layerCache, styleKey)) {
|
200 |
+
var styleCache = layerCache[styleKey];
|
201 |
+
for (var key in styleCache) {
|
202 |
+
if (hasOwnProperty.call(styleCache, key)) {
|
203 |
+
|
204 |
+
var positions = styleCache[key].positions;
|
205 |
+
|
206 |
+
for (var i = 0, position; position = positions[i]; i++) {
|
207 |
+
if (position.active) {
|
208 |
+
if (!position.rendered) {
|
209 |
+
layer.append(position.element);
|
210 |
+
position.rendered = true;
|
211 |
+
}
|
212 |
+
} else {
|
213 |
+
positions.splice(i--, 1);
|
214 |
+
if (position.rendered) {
|
215 |
+
position.element.detach();
|
216 |
+
}
|
217 |
+
}
|
218 |
+
}
|
219 |
+
|
220 |
+
if (positions.length == 0) {
|
221 |
+
delete styleCache[key];
|
222 |
+
}
|
223 |
+
}
|
224 |
+
}
|
225 |
+
}
|
226 |
+
}
|
227 |
+
|
228 |
+
layer.show();
|
229 |
+
}
|
230 |
+
}
|
231 |
+
};
|
232 |
+
|
233 |
+
// Creates (if necessary) and returns the text overlay container.
|
234 |
+
//
|
235 |
+
// @param {string} classes String of space-separated CSS classes used to
|
236 |
+
// uniquely identify the text layer.
|
237 |
+
// @return {object} The jQuery-wrapped text-layer div.
|
238 |
+
|
239 |
+
Canvas.prototype.getTextLayer = function(classes) {
|
240 |
+
|
241 |
+
var layer = this.text[classes];
|
242 |
+
|
243 |
+
// Create the text layer if it doesn't exist
|
244 |
+
|
245 |
+
if (layer == null) {
|
246 |
+
|
247 |
+
// Create the text layer container, if it doesn't exist
|
248 |
+
|
249 |
+
if (this.textContainer == null) {
|
250 |
+
this.textContainer = $("<div class='flot-text'></div>")
|
251 |
+
.css({
|
252 |
+
position: "absolute",
|
253 |
+
top: 0,
|
254 |
+
left: 0,
|
255 |
+
bottom: 0,
|
256 |
+
right: 0,
|
257 |
+
'font-size': "smaller",
|
258 |
+
color: "#545454"
|
259 |
+
})
|
260 |
+
.insertAfter(this.element);
|
261 |
+
}
|
262 |
+
|
263 |
+
layer = this.text[classes] = $("<div></div>")
|
264 |
+
.addClass(classes)
|
265 |
+
.css({
|
266 |
+
position: "absolute",
|
267 |
+
top: 0,
|
268 |
+
left: 0,
|
269 |
+
bottom: 0,
|
270 |
+
right: 0
|
271 |
+
})
|
272 |
+
.appendTo(this.textContainer);
|
273 |
+
}
|
274 |
+
|
275 |
+
return layer;
|
276 |
+
};
|
277 |
+
|
278 |
+
// Creates (if necessary) and returns a text info object.
|
279 |
+
//
|
280 |
+
// The object looks like this:
|
281 |
+
//
|
282 |
+
// {
|
283 |
+
// width: Width of the text's wrapper div.
|
284 |
+
// height: Height of the text's wrapper div.
|
285 |
+
// element: The jQuery-wrapped HTML div containing the text.
|
286 |
+
// positions: Array of positions at which this text is drawn.
|
287 |
+
// }
|
288 |
+
//
|
289 |
+
// The positions array contains objects that look like this:
|
290 |
+
//
|
291 |
+
// {
|
292 |
+
// active: Flag indicating whether the text should be visible.
|
293 |
+
// rendered: Flag indicating whether the text is currently visible.
|
294 |
+
// element: The jQuery-wrapped HTML div containing the text.
|
295 |
+
// x: X coordinate at which to draw the text.
|
296 |
+
// y: Y coordinate at which to draw the text.
|
297 |
+
// }
|
298 |
+
//
|
299 |
+
// Each position after the first receives a clone of the original element.
|
300 |
+
//
|
301 |
+
// The idea is that that the width, height, and general 'identity' of the
|
302 |
+
// text is constant no matter where it is placed; the placements are a
|
303 |
+
// secondary property.
|
304 |
+
//
|
305 |
+
// Canvas maintains a cache of recently-used text info objects; getTextInfo
|
306 |
+
// either returns the cached element or creates a new entry.
|
307 |
+
//
|
308 |
+
// @param {string} layer A string of space-separated CSS classes uniquely
|
309 |
+
// identifying the layer containing this text.
|
310 |
+
// @param {string} text Text string to retrieve info for.
|
311 |
+
// @param {(string|object)=} font Either a string of space-separated CSS
|
312 |
+
// classes or a font-spec object, defining the text's font and style.
|
313 |
+
// @param {number=} angle Angle at which to rotate the text, in degrees.
|
314 |
+
// Angle is currently unused, it will be implemented in the future.
|
315 |
+
// @param {number=} width Maximum width of the text before it wraps.
|
316 |
+
// @return {object} a text info object.
|
317 |
+
|
318 |
+
Canvas.prototype.getTextInfo = function(layer, text, font, angle, width) {
|
319 |
+
|
320 |
+
var textStyle, layerCache, styleCache, info;
|
321 |
+
|
322 |
+
// Cast the value to a string, in case we were given a number or such
|
323 |
+
|
324 |
+
text = "" + text;
|
325 |
+
|
326 |
+
// If the font is a font-spec object, generate a CSS font definition
|
327 |
+
|
328 |
+
if (typeof font === "object") {
|
329 |
+
textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px/" + font.lineHeight + "px " + font.family;
|
330 |
+
} else {
|
331 |
+
textStyle = font;
|
332 |
+
}
|
333 |
+
|
334 |
+
// Retrieve (or create) the cache for the text's layer and styles
|
335 |
+
|
336 |
+
layerCache = this._textCache[layer];
|
337 |
+
|
338 |
+
if (layerCache == null) {
|
339 |
+
layerCache = this._textCache[layer] = {};
|
340 |
+
}
|
341 |
+
|
342 |
+
styleCache = layerCache[textStyle];
|
343 |
+
|
344 |
+
if (styleCache == null) {
|
345 |
+
styleCache = layerCache[textStyle] = {};
|
346 |
+
}
|
347 |
+
|
348 |
+
info = styleCache[text];
|
349 |
+
|
350 |
+
// If we can't find a matching element in our cache, create a new one
|
351 |
+
|
352 |
+
if (info == null) {
|
353 |
+
|
354 |
+
var element = $("<div></div>").html(text)
|
355 |
+
.css({
|
356 |
+
position: "absolute",
|
357 |
+
'max-width': width,
|
358 |
+
top: -9999
|
359 |
+
})
|
360 |
+
.appendTo(this.getTextLayer(layer));
|
361 |
+
|
362 |
+
if (typeof font === "object") {
|
363 |
+
element.css({
|
364 |
+
font: textStyle,
|
365 |
+
color: font.color
|
366 |
+
});
|
367 |
+
} else if (typeof font === "string") {
|
368 |
+
element.addClass(font);
|
369 |
+
}
|
370 |
+
|
371 |
+
info = styleCache[text] = {
|
372 |
+
width: element.outerWidth(true),
|
373 |
+
height: element.outerHeight(true),
|
374 |
+
element: element,
|
375 |
+
positions: []
|
376 |
+
};
|
377 |
+
|
378 |
+
element.detach();
|
379 |
+
}
|
380 |
+
|
381 |
+
return info;
|
382 |
+
};
|
383 |
+
|
384 |
+
// Adds a text string to the canvas text overlay.
|
385 |
+
//
|
386 |
+
// The text isn't drawn immediately; it is marked as rendering, which will
|
387 |
+
// result in its addition to the canvas on the next render pass.
|
388 |
+
//
|
389 |
+
// @param {string} layer A string of space-separated CSS classes uniquely
|
390 |
+
// identifying the layer containing this text.
|
391 |
+
// @param {number} x X coordinate at which to draw the text.
|
392 |
+
// @param {number} y Y coordinate at which to draw the text.
|
393 |
+
// @param {string} text Text string to draw.
|
394 |
+
// @param {(string|object)=} font Either a string of space-separated CSS
|
395 |
+
// classes or a font-spec object, defining the text's font and style.
|
396 |
+
// @param {number=} angle Angle at which to rotate the text, in degrees.
|
397 |
+
// Angle is currently unused, it will be implemented in the future.
|
398 |
+
// @param {number=} width Maximum width of the text before it wraps.
|
399 |
+
// @param {string=} halign Horizontal alignment of the text; either "left",
|
400 |
+
// "center" or "right".
|
401 |
+
// @param {string=} valign Vertical alignment of the text; either "top",
|
402 |
+
// "middle" or "bottom".
|
403 |
+
|
404 |
+
Canvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {
|
405 |
+
|
406 |
+
var info = this.getTextInfo(layer, text, font, angle, width),
|
407 |
+
positions = info.positions;
|
408 |
+
|
409 |
+
// Tweak the div's position to match the text's alignment
|
410 |
+
|
411 |
+
if (halign == "center") {
|
412 |
+
x -= info.width / 2;
|
413 |
+
} else if (halign == "right") {
|
414 |
+
x -= info.width;
|
415 |
+
}
|
416 |
+
|
417 |
+
if (valign == "middle") {
|
418 |
+
y -= info.height / 2;
|
419 |
+
} else if (valign == "bottom") {
|
420 |
+
y -= info.height;
|
421 |
+
}
|
422 |
+
|
423 |
+
// Determine whether this text already exists at this position.
|
424 |
+
// If so, mark it for inclusion in the next render pass.
|
425 |
+
|
426 |
+
for (var i = 0, position; position = positions[i]; i++) {
|
427 |
+
if (position.x == x && position.y == y) {
|
428 |
+
position.active = true;
|
429 |
+
return;
|
430 |
+
}
|
431 |
+
}
|
432 |
+
|
433 |
+
// If the text doesn't exist at this position, create a new entry
|
434 |
+
|
435 |
+
// For the very first position we'll re-use the original element,
|
436 |
+
// while for subsequent ones we'll clone it.
|
437 |
+
|
438 |
+
position = {
|
439 |
+
active: true,
|
440 |
+
rendered: false,
|
441 |
+
element: positions.length ? info.element.clone() : info.element,
|
442 |
+
x: x,
|
443 |
+
y: y
|
444 |
+
};
|
445 |
+
|
446 |
+
positions.push(position);
|
447 |
+
|
448 |
+
// Move the element to its final position within the container
|
449 |
+
|
450 |
+
position.element.css({
|
451 |
+
top: Math.round(y),
|
452 |
+
left: Math.round(x),
|
453 |
+
'text-align': halign // In case the text wraps
|
454 |
+
});
|
455 |
+
};
|
456 |
+
|
457 |
+
// Removes one or more text strings from the canvas text overlay.
|
458 |
+
//
|
459 |
+
// If no parameters are given, all text within the layer is removed.
|
460 |
+
//
|
461 |
+
// Note that the text is not immediately removed; it is simply marked as
|
462 |
+
// inactive, which will result in its removal on the next render pass.
|
463 |
+
// This avoids the performance penalty for 'clear and redraw' behavior,
|
464 |
+
// where we potentially get rid of all text on a layer, but will likely
|
465 |
+
// add back most or all of it later, as when redrawing axes, for example.
|
466 |
+
//
|
467 |
+
// @param {string} layer A string of space-separated CSS classes uniquely
|
468 |
+
// identifying the layer containing this text.
|
469 |
+
// @param {number=} x X coordinate of the text.
|
470 |
+
// @param {number=} y Y coordinate of the text.
|
471 |
+
// @param {string=} text Text string to remove.
|
472 |
+
// @param {(string|object)=} font Either a string of space-separated CSS
|
473 |
+
// classes or a font-spec object, defining the text's font and style.
|
474 |
+
// @param {number=} angle Angle at which the text is rotated, in degrees.
|
475 |
+
// Angle is currently unused, it will be implemented in the future.
|
476 |
+
|
477 |
+
Canvas.prototype.removeText = function(layer, x, y, text, font, angle) {
|
478 |
+
if (text == null) {
|
479 |
+
var layerCache = this._textCache[layer];
|
480 |
+
if (layerCache != null) {
|
481 |
+
for (var styleKey in layerCache) {
|
482 |
+
if (hasOwnProperty.call(layerCache, styleKey)) {
|
483 |
+
var styleCache = layerCache[styleKey];
|
484 |
+
for (var key in styleCache) {
|
485 |
+
if (hasOwnProperty.call(styleCache, key)) {
|
486 |
+
var positions = styleCache[key].positions;
|
487 |
+
for (var i = 0, position; position = positions[i]; i++) {
|
488 |
+
position.active = false;
|
489 |
+
}
|
490 |
+
}
|
491 |
+
}
|
492 |
+
}
|
493 |
+
}
|
494 |
+
}
|
495 |
+
} else {
|
496 |
+
var positions = this.getTextInfo(layer, text, font, angle).positions;
|
497 |
+
for (var i = 0, position; position = positions[i]; i++) {
|
498 |
+
if (position.x == x && position.y == y) {
|
499 |
+
position.active = false;
|
500 |
+
}
|
501 |
+
}
|
502 |
+
}
|
503 |
+
};
|
504 |
+
|
505 |
+
///////////////////////////////////////////////////////////////////////////
|
506 |
+
// The top-level container for the entire plot.
|
507 |
+
|
508 |
+
function Plot(placeholder, data_, options_, plugins) {
|
509 |
+
// data is on the form:
|
510 |
+
// [ series1, series2 ... ]
|
511 |
+
// where series is either just the data as [ [x1, y1], [x2, y2], ... ]
|
512 |
+
// or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... }
|
513 |
+
|
514 |
+
var series = [],
|
515 |
+
options = {
|
516 |
+
// the color theme used for graphs
|
517 |
+
colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
|
518 |
+
legend: {
|
519 |
+
show: true,
|
520 |
+
noColumns: 1, // number of colums in legend table
|
521 |
+
labelFormatter: null, // fn: string -> string
|
522 |
+
labelBoxBorderColor: "#ccc", // border color for the little label boxes
|
523 |
+
container: null, // container (as jQuery object) to put legend in, null means default on top of graph
|
524 |
+
position: "ne", // position of default legend container within plot
|
525 |
+
margin: 5, // distance from grid edge to default legend container within plot
|
526 |
+
backgroundColor: null, // null means auto-detect
|
527 |
+
backgroundOpacity: 0.85, // set to 0 to avoid background
|
528 |
+
sorted: null // default to no legend sorting
|
529 |
+
},
|
530 |
+
xaxis: {
|
531 |
+
show: null, // null = auto-detect, true = always, false = never
|
532 |
+
position: "bottom", // or "top"
|
533 |
+
mode: null, // null or "time"
|
534 |
+
font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: "italic", weight: "bold", family: "sans-serif", variant: "small-caps" }
|
535 |
+
color: null, // base color, labels, ticks
|
536 |
+
tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)"
|
537 |
+
transform: null, // null or f: number -> number to transform axis
|
538 |
+
inverseTransform: null, // if transform is set, this should be the inverse function
|
539 |
+
min: null, // min. value to show, null means set automatically
|
540 |
+
max: null, // max. value to show, null means set automatically
|
541 |
+
autoscaleMargin: null, // margin in % to add if auto-setting min/max
|
542 |
+
ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks
|
543 |
+
tickFormatter: null, // fn: number -> string
|
544 |
+
labelWidth: null, // size of tick labels in pixels
|
545 |
+
labelHeight: null,
|
546 |
+
reserveSpace: null, // whether to reserve space even if axis isn't shown
|
547 |
+
tickLength: null, // size in pixels of ticks, or "full" for whole line
|
548 |
+
alignTicksWithAxis: null, // axis number or null for no sync
|
549 |
+
tickDecimals: null, // no. of decimals, null means auto
|
550 |
+
tickSize: null, // number or [number, "unit"]
|
551 |
+
minTickSize: null // number or [number, "unit"]
|
552 |
+
},
|
553 |
+
yaxis: {
|
554 |
+
autoscaleMargin: 0.02,
|
555 |
+
position: "left" // or "right"
|
556 |
+
},
|
557 |
+
xaxes: [],
|
558 |
+
yaxes: [],
|
559 |
+
series: {
|
560 |
+
points: {
|
561 |
+
show: false,
|
562 |
+
radius: 3,
|
563 |
+
lineWidth: 2, // in pixels
|
564 |
+
fill: true,
|
565 |
+
fillColor: "#ffffff",
|
566 |
+
symbol: "circle" // or callback
|
567 |
+
},
|
568 |
+
lines: {
|
569 |
+
// we don't put in show: false so we can see
|
570 |
+
// whether lines were actively disabled
|
571 |
+
lineWidth: 2, // in pixels
|
572 |
+
fill: false,
|
573 |
+
fillColor: null,
|
574 |
+
steps: false
|
575 |
+
// Omit 'zero', so we can later default its value to
|
576 |
+
// match that of the 'fill' option.
|
577 |
+
},
|
578 |
+
bars: {
|
579 |
+
show: false,
|
580 |
+
lineWidth: 2, // in pixels
|
581 |
+
barWidth: 1, // in units of the x axis
|
582 |
+
fill: true,
|
583 |
+
fillColor: null,
|
584 |
+
align: "left", // "left", "right", or "center"
|
585 |
+
horizontal: false,
|
586 |
+
zero: true
|
587 |
+
},
|
588 |
+
shadowSize: 3,
|
589 |
+
highlightColor: null
|
590 |
+
},
|
591 |
+
grid: {
|
592 |
+
show: true,
|
593 |
+
aboveData: false,
|
594 |
+
color: "#545454", // primary color used for outline and labels
|
595 |
+
backgroundColor: null, // null for transparent, else color
|
596 |
+
borderColor: null, // set if different from the grid color
|
597 |
+
tickColor: null, // color for the ticks, e.g. "rgba(0,0,0,0.15)"
|
598 |
+
margin: 0, // distance from the canvas edge to the grid
|
599 |
+
labelMargin: 5, // in pixels
|
600 |
+
axisMargin: 8, // in pixels
|
601 |
+
borderWidth: 2, // in pixels
|
602 |
+
minBorderMargin: null, // in pixels, null means taken from points radius
|
603 |
+
markings: null, // array of ranges or fn: axes -> array of ranges
|
604 |
+
markingsColor: "#f4f4f4",
|
605 |
+
markingsLineWidth: 2,
|
606 |
+
// interactive stuff
|
607 |
+
clickable: false,
|
608 |
+
hoverable: false,
|
609 |
+
autoHighlight: true, // highlight in case mouse is near
|
610 |
+
mouseActiveRadius: 10 // how far the mouse can be away to activate an item
|
611 |
+
},
|
612 |
+
interaction: {
|
613 |
+
redrawOverlayInterval: 1000/60 // time between updates, -1 means in same flow
|
614 |
+
},
|
615 |
+
hooks: {}
|
616 |
+
},
|
617 |
+
surface = null, // the canvas for the plot itself
|
618 |
+
overlay = null, // canvas for interactive stuff on top of plot
|
619 |
+
eventHolder = null, // jQuery object that events should be bound to
|
620 |
+
ctx = null, octx = null,
|
621 |
+
xaxes = [], yaxes = [],
|
622 |
+
plotOffset = { left: 0, right: 0, top: 0, bottom: 0},
|
623 |
+
plotWidth = 0, plotHeight = 0,
|
624 |
+
hooks = {
|
625 |
+
processOptions: [],
|
626 |
+
processRawData: [],
|
627 |
+
processDatapoints: [],
|
628 |
+
processOffset: [],
|
629 |
+
drawBackground: [],
|
630 |
+
drawSeries: [],
|
631 |
+
draw: [],
|
632 |
+
bindEvents: [],
|
633 |
+
drawOverlay: [],
|
634 |
+
shutdown: []
|
635 |
+
},
|
636 |
+
plot = this;
|
637 |
+
|
638 |
+
// public functions
|
639 |
+
plot.setData = setData;
|
640 |
+
plot.setupGrid = setupGrid;
|
641 |
+
plot.draw = draw;
|
642 |
+
plot.getPlaceholder = function() { return placeholder; };
|
643 |
+
plot.getCanvas = function() { return surface.element; };
|
644 |
+
plot.getPlotOffset = function() { return plotOffset; };
|
645 |
+
plot.width = function () { return plotWidth; };
|
646 |
+
plot.height = function () { return plotHeight; };
|
647 |
+
plot.offset = function () {
|
648 |
+
var o = eventHolder.offset();
|
649 |
+
o.left += plotOffset.left;
|
650 |
+
o.top += plotOffset.top;
|
651 |
+
return o;
|
652 |
+
};
|
653 |
+
plot.getData = function () { return series; };
|
654 |
+
plot.getAxes = function () {
|
655 |
+
var res = {}, i;
|
656 |
+
$.each(xaxes.concat(yaxes), function (_, axis) {
|
657 |
+
if (axis)
|
658 |
+
res[axis.direction + (axis.n != 1 ? axis.n : "") + "axis"] = axis;
|
659 |
+
});
|
660 |
+
return res;
|
661 |
+
};
|
662 |
+
plot.getXAxes = function () { return xaxes; };
|
663 |
+
plot.getYAxes = function () { return yaxes; };
|
664 |
+
plot.c2p = canvasToAxisCoords;
|
665 |
+
plot.p2c = axisToCanvasCoords;
|
666 |
+
plot.getOptions = function () { return options; };
|
667 |
+
plot.highlight = highlight;
|
668 |
+
plot.unhighlight = unhighlight;
|
669 |
+
plot.triggerRedrawOverlay = triggerRedrawOverlay;
|
670 |
+
plot.pointOffset = function(point) {
|
671 |
+
return {
|
672 |
+
left: parseInt(xaxes[axisNumber(point, "x") - 1].p2c(+point.x) + plotOffset.left, 10),
|
673 |
+
top: parseInt(yaxes[axisNumber(point, "y") - 1].p2c(+point.y) + plotOffset.top, 10)
|
674 |
+
};
|
675 |
+
};
|
676 |
+
plot.shutdown = shutdown;
|
677 |
+
plot.destroy = function () {
|
678 |
+
shutdown();
|
679 |
+
placeholder.removeData("plot").empty();
|
680 |
+
|
681 |
+
series = [];
|
682 |
+
options = null;
|
683 |
+
surface = null;
|
684 |
+
overlay = null;
|
685 |
+
eventHolder = null;
|
686 |
+
ctx = null;
|
687 |
+
octx = null;
|
688 |
+
xaxes = [];
|
689 |
+
yaxes = [];
|
690 |
+
hooks = null;
|
691 |
+
highlights = [];
|
692 |
+
plot = null;
|
693 |
+
};
|
694 |
+
plot.resize = function () {
|
695 |
+
var width = placeholder.width(),
|
696 |
+
height = placeholder.height();
|
697 |
+
surface.resize(width, height);
|
698 |
+
overlay.resize(width, height);
|
699 |
+
};
|
700 |
+
|
701 |
+
// public attributes
|
702 |
+
plot.hooks = hooks;
|
703 |
+
|
704 |
+
// initialize
|
705 |
+
initPlugins(plot);
|
706 |
+
parseOptions(options_);
|
707 |
+
setupCanvases();
|
708 |
+
setData(data_);
|
709 |
+
setupGrid();
|
710 |
+
draw();
|
711 |
+
bindEvents();
|
712 |
+
|
713 |
+
|
714 |
+
function executeHooks(hook, args) {
|
715 |
+
args = [plot].concat(args);
|
716 |
+
for (var i = 0; i < hook.length; ++i)
|
717 |
+
hook[i].apply(this, args);
|
718 |
+
}
|
719 |
+
|
720 |
+
function initPlugins() {
|
721 |
+
|
722 |
+
// References to key classes, allowing plugins to modify them
|
723 |
+
|
724 |
+
var classes = {
|
725 |
+
Canvas: Canvas
|
726 |
+
};
|
727 |
+
|
728 |
+
for (var i = 0; i < plugins.length; ++i) {
|
729 |
+
var p = plugins[i];
|
730 |
+
p.init(plot, classes);
|
731 |
+
if (p.options)
|
732 |
+
$.extend(true, options, p.options);
|
733 |
+
}
|
734 |
+
}
|
735 |
+
|
736 |
+
function parseOptions(opts) {
|
737 |
+
|
738 |
+
$.extend(true, options, opts);
|
739 |
+
|
740 |
+
// $.extend merges arrays, rather than replacing them. When less
|
741 |
+
// colors are provided than the size of the default palette, we
|
742 |
+
// end up with those colors plus the remaining defaults, which is
|
743 |
+
// not expected behavior; avoid it by replacing them here.
|
744 |
+
|
745 |
+
if (opts && opts.colors) {
|
746 |
+
options.colors = opts.colors;
|
747 |
+
}
|
748 |
+
|
749 |
+
if (options.xaxis.color == null)
|
750 |
+
options.xaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();
|
751 |
+
if (options.yaxis.color == null)
|
752 |
+
options.yaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();
|
753 |
+
|
754 |
+
if (options.xaxis.tickColor == null) // grid.tickColor for back-compatibility
|
755 |
+
options.xaxis.tickColor = options.grid.tickColor || options.xaxis.color;
|
756 |
+
if (options.yaxis.tickColor == null) // grid.tickColor for back-compatibility
|
757 |
+
options.yaxis.tickColor = options.grid.tickColor || options.yaxis.color;
|
758 |
+
|
759 |
+
if (options.grid.borderColor == null)
|
760 |
+
options.grid.borderColor = options.grid.color;
|
761 |
+
if (options.grid.tickColor == null)
|
762 |
+
options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();
|
763 |
+
|
764 |
+
// Fill in defaults for axis options, including any unspecified
|
765 |
+
// font-spec fields, if a font-spec was provided.
|
766 |
+
|
767 |
+
// If no x/y axis options were provided, create one of each anyway,
|
768 |
+
// since the rest of the code assumes that they exist.
|
769 |
+
|
770 |
+
var i, axisOptions, axisCount,
|
771 |
+
fontSize = placeholder.css("font-size"),
|
772 |
+
fontSizeDefault = fontSize ? +fontSize.replace("px", "") : 13,
|
773 |
+
fontDefaults = {
|
774 |
+
style: placeholder.css("font-style"),
|
775 |
+
size: Math.round(0.8 * fontSizeDefault),
|
776 |
+
variant: placeholder.css("font-variant"),
|
777 |
+
weight: placeholder.css("font-weight"),
|
778 |
+
family: placeholder.css("font-family")
|
779 |
+
};
|
780 |
+
|
781 |
+
axisCount = options.xaxes.length || 1;
|
782 |
+
for (i = 0; i < axisCount; ++i) {
|
783 |
+
|
784 |
+
axisOptions = options.xaxes[i];
|
785 |
+
if (axisOptions && !axisOptions.tickColor) {
|
786 |
+
axisOptions.tickColor = axisOptions.color;
|
787 |
+
}
|
788 |
+
|
789 |
+
axisOptions = $.extend(true, {}, options.xaxis, axisOptions);
|
790 |
+
options.xaxes[i] = axisOptions;
|
791 |
+
|
792 |
+
if (axisOptions.font) {
|
793 |
+
axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);
|
794 |
+
if (!axisOptions.font.color) {
|
795 |
+
axisOptions.font.color = axisOptions.color;
|
796 |
+
}
|
797 |
+
if (!axisOptions.font.lineHeight) {
|
798 |
+
axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);
|
799 |
+
}
|
800 |
+
}
|
801 |
+
}
|
802 |
+
|
803 |
+
axisCount = options.yaxes.length || 1;
|
804 |
+
for (i = 0; i < axisCount; ++i) {
|
805 |
+
|
806 |
+
axisOptions = options.yaxes[i];
|
807 |
+
if (axisOptions && !axisOptions.tickColor) {
|
808 |
+
axisOptions.tickColor = axisOptions.color;
|
809 |
+
}
|
810 |
+
|
811 |
+
axisOptions = $.extend(true, {}, options.yaxis, axisOptions);
|
812 |
+
options.yaxes[i] = axisOptions;
|
813 |
+
|
814 |
+
if (axisOptions.font) {
|
815 |
+
axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);
|
816 |
+
if (!axisOptions.font.color) {
|
817 |
+
axisOptions.font.color = axisOptions.color;
|
818 |
+
}
|
819 |
+
if (!axisOptions.font.lineHeight) {
|
820 |
+
axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);
|
821 |
+
}
|
822 |
+
}
|
823 |
+
}
|
824 |
+
|
825 |
+
// backwards compatibility, to be removed in future
|
826 |
+
if (options.xaxis.noTicks && options.xaxis.ticks == null)
|
827 |
+
options.xaxis.ticks = options.xaxis.noTicks;
|
828 |
+
if (options.yaxis.noTicks && options.yaxis.ticks == null)
|
829 |
+
options.yaxis.ticks = options.yaxis.noTicks;
|
830 |
+
if (options.x2axis) {
|
831 |
+
options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);
|
832 |
+
options.xaxes[1].position = "top";
|
833 |
+
// Override the inherit to allow the axis to auto-scale
|
834 |
+
if (options.x2axis.min == null) {
|
835 |
+
options.xaxes[1].min = null;
|
836 |
+
}
|
837 |
+
if (options.x2axis.max == null) {
|
838 |
+
options.xaxes[1].max = null;
|
839 |
+
}
|
840 |
+
}
|
841 |
+
if (options.y2axis) {
|
842 |
+
options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);
|
843 |
+
options.yaxes[1].position = "right";
|
844 |
+
// Override the inherit to allow the axis to auto-scale
|
845 |
+
if (options.y2axis.min == null) {
|
846 |
+
options.yaxes[1].min = null;
|
847 |
+
}
|
848 |
+
if (options.y2axis.max == null) {
|
849 |
+
options.yaxes[1].max = null;
|
850 |
+
}
|
851 |
+
}
|
852 |
+
if (options.grid.coloredAreas)
|
853 |
+
options.grid.markings = options.grid.coloredAreas;
|
854 |
+
if (options.grid.coloredAreasColor)
|
855 |
+
options.grid.markingsColor = options.grid.coloredAreasColor;
|
856 |
+
if (options.lines)
|
857 |
+
$.extend(true, options.series.lines, options.lines);
|
858 |
+
if (options.points)
|
859 |
+
$.extend(true, options.series.points, options.points);
|
860 |
+
if (options.bars)
|
861 |
+
$.extend(true, options.series.bars, options.bars);
|
862 |
+
if (options.shadowSize != null)
|
863 |
+
options.series.shadowSize = options.shadowSize;
|
864 |
+
if (options.highlightColor != null)
|
865 |
+
options.series.highlightColor = options.highlightColor;
|
866 |
+
|
867 |
+
// save options on axes for future reference
|
868 |
+
for (i = 0; i < options.xaxes.length; ++i)
|
869 |
+
getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];
|
870 |
+
for (i = 0; i < options.yaxes.length; ++i)
|
871 |
+
getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];
|
872 |
+
|
873 |
+
// add hooks from options
|
874 |
+
for (var n in hooks)
|
875 |
+
if (options.hooks[n] && options.hooks[n].length)
|
876 |
+
hooks[n] = hooks[n].concat(options.hooks[n]);
|
877 |
+
|
878 |
+
executeHooks(hooks.processOptions, [options]);
|
879 |
+
}
|
880 |
+
|
881 |
+
function setData(d) {
|
882 |
+
series = parseData(d);
|
883 |
+
fillInSeriesOptions();
|
884 |
+
processData();
|
885 |
+
}
|
886 |
+
|
887 |
+
function parseData(d) {
|
888 |
+
var res = [];
|
889 |
+
for (var i = 0; i < d.length; ++i) {
|
890 |
+
var s = $.extend(true, {}, options.series);
|
891 |
+
|
892 |
+
if (d[i].data != null) {
|
893 |
+
s.data = d[i].data; // move the data instead of deep-copy
|
894 |
+
delete d[i].data;
|
895 |
+
|
896 |
+
$.extend(true, s, d[i]);
|
897 |
+
|
898 |
+
d[i].data = s.data;
|
899 |
+
}
|
900 |
+
else
|
901 |
+
s.data = d[i];
|
902 |
+
res.push(s);
|
903 |
+
}
|
904 |
+
|
905 |
+
return res;
|
906 |
+
}
|
907 |
+
|
908 |
+
function axisNumber(obj, coord) {
|
909 |
+
var a = obj[coord + "axis"];
|
910 |
+
if (typeof a == "object") // if we got a real axis, extract number
|
911 |
+
a = a.n;
|
912 |
+
if (typeof a != "number")
|
913 |
+
a = 1; // default to first axis
|
914 |
+
return a;
|
915 |
+
}
|
916 |
+
|
917 |
+
function allAxes() {
|
918 |
+
// return flat array without annoying null entries
|
919 |
+
return $.grep(xaxes.concat(yaxes), function (a) { return a; });
|
920 |
+
}
|
921 |
+
|
922 |
+
function canvasToAxisCoords(pos) {
|
923 |
+
// return an object with x/y corresponding to all used axes
|
924 |
+
var res = {}, i, axis;
|
925 |
+
for (i = 0; i < xaxes.length; ++i) {
|
926 |
+
axis = xaxes[i];
|
927 |
+
if (axis && axis.used)
|
928 |
+
res["x" + axis.n] = axis.c2p(pos.left);
|
929 |
+
}
|
930 |
+
|
931 |
+
for (i = 0; i < yaxes.length; ++i) {
|
932 |
+
axis = yaxes[i];
|
933 |
+
if (axis && axis.used)
|
934 |
+
res["y" + axis.n] = axis.c2p(pos.top);
|
935 |
+
}
|
936 |
+
|
937 |
+
if (res.x1 !== undefined)
|
938 |
+
res.x = res.x1;
|
939 |
+
if (res.y1 !== undefined)
|
940 |
+
res.y = res.y1;
|
941 |
+
|
942 |
+
return res;
|
943 |
+
}
|
944 |
+
|
945 |
+
function axisToCanvasCoords(pos) {
|
946 |
+
// get canvas coords from the first pair of x/y found in pos
|
947 |
+
var res = {}, i, axis, key;
|
948 |
+
|
949 |
+
for (i = 0; i < xaxes.length; ++i) {
|
950 |
+
axis = xaxes[i];
|
951 |
+
if (axis && axis.used) {
|
952 |
+
key = "x" + axis.n;
|
953 |
+
if (pos[key] == null && axis.n == 1)
|
954 |
+
key = "x";
|
955 |
+
|
956 |
+
if (pos[key] != null) {
|
957 |
+
res.left = axis.p2c(pos[key]);
|
958 |
+
break;
|
959 |
+
}
|
960 |
+
}
|
961 |
+
}
|
962 |
+
|
963 |
+
for (i = 0; i < yaxes.length; ++i) {
|
964 |
+
axis = yaxes[i];
|
965 |
+
if (axis && axis.used) {
|
966 |
+
key = "y" + axis.n;
|
967 |
+
if (pos[key] == null && axis.n == 1)
|
968 |
+
key = "y";
|
969 |
+
|
970 |
+
if (pos[key] != null) {
|
971 |
+
res.top = axis.p2c(pos[key]);
|
972 |
+
break;
|
973 |
+
}
|
974 |
+
}
|
975 |
+
}
|
976 |
+
|
977 |
+
return res;
|
978 |
+
}
|
979 |
+
|
980 |
+
function getOrCreateAxis(axes, number) {
|
981 |
+
if (!axes[number - 1])
|
982 |
+
axes[number - 1] = {
|
983 |
+
n: number, // save the number for future reference
|
984 |
+
direction: axes == xaxes ? "x" : "y",
|
985 |
+
options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)
|
986 |
+
};
|
987 |
+
|
988 |
+
return axes[number - 1];
|
989 |
+
}
|
990 |
+
|
991 |
+
function fillInSeriesOptions() {
|
992 |
+
|
993 |
+
var neededColors = series.length, maxIndex = -1, i;
|
994 |
+
|
995 |
+
// Subtract the number of series that already have fixed colors or
|
996 |
+
// color indexes from the number that we still need to generate.
|
997 |
+
|
998 |
+
for (i = 0; i < series.length; ++i) {
|
999 |
+
var sc = series[i].color;
|
1000 |
+
if (sc != null) {
|
1001 |
+
neededColors--;
|
1002 |
+
if (typeof sc == "number" && sc > maxIndex) {
|
1003 |
+
maxIndex = sc;
|
1004 |
+
}
|
1005 |
+
}
|
1006 |
+
}
|
1007 |
+
|
1008 |
+
// If any of the series have fixed color indexes, then we need to
|
1009 |
+
// generate at least as many colors as the highest index.
|
1010 |
+
|
1011 |
+
if (neededColors <= maxIndex) {
|
1012 |
+
neededColors = maxIndex + 1;
|
1013 |
+
}
|
1014 |
+
|
1015 |
+
// Generate all the colors, using first the option colors and then
|
1016 |
+
// variations on those colors once they're exhausted.
|
1017 |
+
|
1018 |
+
var c, colors = [], colorPool = options.colors,
|
1019 |
+
colorPoolSize = colorPool.length, variation = 0;
|
1020 |
+
|
1021 |
+
for (i = 0; i < neededColors; i++) {
|
1022 |
+
|
1023 |
+
c = $.color.parse(colorPool[i % colorPoolSize] || "#666");
|
1024 |
+
|
1025 |
+
// Each time we exhaust the colors in the pool we adjust
|
1026 |
+
// a scaling factor used to produce more variations on
|
1027 |
+
// those colors. The factor alternates negative/positive
|
1028 |
+
// to produce lighter/darker colors.
|
1029 |
+
|
1030 |
+
// Reset the variation after every few cycles, or else
|
1031 |
+
// it will end up producing only white or black colors.
|
1032 |
+
|
1033 |
+
if (i % colorPoolSize == 0 && i) {
|
1034 |
+
if (variation >= 0) {
|
1035 |
+
if (variation < 0.5) {
|
1036 |
+
variation = -variation - 0.2;
|
1037 |
+
} else variation = 0;
|
1038 |
+
} else variation = -variation;
|
1039 |
+
}
|
1040 |
+
|
1041 |
+
colors[i] = c.scale('rgb', 1 + variation);
|
1042 |
+
}
|
1043 |
+
|
1044 |
+
// Finalize the series options, filling in their colors
|
1045 |
+
|
1046 |
+
var colori = 0, s;
|
1047 |
+
for (i = 0; i < series.length; ++i) {
|
1048 |
+
s = series[i];
|
1049 |
+
|
1050 |
+
// assign colors
|
1051 |
+
if (s.color == null) {
|
1052 |
+
s.color = colors[colori].toString();
|
1053 |
+
++colori;
|
1054 |
+
}
|
1055 |
+
else if (typeof s.color == "number")
|
1056 |
+
s.color = colors[s.color].toString();
|
1057 |
+
|
1058 |
+
// turn on lines automatically in case nothing is set
|
1059 |
+
if (s.lines.show == null) {
|
1060 |
+
var v, show = true;
|
1061 |
+
for (v in s)
|
1062 |
+
if (s[v] && s[v].show) {
|
1063 |
+
show = false;
|
1064 |
+
break;
|
1065 |
+
}
|
1066 |
+
if (show)
|
1067 |
+
s.lines.show = true;
|
1068 |
+
}
|
1069 |
+
|
1070 |
+
// If nothing was provided for lines.zero, default it to match
|
1071 |
+
// lines.fill, since areas by default should extend to zero.
|
1072 |
+
|
1073 |
+
if (s.lines.zero == null) {
|
1074 |
+
s.lines.zero = !!s.lines.fill;
|
1075 |
+
}
|
1076 |
+
|
1077 |
+
// setup axes
|
1078 |
+
s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, "x"));
|
1079 |
+
s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, "y"));
|
1080 |
+
}
|
1081 |
+
}
|
1082 |
+
|
1083 |
+
function processData() {
|
1084 |
+
var topSentry = Number.POSITIVE_INFINITY,
|
1085 |
+
bottomSentry = Number.NEGATIVE_INFINITY,
|
1086 |
+
fakeInfinity = Number.MAX_VALUE,
|
1087 |
+
i, j, k, m, length,
|
1088 |
+
s, points, ps, x, y, axis, val, f, p,
|
1089 |
+
data, format;
|
1090 |
+
|
1091 |
+
function updateAxis(axis, min, max) {
|
1092 |
+
if (min < axis.datamin && min != -fakeInfinity)
|
1093 |
+
axis.datamin = min;
|
1094 |
+
if (max > axis.datamax && max != fakeInfinity)
|
1095 |
+
axis.datamax = max;
|
1096 |
+
}
|
1097 |
+
|
1098 |
+
$.each(allAxes(), function (_, axis) {
|
1099 |
+
// init axis
|
1100 |
+
axis.datamin = topSentry;
|
1101 |
+
axis.datamax = bottomSentry;
|
1102 |
+
axis.used = false;
|
1103 |
+
});
|
1104 |
+
|
1105 |
+
for (i = 0; i < series.length; ++i) {
|
1106 |
+
s = series[i];
|
1107 |
+
s.datapoints = { points: [] };
|
1108 |
+
|
1109 |
+
executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);
|
1110 |
+
}
|
1111 |
+
|
1112 |
+
// first pass: clean and copy data
|
1113 |
+
for (i = 0; i < series.length; ++i) {
|
1114 |
+
s = series[i];
|
1115 |
+
|
1116 |
+
data = s.data;
|
1117 |
+
format = s.datapoints.format;
|
1118 |
+
|
1119 |
+
if (!format) {
|
1120 |
+
format = [];
|
1121 |
+
// find out how to copy
|
1122 |
+
format.push({ x: true, number: true, required: true });
|
1123 |
+
format.push({ y: true, number: true, required: true });
|
1124 |
+
|
1125 |
+
if (s.bars.show || (s.lines.show && s.lines.fill)) {
|
1126 |
+
var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));
|
1127 |
+
format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });
|
1128 |
+
if (s.bars.horizontal) {
|
1129 |
+
delete format[format.length - 1].y;
|
1130 |
+
format[format.length - 1].x = true;
|
1131 |
+
}
|
1132 |
+
}
|
1133 |
+
|
1134 |
+
s.datapoints.format = format;
|
1135 |
+
}
|
1136 |
+
|
1137 |
+
if (s.datapoints.pointsize != null)
|
1138 |
+
continue; // already filled in
|
1139 |
+
|
1140 |
+
s.datapoints.pointsize = format.length;
|
1141 |
+
|
1142 |
+
ps = s.datapoints.pointsize;
|
1143 |
+
points = s.datapoints.points;
|
1144 |
+
|
1145 |
+
var insertSteps = s.lines.show && s.lines.steps;
|
1146 |
+
s.xaxis.used = s.yaxis.used = true;
|
1147 |
+
|
1148 |
+
for (j = k = 0; j < data.length; ++j, k += ps) {
|
1149 |
+
p = data[j];
|
1150 |
+
|
1151 |
+
var nullify = p == null;
|
1152 |
+
if (!nullify) {
|
1153 |
+
for (m = 0; m < ps; ++m) {
|
1154 |
+
val = p[m];
|
1155 |
+
f = format[m];
|
1156 |
+
|
1157 |
+
if (f) {
|
1158 |
+
if (f.number && val != null) {
|
1159 |
+
val = +val; // convert to number
|
1160 |
+
if (isNaN(val))
|
1161 |
+
val = null;
|
1162 |
+
else if (val == Infinity)
|
1163 |
+
val = fakeInfinity;
|
1164 |
+
else if (val == -Infinity)
|
1165 |
+
val = -fakeInfinity;
|
1166 |
+
}
|
1167 |
+
|
1168 |
+
if (val == null) {
|
1169 |
+
if (f.required)
|
1170 |
+
nullify = true;
|
1171 |
+
|
1172 |
+
if (f.defaultValue != null)
|
1173 |
+
val = f.defaultValue;
|
1174 |
+
}
|
1175 |
+
}
|
1176 |
+
|
1177 |
+
points[k + m] = val;
|
1178 |
+
}
|
1179 |
+
}
|
1180 |
+
|
1181 |
+
if (nullify) {
|
1182 |
+
for (m = 0; m < ps; ++m) {
|
1183 |
+
val = points[k + m];
|
1184 |
+
if (val != null) {
|
1185 |
+
f = format[m];
|
1186 |
+
// extract min/max info
|
1187 |
+
if (f.autoscale !== false) {
|
1188 |
+
if (f.x) {
|
1189 |
+
updateAxis(s.xaxis, val, val);
|
1190 |
+
}
|
1191 |
+
if (f.y) {
|
1192 |
+
updateAxis(s.yaxis, val, val);
|
1193 |
+
}
|
1194 |
+
}
|
1195 |
+
}
|
1196 |
+
points[k + m] = null;
|
1197 |
+
}
|
1198 |
+
}
|
1199 |
+
else {
|
1200 |
+
// a little bit of line specific stuff that
|
1201 |
+
// perhaps shouldn't be here, but lacking
|
1202 |
+
// better means...
|
1203 |
+
if (insertSteps && k > 0
|
1204 |
+
&& points[k - ps] != null
|
1205 |
+
&& points[k - ps] != points[k]
|
1206 |
+
&& points[k - ps + 1] != points[k + 1]) {
|
1207 |
+
// copy the point to make room for a middle point
|
1208 |
+
for (m = 0; m < ps; ++m)
|
1209 |
+
points[k + ps + m] = points[k + m];
|
1210 |
+
|
1211 |
+
// middle point has same y
|
1212 |
+
points[k + 1] = points[k - ps + 1];
|
1213 |
+
|
1214 |
+
// we've added a point, better reflect that
|
1215 |
+
k += ps;
|
1216 |
+
}
|
1217 |
+
}
|
1218 |
+
}
|
1219 |
+
}
|
1220 |
+
|
1221 |
+
// give the hooks a chance to run
|
1222 |
+
for (i = 0; i < series.length; ++i) {
|
1223 |
+
s = series[i];
|
1224 |
+
|
1225 |
+
executeHooks(hooks.processDatapoints, [ s, s.datapoints]);
|
1226 |
+
}
|
1227 |
+
|
1228 |
+
// second pass: find datamax/datamin for auto-scaling
|
1229 |
+
for (i = 0; i < series.length; ++i) {
|
1230 |
+
s = series[i];
|
1231 |
+
points = s.datapoints.points;
|
1232 |
+
ps = s.datapoints.pointsize;
|
1233 |
+
format = s.datapoints.format;
|
1234 |
+
|
1235 |
+
var xmin = topSentry, ymin = topSentry,
|
1236 |
+
xmax = bottomSentry, ymax = bottomSentry;
|
1237 |
+
|
1238 |
+
for (j = 0; j < points.length; j += ps) {
|
1239 |
+
if (points[j] == null)
|
1240 |
+
continue;
|
1241 |
+
|
1242 |
+
for (m = 0; m < ps; ++m) {
|
1243 |
+
val = points[j + m];
|
1244 |
+
f = format[m];
|
1245 |
+
if (!f || f.autoscale === false || val == fakeInfinity || val == -fakeInfinity)
|
1246 |
+
continue;
|
1247 |
+
|
1248 |
+
if (f.x) {
|
1249 |
+
if (val < xmin)
|
1250 |
+
xmin = val;
|
1251 |
+
if (val > xmax)
|
1252 |
+
xmax = val;
|
1253 |
+
}
|
1254 |
+
if (f.y) {
|
1255 |
+
if (val < ymin)
|
1256 |
+
ymin = val;
|
1257 |
+
if (val > ymax)
|
1258 |
+
ymax = val;
|
1259 |
+
}
|
1260 |
+
}
|
1261 |
+
}
|
1262 |
+
|
1263 |
+
if (s.bars.show) {
|
1264 |
+
// make sure we got room for the bar on the dancing floor
|
1265 |
+
var delta;
|
1266 |
+
|
1267 |
+
switch (s.bars.align) {
|
1268 |
+
case "left":
|
1269 |
+
delta = 0;
|
1270 |
+
break;
|
1271 |
+
case "right":
|
1272 |
+
delta = -s.bars.barWidth;
|
1273 |
+
break;
|
1274 |
+
default:
|
1275 |
+
delta = -s.bars.barWidth / 2;
|
1276 |
+
}
|
1277 |
+
|
1278 |
+
if (s.bars.horizontal) {
|
1279 |
+
ymin += delta;
|
1280 |
+
ymax += delta + s.bars.barWidth;
|
1281 |
+
}
|
1282 |
+
else {
|
1283 |
+
xmin += delta;
|
1284 |
+
xmax += delta + s.bars.barWidth;
|
1285 |
+
}
|
1286 |
+
}
|
1287 |
+
|
1288 |
+
updateAxis(s.xaxis, xmin, xmax);
|
1289 |
+
updateAxis(s.yaxis, ymin, ymax);
|
1290 |
+
}
|
1291 |
+
|
1292 |
+
$.each(allAxes(), function (_, axis) {
|
1293 |
+
if (axis.datamin == topSentry)
|
1294 |
+
axis.datamin = null;
|
1295 |
+
if (axis.datamax == bottomSentry)
|
1296 |
+
axis.datamax = null;
|
1297 |
+
});
|
1298 |
+
}
|
1299 |
+
|
1300 |
+
function setupCanvases() {
|
1301 |
+
|
1302 |
+
// Make sure the placeholder is clear of everything except canvases
|
1303 |
+
// from a previous plot in this container that we'll try to re-use.
|
1304 |
+
|
1305 |
+
placeholder.css("padding", 0) // padding messes up the positioning
|
1306 |
+
.children().filter(function(){
|
1307 |
+
return !$(this).hasClass("flot-overlay") && !$(this).hasClass('flot-base');
|
1308 |
+
}).remove();
|
1309 |
+
|
1310 |
+
if (placeholder.css("position") == 'static')
|
1311 |
+
placeholder.css("position", "relative"); // for positioning labels and overlay
|
1312 |
+
|
1313 |
+
surface = new Canvas("flot-base", placeholder);
|
1314 |
+
overlay = new Canvas("flot-overlay", placeholder); // overlay canvas for interactive features
|
1315 |
+
|
1316 |
+
ctx = surface.context;
|
1317 |
+
octx = overlay.context;
|
1318 |
+
|
1319 |
+
// define which element we're listening for events on
|
1320 |
+
eventHolder = $(overlay.element).unbind();
|
1321 |
+
|
1322 |
+
// If we're re-using a plot object, shut down the old one
|
1323 |
+
|
1324 |
+
var existing = placeholder.data("plot");
|
1325 |
+
|
1326 |
+
if (existing) {
|
1327 |
+
existing.shutdown();
|
1328 |
+
overlay.clear();
|
1329 |
+
}
|
1330 |
+
|
1331 |
+
// save in case we get replotted
|
1332 |
+
placeholder.data("plot", plot);
|
1333 |
+
}
|
1334 |
+
|
1335 |
+
function bindEvents() {
|
1336 |
+
// bind events
|
1337 |
+
if (options.grid.hoverable) {
|
1338 |
+
eventHolder.mousemove(onMouseMove);
|
1339 |
+
|
1340 |
+
// Use bind, rather than .mouseleave, because we officially
|
1341 |
+
// still support jQuery 1.2.6, which doesn't define a shortcut
|
1342 |
+
// for mouseenter or mouseleave. This was a bug/oversight that
|
1343 |
+
// was fixed somewhere around 1.3.x. We can return to using
|
1344 |
+
// .mouseleave when we drop support for 1.2.6.
|
1345 |
+
|
1346 |
+
eventHolder.bind("mouseleave", onMouseLeave);
|
1347 |
+
}
|
1348 |
+
|
1349 |
+
if (options.grid.clickable)
|
1350 |
+
eventHolder.click(onClick);
|
1351 |
+
|
1352 |
+
executeHooks(hooks.bindEvents, [eventHolder]);
|
1353 |
+
}
|
1354 |
+
|
1355 |
+
function shutdown() {
|
1356 |
+
if (redrawTimeout)
|
1357 |
+
clearTimeout(redrawTimeout);
|
1358 |
+
|
1359 |
+
eventHolder.unbind("mousemove", onMouseMove);
|
1360 |
+
eventHolder.unbind("mouseleave", onMouseLeave);
|
1361 |
+
eventHolder.unbind("click", onClick);
|
1362 |
+
|
1363 |
+
executeHooks(hooks.shutdown, [eventHolder]);
|
1364 |
+
}
|
1365 |
+
|
1366 |
+
function setTransformationHelpers(axis) {
|
1367 |
+
// set helper functions on the axis, assumes plot area
|
1368 |
+
// has been computed already
|
1369 |
+
|
1370 |
+
function identity(x) { return x; }
|
1371 |
+
|
1372 |
+
var s, m, t = axis.options.transform || identity,
|
1373 |
+
it = axis.options.inverseTransform;
|
1374 |
+
|
1375 |
+
// precompute how much the axis is scaling a point
|
1376 |
+
// in canvas space
|
1377 |
+
if (axis.direction == "x") {
|
1378 |
+
s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));
|
1379 |
+
m = Math.min(t(axis.max), t(axis.min));
|
1380 |
+
}
|
1381 |
+
else {
|
1382 |
+
s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));
|
1383 |
+
s = -s;
|
1384 |
+
m = Math.max(t(axis.max), t(axis.min));
|
1385 |
+
}
|
1386 |
+
|
1387 |
+
// data point to canvas coordinate
|
1388 |
+
if (t == identity) // slight optimization
|
1389 |
+
axis.p2c = function (p) { return (p - m) * s; };
|
1390 |
+
else
|
1391 |
+
axis.p2c = function (p) { return (t(p) - m) * s; };
|
1392 |
+
// canvas coordinate to data point
|
1393 |
+
if (!it)
|
1394 |
+
axis.c2p = function (c) { return m + c / s; };
|
1395 |
+
else
|
1396 |
+
axis.c2p = function (c) { return it(m + c / s); };
|
1397 |
+
}
|
1398 |
+
|
1399 |
+
function measureTickLabels(axis) {
|
1400 |
+
|
1401 |
+
var opts = axis.options,
|
1402 |
+
ticks = axis.ticks || [],
|
1403 |
+
labelWidth = opts.labelWidth || 0,
|
1404 |
+
labelHeight = opts.labelHeight || 0,
|
1405 |
+
maxWidth = labelWidth || (axis.direction == "x" ? Math.floor(surface.width / (ticks.length || 1)) : null),
|
1406 |
+
legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis",
|
1407 |
+
layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles,
|
1408 |
+
font = opts.font || "flot-tick-label tickLabel";
|
1409 |
+
|
1410 |
+
for (var i = 0; i < ticks.length; ++i) {
|
1411 |
+
|
1412 |
+
var t = ticks[i];
|
1413 |
+
|
1414 |
+
if (!t.label)
|
1415 |
+
continue;
|
1416 |
+
|
1417 |
+
var info = surface.getTextInfo(layer, t.label, font, null, maxWidth);
|
1418 |
+
|
1419 |
+
labelWidth = Math.max(labelWidth, info.width);
|
1420 |
+
labelHeight = Math.max(labelHeight, info.height);
|
1421 |
+
}
|
1422 |
+
|
1423 |
+
axis.labelWidth = opts.labelWidth || labelWidth;
|
1424 |
+
axis.labelHeight = opts.labelHeight || labelHeight;
|
1425 |
+
}
|
1426 |
+
|
1427 |
+
function allocateAxisBoxFirstPhase(axis) {
|
1428 |
+
// find the bounding box of the axis by looking at label
|
1429 |
+
// widths/heights and ticks, make room by diminishing the
|
1430 |
+
// plotOffset; this first phase only looks at one
|
1431 |
+
// dimension per axis, the other dimension depends on the
|
1432 |
+
// other axes so will have to wait
|
1433 |
+
|
1434 |
+
var lw = axis.labelWidth,
|
1435 |
+
lh = axis.labelHeight,
|
1436 |
+
pos = axis.options.position,
|
1437 |
+
isXAxis = axis.direction === "x",
|
1438 |
+
tickLength = axis.options.tickLength,
|
1439 |
+
axisMargin = options.grid.axisMargin,
|
1440 |
+
padding = options.grid.labelMargin,
|
1441 |
+
innermost = true,
|
1442 |
+
outermost = true,
|
1443 |
+
first = true,
|
1444 |
+
found = false;
|
1445 |
+
|
1446 |
+
// Determine the axis's position in its direction and on its side
|
1447 |
+
|
1448 |
+
$.each(isXAxis ? xaxes : yaxes, function(i, a) {
|
1449 |
+
if (a && (a.show || a.reserveSpace)) {
|
1450 |
+
if (a === axis) {
|
1451 |
+
found = true;
|
1452 |
+
} else if (a.options.position === pos) {
|
1453 |
+
if (found) {
|
1454 |
+
outermost = false;
|
1455 |
+
} else {
|
1456 |
+
innermost = false;
|
1457 |
+
}
|
1458 |
+
}
|
1459 |
+
if (!found) {
|
1460 |
+
first = false;
|
1461 |
+
}
|
1462 |
+
}
|
1463 |
+
});
|
1464 |
+
|
1465 |
+
// The outermost axis on each side has no margin
|
1466 |
+
|
1467 |
+
if (outermost) {
|
1468 |
+
axisMargin = 0;
|
1469 |
+
}
|
1470 |
+
|
1471 |
+
// The ticks for the first axis in each direction stretch across
|
1472 |
+
|
1473 |
+
if (tickLength == null) {
|
1474 |
+
tickLength = first ? "full" : 5;
|
1475 |
+
}
|
1476 |
+
|
1477 |
+
if (!isNaN(+tickLength))
|
1478 |
+
padding += +tickLength;
|
1479 |
+
|
1480 |
+
if (isXAxis) {
|
1481 |
+
lh += padding;
|
1482 |
+
|
1483 |
+
if (pos == "bottom") {
|
1484 |
+
plotOffset.bottom += lh + axisMargin;
|
1485 |
+
axis.box = { top: surface.height - plotOffset.bottom, height: lh };
|
1486 |
+
}
|
1487 |
+
else {
|
1488 |
+
axis.box = { top: plotOffset.top + axisMargin, height: lh };
|
1489 |
+
plotOffset.top += lh + axisMargin;
|
1490 |
+
}
|
1491 |
+
}
|
1492 |
+
else {
|
1493 |
+
lw += padding;
|
1494 |
+
|
1495 |
+
if (pos == "left") {
|
1496 |
+
axis.box = { left: plotOffset.left + axisMargin, width: lw };
|
1497 |
+
plotOffset.left += lw + axisMargin;
|
1498 |
+
}
|
1499 |
+
else {
|
1500 |
+
plotOffset.right += lw + axisMargin;
|
1501 |
+
axis.box = { left: surface.width - plotOffset.right, width: lw };
|
1502 |
+
}
|
1503 |
+
}
|
1504 |
+
|
1505 |
+
// save for future reference
|
1506 |
+
axis.position = pos;
|
1507 |
+
axis.tickLength = tickLength;
|
1508 |
+
axis.box.padding = padding;
|
1509 |
+
axis.innermost = innermost;
|
1510 |
+
}
|
1511 |
+
|
1512 |
+
function allocateAxisBoxSecondPhase(axis) {
|
1513 |
+
// now that all axis boxes have been placed in one
|
1514 |
+
// dimension, we can set the remaining dimension coordinates
|
1515 |
+
if (axis.direction == "x") {
|
1516 |
+
axis.box.left = plotOffset.left - axis.labelWidth / 2;
|
1517 |
+
axis.box.width = surface.width - plotOffset.left - plotOffset.right + axis.labelWidth;
|
1518 |
+
}
|
1519 |
+
else {
|
1520 |
+
axis.box.top = plotOffset.top - axis.labelHeight / 2;
|
1521 |
+
axis.box.height = surface.height - plotOffset.bottom - plotOffset.top + axis.labelHeight;
|
1522 |
+
}
|
1523 |
+
}
|
1524 |
+
|
1525 |
+
function adjustLayoutForThingsStickingOut() {
|
1526 |
+
// possibly adjust plot offset to ensure everything stays
|
1527 |
+
// inside the canvas and isn't clipped off
|
1528 |
+
|
1529 |
+
var minMargin = options.grid.minBorderMargin,
|
1530 |
+
axis, i;
|
1531 |
+
|
1532 |
+
// check stuff from the plot (FIXME: this should just read
|
1533 |
+
// a value from the series, otherwise it's impossible to
|
1534 |
+
// customize)
|
1535 |
+
if (minMargin == null) {
|
1536 |
+
minMargin = 0;
|
1537 |
+
for (i = 0; i < series.length; ++i)
|
1538 |
+
minMargin = Math.max(minMargin, 2 * (series[i].points.radius + series[i].points.lineWidth/2));
|
1539 |
+
}
|
1540 |
+
|
1541 |
+
var margins = {
|
1542 |
+
left: minMargin,
|
1543 |
+
right: minMargin,
|
1544 |
+
top: minMargin,
|
1545 |
+
bottom: minMargin
|
1546 |
+
};
|
1547 |
+
|
1548 |
+
// check axis labels, note we don't check the actual
|
1549 |
+
// labels but instead use the overall width/height to not
|
1550 |
+
// jump as much around with replots
|
1551 |
+
$.each(allAxes(), function (_, axis) {
|
1552 |
+
if (axis.reserveSpace && axis.ticks && axis.ticks.length) {
|
1553 |
+
if (axis.direction === "x") {
|
1554 |
+
margins.left = Math.max(margins.left, axis.labelWidth / 2);
|
1555 |
+
margins.right = Math.max(margins.right, axis.labelWidth / 2);
|
1556 |
+
} else {
|
1557 |
+
margins.bottom = Math.max(margins.bottom, axis.labelHeight / 2);
|
1558 |
+
margins.top = Math.max(margins.top, axis.labelHeight / 2);
|
1559 |
+
}
|
1560 |
+
}
|
1561 |
+
});
|
1562 |
+
|
1563 |
+
plotOffset.left = Math.ceil(Math.max(margins.left, plotOffset.left));
|
1564 |
+
plotOffset.right = Math.ceil(Math.max(margins.right, plotOffset.right));
|
1565 |
+
plotOffset.top = Math.ceil(Math.max(margins.top, plotOffset.top));
|
1566 |
+
plotOffset.bottom = Math.ceil(Math.max(margins.bottom, plotOffset.bottom));
|
1567 |
+
}
|
1568 |
+
|
1569 |
+
function setupGrid() {
|
1570 |
+
var i, axes = allAxes(), showGrid = options.grid.show;
|
1571 |
+
|
1572 |
+
// Initialize the plot's offset from the edge of the canvas
|
1573 |
+
|
1574 |
+
for (var a in plotOffset) {
|
1575 |
+
var margin = options.grid.margin || 0;
|
1576 |
+
plotOffset[a] = typeof margin == "number" ? margin : margin[a] || 0;
|
1577 |
+
}
|
1578 |
+
|
1579 |
+
executeHooks(hooks.processOffset, [plotOffset]);
|
1580 |
+
|
1581 |
+
// If the grid is visible, add its border width to the offset
|
1582 |
+
|
1583 |
+
for (var a in plotOffset) {
|
1584 |
+
if(typeof(options.grid.borderWidth) == "object") {
|
1585 |
+
plotOffset[a] += showGrid ? options.grid.borderWidth[a] : 0;
|
1586 |
+
}
|
1587 |
+
else {
|
1588 |
+
plotOffset[a] += showGrid ? options.grid.borderWidth : 0;
|
1589 |
+
}
|
1590 |
+
}
|
1591 |
+
|
1592 |
+
$.each(axes, function (_, axis) {
|
1593 |
+
var axisOpts = axis.options;
|
1594 |
+
axis.show = axisOpts.show == null ? axis.used : axisOpts.show;
|
1595 |
+
axis.reserveSpace = axisOpts.reserveSpace == null ? axis.show : axisOpts.reserveSpace;
|
1596 |
+
setRange(axis);
|
1597 |
+
});
|
1598 |
+
|
1599 |
+
if (showGrid) {
|
1600 |
+
|
1601 |
+
var allocatedAxes = $.grep(axes, function (axis) {
|
1602 |
+
return axis.show || axis.reserveSpace;
|
1603 |
+
});
|
1604 |
+
|
1605 |
+
$.each(allocatedAxes, function (_, axis) {
|
1606 |
+
// make the ticks
|
1607 |
+
setupTickGeneration(axis);
|
1608 |
+
setTicks(axis);
|
1609 |
+
snapRangeToTicks(axis, axis.ticks);
|
1610 |
+
// find labelWidth/Height for axis
|
1611 |
+
measureTickLabels(axis);
|
1612 |
+
});
|
1613 |
+
|
1614 |
+
// with all dimensions calculated, we can compute the
|
1615 |
+
// axis bounding boxes, start from the outside
|
1616 |
+
// (reverse order)
|
1617 |
+
for (i = allocatedAxes.length - 1; i >= 0; --i)
|
1618 |
+
allocateAxisBoxFirstPhase(allocatedAxes[i]);
|
1619 |
+
|
1620 |
+
// make sure we've got enough space for things that
|
1621 |
+
// might stick out
|
1622 |
+
adjustLayoutForThingsStickingOut();
|
1623 |
+
|
1624 |
+
$.each(allocatedAxes, function (_, axis) {
|
1625 |
+
allocateAxisBoxSecondPhase(axis);
|
1626 |
+
});
|
1627 |
+
}
|
1628 |
+
|
1629 |
+
plotWidth = surface.width - plotOffset.left - plotOffset.right;
|
1630 |
+
plotHeight = surface.height - plotOffset.bottom - plotOffset.top;
|
1631 |
+
|
1632 |
+
// now we got the proper plot dimensions, we can compute the scaling
|
1633 |
+
$.each(axes, function (_, axis) {
|
1634 |
+
setTransformationHelpers(axis);
|
1635 |
+
});
|
1636 |
+
|
1637 |
+
if (showGrid) {
|
1638 |
+
drawAxisLabels();
|
1639 |
+
}
|
1640 |
+
|
1641 |
+
insertLegend();
|
1642 |
+
}
|
1643 |
+
|
1644 |
+
function setRange(axis) {
|
1645 |
+
var opts = axis.options,
|
1646 |
+
min = +(opts.min != null ? opts.min : axis.datamin),
|
1647 |
+
max = +(opts.max != null ? opts.max : axis.datamax),
|
1648 |
+
delta = max - min;
|
1649 |
+
|
1650 |
+
if (delta == 0.0) {
|
1651 |
+
// degenerate case
|
1652 |
+
var widen = max == 0 ? 1 : 0.01;
|
1653 |
+
|
1654 |
+
if (opts.min == null)
|
1655 |
+
min -= widen;
|
1656 |
+
// always widen max if we couldn't widen min to ensure we
|
1657 |
+
// don't fall into min == max which doesn't work
|
1658 |
+
if (opts.max == null || opts.min != null)
|
1659 |
+
max += widen;
|
1660 |
+
}
|
1661 |
+
else {
|
1662 |
+
// consider autoscaling
|
1663 |
+
var margin = opts.autoscaleMargin;
|
1664 |
+
if (margin != null) {
|
1665 |
+
if (opts.min == null) {
|
1666 |
+
min -= delta * margin;
|
1667 |
+
// make sure we don't go below zero if all values
|
1668 |
+
// are positive
|
1669 |
+
if (min < 0 && axis.datamin != null && axis.datamin >= 0)
|
1670 |
+
min = 0;
|
1671 |
+
}
|
1672 |
+
if (opts.max == null) {
|
1673 |
+
max += delta * margin;
|
1674 |
+
if (max > 0 && axis.datamax != null && axis.datamax <= 0)
|
1675 |
+
max = 0;
|
1676 |
+
}
|
1677 |
+
}
|
1678 |
+
}
|
1679 |
+
axis.min = min;
|
1680 |
+
axis.max = max;
|
1681 |
+
}
|
1682 |
+
|
1683 |
+
function setupTickGeneration(axis) {
|
1684 |
+
var opts = axis.options;
|
1685 |
+
|
1686 |
+
// estimate number of ticks
|
1687 |
+
var noTicks;
|
1688 |
+
if (typeof opts.ticks == "number" && opts.ticks > 0)
|
1689 |
+
noTicks = opts.ticks;
|
1690 |
+
else
|
1691 |
+
// heuristic based on the model a*sqrt(x) fitted to
|
1692 |
+
// some data points that seemed reasonable
|
1693 |
+
noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? surface.width : surface.height);
|
1694 |
+
|
1695 |
+
var delta = (axis.max - axis.min) / noTicks,
|
1696 |
+
dec = -Math.floor(Math.log(delta) / Math.LN10),
|
1697 |
+
maxDec = opts.tickDecimals;
|
1698 |
+
|
1699 |
+
if (maxDec != null && dec > maxDec) {
|
1700 |
+
dec = maxDec;
|
1701 |
+
}
|
1702 |
+
|
1703 |
+
var magn = Math.pow(10, -dec),
|
1704 |
+
norm = delta / magn, // norm is between 1.0 and 10.0
|
1705 |
+
size;
|
1706 |
+
|
1707 |
+
if (norm < 1.5) {
|
1708 |
+
size = 1;
|
1709 |
+
} else if (norm < 3) {
|
1710 |
+
size = 2;
|
1711 |
+
// special case for 2.5, requires an extra decimal
|
1712 |
+
if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {
|
1713 |
+
size = 2.5;
|
1714 |
+
++dec;
|
1715 |
+
}
|
1716 |
+
} else if (norm < 7.5) {
|
1717 |
+
size = 5;
|
1718 |
+
} else {
|
1719 |
+
size = 10;
|
1720 |
+
}
|
1721 |
+
|
1722 |
+
size *= magn;
|
1723 |
+
|
1724 |
+
if (opts.minTickSize != null && size < opts.minTickSize) {
|
1725 |
+
size = opts.minTickSize;
|
1726 |
+
}
|
1727 |
+
|
1728 |
+
axis.delta = delta;
|
1729 |
+
axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);
|
1730 |
+
axis.tickSize = opts.tickSize || size;
|
1731 |
+
|
1732 |
+
// Time mode was moved to a plug-in in 0.8, and since so many people use it
|
1733 |
+
// we'll add an especially friendly reminder to make sure they included it.
|
1734 |
+
|
1735 |
+
if (opts.mode == "time" && !axis.tickGenerator) {
|
1736 |
+
throw new Error("Time mode requires the flot.time plugin.");
|
1737 |
+
}
|
1738 |
+
|
1739 |
+
// Flot supports base-10 axes; any other mode else is handled by a plug-in,
|
1740 |
+
// like flot.time.js.
|
1741 |
+
|
1742 |
+
if (!axis.tickGenerator) {
|
1743 |
+
|
1744 |
+
axis.tickGenerator = function (axis) {
|
1745 |
+
|
1746 |
+
var ticks = [],
|
1747 |
+
start = floorInBase(axis.min, axis.tickSize),
|
1748 |
+
i = 0,
|
1749 |
+
v = Number.NaN,
|
1750 |
+
prev;
|
1751 |
+
|
1752 |
+
do {
|
1753 |
+
prev = v;
|
1754 |
+
v = start + i * axis.tickSize;
|
1755 |
+
ticks.push(v);
|
1756 |
+
++i;
|
1757 |
+
} while (v < axis.max && v != prev);
|
1758 |
+
return ticks;
|
1759 |
+
};
|
1760 |
+
|
1761 |
+
axis.tickFormatter = function (value, axis) {
|
1762 |
+
|
1763 |
+
var factor = axis.tickDecimals ? Math.pow(10, axis.tickDecimals) : 1;
|
1764 |
+
var formatted = "" + Math.round(value * factor) / factor;
|
1765 |
+
|
1766 |
+
// If tickDecimals was specified, ensure that we have exactly that
|
1767 |
+
// much precision; otherwise default to the value's own precision.
|
1768 |
+
|
1769 |
+
if (axis.tickDecimals != null) {
|
1770 |
+
var decimal = formatted.indexOf(".");
|
1771 |
+
var precision = decimal == -1 ? 0 : formatted.length - decimal - 1;
|
1772 |
+
if (precision < axis.tickDecimals) {
|
1773 |
+
return (precision ? formatted : formatted + ".") + ("" + factor).substr(1, axis.tickDecimals - precision);
|
1774 |
+
}
|
1775 |
+
}
|
1776 |
+
|
1777 |
+
return formatted;
|
1778 |
+
};
|
1779 |
+
}
|
1780 |
+
|
1781 |
+
if ($.isFunction(opts.tickFormatter))
|
1782 |
+
axis.tickFormatter = function (v, axis) { return "" + opts.tickFormatter(v, axis); };
|
1783 |
+
|
1784 |
+
if (opts.alignTicksWithAxis != null) {
|
1785 |
+
var otherAxis = (axis.direction == "x" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];
|
1786 |
+
if (otherAxis && otherAxis.used && otherAxis != axis) {
|
1787 |
+
// consider snapping min/max to outermost nice ticks
|
1788 |
+
var niceTicks = axis.tickGenerator(axis);
|
1789 |
+
if (niceTicks.length > 0) {
|
1790 |
+
if (opts.min == null)
|
1791 |
+
axis.min = Math.min(axis.min, niceTicks[0]);
|
1792 |
+
if (opts.max == null && niceTicks.length > 1)
|
1793 |
+
axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);
|
1794 |
+
}
|
1795 |
+
|
1796 |
+
axis.tickGenerator = function (axis) {
|
1797 |
+
// copy ticks, scaled to this axis
|
1798 |
+
var ticks = [], v, i;
|
1799 |
+
for (i = 0; i < otherAxis.ticks.length; ++i) {
|
1800 |
+
v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);
|
1801 |
+
v = axis.min + v * (axis.max - axis.min);
|
1802 |
+
ticks.push(v);
|
1803 |
+
}
|
1804 |
+
return ticks;
|
1805 |
+
};
|
1806 |
+
|
1807 |
+
// we might need an extra decimal since forced
|
1808 |
+
// ticks don't necessarily fit naturally
|
1809 |
+
if (!axis.mode && opts.tickDecimals == null) {
|
1810 |
+
var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1),
|
1811 |
+
ts = axis.tickGenerator(axis);
|
1812 |
+
|
1813 |
+
// only proceed if the tick interval rounded
|
1814 |
+
// with an extra decimal doesn't give us a
|
1815 |
+
// zero at end
|
1816 |
+
if (!(ts.length > 1 && /\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))
|
1817 |
+
axis.tickDecimals = extraDec;
|
1818 |
+
}
|
1819 |
+
}
|
1820 |
+
}
|
1821 |
+
}
|
1822 |
+
|
1823 |
+
function setTicks(axis) {
|
1824 |
+
var oticks = axis.options.ticks, ticks = [];
|
1825 |
+
if (oticks == null || (typeof oticks == "number" && oticks > 0))
|
1826 |
+
ticks = axis.tickGenerator(axis);
|
1827 |
+
else if (oticks) {
|
1828 |
+
if ($.isFunction(oticks))
|
1829 |
+
// generate the ticks
|
1830 |
+
ticks = oticks(axis);
|
1831 |
+
else
|
1832 |
+
ticks = oticks;
|
1833 |
+
}
|
1834 |
+
|
1835 |
+
// clean up/labelify the supplied ticks, copy them over
|
1836 |
+
var i, v;
|
1837 |
+
axis.ticks = [];
|
1838 |
+
for (i = 0; i < ticks.length; ++i) {
|
1839 |
+
var label = null;
|
1840 |
+
var t = ticks[i];
|
1841 |
+
if (typeof t == "object") {
|
1842 |
+
v = +t[0];
|
1843 |
+
if (t.length > 1)
|
1844 |
+
label = t[1];
|
1845 |
+
}
|
1846 |
+
else
|
1847 |
+
v = +t;
|
1848 |
+
if (label == null)
|
1849 |
+
label = axis.tickFormatter(v, axis);
|
1850 |
+
if (!isNaN(v))
|
1851 |
+
axis.ticks.push({ v: v, label: label });
|
1852 |
+
}
|
1853 |
+
}
|
1854 |
+
|
1855 |
+
function snapRangeToTicks(axis, ticks) {
|
1856 |
+
if (axis.options.autoscaleMargin && ticks.length > 0) {
|
1857 |
+
// snap to ticks
|
1858 |
+
if (axis.options.min == null)
|
1859 |
+
axis.min = Math.min(axis.min, ticks[0].v);
|
1860 |
+
if (axis.options.max == null && ticks.length > 1)
|
1861 |
+
axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);
|
1862 |
+
}
|
1863 |
+
}
|
1864 |
+
|
1865 |
+
function draw() {
|
1866 |
+
|
1867 |
+
surface.clear();
|
1868 |
+
|
1869 |
+
executeHooks(hooks.drawBackground, [ctx]);
|
1870 |
+
|
1871 |
+
var grid = options.grid;
|
1872 |
+
|
1873 |
+
// draw background, if any
|
1874 |
+
if (grid.show && grid.backgroundColor)
|
1875 |
+
drawBackground();
|
1876 |
+
|
1877 |
+
if (grid.show && !grid.aboveData) {
|
1878 |
+
drawGrid();
|
1879 |
+
}
|
1880 |
+
|
1881 |
+
for (var i = 0; i < series.length; ++i) {
|
1882 |
+
executeHooks(hooks.drawSeries, [ctx, series[i]]);
|
1883 |
+
drawSeries(series[i]);
|
1884 |
+
}
|
1885 |
+
|
1886 |
+
executeHooks(hooks.draw, [ctx]);
|
1887 |
+
|
1888 |
+
if (grid.show && grid.aboveData) {
|
1889 |
+
drawGrid();
|
1890 |
+
}
|
1891 |
+
|
1892 |
+
surface.render();
|
1893 |
+
|
1894 |
+
// A draw implies that either the axes or data have changed, so we
|
1895 |
+
// should probably update the overlay highlights as well.
|
1896 |
+
|
1897 |
+
triggerRedrawOverlay();
|
1898 |
+
}
|
1899 |
+
|
1900 |
+
function extractRange(ranges, coord) {
|
1901 |
+
var axis, from, to, key, axes = allAxes();
|
1902 |
+
|
1903 |
+
for (var i = 0; i < axes.length; ++i) {
|
1904 |
+
axis = axes[i];
|
1905 |
+
if (axis.direction == coord) {
|
1906 |
+
key = coord + axis.n + "axis";
|
1907 |
+
if (!ranges[key] && axis.n == 1)
|
1908 |
+
key = coord + "axis"; // support x1axis as xaxis
|
1909 |
+
if (ranges[key]) {
|
1910 |
+
from = ranges[key].from;
|
1911 |
+
to = ranges[key].to;
|
1912 |
+
break;
|
1913 |
+
}
|
1914 |
+
}
|
1915 |
+
}
|
1916 |
+
|
1917 |
+
// backwards-compat stuff - to be removed in future
|
1918 |
+
if (!ranges[key]) {
|
1919 |
+
axis = coord == "x" ? xaxes[0] : yaxes[0];
|
1920 |
+
from = ranges[coord + "1"];
|
1921 |
+
to = ranges[coord + "2"];
|
1922 |
+
}
|
1923 |
+
|
1924 |
+
// auto-reverse as an added bonus
|
1925 |
+
if (from != null && to != null && from > to) {
|
1926 |
+
var tmp = from;
|
1927 |
+
from = to;
|
1928 |
+
to = tmp;
|
1929 |
+
}
|
1930 |
+
|
1931 |
+
return { from: from, to: to, axis: axis };
|
1932 |
+
}
|
1933 |
+
|
1934 |
+
function drawBackground() {
|
1935 |
+
ctx.save();
|
1936 |
+
ctx.translate(plotOffset.left, plotOffset.top);
|
1937 |
+
|
1938 |
+
ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)");
|
1939 |
+
ctx.fillRect(0, 0, plotWidth, plotHeight);
|
1940 |
+
ctx.restore();
|
1941 |
+
}
|
1942 |
+
|
1943 |
+
function drawGrid() {
|
1944 |
+
var i, axes, bw, bc;
|
1945 |
+
|
1946 |
+
ctx.save();
|
1947 |
+
ctx.translate(plotOffset.left, plotOffset.top);
|
1948 |
+
|
1949 |
+
// draw markings
|
1950 |
+
var markings = options.grid.markings;
|
1951 |
+
if (markings) {
|
1952 |
+
if ($.isFunction(markings)) {
|
1953 |
+
axes = plot.getAxes();
|
1954 |
+
// xmin etc. is backwards compatibility, to be
|
1955 |
+
// removed in the future
|
1956 |
+
axes.xmin = axes.xaxis.min;
|
1957 |
+
axes.xmax = axes.xaxis.max;
|
1958 |
+
axes.ymin = axes.yaxis.min;
|
1959 |
+
axes.ymax = axes.yaxis.max;
|
1960 |
+
|
1961 |
+
markings = markings(axes);
|
1962 |
+
}
|
1963 |
+
|
1964 |
+
for (i = 0; i < markings.length; ++i) {
|
1965 |
+
var m = markings[i],
|
1966 |
+
xrange = extractRange(m, "x"),
|
1967 |
+
yrange = extractRange(m, "y");
|
1968 |
+
|
1969 |
+
// fill in missing
|
1970 |
+
if (xrange.from == null)
|
1971 |
+
xrange.from = xrange.axis.min;
|
1972 |
+
if (xrange.to == null)
|
1973 |
+
xrange.to = xrange.axis.max;
|
1974 |
+
if (yrange.from == null)
|
1975 |
+
yrange.from = yrange.axis.min;
|
1976 |
+
if (yrange.to == null)
|
1977 |
+
yrange.to = yrange.axis.max;
|
1978 |
+
|
1979 |
+
// clip
|
1980 |
+
if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||
|
1981 |
+
yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)
|
1982 |
+
continue;
|
1983 |
+
|
1984 |
+
xrange.from = Math.max(xrange.from, xrange.axis.min);
|
1985 |
+
xrange.to = Math.min(xrange.to, xrange.axis.max);
|
1986 |
+
yrange.from = Math.max(yrange.from, yrange.axis.min);
|
1987 |
+
yrange.to = Math.min(yrange.to, yrange.axis.max);
|
1988 |
+
|
1989 |
+
var xequal = xrange.from === xrange.to,
|
1990 |
+
yequal = yrange.from === yrange.to;
|
1991 |
+
|
1992 |
+
if (xequal && yequal) {
|
1993 |
+
continue;
|
1994 |
+
}
|
1995 |
+
|
1996 |
+
// then draw
|
1997 |
+
xrange.from = Math.floor(xrange.axis.p2c(xrange.from));
|
1998 |
+
xrange.to = Math.floor(xrange.axis.p2c(xrange.to));
|
1999 |
+
yrange.from = Math.floor(yrange.axis.p2c(yrange.from));
|
2000 |
+
yrange.to = Math.floor(yrange.axis.p2c(yrange.to));
|
2001 |
+
|
2002 |
+
if (xequal || yequal) {
|
2003 |
+
var lineWidth = m.lineWidth || options.grid.markingsLineWidth,
|
2004 |
+
subPixel = lineWidth % 2 ? 0.5 : 0;
|
2005 |
+
ctx.beginPath();
|
2006 |
+
ctx.strokeStyle = m.color || options.grid.markingsColor;
|
2007 |
+
ctx.lineWidth = lineWidth;
|
2008 |
+
if (xequal) {
|
2009 |
+
ctx.moveTo(xrange.to + subPixel, yrange.from);
|
2010 |
+
ctx.lineTo(xrange.to + subPixel, yrange.to);
|
2011 |
+
} else {
|
2012 |
+
ctx.moveTo(xrange.from, yrange.to + subPixel);
|
2013 |
+
ctx.lineTo(xrange.to, yrange.to + subPixel);
|
2014 |
+
}
|
2015 |
+
ctx.stroke();
|
2016 |
+
} else {
|
2017 |
+
ctx.fillStyle = m.color || options.grid.markingsColor;
|
2018 |
+
ctx.fillRect(xrange.from, yrange.to,
|
2019 |
+
xrange.to - xrange.from,
|
2020 |
+
yrange.from - yrange.to);
|
2021 |
+
}
|
2022 |
+
}
|
2023 |
+
}
|
2024 |
+
|
2025 |
+
// draw the ticks
|
2026 |
+
axes = allAxes();
|
2027 |
+
bw = options.grid.borderWidth;
|
2028 |
+
|
2029 |
+
for (var j = 0; j < axes.length; ++j) {
|
2030 |
+
var axis = axes[j], box = axis.box,
|
2031 |
+
t = axis.tickLength, x, y, xoff, yoff;
|
2032 |
+
if (!axis.show || axis.ticks.length == 0)
|
2033 |
+
continue;
|
2034 |
+
|
2035 |
+
ctx.lineWidth = 1;
|
2036 |
+
|
2037 |
+
// find the edges
|
2038 |
+
if (axis.direction == "x") {
|
2039 |
+
x = 0;
|
2040 |
+
if (t == "full")
|
2041 |
+
y = (axis.position == "top" ? 0 : plotHeight);
|
2042 |
+
else
|
2043 |
+
y = box.top - plotOffset.top + (axis.position == "top" ? box.height : 0);
|
2044 |
+
}
|
2045 |
+
else {
|
2046 |
+
y = 0;
|
2047 |
+
if (t == "full")
|
2048 |
+
x = (axis.position == "left" ? 0 : plotWidth);
|
2049 |
+
else
|
2050 |
+
x = box.left - plotOffset.left + (axis.position == "left" ? box.width : 0);
|
2051 |
+
}
|
2052 |
+
|
2053 |
+
// draw tick bar
|
2054 |
+
if (!axis.innermost) {
|
2055 |
+
ctx.strokeStyle = axis.options.color;
|
2056 |
+
ctx.beginPath();
|
2057 |
+
xoff = yoff = 0;
|
2058 |
+
if (axis.direction == "x")
|
2059 |
+
xoff = plotWidth + 1;
|
2060 |
+
else
|
2061 |
+
yoff = plotHeight + 1;
|
2062 |
+
|
2063 |
+
if (ctx.lineWidth == 1) {
|
2064 |
+
if (axis.direction == "x") {
|
2065 |
+
y = Math.floor(y) + 0.5;
|
2066 |
+
} else {
|
2067 |
+
x = Math.floor(x) + 0.5;
|
2068 |
+
}
|
2069 |
+
}
|
2070 |
+
|
2071 |
+
ctx.moveTo(x, y);
|
2072 |
+
ctx.lineTo(x + xoff, y + yoff);
|
2073 |
+
ctx.stroke();
|
2074 |
+
}
|
2075 |
+
|
2076 |
+
// draw ticks
|
2077 |
+
|
2078 |
+
ctx.strokeStyle = axis.options.tickColor;
|
2079 |
+
|
2080 |
+
ctx.beginPath();
|
2081 |
+
for (i = 0; i < axis.ticks.length; ++i) {
|
2082 |
+
var v = axis.ticks[i].v;
|
2083 |
+
|
2084 |
+
xoff = yoff = 0;
|
2085 |
+
|
2086 |
+
if (isNaN(v) || v < axis.min || v > axis.max
|
2087 |
+
// skip those lying on the axes if we got a border
|
2088 |
+
|| (t == "full"
|
2089 |
+
&& ((typeof bw == "object" && bw[axis.position] > 0) || bw > 0)
|
2090 |
+
&& (v == axis.min || v == axis.max)))
|
2091 |
+
continue;
|
2092 |
+
|
2093 |
+
if (axis.direction == "x") {
|
2094 |
+
x = axis.p2c(v);
|
2095 |
+
yoff = t == "full" ? -plotHeight : t;
|
2096 |
+
|
2097 |
+
if (axis.position == "top")
|
2098 |
+
yoff = -yoff;
|
2099 |
+
}
|
2100 |
+
else {
|
2101 |
+
y = axis.p2c(v);
|
2102 |
+
xoff = t == "full" ? -plotWidth : t;
|
2103 |
+
|
2104 |
+
if (axis.position == "left")
|
2105 |
+
xoff = -xoff;
|
2106 |
+
}
|
2107 |
+
|
2108 |
+
if (ctx.lineWidth == 1) {
|
2109 |
+
if (axis.direction == "x")
|
2110 |
+
x = Math.floor(x) + 0.5;
|
2111 |
+
else
|
2112 |
+
y = Math.floor(y) + 0.5;
|
2113 |
+
}
|
2114 |
+
|
2115 |
+
ctx.moveTo(x, y);
|
2116 |
+
ctx.lineTo(x + xoff, y + yoff);
|
2117 |
+
}
|
2118 |
+
|
2119 |
+
ctx.stroke();
|
2120 |
+
}
|
2121 |
+
|
2122 |
+
|
2123 |
+
// draw border
|
2124 |
+
if (bw) {
|
2125 |
+
// If either borderWidth or borderColor is an object, then draw the border
|
2126 |
+
// line by line instead of as one rectangle
|
2127 |
+
bc = options.grid.borderColor;
|
2128 |
+
if(typeof bw == "object" || typeof bc == "object") {
|
2129 |
+
if (typeof bw !== "object") {
|
2130 |
+
bw = {top: bw, right: bw, bottom: bw, left: bw};
|
2131 |
+
}
|
2132 |
+
if (typeof bc !== "object") {
|
2133 |
+
bc = {top: bc, right: bc, bottom: bc, left: bc};
|
2134 |
+
}
|
2135 |
+
|
2136 |
+
if (bw.top > 0) {
|
2137 |
+
ctx.strokeStyle = bc.top;
|
2138 |
+
ctx.lineWidth = bw.top;
|
2139 |
+
ctx.beginPath();
|
2140 |
+
ctx.moveTo(0 - bw.left, 0 - bw.top/2);
|
2141 |
+
ctx.lineTo(plotWidth, 0 - bw.top/2);
|
2142 |
+
ctx.stroke();
|
2143 |
+
}
|
2144 |
+
|
2145 |
+
if (bw.right > 0) {
|
2146 |
+
ctx.strokeStyle = bc.right;
|
2147 |
+
ctx.lineWidth = bw.right;
|
2148 |
+
ctx.beginPath();
|
2149 |
+
ctx.moveTo(plotWidth + bw.right / 2, 0 - bw.top);
|
2150 |
+
ctx.lineTo(plotWidth + bw.right / 2, plotHeight);
|
2151 |
+
ctx.stroke();
|
2152 |
+
}
|
2153 |
+
|
2154 |
+
if (bw.bottom > 0) {
|
2155 |
+
ctx.strokeStyle = bc.bottom;
|
2156 |
+
ctx.lineWidth = bw.bottom;
|
2157 |
+
ctx.beginPath();
|
2158 |
+
ctx.moveTo(plotWidth + bw.right, plotHeight + bw.bottom / 2);
|
2159 |
+
ctx.lineTo(0, plotHeight + bw.bottom / 2);
|
2160 |
+
ctx.stroke();
|
2161 |
+
}
|
2162 |
+
|
2163 |
+
if (bw.left > 0) {
|
2164 |
+
ctx.strokeStyle = bc.left;
|
2165 |
+
ctx.lineWidth = bw.left;
|
2166 |
+
ctx.beginPath();
|
2167 |
+
ctx.moveTo(0 - bw.left/2, plotHeight + bw.bottom);
|
2168 |
+
ctx.lineTo(0- bw.left/2, 0);
|
2169 |
+
ctx.stroke();
|
2170 |
+
}
|
2171 |
+
}
|
2172 |
+
else {
|
2173 |
+
ctx.lineWidth = bw;
|
2174 |
+
ctx.strokeStyle = options.grid.borderColor;
|
2175 |
+
ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);
|
2176 |
+
}
|
2177 |
+
}
|
2178 |
+
|
2179 |
+
ctx.restore();
|
2180 |
+
}
|
2181 |
+
|
2182 |
+
function drawAxisLabels() {
|
2183 |
+
|
2184 |
+
$.each(allAxes(), function (_, axis) {
|
2185 |
+
var box = axis.box,
|
2186 |
+
legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis",
|
2187 |
+
layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles,
|
2188 |
+
font = axis.options.font || "flot-tick-label tickLabel",
|
2189 |
+
tick, x, y, halign, valign;
|
2190 |
+
|
2191 |
+
// Remove text before checking for axis.show and ticks.length;
|
2192 |
+
// otherwise plugins, like flot-tickrotor, that draw their own
|
2193 |
+
// tick labels will end up with both theirs and the defaults.
|
2194 |
+
|
2195 |
+
surface.removeText(layer);
|
2196 |
+
|
2197 |
+
if (!axis.show || axis.ticks.length == 0)
|
2198 |
+
return;
|
2199 |
+
|
2200 |
+
for (var i = 0; i < axis.ticks.length; ++i) {
|
2201 |
+
|
2202 |
+
tick = axis.ticks[i];
|
2203 |
+
if (!tick.label || tick.v < axis.min || tick.v > axis.max)
|
2204 |
+
continue;
|
2205 |
+
|
2206 |
+
if (axis.direction == "x") {
|
2207 |
+
halign = "center";
|
2208 |
+
x = plotOffset.left + axis.p2c(tick.v);
|
2209 |
+
if (axis.position == "bottom") {
|
2210 |
+
y = box.top + box.padding;
|
2211 |
+
} else {
|
2212 |
+
y = box.top + box.height - box.padding;
|
2213 |
+
valign = "bottom";
|
2214 |
+
}
|
2215 |
+
} else {
|
2216 |
+
valign = "middle";
|
2217 |
+
y = plotOffset.top + axis.p2c(tick.v);
|
2218 |
+
if (axis.position == "left") {
|
2219 |
+
x = box.left + box.width - box.padding;
|
2220 |
+
halign = "right";
|
2221 |
+
} else {
|
2222 |
+
x = box.left + box.padding;
|
2223 |
+
}
|
2224 |
+
}
|
2225 |
+
|
2226 |
+
surface.addText(layer, x, y, tick.label, font, null, null, halign, valign);
|
2227 |
+
}
|
2228 |
+
});
|
2229 |
+
}
|
2230 |
+
|
2231 |
+
function drawSeries(series) {
|
2232 |
+
if (series.lines.show)
|
2233 |
+
drawSeriesLines(series);
|
2234 |
+
if (series.bars.show)
|
2235 |
+
drawSeriesBars(series);
|
2236 |
+
if (series.points.show)
|
2237 |
+
drawSeriesPoints(series);
|
2238 |
+
}
|
2239 |
+
|
2240 |
+
function drawSeriesLines(series) {
|
2241 |
+
function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {
|
2242 |
+
var points = datapoints.points,
|
2243 |
+
ps = datapoints.pointsize,
|
2244 |
+
prevx = null, prevy = null;
|
2245 |
+
|
2246 |
+
ctx.beginPath();
|
2247 |
+
for (var i = ps; i < points.length; i += ps) {
|
2248 |
+
var x1 = points[i - ps], y1 = points[i - ps + 1],
|
2249 |
+
x2 = points[i], y2 = points[i + 1];
|
2250 |
+
|
2251 |
+
if (x1 == null || x2 == null)
|
2252 |
+
continue;
|
2253 |
+
|
2254 |
+
// clip with ymin
|
2255 |
+
if (y1 <= y2 && y1 < axisy.min) {
|
2256 |
+
if (y2 < axisy.min)
|
2257 |
+
continue; // line segment is outside
|
2258 |
+
// compute new intersection point
|
2259 |
+
x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
|
2260 |
+
y1 = axisy.min;
|
2261 |
+
}
|
2262 |
+
else if (y2 <= y1 && y2 < axisy.min) {
|
2263 |
+
if (y1 < axisy.min)
|
2264 |
+
continue;
|
2265 |
+
x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
|
2266 |
+
y2 = axisy.min;
|
2267 |
+
}
|
2268 |
+
|
2269 |
+
// clip with ymax
|
2270 |
+
if (y1 >= y2 && y1 > axisy.max) {
|
2271 |
+
if (y2 > axisy.max)
|
2272 |
+
continue;
|
2273 |
+
x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
|
2274 |
+
y1 = axisy.max;
|
2275 |
+
}
|
2276 |
+
else if (y2 >= y1 && y2 > axisy.max) {
|
2277 |
+
if (y1 > axisy.max)
|
2278 |
+
continue;
|
2279 |
+
x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
|
2280 |
+
y2 = axisy.max;
|
2281 |
+
}
|
2282 |
+
|
2283 |
+
// clip with xmin
|
2284 |
+
if (x1 <= x2 && x1 < axisx.min) {
|
2285 |
+
if (x2 < axisx.min)
|
2286 |
+
continue;
|
2287 |
+
y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
|
2288 |
+
x1 = axisx.min;
|
2289 |
+
}
|
2290 |
+
else if (x2 <= x1 && x2 < axisx.min) {
|
2291 |
+
if (x1 < axisx.min)
|
2292 |
+
continue;
|
2293 |
+
y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
|
2294 |
+
x2 = axisx.min;
|
2295 |
+
}
|
2296 |
+
|
2297 |
+
// clip with xmax
|
2298 |
+
if (x1 >= x2 && x1 > axisx.max) {
|
2299 |
+
if (x2 > axisx.max)
|
2300 |
+
continue;
|
2301 |
+
y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
|
2302 |
+
x1 = axisx.max;
|
2303 |
+
}
|
2304 |
+
else if (x2 >= x1 && x2 > axisx.max) {
|
2305 |
+
if (x1 > axisx.max)
|
2306 |
+
continue;
|
2307 |
+
y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
|
2308 |
+
x2 = axisx.max;
|
2309 |
+
}
|
2310 |
+
|
2311 |
+
if (x1 != prevx || y1 != prevy)
|
2312 |
+
ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);
|
2313 |
+
|
2314 |
+
prevx = x2;
|
2315 |
+
prevy = y2;
|
2316 |
+
ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);
|
2317 |
+
}
|
2318 |
+
ctx.stroke();
|
2319 |
+
}
|
2320 |
+
|
2321 |
+
function plotLineArea(datapoints, axisx, axisy) {
|
2322 |
+
var points = datapoints.points,
|
2323 |
+
ps = datapoints.pointsize,
|
2324 |
+
bottom = Math.min(Math.max(0, axisy.min), axisy.max),
|
2325 |
+
i = 0, top, areaOpen = false,
|
2326 |
+
ypos = 1, segmentStart = 0, segmentEnd = 0;
|
2327 |
+
|
2328 |
+
// we process each segment in two turns, first forward
|
2329 |
+
// direction to sketch out top, then once we hit the
|
2330 |
+
// end we go backwards to sketch the bottom
|
2331 |
+
while (true) {
|
2332 |
+
if (ps > 0 && i > points.length + ps)
|
2333 |
+
break;
|
2334 |
+
|
2335 |
+
i += ps; // ps is negative if going backwards
|
2336 |
+
|
2337 |
+
var x1 = points[i - ps],
|
2338 |
+
y1 = points[i - ps + ypos],
|
2339 |
+
x2 = points[i], y2 = points[i + ypos];
|
2340 |
+
|
2341 |
+
if (areaOpen) {
|
2342 |
+
if (ps > 0 && x1 != null && x2 == null) {
|
2343 |
+
// at turning point
|
2344 |
+
segmentEnd = i;
|
2345 |
+
ps = -ps;
|
2346 |
+
ypos = 2;
|
2347 |
+
continue;
|
2348 |
+
}
|
2349 |
+
|
2350 |
+
if (ps < 0 && i == segmentStart + ps) {
|
2351 |
+
// done with the reverse sweep
|
2352 |
+
ctx.fill();
|
2353 |
+
areaOpen = false;
|
2354 |
+
ps = -ps;
|
2355 |
+
ypos = 1;
|
2356 |
+
i = segmentStart = segmentEnd + ps;
|
2357 |
+
continue;
|
2358 |
+
}
|
2359 |
+
}
|
2360 |
+
|
2361 |
+
if (x1 == null || x2 == null)
|
2362 |
+
continue;
|
2363 |
+
|
2364 |
+
// clip x values
|
2365 |
+
|
2366 |
+
// clip with xmin
|
2367 |
+
if (x1 <= x2 && x1 < axisx.min) {
|
2368 |
+
if (x2 < axisx.min)
|
2369 |
+
continue;
|
2370 |
+
y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
|
2371 |
+
x1 = axisx.min;
|
2372 |
+
}
|
2373 |
+
else if (x2 <= x1 && x2 < axisx.min) {
|
2374 |
+
if (x1 < axisx.min)
|
2375 |
+
continue;
|
2376 |
+
y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
|
2377 |
+
x2 = axisx.min;
|
2378 |
+
}
|
2379 |
+
|
2380 |
+
// clip with xmax
|
2381 |
+
if (x1 >= x2 && x1 > axisx.max) {
|
2382 |
+
if (x2 > axisx.max)
|
2383 |
+
continue;
|
2384 |
+
y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
|
2385 |
+
x1 = axisx.max;
|
2386 |
+
}
|
2387 |
+
else if (x2 >= x1 && x2 > axisx.max) {
|
2388 |
+
if (x1 > axisx.max)
|
2389 |
+
continue;
|
2390 |
+
y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
|
2391 |
+
x2 = axisx.max;
|
2392 |
+
}
|
2393 |
+
|
2394 |
+
if (!areaOpen) {
|
2395 |
+
// open area
|
2396 |
+
ctx.beginPath();
|
2397 |
+
ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));
|
2398 |
+
areaOpen = true;
|
2399 |
+
}
|
2400 |
+
|
2401 |
+
// now first check the case where both is outside
|
2402 |
+
if (y1 >= axisy.max && y2 >= axisy.max) {
|
2403 |
+
ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));
|
2404 |
+
ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));
|
2405 |
+
continue;
|
2406 |
+
}
|
2407 |
+
else if (y1 <= axisy.min && y2 <= axisy.min) {
|
2408 |
+
ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));
|
2409 |
+
ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));
|
2410 |
+
continue;
|
2411 |
+
}
|
2412 |
+
|
2413 |
+
// else it's a bit more complicated, there might
|
2414 |
+
// be a flat maxed out rectangle first, then a
|
2415 |
+
// triangular cutout or reverse; to find these
|
2416 |
+
// keep track of the current x values
|
2417 |
+
var x1old = x1, x2old = x2;
|
2418 |
+
|
2419 |
+
// clip the y values, without shortcutting, we
|
2420 |
+
// go through all cases in turn
|
2421 |
+
|
2422 |
+
// clip with ymin
|
2423 |
+
if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {
|
2424 |
+
x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
|
2425 |
+
y1 = axisy.min;
|
2426 |
+
}
|
2427 |
+
else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {
|
2428 |
+
x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
|
2429 |
+
y2 = axisy.min;
|
2430 |
+
}
|
2431 |
+
|
2432 |
+
// clip with ymax
|
2433 |
+
if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {
|
2434 |
+
x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
|
2435 |
+
y1 = axisy.max;
|
2436 |
+
}
|
2437 |
+
else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {
|
2438 |
+
x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
|
2439 |
+
y2 = axisy.max;
|
2440 |
+
}
|
2441 |
+
|
2442 |
+
// if the x value was changed we got a rectangle
|
2443 |
+
// to fill
|
2444 |
+
if (x1 != x1old) {
|
2445 |
+
ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));
|
2446 |
+
// it goes to (x1, y1), but we fill that below
|
2447 |
+
}
|
2448 |
+
|
2449 |
+
// fill triangular section, this sometimes result
|
2450 |
+
// in redundant points if (x1, y1) hasn't changed
|
2451 |
+
// from previous line to, but we just ignore that
|
2452 |
+
ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));
|
2453 |
+
ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));
|
2454 |
+
|
2455 |
+
// fill the other rectangle if it's there
|
2456 |
+
if (x2 != x2old) {
|
2457 |
+
ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));
|
2458 |
+
ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));
|
2459 |
+
}
|
2460 |
+
}
|
2461 |
+
}
|
2462 |
+
|
2463 |
+
ctx.save();
|
2464 |
+
ctx.translate(plotOffset.left, plotOffset.top);
|
2465 |
+
ctx.lineJoin = "round";
|
2466 |
+
|
2467 |
+
var lw = series.lines.lineWidth,
|
2468 |
+
sw = series.shadowSize;
|
2469 |
+
// FIXME: consider another form of shadow when filling is turned on
|
2470 |
+
if (lw > 0 && sw > 0) {
|
2471 |
+
// draw shadow as a thick and thin line with transparency
|
2472 |
+
ctx.lineWidth = sw;
|
2473 |
+
ctx.strokeStyle = "rgba(0,0,0,0.1)";
|
2474 |
+
// position shadow at angle from the mid of line
|
2475 |
+
var angle = Math.PI/18;
|
2476 |
+
plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);
|
2477 |
+
ctx.lineWidth = sw/2;
|
2478 |
+
plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);
|
2479 |
+
}
|
2480 |
+
|
2481 |
+
ctx.lineWidth = lw;
|
2482 |
+
ctx.strokeStyle = series.color;
|
2483 |
+
var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);
|
2484 |
+
if (fillStyle) {
|
2485 |
+
ctx.fillStyle = fillStyle;
|
2486 |
+
plotLineArea(series.datapoints, series.xaxis, series.yaxis);
|
2487 |
+
}
|
2488 |
+
|
2489 |
+
if (lw > 0)
|
2490 |
+
plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);
|
2491 |
+
ctx.restore();
|
2492 |
+
}
|
2493 |
+
|
2494 |
+
function drawSeriesPoints(series) {
|
2495 |
+
function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {
|
2496 |
+
var points = datapoints.points, ps = datapoints.pointsize;
|
2497 |
+
|
2498 |
+
for (var i = 0; i < points.length; i += ps) {
|
2499 |
+
var x = points[i], y = points[i + 1];
|
2500 |
+
if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
|
2501 |
+
continue;
|
2502 |
+
|
2503 |
+
ctx.beginPath();
|
2504 |
+
x = axisx.p2c(x);
|
2505 |
+
y = axisy.p2c(y) + offset;
|
2506 |
+
if (symbol == "circle")
|
2507 |
+
ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);
|
2508 |
+
else
|
2509 |
+
symbol(ctx, x, y, radius, shadow);
|
2510 |
+
ctx.closePath();
|
2511 |
+
|
2512 |
+
if (fillStyle) {
|
2513 |
+
ctx.fillStyle = fillStyle;
|
2514 |
+
ctx.fill();
|
2515 |
+
}
|
2516 |
+
ctx.stroke();
|
2517 |
+
}
|
2518 |
+
}
|
2519 |
+
|
2520 |
+
ctx.save();
|
2521 |
+
ctx.translate(plotOffset.left, plotOffset.top);
|
2522 |
+
|
2523 |
+
var lw = series.points.lineWidth,
|
2524 |
+
sw = series.shadowSize,
|
2525 |
+
radius = series.points.radius,
|
2526 |
+
symbol = series.points.symbol;
|
2527 |
+
|
2528 |
+
// If the user sets the line width to 0, we change it to a very
|
2529 |
+
// small value. A line width of 0 seems to force the default of 1.
|
2530 |
+
// Doing the conditional here allows the shadow setting to still be
|
2531 |
+
// optional even with a lineWidth of 0.
|
2532 |
+
|
2533 |
+
if( lw == 0 )
|
2534 |
+
lw = 0.0001;
|
2535 |
+
|
2536 |
+
if (lw > 0 && sw > 0) {
|
2537 |
+
// draw shadow in two steps
|
2538 |
+
var w = sw / 2;
|
2539 |
+
ctx.lineWidth = w;
|
2540 |
+
ctx.strokeStyle = "rgba(0,0,0,0.1)";
|
2541 |
+
plotPoints(series.datapoints, radius, null, w + w/2, true,
|
2542 |
+
series.xaxis, series.yaxis, symbol);
|
2543 |
+
|
2544 |
+
ctx.strokeStyle = "rgba(0,0,0,0.2)";
|
2545 |
+
plotPoints(series.datapoints, radius, null, w/2, true,
|
2546 |
+
series.xaxis, series.yaxis, symbol);
|
2547 |
+
}
|
2548 |
+
|
2549 |
+
ctx.lineWidth = lw;
|
2550 |
+
ctx.strokeStyle = series.color;
|
2551 |
+
plotPoints(series.datapoints, radius,
|
2552 |
+
getFillStyle(series.points, series.color), 0, false,
|
2553 |
+
series.xaxis, series.yaxis, symbol);
|
2554 |
+
ctx.restore();
|
2555 |
+
}
|
2556 |
+
|
2557 |
+
function drawBar(x, y, b, barLeft, barRight, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {
|
2558 |
+
var left, right, bottom, top,
|
2559 |
+
drawLeft, drawRight, drawTop, drawBottom,
|
2560 |
+
tmp;
|
2561 |
+
|
2562 |
+
// in horizontal mode, we start the bar from the left
|
2563 |
+
// instead of from the bottom so it appears to be
|
2564 |
+
// horizontal rather than vertical
|
2565 |
+
if (horizontal) {
|
2566 |
+
drawBottom = drawRight = drawTop = true;
|
2567 |
+
drawLeft = false;
|
2568 |
+
left = b;
|
2569 |
+
right = x;
|
2570 |
+
top = y + barLeft;
|
2571 |
+
bottom = y + barRight;
|
2572 |
+
|
2573 |
+
// account for negative bars
|
2574 |
+
if (right < left) {
|
2575 |
+
tmp = right;
|
2576 |
+
right = left;
|
2577 |
+
left = tmp;
|
2578 |
+
drawLeft = true;
|
2579 |
+
drawRight = false;
|
2580 |
+
}
|
2581 |
+
}
|
2582 |
+
else {
|
2583 |
+
drawLeft = drawRight = drawTop = true;
|
2584 |
+
drawBottom = false;
|
2585 |
+
left = x + barLeft;
|
2586 |
+
right = x + barRight;
|
2587 |
+
bottom = b;
|
2588 |
+
top = y;
|
2589 |
+
|
2590 |
+
// account for negative bars
|
2591 |
+
if (top < bottom) {
|
2592 |
+
tmp = top;
|
2593 |
+
top = bottom;
|
2594 |
+
bottom = tmp;
|
2595 |
+
drawBottom = true;
|
2596 |
+
drawTop = false;
|
2597 |
+
}
|
2598 |
+
}
|
2599 |
+
|
2600 |
+
// clip
|
2601 |
+
if (right < axisx.min || left > axisx.max ||
|
2602 |
+
top < axisy.min || bottom > axisy.max)
|
2603 |
+
return;
|
2604 |
+
|
2605 |
+
if (left < axisx.min) {
|
2606 |
+
left = axisx.min;
|
2607 |
+
drawLeft = false;
|
2608 |
+
}
|
2609 |
+
|
2610 |
+
if (right > axisx.max) {
|
2611 |
+
right = axisx.max;
|
2612 |
+
drawRight = false;
|
2613 |
+
}
|
2614 |
+
|
2615 |
+
if (bottom < axisy.min) {
|
2616 |
+
bottom = axisy.min;
|
2617 |
+
drawBottom = false;
|
2618 |
+
}
|
2619 |
+
|
2620 |
+
if (top > axisy.max) {
|
2621 |
+
top = axisy.max;
|
2622 |
+
drawTop = false;
|
2623 |
+
}
|
2624 |
+
|
2625 |
+
left = axisx.p2c(left);
|
2626 |
+
bottom = axisy.p2c(bottom);
|
2627 |
+
right = axisx.p2c(right);
|
2628 |
+
top = axisy.p2c(top);
|
2629 |
+
|
2630 |
+
// fill the bar
|
2631 |
+
if (fillStyleCallback) {
|
2632 |
+
c.fillStyle = fillStyleCallback(bottom, top);
|
2633 |
+
c.fillRect(left, top, right - left, bottom - top)
|
2634 |
+
}
|
2635 |
+
|
2636 |
+
// draw outline
|
2637 |
+
if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {
|
2638 |
+
c.beginPath();
|
2639 |
+
|
2640 |
+
// FIXME: inline moveTo is buggy with excanvas
|
2641 |
+
c.moveTo(left, bottom);
|
2642 |
+
if (drawLeft)
|
2643 |
+
c.lineTo(left, top);
|
2644 |
+
else
|
2645 |
+
c.moveTo(left, top);
|
2646 |
+
if (drawTop)
|
2647 |
+
c.lineTo(right, top);
|
2648 |
+
else
|
2649 |
+
c.moveTo(right, top);
|
2650 |
+
if (drawRight)
|
2651 |
+
c.lineTo(right, bottom);
|
2652 |
+
else
|
2653 |
+
c.moveTo(right, bottom);
|
2654 |
+
if (drawBottom)
|
2655 |
+
c.lineTo(left, bottom);
|
2656 |
+
else
|
2657 |
+
c.moveTo(left, bottom);
|
2658 |
+
c.stroke();
|
2659 |
+
}
|
2660 |
+
}
|
2661 |
+
|
2662 |
+
function drawSeriesBars(series) {
|
2663 |
+
function plotBars(datapoints, barLeft, barRight, fillStyleCallback, axisx, axisy) {
|
2664 |
+
var points = datapoints.points, ps = datapoints.pointsize;
|
2665 |
+
|
2666 |
+
for (var i = 0; i < points.length; i += ps) {
|
2667 |
+
if (points[i] == null)
|
2668 |
+
continue;
|
2669 |
+
drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);
|
2670 |
+
}
|
2671 |
+
}
|
2672 |
+
|
2673 |
+
ctx.save();
|
2674 |
+
ctx.translate(plotOffset.left, plotOffset.top);
|
2675 |
+
|
2676 |
+
// FIXME: figure out a way to add shadows (for instance along the right edge)
|
2677 |
+
ctx.lineWidth = series.bars.lineWidth;
|
2678 |
+
ctx.strokeStyle = series.color;
|
2679 |
+
|
2680 |
+
var barLeft;
|
2681 |
+
|
2682 |
+
switch (series.bars.align) {
|
2683 |
+
case "left":
|
2684 |
+
barLeft = 0;
|
2685 |
+
break;
|
2686 |
+
case "right":
|
2687 |
+
barLeft = -series.bars.barWidth;
|
2688 |
+
break;
|
2689 |
+
default:
|
2690 |
+
barLeft = -series.bars.barWidth / 2;
|
2691 |
+
}
|
2692 |
+
|
2693 |
+
var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;
|
2694 |
+
plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, fillStyleCallback, series.xaxis, series.yaxis);
|
2695 |
+
ctx.restore();
|
2696 |
+
}
|
2697 |
+
|
2698 |
+
function getFillStyle(filloptions, seriesColor, bottom, top) {
|
2699 |
+
var fill = filloptions.fill;
|
2700 |
+
if (!fill)
|
2701 |
+
return null;
|
2702 |
+
|
2703 |
+
if (filloptions.fillColor)
|
2704 |
+
return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);
|
2705 |
+
|
2706 |
+
var c = $.color.parse(seriesColor);
|
2707 |
+
c.a = typeof fill == "number" ? fill : 0.4;
|
2708 |
+
c.normalize();
|
2709 |
+
return c.toString();
|
2710 |
+
}
|
2711 |
+
|
2712 |
+
function insertLegend() {
|
2713 |
+
|
2714 |
+
if (options.legend.container != null) {
|
2715 |
+
$(options.legend.container).html("");
|
2716 |
+
} else {
|
2717 |
+
placeholder.find(".legend").remove();
|
2718 |
+
}
|
2719 |
+
|
2720 |
+
if (!options.legend.show) {
|
2721 |
+
return;
|
2722 |
+
}
|
2723 |
+
|
2724 |
+
var fragments = [], entries = [], rowStarted = false,
|
2725 |
+
lf = options.legend.labelFormatter, s, label;
|
2726 |
+
|
2727 |
+
// Build a list of legend entries, with each having a label and a color
|
2728 |
+
|
2729 |
+
for (var i = 0; i < series.length; ++i) {
|
2730 |
+
s = series[i];
|
2731 |
+
if (s.label) {
|
2732 |
+
label = lf ? lf(s.label, s) : s.label;
|
2733 |
+
if (label) {
|
2734 |
+
entries.push({
|
2735 |
+
label: label,
|
2736 |
+
color: s.color
|
2737 |
+
});
|
2738 |
+
}
|
2739 |
+
}
|
2740 |
+
}
|
2741 |
+
|
2742 |
+
// Sort the legend using either the default or a custom comparator
|
2743 |
+
|
2744 |
+
if (options.legend.sorted) {
|
2745 |
+
if ($.isFunction(options.legend.sorted)) {
|
2746 |
+
entries.sort(options.legend.sorted);
|
2747 |
+
} else if (options.legend.sorted == "reverse") {
|
2748 |
+
entries.reverse();
|
2749 |
+
} else {
|
2750 |
+
var ascending = options.legend.sorted != "descending";
|
2751 |
+
entries.sort(function(a, b) {
|
2752 |
+
return a.label == b.label ? 0 : (
|
2753 |
+
(a.label < b.label) != ascending ? 1 : -1 // Logical XOR
|
2754 |
+
);
|
2755 |
+
});
|
2756 |
+
}
|
2757 |
+
}
|
2758 |
+
|
2759 |
+
// Generate markup for the list of entries, in their final order
|
2760 |
+
|
2761 |
+
for (var i = 0; i < entries.length; ++i) {
|
2762 |
+
|
2763 |
+
var entry = entries[i];
|
2764 |
+
|
2765 |
+
if (i % options.legend.noColumns == 0) {
|
2766 |
+
if (rowStarted)
|
2767 |
+
fragments.push('</tr>');
|
2768 |
+
fragments.push('<tr>');
|
2769 |
+
rowStarted = true;
|
2770 |
+
}
|
2771 |
+
|
2772 |
+
fragments.push(
|
2773 |
+
'<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden"></div></div></td>' +
|
2774 |
+
'<td class="legendLabel">' + entry.label + '</td>'
|
2775 |
+
);
|
2776 |
+
}
|
2777 |
+
|
2778 |
+
if (rowStarted)
|
2779 |
+
fragments.push('</tr>');
|
2780 |
+
|
2781 |
+
if (fragments.length == 0)
|
2782 |
+
return;
|
2783 |
+
|
2784 |
+
var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join("") + '</table>';
|
2785 |
+
if (options.legend.container != null)
|
2786 |
+
$(options.legend.container).html(table);
|
2787 |
+
else {
|
2788 |
+
var pos = "",
|
2789 |
+
p = options.legend.position,
|
2790 |
+
m = options.legend.margin;
|
2791 |
+
if (m[0] == null)
|
2792 |
+
m = [m, m];
|
2793 |
+
if (p.charAt(0) == "n")
|
2794 |
+
pos += 'top:' + (m[1] + plotOffset.top) + 'px;';
|
2795 |
+
else if (p.charAt(0) == "s")
|
2796 |
+
pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';
|
2797 |
+
if (p.charAt(1) == "e")
|
2798 |
+
pos += 'right:' + (m[0] + plotOffset.right) + 'px;';
|
2799 |
+
else if (p.charAt(1) == "w")
|
2800 |
+
pos += 'left:' + (m[0] + plotOffset.left) + 'px;';
|
2801 |
+
var legend = $('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>').appendTo(placeholder);
|
2802 |
+
if (options.legend.backgroundOpacity != 0.0) {
|
2803 |
+
// put in the transparent background
|
2804 |
+
// separately to avoid blended labels and
|
2805 |
+
// label boxes
|
2806 |
+
var c = options.legend.backgroundColor;
|
2807 |
+
if (c == null) {
|
2808 |
+
c = options.grid.backgroundColor;
|
2809 |
+
if (c && typeof c == "string")
|
2810 |
+
c = $.color.parse(c);
|
2811 |
+
else
|
2812 |
+
c = $.color.extract(legend, 'background-color');
|
2813 |
+
c.a = 1;
|
2814 |
+
c = c.toString();
|
2815 |
+
}
|
2816 |
+
var div = legend.children();
|
2817 |
+
$('<div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);
|
2818 |
+
}
|
2819 |
+
}
|
2820 |
+
}
|
2821 |
+
|
2822 |
+
|
2823 |
+
// interactive features
|
2824 |
+
|
2825 |
+
var highlights = [],
|
2826 |
+
redrawTimeout = null;
|
2827 |
+
|
2828 |
+
// returns the data item the mouse is over, or null if none is found
|
2829 |
+
function findNearbyItem(mouseX, mouseY, seriesFilter) {
|
2830 |
+
var maxDistance = options.grid.mouseActiveRadius,
|
2831 |
+
smallestDistance = maxDistance * maxDistance + 1,
|
2832 |
+
item = null, foundPoint = false, i, j, ps;
|
2833 |
+
|
2834 |
+
for (i = series.length - 1; i >= 0; --i) {
|
2835 |
+
if (!seriesFilter(series[i]))
|
2836 |
+
continue;
|
2837 |
+
|
2838 |
+
var s = series[i],
|
2839 |
+
axisx = s.xaxis,
|
2840 |
+
axisy = s.yaxis,
|
2841 |
+
points = s.datapoints.points,
|
2842 |
+
mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster
|
2843 |
+
my = axisy.c2p(mouseY),
|
2844 |
+
maxx = maxDistance / axisx.scale,
|
2845 |
+
maxy = maxDistance / axisy.scale;
|
2846 |
+
|
2847 |
+
ps = s.datapoints.pointsize;
|
2848 |
+
// with inverse transforms, we can't use the maxx/maxy
|
2849 |
+
// optimization, sadly
|
2850 |
+
if (axisx.options.inverseTransform)
|
2851 |
+
maxx = Number.MAX_VALUE;
|
2852 |
+
if (axisy.options.inverseTransform)
|
2853 |
+
maxy = Number.MAX_VALUE;
|
2854 |
+
|
2855 |
+
if (s.lines.show || s.points.show) {
|
2856 |
+
for (j = 0; j < points.length; j += ps) {
|
2857 |
+
var x = points[j], y = points[j + 1];
|
2858 |
+
if (x == null)
|
2859 |
+
continue;
|
2860 |
+
|
2861 |
+
// For points and lines, the cursor must be within a
|
2862 |
+
// certain distance to the data point
|
2863 |
+
if (x - mx > maxx || x - mx < -maxx ||
|
2864 |
+
y - my > maxy || y - my < -maxy)
|
2865 |
+
continue;
|
2866 |
+
|
2867 |
+
// We have to calculate distances in pixels, not in
|
2868 |
+
// data units, because the scales of the axes may be different
|
2869 |
+
var dx = Math.abs(axisx.p2c(x) - mouseX),
|
2870 |
+
dy = Math.abs(axisy.p2c(y) - mouseY),
|
2871 |
+
dist = dx * dx + dy * dy; // we save the sqrt
|
2872 |
+
|
2873 |
+
// use <= to ensure last point takes precedence
|
2874 |
+
// (last generally means on top of)
|
2875 |
+
if (dist < smallestDistance) {
|
2876 |
+
smallestDistance = dist;
|
2877 |
+
item = [i, j / ps];
|
2878 |
+
}
|
2879 |
+
}
|
2880 |
+
}
|
2881 |
+
|
2882 |
+
if (s.bars.show && !item) { // no other point can be nearby
|
2883 |
+
|
2884 |
+
var barLeft, barRight;
|
2885 |
+
|
2886 |
+
switch (s.bars.align) {
|
2887 |
+
case "left":
|
2888 |
+
barLeft = 0;
|
2889 |
+
break;
|
2890 |
+
case "right":
|
2891 |
+
barLeft = -s.bars.barWidth;
|
2892 |
+
break;
|
2893 |
+
default:
|
2894 |
+
barLeft = -s.bars.barWidth / 2;
|
2895 |
+
}
|
2896 |
+
|
2897 |
+
barRight = barLeft + s.bars.barWidth;
|
2898 |
+
|
2899 |
+
for (j = 0; j < points.length; j += ps) {
|
2900 |
+
var x = points[j], y = points[j + 1], b = points[j + 2];
|
2901 |
+
if (x == null)
|
2902 |
+
continue;
|
2903 |
+
|
2904 |
+
// for a bar graph, the cursor must be inside the bar
|
2905 |
+
if (series[i].bars.horizontal ?
|
2906 |
+
(mx <= Math.max(b, x) && mx >= Math.min(b, x) &&
|
2907 |
+
my >= y + barLeft && my <= y + barRight) :
|
2908 |
+
(mx >= x + barLeft && mx <= x + barRight &&
|
2909 |
+
my >= Math.min(b, y) && my <= Math.max(b, y)))
|
2910 |
+
item = [i, j / ps];
|
2911 |
+
}
|
2912 |
+
}
|
2913 |
+
}
|
2914 |
+
|
2915 |
+
if (item) {
|
2916 |
+
i = item[0];
|
2917 |
+
j = item[1];
|
2918 |
+
ps = series[i].datapoints.pointsize;
|
2919 |
+
|
2920 |
+
return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),
|
2921 |
+
dataIndex: j,
|
2922 |
+
series: series[i],
|
2923 |
+
seriesIndex: i };
|
2924 |
+
}
|
2925 |
+
|
2926 |
+
return null;
|
2927 |
+
}
|
2928 |
+
|
2929 |
+
function onMouseMove(e) {
|
2930 |
+
if (options.grid.hoverable)
|
2931 |
+
triggerClickHoverEvent("plothover", e,
|
2932 |
+
function (s) { return s["hoverable"] != false; });
|
2933 |
+
}
|
2934 |
+
|
2935 |
+
function onMouseLeave(e) {
|
2936 |
+
if (options.grid.hoverable)
|
2937 |
+
triggerClickHoverEvent("plothover", e,
|
2938 |
+
function (s) { return false; });
|
2939 |
+
}
|
2940 |
+
|
2941 |
+
function onClick(e) {
|
2942 |
+
triggerClickHoverEvent("plotclick", e,
|
2943 |
+
function (s) { return s["clickable"] != false; });
|
2944 |
+
}
|
2945 |
+
|
2946 |
+
// trigger click or hover event (they send the same parameters
|
2947 |
+
// so we share their code)
|
2948 |
+
function triggerClickHoverEvent(eventname, event, seriesFilter) {
|
2949 |
+
var offset = eventHolder.offset(),
|
2950 |
+
canvasX = event.pageX - offset.left - plotOffset.left,
|
2951 |
+
canvasY = event.pageY - offset.top - plotOffset.top,
|
2952 |
+
pos = canvasToAxisCoords({ left: canvasX, top: canvasY });
|
2953 |
+
|
2954 |
+
pos.pageX = event.pageX;
|
2955 |
+
pos.pageY = event.pageY;
|
2956 |
+
|
2957 |
+
var item = findNearbyItem(canvasX, canvasY, seriesFilter);
|
2958 |
+
|
2959 |
+
if (item) {
|
2960 |
+
// fill in mouse pos for any listeners out there
|
2961 |
+
item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10);
|
2962 |
+
item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10);
|
2963 |
+
}
|
2964 |
+
|
2965 |
+
if (options.grid.autoHighlight) {
|
2966 |
+
// clear auto-highlights
|
2967 |
+
for (var i = 0; i < highlights.length; ++i) {
|
2968 |
+
var h = highlights[i];
|
2969 |
+
if (h.auto == eventname &&
|
2970 |
+
!(item && h.series == item.series &&
|
2971 |
+
h.point[0] == item.datapoint[0] &&
|
2972 |
+
h.point[1] == item.datapoint[1]))
|
2973 |
+
unhighlight(h.series, h.point);
|
2974 |
+
}
|
2975 |
+
|
2976 |
+
if (item)
|
2977 |
+
highlight(item.series, item.datapoint, eventname);
|
2978 |
+
}
|
2979 |
+
|
2980 |
+
placeholder.trigger(eventname, [ pos, item ]);
|
2981 |
+
}
|
2982 |
+
|
2983 |
+
function triggerRedrawOverlay() {
|
2984 |
+
var t = options.interaction.redrawOverlayInterval;
|
2985 |
+
if (t == -1) { // skip event queue
|
2986 |
+
drawOverlay();
|
2987 |
+
return;
|
2988 |
+
}
|
2989 |
+
|
2990 |
+
if (!redrawTimeout)
|
2991 |
+
redrawTimeout = setTimeout(drawOverlay, t);
|
2992 |
+
}
|
2993 |
+
|
2994 |
+
function drawOverlay() {
|
2995 |
+
redrawTimeout = null;
|
2996 |
+
|
2997 |
+
// draw highlights
|
2998 |
+
octx.save();
|
2999 |
+
overlay.clear();
|
3000 |
+
octx.translate(plotOffset.left, plotOffset.top);
|
3001 |
+
|
3002 |
+
var i, hi;
|
3003 |
+
for (i = 0; i < highlights.length; ++i) {
|
3004 |
+
hi = highlights[i];
|
3005 |
+
|
3006 |
+
if (hi.series.bars.show)
|
3007 |
+
drawBarHighlight(hi.series, hi.point);
|
3008 |
+
else
|
3009 |
+
drawPointHighlight(hi.series, hi.point);
|
3010 |
+
}
|
3011 |
+
octx.restore();
|
3012 |
+
|
3013 |
+
executeHooks(hooks.drawOverlay, [octx]);
|
3014 |
+
}
|
3015 |
+
|
3016 |
+
function highlight(s, point, auto) {
|
3017 |
+
if (typeof s == "number")
|
3018 |
+
s = series[s];
|
3019 |
+
|
3020 |
+
if (typeof point == "number") {
|
3021 |
+
var ps = s.datapoints.pointsize;
|
3022 |
+
point = s.datapoints.points.slice(ps * point, ps * (point + 1));
|
3023 |
+
}
|
3024 |
+
|
3025 |
+
var i = indexOfHighlight(s, point);
|
3026 |
+
if (i == -1) {
|
3027 |
+
highlights.push({ series: s, point: point, auto: auto });
|
3028 |
+
|
3029 |
+
triggerRedrawOverlay();
|
3030 |
+
}
|
3031 |
+
else if (!auto)
|
3032 |
+
highlights[i].auto = false;
|
3033 |
+
}
|
3034 |
+
|
3035 |
+
function unhighlight(s, point) {
|
3036 |
+
if (s == null && point == null) {
|
3037 |
+
highlights = [];
|
3038 |
+
triggerRedrawOverlay();
|
3039 |
+
return;
|
3040 |
+
}
|
3041 |
+
|
3042 |
+
if (typeof s == "number")
|
3043 |
+
s = series[s];
|
3044 |
+
|
3045 |
+
if (typeof point == "number") {
|
3046 |
+
var ps = s.datapoints.pointsize;
|
3047 |
+
point = s.datapoints.points.slice(ps * point, ps * (point + 1));
|
3048 |
+
}
|
3049 |
+
|
3050 |
+
var i = indexOfHighlight(s, point);
|
3051 |
+
if (i != -1) {
|
3052 |
+
highlights.splice(i, 1);
|
3053 |
+
|
3054 |
+
triggerRedrawOverlay();
|
3055 |
+
}
|
3056 |
+
}
|
3057 |
+
|
3058 |
+
function indexOfHighlight(s, p) {
|
3059 |
+
for (var i = 0; i < highlights.length; ++i) {
|
3060 |
+
var h = highlights[i];
|
3061 |
+
if (h.series == s && h.point[0] == p[0]
|
3062 |
+
&& h.point[1] == p[1])
|
3063 |
+
return i;
|
3064 |
+
}
|
3065 |
+
return -1;
|
3066 |
+
}
|
3067 |
+
|
3068 |
+
function drawPointHighlight(series, point) {
|
3069 |
+
var x = point[0], y = point[1],
|
3070 |
+
axisx = series.xaxis, axisy = series.yaxis,
|
3071 |
+
highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString();
|
3072 |
+
|
3073 |
+
if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
|
3074 |
+
return;
|
3075 |
+
|
3076 |
+
var pointRadius = series.points.radius + series.points.lineWidth / 2;
|
3077 |
+
octx.lineWidth = pointRadius;
|
3078 |
+
octx.strokeStyle = highlightColor;
|
3079 |
+
var radius = 1.5 * pointRadius;
|
3080 |
+
x = axisx.p2c(x);
|
3081 |
+
y = axisy.p2c(y);
|
3082 |
+
|
3083 |
+
octx.beginPath();
|
3084 |
+
if (series.points.symbol == "circle")
|
3085 |
+
octx.arc(x, y, radius, 0, 2 * Math.PI, false);
|
3086 |
+
else
|
3087 |
+
series.points.symbol(octx, x, y, radius, false);
|
3088 |
+
octx.closePath();
|
3089 |
+
octx.stroke();
|
3090 |
+
}
|
3091 |
+
|
3092 |
+
function drawBarHighlight(series, point) {
|
3093 |
+
var highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(),
|
3094 |
+
fillStyle = highlightColor,
|
3095 |
+
barLeft;
|
3096 |
+
|
3097 |
+
switch (series.bars.align) {
|
3098 |
+
case "left":
|
3099 |
+
barLeft = 0;
|
3100 |
+
break;
|
3101 |
+
case "right":
|
3102 |
+
barLeft = -series.bars.barWidth;
|
3103 |
+
break;
|
3104 |
+
default:
|
3105 |
+
barLeft = -series.bars.barWidth / 2;
|
3106 |
+
}
|
3107 |
+
|
3108 |
+
octx.lineWidth = series.bars.lineWidth;
|
3109 |
+
octx.strokeStyle = highlightColor;
|
3110 |
+
|
3111 |
+
drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,
|
3112 |
+
function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);
|
3113 |
+
}
|
3114 |
+
|
3115 |
+
function getColorOrGradient(spec, bottom, top, defaultColor) {
|
3116 |
+
if (typeof spec == "string")
|
3117 |
+
return spec;
|
3118 |
+
else {
|
3119 |
+
// assume this is a gradient spec; IE currently only
|
3120 |
+
// supports a simple vertical gradient properly, so that's
|
3121 |
+
// what we support too
|
3122 |
+
var gradient = ctx.createLinearGradient(0, top, 0, bottom);
|
3123 |
+
|
3124 |
+
for (var i = 0, l = spec.colors.length; i < l; ++i) {
|
3125 |
+
var c = spec.colors[i];
|
3126 |
+
if (typeof c != "string") {
|
3127 |
+
var co = $.color.parse(defaultColor);
|
3128 |
+
if (c.brightness != null)
|
3129 |
+
co = co.scale('rgb', c.brightness);
|
3130 |
+
if (c.opacity != null)
|
3131 |
+
co.a *= c.opacity;
|
3132 |
+
c = co.toString();
|
3133 |
+
}
|
3134 |
+
gradient.addColorStop(i / (l - 1), c);
|
3135 |
+
}
|
3136 |
+
|
3137 |
+
return gradient;
|
3138 |
+
}
|
3139 |
+
}
|
3140 |
+
}
|
3141 |
+
|
3142 |
+
// Add the plot function to the top level of the jQuery object
|
3143 |
+
|
3144 |
+
$.plot = function(placeholder, data, options) {
|
3145 |
+
//var t0 = new Date();
|
3146 |
+
var plot = new Plot($(placeholder), data, options, $.plot.plugins);
|
3147 |
+
//(window.console ? console.log : alert)("time used (msecs): " + ((new Date()).getTime() - t0.getTime()));
|
3148 |
+
return plot;
|
3149 |
+
};
|
3150 |
+
|
3151 |
+
$.plot.version = "0.8.3";
|
3152 |
+
|
3153 |
+
$.plot.plugins = [];
|
3154 |
+
|
3155 |
+
// Also add the plot function as a chainable property
|
3156 |
+
|
3157 |
+
$.fn.plot = function(data, options) {
|
3158 |
+
return this.each(function() {
|
3159 |
+
$.plot(this, data, options);
|
3160 |
+
});
|
3161 |
+
};
|
3162 |
+
|
3163 |
+
// round to nearby lower multiple of base
|
3164 |
+
function floorInBase(n, base) {
|
3165 |
+
return base * Math.floor(n / base);
|
3166 |
+
}
|
3167 |
+
|
3168 |
+
})(jQuery);
|
3169 |
+
|
3170 |
+
/* Pretty handling of time axes.
|
3171 |
+
|
3172 |
+
Copyright (c) 2007-2014 IOLA and Ole Laursen.
|
3173 |
+
Licensed under the MIT license.
|
3174 |
+
|
3175 |
+
Set axis.mode to "time" to enable. See the section "Time series data" in
|
3176 |
+
API.txt for details.
|
3177 |
+
|
3178 |
+
*/
|
3179 |
+
|
3180 |
+
(function($) {
|
3181 |
+
|
3182 |
+
var options = {
|
3183 |
+
xaxis: {
|
3184 |
+
timezone: null, // "browser" for local to the client or timezone for timezone-js
|
3185 |
+
timeformat: null, // format string to use
|
3186 |
+
twelveHourClock: false, // 12 or 24 time in time mode
|
3187 |
+
monthNames: null // list of names of months
|
3188 |
+
}
|
3189 |
+
};
|
3190 |
+
|
3191 |
+
// round to nearby lower multiple of base
|
3192 |
+
|
3193 |
+
function floorInBase(n, base) {
|
3194 |
+
return base * Math.floor(n / base);
|
3195 |
+
}
|
3196 |
+
|
3197 |
+
// Returns a string with the date d formatted according to fmt.
|
3198 |
+
// A subset of the Open Group's strftime format is supported.
|
3199 |
+
|
3200 |
+
function formatDate(d, fmt, monthNames, dayNames) {
|
3201 |
+
|
3202 |
+
if (typeof d.strftime == "function") {
|
3203 |
+
return d.strftime(fmt);
|
3204 |
+
}
|
3205 |
+
|
3206 |
+
var leftPad = function(n, pad) {
|
3207 |
+
n = "" + n;
|
3208 |
+
pad = "" + (pad == null ? "0" : pad);
|
3209 |
+
return n.length == 1 ? pad + n : n;
|
3210 |
+
};
|
3211 |
+
|
3212 |
+
var r = [];
|
3213 |
+
var escape = false;
|
3214 |
+
var hours = d.getHours();
|
3215 |
+
var isAM = hours < 12;
|
3216 |
+
|
3217 |
+
if (monthNames == null) {
|
3218 |
+
monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
3219 |
+
}
|
3220 |
+
|
3221 |
+
if (dayNames == null) {
|
3222 |
+
dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
3223 |
+
}
|
3224 |
+
|
3225 |
+
var hours12;
|
3226 |
+
|
3227 |
+
if (hours > 12) {
|
3228 |
+
hours12 = hours - 12;
|
3229 |
+
} else if (hours == 0) {
|
3230 |
+
hours12 = 12;
|
3231 |
+
} else {
|
3232 |
+
hours12 = hours;
|
3233 |
+
}
|
3234 |
+
|
3235 |
+
for (var i = 0; i < fmt.length; ++i) {
|
3236 |
+
|
3237 |
+
var c = fmt.charAt(i);
|
3238 |
+
|
3239 |
+
if (escape) {
|
3240 |
+
switch (c) {
|
3241 |
+
case 'a': c = "" + dayNames[d.getDay()]; break;
|
3242 |
+
case 'b': c = "" + monthNames[d.getMonth()]; break;
|
3243 |
+
case 'd': c = leftPad(d.getDate()); break;
|
3244 |
+
case 'e': c = leftPad(d.getDate(), " "); break;
|
3245 |
+
case 'h': // For back-compat with 0.7; remove in 1.0
|
3246 |
+
case 'H': c = leftPad(hours); break;
|
3247 |
+
case 'I': c = leftPad(hours12); break;
|
3248 |
+
case 'l': c = leftPad(hours12, " "); break;
|
3249 |
+
case 'm': c = leftPad(d.getMonth() + 1); break;
|
3250 |
+
case 'M': c = leftPad(d.getMinutes()); break;
|
3251 |
+
// quarters not in Open Group's strftime specification
|
3252 |
+
case 'q':
|
3253 |
+
c = "" + (Math.floor(d.getMonth() / 3) + 1); break;
|
3254 |
+
case 'S': c = leftPad(d.getSeconds()); break;
|
3255 |
+
case 'y': c = leftPad(d.getFullYear() % 100); break;
|
3256 |
+
case 'Y': c = "" + d.getFullYear(); break;
|
3257 |
+
case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break;
|
3258 |
+
case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break;
|
3259 |
+
case 'w': c = "" + d.getDay(); break;
|
3260 |
+
}
|
3261 |
+
r.push(c);
|
3262 |
+
escape = false;
|
3263 |
+
} else {
|
3264 |
+
if (c == "%") {
|
3265 |
+
escape = true;
|
3266 |
+
} else {
|
3267 |
+
r.push(c);
|
3268 |
+
}
|
3269 |
+
}
|
3270 |
+
}
|
3271 |
+
|
3272 |
+
return r.join("");
|
3273 |
+
}
|
3274 |
+
|
3275 |
+
// To have a consistent view of time-based data independent of which time
|
3276 |
+
// zone the client happens to be in we need a date-like object independent
|
3277 |
+
// of time zones. This is done through a wrapper that only calls the UTC
|
3278 |
+
// versions of the accessor methods.
|
3279 |
+
|
3280 |
+
function makeUtcWrapper(d) {
|
3281 |
+
|
3282 |
+
function addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) {
|
3283 |
+
sourceObj[sourceMethod] = function() {
|
3284 |
+
return targetObj[targetMethod].apply(targetObj, arguments);
|
3285 |
+
};
|
3286 |
+
};
|
3287 |
+
|
3288 |
+
var utc = {
|
3289 |
+
date: d
|
3290 |
+
};
|
3291 |
+
|
3292 |
+
// support strftime, if found
|
3293 |
+
|
3294 |
+
if (d.strftime != undefined) {
|
3295 |
+
addProxyMethod(utc, "strftime", d, "strftime");
|
3296 |
+
}
|
3297 |
+
|
3298 |
+
addProxyMethod(utc, "getTime", d, "getTime");
|
3299 |
+
addProxyMethod(utc, "setTime", d, "setTime");
|
3300 |
+
|
3301 |
+
var props = ["Date", "Day", "FullYear", "Hours", "Milliseconds", "Minutes", "Month", "Seconds"];
|
3302 |
+
|
3303 |
+
for (var p = 0; p < props.length; p++) {
|
3304 |
+
addProxyMethod(utc, "get" + props[p], d, "getUTC" + props[p]);
|
3305 |
+
addProxyMethod(utc, "set" + props[p], d, "setUTC" + props[p]);
|
3306 |
+
}
|
3307 |
+
|
3308 |
+
return utc;
|
3309 |
+
};
|
3310 |
+
|
3311 |
+
// select time zone strategy. This returns a date-like object tied to the
|
3312 |
+
// desired timezone
|
3313 |
+
|
3314 |
+
function dateGenerator(ts, opts) {
|
3315 |
+
if (opts.timezone == "browser") {
|
3316 |
+
return new Date(ts);
|
3317 |
+
} else if (!opts.timezone || opts.timezone == "utc") {
|
3318 |
+
return makeUtcWrapper(new Date(ts));
|
3319 |
+
} else if (typeof timezoneJS != "undefined" && typeof timezoneJS.Date != "undefined") {
|
3320 |
+
var d = new timezoneJS.Date();
|
3321 |
+
// timezone-js is fickle, so be sure to set the time zone before
|
3322 |
+
// setting the time.
|
3323 |
+
d.setTimezone(opts.timezone);
|
3324 |
+
d.setTime(ts);
|
3325 |
+
return d;
|
3326 |
+
} else {
|
3327 |
+
return makeUtcWrapper(new Date(ts));
|
3328 |
+
}
|
3329 |
+
}
|
3330 |
+
|
3331 |
+
// map of app. size of time units in milliseconds
|
3332 |
+
|
3333 |
+
var timeUnitSize = {
|
3334 |
+
"second": 1000,
|
3335 |
+
"minute": 60 * 1000,
|
3336 |
+
"hour": 60 * 60 * 1000,
|
3337 |
+
"day": 24 * 60 * 60 * 1000,
|
3338 |
+
"month": 30 * 24 * 60 * 60 * 1000,
|
3339 |
+
"quarter": 3 * 30 * 24 * 60 * 60 * 1000,
|
3340 |
+
"year": 365.2425 * 24 * 60 * 60 * 1000
|
3341 |
+
};
|
3342 |
+
|
3343 |
+
// the allowed tick sizes, after 1 year we use
|
3344 |
+
// an integer algorithm
|
3345 |
+
|
3346 |
+
var baseSpec = [
|
3347 |
+
[1, "second"], [2, "second"], [5, "second"], [10, "second"],
|
3348 |
+
[30, "second"],
|
3349 |
+
[1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],
|
3350 |
+
[30, "minute"],
|
3351 |
+
[1, "hour"], [2, "hour"], [4, "hour"],
|
3352 |
+
[8, "hour"], [12, "hour"],
|
3353 |
+
[1, "day"], [2, "day"], [3, "day"],
|
3354 |
+
[0.25, "month"], [0.5, "month"], [1, "month"],
|
3355 |
+
[2, "month"]
|
3356 |
+
];
|
3357 |
+
|
3358 |
+
// we don't know which variant(s) we'll need yet, but generating both is
|
3359 |
+
// cheap
|
3360 |
+
|
3361 |
+
var specMonths = baseSpec.concat([[3, "month"], [6, "month"],
|
3362 |
+
[1, "year"]]);
|
3363 |
+
var specQuarters = baseSpec.concat([[1, "quarter"], [2, "quarter"],
|
3364 |
+
[1, "year"]]);
|
3365 |
+
|
3366 |
+
function init(plot) {
|
3367 |
+
plot.hooks.processOptions.push(function (plot, options) {
|
3368 |
+
$.each(plot.getAxes(), function(axisName, axis) {
|
3369 |
+
|
3370 |
+
var opts = axis.options;
|
3371 |
+
|
3372 |
+
if (opts.mode == "time") {
|
3373 |
+
axis.tickGenerator = function(axis) {
|
3374 |
+
|
3375 |
+
var ticks = [];
|
3376 |
+
var d = dateGenerator(axis.min, opts);
|
3377 |
+
var minSize = 0;
|
3378 |
+
|
3379 |
+
// make quarter use a possibility if quarters are
|
3380 |
+
// mentioned in either of these options
|
3381 |
+
|
3382 |
+
var spec = (opts.tickSize && opts.tickSize[1] ===
|
3383 |
+
"quarter") ||
|
3384 |
+
(opts.minTickSize && opts.minTickSize[1] ===
|
3385 |
+
"quarter") ? specQuarters : specMonths;
|
3386 |
+
|
3387 |
+
if (opts.minTickSize != null) {
|
3388 |
+
if (typeof opts.tickSize == "number") {
|
3389 |
+
minSize = opts.tickSize;
|
3390 |
+
} else {
|
3391 |
+
minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];
|
3392 |
+
}
|
3393 |
+
}
|
3394 |
+
|
3395 |
+
for (var i = 0; i < spec.length - 1; ++i) {
|
3396 |
+
if (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]]
|
3397 |
+
+ spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2
|
3398 |
+
&& spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {
|
3399 |
+
break;
|
3400 |
+
}
|
3401 |
+
}
|
3402 |
+
|
3403 |
+
var size = spec[i][0];
|
3404 |
+
var unit = spec[i][1];
|
3405 |
+
|
3406 |
+
// special-case the possibility of several years
|
3407 |
+
|
3408 |
+
if (unit == "year") {
|
3409 |
+
|
3410 |
+
// if given a minTickSize in years, just use it,
|
3411 |
+
// ensuring that it's an integer
|
3412 |
+
|
3413 |
+
if (opts.minTickSize != null && opts.minTickSize[1] == "year") {
|
3414 |
+
size = Math.floor(opts.minTickSize[0]);
|
3415 |
+
} else {
|
3416 |
+
|
3417 |
+
var magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10));
|
3418 |
+
var norm = (axis.delta / timeUnitSize.year) / magn;
|
3419 |
+
|
3420 |
+
if (norm < 1.5) {
|
3421 |
+
size = 1;
|
3422 |
+
} else if (norm < 3) {
|
3423 |
+
size = 2;
|
3424 |
+
} else if (norm < 7.5) {
|
3425 |
+
size = 5;
|
3426 |
+
} else {
|
3427 |
+
size = 10;
|
3428 |
+
}
|
3429 |
+
|
3430 |
+
size *= magn;
|
3431 |
+
}
|
3432 |
+
|
3433 |
+
// minimum size for years is 1
|
3434 |
+
|
3435 |
+
if (size < 1) {
|
3436 |
+
size = 1;
|
3437 |
+
}
|
3438 |
+
}
|
3439 |
+
|
3440 |
+
axis.tickSize = opts.tickSize || [size, unit];
|
3441 |
+
var tickSize = axis.tickSize[0];
|
3442 |
+
unit = axis.tickSize[1];
|
3443 |
+
|
3444 |
+
var step = tickSize * timeUnitSize[unit];
|
3445 |
+
|
3446 |
+
if (unit == "second") {
|
3447 |
+
d.setSeconds(floorInBase(d.getSeconds(), tickSize));
|
3448 |
+
} else if (unit == "minute") {
|
3449 |
+
d.setMinutes(floorInBase(d.getMinutes(), tickSize));
|
3450 |
+
} else if (unit == "hour") {
|
3451 |
+
d.setHours(floorInBase(d.getHours(), tickSize));
|
3452 |
+
} else if (unit == "month") {
|
3453 |
+
d.setMonth(floorInBase(d.getMonth(), tickSize));
|
3454 |
+
} else if (unit == "quarter") {
|
3455 |
+
d.setMonth(3 * floorInBase(d.getMonth() / 3,
|
3456 |
+
tickSize));
|
3457 |
+
} else if (unit == "year") {
|
3458 |
+
d.setFullYear(floorInBase(d.getFullYear(), tickSize));
|
3459 |
+
}
|
3460 |
+
|
3461 |
+
// reset smaller components
|
3462 |
+
|
3463 |
+
d.setMilliseconds(0);
|
3464 |
+
|
3465 |
+
if (step >= timeUnitSize.minute) {
|
3466 |
+
d.setSeconds(0);
|
3467 |
+
}
|
3468 |
+
if (step >= timeUnitSize.hour) {
|
3469 |
+
d.setMinutes(0);
|
3470 |
+
}
|
3471 |
+
if (step >= timeUnitSize.day) {
|
3472 |
+
d.setHours(0);
|
3473 |
+
}
|
3474 |
+
if (step >= timeUnitSize.day * 4) {
|
3475 |
+
d.setDate(1);
|
3476 |
+
}
|
3477 |
+
if (step >= timeUnitSize.month * 2) {
|
3478 |
+
d.setMonth(floorInBase(d.getMonth(), 3));
|
3479 |
+
}
|
3480 |
+
if (step >= timeUnitSize.quarter * 2) {
|
3481 |
+
d.setMonth(floorInBase(d.getMonth(), 6));
|
3482 |
+
}
|
3483 |
+
if (step >= timeUnitSize.year) {
|
3484 |
+
d.setMonth(0);
|
3485 |
+
}
|
3486 |
+
|
3487 |
+
var carry = 0;
|
3488 |
+
var v = Number.NaN;
|
3489 |
+
var prev;
|
3490 |
+
|
3491 |
+
do {
|
3492 |
+
|
3493 |
+
prev = v;
|
3494 |
+
v = d.getTime();
|
3495 |
+
ticks.push(v);
|
3496 |
+
|
3497 |
+
if (unit == "month" || unit == "quarter") {
|
3498 |
+
if (tickSize < 1) {
|
3499 |
+
|
3500 |
+
// a bit complicated - we'll divide the
|
3501 |
+
// month/quarter up but we need to take
|
3502 |
+
// care of fractions so we don't end up in
|
3503 |
+
// the middle of a day
|
3504 |
+
|
3505 |
+
d.setDate(1);
|
3506 |
+
var start = d.getTime();
|
3507 |
+
d.setMonth(d.getMonth() +
|
3508 |
+
(unit == "quarter" ? 3 : 1));
|
3509 |
+
var end = d.getTime();
|
3510 |
+
d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);
|
3511 |
+
carry = d.getHours();
|
3512 |
+
d.setHours(0);
|
3513 |
+
} else {
|
3514 |
+
d.setMonth(d.getMonth() +
|
3515 |
+
tickSize * (unit == "quarter" ? 3 : 1));
|
3516 |
+
}
|
3517 |
+
} else if (unit == "year") {
|
3518 |
+
d.setFullYear(d.getFullYear() + tickSize);
|
3519 |
+
} else {
|
3520 |
+
d.setTime(v + step);
|
3521 |
+
}
|
3522 |
+
} while (v < axis.max && v != prev);
|
3523 |
+
|
3524 |
+
return ticks;
|
3525 |
+
};
|
3526 |
+
|
3527 |
+
axis.tickFormatter = function (v, axis) {
|
3528 |
+
|
3529 |
+
var d = dateGenerator(v, axis.options);
|
3530 |
+
|
3531 |
+
// first check global format
|
3532 |
+
|
3533 |
+
if (opts.timeformat != null) {
|
3534 |
+
return formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames);
|
3535 |
+
}
|
3536 |
+
|
3537 |
+
// possibly use quarters if quarters are mentioned in
|
3538 |
+
// any of these places
|
3539 |
+
|
3540 |
+
var useQuarters = (axis.options.tickSize &&
|
3541 |
+
axis.options.tickSize[1] == "quarter") ||
|
3542 |
+
(axis.options.minTickSize &&
|
3543 |
+
axis.options.minTickSize[1] == "quarter");
|
3544 |
+
|
3545 |
+
var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];
|
3546 |
+
var span = axis.max - axis.min;
|
3547 |
+
var suffix = (opts.twelveHourClock) ? " %p" : "";
|
3548 |
+
var hourCode = (opts.twelveHourClock) ? "%I" : "%H";
|
3549 |
+
var fmt;
|
3550 |
+
|
3551 |
+
if (t < timeUnitSize.minute) {
|
3552 |
+
fmt = hourCode + ":%M:%S" + suffix;
|
3553 |
+
} else if (t < timeUnitSize.day) {
|
3554 |
+
if (span < 2 * timeUnitSize.day) {
|
3555 |
+
fmt = hourCode + ":%M" + suffix;
|
3556 |
+
} else {
|
3557 |
+
fmt = "%b %d " + hourCode + ":%M" + suffix;
|
3558 |
+
}
|
3559 |
+
} else if (t < timeUnitSize.month) {
|
3560 |
+
fmt = "%b %d";
|
3561 |
+
} else if ((useQuarters && t < timeUnitSize.quarter) ||
|
3562 |
+
(!useQuarters && t < timeUnitSize.year)) {
|
3563 |
+
if (span < timeUnitSize.year) {
|
3564 |
+
fmt = "%b";
|
3565 |
+
} else {
|
3566 |
+
fmt = "%b %Y";
|
3567 |
+
}
|
3568 |
+
} else if (useQuarters && t < timeUnitSize.year) {
|
3569 |
+
if (span < timeUnitSize.year) {
|
3570 |
+
fmt = "Q%q";
|
3571 |
+
} else {
|
3572 |
+
fmt = "Q%q %Y";
|
3573 |
+
}
|
3574 |
+
} else {
|
3575 |
+
fmt = "%Y";
|
3576 |
+
}
|
3577 |
+
|
3578 |
+
var rt = formatDate(d, fmt, opts.monthNames, opts.dayNames);
|
3579 |
+
|
3580 |
+
return rt;
|
3581 |
+
};
|
3582 |
+
}
|
3583 |
+
});
|
3584 |
+
});
|
3585 |
+
}
|
3586 |
+
|
3587 |
+
$.plot.plugins.push({
|
3588 |
+
init: init,
|
3589 |
+
options: options,
|
3590 |
+
name: 'time',
|
3591 |
+
version: '1.0'
|
3592 |
+
});
|
3593 |
+
|
3594 |
+
// Time-axis support used to be in Flot core, which exposed the
|
3595 |
+
// formatDate function on the plot object. Various plugins depend
|
3596 |
+
// on the function, so we need to re-expose it here.
|
3597 |
+
|
3598 |
+
$.plot.formatDate = formatDate;
|
3599 |
+
$.plot.dateGenerator = dateGenerator;
|
3600 |
+
|
3601 |
+
})(jQuery);
|
3.0.14/assets/admin/scripts/jquery-jvectormap-1.2.2.min.js
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* jVectorMap version 1.2.2
|
3 |
+
*
|
4 |
+
* Copyright 2011-2013, Kirill Lebedev
|
5 |
+
* Licensed under the MIT license.
|
6 |
+
*
|
7 |
+
*/(function(e){var t={set:{colors:1,values:1,backgroundColor:1,scaleColors:1,normalizeFunction:1,focus:1},get:{selectedRegions:1,selectedMarkers:1,mapObject:1,regionName:1}};e.fn.vectorMap=function(e){var n,r,i,n=this.children(".jvectormap-container").data("mapObject");if(e==="addMap")jvm.WorldMap.maps[arguments[1]]=arguments[2];else{if(!(e!=="set"&&e!=="get"||!t[e][arguments[1]]))return r=arguments[1].charAt(0).toUpperCase()+arguments[1].substr(1),n[e+r].apply(n,Array.prototype.slice.call(arguments,2));e=e||{},e.container=this,n=new jvm.WorldMap(e)}return this}})(jQuery),function(e){function r(t){var n=t||window.event,r=[].slice.call(arguments,1),i=0,s=!0,o=0,u=0;return t=e.event.fix(n),t.type="mousewheel",n.wheelDelta&&(i=n.wheelDelta/120),n.detail&&(i=-n.detail/3),u=i,n.axis!==undefined&&n.axis===n.HORIZONTAL_AXIS&&(u=0,o=-1*i),n.wheelDeltaY!==undefined&&(u=n.wheelDeltaY/120),n.wheelDeltaX!==undefined&&(o=-1*n.wheelDeltaX/120),r.unshift(t,i,o,u),(e.event.dispatch||e.event.handle).apply(this,r)}var t=["DOMMouseScroll","mousewheel"];if(e.event.fixHooks)for(var n=t.length;n;)e.event.fixHooks[t[--n]]=e.event.mouseHooks;e.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var e=t.length;e;)this.addEventListener(t[--e],r,!1);else this.onmousewheel=r},teardown:function(){if(this.removeEventListener)for(var e=t.length;e;)this.removeEventListener(t[--e],r,!1);else this.onmousewheel=null}},e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})}(jQuery);var jvm={inherits:function(e,t){function n(){}n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e,e.parentClass=t},mixin:function(e,t){var n;for(n in t.prototype)t.prototype.hasOwnProperty(n)&&(e.prototype[n]=t.prototype[n])},min:function(e){var t=Number.MAX_VALUE,n;if(e instanceof Array)for(n=0;n<e.length;n++)e[n]<t&&(t=e[n]);else for(n in e)e[n]<t&&(t=e[n]);return t},max:function(e){var t=Number.MIN_VALUE,n;if(e instanceof Array)for(n=0;n<e.length;n++)e[n]>t&&(t=e[n]);else for(n in e)e[n]>t&&(t=e[n]);return t},keys:function(e){var t=[],n;for(n in e)t.push(n);return t},values:function(e){var t=[],n,r;for(r=0;r<arguments.length;r++){e=arguments[r];for(n in e)t.push(e[n])}return t}};jvm.$=jQuery,jvm.AbstractElement=function(e,t){this.node=this.createElement(e),this.name=e,this.properties={},t&&this.set(t)},jvm.AbstractElement.prototype.set=function(e,t){var n;if(typeof e=="object")for(n in e)this.properties[n]=e[n],this.applyAttr(n,e[n]);else this.properties[e]=t,this.applyAttr(e,t)},jvm.AbstractElement.prototype.get=function(e){return this.properties[e]},jvm.AbstractElement.prototype.applyAttr=function(e,t){this.node.setAttribute(e,t)},jvm.AbstractElement.prototype.remove=function(){jvm.$(this.node).remove()},jvm.AbstractCanvasElement=function(e,t,n){this.container=e,this.setSize(t,n),this.rootElement=new jvm[this.classPrefix+"GroupElement"],this.node.appendChild(this.rootElement.node),this.container.appendChild(this.node)},jvm.AbstractCanvasElement.prototype.add=function(e,t){t=t||this.rootElement,t.add(e),e.canvas=this},jvm.AbstractCanvasElement.prototype.addPath=function(e,t,n){var r=new jvm[this.classPrefix+"PathElement"](e,t);return this.add(r,n),r},jvm.AbstractCanvasElement.prototype.addCircle=function(e,t,n){var r=new jvm[this.classPrefix+"CircleElement"](e,t);return this.add(r,n),r},jvm.AbstractCanvasElement.prototype.addGroup=function(e){var t=new jvm[this.classPrefix+"GroupElement"];return e?e.node.appendChild(t.node):this.node.appendChild(t.node),t.canvas=this,t},jvm.AbstractShapeElement=function(e,t,n){this.style=n||{},this.style.current={},this.isHovered=!1,this.isSelected=!1,this.updateStyle()},jvm.AbstractShapeElement.prototype.setHovered=function(e){this.isHovered!==e&&(this.isHovered=e,this.updateStyle())},jvm.AbstractShapeElement.prototype.setSelected=function(e){this.isSelected!==e&&(this.isSelected=e,this.updateStyle(),jvm.$(this.node).trigger("selected",[e]))},jvm.AbstractShapeElement.prototype.setStyle=function(e,t){var n={};typeof e=="object"?n=e:n[e]=t,jvm.$.extend(this.style.current,n),this.updateStyle()},jvm.AbstractShapeElement.prototype.updateStyle=function(){var e={};jvm.AbstractShapeElement.mergeStyles(e,this.style.initial),jvm.AbstractShapeElement.mergeStyles(e,this.style.current),this.isHovered&&jvm.AbstractShapeElement.mergeStyles(e,this.style.hover),this.isSelected&&(jvm.AbstractShapeElement.mergeStyles(e,this.style.selected),this.isHovered&&jvm.AbstractShapeElement.mergeStyles(e,this.style.selectedHover)),this.set(e)},jvm.AbstractShapeElement.mergeStyles=function(e,t){var n;t=t||{};for(n in t)t[n]===null?delete e[n]:e[n]=t[n]},jvm.SVGElement=function(e,t){jvm.SVGElement.parentClass.apply(this,arguments)},jvm.inherits(jvm.SVGElement,jvm.AbstractElement),jvm.SVGElement.svgns="http://www.w3.org/2000/svg",jvm.SVGElement.prototype.createElement=function(e){return document.createElementNS(jvm.SVGElement.svgns,e)},jvm.SVGElement.prototype.addClass=function(e){this.node.setAttribute("class",e)},jvm.SVGElement.prototype.getElementCtr=function(e){return jvm["SVG"+e]},jvm.SVGElement.prototype.getBBox=function(){return this.node.getBBox()},jvm.SVGGroupElement=function(){jvm.SVGGroupElement.parentClass.call(this,"g")},jvm.inherits(jvm.SVGGroupElement,jvm.SVGElement),jvm.SVGGroupElement.prototype.add=function(e){this.node.appendChild(e.node)},jvm.SVGCanvasElement=function(e,t,n){this.classPrefix="SVG",jvm.SVGCanvasElement.parentClass.call(this,"svg"),jvm.AbstractCanvasElement.apply(this,arguments)},jvm.inherits(jvm.SVGCanvasElement,jvm.SVGElement),jvm.mixin(jvm.SVGCanvasElement,jvm.AbstractCanvasElement),jvm.SVGCanvasElement.prototype.setSize=function(e,t){this.width=e,this.height=t,this.node.setAttribute("width",e),this.node.setAttribute("height",t)},jvm.SVGCanvasElement.prototype.applyTransformParams=function(e,t,n){this.scale=e,this.transX=t,this.transY=n,this.rootElement.node.setAttribute("transform","scale("+e+") translate("+t+", "+n+")")},jvm.SVGShapeElement=function(e,t,n){jvm.SVGShapeElement.parentClass.call(this,e,t),jvm.AbstractShapeElement.apply(this,arguments)},jvm.inherits(jvm.SVGShapeElement,jvm.SVGElement),jvm.mixin(jvm.SVGShapeElement,jvm.AbstractShapeElement),jvm.SVGPathElement=function(e,t){jvm.SVGPathElement.parentClass.call(this,"path",e,t),this.node.setAttribute("fill-rule","evenodd")},jvm.inherits(jvm.SVGPathElement,jvm.SVGShapeElement),jvm.SVGCircleElement=function(e,t){jvm.SVGCircleElement.parentClass.call(this,"circle",e,t)},jvm.inherits(jvm.SVGCircleElement,jvm.SVGShapeElement),jvm.VMLElement=function(e,t){jvm.VMLElement.VMLInitialized||jvm.VMLElement.initializeVML(),jvm.VMLElement.parentClass.apply(this,arguments)},jvm.inherits(jvm.VMLElement,jvm.AbstractElement),jvm.VMLElement.VMLInitialized=!1,jvm.VMLElement.initializeVML=function(){try{document.namespaces.rvml||document.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),jvm.VMLElement.prototype.createElement=function(e){return document.createElement("<rvml:"+e+' class="rvml">')}}catch(e){jvm.VMLElement.prototype.createElement=function(e){return document.createElement("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}document.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)"),jvm.VMLElement.VMLInitialized=!0},jvm.VMLElement.prototype.getElementCtr=function(e){return jvm["VML"+e]},jvm.VMLElement.prototype.addClass=function(e){jvm.$(this.node).addClass(e)},jvm.VMLElement.prototype.applyAttr=function(e,t){this.node[e]=t},jvm.VMLElement.prototype.getBBox=function(){var e=jvm.$(this.node);return{x:e.position().left/this.canvas.scale,y:e.position().top/this.canvas.scale,width:e.width()/this.canvas.scale,height:e.height()/this.canvas.scale}},jvm.VMLGroupElement=function(){jvm.VMLGroupElement.parentClass.call(this,"group"),this.node.style.left="0px",this.node.style.top="0px",this.node.coordorigin="0 0"},jvm.inherits(jvm.VMLGroupElement,jvm.VMLElement),jvm.VMLGroupElement.prototype.add=function(e){this.node.appendChild(e.node)},jvm.VMLCanvasElement=function(e,t,n){this.classPrefix="VML",jvm.VMLCanvasElement.parentClass.call(this,"group"),jvm.AbstractCanvasElement.apply(this,arguments),this.node.style.position="absolute"},jvm.inherits(jvm.VMLCanvasElement,jvm.VMLElement),jvm.mixin(jvm.VMLCanvasElement,jvm.AbstractCanvasElement),jvm.VMLCanvasElement.prototype.setSize=function(e,t){var n,r,i,s;this.width=e,this.height=t,this.node.style.width=e+"px",this.node.style.height=t+"px",this.node.coordsize=e+" "+t,this.node.coordorigin="0 0";if(this.rootElement){n=this.rootElement.node.getElementsByTagName("shape");for(i=0,s=n.length;i<s;i++)n[i].coordsize=e+" "+t,n[i].style.width=e+"px",n[i].style.height=t+"px";r=this.node.getElementsByTagName("group");for(i=0,s=r.length;i<s;i++)r[i].coordsize=e+" "+t,r[i].style.width=e+"px",r[i].style.height=t+"px"}},jvm.VMLCanvasElement.prototype.applyTransformParams=function(e,t,n){this.scale=e,this.transX=t,this.transY=n,this.rootElement.node.coordorigin=this.width-t-this.width/100+","+(this.height-n-this.height/100),this.rootElement.node.coordsize=this.width/e+","+this.height/e},jvm.VMLShapeElement=function(e,t){jvm.VMLShapeElement.parentClass.call(this,e,t),this.fillElement=new jvm.VMLElement("fill"),this.strokeElement=new jvm.VMLElement("stroke"),this.node.appendChild(this.fillElement.node),this.node.appendChild(this.strokeElement.node),this.node.stroked=!1,jvm.AbstractShapeElement.apply(this,arguments)},jvm.inherits(jvm.VMLShapeElement,jvm.VMLElement),jvm.mixin(jvm.VMLShapeElement,jvm.AbstractShapeElement),jvm.VMLShapeElement.prototype.applyAttr=function(e,t){switch(e){case"fill":this.node.fillcolor=t;break;case"fill-opacity":this.fillElement.node.opacity=Math.round(t*100)+"%";break;case"stroke":t==="none"?this.node.stroked=!1:this.node.stroked=!0,this.node.strokecolor=t;break;case"stroke-opacity":this.strokeElement.node.opacity=Math.round(t*100)+"%";break;case"stroke-width":parseInt(t,10)===0?this.node.stroked=!1:this.node.stroked=!0,this.node.strokeweight=t;break;case"d":this.node.path=jvm.VMLPathElement.pathSvgToVml(t);break;default:jvm.VMLShapeElement.parentClass.prototype.applyAttr.apply(this,arguments)}},jvm.VMLPathElement=function(e,t){var n=new jvm.VMLElement("skew");jvm.VMLPathElement.parentClass.call(this,"shape",e,t),this.node.coordorigin="0 0",n.node.on=!0,n.node.matrix="0.01,0,0,0.01,0,0",n.node.offset="0,0",this.node.appendChild(n.node)},jvm.inherits(jvm.VMLPathElement,jvm.VMLShapeElement),jvm.VMLPathElement.prototype.applyAttr=function(e,t){e==="d"?this.node.path=jvm.VMLPathElement.pathSvgToVml(t):jvm.VMLShapeElement.prototype.applyAttr.call(this,e,t)},jvm.VMLPathElement.pathSvgToVml=function(e){var t="",n=0,r=0,i,s;return e=e.replace(/(-?\d+)e(-?\d+)/g,"0"),e.replace(/([MmLlHhVvCcSs])\s*((?:-?\d*(?:\.\d+)?\s*,?\s*)+)/g,function(e,t,o,u){o=o.replace(/(\d)-/g,"$1,-").replace(/^\s+/g,"").replace(/\s+$/g,"").replace(/\s+/g,",").split(","),o[0]||o.shift();for(var a=0,f=o.length;a<f;a++)o[a]=Math.round(100*o[a]);switch(t){case"m":return n+=o[0],r+=o[1],"t"+o.join(",");case"M":return n=o[0],r=o[1],"m"+o.join(",");case"l":return n+=o[0],r+=o[1],"r"+o.join(",");case"L":return n=o[0],r=o[1],"l"+o.join(",");case"h":return n+=o[0],"r"+o[0]+",0";case"H":return n=o[0],"l"+n+","+r;case"v":return r+=o[0],"r0,"+o[0];case"V":return r=o[0],"l"+n+","+r;case"c":return i=n+o[o.length-4],s=r+o[o.length-3],n+=o[o.length-2],r+=o[o.length-1],"v"+o.join(",");case"C":return i=o[o.length-4],s=o[o.length-3],n=o[o.length-2],r=o[o.length-1],"c"+o.join(",");case"s":return o.unshift(r-s),o.unshift(n-i),i=n+o[o.length-4],s=r+o[o.length-3],n+=o[o.length-2],r+=o[o.length-1],"v"+o.join(",");case"S":return o.unshift(r+r-s),o.unshift(n+n-i),i=o[o.length-4],s=o[o.length-3],n=o[o.length-2],r=o[o.length-1],"c"+o.join(",")}return""}).replace(/z/g,"e")},jvm.VMLCircleElement=function(e,t){jvm.VMLCircleElement.parentClass.call(this,"oval",e,t)},jvm.inherits(jvm.VMLCircleElement,jvm.VMLShapeElement),jvm.VMLCircleElement.prototype.applyAttr=function(e,t){switch(e){case"r":this.node.style.width=t*2+"px",this.node.style.height=t*2+"px",this.applyAttr("cx",this.get("cx")||0),this.applyAttr("cy",this.get("cy")||0);break;case"cx":if(!t)return;this.node.style.left=t-(this.get("r")||0)+"px";break;case"cy":if(!t)return;this.node.style.top=t-(this.get("r")||0)+"px";break;default:jvm.VMLCircleElement.parentClass.prototype.applyAttr.call(this,e,t)}},jvm.VectorCanvas=function(e,t,n){return this.mode=window.SVGAngle?"svg":"vml",this.mode=="svg"?this.impl=new jvm.SVGCanvasElement(e,t,n):this.impl=new jvm.VMLCanvasElement(e,t,n),this.impl},jvm.SimpleScale=function(e){this.scale=e},jvm.SimpleScale.prototype.getValue=function(e){return e},jvm.OrdinalScale=function(e){this.scale=e},jvm.OrdinalScale.prototype.getValue=function(e){return this.scale[e]},jvm.NumericScale=function(e,t,n,r){this.scale=[],t=t||"linear",e&&this.setScale(e),t&&this.setNormalizeFunction(t),n&&this.setMin(n),r&&this.setMax(r)},jvm.NumericScale.prototype={setMin:function(e){this.clearMinValue=e,typeof this.normalize=="function"?this.minValue=this.normalize(e):this.minValue=e},setMax:function(e){this.clearMaxValue=e,typeof this.normalize=="function"?this.maxValue=this.normalize(e):this.maxValue=e},setScale:function(e){var t;for(t=0;t<e.length;t++)this.scale[t]=[e[t]]},setNormalizeFunction:function(e){e==="polynomial"?this.normalize=function(e){return Math.pow(e,.2)}:e==="linear"?delete this.normalize:this.normalize=e,this.setMin(this.clearMinValue),this.setMax(this.clearMaxValue)},getValue:function(e){var t=[],n=0,r,i=0,s;typeof this.normalize=="function"&&(e=this.normalize(e));for(i=0;i<this.scale.length-1;i++)r=this.vectorLength(this.vectorSubtract(this.scale[i+1],this.scale[i])),t.push(r),n+=r;s=(this.maxValue-this.minValue)/n;for(i=0;i<t.length;i++)t[i]*=s;i=0,e-=this.minValue;while(e-t[i]>=0)e-=t[i],i++;return i==this.scale.length-1?e=this.vectorToNum(this.scale[i]):e=this.vectorToNum(this.vectorAdd(this.scale[i],this.vectorMult(this.vectorSubtract(this.scale[i+1],this.scale[i]),e/t[i]))),e},vectorToNum:function(e){var t=0,n;for(n=0;n<e.length;n++)t+=Math.round(e[n])*Math.pow(256,e.length-n-1);return t},vectorSubtract:function(e,t){var n=[],r;for(r=0;r<e.length;r++)n[r]=e[r]-t[r];return n},vectorAdd:function(e,t){var n=[],r;for(r=0;r<e.length;r++)n[r]=e[r]+t[r];return n},vectorMult:function(e,t){var n=[],r;for(r=0;r<e.length;r++)n[r]=e[r]*t;return n},vectorLength:function(e){var t=0,n;for(n=0;n<e.length;n++)t+=e[n]*e[n];return Math.sqrt(t)}},jvm.ColorScale=function(e,t,n,r){jvm.ColorScale.parentClass.apply(this,arguments)},jvm.inherits(jvm.ColorScale,jvm.NumericScale),jvm.ColorScale.prototype.setScale=function(e){var t;for(t=0;t<e.length;t++)this.scale[t]=jvm.ColorScale.rgbToArray(e[t])},jvm.ColorScale.prototype.getValue=function(e){return jvm.ColorScale.numToRgb(jvm.ColorScale.parentClass.prototype.getValue.call(this,e))},jvm.ColorScale.arrayToRgb=function(e){var t="#",n,r;for(r=0;r<e.length;r++)n=e[r].toString(16),t+=n.length==1?"0"+n:n;return t},jvm.ColorScale.numToRgb=function(e){e=e.toString(16);while(e.length<6)e="0"+e;return"#"+e},jvm.ColorScale.rgbToArray=function(e){return e=e.substr(1),[parseInt(e.substr(0,2),16),parseInt(e.substr(2,2),16),parseInt(e.substr(4,2),16)]},jvm.DataSeries=function(e,t){var n;e=e||{},e.attribute=e.attribute||"fill",this.elements=t,this.params=e,e.attributes&&this.setAttributes(e.attributes),jvm.$.isArray(e.scale)?(n=e.attribute==="fill"||e.attribute==="stroke"?jvm.ColorScale:jvm.NumericScale,this.scale=new n(e.scale,e.normalizeFunction,e.min,e.max)):e.scale?this.scale=new jvm.OrdinalScale(e.scale):this.scale=new jvm.SimpleScale(e.scale),this.values=e.values||{},this.setValues(this.values)},jvm.DataSeries.prototype={setAttributes:function(e,t){var n=e,r;if(typeof e=="string")this.elements[e]&&this.elements[e].setStyle(this.params.attribute,t);else for(r in n)this.elements[r]&&this.elements[r].element.setStyle(this.params.attribute,n[r])},setValues:function(e){var t=Number.MIN_VALUE,n=Number.MAX_VALUE,r,i,s={};if(this.scale instanceof jvm.OrdinalScale||this.scale instanceof jvm.SimpleScale)for(i in e)e[i]?s[i]=this.scale.getValue(e[i]):s[i]=this.elements[i].element.style.initial[this.params.attribute];else{if(!this.params.min||!this.params.max){for(i in e)r=parseFloat(e[i]),r>t&&(t=e[i]),r<n&&(n=r);this.params.min||this.scale.setMin(n),this.params.max||this.scale.setMax(t),this.params.min=n,this.params.max=t}for(i in e)r=parseFloat(e[i]),isNaN(r)?s[i]=this.elements[i].element.style.initial[this.params.attribute]:s[i]=this.scale.getValue(r)}this.setAttributes(s),jvm.$.extend(this.values,e)},clear:function(){var e,t={};for(e in this.values)this.elements[e]&&(t[e]=this.elements[e].element.style.initial[this.params.attribute]);this.setAttributes(t),this.values={}},setScale:function(e){this.scale.setScale(e),this.values&&this.setValues(this.values)},setNormalizeFunction:function(e){this.scale.setNormalizeFunction(e),this.values&&this.setValues(this.values)}},jvm.Proj={degRad:180/Math.PI,radDeg:Math.PI/180,radius:6381372,sgn:function(e){return e>0?1:e<0?-1:e},mill:function(e,t,n){return{x:this.radius*(t-n)*this.radDeg,y:-this.radius*Math.log(Math.tan((45+.4*e)*this.radDeg))/.8}},mill_inv:function(e,t,n){return{lat:(2.5*Math.atan(Math.exp(.8*t/this.radius))-5*Math.PI/8)*this.degRad,lng:(n*this.radDeg+e/this.radius)*this.degRad}},merc:function(e,t,n){return{x:this.radius*(t-n)*this.radDeg,y:-this.radius*Math.log(Math.tan(Math.PI/4+e*Math.PI/360))}},merc_inv:function(e,t,n){return{lat:(2*Math.atan(Math.exp(t/this.radius))-Math.PI/2)*this.degRad,lng:(n*this.radDeg+e/this.radius)*this.degRad}},aea:function(e,t,n){var r=0,i=n*this.radDeg,s=29.5*this.radDeg,o=45.5*this.radDeg,u=e*this.radDeg,a=t*this.radDeg,f=(Math.sin(s)+Math.sin(o))/2,l=Math.cos(s)*Math.cos(s)+2*f*Math.sin(s),c=f*(a-i),h=Math.sqrt(l-2*f*Math.sin(u))/f,p=Math.sqrt(l-2*f*Math.sin(r))/f;return{x:h*Math.sin(c)*this.radius,y:-(p-h*Math.cos(c))*this.radius}},aea_inv:function(e,t,n){var r=e/this.radius,i=t/this.radius,s=0,o=n*this.radDeg,u=29.5*this.radDeg,a=45.5*this.radDeg,f=(Math.sin(u)+Math.sin(a))/2,l=Math.cos(u)*Math.cos(u)+2*f*Math.sin(u),c=Math.sqrt(l-2*f*Math.sin(s))/f,h=Math.sqrt(r*r+(c-i)*(c-i)),p=Math.atan(r/(c-i));return{lat:Math.asin((l-h*h*f*f)/(2*f))*this.degRad,lng:(o+p/f)*this.degRad}},lcc:function(e,t,n){var r=0,i=n*this.radDeg,s=t*this.radDeg,o=33*this.radDeg,u=45*this.radDeg,a=e*this.radDeg,f=Math.log(Math.cos(o)*(1/Math.cos(u)))/Math.log(Math.tan(Math.PI/4+u/2)*(1/Math.tan(Math.PI/4+o/2))),l=Math.cos(o)*Math.pow(Math.tan(Math.PI/4+o/2),f)/f,c=l*Math.pow(1/Math.tan(Math.PI/4+a/2),f),h=l*Math.pow(1/Math.tan(Math.PI/4+r/2),f);return{x:c*Math.sin(f*(s-i))*this.radius,y:-(h-c*Math.cos(f*(s-i)))*this.radius}},lcc_inv:function(e,t,n){var r=e/this.radius,i=t/this.radius,s=0,o=n*this.radDeg,u=33*this.radDeg,a=45*this.radDeg,f=Math.log(Math.cos(u)*(1/Math.cos(a)))/Math.log(Math.tan(Math.PI/4+a/2)*(1/Math.tan(Math.PI/4+u/2))),l=Math.cos(u)*Math.pow(Math.tan(Math.PI/4+u/2),f)/f,c=l*Math.pow(1/Math.tan(Math.PI/4+s/2),f),h=this.sgn(f)*Math.sqrt(r*r+(c-i)*(c-i)),p=Math.atan(r/(c-i));return{lat:(2*Math.atan(Math.pow(l/h,1/f))-Math.PI/2)*this.degRad,lng:(o+p/f)*this.degRad}}},jvm.WorldMap=function(e){var t=this,n;this.params=jvm.$.extend(!0,{},jvm.WorldMap.defaultParams,e);if(!jvm.WorldMap.maps[this.params.map])throw new Error("Attempt to use map which was not loaded: "+this.params.map);this.mapData=jvm.WorldMap.maps[this.params.map],this.markers={},this.regions={},this.regionsColors={},this.regionsData={},this.container=jvm.$("<div>").css({width:"100%",height:"100%"}).addClass("jvectormap-container"),this.params.container.append(this.container),this.container.data("mapObject",this),this.container.css({position:"relative",overflow:"hidden"}),this.defaultWidth=this.mapData.width,this.defaultHeight=this.mapData.height,this.setBackgroundColor(this.params.backgroundColor),this.onResize=function(){t.setSize()},jvm.$(window).resize(this.onResize);for(n in jvm.WorldMap.apiEvents)this.params[n]&&this.container.bind(jvm.WorldMap.apiEvents[n]+".jvectormap",this.params[n]);this.canvas=new jvm.VectorCanvas(this.container[0],this.width,this.height),"ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch?this.params.bindTouchEvents&&this.bindContainerTouchEvents():this.bindContainerEvents(),this.bindElementEvents(),this.createLabel(),this.params.zoomButtons&&this.bindZoomButtons(),this.createRegions(),this.createMarkers(this.params.markers||{}),this.setSize(),this.params.focusOn&&(typeof this.params.focusOn=="object"?this.setFocus.call(this,this.params.focusOn.scale,this.params.focusOn.x,this.params.focusOn.y):this.setFocus.call(this,this.params.focusOn)),this.params.selectedRegions&&this.setSelectedRegions(this.params.selectedRegions),this.params.selectedMarkers&&this.setSelectedMarkers(this.params.selectedMarkers),this.params.series&&this.createSeries()},jvm.WorldMap.prototype={transX:0,transY:0,scale:1,baseTransX:0,baseTransY:0,baseScale:1,width:0,height:0,setBackgroundColor:function(e){this.container.css("background-color",e)},resize:function(){var e=this.baseScale;this.width/this.height>this.defaultWidth/this.defaultHeight?(this.baseScale=this.height/this.defaultHeight,this.baseTransX=Math.abs(this.width-this.defaultWidth*this.baseScale)/(2*this.baseScale)):(this.baseScale=this.width/this.defaultWidth,this.baseTransY=Math.abs(this.height-this.defaultHeight*this.baseScale)/(2*this.baseScale)),this.scale*=this.baseScale/e,this.transX*=this.baseScale/e,this.transY*=this.baseScale/e},setSize:function(){this.width=this.container.width(),this.height=this.container.height(),this.resize(),this.canvas.setSize(this.width,this.height),this.applyTransform()},reset:function(){var e,t;for(e in this.series)for(t=0;t<this.series[e].length;t++)this.series[e][t].clear();this.scale=this.baseScale,this.transX=this.baseTransX,this.transY=this.baseTransY,this.applyTransform()},applyTransform:function(){var e,t,n,r;this.defaultWidth*this.scale<=this.width?(e=(this.width-this.defaultWidth*this.scale)/(2*this.scale),n=(this.width-this.defaultWidth*this.scale)/(2*this.scale)):(e=0,n=(this.width-this.defaultWidth*this.scale)/this.scale),this.defaultHeight*this.scale<=this.height?(t=(this.height-this.defaultHeight*this.scale)/(2*this.scale),r=(this.height-this.defaultHeight*this.scale)/(2*this.scale)):(t=0,r=(this.height-this.defaultHeight*this.scale)/this.scale),this.transY>t?this.transY=t:this.transY<r&&(this.transY=r),this.transX>e?this.transX=e:this.transX<n&&(this.transX=n),this.canvas.applyTransformParams(this.scale,this.transX,this.transY),this.markers&&this.repositionMarkers(),this.container.trigger("viewportChange",[this.scale/this.baseScale,this.transX,this.transY])},bindContainerEvents:function(){var e=!1,t,n,r=this;this.container.mousemove(function(i){return e&&(r.transX-=(t-i.pageX)/r.scale,r.transY-=(n-i.pageY)/r.scale,r.applyTransform(),t=i.pageX,n=i.pageY),!1}).mousedown(function(r){return e=!0,t=r.pageX,n=r.pageY,!1}),jvm.$("body").mouseup(function(){e=!1}),this.params.zoomOnScroll&&this.container.mousewheel(function(e,t,n,i){var s=jvm.$(r.container).offset(),o=e.pageX-s.left,u=e.pageY-s.top,a=Math.pow(1.3,i);r.label.hide(),r.setScale(r.scale*a,o,u),e.preventDefault()})},bindContainerTouchEvents:function(){var e,t,n=this,r,i,s,o,u,a=function(a){var f=a.originalEvent.touches,l,c,h,p;a.type=="touchstart"&&(u=0),f.length==1?(u==1&&(h=n.transX,p=n.transY,n.transX-=(r-f[0].pageX)/n.scale,n.transY-=(i-f[0].pageY)/n.scale,n.applyTransform(),n.label.hide(),(h!=n.transX||p!=n.transY)&&a.preventDefault()),r=f[0].pageX,i=f[0].pageY):f.length==2&&(u==2?(c=Math.sqrt(Math.pow(f[0].pageX-f[1].pageX,2)+Math.pow(f[0].pageY-f[1].pageY,2))/t,n.setScale(e*c,s,o),n.label.hide(),a.preventDefault()):(l=jvm.$(n.container).offset(),f[0].pageX>f[1].pageX?s=f[1].pageX+(f[0].pageX-f[1].pageX)/2:s=f[0].pageX+(f[1].pageX-f[0].pageX)/2,f[0].pageY>f[1].pageY?o=f[1].pageY+(f[0].pageY-f[1].pageY)/2:o=f[0].pageY+(f[1].pageY-f[0].pageY)/2,s-=l.left,o-=l.top,e=n.scale,t=Math.sqrt(Math.pow(f[0].pageX-f[1].pageX,2)+Math.pow(f[0].pageY-f[1].pageY,2)))),u=f.length};jvm.$(this.container).bind("touchstart",a),jvm.$(this.container).bind("touchmove",a)},bindElementEvents:function(){var e=this,t;this.container.mousemove(function(){t=!0}),this.container.delegate("[class~='jvectormap-element']","mouseover mouseout",function(t){var n=this,r=jvm.$(this).attr("class").baseVal?jvm.$(this).attr("class").baseVal:jvm.$(this).attr("class"),i=r.indexOf("jvectormap-region")===-1?"marker":"region",s=i=="region"?jvm.$(this).attr("data-code"):jvm.$(this).attr("data-index"),o=i=="region"?e.regions[s].element:e.markers[s].element,u=i=="region"?e.mapData.paths[s].name:e.markers[s].config.name||"",a=jvm.$.Event(i+"LabelShow.jvectormap"),f=jvm.$.Event(i+"Over.jvectormap");t.type=="mouseover"?(e.container.trigger(f,[s]),f.isDefaultPrevented()||o.setHovered(!0),e.label.text(u),e.container.trigger(a,[e.label,s]),a.isDefaultPrevented()||(e.label.show(),e.labelWidth=e.label.width(),e.labelHeight=e.label.height())):(o.setHovered(!1),e.label.hide(),e.container.trigger(i+"Out.jvectormap",[s]))}),this.container.delegate("[class~='jvectormap-element']","mousedown",function(e){t=!1}),this.container.delegate("[class~='jvectormap-element']","mouseup",function(n){var r=this,i=jvm.$(this).attr("class").baseVal?jvm.$(this).attr("class").baseVal:jvm.$(this).attr("class"),s=i.indexOf("jvectormap-region")===-1?"marker":"region",o=s=="region"?jvm.$(this).attr("data-code"):jvm.$(this).attr("data-index"),u=jvm.$.Event(s+"Click.jvectormap"),a=s=="region"?e.regions[o].element:e.markers[o].element;if(!t){e.container.trigger(u,[o]);if(s==="region"&&e.params.regionsSelectable||s==="marker"&&e.params.markersSelectable)u.isDefaultPrevented()||(e.params[s+"sSelectableOne"]&&e.clearSelected(s+"s"),a.setSelected(!a.isSelected))}})},bindZoomButtons:function(){var e=this;jvm.$("<div/>").addClass("jvectormap-zoomin").text("+").appendTo(this.container),jvm.$("<div/>").addClass("jvectormap-zoomout").html("−").appendTo(this.container),this.container.find(".jvectormap-zoomin").click(function(){e.setScale(e.scale*e.params.zoomStep,e.width/2,e.height/2)}),this.container.find(".jvectormap-zoomout").click(function(){e.setScale(e.scale/e.params.zoomStep,e.width/2,e.height/2)})},createLabel:function(){var e=this;this.label=jvm.$("<div/>").addClass("jvectormap-label").appendTo(jvm.$("body")),this.container.mousemove(function(t){var n=t.pageX-15-e.labelWidth,r=t.pageY-15-e.labelHeight;n<5&&(n=t.pageX+15),r<5&&(r=t.pageY+15),e.label.is(":visible")&&e.label.css({left:n,top:r})})},setScale:function(e,t,n,r){var i,s=jvm.$.Event("zoom.jvectormap");e>this.params.zoomMax*this.baseScale?e=this.params.zoomMax*this.baseScale:e<this.params.zoomMin*this.baseScale&&(e=this.params.zoomMin*this.baseScale),typeof t!="undefined"&&typeof n!="undefined"&&(i=e/this.scale,r?(this.transX=t+this.defaultWidth*(this.width/(this.defaultWidth*e))/2,this.transY=n+this.defaultHeight*(this.height/(this.defaultHeight*e))/2):(this.transX-=(i-1)/e*t,this.transY-=(i-1)/e*n)),this.scale=e,this.applyTransform(),this.container.trigger(s,[e/this.baseScale])},setFocus:function(e,t,n){var r,i,s,o,u;if(jvm.$.isArray(e)||this.regions[e]){jvm.$.isArray(e)?o=e:o=[e];for(u=0;u<o.length;u++)this.regions[o[u]]&&(i=this.regions[o[u]].element.getBBox(),i&&(typeof r=="undefined"?r=i:(s={x:Math.min(r.x,i.x),y:Math.min(r.y,i.y),width:Math.max(r.x+r.width,i.x+i.width)-Math.min(r.x,i.x),height:Math.max(r.y+r.height,i.y+i.height)-Math.min(r.y,i.y)},r=s)));this.setScale(Math.min(this.width/r.width,this.height/r.height),-(r.x+r.width/2),-(r.y+r.height/2),!0)}else e*=this.baseScale,this.setScale(e,-t*this.defaultWidth,-n*this.defaultHeight,!0)},getSelected:function(e){var t,n=[];for(t in this[e])this[e][t].element.isSelected&&n.push(t);return n},getSelectedRegions:function(){return this.getSelected("regions")},getSelectedMarkers:function(){return this.getSelected("markers")},setSelected:function(e,t){var n;typeof t!="object"&&(t=[t]);if(jvm.$.isArray(t))for(n=0;n<t.length;n++)this[e][t[n]].element.setSelected(!0);else for(n in t)this[e][n].element.setSelected(!!t[n])},setSelectedRegions:function(e){this.setSelected("regions",e)},setSelectedMarkers:function(e){this.setSelected("markers",e)},clearSelected:function(e){var t={},n=this.getSelected(e),r;for(r=0;r<n.length;r++)t[n[r]]=!1;this.setSelected(e,t)},clearSelectedRegions:function(){this.clearSelected("regions")},clearSelectedMarkers:function(){this.clearSelected("markers")},getMapObject:function(){return this},getRegionName:function(e){return this.mapData.paths[e].name},createRegions:function(){var e,t,n=this;for(e in this.mapData.paths)t=this.canvas.addPath({d:this.mapData.paths[e].path,"data-code":e},jvm.$.extend(!0,{},this.params.regionStyle)),jvm.$(t.node).bind("selected",function(e,t){n.container.trigger("regionSelected.jvectormap",[jvm.$(this).attr("data-code"),t,n.getSelectedRegions()])}),t.addClass("jvectormap-region jvectormap-element"),this.regions[e]={element:t,config:this.mapData.paths[e]}},createMarkers:function(e){var t,n,r,i,s,o=this;this.markersGroup=this.markersGroup||this.canvas.addGroup();if(jvm.$.isArray(e)){s=e.slice(),e={};for(t=0;t<s.length;t++)e[t]=s[t]}for(t in e)i=e[t]instanceof Array?{latLng:e[t]}:e[t],r=this.getMarkerPosition(i),r!==!1&&(n=this.canvas.addCircle({"data-index":t,cx:r.x,cy:r.y},jvm.$.extend(!0,{},this.params.markerStyle,{initial:i.style||{}}),this.markersGroup),n.addClass("jvectormap-marker jvectormap-element"),jvm.$(n.node).bind("selected",function(e,t){o.container.trigger("markerSelected.jvectormap",[jvm.$(this).attr("data-index"),t,o.getSelectedMarkers()])}),this.markers[t]&&this.removeMarkers([t]),this.markers[t]={element:n,config:i})},repositionMarkers:function(){var e,t;for(e in this.markers)t=this.getMarkerPosition(this.markers[e].config),t!==!1&&this.markers[e].element.setStyle({cx:t.x,cy:t.y})},getMarkerPosition:function(e){return jvm.WorldMap.maps[this.params.map].projection?this.latLngToPoint.apply(this,e.latLng||[0,0]):{x:e.coords[0]*this.scale+this.transX*this.scale,y:e.coords[1]*this.scale+this.transY*this.scale}},addMarker:function(e,t,n){var r={},i=[],s,o,n=n||[];r[e]=t;for(o=0;o<n.length;o++)s={},s[e]=n[o],i.push(s);this.addMarkers(r,i)},addMarkers:function(e,t){var n;t=t||[],this.createMarkers(e);for(n=0;n<t.length;n++)this.series.markers[n].setValues(t[n]||{})},removeMarkers:function(e){var t;for(t=0;t<e.length;t++)this.markers[e[t]].element.remove(),delete this.markers[e[t]]},removeAllMarkers:function(){var e,t=[];for(e in this.markers)t.push(e);this.removeMarkers(t)},latLngToPoint:function(e,t){var n,r=jvm.WorldMap.maps[this.params.map].projection,i=r.centralMeridian,s=this.width-this.baseTransX*2*this.baseScale,o=this.height-this.baseTransY*2*this.baseScale,u,a,f=this.scale/this.baseScale;return t<-180+i&&(t+=360),n=jvm.Proj[r.type](e,t,i),u=this.getInsetForPoint(n.x,n.y),u?(a=u.bbox,n.x=(n.x-a[0].x)/(a[1].x-a[0].x)*u.width*this.scale,n.y=(n.y-a[0].y)/(a[1].y-a[0].y)*u.height*this.scale,{x:n.x+this.transX*this.scale+u.left*this.scale,y:n.y+this.transY*this.scale+u.top*this.scale}):!1},pointToLatLng:function(e,t){var n=jvm.WorldMap.maps[this.params.map].projection,r=n.centralMeridian,i=jvm.WorldMap.maps[this.params.map].insets,s,o,u,a,f;for(s=0;s<i.length;s++){o=i[s],u=o.bbox,a=e-(this.transX*this.scale+o.left*this.scale),f=t-(this.transY*this.scale+o.top*this.scale),a=a/(o.width*this.scale)*(u[1].x-u[0].x)+u[0].x,f=f/(o.height*this.scale)*(u[1].y-u[0].y)+u[0].y;if(a>u[0].x&&a<u[1].x&&f>u[0].y&&f<u[1].y)return jvm.Proj[n.type+"_inv"](a,-f,r)}return!1},getInsetForPoint:function(e,t){var n=jvm.WorldMap.maps[this.params.map].insets,r,i;for(r=0;r<n.length;r++){i=n[r].bbox;if(e>i[0].x&&e<i[1].x&&t>i[0].y&&t<i[1].y)return n[r]}},createSeries:function(){var e,t;this.series={markers:[],regions:[]};for(t in this.params.series)for(e=0;e<this.params.series[t].length;e++)this.series[t][e]=new jvm.DataSeries(this.params.series[t][e],this[t])},remove:function(){this.label.remove(),this.container.remove(),jvm.$(window).unbind("resize",this.onResize)}},jvm.WorldMap.maps={},jvm.WorldMap.defaultParams={map:"world_mill_en",backgroundColor:"#505050",zoomButtons:!0,zoomOnScroll:!0,zoomMax:8,zoomMin:1,zoomStep:1.6,regionsSelectable:!1,markersSelectable:!1,bindTouchEvents:!0,regionStyle:{initial:{fill:"white","fill-opacity":1,stroke:"none","stroke-width":0,"stroke-opacity":1},hover:{"fill-opacity":.8},selected:{fill:"yellow"},selectedHover
|
8 |
+
:{}},markerStyle:{initial:{fill:"grey",stroke:"#505050","fill-opacity":1,"stroke-width":1,"stroke-opacity":1,r:5},hover:{stroke:"black","stroke-width":2},selected:{fill:"blue"},selectedHover:{}}},jvm.WorldMap.apiEvents={onRegionLabelShow:"regionLabelShow",onRegionOver:"regionOver",onRegionOut:"regionOut",onRegionClick:"regionClick",onRegionSelected:"regionSelected",onMarkerLabelShow:"markerLabelShow",onMarkerOver:"markerOver",onMarkerOut:"markerOut",onMarkerClick:"markerClick",onMarkerSelected:"markerSelected",onViewportChange:"viewportChange"};
|
3.0.14/assets/admin/scripts/jquery-jvectormap-world-mill-en.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
jQuery.fn.vectorMap('addMap', 'world_mill_en',{"insets": [{"width": 900.0, "top": 0, "height": 440.7063107441331, "bbox": [{"y": -12671671.123330014, "x": -20004297.151525836}, {"y": 6930392.02513512, "x": 20026572.394749384}], "left": 0}], "paths": {"BD": {"path": "M652.71,228.85l-0.04,1.38l-0.46,-0.21l-0.42,0.3l0.05,0.65l-0.17,-1.37l-0.48,-1.26l-1.08,-1.6l-0.23,-0.13l-2.31,-0.11l-0.31,0.36l0.21,0.98l-0.6,1.11l-0.8,-0.4l-0.37,0.09l-0.23,0.3l-0.54,-0.21l-0.78,-0.19l-0.38,-2.04l-0.83,-1.89l0.4,-1.5l-0.16,-0.35l-1.24,-0.57l0.36,-0.62l1.5,-0.95l0.02,-0.49l-1.62,-1.26l0.64,-1.31l1.7,1.0l0.12,0.04l0.96,0.11l0.19,1.62l0.25,0.26l2.38,0.37l2.32,-0.04l1.06,0.33l-0.92,1.79l-0.97,0.13l-0.23,0.16l-0.77,1.51l0.05,0.35l1.37,1.37l0.5,-0.14l0.35,-1.46l0.24,-0.0l1.24,3.92Z", "name": "Bangladesh"}, "BE": {"path": "M429.28,143.95l1.76,0.25l0.13,-0.01l2.16,-0.64l1.46,1.34l1.26,0.71l-0.23,1.8l-0.44,0.08l-0.24,0.25l-0.2,1.36l-1.8,-1.22l-0.23,-0.05l-1.14,0.23l-1.62,-1.43l-1.15,-1.31l-0.21,-0.1l-0.95,-0.04l-0.21,-0.68l1.66,-0.54Z", "name": "Belgium"}, "BF": {"path": "M413.48,260.21l-1.22,-0.46l-0.13,-0.02l-1.17,0.1l-0.15,0.06l-0.73,0.53l-0.87,-0.41l-0.39,-0.75l-0.13,-0.13l-0.98,-0.48l-0.14,-1.2l0.63,-0.99l0.05,-0.18l-0.05,-0.73l1.9,-2.01l0.08,-0.14l0.35,-1.65l0.49,-0.44l1.05,0.3l0.21,-0.02l1.05,-0.52l0.13,-0.13l0.3,-0.58l1.87,-1.1l0.11,-0.1l0.43,-0.72l2.23,-1.01l1.21,-0.32l0.51,0.4l0.19,0.06l1.25,-0.01l-0.14,0.89l0.01,0.13l0.34,1.16l0.06,0.11l1.35,1.59l0.07,1.13l0.24,0.28l2.64,0.53l-0.05,1.39l-0.42,0.59l-1.11,0.21l-0.22,0.17l-0.46,0.99l-0.69,0.23l-2.12,-0.05l-1.14,-0.2l-0.19,0.03l-0.72,0.36l-1.07,-0.17l-4.35,0.12l-0.29,0.29l-0.06,1.44l0.25,1.45Z", "name": "Burkina Faso"}, "BG": {"path": "M477.63,166.84l0.51,0.9l0.33,0.14l0.9,-0.21l1.91,0.47l3.68,0.16l0.17,-0.05l1.2,-0.75l2.78,-0.67l1.72,1.05l1.02,0.24l-0.97,0.97l-0.91,2.17l0.0,0.24l0.56,1.19l-1.58,-0.3l-0.16,0.01l-2.55,0.95l-0.2,0.28l-0.02,1.23l-1.92,0.24l-1.68,-0.99l-0.27,-0.02l-1.94,0.8l-1.52,-0.07l-0.15,-1.72l-0.12,-0.21l-0.99,-0.76l0.18,-0.18l0.02,-0.39l-0.17,-0.22l0.33,-0.75l0.91,-0.91l0.01,-0.42l-1.16,-1.25l-0.18,-0.89l0.24,-0.27Z", "name": "Bulgaria"}, "BA": {"path": "M468.39,164.66l0.16,0.04l0.43,-0.0l-0.43,0.93l0.06,0.34l1.08,1.06l-0.28,1.09l-0.5,0.13l-0.47,0.28l-0.86,0.74l-0.1,0.16l-0.28,1.29l-1.81,-0.94l-0.9,-1.22l-1.0,-0.73l-1.1,-1.1l-0.55,-0.96l-1.11,-1.3l0.3,-0.75l0.59,0.46l0.42,-0.04l0.46,-0.54l1.0,-0.06l2.11,0.5l1.72,-0.03l1.06,0.64Z", "name": "Bosnia and Herzegovina"}, "BN": {"path": "M707.34,273.57l0.76,-0.72l1.59,-1.03l-0.18,1.93l-0.9,-0.06l-0.28,0.14l-0.31,0.51l-0.68,-0.78Z", "name": "Brunei"}, "BO": {"path": "M263.83,340.79l-0.23,-0.12l-2.86,-0.11l-0.28,0.17l-0.77,1.67l-1.17,-1.51l-0.18,-0.11l-3.28,-0.64l-0.28,0.1l-2.02,2.3l-1.43,0.29l-0.91,-3.35l-1.31,-2.88l0.75,-2.41l-0.09,-0.32l-1.23,-1.03l-0.31,-1.76l-0.05,-0.12l-1.12,-1.6l1.49,-2.62l0.01,-0.28l-1.0,-2.0l0.48,-0.72l0.02,-0.29l-0.37,-0.78l0.87,-1.13l0.06,-0.18l0.05,-2.17l0.12,-1.71l0.5,-0.8l0.01,-0.3l-1.9,-3.58l1.3,0.15l1.34,-0.05l0.23,-0.12l0.51,-0.7l2.12,-0.99l1.31,-0.93l2.81,-0.37l-0.21,1.51l0.01,0.13l0.29,0.91l-0.19,1.64l0.11,0.27l2.72,2.27l0.15,0.07l2.71,0.41l0.92,0.88l0.12,0.07l1.64,0.49l1.0,0.71l0.18,0.06l1.5,-0.02l1.24,0.64l0.1,1.31l0.05,0.14l0.44,0.68l0.02,0.73l-0.44,0.03l-0.27,0.39l0.96,2.99l0.28,0.21l4.43,0.1l-0.28,1.12l0.0,0.15l0.27,1.02l0.15,0.19l1.27,0.67l0.52,1.42l-0.42,1.91l-0.66,1.1l-0.04,0.2l0.21,1.3l-0.19,0.13l-0.01,-0.27l-0.15,-0.24l-2.33,-1.33l-0.14,-0.04l-2.38,-0.03l-4.36,0.76l-0.21,0.16l-1.2,2.29l-0.03,0.13l-0.06,1.37l-0.79,2.53l-0.05,-0.08Z", "name": "Bolivia"}, "JP": {"path": "M781.17,166.78l1.8,0.67l0.28,-0.04l1.38,-1.01l0.43,2.67l-3.44,0.77l-0.18,0.12l-2.04,2.79l-3.71,-1.94l-0.42,0.15l-1.29,3.11l-2.32,0.04l-0.3,-2.63l1.12,-2.1l2.51,-0.16l0.28,-0.25l0.73,-4.22l0.58,-1.9l2.59,2.84l2.0,1.1ZM773.66,187.36l-0.92,2.24l-0.01,0.2l0.4,1.3l-1.18,1.81l-3.06,1.28l-4.35,0.17l-0.19,0.08l-3.4,3.06l-1.36,-0.87l-0.1,-1.95l-0.34,-0.28l-4.35,0.62l-2.99,1.33l-2.87,0.05l-0.28,0.2l0.09,0.33l2.37,1.93l-1.57,4.44l-1.35,0.97l-0.9,-0.79l0.57,-2.32l-0.15,-0.34l-1.5,-0.77l-0.81,-1.53l2.04,-0.75l0.14,-0.1l1.28,-1.72l2.47,-1.43l1.84,-1.92l4.83,-0.82l2.62,0.57l0.33,-0.16l2.45,-4.77l1.38,1.14l0.38,0.0l5.1,-4.02l0.09,-0.11l1.57,-3.57l0.02,-0.16l-0.42,-3.22l0.94,-1.67l2.27,-0.47l1.26,3.82l-0.07,2.23l-2.26,2.86l-0.06,0.19l0.04,2.93ZM757.85,196.18l0.22,0.66l-1.11,1.33l-0.8,-0.7l-0.33,-0.04l-1.28,0.65l-0.14,0.15l-0.54,1.34l-1.17,-0.57l0.02,-1.03l1.2,-1.45l1.24,0.28l0.29,-0.1l0.9,-1.03l1.51,0.5Z", "name": "Japan"}, "BI": {"path": "M494.7,295.83l-0.14,-2.71l-0.04,-0.13l-0.34,-0.62l0.93,0.12l0.3,-0.16l0.67,-1.25l0.9,0.11l0.11,0.76l0.08,0.16l0.46,0.48l0.02,0.56l-0.55,0.48l-0.96,1.29l-0.82,0.82l-0.61,0.07Z", "name": "Burundi"}, "BJ": {"path": "M427.4,268.94l-1.58,0.22l-0.52,-1.45l0.11,-5.73l-0.08,-0.21l-0.43,-0.44l-0.09,-1.13l-0.09,-0.19l-1.52,-1.52l0.24,-1.01l0.7,-0.23l0.18,-0.16l0.45,-0.97l1.07,-0.21l0.19,-0.12l0.53,-0.73l0.73,-0.65l0.68,-0.0l1.69,1.3l-0.08,0.67l0.02,0.14l0.52,1.38l-0.44,0.9l-0.01,0.24l0.2,0.52l-1.1,1.42l-0.76,0.76l-0.08,0.13l-0.47,1.59l0.05,1.69l-0.13,3.79Z", "name": "Benin"}, "BT": {"path": "M650.38,213.78l0.88,0.75l-0.13,1.24l-1.77,0.07l-2.1,-0.18l-1.57,0.4l-2.02,-0.91l-0.02,-0.24l1.54,-1.87l1.18,-0.6l1.67,0.59l1.32,0.08l1.01,0.67Z", "name": "Bhutan"}, "JM": {"path": "M226.67,238.37l1.64,0.23l1.2,0.56l0.11,0.19l-1.25,0.03l-0.14,0.04l-0.65,0.37l-1.24,-0.37l-1.17,-0.77l0.11,-0.22l0.86,-0.15l0.52,0.08Z", "name": "Jamaica"}, "BW": {"path": "M484.91,331.96l0.53,0.52l0.82,1.53l2.83,2.86l0.14,0.08l0.85,0.22l0.03,0.81l0.74,1.66l0.21,0.17l1.87,0.39l1.17,0.87l-3.13,1.71l-2.3,2.01l-0.07,0.1l-0.82,1.74l-0.66,0.88l-1.24,0.19l-0.24,0.2l-0.65,1.98l-1.4,0.55l-1.9,-0.12l-1.2,-0.74l-1.06,-0.32l-0.22,0.02l-1.22,0.62l-0.14,0.14l-0.58,1.21l-1.16,0.79l-1.18,1.13l-1.5,0.23l-0.4,-0.68l0.22,-1.53l-0.04,-0.19l-1.48,-2.54l-0.11,-0.11l-0.53,-0.31l-0.0,-7.25l2.18,-0.08l0.29,-0.3l0.07,-9.0l1.63,-0.08l3.69,-0.86l0.84,0.93l0.38,0.05l1.53,-0.97l0.79,-0.03l1.3,-0.53l0.23,0.1l0.92,1.96Z", "name": "Botswana"}, "BR": {"path": "M259.49,274.87l1.42,0.25l1.97,0.62l0.28,-0.05l0.67,-0.55l1.76,-0.38l2.8,-0.94l0.12,-0.08l0.92,-0.96l0.05,-0.33l-0.15,-0.32l0.73,-0.06l0.36,0.35l-0.27,0.93l0.17,0.36l0.76,0.34l0.44,0.9l-0.58,0.73l-0.06,0.13l-0.4,2.13l0.03,0.19l0.62,1.22l0.17,1.11l0.11,0.19l1.54,1.18l0.15,0.06l1.23,0.12l0.29,-0.15l0.2,-0.36l0.71,-0.11l1.13,-0.44l0.79,-0.63l1.25,0.19l0.65,-0.08l1.32,0.2l0.32,-0.18l0.23,-0.51l-0.05,-0.31l-0.31,-0.37l0.11,-0.31l0.75,0.17l0.13,0.0l1.1,-0.24l1.34,0.5l1.08,0.51l0.33,-0.05l0.67,-0.58l0.27,0.05l0.28,0.57l0.31,0.17l1.2,-0.18l0.17,-0.08l1.03,-1.05l0.76,-1.82l1.39,-2.16l0.49,-0.07l0.52,1.17l1.4,4.37l0.2,0.2l1.14,0.35l0.05,1.39l-1.8,1.97l0.01,0.42l0.78,0.75l0.18,0.08l4.16,0.37l0.08,2.25l0.5,0.22l1.78,-1.54l2.98,0.85l4.07,1.5l1.07,1.28l-0.37,1.23l0.36,0.38l2.83,-0.75l4.8,1.3l3.75,-0.09l3.6,2.02l3.27,2.84l1.93,0.72l2.13,0.11l0.76,0.66l1.22,4.56l-0.96,4.03l-1.22,1.58l-3.52,3.51l-1.63,2.91l-1.75,2.09l-0.5,0.04l-0.26,0.19l-0.72,1.99l0.18,4.76l-0.95,5.56l-0.74,0.96l-0.06,0.15l-0.43,3.39l-2.49,3.34l-0.06,0.13l-0.4,2.56l-1.9,1.07l-0.13,0.16l-0.51,1.38l-2.59,0.0l-3.94,1.01l-1.82,1.19l-2.85,0.81l-3.01,2.17l-2.12,2.65l-0.06,0.13l-0.36,2.0l0.01,0.13l0.4,1.42l-0.45,2.63l-0.53,1.23l-1.76,1.53l-2.76,4.79l-2.16,2.15l-1.69,1.29l-0.09,0.12l-1.12,2.6l-1.3,1.26l-0.45,-1.02l0.99,-1.18l0.01,-0.37l-1.5,-1.95l-1.98,-1.54l-2.58,-1.77l-0.2,-0.05l-0.81,0.07l-2.42,-2.05l-0.25,-0.07l-0.77,0.14l2.75,-3.07l2.8,-2.61l1.67,-1.09l2.11,-1.49l0.13,-0.24l0.05,-2.15l-0.07,-0.2l-1.26,-1.54l-0.35,-0.09l-0.64,0.27l0.3,-0.95l0.34,-1.57l0.01,-1.52l-0.16,-0.26l-0.9,-0.48l-0.27,-0.01l-0.86,0.39l-0.65,-0.08l-0.23,-0.8l-0.23,-2.39l-0.04,-0.12l-0.47,-0.79l-0.14,-0.12l-1.69,-0.71l-0.25,0.01l-0.93,0.47l-2.29,-0.44l0.15,-3.3l-0.03,-0.15l-0.62,-1.22l0.57,-0.39l0.13,-0.3l-0.22,-1.37l0.67,-1.13l0.44,-2.04l-0.01,-0.17l-0.59,-1.61l-0.14,-0.16l-1.25,-0.66l-0.22,-0.82l0.35,-1.41l-0.28,-0.37l-4.59,-0.1l-0.78,-2.41l0.34,-0.02l0.28,-0.31l-0.03,-1.1l-0.05,-0.16l-0.45,-0.68l-0.1,-1.4l-0.16,-0.24l-1.45,-0.76l-0.14,-0.03l-1.48,0.02l-1.04,-0.73l-1.62,-0.48l-0.93,-0.9l-0.16,-0.08l-2.72,-0.41l-2.53,-2.12l0.18,-1.54l-0.01,-0.13l-0.29,-0.91l0.26,-1.83l-0.34,-0.34l-3.28,0.43l-0.14,0.05l-1.3,0.93l-2.16,1.01l-0.12,0.09l-0.47,0.65l-1.12,0.05l-1.84,-0.21l-0.12,0.01l-1.33,0.41l-0.82,-0.21l0.16,-3.6l-0.48,-0.26l-1.97,1.43l-1.96,-0.06l-0.86,-1.23l-0.22,-0.13l-1.23,-0.11l0.34,-0.69l-0.05,-0.33l-1.36,-1.5l-0.92,-2.0l0.45,-0.32l0.13,-0.25l-0.0,-0.87l1.34,-0.64l0.17,-0.32l-0.23,-1.23l0.56,-0.77l0.05,-0.13l0.16,-1.03l2.7,-1.61l2.01,-0.47l0.16,-0.09l0.24,-0.27l2.11,0.11l0.31,-0.25l1.13,-6.87l0.06,-1.12l-0.4,-1.53l-0.1,-0.15l-1.0,-0.82l0.01,-1.45l1.08,-0.32l0.39,0.2l0.44,-0.24l0.08,-0.96l-0.25,-0.32l-1.22,-0.22l-0.02,-1.01l4.57,0.05l0.22,-0.09l0.6,-0.63l0.44,0.5l0.47,1.42l0.45,0.16l0.27,-0.18l1.21,1.16l0.23,0.08l1.95,-0.16l0.23,-0.14l0.43,-0.67l1.76,-0.55l1.05,-0.42l0.18,-0.2l0.25,-0.92l1.65,-0.66l0.18,-0.35l-0.14,-0.53l-0.26,-0.22l-1.91,-0.19l-0.29,-1.33l0.1,-1.64l-0.15,-0.28l-0.44,-0.25Z", "name": "Brazil"}, "BS": {"path": "M227.51,216.69l0.3,0.18l-0.24,1.07l0.03,-1.04l-0.09,-0.21ZM226.5,224.03l-0.13,0.03l-0.54,-1.3l-0.09,-0.12l-0.78,-0.64l0.4,-1.26l0.33,0.05l0.79,2.0l0.01,1.24ZM225.76,216.5l-2.16,0.34l-0.07,-0.41l0.85,-0.16l1.36,0.07l0.02,0.16Z", "name": "The Bahamas"}, "BY": {"path": "M480.08,135.28l2.09,0.02l0.13,-0.03l2.72,-1.3l0.16,-0.19l0.55,-1.83l1.94,-1.06l0.15,-0.31l-0.2,-1.33l1.33,-0.52l2.58,-1.3l2.39,0.8l0.3,0.75l0.37,0.17l1.22,-0.39l2.18,0.75l0.2,1.36l-0.48,0.85l0.01,0.32l1.57,2.26l0.92,0.6l-0.1,0.41l0.19,0.35l1.61,0.57l0.48,0.6l-0.64,0.49l-1.91,-0.11l-0.18,0.05l-0.48,0.32l-0.1,0.39l0.57,1.1l0.51,1.78l-1.79,0.17l-0.18,0.08l-0.77,0.73l-0.09,0.19l-0.13,1.31l-0.75,-0.22l-2.11,0.15l-0.56,-0.66l-0.39,-0.06l-0.8,0.49l-0.79,-0.4l-0.13,-0.03l-1.94,-0.07l-2.76,-0.79l-2.58,-0.27l-1.98,0.07l-0.15,0.05l-1.31,0.86l-0.8,0.09l-0.04,-1.16l-0.03,-0.12l-0.63,-1.28l1.22,-0.56l0.17,-0.27l0.01,-1.35l-0.04,-0.15l-0.66,-1.24l-0.08,-1.12Z", "name": "Belarus"}, "BZ": {"path": "M198.03,239.7l0.28,0.19l0.43,-0.1l0.82,-1.42l0.0,0.07l0.29,0.29l0.16,0.0l-0.02,0.35l-0.39,1.08l0.02,0.25l0.16,0.29l-0.23,0.8l0.04,0.24l0.09,0.14l-0.25,1.12l-0.38,0.53l-0.33,0.06l-0.21,0.15l-0.41,0.74l-0.25,0.0l0.17,-2.58l0.01,-2.2Z", "name": "Belize"}, "RU": {"path": "M688.57,38.85l0.63,2.39l0.44,0.19l2.22,-1.23l7.18,0.07l5.54,2.49l1.85,1.77l-0.55,2.34l-2.64,1.42l-6.57,2.76l-1.95,1.5l0.12,0.53l3.09,0.68l3.69,1.23l0.21,-0.01l1.98,-0.81l1.16,2.84l0.5,0.08l1.03,-1.18l3.86,-0.74l7.79,0.78l0.56,2.05l0.27,0.22l10.47,0.71l0.32,-0.29l0.13,-3.34l4.98,0.8l3.96,-0.02l3.88,2.43l1.06,2.79l-1.38,1.83l0.01,0.38l3.15,3.64l0.1,0.08l3.94,1.86l0.4,-0.14l2.28,-4.56l3.75,1.94l0.22,0.02l4.18,-1.22l4.76,1.4l0.26,-0.04l1.74,-1.23l3.98,0.63l0.32,-0.41l-1.71,-4.1l3.0,-1.86l22.39,3.04l2.06,2.67l0.1,0.08l6.55,3.51l0.17,0.03l10.08,-0.86l4.86,0.73l1.91,1.72l-0.29,3.13l0.18,0.31l3.08,1.26l0.19,0.01l3.32,-0.9l4.37,-0.11l4.78,0.87l4.61,-0.48l4.26,3.82l0.32,0.05l3.1,-1.4l0.12,-0.45l-1.91,-2.67l0.92,-1.64l7.78,1.22l5.22,-0.26l7.12,2.1l9.6,5.22l6.4,4.15l-0.2,2.44l0.14,0.28l1.69,1.04l0.45,-0.31l-0.51,-2.66l6.31,0.58l4.52,3.61l-2.1,1.52l-4.02,0.42l-0.27,0.29l-0.06,3.83l-0.81,0.67l-2.14,-0.11l-1.91,-1.39l-3.19,-1.13l-0.51,-1.63l-0.21,-0.2l-2.54,-0.67l-0.13,-0.0l-2.69,0.5l-1.12,-1.19l0.48,-1.36l-0.38,-0.39l-3.0,0.98l-0.17,0.44l1.02,1.76l-1.27,1.55l-3.09,1.71l-3.15,-0.29l-0.3,0.18l0.07,0.34l2.22,2.1l1.47,3.22l1.15,1.09l0.25,1.41l-0.48,0.76l-4.47,-0.81l-0.17,0.02l-6.97,2.9l-2.2,0.44l-0.11,0.05l-3.83,2.68l-3.63,2.32l-0.1,0.11l-0.76,1.4l-3.3,-2.4l-0.3,-0.03l-6.31,2.85l-0.99,-1.21l-0.4,-0.06l-2.32,1.54l-3.23,-0.49l-0.33,0.2l-0.79,2.39l-2.97,3.51l-0.07,0.21l0.09,1.47l0.22,0.27l2.62,0.74l-0.3,4.7l-2.06,0.12l-0.26,0.2l-1.07,2.94l0.04,0.27l0.83,1.19l-4.03,1.63l-0.18,0.21l-0.83,3.72l-3.55,0.79l-0.23,0.23l-0.73,3.32l-3.22,2.76l-0.76,-1.88l-1.07,-4.88l-1.39,-7.59l1.17,-4.76l2.05,-2.08l0.09,-0.19l0.11,-1.46l3.67,-0.77l0.15,-0.08l4.47,-4.61l4.29,-3.82l4.48,-3.01l0.11,-0.14l2.01,-5.43l-0.31,-0.4l-3.04,0.33l-0.24,0.17l-1.47,3.11l-5.98,3.94l-1.91,-4.36l-0.33,-0.17l-6.46,1.3l-0.15,0.08l-6.27,6.33l-0.01,0.41l1.7,1.87l-5.04,0.87l-3.51,0.34l0.16,-2.32l-0.26,-0.32l-3.89,-0.56l-0.19,0.04l-3.02,1.77l-7.63,-0.63l-8.24,1.1l-0.16,0.07l-8.11,7.09l-9.6,8.31l0.16,0.52l3.79,0.42l1.16,2.03l0.17,0.14l2.43,0.76l0.31,-0.08l1.5,-1.61l2.49,0.2l3.46,3.6l0.08,2.67l-1.91,3.26l-0.04,0.14l-0.21,3.91l-1.11,5.09l-3.73,4.55l-0.87,2.21l-6.73,7.14l-1.59,1.77l-3.23,1.72l-1.38,0.03l-1.48,-1.39l-0.37,-0.03l-3.36,2.22l-0.11,0.14l-0.16,0.42l-0.01,-1.09l1.0,-0.06l0.28,-0.27l0.36,-3.6l-0.61,-2.51l1.85,-0.94l2.94,0.53l0.32,-0.15l1.71,-3.1l0.84,-3.38l0.97,-1.18l1.32,-2.88l-0.34,-0.42l-4.14,0.95l-2.18,1.25l-3.51,-0.0l-0.95,-2.81l-0.1,-0.14l-2.97,-2.3l-0.11,-0.05l-4.19,-1.0l-0.89,-3.08l-0.87,-2.03l-0.95,-1.46l-1.54,-3.37l-0.12,-0.14l-2.27,-1.28l-3.83,-1.02l-3.37,0.1l-3.11,0.61l-0.13,0.06l-2.07,1.69l0.04,0.49l1.23,0.72l0.03,1.53l-1.34,1.05l-2.26,3.51l-0.05,0.17l0.02,1.27l-3.25,1.9l-2.87,-1.17l-0.14,-0.02l-2.86,0.26l-1.22,-1.02l-0.12,-0.06l-1.5,-0.35l-0.23,0.04l-3.62,2.27l-3.24,0.53l-2.28,0.79l-3.08,-0.51l-2.24,0.03l-1.49,-1.61l-2.45,-1.57l-0.11,-0.04l-2.6,-0.43l-3.17,0.43l-2.31,0.59l-3.31,-1.28l-0.45,-2.31l-0.21,-0.23l-2.94,-0.85l-2.26,-0.39l-2.77,-1.36l-0.37,0.09l-2.59,3.45l-0.03,0.32l0.91,1.74l-2.15,2.01l-3.47,-0.79l-2.44,-0.12l-1.59,-1.46l-0.2,-0.08l-2.55,-0.05l-2.12,-0.98l-0.24,-0.01l-3.85,1.57l-4.74,2.79l-2.59,0.55l-0.79,0.21l-1.21,-1.81l-0.29,-0.13l-3.05,0.41l-0.96,-1.25l-0.14,-0.1l-1.65,-0.6l-1.15,-1.82l-0.13,-0.12l-1.38,-0.6l-0.19,-0.02l-3.49,0.82l-3.35,-1.85l-0.38,0.08l-1.08,1.4l-5.36,-8.17l-3.02,-2.52l0.72,-0.85l0.01,-0.38l-0.37,-0.08l-6.22,3.21l-1.98,0.16l0.17,-1.51l-0.2,-0.31l-3.22,-1.17l-0.19,-0.0l-2.3,0.74l-0.72,-3.27l-0.24,-0.23l-4.5,-0.75l-0.21,0.04l-2.2,1.42l-6.21,1.27l-0.11,0.05l-1.16,0.81l-9.3,1.19l-0.18,0.09l-1.15,1.17l-0.02,0.39l1.56,2.01l-2.02,0.74l-0.16,0.42l0.35,0.68l-2.18,1.49l0.02,0.51l3.83,2.16l-0.45,1.13l-3.31,-0.13l-0.25,0.12l-0.57,0.77l-2.97,-1.59l-0.15,-0.04l-3.97,0.07l-0.13,0.03l-2.53,1.32l-2.84,-1.28l-5.52,-2.3l-0.12,-0.02l-3.91,0.09l-0.16,0.05l-5.17,3.6l-0.13,0.21l-0.25,1.89l-2.17,-1.6l-0.44,0.1l-2.0,3.59l0.06,0.37l0.55,0.5l-1.32,2.23l0.04,0.36l2.13,2.17l0.23,0.09l1.7,-0.08l1.42,1.89l-0.23,1.5l0.19,0.32l0.94,0.38l-0.89,1.44l-2.3,0.49l-0.17,0.11l-2.49,3.2l0.0,0.37l2.2,2.81l-0.23,1.93l0.06,0.22l2.56,3.32l-1.27,1.02l-0.4,0.66l-0.8,-0.15l-1.65,-1.75l-0.18,-0.09l-0.66,-0.09l-1.45,-0.64l-0.72,-1.16l-0.18,-0.13l-2.34,-0.63l-0.17,0.0l-1.32,0.41l-0.31,-0.4l-0.12,-0.09l-3.49,-1.48l-3.67,-0.49l-2.1,-0.52l-0.3,0.1l-0.12,0.14l-2.96,-2.4l-2.89,-1.19l-1.69,-1.42l1.27,-0.35l0.16,-0.1l2.08,-2.61l-0.04,-0.41l-1.02,-0.9l3.21,-1.12l0.2,-0.31l-0.07,-0.69l-0.37,-0.26l-1.86,0.42l0.05,-0.86l1.11,-0.76l2.35,-0.23l0.25,-0.19l0.39,-1.07l0.0,-0.19l-0.51,-1.64l0.95,-1.58l0.04,-0.16l-0.03,-0.95l-0.22,-0.28l-3.69,-1.06l-1.43,0.02l-1.45,-1.44l-0.29,-0.08l-1.83,0.49l-2.88,-1.04l0.04,-0.42l-0.04,-0.18l-0.89,-1.43l-0.23,-0.14l-1.77,-0.14l-0.13,-0.66l0.52,-0.56l0.01,-0.4l-1.6,-1.9l-0.27,-0.1l-2.55,0.32l-0.71,-0.16l-0.3,0.1l-0.53,0.63l-0.58,-0.08l-0.56,-1.97l-0.48,-0.94l0.17,-0.11l1.92,0.11l0.2,-0.06l0.97,-0.74l0.05,-0.42l-0.72,-0.91l-0.13,-0.1l-1.43,-0.51l0.09,-0.36l-0.13,-0.33l-0.97,-0.59l-1.43,-2.06l0.44,-0.77l0.04,-0.19l-0.25,-1.64l-0.2,-0.24l-2.45,-0.84l-0.19,-0.0l-1.05,0.34l-0.25,-0.62l-0.18,-0.17l-2.5,-0.84l-0.74,-1.93l-0.21,-1.7l-0.13,-0.21l-0.92,-0.63l0.83,-0.89l0.07,-0.27l-0.71,-3.26l1.69,-2.01l0.03,-0.34l-0.24,-0.41l2.63,-1.9l-0.01,-0.49l-2.31,-1.57l5.08,-4.61l2.33,-2.24l1.01,-2.08l-0.09,-0.37l-3.52,-2.56l0.94,-2.38l-0.04,-0.29l-2.14,-2.86l1.61,-3.35l-0.01,-0.29l-2.81,-4.58l2.19,-3.04l-0.06,-0.42l-3.7,-2.76l0.32,-2.67l1.87,-0.38l4.26,-1.77l2.46,-1.47l3.96,2.58l0.12,0.05l6.81,1.04l9.37,4.87l1.81,1.92l0.15,2.55l-2.61,2.06l-3.95,1.07l-11.1,-3.15l-0.17,0.0l-1.84,0.53l-0.1,0.53l3.97,2.97l0.15,1.77l0.16,4.14l0.19,0.27l3.21,1.22l1.94,1.03l0.44,-0.22l0.32,-1.94l-0.07,-0.25l-1.32,-1.52l1.25,-1.2l5.87,2.45l0.24,-0.01l2.11,-0.98l0.13,-0.42l-1.55,-2.75l5.52,-3.84l2.13,0.22l2.28,1.42l0.43,-0.12l1.46,-2.87l-0.04,-0.33l-1.97,-2.37l1.14,-2.38l-0.02,-0.3l-1.42,-2.07l6.15,1.22l1.14,1.92l-2.74,0.46l-0.25,0.3l0.02,2.36l0.12,0.24l1.97,1.44l0.25,0.05l3.87,-0.91l0.22,-0.23l0.58,-2.55l5.09,-1.98l8.67,-3.69l1.22,0.14l-2.06,2.2l0.18,0.5l3.11,0.45l0.23,-0.07l1.71,-1.41l4.59,-0.12l0.12,-0.03l3.53,-1.72l2.7,2.48l0.42,-0.01l2.85,-2.88l-0.0,-0.43l-2.42,-2.35l1.0,-1.13l7.2,1.31l3.42,1.36l9.06,4.97l0.39,-0.08l1.67,-2.27l-0.04,-0.4l-2.46,-2.23l-0.06,-0.82l-0.26,-0.27l-2.64,-0.38l0.69,-1.76l0.0,-0.22l-1.32,-3.47l-0.07,-1.27l4.52,-4.09l0.08,-0.11l1.6,-4.18l1.67,-0.84l6.33,1.2l0.46,2.31l-2.31,3.67l0.05,0.38l1.49,1.41l0.77,3.04l-0.56,6.05l0.09,0.24l2.62,2.54l-0.99,2.65l-4.87,5.96l0.17,0.48l2.86,0.61l0.31,-0.13l0.94,-1.42l2.67,-1.04l0.18,-0.19l0.64,-2.01l2.11,-1.98l0.05,-0.37l-1.38,-2.32l1.11,-2.74l-0.24,-0.41l-2.53,-0.33l-0.53,-2.16l1.96,-4.42l-0.05,-0.32l-3.03,-3.48l4.21,-2.94l0.12,-0.3l-0.52,-3.04l0.72,-0.06l1.18,2.35l-0.97,4.39l0.2,0.35l2.68,0.84l0.37,-0.38l-1.05,-3.07l3.89,-1.71l5.05,-0.24l4.55,2.62l0.36,-0.05l0.05,-0.36l-2.19,-3.84l-0.23,-4.78l4.07,-0.92l5.98,0.21l5.47,-0.64l0.2,-0.48l-1.88,-2.37l2.65,-2.99l2.75,-0.13l0.12,-0.03l4.82,-2.48l6.56,-0.67l0.23,-0.14l0.76,-1.27l6.33,-0.46l1.97,1.11l0.28,0.01l5.55,-2.71l4.53,0.08l0.29,-0.21l0.67,-2.18l2.29,-2.15l5.75,-2.13l3.48,1.4l-2.7,1.03l-0.19,0.31l0.26,0.26l5.47,0.78ZM871.83,65.73l0.25,-0.15l1.99,0.01l3.3,1.2l-0.08,0.22l-2.41,1.03l-5.73,0.49l-0.31,-1.0l2.99,-1.8ZM797.64,48.44l-2.22,1.51l-3.85,-0.43l-4.35,-1.85l0.42,-1.13l4.42,0.72l5.59,1.17ZM783.82,46.06l-1.71,3.25l-9.05,-0.14l-4.11,1.15l-4.64,-3.04l1.21,-3.13l3.11,-0.91l6.53,0.22l8.66,2.59ZM780.37,145.71l2.28,5.23l-3.09,-0.89l-0.37,0.19l-1.54,4.65l0.04,0.27l2.38,3.17l-0.05,1.4l-1.41,-1.41l-0.46,0.04l-1.23,1.81l-0.33,-1.86l0.28,-3.1l-0.28,-3.41l0.58,-2.46l0.11,-4.39l-0.03,-0.13l-1.44,-3.2l0.21,-4.39l2.19,-1.49l0.09,-0.41l-0.81,-1.3l0.48,-0.21l0.56,1.94l0.86,3.23l-0.05,3.36l1.03,3.35ZM780.16,57.18l-3.4,0.03l-5.06,-0.53l1.97,-1.59l2.95,-0.42l3.35,1.75l0.18,0.77ZM683.84,31.18l-13.29,1.97l4.16,-6.56l1.88,-0.58l1.77,0.34l6.08,3.02l-0.6,1.8ZM670.94,28.02l-5.18,0.65l-6.89,-1.58l-4.03,-2.07l-1.88,-3.98l-0.18,-0.16l-2.8,-0.93l5.91,-3.62l5.25,-1.29l4.73,2.88l5.63,5.44l-0.57,4.66ZM564.37,68.98l-0.85,0.23l-7.93,-0.57l-0.6,-1.84l-0.21,-0.2l-4.34,-1.18l-0.3,-2.08l2.34,-0.92l0.19,-0.29l-0.08,-2.43l4.85,-4.0l-0.12,-0.52l-1.68,-0.43l5.47,-3.94l0.11,-0.33l-0.6,-2.02l5.36,-2.55l8.22,-3.27l8.29,-0.96l4.34,-1.94l4.67,-0.65l1.45,1.72l-1.43,1.37l-8.8,2.52l-7.65,2.42l-7.92,4.84l-3.73,4.75l-3.92,4.58l-0.07,0.23l0.51,3.88l0.11,0.2l4.32,3.39ZM548.86,18.57l-3.28,0.75l-2.25,0.44l-0.22,0.19l-0.3,0.81l-2.67,0.86l-2.27,-1.14l1.2,-1.51l-0.23,-0.49l-3.14,-0.1l2.48,-0.54l3.55,-0.07l0.44,1.36l0.49,0.12l1.4,-1.35l2.2,-0.9l3.13,1.08l-0.54,0.49ZM477.5,133.25l-4.21,0.05l-2.69,-0.34l0.39,-1.03l3.24,-1.06l2.51,0.58l0.85,0.43l-0.2,0.71l-0.0,0.15l0.12,0.52Z", "name": "Russia"}, "RW": {"path": "M497.03,288.12l0.78,1.11l-0.12,1.19l-0.49,0.21l-1.25,-0.15l-0.3,0.16l-0.67,1.24l-1.01,-0.13l0.16,-0.92l0.22,-0.12l0.15,-0.24l0.09,-1.37l0.49,-0.48l0.42,0.18l0.25,-0.01l1.26,-0.65Z", "name": "Rwanda"}, "RS": {"path": "M469.75,168.65l0.21,-0.21l0.36,-1.44l-0.08,-0.29l-1.06,-1.03l0.54,-1.16l-0.28,-0.43l-0.26,0.0l0.55,-0.67l-0.01,-0.39l-0.77,-0.86l-0.45,-0.89l1.56,-0.67l1.39,0.12l1.22,1.1l0.26,0.91l0.16,0.19l1.38,0.66l0.17,1.12l0.14,0.21l1.46,0.9l0.35,-0.03l0.62,-0.54l0.09,0.06l-0.28,0.25l-0.03,0.42l0.29,0.34l-0.44,0.5l-0.07,0.26l0.22,1.12l0.07,0.14l1.02,1.1l-0.81,0.84l-0.42,0.96l0.04,0.3l0.12,0.15l-0.15,0.16l-1.04,0.04l-0.39,0.08l0.33,-0.81l-0.29,-0.41l-0.21,0.01l-0.39,-0.45l-0.13,-0.09l-0.32,-0.11l-0.27,-0.4l-0.14,-0.11l-0.4,-0.16l-0.31,-0.37l-0.34,-0.09l-0.45,0.17l-0.18,0.18l-0.29,0.84l-0.96,-0.65l-0.81,-0.33l-0.32,-0.37l-0.22,-0.18Z", "name": "Republic of Serbia"}, "LT": {"path": "M478.13,133.31l-0.14,-0.63l0.25,-0.88l-0.15,-0.35l-1.17,-0.58l-2.43,-0.57l-0.45,-2.51l2.58,-0.97l4.14,0.22l2.3,-0.32l0.26,0.54l0.22,0.17l1.26,0.22l2.25,1.6l0.19,1.23l-1.87,1.01l-0.14,0.18l-0.54,1.83l-2.54,1.21l-2.18,-0.02l-0.52,-0.91l-0.18,-0.14l-1.11,-0.32Z", "name": "Lithuania"}, "LU": {"path": "M435.95,147.99l0.33,0.49l-0.11,1.07l-0.39,0.04l-0.29,-0.15l0.21,-1.4l0.25,-0.05Z", "name": "Luxembourg"}, "LR": {"path": "M401.37,273.67l-0.32,0.01l-2.48,-1.15l-2.24,-1.89l-2.14,-1.38l-1.47,-1.42l0.44,-0.59l0.05,-0.13l0.12,-0.65l1.07,-1.3l1.08,-1.09l0.52,-0.07l0.43,-0.18l0.84,1.24l-0.15,0.89l0.07,0.25l0.49,0.54l0.22,0.1l0.71,0.01l0.27,-0.16l0.42,-0.83l0.19,0.02l-0.06,0.52l0.23,1.12l-0.5,1.03l0.06,0.35l0.73,0.69l0.14,0.08l0.71,0.15l0.92,0.91l0.06,0.76l-0.17,0.22l-0.06,0.15l-0.17,1.8Z", "name": "Liberia"}, "RO": {"path": "M477.94,155.19l1.02,-0.64l1.49,0.33l1.52,0.01l1.09,0.73l0.32,0.01l0.81,-0.46l1.8,-0.3l0.18,-0.1l0.54,-0.64l0.86,0.0l0.64,0.26l0.71,0.87l0.8,1.35l1.39,1.81l0.07,1.25l-0.26,1.3l0.01,0.15l0.45,1.42l0.15,0.18l1.12,0.57l0.25,0.01l1.05,-0.45l0.86,0.4l0.03,0.43l-0.92,0.51l-0.63,-0.24l-0.4,0.22l-0.64,3.41l-1.12,-0.24l-1.78,-1.09l-0.23,-0.04l-2.95,0.71l-1.25,0.77l-3.55,-0.16l-1.89,-0.47l-0.14,-0.0l-0.75,0.17l-0.61,-1.07l-0.3,-0.36l0.36,-0.32l-0.04,-0.48l-0.62,-0.38l-0.36,0.03l-0.62,0.54l-1.15,-0.71l-0.18,-1.14l-0.17,-0.22l-1.4,-0.67l-0.24,-0.86l-0.09,-0.14l-0.96,-0.87l1.49,-0.44l0.16,-0.11l1.51,-2.14l1.15,-2.09l1.44,-0.63Z", "name": "Romania"}, "GW": {"path": "M383.03,256.73l-1.12,-0.88l-0.14,-0.06l-0.94,-0.15l-0.43,-0.54l0.01,-0.27l-0.13,-0.26l-0.68,-0.48l-0.05,-0.16l0.99,-0.31l0.77,0.08l0.15,-0.02l0.61,-0.26l4.25,0.1l-0.02,0.44l-0.19,0.18l-0.08,0.29l0.17,0.66l-0.17,0.14l-0.44,0.0l-0.16,0.05l-0.57,0.37l-0.66,-0.04l-0.24,0.1l-0.92,1.03Z", "name": "Guinea Bissau"}, "GT": {"path": "M195.13,249.89l-1.05,-0.35l-1.5,-0.04l-1.06,-0.47l-1.19,-0.93l0.04,-0.53l0.27,-0.55l-0.03,-0.31l-0.24,-0.32l1.02,-1.77l3.04,-0.01l0.3,-0.28l0.06,-0.88l-0.19,-0.3l-0.3,-0.11l-0.23,-0.45l-0.11,-0.12l-0.9,-0.58l-0.35,-0.33l0.37,-0.0l0.3,-0.3l0.0,-1.15l4.05,0.02l-0.02,1.74l-0.2,2.89l0.3,0.32l0.67,-0.0l0.75,0.42l0.4,-0.11l-0.62,0.53l-1.17,0.7l-0.13,0.16l-0.18,0.49l0.0,0.21l0.14,0.34l-0.35,0.44l-0.49,0.13l-0.2,0.41l0.03,0.06l-0.27,0.16l-0.86,0.64l-0.12,0.22ZM199.35,245.38l0.07,-0.13l0.05,0.02l-0.13,0.11Z", "name": "Guatemala"}, "GR": {"path": "M487.2,174.55l-0.64,1.54l-0.43,0.24l-1.41,-0.08l-1.28,-0.28l-0.14,0.0l-3.03,0.77l-0.13,0.51l1.39,1.34l-0.78,0.29l-1.2,0.0l-1.23,-1.42l-0.47,0.02l-0.47,0.65l-0.04,0.27l0.56,1.76l0.06,0.11l1.02,1.12l-0.66,0.45l-0.04,0.46l1.39,1.35l1.15,0.79l0.02,1.06l-1.91,-0.63l-0.36,0.42l0.56,1.12l-1.2,0.23l-0.22,0.4l0.8,2.14l-1.15,0.02l-1.89,-1.15l-0.89,-2.19l-0.43,-1.91l-0.05,-0.11l-0.98,-1.35l-1.24,-1.62l-0.13,-0.63l1.07,-1.32l0.06,-0.14l0.13,-0.81l0.68,-0.36l0.16,-0.25l0.03,-0.54l1.4,-0.23l0.12,-0.05l0.87,-0.6l1.26,0.05l0.25,-0.11l0.34,-0.43l0.33,-0.07l1.81,0.08l0.13,-0.02l1.87,-0.77l1.64,0.97l0.19,0.04l2.28,-0.28l0.26,-0.29l0.02,-0.95l0.56,0.36ZM480.44,192.0l1.05,0.74l0.01,0.0l-1.26,-0.23l0.2,-0.51ZM481.76,192.79l1.86,-0.15l1.53,0.17l-0.02,0.19l0.34,0.3l-2.28,0.15l0.01,-0.13l-0.25,-0.31l-1.19,-0.22ZM485.65,193.28l0.65,-0.16l-0.05,0.12l-0.6,0.04Z", "name": "Greece"}, "GQ": {"path": "M444.81,282.04l-0.21,-0.17l0.74,-2.4l3.56,0.05l0.02,2.42l-3.34,-0.02l-0.76,0.13Z", "name": "Equatorial Guinea"}, "GY": {"path": "M271.34,264.25l1.43,0.81l1.44,1.53l0.06,1.19l0.28,0.28l0.84,0.05l2.13,1.92l-0.34,1.93l-1.37,0.59l-0.17,0.34l0.12,0.51l-0.43,1.21l0.03,0.26l1.11,1.82l0.26,0.14l0.56,0.0l0.32,1.29l1.25,1.78l-0.08,0.01l-1.34,-0.21l-0.24,0.06l-0.78,0.64l-1.06,0.41l-0.76,0.1l-0.22,0.15l-0.18,0.32l-0.95,-0.1l-1.38,-1.05l-0.19,-1.13l-0.6,-1.18l0.37,-1.96l0.65,-0.83l0.03,-0.32l-0.57,-1.17l-0.15,-0.14l-0.62,-0.27l0.25,-0.85l-0.08,-0.3l-0.58,-0.58l-0.24,-0.09l-1.15,0.1l-1.41,-1.58l0.48,-0.49l0.09,-0.22l-0.04,-0.92l1.31,-0.34l0.73,-0.52l0.04,-0.44l-0.75,-0.82l0.16,-0.66l1.74,-1.3Z", "name": "Guyana"}, "GE": {"path": "M525.41,174.19l0.26,-0.88l-0.0,-0.17l-0.63,-2.06l-0.1,-0.15l-1.45,-1.12l-0.11,-0.05l-1.31,-0.33l-0.66,-0.69l1.97,0.48l3.65,0.49l3.3,1.41l0.39,0.5l0.33,0.1l1.43,-0.45l2.14,0.58l0.7,1.14l0.13,0.12l1.06,0.47l-0.18,0.11l-0.08,0.43l1.08,1.41l-0.06,0.06l-1.16,-0.15l-1.82,-0.84l-0.31,0.04l-0.55,0.44l-3.29,0.44l-2.32,-1.41l-0.17,-0.04l-2.25,0.12Z", "name": "Georgia"}, "GB": {"path": "M412.82,118.6l-2.31,3.4l-0.0,0.33l0.31,0.13l2.52,-0.49l2.34,0.02l-0.56,2.51l-2.22,3.13l0.22,0.47l2.43,0.21l2.35,4.35l0.17,0.14l1.58,0.51l1.49,3.78l0.73,1.37l0.2,0.15l2.76,0.59l-0.25,1.75l-1.18,0.91l-0.08,0.39l0.87,1.49l-1.96,1.51l-3.31,-0.02l-4.15,0.88l-1.07,-0.59l-0.35,0.04l-1.55,1.44l-2.17,-0.35l-0.22,0.05l-1.61,1.15l-0.78,-0.38l3.31,-3.12l2.18,-0.7l0.21,-0.31l-0.26,-0.27l-3.78,-0.54l-0.48,-0.9l2.3,-0.92l0.13,-0.46l-1.29,-1.71l0.39,-1.83l3.46,0.29l0.32,-0.24l0.37,-1.99l-0.06,-0.24l-1.71,-2.17l-0.18,-0.11l-2.91,-0.58l-0.43,-0.68l0.82,-1.4l-0.03,-0.35l-0.82,-0.97l-0.46,0.01l-0.85,1.05l-0.11,-2.6l-0.05,-0.16l-1.19,-1.7l0.86,-3.53l1.81,-2.75l1.88,0.26l2.38,-0.24ZM406.39,132.84l-1.09,1.92l-1.65,-0.62l-1.26,0.02l0.41,-1.46l0.0,-0.16l-0.42,-1.51l1.62,-0.11l2.39,1.92Z", "name": "United Kingdom"}, "GA": {"path": "M448.76,294.47l-2.38,-2.34l-1.63,-2.04l-1.46,-2.48l0.06,-0.66l0.54,-0.81l0.61,-1.82l0.46,-1.69l0.63,-0.11l3.62,0.03l0.3,-0.3l-0.02,-2.75l0.88,-0.12l1.47,0.32l0.13,0.0l1.39,-0.3l-0.13,0.87l0.03,0.19l0.7,1.29l0.3,0.16l1.74,-0.19l0.36,0.29l-1.01,2.7l0.05,0.29l1.13,1.42l0.25,1.82l-0.3,1.56l-0.64,0.99l-1.93,-0.09l-1.26,-1.13l-0.5,0.17l-0.16,0.91l-1.48,0.27l-0.12,0.05l-0.86,0.63l-0.08,0.39l0.81,1.42l-1.48,1.08Z", "name": "Gabon"}, "GN": {"path": "M399.83,265.31l-0.69,-0.06l-0.3,0.16l-0.43,0.85l-0.39,-0.01l-0.3,-0.33l0.14,-0.87l-0.05,-0.22l-1.05,-1.54l-0.37,-0.11l-0.61,0.27l-0.84,0.12l0.02,-0.54l-0.04,-0.17l-0.35,-0.57l0.07,-0.63l-0.03,-0.17l-0.57,-1.11l-0.7,-0.9l-0.24,-0.12l-2.0,-0.0l-0.19,0.07l-0.51,0.42l-0.6,0.05l-0.21,0.11l-0.43,0.55l-0.3,0.7l-1.04,0.86l-0.91,-1.24l-1.0,-1.02l-0.69,-0.37l-0.52,-0.42l-0.3,-1.11l-0.37,-0.56l-0.1,-0.1l-0.4,-0.23l0.77,-0.85l0.62,0.04l0.18,-0.05l0.58,-0.38l0.46,-0.0l0.19,-0.07l0.39,-0.34l0.1,-0.3l-0.17,-0.67l0.15,-0.14l0.09,-0.2l0.03,-0.57l0.87,0.02l1.76,0.6l0.13,0.01l0.55,-0.06l0.22,-0.13l0.08,-0.12l1.18,0.17l0.17,-0.02l0.09,0.56l0.3,0.25l0.4,-0.0l0.14,-0.03l0.56,-0.29l0.23,0.05l0.63,0.59l0.15,0.07l1.07,0.2l0.24,-0.06l0.65,-0.52l0.77,-0.32l0.55,-0.32l0.3,0.04l0.44,0.45l0.34,0.74l0.84,0.87l-0.35,0.45l-0.06,0.15l-0.1,0.82l0.42,0.31l0.35,-0.16l0.05,0.04l-0.1,0.59l0.09,0.27l0.42,0.4l-0.06,0.02l-0.18,0.21l-0.2,0.86l0.03,0.21l0.56,1.02l0.52,1.71l-0.65,0.21l-0.15,0.12l-0.24,0.35l-0.03,0.28l0.16,0.41l-0.1,0.76l-0.12,0.0Z", "name": "Guinea"}, "GM": {"path": "M379.18,251.48l0.15,-0.55l2.51,-0.07l0.21,-0.09l0.48,-0.52l0.58,-0.03l0.91,0.58l0.16,0.05l0.78,0.01l0.14,-0.03l0.59,-0.31l0.16,0.24l-0.71,0.38l-0.94,-0.04l-1.02,-0.51l-0.3,0.01l-0.86,0.55l-0.37,0.02l-0.14,0.04l-0.53,0.31l-1.81,-0.04Z", "name": "Gambia"}, "GL": {"path": "M304.13,6.6l8.19,-3.63l8.72,0.28l0.19,-0.06l3.12,-2.28l8.75,-0.61l19.94,0.8l14.93,4.75l-3.92,2.01l-9.52,0.27l-13.48,0.6l-0.27,0.2l0.09,0.33l1.26,1.09l0.22,0.07l8.81,-0.67l7.49,2.07l0.19,-0.01l4.68,-1.78l1.76,1.84l-2.59,3.26l-0.01,0.36l0.34,0.11l6.35,-2.2l12.09,-2.32l7.31,1.14l1.17,2.13l-9.9,4.05l-1.43,1.32l-7.91,0.98l-0.26,0.31l0.29,0.29l5.25,0.25l-2.63,3.72l-2.02,3.61l-0.04,0.15l0.08,6.05l0.07,0.19l2.61,3.0l-3.4,0.2l-4.12,1.66l-0.04,0.54l4.5,2.67l0.53,3.9l-2.39,0.42l-0.19,0.48l2.91,3.83l-5.0,0.32l-0.27,0.22l0.12,0.33l2.69,1.84l-0.65,1.35l-3.36,0.71l-3.46,0.01l-0.21,0.51l3.05,3.15l0.02,1.53l-4.54,-1.79l-0.32,0.06l-1.29,1.26l0.11,0.5l3.33,1.15l3.17,2.74l0.85,3.29l-4.0,0.78l-1.83,-1.66l-3.1,-2.64l-0.36,-0.02l-0.13,0.33l0.8,2.92l-2.76,2.26l-0.09,0.33l0.28,0.2l6.59,0.19l2.47,0.18l-5.86,3.38l-6.76,3.43l-7.26,1.48l-2.73,0.02l-0.16,0.05l-2.67,1.72l-3.44,4.42l-5.28,2.86l-1.73,0.18l-3.33,1.01l-3.59,0.96l-0.15,0.1l-2.15,2.52l-0.07,0.19l-0.03,2.76l-1.21,2.49l-4.03,3.1l-0.1,0.33l0.98,2.94l-2.31,6.57l-3.21,0.21l-3.6,-3.0l-0.19,-0.07l-4.9,-0.02l-2.29,-1.97l-1.69,-3.78l-4.31,-4.86l-1.23,-2.52l-0.34,-3.58l-0.08,-0.17l-3.35,-3.67l0.85,-2.92l-0.09,-0.31l-1.5,-1.34l2.33,-4.7l3.67,-1.57l0.15,-0.13l1.02,-1.93l0.52,-3.47l-0.44,-0.31l-2.85,1.57l-1.33,0.64l-2.12,0.59l-2.81,-1.32l-0.15,-2.79l0.88,-2.17l2.09,-0.06l5.07,1.2l0.34,-0.17l-0.11,-0.37l-4.3,-2.9l-2.24,-1.58l-0.25,-0.05l-2.38,0.62l-1.7,-0.93l2.62,-4.1l-0.03,-0.36l-1.51,-1.75l-1.97,-3.3l-3.01,-5.21l-0.1,-0.11l-3.04,-1.85l0.03,-1.94l-0.18,-0.28l-6.82,-3.01l-5.35,-0.38l-6.69,0.21l-6.03,0.37l-2.81,-1.59l-3.84,-2.9l5.94,-1.5l5.01,-0.28l0.28,-0.29l-0.26,-0.31l-10.68,-1.38l-5.38,-2.1l0.27,-1.68l9.3,-2.6l9.18,-2.68l0.19,-0.16l0.97,-2.05l-0.18,-0.42l-6.29,-1.91l1.81,-1.9l8.58,-4.05l3.6,-0.63l0.23,-0.4l-0.92,-2.37l5.59,-1.5l7.66,-0.95l7.58,-0.05l2.65,1.84l0.31,0.02l6.52,-3.29l5.85,2.24l3.55,0.49l5.17,1.95l0.38,-0.16l-0.13,-0.39l-5.77,-3.16l0.29,-2.26Z", "name": "Greenland"}, "KW": {"path": "M540.87,207.81l0.41,0.94l-0.18,0.51l0.0,0.21l0.65,1.66l-1.15,0.05l-0.54,-1.12l-0.24,-0.17l-1.73,-0.2l1.44,-2.06l1.33,0.18Z", "name": "Kuwait"}, "GH": {"path": "M423.16,269.88l-3.58,1.34l-1.41,0.87l-2.13,0.69l-1.91,-0.61l0.09,-0.75l-0.03,-0.17l-1.04,-2.07l0.62,-2.7l1.04,-2.08l0.03,-0.19l-1.0,-5.46l0.05,-1.12l4.04,-0.11l1.08,0.18l0.18,-0.03l0.72,-0.36l0.75,0.13l-0.11,0.48l0.06,0.26l0.98,1.22l-0.0,1.77l0.24,1.99l0.05,0.13l0.55,0.81l-0.52,2.14l0.19,1.37l0.69,1.66l0.38,0.62Z", "name": "Ghana"}, "OM": {"path": "M568.16,231.0l-0.08,0.1l-0.84,1.61l-0.93,-0.11l-0.27,0.11l-0.58,0.73l-0.4,1.32l-0.01,0.14l0.29,1.61l-0.07,0.09l-1.0,-0.01l-0.16,0.04l-1.56,0.97l-0.14,0.2l-0.23,1.17l-0.41,0.4l-1.44,-0.02l-0.17,0.05l-0.98,0.65l-0.13,0.25l0.01,0.87l-0.97,0.57l-1.27,-0.22l-0.19,0.03l-1.63,0.84l-0.88,0.11l-2.55,-5.57l7.2,-2.49l0.19,-0.19l1.67,-5.23l-0.03,-0.25l-1.1,-1.78l0.05,-0.89l0.68,-1.03l0.05,-0.16l0.01,-0.89l0.96,-0.44l0.07,-0.5l-0.32,-0.26l0.16,-1.31l0.85,-0.01l1.03,1.67l0.09,0.09l1.4,0.96l0.11,0.05l1.82,0.34l1.37,0.45l1.75,2.32l0.13,0.1l0.7,0.26l-0.0,0.3l-1.25,2.19l-1.01,0.8ZM561.88,218.47l-0.01,0.02l-0.15,-0.29l0.3,-0.38l-0.14,0.65Z", "name": "Oman"}, "_3": {"path": "M543.2,261.06l-1.07,1.46l-1.65,1.99l-1.91,0.01l-8.08,-2.95l-0.89,-0.84l-0.9,-1.19l-0.81,-1.23l0.44,-0.73l0.76,-1.12l0.49,0.28l0.52,1.05l1.13,1.06l0.2,0.08l1.24,0.01l2.42,-0.65l2.77,-0.31l2.17,-0.78l1.31,-0.19l0.84,-0.43l1.03,-0.06l-0.01,4.54Z", "name": "Somaliland"}, "_2": {"path": "M384.23,230.37l0.07,-0.06l0.28,-0.89l0.99,-1.13l0.07,-0.13l0.8,-3.54l3.4,-2.8l0.09,-0.13l0.76,-2.17l0.07,5.5l-2.07,0.21l-0.24,0.17l-0.61,1.36l-0.02,0.16l0.43,3.46l-4.01,-0.01ZM391.82,218.2l0.07,-0.06l0.75,-1.93l1.86,-0.25l0.94,0.34l1.14,0.0l0.18,-0.06l0.73,-0.56l1.41,-0.08l-0.0,2.72l-7.08,-0.12Z", "name": "Western Sahara"}, "_1": {"path": "M472.71,172.84l-0.07,-0.43l-0.16,-0.22l-0.53,-0.27l-0.38,-0.58l0.3,-0.43l0.51,-0.19l0.18,-0.18l0.3,-0.87l0.12,-0.04l0.22,0.26l0.12,0.09l0.38,0.15l0.28,0.41l0.15,0.12l0.34,0.12l0.43,0.5l0.15,0.07l-0.12,0.3l-0.27,0.32l-0.03,0.18l-0.31,0.06l-1.48,0.47l-0.15,0.17Z", "name": "Kosovo"}, "_0": {"path": "M503.54,192.92l0.09,-0.17l0.41,0.01l-0.08,0.01l-0.42,0.15ZM504.23,192.76l1.02,0.02l0.4,-0.13l-0.09,0.29l0.03,0.08l-0.35,0.16l-0.24,-0.04l-0.06,-0.1l-0.18,-0.17l-0.19,-0.08l-0.33,-0.02Z", "name": "Northern Cyprus"}, "JO": {"path": "M510.26,200.93l0.28,-0.57l2.53,1.0l0.27,-0.02l4.57,-2.77l0.84,2.84l-0.28,0.25l-4.95,1.37l-0.14,0.49l2.24,2.48l-0.5,0.28l-0.13,0.14l-0.35,0.78l-1.76,0.35l-0.2,0.14l-0.57,0.94l-0.94,0.73l-2.45,-0.38l-0.03,-0.12l1.23,-4.32l-0.04,-1.1l0.34,-0.75l0.03,-0.12l0.0,-1.63Z", "name": "Jordan"}, "HR": {"path": "M455.49,162.73l1.53,0.09l0.24,-0.1l0.29,-0.34l0.64,0.38l0.14,0.04l0.98,0.06l0.32,-0.3l-0.01,-0.66l0.67,-0.25l0.19,-0.22l0.21,-1.11l1.72,-0.72l0.65,0.32l1.94,1.37l2.07,0.6l0.22,-0.02l0.67,-0.33l0.47,0.94l0.67,0.76l-0.63,0.77l-0.91,-0.55l-0.16,-0.04l-1.69,0.04l-2.2,-0.51l-1.17,0.07l-0.21,0.11l-0.36,0.42l-0.67,-0.53l-0.46,0.12l-0.52,1.29l0.05,0.31l1.21,1.42l0.58,0.99l1.15,1.14l0.95,0.68l0.92,1.23l0.1,0.09l1.75,0.91l-1.87,-0.89l-1.5,-1.11l-2.23,-0.88l-1.77,-1.9l0.12,-0.06l0.1,-0.47l-1.07,-1.22l-0.04,-0.94l-0.21,-0.27l-1.61,-0.49l-0.35,0.14l-0.53,0.93l-0.41,-0.57l0.04,-0.73Z", "name": "Croatia"}, "HT": {"path": "M237.82,234.68l1.35,0.1l1.95,0.37l0.18,1.15l-0.16,0.83l-0.51,0.37l-0.06,0.44l0.57,0.68l-0.02,0.22l-1.31,-0.35l-1.26,0.17l-1.49,-0.18l-0.15,0.02l-1.03,0.43l-1.02,-0.61l0.09,-0.36l2.04,0.32l1.9,0.21l0.19,-0.05l0.9,-0.58l0.05,-0.47l-1.05,-1.03l0.02,-0.86l-0.23,-0.3l-1.13,-0.29l0.18,-0.23Z", "name": "Haiti"}, "HU": {"path": "M461.96,157.92l0.68,-1.66l-0.03,-0.29l-0.15,-0.22l0.84,-0.0l0.3,-0.26l0.12,-0.84l0.88,0.57l0.98,0.38l0.16,0.01l2.1,-0.39l0.23,-0.21l0.14,-0.45l0.88,-0.1l1.06,-0.43l0.13,0.1l0.28,0.04l1.18,-0.4l0.14,-0.1l0.52,-0.67l0.63,-0.15l2.6,0.95l0.26,-0.03l0.38,-0.23l1.12,0.7l0.1,0.49l-1.31,0.57l-0.14,0.13l-1.18,2.14l-1.44,2.04l-1.85,0.55l-1.51,-0.13l-0.14,0.02l-1.92,0.82l-0.85,0.42l-1.91,-0.55l-1.83,-1.31l-0.74,-0.37l-0.44,-0.97l-0.26,-0.18Z", "name": "Hungary"}, "HN": {"path": "M202.48,251.87l-0.33,-0.62l-0.18,-0.14l-0.5,-0.15l0.13,-0.76l-0.11,-0.28l-0.34,-0.28l-0.6,-0.23l-0.18,-0.01l-0.81,0.22l-0.16,-0.24l-0.72,-0.39l-0.51,-0.48l-0.12,-0.07l-0.31,-0.09l0.24,-0.3l0.04,-0.3l-0.16,-0.4l0.1,-0.28l1.14,-0.69l1.0,-0.86l0.09,0.04l0.3,-0.05l0.47,-0.39l0.49,-0.03l0.14,0.13l0.29,0.06l0.31,-0.1l1.16,0.22l1.24,-0.08l0.81,-0.28l0.29,-0.25l0.63,0.1l0.69,0.18l0.65,-0.06l0.49,-0.2l1.04,0.32l0.38,0.06l0.7,0.44l0.71,0.56l0.92,0.41l0.1,0.11l-0.11,-0.01l-0.23,0.09l-0.3,0.3l-0.76,0.29l-0.58,0.0l-0.15,0.04l-0.45,0.26l-0.31,-0.07l-0.37,-0.34l-0.28,-0.07l-0.26,0.07l-0.18,0.15l-0.23,0.43l-0.04,-0.0l-0.33,0.28l-0.03,0.4l-0.76,0.61l-0.45,0.3l-0.15,0.16l-0.51,-0.36l-0.41,0.06l-0.45,0.56l-0.41,-0.01l-0.59,0.06l-0.27,0.31l0.04,0.96l-0.07,0.0l-0.25,0.16l-0.24,0.45l-0.42,0.06Z", "name": "Honduras"}, "PR": {"path": "M254.95,238.31l1.15,0.21l0.2,0.23l-0.36,0.36l-1.76,-0.01l-1.2,0.07l-0.09,-0.69l0.17,-0.18l1.89,0.01Z", "name": "Puerto Rico"}, "PS": {"path": "M509.66,201.06l-0.0,1.44l-0.29,0.63l-0.59,0.19l0.02,-0.11l0.52,-0.31l-0.02,-0.53l-0.41,-0.2l0.36,-1.28l0.41,0.17Z", "name": "West Bank"}, "PT": {"path": "M398.65,173.6l0.75,-0.63l0.7,-0.3l0.51,1.2l0.28,0.18l1.48,-0.0l0.2,-0.08l0.33,-0.3l1.16,0.08l0.52,1.11l-0.95,0.66l-0.13,0.24l-0.03,2.2l-0.33,0.35l-0.08,0.18l-0.08,1.17l-0.86,0.19l-0.2,0.44l0.93,1.64l-0.64,1.79l0.07,0.31l0.72,0.72l-0.24,0.56l-0.9,1.05l-0.07,0.26l0.17,0.77l-0.73,0.54l-1.18,-0.36l-0.16,-0.0l-0.85,0.21l0.31,-1.81l-0.23,-1.87l-0.23,-0.25l-0.99,-0.24l-0.49,-0.91l0.18,-1.72l0.93,-0.99l0.08,-0.16l0.17,-1.17l0.52,-1.76l-0.04,-1.36l-0.51,-1.14l-0.09,-0.8Z", "name": "Portugal"}, "PY": {"path": "M264.33,341.43l0.93,-2.96l0.07,-1.42l1.1,-2.1l4.19,-0.73l2.22,0.04l2.12,1.21l0.07,0.76l0.7,1.38l-0.16,3.48l0.24,0.31l2.64,0.5l0.19,-0.03l0.9,-0.45l1.47,0.62l0.38,0.64l0.23,2.35l0.3,1.07l0.25,0.21l0.93,0.12l0.16,-0.02l0.8,-0.37l0.61,0.33l-0.0,1.25l-0.33,1.53l-0.5,1.57l-0.39,2.26l-2.14,1.94l-1.85,0.4l-2.74,-0.4l-2.13,-0.62l2.26,-3.75l0.03,-0.24l-0.36,-1.18l-0.17,-0.19l-2.55,-1.03l-3.04,-1.95l-2.07,-0.43l-4.4,-4.12Z", "name": "Paraguay"}, "PA": {"path": "M213.65,263.79l0.18,-0.43l0.02,-0.18l-0.06,-0.28l0.23,-0.18l-0.01,-0.48l-0.4,-0.29l-0.01,-0.62l0.57,-0.13l0.68,0.69l-0.04,0.39l0.26,0.33l1.0,0.11l0.27,-0.1l0.49,0.44l0.24,0.07l1.34,-0.22l1.04,-0.62l1.49,-0.5l0.86,-0.73l0.99,0.11l0.18,0.28l1.35,0.08l1.02,0.4l0.78,0.72l0.71,0.53l-0.1,0.12l-0.05,0.3l0.53,1.34l-0.28,0.44l-0.6,-0.13l-0.36,0.22l-0.2,0.76l-0.41,-0.36l-0.44,-1.12l0.49,-0.53l-0.14,-0.49l-0.51,-0.14l-0.41,-0.72l-0.11,-0.11l-1.25,-0.7l-0.19,-0.04l-1.1,0.16l-0.22,0.15l-0.47,0.81l-0.9,0.56l-0.49,0.08l-0.22,0.17l-0.25,0.52l0.05,0.32l0.93,1.07l-0.41,0.21l-0.29,0.3l-0.81,0.09l-0.36,-1.26l-0.53,-0.1l-0.21,0.28l-0.5,-0.09l-0.44,-0.88l-0.22,-0.16l-0.99,-0.16l-0.61,-0.28l-0.13,-0.03l-1.0,0.0Z", "name": "Panama"}, "PG": {"path": "M808.4,298.6l0.62,0.46l1.19,1.56l1.04,0.77l-0.18,0.37l-0.42,0.15l-0.92,-0.82l-1.05,-1.53l-0.27,-0.96ZM804.09,296.06l-0.3,0.26l-0.36,-1.11l-0.66,-1.06l-2.55,-1.89l-1.42,-0.59l0.17,-0.15l1.16,0.6l0.85,0.55l1.01,0.58l0.97,1.02l0.9,0.76l0.24,1.03ZM796.71,297.99l0.15,0.82l0.34,0.24l1.43,-0.19l0.19,-0.11l0.68,-0.82l1.36,-0.87l0.13,-0.31l-0.21,-1.13l1.04,-0.03l0.3,0.25l-0.04,1.17l-0.74,1.34l-1.17,0.18l-0.22,0.15l-0.35,0.62l-2.51,1.13l-1.21,-0.0l-1.99,-0.71l-1.19,-0.58l0.07,-0.28l1.98,0.32l1.46,-0.2l0.24,-0.21l0.25,-0.79ZM789.24,303.52l0.11,0.15l2.19,1.62l1.6,2.62l0.27,0.14l1.09,-0.06l-0.07,0.77l0.23,0.32l1.23,0.27l-0.14,0.09l0.05,0.53l2.39,0.95l-0.11,0.28l-1.33,0.14l-0.51,-0.55l-0.18,-0.09l-4.59,-0.65l-1.87,-1.55l-1.38,-1.35l-1.28,-2.17l-0.16,-0.13l-3.27,-1.1l-0.19,0.0l-2.12,0.72l-1.58,0.85l-0.15,0.31l0.28,1.63l-1.65,0.73l-1.37,-0.4l-2.3,-0.09l-0.08,-15.65l3.95,1.57l4.58,1.42l1.67,1.25l1.32,1.19l0.36,1.39l0.19,0.21l4.06,1.51l0.39,0.85l-1.9,0.22l-0.25,0.39l0.55,1.68Z", "name": "Papua New Guinea"}, "PE": {"path": "M246.44,329.21l-0.63,1.25l-1.05,0.54l-2.25,-1.33l-0.19,-0.93l-0.16,-0.21l-4.95,-2.58l-4.46,-2.79l-1.87,-1.52l-0.94,-1.91l0.33,-0.6l-0.01,-0.31l-2.11,-3.33l-2.46,-4.66l-2.36,-5.02l-1.04,-1.18l-0.77,-1.81l-0.08,-0.11l-1.95,-1.64l-1.54,-0.88l0.61,-0.85l0.02,-0.31l-1.15,-2.27l0.69,-1.56l1.59,-1.26l0.12,0.42l-0.56,0.47l-0.11,0.25l0.07,0.92l0.36,0.27l0.97,-0.19l0.85,0.23l0.99,1.19l0.41,0.05l1.42,-1.03l0.11,-0.16l0.46,-1.64l1.45,-2.06l2.92,-0.96l0.11,-0.07l2.73,-2.62l0.84,-1.72l0.02,-0.18l-0.3,-1.65l0.28,-0.1l1.49,1.06l0.77,1.14l0.1,0.09l1.08,0.6l1.43,2.55l0.21,0.15l1.86,0.31l0.18,-0.03l1.25,-0.6l0.77,0.37l0.17,0.03l1.4,-0.2l1.57,0.96l-1.45,2.29l0.23,0.46l0.63,0.05l0.66,0.7l-1.51,-0.08l-0.24,0.1l-0.27,0.31l-1.96,0.46l-2.95,1.74l-0.14,0.21l-0.17,1.1l-0.6,0.82l-0.05,0.23l0.21,1.13l-1.31,0.63l-0.17,0.27l0.0,0.91l-0.53,0.37l-0.1,0.37l1.04,2.27l1.31,1.46l-0.44,0.9l0.24,0.43l1.52,0.13l0.87,1.23l0.24,0.13l2.21,0.07l0.18,-0.06l1.55,-1.13l-0.14,3.22l0.23,0.3l1.14,0.29l0.16,-0.0l1.18,-0.36l1.97,3.71l-0.45,0.71l-0.04,0.14l-0.12,1.8l-0.05,2.07l-0.92,1.2l-0.03,0.31l0.38,0.8l-0.48,0.72l-0.02,0.3l1.01,2.02l-1.5,2.64Z", "name": "Peru"}, "PK": {"path": "M609.08,187.76l1.66,1.21l0.71,2.11l0.2,0.19l3.62,1.01l-1.98,1.95l-2.65,0.4l-3.75,-0.68l-0.26,0.08l-1.23,1.22l-0.07,0.31l0.89,2.46l0.88,1.92l0.1,0.12l1.67,1.14l-1.8,1.35l-0.12,0.25l0.04,1.85l-2.35,2.67l-1.59,2.79l-2.5,2.72l-2.76,-0.2l-0.24,0.09l-2.76,2.83l0.04,0.45l1.54,1.13l0.27,1.94l0.09,0.17l1.34,1.29l0.4,1.83l-5.14,-0.01l-0.22,0.09l-1.53,1.63l-1.52,-0.56l-0.76,-1.88l-1.93,-2.03l-0.25,-0.09l-4.6,0.5l-4.05,0.05l-3.1,0.33l0.77,-2.53l3.48,-1.33l0.19,-0.33l-0.21,-1.24l-0.19,-0.23l-1.01,-0.37l-0.06,-2.18l-0.17,-0.26l-2.32,-1.16l-0.96,-1.57l-0.56,-0.65l3.16,1.05l0.14,0.01l2.45,-0.4l1.44,0.33l0.3,-0.1l0.4,-0.47l1.58,0.22l0.14,-0.01l3.25,-1.14l0.2,-0.27l0.08,-2.23l1.23,-1.38l1.73,0.0l0.28,-0.2l0.22,-0.61l1.68,-0.32l0.86,0.24l0.27,-0.05l0.98,-0.78l0.11,-0.26l-0.13,-1.57l0.96,-1.52l1.51,-0.67l0.14,-0.41l-0.74,-1.4l1.86,0.07l0.26,-0.13l0.69,-1.01l0.05,-0.2l-0.09,-0.94l1.14,-1.09l0.09,-0.28l-0.29,-1.41l-0.51,-1.07l1.23,-1.05l2.6,-0.58l2.86,-0.33l1.33,-0.54l1.3,-0.29Z", "name": "Pakistan"}, "PH": {"path": "M737.11,263.82l0.25,1.66l0.14,1.34l-0.54,1.46l-0.64,-1.79l-0.5,-0.1l-1.17,1.28l-0.05,0.32l0.74,1.71l-0.49,0.81l-2.6,-1.28l-0.61,-1.57l0.68,-1.07l-0.07,-0.4l-1.59,-1.19l-0.42,0.06l-0.69,0.91l-1.01,-0.08l-0.21,0.06l-1.58,1.2l-0.17,-0.3l0.87,-1.88l1.48,-0.66l1.18,-0.81l0.71,0.92l0.34,0.1l1.9,-0.69l0.18,-0.18l0.34,-0.94l1.57,-0.06l0.29,-0.32l-0.1,-1.38l1.41,0.83l0.36,2.06ZM734.94,254.42l0.56,2.24l-1.41,-0.49l-0.4,0.3l0.07,0.94l0.51,1.3l-0.54,0.26l-0.08,-1.34l-0.25,-0.28l-0.56,-0.1l-0.23,-0.91l1.03,0.14l0.34,-0.31l-0.03,-0.96l-0.06,-0.18l-1.14,-1.44l1.62,0.04l0.57,0.78ZM724.68,238.33l1.48,0.71l0.33,-0.04l0.44,-0.38l0.05,0.13l-0.37,0.97l0.01,0.23l0.81,1.75l-0.59,1.92l-1.37,0.79l-0.14,0.2l-0.39,2.07l0.01,0.14l0.56,2.04l0.23,0.21l1.33,0.28l0.14,-0.0l1.0,-0.27l2.82,1.28l-0.2,1.16l0.12,0.29l0.66,0.5l-0.13,0.56l-1.54,-0.99l-0.89,-1.29l-0.49,0.0l-0.44,0.65l-1.34,-1.28l-0.26,-0.08l-2.18,0.36l-0.96,-0.44l0.09,-0.72l0.69,-0.57l-0.01,-0.47l-0.75,-0.59l-0.47,0.14l-0.15,0.43l-0.86,-1.02l-0.34,-1.02l-0.07,-1.74l0.49,0.41l0.49,-0.21l0.26,-3.99l0.73,-2.1l1.23,0.0ZM731.12,258.92l-0.82,0.75l-0.83,1.64l-0.52,0.5l-1.17,-1.33l0.36,-0.47l0.62,-0.7l0.07,-0.15l0.24,-1.35l0.73,-0.08l-0.31,1.29l0.16,0.34l0.37,-0.09l1.21,-1.6l-0.12,1.24ZM726.66,255.58l0.85,0.45l0.14,0.03l1.28,-0.0l-0.03,0.62l-1.04,0.96l-1.15,0.55l-0.05,-0.71l0.17,-1.26l-0.01,-0.13l-0.16,-0.51ZM724.92,252.06l-0.45,1.5l-0.7,-0.83l-0.95,-1.43l1.44,0.06l0.67,0.7ZM717.48,261.28l-1.87,1.35l0.21,-0.3l1.81,-1.57l1.5,-1.75l0.97,-1.84l0.23,1.08l-1.56,1.33l-1.29,1.7Z", "name": "Philippines"}, "PL": {"path": "M458.8,144.25l-0.96,-1.98l0.18,-1.06l-0.01,-0.15l-0.62,-1.8l-0.82,-1.11l0.56,-0.73l0.05,-0.28l-0.51,-1.51l1.48,-0.87l3.88,-1.58l3.06,-1.14l2.23,0.52l0.15,0.66l0.29,0.23l2.4,0.04l3.11,0.39l4.56,-0.05l1.12,0.32l0.51,0.89l0.1,1.45l0.03,0.12l0.66,1.23l-0.01,1.08l-1.33,0.61l-0.14,0.41l0.74,1.5l0.07,1.53l1.22,2.79l-0.19,0.66l-1.09,0.33l-0.14,0.09l-2.27,2.72l-0.04,0.31l0.35,0.8l-2.22,-1.16l-0.21,-0.02l-1.72,0.44l-1.1,-0.31l-0.21,0.02l-1.3,0.61l-1.11,-1.02l-0.32,-0.05l-0.81,0.35l-1.15,-1.61l-0.21,-0.12l-1.65,-0.17l-0.19,-0.82l-0.23,-0.23l-1.72,-0.37l-0.34,0.17l-0.25,0.56l-0.88,-0.44l0.12,-0.69l-0.25,-0.35l-1.78,-0.27l-1.08,-0.97Z", "name": "Poland"}, "ZM": {"path": "M502.81,308.32l1.09,1.04l0.58,1.94l-0.39,0.66l-0.5,2.05l-0.0,0.14l0.45,1.95l-0.69,0.77l-0.06,0.11l-0.76,2.37l0.15,0.36l0.62,0.31l-6.85,1.9l-0.22,0.33l0.2,1.54l-1.62,0.3l-0.12,0.05l-1.43,1.02l-0.11,0.15l-0.25,0.73l-0.73,0.17l-0.14,0.08l-2.18,2.12l-1.33,1.6l-0.65,0.05l-0.83,-0.29l-2.75,-0.28l-0.24,-0.1l-0.15,-0.27l-0.99,-0.58l-0.12,-0.04l-1.73,-0.14l-1.88,0.54l-1.5,-1.48l-1.61,-2.01l0.11,-7.73l4.92,0.03l0.29,-0.37l-0.19,-0.79l0.34,-0.86l0.0,-0.21l-0.41,-1.11l0.26,-1.14l-0.01,-0.16l-0.12,-0.36l0.18,0.01l0.1,0.56l0.31,0.25l1.14,-0.06l1.44,0.21l0.76,1.05l0.19,0.12l2.01,0.35l0.19,-0.03l1.24,-0.65l0.44,1.03l0.22,0.18l1.81,0.34l0.85,0.99l1.02,1.39l0.24,0.12l1.92,0.02l0.3,-0.32l-0.21,-2.74l-0.47,-0.23l-0.53,0.36l-1.58,-0.89l-0.51,-0.34l0.29,-2.36l0.44,-2.99l-0.03,-0.18l-0.5,-0.99l0.61,-1.38l0.53,-0.24l3.26,-0.41l0.89,0.23l1.01,0.62l1.04,0.44l1.6,0.43l1.35,0.72Z", "name": "Zambia"}, "EE": {"path": "M482.19,120.88l0.23,-1.68l-0.43,-0.31l-0.75,0.37l-1.34,-1.1l-0.18,-1.75l2.92,-0.95l3.07,-0.53l2.66,0.6l2.48,-0.1l0.18,0.31l-1.65,1.96l-0.06,0.26l0.71,3.25l-0.88,0.94l-1.85,-0.01l-2.08,-1.3l-1.14,-0.47l-0.2,-0.01l-1.69,0.51Z", "name": "Estonia"}, "EG": {"path": "M508.07,208.8l-0.66,1.06l-0.53,2.03l-0.64,1.32l-0.32,0.26l-1.74,-1.85l-1.77,-3.86l-0.48,-0.09l-0.26,0.25l-0.07,0.32l1.04,2.88l1.55,2.76l1.89,4.18l0.94,1.48l0.83,1.54l2.08,2.73l-0.3,0.28l-0.1,0.23l0.08,1.72l0.11,0.22l2.91,2.37l-28.78,0.0l0.0,-19.06l-0.73,-2.2l0.61,-1.59l0.0,-0.2l-0.34,-1.04l0.73,-1.08l3.13,-0.04l2.36,0.72l2.48,0.81l1.15,0.43l0.23,-0.01l1.93,-0.87l1.02,-0.78l2.08,-0.21l1.59,0.31l0.62,1.24l0.52,0.03l0.46,-0.71l1.86,0.59l1.95,0.16l0.17,-0.04l0.92,-0.52l1.48,4.24Z", "name": "Egypt"}, "ZA": {"path": "M467.06,373.27l-0.13,-0.29l0.01,-1.58l-0.02,-0.12l-0.71,-1.64l0.59,-0.37l0.14,-0.26l-0.07,-2.13l-0.05,-0.15l-1.63,-2.58l-1.25,-2.31l-1.71,-3.37l0.88,-0.98l0.7,0.52l0.39,1.08l0.23,0.19l1.1,0.19l1.55,0.51l0.14,0.01l1.35,-0.2l0.11,-0.04l2.24,-1.39l0.14,-0.25l0.0,-9.4l0.16,0.09l1.39,2.38l-0.22,1.53l0.04,0.19l0.56,0.94l0.3,0.14l1.79,-0.27l0.16,-0.08l1.23,-1.18l1.17,-0.79l0.1,-0.12l0.57,-1.19l1.02,-0.52l0.9,0.28l1.16,0.73l0.14,0.05l2.04,0.13l0.13,-0.02l1.6,-0.62l0.18,-0.19l0.63,-1.93l1.18,-0.19l0.19,-0.12l0.78,-1.05l0.81,-1.71l2.18,-1.91l3.44,-1.88l0.89,0.02l1.17,0.43l0.21,-0.0l0.76,-0.29l1.07,0.21l1.15,3.55l0.63,1.82l-0.44,2.9l0.1,0.52l-0.74,-0.29l-0.18,-0.01l-0.72,0.19l-0.21,0.2l-0.22,0.74l-0.66,0.97l-0.05,0.18l0.02,0.93l0.09,0.21l1.49,1.46l0.27,0.08l1.47,-0.29l0.22,-0.18l0.43,-1.01l1.29,0.02l-0.51,1.63l-0.29,2.2l-0.59,1.12l-2.2,1.78l-1.06,1.39l-0.72,1.44l-1.39,1.93l-2.81,2.84l-1.75,1.65l-1.85,1.24l-2.55,1.06l-1.23,0.14l-0.24,0.18l-0.22,0.54l-1.27,-0.35l-0.2,0.01l-1.15,0.5l-2.62,-0.52l-0.12,0.0l-1.46,0.33l-0.98,-0.14l-0.16,0.02l-2.55,1.1l-2.11,0.44l-1.59,1.07l-0.93,0.06l-0.97,-0.92l-0.19,-0.08l-0.72,-0.04l-1.0,-1.16l-0.25,0.05ZM493.72,359.24l-1.12,-0.86l-0.31,-0.03l-1.23,0.59l-1.36,1.07l-1.39,1.78l0.01,0.38l1.88,2.11l0.31,0.09l0.9,-0.27l0.18,-0.15l0.4,-0.77l1.28,-0.39l0.18,-0.16l0.42,-0.88l0.76,-1.32l-0.05,-0.37l-0.87,-0.82Z", "name": "South Africa"}, "EC": {"path": "M220.2,293.48l1.25,-1.76l0.02,-0.31l-0.54,-1.09l-0.5,-0.06l-0.78,0.94l-1.03,-0.75l0.33,-0.46l0.05,-0.23l-0.38,-2.04l0.66,-0.28l0.17,-0.19l0.45,-1.52l0.93,-1.58l0.04,-0.2l-0.13,-0.78l1.19,-0.47l1.57,-0.91l2.35,1.34l0.17,0.04l0.28,-0.02l0.52,0.91l0.21,0.15l2.12,0.35l0.2,-0.03l0.55,-0.31l1.08,0.73l0.97,0.54l0.31,1.67l-0.71,1.49l-2.64,2.54l-2.95,0.97l-0.15,0.11l-1.53,2.18l-0.49,1.68l-1.1,0.8l-0.87,-1.05l-0.15,-0.1l-1.01,-0.27l-0.13,-0.0l-0.7,0.14l-0.03,-0.43l0.6,-0.5l0.1,-0.31l-0.26,-0.91Z", "name": "Ecuador"}, "AL": {"path": "M470.27,171.7l0.38,0.19l0.45,-0.18l0.4,0.61l0.11,0.1l0.46,0.24l0.13,0.87l-0.3,0.95l-0.0,0.17l0.36,1.28l0.12,0.17l0.9,0.63l-0.03,0.44l-0.67,0.35l-0.16,0.22l-0.14,0.88l-0.96,1.18l-0.06,-0.03l-0.04,-0.48l-0.12,-0.22l-1.28,-0.92l-0.19,-1.25l0.2,-1.96l0.33,-0.89l-0.06,-0.3l-0.36,-0.41l-0.13,-0.75l0.66,-0.9Z", "name": "Albania"}, "AO": {"path": "M461.62,299.93l0.55,1.67l0.73,1.54l1.56,2.18l0.28,0.12l1.66,-0.2l0.81,-0.34l1.28,0.33l0.33,-0.14l0.39,-0.67l0.56,-1.3l1.37,-0.09l0.27,-0.21l0.07,-0.23l0.67,-0.01l-0.13,0.53l0.29,0.37l2.74,-0.02l0.04,1.29l0.03,0.13l0.46,0.87l-0.35,1.52l0.18,1.55l0.07,0.16l0.75,0.85l-0.13,2.89l0.41,0.29l0.56,-0.21l1.11,0.05l1.5,-0.37l0.9,0.12l0.18,0.53l-0.27,1.15l0.01,0.17l0.4,1.08l-0.33,0.85l-0.01,0.18l0.12,0.51l-4.83,-0.03l-0.3,0.3l-0.12,8.13l0.07,0.19l1.69,2.1l1.27,1.25l-4.03,0.92l-5.93,-0.36l-1.66,-1.19l-0.18,-0.06l-10.15,0.11l-0.34,0.13l-1.35,-1.05l-0.17,-0.06l-1.62,-0.08l-1.6,0.45l-0.88,0.36l-0.17,-1.2l0.34,-2.19l0.85,-2.32l0.14,-1.13l0.79,-2.24l0.57,-1.0l1.42,-1.64l0.82,-1.15l0.05,-0.13l0.26,-1.88l-0.13,-1.51l-0.07,-0.16l-0.72,-0.87l-1.23,-2.91l0.09,-0.37l0.73,-0.95l0.05,-0.27l-1.27,-4.12l-1.19,-1.54l0.1,-0.2l0.86,-0.28l0.78,0.03l0.83,-0.29l7.12,0.03ZM451.81,298.94l-0.17,0.07l-0.5,-1.42l0.85,-0.92l0.53,-0.29l0.48,0.44l-0.56,0.32l-0.1,0.1l-0.41,0.65l-0.05,0.14l-0.07,0.91Z", "name": "Angola"}, "KZ": {"path": "M598.42,172.08l-1.37,0.54l-3.3,2.09l-0.11,0.12l-1.01,1.97l-0.56,0.01l-0.6,-1.24l-0.26,-0.17l-2.95,-0.09l-0.46,-2.22l-0.29,-0.24l-0.91,-0.02l0.17,-2.72l-0.12,-0.26l-3.0,-2.22l-0.2,-0.06l-4.29,0.24l-2.8,0.42l-2.36,-2.7l-6.4,-3.65l-0.23,-0.03l-6.45,1.83l-0.22,0.29l0.1,10.94l-0.84,0.1l-1.65,-2.21l-0.11,-0.09l-1.69,-0.84l-0.2,-0.02l-2.84,0.63l-0.14,0.07l-0.71,0.64l-0.02,-0.11l0.57,-1.17l0.0,-0.26l-0.48,-1.05l-0.17,-0.16l-2.78,-0.99l-1.08,-2.62l-0.13,-0.15l-1.24,-0.7l-0.04,-0.48l2.07,0.25l0.34,-0.29l0.09,-2.03l1.84,-0.44l2.12,0.45l0.36,-0.25l0.45,-3.04l-0.45,-2.06l-0.31,-0.23l-2.44,0.15l-2.07,-0.75l-0.23,0.01l-2.88,1.38l-2.21,0.62l-0.96,-0.38l0.22,-1.39l-0.06,-0.23l-1.6,-2.12l-0.25,-0.12l-1.72,0.08l-1.87,-1.91l1.33,-2.24l-0.06,-0.38l-0.55,-0.5l1.72,-3.08l2.3,1.7l0.48,-0.2l0.29,-2.26l4.99,-3.48l3.76,-0.08l5.46,2.27l2.96,1.33l0.26,-0.01l2.59,-1.36l3.82,-0.06l3.13,1.67l0.38,-0.09l0.63,-0.85l3.36,0.14l0.29,-0.19l0.63,-1.57l-0.13,-0.37l-3.64,-2.05l2.0,-1.36l0.1,-0.38l-0.32,-0.62l2.09,-0.76l0.13,-0.47l-1.65,-2.13l0.89,-0.91l9.27,-1.18l0.13,-0.05l1.17,-0.82l6.2,-1.27l2.26,-1.43l4.19,0.7l0.74,3.39l0.38,0.22l2.52,-0.81l2.9,1.06l-0.18,1.63l0.32,0.33l2.52,-0.23l5.0,-2.58l0.03,0.39l3.16,2.62l5.57,8.48l0.49,0.02l1.18,-1.53l3.22,1.78l0.21,0.03l3.5,-0.83l1.21,0.52l1.16,1.82l0.15,0.12l1.67,0.61l1.01,1.32l0.28,0.11l3.04,-0.41l1.1,1.64l-1.68,1.89l-1.97,0.28l-0.26,0.29l-0.12,3.09l-1.2,1.23l-4.81,-1.01l-0.35,0.2l-1.77,5.51l-1.14,0.62l-4.92,1.23l-0.2,0.41l2.14,5.06l-1.45,0.67l-0.17,0.31l0.15,1.28l-1.05,-0.3l-1.21,-1.04l-0.17,-0.07l-3.73,-0.32l-4.15,-0.08l-0.92,0.31l-3.46,-1.24l-0.22,0.01l-1.42,0.63l-0.17,0.21l-0.32,1.49l-3.82,-0.97l-0.15,0.0l-1.65,0.43l-0.2,0.17l-0.51,1.21Z", "name": "Kazakhstan"}, "ET": {"path": "M516.0,247.63l1.21,0.92l0.3,0.04l1.3,-0.53l0.46,0.41l0.19,0.08l1.65,0.03l2.05,0.96l0.67,0.88l1.07,0.79l1.0,1.45l0.7,0.68l-0.72,0.92l-0.85,1.19l-0.04,0.25l0.19,0.67l0.04,0.74l0.29,0.28l1.4,0.04l0.55,-0.15l0.23,0.19l-0.41,0.67l0.01,0.32l0.92,1.39l0.93,1.23l0.99,0.94l0.1,0.06l8.19,2.99l1.51,0.01l-6.51,6.95l-3.14,0.11l-0.18,0.06l-2.15,1.71l-1.51,0.04l-0.22,0.1l-0.6,0.69l-1.46,-0.0l-0.93,-0.78l-0.32,-0.04l-2.29,1.05l-0.12,0.1l-0.64,0.9l-1.44,-0.17l-0.51,-0.26l-0.17,-0.03l-0.56,0.07l-0.68,-0.02l-3.1,-2.08l-0.17,-0.05l-1.62,0.0l-0.68,-0.65l0.0,-1.28l-0.21,-0.29l-1.19,-0.38l-1.42,-2.63l-0.13,-0.12l-1.05,-0.53l-0.46,-1.0l-1.27,-1.23l-0.17,-0.08l-1.08,-0.13l0.53,-0.9l1.17,-0.05l0.26,-0.17l0.37,-0.77l0.03,-0.14l-0.03,-2.23l0.7,-2.49l1.08,-0.65l0.14,-0.19l0.24,-1.0l1.03,-1.85l1.47,-1.22l0.09,-0.12l1.02,-2.51l0.36,-1.96l2.62,0.48l0.33,-0.18l0.63,-1.55Z", "name": "Ethiopia"}, "ZW": {"path": "M498.95,341.2l-1.16,-0.23l-0.16,0.01l-0.74,0.28l-1.11,-0.41l-1.02,-0.04l-1.52,-1.13l-0.12,-0.05l-1.79,-0.37l-0.65,-1.46l-0.01,-0.86l-0.22,-0.29l-0.99,-0.26l-2.74,-2.77l-0.77,-1.46l-0.52,-0.5l-0.72,-1.54l2.24,0.23l0.78,0.28l0.12,0.02l0.85,-0.06l0.21,-0.11l1.38,-1.66l2.11,-2.05l0.81,-0.18l0.22,-0.2l0.27,-0.8l1.29,-0.93l1.53,-0.28l0.11,0.66l0.3,0.25l2.02,-0.05l1.04,0.48l0.5,0.59l0.18,0.1l1.13,0.18l1.11,0.7l0.01,3.06l-0.49,1.82l-0.11,1.94l0.03,0.16l0.35,0.68l-0.24,1.3l-0.27,0.17l-0.12,0.15l-0.64,1.83l-2.49,2.8Z", "name": "Zimbabwe"}, "ES": {"path": "M398.67,172.8l0.09,-1.45l-0.06,-0.2l-0.82,-1.05l3.16,-1.96l3.01,0.54l3.33,-0.02l2.64,0.52l2.14,-0.15l3.9,0.1l0.91,1.08l0.14,0.09l4.61,1.38l0.26,-0.04l0.77,-0.55l2.66,1.29l0.17,0.03l2.59,-0.35l0.1,1.28l-2.2,1.85l-3.13,0.62l-0.23,0.23l-0.21,0.92l-1.54,1.68l-0.97,2.4l0.02,0.26l0.85,1.46l-1.27,1.14l-0.09,0.14l-0.5,1.73l-1.73,0.53l-0.15,0.1l-1.68,2.1l-3.03,0.04l-2.38,-0.05l-0.17,0.05l-1.57,1.01l-0.9,1.01l-0.96,-0.19l-0.82,-0.86l-0.69,-1.6l-0.22,-0.18l-2.14,-0.41l-0.13,-0.62l0.83,-0.97l0.39,-0.86l-0.06,-0.33l-0.73,-0.73l0.63,-1.74l-0.02,-0.25l-0.8,-1.41l0.69,-0.15l0.23,-0.27l0.09,-1.29l0.33,-0.36l0.08,-0.2l0.03,-2.16l1.03,-0.72l0.1,-0.37l-0.7,-1.5l-0.25,-0.17l-1.46,-0.11l-0.22,0.07l-0.34,0.3l-1.17,0.0l-0.55,-1.29l-0.39,-0.16l-1.02,0.44l-0.45,0.36Z", "name": "Spain"}, "ER": {"path": "M527.15,253.05l-0.77,-0.74l-1.01,-1.47l-1.14,-0.86l-0.62,-0.84l-0.11,-0.09l-2.18,-1.02l-0.12,-0.03l-1.61,-0.03l-0.52,-0.46l-0.31,-0.05l-1.31,0.54l-1.38,-1.06l-0.46,0.12l-0.69,1.68l-2.49,-0.46l-0.2,-0.76l1.06,-3.69l0.24,-1.65l0.66,-0.66l1.76,-0.4l0.16,-0.1l0.97,-1.13l1.24,2.55l0.68,2.34l0.09,0.14l1.4,1.27l3.39,2.4l1.37,1.43l2.14,2.34l0.94,0.6l-0.32,0.26l-0.85,-0.17Z", "name": "Eritrea"}, "ME": {"path": "M469.05,172.9l-0.57,-0.8l-0.1,-0.09l-0.82,-0.46l0.16,-0.33l0.35,-1.57l0.72,-0.62l0.27,-0.16l0.48,0.38l0.35,0.4l0.12,0.08l0.79,0.32l0.66,0.43l-0.43,0.62l-0.28,0.11l-0.07,-0.25l-0.53,-0.1l-1.09,1.49l-0.05,0.23l0.06,0.32Z", "name": "Montenegro"}, "MD": {"path": "M488.2,153.75l0.14,-0.11l1.49,-0.28l1.75,0.95l1.06,0.14l0.92,0.7l-0.15,0.9l0.15,0.31l0.8,0.46l0.33,1.2l0.09,0.14l0.72,0.66l-0.11,0.28l0.1,0.33l-0.06,0.02l-1.25,-0.08l-0.17,-0.29l-0.39,-0.12l-0.52,0.25l-0.16,0.36l0.13,0.42l-0.6,0.88l-0.43,1.03l-0.22,0.12l-0.32,-1.0l0.25,-1.34l-0.08,-1.38l-0.06,-0.17l-1.43,-1.87l-0.81,-1.36l-0.78,-0.95l-0.12,-0.09l-0.29,-0.12Z", "name": "Moldova"}, "MG": {"path": "M544.77,316.45l0.64,1.04l0.6,1.62l0.4,3.04l0.63,1.21l-0.22,1.07l-0.15,0.26l-0.59,-1.05l-0.52,-0.01l-0.47,0.76l-0.04,0.23l0.46,1.84l-0.19,0.92l-0.61,0.53l-0.1,0.21l-0.16,2.15l-0.97,2.98l-1.24,3.59l-1.55,4.97l-0.96,3.67l-1.08,2.93l-1.94,0.61l-2.05,1.06l-3.2,-1.53l-0.62,-1.26l-0.18,-2.39l-0.87,-2.07l-0.22,-1.8l0.4,-1.69l1.01,-0.4l0.19,-0.28l0.01,-0.79l1.15,-1.91l0.04,-0.11l0.23,-1.66l-0.03,-0.17l-0.57,-1.21l-0.46,-1.58l-0.19,-2.25l0.82,-1.36l0.33,-1.51l1.11,-0.1l1.4,-0.53l0.9,-0.45l1.03,-0.03l0.21,-0.09l1.41,-1.45l2.12,-1.65l0.75,-1.29l0.03,-0.24l-0.17,-0.56l0.53,0.15l0.32,-0.1l1.38,-1.77l0.06,-0.18l0.04,-1.44l0.54,-0.74l0.62,0.77Z", "name": "Madagascar"}, "MA": {"path": "M378.66,230.13l0.07,-0.75l0.93,-0.72l0.82,-1.37l0.04,-0.21l-0.14,-0.8l0.8,-1.74l1.33,-1.61l0.79,-0.4l0.14,-0.15l0.66,-1.55l0.08,-1.46l0.83,-1.52l1.6,-0.94l0.11,-0.11l1.56,-2.71l1.2,-0.99l2.24,-0.29l0.17,-0.08l1.95,-1.83l1.3,-0.77l2.09,-2.28l0.07,-0.26l-0.61,-3.34l0.92,-2.3l0.33,-1.44l1.52,-1.79l2.48,-1.27l1.86,-1.16l0.1,-0.11l1.67,-2.93l0.72,-1.59l1.54,0.01l1.43,1.14l0.21,0.06l2.33,-0.19l2.55,0.62l0.97,0.03l0.83,1.6l0.15,1.71l0.86,2.96l0.09,0.14l0.5,0.45l-0.31,0.73l-3.11,0.44l-0.16,0.07l-1.07,0.97l-1.36,0.23l-0.25,0.28l-0.1,1.85l-2.74,1.02l-0.14,0.11l-0.9,1.3l-1.93,0.69l-2.56,0.44l-4.04,2.01l-0.17,0.27l0.02,2.91l-0.08,0.0l-0.3,0.31l0.05,1.15l-1.25,0.07l-0.16,0.06l-0.73,0.55l-0.98,0.0l-0.85,-0.33l-0.15,-0.02l-2.11,0.29l-0.24,0.19l-0.76,1.95l-0.63,0.16l-0.21,0.19l-1.15,3.29l-3.42,2.81l-0.1,0.17l-0.81,3.57l-0.98,1.12l-0.3,0.85l-5.13,0.19Z", "name": "Morocco"}, "UZ": {"path": "M587.83,186.48l0.06,-1.46l-0.19,-0.29l-3.31,-1.24l-2.57,-1.4l-1.63,-1.38l-2.79,-1.98l-1.2,-2.98l-0.12,-0.14l-0.84,-0.54l-0.18,-0.05l-2.61,0.13l-0.76,-0.48l-0.25,-2.25l-0.17,-0.24l-3.37,-1.6l-0.32,0.04l-2.08,1.73l-2.11,1.02l-0.16,0.35l0.31,1.14l-2.14,0.03l-0.09,-10.68l6.1,-1.74l6.25,3.57l2.36,2.72l0.27,0.1l2.92,-0.44l4.17,-0.23l2.78,2.06l-0.18,2.87l0.29,0.32l0.98,0.02l0.46,2.22l0.28,0.24l3.0,0.09l0.61,1.25l0.28,0.17l0.93,-0.02l0.26,-0.16l1.06,-2.06l3.21,-2.03l1.3,-0.5l0.19,0.08l-1.75,1.62l0.05,0.48l1.85,1.12l0.27,0.02l1.65,-0.69l2.4,1.27l-2.69,1.79l-1.79,-0.27l-0.89,0.06l-0.22,-0.52l0.48,-1.26l-0.34,-0.4l-3.35,0.69l-0.22,0.18l-0.78,1.87l-1.07,1.47l-1.93,-0.13l-0.29,0.16l-0.65,1.29l0.16,0.42l1.69,0.64l0.48,1.91l-1.25,2.6l-1.64,-0.53l-1.18,-0.03Z", "name": "Uzbekistan"}, "MM": {"path": "M670.1,233.39l-1.46,1.11l-1.68,0.11l-0.26,0.19l-1.1,2.7l-0.95,0.42l-0.14,0.42l1.21,2.27l1.61,1.92l0.94,1.55l-0.82,1.99l-0.77,0.42l-0.13,0.39l0.64,1.35l1.62,1.97l0.26,1.32l-0.04,1.15l0.02,0.13l0.92,2.18l-1.3,2.23l-0.79,1.69l-0.1,-0.77l0.74,-1.87l-0.02,-0.26l-0.8,-1.42l0.2,-2.68l-0.06,-0.2l-0.98,-1.27l-0.8,-2.98l-0.45,-3.22l-1.11,-2.22l-0.45,-0.1l-1.64,1.28l-2.74,1.76l-1.26,-0.2l-1.27,-0.49l0.79,-2.93l0.0,-0.14l-0.52,-2.42l-1.93,-2.97l0.26,-0.8l-0.22,-0.39l-1.37,-0.31l-1.65,-1.98l-0.12,-1.5l0.41,0.19l0.42,-0.26l0.05,-1.7l1.08,-0.54l0.16,-0.34l-0.24,-1.0l0.5,-0.79l0.05,-0.15l0.08,-2.35l1.58,0.49l0.36,-0.15l1.12,-2.19l0.15,-1.34l1.35,-2.18l0.04,-0.17l-0.07,-1.35l2.97,-1.71l1.67,0.45l0.38,-0.33l-0.18,-1.46l0.7,-0.4l0.15,-0.32l-0.13,-0.72l0.94,-0.13l0.74,1.41l0.11,0.12l0.95,0.56l0.07,1.89l-0.09,2.08l-2.28,2.15l-0.09,0.19l-0.3,3.15l0.35,0.32l2.37,-0.39l0.53,2.17l0.2,0.21l1.3,0.42l-0.63,1.9l0.14,0.36l1.86,0.99l1.1,0.49l0.24,0.0l1.45,-0.6l0.04,0.51l-2.01,1.6l-0.56,0.96l-1.34,0.56Z", "name": "Myanmar"}, "ML": {"path": "M390.79,248.2l0.67,-0.37l0.14,-0.18l0.36,-1.31l0.51,-0.04l1.68,0.69l0.21,0.0l1.34,-0.48l0.89,0.16l0.3,-0.13l0.29,-0.44l9.89,-0.04l0.29,-0.21l0.56,-1.8l-0.11,-0.33l-0.33,-0.24l-2.37,-22.1l3.41,-0.04l8.37,5.73l8.38,5.68l0.56,1.15l0.14,0.14l1.56,0.75l0.99,0.36l0.03,1.45l0.33,0.29l2.45,-0.22l0.01,5.52l-1.3,1.64l-0.06,0.15l-0.18,1.37l-1.99,0.36l-3.4,0.22l-0.19,0.09l-0.85,0.83l-1.48,0.09l-1.49,0.01l-0.54,-0.43l-0.26,-0.05l-1.38,0.36l-2.39,1.08l-0.13,0.12l-0.44,0.73l-1.88,1.11l-0.11,0.12l-0.3,0.57l-0.86,0.42l-1.1,-0.31l-0.28,0.07l-0.69,0.62l-0.09,0.16l-0.35,1.66l-1.93,2.04l-0.08,0.23l0.05,0.76l-0.63,0.99l-0.04,0.19l0.14,1.23l-0.81,0.29l-0.32,0.17l-0.27,-0.75l-0.39,-0.18l-0.65,0.26l-0.36,-0.04l-0.29,0.14l-0.37,0.6l-1.69,-0.02l-0.63,-0.34l-0.32,0.02l-0.12,0.09l-0.47,-0.45l0.1,-0.6l-0.09,-0.27l-0.31,-0.3l-0.33,-0.05l-0.05,0.02l0.02,-0.21l0.46,-0.59l-0.02,-0.39l-0.99,-1.02l-0.34,-0.74l-0.56,-0.56l-0.17,-0.09l-0.5,-0.07l-0.19,0.04l-0.58,0.35l-0.79,0.33l-0.65,0.51l-0.85,-0.16l-0.63,-0.59l-0.14,-0.07l-0.41,-0.08l-0.2,0.03l-0.59,0.31l-0.07,0.0l-0.1,-0.63l0.11,-0.85l-0.21,-0.98l-0.11,-0.17l-0.86,-0.66l-0.45,-1.34l-0.1,-1.36Z", "name": "Mali"}, "MN": {"path": "M641.06,150.59l2.41,-0.53l4.76,-2.8l3.67,-1.49l2.06,0.96l0.12,0.03l2.5,0.05l1.59,1.45l0.19,0.08l2.47,0.12l3.59,0.81l0.27,-0.07l2.43,-2.28l0.06,-0.36l-0.93,-1.77l2.33,-3.1l2.66,1.3l2.26,0.39l2.75,0.8l0.44,2.3l0.19,0.22l3.56,1.38l0.18,0.01l2.35,-0.6l3.1,-0.42l2.4,0.41l2.37,1.52l1.49,1.63l0.23,0.1l2.29,-0.03l3.13,0.52l0.15,-0.01l2.28,-0.79l3.27,-0.53l0.11,-0.04l3.56,-2.23l1.31,0.31l1.26,1.05l0.22,0.07l2.45,-0.22l-0.98,1.96l-1.77,3.21l-0.01,0.28l0.64,1.31l0.35,0.16l1.35,-0.38l2.4,0.48l0.22,-0.04l1.78,-1.09l1.82,0.92l2.11,2.07l-0.17,0.68l-1.79,-0.31l-3.74,0.45l-1.85,0.96l-1.78,2.01l-3.74,1.18l-2.46,1.61l-2.45,-0.6l-1.42,-0.28l-0.31,0.13l-1.31,1.99l0.0,0.33l0.78,1.15l0.3,0.74l-1.58,0.93l-1.75,1.59l-2.83,1.03l-3.77,0.12l-4.05,1.05l-2.81,1.54l-0.95,-0.8l-0.19,-0.07l-2.96,0.0l-3.64,-1.8l-2.55,-0.48l-3.38,0.41l-5.13,-0.67l-2.66,0.06l-1.35,-1.65l-1.12,-2.78l-0.21,-0.18l-1.5,-0.33l-2.98,-1.89l-0.12,-0.04l-3.37,-0.43l-2.84,-0.51l-0.75,-1.13l0.93,-3.54l-0.04,-0.24l-1.73,-2.55l-0.15,-0.12l-3.52,-1.18l-1.99,-1.61l-0.54,-1.85Z", "name": "Mongolia"}, "MK": {"path": "M472.73,173.87l0.08,0.01l0.32,-0.25l0.08,-0.44l1.29,-0.41l1.37,-0.28l1.03,-0.04l1.06,0.82l0.14,1.59l-0.22,0.04l-0.17,0.11l-0.32,0.4l-1.2,-0.05l-0.18,0.05l-0.9,0.61l-1.45,0.23l-0.85,-0.59l-0.3,-1.09l0.22,-0.71Z", "name": "Macedonia"}, "MW": {"path": "M507.18,313.84l-0.67,1.85l-0.01,0.16l0.7,3.31l0.31,0.24l0.75,-0.03l0.78,0.71l0.99,1.75l0.2,3.03l-0.91,0.45l-0.14,0.15l-0.59,1.38l-1.24,-1.21l-0.17,-1.62l0.49,-1.12l0.02,-0.16l-0.15,-1.03l-0.13,-0.21l-0.99,-0.65l-0.26,-0.03l-0.53,0.18l-1.31,-1.12l-1.15,-0.59l0.66,-2.06l0.75,-0.84l0.07,-0.27l-0.47,-2.04l0.48,-1.94l0.4,-0.65l0.03,-0.24l-0.64,-2.15l-0.08,-0.13l-0.44,-0.42l1.34,0.26l1.25,1.73l0.67,3.3Z", "name": "Malawi"}, "MR": {"path": "M390.54,247.66l-1.48,-1.58l-1.51,-1.88l-0.12,-0.09l-1.64,-0.67l-1.17,-0.74l-0.17,-0.05l-1.4,0.03l-0.12,0.03l-1.14,0.52l-1.15,-0.21l-0.26,0.08l-0.44,0.43l-0.11,-0.72l0.68,-1.29l0.31,-2.43l-0.28,-2.63l-0.29,-1.27l0.24,-1.24l-0.03,-0.2l-0.65,-1.24l-1.19,-1.05l0.32,-0.51l9.64,0.02l0.3,-0.34l-0.46,-3.71l0.51,-1.12l2.17,-0.22l0.27,-0.3l-0.08,-6.5l7.91,0.13l0.31,-0.3l0.01,-3.5l8.17,5.63l-2.89,0.04l-0.29,0.33l2.42,22.56l0.12,0.21l0.26,0.19l-0.43,1.38l-9.83,0.04l-0.25,0.13l-0.27,0.41l-0.77,-0.14l-0.15,0.01l-1.3,0.47l-1.64,-0.67l-0.14,-0.02l-0.79,0.06l-0.27,0.22l-0.39,1.39l-0.53,0.29Z", "name": "Mauritania"}, "UG": {"path": "M500.74,287.17l-2.84,-0.02l-0.92,0.32l-1.37,0.71l-0.29,-0.12l0.02,-1.6l0.54,-0.89l0.04,-0.13l0.14,-1.96l0.49,-1.09l0.91,-1.24l0.97,-0.68l0.8,-0.89l-0.13,-0.49l-0.79,-0.27l0.13,-2.55l0.78,-0.52l1.45,0.51l0.18,0.01l1.97,-0.57l1.72,0.01l0.18,-0.06l1.29,-0.97l0.98,1.44l0.29,1.24l1.05,2.75l-0.84,1.68l-1.94,2.66l-0.06,0.18l0.02,2.36l-4.8,0.18Z", "name": "Uganda"}, "MY": {"path": "M717.6,273.52l-1.51,0.7l-2.13,-0.41l-2.88,-0.0l-0.29,0.21l-0.84,2.77l-0.9,0.82l-0.08,0.12l-1.23,3.34l-1.81,0.47l-2.29,-0.68l-0.14,-0.01l-1.2,0.22l-0.14,0.07l-1.36,1.18l-1.47,-0.17l-0.12,0.01l-1.46,0.46l-1.51,-1.25l-0.24,-0.97l1.26,0.59l0.2,0.02l1.93,-0.47l0.22,-0.22l0.47,-1.98l0.9,-0.4l2.97,-0.54l0.17,-0.09l1.8,-1.98l1.02,-1.32l0.9,1.03l0.48,-0.04l0.43,-0.7l1.02,0.07l0.32,-0.27l0.25,-2.72l1.84,-1.67l1.23,-1.89l0.73,-0.01l1.12,1.11l0.1,0.99l0.18,0.24l1.66,0.71l1.85,0.67l-0.09,0.51l-1.45,0.11l-0.26,0.4l0.35,0.97ZM673.78,269.53l0.17,1.14l0.35,0.25l1.65,-0.3l0.18,-0.11l0.68,-0.86l0.31,0.13l1.41,1.45l0.99,1.59l0.13,1.57l-0.26,1.09l0.0,0.15l0.24,0.84l0.18,1.46l0.11,0.2l0.82,0.64l0.92,2.08l-0.03,0.52l-1.4,0.13l-2.29,-1.79l-2.86,-1.92l-0.27,-1.16l-0.07,-0.13l-1.39,-1.61l-0.33,-1.99l-0.05,-0.12l-0.84,-1.27l0.26,-1.72l-0.03,-0.18l-0.45,-0.87l0.13,-0.13l1.71,0.92Z", "name": "Malaysia"}, "MX": {"path": "M133.41,213.83l0.61,0.09l0.27,-0.09l0.93,-1.01l0.08,-0.18l0.09,-1.22l-0.09,-0.23l-1.93,-1.94l-1.46,-0.77l-2.96,-5.62l-0.86,-2.1l2.44,-0.18l2.68,-0.25l-0.03,0.08l0.17,0.4l3.79,1.35l5.81,1.97l6.96,-0.02l0.3,-0.3l0.0,-0.84l3.91,0.0l0.87,0.93l1.27,0.87l1.44,1.17l0.79,1.37l0.62,1.49l0.12,0.14l1.35,0.85l2.08,0.82l0.35,-0.1l1.49,-2.04l1.81,-0.05l1.63,1.01l1.21,1.8l0.86,1.58l1.47,1.55l0.53,1.82l0.73,1.32l0.14,0.13l1.98,0.84l1.78,0.59l0.61,-0.03l-0.78,1.89l-0.45,1.96l-0.19,3.58l-0.24,1.27l0.01,0.14l0.43,1.43l0.78,1.31l0.49,1.98l0.06,0.12l1.63,1.9l0.61,1.51l0.98,1.28l0.16,0.11l2.58,0.67l0.98,1.02l0.31,0.08l2.17,-0.71l1.91,-0.26l1.87,-0.47l1.67,-0.49l1.59,-1.06l0.11,-0.14l0.6,-1.52l0.22,-2.21l0.35,-0.62l1.58,-0.64l2.59,-0.59l2.18,0.09l1.43,-0.2l0.39,0.36l-0.07,1.02l-1.28,1.48l-0.65,1.68l0.07,0.32l0.33,0.32l-0.79,2.49l-0.28,-0.3l-0.24,-0.09l-1.0,0.08l-0.24,0.15l-0.74,1.28l-0.19,-0.13l-0.28,-0.03l-0.3,0.12l-0.19,0.29l0.0,0.06l-4.34,-0.02l-0.3,0.3l-0.0,1.16l-0.83,0.0l-0.28,0.19l0.08,0.33l0.93,0.86l0.9,0.58l0.24,0.48l0.16,0.15l0.2,0.08l-0.03,0.38l-2.94,0.01l-0.26,0.15l-1.21,2.09l0.02,0.33l0.25,0.33l-0.21,0.44l-0.04,0.22l-2.42,-2.35l-1.36,-0.87l-2.04,-0.67l-0.13,-0.01l-1.4,0.19l-2.07,0.98l-1.14,0.23l-1.72,-0.66l-1.85,-0.48l-2.31,-1.16l-1.92,-0.38l-2.79,-1.18l-2.04,-1.2l-0.6,-0.66l-0.19,-0.1l-1.37,-0.15l-2.45,-0.78l-1.07,-1.18l-2.63,-1.44l-1.2,-1.56l-0.44,-0.93l0.5,-0.15l0.2,-0.39l-0.2,-0.58l0.46,-0.55l0.07,-0.19l0.01,-0.91l-0.06,-0.18l-0.81,-1.13l-0.25,-1.08l-0.86,-1.36l-2.21,-2.63l-2.53,-2.09l-1.2,-1.63l-0.11,-0.09l-2.08,-1.06l-0.34,-0.48l0.35,-1.53l-0.16,-0.34l-1.24,-0.61l-1.39,-1.23l-0.6,-1.81l-0.24,-0.2l-1.25,-0.2l-1.38,-1.35l-1.11,-1.25l-0.1,-0.76l-0.05,-0.13l-1.33,-2.04l-0.85,-2.02l0.04,-0.99l-0.14,-0.27l-1.81,-1.1l-0.2,-0.04l-0.74,0.11l-1.34,-0.72l-0.42,0.16l-0.4,1.12l-0.0,0.19l0.41,1.3l0.24,2.04l0.06,0.15l0.88,1.16l1.84,1.86l0.4,0.61l0.12,0.1l0.27,0.14l0.29,0.82l0.31,0.2l0.2,-0.02l0.43,1.51l0.09,0.14l0.72,0.65l0.51,0.91l1.58,1.4l0.8,2.42l0.77,1.23l0.66,1.19l0.13,1.34l0.28,0.27l1.08,0.08l0.92,1.1l0.83,1.08l-0.03,0.24l-0.88,0.81l-0.13,-0.0l-0.59,-1.42l-0.07,-0.11l-1.67,-1.53l-1.81,-1.28l-1.15,-0.61l0.07,-1.85l-0.38,-1.45l-0.12,-0.17l-2.91,-2.03l-0.39,0.04l-0.11,0.11l-0.42,-0.46l-0.11,-0.08l-1.49,-0.63l-1.09,-1.16Z", "name": "Mexico"}, "VU": {"path": "M839.92,325.66l0.78,0.73l-0.18,0.07l-0.6,-0.8ZM839.13,322.74l0.27,1.36l-0.13,-0.06l-0.21,-0.02l-0.29,0.08l-0.22,-0.43l-0.03,-1.32l0.61,0.4Z", "name": "Vanuatu"}, "FR": {"path": "M444.58,172.63l-0.68,1.92l-0.72,-0.38l-0.51,-1.79l0.43,-0.95l1.15,-0.83l0.33,2.04ZM429.71,147.03l1.77,1.57l0.26,0.07l1.16,-0.23l2.12,1.44l0.56,0.28l0.16,0.03l0.61,-0.06l1.09,0.78l0.13,0.05l3.18,0.53l-1.09,1.94l-0.3,2.16l-0.48,0.38l-1.0,-0.26l-0.37,0.32l0.07,0.66l-1.73,1.68l-0.09,0.21l-0.04,1.42l0.41,0.29l0.96,-0.4l0.67,1.07l-0.09,0.78l0.04,0.19l0.61,0.97l-0.71,0.78l-0.07,0.28l0.65,2.39l0.21,0.21l1.09,0.31l-0.2,0.95l-2.08,1.58l-4.81,-0.8l-0.13,0.01l-3.65,0.99l-0.22,0.24l-0.25,1.6l-2.59,0.35l-2.74,-1.33l-0.31,0.03l-0.79,0.57l-4.38,-1.31l-0.79,-0.94l1.16,-1.64l0.05,-0.15l0.48,-6.17l-0.06,-0.21l-2.58,-3.3l-1.89,-1.65l-0.11,-0.06l-3.64,-1.17l-0.2,-1.88l2.92,-0.63l4.14,0.82l0.35,-0.36l-0.65,-3.0l1.77,1.05l0.27,0.02l5.83,-2.54l0.17,-0.19l0.71,-2.54l1.75,-0.53l0.27,0.88l0.27,0.21l1.04,0.05l1.08,1.23ZM289.1,278.45l-0.85,0.84l-0.88,0.13l-0.25,-0.51l-0.21,-0.16l-0.56,-0.1l-0.25,0.07l-0.63,0.55l-0.62,-0.29l0.5,-0.88l0.21,-1.11l0.42,-1.05l-0.03,-0.28l-0.93,-1.42l-0.18,-1.54l1.13,-1.87l2.42,0.78l2.55,2.04l0.33,0.81l-1.4,2.16l-0.77,1.84Z", "name": "France"}, "FI": {"path": "M492.26,76.42l-0.38,3.12l0.12,0.28l3.6,2.69l-2.14,2.96l-0.01,0.33l2.83,4.61l-1.61,3.36l0.03,0.31l2.15,2.87l-0.96,2.44l0.1,0.35l3.51,2.55l-0.81,1.72l-2.28,2.19l-5.28,4.79l-4.51,0.31l-4.39,1.37l-3.87,0.75l-1.34,-1.89l-0.11,-0.09l-2.23,-1.14l0.53,-3.54l-0.01,-0.14l-1.17,-3.37l1.12,-2.13l2.23,-2.44l5.69,-4.33l1.65,-0.84l0.16,-0.31l-0.26,-1.73l-0.15,-0.22l-3.4,-1.91l-0.77,-1.47l-0.07,-6.45l-0.12,-0.24l-3.91,-2.94l-3.0,-1.92l0.97,-0.76l2.6,2.17l0.21,0.07l3.2,-0.21l2.63,1.03l0.3,-0.05l2.39,-1.94l0.09,-0.13l1.18,-3.12l3.63,-1.42l2.87,1.59l-0.98,2.87Z", "name": "Finland"}, "FJ": {"path": "M869.98,327.07l-1.31,0.44l-0.14,-0.41l0.96,-0.41l0.85,-0.17l1.43,-0.78l-0.16,0.65l-1.64,0.67ZM867.58,329.12l0.54,0.47l-0.31,1.0l-1.32,0.3l-1.13,-0.26l-0.17,-0.78l0.72,-0.66l0.98,0.27l0.25,-0.04l0.43,-0.29Z", "name": "Fiji"}, "FK": {"path": "M268.15,427.89l2.6,-1.73l1.98,0.77l0.31,-0.05l1.32,-1.17l1.58,1.18l-0.54,0.84l-3.1,0.92l-1.0,-1.04l-0.39,-0.04l-1.9,1.35l-0.86,-1.04Z", "name": "Falkland Islands"}, "NI": {"path": "M202.1,252.6l0.23,-0.0l0.12,-0.11l0.68,-0.09l0.22,-0.15l0.23,-0.43l0.2,-0.01l0.28,-0.31l-0.04,-0.97l0.29,-0.03l0.5,0.02l0.25,-0.11l0.37,-0.46l0.51,0.35l0.4,-0.06l0.23,-0.28l0.45,-0.29l0.87,-0.7l0.11,-0.21l0.02,-0.26l0.23,-0.12l0.25,-0.48l0.29,0.27l0.14,0.07l0.5,0.12l0.22,-0.03l0.48,-0.28l0.66,-0.02l0.87,-0.33l0.36,-0.32l0.21,0.01l-0.11,0.48l0.0,0.14l0.22,0.8l-0.54,0.85l-0.27,1.03l-0.09,1.18l0.14,0.72l0.05,0.95l-0.24,0.15l-0.13,0.19l-0.23,1.09l0.0,0.14l0.14,0.53l-0.42,0.53l-0.06,0.24l0.12,0.69l0.08,0.15l0.18,0.19l-0.26,0.23l-0.49,-0.11l-0.35,-0.44l-0.16,-0.1l-0.79,-0.21l-0.23,0.03l-0.45,0.26l-1.51,-0.62l-0.31,0.05l-0.17,0.15l-1.81,-1.62l-0.6,-0.9l-1.04,-0.79l-0.77,-0.71Z", "name": "Nicaragua"}, "NL": {"path": "M436.22,136.65l1.82,0.08l0.36,0.89l-0.6,2.96l-0.53,1.06l-1.32,0.0l-0.3,0.34l0.35,2.89l-0.83,-0.47l-1.56,-1.43l-0.29,-0.07l-2.26,0.67l-1.02,-0.15l0.68,-0.48l0.1,-0.12l2.14,-4.84l3.25,-1.35Z", "name": "Netherlands"}, "NO": {"path": "M491.45,67.31l7.06,3.0l-2.52,0.94l-0.11,0.49l2.43,2.49l-3.82,1.59l-1.48,0.3l0.89,-2.61l-0.14,-0.36l-3.21,-1.78l-0.25,-0.02l-3.89,1.52l-0.17,0.17l-1.2,3.17l-2.19,1.78l-2.53,-0.99l-0.13,-0.02l-3.15,0.21l-2.69,-2.25l-0.38,-0.01l-1.43,1.11l-1.47,0.17l-0.26,0.26l-0.33,2.57l-4.42,-0.65l-0.33,0.22l-0.6,2.19l-2.17,-0.01l-0.27,0.16l-4.15,7.68l-3.88,5.76l-0.0,0.33l0.81,1.23l-0.7,1.27l-2.3,-0.06l-0.28,0.18l-1.63,3.72l-0.02,0.13l0.15,5.17l0.07,0.18l1.51,1.84l-0.79,4.24l-2.04,2.5l-0.92,1.75l-1.39,-1.88l-0.44,-0.05l-4.89,4.21l-3.16,0.81l-3.24,-1.74l-0.86,-3.82l-0.78,-8.6l2.18,-2.36l6.56,-3.28l5.0,-4.16l4.63,-5.74l5.99,-8.09l4.17,-3.23l6.84,-5.49l5.39,-1.92l4.06,0.24l0.23,-0.09l3.72,-3.67l4.51,0.19l4.4,-0.89ZM484.58,19.95l4.42,1.82l-3.25,2.68l-7.14,0.65l-7.16,-0.91l-0.39,-1.37l-0.28,-0.22l-3.48,-0.1l-2.25,-2.15l7.09,-1.48l3.55,1.36l0.28,-0.03l2.42,-1.66l6.18,1.41ZM481.99,33.92l-4.73,1.85l-3.76,-1.06l1.27,-1.02l0.04,-0.43l-1.18,-1.35l4.46,-0.94l0.89,1.83l0.17,0.15l2.83,0.96ZM466.5,23.95l7.64,3.87l-5.63,1.94l-0.19,0.19l-1.35,3.88l-2.08,0.96l-0.16,0.19l-1.14,4.18l-2.71,0.18l-4.94,-2.95l1.95,-1.63l-0.08,-0.51l-3.7,-1.54l-4.79,-4.54l-1.78,-4.01l6.29,-1.88l1.25,1.81l0.25,0.13l3.57,-0.08l0.26,-0.17l0.87,-1.79l3.41,-0.18l3.08,1.94Z", "name": "Norway"}, "NA": {"path": "M461.88,357.98l-1.61,-1.77l-0.94,-1.9l-0.54,-2.58l-0.62,-1.95l-0.83,-4.05l-0.06,-3.13l-0.33,-1.5l-0.07,-0.14l-0.95,-1.06l-1.27,-2.12l-1.3,-3.1l-0.59,-1.71l-1.98,-2.46l-0.13,-1.67l0.99,-0.4l1.44,-0.42l1.48,0.07l1.42,1.11l0.31,0.03l0.32,-0.15l9.99,-0.11l1.66,1.18l0.16,0.06l6.06,0.37l4.69,-1.06l2.01,-0.57l1.5,0.14l0.63,0.37l-1.0,0.41l-0.7,0.01l-0.16,0.05l-1.38,0.88l-0.79,-0.88l-0.29,-0.09l-3.83,0.9l-1.84,0.08l-0.29,0.3l-0.07,8.99l-2.18,0.08l-0.29,0.3l-0.0,17.47l-2.04,1.27l-1.21,0.18l-1.51,-0.49l-0.99,-0.18l-0.36,-1.0l-0.1,-0.14l-0.99,-0.74l-0.4,0.04l-0.98,1.09Z", "name": "Namibia"}, "NC": {"path": "M835.87,338.68l2.06,1.63l1.01,0.94l-0.49,0.32l-1.21,-0.62l-1.76,-1.16l-1.58,-1.36l-1.61,-1.79l-0.16,-0.41l0.54,0.02l1.32,0.83l1.08,0.87l0.79,0.73Z", "name": "New Caledonia"}, "NE": {"path": "M426.67,254.17l0.03,-1.04l-0.24,-0.3l-2.66,-0.53l-0.06,-1.0l-0.07,-0.17l-1.37,-1.62l-0.3,-1.04l0.15,-0.94l1.37,-0.09l0.19,-0.09l0.85,-0.83l3.34,-0.22l2.22,-0.41l0.24,-0.26l0.2,-1.5l1.32,-1.65l0.07,-0.19l-0.01,-5.74l3.4,-1.13l7.24,-5.12l8.46,-4.95l3.76,1.08l1.35,1.39l0.36,0.05l1.39,-0.77l0.55,3.66l0.12,0.2l0.82,0.6l0.03,0.69l0.1,0.21l0.87,0.74l-0.47,0.99l-0.96,5.26l-0.13,3.25l-3.08,2.34l-0.1,0.15l-1.08,3.37l0.08,0.31l0.94,0.86l-0.01,1.51l0.29,0.3l1.25,0.05l-0.14,0.66l-0.51,0.11l-0.24,0.26l-0.06,0.57l-0.04,0.0l-1.59,-2.62l-0.21,-0.14l-0.59,-0.1l-0.23,0.05l-1.83,1.33l-1.79,-0.68l-1.42,-0.17l-0.17,0.03l-0.65,0.32l-1.39,-0.07l-0.19,0.06l-1.4,1.03l-1.12,0.05l-2.97,-1.29l-0.26,0.01l-1.12,0.59l-1.08,-0.04l-0.85,-0.88l-0.11,-0.07l-2.51,-0.95l-0.14,-0.02l-2.69,0.3l-0.16,0.07l-0.65,0.55l-0.1,0.16l-0.34,1.41l-0.69,0.98l-0.05,0.15l-0.13,1.72l-1.47,-1.13l-0.18,-0.06l-0.9,0.01l-0.2,0.08l-0.32,0.28Z", "name": "Niger"}, "NG": {"path": "M442.0,272.7l-2.4,0.83l-0.88,-0.12l-0.19,0.04l-0.89,0.52l-1.78,-0.05l-1.23,-1.44l-0.88,-1.87l-1.77,-1.66l-0.21,-0.08l-3.78,0.03l0.13,-3.75l-0.06,-1.58l0.44,-1.47l0.74,-0.75l1.21,-1.56l0.04,-0.29l-0.22,-0.56l0.44,-0.9l0.01,-0.24l-0.54,-1.44l0.26,-2.97l0.72,-1.06l0.33,-1.37l0.51,-0.43l2.53,-0.28l2.38,0.9l0.89,0.91l0.2,0.09l1.28,0.04l0.15,-0.03l1.06,-0.56l2.9,1.26l0.13,0.02l1.28,-0.06l0.16,-0.06l1.39,-1.02l1.36,0.07l0.15,-0.03l0.64,-0.32l1.22,0.13l1.9,0.73l0.28,-0.04l1.86,-1.35l0.33,0.06l1.62,2.67l0.29,0.14l0.32,-0.04l0.73,0.74l-0.19,0.37l-0.12,0.74l-2.03,1.89l-0.07,0.11l-0.66,1.62l-0.35,1.28l-0.48,0.51l-0.07,0.12l-0.48,1.67l-1.26,0.98l-0.1,0.15l-0.38,1.24l-0.58,1.07l-0.2,0.91l-1.43,0.7l-1.26,-0.93l-0.19,-0.06l-0.95,0.04l-0.2,0.09l-1.41,1.39l-0.61,0.02l-0.26,0.17l-1.19,2.42l-0.61,1.67Z", "name": "Nigeria"}, "NZ": {"path": "M857.9,379.62l1.85,3.1l0.33,0.14l0.22,-0.28l0.04,-1.41l0.57,0.4l0.35,2.06l0.17,0.22l2.02,0.94l1.78,0.26l0.22,-0.06l1.31,-1.01l0.84,0.22l-0.53,2.27l-0.67,1.5l-1.71,-0.05l-0.25,0.12l-0.67,0.89l-0.05,0.23l0.21,1.15l-0.31,0.46l-2.15,3.57l-1.6,0.99l-0.28,-0.51l-0.15,-0.13l-0.72,-0.3l1.27,-2.15l0.01,-0.29l-0.82,-1.63l-0.15,-0.14l-2.5,-1.09l0.05,-0.69l1.67,-0.94l0.15,-0.21l0.42,-2.24l-0.11,-1.95l-0.03,-0.12l-0.97,-1.85l0.05,-0.41l-0.09,-0.25l-1.18,-1.17l-1.94,-2.49l-0.86,-1.64l0.38,-0.09l1.24,1.43l0.12,0.08l1.81,0.68l0.67,2.39ZM853.93,393.55l0.57,1.24l0.44,0.12l1.51,-1.03l0.52,0.91l0.0,1.09l-0.88,1.31l-1.62,2.2l-1.26,1.2l-0.05,0.38l0.64,1.02l-1.4,0.03l-0.14,0.04l-2.14,1.16l-0.14,0.17l-0.67,2.0l-1.38,3.06l-3.07,2.19l-2.12,-0.06l-1.55,-0.99l-0.14,-0.05l-2.53,-0.2l-0.31,-0.84l1.25,-2.15l3.07,-2.97l1.62,-0.59l1.81,-1.17l2.18,-1.63l1.55,-1.65l1.08,-2.18l0.9,-0.72l0.11,-0.17l0.35,-1.56l1.37,-1.07l0.4,0.91Z", "name": "New Zealand"}, "NP": {"path": "M641.26,213.53l-0.14,0.95l0.32,1.64l-0.21,0.78l-1.83,0.04l-2.98,-0.62l-1.86,-0.25l-1.37,-1.3l-0.18,-0.08l-3.38,-0.34l-3.21,-1.49l-2.38,-1.34l-2.16,-0.92l0.84,-2.2l1.51,-1.18l0.89,-0.57l1.83,0.77l2.5,1.76l1.39,0.41l0.78,1.21l0.17,0.13l1.91,0.53l2.0,1.17l2.92,0.66l2.63,0.24Z", "name": "Nepal"}, "CI": {"path": "M413.53,272.08l-0.83,0.02l-1.79,-0.49l-1.64,0.03l-3.04,0.46l-1.73,0.72l-2.4,0.89l-0.12,-0.02l0.16,-1.7l0.19,-0.25l0.06,-0.2l-0.08,-0.99l-0.09,-0.19l-1.06,-1.05l-0.15,-0.08l-0.71,-0.15l-0.51,-0.48l0.45,-0.92l0.02,-0.19l-0.24,-1.16l0.07,-0.43l0.14,-0.0l0.3,-0.26l0.15,-1.1l-0.02,-0.15l-0.13,-0.34l0.09,-0.13l0.83,-0.27l0.19,-0.37l-0.62,-2.02l-0.55,-1.0l0.14,-0.59l0.35,-0.14l0.24,-0.16l0.53,0.29l0.14,0.04l1.93,0.02l0.26,-0.14l0.36,-0.58l0.39,0.01l0.43,-0.17l0.28,0.79l0.43,0.16l0.56,-0.31l0.89,-0.32l0.92,0.45l0.39,0.75l0.14,0.13l1.13,0.53l0.3,-0.03l0.81,-0.59l1.02,-0.08l1.49,0.57l0.62,3.33l-1.03,2.09l-0.65,2.84l0.02,0.2l1.05,2.08l-0.07,0.64Z", "name": "Ivory Coast"}, "CH": {"path": "M444.71,156.27l0.05,0.3l-0.34,0.69l0.13,0.4l1.13,0.58l1.07,0.1l-0.12,0.81l-0.87,0.42l-1.75,-0.37l-0.34,0.18l-0.47,1.1l-0.86,0.07l-0.33,-0.38l-0.41,-0.04l-1.34,1.01l-1.02,0.13l-0.93,-0.58l-0.82,-1.32l-0.37,-0.12l-0.77,0.32l0.02,-0.84l1.74,-1.69l0.09,-0.25l-0.04,-0.38l0.73,0.19l0.26,-0.06l0.6,-0.48l2.02,0.02l0.24,-0.12l0.38,-0.51l2.31,0.84Z", "name": "Switzerland"}, "CO": {"path": "M232.24,284.95l-0.94,-0.52l-1.22,-0.82l-0.31,-0.01l-0.62,0.35l-1.88,-0.31l-0.54,-0.95l-0.29,-0.15l-0.37,0.03l-2.34,-1.33l-0.15,-0.35l0.57,-0.11l0.24,-0.32l-0.1,-1.15l0.46,-0.71l1.11,-0.15l0.21,-0.13l1.05,-1.57l0.95,-1.31l-0.08,-0.43l-0.73,-0.47l0.4,-1.24l0.01,-0.16l-0.53,-2.15l0.44,-0.54l0.06,-0.24l-0.4,-2.13l-0.06,-0.13l-0.93,-1.22l0.21,-0.8l0.52,0.12l0.32,-0.13l0.47,-0.75l0.03,-0.27l-0.52,-1.32l0.09,-0.11l1.14,0.07l0.22,-0.08l1.82,-1.71l0.96,-0.25l0.22,-0.28l0.02,-0.81l0.43,-2.01l1.28,-1.04l1.48,-0.05l0.27,-0.19l0.12,-0.31l1.73,0.19l0.2,-0.05l1.96,-1.28l0.97,-0.56l1.16,-1.16l0.64,0.11l0.43,0.44l-0.31,0.55l-1.49,0.39l-0.19,0.16l-0.6,1.2l-0.97,0.74l-0.73,0.94l-0.06,0.13l-0.3,1.76l-0.68,1.44l0.23,0.43l1.1,0.14l0.27,0.97l0.08,0.13l0.49,0.49l0.17,0.85l-0.27,0.86l-0.01,0.14l0.09,0.53l0.2,0.23l0.52,0.18l0.54,0.79l0.27,0.13l3.18,-0.24l1.31,0.29l1.7,2.08l0.31,0.1l0.96,-0.26l1.75,0.13l1.41,-0.27l0.56,0.27l-0.36,1.07l-0.54,0.81l-0.05,0.13l-0.2,1.8l0.51,1.79l0.07,0.12l0.65,0.68l0.05,0.32l-1.16,1.14l0.05,0.47l0.86,0.52l0.6,0.79l0.31,1.01l-0.7,-0.81l-0.44,-0.01l-0.74,0.77l-4.75,-0.05l-0.3,0.31l0.03,1.57l0.25,0.29l1.2,0.21l-0.02,0.24l-0.1,-0.05l-0.22,-0.02l-1.41,0.41l-0.22,0.29l-0.01,1.82l0.11,0.23l1.04,0.85l0.35,1.3l-0.06,1.02l-1.02,6.26l-0.84,-0.89l-0.19,-0.09l-0.25,-0.02l1.35,-2.13l-0.1,-0.42l-1.92,-1.17l-0.2,-0.04l-1.41,0.2l-0.82,-0.39l-0.26,0.0l-1.29,0.62l-1.63,-0.27l-1.4,-2.5l-0.12,-0.12l-1.1,-0.61l-0.83,-1.2l-1.67,-1.19l-0.27,-0.04l-0.54,0.19Z", "name": "Colombia"}, "CN": {"path": "M740.32,148.94l0.22,0.21l4.3,1.03l2.84,2.2l0.99,2.92l0.28,0.2l3.8,0.0l0.15,-0.04l2.13,-1.24l3.5,-0.8l-1.05,2.29l-0.95,1.13l-0.06,0.12l-0.85,3.41l-1.56,2.81l-2.83,-0.51l-0.19,0.03l-2.15,1.09l-0.15,0.34l0.65,2.59l-0.33,3.3l-1.03,0.07l-0.28,0.3l0.01,0.75l-1.09,-1.2l-0.48,0.05l-0.94,1.6l-3.76,1.26l-0.2,0.36l0.29,1.19l-1.67,-0.08l-1.11,-0.88l-0.42,0.05l-1.69,2.08l-2.71,1.57l-2.04,1.88l-3.42,0.84l-0.11,0.05l-1.8,1.34l-1.54,0.46l0.52,-0.53l0.06,-0.33l-0.44,-0.96l1.84,-1.84l0.02,-0.41l-1.32,-1.56l-0.36,-0.08l-2.23,1.08l-2.83,2.06l-1.52,1.85l-2.32,0.13l-0.2,0.09l-1.28,1.37l-0.03,0.37l1.32,1.97l0.18,0.13l1.83,0.43l0.07,1.08l0.18,0.26l1.98,0.84l0.3,-0.03l2.66,-1.96l2.06,1.04l0.12,0.03l1.4,0.07l0.27,1.0l-3.24,0.73l-0.17,0.11l-1.13,1.5l-2.38,1.4l-0.1,0.1l-1.29,1.99l0.1,0.42l2.6,1.5l0.97,2.72l1.52,2.56l1.66,2.08l-0.03,1.76l-1.4,0.67l-0.15,0.38l0.6,1.47l0.13,0.15l1.29,0.75l-0.35,2.0l-0.58,1.96l-1.22,0.21l-0.2,0.14l-1.83,2.93l-2.02,3.51l-2.29,3.13l-3.4,2.42l-3.42,2.18l-2.75,0.3l-0.15,0.06l-1.32,1.01l-0.68,-0.67l-0.41,-0.01l-1.37,1.27l-3.42,1.28l-2.62,0.4l-0.24,0.21l-0.8,2.57l-0.95,0.11l-0.53,-1.54l0.52,-0.89l-0.19,-0.44l-3.36,-0.84l-0.17,0.01l-1.09,0.4l-2.36,-0.64l-1.0,-0.9l0.35,-1.34l-0.23,-0.37l-2.22,-0.47l-1.15,-0.94l-0.36,-0.02l-2.08,1.37l-2.35,0.29l-1.98,-0.01l-0.13,0.03l-1.32,0.63l-1.28,0.38l-0.21,0.33l0.33,2.65l-0.78,-0.04l-0.14,-0.39l-0.07,-1.04l-0.41,-0.26l-1.72,0.71l-0.96,-0.43l-1.63,-0.86l0.65,-1.95l-0.19,-0.38l-1.43,-0.46l-0.56,-2.27l-0.34,-0.22l-2.26,0.38l0.25,-2.65l2.29,-2.15l0.09,-0.2l0.1,-2.21l-0.07,-2.09l-0.15,-0.25l-1.02,-0.6l-0.8,-1.52l-0.31,-0.16l-1.42,0.2l-2.16,-0.32l0.55,-0.74l0.01,-0.35l-1.17,-1.7l-0.41,-0.08l-1.67,1.07l-1.97,-0.63l-0.25,0.03l-2.89,1.73l-2.26,1.99l-1.82,0.3l-1.0,-0.66l-0.15,-0.05l-1.28,-0.06l-1.75,-0.61l-0.24,0.02l-1.35,0.69l-0.1,0.08l-1.2,1.45l-0.14,-1.41l-0.4,-0.25l-1.46,0.55l-2.83,-0.26l-2.77,-0.61l-1.99,-1.17l-1.91,-0.54l-0.78,-1.21l-0.17,-0.13l-1.36,-0.38l-2.54,-1.79l-2.01,-0.84l-0.28,0.02l-0.89,0.56l-3.31,-1.83l-2.35,-1.67l-0.57,-2.49l1.34,0.28l0.36,-0.28l0.08,-1.42l-0.05,-0.19l-0.93,-1.34l0.24,-2.18l-0.07,-0.22l-2.69,-3.32l-0.15,-0.1l-3.97,-1.11l-0.69,-2.05l-0.11,-0.15l-1.79,-1.3l-0.39,-0.73l-0.36,-1.57l0.08,-1.09l-0.18,-0.3l-1.52,-0.66l-0.22,-0.01l-0.51,0.18l-0.52,-2.21l0.59,-0.55l0.06,-0.35l-0.22,-0.44l2.12,-1.24l1.63,-0.55l2.58,0.39l0.31,-0.16l0.87,-1.75l3.05,-0.34l0.21,-0.12l0.84,-1.12l3.87,-1.59l0.15,-0.14l0.35,-0.68l0.03,-0.17l-0.17,-1.51l1.52,-0.7l0.15,-0.39l-2.12,-5.0l4.62,-1.15l1.35,-0.72l0.14,-0.17l1.72,-5.37l4.7,0.99l0.28,-0.08l1.39,-1.43l0.08,-0.2l0.11,-2.95l1.83,-0.26l0.18,-0.1l1.85,-2.08l0.61,-0.17l0.57,1.97l0.1,0.15l2.2,1.75l3.48,1.17l1.59,2.36l-0.93,3.53l0.04,0.24l0.9,1.35l0.2,0.13l2.98,0.53l3.32,0.43l2.97,1.89l1.49,0.35l1.08,2.67l1.52,1.88l0.24,0.11l2.74,-0.07l5.15,0.67l3.36,-0.41l2.39,0.43l3.67,1.81l0.13,0.03l2.92,-0.0l1.02,0.86l0.34,0.03l2.88,-1.59l3.98,-1.03l3.81,-0.13l3.02,-1.12l1.77,-1.61l1.73,-1.01l0.13,-0.37l-0.41,-1.01l-0.72,-1.07l1.09,-1.66l1.21,0.24l2.57,0.63l0.24,-0.04l2.46,-1.62l3.78,-1.19l0.13,-0.09l1.8,-2.03l1.66,-0.84l3.54,-0.41l1.93,0.35l0.34,-0.22l0.27,-1.12l-0.08,-0.29l-2.27,-2.22l-2.08,-1.07l-0.29,0.01l-1.82,1.12l-2.36,-0.47l-0.14,0.01l-1.18,0.34l-0.46,-0.94l1.69,-3.08l1.1,-2.21l2.75,1.12l0.26,-0.02l3.53,-2.06l0.15,-0.26l-0.02,-1.35l2.18,-3.39l1.35,-1.04l0.12,-0.24l-0.03,-1.85l-0.15,-0.25l-1.0,-0.58l1.68,-1.37l3.01,-0.59l3.25,-0.09l3.67,0.99l2.08,1.18l1.51,3.3l0.95,1.45l0.85,1.99l0.92,3.19ZM697.0,237.37l-1.95,1.12l-1.74,-0.68l-0.06,-1.9l1.08,-1.03l2.62,-0.7l1.23,0.05l0.37,0.65l-1.01,1.08l-0.54,1.4Z", "name": "China"}, "CM": {"path": "M453.76,278.92l-0.26,-0.11l-0.18,-0.02l-1.42,0.31l-1.56,-0.33l-1.17,0.16l-3.7,-0.05l0.3,-1.63l-0.04,-0.21l-0.98,-1.66l-0.15,-0.13l-1.03,-0.38l-0.46,-1.01l-0.13,-0.14l-0.48,-0.27l0.02,-0.46l0.62,-1.72l1.1,-2.25l0.54,-0.02l0.2,-0.09l1.41,-1.39l0.73,-0.03l1.32,0.97l0.31,0.03l1.72,-0.85l0.16,-0.2l0.22,-1.0l0.57,-1.03l0.36,-1.18l1.26,-0.98l0.1,-0.15l0.49,-1.7l0.48,-0.51l0.07,-0.13l0.35,-1.3l0.63,-1.54l2.06,-1.92l0.09,-0.17l0.12,-0.79l0.24,-0.41l-0.04,-0.36l-0.89,-0.91l0.04,-0.45l0.28,-0.06l0.85,1.39l0.16,1.59l-0.09,1.66l0.04,0.17l1.09,1.84l-0.86,-0.02l-0.72,0.17l-1.07,-0.24l-0.34,0.17l-0.54,1.19l0.06,0.34l1.48,1.47l1.06,0.44l0.32,0.94l0.73,1.6l-0.32,0.57l-1.23,2.49l-0.54,0.41l-0.12,0.21l-0.19,1.95l0.24,1.08l-0.18,0.67l0.07,0.28l1.13,1.25l0.24,0.93l0.92,1.29l1.1,0.8l0.1,1.01l0.26,0.73l-0.12,0.93l-1.65,-0.49l-2.02,-0.66l-3.19,-0.11Z", "name": "Cameroon"}, "CL": {"path": "M246.8,429.1l-1.14,0.78l-2.25,1.21l-0.16,0.23l-0.37,2.94l-0.75,0.06l-2.72,-1.07l-2.83,-2.34l-3.06,-1.9l-0.71,-1.92l0.67,-1.84l-0.02,-0.25l-1.22,-2.13l-0.31,-5.41l1.02,-2.95l2.59,-2.4l-0.13,-0.51l-3.32,-0.8l2.06,-2.4l0.07,-0.15l0.79,-4.77l2.44,0.95l0.4,-0.22l1.31,-6.31l-0.16,-0.33l-1.68,-0.8l-0.42,0.21l-0.72,3.47l-1.01,-0.27l0.74,-4.06l0.85,-5.46l1.12,-1.96l0.03,-0.22l-0.71,-2.82l-0.19,-2.94l0.76,-0.07l0.26,-0.2l1.53,-4.62l1.73,-4.52l1.07,-4.2l-0.56,-4.2l0.73,-2.2l0.01,-0.12l-0.29,-3.3l1.46,-3.34l0.45,-5.19l0.8,-5.52l0.78,-5.89l-0.18,-4.33l-0.49,-3.47l1.1,-0.56l0.13,-0.13l0.44,-0.88l0.9,1.29l0.32,1.8l0.1,0.18l1.16,0.97l-0.73,2.33l0.01,0.21l1.33,2.91l0.97,3.6l0.35,0.22l1.57,-0.31l0.16,0.34l-0.79,2.51l-2.61,1.25l-0.17,0.28l0.08,4.36l-0.48,0.79l0.01,0.33l0.6,0.84l-1.62,1.55l-1.67,2.6l-0.89,2.47l-0.02,0.13l0.23,2.56l-1.5,2.76l-0.03,0.21l1.15,4.8l0.11,0.17l0.54,0.42l-0.01,2.37l-1.4,2.7l-0.03,0.15l0.06,2.25l-1.8,1.78l-0.09,0.21l0.02,2.73l0.71,2.63l-1.33,0.94l-0.12,0.17l-0.67,2.64l-0.59,3.03l0.4,3.55l-0.84,0.51l-0.14,0.31l0.58,3.5l0.08,0.16l0.96,0.99l-0.7,1.08l0.11,0.43l1.04,0.55l0.19,0.8l-0.89,0.48l-0.16,0.31l0.26,1.77l-0.89,4.06l-1.31,2.67l-0.03,0.19l0.28,1.53l-0.73,1.88l-1.85,1.37l-0.12,0.26l0.22,3.46l0.06,0.16l0.88,1.19l0.28,0.12l1.32,-0.17l-0.04,2.13l0.04,0.15l1.04,1.95l0.24,0.16l5.94,0.44ZM248.79,430.71l0.0,7.41l0.3,0.3l2.67,0.0l1.01,0.06l-0.54,0.91l-1.99,1.01l-1.13,-0.1l-1.42,-0.27l-1.87,-1.06l-2.57,-0.49l-3.09,-1.9l-2.52,-1.83l-2.65,-2.93l0.93,0.32l3.54,2.29l3.32,1.23l0.34,-0.09l1.29,-1.57l0.83,-2.32l2.11,-1.28l1.43,0.32Z", "name": "Chile"}, "CA": {"path": "M280.14,145.66l-1.66,2.88l0.06,0.37l0.37,0.03l1.5,-1.01l1.17,0.49l-0.64,0.83l0.13,0.46l2.22,0.89l0.28,-0.03l1.02,-0.7l2.09,0.83l-0.69,2.1l0.37,0.38l1.43,-0.45l0.27,1.43l0.74,1.88l-0.95,2.5l-0.88,0.09l-1.34,-0.48l0.49,-2.34l-0.14,-0.32l-0.7,-0.4l-0.36,0.04l-2.81,2.66l-0.63,-0.05l1.2,-1.01l-0.1,-0.52l-2.4,-0.77l-2.79,0.18l-4.65,-0.09l-0.22,-0.54l1.37,-0.99l0.01,-0.48l-0.82,-0.65l1.91,-1.79l2.57,-5.17l1.49,-1.81l2.04,-1.07l0.63,0.08l-0.27,0.51l-1.33,2.07ZM193.92,74.85l-0.01,4.24l0.19,0.28l0.33,-0.07l3.14,-3.22l2.65,2.5l-0.71,3.04l0.06,0.26l2.42,2.88l0.46,0.0l2.66,-3.14l1.83,-3.74l0.03,-0.12l0.13,-4.53l3.23,0.31l3.63,0.64l3.18,2.08l0.13,1.91l-1.79,2.22l-0.0,0.37l1.69,2.2l-0.28,1.8l-4.74,2.84l-3.33,0.62l-2.5,-1.21l-0.41,0.17l-0.73,2.05l-2.39,3.44l-0.74,1.78l-2.78,2.61l-3.48,0.26l-0.17,0.07l-1.98,1.68l-0.1,0.21l-0.15,2.33l-2.68,0.45l-0.17,0.09l-3.1,3.2l-2.75,4.38l-0.99,3.06l-0.14,4.31l0.25,0.31l3.5,0.58l1.07,3.24l1.18,2.76l0.34,0.18l3.43,-0.69l4.55,1.52l2.45,1.32l1.76,1.65l0.12,0.07l3.11,0.96l2.63,1.46l0.13,0.04l4.12,0.2l2.41,0.3l-0.36,2.81l0.8,3.51l1.81,3.78l0.08,0.1l3.73,3.17l0.34,0.03l1.93,-1.08l0.13,-0.15l1.35,-3.44l0.01,-0.18l-1.31,-5.38l-0.08,-0.14l-1.46,-1.5l3.68,-1.51l2.84,-2.46l1.45,-2.55l0.04,-0.17l-0.2,-2.39l-0.04,-0.12l-1.7,-3.07l-2.9,-2.64l2.79,-3.66l0.05,-0.27l-1.08,-3.38l-0.8,-5.75l1.45,-0.75l4.18,1.03l2.6,0.38l0.18,-0.03l1.93,-0.95l2.18,1.23l3.01,2.18l0.73,1.42l0.25,0.16l4.18,0.27l-0.06,2.95l0.83,4.7l0.22,0.24l2.19,0.55l1.75,2.08l0.38,0.07l3.63,-2.03l0.11,-0.11l2.38,-4.06l1.36,-1.43l1.76,3.01l3.26,4.68l2.68,4.19l-0.94,2.09l0.12,0.38l3.31,1.98l2.23,1.98l0.13,0.07l3.94,0.89l1.48,1.02l0.96,2.82l0.22,0.2l1.85,0.43l0.88,1.13l0.17,3.53l-1.68,1.16l-1.76,1.14l-4.08,1.17l-0.11,0.06l-3.08,2.65l-4.11,0.52l-5.35,-0.69l-3.76,-0.02l-2.62,0.23l-0.2,0.1l-2.05,2.29l-3.13,1.41l-0.11,0.08l-3.6,4.24l-2.87,2.92l-0.05,0.36l0.33,0.14l2.13,-0.52l0.15,-0.08l3.98,-4.15l5.16,-2.63l3.58,-0.31l1.82,1.3l-2.09,1.91l-0.09,0.29l0.8,3.46l0.82,2.37l0.15,0.17l3.25,1.56l0.16,0.03l4.14,-0.45l0.21,-0.12l2.03,-2.86l0.11,1.46l0.13,0.22l1.26,0.88l-2.7,1.78l-5.51,1.83l-2.52,1.26l-2.75,2.16l-1.52,-0.18l-0.08,-2.16l4.19,-2.47l0.14,-0.34l-0.3,-0.22l-4.01,0.1l-2.66,0.36l-1.45,-1.56l0.0,-4.16l-0.11,-0.23l-1.11,-0.91l-0.28,-0.05l-1.5,0.48l-0.7,-0.7l-0.45,0.02l-1.91,2.39l-0.8,2.5l-0.82,1.31l-0.95,0.43l-0.77,0.15l-0.23,0.2l-0.18,0.56l-8.2,0.02l-0.13,0.03l-1.19,0.61l-2.95,2.45l-0.78,1.13l-4.6,0.01l-0.12,0.02l-1.13,0.48l-0.13,0.44l0.37,0.55l0.2,0.82l-0.01,0.09l-3.1,1.42l-2.63,0.5l-2.84,1.57l-0.47,0.0l-0.72,-0.4l-0.18,-0.27l0.03,-0.15l0.52,-1.0l1.2,-1.71l0.73,-1.8l0.02,-0.17l-1.03,-5.47l-0.15,-0.21l-2.35,-1.32l0.16,-0.29l-0.05,-0.35l-0.37,-0.38l-0.22,-0.09l-0.56,0.0l-0.35,-0.34l-0.11,-0.65l-0.46,-0.2l-0.39,0.26l-0.2,-0.03l-0.11,-0.33l-0.48,-0.25l-0.21,-0.71l-0.15,-0.18l-3.97,-2.07l-4.8,-2.39l-0.25,-0.01l-2.19,0.89l-0.72,0.03l-3.04,-0.82l-0.14,-0.0l-1.94,0.4l-2.4,-0.98l-2.56,-0.51l-1.7,-0.19l-0.62,-0.44l-0.42,-1.67l-0.3,-0.23l-0.85,0.02l-0.29,0.3l-0.01,0.95l-69.26,-0.01l-4.77,-3.14l-1.78,-1.41l-4.51,-1.38l-1.3,-2.73l0.34,-1.96l-0.17,-0.33l-3.06,-1.37l-0.41,-2.58l-0.11,-0.18l-2.92,-2.4l-0.05,-1.53l1.32,-1.59l0.07,-0.2l-0.07,-2.21l-0.16,-0.26l-4.19,-2.22l-2.52,-4.02l-1.56,-2.6l-0.08,-0.09l-2.28,-1.64l-1.65,-1.48l-1.31,-1.89l-0.38,-0.1l-2.51,1.21l-2.28,1.92l-2.03,-2.22l-1.85,-1.71l-2.44,-1.04l-2.28,-0.12l0.03,-37.72l4.27,0.98l4.0,2.13l2.61,0.4l0.24,-0.07l2.17,-1.81l2.92,-1.33l3.63,0.53l0.18,-0.03l3.72,-1.94l3.89,-1.06l1.6,1.72l0.37,0.06l1.87,-1.04l0.14,-0.19l0.48,-1.83l1.37,0.38l4.18,3.96l0.41,0.0l2.89,-2.62l0.28,2.79l0.37,0.26l3.08,-0.73l0.17,-0.12l0.85,-1.16l2.81,0.24l3.83,1.86l5.86,1.61l3.46,0.75l2.44,-0.26l2.89,1.89l-3.12,1.89l-0.14,0.31l0.24,0.24l4.53,0.92l6.84,-0.5l2.04,-0.71l2.54,2.44l0.39,0.02l2.72,-2.16l-0.01,-0.48l-2.26,-1.61l1.27,-1.16l2.94,-0.19l1.94,-0.42l1.89,0.97l2.49,2.32l0.24,0.08l2.71,-0.33l4.35,1.9l0.17,0.02l3.86,-0.67l3.62,0.1l0.31,-0.33l-0.26,-2.44l1.9,-0.65l3.58,1.36l-0.01,3.84l0.23,0.29l0.34,-0.17l1.51,-3.23l1.81,0.1l0.31,-0.22l1.13,-4.37l-0.08,-0.29l-2.68,-2.73l-2.83,-1.76l0.19,-4.73l2.77,-3.15l3.06,0.69l2.44,1.97l3.24,4.88l-2.05,2.02l0.15,0.51l4.41,0.85ZM265.85,150.7l-0.84,0.04l-3.15,-0.99l-1.77,-1.17l0.19,-0.06l3.17,0.79l2.39,1.27l0.01,0.12ZM249.41,3.71l6.68,0.49l5.34,0.79l4.34,1.6l-0.08,1.24l-5.91,2.56l-6.03,1.21l-2.36,1.38l-0.14,0.34l0.29,0.22l4.37,-0.02l-4.96,3.01l-4.06,1.64l-0.11,0.08l-4.21,4.62l-5.07,0.92l-0.12,0.05l-1.53,1.1l-7.5,0.59l-0.28,0.28l0.24,0.31l2.67,0.54l-1.04,0.6l-0.09,0.44l1.89,2.49l-2.11,1.66l-3.83,1.52l-0.15,0.13l-1.14,2.01l-3.41,1.55l-0.16,0.36l0.35,1.19l0.3,0.22l3.98,-0.19l0.03,0.78l-6.42,2.99l-6.44,-1.41l-7.41,0.79l-3.72,-0.62l-4.48,-0.26l-0.25,-2.0l4.37,-1.13l0.21,-0.38l-1.14,-3.55l1.13,-0.28l6.61,2.29l0.35,-0.12l-0.04,-0.37l-3.41,-3.45l-0.14,-0.08l-3.57,-0.92l1.62,-1.7l4.36,-1.3l0.2,-0.18l0.71,-1.94l-0.12,-0.36l-3.45,-2.15l-0.88,-2.43l6.36,0.23l1.94,0.61l0.23,-0.02l3.91,-2.1l0.15,-0.32l-0.26,-0.24l-5.69,-0.67l-8.69,0.37l-4.3,-1.92l-2.12,-2.39l-2.82,-1.68l-0.44,-1.65l3.41,-1.06l2.93,-0.2l4.91,-0.99l3.69,-2.28l2.93,0.31l2.64,1.68l0.42,-0.1l1.84,-3.23l3.17,-0.96l4.45,-0.69l7.56,-0.26l1.26,0.64l0.18,0.03l7.2,-1.06l10.81,0.8ZM203.94,57.59l0.01,0.32l1.97,2.97l0.51,-0.01l2.26,-3.75l6.05,-1.89l4.08,4.72l-0.36,2.95l0.38,0.33l4.95,-1.36l0.11,-0.05l2.23,-1.77l5.37,2.31l3.32,2.14l0.3,1.89l0.36,0.25l4.48,-1.01l2.49,2.8l0.14,0.09l5.99,1.78l2.09,1.74l2.18,3.83l-4.29,1.91l-0.01,0.54l5.9,2.83l3.95,0.94l3.54,3.84l0.2,0.1l3.58,0.25l-0.67,2.51l-4.18,4.54l-2.84,-1.61l-3.91,-3.95l-0.26,-0.09l-3.24,0.52l-0.25,0.26l-0.32,2.37l0.1,0.26l2.63,2.38l3.42,1.89l0.96,1.0l1.57,3.8l-0.74,2.43l-2.85,-0.96l-6.26,-3.15l-0.38,0.09l0.04,0.39l3.54,3.4l2.55,2.31l0.23,0.78l-6.26,-1.43l-5.33,-2.25l-2.73,-1.73l0.67,-0.86l-0.09,-0.45l-7.38,-4.01l-0.44,0.27l0.03,0.89l-6.85,0.61l-1.8,-1.17l1.43,-2.6l4.56,-0.07l5.15,-0.52l0.23,-0.45l-0.76,-1.34l0.8,-1.89l3.21,-4.06l0.05,-0.29l-0.72,-1.95l-0.97,-1.47l-0.11,-0.1l-3.84,-2.1l-4.53,-1.33l1.09,-0.75l0.05,-0.45l-2.65,-2.75l-0.18,-0.09l-2.12,-0.24l-1.91,-1.47l-0.39,0.02l-1.27,1.25l-4.4,0.56l-9.06,-0.99l-5.28,-1.31l-4.01,-0.67l-1.72,-1.31l2.32,-1.85l0.1,-0.33l-0.28,-0.2l-3.3,-0.02l-0.74,-4.36l1.86,-4.09l2.46,-1.88l5.74,-1.15l-1.5,2.55ZM261.28,159.28l0.19,0.14l1.82,0.42l1.66,-0.05l-0.66,0.68l-0.75,0.16l-3.0,-1.25l-0.46,-0.77l0.51,-0.52l0.68,1.19ZM230.87,84.48l-2.48,0.19l-0.52,-1.74l0.96,-2.17l2.03,-0.53l1.71,1.04l0.02,1.6l-0.22,0.46l-1.5,1.16ZM229.52,58.19l0.14,0.82l-4.99,-0.22l-2.73,0.63l-0.59,-0.23l-2.61,-2.4l0.08,-1.38l0.94,-0.25l5.61,0.51l4.14,2.54ZM222.12,105.0l-0.79,1.63l-0.75,-0.22l-0.52,-0.91l0.04,-0.09l0.84,-1.01l0.74,0.06l0.44,0.55ZM183.77,38.22l2.72,1.65l0.16,0.04l4.83,-0.01l1.92,1.52l-0.51,1.75l0.18,0.36l2.84,1.14l1.56,1.19l0.16,0.06l3.37,0.22l3.65,0.42l4.07,-1.1l5.05,-0.43l3.96,0.35l2.53,1.8l0.48,1.79l-1.37,1.16l-3.6,1.03l-3.22,-0.59l-7.17,0.76l-5.1,0.09l-4.0,-0.6l-6.48,-1.56l-0.81,-2.57l-0.3,-2.49l-0.1,-0.19l-2.51,-2.25l-0.16,-0.07l-5.12,-0.63l-2.61,-1.45l0.75,-1.71l4.88,0.32ZM207.46,91.26l0.42,1.62l0.42,0.19l1.12,-0.55l1.35,0.99l2.74,1.39l2.73,1.2l0.2,1.74l0.35,0.26l1.72,-0.29l1.31,0.97l-1.72,0.96l-3.68,-0.9l-1.34,-1.71l-0.43,-0.04l-2.46,2.1l-3.23,1.85l-0.74,-1.98l-0.31,-0.19l-2.47,0.28l1.49,-1.34l0.1,-0.19l0.32,-3.15l0.79,-3.45l1.34,0.25ZM215.59,102.66l-2.73,2.0l-1.49,-0.08l-0.37,-0.7l1.61,-1.56l3.0,0.03l-0.02,0.3ZM202.79,24.07l0.11,0.12l2.54,1.53l-3.01,1.47l-4.55,4.07l-4.3,0.38l-5.07,-0.68l-2.51,-2.09l0.03,-1.72l1.86,-1.4l0.1,-0.34l-0.29,-0.2l-4.49,0.04l-2.63,-1.79l-1.45,-2.36l1.61,-2.38l1.65,-1.69l2.47,-0.4l0.19,-0.48l-0.72,-0.89l5.1,-0.26l3.1,3.05l0.13,0.07l4.21,1.25l3.99,1.06l1.92,3.65ZM187.5,59.3l-0.15,0.1l-2.59,3.4l-2.5,-0.15l-1.47,-3.92l0.04,-2.24l1.22,-1.92l2.34,-1.26l5.11,0.17l4.28,1.06l-3.36,3.86l-2.9,0.9ZM186.19,48.8l-1.15,1.63l-3.42,-0.35l-2.68,-1.15l1.11,-1.88l3.34,-1.27l2.01,1.63l0.79,1.38ZM185.78,35.41l-0.95,0.13l-4.48,-0.33l-0.4,-0.91l4.5,0.07l1.45,0.82l-0.1,0.21ZM180.76,32.56l-3.43,1.03l-1.85,-1.14l-1.01,-1.92l-0.16,-1.87l2.87,0.2l1.39,0.35l2.75,1.75l-0.55,1.6ZM181.03,76.32l-1.21,1.2l-3.19,-1.26l-0.18,-0.01l-1.92,0.45l-2.88,-1.67l1.84,-1.16l1.6,-1.77l2.45,1.17l1.45,0.77l2.05,2.28ZM169.72,54.76l2.83,0.97l0.14,0.01l4.25,-0.58l0.47,1.01l-2.19,2.16l0.07,0.48l3.61,1.95l-0.41,3.84l-3.87,1.68l-2.23,-0.36l-1.73,-1.75l-6.07,-3.53l0.03,-1.01l4.79,0.55l0.3,-0.16l-0.04,-0.34l-2.55,-2.89l2.59,-2.05ZM174.44,40.56l1.49,1.87l0.07,2.48l-1.07,3.52l-3.87,0.48l-2.41,-0.72l0.05,-2.72l-0.33,-0.3l-3.79,0.36l-0.13,-3.31l2.36,0.14l0.15,-0.03l3.7,-1.74l3.44,0.29l0.31,-0.22l0.03,-0.12ZM170.14,31.5l0.75,1.74l-3.52,-0.52l-4.19,-1.77l-4.65,-0.17l1.65,-1.11l-0.05,-0.52l-2.86,-1.26l-0.13,-1.58l4.52,0.7l6.66,1.99l1.84,2.5ZM134.64,58.08l-1.08,1.93l0.34,0.44l5.44,-1.41l3.37,2.32l0.37,-0.02l2.66,-2.28l2.03,1.38l2.01,4.53l0.53,0.04l1.26,-1.93l0.03,-0.27l-1.67,-4.55l1.82,-0.58l2.36,0.73l2.69,1.84l1.53,4.46l0.77,3.24l0.15,0.19l4.22,2.26l4.32,2.04l-0.21,1.51l-3.87,0.34l-0.19,0.5l1.45,1.54l-0.65,1.23l-4.3,-0.65l-4.4,-1.19l-2.97,0.28l-4.67,1.48l-6.31,0.65l-4.27,0.39l-1.26,-1.91l-0.15,-0.12l-3.42,-1.2l-0.16,-0.01l-2.05,0.45l-2.66,-3.02l1.2,-0.34l3.82,-0.76l3.58,0.19l3.27,-0.78l0.23,-0.29l-0.24,-0.29l-4.84,-1.06l-5.42,0.35l-3.4,-0.09l-0.97,-1.22l5.39,-1.7l0.21,-0.33l-0.3,-0.25l-3.82,0.06l-3.95,-1.1l1.88,-3.13l1.68,-1.81l6.54,-2.84l2.11,0.77ZM158.85,56.58l-1.82,2.62l-3.38,-2.9l0.49,-0.39l3.17,-0.18l1.54,0.86ZM149.71,42.7l1.0,1.87l0.37,0.14l2.17,-0.83l2.33,0.2l0.38,2.16l-1.38,2.17l-8.33,0.76l-6.34,2.15l-3.51,0.1l-0.22,-1.13l4.98,-2.12l0.17,-0.34l-0.31,-0.23l-11.27,0.6l-3.04,-0.78l3.14,-4.57l2.2,-1.35l6.87,1.7l4.4,3.0l0.14,0.05l4.37,0.39l0.27,-0.48l-3.41,-4.68l1.96,-1.62l2.28,0.53l0.79,2.32ZM145.44,29.83l-2.18,0.77l-3.79,-0.0l0.02,-0.31l2.34,-1.5l1.2,0.23l2.42,0.83ZM144.83,34.5l-4.44,1.46l-3.18,-1.48l1.6,-1.36l3.51,-0.53l3.1,0.75l-0.6,1.16ZM119.02,65.87l-6.17,2.07l-1.19,-1.82l-0.13,-0.11l-5.48,-2.32l0.92,-1.7l1.73,-3.44l2.16,-3.15l-0.02,-0.36l-2.09,-2.56l7.84,-0.71l3.59,1.02l6.32,0.27l2.35,1.37l2.25,1.71l-2.68,1.04l-6.21,3.41l-3.1,3.28l-0.08,0.21l0.0,1.81ZM129.66,35.4l-0.3,3.55l-1.77,1.67l-2.34,0.27l-4.62,2.2l-3.89,0.76l-2.83,-0.93l3.85,-3.52l5.04,-3.36l3.75,0.07l3.11,-0.7ZM111.24,152.74l-0.82,0.29l-3.92,-1.39l-0.7,-1.06l-0.12,-0.1l-2.15,-1.09l-0.41,-0.84l-0.2,-0.16l-2.44,-0.56l-0.84,-1.56l0.1,-0.36l2.34,0.64l1.53,0.5l2.28,0.34l0.78,1.04l1.24,1.55l0.09,0.08l2.42,1.3l0.81,1.39ZM88.54,134.82l0.14,0.02l2.0,-0.23l-0.67,3.48l0.06,0.24l1.78,2.22l-0.24,-0.0l-1.4,-1.42l-0.91,-1.53l-1.26,-1.08l-0.42,-1.35l0.09,-0.66l0.82,0.31Z", "name": "Canada"}, "CG": {"path": "M453.66,296.61l-0.9,-0.82l-0.35,-0.04l-0.83,0.48l-0.77,0.83l-1.65,-2.13l1.66,-1.2l0.08,-0.39l-0.81,-1.43l0.59,-0.43l1.62,-0.29l0.24,-0.24l0.1,-0.58l0.94,0.84l0.19,0.08l2.21,0.11l0.27,-0.14l0.81,-1.29l0.32,-1.76l-0.27,-1.96l-0.06,-0.15l-1.08,-1.35l1.02,-2.74l-0.09,-0.34l-0.62,-0.5l-0.22,-0.06l-1.66,0.18l-0.55,-1.03l0.12,-0.73l2.85,0.09l1.98,0.65l2.0,0.59l0.38,-0.25l0.17,-1.3l1.26,-2.24l1.34,-1.19l1.54,0.38l1.35,0.12l-0.11,1.15l-0.74,1.34l-0.5,1.61l-0.31,2.22l0.12,1.41l-0.4,0.9l-0.06,0.88l-0.24,0.67l-1.57,1.15l-1.24,1.41l-1.09,2.43l-0.03,0.13l0.08,1.95l-0.55,0.69l-1.46,1.23l-1.32,1.41l-0.61,-0.29l-0.13,-0.57l-0.29,-0.23l-1.36,-0.02l-0.23,0.1l-0.72,0.81l-0.41,-0.16Z", "name": "Republic of the Congo"}, "CF": {"path": "M459.41,266.56l1.9,-0.17l0.22,-0.12l0.36,-0.5l0.14,0.02l0.55,0.51l0.29,0.07l3.15,-0.96l0.12,-0.07l1.05,-0.97l1.29,-0.87l0.12,-0.33l-0.17,-0.61l0.38,-0.12l2.36,0.15l0.15,-0.03l2.36,-1.17l0.12,-0.1l1.78,-2.72l1.18,-0.96l1.23,-0.34l0.21,0.79l0.07,0.13l1.37,1.5l0.01,0.86l-0.39,1.0l-0.01,0.17l0.16,0.78l0.1,0.17l0.91,0.76l1.89,1.09l1.24,0.92l0.02,0.67l0.12,0.23l1.67,1.3l0.99,1.03l0.61,1.46l0.14,0.15l1.79,0.95l0.2,0.4l-0.44,0.14l-1.54,-0.06l-1.98,-0.26l-0.93,0.22l-0.19,0.14l-0.3,0.48l-0.57,0.05l-0.91,-0.49l-0.26,-0.01l-2.7,1.21l-1.04,-0.23l-0.21,0.03l-0.34,0.19l-0.12,0.13l-0.64,1.3l-1.67,-0.43l-1.77,-0.24l-1.58,-0.91l-2.06,-0.85l-0.27,0.02l-1.42,0.88l-0.97,1.27l-0.06,0.14l-0.19,1.46l-1.3,-0.11l-1.67,-0.42l-0.27,0.07l-1.55,1.41l-0.99,1.76l-0.14,-1.18l-0.13,-0.22l-1.1,-0.78l-0.86,-1.2l-0.2,-0.84l-0.07,-0.13l-1.07,-1.19l0.16,-0.59l0.0,-0.15l-0.24,-1.01l0.18,-1.77l0.5,-0.38l0.09,-0.11l1.18,-2.4Z", "name": "Central African Republic"}, "CD": {"path": "M497.85,276.25l-0.14,2.77l0.2,0.3l0.57,0.19l-0.47,0.52l-1.0,0.71l-0.96,1.31l-0.56,1.22l-0.16,2.04l-0.54,0.89l-0.04,0.15l-0.02,1.76l-0.63,0.61l-0.09,0.2l-0.08,1.33l-0.2,0.11l-0.15,0.21l-0.23,1.37l0.03,0.2l0.6,1.08l0.16,2.96l0.44,2.29l-0.24,1.25l0.01,0.15l0.5,1.46l0.07,0.12l1.41,1.37l1.09,2.56l-0.51,-0.11l-3.45,0.45l-0.67,0.3l-0.15,0.15l-0.71,1.61l0.01,0.26l0.52,1.03l-0.43,2.9l-0.31,2.55l0.13,0.29l0.7,0.46l1.75,0.99l0.31,-0.01l0.26,-0.17l0.15,1.9l-1.44,-0.02l-0.94,-1.28l-0.94,-1.1l-0.17,-0.1l-1.76,-0.33l-0.5,-1.18l-0.42,-0.15l-1.44,0.75l-1.79,-0.32l-0.77,-1.05l-0.2,-0.12l-1.59,-0.23l-0.97,0.04l-0.1,-0.53l-0.27,-0.25l-0.86,-0.06l-1.13,-0.15l-1.62,0.37l-1.04,-0.06l-0.32,0.09l0.11,-2.56l-0.08,-0.21l-0.77,-0.87l-0.17,-1.41l0.36,-1.47l-0.03,-0.21l-0.48,-0.91l-0.04,-1.52l-0.3,-0.29l-2.65,0.02l0.13,-0.53l-0.29,-0.37l-1.28,0.01l-0.28,0.21l-0.07,0.24l-1.35,0.09l-0.26,0.18l-0.62,1.45l-0.25,0.42l-1.17,-0.3l-0.19,0.01l-0.79,0.34l-1.44,0.18l-1.41,-1.96l-0.7,-1.47l-0.61,-1.86l-0.28,-0.21l-7.39,-0.03l-0.92,0.3l-0.78,-0.03l-0.78,0.25l-0.11,-0.25l0.35,-0.15l0.18,-0.26l0.07,-1.02l0.33,-0.52l0.72,-0.42l0.52,0.2l0.33,-0.08l0.76,-0.86l0.99,0.02l0.11,0.48l0.16,0.2l0.94,0.44l0.35,-0.07l1.46,-1.56l1.44,-1.21l0.68,-0.85l0.06,-0.2l-0.08,-1.99l1.04,-2.33l1.1,-1.23l1.62,-1.19l0.11,-0.14l0.29,-0.8l0.08,-0.94l0.38,-0.82l0.03,-0.16l-0.13,-1.38l0.3,-2.16l0.47,-1.51l0.73,-1.31l0.04,-0.12l0.15,-1.51l0.21,-1.66l0.89,-1.16l1.16,-0.7l1.9,0.79l1.69,0.95l1.81,0.24l1.85,0.48l0.35,-0.16l0.71,-1.43l0.16,-0.09l1.03,0.23l0.19,-0.02l2.65,-1.19l0.86,0.46l0.17,0.03l0.81,-0.08l0.23,-0.14l0.31,-0.5l0.75,-0.17l1.83,0.26l1.64,0.06l0.72,-0.21l1.39,1.9l0.16,0.11l1.12,0.3l0.24,-0.04l0.58,-0.36l1.05,0.15l0.15,-0.02l1.15,-0.44l0.47,0.84l0.08,0.09l2.08,1.57Z", "name": "Democratic Republic of the Congo"}, "CZ": {"path": "M463.29,152.22l-0.88,-0.47l-0.18,-0.03l-1.08,0.15l-1.86,-0.94l-0.21,-0.02l-0.88,0.24l-0.13,0.07l-1.25,1.17l-1.63,-0.91l-1.38,-1.36l-1.22,-0.75l-0.24,-1.24l-0.33,-0.75l1.53,-0.6l0.98,-0.84l1.74,-0.62l0.11,-0.07l0.47,-0.47l0.46,0.27l0.24,0.03l0.96,-0.3l1.06,0.95l0.15,0.07l1.57,0.24l-0.1,0.6l0.16,0.32l1.36,0.68l0.41,-0.15l0.28,-0.62l1.29,0.28l0.19,0.84l0.26,0.23l1.73,0.18l0.74,1.02l-0.17,0.0l-0.25,0.13l-0.32,0.49l-0.46,0.11l-0.22,0.23l-0.13,0.57l-0.32,0.1l-0.2,0.22l-0.03,0.14l-0.65,0.25l-1.05,-0.05l-0.28,0.17l-0.22,0.43Z", "name": "Czech Republic"}, "CY": {"path": "M505.03,193.75l-1.51,0.68l-1.0,-0.3l-0.32,-0.63l0.69,-0.06l0.41,0.13l0.19,-0.0l0.62,-0.22l0.31,0.02l0.06,0.22l0.49,0.17l0.06,-0.01Z", "name": "Cyprus"}, "CR": {"path": "M213.0,263.84l-0.98,-0.4l-0.3,-0.31l0.16,-0.24l0.05,-0.21l-0.09,-0.56l-0.1,-0.18l-0.76,-0.65l-0.99,-0.5l-0.74,-0.28l-0.13,-0.58l-0.12,-0.18l-0.66,-0.45l-0.34,-0.0l-0.13,0.31l0.13,0.59l-0.17,0.21l-0.34,-0.42l-0.14,-0.1l-0.7,-0.22l-0.23,-0.34l0.01,-0.62l0.31,-0.74l-0.14,-0.38l-0.3,-0.15l0.47,-0.4l1.48,0.6l0.26,-0.02l0.47,-0.27l0.58,0.15l0.35,0.44l0.17,0.11l0.74,0.17l0.27,-0.07l0.3,-0.27l0.52,1.09l0.97,1.02l0.77,0.71l-0.41,0.1l-0.23,0.3l0.01,1.02l0.12,0.24l0.2,0.14l-0.07,0.05l-0.11,0.3l0.08,0.37l-0.23,0.63Z", "name": "Costa Rica"}, "CU": {"path": "M215.01,226.09l2.08,0.18l1.94,0.03l2.24,0.86l0.95,0.92l0.25,0.08l2.22,-0.28l0.79,0.55l3.68,2.81l0.19,0.06l0.77,-0.03l1.18,0.42l-0.12,0.47l0.27,0.37l1.78,0.1l1.59,0.9l-0.11,0.22l-1.5,0.3l-1.64,0.13l-1.75,-0.2l-2.69,0.19l1.0,-0.86l-0.03,-0.48l-1.02,-0.68l-0.13,-0.05l-1.52,-0.16l-0.74,-0.64l-0.57,-1.42l-0.3,-0.19l-1.36,0.1l-2.23,-0.67l-0.71,-0.52l-0.14,-0.06l-3.2,-0.4l-0.42,-0.25l0.56,-0.39l0.12,-0.33l-0.27,-0.22l-2.46,-0.13l-0.2,0.06l-1.72,1.31l-0.94,0.03l-0.25,0.15l-0.29,0.53l-1.04,0.24l-0.29,-0.07l0.7,-0.43l0.1,-0.11l0.5,-0.87l1.04,-0.54l1.23,-0.49l1.86,-0.25l0.62,-0.28Z", "name": "Cuba"}, "SZ": {"path": "M500.95,353.41l-0.41,0.97l-1.16,0.23l-1.29,-1.26l-0.02,-0.71l0.63,-0.93l0.23,-0.7l0.47,-0.12l1.04,0.4l0.32,1.05l0.2,1.08Z", "name": "Swaziland"}, "SY": {"path": "M510.84,199.83l0.09,-0.11l0.07,-0.2l-0.04,-1.08l0.56,-1.4l1.3,-1.01l0.1,-0.34l-0.41,-1.11l-0.24,-0.19l-0.89,-0.11l-0.2,-1.84l0.55,-1.05l1.3,-1.22l0.09,-0.19l0.09,-1.09l0.39,0.27l0.25,0.04l2.66,-0.77l1.35,0.52l2.06,-0.01l2.93,-1.08l1.35,0.04l2.14,-0.34l-0.83,1.16l-1.31,0.68l-0.16,0.3l0.23,2.03l-0.9,3.25l-5.43,2.87l-4.79,2.91l-2.32,-0.92Z", "name": "Syria"}, "KG": {"path": "M599.04,172.15l0.38,-0.9l1.43,-0.37l4.04,1.02l0.37,-0.23l0.36,-1.64l1.17,-0.52l3.45,1.24l0.2,-0.0l0.86,-0.31l4.09,0.08l3.61,0.31l1.18,1.02l0.11,0.06l1.19,0.34l-0.13,0.26l-3.84,1.58l-0.13,0.1l-0.81,1.08l-3.08,0.34l-0.24,0.16l-0.85,1.7l-2.43,-0.37l-0.14,0.01l-1.79,0.61l-2.39,1.4l-0.12,0.39l0.25,0.49l-0.48,0.45l-4.57,0.43l-3.04,-0.94l-2.45,0.18l0.14,-1.02l2.42,0.44l0.27,-0.08l0.81,-0.81l1.76,0.27l0.21,-0.05l3.21,-2.14l-0.03,-0.51l-2.97,-1.57l-0.26,-0.01l-1.64,0.69l-1.38,-0.84l1.81,-1.67l-0.09,-0.5l-0.46,-0.18Z", "name": "Kyrgyzstan"}, "KE": {"path": "M523.3,287.04l0.06,0.17l1.29,1.8l-1.46,0.84l-0.11,0.11l-0.55,0.93l-0.81,0.16l-0.24,0.24l-0.34,1.69l-0.81,1.06l-0.46,1.58l-0.76,0.63l-3.3,-2.3l-0.16,-1.32l-0.15,-0.23l-9.35,-5.28l-0.02,-2.4l1.92,-2.63l0.91,-1.83l0.01,-0.24l-1.09,-2.86l-0.29,-1.24l-1.09,-1.63l2.93,-2.85l0.92,0.3l0.0,1.19l0.09,0.22l0.86,0.83l0.21,0.08l1.65,0.0l3.09,2.08l0.16,0.05l0.79,0.03l0.54,-0.06l0.58,0.28l1.67,0.2l0.28,-0.12l0.69,-0.98l2.04,-0.94l0.86,0.73l0.19,0.07l1.1,0.0l-1.82,2.36l-0.06,0.18l0.03,9.12Z", "name": "Kenya"}, "SS": {"path": "M505.7,261.39l0.02,1.64l-0.27,0.55l-1.15,0.05l-0.24,0.15l-0.85,1.44l0.22,0.45l1.44,0.17l1.15,1.12l0.42,0.95l0.14,0.15l1.06,0.54l1.33,2.45l-3.06,2.98l-1.44,1.08l-1.75,0.01l-1.92,0.56l-1.5,-0.53l-0.27,0.03l-0.85,0.57l-1.98,-1.5l-0.56,-1.02l-0.37,-0.13l-1.32,0.5l-1.08,-0.15l-0.2,0.04l-0.56,0.35l-0.9,-0.24l-1.44,-1.97l-0.39,-0.77l-0.13,-0.13l-1.78,-0.94l-0.65,-1.5l-1.08,-1.12l-1.57,-1.22l-0.02,-0.68l-0.12,-0.23l-1.37,-1.02l-1.17,-0.68l0.2,-0.08l0.86,-0.48l0.14,-0.18l0.63,-2.22l0.6,-1.02l1.47,-0.28l0.35,0.56l1.29,1.48l0.14,0.09l0.69,0.22l0.22,-0.02l0.83,-0.4l1.58,0.08l0.26,0.39l0.25,0.13l2.49,0.0l0.3,-0.25l0.06,-0.35l1.13,-0.42l0.18,-0.18l0.22,-0.63l0.68,-0.38l1.95,1.37l0.23,0.05l1.29,-0.26l0.19,-0.12l1.23,-1.8l1.36,-1.37l0.08,-0.25l-0.21,-1.52l-0.06,-0.15l-0.25,-0.3l0.94,-0.08l0.26,-0.21l0.1,-0.32l0.6,0.09l-0.25,1.67l0.3,1.83l0.11,0.19l1.22,0.94l0.25,0.73l-0.04,1.2l0.26,0.31l0.09,0.01Z", "name": "South Sudan"}, "SR": {"path": "M278.1,270.26l2.71,0.45l0.31,-0.14l0.19,-0.32l1.82,-0.16l2.25,0.56l-1.09,1.81l-0.04,0.19l0.2,1.72l0.05,0.13l0.9,1.35l-0.39,0.99l-0.21,1.09l-0.48,0.8l-1.2,-0.44l-0.17,-0.01l-1.12,0.24l-0.95,-0.21l-0.35,0.2l-0.25,0.73l0.05,0.29l0.3,0.35l-0.06,0.13l-1.01,-0.15l-1.42,-2.03l-0.32,-1.36l-0.29,-0.23l-0.63,-0.0l-0.95,-1.56l0.41,-1.16l0.01,-0.17l-0.08,-0.35l1.29,-0.56l0.18,-0.22l0.35,-1.97Z", "name": "Suriname"}, "KH": {"path": "M680.28,257.89l-0.93,-1.2l-1.24,-2.56l-0.56,-2.9l1.45,-1.92l3.07,-0.46l2.26,0.35l2.03,0.98l0.38,-0.11l1.0,-1.55l1.86,0.79l0.52,1.51l-0.28,2.82l-4.05,1.88l-0.12,0.45l0.79,1.1l-2.2,0.17l-2.08,0.98l-1.89,-0.33Z", "name": "Cambodia"}, "SV": {"path": "M197.02,248.89l0.18,-0.05l0.59,0.17l0.55,0.51l0.64,0.35l0.06,0.22l0.37,0.21l1.01,-0.28l0.38,0.13l0.16,0.13l-0.14,0.81l-0.18,0.38l-1.22,-0.03l-0.84,-0.23l-1.11,-0.52l-1.31,-0.15l-0.49,-0.38l0.02,-0.08l0.76,-0.57l0.46,-0.27l0.11,-0.35Z", "name": "El Salvador"}, "SK": {"path": "M468.01,150.02l0.05,0.07l0.36,0.1l0.85,-0.37l1.12,1.02l0.33,0.05l1.38,-0.65l1.07,0.3l0.16,0.0l1.69,-0.43l1.95,1.02l-0.51,0.64l-0.45,1.2l-0.32,0.2l-2.55,-0.93l-0.17,-0.01l-0.82,0.2l-0.17,0.11l-0.53,0.68l-0.94,0.32l-0.14,-0.11l-0.29,-0.04l-1.18,0.48l-0.95,0.09l-0.26,0.21l-0.15,0.47l-1.84,0.34l-0.82,-0.31l-1.14,-0.73l-0.2,-0.89l0.42,-0.84l0.91,0.05l0.12,-0.02l0.86,-0.33l0.18,-0.21l0.03,-0.13l0.32,-0.1l0.2,-0.22l0.12,-0.55l0.39,-0.1l0.18,-0.13l0.3,-0.45l0.43,-0.0Z", "name": "Slovakia"}, "KR": {"path": "M737.31,185.72l0.84,0.08l0.27,-0.12l0.89,-1.2l1.63,-0.13l1.1,-0.2l0.21,-0.16l0.12,-0.24l1.86,2.95l0.59,1.79l0.02,3.17l-0.84,1.38l-2.23,0.55l-1.95,1.14l-1.91,0.21l-0.22,-1.21l0.45,-2.07l-0.01,-0.17l-0.99,-2.67l1.54,-0.4l0.17,-0.46l-1.55,-2.24Z", "name": "South Korea"}, "SI": {"path": "M455.77,159.59l1.79,0.21l0.18,-0.04l1.2,-0.68l2.12,-0.08l0.21,-0.1l0.38,-0.42l0.1,0.01l0.28,0.62l-1.71,0.71l-0.18,0.22l-0.21,1.1l-0.71,0.26l-0.2,0.28l0.01,0.55l-0.59,-0.04l-0.79,-0.47l-0.38,0.06l-0.36,0.41l-0.84,-0.05l0.05,-0.15l-0.56,-1.24l0.21,-1.17Z", "name": "Slovenia"}, "KP": {"path": "M747.76,172.02l-0.23,-0.04l-0.26,0.08l-1.09,1.02l-0.78,1.06l-0.06,0.19l0.09,1.95l-1.12,0.57l-0.53,0.58l-0.88,0.82l-1.69,0.51l-1.09,0.79l-0.12,0.22l-0.07,1.17l-0.22,0.25l0.09,0.47l0.96,0.46l1.22,1.1l-0.19,0.37l-0.91,0.16l-1.75,0.14l-0.22,0.12l-0.87,1.18l-0.95,-0.09l-0.3,0.18l-0.97,-0.44l-0.39,0.13l-0.25,0.44l-0.29,0.09l-0.03,-0.2l-0.18,-0.23l-0.62,-0.25l-0.43,-0.29l0.52,-0.97l0.52,-0.3l0.13,-0.38l-0.18,-0.42l0.59,-1.47l0.01,-0.21l-0.16,-0.48l-0.22,-0.2l-1.41,-0.31l-0.82,-0.55l1.74,-1.62l2.73,-1.58l1.62,-1.96l0.96,0.76l0.17,0.06l2.17,0.11l0.31,-0.37l-0.32,-1.31l3.61,-1.21l0.16,-0.13l0.79,-1.34l1.25,1.38Z", "name": "North Korea"}, "SO": {"path": "M543.8,256.48l0.61,-0.05l1.14,-0.37l1.31,-0.25l0.12,-0.05l1.11,-0.81l0.57,-0.0l0.03,0.39l-0.23,1.49l0.01,1.25l-0.52,0.92l-0.7,2.71l-1.19,2.79l-1.54,3.2l-2.13,3.66l-2.12,2.79l-2.92,3.39l-2.47,2.0l-3.76,2.5l-2.33,1.9l-2.77,3.06l-0.61,1.35l-0.28,0.29l-1.22,-1.69l-0.03,-8.92l2.12,-2.76l0.59,-0.68l1.47,-0.04l0.18,-0.06l2.15,-1.71l3.16,-0.11l0.21,-0.09l7.08,-7.55l1.76,-2.12l1.14,-1.57l0.06,-0.18l0.01,-4.67Z", "name": "Somalia"}, "SN": {"path": "M379.28,250.34l-0.95,-1.82l-0.09,-0.1l-0.83,-0.6l0.62,-0.28l0.13,-0.11l1.21,-1.8l0.6,-1.31l0.71,-0.68l1.09,0.2l0.18,-0.02l1.17,-0.53l1.25,-0.03l1.17,0.73l1.59,0.65l1.47,1.83l1.59,1.7l0.12,1.56l0.49,1.46l0.1,0.14l0.85,0.65l0.18,0.82l-0.08,0.57l-0.13,0.05l-1.29,-0.19l-0.29,0.13l-0.11,0.16l-0.35,0.04l-1.83,-0.61l-5.84,-0.13l-0.12,0.02l-0.6,0.26l-0.87,-0.06l-1.01,0.32l-0.26,-1.26l1.9,0.04l0.16,-0.04l0.54,-0.32l0.37,-0.02l0.15,-0.05l0.78,-0.5l0.92,0.46l0.12,0.03l1.09,0.04l0.15,-0.03l1.08,-0.57l0.11,-0.44l-0.51,-0.74l-0.39,-0.1l-0.76,0.39l-0.62,-0.01l-0.92,-0.58l-0.18,-0.05l-0.79,0.04l-0.2,0.09l-0.48,0.51l-2.41,0.06Z", "name": "Senegal"}, "SL": {"path": "M392.19,267.53l-0.44,-0.12l-1.73,-0.97l-1.24,-1.28l-0.4,-0.84l-0.27,-1.65l1.21,-1.0l0.09,-0.12l0.27,-0.66l0.32,-0.41l0.56,-0.05l0.16,-0.07l0.5,-0.41l1.75,0.0l0.59,0.77l0.49,0.96l-0.07,0.64l0.04,0.19l0.36,0.58l-0.03,0.84l0.24,0.2l-0.64,0.65l-1.13,1.37l-0.06,0.14l-0.12,0.66l-0.43,0.58Z", "name": "Sierra Leone"}, "SB": {"path": "M826.74,311.51l0.23,0.29l-0.95,-0.01l-0.39,-0.63l0.65,0.27l0.45,0.09ZM825.01,308.52l-1.18,-1.39l-0.37,-1.06l0.24,0.0l0.82,1.84l0.49,0.6ZM823.21,309.42l-0.44,0.03l-1.43,-0.24l-0.32,-0.24l0.08,-0.5l1.29,0.31l0.72,0.47l0.11,0.18ZM817.9,303.81l2.59,1.44l0.3,0.41l-1.21,-0.66l-1.34,-0.89l-0.34,-0.3ZM813.77,302.4l0.48,0.34l0.1,0.08l-0.33,-0.17l-0.25,-0.25Z", "name": "Solomon Islands"}, "SA": {"path": "M528.24,243.1l-0.2,-0.69l-0.07,-0.12l-0.69,-0.71l-0.18,-0.94l-0.12,-0.19l-1.24,-0.89l-1.28,-2.09l-0.7,-2.08l-0.07,-0.11l-1.73,-1.79l-0.11,-0.07l-1.03,-0.39l-1.57,-2.36l-0.27,-1.72l0.1,-1.53l-0.03,-0.15l-1.44,-2.93l-1.25,-1.13l-1.34,-0.56l-0.72,-1.33l0.11,-0.49l-0.02,-0.2l-0.7,-1.38l-0.08,-0.1l-0.68,-0.56l-0.97,-1.98l-2.8,-4.03l-0.25,-0.13l-0.85,0.01l0.29,-1.11l0.12,-0.97l0.23,-0.81l2.52,0.39l0.23,-0.06l1.08,-0.84l0.6,-0.95l1.78,-0.35l0.22,-0.17l0.37,-0.83l0.74,-0.42l0.08,-0.46l-2.17,-2.4l4.55,-1.26l0.12,-0.06l0.36,-0.32l2.83,0.71l3.67,1.91l7.04,5.5l0.17,0.06l4.64,0.22l2.06,0.24l0.55,1.15l0.28,0.17l1.56,-0.06l0.9,2.15l0.14,0.15l1.14,0.57l0.39,0.85l0.11,0.13l1.59,1.06l0.12,0.91l-0.23,0.83l0.01,0.18l0.32,0.9l0.07,0.11l0.68,0.7l0.33,0.86l0.37,0.65l0.09,0.1l0.76,0.53l0.25,0.04l0.45,-0.12l0.35,0.75l0.1,0.63l0.96,2.68l0.23,0.19l7.53,1.33l0.27,-0.09l0.24,-0.26l0.87,1.41l-1.58,4.96l-7.34,2.54l-7.28,1.02l-2.34,1.17l-0.12,0.1l-1.74,2.63l-0.86,0.32l-0.49,-0.68l-0.28,-0.12l-0.92,0.12l-2.32,-0.25l-0.41,-0.23l-0.15,-0.04l-2.89,0.06l-0.63,0.2l-0.91,-0.59l-0.43,0.11l-0.66,1.27l-0.03,0.21l0.21,0.89l-0.6,0.45Z", "name": "Saudi Arabia"}, "SE": {"path": "M476.42,90.44l-0.15,0.1l-2.43,2.86l-0.07,0.24l0.36,2.31l-3.84,3.1l-4.83,3.38l-0.11,0.15l-1.82,5.45l0.03,0.26l1.78,2.68l2.27,1.99l-2.13,3.88l-2.49,0.82l-0.2,0.24l-0.95,6.05l-1.32,3.09l-2.82,-0.32l-0.3,0.16l-1.34,2.64l-2.48,0.14l-0.76,-3.15l-2.09,-4.04l-1.85,-5.01l1.03,-1.98l2.06,-2.53l0.06,-0.13l0.83,-4.45l-0.06,-0.25l-1.54,-1.86l-0.15,-5.0l1.52,-3.48l2.28,0.06l0.27,-0.16l0.87,-1.59l-0.01,-0.31l-0.8,-1.21l3.79,-5.63l4.07,-7.54l2.23,0.01l0.29,-0.22l0.59,-2.15l4.46,0.66l0.34,-0.26l0.34,-2.64l1.21,-0.14l3.24,2.08l3.78,2.85l0.06,6.37l0.03,0.14l0.67,1.29l-3.95,1.07Z", "name": "Sweden"}, "SD": {"path": "M505.98,259.75l-0.31,-0.9l-0.1,-0.14l-1.2,-0.93l-0.27,-1.66l0.29,-1.83l-0.25,-0.34l-1.16,-0.17l-0.33,0.21l-0.11,0.37l-1.3,0.11l-0.21,0.49l0.55,0.68l0.18,1.29l-1.31,1.33l-1.18,1.72l-1.04,0.21l-2.0,-1.4l-0.32,-0.02l-0.95,0.52l-0.14,0.16l-0.21,0.6l-1.16,0.43l-0.19,0.23l-0.04,0.27l-2.08,0.0l-0.25,-0.39l-0.24,-0.13l-1.81,-0.09l-0.14,0.03l-0.8,0.38l-0.49,-0.16l-1.22,-1.39l-0.42,-0.67l-0.31,-0.14l-1.81,0.35l-0.2,0.14l-0.72,1.24l-0.61,2.14l-0.73,0.4l-0.62,0.22l-0.83,-0.68l-0.12,-0.6l0.38,-0.97l0.01,-1.14l-0.08,-0.2l-1.39,-1.53l-0.25,-0.97l0.03,-0.57l-0.11,-0.25l-0.81,-0.66l-0.03,-1.34l-0.04,-0.14l-0.52,-0.98l-0.31,-0.15l-0.42,0.07l0.12,-0.44l0.63,-1.03l0.03,-0.23l-0.24,-0.88l0.69,-0.66l0.02,-0.41l-0.4,-0.46l0.58,-1.39l1.04,-1.71l1.97,0.16l0.32,-0.3l-0.12,-10.24l0.02,-0.8l2.59,-0.01l0.3,-0.3l0.0,-4.92l29.19,0.0l0.68,2.17l-0.4,0.35l-0.1,0.27l0.36,2.69l0.93,3.15l0.12,0.16l2.05,1.4l-0.99,1.15l-1.75,0.4l-0.15,0.08l-0.79,0.79l-0.08,0.17l-0.24,1.69l-1.07,3.75l-0.0,0.16l0.25,0.96l-0.38,2.1l-0.98,2.41l-1.52,1.3l-1.07,1.94l-0.25,0.99l-1.08,0.64l-0.13,0.18l-0.46,1.65Z", "name": "Sudan"}, "DO": {"path": "M241.7,234.97l0.15,-0.22l1.73,0.01l1.43,0.64l0.15,0.03l0.45,-0.04l0.36,0.74l0.28,0.17l1.02,-0.04l-0.04,0.43l0.27,0.33l1.03,0.09l0.91,0.7l-0.57,0.64l-0.99,-0.47l-0.16,-0.03l-1.11,0.11l-0.79,-0.12l-0.26,0.09l-0.38,0.4l-0.66,0.11l-0.28,-0.45l-0.38,-0.12l-0.83,0.37l-0.14,0.13l-0.85,1.49l-0.27,-0.17l-0.1,-0.58l0.05,-0.67l-0.07,-0.21l-0.44,-0.53l0.35,-0.25l0.12,-0.19l0.19,-1.0l-0.2,-1.4Z", "name": "Dominican Republic"}, "DJ": {"path": "M528.78,253.36l0.34,0.45l-0.06,0.76l-1.26,0.54l-0.05,0.53l0.82,0.53l-0.57,0.83l-0.3,-0.25l-0.27,-0.05l-0.56,0.17l-1.07,-0.03l-0.04,-0.56l-0.16,-0.56l0.76,-1.07l0.76,-0.97l0.89,0.18l0.25,-0.06l0.51,-0.42Z", "name": "Djibouti"}, "DK": {"path": "M452.4,129.07l-1.27,2.39l-2.25,-1.69l-0.26,-1.08l3.15,-1.0l0.63,1.39ZM447.87,126.25l-0.35,0.76l-0.47,-0.24l-0.38,0.09l-1.8,2.53l-0.03,0.29l0.56,1.4l-1.22,0.4l-1.68,-0.41l-0.92,-1.76l-0.07,-3.47l0.38,-0.88l0.62,-0.93l2.07,-0.21l0.19,-0.1l0.84,-0.95l1.5,-0.76l-0.06,1.26l-0.7,1.1l-0.03,0.25l0.3,1.0l0.18,0.19l1.06,0.42Z", "name": "Denmark"}, "DE": {"path": "M445.51,131.69l0.03,0.94l0.21,0.28l2.32,0.74l-0.02,1.0l0.37,0.3l2.55,-0.65l1.36,-0.89l2.63,1.27l1.09,1.01l0.51,1.51l-0.6,0.78l-0.0,0.36l0.88,1.17l0.58,1.68l-0.18,1.08l0.03,0.18l0.87,1.81l-0.66,0.2l-0.55,-0.32l-0.36,0.05l-0.58,0.58l-1.73,0.62l-0.99,0.84l-1.77,0.7l-0.16,0.4l0.42,0.94l0.26,1.34l0.14,0.2l1.25,0.76l1.22,1.2l-0.71,1.2l-0.81,0.37l-0.17,0.32l0.34,1.99l-0.04,0.09l-0.47,-0.39l-0.17,-0.07l-1.2,-0.1l-1.85,0.57l-2.15,-0.13l-0.29,0.18l-0.21,0.5l-0.96,-0.67l-0.24,-0.05l-0.67,0.16l-2.6,-0.94l-0.34,0.1l-0.42,0.57l-1.64,-0.02l0.26,-1.88l1.24,-2.15l-0.21,-0.45l-3.54,-0.58l-0.98,-0.71l0.12,-1.26l-0.05,-0.2l-0.44,-0.64l0.27,-2.18l-0.38,-3.14l1.17,-0.0l0.27,-0.17l0.63,-1.26l0.65,-3.17l-0.02,-0.17l-0.41,-1.0l0.32,-0.47l1.77,-0.16l0.37,0.6l0.47,0.06l1.7,-1.69l0.06,-0.33l-0.55,-1.24l-0.09,-1.51l1.5,0.36l0.16,-0.01l1.22,-0.4Z", "name": "Germany"}, "YE": {"path": "M553.53,242.65l-1.51,0.58l-0.17,0.16l-0.48,1.14l-0.07,0.79l-2.31,1.0l-3.98,1.19l-2.28,1.8l-0.97,0.12l-0.7,-0.14l-0.23,0.05l-1.42,1.03l-1.51,0.47l-2.07,0.13l-0.68,0.15l-0.17,0.1l-0.49,0.6l-0.57,0.16l-0.18,0.13l-0.3,0.49l-1.06,-0.05l-0.13,0.02l-0.73,0.32l-1.48,-0.11l-0.55,-1.26l0.07,-1.32l-0.04,-0.16l-0.39,-0.72l-0.48,-1.85l-0.52,-0.79l0.08,-0.02l0.22,-0.36l-0.23,-1.05l0.24,-0.39l0.04,-0.19l-0.09,-0.95l0.96,-0.72l0.11,-0.31l-0.23,-0.98l0.46,-0.88l0.75,0.49l0.26,0.03l0.63,-0.22l2.76,-0.06l0.5,0.25l2.42,0.26l0.85,-0.11l0.52,0.71l0.35,0.1l1.17,-0.43l0.15,-0.12l1.75,-2.64l2.22,-1.11l6.95,-0.96l2.55,5.58Z", "name": "Yemen"}, "AT": {"path": "M463.17,154.15l-0.14,0.99l-1.15,0.01l-0.24,0.47l0.39,0.56l-0.75,1.84l-0.36,0.4l-2.06,0.07l-0.14,0.04l-1.18,0.67l-1.96,-0.23l-3.43,-0.78l-0.5,-0.97l-0.33,-0.16l-2.47,0.55l-0.2,0.16l-0.18,0.37l-1.27,-0.38l-1.28,-0.09l-0.81,-0.41l0.25,-0.51l0.03,-0.18l-0.05,-0.28l0.35,-0.08l1.16,0.81l0.45,-0.13l0.27,-0.64l2.0,0.12l1.84,-0.57l1.05,0.09l0.71,0.59l0.47,-0.11l0.23,-0.54l0.02,-0.17l-0.32,-1.85l0.69,-0.31l0.13,-0.12l0.73,-1.23l1.61,0.89l0.35,-0.04l1.35,-1.27l0.7,-0.19l1.84,0.93l0.18,0.03l1.08,-0.15l0.81,0.43l-0.07,0.15l-0.02,0.2l0.24,1.06Z", "name": "Austria"}, "DZ": {"path": "M450.58,224.94l-8.31,4.86l-7.23,5.12l-3.46,1.13l-2.42,0.22l-0.02,-1.33l-0.2,-0.28l-1.15,-0.42l-1.45,-0.69l-0.55,-1.13l-0.1,-0.12l-8.45,-5.72l-17.72,-12.17l0.03,-0.38l-0.02,-3.21l3.84,-1.91l2.46,-0.41l2.1,-0.75l0.14,-0.11l0.9,-1.3l2.84,-1.06l0.19,-0.27l0.09,-1.81l1.21,-0.2l0.15,-0.07l1.06,-0.96l3.19,-0.46l0.23,-0.18l0.46,-1.08l-0.08,-0.34l-0.6,-0.54l-0.83,-2.85l-0.18,-1.8l-0.82,-1.57l2.13,-1.37l2.65,-0.49l0.13,-0.05l1.55,-1.15l2.34,-0.85l4.2,-0.51l4.07,-0.23l1.21,0.41l0.23,-0.01l2.3,-1.11l2.52,-0.02l0.94,0.62l0.2,0.05l1.25,-0.13l-0.36,1.03l-0.01,0.14l0.39,2.66l-0.56,2.2l-1.49,1.52l-0.08,0.24l0.22,2.12l0.11,0.2l1.94,1.58l0.02,0.54l0.12,0.23l1.45,1.06l1.04,4.85l0.81,2.42l0.13,1.19l-0.43,2.17l0.17,1.28l-0.31,1.53l0.2,1.56l-0.9,1.02l-0.01,0.38l1.43,1.88l0.09,1.06l0.04,0.13l0.89,1.48l0.37,0.12l1.03,-0.43l1.79,1.12l0.89,1.34Z", "name": "Algeria"}, "US": {"path": "M892.64,99.05l1.16,0.57l0.21,0.02l1.45,-0.38l1.92,0.99l2.17,0.47l-1.65,0.72l-1.75,-0.79l-0.93,-0.7l-0.21,-0.06l-2.11,0.22l-0.35,-0.2l0.09,-0.87ZM183.29,150.37l0.39,1.54l0.12,0.17l0.78,0.55l0.14,0.05l1.74,0.2l2.52,0.5l2.4,0.98l0.17,0.02l1.96,-0.4l3.01,0.81l0.91,-0.02l2.22,-0.88l4.67,2.33l3.86,2.01l0.21,0.71l0.15,0.18l0.33,0.17l-0.02,0.05l0.23,0.43l0.67,0.1l0.21,-0.05l0.1,-0.07l0.05,0.29l0.09,0.16l0.5,0.5l0.21,0.09l0.56,0.0l0.13,0.13l-0.2,0.36l0.12,0.41l2.49,1.39l0.99,5.24l-0.69,1.68l-1.16,1.64l-0.6,1.18l-0.06,0.31l0.04,0.22l0.28,0.43l0.11,0.1l0.85,0.47l0.15,0.04l0.63,0.0l0.14,-0.04l2.87,-1.58l2.6,-0.49l3.28,-1.5l0.17,-0.23l0.04,-0.43l-0.23,-0.93l-0.24,-0.39l0.74,-0.32l4.7,-0.01l0.25,-0.13l0.77,-1.15l2.9,-2.41l1.04,-0.52l8.35,-0.02l0.28,-0.21l0.2,-0.6l0.7,-0.14l1.06,-0.48l0.13,-0.11l0.92,-1.49l0.75,-2.39l1.67,-2.08l0.59,0.6l0.3,0.07l1.52,-0.49l0.88,0.72l-0.0,4.14l0.08,0.2l1.6,1.72l0.31,0.72l-2.42,1.35l-2.55,1.05l-2.64,0.9l-0.14,0.11l-1.33,1.81l-0.44,0.7l-0.05,0.15l-0.03,1.6l0.03,0.14l0.83,1.59l0.24,0.16l0.78,0.06l-1.15,0.33l-1.25,-0.04l-1.83,0.52l-2.51,0.29l-2.17,0.88l-0.17,0.36l0.33,0.22l3.55,-0.54l0.15,0.11l-2.87,0.73l-1.19,0.0l-0.16,-0.33l-0.36,0.06l-0.76,0.82l0.17,0.5l0.42,0.08l-0.45,1.75l-1.4,1.74l-0.04,-0.17l-0.21,-0.22l-0.48,-0.13l-0.77,-0.69l-0.36,-0.03l-0.12,0.34l0.52,1.58l0.09,0.14l0.52,0.43l0.03,0.87l-0.74,1.05l-0.39,0.63l0.05,-0.12l-0.08,-0.34l-1.19,-1.03l-0.28,-2.31l-0.26,-0.26l-0.32,0.19l-0.48,1.27l-0.01,0.19l0.39,1.33l-1.14,-0.31l-0.36,0.18l0.14,0.38l1.57,0.85l0.1,2.58l0.22,0.28l0.55,0.15l0.21,0.81l0.33,2.72l-1.46,1.94l-2.5,0.81l-0.12,0.07l-1.58,1.58l-1.15,0.17l-0.15,0.06l-1.27,1.03l-0.09,0.13l-0.32,0.85l-2.71,1.79l-1.45,1.37l-1.18,1.64l-0.05,0.12l-0.39,1.96l0.0,0.13l0.44,1.91l0.85,2.37l1.1,1.91l0.03,1.2l1.16,3.07l-0.08,1.74l-0.1,0.99l-0.57,1.48l-0.54,0.24l-0.97,-0.26l-0.34,-1.02l-0.12,-0.16l-0.89,-0.58l-2.44,-4.28l-0.34,-0.94l0.49,-1.71l-0.02,-0.21l-0.7,-1.5l-2.0,-2.35l-0.11,-0.08l-0.98,-0.42l-0.25,0.01l-2.42,1.19l-0.26,-0.08l-1.26,-1.29l-1.57,-0.68l-0.16,-0.02l-2.79,0.34l-2.18,-0.3l-1.98,0.19l-1.12,0.45l-0.14,0.44l0.4,0.65l-0.04,1.02l0.09,0.22l0.29,0.3l-0.06,0.05l-0.77,-0.33l-0.26,0.01l-0.87,0.48l-1.64,-0.08l-1.79,-1.39l-0.23,-0.06l-2.11,0.33l-1.75,-0.61l-0.14,-0.01l-1.61,0.2l-2.11,0.64l-0.11,0.06l-2.25,1.99l-2.53,1.21l-1.43,1.38l-0.58,1.22l-0.03,0.12l-0.03,1.86l0.13,1.32l0.3,0.62l-0.46,0.04l-1.71,-0.57l-1.85,-0.79l-0.63,-1.14l-0.54,-1.85l-0.07,-0.12l-1.45,-1.51l-0.86,-1.58l-1.26,-1.87l-0.09,-0.09l-1.76,-1.09l-0.17,-0.04l-2.05,0.05l-0.23,0.12l-1.44,1.97l-1.84,-0.72l-1.19,-0.76l-0.6,-1.45l-0.9,-1.52l-1.49,-1.21l-1.27,-0.87l-0.89,-0.96l-0.22,-0.1l-4.34,-0.0l-0.3,0.3l-0.0,0.84l-6.62,0.02l-5.66,-1.93l-3.48,-1.24l0.11,-0.25l-0.3,-0.42l-3.18,0.3l-2.6,0.2l-0.35,-1.19l-0.08,-0.13l-1.62,-1.61l-0.13,-0.08l-1.02,-0.29l-0.22,-0.66l-0.25,-0.2l-1.31,-0.13l-0.82,-0.7l-0.16,-0.07l-2.25,-0.27l-0.48,-0.34l-0.28,-1.44l-0.07,-0.14l-2.41,-2.84l-2.03,-3.89l0.08,-0.58l-0.1,-0.27l-1.08,-0.94l-1.87,-2.36l-0.33,-2.31l-0.07,-0.15l-1.24,-1.5l0.52,-2.4l-0.09,-2.57l-0.78,-2.3l0.96,-2.83l0.61,-5.66l-0.46,-4.26l-0.79,-2.71l-0.68,-1.4l0.13,-0.26l3.24,0.97l1.28,2.88l0.52,0.06l0.62,-0.84l0.06,-0.22l-0.4,-2.61l-0.74,-2.29l68.9,-0.0l0.3,-0.3l0.01,-0.95l0.32,-0.01ZM32.5,67.43l1.75,1.99l0.41,0.04l1.02,-0.81l3.79,0.25l-0.1,0.72l0.24,0.34l3.83,0.77l2.6,-0.44l5.21,1.41l4.84,0.43l1.9,0.57l0.15,0.01l3.25,-0.71l3.72,1.32l2.52,0.58l-0.03,38.14l0.29,0.3l2.41,0.11l2.34,1.0l1.7,1.59l2.22,2.42l0.42,0.03l2.41,-2.04l2.25,-1.08l1.23,1.76l1.71,1.53l2.24,1.62l1.54,2.56l2.56,4.09l0.11,0.11l4.1,2.17l0.06,1.93l-1.12,1.35l-1.22,-1.14l-2.08,-1.05l-0.68,-2.94l-0.09,-0.16l-3.18,-2.84l-1.32,-3.35l-0.25,-0.19l-2.43,-0.24l-3.93,-0.09l-2.85,-1.02l-5.24,-3.85l-6.77,-2.04l-3.52,0.3l-4.84,-1.7l-2.96,-1.6l-0.23,-0.02l-2.78,0.8l-0.21,0.35l0.46,2.31l-1.11,0.19l-2.9,0.78l-2.24,1.26l-2.42,0.68l-0.29,-1.79l1.07,-3.49l2.54,-1.11l0.12,-0.45l-0.69,-0.96l-0.41,-0.07l-3.19,2.12l-1.76,2.54l-3.57,2.62l-0.03,0.46l1.63,1.59l-2.14,2.38l-2.64,1.49l-2.49,1.09l-0.16,0.17l-0.58,1.48l-3.8,1.79l-0.14,0.14l-0.75,1.57l-2.75,1.41l-1.62,-0.25l-0.16,0.02l-2.35,0.98l-2.54,1.19l-2.06,1.15l-4.05,0.93l-0.1,-0.15l2.45,-1.45l2.49,-1.1l2.61,-1.88l3.03,-0.39l0.19,-0.1l1.2,-1.41l3.43,-2.11l0.61,-0.75l1.81,-1.24l0.13,-0.2l0.42,-2.7l1.24,-2.12l-0.03,-0.35l-0.34,-0.09l-2.73,1.05l-0.67,-0.53l-0.39,0.02l-1.13,1.11l-1.43,-1.62l-0.49,0.06l-0.41,0.8l-0.67,-1.31l-0.42,-0.12l-2.43,1.43l-1.18,-0.0l-0.18,-1.86l0.43,-1.3l-0.09,-0.33l-1.61,-1.33l-0.26,-0.06l-3.11,0.68l-2.0,-1.66l-1.61,-0.85l-0.01,-1.97l-0.11,-0.23l-1.76,-1.48l0.86,-1.96l2.01,-2.13l0.88,-1.94l1.79,-0.25l1.65,0.6l0.31,-0.06l1.91,-1.8l1.67,0.31l0.22,-0.04l1.91,-1.23l0.13,-0.33l-0.47,-1.82l-0.15,-0.19l-1.0,-0.52l1.51,-1.27l0.09,-0.34l-0.29,-0.19l-1.62,0.06l-2.66,0.88l-0.13,0.09l-0.62,0.72l-1.77,-0.8l-0.16,-0.02l-3.48,0.44l-3.5,-0.92l-1.06,-1.61l-2.78,-2.09l3.07,-1.51l5.52,-2.01l1.65,0.0l-0.28,1.73l0.31,0.35l5.29,-0.16l0.23,-0.49l-2.03,-2.59l-0.1,-0.08l-3.03,-1.58l-1.79,-2.12l-2.4,-1.83l-3.18,-1.27l1.13,-1.84l4.28,-0.14l0.15,-0.05l3.16,-2.0l0.13,-0.17l0.57,-2.07l2.43,-2.02l2.42,-0.52l4.67,-1.98l2.22,0.29l0.2,-0.04l3.74,-2.37l3.57,0.91ZM37.66,123.49l-2.31,1.26l-1.04,-0.75l-0.31,-1.35l2.06,-1.16l1.24,-0.51l1.48,0.22l0.76,0.81l-1.89,1.49ZM30.89,233.84l1.2,0.57l0.35,0.3l0.48,0.69l-1.6,0.86l-0.3,0.31l-0.24,-0.14l0.05,-0.54l-0.02,-0.15l-0.36,-0.83l0.05,-0.12l0.39,-0.38l0.07,-0.31l-0.09,-0.27ZM29.06,231.89l0.5,0.14l0.31,0.19l-0.46,0.1l-0.34,-0.43ZM25.02,230.13l0.2,-0.11l0.4,0.47l-0.43,-0.05l-0.17,-0.31ZM21.29,228.68l0.1,-0.07l0.22,0.02l0.02,0.21l-0.02,0.02l-0.32,-0.18ZM6.0,113.33l-1.19,0.45l-1.5,-0.64l-0.94,-0.63l1.76,-0.46l1.71,0.29l0.16,0.98Z", "name": "United States of America"}, "LV": {"path": "M473.99,127.16l0.07,-2.15l1.15,-2.11l2.05,-1.07l1.84,2.48l0.25,0.12l2.01,-0.07l0.29,-0.25l0.45,-2.58l1.85,-0.56l0.98,0.4l2.13,1.33l0.16,0.05l1.97,0.01l1.02,0.7l0.21,1.67l0.71,1.84l-2.44,1.23l-1.36,0.53l-2.28,-1.62l-0.12,-0.05l-1.18,-0.2l-0.28,-0.6l-0.31,-0.17l-2.43,0.35l-4.17,-0.23l-0.12,0.02l-2.45,0.93Z", "name": "Latvia"}, "UY": {"path": "M276.9,363.17l1.3,-0.23l2.4,2.04l0.22,0.07l0.82,-0.07l2.48,1.7l1.93,1.5l1.28,1.67l-0.95,1.14l-0.04,0.31l0.63,1.45l-0.96,1.57l-2.65,1.47l-1.73,-0.53l-0.15,-0.01l-1.25,0.28l-2.22,-1.16l-0.16,-0.03l-1.56,0.08l-1.33,-1.36l0.17,-1.58l0.48,-0.55l0.07,-0.2l-0.02,-2.74l0.66,-2.8l0.57,-2.02Z", "name": "Uruguay"}, "LB": {"path": "M510.44,198.11l-0.48,0.03l-0.26,0.17l-0.15,0.32l-0.21,-0.0l0.72,-1.85l1.19,-1.9l0.74,0.09l0.27,0.73l-1.19,0.93l-0.09,0.13l-0.54,1.36Z", "name": "Lebanon"}, "LA": {"path": "M684.87,248.8l0.61,-0.86l0.05,-0.16l0.11,-2.17l-0.08,-0.22l-1.96,-2.16l-0.15,-2.44l-0.08,-0.18l-1.9,-2.1l-0.19,-0.1l-1.89,-0.18l-0.29,0.15l-0.42,0.76l-1.21,0.06l-0.67,-0.41l-0.31,-0.0l-2.2,1.29l-0.05,-1.77l0.61,-2.7l-0.27,-0.37l-1.44,-0.1l-0.12,-1.31l-0.12,-0.21l-0.87,-0.65l0.38,-0.68l1.76,-1.41l0.08,0.22l0.27,0.2l1.33,0.07l0.31,-0.34l-0.35,-2.75l0.85,-0.25l1.32,1.88l1.11,2.36l0.27,0.17l2.89,0.02l0.78,1.82l-1.32,0.56l-0.12,0.09l-0.72,0.93l0.1,0.45l2.93,1.52l3.62,5.27l1.88,1.78l0.58,1.67l-0.38,2.11l-1.87,-0.79l-0.37,0.11l-0.99,1.54l-1.51,-0.73Z", "name": "Laos"}, "TW": {"path": "M725.6,222.5l-1.5,4.22l-0.82,1.65l-1.01,-1.7l-0.26,-1.8l1.4,-2.48l1.8,-1.81l0.76,0.53l-0.38,1.39Z", "name": "Taiwan"}, "TT": {"path": "M266.35,259.46l0.41,-0.39l0.09,-0.23l-0.04,-0.75l1.14,-0.26l0.2,0.03l-0.07,1.37l-1.73,0.23Z", "name": "Trinidad and Tobago"}, "TR": {"path": "M513.25,175.38l3.63,1.17l0.14,0.01l2.88,-0.45l2.11,0.26l0.18,-0.03l2.9,-1.53l2.51,-0.13l2.25,1.37l0.36,0.88l-0.23,1.36l0.19,0.33l1.81,0.72l0.61,0.53l-1.31,0.64l-0.16,0.34l0.76,3.24l-0.44,0.8l0.01,0.3l1.19,2.02l-0.71,0.29l-0.74,-0.62l-0.15,-0.07l-2.91,-0.37l-0.15,0.02l-1.04,0.43l-2.78,0.44l-1.44,-0.03l-2.83,1.06l-1.95,0.01l-1.28,-0.52l-0.2,-0.01l-2.62,0.76l-0.7,-0.48l-0.47,0.22l-0.13,1.49l-1.01,0.94l-0.58,-0.82l0.79,-0.9l0.04,-0.34l-0.31,-0.15l-1.46,0.23l-2.03,-0.64l-0.3,0.07l-1.65,1.58l-3.58,0.3l-1.94,-1.47l-0.17,-0.06l-2.7,-0.1l-0.28,0.17l-0.51,1.06l-1.47,0.29l-2.32,-1.46l-0.17,-0.05l-2.55,0.05l-1.4,-2.7l-1.72,-1.54l1.11,-2.06l-0.07,-0.37l-1.35,-1.19l2.47,-2.51l3.74,-0.11l0.26,-0.17l0.96,-2.07l4.56,0.38l0.19,-0.05l2.97,-1.92l2.84,-0.83l4.03,-0.06l4.31,2.08ZM488.85,176.8l-1.81,1.38l-0.57,-1.01l0.02,-0.36l0.45,-0.25l0.13,-0.15l0.78,-1.87l-0.11,-0.37l-0.72,-0.47l1.91,-0.71l1.89,0.35l0.25,0.97l0.17,0.2l1.87,0.83l-0.19,0.31l-2.82,0.16l-0.18,0.07l-1.06,0.91Z", "name": "Turkey"}, "LK": {"path": "M625.44,266.07l-0.35,2.4l-0.9,0.61l-1.91,0.5l-1.04,-1.75l-0.43,-3.5l1.0,-3.6l1.34,1.09l1.13,1.72l1.16,2.52Z", "name": "Sri Lanka"}, "TN": {"path": "M444.91,206.18l-0.99,-4.57l-0.12,-0.18l-1.43,-1.04l-0.02,-0.53l-0.11,-0.22l-1.95,-1.59l-0.19,-1.85l1.44,-1.47l0.08,-0.14l0.59,-2.34l-0.38,-2.77l0.44,-1.28l2.52,-1.08l1.41,0.28l-0.06,1.2l0.43,0.28l1.81,-0.9l0.02,0.06l-1.14,1.28l-0.08,0.2l-0.02,1.32l0.11,0.24l0.74,0.6l-0.29,2.18l-1.56,1.35l-0.09,0.32l0.48,1.54l0.28,0.21l1.11,0.04l0.55,1.17l0.15,0.14l0.76,0.35l-0.12,1.79l-1.1,0.72l-0.8,0.91l-1.68,1.04l-0.13,0.32l0.25,1.08l-0.18,0.96l-0.74,0.39Z", "name": "Tunisia"}, "TL": {"path": "M734.21,307.22l0.17,-0.34l1.99,-0.52l1.72,-0.08l0.78,-0.3l0.29,0.1l-0.43,0.32l-2.57,1.09l-1.71,0.59l-0.05,-0.49l-0.19,-0.36Z", "name": "East Timor"}, "TM": {"path": "M553.16,173.51l-0.12,1.0l-0.26,-0.65l0.38,-0.34ZM553.54,173.16l0.13,-0.12l0.43,-0.09l-0.56,0.21ZM555.68,172.6l0.65,-0.14l1.53,0.76l1.71,2.29l0.27,0.12l1.27,-0.14l2.81,-0.04l0.29,-0.38l-0.35,-1.27l1.98,-0.97l1.96,-1.63l3.05,1.44l0.25,2.23l0.14,0.22l0.96,0.61l0.18,0.05l2.61,-0.13l0.68,0.44l1.2,2.97l0.1,0.13l2.85,2.03l1.67,1.41l2.66,1.45l3.13,1.17l-0.05,1.23l-0.36,-0.04l-1.12,-0.73l-0.44,0.14l-0.34,0.89l-1.96,0.52l-0.22,0.23l-0.47,2.17l-1.26,0.78l-1.93,0.42l-0.21,0.18l-0.46,1.14l-1.64,0.33l-2.3,-0.97l-0.2,-2.23l-0.28,-0.27l-1.76,-0.1l-2.78,-2.48l-0.15,-0.07l-1.95,-0.31l-2.82,-1.48l-1.78,-0.27l-0.18,0.03l-1.03,0.51l-1.6,-0.08l-0.22,0.08l-1.72,1.6l-1.83,0.46l-0.39,-1.7l0.36,-3.0l-0.16,-0.3l-1.73,-0.88l0.57,-1.77l-0.25,-0.39l-1.33,-0.14l0.41,-1.85l2.05,0.63l0.21,-0.01l2.2,-0.95l0.09,-0.49l-1.78,-1.75l-0.69,-1.66l-0.07,-0.03Z", "name": "Turkmenistan"}, "TJ": {"path": "M597.99,178.71l-0.23,0.23l-2.57,-0.47l-0.35,0.25l-0.24,1.7l0.32,0.34l2.66,-0.22l3.15,0.95l4.47,-0.42l0.58,2.45l0.39,0.21l0.71,-0.25l1.22,0.53l-0.06,1.01l0.29,1.28l-2.19,-0.0l-1.71,-0.21l-0.23,0.07l-1.51,1.25l-1.05,0.27l-0.77,0.51l-0.71,-0.67l0.22,-2.28l-0.24,-0.32l-0.43,-0.08l0.17,-0.57l-0.16,-0.36l-1.36,-0.66l-0.34,0.05l-1.08,1.01l-0.09,0.15l-0.25,1.09l-0.24,0.26l-1.36,-0.05l-0.27,0.14l-0.65,1.06l-0.58,-0.39l-0.3,-0.02l-1.68,0.86l-0.36,-0.16l1.28,-2.65l0.02,-0.2l-0.54,-2.17l-0.18,-0.21l-1.53,-0.58l0.41,-0.82l1.89,0.13l0.26,-0.12l1.19,-1.63l0.77,-1.82l2.66,-0.55l-0.33,0.87l0.01,0.23l0.36,0.82l0.3,0.18l0.23,-0.02Z", "name": "Tajikistan"}, "LS": {"path": "M493.32,359.69l0.69,0.65l-0.65,1.12l-0.38,0.8l-1.27,0.39l-0.18,0.15l-0.4,0.77l-0.59,0.18l-1.59,-1.78l1.16,-1.5l1.3,-1.02l0.97,-0.46l0.94,0.72Z", "name": "Lesotho"}, "TH": {"path": "M677.42,253.68l-1.7,-0.88l-0.14,-0.03l-1.77,0.04l0.3,-1.64l-0.3,-0.35l-2.21,0.01l-0.3,0.28l-0.2,2.76l-2.15,5.9l-0.02,0.13l0.17,1.83l0.28,0.27l1.45,0.07l0.93,2.1l0.44,2.15l0.08,0.15l1.4,1.44l0.16,0.09l1.43,0.27l1.04,1.05l-0.58,0.73l-1.24,0.22l-0.15,-0.99l-0.15,-0.22l-2.04,-1.1l-0.36,0.06l-0.23,0.23l-0.72,-0.71l-0.41,-1.18l-0.06,-0.11l-1.33,-1.42l-1.22,-1.2l-0.5,0.13l-0.15,0.54l-0.14,-0.41l0.26,-1.48l0.73,-2.38l1.2,-2.57l1.37,-2.35l0.02,-0.27l-0.95,-2.26l0.03,-1.19l-0.29,-1.42l-0.06,-0.13l-1.65,-2.0l-0.46,-0.99l0.62,-0.34l0.13,-0.15l0.92,-2.23l-0.02,-0.27l-1.05,-1.74l-1.57,-1.86l-1.04,-1.96l0.76,-0.34l0.16,-0.16l1.07,-2.63l1.58,-0.1l0.16,-0.06l1.43,-1.11l1.24,-0.52l0.84,0.62l0.13,1.43l0.28,0.27l1.34,0.09l-0.54,2.39l0.05,2.39l0.45,0.25l2.48,-1.45l0.6,0.36l0.17,0.04l1.47,-0.07l0.25,-0.15l0.41,-0.73l1.58,0.15l1.76,1.93l0.15,2.44l0.08,0.18l1.94,2.15l-0.1,1.96l-0.66,0.93l-2.25,-0.34l-3.24,0.49l-0.19,0.12l-1.6,2.12l-0.06,0.24l0.48,2.46Z", "name": "Thailand"}, "TF": {"path": "M593.76,417.73l1.38,0.84l2.15,0.37l0.04,0.31l-0.59,1.24l-3.36,0.19l-0.05,-1.38l0.43,-1.56Z", "name": "French Southern and Antarctic Lands"}, "TG": {"path": "M425.23,269.29l-1.49,0.4l-0.43,-0.68l-0.64,-1.54l-0.18,-1.16l0.54,-2.21l-0.04,-0.24l-0.59,-0.86l-0.23,-1.9l0.0,-1.82l-0.07,-0.19l-0.95,-1.19l0.1,-0.41l1.58,0.04l-0.23,0.97l0.08,0.28l1.55,1.55l0.09,1.13l0.08,0.19l0.42,0.43l-0.11,5.66l0.52,1.53Z", "name": "Togo"}, "TD": {"path": "M457.57,252.46l0.23,-1.08l-0.28,-0.36l-1.32,-0.05l0.0,-1.35l-0.1,-0.22l-0.9,-0.82l0.99,-3.1l3.12,-2.37l0.12,-0.23l0.13,-3.33l0.95,-5.2l0.53,-1.09l-0.07,-0.36l-0.94,-0.81l-0.03,-0.7l-0.12,-0.23l-0.84,-0.61l-0.57,-3.76l2.21,-1.26l19.67,9.88l0.12,9.74l-1.83,-0.15l-0.28,0.14l-1.14,1.89l-0.68,1.62l0.05,0.31l0.33,0.38l-0.61,0.58l-0.08,0.3l0.25,0.93l-0.58,0.95l-0.29,1.01l0.34,0.37l0.67,-0.11l0.39,0.73l0.03,1.4l0.11,0.23l0.8,0.65l-0.01,0.24l-1.38,0.37l-0.11,0.06l-1.27,1.03l-1.83,2.76l-2.21,1.1l-2.34,-0.15l-0.82,0.25l-0.2,0.37l0.19,0.68l-1.16,0.79l-1.01,0.94l-2.92,0.89l-0.5,-0.46l-0.17,-0.08l-0.41,-0.05l-0.28,0.12l-0.38,0.54l-1.36,0.12l0.1,-0.18l0.01,-0.27l-0.78,-1.72l-0.35,-1.03l-0.17,-0.18l-1.03,-0.41l-1.29,-1.28l0.36,-0.78l0.9,0.2l0.14,-0.0l0.67,-0.17l1.36,0.02l0.26,-0.45l-1.32,-2.22l0.09,-1.64l-0.17,-1.68l-0.04,-0.13l-0.93,-1.53Z", "name": "Chad"}, "LY": {"path": "M457.99,226.38l-1.57,0.87l-1.25,-1.28l-0.13,-0.08l-3.85,-1.11l-1.04,-1.57l-0.09,-0.09l-1.98,-1.23l-0.27,-0.02l-0.93,0.39l-0.72,-1.2l-0.09,-1.07l-0.06,-0.16l-1.33,-1.75l0.83,-0.94l0.07,-0.24l-0.21,-1.64l0.31,-1.43l-0.17,-1.29l0.43,-2.26l-0.15,-1.33l-0.73,-2.18l0.99,-0.52l0.16,-0.21l0.22,-1.16l-0.22,-1.06l1.54,-0.95l0.81,-0.92l1.19,-0.78l0.14,-0.23l0.12,-1.76l2.57,0.84l0.16,0.01l0.99,-0.23l2.01,0.45l3.19,1.2l1.12,2.36l0.2,0.16l2.24,0.53l3.5,1.14l2.65,1.36l0.29,-0.01l1.22,-0.71l1.27,-1.32l0.07,-0.29l-0.55,-2.0l0.69,-1.19l1.7,-1.23l1.61,-0.35l3.2,0.54l0.78,1.14l0.24,0.13l0.85,0.01l0.84,0.47l2.35,0.31l0.42,0.63l-0.79,1.16l-0.04,0.26l0.35,1.08l-0.61,1.6l-0.0,0.2l0.73,2.16l0.0,24.24l-2.58,0.01l-0.3,0.29l-0.02,0.62l-19.55,-9.83l-0.28,0.01l-2.53,1.44Z", "name": "Libya"}, "AE": {"path": "M550.59,223.8l0.12,0.08l1.92,-0.41l3.54,0.15l0.23,-0.09l1.71,-1.79l1.86,-1.7l1.31,-1.36l0.26,0.5l0.28,1.72l-0.93,0.01l-0.3,0.26l-0.21,1.73l0.11,0.27l0.08,0.06l-0.7,0.32l-0.17,0.27l-0.01,0.99l-0.68,1.02l-0.05,0.15l-0.06,0.96l-0.32,0.36l-7.19,-1.27l-0.79,-2.22Z", "name": "United Arab Emirates"}, "VE": {"path": "M240.66,256.5l0.65,0.91l-0.03,1.13l-1.05,1.39l-0.03,0.31l0.95,2.0l0.32,0.17l1.08,-0.16l0.24,-0.21l0.56,-1.83l-0.06,-0.29l-0.71,-0.81l-0.1,-1.58l2.9,-0.96l0.19,-0.37l-0.29,-1.02l0.45,-0.41l0.72,1.43l0.26,0.16l1.65,0.04l1.46,1.27l0.08,0.72l0.3,0.27l2.28,0.02l2.55,-0.25l1.34,1.06l0.14,0.06l1.92,0.31l0.2,-0.03l1.4,-0.79l0.15,-0.25l0.02,-0.36l2.82,-0.14l1.17,-0.01l-0.41,0.14l-0.14,0.46l0.86,1.19l0.22,0.12l1.93,0.18l1.73,1.13l0.37,1.9l0.31,0.24l1.21,-0.05l0.52,0.32l-1.63,1.21l-0.11,0.17l-0.22,0.92l0.07,0.27l0.63,0.69l-0.31,0.24l-1.48,0.39l-0.22,0.3l0.04,1.03l-0.59,0.6l-0.01,0.41l1.67,1.87l0.23,0.48l-0.72,0.76l-2.71,0.91l-1.78,0.39l-0.13,0.06l-0.6,0.49l-1.84,-0.58l-1.89,-0.33l-0.18,0.03l-0.47,0.23l-0.02,0.53l0.96,0.56l-0.08,1.58l0.35,1.58l0.26,0.23l1.91,0.19l0.02,0.07l-1.54,0.62l-0.18,0.2l-0.25,0.92l-0.88,0.35l-1.85,0.58l-0.16,0.13l-0.4,0.64l-1.66,0.14l-1.22,-1.18l-0.79,-2.52l-0.67,-0.88l-0.66,-0.43l0.99,-0.98l0.09,-0.26l-0.09,-0.56l-0.08,-0.16l-0.66,-0.69l-0.47,-1.54l0.18,-1.67l0.55,-0.85l0.45,-1.35l-0.15,-0.36l-0.89,-0.43l-0.19,-0.02l-1.39,0.28l-1.76,-0.13l-0.92,0.23l-1.64,-2.01l-0.17,-0.1l-1.54,-0.33l-3.05,0.23l-0.5,-0.73l-0.15,-0.12l-0.45,-0.15l-0.05,-0.28l0.28,-0.86l0.01,-0.15l-0.2,-1.01l-0.08,-0.15l-0.5,-0.5l-0.3,-1.08l-0.25,-0.22l-0.89,-0.12l0.54,-1.18l0.29,-1.73l0.66,-0.85l0.94,-0.7l0.09,-0.11l0.3,-0.6Z", "name": "Venezuela"}, "AF": {"path": "M574.42,192.1l2.24,0.95l0.18,0.02l1.89,-0.38l0.22,-0.18l0.46,-1.14l1.82,-0.4l1.5,-0.91l0.14,-0.19l0.46,-2.12l1.93,-0.51l0.2,-0.18l0.26,-0.68l0.87,0.57l0.13,0.05l0.79,0.09l1.35,0.02l1.83,0.59l0.75,0.34l0.26,-0.01l1.66,-0.85l0.7,0.46l0.42,-0.09l0.72,-1.17l1.32,0.05l0.23,-0.1l0.39,-0.43l0.07,-0.14l0.24,-1.08l0.86,-0.81l0.94,0.46l-0.2,0.64l0.23,0.38l0.49,0.09l-0.21,2.15l0.09,0.25l0.99,0.94l0.38,0.03l0.83,-0.57l1.06,-0.27l0.12,-0.06l1.46,-1.21l1.63,0.2l2.4,0.0l0.17,0.32l-1.12,0.25l-1.23,0.52l-2.86,0.33l-2.69,0.6l-0.13,0.06l-1.46,1.25l-0.07,0.36l0.58,1.18l0.25,1.21l-1.13,1.08l-0.09,0.25l0.09,0.98l-0.53,0.79l-2.22,-0.08l-0.28,0.44l0.83,1.57l-1.3,0.58l-0.13,0.11l-1.06,1.69l-0.05,0.18l0.13,1.51l-0.73,0.58l-0.78,-0.22l-0.14,-0.01l-1.91,0.36l-0.23,0.19l-0.2,0.57l-1.65,-0.0l-0.22,0.1l-1.4,1.56l-0.08,0.19l-0.08,2.13l-2.99,1.05l-1.67,-0.23l-0.27,0.1l-0.39,0.46l-1.43,-0.31l-2.43,0.4l-3.69,-1.23l1.96,-2.15l0.08,-0.24l-0.21,-1.78l-0.23,-0.26l-1.69,-0.42l-0.19,-1.62l-0.77,-2.08l0.98,-1.41l-0.14,-0.45l-0.82,-0.31l0.6,-1.79l0.93,-3.21Z", "name": "Afghanistan"}, "IQ": {"path": "M534.42,190.89l0.13,0.14l1.5,0.78l0.15,1.34l-1.13,0.87l-0.11,0.16l-0.58,2.2l0.04,0.24l1.73,2.67l0.12,0.1l2.99,1.49l1.18,1.94l-0.39,1.89l0.29,0.36l0.5,-0.0l0.02,1.17l0.08,0.2l0.83,0.86l-2.36,-0.29l-0.29,0.13l-1.74,2.49l-4.4,-0.21l-7.03,-5.49l-3.73,-1.94l-2.92,-0.74l-0.89,-3.0l5.33,-2.81l0.15,-0.19l0.95,-3.43l-0.2,-2.0l1.19,-0.61l0.11,-0.09l1.23,-1.73l0.92,-0.38l2.75,0.35l0.81,0.68l0.31,0.05l0.94,-0.38l1.5,3.17Z", "name": "Iraq"}, "IS": {"path": "M384.26,87.96l-0.51,2.35l0.08,0.28l2.61,2.58l-2.99,2.83l-7.16,2.72l-2.08,0.7l-9.51,-1.71l1.89,-1.36l-0.07,-0.53l-4.4,-1.59l3.33,-0.59l0.25,-0.32l-0.11,-1.2l-0.25,-0.27l-4.82,-0.88l1.38,-2.2l3.54,-0.57l3.8,2.74l0.33,0.01l3.68,-2.18l3.02,1.12l0.25,-0.02l4.01,-2.18l3.72,0.27Z", "name": "Iceland"}, "IR": {"path": "M556.2,187.5l2.05,-0.52l0.13,-0.07l1.69,-1.57l1.55,0.08l0.15,-0.03l1.02,-0.5l1.64,0.25l2.82,1.48l1.91,0.3l2.8,2.49l0.18,0.08l1.61,0.09l0.19,2.09l-1.0,3.47l-0.69,2.04l0.18,0.38l0.73,0.28l-0.85,1.22l-0.04,0.28l0.81,2.19l0.19,1.72l0.23,0.26l1.69,0.42l0.17,1.43l-2.18,2.39l-0.01,0.4l1.22,1.42l1.0,1.62l0.12,0.11l2.23,1.11l0.06,2.2l0.2,0.27l1.03,0.38l0.14,0.83l-3.38,1.3l-0.18,0.19l-0.87,2.85l-4.44,-0.76l-2.75,-0.62l-2.64,-0.32l-1.01,-3.11l-0.17,-0.19l-1.2,-0.48l-0.18,-0.01l-1.99,0.51l-2.42,1.25l-2.89,-0.84l-2.48,-2.03l-2.41,-0.79l-1.61,-2.47l-1.84,-3.63l-0.36,-0.15l-1.22,0.4l-1.48,-0.84l-0.37,0.06l-0.72,0.82l-1.08,-1.12l-0.02,-1.35l-0.3,-0.29l-0.43,0.0l0.34,-1.64l-0.04,-0.22l-1.29,-2.11l-0.12,-0.11l-3.0,-1.49l-1.62,-2.49l0.52,-1.98l1.18,-0.92l0.11,-0.27l-0.19,-1.66l-0.16,-0.23l-1.55,-0.81l-1.58,-3.33l-1.3,-2.2l0.41,-0.75l0.03,-0.21l-0.73,-3.12l1.2,-0.59l0.35,0.9l1.26,1.35l0.15,0.09l1.81,0.39l0.91,-0.09l0.15,-0.06l2.9,-2.13l0.7,-0.16l0.48,0.56l-0.75,1.26l0.05,0.37l1.56,1.53l0.28,0.08l0.37,-0.09l0.7,1.89l0.21,0.19l2.31,0.59l1.69,1.4l0.15,0.07l3.66,0.49l3.91,-0.76l0.23,-0.19l0.19,-0.52Z", "name": "Iran"}, "AM": {"path": "M530.51,176.08l2.91,-0.39l0.41,0.63l0.11,0.1l0.66,0.36l-0.32,0.47l0.07,0.41l1.1,0.84l-0.53,0.7l0.06,0.42l1.06,0.8l1.01,0.44l0.04,1.56l-0.44,0.04l-0.88,-1.46l0.01,-0.37l-0.3,-0.31l-0.98,0.01l-0.65,-0.69l-0.26,-0.09l-0.38,0.06l-0.97,-0.82l-1.64,-0.65l0.2,-1.2l-0.02,-0.16l-0.28,-0.69Z", "name": "Armenia"}, "IT": {"path": "M451.68,158.58l0.2,0.16l3.3,0.75l-0.22,1.26l0.02,0.18l0.35,0.78l-1.4,-0.32l-0.21,0.03l-2.04,1.1l-0.16,0.29l0.13,1.47l-0.29,0.82l0.02,0.24l0.82,1.57l0.1,0.11l2.28,1.5l1.29,2.53l2.79,2.43l0.2,0.07l1.83,-0.02l0.31,0.34l-0.46,0.39l0.06,0.5l4.06,1.97l2.06,1.49l0.17,0.36l-0.24,0.53l-1.08,-1.07l-0.15,-0.08l-2.18,-0.49l-0.33,0.15l-1.05,1.91l0.11,0.4l1.63,0.98l-0.22,1.12l-0.84,0.14l-0.22,0.15l-1.27,2.38l-0.54,0.12l0.01,-0.47l0.48,-1.46l0.5,-0.58l0.03,-0.35l-0.97,-1.69l-0.76,-1.48l-0.17,-0.15l-0.94,-0.33l-0.68,-1.18l-0.16,-0.13l-1.53,-0.52l-1.03,-1.14l-0.19,-0.1l-1.78,-0.19l-1.88,-1.3l-2.27,-1.94l-1.64,-1.68l-0.76,-2.94l-0.21,-0.21l-1.22,-0.35l-2.01,-1.0l-0.24,-0.01l-1.15,0.42l-0.11,0.07l-1.38,1.36l-0.5,0.11l0.19,-0.87l-0.21,-0.35l-1.19,-0.34l-0.56,-2.06l0.76,-0.82l0.03,-0.36l-0.68,-1.08l0.04,-0.31l0.68,0.42l0.19,0.04l1.21,-0.15l0.14,-0.06l1.18,-0.89l0.25,0.29l0.25,0.1l1.19,-0.1l0.25,-0.18l0.45,-1.04l1.61,0.34l0.19,-0.02l1.1,-0.53l0.17,-0.22l0.15,-0.95l1.19,0.35l0.35,-0.16l0.23,-0.47l2.11,-0.47l0.45,0.89ZM459.35,184.63l-0.71,1.81l0.0,0.23l0.33,0.79l-0.37,1.03l-1.6,-0.91l-1.33,-0.34l-3.24,-1.36l0.23,-0.99l2.73,0.24l3.95,-0.5ZM443.95,175.91l1.26,1.77l-0.31,3.47l-0.82,-0.13l-0.26,0.08l-0.83,0.79l-0.64,-0.52l-0.1,-3.42l-0.44,-1.34l0.91,0.1l0.21,-0.06l1.01,-0.74Z", "name": "Italy"}, "VN": {"path": "M690.8,230.21l-2.86,1.93l-2.09,2.46l-0.06,0.11l-0.55,1.8l0.04,0.26l4.26,6.1l2.31,1.63l1.46,1.97l1.12,4.62l-0.32,4.3l-1.97,1.57l-2.85,1.62l-2.09,2.14l-2.83,2.13l-0.67,-1.19l0.65,-1.58l-0.09,-0.35l-1.47,-1.14l1.67,-0.79l2.57,-0.18l0.22,-0.47l-0.89,-1.24l3.88,-1.8l0.17,-0.24l0.31,-3.05l-0.01,-0.13l-0.56,-1.63l0.44,-2.48l-0.01,-0.15l-0.63,-1.81l-0.08,-0.12l-1.87,-1.77l-3.64,-5.3l-0.11,-0.1l-2.68,-1.39l0.45,-0.59l1.53,-0.65l0.16,-0.39l-0.97,-2.27l-0.27,-0.18l-2.89,-0.02l-1.04,-2.21l-1.28,-1.83l0.96,-0.46l1.97,0.01l2.43,-0.3l0.13,-0.05l1.95,-1.29l1.04,0.85l0.13,0.06l1.98,0.42l-0.32,1.21l0.09,0.3l1.19,1.07l0.12,0.07l1.88,0.51Z", "name": "Vietnam"}, "AR": {"path": "M258.11,341.34l1.4,1.81l0.51,-0.06l0.89,-1.94l2.51,0.1l0.36,0.49l4.6,4.31l0.15,0.08l1.99,0.39l3.01,1.93l2.5,1.01l0.28,0.91l-2.4,3.97l0.17,0.44l2.57,0.74l2.81,0.41l2.09,-0.44l0.14,-0.07l2.27,-2.06l0.09,-0.17l0.38,-2.2l0.88,-0.36l1.05,1.29l-0.04,1.88l-1.98,1.4l-1.72,1.13l-2.84,2.65l-3.34,3.73l-0.07,0.12l-0.63,2.22l-0.67,2.85l0.02,2.73l-0.47,0.54l-0.07,0.17l-0.36,3.28l0.12,0.27l3.03,2.32l-0.31,1.78l0.11,0.29l1.44,1.15l-0.11,1.17l-2.32,3.57l-3.59,1.51l-4.95,0.6l-2.72,-0.29l-0.32,0.38l0.5,1.67l-0.49,2.13l0.01,0.16l0.4,1.29l-1.27,0.88l-2.41,0.39l-2.33,-1.05l-0.31,0.04l-0.97,0.78l-0.11,0.27l0.35,2.98l0.16,0.23l1.69,0.91l0.31,-0.02l1.08,-0.75l0.46,0.96l-2.1,0.88l-2.01,1.89l-0.09,0.18l-0.36,3.05l-0.51,1.42l-2.16,0.01l-0.19,0.07l-1.96,1.59l-0.1,0.15l-0.72,2.34l0.08,0.31l2.46,2.31l0.13,0.07l2.09,0.56l-0.74,2.45l-2.86,1.75l-0.12,0.14l-1.59,3.71l-2.2,1.24l-0.1,0.09l-1.03,1.54l-0.04,0.23l0.81,3.45l0.06,0.13l1.13,1.32l-2.59,-0.57l-5.89,-0.44l-0.92,-1.73l0.05,-2.4l-0.34,-0.3l-1.49,0.19l-0.72,-0.98l-0.2,-3.21l1.79,-1.33l0.1,-0.13l0.79,-2.04l0.02,-0.16l-0.27,-1.52l1.31,-2.69l0.91,-4.15l-0.23,-1.72l0.91,-0.49l0.15,-0.33l-0.27,-1.16l-0.15,-0.2l-0.87,-0.46l0.65,-1.01l-0.04,-0.37l-1.06,-1.09l-0.54,-3.2l0.83,-0.51l0.14,-0.29l-0.42,-3.6l0.58,-2.98l0.64,-2.5l1.41,-1.0l0.12,-0.32l-0.75,-2.8l-0.01,-2.48l1.81,-1.78l0.09,-0.22l-0.06,-2.3l1.39,-2.69l0.03,-0.14l0.01,-2.58l-0.11,-0.24l-0.57,-0.45l-1.1,-4.59l1.49,-2.73l0.04,-0.17l-0.23,-2.59l0.86,-2.38l1.6,-2.48l1.74,-1.65l0.04,-0.39l-0.64,-0.89l0.42,-0.7l0.04,-0.16l-0.08,-4.26l2.55,-1.23l0.16,-0.18l0.86,-2.75l-0.01,-0.22l-0.22,-0.48l1.84,-2.1l3.0,0.59ZM256.77,438.98l-2.1,0.15l-1.18,-1.14l-0.19,-0.08l-1.53,-0.09l-2.38,-0.0l-0.0,-6.28l0.4,0.65l1.25,2.55l0.11,0.12l3.26,2.07l3.19,0.8l-0.82,1.26Z", "name": "Argentina"}, "AU": {"path": "M705.55,353.06l0.09,0.09l0.37,0.05l0.13,-0.35l-0.57,-1.69l0.48,0.3l0.71,0.99l0.34,0.11l0.2,-0.29l-0.04,-1.37l-0.04,-0.14l-1.22,-2.07l-0.28,-0.9l-0.51,-0.69l0.24,-1.33l0.52,-0.7l0.34,-1.32l0.01,-0.13l-0.25,-1.44l0.51,-0.94l0.1,1.03l0.23,0.26l0.32,-0.14l1.01,-1.72l1.94,-0.84l1.27,-1.14l1.84,-0.92l1.0,-0.18l0.6,0.28l0.26,-0.0l1.94,-0.96l1.48,-0.28l0.19,-0.13l0.32,-0.49l0.51,-0.18l1.42,0.05l2.63,-0.76l0.11,-0.06l1.36,-1.15l0.08,-0.1l0.61,-1.33l1.42,-1.27l0.1,-0.19l0.11,-1.03l0.06,-1.32l1.39,-1.74l0.85,1.79l0.4,0.14l1.07,-0.51l0.11,-0.45l-0.77,-1.05l0.53,-0.84l0.86,0.43l0.43,-0.22l0.29,-1.85l1.29,-1.19l0.6,-0.98l1.16,-0.4l0.2,-0.27l0.02,-0.34l0.74,0.2l0.38,-0.27l0.03,-0.44l1.98,-0.61l1.7,1.08l1.36,1.48l0.22,0.1l1.55,0.02l1.57,0.24l0.33,-0.4l-0.48,-1.27l1.09,-1.86l1.06,-0.63l0.1,-0.42l-0.28,-0.46l0.93,-1.24l1.36,-0.8l1.16,0.27l0.14,0.0l2.1,-0.48l0.23,-0.3l-0.05,-1.3l-0.18,-0.26l-1.08,-0.49l0.44,-0.12l1.52,0.58l1.39,1.06l2.11,0.65l0.19,-0.0l0.59,-0.21l1.44,0.72l0.27,0.0l1.37,-0.68l0.84,0.2l0.26,-0.06l0.37,-0.3l0.82,0.89l-0.56,1.14l-0.84,0.91l-0.75,0.07l-0.26,0.38l0.26,0.9l-0.67,1.15l-0.88,1.24l-0.05,0.25l0.18,0.72l0.12,0.17l1.99,1.42l1.96,0.84l1.25,0.86l1.8,1.51l0.19,0.07l0.63,-0.0l1.15,0.58l0.34,0.7l0.17,0.15l2.39,0.88l0.24,-0.02l1.65,-0.88l0.14,-0.16l0.49,-1.37l0.52,-1.19l0.31,-1.39l0.75,-2.02l0.01,-0.19l-0.33,-1.16l0.16,-0.67l0.0,-0.13l-0.28,-1.41l0.3,-1.78l0.42,-0.45l0.05,-0.33l-0.33,-0.73l0.56,-1.25l0.48,-1.39l0.07,-0.69l0.58,-0.59l0.48,0.84l0.17,1.53l0.17,0.24l0.47,0.23l0.09,0.9l0.05,0.14l0.87,1.23l0.17,1.33l-0.09,0.89l0.03,0.15l0.9,2.0l0.43,0.13l1.38,-0.83l0.71,0.92l1.06,0.88l-0.22,0.96l0.0,0.14l0.53,2.2l0.38,1.3l0.15,0.18l0.52,0.26l0.62,2.01l-0.23,1.27l0.02,0.18l0.81,1.76l0.14,0.14l2.69,1.35l3.21,2.21l-0.2,0.4l0.04,0.34l1.39,1.6l0.95,2.78l0.43,0.16l0.79,-0.46l0.85,0.96l0.39,0.05l0.22,-0.15l0.36,2.33l0.09,0.18l1.78,1.63l1.16,1.01l1.9,2.1l0.67,2.05l0.06,1.47l-0.17,1.64l0.03,0.17l1.16,2.22l-0.14,2.28l-0.43,1.24l-0.68,2.44l0.04,1.63l-0.48,1.92l-1.06,2.43l-1.79,1.32l-0.1,0.12l-0.91,2.15l-0.82,1.37l-0.76,2.47l-0.98,1.46l-0.63,2.14l-0.33,2.02l0.1,0.82l-1.21,0.85l-2.71,0.1l-0.13,0.03l-2.31,1.19l-1.21,1.17l-1.34,1.11l-1.89,-1.18l-1.33,-0.46l0.32,-1.24l-0.4,-0.35l-1.46,0.61l-2.06,1.98l-1.99,-0.73l-1.43,-0.46l-1.45,-0.22l-2.32,-0.81l-1.51,-1.67l-0.45,-2.11l-0.6,-1.5l-0.07,-0.11l-1.23,-1.16l-0.16,-0.08l-1.96,-0.28l0.59,-0.99l0.03,-0.24l-0.61,-2.1l-0.54,-0.08l-1.16,1.85l-1.23,0.29l0.73,-0.88l0.06,-0.12l0.37,-1.57l0.93,-1.33l0.05,-0.2l-0.2,-2.07l-0.53,-0.17l-2.01,2.35l-1.52,0.94l-0.12,0.14l-0.82,1.93l-1.5,-0.9l0.07,-1.32l-0.06,-0.2l-1.57,-2.04l-1.15,-0.92l0.3,-0.41l-0.1,-0.44l-3.21,-1.69l-0.13,-0.03l-1.69,-0.08l-2.35,-1.31l-0.16,-0.04l-4.55,0.27l-3.24,0.99l-2.8,0.91l-2.33,-0.18l-0.17,0.03l-2.63,1.41l-2.14,0.64l-0.2,0.19l-0.47,1.42l-0.8,0.99l-1.99,0.06l-1.55,0.24l-2.27,-0.5l-1.79,0.3l-1.71,0.13l-0.19,0.09l-1.38,1.39l-0.58,-0.1l-0.21,0.04l-1.26,0.8l-1.13,0.85l-1.72,-0.1l-1.6,-0.0l-2.58,-1.76l-1.21,-0.49l0.04,-1.19l1.04,-0.32l0.16,-0.12l0.42,-0.64l0.05,-0.19l-0.09,-0.97l0.3,-2.0l-0.28,-1.64l-1.34,-2.84l-0.39,-1.49l0.1,-1.51l-0.04,-0.17l-0.96,-1.72l-0.06,-0.73l-0.09,-0.19l-1.04,-1.01l-0.3,-2.02l-0.05,-0.12l-1.23,-1.83ZM784.95,393.35l2.39,1.01l0.2,0.01l3.26,-0.96l1.19,0.16l0.16,3.19l-0.78,0.95l-0.07,0.16l-0.19,1.83l-0.43,-0.41l-0.44,0.03l-1.61,1.96l-0.4,-0.12l-1.38,-0.09l-1.43,-2.42l-0.37,-2.03l-1.4,-2.53l0.04,-0.94l1.27,0.2Z", "name": "Australia"}, "IL": {"path": "M509.04,199.22l0.71,0.0l0.27,-0.17l0.15,-0.33l0.19,-0.01l0.02,0.73l-0.27,0.34l0.02,0.08l-0.32,0.62l-0.65,-0.27l-0.41,0.19l-0.52,1.85l0.16,0.35l0.14,0.07l-0.17,0.1l-0.14,0.21l-0.11,0.73l0.39,0.33l0.81,-0.26l0.03,0.64l-0.97,3.43l-1.28,-3.67l0.62,-0.78l-0.03,-0.41l0.58,-1.16l0.5,-2.07l0.27,-0.54Z", "name": "Israel"}, "IN": {"path": "M615.84,192.58l2.4,2.97l-0.24,2.17l0.05,0.2l0.94,1.35l-0.06,0.97l-1.46,-0.3l-0.35,0.36l0.7,3.06l0.12,0.18l2.46,1.75l3.11,1.72l-1.23,0.96l-0.1,0.13l-0.97,2.55l0.16,0.38l2.41,1.02l2.37,1.33l3.27,1.52l3.43,0.37l1.37,1.3l0.17,0.08l1.92,0.25l3.0,0.62l2.15,-0.04l0.28,-0.22l0.29,-1.06l0.0,-0.13l-0.32,-1.66l0.16,-0.94l1.0,-0.37l0.23,2.28l0.18,0.24l2.28,1.02l0.2,0.02l1.52,-0.41l2.06,0.18l2.08,-0.08l0.29,-0.27l0.18,-1.66l-0.1,-0.26l-0.53,-0.44l1.38,-0.23l0.15,-0.07l2.26,-2.0l2.75,-1.65l1.97,0.63l0.25,-0.03l1.54,-0.99l0.89,1.28l-0.72,0.97l0.2,0.48l2.49,0.37l0.11,0.61l-0.69,0.39l-0.15,0.3l0.15,1.22l-1.36,-0.37l-0.23,0.03l-3.24,1.86l-0.15,0.28l0.07,1.44l-1.33,2.16l-0.04,0.13l-0.12,1.24l-0.98,1.91l-1.72,-0.53l-0.39,0.28l-0.09,2.66l-0.52,0.83l-0.04,0.23l0.21,0.89l-0.71,0.36l-1.21,-3.85l-0.29,-0.21l-0.69,0.01l-0.29,0.23l-0.28,1.17l-0.84,-0.84l0.6,-1.17l0.97,-0.13l0.23,-0.16l1.15,-2.25l-0.18,-0.42l-1.54,-0.47l-2.3,0.04l-2.13,-0.33l-0.19,-1.63l-0.26,-0.26l-1.13,-0.13l-1.93,-1.13l-0.42,0.13l-0.88,1.82l0.08,0.37l1.47,1.15l-1.21,0.77l-0.1,0.1l-0.56,0.97l0.13,0.42l1.31,0.61l-0.36,1.35l0.01,0.2l0.85,1.95l0.37,2.05l-0.26,0.68l-1.55,-0.02l-3.09,0.54l-0.25,0.32l0.13,1.84l-1.21,1.4l-3.64,1.79l-2.79,3.04l-1.86,1.61l-2.48,1.68l-0.13,0.25l-0.0,1.0l-1.07,0.55l-2.21,0.9l-1.13,0.13l-0.25,0.19l-0.75,1.96l-0.02,0.15l0.52,3.31l0.13,2.03l-1.03,2.35l-0.03,0.12l-0.01,4.03l-1.02,0.1l-0.23,0.15l-1.14,1.93l0.04,0.36l0.44,0.48l-1.83,0.57l-0.18,0.15l-0.81,1.65l-0.74,0.53l-2.14,-2.12l-1.14,-3.47l-0.96,-2.57l-0.9,-1.26l-1.3,-2.38l-0.61,-3.14l-0.44,-1.62l-2.29,-3.56l-1.03,-4.94l-0.74,-3.29l0.01,-3.12l-0.49,-2.51l-0.41,-0.22l-3.56,1.53l-1.59,-0.28l-2.96,-2.87l0.94,-0.74l0.06,-0.41l-0.74,-1.03l-2.73,-2.1l1.35,-1.43l5.38,0.01l0.29,-0.36l-0.5,-2.29l-0.09,-0.15l-1.33,-1.28l-0.27,-1.96l-0.12,-0.2l-1.36,-1.0l2.42,-2.48l2.77,0.2l0.24,-0.1l2.62,-2.85l1.59,-2.8l2.41,-2.74l0.07,-0.2l-0.04,-1.82l2.01,-1.51l-0.01,-0.49l-1.95,-1.33l-0.83,-1.81l-0.82,-2.27l0.98,-0.97l3.64,0.66l2.89,-0.42l0.17,-0.08l2.18,-2.15Z", "name": "India"}, "TZ": {"path": "M505.77,287.58l0.36,0.23l8.95,5.03l0.15,1.3l0.13,0.21l3.4,2.37l-1.07,2.88l-0.02,0.14l0.15,1.42l0.15,0.23l1.47,0.84l0.05,0.42l-0.66,1.44l-0.02,0.18l0.13,0.72l-0.16,1.16l0.03,0.19l0.87,1.57l1.03,2.48l0.12,0.14l0.53,0.32l-1.59,1.18l-2.64,0.95l-1.45,-0.04l-0.2,0.07l-0.81,0.69l-1.64,0.06l-0.68,0.3l-2.9,-0.69l-1.71,0.17l-0.65,-3.18l-0.05,-0.12l-1.35,-1.88l-0.19,-0.12l-2.41,-0.46l-1.38,-0.74l-1.63,-0.44l-0.96,-0.41l-0.95,-0.58l-1.31,-3.09l-1.47,-1.46l-0.45,-1.31l0.24,-1.34l-0.39,-1.99l0.71,-0.08l0.18,-0.09l0.91,-0.91l0.98,-1.31l0.59,-0.5l0.11,-0.24l-0.02,-0.81l-0.08,-0.2l-0.47,-0.5l-0.1,-0.67l0.51,-0.23l0.18,-0.25l0.14,-1.47l-0.05,-0.2l-0.76,-1.09l0.45,-0.15l2.71,0.03l5.01,-0.19Z", "name": "Tanzania"}, "AZ": {"path": "M539.36,175.66l0.16,0.09l1.11,0.2l0.32,-0.15l0.4,-0.71l1.22,-0.99l1.11,1.33l1.26,2.09l0.22,0.14l1.06,0.13l0.28,0.29l-1.46,0.17l-0.26,0.24l-0.43,2.26l-0.39,0.92l-0.85,0.63l-0.12,0.25l0.06,1.2l-0.22,0.05l-1.28,-1.25l0.74,-1.25l-0.03,-0.35l-0.74,-0.86l-0.3,-0.1l-1.05,0.27l-2.49,1.82l-0.04,-1.46l-0.18,-0.27l-1.09,-0.47l-0.8,-0.6l0.53,-0.7l-0.06,-0.42l-1.11,-0.84l0.34,-0.51l-0.11,-0.43l-0.89,-0.48l-0.33,-0.49l0.25,-0.2l1.78,0.81l1.35,0.18l0.25,-0.09l0.34,-0.35l0.02,-0.39l-1.04,-1.36l0.28,-0.18l0.49,0.07l1.65,1.74ZM533.53,180.16l0.63,0.67l0.22,0.09l0.8,-0.0l0.04,0.31l0.66,1.09l-0.94,-0.21l-1.16,-1.24l-0.25,-0.71Z", "name": "Azerbaijan"}, "IE": {"path": "M405.17,135.35l0.36,2.16l-1.78,2.84l-4.28,1.91l-3.02,-0.43l1.81,-3.13l0.02,-0.26l-1.23,-3.26l3.24,-2.56l1.54,-1.32l0.37,1.33l-0.49,1.77l0.3,0.38l1.49,-0.05l1.68,0.63Z", "name": "Ireland"}, "ID": {"path": "M756.56,287.86l0.69,4.02l0.15,0.21l2.59,1.5l0.39,-0.07l2.05,-2.61l2.75,-1.45l2.09,-0.0l2.08,0.85l1.85,0.89l2.52,0.46l0.08,15.44l-1.72,-1.6l-0.15,-0.07l-2.54,-0.51l-0.29,0.1l-0.53,0.62l-2.53,0.06l0.78,-1.51l1.48,-0.66l0.17,-0.34l-0.65,-2.74l-1.23,-2.19l-0.14,-0.13l-4.85,-2.13l-2.09,-0.23l-3.7,-2.28l-0.41,0.1l-0.67,1.11l-0.63,0.14l-0.41,-0.67l-0.01,-1.01l-0.14,-0.25l-1.39,-0.89l2.05,-0.69l1.73,0.05l0.29,-0.39l-0.21,-0.66l-0.29,-0.21l-3.5,-0.0l-0.9,-1.36l-0.19,-0.13l-2.14,-0.44l-0.65,-0.76l2.86,-0.51l1.28,-0.79l3.75,0.96l0.32,0.76ZM758.01,300.37l-0.79,1.04l-0.14,-1.07l0.4,-0.81l0.29,-0.47l0.24,0.31l-0.0,1.0ZM747.45,292.9l0.48,1.02l-1.45,-0.69l-2.09,-0.21l-1.45,0.16l-1.28,-0.07l0.35,-0.81l2.86,-0.1l2.58,0.68ZM741.15,285.69l-0.16,-0.25l-0.72,-3.08l0.47,-1.86l0.35,-0.38l0.1,0.73l0.25,0.26l1.28,0.19l0.18,0.78l-0.11,1.8l-0.96,-0.18l-0.35,0.22l-0.38,1.52l0.05,0.24ZM741.19,285.75l0.76,0.97l-0.11,0.05l-0.65,-1.02ZM739.18,293.52l-0.61,0.54l-1.44,-0.38l-0.25,-0.55l1.93,-0.09l0.36,0.48ZM728.4,295.87l-0.27,-0.07l-2.26,0.89l-0.37,-0.41l0.27,-0.8l-0.09,-0.33l-1.68,-1.37l0.17,-2.29l-0.42,-0.3l-1.67,0.76l-0.17,0.29l0.21,2.92l0.09,3.34l-1.22,0.28l-0.78,-0.54l0.65,-2.1l0.01,-0.14l-0.39,-2.42l-0.29,-0.25l-0.86,-0.02l-0.63,-1.4l0.99,-1.61l0.35,-1.97l1.24,-3.73l0.49,-0.96l1.95,-1.7l1.86,0.69l3.16,0.35l2.92,-0.1l0.17,-0.06l2.24,-1.65l0.11,0.14l-1.8,2.22l-1.72,0.44l-2.41,-0.48l-4.21,0.13l-2.19,0.36l-0.25,0.24l-0.36,1.9l0.08,0.27l2.24,2.23l0.4,0.02l1.29,-1.08l3.19,-0.58l-0.19,0.06l-1.04,1.4l-2.13,0.94l-0.12,0.45l2.26,3.06l-0.37,0.69l0.03,0.32l1.51,1.95ZM728.48,295.97l0.59,0.76l-0.02,1.37l-1.0,0.55l-0.64,-0.58l1.09,-1.84l-0.02,-0.26ZM728.64,286.95l0.79,-0.14l-0.07,0.39l-0.72,-0.24ZM732.38,310.1l-1.89,0.49l-0.06,-0.06l0.17,-0.64l1.0,-1.42l2.14,-0.87l0.1,0.2l0.04,0.58l-1.49,1.72ZM728.26,305.71l-0.17,0.63l-3.53,0.67l-3.02,-0.28l-0.0,-0.42l1.66,-0.44l1.47,0.71l0.16,0.03l1.75,-0.21l1.69,-0.69ZM722.98,310.33l-0.74,0.03l-2.52,-1.35l1.42,-0.3l1.19,0.7l0.72,0.63l-0.06,0.28ZM716.24,305.63l0.66,0.49l0.22,0.06l1.35,-0.18l0.31,0.53l-4.18,0.77l-0.8,-0.01l0.51,-0.86l1.2,-0.02l0.24,-0.12l0.49,-0.65ZM715.84,280.21l0.09,0.34l2.25,1.86l-2.25,0.22l-0.24,0.17l-0.84,1.71l-0.03,0.15l0.1,2.11l-2.27,1.62l-0.13,0.24l-0.06,2.46l-0.74,2.92l-0.02,-0.05l-0.39,-0.16l-2.62,1.04l-0.86,-1.33l-0.23,-0.14l-1.71,-0.14l-1.19,-0.76l-0.25,-0.03l-2.78,0.84l-0.79,-1.05l-0.26,-0.12l-1.61,0.13l-1.8,-0.25l-0.36,-3.13l-0.15,-0.23l-1.18,-0.65l-1.13,-2.02l-0.33,-2.1l0.27,-2.19l1.05,-1.17l0.28,1.12l0.1,0.16l1.71,1.41l0.28,0.05l1.55,-0.49l1.54,0.17l0.23,-0.07l1.4,-1.21l1.05,-0.19l2.3,0.68l0.16,0.0l2.04,-0.53l0.21,-0.19l1.26,-3.41l0.91,-0.82l0.09,-0.14l0.8,-2.64l2.63,0.0l1.71,0.33l-1.19,1.89l0.02,0.34l1.74,2.24l-0.37,1.0ZM692.67,302.0l0.26,0.19l4.8,0.25l0.28,-0.16l0.44,-0.83l4.29,1.12l0.85,1.52l0.23,0.15l3.71,0.45l2.37,1.15l-2.06,0.69l-2.77,-1.0l-2.25,0.07l-2.57,-0.18l-2.31,-0.45l-2.94,-0.97l-1.84,-0.25l-0.13,0.01l-0.97,0.29l-4.34,-0.98l-0.38,-0.94l-0.25,-0.19l-1.76,-0.14l1.31,-1.84l2.81,0.14l1.97,0.96l0.95,0.19l0.28,0.74ZM685.63,299.27l-2.36,0.04l-2.07,-2.05l-3.17,-2.02l-1.06,-1.5l-1.88,-2.02l-1.22,-1.85l-1.9,-3.49l-2.2,-2.11l-0.71,-2.08l-0.94,-1.99l-0.1,-0.12l-2.21,-1.54l-1.35,-2.17l-1.86,-1.39l-2.53,-2.68l-0.14,-0.81l1.22,0.08l3.76,0.47l2.16,2.4l1.94,1.7l1.37,1.04l2.35,2.67l0.22,0.1l2.44,0.04l1.99,1.62l1.42,2.06l0.09,0.09l1.67,1.0l-0.88,1.8l0.11,0.39l1.44,0.87l0.13,0.04l0.68,0.05l0.41,1.62l0.87,1.4l0.22,0.14l1.71,0.21l1.06,1.38l-0.61,3.04l-0.09,3.6Z", "name": "Indonesia"}, "UA": {"path": "M500.54,141.42l0.9,0.13l0.27,-0.11l0.52,-0.62l0.68,0.13l2.43,-0.3l1.32,1.57l-0.45,0.48l-0.07,0.26l0.21,1.03l0.27,0.24l1.85,0.15l0.76,1.22l-0.05,0.55l0.2,0.31l3.18,1.15l0.18,0.01l1.75,-0.47l1.42,1.41l0.22,0.09l1.42,-0.03l3.44,0.99l0.02,0.65l-0.97,1.62l-0.03,0.24l0.52,1.67l-0.29,0.79l-2.24,0.22l-0.14,0.05l-1.29,0.89l-0.13,0.23l-0.07,1.16l-1.75,0.22l-0.12,0.04l-1.6,0.98l-2.27,0.16l-0.12,0.04l-2.16,1.17l-0.16,0.29l0.15,1.94l0.14,0.23l1.23,0.75l0.18,0.04l2.06,-0.15l-0.22,0.51l-2.67,0.54l-3.27,1.72l-1.0,-0.45l0.45,-1.19l-0.19,-0.39l-2.34,-0.78l0.15,-0.2l2.32,-1.0l0.09,-0.49l-0.73,-0.72l-0.15,-0.08l-3.69,-0.75l-0.14,-0.96l-0.35,-0.25l-2.32,0.39l-0.21,0.15l-0.91,1.7l-1.77,2.1l-0.93,-0.44l-0.24,-0.0l-1.05,0.45l-0.48,-0.25l0.13,-0.07l0.14,-0.15l0.43,-1.04l0.67,-0.97l0.04,-0.26l-0.1,-0.31l0.04,-0.02l0.11,0.19l0.24,0.15l1.48,0.09l0.78,-0.25l0.07,-0.53l-0.27,-0.19l0.09,-0.25l-0.08,-0.33l-0.81,-0.74l-0.34,-1.24l-0.14,-0.18l-0.73,-0.42l0.15,-0.87l-0.11,-0.29l-1.13,-0.86l-0.15,-0.06l-0.97,-0.11l-1.79,-0.97l-0.2,-0.03l-1.66,0.32l-0.13,0.06l-0.52,0.41l-0.95,-0.0l-0.23,0.11l-0.56,0.66l-1.74,0.29l-0.79,0.43l-1.01,-0.68l-0.16,-0.05l-1.57,-0.01l-1.52,-0.35l-0.23,0.04l-0.71,0.45l-0.09,-0.43l-0.13,-0.19l-1.18,-0.74l0.38,-1.02l0.53,-0.64l0.35,0.12l0.37,-0.41l-0.57,-1.29l2.1,-2.5l1.16,-0.36l0.2,-0.2l0.27,-0.92l-0.01,-0.2l-1.1,-2.52l0.79,-0.09l0.13,-0.05l1.3,-0.86l1.83,-0.07l2.48,0.26l2.84,0.8l1.91,0.06l0.88,0.45l0.29,-0.01l0.72,-0.44l0.49,0.58l0.25,0.11l2.2,-0.16l0.94,0.3l0.39,-0.26l0.15,-1.57l0.61,-0.59l2.01,-0.19Z", "name": "Ukraine"}, "QA": {"path": "M548.47,221.47l-0.15,-1.72l0.59,-1.23l0.38,-0.16l0.54,0.6l0.04,1.4l-0.47,1.37l-0.41,0.11l-0.53,-0.37Z", "name": "Qatar"}, "MZ": {"path": "M507.71,314.14l1.65,-0.18l2.96,0.7l0.2,-0.02l0.6,-0.29l1.68,-0.06l0.18,-0.07l0.8,-0.69l1.5,0.02l2.74,-0.98l1.74,-1.27l0.25,0.7l-0.1,2.47l0.31,2.27l0.1,3.97l0.42,1.24l-0.7,1.71l-0.94,1.73l-1.52,1.52l-5.06,2.21l-2.88,2.8l-1.01,0.51l-1.72,1.81l-0.99,0.58l-0.15,0.23l-0.21,1.86l0.04,0.19l1.17,1.95l0.47,1.47l0.03,0.74l0.39,0.28l0.05,-0.01l-0.06,2.13l-0.39,1.19l0.1,0.33l0.42,0.32l-0.28,0.83l-0.95,0.86l-2.03,0.88l-3.08,1.49l-1.1,0.99l-0.09,0.28l0.21,1.13l0.21,0.23l0.38,0.11l-0.14,0.89l-1.39,-0.02l-0.17,-0.94l-0.38,-1.23l-0.2,-0.89l0.44,-2.91l-0.01,-0.14l-0.65,-1.88l-1.15,-3.55l2.52,-2.85l0.68,-1.89l0.29,-0.18l0.14,-0.2l0.28,-1.53l-0.03,-0.19l-0.36,-0.7l0.1,-1.83l0.49,-1.84l-0.01,-3.26l-0.14,-0.25l-1.3,-0.83l-0.11,-0.04l-1.08,-0.17l-0.47,-0.55l-0.1,-0.08l-1.16,-0.54l-0.13,-0.03l-1.83,0.04l-0.32,-2.25l7.19,-1.99l1.32,1.12l0.29,0.06l0.55,-0.19l0.75,0.49l0.11,0.81l-0.49,1.11l-0.02,0.15l0.19,1.81l0.09,0.18l1.63,1.59l0.48,-0.1l0.72,-1.68l0.99,-0.49l0.17,-0.29l-0.21,-3.29l-0.04,-0.13l-1.11,-1.92l-0.9,-0.82l-0.21,-0.08l-0.62,0.03l-0.63,-2.98l0.61,-1.67Z", "name": "Mozambique"}}, "height": 440.7063107441331, "projection": {"type": "mill", "centralMeridian": 11.5}, "width": 900.0});
|
3.0.14/assets/admin/scripts/morris.js
ADDED
@@ -0,0 +1,1892 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* @license
|
2 |
+
morris.js v0.5.0
|
3 |
+
Copyright 2014 Olly Smith All rights reserved.
|
4 |
+
Licensed under the BSD-2-Clause License.
|
5 |
+
*/
|
6 |
+
|
7 |
+
|
8 |
+
(function() {
|
9 |
+
var $, Morris, minutesSpecHelper, secondsSpecHelper,
|
10 |
+
__slice = [].slice,
|
11 |
+
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
|
12 |
+
__hasProp = {}.hasOwnProperty,
|
13 |
+
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
14 |
+
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
15 |
+
|
16 |
+
Morris = window.Morris = {};
|
17 |
+
|
18 |
+
$ = jQuery;
|
19 |
+
|
20 |
+
Morris.EventEmitter = (function() {
|
21 |
+
function EventEmitter() {}
|
22 |
+
|
23 |
+
EventEmitter.prototype.on = function(name, handler) {
|
24 |
+
if (this.handlers == null) {
|
25 |
+
this.handlers = {};
|
26 |
+
}
|
27 |
+
if (this.handlers[name] == null) {
|
28 |
+
this.handlers[name] = [];
|
29 |
+
}
|
30 |
+
this.handlers[name].push(handler);
|
31 |
+
return this;
|
32 |
+
};
|
33 |
+
|
34 |
+
EventEmitter.prototype.fire = function() {
|
35 |
+
var args, handler, name, _i, _len, _ref, _results;
|
36 |
+
name = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
37 |
+
if ((this.handlers != null) && (this.handlers[name] != null)) {
|
38 |
+
_ref = this.handlers[name];
|
39 |
+
_results = [];
|
40 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
41 |
+
handler = _ref[_i];
|
42 |
+
_results.push(handler.apply(null, args));
|
43 |
+
}
|
44 |
+
return _results;
|
45 |
+
}
|
46 |
+
};
|
47 |
+
|
48 |
+
return EventEmitter;
|
49 |
+
|
50 |
+
})();
|
51 |
+
|
52 |
+
Morris.commas = function(num) {
|
53 |
+
var absnum, intnum, ret, strabsnum;
|
54 |
+
if (num != null) {
|
55 |
+
ret = num < 0 ? "-" : "";
|
56 |
+
absnum = Math.abs(num);
|
57 |
+
intnum = Math.floor(absnum).toFixed(0);
|
58 |
+
ret += intnum.replace(/(?=(?:\d{3})+$)(?!^)/g, ',');
|
59 |
+
strabsnum = absnum.toString();
|
60 |
+
if (strabsnum.length > intnum.length) {
|
61 |
+
ret += strabsnum.slice(intnum.length);
|
62 |
+
}
|
63 |
+
return ret;
|
64 |
+
} else {
|
65 |
+
return '-';
|
66 |
+
}
|
67 |
+
};
|
68 |
+
|
69 |
+
Morris.pad2 = function(number) {
|
70 |
+
return (number < 10 ? '0' : '') + number;
|
71 |
+
};
|
72 |
+
|
73 |
+
Morris.Grid = (function(_super) {
|
74 |
+
__extends(Grid, _super);
|
75 |
+
|
76 |
+
function Grid(options) {
|
77 |
+
this.resizeHandler = __bind(this.resizeHandler, this);
|
78 |
+
var _this = this;
|
79 |
+
if (typeof options.element === 'string') {
|
80 |
+
this.el = $(document.getElementById(options.element));
|
81 |
+
} else {
|
82 |
+
this.el = $(options.element);
|
83 |
+
}
|
84 |
+
if ((this.el == null) || this.el.length === 0) {
|
85 |
+
throw new Error("Graph container element not found");
|
86 |
+
}
|
87 |
+
if (this.el.css('position') === 'static') {
|
88 |
+
this.el.css('position', 'relative');
|
89 |
+
}
|
90 |
+
this.options = $.extend({}, this.gridDefaults, this.defaults || {}, options);
|
91 |
+
if (typeof this.options.units === 'string') {
|
92 |
+
this.options.postUnits = options.units;
|
93 |
+
}
|
94 |
+
this.raphael = new Raphael(this.el[0]);
|
95 |
+
this.elementWidth = null;
|
96 |
+
this.elementHeight = null;
|
97 |
+
this.dirty = false;
|
98 |
+
this.selectFrom = null;
|
99 |
+
if (this.init) {
|
100 |
+
this.init();
|
101 |
+
}
|
102 |
+
this.setData(this.options.data);
|
103 |
+
this.el.bind('mousemove', function(evt) {
|
104 |
+
var left, offset, right, width, x;
|
105 |
+
offset = _this.el.offset();
|
106 |
+
x = evt.pageX - offset.left;
|
107 |
+
if (_this.selectFrom) {
|
108 |
+
left = _this.data[_this.hitTest(Math.min(x, _this.selectFrom))]._x;
|
109 |
+
right = _this.data[_this.hitTest(Math.max(x, _this.selectFrom))]._x;
|
110 |
+
width = right - left;
|
111 |
+
return _this.selectionRect.attr({
|
112 |
+
x: left,
|
113 |
+
width: width
|
114 |
+
});
|
115 |
+
} else {
|
116 |
+
return _this.fire('hovermove', x, evt.pageY - offset.top);
|
117 |
+
}
|
118 |
+
});
|
119 |
+
this.el.bind('mouseleave', function(evt) {
|
120 |
+
if (_this.selectFrom) {
|
121 |
+
_this.selectionRect.hide();
|
122 |
+
_this.selectFrom = null;
|
123 |
+
}
|
124 |
+
return _this.fire('hoverout');
|
125 |
+
});
|
126 |
+
this.el.bind('touchstart touchmove touchend', function(evt) {
|
127 |
+
var offset, touch;
|
128 |
+
touch = evt.originalEvent.touches[0] || evt.originalEvent.changedTouches[0];
|
129 |
+
offset = _this.el.offset();
|
130 |
+
return _this.fire('hovermove', touch.pageX - offset.left, touch.pageY - offset.top);
|
131 |
+
});
|
132 |
+
this.el.bind('click', function(evt) {
|
133 |
+
var offset;
|
134 |
+
offset = _this.el.offset();
|
135 |
+
return _this.fire('gridclick', evt.pageX - offset.left, evt.pageY - offset.top);
|
136 |
+
});
|
137 |
+
if (this.options.rangeSelect) {
|
138 |
+
this.selectionRect = this.raphael.rect(0, 0, 0, this.el.innerHeight()).attr({
|
139 |
+
fill: this.options.rangeSelectColor,
|
140 |
+
stroke: false
|
141 |
+
}).toBack().hide();
|
142 |
+
this.el.bind('mousedown', function(evt) {
|
143 |
+
var offset;
|
144 |
+
offset = _this.el.offset();
|
145 |
+
return _this.startRange(evt.pageX - offset.left);
|
146 |
+
});
|
147 |
+
this.el.bind('mouseup', function(evt) {
|
148 |
+
var offset;
|
149 |
+
offset = _this.el.offset();
|
150 |
+
_this.endRange(evt.pageX - offset.left);
|
151 |
+
return _this.fire('hovermove', evt.pageX - offset.left, evt.pageY - offset.top);
|
152 |
+
});
|
153 |
+
}
|
154 |
+
if (this.options.resize) {
|
155 |
+
$(window).bind('resize', function(evt) {
|
156 |
+
if (_this.timeoutId != null) {
|
157 |
+
window.clearTimeout(_this.timeoutId);
|
158 |
+
}
|
159 |
+
return _this.timeoutId = window.setTimeout(_this.resizeHandler, 100);
|
160 |
+
});
|
161 |
+
}
|
162 |
+
this.el.css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)');
|
163 |
+
if (this.postInit) {
|
164 |
+
this.postInit();
|
165 |
+
}
|
166 |
+
}
|
167 |
+
|
168 |
+
Grid.prototype.gridDefaults = {
|
169 |
+
dateFormat: null,
|
170 |
+
axes: true,
|
171 |
+
grid: true,
|
172 |
+
gridLineColor: '#aaa',
|
173 |
+
gridStrokeWidth: 0.5,
|
174 |
+
gridTextColor: '#888',
|
175 |
+
gridTextSize: 12,
|
176 |
+
gridTextFamily: 'sans-serif',
|
177 |
+
gridTextWeight: 'normal',
|
178 |
+
hideHover: false,
|
179 |
+
yLabelFormat: null,
|
180 |
+
xLabelAngle: 0,
|
181 |
+
numLines: 5,
|
182 |
+
padding: 25,
|
183 |
+
parseTime: true,
|
184 |
+
postUnits: '',
|
185 |
+
preUnits: '',
|
186 |
+
ymax: 'auto',
|
187 |
+
ymin: 'auto 0',
|
188 |
+
goals: [],
|
189 |
+
goalStrokeWidth: 1.0,
|
190 |
+
goalLineColors: ['#666633', '#999966', '#cc6666', '#663333'],
|
191 |
+
events: [],
|
192 |
+
eventStrokeWidth: 1.0,
|
193 |
+
eventLineColors: ['#005a04', '#ccffbb', '#3a5f0b', '#005502'],
|
194 |
+
rangeSelect: null,
|
195 |
+
rangeSelectColor: '#eef',
|
196 |
+
resize: false
|
197 |
+
};
|
198 |
+
|
199 |
+
Grid.prototype.setData = function(data, redraw) {
|
200 |
+
var e, idx, index, maxGoal, minGoal, ret, row, step, total, y, ykey, ymax, ymin, yval, _ref;
|
201 |
+
if (redraw == null) {
|
202 |
+
redraw = true;
|
203 |
+
}
|
204 |
+
this.options.data = data;
|
205 |
+
if ((data == null) || data.length === 0) {
|
206 |
+
this.data = [];
|
207 |
+
this.raphael.clear();
|
208 |
+
if (this.hover != null) {
|
209 |
+
this.hover.hide();
|
210 |
+
}
|
211 |
+
return;
|
212 |
+
}
|
213 |
+
ymax = this.cumulative ? 0 : null;
|
214 |
+
ymin = this.cumulative ? 0 : null;
|
215 |
+
if (this.options.goals.length > 0) {
|
216 |
+
minGoal = Math.min.apply(Math, this.options.goals);
|
217 |
+
maxGoal = Math.max.apply(Math, this.options.goals);
|
218 |
+
ymin = ymin != null ? Math.min(ymin, minGoal) : minGoal;
|
219 |
+
ymax = ymax != null ? Math.max(ymax, maxGoal) : maxGoal;
|
220 |
+
}
|
221 |
+
this.data = (function() {
|
222 |
+
var _i, _len, _results;
|
223 |
+
_results = [];
|
224 |
+
for (index = _i = 0, _len = data.length; _i < _len; index = ++_i) {
|
225 |
+
row = data[index];
|
226 |
+
ret = {
|
227 |
+
src: row
|
228 |
+
};
|
229 |
+
ret.label = row[this.options.xkey];
|
230 |
+
if (this.options.parseTime) {
|
231 |
+
ret.x = Morris.parseDate(ret.label);
|
232 |
+
if (this.options.dateFormat) {
|
233 |
+
ret.label = this.options.dateFormat(ret.x);
|
234 |
+
} else if (typeof ret.label === 'number') {
|
235 |
+
ret.label = new Date(ret.label).toString();
|
236 |
+
}
|
237 |
+
} else {
|
238 |
+
ret.x = index;
|
239 |
+
if (this.options.xLabelFormat) {
|
240 |
+
ret.label = this.options.xLabelFormat(ret);
|
241 |
+
}
|
242 |
+
}
|
243 |
+
total = 0;
|
244 |
+
ret.y = (function() {
|
245 |
+
var _j, _len1, _ref, _results1;
|
246 |
+
_ref = this.options.ykeys;
|
247 |
+
_results1 = [];
|
248 |
+
for (idx = _j = 0, _len1 = _ref.length; _j < _len1; idx = ++_j) {
|
249 |
+
ykey = _ref[idx];
|
250 |
+
yval = row[ykey];
|
251 |
+
if (typeof yval === 'string') {
|
252 |
+
yval = parseFloat(yval);
|
253 |
+
}
|
254 |
+
if ((yval != null) && typeof yval !== 'number') {
|
255 |
+
yval = null;
|
256 |
+
}
|
257 |
+
if (yval != null) {
|
258 |
+
if (this.cumulative) {
|
259 |
+
total += yval;
|
260 |
+
} else {
|
261 |
+
if (ymax != null) {
|
262 |
+
ymax = Math.max(yval, ymax);
|
263 |
+
ymin = Math.min(yval, ymin);
|
264 |
+
} else {
|
265 |
+
ymax = ymin = yval;
|
266 |
+
}
|
267 |
+
}
|
268 |
+
}
|
269 |
+
if (this.cumulative && (total != null)) {
|
270 |
+
ymax = Math.max(total, ymax);
|
271 |
+
ymin = Math.min(total, ymin);
|
272 |
+
}
|
273 |
+
_results1.push(yval);
|
274 |
+
}
|
275 |
+
return _results1;
|
276 |
+
}).call(this);
|
277 |
+
_results.push(ret);
|
278 |
+
}
|
279 |
+
return _results;
|
280 |
+
}).call(this);
|
281 |
+
if (this.options.parseTime) {
|
282 |
+
this.data = this.data.sort(function(a, b) {
|
283 |
+
return (a.x > b.x) - (b.x > a.x);
|
284 |
+
});
|
285 |
+
}
|
286 |
+
this.xmin = this.data[0].x;
|
287 |
+
this.xmax = this.data[this.data.length - 1].x;
|
288 |
+
this.events = [];
|
289 |
+
if (this.options.events.length > 0) {
|
290 |
+
if (this.options.parseTime) {
|
291 |
+
this.events = (function() {
|
292 |
+
var _i, _len, _ref, _results;
|
293 |
+
_ref = this.options.events;
|
294 |
+
_results = [];
|
295 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
296 |
+
e = _ref[_i];
|
297 |
+
_results.push(Morris.parseDate(e));
|
298 |
+
}
|
299 |
+
return _results;
|
300 |
+
}).call(this);
|
301 |
+
} else {
|
302 |
+
this.events = this.options.events;
|
303 |
+
}
|
304 |
+
this.xmax = Math.max(this.xmax, Math.max.apply(Math, this.events));
|
305 |
+
this.xmin = Math.min(this.xmin, Math.min.apply(Math, this.events));
|
306 |
+
}
|
307 |
+
if (this.xmin === this.xmax) {
|
308 |
+
this.xmin -= 1;
|
309 |
+
this.xmax += 1;
|
310 |
+
}
|
311 |
+
this.ymin = this.yboundary('min', ymin);
|
312 |
+
this.ymax = this.yboundary('max', ymax);
|
313 |
+
if (this.ymin === this.ymax) {
|
314 |
+
if (ymin) {
|
315 |
+
this.ymin -= 1;
|
316 |
+
}
|
317 |
+
this.ymax += 1;
|
318 |
+
}
|
319 |
+
if (((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'y') || this.options.grid === true) {
|
320 |
+
if (this.options.ymax === this.gridDefaults.ymax && this.options.ymin === this.gridDefaults.ymin) {
|
321 |
+
this.grid = this.autoGridLines(this.ymin, this.ymax, this.options.numLines);
|
322 |
+
this.ymin = Math.min(this.ymin, this.grid[0]);
|
323 |
+
this.ymax = Math.max(this.ymax, this.grid[this.grid.length - 1]);
|
324 |
+
} else {
|
325 |
+
step = (this.ymax - this.ymin) / (this.options.numLines - 1);
|
326 |
+
this.grid = (function() {
|
327 |
+
var _i, _ref1, _ref2, _results;
|
328 |
+
_results = [];
|
329 |
+
for (y = _i = _ref1 = this.ymin, _ref2 = this.ymax; step > 0 ? _i <= _ref2 : _i >= _ref2; y = _i += step) {
|
330 |
+
_results.push(y);
|
331 |
+
}
|
332 |
+
return _results;
|
333 |
+
}).call(this);
|
334 |
+
}
|
335 |
+
}
|
336 |
+
this.dirty = true;
|
337 |
+
if (redraw) {
|
338 |
+
return this.redraw();
|
339 |
+
}
|
340 |
+
};
|
341 |
+
|
342 |
+
Grid.prototype.yboundary = function(boundaryType, currentValue) {
|
343 |
+
var boundaryOption, suggestedValue;
|
344 |
+
boundaryOption = this.options["y" + boundaryType];
|
345 |
+
if (typeof boundaryOption === 'string') {
|
346 |
+
if (boundaryOption.slice(0, 4) === 'auto') {
|
347 |
+
if (boundaryOption.length > 5) {
|
348 |
+
suggestedValue = parseInt(boundaryOption.slice(5), 10);
|
349 |
+
if (currentValue == null) {
|
350 |
+
return suggestedValue;
|
351 |
+
}
|
352 |
+
return Math[boundaryType](currentValue, suggestedValue);
|
353 |
+
} else {
|
354 |
+
if (currentValue != null) {
|
355 |
+
return currentValue;
|
356 |
+
} else {
|
357 |
+
return 0;
|
358 |
+
}
|
359 |
+
}
|
360 |
+
} else {
|
361 |
+
return parseInt(boundaryOption, 10);
|
362 |
+
}
|
363 |
+
} else {
|
364 |
+
return boundaryOption;
|
365 |
+
}
|
366 |
+
};
|
367 |
+
|
368 |
+
Grid.prototype.autoGridLines = function(ymin, ymax, nlines) {
|
369 |
+
var gmax, gmin, grid, smag, span, step, unit, y, ymag;
|
370 |
+
span = ymax - ymin;
|
371 |
+
ymag = Math.floor(Math.log(span) / Math.log(10));
|
372 |
+
unit = Math.pow(10, ymag);
|
373 |
+
gmin = Math.floor(ymin / unit) * unit;
|
374 |
+
gmax = Math.ceil(ymax / unit) * unit;
|
375 |
+
step = (gmax - gmin) / (nlines - 1);
|
376 |
+
if (unit === 1 && step > 1 && Math.ceil(step) !== step) {
|
377 |
+
step = Math.ceil(step);
|
378 |
+
gmax = gmin + step * (nlines - 1);
|
379 |
+
}
|
380 |
+
if (gmin < 0 && gmax > 0) {
|
381 |
+
gmin = Math.floor(ymin / step) * step;
|
382 |
+
gmax = Math.ceil(ymax / step) * step;
|
383 |
+
}
|
384 |
+
if (step < 1) {
|
385 |
+
smag = Math.floor(Math.log(step) / Math.log(10));
|
386 |
+
grid = (function() {
|
387 |
+
var _i, _results;
|
388 |
+
_results = [];
|
389 |
+
for (y = _i = gmin; step > 0 ? _i <= gmax : _i >= gmax; y = _i += step) {
|
390 |
+
_results.push(parseFloat(y.toFixed(1 - smag)));
|
391 |
+
}
|
392 |
+
return _results;
|
393 |
+
})();
|
394 |
+
} else {
|
395 |
+
grid = (function() {
|
396 |
+
var _i, _results;
|
397 |
+
_results = [];
|
398 |
+
for (y = _i = gmin; step > 0 ? _i <= gmax : _i >= gmax; y = _i += step) {
|
399 |
+
_results.push(y);
|
400 |
+
}
|
401 |
+
return _results;
|
402 |
+
})();
|
403 |
+
}
|
404 |
+
return grid;
|
405 |
+
};
|
406 |
+
|
407 |
+
Grid.prototype._calc = function() {
|
408 |
+
var bottomOffsets, gridLine, h, i, w, yLabelWidths, _ref, _ref1;
|
409 |
+
w = this.el.width();
|
410 |
+
h = this.el.height();
|
411 |
+
if (this.elementWidth !== w || this.elementHeight !== h || this.dirty) {
|
412 |
+
this.elementWidth = w;
|
413 |
+
this.elementHeight = h;
|
414 |
+
this.dirty = false;
|
415 |
+
this.left = this.options.padding;
|
416 |
+
this.right = this.elementWidth - this.options.padding;
|
417 |
+
this.top = this.options.padding;
|
418 |
+
this.bottom = this.elementHeight - this.options.padding;
|
419 |
+
if ((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'y') {
|
420 |
+
yLabelWidths = (function() {
|
421 |
+
var _i, _len, _ref1, _results;
|
422 |
+
_ref1 = this.grid;
|
423 |
+
_results = [];
|
424 |
+
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
425 |
+
gridLine = _ref1[_i];
|
426 |
+
_results.push(this.measureText(this.yAxisFormat(gridLine)).width);
|
427 |
+
}
|
428 |
+
return _results;
|
429 |
+
}).call(this);
|
430 |
+
this.left += Math.max.apply(Math, yLabelWidths);
|
431 |
+
}
|
432 |
+
if ((_ref1 = this.options.axes) === true || _ref1 === 'both' || _ref1 === 'x') {
|
433 |
+
bottomOffsets = (function() {
|
434 |
+
var _i, _ref2, _results;
|
435 |
+
_results = [];
|
436 |
+
for (i = _i = 0, _ref2 = this.data.length; 0 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 0 <= _ref2 ? ++_i : --_i) {
|
437 |
+
_results.push(this.measureText(this.data[i].text, -this.options.xLabelAngle).height);
|
438 |
+
}
|
439 |
+
return _results;
|
440 |
+
}).call(this);
|
441 |
+
this.bottom -= Math.max.apply(Math, bottomOffsets);
|
442 |
+
}
|
443 |
+
this.width = Math.max(1, this.right - this.left);
|
444 |
+
this.height = Math.max(1, this.bottom - this.top);
|
445 |
+
this.dx = this.width / (this.xmax - this.xmin);
|
446 |
+
this.dy = this.height / (this.ymax - this.ymin);
|
447 |
+
if (this.calc) {
|
448 |
+
return this.calc();
|
449 |
+
}
|
450 |
+
}
|
451 |
+
};
|
452 |
+
|
453 |
+
Grid.prototype.transY = function(y) {
|
454 |
+
return this.bottom - (y - this.ymin) * this.dy;
|
455 |
+
};
|
456 |
+
|
457 |
+
Grid.prototype.transX = function(x) {
|
458 |
+
if (this.data.length === 1) {
|
459 |
+
return (this.left + this.right) / 2;
|
460 |
+
} else {
|
461 |
+
return this.left + (x - this.xmin) * this.dx;
|
462 |
+
}
|
463 |
+
};
|
464 |
+
|
465 |
+
Grid.prototype.redraw = function() {
|
466 |
+
this.raphael.clear();
|
467 |
+
this._calc();
|
468 |
+
this.drawGrid();
|
469 |
+
this.drawGoals();
|
470 |
+
this.drawEvents();
|
471 |
+
if (this.draw) {
|
472 |
+
return this.draw();
|
473 |
+
}
|
474 |
+
};
|
475 |
+
|
476 |
+
Grid.prototype.measureText = function(text, angle) {
|
477 |
+
var ret, tt;
|
478 |
+
if (angle == null) {
|
479 |
+
angle = 0;
|
480 |
+
}
|
481 |
+
tt = this.raphael.text(100, 100, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).rotate(angle);
|
482 |
+
ret = tt.getBBox();
|
483 |
+
tt.remove();
|
484 |
+
return ret;
|
485 |
+
};
|
486 |
+
|
487 |
+
Grid.prototype.yAxisFormat = function(label) {
|
488 |
+
return this.yLabelFormat(label);
|
489 |
+
};
|
490 |
+
|
491 |
+
Grid.prototype.yLabelFormat = function(label) {
|
492 |
+
if (typeof this.options.yLabelFormat === 'function') {
|
493 |
+
return this.options.yLabelFormat(label);
|
494 |
+
} else {
|
495 |
+
return "" + this.options.preUnits + (Morris.commas(label)) + this.options.postUnits;
|
496 |
+
}
|
497 |
+
};
|
498 |
+
|
499 |
+
Grid.prototype.drawGrid = function() {
|
500 |
+
var lineY, y, _i, _len, _ref, _ref1, _ref2, _results;
|
501 |
+
if (this.options.grid === false && ((_ref = this.options.axes) !== true && _ref !== 'both' && _ref !== 'y')) {
|
502 |
+
return;
|
503 |
+
}
|
504 |
+
_ref1 = this.grid;
|
505 |
+
_results = [];
|
506 |
+
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
507 |
+
lineY = _ref1[_i];
|
508 |
+
y = this.transY(lineY);
|
509 |
+
if ((_ref2 = this.options.axes) === true || _ref2 === 'both' || _ref2 === 'y') {
|
510 |
+
this.drawYAxisLabel(this.left - this.options.padding / 2, y, this.yAxisFormat(lineY));
|
511 |
+
}
|
512 |
+
if (this.options.grid) {
|
513 |
+
_results.push(this.drawGridLine("M" + this.left + "," + y + "H" + (this.left + this.width)));
|
514 |
+
} else {
|
515 |
+
_results.push(void 0);
|
516 |
+
}
|
517 |
+
}
|
518 |
+
return _results;
|
519 |
+
};
|
520 |
+
|
521 |
+
Grid.prototype.drawGoals = function() {
|
522 |
+
var color, goal, i, _i, _len, _ref, _results;
|
523 |
+
_ref = this.options.goals;
|
524 |
+
_results = [];
|
525 |
+
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
|
526 |
+
goal = _ref[i];
|
527 |
+
color = this.options.goalLineColors[i % this.options.goalLineColors.length];
|
528 |
+
_results.push(this.drawGoal(goal, color));
|
529 |
+
}
|
530 |
+
return _results;
|
531 |
+
};
|
532 |
+
|
533 |
+
Grid.prototype.drawEvents = function() {
|
534 |
+
var color, event, i, _i, _len, _ref, _results;
|
535 |
+
_ref = this.events;
|
536 |
+
_results = [];
|
537 |
+
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
|
538 |
+
event = _ref[i];
|
539 |
+
color = this.options.eventLineColors[i % this.options.eventLineColors.length];
|
540 |
+
_results.push(this.drawEvent(event, color));
|
541 |
+
}
|
542 |
+
return _results;
|
543 |
+
};
|
544 |
+
|
545 |
+
Grid.prototype.drawGoal = function(goal, color) {
|
546 |
+
return this.raphael.path("M" + this.left + "," + (this.transY(goal)) + "H" + this.right).attr('stroke', color).attr('stroke-width', this.options.goalStrokeWidth);
|
547 |
+
};
|
548 |
+
|
549 |
+
Grid.prototype.drawEvent = function(event, color) {
|
550 |
+
return this.raphael.path("M" + (this.transX(event)) + "," + this.bottom + "V" + this.top).attr('stroke', color).attr('stroke-width', this.options.eventStrokeWidth);
|
551 |
+
};
|
552 |
+
|
553 |
+
Grid.prototype.drawYAxisLabel = function(xPos, yPos, text) {
|
554 |
+
return this.raphael.text(xPos, yPos, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).attr('fill', this.options.gridTextColor).attr('text-anchor', 'end');
|
555 |
+
};
|
556 |
+
|
557 |
+
Grid.prototype.drawGridLine = function(path) {
|
558 |
+
return this.raphael.path(path).attr('stroke', this.options.gridLineColor).attr('stroke-width', this.options.gridStrokeWidth);
|
559 |
+
};
|
560 |
+
|
561 |
+
Grid.prototype.startRange = function(x) {
|
562 |
+
this.hover.hide();
|
563 |
+
this.selectFrom = x;
|
564 |
+
return this.selectionRect.attr({
|
565 |
+
x: x,
|
566 |
+
width: 0
|
567 |
+
}).show();
|
568 |
+
};
|
569 |
+
|
570 |
+
Grid.prototype.endRange = function(x) {
|
571 |
+
var end, start;
|
572 |
+
if (this.selectFrom) {
|
573 |
+
start = Math.min(this.selectFrom, x);
|
574 |
+
end = Math.max(this.selectFrom, x);
|
575 |
+
this.options.rangeSelect.call(this.el, {
|
576 |
+
start: this.data[this.hitTest(start)].x,
|
577 |
+
end: this.data[this.hitTest(end)].x
|
578 |
+
});
|
579 |
+
return this.selectFrom = null;
|
580 |
+
}
|
581 |
+
};
|
582 |
+
|
583 |
+
Grid.prototype.resizeHandler = function() {
|
584 |
+
this.timeoutId = null;
|
585 |
+
this.raphael.setSize(this.el.width(), this.el.height());
|
586 |
+
return this.redraw();
|
587 |
+
};
|
588 |
+
|
589 |
+
return Grid;
|
590 |
+
|
591 |
+
})(Morris.EventEmitter);
|
592 |
+
|
593 |
+
Morris.parseDate = function(date) {
|
594 |
+
var isecs, m, msecs, n, o, offsetmins, p, q, r, ret, secs;
|
595 |
+
if (typeof date === 'number') {
|
596 |
+
return date;
|
597 |
+
}
|
598 |
+
m = date.match(/^(\d+) Q(\d)$/);
|
599 |
+
n = date.match(/^(\d+)-(\d+)$/);
|
600 |
+
o = date.match(/^(\d+)-(\d+)-(\d+)$/);
|
601 |
+
p = date.match(/^(\d+) W(\d+)$/);
|
602 |
+
q = date.match(/^(\d+)-(\d+)-(\d+)[ T](\d+):(\d+)(Z|([+-])(\d\d):?(\d\d))?$/);
|
603 |
+
r = date.match(/^(\d+)-(\d+)-(\d+)[ T](\d+):(\d+):(\d+(\.\d+)?)(Z|([+-])(\d\d):?(\d\d))?$/);
|
604 |
+
if (m) {
|
605 |
+
return new Date(parseInt(m[1], 10), parseInt(m[2], 10) * 3 - 1, 1).getTime();
|
606 |
+
} else if (n) {
|
607 |
+
return new Date(parseInt(n[1], 10), parseInt(n[2], 10) - 1, 1).getTime();
|
608 |
+
} else if (o) {
|
609 |
+
return new Date(parseInt(o[1], 10), parseInt(o[2], 10) - 1, parseInt(o[3], 10)).getTime();
|
610 |
+
} else if (p) {
|
611 |
+
ret = new Date(parseInt(p[1], 10), 0, 1);
|
612 |
+
if (ret.getDay() !== 4) {
|
613 |
+
ret.setMonth(0, 1 + ((4 - ret.getDay()) + 7) % 7);
|
614 |
+
}
|
615 |
+
return ret.getTime() + parseInt(p[2], 10) * 604800000;
|
616 |
+
} else if (q) {
|
617 |
+
if (!q[6]) {
|
618 |
+
return new Date(parseInt(q[1], 10), parseInt(q[2], 10) - 1, parseInt(q[3], 10), parseInt(q[4], 10), parseInt(q[5], 10)).getTime();
|
619 |
+
} else {
|
620 |
+
offsetmins = 0;
|
621 |
+
if (q[6] !== 'Z') {
|
622 |
+
offsetmins = parseInt(q[8], 10) * 60 + parseInt(q[9], 10);
|
623 |
+
if (q[7] === '+') {
|
624 |
+
offsetmins = 0 - offsetmins;
|
625 |
+
}
|
626 |
+
}
|
627 |
+
return Date.UTC(parseInt(q[1], 10), parseInt(q[2], 10) - 1, parseInt(q[3], 10), parseInt(q[4], 10), parseInt(q[5], 10) + offsetmins);
|
628 |
+
}
|
629 |
+
} else if (r) {
|
630 |
+
secs = parseFloat(r[6]);
|
631 |
+
isecs = Math.floor(secs);
|
632 |
+
msecs = Math.round((secs - isecs) * 1000);
|
633 |
+
if (!r[8]) {
|
634 |
+
return new Date(parseInt(r[1], 10), parseInt(r[2], 10) - 1, parseInt(r[3], 10), parseInt(r[4], 10), parseInt(r[5], 10), isecs, msecs).getTime();
|
635 |
+
} else {
|
636 |
+
offsetmins = 0;
|
637 |
+
if (r[8] !== 'Z') {
|
638 |
+
offsetmins = parseInt(r[10], 10) * 60 + parseInt(r[11], 10);
|
639 |
+
if (r[9] === '+') {
|
640 |
+
offsetmins = 0 - offsetmins;
|
641 |
+
}
|
642 |
+
}
|
643 |
+
return Date.UTC(parseInt(r[1], 10), parseInt(r[2], 10) - 1, parseInt(r[3], 10), parseInt(r[4], 10), parseInt(r[5], 10) + offsetmins, isecs, msecs);
|
644 |
+
}
|
645 |
+
} else {
|
646 |
+
return new Date(parseInt(date, 10), 0, 1).getTime();
|
647 |
+
}
|
648 |
+
};
|
649 |
+
|
650 |
+
Morris.Hover = (function() {
|
651 |
+
Hover.defaults = {
|
652 |
+
"class": 'morris-hover morris-default-style'
|
653 |
+
};
|
654 |
+
|
655 |
+
function Hover(options) {
|
656 |
+
if (options == null) {
|
657 |
+
options = {};
|
658 |
+
}
|
659 |
+
this.options = $.extend({}, Morris.Hover.defaults, options);
|
660 |
+
this.el = $("<div class='" + this.options["class"] + "'></div>");
|
661 |
+
this.el.hide();
|
662 |
+
this.options.parent.append(this.el);
|
663 |
+
}
|
664 |
+
|
665 |
+
Hover.prototype.update = function(html, x, y) {
|
666 |
+
if (!html) {
|
667 |
+
return this.hide();
|
668 |
+
} else {
|
669 |
+
this.html(html);
|
670 |
+
this.show();
|
671 |
+
return this.moveTo(x, y);
|
672 |
+
}
|
673 |
+
};
|
674 |
+
|
675 |
+
Hover.prototype.html = function(content) {
|
676 |
+
return this.el.html(content);
|
677 |
+
};
|
678 |
+
|
679 |
+
Hover.prototype.moveTo = function(x, y) {
|
680 |
+
var hoverHeight, hoverWidth, left, parentHeight, parentWidth, top;
|
681 |
+
parentWidth = this.options.parent.innerWidth();
|
682 |
+
parentHeight = this.options.parent.innerHeight();
|
683 |
+
hoverWidth = this.el.outerWidth();
|
684 |
+
hoverHeight = this.el.outerHeight();
|
685 |
+
left = Math.min(Math.max(0, x - hoverWidth / 2), parentWidth - hoverWidth);
|
686 |
+
if (y != null) {
|
687 |
+
top = y - hoverHeight - 10;
|
688 |
+
if (top < 0) {
|
689 |
+
top = y + 10;
|
690 |
+
if (top + hoverHeight > parentHeight) {
|
691 |
+
top = parentHeight / 2 - hoverHeight / 2;
|
692 |
+
}
|
693 |
+
}
|
694 |
+
} else {
|
695 |
+
top = parentHeight / 2 - hoverHeight / 2;
|
696 |
+
}
|
697 |
+
return this.el.css({
|
698 |
+
left: left + "px",
|
699 |
+
top: parseInt(top) + "px"
|
700 |
+
});
|
701 |
+
};
|
702 |
+
|
703 |
+
Hover.prototype.show = function() {
|
704 |
+
return this.el.show();
|
705 |
+
};
|
706 |
+
|
707 |
+
Hover.prototype.hide = function() {
|
708 |
+
return this.el.hide();
|
709 |
+
};
|
710 |
+
|
711 |
+
return Hover;
|
712 |
+
|
713 |
+
})();
|
714 |
+
|
715 |
+
Morris.Line = (function(_super) {
|
716 |
+
__extends(Line, _super);
|
717 |
+
|
718 |
+
function Line(options) {
|
719 |
+
this.hilight = __bind(this.hilight, this);
|
720 |
+
this.onHoverOut = __bind(this.onHoverOut, this);
|
721 |
+
this.onHoverMove = __bind(this.onHoverMove, this);
|
722 |
+
this.onGridClick = __bind(this.onGridClick, this);
|
723 |
+
if (!(this instanceof Morris.Line)) {
|
724 |
+
return new Morris.Line(options);
|
725 |
+
}
|
726 |
+
Line.__super__.constructor.call(this, options);
|
727 |
+
}
|
728 |
+
|
729 |
+
Line.prototype.init = function() {
|
730 |
+
if (this.options.hideHover !== 'always') {
|
731 |
+
this.hover = new Morris.Hover({
|
732 |
+
parent: this.el
|
733 |
+
});
|
734 |
+
this.on('hovermove', this.onHoverMove);
|
735 |
+
this.on('hoverout', this.onHoverOut);
|
736 |
+
return this.on('gridclick', this.onGridClick);
|
737 |
+
}
|
738 |
+
};
|
739 |
+
|
740 |
+
Line.prototype.defaults = {
|
741 |
+
lineWidth: 3,
|
742 |
+
pointSize: 4,
|
743 |
+
lineColors: ['#0b62a4', '#7A92A3', '#4da74d', '#afd8f8', '#edc240', '#cb4b4b', '#9440ed'],
|
744 |
+
pointStrokeWidths: [1],
|
745 |
+
pointStrokeColors: ['#ffffff'],
|
746 |
+
pointFillColors: [],
|
747 |
+
smooth: true,
|
748 |
+
xLabels: 'auto',
|
749 |
+
xLabelFormat: null,
|
750 |
+
xLabelMargin: 24,
|
751 |
+
hideHover: false
|
752 |
+
};
|
753 |
+
|
754 |
+
Line.prototype.calc = function() {
|
755 |
+
this.calcPoints();
|
756 |
+
return this.generatePaths();
|
757 |
+
};
|
758 |
+
|
759 |
+
Line.prototype.calcPoints = function() {
|
760 |
+
var row, y, _i, _len, _ref, _results;
|
761 |
+
_ref = this.data;
|
762 |
+
_results = [];
|
763 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
764 |
+
row = _ref[_i];
|
765 |
+
row._x = this.transX(row.x);
|
766 |
+
row._y = (function() {
|
767 |
+
var _j, _len1, _ref1, _results1;
|
768 |
+
_ref1 = row.y;
|
769 |
+
_results1 = [];
|
770 |
+
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
771 |
+
y = _ref1[_j];
|
772 |
+
if (y != null) {
|
773 |
+
_results1.push(this.transY(y));
|
774 |
+
} else {
|
775 |
+
_results1.push(y);
|
776 |
+
}
|
777 |
+
}
|
778 |
+
return _results1;
|
779 |
+
}).call(this);
|
780 |
+
_results.push(row._ymax = Math.min.apply(Math, [this.bottom].concat((function() {
|
781 |
+
var _j, _len1, _ref1, _results1;
|
782 |
+
_ref1 = row._y;
|
783 |
+
_results1 = [];
|
784 |
+
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
785 |
+
y = _ref1[_j];
|
786 |
+
if (y != null) {
|
787 |
+
_results1.push(y);
|
788 |
+
}
|
789 |
+
}
|
790 |
+
return _results1;
|
791 |
+
})())));
|
792 |
+
}
|
793 |
+
return _results;
|
794 |
+
};
|
795 |
+
|
796 |
+
Line.prototype.hitTest = function(x) {
|
797 |
+
var index, r, _i, _len, _ref;
|
798 |
+
if (this.data.length === 0) {
|
799 |
+
return null;
|
800 |
+
}
|
801 |
+
_ref = this.data.slice(1);
|
802 |
+
for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) {
|
803 |
+
r = _ref[index];
|
804 |
+
if (x < (r._x + this.data[index]._x) / 2) {
|
805 |
+
break;
|
806 |
+
}
|
807 |
+
}
|
808 |
+
return index;
|
809 |
+
};
|
810 |
+
|
811 |
+
Line.prototype.onGridClick = function(x, y) {
|
812 |
+
var index;
|
813 |
+
index = this.hitTest(x);
|
814 |
+
return this.fire('click', index, this.data[index].src, x, y);
|
815 |
+
};
|
816 |
+
|
817 |
+
Line.prototype.onHoverMove = function(x, y) {
|
818 |
+
var index;
|
819 |
+
index = this.hitTest(x);
|
820 |
+
return this.displayHoverForRow(index);
|
821 |
+
};
|
822 |
+
|
823 |
+
Line.prototype.onHoverOut = function() {
|
824 |
+
if (this.options.hideHover !== false) {
|
825 |
+
return this.displayHoverForRow(null);
|
826 |
+
}
|
827 |
+
};
|
828 |
+
|
829 |
+
Line.prototype.displayHoverForRow = function(index) {
|
830 |
+
var _ref;
|
831 |
+
if (index != null) {
|
832 |
+
(_ref = this.hover).update.apply(_ref, this.hoverContentForRow(index));
|
833 |
+
return this.hilight(index);
|
834 |
+
} else {
|
835 |
+
this.hover.hide();
|
836 |
+
return this.hilight();
|
837 |
+
}
|
838 |
+
};
|
839 |
+
|
840 |
+
Line.prototype.hoverContentForRow = function(index) {
|
841 |
+
var content, j, row, y, _i, _len, _ref;
|
842 |
+
row = this.data[index];
|
843 |
+
content = "<div class='morris-hover-row-label'>" + row.label + "</div>";
|
844 |
+
_ref = row.y;
|
845 |
+
for (j = _i = 0, _len = _ref.length; _i < _len; j = ++_i) {
|
846 |
+
y = _ref[j];
|
847 |
+
content += "<div class='morris-hover-point' style='color: " + (this.colorFor(row, j, 'label')) + "'>\n " + this.options.labels[j] + ":\n " + (this.yLabelFormat(y)) + "\n</div>";
|
848 |
+
}
|
849 |
+
if (typeof this.options.hoverCallback === 'function') {
|
850 |
+
content = this.options.hoverCallback(index, this.options, content, row.src);
|
851 |
+
}
|
852 |
+
return [content, row._x, row._ymax];
|
853 |
+
};
|
854 |
+
|
855 |
+
Line.prototype.generatePaths = function() {
|
856 |
+
var coords, i, r, smooth;
|
857 |
+
return this.paths = (function() {
|
858 |
+
var _i, _ref, _ref1, _results;
|
859 |
+
_results = [];
|
860 |
+
for (i = _i = 0, _ref = this.options.ykeys.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
|
861 |
+
smooth = typeof this.options.smooth === "boolean" ? this.options.smooth : (_ref1 = this.options.ykeys[i], __indexOf.call(this.options.smooth, _ref1) >= 0);
|
862 |
+
coords = (function() {
|
863 |
+
var _j, _len, _ref2, _results1;
|
864 |
+
_ref2 = this.data;
|
865 |
+
_results1 = [];
|
866 |
+
for (_j = 0, _len = _ref2.length; _j < _len; _j++) {
|
867 |
+
r = _ref2[_j];
|
868 |
+
if (r._y[i] !== void 0) {
|
869 |
+
_results1.push({
|
870 |
+
x: r._x,
|
871 |
+
y: r._y[i]
|
872 |
+
});
|
873 |
+
}
|
874 |
+
}
|
875 |
+
return _results1;
|
876 |
+
}).call(this);
|
877 |
+
if (coords.length > 1) {
|
878 |
+
_results.push(Morris.Line.createPath(coords, smooth, this.bottom));
|
879 |
+
} else {
|
880 |
+
_results.push(null);
|
881 |
+
}
|
882 |
+
}
|
883 |
+
return _results;
|
884 |
+
}).call(this);
|
885 |
+
};
|
886 |
+
|
887 |
+
Line.prototype.draw = function() {
|
888 |
+
var _ref;
|
889 |
+
if ((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'x') {
|
890 |
+
this.drawXAxis();
|
891 |
+
}
|
892 |
+
this.drawSeries();
|
893 |
+
if (this.options.hideHover === false) {
|
894 |
+
return this.displayHoverForRow(this.data.length - 1);
|
895 |
+
}
|
896 |
+
};
|
897 |
+
|
898 |
+
Line.prototype.drawXAxis = function() {
|
899 |
+
var drawLabel, l, labels, prevAngleMargin, prevLabelMargin, row, ypos, _i, _len, _results,
|
900 |
+
_this = this;
|
901 |
+
ypos = this.bottom + this.options.padding / 2;
|
902 |
+
prevLabelMargin = null;
|
903 |
+
prevAngleMargin = null;
|
904 |
+
drawLabel = function(labelText, xpos) {
|
905 |
+
var label, labelBox, margin, offset, textBox;
|
906 |
+
label = _this.drawXAxisLabel(_this.transX(xpos), ypos, labelText);
|
907 |
+
textBox = label.getBBox();
|
908 |
+
label.transform("r" + (-_this.options.xLabelAngle));
|
909 |
+
labelBox = label.getBBox();
|
910 |
+
label.transform("t0," + (labelBox.height / 2) + "...");
|
911 |
+
if (_this.options.xLabelAngle !== 0) {
|
912 |
+
offset = -0.5 * textBox.width * Math.cos(_this.options.xLabelAngle * Math.PI / 180.0);
|
913 |
+
label.transform("t" + offset + ",0...");
|
914 |
+
}
|
915 |
+
labelBox = label.getBBox();
|
916 |
+
if (((prevLabelMargin == null) || prevLabelMargin >= labelBox.x + labelBox.width || (prevAngleMargin != null) && prevAngleMargin >= labelBox.x) && labelBox.x >= 0 && (labelBox.x + labelBox.width) < _this.el.width()) {
|
917 |
+
if (_this.options.xLabelAngle !== 0) {
|
918 |
+
margin = 1.25 * _this.options.gridTextSize / Math.sin(_this.options.xLabelAngle * Math.PI / 180.0);
|
919 |
+
prevAngleMargin = labelBox.x - margin;
|
920 |
+
}
|
921 |
+
return prevLabelMargin = labelBox.x - _this.options.xLabelMargin;
|
922 |
+
} else {
|
923 |
+
return label.remove();
|
924 |
+
}
|
925 |
+
};
|
926 |
+
if (this.options.parseTime) {
|
927 |
+
if (this.data.length === 1 && this.options.xLabels === 'auto') {
|
928 |
+
labels = [[this.data[0].label, this.data[0].x]];
|
929 |
+
} else {
|
930 |
+
labels = Morris.labelSeries(this.xmin, this.xmax, this.width, this.options.xLabels, this.options.xLabelFormat);
|
931 |
+
}
|
932 |
+
} else {
|
933 |
+
labels = (function() {
|
934 |
+
var _i, _len, _ref, _results;
|
935 |
+
_ref = this.data;
|
936 |
+
_results = [];
|
937 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
938 |
+
row = _ref[_i];
|
939 |
+
_results.push([row.label, row.x]);
|
940 |
+
}
|
941 |
+
return _results;
|
942 |
+
}).call(this);
|
943 |
+
}
|
944 |
+
labels.reverse();
|
945 |
+
_results = [];
|
946 |
+
for (_i = 0, _len = labels.length; _i < _len; _i++) {
|
947 |
+
l = labels[_i];
|
948 |
+
_results.push(drawLabel(l[0], l[1]));
|
949 |
+
}
|
950 |
+
return _results;
|
951 |
+
};
|
952 |
+
|
953 |
+
Line.prototype.drawSeries = function() {
|
954 |
+
var i, _i, _j, _ref, _ref1, _results;
|
955 |
+
this.seriesPoints = [];
|
956 |
+
for (i = _i = _ref = this.options.ykeys.length - 1; _ref <= 0 ? _i <= 0 : _i >= 0; i = _ref <= 0 ? ++_i : --_i) {
|
957 |
+
this._drawLineFor(i);
|
958 |
+
}
|
959 |
+
_results = [];
|
960 |
+
for (i = _j = _ref1 = this.options.ykeys.length - 1; _ref1 <= 0 ? _j <= 0 : _j >= 0; i = _ref1 <= 0 ? ++_j : --_j) {
|
961 |
+
_results.push(this._drawPointFor(i));
|
962 |
+
}
|
963 |
+
return _results;
|
964 |
+
};
|
965 |
+
|
966 |
+
Line.prototype._drawPointFor = function(index) {
|
967 |
+
var circle, row, _i, _len, _ref, _results;
|
968 |
+
this.seriesPoints[index] = [];
|
969 |
+
_ref = this.data;
|
970 |
+
_results = [];
|
971 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
972 |
+
row = _ref[_i];
|
973 |
+
circle = null;
|
974 |
+
if (row._y[index] != null) {
|
975 |
+
circle = this.drawLinePoint(row._x, row._y[index], this.colorFor(row, index, 'point'), index);
|
976 |
+
}
|
977 |
+
_results.push(this.seriesPoints[index].push(circle));
|
978 |
+
}
|
979 |
+
return _results;
|
980 |
+
};
|
981 |
+
|
982 |
+
Line.prototype._drawLineFor = function(index) {
|
983 |
+
var path;
|
984 |
+
path = this.paths[index];
|
985 |
+
if (path !== null) {
|
986 |
+
return this.drawLinePath(path, this.colorFor(null, index, 'line'), index);
|
987 |
+
}
|
988 |
+
};
|
989 |
+
|
990 |
+
Line.createPath = function(coords, smooth, bottom) {
|
991 |
+
var coord, g, grads, i, ix, lg, path, prevCoord, x1, x2, y1, y2, _i, _len;
|
992 |
+
path = "";
|
993 |
+
if (smooth) {
|
994 |
+
grads = Morris.Line.gradients(coords);
|
995 |
+
}
|
996 |
+
prevCoord = {
|
997 |
+
y: null
|
998 |
+
};
|
999 |
+
for (i = _i = 0, _len = coords.length; _i < _len; i = ++_i) {
|
1000 |
+
coord = coords[i];
|
1001 |
+
if (coord.y != null) {
|
1002 |
+
if (prevCoord.y != null) {
|
1003 |
+
if (smooth) {
|
1004 |
+
g = grads[i];
|
1005 |
+
lg = grads[i - 1];
|
1006 |
+
ix = (coord.x - prevCoord.x) / 4;
|
1007 |
+
x1 = prevCoord.x + ix;
|
1008 |
+
y1 = Math.min(bottom, prevCoord.y + ix * lg);
|
1009 |
+
x2 = coord.x - ix;
|
1010 |
+
y2 = Math.min(bottom, coord.y - ix * g);
|
1011 |
+
path += "C" + x1 + "," + y1 + "," + x2 + "," + y2 + "," + coord.x + "," + coord.y;
|
1012 |
+
} else {
|
1013 |
+
path += "L" + coord.x + "," + coord.y;
|
1014 |
+
}
|
1015 |
+
} else {
|
1016 |
+
if (!smooth || (grads[i] != null)) {
|
1017 |
+
path += "M" + coord.x + "," + coord.y;
|
1018 |
+
}
|
1019 |
+
}
|
1020 |
+
}
|
1021 |
+
prevCoord = coord;
|
1022 |
+
}
|
1023 |
+
return path;
|
1024 |
+
};
|
1025 |
+
|
1026 |
+
Line.gradients = function(coords) {
|
1027 |
+
var coord, grad, i, nextCoord, prevCoord, _i, _len, _results;
|
1028 |
+
grad = function(a, b) {
|
1029 |
+
return (a.y - b.y) / (a.x - b.x);
|
1030 |
+
};
|
1031 |
+
_results = [];
|
1032 |
+
for (i = _i = 0, _len = coords.length; _i < _len; i = ++_i) {
|
1033 |
+
coord = coords[i];
|
1034 |
+
if (coord.y != null) {
|
1035 |
+
nextCoord = coords[i + 1] || {
|
1036 |
+
y: null
|
1037 |
+
};
|
1038 |
+
prevCoord = coords[i - 1] || {
|
1039 |
+
y: null
|
1040 |
+
};
|
1041 |
+
if ((prevCoord.y != null) && (nextCoord.y != null)) {
|
1042 |
+
_results.push(grad(prevCoord, nextCoord));
|
1043 |
+
} else if (prevCoord.y != null) {
|
1044 |
+
_results.push(grad(prevCoord, coord));
|
1045 |
+
} else if (nextCoord.y != null) {
|
1046 |
+
_results.push(grad(coord, nextCoord));
|
1047 |
+
} else {
|
1048 |
+
_results.push(null);
|
1049 |
+
}
|
1050 |
+
} else {
|
1051 |
+
_results.push(null);
|
1052 |
+
}
|
1053 |
+
}
|
1054 |
+
return _results;
|
1055 |
+
};
|
1056 |
+
|
1057 |
+
Line.prototype.hilight = function(index) {
|
1058 |
+
var i, _i, _j, _ref, _ref1;
|
1059 |
+
if (this.prevHilight !== null && this.prevHilight !== index) {
|
1060 |
+
for (i = _i = 0, _ref = this.seriesPoints.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
|
1061 |
+
if (this.seriesPoints[i][this.prevHilight]) {
|
1062 |
+
this.seriesPoints[i][this.prevHilight].animate(this.pointShrinkSeries(i));
|
1063 |
+
}
|
1064 |
+
}
|
1065 |
+
}
|
1066 |
+
if (index !== null && this.prevHilight !== index) {
|
1067 |
+
for (i = _j = 0, _ref1 = this.seriesPoints.length - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = 0 <= _ref1 ? ++_j : --_j) {
|
1068 |
+
if (this.seriesPoints[i][index]) {
|
1069 |
+
this.seriesPoints[i][index].animate(this.pointGrowSeries(i));
|
1070 |
+
}
|
1071 |
+
}
|
1072 |
+
}
|
1073 |
+
return this.prevHilight = index;
|
1074 |
+
};
|
1075 |
+
|
1076 |
+
Line.prototype.colorFor = function(row, sidx, type) {
|
1077 |
+
if (typeof this.options.lineColors === 'function') {
|
1078 |
+
return this.options.lineColors.call(this, row, sidx, type);
|
1079 |
+
} else if (type === 'point') {
|
1080 |
+
return this.options.pointFillColors[sidx % this.options.pointFillColors.length] || this.options.lineColors[sidx % this.options.lineColors.length];
|
1081 |
+
} else {
|
1082 |
+
return this.options.lineColors[sidx % this.options.lineColors.length];
|
1083 |
+
}
|
1084 |
+
};
|
1085 |
+
|
1086 |
+
Line.prototype.drawXAxisLabel = function(xPos, yPos, text) {
|
1087 |
+
return this.raphael.text(xPos, yPos, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).attr('fill', this.options.gridTextColor);
|
1088 |
+
};
|
1089 |
+
|
1090 |
+
Line.prototype.drawLinePath = function(path, lineColor, lineIndex) {
|
1091 |
+
return this.raphael.path(path).attr('stroke', lineColor).attr('stroke-width', this.lineWidthForSeries(lineIndex));
|
1092 |
+
};
|
1093 |
+
|
1094 |
+
Line.prototype.drawLinePoint = function(xPos, yPos, pointColor, lineIndex) {
|
1095 |
+
return this.raphael.circle(xPos, yPos, this.pointSizeForSeries(lineIndex)).attr('fill', pointColor).attr('stroke-width', this.pointStrokeWidthForSeries(lineIndex)).attr('stroke', this.pointStrokeColorForSeries(lineIndex));
|
1096 |
+
};
|
1097 |
+
|
1098 |
+
Line.prototype.pointStrokeWidthForSeries = function(index) {
|
1099 |
+
return this.options.pointStrokeWidths[index % this.options.pointStrokeWidths.length];
|
1100 |
+
};
|
1101 |
+
|
1102 |
+
Line.prototype.pointStrokeColorForSeries = function(index) {
|
1103 |
+
return this.options.pointStrokeColors[index % this.options.pointStrokeColors.length];
|
1104 |
+
};
|
1105 |
+
|
1106 |
+
Line.prototype.lineWidthForSeries = function(index) {
|
1107 |
+
if (this.options.lineWidth instanceof Array) {
|
1108 |
+
return this.options.lineWidth[index % this.options.lineWidth.length];
|
1109 |
+
} else {
|
1110 |
+
return this.options.lineWidth;
|
1111 |
+
}
|
1112 |
+
};
|
1113 |
+
|
1114 |
+
Line.prototype.pointSizeForSeries = function(index) {
|
1115 |
+
if (this.options.pointSize instanceof Array) {
|
1116 |
+
return this.options.pointSize[index % this.options.pointSize.length];
|
1117 |
+
} else {
|
1118 |
+
return this.options.pointSize;
|
1119 |
+
}
|
1120 |
+
};
|
1121 |
+
|
1122 |
+
Line.prototype.pointGrowSeries = function(index) {
|
1123 |
+
return Raphael.animation({
|
1124 |
+
r: this.pointSizeForSeries(index) + 3
|
1125 |
+
}, 25, 'linear');
|
1126 |
+
};
|
1127 |
+
|
1128 |
+
Line.prototype.pointShrinkSeries = function(index) {
|
1129 |
+
return Raphael.animation({
|
1130 |
+
r: this.pointSizeForSeries(index)
|
1131 |
+
}, 25, 'linear');
|
1132 |
+
};
|
1133 |
+
|
1134 |
+
return Line;
|
1135 |
+
|
1136 |
+
})(Morris.Grid);
|
1137 |
+
|
1138 |
+
Morris.labelSeries = function(dmin, dmax, pxwidth, specName, xLabelFormat) {
|
1139 |
+
var d, d0, ddensity, name, ret, s, spec, t, _i, _len, _ref;
|
1140 |
+
ddensity = 200 * (dmax - dmin) / pxwidth;
|
1141 |
+
d0 = new Date(dmin);
|
1142 |
+
spec = Morris.LABEL_SPECS[specName];
|
1143 |
+
if (spec === void 0) {
|
1144 |
+
_ref = Morris.AUTO_LABEL_ORDER;
|
1145 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
1146 |
+
name = _ref[_i];
|
1147 |
+
s = Morris.LABEL_SPECS[name];
|
1148 |
+
if (ddensity >= s.span) {
|
1149 |
+
spec = s;
|
1150 |
+
break;
|
1151 |
+
}
|
1152 |
+
}
|
1153 |
+
}
|
1154 |
+
if (spec === void 0) {
|
1155 |
+
spec = Morris.LABEL_SPECS["second"];
|
1156 |
+
}
|
1157 |
+
if (xLabelFormat) {
|
1158 |
+
spec = $.extend({}, spec, {
|
1159 |
+
fmt: xLabelFormat
|
1160 |
+
});
|
1161 |
+
}
|
1162 |
+
d = spec.start(d0);
|
1163 |
+
ret = [];
|
1164 |
+
while ((t = d.getTime()) <= dmax) {
|
1165 |
+
if (t >= dmin) {
|
1166 |
+
ret.push([spec.fmt(d), t]);
|
1167 |
+
}
|
1168 |
+
spec.incr(d);
|
1169 |
+
}
|
1170 |
+
return ret;
|
1171 |
+
};
|
1172 |
+
|
1173 |
+
minutesSpecHelper = function(interval) {
|
1174 |
+
return {
|
1175 |
+
span: interval * 60 * 1000,
|
1176 |
+
start: function(d) {
|
1177 |
+
return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours());
|
1178 |
+
},
|
1179 |
+
fmt: function(d) {
|
1180 |
+
return "" + (Morris.pad2(d.getHours())) + ":" + (Morris.pad2(d.getMinutes()));
|
1181 |
+
},
|
1182 |
+
incr: function(d) {
|
1183 |
+
return d.setUTCMinutes(d.getUTCMinutes() + interval);
|
1184 |
+
}
|
1185 |
+
};
|
1186 |
+
};
|
1187 |
+
|
1188 |
+
secondsSpecHelper = function(interval) {
|
1189 |
+
return {
|
1190 |
+
span: interval * 1000,
|
1191 |
+
start: function(d) {
|
1192 |
+
return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes());
|
1193 |
+
},
|
1194 |
+
fmt: function(d) {
|
1195 |
+
return "" + (Morris.pad2(d.getHours())) + ":" + (Morris.pad2(d.getMinutes())) + ":" + (Morris.pad2(d.getSeconds()));
|
1196 |
+
},
|
1197 |
+
incr: function(d) {
|
1198 |
+
return d.setUTCSeconds(d.getUTCSeconds() + interval);
|
1199 |
+
}
|
1200 |
+
};
|
1201 |
+
};
|
1202 |
+
|
1203 |
+
Morris.LABEL_SPECS = {
|
1204 |
+
"decade": {
|
1205 |
+
span: 172800000000,
|
1206 |
+
start: function(d) {
|
1207 |
+
return new Date(d.getFullYear() - d.getFullYear() % 10, 0, 1);
|
1208 |
+
},
|
1209 |
+
fmt: function(d) {
|
1210 |
+
return "" + (d.getFullYear());
|
1211 |
+
},
|
1212 |
+
incr: function(d) {
|
1213 |
+
return d.setFullYear(d.getFullYear() + 10);
|
1214 |
+
}
|
1215 |
+
},
|
1216 |
+
"year": {
|
1217 |
+
span: 17280000000,
|
1218 |
+
start: function(d) {
|
1219 |
+
return new Date(d.getFullYear(), 0, 1);
|
1220 |
+
},
|
1221 |
+
fmt: function(d) {
|
1222 |
+
return "" + (d.getFullYear());
|
1223 |
+
},
|
1224 |
+
incr: function(d) {
|
1225 |
+
return d.setFullYear(d.getFullYear() + 1);
|
1226 |
+
}
|
1227 |
+
},
|
1228 |
+
"month": {
|
1229 |
+
span: 2419200000,
|
1230 |
+
start: function(d) {
|
1231 |
+
return new Date(d.getFullYear(), d.getMonth(), 1);
|
1232 |
+
},
|
1233 |
+
fmt: function(d) {
|
1234 |
+
return "" + (d.getFullYear()) + "-" + (Morris.pad2(d.getMonth() + 1));
|
1235 |
+
},
|
1236 |
+
incr: function(d) {
|
1237 |
+
return d.setMonth(d.getMonth() + 1);
|
1238 |
+
}
|
1239 |
+
},
|
1240 |
+
"week": {
|
1241 |
+
span: 604800000,
|
1242 |
+
start: function(d) {
|
1243 |
+
return new Date(d.getFullYear(), d.getMonth(), d.getDate());
|
1244 |
+
},
|
1245 |
+
fmt: function(d) {
|
1246 |
+
return "" + (d.getFullYear()) + "-" + (Morris.pad2(d.getMonth() + 1)) + "-" + (Morris.pad2(d.getDate()));
|
1247 |
+
},
|
1248 |
+
incr: function(d) {
|
1249 |
+
return d.setDate(d.getDate() + 7);
|
1250 |
+
}
|
1251 |
+
},
|
1252 |
+
"day": {
|
1253 |
+
span: 86400000,
|
1254 |
+
start: function(d) {
|
1255 |
+
return new Date(d.getFullYear(), d.getMonth(), d.getDate());
|
1256 |
+
},
|
1257 |
+
fmt: function(d) {
|
1258 |
+
return "" + (d.getFullYear()) + "-" + (Morris.pad2(d.getMonth() + 1)) + "-" + (Morris.pad2(d.getDate()));
|
1259 |
+
},
|
1260 |
+
incr: function(d) {
|
1261 |
+
return d.setDate(d.getDate() + 1);
|
1262 |
+
}
|
1263 |
+
},
|
1264 |
+
"hour": minutesSpecHelper(60),
|
1265 |
+
"30min": minutesSpecHelper(30),
|
1266 |
+
"15min": minutesSpecHelper(15),
|
1267 |
+
"10min": minutesSpecHelper(10),
|
1268 |
+
"5min": minutesSpecHelper(5),
|
1269 |
+
"minute": minutesSpecHelper(1),
|
1270 |
+
"30sec": secondsSpecHelper(30),
|
1271 |
+
"15sec": secondsSpecHelper(15),
|
1272 |
+
"10sec": secondsSpecHelper(10),
|
1273 |
+
"5sec": secondsSpecHelper(5),
|
1274 |
+
"second": secondsSpecHelper(1)
|
1275 |
+
};
|
1276 |
+
|
1277 |
+
Morris.AUTO_LABEL_ORDER = ["decade", "year", "month", "week", "day", "hour", "30min", "15min", "10min", "5min", "minute", "30sec", "15sec", "10sec", "5sec", "second"];
|
1278 |
+
|
1279 |
+
Morris.Area = (function(_super) {
|
1280 |
+
var areaDefaults;
|
1281 |
+
|
1282 |
+
__extends(Area, _super);
|
1283 |
+
|
1284 |
+
areaDefaults = {
|
1285 |
+
fillOpacity: 'auto',
|
1286 |
+
behaveLikeLine: false
|
1287 |
+
};
|
1288 |
+
|
1289 |
+
function Area(options) {
|
1290 |
+
var areaOptions;
|
1291 |
+
if (!(this instanceof Morris.Area)) {
|
1292 |
+
return new Morris.Area(options);
|
1293 |
+
}
|
1294 |
+
areaOptions = $.extend({}, areaDefaults, options);
|
1295 |
+
this.cumulative = !areaOptions.behaveLikeLine;
|
1296 |
+
if (areaOptions.fillOpacity === 'auto') {
|
1297 |
+
areaOptions.fillOpacity = areaOptions.behaveLikeLine ? .8 : 1;
|
1298 |
+
}
|
1299 |
+
Area.__super__.constructor.call(this, areaOptions);
|
1300 |
+
}
|
1301 |
+
|
1302 |
+
Area.prototype.calcPoints = function() {
|
1303 |
+
var row, total, y, _i, _len, _ref, _results;
|
1304 |
+
_ref = this.data;
|
1305 |
+
_results = [];
|
1306 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
1307 |
+
row = _ref[_i];
|
1308 |
+
row._x = this.transX(row.x);
|
1309 |
+
total = 0;
|
1310 |
+
row._y = (function() {
|
1311 |
+
var _j, _len1, _ref1, _results1;
|
1312 |
+
_ref1 = row.y;
|
1313 |
+
_results1 = [];
|
1314 |
+
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
1315 |
+
y = _ref1[_j];
|
1316 |
+
if (this.options.behaveLikeLine) {
|
1317 |
+
_results1.push(this.transY(y));
|
1318 |
+
} else {
|
1319 |
+
total += y || 0;
|
1320 |
+
_results1.push(this.transY(total));
|
1321 |
+
}
|
1322 |
+
}
|
1323 |
+
return _results1;
|
1324 |
+
}).call(this);
|
1325 |
+
_results.push(row._ymax = Math.max.apply(Math, row._y));
|
1326 |
+
}
|
1327 |
+
return _results;
|
1328 |
+
};
|
1329 |
+
|
1330 |
+
Area.prototype.drawSeries = function() {
|
1331 |
+
var i, range, _i, _j, _k, _len, _ref, _ref1, _results, _results1, _results2;
|
1332 |
+
this.seriesPoints = [];
|
1333 |
+
if (this.options.behaveLikeLine) {
|
1334 |
+
range = (function() {
|
1335 |
+
_results = [];
|
1336 |
+
for (var _i = 0, _ref = this.options.ykeys.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); }
|
1337 |
+
return _results;
|
1338 |
+
}).apply(this);
|
1339 |
+
} else {
|
1340 |
+
range = (function() {
|
1341 |
+
_results1 = [];
|
1342 |
+
for (var _j = _ref1 = this.options.ykeys.length - 1; _ref1 <= 0 ? _j <= 0 : _j >= 0; _ref1 <= 0 ? _j++ : _j--){ _results1.push(_j); }
|
1343 |
+
return _results1;
|
1344 |
+
}).apply(this);
|
1345 |
+
}
|
1346 |
+
_results2 = [];
|
1347 |
+
for (_k = 0, _len = range.length; _k < _len; _k++) {
|
1348 |
+
i = range[_k];
|
1349 |
+
this._drawFillFor(i);
|
1350 |
+
this._drawLineFor(i);
|
1351 |
+
_results2.push(this._drawPointFor(i));
|
1352 |
+
}
|
1353 |
+
return _results2;
|
1354 |
+
};
|
1355 |
+
|
1356 |
+
Area.prototype._drawFillFor = function(index) {
|
1357 |
+
var path;
|
1358 |
+
path = this.paths[index];
|
1359 |
+
if (path !== null) {
|
1360 |
+
path = path + ("L" + (this.transX(this.xmax)) + "," + this.bottom + "L" + (this.transX(this.xmin)) + "," + this.bottom + "Z");
|
1361 |
+
return this.drawFilledPath(path, this.fillForSeries(index));
|
1362 |
+
}
|
1363 |
+
};
|
1364 |
+
|
1365 |
+
Area.prototype.fillForSeries = function(i) {
|
1366 |
+
var color;
|
1367 |
+
color = Raphael.rgb2hsl(this.colorFor(this.data[i], i, 'line'));
|
1368 |
+
return Raphael.hsl(color.h, this.options.behaveLikeLine ? color.s * 0.9 : color.s * 0.75, Math.min(0.98, this.options.behaveLikeLine ? color.l * 1.2 : color.l * 1.25));
|
1369 |
+
};
|
1370 |
+
|
1371 |
+
Area.prototype.drawFilledPath = function(path, fill) {
|
1372 |
+
return this.raphael.path(path).attr('fill', fill).attr('fill-opacity', this.options.fillOpacity).attr('stroke', 'none');
|
1373 |
+
};
|
1374 |
+
|
1375 |
+
return Area;
|
1376 |
+
|
1377 |
+
})(Morris.Line);
|
1378 |
+
|
1379 |
+
Morris.Bar = (function(_super) {
|
1380 |
+
__extends(Bar, _super);
|
1381 |
+
|
1382 |
+
function Bar(options) {
|
1383 |
+
this.onHoverOut = __bind(this.onHoverOut, this);
|
1384 |
+
this.onHoverMove = __bind(this.onHoverMove, this);
|
1385 |
+
this.onGridClick = __bind(this.onGridClick, this);
|
1386 |
+
if (!(this instanceof Morris.Bar)) {
|
1387 |
+
return new Morris.Bar(options);
|
1388 |
+
}
|
1389 |
+
Bar.__super__.constructor.call(this, $.extend({}, options, {
|
1390 |
+
parseTime: false
|
1391 |
+
}));
|
1392 |
+
}
|
1393 |
+
|
1394 |
+
Bar.prototype.init = function() {
|
1395 |
+
this.cumulative = this.options.stacked;
|
1396 |
+
if (this.options.hideHover !== 'always') {
|
1397 |
+
this.hover = new Morris.Hover({
|
1398 |
+
parent: this.el
|
1399 |
+
});
|
1400 |
+
this.on('hovermove', this.onHoverMove);
|
1401 |
+
this.on('hoverout', this.onHoverOut);
|
1402 |
+
return this.on('gridclick', this.onGridClick);
|
1403 |
+
}
|
1404 |
+
};
|
1405 |
+
|
1406 |
+
Bar.prototype.defaults = {
|
1407 |
+
barSizeRatio: 0.75,
|
1408 |
+
barGap: 3,
|
1409 |
+
barColors: ['#0b62a4', '#7a92a3', '#4da74d', '#afd8f8', '#edc240', '#cb4b4b', '#9440ed'],
|
1410 |
+
barOpacity: 1.0,
|
1411 |
+
barRadius: [0, 0, 0, 0],
|
1412 |
+
xLabelMargin: 50
|
1413 |
+
};
|
1414 |
+
|
1415 |
+
Bar.prototype.calc = function() {
|
1416 |
+
var _ref;
|
1417 |
+
this.calcBars();
|
1418 |
+
if (this.options.hideHover === false) {
|
1419 |
+
return (_ref = this.hover).update.apply(_ref, this.hoverContentForRow(this.data.length - 1));
|
1420 |
+
}
|
1421 |
+
};
|
1422 |
+
|
1423 |
+
Bar.prototype.calcBars = function() {
|
1424 |
+
var idx, row, y, _i, _len, _ref, _results;
|
1425 |
+
_ref = this.data;
|
1426 |
+
_results = [];
|
1427 |
+
for (idx = _i = 0, _len = _ref.length; _i < _len; idx = ++_i) {
|
1428 |
+
row = _ref[idx];
|
1429 |
+
row._x = this.left + this.width * (idx + 0.5) / this.data.length;
|
1430 |
+
_results.push(row._y = (function() {
|
1431 |
+
var _j, _len1, _ref1, _results1;
|
1432 |
+
_ref1 = row.y;
|
1433 |
+
_results1 = [];
|
1434 |
+
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
1435 |
+
y = _ref1[_j];
|
1436 |
+
if (y != null) {
|
1437 |
+
_results1.push(this.transY(y));
|
1438 |
+
} else {
|
1439 |
+
_results1.push(null);
|
1440 |
+
}
|
1441 |
+
}
|
1442 |
+
return _results1;
|
1443 |
+
}).call(this));
|
1444 |
+
}
|
1445 |
+
return _results;
|
1446 |
+
};
|
1447 |
+
|
1448 |
+
Bar.prototype.draw = function() {
|
1449 |
+
var _ref;
|
1450 |
+
if ((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'x') {
|
1451 |
+
this.drawXAxis();
|
1452 |
+
}
|
1453 |
+
return this.drawSeries();
|
1454 |
+
};
|
1455 |
+
|
1456 |
+
Bar.prototype.drawXAxis = function() {
|
1457 |
+
var i, label, labelBox, margin, offset, prevAngleMargin, prevLabelMargin, row, textBox, ypos, _i, _ref, _results;
|
1458 |
+
ypos = this.bottom + (this.options.xAxisLabelTopPadding || this.options.padding / 2);
|
1459 |
+
prevLabelMargin = null;
|
1460 |
+
prevAngleMargin = null;
|
1461 |
+
_results = [];
|
1462 |
+
for (i = _i = 0, _ref = this.data.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
|
1463 |
+
row = this.data[this.data.length - 1 - i];
|
1464 |
+
label = this.drawXAxisLabel(row._x, ypos, row.label);
|
1465 |
+
textBox = label.getBBox();
|
1466 |
+
label.transform("r" + (-this.options.xLabelAngle));
|
1467 |
+
labelBox = label.getBBox();
|
1468 |
+
label.transform("t0," + (labelBox.height / 2) + "...");
|
1469 |
+
if (this.options.xLabelAngle !== 0) {
|
1470 |
+
offset = -0.5 * textBox.width * Math.cos(this.options.xLabelAngle * Math.PI / 180.0);
|
1471 |
+
label.transform("t" + offset + ",0...");
|
1472 |
+
}
|
1473 |
+
if (((prevLabelMargin == null) || prevLabelMargin >= labelBox.x + labelBox.width || (prevAngleMargin != null) && prevAngleMargin >= labelBox.x) && labelBox.x >= 0 && (labelBox.x + labelBox.width) < this.el.width()) {
|
1474 |
+
if (this.options.xLabelAngle !== 0) {
|
1475 |
+
margin = 1.25 * this.options.gridTextSize / Math.sin(this.options.xLabelAngle * Math.PI / 180.0);
|
1476 |
+
prevAngleMargin = labelBox.x - margin;
|
1477 |
+
}
|
1478 |
+
_results.push(prevLabelMargin = labelBox.x - this.options.xLabelMargin);
|
1479 |
+
} else {
|
1480 |
+
_results.push(label.remove());
|
1481 |
+
}
|
1482 |
+
}
|
1483 |
+
return _results;
|
1484 |
+
};
|
1485 |
+
|
1486 |
+
Bar.prototype.drawSeries = function() {
|
1487 |
+
var barWidth, bottom, groupWidth, idx, lastTop, left, leftPadding, numBars, row, sidx, size, spaceLeft, top, ypos, zeroPos;
|
1488 |
+
groupWidth = this.width / this.options.data.length;
|
1489 |
+
numBars = this.options.stacked ? 1 : this.options.ykeys.length;
|
1490 |
+
barWidth = (groupWidth * this.options.barSizeRatio - this.options.barGap * (numBars - 1)) / numBars;
|
1491 |
+
if (this.options.barSize) {
|
1492 |
+
barWidth = Math.min(barWidth, this.options.barSize);
|
1493 |
+
}
|
1494 |
+
spaceLeft = groupWidth - barWidth * numBars - this.options.barGap * (numBars - 1);
|
1495 |
+
leftPadding = spaceLeft / 2;
|
1496 |
+
zeroPos = this.ymin <= 0 && this.ymax >= 0 ? this.transY(0) : null;
|
1497 |
+
return this.bars = (function() {
|
1498 |
+
var _i, _len, _ref, _results;
|
1499 |
+
_ref = this.data;
|
1500 |
+
_results = [];
|
1501 |
+
for (idx = _i = 0, _len = _ref.length; _i < _len; idx = ++_i) {
|
1502 |
+
row = _ref[idx];
|
1503 |
+
lastTop = 0;
|
1504 |
+
_results.push((function() {
|
1505 |
+
var _j, _len1, _ref1, _results1;
|
1506 |
+
_ref1 = row._y;
|
1507 |
+
_results1 = [];
|
1508 |
+
for (sidx = _j = 0, _len1 = _ref1.length; _j < _len1; sidx = ++_j) {
|
1509 |
+
ypos = _ref1[sidx];
|
1510 |
+
if (ypos !== null) {
|
1511 |
+
if (zeroPos) {
|
1512 |
+
top = Math.min(ypos, zeroPos);
|
1513 |
+
bottom = Math.max(ypos, zeroPos);
|
1514 |
+
} else {
|
1515 |
+
top = ypos;
|
1516 |
+
bottom = this.bottom;
|
1517 |
+
}
|
1518 |
+
left = this.left + idx * groupWidth + leftPadding;
|
1519 |
+
if (!this.options.stacked) {
|
1520 |
+
left += sidx * (barWidth + this.options.barGap);
|
1521 |
+
}
|
1522 |
+
size = bottom - top;
|
1523 |
+
if (this.options.verticalGridCondition && this.options.verticalGridCondition(row.x)) {
|
1524 |
+
this.drawBar(this.left + idx * groupWidth, this.top, groupWidth, Math.abs(this.top - this.bottom), this.options.verticalGridColor, this.options.verticalGridOpacity, this.options.barRadius);
|
1525 |
+
}
|
1526 |
+
if (this.options.stacked) {
|
1527 |
+
top -= lastTop;
|
1528 |
+
}
|
1529 |
+
this.drawBar(left, top, barWidth, size, this.colorFor(row, sidx, 'bar'), this.options.barOpacity, this.options.barRadius);
|
1530 |
+
_results1.push(lastTop += size);
|
1531 |
+
} else {
|
1532 |
+
_results1.push(null);
|
1533 |
+
}
|
1534 |
+
}
|
1535 |
+
return _results1;
|
1536 |
+
}).call(this));
|
1537 |
+
}
|
1538 |
+
return _results;
|
1539 |
+
}).call(this);
|
1540 |
+
};
|
1541 |
+
|
1542 |
+
Bar.prototype.colorFor = function(row, sidx, type) {
|
1543 |
+
var r, s;
|
1544 |
+
if (typeof this.options.barColors === 'function') {
|
1545 |
+
r = {
|
1546 |
+
x: row.x,
|
1547 |
+
y: row.y[sidx],
|
1548 |
+
label: row.label
|
1549 |
+
};
|
1550 |
+
s = {
|
1551 |
+
index: sidx,
|
1552 |
+
key: this.options.ykeys[sidx],
|
1553 |
+
label: this.options.labels[sidx]
|
1554 |
+
};
|
1555 |
+
return this.options.barColors.call(this, r, s, type);
|
1556 |
+
} else {
|
1557 |
+
return this.options.barColors[sidx % this.options.barColors.length];
|
1558 |
+
}
|
1559 |
+
};
|
1560 |
+
|
1561 |
+
Bar.prototype.hitTest = function(x) {
|
1562 |
+
if (this.data.length === 0) {
|
1563 |
+
return null;
|
1564 |
+
}
|
1565 |
+
x = Math.max(Math.min(x, this.right), this.left);
|
1566 |
+
return Math.min(this.data.length - 1, Math.floor((x - this.left) / (this.width / this.data.length)));
|
1567 |
+
};
|
1568 |
+
|
1569 |
+
Bar.prototype.onGridClick = function(x, y) {
|
1570 |
+
var index;
|
1571 |
+
index = this.hitTest(x);
|
1572 |
+
return this.fire('click', index, this.data[index].src, x, y);
|
1573 |
+
};
|
1574 |
+
|
1575 |
+
Bar.prototype.onHoverMove = function(x, y) {
|
1576 |
+
var index, _ref;
|
1577 |
+
index = this.hitTest(x);
|
1578 |
+
return (_ref = this.hover).update.apply(_ref, this.hoverContentForRow(index));
|
1579 |
+
};
|
1580 |
+
|
1581 |
+
Bar.prototype.onHoverOut = function() {
|
1582 |
+
if (this.options.hideHover !== false) {
|
1583 |
+
return this.hover.hide();
|
1584 |
+
}
|
1585 |
+
};
|
1586 |
+
|
1587 |
+
Bar.prototype.hoverContentForRow = function(index) {
|
1588 |
+
var content, j, row, x, y, _i, _len, _ref;
|
1589 |
+
row = this.data[index];
|
1590 |
+
content = "<div class='morris-hover-row-label'>" + row.label + "</div>";
|
1591 |
+
_ref = row.y;
|
1592 |
+
for (j = _i = 0, _len = _ref.length; _i < _len; j = ++_i) {
|
1593 |
+
y = _ref[j];
|
1594 |
+
content += "<div class='morris-hover-point' style='color: " + (this.colorFor(row, j, 'label')) + "'>\n " + this.options.labels[j] + ":\n " + (this.yLabelFormat(y)) + "\n</div>";
|
1595 |
+
}
|
1596 |
+
if (typeof this.options.hoverCallback === 'function') {
|
1597 |
+
content = this.options.hoverCallback(index, this.options, content, row.src);
|
1598 |
+
}
|
1599 |
+
x = this.left + (index + 0.5) * this.width / this.data.length;
|
1600 |
+
return [content, x];
|
1601 |
+
};
|
1602 |
+
|
1603 |
+
Bar.prototype.drawXAxisLabel = function(xPos, yPos, text) {
|
1604 |
+
var label;
|
1605 |
+
return label = this.raphael.text(xPos, yPos, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).attr('fill', this.options.gridTextColor);
|
1606 |
+
};
|
1607 |
+
|
1608 |
+
Bar.prototype.drawBar = function(xPos, yPos, width, height, barColor, opacity, radiusArray) {
|
1609 |
+
var maxRadius, path;
|
1610 |
+
maxRadius = Math.max.apply(Math, radiusArray);
|
1611 |
+
if (maxRadius === 0 || maxRadius > height) {
|
1612 |
+
path = this.raphael.rect(xPos, yPos, width, height);
|
1613 |
+
} else {
|
1614 |
+
path = this.raphael.path(this.roundedRect(xPos, yPos, width, height, radiusArray));
|
1615 |
+
}
|
1616 |
+
return path.attr('fill', barColor).attr('fill-opacity', opacity).attr('stroke', 'none');
|
1617 |
+
};
|
1618 |
+
|
1619 |
+
Bar.prototype.roundedRect = function(x, y, w, h, r) {
|
1620 |
+
if (r == null) {
|
1621 |
+
r = [0, 0, 0, 0];
|
1622 |
+
}
|
1623 |
+
return ["M", x, r[0] + y, "Q", x, y, x + r[0], y, "L", x + w - r[1], y, "Q", x + w, y, x + w, y + r[1], "L", x + w, y + h - r[2], "Q", x + w, y + h, x + w - r[2], y + h, "L", x + r[3], y + h, "Q", x, y + h, x, y + h - r[3], "Z"];
|
1624 |
+
};
|
1625 |
+
|
1626 |
+
return Bar;
|
1627 |
+
|
1628 |
+
})(Morris.Grid);
|
1629 |
+
|
1630 |
+
Morris.Donut = (function(_super) {
|
1631 |
+
__extends(Donut, _super);
|
1632 |
+
|
1633 |
+
Donut.prototype.defaults = {
|
1634 |
+
colors: ['#0B62A4', '#3980B5', '#679DC6', '#95BBD7', '#B0CCE1', '#095791', '#095085', '#083E67', '#052C48', '#042135'],
|
1635 |
+
backgroundColor: '#FFFFFF',
|
1636 |
+
labelColor: '#000000',
|
1637 |
+
formatter: Morris.commas,
|
1638 |
+
resize: false
|
1639 |
+
};
|
1640 |
+
|
1641 |
+
function Donut(options) {
|
1642 |
+
this.resizeHandler = __bind(this.resizeHandler, this);
|
1643 |
+
this.select = __bind(this.select, this);
|
1644 |
+
this.click = __bind(this.click, this);
|
1645 |
+
var _this = this;
|
1646 |
+
if (!(this instanceof Morris.Donut)) {
|
1647 |
+
return new Morris.Donut(options);
|
1648 |
+
}
|
1649 |
+
this.options = $.extend({}, this.defaults, options);
|
1650 |
+
if (typeof options.element === 'string') {
|
1651 |
+
this.el = $(document.getElementById(options.element));
|
1652 |
+
} else {
|
1653 |
+
this.el = $(options.element);
|
1654 |
+
}
|
1655 |
+
if (this.el === null || this.el.length === 0) {
|
1656 |
+
throw new Error("Graph placeholder not found.");
|
1657 |
+
}
|
1658 |
+
if (options.data === void 0 || options.data.length === 0) {
|
1659 |
+
return;
|
1660 |
+
}
|
1661 |
+
this.raphael = new Raphael(this.el[0]);
|
1662 |
+
if (this.options.resize) {
|
1663 |
+
$(window).bind('resize', function(evt) {
|
1664 |
+
if (_this.timeoutId != null) {
|
1665 |
+
window.clearTimeout(_this.timeoutId);
|
1666 |
+
}
|
1667 |
+
return _this.timeoutId = window.setTimeout(_this.resizeHandler, 100);
|
1668 |
+
});
|
1669 |
+
}
|
1670 |
+
this.setData(options.data);
|
1671 |
+
}
|
1672 |
+
|
1673 |
+
Donut.prototype.redraw = function() {
|
1674 |
+
var C, cx, cy, i, idx, last, max_value, min, next, seg, total, value, w, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;
|
1675 |
+
this.raphael.clear();
|
1676 |
+
cx = this.el.width() / 2;
|
1677 |
+
cy = this.el.height() / 2;
|
1678 |
+
w = (Math.min(cx, cy) - 10) / 3;
|
1679 |
+
total = 0;
|
1680 |
+
_ref = this.values;
|
1681 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
1682 |
+
value = _ref[_i];
|
1683 |
+
total += value;
|
1684 |
+
}
|
1685 |
+
min = 5 / (2 * w);
|
1686 |
+
C = 1.9999 * Math.PI - min * this.data.length;
|
1687 |
+
last = 0;
|
1688 |
+
idx = 0;
|
1689 |
+
this.segments = [];
|
1690 |
+
_ref1 = this.values;
|
1691 |
+
for (i = _j = 0, _len1 = _ref1.length; _j < _len1; i = ++_j) {
|
1692 |
+
value = _ref1[i];
|
1693 |
+
next = last + min + C * (value / total);
|
1694 |
+
seg = new Morris.DonutSegment(cx, cy, w * 2, w, last, next, this.data[i].color || this.options.colors[idx % this.options.colors.length], this.options.backgroundColor, idx, this.raphael);
|
1695 |
+
seg.render();
|
1696 |
+
this.segments.push(seg);
|
1697 |
+
seg.on('hover', this.select);
|
1698 |
+
seg.on('click', this.click);
|
1699 |
+
last = next;
|
1700 |
+
idx += 1;
|
1701 |
+
}
|
1702 |
+
this.text1 = this.drawEmptyDonutLabel(cx, cy - 10, this.options.labelColor, 15, 800);
|
1703 |
+
this.text2 = this.drawEmptyDonutLabel(cx, cy + 10, this.options.labelColor, 14);
|
1704 |
+
max_value = Math.max.apply(Math, this.values);
|
1705 |
+
idx = 0;
|
1706 |
+
_ref2 = this.values;
|
1707 |
+
_results = [];
|
1708 |
+
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
|
1709 |
+
value = _ref2[_k];
|
1710 |
+
if (value === max_value) {
|
1711 |
+
this.select(idx);
|
1712 |
+
break;
|
1713 |
+
}
|
1714 |
+
_results.push(idx += 1);
|
1715 |
+
}
|
1716 |
+
return _results;
|
1717 |
+
};
|
1718 |
+
|
1719 |
+
Donut.prototype.setData = function(data) {
|
1720 |
+
var row;
|
1721 |
+
this.data = data;
|
1722 |
+
this.values = (function() {
|
1723 |
+
var _i, _len, _ref, _results;
|
1724 |
+
_ref = this.data;
|
1725 |
+
_results = [];
|
1726 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
1727 |
+
row = _ref[_i];
|
1728 |
+
_results.push(parseFloat(row.value));
|
1729 |
+
}
|
1730 |
+
return _results;
|
1731 |
+
}).call(this);
|
1732 |
+
return this.redraw();
|
1733 |
+
};
|
1734 |
+
|
1735 |
+
Donut.prototype.click = function(idx) {
|
1736 |
+
return this.fire('click', idx, this.data[idx]);
|
1737 |
+
};
|
1738 |
+
|
1739 |
+
Donut.prototype.select = function(idx) {
|
1740 |
+
var row, s, segment, _i, _len, _ref;
|
1741 |
+
_ref = this.segments;
|
1742 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
1743 |
+
s = _ref[_i];
|
1744 |
+
s.deselect();
|
1745 |
+
}
|
1746 |
+
segment = this.segments[idx];
|
1747 |
+
segment.select();
|
1748 |
+
row = this.data[idx];
|
1749 |
+
return this.setLabels(row.label, this.options.formatter(row.value, row));
|
1750 |
+
};
|
1751 |
+
|
1752 |
+
Donut.prototype.setLabels = function(label1, label2) {
|
1753 |
+
var inner, maxHeightBottom, maxHeightTop, maxWidth, text1bbox, text1scale, text2bbox, text2scale;
|
1754 |
+
inner = (Math.min(this.el.width() / 2, this.el.height() / 2) - 10) * 2 / 3;
|
1755 |
+
maxWidth = 1.8 * inner;
|
1756 |
+
maxHeightTop = inner / 2;
|
1757 |
+
maxHeightBottom = inner / 3;
|
1758 |
+
this.text1.attr({
|
1759 |
+
text: label1,
|
1760 |
+
transform: ''
|
1761 |
+
});
|
1762 |
+
text1bbox = this.text1.getBBox();
|
1763 |
+
text1scale = Math.min(maxWidth / text1bbox.width, maxHeightTop / text1bbox.height);
|
1764 |
+
this.text1.attr({
|
1765 |
+
transform: "S" + text1scale + "," + text1scale + "," + (text1bbox.x + text1bbox.width / 2) + "," + (text1bbox.y + text1bbox.height)
|
1766 |
+
});
|
1767 |
+
this.text2.attr({
|
1768 |
+
text: label2,
|
1769 |
+
transform: ''
|
1770 |
+
});
|
1771 |
+
text2bbox = this.text2.getBBox();
|
1772 |
+
text2scale = Math.min(maxWidth / text2bbox.width, maxHeightBottom / text2bbox.height);
|
1773 |
+
return this.text2.attr({
|
1774 |
+
transform: "S" + text2scale + "," + text2scale + "," + (text2bbox.x + text2bbox.width / 2) + "," + text2bbox.y
|
1775 |
+
});
|
1776 |
+
};
|
1777 |
+
|
1778 |
+
Donut.prototype.drawEmptyDonutLabel = function(xPos, yPos, color, fontSize, fontWeight) {
|
1779 |
+
var text;
|
1780 |
+
text = this.raphael.text(xPos, yPos, '').attr('font-size', fontSize).attr('fill', color);
|
1781 |
+
if (fontWeight != null) {
|
1782 |
+
text.attr('font-weight', fontWeight);
|
1783 |
+
}
|
1784 |
+
return text;
|
1785 |
+
};
|
1786 |
+
|
1787 |
+
Donut.prototype.resizeHandler = function() {
|
1788 |
+
this.timeoutId = null;
|
1789 |
+
this.raphael.setSize(this.el.width(), this.el.height());
|
1790 |
+
return this.redraw();
|
1791 |
+
};
|
1792 |
+
|
1793 |
+
return Donut;
|
1794 |
+
|
1795 |
+
})(Morris.EventEmitter);
|
1796 |
+
|
1797 |
+
Morris.DonutSegment = (function(_super) {
|
1798 |
+
__extends(DonutSegment, _super);
|
1799 |
+
|
1800 |
+
function DonutSegment(cx, cy, inner, outer, p0, p1, color, backgroundColor, index, raphael) {
|
1801 |
+
this.cx = cx;
|
1802 |
+
this.cy = cy;
|
1803 |
+
this.inner = inner;
|
1804 |
+
this.outer = outer;
|
1805 |
+
this.color = color;
|
1806 |
+
this.backgroundColor = backgroundColor;
|
1807 |
+
this.index = index;
|
1808 |
+
this.raphael = raphael;
|
1809 |
+
this.deselect = __bind(this.deselect, this);
|
1810 |
+
this.select = __bind(this.select, this);
|
1811 |
+
this.sin_p0 = Math.sin(p0);
|
1812 |
+
this.cos_p0 = Math.cos(p0);
|
1813 |
+
this.sin_p1 = Math.sin(p1);
|
1814 |
+
this.cos_p1 = Math.cos(p1);
|
1815 |
+
this.is_long = (p1 - p0) > Math.PI ? 1 : 0;
|
1816 |
+
this.path = this.calcSegment(this.inner + 3, this.inner + this.outer - 5);
|
1817 |
+
this.selectedPath = this.calcSegment(this.inner + 3, this.inner + this.outer);
|
1818 |
+
this.hilight = this.calcArc(this.inner);
|
1819 |
+
}
|
1820 |
+
|
1821 |
+
DonutSegment.prototype.calcArcPoints = function(r) {
|
1822 |
+
return [this.cx + r * this.sin_p0, this.cy + r * this.cos_p0, this.cx + r * this.sin_p1, this.cy + r * this.cos_p1];
|
1823 |
+
};
|
1824 |
+
|
1825 |
+
DonutSegment.prototype.calcSegment = function(r1, r2) {
|
1826 |
+
var ix0, ix1, iy0, iy1, ox0, ox1, oy0, oy1, _ref, _ref1;
|
1827 |
+
_ref = this.calcArcPoints(r1), ix0 = _ref[0], iy0 = _ref[1], ix1 = _ref[2], iy1 = _ref[3];
|
1828 |
+
_ref1 = this.calcArcPoints(r2), ox0 = _ref1[0], oy0 = _ref1[1], ox1 = _ref1[2], oy1 = _ref1[3];
|
1829 |
+
return ("M" + ix0 + "," + iy0) + ("A" + r1 + "," + r1 + ",0," + this.is_long + ",0," + ix1 + "," + iy1) + ("L" + ox1 + "," + oy1) + ("A" + r2 + "," + r2 + ",0," + this.is_long + ",1," + ox0 + "," + oy0) + "Z";
|
1830 |
+
};
|
1831 |
+
|
1832 |
+
DonutSegment.prototype.calcArc = function(r) {
|
1833 |
+
var ix0, ix1, iy0, iy1, _ref;
|
1834 |
+
_ref = this.calcArcPoints(r), ix0 = _ref[0], iy0 = _ref[1], ix1 = _ref[2], iy1 = _ref[3];
|
1835 |
+
return ("M" + ix0 + "," + iy0) + ("A" + r + "," + r + ",0," + this.is_long + ",0," + ix1 + "," + iy1);
|
1836 |
+
};
|
1837 |
+
|
1838 |
+
DonutSegment.prototype.render = function() {
|
1839 |
+
var _this = this;
|
1840 |
+
this.arc = this.drawDonutArc(this.hilight, this.color);
|
1841 |
+
return this.seg = this.drawDonutSegment(this.path, this.color, this.backgroundColor, function() {
|
1842 |
+
return _this.fire('hover', _this.index);
|
1843 |
+
}, function() {
|
1844 |
+
return _this.fire('click', _this.index);
|
1845 |
+
});
|
1846 |
+
};
|
1847 |
+
|
1848 |
+
DonutSegment.prototype.drawDonutArc = function(path, color) {
|
1849 |
+
return this.raphael.path(path).attr({
|
1850 |
+
stroke: color,
|
1851 |
+
'stroke-width': 2,
|
1852 |
+
opacity: 0
|
1853 |
+
});
|
1854 |
+
};
|
1855 |
+
|
1856 |
+
DonutSegment.prototype.drawDonutSegment = function(path, fillColor, strokeColor, hoverFunction, clickFunction) {
|
1857 |
+
return this.raphael.path(path).attr({
|
1858 |
+
fill: fillColor,
|
1859 |
+
stroke: strokeColor,
|
1860 |
+
'stroke-width': 3
|
1861 |
+
}).hover(hoverFunction).click(clickFunction);
|
1862 |
+
};
|
1863 |
+
|
1864 |
+
DonutSegment.prototype.select = function() {
|
1865 |
+
if (!this.selected) {
|
1866 |
+
this.seg.animate({
|
1867 |
+
path: this.selectedPath
|
1868 |
+
}, 150, '<>');
|
1869 |
+
this.arc.animate({
|
1870 |
+
opacity: 1
|
1871 |
+
}, 150, '<>');
|
1872 |
+
return this.selected = true;
|
1873 |
+
}
|
1874 |
+
};
|
1875 |
+
|
1876 |
+
DonutSegment.prototype.deselect = function() {
|
1877 |
+
if (this.selected) {
|
1878 |
+
this.seg.animate({
|
1879 |
+
path: this.path
|
1880 |
+
}, 150, '<>');
|
1881 |
+
this.arc.animate({
|
1882 |
+
opacity: 0
|
1883 |
+
}, 150, '<>');
|
1884 |
+
return this.selected = false;
|
1885 |
+
}
|
1886 |
+
};
|
1887 |
+
|
1888 |
+
return DonutSegment;
|
1889 |
+
|
1890 |
+
})(Morris.EventEmitter);
|
1891 |
+
|
1892 |
+
}).call(this);
|
3.0.14/assets/admin/scripts/multiselect.min.js
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* @license
|
3 |
+
*
|
4 |
+
* Multiselect v2.2.6
|
5 |
+
* http://crlcu.github.io/multiselect/
|
6 |
+
*
|
7 |
+
* Copyright (c) 2015 Adrian Crisan
|
8 |
+
* Licensed under the MIT license (https://github.com/crlcu/multiselect/blob/master/LICENSE)
|
9 |
+
*/
|
10 |
+
if("undefined"==typeof jQuery)throw new Error("multiselect requires jQuery");!function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<7)throw new Error("multiselect requires jQuery version 1.7 or higher")}(jQuery),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t){"use strict";var e=function(t){function e(e,o){var i=e.prop("id");this.$left=e,this.$right=t(t(o.right).length?o.right:"#"+i+"_to"),this.actions={$leftAll:t(t(o.leftAll).length?o.leftAll:"#"+i+"_leftAll"),$rightAll:t(t(o.rightAll).length?o.rightAll:"#"+i+"_rightAll"),$leftSelected:t(t(o.leftSelected).length?o.leftSelected:"#"+i+"_leftSelected"),$rightSelected:t(t(o.rightSelected).length?o.rightSelected:"#"+i+"_rightSelected"),$undo:t(t(o.undo).length?o.undo:"#"+i+"_undo"),$redo:t(t(o.redo).length?o.redo:"#"+i+"_redo")},delete o.leftAll,delete o.leftSelected,delete o.right,delete o.rightAll,delete o.rightSelected,this.options={keepRenderingSort:o.keepRenderingSort,submitAllLeft:void 0!==o.submitAllLeft?o.submitAllLeft:!0,submitAllRight:void 0!==o.submitAllRight?o.submitAllRight:!0,search:o.search},delete o.keepRenderingSort,o.submitAllLeft,o.submitAllRight,o.search,this.callbacks=o,this.init()}return e.prototype={undoStack:[],redoStack:[],init:function(){var e=this;(e.$left.find("optgroup").length||e.$right.find("optgroup").length)&&(e.callbacks.sort=!1,e.options.search=!1),e.options.keepRenderingSort&&(e.skipInitSort=!0,e.callbacks.sort=function(e,o){return t(e).data("position")>t(o).data("position")?1:-1},e.$left.find("option").each(function(e,o){t(o).data("position",e)}),e.$right.find("option").each(function(e,o){t(o).data("position",e)})),"function"==typeof e.callbacks.startUp&&e.callbacks.startUp(e.$left,e.$right),e.skipInitSort||"function"!=typeof e.callbacks.sort||(e.$left.mSort(e.callbacks.sort),e.$right.each(function(o,i){t(i).mSort(e.callbacks.sort)})),e.options.search&&e.options.search.left&&(e.options.search.$left=t(e.options.search.left),e.$left.before(e.options.search.$left)),e.options.search&&e.options.search.right&&(e.options.search.$right=t(e.options.search.right),e.$right.before(t(e.options.search.$right))),e.events()},events:function(){var e=this;e.options.search&&e.options.search.$left&&e.options.search.$left.on("keyup",function(t){if(this.value){e.$left.find('option:search("'+this.value+'")').mShow(),e.$left.find('option:not(:search("'+this.value+'"))').mHide()}else e.$left.find("option").mShow()}),e.options.search&&e.options.search.$right&&e.options.search.$right.on("keyup",function(t){if(this.value){e.$right.find('option:search("'+this.value+'")').mShow(),e.$right.find('option:not(:search("'+this.value+'"))').mHide()}else e.$right.find("option").mShow()}),e.$right.closest("form").on("submit",function(t){e.$left.find("option").prop("selected",e.options.submitAllLeft),e.$right.find("option").prop("selected",e.options.submitAllRight)}),e.$left.on("dblclick","option",function(t){t.preventDefault();var o=e.$left.find("option:selected");o.length&&e.moveToRight(o,t)}),e.$right.on("dblclick","option",function(t){t.preventDefault();var o=e.$right.find("option:selected");o.length&&e.moveToLeft(o,t)}),(navigator.userAgent.match(/MSIE/i)||navigator.userAgent.indexOf("Trident/")>0||navigator.userAgent.indexOf("Edge/")>0)&&(e.$left.dblclick(function(t){e.actions.$rightSelected.trigger("click")}),e.$right.dblclick(function(t){e.actions.$leftSelected.trigger("click")})),e.actions.$rightSelected.on("click",function(o){o.preventDefault();var i=e.$left.find("option:selected");i.length&&e.moveToRight(i,o),t(this).blur()}),e.actions.$leftSelected.on("click",function(o){o.preventDefault();var i=e.$right.find("option:selected");i.length&&e.moveToLeft(i,o),t(this).blur()}),e.actions.$rightAll.on("click",function(o){o.preventDefault();var i=e.$left.children(":not(span):not(.hidden)");i.length&&e.moveToRight(i,o),t(this).blur()}),e.actions.$leftAll.on("click",function(o){o.preventDefault();var i=e.$right.children(":not(span):not(.hidden)");i.length&&e.moveToLeft(i,o),t(this).blur()}),e.actions.$undo.on("click",function(t){t.preventDefault(),e.undo(t)}),e.actions.$redo.on("click",function(t){t.preventDefault(),e.redo(t)})},moveToRight:function(e,o,i,n){var r=this;return"function"==typeof r.callbacks.moveToRight?r.callbacks.moveToRight(r,e,o,i,n):"function"!=typeof r.callbacks.beforeMoveToRight||i||r.callbacks.beforeMoveToRight(r.$left,r.$right,e)?(e.each(function(e,o){var i=t(o);if(i.parent().is("optgroup")){var n=i.parent(),l=r.$right.find('optgroup[label="'+n.prop("label")+'"]');l.length||(l=n.clone(),l.children().remove()),i=l.append(i),n.removeIfEmpty()}r.$right.move(i)}),n||(r.undoStack.push(["right",e]),r.redoStack=[]),"function"!=typeof r.callbacks.sort||i||r.$right.mSort(r.callbacks.sort),"function"!=typeof r.callbacks.afterMoveToRight||i||r.callbacks.afterMoveToRight(r.$left,r.$right,e),r):!1},moveToLeft:function(e,o,i,n){var r=this;return"function"==typeof r.callbacks.moveToLeft?r.callbacks.moveToLeft(r,e,o,i,n):"function"!=typeof r.callbacks.beforeMoveToLeft||i||r.callbacks.beforeMoveToLeft(r.$left,r.$right,e)?(e.each(function(e,o){var i=t(o);if(i.is("optgroup")||i.parent().is("optgroup")){var n=i.is("optgroup")?i:i.parent(),l=r.$left.find('optgroup[label="'+n.prop("label")+'"]');l.length||(l=n.clone(),l.children().remove()),i=l.append(i.is("optgroup")?i.children():i),n.removeIfEmpty()}r.$left.move(i)}),n||(r.undoStack.push(["left",e]),r.redoStack=[]),"function"!=typeof r.callbacks.sort||i||r.$left.mSort(r.callbacks.sort),"function"!=typeof r.callbacks.afterMoveToLeft||i||r.callbacks.afterMoveToLeft(r.$left,r.$right,e),r):!1},undo:function(t){var e=this,o=e.undoStack.pop();if(o)switch(e.redoStack.push(o),o[0]){case"left":e.moveToRight(o[1],t,!1,!0);break;case"right":e.moveToLeft(o[1],t,!1,!0)}},redo:function(t){var e=this,o=e.redoStack.pop();if(o)switch(e.undoStack.push(o),o[0]){case"left":e.moveToLeft(o[1],t,!1,!0);break;case"right":e.moveToRight(o[1],t,!1,!0)}}},e}(t);t.multiselect={defaults:{startUp:function(t,e){e.find("option").each(function(e,o){var i=t.find('option[value="'+o.value+'"]'),n=i.parent();i.remove(),"OPTGROUP"==n.prop("tagName")&&n.removeIfEmpty()})},beforeMoveToRight:function(t,e,o){return!0},afterMoveToRight:function(t,e,o){},beforeMoveToLeft:function(t,e,o){return!0},afterMoveToLeft:function(t,e,o){},sort:function(t,e){return"NA"==t.innerHTML?1:"NA"==e.innerHTML?-1:t.innerHTML>e.innerHTML?1:-1}}};var o=window.navigator.userAgent,i=o.indexOf("MSIE ")+o.indexOf("Trident/")+o.indexOf("Edge/")>-3;t.fn.multiselect=function(o){return this.each(function(){var i=t(this),n=i.data(),r=t.extend({},t.multiselect.defaults,n,o);return new e(i,r)})},t.fn.move=function(t){return this.append(t).find("option").prop("selected",!1),this},t.fn.removeIfEmpty=function(){return this.children().length||this.remove(),this},t.fn.mShow=function(){return this.removeClass("hidden").show(),i&&this.each(function(e,o){t(o).parent().is("span")&&t(o).parent().replaceWith(o),t(o).show()}),this},t.fn.mHide=function(){return this.addClass("hidden").hide(),i&&this.each(function(e,o){t(o).parent().is("span")||t(o).wrap("<span>").hide()}),this},t.fn.mSort=function(t){return this.find("option").sort(t).appendTo(this),this},t.expr[":"].search=t.expr.createPseudo(function(e){return function(o){return t(o).text().toUpperCase().indexOf(e.toUpperCase())>=0}})});
|
3.0.14/assets/admin/scripts/raphael.js
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// ┌────────────────────────────────────────────────────────────────────┐ \\
|
2 |
+
// │ Raphaël 2.1.2 - JavaScript Vector Library │ \\
|
3 |
+
// ├────────────────────────────────────────────────────────────────────┤ \\
|
4 |
+
// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com) │ \\
|
5 |
+
// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com) │ \\
|
6 |
+
// ├────────────────────────────────────────────────────────────────────┤ \\
|
7 |
+
// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\
|
8 |
+
// └────────────────────────────────────────────────────────────────────┘ \\
|
9 |
+
!function(a){var b,c,d="0.4.2",e="hasOwnProperty",f=/[\.\/]/,g="*",h=function(){},i=function(a,b){return a-b},j={n:{}},k=function(a,d){a=String(a);var e,f=c,g=Array.prototype.slice.call(arguments,2),h=k.listeners(a),j=0,l=[],m={},n=[],o=b;b=a,c=0;for(var p=0,q=h.length;q>p;p++)"zIndex"in h[p]&&(l.push(h[p].zIndex),h[p].zIndex<0&&(m[h[p].zIndex]=h[p]));for(l.sort(i);l[j]<0;)if(e=m[l[j++]],n.push(e.apply(d,g)),c)return c=f,n;for(p=0;q>p;p++)if(e=h[p],"zIndex"in e)if(e.zIndex==l[j]){if(n.push(e.apply(d,g)),c)break;do if(j++,e=m[l[j]],e&&n.push(e.apply(d,g)),c)break;while(e)}else m[e.zIndex]=e;else if(n.push(e.apply(d,g)),c)break;return c=f,b=o,n.length?n:null};k._events=j,k.listeners=function(a){var b,c,d,e,h,i,k,l,m=a.split(f),n=j,o=[n],p=[];for(e=0,h=m.length;h>e;e++){for(l=[],i=0,k=o.length;k>i;i++)for(n=o[i].n,c=[n[m[e]],n[g]],d=2;d--;)b=c[d],b&&(l.push(b),p=p.concat(b.f||[]));o=l}return p},k.on=function(a,b){if(a=String(a),"function"!=typeof b)return function(){};for(var c=a.split(f),d=j,e=0,g=c.length;g>e;e++)d=d.n,d=d.hasOwnProperty(c[e])&&d[c[e]]||(d[c[e]]={n:{}});for(d.f=d.f||[],e=0,g=d.f.length;g>e;e++)if(d.f[e]==b)return h;return d.f.push(b),function(a){+a==+a&&(b.zIndex=+a)}},k.f=function(a){var b=[].slice.call(arguments,1);return function(){k.apply(null,[a,null].concat(b).concat([].slice.call(arguments,0)))}},k.stop=function(){c=1},k.nt=function(a){return a?new RegExp("(?:\\.|\\/|^)"+a+"(?:\\.|\\/|$)").test(b):b},k.nts=function(){return b.split(f)},k.off=k.unbind=function(a,b){if(!a)return void(k._events=j={n:{}});var c,d,h,i,l,m,n,o=a.split(f),p=[j];for(i=0,l=o.length;l>i;i++)for(m=0;m<p.length;m+=h.length-2){if(h=[m,1],c=p[m].n,o[i]!=g)c[o[i]]&&h.push(c[o[i]]);else for(d in c)c[e](d)&&h.push(c[d]);p.splice.apply(p,h)}for(i=0,l=p.length;l>i;i++)for(c=p[i];c.n;){if(b){if(c.f){for(m=0,n=c.f.length;n>m;m++)if(c.f[m]==b){c.f.splice(m,1);break}!c.f.length&&delete c.f}for(d in c.n)if(c.n[e](d)&&c.n[d].f){var q=c.n[d].f;for(m=0,n=q.length;n>m;m++)if(q[m]==b){q.splice(m,1);break}!q.length&&delete c.n[d].f}}else{delete c.f;for(d in c.n)c.n[e](d)&&c.n[d].f&&delete c.n[d].f}c=c.n}},k.once=function(a,b){var c=function(){return k.unbind(a,c),b.apply(this,arguments)};return k.on(a,c)},k.version=d,k.toString=function(){return"You are running Eve "+d},"undefined"!=typeof module&&module.exports?module.exports=k:"undefined"!=typeof define?define("eve",[],function(){return k}):a.eve=k}(window||this),function(a,b){"function"==typeof define&&define.amd?define(["eve"],function(c){return b(a,c)}):b(a,a.eve)}(this,function(a,b){function c(a){if(c.is(a,"function"))return u?a():b.on("raphael.DOMload",a);if(c.is(a,V))return c._engine.create[D](c,a.splice(0,3+c.is(a[0],T))).add(a);var d=Array.prototype.slice.call(arguments,0);if(c.is(d[d.length-1],"function")){var e=d.pop();return u?e.call(c._engine.create[D](c,d)):b.on("raphael.DOMload",function(){e.call(c._engine.create[D](c,d))})}return c._engine.create[D](c,arguments)}function d(a){if("function"==typeof a||Object(a)!==a)return a;var b=new a.constructor;for(var c in a)a[z](c)&&(b[c]=d(a[c]));return b}function e(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function f(a,b,c){function d(){var f=Array.prototype.slice.call(arguments,0),g=f.join("␀"),h=d.cache=d.cache||{},i=d.count=d.count||[];return h[z](g)?(e(i,g),c?c(h[g]):h[g]):(i.length>=1e3&&delete h[i.shift()],i.push(g),h[g]=a[D](b,f),c?c(h[g]):h[g])}return d}function g(){return this.hex}function h(a,b){for(var c=[],d=0,e=a.length;e-2*!b>d;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function i(a,b,c,d,e){var f=-3*b+9*c-9*d+3*e,g=a*f+6*b-12*c+6*d;return a*g-3*b+3*c}function j(a,b,c,d,e,f,g,h,j){null==j&&(j=1),j=j>1?1:0>j?0:j;for(var k=j/2,l=12,m=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],n=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],o=0,p=0;l>p;p++){var q=k*m[p]+k,r=i(q,a,c,e,g),s=i(q,b,d,f,h),t=r*r+s*s;o+=n[p]*N.sqrt(t)}return k*o}function k(a,b,c,d,e,f,g,h,i){if(!(0>i||j(a,b,c,d,e,f,g,h)<i)){var k,l=1,m=l/2,n=l-m,o=.01;for(k=j(a,b,c,d,e,f,g,h,n);Q(k-i)>o;)m/=2,n+=(i>k?1:-1)*m,k=j(a,b,c,d,e,f,g,h,n);return n}}function l(a,b,c,d,e,f,g,h){if(!(O(a,c)<P(e,g)||P(a,c)>O(e,g)||O(b,d)<P(f,h)||P(b,d)>O(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(k){var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(!(n<+P(a,c).toFixed(2)||n>+O(a,c).toFixed(2)||n<+P(e,g).toFixed(2)||n>+O(e,g).toFixed(2)||o<+P(b,d).toFixed(2)||o>+O(b,d).toFixed(2)||o<+P(f,h).toFixed(2)||o>+O(f,h).toFixed(2)))return{x:l,y:m}}}}function m(a,b,d){var e=c.bezierBBox(a),f=c.bezierBBox(b);if(!c.isBBoxIntersect(e,f))return d?0:[];for(var g=j.apply(0,a),h=j.apply(0,b),i=O(~~(g/5),1),k=O(~~(h/5),1),m=[],n=[],o={},p=d?0:[],q=0;i+1>q;q++){var r=c.findDotsAtSegment.apply(c,a.concat(q/i));m.push({x:r.x,y:r.y,t:q/i})}for(q=0;k+1>q;q++)r=c.findDotsAtSegment.apply(c,b.concat(q/k)),n.push({x:r.x,y:r.y,t:q/k});for(q=0;i>q;q++)for(var s=0;k>s;s++){var t=m[q],u=m[q+1],v=n[s],w=n[s+1],x=Q(u.x-t.x)<.001?"y":"x",y=Q(w.x-v.x)<.001?"y":"x",z=l(t.x,t.y,u.x,u.y,v.x,v.y,w.x,w.y);if(z){if(o[z.x.toFixed(4)]==z.y.toFixed(4))continue;o[z.x.toFixed(4)]=z.y.toFixed(4);var A=t.t+Q((z[x]-t[x])/(u[x]-t[x]))*(u.t-t.t),B=v.t+Q((z[y]-v[y])/(w[y]-v[y]))*(w.t-v.t);A>=0&&1.001>=A&&B>=0&&1.001>=B&&(d?p++:p.push({x:z.x,y:z.y,t1:P(A,1),t2:P(B,1)}))}}return p}function n(a,b,d){a=c._path2curve(a),b=c._path2curve(b);for(var e,f,g,h,i,j,k,l,n,o,p=d?0:[],q=0,r=a.length;r>q;q++){var s=a[q];if("M"==s[0])e=i=s[1],f=j=s[2];else{"C"==s[0]?(n=[e,f].concat(s.slice(1)),e=n[6],f=n[7]):(n=[e,f,e,f,i,j,i,j],e=i,f=j);for(var t=0,u=b.length;u>t;t++){var v=b[t];if("M"==v[0])g=k=v[1],h=l=v[2];else{"C"==v[0]?(o=[g,h].concat(v.slice(1)),g=o[6],h=o[7]):(o=[g,h,g,h,k,l,k,l],g=k,h=l);var w=m(n,o,d);if(d)p+=w;else{for(var x=0,y=w.length;y>x;x++)w[x].segment1=q,w[x].segment2=t,w[x].bez1=n,w[x].bez2=o;p=p.concat(w)}}}}}return p}function o(a,b,c,d,e,f){null!=a?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function p(){return this.x+H+this.y+H+this.width+" × "+this.height}function q(a,b,c,d,e,f){function g(a){return((l*a+k)*a+j)*a}function h(a,b){var c=i(a,b);return((o*c+n)*c+m)*c}function i(a,b){var c,d,e,f,h,i;for(e=a,i=0;8>i;i++){if(f=g(e)-a,Q(f)<b)return e;if(h=(3*l*e+2*k)*e+j,Q(h)<1e-6)break;e-=f/h}if(c=0,d=1,e=a,c>e)return c;if(e>d)return d;for(;d>c;){if(f=g(e),Q(f-a)<b)return e;a>f?c=e:d=e,e=(d-c)/2+c}return e}var j=3*b,k=3*(d-b)-j,l=1-j-k,m=3*c,n=3*(e-c)-m,o=1-m-n;return h(a,1/(200*f))}function r(a,b){var c=[],d={};if(this.ms=b,this.times=1,a){for(var e in a)a[z](e)&&(d[_(e)]=a[e],c.push(_(e)));c.sort(lb)}this.anim=d,this.top=c[c.length-1],this.percents=c}function s(a,d,e,f,g,h){e=_(e);var i,j,k,l,m,n,p=a.ms,r={},s={},t={};if(f)for(v=0,x=ic.length;x>v;v++){var u=ic[v];if(u.el.id==d.id&&u.anim==a){u.percent!=e?(ic.splice(v,1),k=1):j=u,d.attr(u.totalOrigin);break}}else f=+s;for(var v=0,x=a.percents.length;x>v;v++){if(a.percents[v]==e||a.percents[v]>f*a.top){e=a.percents[v],m=a.percents[v-1]||0,p=p/a.top*(e-m),l=a.percents[v+1],i=a.anim[e];break}f&&d.attr(a.anim[a.percents[v]])}if(i){if(j)j.initstatus=f,j.start=new Date-j.ms*f;else{for(var y in i)if(i[z](y)&&(db[z](y)||d.paper.customAttributes[z](y)))switch(r[y]=d.attr(y),null==r[y]&&(r[y]=cb[y]),s[y]=i[y],db[y]){case T:t[y]=(s[y]-r[y])/p;break;case"colour":r[y]=c.getRGB(r[y]);var A=c.getRGB(s[y]);t[y]={r:(A.r-r[y].r)/p,g:(A.g-r[y].g)/p,b:(A.b-r[y].b)/p};break;case"path":var B=Kb(r[y],s[y]),C=B[1];for(r[y]=B[0],t[y]=[],v=0,x=r[y].length;x>v;v++){t[y][v]=[0];for(var D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(C[v][D]-r[y][v][D])/p}break;case"transform":var G=d._,H=Pb(G[y],s[y]);if(H)for(r[y]=H.from,s[y]=H.to,t[y]=[],t[y].real=!0,v=0,x=r[y].length;x>v;v++)for(t[y][v]=[r[y][v][0]],D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(s[y][v][D]-r[y][v][D])/p;else{var K=d.matrix||new o,L={_:{transform:G.transform},getBBox:function(){return d.getBBox(1)}};r[y]=[K.a,K.b,K.c,K.d,K.e,K.f],Nb(L,s[y]),s[y]=L._.transform,t[y]=[(L.matrix.a-K.a)/p,(L.matrix.b-K.b)/p,(L.matrix.c-K.c)/p,(L.matrix.d-K.d)/p,(L.matrix.e-K.e)/p,(L.matrix.f-K.f)/p]}break;case"csv":var M=I(i[y])[J](w),N=I(r[y])[J](w);if("clip-rect"==y)for(r[y]=N,t[y]=[],v=N.length;v--;)t[y][v]=(M[v]-r[y][v])/p;s[y]=M;break;default:for(M=[][E](i[y]),N=[][E](r[y]),t[y]=[],v=d.paper.customAttributes[y].length;v--;)t[y][v]=((M[v]||0)-(N[v]||0))/p}var O=i.easing,P=c.easing_formulas[O];if(!P)if(P=I(O).match(Z),P&&5==P.length){var Q=P;P=function(a){return q(a,+Q[1],+Q[2],+Q[3],+Q[4],p)}}else P=nb;if(n=i.start||a.start||+new Date,u={anim:a,percent:e,timestamp:n,start:n+(a.del||0),status:0,initstatus:f||0,stop:!1,ms:p,easing:P,from:r,diff:t,to:s,el:d,callback:i.callback,prev:m,next:l,repeat:h||a.times,origin:d.attr(),totalOrigin:g},ic.push(u),f&&!j&&!k&&(u.stop=!0,u.start=new Date-p*f,1==ic.length))return kc();k&&(u.start=new Date-u.ms*f),1==ic.length&&jc(kc)}b("raphael.anim.start."+d.id,d,a)}}function t(a){for(var b=0;b<ic.length;b++)ic[b].el.paper==a&&ic.splice(b--,1)}c.version="2.1.2",c.eve=b;var u,v,w=/[, ]+/,x={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},y=/\{(\d+)\}/g,z="hasOwnProperty",A={doc:document,win:a},B={was:Object.prototype[z].call(A.win,"Raphael"),is:A.win.Raphael},C=function(){this.ca=this.customAttributes={}},D="apply",E="concat",F="ontouchstart"in A.win||A.win.DocumentTouch&&A.doc instanceof DocumentTouch,G="",H=" ",I=String,J="split",K="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel"[J](H),L={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},M=I.prototype.toLowerCase,N=Math,O=N.max,P=N.min,Q=N.abs,R=N.pow,S=N.PI,T="number",U="string",V="array",W=Object.prototype.toString,X=(c._ISURL=/^url\(['"]?([^\)]+?)['"]?\)$/i,/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i),Y={NaN:1,Infinity:1,"-Infinity":1},Z=/^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,$=N.round,_=parseFloat,ab=parseInt,bb=I.prototype.toUpperCase,cb=c._availableAttrs={"arrow-end":"none","arrow-start":"none",blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/","letter-spacing":0,opacity:1,path:"M0,0",r:0,rx:0,ry:0,src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",transform:"",width:0,x:0,y:0},db=c._availableAnimAttrs={blur:T,"clip-rect":"csv",cx:T,cy:T,fill:"colour","fill-opacity":T,"font-size":T,height:T,opacity:T,path:"path",r:T,rx:T,ry:T,stroke:"colour","stroke-opacity":T,"stroke-width":T,transform:"transform",width:T,x:T,y:T},eb=/[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/,fb={hs:1,rg:1},gb=/,?([achlmqrstvxz]),?/gi,hb=/([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,ib=/([rstm])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,jb=/(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/gi,kb=(c._radial_gradient=/^r(?:\(([^,]+?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*([^\)]+?)\))?/,{}),lb=function(a,b){return _(a)-_(b)},mb=function(){},nb=function(a){return a},ob=c._rectPath=function(a,b,c,d,e){return e?[["M",a+e,b],["l",c-2*e,0],["a",e,e,0,0,1,e,e],["l",0,d-2*e],["a",e,e,0,0,1,-e,e],["l",2*e-c,0],["a",e,e,0,0,1,-e,-e],["l",0,2*e-d],["a",e,e,0,0,1,e,-e],["z"]]:[["M",a,b],["l",c,0],["l",0,d],["l",-c,0],["z"]]},pb=function(a,b,c,d){return null==d&&(d=c),[["M",a,b],["m",0,-d],["a",c,d,0,1,1,0,2*d],["a",c,d,0,1,1,0,-2*d],["z"]]},qb=c._getPath={path:function(a){return a.attr("path")},circle:function(a){var b=a.attrs;return pb(b.cx,b.cy,b.r)},ellipse:function(a){var b=a.attrs;return pb(b.cx,b.cy,b.rx,b.ry)},rect:function(a){var b=a.attrs;return ob(b.x,b.y,b.width,b.height,b.r)},image:function(a){var b=a.attrs;return ob(b.x,b.y,b.width,b.height)},text:function(a){var b=a._getBBox();return ob(b.x,b.y,b.width,b.height)},set:function(a){var b=a._getBBox();return ob(b.x,b.y,b.width,b.height)}},rb=c.mapPath=function(a,b){if(!b)return a;var c,d,e,f,g,h,i;for(a=Kb(a),e=0,g=a.length;g>e;e++)for(i=a[e],f=1,h=i.length;h>f;f+=2)c=b.x(i[f],i[f+1]),d=b.y(i[f],i[f+1]),i[f]=c,i[f+1]=d;return a};if(c._g=A,c.type=A.win.SVGAngle||A.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML","VML"==c.type){var sb,tb=A.doc.createElement("div");if(tb.innerHTML='<v:shape adj="1"/>',sb=tb.firstChild,sb.style.behavior="url(#default#VML)",!sb||"object"!=typeof sb.adj)return c.type=G;tb=null}c.svg=!(c.vml="VML"==c.type),c._Paper=C,c.fn=v=C.prototype=c.prototype,c._id=0,c._oid=0,c.is=function(a,b){return b=M.call(b),"finite"==b?!Y[z](+a):"array"==b?a instanceof Array:"null"==b&&null===a||b==typeof a&&null!==a||"object"==b&&a===Object(a)||"array"==b&&Array.isArray&&Array.isArray(a)||W.call(a).slice(8,-1).toLowerCase()==b},c.angle=function(a,b,d,e,f,g){if(null==f){var h=a-d,i=b-e;return h||i?(180+180*N.atan2(-i,-h)/S+360)%360:0}return c.angle(a,b,f,g)-c.angle(d,e,f,g)},c.rad=function(a){return a%360*S/180},c.deg=function(a){return 180*a/S%360},c.snapTo=function(a,b,d){if(d=c.is(d,"finite")?d:10,c.is(a,V)){for(var e=a.length;e--;)if(Q(a[e]-b)<=d)return a[e]}else{a=+a;var f=b%a;if(d>f)return b-f;if(f>a-d)return b-f+a}return b};c.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=16*N.random()|0,c="x"==a?b:3&b|8;return c.toString(16)});c.setWindow=function(a){b("raphael.setWindow",c,A.win,a),A.win=a,A.doc=A.win.document,c._engine.initWin&&c._engine.initWin(A.win)};var ub=function(a){if(c.vml){var b,d=/^\s+|\s+$/g;try{var e=new ActiveXObject("htmlfile");e.write("<body>"),e.close(),b=e.body}catch(g){b=createPopup().document.body}var h=b.createTextRange();ub=f(function(a){try{b.style.color=I(a).replace(d,G);var c=h.queryCommandValue("ForeColor");return c=(255&c)<<16|65280&c|(16711680&c)>>>16,"#"+("000000"+c.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=A.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",A.doc.body.appendChild(i),ub=f(function(a){return i.style.color=a,A.doc.defaultView.getComputedStyle(i,G).getPropertyValue("color")})}return ub(a)},vb=function(){return"hsb("+[this.h,this.s,this.b]+")"},wb=function(){return"hsl("+[this.h,this.s,this.l]+")"},xb=function(){return this.hex},yb=function(a,b,d){if(null==b&&c.is(a,"object")&&"r"in a&&"g"in a&&"b"in a&&(d=a.b,b=a.g,a=a.r),null==b&&c.is(a,U)){var e=c.getRGB(a);a=e.r,b=e.g,d=e.b}return(a>1||b>1||d>1)&&(a/=255,b/=255,d/=255),[a,b,d]},zb=function(a,b,d,e){a*=255,b*=255,d*=255;var f={r:a,g:b,b:d,hex:c.rgb(a,b,d),toString:xb};return c.is(e,"finite")&&(f.opacity=e),f};c.color=function(a){var b;return c.is(a,"object")&&"h"in a&&"s"in a&&"b"in a?(b=c.hsb2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):c.is(a,"object")&&"h"in a&&"s"in a&&"l"in a?(b=c.hsl2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):(c.is(a,"string")&&(a=c.getRGB(a)),c.is(a,"object")&&"r"in a&&"g"in a&&"b"in a?(b=c.rgb2hsl(a),a.h=b.h,a.s=b.s,a.l=b.l,b=c.rgb2hsb(a),a.v=b.b):(a={hex:"none"},a.r=a.g=a.b=a.h=a.s=a.v=a.l=-1)),a.toString=xb,a},c.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;return a=a%360/60,i=c*b,h=i*(1-Q(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h),(a>1||b>1||c>1)&&(a/=360,b/=100,c/=100),a*=360;var e,f,g,h,i;return a=a%360/60,i=2*b*(.5>c?c:1-c),h=i*(1-Q(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.rgb2hsb=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;return f=O(a,b,c),g=f-P(a,b,c),d=0==g?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=0==g?0:g/f,{h:d,s:e,b:f,toString:vb}},c.rgb2hsl=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;return g=O(a,b,c),h=P(a,b,c),i=g-h,d=0==i?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=0==i?0:.5>f?i/(2*f):i/(2-2*f),{h:d,s:e,l:f,toString:wb}},c._path2string=function(){return this.join(",").replace(gb,"$1")};c._preload=function(a,b){var c=A.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,A.doc.body.removeChild(this)},c.onerror=function(){A.doc.body.removeChild(this)},A.doc.body.appendChild(c),c.src=a};c.getRGB=f(function(a){if(!a||(a=I(a)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:g};if("none"==a)return{r:-1,g:-1,b:-1,hex:"none",toString:g};!(fb[z](a.toLowerCase().substring(0,2))||"#"==a.charAt())&&(a=ub(a));var b,d,e,f,h,i,j=a.match(X);return j?(j[2]&&(e=ab(j[2].substring(5),16),d=ab(j[2].substring(3,5),16),b=ab(j[2].substring(1,3),16)),j[3]&&(e=ab((h=j[3].charAt(3))+h,16),d=ab((h=j[3].charAt(2))+h,16),b=ab((h=j[3].charAt(1))+h,16)),j[4]&&(i=j[4][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),"rgba"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100)),j[5]?(i=j[5][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsba"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100),c.hsb2rgb(b,d,e,f)):j[6]?(i=j[6][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsla"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100),c.hsl2rgb(b,d,e,f)):(j={r:b,g:d,b:e,toString:g},j.hex="#"+(16777216|e|d<<8|b<<16).toString(16).slice(1),c.is(f,"finite")&&(j.opacity=f),j)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:g}},c),c.hsb=f(function(a,b,d){return c.hsb2rgb(a,b,d).hex}),c.hsl=f(function(a,b,d){return c.hsl2rgb(a,b,d).hex}),c.rgb=f(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),c.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);return b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b})),c.hex},c.getColor.reset=function(){delete this.start},c.parsePathString=function(a){if(!a)return null;var b=Ab(a);if(b.arr)return Cb(b.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];return c.is(a,V)&&c.is(a[0],V)&&(e=Cb(a)),e.length||I(a).replace(hb,function(a,b,c){var f=[],g=b.toLowerCase();if(c.replace(jb,function(a,b){b&&f.push(+b)}),"m"==g&&f.length>2&&(e.push([b][E](f.splice(0,2))),g="l",b="m"==b?"l":"L"),"r"==g)e.push([b][E](f));else for(;f.length>=d[g]&&(e.push([b][E](f.splice(0,d[g]))),d[g]););}),e.toString=c._path2string,b.arr=Cb(e),e},c.parseTransformString=f(function(a){if(!a)return null;var b=[];return c.is(a,V)&&c.is(a[0],V)&&(b=Cb(a)),b.length||I(a).replace(ib,function(a,c,d){{var e=[];M.call(c)}d.replace(jb,function(a,b){b&&e.push(+b)}),b.push([c][E](e))}),b.toString=c._path2string,b});var Ab=function(a){var b=Ab.ps=Ab.ps||{};return b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[z](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])}),b[a]};c.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=R(j,3),l=R(j,2),m=i*i,n=m*i,o=k*a+3*l*i*c+3*j*i*i*e+n*g,p=k*b+3*l*i*d+3*j*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,w=j*e+i*g,x=j*f+i*h,y=90-180*N.atan2(q-s,r-t)/S;return(q>s||t>r)&&(y+=180),{x:o,y:p,m:{x:q,y:r},n:{x:s,y:t},start:{x:u,y:v},end:{x:w,y:x},alpha:y}},c.bezierBBox=function(a,b,d,e,f,g,h,i){c.is(a,"array")||(a=[a,b,d,e,f,g,h,i]);var j=Jb.apply(null,a);return{x:j.min.x,y:j.min.y,x2:j.max.x,y2:j.max.y,width:j.max.x-j.min.x,height:j.max.y-j.min.y}},c.isPointInsideBBox=function(a,b,c){return b>=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},c.isBBoxIntersect=function(a,b){var d=c.isPointInsideBBox;return d(b,a.x,a.y)||d(b,a.x2,a.y)||d(b,a.x,a.y2)||d(b,a.x2,a.y2)||d(a,b.x,b.y)||d(a,b.x2,b.y)||d(a,b.x,b.y2)||d(a,b.x2,b.y2)||(a.x<b.x2&&a.x>b.x||b.x<a.x2&&b.x>a.x)&&(a.y<b.y2&&a.y>b.y||b.y<a.y2&&b.y>a.y)},c.pathIntersection=function(a,b){return n(a,b)},c.pathIntersectionNumber=function(a,b){return n(a,b,1)},c.isPointInsidePath=function(a,b,d){var e=c.pathBBox(a);return c.isPointInsideBBox(e,b,d)&&n(a,[["M",b,d],["H",e.x2+10]],1)%2==1},c._removedFactory=function(a){return function(){b("raphael.log",null,"Raphaël: you are calling to method “"+a+"” of removed object",a)}};var Bb=c.pathBBox=function(a){var b=Ab(a);if(b.bbox)return d(b.bbox);if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=Kb(a);for(var c,e=0,f=0,g=[],h=[],i=0,j=a.length;j>i;i++)if(c=a[i],"M"==c[0])e=c[1],f=c[2],g.push(e),h.push(f);else{var k=Jb(e,f,c[1],c[2],c[3],c[4],c[5],c[6]);g=g[E](k.min.x,k.max.x),h=h[E](k.min.y,k.max.y),e=c[5],f=c[6]}var l=P[D](0,g),m=P[D](0,h),n=O[D](0,g),o=O[D](0,h),p=n-l,q=o-m,r={x:l,y:m,x2:n,y2:o,width:p,height:q,cx:l+p/2,cy:m+q/2};return b.bbox=d(r),r},Cb=function(a){var b=d(a);return b.toString=c._path2string,b},Db=c._pathToRelative=function(a){var b=Ab(a);if(b.rel)return Cb(b.rel);c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a));var d=[],e=0,f=0,g=0,h=0,i=0;"M"==a[0][0]&&(e=a[0][1],f=a[0][2],g=e,h=f,i++,d.push(["M",e,f]));for(var j=i,k=a.length;k>j;j++){var l=d[j]=[],m=a[j];if(m[0]!=M.call(m[0]))switch(l[0]=M.call(m[0]),l[0]){case"a":l[1]=m[1],l[2]=m[2],l[3]=m[3],l[4]=m[4],l[5]=m[5],l[6]=+(m[6]-e).toFixed(3),l[7]=+(m[7]-f).toFixed(3);break;case"v":l[1]=+(m[1]-f).toFixed(3);break;case"m":g=m[1],h=m[2];default:for(var n=1,o=m.length;o>n;n++)l[n]=+(m[n]-(n%2?e:f)).toFixed(3)}else{l=d[j]=[],"m"==m[0]&&(g=m[1]+e,h=m[2]+f);for(var p=0,q=m.length;q>p;p++)d[j][p]=m[p]}var r=d[j].length;switch(d[j][0]){case"z":e=g,f=h;break;case"h":e+=+d[j][r-1];break;case"v":f+=+d[j][r-1];break;default:e+=+d[j][r-2],f+=+d[j][r-1]}}return d.toString=c._path2string,b.rel=Cb(d),d},Eb=c._pathToAbsolute=function(a){var b=Ab(a);if(b.abs)return Cb(b.abs);if(c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a)),!a||!a.length)return[["M",0,0]];var d=[],e=0,f=0,g=0,i=0,j=0;"M"==a[0][0]&&(e=+a[0][1],f=+a[0][2],g=e,i=f,j++,d[0]=["M",e,f]);for(var k,l,m=3==a.length&&"M"==a[0][0]&&"R"==a[1][0].toUpperCase()&&"Z"==a[2][0].toUpperCase(),n=j,o=a.length;o>n;n++){if(d.push(k=[]),l=a[n],l[0]!=bb.call(l[0]))switch(k[0]=bb.call(l[0]),k[0]){case"A":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+e),k[7]=+(l[7]+f);break;case"V":k[1]=+l[1]+f;break;case"H":k[1]=+l[1]+e;break;case"R":for(var p=[e,f][E](l.slice(1)),q=2,r=p.length;r>q;q++)p[q]=+p[q]+e,p[++q]=+p[q]+f;d.pop(),d=d[E](h(p,m));break;case"M":g=+l[1]+e,i=+l[2]+f;default:for(q=1,r=l.length;r>q;q++)k[q]=+l[q]+(q%2?e:f)}else if("R"==l[0])p=[e,f][E](l.slice(1)),d.pop(),d=d[E](h(p,m)),k=["R"][E](l.slice(-2));else for(var s=0,t=l.length;t>s;s++)k[s]=l[s];switch(k[0]){case"Z":e=g,f=i;break;case"H":e=k[1];break;case"V":f=k[1];break;case"M":g=k[k.length-2],i=k[k.length-1];default:e=k[k.length-2],f=k[k.length-1]}}return d.toString=c._path2string,b.abs=Cb(d),d},Fb=function(a,b,c,d){return[a,b,c,d,c,d]},Gb=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},Hb=function(a,b,c,d,e,g,h,i,j,k){var l,m=120*S/180,n=S/180*(+e||0),o=[],p=f(function(a,b,c){var d=a*N.cos(c)-b*N.sin(c),e=a*N.sin(c)+b*N.cos(c);return{x:d,y:e}});if(k)y=k[0],z=k[1],w=k[2],x=k[3];else{l=p(a,b,-n),a=l.x,b=l.y,l=p(i,j,-n),i=l.x,j=l.y;var q=(N.cos(S/180*e),N.sin(S/180*e),(a-i)/2),r=(b-j)/2,s=q*q/(c*c)+r*r/(d*d);s>1&&(s=N.sqrt(s),c=s*c,d=s*d);var t=c*c,u=d*d,v=(g==h?-1:1)*N.sqrt(Q((t*u-t*r*r-u*q*q)/(t*r*r+u*q*q))),w=v*c*r/d+(a+i)/2,x=v*-d*q/c+(b+j)/2,y=N.asin(((b-x)/d).toFixed(9)),z=N.asin(((j-x)/d).toFixed(9));y=w>a?S-y:y,z=w>i?S-z:z,0>y&&(y=2*S+y),0>z&&(z=2*S+z),h&&y>z&&(y-=2*S),!h&&z>y&&(z-=2*S)}var A=z-y;if(Q(A)>m){var B=z,C=i,D=j;z=y+m*(h&&z>y?1:-1),i=w+c*N.cos(z),j=x+d*N.sin(z),o=Hb(i,j,c,d,e,0,h,C,D,[z,B,w,x])}A=z-y;var F=N.cos(y),G=N.sin(y),H=N.cos(z),I=N.sin(z),K=N.tan(A/4),L=4/3*c*K,M=4/3*d*K,O=[a,b],P=[a+L*G,b-M*F],R=[i+L*I,j-M*H],T=[i,j];if(P[0]=2*O[0]-P[0],P[1]=2*O[1]-P[1],k)return[P,R,T][E](o);o=[P,R,T][E](o).join()[J](",");for(var U=[],V=0,W=o.length;W>V;V++)U[V]=V%2?p(o[V-1],o[V],n).y:p(o[V],o[V+1],n).x;return U},Ib=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:R(j,3)*a+3*R(j,2)*i*c+3*j*i*i*e+R(i,3)*g,y:R(j,3)*b+3*R(j,2)*i*d+3*j*i*i*f+R(i,3)*h}},Jb=f(function(a,b,c,d,e,f,g,h){var i,j=e-2*c+a-(g-2*e+c),k=2*(c-a)-2*(e-c),l=a-c,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,o=[b,h],p=[a,g];return Q(m)>"1e12"&&(m=.5),Q(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),j=f-2*d+b-(h-2*f+d),k=2*(d-b)-2*(f-d),l=b-d,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,Q(m)>"1e12"&&(m=.5),Q(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),{min:{x:P[D](0,p),y:P[D](0,o)},max:{x:O[D](0,p),y:O[D](0,o)}}}),Kb=c._path2curve=f(function(a,b){var c=!b&&Ab(a);if(!b&&c.curve)return Cb(c.curve);for(var d=Eb(a),e=b&&Eb(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=(function(a,b,c){var d,e,f={T:1,Q:1};if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];switch(!(a[0]in f)&&(b.qx=b.qy=null),a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][E](Hb[D](0,[b.x,b.y][E](a.slice(1))));break;case"S":"C"==c||"S"==c?(d=2*b.x-b.bx,e=2*b.y-b.by):(d=b.x,e=b.y),a=["C",d,e][E](a.slice(1));break;case"T":"Q"==c||"T"==c?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y),a=["C"][E](Gb(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][E](Gb(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][E](Fb(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][E](Fb(b.x,b.y,a[1],b.y));break;case"V":a=["C"][E](Fb(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][E](Fb(b.x,b.y,b.X,b.Y))}return a}),i=function(a,b){if(a[b].length>7){a[b].shift();for(var c=a[b];c.length;)a.splice(b++,0,["C"][E](c.splice(0,6)));a.splice(b,1),l=O(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&"M"==a[g][0]&&"M"!=b[g][0]&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],l=O(d.length,e&&e.length||0))},k=0,l=O(d.length,e&&e.length||0);l>k;k++){d[k]=h(d[k],f),i(d,k),e&&(e[k]=h(e[k],g)),e&&i(e,k),j(d,e,f,g,k),j(e,d,g,f,k);var m=d[k],n=e&&e[k],o=m.length,p=e&&n.length;f.x=m[o-2],f.y=m[o-1],f.bx=_(m[o-4])||f.x,f.by=_(m[o-3])||f.y,g.bx=e&&(_(n[p-4])||g.x),g.by=e&&(_(n[p-3])||g.y),g.x=e&&n[p-2],g.y=e&&n[p-1]}return e||(c.curve=Cb(d)),e?[d,e]:d},null,Cb),Lb=(c._parseDots=f(function(a){for(var b=[],d=0,e=a.length;e>d;d++){var f={},g=a[d].match(/^([^:]*):?([\d\.]*)/);if(f.color=c.getRGB(g[1]),f.color.error)return null;f.color=f.color.hex,g[2]&&(f.offset=g[2]+"%"),b.push(f)}for(d=1,e=b.length-1;e>d;d++)if(!b[d].offset){for(var h=_(b[d-1].offset||0),i=0,j=d+1;e>j;j++)if(b[j].offset){i=b[j].offset;break}i||(i=100,j=e),i=_(i);for(var k=(i-h)/(j-d+1);j>d;d++)h+=k,b[d].offset=h+"%"}return b}),c._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)}),Mb=(c._tofront=function(a,b){b.top!==a&&(Lb(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},c._toback=function(a,b){b.bottom!==a&&(Lb(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},c._insertafter=function(a,b,c){Lb(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},c._insertbefore=function(a,b,c){Lb(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},c.toMatrix=function(a,b){var c=Bb(a),d={_:{transform:G},getBBox:function(){return c}};return Nb(d,b),d.matrix}),Nb=(c.transformPath=function(a,b){return rb(a,Mb(a,b))},c._extractTransform=function(a,b){if(null==b)return a._.transform;b=I(b).replace(/\.{3}|\u2026/g,a._.transform||G);var d=c.parseTransformString(b),e=0,f=0,g=0,h=1,i=1,j=a._,k=new o;if(j.transform=d||[],d)for(var l=0,m=d.length;m>l;l++){var n,p,q,r,s,t=d[l],u=t.length,v=I(t[0]).toLowerCase(),w=t[0]!=v,x=w?k.invert():0;"t"==v&&3==u?w?(n=x.x(0,0),p=x.y(0,0),q=x.x(t[1],t[2]),r=x.y(t[1],t[2]),k.translate(q-n,r-p)):k.translate(t[1],t[2]):"r"==v?2==u?(s=s||a.getBBox(1),k.rotate(t[1],s.x+s.width/2,s.y+s.height/2),e+=t[1]):4==u&&(w?(q=x.x(t[2],t[3]),r=x.y(t[2],t[3]),k.rotate(t[1],q,r)):k.rotate(t[1],t[2],t[3]),e+=t[1]):"s"==v?2==u||3==u?(s=s||a.getBBox(1),k.scale(t[1],t[u-1],s.x+s.width/2,s.y+s.height/2),h*=t[1],i*=t[u-1]):5==u&&(w?(q=x.x(t[3],t[4]),r=x.y(t[3],t[4]),k.scale(t[1],t[2],q,r)):k.scale(t[1],t[2],t[3],t[4]),h*=t[1],i*=t[2]):"m"==v&&7==u&&k.add(t[1],t[2],t[3],t[4],t[5],t[6]),j.dirtyT=1,a.matrix=k}a.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,1==h&&1==i&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1}),Ob=function(a){var b=a[0];switch(b.toLowerCase()){case"t":return[b,0,0];case"m":return[b,1,0,0,1,0,0];case"r":return 4==a.length?[b,0,a[2],a[3]]:[b,0];case"s":return 5==a.length?[b,1,1,a[3],a[4]]:3==a.length?[b,1,1]:[b,1]}},Pb=c._equaliseTransform=function(a,b){b=I(b).replace(/\.{3}|\u2026/g,a),a=c.parseTransformString(a)||[],b=c.parseTransformString(b)||[];for(var d,e,f,g,h=O(a.length,b.length),i=[],j=[],k=0;h>k;k++){if(f=a[k]||Ob(b[k]),g=b[k]||Ob(f),f[0]!=g[0]||"r"==f[0].toLowerCase()&&(f[2]!=g[2]||f[3]!=g[3])||"s"==f[0].toLowerCase()&&(f[3]!=g[3]||f[4]!=g[4]))return;for(i[k]=[],j[k]=[],d=0,e=O(f.length,g.length);e>d;d++)d in f&&(i[k][d]=f[d]),d in g&&(j[k][d]=g[d])
|
10 |
+
}return{from:i,to:j}};c._getContainer=function(a,b,d,e){var f;return f=null!=e||c.is(a,"object")?a:A.doc.getElementById(a),null!=f?f.tagName?null==b?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:b,height:d}:{container:1,x:a,y:b,width:d,height:e}:void 0},c.pathToRelative=Db,c._engine={},c.path2curve=Kb,c.matrix=function(a,b,c,d,e,f){return new o(a,b,c,d,e,f)},function(a){function b(a){return a[0]*a[0]+a[1]*a[1]}function d(a){var c=N.sqrt(b(a));a[0]&&(a[0]/=c),a[1]&&(a[1]/=c)}a.add=function(a,b,c,d,e,f){var g,h,i,j,k=[[],[],[]],l=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],m=[[a,c,e],[b,d,f],[0,0,1]];for(a&&a instanceof o&&(m=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]),g=0;3>g;g++)for(h=0;3>h;h++){for(j=0,i=0;3>i;i++)j+=l[g][i]*m[i][h];k[g][h]=j}this.a=k[0][0],this.b=k[1][0],this.c=k[0][1],this.d=k[1][1],this.e=k[0][2],this.f=k[1][2]},a.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new o(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},a.clone=function(){return new o(this.a,this.b,this.c,this.d,this.e,this.f)},a.translate=function(a,b){this.add(1,0,0,1,a,b)},a.scale=function(a,b,c,d){null==b&&(b=a),(c||d)&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),(c||d)&&this.add(1,0,0,1,-c,-d)},a.rotate=function(a,b,d){a=c.rad(a),b=b||0,d=d||0;var e=+N.cos(a).toFixed(9),f=+N.sin(a).toFixed(9);this.add(e,f,-f,e,b,d),this.add(1,0,0,1,-b,-d)},a.x=function(a,b){return a*this.a+b*this.c+this.e},a.y=function(a,b){return a*this.b+b*this.d+this.f},a.get=function(a){return+this[I.fromCharCode(97+a)].toFixed(4)},a.toString=function(){return c.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},a.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},a.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},a.split=function(){var a={};a.dx=this.e,a.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];a.scalex=N.sqrt(b(e[0])),d(e[0]),a.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*a.shear,e[1][1]-e[0][1]*a.shear],a.scaley=N.sqrt(b(e[1])),d(e[1]),a.shear/=a.scaley;var f=-e[0][1],g=e[1][1];return 0>g?(a.rotate=c.deg(N.acos(g)),0>f&&(a.rotate=360-a.rotate)):a.rotate=c.deg(N.asin(f)),a.isSimple=!(+a.shear.toFixed(9)||a.scalex.toFixed(9)!=a.scaley.toFixed(9)&&a.rotate),a.isSuperSimple=!+a.shear.toFixed(9)&&a.scalex.toFixed(9)==a.scaley.toFixed(9)&&!a.rotate,a.noRotation=!+a.shear.toFixed(9)&&!a.rotate,a},a.toTransformString=function(a){var b=a||this[J]();return b.isSimple?(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?"t"+[b.dx,b.dy]:G)+(1!=b.scalex||1!=b.scaley?"s"+[b.scalex,b.scaley,0,0]:G)+(b.rotate?"r"+[b.rotate,0,0]:G)):"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(o.prototype);var Qb=navigator.userAgent.match(/Version\/(.*?)\s/)||navigator.userAgent.match(/Chrome\/(\d+)/);v.safari="Apple Computer, Inc."==navigator.vendor&&(Qb&&Qb[1]<4||"iP"==navigator.platform.slice(0,2))||"Google Inc."==navigator.vendor&&Qb&&Qb[1]<8?function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});setTimeout(function(){a.remove()})}:mb;for(var Rb=function(){this.returnValue=!1},Sb=function(){return this.originalEvent.preventDefault()},Tb=function(){this.cancelBubble=!0},Ub=function(){return this.originalEvent.stopPropagation()},Vb=function(a){var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,c=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;return{x:a.clientX+c,y:a.clientY+b}},Wb=function(){return A.doc.addEventListener?function(a,b,c,d){var e=function(a){var b=Vb(a);return c.call(d,a,b.x,b.y)};if(a.addEventListener(b,e,!1),F&&L[b]){var f=function(b){for(var e=Vb(b),f=b,g=0,h=b.targetTouches&&b.targetTouches.length;h>g;g++)if(b.targetTouches[g].target==a){b=b.targetTouches[g],b.originalEvent=f,b.preventDefault=Sb,b.stopPropagation=Ub;break}return c.call(d,b,e.x,e.y)};a.addEventListener(L[b],f,!1)}return function(){return a.removeEventListener(b,e,!1),F&&L[b]&&a.removeEventListener(L[b],e,!1),!0}}:A.doc.attachEvent?function(a,b,c,d){var e=function(a){a=a||A.win.event;var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,e=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;return a.preventDefault=a.preventDefault||Rb,a.stopPropagation=a.stopPropagation||Tb,c.call(d,a,f,g)};a.attachEvent("on"+b,e);var f=function(){return a.detachEvent("on"+b,e),!0};return f}:void 0}(),Xb=[],Yb=function(a){for(var c,d=a.clientX,e=a.clientY,f=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,g=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,h=Xb.length;h--;){if(c=Xb[h],F&&a.touches){for(var i,j=a.touches.length;j--;)if(i=a.touches[j],i.identifier==c.el._drag.id){d=i.clientX,e=i.clientY,(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();var k,l=c.el.node,m=l.nextSibling,n=l.parentNode,o=l.style.display;A.win.opera&&n.removeChild(l),l.style.display="none",k=c.el.paper.getElementByPoint(d,e),l.style.display=o,A.win.opera&&(m?n.insertBefore(l,m):n.appendChild(l)),k&&b("raphael.drag.over."+c.el.id,c.el,k),d+=g,e+=f,b("raphael.drag.move."+c.el.id,c.move_scope||c.el,d-c.el._drag.x,e-c.el._drag.y,d,e,a)}},Zb=function(a){c.unmousemove(Yb).unmouseup(Zb);for(var d,e=Xb.length;e--;)d=Xb[e],d.el._drag={},b("raphael.drag.end."+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,a);Xb=[]},$b=c.el={},_b=K.length;_b--;)!function(a){c[a]=$b[a]=function(b,d){return c.is(b,"function")&&(this.events=this.events||[],this.events.push({name:a,f:b,unbind:Wb(this.shape||this.node||A.doc,a,b,d||this)})),this},c["un"+a]=$b["un"+a]=function(b){for(var d=this.events||[],e=d.length;e--;)d[e].name!=a||!c.is(b,"undefined")&&d[e].f!=b||(d[e].unbind(),d.splice(e,1),!d.length&&delete this.events);return this}}(K[_b]);$b.data=function(a,d){var e=kb[this.id]=kb[this.id]||{};if(0==arguments.length)return e;if(1==arguments.length){if(c.is(a,"object")){for(var f in a)a[z](f)&&this.data(f,a[f]);return this}return b("raphael.data.get."+this.id,this,e[a],a),e[a]}return e[a]=d,b("raphael.data.set."+this.id,this,d,a),this},$b.removeData=function(a){return null==a?kb[this.id]={}:kb[this.id]&&delete kb[this.id][a],this},$b.getData=function(){return d(kb[this.id]||{})},$b.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},$b.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var ac=[];$b.drag=function(a,d,e,f,g,h){function i(i){(i.originalEvent||i).preventDefault();var j=i.clientX,k=i.clientY,l=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,m=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;if(this._drag.id=i.identifier,F&&i.touches)for(var n,o=i.touches.length;o--;)if(n=i.touches[o],this._drag.id=n.identifier,n.identifier==this._drag.id){j=n.clientX,k=n.clientY;break}this._drag.x=j+m,this._drag.y=k+l,!Xb.length&&c.mousemove(Yb).mouseup(Zb),Xb.push({el:this,move_scope:f,start_scope:g,end_scope:h}),d&&b.on("raphael.drag.start."+this.id,d),a&&b.on("raphael.drag.move."+this.id,a),e&&b.on("raphael.drag.end."+this.id,e),b("raphael.drag.start."+this.id,g||f||this,i.clientX+m,i.clientY+l,i)}return this._drag={},ac.push({el:this,start:i}),this.mousedown(i),this},$b.onDragOver=function(a){a?b.on("raphael.drag.over."+this.id,a):b.unbind("raphael.drag.over."+this.id)},$b.undrag=function(){for(var a=ac.length;a--;)ac[a].el==this&&(this.unmousedown(ac[a].start),ac.splice(a,1),b.unbind("raphael.drag.*."+this.id));!ac.length&&c.unmousemove(Yb).unmouseup(Zb),Xb=[]},v.circle=function(a,b,d){var e=c._engine.circle(this,a||0,b||0,d||0);return this.__set__&&this.__set__.push(e),e},v.rect=function(a,b,d,e,f){var g=c._engine.rect(this,a||0,b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.ellipse=function(a,b,d,e){var f=c._engine.ellipse(this,a||0,b||0,d||0,e||0);return this.__set__&&this.__set__.push(f),f},v.path=function(a){a&&!c.is(a,U)&&!c.is(a[0],V)&&(a+=G);var b=c._engine.path(c.format[D](c,arguments),this);return this.__set__&&this.__set__.push(b),b},v.image=function(a,b,d,e,f){var g=c._engine.image(this,a||"about:blank",b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.text=function(a,b,d){var e=c._engine.text(this,a||0,b||0,I(d));return this.__set__&&this.__set__.push(e),e},v.set=function(a){!c.is(a,"array")&&(a=Array.prototype.splice.call(arguments,0,arguments.length));var b=new mc(a);return this.__set__&&this.__set__.push(b),b.paper=this,b.type="set",b},v.setStart=function(a){this.__set__=a||this.set()},v.setFinish=function(){var a=this.__set__;return delete this.__set__,a},v.setSize=function(a,b){return c._engine.setSize.call(this,a,b)},v.setViewBox=function(a,b,d,e,f){return c._engine.setViewBox.call(this,a,b,d,e,f)},v.top=v.bottom=null,v.raphael=c;var bc=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,h=b.top+(A.win.pageYOffset||e.scrollTop||d.scrollTop)-f,i=b.left+(A.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:h,x:i}};v.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=A.doc.elementFromPoint(a,b);if(A.win.opera&&"svg"==e.tagName){var f=bc(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var h=d.getIntersectionList(g,null);h.length&&(e=h[h.length-1])}if(!e)return null;for(;e.parentNode&&e!=d.parentNode&&!e.raphael;)e=e.parentNode;return e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null},v.getElementsByBBox=function(a){var b=this.set();return this.forEach(function(d){c.isBBoxIntersect(d.getBBox(),a)&&b.push(d)}),b},v.getById=function(a){for(var b=this.bottom;b;){if(b.id==a)return b;b=b.next}return null},v.forEach=function(a,b){for(var c=this.bottom;c;){if(a.call(b,c)===!1)return this;c=c.next}return this},v.getElementsByPoint=function(a,b){var c=this.set();return this.forEach(function(d){d.isPointInside(a,b)&&c.push(d)}),c},$b.isPointInside=function(a,b){var d=this.realPath=qb[this.type](this);return this.attr("transform")&&this.attr("transform").length&&(d=c.transformPath(d,this.attr("transform"))),c.isPointInsidePath(d,a,b)},$b.getBBox=function(a){if(this.removed)return{};var b=this._;return a?((b.dirty||!b.bboxwt)&&(this.realPath=qb[this.type](this),b.bboxwt=Bb(this.realPath),b.bboxwt.toString=p,b.dirty=0),b.bboxwt):((b.dirty||b.dirtyT||!b.bbox)&&((b.dirty||!this.realPath)&&(b.bboxwt=0,this.realPath=qb[this.type](this)),b.bbox=Bb(rb(this.realPath,this.matrix)),b.bbox.toString=p,b.dirty=b.dirtyT=0),b.bbox)},$b.clone=function(){if(this.removed)return null;var a=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(a),a},$b.glow=function(a){if("text"==this.type)return null;a=a||{};var b={width:(a.width||10)+(+this.attr("stroke-width")||1),fill:a.fill||!1,opacity:a.opacity||.5,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||"#000"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||qb[this.type](this);f=this.matrix?rb(f,this.matrix):f;for(var g=1;c+1>g;g++)e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var cc=function(a,b,d,e,f,g,h,i,l){return null==l?j(a,b,d,e,f,g,h,i):c.findDotsAtSegment(a,b,d,e,f,g,h,i,k(a,b,d,e,f,g,h,i,l))},dc=function(a,b){return function(d,e,f){d=Kb(d);for(var g,h,i,j,k,l="",m={},n=0,o=0,p=d.length;p>o;o++){if(i=d[o],"M"==i[0])g=+i[1],h=+i[2];else{if(j=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6]),n+j>e){if(b&&!m.start){if(k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),l+=["C"+k.start.x,k.start.y,k.m.x,k.m.y,k.x,k.y],f)return l;m.start=l,l=["M"+k.x,k.y+"C"+k.n.x,k.n.y,k.end.x,k.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!a&&!b)return k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),{x:k.x,y:k.y,alpha:k.alpha}}n+=j,g=+i[5],h=+i[6]}l+=i.shift()+i}return m.end=l,k=a?n:b?m:c.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),k.alpha&&(k={x:k.x,y:k.y,alpha:k.alpha}),k}},ec=dc(1),fc=dc(),gc=dc(0,1);c.getTotalLength=ec,c.getPointAtLength=fc,c.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return gc(a,b).end;var d=gc(a,c,1);return b?gc(d,b).end:d},$b.getTotalLength=function(){var a=this.getPath();if(a)return this.node.getTotalLength?this.node.getTotalLength():ec(a)},$b.getPointAtLength=function(a){var b=this.getPath();if(b)return fc(b,a)},$b.getPath=function(){var a,b=c._getPath[this.type];if("text"!=this.type&&"set"!=this.type)return b&&(a=b(this)),a},$b.getSubpath=function(a,b){var d=this.getPath();if(d)return c.getSubpath(d,a,b)};var hc=c.easing_formulas={linear:function(a){return a},"<":function(a){return R(a,1.7)},">":function(a){return R(a,.48)},"<>":function(a){var b=.48-a/1.04,c=N.sqrt(.1734+b*b),d=c-b,e=R(Q(d),1/3)*(0>d?-1:1),f=-c-b,g=R(Q(f),1/3)*(0>f?-1:1),h=e+g+.5;return 3*(1-h)*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){return a==!!a?a:R(2,-10*a)*N.sin(2*(a-.075)*S/.3)+1},bounce:function(a){var b,c=7.5625,d=2.75;return 1/d>a?b=c*a*a:2/d>a?(a-=1.5/d,b=c*a*a+.75):2.5/d>a?(a-=2.25/d,b=c*a*a+.9375):(a-=2.625/d,b=c*a*a+.984375),b}};hc.easeIn=hc["ease-in"]=hc["<"],hc.easeOut=hc["ease-out"]=hc[">"],hc.easeInOut=hc["ease-in-out"]=hc["<>"],hc["back-in"]=hc.backIn,hc["back-out"]=hc.backOut;var ic=[],jc=a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||function(a){setTimeout(a,16)},kc=function(){for(var a=+new Date,d=0;d<ic.length;d++){var e=ic[d];if(!e.el.removed&&!e.paused){var f,g,h=a-e.start,i=e.ms,j=e.easing,k=e.from,l=e.diff,m=e.to,n=(e.t,e.el),o={},p={};if(e.initstatus?(h=(e.initstatus*e.anim.top-e.prev)/(e.percent-e.prev)*i,e.status=e.initstatus,delete e.initstatus,e.stop&&ic.splice(d--,1)):e.status=(e.prev+(e.percent-e.prev)*(h/i))/e.anim.top,!(0>h))if(i>h){var q=j(h/i);for(var r in k)if(k[z](r)){switch(db[r]){case T:f=+k[r]+q*i*l[r];break;case"colour":f="rgb("+[lc($(k[r].r+q*i*l[r].r)),lc($(k[r].g+q*i*l[r].g)),lc($(k[r].b+q*i*l[r].b))].join(",")+")";break;case"path":f=[];for(var t=0,u=k[r].length;u>t;t++){f[t]=[k[r][t][0]];for(var v=1,w=k[r][t].length;w>v;v++)f[t][v]=+k[r][t][v]+q*i*l[r][t][v];f[t]=f[t].join(H)}f=f.join(H);break;case"transform":if(l[r].real)for(f=[],t=0,u=k[r].length;u>t;t++)for(f[t]=[k[r][t][0]],v=1,w=k[r][t].length;w>v;v++)f[t][v]=k[r][t][v]+q*i*l[r][t][v];else{var x=function(a){return+k[r][a]+q*i*l[r][a]};f=[["m",x(0),x(1),x(2),x(3),x(4),x(5)]]}break;case"csv":if("clip-rect"==r)for(f=[],t=4;t--;)f[t]=+k[r][t]+q*i*l[r][t];break;default:var y=[][E](k[r]);for(f=[],t=n.paper.customAttributes[r].length;t--;)f[t]=+y[t]+q*i*l[r][t]}o[r]=f}n.attr(o),function(a,c,d){setTimeout(function(){b("raphael.anim.frame."+a,c,d)})}(n.id,n,e.anim)}else{if(function(a,d,e){setTimeout(function(){b("raphael.anim.frame."+d.id,d,e),b("raphael.anim.finish."+d.id,d,e),c.is(a,"function")&&a.call(d)})}(e.callback,n,e.anim),n.attr(m),ic.splice(d--,1),e.repeat>1&&!e.next){for(g in m)m[z](g)&&(p[g]=e.totalOrigin[g]);e.el.attr(p),s(e.anim,e.el,e.anim.percents[0],null,e.totalOrigin,e.repeat-1)}e.next&&!e.stop&&s(e.anim,e.el,e.next,null,e.totalOrigin,e.repeat)}}}c.svg&&n&&n.paper&&n.paper.safari(),ic.length&&jc(kc)},lc=function(a){return a>255?255:0>a?0:a};$b.animateWith=function(a,b,d,e,f,g){var h=this;if(h.removed)return g&&g.call(h),h;var i=d instanceof r?d:c.animation(d,e,f,g);s(i,h,i.percents[0],null,h.attr());for(var j=0,k=ic.length;k>j;j++)if(ic[j].anim==b&&ic[j].el==a){ic[k-1].start=ic[j].start;break}return h},$b.onAnimation=function(a){return a?b.on("raphael.anim.frame."+this.id,a):b.unbind("raphael.anim.frame."+this.id),this},r.prototype.delay=function(a){var b=new r(this.anim,this.ms);return b.times=this.times,b.del=+a||0,b},r.prototype.repeat=function(a){var b=new r(this.anim,this.ms);return b.del=this.del,b.times=N.floor(O(a,0))||1,b},c.animation=function(a,b,d,e){if(a instanceof r)return a;(c.is(d,"function")||!d)&&(e=e||d||null,d=null),a=Object(a),b=+b||0;var f,g,h={};for(g in a)a[z](g)&&_(g)!=g&&_(g)+"%"!=g&&(f=!0,h[g]=a[g]);return f?(d&&(h.easing=d),e&&(h.callback=e),new r({100:h},b)):new r(a,b)},$b.animate=function(a,b,d,e){var f=this;if(f.removed)return e&&e.call(f),f;var g=a instanceof r?a:c.animation(a,b,d,e);return s(g,f,g.percents[0],null,f.attr()),f},$b.setTime=function(a,b){return a&&null!=b&&this.status(a,P(b,a.ms)/a.ms),this},$b.status=function(a,b){var c,d,e=[],f=0;if(null!=b)return s(a,this,-1,P(b,1)),this;for(c=ic.length;c>f;f++)if(d=ic[f],d.el.id==this.id&&(!a||d.anim==a)){if(a)return d.status;e.push({anim:d.anim,status:d.status})}return a?0:e},$b.pause=function(a){for(var c=0;c<ic.length;c++)ic[c].el.id!=this.id||a&&ic[c].anim!=a||b("raphael.anim.pause."+this.id,this,ic[c].anim)!==!1&&(ic[c].paused=!0);return this},$b.resume=function(a){for(var c=0;c<ic.length;c++)if(ic[c].el.id==this.id&&(!a||ic[c].anim==a)){var d=ic[c];b("raphael.anim.resume."+this.id,this,d.anim)!==!1&&(delete d.paused,this.status(d.anim,d.status))}return this},$b.stop=function(a){for(var c=0;c<ic.length;c++)ic[c].el.id!=this.id||a&&ic[c].anim!=a||b("raphael.anim.stop."+this.id,this,ic[c].anim)!==!1&&ic.splice(c--,1);return this},b.on("raphael.remove",t),b.on("raphael.clear",t),$b.toString=function(){return"Raphaël’s object"};var mc=function(a){if(this.items=[],this.length=0,this.type="set",a)for(var b=0,c=a.length;c>b;b++)!a[b]||a[b].constructor!=$b.constructor&&a[b].constructor!=mc||(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},nc=mc.prototype;nc.push=function(){for(var a,b,c=0,d=arguments.length;d>c;c++)a=arguments[c],!a||a.constructor!=$b.constructor&&a.constructor!=mc||(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},nc.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},nc.forEach=function(a,b){for(var c=0,d=this.items.length;d>c;c++)if(a.call(b,this.items[c],c)===!1)return this;return this};for(var oc in $b)$b[z](oc)&&(nc[oc]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][D](c,b)})}}(oc));return nc.attr=function(a,b){if(a&&c.is(a,V)&&c.is(a[0],"object"))for(var d=0,e=a.length;e>d;d++)this.items[d].attr(a[d]);else for(var f=0,g=this.items.length;g>f;f++)this.items[f].attr(a,b);return this},nc.clear=function(){for(;this.length;)this.pop()},nc.splice=function(a,b){a=0>a?O(this.length+a,0):a,b=O(0,P(this.length-a,b));var c,d=[],e=[],f=[];for(c=2;c<arguments.length;c++)f.push(arguments[c]);for(c=0;b>c;c++)e.push(this[a+c]);for(;c<this.length-a;c++)d.push(this[a+c]);var g=f.length;for(c=0;c<g+d.length;c++)this.items[a+c]=this[a+c]=g>c?f[c]:d[c-g];for(c=this.items.length=this.length-=b-g;this[c];)delete this[c++];return new mc(e)},nc.exclude=function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]==a)return this.splice(b,1),!0},nc.animate=function(a,b,d,e){(c.is(d,"function")||!d)&&(e=d||null);var f,g,h=this.items.length,i=h,j=this;if(!h)return this;e&&(g=function(){!--h&&e.call(j)}),d=c.is(d,U)?d:g;var k=c.animation(a,b,d,g);for(f=this.items[--i].animate(k);i--;)this.items[i]&&!this.items[i].removed&&this.items[i].animateWith(f,k,k),this.items[i]&&!this.items[i].removed||h--;return this},nc.insertAfter=function(a){for(var b=this.items.length;b--;)this.items[b].insertAfter(a);return this},nc.getBBox=function(){for(var a=[],b=[],c=[],d=[],e=this.items.length;e--;)if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)}return a=P[D](0,a),b=P[D](0,b),c=O[D](0,c),d=O[D](0,d),{x:a,y:b,x2:c,y2:d,width:c-a,height:d-b}},nc.clone=function(a){a=this.paper.set();for(var b=0,c=this.items.length;c>b;b++)a.push(this.items[b].clone());return a},nc.toString=function(){return"Raphaël‘s set"},nc.glow=function(a){var b=this.paper.set();return this.forEach(function(c){var d=c.glow(a);null!=d&&d.forEach(function(a){b.push(a)})}),b},nc.isPointInside=function(a,b){var c=!1;return this.forEach(function(d){return d.isPointInside(a,b)?(c=!0,!1):void 0}),c},c.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)a.face[z](d)&&(b.face[d]=a.face[d]);if(this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b],!a.svg){b.face["units-per-em"]=ab(a.face["units-per-em"],10);for(var e in a.glyphs)if(a.glyphs[z](e)){var f=a.glyphs[e];if(b.glyphs[e]={w:f.w,k:{},d:f.d&&"M"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[a]||"M"})+"z"},f.k)for(var g in f.k)f[z](g)&&(b.glyphs[e].k[g]=f.k[g])}}return a},v.getFont=function(a,b,d,e){if(e=e||"normal",d=d||"normal",b=+b||{normal:400,bold:700,lighter:300,bolder:800}[b]||400,c.fonts){var f=c.fonts[a];if(!f){var g=new RegExp("(^|\\s)"+a.replace(/[^\w\d\s+!~.:_-]/g,G)+"(\\s|$)","i");for(var h in c.fonts)if(c.fonts[z](h)&&g.test(h)){f=c.fonts[h];break}}var i;if(f)for(var j=0,k=f.length;k>j&&(i=f[j],i.face["font-weight"]!=b||i.face["font-style"]!=d&&i.face["font-style"]||i.face["font-stretch"]!=e);j++);return i}},v.print=function(a,b,d,e,f,g,h,i){g=g||"middle",h=O(P(h||0,1),-1),i=O(P(i||1,3),1);var j,k=I(d)[J](G),l=0,m=0,n=G;if(c.is(e,"string")&&(e=this.getFont(e)),e){j=(f||16)/e.face["units-per-em"];for(var o=e.face.bbox[J](w),p=+o[0],q=o[3]-o[1],r=0,s=+o[1]+("baseline"==g?q+ +e.face.descent:q/2),t=0,u=k.length;u>t;t++){if("\n"==k[t])l=0,x=0,m=0,r+=q*i;else{var v=m&&e.glyphs[k[t-1]]||{},x=e.glyphs[k[t]];l+=m?(v.w||e.w)+(v.k&&v.k[k[t]]||0)+e.w*h:0,m=1}x&&x.d&&(n+=c.transformPath(x.d,["t",l*j,r*j,"s",j,j,p,s,"t",(a-p)/j,(b-s)/j]))}}return this.path(n).attr({fill:"#000",stroke:"none"})},v.add=function(a){if(c.is(a,"array"))for(var b,d=this.set(),e=0,f=a.length;f>e;e++)b=a[e]||{},x[z](b.type)&&d.push(this[b.type]().attr(b));return d},c.format=function(a,b){var d=c.is(b,V)?[0][E](b):arguments;return a&&c.is(a,U)&&d.length-1&&(a=a.replace(y,function(a,b){return null==d[++b]?G:d[b]})),a||G},c.fullfill=function(){var a=/\{([^\}]+)\}/g,b=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,c=function(a,c,d){var e=d;return c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),"function"==typeof e&&f&&(e=e()))}),e=(null==e||e==d?a:e)+""};return function(b,d){return String(b).replace(a,function(a,b){return c(a,b,d)})}}(),c.ninja=function(){return B.was?A.win.Raphael=B.is:delete Raphael,c},c.st=nc,function(a,b,d){function e(){/in/.test(a.readyState)?setTimeout(e,9):c.eve("raphael.DOMload")}null==a.readyState&&a.addEventListener&&(a.addEventListener(b,d=function(){a.removeEventListener(b,d,!1),a.readyState="complete"},!1),a.readyState="loading"),e()}(document,"DOMContentLoaded"),b.on("raphael.DOMload",function(){u=!0}),function(){if(c.svg){var a="hasOwnProperty",b=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=c.eve,l="",m=" ",n="http://www.w3.org/1999/xlink",o={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},p={};c.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var q=function(d,e){if(e){"string"==typeof d&&(d=q(d));for(var f in e)e[a](f)&&("xlink:"==f.substring(0,6)?d.setAttributeNS(n,f.substring(6),b(e[f])):d.setAttribute(f,b(e[f])))}else d=c._g.doc.createElementNS("http://www.w3.org/2000/svg",d),d.style&&(d.style.webkitTapHighlightColor="rgba(0,0,0,0)");return d},r=function(a,e){var j="linear",k=a.id+e,m=.5,n=.5,o=a.node,p=a.paper,r=o.style,s=c._g.doc.getElementById(k);if(!s){if(e=b(e).replace(c._radial_gradient,function(a,b,c){if(j="radial",b&&c){m=d(b),n=d(c);var e=2*(n>.5)-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&.5!=n&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/),"linear"==j){var t=e.shift();if(t=-d(t),isNaN(t))return null;var u=[0,0,f.cos(c.rad(t)),f.sin(c.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=c._parseDots(e);if(!w)return null;if(k=k.replace(/[\(\)\s,\xb0#]/g,"_"),a.gradient&&k!=a.gradient.id&&(p.defs.removeChild(a.gradient),delete a.gradient),!a.gradient){s=q(j+"Gradient",{id:k}),a.gradient=s,q(s,"radial"==j?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:a.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;y>x;x++)s.appendChild(q("stop",{offset:w[x].offset?w[x].offset:x?"100%":"0%","stop-color":w[x].color||"#fff"}))}}return q(o,{fill:"url(#"+k+")",opacity:1,"fill-opacity":1}),r.fill=l,r.opacity=1,r.fillOpacity=1,1},s=function(a){var b=a.getBBox(1);q(a.pattern,{patternTransform:a.matrix.invert()+" translate("+b.x+","+b.y+")"})},t=function(d,e,f){if("path"==d.type){for(var g,h,i,j,k,m=b(e).toLowerCase().split("-"),n=d.paper,r=f?"end":"start",s=d.node,t=d.attrs,u=t["stroke-width"],v=m.length,w="classic",x=3,y=3,z=5;v--;)switch(m[v]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":w=m[v];break;case"wide":y=5;break;case"narrow":y=2;break;case"long":x=5;break;case"short":x=2}if("open"==w?(x+=2,y+=2,z+=2,i=1,j=f?4:1,k={fill:"none",stroke:t.stroke}):(j=i=x/2,k={fill:t.stroke,stroke:"none"}),d._.arrows?f?(d._.arrows.endPath&&p[d._.arrows.endPath]--,d._.arrows.endMarker&&p[d._.arrows.endMarker]--):(d._.arrows.startPath&&p[d._.arrows.startPath]--,d._.arrows.startMarker&&p[d._.arrows.startMarker]--):d._.arrows={},"none"!=w){var A="raphael-marker-"+w,B="raphael-marker-"+r+w+x+y;c._g.doc.getElementById(A)?p[A]++:(n.defs.appendChild(q(q("path"),{"stroke-linecap":"round",d:o[w],id:A})),p[A]=1);var C,D=c._g.doc.getElementById(B);D?(p[B]++,C=D.getElementsByTagName("use")[0]):(D=q(q("marker"),{id:B,markerHeight:y,markerWidth:x,orient:"auto",refX:j,refY:y/2}),C=q(q("use"),{"xlink:href":"#"+A,transform:(f?"rotate(180 "+x/2+" "+y/2+") ":l)+"scale("+x/z+","+y/z+")","stroke-width":(1/((x/z+y/z)/2)).toFixed(4)}),D.appendChild(C),n.defs.appendChild(D),p[B]=1),q(C,k);var E=i*("diamond"!=w&&"oval"!=w);f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-E*u):(g=E*u,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),k={},k["marker-"+r]="url(#"+B+")",(h||g)&&(k.d=c.getSubpath(t.path,g,h)),q(s,k),d._.arrows[r+"Path"]=A,d._.arrows[r+"Marker"]=B,d._.arrows[r+"dx"]=E,d._.arrows[r+"Type"]=w,d._.arrows[r+"String"]=e}else f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-g):(g=0,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),d._.arrows[r+"Path"]&&q(s,{d:c.getSubpath(t.path,g,h)}),delete d._.arrows[r+"Path"],delete d._.arrows[r+"Marker"],delete d._.arrows[r+"dx"],delete d._.arrows[r+"Type"],delete d._.arrows[r+"String"];for(k in p)if(p[a](k)&&!p[k]){var F=c._g.doc.getElementById(k);F&&F.parentNode.removeChild(F)}}},u={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},v=function(a,c,d){if(c=u[b(c).toLowerCase()]){for(var e=a.attrs["stroke-width"]||"1",f={round:e,square:e,butt:0}[a.attrs["stroke-linecap"]||d["stroke-linecap"]]||0,g=[],h=c.length;h--;)g[h]=c[h]*e+(h%2?1:-1)*f;q(a.node,{"stroke-dasharray":g.join(",")})}},w=function(d,f){var i=d.node,k=d.attrs,m=i.style.visibility;i.style.visibility="hidden";for(var o in f)if(f[a](o)){if(!c._availableAttrs[a](o))continue;var p=f[o];switch(k[o]=p,o){case"blur":d.blur(p);break;case"title":var u=i.getElementsByTagName("title");if(u.length&&(u=u[0]))u.firstChild.nodeValue=p;else{u=q("title");var w=c._g.doc.createTextNode(p);u.appendChild(w),i.appendChild(u)}break;case"href":case"target":var x=i.parentNode;if("a"!=x.tagName.toLowerCase()){var z=q("a");x.insertBefore(z,i),z.appendChild(i),x=z}"target"==o?x.setAttributeNS(n,"show","blank"==p?"new":p):x.setAttributeNS(n,o,p);break;case"cursor":i.style.cursor=p;break;case"transform":d.transform(p);break;case"arrow-start":t(d,p);break;case"arrow-end":t(d,p,1);break;case"clip-rect":var A=b(p).split(j);if(4==A.length){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var B=q("clipPath"),C=q("rect");B.id=c.createUUID(),q(C,{x:A[0],y:A[1],width:A[2],height:A[3]}),B.appendChild(C),d.paper.defs.appendChild(B),q(i,{"clip-path":"url(#"+B.id+")"}),d.clip=C}if(!p){var D=i.getAttribute("clip-path");if(D){var E=c._g.doc.getElementById(D.replace(/(^url\(#|\)$)/g,l));E&&E.parentNode.removeChild(E),q(i,{"clip-path":l}),delete d.clip}}break;case"path":"path"==d.type&&(q(i,{d:p?k.path=c._pathToAbsolute(p):"M0,0"}),d._.dirty=1,d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1)));break;case"width":if(i.setAttribute(o,p),d._.dirty=1,!k.fx)break;o="x",p=k.x;case"x":k.fx&&(p=-k.x-(k.width||0));case"rx":if("rx"==o&&"rect"==d.type)break;case"cx":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"height":if(i.setAttribute(o,p),d._.dirty=1,!k.fy)break;o="y",p=k.y;case"y":k.fy&&(p=-k.y-(k.height||0));case"ry":if("ry"==o&&"rect"==d.type)break;case"cy":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"r":"rect"==d.type?q(i,{rx:p,ry:p}):i.setAttribute(o,p),d._.dirty=1;break;case"src":"image"==d.type&&i.setAttributeNS(n,"href",p);break;case"stroke-width":(1!=d._.sx||1!=d._.sy)&&(p/=g(h(d._.sx),h(d._.sy))||1),d.paper._vbSize&&(p*=d.paper._vbSize),i.setAttribute(o,p),k["stroke-dasharray"]&&v(d,k["stroke-dasharray"],f),d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"stroke-dasharray":v(d,p,f);break;case"fill":var F=b(p).match(c._ISURL);if(F){B=q("pattern");var G=q("image");B.id=c.createUUID(),q(B,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),q(G,{x:0,y:0,"xlink:href":F[1]}),B.appendChild(G),function(a){c._preload(F[1],function(){var b=this.offsetWidth,c=this.offsetHeight;q(a,{width:b,height:c}),q(G,{width:b,height:c}),d.paper.safari()})}(B),d.paper.defs.appendChild(B),q(i,{fill:"url(#"+B.id+")"}),d.pattern=B,d.pattern&&s(d);break}var H=c.getRGB(p);if(H.error){if(("circle"==d.type||"ellipse"==d.type||"r"!=b(p).charAt())&&r(d,p)){if("opacity"in k||"fill-opacity"in k){var I=c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l));if(I){var J=I.getElementsByTagName("stop");q(J[J.length-1],{"stop-opacity":("opacity"in k?k.opacity:1)*("fill-opacity"in k?k["fill-opacity"]:1)})}}k.gradient=p,k.fill="none";break}}else delete f.gradient,delete k.gradient,!c.is(k.opacity,"undefined")&&c.is(f.opacity,"undefined")&&q(i,{opacity:k.opacity}),!c.is(k["fill-opacity"],"undefined")&&c.is(f["fill-opacity"],"undefined")&&q(i,{"fill-opacity":k["fill-opacity"]});H[a]("opacity")&&q(i,{"fill-opacity":H.opacity>1?H.opacity/100:H.opacity});case"stroke":H=c.getRGB(p),i.setAttribute(o,H.hex),"stroke"==o&&H[a]("opacity")&&q(i,{"stroke-opacity":H.opacity>1?H.opacity/100:H.opacity}),"stroke"==o&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":("circle"==d.type||"ellipse"==d.type||"r"!=b(p).charAt())&&r(d,p);break;case"opacity":k.gradient&&!k[a]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){I=c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),I&&(J=I.getElementsByTagName("stop"),q(J[J.length-1],{"stop-opacity":p}));break}default:"font-size"==o&&(p=e(p,10)+"px");var K=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[K]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if("text"==d.type&&(f[a]("text")||f[a]("font")||f[a]("font-size")||f[a]("x")||f[a]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(c._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;
|
11 |
+
if(f[a]("text")){for(g.text=f.text;h.firstChild;)h.removeChild(h.firstChild);for(var j,k=b(f.text).split("\n"),m=[],n=0,o=k.length;o>n;n++)j=q("tspan"),n&&q(j,{dy:i*x,x:g.x}),j.appendChild(c._g.doc.createTextNode(k[n])),h.appendChild(j),m[n]=j}else for(m=h.getElementsByTagName("tspan"),n=0,o=m.length;o>n;n++)n?q(m[n],{dy:i*x,x:g.x}):q(m[0],{dy:0});q(h,{x:g.x,y:g.y}),d._.dirty=1;var p=d._getBBox(),r=g.y-(p.y+p.height/2);r&&c.is(r,"finite")&&q(m[0],{dy:r})}},z=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.matrix=c.matrix(),this.realPath=null,this.paper=b,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},A=c.el;z.prototype=A,A.constructor=z,c._engine.path=function(a,b){var c=q("path");b.canvas&&b.canvas.appendChild(c);var d=new z(c,b);return d.type="path",w(d,{fill:"none",stroke:"#000",path:a}),d},A.rotate=function(a,c,e){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this.transform(this._.transform.concat([["r",a,c,e]])),this},A.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,c,e,f]])),this},A.translate=function(a,c){return this.removed?this:(a=b(a).split(j),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this.transform(this._.transform.concat([["t",a,c]])),this)},A.transform=function(b){var d=this._;if(null==b)return d.transform;if(c._extractTransform(this,b),this.clip&&q(this.clip,{transform:this.matrix.invert()}),this.pattern&&s(this),this.node&&q(this.node,{transform:this.matrix}),1!=d.sx||1!=d.sy){var e=this.attrs[a]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":e})}return this},A.hide=function(){return!this.removed&&this.paper.safari(this.node.style.display="none"),this},A.show=function(){return!this.removed&&this.paper.safari(this.node.style.display=""),this},A.remove=function(){if(!this.removed&&this.node.parentNode){var a=this.paper;a.__set__&&a.__set__.exclude(this),k.unbind("raphael.*.*."+this.id),this.gradient&&a.defs.removeChild(this.gradient),c._tear(this,a),"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.removeChild(this.node.parentNode):this.node.parentNode.removeChild(this.node);for(var b in this)this[b]="function"==typeof this[b]?c._removedFactory(b):null;this.removed=!0}},A._getBBox=function(){if("none"==this.node.style.display){this.show();var a=!0}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}return a&&this.hide(),b},A.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,"string")){if("fill"==b&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if("transform"==b)return this._.transform;for(var g=b.split(j),h={},i=0,l=g.length;l>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],"function")?this.paper.customAttributes[b].def:c._availableAttrs[b];return l-1?h:h[g[0]]}if(null==d&&c.is(b,"array")){for(h={},i=0,l=b.length;l>i;i++)h[b[i]]=this.attr(b[i]);return h}if(null!=d){var m={};m[b]=d}else null!=b&&c.is(b,"object")&&(m=b);for(var n in m)k("raphael.attr."+n+"."+this.id,this,m[n]);for(n in this.paper.customAttributes)if(this.paper.customAttributes[a](n)&&m[a](n)&&c.is(this.paper.customAttributes[n],"function")){var o=this.paper.customAttributes[n].apply(this,[].concat(m[n]));this.attrs[n]=m[n];for(var p in o)o[a](p)&&(m[p]=o[p])}return w(this,m),this},A.toFront=function(){if(this.removed)return this;"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.appendChild(this.node.parentNode):this.node.parentNode.appendChild(this.node);var a=this.paper;return a.top!=this&&c._tofront(this,a),this},A.toBack=function(){if(this.removed)return this;var a=this.node.parentNode;"a"==a.tagName.toLowerCase()?a.parentNode.insertBefore(this.node.parentNode,this.node.parentNode.parentNode.firstChild):a.firstChild!=this.node&&a.insertBefore(this.node,this.node.parentNode.firstChild),c._toback(this,this.paper);this.paper;return this},A.insertAfter=function(a){if(this.removed)return this;var b=a.node||a[a.length-1].node;return b.nextSibling?b.parentNode.insertBefore(this.node,b.nextSibling):b.parentNode.appendChild(this.node),c._insertafter(this,a,this.paper),this},A.insertBefore=function(a){if(this.removed)return this;var b=a.node||a[0].node;return b.parentNode.insertBefore(this.node,b),c._insertbefore(this,a,this.paper),this},A.blur=function(a){var b=this;if(0!==+a){var d=q("filter"),e=q("feGaussianBlur");b.attrs.blur=a,d.id=c.createUUID(),q(e,{stdDeviation:+a||1.5}),d.appendChild(e),b.paper.defs.appendChild(d),b._blur=d,q(b.node,{filter:"url(#"+d.id+")"})}else b._blur&&(b._blur.parentNode.removeChild(b._blur),delete b._blur,delete b.attrs.blur),b.node.removeAttribute("filter");return b},c._engine.circle=function(a,b,c,d){var e=q("circle");a.canvas&&a.canvas.appendChild(e);var f=new z(e,a);return f.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"},f.type="circle",q(e,f.attrs),f},c._engine.rect=function(a,b,c,d,e,f){var g=q("rect");a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);return h.attrs={x:b,y:c,width:d,height:e,r:f||0,rx:f||0,ry:f||0,fill:"none",stroke:"#000"},h.type="rect",q(g,h.attrs),h},c._engine.ellipse=function(a,b,c,d,e){var f=q("ellipse");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);return g.attrs={cx:b,cy:c,rx:d,ry:e,fill:"none",stroke:"#000"},g.type="ellipse",q(f,g.attrs),g},c._engine.image=function(a,b,c,d,e,f){var g=q("image");q(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:"none"}),g.setAttributeNS(n,"href",b),a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);return h.attrs={x:c,y:d,width:e,height:f,src:b},h.type="image",h},c._engine.text=function(a,b,d,e){var f=q("text");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);return g.attrs={x:b,y:d,"text-anchor":"middle",text:e,font:c._availableAttrs.font,stroke:"none",fill:"#000"},g.type="text",w(g,g.attrs),g},c._engine.setSize=function(a,b){return this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a&&a.container,d=a.x,e=a.y,f=a.width,g=a.height;if(!b)throw new Error("SVG container not found.");var h,i=q("svg"),j="overflow:hidden;";return d=d||0,e=e||0,f=f||512,g=g||342,q(i,{height:g,version:1.1,width:f,xmlns:"http://www.w3.org/2000/svg"}),1==b?(i.style.cssText=j+"position:absolute;left:"+d+"px;top:"+e+"px",c._g.doc.body.appendChild(i),h=1):(i.style.cssText=j+"position:relative",b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i)),b=new c._Paper,b.width=f,b.height=g,b.canvas=i,b.clear(),b._left=b._top=0,h&&(b.renderfix=function(){}),b.renderfix(),b},c._engine.setViewBox=function(a,b,c,d,e){k("raphael.setViewBox",this,this._viewBox,[a,b,c,d,e]);var f,h,i=g(c/this.width,d/this.height),j=this.top,l=e?"xMidYMid meet":"xMinYMin";for(null==a?(this._vbSize&&(i=1),delete this._vbSize,f="0 0 "+this.width+m+this.height):(this._vbSize=i,f=a+m+b+m+c+m+d),q(this.canvas,{viewBox:f,preserveAspectRatio:l});i&&j;)h="stroke-width"in j.attrs?j.attrs["stroke-width"]:1,j.attr({"stroke-width":h}),j._.dirty=1,j._.dirtyT=1,j=j.prev;return this._viewBox=[a,b,c,d,!!e],this},c.prototype.renderfix=function(){var a,b=this.canvas,c=b.style;try{a=b.getScreenCTM()||b.createSVGMatrix()}catch(d){a=b.createSVGMatrix()}var e=-a.e%1,f=-a.f%1;(e||f)&&(e&&(this._left=(this._left+e)%1,c.left=this._left+"px"),f&&(this._top=(this._top+f)%1,c.top=this._top+"px"))},c.prototype.clear=function(){c.eve("raphael.clear",this);for(var a=this.canvas;a.firstChild;)a.removeChild(a.firstChild);this.bottom=this.top=null,(this.desc=q("desc")).appendChild(c._g.doc.createTextNode("Created with Raphaël "+c.version)),a.appendChild(this.desc),a.appendChild(this.defs=q("defs"))},c.prototype.remove=function(){k("raphael.remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null};var B=c.st;for(var C in A)A[a](C)&&!B[a](C)&&(B[C]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(C))}}(),function(){if(c.vml){var a="hasOwnProperty",b=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j="fill",k=/[, ]+/,l=c.eve,m=" progid:DXImageTransform.Microsoft",n=" ",o="",p={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},q=/([clmz]),?([^clmz]*)/gi,r=/ progid:\S+Blur\([^\)]+\)/g,s=/-?[^,\s-]+/g,t="position:absolute;left:0;top:0;width:1px;height:1px",u=21600,v={path:1,rect:1,image:1},w={circle:1,ellipse:1},x=function(a){var d=/[ahqstv]/gi,e=c._pathToAbsolute;if(b(a).match(d)&&(e=c._path2curve),d=/[clmz]/g,e==c._pathToAbsolute&&!b(a).match(d)){var g=b(a).replace(q,function(a,b,c){var d=[],e="m"==b.toLowerCase(),g=p[b];return c.replace(s,function(a){e&&2==d.length&&(g+=d+p["m"==b?"l":"L"],d=[]),d.push(f(a*u))}),g+d});return g}var h,i,j=e(a);g=[];for(var k=0,l=j.length;l>k;k++){h=j[k],i=j[k][0].toLowerCase(),"z"==i&&(i="x");for(var m=1,r=h.length;r>m;m++)i+=f(h[m]*u)+(m!=r-1?",":o);g.push(i)}return g.join(n)},y=function(a,b,d){var e=c.matrix();return e.rotate(-a,.5,.5),{dx:e.x(b,d),dy:e.y(b,d)}},z=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,m=l.style,o=1,p="",q=u/b,r=u/c;if(m.visibility="hidden",b&&c){if(l.coordsize=i(q)+n+i(r),m.rotation=f*(0>b*c?-1:1),f){var s=y(f,d,e);d=s.dx,e=s.dy}if(0>b&&(p+="x"),0>c&&(p+=" y")&&(o=-1),m.flip=p,l.coordorigin=d*-q+n+e*-r,k||g.fillsize){var t=l.getElementsByTagName(j);t=t&&t[0],l.removeChild(t),k&&(s=y(f,h.x(k[0],k[1]),h.y(k[0],k[1])),t.position=s.dx*o+n+s.dy*o),g.fillsize&&(t.size=g.fillsize[0]*i(b)+n+g.fillsize[1]*i(c)),l.appendChild(t)}m.visibility="visible"}};c.toString=function(){return"Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël "+this.version};var A=function(a,c,d){for(var e=b(c).toLowerCase().split("-"),f=d?"end":"start",g=e.length,h="classic",i="medium",j="medium";g--;)switch(e[g]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":h=e[g];break;case"wide":case"narrow":j=e[g];break;case"long":case"short":i=e[g]}var k=a.node.getElementsByTagName("stroke")[0];k[f+"arrow"]=h,k[f+"arrowlength"]=i,k[f+"arrowwidth"]=j},B=function(e,i){e.attrs=e.attrs||{};var l=e.node,m=e.attrs,p=l.style,q=v[e.type]&&(i.x!=m.x||i.y!=m.y||i.width!=m.width||i.height!=m.height||i.cx!=m.cx||i.cy!=m.cy||i.rx!=m.rx||i.ry!=m.ry||i.r!=m.r),r=w[e.type]&&(m.cx!=i.cx||m.cy!=i.cy||m.r!=i.r||m.rx!=i.rx||m.ry!=i.ry),s=e;for(var t in i)i[a](t)&&(m[t]=i[t]);if(q&&(m.path=c._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),"blur"in i&&e.blur(i.blur),(i.path&&"path"==e.type||q)&&(l.path=x(~b(m.path).toLowerCase().indexOf("r")?c._pathToAbsolute(m.path):m.path),"image"==e.type&&(e._.fillpos=[m.x,m.y],e._.fillsize=[m.width,m.height],z(e,1,1,0,0,0))),"transform"in i&&e.transform(i.transform),r){var y=+m.cx,B=+m.cy,D=+m.rx||+m.r||0,E=+m.ry||+m.r||0;l.path=c.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",f((y-D)*u),f((B-E)*u),f((y+D)*u),f((B+E)*u),f(y*u)),e._.dirty=1}if("clip-rect"in i){var G=b(i["clip-rect"]).split(k);if(4==G.length){G[2]=+G[2]+ +G[0],G[3]=+G[3]+ +G[1];var H=l.clipRect||c._g.doc.createElement("div"),I=H.style;I.clip=c.format("rect({1}px {2}px {3}px {0}px)",G),l.clipRect||(I.position="absolute",I.top=0,I.left=0,I.width=e.paper.width+"px",I.height=e.paper.height+"px",l.parentNode.insertBefore(H,l),H.appendChild(l),l.clipRect=H)}i["clip-rect"]||l.clipRect&&(l.clipRect.style.clip="auto")}if(e.textpath){var J=e.textpath.style;i.font&&(J.font=i.font),i["font-family"]&&(J.fontFamily='"'+i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,o)+'"'),i["font-size"]&&(J.fontSize=i["font-size"]),i["font-weight"]&&(J.fontWeight=i["font-weight"]),i["font-style"]&&(J.fontStyle=i["font-style"])}if("arrow-start"in i&&A(s,i["arrow-start"]),"arrow-end"in i&&A(s,i["arrow-end"],1),null!=i.opacity||null!=i["stroke-width"]||null!=i.fill||null!=i.src||null!=i.stroke||null!=i["stroke-width"]||null!=i["stroke-opacity"]||null!=i["fill-opacity"]||null!=i["stroke-dasharray"]||null!=i["stroke-miterlimit"]||null!=i["stroke-linejoin"]||null!=i["stroke-linecap"]){var K=l.getElementsByTagName(j),L=!1;if(K=K&&K[0],!K&&(L=K=F(j)),"image"==e.type&&i.src&&(K.src=i.src),i.fill&&(K.on=!0),(null==K.on||"none"==i.fill||null===i.fill)&&(K.on=!1),K.on&&i.fill){var M=b(i.fill).match(c._ISURL);if(M){K.parentNode==l&&l.removeChild(K),K.rotate=!0,K.src=M[1],K.type="tile";var N=e.getBBox(1);K.position=N.x+n+N.y,e._.fillpos=[N.x,N.y],c._preload(M[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else K.color=c.getRGB(i.fill).hex,K.src=o,K.type="solid",c.getRGB(i.fill).error&&(s.type in{circle:1,ellipse:1}||"r"!=b(i.fill).charAt())&&C(s,i.fill,K)&&(m.fill="none",m.gradient=i.fill,K.rotate=!1)}if("fill-opacity"in i||"opacity"in i){var O=((+m["fill-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+c.getRGB(i.fill).o+1||2)-1);O=h(g(O,0),1),K.opacity=O,K.src&&(K.color="none")}l.appendChild(K);var P=l.getElementsByTagName("stroke")&&l.getElementsByTagName("stroke")[0],Q=!1;!P&&(Q=P=F("stroke")),(i.stroke&&"none"!=i.stroke||i["stroke-width"]||null!=i["stroke-opacity"]||i["stroke-dasharray"]||i["stroke-miterlimit"]||i["stroke-linejoin"]||i["stroke-linecap"])&&(P.on=!0),("none"==i.stroke||null===i.stroke||null==P.on||0==i.stroke||0==i["stroke-width"])&&(P.on=!1);var R=c.getRGB(i.stroke);P.on&&i.stroke&&(P.color=R.hex),O=((+m["stroke-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+R.o+1||2)-1);var S=.75*(d(i["stroke-width"])||1);if(O=h(g(O,0),1),null==i["stroke-width"]&&(S=m["stroke-width"]),i["stroke-width"]&&(P.weight=S),S&&1>S&&(O*=S)&&(P.weight=1),P.opacity=O,i["stroke-linejoin"]&&(P.joinstyle=i["stroke-linejoin"]||"miter"),P.miterlimit=i["stroke-miterlimit"]||8,i["stroke-linecap"]&&(P.endcap="butt"==i["stroke-linecap"]?"flat":"square"==i["stroke-linecap"]?"square":"round"),"stroke-dasharray"in i){var T={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};P.dashstyle=T[a](i["stroke-dasharray"])?T[i["stroke-dasharray"]]:o}Q&&l.appendChild(P)}if("text"==s.type){s.paper.canvas.style.display=o;var U=s.paper.span,V=100,W=m.font&&m.font.match(/\d+(?:\.\d*)?(?=px)/);p=U.style,m.font&&(p.font=m.font),m["font-family"]&&(p.fontFamily=m["font-family"]),m["font-weight"]&&(p.fontWeight=m["font-weight"]),m["font-style"]&&(p.fontStyle=m["font-style"]),W=d(m["font-size"]||W&&W[0])||10,p.fontSize=W*V+"px",s.textpath.string&&(U.innerHTML=b(s.textpath.string).replace(/</g,"<").replace(/&/g,"&").replace(/\n/g,"<br>"));var X=U.getBoundingClientRect();s.W=m.w=(X.right-X.left)/V,s.H=m.h=(X.bottom-X.top)/V,s.X=m.x,s.Y=m.y+s.H/2,("x"in i||"y"in i)&&(s.path.v=c.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));for(var Y=["x","y","text","font","font-family","font-weight","font-style","font-size"],Z=0,$=Y.length;$>Z;Z++)if(Y[Z]in i){s._.dirty=1;break}switch(m["text-anchor"]){case"start":s.textpath.style["v-text-align"]="left",s.bbx=s.W/2;break;case"end":s.textpath.style["v-text-align"]="right",s.bbx=-s.W/2;break;default:s.textpath.style["v-text-align"]="center",s.bbx=0}s.textpath.style["v-text-kern"]=!0}},C=function(a,f,g){a.attrs=a.attrs||{};var h=(a.attrs,Math.pow),i="linear",j=".5 .5";if(a.attrs.gradient=f,f=b(f).replace(c._radial_gradient,function(a,b,c){return i="radial",b&&c&&(b=d(b),c=d(c),h(b-.5,2)+h(c-.5,2)>.25&&(c=e.sqrt(.25-h(b-.5,2))*(2*(c>.5)-1)+.5),j=b+n+c),o}),f=f.split(/\s*\-\s*/),"linear"==i){var k=f.shift();if(k=-d(k),isNaN(k))return null}var l=c._parseDots(f);if(!l)return null;if(a=a.shape||a.node,l.length){a.removeChild(g),g.on=!0,g.method="none",g.color=l[0].color,g.color2=l[l.length-1].color;for(var m=[],p=0,q=l.length;q>p;p++)l[p].offset&&m.push(l[p].offset+n+l[p].color);g.colors=m.length?m.join():"0% "+g.color,"radial"==i?(g.type="gradientTitle",g.focus="100%",g.focussize="0 0",g.focusposition=j,g.angle=0):(g.type="gradient",g.angle=(270-k)%360),a.appendChild(g)}return 1},D=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=b,this.matrix=c.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},E=c.el;D.prototype=E,E.constructor=D,E.transform=function(a){if(null==a)return this._.transform;var d,e=this.paper._viewBoxShift,f=e?"s"+[e.scale,e.scale]+"-1-1t"+[e.dx,e.dy]:o;e&&(d=a=b(a).replace(/\.{3}|\u2026/g,this._.transform||o)),c._extractTransform(this,f+a);var g,h=this.matrix.clone(),i=this.skew,j=this.node,k=~b(this.attrs.fill).indexOf("-"),l=!b(this.attrs.fill).indexOf("url(");if(h.translate(1,1),l||k||"image"==this.type)if(i.matrix="1 0 0 1",i.offset="0 0",g=h.split(),k&&g.noRotation||!g.isSimple){j.style.filter=h.toFilter();var m=this.getBBox(),p=this.getBBox(1),q=m.x-p.x,r=m.y-p.y;j.coordorigin=q*-u+n+r*-u,z(this,1,1,q,r,0)}else j.style.filter=o,z(this,g.scalex,g.scaley,g.dx,g.dy,g.rotate);else j.style.filter=o,i.matrix=b(h),i.offset=h.offset();return d&&(this._.transform=d),this},E.rotate=function(a,c,e){if(this.removed)return this;if(null!=a){if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this._.dirtyT=1,this.transform(this._.transform.concat([["r",a,c,e]])),this}},E.translate=function(a,c){return this.removed?this:(a=b(a).split(k),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=c),this.transform(this._.transform.concat([["t",a,c]])),this)},E.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,c,e,f]])),this._.dirtyT=1,this},E.hide=function(){return!this.removed&&(this.node.style.display="none"),this},E.show=function(){return!this.removed&&(this.node.style.display=o),this},E._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},E.remove=function(){if(!this.removed&&this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),c.eve.unbind("raphael.*.*."+this.id),c._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null;this.removed=!0}},E.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,"string")){if(b==j&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;for(var g=b.split(k),h={},i=0,m=g.length;m>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],"function")?this.paper.customAttributes[b].def:c._availableAttrs[b];return m-1?h:h[g[0]]}if(this.attrs&&null==d&&c.is(b,"array")){for(h={},i=0,m=b.length;m>i;i++)h[b[i]]=this.attr(b[i]);return h}var n;null!=d&&(n={},n[b]=d),null==d&&c.is(b,"object")&&(n=b);for(var o in n)l("raphael.attr."+o+"."+this.id,this,n[o]);if(n){for(o in this.paper.customAttributes)if(this.paper.customAttributes[a](o)&&n[a](o)&&c.is(this.paper.customAttributes[o],"function")){var p=this.paper.customAttributes[o].apply(this,[].concat(n[o]));this.attrs[o]=n[o];for(var q in p)p[a](q)&&(n[q]=p[q])}n.text&&"text"==this.type&&(this.textpath.string=n.text),B(this,n)}return this},E.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&c._tofront(this,this.paper),this},E.toBack=function(){return this.removed?this:(this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),c._toback(this,this.paper)),this)},E.insertAfter=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[a.length-1]),a.node.nextSibling?a.node.parentNode.insertBefore(this.node,a.node.nextSibling):a.node.parentNode.appendChild(this.node),c._insertafter(this,a,this.paper),this)},E.insertBefore=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[0]),a.node.parentNode.insertBefore(this.node,a.node),c._insertbefore(this,a,this.paper),this)},E.blur=function(a){var b=this.node.runtimeStyle,d=b.filter;return d=d.replace(r,o),0!==+a?(this.attrs.blur=a,b.filter=d+n+m+".Blur(pixelradius="+(+a||1.5)+")",b.margin=c.format("-{0}px 0 0 -{0}px",f(+a||1.5))):(b.filter=d,b.margin=0,delete this.attrs.blur),this},c._engine.path=function(a,b){var c=F("shape");c.style.cssText=t,c.coordsize=u+n+u,c.coordorigin=b.coordorigin;var d=new D(c,b),e={fill:"none",stroke:"#000"};a&&(e.path=a),d.type="path",d.path=[],d.Path=o,B(d,e),b.canvas.appendChild(c);var f=F("skew");return f.on=!0,c.appendChild(f),d.skew=f,d.transform(o),d},c._engine.rect=function(a,b,d,e,f,g){var h=c._rectPath(b,d,e,f,g),i=a.path(h),j=i.attrs;return i.X=j.x=b,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type="rect",i},c._engine.ellipse=function(a,b,c,d,e){{var f=a.path();f.attrs}return f.X=b-d,f.Y=c-e,f.W=2*d,f.H=2*e,f.type="ellipse",B(f,{cx:b,cy:c,rx:d,ry:e}),f},c._engine.circle=function(a,b,c,d){{var e=a.path();e.attrs}return e.X=b-d,e.Y=c-d,e.W=e.H=2*d,e.type="circle",B(e,{cx:b,cy:c,r:d}),e},c._engine.image=function(a,b,d,e,f,g){var h=c._rectPath(d,e,f,g),i=a.path(h).attr({stroke:"none"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];return k.src=b,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type="image",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=b,m.type="tile",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),z(i,1,1,0,0,0),i},c._engine.text=function(a,d,e,g){var h=F("shape"),i=F("path"),j=F("textpath");d=d||0,e=e||0,g=g||"",i.v=c.format("m{0},{1}l{2},{1}",f(d*u),f(e*u),f(d*u)+1),i.textpathok=!0,j.string=b(g),j.on=!0,h.style.cssText=t,h.coordsize=u+n+u,h.coordorigin="0 0";var k=new D(h,a),l={fill:"#000",stroke:"none",font:c._availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type="text",k.attrs.text=b(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,B(k,l),h.appendChild(j),h.appendChild(i),a.canvas.appendChild(h);var m=F("skew");return m.on=!0,h.appendChild(m),k.skew=m,k.transform(o),k},c._engine.setSize=function(a,b){var d=this.canvas.style;return this.width=a,this.height=b,a==+a&&(a+="px"),b==+b&&(b+="px"),d.width=a,d.height=b,d.clip="rect(0 "+a+" "+b+" 0)",this._viewBox&&c._engine.setViewBox.apply(this,this._viewBox),this},c._engine.setViewBox=function(a,b,d,e,f){c.eve("raphael.setViewBox",this,this._viewBox,[a,b,d,e,f]);var h,i,j=this.width,k=this.height,l=1/g(d/j,e/k);return f&&(h=k/e,i=j/d,j>d*h&&(a-=(j-d*h)/2/h),k>e*i&&(b-=(k-e*i)/2/i)),this._viewBox=[a,b,d,e,!!f],this._viewBoxShift={dx:-a,dy:-b,scale:l},this.forEach(function(a){a.transform("...")}),this};var F;c._engine.initWin=function(a){var b=a.document;b.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!b.namespaces.rvml&&b.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),F=function(a){return b.createElement("<rvml:"+a+' class="rvml">')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},c._engine.initWin(c._g.win),c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a.container,d=a.height,e=a.width,f=a.x,g=a.y;if(!b)throw new Error("VML container not found.");var h=new c._Paper,i=h.canvas=c._g.doc.createElement("div"),j=i.style;return f=f||0,g=g||0,e=e||512,d=d||342,h.width=e,h.height=d,e==+e&&(e+="px"),d==+d&&(d+="px"),h.coordsize=1e3*u+n+1e3*u,h.coordorigin="0 0",h.span=c._g.doc.createElement("span"),h.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",i.appendChild(h.span),j.cssText=c.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",e,d),1==b?(c._g.doc.body.appendChild(i),j.left=f+"px",j.top=g+"px",j.position="absolute"):b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i),h.renderfix=function(){},h},c.prototype.clear=function(){c.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=c._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},c.prototype.remove=function(){c.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null;return!0};var G=c.st;for(var H in E)E[a](H)&&!G[a](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}}(),B.was?A.win.Raphael=c:Raphael=c,c});
|
3.0.14/assets/admin/styles/bootstrap.css
ADDED
@@ -0,0 +1,6174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap v3.2.0 (http://getbootstrap.com)
|
3 |
+
* Copyright 2011-2014 Twitter, Inc.
|
4 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
+
*/
|
6 |
+
|
7 |
+
/*!
|
8 |
+
* Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=f9376f2970c50a5ddc7b)
|
9 |
+
* Config saved to config.json and https://gist.github.com/f9376f2970c50a5ddc7b
|
10 |
+
*/
|
11 |
+
/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
|
12 |
+
html {
|
13 |
+
font-family: sans-serif;
|
14 |
+
-ms-text-size-adjust: 100%;
|
15 |
+
-webkit-text-size-adjust: 100%;
|
16 |
+
}
|
17 |
+
body {
|
18 |
+
margin: 0;
|
19 |
+
}
|
20 |
+
article,
|
21 |
+
aside,
|
22 |
+
details,
|
23 |
+
figcaption,
|
24 |
+
figure,
|
25 |
+
footer,
|
26 |
+
header,
|
27 |
+
hgroup,
|
28 |
+
main,
|
29 |
+
nav,
|
30 |
+
section,
|
31 |
+
summary {
|
32 |
+
display: block;
|
33 |
+
}
|
34 |
+
audio,
|
35 |
+
canvas,
|
36 |
+
progress,
|
37 |
+
video {
|
38 |
+
display: inline-block;
|
39 |
+
vertical-align: baseline;
|
40 |
+
}
|
41 |
+
audio:not([controls]) {
|
42 |
+
display: none;
|
43 |
+
height: 0;
|
44 |
+
}
|
45 |
+
[hidden],
|
46 |
+
template {
|
47 |
+
display: none;
|
48 |
+
}
|
49 |
+
a {
|
50 |
+
background: transparent;
|
51 |
+
}
|
52 |
+
a:active,
|
53 |
+
a:hover {
|
54 |
+
outline: 0;
|
55 |
+
}
|
56 |
+
abbr[title] {
|
57 |
+
border-bottom: 1px dotted;
|
58 |
+
}
|
59 |
+
b,
|
60 |
+
strong {
|
61 |
+
font-weight: bold;
|
62 |
+
}
|
63 |
+
dfn {
|
64 |
+
font-style: italic;
|
65 |
+
}
|
66 |
+
h1 {
|
67 |
+
font-size: 2em;
|
68 |
+
margin: 0.67em 0;
|
69 |
+
}
|
70 |
+
mark {
|
71 |
+
background: #ff0;
|
72 |
+
color: #000;
|
73 |
+
}
|
74 |
+
small {
|
75 |
+
font-size: 80%;
|
76 |
+
}
|
77 |
+
sub,
|
78 |
+
sup {
|
79 |
+
font-size: 75%;
|
80 |
+
line-height: 0;
|
81 |
+
position: relative;
|
82 |
+
vertical-align: baseline;
|
83 |
+
}
|
84 |
+
sup {
|
85 |
+
top: -0.5em;
|
86 |
+
}
|
87 |
+
sub {
|
88 |
+
bottom: -0.25em;
|
89 |
+
}
|
90 |
+
img {
|
91 |
+
border: 0;
|
92 |
+
}
|
93 |
+
svg:not(:root) {
|
94 |
+
overflow: hidden;
|
95 |
+
}
|
96 |
+
figure {
|
97 |
+
margin: 1em 40px;
|
98 |
+
}
|
99 |
+
hr {
|
100 |
+
-moz-box-sizing: content-box;
|
101 |
+
box-sizing: content-box;
|
102 |
+
height: 0;
|
103 |
+
}
|
104 |
+
pre {
|
105 |
+
overflow: auto;
|
106 |
+
}
|
107 |
+
code,
|
108 |
+
kbd,
|
109 |
+
pre,
|
110 |
+
samp {
|
111 |
+
font-family: monospace, monospace;
|
112 |
+
font-size: 1em;
|
113 |
+
}
|
114 |
+
button,
|
115 |
+
input,
|
116 |
+
optgroup,
|
117 |
+
select,
|
118 |
+
textarea {
|
119 |
+
color: inherit;
|
120 |
+
font: inherit;
|
121 |
+
margin: 0;
|
122 |
+
}
|
123 |
+
button {
|
124 |
+
overflow: visible;
|
125 |
+
}
|
126 |
+
button,
|
127 |
+
select {
|
128 |
+
text-transform: none;
|
129 |
+
}
|
130 |
+
button,
|
131 |
+
html input[type="button"],
|
132 |
+
input[type="reset"],
|
133 |
+
input[type="submit"] {
|
134 |
+
-webkit-appearance: button;
|
135 |
+
cursor: pointer;
|
136 |
+
}
|
137 |
+
button[disabled],
|
138 |
+
html input[disabled] {
|
139 |
+
cursor: default;
|
140 |
+
}
|
141 |
+
button::-moz-focus-inner,
|
142 |
+
input::-moz-focus-inner {
|
143 |
+
border: 0;
|
144 |
+
padding: 0;
|
145 |
+
}
|
146 |
+
input {
|
147 |
+
line-height: normal;
|
148 |
+
}
|
149 |
+
input[type="checkbox"],
|
150 |
+
input[type="radio"] {
|
151 |
+
box-sizing: border-box;
|
152 |
+
padding: 0;
|
153 |
+
}
|
154 |
+
input[type="number"]::-webkit-inner-spin-button,
|
155 |
+
input[type="number"]::-webkit-outer-spin-button {
|
156 |
+
height: auto;
|
157 |
+
}
|
158 |
+
input[type="search"] {
|
159 |
+
-webkit-appearance: textfield;
|
160 |
+
-moz-box-sizing: content-box;
|
161 |
+
-webkit-box-sizing: content-box;
|
162 |
+
box-sizing: content-box;
|
163 |
+
}
|
164 |
+
input[type="search"]::-webkit-search-cancel-button,
|
165 |
+
input[type="search"]::-webkit-search-decoration {
|
166 |
+
-webkit-appearance: none;
|
167 |
+
}
|
168 |
+
fieldset {
|
169 |
+
border: 1px solid #c0c0c0;
|
170 |
+
margin: 0 2px;
|
171 |
+
padding: 0.35em 0.625em 0.75em;
|
172 |
+
}
|
173 |
+
legend {
|
174 |
+
border: 0;
|
175 |
+
padding: 0;
|
176 |
+
}
|
177 |
+
textarea {
|
178 |
+
overflow: auto;
|
179 |
+
}
|
180 |
+
optgroup {
|
181 |
+
font-weight: bold;
|
182 |
+
}
|
183 |
+
table {
|
184 |
+
border-collapse: collapse;
|
185 |
+
border-spacing: 0;
|
186 |
+
}
|
187 |
+
td,
|
188 |
+
th {
|
189 |
+
padding: 0;
|
190 |
+
}
|
191 |
+
@media print {
|
192 |
+
* {
|
193 |
+
text-shadow: none !important;
|
194 |
+
color: #000 !important;
|
195 |
+
background: transparent !important;
|
196 |
+
box-shadow: none !important;
|
197 |
+
}
|
198 |
+
a,
|
199 |
+
a:visited {
|
200 |
+
text-decoration: underline;
|
201 |
+
}
|
202 |
+
a[href]:after {
|
203 |
+
content: " (" attr(href) ")";
|
204 |
+
}
|
205 |
+
abbr[title]:after {
|
206 |
+
content: " (" attr(title) ")";
|
207 |
+
}
|
208 |
+
a[href^="javascript:"]:after,
|
209 |
+
a[href^="#"]:after {
|
210 |
+
content: "";
|
211 |
+
}
|
212 |
+
pre,
|
213 |
+
blockquote {
|
214 |
+
border: 1px solid #999;
|
215 |
+
page-break-inside: avoid;
|
216 |
+
}
|
217 |
+
thead {
|
218 |
+
display: table-header-group;
|
219 |
+
}
|
220 |
+
tr,
|
221 |
+
img {
|
222 |
+
page-break-inside: avoid;
|
223 |
+
}
|
224 |
+
img {
|
225 |
+
max-width: 100% !important;
|
226 |
+
}
|
227 |
+
p,
|
228 |
+
h2,
|
229 |
+
h3 {
|
230 |
+
orphans: 3;
|
231 |
+
widows: 3;
|
232 |
+
}
|
233 |
+
h2,
|
234 |
+
h3 {
|
235 |
+
page-break-after: avoid;
|
236 |
+
}
|
237 |
+
select {
|
238 |
+
background: #fff !important;
|
239 |
+
}
|
240 |
+
.navbar {
|
241 |
+
display: none;
|
242 |
+
}
|
243 |
+
.table td,
|
244 |
+
.table th {
|
245 |
+
background-color: #fff !important;
|
246 |
+
}
|
247 |
+
.btn > .caret,
|
248 |
+
.dropup > .btn > .caret {
|
249 |
+
border-top-color: #000 !important;
|
250 |
+
}
|
251 |
+
.label {
|
252 |
+
border: 1px solid #000;
|
253 |
+
}
|
254 |
+
.table {
|
255 |
+
border-collapse: collapse !important;
|
256 |
+
}
|
257 |
+
.table-bordered th,
|
258 |
+
.table-bordered td {
|
259 |
+
border: 1px solid #ddd !important;
|
260 |
+
}
|
261 |
+
}
|
262 |
+
@font-face {
|
263 |
+
font-family: 'Glyphicons Halflings';
|
264 |
+
src: url('fonts/glyphicons-halflings-regular.eot');
|
265 |
+
src: url('fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('fonts/glyphicons-halflings-regular.woff') format('woff'), url('fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
|
266 |
+
}
|
267 |
+
.glyphicon {
|
268 |
+
position: relative;
|
269 |
+
top: 1px;
|
270 |
+
display: inline-block;
|
271 |
+
font-family: 'Glyphicons Halflings';
|
272 |
+
font-style: normal;
|
273 |
+
font-weight: normal;
|
274 |
+
line-height: 1;
|
275 |
+
-webkit-font-smoothing: antialiased;
|
276 |
+
-moz-osx-font-smoothing: grayscale;
|
277 |
+
}
|
278 |
+
.glyphicon-asterisk:before {
|
279 |
+
content: "\2a";
|
280 |
+
}
|
281 |
+
.glyphicon-plus:before {
|
282 |
+
content: "\2b";
|
283 |
+
}
|
284 |
+
.glyphicon-euro:before {
|
285 |
+
content: "\20ac";
|
286 |
+
}
|
287 |
+
.glyphicon-minus:before {
|
288 |
+
content: "\2212";
|
289 |
+
}
|
290 |
+
.glyphicon-cloud:before {
|
291 |
+
content: "\2601";
|
292 |
+
}
|
293 |
+
.glyphicon-envelope:before {
|
294 |
+
content: "\2709";
|
295 |
+
}
|
296 |
+
.glyphicon-pencil:before {
|
297 |
+
content: "\270f";
|
298 |
+
}
|
299 |
+
.glyphicon-glass:before {
|
300 |
+
content: "\e001";
|
301 |
+
}
|
302 |
+
.glyphicon-music:before {
|
303 |
+
content: "\e002";
|
304 |
+
}
|
305 |
+
.glyphicon-search:before {
|
306 |
+
content: "\e003";
|
307 |
+
}
|
308 |
+
.glyphicon-heart:before {
|
309 |
+
content: "\e005";
|
310 |
+
}
|
311 |
+
.glyphicon-star:before {
|
312 |
+
content: "\e006";
|
313 |
+
}
|
314 |
+
.glyphicon-star-empty:before {
|
315 |
+
content: "\e007";
|
316 |
+
}
|
317 |
+
.glyphicon-user:before {
|
318 |
+
content: "\e008";
|
319 |
+
}
|
320 |
+
.glyphicon-film:before {
|
321 |
+
content: "\e009";
|
322 |
+
}
|
323 |
+
.glyphicon-th-large:before {
|
324 |
+
content: "\e010";
|
325 |
+
}
|
326 |
+
.glyphicon-th:before {
|
327 |
+
content: "\e011";
|
328 |
+
}
|
329 |
+
.glyphicon-th-list:before {
|
330 |
+
content: "\e012";
|
331 |
+
}
|
332 |
+
.glyphicon-ok:before {
|
333 |
+
content: "\e013";
|
334 |
+
}
|
335 |
+
.glyphicon-remove:before {
|
336 |
+
content: "\e014";
|
337 |
+
}
|
338 |
+
.glyphicon-zoom-in:before {
|
339 |
+
content: "\e015";
|
340 |
+
}
|
341 |
+
.glyphicon-zoom-out:before {
|
342 |
+
content: "\e016";
|
343 |
+
}
|
344 |
+
.glyphicon-off:before {
|
345 |
+
content: "\e017";
|
346 |
+
}
|
347 |
+
.glyphicon-signal:before {
|
348 |
+
content: "\e018";
|
349 |
+
}
|
350 |
+
.glyphicon-cog:before {
|
351 |
+
content: "\e019";
|
352 |
+
}
|
353 |
+
.glyphicon-trash:before {
|
354 |
+
content: "\e020";
|
355 |
+
}
|
356 |
+
.glyphicon-home:before {
|
357 |
+
content: "\e021";
|
358 |
+
}
|
359 |
+
.glyphicon-file:before {
|
360 |
+
content: "\e022";
|
361 |
+
}
|
362 |
+
.glyphicon-time:before {
|
363 |
+
content: "\e023";
|
364 |
+
}
|
365 |
+
.glyphicon-road:before {
|
366 |
+
content: "\e024";
|
367 |
+
}
|
368 |
+
.glyphicon-download-alt:before {
|
369 |
+
content: "\e025";
|
370 |
+
}
|
371 |
+
.glyphicon-download:before {
|
372 |
+
content: "\e026";
|
373 |
+
}
|
374 |
+
.glyphicon-upload:before {
|
375 |
+
content: "\e027";
|
376 |
+
}
|
377 |
+
.glyphicon-inbox:before {
|
378 |
+
content: "\e028";
|
379 |
+
}
|
380 |
+
.glyphicon-play-circle:before {
|
381 |
+
content: "\e029";
|
382 |
+
}
|
383 |
+
.glyphicon-repeat:before {
|
384 |
+
content: "\e030";
|
385 |
+
}
|
386 |
+
.glyphicon-refresh:before {
|
387 |
+
content: "\e031";
|
388 |
+
}
|
389 |
+
.glyphicon-list-alt:before {
|
390 |
+
content: "\e032";
|
391 |
+
}
|
392 |
+
.glyphicon-lock:before {
|
393 |
+
content: "\e033";
|
394 |
+
}
|
395 |
+
.glyphicon-flag:before {
|
396 |
+
content: "\e034";
|
397 |
+
}
|
398 |
+
.glyphicon-headphones:before {
|
399 |
+
content: "\e035";
|
400 |
+
}
|
401 |
+
.glyphicon-volume-off:before {
|
402 |
+
content: "\e036";
|
403 |
+
}
|
404 |
+
.glyphicon-volume-down:before {
|
405 |
+
content: "\e037";
|
406 |
+
}
|
407 |
+
.glyphicon-volume-up:before {
|
408 |
+
content: "\e038";
|
409 |
+
}
|
410 |
+
.glyphicon-qrcode:before {
|
411 |
+
content: "\e039";
|
412 |
+
}
|
413 |
+
.glyphicon-barcode:before {
|
414 |
+
content: "\e040";
|
415 |
+
}
|
416 |
+
.glyphicon-tag:before {
|
417 |
+
content: "\e041";
|
418 |
+
}
|
419 |
+
.glyphicon-tags:before {
|
420 |
+
content: "\e042";
|
421 |
+
}
|
422 |
+
.glyphicon-book:before {
|
423 |
+
content: "\e043";
|
424 |
+
}
|
425 |
+
.glyphicon-bookmark:before {
|
426 |
+
content: "\e044";
|
427 |
+
}
|
428 |
+
.glyphicon-print:before {
|
429 |
+
content: "\e045";
|
430 |
+
}
|
431 |
+
.glyphicon-camera:before {
|
432 |
+
content: "\e046";
|
433 |
+
}
|
434 |
+
.glyphicon-font:before {
|
435 |
+
content: "\e047";
|
436 |
+
}
|
437 |
+
.glyphicon-bold:before {
|
438 |
+
content: "\e048";
|
439 |
+
}
|
440 |
+
.glyphicon-italic:before {
|
441 |
+
content: "\e049";
|
442 |
+
}
|
443 |
+
.glyphicon-text-height:before {
|
444 |
+
content: "\e050";
|
445 |
+
}
|
446 |
+
.glyphicon-text-width:before {
|
447 |
+
content: "\e051";
|
448 |
+
}
|
449 |
+
.glyphicon-align-left:before {
|
450 |
+
content: "\e052";
|
451 |
+
}
|
452 |
+
.glyphicon-align-center:before {
|
453 |
+
content: "\e053";
|
454 |
+
}
|
455 |
+
.glyphicon-align-right:before {
|
456 |
+
content: "\e054";
|
457 |
+
}
|
458 |
+
.glyphicon-align-justify:before {
|
459 |
+
content: "\e055";
|
460 |
+
}
|
461 |
+
.glyphicon-list:before {
|
462 |
+
content: "\e056";
|
463 |
+
}
|
464 |
+
.glyphicon-indent-left:before {
|
465 |
+
content: "\e057";
|
466 |
+
}
|
467 |
+
.glyphicon-indent-right:before {
|
468 |
+
content: "\e058";
|
469 |
+
}
|
470 |
+
.glyphicon-facetime-video:before {
|
471 |
+
content: "\e059";
|
472 |
+
}
|
473 |
+
.glyphicon-picture:before {
|
474 |
+
content: "\e060";
|
475 |
+
}
|
476 |
+
.glyphicon-map-marker:before {
|
477 |
+
content: "\e062";
|
478 |
+
}
|
479 |
+
.glyphicon-adjust:before {
|
480 |
+
content: "\e063";
|
481 |
+
}
|
482 |
+
.glyphicon-tint:before {
|
483 |
+
content: "\e064";
|
484 |
+
}
|
485 |
+
.glyphicon-edit:before {
|
486 |
+
content: "\e065";
|
487 |
+
}
|
488 |
+
.glyphicon-share:before {
|
489 |
+
content: "\e066";
|
490 |
+
}
|
491 |
+
.glyphicon-check:before {
|
492 |
+
content: "\e067";
|
493 |
+
}
|
494 |
+
.glyphicon-move:before {
|
495 |
+
content: "\e068";
|
496 |
+
}
|
497 |
+
.glyphicon-step-backward:before {
|
498 |
+
content: "\e069";
|
499 |
+
}
|
500 |
+
.glyphicon-fast-backward:before {
|
501 |
+
content: "\e070";
|
502 |
+
}
|
503 |
+
.glyphicon-backward:before {
|
504 |
+
content: "\e071";
|
505 |
+
}
|
506 |
+
.glyphicon-play:before {
|
507 |
+
content: "\e072";
|
508 |
+
}
|
509 |
+
.glyphicon-pause:before {
|
510 |
+
content: "\e073";
|
511 |
+
}
|
512 |
+
.glyphicon-stop:before {
|
513 |
+
content: "\e074";
|
514 |
+
}
|
515 |
+
.glyphicon-forward:before {
|
516 |
+
content: "\e075";
|
517 |
+
}
|
518 |
+
.glyphicon-fast-forward:before {
|
519 |
+
content: "\e076";
|
520 |
+
}
|
521 |
+
.glyphicon-step-forward:before {
|
522 |
+
content: "\e077";
|
523 |
+
}
|
524 |
+
.glyphicon-eject:before {
|
525 |
+
content: "\e078";
|
526 |
+
}
|
527 |
+
.glyphicon-chevron-left:before {
|
528 |
+
content: "\e079";
|
529 |
+
}
|
530 |
+
.glyphicon-chevron-right:before {
|
531 |
+
content: "\e080";
|
532 |
+
}
|
533 |
+
.glyphicon-plus-sign:before {
|
534 |
+
content: "\e081";
|
535 |
+
}
|
536 |
+
.glyphicon-minus-sign:before {
|
537 |
+
content: "\e082";
|
538 |
+
}
|
539 |
+
.glyphicon-remove-sign:before {
|
540 |
+
content: "\e083";
|
541 |
+
}
|
542 |
+
.glyphicon-ok-sign:before {
|
543 |
+
content: "\e084";
|
544 |
+
}
|
545 |
+
.glyphicon-question-sign:before {
|
546 |
+
content: "\e085";
|
547 |
+
}
|
548 |
+
.glyphicon-info-sign:before {
|
549 |
+
content: "\e086";
|
550 |
+
}
|
551 |
+
.glyphicon-screenshot:before {
|
552 |
+
content: "\e087";
|
553 |
+
}
|
554 |
+
.glyphicon-remove-circle:before {
|
555 |
+
content: "\e088";
|
556 |
+
}
|
557 |
+
.glyphicon-ok-circle:before {
|
558 |
+
content: "\e089";
|
559 |
+
}
|
560 |
+
.glyphicon-ban-circle:before {
|
561 |
+
content: "\e090";
|
562 |
+
}
|
563 |
+
.glyphicon-arrow-left:before {
|
564 |
+
content: "\e091";
|
565 |
+
}
|
566 |
+
.glyphicon-arrow-right:before {
|
567 |
+
content: "\e092";
|
568 |
+
}
|
569 |
+
.glyphicon-arrow-up:before {
|
570 |
+
content: "\e093";
|
571 |
+
}
|
572 |
+
.glyphicon-arrow-down:before {
|
573 |
+
content: "\e094";
|
574 |
+
}
|
575 |
+
.glyphicon-share-alt:before {
|
576 |
+
content: "\e095";
|
577 |
+
}
|
578 |
+
.glyphicon-resize-full:before {
|
579 |
+
content: "\e096";
|
580 |
+
}
|
581 |
+
.glyphicon-resize-small:before {
|
582 |
+
content: "\e097";
|
583 |
+
}
|
584 |
+
.glyphicon-exclamation-sign:before {
|
585 |
+
content: "\e101";
|
586 |
+
}
|
587 |
+
.glyphicon-gift:before {
|
588 |
+
content: "\e102";
|
589 |
+
}
|
590 |
+
.glyphicon-leaf:before {
|
591 |
+
content: "\e103";
|
592 |
+
}
|
593 |
+
.glyphicon-fire:before {
|
594 |
+
content: "\e104";
|
595 |
+
}
|
596 |
+
.glyphicon-eye-open:before {
|
597 |
+
content: "\e105";
|
598 |
+
}
|
599 |
+
.glyphicon-eye-close:before {
|
600 |
+
content: "\e106";
|
601 |
+
}
|
602 |
+
.glyphicon-warning-sign:before {
|
603 |
+
content: "\e107";
|
604 |
+
}
|
605 |
+
.glyphicon-plane:before {
|
606 |
+
content: "\e108";
|
607 |
+
}
|
608 |
+
.glyphicon-calendar:before {
|
609 |
+
content: "\e109";
|
610 |
+
}
|
611 |
+
.glyphicon-random:before {
|
612 |
+
content: "\e110";
|
613 |
+
}
|
614 |
+
.glyphicon-comment:before {
|
615 |
+
content: "\e111";
|
616 |
+
}
|
617 |
+
.glyphicon-magnet:before {
|
618 |
+
content: "\e112";
|
619 |
+
}
|
620 |
+
.glyphicon-chevron-up:before {
|
621 |
+
content: "\e113";
|
622 |
+
}
|
623 |
+
.glyphicon-chevron-down:before {
|
624 |
+
content: "\e114";
|
625 |
+
}
|
626 |
+
.glyphicon-retweet:before {
|
627 |
+
content: "\e115";
|
628 |
+
}
|
629 |
+
.glyphicon-shopping-cart:before {
|
630 |
+
content: "\e116";
|
631 |
+
}
|
632 |
+
.glyphicon-folder-close:before {
|
633 |
+
content: "\e117";
|
634 |
+
}
|
635 |
+
.glyphicon-folder-open:before {
|
636 |
+
content: "\e118";
|
637 |
+
}
|
638 |
+
.glyphicon-resize-vertical:before {
|
639 |
+
content: "\e119";
|
640 |
+
}
|
641 |
+
.glyphicon-resize-horizontal:before {
|
642 |
+
content: "\e120";
|
643 |
+
}
|
644 |
+
.glyphicon-hdd:before {
|
645 |
+
content: "\e121";
|
646 |
+
}
|
647 |
+
.glyphicon-bullhorn:before {
|
648 |
+
content: "\e122";
|
649 |
+
}
|
650 |
+
.glyphicon-bell:before {
|
651 |
+
content: "\e123";
|
652 |
+
}
|
653 |
+
.glyphicon-certificate:before {
|
654 |
+
content: "\e124";
|
655 |
+
}
|
656 |
+
.glyphicon-thumbs-up:before {
|
657 |
+
content: "\e125";
|
658 |
+
}
|
659 |
+
.glyphicon-thumbs-down:before {
|
660 |
+
content: "\e126";
|
661 |
+
}
|
662 |
+
.glyphicon-hand-right:before {
|
663 |
+
content: "\e127";
|
664 |
+
}
|
665 |
+
.glyphicon-hand-left:before {
|
666 |
+
content: "\e128";
|
667 |
+
}
|
668 |
+
.glyphicon-hand-up:before {
|
669 |
+
content: "\e129";
|
670 |
+
}
|
671 |
+
.glyphicon-hand-down:before {
|
672 |
+
content: "\e130";
|
673 |
+
}
|
674 |
+
.glyphicon-circle-arrow-right:before {
|
675 |
+
content: "\e131";
|
676 |
+
}
|
677 |
+
.glyphicon-circle-arrow-left:before {
|
678 |
+
content: "\e132";
|
679 |
+
}
|
680 |
+
.glyphicon-circle-arrow-up:before {
|
681 |
+
content: "\e133";
|
682 |
+
}
|
683 |
+
.glyphicon-circle-arrow-down:before {
|
684 |
+
content: "\e134";
|
685 |
+
}
|
686 |
+
.glyphicon-globe:before {
|
687 |
+
content: "\e135";
|
688 |
+
}
|
689 |
+
.glyphicon-wrench:before {
|
690 |
+
content: "\e136";
|
691 |
+
}
|
692 |
+
.glyphicon-tasks:before {
|
693 |
+
content: "\e137";
|
694 |
+
}
|
695 |
+
.glyphicon-filter:before {
|
696 |
+
content: "\e138";
|
697 |
+
}
|
698 |
+
.glyphicon-briefcase:before {
|
699 |
+
content: "\e139";
|
700 |
+
}
|
701 |
+
.glyphicon-fullscreen:before {
|
702 |
+
content: "\e140";
|
703 |
+
}
|
704 |
+
.glyphicon-dashboard:before {
|
705 |
+
content: "\e141";
|
706 |
+
}
|
707 |
+
.glyphicon-paperclip:before {
|
708 |
+
content: "\e142";
|
709 |
+
}
|
710 |
+
.glyphicon-heart-empty:before {
|
711 |
+
content: "\e143";
|
712 |
+
}
|
713 |
+
.glyphicon-link:before {
|
714 |
+
content: "\e144";
|
715 |
+
}
|
716 |
+
.glyphicon-phone:before {
|
717 |
+
content: "\e145";
|
718 |
+
}
|
719 |
+
.glyphicon-pushpin:before {
|
720 |
+
content: "\e146";
|
721 |
+
}
|
722 |
+
.glyphicon-usd:before {
|
723 |
+
content: "\e148";
|
724 |
+
}
|
725 |
+
.glyphicon-gbp:before {
|
726 |
+
content: "\e149";
|
727 |
+
}
|
728 |
+
.glyphicon-sort:before {
|
729 |
+
content: "\e150";
|
730 |
+
}
|
731 |
+
.glyphicon-sort-by-alphabet:before {
|
732 |
+
content: "\e151";
|
733 |
+
}
|
734 |
+
.glyphicon-sort-by-alphabet-alt:before {
|
735 |
+
content: "\e152";
|
736 |
+
}
|
737 |
+
.glyphicon-sort-by-order:before {
|
738 |
+
content: "\e153";
|
739 |
+
}
|
740 |
+
.glyphicon-sort-by-order-alt:before {
|
741 |
+
content: "\e154";
|
742 |
+
}
|
743 |
+
.glyphicon-sort-by-attributes:before {
|
744 |
+
content: "\e155";
|
745 |
+
}
|
746 |
+
.glyphicon-sort-by-attributes-alt:before {
|
747 |
+
content: "\e156";
|
748 |
+
}
|
749 |
+
.glyphicon-unchecked:before {
|
750 |
+
content: "\e157";
|
751 |
+
}
|
752 |
+
.glyphicon-expand:before {
|
753 |
+
content: "\e158";
|
754 |
+
}
|
755 |
+
.glyphicon-collapse-down:before {
|
756 |
+
content: "\e159";
|
757 |
+
}
|
758 |
+
.glyphicon-collapse-up:before {
|
759 |
+
content: "\e160";
|
760 |
+
}
|
761 |
+
.glyphicon-log-in:before {
|
762 |
+
content: "\e161";
|
763 |
+
}
|
764 |
+
.glyphicon-flash:before {
|
765 |
+
content: "\e162";
|
766 |
+
}
|
767 |
+
.glyphicon-log-out:before {
|
768 |
+
content: "\e163";
|
769 |
+
}
|
770 |
+
.glyphicon-new-window:before {
|
771 |
+
content: "\e164";
|
772 |
+
}
|
773 |
+
.glyphicon-record:before {
|
774 |
+
content: "\e165";
|
775 |
+
}
|
776 |
+
.glyphicon-save:before {
|
777 |
+
content: "\e166";
|
778 |
+
}
|
779 |
+
.glyphicon-open:before {
|
780 |
+
content: "\e167";
|
781 |
+
}
|
782 |
+
.glyphicon-saved:before {
|
783 |
+
content: "\e168";
|
784 |
+
}
|
785 |
+
.glyphicon-import:before {
|
786 |
+
content: "\e169";
|
787 |
+
}
|
788 |
+
.glyphicon-export:before {
|
789 |
+
content: "\e170";
|
790 |
+
}
|
791 |
+
.glyphicon-send:before {
|
792 |
+
content: "\e171";
|
793 |
+
}
|
794 |
+
.glyphicon-floppy-disk:before {
|
795 |
+
content: "\e172";
|
796 |
+
}
|
797 |
+
.glyphicon-floppy-saved:before {
|
798 |
+
content: "\e173";
|
799 |
+
}
|
800 |
+
.glyphicon-floppy-remove:before {
|
801 |
+
content: "\e174";
|
802 |
+
}
|
803 |
+
.glyphicon-floppy-save:before {
|
804 |
+
content: "\e175";
|
805 |
+
}
|
806 |
+
.glyphicon-floppy-open:before {
|
807 |
+
content: "\e176";
|
808 |
+
}
|
809 |
+
.glyphicon-credit-card:before {
|
810 |
+
content: "\e177";
|
811 |
+
}
|
812 |
+
.glyphicon-transfer:before {
|
813 |
+
content: "\e178";
|
814 |
+
}
|
815 |
+
.glyphicon-cutlery:before {
|
816 |
+
content: "\e179";
|
817 |
+
}
|
818 |
+
.glyphicon-header:before {
|
819 |
+
content: "\e180";
|
820 |
+
}
|
821 |
+
.glyphicon-compressed:before {
|
822 |
+
content: "\e181";
|
823 |
+
}
|
824 |
+
.glyphicon-earphone:before {
|
825 |
+
content: "\e182";
|
826 |
+
}
|
827 |
+
.glyphicon-phone-alt:before {
|
828 |
+
content: "\e183";
|
829 |
+
}
|
830 |
+
.glyphicon-tower:before {
|
831 |
+
content: "\e184";
|
832 |
+
}
|
833 |
+
.glyphicon-stats:before {
|
834 |
+
content: "\e185";
|
835 |
+
}
|
836 |
+
.glyphicon-sd-video:before {
|
837 |
+
content: "\e186";
|
838 |
+
}
|
839 |
+
.glyphicon-hd-video:before {
|
840 |
+
content: "\e187";
|
841 |
+
}
|
842 |
+
.glyphicon-subtitles:before {
|
843 |
+
content: "\e188";
|
844 |
+
}
|
845 |
+
.glyphicon-sound-stereo:before {
|
846 |
+
content: "\e189";
|
847 |
+
}
|
848 |
+
.glyphicon-sound-dolby:before {
|
849 |
+
content: "\e190";
|
850 |
+
}
|
851 |
+
.glyphicon-sound-5-1:before {
|
852 |
+
content: "\e191";
|
853 |
+
}
|
854 |
+
.glyphicon-sound-6-1:before {
|
855 |
+
content: "\e192";
|
856 |
+
}
|
857 |
+
.glyphicon-sound-7-1:before {
|
858 |
+
content: "\e193";
|
859 |
+
}
|
860 |
+
.glyphicon-copyright-mark:before {
|
861 |
+
content: "\e194";
|
862 |
+
}
|
863 |
+
.glyphicon-registration-mark:before {
|
864 |
+
content: "\e195";
|
865 |
+
}
|
866 |
+
.glyphicon-cloud-download:before {
|
867 |
+
content: "\e197";
|
868 |
+
}
|
869 |
+
.glyphicon-cloud-upload:before {
|
870 |
+
content: "\e198";
|
871 |
+
}
|
872 |
+
.glyphicon-tree-conifer:before {
|
873 |
+
content: "\e199";
|
874 |
+
}
|
875 |
+
.glyphicon-tree-deciduous:before {
|
876 |
+
content: "\e200";
|
877 |
+
}
|
878 |
+
* {
|
879 |
+
-webkit-box-sizing: border-box;
|
880 |
+
-moz-box-sizing: border-box;
|
881 |
+
box-sizing: border-box;
|
882 |
+
}
|
883 |
+
*:before,
|
884 |
+
*:after {
|
885 |
+
-webkit-box-sizing: border-box;
|
886 |
+
-moz-box-sizing: border-box;
|
887 |
+
box-sizing: border-box;
|
888 |
+
}
|
889 |
+
html {
|
890 |
+
font-size: 10px;
|
891 |
+
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
892 |
+
}
|
893 |
+
body {
|
894 |
+
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
895 |
+
font-size: 14px;
|
896 |
+
line-height: 1.42857143;
|
897 |
+
color: #333333;
|
898 |
+
background-color: #ffffff;
|
899 |
+
}
|
900 |
+
input,
|
901 |
+
button,
|
902 |
+
select,
|
903 |
+
textarea {
|
904 |
+
font-family: inherit;
|
905 |
+
font-size: inherit;
|
906 |
+
line-height: inherit;
|
907 |
+
}
|
908 |
+
a {
|
909 |
+
color: #428bca;
|
910 |
+
text-decoration: none;
|
911 |
+
}
|
912 |
+
a:hover,
|
913 |
+
a:focus {
|
914 |
+
color: #2a6496;
|
915 |
+
text-decoration: underline;
|
916 |
+
}
|
917 |
+
a:focus {
|
918 |
+
outline: 5px auto -webkit-focus-ring-color;
|
919 |
+
outline-offset: -2px;
|
920 |
+
}
|
921 |
+
figure {
|
922 |
+
margin: 0;
|
923 |
+
}
|
924 |
+
img {
|
925 |
+
vertical-align: middle;
|
926 |
+
}
|
927 |
+
.img-responsive,
|
928 |
+
.thumbnail > img,
|
929 |
+
.thumbnail a > img,
|
930 |
+
.carousel-inner > .item > img,
|
931 |
+
.carousel-inner > .item > a > img {
|
932 |
+
display: block;
|
933 |
+
width: 100% \9;
|
934 |
+
max-width: 100%;
|
935 |
+
height: auto;
|
936 |
+
}
|
937 |
+
.img-rounded {
|
938 |
+
border-radius: 6px;
|
939 |
+
}
|
940 |
+
.img-thumbnail {
|
941 |
+
padding: 4px;
|
942 |
+
line-height: 1.42857143;
|
943 |
+
background-color: #ffffff;
|
944 |
+
border: 1px solid #dddddd;
|
945 |
+
border-radius: 4px;
|
946 |
+
-webkit-transition: all 0.2s ease-in-out;
|
947 |
+
-o-transition: all 0.2s ease-in-out;
|
948 |
+
transition: all 0.2s ease-in-out;
|
949 |
+
display: inline-block;
|
950 |
+
width: 100% \9;
|
951 |
+
max-width: 100%;
|
952 |
+
height: auto;
|
953 |
+
}
|
954 |
+
.img-circle {
|
955 |
+
border-radius: 50%;
|
956 |
+
}
|
957 |
+
hr {
|
958 |
+
margin-top: 20px;
|
959 |
+
margin-bottom: 20px;
|
960 |
+
border: 0;
|
961 |
+
border-top: 1px solid #eeeeee;
|
962 |
+
}
|
963 |
+
.sr-only {
|
964 |
+
position: absolute;
|
965 |
+
width: 1px;
|
966 |
+
height: 1px;
|
967 |
+
margin: -1px;
|
968 |
+
padding: 0;
|
969 |
+
overflow: hidden;
|
970 |
+
clip: rect(0, 0, 0, 0);
|
971 |
+
border: 0;
|
972 |
+
}
|
973 |
+
.sr-only-focusable:active,
|
974 |
+
.sr-only-focusable:focus {
|
975 |
+
position: static;
|
976 |
+
width: auto;
|
977 |
+
height: auto;
|
978 |
+
margin: 0;
|
979 |
+
overflow: visible;
|
980 |
+
clip: auto;
|
981 |
+
}
|
982 |
+
h1,
|
983 |
+
h2,
|
984 |
+
h3,
|
985 |
+
h4,
|
986 |
+
h5,
|
987 |
+
h6,
|
988 |
+
.h1,
|
989 |
+
.h2,
|
990 |
+
.h3,
|
991 |
+
.h4,
|
992 |
+
.h5,
|
993 |
+
.h6 {
|
994 |
+
font-family: inherit;
|
995 |
+
font-weight: 500;
|
996 |
+
line-height: 1.1;
|
997 |
+
color: inherit;
|
998 |
+
}
|
999 |
+
h1 small,
|
1000 |
+
h2 small,
|
1001 |
+
h3 small,
|
1002 |
+
h4 small,
|
1003 |
+
h5 small,
|
1004 |
+
h6 small,
|
1005 |
+
.h1 small,
|
1006 |
+
.h2 small,
|
1007 |
+
.h3 small,
|
1008 |
+
.h4 small,
|
1009 |
+
.h5 small,
|
1010 |
+
.h6 small,
|
1011 |
+
h1 .small,
|
1012 |
+
h2 .small,
|
1013 |
+
h3 .small,
|
1014 |
+
h4 .small,
|
1015 |
+
h5 .small,
|
1016 |
+
h6 .small,
|
1017 |
+
.h1 .small,
|
1018 |
+
.h2 .small,
|
1019 |
+
.h3 .small,
|
1020 |
+
.h4 .small,
|
1021 |
+
.h5 .small,
|
1022 |
+
.h6 .small {
|
1023 |
+
font-weight: normal;
|
1024 |
+
line-height: 1;
|
1025 |
+
color: #777777;
|
1026 |
+
}
|
1027 |
+
h1,
|
1028 |
+
.h1,
|
1029 |
+
h2,
|
1030 |
+
.h2,
|
1031 |
+
h3,
|
1032 |
+
.h3 {
|
1033 |
+
margin-top: 20px;
|
1034 |
+
margin-bottom: 10px;
|
1035 |
+
}
|
1036 |
+
h1 small,
|
1037 |
+
.h1 small,
|
1038 |
+
h2 small,
|
1039 |
+
.h2 small,
|
1040 |
+
h3 small,
|
1041 |
+
.h3 small,
|
1042 |
+
h1 .small,
|
1043 |
+
.h1 .small,
|
1044 |
+
h2 .small,
|
1045 |
+
.h2 .small,
|
1046 |
+
h3 .small,
|
1047 |
+
.h3 .small {
|
1048 |
+
font-size: 65%;
|
1049 |
+
}
|
1050 |
+
h4,
|
1051 |
+
.h4,
|
1052 |
+
h5,
|
1053 |
+
.h5,
|
1054 |
+
h6,
|
1055 |
+
.h6 {
|
1056 |
+
margin-top: 10px;
|
1057 |
+
margin-bottom: 10px;
|
1058 |
+
}
|
1059 |
+
h4 small,
|
1060 |
+
.h4 small,
|
1061 |
+
h5 small,
|
1062 |
+
.h5 small,
|
1063 |
+
h6 small,
|
1064 |
+
.h6 small,
|
1065 |
+
h4 .small,
|
1066 |
+
.h4 .small,
|
1067 |
+
h5 .small,
|
1068 |
+
.h5 .small,
|
1069 |
+
h6 .small,
|
1070 |
+
.h6 .small {
|
1071 |
+
font-size: 75%;
|
1072 |
+
}
|
1073 |
+
h1,
|
1074 |
+
.h1 {
|
1075 |
+
font-size: 36px;
|
1076 |
+
}
|
1077 |
+
h2,
|
1078 |
+
.h2 {
|
1079 |
+
font-size: 30px;
|
1080 |
+
}
|
1081 |
+
h3,
|
1082 |
+
.h3 {
|
1083 |
+
font-size: 24px;
|
1084 |
+
}
|
1085 |
+
h4,
|
1086 |
+
.h4 {
|
1087 |
+
font-size: 18px;
|
1088 |
+
}
|
1089 |
+
h5,
|
1090 |
+
.h5 {
|
1091 |
+
font-size: 14px;
|
1092 |
+
}
|
1093 |
+
h6,
|
1094 |
+
.h6 {
|
1095 |
+
font-size: 12px;
|
1096 |
+
}
|
1097 |
+
p {
|
1098 |
+
margin: 0 0 10px;
|
1099 |
+
}
|
1100 |
+
.lead {
|
1101 |
+
margin-bottom: 20px;
|
1102 |
+
font-size: 16px;
|
1103 |
+
font-weight: 300;
|
1104 |
+
line-height: 1.4;
|
1105 |
+
}
|
1106 |
+
@media (min-width: 768px) {
|
1107 |
+
.lead {
|
1108 |
+
font-size: 21px;
|
1109 |
+
}
|
1110 |
+
}
|
1111 |
+
small,
|
1112 |
+
.small {
|
1113 |
+
font-size: 85%;
|
1114 |
+
}
|
1115 |
+
cite {
|
1116 |
+
font-style: normal;
|
1117 |
+
}
|
1118 |
+
mark,
|
1119 |
+
.mark {
|
1120 |
+
background-color: #fcf8e3;
|
1121 |
+
padding: .2em;
|
1122 |
+
}
|
1123 |
+
.text-left {
|
1124 |
+
text-align: left;
|
1125 |
+
}
|
1126 |
+
.text-right {
|
1127 |
+
text-align: right;
|
1128 |
+
}
|
1129 |
+
.text-center {
|
1130 |
+
text-align: center;
|
1131 |
+
}
|
1132 |
+
.text-justify {
|
1133 |
+
text-align: justify;
|
1134 |
+
}
|
1135 |
+
.text-nowrap {
|
1136 |
+
white-space: nowrap;
|
1137 |
+
}
|
1138 |
+
.text-lowercase {
|
1139 |
+
text-transform: lowercase;
|
1140 |
+
}
|
1141 |
+
.text-uppercase {
|
1142 |
+
text-transform: uppercase;
|
1143 |
+
}
|
1144 |
+
.text-capitalize {
|
1145 |
+
text-transform: capitalize;
|
1146 |
+
}
|
1147 |
+
.text-muted {
|
1148 |
+
color: #777777;
|
1149 |
+
}
|
1150 |
+
.text-primary {
|
1151 |
+
color: #428bca;
|
1152 |
+
}
|
1153 |
+
a.text-primary:hover {
|
1154 |
+
color: #3071a9;
|
1155 |
+
}
|
1156 |
+
.text-success {
|
1157 |
+
color: #3c763d;
|
1158 |
+
}
|
1159 |
+
a.text-success:hover {
|
1160 |
+
color: #2b542c;
|
1161 |
+
}
|
1162 |
+
.text-info {
|
1163 |
+
color: #31708f;
|
1164 |
+
}
|
1165 |
+
a.text-info:hover {
|
1166 |
+
color: #245269;
|
1167 |
+
}
|
1168 |
+
.text-warning {
|
1169 |
+
color: #8a6d3b;
|
1170 |
+
}
|
1171 |
+
a.text-warning:hover {
|
1172 |
+
color: #66512c;
|
1173 |
+
}
|
1174 |
+
.text-danger {
|
1175 |
+
color: #a94442;
|
1176 |
+
}
|
1177 |
+
a.text-danger:hover {
|
1178 |
+
color: #843534;
|
1179 |
+
}
|
1180 |
+
.bg-primary {
|
1181 |
+
color: #fff;
|
1182 |
+
background-color: #428bca;
|
1183 |
+
}
|
1184 |
+
a.bg-primary:hover {
|
1185 |
+
background-color: #3071a9;
|
1186 |
+
}
|
1187 |
+
.bg-success {
|
1188 |
+
background-color: #dff0d8;
|
1189 |
+
}
|
1190 |
+
a.bg-success:hover {
|
1191 |
+
background-color: #c1e2b3;
|
1192 |
+
}
|
1193 |
+
.bg-info {
|
1194 |
+
background-color: #d9edf7;
|
1195 |
+
}
|
1196 |
+
a.bg-info:hover {
|
1197 |
+
background-color: #afd9ee;
|
1198 |
+
}
|
1199 |
+
.bg-warning {
|
1200 |
+
background-color: #fcf8e3;
|
1201 |
+
}
|
1202 |
+
a.bg-warning:hover {
|
1203 |
+
background-color: #f7ecb5;
|
1204 |
+
}
|
1205 |
+
.bg-danger {
|
1206 |
+
background-color: #f2dede;
|
1207 |
+
}
|
1208 |
+
a.bg-danger:hover {
|
1209 |
+
background-color: #e4b9b9;
|
1210 |
+
}
|
1211 |
+
.page-header {
|
1212 |
+
padding-bottom: 9px;
|
1213 |
+
margin: 40px 0 20px;
|
1214 |
+
border-bottom: 1px solid #eeeeee;
|
1215 |
+
}
|
1216 |
+
ul,
|
1217 |
+
ol {
|
1218 |
+
margin-top: 0;
|
1219 |
+
margin-bottom: 10px;
|
1220 |
+
}
|
1221 |
+
ul ul,
|
1222 |
+
ol ul,
|
1223 |
+
ul ol,
|
1224 |
+
ol ol {
|
1225 |
+
margin-bottom: 0;
|
1226 |
+
}
|
1227 |
+
.list-unstyled {
|
1228 |
+
padding-left: 0;
|
1229 |
+
list-style: none;
|
1230 |
+
}
|
1231 |
+
.list-inline {
|
1232 |
+
padding-left: 0;
|
1233 |
+
list-style: none;
|
1234 |
+
margin-left: -5px;
|
1235 |
+
}
|
1236 |
+
.list-inline > li {
|
1237 |
+
display: inline-block;
|
1238 |
+
padding-left: 5px;
|
1239 |
+
padding-right: 5px;
|
1240 |
+
}
|
1241 |
+
dl {
|
1242 |
+
margin-top: 0;
|
1243 |
+
margin-bottom: 20px;
|
1244 |
+
}
|
1245 |
+
dt,
|
1246 |
+
dd {
|
1247 |
+
line-height: 1.42857143;
|
1248 |
+
}
|
1249 |
+
dt {
|
1250 |
+
font-weight: bold;
|
1251 |
+
}
|
1252 |
+
dd {
|
1253 |
+
margin-left: 0;
|
1254 |
+
}
|
1255 |
+
@media (min-width: 768px) {
|
1256 |
+
.dl-horizontal dt {
|
1257 |
+
float: left;
|
1258 |
+
width: 160px;
|
1259 |
+
clear: left;
|
1260 |
+
text-align: right;
|
1261 |
+
overflow: hidden;
|
1262 |
+
text-overflow: ellipsis;
|
1263 |
+
white-space: nowrap;
|
1264 |
+
}
|
1265 |
+
.dl-horizontal dd {
|
1266 |
+
margin-left: 180px;
|
1267 |
+
}
|
1268 |
+
}
|
1269 |
+
abbr[title],
|
1270 |
+
abbr[data-original-title] {
|
1271 |
+
cursor: help;
|
1272 |
+
border-bottom: 1px dotted #777777;
|
1273 |
+
}
|
1274 |
+
.initialism {
|
1275 |
+
font-size: 90%;
|
1276 |
+
text-transform: uppercase;
|
1277 |
+
}
|
1278 |
+
blockquote {
|
1279 |
+
padding: 10px 20px;
|
1280 |
+
margin: 0 0 20px;
|
1281 |
+
font-size: 17.5px;
|
1282 |
+
border-left: 5px solid #eeeeee;
|
1283 |
+
}
|
1284 |
+
blockquote p:last-child,
|
1285 |
+
blockquote ul:last-child,
|
1286 |
+
blockquote ol:last-child {
|
1287 |
+
margin-bottom: 0;
|
1288 |
+
}
|
1289 |
+
blockquote footer,
|
1290 |
+
blockquote small,
|
1291 |
+
blockquote .small {
|
1292 |
+
display: block;
|
1293 |
+
font-size: 80%;
|
1294 |
+
line-height: 1.42857143;
|
1295 |
+
color: #777777;
|
1296 |
+
}
|
1297 |
+
blockquote footer:before,
|
1298 |
+
blockquote small:before,
|
1299 |
+
blockquote .small:before {
|
1300 |
+
content: '\2014 \00A0';
|
1301 |
+
}
|
1302 |
+
.blockquote-reverse,
|
1303 |
+
blockquote.pull-right {
|
1304 |
+
padding-right: 15px;
|
1305 |
+
padding-left: 0;
|
1306 |
+
border-right: 5px solid #eeeeee;
|
1307 |
+
border-left: 0;
|
1308 |
+
text-align: right;
|
1309 |
+
}
|
1310 |
+
.blockquote-reverse footer:before,
|
1311 |
+
blockquote.pull-right footer:before,
|
1312 |
+
.blockquote-reverse small:before,
|
1313 |
+
blockquote.pull-right small:before,
|
1314 |
+
.blockquote-reverse .small:before,
|
1315 |
+
blockquote.pull-right .small:before {
|
1316 |
+
content: '';
|
1317 |
+
}
|
1318 |
+
.blockquote-reverse footer:after,
|
1319 |
+
blockquote.pull-right footer:after,
|
1320 |
+
.blockquote-reverse small:after,
|
1321 |
+
blockquote.pull-right small:after,
|
1322 |
+
.blockquote-reverse .small:after,
|
1323 |
+
blockquote.pull-right .small:after {
|
1324 |
+
content: '\00A0 \2014';
|
1325 |
+
}
|
1326 |
+
blockquote:before,
|
1327 |
+
blockquote:after {
|
1328 |
+
content: "";
|
1329 |
+
}
|
1330 |
+
address {
|
1331 |
+
margin-bottom: 20px;
|
1332 |
+
font-style: normal;
|
1333 |
+
line-height: 1.42857143;
|
1334 |
+
}
|
1335 |
+
code,
|
1336 |
+
kbd,
|
1337 |
+
pre,
|
1338 |
+
samp {
|
1339 |
+
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
1340 |
+
}
|
1341 |
+
code {
|
1342 |
+
padding: 2px 4px;
|
1343 |
+
font-size: 90%;
|
1344 |
+
color: #c7254e;
|
1345 |
+
background-color: #f9f2f4;
|
1346 |
+
border-radius: 4px;
|
1347 |
+
}
|
1348 |
+
kbd {
|
1349 |
+
padding: 2px 4px;
|
1350 |
+
font-size: 90%;
|
1351 |
+
color: #ffffff;
|
1352 |
+
background-color: #333333;
|
1353 |
+
border-radius: 3px;
|
1354 |
+
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
|
1355 |
+
}
|
1356 |
+
kbd kbd {
|
1357 |
+
padding: 0;
|
1358 |
+
font-size: 100%;
|
1359 |
+
box-shadow: none;
|
1360 |
+
}
|
1361 |
+
pre {
|
1362 |
+
display: block;
|
1363 |
+
padding: 9.5px;
|
1364 |
+
margin: 0 0 10px;
|
1365 |
+
font-size: 13px;
|
1366 |
+
line-height: 1.42857143;
|
1367 |
+
word-break: break-all;
|
1368 |
+
word-wrap: break-word;
|
1369 |
+
color: #333333;
|
1370 |
+
background-color: #f5f5f5;
|
1371 |
+
border: 1px solid #cccccc;
|
1372 |
+
border-radius: 4px;
|
1373 |
+
}
|
1374 |
+
pre code {
|
1375 |
+
padding: 0;
|
1376 |
+
font-size: inherit;
|
1377 |
+
color: inherit;
|
1378 |
+
white-space: pre-wrap;
|
1379 |
+
background-color: transparent;
|
1380 |
+
border-radius: 0;
|
1381 |
+
}
|
1382 |
+
.pre-scrollable {
|
1383 |
+
max-height: 340px;
|
1384 |
+
overflow-y: scroll;
|
1385 |
+
}
|
1386 |
+
.container {
|
1387 |
+
margin-right: auto;
|
1388 |
+
margin-left: auto;
|
1389 |
+
padding-left: 15px;
|
1390 |
+
padding-right: 15px;
|
1391 |
+
}
|
1392 |
+
@media (min-width: 768px) {
|
1393 |
+
.container {
|
1394 |
+
width: 750px;
|
1395 |
+
}
|
1396 |
+
}
|
1397 |
+
@media (min-width: 992px) {
|
1398 |
+
.container {
|
1399 |
+
width: 970px;
|
1400 |
+
}
|
1401 |
+
}
|
1402 |
+
@media (min-width: 1200px) {
|
1403 |
+
.container {
|
1404 |
+
width: 1170px;
|
1405 |
+
}
|
1406 |
+
}
|
1407 |
+
.container-fluid {
|
1408 |
+
margin-right: auto;
|
1409 |
+
margin-left: auto;
|
1410 |
+
padding-left: 15px;
|
1411 |
+
padding-right: 15px;
|
1412 |
+
}
|
1413 |
+
.row {
|
1414 |
+
margin-left: -15px;
|
1415 |
+
margin-right: -15px;
|
1416 |
+
}
|
1417 |
+
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
|
1418 |
+
position: relative;
|
1419 |
+
min-height: 1px;
|
1420 |
+
padding-left: 15px;
|
1421 |
+
padding-right: 15px;
|
1422 |
+
}
|
1423 |
+
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
|
1424 |
+
float: left;
|
1425 |
+
}
|
1426 |
+
.col-xs-12 {
|
1427 |
+
width: 100%;
|
1428 |
+
}
|
1429 |
+
.col-xs-11 {
|
1430 |
+
width: 91.66666667%;
|
1431 |
+
}
|
1432 |
+
.col-xs-10 {
|
1433 |
+
width: 83.33333333%;
|
1434 |
+
}
|
1435 |
+
.col-xs-9 {
|
1436 |
+
width: 75%;
|
1437 |
+
}
|
1438 |
+
.col-xs-8 {
|
1439 |
+
width: 66.66666667%;
|
1440 |
+
}
|
1441 |
+
.col-xs-7 {
|
1442 |
+
width: 58.33333333%;
|
1443 |
+
}
|
1444 |
+
.col-xs-6 {
|
1445 |
+
width: 50%;
|
1446 |
+
}
|
1447 |
+
.col-xs-5 {
|
1448 |
+
width: 41.66666667%;
|
1449 |
+
}
|
1450 |
+
.col-xs-4 {
|
1451 |
+
width: 33.33333333%;
|
1452 |
+
}
|
1453 |
+
.col-xs-3 {
|
1454 |
+
width: 25%;
|
1455 |
+
}
|
1456 |
+
.col-xs-2 {
|
1457 |
+
width: 16.66666667%;
|
1458 |
+
}
|
1459 |
+
.col-xs-1 {
|
1460 |
+
width: 8.33333333%;
|
1461 |
+
}
|
1462 |
+
.col-xs-pull-12 {
|
1463 |
+
right: 100%;
|
1464 |
+
}
|
1465 |
+
.col-xs-pull-11 {
|
1466 |
+
right: 91.66666667%;
|
1467 |
+
}
|
1468 |
+
.col-xs-pull-10 {
|
1469 |
+
right: 83.33333333%;
|
1470 |
+
}
|
1471 |
+
.col-xs-pull-9 {
|
1472 |
+
right: 75%;
|
1473 |
+
}
|
1474 |
+
.col-xs-pull-8 {
|
1475 |
+
right: 66.66666667%;
|
1476 |
+
}
|
1477 |
+
.col-xs-pull-7 {
|
1478 |
+
right: 58.33333333%;
|
1479 |
+
}
|
1480 |
+
.col-xs-pull-6 {
|
1481 |
+
right: 50%;
|
1482 |
+
}
|
1483 |
+
.col-xs-pull-5 {
|
1484 |
+
right: 41.66666667%;
|
1485 |
+
}
|
1486 |
+
.col-xs-pull-4 {
|
1487 |
+
right: 33.33333333%;
|
1488 |
+
}
|
1489 |
+
.col-xs-pull-3 {
|
1490 |
+
right: 25%;
|
1491 |
+
}
|
1492 |
+
.col-xs-pull-2 {
|
1493 |
+
right: 16.66666667%;
|
1494 |
+
}
|
1495 |
+
.col-xs-pull-1 {
|
1496 |
+
right: 8.33333333%;
|
1497 |
+
}
|
1498 |
+
.col-xs-pull-0 {
|
1499 |
+
right: auto;
|
1500 |
+
}
|
1501 |
+
.col-xs-push-12 {
|
1502 |
+
left: 100%;
|
1503 |
+
}
|
1504 |
+
.col-xs-push-11 {
|
1505 |
+
left: 91.66666667%;
|
1506 |
+
}
|
1507 |
+
.col-xs-push-10 {
|
1508 |
+
left: 83.33333333%;
|
1509 |
+
}
|
1510 |
+
.col-xs-push-9 {
|
1511 |
+
left: 75%;
|
1512 |
+
}
|
1513 |
+
.col-xs-push-8 {
|
1514 |
+
left: 66.66666667%;
|
1515 |
+
}
|
1516 |
+
.col-xs-push-7 {
|
1517 |
+
left: 58.33333333%;
|
1518 |
+
}
|
1519 |
+
.col-xs-push-6 {
|
1520 |
+
left: 50%;
|
1521 |
+
}
|
1522 |
+
.col-xs-push-5 {
|
1523 |
+
left: 41.66666667%;
|
1524 |
+
}
|
1525 |
+
.col-xs-push-4 {
|
1526 |
+
left: 33.33333333%;
|
1527 |
+
}
|
1528 |
+
.col-xs-push-3 {
|
1529 |
+
left: 25%;
|
1530 |
+
}
|
1531 |
+
.col-xs-push-2 {
|
1532 |
+
left: 16.66666667%;
|
1533 |
+
}
|
1534 |
+
.col-xs-push-1 {
|
1535 |
+
left: 8.33333333%;
|
1536 |
+
}
|
1537 |
+
.col-xs-push-0 {
|
1538 |
+
left: auto;
|
1539 |
+
}
|
1540 |
+
.col-xs-offset-12 {
|
1541 |
+
margin-left: 100%;
|
1542 |
+
}
|
1543 |
+
.col-xs-offset-11 {
|
1544 |
+
margin-left: 91.66666667%;
|
1545 |
+
}
|
1546 |
+
.col-xs-offset-10 {
|
1547 |
+
margin-left: 83.33333333%;
|
1548 |
+
}
|
1549 |
+
.col-xs-offset-9 {
|
1550 |
+
margin-left: 75%;
|
1551 |
+
}
|
1552 |
+
.col-xs-offset-8 {
|
1553 |
+
margin-left: 66.66666667%;
|
1554 |
+
}
|
1555 |
+
.col-xs-offset-7 {
|
1556 |
+
margin-left: 58.33333333%;
|
1557 |
+
}
|
1558 |
+
.col-xs-offset-6 {
|
1559 |
+
margin-left: 50%;
|
1560 |
+
}
|
1561 |
+
.col-xs-offset-5 {
|
1562 |
+
margin-left: 41.66666667%;
|
1563 |
+
}
|
1564 |
+
.col-xs-offset-4 {
|
1565 |
+
margin-left: 33.33333333%;
|
1566 |
+
}
|
1567 |
+
.col-xs-offset-3 {
|
1568 |
+
margin-left: 25%;
|
1569 |
+
}
|
1570 |
+
.col-xs-offset-2 {
|
1571 |
+
margin-left: 16.66666667%;
|
1572 |
+
}
|
1573 |
+
.col-xs-offset-1 {
|
1574 |
+
margin-left: 8.33333333%;
|
1575 |
+
}
|
1576 |
+
.col-xs-offset-0 {
|
1577 |
+
margin-left: 0%;
|
1578 |
+
}
|
1579 |
+
@media (min-width: 768px) {
|
1580 |
+
.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
|
1581 |
+
float: left;
|
1582 |
+
}
|
1583 |
+
.col-sm-12 {
|
1584 |
+
width: 100%;
|
1585 |
+
}
|
1586 |
+
.col-sm-11 {
|
1587 |
+
width: 91.66666667%;
|
1588 |
+
}
|
1589 |
+
.col-sm-10 {
|
1590 |
+
width: 83.33333333%;
|
1591 |
+
}
|
1592 |
+
.col-sm-9 {
|
1593 |
+
width: 75%;
|
1594 |
+
}
|
1595 |
+
.col-sm-8 {
|
1596 |
+
width: 66.66666667%;
|
1597 |
+
}
|
1598 |
+
.col-sm-7 {
|
1599 |
+
width: 58.33333333%;
|
1600 |
+
}
|
1601 |
+
.col-sm-6 {
|
1602 |
+
width: 50%;
|
1603 |
+
}
|
1604 |
+
.col-sm-5 {
|
1605 |
+
width: 41.66666667%;
|
1606 |
+
}
|
1607 |
+
.col-sm-4 {
|
1608 |
+
width: 33.33333333%;
|
1609 |
+
}
|
1610 |
+
.col-sm-3 {
|
1611 |
+
width: 25%;
|
1612 |
+
}
|
1613 |
+
.col-sm-2 {
|
1614 |
+
width: 16.66666667%;
|
1615 |
+
}
|
1616 |
+
.col-sm-1 {
|
1617 |
+
width: 8.33333333%;
|
1618 |
+
}
|
1619 |
+
.col-sm-pull-12 {
|
1620 |
+
right: 100%;
|
1621 |
+
}
|
1622 |
+
.col-sm-pull-11 {
|
1623 |
+
right: 91.66666667%;
|
1624 |
+
}
|
1625 |
+
.col-sm-pull-10 {
|
1626 |
+
right: 83.33333333%;
|
1627 |
+
}
|
1628 |
+
.col-sm-pull-9 {
|
1629 |
+
right: 75%;
|
1630 |
+
}
|
1631 |
+
.col-sm-pull-8 {
|
1632 |
+
right: 66.66666667%;
|
1633 |
+
}
|
1634 |
+
.col-sm-pull-7 {
|
1635 |
+
right: 58.33333333%;
|
1636 |
+
}
|
1637 |
+
.col-sm-pull-6 {
|
1638 |
+
right: 50%;
|
1639 |
+
}
|
1640 |
+
.col-sm-pull-5 {
|
1641 |
+
right: 41.66666667%;
|
1642 |
+
}
|
1643 |
+
.col-sm-pull-4 {
|
1644 |
+
right: 33.33333333%;
|
1645 |
+
}
|
1646 |
+
.col-sm-pull-3 {
|
1647 |
+
right: 25%;
|
1648 |
+
}
|
1649 |
+
.col-sm-pull-2 {
|
1650 |
+
right: 16.66666667%;
|
1651 |
+
}
|
1652 |
+
.col-sm-pull-1 {
|
1653 |
+
right: 8.33333333%;
|
1654 |
+
}
|
1655 |
+
.col-sm-pull-0 {
|
1656 |
+
right: auto;
|
1657 |
+
}
|
1658 |
+
.col-sm-push-12 {
|
1659 |
+
left: 100%;
|
1660 |
+
}
|
1661 |
+
.col-sm-push-11 {
|
1662 |
+
left: 91.66666667%;
|
1663 |
+
}
|
1664 |
+
.col-sm-push-10 {
|
1665 |
+
left: 83.33333333%;
|
1666 |
+
}
|
1667 |
+
.col-sm-push-9 {
|
1668 |
+
left: 75%;
|
1669 |
+
}
|
1670 |
+
.col-sm-push-8 {
|
1671 |
+
left: 66.66666667%;
|
1672 |
+
}
|
1673 |
+
.col-sm-push-7 {
|
1674 |
+
left: 58.33333333%;
|
1675 |
+
}
|
1676 |
+
.col-sm-push-6 {
|
1677 |
+
left: 50%;
|
1678 |
+
}
|
1679 |
+
.col-sm-push-5 {
|
1680 |
+
left: 41.66666667%;
|
1681 |
+
}
|
1682 |
+
.col-sm-push-4 {
|
1683 |
+
left: 33.33333333%;
|
1684 |
+
}
|
1685 |
+
.col-sm-push-3 {
|
1686 |
+
left: 25%;
|
1687 |
+
}
|
1688 |
+
.col-sm-push-2 {
|
1689 |
+
left: 16.66666667%;
|
1690 |
+
}
|
1691 |
+
.col-sm-push-1 {
|
1692 |
+
left: 8.33333333%;
|
1693 |
+
}
|
1694 |
+
.col-sm-push-0 {
|
1695 |
+
left: auto;
|
1696 |
+
}
|
1697 |
+
.col-sm-offset-12 {
|
1698 |
+
margin-left: 100%;
|
1699 |
+
}
|
1700 |
+
.col-sm-offset-11 {
|
1701 |
+
margin-left: 91.66666667%;
|
1702 |
+
}
|
1703 |
+
.col-sm-offset-10 {
|
1704 |
+
margin-left: 83.33333333%;
|
1705 |
+
}
|
1706 |
+
.col-sm-offset-9 {
|
1707 |
+
margin-left: 75%;
|
1708 |
+
}
|
1709 |
+
.col-sm-offset-8 {
|
1710 |
+
margin-left: 66.66666667%;
|
1711 |
+
}
|
1712 |
+
.col-sm-offset-7 {
|
1713 |
+
margin-left: 58.33333333%;
|
1714 |
+
}
|
1715 |
+
.col-sm-offset-6 {
|
1716 |
+
margin-left: 50%;
|
1717 |
+
}
|
1718 |
+
.col-sm-offset-5 {
|
1719 |
+
margin-left: 41.66666667%;
|
1720 |
+
}
|
1721 |
+
.col-sm-offset-4 {
|
1722 |
+
margin-left: 33.33333333%;
|
1723 |
+
}
|
1724 |
+
.col-sm-offset-3 {
|
1725 |
+
margin-left: 25%;
|
1726 |
+
}
|
1727 |
+
.col-sm-offset-2 {
|
1728 |
+
margin-left: 16.66666667%;
|
1729 |
+
}
|
1730 |
+
.col-sm-offset-1 {
|
1731 |
+
margin-left: 8.33333333%;
|
1732 |
+
}
|
1733 |
+
.col-sm-offset-0 {
|
1734 |
+
margin-left: 0%;
|
1735 |
+
}
|
1736 |
+
}
|
1737 |
+
@media (min-width: 992px) {
|
1738 |
+
.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
|
1739 |
+
float: left;
|
1740 |
+
}
|
1741 |
+
.col-md-12 {
|
1742 |
+
width: 100%;
|
1743 |
+
}
|
1744 |
+
.col-md-11 {
|
1745 |
+
width: 91.66666667%;
|
1746 |
+
}
|
1747 |
+
.col-md-10 {
|
1748 |
+
width: 83.33333333%;
|
1749 |
+
}
|
1750 |
+
.col-md-9 {
|
1751 |
+
width: 75%;
|
1752 |
+
}
|
1753 |
+
.col-md-8 {
|
1754 |
+
width: 66.66666667%;
|
1755 |
+
}
|
1756 |
+
.col-md-7 {
|
1757 |
+
width: 58.33333333%;
|
1758 |
+
}
|
1759 |
+
.col-md-6 {
|
1760 |
+
width: 50%;
|
1761 |
+
}
|
1762 |
+
.col-md-5 {
|
1763 |
+
width: 41.66666667%;
|
1764 |
+
}
|
1765 |
+
.col-md-4 {
|
1766 |
+
width: 33.33333333%;
|
1767 |
+
}
|
1768 |
+
.col-md-3 {
|
1769 |
+
width: 25%;
|
1770 |
+
}
|
1771 |
+
.col-md-2 {
|
1772 |
+
width: 16.66666667%;
|
1773 |
+
}
|
1774 |
+
.col-md-1 {
|
1775 |
+
width: 8.33333333%;
|
1776 |
+
}
|
1777 |
+
.col-md-pull-12 {
|
1778 |
+
right: 100%;
|
1779 |
+
}
|
1780 |
+
.col-md-pull-11 {
|
1781 |
+
right: 91.66666667%;
|
1782 |
+
}
|
1783 |
+
.col-md-pull-10 {
|
1784 |
+
right: 83.33333333%;
|
1785 |
+
}
|
1786 |
+
.col-md-pull-9 {
|
1787 |
+
right: 75%;
|
1788 |
+
}
|
1789 |
+
.col-md-pull-8 {
|
1790 |
+
right: 66.66666667%;
|
1791 |
+
}
|
1792 |
+
.col-md-pull-7 {
|
1793 |
+
right: 58.33333333%;
|
1794 |
+
}
|
1795 |
+
.col-md-pull-6 {
|
1796 |
+
right: 50%;
|
1797 |
+
}
|
1798 |
+
.col-md-pull-5 {
|
1799 |
+
right: 41.66666667%;
|
1800 |
+
}
|
1801 |
+
.col-md-pull-4 {
|
1802 |
+
right: 33.33333333%;
|
1803 |
+
}
|
1804 |
+
.col-md-pull-3 {
|
1805 |
+
right: 25%;
|
1806 |
+
}
|
1807 |
+
.col-md-pull-2 {
|
1808 |
+
right: 16.66666667%;
|
1809 |
+
}
|
1810 |
+
.col-md-pull-1 {
|
1811 |
+
right: 8.33333333%;
|
1812 |
+
}
|
1813 |
+
.col-md-pull-0 {
|
1814 |
+
right: auto;
|
1815 |
+
}
|
1816 |
+
.col-md-push-12 {
|
1817 |
+
left: 100%;
|
1818 |
+
}
|
1819 |
+
.col-md-push-11 {
|
1820 |
+
left: 91.66666667%;
|
1821 |
+
}
|
1822 |
+
.col-md-push-10 {
|
1823 |
+
left: 83.33333333%;
|
1824 |
+
}
|
1825 |
+
.col-md-push-9 {
|
1826 |
+
left: 75%;
|
1827 |
+
}
|
1828 |
+
.col-md-push-8 {
|
1829 |
+
left: 66.66666667%;
|
1830 |
+
}
|
1831 |
+
.col-md-push-7 {
|
1832 |
+
left: 58.33333333%;
|
1833 |
+
}
|
1834 |
+
.col-md-push-6 {
|
1835 |
+
left: 50%;
|
1836 |
+
}
|
1837 |
+
.col-md-push-5 {
|
1838 |
+
left: 41.66666667%;
|
1839 |
+
}
|
1840 |
+
.col-md-push-4 {
|
1841 |
+
left: 33.33333333%;
|
1842 |
+
}
|
1843 |
+
.col-md-push-3 {
|
1844 |
+
left: 25%;
|
1845 |
+
}
|
1846 |
+
.col-md-push-2 {
|
1847 |
+
left: 16.66666667%;
|
1848 |
+
}
|
1849 |
+
.col-md-push-1 {
|
1850 |
+
left: 8.33333333%;
|
1851 |
+
}
|
1852 |
+
.col-md-push-0 {
|
1853 |
+
left: auto;
|
1854 |
+
}
|
1855 |
+
.col-md-offset-12 {
|
1856 |
+
margin-left: 100%;
|
1857 |
+
}
|
1858 |
+
.col-md-offset-11 {
|
1859 |
+
margin-left: 91.66666667%;
|
1860 |
+
}
|
1861 |
+
.col-md-offset-10 {
|
1862 |
+
margin-left: 83.33333333%;
|
1863 |
+
}
|
1864 |
+
.col-md-offset-9 {
|
1865 |
+
margin-left: 75%;
|
1866 |
+
}
|
1867 |
+
.col-md-offset-8 {
|
1868 |
+
margin-left: 66.66666667%;
|
1869 |
+
}
|
1870 |
+
.col-md-offset-7 {
|
1871 |
+
margin-left: 58.33333333%;
|
1872 |
+
}
|
1873 |
+
.col-md-offset-6 {
|
1874 |
+
margin-left: 50%;
|
1875 |
+
}
|
1876 |
+
.col-md-offset-5 {
|
1877 |
+
margin-left: 41.66666667%;
|
1878 |
+
}
|
1879 |
+
.col-md-offset-4 {
|
1880 |
+
margin-left: 33.33333333%;
|
1881 |
+
}
|
1882 |
+
.col-md-offset-3 {
|
1883 |
+
margin-left: 25%;
|
1884 |
+
}
|
1885 |
+
.col-md-offset-2 {
|
1886 |
+
margin-left: 16.66666667%;
|
1887 |
+
}
|
1888 |
+
.col-md-offset-1 {
|
1889 |
+
margin-left: 8.33333333%;
|
1890 |
+
}
|
1891 |
+
.col-md-offset-0 {
|
1892 |
+
margin-left: 0%;
|
1893 |
+
}
|
1894 |
+
}
|
1895 |
+
@media (min-width: 1200px) {
|
1896 |
+
.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
|
1897 |
+
float: left;
|
1898 |
+
}
|
1899 |
+
.col-lg-12 {
|
1900 |
+
width: 100%;
|
1901 |
+
}
|
1902 |
+
.col-lg-11 {
|
1903 |
+
width: 91.66666667%;
|
1904 |
+
}
|
1905 |
+
.col-lg-10 {
|
1906 |
+
width: 83.33333333%;
|
1907 |
+
}
|
1908 |
+
.col-lg-9 {
|
1909 |
+
width: 75%;
|
1910 |
+
}
|
1911 |
+
.col-lg-8 {
|
1912 |
+
width: 66.66666667%;
|
1913 |
+
}
|
1914 |
+
.col-lg-7 {
|
1915 |
+
width: 58.33333333%;
|
1916 |
+
}
|
1917 |
+
.col-lg-6 {
|
1918 |
+
width: 50%;
|
1919 |
+
}
|
1920 |
+
.col-lg-5 {
|
1921 |
+
width: 41.66666667%;
|
1922 |
+
}
|
1923 |
+
.col-lg-4 {
|
1924 |
+
width: 33.33333333%;
|
1925 |
+
}
|
1926 |
+
.col-lg-3 {
|
1927 |
+
width: 25%;
|
1928 |
+
}
|
1929 |
+
.col-lg-2 {
|
1930 |
+
width: 16.66666667%;
|
1931 |
+
}
|
1932 |
+
.col-lg-1 {
|
1933 |
+
width: 8.33333333%;
|
1934 |
+
}
|
1935 |
+
.col-lg-pull-12 {
|
1936 |
+
right: 100%;
|
1937 |
+
}
|
1938 |
+
.col-lg-pull-11 {
|
1939 |
+
right: 91.66666667%;
|
1940 |
+
}
|
1941 |
+
.col-lg-pull-10 {
|
1942 |
+
right: 83.33333333%;
|
1943 |
+
}
|
1944 |
+
.col-lg-pull-9 {
|
1945 |
+
right: 75%;
|
1946 |
+
}
|
1947 |
+
.col-lg-pull-8 {
|
1948 |
+
right: 66.66666667%;
|
1949 |
+
}
|
1950 |
+
.col-lg-pull-7 {
|
1951 |
+
right: 58.33333333%;
|
1952 |
+
}
|
1953 |
+
.col-lg-pull-6 {
|
1954 |
+
right: 50%;
|
1955 |
+
}
|
1956 |
+
.col-lg-pull-5 {
|
1957 |
+
right: 41.66666667%;
|
1958 |
+
}
|
1959 |
+
.col-lg-pull-4 {
|
1960 |
+
right: 33.33333333%;
|
1961 |
+
}
|
1962 |
+
.col-lg-pull-3 {
|
1963 |
+
right: 25%;
|
1964 |
+
}
|
1965 |
+
.col-lg-pull-2 {
|
1966 |
+
right: 16.66666667%;
|
1967 |
+
}
|
1968 |
+
.col-lg-pull-1 {
|
1969 |
+
right: 8.33333333%;
|
1970 |
+
}
|
1971 |
+
.col-lg-pull-0 {
|
1972 |
+
right: auto;
|
1973 |
+
}
|
1974 |
+
.col-lg-push-12 {
|
1975 |
+
left: 100%;
|
1976 |
+
}
|
1977 |
+
.col-lg-push-11 {
|
1978 |
+
left: 91.66666667%;
|
1979 |
+
}
|
1980 |
+
.col-lg-push-10 {
|
1981 |
+
left: 83.33333333%;
|
1982 |
+
}
|
1983 |
+
.col-lg-push-9 {
|
1984 |
+
left: 75%;
|
1985 |
+
}
|
1986 |
+
.col-lg-push-8 {
|
1987 |
+
left: 66.66666667%;
|
1988 |
+
}
|
1989 |
+
.col-lg-push-7 {
|
1990 |
+
left: 58.33333333%;
|
1991 |
+
}
|
1992 |
+
.col-lg-push-6 {
|
1993 |
+
left: 50%;
|
1994 |
+
}
|
1995 |
+
.col-lg-push-5 {
|
1996 |
+
left: 41.66666667%;
|
1997 |
+
}
|
1998 |
+
.col-lg-push-4 {
|
1999 |
+
left: 33.33333333%;
|
2000 |
+
}
|
2001 |
+
.col-lg-push-3 {
|
2002 |
+
left: 25%;
|
2003 |
+
}
|
2004 |
+
.col-lg-push-2 {
|
2005 |
+
left: 16.66666667%;
|
2006 |
+
}
|
2007 |
+
.col-lg-push-1 {
|
2008 |
+
left: 8.33333333%;
|
2009 |
+
}
|
2010 |
+
.col-lg-push-0 {
|
2011 |
+
left: auto;
|
2012 |
+
}
|
2013 |
+
.col-lg-offset-12 {
|
2014 |
+
margin-left: 100%;
|
2015 |
+
}
|
2016 |
+
.col-lg-offset-11 {
|
2017 |
+
margin-left: 91.66666667%;
|
2018 |
+
}
|
2019 |
+
.col-lg-offset-10 {
|
2020 |
+
margin-left: 83.33333333%;
|
2021 |
+
}
|
2022 |
+
.col-lg-offset-9 {
|
2023 |
+
margin-left: 75%;
|
2024 |
+
}
|
2025 |
+
.col-lg-offset-8 {
|
2026 |
+
margin-left: 66.66666667%;
|
2027 |
+
}
|
2028 |
+
.col-lg-offset-7 {
|
2029 |
+
margin-left: 58.33333333%;
|
2030 |
+
}
|
2031 |
+
.col-lg-offset-6 {
|
2032 |
+
margin-left: 50%;
|
2033 |
+
}
|
2034 |
+
.col-lg-offset-5 {
|
2035 |
+
margin-left: 41.66666667%;
|
2036 |
+
}
|
2037 |
+
.col-lg-offset-4 {
|
2038 |
+
margin-left: 33.33333333%;
|
2039 |
+
}
|
2040 |
+
.col-lg-offset-3 {
|
2041 |
+
margin-left: 25%;
|
2042 |
+
}
|
2043 |
+
.col-lg-offset-2 {
|
2044 |
+
margin-left: 16.66666667%;
|
2045 |
+
}
|
2046 |
+
.col-lg-offset-1 {
|
2047 |
+
margin-left: 8.33333333%;
|
2048 |
+
}
|
2049 |
+
.col-lg-offset-0 {
|
2050 |
+
margin-left: 0%;
|
2051 |
+
}
|
2052 |
+
}
|
2053 |
+
table {
|
2054 |
+
background-color: transparent;
|
2055 |
+
}
|
2056 |
+
th {
|
2057 |
+
text-align: left;
|
2058 |
+
}
|
2059 |
+
.table {
|
2060 |
+
width: 100%;
|
2061 |
+
max-width: 100%;
|
2062 |
+
margin-bottom: 20px;
|
2063 |
+
}
|
2064 |
+
.table > thead > tr > th,
|
2065 |
+
.table > tbody > tr > th,
|
2066 |
+
.table > tfoot > tr > th,
|
2067 |
+
.table > thead > tr > td,
|
2068 |
+
.table > tbody > tr > td,
|
2069 |
+
.table > tfoot > tr > td {
|
2070 |
+
padding: 8px;
|
2071 |
+
line-height: 1.42857143;
|
2072 |
+
vertical-align: top;
|
2073 |
+
border-top: 1px solid #dddddd;
|
2074 |
+
}
|
2075 |
+
.table > thead > tr > th {
|
2076 |
+
vertical-align: bottom;
|
2077 |
+
border-bottom: 2px solid #dddddd;
|
2078 |
+
}
|
2079 |
+
.table > caption + thead > tr:first-child > th,
|
2080 |
+
.table > colgroup + thead > tr:first-child > th,
|
2081 |
+
.table > thead:first-child > tr:first-child > th,
|
2082 |
+
.table > caption + thead > tr:first-child > td,
|
2083 |
+
.table > colgroup + thead > tr:first-child > td,
|
2084 |
+
.table > thead:first-child > tr:first-child > td {
|
2085 |
+
border-top: 0;
|
2086 |
+
}
|
2087 |
+
.table > tbody + tbody {
|
2088 |
+
border-top: 2px solid #dddddd;
|
2089 |
+
}
|
2090 |
+
.table .table {
|
2091 |
+
background-color: #ffffff;
|
2092 |
+
}
|
2093 |
+
.table-condensed > thead > tr > th,
|
2094 |
+
.table-condensed > tbody > tr > th,
|
2095 |
+
.table-condensed > tfoot > tr > th,
|
2096 |
+
.table-condensed > thead > tr > td,
|
2097 |
+
.table-condensed > tbody > tr > td,
|
2098 |
+
.table-condensed > tfoot > tr > td {
|
2099 |
+
padding: 5px;
|
2100 |
+
}
|
2101 |
+
.table-bordered {
|
2102 |
+
border: 1px solid #dddddd;
|
2103 |
+
}
|
2104 |
+
.table-bordered > thead > tr > th,
|
2105 |
+
.table-bordered > tbody > tr > th,
|
2106 |
+
.table-bordered > tfoot > tr > th,
|
2107 |
+
.table-bordered > thead > tr > td,
|
2108 |
+
.table-bordered > tbody > tr > td,
|
2109 |
+
.table-bordered > tfoot > tr > td {
|
2110 |
+
border: 1px solid #dddddd;
|
2111 |
+
}
|
2112 |
+
.table-bordered > thead > tr > th,
|
2113 |
+
.table-bordered > thead > tr > td {
|
2114 |
+
border-bottom-width: 2px;
|
2115 |
+
}
|
2116 |
+
.table-striped > tbody > tr:nth-child(odd) > td,
|
2117 |
+
.table-striped > tbody > tr:nth-child(odd) > th {
|
2118 |
+
background-color: #f9f9f9;
|
2119 |
+
}
|
2120 |
+
.table-hover > tbody > tr:hover > td,
|
2121 |
+
.table-hover > tbody > tr:hover > th {
|
2122 |
+
background-color: #f5f5f5;
|
2123 |
+
}
|
2124 |
+
table col[class*="col-"] {
|
2125 |
+
position: static;
|
2126 |
+
float: none;
|
2127 |
+
display: table-column;
|
2128 |
+
}
|
2129 |
+
table td[class*="col-"],
|
2130 |
+
table th[class*="col-"] {
|
2131 |
+
position: static;
|
2132 |
+
float: none;
|
2133 |
+
display: table-cell;
|
2134 |
+
}
|
2135 |
+
.table > thead > tr > td.active,
|
2136 |
+
.table > tbody > tr > td.active,
|
2137 |
+
.table > tfoot > tr > td.active,
|
2138 |
+
.table > thead > tr > th.active,
|
2139 |
+
.table > tbody > tr > th.active,
|
2140 |
+
.table > tfoot > tr > th.active,
|
2141 |
+
.table > thead > tr.active > td,
|
2142 |
+
.table > tbody > tr.active > td,
|
2143 |
+
.table > tfoot > tr.active > td,
|
2144 |
+
.table > thead > tr.active > th,
|
2145 |
+
.table > tbody > tr.active > th,
|
2146 |
+
.table > tfoot > tr.active > th {
|
2147 |
+
background-color: #f5f5f5;
|
2148 |
+
}
|
2149 |
+
.table-hover > tbody > tr > td.active:hover,
|
2150 |
+
.table-hover > tbody > tr > th.active:hover,
|
2151 |
+
.table-hover > tbody > tr.active:hover > td,
|
2152 |
+
.table-hover > tbody > tr:hover > .active,
|
2153 |
+
.table-hover > tbody > tr.active:hover > th {
|
2154 |
+
background-color: #e8e8e8;
|
2155 |
+
}
|
2156 |
+
.table > thead > tr > td.success,
|
2157 |
+
.table > tbody > tr > td.success,
|
2158 |
+
.table > tfoot > tr > td.success,
|
2159 |
+
.table > thead > tr > th.success,
|
2160 |
+
.table > tbody > tr > th.success,
|
2161 |
+
.table > tfoot > tr > th.success,
|
2162 |
+
.table > thead > tr.success > td,
|
2163 |
+
.table > tbody > tr.success > td,
|
2164 |
+
.table > tfoot > tr.success > td,
|
2165 |
+
.table > thead > tr.success > th,
|
2166 |
+
.table > tbody > tr.success > th,
|
2167 |
+
.table > tfoot > tr.success > th {
|
2168 |
+
background-color: #dff0d8;
|
2169 |
+
}
|
2170 |
+
.table-hover > tbody > tr > td.success:hover,
|
2171 |
+
.table-hover > tbody > tr > th.success:hover,
|
2172 |
+
.table-hover > tbody > tr.success:hover > td,
|
2173 |
+
.table-hover > tbody > tr:hover > .success,
|
2174 |
+
.table-hover > tbody > tr.success:hover > th {
|
2175 |
+
background-color: #d0e9c6;
|
2176 |
+
}
|
2177 |
+
.table > thead > tr > td.info,
|
2178 |
+
.table > tbody > tr > td.info,
|
2179 |
+
.table > tfoot > tr > td.info,
|
2180 |
+
.table > thead > tr > th.info,
|
2181 |
+
.table > tbody > tr > th.info,
|
2182 |
+
.table > tfoot > tr > th.info,
|
2183 |
+
.table > thead > tr.info > td,
|
2184 |
+
.table > tbody > tr.info > td,
|
2185 |
+
.table > tfoot > tr.info > td,
|
2186 |
+
.table > thead > tr.info > th,
|
2187 |
+
.table > tbody > tr.info > th,
|
2188 |
+
.table > tfoot > tr.info > th {
|
2189 |
+
background-color: #d9edf7;
|
2190 |
+
}
|
2191 |
+
.table-hover > tbody > tr > td.info:hover,
|
2192 |
+
.table-hover > tbody > tr > th.info:hover,
|
2193 |
+
.table-hover > tbody > tr.info:hover > td,
|
2194 |
+
.table-hover > tbody > tr:hover > .info,
|
2195 |
+
.table-hover > tbody > tr.info:hover > th {
|
2196 |
+
background-color: #c4e3f3;
|
2197 |
+
}
|
2198 |
+
.table > thead > tr > td.warning,
|
2199 |
+
.table > tbody > tr > td.warning,
|
2200 |
+
.table > tfoot > tr > td.warning,
|
2201 |
+
.table > thead > tr > th.warning,
|
2202 |
+
.table > tbody > tr > th.warning,
|
2203 |
+
.table > tfoot > tr > th.warning,
|
2204 |
+
.table > thead > tr.warning > td,
|
2205 |
+
.table > tbody > tr.warning > td,
|
2206 |
+
.table > tfoot > tr.warning > td,
|
2207 |
+
.table > thead > tr.warning > th,
|
2208 |
+
.table > tbody > tr.warning > th,
|
2209 |
+
.table > tfoot > tr.warning > th {
|
2210 |
+
background-color: #fcf8e3;
|
2211 |
+
}
|
2212 |
+
.table-hover > tbody > tr > td.warning:hover,
|
2213 |
+
.table-hover > tbody > tr > th.warning:hover,
|
2214 |
+
.table-hover > tbody > tr.warning:hover > td,
|
2215 |
+
.table-hover > tbody > tr:hover > .warning,
|
2216 |
+
.table-hover > tbody > tr.warning:hover > th {
|
2217 |
+
background-color: #faf2cc;
|
2218 |
+
}
|
2219 |
+
.table > thead > tr > td.danger,
|
2220 |
+
.table > tbody > tr > td.danger,
|
2221 |
+
.table > tfoot > tr > td.danger,
|
2222 |
+
.table > thead > tr > th.danger,
|
2223 |
+
.table > tbody > tr > th.danger,
|
2224 |
+
.table > tfoot > tr > th.danger,
|
2225 |
+
.table > thead > tr.danger > td,
|
2226 |
+
.table > tbody > tr.danger > td,
|
2227 |
+
.table > tfoot > tr.danger > td,
|
2228 |
+
.table > thead > tr.danger > th,
|
2229 |
+
.table > tbody > tr.danger > th,
|
2230 |
+
.table > tfoot > tr.danger > th {
|
2231 |
+
background-color: #f2dede;
|
2232 |
+
}
|
2233 |
+
.table-hover > tbody > tr > td.danger:hover,
|
2234 |
+
.table-hover > tbody > tr > th.danger:hover,
|
2235 |
+
.table-hover > tbody > tr.danger:hover > td,
|
2236 |
+
.table-hover > tbody > tr:hover > .danger,
|
2237 |
+
.table-hover > tbody > tr.danger:hover > th {
|
2238 |
+
background-color: #ebcccc;
|
2239 |
+
}
|
2240 |
+
@media screen and (max-width: 767px) {
|
2241 |
+
.table-responsive {
|
2242 |
+
width: 100%;
|
2243 |
+
margin-bottom: 15px;
|
2244 |
+
overflow-y: hidden;
|
2245 |
+
overflow-x: auto;
|
2246 |
+
-ms-overflow-style: -ms-autohiding-scrollbar;
|
2247 |
+
border: 1px solid #dddddd;
|
2248 |
+
-webkit-overflow-scrolling: touch;
|
2249 |
+
}
|
2250 |
+
.table-responsive > .table {
|
2251 |
+
margin-bottom: 0;
|
2252 |
+
}
|
2253 |
+
.table-responsive > .table > thead > tr > th,
|
2254 |
+
.table-responsive > .table > tbody > tr > th,
|
2255 |
+
.table-responsive > .table > tfoot > tr > th,
|
2256 |
+
.table-responsive > .table > thead > tr > td,
|
2257 |
+
.table-responsive > .table > tbody > tr > td,
|
2258 |
+
.table-responsive > .table > tfoot > tr > td {
|
2259 |
+
white-space: nowrap;
|
2260 |
+
}
|
2261 |
+
.table-responsive > .table-bordered {
|
2262 |
+
border: 0;
|
2263 |
+
}
|
2264 |
+
.table-responsive > .table-bordered > thead > tr > th:first-child,
|
2265 |
+
.table-responsive > .table-bordered > tbody > tr > th:first-child,
|
2266 |
+
.table-responsive > .table-bordered > tfoot > tr > th:first-child,
|
2267 |
+
.table-responsive > .table-bordered > thead > tr > td:first-child,
|
2268 |
+
.table-responsive > .table-bordered > tbody > tr > td:first-child,
|
2269 |
+
.table-responsive > .table-bordered > tfoot > tr > td:first-child {
|
2270 |
+
border-left: 0;
|
2271 |
+
}
|
2272 |
+
.table-responsive > .table-bordered > thead > tr > th:last-child,
|
2273 |
+
.table-responsive > .table-bordered > tbody > tr > th:last-child,
|
2274 |
+
.table-responsive > .table-bordered > tfoot > tr > th:last-child,
|
2275 |
+
.table-responsive > .table-bordered > thead > tr > td:last-child,
|
2276 |
+
.table-responsive > .table-bordered > tbody > tr > td:last-child,
|
2277 |
+
.table-responsive > .table-bordered > tfoot > tr > td:last-child {
|
2278 |
+
border-right: 0;
|
2279 |
+
}
|
2280 |
+
.table-responsive > .table-bordered > tbody > tr:last-child > th,
|
2281 |
+
.table-responsive > .table-bordered > tfoot > tr:last-child > th,
|
2282 |
+
.table-responsive > .table-bordered > tbody > tr:last-child > td,
|
2283 |
+
.table-responsive > .table-bordered > tfoot > tr:last-child > td {
|
2284 |
+
border-bottom: 0;
|
2285 |
+
}
|
2286 |
+
}
|
2287 |
+
fieldset {
|
2288 |
+
padding: 0;
|
2289 |
+
margin: 0;
|
2290 |
+
border: 0;
|
2291 |
+
min-width: 0;
|
2292 |
+
}
|
2293 |
+
legend {
|
2294 |
+
display: block;
|
2295 |
+
width: 100%;
|
2296 |
+
padding: 0;
|
2297 |
+
margin-bottom: 20px;
|
2298 |
+
font-size: 21px;
|
2299 |
+
line-height: inherit;
|
2300 |
+
color: #333333;
|
2301 |
+
border: 0;
|
2302 |
+
border-bottom: 1px solid #e5e5e5;
|
2303 |
+
}
|
2304 |
+
label {
|
2305 |
+
display: inline-block;
|
2306 |
+
max-width: 100%;
|
2307 |
+
margin-bottom: 5px;
|
2308 |
+
font-weight: bold;
|
2309 |
+
}
|
2310 |
+
input[type="search"] {
|
2311 |
+
-webkit-box-sizing: border-box;
|
2312 |
+
-moz-box-sizing: border-box;
|
2313 |
+
box-sizing: border-box;
|
2314 |
+
}
|
2315 |
+
input[type="radio"],
|
2316 |
+
input[type="checkbox"] {
|
2317 |
+
margin: 4px 0 0;
|
2318 |
+
margin-top: 1px \9;
|
2319 |
+
line-height: normal;
|
2320 |
+
}
|
2321 |
+
input[type="file"] {
|
2322 |
+
display: block;
|
2323 |
+
}
|
2324 |
+
input[type="range"] {
|
2325 |
+
display: block;
|
2326 |
+
width: 100%;
|
2327 |
+
}
|
2328 |
+
select[multiple],
|
2329 |
+
select[size] {
|
2330 |
+
height: auto;
|
2331 |
+
}
|
2332 |
+
input[type="file"]:focus,
|
2333 |
+
input[type="radio"]:focus,
|
2334 |
+
input[type="checkbox"]:focus {
|
2335 |
+
outline: 5px auto -webkit-focus-ring-color;
|
2336 |
+
outline-offset: -2px;
|
2337 |
+
}
|
2338 |
+
output {
|
2339 |
+
display: block;
|
2340 |
+
padding-top: 7px;
|
2341 |
+
font-size: 14px;
|
2342 |
+
line-height: 1.42857143;
|
2343 |
+
color: #555555;
|
2344 |
+
}
|
2345 |
+
.form-control {
|
2346 |
+
display: block;
|
2347 |
+
width: 100%;
|
2348 |
+
height: 34px;
|
2349 |
+
padding: 6px 12px;
|
2350 |
+
font-size: 14px;
|
2351 |
+
line-height: 1.42857143;
|
2352 |
+
color: #555555;
|
2353 |
+
background-color: #ffffff;
|
2354 |
+
background-image: none;
|
2355 |
+
border: 1px solid #cccccc;
|
2356 |
+
border-radius: 4px;
|
2357 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
2358 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
2359 |
+
-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
2360 |
+
-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
2361 |
+
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
2362 |
+
}
|
2363 |
+
.form-control:focus {
|
2364 |
+
border-color: #66afe9;
|
2365 |
+
outline: 0;
|
2366 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
|
2367 |
+
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
|
2368 |
+
}
|
2369 |
+
.form-control::-moz-placeholder {
|
2370 |
+
color: #777777;
|
2371 |
+
opacity: 1;
|
2372 |
+
}
|
2373 |
+
.form-control:-ms-input-placeholder {
|
2374 |
+
color: #777777;
|
2375 |
+
}
|
2376 |
+
.form-control::-webkit-input-placeholder {
|
2377 |
+
color: #777777;
|
2378 |
+
}
|
2379 |
+
.form-control[disabled],
|
2380 |
+
.form-control[readonly],
|
2381 |
+
fieldset[disabled] .form-control {
|
2382 |
+
cursor: not-allowed;
|
2383 |
+
background-color: #eeeeee;
|
2384 |
+
opacity: 1;
|
2385 |
+
}
|
2386 |
+
textarea.form-control {
|
2387 |
+
height: auto;
|
2388 |
+
}
|
2389 |
+
input[type="search"] {
|
2390 |
+
-webkit-appearance: none;
|
2391 |
+
}
|
2392 |
+
input[type="date"],
|
2393 |
+
input[type="time"],
|
2394 |
+
input[type="datetime-local"],
|
2395 |
+
input[type="month"] {
|
2396 |
+
line-height: 1.42857143 \0;
|
2397 |
+
}
|
2398 |
+
input[type="date"].input-sm,
|
2399 |
+
input[type="time"].input-sm,
|
2400 |
+
input[type="datetime-local"].input-sm,
|
2401 |
+
input[type="month"].input-sm {
|
2402 |
+
line-height: 30px;
|
2403 |
+
}
|
2404 |
+
input[type="date"].input-lg,
|
2405 |
+
input[type="time"].input-lg,
|
2406 |
+
input[type="datetime-local"].input-lg,
|
2407 |
+
input[type="month"].input-lg {
|
2408 |
+
line-height: 46px;
|
2409 |
+
}
|
2410 |
+
.form-group {
|
2411 |
+
margin-bottom: 15px;
|
2412 |
+
}
|
2413 |
+
.radio,
|
2414 |
+
.checkbox {
|
2415 |
+
position: relative;
|
2416 |
+
display: block;
|
2417 |
+
min-height: 20px;
|
2418 |
+
margin-top: 10px;
|
2419 |
+
margin-bottom: 10px;
|
2420 |
+
}
|
2421 |
+
.radio label,
|
2422 |
+
.checkbox label {
|
2423 |
+
padding-left: 20px;
|
2424 |
+
margin-bottom: 0;
|
2425 |
+
font-weight: normal;
|
2426 |
+
cursor: pointer;
|
2427 |
+
}
|
2428 |
+
.radio input[type="radio"],
|
2429 |
+
.radio-inline input[type="radio"],
|
2430 |
+
.checkbox input[type="checkbox"],
|
2431 |
+
.checkbox-inline input[type="checkbox"] {
|
2432 |
+
position: absolute;
|
2433 |
+
margin-left: -20px;
|
2434 |
+
margin-top: 4px \9;
|
2435 |
+
}
|
2436 |
+
.radio + .radio,
|
2437 |
+
.checkbox + .checkbox {
|
2438 |
+
margin-top: -5px;
|
2439 |
+
}
|
2440 |
+
.radio-inline,
|
2441 |
+
.checkbox-inline {
|
2442 |
+
display: inline-block;
|
2443 |
+
padding-left: 20px;
|
2444 |
+
margin-bottom: 0;
|
2445 |
+
vertical-align: middle;
|
2446 |
+
font-weight: normal;
|
2447 |
+
cursor: pointer;
|
2448 |
+
}
|
2449 |
+
.radio-inline + .radio-inline,
|
2450 |
+
.checkbox-inline + .checkbox-inline {
|
2451 |
+
margin-top: 0;
|
2452 |
+
margin-left: 10px;
|
2453 |
+
}
|
2454 |
+
input[type="radio"][disabled],
|
2455 |
+
input[type="checkbox"][disabled],
|
2456 |
+
input[type="radio"].disabled,
|
2457 |
+
input[type="checkbox"].disabled,
|
2458 |
+
fieldset[disabled] input[type="radio"],
|
2459 |
+
fieldset[disabled] input[type="checkbox"] {
|
2460 |
+
cursor: not-allowed;
|
2461 |
+
}
|
2462 |
+
.radio-inline.disabled,
|
2463 |
+
.checkbox-inline.disabled,
|
2464 |
+
fieldset[disabled] .radio-inline,
|
2465 |
+
fieldset[disabled] .checkbox-inline {
|
2466 |
+
cursor: not-allowed;
|
2467 |
+
}
|
2468 |
+
.radio.disabled label,
|
2469 |
+
.checkbox.disabled label,
|
2470 |
+
fieldset[disabled] .radio label,
|
2471 |
+
fieldset[disabled] .checkbox label {
|
2472 |
+
cursor: not-allowed;
|
2473 |
+
}
|
2474 |
+
.form-control-static {
|
2475 |
+
padding-top: 7px;
|
2476 |
+
padding-bottom: 7px;
|
2477 |
+
margin-bottom: 0;
|
2478 |
+
}
|
2479 |
+
.form-control-static.input-lg,
|
2480 |
+
.form-control-static.input-sm {
|
2481 |
+
padding-left: 0;
|
2482 |
+
padding-right: 0;
|
2483 |
+
}
|
2484 |
+
.input-sm,
|
2485 |
+
.form-horizontal .form-group-sm .form-control {
|
2486 |
+
height: 30px;
|
2487 |
+
padding: 5px 10px;
|
2488 |
+
font-size: 12px;
|
2489 |
+
line-height: 1.5;
|
2490 |
+
border-radius: 3px;
|
2491 |
+
}
|
2492 |
+
select.input-sm {
|
2493 |
+
height: 30px;
|
2494 |
+
line-height: 30px;
|
2495 |
+
}
|
2496 |
+
textarea.input-sm,
|
2497 |
+
select[multiple].input-sm {
|
2498 |
+
height: auto;
|
2499 |
+
}
|
2500 |
+
.input-lg,
|
2501 |
+
.form-horizontal .form-group-lg .form-control {
|
2502 |
+
height: 46px;
|
2503 |
+
padding: 10px 16px;
|
2504 |
+
font-size: 18px;
|
2505 |
+
line-height: 1.33;
|
2506 |
+
border-radius: 6px;
|
2507 |
+
}
|
2508 |
+
select.input-lg {
|
2509 |
+
height: 46px;
|
2510 |
+
line-height: 46px;
|
2511 |
+
}
|
2512 |
+
textarea.input-lg,
|
2513 |
+
select[multiple].input-lg {
|
2514 |
+
height: auto;
|
2515 |
+
}
|
2516 |
+
.has-feedback {
|
2517 |
+
position: relative;
|
2518 |
+
}
|
2519 |
+
.has-feedback .form-control {
|
2520 |
+
padding-right: 42.5px;
|
2521 |
+
}
|
2522 |
+
.form-control-feedback {
|
2523 |
+
position: absolute;
|
2524 |
+
top: 25px;
|
2525 |
+
right: 0;
|
2526 |
+
z-index: 2;
|
2527 |
+
display: block;
|
2528 |
+
width: 34px;
|
2529 |
+
height: 34px;
|
2530 |
+
line-height: 34px;
|
2531 |
+
text-align: center;
|
2532 |
+
}
|
2533 |
+
.input-lg + .form-control-feedback {
|
2534 |
+
width: 46px;
|
2535 |
+
height: 46px;
|
2536 |
+
line-height: 46px;
|
2537 |
+
}
|
2538 |
+
.input-sm + .form-control-feedback {
|
2539 |
+
width: 30px;
|
2540 |
+
height: 30px;
|
2541 |
+
line-height: 30px;
|
2542 |
+
}
|
2543 |
+
.has-success .help-block,
|
2544 |
+
.has-success .control-label,
|
2545 |
+
.has-success .radio,
|
2546 |
+
.has-success .checkbox,
|
2547 |
+
.has-success .radio-inline,
|
2548 |
+
.has-success .checkbox-inline {
|
2549 |
+
color: #3c763d;
|
2550 |
+
}
|
2551 |
+
.has-success .form-control {
|
2552 |
+
border-color: #3c763d;
|
2553 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
2554 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
2555 |
+
}
|
2556 |
+
.has-success .form-control:focus {
|
2557 |
+
border-color: #2b542c;
|
2558 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
|
2559 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
|
2560 |
+
}
|
2561 |
+
.has-success .input-group-addon {
|
2562 |
+
color: #3c763d;
|
2563 |
+
border-color: #3c763d;
|
2564 |
+
background-color: #dff0d8;
|
2565 |
+
}
|
2566 |
+
.has-success .form-control-feedback {
|
2567 |
+
color: #3c763d;
|
2568 |
+
}
|
2569 |
+
.has-warning .help-block,
|
2570 |
+
.has-warning .control-label,
|
2571 |
+
.has-warning .radio,
|
2572 |
+
.has-warning .checkbox,
|
2573 |
+
.has-warning .radio-inline,
|
2574 |
+
.has-warning .checkbox-inline {
|
2575 |
+
color: #8a6d3b;
|
2576 |
+
}
|
2577 |
+
.has-warning .form-control {
|
2578 |
+
border-color: #8a6d3b;
|
2579 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
2580 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
2581 |
+
}
|
2582 |
+
.has-warning .form-control:focus {
|
2583 |
+
border-color: #66512c;
|
2584 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
|
2585 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
|
2586 |
+
}
|
2587 |
+
.has-warning .input-group-addon {
|
2588 |
+
color: #8a6d3b;
|
2589 |
+
border-color: #8a6d3b;
|
2590 |
+
background-color: #fcf8e3;
|
2591 |
+
}
|
2592 |
+
.has-warning .form-control-feedback {
|
2593 |
+
color: #8a6d3b;
|
2594 |
+
}
|
2595 |
+
.has-error .help-block,
|
2596 |
+
.has-error .control-label,
|
2597 |
+
.has-error .radio,
|
2598 |
+
.has-error .checkbox,
|
2599 |
+
.has-error .radio-inline,
|
2600 |
+
.has-error .checkbox-inline {
|
2601 |
+
color: #a94442;
|
2602 |
+
}
|
2603 |
+
.has-error .form-control {
|
2604 |
+
border-color: #a94442;
|
2605 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
2606 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
2607 |
+
}
|
2608 |
+
.has-error .form-control:focus {
|
2609 |
+
border-color: #843534;
|
2610 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
|
2611 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
|
2612 |
+
}
|
2613 |
+
.has-error .input-group-addon {
|
2614 |
+
color: #a94442;
|
2615 |
+
border-color: #a94442;
|
2616 |
+
background-color: #f2dede;
|
2617 |
+
}
|
2618 |
+
.has-error .form-control-feedback {
|
2619 |
+
color: #a94442;
|
2620 |
+
}
|
2621 |
+
.has-feedback label.sr-only ~ .form-control-feedback {
|
2622 |
+
top: 0;
|
2623 |
+
}
|
2624 |
+
.help-block {
|
2625 |
+
display: block;
|
2626 |
+
margin-top: 5px;
|
2627 |
+
margin-bottom: 10px;
|
2628 |
+
color: #737373;
|
2629 |
+
}
|
2630 |
+
@media (min-width: 768px) {
|
2631 |
+
.form-inline .form-group {
|
2632 |
+
display: inline-block;
|
2633 |
+
margin-bottom: 0;
|
2634 |
+
vertical-align: middle;
|
2635 |
+
}
|
2636 |
+
.form-inline .form-control {
|
2637 |
+
display: inline-block;
|
2638 |
+
width: auto;
|
2639 |
+
vertical-align: middle;
|
2640 |
+
}
|
2641 |
+
.form-inline .input-group {
|
2642 |
+
display: inline-table;
|
2643 |
+
vertical-align: middle;
|
2644 |
+
}
|
2645 |
+
.form-inline .input-group .input-group-addon,
|
2646 |
+
.form-inline .input-group .input-group-btn,
|
2647 |
+
.form-inline .input-group .form-control {
|
2648 |
+
width: auto;
|
2649 |
+
}
|
2650 |
+
.form-inline .input-group > .form-control {
|
2651 |
+
width: 100%;
|
2652 |
+
}
|
2653 |
+
.form-inline .control-label {
|
2654 |
+
margin-bottom: 0;
|
2655 |
+
vertical-align: middle;
|
2656 |
+
}
|
2657 |
+
.form-inline .radio,
|
2658 |
+
.form-inline .checkbox {
|
2659 |
+
display: inline-block;
|
2660 |
+
margin-top: 0;
|
2661 |
+
margin-bottom: 0;
|
2662 |
+
vertical-align: middle;
|
2663 |
+
}
|
2664 |
+
.form-inline .radio label,
|
2665 |
+
.form-inline .checkbox label {
|
2666 |
+
padding-left: 0;
|
2667 |
+
}
|
2668 |
+
.form-inline .radio input[type="radio"],
|
2669 |
+
.form-inline .checkbox input[type="checkbox"] {
|
2670 |
+
position: relative;
|
2671 |
+
margin-left: 0;
|
2672 |
+
}
|
2673 |
+
.form-inline .has-feedback .form-control-feedback {
|
2674 |
+
top: 0;
|
2675 |
+
}
|
2676 |
+
}
|
2677 |
+
.form-horizontal .radio,
|
2678 |
+
.form-horizontal .checkbox,
|
2679 |
+
.form-horizontal .radio-inline,
|
2680 |
+
.form-horizontal .checkbox-inline {
|
2681 |
+
margin-top: 0;
|
2682 |
+
margin-bottom: 0;
|
2683 |
+
padding-top: 7px;
|
2684 |
+
}
|
2685 |
+
.form-horizontal .radio,
|
2686 |
+
.form-horizontal .checkbox {
|
2687 |
+
min-height: 27px;
|
2688 |
+
}
|
2689 |
+
.form-horizontal .form-group {
|
2690 |
+
margin-left: -15px;
|
2691 |
+
margin-right: -15px;
|
2692 |
+
}
|
2693 |
+
@media (min-width: 768px) {
|
2694 |
+
.form-horizontal .control-label {
|
2695 |
+
text-align: right;
|
2696 |
+
margin-bottom: 0;
|
2697 |
+
padding-top: 7px;
|
2698 |
+
}
|
2699 |
+
}
|
2700 |
+
.form-horizontal .has-feedback .form-control-feedback {
|
2701 |
+
top: 0;
|
2702 |
+
right: 15px;
|
2703 |
+
}
|
2704 |
+
@media (min-width: 768px) {
|
2705 |
+
.form-horizontal .form-group-lg .control-label {
|
2706 |
+
padding-top: 14.3px;
|
2707 |
+
}
|
2708 |
+
}
|
2709 |
+
@media (min-width: 768px) {
|
2710 |
+
.form-horizontal .form-group-sm .control-label {
|
2711 |
+
padding-top: 6px;
|
2712 |
+
}
|
2713 |
+
}
|
2714 |
+
.btn {
|
2715 |
+
display: inline-block;
|
2716 |
+
margin-bottom: 0;
|
2717 |
+
font-weight: normal;
|
2718 |
+
text-align: center;
|
2719 |
+
vertical-align: middle;
|
2720 |
+
cursor: pointer;
|
2721 |
+
background-image: none;
|
2722 |
+
border: 1px solid transparent;
|
2723 |
+
white-space: nowrap;
|
2724 |
+
padding: 6px 12px;
|
2725 |
+
font-size: 14px;
|
2726 |
+
line-height: 1.42857143;
|
2727 |
+
border-radius: 4px;
|
2728 |
+
-webkit-user-select: none;
|
2729 |
+
-moz-user-select: none;
|
2730 |
+
-ms-user-select: none;
|
2731 |
+
user-select: none;
|
2732 |
+
}
|
2733 |
+
.btn:focus,
|
2734 |
+
.btn:active:focus,
|
2735 |
+
.btn.active:focus {
|
2736 |
+
outline: 5px auto -webkit-focus-ring-color;
|
2737 |
+
outline-offset: -2px;
|
2738 |
+
}
|
2739 |
+
.btn:hover,
|
2740 |
+
.btn:focus {
|
2741 |
+
color: #333333;
|
2742 |
+
text-decoration: none;
|
2743 |
+
}
|
2744 |
+
.btn:active,
|
2745 |
+
.btn.active {
|
2746 |
+
outline: 0;
|
2747 |
+
background-image: none;
|
2748 |
+
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
2749 |
+
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
2750 |
+
}
|
2751 |
+
.btn.disabled,
|
2752 |
+
.btn[disabled],
|
2753 |
+
fieldset[disabled] .btn {
|
2754 |
+
cursor: not-allowed;
|
2755 |
+
pointer-events: none;
|
2756 |
+
opacity: 0.65;
|
2757 |
+
filter: alpha(opacity=65);
|
2758 |
+
-webkit-box-shadow: none;
|
2759 |
+
box-shadow: none;
|
2760 |
+
}
|
2761 |
+
.btn-default {
|
2762 |
+
color: #333333;
|
2763 |
+
background-color: #ffffff;
|
2764 |
+
border-color: #cccccc;
|
2765 |
+
}
|
2766 |
+
.btn-default:hover,
|
2767 |
+
.btn-default:focus,
|
2768 |
+
.btn-default:active,
|
2769 |
+
.btn-default.active,
|
2770 |
+
.open > .dropdown-toggle.btn-default {
|
2771 |
+
color: #333333;
|
2772 |
+
background-color: #e6e6e6;
|
2773 |
+
border-color: #adadad;
|
2774 |
+
}
|
2775 |
+
.btn-default:active,
|
2776 |
+
.btn-default.active,
|
2777 |
+
.open > .dropdown-toggle.btn-default {
|
2778 |
+
background-image: none;
|
2779 |
+
}
|
2780 |
+
.btn-default.disabled,
|
2781 |
+
.btn-default[disabled],
|
2782 |
+
fieldset[disabled] .btn-default,
|
2783 |
+
.btn-default.disabled:hover,
|
2784 |
+
.btn-default[disabled]:hover,
|
2785 |
+
fieldset[disabled] .btn-default:hover,
|
2786 |
+
.btn-default.disabled:focus,
|
2787 |
+
.btn-default[disabled]:focus,
|
2788 |
+
fieldset[disabled] .btn-default:focus,
|
2789 |
+
.btn-default.disabled:active,
|
2790 |
+
.btn-default[disabled]:active,
|
2791 |
+
fieldset[disabled] .btn-default:active,
|
2792 |
+
.btn-default.disabled.active,
|
2793 |
+
.btn-default[disabled].active,
|
2794 |
+
fieldset[disabled] .btn-default.active {
|
2795 |
+
background-color: #ffffff;
|
2796 |
+
border-color: #cccccc;
|
2797 |
+
}
|
2798 |
+
.btn-default .badge {
|
2799 |
+
color: #ffffff;
|
2800 |
+
background-color: #333333;
|
2801 |
+
}
|
2802 |
+
.btn-primary {
|
2803 |
+
color: #ffffff;
|
2804 |
+
background-color: #428bca;
|
2805 |
+
border-color: #357ebd;
|
2806 |
+
}
|
2807 |
+
.btn-primary:hover,
|
2808 |
+
.btn-primary:focus,
|
2809 |
+
.btn-primary:active,
|
2810 |
+
.btn-primary.active,
|
2811 |
+
.open > .dropdown-toggle.btn-primary {
|
2812 |
+
color: #ffffff;
|
2813 |
+
background-color: #3071a9;
|
2814 |
+
border-color: #285e8e;
|
2815 |
+
}
|
2816 |
+
.btn-primary:active,
|
2817 |
+
.btn-primary.active,
|
2818 |
+
.open > .dropdown-toggle.btn-primary {
|
2819 |
+
background-image: none;
|
2820 |
+
}
|
2821 |
+
.btn-primary.disabled,
|
2822 |
+
.btn-primary[disabled],
|
2823 |
+
fieldset[disabled] .btn-primary,
|
2824 |
+
.btn-primary.disabled:hover,
|
2825 |
+
.btn-primary[disabled]:hover,
|
2826 |
+
fieldset[disabled] .btn-primary:hover,
|
2827 |
+
.btn-primary.disabled:focus,
|
2828 |
+
.btn-primary[disabled]:focus,
|
2829 |
+
fieldset[disabled] .btn-primary:focus,
|
2830 |
+
.btn-primary.disabled:active,
|
2831 |
+
.btn-primary[disabled]:active,
|
2832 |
+
fieldset[disabled] .btn-primary:active,
|
2833 |
+
.btn-primary.disabled.active,
|
2834 |
+
.btn-primary[disabled].active,
|
2835 |
+
fieldset[disabled] .btn-primary.active {
|
2836 |
+
background-color: #428bca;
|
2837 |
+
border-color: #357ebd;
|
2838 |
+
}
|
2839 |
+
.btn-primary .badge {
|
2840 |
+
color: #428bca;
|
2841 |
+
background-color: #ffffff;
|
2842 |
+
}
|
2843 |
+
.btn-success {
|
2844 |
+
color: #ffffff;
|
2845 |
+
background-color: #5cb85c;
|
2846 |
+
border-color: #4cae4c;
|
2847 |
+
}
|
2848 |
+
.btn-success:hover,
|
2849 |
+
.btn-success:focus,
|
2850 |
+
.btn-success:active,
|
2851 |
+
.btn-success.active,
|
2852 |
+
.open > .dropdown-toggle.btn-success {
|
2853 |
+
color: #ffffff;
|
2854 |
+
background-color: #449d44;
|
2855 |
+
border-color: #398439;
|
2856 |
+
}
|
2857 |
+
.btn-success:active,
|
2858 |
+
.btn-success.active,
|
2859 |
+
.open > .dropdown-toggle.btn-success {
|
2860 |
+
background-image: none;
|
2861 |
+
}
|
2862 |
+
.btn-success.disabled,
|
2863 |
+
.btn-success[disabled],
|
2864 |
+
fieldset[disabled] .btn-success,
|
2865 |
+
.btn-success.disabled:hover,
|
2866 |
+
.btn-success[disabled]:hover,
|
2867 |
+
fieldset[disabled] .btn-success:hover,
|
2868 |
+
.btn-success.disabled:focus,
|
2869 |
+
.btn-success[disabled]:focus,
|
2870 |
+
fieldset[disabled] .btn-success:focus,
|
2871 |
+
.btn-success.disabled:active,
|
2872 |
+
.btn-success[disabled]:active,
|
2873 |
+
fieldset[disabled] .btn-success:active,
|
2874 |
+
.btn-success.disabled.active,
|
2875 |
+
.btn-success[disabled].active,
|
2876 |
+
fieldset[disabled] .btn-success.active {
|
2877 |
+
background-color: #5cb85c;
|
2878 |
+
border-color: #4cae4c;
|
2879 |
+
}
|
2880 |
+
.btn-success .badge {
|
2881 |
+
color: #5cb85c;
|
2882 |
+
background-color: #ffffff;
|
2883 |
+
}
|
2884 |
+
.btn-info {
|
2885 |
+
color: #ffffff;
|
2886 |
+
background-color: #5bc0de;
|
2887 |
+
border-color: #46b8da;
|
2888 |
+
}
|
2889 |
+
.btn-info:hover,
|
2890 |
+
.btn-info:focus,
|
2891 |
+
.btn-info:active,
|
2892 |
+
.btn-info.active,
|
2893 |
+
.open > .dropdown-toggle.btn-info {
|
2894 |
+
color: #ffffff;
|
2895 |
+
background-color: #31b0d5;
|
2896 |
+
border-color: #269abc;
|
2897 |
+
}
|
2898 |
+
.btn-info:active,
|
2899 |
+
.btn-info.active,
|
2900 |
+
.open > .dropdown-toggle.btn-info {
|
2901 |
+
background-image: none;
|
2902 |
+
}
|
2903 |
+
.btn-info.disabled,
|
2904 |
+
.btn-info[disabled],
|
2905 |
+
fieldset[disabled] .btn-info,
|
2906 |
+
.btn-info.disabled:hover,
|
2907 |
+
.btn-info[disabled]:hover,
|
2908 |
+
fieldset[disabled] .btn-info:hover,
|
2909 |
+
.btn-info.disabled:focus,
|
2910 |
+
.btn-info[disabled]:focus,
|
2911 |
+
fieldset[disabled] .btn-info:focus,
|
2912 |
+
.btn-info.disabled:active,
|
2913 |
+
.btn-info[disabled]:active,
|
2914 |
+
fieldset[disabled] .btn-info:active,
|
2915 |
+
.btn-info.disabled.active,
|
2916 |
+
.btn-info[disabled].active,
|
2917 |
+
fieldset[disabled] .btn-info.active {
|
2918 |
+
background-color: #5bc0de;
|
2919 |
+
border-color: #46b8da;
|
2920 |
+
}
|
2921 |
+
.btn-info .badge {
|
2922 |
+
color: #5bc0de;
|
2923 |
+
background-color: #ffffff;
|
2924 |
+
}
|
2925 |
+
.btn-warning {
|
2926 |
+
color: #ffffff;
|
2927 |
+
background-color: #f0ad4e;
|
2928 |
+
border-color: #eea236;
|
2929 |
+
}
|
2930 |
+
.btn-warning:hover,
|
2931 |
+
.btn-warning:focus,
|
2932 |
+
.btn-warning:active,
|
2933 |
+
.btn-warning.active,
|
2934 |
+
.open > .dropdown-toggle.btn-warning {
|
2935 |
+
color: #ffffff;
|
2936 |
+
background-color: #ec971f;
|
2937 |
+
border-color: #d58512;
|
2938 |
+
}
|
2939 |
+
.btn-warning:active,
|
2940 |
+
.btn-warning.active,
|
2941 |
+
.open > .dropdown-toggle.btn-warning {
|
2942 |
+
background-image: none;
|
2943 |
+
}
|
2944 |
+
.btn-warning.disabled,
|
2945 |
+
.btn-warning[disabled],
|
2946 |
+
fieldset[disabled] .btn-warning,
|
2947 |
+
.btn-warning.disabled:hover,
|
2948 |
+
.btn-warning[disabled]:hover,
|
2949 |
+
fieldset[disabled] .btn-warning:hover,
|
2950 |
+
.btn-warning.disabled:focus,
|
2951 |
+
.btn-warning[disabled]:focus,
|
2952 |
+
fieldset[disabled] .btn-warning:focus,
|
2953 |
+
.btn-warning.disabled:active,
|
2954 |
+
.btn-warning[disabled]:active,
|
2955 |
+
fieldset[disabled] .btn-warning:active,
|
2956 |
+
.btn-warning.disabled.active,
|
2957 |
+
.btn-warning[disabled].active,
|
2958 |
+
fieldset[disabled] .btn-warning.active {
|
2959 |
+
background-color: #f0ad4e;
|
2960 |
+
border-color: #eea236;
|
2961 |
+
}
|
2962 |
+
.btn-warning .badge {
|
2963 |
+
color: #f0ad4e;
|
2964 |
+
background-color: #ffffff;
|
2965 |
+
}
|
2966 |
+
.btn-danger {
|
2967 |
+
color: #ffffff;
|
2968 |
+
background-color: #d9534f;
|
2969 |
+
border-color: #d43f3a;
|
2970 |
+
}
|
2971 |
+
.btn-danger:hover,
|
2972 |
+
.btn-danger:focus,
|
2973 |
+
.btn-danger:active,
|
2974 |
+
.btn-danger.active,
|
2975 |
+
.open > .dropdown-toggle.btn-danger {
|
2976 |
+
color: #ffffff;
|
2977 |
+
background-color: #c9302c;
|
2978 |
+
border-color: #ac2925;
|
2979 |
+
}
|
2980 |
+
.btn-danger:active,
|
2981 |
+
.btn-danger.active,
|
2982 |
+
.open > .dropdown-toggle.btn-danger {
|
2983 |
+
background-image: none;
|
2984 |
+
}
|
2985 |
+
.btn-danger.disabled,
|
2986 |
+
.btn-danger[disabled],
|
2987 |
+
fieldset[disabled] .btn-danger,
|
2988 |
+
.btn-danger.disabled:hover,
|
2989 |
+
.btn-danger[disabled]:hover,
|
2990 |
+
fieldset[disabled] .btn-danger:hover,
|
2991 |
+
.btn-danger.disabled:focus,
|
2992 |
+
.btn-danger[disabled]:focus,
|
2993 |
+
fieldset[disabled] .btn-danger:focus,
|
2994 |
+
.btn-danger.disabled:active,
|
2995 |
+
.btn-danger[disabled]:active,
|
2996 |
+
fieldset[disabled] .btn-danger:active,
|
2997 |
+
.btn-danger.disabled.active,
|
2998 |
+
.btn-danger[disabled].active,
|
2999 |
+
fieldset[disabled] .btn-danger.active {
|
3000 |
+
background-color: #d9534f;
|
3001 |
+
border-color: #d43f3a;
|
3002 |
+
}
|
3003 |
+
.btn-danger .badge {
|
3004 |
+
color: #d9534f;
|
3005 |
+
background-color: #ffffff;
|
3006 |
+
}
|
3007 |
+
.btn-link {
|
3008 |
+
color: #428bca;
|
3009 |
+
font-weight: normal;
|
3010 |
+
cursor: pointer;
|
3011 |
+
border-radius: 0;
|
3012 |
+
}
|
3013 |
+
.btn-link,
|
3014 |
+
.btn-link:active,
|
3015 |
+
.btn-link[disabled],
|
3016 |
+
fieldset[disabled] .btn-link {
|
3017 |
+
background-color: transparent;
|
3018 |
+
-webkit-box-shadow: none;
|
3019 |
+
box-shadow: none;
|
3020 |
+
}
|
3021 |
+
.btn-link,
|
3022 |
+
.btn-link:hover,
|
3023 |
+
.btn-link:focus,
|
3024 |
+
.btn-link:active {
|
3025 |
+
border-color: transparent;
|
3026 |
+
}
|
3027 |
+
.btn-link:hover,
|
3028 |
+
.btn-link:focus {
|
3029 |
+
color: #2a6496;
|
3030 |
+
text-decoration: underline;
|
3031 |
+
background-color: transparent;
|
3032 |
+
}
|
3033 |
+
.btn-link[disabled]:hover,
|
3034 |
+
fieldset[disabled] .btn-link:hover,
|
3035 |
+
.btn-link[disabled]:focus,
|
3036 |
+
fieldset[disabled] .btn-link:focus {
|
3037 |
+
color: #777777;
|
3038 |
+
text-decoration: none;
|
3039 |
+
}
|
3040 |
+
.btn-lg,
|
3041 |
+
.btn-group-lg > .btn {
|
3042 |
+
padding: 10px 16px;
|
3043 |
+
font-size: 18px;
|
3044 |
+
line-height: 1.33;
|
3045 |
+
border-radius: 6px;
|
3046 |
+
}
|
3047 |
+
.btn-sm,
|
3048 |
+
.btn-group-sm > .btn {
|
3049 |
+
padding: 5px 10px;
|
3050 |
+
font-size: 12px;
|
3051 |
+
line-height: 1.5;
|
3052 |
+
border-radius: 3px;
|
3053 |
+
}
|
3054 |
+
.btn-xs,
|
3055 |
+
.btn-group-xs > .btn {
|
3056 |
+
padding: 1px 5px;
|
3057 |
+
font-size: 12px;
|
3058 |
+
line-height: 1.5;
|
3059 |
+
border-radius: 3px;
|
3060 |
+
}
|
3061 |
+
.btn-block {
|
3062 |
+
display: block;
|
3063 |
+
width: 100%;
|
3064 |
+
}
|
3065 |
+
.btn-block + .btn-block {
|
3066 |
+
margin-top: 5px;
|
3067 |
+
}
|
3068 |
+
input[type="submit"].btn-block,
|
3069 |
+
input[type="reset"].btn-block,
|
3070 |
+
input[type="button"].btn-block {
|
3071 |
+
width: 100%;
|
3072 |
+
}
|
3073 |
+
.fade {
|
3074 |
+
opacity: 0;
|
3075 |
+
-webkit-transition: opacity 0.15s linear;
|
3076 |
+
-o-transition: opacity 0.15s linear;
|
3077 |
+
transition: opacity 0.15s linear;
|
3078 |
+
}
|
3079 |
+
.fade.in {
|
3080 |
+
opacity: 1;
|
3081 |
+
}
|
3082 |
+
.collapse {
|
3083 |
+
display: none;
|
3084 |
+
}
|
3085 |
+
.collapse.in {
|
3086 |
+
display: block;
|
3087 |
+
}
|
3088 |
+
tr.collapse.in {
|
3089 |
+
display: table-row;
|
3090 |
+
}
|
3091 |
+
tbody.collapse.in {
|
3092 |
+
display: table-row-group;
|
3093 |
+
}
|
3094 |
+
.collapsing {
|
3095 |
+
position: relative;
|
3096 |
+
height: 0;
|
3097 |
+
overflow: hidden;
|
3098 |
+
-webkit-transition: height 0.35s ease;
|
3099 |
+
-o-transition: height 0.35s ease;
|
3100 |
+
transition: height 0.35s ease;
|
3101 |
+
}
|
3102 |
+
.caret {
|
3103 |
+
display: inline-block;
|
3104 |
+
width: 0;
|
3105 |
+
height: 0;
|
3106 |
+
margin-left: 2px;
|
3107 |
+
vertical-align: middle;
|
3108 |
+
border-top: 4px solid;
|
3109 |
+
border-right: 4px solid transparent;
|
3110 |
+
border-left: 4px solid transparent;
|
3111 |
+
}
|
3112 |
+
.dropdown {
|
3113 |
+
position: relative;
|
3114 |
+
}
|
3115 |
+
.dropdown-toggle:focus {
|
3116 |
+
outline: 0;
|
3117 |
+
}
|
3118 |
+
.dropdown-menu {
|
3119 |
+
position: absolute;
|
3120 |
+
top: 100%;
|
3121 |
+
left: 0;
|
3122 |
+
z-index: 1000;
|
3123 |
+
display: none;
|
3124 |
+
float: left;
|
3125 |
+
min-width: 160px;
|
3126 |
+
padding: 5px 0;
|
3127 |
+
margin: 2px 0 0;
|
3128 |
+
list-style: none;
|
3129 |
+
font-size: 14px;
|
3130 |
+
text-align: left;
|
3131 |
+
background-color: #ffffff;
|
3132 |
+
border: 1px solid #cccccc;
|
3133 |
+
border: 1px solid rgba(0, 0, 0, 0.15);
|
3134 |
+
border-radius: 4px;
|
3135 |
+
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
3136 |
+
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
3137 |
+
background-clip: padding-box;
|
3138 |
+
}
|
3139 |
+
.dropdown-menu.pull-right {
|
3140 |
+
right: 0;
|
3141 |
+
left: auto;
|
3142 |
+
}
|
3143 |
+
.dropdown-menu .divider {
|
3144 |
+
height: 1px;
|
3145 |
+
margin: 9px 0;
|
3146 |
+
overflow: hidden;
|
3147 |
+
background-color: #e5e5e5;
|
3148 |
+
}
|
3149 |
+
.dropdown-menu > li > a {
|
3150 |
+
display: block;
|
3151 |
+
padding: 3px 20px;
|
3152 |
+
clear: both;
|
3153 |
+
font-weight: normal;
|
3154 |
+
line-height: 1.42857143;
|
3155 |
+
color: #333333;
|
3156 |
+
white-space: nowrap;
|
3157 |
+
}
|
3158 |
+
.dropdown-menu > li > a:hover,
|
3159 |
+
.dropdown-menu > li > a:focus {
|
3160 |
+
text-decoration: none;
|
3161 |
+
color: #262626;
|
3162 |
+
background-color: #f5f5f5;
|
3163 |
+
}
|
3164 |
+
.dropdown-menu > .active > a,
|
3165 |
+
.dropdown-menu > .active > a:hover,
|
3166 |
+
.dropdown-menu > .active > a:focus {
|
3167 |
+
color: #ffffff;
|
3168 |
+
text-decoration: none;
|
3169 |
+
outline: 0;
|
3170 |
+
background-color: #428bca;
|
3171 |
+
}
|
3172 |
+
.dropdown-menu > .disabled > a,
|
3173 |
+
.dropdown-menu > .disabled > a:hover,
|
3174 |
+
.dropdown-menu > .disabled > a:focus {
|
3175 |
+
color: #777777;
|
3176 |
+
}
|
3177 |
+
.dropdown-menu > .disabled > a:hover,
|
3178 |
+
.dropdown-menu > .disabled > a:focus {
|
3179 |
+
text-decoration: none;
|
3180 |
+
background-color: transparent;
|
3181 |
+
background-image: none;
|
3182 |
+
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
3183 |
+
cursor: not-allowed;
|
3184 |
+
}
|
3185 |
+
.open > .dropdown-menu {
|
3186 |
+
display: block;
|
3187 |
+
}
|
3188 |
+
.open > a {
|
3189 |
+
outline: 0;
|
3190 |
+
}
|
3191 |
+
.dropdown-menu-right {
|
3192 |
+
left: auto;
|
3193 |
+
right: 0;
|
3194 |
+
}
|
3195 |
+
.dropdown-menu-left {
|
3196 |
+
left: 0;
|
3197 |
+
right: auto;
|
3198 |
+
}
|
3199 |
+
.dropdown-header {
|
3200 |
+
display: block;
|
3201 |
+
padding: 3px 20px;
|
3202 |
+
font-size: 12px;
|
3203 |
+
line-height: 1.42857143;
|
3204 |
+
color: #777777;
|
3205 |
+
white-space: nowrap;
|
3206 |
+
}
|
3207 |
+
.dropdown-backdrop {
|
3208 |
+
position: fixed;
|
3209 |
+
left: 0;
|
3210 |
+
right: 0;
|
3211 |
+
bottom: 0;
|
3212 |
+
top: 0;
|
3213 |
+
z-index: 990;
|
3214 |
+
}
|
3215 |
+
.pull-right > .dropdown-menu {
|
3216 |
+
right: 0;
|
3217 |
+
left: auto;
|
3218 |
+
}
|
3219 |
+
.dropup .caret,
|
3220 |
+
.navbar-fixed-bottom .dropdown .caret {
|
3221 |
+
border-top: 0;
|
3222 |
+
border-bottom: 4px solid;
|
3223 |
+
content: "";
|
3224 |
+
}
|
3225 |
+
.dropup .dropdown-menu,
|
3226 |
+
.navbar-fixed-bottom .dropdown .dropdown-menu {
|
3227 |
+
top: auto;
|
3228 |
+
bottom: 100%;
|
3229 |
+
margin-bottom: 1px;
|
3230 |
+
}
|
3231 |
+
@media (min-width: 768px) {
|
3232 |
+
.navbar-right .dropdown-menu {
|
3233 |
+
left: auto;
|
3234 |
+
right: 0;
|
3235 |
+
}
|
3236 |
+
.navbar-right .dropdown-menu-left {
|
3237 |
+
left: 0;
|
3238 |
+
right: auto;
|
3239 |
+
}
|
3240 |
+
}
|
3241 |
+
.btn-group,
|
3242 |
+
.btn-group-vertical {
|
3243 |
+
position: relative;
|
3244 |
+
display: inline-block;
|
3245 |
+
vertical-align: middle;
|
3246 |
+
}
|
3247 |
+
.btn-group > .btn,
|
3248 |
+
.btn-group-vertical > .btn {
|
3249 |
+
position: relative;
|
3250 |
+
float: left;
|
3251 |
+
}
|
3252 |
+
.btn-group > .btn:hover,
|
3253 |
+
.btn-group-vertical > .btn:hover,
|
3254 |
+
.btn-group > .btn:focus,
|
3255 |
+
.btn-group-vertical > .btn:focus,
|
3256 |
+
.btn-group > .btn:active,
|
3257 |
+
.btn-group-vertical > .btn:active,
|
3258 |
+
.btn-group > .btn.active,
|
3259 |
+
.btn-group-vertical > .btn.active {
|
3260 |
+
z-index: 2;
|
3261 |
+
}
|
3262 |
+
.btn-group > .btn:focus,
|
3263 |
+
.btn-group-vertical > .btn:focus {
|
3264 |
+
outline: 0;
|
3265 |
+
}
|
3266 |
+
.btn-group .btn + .btn,
|
3267 |
+
.btn-group .btn + .btn-group,
|
3268 |
+
.btn-group .btn-group + .btn,
|
3269 |
+
.btn-group .btn-group + .btn-group {
|
3270 |
+
margin-left: -1px;
|
3271 |
+
}
|
3272 |
+
.btn-toolbar {
|
3273 |
+
margin-left: -5px;
|
3274 |
+
}
|
3275 |
+
.btn-toolbar .btn-group,
|
3276 |
+
.btn-toolbar .input-group {
|
3277 |
+
float: left;
|
3278 |
+
}
|
3279 |
+
.btn-toolbar > .btn,
|
3280 |
+
.btn-toolbar > .btn-group,
|
3281 |
+
.btn-toolbar > .input-group {
|
3282 |
+
margin-left: 5px;
|
3283 |
+
}
|
3284 |
+
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
|
3285 |
+
border-radius: 0;
|
3286 |
+
}
|
3287 |
+
.btn-group > .btn:first-child {
|
3288 |
+
margin-left: 0;
|
3289 |
+
}
|
3290 |
+
.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
|
3291 |
+
border-bottom-right-radius: 0;
|
3292 |
+
border-top-right-radius: 0;
|
3293 |
+
}
|
3294 |
+
.btn-group > .btn:last-child:not(:first-child),
|
3295 |
+
.btn-group > .dropdown-toggle:not(:first-child) {
|
3296 |
+
border-bottom-left-radius: 0;
|
3297 |
+
border-top-left-radius: 0;
|
3298 |
+
}
|
3299 |
+
.btn-group > .btn-group {
|
3300 |
+
float: left;
|
3301 |
+
}
|
3302 |
+
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
|
3303 |
+
border-radius: 0;
|
3304 |
+
}
|
3305 |
+
.btn-group > .btn-group:first-child > .btn:last-child,
|
3306 |
+
.btn-group > .btn-group:first-child > .dropdown-toggle {
|
3307 |
+
border-bottom-right-radius: 0;
|
3308 |
+
border-top-right-radius: 0;
|
3309 |
+
}
|
3310 |
+
.btn-group > .btn-group:last-child > .btn:first-child {
|
3311 |
+
border-bottom-left-radius: 0;
|
3312 |
+
border-top-left-radius: 0;
|
3313 |
+
}
|
3314 |
+
.btn-group .dropdown-toggle:active,
|
3315 |
+
.btn-group.open .dropdown-toggle {
|
3316 |
+
outline: 0;
|
3317 |
+
}
|
3318 |
+
.btn-group > .btn + .dropdown-toggle {
|
3319 |
+
padding-left: 8px;
|
3320 |
+
padding-right: 8px;
|
3321 |
+
}
|
3322 |
+
.btn-group > .btn-lg + .dropdown-toggle {
|
3323 |
+
padding-left: 12px;
|
3324 |
+
padding-right: 12px;
|
3325 |
+
}
|
3326 |
+
.btn-group.open .dropdown-toggle {
|
3327 |
+
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
3328 |
+
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
3329 |
+
}
|
3330 |
+
.btn-group.open .dropdown-toggle.btn-link {
|
3331 |
+
-webkit-box-shadow: none;
|
3332 |
+
box-shadow: none;
|
3333 |
+
}
|
3334 |
+
.btn .caret {
|
3335 |
+
margin-left: 0;
|
3336 |
+
}
|
3337 |
+
.btn-lg .caret {
|
3338 |
+
border-width: 5px 5px 0;
|
3339 |
+
border-bottom-width: 0;
|
3340 |
+
}
|
3341 |
+
.dropup .btn-lg .caret {
|
3342 |
+
border-width: 0 5px 5px;
|
3343 |
+
}
|
3344 |
+
.btn-group-vertical > .btn,
|
3345 |
+
.btn-group-vertical > .btn-group,
|
3346 |
+
.btn-group-vertical > .btn-group > .btn {
|
3347 |
+
display: block;
|
3348 |
+
float: none;
|
3349 |
+
width: 100%;
|
3350 |
+
max-width: 100%;
|
3351 |
+
}
|
3352 |
+
.btn-group-vertical > .btn-group > .btn {
|
3353 |
+
float: none;
|
3354 |
+
}
|
3355 |
+
.btn-group-vertical > .btn + .btn,
|
3356 |
+
.btn-group-vertical > .btn + .btn-group,
|
3357 |
+
.btn-group-vertical > .btn-group + .btn,
|
3358 |
+
.btn-group-vertical > .btn-group + .btn-group {
|
3359 |
+
margin-top: -1px;
|
3360 |
+
margin-left: 0;
|
3361 |
+
}
|
3362 |
+
.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
|
3363 |
+
border-radius: 0;
|
3364 |
+
}
|
3365 |
+
.btn-group-vertical > .btn:first-child:not(:last-child) {
|
3366 |
+
border-top-right-radius: 4px;
|
3367 |
+
border-bottom-right-radius: 0;
|
3368 |
+
border-bottom-left-radius: 0;
|
3369 |
+
}
|
3370 |
+
.btn-group-vertical > .btn:last-child:not(:first-child) {
|
3371 |
+
border-bottom-left-radius: 4px;
|
3372 |
+
border-top-right-radius: 0;
|
3373 |
+
border-top-left-radius: 0;
|
3374 |
+
}
|
3375 |
+
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
|
3376 |
+
border-radius: 0;
|
3377 |
+
}
|
3378 |
+
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
|
3379 |
+
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
|
3380 |
+
border-bottom-right-radius: 0;
|
3381 |
+
border-bottom-left-radius: 0;
|
3382 |
+
}
|
3383 |
+
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
|
3384 |
+
border-top-right-radius: 0;
|
3385 |
+
border-top-left-radius: 0;
|
3386 |
+
}
|
3387 |
+
.btn-group-justified {
|
3388 |
+
display: table;
|
3389 |
+
width: 100%;
|
3390 |
+
table-layout: fixed;
|
3391 |
+
border-collapse: separate;
|
3392 |
+
}
|
3393 |
+
.btn-group-justified > .btn,
|
3394 |
+
.btn-group-justified > .btn-group {
|
3395 |
+
float: none;
|
3396 |
+
display: table-cell;
|
3397 |
+
width: 1%;
|
3398 |
+
}
|
3399 |
+
.btn-group-justified > .btn-group .btn {
|
3400 |
+
width: 100%;
|
3401 |
+
}
|
3402 |
+
.btn-group-justified > .btn-group .dropdown-menu {
|
3403 |
+
left: auto;
|
3404 |
+
}
|
3405 |
+
[data-toggle="buttons"] > .btn > input[type="radio"],
|
3406 |
+
[data-toggle="buttons"] > .btn > input[type="checkbox"] {
|
3407 |
+
position: absolute;
|
3408 |
+
z-index: -1;
|
3409 |
+
opacity: 0;
|
3410 |
+
filter: alpha(opacity=0);
|
3411 |
+
}
|
3412 |
+
.input-group {
|
3413 |
+
position: relative;
|
3414 |
+
display: table;
|
3415 |
+
border-collapse: separate;
|
3416 |
+
}
|
3417 |
+
.input-group[class*="col-"] {
|
3418 |
+
float: none;
|
3419 |
+
padding-left: 0;
|
3420 |
+
padding-right: 0;
|
3421 |
+
}
|
3422 |
+
.input-group .form-control {
|
3423 |
+
position: relative;
|
3424 |
+
z-index: 2;
|
3425 |
+
float: left;
|
3426 |
+
width: 100%;
|
3427 |
+
margin-bottom: 0;
|
3428 |
+
}
|
3429 |
+
.input-group-lg > .form-control,
|
3430 |
+
.input-group-lg > .input-group-addon,
|
3431 |
+
.input-group-lg > .input-group-btn > .btn {
|
3432 |
+
height: 46px;
|
3433 |
+
padding: 10px 16px;
|
3434 |
+
font-size: 18px;
|
3435 |
+
line-height: 1.33;
|
3436 |
+
border-radius: 6px;
|
3437 |
+
}
|
3438 |
+
select.input-group-lg > .form-control,
|
3439 |
+
select.input-group-lg > .input-group-addon,
|
3440 |
+
select.input-group-lg > .input-group-btn > .btn {
|
3441 |
+
height: 46px;
|
3442 |
+
line-height: 46px;
|
3443 |
+
}
|
3444 |
+
textarea.input-group-lg > .form-control,
|
3445 |
+
textarea.input-group-lg > .input-group-addon,
|
3446 |
+
textarea.input-group-lg > .input-group-btn > .btn,
|
3447 |
+
select[multiple].input-group-lg > .form-control,
|
3448 |
+
select[multiple].input-group-lg > .input-group-addon,
|
3449 |
+
select[multiple].input-group-lg > .input-group-btn > .btn {
|
3450 |
+
height: auto;
|
3451 |
+
}
|
3452 |
+
.input-group-sm > .form-control,
|
3453 |
+
.input-group-sm > .input-group-addon,
|
3454 |
+
.input-group-sm > .input-group-btn > .btn {
|
3455 |
+
height: 30px;
|
3456 |
+
padding: 5px 10px;
|
3457 |
+
font-size: 12px;
|
3458 |
+
line-height: 1.5;
|
3459 |
+
border-radius: 3px;
|
3460 |
+
}
|
3461 |
+
select.input-group-sm > .form-control,
|
3462 |
+
select.input-group-sm > .input-group-addon,
|
3463 |
+
select.input-group-sm > .input-group-btn > .btn {
|
3464 |
+
height: 30px;
|
3465 |
+
line-height: 30px;
|
3466 |
+
}
|
3467 |
+
textarea.input-group-sm > .form-control,
|
3468 |
+
textarea.input-group-sm > .input-group-addon,
|
3469 |
+
textarea.input-group-sm > .input-group-btn > .btn,
|
3470 |
+
select[multiple].input-group-sm > .form-control,
|
3471 |
+
select[multiple].input-group-sm > .input-group-addon,
|
3472 |
+
select[multiple].input-group-sm > .input-group-btn > .btn {
|
3473 |
+
height: auto;
|
3474 |
+
}
|
3475 |
+
.input-group-addon,
|
3476 |
+
.input-group-btn,
|
3477 |
+
.input-group .form-control {
|
3478 |
+
display: table-cell;
|
3479 |
+
}
|
3480 |
+
.input-group-addon:not(:first-child):not(:last-child),
|
3481 |
+
.input-group-btn:not(:first-child):not(:last-child),
|
3482 |
+
.input-group .form-control:not(:first-child):not(:last-child) {
|
3483 |
+
border-radius: 0;
|
3484 |
+
}
|
3485 |
+
.input-group-addon,
|
3486 |
+
.input-group-btn {
|
3487 |
+
width: 1%;
|
3488 |
+
white-space: nowrap;
|
3489 |
+
vertical-align: middle;
|
3490 |
+
}
|
3491 |
+
.input-group-addon {
|
3492 |
+
padding: 6px 12px;
|
3493 |
+
font-size: 14px;
|
3494 |
+
font-weight: normal;
|
3495 |
+
line-height: 1;
|
3496 |
+
color: #555555;
|
3497 |
+
text-align: center;
|
3498 |
+
background-color: #eeeeee;
|
3499 |
+
border: 1px solid #cccccc;
|
3500 |
+
border-radius: 4px;
|
3501 |
+
}
|
3502 |
+
.input-group-addon.input-sm {
|
3503 |
+
padding: 5px 10px;
|
3504 |
+
font-size: 12px;
|
3505 |
+
border-radius: 3px;
|
3506 |
+
}
|
3507 |
+
.input-group-addon.input-lg {
|
3508 |
+
padding: 10px 16px;
|
3509 |
+
font-size: 18px;
|
3510 |
+
border-radius: 6px;
|
3511 |
+
}
|
3512 |
+
.input-group-addon input[type="radio"],
|
3513 |
+
.input-group-addon input[type="checkbox"] {
|
3514 |
+
margin-top: 0;
|
3515 |
+
}
|
3516 |
+
.input-group .form-control:first-child,
|
3517 |
+
.input-group-addon:first-child,
|
3518 |
+
.input-group-btn:first-child > .btn,
|
3519 |
+
.input-group-btn:first-child > .btn-group > .btn,
|
3520 |
+
.input-group-btn:first-child > .dropdown-toggle,
|
3521 |
+
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
|
3522 |
+
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
|
3523 |
+
border-bottom-right-radius: 0;
|
3524 |
+
border-top-right-radius: 0;
|
3525 |
+
}
|
3526 |
+
.input-group-addon:first-child {
|
3527 |
+
border-right: 0;
|
3528 |
+
}
|
3529 |
+
.input-group .form-control:last-child,
|
3530 |
+
.input-group-addon:last-child,
|
3531 |
+
.input-group-btn:last-child > .btn,
|
3532 |
+
.input-group-btn:last-child > .btn-group > .btn,
|
3533 |
+
.input-group-btn:last-child > .dropdown-toggle,
|
3534 |
+
.input-group-btn:first-child > .btn:not(:first-child),
|
3535 |
+
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
|
3536 |
+
border-bottom-left-radius: 0;
|
3537 |
+
border-top-left-radius: 0;
|
3538 |
+
}
|
3539 |
+
.input-group-addon:last-child {
|
3540 |
+
border-left: 0;
|
3541 |
+
}
|
3542 |
+
.input-group-btn {
|
3543 |
+
position: relative;
|
3544 |
+
font-size: 0;
|
3545 |
+
white-space: nowrap;
|
3546 |
+
}
|
3547 |
+
.input-group-btn > .btn {
|
3548 |
+
position: relative;
|
3549 |
+
}
|
3550 |
+
.input-group-btn > .btn + .btn {
|
3551 |
+
margin-left: -1px;
|
3552 |
+
}
|
3553 |
+
.input-group-btn > .btn:hover,
|
3554 |
+
.input-group-btn > .btn:focus,
|
3555 |
+
.input-group-btn > .btn:active {
|
3556 |
+
z-index: 2;
|
3557 |
+
}
|
3558 |
+
.input-group-btn:first-child > .btn,
|
3559 |
+
.input-group-btn:first-child > .btn-group {
|
3560 |
+
margin-right: -1px;
|
3561 |
+
}
|
3562 |
+
.input-group-btn:last-child > .btn,
|
3563 |
+
.input-group-btn:last-child > .btn-group {
|
3564 |
+
margin-left: -1px;
|
3565 |
+
}
|
3566 |
+
.nav {
|
3567 |
+
margin-bottom: 0;
|
3568 |
+
padding-left: 0;
|
3569 |
+
list-style: none;
|
3570 |
+
}
|
3571 |
+
.nav > li {
|
3572 |
+
position: relative;
|
3573 |
+
display: block;
|
3574 |
+
}
|
3575 |
+
.nav > li > a {
|
3576 |
+
position: relative;
|
3577 |
+
display: block;
|
3578 |
+
padding: 10px 15px;
|
3579 |
+
}
|
3580 |
+
.nav > li > a:hover,
|
3581 |
+
.nav > li > a:focus {
|
3582 |
+
text-decoration: none;
|
3583 |
+
background-color: #eeeeee;
|
3584 |
+
}
|
3585 |
+
.nav > li.disabled > a {
|
3586 |
+
color: #777777;
|
3587 |
+
}
|
3588 |
+
.nav > li.disabled > a:hover,
|
3589 |
+
.nav > li.disabled > a:focus {
|
3590 |
+
color: #777777;
|
3591 |
+
text-decoration: none;
|
3592 |
+
background-color: transparent;
|
3593 |
+
cursor: not-allowed;
|
3594 |
+
}
|
3595 |
+
.nav .open > a,
|
3596 |
+
.nav .open > a:hover,
|
3597 |
+
.nav .open > a:focus {
|
3598 |
+
background-color: #eeeeee;
|
3599 |
+
border-color: #428bca;
|
3600 |
+
}
|
3601 |
+
.nav .nav-divider {
|
3602 |
+
height: 1px;
|
3603 |
+
margin: 9px 0;
|
3604 |
+
overflow: hidden;
|
3605 |
+
background-color: #e5e5e5;
|
3606 |
+
}
|
3607 |
+
.nav > li > a > img {
|
3608 |
+
max-width: none;
|
3609 |
+
}
|
3610 |
+
.nav-tabs {
|
3611 |
+
border-bottom: 1px solid #dddddd;
|
3612 |
+
}
|
3613 |
+
.nav-tabs > li {
|
3614 |
+
float: left;
|
3615 |
+
margin-bottom: -1px;
|
3616 |
+
}
|
3617 |
+
.nav-tabs > li > a {
|
3618 |
+
margin-right: 2px;
|
3619 |
+
line-height: 1.42857143;
|
3620 |
+
border: 1px solid transparent;
|
3621 |
+
border-radius: 4px 4px 0 0;
|
3622 |
+
}
|
3623 |
+
.nav-tabs > li > a:hover {
|
3624 |
+
border-color: #eeeeee #eeeeee #dddddd;
|
3625 |
+
}
|
3626 |
+
.nav-tabs > li.active > a,
|
3627 |
+
.nav-tabs > li.active > a:hover,
|
3628 |
+
.nav-tabs > li.active > a:focus {
|
3629 |
+
color: #555555;
|
3630 |
+
background-color: #ffffff;
|
3631 |
+
border: 1px solid #dddddd;
|
3632 |
+
border-bottom-color: transparent;
|
3633 |
+
cursor: default;
|
3634 |
+
}
|
3635 |
+
.nav-tabs.nav-justified {
|
3636 |
+
width: 100%;
|
3637 |
+
border-bottom: 0;
|
3638 |
+
}
|
3639 |
+
.nav-tabs.nav-justified > li {
|
3640 |
+
float: none;
|
3641 |
+
}
|
3642 |
+
.nav-tabs.nav-justified > li > a {
|
3643 |
+
text-align: center;
|
3644 |
+
margin-bottom: 5px;
|
3645 |
+
}
|
3646 |
+
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
|
3647 |
+
top: auto;
|
3648 |
+
left: auto;
|
3649 |
+
}
|
3650 |
+
@media (min-width: 768px) {
|
3651 |
+
.nav-tabs.nav-justified > li {
|
3652 |
+
display: table-cell;
|
3653 |
+
width: 1%;
|
3654 |
+
}
|
3655 |
+
.nav-tabs.nav-justified > li > a {
|
3656 |
+
margin-bottom: 0;
|
3657 |
+
}
|
3658 |
+
}
|
3659 |
+
.nav-tabs.nav-justified > li > a {
|
3660 |
+
margin-right: 0;
|
3661 |
+
border-radius: 4px;
|
3662 |
+
}
|
3663 |
+
.nav-tabs.nav-justified > .active > a,
|
3664 |
+
.nav-tabs.nav-justified > .active > a:hover,
|
3665 |
+
.nav-tabs.nav-justified > .active > a:focus {
|
3666 |
+
border: 1px solid #dddddd;
|
3667 |
+
}
|
3668 |
+
@media (min-width: 768px) {
|
3669 |
+
.nav-tabs.nav-justified > li > a {
|
3670 |
+
border-bottom: 1px solid #dddddd;
|
3671 |
+
border-radius: 4px 4px 0 0;
|
3672 |
+
}
|
3673 |
+
.nav-tabs.nav-justified > .active > a,
|
3674 |
+
.nav-tabs.nav-justified > .active > a:hover,
|
3675 |
+
.nav-tabs.nav-justified > .active > a:focus {
|
3676 |
+
border-bottom-color: #ffffff;
|
3677 |
+
}
|
3678 |
+
}
|
3679 |
+
.nav-pills > li {
|
3680 |
+
float: left;
|
3681 |
+
}
|
3682 |
+
.nav-pills > li > a {
|
3683 |
+
border-radius: 4px;
|
3684 |
+
}
|
3685 |
+
.nav-pills > li + li {
|
3686 |
+
margin-left: 2px;
|
3687 |
+
}
|
3688 |
+
.nav-pills > li.active > a,
|
3689 |
+
.nav-pills > li.active > a:hover,
|
3690 |
+
.nav-pills > li.active > a:focus {
|
3691 |
+
color: #ffffff;
|
3692 |
+
background-color: #428bca;
|
3693 |
+
}
|
3694 |
+
.nav-stacked > li {
|
3695 |
+
float: none;
|
3696 |
+
}
|
3697 |
+
.nav-stacked > li + li {
|
3698 |
+
margin-top: 2px;
|
3699 |
+
margin-left: 0;
|
3700 |
+
}
|
3701 |
+
.nav-justified {
|
3702 |
+
width: 100%;
|
3703 |
+
}
|
3704 |
+
.nav-justified > li {
|
3705 |
+
float: none;
|
3706 |
+
}
|
3707 |
+
.nav-justified > li > a {
|
3708 |
+
text-align: center;
|
3709 |
+
margin-bottom: 5px;
|
3710 |
+
}
|
3711 |
+
.nav-justified > .dropdown .dropdown-menu {
|
3712 |
+
top: auto;
|
3713 |
+
left: auto;
|
3714 |
+
}
|
3715 |
+
@media (min-width: 768px) {
|
3716 |
+
.nav-justified > li {
|
3717 |
+
display: table-cell;
|
3718 |
+
width: 1%;
|
3719 |
+
}
|
3720 |
+
.nav-justified > li > a {
|
3721 |
+
margin-bottom: 0;
|
3722 |
+
}
|
3723 |
+
}
|
3724 |
+
.nav-tabs-justified {
|
3725 |
+
border-bottom: 0;
|
3726 |
+
}
|
3727 |
+
.nav-tabs-justified > li > a {
|
3728 |
+
margin-right: 0;
|
3729 |
+
border-radius: 4px;
|
3730 |
+
}
|
3731 |
+
.nav-tabs-justified > .active > a,
|
3732 |
+
.nav-tabs-justified > .active > a:hover,
|
3733 |
+
.nav-tabs-justified > .active > a:focus {
|
3734 |
+
border: 1px solid #dddddd;
|
3735 |
+
}
|
3736 |
+
@media (min-width: 768px) {
|
3737 |
+
.nav-tabs-justified > li > a {
|
3738 |
+
border-bottom: 1px solid #dddddd;
|
3739 |
+
border-radius: 4px 4px 0 0;
|
3740 |
+
}
|
3741 |
+
.nav-tabs-justified > .active > a,
|
3742 |
+
.nav-tabs-justified > .active > a:hover,
|
3743 |
+
.nav-tabs-justified > .active > a:focus {
|
3744 |
+
border-bottom-color: #ffffff;
|
3745 |
+
}
|
3746 |
+
}
|
3747 |
+
.tab-content > .tab-pane {
|
3748 |
+
display: none;
|
3749 |
+
}
|
3750 |
+
.tab-content > .active {
|
3751 |
+
display: block;
|
3752 |
+
}
|
3753 |
+
.nav-tabs .dropdown-menu {
|
3754 |
+
margin-top: -1px;
|
3755 |
+
border-top-right-radius: 0;
|
3756 |
+
border-top-left-radius: 0;
|
3757 |
+
}
|
3758 |
+
.navbar {
|
3759 |
+
position: relative;
|
3760 |
+
min-height: 50px;
|
3761 |
+
margin-bottom: 20px;
|
3762 |
+
border: 1px solid transparent;
|
3763 |
+
}
|
3764 |
+
@media (min-width: 768px) {
|
3765 |
+
.navbar {
|
3766 |
+
border-radius: 4px;
|
3767 |
+
}
|
3768 |
+
}
|
3769 |
+
@media (min-width: 768px) {
|
3770 |
+
.navbar-header {
|
3771 |
+
float: left;
|
3772 |
+
}
|
3773 |
+
}
|
3774 |
+
.navbar-collapse {
|
3775 |
+
overflow-x: visible;
|
3776 |
+
padding-right: 15px;
|
3777 |
+
padding-left: 15px;
|
3778 |
+
border-top: 1px solid transparent;
|
3779 |
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
|
3780 |
+
-webkit-overflow-scrolling: touch;
|
3781 |
+
}
|
3782 |
+
.navbar-collapse.in {
|
3783 |
+
overflow-y: auto;
|
3784 |
+
}
|
3785 |
+
@media (min-width: 768px) {
|
3786 |
+
.navbar-collapse {
|
3787 |
+
width: auto;
|
3788 |
+
border-top: 0;
|
3789 |
+
box-shadow: none;
|
3790 |
+
}
|
3791 |
+
.navbar-collapse.collapse {
|
3792 |
+
display: block !important;
|
3793 |
+
height: auto !important;
|
3794 |
+
padding-bottom: 0;
|
3795 |
+
overflow: visible !important;
|
3796 |
+
}
|
3797 |
+
.navbar-collapse.in {
|
3798 |
+
overflow-y: visible;
|
3799 |
+
}
|
3800 |
+
.navbar-fixed-top .navbar-collapse,
|
3801 |
+
.navbar-static-top .navbar-collapse,
|
3802 |
+
.navbar-fixed-bottom .navbar-collapse {
|
3803 |
+
padding-left: 0;
|
3804 |
+
padding-right: 0;
|
3805 |
+
}
|
3806 |
+
}
|
3807 |
+
.navbar-fixed-top .navbar-collapse,
|
3808 |
+
.navbar-fixed-bottom .navbar-collapse {
|
3809 |
+
max-height: 340px;
|
3810 |
+
}
|
3811 |
+
@media (max-width: 480px) and (orientation: landscape) {
|
3812 |
+
.navbar-fixed-top .navbar-collapse,
|
3813 |
+
.navbar-fixed-bottom .navbar-collapse {
|
3814 |
+
max-height: 200px;
|
3815 |
+
}
|
3816 |
+
}
|
3817 |
+
.container > .navbar-header,
|
3818 |
+
.container-fluid > .navbar-header,
|
3819 |
+
.container > .navbar-collapse,
|
3820 |
+
.container-fluid > .navbar-collapse {
|
3821 |
+
margin-right: -15px;
|
3822 |
+
margin-left: -15px;
|
3823 |
+
}
|
3824 |
+
@media (min-width: 768px) {
|
3825 |
+
.container > .navbar-header,
|
3826 |
+
.container-fluid > .navbar-header,
|
3827 |
+
.container > .navbar-collapse,
|
3828 |
+
.container-fluid > .navbar-collapse {
|
3829 |
+
margin-right: 0;
|
3830 |
+
margin-left: 0;
|
3831 |
+
}
|
3832 |
+
}
|
3833 |
+
.navbar-static-top {
|
3834 |
+
z-index: 1000;
|
3835 |
+
border-width: 0 0 1px;
|
3836 |
+
}
|
3837 |
+
@media (min-width: 768px) {
|
3838 |
+
.navbar-static-top {
|
3839 |
+
border-radius: 0;
|
3840 |
+
}
|
3841 |
+
}
|
3842 |
+
.navbar-fixed-top,
|
3843 |
+
.navbar-fixed-bottom {
|
3844 |
+
position: fixed;
|
3845 |
+
right: 0;
|
3846 |
+
left: 0;
|
3847 |
+
z-index: 1030;
|
3848 |
+
-webkit-transform: translate3d(0, 0, 0);
|
3849 |
+
transform: translate3d(0, 0, 0);
|
3850 |
+
}
|
3851 |
+
@media (min-width: 768px) {
|
3852 |
+
.navbar-fixed-top,
|
3853 |
+
.navbar-fixed-bottom {
|
3854 |
+
border-radius: 0;
|
3855 |
+
}
|
3856 |
+
}
|
3857 |
+
.navbar-fixed-top {
|
3858 |
+
top: 0;
|
3859 |
+
border-width: 0 0 1px;
|
3860 |
+
}
|
3861 |
+
.navbar-fixed-bottom {
|
3862 |
+
bottom: 0;
|
3863 |
+
margin-bottom: 0;
|
3864 |
+
border-width: 1px 0 0;
|
3865 |
+
}
|
3866 |
+
.navbar-brand {
|
3867 |
+
float: left;
|
3868 |
+
padding: 15px 15px;
|
3869 |
+
font-size: 18px;
|
3870 |
+
line-height: 20px;
|
3871 |
+
height: 50px;
|
3872 |
+
}
|
3873 |
+
.navbar-brand:hover,
|
3874 |
+
.navbar-brand:focus {
|
3875 |
+
text-decoration: none;
|
3876 |
+
}
|
3877 |
+
@media (min-width: 768px) {
|
3878 |
+
.navbar > .container .navbar-brand,
|
3879 |
+
.navbar > .container-fluid .navbar-brand {
|
3880 |
+
margin-left: -15px;
|
3881 |
+
}
|
3882 |
+
}
|
3883 |
+
.navbar-toggle {
|
3884 |
+
position: relative;
|
3885 |
+
float: right;
|
3886 |
+
margin-right: 15px;
|
3887 |
+
padding: 9px 10px;
|
3888 |
+
margin-top: 8px;
|
3889 |
+
margin-bottom: 8px;
|
3890 |
+
background-color: transparent;
|
3891 |
+
background-image: none;
|
3892 |
+
border: 1px solid transparent;
|
3893 |
+
border-radius: 4px;
|
3894 |
+
}
|
3895 |
+
.navbar-toggle:focus {
|
3896 |
+
outline: 0;
|
3897 |
+
}
|
3898 |
+
.navbar-toggle .icon-bar {
|
3899 |
+
display: block;
|
3900 |
+
width: 22px;
|
3901 |
+
height: 2px;
|
3902 |
+
border-radius: 1px;
|
3903 |
+
}
|
3904 |
+
.navbar-toggle .icon-bar + .icon-bar {
|
3905 |
+
margin-top: 4px;
|
3906 |
+
}
|
3907 |
+
@media (min-width: 768px) {
|
3908 |
+
.navbar-toggle {
|
3909 |
+
display: none;
|
3910 |
+
}
|
3911 |
+
}
|
3912 |
+
.navbar-nav {
|
3913 |
+
margin: 7.5px -15px;
|
3914 |
+
}
|
3915 |
+
.navbar-nav > li > a {
|
3916 |
+
padding-top: 10px;
|
3917 |
+
padding-bottom: 10px;
|
3918 |
+
line-height: 20px;
|
3919 |
+
}
|
3920 |
+
@media (max-width: 767px) {
|
3921 |
+
.navbar-nav .open .dropdown-menu {
|
3922 |
+
position: static;
|
3923 |
+
float: none;
|
3924 |
+
width: auto;
|
3925 |
+
margin-top: 0;
|
3926 |
+
background-color: transparent;
|
3927 |
+
border: 0;
|
3928 |
+
box-shadow: none;
|
3929 |
+
}
|
3930 |
+
.navbar-nav .open .dropdown-menu > li > a,
|
3931 |
+
.navbar-nav .open .dropdown-menu .dropdown-header {
|
3932 |
+
padding: 5px 15px 5px 25px;
|
3933 |
+
}
|
3934 |
+
.navbar-nav .open .dropdown-menu > li > a {
|
3935 |
+
line-height: 20px;
|
3936 |
+
}
|
3937 |
+
.navbar-nav .open .dropdown-menu > li > a:hover,
|
3938 |
+
.navbar-nav .open .dropdown-menu > li > a:focus {
|
3939 |
+
background-image: none;
|
3940 |
+
}
|
3941 |
+
}
|
3942 |
+
@media (min-width: 768px) {
|
3943 |
+
.navbar-nav {
|
3944 |
+
float: left;
|
3945 |
+
margin: 0;
|
3946 |
+
}
|
3947 |
+
.navbar-nav > li {
|
3948 |
+
float: left;
|
3949 |
+
}
|
3950 |
+
.navbar-nav > li > a {
|
3951 |
+
padding-top: 15px;
|
3952 |
+
padding-bottom: 15px;
|
3953 |
+
}
|
3954 |
+
.navbar-nav.navbar-right:last-child {
|
3955 |
+
margin-right: -15px;
|
3956 |
+
}
|
3957 |
+
}
|
3958 |
+
@media (min-width: 768px) {
|
3959 |
+
.navbar-left {
|
3960 |
+
float: left !important;
|
3961 |
+
}
|
3962 |
+
.navbar-right {
|
3963 |
+
float: right !important;
|
3964 |
+
}
|
3965 |
+
}
|
3966 |
+
.navbar-form {
|
3967 |
+
margin-left: -15px;
|
3968 |
+
margin-right: -15px;
|
3969 |
+
padding: 10px 15px;
|
3970 |
+
border-top: 1px solid transparent;
|
3971 |
+
border-bottom: 1px solid transparent;
|
3972 |
+
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
|
3973 |
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
|
3974 |
+
margin-top: 8px;
|
3975 |
+
margin-bottom: 8px;
|
3976 |
+
}
|
3977 |
+
@media (min-width: 768px) {
|
3978 |
+
.navbar-form .form-group {
|
3979 |
+
display: inline-block;
|
3980 |
+
margin-bottom: 0;
|
3981 |
+
vertical-align: middle;
|
3982 |
+
}
|
3983 |
+
.navbar-form .form-control {
|
3984 |
+
display: inline-block;
|
3985 |
+
width: auto;
|
3986 |
+
vertical-align: middle;
|
3987 |
+
}
|
3988 |
+
.navbar-form .input-group {
|
3989 |
+
display: inline-table;
|
3990 |
+
vertical-align: middle;
|
3991 |
+
}
|
3992 |
+
.navbar-form .input-group .input-group-addon,
|
3993 |
+
.navbar-form .input-group .input-group-btn,
|
3994 |
+
.navbar-form .input-group .form-control {
|
3995 |
+
width: auto;
|
3996 |
+
}
|
3997 |
+
.navbar-form .input-group > .form-control {
|
3998 |
+
width: 100%;
|
3999 |
+
}
|
4000 |
+
.navbar-form .control-label {
|
4001 |
+
margin-bottom: 0;
|
4002 |
+
vertical-align: middle;
|
4003 |
+
}
|
4004 |
+
.navbar-form .radio,
|
4005 |
+
.navbar-form .checkbox {
|
4006 |
+
display: inline-block;
|
4007 |
+
margin-top: 0;
|
4008 |
+
margin-bottom: 0;
|
4009 |
+
vertical-align: middle;
|
4010 |
+
}
|
4011 |
+
.navbar-form .radio label,
|
4012 |
+
.navbar-form .checkbox label {
|
4013 |
+
padding-left: 0;
|
4014 |
+
}
|
4015 |
+
.navbar-form .radio input[type="radio"],
|
4016 |
+
.navbar-form .checkbox input[type="checkbox"] {
|
4017 |
+
position: relative;
|
4018 |
+
margin-left: 0;
|
4019 |
+
}
|
4020 |
+
.navbar-form .has-feedback .form-control-feedback {
|
4021 |
+
top: 0;
|
4022 |
+
}
|
4023 |
+
}
|
4024 |
+
@media (max-width: 767px) {
|
4025 |
+
.navbar-form .form-group {
|
4026 |
+
margin-bottom: 5px;
|
4027 |
+
}
|
4028 |
+
}
|
4029 |
+
@media (min-width: 768px) {
|
4030 |
+
.navbar-form {
|
4031 |
+
width: auto;
|
4032 |
+
border: 0;
|
4033 |
+
margin-left: 0;
|
4034 |
+
margin-right: 0;
|
4035 |
+
padding-top: 0;
|
4036 |
+
padding-bottom: 0;
|
4037 |
+
-webkit-box-shadow: none;
|
4038 |
+
box-shadow: none;
|
4039 |
+
}
|
4040 |
+
.navbar-form.navbar-right:last-child {
|
4041 |
+
margin-right: -15px;
|
4042 |
+
}
|
4043 |
+
}
|
4044 |
+
.navbar-nav > li > .dropdown-menu {
|
4045 |
+
margin-top: 0;
|
4046 |
+
border-top-right-radius: 0;
|
4047 |
+
border-top-left-radius: 0;
|
4048 |
+
}
|
4049 |
+
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
|
4050 |
+
border-bottom-right-radius: 0;
|
4051 |
+
border-bottom-left-radius: 0;
|
4052 |
+
}
|
4053 |
+
.navbar-btn {
|
4054 |
+
margin-top: 8px;
|
4055 |
+
margin-bottom: 8px;
|
4056 |
+
}
|
4057 |
+
.navbar-btn.btn-sm {
|
4058 |
+
margin-top: 10px;
|
4059 |
+
margin-bottom: 10px;
|
4060 |
+
}
|
4061 |
+
.navbar-btn.btn-xs {
|
4062 |
+
margin-top: 14px;
|
4063 |
+
margin-bottom: 14px;
|
4064 |
+
}
|
4065 |
+
.navbar-text {
|
4066 |
+
margin-top: 15px;
|
4067 |
+
margin-bottom: 15px;
|
4068 |
+
}
|
4069 |
+
@media (min-width: 768px) {
|
4070 |
+
.navbar-text {
|
4071 |
+
float: left;
|
4072 |
+
margin-left: 15px;
|
4073 |
+
margin-right: 15px;
|
4074 |
+
}
|
4075 |
+
.navbar-text.navbar-right:last-child {
|
4076 |
+
margin-right: 0;
|
4077 |
+
}
|
4078 |
+
}
|
4079 |
+
.navbar-default {
|
4080 |
+
background-color: #f8f8f8;
|
4081 |
+
border-color: #e7e7e7;
|
4082 |
+
}
|
4083 |
+
.navbar-default .navbar-brand {
|
4084 |
+
color: #777777;
|
4085 |
+
}
|
4086 |
+
.navbar-default .navbar-brand:hover,
|
4087 |
+
.navbar-default .navbar-brand:focus {
|
4088 |
+
color: #5e5e5e;
|
4089 |
+
background-color: transparent;
|
4090 |
+
}
|
4091 |
+
.navbar-default .navbar-text {
|
4092 |
+
color: #777777;
|
4093 |
+
}
|
4094 |
+
.navbar-default .navbar-nav > li > a {
|
4095 |
+
color: #777777;
|
4096 |
+
}
|
4097 |
+
.navbar-default .navbar-nav > li > a:hover,
|
4098 |
+
.navbar-default .navbar-nav > li > a:focus {
|
4099 |
+
color: #333333;
|
4100 |
+
background-color: transparent;
|
4101 |
+
}
|
4102 |
+
.navbar-default .navbar-nav > .active > a,
|
4103 |
+
.navbar-default .navbar-nav > .active > a:hover,
|
4104 |
+
.navbar-default .navbar-nav > .active > a:focus {
|
4105 |
+
color: #555555;
|
4106 |
+
background-color: #e7e7e7;
|
4107 |
+
}
|
4108 |
+
.navbar-default .navbar-nav > .disabled > a,
|
4109 |
+
.navbar-default .navbar-nav > .disabled > a:hover,
|
4110 |
+
.navbar-default .navbar-nav > .disabled > a:focus {
|
4111 |
+
color: #cccccc;
|
4112 |
+
background-color: transparent;
|
4113 |
+
}
|
4114 |
+
.navbar-default .navbar-toggle {
|
4115 |
+
border-color: #dddddd;
|
4116 |
+
}
|
4117 |
+
.navbar-default .navbar-toggle:hover,
|
4118 |
+
.navbar-default .navbar-toggle:focus {
|
4119 |
+
background-color: #dddddd;
|
4120 |
+
}
|
4121 |
+
.navbar-default .navbar-toggle .icon-bar {
|
4122 |
+
background-color: #888888;
|
4123 |
+
}
|
4124 |
+
.navbar-default .navbar-collapse,
|
4125 |
+
.navbar-default .navbar-form {
|
4126 |
+
border-color: #e7e7e7;
|
4127 |
+
}
|
4128 |
+
.navbar-default .navbar-nav > .open > a,
|
4129 |
+
.navbar-default .navbar-nav > .open > a:hover,
|
4130 |
+
.navbar-default .navbar-nav > .open > a:focus {
|
4131 |
+
background-color: #e7e7e7;
|
4132 |
+
color: #555555;
|
4133 |
+
}
|
4134 |
+
@media (max-width: 767px) {
|
4135 |
+
.navbar-default .navbar-nav .open .dropdown-menu > li > a {
|
4136 |
+
color: #777777;
|
4137 |
+
}
|
4138 |
+
.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
|
4139 |
+
.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
|
4140 |
+
color: #333333;
|
4141 |
+
background-color: transparent;
|
4142 |
+
}
|
4143 |
+
.navbar-default .navbar-nav .open .dropdown-menu > .active > a,
|
4144 |
+
.navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
|
4145 |
+
.navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
|
4146 |
+
color: #555555;
|
4147 |
+
background-color: #e7e7e7;
|
4148 |
+
}
|
4149 |
+
.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
|
4150 |
+
.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
|
4151 |
+
.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
|
4152 |
+
color: #cccccc;
|
4153 |
+
background-color: transparent;
|
4154 |
+
}
|
4155 |
+
}
|
4156 |
+
.navbar-default .navbar-link {
|
4157 |
+
color: #777777;
|
4158 |
+
}
|
4159 |
+
.navbar-default .navbar-link:hover {
|
4160 |
+
color: #333333;
|
4161 |
+
}
|
4162 |
+
.navbar-default .btn-link {
|
4163 |
+
color: #777777;
|
4164 |
+
}
|
4165 |
+
.navbar-default .btn-link:hover,
|
4166 |
+
.navbar-default .btn-link:focus {
|
4167 |
+
color: #333333;
|
4168 |
+
}
|
4169 |
+
.navbar-default .btn-link[disabled]:hover,
|
4170 |
+
fieldset[disabled] .navbar-default .btn-link:hover,
|
4171 |
+
.navbar-default .btn-link[disabled]:focus,
|
4172 |
+
fieldset[disabled] .navbar-default .btn-link:focus {
|
4173 |
+
color: #cccccc;
|
4174 |
+
}
|
4175 |
+
.navbar-inverse {
|
4176 |
+
background-color: #222222;
|
4177 |
+
border-color: #080808;
|
4178 |
+
}
|
4179 |
+
.navbar-inverse .navbar-brand {
|
4180 |
+
color: #777777;
|
4181 |
+
}
|
4182 |
+
.navbar-inverse .navbar-brand:hover,
|
4183 |
+
.navbar-inverse .navbar-brand:focus {
|
4184 |
+
color: #ffffff;
|
4185 |
+
background-color: transparent;
|
4186 |
+
}
|
4187 |
+
.navbar-inverse .navbar-text {
|
4188 |
+
color: #777777;
|
4189 |
+
}
|
4190 |
+
.navbar-inverse .navbar-nav > li > a {
|
4191 |
+
color: #777777;
|
4192 |
+
}
|
4193 |
+
.navbar-inverse .navbar-nav > li > a:hover,
|
4194 |
+
.navbar-inverse .navbar-nav > li > a:focus {
|
4195 |
+
color: #ffffff;
|
4196 |
+
background-color: transparent;
|
4197 |
+
}
|
4198 |
+
.navbar-inverse .navbar-nav > .active > a,
|
4199 |
+
.navbar-inverse .navbar-nav > .active > a:hover,
|
4200 |
+
.navbar-inverse .navbar-nav > .active > a:focus {
|
4201 |
+
color: #ffffff;
|
4202 |
+
background-color: #080808;
|
4203 |
+
}
|
4204 |
+
.navbar-inverse .navbar-nav > .disabled > a,
|
4205 |
+
.navbar-inverse .navbar-nav > .disabled > a:hover,
|
4206 |
+
.navbar-inverse .navbar-nav > .disabled > a:focus {
|
4207 |
+
color: #444444;
|
4208 |
+
background-color: transparent;
|
4209 |
+
}
|
4210 |
+
.navbar-inverse .navbar-toggle {
|
4211 |
+
border-color: #333333;
|
4212 |
+
}
|
4213 |
+
.navbar-inverse .navbar-toggle:hover,
|
4214 |
+
.navbar-inverse .navbar-toggle:focus {
|
4215 |
+
background-color: #333333;
|
4216 |
+
}
|
4217 |
+
.navbar-inverse .navbar-toggle .icon-bar {
|
4218 |
+
background-color: #ffffff;
|
4219 |
+
}
|
4220 |
+
.navbar-inverse .navbar-collapse,
|
4221 |
+
.navbar-inverse .navbar-form {
|
4222 |
+
border-color: #101010;
|
4223 |
+
}
|
4224 |
+
.navbar-inverse .navbar-nav > .open > a,
|
4225 |
+
.navbar-inverse .navbar-nav > .open > a:hover,
|
4226 |
+
.navbar-inverse .navbar-nav > .open > a:focus {
|
4227 |
+
background-color: #080808;
|
4228 |
+
color: #ffffff;
|
4229 |
+
}
|
4230 |
+
@media (max-width: 767px) {
|
4231 |
+
.navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
|
4232 |
+
border-color: #080808;
|
4233 |
+
}
|
4234 |
+
.navbar-inverse .navbar-nav .open .dropdown-menu .divider {
|
4235 |
+
background-color: #080808;
|
4236 |
+
}
|
4237 |
+
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
|
4238 |
+
color: #777777;
|
4239 |
+
}
|
4240 |
+
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
|
4241 |
+
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
|
4242 |
+
color: #ffffff;
|
4243 |
+
background-color: transparent;
|
4244 |
+
}
|
4245 |
+
.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
|
4246 |
+
.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
|
4247 |
+
.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
|
4248 |
+
color: #ffffff;
|
4249 |
+
background-color: #080808;
|
4250 |
+
}
|
4251 |
+
.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
|
4252 |
+
.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
|
4253 |
+
.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
|
4254 |
+
color: #444444;
|
4255 |
+
background-color: transparent;
|
4256 |
+
}
|
4257 |
+
}
|
4258 |
+
.navbar-inverse .navbar-link {
|
4259 |
+
color: #777777;
|
4260 |
+
}
|
4261 |
+
.navbar-inverse .navbar-link:hover {
|
4262 |
+
color: #ffffff;
|
4263 |
+
}
|
4264 |
+
.navbar-inverse .btn-link {
|
4265 |
+
color: #777777;
|
4266 |
+
}
|
4267 |
+
.navbar-inverse .btn-link:hover,
|
4268 |
+
.navbar-inverse .btn-link:focus {
|
4269 |
+
color: #ffffff;
|
4270 |
+
}
|
4271 |
+
.navbar-inverse .btn-link[disabled]:hover,
|
4272 |
+
fieldset[disabled] .navbar-inverse .btn-link:hover,
|
4273 |
+
.navbar-inverse .btn-link[disabled]:focus,
|
4274 |
+
fieldset[disabled] .navbar-inverse .btn-link:focus {
|
4275 |
+
color: #444444;
|
4276 |
+
}
|
4277 |
+
.breadcrumb {
|
4278 |
+
padding: 8px 15px;
|
4279 |
+
margin-bottom: 20px;
|
4280 |
+
list-style: none;
|
4281 |
+
background-color: #f5f5f5;
|
4282 |
+
border-radius: 4px;
|
4283 |
+
}
|
4284 |
+
.breadcrumb > li {
|
4285 |
+
display: inline-block;
|
4286 |
+
}
|
4287 |
+
.breadcrumb > li + li:before {
|
4288 |
+
content: "/\00a0";
|
4289 |
+
padding: 0 5px;
|
4290 |
+
color: #cccccc;
|
4291 |
+
}
|
4292 |
+
.breadcrumb > .active {
|
4293 |
+
color: #777777;
|
4294 |
+
}
|
4295 |
+
.pagination {
|
4296 |
+
display: inline-block;
|
4297 |
+
padding-left: 0;
|
4298 |
+
margin: 20px 0;
|
4299 |
+
border-radius: 4px;
|
4300 |
+
}
|
4301 |
+
.pagination > li {
|
4302 |
+
display: inline;
|
4303 |
+
}
|
4304 |
+
.pagination > li > a,
|
4305 |
+
.pagination > li > span {
|
4306 |
+
position: relative;
|
4307 |
+
float: left;
|
4308 |
+
padding: 6px 12px;
|
4309 |
+
line-height: 1.42857143;
|
4310 |
+
text-decoration: none;
|
4311 |
+
color: #428bca;
|
4312 |
+
background-color: #ffffff;
|
4313 |
+
border: 1px solid #dddddd;
|
4314 |
+
margin-left: -1px;
|
4315 |
+
}
|
4316 |
+
.pagination > li:first-child > a,
|
4317 |
+
.pagination > li:first-child > span {
|
4318 |
+
margin-left: 0;
|
4319 |
+
border-bottom-left-radius: 4px;
|
4320 |
+
border-top-left-radius: 4px;
|
4321 |
+
}
|
4322 |
+
.pagination > li:last-child > a,
|
4323 |
+
.pagination > li:last-child > span {
|
4324 |
+
border-bottom-right-radius: 4px;
|
4325 |
+
border-top-right-radius: 4px;
|
4326 |
+
}
|
4327 |
+
.pagination > li > a:hover,
|
4328 |
+
.pagination > li > span:hover,
|
4329 |
+
.pagination > li > a:focus,
|
4330 |
+
.pagination > li > span:focus {
|
4331 |
+
color: #2a6496;
|
4332 |
+
background-color: #eeeeee;
|
4333 |
+
border-color: #dddddd;
|
4334 |
+
}
|
4335 |
+
.pagination > .active > a,
|
4336 |
+
.pagination > .active > span,
|
4337 |
+
.pagination > .active > a:hover,
|
4338 |
+
.pagination > .active > span:hover,
|
4339 |
+
.pagination > .active > a:focus,
|
4340 |
+
.pagination > .active > span:focus {
|
4341 |
+
z-index: 2;
|
4342 |
+
color: #ffffff;
|
4343 |
+
background-color: #428bca;
|
4344 |
+
border-color: #428bca;
|
4345 |
+
cursor: default;
|
4346 |
+
}
|
4347 |
+
.pagination > .disabled > span,
|
4348 |
+
.pagination > .disabled > span:hover,
|
4349 |
+
.pagination > .disabled > span:focus,
|
4350 |
+
.pagination > .disabled > a,
|
4351 |
+
.pagination > .disabled > a:hover,
|
4352 |
+
.pagination > .disabled > a:focus {
|
4353 |
+
color: #777777;
|
4354 |
+
background-color: #ffffff;
|
4355 |
+
border-color: #dddddd;
|
4356 |
+
cursor: not-allowed;
|
4357 |
+
}
|
4358 |
+
.pagination-lg > li > a,
|
4359 |
+
.pagination-lg > li > span {
|
4360 |
+
padding: 10px 16px;
|
4361 |
+
font-size: 18px;
|
4362 |
+
}
|
4363 |
+
.pagination-lg > li:first-child > a,
|
4364 |
+
.pagination-lg > li:first-child > span {
|
4365 |
+
border-bottom-left-radius: 6px;
|
4366 |
+
border-top-left-radius: 6px;
|
4367 |
+
}
|
4368 |
+
.pagination-lg > li:last-child > a,
|
4369 |
+
.pagination-lg > li:last-child > span {
|
4370 |
+
border-bottom-right-radius: 6px;
|
4371 |
+
border-top-right-radius: 6px;
|
4372 |
+
}
|
4373 |
+
.pagination-sm > li > a,
|
4374 |
+
.pagination-sm > li > span {
|
4375 |
+
padding: 5px 10px;
|
4376 |
+
font-size: 12px;
|
4377 |
+
}
|
4378 |
+
.pagination-sm > li:first-child > a,
|
4379 |
+
.pagination-sm > li:first-child > span {
|
4380 |
+
border-bottom-left-radius: 3px;
|
4381 |
+
border-top-left-radius: 3px;
|
4382 |
+
}
|
4383 |
+
.pagination-sm > li:last-child > a,
|
4384 |
+
.pagination-sm > li:last-child > span {
|
4385 |
+
border-bottom-right-radius: 3px;
|
4386 |
+
border-top-right-radius: 3px;
|
4387 |
+
}
|
4388 |
+
.pager {
|
4389 |
+
padding-left: 0;
|
4390 |
+
margin: 20px 0;
|
4391 |
+
list-style: none;
|
4392 |
+
text-align: center;
|
4393 |
+
}
|
4394 |
+
.pager li {
|
4395 |
+
display: inline;
|
4396 |
+
}
|
4397 |
+
.pager li > a,
|
4398 |
+
.pager li > span {
|
4399 |
+
display: inline-block;
|
4400 |
+
padding: 5px 14px;
|
4401 |
+
background-color: #ffffff;
|
4402 |
+
border: 1px solid #dddddd;
|
4403 |
+
border-radius: 15px;
|
4404 |
+
}
|
4405 |
+
.pager li > a:hover,
|
4406 |
+
.pager li > a:focus {
|
4407 |
+
text-decoration: none;
|
4408 |
+
background-color: #eeeeee;
|
4409 |
+
}
|
4410 |
+
.pager .next > a,
|
4411 |
+
.pager .next > span {
|
4412 |
+
float: right;
|
4413 |
+
}
|
4414 |
+
.pager .previous > a,
|
4415 |
+
.pager .previous > span {
|
4416 |
+
float: left;
|
4417 |
+
}
|
4418 |
+
.pager .disabled > a,
|
4419 |
+
.pager .disabled > a:hover,
|
4420 |
+
.pager .disabled > a:focus,
|
4421 |
+
.pager .disabled > span {
|
4422 |
+
color: #777777;
|
4423 |
+
background-color: #ffffff;
|
4424 |
+
cursor: not-allowed;
|
4425 |
+
}
|
4426 |
+
.label {
|
4427 |
+
display: inline;
|
4428 |
+
padding: .2em .6em .3em;
|
4429 |
+
font-size: 75%;
|
4430 |
+
font-weight: bold;
|
4431 |
+
line-height: 1;
|
4432 |
+
color: #ffffff;
|
4433 |
+
text-align: center;
|
4434 |
+
white-space: nowrap;
|
4435 |
+
vertical-align: baseline;
|
4436 |
+
border-radius: .25em;
|
4437 |
+
}
|
4438 |
+
a.label:hover,
|
4439 |
+
a.label:focus {
|
4440 |
+
color: #ffffff;
|
4441 |
+
text-decoration: none;
|
4442 |
+
cursor: pointer;
|
4443 |
+
}
|
4444 |
+
.label:empty {
|
4445 |
+
display: none;
|
4446 |
+
}
|
4447 |
+
.btn .label {
|
4448 |
+
position: relative;
|
4449 |
+
top: -1px;
|
4450 |
+
}
|
4451 |
+
.label-default {
|
4452 |
+
background-color: #777777;
|
4453 |
+
}
|
4454 |
+
.label-default[href]:hover,
|
4455 |
+
.label-default[href]:focus {
|
4456 |
+
background-color: #5e5e5e;
|
4457 |
+
}
|
4458 |
+
.label-primary {
|
4459 |
+
background-color: #428bca;
|
4460 |
+
}
|
4461 |
+
.label-primary[href]:hover,
|
4462 |
+
.label-primary[href]:focus {
|
4463 |
+
background-color: #3071a9;
|
4464 |
+
}
|
4465 |
+
.label-success {
|
4466 |
+
background-color: #5cb85c;
|
4467 |
+
}
|
4468 |
+
.label-success[href]:hover,
|
4469 |
+
.label-success[href]:focus {
|
4470 |
+
background-color: #449d44;
|
4471 |
+
}
|
4472 |
+
.label-info {
|
4473 |
+
background-color: #5bc0de;
|
4474 |
+
}
|
4475 |
+
.label-info[href]:hover,
|
4476 |
+
.label-info[href]:focus {
|
4477 |
+
background-color: #31b0d5;
|
4478 |
+
}
|
4479 |
+
.label-warning {
|
4480 |
+
background-color: #f0ad4e;
|
4481 |
+
}
|
4482 |
+
.label-warning[href]:hover,
|
4483 |
+
.label-warning[href]:focus {
|
4484 |
+
background-color: #ec971f;
|
4485 |
+
}
|
4486 |
+
.label-danger {
|
4487 |
+
background-color: #d9534f;
|
4488 |
+
}
|
4489 |
+
.label-danger[href]:hover,
|
4490 |
+
.label-danger[href]:focus {
|
4491 |
+
background-color: #c9302c;
|
4492 |
+
}
|
4493 |
+
.badge {
|
4494 |
+
display: inline-block;
|
4495 |
+
min-width: 10px;
|
4496 |
+
padding: 3px 7px;
|
4497 |
+
font-size: 12px;
|
4498 |
+
font-weight: bold;
|
4499 |
+
color: #ffffff;
|
4500 |
+
line-height: 1;
|
4501 |
+
vertical-align: baseline;
|
4502 |
+
white-space: nowrap;
|
4503 |
+
text-align: center;
|
4504 |
+
background-color: #777777;
|
4505 |
+
border-radius: 10px;
|
4506 |
+
}
|
4507 |
+
.badge:empty {
|
4508 |
+
display: none;
|
4509 |
+
}
|
4510 |
+
.btn .badge {
|
4511 |
+
position: relative;
|
4512 |
+
top: -1px;
|
4513 |
+
}
|
4514 |
+
.btn-xs .badge {
|
4515 |
+
top: 0;
|
4516 |
+
padding: 1px 5px;
|
4517 |
+
}
|
4518 |
+
a.badge:hover,
|
4519 |
+
a.badge:focus {
|
4520 |
+
color: #ffffff;
|
4521 |
+
text-decoration: none;
|
4522 |
+
cursor: pointer;
|
4523 |
+
}
|
4524 |
+
a.list-group-item.active > .badge,
|
4525 |
+
.nav-pills > .active > a > .badge {
|
4526 |
+
color: #428bca;
|
4527 |
+
background-color: #ffffff;
|
4528 |
+
}
|
4529 |
+
.nav-pills > li > a > .badge {
|
4530 |
+
margin-left: 3px;
|
4531 |
+
}
|
4532 |
+
.jumbotron {
|
4533 |
+
padding: 30px;
|
4534 |
+
margin-bottom: 30px;
|
4535 |
+
color: inherit;
|
4536 |
+
background-color: #eeeeee;
|
4537 |
+
}
|
4538 |
+
.jumbotron h1,
|
4539 |
+
.jumbotron .h1 {
|
4540 |
+
color: inherit;
|
4541 |
+
}
|
4542 |
+
.jumbotron p {
|
4543 |
+
margin-bottom: 15px;
|
4544 |
+
font-size: 21px;
|
4545 |
+
font-weight: 200;
|
4546 |
+
}
|
4547 |
+
.jumbotron > hr {
|
4548 |
+
border-top-color: #d5d5d5;
|
4549 |
+
}
|
4550 |
+
.container .jumbotron {
|
4551 |
+
border-radius: 6px;
|
4552 |
+
}
|
4553 |
+
.jumbotron .container {
|
4554 |
+
max-width: 100%;
|
4555 |
+
}
|
4556 |
+
@media screen and (min-width: 768px) {
|
4557 |
+
.jumbotron {
|
4558 |
+
padding-top: 48px;
|
4559 |
+
padding-bottom: 48px;
|
4560 |
+
}
|
4561 |
+
.container .jumbotron {
|
4562 |
+
padding-left: 60px;
|
4563 |
+
padding-right: 60px;
|
4564 |
+
}
|
4565 |
+
.jumbotron h1,
|
4566 |
+
.jumbotron .h1 {
|
4567 |
+
font-size: 63px;
|
4568 |
+
}
|
4569 |
+
}
|
4570 |
+
.thumbnail {
|
4571 |
+
display: block;
|
4572 |
+
padding: 4px;
|
4573 |
+
margin-bottom: 20px;
|
4574 |
+
line-height: 1.42857143;
|
4575 |
+
background-color: #ffffff;
|
4576 |
+
border: 1px solid #dddddd;
|
4577 |
+
border-radius: 4px;
|
4578 |
+
-webkit-transition: all 0.2s ease-in-out;
|
4579 |
+
-o-transition: all 0.2s ease-in-out;
|
4580 |
+
transition: all 0.2s ease-in-out;
|
4581 |
+
}
|
4582 |
+
.thumbnail > img,
|
4583 |
+
.thumbnail a > img {
|
4584 |
+
margin-left: auto;
|
4585 |
+
margin-right: auto;
|
4586 |
+
}
|
4587 |
+
a.thumbnail:hover,
|
4588 |
+
a.thumbnail:focus,
|
4589 |
+
a.thumbnail.active {
|
4590 |
+
border-color: #428bca;
|
4591 |
+
}
|
4592 |
+
.thumbnail .caption {
|
4593 |
+
padding: 9px;
|
4594 |
+
color: #333333;
|
4595 |
+
}
|
4596 |
+
.alert {
|
4597 |
+
padding: 15px;
|
4598 |
+
margin-bottom: 20px;
|
4599 |
+
border: 1px solid transparent;
|
4600 |
+
border-radius: 4px;
|
4601 |
+
}
|
4602 |
+
.alert h4 {
|
4603 |
+
margin-top: 0;
|
4604 |
+
color: inherit;
|
4605 |
+
}
|
4606 |
+
.alert .alert-link {
|
4607 |
+
font-weight: bold;
|
4608 |
+
}
|
4609 |
+
.alert > p,
|
4610 |
+
.alert > ul {
|
4611 |
+
margin-bottom: 0;
|
4612 |
+
}
|
4613 |
+
.alert > p + p {
|
4614 |
+
margin-top: 5px;
|
4615 |
+
}
|
4616 |
+
.alert-dismissable,
|
4617 |
+
.alert-dismissible {
|
4618 |
+
padding-right: 35px;
|
4619 |
+
}
|
4620 |
+
.alert-dismissable .close,
|
4621 |
+
.alert-dismissible .close {
|
4622 |
+
position: relative;
|
4623 |
+
top: -2px;
|
4624 |
+
right: -21px;
|
4625 |
+
color: inherit;
|
4626 |
+
}
|
4627 |
+
.alert-success {
|
4628 |
+
background-color: #dff0d8;
|
4629 |
+
border-color: #d6e9c6;
|
4630 |
+
color: #3c763d;
|
4631 |
+
}
|
4632 |
+
.alert-success hr {
|
4633 |
+
border-top-color: #c9e2b3;
|
4634 |
+
}
|
4635 |
+
.alert-success .alert-link {
|
4636 |
+
color: #2b542c;
|
4637 |
+
}
|
4638 |
+
.alert-info {
|
4639 |
+
background-color: #d9edf7;
|
4640 |
+
border-color: #bce8f1;
|
4641 |
+
color: #31708f;
|
4642 |
+
}
|
4643 |
+
.alert-info hr {
|
4644 |
+
border-top-color: #a6e1ec;
|
4645 |
+
}
|
4646 |
+
.alert-info .alert-link {
|
4647 |
+
color: #245269;
|
4648 |
+
}
|
4649 |
+
.alert-warning {
|
4650 |
+
background-color: #fcf8e3;
|
4651 |
+
border-color: #faebcc;
|
4652 |
+
color: #8a6d3b;
|
4653 |
+
}
|
4654 |
+
.alert-warning hr {
|
4655 |
+
border-top-color: #f7e1b5;
|
4656 |
+
}
|
4657 |
+
.alert-warning .alert-link {
|
4658 |
+
color: #66512c;
|
4659 |
+
}
|
4660 |
+
.alert-danger {
|
4661 |
+
background-color: #f2dede;
|
4662 |
+
border-color: #ebccd1;
|
4663 |
+
color: #a94442;
|
4664 |
+
}
|
4665 |
+
.alert-danger hr {
|
4666 |
+
border-top-color: #e4b9c0;
|
4667 |
+
}
|
4668 |
+
.alert-danger .alert-link {
|
4669 |
+
color: #843534;
|
4670 |
+
}
|
4671 |
+
@-webkit-keyframes progress-bar-stripes {
|
4672 |
+
from {
|
4673 |
+
background-position: 40px 0;
|
4674 |
+
}
|
4675 |
+
to {
|
4676 |
+
background-position: 0 0;
|
4677 |
+
}
|
4678 |
+
}
|
4679 |
+
@keyframes progress-bar-stripes {
|
4680 |
+
from {
|
4681 |
+
background-position: 40px 0;
|
4682 |
+
}
|
4683 |
+
to {
|
4684 |
+
background-position: 0 0;
|
4685 |
+
}
|
4686 |
+
}
|
4687 |
+
.progress {
|
4688 |
+
overflow: hidden;
|
4689 |
+
height: 20px;
|
4690 |
+
margin-bottom: 20px;
|
4691 |
+
background-color: #f5f5f5;
|
4692 |
+
border-radius: 4px;
|
4693 |
+
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
4694 |
+
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
4695 |
+
}
|
4696 |
+
.progress-bar {
|
4697 |
+
float: left;
|
4698 |
+
width: 0%;
|
4699 |
+
height: 100%;
|
4700 |
+
font-size: 12px;
|
4701 |
+
line-height: 20px;
|
4702 |
+
color: #ffffff;
|
4703 |
+
text-align: center;
|
4704 |
+
background-color: #428bca;
|
4705 |
+
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
|
4706 |
+
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
|
4707 |
+
-webkit-transition: width 0.6s ease;
|
4708 |
+
-o-transition: width 0.6s ease;
|
4709 |
+
transition: width 0.6s ease;
|
4710 |
+
}
|
4711 |
+
.progress-striped .progress-bar,
|
4712 |
+
.progress-bar-striped {
|
4713 |
+
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4714 |
+
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4715 |
+
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4716 |
+
background-size: 40px 40px;
|
4717 |
+
}
|
4718 |
+
.progress.active .progress-bar,
|
4719 |
+
.progress-bar.active {
|
4720 |
+
-webkit-animation: progress-bar-stripes 2s linear infinite;
|
4721 |
+
-o-animation: progress-bar-stripes 2s linear infinite;
|
4722 |
+
animation: progress-bar-stripes 2s linear infinite;
|
4723 |
+
}
|
4724 |
+
.progress-bar[aria-valuenow="1"],
|
4725 |
+
.progress-bar[aria-valuenow="2"] {
|
4726 |
+
min-width: 30px;
|
4727 |
+
}
|
4728 |
+
.progress-bar[aria-valuenow="0"] {
|
4729 |
+
color: #777777;
|
4730 |
+
min-width: 30px;
|
4731 |
+
background-color: transparent;
|
4732 |
+
background-image: none;
|
4733 |
+
box-shadow: none;
|
4734 |
+
}
|
4735 |
+
.progress-bar-success {
|
4736 |
+
background-color: #5cb85c;
|
4737 |
+
}
|
4738 |
+
.progress-striped .progress-bar-success {
|
4739 |
+
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4740 |
+
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4741 |
+
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4742 |
+
}
|
4743 |
+
.progress-bar-info {
|
4744 |
+
background-color: #5bc0de;
|
4745 |
+
}
|
4746 |
+
.progress-striped .progress-bar-info {
|
4747 |
+
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4748 |
+
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4749 |
+
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4750 |
+
}
|
4751 |
+
.progress-bar-warning {
|
4752 |
+
background-color: #f0ad4e;
|
4753 |
+
}
|
4754 |
+
.progress-striped .progress-bar-warning {
|
4755 |
+
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4756 |
+
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4757 |
+
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4758 |
+
}
|
4759 |
+
.progress-bar-danger {
|
4760 |
+
background-color: #d9534f;
|
4761 |
+
}
|
4762 |
+
.progress-striped .progress-bar-danger {
|
4763 |
+
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4764 |
+
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4765 |
+
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4766 |
+
}
|
4767 |
+
.media,
|
4768 |
+
.media-body {
|
4769 |
+
overflow: hidden;
|
4770 |
+
zoom: 1;
|
4771 |
+
}
|
4772 |
+
.media,
|
4773 |
+
.media .media {
|
4774 |
+
margin-top: 15px;
|
4775 |
+
}
|
4776 |
+
.media:first-child {
|
4777 |
+
margin-top: 0;
|
4778 |
+
}
|
4779 |
+
.media-object {
|
4780 |
+
display: block;
|
4781 |
+
}
|
4782 |
+
.media-heading {
|
4783 |
+
margin: 0 0 5px;
|
4784 |
+
}
|
4785 |
+
.media > .pull-left {
|
4786 |
+
margin-right: 10px;
|
4787 |
+
}
|
4788 |
+
.media > .pull-right {
|
4789 |
+
margin-left: 10px;
|
4790 |
+
}
|
4791 |
+
.media-list {
|
4792 |
+
padding-left: 0;
|
4793 |
+
list-style: none;
|
4794 |
+
}
|
4795 |
+
.list-group {
|
4796 |
+
margin-bottom: 20px;
|
4797 |
+
padding-left: 0;
|
4798 |
+
}
|
4799 |
+
.list-group-item {
|
4800 |
+
position: relative;
|
4801 |
+
display: block;
|
4802 |
+
padding: 10px 15px;
|
4803 |
+
margin-bottom: -1px;
|
4804 |
+
background-color: #ffffff;
|
4805 |
+
border: 1px solid #dddddd;
|
4806 |
+
}
|
4807 |
+
.list-group-item:first-child {
|
4808 |
+
border-top-right-radius: 4px;
|
4809 |
+
border-top-left-radius: 4px;
|
4810 |
+
}
|
4811 |
+
.list-group-item:last-child {
|
4812 |
+
margin-bottom: 0;
|
4813 |
+
border-bottom-right-radius: 4px;
|
4814 |
+
border-bottom-left-radius: 4px;
|
4815 |
+
}
|
4816 |
+
.list-group-item > .badge {
|
4817 |
+
float: right;
|
4818 |
+
}
|
4819 |
+
.list-group-item > .badge + .badge {
|
4820 |
+
margin-right: 5px;
|
4821 |
+
}
|
4822 |
+
a.list-group-item {
|
4823 |
+
color: #555555;
|
4824 |
+
}
|
4825 |
+
a.list-group-item .list-group-item-heading {
|
4826 |
+
color: #333333;
|
4827 |
+
}
|
4828 |
+
a.list-group-item:hover,
|
4829 |
+
a.list-group-item:focus {
|
4830 |
+
text-decoration: none;
|
4831 |
+
color: #555555;
|
4832 |
+
background-color: #f5f5f5;
|
4833 |
+
}
|
4834 |
+
.list-group-item.disabled,
|
4835 |
+
.list-group-item.disabled:hover,
|
4836 |
+
.list-group-item.disabled:focus {
|
4837 |
+
background-color: #eeeeee;
|
4838 |
+
color: #777777;
|
4839 |
+
}
|
4840 |
+
.list-group-item.disabled .list-group-item-heading,
|
4841 |
+
.list-group-item.disabled:hover .list-group-item-heading,
|
4842 |
+
.list-group-item.disabled:focus .list-group-item-heading {
|
4843 |
+
color: inherit;
|
4844 |
+
}
|
4845 |
+
.list-group-item.disabled .list-group-item-text,
|
4846 |
+
.list-group-item.disabled:hover .list-group-item-text,
|
4847 |
+
.list-group-item.disabled:focus .list-group-item-text {
|
4848 |
+
color: #777777;
|
4849 |
+
}
|
4850 |
+
.list-group-item.active,
|
4851 |
+
.list-group-item.active:hover,
|
4852 |
+
.list-group-item.active:focus {
|
4853 |
+
z-index: 2;
|
4854 |
+
color: #ffffff;
|
4855 |
+
background-color: #428bca;
|
4856 |
+
border-color: #428bca;
|
4857 |
+
}
|
4858 |
+
.list-group-item.active .list-group-item-heading,
|
4859 |
+
.list-group-item.active:hover .list-group-item-heading,
|
4860 |
+
.list-group-item.active:focus .list-group-item-heading,
|
4861 |
+
.list-group-item.active .list-group-item-heading > small,
|
4862 |
+
.list-group-item.active:hover .list-group-item-heading > small,
|
4863 |
+
.list-group-item.active:focus .list-group-item-heading > small,
|
4864 |
+
.list-group-item.active .list-group-item-heading > .small,
|
4865 |
+
.list-group-item.active:hover .list-group-item-heading > .small,
|
4866 |
+
.list-group-item.active:focus .list-group-item-heading > .small {
|
4867 |
+
color: inherit;
|
4868 |
+
}
|
4869 |
+
.list-group-item.active .list-group-item-text,
|
4870 |
+
.list-group-item.active:hover .list-group-item-text,
|
4871 |
+
.list-group-item.active:focus .list-group-item-text {
|
4872 |
+
color: #e1edf7;
|
4873 |
+
}
|
4874 |
+
.list-group-item-success {
|
4875 |
+
color: #3c763d;
|
4876 |
+
background-color: #dff0d8;
|
4877 |
+
}
|
4878 |
+
a.list-group-item-success {
|
4879 |
+
color: #3c763d;
|
4880 |
+
}
|
4881 |
+
a.list-group-item-success .list-group-item-heading {
|
4882 |
+
color: inherit;
|
4883 |
+
}
|
4884 |
+
a.list-group-item-success:hover,
|
4885 |
+
a.list-group-item-success:focus {
|
4886 |
+
color: #3c763d;
|
4887 |
+
background-color: #d0e9c6;
|
4888 |
+
}
|
4889 |
+
a.list-group-item-success.active,
|
4890 |
+
a.list-group-item-success.active:hover,
|
4891 |
+
a.list-group-item-success.active:focus {
|
4892 |
+
color: #fff;
|
4893 |
+
background-color: #3c763d;
|
4894 |
+
border-color: #3c763d;
|
4895 |
+
}
|
4896 |
+
.list-group-item-info {
|
4897 |
+
color: #31708f;
|
4898 |
+
background-color: #d9edf7;
|
4899 |
+
}
|
4900 |
+
a.list-group-item-info {
|
4901 |
+
color: #31708f;
|
4902 |
+
}
|
4903 |
+
a.list-group-item-info .list-group-item-heading {
|
4904 |
+
color: inherit;
|
4905 |
+
}
|
4906 |
+
a.list-group-item-info:hover,
|
4907 |
+
a.list-group-item-info:focus {
|
4908 |
+
color: #31708f;
|
4909 |
+
background-color: #c4e3f3;
|
4910 |
+
}
|
4911 |
+
a.list-group-item-info.active,
|
4912 |
+
a.list-group-item-info.active:hover,
|
4913 |
+
a.list-group-item-info.active:focus {
|
4914 |
+
color: #fff;
|
4915 |
+
background-color: #31708f;
|
4916 |
+
border-color: #31708f;
|
4917 |
+
}
|
4918 |
+
.list-group-item-warning {
|
4919 |
+
color: #8a6d3b;
|
4920 |
+
background-color: #fcf8e3;
|
4921 |
+
}
|
4922 |
+
a.list-group-item-warning {
|
4923 |
+
color: #8a6d3b;
|
4924 |
+
}
|
4925 |
+
a.list-group-item-warning .list-group-item-heading {
|
4926 |
+
color: inherit;
|
4927 |
+
}
|
4928 |
+
a.list-group-item-warning:hover,
|
4929 |
+
a.list-group-item-warning:focus {
|
4930 |
+
color: #8a6d3b;
|
4931 |
+
background-color: #faf2cc;
|
4932 |
+
}
|
4933 |
+
a.list-group-item-warning.active,
|
4934 |
+
a.list-group-item-warning.active:hover,
|
4935 |
+
a.list-group-item-warning.active:focus {
|
4936 |
+
color: #fff;
|
4937 |
+
background-color: #8a6d3b;
|
4938 |
+
border-color: #8a6d3b;
|
4939 |
+
}
|
4940 |
+
.list-group-item-danger {
|
4941 |
+
color: #a94442;
|
4942 |
+
background-color: #f2dede;
|
4943 |
+
}
|
4944 |
+
a.list-group-item-danger {
|
4945 |
+
color: #a94442;
|
4946 |
+
}
|
4947 |
+
a.list-group-item-danger .list-group-item-heading {
|
4948 |
+
color: inherit;
|
4949 |
+
}
|
4950 |
+
a.list-group-item-danger:hover,
|
4951 |
+
a.list-group-item-danger:focus {
|
4952 |
+
color: #a94442;
|
4953 |
+
background-color: #ebcccc;
|
4954 |
+
}
|
4955 |
+
a.list-group-item-danger.active,
|
4956 |
+
a.list-group-item-danger.active:hover,
|
4957 |
+
a.list-group-item-danger.active:focus {
|
4958 |
+
color: #fff;
|
4959 |
+
background-color: #a94442;
|
4960 |
+
border-color: #a94442;
|
4961 |
+
}
|
4962 |
+
.list-group-item-heading {
|
4963 |
+
margin-top: 0;
|
4964 |
+
margin-bottom: 5px;
|
4965 |
+
}
|
4966 |
+
.list-group-item-text {
|
4967 |
+
margin-bottom: 0;
|
4968 |
+
line-height: 1.3;
|
4969 |
+
}
|
4970 |
+
.panel {
|
4971 |
+
margin-bottom: 20px;
|
4972 |
+
background-color: #ffffff;
|
4973 |
+
border: 1px solid transparent;
|
4974 |
+
border-radius: 4px;
|
4975 |
+
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
|
4976 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
|
4977 |
+
}
|
4978 |
+
.panel-body {
|
4979 |
+
padding: 15px;
|
4980 |
+
}
|
4981 |
+
.panel-heading {
|
4982 |
+
padding: 10px 15px;
|
4983 |
+
border-bottom: 1px solid transparent;
|
4984 |
+
border-top-right-radius: 3px;
|
4985 |
+
border-top-left-radius: 3px;
|
4986 |
+
}
|
4987 |
+
.panel-heading > .dropdown .dropdown-toggle {
|
4988 |
+
color: inherit;
|
4989 |
+
}
|
4990 |
+
.panel-title {
|
4991 |
+
margin-top: 0;
|
4992 |
+
margin-bottom: 0;
|
4993 |
+
font-size: 16px;
|
4994 |
+
color: inherit;
|
4995 |
+
}
|
4996 |
+
.panel-title > a {
|
4997 |
+
color: inherit;
|
4998 |
+
}
|
4999 |
+
.panel-footer {
|
5000 |
+
padding: 10px 15px;
|
5001 |
+
background-color: #f5f5f5;
|
5002 |
+
border-top: 1px solid #dddddd;
|
5003 |
+
border-bottom-right-radius: 3px;
|
5004 |
+
border-bottom-left-radius: 3px;
|
5005 |
+
}
|
5006 |
+
.panel > .list-group {
|
5007 |
+
margin-bottom: 0;
|
5008 |
+
}
|
5009 |
+
.panel > .list-group .list-group-item {
|
5010 |
+
border-width: 1px 0;
|
5011 |
+
border-radius: 0;
|
5012 |
+
}
|
5013 |
+
.panel > .list-group:first-child .list-group-item:first-child {
|
5014 |
+
border-top: 0;
|
5015 |
+
border-top-right-radius: 3px;
|
5016 |
+
border-top-left-radius: 3px;
|
5017 |
+
}
|
5018 |
+
.panel > .list-group:last-child .list-group-item:last-child {
|
5019 |
+
border-bottom: 0;
|
5020 |
+
border-bottom-right-radius: 3px;
|
5021 |
+
border-bottom-left-radius: 3px;
|
5022 |
+
}
|
5023 |
+
.panel-heading + .list-group .list-group-item:first-child {
|
5024 |
+
border-top-width: 0;
|
5025 |
+
}
|
5026 |
+
.list-group + .panel-footer {
|
5027 |
+
border-top-width: 0;
|
5028 |
+
}
|
5029 |
+
.panel > .table,
|
5030 |
+
.panel > .table-responsive > .table,
|
5031 |
+
.panel > .panel-collapse > .table {
|
5032 |
+
margin-bottom: 0;
|
5033 |
+
}
|
5034 |
+
.panel > .table:first-child,
|
5035 |
+
.panel > .table-responsive:first-child > .table:first-child {
|
5036 |
+
border-top-right-radius: 3px;
|
5037 |
+
border-top-left-radius: 3px;
|
5038 |
+
}
|
5039 |
+
.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
|
5040 |
+
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
|
5041 |
+
.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
|
5042 |
+
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
|
5043 |
+
.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
|
5044 |
+
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
|
5045 |
+
.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
|
5046 |
+
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
|
5047 |
+
border-top-left-radius: 3px;
|
5048 |
+
}
|
5049 |
+
.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
|
5050 |
+
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
|
5051 |
+
.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
|
5052 |
+
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
|
5053 |
+
.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
|
5054 |
+
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
|
5055 |
+
.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
|
5056 |
+
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
|
5057 |
+
border-top-right-radius: 3px;
|
5058 |
+
}
|
5059 |
+
.panel > .table:last-child,
|
5060 |
+
.panel > .table-responsive:last-child > .table:last-child {
|
5061 |
+
border-bottom-right-radius: 3px;
|
5062 |
+
border-bottom-left-radius: 3px;
|
5063 |
+
}
|
5064 |
+
.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
|
5065 |
+
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
|
5066 |
+
.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
|
5067 |
+
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
|
5068 |
+
.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
|
5069 |
+
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
|
5070 |
+
.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
|
5071 |
+
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
|
5072 |
+
border-bottom-left-radius: 3px;
|
5073 |
+
}
|
5074 |
+
.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
|
5075 |
+
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
|
5076 |
+
.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
|
5077 |
+
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
|
5078 |
+
.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
|
5079 |
+
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
|
5080 |
+
.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
|
5081 |
+
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
|
5082 |
+
border-bottom-right-radius: 3px;
|
5083 |
+
}
|
5084 |
+
.panel > .panel-body + .table,
|
5085 |
+
.panel > .panel-body + .table-responsive {
|
5086 |
+
border-top: 1px solid #dddddd;
|
5087 |
+
}
|
5088 |
+
.panel > .table > tbody:first-child > tr:first-child th,
|
5089 |
+
.panel > .table > tbody:first-child > tr:first-child td {
|
5090 |
+
border-top: 0;
|
5091 |
+
}
|
5092 |
+
.panel > .table-bordered,
|
5093 |
+
.panel > .table-responsive > .table-bordered {
|
5094 |
+
border: 0;
|
5095 |
+
}
|
5096 |
+
.panel > .table-bordered > thead > tr > th:first-child,
|
5097 |
+
.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
|
5098 |
+
.panel > .table-bordered > tbody > tr > th:first-child,
|
5099 |
+
.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
|
5100 |
+
.panel > .table-bordered > tfoot > tr > th:first-child,
|
5101 |
+
.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
|
5102 |
+
.panel > .table-bordered > thead > tr > td:first-child,
|
5103 |
+
.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
|
5104 |
+
.panel > .table-bordered > tbody > tr > td:first-child,
|
5105 |
+
.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
|
5106 |
+
.panel > .table-bordered > tfoot > tr > td:first-child,
|
5107 |
+
.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
|
5108 |
+
border-left: 0;
|
5109 |
+
}
|
5110 |
+
.panel > .table-bordered > thead > tr > th:last-child,
|
5111 |
+
.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
|
5112 |
+
.panel > .table-bordered > tbody > tr > th:last-child,
|
5113 |
+
.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
|
5114 |
+
.panel > .table-bordered > tfoot > tr > th:last-child,
|
5115 |
+
.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
|
5116 |
+
.panel > .table-bordered > thead > tr > td:last-child,
|
5117 |
+
.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
|
5118 |
+
.panel > .table-bordered > tbody > tr > td:last-child,
|
5119 |
+
.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
|
5120 |
+
.panel > .table-bordered > tfoot > tr > td:last-child,
|
5121 |
+
.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
|
5122 |
+
border-right: 0;
|
5123 |
+
}
|
5124 |
+
.panel > .table-bordered > thead > tr:first-child > td,
|
5125 |
+
.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
|
5126 |
+
.panel > .table-bordered > tbody > tr:first-child > td,
|
5127 |
+
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
|
5128 |
+
.panel > .table-bordered > thead > tr:first-child > th,
|
5129 |
+
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
|
5130 |
+
.panel > .table-bordered > tbody > tr:first-child > th,
|
5131 |
+
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
|
5132 |
+
border-bottom: 0;
|
5133 |
+
}
|
5134 |
+
.panel > .table-bordered > tbody > tr:last-child > td,
|
5135 |
+
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
|
5136 |
+
.panel > .table-bordered > tfoot > tr:last-child > td,
|
5137 |
+
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
|
5138 |
+
.panel > .table-bordered > tbody > tr:last-child > th,
|
5139 |
+
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
|
5140 |
+
.panel > .table-bordered > tfoot > tr:last-child > th,
|
5141 |
+
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
|
5142 |
+
border-bottom: 0;
|
5143 |
+
}
|
5144 |
+
.panel > .table-responsive {
|
5145 |
+
border: 0;
|
5146 |
+
margin-bottom: 0;
|
5147 |
+
}
|
5148 |
+
.panel-group {
|
5149 |
+
margin-bottom: 20px;
|
5150 |
+
}
|
5151 |
+
.panel-group .panel {
|
5152 |
+
margin-bottom: 0;
|
5153 |
+
border-radius: 4px;
|
5154 |
+
}
|
5155 |
+
.panel-group .panel + .panel {
|
5156 |
+
margin-top: 5px;
|
5157 |
+
}
|
5158 |
+
.panel-group .panel-heading {
|
5159 |
+
border-bottom: 0;
|
5160 |
+
}
|
5161 |
+
.panel-group .panel-heading + .panel-collapse > .panel-body {
|
5162 |
+
border-top: 1px solid #dddddd;
|
5163 |
+
}
|
5164 |
+
.panel-group .panel-footer {
|
5165 |
+
border-top: 0;
|
5166 |
+
}
|
5167 |
+
.panel-group .panel-footer + .panel-collapse .panel-body {
|
5168 |
+
border-bottom: 1px solid #dddddd;
|
5169 |
+
}
|
5170 |
+
.panel-default {
|
5171 |
+
border-color: #dddddd;
|
5172 |
+
}
|
5173 |
+
.panel-default > .panel-heading {
|
5174 |
+
color: #333333;
|
5175 |
+
background-color: #f5f5f5;
|
5176 |
+
border-color: #dddddd;
|
5177 |
+
}
|
5178 |
+
.panel-default > .panel-heading + .panel-collapse > .panel-body {
|
5179 |
+
border-top-color: #dddddd;
|
5180 |
+
}
|
5181 |
+
.panel-default > .panel-heading .badge {
|
5182 |
+
color: #f5f5f5;
|
5183 |
+
background-color: #333333;
|
5184 |
+
}
|
5185 |
+
.panel-default > .panel-footer + .panel-collapse > .panel-body {
|
5186 |
+
border-bottom-color: #dddddd;
|
5187 |
+
}
|
5188 |
+
.panel-primary {
|
5189 |
+
border-color: #428bca;
|
5190 |
+
}
|
5191 |
+
.panel-primary > .panel-heading {
|
5192 |
+
color: #ffffff;
|
5193 |
+
background-color: #428bca;
|
5194 |
+
border-color: #428bca;
|
5195 |
+
}
|
5196 |
+
.panel-primary > .panel-heading + .panel-collapse > .panel-body {
|
5197 |
+
border-top-color: #428bca;
|
5198 |
+
}
|
5199 |
+
.panel-primary > .panel-heading .badge {
|
5200 |
+
color: #428bca;
|
5201 |
+
background-color: #ffffff;
|
5202 |
+
}
|
5203 |
+
.panel-primary > .panel-footer + .panel-collapse > .panel-body {
|
5204 |
+
border-bottom-color: #428bca;
|
5205 |
+
}
|
5206 |
+
.panel-success {
|
5207 |
+
border-color: #d6e9c6;
|
5208 |
+
}
|
5209 |
+
.panel-success > .panel-heading {
|
5210 |
+
color: #3c763d;
|
5211 |
+
background-color: #dff0d8;
|
5212 |
+
border-color: #d6e9c6;
|
5213 |
+
}
|
5214 |
+
.panel-success > .panel-heading + .panel-collapse > .panel-body {
|
5215 |
+
border-top-color: #d6e9c6;
|
5216 |
+
}
|
5217 |
+
.panel-success > .panel-heading .badge {
|
5218 |
+
color: #dff0d8;
|
5219 |
+
background-color: #3c763d;
|
5220 |
+
}
|
5221 |
+
.panel-success > .panel-footer + .panel-collapse > .panel-body {
|
5222 |
+
border-bottom-color: #d6e9c6;
|
5223 |
+
}
|
5224 |
+
.panel-info {
|
5225 |
+
border-color: #bce8f1;
|
5226 |
+
}
|
5227 |
+
.panel-info > .panel-heading {
|
5228 |
+
color: #31708f;
|
5229 |
+
background-color: #d9edf7;
|
5230 |
+
border-color: #bce8f1;
|
5231 |
+
}
|
5232 |
+
.panel-info > .panel-heading + .panel-collapse > .panel-body {
|
5233 |
+
border-top-color: #bce8f1;
|
5234 |
+
}
|
5235 |
+
.panel-info > .panel-heading .badge {
|
5236 |
+
color: #d9edf7;
|
5237 |
+
background-color: #31708f;
|
5238 |
+
}
|
5239 |
+
.panel-info > .panel-footer + .panel-collapse > .panel-body {
|
5240 |
+
border-bottom-color: #bce8f1;
|
5241 |
+
}
|
5242 |
+
.panel-warning {
|
5243 |
+
border-color: #faebcc;
|
5244 |
+
}
|
5245 |
+
.panel-warning > .panel-heading {
|
5246 |
+
color: #8a6d3b;
|
5247 |
+
background-color: #fcf8e3;
|
5248 |
+
border-color: #faebcc;
|
5249 |
+
}
|
5250 |
+
.panel-warning > .panel-heading + .panel-collapse > .panel-body {
|
5251 |
+
border-top-color: #faebcc;
|
5252 |
+
}
|
5253 |
+
.panel-warning > .panel-heading .badge {
|
5254 |
+
color: #fcf8e3;
|
5255 |
+
background-color: #8a6d3b;
|
5256 |
+
}
|
5257 |
+
.panel-warning > .panel-footer + .panel-collapse > .panel-body {
|
5258 |
+
border-bottom-color: #faebcc;
|
5259 |
+
}
|
5260 |
+
.panel-danger {
|
5261 |
+
border-color: #ebccd1;
|
5262 |
+
}
|
5263 |
+
.panel-danger > .panel-heading {
|
5264 |
+
color: #a94442;
|
5265 |
+
background-color: #f2dede;
|
5266 |
+
border-color: #ebccd1;
|
5267 |
+
}
|
5268 |
+
.panel-danger > .panel-heading + .panel-collapse > .panel-body {
|
5269 |
+
border-top-color: #ebccd1;
|
5270 |
+
}
|
5271 |
+
.panel-danger > .panel-heading .badge {
|
5272 |
+
color: #f2dede;
|
5273 |
+
background-color: #a94442;
|
5274 |
+
}
|
5275 |
+
.panel-danger > .panel-footer + .panel-collapse > .panel-body {
|
5276 |
+
border-bottom-color: #ebccd1;
|
5277 |
+
}
|
5278 |
+
.embed-responsive {
|
5279 |
+
position: relative;
|
5280 |
+
display: block;
|
5281 |
+
height: 0;
|
5282 |
+
padding: 0;
|
5283 |
+
overflow: hidden;
|
5284 |
+
}
|
5285 |
+
.embed-responsive .embed-responsive-item,
|
5286 |
+
.embed-responsive iframe,
|
5287 |
+
.embed-responsive embed,
|
5288 |
+
.embed-responsive object {
|
5289 |
+
position: absolute;
|
5290 |
+
top: 0;
|
5291 |
+
left: 0;
|
5292 |
+
bottom: 0;
|
5293 |
+
height: 100%;
|
5294 |
+
width: 100%;
|
5295 |
+
border: 0;
|
5296 |
+
}
|
5297 |
+
.embed-responsive.embed-responsive-16by9 {
|
5298 |
+
padding-bottom: 56.25%;
|
5299 |
+
}
|
5300 |
+
.embed-responsive.embed-responsive-4by3 {
|
5301 |
+
padding-bottom: 75%;
|
5302 |
+
}
|
5303 |
+
.well {
|
5304 |
+
min-height: 20px;
|
5305 |
+
padding: 19px;
|
5306 |
+
margin-bottom: 20px;
|
5307 |
+
background-color: #f5f5f5;
|
5308 |
+
border: 1px solid #e3e3e3;
|
5309 |
+
border-radius: 4px;
|
5310 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
|
5311 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
|
5312 |
+
}
|
5313 |
+
.well blockquote {
|
5314 |
+
border-color: #ddd;
|
5315 |
+
border-color: rgba(0, 0, 0, 0.15);
|
5316 |
+
}
|
5317 |
+
.well-lg {
|
5318 |
+
padding: 24px;
|
5319 |
+
border-radius: 6px;
|
5320 |
+
}
|
5321 |
+
.well-sm {
|
5322 |
+
padding: 9px;
|
5323 |
+
border-radius: 3px;
|
5324 |
+
}
|
5325 |
+
.close {
|
5326 |
+
float: right;
|
5327 |
+
font-size: 21px;
|
5328 |
+
font-weight: bold;
|
5329 |
+
line-height: 1;
|
5330 |
+
color: #000000;
|
5331 |
+
text-shadow: 0 1px 0 #ffffff;
|
5332 |
+
opacity: 0.2;
|
5333 |
+
filter: alpha(opacity=20);
|
5334 |
+
}
|
5335 |
+
.close:hover,
|
5336 |
+
.close:focus {
|
5337 |
+
color: #000000;
|
5338 |
+
text-decoration: none;
|
5339 |
+
cursor: pointer;
|
5340 |
+
opacity: 0.5;
|
5341 |
+
filter: alpha(opacity=50);
|
5342 |
+
}
|
5343 |
+
button.close {
|
5344 |
+
padding: 0;
|
5345 |
+
cursor: pointer;
|
5346 |
+
background: transparent;
|
5347 |
+
border: 0;
|
5348 |
+
-webkit-appearance: none;
|
5349 |
+
}
|
5350 |
+
.modal-open {
|
5351 |
+
overflow: hidden;
|
5352 |
+
}
|
5353 |
+
.modal {
|
5354 |
+
display: none;
|
5355 |
+
overflow: hidden;
|
5356 |
+
position: fixed;
|
5357 |
+
top: 0;
|
5358 |
+
right: 0;
|
5359 |
+
bottom: 0;
|
5360 |
+
left: 0;
|
5361 |
+
z-index: 1050;
|
5362 |
+
-webkit-overflow-scrolling: touch;
|
5363 |
+
outline: 0;
|
5364 |
+
}
|
5365 |
+
.modal.fade .modal-dialog {
|
5366 |
+
-webkit-transform: translate3d(0, -25%, 0);
|
5367 |
+
transform: translate3d(0, -25%, 0);
|
5368 |
+
-webkit-transition: -webkit-transform 0.3s ease-out;
|
5369 |
+
-moz-transition: -moz-transform 0.3s ease-out;
|
5370 |
+
-o-transition: -o-transform 0.3s ease-out;
|
5371 |
+
transition: transform 0.3s ease-out;
|
5372 |
+
}
|
5373 |
+
.modal.in .modal-dialog {
|
5374 |
+
-webkit-transform: translate3d(0, 0, 0);
|
5375 |
+
transform: translate3d(0, 0, 0);
|
5376 |
+
}
|
5377 |
+
.modal-open .modal {
|
5378 |
+
overflow-x: hidden;
|
5379 |
+
overflow-y: auto;
|
5380 |
+
}
|
5381 |
+
.modal-dialog {
|
5382 |
+
position: relative;
|
5383 |
+
width: auto;
|
5384 |
+
margin: 10px;
|
5385 |
+
}
|
5386 |
+
.modal-content {
|
5387 |
+
position: relative;
|
5388 |
+
background-color: #ffffff;
|
5389 |
+
border: 1px solid #999999;
|
5390 |
+
border: 1px solid rgba(0, 0, 0, 0.2);
|
5391 |
+
border-radius: 6px;
|
5392 |
+
-webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
|
5393 |
+
box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
|
5394 |
+
background-clip: padding-box;
|
5395 |
+
outline: 0;
|
5396 |
+
}
|
5397 |
+
.modal-backdrop {
|
5398 |
+
position: fixed;
|
5399 |
+
top: 0;
|
5400 |
+
right: 0;
|
5401 |
+
bottom: 0;
|
5402 |
+
left: 0;
|
5403 |
+
z-index: 1040;
|
5404 |
+
background-color: #000000;
|
5405 |
+
}
|
5406 |
+
.modal-backdrop.fade {
|
5407 |
+
opacity: 0;
|
5408 |
+
filter: alpha(opacity=0);
|
5409 |
+
}
|
5410 |
+
.modal-backdrop.in {
|
5411 |
+
opacity: 0.5;
|
5412 |
+
filter: alpha(opacity=50);
|
5413 |
+
}
|
5414 |
+
.modal-header {
|
5415 |
+
padding: 15px;
|
5416 |
+
border-bottom: 1px solid #e5e5e5;
|
5417 |
+
min-height: 16.42857143px;
|
5418 |
+
}
|
5419 |
+
.modal-header .close {
|
5420 |
+
margin-top: -2px;
|
5421 |
+
}
|
5422 |
+
.modal-title {
|
5423 |
+
margin: 0;
|
5424 |
+
line-height: 1.42857143;
|
5425 |
+
}
|
5426 |
+
.modal-body {
|
5427 |
+
position: relative;
|
5428 |
+
padding: 15px;
|
5429 |
+
}
|
5430 |
+
.modal-footer {
|
5431 |
+
padding: 15px;
|
5432 |
+
text-align: right;
|
5433 |
+
border-top: 1px solid #e5e5e5;
|
5434 |
+
}
|
5435 |
+
.modal-footer .btn + .btn {
|
5436 |
+
margin-left: 5px;
|
5437 |
+
margin-bottom: 0;
|
5438 |
+
}
|
5439 |
+
.modal-footer .btn-group .btn + .btn {
|
5440 |
+
margin-left: -1px;
|
5441 |
+
}
|
5442 |
+
.modal-footer .btn-block + .btn-block {
|
5443 |
+
margin-left: 0;
|
5444 |
+
}
|
5445 |
+
.modal-scrollbar-measure {
|
5446 |
+
position: absolute;
|
5447 |
+
top: -9999px;
|
5448 |
+
width: 50px;
|
5449 |
+
height: 50px;
|
5450 |
+
overflow: scroll;
|
5451 |
+
}
|
5452 |
+
@media (min-width: 768px) {
|
5453 |
+
.modal-dialog {
|
5454 |
+
width: 600px;
|
5455 |
+
margin: 30px auto;
|
5456 |
+
}
|
5457 |
+
.modal-content {
|
5458 |
+
-webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
|
5459 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
|
5460 |
+
}
|
5461 |
+
.modal-sm {
|
5462 |
+
width: 300px;
|
5463 |
+
}
|
5464 |
+
}
|
5465 |
+
@media (min-width: 992px) {
|
5466 |
+
.modal-lg {
|
5467 |
+
width: 900px;
|
5468 |
+
}
|
5469 |
+
}
|
5470 |
+
.tooltip {
|
5471 |
+
position: absolute;
|
5472 |
+
z-index: 1070;
|
5473 |
+
display: block;
|
5474 |
+
visibility: visible;
|
5475 |
+
font-size: 12px;
|
5476 |
+
line-height: 1.4;
|
5477 |
+
opacity: 0;
|
5478 |
+
filter: alpha(opacity=0);
|
5479 |
+
}
|
5480 |
+
.tooltip.in {
|
5481 |
+
opacity: 0.9;
|
5482 |
+
filter: alpha(opacity=90);
|
5483 |
+
}
|
5484 |
+
.tooltip.top {
|
5485 |
+
margin-top: -3px;
|
5486 |
+
padding: 5px 0;
|
5487 |
+
}
|
5488 |
+
.tooltip.right {
|
5489 |
+
margin-left: 3px;
|
5490 |
+
padding: 0 5px;
|
5491 |
+
}
|
5492 |
+
.tooltip.bottom {
|
5493 |
+
margin-top: 3px;
|
5494 |
+
padding: 5px 0;
|
5495 |
+
}
|
5496 |
+
.tooltip.left {
|
5497 |
+
margin-left: -3px;
|
5498 |
+
padding: 0 5px;
|
5499 |
+
}
|
5500 |
+
.tooltip-inner {
|
5501 |
+
max-width: 200px;
|
5502 |
+
padding: 3px 8px;
|
5503 |
+
color: #ffffff;
|
5504 |
+
text-align: center;
|
5505 |
+
text-decoration: none;
|
5506 |
+
background-color: #000000;
|
5507 |
+
border-radius: 4px;
|
5508 |
+
}
|
5509 |
+
.tooltip-arrow {
|
5510 |
+
position: absolute;
|
5511 |
+
width: 0;
|
5512 |
+
height: 0;
|
5513 |
+
border-color: transparent;
|
5514 |
+
border-style: solid;
|
5515 |
+
}
|
5516 |
+
.tooltip.top .tooltip-arrow {
|
5517 |
+
bottom: 0;
|
5518 |
+
left: 50%;
|
5519 |
+
margin-left: -5px;
|
5520 |
+
border-width: 5px 5px 0;
|
5521 |
+
border-top-color: #000000;
|
5522 |
+
}
|
5523 |
+
.tooltip.top-left .tooltip-arrow {
|
5524 |
+
bottom: 0;
|
5525 |
+
left: 5px;
|
5526 |
+
border-width: 5px 5px 0;
|
5527 |
+
border-top-color: #000000;
|
5528 |
+
}
|
5529 |
+
.tooltip.top-right .tooltip-arrow {
|
5530 |
+
bottom: 0;
|
5531 |
+
right: 5px;
|
5532 |
+
border-width: 5px 5px 0;
|
5533 |
+
border-top-color: #000000;
|
5534 |
+
}
|
5535 |
+
.tooltip.right .tooltip-arrow {
|
5536 |
+
top: 50%;
|
5537 |
+
left: 0;
|
5538 |
+
margin-top: -5px;
|
5539 |
+
border-width: 5px 5px 5px 0;
|
5540 |
+
border-right-color: #000000;
|
5541 |
+
}
|
5542 |
+
.tooltip.left .tooltip-arrow {
|
5543 |
+
top: 50%;
|
5544 |
+
right: 0;
|
5545 |
+
margin-top: -5px;
|
5546 |
+
border-width: 5px 0 5px 5px;
|
5547 |
+
border-left-color: #000000;
|
5548 |
+
}
|
5549 |
+
.tooltip.bottom .tooltip-arrow {
|
5550 |
+
top: 0;
|
5551 |
+
left: 50%;
|
5552 |
+
margin-left: -5px;
|
5553 |
+
border-width: 0 5px 5px;
|
5554 |
+
border-bottom-color: #000000;
|
5555 |
+
}
|
5556 |
+
.tooltip.bottom-left .tooltip-arrow {
|
5557 |
+
top: 0;
|
5558 |
+
left: 5px;
|
5559 |
+
border-width: 0 5px 5px;
|
5560 |
+
border-bottom-color: #000000;
|
5561 |
+
}
|
5562 |
+
.tooltip.bottom-right .tooltip-arrow {
|
5563 |
+
top: 0;
|
5564 |
+
right: 5px;
|
5565 |
+
border-width: 0 5px 5px;
|
5566 |
+
border-bottom-color: #000000;
|
5567 |
+
}
|
5568 |
+
.popover {
|
5569 |
+
position: absolute;
|
5570 |
+
top: 0;
|
5571 |
+
left: 0;
|
5572 |
+
z-index: 1060;
|
5573 |
+
display: none;
|
5574 |
+
max-width: 276px;
|
5575 |
+
padding: 1px;
|
5576 |
+
text-align: left;
|
5577 |
+
background-color: #ffffff;
|
5578 |
+
background-clip: padding-box;
|
5579 |
+
border: 1px solid #cccccc;
|
5580 |
+
border: 1px solid rgba(0, 0, 0, 0.2);
|
5581 |
+
border-radius: 6px;
|
5582 |
+
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
5583 |
+
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
5584 |
+
white-space: normal;
|
5585 |
+
}
|
5586 |
+
.popover.top {
|
5587 |
+
margin-top: -10px;
|
5588 |
+
}
|
5589 |
+
.popover.right {
|
5590 |
+
margin-left: 10px;
|
5591 |
+
}
|
5592 |
+
.popover.bottom {
|
5593 |
+
margin-top: 10px;
|
5594 |
+
}
|
5595 |
+
.popover.left {
|
5596 |
+
margin-left: -10px;
|
5597 |
+
}
|
5598 |
+
.popover-title {
|
5599 |
+
margin: 0;
|
5600 |
+
padding: 8px 14px;
|
5601 |
+
font-size: 14px;
|
5602 |
+
font-weight: normal;
|
5603 |
+
line-height: 18px;
|
5604 |
+
background-color: #f7f7f7;
|
5605 |
+
border-bottom: 1px solid #ebebeb;
|
5606 |
+
border-radius: 5px 5px 0 0;
|
5607 |
+
}
|
5608 |
+
.popover-content {
|
5609 |
+
padding: 9px 14px;
|
5610 |
+
}
|
5611 |
+
.popover > .arrow,
|
5612 |
+
.popover > .arrow:after {
|
5613 |
+
position: absolute;
|
5614 |
+
display: block;
|
5615 |
+
width: 0;
|
5616 |
+
height: 0;
|
5617 |
+
border-color: transparent;
|
5618 |
+
border-style: solid;
|
5619 |
+
}
|
5620 |
+
.popover > .arrow {
|
5621 |
+
border-width: 11px;
|
5622 |
+
}
|
5623 |
+
.popover > .arrow:after {
|
5624 |
+
border-width: 10px;
|
5625 |
+
content: "";
|
5626 |
+
}
|
5627 |
+
.popover.top > .arrow {
|
5628 |
+
left: 50%;
|
5629 |
+
margin-left: -11px;
|
5630 |
+
border-bottom-width: 0;
|
5631 |
+
border-top-color: #999999;
|
5632 |
+
border-top-color: rgba(0, 0, 0, 0.25);
|
5633 |
+
bottom: -11px;
|
5634 |
+
}
|
5635 |
+
.popover.top > .arrow:after {
|
5636 |
+
content: " ";
|
5637 |
+
bottom: 1px;
|
5638 |
+
margin-left: -10px;
|
5639 |
+
border-bottom-width: 0;
|
5640 |
+
border-top-color: #ffffff;
|
5641 |
+
}
|
5642 |
+
.popover.right > .arrow {
|
5643 |
+
top: 50%;
|
5644 |
+
left: -11px;
|
5645 |
+
margin-top: -11px;
|
5646 |
+
border-left-width: 0;
|
5647 |
+
border-right-color: #999999;
|
5648 |
+
border-right-color: rgba(0, 0, 0, 0.25);
|
5649 |
+
}
|
5650 |
+
.popover.right > .arrow:after {
|
5651 |
+
content: " ";
|
5652 |
+
left: 1px;
|
5653 |
+
bottom: -10px;
|
5654 |
+
border-left-width: 0;
|
5655 |
+
border-right-color: #ffffff;
|
5656 |
+
}
|
5657 |
+
.popover.bottom > .arrow {
|
5658 |
+
left: 50%;
|
5659 |
+
margin-left: -11px;
|
5660 |
+
border-top-width: 0;
|
5661 |
+
border-bottom-color: #999999;
|
5662 |
+
border-bottom-color: rgba(0, 0, 0, 0.25);
|
5663 |
+
top: -11px;
|
5664 |
+
}
|
5665 |
+
.popover.bottom > .arrow:after {
|
5666 |
+
content: " ";
|
5667 |
+
top: 1px;
|
5668 |
+
margin-left: -10px;
|
5669 |
+
border-top-width: 0;
|
5670 |
+
border-bottom-color: #ffffff;
|
5671 |
+
}
|
5672 |
+
.popover.left > .arrow {
|
5673 |
+
top: 50%;
|
5674 |
+
right: -11px;
|
5675 |
+
margin-top: -11px;
|
5676 |
+
border-right-width: 0;
|
5677 |
+
border-left-color: #999999;
|
5678 |
+
border-left-color: rgba(0, 0, 0, 0.25);
|
5679 |
+
}
|
5680 |
+
.popover.left > .arrow:after {
|
5681 |
+
content: " ";
|
5682 |
+
right: 1px;
|
5683 |
+
border-right-width: 0;
|
5684 |
+
border-left-color: #ffffff;
|
5685 |
+
bottom: -10px;
|
5686 |
+
}
|
5687 |
+
.carousel {
|
5688 |
+
position: relative;
|
5689 |
+
}
|
5690 |
+
.carousel-inner {
|
5691 |
+
position: relative;
|
5692 |
+
overflow: hidden;
|
5693 |
+
width: 100%;
|
5694 |
+
}
|
5695 |
+
.carousel-inner > .item {
|
5696 |
+
display: none;
|
5697 |
+
position: relative;
|
5698 |
+
-webkit-transition: 0.6s ease-in-out left;
|
5699 |
+
-o-transition: 0.6s ease-in-out left;
|
5700 |
+
transition: 0.6s ease-in-out left;
|
5701 |
+
}
|
5702 |
+
.carousel-inner > .item > img,
|
5703 |
+
.carousel-inner > .item > a > img {
|
5704 |
+
line-height: 1;
|
5705 |
+
}
|
5706 |
+
.carousel-inner > .active,
|
5707 |
+
.carousel-inner > .next,
|
5708 |
+
.carousel-inner > .prev {
|
5709 |
+
display: block;
|
5710 |
+
}
|
5711 |
+
.carousel-inner > .active {
|
5712 |
+
left: 0;
|
5713 |
+
}
|
5714 |
+
.carousel-inner > .next,
|
5715 |
+
.carousel-inner > .prev {
|
5716 |
+
position: absolute;
|
5717 |
+
top: 0;
|
5718 |
+
width: 100%;
|
5719 |
+
}
|
5720 |
+
.carousel-inner > .next {
|
5721 |
+
left: 100%;
|
5722 |
+
}
|
5723 |
+
.carousel-inner > .prev {
|
5724 |
+
left: -100%;
|
5725 |
+
}
|
5726 |
+
.carousel-inner > .next.left,
|
5727 |
+
.carousel-inner > .prev.right {
|
5728 |
+
left: 0;
|
5729 |
+
}
|
5730 |
+
.carousel-inner > .active.left {
|
5731 |
+
left: -100%;
|
5732 |
+
}
|
5733 |
+
.carousel-inner > .active.right {
|
5734 |
+
left: 100%;
|
5735 |
+
}
|
5736 |
+
.carousel-control {
|
5737 |
+
position: absolute;
|
5738 |
+
top: 0;
|
5739 |
+
left: 0;
|
5740 |
+
bottom: 0;
|
5741 |
+
width: 15%;
|
5742 |
+
opacity: 0.5;
|
5743 |
+
filter: alpha(opacity=50);
|
5744 |
+
font-size: 20px;
|
5745 |
+
color: #ffffff;
|
5746 |
+
text-align: center;
|
5747 |
+
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
|
5748 |
+
}
|
5749 |
+
.carousel-control.left {
|
5750 |
+
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
|
5751 |
+
background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
|
5752 |
+
background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
|
5753 |
+
background-repeat: repeat-x;
|
5754 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
|
5755 |
+
}
|
5756 |
+
.carousel-control.right {
|
5757 |
+
left: auto;
|
5758 |
+
right: 0;
|
5759 |
+
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
|
5760 |
+
background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
|
5761 |
+
background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
|
5762 |
+
background-repeat: repeat-x;
|
5763 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
|
5764 |
+
}
|
5765 |
+
.carousel-control:hover,
|
5766 |
+
.carousel-control:focus {
|
5767 |
+
outline: 0;
|
5768 |
+
color: #ffffff;
|
5769 |
+
text-decoration: none;
|
5770 |
+
opacity: 0.9;
|
5771 |
+
filter: alpha(opacity=90);
|
5772 |
+
}
|
5773 |
+
.carousel-control .icon-prev,
|
5774 |
+
.carousel-control .icon-next,
|
5775 |
+
.carousel-control .glyphicon-chevron-left,
|
5776 |
+
.carousel-control .glyphicon-chevron-right {
|
5777 |
+
position: absolute;
|
5778 |
+
top: 50%;
|
5779 |
+
z-index: 5;
|
5780 |
+
display: inline-block;
|
5781 |
+
}
|
5782 |
+
.carousel-control .icon-prev,
|
5783 |
+
.carousel-control .glyphicon-chevron-left {
|
5784 |
+
left: 50%;
|
5785 |
+
margin-left: -10px;
|
5786 |
+
}
|
5787 |
+
.carousel-control .icon-next,
|
5788 |
+
.carousel-control .glyphicon-chevron-right {
|
5789 |
+
right: 50%;
|
5790 |
+
margin-right: -10px;
|
5791 |
+
}
|
5792 |
+
.carousel-control .icon-prev,
|
5793 |
+
.carousel-control .icon-next {
|
5794 |
+
width: 20px;
|
5795 |
+
height: 20px;
|
5796 |
+
margin-top: -10px;
|
5797 |
+
font-family: serif;
|
5798 |
+
}
|
5799 |
+
.carousel-control .icon-prev:before {
|
5800 |
+
content: '\2039';
|
5801 |
+
}
|
5802 |
+
.carousel-control .icon-next:before {
|
5803 |
+
content: '\203a';
|
5804 |
+
}
|
5805 |
+
.carousel-indicators {
|
5806 |
+
position: absolute;
|
5807 |
+
bottom: 10px;
|
5808 |
+
left: 50%;
|
5809 |
+
z-index: 15;
|
5810 |
+
width: 60%;
|
5811 |
+
margin-left: -30%;
|
5812 |
+
padding-left: 0;
|
5813 |
+
list-style: none;
|
5814 |
+
text-align: center;
|
5815 |
+
}
|
5816 |
+
.carousel-indicators li {
|
5817 |
+
display: inline-block;
|
5818 |
+
width: 10px;
|
5819 |
+
height: 10px;
|
5820 |
+
margin: 1px;
|
5821 |
+
text-indent: -999px;
|
5822 |
+
border: 1px solid #ffffff;
|
5823 |
+
border-radius: 10px;
|
5824 |
+
cursor: pointer;
|
5825 |
+
background-color: #000 \9;
|
5826 |
+
background-color: rgba(0, 0, 0, 0);
|
5827 |
+
}
|
5828 |
+
.carousel-indicators .active {
|
5829 |
+
margin: 0;
|
5830 |
+
width: 12px;
|
5831 |
+
height: 12px;
|
5832 |
+
background-color: #ffffff;
|
5833 |
+
}
|
5834 |
+
.carousel-caption {
|
5835 |
+
position: absolute;
|
5836 |
+
left: 15%;
|
5837 |
+
right: 15%;
|
5838 |
+
bottom: 20px;
|
5839 |
+
z-index: 10;
|
5840 |
+
padding-top: 20px;
|
5841 |
+
padding-bottom: 20px;
|
5842 |
+
color: #ffffff;
|
5843 |
+
text-align: center;
|
5844 |
+
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
|
5845 |
+
}
|
5846 |
+
.carousel-caption .btn {
|
5847 |
+
text-shadow: none;
|
5848 |
+
}
|
5849 |
+
@media screen and (min-width: 768px) {
|
5850 |
+
.carousel-control .glyphicon-chevron-left,
|
5851 |
+
.carousel-control .glyphicon-chevron-right,
|
5852 |
+
.carousel-control .icon-prev,
|
5853 |
+
.carousel-control .icon-next {
|
5854 |
+
width: 30px;
|
5855 |
+
height: 30px;
|
5856 |
+
margin-top: -15px;
|
5857 |
+
font-size: 30px;
|
5858 |
+
}
|
5859 |
+
.carousel-control .glyphicon-chevron-left,
|
5860 |
+
.carousel-control .icon-prev {
|
5861 |
+
margin-left: -15px;
|
5862 |
+
}
|
5863 |
+
.carousel-control .glyphicon-chevron-right,
|
5864 |
+
.carousel-control .icon-next {
|
5865 |
+
margin-right: -15px;
|
5866 |
+
}
|
5867 |
+
.carousel-caption {
|
5868 |
+
left: 20%;
|
5869 |
+
right: 20%;
|
5870 |
+
padding-bottom: 30px;
|
5871 |
+
}
|
5872 |
+
.carousel-indicators {
|
5873 |
+
bottom: 20px;
|
5874 |
+
}
|
5875 |
+
}
|
5876 |
+
.clearfix:before,
|
5877 |
+
.clearfix:after,
|
5878 |
+
.dl-horizontal dd:before,
|
5879 |
+
.dl-horizontal dd:after,
|
5880 |
+
.container:before,
|
5881 |
+
.container:after,
|
5882 |
+
.container-fluid:before,
|
5883 |
+
.container-fluid:after,
|
5884 |
+
.row:before,
|
5885 |
+
.row:after,
|
5886 |
+
.form-horizontal .form-group:before,
|
5887 |
+
.form-horizontal .form-group:after,
|
5888 |
+
.btn-toolbar:before,
|
5889 |
+
.btn-toolbar:after,
|
5890 |
+
.btn-group-vertical > .btn-group:before,
|
5891 |
+
.btn-group-vertical > .btn-group:after,
|
5892 |
+
.nav:before,
|
5893 |
+
.nav:after,
|
5894 |
+
.navbar:before,
|
5895 |
+
.navbar:after,
|
5896 |
+
.navbar-header:before,
|
5897 |
+
.navbar-header:after,
|
5898 |
+
.navbar-collapse:before,
|
5899 |
+
.navbar-collapse:after,
|
5900 |
+
.pager:before,
|
5901 |
+
.pager:after,
|
5902 |
+
.panel-body:before,
|
5903 |
+
.panel-body:after,
|
5904 |
+
.modal-footer:before,
|
5905 |
+
.modal-footer:after {
|
5906 |
+
content: " ";
|
5907 |
+
display: table;
|
5908 |
+
}
|
5909 |
+
.clearfix:after,
|
5910 |
+
.dl-horizontal dd:after,
|
5911 |
+
.container:after,
|
5912 |
+
.container-fluid:after,
|
5913 |
+
.row:after,
|
5914 |
+
.form-horizontal .form-group:after,
|
5915 |
+
.btn-toolbar:after,
|
5916 |
+
.btn-group-vertical > .btn-group:after,
|
5917 |
+
.nav:after,
|
5918 |
+
.navbar:after,
|
5919 |
+
.navbar-header:after,
|
5920 |
+
.navbar-collapse:after,
|
5921 |
+
.pager:after,
|
5922 |
+
.panel-body:after,
|
5923 |
+
.modal-footer:after {
|
5924 |
+
clear: both;
|
5925 |
+
}
|
5926 |
+
.center-block {
|
5927 |
+
display: block;
|
5928 |
+
margin-left: auto;
|
5929 |
+
margin-right: auto;
|
5930 |
+
}
|
5931 |
+
.pull-right {
|
5932 |
+
float: right !important;
|
5933 |
+
}
|
5934 |
+
.pull-left {
|
5935 |
+
float: left !important;
|
5936 |
+
}
|
5937 |
+
.hide {
|
5938 |
+
display: none !important;
|
5939 |
+
}
|
5940 |
+
.show {
|
5941 |
+
display: block !important;
|
5942 |
+
}
|
5943 |
+
.invisible {
|
5944 |
+
visibility: hidden;
|
5945 |
+
}
|
5946 |
+
.text-hide {
|
5947 |
+
font: 0/0 a;
|
5948 |
+
color: transparent;
|
5949 |
+
text-shadow: none;
|
5950 |
+
background-color: transparent;
|
5951 |
+
border: 0;
|
5952 |
+
}
|
5953 |
+
.hidden {
|
5954 |
+
display: none !important;
|
5955 |
+
visibility: hidden !important;
|
5956 |
+
}
|
5957 |
+
.affix {
|
5958 |
+
position: fixed;
|
5959 |
+
-webkit-transform: translate3d(0, 0, 0);
|
5960 |
+
transform: translate3d(0, 0, 0);
|
5961 |
+
}
|
5962 |
+
@-ms-viewport {
|
5963 |
+
width: device-width;
|
5964 |
+
}
|
5965 |
+
.visible-xs,
|
5966 |
+
.visible-sm,
|
5967 |
+
.visible-md,
|
5968 |
+
.visible-lg {
|
5969 |
+
display: none !important;
|
5970 |
+
}
|
5971 |
+
.visible-xs-block,
|
5972 |
+
.visible-xs-inline,
|
5973 |
+
.visible-xs-inline-block,
|
5974 |
+
.visible-sm-block,
|
5975 |
+
.visible-sm-inline,
|
5976 |
+
.visible-sm-inline-block,
|
5977 |
+
.visible-md-block,
|
5978 |
+
.visible-md-inline,
|
5979 |
+
.visible-md-inline-block,
|
5980 |
+
.visible-lg-block,
|
5981 |
+
.visible-lg-inline,
|
5982 |
+
.visible-lg-inline-block {
|
5983 |
+
display: none !important;
|
5984 |
+
}
|
5985 |
+
@media (max-width: 767px) {
|
5986 |
+
.visible-xs {
|
5987 |
+
display: block !important;
|
5988 |
+
}
|
5989 |
+
table.visible-xs {
|
5990 |
+
display: table;
|
5991 |
+
}
|
5992 |
+
tr.visible-xs {
|
5993 |
+
display: table-row !important;
|
5994 |
+
}
|
5995 |
+
th.visible-xs,
|
5996 |
+
td.visible-xs {
|
5997 |
+
display: table-cell !important;
|
5998 |
+
}
|
5999 |
+
}
|
6000 |
+
@media (max-width: 767px) {
|
6001 |
+
.visible-xs-block {
|
6002 |
+
display: block !important;
|
6003 |
+
}
|
6004 |
+
}
|
6005 |
+
@media (max-width: 767px) {
|
6006 |
+
.visible-xs-inline {
|
6007 |
+
display: inline !important;
|
6008 |
+
}
|
6009 |
+
}
|
6010 |
+
@media (max-width: 767px) {
|
6011 |
+
.visible-xs-inline-block {
|
6012 |
+
display: inline-block !important;
|
6013 |
+
}
|
6014 |
+
}
|
6015 |
+
@media (min-width: 768px) and (max-width: 991px) {
|
6016 |
+
.visible-sm {
|
6017 |
+
display: block !important;
|
6018 |
+
}
|
6019 |
+
table.visible-sm {
|
6020 |
+
display: table;
|
6021 |
+
}
|
6022 |
+
tr.visible-sm {
|
6023 |
+
display: table-row !important;
|
6024 |
+
}
|
6025 |
+
th.visible-sm,
|
6026 |
+
td.visible-sm {
|
6027 |
+
display: table-cell !important;
|
6028 |
+
}
|
6029 |
+
}
|
6030 |
+
@media (min-width: 768px) and (max-width: 991px) {
|
6031 |
+
.visible-sm-block {
|
6032 |
+
display: block !important;
|
6033 |
+
}
|
6034 |
+
}
|
6035 |
+
@media (min-width: 768px) and (max-width: 991px) {
|
6036 |
+
.visible-sm-inline {
|
6037 |
+
display: inline !important;
|
6038 |
+
}
|
6039 |
+
}
|
6040 |
+
@media (min-width: 768px) and (max-width: 991px) {
|
6041 |
+
.visible-sm-inline-block {
|
6042 |
+
display: inline-block !important;
|
6043 |
+
}
|
6044 |
+
}
|
6045 |
+
@media (min-width: 992px) and (max-width: 1199px) {
|
6046 |
+
.visible-md {
|
6047 |
+
display: block !important;
|
6048 |
+
}
|
6049 |
+
table.visible-md {
|
6050 |
+
display: table;
|
6051 |
+
}
|
6052 |
+
tr.visible-md {
|
6053 |
+
display: table-row !important;
|
6054 |
+
}
|
6055 |
+
th.visible-md,
|
6056 |
+
td.visible-md {
|
6057 |
+
display: table-cell !important;
|
6058 |
+
}
|
6059 |
+
}
|
6060 |
+
@media (min-width: 992px) and (max-width: 1199px) {
|
6061 |
+
.visible-md-block {
|
6062 |
+
display: block !important;
|
6063 |
+
}
|
6064 |
+
}
|
6065 |
+
@media (min-width: 992px) and (max-width: 1199px) {
|
6066 |
+
.visible-md-inline {
|
6067 |
+
display: inline !important;
|
6068 |
+
}
|
6069 |
+
}
|
6070 |
+
@media (min-width: 992px) and (max-width: 1199px) {
|
6071 |
+
.visible-md-inline-block {
|
6072 |
+
display: inline-block !important;
|
6073 |
+
}
|
6074 |
+
}
|
6075 |
+
@media (min-width: 1200px) {
|
6076 |
+
.visible-lg {
|
6077 |
+
display: block !important;
|
6078 |
+
}
|
6079 |
+
table.visible-lg {
|
6080 |
+
display: table;
|
6081 |
+
}
|
6082 |
+
tr.visible-lg {
|
6083 |
+
display: table-row !important;
|
6084 |
+
}
|
6085 |
+
th.visible-lg,
|
6086 |
+
td.visible-lg {
|
6087 |
+
display: table-cell !important;
|
6088 |
+
}
|
6089 |
+
}
|
6090 |
+
@media (min-width: 1200px) {
|
6091 |
+
.visible-lg-block {
|
6092 |
+
display: block !important;
|
6093 |
+
}
|
6094 |
+
}
|
6095 |
+
@media (min-width: 1200px) {
|
6096 |
+
.visible-lg-inline {
|
6097 |
+
display: inline !important;
|
6098 |
+
}
|
6099 |
+
}
|
6100 |
+
@media (min-width: 1200px) {
|
6101 |
+
.visible-lg-inline-block {
|
6102 |
+
display: inline-block !important;
|
6103 |
+
}
|
6104 |
+
}
|
6105 |
+
@media (max-width: 767px) {
|
6106 |
+
.hidden-xs {
|
6107 |
+
display: none !important;
|
6108 |
+
}
|
6109 |
+
}
|
6110 |
+
@media (min-width: 768px) and (max-width: 991px) {
|
6111 |
+
.hidden-sm {
|
6112 |
+
display: none !important;
|
6113 |
+
}
|
6114 |
+
}
|
6115 |
+
@media (min-width: 992px) and (max-width: 1199px) {
|
6116 |
+
.hidden-md {
|
6117 |
+
display: none !important;
|
6118 |
+
}
|
6119 |
+
}
|
6120 |
+
@media (min-width: 1200px) {
|
6121 |
+
.hidden-lg {
|
6122 |
+
display: none !important;
|
6123 |
+
}
|
6124 |
+
}
|
6125 |
+
.visible-print {
|
6126 |
+
display: none !important;
|
6127 |
+
}
|
6128 |
+
@media print {
|
6129 |
+
.visible-print {
|
6130 |
+
display: block !important;
|
6131 |
+
}
|
6132 |
+
table.visible-print {
|
6133 |
+
display: table;
|
6134 |
+
}
|
6135 |
+
tr.visible-print {
|
6136 |
+
display: table-row !important;
|
6137 |
+
}
|
6138 |
+
th.visible-print,
|
6139 |
+
td.visible-print {
|
6140 |
+
display: table-cell !important;
|
6141 |
+
}
|
6142 |
+
}
|
6143 |
+
.visible-print-block {
|
6144 |
+
display: none !important;
|
6145 |
+
}
|
6146 |
+
@media print {
|
6147 |
+
.visible-print-block {
|
6148 |
+
display: block !important;
|
6149 |
+
}
|
6150 |
+
}
|
6151 |
+
.visible-print-inline {
|
6152 |
+
display: none !important;
|
6153 |
+
}
|
6154 |
+
@media print {
|
6155 |
+
.visible-print-inline {
|
6156 |
+
display: inline !important;
|
6157 |
+
}
|
6158 |
+
}
|
6159 |
+
.visible-print-inline-block {
|
6160 |
+
display: none !important;
|
6161 |
+
}
|
6162 |
+
@media print {
|
6163 |
+
.visible-print-inline-block {
|
6164 |
+
display: inline-block !important;
|
6165 |
+
}
|
6166 |
+
}
|
6167 |
+
@media print {
|
6168 |
+
.hidden-print {
|
6169 |
+
display: none !important;
|
6170 |
+
}
|
6171 |
+
}
|
6172 |
+
.wp-caption{
|
6173 |
+
max-width:98%
|
6174 |
+
}
|
3.0.14/assets/admin/styles/fonts/glyphicons-halflings-regular.eot
ADDED
Binary file
|
3.0.14/assets/admin/styles/fonts/glyphicons-halflings-regular.svg
ADDED
@@ -0,0 +1,229 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" standalone="no"?>
|
2 |
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
3 |
+
<svg xmlns="http://www.w3.org/2000/svg">
|
4 |
+
<metadata></metadata>
|
5 |
+
<defs>
|
6 |
+
<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
|
7 |
+
<font-face units-per-em="1200" ascent="960" descent="-240" />
|
8 |
+
<missing-glyph horiz-adv-x="500" />
|
9 |
+
<glyph />
|
10 |
+
<glyph />
|
11 |
+
<glyph unicode="
" />
|
12 |
+
<glyph unicode=" " />
|
13 |
+
<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
|
14 |
+
<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
|
15 |
+
<glyph unicode=" " />
|
16 |
+
<glyph unicode=" " horiz-adv-x="652" />
|
17 |
+
<glyph unicode=" " horiz-adv-x="1304" />
|
18 |
+
<glyph unicode=" " horiz-adv-x="652" />
|
19 |
+
<glyph unicode=" " horiz-adv-x="1304" />
|
20 |
+
<glyph unicode=" " horiz-adv-x="434" />
|
21 |
+
<glyph unicode=" " horiz-adv-x="326" />
|
22 |
+
<glyph unicode=" " horiz-adv-x="217" />
|
23 |
+
<glyph unicode=" " horiz-adv-x="217" />
|
24 |
+
<glyph unicode=" " horiz-adv-x="163" />
|
25 |
+
<glyph unicode=" " horiz-adv-x="260" />
|
26 |
+
<glyph unicode=" " horiz-adv-x="72" />
|
27 |
+
<glyph unicode=" " horiz-adv-x="260" />
|
28 |
+
<glyph unicode=" " horiz-adv-x="326" />
|
29 |
+
<glyph unicode="€" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
|
30 |
+
<glyph unicode="−" d="M200 400h900v300h-900v-300z" />
|
31 |
+
<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />
|
32 |
+
<glyph unicode="☁" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
|
33 |
+
<glyph unicode="✉" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
|
34 |
+
<glyph unicode="✏" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
|
35 |
+
<glyph unicode="" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
|
36 |
+
<glyph unicode="" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
|
37 |
+
<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
|
38 |
+
<glyph unicode="" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
|
39 |
+
<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
|
40 |
+
<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
|
41 |
+
<glyph unicode="" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
|
42 |
+
<glyph unicode="" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
|
43 |
+
<glyph unicode="" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
|
44 |
+
<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
|
45 |
+
<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
|
46 |
+
<glyph unicode="" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
|
47 |
+
<glyph unicode="" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
|
48 |
+
<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
|
49 |
+
<glyph unicode="" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
|
50 |
+
<glyph unicode="" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
|
51 |
+
<glyph unicode="" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
|
52 |
+
<glyph unicode="" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
|
53 |
+
<glyph unicode="" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
|
54 |
+
<glyph unicode="" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
|
55 |
+
<glyph unicode="" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
|
56 |
+
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
|
57 |
+
<glyph unicode="" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
|
58 |
+
<glyph unicode="" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
|
59 |
+
<glyph unicode="" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
|
60 |
+
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
|
61 |
+
<glyph unicode="" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
|
62 |
+
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
|
63 |
+
<glyph unicode="" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
|
64 |
+
<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
|
65 |
+
<glyph unicode="" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
|
66 |
+
<glyph unicode="" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
|
67 |
+
<glyph unicode="" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
|
68 |
+
<glyph unicode="" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
|
69 |
+
<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
|
70 |
+
<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
|
71 |
+
<glyph unicode="" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
|
72 |
+
<glyph unicode="" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
|
73 |
+
<glyph unicode="" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
|
74 |
+
<glyph unicode="" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
|
75 |
+
<glyph unicode="" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
|
76 |
+
<glyph unicode="" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
|
77 |
+
<glyph unicode="" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
|
78 |
+
<glyph unicode="" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
|
79 |
+
<glyph unicode="" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
|
80 |
+
<glyph unicode="" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
|
81 |
+
<glyph unicode="" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
|
82 |
+
<glyph unicode="" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
|
83 |
+
<glyph unicode="" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
|
84 |
+
<glyph unicode="" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
|
85 |
+
<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
|
86 |
+
<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
|
87 |
+
<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
|
88 |
+
<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
|
89 |
+
<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
|
90 |
+
<glyph unicode="" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
|
91 |
+
<glyph unicode="" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
|
92 |
+
<glyph unicode="" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
|
93 |
+
<glyph unicode="" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
|
94 |
+
<glyph unicode="" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
|
95 |
+
<glyph unicode="" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
|
96 |
+
<glyph unicode="" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
|
97 |
+
<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
|
98 |
+
<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
|
99 |
+
<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
|
100 |
+
<glyph unicode="" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
|
101 |
+
<glyph unicode="" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
|
102 |
+
<glyph unicode="" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
|
103 |
+
<glyph unicode="" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
|
104 |
+
<glyph unicode="" d="M200 0l900 550l-900 550v-1100z" />
|
105 |
+
<glyph unicode="" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
|
106 |
+
<glyph unicode="" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
|
107 |
+
<glyph unicode="" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
|
108 |
+
<glyph unicode="" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
|
109 |
+
<glyph unicode="" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
|
110 |
+
<glyph unicode="" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
|
111 |
+
<glyph unicode="" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
|
112 |
+
<glyph unicode="" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
|
113 |
+
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
|
114 |
+
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
|
115 |
+
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
|
116 |
+
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
|
117 |
+
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
|
118 |
+
<glyph unicode="" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
|
119 |
+
<glyph unicode="" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
|
120 |
+
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
|
121 |
+
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
|
122 |
+
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
|
123 |
+
<glyph unicode="" d="M0 547l600 453v-300h600v-300h-600v-301z" />
|
124 |
+
<glyph unicode="" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
|
125 |
+
<glyph unicode="" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
|
126 |
+
<glyph unicode="" d="M104 600h296v600h300v-600h298l-449 -600z" />
|
127 |
+
<glyph unicode="" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
|
128 |
+
<glyph unicode="" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
|
129 |
+
<glyph unicode="" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
|
130 |
+
<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
|
131 |
+
<glyph unicode="" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
|
132 |
+
<glyph unicode="" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
|
133 |
+
<glyph unicode="" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
|
134 |
+
<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
|
135 |
+
<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
|
136 |
+
<glyph unicode="" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
|
137 |
+
<glyph unicode="" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
|
138 |
+
<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
|
139 |
+
<glyph unicode="" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
|
140 |
+
<glyph unicode="" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
|
141 |
+
<glyph unicode="" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
|
142 |
+
<glyph unicode="" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
|
143 |
+
<glyph unicode="" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
|
144 |
+
<glyph unicode="" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
|
145 |
+
<glyph unicode="" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
|
146 |
+
<glyph unicode="" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
|
147 |
+
<glyph unicode="" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
|
148 |
+
<glyph unicode="" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
|
149 |
+
<glyph unicode="" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
|
150 |
+
<glyph unicode="" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
|
151 |
+
<glyph unicode="" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
|
152 |
+
<glyph unicode="" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
|
153 |
+
<glyph unicode="" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
|
154 |
+
<glyph unicode="" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
|
155 |
+
<glyph unicode="" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
|
156 |
+
<glyph unicode="" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
|
157 |
+
<glyph unicode="" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
|
158 |
+
<glyph unicode="" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
|
159 |
+
<glyph unicode="" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
|
160 |
+
<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
|
161 |
+
<glyph unicode="" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
|
162 |
+
<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
|
163 |
+
<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
|
164 |
+
<glyph unicode="" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
|
165 |
+
<glyph unicode="" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
|
166 |
+
<glyph unicode="" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
|
167 |
+
<glyph unicode="" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
|
168 |
+
<glyph unicode="" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
|
169 |
+
<glyph unicode="" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
|
170 |
+
<glyph unicode="" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
|
171 |
+
<glyph unicode="" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
|
172 |
+
<glyph unicode="" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
|
173 |
+
<glyph unicode="" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
|
174 |
+
<glyph unicode="" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
|
175 |
+
<glyph unicode="" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
|
176 |
+
<glyph unicode="" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
|
177 |
+
<glyph unicode="" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
|
178 |
+
<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
|
179 |
+
<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
|
180 |
+
<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
|
181 |
+
<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
|
182 |
+
<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
|
183 |
+
<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
|
184 |
+
<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
|
185 |
+
<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
|
186 |
+
<glyph unicode="" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
|
187 |
+
<glyph unicode="" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
|
188 |
+
<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
|
189 |
+
<glyph unicode="" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
|
190 |
+
<glyph unicode="" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
|
191 |
+
<glyph unicode="" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
|
192 |
+
<glyph unicode="" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
|
193 |
+
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
|
194 |
+
<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
|
195 |
+
<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
|
196 |
+
<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
|
197 |
+
<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
|
198 |
+
<glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
|
199 |
+
<glyph unicode="" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
|
200 |
+
<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
|
201 |
+
<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
|
202 |
+
<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
|
203 |
+
<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
|
204 |
+
<glyph unicode="" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
|
205 |
+
<glyph unicode="" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
|
206 |
+
<glyph unicode="" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
|
207 |
+
<glyph unicode="" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
|
208 |
+
<glyph unicode="" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
|
209 |
+
<glyph unicode="" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
|
210 |
+
<glyph unicode="" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
|
211 |
+
<glyph unicode="" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
|
212 |
+
<glyph unicode="" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
|
213 |
+
<glyph unicode="" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
|
214 |
+
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
|
215 |
+
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
|
216 |
+
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
|
217 |
+
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
|
218 |
+
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
|
219 |
+
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
|
220 |
+
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
|
221 |
+
<glyph unicode="" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
|
222 |
+
<glyph unicode="" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
|
223 |
+
<glyph unicode="" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
|
224 |
+
<glyph unicode="" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
|
225 |
+
<glyph unicode="" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
|
226 |
+
<glyph unicode="" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
|
227 |
+
<glyph unicode="" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
|
228 |
+
</font>
|
229 |
+
</defs></svg>
|
3.0.14/assets/admin/styles/fonts/glyphicons-halflings-regular.ttf
ADDED
Binary file
|
3.0.14/assets/admin/styles/fonts/glyphicons-halflings-regular.woff
ADDED
Binary file
|
3.0.14/assets/admin/styles/gdbc-admin.css
ADDED
@@ -0,0 +1,928 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
body
|
2 |
+
{
|
3 |
+
color: #444;
|
4 |
+
font-family: "Open Sans",sans-serif;
|
5 |
+
font-size: 13px;
|
6 |
+
line-height: 1.4em;
|
7 |
+
color:#444;
|
8 |
+
background-color: #F1F1F1;
|
9 |
+
}
|
10 |
+
|
11 |
+
div.wrap.container-fluid
|
12 |
+
{
|
13 |
+
margin: 10px 20px 0px 2px;
|
14 |
+
padding:0;
|
15 |
+
}
|
16 |
+
|
17 |
+
.modal
|
18 |
+
{
|
19 |
+
bottom: 0 !important;
|
20 |
+
left: 0 !important;
|
21 |
+
outline: 0 none !important;
|
22 |
+
overflow: hidden !important;
|
23 |
+
position: fixed !important;
|
24 |
+
right: 0 !important;
|
25 |
+
top: 0 !important;
|
26 |
+
width: auto !important;
|
27 |
+
background-color: transparent !important;
|
28 |
+
margin: 0 !important;
|
29 |
+
}
|
30 |
+
|
31 |
+
div.gdbc-settings .clearfix:after
|
32 |
+
{
|
33 |
+
content: ".";
|
34 |
+
display: block;
|
35 |
+
height: 0;
|
36 |
+
clear: both;
|
37 |
+
visibility: hidden;
|
38 |
+
zoom: 1
|
39 |
+
}
|
40 |
+
|
41 |
+
#gdbc-reports-holder
|
42 |
+
{
|
43 |
+
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
|
44 |
+
}
|
45 |
+
#gdbc-reports-holder h3
|
46 |
+
{
|
47 |
+
font-size: 1.5em;
|
48 |
+
}
|
49 |
+
|
50 |
+
#adminmenuwrap{
|
51 |
+
height: 100%
|
52 |
+
}
|
53 |
+
|
54 |
+
#chart-container{ height: 235px; width: 100% }
|
55 |
+
|
56 |
+
.gdbcwidget {
|
57 |
+
border-radius: 0;
|
58 |
+
margin: 0 0 30px;
|
59 |
+
padding: 0;
|
60 |
+
}
|
61 |
+
|
62 |
+
.gdbcwidget .widget-body {
|
63 |
+
min-height: 100px;
|
64 |
+
/*padding-bottom: 13px;*/
|
65 |
+
position: relative;
|
66 |
+
}
|
67 |
+
|
68 |
+
.gdbcwidget header {
|
69 |
+
border-radius: 0;
|
70 |
+
box-shadow: 0 -2px 0 rgba(0, 0, 0, 0.05) inset;
|
71 |
+
background: none repeat scroll 0 0 #fafafa;
|
72 |
+
border: 1px solid #c2c2c2;
|
73 |
+
color: #333;
|
74 |
+
height: 34px;
|
75 |
+
line-height: 40px;
|
76 |
+
padding: 0;
|
77 |
+
font-size: 13px;
|
78 |
+
}
|
79 |
+
|
80 |
+
.gdbcwidget > header {
|
81 |
+
background: none repeat scroll 0 0 #fafafa;
|
82 |
+
border: 1px solid #c2c2c2;
|
83 |
+
color: #333;
|
84 |
+
}
|
85 |
+
|
86 |
+
.gdbcwidget header h2 {
|
87 |
+
float: left;
|
88 |
+
display: inline-block;
|
89 |
+
font-size: 14px;
|
90 |
+
font-weight: 400;
|
91 |
+
height: 100%;
|
92 |
+
letter-spacing: 0;
|
93 |
+
line-height: 34px;
|
94 |
+
margin: 0;
|
95 |
+
position: relative;
|
96 |
+
width: auto;
|
97 |
+
padding: 0 !important;
|
98 |
+
}
|
99 |
+
|
100 |
+
.gdbcwidget > div {
|
101 |
+
border-bottom-color: #ccc !important;
|
102 |
+
border-left-color: #ccc !important;
|
103 |
+
border-radius: 0;
|
104 |
+
border-right-color: #ccc !important;
|
105 |
+
border-style: none solid solid;
|
106 |
+
border-top: medium none;
|
107 |
+
border-width: medium 1px 2px;
|
108 |
+
float: left;
|
109 |
+
font-size: 13px;
|
110 |
+
margin: 0;
|
111 |
+
overflow: visible;
|
112 |
+
padding: 13px 13px 0;
|
113 |
+
position: relative;
|
114 |
+
width: 100%;
|
115 |
+
background-color: #fff !important
|
116 |
+
}
|
117 |
+
|
118 |
+
.no-padding {
|
119 |
+
padding: 0 !important;
|
120 |
+
}
|
121 |
+
|
122 |
+
.row.no-space {
|
123 |
+
margin:0;
|
124 |
+
padding:0;
|
125 |
+
border:none;
|
126 |
+
}
|
127 |
+
|
128 |
+
.no-space {
|
129 |
+
margin: 0;
|
130 |
+
}
|
131 |
+
|
132 |
+
.widget-icon {
|
133 |
+
display:block;
|
134 |
+
float: left;
|
135 |
+
font-size: 111%;
|
136 |
+
height: 32px;
|
137 |
+
line-height: 32px;
|
138 |
+
position: relative;
|
139 |
+
text-align: center;
|
140 |
+
width: 30px
|
141 |
+
}
|
142 |
+
#dashboard-navigation{
|
143 |
+
float: left
|
144 |
+
}
|
145 |
+
|
146 |
+
.gdbcwidget-loader {
|
147 |
+
background-position: center center;
|
148 |
+
background-repeat: no-repeat;
|
149 |
+
display: none;
|
150 |
+
float: right;
|
151 |
+
font-size: 111%;
|
152 |
+
height: 32px;
|
153 |
+
line-height: 32px;
|
154 |
+
margin: 0;
|
155 |
+
text-align: center;
|
156 |
+
width: 32px
|
157 |
+
}
|
158 |
+
|
159 |
+
.no-space > [class*="col-"] {
|
160 |
+
margin: 0 !important;
|
161 |
+
padding-left: 0;
|
162 |
+
padding-right: 0;
|
163 |
+
}
|
164 |
+
|
165 |
+
.nav > li {
|
166 |
+
display: block;
|
167 |
+
position: relative;
|
168 |
+
}
|
169 |
+
|
170 |
+
.nav-tabs > li {
|
171 |
+
float: left;
|
172 |
+
margin-bottom: -2px;
|
173 |
+
margin-right: -3px;
|
174 |
+
}
|
175 |
+
|
176 |
+
.gdbcwidget header:first-child .nav-tabs li {
|
177 |
+
padding-left: 0;
|
178 |
+
}
|
179 |
+
|
180 |
+
.gdbcwidget header .nav-tabs > li.active > a, .gdbcwidget header .nav-tabs > li.active > a:focus, .gdbcwidget header .nav-tabs > li.active > a:hover {
|
181 |
+
-moz-border-bottom-colors: none;
|
182 |
+
-moz-border-left-colors: none;
|
183 |
+
-moz-border-right-colors: none;
|
184 |
+
-moz-border-top-colors: none;
|
185 |
+
background-color: #fff;
|
186 |
+
border-color: -moz-use-text-color #c2c2c2 transparent;
|
187 |
+
border-image: none;
|
188 |
+
border-left: 1px solid #c2c2c2;
|
189 |
+
border-right: 1px solid #c2c2c2;
|
190 |
+
border-style: none solid solid;
|
191 |
+
border-width: medium 1px 1px;
|
192 |
+
color: #555;
|
193 |
+
cursor: default;
|
194 |
+
}
|
195 |
+
|
196 |
+
.gdbcwidget header .nav-tabs > li > a {
|
197 |
+
border: medium none;
|
198 |
+
border-radius: 0;
|
199 |
+
padding: 7px 15px 6px;
|
200 |
+
}
|
201 |
+
|
202 |
+
.module-pagingation
|
203 |
+
{
|
204 |
+
margin-top: 0 !important;
|
205 |
+
margin-bottom: 0 !important
|
206 |
+
}
|
207 |
+
|
208 |
+
.nav-tabs > li.active > a {
|
209 |
+
border-top-width: 0 !important;
|
210 |
+
box-shadow: 0 -2px 0 #57889c;
|
211 |
+
font-weight: 700;
|
212 |
+
margin-top: 1px !important;
|
213 |
+
}
|
214 |
+
|
215 |
+
.nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover {
|
216 |
+
-moz-border-bottom-colors: none;
|
217 |
+
-moz-border-left-colors: none;
|
218 |
+
-moz-border-right-colors: none;
|
219 |
+
-moz-border-top-colors: none;
|
220 |
+
background-color: #fff;
|
221 |
+
border-color: #ddd #ddd transparent;
|
222 |
+
border-image: none;
|
223 |
+
border-style: solid;
|
224 |
+
border-width: 1px;
|
225 |
+
color: #555;
|
226 |
+
cursor: default;
|
227 |
+
}
|
228 |
+
|
229 |
+
.nav-tabs > li > a {
|
230 |
+
border-radius: 0;
|
231 |
+
color: #333;
|
232 |
+
}
|
233 |
+
.nav-tabs > li > a {
|
234 |
+
border: 1px solid transparent;
|
235 |
+
border-radius: 2px 2px 0 0;
|
236 |
+
line-height: 1.42857;
|
237 |
+
margin-right: 2px;
|
238 |
+
}
|
239 |
+
.nav > li > a {
|
240 |
+
display: block;
|
241 |
+
padding: 9px 10px 10px;
|
242 |
+
position: relative;
|
243 |
+
}
|
244 |
+
|
245 |
+
.vector-map, #gdbc-stats{
|
246 |
+
height: 300px;
|
247 |
+
width: 100%;
|
248 |
+
}
|
249 |
+
|
250 |
+
.vector-map{
|
251 |
+
padding: 10px;
|
252 |
+
}
|
253 |
+
|
254 |
+
.progress {
|
255 |
+
border-radius: 0;
|
256 |
+
height: 7px;
|
257 |
+
margin-bottom: 15px;
|
258 |
+
margin-top: 3px;
|
259 |
+
}
|
260 |
+
|
261 |
+
.easyPieChart{
|
262 |
+
display: inline-block;
|
263 |
+
text-align: center;
|
264 |
+
position: relative;
|
265 |
+
width: 60px;
|
266 |
+
height: 60px;
|
267 |
+
line-height: 60px
|
268 |
+
}
|
269 |
+
|
270 |
+
.easyPieChart canvas{
|
271 |
+
position: absolute;
|
272 |
+
top:0;
|
273 |
+
left:0
|
274 |
+
}
|
275 |
+
|
276 |
+
.pie-chart-widgets > div {
|
277 |
+
border-right: 1px solid #dadada !important;
|
278 |
+
border-top: 1px solid #dadada !important;
|
279 |
+
margin-top: 10px !important;
|
280 |
+
overflow: hidden;
|
281 |
+
padding: 7px 9px;
|
282 |
+
}
|
283 |
+
|
284 |
+
.padding-10
|
285 |
+
{
|
286 |
+
padding: 10px !important;
|
287 |
+
}
|
288 |
+
|
289 |
+
.table img
|
290 |
+
{
|
291 |
+
margin-right: 5px
|
292 |
+
}
|
293 |
+
|
294 |
+
.countriesTable tbody tr, #gdbc-pie-chart table tbody tr{
|
295 |
+
height: 40px;
|
296 |
+
}
|
297 |
+
|
298 |
+
.bg-color-dark-blue{
|
299 |
+
background-color: #4c4f53 !important;
|
300 |
+
}
|
301 |
+
|
302 |
+
.bg-color-blue{
|
303 |
+
background-color: #57889c !important;
|
304 |
+
}
|
305 |
+
|
306 |
+
.bg-color-green{
|
307 |
+
background-color: #71843f !important;
|
308 |
+
}
|
309 |
+
|
310 |
+
.bg-color-dark-orange{
|
311 |
+
background-color: #a57225
|
312 |
+
}
|
313 |
+
|
314 |
+
.view-buttons{
|
315 |
+
width:100%;
|
316 |
+
}
|
317 |
+
|
318 |
+
.view-buttons span
|
319 |
+
{
|
320 |
+
display: inline-block;
|
321 |
+
width: 200px;
|
322 |
+
float:right;
|
323 |
+
}
|
324 |
+
|
325 |
+
/* Map with location of all the attempts */
|
326 |
+
.jvectormap-zoomin,.jvectormap-zoomout
|
327 |
+
{
|
328 |
+
position:absolute;
|
329 |
+
padding:4px;
|
330 |
+
width:22px;
|
331 |
+
height:22px;
|
332 |
+
cursor:pointer;
|
333 |
+
line-height:10px;
|
334 |
+
text-align:center;
|
335 |
+
font-size:14px;
|
336 |
+
border-radius:2px;
|
337 |
+
-webkit-border-radius:2px;
|
338 |
+
-moz-border-radius:2px;
|
339 |
+
box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);
|
340 |
+
-moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);
|
341 |
+
-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);
|
342 |
+
background-color:#fff;
|
343 |
+
border:1px solid #bfbfbf
|
344 |
+
}
|
345 |
+
|
346 |
+
.jvectormap-zoomin:hover,.jvectormap-zoomout:hover
|
347 |
+
{
|
348 |
+
background:#eee;border-color:#d9d9d9
|
349 |
+
}
|
350 |
+
|
351 |
+
.jvectormap-zoomin
|
352 |
+
{
|
353 |
+
top:0
|
354 |
+
}
|
355 |
+
|
356 |
+
.jvectormap-zoomout
|
357 |
+
{
|
358 |
+
top:24px
|
359 |
+
}
|
360 |
+
|
361 |
+
.jvectormap-label
|
362 |
+
{
|
363 |
+
position:absolute;
|
364 |
+
display:none;
|
365 |
+
border:solid 1px #CDCDCD;
|
366 |
+
-webkit-border-radius:3px;
|
367 |
+
-moz-border-radius:3px;
|
368 |
+
border-radius:3px;
|
369 |
+
background:#292929;
|
370 |
+
color:#fff;
|
371 |
+
font-family:sans-serif,Verdana;
|
372 |
+
font-size:smaller;
|
373 |
+
padding:3px
|
374 |
+
}
|
375 |
+
|
376 |
+
.bg-color-greenLight {
|
377 |
+
background-color: #71843f !important;
|
378 |
+
}
|
379 |
+
|
380 |
+
.bg-color-blueLight {
|
381 |
+
background-color: #92a2a8 !important;
|
382 |
+
}
|
383 |
+
|
384 |
+
.bg-color-red{
|
385 |
+
background-color: #a90329 !important;
|
386 |
+
}
|
387 |
+
|
388 |
+
.icon-success{
|
389 |
+
color: #5cb85c
|
390 |
+
}
|
391 |
+
|
392 |
+
.icon-danger{
|
393 |
+
color: #d9534f
|
394 |
+
}
|
395 |
+
|
396 |
+
.icon-primary{
|
397 |
+
color: #428bca
|
398 |
+
}
|
399 |
+
|
400 |
+
a.badge:hover{
|
401 |
+
background-color: #92a2a8 !important;
|
402 |
+
}
|
403 |
+
|
404 |
+
a.easy-tool-tip:hover span:hover {
|
405 |
+
background-color: #92a2a8 !important;
|
406 |
+
cursor: hand;
|
407 |
+
}
|
408 |
+
|
409 |
+
.pie-chart-widgets span.label {
|
410 |
+
min-width: 30px;
|
411 |
+
display: block;
|
412 |
+
text-align: center;
|
413 |
+
}
|
414 |
+
|
415 |
+
.dropdown-menu-xs {
|
416 |
+
min-width: 37px;
|
417 |
+
}
|
418 |
+
|
419 |
+
/*modules page*/
|
420 |
+
.toolbar {
|
421 |
+
display: block;
|
422 |
+
margin-bottom: 0;
|
423 |
+
margin-left: 0;
|
424 |
+
margin-right: 0;
|
425 |
+
margin-top: 0;
|
426 |
+
background-attachment: scroll;
|
427 |
+
background-clip: border-box;
|
428 |
+
background-image: none;
|
429 |
+
background-origin: padding-box;
|
430 |
+
background-position: 0 0;
|
431 |
+
background-repeat: repeat;
|
432 |
+
background-size: auto auto;
|
433 |
+
border-bottom-color: #ccc;
|
434 |
+
border-bottom-style: solid;
|
435 |
+
border-bottom-width: 1px;
|
436 |
+
min-height: 42px;
|
437 |
+
padding-bottom: 8px;
|
438 |
+
padding-left: 10px;
|
439 |
+
padding-right: 10px;
|
440 |
+
padding-top: 8px;
|
441 |
+
background-color: #fff;
|
442 |
+
color: #666;
|
443 |
+
outline-color: -moz-use-text-color;
|
444 |
+
outline-style: none;
|
445 |
+
outline-width: 0;
|
446 |
+
position: relative;
|
447 |
+
}
|
448 |
+
|
449 |
+
#modules-chart .inline-group:after {
|
450 |
+
clear: both;
|
451 |
+
content: "";
|
452 |
+
display: table;
|
453 |
+
}
|
454 |
+
|
455 |
+
|
456 |
+
#modules-chart *, #modules-chart *:after, #modules-chart *:before {
|
457 |
+
box-sizing: content-box;
|
458 |
+
margin-bottom: 0;
|
459 |
+
margin-left: 0;
|
460 |
+
margin-right: 0;
|
461 |
+
margin-top: 0;
|
462 |
+
padding-bottom: 0;
|
463 |
+
padding-left: 0;
|
464 |
+
padding-right: 0;
|
465 |
+
padding-top: 0;
|
466 |
+
}
|
467 |
+
|
468 |
+
#modules-chart .inline-group .checkbox, #modules-chart .inline-group .radio {
|
469 |
+
float: left;
|
470 |
+
margin-right: 30px;
|
471 |
+
width: 130px
|
472 |
+
}
|
473 |
+
|
474 |
+
#modules-chart .checkbox, #modules-chart .radio {
|
475 |
+
color: #404040;
|
476 |
+
cursor: pointer;
|
477 |
+
font-size: 13px;
|
478 |
+
line-height: 25px;
|
479 |
+
margin-bottom: 4px;
|
480 |
+
padding-left: 25px;
|
481 |
+
}
|
482 |
+
|
483 |
+
#modules-chart .checkbox input, #modules-chart .radio input {
|
484 |
+
left: -9999px;
|
485 |
+
position: absolute;
|
486 |
+
}
|
487 |
+
|
488 |
+
#modules-chart input[type="checkbox"], .checkbox-inline input[type="checkbox"], .radio input[type="radio"], .radio-inline input[type="radio"] {
|
489 |
+
margin-left: -20px;
|
490 |
+
}
|
491 |
+
|
492 |
+
input[type="checkbox"], input[type="radio"] {
|
493 |
+
line-height: normal;
|
494 |
+
margin-bottom: 0;
|
495 |
+
margin-right: 0;
|
496 |
+
margin-top: 4px;
|
497 |
+
box-sizing: border-box;
|
498 |
+
padding-bottom: 0;
|
499 |
+
padding-left: 0;
|
500 |
+
padding-right: 0;
|
501 |
+
padding-top: 0;
|
502 |
+
}
|
503 |
+
|
504 |
+
#modules-chart .checkbox input:checked + i:after, #modules-chart .radio input:checked + i:after {
|
505 |
+
opacity: 1;
|
506 |
+
}
|
507 |
+
|
508 |
+
#modules-chart .checkbox input:checked + i:after {
|
509 |
+
-moz-font-feature-settings: normal;
|
510 |
+
-moz-font-language-override: normal;
|
511 |
+
-x-system-font: none;
|
512 |
+
content: "";
|
513 |
+
font-family: "Glyphicons Halflings";
|
514 |
+
font-size: 16px;
|
515 |
+
font-size-adjust: none;
|
516 |
+
font-stretch: normal;
|
517 |
+
font-style: normal;
|
518 |
+
font-variant: normal;
|
519 |
+
font-weight: 400;
|
520 |
+
height: 15px;
|
521 |
+
left: 1px;
|
522 |
+
line-height: 19px;
|
523 |
+
text-align: center;
|
524 |
+
top: -1px;
|
525 |
+
width: 15px;
|
526 |
+
color: #3276b1;
|
527 |
+
margin-right: 10px;
|
528 |
+
}
|
529 |
+
|
530 |
+
#modules-chart .checkbox input + i:after {
|
531 |
+
-moz-font-feature-settings: normal;
|
532 |
+
-moz-font-language-override: normal;
|
533 |
+
-x-system-font: none;
|
534 |
+
content: "";
|
535 |
+
font-family: "Glyphicons Halflings";
|
536 |
+
font-size: 16px;
|
537 |
+
font-size-adjust: none;
|
538 |
+
font-stretch: normal;
|
539 |
+
font-style: normal;
|
540 |
+
font-variant: normal;
|
541 |
+
font-weight: 400;
|
542 |
+
height: 15px;
|
543 |
+
left: 1px;
|
544 |
+
line-height: 19px;
|
545 |
+
text-align: center;
|
546 |
+
top: -1px;
|
547 |
+
width: 15px;
|
548 |
+
color: #3276b1;
|
549 |
+
margin-right: 10px;
|
550 |
+
}
|
551 |
+
|
552 |
+
#modules-chart .checkbox input:checked:hover + i:after{
|
553 |
+
content: "";
|
554 |
+
}
|
555 |
+
|
556 |
+
#modules-chart .checkbox input:checked + i, #modules-chart .radio input:checked + i, #modules-chart .toggle input:checked + i {
|
557 |
+
border-bottom-color: #3276b1;
|
558 |
+
border-left-color-ltr-source: physical;
|
559 |
+
border-left-color-rtl-source: physical;
|
560 |
+
border-left-color-value: #3276b1;
|
561 |
+
border-right-color-ltr-source: physical;
|
562 |
+
border-right-color-rtl-source: physical;
|
563 |
+
border-right-color-value: #3276b1;
|
564 |
+
border-top-color: #3276b1
|
565 |
+
}
|
566 |
+
|
567 |
+
#flot-container {
|
568 |
+
height: 235px;
|
569 |
+
width: 100%;
|
570 |
+
}
|
571 |
+
|
572 |
+
#flotTip{
|
573 |
+
padding:3px 5px;
|
574 |
+
background-color:#fff;
|
575 |
+
z-index:9999;
|
576 |
+
color:#333;
|
577 |
+
-webkit-box-shadow:0 1px 8px rgba(0,0,0,.1);
|
578 |
+
-moz-box-shadow:0 1px 8px rgba(0,0,0,.1);
|
579 |
+
box-shadow:0 1px 8px rgba(0,0,0,.1);
|
580 |
+
font-size:14px;
|
581 |
+
border:1px solid #C1C1C1;
|
582 |
+
-moz-border-radius:4px;
|
583 |
+
-khtml-border-radius:4px;
|
584 |
+
-webkit-border-radius:4px;
|
585 |
+
border-radius:4px
|
586 |
+
}
|
587 |
+
|
588 |
+
#flotTip p
|
589 |
+
{
|
590 |
+
text-align: center;
|
591 |
+
margin:0;
|
592 |
+
padding: 0;
|
593 |
+
}
|
594 |
+
|
595 |
+
#flotTip span{
|
596 |
+
color:#38812D;
|
597 |
+
font-weight:700
|
598 |
+
}
|
599 |
+
|
600 |
+
.module-pagination ul{
|
601 |
+
margin-top: 0;
|
602 |
+
margin-bottom: 0
|
603 |
+
}
|
604 |
+
|
605 |
+
.gdbc-settings h3.hndle
|
606 |
+
{
|
607 |
+
padding: 10px 12px 8px !important;
|
608 |
+
}
|
609 |
+
|
610 |
+
.gdbc-settings form table.form-table
|
611 |
+
{
|
612 |
+
width:auto !important;
|
613 |
+
position: relative !important;
|
614 |
+
}
|
615 |
+
|
616 |
+
.gdbc-settings form table.form-table tr
|
617 |
+
{
|
618 |
+
position:relative !important;
|
619 |
+
|
620 |
+
}
|
621 |
+
|
622 |
+
.gdbc-settings form table.form-table th
|
623 |
+
{
|
624 |
+
width: 300px !important;
|
625 |
+
padding: 18px 10px 12px 0 !important;
|
626 |
+
}
|
627 |
+
|
628 |
+
.gdbc-settings form table.form-table td
|
629 |
+
{
|
630 |
+
padding:10px 0;
|
631 |
+
}
|
632 |
+
|
633 |
+
.gdbc-settings form table.form-table td p
|
634 |
+
{
|
635 |
+
left: 0;
|
636 |
+
position: absolute;
|
637 |
+
width: 850px;
|
638 |
+
margin:0 !important;
|
639 |
+
}
|
640 |
+
|
641 |
+
.gdbc-settings form > h3
|
642 |
+
{
|
643 |
+
margin-bottom: 0 !important;
|
644 |
+
padding-bottom: 0 !important;
|
645 |
+
background: #EFEFEF;
|
646 |
+
margin: 0 -12px !important;
|
647 |
+
padding: 8px 12px;
|
648 |
+
border-bottom: 1px solid #cccccc;
|
649 |
+
border-top: 1px solid #cccccc;
|
650 |
+
|
651 |
+
}
|
652 |
+
.gdbc-settings p.submit
|
653 |
+
{
|
654 |
+
padding-top:0 !important;
|
655 |
+
}
|
656 |
+
.gdbc-settings form hr
|
657 |
+
{
|
658 |
+
margin:0 -12px !important;
|
659 |
+
}
|
660 |
+
|
661 |
+
.gdbc-settings div.error, .gdbc-settings div.updated {
|
662 |
+
margin: 15px 0 5px !important;
|
663 |
+
}
|
664 |
+
|
665 |
+
/*.toplevel_page_goodbye-captcha-settings form table.form-table th,*/
|
666 |
+
/*.toplevel_page_goodbye-captcha-settings form table.form-table td,*/
|
667 |
+
/*.goodbye-captcha-new_page_goodbye-captcha-security form table.form-table th,*/
|
668 |
+
/*.goodbye-captcha-new_page_goodbye-captcha-security form table.form-table td*/
|
669 |
+
/*{*/
|
670 |
+
/*padding-bottom: 30px !important;*/
|
671 |
+
/*}*/
|
672 |
+
|
673 |
+
.gdbc-settings form table.form-table td, .gdbc-settings form table.form-table th
|
674 |
+
{
|
675 |
+
padding-bottom: 30px !important;
|
676 |
+
}
|
677 |
+
.gdbc-settings #normal-sortables:empty, .gdbc-settings #advanced-sortables:empty, .gdbc-settings #bottom-sortables:empty
|
678 |
+
{
|
679 |
+
display:none;
|
680 |
+
}
|
681 |
+
.gdbc-settings .meta-box-sortables
|
682 |
+
{
|
683 |
+
min-height: 0 !important;
|
684 |
+
}
|
685 |
+
|
686 |
+
.text-center
|
687 |
+
{
|
688 |
+
margin-top: 10px;
|
689 |
+
text-align: center !important;
|
690 |
+
}
|
691 |
+
|
692 |
+
.btn-label
|
693 |
+
{
|
694 |
+
background: none repeat scroll 0 0 rgba(0, 0, 0, 0.15);
|
695 |
+
border-radius: 3px 0 0 3px;
|
696 |
+
display: inline-block;
|
697 |
+
left: -12px;
|
698 |
+
padding: 6px 12px;
|
699 |
+
position: relative;
|
700 |
+
}
|
701 |
+
|
702 |
+
.btn {
|
703 |
+
border-radius: 2px;
|
704 |
+
box-shadow: 0 -2px 0 rgba(0, 0, 0, 0.05) inset;
|
705 |
+
}
|
706 |
+
|
707 |
+
a.btn-rate-gdbc
|
708 |
+
{
|
709 |
+
display:none;
|
710 |
+
}
|
711 |
+
|
712 |
+
a.btn-rate-gdbc:hover i.glyphicon
|
713 |
+
{
|
714 |
+
color: #ffff00;
|
715 |
+
}
|
716 |
+
|
717 |
+
.btn-labeled {
|
718 |
+
padding-bottom: 0;
|
719 |
+
padding-top: 0;
|
720 |
+
}
|
721 |
+
|
722 |
+
div.gdbcwidget ul.pagination a:hover
|
723 |
+
{
|
724 |
+
cursor: pointer;
|
725 |
+
}
|
726 |
+
|
727 |
+
#gdbc-barchart-holder div.morris-hover.morris-default-style p
|
728 |
+
{
|
729 |
+
font-weight: bold;
|
730 |
+
margin:0 !important;
|
731 |
+
}
|
732 |
+
#gdbc-barchart-holder div.morris-hover.morris-default-style p span
|
733 |
+
{
|
734 |
+
color: #972d2c;
|
735 |
+
}
|
736 |
+
|
737 |
+
.gdbc-settings .mch-right-side-holder h3.hndle
|
738 |
+
{
|
739 |
+
padding: 0 0 0 10px !important;
|
740 |
+
}
|
741 |
+
|
742 |
+
|
743 |
+
.gdbc-settings .mch-right-side-holder h3.hndle span, .gdbc-settings .mch-right-side-holder h2.hndle span
|
744 |
+
{
|
745 |
+
display:inline-block;
|
746 |
+
padding: 10px 0px 8px 22px !important;
|
747 |
+
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAqhJREFUeNp0kl1IU1EAx8+5O3d3d3MurRk6P+bUpKZk6tJmRijkQ6RlQUJBEIUUvRT1EAbLiF7LkEjqpcigSBIzEDQ0vws/cg6/0+X8mFM3m7t31+vdPV2d6Uv9Hw7ncH7/8z+c/4EYY/BXg3325tou5+ik1+XlBCJUG2I4EHO8KDvFtG+bgUHDmn/96f13c22dEWDZvUZ7ePo3Lw9AvA6wikSHC1KuPbhIK6ktgyCIlqvP5Lb2/ZFsy4zOyVAEADKwlRwAmIViWob+3vPrSrVS2gLVlQ2KgVZzgvv9mMHJKEiAt2mw4YRqLBvotVeWvZaWaNbh6amuv5TqqPh2yC+hMCBIuZto0CTNEYZKQHxvHO5pHUTVFfWZignr3F5OrUlN2BUZq9XsVtMqGkLAMpzXveqcXnJOLXncfgYEmms60fzI1NGcGJR97oTJHK3TgH9pweXrbvzR8rHVPjRL0GoqvbzKlCzqwCT4jyLEqcI01+MPd/bEhCNEyRUUYoe7+Ya3hD6WNObLMork0akSx8+PCH11AVtTYPInmXtSZSxWqRSIZ7nRtvbkM2VUhFZ0OiCFoMAGD0YBjkAQJx4ksgpkOZe7mvqXF1bgwxsv4sZq9bnGcW1hWmZcbJI2TE0RcOsyHh8/PbE4brXb2vr6O8bTjySgvOKcmttd8QNf66zMZ4hCwyiVhqZoEkDIszzj5ZgVv18UpScmMMg/a95o2lJaFW5t0EcJL22JUmUEFMXNFqQcKI0SCqAPBjKzDOWvbm00ffPRBYcuy76Azif9CiUFjGUkJigASQyRFLRJGwzaK5aSnc/ncnqe3H2Dh3rDSXZxLWSJo3281C/mpUAMjNnxpZaSGEPUjiGoL/X97Z86GMcMs8Kt8qRCTUUZtMdOmfJOm7eZPwIMAI1mKkORBmYFAAAAAElFTkSuQmCC') 0 center no-repeat;
|
748 |
+
}
|
749 |
+
.gdbc-settings .mch-right-side-holder h2.hndle span
|
750 |
+
{
|
751 |
+
padding:0 0 0 22px !important;
|
752 |
+
}
|
753 |
+
|
754 |
+
.gdbc-settings .metabox-holder h3 {
|
755 |
+
font-size: 14px;
|
756 |
+
line-height: 1.4;
|
757 |
+
margin: 0;
|
758 |
+
padding: 8px 12px;
|
759 |
+
}
|
760 |
+
|
761 |
+
/*#gdbc-help-metabox h3.hndle span*/
|
762 |
+
/*{*/
|
763 |
+
/*border-left: 4px solid #428bca;*/
|
764 |
+
/*}*/
|
765 |
+
|
766 |
+
|
767 |
+
/*#gdbc-help-metabox .logo-help {*/
|
768 |
+
|
769 |
+
/*display:block;*/
|
770 |
+
/*margin: 0 auto;*/
|
771 |
+
/*padding:10px;*/
|
772 |
+
/*}*/
|
773 |
+
|
774 |
+
#gdbc-help-metabox .inside
|
775 |
+
{
|
776 |
+
margin:0;
|
777 |
+
background-color: #f9f9f9 !important;
|
778 |
+
}
|
779 |
+
|
780 |
+
#gdbc-help-metabox .inside div, #gdbc-available-extension-metabox .inside div
|
781 |
+
{
|
782 |
+
padding:10px;
|
783 |
+
text-align: center;
|
784 |
+
}
|
785 |
+
|
786 |
+
#gdbc-help-metabox .contact-help , #gdbc-available-extension-metabox .contact-help
|
787 |
+
{
|
788 |
+
display:block;
|
789 |
+
text-align: center;
|
790 |
+
border-top: 1px solid #ccc;
|
791 |
+
padding-top:10px;
|
792 |
+
}
|
793 |
+
#gdbc-available-extension-metabox img
|
794 |
+
{
|
795 |
+
width: 128px;
|
796 |
+
height: 128px;
|
797 |
+
padding-top: 5px;
|
798 |
+
}
|
799 |
+
|
800 |
+
#gdbc-available-extension-metabox div.inside h3
|
801 |
+
{
|
802 |
+
padding: 5px 0 0 !important;
|
803 |
+
}
|
804 |
+
|
805 |
+
#wpbr-help-logo-holder
|
806 |
+
{}
|
807 |
+
|
808 |
+
div.mch-meta-notice
|
809 |
+
{}
|
810 |
+
|
811 |
+
div.mch-meta-notice-info
|
812 |
+
{
|
813 |
+
border-left:4px solid #428bca; padding:3px 8px; text-align: justify;
|
814 |
+
}
|
815 |
+
|
816 |
+
div.mch-meta-notice-warning
|
817 |
+
{
|
818 |
+
border-left:4px solid #ffba00; background:#fcf8e3; padding:3px 8px; text-align: center
|
819 |
+
}
|
820 |
+
|
821 |
+
|
822 |
+
/*div.mch-plugin-notice*/
|
823 |
+
/*{*/
|
824 |
+
|
825 |
+
/*}*/
|
826 |
+
|
827 |
+
/*div.mch-plugin-notice p*/
|
828 |
+
/*{*/
|
829 |
+
|
830 |
+
/*}*/
|
831 |
+
|
832 |
+
.report-spinner {
|
833 |
+
position: absolute;
|
834 |
+
left: 50%;
|
835 |
+
top: 50%;
|
836 |
+
height:40px;
|
837 |
+
width:40px;
|
838 |
+
margin:0px auto;
|
839 |
+
-webkit-animation: rotation .6s infinite linear;
|
840 |
+
-moz-animation: rotation .6s infinite linear;
|
841 |
+
-o-animation: rotation .6s infinite linear;
|
842 |
+
animation: rotation .6s infinite linear;
|
843 |
+
border-left:6px solid rgba(0,174,239,.15);
|
844 |
+
border-right:6px solid rgba(0,174,239,.15);
|
845 |
+
border-bottom:6px solid rgba(0,174,239,.15);
|
846 |
+
border-top:6px solid rgba(0,174,239,.8);
|
847 |
+
border-radius:100%;
|
848 |
+
}
|
849 |
+
|
850 |
+
@-webkit-keyframes rotation {
|
851 |
+
from {-webkit-transform: rotate(0deg);}
|
852 |
+
to {-webkit-transform: rotate(359deg);}
|
853 |
+
}
|
854 |
+
@-moz-keyframes rotation {
|
855 |
+
from {-moz-transform: rotate(0deg);}
|
856 |
+
to {-moz-transform: rotate(359deg);}
|
857 |
+
}
|
858 |
+
@-o-keyframes rotation {
|
859 |
+
from {-o-transform: rotate(0deg);}
|
860 |
+
to {-o-transform: rotate(359deg);}
|
861 |
+
}
|
862 |
+
@keyframes rotation {
|
863 |
+
from {transform: rotate(0deg);}
|
864 |
+
to {transform: rotate(359deg);}
|
865 |
+
}
|
866 |
+
|
867 |
+
#gdbc-subscribe-frm input[type="email"]
|
868 |
+
{
|
869 |
+
width: 100%;
|
870 |
+
}
|
871 |
+
|
872 |
+
div.wp-bruiser-licenses input[type="text"]
|
873 |
+
{
|
874 |
+
width: 290px;
|
875 |
+
}
|
876 |
+
|
877 |
+
div.wpbr-about
|
878 |
+
{
|
879 |
+
margin: 0px 0px 15px !important;
|
880 |
+
max-width: 670px !important;
|
881 |
+
}
|
882 |
+
|
883 |
+
div.wp-bruiser-welcome.about-wrap
|
884 |
+
{
|
885 |
+
margin:25px 40px 0px 20px !important;
|
886 |
+
}
|
887 |
+
|
888 |
+
|
889 |
+
#wpbruiser_page_wp-bruiser-wordpress-group-0 table.form-table th
|
890 |
+
{
|
891 |
+
width:300px !important;
|
892 |
+
}
|
893 |
+
|
894 |
+
#wpbruiser_page_wp-bruiser-wordpress-group-0 table.form-table input[type="text"]
|
895 |
+
{
|
896 |
+
width: 100px;
|
897 |
+
}
|
898 |
+
|
899 |
+
#gdbcwordpress-settings-CommentsActivated
|
900 |
+
{
|
901 |
+
margin-bottom: 10px;
|
902 |
+
}
|
903 |
+
|
904 |
+
|
905 |
+
div.wp-bruiser-extensions .plugin-card .desc
|
906 |
+
{
|
907 |
+
margin-right: 0 !important;
|
908 |
+
margin-top:10px !important;
|
909 |
+
}
|
910 |
+
div.wp-bruiser-extensions .plugin-card .name
|
911 |
+
{
|
912 |
+
margin-top:10px !important;
|
913 |
+
}
|
914 |
+
|
915 |
+
div.wp-bruiser-extensions .plugin-card .action-links
|
916 |
+
{
|
917 |
+
top:25px !important;
|
918 |
+
}
|
919 |
+
div.wp-bruiser-extensions .plugin-card li a:hover
|
920 |
+
{
|
921 |
+
color:#0073aa !important;
|
922 |
+
}
|
923 |
+
|
924 |
+
div.wp-bruiser-extensions p.authors
|
925 |
+
{
|
926 |
+
position:absolute;
|
927 |
+
top:118px;
|
928 |
+
}
|
3.0.14/assets/admin/styles/morris.css
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
.morris-hover{position:absolute;z-index:1000}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255,255,255,0.8);border:solid 2px rgba(230,230,230,0.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0}
|
2 |
+
.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0}
|
3.0.14/assets/public/scripts/gdbc-client-new.js.php
ADDED
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright (C) 2014 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
defined( 'ABSPATH' ) || exit;
|
21 |
+
|
22 |
+
function gdbcRewriteNoCacheHeaders($arrHeaders)
|
23 |
+
{
|
24 |
+
$arrHeaders['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0';
|
25 |
+
$arrHeaders['Content-Type'] = 'application/javascript; charset=utf-8';
|
26 |
+
|
27 |
+
return $arrHeaders;
|
28 |
+
}
|
29 |
+
|
30 |
+
add_filter('nocache_headers', 'gdbcRewriteNoCacheHeaders', 1);
|
31 |
+
|
32 |
+
nocache_headers();
|
33 |
+
|
34 |
+
|
35 |
+
if(null === ($settingsModuleInstance = GdbcModulesController::getPublicModuleInstance(GdbcModulesController::MODULE_SETTINGS))){
|
36 |
+
exit;
|
37 |
+
}
|
38 |
+
|
39 |
+
$hiddenInputName = $settingsModuleInstance->getOption(GdbcSettingsAdminModule::OPTION_HIDDEN_INPUT_NAME);
|
40 |
+
|
41 |
+
|
42 |
+
?>
|
43 |
+
|
44 |
+
(function() {'use strict';
|
45 |
+
if (!Array.isArray){Array.isArray = function(arg){return Object.prototype.toString.call(arg) === '[object Array]';};}
|
46 |
+
if (!String.prototype.trim){String.prototype.trim = function () {return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');};}
|
47 |
+
|
48 |
+
var WPBruiserClient = function(){
|
49 |
+
var browserInfo = new Array();
|
50 |
+
function init(){
|
51 |
+
var w=window,d=document,e=0,f=0;e|=w.ActiveXObject?1:0;e|=w.opera?2:0;e|=w.chrome?4:0;
|
52 |
+
e|='getBoxObjectFor' in d || 'mozInnerScreenX' in w?8:0;e|=('WebKitCSSMatrix' in w||'WebKitPoint' in w||'webkitStorageInfo' in w||'webkitURL' in w)?16:0;
|
53 |
+
e|=(e&16&&({}.toString).toString().indexOf("\n")===-1)?32:0;f|='sandbox' in d.createElement('iframe')?1:0;f|='WebSocket' in w?2:0;
|
54 |
+
f|=w.Worker?4:0;f|=w.applicationCache?8:0;f|=w.history && history.pushState?16:0;f|=d.documentElement.webkitRequestFullScreen?32:0;f|='FileReader' in w?64:0;
|
55 |
+
|
56 |
+
var ua = navigator.userAgent.toLowerCase();
|
57 |
+
var regex = /compatible; ([\w.+]+)[ \/]([\w.+]*)|([\w .+]+)[: \/]([\w.+]+)|([\w.+]+)/g;
|
58 |
+
var match = regex.exec(ua);
|
59 |
+
browserInfo = {screenWidth:screen.width,screenHeight:screen.height,engine:e,features:f};
|
60 |
+
while (match !== null) {
|
61 |
+
var prop = {};
|
62 |
+
if (match[1]) {
|
63 |
+
prop.type = match[1];
|
64 |
+
prop.version = match[2];
|
65 |
+
} else if (match[3]) {
|
66 |
+
prop.type = match[3];
|
67 |
+
prop.version = match[4];
|
68 |
+
} else {
|
69 |
+
prop.type = match[5];
|
70 |
+
}
|
71 |
+
prop.type = (prop.type).trim().replace('.','').replace(' ','_');
|
72 |
+
var value = prop.version ? prop.version : true;
|
73 |
+
if (browserInfo[prop.type]) {
|
74 |
+
!Array.isArray(browserInfo[prop.type])?browserInfo[prop.type]=new Array(browserInfo[prop.type]):'';
|
75 |
+
browserInfo[prop.type].push(value);
|
76 |
+
}
|
77 |
+
else browserInfo[prop.type] = value;
|
78 |
+
match = regex.exec(ua);
|
79 |
+
}
|
80 |
+
};
|
81 |
+
|
82 |
+
var requestTokens = function(){for(var i = 0; i < document.forms.length; ++i){retrieveToken(document.forms[i]);}};
|
83 |
+
|
84 |
+
function retrieveToken(formElement){
|
85 |
+
|
86 |
+
var requestObj = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
|
87 |
+
|
88 |
+
var formFieldElm = formElement.querySelector('input[name="<?php echo $hiddenInputName; ?>"]');
|
89 |
+
if(!requestObj || !formFieldElm) return;
|
90 |
+
var ajaxData = {};
|
91 |
+
|
92 |
+
ajaxData[<?php echo "'$hiddenInputName'"; ?>] = '<?php echo GdbcAjaxController::getAjaxNonce(); ?>';
|
93 |
+
ajaxData['action'] = '<?php echo GdbcAjaxController::ACTION_RETRIEVE_TOKEN ?>';
|
94 |
+
ajaxData['requestTime'] = (new Date()).getTime();
|
95 |
+
ajaxData['browserInfo'] = JSON.stringify(browserInfo);
|
96 |
+
|
97 |
+
requestObj.open('POST', '<?php echo MchGdbcWpUtils::getAjaxUrl() ?>', true);
|
98 |
+
requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
|
99 |
+
requestObj.setRequestHeader("X-Requested-With", "XMLHttpRequest");
|
100 |
+
requestObj.setRequestHeader('Accept',"application/json, text/javascript, */*; q=0.01");
|
101 |
+
requestObj.send(serializeObject(ajaxData));
|
102 |
+
|
103 |
+
requestObj.onreadystatechange = function () {
|
104 |
+
if (4 === requestObj.readyState && 200 === requestObj.status){
|
105 |
+
try
|
106 |
+
{
|
107 |
+
var rs = JSON.parse(requestObj.responseText);
|
108 |
+
if(rs.data !== 'undefined')
|
109 |
+
for(var p in rs.data){
|
110 |
+
if(p=='token'){
|
111 |
+
formFieldElm.value = rs.data[p];
|
112 |
+
}
|
113 |
+
else {
|
114 |
+
var value = '', arrValues = rs.data[p].split('|');
|
115 |
+
for (var i = 0; i < arrValues.length; ++i) {
|
116 |
+
if (browserInfo.hasOwnProperty(arrValues[i]))
|
117 |
+
value += browserInfo[arrValues[i]];
|
118 |
+
}
|
119 |
+
var elm = document.createElement("input");elm.name = p;elm.value=value;elm.type='hidden';formElement.appendChild(elm);
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
}
|
124 |
+
catch(e){console.log(e.message);}
|
125 |
+
}
|
126 |
+
}
|
127 |
+
}
|
128 |
+
|
129 |
+
init();
|
130 |
+
|
131 |
+
function serializeObject(obj) {
|
132 |
+
var str = [];
|
133 |
+
for(var p in obj)
|
134 |
+
if (obj.hasOwnProperty(p)) {
|
135 |
+
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
|
136 |
+
}
|
137 |
+
return str.join("&");
|
138 |
+
}
|
139 |
+
return {requestTokens : requestTokens};
|
140 |
+
}
|
141 |
+
|
142 |
+
window.WPBruiserClient = new WPBruiserClient();window.WPBruiserClient.requestTokens();
|
143 |
+
|
144 |
+
})();
|
3.0.14/assets/public/scripts/gdbc-client.js.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright (C) 2014 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
defined( 'ABSPATH' ) || exit;
|
21 |
+
|
22 |
+
function gdbcRewriteNoCacheHeaders($arrHeaders)
|
23 |
+
{
|
24 |
+
$arrHeaders['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0';
|
25 |
+
$arrHeaders['Content-Type'] = 'application/javascript; charset=utf-8';
|
26 |
+
|
27 |
+
return $arrHeaders;
|
28 |
+
}
|
29 |
+
|
30 |
+
add_filter('nocache_headers', 'gdbcRewriteNoCacheHeaders', 1);
|
31 |
+
|
32 |
+
nocache_headers();
|
33 |
+
|
34 |
+
|
35 |
+
?>
|
36 |
+
|
37 |
+
(function($) {
|
38 |
+
$.GdbcClient = function(el, options) {
|
39 |
+
var gdbcClient = this, defaults = {};
|
40 |
+
gdbcClient.settings = {};
|
41 |
+
var init = function() {
|
42 |
+
gdbcClient.settings = $.extend({}, defaults, options);
|
43 |
+
};
|
44 |
+
|
45 |
+
gdbcClient.requestTokens = function() {
|
46 |
+
$('form input[name=' + Gdbc.formFieldName + ']').each(function(){
|
47 |
+
requestTokenValue($(this));
|
48 |
+
});
|
49 |
+
};
|
50 |
+
|
51 |
+
var requestTokenValue = function(elm) {
|
52 |
+
var ajaxData = {};
|
53 |
+
|
54 |
+
ajaxData[Gdbc.formFieldName] = '<?php echo GdbcAjaxController::getAjaxNonce(); ?>';
|
55 |
+
ajaxData['action'] = '<?php echo GdbcAjaxController::ACTION_RETRIEVE_TOKEN ?>';
|
56 |
+
ajaxData['requestTime'] = (new Date()).getTime();
|
57 |
+
ajaxData['browserInfo'] = JSON.stringify(Gdbc.browserInfo);
|
58 |
+
$.ajax({
|
59 |
+
type : "post",
|
60 |
+
cache: false,
|
61 |
+
dataType : "json",
|
62 |
+
url : Gdbc.ajaxUrl + '?t=' + ajaxData['requestTime'],
|
63 |
+
data : ajaxData,
|
64 |
+
success: function(response){
|
65 |
+
$.each(response.data, function(prop, val){
|
66 |
+
if(prop === 'token'){
|
67 |
+
elm.val(val);return;
|
68 |
+
}
|
69 |
+
|
70 |
+
var value = '', arrValues = val.split('|');
|
71 |
+
for(var i=0; i<arrValues.length; ++i) {
|
72 |
+
if (Gdbc.browserInfo.hasOwnProperty(arrValues[i]))
|
73 |
+
value += Gdbc.browserInfo[arrValues[i]];
|
74 |
+
}
|
75 |
+
$('<input>').prop({type:'hidden',name:prop,value:value}).appendTo(elm.closest('form'));
|
76 |
+
});
|
77 |
+
}
|
78 |
+
});
|
79 |
+
};
|
80 |
+
init();
|
81 |
+
}
|
82 |
+
})(jQuery);
|
83 |
+
|
84 |
+
jQuery(document).ready(function($){(new $.GdbcClient()).requestTokens();});
|
3.0.14/assets/public/scripts/gdbc-public.js
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
(function(g,d,b,c){b = g.createElement('script');c=g.scripts[0];b.async=1;b.src=Gdbc.clientUrl+'-'+(new Date()).getTime();c.parentNode.insertBefore(b,c);})(document);
|
2 |
+
|
3 |
+
jQuery(document).ready(function($) {"use strict";
|
4 |
+
var w=window,d=document,e=0,f=0;e|=w.ActiveXObject?1:0;e|=w.opera?2:0;e|=w.chrome?4:0;
|
5 |
+
e|='getBoxObjectFor' in d || 'mozInnerScreenX' in w?8:0;e|=('WebKitCSSMatrix' in w||'WebKitPoint' in w||'webkitStorageInfo' in w||'webkitURL' in w)?16:0;
|
6 |
+
e|=(e&16&&({}.toString).toString().indexOf("\n")===-1)?32:0;f|='sandbox' in d.createElement('iframe')?1:0;f|='WebSocket' in w?2:0;
|
7 |
+
f|=w.Worker?4:0;f|=w.applicationCache?8:0;f|=w.history && history.pushState?16:0;f|=d.documentElement.webkitRequestFullScreen?32:0;f|='FileReader' in w?64:0;
|
8 |
+
|
9 |
+
var ua = navigator.userAgent.toLowerCase();
|
10 |
+
var regex = /compatible; ([\w.+]+)[ \/]([\w.+]*)|([\w .+]+)[: \/]([\w.+]+)|([\w.+]+)/g;
|
11 |
+
var match = regex.exec(ua);
|
12 |
+
Gdbc.browserInfo = {screenWidth:screen.width,screenHeight:screen.height,engine:e,features:f};
|
13 |
+
while (match !== null) {
|
14 |
+
var prop = {};
|
15 |
+
if (match[1]) {
|
16 |
+
prop.type = match[1];
|
17 |
+
prop.version = match[2];
|
18 |
+
} else if (match[3]) {
|
19 |
+
prop.type = match[3];
|
20 |
+
prop.version = match[4];
|
21 |
+
} else {
|
22 |
+
prop.type = match[5];
|
23 |
+
}
|
24 |
+
prop.type = $.trim(prop.type).replace(".","").replace(" ","_");
|
25 |
+
var value = prop.version ? prop.version : true;
|
26 |
+
if (Gdbc.browserInfo[prop.type]) {
|
27 |
+
!$.isArray(Gdbc.browserInfo[prop.type])?Gdbc.browserInfo[prop.type]=new Array(Gdbc.browserInfo[prop.type]):'';
|
28 |
+
Gdbc.browserInfo[prop.type].push(value);
|
29 |
+
}
|
30 |
+
else Gdbc.browserInfo[prop.type] = value;
|
31 |
+
match = regex.exec(ua);
|
32 |
+
}
|
33 |
+
});
|
3.0.14/assets/public/scripts/gdbc-refresh-tokens.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
if(typeof window.WPBruiserClient!=='undefined'){window.WPBruiserClient.requestTokens();}
|
3.0.14/assets/public/scripts/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden
|
3.0.14/engine/GdbcAjaxController.php
ADDED
@@ -0,0 +1,198 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (C) 2015 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
final class GdbcAjaxController
|
21 |
+
{
|
22 |
+
CONST ACTION_RETRIEVE_TOKEN = 'gdbcRetrieveToken';
|
23 |
+
CONST AJAX_NONCE_VALUE = __CLASS__;
|
24 |
+
|
25 |
+
public static function processRequest()
|
26 |
+
{
|
27 |
+
if( ! GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_SETTINGS) )
|
28 |
+
return;
|
29 |
+
|
30 |
+
if(self::isPublicGdbcAjaxRequest() ) {
|
31 |
+
|
32 |
+
self::sendAjaxHeaders();
|
33 |
+
|
34 |
+
if ( ! self::clientCanRetrieveToken() ) {
|
35 |
+
wp_send_json_error();
|
36 |
+
}
|
37 |
+
|
38 |
+
$arrTokenData = GdbcRequestController::getEncryptedToken();
|
39 |
+
|
40 |
+
wp_send_json_success( $arrTokenData );
|
41 |
+
|
42 |
+
exit;
|
43 |
+
}
|
44 |
+
|
45 |
+
if( ! did_action ('plugins_loaded') )
|
46 |
+
return;
|
47 |
+
|
48 |
+
|
49 |
+
foreach(array(
|
50 |
+
GdbcModulesController::MODULE_MAIL_CHIMP_FOR_WP,
|
51 |
+
GdbcModulesController::MODULE_MAIL_POET,
|
52 |
+
GdbcModulesController::MODULE_ZM_ALR,
|
53 |
+
GdbcModulesController::MODULE_NINJA_FORMS,
|
54 |
+
GdbcModulesController::MODULE_USER_PRO,
|
55 |
+
GdbcModulesController::MODULE_EASY_FORMS_FOR_MAILCHIMP,
|
56 |
+
GdbcModulesController::MODULE_ULTIMATE_MEMBER,
|
57 |
+
GdbcModulesController::MODULE_WOOCOMMERCE,
|
58 |
+
GdbcModulesController::MODULE_AFFILIATE_WP,
|
59 |
+
GdbcModulesController::MODULE_EASY_DIGITAL_DOWNLOADS,
|
60 |
+
GdbcModulesController::MODULE_QUFORM,
|
61 |
+
) as $moduleName){
|
62 |
+
|
63 |
+
if(null === ($publicModuleInstance = GdbcModulesController::getPublicModuleInstance($moduleName)))
|
64 |
+
continue;
|
65 |
+
|
66 |
+
$publicModuleInstance->registerAttachedHooks();
|
67 |
+
}
|
68 |
+
|
69 |
+
|
70 |
+
if(self::isWpDiscuzPostCommentAjaxRequest()) // Support for wpDiscuz Plugin
|
71 |
+
{
|
72 |
+
GdbcModulesController::getPublicModuleInstance(GdbcModulesController::MODULE_WORDPRESS)->registerAttachedHooks();
|
73 |
+
}
|
74 |
+
|
75 |
+
if(defined('LOGIN_WITH_AJAX_VERSION'))// Support for Login With Ajax Plugin
|
76 |
+
{
|
77 |
+
GdbcModulesController::getPublicModuleInstance(GdbcModulesController::MODULE_WORDPRESS)->registerAttachedHooks();
|
78 |
+
}
|
79 |
+
|
80 |
+
if(self::isAdminAjaxRequestValid())
|
81 |
+
{
|
82 |
+
$arrAjaxAdminReportsActions = array(
|
83 |
+
'retrieveInitialDashboardData',
|
84 |
+
'retrieveLatestAttemptsTable',
|
85 |
+
'retrieveTotalAttemptsPerModule',
|
86 |
+
'retrieveDetailedAttemptsForChart',
|
87 |
+
'retrieveDetailedAttemptsPerModule',
|
88 |
+
'retrieveFormattedBlockedContent',
|
89 |
+
'retrieveAttemptsPerModuleAndSection',
|
90 |
+
'retrieveAttemptsPerClientIp',
|
91 |
+
'manageClientIpAddress',
|
92 |
+
);
|
93 |
+
|
94 |
+
foreach ($arrAjaxAdminReportsActions as $adminAjaxActionRequest) {
|
95 |
+
add_action('wp_ajax_' . $adminAjaxActionRequest, array(GdbcReportsAdminModule::getInstance(), $adminAjaxActionRequest));
|
96 |
+
}
|
97 |
+
|
98 |
+
foreach(GoodByeCaptchaAdmin::getAdminRegisteredNotices() as $adminNotice){
|
99 |
+
if( !($adminNotice instanceof GdbcAdminNotice) || !$adminNotice->isDismissible())
|
100 |
+
continue;
|
101 |
+
|
102 |
+
add_action('wp_ajax_gdbc-dismiss-' . $adminNotice->getFormattedNoticeKey(), array($adminNotice, 'dismiss'));
|
103 |
+
}
|
104 |
+
|
105 |
+
add_action('wp_ajax_gdbc-user-subscribed-newsletter', array(__CLASS__, 'userSubscribedToNewsLetter'));
|
106 |
+
|
107 |
+
}
|
108 |
+
|
109 |
+
|
110 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_LICENSES) && isset($_REQUEST['action']) && $_REQUEST['action'] === 'update-plugin' && isset($_REQUEST['slug']) && MchGdbcUtils::stringStartsWith($_REQUEST['slug'], GoodByeCaptcha::PLUGIN_SLUG))
|
111 |
+
{
|
112 |
+
GdbcLicensesAdminModule::getInstance()->registerAttachedHooks();
|
113 |
+
}
|
114 |
+
|
115 |
+
}
|
116 |
+
|
117 |
+
public static function userSubscribedToNewsLetter()
|
118 |
+
{
|
119 |
+
GdbcSettingsAdminModule::getInstance()->saveOption(GdbcSettingsAdminModule::OPTION_HIDE_SUBSCRIBE_FORM, true);
|
120 |
+
}
|
121 |
+
|
122 |
+
private static function clientCanRetrieveToken()
|
123 |
+
{
|
124 |
+
|
125 |
+
$settingsModuleInstance = GdbcModulesController::getPublicModuleInstance(GdbcModulesController::MODULE_SETTINGS);
|
126 |
+
if(null === $settingsModuleInstance)
|
127 |
+
return false;
|
128 |
+
|
129 |
+
if(null === ($hiddenInputName = $settingsModuleInstance->getOption(GdbcSettingsAdminModule::OPTION_HIDDEN_INPUT_NAME)))
|
130 |
+
return false;
|
131 |
+
|
132 |
+
if(empty($_POST[$hiddenInputName]))
|
133 |
+
return false;
|
134 |
+
|
135 |
+
|
136 |
+
if(!isset($_SERVER['HTTP_ACCEPT']) || false === stripos($_SERVER['HTTP_ACCEPT'], 'json'))
|
137 |
+
return false;
|
138 |
+
|
139 |
+
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || (0 !== strcasecmp($_SERVER['HTTP_X_REQUESTED_WITH'], 'XMLHttpRequest')))
|
140 |
+
return false;
|
141 |
+
|
142 |
+
require_once( ABSPATH . WPINC . '/pluggable.php' );
|
143 |
+
|
144 |
+
( !defined('LOGGED_IN_COOKIE') && function_exists('wp_cookie_constants') ) ? wp_cookie_constants() : null;
|
145 |
+
|
146 |
+
if(false === wp_verify_nonce($_POST[$hiddenInputName], __CLASS__))
|
147 |
+
return false;
|
148 |
+
|
149 |
+
if(GdbcIPUtils::isClientIpBlackListed())
|
150 |
+
return false;
|
151 |
+
|
152 |
+
return true;
|
153 |
+
|
154 |
+
}
|
155 |
+
|
156 |
+
|
157 |
+
public static function isWpDiscuzPostCommentAjaxRequest()
|
158 |
+
{
|
159 |
+
return !empty($_POST['wpdiscuz_unique_id']) && !empty($_POST['postId']) && MchGdbcWpUtils::isAjaxRequest() && GoodByeCaptchaUtils::isWPDiscuzPluginActivated();
|
160 |
+
}
|
161 |
+
|
162 |
+
private static function sendAjaxHeaders()
|
163 |
+
{
|
164 |
+
wp_magic_quotes();
|
165 |
+
send_origin_headers();
|
166 |
+
|
167 |
+
@header('X-Robots-Tag: noindex' );
|
168 |
+
|
169 |
+
send_nosniff_header();
|
170 |
+
nocache_headers();
|
171 |
+
|
172 |
+
@header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
|
173 |
+
@header('Content-Type: application/json; charset=' . get_option( 'blog_charset' ));
|
174 |
+
}
|
175 |
+
|
176 |
+
private static function isPublicGdbcAjaxRequest()
|
177 |
+
{
|
178 |
+
if(empty($_POST['browserInfo']) || empty($_POST['action']) || (self::ACTION_RETRIEVE_TOKEN !== $_POST['action']))
|
179 |
+
return false;
|
180 |
+
|
181 |
+
return true;
|
182 |
+
}
|
183 |
+
|
184 |
+
public static function getAjaxNonce()
|
185 |
+
{
|
186 |
+
require_once( ABSPATH . WPINC . '/pluggable.php' );
|
187 |
+
|
188 |
+
return wp_create_nonce(__CLASS__);
|
189 |
+
}
|
190 |
+
|
191 |
+
public static function isAdminAjaxRequestValid()
|
192 |
+
{
|
193 |
+
if(!isset($_POST['ajaxRequestNonce']))
|
194 |
+
return false;
|
195 |
+
|
196 |
+
return check_ajax_referer(self::AJAX_NONCE_VALUE, 'ajaxRequestNonce', false);
|
197 |
+
}
|
198 |
+
}
|
3.0.14/engine/GdbcBruteGuardian.php
ADDED
@@ -0,0 +1,237 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright (C) 2015 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
final class GdbcBruteGuardian
|
21 |
+
{
|
22 |
+
|
23 |
+
private static $arrSecurityDirectoryFiles = array(
|
24 |
+
'.htaccess' => 'deny from all',
|
25 |
+
'index.php' => '<?php',
|
26 |
+
'index.html' => '',
|
27 |
+
);
|
28 |
+
|
29 |
+
private static $SITE_UNDER_ATTACK_FLAG = 'wpbr-uad'; //under-attack-detected
|
30 |
+
private static $SITE_ATTACK_WARNING_FLAG = 'wpbr-sid'; //suspicious-ips-detected
|
31 |
+
|
32 |
+
public static function startGuarding()
|
33 |
+
{
|
34 |
+
if( !GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_SETTINGS) )
|
35 |
+
return;
|
36 |
+
|
37 |
+
if( empty($_POST) )
|
38 |
+
return;
|
39 |
+
|
40 |
+
self::$SITE_UNDER_ATTACK_FLAG .= '-' . get_current_blog_id();
|
41 |
+
self::$SITE_ATTACK_WARNING_FLAG .= '-' . get_current_blog_id();
|
42 |
+
|
43 |
+
|
44 |
+
$loginAttemptsHits = 0;
|
45 |
+
$arrLatestLoginAttempts = GdbcDbAccessController::getLatestLoginAttempts(60, false);
|
46 |
+
foreach($arrLatestLoginAttempts as $index => $loginAttempt){
|
47 |
+
$loginAttemptsHits += $loginAttempt->Hits;
|
48 |
+
$arrLatestLoginAttempts[$loginAttempt->ClientIp] = $loginAttempt->Hits;
|
49 |
+
unset($arrLatestLoginAttempts[$index]);
|
50 |
+
}
|
51 |
+
|
52 |
+
switch(true)
|
53 |
+
{
|
54 |
+
case ($loginAttemptsHits > 35 && !self::isSiteUnderAttack()) :
|
55 |
+
|
56 |
+
self::triggerSiteUnderAttack();
|
57 |
+
|
58 |
+
GdbcNotificationsController::sendBruteForceAttackDetectedEmailNotification($arrLatestLoginAttempts);
|
59 |
+
|
60 |
+
break;
|
61 |
+
|
62 |
+
case ($loginAttemptsHits > 25 && !self::isSiteUnderAttack()) :
|
63 |
+
|
64 |
+
break;
|
65 |
+
|
66 |
+
|
67 |
+
case ($loginAttemptsHits < 15) :
|
68 |
+
|
69 |
+
if(self::isSiteUnderAttack()){
|
70 |
+
self::unTriggerSiteUnderAttack();
|
71 |
+
}
|
72 |
+
|
73 |
+
break;
|
74 |
+
}
|
75 |
+
|
76 |
+
|
77 |
+
if(self::isSiteUnderAttack() && GdbcBruteForcePublicModule::getInstance()->getOption(GdbcBruteForceAdminModule::OPTION_AUTO_BLOCK_IP)) {
|
78 |
+
if( isset($arrLatestLoginAttempts[GdbcIPUtils::getClientIpAddress()]) && $arrLatestLoginAttempts[GdbcIPUtils::getClientIpAddress()] > 4 && (!GdbcIPUtils::isClientIpBlackListed()) ){
|
79 |
+
GdbcBlackListedIpsAdminModule::getInstance()->registerBlackListedIp(GdbcIPUtils::getClientIpAddress());
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
}
|
84 |
+
|
85 |
+
public static function isSiteUnderAttack()
|
86 |
+
{
|
87 |
+
static $siteUnderAttack = null;
|
88 |
+
if(null !== $siteUnderAttack)
|
89 |
+
return $siteUnderAttack;
|
90 |
+
|
91 |
+
return $siteUnderAttack = self::flagExists(self::$SITE_UNDER_ATTACK_FLAG);
|
92 |
+
}
|
93 |
+
|
94 |
+
private static function triggerSiteUnderAttack()
|
95 |
+
{
|
96 |
+
self::setSiteFlag(self::$SITE_UNDER_ATTACK_FLAG, true);
|
97 |
+
|
98 |
+
GdbcSettingsAdminModule::getInstance()->saveSecuredOptions(true);
|
99 |
+
|
100 |
+
}
|
101 |
+
|
102 |
+
private static function unTriggerSiteUnderAttack()
|
103 |
+
{
|
104 |
+
self::setSiteFlag(self::$SITE_UNDER_ATTACK_FLAG, false);
|
105 |
+
}
|
106 |
+
|
107 |
+
private static function flagExists($flagName)
|
108 |
+
{
|
109 |
+
$cacheHolder = GoodByeCaptchaUtils::getAvailableCacheStorage(self::getBaseCacheDirectoryPath());
|
110 |
+
if(null === $cacheHolder)
|
111 |
+
return 0;
|
112 |
+
|
113 |
+
return $cacheHolder->has($flagName);
|
114 |
+
}
|
115 |
+
|
116 |
+
private static function setSiteFlag($flagName, $flagBooleanValue)
|
117 |
+
{
|
118 |
+
$cacheHolder = GoodByeCaptchaUtils::getAvailableCacheStorage(self::getBaseCacheDirectoryPath());
|
119 |
+
if(null === $cacheHolder)
|
120 |
+
return;
|
121 |
+
|
122 |
+
if(false === $flagBooleanValue){
|
123 |
+
return $cacheHolder->delete($flagName);
|
124 |
+
}
|
125 |
+
|
126 |
+
if($cacheHolder->getCacheStorage() instanceof MchGdbcCacheFileStorage)
|
127 |
+
{
|
128 |
+
foreach(self::$arrSecurityDirectoryFiles as $fileName => $fileContent)
|
129 |
+
{
|
130 |
+
$filePath = self::getBaseCacheDirectoryPath() . DIRECTORY_SEPARATOR . $fileName;
|
131 |
+
if(MchGdbcWpUtils::fileExists($filePath))
|
132 |
+
break;
|
133 |
+
|
134 |
+
MchGdbcWpUtils::writeContentToFile($fileContent, $filePath, false);
|
135 |
+
}
|
136 |
+
}
|
137 |
+
|
138 |
+
$cacheHolder->write($flagName, MchGdbcHttpRequest::getServerRequestTime(false));
|
139 |
+
}
|
140 |
+
|
141 |
+
private static function getBaseCacheDirectoryPath()
|
142 |
+
{
|
143 |
+
static $cacheDirectoryPath = false;
|
144 |
+
if(false !== $cacheDirectoryPath)
|
145 |
+
return $cacheDirectoryPath;
|
146 |
+
|
147 |
+
// $cacheDirectoryPath = GdbcSettingsPublicModule::getInstance()->getOption(GdbcSettingsAdminModule::OPTION_CACHE_DIR_PATH);
|
148 |
+
// if(!empty($cacheDirectoryPath)){
|
149 |
+
// $cacheDirectoryPath .= DIRECTORY_SEPARATOR . GoodByeCaptcha::PLUGIN_SLUG . DIRECTORY_SEPARATOR . get_current_blog_id();
|
150 |
+
// if(MchGdbcWpUtils::isDirectoryUsable($cacheDirectoryPath, true)){
|
151 |
+
// return $cacheDirectoryPath;
|
152 |
+
// }
|
153 |
+
// }
|
154 |
+
|
155 |
+
$cacheDirectoryPath = MchGdbcWpUtils::getDirectoryPathForCache();
|
156 |
+
if(null === $cacheDirectoryPath)
|
157 |
+
return null;
|
158 |
+
|
159 |
+
$cacheDirectoryPath .= DIRECTORY_SEPARATOR . GoodByeCaptcha::PLUGIN_SLUG . DIRECTORY_SEPARATOR . get_current_blog_id();
|
160 |
+
if(! MchGdbcWpUtils::isDirectoryUsable($cacheDirectoryPath, true) ) {
|
161 |
+
return $cacheDirectoryPath = null;
|
162 |
+
}
|
163 |
+
|
164 |
+
// GdbcSettingsAdminModule::getInstance()->saveOption(GdbcSettingsAdminModule::OPTION_CACHE_DIR_PATH, MchGdbcWpUtils::getDirectoryPathForCache());
|
165 |
+
|
166 |
+
return $cacheDirectoryPath;
|
167 |
+
}
|
168 |
+
|
169 |
+
|
170 |
+
public static function isFormEntryLogEnabled()
|
171 |
+
{
|
172 |
+
return (bool)GdbcSettingsPublicModule::getInstance()->getOption(GdbcSettingsAdminModule::OPTION_BLOCKED_CONTENT_LOG_DAYS);
|
173 |
+
}
|
174 |
+
|
175 |
+
public static function logRejectedAttempt(GdbcAttemptEntity $attemptEntity)
|
176 |
+
{
|
177 |
+
if( ((int)GdbcSettingsPublicModule::getInstance()->getOption(GdbcSettingsAdminModule::OPTION_MAX_LOGS_DAYS)) < 1 ) //logs are NOT enabled
|
178 |
+
return;
|
179 |
+
|
180 |
+
$attemptEntity->SiteId = get_current_blog_id();
|
181 |
+
$attemptEntity->CreatedDate = MchGdbcHttpRequest::getServerRequestTime();
|
182 |
+
$attemptEntity->ClientIp = GdbcIPUtils::getClientIpAddress();
|
183 |
+
|
184 |
+
if(!self::isFormEntryLogEnabled()) //blocked content logs are NOT enabled
|
185 |
+
$attemptEntity->Notes = null;
|
186 |
+
|
187 |
+
GdbcDbAccessController::registerAttempt( $attemptEntity );
|
188 |
+
|
189 |
+
// if(self::isSiteUnderAttack() && GoodByeCaptchaUtils::isLoginAttemptEntity($attemptEntity) && ( !GdbcIPUtils::isClientIpWhiteListed() )){
|
190 |
+
// self::registerClientIpBruteForceRequest();
|
191 |
+
// }
|
192 |
+
|
193 |
+
}
|
194 |
+
|
195 |
+
private static function getIpAddressDirPath($flagName, $ipAddress)
|
196 |
+
{
|
197 |
+
if (null === self::getBaseCacheDirectoryPath())
|
198 |
+
return null;
|
199 |
+
|
200 |
+
$subDirectoryName = null;
|
201 |
+
switch ($flagName)
|
202 |
+
{
|
203 |
+
case self::$SITE_UNDER_ATTACK_FLAG : $subDirectoryName = 'brute-ips'; break;
|
204 |
+
case self::$SITE_ATTACK_WARNING_FLAG : $subDirectoryName = 'suspicious-ips'; break;
|
205 |
+
}
|
206 |
+
|
207 |
+
return self::getBaseCacheDirectoryPath() . DIRECTORY_SEPARATOR . $subDirectoryName . DIRECTORY_SEPARATOR . $ipAddress;
|
208 |
+
}
|
209 |
+
|
210 |
+
private static function isClientIpBruteForcing()
|
211 |
+
{
|
212 |
+
return @is_dir(self::getIpAddressDirPath(self::$SITE_UNDER_ATTACK_FLAG, GdbcIPUtils::getClientIpAddress()));
|
213 |
+
}
|
214 |
+
|
215 |
+
private static function registerClientIpBruteForceRequest()
|
216 |
+
{
|
217 |
+
if(self::isClientIpBruteForcing())
|
218 |
+
{
|
219 |
+
MchGdbcWpUtils::writeContentToFile(null, self::getIpAddressDirPath(self::$SITE_UNDER_ATTACK_FLAG, GdbcIPUtils::getClientIpAddress()) . DIRECTORY_SEPARATOR . MchGdbcHttpRequest::getServerRequestTime(true) . '.gdbc', false);
|
220 |
+
return;
|
221 |
+
}
|
222 |
+
|
223 |
+
if( ! MchGdbcWpUtils::isDirectoryUsable(self::getIpAddressDirPath(self::$SITE_UNDER_ATTACK_FLAG, GdbcIPUtils::getClientIpAddress()), true) )
|
224 |
+
return;
|
225 |
+
|
226 |
+
foreach(self::$arrSecurityDirectoryFiles as $fileName => $fileContent){
|
227 |
+
$filePath = self::getIpAddressDirPath(self::$SITE_UNDER_ATTACK_FLAG, GdbcIPUtils::getClientIpAddress()) . DIRECTORY_SEPARATOR . $fileName;
|
228 |
+
MchGdbcWpUtils::writeContentToFile($fileContent, $filePath, false);
|
229 |
+
}
|
230 |
+
|
231 |
+
MchGdbcWpUtils::writeContentToFile(null, self::getIpAddressDirPath(self::$SITE_UNDER_ATTACK_FLAG, GdbcIPUtils::getClientIpAddress()) . DIRECTORY_SEPARATOR . MchGdbcHttpRequest::getServerRequestTime(true) . '.gdbc', false);
|
232 |
+
}
|
233 |
+
|
234 |
+
private function __construct()
|
235 |
+
{}
|
236 |
+
|
237 |
+
}
|
3.0.14/engine/GdbcIPUtils.php
ADDED
@@ -0,0 +1,431 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* Copyright (C) 2015 Mihai Chelaru
|
5 |
+
*
|
6 |
+
* This program is free software; you can redistribute it and/or
|
7 |
+
* modify it under the terms of the GNU General Public License
|
8 |
+
* as published by the Free Software Foundation; either version 2
|
9 |
+
* of the License, or (at your option) any later version.
|
10 |
+
*
|
11 |
+
* This program is distributed in the hope that it will be useful,
|
12 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14 |
+
* GNU General Public License for more details.
|
15 |
+
*
|
16 |
+
* You should have received a copy of the GNU General Public License
|
17 |
+
* along with this program; if not, write to the Free Software
|
18 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
19 |
+
*/
|
20 |
+
|
21 |
+
final class GdbcIPUtils
|
22 |
+
{
|
23 |
+
public static function isClientIpBlockedByCountry()
|
24 |
+
{
|
25 |
+
return self::isIpBlockedByCountry(self::getClientIpAddress());
|
26 |
+
}
|
27 |
+
|
28 |
+
public static function getClientIpAddress()
|
29 |
+
{
|
30 |
+
return MchGdbcHttpRequest::getClientIp(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_PROXY_HEADERS) ? (array)GdbcProxyHeadersPublicModule::getInstance()->getOption(GdbcProxyHeadersAdminModule::PROXY_HEADERS_IP) : array());
|
31 |
+
}
|
32 |
+
|
33 |
+
public static function isClientIpBlackListed()
|
34 |
+
{
|
35 |
+
return self::isIpBlackListed(self::getClientIpAddress());
|
36 |
+
}
|
37 |
+
|
38 |
+
public static function isClientIpWhiteListed()
|
39 |
+
{
|
40 |
+
return self::isIpWhiteListed(self::getClientIpAddress());
|
41 |
+
}
|
42 |
+
|
43 |
+
public static function isIpWhiteListed($ipAddress)
|
44 |
+
{
|
45 |
+
static $arrWhiteVerifiedIPs = array();
|
46 |
+
if(isset($arrWhiteVerifiedIPs[$ipAddress]))
|
47 |
+
return $arrWhiteVerifiedIPs[$ipAddress];
|
48 |
+
|
49 |
+
if( self::isIpInFormattedRanges($ipAddress, GdbcWhiteListedIpsPublicModule::getInstance()->getOption(GdbcWhiteListedIpsAdminModule::OPTION_WHITE_LISTED_IPS)) )
|
50 |
+
$arrWhiteVerifiedIPs[$ipAddress] = true;
|
51 |
+
|
52 |
+
return isset($arrWhiteVerifiedIPs[$ipAddress]);
|
53 |
+
|
54 |
+
}
|
55 |
+
|
56 |
+
public static function isIpBlackListed($ipAddress)
|
57 |
+
{
|
58 |
+
static $arrBlackVerifiedIPs = array();
|
59 |
+
if(isset($arrBlackVerifiedIPs[$ipAddress]))
|
60 |
+
return $arrBlackVerifiedIPs[$ipAddress];
|
61 |
+
|
62 |
+
if(self::isIpInFormattedRanges($ipAddress, GdbcBlackListedIpsPublicModule::getInstance()->getOption(GdbcBlackListedIpsAdminModule::OPTION_BLACK_LISTED_IPS)))
|
63 |
+
$arrBlackVerifiedIPs[$ipAddress] = true;
|
64 |
+
|
65 |
+
return isset($arrBlackVerifiedIPs[$ipAddress]);
|
66 |
+
}
|
67 |
+
|
68 |
+
public static function isIpBlockedByCountry($ipAddress)
|
69 |
+
{
|
70 |
+
if(!GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_COUNTRY_BLOCKING))
|
71 |
+
return false;
|
72 |
+
|
73 |
+
return GdbcGeoIpCountryPublicModule::getInstance()->isCountryIdBlocked(self::getCountryIdByIpAddress($ipAddress));
|
74 |
+
|
75 |
+
}
|
76 |
+
|
77 |
+
public static function isIpAddressBlocked($ipAddress)
|
78 |
+
{
|
79 |
+
if(self::isIpBlackListed($ipAddress))
|
80 |
+
return true;
|
81 |
+
|
82 |
+
if(self::isIpBlockedByCountry($ipAddress))
|
83 |
+
return true;
|
84 |
+
|
85 |
+
if(null === ($bruteForceModuleInstance = GdbcModulesController::getAdminModuleInstance(GdbcModulesController::MODULE_BRUTE_FORCE)))
|
86 |
+
return false;
|
87 |
+
|
88 |
+
if($bruteForceModuleInstance->getOption(GdbcBruteForceAdminModule::OPTION_BLOCK_WEB_ATTACKERS) && MchGdbcUnTrustedIPRanges::isAttachingHostIP($ipAddress))
|
89 |
+
return true;
|
90 |
+
|
91 |
+
if($bruteForceModuleInstance->getOption(GdbcBruteForceAdminModule::OPTION_BLOCK_ANONYMOUS_PROXY) && MchGdbcUnTrustedIPRanges::isAnonymizerProxyIP($ipAddress))
|
92 |
+
return true;
|
93 |
+
|
94 |
+
return false;
|
95 |
+
|
96 |
+
}
|
97 |
+
|
98 |
+
public static function isClientIpProxyAnonymizer($checkBruteForceModuleSettings = true)
|
99 |
+
{
|
100 |
+
static $isAnonymizer = null;
|
101 |
+
if(null !== $isAnonymizer)
|
102 |
+
return $isAnonymizer;
|
103 |
+
|
104 |
+
$bruteForceModuleInstance = GdbcModulesController::getAdminModuleInstance(GdbcModulesController::MODULE_BRUTE_FORCE);
|
105 |
+
if(null === $bruteForceModuleInstance)
|
106 |
+
return $isAnonymizer = false;
|
107 |
+
|
108 |
+
if( $checkBruteForceModuleSettings && (! $bruteForceModuleInstance->getOption(GdbcBruteForceAdminModule::OPTION_BLOCK_ANONYMOUS_PROXY)) )
|
109 |
+
return $isAnonymizer = false;
|
110 |
+
|
111 |
+
return $isAnonymizer = MchGdbcUnTrustedIPRanges::isAnonymizerProxyIP(GdbcIPUtils::getClientIpAddress());
|
112 |
+
}
|
113 |
+
|
114 |
+
public static function isClientIpWebAttacker($checkBruteForceModuleSettings = true)
|
115 |
+
{
|
116 |
+
static $isAttacker = null;
|
117 |
+
if(null !== $isAttacker)
|
118 |
+
return $isAttacker;
|
119 |
+
|
120 |
+
$bruteForceModuleInstance = GdbcModulesController::getAdminModuleInstance(GdbcModulesController::MODULE_BRUTE_FORCE);
|
121 |
+
if(null === $bruteForceModuleInstance)
|
122 |
+
return $isAttacker = false;
|
123 |
+
|
124 |
+
if( $checkBruteForceModuleSettings && (! $bruteForceModuleInstance->getOption(GdbcBruteForceAdminModule::OPTION_BLOCK_WEB_ATTACKERS)) )
|
125 |
+
return $isAttacker = false;
|
126 |
+
|
127 |
+
return $isAttacker = MchGdbcUnTrustedIPRanges::isAttachingHostIP(GdbcIPUtils::getClientIpAddress());
|
128 |
+
|
129 |
+
}
|
130 |
+
|
131 |
+
public static function isIpProxyAnonymizer($ipAddress)
|
132 |
+
{
|
133 |
+
return MchGdbcUnTrustedIPRanges::isAnonymizerProxyIP($ipAddress);
|
134 |
+
}
|
135 |
+
|
136 |
+
public static function isIpWebAttacker($ipAddress)
|
137 |
+
{
|
138 |
+
return MchGdbcUnTrustedIPRanges::isAttachingHostIP($ipAddress);
|
139 |
+
}
|
140 |
+
|
141 |
+
|
142 |
+
public static function isIpInFormattedRanges($ipAddress, $arrFormattedRanges)
|
143 |
+
{
|
144 |
+
$ipVersion = MchGdbcIPUtils::getIpAddressVersion($ipAddress);
|
145 |
+
|
146 |
+
if( -1 === $ipVersion )
|
147 |
+
return false;
|
148 |
+
|
149 |
+
if(empty($arrFormattedRanges[$ipVersion]))
|
150 |
+
return false;
|
151 |
+
|
152 |
+
|
153 |
+
if($ipVersion === MchGdbcIPUtils::IP_VERSION_6)
|
154 |
+
{
|
155 |
+
$ipAddress = MchGdbcIPUtils::compressIPV6($ipAddress);
|
156 |
+
if(isset($arrFormattedRanges[$ipVersion][$ipAddress]))
|
157 |
+
return true;
|
158 |
+
|
159 |
+
foreach($arrFormattedRanges[$ipVersion] as $blockedIPRange => $value)
|
160 |
+
{
|
161 |
+
if(false === strpos($blockedIPRange, '/'))
|
162 |
+
continue;
|
163 |
+
|
164 |
+
if( ! MchGdbcIPUtils::isIpInCIDRRange($ipAddress, $blockedIPRange, MchGdbcIPUtils::IP_VERSION_6, true) )
|
165 |
+
continue;
|
166 |
+
|
167 |
+
return true;
|
168 |
+
}
|
169 |
+
|
170 |
+
return false;
|
171 |
+
}
|
172 |
+
|
173 |
+
$ipNumber = MchGdbcIPUtils::ipAddressToNumber($ipAddress, MchGdbcIPUtils::IP_VERSION_4);
|
174 |
+
if(isset($arrFormattedRanges[$ipVersion][$ipNumber])) // single IP
|
175 |
+
return true;
|
176 |
+
|
177 |
+
foreach($arrFormattedRanges[$ipVersion] as $minIpNumber => $maxIpNumber)
|
178 |
+
{
|
179 |
+
if( (1 !== $maxIpNumber) && ($minIpNumber <= $ipNumber) && ($ipNumber <= $maxIpNumber) )
|
180 |
+
return true;
|
181 |
+
}
|
182 |
+
|
183 |
+
return false;
|
184 |
+
|
185 |
+
}
|
186 |
+
|
187 |
+
|
188 |
+
public static function removeIpFromFormattedRange($ipAddress, $arrFormattedRange)
|
189 |
+
{
|
190 |
+
$ipVersion = MchGdbcIPUtils::getIpAddressVersion($ipAddress);
|
191 |
+
if(-1 === $ipVersion)
|
192 |
+
return $arrFormattedRange;
|
193 |
+
|
194 |
+
if($ipVersion === MchGdbcIPUtils::IP_VERSION_6)
|
195 |
+
{
|
196 |
+
unset($arrFormattedRange[MchGdbcIPUtils::compressIPV6($ipAddress)]);
|
197 |
+
return $arrFormattedRange;
|
198 |
+
}
|
199 |
+
|
200 |
+
$ipNumber = MchGdbcIPUtils::ipAddressToNumber($ipAddress, $ipVersion);
|
201 |
+
if(isset($arrFormattedRange[$ipNumber]) && 1 == $arrFormattedRange[$ipNumber])
|
202 |
+
{
|
203 |
+
unset($arrFormattedRange[$ipNumber]);
|
204 |
+
return $arrFormattedRange;
|
205 |
+
}
|
206 |
+
|
207 |
+
$arrSingleIPs = array();
|
208 |
+
$arrNewRanges = array();
|
209 |
+
foreach($arrFormattedRange as $minValue => $maxValue)
|
210 |
+
{
|
211 |
+
if(1 == $maxValue)
|
212 |
+
{
|
213 |
+
$arrSingleIPs[$minValue] = $maxValue;
|
214 |
+
continue;
|
215 |
+
}
|
216 |
+
|
217 |
+
if( ($minValue > $ipNumber) || ($ipNumber > $maxValue) )
|
218 |
+
{
|
219 |
+
$arrNewRanges[] = array($minValue, $maxValue);
|
220 |
+
continue;
|
221 |
+
}
|
222 |
+
|
223 |
+
if($minValue == $ipNumber)
|
224 |
+
{
|
225 |
+
if($minValue + 1 <= $maxValue) {
|
226 |
+
$arrNewRanges[] = array( $minValue + 1, $maxValue );
|
227 |
+
}
|
228 |
+
unset($arrFormattedRange[$minValue]);
|
229 |
+
continue;
|
230 |
+
}
|
231 |
+
|
232 |
+
if($maxValue == $ipNumber)
|
233 |
+
{
|
234 |
+
if($minValue <= $maxValue - 1) {
|
235 |
+
$arrNewRanges[] = array( $minValue, $maxValue - 1 );
|
236 |
+
}
|
237 |
+
unset($arrFormattedRange[$minValue]);
|
238 |
+
continue;
|
239 |
+
}
|
240 |
+
|
241 |
+
if($minValue == $ipNumber - 1)
|
242 |
+
{
|
243 |
+
$arrSingleIPs[$minValue] = 1;
|
244 |
+
$arrNewRanges[] = array( $ipNumber + 1, $maxValue );
|
245 |
+
continue;
|
246 |
+
}
|
247 |
+
|
248 |
+
if($maxValue == $ipNumber + 1)
|
249 |
+
{
|
250 |
+
$arrSingleIPs[$maxValue] = 1;
|
251 |
+
$arrNewRanges[] = array( $minValue, $ipNumber -1 );
|
252 |
+
continue;
|
253 |
+
}
|
254 |
+
|
255 |
+
$arrNewRanges[] = array( $minValue, $ipNumber -1 );
|
256 |
+
$arrNewRanges[] = array( $ipNumber + 1, $maxValue);
|
257 |
+
|
258 |
+
}
|
259 |
+
|
260 |
+
$arrFormattedRange = $arrSingleIPs; unset($arrSingleIPs);
|
261 |
+
|
262 |
+
for($i = 0, $rangeLength = count($arrNewRanges); $i < $rangeLength; ++$i)
|
263 |
+
{
|
264 |
+
if($arrNewRanges[$i][0] < $arrNewRanges[$i][1])
|
265 |
+
continue;
|
266 |
+
|
267 |
+
$arrFormattedRange[$arrNewRanges[$i][0]] = 1;
|
268 |
+
unset($arrNewRanges[$i]);
|
269 |
+
}
|
270 |
+
|
271 |
+
$arrNewRanges = MchGdbcUtils::overlapIntervals($arrNewRanges);
|
272 |
+
|
273 |
+
foreach($arrNewRanges as $arrRange){
|
274 |
+
$arrFormattedRange[ $arrRange[0] ] = $arrRange[1];
|
275 |
+
}
|
276 |
+
|
277 |
+
return $arrFormattedRange;
|
278 |
+
|
279 |
+
}
|
280 |
+
|
281 |
+
public static function getFormattedIpRangeForDb($receivedIpAddress)
|
282 |
+
{
|
283 |
+
if(empty($receivedIpAddress))
|
284 |
+
return array();
|
285 |
+
|
286 |
+
$receivedIpAddress = trim($receivedIpAddress);
|
287 |
+
|
288 |
+
$arrPreparedData = array();
|
289 |
+
$ipVersion = MchGdbcIPUtils::getIpAddressVersion($receivedIpAddress);
|
290 |
+
if(-1 !== $ipVersion) // single IP
|
291 |
+
{
|
292 |
+
if($ipVersion === MchGdbcIPUtils::IP_VERSION_4)
|
293 |
+
{
|
294 |
+
$arrPreparedData[MchGdbcIPUtils::IP_VERSION_4] = array(MchGdbcIPUtils::ipAddressToNumber($receivedIpAddress), 1);
|
295 |
+
}
|
296 |
+
else
|
297 |
+
{
|
298 |
+
$arrPreparedData[MchGdbcIPUtils::IP_VERSION_6] = array(MchGdbcIPUtils::compressIPV6($receivedIpAddress), 1);
|
299 |
+
}
|
300 |
+
|
301 |
+
return $arrPreparedData;
|
302 |
+
}
|
303 |
+
|
304 |
+
$sanitizedRange = MchGdbcIPUtils::sanitizeCIDRRange($receivedIpAddress);
|
305 |
+
if(null !== $sanitizedRange) // CIDR Block
|
306 |
+
{
|
307 |
+
$ipVersion = MchGdbcIPUtils::getIpAddressVersion(MchGdbcIPUtils::sanitizeIpAddress($sanitizedRange));
|
308 |
+
if($ipVersion === MchGdbcIPUtils::IP_VERSION_4)
|
309 |
+
{
|
310 |
+
$sanitizedRange = MchGdbcIPUtils::getCIDRRangeBounds($sanitizedRange);
|
311 |
+
if(empty($sanitizedRange[0]) || empty($sanitizedRange[1]))
|
312 |
+
return array();
|
313 |
+
|
314 |
+
$sanitizedRange[0] = MchGdbcIPUtils::ipAddressToNumber($sanitizedRange[0]);
|
315 |
+
$sanitizedRange[1] = MchGdbcIPUtils::ipAddressToNumber($sanitizedRange[1]);
|
316 |
+
|
317 |
+
$arrPreparedData[$ipVersion] = $sanitizedRange;
|
318 |
+
|
319 |
+
}
|
320 |
+
else // IPV6
|
321 |
+
{
|
322 |
+
list($ipv6, $bits) = explode('/', $sanitizedRange, 2);
|
323 |
+
|
324 |
+
$ipv6 = MchGdbcIPUtils::compressIPV6($ipv6);
|
325 |
+
|
326 |
+
$arrPreparedData[ $ipVersion ] = $bits == MchGdbcIPUtils::IP_V6_MAX_BITS ? array($ipv6, 1) : array("$ipv6/$bits", 1);
|
327 |
+
}
|
328 |
+
|
329 |
+
return $arrPreparedData;
|
330 |
+
}
|
331 |
+
$arrSanitizedRange = explode('-', $receivedIpAddress, 2);
|
332 |
+
if(2 !== count($arrSanitizedRange))
|
333 |
+
return array();
|
334 |
+
|
335 |
+
$sanitizedLowIp = MchGdbcIPUtils::sanitizeIpAddress(MchGdbcIPUtils::sanitizeCIDRRange($arrSanitizedRange[0]));
|
336 |
+
$sanitizedHighIp = MchGdbcIPUtils::sanitizeIpAddress(MchGdbcIPUtils::sanitizeCIDRRange($arrSanitizedRange[1]));
|
337 |
+
|
338 |
+
if(!MchGdbcIPUtils::isValidIpAddress($sanitizedLowIp) || !MchGdbcIPUtils::isValidIpAddress($sanitizedHighIp)) {
|
339 |
+
return array();
|
340 |
+
}
|
341 |
+
|
342 |
+
$ipVersion = MchGdbcIPUtils::getIpAddressVersion($sanitizedLowIp);
|
343 |
+
if($ipVersion !== MchGdbcIPUtils::getIpAddressVersion($sanitizedHighIp))
|
344 |
+
return array();
|
345 |
+
|
346 |
+
if( $ipVersion !== MchGdbcIPUtils::IP_VERSION_4 ) // non standard range allowed just for IPv4
|
347 |
+
return array();
|
348 |
+
|
349 |
+
$minIpNumber = MchGdbcIPUtils::ipAddressToNumber($sanitizedLowIp, MchGdbcIPUtils::IP_VERSION_4);
|
350 |
+
$maxIpNumber = MchGdbcIPUtils::ipAddressToNumber($sanitizedHighIp, MchGdbcIPUtils::IP_VERSION_4);
|
351 |
+
|
352 |
+
if($minIpNumber >= $maxIpNumber) // single IP
|
353 |
+
{
|
354 |
+
$arrPreparedData[$ipVersion] = array($minIpNumber, 1);
|
355 |
+
}
|
356 |
+
else
|
357 |
+
{
|
358 |
+
$arrPreparedData[$ipVersion] = array($minIpNumber, $maxIpNumber);
|
359 |
+
}
|
360 |
+
|
361 |
+
return $arrPreparedData;
|
362 |
+
|
363 |
+
}
|
364 |
+
|
365 |
+
|
366 |
+
public static function getFormattedIpRangesForDisplay($arrSavedIpRanges)
|
367 |
+
{
|
368 |
+
|
369 |
+
$arrIps = array();
|
370 |
+
foreach((array)$arrSavedIpRanges as $ipVersion => $arrSavedIps)
|
371 |
+
{
|
372 |
+
|
373 |
+
foreach($arrSavedIps as $savedIp => $value)
|
374 |
+
{
|
375 |
+
if($ipVersion == MchGdbcIPUtils::IP_VERSION_6)
|
376 |
+
{
|
377 |
+
$arrIps[] = $savedIp . '|' . MchGdbcIPUtils::getCIDRNumberOfHosts($savedIp);
|
378 |
+
continue;
|
379 |
+
}
|
380 |
+
|
381 |
+
if($value === 1)
|
382 |
+
{
|
383 |
+
$arrIps[] = MchGdbcIPUtils::ipAddressFromNumber( $savedIp, MchGdbcIPUtils::IP_VERSION_4 ) . '|' . 1;
|
384 |
+
|
385 |
+
continue;
|
386 |
+
}
|
387 |
+
|
388 |
+
// $arrRange = explode('/', $savedIp);
|
389 |
+
// if(isset($arrRange[1]) && !isset($arrRange[2]))
|
390 |
+
// {
|
391 |
+
// $arrIps[] = $savedIp . '|' . MchGdbcIPUtils::getCIDRNumberOfHosts($savedIp);
|
392 |
+
//
|
393 |
+
// continue;
|
394 |
+
// }
|
395 |
+
|
396 |
+
$arrRange = array($savedIp , $value);
|
397 |
+
if(is_numeric($arrRange[0]) && is_numeric($arrRange[1]))
|
398 |
+
{
|
399 |
+
$displayIp = MchGdbcIPUtils::ipAddressFromNumber($arrRange[0], MchGdbcIPUtils::IP_VERSION_4) . ' - ' . MchGdbcIPUtils::ipAddressFromNumber($arrRange[1], MchGdbcIPUtils::IP_VERSION_4);
|
400 |
+
$displayIp .= '|' . ($arrRange[1] - $arrRange[0] + 1);
|
401 |
+
$arrIps[] = $displayIp;
|
402 |
+
|
403 |
+
continue;
|
404 |
+
}
|
405 |
+
|
406 |
+
}
|
407 |
+
}
|
408 |
+
|
409 |
+
return array_reverse($arrIps);
|
410 |
+
}
|
411 |
+
|
412 |
+
|
413 |
+
|
414 |
+
public static function getCountryNameByIpAddress($ipAddress)
|
415 |
+
{
|
416 |
+
return GoodByeCaptchaUtils::getCountryNameById(self::getCountryIdByIpAddress($ipAddress));
|
417 |
+
}
|
418 |
+
|
419 |
+
public static function getCountryCodeByIpAddress($ipAddress)
|
420 |
+
{
|
421 |
+
return GoodByeCaptchaUtils::getCountryCodeById(self::getCountryIdByIpAddress($ipAddress));
|
422 |
+
}
|
423 |
+
|
424 |
+
public static function getCountryIdByIpAddress($ipAddress)
|
425 |
+
{
|
426 |
+
return MchGdbcIpCountryLocator::getCountryIdByIpAddress($ipAddress);
|
427 |
+
}
|
428 |
+
|
429 |
+
|
430 |
+
private function __construct(){}
|
431 |
+
}
|
3.0.14/engine/GdbcModulesController.php
ADDED
@@ -0,0 +1,754 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* Copyright (C) 2014 Mihai Chelaru
|
5 |
+
*
|
6 |
+
* This program is free software; you can redistribute it and/or
|
7 |
+
* modify it under the terms of the GNU General Public License
|
8 |
+
* as published by the Free Software Foundation; either version 2
|
9 |
+
* of the License, or (at your option) any later version.
|
10 |
+
*
|
11 |
+
* This program is distributed in the hope that it will be useful,
|
12 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14 |
+
* GNU General Public License for more details.
|
15 |
+
*
|
16 |
+
* You should have received a copy of the GNU General Public License
|
17 |
+
* along with this program; if not, write to the Free Software
|
18 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
19 |
+
*/
|
20 |
+
|
21 |
+
spl_autoload_register(array('GdbcModulesController','autoLoadModulesClasses'));
|
22 |
+
|
23 |
+
final class GdbcModulesController
|
24 |
+
{
|
25 |
+
//CONST MODULE_CLASS_PREFIX = 'GoodByeCaptcha';
|
26 |
+
|
27 |
+
CONST MODULE_SETTINGS = 'Settings';
|
28 |
+
CONST MODULE_WORDPRESS = 'WordPress';
|
29 |
+
CONST MODULE_BRUTE_FORCE = 'BruteForce';
|
30 |
+
|
31 |
+
CONST MODULE_REPORTS = 'Reports';
|
32 |
+
|
33 |
+
CONST MODULE_WOOCOMMERCE = 'WooCommerce';
|
34 |
+
|
35 |
+
CONST MODULE_MAIL_CHIMP_FOR_WP = 'MailChimpForWp';
|
36 |
+
CONST MODULE_MAIL_POET = 'MailPoet';
|
37 |
+
|
38 |
+
CONST MODULE_NINJA_FORMS = 'NinjaForms';
|
39 |
+
CONST MODULE_CONTACT_FORM_7 = 'ContactForm7';
|
40 |
+
CONST MODULE_GRAVITY_FORMS = 'GravityForms';
|
41 |
+
CONST MODULE_FAST_SECURE_FORM = 'FastSecureForm';
|
42 |
+
CONST MODULE_FORMIDABLE_FORMS = 'FormidableForms';
|
43 |
+
CONST MODULE_JETPACK_CONTACT_FORM = 'JetPackContactForm';
|
44 |
+
|
45 |
+
|
46 |
+
CONST MODULE_ULTIMATE_MEMBER = 'UltimateMember';
|
47 |
+
CONST MODULE_USER_PRO = 'UserPro';
|
48 |
+
CONST MODULE_UPME = 'UPME';
|
49 |
+
CONST MODULE_BUDDY_PRESS = 'BuddyPress';
|
50 |
+
CONST MODULE_BB_PRESS = 'bbPress';
|
51 |
+
|
52 |
+
CONST MODULE_BLACK_LISTED_IPS = 'BlackListedIps';
|
53 |
+
CONST MODULE_WHITE_LISTED_IPS = 'WhiteListedIps';
|
54 |
+
|
55 |
+
CONST MODULE_ZM_ALR = 'ZM-ALR';
|
56 |
+
CONST MODULE_QUFORM = 'Quform';
|
57 |
+
|
58 |
+
CONST MODULE_SEAMLESS_DONATIONS = 'SeamlessDonations';
|
59 |
+
CONST MODULE_WORDPRESS_TWEAKS = 'WordPressTweaks';
|
60 |
+
|
61 |
+
CONST MODULE_PLANSO_FORMS = 'PlanSoForms';
|
62 |
+
CONST MODULE_EMAIL_NOTIFICATIONS = 'EmailNotifications';
|
63 |
+
CONST MODULE_LICENSES = 'Licenses';
|
64 |
+
CONST MODULE_MEMBER_PRESS = 'MemberPress';
|
65 |
+
|
66 |
+
CONST MODULE_PROXY_HEADERS = 'ProxyHeaders';
|
67 |
+
CONST MODULE_COUNTRY_BLOCKING = 'CountryBlocking';
|
68 |
+
CONST MODULE_EASY_DIGITAL_DOWNLOADS = 'EDD';
|
69 |
+
CONST MODULE_AFFILIATE_WP = 'AffiliateWP';
|
70 |
+
|
71 |
+
CONST MODULE_EASY_FORMS_FOR_MAILCHIMP = 'EasyFormsForMailChimp';
|
72 |
+
|
73 |
+
private static $arrRegisteredModules = null;
|
74 |
+
private static $arrAllModules = array(
|
75 |
+
|
76 |
+
self::MODULE_SETTINGS => array(
|
77 |
+
'info' => array(
|
78 |
+
'ModuleId' => 1,
|
79 |
+
'IsLicensed' => false,
|
80 |
+
),
|
81 |
+
'classes' => array(
|
82 |
+
'GdbcSettingsAdminModule' => '/modules/settings/GdbcSettingsAdminModule.php',
|
83 |
+
'GdbcSettingsPublicModule' => '/modules/settings/GdbcSettingsPublicModule.php',
|
84 |
+
),
|
85 |
+
),
|
86 |
+
|
87 |
+
self::MODULE_WORDPRESS => array(
|
88 |
+
'info' => array(
|
89 |
+
'ModuleId' => 2,
|
90 |
+
'IsLicensed' => false,
|
91 |
+
),
|
92 |
+
'classes' => array(
|
93 |
+
'GdbcWordPressAdminModule' => '/modules/wordpress/GdbcWordPressAdminModule.php',
|
94 |
+
'GdbcWordPressPublicModule' => '/modules/wordpress/GdbcWordPressPublicModule.php',
|
95 |
+
)
|
96 |
+
),
|
97 |
+
|
98 |
+
self::MODULE_JETPACK_CONTACT_FORM => array(
|
99 |
+
'info' => array(
|
100 |
+
'ModuleId' => 3,
|
101 |
+
'IsLicensed' => false,
|
102 |
+
),
|
103 |
+
'classes' => array(
|
104 |
+
'GdbcJetPackContactFormAdminModule' => '/modules/jetpack-contact-form/GdbcJetPackContactFormAdminModule.php',
|
105 |
+
'GdbcJetPackContactFormPublicModule' => '/modules/jetpack-contact-form/GdbcJetPackContactFormPublicModule.php',
|
106 |
+
)
|
107 |
+
),
|
108 |
+
|
109 |
+
self::MODULE_NINJA_FORMS => array(
|
110 |
+
'info' => array(
|
111 |
+
'ModuleId' => 4,
|
112 |
+
'IsLicensed' => true,
|
113 |
+
),
|
114 |
+
'classes' => array(
|
115 |
+
'GdbcNinjaFormsAdminModule' => '/modules/ninja-forms/GdbcNinjaFormsAdminModule.php',
|
116 |
+
'GdbcNinjaFormsPublicModule' => '/modules/ninja-forms/GdbcNinjaFormsPublicModule.php',
|
117 |
+
)
|
118 |
+
),
|
119 |
+
|
120 |
+
self::MODULE_CONTACT_FORM_7 => array(
|
121 |
+
'info' => array(
|
122 |
+
'ModuleId' => 5,
|
123 |
+
'IsLicensed' => true,
|
124 |
+
),
|
125 |
+
'classes' => array(
|
126 |
+
'GdbcContactForm7AdminModule' => '/modules/contact-form-7/GdbcContactForm7AdminModule.php',
|
127 |
+
'GdbcContactForm7PublicModule' => '/modules/contact-form-7/GdbcContactForm7PublicModule.php',
|
128 |
+
)
|
129 |
+
),
|
130 |
+
|
131 |
+
self::MODULE_GRAVITY_FORMS => array(
|
132 |
+
'info' => array(
|
133 |
+
'ModuleId' => 6,
|
134 |
+
'IsLicensed' => true,
|
135 |
+
),
|
136 |
+
'classes' => array(
|
137 |
+
'GdbcGravityFormsAdminModule' => '/modules/gravity-forms/GdbcGravityFormsAdminModule.php',
|
138 |
+
'GdbcGravityFormsPublicModule' => '/modules/gravity-forms/GdbcGravityFormsPublicModule.php',
|
139 |
+
)
|
140 |
+
),
|
141 |
+
|
142 |
+
self::MODULE_FAST_SECURE_FORM => array(
|
143 |
+
'info' => array(
|
144 |
+
'ModuleId' => 7,
|
145 |
+
'IsLicensed' => true,
|
146 |
+
),
|
147 |
+
'classes' => array(
|
148 |
+
'GdbcFastSecureFormAdminModule' => '/modules/fast-secure-form/GdbcFastSecureFormAdminModule.php',
|
149 |
+
'GdbcFastSecureFormPublicModule' => '/modules/fast-secure-form/GdbcFastSecureFormPublicModule.php',
|
150 |
+
)
|
151 |
+
),
|
152 |
+
|
153 |
+
self::MODULE_FORMIDABLE_FORMS => array(
|
154 |
+
'info' => array(
|
155 |
+
'ModuleId' => 8,
|
156 |
+
'IsLicensed' => true,
|
157 |
+
),
|
158 |
+
'classes' => array(
|
159 |
+
'GdbcFormidableFormsAdminModule' => '/modules/formidable-forms/GdbcFormidableFormsAdminModule.php',
|
160 |
+
'GdbcFormidableFormsPublicModule' => '/modules/formidable-forms/GdbcFormidableFormsPublicModule.php',
|
161 |
+
)
|
162 |
+
),
|
163 |
+
|
164 |
+
self::MODULE_ULTIMATE_MEMBER => array(
|
165 |
+
'info' => array(
|
166 |
+
'ModuleId' => 9,
|
167 |
+
'IsLicensed' => false,
|
168 |
+
),
|
169 |
+
'classes' => array(
|
170 |
+
'GdbcUltimateMemberAdminModule' => '/modules/ultimate-member/GdbcUltimateMemberAdminModule.php',
|
171 |
+
'GdbcUltimateMemberPublicModule' => '/modules/ultimate-member/GdbcUltimateMemberPublicModule.php',
|
172 |
+
)
|
173 |
+
),
|
174 |
+
|
175 |
+
self::MODULE_BUDDY_PRESS => array(
|
176 |
+
'info' => array(
|
177 |
+
'ModuleId' => 10,
|
178 |
+
'IsLicensed' => true,
|
179 |
+
),
|
180 |
+
'classes' => array(
|
181 |
+
'GdbcBuddyPressAdminModule' => '/modules/buddy-press/GdbcBuddyPressAdminModule.php',
|
182 |
+
'GdbcBuddyPressPublicModule' => '/modules/buddy-press/GdbcBuddyPressPublicModule.php',
|
183 |
+
)
|
184 |
+
),
|
185 |
+
|
186 |
+
self::MODULE_BB_PRESS => array(
|
187 |
+
'info' => array(
|
188 |
+
'ModuleId' => 11,
|
189 |
+
'IsLicensed' => true,
|
190 |
+
),
|
191 |
+
'classes' => array(
|
192 |
+
'GdbcBbPressAdminModule' => '/modules/bb-press/GdbcBbPressAdminModule.php',
|
193 |
+
'GdbcBbPressPublicModule' => '/modules/bb-press/GdbcBbPressPublicModule.php',
|
194 |
+
)
|
195 |
+
),
|
196 |
+
|
197 |
+
self::MODULE_USER_PRO => array(
|
198 |
+
'info' => array(
|
199 |
+
'ModuleId' => 12,
|
200 |
+
'IsLicensed' => true,
|
201 |
+
),
|
202 |
+
'classes' => array(
|
203 |
+
'GdbcUserProAdminModule' => '/modules/user-pro/GdbcUserProAdminModule.php',
|
204 |
+
'GdbcUserProPublicModule' => '/modules/user-pro/GdbcUserProPublicModule.php',
|
205 |
+
)
|
206 |
+
),
|
207 |
+
|
208 |
+
self::MODULE_UPME => array(
|
209 |
+
'info' => array(
|
210 |
+
'ModuleId' => 13,
|
211 |
+
'IsLicensed' => true,
|
212 |
+
),
|
213 |
+
'classes' => array(
|
214 |
+
'GdbcUPMEAdminModule' => '/modules/upme/GdbcUPMEAdminModule.php',
|
215 |
+
'GdbcUPMEPublicModule' => '/modules/upme/GdbcUPMEPublicModule.php',
|
216 |
+
)
|
217 |
+
),
|
218 |
+
|
219 |
+
self::MODULE_MAIL_CHIMP_FOR_WP => array(
|
220 |
+
'info' => array(
|
221 |
+
'ModuleId' => 14,
|
222 |
+
'IsLicensed' => false,
|
223 |
+
),
|
224 |
+
'classes' => array(
|
225 |
+
'GdbcMailChimpForWpAdminModule' => '/modules/mc-for-wp/GdbcMailChimpForWpAdminModule.php',
|
226 |
+
'GdbcMailChimpForWpPublicModule' => '/modules/mc-for-wp/GdbcMailChimpForWpPublicModule.php',
|
227 |
+
)
|
228 |
+
),
|
229 |
+
|
230 |
+
self::MODULE_MAIL_POET => array(
|
231 |
+
'info' => array(
|
232 |
+
'ModuleId' => 15,
|
233 |
+
'IsLicensed' => true,
|
234 |
+
),
|
235 |
+
'classes' => array(
|
236 |
+
'GdbcMailPoetAdminModule' => '/modules/mail-poet/GdbcMailPoetAdminModule.php',
|
237 |
+
'GdbcMailPoetPublicModule' => '/modules/mail-poet/GdbcMailPoetPublicModule.php',
|
238 |
+
)
|
239 |
+
),
|
240 |
+
|
241 |
+
self::MODULE_WOOCOMMERCE => array(
|
242 |
+
'info' => array(
|
243 |
+
'ModuleId' => 16,
|
244 |
+
'IsLicensed' => true,
|
245 |
+
),
|
246 |
+
'classes' => array(
|
247 |
+
'GdbcWooCommerceAdminModule' => '/modules/woocommerce/GdbcWooCommerceAdminModule.php',
|
248 |
+
'GdbcWooCommercePublicModule' => '/modules/woocommerce/GdbcWooCommercePublicModule.php',
|
249 |
+
)
|
250 |
+
),
|
251 |
+
|
252 |
+
|
253 |
+
self::MODULE_REPORTS => array(
|
254 |
+
'info' => array(
|
255 |
+
'ModuleId' => 17,
|
256 |
+
'IsLicensed' => false,
|
257 |
+
),
|
258 |
+
'classes' => array(
|
259 |
+
'GdbcReportsAdminModule' => '/modules/reports/GdbcReportsAdminModule.php',
|
260 |
+
'GdbcReportsPublicModule' => '/modules/reports/GdbcReportsPublicModule.php',
|
261 |
+
),
|
262 |
+
),
|
263 |
+
|
264 |
+
self::MODULE_BRUTE_FORCE => array(
|
265 |
+
'info' => array(
|
266 |
+
'ModuleId' => 18,
|
267 |
+
'IsLicensed' => false,
|
268 |
+
),
|
269 |
+
'classes' => array(
|
270 |
+
'GdbcBruteForceAdminModule' => '/modules/brute-force/GdbcBruteForceAdminModule.php',
|
271 |
+
'GdbcBruteForcePublicModule' => '/modules/brute-force/GdbcBruteForcePublicModule.php',
|
272 |
+
),
|
273 |
+
),
|
274 |
+
|
275 |
+
self::MODULE_BLACK_LISTED_IPS => array(
|
276 |
+
'info' => array(
|
277 |
+
'ModuleId' => 19,
|
278 |
+
'IsLicensed' => false,
|
279 |
+
),
|
280 |
+
'classes' => array(
|
281 |
+
'GdbcBlackListedIpsAdminModule' => '/modules/black-listed-ips/GdbcBlackListedIpsAdminModule.php',
|
282 |
+
'GdbcBlackListedIpsPublicModule' => '/modules/black-listed-ips/GdbcBlackListedIpsPublicModule.php',
|
283 |
+
),
|
284 |
+
),
|
285 |
+
|
286 |
+
self::MODULE_WHITE_LISTED_IPS => array(
|
287 |
+
'info' => array(
|
288 |
+
'ModuleId' => 20,
|
289 |
+
'IsLicensed' => false,
|
290 |
+
),
|
291 |
+
'classes' => array(
|
292 |
+
'GdbcWhiteListedIpsAdminModule' => '/modules/white-listed-ips/GdbcWhiteListedIpsAdminModule.php',
|
293 |
+
'GdbcWhiteListedIpsPublicModule' => '/modules/white-listed-ips/GdbcWhiteListedIpsPublicModule.php',
|
294 |
+
),
|
295 |
+
),
|
296 |
+
|
297 |
+
self::MODULE_ZM_ALR => array(
|
298 |
+
'info' => array(
|
299 |
+
'ModuleId' => 21,
|
300 |
+
'IsLicensed' => false,
|
301 |
+
),
|
302 |
+
'classes' => array(
|
303 |
+
'GdbcZmAlrAdminModule' => '/modules/zm-ajax-login-register/GdbcZmAlrAdminModule.php',
|
304 |
+
'GdbcZmAlrPublicModule' => '/modules/zm-ajax-login-register/GdbcZmAlrPublicModule.php',
|
305 |
+
),
|
306 |
+
),
|
307 |
+
|
308 |
+
self::MODULE_SEAMLESS_DONATIONS => array(
|
309 |
+
'info' => array(
|
310 |
+
'ModuleId' => 22,
|
311 |
+
'IsLicensed' => false,
|
312 |
+
),
|
313 |
+
'classes' => array(
|
314 |
+
'GdbcSeamlessDonationsAdminModule' => '/modules/seamless-donations/GdbcSeamlessDonationsAdminModule.php',
|
315 |
+
'GdbcSeamlessDonationsPublicModule' => '/modules/seamless-donations/GdbcSeamlessDonationsPublicModule.php',
|
316 |
+
),
|
317 |
+
),
|
318 |
+
|
319 |
+
self::MODULE_WORDPRESS_TWEAKS => array(
|
320 |
+
'info' => array(
|
321 |
+
'ModuleId' => 23,
|
322 |
+
'IsLicensed' => false,
|
323 |
+
),
|
324 |
+
'classes' => array(
|
325 |
+
'GdbcWordPressTweaksAdminModule' => '/modules/wordpress-tweaks/GdbcWordPressTweaksAdminModule.php',
|
326 |
+
'GdbcWordPressTweaksPublicModule' => '/modules/wordpress-tweaks/GdbcWordPressTweaksPublicModule.php',
|
327 |
+
),
|
328 |
+
),
|
329 |
+
|
330 |
+
self::MODULE_EMAIL_NOTIFICATIONS => array(
|
331 |
+
'info' => array(
|
332 |
+
'ModuleId' => 24,
|
333 |
+
'IsLicensed' => false,
|
334 |
+
),
|
335 |
+
'classes' => array(
|
336 |
+
'GdbcEmailNotificationsAdminModule' => '/modules/email-notifications/GdbcEmailNotificationsAdminModule.php',
|
337 |
+
'GdbcEmailNotificationsPublicModule' => '/modules/email-notifications/GdbcEmailNotificationsPublicModule.php',
|
338 |
+
)
|
339 |
+
),
|
340 |
+
|
341 |
+
self::MODULE_PLANSO_FORMS => array(
|
342 |
+
'info' => array(
|
343 |
+
'ModuleId' => 25,
|
344 |
+
'IsLicensed' => false,
|
345 |
+
),
|
346 |
+
'classes' => array(
|
347 |
+
'GdbcPlanSoFormsAdminModule' => '/modules/planso-forms/GdbcPlanSoFormsAdminModule.php',
|
348 |
+
'GdbcPlanSoFormsPublicModule' => '/modules/planso-forms/GdbcPlanSoFormsPublicModule.php',
|
349 |
+
)
|
350 |
+
),
|
351 |
+
|
352 |
+
self::MODULE_LICENSES => array(
|
353 |
+
'info' => array(
|
354 |
+
'ModuleId' => 26,
|
355 |
+
'IsLicensed' => false,
|
356 |
+
),
|
357 |
+
'classes' => array(
|
358 |
+
'GdbcLicensesAdminModule' => '/modules/licenses/GdbcLicensesAdminModule.php',
|
359 |
+
'GdbcLicensesPublicModule' => '/modules/licenses/GdbcLicensesPublicModule.php',
|
360 |
+
)
|
361 |
+
),
|
362 |
+
|
363 |
+
self::MODULE_MEMBER_PRESS => array(
|
364 |
+
'info' => array(
|
365 |
+
'ModuleId' => 27,
|
366 |
+
'IsLicensed' => true,
|
367 |
+
),
|
368 |
+
'classes' => array(
|
369 |
+
'GdbcMemberPressAdminModule' => '/modules/member-press/GdbcMemberPressAdminModule.php',
|
370 |
+
'GdbcMemberPressPublicModule' => '/modules/member-press/GdbcMemberPressPublicModule.php',
|
371 |
+
)
|
372 |
+
),
|
373 |
+
|
374 |
+
self::MODULE_EASY_FORMS_FOR_MAILCHIMP => array(
|
375 |
+
'info' => array(
|
376 |
+
'ModuleId' => 28,
|
377 |
+
'IsLicensed' => true,
|
378 |
+
),
|
379 |
+
'classes' => array(
|
380 |
+
'GdbcEasyFormsForMailChimpAdminModule' => '/modules/easy-forms-for-mailchimp/GdbcEasyFormsForMailChimpAdminModule.php',
|
381 |
+
'GdbcEasyFormsForMailChimpPublicModule' => '/modules/easy-forms-for-mailchimp/GdbcEasyFormsForMailChimpPublicModule.php',
|
382 |
+
)
|
383 |
+
),
|
384 |
+
|
385 |
+
self::MODULE_COUNTRY_BLOCKING => array(
|
386 |
+
'info' => array(
|
387 |
+
'ModuleId' => 29,
|
388 |
+
'IsLicensed' => true,
|
389 |
+
),
|
390 |
+
'classes' => array(
|
391 |
+
'GdbcGeoIpCountryAdminModule' => '/modules/geo-ip-country/GdbcGeoIpCountryAdminModule.php',
|
392 |
+
'GdbcGeoIpCountryPublicModule' => '/modules/geo-ip-country/GdbcGeoIpCountryPublicModule.php',
|
393 |
+
)
|
394 |
+
),
|
395 |
+
|
396 |
+
self::MODULE_EASY_DIGITAL_DOWNLOADS => array(
|
397 |
+
'info' => array(
|
398 |
+
'ModuleId' => 30,
|
399 |
+
'IsLicensed' => true,
|
400 |
+
),
|
401 |
+
'classes' => array(
|
402 |
+
'GdbcEDDAdminModule' => '/modules/easy-digital-downloads/GdbcEDDAdminModule.php',
|
403 |
+
'GdbcEDDPublicModule' => '/modules/easy-digital-downloads/GdbcEDDPublicModule.php',
|
404 |
+
)
|
405 |
+
),
|
406 |
+
|
407 |
+
self::MODULE_AFFILIATE_WP => array(
|
408 |
+
'info' => array(
|
409 |
+
'ModuleId' => 31,
|
410 |
+
'IsLicensed' => true,
|
411 |
+
),
|
412 |
+
'classes' => array(
|
413 |
+
'GdbcAffiliateWPAdminModule' => '/modules/affiliate-wp/GdbcAffiliateWPAdminModule.php',
|
414 |
+
'GdbcAffiliateWPPublicModule' => '/modules/affiliate-wp/GdbcAffiliateWPPublicModule.php',
|
415 |
+
)
|
416 |
+
),
|
417 |
+
|
418 |
+
self::MODULE_QUFORM => array(
|
419 |
+
'info' => array(
|
420 |
+
'ModuleId' => 32,
|
421 |
+
'IsLicensed' => true,
|
422 |
+
),
|
423 |
+
'classes' => array(
|
424 |
+
'GdbcQuformAdminModule' => '/modules/quform/GdbcQuformAdminModule.php',
|
425 |
+
'GdbcQuformPublicModule' => '/modules/quform/GdbcQuformPublicModule.php',
|
426 |
+
)
|
427 |
+
),
|
428 |
+
|
429 |
+
self::MODULE_PROXY_HEADERS => array(
|
430 |
+
'info' => array(
|
431 |
+
'ModuleId' => 33,
|
432 |
+
'IsLicensed' => false,
|
433 |
+
),
|
434 |
+
'classes' => array(
|
435 |
+
'GdbcProxyHeadersAdminModule' => '/modules/proxy-headers/GdbcProxyHeadersAdminModule.php',
|
436 |
+
'GdbcProxyHeadersPublicModule' => '/modules/proxy-headers/GdbcProxyHeadersPublicModule.php',
|
437 |
+
)
|
438 |
+
),
|
439 |
+
|
440 |
+
);
|
441 |
+
|
442 |
+
|
443 |
+
public static function getModuleDisplayName($moduleName, $isForLicensing = false)
|
444 |
+
{
|
445 |
+
switch ($moduleName)
|
446 |
+
{
|
447 |
+
case self::MODULE_BRUTE_FORCE : return 'Brute Force';
|
448 |
+
case self::MODULE_BUDDY_PRESS : return 'BuddyPress';
|
449 |
+
case self::MODULE_CONTACT_FORM_7 : return 'Contact Form 7';
|
450 |
+
case self::MODULE_FAST_SECURE_FORM : return !$isForLicensing ? 'Fast Secure Form' : 'Fast Secure Contact Form';
|
451 |
+
case self::MODULE_FORMIDABLE_FORMS : return 'Formidable Forms';
|
452 |
+
case self::MODULE_GRAVITY_FORMS : return 'Gravity Forms';
|
453 |
+
case self::MODULE_JETPACK_CONTACT_FORM : return 'Jetpack Contact Form';
|
454 |
+
case self::MODULE_MAIL_CHIMP_FOR_WP : return 'MailChimp for WP';
|
455 |
+
case self::MODULE_MAIL_POET : return 'Mail Poet';
|
456 |
+
case self::MODULE_NINJA_FORMS : return 'Ninja Forms';
|
457 |
+
case self::MODULE_PLANSO_FORMS : return 'Planso Forms';
|
458 |
+
case self::MODULE_SEAMLESS_DONATIONS : return 'Seamless Donations';
|
459 |
+
case self::MODULE_ULTIMATE_MEMBER : return 'Ultimate Member';
|
460 |
+
case self::MODULE_USER_PRO : return 'UserPro';
|
461 |
+
case self::MODULE_EASY_FORMS_FOR_MAILCHIMP : return 'Easy Forms for MailChimp';
|
462 |
+
case self::MODULE_MEMBER_PRESS : return 'MemberPress';
|
463 |
+
case self::MODULE_UPME : return !$isForLicensing ? 'UPME' : 'User Profiles Made Easy';
|
464 |
+
case self::MODULE_EASY_DIGITAL_DOWNLOADS : return 'Easy Digital Downloads';
|
465 |
+
case self::MODULE_COUNTRY_BLOCKING : return 'Country Blocking';
|
466 |
+
|
467 |
+
}
|
468 |
+
|
469 |
+
return $moduleName;
|
470 |
+
}
|
471 |
+
|
472 |
+
|
473 |
+
public static function getRegisteredModules()
|
474 |
+
{
|
475 |
+
if(null === self::$arrRegisteredModules)
|
476 |
+
self::setRegisteredModules();
|
477 |
+
|
478 |
+
return self::$arrRegisteredModules;
|
479 |
+
}
|
480 |
+
|
481 |
+
private static function setRegisteredModules()
|
482 |
+
{
|
483 |
+
if(null !== self::$arrRegisteredModules)
|
484 |
+
return;
|
485 |
+
|
486 |
+
self::$arrRegisteredModules = array();
|
487 |
+
|
488 |
+
$activatedPlugins = defined('WP_PLUGIN_DIR') ? array_merge( array_flip((array) get_option( 'active_plugins', array())), (array) get_site_option( 'active_sitewide_plugins', array() ) ) : array(); // wp_get_mu_plugins()
|
489 |
+
|
490 |
+
if(defined('ABSPATH')){
|
491 |
+
unset($activatedPlugins[plugin_basename(GoodByeCaptcha::getMainFilePath())]); // un-setting the plugin itself
|
492 |
+
}
|
493 |
+
|
494 |
+
$engineDirPath = dirname(__FILE__) . DIRECTORY_SEPARATOR;
|
495 |
+
|
496 |
+
foreach(self::$arrAllModules as $moduleName => $arrModule)
|
497 |
+
{
|
498 |
+
self::$arrRegisteredModules[$moduleName] = array();
|
499 |
+
|
500 |
+
foreach ($arrModule['classes'] as $className => $filePath)
|
501 |
+
{
|
502 |
+
$filePath = $engineDirPath . ( $dirPath = trim( dirname($filePath) , '/\\' ) . DIRECTORY_SEPARATOR . basename($filePath) );
|
503 |
+
|
504 |
+
if(@file_exists($filePath)){
|
505 |
+
self::$arrRegisteredModules[$moduleName][$className] = $filePath;
|
506 |
+
continue;
|
507 |
+
}
|
508 |
+
|
509 |
+
foreach($activatedPlugins as $activePlugin => $value)
|
510 |
+
{
|
511 |
+
if( (false === strpos($activePlugin, GoodByeCaptcha::PLUGIN_SLUG)) && (false === strpos($activePlugin, "GoodByeCaptcha")) ){
|
512 |
+
unset($activatedPlugins[$activePlugin]);continue;
|
513 |
+
}
|
514 |
+
|
515 |
+
if(false === strpos($activePlugin, self::getModuleStandAloneDirectoryName($moduleName)))
|
516 |
+
continue;
|
517 |
+
|
518 |
+
$filePath = dirname(WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . MchGdbcUtils::stripLeftAndRightSlashes($activePlugin) ) . "/engine/$dirPath" ;
|
519 |
+
|
520 |
+
break;
|
521 |
+
}
|
522 |
+
|
523 |
+
if(@file_exists($filePath))
|
524 |
+
{
|
525 |
+
self::$arrRegisteredModules[$moduleName][$className] = $filePath;
|
526 |
+
continue;
|
527 |
+
}
|
528 |
+
|
529 |
+
# WPBruiser old extensions
|
530 |
+
foreach($activatedPlugins as $activePlugin => $value)
|
531 |
+
{
|
532 |
+
if(false === strpos($activePlugin, "GoodByeCaptcha$moduleName"))
|
533 |
+
continue;
|
534 |
+
|
535 |
+
$filePath = @dirname(WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $activePlugin ) . "/engine/$dirPath" ;
|
536 |
+
|
537 |
+
break;
|
538 |
+
}
|
539 |
+
|
540 |
+
@file_exists($filePath) ? self::$arrRegisteredModules[$moduleName][$className] = $filePath : null;
|
541 |
+
}
|
542 |
+
|
543 |
+
if(empty(self::$arrRegisteredModules[$moduleName]))
|
544 |
+
unset(self::$arrRegisteredModules[$moduleName]);
|
545 |
+
|
546 |
+
}
|
547 |
+
|
548 |
+
}
|
549 |
+
|
550 |
+
public static function getModuleStandAloneDirectoryName($moduleName)
|
551 |
+
{
|
552 |
+
return strtolower(GoodByeCaptcha::PLUGIN_SLUG . '-' . MchGdbcUtils::stripNonAlphaNumericCharacters($moduleName));
|
553 |
+
}
|
554 |
+
|
555 |
+
public static function getModuleStandAloneDirectoryPath($moduleName)
|
556 |
+
{
|
557 |
+
if(!self::isModuleRegistered($moduleName))
|
558 |
+
return null;
|
559 |
+
|
560 |
+
$moduleClassName = self::getModuleStandAloneClassName($moduleName);
|
561 |
+
if(!class_exists($moduleClassName))
|
562 |
+
{
|
563 |
+
if(!defined('WP_PLUGIN_DIR'))
|
564 |
+
return null;
|
565 |
+
|
566 |
+
return WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . self::getModuleStandAloneDirectoryName($moduleName);
|
567 |
+
}
|
568 |
+
|
569 |
+
$classReflector = new ReflectionClass($moduleClassName);
|
570 |
+
|
571 |
+
return dirname($classReflector->getFileName());
|
572 |
+
|
573 |
+
}
|
574 |
+
|
575 |
+
public static function getModuleStandAloneClassName($moduleName)
|
576 |
+
{
|
577 |
+
return MchGdbcUtils::stripNonAlphaNumericCharacters(GoodByeCaptcha::PLUGIN_NAME . $moduleName);
|
578 |
+
}
|
579 |
+
|
580 |
+
|
581 |
+
public static function getModuleIdByName($moduleName)
|
582 |
+
{
|
583 |
+
return isset(self::$arrAllModules[$moduleName]['info']['ModuleId']) ? self::$arrAllModules[$moduleName]['info']['ModuleId'] : null;
|
584 |
+
}
|
585 |
+
|
586 |
+
public static function isLicensedModule($moduleIdORmoduleName)
|
587 |
+
{
|
588 |
+
$moduleName = ((false === filter_var($moduleIdORmoduleName, FILTER_VALIDATE_INT)) ? $moduleIdORmoduleName : self::getModuleNameById($moduleIdORmoduleName));
|
589 |
+
|
590 |
+
return !empty(self::$arrAllModules[$moduleName]['info']['IsLicensed']);
|
591 |
+
}
|
592 |
+
|
593 |
+
public static function unRegisterModule($moduleName)
|
594 |
+
{
|
595 |
+
unset(self::$arrRegisteredModules[(string)$moduleName]);
|
596 |
+
}
|
597 |
+
|
598 |
+
public static function getNotLicensedModuleNames()
|
599 |
+
{
|
600 |
+
$arrFreeModules = array();
|
601 |
+
foreach(self::$arrAllModules as $moduleName => $arrAllModuleSettings){
|
602 |
+
empty(self::$arrAllModules[$moduleName]['info']['IsLicensed']) ? $arrFreeModules[] = $moduleName : null;
|
603 |
+
}
|
604 |
+
|
605 |
+
return $arrFreeModules;
|
606 |
+
}
|
607 |
+
|
608 |
+
public static function getLicensedModuleNames()
|
609 |
+
{
|
610 |
+
$arrModules = array();
|
611 |
+
foreach(self::$arrAllModules as $moduleName => $arrAllModuleSettings){
|
612 |
+
!empty(self::$arrAllModules[$moduleName]['info']['IsLicensed']) ? $arrModules[] = $moduleName : null;
|
613 |
+
}
|
614 |
+
|
615 |
+
return $arrModules;
|
616 |
+
}
|
617 |
+
|
618 |
+
public static function isModuleIncludedInProBundle($moduleName)
|
619 |
+
{
|
620 |
+
if(!self::isModuleRegistered($moduleName))
|
621 |
+
return false;
|
622 |
+
|
623 |
+
if(!self::isLicensedModule($moduleName))
|
624 |
+
return true;
|
625 |
+
|
626 |
+
if( GoodByeCaptcha::isProVersion() ) {
|
627 |
+
return 0 === strpos(self::getModuleDirectoryPath($moduleName), dirname(__FILE__));
|
628 |
+
}
|
629 |
+
|
630 |
+
return false;
|
631 |
+
}
|
632 |
+
|
633 |
+
public static function getModuleNameById($moduleId)
|
634 |
+
{
|
635 |
+
foreach(self::$arrAllModules as $moduleKey => $moduleValue)
|
636 |
+
{
|
637 |
+
if (isset($moduleValue['info']['ModuleId']) && $moduleValue['info']['ModuleId'] == $moduleId)
|
638 |
+
return $moduleKey;
|
639 |
+
}
|
640 |
+
|
641 |
+
return null;
|
642 |
+
}
|
643 |
+
|
644 |
+
public static function getModuleOptionDisplayText($moduleId, $optionId)
|
645 |
+
{
|
646 |
+
if(null === ($moduleAdminInstance = self::getAdminModuleInstance(self::getModuleNameById($moduleId))))
|
647 |
+
return null;
|
648 |
+
|
649 |
+
return $moduleAdminInstance->getOptionDisplayTextByOptionId($optionId);
|
650 |
+
}
|
651 |
+
|
652 |
+
public static function getModuleOptionId($moduleName, $optionName)
|
653 |
+
{
|
654 |
+
if(null === ($moduleAdminInstance = self::getAdminModuleInstance($moduleName)))
|
655 |
+
return null;
|
656 |
+
|
657 |
+
return $moduleAdminInstance->getOptionIdByOptionName($optionName);
|
658 |
+
}
|
659 |
+
|
660 |
+
public static function getModuleDirectoryPath($moduleName)
|
661 |
+
{
|
662 |
+
if(null === self::$arrRegisteredModules)
|
663 |
+
self::setRegisteredModules();
|
664 |
+
|
665 |
+
if(!isset(self::$arrRegisteredModules[$moduleName]) || !is_array(self::$arrRegisteredModules[$moduleName]))
|
666 |
+
return null;
|
667 |
+
|
668 |
+
return @dirname(reset(self::$arrRegisteredModules[$moduleName]));
|
669 |
+
}
|
670 |
+
|
671 |
+
/**
|
672 |
+
*
|
673 |
+
* @staticvar array $arrInstances
|
674 |
+
* @param string $moduleName
|
675 |
+
* @param int $moduleType
|
676 |
+
* @return \MchGdbcBaseModule | null
|
677 |
+
*/
|
678 |
+
private static function getModuleInstance($moduleName, $moduleType)
|
679 |
+
{
|
680 |
+
if(null === self::$arrRegisteredModules)
|
681 |
+
self::setRegisteredModules();
|
682 |
+
|
683 |
+
if(!isset(self::$arrRegisteredModules[$moduleName]))
|
684 |
+
return null;
|
685 |
+
|
686 |
+
foreach (self::$arrRegisteredModules[$moduleName] as $moduleClassName => $filePath)
|
687 |
+
{
|
688 |
+
if(1 === $moduleType && (false === strpos($moduleClassName, 'Admin')))
|
689 |
+
continue;
|
690 |
+
elseif(2 === $moduleType && (false === strpos($moduleClassName, 'Public')))
|
691 |
+
continue;
|
692 |
+
|
693 |
+
if(!method_exists($moduleClassName, 'getInstance'))
|
694 |
+
return null;
|
695 |
+
|
696 |
+
if(false !== ($moduleInstance = call_user_func(array($moduleClassName, 'getInstance'))))
|
697 |
+
return $moduleInstance;
|
698 |
+
}
|
699 |
+
|
700 |
+
return null;
|
701 |
+
}
|
702 |
+
|
703 |
+
/**
|
704 |
+
* @param string $moduleName Module name
|
705 |
+
*
|
706 |
+
* @return \GdbcBaseAdminModule|null
|
707 |
+
*/
|
708 |
+
public static function getAdminModuleInstance($moduleName)
|
709 |
+
{
|
710 |
+
return self::getModuleInstance($moduleName, 1);
|
711 |
+
}
|
712 |
+
|
713 |
+
/**
|
714 |
+
* @param string $moduleName Module name
|
715 |
+
*
|
716 |
+
* @return \MchGdbcBasePublicModule|null
|
717 |
+
*/
|
718 |
+
public static function getPublicModuleInstance($moduleName)
|
719 |
+
{
|
720 |
+
return self::getModuleInstance($moduleName, 2);
|
721 |
+
}
|
722 |
+
|
723 |
+
/**
|
724 |
+
* @param $moduleName string Module name
|
725 |
+
*
|
726 |
+
* @return bool
|
727 |
+
*/
|
728 |
+
public static function isModuleRegistered($moduleName)
|
729 |
+
{
|
730 |
+
if(null === self::$arrRegisteredModules)
|
731 |
+
self::setRegisteredModules();
|
732 |
+
|
733 |
+
return isset(self::$arrRegisteredModules[$moduleName]);
|
734 |
+
}
|
735 |
+
|
736 |
+
public static function autoLoadModulesClasses($moduleClassName)
|
737 |
+
{
|
738 |
+
if( !isset($moduleClassName[15]) || 'Gdbc' !== substr($moduleClassName, 0, 4) )
|
739 |
+
return;
|
740 |
+
|
741 |
+
if(null === self::$arrRegisteredModules)
|
742 |
+
self::setRegisteredModules();
|
743 |
+
|
744 |
+
foreach(self::$arrRegisteredModules as $arrModuleClasses)
|
745 |
+
{
|
746 |
+
if(!isset($arrModuleClasses[$moduleClassName]))
|
747 |
+
continue;
|
748 |
+
|
749 |
+
return require_once($arrModuleClasses[$moduleClassName]);
|
750 |
+
}
|
751 |
+
|
752 |
+
}
|
753 |
+
|
754 |
+
}
|
3.0.14/engine/GdbcNotificationsController.php
ADDED
@@ -0,0 +1,154 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (C) 2014 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
final class GdbcNotificationsController
|
21 |
+
{
|
22 |
+
|
23 |
+
|
24 |
+
public static function sendTestModeEmailNotification(GdbcAttemptEntity $gdbcAttemptEntity)
|
25 |
+
{
|
26 |
+
GdbcEmailNotificationsPublicModule::getInstance()->EmailSubject = __('WPBruiser - Test Mode Notification', GoodByeCaptcha::PLUGIN_SLUG);
|
27 |
+
|
28 |
+
$clientIpAddress = GdbcIPUtils::getClientIpAddress();
|
29 |
+
$currentSiteLink = MchGdbcWpUtils::getCurrentBlogLink();
|
30 |
+
$adminFullName = MchGdbcWpUtils::getAdminFullName();
|
31 |
+
empty($adminFullName) ? $adminFullName = MchGdbcWpUtils::getAdminDisplayName() : null;
|
32 |
+
|
33 |
+
$submittedForm = GdbcModulesController::getModuleNameById($gdbcAttemptEntity->ModuleId);
|
34 |
+
$submittedForm .= empty($gdbcAttemptEntity->SectionId) ? '' : '/' . GdbcModulesController::getModuleOptionDisplayText($gdbcAttemptEntity->ModuleId, $gdbcAttemptEntity->SectionId);
|
35 |
+
|
36 |
+
$rejectReason = GdbcRequestController::tokenAlreadyRejected() ? GdbcRequestController::getRejectReasonDescription(GdbcRequestController::getRejectReasonId()) : null;
|
37 |
+
|
38 |
+
$moduleDirPath = GdbcModulesController::getModuleDirectoryPath(GdbcModulesController::MODULE_EMAIL_NOTIFICATIONS);
|
39 |
+
|
40 |
+
if(empty($moduleDirPath))
|
41 |
+
{
|
42 |
+
GdbcEmailNotificationsPublicModule::getInstance()->EmailBodyContent = __('WPBruiser encountered an error while trying to parse the email template!', GoodByeCaptcha::PLUGIN_SLUG);
|
43 |
+
}
|
44 |
+
else
|
45 |
+
{
|
46 |
+
ob_start();
|
47 |
+
require_once ($moduleDirPath . '/templates/notification-test-mode.php');
|
48 |
+
GdbcEmailNotificationsPublicModule::getInstance()->EmailBodyContent = ob_get_clean() . "\n";
|
49 |
+
}
|
50 |
+
|
51 |
+
GdbcEmailNotificationsPublicModule::getInstance()->send(true);
|
52 |
+
|
53 |
+
}
|
54 |
+
|
55 |
+
public static function sendBruteForceAttackDetectedEmailNotification(array $arrLoginAttempts)
|
56 |
+
{
|
57 |
+
|
58 |
+
if( ! GdbcEmailNotificationsPublicModule::getInstance()->getOption(GdbcEmailNotificationsAdminModule::OPTION_BRUTE_FORCE_ATTACK_DETECTED) )
|
59 |
+
return;
|
60 |
+
|
61 |
+
GdbcEmailNotificationsPublicModule::getInstance()->EmailSubject = __('Alert - Brute Force Attack Detected by WPBruiser!', GoodByeCaptcha::PLUGIN_SLUG);
|
62 |
+
|
63 |
+
$adminFullName = MchGdbcWpUtils::getAdminFullName();
|
64 |
+
empty($adminFullName) ? $adminFullName = MchGdbcWpUtils::getAdminDisplayName() : null;
|
65 |
+
|
66 |
+
$totalHits = 0;
|
67 |
+
$totalIPs = 0;
|
68 |
+
$totalProxyAnonym = 0;
|
69 |
+
$totalWebAttackers = 0;
|
70 |
+
$totalBlackListed = 0;
|
71 |
+
|
72 |
+
$detectedDate = get_date_from_gmt ( date( 'Y-m-d H:i:s', MchGdbcHttpRequest::getServerRequestTime() ), 'l, F d, Y');
|
73 |
+
$detectedTime = get_date_from_gmt ( date( 'Y-m-d H:i:s', MchGdbcHttpRequest::getServerRequestTime() ), 'H:i:s');
|
74 |
+
|
75 |
+
foreach($arrLoginAttempts as $clientIp => $hits)
|
76 |
+
{
|
77 |
+
$totalHits += $hits;
|
78 |
+
$totalIPs++;
|
79 |
+
|
80 |
+
$loginAttempt = new stdClass();
|
81 |
+
$loginAttempt->IsIpBlackListed = GdbcIPUtils::isIpBlackListed($clientIp);
|
82 |
+
$loginAttempt->IsIpProxyAnonym = GdbcIPUtils::isIpProxyAnonymizer($clientIp);
|
83 |
+
$loginAttempt->IsIpWebAttacker = GdbcIPUtils::isIpWebAttacker($clientIp);
|
84 |
+
|
85 |
+
|
86 |
+
$totalBlackListed += $loginAttempt->IsIpBlackListed ? 1 : 0;
|
87 |
+
$totalWebAttackers += $loginAttempt->IsIpWebAttacker ? 1 : 0;
|
88 |
+
$totalProxyAnonym += ($loginAttempt->IsIpProxyAnonym && !$loginAttempt->IsIpWebAttacker) ? 1 : 0;
|
89 |
+
}
|
90 |
+
|
91 |
+
if( 0 === $totalIPs )
|
92 |
+
return;
|
93 |
+
|
94 |
+
$totalBlackListed = $totalBlackListed . ' (' . number_format( 100 - ( ($totalIPs - $totalBlackListed) * (100 / $totalIPs) ), 2, '.', '' ) . '%)';
|
95 |
+
$totalWebAttackers = $totalWebAttackers . ' (' . number_format( 100 - ( ($totalIPs - $totalWebAttackers) * (100 / $totalIPs) ), 2, '.', '' ) . '%)';
|
96 |
+
$totalProxyAnonym = $totalProxyAnonym . ' (' . number_format( 100 - ( ($totalIPs - $totalProxyAnonym) * (100 / $totalIPs) ), 2, '.', '' ) . '%)';
|
97 |
+
|
98 |
+
$arrReplaceableContent = array(
|
99 |
+
|
100 |
+
'{current-site-link}' => MchGdbcWpUtils::getCurrentBlogLink(),
|
101 |
+
'{admin-full-name}' => $adminFullName,
|
102 |
+
'{total-hits}' => $totalHits,
|
103 |
+
'{total-ips}' => $totalIPs,
|
104 |
+
'{total-black-listed}' => $totalBlackListed,
|
105 |
+
'{total-web-attackers}' => $totalWebAttackers,
|
106 |
+
'{total-proxy-anonymizers}' => $totalProxyAnonym,
|
107 |
+
'{detection-date-time}' => $detectedDate . ' at ' . $detectedTime,
|
108 |
+
);
|
109 |
+
|
110 |
+
$arrSuggestions = array(
|
111 |
+
GdbcBruteForceAdminModule::OPTION_AUTO_BLOCK_IP => GdbcBruteForceAdminModule::getInstance()->getOption(GdbcBruteForceAdminModule::OPTION_AUTO_BLOCK_IP),
|
112 |
+
GdbcBruteForceAdminModule::OPTION_BLOCK_WEB_ATTACKERS => GdbcBruteForceAdminModule::getInstance()->getOption(GdbcBruteForceAdminModule::OPTION_BLOCK_WEB_ATTACKERS),
|
113 |
+
GdbcBruteForceAdminModule::OPTION_BLOCK_ANONYMOUS_PROXY => GdbcBruteForceAdminModule::getInstance()->getOption(GdbcBruteForceAdminModule::OPTION_BLOCK_ANONYMOUS_PROXY),
|
114 |
+
);
|
115 |
+
|
116 |
+
foreach($arrSuggestions as $optionName => &$optionInfo)
|
117 |
+
{
|
118 |
+
if(!empty($optionInfo))
|
119 |
+
{
|
120 |
+
unset($arrSuggestions[$optionName]);
|
121 |
+
continue;
|
122 |
+
}
|
123 |
+
|
124 |
+
|
125 |
+
$arrDefaultOptions = GdbcBruteForceAdminModule::getInstance()->getDefaultOptions();
|
126 |
+
if(!isset($arrDefaultOptions[$optionName]['LabelText']))
|
127 |
+
continue;
|
128 |
+
|
129 |
+
$optionInfo = $arrDefaultOptions[$optionName]['LabelText'];
|
130 |
+
}
|
131 |
+
|
132 |
+
$moduleDirPath = GdbcModulesController::getModuleDirectoryPath(GdbcModulesController::MODULE_EMAIL_NOTIFICATIONS);
|
133 |
+
if(empty($moduleDirPath))
|
134 |
+
{
|
135 |
+
GdbcEmailNotificationsPublicModule::getInstance()->EmailBodyContent = __("Brute Force attack detected on " . MchGdbcWpUtils::getCurrentBlogLink(), GoodByeCaptcha::PLUGIN_SLUG);
|
136 |
+
}
|
137 |
+
else
|
138 |
+
{
|
139 |
+
ob_start();
|
140 |
+
require_once ($moduleDirPath . '/templates/notification-brute-force-attack.php');
|
141 |
+
$emailContent = ob_get_clean();
|
142 |
+
|
143 |
+
$emailContent = str_replace(array_keys($arrReplaceableContent), array_values($arrReplaceableContent), $emailContent);
|
144 |
+
|
145 |
+
GdbcEmailNotificationsPublicModule::getInstance()->EmailBodyContent = $emailContent;
|
146 |
+
}
|
147 |
+
|
148 |
+
unset($emailContent, $arrLoginAttempts, $moduleDirPath, $totalHits, $totalIPs, $totalProxyAnonym, $totalWebAttackers);
|
149 |
+
|
150 |
+
GdbcEmailNotificationsPublicModule::getInstance()->send(true);
|
151 |
+
|
152 |
+
}
|
153 |
+
|
154 |
+
}
|
3.0.14/engine/GdbcRequestController.php
ADDED
@@ -0,0 +1,294 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* Copyright (C) 2014 Mihai Chelaru
|
5 |
+
*
|
6 |
+
* This program is free software; you can redistribute it and/or
|
7 |
+
* modify it under the terms of the GNU General Public License
|
8 |
+
* as published by the Free Software Foundation; either version 2
|
9 |
+
* of the License, or (at your option) any later version.
|
10 |
+
*
|
11 |
+
* This program is distributed in the hope that it will be useful,
|
12 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14 |
+
* GNU General Public License for more details.
|
15 |
+
*
|
16 |
+
* You should have received a copy of the GNU General Public License
|
17 |
+
* along with this program; if not, write to the Free Software
|
18 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
19 |
+
*/
|
20 |
+
|
21 |
+
final class GdbcRequestController
|
22 |
+
{
|
23 |
+
|
24 |
+
CONST TOKEN_SEPARATOR = '|';
|
25 |
+
|
26 |
+
CONST REJECT_REASON_TOKEN_INVALID = 1;
|
27 |
+
CONST REJECT_REASON_TOKEN_MISSING = 2;
|
28 |
+
CONST REJECT_REASON_TOKEN_EXPIRED = 3;
|
29 |
+
CONST REJECT_REASON_TOKEN_SUBMITTED_EARLY = 4;
|
30 |
+
CONST REJECT_REASON_CLIENT_IP_BLOCKED = 5;
|
31 |
+
CONST REJECT_REASON_BROWSER_INFO_MISSING = 6;
|
32 |
+
CONST REJECT_REASON_BROWSER_INFO_INVALID = 7;
|
33 |
+
CONST REJECT_REASON_CLIENT_IP_UNDETECTABLE = 8;
|
34 |
+
CONST REJECT_REASON_USER_ENUMERATION = 9;
|
35 |
+
CONST REJECT_REASON_PROXY_ANONYMIZER = 10;
|
36 |
+
CONST REJECT_REASON_WEB_ATTACKER = 11;
|
37 |
+
CONST REJECT_REASON_SERVICE_UNAVAILABLE = 12;
|
38 |
+
//CONST REJECT_REASON_LINK_NOTIFICATION = 13; // used for trackbacks and pingbacks
|
39 |
+
CONST REJECT_REASON_COMMENT_FIELD_TOO_LONG = 14;
|
40 |
+
CONST REJECT_REASON_COUNTRY_IP_BLOCKED = 15;
|
41 |
+
|
42 |
+
private static $rejectReasonCode = null;
|
43 |
+
private static $browserInfoInputName = null;
|
44 |
+
|
45 |
+
public static function isValid(GdbcAttemptEntity $attemptEntity)
|
46 |
+
{
|
47 |
+
static $isRequestValid = null;
|
48 |
+
|
49 |
+
if(null !== $isRequestValid)
|
50 |
+
return $isRequestValid;
|
51 |
+
|
52 |
+
$settingsModuleInstance = GdbcModulesController::getPublicModuleInstance(GdbcModulesController::MODULE_SETTINGS);
|
53 |
+
if(null === $settingsModuleInstance)
|
54 |
+
return $isRequestValid = false;
|
55 |
+
|
56 |
+
$isTestModeActivated = (bool)$settingsModuleInstance->getOption(GdbcSettingsAdminModule::OPTION_TEST_MODE_ACTIVATED);
|
57 |
+
|
58 |
+
if( (!$isTestModeActivated) && GdbcIPUtils::isClientIpWhiteListed())
|
59 |
+
return $isRequestValid = true;
|
60 |
+
|
61 |
+
if( self::isReceivedTokenValid($attemptEntity) && GdbcIPUtils::isClientIpBlackListed()){
|
62 |
+
self::$rejectReasonCode = self::REJECT_REASON_CLIENT_IP_BLOCKED;
|
63 |
+
}
|
64 |
+
|
65 |
+
if((null === self::$rejectReasonCode) && GdbcIPUtils::isClientIpBlockedByCountry()){
|
66 |
+
self::$rejectReasonCode = self::REJECT_REASON_COUNTRY_IP_BLOCKED;
|
67 |
+
}
|
68 |
+
|
69 |
+
if( (null === self::$rejectReasonCode) && GoodByeCaptchaUtils::isLoginAttemptEntity($attemptEntity))
|
70 |
+
{
|
71 |
+
if ( GdbcIPUtils::isClientIpWebAttacker() ) {
|
72 |
+
self::$rejectReasonCode = self::REJECT_REASON_WEB_ATTACKER;
|
73 |
+
}
|
74 |
+
elseif ( GdbcIPUtils::isClientIpProxyAnonymizer() ) {
|
75 |
+
self::$rejectReasonCode = self::REJECT_REASON_PROXY_ANONYMIZER;
|
76 |
+
}
|
77 |
+
}
|
78 |
+
|
79 |
+
|
80 |
+
if($isTestModeActivated){
|
81 |
+
GdbcNotificationsController::sendTestModeEmailNotification($attemptEntity);
|
82 |
+
self::$rejectReasonCode = null;
|
83 |
+
}
|
84 |
+
|
85 |
+
if(null === self::$rejectReasonCode){
|
86 |
+
return $isRequestValid = true;
|
87 |
+
}
|
88 |
+
|
89 |
+
$attemptEntity->ReasonId = self::getRejectReasonId();
|
90 |
+
GdbcBruteGuardian::logRejectedAttempt($attemptEntity);
|
91 |
+
|
92 |
+
return $isRequestValid = false;
|
93 |
+
|
94 |
+
}
|
95 |
+
|
96 |
+
|
97 |
+
private static function isReceivedTokenValid(GdbcAttemptEntity $attemptEntity)
|
98 |
+
{
|
99 |
+
if(self::$rejectReasonCode !== null) {
|
100 |
+
return false;
|
101 |
+
}
|
102 |
+
|
103 |
+
$settingsModuleInstance = GdbcModulesController::getPublicModuleInstance(GdbcModulesController::MODULE_SETTINGS);
|
104 |
+
if(null === $settingsModuleInstance)
|
105 |
+
return false;
|
106 |
+
|
107 |
+
$tokenSecretKey = $settingsModuleInstance->getOption(GdbcSettingsAdminModule::OPTION_TOKEN_SECRET_KEY);
|
108 |
+
$hiddenInputName = $settingsModuleInstance->getOption(GdbcSettingsAdminModule::OPTION_HIDDEN_INPUT_NAME);
|
109 |
+
|
110 |
+
$minSubmissionTime = $settingsModuleInstance->getOption(GdbcSettingsAdminModule::OPTION_MIN_SUBMISSION_TIME);
|
111 |
+
|
112 |
+
$isProtectionDisabled = ((bool)$settingsModuleInstance->getOption(GdbcSettingsAdminModule::OPTION_DISABLE_IF_USER_LOGGED_IN)) && MchGdbcWpUtils::isUserLoggedIn();
|
113 |
+
if($isProtectionDisabled) {
|
114 |
+
return true;
|
115 |
+
}
|
116 |
+
|
117 |
+
if(null === GdbcIPUtils::getClientIpAddress())
|
118 |
+
{
|
119 |
+
self::$rejectReasonCode = self::REJECT_REASON_CLIENT_IP_UNDETECTABLE;
|
120 |
+
return false;
|
121 |
+
}
|
122 |
+
|
123 |
+
$receivedToken = isset($_POST[$hiddenInputName]) ? $_POST[$hiddenInputName] : null;
|
124 |
+
|
125 |
+
if(null === $receivedToken){
|
126 |
+
self::$rejectReasonCode = self::REJECT_REASON_TOKEN_MISSING;
|
127 |
+
return false;
|
128 |
+
}
|
129 |
+
|
130 |
+
if(!isset($receivedToken[10])) {
|
131 |
+
self::$rejectReasonCode = self::REJECT_REASON_TOKEN_INVALID;
|
132 |
+
return false;
|
133 |
+
}
|
134 |
+
|
135 |
+
|
136 |
+
$arrDecryptedToken = json_decode(MchCrypt::decryptToken($tokenSecretKey, $receivedToken), true);
|
137 |
+
|
138 |
+
if( !isset($arrDecryptedToken[0]) || false === ($tokenIndex = strpos($arrDecryptedToken[0], self::TOKEN_SEPARATOR)) )
|
139 |
+
{
|
140 |
+
self::$rejectReasonCode = self::REJECT_REASON_TOKEN_INVALID;
|
141 |
+
return false;
|
142 |
+
}
|
143 |
+
|
144 |
+
self::$browserInfoInputName = substr($arrDecryptedToken[0], 0, $tokenIndex);
|
145 |
+
|
146 |
+
$receivedBrowserInfoInput = isset($_POST[self::$browserInfoInputName]) ? $_POST[self::$browserInfoInputName] : null;
|
147 |
+
|
148 |
+
if( null === $receivedBrowserInfoInput )
|
149 |
+
{
|
150 |
+
self::$rejectReasonCode = self::REJECT_REASON_BROWSER_INFO_MISSING;
|
151 |
+
return false;
|
152 |
+
}
|
153 |
+
|
154 |
+
$receivedBrowserInfoInput = MchGdbcUtils::replaceNonAlphaNumericCharacters($receivedBrowserInfoInput, '');
|
155 |
+
|
156 |
+
if($arrDecryptedToken[0] !== self::$browserInfoInputName . self::TOKEN_SEPARATOR . $receivedBrowserInfoInput)
|
157 |
+
{
|
158 |
+
self::$rejectReasonCode = self::REJECT_REASON_BROWSER_INFO_INVALID;
|
159 |
+
return false;
|
160 |
+
}
|
161 |
+
|
162 |
+
array_shift($arrDecryptedToken);
|
163 |
+
|
164 |
+
$arrTokenData = self::getTokenData();
|
165 |
+
|
166 |
+
$timeSinceGenerated = ((int)array_pop($arrTokenData)) - ((int)array_pop($arrDecryptedToken));
|
167 |
+
if($timeSinceGenerated < $minSubmissionTime)
|
168 |
+
{
|
169 |
+
if( ! GoodByeCaptchaUtils::isLoginAttemptEntity($attemptEntity) ){
|
170 |
+
self::$rejectReasonCode = self::REJECT_REASON_TOKEN_SUBMITTED_EARLY;
|
171 |
+
return false;
|
172 |
+
}
|
173 |
+
}
|
174 |
+
|
175 |
+
if(count(array_diff($arrDecryptedToken, $arrTokenData)) !== 0)
|
176 |
+
{
|
177 |
+
self::$rejectReasonCode = self::REJECT_REASON_TOKEN_INVALID;
|
178 |
+
return false;
|
179 |
+
}
|
180 |
+
|
181 |
+
unset($_POST[self::$browserInfoInputName], $_POST[$hiddenInputName]);
|
182 |
+
|
183 |
+
global $ultimatemember;
|
184 |
+
|
185 |
+
if(isset($ultimatemember->form))
|
186 |
+
{
|
187 |
+
unset($ultimatemember->form->post_form[self::$browserInfoInputName], $ultimatemember->form->post_form[$hiddenInputName]);
|
188 |
+
unset($ultimatemember->form->post_form['submitted'][self::$browserInfoInputName], $ultimatemember->form->post_form['submitted'][$hiddenInputName]);
|
189 |
+
}
|
190 |
+
|
191 |
+
return true;
|
192 |
+
|
193 |
+
}
|
194 |
+
|
195 |
+
|
196 |
+
public static function getEncryptedToken()
|
197 |
+
{
|
198 |
+
if( ! isset($_POST['browserInfo']) || null === ($arrBrowserInfo = json_decode(stripcslashes($_POST['browserInfo']), true)))
|
199 |
+
return array();
|
200 |
+
|
201 |
+
foreach ((array)$arrBrowserInfo as $prop => $propValue)
|
202 |
+
{
|
203 |
+
if(!is_array($propValue) && false === strpos($prop, ' '))
|
204 |
+
continue;
|
205 |
+
|
206 |
+
unset($arrBrowserInfo[$prop]);
|
207 |
+
}
|
208 |
+
|
209 |
+
if( ($arrBrowserInfoLength = count($arrBrowserInfo)) < 3)
|
210 |
+
return array();
|
211 |
+
|
212 |
+
$arrKeysToSave = array_flip((array)array_rand($arrBrowserInfo, mt_rand(3, $arrBrowserInfoLength - 1)));
|
213 |
+
|
214 |
+
foreach ($arrKeysToSave as $key => &$val)
|
215 |
+
{
|
216 |
+
$val = var_export($arrBrowserInfo[$key], true);
|
217 |
+
}
|
218 |
+
|
219 |
+
$arrTokenData = self::getTokenData();
|
220 |
+
$browserField = MchGdbcUtils::replaceNonAlphaCharacters(MchCrypt::getRandomString(25), '-');
|
221 |
+
|
222 |
+
array_unshift($arrTokenData, $browserField . self::TOKEN_SEPARATOR . MchGdbcUtils::replaceNonAlphaNumericCharacters(implode('', array_values($arrKeysToSave)), ''));
|
223 |
+
|
224 |
+
return array(
|
225 |
+
'token' => MchCrypt::encryptToken(GdbcSettingsPublicModule::getInstance()->getOption(GdbcSettingsAdminModule::OPTION_TOKEN_SECRET_KEY), json_encode($arrTokenData)),
|
226 |
+
$browserField => implode(self::TOKEN_SEPARATOR, array_keys($arrKeysToSave))
|
227 |
+
);
|
228 |
+
|
229 |
+
}
|
230 |
+
|
231 |
+
|
232 |
+
private static function getTokenData()
|
233 |
+
{
|
234 |
+
$arrData = array();
|
235 |
+
|
236 |
+
$arrData[] = get_current_blog_id();
|
237 |
+
//$arrData[] = GdbcIPUtils::getClientIpAddress();
|
238 |
+
$arrData[] = GdbcSettingsPublicModule::getInstance()->getOption(GdbcSettingsAdminModule::OPTION_TOKEN_CREATED_TIMESTAMP);
|
239 |
+
$arrData[] = MchGdbcHttpRequest::getServerRequestTime();
|
240 |
+
|
241 |
+
return array_filter($arrData);
|
242 |
+
}
|
243 |
+
|
244 |
+
public static function tokenAlreadyRejected()
|
245 |
+
{
|
246 |
+
return null !== self::$rejectReasonCode;
|
247 |
+
}
|
248 |
+
|
249 |
+
public static function getRejectReasonId()
|
250 |
+
{
|
251 |
+
return self::$rejectReasonCode;
|
252 |
+
}
|
253 |
+
|
254 |
+
public static function getRejectReasonDescription($reasonId)
|
255 |
+
{
|
256 |
+
static $arrReasonDescription = null;
|
257 |
+
if(null === $arrReasonDescription)
|
258 |
+
{
|
259 |
+
$arrReasonDescription = array(
|
260 |
+
|
261 |
+
self::REJECT_REASON_TOKEN_INVALID => __('Invalid Token', GoodByeCaptcha::PLUGIN_SLUG),
|
262 |
+
self::REJECT_REASON_TOKEN_MISSING => __('Token Not Submitted', GoodByeCaptcha::PLUGIN_SLUG),
|
263 |
+
self::REJECT_REASON_TOKEN_EXPIRED => __('Token Expired', GoodByeCaptcha::PLUGIN_SLUG),
|
264 |
+
self::REJECT_REASON_TOKEN_SUBMITTED_EARLY => __('Token Submitted Early', GoodByeCaptcha::PLUGIN_SLUG),
|
265 |
+
self::REJECT_REASON_CLIENT_IP_BLOCKED => __('Client IP Blocked', GoodByeCaptcha::PLUGIN_SLUG),
|
266 |
+
self::REJECT_REASON_BROWSER_INFO_MISSING => __('Browser Info Missing', GoodByeCaptcha::PLUGIN_SLUG),
|
267 |
+
self::REJECT_REASON_BROWSER_INFO_INVALID => __('Browser Info Invalid', GoodByeCaptcha::PLUGIN_SLUG),
|
268 |
+
self::REJECT_REASON_CLIENT_IP_UNDETECTABLE => __('Undetectable Client IP', GoodByeCaptcha::PLUGIN_SLUG),
|
269 |
+
self::REJECT_REASON_USER_ENUMERATION => __('User Enumeration', GoodByeCaptcha::PLUGIN_SLUG),
|
270 |
+
self::REJECT_REASON_PROXY_ANONYMIZER => __('Proxy Anonymizer', GoodByeCaptcha::PLUGIN_SLUG),
|
271 |
+
self::REJECT_REASON_WEB_ATTACKER => __('Web Attacker', GoodByeCaptcha::PLUGIN_SLUG),
|
272 |
+
self::REJECT_REASON_SERVICE_UNAVAILABLE => __('Service Unavailable', GoodByeCaptcha::PLUGIN_SLUG),
|
273 |
+
//self::REJECT_REASON_LINK_NOTIFICATION => __('Link Notification', GoodByeCaptcha::PLUGIN_SLUG),
|
274 |
+
self::REJECT_REASON_COMMENT_FIELD_TOO_LONG => __('Comment Field Too Long', GoodByeCaptcha::PLUGIN_SLUG),
|
275 |
+
self::REJECT_REASON_COUNTRY_IP_BLOCKED => __('Blocked Country', GoodByeCaptcha::PLUGIN_SLUG),
|
276 |
+
);
|
277 |
+
}
|
278 |
+
|
279 |
+
return isset($arrReasonDescription[$reasonId]) ? $arrReasonDescription[$reasonId] : __('Unknown', GoodByeCaptcha::PLUGIN_SLUG);
|
280 |
+
|
281 |
+
}
|
282 |
+
|
283 |
+
|
284 |
+
public static function getPostedBrowserInfoInputName()
|
285 |
+
{
|
286 |
+
return self::$browserInfoInputName;
|
287 |
+
}
|
288 |
+
|
289 |
+
public static function redirectToHomePage()
|
290 |
+
{
|
291 |
+
wp_redirect( home_url() ); exit;
|
292 |
+
}
|
293 |
+
|
294 |
+
}
|
3.0.14/engine/GdbcTaskScheduler.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (C) 2015 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
final class GdbcTaskScheduler
|
21 |
+
{
|
22 |
+
private static function getGdbcTasks()
|
23 |
+
{
|
24 |
+
return array(
|
25 |
+
new GdbcLogsCleanerTask(MchGdbcWpTaskScheduler::SECONDS_IN_DAY, true),
|
26 |
+
);
|
27 |
+
|
28 |
+
// static $arrGdbcTasks = array();
|
29 |
+
// if(!empty($arrGdbcTasks))
|
30 |
+
// return $arrGdbcTasks;
|
31 |
+
//
|
32 |
+
// $arrGdbcTasks[] = new GdbcLogsCleanerTask(MchGdbcWpTaskScheduler::SECONDS_IN_DAY, true);
|
33 |
+
//
|
34 |
+
// return $arrGdbcTasks;
|
35 |
+
}
|
36 |
+
|
37 |
+
public static function scheduleGdbcTasks()
|
38 |
+
{
|
39 |
+
foreach(self::getGdbcTasks() as $gdbcTask)
|
40 |
+
{
|
41 |
+
MchGdbcWpTaskScheduler::getInstance()->registerTask($gdbcTask);
|
42 |
+
}
|
43 |
+
|
44 |
+
MchGdbcWpTaskScheduler::getInstance()->scheduleRegisteredTasks();
|
45 |
+
}
|
46 |
+
|
47 |
+
public static function unScheduleGdbcTasks()
|
48 |
+
{
|
49 |
+
foreach(self::getGdbcTasks() as $gdbcTask)
|
50 |
+
{
|
51 |
+
MchGdbcWpTaskScheduler::getInstance()->registerTask($gdbcTask);
|
52 |
+
MchGdbcWpTaskScheduler::getInstance()->unScheduleRegisteredTask($gdbcTask);
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
private function __construct(){}
|
57 |
+
private function __clone(){}
|
58 |
+
}
|
3.0.14/engine/GdbcUpdatesController.php
ADDED
@@ -0,0 +1,360 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (C) 2015 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
final class GdbcUpdatesController
|
21 |
+
{
|
22 |
+
public static function updateToCurrentVersion()
|
23 |
+
{
|
24 |
+
|
25 |
+
if(null === ($settingsModuleInstance = GdbcModulesController::getAdminModuleInstance(GdbcModulesController::MODULE_SETTINGS)))
|
26 |
+
return;
|
27 |
+
|
28 |
+
$savedPluginVersion = $settingsModuleInstance->getOption(GdbcSettingsAdminModule::OPTION_PLUGIN_VERSION);
|
29 |
+
|
30 |
+
if(null === $savedPluginVersion) // fresh install. Save default options
|
31 |
+
{
|
32 |
+
foreach(array_keys(GdbcModulesController::getRegisteredModules()) as $moduleName)
|
33 |
+
{
|
34 |
+
if(null === ($adminModuleInstance = GdbcModulesController::getAdminModuleInstance($moduleName)))
|
35 |
+
continue;
|
36 |
+
|
37 |
+
foreach($adminModuleInstance->getDefaultOptionsValues() as $optionName => $optionValue)
|
38 |
+
{
|
39 |
+
if( ! is_scalar($optionValue) )
|
40 |
+
continue;
|
41 |
+
|
42 |
+
$adminModuleInstance->saveOption($optionName, $optionValue);
|
43 |
+
}
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
|
48 |
+
if(MchGdbcWpUtils::isUserInDashboard() && self::isUpdateFromV1())
|
49 |
+
{
|
50 |
+
$arrActiveSites = MchGdbcWpUtils::isMultiSite() ? MchGdbcWpUtils::getAllBlogIds() : array(get_current_blog_id());
|
51 |
+
|
52 |
+
if(GdbcDbAccessController::attemptsTableExists()) {
|
53 |
+
foreach ( $arrActiveSites as $blogId ) {
|
54 |
+
self::migrateTableDataFromV1( $blogId );
|
55 |
+
}
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
if( 0 === version_compare($savedPluginVersion, GoodByeCaptcha::PLUGIN_VERSION) )
|
60 |
+
return;
|
61 |
+
|
62 |
+
$arrActiveSites = MchGdbcWpUtils::isMultiSite() ? MchGdbcWpUtils::getAllBlogIds() : array(get_current_blog_id());
|
63 |
+
|
64 |
+
if( -1 === version_compare($savedPluginVersion, '2.0') )
|
65 |
+
{
|
66 |
+
GdbcTaskScheduler::unScheduleGdbcTasks();
|
67 |
+
//delete_site_option('gdbc-blocked-attempts');
|
68 |
+
|
69 |
+
self::updateToVersion_2_0();
|
70 |
+
|
71 |
+
if(GdbcDbAccessController::attemptsTableExists()) {
|
72 |
+
foreach ( $arrActiveSites as $blogId ) {
|
73 |
+
self::migrateTableDataFromV1( $blogId );
|
74 |
+
}
|
75 |
+
}
|
76 |
+
|
77 |
+
}
|
78 |
+
|
79 |
+
if( -1 === version_compare($savedPluginVersion, '2.0.1') )
|
80 |
+
{
|
81 |
+
if(GdbcDbAccessController::attemptsTableExists()) {
|
82 |
+
foreach ( $arrActiveSites as $blogId ) {
|
83 |
+
self::migrateTableDataFromV1( $blogId );
|
84 |
+
}
|
85 |
+
}
|
86 |
+
}
|
87 |
+
|
88 |
+
if( -1 === version_compare($savedPluginVersion, '3.0.1') )
|
89 |
+
{
|
90 |
+
if(null !== ($wordPressModuleInstance = GdbcModulesController::getAdminModuleInstance(GdbcModulesController::MODULE_WORDPRESS)))
|
91 |
+
{
|
92 |
+
$arrDefaultOptionsValues = $wordPressModuleInstance->getDefaultOptionsValues();
|
93 |
+
|
94 |
+
if(!empty($arrDefaultOptionsValues[GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_CONTENT_LENGTH]))
|
95 |
+
$wordPressModuleInstance->saveOption(GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_CONTENT_LENGTH, $arrDefaultOptionsValues[GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_CONTENT_LENGTH]);
|
96 |
+
|
97 |
+
if(!empty($arrDefaultOptionsValues[GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_WEBSITE_LENGTH]))
|
98 |
+
$wordPressModuleInstance->saveOption(GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_WEBSITE_LENGTH, $arrDefaultOptionsValues[GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_WEBSITE_LENGTH]);
|
99 |
+
|
100 |
+
if(!empty($arrDefaultOptionsValues[GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_NAME_LENGTH]))
|
101 |
+
$wordPressModuleInstance->saveOption(GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_NAME_LENGTH, $arrDefaultOptionsValues[GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_NAME_LENGTH]);
|
102 |
+
|
103 |
+
if(!empty($arrDefaultOptionsValues[GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_EMAIL_LENGTH]))
|
104 |
+
$wordPressModuleInstance->saveOption(GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_EMAIL_LENGTH, $arrDefaultOptionsValues[GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM_EMAIL_LENGTH]);
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
|
109 |
+
if( -1 === version_compare($savedPluginVersion, '3.0.5') )
|
110 |
+
{
|
111 |
+
$settingsModuleInstance->deleteOption(GdbcSettingsAdminModule::OPTION_CACHE_DIR_PATH, GoodByeCaptcha::isNetworkActivated());
|
112 |
+
}
|
113 |
+
|
114 |
+
if( -1 === version_compare($savedPluginVersion, '3.0.10') )
|
115 |
+
{
|
116 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_EMAIL_NOTIFICATIONS)){
|
117 |
+
GdbcEmailNotificationsAdminModule::getInstance()->saveOption(GdbcEmailNotificationsAdminModule::OPTION_ADMIN_LOGGED_IN_DETECTED, true);
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
+
$settingsModuleInstance->saveOption(GdbcSettingsAdminModule::OPTION_PLUGIN_VERSION, GoodByeCaptcha::PLUGIN_VERSION);
|
122 |
+
|
123 |
+
GoodByeCaptchaUtils::flushSiteCache();
|
124 |
+
|
125 |
+
if(GoodByeCaptcha::isNetworkActivated()){
|
126 |
+
foreach($arrActiveSites as $blogId){
|
127 |
+
$blogId != get_current_blog_id() ? GoodByeCaptchaUtils::flushSiteCache($blogId) : null;
|
128 |
+
}
|
129 |
+
}
|
130 |
+
|
131 |
+
}
|
132 |
+
|
133 |
+
private static function updateToVersion_2_0()
|
134 |
+
{
|
135 |
+
global $wpdb;
|
136 |
+
|
137 |
+
$suppressOldValue = $wpdb->suppress_errors(true);
|
138 |
+
$wpdb->hide_errors();
|
139 |
+
|
140 |
+
GdbcDbAccessController::createAttemptsTable();
|
141 |
+
|
142 |
+
if(self::isUpdateFromV1())
|
143 |
+
{
|
144 |
+
$arrBlogs = MchGdbcWpUtils::isMultiSite() ? MchGdbcWpUtils::getAllBlogIds() : array( get_current_blog_id() );
|
145 |
+
|
146 |
+
foreach ( $arrBlogs as $blogId )
|
147 |
+
{
|
148 |
+
$blogTablePrefix = $wpdb->get_blog_prefix( $blogId );
|
149 |
+
|
150 |
+
$gdbcTableName = $blogTablePrefix . 'gdbc_attempts';
|
151 |
+
|
152 |
+
if ( $wpdb->get_var( "SHOW TABLES LIKE '$gdbcTableName'" ) !== $gdbcTableName ) {
|
153 |
+
continue;
|
154 |
+
}
|
155 |
+
|
156 |
+
$arrQueryResult = $wpdb->get_results( "SELECT * FROM $gdbcTableName LIMIT 1" );
|
157 |
+
|
158 |
+
if ( isset( $arrQueryResult[0]->IsDeleted ) ) {
|
159 |
+
$wpdb->query( "RENAME TABLE $gdbcTableName TO {$gdbcTableName}_old" );
|
160 |
+
}
|
161 |
+
elseif( empty( $arrQueryResult ) )
|
162 |
+
{
|
163 |
+
$wpdb->query("DROP TABLE IF EXISTS $gdbcTableName");
|
164 |
+
}
|
165 |
+
|
166 |
+
}
|
167 |
+
}
|
168 |
+
|
169 |
+
GdbcDbAccessController::createAttemptsTable();
|
170 |
+
|
171 |
+
$wpdb->suppress_errors($suppressOldValue);
|
172 |
+
|
173 |
+
}
|
174 |
+
|
175 |
+
private static function migrateTableDataFromV1($blogId)
|
176 |
+
{
|
177 |
+
|
178 |
+
if(!self::isUpdateFromV1())
|
179 |
+
return;
|
180 |
+
|
181 |
+
global $wpdb;
|
182 |
+
$blogTablePrefix = $wpdb->get_blog_prefix($blogId);
|
183 |
+
|
184 |
+
$gdbcOldTableName = $blogTablePrefix . 'gdbc_attempts_old' ;
|
185 |
+
|
186 |
+
if($wpdb->get_var("SHOW TABLES LIKE '$gdbcOldTableName'") !== $gdbcOldTableName)
|
187 |
+
return;
|
188 |
+
|
189 |
+
$alreadyBlockedIpsList = (array)$wpdb->get_results("SELECT DISTINCT ClientIp FROM $gdbcOldTableName WHERE IsIpBlocked <> 0 AND IsDeleted = 0");
|
190 |
+
|
191 |
+
foreach($alreadyBlockedIpsList as $ipAddressObject)
|
192 |
+
{
|
193 |
+
$clientIp = MchGdbcIPUtils::ipAddressFromBinary($ipAddressObject->ClientIp);
|
194 |
+
if(!MchGdbcIPUtils::isValidIpAddress($clientIp))
|
195 |
+
continue;
|
196 |
+
|
197 |
+
if(GdbcIPUtils::isIpBlackListed($clientIp))
|
198 |
+
continue;
|
199 |
+
|
200 |
+
GdbcBlackListedIpsAdminModule::getInstance()->registerBlackListedIp($clientIp);
|
201 |
+
|
202 |
+
}
|
203 |
+
|
204 |
+
unset($alreadyBlockedIpsList, $ipAddressObject, $clientIp);
|
205 |
+
|
206 |
+
|
207 |
+
$arrModulesIdMapping = array( // key - oldModuleId
|
208 |
+
1 => GdbcModulesController::MODULE_WORDPRESS ,
|
209 |
+
2 => GdbcModulesController::MODULE_JETPACK_CONTACT_FORM ,
|
210 |
+
3 => GdbcModulesController::MODULE_BUDDY_PRESS ,
|
211 |
+
4 => GdbcModulesController::MODULE_NINJA_FORMS ,
|
212 |
+
5 => GdbcModulesController::MODULE_CONTACT_FORM_7 ,
|
213 |
+
6 => GdbcModulesController::MODULE_GRAVITY_FORMS ,
|
214 |
+
7 => GdbcModulesController::MODULE_FAST_SECURE_FORM ,
|
215 |
+
8 => GdbcModulesController::MODULE_FORMIDABLE_FORMS ,
|
216 |
+
9 => GdbcModulesController::MODULE_MAIL_CHIMP_FOR_WP ,
|
217 |
+
11 => GdbcModulesController::MODULE_USER_PRO ,
|
218 |
+
12 => GdbcModulesController::MODULE_ULTIMATE_MEMBER ,
|
219 |
+
13 => GdbcModulesController::MODULE_WOOCOMMERCE ,
|
220 |
+
14 => GdbcModulesController::MODULE_UPME ,
|
221 |
+
15 => GdbcModulesController::MODULE_PLANSO_FORMS ,
|
222 |
+
16 => GdbcModulesController::MODULE_SEAMLESS_DONATIONS ,
|
223 |
+
);
|
224 |
+
|
225 |
+
|
226 |
+
|
227 |
+
$minDateTime = date('Y-m-d H:i:s', strtotime(((-1) * (30)) . ' days', current_time( 'timestamp' )));
|
228 |
+
$maxDateTime = date('Y-m-d H:i:s', current_time( 'timestamp' ));
|
229 |
+
|
230 |
+
$gdbcAttemptsQuery = "
|
231 |
+
SELECT Id, UNIX_TIMESTAMP(CreatedDate) AS CreatedDate, ModuleId, SectionId, ClientIp, CountryId, ReasonId
|
232 |
+
FROM $gdbcOldTableName WHERE IsDeleted = 0 AND CreatedDate BETWEEN '$minDateTime' AND '$maxDateTime' order by CreatedDate DESC LIMIT 500;
|
233 |
+
";
|
234 |
+
|
235 |
+
|
236 |
+
$gdbcAttemptsList = (array)$wpdb->get_results($gdbcAttemptsQuery);
|
237 |
+
|
238 |
+
$oldSettingsOptions = get_site_option('gdbcsettingsadminmodule-settings');
|
239 |
+
if(!empty($oldSettingsOptions['TrustedIps'][0]) && MchGdbcIPUtils::isValidIpAddress($oldSettingsOptions['TrustedIps'][0]))
|
240 |
+
{
|
241 |
+
if(!GdbcIPUtils::isIpWhiteListed($oldSettingsOptions['TrustedIps'][0])){
|
242 |
+
GdbcWhiteListedIpsAdminModule::getInstance()->registerWhiteListedIp($oldSettingsOptions['TrustedIps'][0]);
|
243 |
+
}
|
244 |
+
}
|
245 |
+
|
246 |
+
$oldSettingsOptions = get_site_option('gdbcwordpressadminmodule-settings');
|
247 |
+
if(!empty($oldSettingsOptions['IsCommentsFormActivated']))
|
248 |
+
{
|
249 |
+
GdbcWordPressAdminModule::getInstance()->saveOption(GdbcWordPressAdminModule::WORDPRESS_COMMENTS_FORM, true);
|
250 |
+
}
|
251 |
+
|
252 |
+
if(!empty($oldSettingsOptions['IsLoginFormActivated']))
|
253 |
+
{
|
254 |
+
GdbcWordPressAdminModule::getInstance()->saveOption(GdbcWordPressAdminModule::WORDPRESS_LOGIN_FORM, true);
|
255 |
+
}
|
256 |
+
if(!empty($oldSettingsOptions['IsLostPasswordFormActivated']))
|
257 |
+
{
|
258 |
+
GdbcWordPressAdminModule::getInstance()->saveOption(GdbcWordPressAdminModule::WORDPRESS_LOST_PASSWORD_FORM, true);
|
259 |
+
}
|
260 |
+
if(!empty($oldSettingsOptions['IsUserRegistrationFormActivated']))
|
261 |
+
{
|
262 |
+
GdbcWordPressAdminModule::getInstance()->saveOption(GdbcWordPressAdminModule::WORDPRESS_REGISTRATION_FORM, true);
|
263 |
+
}
|
264 |
+
|
265 |
+
$oldSettingsOptions = get_site_option('gdbcultimatememberadminmodule-settings');
|
266 |
+
if(!empty($oldSettingsOptions['IsUMLoginActivated']) && GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_ULTIMATE_MEMBER))
|
267 |
+
{
|
268 |
+
GdbcUltimateMemberAdminModule::getInstance()->saveOption(GdbcUltimateMemberAdminModule::OPTION_ULTIMATE_MEMBER_LOGIN_FORM, true);
|
269 |
+
}
|
270 |
+
if(!empty($oldSettingsOptions['IsUMRegisterActivated']) && GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_ULTIMATE_MEMBER))
|
271 |
+
{
|
272 |
+
GdbcUltimateMemberAdminModule::getInstance()->saveOption(GdbcUltimateMemberAdminModule::OPTION_ULTIMATE_MEMBER_REGISTER_FORM, true);
|
273 |
+
}
|
274 |
+
if(!empty($oldSettingsOptions['IsUMLostPasswordActivated']) && GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_ULTIMATE_MEMBER))
|
275 |
+
{
|
276 |
+
GdbcUltimateMemberAdminModule::getInstance()->saveOption(GdbcUltimateMemberAdminModule::OPTION_ULTIMATE_MEMBER_LOST_PASSWORD_FORM, true);
|
277 |
+
}
|
278 |
+
|
279 |
+
$oldSettingsOptions = get_site_option('gdbcsubscriptionsadminmodule-settings');
|
280 |
+
if(!empty($oldSettingsOptions['IsMCLActivated']) && GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_MAIL_CHIMP_FOR_WP))
|
281 |
+
{
|
282 |
+
GdbcMailChimpForWpAdminModule::getInstance()->saveOption(GdbcMailChimpForWpAdminModule::OPTION_MODULE_MAIL_CHIMP_FOR_WP, true);
|
283 |
+
}
|
284 |
+
|
285 |
+
$oldSettingsOptions = get_site_option('gdbcpopularformsadminmodule-settings');
|
286 |
+
if(!empty($oldSettingsOptions['IsJCFctivated']) && GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_JETPACK_CONTACT_FORM))
|
287 |
+
{
|
288 |
+
GdbcJetPackContactFormAdminModule::getInstance()->saveOption(GdbcJetPackContactFormAdminModule::OPTION_IS_JETPACK_CONTACT_FORM_ACTIVATE, true);
|
289 |
+
}
|
290 |
+
if(!empty($oldSettingsOptions['IsPFActivated']) && GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_PLANSO_FORMS))
|
291 |
+
{
|
292 |
+
GdbcPlanSoFormsAdminModule::getInstance()->saveOption(GdbcPlanSoFormsAdminModule::OPTION_PLANSO_GENERAL_FORM, true);
|
293 |
+
}
|
294 |
+
|
295 |
+
delete_site_option('gdbcsettingsadminmodule-settings');
|
296 |
+
delete_site_option('gdbcwordpressadminmodule-settings');
|
297 |
+
delete_site_option('gdbcultimatememberadminmodule-settings');
|
298 |
+
delete_site_option('gdbcsubscriptionsadminmodule-settings');
|
299 |
+
delete_site_option('gdbcpopularformsadminmodule-settings');
|
300 |
+
|
301 |
+
if(empty($gdbcAttemptsList)) {
|
302 |
+
|
303 |
+
foreach(GdbcModulesController::getRegisteredModules() as $moduleName => $arrModuleInfo)
|
304 |
+
{
|
305 |
+
if(null === ($adminModuleInstance = GdbcModulesController::getAdminModuleInstance($moduleName)))
|
306 |
+
continue;
|
307 |
+
|
308 |
+
$oldOptionKey = strtolower(get_class($adminModuleInstance)) . '-settings';
|
309 |
+
|
310 |
+
MchGdbcWpUtils::isMultiSite() && function_exists('delete_blog_option') ? delete_blog_option($blogId, $oldOptionKey) : delete_option($oldOptionKey);
|
311 |
+
}
|
312 |
+
|
313 |
+
|
314 |
+
$wpdb->query("DROP TABLE IF EXISTS $gdbcOldTableName");
|
315 |
+
return true;
|
316 |
+
}
|
317 |
+
|
318 |
+
$arrSelectedIds = array();
|
319 |
+
foreach($gdbcAttemptsList as $gdbcAttempt)
|
320 |
+
{
|
321 |
+
|
322 |
+
empty($gdbcAttempt->SectionId) ? $gdbcAttempt->SectionId = 0 : null;
|
323 |
+
|
324 |
+
$newModuleName = isset($arrModulesIdMapping[$gdbcAttempt->ModuleId]) ? $arrModulesIdMapping[$gdbcAttempt->ModuleId] : null;
|
325 |
+
$newModuleId = GdbcModulesController::getModuleIdByName($newModuleName);
|
326 |
+
|
327 |
+
if(empty($newModuleId))
|
328 |
+
continue;
|
329 |
+
|
330 |
+
$attemptEntity = new GdbcAttemptEntity($newModuleId);
|
331 |
+
|
332 |
+
$attemptEntity->ModuleId = $newModuleId;
|
333 |
+
$attemptEntity->SectionId = !empty($gdbcAttempt->SectionId) ? $gdbcAttempt->SectionId : 0;
|
334 |
+
$attemptEntity->SiteId = $blogId;
|
335 |
+
$attemptEntity->CreatedDate = $gdbcAttempt->CreatedDate;
|
336 |
+
$attemptEntity->ReasonId = $gdbcAttempt->ReasonId;
|
337 |
+
$attemptEntity->ClientIp = MchGdbcIPUtils::ipAddressFromBinary($gdbcAttempt->ClientIp);
|
338 |
+
|
339 |
+
|
340 |
+
if(0 !== GdbcDbAccessController::registerAttempt($attemptEntity)) {
|
341 |
+
$arrSelectedIds[] = $gdbcAttempt->Id;
|
342 |
+
}
|
343 |
+
|
344 |
+
}
|
345 |
+
|
346 |
+
$wpdb->query("DELETE FROM $gdbcOldTableName WHERE Id IN (" . implode(',', $arrSelectedIds) . ")");
|
347 |
+
|
348 |
+
return true;
|
349 |
+
}
|
350 |
+
|
351 |
+
|
352 |
+
private static function isUpdateFromV1()
|
353 |
+
{
|
354 |
+
return false !== get_site_option('gdbc-blocked-attempts');
|
355 |
+
}
|
356 |
+
|
357 |
+
|
358 |
+
private function __construct()
|
359 |
+
{}
|
360 |
+
}
|
3.0.14/engine/GoodByeCaptchaAdmin.php
ADDED
@@ -0,0 +1,376 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (C) 2014 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
final class GoodByeCaptchaAdmin extends MchGdbcBaseAdminPlugin
|
21 |
+
{
|
22 |
+
CONST GDBC_ADMIN_NOTICES_FILTER_KEY = 'gdbc-admin-notices';
|
23 |
+
|
24 |
+
private static $adminNoticesList = array();
|
25 |
+
|
26 |
+
protected function __construct(array $arrPluginInfo)
|
27 |
+
{
|
28 |
+
|
29 |
+
parent::__construct($arrPluginInfo);
|
30 |
+
|
31 |
+
$this->adminPagesList = array(
|
32 |
+
|
33 |
+
new GdbcSettingsAdminPage(__('Settings', self::$PLUGIN_SLUG), __('General Settings', self::$PLUGIN_SLUG), self::$PLUGIN_SLUG),
|
34 |
+
new GdbcSecurityAdminPage(__('Security', self::$PLUGIN_SLUG), __('Security Settings', self::$PLUGIN_SLUG), self::$PLUGIN_SLUG),
|
35 |
+
new GdbcWordpressAdminPage(__('WordPress', self::$PLUGIN_SLUG), __('WordPress Settings', self::$PLUGIN_SLUG), self::$PLUGIN_SLUG),
|
36 |
+
new GdbcContactFormsAdminPage(__('Contact Forms', self::$PLUGIN_SLUG), __('Contact Forms Plugins', self::$PLUGIN_SLUG), self::$PLUGIN_SLUG),
|
37 |
+
new GdbcMembershipAdminPage(__('Membership', self::$PLUGIN_SLUG), __('Membership Page Settings', self::$PLUGIN_SLUG), self::$PLUGIN_SLUG),
|
38 |
+
new GdbcECommerceAdminPage(__('eCommerce', self::$PLUGIN_SLUG), __('eCommerce Page Settings', self::$PLUGIN_SLUG), self::$PLUGIN_SLUG),
|
39 |
+
new GdbcOthersAdminPage(__('Others', self::$PLUGIN_SLUG), __('All other popular plugins settings', self::$PLUGIN_SLUG), self::$PLUGIN_SLUG),
|
40 |
+
new GdbcNotificationsAdminPage(__('Notifications', self::$PLUGIN_SLUG), __('Notifications Settings', self::$PLUGIN_SLUG), self::$PLUGIN_SLUG),
|
41 |
+
new GdbcExtensionsAdminPage(__('Extensions', self::$PLUGIN_SLUG), __('WPBruiser Extensions', self::$PLUGIN_SLUG), self::$PLUGIN_SLUG),
|
42 |
+
new GdbcLicensesAdminPage(__('Licenses', self::$PLUGIN_SLUG), __('Licenses Settings', self::$PLUGIN_SLUG), self::$PLUGIN_SLUG),
|
43 |
+
new GdbcReportsAdminPage(__('Reports', self::$PLUGIN_SLUG), __('WPBruiser - Blocked Attempts', self::$PLUGIN_SLUG), self::$PLUGIN_SLUG),
|
44 |
+
|
45 |
+
);
|
46 |
+
|
47 |
+
if(GoodByeCaptcha::isNetworkActivated())
|
48 |
+
{
|
49 |
+
add_action( 'network_admin_menu', array( $this, 'buildPluginMenu' ), 10 );
|
50 |
+
}
|
51 |
+
else
|
52 |
+
{
|
53 |
+
add_action( 'admin_menu', array( $this, 'buildPluginMenu' ), 10 );
|
54 |
+
}
|
55 |
+
|
56 |
+
}
|
57 |
+
|
58 |
+
public static function getAdminRegisteredNotices()
|
59 |
+
{
|
60 |
+
if( empty(self::$adminNoticesList) )
|
61 |
+
self::registerAdminNotices();
|
62 |
+
|
63 |
+
return self::$adminNoticesList = apply_filters(self::GDBC_ADMIN_NOTICES_FILTER_KEY, self::$adminNoticesList);
|
64 |
+
}
|
65 |
+
|
66 |
+
private static function registerAdminNotices()
|
67 |
+
{
|
68 |
+
if(!MchGdbcWpUtils::isSuperAdminLoggedIn())
|
69 |
+
return;
|
70 |
+
|
71 |
+
$bruteForceModuleInstance = GdbcModulesController::getAdminModuleInstance(GdbcModulesController::MODULE_BRUTE_FORCE);
|
72 |
+
|
73 |
+
if( !GdbcIPUtils::isClientIpWhiteListed() && GdbcIPUtils::isClientIpWebAttacker(true) && $bruteForceModuleInstance)
|
74 |
+
{
|
75 |
+
$bruteForceModuleInstance->deleteOption(GdbcBruteForceAdminModule::OPTION_BLOCK_WEB_ATTACKERS, GoodByeCaptcha::isNetworkActivated());
|
76 |
+
$adminNotice = new GdbcAdminNotice( GdbcAdminNotice::USER_IP_WEB_ATTACKER_NOTICE_KEY, GdbcAdminNotice::NOTICE_TYPE_DANGER );
|
77 |
+
|
78 |
+
$noticeMessage = '<p><b>';
|
79 |
+
$noticeMessage .= sprintf( __( "Your IP Address - %s - is reported as a Web Attacker! In order to keep <b>Block Web Attackers IPs</b> option activated you must white-list your IP Address!", GoodByeCaptcha::PLUGIN_SLUG ), esc_html( GdbcIPUtils::getClientIpAddress() ) );
|
80 |
+
$noticeMessage .= '</b></p>';
|
81 |
+
|
82 |
+
$adminNotice->setMessage( $noticeMessage );
|
83 |
+
$adminNotice->setIsDismissible( true );
|
84 |
+
|
85 |
+
self::$adminNoticesList[] = $adminNotice;
|
86 |
+
|
87 |
+
}
|
88 |
+
|
89 |
+
if( !GdbcIPUtils::isClientIpWhiteListed() && GdbcIPUtils::isClientIpProxyAnonymizer(true))
|
90 |
+
{
|
91 |
+
$bruteForceModuleInstance->deleteOption(GdbcBruteForceAdminModule::OPTION_BLOCK_ANONYMOUS_PROXY, GoodByeCaptcha::isNetworkActivated());
|
92 |
+
|
93 |
+
$adminNotice = new GdbcAdminNotice(GdbcAdminNotice::USER_IP_PROXY_ANONYM_NOTICE_KEY, GdbcAdminNotice::NOTICE_TYPE_DANGER);
|
94 |
+
$noticeMessage = '<p><b>';
|
95 |
+
$noticeMessage .= sprintf(__("Your IP Address - %s - is reported as a dangerous Anonymous Proxy IP! In order to keep <b>Block Anonymous Proxy IPs</b> option activated you must white-list your IP Address!", GoodByeCaptcha::PLUGIN_SLUG), esc_html(GdbcIPUtils::getClientIpAddress()));
|
96 |
+
$noticeMessage .= '</b></p>';
|
97 |
+
|
98 |
+
$adminNotice->setMessage($noticeMessage);
|
99 |
+
$adminNotice->setIsDismissible(false);
|
100 |
+
|
101 |
+
self::$adminNoticesList[] = $adminNotice;
|
102 |
+
|
103 |
+
}
|
104 |
+
|
105 |
+
|
106 |
+
if(MchGdbcHttpRequest::isThroughProxy() && !MchGdbcHttpRequest::getDetectedProxyServiceId())
|
107 |
+
{
|
108 |
+
$trustedProxyHeaders = (array)GdbcProxyHeadersAdminModule::getInstance()->getOption(GdbcProxyHeadersAdminModule::PROXY_HEADERS_IP);
|
109 |
+
|
110 |
+
$detectedIpProxyHeaders = (array)MchGdbcHttpRequest::getDetectedProxyHeaders();
|
111 |
+
foreach($detectedIpProxyHeaders as $index => $header)
|
112 |
+
{
|
113 |
+
$proxyReportedIp = MchGdbcHttpRequest::getClientIpAddressFromProxyHeader($header);
|
114 |
+
if(empty($proxyReportedIp) || $proxyReportedIp === GdbcIPUtils::getClientIpAddress()) {
|
115 |
+
unset($detectedIpProxyHeaders[$index]);
|
116 |
+
continue;
|
117 |
+
}
|
118 |
+
|
119 |
+
if(in_array($header, $trustedProxyHeaders)){
|
120 |
+
unset($detectedIpProxyHeaders[$index]);
|
121 |
+
continue;
|
122 |
+
}
|
123 |
+
}
|
124 |
+
|
125 |
+
|
126 |
+
if(!empty($detectedIpProxyHeaders) && empty($trustedProxyHeaders))
|
127 |
+
{
|
128 |
+
|
129 |
+
$settingsPageUrl = GdbcBaseAdminPage::getPageUrlByName('Settings');
|
130 |
+
if(null === $settingsPageUrl)
|
131 |
+
$settingsPageUrl = 'Settings';
|
132 |
+
else
|
133 |
+
$settingsPageUrl = MchGdbcHtmlUtils::createAnchorElement(__('Settings Page', GoodByeCaptcha::PLUGIN_SLUG), array('href' => $settingsPageUrl));
|
134 |
+
|
135 |
+
$adminNotice = new GdbcAdminNotice(GdbcAdminNotice::UNTRUSTED_PROXY_HEADER_DETECTED, GdbcAdminNotice::NOTICE_TYPE_DANGER);
|
136 |
+
$noticeMessage = '<p><b>';
|
137 |
+
$noticeMessage .= __("WPBruiser has detected that your web site is behind a web proxy server! Please go to $settingsPageUrl and register detected proxy header!", GoodByeCaptcha::PLUGIN_SLUG);
|
138 |
+
$noticeMessage .= '</b></p>';
|
139 |
+
|
140 |
+
$adminNotice->setMessage($noticeMessage);
|
141 |
+
$adminNotice->setIsDismissible(true);
|
142 |
+
|
143 |
+
self::$adminNoticesList[] = $adminNotice;
|
144 |
+
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
}
|
149 |
+
|
150 |
+
public function renderPluginActiveAdminPage()
|
151 |
+
{
|
152 |
+
$activeAdminPage = $this->getActivePage();
|
153 |
+
|
154 |
+
$arrPageHolderClasses = array('wrap', 'container-fluid', 'gdbc-settings', $activeAdminPage->getPageMenuSlug());
|
155 |
+
|
156 |
+
if(is_a($activeAdminPage, 'GdbcWelcomeAdminPage'))
|
157 |
+
{
|
158 |
+
$arrPageHolderClasses[]= 'about-wrap';
|
159 |
+
}
|
160 |
+
|
161 |
+
$adminPageHtmlCode = '<div class="' . implode(' ', $arrPageHolderClasses) . '">';
|
162 |
+
|
163 |
+
if(! is_a($activeAdminPage, 'GdbcWelcomeAdminPage') )
|
164 |
+
{
|
165 |
+
$adminPageHtmlCode .= '<h2 class="nav-tab-wrapper">';
|
166 |
+
|
167 |
+
foreach ($this->getRegisteredAdminPages() as $adminPage) {
|
168 |
+
$adminPageHtmlCode .= '<a class="nav-tab' . (($adminPage->isActive()) ? ' nav-tab-active' : '') . '" href="?page=' . $adminPage->getPageMenuSlug() . '">';
|
169 |
+
$adminPageHtmlCode .= $adminPage->getPageMenuTitle() . '</a>';
|
170 |
+
}
|
171 |
+
|
172 |
+
$adminPageHtmlCode .= '</h2>';
|
173 |
+
}
|
174 |
+
|
175 |
+
echo $adminPageHtmlCode;
|
176 |
+
|
177 |
+
|
178 |
+
if(null !== $activeAdminPage)
|
179 |
+
{
|
180 |
+
$activeAdminPage->renderPageContent();
|
181 |
+
}
|
182 |
+
|
183 |
+
echo '</div>';
|
184 |
+
}
|
185 |
+
|
186 |
+
public function buildPluginMenu()
|
187 |
+
{
|
188 |
+
$arrRegisteredPages = $this->getRegisteredAdminPages();
|
189 |
+
$adminFirstPage = reset($arrRegisteredPages);
|
190 |
+
if(false === $adminFirstPage)
|
191 |
+
return;
|
192 |
+
|
193 |
+
$pageAdminScreenId = add_menu_page(
|
194 |
+
$adminFirstPage->getPageBrowserTitle(),
|
195 |
+
GoodByeCaptcha::PLUGIN_NAME . (GoodByeCaptcha::isProVersion() ? 'Pro ': ''),
|
196 |
+
'manage_options',
|
197 |
+
$adminFirstPage->getPageMenuSlug(),
|
198 |
+
array($this, 'renderPluginActiveAdminPage'),
|
199 |
+
'dashicons-shield',
|
200 |
+
'42.83927'
|
201 |
+
);
|
202 |
+
|
203 |
+
$this->adminPagesList[0]->setAdminScreenId($pageAdminScreenId);
|
204 |
+
|
205 |
+
$arrSize = count($this->adminPagesList);
|
206 |
+
if(1 === $arrSize)
|
207 |
+
return;
|
208 |
+
|
209 |
+
add_submenu_page(
|
210 |
+
$adminFirstPage->getPageMenuSlug(),
|
211 |
+
$adminFirstPage->getPageBrowserTitle(),
|
212 |
+
$adminFirstPage->getPageMenuTitle(),
|
213 |
+
'manage_options',
|
214 |
+
$adminFirstPage->getPageMenuSlug()
|
215 |
+
);
|
216 |
+
|
217 |
+
|
218 |
+
for($i = 1; $i < $arrSize; ++$i)
|
219 |
+
{
|
220 |
+
if(!$this->adminPagesList[$i]->hasRegisteredModules())
|
221 |
+
{
|
222 |
+
unset($this->adminPagesList[$i]);
|
223 |
+
continue;
|
224 |
+
}
|
225 |
+
|
226 |
+
$pageMenuTitle = $this->adminPagesList[$i]->getPageMenuTitle();
|
227 |
+
if(strpos($pageMenuTitle, 'Extensions') !== false) {
|
228 |
+
$pageMenuTitle = '<span style="color:#f16600">' . $pageMenuTitle . '</span>';
|
229 |
+
}
|
230 |
+
|
231 |
+
$pageAdminScreenId = add_submenu_page(
|
232 |
+
$adminFirstPage->getPageMenuSlug(),
|
233 |
+
$this->adminPagesList[$i]->getPageBrowserTitle(),
|
234 |
+
$pageMenuTitle,
|
235 |
+
'manage_options',
|
236 |
+
$this->adminPagesList[$i]->getPageMenuSlug(),
|
237 |
+
array($this, 'renderPluginActiveAdminPage')
|
238 |
+
);
|
239 |
+
|
240 |
+
$this->adminPagesList[$i]->setAdminScreenId($pageAdminScreenId);
|
241 |
+
}
|
242 |
+
|
243 |
+
|
244 |
+
}
|
245 |
+
|
246 |
+
public function enqueueAdminScriptsAndStyles()
|
247 |
+
{
|
248 |
+
|
249 |
+
wp_enqueue_script(self::$PLUGIN_SLUG . '-admin-script', plugins_url('/assets/admin/scripts/gdbc-admin.js', self::$PLUGIN_MAIN_FILE), array('jquery'), self::$PLUGIN_VERSION);
|
250 |
+
|
251 |
+
wp_localize_script(self::$PLUGIN_SLUG . '-admin-script', 'GdbcAdmin', array(
|
252 |
+
'ajaxUrl' => admin_url('admin-ajax.php'),
|
253 |
+
'ajaxRequestNonce' => wp_create_nonce(GdbcAjaxController::AJAX_NONCE_VALUE),
|
254 |
+
));
|
255 |
+
|
256 |
+
if(null === ($activeAdminPage = $this->getActivePage())){
|
257 |
+
return;
|
258 |
+
}
|
259 |
+
|
260 |
+
if($this->getActivePage() instanceof GdbcReportsAdminPage)
|
261 |
+
{
|
262 |
+
remove_action( 'admin_print_styles', 'print_emoji_styles' );
|
263 |
+
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
|
264 |
+
|
265 |
+
wp_enqueue_script(self::$PLUGIN_SLUG . '-jquery-flot', plugins_url('/assets/admin/scripts/jquery-flot.js', self::$PLUGIN_MAIN_FILE), array('jquery'), self::$PLUGIN_VERSION);
|
266 |
+
|
267 |
+
wp_enqueue_script(self::$PLUGIN_SLUG . '-jquery-flot-tooltip', plugins_url('/assets/admin/scripts/jquery-flot-tooltip.js', self::$PLUGIN_MAIN_FILE), array(), self::$PLUGIN_VERSION);
|
268 |
+
|
269 |
+
wp_enqueue_script(self::$PLUGIN_SLUG . '-raphael', plugins_url('/assets/admin/scripts/raphael.js', self::$PLUGIN_MAIN_FILE), array(), self::$PLUGIN_VERSION);
|
270 |
+
|
271 |
+
wp_enqueue_script(self::$PLUGIN_SLUG . '-morris', plugins_url('/assets/admin/scripts/morris.js', self::$PLUGIN_MAIN_FILE), array(), self::$PLUGIN_VERSION);
|
272 |
+
|
273 |
+
wp_enqueue_script(self::$PLUGIN_SLUG . '-reports-script', plugins_url('/assets/admin/scripts/gdbc-reports.js', self::$PLUGIN_MAIN_FILE), array(), self::$PLUGIN_VERSION);
|
274 |
+
|
275 |
+
wp_enqueue_script(self::$PLUGIN_SLUG . '-bootstrap', plugins_url('/assets/admin/scripts/bootstrap.min.js', self::$PLUGIN_MAIN_FILE), array(), self::$PLUGIN_VERSION);
|
276 |
+
|
277 |
+
wp_enqueue_script(self::$PLUGIN_SLUG . '-jquery-jvectormap', plugins_url('/assets/admin/scripts/jquery-jvectormap-1.2.2.min.js', self::$PLUGIN_MAIN_FILE), array(), self::$PLUGIN_VERSION);
|
278 |
+
wp_enqueue_script(self::$PLUGIN_SLUG . '-jquery-jvectormap-world', plugins_url('/assets/admin/scripts/jquery-jvectormap-world-mill-en.js', self::$PLUGIN_MAIN_FILE), array(), self::$PLUGIN_VERSION);
|
279 |
+
|
280 |
+
wp_enqueue_style(self::$PLUGIN_SLUG . '-bootstrap', plugins_url('/assets/admin/styles/bootstrap.css', self::$PLUGIN_MAIN_FILE), array(), self::$PLUGIN_VERSION);
|
281 |
+
wp_enqueue_style(self::$PLUGIN_SLUG . '-morris', plugins_url('/assets/admin/styles/morris.css', self::$PLUGIN_MAIN_FILE), array(), self::$PLUGIN_VERSION);
|
282 |
+
}
|
283 |
+
|
284 |
+
if($this->getActivePage() instanceof GdbcSecurityAdminPage)
|
285 |
+
{
|
286 |
+
wp_enqueue_script(self::$PLUGIN_SLUG . '-multi-select', plugins_url('/assets/admin/scripts/multiselect.min.js', self::$PLUGIN_MAIN_FILE), array('jquery'), self::$PLUGIN_VERSION);
|
287 |
+
}
|
288 |
+
|
289 |
+
wp_enqueue_style('dashboard');
|
290 |
+
wp_enqueue_script('dashboard');
|
291 |
+
|
292 |
+
|
293 |
+
wp_enqueue_style (self::$PLUGIN_SLUG . '-admin-style', plugins_url('/assets/admin/styles/gdbc-admin.css', self::$PLUGIN_MAIN_FILE), array(), self::$PLUGIN_VERSION);
|
294 |
+
|
295 |
+
}
|
296 |
+
|
297 |
+
|
298 |
+
public static function getInstance(array $arrPluginInfo)
|
299 |
+
{
|
300 |
+
static $gdbcAdminInstance = null;
|
301 |
+
return null !== $gdbcAdminInstance ? $gdbcAdminInstance : $gdbcAdminInstance = new self($arrPluginInfo);
|
302 |
+
}
|
303 |
+
|
304 |
+
public function initializeAdminPlugin()
|
305 |
+
{
|
306 |
+
|
307 |
+
parent::initializeAdminPlugin();
|
308 |
+
|
309 |
+
if(MchGdbcWpUtils::isAjaxRequest())
|
310 |
+
return;
|
311 |
+
|
312 |
+
add_action('shutdown', array($this, 'executeLowPriorityTasks'));
|
313 |
+
|
314 |
+
foreach(self::getAdminRegisteredNotices() as $adminNotice)
|
315 |
+
{
|
316 |
+
if($adminNotice->isDismissible() && $adminNotice->isDismissed())
|
317 |
+
continue;
|
318 |
+
|
319 |
+
if(MchGdbcWpUtils::isMultiSite() && GoodByeCaptcha::isNetworkActivated())
|
320 |
+
{
|
321 |
+
add_action('network_admin_notices', array($adminNotice, 'showNotice'));
|
322 |
+
}
|
323 |
+
else
|
324 |
+
{
|
325 |
+
add_action( 'admin_notices', array( $adminNotice, 'showNotice' ) );
|
326 |
+
}
|
327 |
+
|
328 |
+
}
|
329 |
+
|
330 |
+
}
|
331 |
+
|
332 |
+
|
333 |
+
public function executeLowPriorityTasks()
|
334 |
+
{
|
335 |
+
GdbcDbAccessController::deleteAttemptsOlderThan(GdbcSettingsAdminModule::getInstance()->getOption(GdbcSettingsAdminModule::OPTION_MAX_LOGS_DAYS));
|
336 |
+
GdbcDbAccessController::clearAttemptsNotesOlderThan(GdbcSettingsAdminModule::getInstance()->getOption(GdbcSettingsAdminModule::OPTION_BLOCKED_CONTENT_LOG_DAYS));
|
337 |
+
|
338 |
+
if(GoodByeCaptcha::isProVersion() && is_plugin_active($litePlugin = 'goodbye-captcha/goodbye-captcha.php')){
|
339 |
+
deactivate_plugins($litePlugin, true, null);
|
340 |
+
}
|
341 |
+
|
342 |
+
if(isset(self::$PLUGIN_MAIN_FILE) && !GoodByeCaptcha::isNetworkActivated() && !MchGdbcWpUtils::isAjaxRequest())
|
343 |
+
{
|
344 |
+
$pluginBaseName = plugin_basename(self::$PLUGIN_MAIN_FILE);
|
345 |
+
$arrBlogActivePlugins = (array)get_option('active_plugins', array());
|
346 |
+
$firstActivatedPlugin = reset($arrBlogActivePlugins);
|
347 |
+
if (false === $pluginBaseName || $firstActivatedPlugin === $pluginBaseName || (!($pluginKey = array_search($pluginBaseName, $arrBlogActivePlugins))))
|
348 |
+
return;
|
349 |
+
|
350 |
+
unset($arrBlogActivePlugins[$pluginKey]);
|
351 |
+
array_unshift($arrBlogActivePlugins, $pluginBaseName);
|
352 |
+
|
353 |
+
$w3tcFlagValue = null;
|
354 |
+
if(function_exists('w3_instance') && is_callable(array($w3tcConfigInstance = w3_instance('W3_Config'), 'set')) && is_callable(array($w3tcConfigInstance, 'set')) && is_callable(array($w3tcConfigInstance, 'save')) && is_callable(array($w3tcConfigInstance, 'get_boolean'))){
|
355 |
+
$w3tcFlagValue = (bool)$w3tcConfigInstance->get_boolean('notes.plugins_updated');
|
356 |
+
}
|
357 |
+
|
358 |
+
update_option('active_plugins', array_keys(array_flip($arrBlogActivePlugins)));
|
359 |
+
|
360 |
+
if(false === $w3tcFlagValue){
|
361 |
+
$w3tcConfigInstance->set('notes.plugins_updated', false);
|
362 |
+
$w3tcConfigInstance->save();
|
363 |
+
}
|
364 |
+
|
365 |
+
}
|
366 |
+
|
367 |
+
}
|
368 |
+
|
369 |
+
public static function onPluginActivate()
|
370 |
+
{}
|
371 |
+
|
372 |
+
|
373 |
+
private function __clone()
|
374 |
+
{}
|
375 |
+
|
376 |
+
}
|
3.0.14/engine/GoodByeCaptchaPublic.php
ADDED
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (C) 2014 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
final class GoodByeCaptchaPublic extends MchGdbcBasePublicPlugin
|
21 |
+
{
|
22 |
+
|
23 |
+
//private $clientScriptUrl = null;
|
24 |
+
private $formHiddenInputName = null;
|
25 |
+
|
26 |
+
protected function __construct(array $arrPluginInfo)
|
27 |
+
{
|
28 |
+
parent::__construct($arrPluginInfo);
|
29 |
+
|
30 |
+
$settingsModuleInstance = GdbcModulesController::getPublicModuleInstance(GdbcModulesController::MODULE_SETTINGS);
|
31 |
+
if(null === $settingsModuleInstance)
|
32 |
+
return;
|
33 |
+
|
34 |
+
//$this->clientScriptUrl = plugins_url( '/assets/public/scripts/gdbc-public.js', self::$PLUGIN_MAIN_FILE );
|
35 |
+
$this->formHiddenInputName = $settingsModuleInstance->getOption(GdbcSettingsAdminModule::OPTION_HIDDEN_INPUT_NAME);
|
36 |
+
|
37 |
+
foreach(array_keys((array)GdbcModulesController::getRegisteredModules()) as $moduleName)
|
38 |
+
{
|
39 |
+
$moduleInstance = GdbcModulesController::getPublicModuleInstance($moduleName);
|
40 |
+
|
41 |
+
if( ! ($moduleInstance instanceof MchGdbcBaseModule) )
|
42 |
+
continue;
|
43 |
+
|
44 |
+
call_user_func(array($moduleInstance, 'registerAttachedHooks'));
|
45 |
+
}
|
46 |
+
|
47 |
+
}
|
48 |
+
|
49 |
+
|
50 |
+
public function initializePlugin()
|
51 |
+
{
|
52 |
+
parent::initializePlugin();
|
53 |
+
}
|
54 |
+
|
55 |
+
public function registerAfterSetupThemeHooks()
|
56 |
+
{
|
57 |
+
add_action('login_enqueue_scripts', array($this, 'enqueuePublicScriptsAndStyles'));
|
58 |
+
}
|
59 |
+
|
60 |
+
public static function getInstance(array $arrPluginInfo)
|
61 |
+
{
|
62 |
+
static $gdbcPublicInstance = null;
|
63 |
+
return null !== $gdbcPublicInstance ? $gdbcPublicInstance : $gdbcPublicInstance = new self($arrPluginInfo);
|
64 |
+
}
|
65 |
+
|
66 |
+
|
67 |
+
public function enqueuePublicScriptsAndStyles()
|
68 |
+
{
|
69 |
+
|
70 |
+
// if(GoodByeCaptcha::TEMP_USE_JQUERY)
|
71 |
+
// {
|
72 |
+
// wp_register_script(GdbcBasePublicModule::MAIN_PUBLIC_SCRIPT_HANDLE, GdbcBasePublicModule::getMainScriptUrl(), array( 'jquery' ), self::$PLUGIN_VERSION, !(!!apply_filters('wpbruiser-scripts-in-head', true)));
|
73 |
+
//
|
74 |
+
// wp_localize_script(GdbcBasePublicModule::MAIN_PUBLIC_SCRIPT_HANDLE, 'Gdbc', array(
|
75 |
+
// 'ajaxUrl' => MchGdbcWpUtils::getAjaxUrl(),
|
76 |
+
// 'clientUrl' => esc_url(home_url('/', MchGdbcWpUtils::isSslRequest() ? 'https' : 'http') . '?gdbc-client=' . self::$PLUGIN_VERSION),
|
77 |
+
// 'formFieldName' => $this->formHiddenInputName,
|
78 |
+
// 'shortCode' => self::$PLUGIN_SHORT_CODE,
|
79 |
+
// 'slug' => self::$PLUGIN_SLUG,
|
80 |
+
// ));
|
81 |
+
//
|
82 |
+
// wp_enqueue_script(GdbcBasePublicModule::MAIN_PUBLIC_SCRIPT_HANDLE);
|
83 |
+
//
|
84 |
+
// return;
|
85 |
+
// }
|
86 |
+
|
87 |
+
$printScriptsHook = (!!apply_filters('wpbruiser_scripts_in_head', false)) ? 'wp_print_scripts' : 'wp_print_footer_scripts';
|
88 |
+
add_action($printScriptsHook, array($this, 'renderPublicScript'), 0 );
|
89 |
+
|
90 |
+
}
|
91 |
+
|
92 |
+
public function renderPublicScript()
|
93 |
+
{
|
94 |
+
static $scriptRendered = false;
|
95 |
+
if($scriptRendered) {
|
96 |
+
return;
|
97 |
+
}
|
98 |
+
|
99 |
+
$scriptRendered = true;
|
100 |
+
echo GdbcBasePublicModule::getPublicScriptInlineContent();
|
101 |
+
|
102 |
+
}
|
103 |
+
|
104 |
+
|
105 |
+
// public function addScriptToWpRocketExcludeQueue($arrFiles)
|
106 |
+
// {
|
107 |
+
// $arrFiles = (array)$arrFiles;
|
108 |
+
// $arrFiles[] = parse_url($this->clientScriptUrl, PHP_URL_PATH );
|
109 |
+
// return $arrFiles;
|
110 |
+
// }
|
111 |
+
//
|
112 |
+
// public function addScriptToAutoptimizeExcludeQueue($excludedScripts)
|
113 |
+
// {
|
114 |
+
// $excludedScripts = rtrim(trim((string)$excludedScripts), ',');
|
115 |
+
// $arrScriptsToExclude = array(
|
116 |
+
// basename($this->clientScriptUrl),
|
117 |
+
// //self::$PLUGIN_SLUG,
|
118 |
+
// //self::$PLUGIN_SHORT_CODE
|
119 |
+
// );
|
120 |
+
//
|
121 |
+
// return $excludedScripts . ', ' . implode(', ', $arrScriptsToExclude);
|
122 |
+
// }
|
123 |
+
//
|
124 |
+
// public function addScriptToWPDeferredJavaScriptsExcludeQueue($arrDeferredScripts)
|
125 |
+
// {
|
126 |
+
// $arrDeferredScripts = (array)$arrDeferredScripts;
|
127 |
+
// $arrDeferredScripts[] = self::$PLUGIN_SLUG . '-public-script';
|
128 |
+
// return $arrDeferredScripts;
|
129 |
+
// }
|
130 |
+
|
131 |
+
|
132 |
+
private function __clone()
|
133 |
+
{}
|
134 |
+
|
135 |
+
}
|
3.0.14/engine/GoodByeCaptchaUtils.php
ADDED
@@ -0,0 +1,685 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright (C) 2015 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
final class GoodByeCaptchaUtils
|
21 |
+
{
|
22 |
+
public static function isAffiliateWPActivated()
|
23 |
+
{
|
24 |
+
return class_exists('Affiliate_WP');
|
25 |
+
}
|
26 |
+
|
27 |
+
public static function isEasyDigitalDownloadsActivated()
|
28 |
+
{
|
29 |
+
return class_exists('Easy_Digital_Downloads');
|
30 |
+
}
|
31 |
+
|
32 |
+
public static function isZmAlrActivated()
|
33 |
+
{
|
34 |
+
return defined('ZM_ALR_NAMESPACE');
|
35 |
+
}
|
36 |
+
|
37 |
+
public static function isUserProfileMadeEasyActivated()
|
38 |
+
{
|
39 |
+
return defined('upme_path');
|
40 |
+
}
|
41 |
+
|
42 |
+
public static function isWooCommerceActivated()
|
43 |
+
{
|
44 |
+
return class_exists('WooCommerce');
|
45 |
+
}
|
46 |
+
|
47 |
+
public static function isUltimateMemberActivated()
|
48 |
+
{
|
49 |
+
return class_exists('UM_API');
|
50 |
+
}
|
51 |
+
|
52 |
+
public static function isUjiCountDownActivated()
|
53 |
+
{
|
54 |
+
return class_exists('Uji_Countdown');
|
55 |
+
}
|
56 |
+
|
57 |
+
public static function isQuFormActivated()
|
58 |
+
{
|
59 |
+
return class_exists('iPhorm');
|
60 |
+
}
|
61 |
+
|
62 |
+
public static function isMailPoetActivated()
|
63 |
+
{
|
64 |
+
return defined( 'WYSIJA' );
|
65 |
+
}
|
66 |
+
|
67 |
+
public static function isMailChimpForWPActivated()
|
68 |
+
{
|
69 |
+
return function_exists('__mc4wp_load_plugin') || function_exists('__mc4wp_premium_load') || function_exists('mc4wp_load_plugin') || function_exists('mc4wp_pro_load_plugin');
|
70 |
+
}
|
71 |
+
|
72 |
+
public static function isNinjaFormsActivated()
|
73 |
+
{
|
74 |
+
return class_exists('Ninja_Forms');
|
75 |
+
}
|
76 |
+
|
77 |
+
public static function isPlanSoFormsActivated()
|
78 |
+
{
|
79 |
+
return function_exists('psfb_register');
|
80 |
+
}
|
81 |
+
|
82 |
+
public static function isSeamlessDonationsActivated()
|
83 |
+
{
|
84 |
+
return function_exists('seamless_donations_init');
|
85 |
+
}
|
86 |
+
|
87 |
+
public static function isGravityFormsActivated()
|
88 |
+
{
|
89 |
+
return class_exists('GFForms');
|
90 |
+
}
|
91 |
+
|
92 |
+
public static function isContactForm7Activated()
|
93 |
+
{
|
94 |
+
return class_exists('WPCF7_ContactForm');
|
95 |
+
}
|
96 |
+
|
97 |
+
public static function isFastSecureFormActivated()
|
98 |
+
{
|
99 |
+
return class_exists('FSCF_Util');
|
100 |
+
}
|
101 |
+
|
102 |
+
public static function isFormidableFormsActivated()
|
103 |
+
{
|
104 |
+
return class_exists('FrmSettings');
|
105 |
+
}
|
106 |
+
|
107 |
+
public static function isUserProPluginActivated()
|
108 |
+
{
|
109 |
+
return class_exists('userpro_api');
|
110 |
+
}
|
111 |
+
|
112 |
+
public static function isWPRocketPluginActivated()
|
113 |
+
{
|
114 |
+
return defined('WP_ROCKET_FILE');
|
115 |
+
}
|
116 |
+
|
117 |
+
public static function isAutoptimizePluginActivated()
|
118 |
+
{
|
119 |
+
return defined('AUTOPTIMIZE_CACHE_DIR');
|
120 |
+
}
|
121 |
+
|
122 |
+
public static function isGoogleAppsLoginPluginActivated()
|
123 |
+
{
|
124 |
+
return class_exists('core_google_apps_login');
|
125 |
+
}
|
126 |
+
|
127 |
+
public static function isMemberPressPluginActivated()
|
128 |
+
{
|
129 |
+
return defined('MEPR_VERSION');
|
130 |
+
}
|
131 |
+
|
132 |
+
public static function isBuddyPressPluginActivated()
|
133 |
+
{
|
134 |
+
return class_exists('BP_Core');
|
135 |
+
}
|
136 |
+
|
137 |
+
public static function isEasyFormsForMailChimpPluginActivated()
|
138 |
+
{
|
139 |
+
return class_exists('Yikes_Inc_Easy_Mailchimp_Extender');
|
140 |
+
}
|
141 |
+
|
142 |
+
public static function isWPDJSPluginActivated() // WP Deferred JavaScripts
|
143 |
+
{
|
144 |
+
return defined('WDJS_VERSION');
|
145 |
+
}
|
146 |
+
|
147 |
+
public static function isWPDiscuzPluginActivated()
|
148 |
+
{
|
149 |
+
return class_exists('WpdiscuzCore');
|
150 |
+
}
|
151 |
+
|
152 |
+
// public static function setCookie($cookieKey, $cookieValue, $cookieTime, $path = null, $httpOnly = true)
|
153 |
+
// {
|
154 |
+
// if(headers_sent()) return;
|
155 |
+
// return setcookie($cookieKey, $cookieValue, $cookieTime + (isset($_SERVER['REQUEST_TIME']) ? $_SERVER['REQUEST_TIME'] : time()), empty($path) ? COOKIEPATH : $path, COOKIE_DOMAIN, is_ssl(), $httpOnly);
|
156 |
+
// }
|
157 |
+
//
|
158 |
+
// public static function getCookie($cookieKey)
|
159 |
+
// {
|
160 |
+
// return isset($_COOKIE[$cookieKey]) ? $_COOKIE[$cookieKey] : null;
|
161 |
+
// }
|
162 |
+
//
|
163 |
+
// public static function deleteCookie($cookieKey)
|
164 |
+
// {
|
165 |
+
// if(headers_sent()) return;
|
166 |
+
// return setcookie($cookieKey, null, (isset($_SERVER['REQUEST_TIME']) ? $_SERVER['REQUEST_TIME'] : time()) - 3600);
|
167 |
+
// }
|
168 |
+
|
169 |
+
public static function isJetPackContactFormModuleActivated()
|
170 |
+
{
|
171 |
+
return self::isJetPackModuleActivated('contact-form');
|
172 |
+
}
|
173 |
+
|
174 |
+
public static function isJetPackCommentsModuleActivated()
|
175 |
+
{
|
176 |
+
return self::isJetPackModuleActivated('comments');
|
177 |
+
}
|
178 |
+
|
179 |
+
public static function isValidReferer()
|
180 |
+
{
|
181 |
+
static $validReferer = null;
|
182 |
+
if(null !== $validReferer)
|
183 |
+
return $validReferer;
|
184 |
+
|
185 |
+
$referer = wp_get_referer();
|
186 |
+
$actualHost = parse_url(home_url(), PHP_URL_HOST);
|
187 |
+
|
188 |
+
return $validReferer = (!empty($referer) && !empty($actualHost) && false !== stripos($referer, $actualHost));
|
189 |
+
}
|
190 |
+
|
191 |
+
public static function isNginxWebServer()
|
192 |
+
{
|
193 |
+
if(empty($_SERVER['SERVER_SOFTWARE']))
|
194 |
+
return false;
|
195 |
+
|
196 |
+
return (false !== stripos($_SERVER['SERVER_SOFTWARE'], 'nginx')) && (@php_sapi_name() === 'fpm-fcgi');
|
197 |
+
}
|
198 |
+
|
199 |
+
public static function isJetPackPluginActivated()
|
200 |
+
{
|
201 |
+
return class_exists('Jetpack');
|
202 |
+
}
|
203 |
+
|
204 |
+
private static function isJetPackModuleActivated($moduleName)
|
205 |
+
{
|
206 |
+
static $arrActivatedModules = array();
|
207 |
+
if(isset($arrActivatedModules[$moduleName]))
|
208 |
+
return $arrActivatedModules[$moduleName];
|
209 |
+
|
210 |
+
return $arrActivatedModules[$moduleName] = ((null !== ($arrJetPackModules = self::getJetPackActiveModules())) &&
|
211 |
+
in_array(strtolower($moduleName), $arrJetPackModules, true));
|
212 |
+
}
|
213 |
+
|
214 |
+
private static function getJetPackActiveModules()
|
215 |
+
{
|
216 |
+
static $isActivated = null;
|
217 |
+
(null === $isActivated) ? $isActivated = class_exists( 'Jetpack' ) : null;
|
218 |
+
|
219 |
+
if( !$isActivated)
|
220 |
+
return null;
|
221 |
+
|
222 |
+
static $arrJetPackOptions = null;
|
223 |
+
if(null !== $arrJetPackOptions)
|
224 |
+
return $arrJetPackOptions;
|
225 |
+
|
226 |
+
$arrJetPackOptions = get_option('jetpack_active_modules');
|
227 |
+
if(false === $arrJetPackOptions)
|
228 |
+
return null;
|
229 |
+
|
230 |
+
foreach ($arrJetPackOptions as &$moduleName)
|
231 |
+
$moduleName = strtolower(trim($moduleName));
|
232 |
+
|
233 |
+
return $arrJetPackOptions;
|
234 |
+
}
|
235 |
+
|
236 |
+
|
237 |
+
public static function getCountryIdByCode($countryCode)
|
238 |
+
{
|
239 |
+
$countryCode = trim(strtoupper($countryCode));
|
240 |
+
|
241 |
+
foreach (self::getCountryDataSource() as $key => $value)
|
242 |
+
if ($countryCode === $value[1])
|
243 |
+
return $key;
|
244 |
+
|
245 |
+
return 0;
|
246 |
+
}
|
247 |
+
|
248 |
+
public static function getCountryCodeById($countryId)
|
249 |
+
{
|
250 |
+
$arrCountry = self::getCountryDataSource();
|
251 |
+
return isset($arrCountry[$countryId][1]) ? $arrCountry[$countryId][1] : null;
|
252 |
+
}
|
253 |
+
|
254 |
+
public static function getCountryNameById($countryId)
|
255 |
+
{
|
256 |
+
$arrCountry = self::getCountryDataSource();
|
257 |
+
return isset($arrCountry[$countryId][0]) ? $arrCountry[$countryId][0] : null;
|
258 |
+
}
|
259 |
+
|
260 |
+
public static function getCountryDataSource()
|
261 |
+
{
|
262 |
+
return array(
|
263 |
+
1 => array("Afghanistan", "AF"),
|
264 |
+
2 => array("Aland Islands", "AX"),
|
265 |
+
3 => array("Albania", "AL"),
|
266 |
+
4 => array("Algeria", "DZ"),
|
267 |
+
5 => array("American Samoa", "AS"),
|
268 |
+
6 => array("Andorra", "AD"),
|
269 |
+
7 => array("Angola", "AO"),
|
270 |
+
8 => array("Anguilla", "AI"),
|
271 |
+
9 => array("Antarctica", "AQ"),
|
272 |
+
10 => array("Antigua and Barbuda", "AG"),
|
273 |
+
11 => array("Argentina", "AR"),
|
274 |
+
12 => array("Armenia", "AM"),
|
275 |
+
13 => array("Aruba", "AW"),
|
276 |
+
14 => array("Australia", "AU"),
|
277 |
+
15 => array("Austria", "AT"),
|
278 |
+
16 => array("Azerbaijan", "AZ"),
|
279 |
+
17 => array("Bahamas", "BS"),
|
280 |
+
18 => array("Bahrain", "BH"),
|
281 |
+
19 => array("Bangladesh", "BD"),
|
282 |
+
20 => array("Barbados", "BB"),
|
283 |
+
21 => array("Belarus", "BY"),
|
284 |
+
22 => array("Belgium", "BE"),
|
285 |
+
23 => array("Belize", "BZ"),
|
286 |
+
24 => array("Benin", "BJ"),
|
287 |
+
25 => array("Bermuda", "BM"),
|
288 |
+
26 => array("Bhutan", "BT"),
|
289 |
+
27 => array("Bolivia", "BO"),
|
290 |
+
28 => array("Bosnia and Herzegovina", "BA"),
|
291 |
+
29 => array("Botswana", "BW"),
|
292 |
+
30 => array("Bouvet island", "BV"),
|
293 |
+
31 => array("Brazil", "BR"),
|
294 |
+
32 => array("British Indian Ocean", "IO"),
|
295 |
+
33 => array("Brunei Darussalam", "BN"),
|
296 |
+
34 => array("Bulgaria", "BG"),
|
297 |
+
35 => array("Burkina Faso", "BF"),
|
298 |
+
36 => array("Burundi", "BI"),
|
299 |
+
37 => array("Cambodia", "KH"),
|
300 |
+
38 => array("Cameroon", "CM"),
|
301 |
+
39 => array("Canada", "CA"),
|
302 |
+
40 => array("Cape Verde", "CV"),
|
303 |
+
41 => array("Cayman Islands", "KY"),
|
304 |
+
42 => array("Central African Republic", "CF"),
|
305 |
+
43 => array("Chad", "TD"),
|
306 |
+
44 => array("Chile", "CL"),
|
307 |
+
45 => array("China", "CN"),
|
308 |
+
46 => array("Christmas Island", "CX"),
|
309 |
+
47 => array("Cocos Islands", "CC"),
|
310 |
+
48 => array("Colombia", "CO"),
|
311 |
+
49 => array("Comoros", "KM"),
|
312 |
+
50 => array("Congo", "CG"),
|
313 |
+
51 => array("Congo", "CD"),
|
314 |
+
52 => array("Cook Islands", "CK"),
|
315 |
+
53 => array("Costa Rica", "CR"),
|
316 |
+
54 => array("Cote d'Ivoire", "CI"),
|
317 |
+
55 => array("Croatia", "HR"),
|
318 |
+
56 => array("Cuba", "CU"),
|
319 |
+
57 => array("Cyprus", "CY"),
|
320 |
+
58 => array("Czech Republic", "CZ"),
|
321 |
+
59 => array("Denmark", "DK"),
|
322 |
+
60 => array("Djibouti", "DJ"),
|
323 |
+
61 => array("Dominica", "DM"),
|
324 |
+
62 => array("Dominican republic", "DO"),
|
325 |
+
63 => array("Ecuador", "EC"),
|
326 |
+
64 => array("Egypt", "EG"),
|
327 |
+
65 => array("El Salvador", "SV"),
|
328 |
+
66 => array("Equatorial Guinea", "GQ"),
|
329 |
+
67 => array("Eritrea", "ER"),
|
330 |
+
68 => array("Estonia", "EE"),
|
331 |
+
69 => array("Ethiopia", "ET"),
|
332 |
+
70 => array("Falkland Islands", "FK"),
|
333 |
+
71 => array("Faroe Islands", "FO"),
|
334 |
+
72 => array("Fiji", "FJ"),
|
335 |
+
73 => array("Finland", "FI"),
|
336 |
+
74 => array("France", "FR"),
|
337 |
+
75 => array("French Guiana", "GF"),
|
338 |
+
76 => array("French Polynesia", "PF"),
|
339 |
+
77 => array("French Southern Territories", "TF"),
|
340 |
+
78 => array("Gabon", "GA"),
|
341 |
+
79 => array("Gambia", "GM"),
|
342 |
+
80 => array("Georgia", "GE"),
|
343 |
+
81 => array("Germany", "DE"),
|
344 |
+
82 => array("Ghana", "GH"),
|
345 |
+
83 => array("Gibraltar", "GI"),
|
346 |
+
84 => array("Greece", "GR"),
|
347 |
+
85 => array("Greenland", "GL"),
|
348 |
+
86 => array("Grenada", "GD"),
|
349 |
+
87 => array("Guadeloupe", "GP"),
|
350 |
+
88 => array("Guam", "GU"),
|
351 |
+
89 => array("Guatemala", "GT"),
|
352 |
+
90 => array("Guernsey", "GG"),
|
353 |
+
91 => array("Guinea", "GN"),
|
354 |
+
92 => array("Guinea-Bissau", "GW"),
|
355 |
+
93 => array("Guyana", "GY"),
|
356 |
+
94 => array("Haiti", "HT"),
|
357 |
+
95 => array("Heard and Mcdonald Islands", "HM"),
|
358 |
+
96 => array("Vatican", "VA"),
|
359 |
+
97 => array("Honduras", "HN"),
|
360 |
+
98 => array("Hong Kong", "HK"),
|
361 |
+
99 => array("Hungary", "HU"),
|
362 |
+
100 => array("Iceland", "IS"),
|
363 |
+
101 => array("India", "IN"),
|
364 |
+
102 => array("Indonesia", "ID"),
|
365 |
+
103 => array("Iran", "IR"),
|
366 |
+
104 => array("Iraq", "IQ"),
|
367 |
+
105 => array("Ireland", "IE"),
|
368 |
+
106 => array("Isle of Man", "IM"),
|
369 |
+
107 => array("Israel", "IL"),
|
370 |
+
108 => array("Italy", "IT"),
|
371 |
+
109 => array("Jamaica", "JM"),
|
372 |
+
110 => array("Japan", "JP"),
|
373 |
+
111 => array("Jersey", "JE"),
|
374 |
+
112 => array("Jordan", "JO"),
|
375 |
+
113 => array("Kazakhstan", "KZ"),
|
376 |
+
114 => array("Kenya", "KE"),
|
377 |
+
115 => array("Kiribati", "KI"),
|
378 |
+
116 => array("Korea", "KR"),
|
379 |
+
117 => array("Korea - North", "KP"),
|
380 |
+
118 => array("Kuwait", "KW"),
|
381 |
+
119 => array("Kyrgyzstan", "KG"),
|
382 |
+
120 => array("Lao Republic", "LA"),
|
383 |
+
121 => array("Latvia", "LV"),
|
384 |
+
122 => array("Lebanon", "LB"),
|
385 |
+
123 => array("Lesotho", "LS"),
|
386 |
+
124 => array("Liberia", "LR"),
|
387 |
+
125 => array("Libyan Arab Jamahiriya", "LY"),
|
388 |
+
126 => array("Liechtenstein", "LI"),
|
389 |
+
127 => array("Lithuania", "LT"),
|
390 |
+
128 => array("Luxembourg", "LU"),
|
391 |
+
129 => array("Macao", "MO"),
|
392 |
+
130 => array("Macedonia", "MK"),
|
393 |
+
131 => array("Madagascar", "MG"),
|
394 |
+
132 => array("Malawi", "MW"),
|
395 |
+
133 => array("Malaysia", "MY"),
|
396 |
+
134 => array("Maldives", "MV"),
|
397 |
+
135 => array("Mali", "ML"),
|
398 |
+
136 => array("Malta", "MT"),
|
399 |
+
137 => array("Marshall Islands", "MH"),
|
400 |
+
138 => array("Martinique", "MQ"),
|
401 |
+
139 => array("Mauritania", "MR"),
|
402 |
+
140 => array("Mauritius", "MU"),
|
403 |
+
141 => array("Mayotte", "YT"),
|
404 |
+
142 => array("Mexico", "MX"),
|
405 |
+
143 => array("Micronesia", "FM"),
|
406 |
+
144 => array("Moldova", "MD"),
|
407 |
+
145 => array("Monaco", "MC"),
|
408 |
+
146 => array("Mongolia", "MN"),
|
409 |
+
147 => array("Montenegro", "ME"),
|
410 |
+
148 => array("Montserrat", "MS"),
|
411 |
+
149 => array("Morocco", "MA"),
|
412 |
+
150 => array("Mozambique", "MZ"),
|
413 |
+
151 => array("Myanmar", "MM"),
|
414 |
+
152 => array("Namibia", "NA"),
|
415 |
+
153 => array("Nauru", "NR"),
|
416 |
+
154 => array("Nepal", "NP"),
|
417 |
+
155 => array("Netherlands", "NL"),
|
418 |
+
156 => array("Netherlands Antilles", "AN"),
|
419 |
+
157 => array("New Caledonia", "NC"),
|
420 |
+
158 => array("New Zealand", "NZ"),
|
421 |
+
159 => array("Nicaragua", "NI"),
|
422 |
+
160 => array("Niger", "NE"),
|
423 |
+
161 => array("Nigeria", "NG"),
|
424 |
+
162 => array("Niue", "NU"),
|
425 |
+
163 => array("Norfolk Island", "NF"),
|
426 |
+
164 => array("Northern Mariana Islands", "MP"),
|
427 |
+
165 => array("Norway", "NO"),
|
428 |
+
166 => array("Oman", "OM"),
|
429 |
+
167 => array("Pakistan", "PK"),
|
430 |
+
168 => array("Palau", "PW"),
|
431 |
+
169 => array("Palestinian Territory Occupied", "PS"),
|
432 |
+
170 => array("Panama", "PA"),
|
433 |
+
171 => array("Papua New Guinea", "PG"),
|
434 |
+
172 => array("Paraguay", "PY"),
|
435 |
+
173 => array("Peru", "PE"),
|
436 |
+
174 => array("Philippines", "PH"),
|
437 |
+
175 => array("Pitcairn", "PN"),
|
438 |
+
176 => array("Poland", "PL"),
|
439 |
+
177 => array("Portugal", "PT"),
|
440 |
+
178 => array("Puerto rico", "PR"),
|
441 |
+
179 => array("Qatar", "QA"),
|
442 |
+
180 => array("Reunion", "RE"),
|
443 |
+
181 => array("Romania", "RO"),
|
444 |
+
182 => array("Russian Federation", "RU"),
|
445 |
+
183 => array("Rwanda", "RW"),
|
446 |
+
184 => array("Saint Barthelemy", "BL"),
|
447 |
+
185 => array("Saint Helena", "SH"),
|
448 |
+
186 => array("Saint Kitts and Nevis", "KN"),
|
449 |
+
187 => array("Saint Lucia", "LC"),
|
450 |
+
188 => array("Saint Martin", "MF"),
|
451 |
+
189 => array("Saint Pierre and Miquelon", "PM"),
|
452 |
+
190 => array("Saint Vincent", "VC"),
|
453 |
+
191 => array("Samoa", "WS"),
|
454 |
+
192 => array("San Marino", "SM"),
|
455 |
+
193 => array("Sao Tome and Principe", "ST"),
|
456 |
+
194 => array("Saudi Arabia", "SA"),
|
457 |
+
195 => array("Senegal", "SN"),
|
458 |
+
196 => array("Serbia", "RS"),
|
459 |
+
197 => array("Seychelles", "SC"),
|
460 |
+
198 => array("Sierra Leone", "SL"),
|
461 |
+
199 => array("Singapore", "SG"),
|
462 |
+
200 => array("Slovakia", "SK"),
|
463 |
+
201 => array("Slovenia", "SI"),
|
464 |
+
202 => array("Solomon Islands", "SB"),
|
465 |
+
203 => array("Somalia", "SO"),
|
466 |
+
204 => array("South Africa", "ZA"),
|
467 |
+
205 => array("South Georgia and Islands", "GS"),
|
468 |
+
206 => array("Spain", "ES"),
|
469 |
+
207 => array("Sri Lanka", "LK"),
|
470 |
+
208 => array("Sudan", "SD"),
|
471 |
+
209 => array("Suriname", "SR"),
|
472 |
+
210 => array("Svalbard and Jan Mayen", "SJ"),
|
473 |
+
211 => array("Swaziland", "SZ"),
|
474 |
+
212 => array("Sweden", "SE"),
|
475 |
+
213 => array("Switzerland", "CH"),
|
476 |
+
214 => array("Syrian Arab Republic", "SY"),
|
477 |
+
215 => array("Taiwan", "TW"),
|
478 |
+
216 => array("Tajikistan", "TJ"),
|
479 |
+
217 => array("Tanzania", "TZ"),
|
480 |
+
218 => array("Thailand", "TH"),
|
481 |
+
219 => array("Timor-Leste", "TL"),
|
482 |
+
220 => array("Togo", "TG"),
|
483 |
+
221 => array("Tokelau", "TK"),
|
484 |
+
222 => array("Tonga", "TO"),
|
485 |
+
223 => array("Trinidad and Tobago", "TT"),
|
486 |
+
224 => array("Tunisia", "TN"),
|
487 |
+
225 => array("Turkey", "TR"),
|
488 |
+
226 => array("Turkmenistan", "TM"),
|
489 |
+
227 => array("Turks and Caicos Islands", "TC"),
|
490 |
+
228 => array("Tuvalu", "TV"),
|
491 |
+
229 => array("Uganda", "UG"),
|
492 |
+
230 => array("Ukraine", "UA"),
|
493 |
+
231 => array("United Arab Emirates", "AE"),
|
494 |
+
232 => array("United Kingdom", "GB"),
|
495 |
+
233 => array("United States", "US"),
|
496 |
+
234 => array("United States Minor Islands", "UM"),
|
497 |
+
235 => array("Uruguay", "UY"),
|
498 |
+
236 => array("Uzbekistan", "UZ"),
|
499 |
+
237 => array("Vanuatu", "VU"),
|
500 |
+
238 => array("Venezuela", "VE"),
|
501 |
+
239 => array("Vietnam", "VN"),
|
502 |
+
240 => array("Virgin Islands British", "VG"),
|
503 |
+
241 => array("Virgin Islands U.S.", "VI"),
|
504 |
+
242 => array("Wallis and Futuna", "WF"),
|
505 |
+
243 => array("Western Sahara", "EH"),
|
506 |
+
244 => array("Yemen", "YE"),
|
507 |
+
245 => array("Zambia", "ZM"),
|
508 |
+
246 => array("Zimbabwe", "ZW"),
|
509 |
+
247 => array("South Sudan", "SS"),
|
510 |
+
248 => array("Sint Maarten", "SX"),
|
511 |
+
249 => array("Curacao", "CW"),
|
512 |
+
250 => array("Bonaire", "BQ")
|
513 |
+
);
|
514 |
+
}
|
515 |
+
|
516 |
+
|
517 |
+
public static function isPostRequestForWPStandardLogin()
|
518 |
+
{
|
519 |
+
return !empty($_POST) && function_exists('login_header') && !MchGdbcWpUtils::isAjaxRequest();
|
520 |
+
}
|
521 |
+
|
522 |
+
public static function isLoginAttemptEntity(GdbcAttemptEntity $attemptEntity)
|
523 |
+
{
|
524 |
+
foreach(self::getAllPossibleLoginAttemptEntities() as $loginAttemptEntity)
|
525 |
+
{
|
526 |
+
if( ($loginAttemptEntity->ModuleId == $attemptEntity->ModuleId) && ($loginAttemptEntity->SectionId == $attemptEntity->SectionId) )
|
527 |
+
return true;
|
528 |
+
}
|
529 |
+
|
530 |
+
return false;
|
531 |
+
}
|
532 |
+
|
533 |
+
public static function getAllPossibleLoginAttemptEntities()
|
534 |
+
{
|
535 |
+
static $loginEntitiesList = null;
|
536 |
+
if(null !== $loginEntitiesList)
|
537 |
+
return $loginEntitiesList;
|
538 |
+
|
539 |
+
$loginEntitiesList = array();
|
540 |
+
|
541 |
+
foreach(GdbcModulesController::getRegisteredModules() as $moduleName => $arrModuleClasses)
|
542 |
+
{
|
543 |
+
switch($moduleName)
|
544 |
+
{
|
545 |
+
case GdbcModulesController::MODULE_WORDPRESS :
|
546 |
+
$loginEntitiesList[] = new GdbcAttemptEntity(GdbcModulesController::getModuleIdByName($moduleName), GdbcWordPressAdminModule::WORDPRESS_LOGIN_FORM);
|
547 |
+
$loginEntitiesList[] = new GdbcAttemptEntity(GdbcModulesController::getModuleIdByName($moduleName), GdbcWordPressAdminModule::WORDPRESS_LOGIN_XML_RPC);
|
548 |
+
break;
|
549 |
+
|
550 |
+
case GdbcModulesController::MODULE_ULTIMATE_MEMBER :
|
551 |
+
$loginEntitiesList[] = new GdbcAttemptEntity(GdbcModulesController::getModuleIdByName($moduleName), GdbcUltimateMemberAdminModule::OPTION_ULTIMATE_MEMBER_LOGIN_FORM);
|
552 |
+
break;
|
553 |
+
|
554 |
+
case GdbcModulesController::MODULE_WOOCOMMERCE :
|
555 |
+
$loginEntitiesList[] = new GdbcAttemptEntity(GdbcModulesController::getModuleIdByName($moduleName), GdbcWooCommerceAdminModule::WOOCOMMERCE_LOGIN_FORM);
|
556 |
+
break;
|
557 |
+
|
558 |
+
case GdbcModulesController::MODULE_USER_PRO :
|
559 |
+
$loginEntitiesList[] = new GdbcAttemptEntity(GdbcModulesController::getModuleIdByName($moduleName), GdbcUserProAdminModule::OPTION_LOGIN_FORM_PROTECTION_ACTIVATED);
|
560 |
+
break;
|
561 |
+
|
562 |
+
case GdbcModulesController::MODULE_UPME :
|
563 |
+
$loginEntitiesList[] = new GdbcAttemptEntity(GdbcModulesController::getModuleIdByName($moduleName), GdbcUPMEAdminModule::UPME_LOGIN_FORM);
|
564 |
+
break;
|
565 |
+
|
566 |
+
case GdbcModulesController::MODULE_ZM_ALR :
|
567 |
+
$loginEntitiesList[] = new GdbcAttemptEntity(GdbcModulesController::getModuleIdByName($moduleName), GdbcZmAlrAdminModule::OPTION_ZM_ALR_LOGIN_FORM);
|
568 |
+
break;
|
569 |
+
|
570 |
+
case GdbcModulesController::MODULE_PLANSO_FORMS :
|
571 |
+
$loginEntitiesList[] = new GdbcAttemptEntity(GdbcModulesController::getModuleIdByName($moduleName), GdbcPlanSoFormsAdminModule::OPTION_PLANSO_LOGIN_FORM);
|
572 |
+
break;
|
573 |
+
|
574 |
+
case GdbcModulesController::MODULE_MEMBER_PRESS :
|
575 |
+
$loginEntitiesList[] = new GdbcAttemptEntity(GdbcModulesController::getModuleIdByName($moduleName), GdbcMemberPressAdminModule::OPTION_MEMBER_PRESS_LOGIN_FORM);
|
576 |
+
break;
|
577 |
+
|
578 |
+
case GdbcModulesController::MODULE_EASY_DIGITAL_DOWNLOADS :
|
579 |
+
$loginEntitiesList[] = new GdbcAttemptEntity(GdbcModulesController::getModuleIdByName($moduleName), GdbcEDDAdminModule::EDD_LOGIN_FORM);
|
580 |
+
break;
|
581 |
+
|
582 |
+
case GdbcModulesController::MODULE_AFFILIATE_WP :
|
583 |
+
$loginEntitiesList[] = new GdbcAttemptEntity(GdbcModulesController::getModuleIdByName($moduleName), GdbcAffiliateWPAdminModule::AFFILIATE_WP_LOGIN_FORM);
|
584 |
+
break;
|
585 |
+
|
586 |
+
}
|
587 |
+
}
|
588 |
+
|
589 |
+
foreach($loginEntitiesList as $index => &$attemptEntity)
|
590 |
+
{
|
591 |
+
$attemptEntity->SectionId = GdbcModulesController::getAdminModuleInstance(GdbcModulesController::getModuleNameById($attemptEntity->ModuleId))->getOptionIdByOptionName($attemptEntity->SectionId);
|
592 |
+
unset($attemptEntity->Id, $attemptEntity->ClientIp, $attemptEntity->CreatedDate, $attemptEntity->Notes, $attemptEntity->ReasonId, $attemptEntity->SiteId);
|
593 |
+
}
|
594 |
+
|
595 |
+
return $loginEntitiesList;
|
596 |
+
}
|
597 |
+
|
598 |
+
|
599 |
+
|
600 |
+
|
601 |
+
public static function flushSiteCache($siteId = 0)
|
602 |
+
{
|
603 |
+
$siteId = absint($siteId);
|
604 |
+
if($siteId === 0)
|
605 |
+
$siteId = get_current_blog_id();
|
606 |
+
|
607 |
+
// $blogDetails = get_blog_details($siteId, false);
|
608 |
+
// if(empty($blogDetails))
|
609 |
+
// return;
|
610 |
+
|
611 |
+
// unset($blogDetails);
|
612 |
+
|
613 |
+
$shouldSwitchSite = ($siteId !== get_current_blog_id());
|
614 |
+
|
615 |
+
($shouldSwitchSite) ? switch_to_blog( $siteId) : null;
|
616 |
+
|
617 |
+
if(function_exists('w3tc_flush_all')) { // w3tc
|
618 |
+
w3tc_flush_all();
|
619 |
+
}
|
620 |
+
|
621 |
+
if(function_exists('wp_cache_clear_cache')){ // wp super cache
|
622 |
+
wp_cache_clear_cache();
|
623 |
+
}
|
624 |
+
|
625 |
+
if(isset($GLOBALS['wp_fastest_cache']) && method_exists($GLOBALS['wp_fastest_cache'], 'deleteCache')){ // wp fastest cache
|
626 |
+
$GLOBALS['wp_fastest_cache']->deleteCache();
|
627 |
+
}
|
628 |
+
|
629 |
+
if(class_exists('zencache') && method_exists('zencache', 'clear')){ // zencache
|
630 |
+
zencache::clear();
|
631 |
+
}
|
632 |
+
|
633 |
+
if(self::isAutoptimizePluginActivated() && is_callable( array('autoptimizeCache','clearall') )){
|
634 |
+
autoptimizeCache::clearall();
|
635 |
+
}
|
636 |
+
|
637 |
+
if(self::isWPRocketPluginActivated()){
|
638 |
+
if(function_exists('do_rocket_purge_cron')){
|
639 |
+
do_rocket_purge_cron();
|
640 |
+
}
|
641 |
+
else
|
642 |
+
{
|
643 |
+
function_exists('rocket_clean_domain') ? rocket_clean_domain() : null;
|
644 |
+
function_exists('rocket_clean_minify') ? rocket_clean_minify() : null;
|
645 |
+
function_exists('run_rocket_bot') ? run_rocket_bot( 'cache-preload' ) : null;
|
646 |
+
}
|
647 |
+
}
|
648 |
+
|
649 |
+
|
650 |
+
($shouldSwitchSite) ? restore_current_blog() : null;
|
651 |
+
}
|
652 |
+
|
653 |
+
|
654 |
+
/*
|
655 |
+
* return /MchGdbcCache
|
656 |
+
*/
|
657 |
+
public static function getAvailableCacheStorage($dirPathForFileStorage)
|
658 |
+
{
|
659 |
+
static $cacheStorage = false;
|
660 |
+
if(false !== $cacheStorage)
|
661 |
+
return $cacheStorage;
|
662 |
+
|
663 |
+
$arrPossibleCacheStorage = array(
|
664 |
+
!empty($dirPathForFileStorage) ? new MchGdbcCacheFileStorage($dirPathForFileStorage, true, 'wbr') : null,
|
665 |
+
new MchGdbcWordPressTransientsStorage(false),
|
666 |
+
new MchGdbcCacheAPCUStorage(),
|
667 |
+
new MchGdbcCacheAPCStorage(),
|
668 |
+
new MchGdbcCacheXCacheStorage(),
|
669 |
+
new MchGdbcCacheZendMemoryStorage(),
|
670 |
+
new MchGdbcCacheZendDiskStorage(),
|
671 |
+
new MchGdbcWordPressTransientsStorage(true),
|
672 |
+
);
|
673 |
+
|
674 |
+
foreach ($arrPossibleCacheStorage as $cacheStorageObject) {
|
675 |
+
if (null === $cacheStorageObject || !$cacheStorageObject->isAvailable())
|
676 |
+
continue;
|
677 |
+
|
678 |
+
return $cacheStorage = new MchGdbcCache($cacheStorageObject);
|
679 |
+
}
|
680 |
+
|
681 |
+
return $cacheStorage = null;
|
682 |
+
}
|
683 |
+
|
684 |
+
|
685 |
+
}
|
3.0.14/engine/admin/GdbcAdminNotice.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Copyright (C) 2015 Mihai Chelaru
|
5 |
+
*
|
6 |
+
* This program is free software; you can redistribute it and/or
|
7 |
+
* modify it under the terms of the GNU General Public License
|
8 |
+
* as published by the Free Software Foundation; either version 2
|
9 |
+
* of the License, or (at your option) any later version.
|
10 |
+
*
|
11 |
+
* This program is distributed in the hope that it will be useful,
|
12 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14 |
+
* GNU General Public License for more details.
|
15 |
+
*
|
16 |
+
* You should have received a copy of the GNU General Public License
|
17 |
+
* along with this program; if not, write to the Free Software
|
18 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
19 |
+
*/
|
20 |
+
|
21 |
+
final class GdbcAdminNotice extends MchGdbcAdminNotice
|
22 |
+
{
|
23 |
+
CONST USER_IP_WEB_ATTACKER_NOTICE_KEY = 'UserIpWebAttacker';
|
24 |
+
CONST USER_IP_PROXY_ANONYM_NOTICE_KEY = 'UserIpProxyAnonym';
|
25 |
+
CONST UNTRUSTED_PROXY_HEADER_DETECTED = 'UntrustedProxyHeader';
|
26 |
+
|
27 |
+
|
28 |
+
public function __construct($noticeKey, $noticeType, $noticeMessage = null)
|
29 |
+
{
|
30 |
+
parent::__construct( $noticeKey, $noticeType, $noticeMessage );
|
31 |
+
}
|
32 |
+
|
33 |
+
}
|
3.0.14/engine/admin/pages/GdbcBaseAdminPage.php
ADDED
@@ -0,0 +1,400 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (C) 2016 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
abstract class GdbcBaseAdminPage extends MchGdbcBaseAdminPage
|
21 |
+
{
|
22 |
+
protected static $arrPageInstances = array();
|
23 |
+
|
24 |
+
public function __construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug)
|
25 |
+
{
|
26 |
+
parent::__construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug);
|
27 |
+
$this->setPageLayoutColumns(2);
|
28 |
+
self::$arrPageInstances[get_class($this)] = $this;
|
29 |
+
}
|
30 |
+
|
31 |
+
public function registerPageMetaBoxes()
|
32 |
+
{
|
33 |
+
|
34 |
+
parent::registerPageMetaBoxes();
|
35 |
+
|
36 |
+
if($this->getPageLayoutColumns() <= 1)
|
37 |
+
return;
|
38 |
+
|
39 |
+
add_meta_box(
|
40 |
+
"gdbc-help-metabox",
|
41 |
+
__('Need help? Have questions...?', GoodByeCaptcha::PLUGIN_SLUG),
|
42 |
+
array( $this, 'renderNeedHelpMetaBox' ),
|
43 |
+
$this->getAdminScreenId(),
|
44 |
+
'side',
|
45 |
+
'core',
|
46 |
+
null
|
47 |
+
);
|
48 |
+
|
49 |
+
$arrPremiumExtensions = self::getPremiumExtensions(true);
|
50 |
+
if(!empty($arrPremiumExtensions) && is_array($arrPremiumExtensions))
|
51 |
+
{
|
52 |
+
add_meta_box(
|
53 |
+
"gdbc-available-extension-metabox",
|
54 |
+
__('Do you need more protection?', GoodByeCaptcha::PLUGIN_SLUG),
|
55 |
+
array( $this, 'renderAvailableExtensionMetaBox' ),
|
56 |
+
$this->getAdminScreenId(),
|
57 |
+
'side',
|
58 |
+
'core',
|
59 |
+
null
|
60 |
+
);
|
61 |
+
|
62 |
+
}
|
63 |
+
|
64 |
+
|
65 |
+
// if( ! GdbcSettingsAdminModule::getInstance()->getOption(GdbcSettingsAdminModule::OPTION_HIDE_SUBSCRIBE_FORM) )
|
66 |
+
// {
|
67 |
+
// add_meta_box(
|
68 |
+
// "gdbc-subscribe-metabox",
|
69 |
+
// __('Get exclusive email updates', GoodByeCaptcha::PLUGIN_SLUG),
|
70 |
+
// array($this, 'renderSubscriptionMetaBox'),
|
71 |
+
// $this->getAdminScreenId(),
|
72 |
+
// 'side',
|
73 |
+
// 'core',
|
74 |
+
// null
|
75 |
+
// );
|
76 |
+
// }
|
77 |
+
|
78 |
+
add_meta_box(
|
79 |
+
"gdbc-help-metabox-test",
|
80 |
+
__('How to verify if it works?', GoodByeCaptcha::PLUGIN_SLUG),
|
81 |
+
array( $this, 'renderHowToTestMetaBox' ),
|
82 |
+
$this->getAdminScreenId(),
|
83 |
+
'side',
|
84 |
+
'low',
|
85 |
+
null
|
86 |
+
);
|
87 |
+
|
88 |
+
}
|
89 |
+
|
90 |
+
public function renderAvailableExtensionMetaBox()
|
91 |
+
{
|
92 |
+
$arrPremiumExtensions = self::getPremiumExtensions(true);
|
93 |
+
|
94 |
+
if(!empty($arrPremiumExtensions) && is_array($arrPremiumExtensions))
|
95 |
+
shuffle($arrPremiumExtensions);
|
96 |
+
else
|
97 |
+
return;
|
98 |
+
|
99 |
+
$availableExtension =reset($arrPremiumExtensions);
|
100 |
+
|
101 |
+
$moduleName = GdbcModulesController::getModuleDisplayName($availableExtension['module']);
|
102 |
+
|
103 |
+
$outputHtml = "<h3 style=\"text-align:center\">There is a WPBruiser Extension for</h3>";
|
104 |
+
$outputHtml .= "<h3 style=\"text-align:center\"><a href=\"{$availableExtension['url']}\">$moduleName</a></h3>";
|
105 |
+
$outputHtml .= '<div><img class="logo-help" src="' . $availableExtension['img-src'] . '" /></div>';
|
106 |
+
$outputHtml .= '<p class="contact-help"> <a class = "button-primary" href="' . $availableExtension['url'] . '" target="_blank">'. __('Get this Extension', GoodByeCaptcha::PLUGIN_SLUG) .'</a></p>';
|
107 |
+
|
108 |
+
echo $outputHtml;
|
109 |
+
|
110 |
+
}
|
111 |
+
|
112 |
+
public function renderSubscriptionMetaBox()
|
113 |
+
{
|
114 |
+
$emailValue = esc_attr(MchGdbcWpUtils::getAdminEmailAddress());
|
115 |
+
|
116 |
+
$subscribeFormHtml = '<form id = "gdbc-subscribe-frm">';
|
117 |
+
$subscribeFormHtml .= '<p>';
|
118 |
+
|
119 |
+
$subscribeFormHtml .= '<label for = "gdbc-Email">' . __('Your Email Address', GoodByeCaptcha::PLUGIN_SLUG) . '</label>';
|
120 |
+
$subscribeFormHtml .= '<input id = "gdbc-Email" value="'.$emailValue.'" class="regular-text" type="email" required="" name="EMAIL" autocomplete="off" autocorrect="off" />';
|
121 |
+
|
122 |
+
$subscribeFormHtml .= '</p>';
|
123 |
+
|
124 |
+
$buttonValue = esc_attr(__('Subscribe', GoodByeCaptcha::PLUGIN_SLUG));
|
125 |
+
|
126 |
+
$subscribeFormHtml .= '<input type="submit" value="'.$buttonValue.'" class="button button-primary" />';
|
127 |
+
|
128 |
+
$subscribeFormHtml .= '</p>';
|
129 |
+
|
130 |
+
$subscribeFormHtml .= '<input type="hidden" name="b_5a2f4e669c2e2427b7e6d8ad9_5da2802c23" tabindex="-1" value="">';
|
131 |
+
|
132 |
+
$subscribeFormHtml .= '</form>';
|
133 |
+
|
134 |
+
echo $subscribeFormHtml;
|
135 |
+
}
|
136 |
+
|
137 |
+
public function renderNeedHelpMetaBox()
|
138 |
+
{
|
139 |
+
$img = plugins_url('/assets/admin/images/wpbr-logo.png', GoodByeCaptcha::getMainFilePath());
|
140 |
+
|
141 |
+
$display_div = '<div><img class="logo-help" src="' . esc_attr($img) . '" /></div>';
|
142 |
+
|
143 |
+
$display_div .= '<p class="contact-help"> <a class = "button-primary" href="' . GoodByeCaptcha::PLUGIN_SITE_URL . '/contact" target="_blank">Contact Us</a></p>';
|
144 |
+
|
145 |
+
echo $display_div;
|
146 |
+
}
|
147 |
+
|
148 |
+
public function renderHowToTestMetaBox()
|
149 |
+
{
|
150 |
+
$settingsPageUrl = isset(self::$arrPageInstances['GdbcSettingsAdminPage']) ? self::$arrPageInstances['GdbcSettingsAdminPage']->getAdminUrl() : '';
|
151 |
+
$notificationsPageUrl = isset(self::$arrPageInstances['GdbcNotificationsAdminPage']) ? self::$arrPageInstances['GdbcNotificationsAdminPage']->getAdminUrl() : '';
|
152 |
+
|
153 |
+
$textInfo = __('In order to verify if WPBruiser works as expected, just go to, ', GoodByeCaptcha::PLUGIN_SLUG);
|
154 |
+
$textInfo .= MchGdbcHtmlUtils::createAnchorElement(__('Settings Page', GoodByeCaptcha::PLUGIN_SLUG), array('href' => $settingsPageUrl));
|
155 |
+
$textInfo .= __(' and <b>Switch the plugin to Test Mode</b>. <br/>While in test mode, the plugin just verifies if it can properly protect the enabled options and sends email notifications to the email address you set in ', GoodByeCaptcha::PLUGIN_SLUG);
|
156 |
+
$textInfo .= MchGdbcHtmlUtils::createAnchorElement(__('Notifications Page', GoodByeCaptcha::PLUGIN_SLUG), array('href' => $notificationsPageUrl));
|
157 |
+
|
158 |
+
$textInfo .= __(' For example, if you want to test the login form protection, just enable protection for the WordPress Login Form, logout from your dashboard and login again. The plugin will send an email notification letting you know if you can keep the protection activated.', GoodByeCaptcha::PLUGIN_SLUG);
|
159 |
+
|
160 |
+
$textInfo .= __(' In case something goes wrong, a warning message will be shown.', GoodByeCaptcha::PLUGIN_SLUG);
|
161 |
+
|
162 |
+
echo '<p style="text-align: justify">' . $textInfo . "</p>";
|
163 |
+
|
164 |
+
$textInfo = '<div class = "mch-meta-notice-warning">';
|
165 |
+
$textInfo .= __('<b>Turn off Test Mode as soon as you\'re done with testing!</b>', GoodByeCaptcha::PLUGIN_SLUG);
|
166 |
+
$textInfo .= '</div>';
|
167 |
+
|
168 |
+
echo $textInfo;
|
169 |
+
|
170 |
+
}
|
171 |
+
|
172 |
+
|
173 |
+
public static function getPremiumExtensions($forRightSide = false)
|
174 |
+
{
|
175 |
+
|
176 |
+
$arrPremiumExtensions = array(
|
177 |
+
|
178 |
+
array(
|
179 |
+
'name' => 'Contact Form 7',
|
180 |
+
'url' => 'http://www.wpbruiser.com/downloads/contact-form-7/',
|
181 |
+
'img-src' => '//ps.w.org/contact-form-7/assets/icon-128x128.png',
|
182 |
+
'descr' => 'Let WPBruiser protect your Contact Form 7 form without any hard to read captcha images or any other user interaction',
|
183 |
+
'category-name' => __('Contact Forms', GoodByeCaptcha::PLUGIN_SLUG),
|
184 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/contact-forms/',
|
185 |
+
'module' => GdbcModulesController::MODULE_CONTACT_FORM_7,
|
186 |
+
'detected' => GoodByeCaptchaUtils::isContactForm7Activated(),
|
187 |
+
),
|
188 |
+
|
189 |
+
array(
|
190 |
+
'name' => 'WooCommerce',
|
191 |
+
'url' => 'http://www.wpbruiser.com/downloads/woocommerce/',
|
192 |
+
'img-src' => '//ps.w.org/woocommerce/assets/icon-128x128.png',
|
193 |
+
'descr' => 'Let WPBruiser protect your WooCommerce forms without any hard to read captcha images or any other user interaction',
|
194 |
+
'category-name' => __('eCommerce', GoodByeCaptcha::PLUGIN_SLUG),
|
195 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/ecommerce/',
|
196 |
+
'module' => GdbcModulesController::MODULE_WOOCOMMERCE,
|
197 |
+
'detected' => GoodByeCaptchaUtils::isWooCommerceActivated(),
|
198 |
+
),
|
199 |
+
|
200 |
+
array(
|
201 |
+
'name' => 'Country Blocking',
|
202 |
+
'url' => 'http://www.wpbruiser.com/downloads/country-blocking/',
|
203 |
+
'img-src' => esc_attr(plugins_url('/assets/admin/images/country-blocking-128x128.png', GoodByeCaptcha::getMainFilePath())),
|
204 |
+
'descr' => 'Add an additional layer of security to your WordPress site by blocking users/spambots from specific countries.',
|
205 |
+
'category-name' => __('Utilities', GoodByeCaptcha::PLUGIN_SLUG),
|
206 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/utilities/',
|
207 |
+
'module' => GdbcModulesController::MODULE_COUNTRY_BLOCKING,
|
208 |
+
'detected' => !GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_COUNTRY_BLOCKING)
|
209 |
+
),
|
210 |
+
|
211 |
+
array(
|
212 |
+
'name' => 'Gravity Forms',
|
213 |
+
'url' => 'http://www.wpbruiser.com/downloads/gravity-forms/',
|
214 |
+
'img-src' => esc_attr(plugins_url('/assets/admin/images/gravity-forms-logo-128x128.png', GoodByeCaptcha::getMainFilePath())),
|
215 |
+
'descr' => 'Let WPBruiser protect your Gravity Forms without any hard to read captcha images or any other user interaction',
|
216 |
+
'category-name' => __('Contact Forms', GoodByeCaptcha::PLUGIN_SLUG),
|
217 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/contact-forms/',
|
218 |
+
'module' => GdbcModulesController::MODULE_GRAVITY_FORMS,
|
219 |
+
'detected' => GoodByeCaptchaUtils::isGravityFormsActivated(),
|
220 |
+
|
221 |
+
),
|
222 |
+
|
223 |
+
array(
|
224 |
+
'name' => 'Ninja Forms',
|
225 |
+
'url' => 'http://www.wpbruiser.com/downloads/ninja-forms/',
|
226 |
+
'img-src' => esc_attr(plugins_url('/assets/admin/images/ninja-forms-logo-128x128.png', GoodByeCaptcha::getMainFilePath())),
|
227 |
+
'descr' => 'Let WPBruiser protect your Ninja Forms without any hard to read captcha images or any other user interaction',
|
228 |
+
'category-name' => __('Contact Forms', GoodByeCaptcha::PLUGIN_SLUG),
|
229 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/contact-forms/',
|
230 |
+
'module' => GdbcModulesController::MODULE_NINJA_FORMS,
|
231 |
+
'detected' => GoodByeCaptchaUtils::isNinjaFormsActivated(),
|
232 |
+
|
233 |
+
),
|
234 |
+
|
235 |
+
array(
|
236 |
+
'name' => 'Formidable Forms',
|
237 |
+
'url' => 'http://www.wpbruiser.com/downloads/formidable-forms/',
|
238 |
+
'img-src' => '//ps.w.org/formidable/assets/icon-128x128.png',
|
239 |
+
'descr' => 'Let WPBruiser protect your Formidable Forms without any hard to read captcha images or any other user interaction',
|
240 |
+
'category-name' => __('Contact Forms', GoodByeCaptcha::PLUGIN_SLUG),
|
241 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/contact-forms/',
|
242 |
+
'module' => GdbcModulesController::MODULE_FORMIDABLE_FORMS,
|
243 |
+
'detected' => GoodByeCaptchaUtils::isFormidableFormsActivated(),
|
244 |
+
|
245 |
+
),
|
246 |
+
|
247 |
+
array(
|
248 |
+
'name' => 'Fast Secure Contact Form',
|
249 |
+
'url' => 'http://www.wpbruiser.com/downloads/fast-secure-contact-form/',
|
250 |
+
'img-src' => esc_attr(plugins_url('/assets/admin/images/fscf-logo-128x128.png', GoodByeCaptcha::getMainFilePath())),
|
251 |
+
'descr' => 'Let WPBruiser protect your Fast Secure Contact Form without any hard to read captcha images or any other user interaction',
|
252 |
+
'category-name' => __('Contact Forms', GoodByeCaptcha::PLUGIN_SLUG),
|
253 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/contact-forms/',
|
254 |
+
'module' => GdbcModulesController::MODULE_FAST_SECURE_FORM,
|
255 |
+
'detected' => GoodByeCaptchaUtils::isFastSecureFormActivated(),
|
256 |
+
|
257 |
+
),
|
258 |
+
|
259 |
+
array(
|
260 |
+
'name' => 'Quform',
|
261 |
+
'url' => 'http://www.wpbruiser.com/downloads/quform/',
|
262 |
+
'img-src' => esc_attr(plugins_url('/assets/admin/images/quform-logo-128x128.png', GoodByeCaptcha::getMainFilePath())),
|
263 |
+
'descr' => 'Let WPBruiser protect your forms created with Quform plugin without any hard to read captcha images or any other user interaction',
|
264 |
+
'category-name' => __('Contact Forms', GoodByeCaptcha::PLUGIN_SLUG),
|
265 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/contact-forms/',
|
266 |
+
'module' => GdbcModulesController::MODULE_QUFORM,
|
267 |
+
'detected' => GoodByeCaptchaUtils::isQuFormActivated(),
|
268 |
+
|
269 |
+
),
|
270 |
+
|
271 |
+
array(
|
272 |
+
'name' => 'User Profiles Made Easy',
|
273 |
+
'url' => 'http://www.wpbruiser.com/downloads/upme/',
|
274 |
+
'img-src' => esc_attr(plugins_url('/assets/admin/images/upme-logo-128x128.png', GoodByeCaptcha::getMainFilePath())),
|
275 |
+
'descr' => 'WPBruiser will protect the Login and Registration forms without any hard to read captcha images or any other user interaction',
|
276 |
+
'category-name' => __('Membership', GoodByeCaptcha::PLUGIN_SLUG),
|
277 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/membership/',
|
278 |
+
'module' => GdbcModulesController::MODULE_UPME,
|
279 |
+
'detected' => GoodByeCaptchaUtils::isUserProfileMadeEasyActivated(),
|
280 |
+
|
281 |
+
),
|
282 |
+
|
283 |
+
array(
|
284 |
+
'name' => 'MemberPress',
|
285 |
+
'url' => 'http://www.wpbruiser.com/downloads/memberpress/',
|
286 |
+
'img-src' => esc_attr(plugins_url('/assets/admin/images/memberpress-logo-128x128.png', GoodByeCaptcha::getMainFilePath())),
|
287 |
+
'descr' => 'WPBruiser will protect the Login and Registration forms without any hard to read captcha images or any other user interaction',
|
288 |
+
'category-name' => __('Membership', GoodByeCaptcha::PLUGIN_SLUG),
|
289 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/membership/',
|
290 |
+
'module' => GdbcModulesController::MODULE_MEMBER_PRESS,
|
291 |
+
'detected' => GoodByeCaptchaUtils::isMemberPressPluginActivated(),
|
292 |
+
|
293 |
+
),
|
294 |
+
|
295 |
+
array(
|
296 |
+
'name' => 'BuddyPress',
|
297 |
+
'url' => 'http://www.wpbruiser.com/downloads/buddypress/',
|
298 |
+
'img-src' => '//ps.w.org/buddypress/assets/icon.svg',
|
299 |
+
'descr' => 'WPBruiser will protect the Registration form without any hard to read captcha images or any other user interaction',
|
300 |
+
'category-name' => __('Membership', GoodByeCaptcha::PLUGIN_SLUG),
|
301 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/membership/',
|
302 |
+
'module' => GdbcModulesController::MODULE_BUDDY_PRESS,
|
303 |
+
'detected' => GoodByeCaptchaUtils::isBuddyPressPluginActivated(),
|
304 |
+
|
305 |
+
),
|
306 |
+
|
307 |
+
array(
|
308 |
+
'name' => 'User Pro',
|
309 |
+
'url' => 'http://www.wpbruiser.com/downloads/userpro/',
|
310 |
+
'img-src' => esc_attr(plugins_url('/assets/admin/images/userpro-logo-128x128.png', GoodByeCaptcha::getMainFilePath())),
|
311 |
+
'descr' => 'WPBruiser will protect the Login, Registration and Lost Password forms without any hard to read captcha images or any other user interaction',
|
312 |
+
'category-name' => __('Membership', GoodByeCaptcha::PLUGIN_SLUG),
|
313 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/membership/',
|
314 |
+
'module' => GdbcModulesController::MODULE_USER_PRO,
|
315 |
+
'detected' => GoodByeCaptchaUtils::isUserProPluginActivated(),
|
316 |
+
|
317 |
+
),
|
318 |
+
|
319 |
+
array(
|
320 |
+
'name' => 'MailPoet',
|
321 |
+
'url' => 'http://www.wpbruiser.com/downloads/mailpoet/',
|
322 |
+
'img-src' => '//ps.w.org/wysija-newsletters/assets/icon.svg',
|
323 |
+
'descr' => 'Let WPBruiser protect your MailPoet subscriptions forms. All fake subscriptions will be rejected before adding them to your MailPoet lists',
|
324 |
+
'category-name' => __('Subscriptions', GoodByeCaptcha::PLUGIN_SLUG),
|
325 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/subscriptions/',
|
326 |
+
'module' => GdbcModulesController::MODULE_MAIL_POET,
|
327 |
+
'detected' => GoodByeCaptchaUtils::isMailPoetActivated(),
|
328 |
+
),
|
329 |
+
|
330 |
+
array(
|
331 |
+
'name' => 'Easy Forms for MailChimp',
|
332 |
+
'url' => 'http://www.wpbruiser.com/downloads/easy-forms-for-mailchimp/',
|
333 |
+
'img-src' => '//ps.w.org/yikes-inc-easy-mailchimp-extender/assets/icon-128x128.png',
|
334 |
+
'descr' => 'Let WPBruiser protect your Easy Forms for MailChimp subscriptions forms. All fake subscriptions will be rejected before adding them to your MailChimp lists',
|
335 |
+
'category-name' => __('Subscriptions', GoodByeCaptcha::PLUGIN_SLUG),
|
336 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/subscriptions/',
|
337 |
+
'module' => GdbcModulesController::MODULE_EASY_FORMS_FOR_MAILCHIMP,
|
338 |
+
'detected' => GoodByeCaptchaUtils::isEasyFormsForMailChimpPluginActivated(),
|
339 |
+
),
|
340 |
+
|
341 |
+
array(
|
342 |
+
'name' => 'Easy Digital Downloads',
|
343 |
+
'url' => 'http://www.wpbruiser.com/downloads/easy-digital-downloads/',
|
344 |
+
'img-src' => '//ps.w.org/easy-digital-downloads/assets/icon-128x128.png',
|
345 |
+
'descr' => 'WPBruiser will protect the Login and Registration forms without any hard to read captcha images or any other user interaction',
|
346 |
+
'category-name' => __('eCommerce', GoodByeCaptcha::PLUGIN_SLUG),
|
347 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/ecommerce/',
|
348 |
+
'module' => GdbcModulesController::MODULE_EASY_DIGITAL_DOWNLOADS,
|
349 |
+
'detected' => GoodByeCaptchaUtils::isEasyDigitalDownloadsActivated()
|
350 |
+
),
|
351 |
+
|
352 |
+
array(
|
353 |
+
'name' => 'AffiliateWP',
|
354 |
+
'url' => 'http://www.wpbruiser.com/downloads/affiliatewp/',
|
355 |
+
'img-src' => esc_attr(plugins_url('/assets/admin/images/affiliatewp-logo-128x128.png', GoodByeCaptcha::getMainFilePath())),
|
356 |
+
'descr' => 'WPBruiser will protect the Login and Registration forms without any hard to read captcha images or any other user interaction',
|
357 |
+
'category-name' => __('eCommerce', GoodByeCaptcha::PLUGIN_SLUG),
|
358 |
+
'category-url' => 'http://www.wpbruiser.com/downloads/category/ecommerce/',
|
359 |
+
'module' => GdbcModulesController::MODULE_AFFILIATE_WP,
|
360 |
+
'detected' => GoodByeCaptchaUtils::isAffiliateWPActivated()
|
361 |
+
),
|
362 |
+
|
363 |
+
);
|
364 |
+
|
365 |
+
foreach($arrPremiumExtensions as $index => $arrExtensionInfo)
|
366 |
+
{
|
367 |
+
if(GdbcModulesController::isModuleIncludedInProBundle($arrExtensionInfo['module']))
|
368 |
+
unset($arrPremiumExtensions[$index]);
|
369 |
+
}
|
370 |
+
|
371 |
+
if( !$forRightSide ) {
|
372 |
+
return $arrPremiumExtensions;
|
373 |
+
}
|
374 |
+
|
375 |
+
foreach($arrPremiumExtensions as $index => $arrExtensionInfo)
|
376 |
+
{
|
377 |
+
if(empty($arrExtensionInfo['detected']) || GdbcModulesController::isModuleRegistered($arrExtensionInfo['module']))
|
378 |
+
unset($arrPremiumExtensions[$index]);
|
379 |
+
}
|
380 |
+
|
381 |
+
return $arrPremiumExtensions;
|
382 |
+
|
383 |
+
}
|
384 |
+
|
385 |
+
public static function getPageUrlByName($pageName)
|
386 |
+
{
|
387 |
+
if(empty($pageName))
|
388 |
+
return null;
|
389 |
+
|
390 |
+
foreach (array_keys(self::$arrPageInstances) as $pageClassName)
|
391 |
+
{
|
392 |
+
if(strcasecmp($pageName, str_replace(array('Gdbc', 'AdminPage'), '', $pageClassName)) !== 0)
|
393 |
+
continue;
|
394 |
+
|
395 |
+
return self::$arrPageInstances[$pageClassName]->getAdminUrl();
|
396 |
+
}
|
397 |
+
|
398 |
+
return null;
|
399 |
+
}
|
400 |
+
}
|
3.0.14/engine/admin/pages/GdbcContactFormsAdminPage.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (C) 2015 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
class GdbcContactFormsAdminPage extends GdbcBaseAdminPage
|
21 |
+
{
|
22 |
+
public function __construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug)
|
23 |
+
{
|
24 |
+
parent::__construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug);
|
25 |
+
|
26 |
+
$modulesList = array();
|
27 |
+
|
28 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_JETPACK_CONTACT_FORM))
|
29 |
+
$modulesList[] = GdbcJetPackContactFormAdminModule::getInstance();
|
30 |
+
|
31 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_CONTACT_FORM_7))
|
32 |
+
$modulesList[] = GdbcContactForm7AdminModule::getInstance();
|
33 |
+
|
34 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_FAST_SECURE_FORM))
|
35 |
+
$modulesList[] = GdbcFastSecureFormAdminModule::getInstance();
|
36 |
+
|
37 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_FORMIDABLE_FORMS))
|
38 |
+
$modulesList[] = GdbcFormidableFormsAdminModule::getInstance();
|
39 |
+
|
40 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_GRAVITY_FORMS))
|
41 |
+
$modulesList[] = GdbcGravityFormsAdminModule::getInstance();
|
42 |
+
|
43 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_NINJA_FORMS))
|
44 |
+
$modulesList[] = GdbcNinjaFormsAdminModule::getInstance();
|
45 |
+
|
46 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_QUFORM))
|
47 |
+
$modulesList[] = GdbcQuformAdminModule::getInstance();
|
48 |
+
|
49 |
+
$this->registerGroupedModules(array(
|
50 |
+
new MchGdbcGroupedModules(__('WPBruiser - Popular Contact Forms Settings', GoodByeCaptcha::PLUGIN_SLUG), $modulesList)
|
51 |
+
)
|
52 |
+
);
|
53 |
+
|
54 |
+
}
|
55 |
+
|
56 |
+
|
57 |
+
|
58 |
+
}
|
3.0.14/engine/admin/pages/GdbcECommerceAdminPage.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (C) 2016 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
class GdbcECommerceAdminPage extends GdbcBaseAdminPage
|
20 |
+
{
|
21 |
+
public function __construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug)
|
22 |
+
{
|
23 |
+
parent::__construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug);
|
24 |
+
|
25 |
+
$modulesList = array();
|
26 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_WOOCOMMERCE))
|
27 |
+
$modulesList[] = GdbcWooCommerceAdminModule::getInstance();
|
28 |
+
|
29 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_EASY_DIGITAL_DOWNLOADS))
|
30 |
+
$modulesList[] = GdbcEDDAdminModule::getInstance();
|
31 |
+
|
32 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_AFFILIATE_WP))
|
33 |
+
$modulesList[] = GdbcAffiliateWPAdminModule::getInstance();
|
34 |
+
|
35 |
+
$this->registerGroupedModules(array(
|
36 |
+
new MchGdbcGroupedModules(__('WPBruiser - eCommerce Plugins Settings', GoodByeCaptcha::PLUGIN_SLUG), $modulesList)
|
37 |
+
)
|
38 |
+
);
|
39 |
+
|
40 |
+
}
|
41 |
+
|
42 |
+
}
|
3.0.14/engine/admin/pages/GdbcExtensionsAdminPage.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Copyright (C) 2015 Mihai Chelaru
|
5 |
+
*
|
6 |
+
* This program is free software; you can redistribute it and/or
|
7 |
+
* modify it under the terms of the GNU General Public License
|
8 |
+
* as published by the Free Software Foundation; either version 2
|
9 |
+
* of the License, or (at your option) any later version.
|
10 |
+
*
|
11 |
+
* This program is distributed in the hope that it will be useful,
|
12 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14 |
+
* GNU General Public License for more details.
|
15 |
+
*
|
16 |
+
* You should have received a copy of the GNU General Public License
|
17 |
+
* along with this program; if not, write to the Free Software
|
18 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
19 |
+
*/
|
20 |
+
|
21 |
+
class GdbcExtensionsAdminPage extends GdbcBaseAdminPage
|
22 |
+
{
|
23 |
+
public function __construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug)
|
24 |
+
{
|
25 |
+
parent::__construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug);
|
26 |
+
|
27 |
+
$this->setPageLayoutColumns(1);
|
28 |
+
}
|
29 |
+
|
30 |
+
public function hasRegisteredModules()
|
31 |
+
{
|
32 |
+
return !!count(parent::getPremiumExtensions(false));
|
33 |
+
}
|
34 |
+
|
35 |
+
|
36 |
+
public function renderPageContent()
|
37 |
+
{
|
38 |
+
|
39 |
+
$templateFilePath = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . 'extensions-page.php';
|
40 |
+
|
41 |
+
if( ! MchGdbcWpUtils::fileExists($templateFilePath) )
|
42 |
+
return;
|
43 |
+
|
44 |
+
$premiumExtensionsAdminUrl = esc_attr($this->getAdminUrl());
|
45 |
+
$premiumExtensionsText = __('Premium Extensions', GoodByeCaptcha::PLUGIN_SLUG);
|
46 |
+
|
47 |
+
$arrPremiumExtensions = parent::getPremiumExtensions(false);
|
48 |
+
|
49 |
+
require_once $templateFilePath;
|
50 |
+
|
51 |
+
}
|
52 |
+
|
53 |
+
|
54 |
+
}
|
3.0.14/engine/admin/pages/GdbcLicensesAdminPage.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Copyright (C) 2015 Mihai Chelaru
|
5 |
+
*
|
6 |
+
* This program is free software; you can redistribute it and/or
|
7 |
+
* modify it under the terms of the GNU General Public License
|
8 |
+
* as published by the Free Software Foundation; either version 2
|
9 |
+
* of the License, or (at your option) any later version.
|
10 |
+
*
|
11 |
+
* This program is distributed in the hope that it will be useful,
|
12 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14 |
+
* GNU General Public License for more details.
|
15 |
+
*
|
16 |
+
* You should have received a copy of the GNU General Public License
|
17 |
+
* along with this program; if not, write to the Free Software
|
18 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
19 |
+
*/
|
20 |
+
|
21 |
+
class GdbcLicensesAdminPage extends GdbcBaseAdminPage
|
22 |
+
{
|
23 |
+
public function __construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug)
|
24 |
+
{
|
25 |
+
parent::__construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug);
|
26 |
+
|
27 |
+
$modulesList = array();
|
28 |
+
|
29 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_LICENSES) && count(GdbcLicensesAdminModule::getInstance()->getDefaultOptions()) > 0)
|
30 |
+
$modulesList[] = GdbcLicensesAdminModule::getInstance();
|
31 |
+
|
32 |
+
$this->registerGroupedModules(array(
|
33 |
+
new MchGdbcGroupedModules(__('WPBruiser - Extensions Licenses', GoodByeCaptcha::PLUGIN_SLUG), $modulesList)
|
34 |
+
)
|
35 |
+
);
|
36 |
+
|
37 |
+
}
|
38 |
+
|
39 |
+
}
|
3.0.14/engine/admin/pages/GdbcMembershipAdminPage.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (C) 2015 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
class GdbcMembershipAdminPage extends GdbcBaseAdminPage
|
21 |
+
{
|
22 |
+
public function __construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug)
|
23 |
+
{
|
24 |
+
parent::__construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug);
|
25 |
+
|
26 |
+
$arrModules = array();
|
27 |
+
|
28 |
+
// if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_BB_PRESS))
|
29 |
+
// $arrModules[] = GdbcBbPressAdminModule::getInstance();
|
30 |
+
|
31 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_USER_PRO))
|
32 |
+
$arrModules[] = GdbcUserProAdminModule::getInstance();
|
33 |
+
|
34 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_UPME))
|
35 |
+
$arrModules[] = GdbcUPMEAdminModule::getInstance();
|
36 |
+
|
37 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_MEMBER_PRESS))
|
38 |
+
$arrModules[] = GdbcMemberPressAdminModule::getInstance();
|
39 |
+
|
40 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_BUDDY_PRESS))
|
41 |
+
$arrModules[] = GdbcBuddyPressAdminModule::getInstance();
|
42 |
+
|
43 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_ULTIMATE_MEMBER))
|
44 |
+
$arrModules[] = GdbcUltimateMemberAdminModule::getInstance();
|
45 |
+
|
46 |
+
$this->registerGroupedModules(array(
|
47 |
+
new MchGdbcGroupedModules(__('WPBruiser - Membership Plugins Settings', GoodByeCaptcha::PLUGIN_SLUG), $arrModules)
|
48 |
+
)
|
49 |
+
);
|
50 |
+
|
51 |
+
}
|
52 |
+
|
53 |
+
}
|
3.0.14/engine/admin/pages/GdbcNotificationsAdminPage.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Copyright (C) 2015 Mihai Chelaru
|
5 |
+
*
|
6 |
+
* This program is free software; you can redistribute it and/or
|
7 |
+
* modify it under the terms of the GNU General Public License
|
8 |
+
* as published by the Free Software Foundation; either version 2
|
9 |
+
* of the License, or (at your option) any later version.
|
10 |
+
*
|
11 |
+
* This program is distributed in the hope that it will be useful,
|
12 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14 |
+
* GNU General Public License for more details.
|
15 |
+
*
|
16 |
+
* You should have received a copy of the GNU General Public License
|
17 |
+
* along with this program; if not, write to the Free Software
|
18 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
19 |
+
*/
|
20 |
+
|
21 |
+
class GdbcNotificationsAdminPage extends GdbcBaseAdminPage
|
22 |
+
{
|
23 |
+
public function __construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug)
|
24 |
+
{
|
25 |
+
parent::__construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug);
|
26 |
+
|
27 |
+
$modulesList = array();
|
28 |
+
|
29 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_EMAIL_NOTIFICATIONS))
|
30 |
+
$modulesList[] = GdbcEmailNotificationsAdminModule::getInstance();
|
31 |
+
|
32 |
+
$this->registerGroupedModules(array(
|
33 |
+
new MchGdbcGroupedModules(__('WPBruiser - Notifications Settings', GoodByeCaptcha::PLUGIN_SLUG), $modulesList)
|
34 |
+
)
|
35 |
+
);
|
36 |
+
|
37 |
+
}
|
38 |
+
|
39 |
+
|
40 |
+
|
41 |
+
}
|
3.0.14/engine/admin/pages/GdbcOthersAdminPage.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (C) 2015 Mihai Chelaru
|
4 |
+
*
|
5 |
+
* This program is free software; you can redistribute it and/or
|
6 |
+
* modify it under the terms of the GNU General Public License
|
7 |
+
* as published by the Free Software Foundation; either version 2
|
8 |
+
* of the License, or (at your option) any later version.
|
9 |
+
*
|
10 |
+
* This program is distributed in the hope that it will be useful,
|
11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
* GNU General Public License for more details.
|
14 |
+
*
|
15 |
+
* You should have received a copy of the GNU General Public License
|
16 |
+
* along with this program; if not, write to the Free Software
|
17 |
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
18 |
+
*/
|
19 |
+
|
20 |
+
class GdbcOthersAdminPage extends GdbcBaseAdminPage
|
21 |
+
{
|
22 |
+
public function __construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug)
|
23 |
+
{
|
24 |
+
parent::__construct($pageMenuTitle, $pageBrowserTitle, $pluginSlug);
|
25 |
+
|
26 |
+
$modulesList = array();
|
27 |
+
|
28 |
+
|
29 |
+
if(GdbcModulesController::isModuleRegistered(GdbcModulesController::MODULE_MAIL_C
|