From f72baf95ba0e0e04bd6a19766e28958e608f1b7a Mon Sep 17 00:00:00 2001 From: louisnw Date: Sun, 27 Aug 2023 00:20:05 +0100 Subject: [PATCH] Polygon: - Added async methods to polygon. - The `requests` library is no longer required, with `urllib` being used instead. - Added the `get_bar_data` function, which returns a dataframe of aggregate data from polygon. - Opened up the `subscribe` and `unsubscribe` functions Enhancements: - Tables will now scroll when the rows exceed table height. Bugs: - Fixed a bug preventing async functions being used with horizontal line event. - Fixed a bug causing the legend to show duplicate lines if the line was created after the legend. - Fixed a bug causing the line hide icon to persist within the legend after deletion (#75) - Fixed a bug causing the search box to be unfocused when the chart is loaded. --- docs/source/_ext/styles.py | 16 + docs/source/_static/fonts/MaisonNeue-Demi.otf | Bin 0 -> 129316 bytes .../_static/fonts/MaisonNeue-Medium.otf | Bin 0 -> 128648 bytes .../_static/fonts/MaisonNeue-MediumItalic.otf | Bin 0 -> 129728 bytes docs/source/_static/funcs.js | 478 + docs/source/_static/ohlcv.json | 38761 ++++++++++++++++ docs/source/_static/pkg.js | 7 + docs/source/_static/splash.css | 140 + docs/source/_static/toolbox.js | 688 + docs/source/_templates/landing.html | 301 + docs/source/callbacks.md | 156 - docs/source/common_methods.md | 360 - docs/source/conf.py | 104 +- docs/source/examples/events.md | 74 + docs/source/examples/gui_examples.md | 98 + docs/source/examples/subchart.md | 50 + docs/source/examples/table.md | 38 + docs/source/examples/toolbox.md | 73 + docs/source/examples/yfinance.md | 48 + docs/source/index.md | 34 +- docs/source/polygon.md | 114 +- docs/source/reference/abstract_chart.md | 329 + docs/source/{ => reference}/charts.md | 162 +- docs/source/reference/events.md | 28 + docs/source/reference/horizontal_line.md | 28 + docs/source/reference/index.md | 23 + docs/source/reference/line.md | 44 + docs/source/reference/tables.md | 125 + docs/source/reference/toolbox.md | 62 + docs/source/reference/topbar.md | 54 + docs/source/reference/typing.md | 42 + docs/source/tables.md | 121 - docs/source/toolbox.md | 98 - docs/source/tutorials/events.md | 160 + docs/source/tutorials/getting_started.md | 85 + lightweight_charts/__init__.py | 2 +- lightweight_charts/abstract.py | 851 +- lightweight_charts/chart.py | 134 +- lightweight_charts/js/callback.js | 17 +- lightweight_charts/js/funcs.js | 251 +- lightweight_charts/js/table.js | 15 +- lightweight_charts/js/toolbox.js | 30 +- lightweight_charts/polygon.py | 534 +- lightweight_charts/table.py | 51 +- lightweight_charts/toolbox.py | 47 + lightweight_charts/topbar.py | 90 + lightweight_charts/util.py | 32 +- lightweight_charts/widgets.py | 94 +- setup.py | 2 +- 49 files changed, 43156 insertions(+), 1895 deletions(-) create mode 100644 docs/source/_ext/styles.py create mode 100644 docs/source/_static/fonts/MaisonNeue-Demi.otf create mode 100644 docs/source/_static/fonts/MaisonNeue-Medium.otf create mode 100644 docs/source/_static/fonts/MaisonNeue-MediumItalic.otf create mode 100644 docs/source/_static/funcs.js create mode 100644 docs/source/_static/ohlcv.json create mode 100644 docs/source/_static/pkg.js create mode 100644 docs/source/_static/splash.css create mode 100644 docs/source/_static/toolbox.js create mode 100644 docs/source/_templates/landing.html delete mode 100644 docs/source/callbacks.md delete mode 100644 docs/source/common_methods.md create mode 100644 docs/source/examples/events.md create mode 100644 docs/source/examples/gui_examples.md create mode 100644 docs/source/examples/subchart.md create mode 100644 docs/source/examples/table.md create mode 100644 docs/source/examples/toolbox.md create mode 100644 docs/source/examples/yfinance.md create mode 100644 docs/source/reference/abstract_chart.md rename docs/source/{ => reference}/charts.md (58%) create mode 100644 docs/source/reference/events.md create mode 100644 docs/source/reference/horizontal_line.md create mode 100644 docs/source/reference/index.md create mode 100644 docs/source/reference/line.md create mode 100644 docs/source/reference/tables.md create mode 100644 docs/source/reference/toolbox.md create mode 100644 docs/source/reference/topbar.md create mode 100644 docs/source/reference/typing.md delete mode 100644 docs/source/tables.md delete mode 100644 docs/source/toolbox.md create mode 100644 docs/source/tutorials/events.md create mode 100644 docs/source/tutorials/getting_started.md create mode 100644 lightweight_charts/toolbox.py create mode 100644 lightweight_charts/topbar.py diff --git a/docs/source/_ext/styles.py b/docs/source/_ext/styles.py new file mode 100644 index 0000000..b77687b --- /dev/null +++ b/docs/source/_ext/styles.py @@ -0,0 +1,16 @@ +import pygments.styles + + +bulb = pygments.styles.get_style_by_name('lightbulb') +sas = pygments.styles.get_style_by_name('sas') + + +class DarkStyle(bulb): + background_color = '#1e2124ff' + + +class LightStyle(sas): + background_color = '#efeff4ff' + + + diff --git a/docs/source/_static/fonts/MaisonNeue-Demi.otf b/docs/source/_static/fonts/MaisonNeue-Demi.otf new file mode 100644 index 0000000000000000000000000000000000000000..15dd6eb973f62bb1f71d4b8378f1dcc7f4cc79b2 GIT binary patch literal 129316 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 zp^y;@8KIC73K^l05egZhkP!+Qp^y;@8KIC73K^l05egZhkP!+Qp^y;@8KIC73K^l0 z5egZhkP!+Qp^y;@8KIC73K^l05egZhkP!+Qp^y;@8KIC73K^l05egZhkP!+Qp^y;@ z8KIC73K^l05egZhkP!+Qp^y;@8KIC73K^l05egZhkP!+Qp^y;@8KIC73K^l05egZh zkP!+Qp^y;@8KIC73K^l05egZhkP!+Qp^y;@8KIC73K^l05egZhkP!+Qp^y;@8KIC7 z3K^l05egZhkP!+Qp^y;@8KIC73K^l05egZhkP!+Qp^y;@8KIC73K^l05egZhkP!+Q zp^y;@8KIC73K^l05egZhkP!+Qp^y;@8KIC73K^l05egZhkP!+Qp^y;@8KIC73K^l0 z5egZhkP!+Qp^y;@8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ z8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@ zkTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf z3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7w zqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2 zF$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ z8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@ zkTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf z3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7w zqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r2 zF$x)@kTD7wqmVHQ8KaOf3K^r2F$x)@kTD7wqmVHQ8KaOf3K^r22@08@kO>NzppXd) znV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@ zkO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf z3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>Nz zppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg z2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd) znV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@ zkO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf z3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>Nz zppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg z2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd)nV^sf3Ynmg2@08@kO>NzppXd) znV^sf3Ynmg2@08@kO>M|hj!JWU3F+z9okigcGaO>b!b-|+Es^k)uCN=XjdJ2Rfk^H zp;vY2RULX&hhEj8S9R!B9eP!VUe%#jb?8+cdR2#B)uC5)=v5thRfk^H>F8VP)oCPG zh^ycR*bXi^pfLmZEw9i%RG)hLho2E{q@t9Z7IMg!^^^8M3<515y)H4qCj6*%+ zP|rBjGY<8PLp|eA&p6aG4)u&fJ>yW%IMg!^^^8M3<515y)H4qCj6*%+P|rBjGY<8P zLp|eA&p6aG4)u&fJ>yWXm|5Y~D`t!~4)ux|qm4toV#a9WP_LLV+BnoR4)u&fJ>$^8 zI5aR04U9trI5aX2jf_JhI5aX2jf_JhI5aX2jf_Jh(?&6Pr7+xf7c^vAGMIyRf+no4c^N3!A&JS%l3ZY!+d& z2%AONEW+k)Z0^S9Zfx$x=5B26#^xSu?!o3BZ0^D49&GNxW-&I4v004GVr&*;vlyFu zvAGwUd$G9}n|raj7n}RAxeuHBu(=PL`>?qWoBOf3ADjEJxgVSRvAG|c2e5enn+LFY z0GkJ}c>tRSv3U@i2eEk&n+LIZ5Sxc&v&?%)Hll2dDVT=k;=|ZHjLpN?JdDl5YDa6; z&NA;2Y#zbp5o{j8<`HZj!RAqH9>wNSY#zntQEVQ?<}qv@!{#w;9>eA_Y#zhracmyP z=5cHu$L4Wt9>?YhY@Wd832dIg<_T<`z~)J8p2X%!Y@WpCNo=0PW(hV+uvvo55^R=W zvjm%`uz3obr?7bno2RgO3Y(?aEX8IiHcPQtip^4Np4N=!8SiP$XpFbRJK&x0F1QHZ z4ex=A;l1!act3mqJ_sLz55vbwi`D+)@Co=NTmqkhe}GHj)9{b*8Tc%G4n7Z;!583* za5;Plz6@8uSKzDgHTXJw1HK9W1mA+I;M;JuQ8N)^In2Ncn1z)v2diK;>;wD4ey|4i zhXde1I0T*oPlcz!)8QF#4m=Z{1IX26&S&q$eY?foQ9GjQ0 zc?p}Buz3lam#}#Wo0qY98Jm}}c^R9Rv3VJr71*r6W(77Yuvvl43T$4%<`ryS!R8fg zUcu%SY+l9YRcv0x=2dK7#pYFPUc=@!Y+l3WHEdqP<~3|y$L4ixUdQHjY+lFab!^_i z<_&D#z~&8X-oWM!Y~IA?O>Ex8=1pwg#O6(GR(k7nz4}UJ5zD=mnxicc?LTg>)Ev!d z|7&}tW>rS}pW4l8^D)t~f@Za8w5*_6Z5r*2{|+|qVDk<(?_l!|Ht%5bE;jFC^DZ{; zV)HIG?_%?3Z2pYRpRxHfHh;$E&)BS2&sTWsRZmzY+FirzRZlS5UBl~DPcYhD!|PQ~ zFxp+i>s3!M+Firzo!vFO-q~Hl>s3iG+LgxZRWUG*f}`OWI2MkBcGvKFcPg~|*4Jxh zZM3_F*K1~NwENcAYi4b@^X&fdHqY)KZ}aT_@iu(jCMDNvDY?;}UC^eQlF?$IjTmSn z2HJ>$He#TS7-%B~+K7QRVxWx}Xd?#Nh=Dd@pp6)4BL>=tfi_i*R;Yc8fi_i*j1~iJ zs;=06Ee6_DT`^h=v=IYs#6TM{&_)cj5d&?+KpQd8MhvtO18u}W8!^yE473pgZNxwu zG0>*0eu>(*7-&;gZ?qU_Q&w-Z7-&;gFOL%gZNxwuF;FB1io`&X7$_10MPi^x3>1lh zA~8@T28zT$kr*fv14Uw>NDLHJnOx-+iGd<9P*i2omRJlFiGiXjllIzTps32E(PE&e z%B0a^phyf9J&S=NF;FB1io`&X7$_10MPi^x3>1lhA~8@T28zT$kr*fv14Uw>NDLH- zfg&+bBnFDaK#>?I5(7nIphyf9iGd<9P$UM5#6Xc4C=vrjVxUM26p4W%F;FB1io`&X z7$_10MPi^x3>1lhA~8@T28zT$kr*fv14Uw>NDLH-fg&+bBnFDaK#>?I5(7nIphyf9 ziGd<9P$UN0$r#(o7~9Dh+f@U9#%os%+-MnNyK3M@%NW~L12R*sjPiTE^I}$T3>R*sjPiTE^I}$T3>R*sjPiTE^I}$T3>R*sj{F zyg67pX(uG1~n;9rBLxbZGbfbjUl#GvQhA zY&aLrgY)4z@LYJFxWyf)cd^B-gqBlnA^rgVBrod3z7zXS z>^rgV#Qr1fKf?Ya>_5W(BkVuI{v+%^!oGxk3HuWECG1Psm#{BkUov~=nZ2m~i|W6q zoX~k@FDfS#l@p3)@342+JM10y4ts~a!`@-m2Vyx8%Yj%9#BvapgRmTgX6Wk1SH?%Cbz)q;_)D5-F zMD(o%%`T0at%#bfxMA#l7<(Va-iNXGVVapXX|3&j7<(V4yvXcr@57WA8Ex;wlouIo z@59*pFy%$|+V(z-y$@sW!`S;U_CAcg4`=Vg+52$zKAgP|XYa$=`*8L?oV^cc@59;q zaP~f&y$@&a!`b_A_CB1w4`=Vg+52$zKAgP|XYaM_y_UV#viDl{Ud!HV*?TQ}uVwGG z?7fz~*RuCo_Fl{0YuS4(d#`2hwd}o?z1On$TJ~Pc-bWB2BixkI3OB+{mBNp3)8KS? zC_D_#fHUDrsox02)k?9&sJJrf8PuYlbS>&h*KQ>3kEH#Pv_F#eM>=bNq_g%%I%|KV zv-U?iYk#D)dYNeLkEH#Pv_F#eN7DXC+8;&xqiBB=?T@1UQM5mb_D9kFDB2%I`=e-o z6zz|q{ZX_(iuOm*{wUfXP5Yy1e>Clnrv1^hKbrPO)Bb4MA5HtCX@4~BkEZ?6v_G2m zN7Mdj+8;yvV`zU2?T?}TF|i$I|{-+8;;z<7j^z?T@4VakM{< z_Q%owINBda`{QVT9PN*z{c*HEj`qjV{y5s-#k*B8u#1<60SsXTW0;7$>N=L)MAf)N z)wtZQI+_-Us&R>`afzyNxm|TE7**qPyXoj#BC7Txs`etP_9ANDEo$B^YThks-Ysh0 zEo$EF#L1lpWHn-gerciP;YHg~5#yR+@?Y`Z(#?#{Nmv+eF|yF1%XWZQ{sJCSWC zvh75+oyfKm*>)n^PGsAOY`X{B?!mTuu=&9DI1%F74Jr?%X5{y?1fob{~D zj0Lz>Yrmovv_xAOGvYy59)#sVSRN!DUa93~c@UNdVRq7$4#*ckEkl2s4AbRDxat- zpQtLIs4AbRDxat-pQtLIs4AcM98{H0uT|j@Rpk>^^;Sp8g5mn(4 zRpAj;;Sp8g5mn_ARpAj;^(REX-!Xv86C#uRPs>&y3VI|DLDyT}Y z*7kvYp(?#vQUm+L0dOExrB`cJ=@nJ!6;^2DI6(NI8vr?q)g#RnZl7W zg(GDON6Hi;dDW)lemeHkv7e6pbnFks@=z=f#qv-r55@9OEDy!EN5Uj1Irm$&cJd8mNT%Nf#pmrXJR=M%b8ft#BwH(Mc^PSP=&KF>F0X7$4a{)FNU~>UBm*~3R748yU_iI#DL{wEo zR8>S&RYX)(L{wEoR8>S&RYX)(L{wEoR8>S&RYX)(L{wEoR8>UO(`ZFKjaJmtTt&;S zFHtN%^Tp0g_IIjf?cvnuLosG^>RD(Y#dqMn8->Uq4PDfT70u21_S zsxQ%XefC<<;}!KhUeVP15}$WOv|r-eJGxvgFBMJ6FIUS()91_8vR(rHLp`xvul2-o zQBN!v^~7>fPb?Sp#BxzjEEn~}a#2q#7xlz)QBN!v^~7>fPb?Sp#B%Yl(k{aa)SC@_vn_&UA!VRo#ha2H0xEXf9EwB@Q zq|E$!`OD~A3mP9|1xqU7Q1O?H>Mt49Uoxt{WK@62sQ!{sy#bpWu(<)78?dg?MKn-dTuu7UG?ScxNHr zS%`NQ;+=(fXCdBMh<6s^orRux$DS50;+=(fXCdBM=*&9{b!F@`qIqYbGw&>P=ADJk zyt7c}g2keFXCdCPCs!Y%*XA92X0_40vry*`Kv&3wuti(PG}71Z%Y8!k*-5G#h)8r_pTeS)E3+sl%oY zn>uXju&KkQ4x4&x>anTErXHJmZ0fPmd{Mp9Y!8ltqv04h7LF6&@@|sGzUBR{^niG) zRN^ho4vYZ|VFY8CKpXkDJRAA9yaw0^n~a*jED?Vym3zxwuaSJq-N@^OynfI2=-!7# z_@St0_CxE*DtfYto~)uLt32z;D$jbd%CnxV@~kJTJnP9Sda{b1tn#cUt32z8as>5c z6+Kx+Pgc>BRnB^{%2`iV(UVoqda}w{PgZ*umQEEff)~R};HB^~csaZRUJ0*)SHo-I zO{Mv2XQBGJ+WQUsExZ}t0&guHueEs?zz{|-h6!A$ceL8=3U^bqtajt!1h_k#2={;o zD(hIStL2x92f>5kA#gIBsv~Z-=9tFm@K9*S<7&+@jWgke?Dt|?zQlU&E@jDO@N!za zmbKTFexbEL=k@hE->ug1YrS2-@|$?QkmWb?x(?REHKmJW*#gZwtMSfiytBH?J35cc zM(1&38kURAc&!<)HGAf@X3xCV?3ve^J@Z<#XI^Xe%xle_d9B$quQhw-wPw$})~q<3 zFPhhy@mjNIUTgNuYt5c{ty%GTyl7r)R(u-GYt4#Jqj{}a@o6-#HRH8rXI^W@Yt7EQ z*6hq{&Ca~m?96M;ssP+5n%A1~TC?tPu-E3bW@lb&R%JlXW5sLDc&%BL0b62TYsPEM zc&*u<6sjfWwPt5tYsPEM&b-#F`wpx%^IEes{}-ZptyxFP!=ibu8Lu@byW+)Oo7e1$m)FG>qil>Rn1Rc9Yi%9| zFoY3|VFFiT|GxJ{*?$24WmIIUeMP4FugEk`fV;zqa1VH(j@iE|GM9-5!Gqx;a59{V z%``Y29tsbGGvG{kA^W|UmM`J;rSLL%xmsJ}rF52GqpZ?c4l}R;Q%-g9wt3sqpZ^Sn3QCVYCFa!;FE9(d+lWuCj1k83$B81!_`Jrb&RHmYgE-SR=_N*ggICRt6?A57xsfS zus<9C2f`un6nH8;4W16qfOFuP@GN*XoD1i{`S2WgE<6v~Y-#W{q($=%U4O56htVRWMe`1$MM#V09Y%|g7R@`179lN~cNi@~S~Tx4 zT7#W{q=g7+QT0#PlB)V=vYvdfq(#*~qeV!Is((g{kQUD(q{XucX;JmhXc5w)>Yvdf zq(#*~qeV!Is(&I8(n5r^5Fsr@NQ>%zw$>t~Mb~v0Ekas!U5C*kq(#?t7%f6tRQEGl zgtX|o4x>d#i>~W1T72-?i>i4>i;xx~q=g7+AwpU-$5A|Jjw2EwEkwv#MaaW$ts=yz|DY%8Kj?}24|<~h zgPy4WpeO1-=!yCddZPY=p4bQKKj`VT{)3*V|DY%8Kj?}24|<~hgPwSp_PbUQVzip% zTF+{dYdxz;uJx=Yxz@9qal54&5;Z6GVWUa0iTPEHHZ-;llJK5n*cbMLHLyP%00+WB>}3eAhw^$D91d&Y2z{Qu zR1d2l{F2c8ShgXdce=vp=7+S1vs zm2A0{Y`K+exs`0Wm2A0{Y`K+exs`0Wm2A0{Y`K+exs`0Wm2A0{Y`K+exs`0Wm2A0{ zY`K+exs`0Wm2A0{Y`K+exs`0Wm2A0{Y`IlA$qLu1oJ7~hDQS+I6g5 z$J%wQUB}vgvi6^>{U>Yx$=ZLi_C2j#sZUI2K-=$otbLEQ@3Z!O*1pfS@3Z!O)_y?C zAJFm#to?wsAF%dcto;{j|HayWvG!lAUC-L}tXV|hphdOwI8x}168IC)VnrNW!j+V)pJG^y+*4tZBXla2Ib zBR$zjPd3t%jr3$AJ=sK0Hqnz!^kfq~*+fq^(UVQ|WD`BvL{B!+lTGww6Fu2PPd3q$ zP4r|FJ=sK0Hqnz!^kfq~*+fq^(UVQ|WHUY4Oiwn`lg;#GGdM^kg$V*-TG1)055gWHUY4Oiwn`lg;#GGd7XYa^rVBHY@sJx=*bp( zvW1>(p(k7D$rgIDg`RAoCtK*r7J9OUo@}8fTj(p(k7D z$rgIjNl!ZINhdw&q$i#9q?4X>(vwbl(n(J`=}9L&>7*x}^rVxXbkdVfdeTWxI_XI# zJ?W$;o%E!Wo^;Zak94-3?>^Gm)_5_z1YQa+gO|fA;Fa(ycs0BRT7~T+y(8UKu6MLZ z%)3>Q2u+cvKFDV~3+Nb{|<-jl z@Fr!~C1n@O#oxf+!kghO@OPRKlr$RGiFp{n5JoVD39M5VRFZ#<4X_b58Fk**zBFR? zdSPjq@0ssJ`A(GYMEOpX??m}dlN6Tq)qYXceo@taQPqA?)qYXceo@ta zQPqA?)qYXceo@ta-?uDRRF*3$%N3R7imLXDs`iVj_KT|ai>mgE`iw?YwO>@VUsSbU zRJC8!XEdTdqY+i@7gg;S^%;$*&uBzd`$bjzMOFJneMTdy+ApfwFJ8-9Rr~c?)qYXc zeo@taQJ>L>7SF!M*_Nx?FRI!vs@gBA+ApfwFRI!v>a#pipP-5Q1kJa54Yby>Tv642 zQPqCGOmVKKCn(O1s{4tm>WHf9h^p#{s_KZU>WHf9h^p#{s_KZU>WHf9h^p#{s_KZU z>WHf9h^p#{s{4tm`-!UiiK_dFs_KZU>WHf9h^p#{s_KZU>WHf9h^p#{s_KZU>WHf9 zh^p#{s_KZU>WHf9h^p#{s_KZU>WHf9h^p#{s_KZU>WHf9h^p#{s_KZU>WHf9h^p#{ zs_OVrs*Yb~RUJ`vKR-o;q==9d5t1T8Qbb6K2uTqkDIz3Agrta&6cLgl zLQ+IXiU>&&At@pxMTDe?kQ5P;B0^F`NQwwa5g{oeBt?Xzh>#Q!k|IJ&&At@pxMTDe?kQ5P; zB0^F`NQwwa5g{oeBt?Xzh>#Q!k|IJ&&At@pxMTDe?kQ5P;B0^F`NQwwa5g{oeBt?Xzh>#Q! zk|sjZL`a$lNfRMyA|y?Oq=}F;5t1fC(nLs_2uTwmX(A*|grtd(G!c>}LefM?ng~e~ zA!#BcO@yS0kTemJCPLCgNSX*q6Cr6LBu#{*iI6lAk|sjZL`a$lNfRMyA|y?Oq=}F; z5t1fC(nLs_2uTwmX(A*|grtd(G!c>}LefM?ng~e~A!#BcO@yS0kTemJCPLCgNSX*q z6Cr6LBu#{*iI6lAk|sjZL`a$lNfRMyA|y?Oq=}F;5t1fC(nLs_2uTwmX(A*|grtd( zG!c>}LefM?ng~e~A!#BcO@yS0kTemJCPLCgNSX*KSA^W?mn%YyU9Oo!b+Hf zRj?ZNfqh{=SOfdR0dOF+vrIV=Qm)GI>w0ZUSgy*j(Uh=Um0_bPVYw>9#^0Cp6dToq zjkm));GOU;xCq`2?}3Zqz3@JGKYRc_2p@tEL)}5F_VvseQFjoFx`SBM9mJyUAQp88 zv8X$UMcqLx>JDO2cMyxZgILrZ#G>vX7Ig=)s5^*7-9aqs4q{Pv5R1BlSkxWFqV6CT zbqBGiJBUTyK`iPHV)0F=JBamKS8a*9YD?4|#G>vX_RAHqMm=*z)E&g4?jRO*2eGI- zh(+B&Eb0zoQFjoFx`SBM9mJyUAQp88v8X$UMcqLx>JDOY2pj=N!clNE90SL~aZvXf zYb)JrEb3lkQTG~)y4P6Ly~d*MH5PTRv8a2EMcr#G>Rw|}_Zo}3*I3lO#^QPKeDjy; zw?;cZmJ{3M#CAEcT~2J56WbZ`-VAwfhP*dJ-kTxs&5-wI$a^#7y&3Y}40&&cyf;JM zn<4MbkoRWDdo$#{8S>r?d2fciH$&c=A@9wQ_h!g@GvvJ)^4<)2Z^l{Pn{k%+W}M}{ z8S>tYv%EJ$-kTxswfi@3)Dp{kGvvJ)^4<)2Z-%@#L*APq@6C|+X2^Rpd4-VAwf zhP*dJ-kTxs&5-wI$a^#7y&3Y}jI+EqL*APq@6C|+X2^Rpd4-VAwfhP*dJ-fMT8 zUZia;@69;Ndo#}R-i))nH{&etwYyNYmb};QLbcbH_f{~|tYD^D!A!G)nPvqu%?f6k z70fg%m}yqXYxA|0%`_{RX;#Q<_S!P@3TB!W%rq;QX;#QPi?rNknicYn(Po+z%rq;Q zX;v`P%rXbeG6&2u2h1`D%rXbeG6&2u2h1`D%&I46`&s6IS>}LQ^~9Fg95BlqFv}b; z%N#Jv95BlqFv}b;%N#Jv95AbXUZ<^W4wzLxjW!3&G6&2u2h1`D%rXbeG6&2u2h1`D z%rXbeG6$?=R4WFMzxYrtz=Xy8P!TgwUSY-WK=5|)k;RSl2NT> zR4WFMm481&MH5rGmg>b?>XfpMw`Fql#>{3{+?t0o@4%=WB#6F z{+?t0o@4%=WB#6F{+?t0o@4%=!*@A+m&12Ce3!#_IeeGHcR75Q!*@A+m&12Ce3!#_ zIeeGHcR75Q!*@A+m&12Ce3!#_IeeGHcR75Q!*@A+m&12Ce3!#_IeeGHcR75Q!*@CJ zo#%N@KN?~0ubw~c&?AoZ`kX#%{v2<(m(p^50Lc3Ny^6`-nLfrlaO&h^$9U7G9xWd6 z)ydx(;~o38qmCHkeedX_zBa}?@mO1X`mslUb&NN^dt0?m8!EQ&yR7@STIcU{_wVxV z-3;X6{+<4v z?iGKZ?(bjwzxKc6pDb?wos>P;^Q|rJ-S)fekNRHdKjlAF=9L}JU)R9}WedydwbdWX zUMPE|Y-L%Y?1S{l>66Pg7}bk|ydmDc-c0Xs?+kB_ccyoiceZz-cae9ocZqkYcbRv& zcZGMQca?Xwca3+Gx6u2I_gn8~?-u><^IP@5MguSOA}{vzEN<@^Jq7Ep-rsar!#eLn zZ-br!veDb@b?E-U3A!WUGWV$agL_$5a;|kH-}&W!R!70!isd#%a+~6~O;OyY7;aMp zw<&(x6uoVV-8MyTo8q=jQQM}NU8iVVqgY&{NL-^hT%#ylqZnMH2wdZJcsi?i1Kn5j zbC7-x*3TjOnXI2FUZtC=-_!InT|bBF=P>=u(9cZ$T&|y=YWwR;R`azpK&ShQXZNnJ zlishBs;`r#ualy$lb)~h%Jgn4^?t|dIo}zLW2)4tW4}{Jey5K6P961~I_5id#CPg= z@6^%WsbjrUM|!7@^G+S*ojS%lb%b~7`0muvZME!mI)>Ki2wJD(XPu6obvky|dA_bf ze@EA#zvJb$-K&u!$)T2rq(Jr?*C`kmG9O8w61d1Gc>)7?i;*7n~y?OCPvpE>Pm zrS_jV?Rlm4UpSk1N4?gHS^Iyp|B#oQUhS^6U4QScPr2{#`g)J(T|cUyX8pXYpFito zy?)yCQ`FCg`q`kLcKvMB&nEqB*0>JV@BZ4lR$JF<>soDHtF3GGIbE$jrK{CvbhT=! zRxQ=4rCPOAtCnijQmtC5RZF#Msa7r3(vKRoRHK$^)KZOFs?pXp+PX$t*J$e+ZC#_S zYqWKZwyx3EHQKsH+`*3Gf?BQ zPHi~%a_MbYPpsxWzp&A#^4|AsK526W%l|F=x7^=T=I<%**K>oG z=&3z1usu5OvSW|oUB zOSc@|GIYz&Ejzc|+%j{^%PlLnoZK>U%f~Gnw_MyZam&Lk3%4BHGH}bkE&J9T3X65+ z#9~F%V%_ny*eU1M-A;>juhU}9Bo|w*ZJD;^*_LHnj%^vX<=2*7TW)QcwdK{8Ra;JN z8MU6>v&6D##jq;ec7F7H|725K|8oCf9krw6@tRUW=b#$B+WD`{&Tp!7% zroi~vYuj(Z-oI$0ChGM{jh@+Upt1i8NDUNSsvPUgw^CQMzpHDX|LWHI;}nTmEmw_O z>;5RK4t=L&@s2d(UH7h6Cd#Q1-e`Rf)fs3naUY$@hkBE|1GM(@-l2MZm^VX8JJb8RULWm!NBpjLs@9(7ovzns z=zD<9`e*C)TiWiP+>hAAVsN&Q=> zd|;3=g5Rlkw<;H?^y)l4^V|Eq_pnzboi~+#%zIPsW2L^G_a|?)UN?6uzv+I#dr#Ss zT~Csea!c9uG^dm|LQe`BsL>hZ2I=)+Q+qeW4bhUJu2xG%xN#b_UEQwI-rd|D8qEWB z?yuIp=aaoYx+8ds*H?Go&h+}Z!`+eI5O<0@PurgFF7T?{h3-Oab&h%i6_ARA0#aM>#8s!G9rDgh2?0vc~JAQh;x?;QMFSV~2 zx4%mB^{u!sE!w(n+gBV#+b-yRZAU`S*VZGeYe~=1UOHRf59^4%?qe1O^`M|9rS&mfr41UHbsCWkjEkN%qa*ZFzxSS2KIyj|;oT#^DCw9swb^FGK55HOv%ITy`Kqn7 zM*Z*AiT|7SdwSm0U$y^#HY)bswzkHIv?}^cDZQ=l;?s=4C)t>GcC|$7T`~9{pBp~0 zbvs`8D!t!rlVLx-9{8j!Kh1LWytB(rv9DuPUqocj(ynzo%hE42#>)K^GY{*P^gz5w zKZ<+N&OWE=dwxlu7)80uqFD;E zRQs@Oy63xVzrDw?EbREG5qpmBNnQQ;G}OpiZ+qJA&iT4}YTIkyU9ESksTNI=^(dW* zKH;lpWVG##`f2_6IDEo}+bz~R@--v6*4?aGNS&+K8R#wDwK_!ee5|rwVZoK zxK_=VN6C73SzoL3-gWLeowa`Aexftj|G58A&hS%auRn7?^D5lW-Os(O`-S_3=Dfdj zH^_d0TOj-Yb^j~-U%6k&{zhiGzjnWt{Y_41a`zke8`=L>y(yzNW%QWZX~bS^FFDjZ!B;p+`*-mk|Q z+Lxy%;Q9JAPIZ8Cub=9p87-+$rP8S`pp3__^ego`r}u1|o=*PLkNjs(@}K_XKYNn@ z>`DH!r_RKC%hs}>J;{RllLhTb7F0tPv?p26o@7D&$%6JI3+hi6v?p260J5O|WI+ST zf(DTV4I~R1L>4rVENBo}&`7eN!DK;0$bxny3mQrmG>j~0H?pA5k_C+*3mQchG=ePX zv);R!vwoH==rd$NdyoZvmMmy5vY-)UL3@z}eU>a}1X<8tWI=j5ld_;uWIf1qUt+F|m`f3J z`b|#Nu#bQO|BuEDk3Y zYkOm{T(P({3WpPgdYYS}a5zy|>ksvZDtGm(&a&LE>d`*udb@g`(UJcSI*g*|Xs)$0 ziM|WU`Rse8vZfVMt-P{6-R-X*@)c!7&**%hyG`t@yu+_;mP?y9NRjzc3;Jfi?@M)7 zqFXy`V8;v9$FA9wt?oX1^tAo)E!6%>oyS_Y?q7T6T>tO3-i>n0?zySn_dw0_Zed@#CsH|SYv~%D*=kBw@m-^lxkD}K z+^+GxLyBDa$ysmDxYL%MlY7S3-m%V&;wH7VTzlaCcIP8CrA@rAZSs)b45epCYE&KT z{?b|P(w^5{zuCSkXVxCImv!312Fnb#epv=#U)!E-d-~h8+@c5*i$8tKRx#1Vo;6+T zcgXJZA6q=E(X))j<_!Ziwx?=DnLl@Lxit=J6tnY7KQ8@LU#%?H{}t={o7TIcZ@YH4{(;`u!>-NDCRZT0T9tNw4={dg-MU$X69Kke(SUSbRRo{`xuy1Lfj*`8)KuDwSK$Ag{e zm?LyqY+c*^cefY2quO%+?yv1@42pyvZMO5E)e=lUx6Tl^i3S>|-L?i|k>Atq_P-VR z8KT`Ht*bV}QPXwYZg0EoU)%T2)@;8A^{q#nb)?f@9n;&k@Nchep0UkWSEbYzY(F1W zyPYi68EM-!z45!Xjjr~(b*O8xW|qC)*=k68h2C*k)vE<|eD=JHf8VZV+xM&EdYg0M zwk@Mwc4pcpF4$jByW4GNS<*J+pjg;C4%@b><@A?Gux)z3di>VY@2(XZ`F|gWe~*{$ z7POsxBB1%DZPTrvHV!>;y4^TPcQV`bS8ep{zqdo%ys$PtHV)gp|80yv@nz3(@Nt9f z-}A@Ue|$;L7CpVvS;jIOz5gCtEVk3HZT;S3^?&wzyFKkptIET-`|3UG_AdSSk=wiK zKYj5Z^>znG=%?MEuL^p~8zb{^ny-%3Z1r;Q$IM4BVkUaA=AcjOv-)TB$>w9KoNw0r zaf_JMXjBxZ(lt;s0p7FvBw`SA z@P5p}?Q`QlYpa4jedw=wch~358)Vt8@39)!je2b(JAnE4K+VSot4?E|M2uq&KA1W9 z5VwolMfDDwiT7hBK9rgGF3iM-F%uuoOuUwv_y}g=BbkE_WcJ;kd3TlO-Isd(b;ZPG z-T-Fb!!@GEYn%saT6=Nb*jNPeX z>`E15BA;|Q#%>R48N;b%>_IJKBI7umaomG(tYrj;FoGi(!QB|ak&K|8O0Lg!^we;D zt}})a97`=@IO8~uTE-AYb9ZVPBN)^E)G~%JnxouR?kZKnta34dYDI=h#007j8GUNE zQdJ47!c{t}HS9^PAxrfu%V%`D_eC|ZzRoHRd-6%0?qES6jX6RL#ur3R6u5;l|?gr26a8pKd)5W}?5*A)kz zj<^3(EkdfGPc@lm>0H@0ck7zHWi+GfnXOqCra75D0k2`+cH`EWo7yN-Y+R){PboA{$*6dTiVZ=pW;$j35ktQO#YNKf)q9+!tB3nTeR1gJacwToV$nzE3R6>Vr zQwbfijpzH}`5HXm56{=&`3iil+NY|Y{qT7WKJSOmEx&R4sq}|tF5K=Kxr2xVyN+#u zt(Q8C()B5myaT1m-|~K>n(4VZ_W#HGm5$>^?;d>$+jAY=54n!+dak2;l`deJJhbDbMx&wIu|LztbN^YD9s$LqkBK^E8bDwx4jdjHRmaIe(K$*>%f}4#qzt^ z+S#Q_p97Ea_R#(g(x=d0SG1m}v%vY%pP%Vd<3Q1JulIPjweIRtw2f88_H*9BQnYU< z#%Aj}vl!cOwc6HZU9J>B>o+yJ*2 z(>|<#ec-@3=bSM&J$&bQ=G+tKq{r+W&(bc_<9Ckp6ieyP>?BW_b5eTJyq)8`efCX% zVcyPiQu-imyK~$xJx$y04A1$|y!7Goc9Lh!OMiXdIXlDo=HKIYju+0JduIB3J4c0u69HQwe&dwSpUFHC(sm890D z)}||azelBy)%VruAEnO{7o^`RKeGJU%%sePnP2Jq_RLe6cPnqtot682Re9BzsxMU? zU-jQrjn!WDxB5KZXIp{tRUiMy}6Z@8n~G45D*oIBoq(|yZ*+kMA<*L~0Z zm-~VHp_}EM=YHf}=}vGby4mi>?qqkWJI$T$&Tw3_!mtiP8(M4yZe^N0Jj{s@1hKgu8NkMYOq%C*D&ulh&$U-OUj zkMh6nf5Si8KgK`SKhB@z@8|FDf6hO^|GfVN|BJfP{mcGz|4@IfM&xQ`8AB8$<8b@=9R^@yNzy>GWe2$(0$^2{-iPbr1$(uV{}4yoa^&&%>~En{a>m4 z=3B}dPEuYsS0iwxGKcGx+a-F(PkPI}x4pl68+9+iKsV0q;r4L{=-o|mGu)Ais_!U< zPEyRA<<8YrZ@#<29i`9rPvN)k&T;2!*}1wZ&X?_l+Vfw$R`*T){y>pboK^Ur`ggou1RCK*xjOQ49eZJ?)Mtcd)@DJtwFha&fTW5 zz0cjsH3!eT+cnPjyF8!$E^~Ki%pY)pJ_9ayFSt83{tvoPp9Pn@7u{X*#X~OA^>^iN zxmzT^JnUj!p-}E#a(Bx|kGMpi5tr$+=>~nm?CaC%1>#S%S6`n_|4RI+_TuZ)>0gUK zSF3u;fm-wR>GW^JUutV#+tzE8>vYY*Vg3wpZ-1t)JlID+`zj*GE6e__a<1PiuY5qW znu7PfW+}UAY_HY+exm*SRPFy&zo(J`YYpK=3n7o>0jkv?O)?xtL4t0=U=KV zd)nNU7JOykwzXZG?rA=te=Dijx3+z$oh=={b&Y$A^8G71;t^@FF6!hMEw9ol1 zIuC69Yo*k-_b=T;u~vUMT?N~_%)eiAgr0Y+D?hcSzkc@Ddo!B}qOQd6UEZbqwp?SS zSbc;saEjZfySM0i$6xn$+o3P(KJh3wZ+^lNt$n2w1&O-U;2Jb*+r{5YSGLUXkCU$T zyc3(n@3zBOY4}8yRrGw4qH3S%t`SzO)oGtY{BhdnKK_@zA*QT4({A1Km%QORW*6u> zj9;nh@oQaou~64r{MOa~e`^0+?W26#eMlYO_j1xj-Amy<(p5c!{1f~WbXM&;4_9c9 z2gnmuI_K`8*Sfk^e=XFv+EJ`rs^10Gw|vE>t-V}F@mJhe^xCZS-=p-Z`wXdw(Q`*M zmO2*HgPVKTSR_877MzaF2eA@esJZ{eT34nc`F*#WEIl1<2gx6& z>)dmT&Kxi39;Pi)(a*SPI{(ghSL=wrSMmH;x5Xc*Gu|}+d;Wa?XZ|hzy=uiNhp~I8 zdLpnpCY?V2)bgI#Bl=}+%ldV%v7<||qP}mx+@jd(vybd>`4FAcc4R+NXSy9NAE)!* zj+XDM_rIg%lXSM+(elsh9J>ATuKs^nDzKyFhe@-xU*7e;X6j7L^7O^MBeWyCqjk34 z(eh)w&VO6p)sOGG^uI0d+TUrqa(qYaoT1w7j+W1HLwC4*uIo|k9{+WAEx#zb!M|G;Jf2EHLcrAb`003nzENFKldp{-ttx{<5=z4lO*+=M`cyJ zyD#cqI@|65{d}hTch`AMPeoEjXZ!1U)pKN+e%P7GNt5dJYO8wKomN#;lGHE%TRJZv zAUkP?|2^qIJKU%?%PceVKhL|jGwUe&Fr&K<_S@cJnYJCHGeuV)x?Xj?bKm=&Du#9@ zDD$iQYQL}F&+qRK@a;V8q&LKf~Eje#P^t@H<5cHuz{#ne7 z(@$56-Dh>3$8^ro(n0c}omuSMVrLgSzt|bZ&M|hDvGa_bX>_ikjjprrBJVimq1(@Z zdS)(H_RN2jdv?uzPGa`+Z}!SpKj@w9e9|^MI_K?ZS-moakI#&{=R)fDaT=fP=O{h% zlkfJuXY&-Khl(!Dd1-MZ%^Q<#x_`rL9ybC>Sf$~H%n z&Y@Hw?cDO!u5+%cxIXz`O7}x{y)qwbPD(a+6!XyU`;**JI&0dT^!x5&<^DELPBAa* z%8Iwih?4qhEIZs6BuoigvtIY-VuXZB~O%|7FlDQBL3qAlNlV?S@x za<}QFDsR)v{-&49Hmyi?R8^I|UzO?{+wtUxit(Ep(<63``i|IrLe1|+>Un#${oMm< zQq%s7rt$+-gdL{?d>=}@GxVm8Qy5!G_*@lkuTsJE7b-bh$@ESM*P}X3KJUFO@ha%X z%@1^omhUQDUpLH+aTDBLZhv>MJJcPa$@sVRc28u=be;t98m0QzE0}LlLcd7Um8X>E zzT{rl$3q1rLLVwMDAN?VkA!2eCc$GgMcz{h;sO3w{K-mzkJP01drFT^_0RS%Rr3Bb z{|5gi|95_)f4BdDZrOg$f60Htf7@^I|LM2+o6B5TMOojn!DS=MCY0?}_PMezmrX7^ zqU`vx@0IEEQ2^lj<8(+{Q}Pd}S}DgAnSRr=5Azoq|~ZcA@Um&()S zx$>IwA>|{>cPXD(zIXZO%D-Gbx%{y5uazHD{_XM~l+P|dt^Dlri_5Pq|KIYs{I2rH z%AYHLz5Lzsb>$m%Wo}JoL}q;EbD1w^CT9-I9Fh4(=3AK`WKPPQoH;vlLFS6gPgQvN zU8XK`SLPv=UzTNF&8*6-$-I|o&y*^%6$2_pRP0u>f2;VQVpG;-v)KXJ5!v0cpUr+gJ2`uJ_L%H< zvnOQF$ex?MEPHMChV0GRBzsSGNp?lHko_QAsw}UpsT@%`p>n^<>6PEAJhk$Y%Bw4X zTDhR|H7_fi3v!LQMY#uaPvoA>y_9<^_vhT-bHyrGRaG^(YL}|LtG-Y* zv+A2wv#ZXjx}xfas)begs-~(%RS#7?S@m4i%T<4>Dpa*reNfe2^-*=Yx~h6W_3-Ll zsy|b`U-g%&Cs)s?KC1d#)jy~{sd{ep1=W{VUt4{B^^MiHR0q`!)wfmORlT^nt>4go zpXs;%k;ffz#MGlF|7h;)b7!A3=ahZ+ojOgw_MJX?Dt}Fz-u2f$lh2rS!rU|GOg{6+ zXU>^@+T^*X%=z)G6V91Gd-8OCVYScxQ~6`+3A1E6^@LOAo^Z|?C!Id~{HZ6NIe*p( zC(NERe;TW%si|4>ySAA+oqbPdh3#|Fq%W{$>H*VxH)Fw+FHG<1#PqICnDM?}=<48< zsfW?bVOw{~>PeFh>uqGlk7muCvEBN8r%&2{<~DEr(3!o)U0s+wvulqtyY@J9{wb%Q zIQ#JJ+Sq5`{SG*Sw|zwKTiAEMDMzR!+Su=aBUyXo*0uY8jy3!5-}UQ&>2rR3)Ye{1 z+n2@Dx<_H^Q750Hv7UR*8K=)WXZ}%L{W)sh>9gjYymjRFpL#TZ9KCfXpF7|f79DfK z>=REp{q$MKY~Sli`*yW|z$EQW!+7Wq_MNofu^J)${@k%NqgS72uFsZO=E+7r%mZv*!7mD?|N$SzR5P)f?rrX44{8`+V*M{`h~ay?0zxNB2Lz%d)$0 z7gpqEQCaWqT2R0SqJWBm-C%(zf?}f=g$1dKs05!xjV&5`ELZ{-R1^y;_CjKhVlNmq ziAju6W1LH7&GUQDT|j+4&*%I4{PBDFa_^KgXU@!=nK^UjoFP`~q}X?q#5U9yCuPOG z$L0OvrMlxA#;3E?q2B%b`o%XClhF6+7H=gY{vDTh?rI&ZJ`%Z|yLL;IuqD2$TWUsU zpTq`SNf^qc5Awn6U6bGSKtHeKj_h7as2V%mE|F>dtkFYylg zreE6o+>&M`G3`HjzaQ@Zuo7jwtE8)6rj(Rf$NQNdwxF{&<4y1WzCI~w=ETe_bXC^7 z!oCt4clKtC3z&Y{?~%u5EZBvO20p#5pSqRO+OYmzv)`vV+e&kG-B>b)%9i>zS0XU? z9bvik9G)w2^3-=Z5*-7&PJNHVyX8s6^BRU*g6ZbdyCb_I?9-85!uFMZ`$@n3rQZS4 z??CByko5bp1RpH@4wh1eNWVj+-(k{kh?E;Dg+GyghfBXBq~9>e%8GDPO8sgbGJSWC~qs2)Kk`= zwg0VQ>mXReY$V==-XlsHop(7M**)UBg+PiXuwS2v(r=dZ8!-X@awp&)Yl%-ciBEib zOG}_npT6nI?1oM11?-;EH!If~&q~5nl2Q`VvNNoKU zfMI3QLXy^)?7gY_*wB|ZTI54#L0 zmSN?Cy6B|%tPipge+Q5roq?sgzO)p3m&v%*t2d5qaS$i09A<6^CQVIGs^hylI0+&# z8{$NKYTCOx8&cjOW=XjDPXuHg-3=-4fPl5Lmls=Z@nI`JK1_JPhlvaLuoV^`X}$I8 z?PZOzS%pM4$M9jx^nm^Y*beU1-)BJo?2NRO(d-Z1J@sXw@U?kRO(x^3% zoq-;Tohn7*(jY2jNI`~43M8bYVYQHg46_udL;o(^+g}Q2VjoIjOADJob+t<2sp!du zG`~LPw5<5a+0iN3NTX3i3a7+_4_IP!dU{6M6e$SfiDYwf*3|ga^sK3w@ma~{taz+$ zDFBGej?K!DVx>$uEO`)W6i~0UEllZ@flf3Y1x^O zC8WIQjEuD0>~u!GcQ-#NCNYdP!Cy*{EVhMdmU0#^CjM>_C$`S>uV$H$uI<2S)q5|)tS zk0ATsZGvxCufA#NQ>893jqTjk+tk_1+s_m;)fASTnr0dpjR7*pXLL06PDwFIP?;vk z&G8vI@o^nZ`ThD13$yBLOiW>8O3pN8CB@@^T1HxSVp7Uf0OzJ)<-}v%OEa6& z5=_{bO!3hf$gL}zH8njx0gI9;Av!e~jAV*PN={*D;$fncoS1BmPH8Bg8=Yy2O*3a^ zWq@CS7bp|su{L9giZ!KUV#R_N<1^dW20XOh?-pwSto=q%*1nPJLGGl3hhl}v4K%1D};m6R$K#;ne5 zFOh7H&owo)C^{uG&4jaRTDCbW)0B{wVaiVLkd@XU4%5^Wmz-+tP0_3b=4@;hC`Tt`VH&4pL}yGjC1zj&$ef%V-`f&X}%$kZW1M%4)F*>6MMkhAOgnCl4 zyl?`x6db~LdV`@skYLpFr>G(dA z)NA$Xzp}GTOV=AFk*lC_yCLrkH-w=ubcuv!EeR$Cr(pcr1g0PZY|J)OZRX%X!%H>~ zZT_%%3w_sU#W;moFeeH(Zh1)H%TV}V;Zj;?@yI<^nx1;uU z_Kx1+5chxHz(&ha=oCtSq81mdTulHHV3%F(AeDNe$Xg2 zjWoPQ(Dc&u(S&G5Xhv(IHSwBRnvI&{np2t@%@fUAhb9hsht3W?9r`$oa)@@wa+u=q znZqK7%??|jm8o<%4Xw-_hsO@j94wA%M<>UR9NiqdICgU!;5ZU`m_)}k$4tjO$4{Y& zndi9LajRpQ<1xpJj&~g&J3e##%aLmBv^uS;)}VFMw%2-Vdul({j?_kLQ?*mIpJ^9s z*J`(FcWV!7k7-Y7FKMr9A8LQozG)Z4}jeRm9hW*wVJNb!)1o-3&x~Tz7TR@ncu?Hx7;oT4dCW7ha=$d(z=GQIZ~{ zM@yol9ccTOR7ranM59Z~QNdk&BhI~fbL`y1M@NHO8Z_UNJRR-yn>Xo3di?ey>0}Tm z(#DoJwb!`uoxH{${MjJJ(8ijRQG13L7Je~zmSM}`@Qnkh)6p#D*Q?fiwO(JmW_nK6 z)M@FtIZM}N8KXxi)3@)Mu~&bkqWqjuJ5x}%;xt61*i8E9sN?#_1BqTw8s9(v%sA&w z;BM-)(=MneWp#<`_U%QL$M%>y=bKW8`pO{rko59Utkw#wZncpNc=-MBD1=VCqQQ&@`jQxq>*5iNt}g^hS&Npk)Dq zCQO)kT{$yn>SxpRIiD_D|0QP(U#;vHn>cQitEPes*3rh__aP2vPi@?@&9FeFQ4lW| zBB+SF_|+_dcv!wt5`&7gs0~$8UgZ%Yc#5-?RHxD`=MJeS6--N+WzeoRXMdHU4@-y{ zILG*%N^{Z$R9shG-hbfAmGYQ=26`Rwr)uKV^B#2={z*ncieWDLYT8_Zl&i?6qW3+H z`q2~0xhm>MPTb>2p~YLN85B9DZ}(APwxj3nU8@{3$e;-ylQ1A+^7``9lJ(W=44Q#a ziWgEQkZiX5DWkCvU!XCC$Ab(6$Cz{5F&{CM*9^5hGoxM5}09vPns2 z{;4AgM6a&dmo#8NRD!=zb3_oQFHn&+mg!2;tTq%pJRQ`m5vMC@GnJ;Bpw{dmEp+X# z410ay*oHmDte<*u+EsLbF43GFIVN?(u3g(U9XhlvGtr>c4cK@w>Yo1DmCH4Ir|&Qq z8;i|}D<|m9lm9h6)A+^w71xxc?*sa|DvqYz%T#VG`ewy8{ef+1F|m`b?^&4jNZ%z#64nhS+RaUKiK6RGs#|Tx-+L0$ zRZR`E-2$k>wfoVC3uZ%U{@&?F^6hAfy8DU=hw`3LZD!MT)ct99(mvnLvq~Kz?$hdI5DC#N4a?>Ah$sN`=&?H@c?xhrb)+Tr@)qo*cC z8TpE#=O#p5_*iL-?f4`}K)F{P5Af%Id58M)?}F+t;tzTIzar=n-Gvp`!z58lL1U%a(kzp-jJX;}o+w zJ1@?d)JLU>6{c{S6pl_Nn5$%nhPtb054v9IOET3|SEC~zkr?HC8l%#Z={oAY?u8fe z))TiEPl@Bbn9IRij0@EKi{m9bj(_V)R33M!Fktx9gt3Nk32BjqLy0!0>D3jL<<^OEDmV8lG7`HjN}^2f^gZSEG;ksPi25v~lk8{)Rw{vnkhVnjoU}4f$AvooPeuoJ z9)9A^y|X7D+&dlaZ_rw1vq{*B&2W2srKpCC(-nlqCWI8)k)PC6g?kcKgc9Y3rhLj2 zBI{aBHOuYzHIGBOsA=1oZd5_NT&dSfsvvD=8u+p8s-CHdX88}*>xj&bmig(rFCTUO zSJz*Up1-%;p#5I4pWM{VrGZ3Gjim2F(svHg6XRSGxR3KpOYD!N2IvEq?pU zT#kQwNL9Cn6Yeg-X1m~aJC48CMTq41XJOoY;a3f<6uVv}?pNh2ZWEW=iWTBno!{AE zH8p3yt*Ht9*3U0=n4f{fxs1;+$Hr!Csi@ezrM!Hzc|6v^5!`&WCI@T3jW{t^BNk(o z7OQoUd*Ui9_w1=Wnou?>GA=ICK=pK`P8|NbWw;7_uoeLE0N7o5G;VifWL#{dK|6*1 z3uA3hY{--6?nI$c5w+$X;ja94-MM%M$GL6tu_@$DcJNqN179li;x~Zb|oKwOnkxr9){kZU^3HIm6*nUuGB9QUqlVs8!3Xu`FqkhCtAoM zjWt988APp-Z$xL0HwzodcpYuA^d9Dwp6H%FA+3yJF7~uZYQN<1Lk6YpsF`KZyjGFU z97gE-?u zI#Zv^mnpt1Jn#}loFcvdAkqb4{8wtPW(%5eL{9$F&~C&|bBxp8y?T>0xhpUJnRI-r z5N$L{Y^J*Qg^>|HuGE2elIFwJ<*U}0Ej4I<6nY)BOnY0Y)QH|kcv7)Ne#)WQ?J5 zV%VkteQ4yglo+FC$j;P}%8k)umq#=RZM0FD`=wxG(h#L)6sIi~19Z2EmulyRqSDf$ z>?8y2ber^3Ux?ZltSQgmBxr71d*GJT1H(I$^AP^+~|cMv*IM=zMaTDCGOeCM>z9bz~EEgH70}lw|Bn5=4~Fnj#Lva9el!M|z$N zCip-6iKQ8xq3osB()pLKpWL;yP*cg(5E-noAPNvUggmi_MmLPp)DWTi*aJD)^s}Ov zt*2gpkwS1I32{lv$Vg1g+`Mzwrp>!{ZJwNjnKIT>5Id8OSR6FVi*m?Hz$XA$M}DfI zKdH2>IqIS*QPL{XSWSY7mb4*hMy=mGRCWO4&*!=NbcEe7!o19Zz~|pG}CER z4iMRpr+_Ko$ZF!Cxg_k=IG3Z15yX+&p`!W3UZeZFHJ#!{9N$Jz$JT0Xj#!+lp>{g{ z$#|@WOzudQHv8nDs~>qQD05}!#FLNTnNgb^4i(C znojChRZ7i`xkzt>4X6dy_{RKG{+5O`>4>J}6Kx05gny+ODX`s0V{QJ02j3C3{{v^> zALje;0?16mLakAKv3TCHm98u1EuH_RLE|ovNKmOE73c^dSFYKU&}TqYY>-hyXJBwN zpiwR^AhIVI9}QWZ|BAGHOd7v*f37JNj&PbOqe0SyKYsZ`u4$3~l87%gL{|wwE#az& zD`~`6YMv_|h!b?r$!G59g68rE#PcZeR6NnpC-nH=Rr04bil>?$8wVVSG$cnIOjK$n zC&guAwcoU5&rZ#&+K88OqJN_xpKFY?#GjO?qVi+2(W24qe?9pt`7761laGc?d`X5e zUW+ZljKX}9lg2+Q&=K+%;&6pVaYWFl`N}pJc|QMzW)mkrL!3}fL(=~wgWfo6zCwqw z&7@-$>pE8q>_0!rHLXJ)5kKNr_2`v`$f%3ztNlu?4g+OtnW)l=d9{Z$%*YRl3Rn@r zlLQ9+@Fsy{I6O*V*3azr7RupS!pzspWN@a1p8+$c#tT<4{QXJ}hZC3u!Ho(2q4E_r z%$sSCOupI%PAKxVGME#?7XWrg@*)LX&E=aF%m{Of4NRh8n+&%I*#S8mAmAq|-(|zB z-}lIv9ujbqWftwn zWb(5zxP-uS2KG+)YuNHC8)or%P9{4plb^SR?Y#U72kT5Yyvpy&WhdqG`}k9KGWjE0 znV($#vqIKQ4xdu|k#Y7q^)nmTc)`RQFDAe+9R9G(yz!M>_MHqb;WLxPzvQy>Y_`K- zn%Qt(l)*<<{0)EUen1}h8O@J*dFkz@?(_1d9k=yjO#j^%BgKT9Ha+{$F*=T0{ zX#*sWWpHU?Hj^V|?5~%Ed&yGeaLj;5G;Gdn=HSm#+S|Wb9=eX zc_j?n;3N%i4V&+6Ve1L!YS|>Br)QYU!QBF$)iyud zz<$)`R~dY=ZGK}Gws1aXwx;XZtAIA54E}j=z_O{uA8?h~P#N5sVasS^VeekU?MR`} z!)b&0*=5RLW(VU&SU4(BWR(oA+VHQI70G1jas^ruC{wg(3V&!giNjY(_8I=3F8*k) z44zA{%!7rbtUv}|X_zX*ui0iLQx^6_^Lm4KK1Tn?z}ssohOQXwdL2FfH*E4-%e%u8 zaVq?3PQxqfHQo+w0_EW}n|Uy&E44Xla}6eRf5CjtLD5vvPT{8*shFggsrX8`WxjH@a+$J7xlQ>*WvgnWGN{~D zyqyDYo8Felq& zcg*g-y~4h={U`QU?B8;Ox$WG3?pv6Az2M$z8f)A%8#H@0-)ZhR_&E%480nDWFw0?; z!!CylFxC3a;de(H$0m+#9ecnyE7mdBajoNbjzrrEs=g>~mUgywwf3_1Ih1;B8+C5f zx6#N(NsXp9+Slk#i%-?a@{1Ub@)1xVd<{1iQ>~xz?mflSxfxG+EwcUz6&lc1=B-c5OPK>8PfYn`Snh z-gH6J(xyk6UTUUjrflZbET~yXv)pFOn(bF#@@qA?)#z6Ft>(1)s@2+7H(UL?wR`Jftz%l7Tj#Z2-g;x}`>lU&ExK`T z&E2}V^>>SNOLd#!w$N>ZTZP-9HnwdBwE4Wvl{U0(blbwV>)T#(m%HoSC%J#&KHvSi zht4C!W1GhF>pj~jgh<5SqmbW|GUf;fV`_T4N+ZVU5?$ENs zv<^o)HtXow@sp0TJ2`h6+3E96M>`$wbh6VQUa4NiUXQ(X-d(-7bQU^?cP{s7?bFZa zT$iq0(z|@tWm%WaU3PUj*yY`{0sf(`>*Y$?)GuF@4GkczOKiB9$)l0 z+~aDGCjrU;V}Mt{$bjhqTYEO?*{0{`J%8yX>!s<{saJ5X@x9V}&FZzZ*ScOidmZcb zeXl3I{_6Gbz(#?lK(D~Sz}|s<14jhL1jYp>1m*?K30xVtC9oo}I`GH9zk?itgdm@w zzCj~{5`!iNr39ISCI@8&ERo`8G z|L&LD@AH1k`xW)q^bhO5xc~P9R0AdqunZhHaO}Y3fq4Vx4E%cFHv`KC9vXOh;KhMA z2L3omF(_ov#6h<{PWgD#$CrcU!Ciwl2cIA8K6uFB(Ss)ro-%me;AMl025%d@ckq$H zX9r&&{O6F*hK?Ef`OqChtA|>KwH-EWSnjZ*VGl#}Ap=4RL+*$C6dE78NkLWYv%!pSbXqYBUAJ#Uk3trh67d9y@KWt%GY1rYg`(eM0)Q)U6 zvfaq;BSS_ej+{4g)5xwNMDF{OkLIQhA5Ew_;L#0jx6?K;Ib>!|(SoIJ75)+2SOH=uC!Wy)Qt2vjjkh(a{Pz2arv;`)-^W?;)FYvO79+!8 zrKP1<9Ka&Co#%@GSjLlMyx4-{U(>~6aWMB4jk`~rSHG522Xe9BL)2D8UwaAKhXQe} zl9PZZTm~oZ=p`WDf6co%N1G5E*2WtN97D{%2AOtZ1+*H^B(28lFxclhi$jTquUN|Q z;xXc^Bwwlc3hFF661kcePjK2(5Q|-`K$QTp)B{!416fXRgTzf9T* z`mc+DF%PY{yE|o2zr+-Oqqd|#sFYw%6Rz3{^%hY70P1Z6ln34B#_g!)Ittny*#hd8 z?<9>o3gk1frw50WBbC+!krR)!;dZPSKINPNL1td#pAQy3xH8}${NFAO_~#AR24X+U zEL|%B^^^&$T5<3cyS;$^LPP-2$Au{X*8GMLiaa@E9Tf+cA zCF=_$ovB^bhWlT@IC0`3?mO^@%#VwrrEc6fhAz~q!WbZELs;Jr5J>kb4=#i|a(966 zgamhD!AhhaBcW}$aaBUuae=hErf4sa7jLhD_z(^!ngN0+`^i%n$21LERBqVfr!{SBWGl^!2jJ|;NM(5;*C@^myv%!f+szzK$wK*xL`#=y1f01m9|nh zyefc&Z!<*W81Dkn>pNA!D8xATxbWvgM%>i5=fJZeoSay2K{3^(Hqx*NX4N?}U426hd{VP^}vC-M+?Pe7;wXZH#cS$F58T_G^uAP+hS z2p+jxA0htYflk~CX-HWn8`N^zm)IQHWG!G%v_Ewa$h^0XIv-($b+n%%K^pF(sPiQB zr)9a)kSt!juw0w>Zj^0|b|B8{`5 zICy%*st@L0v_GQbpF#of0tx{BDT&-`#cwx4SO`9#H6SKcK*U9Lg<1~ zr#03EtG0KpbJ4>TcIq{JAqkl_Ute%E(ALnOt zc>;Bqrqr?^T9YS;t;O#>g`&~Yl+5R}Me{hQJX!zUBHDb8#QrlDV;Z!DL&|DF8#M1Q z>nxVP`dx=Xr=k{pb8iwGspCfz?P`JCrD?1r?E*eIERj`AwET-)fp`NaFCvf4)=AK9 zOtrE`W8#K#3oR;LJf{sh05x+iYt0t)FN*OZ>Bu@Qe+x(4p;U2C5y~y$y0vQRMw>+) z!d>NPWq}&1`u>L^aI>*MYEmO{0%@eU;X)dT8Mqu8XUR|=$4AUiF0f>fM$qB6R?#@i z9ClX`E6!0Os=aLO3{nieZx2Cx`8;QBa9si!gVh8u-&?uN3Pm0=4!PXWc@K&9l2n{b zk~)wfk=BG;gu7$S7!P*1EO7(tv`5fETho(RBQG&c(aTipLir8mdunZ{&SJ)mRZp?JPBGMjbma!ue-Cgc#u}R43vbqIT!B zGuYnX&QWP!n1R`j@KrX?5w1j7#P+rawk~exh=W-$aZ%z}?BYG# z7&vAEmW`rlVLj@3Wx|d`pNKx*9LntEpmV7!LJKX$4BlFAs@OB2A@Y;hv!8&R+YHeb za%>A}{84lMHBedTJ+Wsnjzh?4MBYNbR9fpoUg`KX_c=agslbP!Rtb|8=6M6m18ELDUsIC*#UkTq z;^@JVhxtV50mad9XbSsCL5YI9ATfvEiQBz2-0rm@{i}|wD%p!$UOp#XY!40mZj@L? zZ0ItSDkDluJ2h{fJXc*DGip_+p5ICPL!HlV;Kgv-S2t>6!7}KR*--{f+2w!1sYlB z+9vSSQ}S9zOr0K5cLP-Ijc8-(iu)tdNk!WISVK%k+IYT>sRj+S1Il(#-Px1a$Edwk z&5>HOP^&+r`}neQ@45ANp1P7W=-b;s45+goK;vOYKn7o}D%yM0P&E`2i?r3{q)#k} zuQx&Hbop28M2bu8X{WGRWAb8*)QRwehAFirR<2*wT|f}bBCRQibr5xslIleRB5-(z2qTZ(Jf_S% z+%;m%q+TsYA0&!A1OJ>HwYWj*VDwxP>dDzE9`Y0lq&@b5a2<1} zO7^}WqZ$CHh8|hNp%6I%neP4MGAWtiLZ@4?VOKrXh5`S#RET9?iP!6{89%$mi`^j# zlM!#D&{c*1ugoYRN+@JI{(E#Ud|T+o{nx|^oE%qQq}VL96f6_f+6mI`R+r?%No)NC zhy(RdNYXO70BM!)rAe#*1h%8TOB7o`P5>OSn|Jb^rFcS;jbzCN7n*T_9S=A5yargFnP_~eF z&fMXMIv`bGcaZlVzQMG60Hm=@()mEnG4e;hOYntk|3<+-$b> z_(0UfTo@X^OEGiAo-`h!Vz)i`%>gKPQF`QJb=?~lh#xzOd@MrdvM#>f@+P|)NXEr zI6DZDS%ez^E~#zp#^pe$!@ZZBOqbFk=ms|~QYg2Y&Q-v4ZVF82Dm(;jBwP5~2-tTX zdjR6dU4-+*ah+JWvW<`{#dm%4M2wqn9&x0SoWUX)=XHo zX?j%Ck3vUHn-pV+Ny%h(7Rt<~XP58YS*7PI3;GCFvp+tsV6DIqpN3&z0X7lnGa4vv zAomW)I0Q28fQ$#!%@WQiwRVG!JPu$H5CrW;D5yRJ;5+~y0`OkgG&~OGeC}|6c3v$8 zzCwSR9;PxNiRe4;(X3)MjO6$`R%=AQGR)E(r^-lS{R!fDVuw)MgEg}L4*Jr_!!T6X zR?sJW%pfDuH$&VipgSx(KQLe8Cl-K^(gF-y_d3&*t-wb7fUf`h=nk99$FDKGCYo4I z6-e!sz&vJJYILM4P+xSZzu2w6=rsT(*+8G@T5%(}51KHs09F8MMhZs;!ln}BpS%&Y zNZ5m|E&|QoT7b?;W<+fTQLV{ey8Mz&vo`Bb?kc~s&^T1Z?=Hytyr5u;J}+(c{MknS zn}RL^zo`IrDq9P}xbKAB0{`1rV4HFHPUN)T2^GWzX}=dB@j(Gne=nHGttD4Ixas-l z1a?2nSIpt~DR0fhR?Sy@A!w)1gjDr^^HWk&L zh_NZU80sWO!$|Vf4Q;aCjPJrsoP<_o;X8=aPUnbEZoTEIc!(712tSs%`jbWm;;?Jl zQEG^pu_kw8+O}p?Ggq}cVQb2UbZVc}^y_e9*jt>mDQ10Sv$?8oQesw)($f~L*|j(A z!EA&(5U&?d5A-!she91Q3%FDJ+DO#8WqTcYeCg`AO8QJR1p=EZE2OTdG?y^*n4kP8*ryH=c z%m%Dd;dCbCv{<#P=_6hlal17h7i$6gc2Q*s6PO?HreVTgtz@Lg!Ms8piLN7rw5c*FpGpD~ATKxU>>iv(hPLyh}Y z$y}Jb>A6~)3_c`li9LTW1|o{MgW5x#)saK`k-K#{50LZRn)9F|N4JUoow#JS!~NI% zIpn^lkc`~{1}dkC>vf>60fIlQ2x>ZVf#OP?@2m+ieO*0a-e5CIy?y!DJHIlZMojnu z?mXch{Esp;k{os8ZVU30u#K49SJ2+Z^s0{xr*2z>+X5-8tWOc0zV#GhB~cp|7%Ub0 z?(x0?>Gcoq#!ch0IF_b}5VTp6aA=Lpfh3g$iMj`AdIY+u2%*OgsLv+ON}Cd=k4;-w zI?D)f2-j9|k99>tKX~ z_X^%`hv@c;{IEw?QEf;WLcXU2>0it*Wv`TY+)Zt{|OdM6bNS#&u>#zPXxS>iW z&swW2f*6PR?YgKpgjS1#RY@nV$d#~t_AnjzG8n#LZ%tkTpLM1-?=ucfxv@w97QPx; zPYyA4Ts8Rb0@&|K7`NX_$|d3qiOhk2nkMiseyRNg<@O759KaN50zypYv_{Cm+TotU z(8baS+MvQ8j@|Kwp=9AnL|H^RHajPN=#BRsu|Ccy}AJTt=UtfFI? z5gr6h2bI?1P?RIJZZ;={Yq!-kem2L(i>}2X?cdPup{7HaBeOXYBx(074)eGpT<;tF z!`a-TfAU}jdZob%lupMnu!^*>lIO+>b+`0jsy%5K>g)T5w{0tE=>`x0!%SF%$zTn} zY#LREEhgP2HM@_BItX1!S7nwON)WgGW1-#40zm_-IOmfv<@^K-$S1@e3ZqI`mD`gV z)m0ppNsSsGds3@@)8ighhK|jizzm$r&EenRN^MkDg4sA1s^$u+RBL04ZgB+0*nCA- zfxmT#Y0+bgzGSl35o>xS((kc!5^}?XV|hm^|3_9enb3xdW%|ymw>a!rN7=4}g3qOb zz2EM^*jUlp9f4%Pl_LKr@*ha~!*958Y%<+q((CaLiuQUt7Y?*dY)LYvpEuR=tsp(q_K+1Oo5-p!T{m(`8 zf0dZN!y-DJYX^~si8Ad3n0Z2unU1X#;ca3}Cl;=3Ck$lr3}gr$!gHA9ku#Hvl0*?` zMDJqUTd?G<0^8S6f~`?7NXAU+zfK80H|IA(NnsYJPqb@^8f0VBS!p%JAF|Fh$U4!SwmuUr zYRIodem?Rmqd7Xk+Qz!=$ALNX@Yh-hv>o~TKRfR62a@J_%>63N{cEh#P@LI>Lg9!d zUP4juzu@?A2RqMpuqw8LT`PEBA^9r*bxWA^HGhnqOy0^Wt&||V7@K46-yI}t(zehF zwF&rmVrY!v?D#>Y{(9P>1#{q{-TtC#(&53S(z6GQp$9HZyr+M0W8cH0Mt)c43(6s} zahW0dpwXvl<`_jgl|}tncV*Fu6PNWj4l!phKG&iS*O?*)`}&5TfAi+}`G*gW4K^9H zJB44{L-{XRQ1bUq(rhfmWc>nF(zfH-XZ1w*1H}0f-?oIKhR{(tiAiimKHDd4j-oTn zx0eY!u|l#1gbCRS@dTuRI{4ucIY~(d@)>pbCq%-k{s1e4Nf%c7*Y*%&?_pQW*5Q6> zwuCx*u6kF}sG?APg+P7(z!^d~dwj#rZN>$3y-EzTO_-UQnPJGxOr4pehbVgVLQVCF zu)f&V7glm6VvkL$EEDTo5$v$}vVS3TkS!tgxx^)vJIR(zD|C5fDu)Y6>|t~v7V92w zBn((EZvn?s3CAtqc*<}rdb`v<2 zH}Yr5?8()|9cuopPoc3ibc;|AcKBW~v2g}0mV0V{8<&`W_r&7eNyl3b!uJ7=Qq<;< zn*Y1bF@nxyn#);I4N|FV&{w?>d+6T4)Bvhis_SBUL^r6Z?ZIfGF~Di(0a1smqh>7I zX(V5(iG$^+?wtc9|NQ^x0?9wPA~`|QnbKukL-qaHeOym2`0YT*O+IMU0S--PgfYDc za`>kMEf3vbk=Ec0SOI6iDR2g?=qAuV)Y`#JO6nvKe{lR@t5DYfx)Y#gfbI+s9zn$0 z|AB}H;7XJ`!e+)`CfyJP1sbO-p!g0dIfOdy1Yl<;ZQn++{IIpdp!H+s5@JSzY{K{Va1*D;sy*Y9YyfB#wt-U$% zOAP5`t4eY@OeDqw-VFG4fG3lnEv+x}2tCsQHP01SDCR;@I#D2llnW*bbdaPc9ZEKk zkI5=YPijMZGfEVsx01F{kwJ8oQhSimT&(cr5MpAxH8NK`;lUl0#Aj;)86`gS6b@Qd zwl*+3^5s0m1KwPJ*xch(B;L%GlV4%8;mg5!2;=rXvJK*i03@Infs3#9h5UY4y!N3u zzg>_Qi%A0o?RIIYmck@Zoaw=BXDhWeep>u@8^nJkj&c}YI1hx>F0O^d?+4=^t7n3o zj3XS<`_MIR+z^hITb-u*kpSo7+r;TMe~VP@IfVC0CK#SA$P4m^ct4j(> z^<`UE6>m23w@!1Dzu9isuHOF5H#_%iVqR4A955ZsC0gcyC3#=@o(_3%<>daVrG}tY zO7p+6^UV6VESTbN+_GoOhCK5UvF ztP)B~makuJoS%6eREbVK)o_z^Qd3vkNt3IEZzfLy1!u&r7muE)yeMCBhcvpWAp6BC zT}^0Jj~;OS@;Np9@!`E+Z!a~BJE6?X$e5X-Pt0Do{a;2BsiI@f=(c^iVeL+R>E@iY zg+{HVZLQ|Y{>$=Xw-v`EN0-=ZSNd*Hty;2VwPDZYajKyyX(Np3qX!(pn!b-zUODzX z@jN%=duLFs#X7y2{96}Od}#7X{e$Dj9~!X?uj>t|IqM7cx;*ppG<{%rh+mhZp*Oc} zUb=RzasD(_OjdS+IdfIX6a$W=P2p{qH8D1G%ON-|l$UPKHlt}3wN6*-#z=mfFIz55 zocw9-6az*mo$x)?TFWFDR$RIz-*Q_~Tsu>D|5i8E0!wSS=xphU16T?Z&iV_(12jUd)A_+yor~}Oa{cFf{1ldR zm-wr;tXo&IWo@3>K)YWj0qWv)Yf6gO=A|2Gz&$cReJ*O>kcp`?a#-7n@={k$)TgA+ z$eAYbVlngaK~G3nZxeJx`f?#DtsqP4h_d3|YHgfA_edOF2h;dASoqt$TvB>LZazbD zYg2Dai`%5deD%~dn+mtrGjzpiF5Sw|#SIMo4iUyxLS(M>*R9V_U!Jr|*uH7$+BL@c zw8d@U6kA|?D>Buy;YK_uy;>+{>}WC7I$R!DE%hQvhK0q#yy**O>dol|Q)VzqiZ=J5 zTW+iQC}OYvwrK1AWy`*pv)r)qno>(Iie0}wo=f!K%6DA<>6&7LxKtOq{Al7e{pCZu zjvYwd98hGOu;SCjD_mEsTDrb??Tn0NhKuW!hx5m73)KflB}c}TWZua!9w=D#uYA|M z{7=*3^1d!BFbtZa)LJ@-0XK;LlKkLp1sPSV)m`d)rRRVNgAP!QI=E!=4a3eGlTT{r0CnJ=xJ%nNFDqJSz}zHT zFz|<%kb>0zU{=EwF;ufW^Y6$JC{6aOD^hH=p1I2(hSAPeWEfKr%Wj6qLN5x+` zM+Sh+&d~w*J2sb5s+%g2_C%>L(o@+-6()rf5$*;I`|H?r2|3C5bO})Wsyg`quA`JfkfZf%rRbm;)n<_k6dkb2NIN^Mqt zFjL7b#%{QVFa2EL*R=eLdvdf7*$s6SqDSr`wn%K($r`KlbGp#4LiCpm%vSxBpw1B&BJ;Prv;BOWH`{e?L{y+inUoP+y0Bk+!N|@PMcUrVC z7PPD`z?}%AMuMNn;MV{iyExrIO1!OgL)5{Mwywn5Ab_t0cswpdi&c;zt9AU2Aok*c zfnOK&{;LN@hQnRpQ-heagTT5VIvfgJiRyPG^EVm661|LEKY<2X=0G9V&?lZ`H}qjF z3NmJqWAPw-Ex&`&!Ahl~)LPKInywoxK2X~wWJgJ0jkwwwX)A}8d&g8B#!VnMnh#tm%MjU zBKM?2jN-o?VsL^{)t_Lr&6U^ZLA*IfK9R3%Zr7~-fe?>|2SVUVY>l|%wGcGp-P0ir zInp~KxO;8MuJAund01Z>Xvtn0;8e7wHQMm-K!`x!&zhsEdvruQLvlfFOYEJ|VGi&n z)It>i`JJf?YIAisy1}ef#s9hhCZ^}=yT{UlxvG-k?5oz!eCNfA`#UHo{A$fQ=v9aB zS6emz?}OKx)!OE^m*5;uGDu7L+U9CIh2-rr6XQ1)ETIJ2oJc{=+auH=&ysJ6Qwr9-r|qm_Xp9XYWKY{e;6J!-kLCTdAX4+ zQEPYS!?`vKuE}^_=MjqTBu{j^xiZcmM!Hb1p?)n}4y|D?=X_W5`t^5y)C)3OG}Ahd z04y27w9Z|qLPdjG<8>M}@q_)v7xUmWkU$j9hlz&bg$VLF7~~cSCpNnI+ZV1}x_Zfq z70cJ+U)kEz-`J5B7tUUI=1SCVKTrdnd7xfxyr_GDk!T8)Prf>S__4nFP*T{4gcRx$ z0{OgS)aXg(Si6jgGsb=5+C`iJlR%=@et|}im}g`F^a`Rcae#X<|8zIW($RKnUie7Q zfINRhGc6VrVJOh$A&M-bHZA@V(vCnOKY59>oH}zNcCx%6g zN$P71^E`)3kw^QJ2Mit?7uas>!B=<AbRAvE>QxW{<;NKW3c-gtxFAkIG!o37#@ z8mgk(ErXO8fIrkU2W=-=bLW>34<(NMHkPKUkLfF7V^)^$t6YCd|L|;hU|?v3Z8aojvy8-r0y=25lGU zhR&iTE5uyI&n~zwAw}XPlWQ>@&&qO^KDK%BiiU*WZW5j%5XYzU`ZD}1RR+M9>NfwcOq@CoLs+Wk8!?=>i#u8 z)JH!!X3M1=;6Inqx%Gn90P}wJ=Gk! zZ5C2E3LAH7BE9f5gdOf;vn6Xn6Fd)k;U3>avkhXn3-ue;rOhMZ#kXCkAEwqA*gcUj z*lCB&Wv20Vs%spZPik>0mZif-VMafcTX;(lyOPEx;tU=iDopu7Aa79O%`EQoE1ZbJ zrK7ne*SVc|59c&)jm3w<1Ye91Ge}$^<|%&K%uTHk)*chq4&*+)$w{5@33nh{ke9)x z?~Yk0gQ0K(>Aj$Bwvvu72yY-g0;Gp@Y5hoeRV9&r00!noFpm|8T8CFa?9|sd%Lodg zLL5(UGjyQ75#OT`=|i~#XvDC(Mw}Ze9QZ*H4Jd7x#T`H+lFh=2(cFRSTxESDo(~fa z)HUKh8bP{l<_^>d$Bqfd266{(a;Gt*KYqetF_VdTaKUHy(mz2dA^wHstc=^u87yO6 zi1+y)UKg#O{jYTfI^5D$IeGt#(^p-|PcGDZaMzX@*^8D=HIOjTQ&|$V>XRT>?VkKM z;>tH{VSEBx0P#&IcfgubhS8Uj#88fg(9R3EZ-Y2`lX{5$cLeI8`&6L$)FX`x?#$5{ zwDbMPIpuR;39zAX9K4f0W+9HIb}!)o`t#-EHQ}Uah(J?l=Z(U+AOX74&V}5kT{(J` z469%;(**1@ohJ$A4ji3`OyNcsR9m=!BMGe9qMSQ|3#)Qo8dt+=EWG~))ji!nOyQ_! z9%=7aLt?&jCewfB%gA(>pK-Rnd|b_!v5Kj?nonqAf;)XC}Wh7O?9M+{){y8 zqJ#s?dwoDQv9~O8bANu|jMpsqieiy}?=>&1|I&kA2J3@fe8vBG(u=?Kzd!25SFmTj zXe`-O$ccWeEh4R8^|Q8+O_Si&!5V{XL7dN8BdXDwN31oX6B}94NotPhgyzJt=7{S1 zHM#rI*VP-uHT7d#%1zA5i8J!mW7A4b%`*Drq0Uq>tb{}H_gX5dHwt1d>snC_dcJ1# z)J~{iP>dc?4SMD9RQ_tF`a@t?~R^i@L_ZdtrSIw&-YwnRvP{1|*nVkBO z7}#SDXwWh4?At(qh${%Eo4<15(j`llE-hJosL1Z8^3vVsTyG9J;pG|pNvGL{A3swb zURY9Gp)cEKr%vVZP zftm6}|E_p8g35;|D+N|DpZ^(d{KQ8)-nExJwqnrS|MEM`1#$4tP_%AE+u zx@T+Nqd^6jAp+T1XnnT`y~Y|sPR)R~1m0v~Y>0NKSSxrcvo?f1f1^aU^aKu4i-q}W zM8^mi6NYBR{RP*z&4I-{klgfVGkNQv28|VfMd(aFP?NRTMe*epQ($Q`tRDsfk{YyBUx9RAa05iq>9;9 zK+0K8^6=hDE*@a9*9|&2=JMr=!xrb7gWLs8r z|2*qUEs7_!nXWIVC5ZrKV7Qrcdjn|l#3i1ii)jm#5f?}wEoDIBDaL=qjp98`Xj}AT z3f{UAQ}B8g|M1hdp%P&S@YYfb=ZAGbMf~xH>_E^0*juRiA_yx}bkKmJ6lQ2D*5#hB zN#{R_f3Ey^ZM33xme^0X?oTCctJ(qu5VcpCp$(!=AH>{MQ(7sBhbj#ZMFDV1OFUls z9Y>t--(9u#HA^cY$a15dbtuZh#EB`w>YAx|faYnJvGz=WfO3vFZ3VT>h}|``sv7#? zsd)8?*zH%9tzK7EW_Wn4>`1jMQMliujcL2Kp0wp`192);K3sC(@Lm1c@{}<#+35pg zjRRuLF~eN>>X~#S>xgA^C?uc>=!@&5@kvwwubh2wetaReVjbefx&&9?GyCbNU6d*z ze@aM#!8amdbRSo$c-|eo-0qKOq~#(!=($ws`>zROdcZzz+u^+%iZ7QNuk78j_gma> z1_S?R@(0hWt_Z}3erA1#M@xUPCSQTA4I66`1|sk>4_>i!jFXoolZypodR}Kfh!MB z=IY|49}*tZ(K!OpHGQvwBB=tTysMz8R6)~s6*QG9Xo?D&N)@zisNi?00v4~UplyzT zXQm2a#J0b7E?%`Ne9T2!qvAvseIl&pR^u&Ea;gF36a$f>63D41!q@oc{e$Q%KPUcw zt$le|6W6;xX_yISV5p=+D{+##qSn@3K(Ou`C|X5OL7;+&h)TgPprCbY-IuzHh^PoE zs3-`iC=sz#KtZjFfPm6kYptNIo}nl9-p?dx*Zce3Kkmarn3)VSCuh!ka?X1`OGhP< z?oSj)(n%9V-gL|$AM1NRT1^j{P9gJ^WEf82&HDyP&XzOB{>_qQY6z$SK?gho9m)945zi6Olx1CT>`-+5+t9>EwR~ zdoR-VO}U|&_PXGvqvn#6wsO(Ur6(WO$vg30nO$wdsuBTmSp+Ni^s2^6^iRUvxX3OhV z62Gmi%!=3ZJ8RW>K!Uwjtnrg(P7oJ70A$jd#9}U=CoLE)=GCjeE*A+MB9bxS^pSUD zovC*TqX3l9R@tm3Ndi^GkDJg@+jC4_ZMdGeJ*ML?fvEbJ#<6urubzFVeNy7p1(Q!M zi6KzZwP~c7hV`YbdeH8{da8hMmAZR(qG0IM z-7cmNxkBO23%K)Q4q?S6eTtz;8Ws-AinM#P^&9EMy<@*dcSnqm`ZwOg$}EOR^>nmK>R?Ge zV()$pmIllFUla?aaLi>7O0R@kW4H=%VHN42D$9zVk#JiChq1?Yb$RUw^lr;D7afUA zvD%>G_g+`m5c~CjsWhS6$hxmymAw3bj`V*f12|{1VP_Yf$aJ`L=J>buXJ!rFAqyR^ zEQv6Y>wGfm4xaA2*Z?ND7l4Jyw=sGw1oXmYxyyk;F4 zgLRBuzjf0@|K=pQ3pFEDC&(B%VK|H8k2C8d?rm} zeoap^AP?Oq_|uN9m-pUbFUxzaY8=^J<&37A(W+k9z^-4#tYYbw0fOcfY0burVnC^! zVxL^j6tMe7K}62JCmU1F;4Nby-7KtOW1iz3>Fti#oGWkg>+e9Z0nZ{&YLqj5kWc)J zs&N2)0Y%8}WU3dP%4%YGWjv>BhOb8#ahz3y7=eUao1!| zTsGF-B>I1eyS|mwS{EnB-KU7VPfc<6KH{#L4t8ZRe;zE9u01x_%fTybuKQYushUEs z+8lag5qcpAy;a0-Gh1T{z1&*$<=3GXIYG>Qp#J_%=xrY@=GLn(BlLb7BIe30Mmst3 z1kCP{lu$}v$bn}O=l97l?WievHBoxJPun5zrah)(*}8)l@+!0yXT7>%A5l)lD02ilAgQueC{`*Jn@!>$Pu@B&zp$*M2@(n zEfL4ELyi3qT`OOQojX;OvyU(3HSE#XOaH-8qd}At1uiWSH(QRl9;3Qbr77YD$`L1; zA`YAPsaUQ~?_1dtao9R4<`#<2@xNP40T(L=obEM!Hp)Hl z8(ISH#C`Rb`Y{L|AVQg6b!ea=yvwsRWwDrfy~hQ0Q1Dn& zux&%IWur9fh!-6cO=|94x#vP+?KS||cZ>AbL^rpU!i9T5;5a8?8IH1`LC0YMjy_>E z^Wx+qDjZ3|kzkke?ACG2Cobh|4y{2%v2~<|+0WL>J8Jecb}H_D!fw677{}N@W8=p$ zuB;}9T(fs& zB*FvbVCvnSczaQAQ!sg(g2~PlOg^Sy@+l-freFeqdhjiUfn+NU2nCXTOaAbyNyX0! zvhf$CbY{2O8#~n)3RSe|(DHtSm3$NiX^N8AE*8D7kl}ZKzD0&B01F(hBoji#fHKh_ z`6>;E)Gb@m<|uKpbTp_u#-bg>S>UN?}>1bUaM@ExT@yYkkn3*LvVk@;IbQLH@ z&a26%R>mr<70%9CWGHbUU4MN>I-k#78l9;FwST@qySDE{J5LMPu|HTx>Ls2z=AY<2 z4ny#_LC8}zuab$5Bj6t>*NTa=UOKL-PEUQbUWY^?^%y;#I_r(cRjzX)K3c2e ziKm&e+!wVOg*0eiOtMJp<}ecVD$MlvU7~um0N<+bvHTWC%p-J82mbc&G|k}xcI2a97lQcqxM$&wF1C+{_O!u&~-b(Jp6v5fS@ zbnTt&F|_SAeX_UD_Nicb^=nVvXxB$LQ?IEZ9*;2JJE5oVOcvqyBH%Qqs;mRHp}>KLJxKC&M$-{0GNeqK#Y zTAsm>=05;aQMJwM%Rw9h(Lt zqGM26^9MFvPj&~nf{az*vh~EmC~nbOI0KM70~ylaClwX#>Ej9gwxr9M_pqWB4O#UX(1IEt@U`&j}9>o^$k6R(krWtfO;+bY!c2NLW~KNLWT@)=?Zw$1$FaAF@kL@?6z5 z@xTadB$jp{5RJw_dpTh=kD7ZC8=*%PgIP3^XEG?$lk{PNk1t6|bI3lLl7IeinP~q{%AYWP3oG8oD6;EMkHzElB3w-}G zT`nt#`Rc-5Ncg z140w~Q?vyBr`@-NbHYD)kk(Eht2~iTE)((=oeIm)X&x74r{$e@xDj%uW45kK7UPy4 znS9D2J3Z~frHrtNTXn=H;mb=4@`8`IIUYPEajcfw^mpy#pBS7Grq}#BamM`V(;P-- z`aYkbdm6-4%}I$4b_fce?=vYZy=VoDD;95_bin^qXq(Ve7Z#Ri@vUZ4U;Rw4c~19` zXkm0(Y+{N-N@7aJL0$54ViCZUMIhy_6y&t#XC9mzhIl^PYWRevjixxL);f}6I- z=ppU(@`Z?Z>5rv10yN)*)(t}B}zVQKMi_7(qTb73{&f9GgH`_2%~?m2Yog2Ofc z>;XF3j{ba?*q*}N)|R;sAq;X%C}NK##?K3njl~iQYbu-j)u&f)naZZG`l+h+6On#T zhYD4MxyV-LX5GFWkUdyWwQLo25uWC$jwLP%3yoVGg3(!Ev!Y5t9PX12_sEKSN>EW> z3HQmar&To5?I}wZ!mi;S30luSq(Mv}`;Y{|_9W;Y`Jofrg~nm})s@6CkmRDh$fF;~ zm>(1wPszBa$_#0r(7tvca61;YcYpoWxsqB?h4aVlbtKc?D`b|J*UXa!!^zCT!psnF z9e+cl2BGe^VkZ`x7#7w^1D)94i!Dum`8=uDX;FG{M9uPfshFznKP{3d5 z_>l#Q7)aB&6yhVzztIrEZGNDa_q?2{s>3;k z!n8m)9ZiBBnxuGcRIvO~>4#s@^^{1Vnm{Ry+!g3hiIWo*beNHohi#f<6CbRFkEbQ%vYcTKB#O~SdMzYPzQEo-?Aw;zPk=%2C1^;J@@7ropC>z+-paVkz<-b zdhAO`e#rPY1wHm1Zh1`l@nccCw@IYe$#u;H&1S$%e+7lm$|f%QrnNO^z|$>k=6(L%CN8ZF4>L^Zkc zMDeO!b35g$cI1lC-0sOMAe?qYD~!Gv#2LFU6Qu6azUe279~zTU=^VMIFsdc2*LSiE zJd1CrPRs!n9ZLJL))#10ErEA!&H7rIs($ zD=(Ppn9gr$6b7^jgWM#rZh=N&Ft-Wf`}Z~xpCF|skRAyvU74Vgo(p?57MIPIfpef7 zf6wBn#WTfQigt?bioOa@MVKO5k*xRu^6^988VkMeJ#T#njqmZwWy&?mbFc}FwOnqQ zZh6Db)x!! zI$M24U7#*jm#Qn&w>e9$4J-ji!W3{aOaTMA2yO>=h&#^R;A*TD){J#$>kq9xt$nS7 zt!G=$w~n%ovEFW-Wqr;1w)KxTN*k?BZ<~QOBW$MIgu(jnOPftLyKRzfvTVM#sj_)! z^OMc*{98Q7+wmRw4`BK?l%K@U;AinM{O9}{eiOfwPvQ^p=`jAw;V<*oVfxp|zp~|Q z+t`Y>9c;VU_Ol&oJH~dLt(UE@ZJ=$qZLIA|+s(F#w#l{`wt2QiwpVPg+upIgXZyhR zXIshE__pe8ySK%+JHPz_Kte5=Z}=LA797Oq{-z11lcMcukI_hxwV2TTNdXRS9!u=E z0AVd-I)Q843|!+DbvChPNG40y0(ADAoL?b6r{@{iv;E)7vi(z(4d#1)==$u0pU&Sp zJa}mE!ie6(zjL2b(U&0(Z21F*pSebr5k76-BrVl-k_A`jfM=8?x=Z={GQch60OWzF zpe&up2`xIKEdcZ+&2gZNlVp(bJYbBIoJ8(#_~Ji{|EhIxbZYPKBdL;E#Sj)>n}KA4%R-{8x-`cEC?IrCr%G8x-QvM|d; zf{kn;!9KrG0ut=xp)j%;u<7EIT5V0?g_=!zclIxwKIOkk)cpShYF^9JaAu)rWaRn( z3FrY#r3vey{}-%>rt%+X57^c5?P0ek5Mk6Es_5oEzOQrX#E02Ow(kQGg7sJ%9^$W^ z6`gQuslHzXGiqO9aFv!=UcO6u=;^R8gn;=eS=p&6c{xWu3z{)M%3se5b>oZr1kYN$ zU;%^#$~I=4%-3e@j|<vV^PHH4Z>rFBd+Lk3(nt@n;n?(-2Sx!dkNi%~*a}sF$LT=-??MWPq93cl}<^nPo z=)yL1oSrU*w4?DJOi5m<2vhEi>0qzX1F4ms11|V?C|jF+8(YYe`7#wSUZw)(w-6rB z$^=IfMbb=o%*Q@Qmaf4UG6_b;2q`=g3=1Ww2ij8|39T;Pm2piMev_Fue#+-q!*Pb4 z=UC*t8Nx$|sAp3<>f9}6T2R=MJ!jz~sd_l!V*mc*eO=>q4GWpv>-Ip!$DKGba+8v^|_qAM^j``%z~wJ5;Nk?X@AbYg)0W&rX6X3p89O0AJP7D zh7SKAbsjB*&5sHSkKc9Zz|NiNJ9HNkcWv3U(`p0SN+a8!*aP&>|G$W|f5xD5|McSe zS0k>BJ;@oF4%a--^yxEx`sk44u#7m}TC^tG=K4Pdc_ZXO9!a(DGskcI`0%q04M)!w z7pMF6(eWmpq#t;X;ovO4yX7@B*$Ex(|_0hz>Zv~7_pXmL!)avdiW?AdqV zsCM7(713FG&Ea{48H>(p>%J~{nyPPilJSmvBud#^6}hnQN$XnQ@9Hn9O;*7Fr3Y-s5py(wG2?bER6IH>e+L0 zR>ieTx!-+P7yy(>o~W1XJ{A549z93ilimYN{XOG*a$cYCGQ$*BjshvTOR@6h6YmF) zsk>6Y65?E<*nRuqE#+=$rQn+xUX+=-JvjjsrmJKWTQWU+nERAquNAr*OPIr7?M*nU zJ-BCCT>O%i0n7D+;=(_JE#82`LS$6Toan_{6B2fAJ+V!fx^>6qO*%LwjXox0NxSD!AZ*E(N&L*XY7T=6+s$+X46+>Nd7l`_C3^-T@M#ujIm{ z1ne9SaHrH-AhX*M8|1VB{q2kyUAw2sxO`g_SeVFb@CKoe~lJ$rzCR`+HF*GZda%N^6S;}Rr&L>{PyWM zv+M*<+s^U!?d`w;EY<`t=%f8=EZF7xztmL{i}9>~+`dbC;-M-IJ?W38mUsMAv7R`o zF74Turz?K>G5dZ%09EMe0G0pJ#eq5)B4P#!b3`_K*J6J?9goi2$Gv~(+?@xbbWtgv zAIWs6SKYi=_-&oZEtrfI=sQQB4=3+yk(W>)e@MiRjkMEbza^gq0cV~{K4i!_bZHK( zJI3*BIFp@qF8PwSuE@*H?UTvQ&Qr3gWA)SqIP(LWckD>ga2<~I)S7vc}EIGznq z|HZ2fM^jhC?bj94Zm3$HF@3@#w(j|l4$R@Nn1qNevp;pD(!Bi&Ke{_Jz{V<}QXzGVQ;^=7D4sdo~ zp_!NjySZBO-mR;(iqt2h*F&Xb#li5{p`I}PrKvyw&@|&zxgNmJh$M`F?8WckXZ+6c zU&TgmjM7dEiVj@>Z58yfkhy}!71!+dw}G4{`OiZ+O`to=%kmq|vJMkR2IdRF>4lM{ zf75K4I5jpDnk{67e9}gYv|y@esH4|_FuX=Qz3WY;e?wH#M5CnuL&Z*DtIFa?(H!Ih z_X<@DDgyI$r}C#~hWIguKb@9Oj-vyGu&OmhRqN;!#?7Eq_GDKbkMU*cqCLQxlmX zzjDr^H!25nO%qOA25y^B+wj-KiYN;QONb>TNe`J9#zhzzJO!NvNI%K9(df(4vzF!! z9)r%kEE#hD2I*jeWPxFXXEEan1X}^fUd%!LA69?nZuwG&CF_>2UkT%1;6@dRFK@m;BYTTWN!y9ed!W64)V$zO z&Ie(Qw28fflf{s@8_3WPl9#J3<6}5>E|#c(bT|UKG-tL^M|P+hEgRH4YmQpVOKDtx zpR!-MsZ0avyNwLkGWj3wlcfn&3iu*gkwMSU(BSh}ax%N9D08N#j>2nk$oqhfsfhD4 zhKoP0#{XE7{f$HffRU4yH(%^!FfM;}3Gd-JXtN3Oaj2T1zu`$X@=KhYu~BlsEx=9@ zohf<&+mOc5rMlyYt1Z#{qa{O3GQ1dl)y24mQrb+EtFa4|eoD&jli3c*9N1%!?RYB; UM}_7!#PZb|II0ruxA3(4Z#H$0h5!Hn literal 0 HcmV?d00001 diff --git a/docs/source/_static/fonts/MaisonNeue-Medium.otf b/docs/source/_static/fonts/MaisonNeue-Medium.otf new file mode 100644 index 0000000000000000000000000000000000000000..cb98016926b3b743bff2df2824d0ad0fa1021500 GIT binary patch literal 128648 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 zjB&^qhm3K^7>A5;$QXx=amW~ljB&^qhm3K^7>A5;$QXx=amW~ljB&^qhm3K^7>A5; z$QXx=amW~ljB&^qhm3K^7>A5;$QXx=amW~ljB&^qhm3K^7>A5;$QXx=amW~ljB&^q zhm3K^7>A5;$QXx=amW~ljB&^qhm3K^7>A5;$QXx=amW~ljB&^qhm3K^7>A5;$QXx= zamW~ljB&^qhm3K^7>A5;$QXx=amW~ljB&^qhm3K^7>A5;$QXx=amW~ljB&^qhm3K^ z7>A5;$QXx=amW~ljB&^qhm3K^7>A5;$QXx=amW~ljB&^qhm3K^7>A5;$QXx=amW~l zjB&^qhm3K^7>A5;$QXx=amW~ljB&^qhm3K^7>A5;$QXx=amW~ljB&^qhm3K^7>A5; z$QXx=amW~ljB&^qhm3K^7>A5;$QXx=amW~ljB&^qhm3K^7>A5;$QXx=amW~ljB&^q zhm3K^7>A5;$QXx=amW~ljB&^qhm3K^1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN> zaL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD z1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQ zOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv; z$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5q zhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN> zaL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD z1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQ zOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv; z$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5q zhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMN>aL5FQOmN5qhfHwD1cyv;$OMO6 zEbn^CSuF1|j)3)WBpd}N!@c0%a38oY{60Ji{s8_bJR1HG9s`esv*B^@cz6Q*5j+u| z1W$%@;n{GxK54aB{$P9@J^@$2C*f1@Y4{9$7OsTP!RO%%@J09%d>O8SufSK~Yw&fr z2EGC9Q)!Fk3Co?uYTbIR)@`)Uqb*kJHfCTo%)%O23;V(TZ~z<#2f@K`2&{uA!IR-B za1NXc=fP9qY4CJ7A1;6k;UahjJQH3~epRLYEqvW-TUs@4geBMp+hGUngk7*3epJ3& zTa|4;Qlnl=jrO{V*BM?{^E#{7jVQ1Y1va9fsN`hji$gx^_WIeV553WqbaaaJ*LqV*r*=UXbNmpk7+aoHmb)o zngScum#q;Wgb%@o;UjPvd=#2i8_{YbT5VKcW=l+~jq1ycrqxFEWk%C#qxv$VX|+*( znbEY`sJ_f-T5VKcW;CrfsxLE|RvXoq8BME=>dTC#)kgJYM$>8|T5UwDjcBzItu~_7 zMzq?fo=B1EiHxSzM)gES(`uu7BBN=wQ9Y5-wA!ei$Y@$^R3BtCtv1SOji%K`IjzyO z+9;a$2KlwNbt*<)GC@`KrzfT5UwDjdD&~Vp?sK za~e&njdD(-X|++#X*8`iqSZ#U+K5&g(Q2dIQb&#4I6Z2{E@3a~m9);a}P215_2yx_Y!k2G4~R4FERHi<_YIM#fXYArl1ci#rui5pP2iJ zxu2N(wI8k3ex7jtM9iOv`4cgJBIZxT{E3(chLVjd*sL1G>x=0Rc}BIY4t9wO!;Vjd#qAz~gT=3!zUCgx#c9wz2tVjdyp z5n>)8<`H5ZA?6WcmJzdzm}SH)BW4*f%ZOP{%yMFu6SJI{<-{x}<}uA`KJ7f_+ytB8 z&F~g@D_jC^gSW#w;GOU;csINU-V5)8_rs;-dvufs;Y09Y_y}AEABD@|WAJhK1Y7~1 zgipbz;WO}AxDq}GpNB8N7vW3rWw;8y0$+u%!Pns$_y$~Sl>ZwmVH#G!46KG(SOaTe zKiD4*fCJ$mI2aCrb?_v3GCT#&fpg(Jcq%*%o(|{31#lr;1kZqH!n5owXtvGxM)^hY zFX9RmvI2#yKp`to$O;s)0);$D%#*}CNz9YPJW0%x#5_gJQ^Y()%u~cXMa)ygJWb5g z#5_&R)5JVY%+tg?L(DV8JVVSg#5_aHGsHYg%(KKiOU$#xJWI^8#H=J{B{3_BSxL-F zVpbCK95K%k^BghH5%U}|&k^%HG0zk8JTcD`^E@%n6Y~NwFA(zrF)tAF0x>TT^CB@X z67wQ4FB0=2F)tGH5-~3k^Aa&H5%Ur;FA?)HF)tJIGBGa`^D;3n6SIn#Rm7|!W)(53 zh*?F(aNx%GOVWz>nXzq z%CLblY@iGqD8mNIuz@mcpbQ%*!v@N*fii5M3>zrJ2FkF3GHjp>8z{pD%CLblY@iGq zD8mNIuz@m^=!r`7L?vBcd)g`K`kK*tqLQw!8LcNO>H3<{dZLo9uNkc;Dmm5@m2`d0 zXgyI$*Vl~J6P0v*&1gMQiJqvWe8gT`PgGJqVzi#9qe8gxyQAzoT(R!ki@)4u; zL?z`TM(c@6^hBLH7pt63oeSeb@L~7}Tm~P7%i&}2argvW0iT3V!KdLf@L9MLJ_nzN zFTfY!OYmj53cdngg|ETa;Tre`Tx-<1FxuzwJ9RFM_FRZgoeQHq7ot<=!f2nz@6@?4 z+H)Z~buNtdT!>Dc3!^<3qEqL>XwQY{)VVO)CkH!qE{vzZInX{u*r{`2JQbb>Plxm2 z0=N(^f@i=p#V#DO3y18&A-izME*!E8hwLV%o0x85x{2u~rkj|Li1~<^kBIq*n2(70 zh?p`lWn#+2l!+-5Q??k_u^3UkgX>s~sNO+T?;u)?ON>j5ON>j5ON>j5M~p{|M~p{| zM~p{I1u+%GR1i}^Oa(C&#H5Hx5tAY&MNEpA6fwSHo^XA|h>9^Pml2hxh{{vkN@6OB zsU)V7m`Y+QiAfWaCMHcxnwT^(X=18~sUoI|m?~nbh^ZnbLrjL43^5sEGQ?zvsV1hH zm}+9GiK!;0nwTsxSz@xpWQoZVlO?8xm>Obgh^Zl_hL{>+YKf^Ork0pmVrq%0C8i%S z{fOyDOh01!5z~*D{>1brrav+LiRn*Fe_{p@Gk}-@#0(&205JoI8A!}PVg?d3keGqQ z3?ya{F@uO1M9d&!1`#uen8CyhCT1`(gNYeT%wS@M5Hp0BA;b(JW(YAuh#5-EP-2D> zGnAO2#0({77%{_$8Ai-7VulejjF{o-k)L&kt4B7jE$hBmjl_&a_-=WLUbpgkBQYh| z2HRl=?1Wvg8*0qp4!8bV^lT3r%NaF>5jBQ!M{x8J9DM{wAHmT_aP$$b9eo5xAED90 zvwCeuAED8L(T+YsqXnZKeS}5}Mmzcl8!fmaIQj^VK7yl<;OHYbdOb(4=jinuy`H1j zbM$(SUeD3%IeI-uujlCX9KD{S*K_oGj$Y5v>p6NoN3ZAT^&GvPqt|ovksN&_M<2=2 zM{@L$9DO85AIZ^2a`cfLeI!R8$Qrb1Mxc$zXS0*5WfTQI}pDE@jDPdmiV#6k0pLA@neY}OZ-^k#}dCI z@jDW~Bk?;Dza#NG62BwyI}$&R_;JLKBYqt5vQ*T#T~zKMYTPbr+%9U|E^6E^ zYTPbr+%9U|?v7{M@oYPuZO60ic(xtSw&U4$Jll?E+wp8Wfo&(S?F6=+z_t_Eb^_Z@ zVA~07JArK{uzb`sl8V%te0B6#@Lipw z{d7ibiTTNXw5k1ccC?BM|RZ~%Ka zfIS?*9u8m+2e5|&*u#PB;Xw9qAbU8FJsij$4rC7pvWElN!-4GKK=yDTdziu=rm%-8 z>|qLfn8F^Wu!kw^VG4Vg!XBouhbin~s-v9RooczHsGM3#3aUshsPnoa?Ea>#3aUshsPnD$i)-uGdNXcSnW>JySP#`4NTL! zFq#IY>0RixN^Z3CKAp(vL{2AiI+4?foKEC)B4-degUA^~&LDCIku!*#LF7S19z^6p zL>@%sK|~%z^4!!9*TRE|nMBScawd^8iJV2`EFxzS zIg7|yM9v~|7Li}mnOf<79UcO|0S|>|$t~}8&yrh;a!aF)#?O*l8f`RwHZf-tb2c$& z6LU5(XA^Ut?kis9o~QeYjmnioDI2Z5+czoOYisZJoybOO@AhrT zMr-f(J;-a^%iJqr16-?Z?MdmzB5XBkTce&5@7goWjTU3iFgIF^J;U5+F+X=NhgXaC zbm*m`4=Z6BR>2IchFMqxYhgdw9}a*6;UG8|4uJ=kZ_rU@!lmU`^!h>g5PTRu0++!@ z;d1yGd>lRjSHLIXQ}Ai{415-@gwMg};S2CZ_!4{>u7a0ZU_U$geNti6^c*Rl3`UN44?@bz+&wps(%mJieG zW>|!+a3gC=uno4u4%i91U^o0oBh@R_E{vY-LAo_ov7{Of7k^3X_@!&D<5#@?RqtzS z1@`1^qqPEi^0r7TuqSV?cCRA-D&p<=*tW#t?fKY7i?`=v8!g_RTy3-%dvdkWV(iJ) zMvJ+ImUWG5Ez6#Fx>U55)gVtZTFYvXrx~qfHOSM9*0LJpX+~>V4e~UjwX6ntn$cQT zgFMY>EvrGEX0(=N&pS0*%W9xyHE6EPUR%p*(7dJ5T2_PREsfT)8XRj`4UV;}2F+U< ztz|Vh*0LHjZ)voa)u4GxqqVFC&089+Wi@Et(r7KKLGzYIYgrANw=`PIYH+M&H8|F? z8XRj`4UV;}2FF@fgJUhL!LgRrK+9^NWi@E7%$8WoYS3Jn(OOo6=E{uLvKlm3X0(>o zpt&-mwX6osl^LyNHE6EPXf3Njb7e+rSq-kWtOm`M8LeeCXx`FjEvrFuWkzdR4Vt$! zTFYwCyrt1vR)gj(jn=XnG;e9NmeoMZYM^B`(6Sn6Qw^@QsRrF;@vvxZs=>83)!@r}ec65mLC zBk_&IHxl1S`~&XuI?D6z?c!>UHlGkj!!d9NI2P^*$BC~y*J{l3y7T+;9pWFv_ExHo|wxXDYG< z+Sysl*;&ikS=)1VGy+$QM&L#tR*KD>wPwy*vtwti*|D?M?ATdrcI>P*J9gHZ9Xo5y zj-9n;$Ie=_V`r_|v9s3fTqE^1ON|RfJ9o{TyJpAEU9)57uGz73*DRGDDcZSfmP(Cw z?wX}iqn*2Esnlrau9=dPJ^*UY(V)@PuW zYl)q^X4lSLvs$8_R?N9;=G-;AcJ7*8J9o{TyJpT^vpqdnOYGb=yLRrHId{#jox5gz zF3I+0=dM}3|23kWyJpT^Gv}_EbJr}-x8-*3n&tWS+Rk0GJl|;N&aQeJ?c6nU?wUDw z&73>C8m_gRJG&ZgukGB~)$kX@7NcT}Dd@vW@hzR-HR6xqx$r!AKD+>42rq&c!%N_$ z@F!wXca|E5!x69^j)bG&WVjdH8}0-5h2Muq!5_f?gh#_4!eijEa5g+1o&bLYPlWnR zgvz7OM2Pwvgm^YI7b>FXB6=>O=OTJ8qUR!dE~4imdM={pB6=>O=c4mp?CmmmIs6&C z0{$HS0$Qe4bZit|bbbY|f>*;|!{5N)LTf2ST1t_YQlzC6X(>foN|BaQq@@&TDMeaJ zk(N@Vr4(r?MOsRcmQtjp6lp0%T1t_YQlzC6X(>foN|BaQq@@&TDMeaJk(N@Vr4(r? zMOsRcmQtjp6lp0%T1t_YQlzC6X(>foN|BaQq@@&TDMeaJk(N@Vr4(r?MOsRcmQtjp z6lp0%T1t_YQlzC6X(>foN|BaQq@@&TDMeaJk(N@Vr4(r?MOw;#YulII|JJsmVvH&1 z!%FebQutDFI2-}%;Yc_NPKJBIz2QD^U-*4^6#N1FPk1!^Av^{i3unXQ;PLPT_#=2C zJPDo*=fbn$Il6B0XX)H{E<6vO4=;ch!i(U=@Dg|_{0Y2PefpoJ!{y?2@OSWfcmw=H zIo8@6VE{uI!5AiRHSzB``zZc>_)nvhsr^ftE5z||0^Ai&gp=TY^1we!nJXLhbDxC#CV;JIdFLl`svfUlRjSHLIXQ}Ai{ z415-@gwMg};S2CZ_!4{>u7ac}Mx0u?l8jHO#^qSPT2X z{%`;s2nWHza0sk}C&829DR2&)3+KU8;c4)6I3F&63*jPo20Rnm?8iG~WbY`OxLmKB zVG*_(l}#AaVhajsK_M+Dq(vFM?!8t0DLRuVCNQ*Lhqba1t zF@>}!qc@sDT9nZnO(8AH=#8e37G?BCQ%H+4dZQ_%#W97nIHr&mW%NcevppX`2^tRR%(xQysXbNdjMsGBQv?!xDnnGHX(Hl)6Ez0PP zrjQn8^hQ%ii!yqnDWpXiz0nlXqKw{X3TaVBZ#0FpD5E!;LRys38%-fC%IJ-zkQTD| z78KHgLRwHri}FqBLHVYLLRwJByHd#g?z>WmQQt@<>Kmy$vYqA;v!{V|`b5#2K65&F~g@ zD_jC^gSW#w;GOU;csINU-V5)8_rs;?Bi@w`jSs`6L1B55+04UxY8gm*Fb-3Vap5249D3;2Ur)?9v$fU8fs<1oizL?z?)vgi+t$ zA=<9b90dOE31P8+*a41KqjILW5UAHp2Ze?`c%ILb4(RC}M>sChBt&FZ)8C|zBx^89k+sf#-mCTD{++ddXYJov`*+s)yPmb{S-YOK8?<({yFqJ>R^|wAUMw>s}C^Z^w)^4NJb&qKChZ~u-+lXd1qM40oW+R#@QRWh5E>Y$ZWiCY$ZWiCY$ZWiCY$Z zWiCDRVnzZl}!cl)0TUw^QbJ%G^$w+bMH9Wp1a; z?UcElGPhIa4$9m?nL8+R2W9S{%pH`ugEDte<_^l-L76)!a|dPapv)bVxq~uyQ05NG z+(DT;D02s8?x4&al(~a4cTnaI%G^PjJ1BDpW$vKN9hA9~GIvtuPRiU#nL8FFN7Dti{T~kQuq^SGrAw?z27YUK_jJ) z^xlmD3}FOgm>5+~ZKV>fcFWEe6 z3A|R>L0O}zmEv{qckp_61N^=2Y$>a>my0*T0ERGvF-+iMjrz(uQ^p+3!-7%c934yV z$X+*;pYR;3TTyi@s%}Nqt*E*cRkxz*R#e@Js#{TYE2?fq)vc(y6;-#Q>Q+?UimF>t zbt|fFMb)jSy7e5ZTTylExmLHL>Q+?UimF>tbt|fFMb)jSx)oKoqUu&u-HNJPQFSY- zZbj9tsJazZx1#D+RNacITTyi@s%}Nqt*E*cRkxz*R#e@Js#{TYE2?fq)vc(y^<1l4 zQFSX?-FkX2CyTnWCh8iEsB1K$uF;6PMkDGPji_rhqOQ@1x<(`F8jYxHG@`D~h`Kr> z>dKm^t23gm&WO4?BkJmmsH-!guFiJ~NX7B%V? zb#+G6)frJ&XGC3{5p`uv)Ri?+S7$_Boe_0)M%2|AQCHSPU0D-#bwK1i%M%2|AuR?PI`eeS%8i|@$6g6uk zYSu{9tdXc$BT=(PqGpXm%^HcCH4-&zBx=@3)U1)HStC)iMxthoM9mtBnpYGxuPAC> zQPjMms97UXvqqw3jYQ2FiJCPMHESel)=1Q>k*HZCQL{#(W{pJ68i|@U5;bciYSu{9 ztdXc$BT=(PqGpXm%^HcCH4-&zBx=@3)U1)HStC)iMxthoM9mtBnlk*HZCQL{#(W{pJ68i|@U5;bciYF<&)ogSj*6-CV} zikdYNHEZNm*sPJLc||XULQ*Isg+fv&B!xm!C?thKQYa*aLQ*Isg+fv&B!xm!C?thK zQYa*aLQ*Isg+fv&B!xm!C?thKQYa*aLQ*Isg+fv&B!xm!C?thKQYa*aLQ*Isg+fv& zB!xm!C?thKQYa*aLQ*Isg+fv&B!xm!C?thKQYa*aLQ*Isg+fv&B!xm!C?thKQYa*a zLQ*Isg+fv&B!xm!C?thKQYa*aLQ*Isg+fv&B!xm!C?thKQYa*aLQ*Isg+fv&B!xm! zC?thKQYa*aLQ*Isg+fv&B!xm!C?thKQYa*aLQ*Isg+hE3;-e5Bh4?7MMt>i6yl>0ABFfR#77}M z3h_~hk3xJD;-e5Bh4?7MMt>i6yl>0ABFfR#77}M3h_~hk3xJD;-e5Bh4?7MMt>i6yl>0AB9v(A=i18Qi!n< zrePJ#z-pLCx_f*Dv1v#r0i1W$&iz&UU( zoCi;Zr@_UytLhOBI=$K zQTLpPy5~gHJtv~>IT3ZwiKu%{MBQ^D>Yfu(_ne5j=S0*!C!+2-5p~arsC!OC-E$)9 zo)b~`oQTIk-Fc$dy7NTTohPF1JP~#0iKshIMBRBJ>dq61jskX-4U3M(Jrr z>1jskX-4U3M(Jrr>1jskX-4U3yYoc*(VZuv?mQ8H3U&X9UhDo7QTLySy8lGf{U@UC zKM{5RiKzQeMBRTP>i!c^_n(Nm|3uXNC!*y7X>x%yxj>p+AWbfiCKpJP3#7>f(&PeZ za)C6tK$=`2O)iio7f8F73#47k1=6nN0%>xAG`T>UTp&#@kR}&MlMAHD1=8dKX>x%y zxj>p+AWbfiCKpJP3#7>f(&PeZa)C6tK$=`2O)iio7f6!}q{#)+ z&dw4ox9qq|XUAySaTVEd71?nW*>Q%vI742XAurC57iY+eGvvh?^5P76aYiMX>t)D` zGvvh?mBf}&X5;p$cr=N#ToMA40&;eyf{N%oKZP1*H)GnXH-t3<;5BD;tY9l zhP*gKUYsE>&X5;p$cr=N#ToMAYHGEbTCJv5tEts$YPFhLt)^D1snu#~wVGP3rdF$| z)oNr=ir);Z!EhaEE3IqLAkzA@H0?g(2u=ZM3-yRG)l zJ~Va1--_P9+B^UEd;eDU{!RD(t?K=oajH)_e*QdX|LtS%`*ZbfR02mMWB=mJGlN&` ze30JPfAJpo*Hammd$)MExG#Ep^!{AqUE_V(J5k*FC#kr%??+qQx#dsA7daO@mpGR?KXI;g8l3B#-#OPiH#om{{-AHV4xG@5oY>Jf zK{!w7`AdIx{-V#kt#dwfHtIPsZBB>NsZStJ&?nn2a363V)m`#yb#=Gw>G>F5#>+Zi zkd`~7g|wrJEYtW>9#|vwW|c{q(-|^Yu9P*Dy?0kwJWrC zeYVx-8-Y6{^Qnxm{!9c8!eN zl{vL5Z)#W8)UKSVT^Uom@}+iVOYO>)+LbA_D^F@ymej5ssa+XTyYeHuX0uLhXq{Tn zI<=p5YCY@JcGfwbeU8sQ#ph(VJgSy9>QjT4X^lMv`!cUee>3`9t-smwWklEZl(GDw zq8k()DY`+?_8nCXini~kYEX2-<9v6=ttyFtGn>UX1lOZsioZ@YdwRIkJIcaXNO)7Ev`x=vfyY3n*&<*d^+ z&N^M;tka(Aw5K}lsZM*U)1K*XUt3B0fPqo@pt@c!_t!uS) zt+uY!*0tKYR$JF<>soDHtF3Fbb*<|4jq+dJzm)%~_t;r}Qzd)X*-`I#08bQ4=_>Ld z_dWe?(C>#Tb>BJPO)*2X%{uMFwNHS+qV{K>1G&3gROEYF_r8ArNsR7kaE`L<*D@R3 zQM1%?70Xl{QcE4>C3=?BQb#$7ql`pPky@%} zNG(-EIC`;U;CmP0E9tlm$0gMq&Ac^4})QB`lLr z=G&yaw@F!VlXBiBWxP$wcbk;$HYwL_Ql{IaJhw?%Zj*A{CS|xy%5R&L-8Sj-GEKVg zq)Ccu(&w_9TxAIQOm>q#k=>-cw@F!VlXBiBWxP$wcbk;$HYwL_Ql{IaJhw?%Zj*A{ zCS|xy%5R&L-8Lz=ZPL@7mfF}~8rFQg^^cC{ooJ5hUFhAfRy#(1Tw5-x531Fx?f<79 zW&8h?U)cU_)kCe(&pLU7dauv)&z|DssKspcuWTx{AFGki@UQ&xX9(IVq`X|M!6~n> zh2q7)RP}YXH5B>@=~3Pi;ivlsD=}xq*I^H|j^Zfqs-X z>ZeMhmus968WCKp@-=8YFjOOg->Y#x(fjfV6?ssbB&JQ>vou$sJdLOIx z<2tW7YxTNWKO^PWZ;M6e9~vFm-8fk}cZZgAxhZFqo@X^gwKLQms@KEh*CX9Jw@yoj zyCbz^lsitfwzIplymuFOl4^55_5HPaKE@QMpPu9})#Ud#1KM z%RSqvanEtj(N;fpf2Yg-(`#!9eg8JM ztez!mS^O){)zAHEv6p`$qNoxS^(?(jCF$E&-{11a@|$X7?fPr=vQecR(o^QXi2uu9 zYvH{$KrN|Fo7-$rWB>QP>s-B8ZdS=R`NaRv{`*SaQ(o<#Gx>ih@0Qzc-WxUYj1=)%TSot@ugyDq_Qc+MG}x<_e|2AQ}lKt@k-uKMTvc?%i_?EzvU_)w))fuT*b& z!)G}1ZknmQN4;H7>1~67o6on7vQlcgQQwxc>7V*pdO98H4wY?bxp~v7PrQ(ey{D|j z`bPDx_D?0eLuG!a=iT%! z?oZW&{mlKD#tc^|drj-fD?fLt++VoAa58#!#V?if{>r^d@mIT7EB@E+uND6r_cx0F zt+L#-o+ojQ;;(hplk0Q&*D3yYDoq8Ysh~79lqO4Q^gKrOgtfZUxz)+Ke|7(^e)1p6 zkovptyX*COgR-Rlx(~Elee6f>N9s$BO#A2PS&p8r9cmt+(ixzc z%e0nMX%5lVynseLUbR=P*IB)1+jI`&p8<@2c4PcAi1E*EjDL1x{Ii>S;x8!HMnStV z3L3;HXg5Yd0~rPF#wchvMnQuZ1?|QtXb_{I-53Q8W)w7tQP2=ZK|>h@4Pg{Clu^(S zMnOXv1&wADG>lPD9iyO~83hez6f}ZS&@POEKF=s<6r-RqjDkin3i>>wpwBZ3`W&O6 zNsNL%&nRejMnR((1?|o#=<|$%MllN7ol%gU|E5vU7)C*3-QC=;I1?EQ?Z{YY9AlyJ zjD>b$EHr_!&?v@2yD%0S!&vBZjD^NB7OG<`G={OzI5gKE%~hbe6q?f&L}{)P&1t4v zn(NP~sS4#~q`Y5APghBQ{n1|q`b(idU3ZlJD$$>2!==CejJ2vzVMZ$aowmJRTI`P& z`}b<`4fhS{%-YA+iu{ZF7cKA6r73a;w7A0-TC7KldXAyASdSL(_;aCUY+r|Z|~8!?@w-_{XeUI?48ZW=Usj>kbbUQ=v^^H{m<2ke2=4jBHH>9ji;>imcy>$ z?+f~Wep~NGW6R#$RPTF;^1Q1UW9yTk<+HTSMe5mV%QoZNs+uWiZ|d7szXdsR^{0<| z`|7=SyuPll4pf%a);EgX-ZM)RBg(X(v&pI+2%ss~5C+WA|q z(zdpJ&zM`f9eP25q0LF=bHRo;`dDx0v&g z0&B}xXe-MbhDfm|t47J6d$--J!&+%}VR?30cP#4FY2|au=PUNi@)g=S|JuK8)ez$&%{16wy_5U(-d0-PvT4tCIs-P#YoiFK z{D{u%it;0R#i(6;Q%f$=|E*QqKBPxzIhnE}{^?nA8kKD{4Q%?iMg7{=ig>g9M&DY~ zS$VyUBlS=7RraSxZ;CATwF{NY%5+Cxwq{XV=*5nDGfFFJ-;dbdDY;xquUh+DfUT_j z&L+*ux5`JV#H+Tdhn_&nQ@&bjttFbb_53W=|Ex9I`Nt3JSo;5RwXn^))4Nt?yv6ub zA?8N*Yx(irX8T&5zSVKlKhgri@_m;cd>`6MeJvsln zExmCI4fSl@+lqTtZDar5e_PKnNLzh-Mnhc zS5m${hpDpKT%akTM-k5dmKoXhTbGU{TOC3B>vav4_5;eRHofJMKlb`#bFZ4U?)|rQ zKC1nawc`H0`KtwP(r@2peY)-Sp`OLcEH``E=1ALK*D8AJ;mu86VC}Q-U3`4IT8r-c zr*^$XU)Zuy?V*Bkzy z{{2g(-9`)jti|v&gPwB6Dtw&s)zQjUFLZuHKKf%a(Q}o9KBjB+Pw2|#Qq7!qD1YqI zZ1?+?+bQGI47WQ&`P_xN+U+R^9;}h3M;`6U)yHbqeVncxc;wDwlsoUC*L&)xf(+Ux zgC0W$U9GLZrgrgl=Ma_X8~PdR9O`^aukFgh80FL_X>TX%$5Tm9(LA|bU+~GScObLY zy=(gMm06#os|G*TkM2*>Pld{_r|{~2gY&ig0{!UzB>m`qApPi0ApK;>wRQK5ess@@ zt~k_?YuA!%_aoQtuUz|Hy}$dMWqOB?>SwUCTt7oqLyu{W;0gTuy`xgf5dT~ixwdrRtH9MGme2DV#VVbA0D-q+!!H1E9*SR~n zJ88bdGVuXq;={?rcOnxXK_*^LCO(o(d=#1ZXmao&WZ#3xyK9tppRcRU7wAgFV6yLe z)##C`=OL;WyY`di++;Z`JLwF3OLc13b+XiWmb$K?u63`F>amttjDFN+EwdQ?sMA_z zG5S%n1E|@7)a)Q?b}%(Ngqj`7EXFuyF(xvLQBMulQG@l&VoYQfV&k$6Q7owYe*E8KbDvLCj^;QJZ7jOWaE|6J|3P6PT??GZQg^*@v{Q+O5{Cgw4WL zyEfOb8*>dAX1_9AqthpKGzZq-wHb%qxKgLjTWCHk!+h8<=EKG_A2y6R2t6rZ^I_G@ zhYe>ALf<3dInHqAAoOh#nuE}Hq-Z9rKXVWnX2OOu2cd74&>X~Y<{(CBqi;$Fj@sLQ zYA!;qpsSkXS?Vi$a<`uBtwI@HU$$oR4a&*NmuiXSZC7s2+_aAhY2y;KKMPhM*2>WxAsRbqq!wLr{l@I)KKALhM|t3sAD+l=#M%^ppJUfF%os?TPUQC(Wqk#>evBw3_~5YsH1;xTeGWv zBhW>EbTJA=_$Z=hZq!E+eOj;?rz%uXg$gP-^ZFcx&V1DtGof``%!Jl$apnhb<_B`- z2XN*Ga^|Zz=bHP}?B@W^`9RM30M7Y9oflWX)!y**Ia}Q$w?9g-``8BCdbz_GeFxrT zXFs{}cb#K3XL^R({?DA>s2%5>+jSMT?>@R8av$B5+(-8S_tE{;?xS;u+kJHIL3SUV zyU^~Vb0aCt_V4OU57k`jL}xGOtIlE0e>k({HD^jYS2(}beP9LW4xM+4wce#h*MY}6 zlXSfObrt%XQtNT*1{_{xZhw|%%>hCUhu2x^x=q%B-^5wnJ8P)h`U4Piq`HC|`{p`Ox z$EZJDq<-TKGqbmg z$IUx+ZtBJD;|cSRnVnj_eVlXBkB&(dx09#No|Afaj`1IGBkVHz9;|}>;E;KX=Fa!) zw~wdJKW?5scKdjm4(X5IJ}!`!{LgJCPnvgvKY79SalsyY`d?bGy`1dtuWh%Fd->C~ z?e=idu?zgKE!a+;w!r`9f<@cIg?4_A+&-Rj{QOh>qqdLgn`~@BA0}5Dqh4gJ{C=E# zd1v|Oc-9StJ#qc@TAxFfzYb#QFlaM()^%Fm^$W&&I1<*tEVS8p%a3+*zU!Tn`erIgy_(om-@&0r-@hl zuU8&gxgtF|eNOr}`e{lpOTSg!lszr`$C}ETu{B?=IkM)zYVx}H{M~*J_FLC~ckSEu zU!}W|G!l2e>3+*S-2JwDg!>)$NcZ2}@4Elte$V~BdzAa1?$PcK-D8|H-D91L-P!JO z?(y!A+!NiC-Ba8-?p$}Cd#Zbyd%8Q{UEnTs&)l>p+t0`L;qK^8++q*6yLY&Ex_7yE zyZ5;Fy7#&FyMNN%+3&mmbU$#{+o;v;a68>Dw_D?qjK(8bZzpeOZx?U8H^JN0o9IpQ zcJn^xecs#MtJ9US5njDF(i`QC_QrTScw@aCb?4gGysvwQc;E02^$zpC>3z#P-21k7 zg!dh9vbUGFx3`bCulGgoOWwcfPWP{PGrWVm`KpmiHOi=yO2(=0o2*{@D;g2ZQtx`W z`tDOS;+UuYco8|xe`##cppngDjSrgCkKdyHc8U7M+cgroQzM3Z)k7{-|GPqC&}NM^ zKXkgBZjCJKG?pCY?%?jKvEzOkGfvYe@d0^|nyG(bfFLxi)*zT|H-`sWX z-)%InQC!JwbK5n7FH3~(r@rS;tD{eQ&!1LDvwL-}>*2};$LsxHtntlvHEK9PL9aL>V0 zZjb^o~};+M!Z5t@pN_i8u1s}tDecA zy?MGieVzC#ZS85>M%D6S-E(lTH>AH%oUO?4jR1rO5GemhWrK^+$~>?@?A$bly{z zvWx2WG9B-yI?ff^|1Y%PUuu8Xs|J3rcY34VQK*u~D&b-`r_Xil>CM!B&9OX<)kpQ7 z-|;%af%>((O?sTo#?PZP2JKm<>&|Nqr>ixvKOv_zwfp@;P?Azzg z?7`Cr+_tuR(;ejl`WjPd-}ddv?QCiN<~8o?tp7So@FR_{QySM_Y;K{YDYdo>t+i~5 zFxO49RdLfYPp)1gO+2A9|D^kr`?SvFvpQqXsYdON3_Tk|_W?Lo3wrN;-sgHP>IXLe zZ#ADY=}?dBtY*{N5Xy;}ES{6@1L z*XX_reM5-uwP^fby??%rQMu(Y=xPOo~DV68<@Nl{&@EvN+7 zZ(3tYd`Nq6)i&?l;*8qzWfo0~-MpU~9pfD3{^x34gE2P^Lht9^4c?vFi>on=eTJ$}fxVh^ zb^TMz`?QDp6>ZA~^sceiC9SCJTQ4^i+x)D3wr0!tp5=Aw)3&vIw0gR2Egz@;Z(Gav z)cfDo^2zEgx3&C>>O;3)-c$as$ep&e{9t+3*2{a!KTAC^%l&hE>!Hv0`s$@8?r`+ZMBvhVuMFq~(U*ICDt#WvXqfDRe=iL_+A~SruUvDYr_LIo3guRe(sV+UU$}L#Ie?~=WyyNnHp8? z>i(NPOK02dtKZM{{_W}4^b9AB=%@|rw zP~p{hwO)U3fH%k+>{&nT%5SVx<`P8MU$;iDi~6-E0+_|b+lqOhwlJ+FG| zx>9u@<+!W8VK%z)_ID2Sj`V)$9Oj+ko#K4Yo3HWr_qC0AlJ44I*1U0x_h;oZ&5YA; z&mMbwb@gNFbF_4*&Y|@z*0)&iV*QKtFxJOdFJt|T^)%{h*hf$AyTtj9#-UqhKz*6Z z#eMmY#-2U7&k1BdAB)#`_5DrR&Zlj&tv+vC%NjLO_+)0(n+vJj-%LZrO=_Ms~3rzAqD5t(Mcwc&;xW@i%28yY%KGQ^`m^``B_@xl3=hvPElBAIc1* z^(|lT>2o!U>oNXI>GP01uk0KvCuKBu7NPDV{egR~#{RC_WQx43XH>k! zhbygbUv&KEzj6F=CoP(5OZRRY;IyxF+n=j( z+MoB@pRZ`EOLf-NRJ>D@>K@to@TjUiIkL>MeaoBDM+PGc;{`iKa_`sR?JBFug^#^?*9br<~_yT}6Ft^L>3l z%X6#T{`zX~vF-$ScXw}n@$EtGAxg#nLvQvt5~ed{hdu1`X$zC|OyiLGE+z zDqS2ZY8dpP1_l*Mko(CthA9Oes|0yB4G;JAzUocU0QgX)yhmwpbh3B4cfN-1KliTk zuJwNJ<-Oayd-Q?rC%xyqSG+g87Vq!gdat9xt*EN#Uoos=bj5^<-7EH~_)5i;ibE=n ztT?LT*ou=XPOVr}ac;#W6~CzXO~v&UQAMF*NyR-CODk4XJXi5r#oCH@E8eU4u%avF zr821jsk+qY)Xu3dr1nisP0dUln)*)aKT)t-P%A*OhVQt(8kFpR8O}`Bvq+ z$~N7XJ1{*eJwClp`YY)v>4VdUq`#H^Zu;o-3F#Blr>DuSvg?{ztl$E>~r$23L)$+NEmus{N{FRDGlBJ5@(lomh2x)!9{-RQ;mrnyMSC za#goh-B-1&>glSNs@7KhrRx2v_Kcg!WCmwOWp>GYKJ&%Ql+4#M-_CqLGdnXkb4KQZ z%w?IYGS_F4%dNYY)uXB>RPR+iqx!qmCs&_WeQEU-)mK+vR~=O6 zs&A>jtNMZJN2{NzexZ6*^=s8{RsW^>AJrY%itK>w$n4J9FJ!-zou2(>_6OOMvZrUy z%3hfLdG@#2Ae+xF$=;iND7zy2T=wezrlID>nnKNzn)_-Vu6eTN`I^^iiZ!h@@7I)SKC1O=YibAA*4OS-`?=b^YQJ1N zrFLfRVYT0_J-YUU+WEC-*IrnAS?!gzzpcHYHmJ?j-c);Q?H#r22MixD>Co>Sa>%s9 zryM)~_%n`QH1DK6_MA3dfA*X)Wg7pRKBMPEd+!N*;f7Z0)PF;A+?Agc9TR5Fn)3vK( z7WQm2Z3f4l!3sO(PuwZVujjP*zW# zeDJ27%slp(`7^g#zvqm}d(Yb9tsgXNQ*ciarp)R&;;fz{&RTfVoa2uF+E)A6W6!Tv|BUD5ByU!8qMz6le%6%v6<-gg>$$L&Yde6Oj3b^n8u=eh8 zHD=%A_&FWtoIFQ|>2X45o^wJ(xumOWC8dbUC6|QKMUhHZm(XAsWX50yA-N?aO+uRF zu3W|?*P(Hjs7RXD)9hnDzqOx}V&3z9fB*TtyqsrW)?Rz9h?_Vw zHYhQ4a!U@P@8>?;ZnBWBkM#E!iu->#m;-ErT4){C#MhMBt^2tR7YYvT7o;aBNKa5u zGnWU23K#__Yx`g!5-fC5a0?~D&Gm%{Ss|Zsxm&1EcWCqY*a#ik&wZF zbB)kf8lkT=LKp>#)W+6v))#1y-yLVqj13KqiVTVhi3pAqIwP{VVf}1}MIsdfT3g2` zAvdZe*Umx6`7{L_L!)L!e?}DL#(wSs?_l4!MSspM(Rvc2|H=Dqc=v}ZQEW>k_KtBv zQd|@7$9>rXn|_ox`?)*VMn*@?jEl#vif<|GAh5AbKgzfWLA}0+U(@OZvp&NdhO&Z^;qp7;ZoRGY%iHKq$VT zdAJ3b0k%W?(Cb0hKJ)^1nDFZ+{JIOj!-ZcD;n!369U;Jv6n?#glu^R(XyMme`1KKT zeTDEC;diX?J5Kl=FZ}umzY~PtiNfzB;dip|>o5EU^`TdYK?33WpwO{GQ0T~E?)v1G zmVe5_?Z{1^_o4W?JVIpUih6j9seaw$A7dXwgUt{u^lQbfwr#0Vj}46n$QcldkWw9Bz-(S9H)|y z5*D2hs}DpZ>Qmw(<_QULxHm@$q0oq#;qgK!DxwLIfSF$WQOxv9F$-S-GYtutg#g7& z0~E9H6)@9~9y1LIm}x-3On-y`Wvu49rZ*?kt4>-o{nDC+uTV1$2{j7=S~CsMnuV`W zGY#o$rXitb8W8HCh5!^Z{Zh=rSHMg|0%jpVG1CCWEPMsbG^EE&Ljqbs)F-^UJ-=^M(`P3U2(Dz16 zQ*Yq6sW)Ppdn4vkZ^XpS!1XOOGBgYa9&Iv&Sgf88nxeBqH`U}*h9hdg-A#=ib}CUkYW-7VUf|e zS_nakSqLMB@u71Qf+BGv4Zt=DkqL1^#d9K}K7|q@<0E1sn;IOE7!jgh6od)|*iY06ktPy_ zFeUNx#Fiq>#0%N9)|LuCYmYt`_v%l*9}^lIA0C|$hq8o_7Ze*Cos7Xk?}A$mYp-02sfs6mf7!}|-&V$-jmz-#^b zIRxov7Uo&o>Uqu9+ELg;f}`im5cUQd(B}*CtgXPV2rcaWw$^m-$JkI|^Jsz9Zv*{o zaGRbH8X29`oMWRepqH<0g#(YZtu1AG{OI#+9j7}8!V;$R#~}SbV7i07^|0ue`9hbN z1=!g4GqbVo=V&%#zS;PQInibwK{!BBp|O3;hDJu32~crnC^v`3CWeOeF-vwE<~?4o zt1+X>8ncKvv-t2({2v_~oiH;zay|klMaRw#4KYg$#dR+_$}Bp}3^yjT(4bh%Z7Lf- zKPEH`7bUZ>pg9r9NM;kmBO)o9P&7}9m>Cfj6xm!pDJae?I65jWJ{I{E@gmBZp}02V z5*2I~gA*$lc`-Du*C*TpUEx?LDmuw*28x+x2pbWc5Q$78&=(RLloVx#{9+b5FFrIX zgf`4KXg*FlGlBgPG$__AC?50Z%rJ|OHbZW}tz>>Lv)J(Y@!@lX!Z@pwdI=;)g(jIb zwrXdxzjOH4BM|i-`=HFO-iBZJL8Z9ihSDQPGjn zGb2K=N2ASxg=uXTL`&eD4UR|3u@mBP8b`+l#m+aI8H)=*+}woFUS>%V@!<%Gf;4Ui z!B{#WIJ}S9c9NMcazARL|Ga5JnYG9d)h zgQA+d#%vTW4^d{p*aJb>{jp}ah6v;bnI)oB6B<9C4zN#5Xw-NdQ?oE!jS`Sw`h3nL zO&Yx;R5Ry=W{SH}_t#F`S?q!a2s2Q7hS%_TAzXEue( z{{+eR%U>H>8Co0K8%{9vH{4*DX1L2R)9|3-Q^R+L9}J;&&(_0QPiP(5dUoq1)Y)XW zE<|n3^VWoE#W0LLGm4qaOk<*$I6+gh8Z|UGnU@N=LZRrTuvUywOj86a!WEIIjajHz zqgbcdjM|uA6}J_CC@K^+Z6s|vw)whE_cqpT+))QJx=m1<2-LzXXp@3^n6x%K+Z<_A z+~$0nJ8d4dscBPh)XGR{WP;ikjgh&LrBPoaC!=Agf0+2*=1dACWEx^JhRr15L zChYW46HRy84l<|~Tc{~Hz4LIkcCAA7co#!tGUX1=d;Byf-^jfMM-J|KoT0h0?ZDQJ zyA0RL6#nTWh_WzIx-D(nh75J)_C+|M7Dgu~{FENA4fU7K-Ji4gh+5H&QHt|x;Bt+m zGpBeL#eoC5j2MEe<^kE#7wqMv)%PQZ6HyfNqGY^9y0&(k6gnpnQ6=fDCL>5|9F@6R zMOt*yhFJB)@X%2!wP$3z)@}MZU7fad*|M!##WaSk9>TG80g2JUlT6ua_!h>gW=AJX z4~*V<@Zi3TW5==*XKUEH!A!XcKeUQGfG8+_MT)^69#rXu$`s;zb#TFkQ>apRtlh9- zr4vCd3>m*$`#a`xweD;#$sO1_ZEHkNtV>0-b?{kJB z?&MksN8I7s83tD9`bZVV#Wk?JhApyY*yIr$TQq=^D~56NIYpg>w}V5f54%e4g2)s) z**+u|8nW%9ZyoG~wlXj$d!=9~BUX?tCCSfKkOEfnH-#ZXocx3OXce_2K~*b*>y0a= z<}%VtXN1*S@>M`ZRw&1$(qMLONE#{rdGe+r$TlgCpc!N0#{PdaH}pGmKX zNnWEOir>6BRDAi$p-H_o%5p@SwN?fNx-2Qk8hy=mS*v8EfX|X5t0_uyqXR?c%(IHq zDtH6cxosJ{vemoNQxXqr+3?7sLkkPk_s^Vqu}jNNa@a3r!^h1_il3#9U$Ajk7$zN< zFeh!A+G+e`>v-)`lK5ru&7T*?!vDRf(s*ZM1RHRfVIxN{>^8e$j6&5=f0|R&NJ>p= z;Gyi^$>MwW3Z@L!kcTx;BL}0w4~WsYaj{{MnpLo-C-&6Nt^0CJZ}=2BI{Hj;UZQ!h zSbAjrzCHQsBYP8O&5E5jT{~-}Od&aH!mp^(;XLBo@|&ekbxW*x@hZ8lt!}ea0ZA&* znAZ}{&Mkagm}Zp>dTn^{=DqrMLHNL3+N#}BXdP{HowQYxA*3zoOQK0MhzJLxpbLnr zp_|qsRW&s^EGkA56E$;jpxV;w(({6}!&&>ZS^M+06sjvO`SjH)$!XsH0t`DZ-g^Dr z4aru1xyt|WoO8JcHfN-1Qe#SCq^xxM5x0?(LdPxB{FWj;us&nk0d?lKlzGX?%ciAh zofk&Voni`u_o-rH5@y9F|FmuErVaU6Hau`R?Rc>%$htozrZ~q)@9up_uVvcz%cQmI&!4MO zKR6xeJtAZ#(G16FX5l|IJbJoe!mO03zNSO?xm7xmTnQ5JCHP<3M~17iFD_-iQk*l+ zoC4}pkU->MhKt)kT-nV?0!aWvVg>_X5MVkaXms{ux@vaO!fVe=!R_WdknYc1zG%0m zj%-j7H#Z9+ofETuOS}dm`Ki)_{#!lmO_hVM`hTeVt>{5<^pPnU8U^1$1>xq1b}%tF zvmjbxUeybF+&jOkFi(>zBlgRucyw2LOgr=-PTM<1N?ILw>;Lo;@+Z##Eu|wegZ)wYs9@^u2 zR5{DLb8P()S<#-PkdT=8=@aJcFIlb~vPh~7;%?R-fwr4Cw$X}V8&-0PMv028zptBP z1q0;2pO`yoiA#JF}n@d z%9WnU&nG7G)1N9}l!~xfHN!xwhTb5m1qxu^#2!tIvdE&y%zk(Nd*~-Jg=YZ^yDd>QgztT>e2jUdH~C62BrP zWu7{D;f4(hwe0Sc&)0u;Z_1}F0CTo7hmK1lkDXk2UJaJGH^U&U?kmzxm6-j_(IQh& zT)tDCd*GYIy_(C!K}8fkLoLH1f6ADvfmq0urqB8**xyu%czSn}kF zZ%P0DV|*Mm5N_fhJv%Tk=3r4#=D}mf_RaR!C@Y-r@%~8)=m_meN0~z9%P9Ux{+3ZV z`2JSATFbYS>Dt~=Jz0DC>O=Lzvt#;xuhl6@N7X35fWf09_niFo$o2;rnv!kVn>Jh<2fF*Z8Y*FziA|)x&yP&Wfyp)+I7qU8VL%ejX%ry7`54roc7II7 zMB?E{)QbISX$LfSUOLDe{R5n}isTAjS)sVvaLai2@6hvs=R-vzba=_fB`F4gRkESw z8Mz;SP-T-Du(!zc{MnrH?=>(}=cDo-6VhX~29o7(iJ2? z#gBTX8zoa>JG9SU+3^v?7WYHlEU7ir%E{_iD)^39OV{euGUaRrTGbh!Yv@+PR!(Qw z+7+)dI6g)NW9-Nn;y(cV$(Uy_1}6U@*Cps|ReZu@U4l%RoR52Xd)0|sW6A4UFFVdZvm<@#Bif9 zA!GjanEWMEUh}NAs`b34xL$F`^#*Le^X8iI`P-m;0;(sVxWk@GIj?xA@2@*TfB8E> zIhjE4KQ0vy@0_{q2YVG{>Baj+zie8fFh7eW8IvLS5)z}Nn*ua zuz04Rf{A9~cc4&l}^Pi$Pl{fnF$qs^tR1p@HnWOndo|CmNSK%ei4Vt{&S3PF(d_^U^ ze{TG?MnNK?(y2;sUB2v^OzxGXRGK6xT>ngKdzh_{Q-%oc6r z(IQ8jAwd^x@g4~^PRueuQ(?5(MRx(waWOgup#P-!umQCS&l6FL!XqN|7i_nG$O_R_CTy#@}fAU3CCNgM^e@#zppp>8o z3~El$BNZJ>MYlu-DzWG`x}b^b|&GEQ9axk4v^TNOeL7V)T+l13C1<6}#YHr4*rKF?zPp zKi#3mr=>*b0gQbk3KWb&(I?Cd|K6+c97{Mg*`{{XE+X{)MJHYKc%~-Ut;Ggcq-gSm z&co=%U~sb)df1}Vv1qm!t-;VY7u_1r3m6UD(5J!RZd>%JMQ30%Bttg@^f)$nWq@{- z25&^@t87q3El<%Ym)cL-!`JZk4D@d4c6wO ziftVlsQrqb>2J|TsV(|cjWn2www>P?{A6&@;G99J!EJ-b22~QJ#1s{7UXrPjILQ*p z2FXFmWyv$aT&x3{in+EL*D9n{CYplXZS|y8O{>4q{L4gYBXyQ~OQ)d0*LTuPX|D8? zv_x7ieTk=BmCRD+j^1S8HIzj4{)N8OV5`$y5YW!+cbjp!#i%&2d7pRxbfzH9p)?d{sTwD)R% zw*9sCuT@f2Cskk7Ak|pa7S&r5SCg$KznWY#sqA3T!J>mlhw&X|c39Y9U5E7@Hg(w5 z;cSN+9m+el?`YC-U`O|kJ{=P~uI;$1?K^evG^Ep%PVt?Vcgi)D znRYU@H63jlX}Z#MuW6lHsbRxI`^)PjydVzYqdWSk&eNp}N>sDWn{rXqVhx>sm z(J-3s8c)p}&2CMu=8UFHJ3>2IJ6F3xTVW_yUV(F={}}=O7|bTzp!X)@s&lmMM)2F zkANPldz|U0R2J?~~BySf6Koz5Dw19ou(N-%4w(^?2)**1P+4=(nt2k&Us{(*#Dn{p#$siwL>?DJ`Ro!&JNxVsSX<*wmW1w{NhmPaNgm%!|x8S9sYEj>=^7A zKr&CV1obEW?bEjuT<43Dtvz=!T&rKt& zMg)vlIwE(((~;vxemnAwm(ok^)z8b>Yphp**G#W?uW!88dTsH_^2#4Ie6)77=jb`3 zza5=D`p)RTyg6?-@8#a7yeoY;pCvxu`HFmd`o11BV9d3#im~IyrjFe-_Q2SqV{eS} z8Mk2EvT+;7?HqS#T;aHqakt04829IR%ki$`$BYjhA3J`-_&wu~jlVGd!T3M@I{8`q zjq{uC7v;CmFV!#I?-#!_er0}7{oeVJ3Cx7AC-j-%0pb;Kfn0!Fq&Ts0dXjPJQ$BJZ zJGgX(YOn0KtG|uBvXA*5hLEq}D`LOOkl2$B#E3X+*=_F#vxgh$b#;`K-L`0v*JUY8 z9<_(_^19NTpj47&N^)Hp#yB$ggK7>(hPd#DEx0h|<}D0=-)P>4!El}6Yq6!5k}om5xK3ihC{I)DR~Z_HmHZG3?lf~U zPao%{{LyaQrS)9ZD3pAwjPvW@rz^+n*n24!3_nBqJg$K%M}AcH>?Rl$f?u)Ru*e4)XEvJ4?t>vSqxZd22^V}gFvZ)1hmD&W^7 z+JGZ-IpuGdaQ#L7qy8|?`2Kr1`kpOks~gq)3zd`XH;x>Y|He7V+4BDPbw9p`>u{7@ zf6xDTUrs!_sL0WJI4V;%qom7$9xLA($LMw@(_GbyhKjiyj2F6?+{{R9^i7(?D9OzL z4k!8~<~w8z8o7CE5;Ksph7ie{#GvvOnS;grzmhZ#OEONsx2UcKXYFWV za49e@3^;!Gn`-+7$FLHYhWofQOh)BkJlA8fR0tuR@f_ciFSF#b4`Y!yMwy+-AsN^; zuR$8ez_h=;aAd}=`2};AGs>|z4{MXK8xUZ*&=W&3rTg(UNq0Wb$uJG1Y|#P+55Skn zG+Gdq4n?%=36L&lpidLFDp(BdVTCZRUqeUCS*DYzrgO@%bgEGJq6SRtC3M9qtQ>md zk-v8$b6Dr8`bm!Wq}tFUFdL>wSIWT)2INnZqRtT&5IbSmnk3`$_xytQY(crndl`G5 z-?>%}(Yl>dye5m`ccS8J=le!q!pg`T-Cn%6n#1pvVodo;80bZe@|Do@ix`-S1C5cJ zc^H03hxXN{zWD&s=c70X7n(!i>2!VD@V2h~*UlVFqvQEX7*0%XXsAHYFrg_gh*t$j zzY`|pIh=qC8+}!}jjQD36u(j01#jQ@biBzb(WOf#$mcFv9IcsdeN0w;?C>*fW2&4I zCJZcGsAJ2qo)tK*)i|!@IIcCxReVlW4@S9?F3dd`@&jFzSK?H}@E>#{VmJ@OU(v;R zC7qN#nBi$$O)8g9Be>pnt&^BB!+AepZ?wiHV2OI1rG>aQ712CW&D-Mkh(#_j(78ch zfPAmpD!}TioyQLufK}-uZ}=fYX`~FXoPnIP0utQnhBMbV8dn8vo3eBC+3A=ah1oe18M02_FkGVY>v%Qx1QHg;`?Pe$O6Dx8n)Xv1 z0>E1{hJB<5d5gXEs5i&HodHq{4*29ZgWf=N1q9$1YlPbOY$BT@XpW;nLArxmX>nRs zzGkhAO^o8r-jG6whV%-O4gpa3MrS5xqoP*Hvt~?6^H#Gt#EoDX60PMYpmNGTd{XQP zH8FCjTf^L~1EXsvV<+cmm4|Q%+foHIjW70!QvQRx;rGhmuMEQ(Ty^<&aaLxw_ob9!~#30!2*D&P2b^vTwrzVV*OXk_P>HE(U4NV{&y%Yl>IE#sO|XGi{HedINWiN` zGw_7rXtB`^`7D;m@gCljw6}66Dt}E?g!IM1(qA8|L2}2IbX}*_CCT_i8x`S}4jV{B zY9etj2X2K{xe3?7TGW!Ru9FPL-T0p|IR6+TKV_5lX!dnSUu!fncAS}6YR<7(`o ze@P1BtU29mIo?F#{$tI_h4mS)C2!GiTe=ZrB#%af#X5-Y!WiRO+=l7xC00a{EX5!R;2?uZsdPl<*IzX z<1pvLJ@~4QeT20He=Jc=$eCS|b8rLRiACR#E=id8?Lu{8%Fh{Ewm3KIP+_KK%4RA1 zXk=K(lmJuZAGqpYq6Y`Wva^iKs1sWFH+=QmKx`du7Ss*}mq2MgPDEJ5Ww) z!pgJQvr7+i>-n>i^#WCPkVUDoC20Af!2KKmWT|=V{_0u0G10934o9bz^9|B=tpCEuU`E6Y-z0U^-%7DXDK6X& zj$M%QUkt`*O~cTzDdj*5@t-Jvgd`OsNsoGPXreS(AX?uarf_Ef_5mK4j#VW>PDnLd zh_DL~wh+nBCoAF3aK`g0_uO?eKlUjCLBD$`2qcjI;4|uFY+)A$>3i^B$YYB}>MZcU z<;P_df#O%hwE6-lE-tQS52S#m(SdfxsG?~%t`!%SmQE`4)L{B>|7oMNn7#$2p%k)5 zm#zAu!dWRuW_AjWu2+-Q!~sMNeLlloNO8NUC}IsFqR4-plNXSteFv?mQIso@N!h}b z>B-Td0j3vBa`x=Wp>R37W5dJa;=;9<7aqGiM+<4>w(4I;CyRFZ814(g7NksiDYpa< z6=waH?!bOH`~4?I-JODc9!y)a8(TvR;nhU$I%ix^33K1|dJVZ%Y{NGU`oU`CI=*?Sl{F>?pOoE9}iM2LSy_;hT zf|24RoVTMGbgpn6TW}; z?kLhGtmD=xz#ZKmvL|pyK&Mr*%vnL3C#p$T!TgjA`ha$rmeBhxv;r4x&y^}-=;PX} zmrnpwa{JAj5^9m4e5dch@(;T?Jgu?CNYG*=sCX0uJs}chnI>Y3%aGh6%uUAJqEWa5 zK<*BPE=z~>y_{e3q2VF+GJ+H%$Rh;t(S>1a{W(iUc^%KmmJIQSLJQ6x*CY&Q@qPO+ z7|yd~hVeGtxW((aXMTyWEDui!wGeV;Yc>1I8r2>Q3Wuy*eF-)Zn^j$t(ms4lhpSLeYP`_Ep1+YKa+#X}I*Y6P7+Cv>xgD4wt@_ z)ocUXXohMVavXAT$-Bwgy#PPGULkDG)9e`M@x$gh>0 z0Y+t8`1`b4vf8dx)F0LG{&*j&fq)9R|hN#j)^pkj0sN;RC@;REt{@I z3+1D#hnGDEt<{oz*|Q(cmONJDP|}%5?`;Wk${0o4et%y zbHWwKBDk@=ZC}fki5zlt^;A4b^LbWyZ{L@}q{p`~@hv7k5)$9`Wym4Qr-`W8%KK+l zBITJxuJQve2#>(%Sq=LROFkA#zU#~M<(H|PR|JQ69>n6Wk$Y-hG`#r-44EcyOJW8Z z>7lI;ta0O%LZrB?De6m1cQ8T{fF-*i$mt3YXJR>R_�IvKt)0c+M`@;^UdGm%$=FJ8?xJE}&}gNZ%<1D$RSlYH z%8&-~H`11w)NE!{k7h>vidTX?3tPYXZwXS`MB+9S?=V=lkn2nJTz~8JT>KWH@bY_$ zsg+VJE$;D=>&39~mmBA2AeAU#=^K>unVPFWFl@RZ7&gs8!=`7A(=xaMMtrA6GKW!O zE(&`>7&00sSaN>Fh$9~NX|&bLOu~*V0ckt~j(DdvUcpk*3Bx2_x(ed4(d6%pL_{H3i%LBVHXgvuM2ONcAiFU|_5l+LK#CyHL(r39 zH*q*FzSr0%YnfGlM^FpF8_gDiWCb43u0eaDR7YB>tIm$9%V_WFajy`@oTOvbAVxM9 zo76N$^_1o6OjYS}@)a>eeVHRzO6SX=2WWDGP+#`V_l$9A6@*kmNLBl<*`iXDDtIHi zmS1qC^k|TmhSXNV8#zWVU(OezRlG?4=fJx}G04EiE?W<4znBELc*HnNJ$d*09Bx_lV|s-9=_f#C=F#5+}oF1qXd}5pt;lPC!g) zEay|f>TiA9q|W68z*c#ScWbf>v7xJP{Y=B#>I)8gGadOG!;XEp{W=N6-1g( z)%!r@0IX6^%NeK~N+Y=A)NFyAEj2jw^@vPIilA~hvp)IRs6>9&GvoZ%aPtjYu$*J( zokOW)5?0fcMF&%#TZFmEm|HZ7BjNfs3cCUoT-cJ%92o+Csn}cpu*7}-g&}Uq7k0Q; zn$2)awjz~?P0-^B2rs03!g%wa+sxB1x0wrHZZnr!wi(P3Ts%w-joa_tu@NMTrysv3c_r4DY{$Kz}~g8u!HC4ma2h!hX$klp}z%Mh-2^Ql$Q?bEH4%{|=>fuJrug+=JS+WUq|(Z8ezz!}GT*9$xkuqEV7> zb2-~;B%aNk%dj`nYou)Md<-1#i}sU3Ua_zqumzZXpJo?e_I=DQqAR2Tk&inO#ZZJG z}>>lLBVb#*b4+(h3iBPCui>yY1ig;w1^R( ze*`l*V^ovvn|^+@0Y#jOOHg3+OB!ETUwRaztl`k!~;jz4m=YA?PqFH zy;vKWlN4YY92`5+HYoSS0+dfhu$NR)F;qmwP*EJxag=K!;|G42B{!Jr7N7AZ&ycuM zkQQ}k-snPb5geS#HKkr@IMto0)X}{(e$7i*{R9GEQr=0f_NZa&(Z_^eDtmJ5#C;9R z-#8XL$}2F;MH}RB39q3Z76!WXpD?Y5Hmu)K8T5Vm0KR@S{kP%N7?tHu9XL>Q(G*1X z_t7Jyqy0eA0mt?@DgZ~nc=uBLu14|>G5>*5l&7Q3V;tI~HPj?h{I*8ogj*kt^(X_A zrUWvQOx?jW!JNFa`vaOz7NamHx`TIke>pMdsA@oW7zeq64w;Tv3!p=w769{|rq>4RC<*UNenD8eJpuUa5qf^E}hCM0jETcM2 znzBEy1xJ1gB8g8yEcq!-X!24ho}(f}l%GN|9mTSUKu~^uiIFNog_JU^;#UL{OoC^n za??1h;&{Ug++Y!ZF`|D&8`R~akI;eoj`Bu*p&k^2W%k^ClUW#QiBC7d3r7#i)P?u z_58ggG2CmwRA@ye;7EOrES<-b=pov3h>N}79~G8(qWg4je3BDq@sr&d=)>T` ze{aE^L|LXHsVSwnQPvGpUe$?VT7x?SL;0Kx&W+A8YMlKkku1f!Jvov_on9O-i?hl= zT_%Bx==Jh=e5q^1+;5WRYk+mrwY$DIRi2o(e@Tw|_Sw?MS~uzeGoysd-!}_=Uq~*N zFHV9E)NMxZGjraj{Q8+=7dL7=HcKOxB`%0i&zOtuGJ6l^AIew|u|a!%v-ILpzhfTi zfn$9f@L>3fg3Wpgq8kUOcFdpqQ-s=eytkv{S?}99`!{8zX;bH3=i9l-$d*>&Q88gN zq7mi3?EKuU=y0UsAa8%^-1*a MAbryCN;=Sx&i#$6mVXpFa`?YXf}ijQp1J)oI# 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%0AF_ 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 z$`hhIA<7e?JR!;xqC6qW6QVpJ$`hhIA<7e?JR!;xqC6qW6QVpJ$`hhIA<7e?JR!;x zqC6qW6QVpJ$`hhIA<7e?JR!;xqC6qW6QVpJ$`hhIA<7e?JR!;xqC6qW6QVpJ$`hhI zA<7e?JQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F z6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&x zJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2 z$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zh zp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH z5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F z6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&x zJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2 z$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zhp*#`F6QMj2$`heH5y}&xJQ2zh zp*#`F6QMj2$`heH5y}&zJTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJ zG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn z6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8 zJTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva z$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8JTb}> zqdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJ zG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn z6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8 zJTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJG0GF8JTb}>qdYOn6Qeva z$`hkJG0GF8JTb}>qdYOn6Qeva$`hkJ&x(D%^Q_nncY&>78`uu+2KRs+U?*s6rq9a0 zVH(T`XJT_EHfLgUrs_Oj`_1M|)!EQ&&QzTZ&E`zi+0bmx#O6$F&Qv|;IJ2-h3!AgB zISZS!usI8xv#>b}o3pSv3!AgBISZS!usI8x&tda9Y(9t0=dk%4HlM@hbJ%6= zpf8*Q?;LpNz&l6rU#I=XJ4f+vXuNY2|Axjp2i`gG&VhH1YrJz@&V_d_ymR553-4Tb z=fXP|-g)rOgLfXh^WdEa?>u$R_co)FC0Nw@gE`WCdybIu62=7987s9&` z-i7ckgm)pl3*lV|??QMN!n+XOh43zfcOkqB;av#tLUxVt5zByBOZZ@GgdTF}#c6T@3GHco)OF7~UoDE`fImyi4F+0`C%dm%zIO-X-uZ zfp-bKOW<7s?-F>Iz`F$ACGakRcL}^p;9UyuQh1lbyAQm%_Ug-d8o2Tj0E^v7F(2Z~?dwTm&u#mw>N;OTkycKY*`+ z%fRK}3UDR33S14=fos6E;5u+UxB=V)@?}w+`Mqchy9VAh@UDS(4ZLgMT?6kLc-O$Y2HrLBu7P(AyldcH1MeDm*TB05-nHtT?g+vc-O(Z z4&HU}u7h_SyzAgy2k$y~*TK6E-gWS)>4n?>czb!MhIL_3*BTcRjr8;av~! zdU)5vyB^;4@UDkfOiAD z8{pjl?*@1`z`Ft74e)M&cLTf|;N1Z426#8Xy8+&f@NR^6BfJ~o-3aeScsIhk5#EjP zZiIIuyc^-&2=7LCH^RFS-i`2Xgm)vn8{ypq?P<2Zh?0T zyj$Si0`C@hx4^pv-mS_Xf8%Ub{%B}V2;ZvN07H91_*TsW7}_26Ta{ND+8y;PCMftZV z{}$!nqWoK`ze=k9^PRWVJ{yG>f}_DPpz*$qowu>`Hg?{|&fC~|8#`}f=N+~DM&}*1 zyx}O&EWd;0chvH>ZI<7mhVNkc9W1|t<#(|B4wm1+@;g}GsZruOXQxJqhV#J%;6iW_ zxENdlz5*@mxC+7mEbCHHCP9(0oQ`-!1dq;a3i=0+zf63{|LSgZUf%{ z-!#-H(a;A|U>Yn3Ghi010CQj^*bA%zdxL$zzF;+I--g(!nJYt!%$-E$PDQotX#|_W z7SJMdCy}|6$lOU}?j$mI5}7-R%$-E$PR)2Mb#`jT!_dA9vr{u3OPwZs)P#?k@KKXy zW!GuH`KU>=vWDiPCe6wknva?^D{E*zYI4j+O`4T8G#@o-R@Tsb)TCKiL-SFSW@Qb{ zM@^3Ts7bT3hUTLt&B_{@kD46wQIlgnYI4j+O^*4f$uS=_Ip(7#$9&Y}n2(wq^HCE% zYQjfNnp3qs=A$OfsT!J(nlz_sXg+GvoT{Pus7Z6GhUTLt&8ZrikD4^6YG^)c(rl`s z`KSpWHQ}QseAI-Gnxs7Tsrjf0^=QIJP57t@A2s2lCVbR{kDBmN6FzFfM@{&s2_H4% zqh@^6jE|b}Q8PYj#z)Qgs2LwM_%bi&6#BwK=JF(n}|9mOU(cSoW~&VcEm7hh-1T9+o{Udsz0c>|xo%av7G(uv~`aGAx&2xeUu? zST4hI8J5eiT!!T`ESF)q49jI$PGC8KTQ}CwXO~IRjHwAAR-ZZ>v zc+>Ev;Z4JvhBpmw8s0R#X?WA{rr}M)n}#@Rq|{4sSWUE5eZza5y@K(ZG32!C5mGD-=TM2I^yp`})!dnS%FL-;w+Y8=a@b-eY z7redT?FDZyczeOy3*KJv_JX$;yuIM<1#d5Sd%@ca-d^xl!CM7y6}(mOR>4~ZZxy^% z@K(WF1#cC+Rq$59TLo_wyjAd4!CM7y6}(mO_J+4NyuIP=4R3FFd&Aos-rn%`hPOAo zz2WT*Z*O>e!`mC)-thK@w>P}K;q47?A9(w~+Xvo0@b-bX54?Tg?E`Ngc>BQH2i`vL z_JOw#ynW#918*OA`@q`=-ahd5g|{!fec|m3Z(n%(!rK?#zVP;iw=cYX;q41=UwHe% z+ZW!x@b-nbFT8!>?F(-;yw&hl!&?n+HN4gER>NBjZ#BHt@K(cH4R1BP)$mrsTMchD zyw&hl!&?n+4ZJn**1%f>Zw zZ$EhZ!P^hse(?5#w;#Oy;Oz%*KY07W+YjD;@b-hZAH4nG?FVl^c>BTI58i(84p1hw z&K;mk%240273RSLSOjP4uW?Oyo2B!1n(et2f;g7aaHFIRfa&j%3eK>^X`(N3mxJdxo%Q2z!oZ&(Z8Tnmt3=Gn73;*>jBk|MhF` zG5R0ehBt$^fVYCTfwzNqfOmp-fp>%VfcoFrvhZ`|EXUaY&KBx_XAAYevxWNK*+TvA zY@z;lwtK8v`!_<(01Gt(EYu9JP&2?n%>WBE&nDCiuuwC=Ld^gRH3KZv46sl$z(UOc zyT_`9b(C6ox_g}LzaZQO?gCrEHn1Js4ekLuz)s=u9D6*+9nygr@c*Y~D|(xmls+W`&xY6>4r) zsJU68=4OSOn-ywqR;amIq2^|Vnwu5cbv;6{WZ1x-Mo@FJ+M~HypVU5`+V z8QOI{LNR7&*Yya+n4#v+-4RkzL(QKHHGl4&FD|VSip%iL(j&q=SOAOQEF%8#V{D9VhY%qYr?qRc4DjH1j1 zl(~R17f|K`%3MI13n+6TWiF)5g_OCFG8aU^GG{%Rvz|;HCR2yW zob_ZZPsZ|OEKkPrWGqj{@?pOEKkAm6f94{+7zr!!P*q8O~Kj}tWCk% z6s%3f+ElDf#oAP?O~u+&>N%BqPQ~(6EKkMqR4h-$@>DEO#qv}vPs8#wEKlRuX&gI^ zW2bTKG>)CdvC}wq8pmD-<8>T$9YnVRd<*%pw4V1ru@;6Za2Fl++`5P#I1Lbd^{EeK^jhxYqwAGEY)s3{(jkMK`)ci&) z--zWKv3w(zZ^ZJASiTX22>c=VF!%`gBk)o1$KYe&F2d zK+n%r7GU@c7=R%dfibw%j&hF$k1MUz_VJ+p@2$4=zvP7a|13g1^IUjN=|$oB;7D*3 zcma4JI2s%S-h}0wIrdhzZv+3Nh`LJ=I9pf`?zNh0jA2-2dlZd^Nzez=e3}v7ud%^8 zp^dff*LcRzvf%qQo-wp6_-?nCZ<;KRzZ9&&%o_6%)5tnbs+36r1?roc2<4(ds>Dx)XO3iYH}p`J7=tOR?3 zdeW@+=t;9eJ!w{`C(R10LAwSY<{Erh-|NwSeXr*g;dJoz((~Hh2EJLEsO>yh0E^%* zK5Yftz;N7_BD3~9+`nhX6PG^b=qSdnW1ku8k$FD=o^lP=8+kAWCk9Yfk$TO8;-W$ zJTe21%)lcv@W>22!gF`^sj1=&JTe21%)lcv)DF*Uzj?%-$~#eL9+@FMG&GOQQ2W@Y z=8+j{A4BuV47HD;d1Qv#$Iv`7gAw=)JYrAul?6O91CPwWBQx;GTK9KqrPnp9p#MWA z)iS&pyal`!ybZh^yaT)wybHV=ya#+z=lHtwGmR%-m#RD{`~~<77=R%dfw7@GqVzkV zT{W-EM|!#$K6+g~vh4UGV(88(A0!fn)f8+G1Bowqqw=WUMFd7EQ(-sV`Hw>ehl zZI0D>n`3p}=2)G#IacRwj@5Y^b>2puw^8S9Qo;wd-|DEILKlO_Ehac73S z`KI#}_!ID_;M3sGOPA==Ux3em0T_Z27=yM7{HA(3!{anoc~d=|;R)a{@I>$=@SM{1 z`t(!QZhC65;itj#z~SKen(2B|<1WKd;054?;An6RcoV!gWBC@VxqB;nZUb+}+PxN0 zioi#NKV4 zhDp#D=854vF`U=;wU=s-#c*EV*EX~m&TBkoXfd33EQa&?zP6#oa9-chHnbSd>pR+p z7Q=acN88Y1IIr($8(IwK9gE?-V=T}^u^7%f7Q=bRVmR+u4Cft-;k>lyR-wgko*2$M z7Q=bRVmR+u4Ckd$mk2F}^U^3oi{ZR9%FtpsFO4#^7|s*Jd15$E4CjgAyhdv;=~Ij0 zyhdw=7Q=aBI8O}ciQ&9!F`RcThVvTBO&3}W=ZWFGatGVC7|ttqFtixX>;E+vyTx$c zwHVG5!+FS#u0x?`5h6}`Sffz0j z!v$ivKnxd%;Q}#SAchOXaDf;u5W@vxxIhdSh~WY;Tp)%E#BhNaE)c^7Vz@vI7l`2k zFS#u0x?`5h6}`Sffz0j!v$ivKnxd%;Q}#SAchOXaDf;u z5W@vxxIhdSh~WY;Tp)%E#BhNaE)c^7Vz@vI7l`2kFS#u z0x?`5h6}`Sffz0j!v$ivKnxd%;Q}#SAchOXaDf;u5W@vxxIhdSh~WY;Tp)%E#BhNa zE)c^7Vz@vI7l`2kFS#u0x?`5h6}`Sffz0j!v$ivKnxd% z;Q}#SAchOXaDf;u5W@vxxIhdSh~WY;yq&ywJ9+VT#c-XwT`_EEdGU6|u%YF}+ZDrx zmKSeV3>#Wryj?MDXnFB=#jv5}#oHCbhL#s^R}33kUc6l~Y-oA$cEzxv<;B|-!-kd@ zZ&wT(T3)E+lSNe8m3OE&<23`kV58eP;2EAR;K2`XA@MiE9@K*3P@OJPH@J{e9 z@NV!P@CT(|%Feyuec=7z1K@+;L*Ng=hrvg{AAyg8KL#HI9|xy{Pk>LBo)XIpt*&lY zv>W~e{3-Y}_;acHc1644GhhIQUreJ};4!E!JI zX2A+D2Udc;z$&me*az$jR)hV)!Qc^~o;feZqrf5H(cn<<#t-`-0V=p6)Ko`o9vwmrMHgsiN0#KDYo}2rdE_gG<0y zz@^};;2*%(z-8caa0R#$Tm`NM>%cYOT5uh>9^3$K1UG@3!7bn)!PmiU;2YqZhKgQ8 zA54L1upG>QS+D}kft6q{unO!A_5u5X)nI>cux3Ku)l+2*j|7hbhk!?eL&0&BzsuTO zvjq1E^I!oi8YwCyrfi*Pm*J}mV(7a#onD^_o z0&8gAuXoJ*^;&^7H1F3t=KXrDz#5wO>$L)FXx^`P%=`6@dB0vOu!iRSdab}3n)mA+ z^M1W!-miDe`}K}_zuqzL*E{C@ddIw9@0j=N9rJ!Y-mk~|^;&_oJ?8y-t-uoxNu4{GK| zh)?VB=??jHox4LmHME(=9rCH6tq$*yPYrE#c!zvyXsg3JHQE0QWJLJ;W`afSP`3krcd=>ly_!_tjTn?@P zSAwg+)nFaC23!lS1J{Eaz>VN0a5K0C{3G}}xD9**eA7@qHMCj29rCH6&GPM#PYrFB zZ-;zpX!EW+m%`ACs`q)0weBp)e~j}*yAisU0j@{uC>NRfP`NIp^|A1RWL6v;=5 zk$j{`K2jtfDUy#A$w!LhBSrF&BKb&>e56P|QY0TKl8+S0M~dVlMe>m% z`ACs`q)0weBp)e~j}*yAisU0j@{uC>NRfP`NIp^|A1RWL6v;=5k$j{` zK2jtfDUy#A$w!LhBSrF&BKb&>e56P|QY0TKl8+S0M~dVlMe>m%`ACs`q)0weBp)e~ zj}*yAisU0j@{uC>NKqq-m)xR86o!^l7s*G8k$j{`K2jtfDUy#A$w!Lh zBSrF&BKb&>e56P|QY0TKl8+S0M~dVlMe>m%`ACs`q)0weBp)e~j}*yAisU0j@{uC> zNRfP`NIp^|A1RWL6v;=5k$j{`K2jtfDUy#A$w&U;G&-lae{tRi|0-;d zlIUqEQW8T`k_MEdLA`@*o02rBcQ7<1X;ANAXiCz6k~FAyux(S42K5exrX&sO9SluL z8q_-&nvyiAcQ7<1X;ANAXiCzc-oen6q(Qxdp(#m&dIv*Ok_Pn-hNdJ9>KzPCNgC8U z7@CqasCN*eBn>D@14`0>k~E+s4Jb(iO45LmG@v96C`p5Q2eV*G(twgQpd<|_NdrpK zfRZ$*chHj^Xv0R@u#q-wqzxNs!$#V$kv43k4I630M%u8EHf*E~8)?Hv+OUx}Y@`hv zX~Ra^u#q-wqzxNs!$#V$kv43k4I630M%u8EHf*E~8)?Hv+OUx}Y@`hvX~Ra^u#q-w zqzxNs!$#V$kv43k4I630M%u8EHf*E~8)?Hv+OUx}Y@`hvX~Ra^u#q-wqzxNs!$#V$ znKo>u4ek4(dQt{$Xx|UDZHq(ueyE|vp?yEp(Bja(A8KfE*i0MR_d{*l;?TYyYG`q2 z-w!pkIJEDF8d@CM_d^XW4(hzn zwC{%sX+!&dsBK%1X5SArEC;Pev+su*T90Pm4>hzN&AuOMXmM!Y4>hzN&AuOMXg!*J zKh)6Tu!S~kp$%JT!xq}Gg*I%V4O?i#7TU0dHf*5{TWG@;+OUN-Y@rQXXu}rTu!S~k zp$%JT!xq}Gg*I%V4O?i#7TU0dHf*5{TWG@;+OUN-Y@rQXXu}rTu!S~kp$%JT!xq}G zg*I%V4O?i#7TU0dHf$jdTWG@;+OUN-Y@rQXXu}rTu!S~kp$%JT!xq}Gg*I%V4R@*E zyu;n4e$&ua*>m+i3?t6i?Gvh7m8uuf>JY`a*o+Qo|1F4tDscDc67w#&6u zwq35RShZ5;R_feJom;7MD|K$A&aKqBl{&Xl=T_?6N}XG&b1QXjrOvI?xs^J%Qs-9c z+)ABWsdFoJZl%tx)VY;9w^HX;>fB15Td8v^b#A53ZPdAqI=4~hHtO6)o!h8$8+C4@ z&TZ7WjXJkc=QirxMxEQJa~pMTqt0#Axs5uvQRg=5+(w<-sB;^2Zllg^)VYm1w^8Rd z>fA=1+o*Fpb#AB5?bNxQI=55jcIwojSKu=XUDcPMzDSb31iz zr_Sxvxt%(b#pe@21YXsq=2?yqh}jrp~*m z^KRz2N&bz7eZtA?7I`5{=yQ%YT>b#pe@21YXsq=2?yqh}jrp~*m^KRz2N z&bz7eZtA?7I`5{=d#Ljs>b!?K@1f3nsPi7`yoWmPq0W1#^B(HFhdS?}&U>iy9_qY@ zI`5&*d#Ljs>b!?K@1f3nsPi7`yoWmPq0W1#^B(HFhdS?}&U>iy9_rjdoja&=2X*eC z&K=abgF1Im=ML)JL7h9Oa|dfAw{JE(I9b?%_f9n`slI(Jg%PU_rAoja*>Cw1A~ zq|Tkxxsy6~Qs++U+)14~sdFcF?xfD0)VY&7cT(q0>fA}4JE?Ogb?&6jdsXMD?q1c| z&}N?Zs?LTs^SoDeHnf@Ny{faJ%{=c_oegc~d9UhhX!k$tRc#*;{sMdk48RbKz}QeV ztP|S(MJ3hYdg1rMn>8~~QXQTb-pZcaz}vw)z&pXaz`MbFO4oaior_TCBGkDEbuL1k zi%{nx)VTaGc)R-A=eaTaRDS*R6fp;nxQT5%R? z#aXBoXQ5V{g<5eI>aGc)R-A=eaTaRDS*R6fp;nxQT5%R?#aXBoXQ5V{g<5eIYQpYeJ|MXQ5V{g<5eIYQ{zH3XQ5V{g<5eI>aGc)?wSzlt_h)5oP}C(7HY*= zs1;|S?wSy4#aXBoXQ5V{g<5eIYQy>GgZm8LKq2^2_KsQFl-=3|ALj}>Y@R;bx{p=RTSnvEA~HeRTCc%kOug_^S!YR*=ud3d4b z;f0#B6>84bE3-LUq2}Se1b$E8_XK`V;P(W6PvG|ieox@{1b$E8_XK`V;P(W6PvG|i zeox@{1b$E8_XK`V;P(W6PvG|ieox@{1b$E8_XK`V;P(W6PvG|ieox@{1b$E8_XK`V z;P(W6PvG|ieox@{1b$E8_XK`V;P(W6PvG|ieox@{1b$E8_XK`V;P(W6PvG|ieox@{ z1b$E8_XK`V;P(W6PvG|ieox@{1b$E8_XK`V;P(W6PvG|iK26}$1U^mR(*!6>*HA;&-!@Q$Fn}3_3^BaXMH^D<5?fi`gqpIvp$~n@vM($ zeLU;qSs%~(c-F_WKA!dQtdD1XJnQ3GAJ6)D*2l9xp7rspk7s>6>*HA;&-!@Q$Fn}3 z_3^BaXMH^D<5?fi`gqpIvp$~n@vM($eLU;qSs%~(c-F_WKA!dQtdD1XJnQ3GAJ6)D z*2l9xYV4!NKK}LbuaAFy{OjXiAOHIJ*T=spMv^H;k|{=#DMpehMv^H;k}1bVk}1bV zk}1bVk|{=#DMpehMv^H;k|{=#DMpehMv^H;k|{=#DMpehMv^H;k|{=#DMpehMv^H; zk|{=#DMpehMv^H;k|{=#DMpehMv^H;k|{=#DMpehMv^H;k|{=#DMpehMv^H;k|{=# zDMpehMv^H;k|{=#DMpehMv^H;k|{=#DMpehMv^H;k|{=#DMpehMv^H;k|{=#DMpeh zMv^H;k|{=#DMpehMv^H;k|{=#DMpehMv^H;k}1bVk|{=#DMpeh*G7^l*G7^l*G7^l z*G7^l*G7^l*G7^l*G7`|)T8T#Hj+#+l1wp@Ofiy7F_N@rB2Cw)Hj=bwA{p99(w>QA zXd_8`CX%6zBvXteQ;Z~2j3iTxBvXteQ;Z~2j3iTxBvXteQ;Z~2j3iTxBvXteQ;Z~2 zj3n(jOZUmXjU;)_lF&wyJZDL0BT0MCl0Ic5Y0p`*Z5v6Z$?Vc(c4;!ZG?`tR%q~r4 zmnO4Ili8&e6;pMTWp-&YyR@Rhwk@+uli8)o?9%ecBidt`U7E};Esxl?Wp-&YyEK_y zIhkEKnO!-VT{)RuIhkEKnO!-VT{)Rux$1DeS59VEPG(oGI$ZB%IF}6PlHpu3oJ)pt z$#5bIEWn8O|lcxnww(4Cj*JTr!+XhI7eqE?Lec%eiDZ zmn`R!$HcPie)pHpl#%M~>z&d&t#`TJ8NIW5SLkg= zRqEYK?<&1}>)l81zIs$xgFPw%|mZ|nVz-aGYf(z{vj7QJ`r-Kuw+-tBtt);aal?>;)ZR!7(B z=vp0JtD|eR&fQb+BcH|gE1cZ=S;^lsI=P49NScRRJRREwpYEahY=Crde5 z%E?krmU6O`lck(2Z>et968|X=yr*{Qt9tsf z?#sF_>%Oe}vgpgAFN?k``m*TDqA!cSEc&wO%c7nyD9fseRu%O`G%;A~=Vbq6**{u* z?-{GRR`KV#zb+UEO^!rGa)I6W*r@Xdr%RAT9!TXYTpQ7t1 zsfV=d|MXKWrvKAVX`5cV^m3c_4SGQ$F~6esX_L;r+{&>Pm&uFH2MP(tXCI zTb+|jua#aZZPoszYWJM3D#Lc|ovCM@YkU8rwQcq6-~BpTCF|5PyjW@!>bWJ9x8v9C zJIekl^!!zNPp=pCD(Lqn9aB&XZY{mH@AF-@rO&qM{lQWDwtC9_oxd&KO_4q)Mc(S_ zN$tA3b%!@p(Pdg?sk(w2m2}IINb6 z)i`!d_IC#BtdG#ER#ADB@M!5wt#hjSlUnC==PZ5tapwYUU+9dM7LIW~ukA~nuL-~I zjMt}EITN%!QLmgc$+=eBlbsu+mN)8^Q*U&;`0mgvsh;RgZQrF=Qa#e$+P+7xr1Jyk z2`TE6dim<3p4R#NOs_ubqx4@kooAidy0-t-`Mv7+vNK1zJXcqFwfd|r+TN;{=ls!m zQ`>pHs&(bRBP=)#&LCZ%e^txv)Ky;Xbhrs;u%1_1Ev>C_YqZ@@SAMnI-|eqG1KdH{ zGuR#K)Tq}xRxNm(dy?ApWcQP5({tQ&oPK%^&~T@}p6oKh8K9@OjB&E=XWWaOfqJIM zI9a&Ky-7!X-~GNb$i3OUS;yX@rvPZo?B1sRx4XCN*t^tI^wPJDA9jw^_fu!+D)N#) zQad=w1^)B$$ww>>yW{E=r>rzlz3KBrOIhh%{WfpwRoYp4w=_psr}!;Xv@iWTBkDuN zOV=}YV=uA0RXX=~{FLK>?{Y0188;qN&7kVSQtvZrfltFAP?4q5Q;{6OdUhFzt0 z80~G>^?RlEztha$6z@8FdF6msIPkB(Ip}|}qtqlD8R@j{O)Yh(&W&mrds(fm%|EPi z{|lQ|L`T0XyRT`h+uyP;E&TuFCsWGH?py!&R{c+Z*3u5{%4!6pr!J}bo=c8 zm!DJq#_G|fU+mkb`<+#%#*)6{EnRp}SIWMzfudx-$|*vu{`lIiDfzqfJG%nVm3@Zv zcV4YaD`&QoX_UbyfdRcux z^kdhMTKa(N>O)2L|I_;Ys;;X-e&OoYUluXCj)d0hOHJ^x`MIF+qqR{^eTn8Y+@C0s zeb$|+-r;q9*S()IAAQ%?E$BOwwffFMy%fHv9Owv@K0&4LmA>ES-Y3Ps-@RYG?gQ=v z>UAGe;qm4C{8O67l|+Gqt%wehG;1+~dgn+&zd>2BMidZ53!|D`^uLF3q7?)$E?Fx|J- zqU~L7r&FP|^}SA|Thc1J>#5>Sr7}4^o?UBmo|Dl^jb?B)yOPp&TC*LM%JRzfX-4xC zm0nh7t4Fr0*SE3507eai6=UkZ7$Xd3bWp>HU@&8W!Hfd>F$x&WD4-XkfGS1-y%+^l zF$(C#D4>c_z!8iBdNT?b$S9zeQ9z&WQGoUTN74VEO#gor{r{2l|3}gPpG^OMGX4Ka z^#8-?|4*jpKZ-v8WcvK0=^Of?ZxNyKD{m~!_G_YK8|MRAI_(cGJ&IPLz~RW3~Q zXa-JkGlYm4Ld294F?tTDVnxpZRg`EpPEnF3N>W6Lo(8J;7~~D`1`r>gx3Ns`JDsoS zuOYg=-jZ4#t!u8jRFp>6>H2=6^n|XpVN#Gf>E|07UEiY-jBQ&FZ&&I{m3>hqUz813 z<0a2IkEqKLb!p-)O}zQe7xZ$8x-?OjChE$GI?WMk?5R03y)<8?m*&j$(tMR(nlsZY zOVsru>Z*vk-usO``x154j5-GpZv%+88scpL5jB8V8bB=75=%A2(ja0<&q>wD@d#q+ zNTTQ{;%5NyQ$yqoB64~YIWK%I}X)_2ho}v=W~t@o7J<{Qh{hA6I^V$ICus zp3Sb$O?8fOPU_am9>qPx=tDh^jQ}*F(91F+jaYgPIp}Y)vF=YSPm@j`*k{O&Maj0( zPc`Q48Uwwjv8Q@n^}USd4r2EZwd*Olf1k4dcF*U3`&*IO-Md=vSGuNj4da44RM(vK zXWI9c#W!28uxe-_@A1IFLj8sOS7A?xqALaJ)5iP7U)3c4Wzu091JME=kbdB)TuFT$)qEgh= zg0f>iURfGndbl)ExK-OzH7XpZ@#8hr;f{Tys(Ur^8ZUpS)fLBwX;Y)T_cYq;8L91O z)7UjH(hliG8pOG2mAQ#jO}mpJ6rab{;EYo^v5!x?w_OaRHe;!9rQ=D-}`yYM%c_#^khQ%pL34p!9Vd628sQ>;`Y<8>jKKshkbW~3~?c2TIhBSRs zPh{`=y>Y(+`+VQC&vHN6Tzrshm?Dbr_e$#(KW|VDRn(rk?x^J2E4@I`{o#LccKa9K zZ~IU_%KeW%-~UKGSJ3(_DbLegw!6-AKOSv%sgacWZ)XB1sI%6Zvh}4s$LY*9cWbjK zI{M%pcdyR~klyicjyc#4PgzUCxkw*f?A)&Tc*|^VCa1YY+03h2_kB&PTMIPj zy<2Nj9h#y3t8xxK>DIDU_shyQZg;<;tZJ03^wIpftpf~IZ+5i){-|D_X8uo8R%LVl z3FiJivaPJRKBIa4&x*TD++PsdI)LsgcgCrttpg;}7)i_J_>aUh~Rr7YQ=~d$_(^^4)a<@L@ZhbXZ@Q%*Ap!I=j%?~tdR>4-iYqU1l zs-xQUs-XpISU2dWT(6(z?`^GM0BZ#UyEDFH++&=f!BJ#?LzqK2+Wete zC0i?~Ci}}N`@2=!w`r}QI|o#|UZQrZ*7@5SO@I8+A5Zin?=2(m?N5vMr>%$5*8RzQ zb>E9#y5~eM-S?uG?m5v*_r2&mw~2hf7G%&-h&hUF;MpOUoH ziDbpKtgxI&d)3ljC(>SnXsH3TR39?rbg-b!E{d?(`I@c;=}u`nxqvbYWt8JJhWwp0g8V`~*m$xD8xQI`BFZUN zmhRO)%QW_`=!uEoUq-*Z9Yo;X0Oi3Cam*ZpI2dViI{ZB#WOKirg ze82e;ACIQ-Xm5Pk8!zf!NiU^UQ=1Fzjpur+oi#T12Bfskx8J=@tn15vC9P80*xlCU zhpE-ikw$*i`L`kA{$lq(xdZI}C-(xo z|H++d_dmH|w|!S?P$R86(K*BUl=R`Bow4%c_459M&UD?;Gu!!%d}ej2Rvc7F;f83o z=1k{Yt>AuMk@g)a^9@pjhoq~|$kV@7Khag%#?RIVoa}te`Lv?t3sRRWoU0WdcR4>) zd<4$FIsf4->@Kal@-+)QRO^*zIp=9z_)_OG=St@qDbL-`!&2(ddEWV*v#7hY?(}vB zYToD{)SC=fFY-m_8_svNQv7{I>?67-DRO@4yyPtIF0K29wT67GR-w<j~FFF6> zd{6pzvoz~Rx_>ElexipsI%O^}t%sf0CYsdcTaB<2Ni9d|J{IGEB z#A_0(#vT@aXVTRZ6YCETubh1O*u>Vu!wKWQdwHU8n0WQr35gvO3>&~*V25GS1Jht7 zSUqXl#L3Cp!^5j5e`iv1$l>8NqD&rtcsNC|l>EqH;n1H@v%8WEeJ}~yn8wu| zJceno5*!R#59zAsFtkk5Rli_Z3l0J+z$|DpW3Kw8lbx@6Hzhuwh!Z;!JCd1wuOpLR z((CTzx0BZhf1G^Xzt~@vIz4q$>T$iEPc2Ekoq0ZcP4-_a{E8tJpQ!js#Sbc;Q#$(9 z$_170^*Tki&A#r6ax0y?-OsyUa4&Vg=zd9A(pTJna=+^Sv->so>+WUlzqsFYzvW); zTtw?rwLF+u?RXJJvhS zJKj6N8|Izpo#dVDeZ>0*?-Z}UR^bMEwca3auy=%aq<54z#5-DdeSOCJtap+3Iqzcc z65W6N1@BVti@FQ(%epK14DU?uW8PWb$Gx+?fAl`#ebO7{UEobti`=b9=&!zSsQSLs z)oXuJBZ4vNT`yJNeU(NWlhhwiBhUDO#s)JqvUyhHgXh(c|4RMsi|QADt&zxYHDdU^ zdPuvwc$vnJd1YEHPKVQ}(PDp%5(m3Sxx+LnJV&F!^EKX|=gxN*xC`Ay?qYX|?l@lR zzN(ShU)=w6-*f-VM&TN(wYqI?yGCmz1)+P$b3RlX9qOD9)kb5x<2Z2fN}ix+-dF&+IO8YLr-OI67!#&qWe$!{k|gc``UY_`wii@ zb#IyHUg@2#tmY5yb859;yFb-R@v|D^zUIzW8~(<9T6Y)t?lSjZ)ttLn(OSSn+?lZdkz;{=mG$Nt#r@g-iG_c?rE+2G2sJZ^E6hUE__JV z^?hSm)%T5M&C^=6ra?@sS7?{4oNPj`N(ep9?# zb!3mtW3k|A1a3#$-T9940j*^#_RY4wx6j_%4?b~U=kw392R+jGI-zm>ou(Gro6yyE zyIn2&N|@@VII6I3pC?tXP)xig&o7sUSIU#C<*_wtQJdG%_r7&kfn%+pbMMhU*Q-}Q z@WEeOrMCP2(p`N!^q1~!{$QW?JLL#HXFF8qL_SNnqy3Y9X&T$9z<+F#p%FUaHxT3|CP!zrRd*wa)*P?%bI9-)jG4arpalNF5uUtaPzma}#@YKTnM})*Gu{wW}Xai}5UZqC$P{ zN!m{6j?^;gwXQvRutJ)qxVHOK6`S_y?YfFT<$g-rR%$C--94lt#_mFzrOzymeyZPH zpI9U=lm(ZWgRU4bkJ|nvR+=ler?h3IWy%gfZK-mNS8w~FWOZil{6^AT^PcbPZUd&qm*`>m|F8pF6czKh+iVPevq zx^Iug9?`GQtW;I^Cw6ryR#f)`_gfTu>ILna6Z@C%+TUM&+QIf8p`Pww`-iIkJJ|ly zbp8k1f4X|hgYEyg`p^USch&!sQm2FMzfhWW;Qp@qk5Ny|{^ZU3TIgWqE>&-Ru>D_j zIzP0(s~%r>?VB`z+g?{`cIaUHCu%vfHEBJ^t%DpPLjz2eb17_vC}_ zf6_hYp!;Vi;<2+|)Uo~<5LHvO=k$(1I})Yb>;F-*29m`PH-ysxTXK1=1K z9o}WqfmX0hHp^^e=6#&Ax1RM#>M&ZLSRL%Qone`d9ipD1s}5aTU1#n&KhrF^=|-7X z;pMzuUX|C!>+4xRY*((;%2a|9_S>z{c0q4DhYvn+b)~tAZYz1T;g5jUFCeuo2>Eo*L93((rlHp?-0z~@BFMT7BfTj?y}h3 ztE(SVpQF7s@}c!C*0)&iV*QKtFxJOdFJt|T^)%{hu+i1~zUX{e$pq|X-&Yt{7 zW6!SK=Ss4l50%$=_5FR>&Y_MuSf6*WeKR#u_}k2=I~P*DzpVB-Fh}XhPrkk{L%B&F zx9r5e?f9$|z9$pesw*eYc&;ZON$$%?j_b}xMv#&G@5h!0%U!y&mHnw@JEPa&VZZPFvm+em{^maJ zOS0_f=^x7It2GxpRM+{b%=C`dxqVsDY%{~xY5w*u&6_@=nP;0h{gw1+_c-v9q0~mPjF9h&vZZSUf^D&ocy2NZz$)s%;|dR;yoJi>p%HvL=Y(( zc}cm-a%Cc$H0NK?c&J4qgfeBymC}!X%7uq0Q$AVa#Iw9ldBZglzF4{MWf~=o_pbGB z)foOE?@{kb?`Pg~-oJYC|?Jjf6(q+BM`js6~c0$=HWgjd1 zWZCeti^{%Ic3IiC%f^*mT{f-k=CZrWepvQ+*-y*Dve{)Xmc3Lqzie6AnzBEZy{T{N zHkP%NbtJq*d7>)OKXF9j*u+N@XC+1?Mkg*#d^z#YiEkyYOiV~jN!*mUBXM`)fyASU z8Hryco=^NHu^{nkVr61oVrwFws89Sg(UvGB6UlV4GFg)xoIECZV)E4F$CKwKM)U~M_Q+K2u)cniOQqQJd zNWH9Cn3bswscoruQw^!sR4HAa?wcN*J}!Mq`keHr^ykuFPJc7~z4W!|8`F2Cf0%wE z{fqRh^b6^i(@WAT(;L!nrvIFNKiyvLmY0|JEgxKdT=_qgf4qEn`De<%SpN0$vE>uX zuPeW;{ND0M%YRxPm;btaarwIPLizjUrHr5Hof(`tA#+A%ROYLh@tIpPcV`~V{5bPe z=9$c_%&#*4k(rlyC9@*4F0(1~$IRQAKW7>;yR&84s_dZbvDuGi&(4m_em?t+?6~Z; z*&DLAXCKN=&pwlVF8gBk_t}NnW!W{^*R$_r|B`L4a4RY*`c)iL@zIL2E5=m(Q^ge( z(<<($c(h_h#V;ymSG-v9a>b&GARPYoi_D~;iLFPsZ-B9pFhqYd%239KX%;YvC}4AIpK;M&i~HUQ!gJo_KHbUNAl4~ znYw&x*D>dhf_oGn80YDypUo%dpEYXVVeA-j_NcB(jOwa{6+Z3kt_qGg|3b`M_yH*& zpMLs<`;3hK_T`gDAMp8UqfS3_%zmeS!I*u8yQ(mJOc&#rF2*ra$4&Uo6`wi4#;K>B zan?ng_C@RTXLNb*huIVOINa7~R6onAErU>cMHD85{b?<)q?&E&nwVzYs z-uwOi-ap>=(X{0-iDAhDU#GV4_p6w)i289R51jmNQdWOaXBm{f6=Ky-M zF=H*gg>+5C)<-Dr^KE0=nFqAfI;vH#iL#rTjUFo$bTkXl5EP&xDBz2h2LuZk1t?Ri zKp_$+2r00glE5$Z1qoR}UupU1V4?2dFYRM42-IxMD4XCf#RT+DcEK7Vg4?y++)C3} zP6D~+R(7ERw$S#v1vbnrLcib&gQg7oCLfgDD!g3+qfNt&$@P>_=_sdgO{L+QO2dU# zAV|$EY-WFh2K3!#PH0SUaAZV4WKeiugdmKFFN~R4jEVp%1hf`5kwR`{d#vc zO|vo977QC1e@%0| zhUWOzwj>G_FUU4gATY6=u*5bEPZTscsXa%aW2{xuR~l}YEEG@v(%b@!orR+@xhZrq zCU>!;gzsqKJ4X196~4~GcbxG3L4bD=zT<@ySK&KB_)ZkQlZ0G1Av{_5P7%ISg|EBt zohE!egs-RY^%B0`!q-Rm1{jmu!~lVCO;8Z55EKMCYK$hio%6Oln2ttk^4f&dmP7h( zTNt3sG*E)1G(nC0HDOI7Xu_l=+CyIvCA3a^jxo7TY##`OXbAaQ%oe_J!q;;q{7ak( z{|F}*c7mQ*I0{3ch100$aB|TmNC9R~;WsW(6ORjnt|X*{M8(Hw0^tdol-Th3LP9Le z&5=SVI6O2gP6$PYw;~cSlRH3ynfwyW!mogtgaph&fM6y8f?4<#Fq4o5GYJWpNkG6% zK0<&f)|a|wen}>`o}^~-OKKK=g_=o7s96Y*nn{4vEc^;JlaQun5)x`A0ihmZ6F@MN zUxHcq6)=;KfLRC-%p^cC3%>$p64GEMAptW92$+F4Sf2zNlV5^a_!TgdkbqeT5X>Y% zFblr|W)jk1CLsYc2?&_UJ+4L?(XG;e-&Scvw@Cv68fiqgN&|jdr4ju_8qsaih>o2F z<6CeypZM&|^_eUlCGc7W)B7#OPCN(-^}Orou(j-!L;2ElSdqhXO> zf?-L~VXb=C3MW8>#=~+Vcy3gConKPg5tAe^00;%hR=U5Wv;zTFb5m0?+`{x2BG!ni%O-kVyI%{E%UK?3l4+1~(mJF?LLROjJa8On{In%$Me- zj-)*N2;C821l1?2QB5E|1|$@iBt(LuV5t-%1PLY~5E2muqlFM8n1w(q`u4D+tq_id zc_@MmEu;gr)+&UPK$2h5Y@8ya;)3VJ2SmU`8URIva6~ZZ0Z9yqj*f|%F9gAcB0MrY zE-83!bX-zwa9ns~TriAo5daVr9~c)KKX-0GTzFJuOaM&9kPI_fctAu@cu0s)xs79V zM0~7J@!aspworUTTzGUuE5qRl;X#@~L8wrGZKF5HE}y3PIOEY zw-(~FqT<4YKzwwN2G9v+`eayYkS)$wTR~aO&CCQ{Gc&Ue(DW?GGqup@nuV#2Foy(2 z&7CF84J4q+7uK^Dg1Q26>84y&04%*FMCsv2lV@Qw(^^<8L5eK|$$z_<)>fvYqN0-okr+%jw=y#@H#M^{n3ZJU9zHk9 zz&QXKC^9(4*uXI&!a#tEHGp+LxW*#h9N4@AR0PWAn0On?BF)s0$pKH zC^9P1U=}Ph4FEPgFg^m5M4&GyCLl4=0QAKmcz#@PWDsG@Eg%Uxoq?eK02&Zu5D*7> zq-Pk!MHzrLz*Len*dQh>DK2cTP#Ai3;$VT~$lyeSFB}C##6}swUNtH{GA`C2Br3)r zK6*%8)Q}+PrUpUbvC$C$NkaLU;MP7U)DavQ78w;06&fB45{)tl6uPxR04V`|HZTq- z2O-2kH;#%4h)FUCje!9mc3yn&V1vZ)xG;c(g)~eDflxX=FwEG%9b}mp76nq($XF;I z5FQz8U}#DJJ#&^m!(22f8#d=R7uM1B#Cfh!CTkp_VvfdCMHi~)=x z0{H<339zaOj!Pm9JSjRj(jD5=AOuFEc+eN)ua!h|xM!d_-TP;TXa_m8n+!&vk3{gt z`o#0$__!3V*Ip9iWvv9QLt0lPT_h@r8ys*gl3bF!hC?f7IDRssoT+JW)Ra!`q^{Fr z=^1c5M2>@EJ3i8O*7ngpp?#r~ey8Y8@tyW`s_0bJ>3*kr#)ffVoS8|C2jj#1$XsKp zq_niNw71k#I!78SO^{|tv!vVMU?o?2Kw2n$D19MqkiM0E()nIzpw1MXIXVeC+jI`< z9Md_ib6)3?PL0lUI6(OWjCiQd2Azj@_UP=_Ill9v&dWPzz;Q`_=X0GaI@fjn)VW30 zMJAUGl8uy&m(7&L$`;GgW$R=cW&31>vU9R3*{`yvvRASXvOjety1KfYZZF*dx`TD? zbjRvW*7eezp*u@=wr+xMnr^0UmTr!2uI^#o)4CURuj<~@eWLsOx%~_hVI5?tMAKFx z6XcPOGPKdCUPuR9De<&**c5wY;tXy6M`R#hi`}pm9)f#jY7ZFy07+HpXcFoGrFyQ^ zes^s+ma3%uA@qwJ^)h>n6-qp09oEGIGqJNaHhgA*`n;$+Rac>Ox5-h)-rVl+>l&LNc&nXN?K(7<%$tc{dI z-eRQ^o2|og4R+r0xg2*N*1zvikBVog`@;_(ADx?Gsg%n9q<1tsF;d>A+eaFA4dn*W zYMsw+R627Db*Iod8n1gPN2AdTYAs!XUrNizY z5qC6UccS+0`CDQl^<5{=9Ev6GXOT2nDNUQXo|)~QM8Lf@E$0kU2wR}&} z&&sv5)IMdhhl67Locv2$)@)h(lj;(B62iIRmsI+qRSQ$}rE*KtsV^r6UpApoC;CAh zC6nLTP;%s_o7pdWV2V!aLzU1g=cJ^}S*9&p5uOw|H�~a`xg-g}u-DCy4#E>HX!i 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/funcs.js b/docs/source/_static/funcs.js new file mode 100644 index 0000000..b45110b --- /dev/null +++ b/docs/source/_static/funcs.js @@ -0,0 +1,478 @@ +if (!window.Chart) { + class Chart { + constructor(chartId, innerWidth, innerHeight, position, autoSize) { + this.makeCandlestickSeries = this.makeCandlestickSeries.bind(this) + this.reSize = this.reSize.bind(this) + this.id = chartId + this.lines = [] + this.wrapper = document.createElement('div') + this.div = document.createElement('div') + this.scale = { + width: innerWidth, + height: innerHeight, + } + this.container = document.getElementById('wrapper') + this.commandFunctions = [] + this.chart = LightweightCharts.createChart(this.div, { + width: this.container.clientWidth * innerWidth, + height: this.container.clientHeight * innerHeight, + layout: { + textColor: '#d1d4dc', + background: { + color: '#000000', + type: LightweightCharts.ColorType.Solid, + }, + fontSize: 12 + }, + rightPriceScale: { + scaleMargins: {top: 0.3, bottom: 0.25}, + }, + timeScale: {timeVisible: true, secondsVisible: false}, + crosshair: { + mode: LightweightCharts.CrosshairMode.Normal, + vertLine: { + labelBackgroundColor: 'rgb(46, 46, 46)' + }, + horzLine: { + labelBackgroundColor: 'rgb(55, 55, 55)' + } + }, + grid: { + vertLines: {color: 'rgba(29, 30, 38, 5)'}, + horzLines: {color: 'rgba(29, 30, 58, 5)'}, + }, + handleScroll: {vertTouchDrag: true}, + }) + this.wrapper.style.width = `${100 * innerWidth}%` + this.wrapper.style.height = `${100 * innerHeight}%` + this.wrapper.style.display = 'flex' + this.wrapper.style.flexDirection = 'column' + this.wrapper.style.position = 'relative' + this.wrapper.style.display = 'flex' + this.wrapper.style.float = position + + this.div.style.position = 'relative' + this.div.style.display = 'flex' + this.wrapper.appendChild(this.div) + document.getElementById('wrapper').append(this.wrapper) + + document.addEventListener('keydown', (event) => { + for (let i = 0; i < this.commandFunctions.length; i++) { + if (this.commandFunctions[i](event)) break + } + }) + if (!autoSize) return + window.addEventListener('resize', () => this.reSize()) + } + reSize() { + let topBarOffset = 'topBar' in this ? this.topBar.offsetHeight : 0 + this.chart.resize(this.container.clientWidth * this.scale.width, (this.container.clientHeight * this.scale.height) - topBarOffset) + } + makeCandlestickSeries() { + this.markers = [] + this.horizontal_lines = [] + this.candleData = [] + this.precision = 2 + let up = 'rgba(39, 157, 130, 100)' + let down = 'rgba(200, 97, 100, 100)' + this.series = this.chart.addCandlestickSeries({ + color: 'rgb(0, 120, 255)', upColor: up, borderUpColor: up, wickUpColor: up, + downColor: down, borderDownColor: down, wickDownColor: down, lineWidth: 2, + }) + this.volumeSeries = this.chart.addHistogramSeries({ + color: '#26a69a', + priceFormat: {type: 'volume'}, + priceScaleId: '', + }) + this.series.priceScale().applyOptions({ + scaleMargins: {top: 0.2, bottom: 0.2}, + }); + this.volumeSeries.priceScale().applyOptions({ + scaleMargins: {top: 0.8, bottom: 0}, + }); + } + toJSON() { + // Exclude the chart attribute from serialization + const {chart, ...serialized} = this; + return serialized; + } + } + window.Chart = Chart + + class HorizontalLine { + constructor(chart, lineId, price, color, width, style, axisLabelVisible, text) { + this.updatePrice = this.updatePrice.bind(this) + this.deleteLine = this.deleteLine.bind(this) + this.chart = chart + this.price = price + this.color = color + this.id = lineId + this.priceLine = { + price: this.price, + color: this.color, + lineWidth: width, + lineStyle: style, + axisLabelVisible: axisLabelVisible, + title: text, + } + this.line = this.chart.series.createPriceLine(this.priceLine) + this.chart.horizontal_lines.push(this) + } + + toJSON() { + // Exclude the chart attribute from serialization + const {chart, line, ...serialized} = this; + return serialized; + } + + updatePrice(price) { + this.chart.series.removePriceLine(this.line) + this.price = price + this.priceLine.price = this.price + this.line = this.chart.series.createPriceLine(this.priceLine) + } + + updateLabel(text) { + this.chart.series.removePriceLine(this.line) + this.priceLine.title = text + this.line = this.chart.series.createPriceLine(this.priceLine) + } + + updateColor(color) { + this.chart.series.removePriceLine(this.line) + this.color = color + this.priceLine.color = this.color + this.line = this.chart.series.createPriceLine(this.priceLine) + } + + deleteLine() { + this.chart.series.removePriceLine(this.line) + this.chart.horizontal_lines.splice(this.chart.horizontal_lines.indexOf(this)) + delete this + } + } + + window.HorizontalLine = HorizontalLine + + class Legend { + constructor(chart, ohlcEnabled, percentEnabled, linesEnabled, + color = 'rgb(191, 195, 203)', fontSize = '11', fontFamily = 'Monaco') { + this.div = document.createElement('div') + this.div.style.position = 'absolute' + this.div.style.zIndex = '3000' + this.div.style.pointerEvents = 'none' + this.div.style.top = '10px' + this.div.style.left = '10px' + this.div.style.display = 'flex' + this.div.style.flexDirection = 'column' + this.div.style.maxWidth = `${(chart.scale.width * 100) - 8}vw` + this.div.style.color = color + this.div.style.fontSize = fontSize + 'px' + this.div.style.fontFamily = fontFamily + this.candle = document.createElement('div') + + this.div.appendChild(this.candle) + chart.div.appendChild(this.div) + + this.color = color + + this.linesEnabled = linesEnabled + this.makeLines(chart) + + let legendItemFormat = (num, decimal) => num.toFixed(decimal).toString().padStart(8, ' ') + + let shorthandFormat = (num) => { + if (num >= 1000000) { + return (num / 1000000).toFixed(1) + 'M'; + } else if (num >= 1000) { + return (num / 1000).toFixed(1) + 'K'; + } + return num.toString().padStart(8, ' '); + } + + chart.chart.subscribeCrosshairMove((param) => { + if (param.time) { + let data = param.seriesData.get(chart.series); + let finalString = '' + if (data) { + this.candle.style.color = '' + let ohlc = `O ${legendItemFormat(data.open, chart.precision)} + | H ${legendItemFormat(data.high, chart.precision)} + | L ${legendItemFormat(data.low, chart.precision)} + | C ${legendItemFormat(data.close, chart.precision)} ` + let percentMove = ((data.close - data.open) / data.open) * 100 + let percent = `| ${percentMove >= 0 ? '+' : ''}${percentMove.toFixed(2)} %` + finalString += ohlcEnabled ? ohlc : '' + finalString += percentEnabled ? percent : '' + + let volumeData = param.seriesData.get(chart.volumeSeries) + if (volumeData) finalString += ohlcEnabled ? `
V ${shorthandFormat(volumeData.value)}` : '' + } + this.candle.innerHTML = finalString + '
' + this.lines.forEach((line) => { + if (!param.seriesData.get(line.line.series)) return + let price = legendItemFormat(param.seriesData.get(line.line.series).value, line.line.precision) + line.div.innerHTML = ` ${line.line.name} : ${price}` + }) + + } else { + this.candle.style.color = 'transparent' + } + }); + } + + makeLines(chart) { + this.lines = [] + if (this.linesEnabled) chart.lines.forEach(line => this.lines.push(this.makeLineRow(line))) + } + + makeLineRow(line) { + let openEye = ` + + \` + ` + let closedEye = ` + + ` + + let row = document.createElement('div') + row.style.display = 'flex' + row.style.alignItems = 'center' + let div = document.createElement('div') + let toggle = document.createElement('div') + toggle.style.borderRadius = '4px' + toggle.style.marginLeft = '10px' + toggle.style.pointerEvents = 'auto' + + + let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("width", "22"); + svg.setAttribute("height", "16"); + + let group = document.createElementNS("http://www.w3.org/2000/svg", "g"); + group.innerHTML = openEye + + let on = true + toggle.addEventListener('click', (event) => { + if (on) { + on = false + group.innerHTML = closedEye + line.series.applyOptions({ + visible: false + }) + } else { + on = true + line.series.applyOptions({ + visible: true + }) + group.innerHTML = openEye + } + }) + toggle.addEventListener('mouseover', (event) => { + document.body.style.cursor = 'pointer' + toggle.style.backgroundColor = 'rgba(50, 50, 50, 0.5)' + }) + toggle.addEventListener('mouseleave', (event) => { + document.body.style.cursor = 'default' + toggle.style.backgroundColor = 'transparent' + }) + svg.appendChild(group) + toggle.appendChild(svg); + row.appendChild(div) + row.appendChild(toggle) + this.div.appendChild(row) + return { + div: div, + row: row, + toggle: toggle, + line: line, + solid: line.color.startsWith('rgba') ? line.color.replace(/[^,]+(?=\))/, '1') : line.color + } + } + } + + window.Legend = Legend +} +function syncCrosshairs(childChart, parentChart) { + function crosshairHandler (e, thisChart, otherChart, otherHandler) { + thisChart.applyOptions({crosshair: { horzLine: { + visible: true, + labelVisible: true, + }}}) + otherChart.applyOptions({crosshair: { horzLine: { + visible: false, + labelVisible: false, + }}}) + + otherChart.unsubscribeCrosshairMove(otherHandler) + if (e.time !== undefined) { + let xx = otherChart.timeScale().timeToCoordinate(e.time); + otherChart.setCrosshairXY(xx,300,true); + } else if (e.point !== undefined){ + otherChart.setCrosshairXY(e.point.x,300,false); + } + otherChart.subscribeCrosshairMove(otherHandler) + } + let parent = 0 + let child = 0 + let parentCrosshairHandler = (e) => { + parent ++ + if (parent < 10) return + child = 0 + crosshairHandler(e, parentChart, childChart, childCrosshairHandler) + } + let childCrosshairHandler = (e) => { + child ++ + if (child < 10) return + parent = 0 + crosshairHandler(e, childChart, parentChart, parentCrosshairHandler) + } + parentChart.subscribeCrosshairMove(parentCrosshairHandler) + childChart.subscribeCrosshairMove(childCrosshairHandler) +} + +function stampToDate(stampOrBusiness) { + return new Date(stampOrBusiness*1000) +} +function dateToStamp(date) { + return Math.floor(date.getTime()/1000) +} + +function lastBar(obj) { + return obj[obj.length-1] +} + +function calculateTrendLine(startDate, startValue, endDate, endValue, interval, chart, ray=false) { + let reversed = false + if (stampToDate(endDate).getTime() < stampToDate(startDate).getTime()) { + reversed = true; + [startDate, endDate] = [endDate, startDate]; + } + let startIndex + if (stampToDate(startDate).getTime() < stampToDate(chart.candleData[0].time).getTime()) { + startIndex = 0 + } + else { + startIndex = chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(startDate).getTime()) + } + + if (startIndex === -1) { + return [] + } + let endIndex + if (ray) { + endIndex = chart.candleData.length+1000 + startValue = endValue + } + else { + endIndex = chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(endDate).getTime()) + if (endIndex === -1) { + let barsBetween = (stampToDate(endDate)-stampToDate(chart.candleData[chart.candleData.length-1].time))/interval + endIndex = chart.candleData.length-1+barsBetween + } + } + + let numBars = endIndex-startIndex + const rate_of_change = (endValue - startValue) / numBars; + const trendData = []; + let currentDate = null + let iPastData = 0 + for (let i = 0; i <= numBars; i++) { + if (chart.candleData[startIndex+i]) { + currentDate = chart.candleData[startIndex+i].time + } + else { + iPastData ++ + currentDate = dateToStamp(new Date(stampToDate(chart.candleData[chart.candleData.length-1].time).getTime()+(iPastData*interval))) + } + + const currentValue = reversed ? startValue + rate_of_change * (numBars - i) : startValue + rate_of_change * i; + trendData.push({ time: currentDate, value: currentValue }); + } + return trendData; +} + + +if (!window.ContextMenu) { + class ContextMenu { + constructor() { + this.menu = document.createElement('div') + this.menu.style.position = 'absolute' + this.menu.style.zIndex = '10000' + this.menu.style.background = 'rgb(50, 50, 50)' + this.menu.style.color = '#ececed' + this.menu.style.display = 'none' + this.menu.style.borderRadius = '5px' + this.menu.style.padding = '3px 3px' + this.menu.style.fontSize = '13px' + this.menu.style.cursor = 'default' + document.body.appendChild(this.menu) + this.hoverItem = null + + let closeMenu = (event) => { + if (!this.menu.contains(event.target)) { + this.menu.style.display = 'none'; + this.listen(false) + } + } + + this.onRightClick = (event) => { + event.preventDefault(); + this.menu.style.left = event.clientX + 'px'; + this.menu.style.top = event.clientY + 'px'; + this.menu.style.display = 'block'; + document.removeEventListener('click', closeMenu) + document.addEventListener('click', closeMenu) + } + } + listen(active) { + active ? document.addEventListener('contextmenu', this.onRightClick) : document.removeEventListener('contextmenu', this.onRightClick) + } + menuItem(text, action, hover=false) { + let item = document.createElement('span') + item.style.display = 'flex' + item.style.alignItems = 'center' + item.style.justifyContent = 'space-between' + item.style.padding = '2px 10px' + item.style.margin = '1px 0px' + item.style.borderRadius = '3px' + this.menu.appendChild(item) + + let elem = document.createElement('span') + elem.innerText = text + item.appendChild(elem) + + if (hover) { + let arrow = document.createElement('span') + arrow.innerText = `►` + arrow.style.fontSize = '8px' + item.appendChild(arrow) + } + + elem.addEventListener('mouseover', (event) => { + item.style.backgroundColor = 'rgba(0, 122, 255, 0.3)' + if (this.hoverItem && this.hoverItem.closeAction) this.hoverItem.closeAction() + this.hoverItem = {elem: elem, action: action, closeAction: hover} + }) + elem.addEventListener('mouseout', (event) => item.style.backgroundColor = 'transparent') + if (!hover) elem.addEventListener('click', (event) => {action(event); this.menu.style.display = 'none'}) + else { + let timeout + elem.addEventListener('mouseover', () => timeout = setTimeout(() => action(item.getBoundingClientRect()), 100)) + elem.addEventListener('mouseout', () => clearTimeout(timeout)) + } + } + separator() { + let separator = document.createElement('div') + separator.style.width = '90%' + separator.style.height = '1px' + separator.style.margin = '3px 0px' + separator.style.backgroundColor = '#3C434C' + this.menu.appendChild(separator) + } + + } + window.ContextMenu = ContextMenu +} + +window.callbackFunction = () => undefined; \ No newline at end of file diff --git a/docs/source/_static/ohlcv.json b/docs/source/_static/ohlcv.json new file mode 100644 index 0000000..943f8a4 --- /dev/null +++ b/docs/source/_static/ohlcv.json @@ -0,0 +1,38761 @@ +{ + "volume": [ + + { + "time": 1277769600, + "value": 277519500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1277856000, + "value": 253039500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1277942400, + "value": 121461000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278028800, + "value": 75871500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278374400, + "value": 101664000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278460800, + "value": 102645000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278547200, + "value": 114526500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1278633600, + "value": 60061500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278892800, + "value": 32487000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278979200, + "value": 39439500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279065600, + "value": 62097000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279152000, + "value": 55222500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279238400, + "value": 37939500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279497600, + "value": 36303000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279584000, + "value": 26229000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1279670400, + "value": 18214500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1279756800, + "value": 13924500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279843200, + "value": 9603000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1280102400, + "value": 13416000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1280188800, + "value": 8658000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1280275200, + "value": 6801000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1280361600, + "value": 8734500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1280448000, + "value": 6258000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1280707200, + "value": 10417500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1280793600, + "value": 17827500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1280880000, + "value": 13594500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1280966400, + "value": 11722500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1281052800, + "value": 10542000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1281312000, + "value": 10684500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1281398400, + "value": 17506500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1281484800, + "value": 11340000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1281571200, + "value": 10168500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1281657600, + "value": 9385500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1281916800, + "value": 7186500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282003200, + "value": 6597000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282089600, + "value": 8905500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1282176000, + "value": 8290500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282262400, + "value": 4381500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282521600, + "value": 16048500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282608000, + "value": 9973500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1282694400, + "value": 7372500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282780800, + "value": 6189000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282867200, + "value": 5628000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1283126400, + "value": 10831500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1283212800, + "value": 2956500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1283299200, + "value": 7306500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1283385600, + "value": 7159500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1283472000, + "value": 6402000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1283817600, + "value": 3612000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1283904000, + "value": 4281000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1283990400, + "value": 5586000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1284076800, + "value": 5706000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1284336000, + "value": 5361000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1284422400, + "value": 9564000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1284508800, + "value": 9990000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1284595200, + "value": 38347500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1284681600, + "value": 17478000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1284940800, + "value": 13968000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1285027200, + "value": 11749500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1285113600, + "value": 13227000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1285200000, + "value": 9856500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1285286400, + "value": 8590500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1285545600, + "value": 6181500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1285632000, + "value": 17905500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1285718400, + "value": 27925500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1285804800, + "value": 31186500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1285891200, + "value": 7783500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286150400, + "value": 9444000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1286236800, + "value": 4914000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286323200, + "value": 4617000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286409600, + "value": 2064000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286496000, + "value": 3973500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286755200, + "value": 2497500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286841600, + "value": 3405000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1286928000, + "value": 4728000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1287014400, + "value": 4314000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1287100800, + "value": 4189500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1287360000, + "value": 2374500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1287446400, + "value": 3601500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1287532800, + "value": 4608000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1287619200, + "value": 6166500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1287705600, + "value": 2374500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1287964800, + "value": 1737000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1288051200, + "value": 9744000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1288137600, + "value": 0.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1294272000, + "value": 28846500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1294358400, + "value": 33460500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1294617600, + "value": 19849500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1294704000, + "value": 25282500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1294790400, + "value": 13564500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1294876800, + "value": 10503000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1294963200, + "value": 17412000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1295308800, + "value": 23950500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1295395200, + "value": 35040000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1295481600, + "value": 33759000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1295568000, + "value": 18036000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1295827200, + "value": 24352500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1295913600, + "value": 18924000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1296000000, + "value": 16050000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1296086400, + "value": 12790500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1296172800, + "value": 15490500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1296432000, + "value": 11974500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1296518400, + "value": 10473000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1296604800, + "value": 8454000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1296691200, + "value": 7540500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1296777600, + "value": 8067000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1297036800, + "value": 13209000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297123200, + "value": 51768000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1297209600, + "value": 37779000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297296000, + "value": 12324000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1297382400, + "value": 9424500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297641600, + "value": 18984000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297728000, + "value": 14146500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297814400, + "value": 60928500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1297900800, + "value": 38383500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297987200, + "value": 35118000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1298332800, + "value": 30369000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1298419200, + "value": 23451000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1298505600, + "value": 15372000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1298592000, + "value": 19941000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1298851200, + "value": 15580500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1298937600, + "value": 16422000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1299024000, + "value": 9826500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1299110400, + "value": 9478500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1299196800, + "value": 22677000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1299456000, + "value": 30210000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1299542400, + "value": 20715000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1299628800, + "value": 13692000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1299715200, + "value": 14049000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1299801600, + "value": 13821000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300060800, + "value": 17205000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300147200, + "value": 19534500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1300233600, + "value": 17208000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300320000, + "value": 12612000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300406400, + "value": 10195500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300665600, + "value": 6057000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300752000, + "value": 8097000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300838400, + "value": 5943000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1300924800, + "value": 6564000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1301011200, + "value": 8416500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1301270400, + "value": 15309000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1301356800, + "value": 11188500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1301443200, + "value": 18003000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1301529600, + "value": 163869000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1301616000, + "value": 42078000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1301875200, + "value": 38563500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1301961600, + "value": 46600500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1302048000, + "value": 18907500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1302134400, + "value": 41496000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1302220800, + "value": 28378500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1302480000, + "value": 20121000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1302566400, + "value": 20044500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1302652800, + "value": 17970000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1302739200, + "value": 14481000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1302825600, + "value": 13975500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1303084800, + "value": 15267000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1303171200, + "value": 8127000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1303257600, + "value": 12396000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1303344000, + "value": 19473000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1303689600, + "value": 11760000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1303776000, + "value": 20268000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1303862400, + "value": 14770500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1303948800, + "value": 23356500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1304035200, + "value": 9780000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1304294400, + "value": 11614500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1304380800, + "value": 13510500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1304467200, + "value": 15252000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1304553600, + "value": 17584500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1304640000, + "value": 13941000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1304899200, + "value": 13521000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1304985600, + "value": 22632000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1305072000, + "value": 14250000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1305158400, + "value": 9286500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1305244800, + "value": 9783000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1305504000, + "value": 11152500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1305590400, + "value": 18295500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1305676800, + "value": 10804500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1305763200, + "value": 38518500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1305849600, + "value": 12024000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1306108800, + "value": 12774000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1306195200, + "value": 9003000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1306281600, + "value": 69592500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1306368000, + "value": 48706500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1306454400, + "value": 24933000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1306800000, + "value": 48790500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1306886400, + "value": 22666500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1306972800, + "value": 14418000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1307059200, + "value": 92074500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1307318400, + "value": 34503000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1307404800, + "value": 17590500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1307491200, + "value": 25230000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1307577600, + "value": 23793000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1307664000, + "value": 22432500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1307923200, + "value": 25342500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1308009600, + "value": 23337000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308096000, + "value": 19891500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308182400, + "value": 26997000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308268800, + "value": 25465500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308528000, + "value": 22590000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308614400, + "value": 22168500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1308700800, + "value": 21912000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308787200, + "value": 17314500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1308873600, + "value": 49531500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1309132800, + "value": 16056000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1309219200, + "value": 13153500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1309305600, + "value": 21499500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1309392000, + "value": 13981500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1309478400, + "value": 12570000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1309824000, + "value": 14746500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1309910400, + "value": 13030500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1309996800, + "value": 19233000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1310083200, + "value": 18363000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1310342400, + "value": 14514000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1310428800, + "value": 15451500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1310515200, + "value": 15813000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1310601600, + "value": 17193000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1310688000, + "value": 10407000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1310947200, + "value": 12657000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1311033600, + "value": 14488500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311120000, + "value": 45171000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311206400, + "value": 14995500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311292800, + "value": 8658000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311552000, + "value": 9960000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311638400, + "value": 11218500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311724800, + "value": 13981500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1311811200, + "value": 13846500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311897600, + "value": 13464000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1312156800, + "value": 16134000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1312243200, + "value": 21258000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1312329600, + "value": 25755000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1312416000, + "value": 44475000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1312502400, + "value": 28983000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1312761600, + "value": 38667000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1312848000, + "value": 19720500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1312934400, + "value": 22410000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313020800, + "value": 12295500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1313107200, + "value": 14947500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1313366400, + "value": 10935000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313452800, + "value": 7972500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313539200, + "value": 9489000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313625600, + "value": 15598500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313712000, + "value": 18744000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313971200, + "value": 14208000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1314057600, + "value": 12903000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1314144000, + "value": 10108500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1314230400, + "value": 10123500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1314316800, + "value": 11325000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1314576000, + "value": 11877000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1314662400, + "value": 5392500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1314748800, + "value": 12174000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1314835200, + "value": 12555000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1314921600, + "value": 11379000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1315267200, + "value": 11688000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1315353600, + "value": 6774000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1315440000, + "value": 6633000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1315526400, + "value": 9963000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1315785600, + "value": 8395500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1315872000, + "value": 10750500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1315958400, + "value": 12340500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316044800, + "value": 8277000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1316131200, + "value": 20959500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316390400, + "value": 17196000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316476800, + "value": 16471500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316563200, + "value": 14565000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1316649600, + "value": 11467500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316736000, + "value": 16702500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316995200, + "value": 13869000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1317081600, + "value": 9808500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1317168000, + "value": 10636500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1317254400, + "value": 12891000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1317340800, + "value": 19627500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1317600000, + "value": 15189000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1317686400, + "value": 17628000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1317772800, + "value": 17782500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1317859200, + "value": 24651000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1317945600, + "value": 19497000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1318204800, + "value": 12903000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1318291200, + "value": 8533500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1318377600, + "value": 16698000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1318464000, + "value": 15391500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1318550400, + "value": 20578500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1318809600, + "value": 11227500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1318896000, + "value": 14308500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1318982400, + "value": 11691000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1319068800, + "value": 14899500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1319155200, + "value": 14001000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1319414400, + "value": 13860000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1319500800, + "value": 9043500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1319587200, + "value": 7510500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1319673600, + "value": 12655500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1319760000, + "value": 18213000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1320019200, + "value": 16635000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1320105600, + "value": 9394500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1320192000, + "value": 12871500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1320278400, + "value": 36706500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1320364800, + "value": 43872000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1320624000, + "value": 18619500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1320710400, + "value": 15342000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1320796800, + "value": 14122500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1320883200, + "value": 11065500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1320969600, + "value": 56487000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1321228800, + "value": 18837000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1321315200, + "value": 13186500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1321401600, + "value": 26086500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1321488000, + "value": 20025000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1321574400, + "value": 13359000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1321833600, + "value": 15288000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1321920000, + "value": 10806000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1322006400, + "value": 6690000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1322179200, + "value": 3430500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1322438400, + "value": 10074000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1322524800, + "value": 8560500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1322611200, + "value": 11122500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1322697600, + "value": 14413500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1322784000, + "value": 10338000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1323043200, + "value": 15996000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1323129600, + "value": 14083500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1323216000, + "value": 9607500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323302400, + "value": 48607500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323388800, + "value": 18294000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323648000, + "value": 11262000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323734400, + "value": 14616000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323820800, + "value": 17221500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323907200, + "value": 10383000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1323993600, + "value": 14853000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1324252800, + "value": 14272500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1324339200, + "value": 12039000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1324425600, + "value": 25294500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1324512000, + "value": 14973000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1324598400, + "value": 8787000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1324944000, + "value": 10927500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325030400, + "value": 8535000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325116800, + "value": 7056000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325203200, + "value": 4962000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1325548800, + "value": 13644000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325635200, + "value": 9174000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325721600, + "value": 14919000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325808000, + "value": 14559000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1326067200, + "value": 13207500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1326153600, + "value": 9924000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1326240000, + "value": 9738000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1326326400, + "value": 9886500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1326412800, + "value": 80587500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1326758400, + "value": 68454000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1326844800, + "value": 17664000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1326931200, + "value": 18375000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1327017600, + "value": 9475500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1327276800, + "value": 8737500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1327363200, + "value": 12381000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1327449600, + "value": 8737500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1327536000, + "value": 17626500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1327622400, + "value": 10332000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1327881600, + "value": 10779000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1327968000, + "value": 13840500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1328054400, + "value": 7369500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1328140800, + "value": 11790000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1328227200, + "value": 11242500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1328486400, + "value": 9498000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1328572800, + "value": 14199000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1328659200, + "value": 9072000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1328745600, + "value": 17317500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1328832000, + "value": 27693000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1329091200, + "value": 16954500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1329177600, + "value": 26682000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1329264000, + "value": 40675500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1329350400, + "value": 32883000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1329436800, + "value": 20112000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1329782400, + "value": 16618500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1329868800, + "value": 23985000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1329955200, + "value": 11665500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1330041600, + "value": 14241000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1330300800, + "value": 8934000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1330387200, + "value": 9070500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1330473600, + "value": 7635000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1330560000, + "value": 8875500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1330646400, + "value": 7927500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1330905600, + "value": 6894000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1330992000, + "value": 7669500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331078400, + "value": 5398500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331164800, + "value": 8953500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331251200, + "value": 22969500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1331510400, + "value": 28791000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1331596800, + "value": 14412000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331683200, + "value": 12595500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331769600, + "value": 8461500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331856000, + "value": 10819500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1332115200, + "value": 14856000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1332201600, + "value": 8392500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1332288000, + "value": 8650500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1332374400, + "value": 7563000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1332460800, + "value": 16336500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1332720000, + "value": 46437000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1332806400, + "value": 36403500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1332892800, + "value": 13975500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1332979200, + "value": 10455000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1333065600, + "value": 11152500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1333324800, + "value": 13074000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1333411200, + "value": 16107000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1333497600, + "value": 66337500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1333584000, + "value": 21292500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1333929600, + "value": 24487500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1334016000, + "value": 25423500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1334102400, + "value": 16089000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1334188800, + "value": 14713500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1334275200, + "value": 9622500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1334534400, + "value": 15481500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1334620800, + "value": 16413000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1334707200, + "value": 12088500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1334793600, + "value": 11424000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1334880000, + "value": 12180000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1335139200, + "value": 13161000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1335225600, + "value": 9708000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1335312000, + "value": 10542000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1335398400, + "value": 6229500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1335484800, + "value": 8539500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1335744000, + "value": 6088500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1335830400, + "value": 9690000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1335916800, + "value": 7291500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1336003200, + "value": 12472500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1336089600, + "value": 18291000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1336348800, + "value": 16948500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1336435200, + "value": 45520500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1336521600, + "value": 28653000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1336608000, + "value": 82389000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1336694400, + "value": 18039000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1336953600, + "value": 20400000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337040000, + "value": 22992000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337126400, + "value": 18601500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337212800, + "value": 16810500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337299200, + "value": 22939500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337558400, + "value": 21505500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1337644800, + "value": 35101500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1337731200, + "value": 18036000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337817600, + "value": 15760500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337904000, + "value": 11173500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1338249600, + "value": 23724000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1338336000, + "value": 19323000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1338422400, + "value": 15906000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1338508800, + "value": 13029000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1338768000, + "value": 15243000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1338854400, + "value": 9331500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1338940800, + "value": 13300500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1339027200, + "value": 7242000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1339113600, + "value": 12514500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1339372800, + "value": 9043500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1339459200, + "value": 8221500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1339545600, + "value": 12510000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1339632000, + "value": 12885000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1339718400, + "value": 8910000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1339977600, + "value": 17913000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340064000, + "value": 13380000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1340150400, + "value": 50334000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1340236800, + "value": 25275000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340323200, + "value": 44323500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1340582400, + "value": 22111500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340668800, + "value": 37164000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340755200, + "value": 14725500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340841600, + "value": 13173000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340928000, + "value": 15910500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1341187200, + "value": 19246500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1341273600, + "value": 13993500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1341446400, + "value": 18108000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1341532800, + "value": 10950000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1341792000, + "value": 13303500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1341878400, + "value": 10500000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1341964800, + "value": 8515500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1342051200, + "value": 15897000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1342137600, + "value": 19225500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1342396800, + "value": 25431000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1342483200, + "value": 37756500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1342569600, + "value": 42406500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1342656000, + "value": 21282000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1342742400, + "value": 23131500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343001600, + "value": 20463000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343088000, + "value": 21778500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343174400, + "value": 37428000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343260800, + "value": 33084000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343347200, + "value": 24735000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1343606400, + "value": 29761500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343692800, + "value": 20505000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1343779200, + "value": 21585000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343865600, + "value": 19086000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343952000, + "value": 17092500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1344211200, + "value": 17017500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1344297600, + "value": 28341000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1344384000, + "value": 17298000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1344470400, + "value": 9636000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1344556800, + "value": 10066500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1344816000, + "value": 12691500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1344902400, + "value": 11076000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1344988800, + "value": 7506000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1345075200, + "value": 8028000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1345161600, + "value": 7033500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1345420800, + "value": 13743000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1345507200, + "value": 10840500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1345593600, + "value": 10396500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1345680000, + "value": 21502500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1345766400, + "value": 20377500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1346025600, + "value": 18559500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1346112000, + "value": 20662500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1346198400, + "value": 12213000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1346284800, + "value": 9609000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1346371200, + "value": 7690500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1346716800, + "value": 10840500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1346803200, + "value": 9276000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1346889600, + "value": 12036000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1346976000, + "value": 13315500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1347235200, + "value": 20403000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1347321600, + "value": 12136500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1347408000, + "value": 16017000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1347494400, + "value": 20878500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1347580800, + "value": 21982500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1347840000, + "value": 46476000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1347926400, + "value": 26220000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348012800, + "value": 15385500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348099200, + "value": 10585500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348185600, + "value": 24996000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348444800, + "value": 18555000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1348531200, + "value": 78354000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348617600, + "value": 22567500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348704000, + "value": 26001000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1348790400, + "value": 64419000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1349049600, + "value": 12910500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1349136000, + "value": 10389000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1349222400, + "value": 12870000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1349308800, + "value": 18454500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1349395200, + "value": 12109500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1349654400, + "value": 13128000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1349740800, + "value": 17464500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1349827200, + "value": 7413000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1349913600, + "value": 6646500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1350000000, + "value": 13588500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1350259200, + "value": 20388000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1350345600, + "value": 7063500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1350432000, + "value": 9720000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1350518400, + "value": 9792000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1350604800, + "value": 10015500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1350864000, + "value": 5101500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1350950400, + "value": 8620500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1351036800, + "value": 12669000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1351123200, + "value": 8308500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1351209600, + "value": 6726000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1351641600, + "value": 11193000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1351728000, + "value": 14761500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1351814400, + "value": 14913000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1352073600, + "value": 29164500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1352160000, + "value": 34033500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1352246400, + "value": 25089000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1352332800, + "value": 18096000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1352419200, + "value": 12726000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1352678400, + "value": 8142000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1352764800, + "value": 14413500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1352851200, + "value": 12508500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1352937600, + "value": 13594500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1353024000, + "value": 12493500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1353283200, + "value": 19404000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1353369600, + "value": 13012500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1353456000, + "value": 12994500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1353628800, + "value": 6234000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1353888000, + "value": 6823500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1353974400, + "value": 10090500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1354060800, + "value": 22344000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1354147200, + "value": 15483000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1354233600, + "value": 20268000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1354492800, + "value": 26139000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1354579200, + "value": 18213000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1354665600, + "value": 7434000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1354752000, + "value": 9687000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1354838400, + "value": 9814500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355097600, + "value": 13413000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355184000, + "value": 22396500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355270400, + "value": 29326500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355356800, + "value": 31737000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1355443200, + "value": 14131500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355702400, + "value": 12079500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355788800, + "value": 23095500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355875200, + "value": 18744000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1355961600, + "value": 13641000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1356048000, + "value": 21853500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1356307200, + "value": 5562000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1356480000, + "value": 8796000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1356566400, + "value": 8053500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1356652800, + "value": 6033000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1356912000, + "value": 8590500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1357084800, + "value": 16518000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1357171200, + "value": 10825500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363219200, + "value": 29146500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363305600, + "value": 42304500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363564800, + "value": 17931000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363651200, + "value": 15828000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363737600, + "value": 16198500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1363824000, + "value": 15042000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363910400, + "value": 6421500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1364169600, + "value": 34368000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1364256000, + "value": 22050000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1364342400, + "value": 18799500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1364428800, + "value": 11656500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1364774400, + "value": 201547500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1364860800, + "value": 94021500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1364947200, + "value": 82765500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1365033600, + "value": 32724000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1365120000, + "value": 20602500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1365379200, + "value": 23578500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1365465600, + "value": 22929000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1365552000, + "value": 29934000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1365638400, + "value": 50419500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1365724800, + "value": 43282500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1365984000, + "value": 23191500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366070400, + "value": 41016000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366156800, + "value": 29680500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366243200, + "value": 45765000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366329600, + "value": 43929000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366588800, + "value": 56449500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366675200, + "value": 53149500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366761600, + "value": 36709500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1366848000, + "value": 40113000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366934400, + "value": 52822500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1367193600, + "value": 52944000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1367280000, + "value": 79696500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1367366400, + "value": 37645500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1367452800, + "value": 44152500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1367539200, + "value": 49215000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1367798400, + "value": 63787500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1367884800, + "value": 145771500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1367971200, + "value": 97968000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368057600, + "value": 416440500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368144000, + "value": 362424000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368403200, + "value": 324441000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368489600, + "value": 540166500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1368576000, + "value": 245694000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368662400, + "value": 314040000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368748800, + "value": 275742000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1369008000, + "value": 116409000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1369094400, + "value": 129556500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1369180800, + "value": 124705500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1369267200, + "value": 173866500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1369353600, + "value": 234340500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1369699200, + "value": 286362000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1369785600, + "value": 365599500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1369872000, + "value": 232486500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1369958400, + "value": 216676500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1370217600, + "value": 279295500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1370304000, + "value": 128937000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1370390400, + "value": 178788000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1370476800, + "value": 139008000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1370563200, + "value": 154503000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1370822400, + "value": 134262000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1370908800, + "value": 107361000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1370995200, + "value": 133843500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1371081600, + "value": 87330000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1371168000, + "value": 95694000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1371427200, + "value": 103032000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1371513600, + "value": 129123000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1371600000, + "value": 125938500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1371686400, + "value": 148359000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1371772800, + "value": 171208500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1372032000, + "value": 104620500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1372118400, + "value": 85672500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1372204800, + "value": 95920500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1372291200, + "value": 127455000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1372377600, + "value": 84156000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1372636800, + "value": 159403500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1372723200, + "value": 177274500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1372809600, + "value": 70027500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1372982400, + "value": 99724500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373241600, + "value": 113974500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373328000, + "value": 121951500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373414400, + "value": 81409500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373500800, + "value": 107755500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373587200, + "value": 166258500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373846400, + "value": 144150000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1373932800, + "value": 469743000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1374019200, + "value": 379722000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1374105600, + "value": 166929000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1374192000, + "value": 85578000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1374451200, + "value": 143059500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1374537600, + "value": 111156000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1374624000, + "value": 99454500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1374710400, + "value": 76276500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1374796800, + "value": 139750500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375056000, + "value": 141123000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375142400, + "value": 190620000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1375228800, + "value": 92283000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375315200, + "value": 77371500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375401600, + "value": 90321000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375660800, + "value": 148099500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375747200, + "value": 133714500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1375833600, + "value": 264238500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375920000, + "value": 387346500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1376006400, + "value": 129208500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1376265600, + "value": 215790000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1376352000, + "value": 124554000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1376438400, + "value": 166930500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1376524800, + "value": 147001500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1376611200, + "value": 101158500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1376870400, + "value": 116574000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1376956800, + "value": 90135000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1377043200, + "value": 89446500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1377129600, + "value": 151780500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1377216000, + "value": 187560000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1377475200, + "value": 350391000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1377561600, + "value": 248074500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1377648000, + "value": 209382000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1377734400, + "value": 134815500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1377820800, + "value": 161145000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1378166400, + "value": 174235500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1378252800, + "value": 164263500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1378339200, + "value": 95404500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1378425600, + "value": 122739000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1378684800, + "value": 207159000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1378771200, + "value": 128748000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1378857600, + "value": 83227500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1378944000, + "value": 90027000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1379030400, + "value": 75963000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1379289600, + "value": 109735500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1379376000, + "value": 78295500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1379462400, + "value": 78660000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1379548800, + "value": 224395500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1379635200, + "value": 194923500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1379894400, + "value": 119229000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1379980800, + "value": 90906000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1380067200, + "value": 117744000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1380153600, + "value": 95916000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1380240000, + "value": 84856500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1380499200, + "value": 129867000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1380585600, + "value": 112054500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1380672000, + "value": 298063500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1380758400, + "value": 342652500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1380844800, + "value": 209007000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1381104000, + "value": 166999500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1381190400, + "value": 198939000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1381276800, + "value": 220770000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1381363200, + "value": 129027000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1381449600, + "value": 119569500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1381708800, + "value": 112860000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1381795200, + "value": 159427500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1381881600, + "value": 119692500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1381968000, + "value": 97383000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382054400, + "value": 85054500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382313600, + "value": 165351000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382400000, + "value": 166023000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382486400, + "value": 190072500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382572800, + "value": 158160000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1382659200, + "value": 110428500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382918400, + "value": 112183500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1383004800, + "value": 205161000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1383091200, + "value": 121746000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1383177600, + "value": 131301000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1383264000, + "value": 104220000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1383523200, + "value": 188814000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1383609600, + "value": 319066500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1383696000, + "value": 442978500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1383782400, + "value": 319876500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1383868800, + "value": 316498500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1384128000, + "value": 202396500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1384214400, + "value": 213652500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384300800, + "value": 175584000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384387200, + "value": 175161000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384473600, + "value": 143160000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384732800, + "value": 333507000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384819200, + "value": 282606000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1384905600, + "value": 199353000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384992000, + "value": 172042500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1385078400, + "value": 162112500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1385337600, + "value": 150082500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1385424000, + "value": 201268500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1385510400, + "value": 178762500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1385683200, + "value": 142236000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1385942400, + "value": 110358000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1386028800, + "value": 374767500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1386115200, + "value": 191470500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1386201600, + "value": 134154000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1386288000, + "value": 115554000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1386547200, + "value": 150270000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1386633600, + "value": 172441500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1386720000, + "value": 111934500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1386806400, + "value": 173362500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1386892800, + "value": 174357000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1387152000, + "value": 109501500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1387238400, + "value": 174391500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1387324800, + "value": 182674500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1387411200, + "value": 202656000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1387497600, + "value": 123055500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1387756800, + "value": 88005000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1387843200, + "value": 159850500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1388016000, + "value": 118942500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1388102400, + "value": 93999000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1388361600, + "value": 74286000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1388448000, + "value": 72408000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1388620800, + "value": 102918000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1388707200, + "value": 78061500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1388966400, + "value": 89131500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1389052800, + "value": 83844000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1389139200, + "value": 101304000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1389225600, + "value": 88711500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1389312000, + "value": 126364500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1389571200, + "value": 84717000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1389657600, + "value": 379350000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1389744000, + "value": 274327500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1389830400, + "value": 160425000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1389916800, + "value": 124987500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1390262400, + "value": 130549500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1390348800, + "value": 90628500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1390435200, + "value": 104628000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1390521600, + "value": 101746500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1390780800, + "value": 115896000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1390867200, + "value": 80989500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1390953600, + "value": 77025000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1391040000, + "value": 107673000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1391126400, + "value": 84319500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1391385600, + "value": 89644500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1391472000, + "value": 62623500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1391558400, + "value": 93388500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1391644800, + "value": 73384500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1391731200, + "value": 117148500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1391990400, + "value": 164770500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1392076800, + "value": 140068500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1392163200, + "value": 66439500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1392249600, + "value": 105280500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1392336000, + "value": 80040000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1392681600, + "value": 117477000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1392768000, + "value": 202486500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1392854400, + "value": 231760500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1392940800, + "value": 102037500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1393200000, + "value": 108903000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1393286400, + "value": 420369000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1393372800, + "value": 312486000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1393459200, + "value": 223077000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1393545600, + "value": 180037500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1393804800, + "value": 165219000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1393891200, + "value": 108879000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1393977600, + "value": 72594000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394064000, + "value": 94290000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394150400, + "value": 95437500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394409600, + "value": 97983000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394496000, + "value": 109213500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394582400, + "value": 123525000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1394668800, + "value": 79090500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394755200, + "value": 103077000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395014400, + "value": 76896000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1395100800, + "value": 78610500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1395187200, + "value": 62955000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395273600, + "value": 47638500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395360000, + "value": 104617500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395619200, + "value": 142279500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395705600, + "value": 99859500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395792000, + "value": 87933000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395878400, + "value": 120972000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395964800, + "value": 125509500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1396224000, + "value": 106504500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1396310400, + "value": 93630000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1396396800, + "value": 138853500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1396483200, + "value": 140214000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1396569600, + "value": 146892000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1396828800, + "value": 126373500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1396915200, + "value": 87385500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1397001600, + "value": 65019000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1397088000, + "value": 89880000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1397174400, + "value": 115252500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1397433600, + "value": 96993000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1397520000, + "value": 174859500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1397606400, + "value": 87391500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1397692800, + "value": 75393000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398038400, + "value": 67105500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398124800, + "value": 123586500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398211200, + "value": 91764000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1398297600, + "value": 67018500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1398384000, + "value": 88900500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1398643200, + "value": 90400500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398729600, + "value": 74610000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398816000, + "value": 55795500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398902400, + "value": 68469000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1398988800, + "value": 51756000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1399248000, + "value": 62872500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1399334400, + "value": 71347500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1399420800, + "value": 127287000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1399507200, + "value": 257352000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1399593600, + "value": 109512000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1399852800, + "value": 91471500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1399939200, + "value": 91531500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400025600, + "value": 70441500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400112000, + "value": 79266000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1400198400, + "value": 57685500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400457600, + "value": 59709000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400544000, + "value": 72919500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1400630400, + "value": 67347000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400716800, + "value": 77029500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400803200, + "value": 49992000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1401148800, + "value": 68053500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1401235200, + "value": 68530500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1401321600, + "value": 46740000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1401408000, + "value": 72352500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1401667200, + "value": 59125500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1401753600, + "value": 50698500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1401840000, + "value": 44190000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1401926400, + "value": 50929500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1402012800, + "value": 39301500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1402272000, + "value": 34545000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1402358400, + "value": 43896000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1402444800, + "value": 52020000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1402531200, + "value": 78660000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1402617600, + "value": 91671000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1402876800, + "value": 171028500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1402963200, + "value": 169213500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1403049600, + "value": 89343000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1403136000, + "value": 114487500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1403222400, + "value": 63924000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1403481600, + "value": 100888500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1403568000, + "value": 104314500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1403654400, + "value": 74611500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1403740800, + "value": 65886000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1403827200, + "value": 75367500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1404086400, + "value": 61995000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1404172800, + "value": 53196000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1404259200, + "value": 102298500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1404345600, + "value": 66034500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1404691200, + "value": 74419500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1404777600, + "value": 101098500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1404864000, + "value": 50980500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1404950400, + "value": 63258000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1405036800, + "value": 41347500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1405296000, + "value": 92257500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1405382400, + "value": 71305500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1405468800, + "value": 51513000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1405555200, + "value": 57648000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1405641600, + "value": 53826000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1405900800, + "value": 49165500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1405987200, + "value": 35058000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1406073600, + "value": 39615000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1406160000, + "value": 39552000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1406246400, + "value": 39411000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1406505600, + "value": 84943500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1406592000, + "value": 41269500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1406678400, + "value": 60807000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1406764800, + "value": 96696000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1406851200, + "value": 153400500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407110400, + "value": 75952500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407196800, + "value": 67884000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407283200, + "value": 118677000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407369600, + "value": 95010000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407456000, + "value": 64384500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1407715200, + "value": 101056500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407801600, + "value": 74634000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1407888000, + "value": 88335000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407974400, + "value": 51877500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1408060800, + "value": 47685000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1408320000, + "value": 71943000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1408406400, + "value": 66840000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1408492800, + "value": 38166000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1408579200, + "value": 37018500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1408665600, + "value": 35620500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1408924800, + "value": 55287000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409011200, + "value": 47110500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1409097600, + "value": 38287500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409184000, + "value": 36576000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409270400, + "value": 82822500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409616000, + "value": 122932500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409702400, + "value": 83658000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1409788800, + "value": 104331000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409875200, + "value": 136144500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410134400, + "value": 69922500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1410220800, + "value": 57493500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410307200, + "value": 46741500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1410393600, + "value": 48127500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410480000, + "value": 41457000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410739200, + "value": 209746500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410825600, + "value": 106606500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1410912000, + "value": 65944500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410998400, + "value": 47353500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1411084800, + "value": 87552000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1411344000, + "value": 104559000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1411430400, + "value": 73747500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1411516800, + "value": 48142500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1411603200, + "value": 61905000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1411689600, + "value": 49257000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1411948800, + "value": 61668000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1412035200, + "value": 54453000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1412121600, + "value": 75615000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1412208000, + "value": 118692000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1412294400, + "value": 70530000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1412553600, + "value": 102403500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1412640000, + "value": 59218500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1412726400, + "value": 63711000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1412812800, + "value": 94407000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1412899200, + "value": 167515500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1413158400, + "value": 145405500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1413244800, + "value": 89052000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1413331200, + "value": 116542500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1413417600, + "value": 66036000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1413504000, + "value": 146335500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1413763200, + "value": 43081500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1413849600, + "value": 49818000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1413936000, + "value": 50922000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1414022400, + "value": 44418000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1414108800, + "value": 44964000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1414368000, + "value": 122512500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1414454400, + "value": 136755000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1414540800, + "value": 64392000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1414627200, + "value": 41557500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1414713600, + "value": 95433000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1414972800, + "value": 53284500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1415059200, + "value": 45828000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1415145600, + "value": 110295000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1415232000, + "value": 199843500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1415318400, + "value": 66370500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1415577600, + "value": 60531000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1415664000, + "value": 104346000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1415750400, + "value": 74176500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1415836800, + "value": 83121000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1415923200, + "value": 80746500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1416182400, + "value": 106527000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1416268800, + "value": 59107500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1416355200, + "value": 102915000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1416441600, + "value": 46186500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1416528000, + "value": 98868000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1416787200, + "value": 62733000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1416873600, + "value": 41280000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1416960000, + "value": 25401000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1417132800, + "value": 26473500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417392000, + "value": 111850500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417478400, + "value": 77887500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417564800, + "value": 68868000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417651200, + "value": 50370000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417737600, + "value": 79653000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417996800, + "value": 121050000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1418083200, + "value": 124179000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1418169600, + "value": 96352500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1418256000, + "value": 86691000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1418342400, + "value": 93274500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1418601600, + "value": 67555500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1418688000, + "value": 109290000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1418774400, + "value": 95917500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1418860800, + "value": 95482500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1418947200, + "value": 91818000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1419206400, + "value": 63783000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1419292800, + "value": 58047000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1419379200, + "value": 17316000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1419552000, + "value": 43195500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1419811200, + "value": 35398500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1419897600, + "value": 38286000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1419984000, + "value": 30895500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1420156800, + "value": 60666000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1420416000, + "value": 68766000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1420502400, + "value": 81739500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1420588800, + "value": 38506500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1420675200, + "value": 43804500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1420761600, + "value": 60375000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1421020800, + "value": 77257500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1421107200, + "value": 56380500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1421193600, + "value": 149176500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1421280000, + "value": 68364000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1421366400, + "value": 46059000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1421712000, + "value": 57217500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1421798400, + "value": 54037500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1421884800, + "value": 53611500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1421971200, + "value": 43978500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1422230400, + "value": 41752500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1422316800, + "value": 35581500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1422403200, + "value": 40210500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1422489600, + "value": 42373500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1422576000, + "value": 39295500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1422835200, + "value": 54160500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1422921600, + "value": 62689500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1423008000, + "value": 40846500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1423094400, + "value": 45030000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1423180800, + "value": 41568000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1423440000, + "value": 45162000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1423526400, + "value": 70638000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1423612800, + "value": 122290500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1423699200, + "value": 202587000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1423785600, + "value": 77947500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1424131200, + "value": 48615000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1424217600, + "value": 66528000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1424304000, + "value": 65745000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1424390400, + "value": 78301500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1424649600, + "value": 112644000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1424736000, + "value": 87600000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1424822400, + "value": 52257000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1424908800, + "value": 86088000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1424995200, + "value": 50161500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1425254400, + "value": 101004000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1425340800, + "value": 57592500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1425427200, + "value": 57156000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1425513600, + "value": 65712000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1425600000, + "value": 87417000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1425859200, + "value": 87274500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1425945600, + "value": 69730500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1426032000, + "value": 64245000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1426118400, + "value": 53023500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1426204800, + "value": 67867500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1432598400, + "value": 43978500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1432684800, + "value": 43153500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1432771200, + "value": 44253000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1432857600, + "value": 49329570.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433116800, + "value": 31530225.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433203200, + "value": 26885745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433289600, + "value": 22884615.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1433376000, + "value": 30814980.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433462400, + "value": 40628865.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1433721600, + "value": 65460270.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1433808000, + "value": 32805165.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433894400, + "value": 43567065.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433980800, + "value": 26028345.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1434067200, + "value": 18391890.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1434326400, + "value": 27654165.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1434412800, + "value": 24904965.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1434499200, + "value": 70233015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1434585600, + "value": 35891805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1434672000, + "value": 32618625.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1434931200, + "value": 60604575.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1435017600, + "value": 50767455.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1435104000, + "value": 29859885.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1435190400, + "value": 37257870.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1435276800, + "value": 46306020.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1435536000, + "value": 44892210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1435622400, + "value": 40032600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1435708800, + "value": 26522145.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1435795200, + "value": 89596185.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1436140800, + "value": 51407370.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1436227200, + "value": 76788555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1436313600, + "value": 77151690.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1436400000, + "value": 42350805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1436486400, + "value": 32995410.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1436745600, + "value": 37339440.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1436832000, + "value": 23937300.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1436918400, + "value": 24810810.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1437004800, + "value": 19932795.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1437091200, + "value": 64817235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1437350400, + "value": 62984370.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1437436800, + "value": 76316850.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1437523200, + "value": 38555175.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1437609600, + "value": 28486500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1437696000, + "value": 37048095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1437955200, + "value": 60568065.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438041600, + "value": 48846450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1438128000, + "value": 34009380.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438214400, + "value": 26370390.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1438300800, + "value": 27594270.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438560000, + "value": 32603745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438646400, + "value": 28507875.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1438732800, + "value": 68174265.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438819200, + "value": 189249225.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438905600, + "value": 67028235.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1439164800, + "value": 53537460.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1439251200, + "value": 52796445.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1439337600, + "value": 46502790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1439424000, + "value": 58656540.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1439510400, + "value": 53596260.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1439769600, + "value": 88423530.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1439856000, + "value": 53375535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1439942400, + "value": 46379340.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1440028800, + "value": 62651175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1440115200, + "value": 83421645.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1440374400, + "value": 120938985.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1440460800, + "value": 53007090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1440547200, + "value": 63997230.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1440633600, + "value": 98315805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1440720000, + "value": 71507475.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1440979200, + "value": 122503890.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1441065600, + "value": 71484615.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1441152000, + "value": 61671885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1441238400, + "value": 53779770.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1441324800, + "value": 47893560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1441670400, + "value": 40088835.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1441756800, + "value": 43224345.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1441843200, + "value": 33505485.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1441929600, + "value": 30261885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442188800, + "value": 37000215.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442275200, + "value": 37735680.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442361600, + "value": 53034555.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442448000, + "value": 44743740.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442534400, + "value": 46208550.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1442793600, + "value": 78873465.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442880000, + "value": 47461185.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1442966400, + "value": 33568950.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1443052800, + "value": 43135980.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1443139200, + "value": 49134375.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1443398400, + "value": 127229130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1443484800, + "value": 47435895.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1443571200, + "value": 62164515.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1443657600, + "value": 56504925.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1443744000, + "value": 54307740.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1444003200, + "value": 48077100.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444089600, + "value": 65567505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444176000, + "value": 89247075.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444262400, + "value": 77791965.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444348800, + "value": 79845975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444608000, + "value": 49668135.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444694400, + "value": 67942260.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1444780800, + "value": 39930165.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444867200, + "value": 36025155.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1444953600, + "value": 56215725.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1445212800, + "value": 31590870.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1445299200, + "value": 197281935.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1445385600, + "value": 53924745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1445472000, + "value": 35633430.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1445558400, + "value": 54594090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1445817600, + "value": 42132645.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1445904000, + "value": 45352560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1445990400, + "value": 34321920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1446076800, + "value": 23203560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1446163200, + "value": 55364160.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1446422400, + "value": 49048695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1446508800, + "value": 81725865.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1446595200, + "value": 164936790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1446681600, + "value": 57396345.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1446768000, + "value": 62338770.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1447027200, + "value": 49130655.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447113600, + "value": 58650945.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447200000, + "value": 42948015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1447286400, + "value": 37479450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447372800, + "value": 42982740.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447632000, + "value": 37396095.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1447718400, + "value": 27685005.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447804800, + "value": 36768795.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1447891200, + "value": 30967155.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447977600, + "value": 57603405.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1448236800, + "value": 31581555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1448323200, + "value": 31788765.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1448409600, + "value": 51472185.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1448582400, + "value": 24905370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1448841600, + "value": 33631095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1448928000, + "value": 47844060.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1449014400, + "value": 37548885.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1449100800, + "value": 37645980.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1449187200, + "value": 32882220.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1449446400, + "value": 40632900.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1449532800, + "value": 34195545.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1449619200, + "value": 39684090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1449705600, + "value": 26159520.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1449792000, + "value": 42714765.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450051200, + "value": 35973795.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450137600, + "value": 28405860.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450224000, + "value": 64146990.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1450310400, + "value": 40449015.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450396800, + "value": 38668740.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450656000, + "value": 24367620.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1450742400, + "value": 25559175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450828800, + "value": 18879060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450915200, + "value": 8807865.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1451260800, + "value": 22891215.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1451347200, + "value": 31348185.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1451433600, + "value": 47373570.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1451520000, + "value": 35687385.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1451865600, + "value": 84687525.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1451952000, + "value": 39873360.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1452038400, + "value": 45644085.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1452124800, + "value": 44442075.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1452211200, + "value": 42351450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1452470400, + "value": 51419670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1452556800, + "value": 37346910.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1452643200, + "value": 45447780.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1452729600, + "value": 78481125.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1452816000, + "value": 65273250.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1453161600, + "value": 49873515.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453248000, + "value": 71760615.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453334400, + "value": 39395805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1453420800, + "value": 36423510.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453680000, + "value": 32746890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453766400, + "value": 61887765.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453852800, + "value": 43610685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453939200, + "value": 58177335.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454025600, + "value": 36289005.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1454284800, + "value": 67881600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1454371200, + "value": 72660375.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454457600, + "value": 102199185.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454544000, + "value": 55556535.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454630400, + "value": 121217820.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454889600, + "value": 117036630.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454976000, + "value": 111349140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1455062400, + "value": 114878790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1455148800, + "value": 187276440.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1455235200, + "value": 95316150.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1455580800, + "value": 72728055.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1455667200, + "value": 76193205.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1455753600, + "value": 49621590.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1455840000, + "value": 36965385.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456099200, + "value": 66003810.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456185600, + "value": 69213390.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456272000, + "value": 69879090.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456358400, + "value": 67942905.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456444800, + "value": 78149805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456704000, + "value": 115657890.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456790400, + "value": 87616590.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1456876800, + "value": 62262495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456963200, + "value": 63760695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1457049600, + "value": 86046540.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1457308800, + "value": 67046235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1457395200, + "value": 53949945.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1457481600, + "value": 41877810.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1457568000, + "value": 67059180.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1457654400, + "value": 42624135.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1457913600, + "value": 50652270.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458000000, + "value": 80336310.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458086400, + "value": 45207405.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458172800, + "value": 48334365.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458259200, + "value": 59588040.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458518400, + "value": 66283815.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458604800, + "value": 53471670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1458691200, + "value": 62026500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1458777600, + "value": 64368510.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459123200, + "value": 49788900.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459209600, + "value": 51507480.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1459296000, + "value": 52204845.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1459382400, + "value": 103025805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459468800, + "value": 205378890.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459728000, + "value": 169088775.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1459814400, + "value": 127513170.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459900800, + "value": 143856135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459987200, + "value": 111640635.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1460073600, + "value": 92146575.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1460332800, + "value": 119938500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1460419200, + "value": 73495020.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1460505600, + "value": 63754965.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1460592000, + "value": 53539065.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1460678400, + "value": 47150220.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1460937600, + "value": 56465895.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461024000, + "value": 80956815.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461110400, + "value": 67998930.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1461196800, + "value": 36160305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461283200, + "value": 50184240.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1461542400, + "value": 46018590.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461628800, + "value": 41643750.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461715200, + "value": 41368650.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461801600, + "value": 31875060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461888000, + "value": 67850040.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462147200, + "value": 48718935.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1462233600, + "value": 54099555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462320000, + "value": 101952825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462406400, + "value": 140309865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462492800, + "value": 74756025.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1462752000, + "value": 62450460.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462838400, + "value": 51794940.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462924800, + "value": 61181340.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1463011200, + "value": 46360335.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1463097600, + "value": 35990505.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1463356800, + "value": 37083990.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1463443200, + "value": 34568325.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1463529600, + "value": 69813285.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1463616000, + "value": 86109435.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1463702400, + "value": 113611050.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1463961600, + "value": 66618810.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1464048000, + "value": 37793115.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1464134400, + "value": 37445070.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1464220800, + "value": 53304360.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1464307200, + "value": 47011290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1464652800, + "value": 31549200.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1464739200, + "value": 38188845.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1464825600, + "value": 24582015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1464912000, + "value": 28329450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1465171200, + "value": 28419060.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1465257600, + "value": 80287470.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1465344000, + "value": 76060455.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1465430400, + "value": 58262070.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1465516800, + "value": 78597060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1465776000, + "value": 53577120.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1465862400, + "value": 44983245.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1465948800, + "value": 36963330.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1466035200, + "value": 31423200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1466121600, + "value": 38441865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1466380800, + "value": 44990895.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1466467200, + "value": 41360595.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1466553600, + "value": 288062460.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1466640000, + "value": 122422515.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1466726400, + "value": 83003595.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1466985600, + "value": 90248895.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467072000, + "value": 69636630.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467158400, + "value": 70308465.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467244800, + "value": 56418435.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1467331200, + "value": 63605955.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467676800, + "value": 64103865.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467763200, + "value": 56001630.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467849600, + "value": 41651820.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467936000, + "value": 45595800.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1468195200, + "value": 66368370.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1468281600, + "value": 56701455.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1468368000, + "value": 44640195.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1468454400, + "value": 32683545.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1468540800, + "value": 28054815.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1468800000, + "value": 43574475.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1468886400, + "value": 36414315.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1468972800, + "value": 31636800.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1469059200, + "value": 55197015.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1469145600, + "value": 32939685.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1469404800, + "value": 57810465.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1469491200, + "value": 39602580.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1469577600, + "value": 35585460.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1469664000, + "value": 29429970.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1469750400, + "value": 38264985.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1470009600, + "value": 51807975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470096000, + "value": 48089565.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470182400, + "value": 49846905.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470268800, + "value": 52533225.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1470355200, + "value": 38675430.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470614400, + "value": 27615555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470700800, + "value": 26310885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1470787200, + "value": 28483890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470873600, + "value": 24076710.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470960000, + "value": 20300850.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1471219200, + "value": 25273980.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1471305600, + "value": 26379855.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1471392000, + "value": 21790455.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1471478400, + "value": 20870070.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1471564800, + "value": 19653315.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1471824000, + "value": 26019900.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1471910400, + "value": 63281610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1471996800, + "value": 30888090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472083200, + "value": 21926385.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472169600, + "value": 28345545.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472428800, + "value": 41806380.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472515200, + "value": 39825960.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472601600, + "value": 40418205.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1472688000, + "value": 102308160.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472774400, + "value": 74876685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1473120000, + "value": 54042450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1473206400, + "value": 44694975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1473292800, + "value": 41787750.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1473379200, + "value": 48325905.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1473638400, + "value": 45839700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1473724800, + "value": 44783100.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1473811200, + "value": 28667115.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1473897600, + "value": 36054000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1473984000, + "value": 38842110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1474243200, + "value": 28640355.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1474329600, + "value": 24932340.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1474416000, + "value": 31800480.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1474502400, + "value": 29451975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1474588800, + "value": 33538245.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1474848000, + "value": 28243755.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1474934400, + "value": 39862860.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1475020800, + "value": 27330960.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1475107200, + "value": 35370465.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1475193600, + "value": 33940980.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1475452800, + "value": 80238360.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1475539200, + "value": 45776940.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1475625600, + "value": 23797215.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1475712000, + "value": 61862850.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1475798400, + "value": 44352930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1476057600, + "value": 43733445.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1476144000, + "value": 30339060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1476230400, + "value": 24088650.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1476316800, + "value": 28215435.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1476403200, + "value": 57088020.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1476662400, + "value": 59920515.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1476748800, + "value": 77545620.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1476835200, + "value": 94281555.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1476921600, + "value": 65298930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1477008000, + "value": 37628655.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1477267200, + "value": 35458005.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1477353600, + "value": 28966155.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1477440000, + "value": 75116040.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1477526400, + "value": 175683330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1477612800, + "value": 57461385.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1477872000, + "value": 56721510.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1477958400, + "value": 89997060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1478044800, + "value": 54515745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1478131200, + "value": 32900445.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1478217600, + "value": 65781930.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1478476800, + "value": 50097405.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1478563200, + "value": 42242490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1478649600, + "value": 103742010.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1478736000, + "value": 84858330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1478822400, + "value": 51611205.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1479081600, + "value": 85608450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1479168000, + "value": 50682225.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1479254400, + "value": 41321985.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1479340800, + "value": 57600180.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1479427200, + "value": 67142955.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1479686400, + "value": 57124485.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1479772800, + "value": 73593240.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1479859200, + "value": 62876265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1480032000, + "value": 30619665.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1480291200, + "value": 58714410.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1480377600, + "value": 57520620.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1480464000, + "value": 45849390.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1480550400, + "value": 65228070.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1480636800, + "value": 51604950.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1480896000, + "value": 50948565.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1480982400, + "value": 44166465.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1481068800, + "value": 71439045.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1481155200, + "value": 40960065.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1481241600, + "value": 33890505.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1481500800, + "value": 31229640.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1481587200, + "value": 89130030.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1481673600, + "value": 54654495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1481760000, + "value": 41365305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1481846400, + "value": 49030395.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1482105600, + "value": 45378420.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1482192000, + "value": 62280810.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1482278400, + "value": 69526095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1482364800, + "value": 40609665.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1482451200, + "value": 57488535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1482796800, + "value": 76603605.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1482883200, + "value": 48715005.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1482969600, + "value": 53864715.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1483056000, + "value": 61296165.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1483401600, + "value": 76751040.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1483488000, + "value": 148240920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1483574400, + "value": 48295200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1483660800, + "value": 72480600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1483920000, + "value": 51153120.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1484006400, + "value": 47673600.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1484092800, + "value": 45848955.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1484179200, + "value": 47768535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1484265600, + "value": 80412510.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1484611200, + "value": 59745210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1484697600, + "value": 48709860.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1484784000, + "value": 101214150.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1484870400, + "value": 49923165.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1485129600, + "value": 78557610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1485216000, + "value": 62280870.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1485302400, + "value": 65941140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1485388800, + "value": 39469215.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1485475200, + "value": 39775995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1485734400, + "value": 48218610.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1485820800, + "value": 52682265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1485907200, + "value": 51352470.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1485993600, + "value": 31979490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1486080000, + "value": 24938490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1486339200, + "value": 45616860.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1486425600, + "value": 52628640.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1486512000, + "value": 50357010.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1486598400, + "value": 101696130.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1486684800, + "value": 46664505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1486944000, + "value": 91768200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1487030400, + "value": 94881045.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1487116800, + "value": 63557535.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1487203200, + "value": 89172345.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1487289600, + "value": 81886155.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1487635200, + "value": 71768040.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1487721600, + "value": 113085195.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1487808000, + "value": 193472580.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1487894400, + "value": 107111355.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1488153600, + "value": 150069720.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1488240000, + "value": 78670740.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1488326400, + "value": 61044060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1488412800, + "value": 44183175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1488499200, + "value": 38606160.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1488758400, + "value": 43940415.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1488844800, + "value": 43656195.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1488931200, + "value": 47784270.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1489017600, + "value": 50291415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1489104000, + "value": 40420680.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1489363200, + "value": 38125545.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1489449600, + "value": 100832040.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1489536000, + "value": 69533460.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1489622400, + "value": 90819975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1489708800, + "value": 80565870.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1489968000, + "value": 46284510.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490054400, + "value": 90363240.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1490140800, + "value": 50458350.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490227200, + "value": 42898545.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1490313600, + "value": 74085210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490572800, + "value": 80728845.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490659200, + "value": 102388365.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490745600, + "value": 46356210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1490832000, + "value": 53993670.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490918400, + "value": 41612610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491177600, + "value": 180777570.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491264000, + "value": 129370695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491350400, + "value": 99987900.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1491436800, + "value": 71159910.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491523200, + "value": 57513600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491782400, + "value": 97980315.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491868800, + "value": 72841680.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1491955200, + "value": 76993785.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1492041600, + "value": 124106325.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1492387200, + "value": 53491485.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1492473600, + "value": 38393445.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1492560000, + "value": 49679670.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1492646400, + "value": 78870705.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1492732800, + "value": 57667530.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1492992000, + "value": 65769240.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493078400, + "value": 85255320.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1493164800, + "value": 54209820.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493251200, + "value": 44895480.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493337600, + "value": 58899975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1493596800, + "value": 108803550.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1493683200, + "value": 67132200.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493769600, + "value": 88490685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493856000, + "value": 178937325.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493942400, + "value": 103262310.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1494201600, + "value": 91822080.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1494288000, + "value": 124801560.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1494374400, + "value": 72771405.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1494460800, + "value": 60381360.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1494547200, + "value": 52982295.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1494806400, + "value": 98139675.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1494892800, + "value": 53030295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1494979200, + "value": 84943980.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1495065600, + "value": 73016490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1495152000, + "value": 59414115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1495411200, + "value": 53613555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1495497600, + "value": 53430645.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1501632000, + "value": 158508465.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1501718400, + "value": 169206135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1501804800, + "value": 118611315.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502064000, + "value": 76922280.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1502150400, + "value": 92226420.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502236800, + "value": 86519625.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502323200, + "value": 88535805.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1502409600, + "value": 54039555.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502668800, + "value": 55720770.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502755200, + "value": 36768285.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1502841600, + "value": 39519210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502928000, + "value": 59729325.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503014400, + "value": 64878945.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503273600, + "value": 80873040.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503360000, + "value": 53835240.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503446400, + "value": 59650080.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1503532800, + "value": 53365110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1503619200, + "value": 42063270.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503878400, + "value": 43703055.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503964800, + "value": 47693040.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1504051200, + "value": 39211260.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1504137600, + "value": 47533125.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1504224000, + "value": 36370140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1504569600, + "value": 46009875.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1504656000, + "value": 49117995.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1504742400, + "value": 50711130.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1504828800, + "value": 38831370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1505088000, + "value": 93792450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1505174400, + "value": 71484885.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1505260800, + "value": 51254190.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1505347200, + "value": 88268760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1505433600, + "value": 65391495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1505692800, + "value": 88693770.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1505779200, + "value": 77656125.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1505865600, + "value": 60187995.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1505952000, + "value": 58301040.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506038400, + "value": 100120800.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506297600, + "value": 95209215.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506384000, + "value": 89596305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506470400, + "value": 73275165.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506556800, + "value": 63105405.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506643200, + "value": 62996130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506902400, + "value": 63673905.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506988800, + "value": 127915005.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1507075200, + "value": 102388050.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1507161600, + "value": 49240515.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1507248000, + "value": 52458270.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1507507200, + "value": 91929060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1507593600, + "value": 85714425.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1507680000, + "value": 54369930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1507766400, + "value": 49478250.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1507852800, + "value": 42626325.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1508112000, + "value": 63696315.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1508198400, + "value": 39478785.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1508284800, + "value": 58906215.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1508371200, + "value": 60596670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1508457600, + "value": 58987380.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1508716800, + "value": 69079140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1508803200, + "value": 54037110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1508889600, + "value": 84060840.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1508976000, + "value": 59895495.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1509062400, + "value": 82456560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1509321600, + "value": 50183595.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1509408000, + "value": 67143015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1509494400, + "value": 98873415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1509580800, + "value": 239871705.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1509667200, + "value": 106874280.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1509926400, + "value": 75212505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1510012800, + "value": 64488030.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1510099200, + "value": 58790550.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1510185600, + "value": 64908075.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1510272000, + "value": 55910415.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1510531200, + "value": 92643630.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1510617600, + "value": 69989505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1510704000, + "value": 74143695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1510790400, + "value": 70739175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1510876800, + "value": 170145555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1511136000, + "value": 103487040.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1511222400, + "value": 91762275.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1511308800, + "value": 62022240.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1511481600, + "value": 41299770.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1511740800, + "value": 55527705.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1511827200, + "value": 59546580.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1511913600, + "value": 101149335.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1512000000, + "value": 53600970.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1512086400, + "value": 52615485.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1512345600, + "value": 73463115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1512432000, + "value": 56832825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1512518400, + "value": 78075690.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1512604800, + "value": 56477175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1512691200, + "value": 42380790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1512950400, + "value": 99929295.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1513036800, + "value": 108343800.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1513123200, + "value": 74635725.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1513209600, + "value": 71098425.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1513296000, + "value": 85651935.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1513555200, + "value": 67302900.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1513641600, + "value": 79694640.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1513728000, + "value": 72798450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1513814400, + "value": 54460410.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1513900800, + "value": 51109455.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1514246400, + "value": 52441845.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1514332800, + "value": 57229200.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1514419200, + "value": 53772345.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1514505600, + "value": 45971790.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1514851200, + "value": 51439980.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1514937600, + "value": 53039445.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1515024000, + "value": 119513085.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1515110400, + "value": 54689490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1515369600, + "value": 120026880.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1515456000, + "value": 85692555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1515542400, + "value": 46271310.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1515628800, + "value": 80395725.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1515715200, + "value": 57715995.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1516060800, + "value": 79779555.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1516147200, + "value": 83660295.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1516233600, + "value": 67304595.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1516320000, + "value": 58015335.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1516579200, + "value": 76691625.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1516665600, + "value": 66095520.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1516752000, + "value": 62762115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1516838400, + "value": 82199130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1516924800, + "value": 52383270.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1517184000, + "value": 55837245.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1517270400, + "value": 51916335.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1517356800, + "value": 68225850.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1517443200, + "value": 48808785.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1517529600, + "value": 42620370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1517788800, + "value": 49498560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1517875200, + "value": 58819215.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1517961600, + "value": 81471840.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1518048000, + "value": 122580555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1518134400, + "value": 157762590.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1518393600, + "value": 74060220.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1518480000, + "value": 53357370.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1518566400, + "value": 46124280.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1518652800, + "value": 68946270.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1518739200, + "value": 67143360.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1519084800, + "value": 47355345.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1519171200, + "value": 37654230.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1519257600, + "value": 80854995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1519344000, + "value": 69096450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1519603200, + "value": 52423515.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1519689600, + "value": 55899915.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1519776000, + "value": 74032890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1519862400, + "value": 82409115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1519948800, + "value": 59703135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1520208000, + "value": 44503275.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1520294400, + "value": 51460950.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1520380800, + "value": 59825250.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1520467200, + "value": 41452350.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1520553600, + "value": 63614580.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1520812800, + "value": 100808145.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1520899200, + "value": 71138010.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1520985600, + "value": 94350375.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521072000, + "value": 76010130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521158400, + "value": 74099280.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521417600, + "value": 89344530.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521504000, + "value": 53260785.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521590400, + "value": 71613060.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1521676800, + "value": 52637865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521763200, + "value": 75360090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1522022400, + "value": 97042815.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1522108800, + "value": 158944560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1522195200, + "value": 243796575.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1522281600, + "value": 177807180.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1522627200, + "value": 195963285.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1522713600, + "value": 230425485.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1522800000, + "value": 246546495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1522886400, + "value": 226914720.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1522972800, + "value": 164396325.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1523232000, + "value": 124936080.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1523318400, + "value": 133247355.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1523404800, + "value": 84874725.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1523491200, + "value": 86663775.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1523577600, + "value": 87163425.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1523836800, + "value": 76768875.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1523923200, + "value": 84747060.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1524009600, + "value": 79921260.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1524096000, + "value": 71637165.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1524182400, + "value": 67236780.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1524441600, + "value": 57966930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1524528000, + "value": 63192825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1524614400, + "value": 45042330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1524700800, + "value": 50144700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1524787200, + "value": 49810530.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525046400, + "value": 47944485.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525132800, + "value": 46620600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525219200, + "value": 100044315.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1525305600, + "value": 200230050.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1525392000, + "value": 97219695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525651200, + "value": 100077990.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525737600, + "value": 69679140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1525824000, + "value": 65864130.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525910400, + "value": 65703270.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1525996800, + "value": 52073175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1526256000, + "value": 83199000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1526342400, + "value": 109926450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1526428800, + "value": 65149395.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1526515200, + "value": 50506260.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1526601600, + "value": 82659480.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1526860800, + "value": 110223840.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1526947200, + "value": 104515395.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1527033600, + "value": 68248245.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1527120000, + "value": 48098295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1527206400, + "value": 43134090.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1527552000, + "value": 68391420.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1527638400, + "value": 86829480.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1527724800, + "value": 65445975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1527811200, + "value": 60092265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528070400, + "value": 56356245.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528156800, + "value": 67469700.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1528243200, + "value": 223350765.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528329600, + "value": 173810055.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1528416000, + "value": 97360800.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528675200, + "value": 159962145.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528761600, + "value": 268792350.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528848000, + "value": 115255125.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528934400, + "value": 133885455.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1529020800, + "value": 128061330.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1529280000, + "value": 145368480.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1529366400, + "value": 155148825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1529452800, + "value": 99665430.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1529539200, + "value": 94828470.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1529625600, + "value": 120476655.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1529884800, + "value": 80040690.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1529971200, + "value": 90073035.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1530057600, + "value": 101165250.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1530144000, + "value": 100403235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1530230400, + "value": 79185540.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1530489600, + "value": 233595795.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1530576000, + "value": 149002155.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1530748800, + "value": 213613665.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1530835200, + "value": 110289180.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1531094400, + "value": 89890020.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1531180800, + "value": 113676510.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1531267200, + "value": 58766760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1531353600, + "value": 67817835.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1531440000, + "value": 73379730.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1531699200, + "value": 96201240.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1531785600, + "value": 84189390.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1531872000, + "value": 69456900.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1531958400, + "value": 72958365.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532044800, + "value": 62980500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532304000, + "value": 129825210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532390400, + "value": 115360290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532476800, + "value": 86301735.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1532563200, + "value": 56522880.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1532649600, + "value": 52540545.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532908800, + "value": 79959210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532995200, + "value": 60069180.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1533081600, + "value": 117020970.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1533168000, + "value": 279512445.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1533254400, + "value": 159452790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1533513600, + "value": 102678015.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1533600000, + "value": 381052725.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1533686400, + "value": 280429020.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1533772800, + "value": 199309800.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1533859200, + "value": 137798880.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1534118400, + "value": 121692615.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1534204800, + "value": 82835430.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1534291200, + "value": 105751815.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1534377600, + "value": 66955965.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1534464000, + "value": 224153370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1534723200, + "value": 202795425.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1534809600, + "value": 156089955.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1534896000, + "value": 73769700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1534982400, + "value": 63324510.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1535068800, + "value": 42289110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1535328000, + "value": 164076645.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1535414400, + "value": 94857345.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1535500800, + "value": 90330150.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1535587200, + "value": 87190275.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1535673600, + "value": 64315245.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536019200, + "value": 100324125.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536105600, + "value": 87707505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536192000, + "value": 88452450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536278400, + "value": 264414765.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536537600, + "value": 176956905.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1536624000, + "value": 110538330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536710400, + "value": 118337070.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1536796800, + "value": 73748235.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536883200, + "value": 79030395.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1537142400, + "value": 81452700.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1537228800, + "value": 201292170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1537315200, + "value": 96540390.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1537401600, + "value": 87191865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1537488000, + "value": 55254180.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1537747200, + "value": 56511855.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1537833600, + "value": 52293330.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1537920000, + "value": 91873710.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1538006400, + "value": 95037525.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538092800, + "value": 403081170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538352000, + "value": 260729640.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1538438400, + "value": 139184115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538524800, + "value": 96930465.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538611200, + "value": 114758670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538697600, + "value": 208825890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538956800, + "value": 153828015.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1539043200, + "value": 141231210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1539129600, + "value": 148776810.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1539216000, + "value": 94547865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1539302400, + "value": 83192580.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1539561600, + "value": 74660160.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1539648000, + "value": 107659140.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1539734400, + "value": 101049495.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1539820800, + "value": 62268090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1539907200, + "value": 110253090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1540166400, + "value": 61455330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1540252800, + "value": 224905620.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1540339200, + "value": 235572405.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1540425600, + "value": 246957480.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1540512000, + "value": 331244850.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1540771200, + "value": 177468000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1540857600, + "value": 111830760.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1540944000, + "value": 88997550.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541030400, + "value": 98076885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541116800, + "value": 96029265.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1541376000, + "value": 93116505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1541462400, + "value": 83178450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541548800, + "value": 82208655.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541635200, + "value": 83512380.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541721600, + "value": 62071020.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541980800, + "value": 85421925.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1542067200, + "value": 61718760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1542153600, + "value": 61075260.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1542240000, + "value": 55608810.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1542326400, + "value": 83323110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1542585600, + "value": 117911925.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1542672000, + "value": 96513690.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1542758400, + "value": 55336395.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1542931200, + "value": 50440110.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1543190400, + "value": 98172615.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1543276800, + "value": 76446435.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1543363200, + "value": 50226975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1543449600, + "value": 36297450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1543536000, + "value": 67724880.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1543795200, + "value": 101594700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1543881600, + "value": 103683075.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1544054400, + "value": 93603030.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1544140800, + "value": 135610470.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1544400000, + "value": 78864630.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1544486400, + "value": 76196595.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1544572800, + "value": 60857985.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1544659200, + "value": 87478575.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1544745600, + "value": 75673965.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545004800, + "value": 90968295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545091200, + "value": 85943745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545177600, + "value": 91612320.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545264000, + "value": 112096500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545350400, + "value": 97661730.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1545609600, + "value": 66350835.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545782400, + "value": 98012415.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1545868800, + "value": 104624100.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545955200, + "value": 121384305.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1546214400, + "value": 78022320.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1546387200, + "value": 138488085.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1546473600, + "value": 85079760.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1546560000, + "value": 89212035.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1546819200, + "value": 89667855.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1546905600, + "value": 86465175.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1546992000, + "value": 63893385.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547078400, + "value": 72991995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547164800, + "value": 60942345.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547424000, + "value": 63718830.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1547510400, + "value": 73060710.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547596800, + "value": 53209815.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547683200, + "value": 44328525.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547769600, + "value": 289579830.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1548115200, + "value": 146101185.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1548201600, + "value": 148002600.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1548288000, + "value": 92497140.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1548374400, + "value": 83032155.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1548633600, + "value": 75093600.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1548720000, + "value": 55303035.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1548806400, + "value": 128510025.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1548892800, + "value": 150214920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1548979200, + "value": 88314525.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1549238400, + "value": 91278885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1549324800, + "value": 80787765.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1549411200, + "value": 61091385.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1549497600, + "value": 79000440.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1549584000, + "value": 69815910.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1549843200, + "value": 88060125.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1549929600, + "value": 65880930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550016000, + "value": 59951655.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550102400, + "value": 61683570.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550188800, + "value": 46719975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1550534400, + "value": 48097965.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550620800, + "value": 84401340.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550707200, + "value": 107646420.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550793600, + "value": 68671965.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1551052800, + "value": 81461385.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551139200, + "value": 104134410.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1551225600, + "value": 137486940.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1551312000, + "value": 128665170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551398400, + "value": 274694670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551657600, + "value": 200186820.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551744000, + "value": 224784825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551830400, + "value": 130688295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551916800, + "value": 117750495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1552003200, + "value": 109426785.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1552262400, + "value": 91647090.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1552348800, + "value": 94183110.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1552435200, + "value": 84463050.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1552521600, + "value": 87638685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1552608000, + "value": 181501410.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1552867200, + "value": 126356685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1552953600, + "value": 147554025.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553040000, + "value": 87481035.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553126400, + "value": 73793190.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553212800, + "value": 107444580.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1553472000, + "value": 125519295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1553558400, + "value": 90114720.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553644800, + "value": 111765915.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553731200, + "value": 84429480.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553817600, + "value": 74496975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1554076800, + "value": 100487535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1554163200, + "value": 67021665.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1554249600, + "value": 98939940.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1554336000, + "value": 265556415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1554422400, + "value": 155499960.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1554681600, + "value": 129487440.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1554768000, + "value": 72568875.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1554854400, + "value": 87333435.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1554940800, + "value": 115465245.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1555027200, + "value": 83273295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1555286400, + "value": 121678560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1555372800, + "value": 89589750.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1555459200, + "value": 61218300.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1555545600, + "value": 65756700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1555891200, + "value": 150683310.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1555977600, + "value": 131710980.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556064000, + "value": 127073520.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556150400, + "value": 265586880.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556236800, + "value": 272603400.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556496000, + "value": 211597680.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1556582400, + "value": 114634905.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556668800, + "value": 130472910.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556755200, + "value": 221207520.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1556841600, + "value": 285771600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1557100800, + "value": 129715710.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1557187200, + "value": 121401255.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557273600, + "value": 70776975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557360000, + "value": 79827930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557446400, + "value": 85723890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557705600, + "value": 123465510.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557792000, + "value": 83553315.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1557878400, + "value": 87076290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557964800, + "value": 85589625.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1558051200, + "value": 213667560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1558310400, + "value": 241324890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1558396800, + "value": 221423400.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1558483200, + "value": 223585785.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1558569600, + "value": 313514490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1558656000, + "value": 172574760.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559001600, + "value": 121369680.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559088000, + "value": 147665835.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1559174400, + "value": 96234330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559260800, + "value": 126511080.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559520000, + "value": 162149595.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559606400, + "value": 168287700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1559692800, + "value": 170547300.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559779200, + "value": 239261910.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1559865600, + "value": 185291190.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1560124800, + "value": 120507465.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560211200, + "value": 136661955.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560297600, + "value": 182775390.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1560384000, + "value": 101617290.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560470400, + "value": 88657065.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560729600, + "value": 149330235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560816000, + "value": 152172840.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1560902400, + "value": 79817250.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560988800, + "value": 145668465.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1561075200, + "value": 91318920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1561334400, + "value": 69803340.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1561420800, + "value": 71846805.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1561507200, + "value": 101637405.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1561593600, + "value": 73779210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1561680000, + "value": 76459620.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1561939200, + "value": 102639255.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1562025600, + "value": 112517325.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1562112000, + "value": 171219210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1562284800, + "value": 85099530.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1562544000, + "value": 71488095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1562630400, + "value": 74145135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1562716800, + "value": 109079265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1562803200, + "value": 87319530.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1562889600, + "value": 95006310.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1563148800, + "value": 129415845.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1563235200, + "value": 94476000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1563321600, + "value": 105617190.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1563408000, + "value": 56868000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1563494400, + "value": 85749975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1563753600, + "value": 83095470.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1563840000, + "value": 54661110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1563926400, + "value": 130306335.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1564012800, + "value": 270950850.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1564099200, + "value": 118829130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1564358400, + "value": 113923785.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1564444800, + "value": 96458760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1564531200, + "value": 111596460.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1564617600, + "value": 98159715.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1570665600, + "value": 71848110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1570752000, + "value": 99881625.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571011200, + "value": 120297450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571097600, + "value": 74867415.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571184000, + "value": 76111920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571270400, + "value": 54637350.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571356800, + "value": 67372005.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1571616000, + "value": 59437185.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1571702400, + "value": 51015450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571788800, + "value": 126354015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571875200, + "value": 333785415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1571961600, + "value": 346900110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1572220800, + "value": 217401990.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1572307200, + "value": 148391235.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1572393600, + "value": 110357760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1572480000, + "value": 57293355.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1572566400, + "value": 74996490.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1572825600, + "value": 107054385.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1572912000, + "value": 80141085.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1572998400, + "value": 94473615.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573084800, + "value": 170876115.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573171200, + "value": 70916190.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573430400, + "value": 115064865.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573516800, + "value": 83768280.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573603200, + "value": 95754555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1573689600, + "value": 73642995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573776000, + "value": 53228490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1574035200, + "value": 47569800.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1574121600, + "value": 88743975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1574208000, + "value": 73837815.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1574294400, + "value": 67119255.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1574380800, + "value": 185281845.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1574640000, + "value": 136063125.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1574726400, + "value": 85639260.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1574812800, + "value": 60248265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1574985600, + "value": 26162310.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1575244800, + "value": 65817750.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1575331200, + "value": 71516535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1575417600, + "value": 52213935.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1575504000, + "value": 39315060.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1575590400, + "value": 87443550.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1575849600, + "value": 97238610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1575936000, + "value": 94475535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576022400, + "value": 75745965.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576108800, + "value": 86341350.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576195200, + "value": 73028070.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1576454400, + "value": 196900605.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576540800, + "value": 88895370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1576627200, + "value": 159076170.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576713600, + "value": 195368595.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576800000, + "value": 162292950.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1577059200, + "value": 147161505.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1577145600, + "value": 92001720.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1577318400, + "value": 118997565.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1577404800, + "value": 110319030.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1577664000, + "value": 140912100.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1577750400, + "value": 115227540.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1577923200, + "value": 105742830.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578009600, + "value": 201368895.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578268800, + "value": 114317175.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578355200, + "value": 200288085.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578441600, + "value": 348554655.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578528000, + "value": 308683530.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1578614400, + "value": 142140990.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1578873600, + "value": 296673120.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578960000, + "value": 313603800.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1579046400, + "value": 189689685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1579132800, + "value": 234395160.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1579219200, + "value": 149312700.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1579564800, + "value": 189698280.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1579651200, + "value": 324324630.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1579737600, + "value": 203213130.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1579824000, + "value": 148648650.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1580083200, + "value": 139065495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580169600, + "value": 125302140.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580256000, + "value": 183743490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580342400, + "value": 273085440.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580428800, + "value": 158981265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580688000, + "value": 475263390.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580774400, + "value": 552886995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580860800, + "value": 464742915.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1580947200, + "value": 383700900.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1581033600, + "value": 168028710.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1581292800, + "value": 240893220.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1581379200, + "value": 115196955.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1581465600, + "value": 117541665.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1581552000, + "value": 259599570.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1581638400, + "value": 160881435.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1581984000, + "value": 168671805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1582070400, + "value": 249771750.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1582156800, + "value": 181159170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582243200, + "value": 149621535.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582502400, + "value": 148606905.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582588800, + "value": 168777675.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582675200, + "value": 136474050.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582761600, + "value": 249019995.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582848000, + "value": 257814675.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1583107200, + "value": 206093775.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1583193600, + "value": 250127055.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583280000, + "value": 154058295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583366400, + "value": 108482445.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583452800, + "value": 123425130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583712000, + "value": 175009290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583798400, + "value": 161919360.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583884800, + "value": 140357565.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1583971200, + "value": 197614035.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1584057600, + "value": 239295285.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1584316800, + "value": 221492175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1584403200, + "value": 261417435.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1584489600, + "value": 265132005.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1584576000, + "value": 328591200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1584662400, + "value": 307001235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1584921600, + "value": 178044150.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1585008000, + "value": 237852525.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1585094400, + "value": 218541390.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1585180800, + "value": 179456955.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1585267200, + "value": 148377030.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1585526400, + "value": 119682195.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1585612800, + "value": 188997660.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1585699200, + "value": 138967425.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1585785600, + "value": 203988075.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1585872000, + "value": 241104990.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1586131200, + "value": 150877275.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586217600, + "value": 187243695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586304000, + "value": 135389595.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586390400, + "value": 140315520.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586736000, + "value": 232627920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586822400, + "value": 300642825.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586908800, + "value": 231622050.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1586995200, + "value": 211446420.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1587081600, + "value": 132770940.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1587340800, + "value": 152149290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1587427200, + "value": 202718685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1587513600, + "value": 145122495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1587600000, + "value": 136673115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1587686400, + "value": 139092495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1587945600, + "value": 202881945.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1588032000, + "value": 155158260.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588118400, + "value": 158846565.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1588204800, + "value": 272728890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588291200, + "value": 325839930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588550400, + "value": 191118300.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1588636800, + "value": 175710750.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588723200, + "value": 113329740.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588809600, + "value": 118667010.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588896000, + "value": 160369815.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1589155200, + "value": 171898425.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1589241600, + "value": 163140435.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1589328000, + "value": 197153685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1589414400, + "value": 134271540.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1589500800, + "value": 107025660.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1589760000, + "value": 119931690.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1589846400, + "value": 98436405.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1589932800, + "value": 70987260.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1590019200, + "value": 125158530.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1590105600, + "value": 102896430.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1590451200, + "value": 77548890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1590537600, + "value": 115787835.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1590624000, + "value": 73302210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1590710400, + "value": 122263095.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1590969600, + "value": 145189200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1591056000, + "value": 132256140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1591142400, + "value": 80101050.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1591228800, + "value": 88832985.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1591315200, + "value": 78301965.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1591574400, + "value": 141366735.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1591660800, + "value": 115863015.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1591747200, + "value": 174956610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1591833600, + "value": 156858300.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1591920000, + "value": 162138555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592179200, + "value": 155522580.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1592265600, + "value": 133777140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592352000, + "value": 100027320.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592438400, + "value": 97189380.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1592524800, + "value": 83171715.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592784000, + "value": 64500420.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592870400, + "value": 64613580.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592956800, + "value": 106925520.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1593043200, + "value": 92884695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1593129600, + "value": 83687025.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1593388800, + "value": 85269270.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1593475200, + "value": 166442490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1593561600, + "value": 123111735.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1593648000, + "value": 154935240.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1593993600, + "value": 175538805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1594080000, + "value": 167984835.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1594166400, + "value": 137422935.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1594252800, + "value": 99822150.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1594339200, + "value": 196613790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1594598400, + "value": 293325390.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1594684800, + "value": 191646180.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1594771200, + "value": 128684670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1594857600, + "value": 124492275.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1594944000, + "value": 78639675.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1595203200, + "value": 137656275.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1595289600, + "value": 131882220.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1595376000, + "value": 106352115.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1595462400, + "value": 187476870.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1595548800, + "value": 157381425.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1595808000, + "value": 129609780.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1595894400, + "value": 135868020.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1595980800, + "value": 81939615.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1596067200, + "value": 65301720.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1596153600, + "value": 103662660.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1596412800, + "value": 73760145.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1596499200, + "value": 72451020.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1596585600, + "value": 40635945.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1596672000, + "value": 49976850.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1596758400, + "value": 72015780.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1597017600, + "value": 60084135.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1597104000, + "value": 67698210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597190400, + "value": 173744580.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597276800, + "value": 165591105.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597363200, + "value": 101037135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597622400, + "value": 156188385.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597708800, + "value": 123741405.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597795200, + "value": 94184685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1597881600, + "value": 159074805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597968000, + "value": 166461210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1598227200, + "value": 150696765.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1598313600, + "value": 80517750.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1598400000, + "value": 105153030.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1598486400, + "value": 180878220.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1598572800, + "value": 145062675.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1598832000, + "value": 248705622.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1598918400, + "value": 177822417.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1599004800, + "value": 188849097.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1599091200, + "value": 180565761.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1599177600, + "value": 231814941.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1599523200, + "value": 247260840.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1599609600, + "value": 168193332.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1599696000, + "value": 188312610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1599782400, + "value": 137663229.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600041600, + "value": 181388055.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1600128000, + "value": 210951363.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1600214400, + "value": 165125403.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600300800, + "value": 170581353.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600387200, + "value": 191458605.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1600646400, + "value": 235264287.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600732800, + "value": 168209415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600819200, + "value": 197688879.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600905600, + "value": 219102480.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1600992000, + "value": 148599174.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1601251200, + "value": 102743079.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1601337600, + "value": 105701094.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1601424000, + "value": 101027403.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1601510400, + "value": 108278334.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1601596800, + "value": 153489573.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1601856000, + "value": 95763156.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1601942400, + "value": 106731042.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1602028800, + "value": 93197385.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1602115200, + "value": 87453252.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1602201600, + "value": 62810682.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1602460800, + "value": 83716995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1602547200, + "value": 73758798.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1602633600, + "value": 103619673.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1602720000, + "value": 76002600.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1602806400, + "value": 70403769.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603065600, + "value": 79414086.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603152000, + "value": 66908925.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603238400, + "value": 65343702.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1603324800, + "value": 85645152.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603411200, + "value": 68631111.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603670400, + "value": 60391515.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1603756800, + "value": 47481831.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1603843200, + "value": 50498646.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603929600, + "value": 46622136.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1604016000, + "value": 87711978.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1604275200, + "value": 62289972.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1604361600, + "value": 74676897.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1604448000, + "value": 66091209.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1604534400, + "value": 59458839.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1604620800, + "value": 47468925.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1604880000, + "value": 72391911.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1604966400, + "value": 62105277.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1605052800, + "value": 36576201.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1605139200, + "value": 39151536.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1605225600, + "value": 39364200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1605484800, + "value": 52552809.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1605571200, + "value": 126524304.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1605657600, + "value": 163818360.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1605744000, + "value": 130075530.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1605830400, + "value": 68026170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1606089600, + "value": 103891680.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606176000, + "value": 111214107.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606262400, + "value": 100834929.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606435200, + "value": 76762173.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606694400, + "value": 131103393.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606780800, + "value": 81546585.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1606867200, + "value": 96274566.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606953600, + "value": 86454540.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1607040000, + "value": 59674344.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1607299200, + "value": 116487387.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1607385600, + "value": 132180669.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1607472000, + "value": 137626977.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1607558400, + "value": 139451475.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1607644800, + "value": 95785260.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1607904000, + "value": 110166885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1607990400, + "value": 97244397.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1608076800, + "value": 87571866.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1608163200, + "value": 117472365.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1608249600, + "value": 453121770.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1608508800, + "value": 115350915.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1608595200, + "value": 104906727.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1608681600, + "value": 67952889.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1608768000, + "value": 46317783.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609113600, + "value": 66460887.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1609200000, + "value": 46040676.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609286400, + "value": 89297991.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609372800, + "value": 103795989.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609718400, + "value": 100289490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609804800, + "value": 63907479.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609891200, + "value": 92182257.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609977600, + "value": 102648621.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1610064000, + "value": 150111201.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1610323200, + "value": 115961742.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1610409600, + "value": 94456524.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1610496000, + "value": 66342027.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1610582400, + "value": 63056748.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1610668800, + "value": 78848139.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1611014400, + "value": 46853928.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611100800, + "value": 49166334.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611187200, + "value": 38889873.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1611273600, + "value": 37781574.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611532800, + "value": 76459485.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611619200, + "value": 44113677.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611705600, + "value": 44969781.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1611792000, + "value": 43576764.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611878400, + "value": 59973315.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1612137600, + "value": 44447226.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1612224000, + "value": 42602496.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1612310400, + "value": 32335680.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1612396800, + "value": 28538979.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1612483200, + "value": 32859015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1612742400, + "value": 36266742.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1612828800, + "value": 25635285.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1612915200, + "value": 64580658.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1613001600, + "value": 38372664.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1613088000, + "value": 40260147.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1613433600, + "value": 34891947.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1613520000, + "value": 45436740.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1613606400, + "value": 32746779.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1613692800, + "value": 33005790.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1613952000, + "value": 66209229.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614038400, + "value": 120777558.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1614124800, + "value": 69555915.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1614211200, + "value": 69715503.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614297600, + "value": 77062926.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614556800, + "value": 48766533.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1614643200, + "value": 40553202.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614729600, + "value": 52144758.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614816000, + "value": 120709596.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614902400, + "value": 166008762.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1615161600, + "value": 99075645.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1615248000, + "value": 126304164.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1615334400, + "value": 115159767.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1615420800, + "value": 66966033.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1615507200, + "value": 60956052.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1615766400, + "value": 55377972.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1615852800, + "value": 59068035.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1615939200, + "value": 77101338.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1616025600, + "value": 59758062.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1616112000, + "value": 81737448.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1616371200, + "value": 75553839.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1616457600, + "value": 53724156.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1616544000, + "value": 63886878.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1616630400, + "value": 75643422.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1616716800, + "value": 59529975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1616976000, + "value": 48334989.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1617062400, + "value": 77555175.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1617148800, + "value": 64970841.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1617235200, + "value": 68217258.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1617580800, + "value": 82286721.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1617667200, + "value": 57601257.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1617753600, + "value": 53050818.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1617840000, + "value": 48333639.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1617926400, + "value": 39606963.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1618185600, + "value": 54284880.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1618272000, + "value": 86973186.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1618358400, + "value": 93136587.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1618444800, + "value": 53544411.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1618531200, + "value": 53036541.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1618790400, + "value": 75574374.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1618876800, + "value": 70814043.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1618963200, + "value": 58436706.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1619049600, + "value": 68573160.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1619136000, + "value": 55616598.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1619395200, + "value": 56943357.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1619481600, + "value": 54962673.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1619568000, + "value": 40961961.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1619654400, + "value": 53380290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1619740800, + "value": 76883430.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1620000000, + "value": 51935973.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620086400, + "value": 55854111.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620172800, + "value": 42513225.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620259200, + "value": 54950481.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620345600, + "value": 45285756.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1620604800, + "value": 59311011.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620691200, + "value": 89671815.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620777600, + "value": 64890921.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620864000, + "value": 83126715.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620950400, + "value": 65228229.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1621209600, + "value": 63467550.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1621296000, + "value": 75257196.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1621382400, + "value": 77524299.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1621468800, + "value": 64313097.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1621555200, + "value": 49913517.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1621814400, + "value": 72762678.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1621900800, + "value": 57594786.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1621987200, + "value": 59423178.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1622073600, + "value": 53587350.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1622160000, + "value": 45708411.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1622505600, + "value": 35538018.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1622592000, + "value": 43231854.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1622678400, + "value": 57641328.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1622764800, + "value": 47932023.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623024000, + "value": 43852587.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623110400, + "value": 52664493.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623196800, + "value": 34338024.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1623283200, + "value": 49835202.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623369600, + "value": 31935483.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623628800, + "value": 41926515.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623715200, + "value": 36347325.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1623801600, + "value": 44065245.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623888000, + "value": 44940105.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623974400, + "value": 50973756.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1624233600, + "value": 50577285.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1624320000, + "value": 39783501.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1624406400, + "value": 63081165.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1624492800, + "value": 95330490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1624579200, + "value": 68989917.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1624838400, + "value": 43411218.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1624924800, + "value": 35486958.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1625011200, + "value": 38338683.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1625097600, + "value": 35654799.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1625184000, + "value": 54561240.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1625529600, + "value": 41297160.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1625616000, + "value": 37118532.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1625702400, + "value": 44881728.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1625788800, + "value": 34968744.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1626048000, + "value": 51243600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1626134400, + "value": 42033159.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626220800, + "value": 46162458.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626307200, + "value": 41483562.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626393600, + "value": 31873818.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626652800, + "value": 40264497.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1626739200, + "value": 29554182.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1626825600, + "value": 26824704.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626912000, + "value": 29336946.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626998400, + "value": 27217935.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1627257600, + "value": 50556135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1627344000, + "value": 64392234.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1627430400, + "value": 29813055.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1627516800, + "value": 59894136.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1627603200, + "value": 55456236.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1627862400, + "value": 65648568.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1627948800, + "value": 42860139.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1628035200, + "value": 32493825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1628121600, + "value": 24828657.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1628208000, + "value": 28781466.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1628467200, + "value": 29672529.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1628553600, + "value": 26595642.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1628640000, + "value": 17842452.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1628726400, + "value": 34809909.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1628812800, + "value": 32477205.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1629072000, + "value": 42453582.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1629158400, + "value": 43246251.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1629244800, + "value": 39414696.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1629331200, + "value": 27499356.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1629417600, + "value": 27058611.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1629676800, + "value": 40378269.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1629763200, + "value": 24506721.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1629849600, + "value": 24902058.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1629936000, + "value": 24901170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1630022400, + "value": 25801872.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1630281600, + "value": 35205261.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1630368000, + "value": 41367243.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1630454400, + "value": 23279241.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1630540800, + "value": 24648756.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1630627200, + "value": 29042418.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1630972800, + "value": 38376276.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631059200, + "value": 37344477.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1631145600, + "value": 27285180.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631232000, + "value": 28766106.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1631491200, + "value": 45762033.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631577600, + "value": 35848818.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631664000, + "value": 30442302.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631750400, + "value": 26342049.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631836800, + "value": 59345472.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1632096000, + "value": 44764014.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1632182400, + "value": 31419141.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1632268800, + "value": 28690833.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1632355200, + "value": 21861891.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1632441600, + "value": 41849742.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1632700800, + "value": 56626173.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1632787200, + "value": 50707452.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1632873600, + "value": 42686520.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1632960000, + "value": 36607635.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1633046400, + "value": 33948654.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1633305600, + "value": 62392521.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1633392000, + "value": 36630258.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1633478400, + "value": 28747782.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1633564800, + "value": 35731074.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1633651200, + "value": 31890201.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1633910400, + "value": 27505347.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1633996800, + "value": 40789215.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634083200, + "value": 27633120.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634169600, + "value": 21017235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634256000, + "value": 37482756.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634515200, + "value": 46397166.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634601600, + "value": 34256370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1634688000, + "value": 26102676.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1634774400, + "value": 63007014.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634860800, + "value": 44809167.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635120000, + "value": 120727032.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635206400, + "value": 116972874.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1635292800, + "value": 71864214.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635379200, + "value": 51902868.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635465600, + "value": 58173909.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635724800, + "value": 103645668.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635811200, + "value": 73600182.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1635897600, + "value": 62335545.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635984000, + "value": 44871267.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636070400, + "value": 38407929.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636329600, + "value": 55734987.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636416000, + "value": 99305115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636502400, + "value": 72635043.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1636588800, + "value": 37079193.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636675200, + "value": 40773651.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636934400, + "value": 55007415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1637020800, + "value": 45724431.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1637107200, + "value": 54335913.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1637193600, + "value": 38152728.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1637280000, + "value": 40460397.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1637539200, + "value": 61802889.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1637625600, + "value": 66676008.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1637712000, + "value": 40844445.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1637884800, + "value": 20116359.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1638144000, + "value": 35464650.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1638230400, + "value": 49770600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1638316800, + "value": 40769319.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1638403200, + "value": 42563499.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1638489600, + "value": 52544382.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1638748800, + "value": 46148676.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1638835200, + "value": 35199075.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1638921600, + "value": 24624063.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1639008000, + "value": 36719553.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1639094400, + "value": 34100466.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1639353600, + "value": 42878616.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1639440000, + "value": 40971606.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1639526400, + "value": 42256527.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1639612800, + "value": 44465637.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1639699200, + "value": 59531019.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1639958400, + "value": 31028196.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1640044800, + "value": 40021422.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1640131200, + "value": 53675220.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1640217600, + "value": 53221719.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1640563200, + "value": 39116811.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1640649600, + "value": 33759246.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1640736000, + "value": 33236880.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1640822400, + "value": 26776320.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1640908800, + "value": 21442167.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641168000, + "value": 59739450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1641254400, + "value": 55300041.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641340800, + "value": 45923958.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641427200, + "value": 50920653.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641513600, + "value": 48486174.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641772800, + "value": 50742453.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1641859200, + "value": 37721568.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641945600, + "value": 47720787.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1642032000, + "value": 56243877.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1642118400, + "value": 40407246.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1642464000, + "value": 37357950.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1642550400, + "value": 41641410.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1642636800, + "value": 40021428.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1642723200, + "value": 54432708.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1642982400, + "value": 83257308.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1643068800, + "value": 47386206.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1643155200, + "value": 59069976.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1643241600, + "value": 78316839.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1643328000, + "value": 73422666.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1643587200, + "value": 60666141.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1643673600, + "value": 40608771.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1643760000, + "value": 37054980.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1643846400, + "value": 45404325.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1643932800, + "value": 41669502.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1644192000, + "value": 34018512.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1644278400, + "value": 28583517.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1644364800, + "value": 30368949.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1644451200, + "value": 37176897.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1644537600, + "value": 44144829.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1644796800, + "value": 38758287.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1644883200, + "value": 32850735.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1644969600, + "value": 28010172.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1645056000, + "value": 30422382.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1645142400, + "value": 40040778.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1645488000, + "value": 47556666.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1645574400, + "value": 53536245.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1645660800, + "value": 81729354.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1645747200, + "value": 43164210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646006400, + "value": 59203599.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646092800, + "value": 43701348.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1646179200, + "value": 41124426.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646265600, + "value": 34345506.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1646352000, + "value": 39490536.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646611200, + "value": 41203665.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1646697600, + "value": 47495559.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646784000, + "value": 34494873.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646870400, + "value": 33274095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1646956800, + "value": 37045917.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1647216000, + "value": 39402378.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1647302400, + "value": 37676769.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647388800, + "value": 46220172.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647475200, + "value": 37029492.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647561600, + "value": 61952121.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647820800, + "value": 46753863.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647907200, + "value": 62365338.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647993600, + "value": 68725848.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1648080000, + "value": 39163167.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1648166400, + "value": 36286704.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1648425600, + "value": 56465760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1648512000, + "value": 39172281.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1648598400, + "value": 33436668.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1648684800, + "value": 26907888.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1648771200, + "value": 29717751.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1649030400, + "value": 46320690.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1649116800, + "value": 43596441.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1649203200, + "value": 50559519.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1649289600, + "value": 44438853.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1649376000, + "value": 30800952.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1649635200, + "value": 32727522.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1649721600, + "value": 38553336.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1649808000, + "value": 31495641.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1649894400, + "value": 32337318.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1650240000, + "value": 28905387.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1650326400, + "value": 27618669.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1650412800, + "value": 37622106.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1650499200, + "value": 57751845.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1650585600, + "value": 37934373.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1650844800, + "value": 37647819.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1650931200, + "value": 74006871.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1651017600, + "value": 38960505.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1651104000, + "value": 67646268.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1651190400, + "value": 48944871.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1651449600, + "value": 42804726.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1651536000, + "value": 37183326.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1651622400, + "value": 49005195.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1651708800, + "value": 52158030.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1651795200, + "value": 41014902.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652054400, + "value": 49423431.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652140800, + "value": 48430737.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652227200, + "value": 53134143.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652313600, + "value": 85963638.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1652400000, + "value": 55949757.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1652659200, + "value": 52901019.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652745600, + "value": 47844489.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1652832000, + "value": 52252599.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652918400, + "value": 55037787.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1653004800, + "value": 85888587.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1653264000, + "value": 51265281.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1653350400, + "value": 52180665.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1653436800, + "value": 58653768.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1653523200, + "value": 66064707.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1653609600, + "value": 56435403.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1653955200, + "value": 64379274.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1654041600, + "value": 47765442.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1654128000, + "value": 59789013.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1654214400, + "value": 70047213.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1654473600, + "value": 52758504.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1654560000, + "value": 46067151.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1654646400, + "value": 47875032.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1654732800, + "value": 60465090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1654819200, + "value": 60624126.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1655078400, + "value": 61920003.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1655164800, + "value": 63877368.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1655251200, + "value": 76913121.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1655337600, + "value": 65683083.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1655424000, + "value": 61196430.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1655769600, + "value": 79742895.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1655856000, + "value": 67988037.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1655942400, + "value": 69978438.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1656028800, + "value": 62441367.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1656288000, + "value": 56900979.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1656374400, + "value": 58576794.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1656460800, + "value": 53105913.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1656547200, + "value": 61716366.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1656633600, + "value": 48110886.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1656979200, + "value": 54336840.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657065600, + "value": 45489657.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1657152000, + "value": 52164897.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657238400, + "value": 66933489.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657497600, + "value": 61863519.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1657584000, + "value": 56026785.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657670400, + "value": 62291388.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657756800, + "value": 50364726.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657843200, + "value": 40794570.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658102400, + "value": 52663089.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1658188800, + "value": 51763212.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658275200, + "value": 54030141.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658361600, + "value": 86439174.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658448000, + "value": 60837000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658707200, + "value": 39659769.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1658793600, + "value": 42541404.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1658880000, + "value": 55620006.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658966400, + "value": 53337165.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659052800, + "value": 58007934.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659312000, + "value": 71199081.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659398400, + "value": 59609352.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659484800, + "value": 49034241.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659571200, + "value": 44030208.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659657600, + "value": 67475064.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1659916800, + "value": 59549943.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1660003200, + "value": 52285851.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1660089600, + "value": 57884541.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1660176000, + "value": 43055865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1660262400, + "value": 49332492.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1660521600, + "value": 54710223.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1660608000, + "value": 55540302.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1660694400, + "value": 43278504.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1660780800, + "value": 28342434.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1660867200, + "value": 37094298.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661126400, + "value": 33285654.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661212800, + "value": 39575148.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1661299200, + "value": 11374931.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1661385600, + "value": 37975857.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661472000, + "value": 41690512.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661731200, + "value": 31229778.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1661817600, + "value": 36111921.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661904000, + "value": 36997072.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661990400, + "value": 39657641.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1662076800, + "value": 36972502.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1662422400, + "value": 39823707.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1662508800, + "value": 36023268.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1662595200, + "value": 40320418.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1662681600, + "value": 40244272.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1662940800, + "value": 35331535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1663027200, + "value": 47611133.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1663113600, + "value": 51667238.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1663200000, + "value": 48241149.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1663286400, + "value": 70185787.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1663545600, + "value": 44466573.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1663632000, + "value": 46760937.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1663718400, + "value": 46208549.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1663804800, + "value": 50406357.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1663891200, + "value": 44530343.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1664150400, + "value": 40779663.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1664236800, + "value": 45446685.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1664323200, + "value": 40051777.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1664409600, + "value": 56781305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1664496000, + "value": 49037220.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1664755200, + "value": 72670646.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1664841600, + "value": 82343604.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1664928000, + "value": 65285626.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665014400, + "value": 51843790.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665100800, + "value": 62463602.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665360000, + "value": 51669555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665446400, + "value": 59920745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665532800, + "value": 51834612.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665619200, + "value": 70560950.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1665705600, + "value": 72262028.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665964800, + "value": 64099875.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1666051200, + "value": 61738061.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1666137600, + "value": 50898030.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1666224000, + "value": 92683950.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1666310400, + "value": 58617759.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1666569600, + "value": 78968509.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1666656000, + "value": 79670683.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1666742400, + "value": 68562598.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1666828800, + "value": 49680215.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1666915200, + "value": 56109870.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1667174400, + "value": 49891734.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667260800, + "value": 49775576.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667347200, + "value": 49853305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667433600, + "value": 44646949.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667520000, + "value": 80308864.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667779200, + "value": 73397622.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667865600, + "value": 105514188.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667952000, + "value": 102644299.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668038400, + "value": 110460759.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1668124800, + "value": 95853553.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1668384000, + "value": 77319752.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668470400, + "value": 74960504.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668556800, + "value": 54096082.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668643200, + "value": 52118517.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668729600, + "value": 61891438.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668988800, + "value": 73810772.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1669075200, + "value": 64763513.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1669161600, + "value": 90934248.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1669334400, + "value": 41660711.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1669593600, + "value": 78408629.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1669680000, + "value": 68205280.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1669766400, + "value": 92743086.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1669852800, + "value": 65844119.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1669939200, + "value": 60902399.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1670198400, + "value": 75912778.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670284800, + "value": 76040783.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670371200, + "value": 69718106.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670457600, + "value": 80762690.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670544000, + "value": 88081017.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1670803200, + "value": 90494485.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670889600, + "value": 135812432.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670976000, + "value": 113815160.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671062400, + "value": 101035229.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1671148800, + "value": 113741284.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671408000, + "value": 118190710.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671494400, + "value": 131775303.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671580800, + "value": 123736453.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671667200, + "value": 177342265.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671753600, + "value": 141626063.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1672099200, + "value": 175910731.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1672185600, + "value": 186100201.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1672272000, + "value": 189503721.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1672358400, + "value": 136672797.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1672704000, + "value": 191557167.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1672790400, + "value": 153862552.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1672876800, + "value": 133687246.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1672963200, + "value": 184006970.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1673222400, + "value": 162885492.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1673308800, + "value": 144503095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1673395200, + "value": 158558924.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1673481600, + "value": 145833294.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1673568000, + "value": 157396482.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1673913600, + "value": 160937377.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674000000, + "value": 169078250.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1674086400, + "value": 152223302.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674172800, + "value": 123571951.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674432000, + "value": 177044569.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674518400, + "value": 140230986.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1674604800, + "value": 166419849.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674691200, + "value": 200431932.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674777600, + "value": 263157488.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675036800, + "value": 196790466.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1675123200, + "value": 172099948.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675209600, + "value": 187082506.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675296000, + "value": 186940474.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1675382400, + "value": 199115506.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675641600, + "value": 161365866.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675728000, + "value": 162102866.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675814400, + "value": 155395535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675900800, + "value": 181049895.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1675987200, + "value": 172846466.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1676246400, + "value": 147807152.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1676332800, + "value": 185629204.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1676419200, + "value": 152835862.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1676505600, + "value": 195125412.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1676592000, + "value": 183119234.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1676937600, + "value": 151695722.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677024000, + "value": 167116119.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1677110400, + "value": 126002008.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677196800, + "value": 121759004.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677456000, + "value": 135811509.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1677542400, + "value": 129887964.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677628800, + "value": 135485305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677715200, + "value": 154029003.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677801600, + "value": 132018423.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1678060800, + "value": 111186290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678147200, + "value": 127160413.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678233600, + "value": 130599496.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678320000, + "value": 142783264.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678406400, + "value": 163214327.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1678665600, + "value": 141125454.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678752000, + "value": 124651497.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1678838400, + "value": 124829688.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678924800, + "value": 103701677.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1679011200, + "value": 113188518.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1679270400, + "value": 111938751.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1679356800, + "value": 129806598.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1679443200, + "value": 127873104.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1679529600, + "value": 122801841.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1679616000, + "value": 100588036.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1679875200, + "value": 105008001.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1679961600, + "value": 85183670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1680048000, + "value": 107927597.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1680134400, + "value": 94431494.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1680220800, + "value": 146669747.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1680480000, + "value": 141493469.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1680566400, + "value": 105533822.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1680652800, + "value": 112676921.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1680739200, + "value": 105769070.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1681084800, + "value": 123177931.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1681171200, + "value": 100721415.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1681257600, + "value": 131472591.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1681344000, + "value": 99401779.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1681430400, + "value": 84119837.0, + "color": "rgba(200,127,130,0.8)" + } + + ], + "candleData": [ + { + "time": 1277769600, + "open": 1.2667, + "high": 1.6667, + "low": 1.1693, + "close": 1.5927, + "volume": 277519500.0 + }, + { + "time": 1277856000, + "open": 1.6713, + "high": 2.028, + "low": 1.5533, + "close": 1.5887, + "volume": 253039500.0 + }, + { + "time": 1277942400, + "open": 1.6627, + "high": 1.728, + "low": 1.3513, + "close": 1.464, + "volume": 121461000.0 + }, + { + "time": 1278028800, + "open": 1.47, + "high": 1.55, + "low": 1.2473, + "close": 1.28, + "volume": 75871500.0 + }, + { + "time": 1278374400, + "open": 1.2867, + "high": 1.3333, + "low": 1.0553, + "close": 1.074, + "volume": 101664000.0 + }, + { + "time": 1278460800, + "open": 1.0933, + "high": 1.1087, + "low": 0.9987, + "close": 1.0533, + "volume": 102645000.0 + }, + { + "time": 1278547200, + "open": 1.0567, + "high": 1.1793, + "low": 1.038, + "close": 1.164, + "volume": 114526500.0 + }, + { + "time": 1278633600, + "open": 1.18, + "high": 1.1933, + "low": 1.1033, + "close": 1.16, + "volume": 60061500.0 + }, + { + "time": 1278892800, + "open": 1.1533, + "high": 1.2047, + "low": 1.1233, + "close": 1.1413, + "volume": 32487000.0 + }, + { + "time": 1278979200, + "open": 1.1533, + "high": 1.2427, + "low": 1.1267, + "close": 1.2093, + "volume": 39439500.0 + }, + { + "time": 1279065600, + "open": 1.2067, + "high": 1.3433, + "low": 1.184, + "close": 1.3227, + "volume": 62097000.0 + }, + { + "time": 1279152000, + "open": 1.32, + "high": 1.4333, + "low": 1.2667, + "close": 1.326, + "volume": 55222500.0 + }, + { + "time": 1279238400, + "open": 1.3267, + "high": 1.42, + "low": 1.326, + "close": 1.376, + "volume": 37939500.0 + }, + { + "time": 1279497600, + "open": 1.4, + "high": 1.4893, + "low": 1.3867, + "close": 1.4367, + "volume": 36303000.0 + }, + { + "time": 1279584000, + "open": 1.466, + "high": 1.4853, + "low": 1.328, + "close": 1.3533, + "volume": 26229000.0 + }, + { + "time": 1279670400, + "open": 1.36, + "high": 1.41, + "low": 1.3, + "close": 1.348, + "volume": 18214500.0 + }, + { + "time": 1279756800, + "open": 1.3507, + "high": 1.4167, + "low": 1.35, + "close": 1.4, + "volume": 13924500.0 + }, + { + "time": 1279843200, + "open": 1.416, + "high": 1.4373, + "low": 1.4013, + "close": 1.4193, + "volume": 9603000.0 + }, + { + "time": 1280102400, + "open": 1.4187, + "high": 1.4513, + "low": 1.3533, + "close": 1.3953, + "volume": 13416000.0 + }, + { + "time": 1280188800, + "open": 1.3973, + "high": 1.412, + "low": 1.3507, + "close": 1.37, + "volume": 8658000.0 + }, + { + "time": 1280275200, + "open": 1.3673, + "high": 1.3933, + "low": 1.3673, + "close": 1.3813, + "volume": 6801000.0 + }, + { + "time": 1280361600, + "open": 1.3847, + "high": 1.392, + "low": 1.3333, + "close": 1.3567, + "volume": 8734500.0 + }, + { + "time": 1280448000, + "open": 1.3567, + "high": 1.3627, + "low": 1.3033, + "close": 1.3293, + "volume": 6258000.0 + }, + { + "time": 1280707200, + "open": 1.338, + "high": 1.4, + "low": 1.338, + "close": 1.3807, + "volume": 10417500.0 + }, + { + "time": 1280793600, + "open": 1.384, + "high": 1.4633, + "low": 1.3593, + "close": 1.4633, + "volume": 17827500.0 + }, + { + "time": 1280880000, + "open": 1.4867, + "high": 1.4867, + "low": 1.3407, + "close": 1.4173, + "volume": 13594500.0 + }, + { + "time": 1280966400, + "open": 1.3967, + "high": 1.442, + "low": 1.3367, + "close": 1.3633, + "volume": 11722500.0 + }, + { + "time": 1281052800, + "open": 1.336, + "high": 1.35, + "low": 1.3013, + "close": 1.306, + "volume": 10542000.0 + }, + { + "time": 1281312000, + "open": 1.302, + "high": 1.3333, + "low": 1.2967, + "close": 1.3053, + "volume": 10684500.0 + }, + { + "time": 1281398400, + "open": 1.3067, + "high": 1.31, + "low": 1.2547, + "close": 1.2687, + "volume": 17506500.0 + }, + { + "time": 1281484800, + "open": 1.2447, + "high": 1.26, + "low": 1.1833, + "close": 1.1933, + "volume": 11340000.0 + }, + { + "time": 1281571200, + "open": 1.1933, + "high": 1.2133, + "low": 1.1593, + "close": 1.1733, + "volume": 10168500.0 + }, + { + "time": 1281657600, + "open": 1.1847, + "high": 1.24, + "low": 1.1773, + "close": 1.2213, + "volume": 9385500.0 + }, + { + "time": 1281916800, + "open": 1.2333, + "high": 1.2533, + "low": 1.2173, + "close": 1.25, + "volume": 7186500.0 + }, + { + "time": 1282003200, + "open": 1.25, + "high": 1.2933, + "low": 1.25, + "close": 1.2767, + "volume": 6597000.0 + }, + { + "time": 1282089600, + "open": 1.28, + "high": 1.306, + "low": 1.2333, + "close": 1.2513, + "volume": 8905500.0 + }, + { + "time": 1282176000, + "open": 1.236, + "high": 1.2833, + "low": 1.222, + "close": 1.2527, + "volume": 8290500.0 + }, + { + "time": 1282262400, + "open": 1.2333, + "high": 1.2787, + "low": 1.2333, + "close": 1.2733, + "volume": 4381500.0 + }, + { + "time": 1282521600, + "open": 1.2727, + "high": 1.3593, + "low": 1.2667, + "close": 1.3467, + "volume": 16048500.0 + }, + { + "time": 1282608000, + "open": 1.3267, + "high": 1.3267, + "low": 1.2633, + "close": 1.28, + "volume": 9973500.0 + }, + { + "time": 1282694400, + "open": 1.2667, + "high": 1.332, + "low": 1.2373, + "close": 1.3267, + "volume": 7372500.0 + }, + { + "time": 1282780800, + "open": 1.316, + "high": 1.3513, + "low": 1.3067, + "close": 1.3167, + "volume": 6189000.0 + }, + { + "time": 1282867200, + "open": 1.3333, + "high": 1.334, + "low": 1.3, + "close": 1.3133, + "volume": 5628000.0 + }, + { + "time": 1283126400, + "open": 1.3133, + "high": 1.346, + "low": 1.3073, + "close": 1.32, + "volume": 10831500.0 + }, + { + "time": 1283212800, + "open": 1.292, + "high": 1.3193, + "low": 1.2887, + "close": 1.2987, + "volume": 2956500.0 + }, + { + "time": 1283299200, + "open": 1.308, + "high": 1.3793, + "low": 1.3067, + "close": 1.3633, + "volume": 7306500.0 + }, + { + "time": 1283385600, + "open": 1.3633, + "high": 1.416, + "low": 1.354, + "close": 1.404, + "volume": 7159500.0 + }, + { + "time": 1283472000, + "open": 1.4067, + "high": 1.4327, + "low": 1.3773, + "close": 1.4033, + "volume": 6402000.0 + }, + { + "time": 1283817600, + "open": 1.388, + "high": 1.4, + "low": 1.3667, + "close": 1.3693, + "volume": 3612000.0 + }, + { + "time": 1283904000, + "open": 1.372, + "high": 1.3967, + "low": 1.372, + "close": 1.3933, + "volume": 4281000.0 + }, + { + "time": 1283990400, + "open": 1.3953, + "high": 1.4033, + "low": 1.3347, + "close": 1.3807, + "volume": 5586000.0 + }, + { + "time": 1284076800, + "open": 1.3833, + "high": 1.3953, + "low": 1.3173, + "close": 1.3447, + "volume": 5706000.0 + }, + { + "time": 1284336000, + "open": 1.3733, + "high": 1.3933, + "low": 1.3667, + "close": 1.386, + "volume": 5361000.0 + }, + { + "time": 1284422400, + "open": 1.3693, + "high": 1.44, + "low": 1.3687, + "close": 1.408, + "volume": 9564000.0 + }, + { + "time": 1284508800, + "open": 1.3987, + "high": 1.4667, + "low": 1.386, + "close": 1.4653, + "volume": 9990000.0 + }, + { + "time": 1284595200, + "open": 1.4867, + "high": 1.544, + "low": 1.3873, + "close": 1.396, + "volume": 38347500.0 + }, + { + "time": 1284681600, + "open": 1.4213, + "high": 1.4233, + "low": 1.32, + "close": 1.3487, + "volume": 17478000.0 + }, + { + "time": 1284940800, + "open": 1.35, + "high": 1.4233, + "low": 1.344, + "close": 1.4, + "volume": 13968000.0 + }, + { + "time": 1285027200, + "open": 1.4193, + "high": 1.4367, + "low": 1.378, + "close": 1.3847, + "volume": 11749500.0 + }, + { + "time": 1285113600, + "open": 1.3913, + "high": 1.3967, + "low": 1.32, + "close": 1.3247, + "volume": 13227000.0 + }, + { + "time": 1285200000, + "open": 1.32, + "high": 1.3427, + "low": 1.3, + "close": 1.304, + "volume": 9856500.0 + }, + { + "time": 1285286400, + "open": 1.33, + "high": 1.346, + "low": 1.31, + "close": 1.34, + "volume": 8590500.0 + }, + { + "time": 1285545600, + "open": 1.3467, + "high": 1.3873, + "low": 1.3333, + "close": 1.386, + "volume": 6181500.0 + }, + { + "time": 1285632000, + "open": 1.398, + "high": 1.4327, + "low": 1.384, + "close": 1.4267, + "volume": 17905500.0 + }, + { + "time": 1285718400, + "open": 1.3667, + "high": 1.4733, + "low": 1.3667, + "close": 1.4653, + "volume": 27925500.0 + }, + { + "time": 1285804800, + "open": 1.466, + "high": 1.4767, + "low": 1.346, + "close": 1.3603, + "volume": 31186500.0 + }, + { + "time": 1285891200, + "open": 1.3867, + "high": 1.4167, + "low": 1.346, + "close": 1.3733, + "volume": 7783500.0 + }, + { + "time": 1286150400, + "open": 1.34, + "high": 1.4113, + "low": 1.34, + "close": 1.4, + "volume": 9444000.0 + }, + { + "time": 1286236800, + "open": 1.41, + "high": 1.4187, + "low": 1.4007, + "close": 1.408, + "volume": 4914000.0 + }, + { + "time": 1286323200, + "open": 1.404, + "high": 1.4173, + "low": 1.3547, + "close": 1.364, + "volume": 4617000.0 + }, + { + "time": 1286409600, + "open": 1.3713, + "high": 1.376, + "low": 1.354, + "close": 1.362, + "volume": 2064000.0 + }, + { + "time": 1286496000, + "open": 1.362, + "high": 1.386, + "low": 1.3573, + "close": 1.362, + "volume": 3973500.0 + }, + { + "time": 1286755200, + "open": 1.3667, + "high": 1.38, + "low": 1.338, + "close": 1.34, + "volume": 2497500.0 + }, + { + "time": 1286841600, + "open": 1.3467, + "high": 1.352, + "low": 1.3353, + "close": 1.3493, + "volume": 3405000.0 + }, + { + "time": 1286928000, + "open": 1.3507, + "high": 1.4233, + "low": 1.3507, + "close": 1.3693, + "volume": 4728000.0 + }, + { + "time": 1287014400, + "open": 1.4333, + "high": 1.4333, + "low": 1.36, + "close": 1.3833, + "volume": 4314000.0 + }, + { + "time": 1287100800, + "open": 1.3927, + "high": 1.3933, + "low": 1.35, + "close": 1.3693, + "volume": 4189500.0 + }, + { + "time": 1287360000, + "open": 1.376, + "high": 1.376, + "low": 1.348, + "close": 1.3487, + "volume": 2374500.0 + }, + { + "time": 1287446400, + "open": 1.3467, + "high": 1.3607, + "low": 1.3333, + "close": 1.3367, + "volume": 3601500.0 + }, + { + "time": 1287532800, + "open": 1.344, + "high": 1.3793, + "low": 1.336, + "close": 1.3767, + "volume": 4608000.0 + }, + { + "time": 1287619200, + "open": 1.374, + "high": 1.3967, + "low": 1.3633, + "close": 1.3833, + "volume": 6166500.0 + }, + { + "time": 1287705600, + "open": 1.3787, + "high": 1.3953, + "low": 1.37, + "close": 1.3813, + "volume": 2374500.0 + }, + { + "time": 1287964800, + "open": 1.3947, + "high": 1.3987, + "low": 1.382, + "close": 1.3987, + "volume": 1737000.0 + }, + { + "time": 1288051200, + "open": 1.3867, + "high": 1.458, + "low": 1.3673, + "close": 1.424, + "volume": 9744000.0 + }, + { + "time": 1288137600, + "open": 1.4, + "high": 1.4, + "low": 1.4, + "close": 1.4, + "volume": 0.0 + }, + { + "time": 1294272000, + "open": 1.7907, + "high": 1.8667, + "low": 1.7873, + "close": 1.8467, + "volume": 28846500.0 + }, + { + "time": 1294358400, + "open": 1.8533, + "high": 1.9053, + "low": 1.8533, + "close": 1.876, + "volume": 33460500.0 + }, + { + "time": 1294617600, + "open": 1.8773, + "high": 1.912, + "low": 1.87, + "close": 1.91, + "volume": 19849500.0 + }, + { + "time": 1294704000, + "open": 1.9073, + "high": 1.914, + "low": 1.782, + "close": 1.7973, + "volume": 25282500.0 + }, + { + "time": 1294790400, + "open": 1.8007, + "high": 1.8267, + "low": 1.768, + "close": 1.7973, + "volume": 13564500.0 + }, + { + "time": 1294876800, + "open": 1.7967, + "high": 1.7993, + "low": 1.744, + "close": 1.7533, + "volume": 10503000.0 + }, + { + "time": 1294963200, + "open": 1.7553, + "high": 1.772, + "low": 1.7073, + "close": 1.7193, + "volume": 17412000.0 + }, + { + "time": 1295308800, + "open": 1.74, + "high": 1.74, + "low": 1.65, + "close": 1.7093, + "volume": 23950500.0 + }, + { + "time": 1295395200, + "open": 1.6847, + "high": 1.698, + "low": 1.5833, + "close": 1.602, + "volume": 35040000.0 + }, + { + "time": 1295481600, + "open": 1.6133, + "high": 1.63, + "low": 1.4913, + "close": 1.5167, + "volume": 33759000.0 + }, + { + "time": 1295568000, + "open": 1.5247, + "high": 1.5727, + "low": 1.514, + "close": 1.5333, + "volume": 18036000.0 + }, + { + "time": 1295827200, + "open": 1.5567, + "high": 1.654, + "low": 1.5487, + "close": 1.6333, + "volume": 24352500.0 + }, + { + "time": 1295913600, + "open": 1.6433, + "high": 1.6593, + "low": 1.6013, + "close": 1.6453, + "volume": 18924000.0 + }, + { + "time": 1296000000, + "open": 1.66, + "high": 1.66, + "low": 1.6067, + "close": 1.65, + "volume": 16050000.0 + }, + { + "time": 1296086400, + "open": 1.6567, + "high": 1.672, + "low": 1.6353, + "close": 1.6647, + "volume": 12790500.0 + }, + { + "time": 1296172800, + "open": 1.6533, + "high": 1.6613, + "low": 1.5833, + "close": 1.6, + "volume": 15490500.0 + }, + { + "time": 1296432000, + "open": 1.6393, + "high": 1.6393, + "low": 1.5667, + "close": 1.6007, + "volume": 11974500.0 + }, + { + "time": 1296518400, + "open": 1.6367, + "high": 1.6487, + "low": 1.5693, + "close": 1.594, + "volume": 10473000.0 + }, + { + "time": 1296604800, + "open": 1.594, + "high": 1.612, + "low": 1.578, + "close": 1.596, + "volume": 8454000.0 + }, + { + "time": 1296691200, + "open": 1.588, + "high": 1.5933, + "low": 1.5433, + "close": 1.5807, + "volume": 7540500.0 + }, + { + "time": 1296777600, + "open": 1.5647, + "high": 1.578, + "low": 1.548, + "close": 1.5753, + "volume": 8067000.0 + }, + { + "time": 1297036800, + "open": 1.556, + "high": 1.5567, + "low": 1.5253, + "close": 1.538, + "volume": 13209000.0 + }, + { + "time": 1297123200, + "open": 1.534, + "high": 1.6833, + "low": 1.5333, + "close": 1.6327, + "volume": 51768000.0 + }, + { + "time": 1297209600, + "open": 1.6173, + "high": 1.6327, + "low": 1.5193, + "close": 1.5473, + "volume": 37779000.0 + }, + { + "time": 1297296000, + "open": 1.5333, + "high": 1.576, + "low": 1.5207, + "close": 1.5513, + "volume": 12324000.0 + }, + { + "time": 1297382400, + "open": 1.55, + "high": 1.5833, + "low": 1.5293, + "close": 1.5333, + "volume": 9424500.0 + }, + { + "time": 1297641600, + "open": 1.5487, + "high": 1.6093, + "low": 1.5367, + "close": 1.546, + "volume": 18984000.0 + }, + { + "time": 1297728000, + "open": 1.546, + "high": 1.5667, + "low": 1.4973, + "close": 1.5227, + "volume": 14146500.0 + }, + { + "time": 1297814400, + "open": 1.5333, + "high": 1.6647, + "low": 1.5273, + "close": 1.6487, + "volume": 60928500.0 + }, + { + "time": 1297900800, + "open": 1.6667, + "high": 1.6993, + "low": 1.558, + "close": 1.5833, + "volume": 38383500.0 + }, + { + "time": 1297987200, + "open": 1.5733, + "high": 1.5733, + "low": 1.5307, + "close": 1.5353, + "volume": 35118000.0 + }, + { + "time": 1298332800, + "open": 1.5807, + "high": 1.5807, + "low": 1.452, + "close": 1.458, + "volume": 30369000.0 + }, + { + "time": 1298419200, + "open": 1.496, + "high": 1.5, + "low": 1.4073, + "close": 1.4553, + "volume": 23451000.0 + }, + { + "time": 1298505600, + "open": 1.4667, + "high": 1.5053, + "low": 1.4333, + "close": 1.4813, + "volume": 15372000.0 + }, + { + "time": 1298592000, + "open": 1.5067, + "high": 1.59, + "low": 1.5053, + "close": 1.5687, + "volume": 19941000.0 + }, + { + "time": 1298851200, + "open": 1.5827, + "high": 1.6067, + "low": 1.5667, + "close": 1.574, + "volume": 15580500.0 + }, + { + "time": 1298937600, + "open": 1.5927, + "high": 1.6213, + "low": 1.58, + "close": 1.596, + "volume": 16422000.0 + }, + { + "time": 1299024000, + "open": 1.596, + "high": 1.6187, + "low": 1.582, + "close": 1.6013, + "volume": 9826500.0 + }, + { + "time": 1299110400, + "open": 1.632, + "high": 1.6527, + "low": 1.604, + "close": 1.6207, + "volume": 9478500.0 + }, + { + "time": 1299196800, + "open": 1.628, + "high": 1.666, + "low": 1.5853, + "close": 1.646, + "volume": 22677000.0 + }, + { + "time": 1299456000, + "open": 1.67, + "high": 1.6933, + "low": 1.6467, + "close": 1.6587, + "volume": 30210000.0 + }, + { + "time": 1299542400, + "open": 1.6587, + "high": 1.664, + "low": 1.6, + "close": 1.644, + "volume": 20715000.0 + }, + { + "time": 1299628800, + "open": 1.644, + "high": 1.666, + "low": 1.618, + "close": 1.648, + "volume": 13692000.0 + }, + { + "time": 1299715200, + "open": 1.6293, + "high": 1.648, + "low": 1.582, + "close": 1.6133, + "volume": 14049000.0 + }, + { + "time": 1299801600, + "open": 1.6047, + "high": 1.6167, + "low": 1.5687, + "close": 1.6033, + "volume": 13821000.0 + }, + { + "time": 1300060800, + "open": 1.5733, + "high": 1.608, + "low": 1.5467, + "close": 1.5507, + "volume": 17205000.0 + }, + { + "time": 1300147200, + "open": 1.4927, + "high": 1.5307, + "low": 1.4533, + "close": 1.53, + "volume": 19534500.0 + }, + { + "time": 1300233600, + "open": 1.524, + "high": 1.55, + "low": 1.5127, + "close": 1.5213, + "volume": 17208000.0 + }, + { + "time": 1300320000, + "open": 1.5433, + "high": 1.562, + "low": 1.5093, + "close": 1.5207, + "volume": 12612000.0 + }, + { + "time": 1300406400, + "open": 1.546, + "high": 1.546, + "low": 1.5007, + "close": 1.522, + "volume": 10195500.0 + }, + { + "time": 1300665600, + "open": 1.5333, + "high": 1.5467, + "low": 1.5027, + "close": 1.516, + "volume": 6057000.0 + }, + { + "time": 1300752000, + "open": 1.5153, + "high": 1.524, + "low": 1.4667, + "close": 1.4793, + "volume": 8097000.0 + }, + { + "time": 1300838400, + "open": 1.4707, + "high": 1.4847, + "low": 1.4513, + "close": 1.4807, + "volume": 5943000.0 + }, + { + "time": 1300924800, + "open": 1.48, + "high": 1.5, + "low": 1.4653, + "close": 1.5, + "volume": 6564000.0 + }, + { + "time": 1301011200, + "open": 1.4953, + "high": 1.5333, + "low": 1.4933, + "close": 1.5167, + "volume": 8416500.0 + }, + { + "time": 1301270400, + "open": 1.5307, + "high": 1.5693, + "low": 1.5033, + "close": 1.528, + "volume": 15309000.0 + }, + { + "time": 1301356800, + "open": 1.5533, + "high": 1.6, + "low": 1.5473, + "close": 1.5947, + "volume": 11188500.0 + }, + { + "time": 1301443200, + "open": 1.5933, + "high": 1.6327, + "low": 1.534, + "close": 1.5807, + "volume": 18003000.0 + }, + { + "time": 1301529600, + "open": 1.6093, + "high": 1.914, + "low": 1.6093, + "close": 1.842, + "volume": 163869000.0 + }, + { + "time": 1301616000, + "open": 1.8667, + "high": 1.8787, + "low": 1.7713, + "close": 1.7793, + "volume": 42078000.0 + }, + { + "time": 1301875200, + "open": 1.7687, + "high": 1.8, + "low": 1.682, + "close": 1.7207, + "volume": 38563500.0 + }, + { + "time": 1301961600, + "open": 1.7567, + "high": 1.8, + "low": 1.7127, + "close": 1.78, + "volume": 46600500.0 + }, + { + "time": 1302048000, + "open": 1.778, + "high": 1.8007, + "low": 1.72, + "close": 1.7633, + "volume": 18907500.0 + }, + { + "time": 1302134400, + "open": 1.772, + "high": 1.8627, + "low": 1.7633, + "close": 1.8273, + "volume": 41496000.0 + }, + { + "time": 1302220800, + "open": 1.846, + "high": 1.846, + "low": 1.7573, + "close": 1.7667, + "volume": 28378500.0 + }, + { + "time": 1302480000, + "open": 1.7833, + "high": 1.7833, + "low": 1.6667, + "close": 1.6667, + "volume": 20121000.0 + }, + { + "time": 1302566400, + "open": 1.6707, + "high": 1.6827, + "low": 1.62, + "close": 1.65, + "volume": 20044500.0 + }, + { + "time": 1302652800, + "open": 1.662, + "high": 1.7127, + "low": 1.6533, + "close": 1.6533, + "volume": 17970000.0 + }, + { + "time": 1302739200, + "open": 1.6527, + "high": 1.6853, + "low": 1.6133, + "close": 1.6767, + "volume": 14481000.0 + }, + { + "time": 1302825600, + "open": 1.7, + "high": 1.7453, + "low": 1.69, + "close": 1.6913, + "volume": 13975500.0 + }, + { + "time": 1303084800, + "open": 1.678, + "high": 1.708, + "low": 1.624, + "close": 1.6653, + "volume": 15267000.0 + }, + { + "time": 1303171200, + "open": 1.668, + "high": 1.684, + "low": 1.6433, + "close": 1.6833, + "volume": 8127000.0 + }, + { + "time": 1303257600, + "open": 1.7013, + "high": 1.7393, + "low": 1.6867, + "close": 1.72, + "volume": 12396000.0 + }, + { + "time": 1303344000, + "open": 1.72, + "high": 1.7987, + "low": 1.706, + "close": 1.7647, + "volume": 19473000.0 + }, + { + "time": 1303689600, + "open": 1.78, + "high": 1.79, + "low": 1.7313, + "close": 1.762, + "volume": 11760000.0 + }, + { + "time": 1303776000, + "open": 1.7647, + "high": 1.8167, + "low": 1.754, + "close": 1.7953, + "volume": 20268000.0 + }, + { + "time": 1303862400, + "open": 1.8007, + "high": 1.824, + "low": 1.7753, + "close": 1.8013, + "volume": 14770500.0 + }, + { + "time": 1303948800, + "open": 1.8167, + "high": 1.846, + "low": 1.7813, + "close": 1.83, + "volume": 23356500.0 + }, + { + "time": 1304035200, + "open": 1.846, + "high": 1.858, + "low": 1.82, + "close": 1.82, + "volume": 9780000.0 + }, + { + "time": 1304294400, + "open": 1.8467, + "high": 1.8533, + "low": 1.804, + "close": 1.816, + "volume": 11614500.0 + }, + { + "time": 1304380800, + "open": 1.8267, + "high": 1.83, + "low": 1.7667, + "close": 1.82, + "volume": 13510500.0 + }, + { + "time": 1304467200, + "open": 1.7853, + "high": 1.9333, + "low": 1.7167, + "close": 1.8467, + "volume": 15252000.0 + }, + { + "time": 1304553600, + "open": 1.8167, + "high": 1.864, + "low": 1.7447, + "close": 1.7987, + "volume": 17584500.0 + }, + { + "time": 1304640000, + "open": 1.7833, + "high": 1.8467, + "low": 1.7747, + "close": 1.808, + "volume": 13941000.0 + }, + { + "time": 1304899200, + "open": 1.8527, + "high": 1.8667, + "low": 1.79, + "close": 1.828, + "volume": 13521000.0 + }, + { + "time": 1304985600, + "open": 1.8733, + "high": 1.93, + "low": 1.8607, + "close": 1.8873, + "volume": 22632000.0 + }, + { + "time": 1305072000, + "open": 1.892, + "high": 1.892, + "low": 1.78, + "close": 1.79, + "volume": 14250000.0 + }, + { + "time": 1305158400, + "open": 1.7833, + "high": 1.85, + "low": 1.7567, + "close": 1.85, + "volume": 9286500.0 + }, + { + "time": 1305244800, + "open": 1.86, + "high": 1.8793, + "low": 1.82, + "close": 1.8333, + "volume": 9783000.0 + }, + { + "time": 1305504000, + "open": 1.85, + "high": 1.866, + "low": 1.77, + "close": 1.7787, + "volume": 11152500.0 + }, + { + "time": 1305590400, + "open": 1.85, + "high": 1.85, + "low": 1.7147, + "close": 1.722, + "volume": 18295500.0 + }, + { + "time": 1305676800, + "open": 1.6967, + "high": 1.7647, + "low": 1.6967, + "close": 1.7567, + "volume": 10804500.0 + }, + { + "time": 1305763200, + "open": 1.7793, + "high": 1.896, + "low": 1.7733, + "close": 1.8533, + "volume": 38518500.0 + }, + { + "time": 1305849600, + "open": 1.8867, + "high": 1.8867, + "low": 1.8233, + "close": 1.8653, + "volume": 12024000.0 + }, + { + "time": 1306108800, + "open": 1.8333, + "high": 1.8413, + "low": 1.7747, + "close": 1.776, + "volume": 12774000.0 + }, + { + "time": 1306195200, + "open": 1.8107, + "high": 1.8333, + "low": 1.77, + "close": 1.77, + "volume": 9003000.0 + }, + { + "time": 1306281600, + "open": 1.7987, + "high": 1.934, + "low": 1.7447, + "close": 1.926, + "volume": 69592500.0 + }, + { + "time": 1306368000, + "open": 1.9307, + "high": 1.984, + "low": 1.8733, + "close": 1.9667, + "volume": 48706500.0 + }, + { + "time": 1306454400, + "open": 1.9707, + "high": 1.978, + "low": 1.9213, + "close": 1.964, + "volume": 24933000.0 + }, + { + "time": 1306800000, + "open": 1.9747, + "high": 2.0187, + "low": 1.9667, + "close": 2.0127, + "volume": 48790500.0 + }, + { + "time": 1306886400, + "open": 2.0093, + "high": 2.0093, + "low": 1.884, + "close": 1.904, + "volume": 22666500.0 + }, + { + "time": 1306972800, + "open": 1.908, + "high": 1.9547, + "low": 1.8893, + "close": 1.95, + "volume": 14418000.0 + }, + { + "time": 1307059200, + "open": 1.9367, + "high": 2.1, + "low": 1.9327, + "close": 2.0, + "volume": 92074500.0 + }, + { + "time": 1307318400, + "open": 2.012, + "high": 2.0253, + "low": 1.884, + "close": 1.9167, + "volume": 34503000.0 + }, + { + "time": 1307404800, + "open": 1.928, + "high": 1.9593, + "low": 1.884, + "close": 1.89, + "volume": 17590500.0 + }, + { + "time": 1307491200, + "open": 1.8813, + "high": 1.9067, + "low": 1.8, + "close": 1.8073, + "volume": 25230000.0 + }, + { + "time": 1307577600, + "open": 1.8313, + "high": 1.8733, + "low": 1.8067, + "close": 1.8553, + "volume": 23793000.0 + }, + { + "time": 1307664000, + "open": 1.8313, + "high": 1.8867, + "low": 1.8233, + "close": 1.868, + "volume": 22432500.0 + }, + { + "time": 1307923200, + "open": 1.8713, + "high": 1.9253, + "low": 1.8587, + "close": 1.8967, + "volume": 25342500.0 + }, + { + "time": 1308009600, + "open": 1.928, + "high": 1.98, + "low": 1.9, + "close": 1.9, + "volume": 23337000.0 + }, + { + "time": 1308096000, + "open": 1.9, + "high": 1.9, + "low": 1.8047, + "close": 1.8533, + "volume": 19891500.0 + }, + { + "time": 1308182400, + "open": 1.8447, + "high": 1.8667, + "low": 1.716, + "close": 1.7487, + "volume": 26997000.0 + }, + { + "time": 1308268800, + "open": 1.778, + "high": 1.8467, + "low": 1.7427, + "close": 1.766, + "volume": 25465500.0 + }, + { + "time": 1308528000, + "open": 1.7733, + "high": 1.7733, + "low": 1.7, + "close": 1.734, + "volume": 22590000.0 + }, + { + "time": 1308614400, + "open": 1.7513, + "high": 1.8487, + "low": 1.7333, + "close": 1.8447, + "volume": 22168500.0 + }, + { + "time": 1308700800, + "open": 1.828, + "high": 1.8833, + "low": 1.802, + "close": 1.802, + "volume": 21912000.0 + }, + { + "time": 1308787200, + "open": 1.8053, + "high": 1.856, + "low": 1.7473, + "close": 1.856, + "volume": 17314500.0 + }, + { + "time": 1308873600, + "open": 1.8427, + "high": 1.8647, + "low": 1.8173, + "close": 1.8373, + "volume": 49531500.0 + }, + { + "time": 1309132800, + "open": 1.8487, + "high": 1.8853, + "low": 1.8207, + "close": 1.8307, + "volume": 16056000.0 + }, + { + "time": 1309219200, + "open": 1.852, + "high": 1.8833, + "low": 1.8447, + "close": 1.874, + "volume": 13153500.0 + }, + { + "time": 1309305600, + "open": 1.8887, + "high": 1.9393, + "low": 1.8713, + "close": 1.8873, + "volume": 21499500.0 + }, + { + "time": 1309392000, + "open": 1.9, + "high": 1.9553, + "low": 1.886, + "close": 1.912, + "volume": 13981500.0 + }, + { + "time": 1309478400, + "open": 1.938, + "high": 1.9733, + "low": 1.92, + "close": 1.9347, + "volume": 12570000.0 + }, + { + "time": 1309824000, + "open": 1.9347, + "high": 1.968, + "low": 1.914, + "close": 1.942, + "volume": 14746500.0 + }, + { + "time": 1309910400, + "open": 1.9633, + "high": 1.9633, + "low": 1.9033, + "close": 1.926, + "volume": 13030500.0 + }, + { + "time": 1309996800, + "open": 1.9427, + "high": 2.0, + "low": 1.934, + "close": 1.982, + "volume": 19233000.0 + }, + { + "time": 1310083200, + "open": 1.9733, + "high": 1.9927, + "low": 1.906, + "close": 1.916, + "volume": 18363000.0 + }, + { + "time": 1310342400, + "open": 1.9073, + "high": 1.9073, + "low": 1.8667, + "close": 1.8893, + "volume": 14514000.0 + }, + { + "time": 1310428800, + "open": 1.8667, + "high": 1.9393, + "low": 1.8667, + "close": 1.8667, + "volume": 15451500.0 + }, + { + "time": 1310515200, + "open": 1.8953, + "high": 1.9353, + "low": 1.86, + "close": 1.9113, + "volume": 15813000.0 + }, + { + "time": 1310601600, + "open": 1.902, + "high": 1.9307, + "low": 1.8167, + "close": 1.8407, + "volume": 17193000.0 + }, + { + "time": 1310688000, + "open": 1.8527, + "high": 1.8553, + "low": 1.8267, + "close": 1.8353, + "volume": 10407000.0 + }, + { + "time": 1310947200, + "open": 1.832, + "high": 1.85, + "low": 1.7753, + "close": 1.7953, + "volume": 12657000.0 + }, + { + "time": 1311033600, + "open": 1.8153, + "high": 1.874, + "low": 1.8153, + "close": 1.86, + "volume": 14488500.0 + }, + { + "time": 1311120000, + "open": 1.8667, + "high": 2.0293, + "low": 1.8533, + "close": 1.9187, + "volume": 45171000.0 + }, + { + "time": 1311206400, + "open": 1.9, + "high": 1.944, + "low": 1.8733, + "close": 1.914, + "volume": 14995500.0 + }, + { + "time": 1311292800, + "open": 1.9133, + "high": 1.9693, + "low": 1.9033, + "close": 1.9507, + "volume": 8658000.0 + }, + { + "time": 1311552000, + "open": 1.8913, + "high": 1.9527, + "low": 1.8733, + "close": 1.9173, + "volume": 9960000.0 + }, + { + "time": 1311638400, + "open": 1.86, + "high": 1.918, + "low": 1.86, + "close": 1.878, + "volume": 11218500.0 + }, + { + "time": 1311724800, + "open": 1.9, + "high": 1.9, + "low": 1.8273, + "close": 1.842, + "volume": 13981500.0 + }, + { + "time": 1311811200, + "open": 1.846, + "high": 1.9033, + "low": 1.836, + "close": 1.8653, + "volume": 13846500.0 + }, + { + "time": 1311897600, + "open": 1.8533, + "high": 1.8933, + "low": 1.8333, + "close": 1.878, + "volume": 13464000.0 + }, + { + "time": 1312156800, + "open": 1.9233, + "high": 1.932, + "low": 1.8807, + "close": 1.918, + "volume": 16134000.0 + }, + { + "time": 1312243200, + "open": 1.9127, + "high": 1.9467, + "low": 1.8, + "close": 1.8, + "volume": 21258000.0 + }, + { + "time": 1312329600, + "open": 1.8333, + "high": 1.9333, + "low": 1.75, + "close": 1.75, + "volume": 25755000.0 + }, + { + "time": 1312416000, + "open": 1.7567, + "high": 1.7927, + "low": 1.6447, + "close": 1.6833, + "volume": 44475000.0 + }, + { + "time": 1312502400, + "open": 1.6433, + "high": 1.692, + "low": 1.522, + "close": 1.6167, + "volume": 28983000.0 + }, + { + "time": 1312761600, + "open": 1.5167, + "high": 1.6293, + "low": 1.496, + "close": 1.572, + "volume": 38667000.0 + }, + { + "time": 1312848000, + "open": 1.5727, + "high": 1.6967, + "low": 1.5667, + "close": 1.6707, + "volume": 19720500.0 + }, + { + "time": 1312934400, + "open": 1.6907, + "high": 1.696, + "low": 1.5753, + "close": 1.6707, + "volume": 22410000.0 + }, + { + "time": 1313020800, + "open": 1.63, + "high": 1.7167, + "low": 1.6, + "close": 1.6867, + "volume": 12295500.0 + }, + { + "time": 1313107200, + "open": 1.7067, + "high": 1.8093, + "low": 1.6907, + "close": 1.754, + "volume": 14947500.0 + }, + { + "time": 1313366400, + "open": 1.77, + "high": 1.7833, + "low": 1.7287, + "close": 1.7493, + "volume": 10935000.0 + }, + { + "time": 1313452800, + "open": 1.7467, + "high": 1.7693, + "low": 1.722, + "close": 1.7393, + "volume": 7972500.0 + }, + { + "time": 1313539200, + "open": 1.7573, + "high": 1.7767, + "low": 1.6847, + "close": 1.6867, + "volume": 9489000.0 + }, + { + "time": 1313625600, + "open": 1.7, + "high": 1.7, + "low": 1.5647, + "close": 1.6173, + "volume": 15598500.0 + }, + { + "time": 1313712000, + "open": 1.564, + "high": 1.6173, + "low": 1.4667, + "close": 1.49, + "volume": 18744000.0 + }, + { + "time": 1313971200, + "open": 1.498, + "high": 1.5867, + "low": 1.4453, + "close": 1.4633, + "volume": 14208000.0 + }, + { + "time": 1314057600, + "open": 1.48, + "high": 1.5407, + "low": 1.4333, + "close": 1.4633, + "volume": 12903000.0 + }, + { + "time": 1314144000, + "open": 1.5333, + "high": 1.5953, + "low": 1.508, + "close": 1.5307, + "volume": 10108500.0 + }, + { + "time": 1314230400, + "open": 1.5913, + "high": 1.5913, + "low": 1.5267, + "close": 1.55, + "volume": 10123500.0 + }, + { + "time": 1314316800, + "open": 1.514, + "high": 1.5967, + "low": 1.4713, + "close": 1.582, + "volume": 11325000.0 + }, + { + "time": 1314576000, + "open": 1.596, + "high": 1.6567, + "low": 1.596, + "close": 1.6473, + "volume": 11877000.0 + }, + { + "time": 1314662400, + "open": 1.6333, + "high": 1.652, + "low": 1.606, + "close": 1.64, + "volume": 5392500.0 + }, + { + "time": 1314748800, + "open": 1.6453, + "high": 1.7, + "low": 1.6187, + "close": 1.646, + "volume": 12174000.0 + }, + { + "time": 1314835200, + "open": 1.644, + "high": 1.658, + "low": 1.5893, + "close": 1.6, + "volume": 12555000.0 + }, + { + "time": 1314921600, + "open": 1.6, + "high": 1.6, + "low": 1.512, + "close": 1.5713, + "volume": 11379000.0 + }, + { + "time": 1315267200, + "open": 1.5067, + "high": 1.5467, + "low": 1.486, + "close": 1.51, + "volume": 11688000.0 + }, + { + "time": 1315353600, + "open": 1.6, + "high": 1.6, + "low": 1.552, + "close": 1.5893, + "volume": 6774000.0 + }, + { + "time": 1315440000, + "open": 1.572, + "high": 1.602, + "low": 1.552, + "close": 1.5893, + "volume": 6633000.0 + }, + { + "time": 1315526400, + "open": 1.558, + "high": 1.574, + "low": 1.5033, + "close": 1.5313, + "volume": 9963000.0 + }, + { + "time": 1315785600, + "open": 1.4987, + "high": 1.554, + "low": 1.4967, + "close": 1.5253, + "volume": 8395500.0 + }, + { + "time": 1315872000, + "open": 1.5527, + "high": 1.6067, + "low": 1.5167, + "close": 1.6053, + "volume": 10750500.0 + }, + { + "time": 1315958400, + "open": 1.6133, + "high": 1.656, + "low": 1.586, + "close": 1.6227, + "volume": 12340500.0 + }, + { + "time": 1316044800, + "open": 1.6387, + "high": 1.662, + "low": 1.622, + "close": 1.6227, + "volume": 8277000.0 + }, + { + "time": 1316131200, + "open": 1.6533, + "high": 1.73, + "low": 1.6327, + "close": 1.73, + "volume": 20959500.0 + }, + { + "time": 1316390400, + "open": 1.7113, + "high": 1.7207, + "low": 1.588, + "close": 1.7173, + "volume": 17196000.0 + }, + { + "time": 1316476800, + "open": 1.7133, + "high": 1.7733, + "low": 1.7113, + "close": 1.7267, + "volume": 16471500.0 + }, + { + "time": 1316563200, + "open": 1.73, + "high": 1.7967, + "low": 1.7133, + "close": 1.7233, + "volume": 14565000.0 + }, + { + "time": 1316649600, + "open": 1.6933, + "high": 1.7407, + "low": 1.6187, + "close": 1.7093, + "volume": 11467500.0 + }, + { + "time": 1316736000, + "open": 1.6993, + "high": 1.7747, + "low": 1.69, + "close": 1.7547, + "volume": 16702500.0 + }, + { + "time": 1316995200, + "open": 1.768, + "high": 1.768, + "low": 1.66, + "close": 1.7133, + "volume": 13869000.0 + }, + { + "time": 1317081600, + "open": 1.7133, + "high": 1.7993, + "low": 1.7013, + "close": 1.746, + "volume": 9808500.0 + }, + { + "time": 1317168000, + "open": 1.75, + "high": 1.7667, + "low": 1.634, + "close": 1.6393, + "volume": 10636500.0 + }, + { + "time": 1317254400, + "open": 1.6667, + "high": 1.7213, + "low": 1.57, + "close": 1.608, + "volume": 12891000.0 + }, + { + "time": 1317340800, + "open": 1.6533, + "high": 1.6593, + "low": 1.566, + "close": 1.6253, + "volume": 19627500.0 + }, + { + "time": 1317600000, + "open": 1.6127, + "high": 1.6667, + "low": 1.55, + "close": 1.582, + "volume": 15189000.0 + }, + { + "time": 1317686400, + "open": 1.5493, + "high": 1.6213, + "low": 1.5287, + "close": 1.5773, + "volume": 17628000.0 + }, + { + "time": 1317772800, + "open": 1.5967, + "high": 1.7227, + "low": 1.5567, + "close": 1.692, + "volume": 17782500.0 + }, + { + "time": 1317859200, + "open": 1.6913, + "high": 1.84, + "low": 1.668, + "close": 1.7973, + "volume": 24651000.0 + }, + { + "time": 1317945600, + "open": 1.7447, + "high": 1.84, + "low": 1.7367, + "close": 1.7993, + "volume": 19497000.0 + }, + { + "time": 1318204800, + "open": 1.816, + "high": 1.8787, + "low": 1.8, + "close": 1.8587, + "volume": 12903000.0 + }, + { + "time": 1318291200, + "open": 1.834, + "high": 1.8513, + "low": 1.8, + "close": 1.8, + "volume": 8533500.0 + }, + { + "time": 1318377600, + "open": 1.8427, + "high": 1.8667, + "low": 1.8133, + "close": 1.8533, + "volume": 16698000.0 + }, + { + "time": 1318464000, + "open": 1.8353, + "high": 1.898, + "low": 1.8293, + "close": 1.8327, + "volume": 15391500.0 + }, + { + "time": 1318550400, + "open": 1.88, + "high": 1.9033, + "low": 1.8173, + "close": 1.87, + "volume": 20578500.0 + }, + { + "time": 1318809600, + "open": 1.8727, + "high": 1.8733, + "low": 1.8173, + "close": 1.828, + "volume": 11227500.0 + }, + { + "time": 1318896000, + "open": 1.82, + "high": 1.8953, + "low": 1.7807, + "close": 1.89, + "volume": 14308500.0 + }, + { + "time": 1318982400, + "open": 1.8667, + "high": 1.872, + "low": 1.82, + "close": 1.838, + "volume": 11691000.0 + }, + { + "time": 1319068800, + "open": 1.8333, + "high": 1.8333, + "low": 1.8, + "close": 1.8133, + "volume": 14899500.0 + }, + { + "time": 1319155200, + "open": 1.718, + "high": 1.8867, + "low": 1.718, + "close": 1.8687, + "volume": 14001000.0 + }, + { + "time": 1319414400, + "open": 1.8593, + "high": 1.926, + "low": 1.85, + "close": 1.904, + "volume": 13860000.0 + }, + { + "time": 1319500800, + "open": 1.882, + "high": 1.924, + "low": 1.8533, + "close": 1.9033, + "volume": 9043500.0 + }, + { + "time": 1319587200, + "open": 1.882, + "high": 1.8913, + "low": 1.8267, + "close": 1.8653, + "volume": 7510500.0 + }, + { + "time": 1319673600, + "open": 1.892, + "high": 1.9333, + "low": 1.8653, + "close": 1.9333, + "volume": 12655500.0 + }, + { + "time": 1319760000, + "open": 1.9473, + "high": 2.0167, + "low": 1.8673, + "close": 2.0167, + "volume": 18213000.0 + }, + { + "time": 1320019200, + "open": 1.9667, + "high": 1.9673, + "low": 1.9167, + "close": 1.958, + "volume": 16635000.0 + }, + { + "time": 1320105600, + "open": 1.9167, + "high": 1.958, + "low": 1.8667, + "close": 1.9033, + "volume": 9394500.0 + }, + { + "time": 1320192000, + "open": 1.948, + "high": 2.0553, + "low": 1.8833, + "close": 2.0167, + "volume": 12871500.0 + }, + { + "time": 1320278400, + "open": 1.9993, + "high": 2.1667, + "low": 1.9687, + "close": 2.1473, + "volume": 36706500.0 + }, + { + "time": 1320364800, + "open": 2.1167, + "high": 2.164, + "low": 2.034, + "close": 2.1533, + "volume": 43872000.0 + }, + { + "time": 1320624000, + "open": 2.1367, + "high": 2.1487, + "low": 2.05, + "close": 2.09, + "volume": 18619500.0 + }, + { + "time": 1320710400, + "open": 2.0867, + "high": 2.1333, + "low": 2.048, + "close": 2.0947, + "volume": 15342000.0 + }, + { + "time": 1320796800, + "open": 2.08, + "high": 2.0993, + "low": 2.02, + "close": 2.0567, + "volume": 14122500.0 + }, + { + "time": 1320883200, + "open": 2.0747, + "high": 2.1, + "low": 2.0433, + "close": 2.074, + "volume": 11065500.0 + }, + { + "time": 1320969600, + "open": 2.16, + "high": 2.3, + "low": 2.038, + "close": 2.2667, + "volume": 56487000.0 + }, + { + "time": 1321228800, + "open": 2.2347, + "high": 2.2427, + "low": 2.1747, + "close": 2.214, + "volume": 18837000.0 + }, + { + "time": 1321315200, + "open": 2.2, + "high": 2.2933, + "low": 2.182, + "close": 2.2547, + "volume": 13186500.0 + }, + { + "time": 1321401600, + "open": 2.2533, + "high": 2.3333, + "low": 2.2267, + "close": 2.318, + "volume": 26086500.0 + }, + { + "time": 1321488000, + "open": 2.318, + "high": 2.3267, + "low": 2.2127, + "close": 2.2453, + "volume": 20025000.0 + }, + { + "time": 1321574400, + "open": 2.2667, + "high": 2.274, + "low": 2.1633, + "close": 2.1633, + "volume": 13359000.0 + }, + { + "time": 1321833600, + "open": 2.1733, + "high": 2.1733, + "low": 2.07, + "close": 2.108, + "volume": 15288000.0 + }, + { + "time": 1321920000, + "open": 2.1173, + "high": 2.186, + "low": 2.07, + "close": 2.138, + "volume": 10806000.0 + }, + { + "time": 1322006400, + "open": 2.1173, + "high": 2.1367, + "low": 2.0833, + "close": 2.0967, + "volume": 6690000.0 + }, + { + "time": 1322179200, + "open": 2.092, + "high": 2.1607, + "low": 2.072, + "close": 2.1333, + "volume": 3430500.0 + }, + { + "time": 1322438400, + "open": 2.1267, + "high": 2.2187, + "low": 2.1207, + "close": 2.1707, + "volume": 10074000.0 + }, + { + "time": 1322524800, + "open": 2.1707, + "high": 2.2047, + "low": 2.1087, + "close": 2.1707, + "volume": 8560500.0 + }, + { + "time": 1322611200, + "open": 2.1333, + "high": 2.1953, + "low": 2.1333, + "close": 2.182, + "volume": 11122500.0 + }, + { + "time": 1322697600, + "open": 2.1713, + "high": 2.266, + "low": 2.132, + "close": 2.194, + "volume": 14413500.0 + }, + { + "time": 1322784000, + "open": 2.1773, + "high": 2.246, + "low": 2.16, + "close": 2.2053, + "volume": 10338000.0 + }, + { + "time": 1323043200, + "open": 2.236, + "high": 2.3333, + "low": 2.2287, + "close": 2.294, + "volume": 15996000.0 + }, + { + "time": 1323129600, + "open": 2.28, + "high": 2.332, + "low": 2.2687, + "close": 2.3173, + "volume": 14083500.0 + }, + { + "time": 1323216000, + "open": 2.3107, + "high": 2.326, + "low": 2.2533, + "close": 2.2793, + "volume": 9607500.0 + }, + { + "time": 1323302400, + "open": 2.236, + "high": 2.236, + "low": 1.974, + "close": 2.0633, + "volume": 48607500.0 + }, + { + "time": 1323388800, + "open": 2.0867, + "high": 2.09, + "low": 2.0187, + "close": 2.07, + "volume": 18294000.0 + }, + { + "time": 1323648000, + "open": 2.03, + "high": 2.0413, + "low": 2.0013, + "close": 2.0273, + "volume": 11262000.0 + }, + { + "time": 1323734400, + "open": 2.0353, + "high": 2.062, + "low": 1.9273, + "close": 2.0273, + "volume": 14616000.0 + }, + { + "time": 1323820800, + "open": 1.9667, + "high": 1.9787, + "low": 1.8667, + "close": 1.9, + "volume": 17221500.0 + }, + { + "time": 1323907200, + "open": 1.9073, + "high": 1.9447, + "low": 1.8747, + "close": 1.908, + "volume": 10383000.0 + }, + { + "time": 1323993600, + "open": 2.0627, + "high": 2.0627, + "low": 1.8653, + "close": 1.8667, + "volume": 14853000.0 + }, + { + "time": 1324252800, + "open": 1.872, + "high": 1.9, + "low": 1.8247, + "close": 1.85, + "volume": 14272500.0 + }, + { + "time": 1324339200, + "open": 1.8667, + "high": 1.8967, + "low": 1.8467, + "close": 1.888, + "volume": 12039000.0 + }, + { + "time": 1324425600, + "open": 1.88, + "high": 1.88, + "low": 1.7353, + "close": 1.8667, + "volume": 25294500.0 + }, + { + "time": 1324512000, + "open": 1.8327, + "high": 1.87, + "low": 1.8, + "close": 1.866, + "volume": 14973000.0 + }, + { + "time": 1324598400, + "open": 1.8653, + "high": 1.8667, + "low": 1.8347, + "close": 1.8633, + "volume": 8787000.0 + }, + { + "time": 1324944000, + "open": 1.86, + "high": 1.918, + "low": 1.8367, + "close": 1.86, + "volume": 10927500.0 + }, + { + "time": 1325030400, + "open": 1.9267, + "high": 1.9493, + "low": 1.8693, + "close": 1.9047, + "volume": 8535000.0 + }, + { + "time": 1325116800, + "open": 1.906, + "high": 1.956, + "low": 1.9007, + "close": 1.9007, + "volume": 7056000.0 + }, + { + "time": 1325203200, + "open": 1.8993, + "high": 1.932, + "low": 1.8833, + "close": 1.904, + "volume": 4962000.0 + }, + { + "time": 1325548800, + "open": 1.9233, + "high": 1.9667, + "low": 1.8433, + "close": 1.872, + "volume": 13644000.0 + }, + { + "time": 1325635200, + "open": 1.9053, + "high": 1.9113, + "low": 1.8333, + "close": 1.8473, + "volume": 9174000.0 + }, + { + "time": 1325721600, + "open": 1.8507, + "high": 1.862, + "low": 1.79, + "close": 1.808, + "volume": 14919000.0 + }, + { + "time": 1325808000, + "open": 1.814, + "high": 1.8527, + "low": 1.7607, + "close": 1.808, + "volume": 14559000.0 + }, + { + "time": 1326067200, + "open": 1.8, + "high": 1.8327, + "low": 1.7413, + "close": 1.8127, + "volume": 13207500.0 + }, + { + "time": 1326153600, + "open": 1.8293, + "high": 1.8507, + "low": 1.8167, + "close": 1.85, + "volume": 9924000.0 + }, + { + "time": 1326240000, + "open": 1.8587, + "high": 1.9113, + "low": 1.82, + "close": 1.9113, + "volume": 9738000.0 + }, + { + "time": 1326326400, + "open": 1.8987, + "high": 1.908, + "low": 1.8533, + "close": 1.8833, + "volume": 9886500.0 + }, + { + "time": 1326412800, + "open": 1.8933, + "high": 1.9, + "low": 1.5093, + "close": 1.6373, + "volume": 80587500.0 + }, + { + "time": 1326758400, + "open": 1.7033, + "high": 1.8227, + "low": 1.6767, + "close": 1.7667, + "volume": 68454000.0 + }, + { + "time": 1326844800, + "open": 1.7667, + "high": 1.7993, + "low": 1.75, + "close": 1.7873, + "volume": 17664000.0 + }, + { + "time": 1326931200, + "open": 1.8, + "high": 1.8493, + "low": 1.774, + "close": 1.7787, + "volume": 18375000.0 + }, + { + "time": 1327017600, + "open": 1.7933, + "high": 1.8, + "low": 1.7507, + "close": 1.7507, + "volume": 9475500.0 + }, + { + "time": 1327276800, + "open": 1.79, + "high": 1.814, + "low": 1.7733, + "close": 1.788, + "volume": 8737500.0 + }, + { + "time": 1327363200, + "open": 1.7753, + "high": 1.8453, + "low": 1.7627, + "close": 1.8133, + "volume": 12381000.0 + }, + { + "time": 1327449600, + "open": 1.8133, + "high": 1.8673, + "low": 1.8033, + "close": 1.8647, + "volume": 8737500.0 + }, + { + "time": 1327536000, + "open": 1.8667, + "high": 1.972, + "low": 1.8647, + "close": 1.8647, + "volume": 17626500.0 + }, + { + "time": 1327622400, + "open": 1.9, + "high": 1.9813, + "low": 1.9, + "close": 1.9487, + "volume": 10332000.0 + }, + { + "time": 1327881600, + "open": 1.966, + "high": 1.974, + "low": 1.902, + "close": 1.974, + "volume": 10779000.0 + }, + { + "time": 1327968000, + "open": 2.0, + "high": 2.0333, + "low": 1.9247, + "close": 1.9387, + "volume": 13840500.0 + }, + { + "time": 1328054400, + "open": 1.9333, + "high": 1.98, + "low": 1.9207, + "close": 1.964, + "volume": 7369500.0 + }, + { + "time": 1328140800, + "open": 1.9813, + "high": 2.0587, + "low": 1.9727, + "close": 1.9727, + "volume": 11790000.0 + }, + { + "time": 1328227200, + "open": 2.032, + "high": 2.0887, + "low": 2.0167, + "close": 2.074, + "volume": 11242500.0 + }, + { + "time": 1328486400, + "open": 2.0667, + "high": 2.1267, + "low": 2.066, + "close": 2.12, + "volume": 9498000.0 + }, + { + "time": 1328572800, + "open": 2.1167, + "high": 2.142, + "low": 2.0547, + "close": 2.1067, + "volume": 14199000.0 + }, + { + "time": 1328659200, + "open": 2.1333, + "high": 2.134, + "low": 2.086, + "close": 2.1207, + "volume": 9072000.0 + }, + { + "time": 1328745600, + "open": 2.1287, + "high": 2.2467, + "low": 2.0953, + "close": 2.1853, + "volume": 17317500.0 + }, + { + "time": 1328832000, + "open": 2.158, + "high": 2.1613, + "low": 1.9893, + "close": 2.0733, + "volume": 27693000.0 + }, + { + "time": 1329091200, + "open": 2.0907, + "high": 2.1373, + "low": 2.06, + "close": 2.094, + "volume": 16954500.0 + }, + { + "time": 1329177600, + "open": 2.13, + "high": 2.2633, + "low": 2.0933, + "close": 2.2633, + "volume": 26682000.0 + }, + { + "time": 1329264000, + "open": 2.2667, + "high": 2.3953, + "low": 2.1513, + "close": 2.29, + "volume": 40675500.0 + }, + { + "time": 1329350400, + "open": 2.2667, + "high": 2.3007, + "low": 2.1693, + "close": 2.3007, + "volume": 32883000.0 + }, + { + "time": 1329436800, + "open": 2.3253, + "high": 2.334, + "low": 2.2333, + "close": 2.316, + "volume": 20112000.0 + }, + { + "time": 1329782400, + "open": 2.32, + "high": 2.3433, + "low": 2.254, + "close": 2.3033, + "volume": 16618500.0 + }, + { + "time": 1329868800, + "open": 2.3, + "high": 2.3147, + "low": 2.1667, + "close": 2.27, + "volume": 23985000.0 + }, + { + "time": 1329955200, + "open": 2.266, + "high": 2.3313, + "low": 2.2373, + "close": 2.3013, + "volume": 11665500.0 + }, + { + "time": 1330041600, + "open": 2.2933, + "high": 2.3013, + "low": 2.218, + "close": 2.2533, + "volume": 14241000.0 + }, + { + "time": 1330300800, + "open": 2.244, + "high": 2.2667, + "low": 2.2, + "close": 2.2413, + "volume": 8934000.0 + }, + { + "time": 1330387200, + "open": 2.2427, + "high": 2.296, + "low": 2.2113, + "close": 2.2607, + "volume": 9070500.0 + }, + { + "time": 1330473600, + "open": 2.254, + "high": 2.2747, + "low": 2.2087, + "close": 2.2087, + "volume": 7635000.0 + }, + { + "time": 1330560000, + "open": 2.2373, + "high": 2.3, + "low": 2.22, + "close": 2.294, + "volume": 8875500.0 + }, + { + "time": 1330646400, + "open": 2.2933, + "high": 2.3, + "low": 2.2473, + "close": 2.2727, + "volume": 7927500.0 + }, + { + "time": 1330905600, + "open": 2.2733, + "high": 2.2933, + "low": 2.2307, + "close": 2.2513, + "volume": 6894000.0 + }, + { + "time": 1330992000, + "open": 2.2267, + "high": 2.2267, + "low": 2.1747, + "close": 2.1987, + "volume": 7669500.0 + }, + { + "time": 1331078400, + "open": 2.208, + "high": 2.2213, + "low": 2.194, + "close": 2.208, + "volume": 5398500.0 + }, + { + "time": 1331164800, + "open": 2.2073, + "high": 2.2327, + "low": 2.2027, + "close": 2.2047, + "volume": 8953500.0 + }, + { + "time": 1331251200, + "open": 2.2133, + "high": 2.354, + "low": 2.2133, + "close": 2.3307, + "volume": 22969500.0 + }, + { + "time": 1331510400, + "open": 2.3127, + "high": 2.4193, + "low": 2.3067, + "close": 2.4067, + "volume": 28791000.0 + }, + { + "time": 1331596800, + "open": 2.4007, + "high": 2.4393, + "low": 2.3667, + "close": 2.3793, + "volume": 14412000.0 + }, + { + "time": 1331683200, + "open": 2.4, + "high": 2.4007, + "low": 2.32, + "close": 2.3553, + "volume": 12595500.0 + }, + { + "time": 1331769600, + "open": 2.352, + "high": 2.3653, + "low": 2.3187, + "close": 2.3387, + "volume": 8461500.0 + }, + { + "time": 1331856000, + "open": 2.3287, + "high": 2.3927, + "low": 2.322, + "close": 2.3533, + "volume": 10819500.0 + }, + { + "time": 1332115200, + "open": 2.3507, + "high": 2.3547, + "low": 2.3027, + "close": 2.332, + "volume": 14856000.0 + }, + { + "time": 1332201600, + "open": 2.332, + "high": 2.3467, + "low": 2.3047, + "close": 2.3307, + "volume": 8392500.0 + }, + { + "time": 1332288000, + "open": 2.3293, + "high": 2.354, + "low": 2.3067, + "close": 2.336, + "volume": 8650500.0 + }, + { + "time": 1332374400, + "open": 2.3467, + "high": 2.3467, + "low": 2.2867, + "close": 2.3173, + "volume": 7563000.0 + }, + { + "time": 1332460800, + "open": 2.2833, + "high": 2.3087, + "low": 2.21, + "close": 2.29, + "volume": 16336500.0 + }, + { + "time": 1332720000, + "open": 2.3333, + "high": 2.5393, + "low": 2.3333, + "close": 2.4833, + "volume": 46437000.0 + }, + { + "time": 1332806400, + "open": 2.4833, + "high": 2.6633, + "low": 2.4687, + "close": 2.588, + "volume": 36403500.0 + }, + { + "time": 1332892800, + "open": 2.5547, + "high": 2.5627, + "low": 2.474, + "close": 2.506, + "volume": 13975500.0 + }, + { + "time": 1332979200, + "open": 2.4707, + "high": 2.546, + "low": 2.4667, + "close": 2.4887, + "volume": 10455000.0 + }, + { + "time": 1333065600, + "open": 2.5013, + "high": 2.5293, + "low": 2.4453, + "close": 2.48, + "volume": 11152500.0 + }, + { + "time": 1333324800, + "open": 2.4733, + "high": 2.5313, + "low": 2.4353, + "close": 2.44, + "volume": 13074000.0 + }, + { + "time": 1333411200, + "open": 2.4433, + "high": 2.5647, + "low": 2.396, + "close": 2.4, + "volume": 16107000.0 + }, + { + "time": 1333497600, + "open": 2.41, + "high": 2.41, + "low": 2.3127, + "close": 2.33, + "volume": 66337500.0 + }, + { + "time": 1333584000, + "open": 2.3507, + "high": 2.3627, + "low": 2.2927, + "close": 2.2927, + "volume": 21292500.0 + }, + { + "time": 1333929600, + "open": 2.2733, + "high": 2.308, + "low": 2.2, + "close": 2.2, + "volume": 24487500.0 + }, + { + "time": 1334016000, + "open": 2.2127, + "high": 2.2567, + "low": 2.14, + "close": 2.1653, + "volume": 25423500.0 + }, + { + "time": 1334102400, + "open": 2.1953, + "high": 2.2193, + "low": 2.134, + "close": 2.2007, + "volume": 16089000.0 + }, + { + "time": 1334188800, + "open": 2.2333, + "high": 2.2987, + "low": 2.1947, + "close": 2.2387, + "volume": 14713500.0 + }, + { + "time": 1334275200, + "open": 2.2267, + "high": 2.2693, + "low": 2.19, + "close": 2.2533, + "volume": 9622500.0 + }, + { + "time": 1334534400, + "open": 2.2273, + "high": 2.2467, + "low": 2.1393, + "close": 2.1633, + "volume": 15481500.0 + }, + { + "time": 1334620800, + "open": 2.15, + "high": 2.2047, + "low": 2.136, + "close": 2.1493, + "volume": 16413000.0 + }, + { + "time": 1334707200, + "open": 2.1407, + "high": 2.188, + "low": 2.102, + "close": 2.1773, + "volume": 12088500.0 + }, + { + "time": 1334793600, + "open": 2.1087, + "high": 2.2287, + "low": 2.1087, + "close": 2.198, + "volume": 11424000.0 + }, + { + "time": 1334880000, + "open": 2.2433, + "high": 2.2567, + "low": 2.196, + "close": 2.2107, + "volume": 12180000.0 + }, + { + "time": 1335139200, + "open": 2.2113, + "high": 2.2113, + "low": 2.114, + "close": 2.1293, + "volume": 13161000.0 + }, + { + "time": 1335225600, + "open": 2.1493, + "high": 2.1493, + "low": 2.0667, + "close": 2.1233, + "volume": 9708000.0 + }, + { + "time": 1335312000, + "open": 2.1267, + "high": 2.1993, + "low": 2.1267, + "close": 2.194, + "volume": 10542000.0 + }, + { + "time": 1335398400, + "open": 2.194, + "high": 2.2367, + "low": 2.194, + "close": 2.2367, + "volume": 6229500.0 + }, + { + "time": 1335484800, + "open": 2.3013, + "high": 2.3013, + "low": 2.194, + "close": 2.2227, + "volume": 8539500.0 + }, + { + "time": 1335744000, + "open": 2.218, + "high": 2.224, + "low": 2.172, + "close": 2.22, + "volume": 6088500.0 + }, + { + "time": 1335830400, + "open": 2.216, + "high": 2.2807, + "low": 2.2087, + "close": 2.252, + "volume": 9690000.0 + }, + { + "time": 1335916800, + "open": 2.2233, + "high": 2.2927, + "low": 2.2233, + "close": 2.2627, + "volume": 7291500.0 + }, + { + "time": 1336003200, + "open": 2.2747, + "high": 2.2747, + "low": 2.14, + "close": 2.14, + "volume": 12472500.0 + }, + { + "time": 1336089600, + "open": 2.1573, + "high": 2.164, + "low": 2.0933, + "close": 2.12, + "volume": 18291000.0 + }, + { + "time": 1336348800, + "open": 2.1233, + "high": 2.172, + "low": 2.1073, + "close": 2.1647, + "volume": 16948500.0 + }, + { + "time": 1336435200, + "open": 2.1647, + "high": 2.186, + "low": 1.958, + "close": 2.038, + "volume": 45520500.0 + }, + { + "time": 1336521600, + "open": 2.004, + "high": 2.1933, + "low": 1.9667, + "close": 2.1173, + "volume": 28653000.0 + }, + { + "time": 1336608000, + "open": 2.12, + "high": 2.312, + "low": 2.1173, + "close": 2.1973, + "volume": 82389000.0 + }, + { + "time": 1336694400, + "open": 2.1867, + "high": 2.2293, + "low": 2.144, + "close": 2.18, + "volume": 18039000.0 + }, + { + "time": 1336953600, + "open": 2.1333, + "high": 2.142, + "low": 2.0007, + "close": 2.0107, + "volume": 20400000.0 + }, + { + "time": 1337040000, + "open": 2.024, + "high": 2.064, + "low": 1.948, + "close": 1.9827, + "volume": 22992000.0 + }, + { + "time": 1337126400, + "open": 1.9933, + "high": 2.012, + "low": 1.9253, + "close": 1.9627, + "volume": 18601500.0 + }, + { + "time": 1337212800, + "open": 1.9613, + "high": 1.986, + "low": 1.8827, + "close": 1.8987, + "volume": 16810500.0 + }, + { + "time": 1337299200, + "open": 1.8933, + "high": 1.8973, + "low": 1.7887, + "close": 1.8487, + "volume": 22939500.0 + }, + { + "time": 1337558400, + "open": 1.856, + "high": 1.9507, + "low": 1.808, + "close": 1.918, + "volume": 21505500.0 + }, + { + "time": 1337644800, + "open": 1.974, + "high": 2.0893, + "low": 1.966, + "close": 2.0527, + "volume": 35101500.0 + }, + { + "time": 1337731200, + "open": 2.0527, + "high": 2.07, + "low": 1.9667, + "close": 2.014, + "volume": 18036000.0 + }, + { + "time": 1337817600, + "open": 2.0833, + "high": 2.0833, + "low": 1.9793, + "close": 2.0053, + "volume": 15760500.0 + }, + { + "time": 1337904000, + "open": 2.0267, + "high": 2.0273, + "low": 1.9467, + "close": 1.9753, + "volume": 11173500.0 + }, + { + "time": 1338249600, + "open": 2.0007, + "high": 2.1287, + "low": 2.0007, + "close": 2.1127, + "volume": 23724000.0 + }, + { + "time": 1338336000, + "open": 2.072, + "high": 2.0947, + "low": 2.016, + "close": 2.0267, + "volume": 19323000.0 + }, + { + "time": 1338422400, + "open": 2.0493, + "high": 2.05, + "low": 1.9167, + "close": 1.9913, + "volume": 15906000.0 + }, + { + "time": 1338508800, + "open": 1.94, + "high": 1.9467, + "low": 1.8507, + "close": 1.886, + "volume": 13029000.0 + }, + { + "time": 1338768000, + "open": 1.8533, + "high": 1.894, + "low": 1.8073, + "close": 1.8567, + "volume": 15243000.0 + }, + { + "time": 1338854400, + "open": 1.8607, + "high": 1.8927, + "low": 1.8373, + "close": 1.8607, + "volume": 9331500.0 + }, + { + "time": 1338940800, + "open": 1.872, + "high": 1.9887, + "low": 1.872, + "close": 1.9887, + "volume": 13300500.0 + }, + { + "time": 1339027200, + "open": 1.9993, + "high": 2.0, + "low": 1.9233, + "close": 1.9293, + "volume": 7242000.0 + }, + { + "time": 1339113600, + "open": 1.9267, + "high": 2.0127, + "low": 1.8767, + "close": 2.0053, + "volume": 12514500.0 + }, + { + "time": 1339372800, + "open": 2.0547, + "high": 2.0667, + "low": 1.9227, + "close": 1.9227, + "volume": 9043500.0 + }, + { + "time": 1339459200, + "open": 1.9413, + "high": 1.9893, + "low": 1.9207, + "close": 1.952, + "volume": 8221500.0 + }, + { + "time": 1339545600, + "open": 1.97, + "high": 2.0427, + "low": 1.9647, + "close": 1.9847, + "volume": 12510000.0 + }, + { + "time": 1339632000, + "open": 2.014, + "high": 2.0433, + "low": 1.908, + "close": 1.9593, + "volume": 12885000.0 + }, + { + "time": 1339718400, + "open": 1.9593, + "high": 1.9967, + "low": 1.9207, + "close": 1.988, + "volume": 8910000.0 + }, + { + "time": 1339977600, + "open": 2.0167, + "high": 2.1553, + "low": 1.9667, + "close": 2.004, + "volume": 17913000.0 + }, + { + "time": 1340064000, + "open": 2.12, + "high": 2.1773, + "low": 2.1, + "close": 2.1507, + "volume": 13380000.0 + }, + { + "time": 1340150400, + "open": 2.1807, + "high": 2.3, + "low": 2.1807, + "close": 2.252, + "volume": 50334000.0 + }, + { + "time": 1340236800, + "open": 2.24, + "high": 2.2853, + "low": 2.1227, + "close": 2.1507, + "volume": 25275000.0 + }, + { + "time": 1340323200, + "open": 2.1733, + "high": 2.2653, + "low": 2.1527, + "close": 2.252, + "volume": 44323500.0 + }, + { + "time": 1340582400, + "open": 2.2927, + "high": 2.2927, + "low": 2.1207, + "close": 2.1267, + "volume": 22111500.0 + }, + { + "time": 1340668800, + "open": 2.138, + "high": 2.1567, + "low": 2.092, + "close": 2.0933, + "volume": 37164000.0 + }, + { + "time": 1340755200, + "open": 2.1307, + "high": 2.1633, + "low": 2.1047, + "close": 2.1307, + "volume": 14725500.0 + }, + { + "time": 1340841600, + "open": 2.1413, + "high": 2.1413, + "low": 2.0413, + "close": 2.094, + "volume": 13173000.0 + }, + { + "time": 1340928000, + "open": 2.1213, + "high": 2.262, + "low": 2.0667, + "close": 2.086, + "volume": 15910500.0 + }, + { + "time": 1341187200, + "open": 2.086, + "high": 2.12, + "low": 2.0127, + "close": 2.0267, + "volume": 19246500.0 + }, + { + "time": 1341273600, + "open": 2.0333, + "high": 2.0667, + "low": 2.0267, + "close": 2.0393, + "volume": 13993500.0 + }, + { + "time": 1341446400, + "open": 2.0733, + "high": 2.1113, + "low": 2.0467, + "close": 2.0833, + "volume": 18108000.0 + }, + { + "time": 1341532800, + "open": 2.088, + "high": 2.1153, + "low": 2.0473, + "close": 2.0473, + "volume": 10950000.0 + }, + { + "time": 1341792000, + "open": 2.0627, + "high": 2.122, + "low": 2.0447, + "close": 2.0993, + "volume": 13303500.0 + }, + { + "time": 1341878400, + "open": 2.094, + "high": 2.1653, + "low": 2.0593, + "close": 2.08, + "volume": 10500000.0 + }, + { + "time": 1341964800, + "open": 2.0907, + "high": 2.112, + "low": 2.0673, + "close": 2.0887, + "volume": 8515500.0 + }, + { + "time": 1342051200, + "open": 2.086, + "high": 2.2007, + "low": 2.0533, + "close": 2.18, + "volume": 15897000.0 + }, + { + "time": 1342137600, + "open": 2.1907, + "high": 2.2933, + "low": 2.18, + "close": 2.2667, + "volume": 19225500.0 + }, + { + "time": 1342396800, + "open": 2.2667, + "high": 2.4, + "low": 2.26, + "close": 2.3973, + "volume": 25431000.0 + }, + { + "time": 1342483200, + "open": 2.354, + "high": 2.3827, + "low": 2.1587, + "close": 2.218, + "volume": 37756500.0 + }, + { + "time": 1342569600, + "open": 2.1967, + "high": 2.2447, + "low": 2.0553, + "close": 2.1333, + "volume": 42406500.0 + }, + { + "time": 1342656000, + "open": 2.1333, + "high": 2.21, + "low": 2.1333, + "close": 2.1433, + "volume": 21282000.0 + }, + { + "time": 1342742400, + "open": 2.1267, + "high": 2.158, + "low": 2.0833, + "close": 2.1207, + "volume": 23131500.0 + }, + { + "time": 1343001600, + "open": 2.1227, + "high": 2.1227, + "low": 2.0413, + "close": 2.1193, + "volume": 20463000.0 + }, + { + "time": 1343088000, + "open": 2.0467, + "high": 2.0693, + "low": 1.9747, + "close": 2.0073, + "volume": 21778500.0 + }, + { + "time": 1343174400, + "open": 1.9733, + "high": 2.0167, + "low": 1.8353, + "close": 1.8827, + "volume": 37428000.0 + }, + { + "time": 1343260800, + "open": 1.932, + "high": 2.004, + "low": 1.8427, + "close": 1.8833, + "volume": 33084000.0 + }, + { + "time": 1343347200, + "open": 1.9107, + "high": 1.9773, + "low": 1.8733, + "close": 1.9673, + "volume": 24735000.0 + }, + { + "time": 1343606400, + "open": 1.9713, + "high": 2.0167, + "low": 1.814, + "close": 1.8367, + "volume": 29761500.0 + }, + { + "time": 1343692800, + "open": 1.8367, + "high": 1.8647, + "low": 1.8233, + "close": 1.8527, + "volume": 20505000.0 + }, + { + "time": 1343779200, + "open": 1.8567, + "high": 1.866, + "low": 1.7327, + "close": 1.7327, + "volume": 21585000.0 + }, + { + "time": 1343865600, + "open": 1.7507, + "high": 1.79, + "low": 1.7013, + "close": 1.74, + "volume": 19086000.0 + }, + { + "time": 1343952000, + "open": 1.7553, + "high": 1.8367, + "low": 1.74, + "close": 1.74, + "volume": 17092500.0 + }, + { + "time": 1344211200, + "open": 1.8227, + "high": 1.9133, + "low": 1.8227, + "close": 1.8873, + "volume": 17017500.0 + }, + { + "time": 1344297600, + "open": 1.8893, + "high": 2.06, + "low": 1.8847, + "close": 2.0167, + "volume": 28341000.0 + }, + { + "time": 1344384000, + "open": 2.0493, + "high": 2.0527, + "low": 1.906, + "close": 1.9393, + "volume": 17298000.0 + }, + { + "time": 1344470400, + "open": 1.9633, + "high": 2.0, + "low": 1.9393, + "close": 1.9533, + "volume": 9636000.0 + }, + { + "time": 1344556800, + "open": 1.9533, + "high": 1.996, + "low": 1.9533, + "close": 1.996, + "volume": 10066500.0 + }, + { + "time": 1344816000, + "open": 1.9827, + "high": 2.0867, + "low": 1.94, + "close": 2.0633, + "volume": 12691500.0 + }, + { + "time": 1344902400, + "open": 2.0667, + "high": 2.078, + "low": 1.9467, + "close": 1.9467, + "volume": 11076000.0 + }, + { + "time": 1344988800, + "open": 1.9593, + "high": 1.98, + "low": 1.9207, + "close": 1.96, + "volume": 7506000.0 + }, + { + "time": 1345075200, + "open": 1.9687, + "high": 2.026, + "low": 1.96, + "close": 1.96, + "volume": 8028000.0 + }, + { + "time": 1345161600, + "open": 2.0, + "high": 2.0473, + "low": 1.9987, + "close": 2.0, + "volume": 7033500.0 + }, + { + "time": 1345420800, + "open": 2.01, + "high": 2.026, + "low": 1.94, + "close": 1.982, + "volume": 13743000.0 + }, + { + "time": 1345507200, + "open": 1.9727, + "high": 2.0, + "low": 1.9333, + "close": 1.9407, + "volume": 10840500.0 + }, + { + "time": 1345593600, + "open": 1.9453, + "high": 2.0167, + "low": 1.93, + "close": 2.0167, + "volume": 10396500.0 + }, + { + "time": 1345680000, + "open": 2.0, + "high": 2.0567, + "low": 1.9767, + "close": 2.034, + "volume": 21502500.0 + }, + { + "time": 1345766400, + "open": 2.018, + "high": 2.0487, + "low": 1.9607, + "close": 1.9727, + "volume": 20377500.0 + }, + { + "time": 1346025600, + "open": 1.972, + "high": 1.98, + "low": 1.878, + "close": 1.8833, + "volume": 18559500.0 + }, + { + "time": 1346112000, + "open": 1.8947, + "high": 1.9587, + "low": 1.8667, + "close": 1.9127, + "volume": 20662500.0 + }, + { + "time": 1346198400, + "open": 1.918, + "high": 1.92, + "low": 1.868, + "close": 1.894, + "volume": 12213000.0 + }, + { + "time": 1346284800, + "open": 1.8673, + "high": 1.916, + "low": 1.8673, + "close": 1.894, + "volume": 9609000.0 + }, + { + "time": 1346371200, + "open": 1.8993, + "high": 1.9227, + "low": 1.88, + "close": 1.9007, + "volume": 7690500.0 + }, + { + "time": 1346716800, + "open": 1.9013, + "high": 1.9327, + "low": 1.86, + "close": 1.876, + "volume": 10840500.0 + }, + { + "time": 1346803200, + "open": 1.8767, + "high": 1.9, + "low": 1.854, + "close": 1.8627, + "volume": 9276000.0 + }, + { + "time": 1346889600, + "open": 1.8673, + "high": 1.9267, + "low": 1.86, + "close": 1.9033, + "volume": 12036000.0 + }, + { + "time": 1346976000, + "open": 1.8933, + "high": 1.9713, + "low": 1.8933, + "close": 1.9567, + "volume": 13315500.0 + }, + { + "time": 1347235200, + "open": 1.9467, + "high": 1.9667, + "low": 1.82, + "close": 1.8233, + "volume": 20403000.0 + }, + { + "time": 1347321600, + "open": 1.874, + "high": 1.8773, + "low": 1.8267, + "close": 1.85, + "volume": 12136500.0 + }, + { + "time": 1347408000, + "open": 1.86, + "high": 1.9053, + "low": 1.8533, + "close": 1.9053, + "volume": 16017000.0 + }, + { + "time": 1347494400, + "open": 1.9053, + "high": 1.9773, + "low": 1.88, + "close": 1.9493, + "volume": 20878500.0 + }, + { + "time": 1347580800, + "open": 1.9667, + "high": 2.0433, + "low": 1.9653, + "close": 2.024, + "volume": 21982500.0 + }, + { + "time": 1347840000, + "open": 2.0453, + "high": 2.2013, + "low": 2.0453, + "close": 2.1667, + "volume": 46476000.0 + }, + { + "time": 1347926400, + "open": 2.134, + "high": 2.1693, + "low": 2.0453, + "close": 2.0893, + "volume": 26220000.0 + }, + { + "time": 1348012800, + "open": 2.09, + "high": 2.116, + "low": 2.0627, + "close": 2.07, + "volume": 15385500.0 + }, + { + "time": 1348099200, + "open": 2.08, + "high": 2.1, + "low": 2.0453, + "close": 2.0613, + "volume": 10585500.0 + }, + { + "time": 1348185600, + "open": 2.06, + "high": 2.1, + "low": 1.9693, + "close": 2.0013, + "volume": 24996000.0 + }, + { + "time": 1348444800, + "open": 2.0, + "high": 2.0687, + "low": 1.96, + "close": 2.044, + "volume": 18555000.0 + }, + { + "time": 1348531200, + "open": 2.0533, + "high": 2.0533, + "low": 1.7133, + "close": 1.8553, + "volume": 78354000.0 + }, + { + "time": 1348617600, + "open": 1.85, + "high": 1.8933, + "low": 1.8, + "close": 1.8427, + "volume": 22567500.0 + }, + { + "time": 1348704000, + "open": 1.85, + "high": 1.9027, + "low": 1.84, + "close": 1.8893, + "volume": 26001000.0 + }, + { + "time": 1348790400, + "open": 1.92, + "high": 1.9927, + "low": 1.8667, + "close": 1.956, + "volume": 64419000.0 + }, + { + "time": 1349049600, + "open": 1.9533, + "high": 1.9927, + "low": 1.9333, + "close": 1.944, + "volume": 12910500.0 + }, + { + "time": 1349136000, + "open": 1.95, + "high": 1.9927, + "low": 1.9333, + "close": 1.9867, + "volume": 10389000.0 + }, + { + "time": 1349222400, + "open": 1.9767, + "high": 2.0, + "low": 1.9493, + "close": 2.0, + "volume": 12870000.0 + }, + { + "time": 1349308800, + "open": 1.9793, + "high": 2.0133, + "low": 1.91, + "close": 1.9567, + "volume": 18454500.0 + }, + { + "time": 1349395200, + "open": 1.9733, + "high": 1.9873, + "low": 1.9067, + "close": 1.9253, + "volume": 12109500.0 + }, + { + "time": 1349654400, + "open": 1.9267, + "high": 1.96, + "low": 1.9073, + "close": 1.9467, + "volume": 13128000.0 + }, + { + "time": 1349740800, + "open": 1.9413, + "high": 1.9413, + "low": 1.8833, + "close": 1.91, + "volume": 17464500.0 + }, + { + "time": 1349827200, + "open": 1.9, + "high": 1.9333, + "low": 1.8673, + "close": 1.9133, + "volume": 7413000.0 + }, + { + "time": 1349913600, + "open": 1.906, + "high": 1.932, + "low": 1.8833, + "close": 1.888, + "volume": 6646500.0 + }, + { + "time": 1350000000, + "open": 1.8953, + "high": 1.9153, + "low": 1.8333, + "close": 1.8433, + "volume": 13588500.0 + }, + { + "time": 1350259200, + "open": 1.8473, + "high": 1.87, + "low": 1.7907, + "close": 1.8067, + "volume": 20388000.0 + }, + { + "time": 1350345600, + "open": 1.8447, + "high": 1.8727, + "low": 1.8227, + "close": 1.8707, + "volume": 7063500.0 + }, + { + "time": 1350432000, + "open": 1.8833, + "high": 1.9227, + "low": 1.8533, + "close": 1.9213, + "volume": 9720000.0 + }, + { + "time": 1350518400, + "open": 1.9327, + "high": 1.9327, + "low": 1.852, + "close": 1.8667, + "volume": 9792000.0 + }, + { + "time": 1350604800, + "open": 1.8527, + "high": 1.88, + "low": 1.82, + "close": 1.8493, + "volume": 10015500.0 + }, + { + "time": 1350864000, + "open": 1.8493, + "high": 1.8667, + "low": 1.824, + "close": 1.866, + "volume": 5101500.0 + }, + { + "time": 1350950400, + "open": 1.8267, + "high": 1.904, + "low": 1.8247, + "close": 1.8833, + "volume": 8620500.0 + }, + { + "time": 1351036800, + "open": 1.9053, + "high": 1.9053, + "low": 1.812, + "close": 1.82, + "volume": 12669000.0 + }, + { + "time": 1351123200, + "open": 1.8573, + "high": 1.8573, + "low": 1.83, + "close": 1.8347, + "volume": 8308500.0 + }, + { + "time": 1351209600, + "open": 1.8333, + "high": 1.8533, + "low": 1.8013, + "close": 1.8253, + "volume": 6726000.0 + }, + { + "time": 1351641600, + "open": 1.8333, + "high": 1.89, + "low": 1.8247, + "close": 1.8753, + "volume": 11193000.0 + }, + { + "time": 1351728000, + "open": 1.8833, + "high": 1.966, + "low": 1.88, + "close": 1.9527, + "volume": 14761500.0 + }, + { + "time": 1351814400, + "open": 1.9513, + "high": 1.97, + "low": 1.9033, + "close": 1.9133, + "volume": 14913000.0 + }, + { + "time": 1352073600, + "open": 1.964, + "high": 2.11, + "low": 1.9553, + "close": 2.1, + "volume": 29164500.0 + }, + { + "time": 1352160000, + "open": 2.1033, + "high": 2.1033, + "low": 1.9967, + "close": 2.0813, + "volume": 34033500.0 + }, + { + "time": 1352246400, + "open": 2.09, + "high": 2.1367, + "low": 2.054, + "close": 2.1033, + "volume": 25089000.0 + }, + { + "time": 1352332800, + "open": 2.0947, + "high": 2.1253, + "low": 2.0627, + "close": 2.0873, + "volume": 18096000.0 + }, + { + "time": 1352419200, + "open": 2.068, + "high": 2.0807, + "low": 1.99, + "close": 2.02, + "volume": 12726000.0 + }, + { + "time": 1352678400, + "open": 2.0193, + "high": 2.1547, + "low": 2.0107, + "close": 2.15, + "volume": 8142000.0 + }, + { + "time": 1352764800, + "open": 2.0987, + "high": 2.1333, + "low": 2.048, + "close": 2.1107, + "volume": 14413500.0 + }, + { + "time": 1352851200, + "open": 2.1307, + "high": 2.1413, + "low": 2.08, + "close": 2.1, + "volume": 12508500.0 + }, + { + "time": 1352937600, + "open": 2.1133, + "high": 2.1133, + "low": 2.0333, + "close": 2.06, + "volume": 13594500.0 + }, + { + "time": 1353024000, + "open": 2.06, + "high": 2.156, + "low": 2.0393, + "close": 2.156, + "volume": 12493500.0 + }, + { + "time": 1353283200, + "open": 2.1333, + "high": 2.2167, + "low": 2.118, + "close": 2.2, + "volume": 19404000.0 + }, + { + "time": 1353369600, + "open": 2.2, + "high": 2.2073, + "low": 2.1273, + "close": 2.2073, + "volume": 13012500.0 + }, + { + "time": 1353456000, + "open": 2.1833, + "high": 2.2313, + "low": 2.1527, + "close": 2.1613, + "volume": 12994500.0 + }, + { + "time": 1353628800, + "open": 2.1733, + "high": 2.1887, + "low": 2.1133, + "close": 2.1413, + "volume": 6234000.0 + }, + { + "time": 1353888000, + "open": 2.1433, + "high": 2.156, + "low": 2.108, + "close": 2.156, + "volume": 6823500.0 + }, + { + "time": 1353974400, + "open": 2.1553, + "high": 2.1773, + "low": 2.1013, + "close": 2.1433, + "volume": 10090500.0 + }, + { + "time": 1354060800, + "open": 2.1533, + "high": 2.286, + "low": 2.1273, + "close": 2.26, + "volume": 22344000.0 + }, + { + "time": 1354147200, + "open": 2.2433, + "high": 2.2667, + "low": 2.1913, + "close": 2.234, + "volume": 15483000.0 + }, + { + "time": 1354233600, + "open": 2.24, + "high": 2.2853, + "low": 2.2007, + "close": 2.2533, + "volume": 20268000.0 + }, + { + "time": 1354492800, + "open": 2.2667, + "high": 2.3333, + "low": 2.2333, + "close": 2.316, + "volume": 26139000.0 + }, + { + "time": 1354579200, + "open": 2.3593, + "high": 2.36, + "low": 2.2367, + "close": 2.2633, + "volume": 18213000.0 + }, + { + "time": 1354665600, + "open": 2.2567, + "high": 2.2793, + "low": 2.2387, + "close": 2.2473, + "volume": 7434000.0 + }, + { + "time": 1354752000, + "open": 2.2667, + "high": 2.32, + "low": 2.2333, + "close": 2.2933, + "volume": 9687000.0 + }, + { + "time": 1354838400, + "open": 2.2667, + "high": 2.2993, + "low": 2.2567, + "close": 2.28, + "volume": 9814500.0 + }, + { + "time": 1355097600, + "open": 2.274, + "high": 2.32, + "low": 2.274, + "close": 2.3047, + "volume": 13413000.0 + }, + { + "time": 1355184000, + "open": 2.3067, + "high": 2.37, + "low": 2.2973, + "close": 2.3667, + "volume": 22396500.0 + }, + { + "time": 1355270400, + "open": 2.3427, + "high": 2.3953, + "low": 2.33, + "close": 2.35, + "volume": 29326500.0 + }, + { + "time": 1355356800, + "open": 2.3487, + "high": 2.3553, + "low": 2.1833, + "close": 2.25, + "volume": 31737000.0 + }, + { + "time": 1355443200, + "open": 2.252, + "high": 2.2933, + "low": 2.2393, + "close": 2.2553, + "volume": 14131500.0 + }, + { + "time": 1355702400, + "open": 2.2667, + "high": 2.3, + "low": 2.25, + "close": 2.2933, + "volume": 12079500.0 + }, + { + "time": 1355788800, + "open": 2.294, + "high": 2.338, + "low": 2.284, + "close": 2.306, + "volume": 23095500.0 + }, + { + "time": 1355875200, + "open": 2.3267, + "high": 2.3507, + "low": 2.3013, + "close": 2.3073, + "volume": 18744000.0 + }, + { + "time": 1355961600, + "open": 2.32, + "high": 2.3207, + "low": 2.27, + "close": 2.2953, + "volume": 13641000.0 + }, + { + "time": 1356048000, + "open": 2.3, + "high": 2.3, + "low": 2.2387, + "close": 2.2667, + "volume": 21853500.0 + }, + { + "time": 1356307200, + "open": 2.2, + "high": 2.29, + "low": 2.2, + "close": 2.2853, + "volume": 5562000.0 + }, + { + "time": 1356480000, + "open": 2.264, + "high": 2.3, + "low": 2.2333, + "close": 2.2333, + "volume": 8796000.0 + }, + { + "time": 1356566400, + "open": 2.234, + "high": 2.2607, + "low": 2.2, + "close": 2.246, + "volume": 8053500.0 + }, + { + "time": 1356652800, + "open": 2.2413, + "high": 2.2433, + "low": 2.2, + "close": 2.2, + "volume": 6033000.0 + }, + { + "time": 1356912000, + "open": 2.2027, + "high": 2.2647, + "low": 2.2, + "close": 2.2567, + "volume": 8590500.0 + }, + { + "time": 1357084800, + "open": 2.3253, + "high": 2.3633, + "low": 2.3067, + "close": 2.3567, + "volume": 16518000.0 + }, + { + "time": 1357171200, + "open": 2.3453, + "high": 2.3633, + "low": 2.3127, + "close": 2.3127, + "volume": 10825500.0 + }, + { + "time": 1363219200, + "open": 2.5673, + "high": 2.6, + "low": 2.4027, + "close": 2.4327, + "volume": 29146500.0 + }, + { + "time": 1363305600, + "open": 2.4333, + "high": 2.4433, + "low": 2.3473, + "close": 2.3607, + "volume": 42304500.0 + }, + { + "time": 1363564800, + "open": 2.36, + "high": 2.404, + "low": 2.322, + "close": 2.3467, + "volume": 17931000.0 + }, + { + "time": 1363651200, + "open": 2.366, + "high": 2.3993, + "low": 2.3293, + "close": 2.3313, + "volume": 15828000.0 + }, + { + "time": 1363737600, + "open": 2.3507, + "high": 2.4167, + "low": 2.344, + "close": 2.4147, + "volume": 16198500.0 + }, + { + "time": 1363824000, + "open": 2.4047, + "high": 2.4707, + "low": 2.3827, + "close": 2.4007, + "volume": 15042000.0 + }, + { + "time": 1363910400, + "open": 2.4133, + "high": 2.4533, + "low": 2.4013, + "close": 2.4413, + "volume": 6421500.0 + }, + { + "time": 1364169600, + "open": 2.4467, + "high": 2.568, + "low": 2.4467, + "close": 2.5313, + "volume": 34368000.0 + }, + { + "time": 1364256000, + "open": 2.5067, + "high": 2.548, + "low": 2.5067, + "close": 2.524, + "volume": 22050000.0 + }, + { + "time": 1364342400, + "open": 2.5133, + "high": 2.5587, + "low": 2.4873, + "close": 2.5467, + "volume": 18799500.0 + }, + { + "time": 1364428800, + "open": 2.534, + "high": 2.5707, + "low": 2.5167, + "close": 2.526, + "volume": 11656500.0 + }, + { + "time": 1364774400, + "open": 2.6067, + "high": 3.112, + "low": 2.6067, + "close": 2.9667, + "volume": 201547500.0 + }, + { + "time": 1364860800, + "open": 2.94, + "high": 3.046, + "low": 2.846, + "close": 2.8733, + "volume": 94021500.0 + }, + { + "time": 1364947200, + "open": 2.88, + "high": 2.9467, + "low": 2.6807, + "close": 2.7253, + "volume": 82765500.0 + }, + { + "time": 1365033600, + "open": 2.7633, + "high": 2.8167, + "low": 2.7207, + "close": 2.8, + "volume": 32724000.0 + }, + { + "time": 1365120000, + "open": 2.8, + "high": 2.816, + "low": 2.7, + "close": 2.758, + "volume": 20602500.0 + }, + { + "time": 1365379200, + "open": 2.77, + "high": 2.8367, + "low": 2.7673, + "close": 2.7887, + "volume": 23578500.0 + }, + { + "time": 1365465600, + "open": 2.7927, + "high": 2.7927, + "low": 2.6887, + "close": 2.6933, + "volume": 22929000.0 + }, + { + "time": 1365552000, + "open": 2.714, + "high": 2.8007, + "low": 2.7013, + "close": 2.7907, + "volume": 29934000.0 + }, + { + "time": 1365638400, + "open": 2.8093, + "high": 2.97, + "low": 2.7833, + "close": 2.8667, + "volume": 50419500.0 + }, + { + "time": 1365724800, + "open": 2.906, + "high": 3.0093, + "low": 2.8673, + "close": 2.9167, + "volume": 43282500.0 + }, + { + "time": 1365984000, + "open": 2.8673, + "high": 2.9213, + "low": 2.834, + "close": 2.92, + "volume": 23191500.0 + }, + { + "time": 1366070400, + "open": 2.942, + "high": 3.076, + "low": 2.9273, + "close": 3.032, + "volume": 41016000.0 + }, + { + "time": 1366156800, + "open": 3.0267, + "high": 3.0633, + "low": 2.9693, + "close": 3.03, + "volume": 29680500.0 + }, + { + "time": 1366243200, + "open": 3.0653, + "high": 3.1733, + "low": 3.026, + "close": 3.1627, + "volume": 45765000.0 + }, + { + "time": 1366329600, + "open": 3.1627, + "high": 3.3253, + "low": 3.138, + "close": 3.1633, + "volume": 43929000.0 + }, + { + "time": 1366588800, + "open": 3.2133, + "high": 3.3467, + "low": 3.1667, + "close": 3.346, + "volume": 56449500.0 + }, + { + "time": 1366675200, + "open": 3.346, + "high": 3.528, + "low": 3.346, + "close": 3.3967, + "volume": 53149500.0 + }, + { + "time": 1366761600, + "open": 3.446, + "high": 3.446, + "low": 3.2653, + "close": 3.38, + "volume": 36709500.0 + }, + { + "time": 1366848000, + "open": 3.4, + "high": 3.4933, + "low": 3.3653, + "close": 3.48, + "volume": 40113000.0 + }, + { + "time": 1366934400, + "open": 3.5, + "high": 3.5827, + "low": 3.3747, + "close": 3.3873, + "volume": 52822500.0 + }, + { + "time": 1367193600, + "open": 3.4, + "high": 3.6667, + "low": 3.3933, + "close": 3.6653, + "volume": 52944000.0 + }, + { + "time": 1367280000, + "open": 3.6667, + "high": 3.8787, + "low": 3.5767, + "close": 3.634, + "volume": 79696500.0 + }, + { + "time": 1367366400, + "open": 3.6447, + "high": 3.7327, + "low": 3.5333, + "close": 3.596, + "volume": 37645500.0 + }, + { + "time": 1367452800, + "open": 3.5933, + "high": 3.6847, + "low": 3.5333, + "close": 3.64, + "volume": 44152500.0 + }, + { + "time": 1367539200, + "open": 3.6833, + "high": 3.7647, + "low": 3.6233, + "close": 3.6387, + "volume": 49215000.0 + }, + { + "time": 1367798400, + "open": 3.6727, + "high": 4.0273, + "low": 3.6727, + "close": 4.0127, + "volume": 63787500.0 + }, + { + "time": 1367884800, + "open": 4.0, + "high": 4.1893, + "low": 3.6747, + "close": 3.7707, + "volume": 145771500.0 + }, + { + "time": 1367971200, + "open": 3.7067, + "high": 4.866, + "low": 3.7, + "close": 4.6, + "volume": 97968000.0 + }, + { + "time": 1368057600, + "open": 4.54, + "high": 5.0513, + "low": 4.246, + "close": 4.59, + "volume": 416440500.0 + }, + { + "time": 1368144000, + "open": 4.6267, + "high": 5.4, + "low": 4.5447, + "close": 5.1267, + "volume": 362424000.0 + }, + { + "time": 1368403200, + "open": 5.104, + "high": 6.0133, + "low": 5.0333, + "close": 6.0007, + "volume": 324441000.0 + }, + { + "time": 1368489600, + "open": 6.0773, + "high": 6.4747, + "low": 5.41, + "close": 5.4667, + "volume": 540166500.0 + }, + { + "time": 1368576000, + "open": 5.4673, + "high": 6.2253, + "low": 5.154, + "close": 6.1333, + "volume": 245694000.0 + }, + { + "time": 1368662400, + "open": 6.1367, + "high": 6.4267, + "low": 5.9107, + "close": 6.14, + "volume": 314040000.0 + }, + { + "time": 1368748800, + "open": 6.2493, + "high": 6.3333, + "low": 5.8333, + "close": 6.0833, + "volume": 275742000.0 + }, + { + "time": 1369008000, + "open": 6.0933, + "high": 6.1967, + "low": 5.9087, + "close": 5.9533, + "volume": 116409000.0 + }, + { + "time": 1369094400, + "open": 5.954, + "high": 6.0533, + "low": 5.6853, + "close": 5.838, + "volume": 129556500.0 + }, + { + "time": 1369180800, + "open": 5.814, + "high": 6.064, + "low": 5.7, + "close": 5.8187, + "volume": 124705500.0 + }, + { + "time": 1369267200, + "open": 5.7673, + "high": 6.212, + "low": 5.5367, + "close": 6.2, + "volume": 173866500.0 + }, + { + "time": 1369353600, + "open": 6.16, + "high": 6.53, + "low": 6.1333, + "close": 6.4967, + "volume": 234340500.0 + }, + { + "time": 1369699200, + "open": 6.53, + "high": 7.4687, + "low": 6.53, + "close": 7.4533, + "volume": 286362000.0 + }, + { + "time": 1369785600, + "open": 7.4667, + "high": 7.7, + "low": 6.6, + "close": 6.9133, + "volume": 365599500.0 + }, + { + "time": 1369872000, + "open": 7.0667, + "high": 7.3027, + "low": 6.7467, + "close": 7.0, + "volume": 232486500.0 + }, + { + "time": 1369958400, + "open": 6.934, + "high": 7.096, + "low": 6.4893, + "close": 6.4893, + "volume": 216676500.0 + }, + { + "time": 1370217600, + "open": 6.4533, + "high": 6.7193, + "low": 5.8833, + "close": 6.16, + "volume": 279295500.0 + }, + { + "time": 1370304000, + "open": 6.1727, + "high": 6.428, + "low": 6.1427, + "close": 6.3227, + "volume": 128937000.0 + }, + { + "time": 1370390400, + "open": 6.2667, + "high": 6.5313, + "low": 5.9407, + "close": 6.3633, + "volume": 178788000.0 + }, + { + "time": 1370476800, + "open": 6.2867, + "high": 6.618, + "low": 6.2867, + "close": 6.446, + "volume": 139008000.0 + }, + { + "time": 1370563200, + "open": 6.4767, + "high": 6.86, + "low": 6.4227, + "close": 6.8, + "volume": 154503000.0 + }, + { + "time": 1370822400, + "open": 6.7227, + "high": 6.8347, + "low": 6.476, + "close": 6.6, + "volume": 134262000.0 + }, + { + "time": 1370908800, + "open": 6.5713, + "high": 6.5787, + "low": 6.27, + "close": 6.2893, + "volume": 107361000.0 + }, + { + "time": 1370995200, + "open": 6.298, + "high": 6.6987, + "low": 6.298, + "close": 6.522, + "volume": 133843500.0 + }, + { + "time": 1371081600, + "open": 6.4073, + "high": 6.6333, + "low": 6.3413, + "close": 6.5733, + "volume": 87330000.0 + }, + { + "time": 1371168000, + "open": 6.6193, + "high": 6.8347, + "low": 6.54, + "close": 6.69, + "volume": 95694000.0 + }, + { + "time": 1371427200, + "open": 6.8467, + "high": 6.9833, + "low": 6.7467, + "close": 6.794, + "volume": 103032000.0 + }, + { + "time": 1371513600, + "open": 6.8273, + "high": 6.932, + "low": 6.6133, + "close": 6.9073, + "volume": 129123000.0 + }, + { + "time": 1371600000, + "open": 6.8547, + "high": 7.1113, + "low": 6.6527, + "close": 6.934, + "volume": 125938500.0 + }, + { + "time": 1371686400, + "open": 6.9667, + "high": 7.142, + "low": 6.63, + "close": 6.7333, + "volume": 148359000.0 + }, + { + "time": 1371772800, + "open": 6.8667, + "high": 6.9293, + "low": 6.5, + "close": 6.58, + "volume": 171208500.0 + }, + { + "time": 1372032000, + "open": 6.5533, + "high": 6.858, + "low": 6.3533, + "close": 6.8033, + "volume": 104620500.0 + }, + { + "time": 1372118400, + "open": 6.784, + "high": 6.9467, + "low": 6.7033, + "close": 6.7967, + "volume": 85672500.0 + }, + { + "time": 1372204800, + "open": 6.8567, + "high": 7.0993, + "low": 6.844, + "close": 7.0667, + "volume": 95920500.0 + }, + { + "time": 1372291200, + "open": 7.08, + "high": 7.35, + "low": 7.0587, + "close": 7.2833, + "volume": 127455000.0 + }, + { + "time": 1372377600, + "open": 7.3333, + "high": 7.372, + "low": 7.114, + "close": 7.1707, + "volume": 84156000.0 + }, + { + "time": 1372636800, + "open": 7.1973, + "high": 7.8667, + "low": 7.1973, + "close": 7.85, + "volume": 159403500.0 + }, + { + "time": 1372723200, + "open": 7.9, + "high": 8.126, + "low": 7.7, + "close": 7.8667, + "volume": 177274500.0 + }, + { + "time": 1372809600, + "open": 7.834, + "high": 7.95, + "low": 7.618, + "close": 7.6733, + "volume": 70027500.0 + }, + { + "time": 1372982400, + "open": 7.8, + "high": 8.03, + "low": 7.6913, + "close": 8.03, + "volume": 99724500.0 + }, + { + "time": 1373241600, + "open": 7.9847, + "high": 8.1827, + "low": 7.9213, + "close": 8.13, + "volume": 113974500.0 + }, + { + "time": 1373328000, + "open": 8.1587, + "high": 8.432, + "low": 8.1273, + "close": 8.2453, + "volume": 121951500.0 + }, + { + "time": 1373414400, + "open": 8.22, + "high": 8.3033, + "low": 8.0527, + "close": 8.2733, + "volume": 81409500.0 + }, + { + "time": 1373500800, + "open": 8.3333, + "high": 8.406, + "low": 8.1567, + "close": 8.3787, + "volume": 107755500.0 + }, + { + "time": 1373587200, + "open": 8.3127, + "high": 8.6653, + "low": 8.3007, + "close": 8.6547, + "volume": 166258500.0 + }, + { + "time": 1373846400, + "open": 8.6667, + "high": 8.92, + "low": 8.4547, + "close": 8.5153, + "volume": 144150000.0 + }, + { + "time": 1373932800, + "open": 8.5153, + "high": 8.5833, + "low": 7.096, + "close": 7.1133, + "volume": 469743000.0 + }, + { + "time": 1374019200, + "open": 7.1833, + "high": 8.1493, + "low": 6.9667, + "close": 8.1, + "volume": 379722000.0 + }, + { + "time": 1374105600, + "open": 8.114, + "high": 8.22, + "low": 7.7453, + "close": 7.8707, + "volume": 166929000.0 + }, + { + "time": 1374192000, + "open": 8.0, + "high": 8.0367, + "low": 7.7673, + "close": 7.9813, + "volume": 85578000.0 + }, + { + "time": 1374451200, + "open": 8.0453, + "high": 8.4453, + "low": 7.986, + "close": 8.14, + "volume": 143059500.0 + }, + { + "time": 1374537600, + "open": 8.2133, + "high": 8.3707, + "low": 8.1213, + "close": 8.1867, + "volume": 111156000.0 + }, + { + "time": 1374624000, + "open": 8.2667, + "high": 8.316, + "low": 7.9707, + "close": 8.126, + "volume": 99454500.0 + }, + { + "time": 1374710400, + "open": 8.1, + "high": 8.3167, + "low": 8.0127, + "close": 8.2847, + "volume": 76276500.0 + }, + { + "time": 1374796800, + "open": 8.424, + "high": 8.8633, + "low": 8.3, + "close": 8.6273, + "volume": 139750500.0 + }, + { + "time": 1375056000, + "open": 8.7013, + "high": 9.0247, + "low": 8.5273, + "close": 8.9773, + "volume": 141123000.0 + }, + { + "time": 1375142400, + "open": 9.0133, + "high": 9.166, + "low": 8.5453, + "close": 8.8, + "volume": 190620000.0 + }, + { + "time": 1375228800, + "open": 8.8593, + "high": 8.998, + "low": 8.7633, + "close": 8.9793, + "volume": 92283000.0 + }, + { + "time": 1375315200, + "open": 9.0, + "high": 9.1087, + "low": 8.842, + "close": 9.0673, + "volume": 77371500.0 + }, + { + "time": 1375401600, + "open": 9.1, + "high": 9.26, + "low": 8.9073, + "close": 9.2467, + "volume": 90321000.0 + }, + { + "time": 1375660800, + "open": 9.2587, + "high": 9.666, + "low": 9.1533, + "close": 9.6467, + "volume": 148099500.0 + }, + { + "time": 1375747200, + "open": 9.71, + "high": 9.78, + "low": 9.4067, + "close": 9.4833, + "volume": 133714500.0 + }, + { + "time": 1375833600, + "open": 9.5167, + "high": 10.3667, + "low": 8.824, + "close": 10.2133, + "volume": 264238500.0 + }, + { + "time": 1375920000, + "open": 10.2953, + "high": 10.592, + "low": 9.9467, + "close": 10.2167, + "volume": 387346500.0 + }, + { + "time": 1376006400, + "open": 10.26, + "high": 10.3967, + "low": 10.0833, + "close": 10.2, + "volume": 129208500.0 + }, + { + "time": 1376265600, + "open": 10.21, + "high": 10.21, + "low": 9.47, + "close": 9.8633, + "volume": 215790000.0 + }, + { + "time": 1376352000, + "open": 9.916, + "high": 10.0, + "low": 9.614, + "close": 9.62, + "volume": 124554000.0 + }, + { + "time": 1376438400, + "open": 9.65, + "high": 9.6953, + "low": 9.2033, + "close": 9.2347, + "volume": 166930500.0 + }, + { + "time": 1376524800, + "open": 9.3333, + "high": 9.5733, + "low": 9.0, + "close": 9.3533, + "volume": 147001500.0 + }, + { + "time": 1376611200, + "open": 9.3333, + "high": 9.594, + "low": 9.3067, + "close": 9.462, + "volume": 101158500.0 + }, + { + "time": 1376870400, + "open": 9.4667, + "high": 9.8253, + "low": 9.4667, + "close": 9.7133, + "volume": 116574000.0 + }, + { + "time": 1376956800, + "open": 9.7667, + "high": 10.01, + "low": 9.7667, + "close": 9.9873, + "volume": 90135000.0 + }, + { + "time": 1377043200, + "open": 9.998, + "high": 10.0727, + "low": 9.75, + "close": 9.7867, + "volume": 89446500.0 + }, + { + "time": 1377129600, + "open": 9.8267, + "high": 10.4987, + "low": 9.8267, + "close": 10.496, + "volume": 151780500.0 + }, + { + "time": 1377216000, + "open": 10.4947, + "high": 10.82, + "low": 10.3333, + "close": 10.7833, + "volume": 187560000.0 + }, + { + "time": 1377475200, + "open": 10.7867, + "high": 11.5333, + "low": 10.6833, + "close": 11.0707, + "volume": 350391000.0 + }, + { + "time": 1377561600, + "open": 11.0967, + "high": 11.2533, + "low": 10.712, + "close": 11.1873, + "volume": 248074500.0 + }, + { + "time": 1377648000, + "open": 11.1867, + "high": 11.4333, + "low": 10.8833, + "close": 11.0173, + "volume": 209382000.0 + }, + { + "time": 1377734400, + "open": 11.1573, + "high": 11.1867, + "low": 10.834, + "close": 11.0333, + "volume": 134815500.0 + }, + { + "time": 1377820800, + "open": 11.1167, + "high": 11.2967, + "low": 10.9307, + "close": 11.2893, + "volume": 161145000.0 + }, + { + "time": 1378166400, + "open": 11.3333, + "high": 11.6587, + "low": 11.0933, + "close": 11.272, + "volume": 174235500.0 + }, + { + "time": 1378252800, + "open": 11.3333, + "high": 11.4413, + "low": 11.0373, + "close": 11.3987, + "volume": 164263500.0 + }, + { + "time": 1378339200, + "open": 11.458, + "high": 11.4993, + "low": 11.2167, + "close": 11.3333, + "volume": 95404500.0 + }, + { + "time": 1378425600, + "open": 11.3267, + "high": 11.3333, + "low": 11.01, + "close": 11.0933, + "volume": 122739000.0 + }, + { + "time": 1378684800, + "open": 11.1333, + "high": 11.1333, + "low": 10.5673, + "close": 10.6113, + "volume": 207159000.0 + }, + { + "time": 1378771200, + "open": 10.6487, + "high": 11.1667, + "low": 10.632, + "close": 11.1053, + "volume": 128748000.0 + }, + { + "time": 1378857600, + "open": 11.1367, + "high": 11.2073, + "low": 10.8087, + "close": 10.9247, + "volume": 83227500.0 + }, + { + "time": 1378944000, + "open": 10.934, + "high": 11.1173, + "low": 10.5273, + "close": 10.8267, + "volume": 90027000.0 + }, + { + "time": 1379030400, + "open": 10.9267, + "high": 11.0913, + "low": 10.8107, + "close": 11.0393, + "volume": 75963000.0 + }, + { + "time": 1379289600, + "open": 11.2, + "high": 11.39, + "low": 11.036, + "close": 11.06, + "volume": 109735500.0 + }, + { + "time": 1379376000, + "open": 11.066, + "high": 11.228, + "low": 10.8907, + "close": 11.0933, + "volume": 78295500.0 + }, + { + "time": 1379462400, + "open": 11.094, + "high": 11.3233, + "low": 10.9467, + "close": 11.3, + "volume": 78660000.0 + }, + { + "time": 1379548800, + "open": 11.31, + "high": 12.0313, + "low": 11.1, + "close": 11.8793, + "volume": 224395500.0 + }, + { + "time": 1379635200, + "open": 11.8333, + "high": 12.3887, + "low": 11.7947, + "close": 12.2593, + "volume": 194923500.0 + }, + { + "time": 1379894400, + "open": 12.33, + "high": 12.3653, + "low": 11.8073, + "close": 12.0073, + "volume": 119229000.0 + }, + { + "time": 1379980800, + "open": 12.074, + "high": 12.3307, + "low": 11.8433, + "close": 12.144, + "volume": 90906000.0 + }, + { + "time": 1380067200, + "open": 12.1067, + "high": 12.42, + "low": 12.02, + "close": 12.3727, + "volume": 117744000.0 + }, + { + "time": 1380153600, + "open": 12.4087, + "high": 12.6453, + "low": 12.3333, + "close": 12.5647, + "volume": 95916000.0 + }, + { + "time": 1380240000, + "open": 12.5867, + "high": 12.7533, + "low": 12.4287, + "close": 12.7467, + "volume": 84856500.0 + }, + { + "time": 1380499200, + "open": 12.6933, + "high": 12.9667, + "low": 12.5207, + "close": 12.87, + "volume": 129867000.0 + }, + { + "time": 1380585600, + "open": 12.9067, + "high": 12.9933, + "low": 12.558, + "close": 12.8713, + "volume": 112054500.0 + }, + { + "time": 1380672000, + "open": 12.8167, + "high": 12.8733, + "low": 11.6933, + "close": 11.9033, + "volume": 298063500.0 + }, + { + "time": 1380758400, + "open": 11.7913, + "high": 11.9793, + "low": 11.2, + "close": 11.5193, + "volume": 342652500.0 + }, + { + "time": 1380844800, + "open": 11.5333, + "high": 12.2333, + "low": 11.51, + "close": 12.2307, + "volume": 209007000.0 + }, + { + "time": 1381104000, + "open": 12.3107, + "high": 12.4487, + "low": 12.0173, + "close": 12.1927, + "volume": 166999500.0 + }, + { + "time": 1381190400, + "open": 12.2667, + "high": 12.3953, + "low": 11.5333, + "close": 11.6833, + "volume": 198939000.0 + }, + { + "time": 1381276800, + "open": 11.7, + "high": 11.8, + "low": 10.7667, + "close": 11.2533, + "volume": 220770000.0 + }, + { + "time": 1381363200, + "open": 11.2533, + "high": 11.7167, + "low": 11.22, + "close": 11.5327, + "volume": 129027000.0 + }, + { + "time": 1381449600, + "open": 11.578, + "high": 11.9993, + "low": 11.4, + "close": 11.98, + "volume": 119569500.0 + }, + { + "time": 1381708800, + "open": 11.8033, + "high": 12.1667, + "low": 11.61, + "close": 12.022, + "volume": 112860000.0 + }, + { + "time": 1381795200, + "open": 12.022, + "high": 12.586, + "low": 12.022, + "close": 12.3133, + "volume": 159427500.0 + }, + { + "time": 1381881600, + "open": 12.3333, + "high": 12.4867, + "low": 12.1393, + "close": 12.2133, + "volume": 119692500.0 + }, + { + "time": 1381968000, + "open": 12.2667, + "high": 12.3333, + "low": 12.066, + "close": 12.24, + "volume": 97383000.0 + }, + { + "time": 1382054400, + "open": 12.2873, + "high": 12.3973, + "low": 12.0733, + "close": 12.1627, + "volume": 85054500.0 + }, + { + "time": 1382313600, + "open": 12.2933, + "high": 12.3127, + "low": 11.4, + "close": 11.5593, + "volume": 165351000.0 + }, + { + "time": 1382400000, + "open": 11.6, + "high": 11.852, + "low": 11.074, + "close": 11.396, + "volume": 166023000.0 + }, + { + "time": 1382486400, + "open": 11.38, + "high": 11.454, + "low": 10.6767, + "close": 10.8887, + "volume": 190072500.0 + }, + { + "time": 1382572800, + "open": 10.92, + "high": 11.8307, + "low": 10.8553, + "close": 11.8167, + "volume": 158160000.0 + }, + { + "time": 1382659200, + "open": 11.5407, + "high": 11.814, + "low": 11.12, + "close": 11.2833, + "volume": 110428500.0 + }, + { + "time": 1382918400, + "open": 11.3107, + "high": 11.4967, + "low": 10.8073, + "close": 10.84, + "volume": 112183500.0 + }, + { + "time": 1383004800, + "open": 10.84, + "high": 11.06, + "low": 10.2, + "close": 10.934, + "volume": 205161000.0 + }, + { + "time": 1383091200, + "open": 11.0467, + "high": 11.1787, + "low": 10.5333, + "close": 10.5333, + "volume": 121746000.0 + }, + { + "time": 1383177600, + "open": 10.52, + "high": 10.8293, + "low": 10.22, + "close": 10.71, + "volume": 131301000.0 + }, + { + "time": 1383264000, + "open": 10.75, + "high": 11.06, + "low": 10.6627, + "close": 10.8667, + "volume": 104220000.0 + }, + { + "time": 1383523200, + "open": 10.8667, + "high": 11.7987, + "low": 10.8667, + "close": 11.7533, + "volume": 188814000.0 + }, + { + "time": 1383609600, + "open": 11.68, + "high": 12.1313, + "low": 10.2667, + "close": 10.3333, + "volume": 319066500.0 + }, + { + "time": 1383696000, + "open": 10.44, + "high": 10.7153, + "low": 9.7573, + "close": 10.0, + "volume": 442978500.0 + }, + { + "time": 1383782400, + "open": 9.8667, + "high": 10.1333, + "low": 9.1747, + "close": 9.2007, + "volume": 319876500.0 + }, + { + "time": 1383868800, + "open": 9.1667, + "high": 9.3833, + "low": 8.8213, + "close": 9.2553, + "volume": 316498500.0 + }, + { + "time": 1384128000, + "open": 9.1, + "high": 9.6947, + "low": 9.1, + "close": 9.66, + "volume": 202396500.0 + }, + { + "time": 1384214400, + "open": 9.7667, + "high": 9.8, + "low": 9.0787, + "close": 9.3933, + "volume": 213652500.0 + }, + { + "time": 1384300800, + "open": 9.39, + "high": 9.4913, + "low": 9.0893, + "close": 9.2707, + "volume": 175584000.0 + }, + { + "time": 1384387200, + "open": 9.3333, + "high": 9.3847, + "low": 8.9407, + "close": 9.1573, + "volume": 175161000.0 + }, + { + "time": 1384473600, + "open": 9.2, + "high": 9.2627, + "low": 8.9567, + "close": 9.0013, + "volume": 143160000.0 + }, + { + "time": 1384732800, + "open": 9.0327, + "high": 9.1, + "low": 7.974, + "close": 7.9893, + "volume": 333507000.0 + }, + { + "time": 1384819200, + "open": 8.0293, + "high": 8.6, + "low": 7.7033, + "close": 8.52, + "volume": 282606000.0 + }, + { + "time": 1384905600, + "open": 8.5, + "high": 8.5067, + "low": 7.9373, + "close": 8.0567, + "volume": 199353000.0 + }, + { + "time": 1384992000, + "open": 8.0727, + "high": 8.3253, + "low": 8.0067, + "close": 8.11, + "volume": 172042500.0 + }, + { + "time": 1385078400, + "open": 8.1533, + "high": 8.1833, + "low": 7.862, + "close": 8.1, + "volume": 162112500.0 + }, + { + "time": 1385337600, + "open": 8.0893, + "high": 8.3893, + "low": 8.02, + "close": 8.046, + "volume": 150082500.0 + }, + { + "time": 1385424000, + "open": 8.098, + "high": 8.1813, + "low": 7.74, + "close": 8.066, + "volume": 201268500.0 + }, + { + "time": 1385510400, + "open": 8.1313, + "high": 8.5327, + "low": 7.968, + "close": 8.5253, + "volume": 178762500.0 + }, + { + "time": 1385683200, + "open": 8.6207, + "high": 8.706, + "low": 8.4333, + "close": 8.4413, + "volume": 142236000.0 + }, + { + "time": 1385942400, + "open": 8.48, + "high": 8.57, + "low": 8.258, + "close": 8.43, + "volume": 110358000.0 + }, + { + "time": 1386028800, + "open": 8.4447, + "high": 9.6627, + "low": 8.2867, + "close": 9.62, + "volume": 374767500.0 + }, + { + "time": 1386115200, + "open": 9.7673, + "high": 9.7993, + "low": 9.142, + "close": 9.2567, + "volume": 191470500.0 + }, + { + "time": 1386201600, + "open": 9.3773, + "high": 9.5567, + "low": 9.3, + "close": 9.334, + "volume": 134154000.0 + }, + { + "time": 1386288000, + "open": 9.412, + "high": 9.5293, + "low": 9.0867, + "close": 9.1387, + "volume": 115554000.0 + }, + { + "time": 1386547200, + "open": 9.2067, + "high": 9.4947, + "low": 8.9473, + "close": 9.45, + "volume": 150270000.0 + }, + { + "time": 1386633600, + "open": 9.3993, + "high": 9.7247, + "low": 9.2413, + "close": 9.4973, + "volume": 172441500.0 + }, + { + "time": 1386720000, + "open": 9.4807, + "high": 9.5767, + "low": 9.298, + "close": 9.32, + "volume": 111934500.0 + }, + { + "time": 1386806400, + "open": 9.37, + "high": 9.8827, + "low": 9.2353, + "close": 9.8133, + "volume": 173362500.0 + }, + { + "time": 1386892800, + "open": 9.8553, + "high": 10.12, + "low": 9.8, + "close": 9.816, + "volume": 174357000.0 + }, + { + "time": 1387152000, + "open": 9.8433, + "high": 10.03, + "low": 9.74, + "close": 9.8227, + "volume": 109501500.0 + }, + { + "time": 1387238400, + "open": 9.822, + "high": 10.3087, + "low": 9.7533, + "close": 10.18, + "volume": 174391500.0 + }, + { + "time": 1387324800, + "open": 10.18, + "high": 10.3267, + "low": 9.73, + "close": 9.8633, + "volume": 182674500.0 + }, + { + "time": 1387411200, + "open": 9.8667, + "high": 9.9993, + "low": 9.2733, + "close": 9.3733, + "volume": 202656000.0 + }, + { + "time": 1387497600, + "open": 9.4007, + "high": 9.624, + "low": 9.3767, + "close": 9.516, + "volume": 123055500.0 + }, + { + "time": 1387756800, + "open": 9.6327, + "high": 9.7493, + "low": 9.5067, + "close": 9.6433, + "volume": 88005000.0 + }, + { + "time": 1387843200, + "open": 9.7567, + "high": 10.3327, + "low": 9.686, + "close": 10.068, + "volume": 159850500.0 + }, + { + "time": 1388016000, + "open": 10.21, + "high": 10.5333, + "low": 10.1767, + "close": 10.4067, + "volume": 118942500.0 + }, + { + "time": 1388102400, + "open": 10.368, + "high": 10.4527, + "low": 10.0333, + "close": 10.0333, + "volume": 93999000.0 + }, + { + "time": 1388361600, + "open": 10.0747, + "high": 10.3207, + "low": 10.0333, + "close": 10.1533, + "volume": 74286000.0 + }, + { + "time": 1388448000, + "open": 10.1993, + "high": 10.2627, + "low": 9.9107, + "close": 10.0327, + "volume": 72408000.0 + }, + { + "time": 1388620800, + "open": 10.04, + "high": 10.1653, + "low": 9.77, + "close": 10.0093, + "volume": 102918000.0 + }, + { + "time": 1388707200, + "open": 10.0067, + "high": 10.1467, + "low": 9.9067, + "close": 9.932, + "volume": 78061500.0 + }, + { + "time": 1388966400, + "open": 10.0, + "high": 10.032, + "low": 9.682, + "close": 9.776, + "volume": 89131500.0 + }, + { + "time": 1389052800, + "open": 9.8, + "high": 10.0267, + "low": 9.6833, + "close": 9.9207, + "volume": 83844000.0 + }, + { + "time": 1389139200, + "open": 9.9573, + "high": 10.2467, + "low": 9.8673, + "close": 10.1, + "volume": 101304000.0 + }, + { + "time": 1389225600, + "open": 10.0933, + "high": 10.2287, + "low": 9.79, + "close": 9.8567, + "volume": 88711500.0 + }, + { + "time": 1389312000, + "open": 9.874, + "high": 9.9667, + "low": 9.4833, + "close": 9.73, + "volume": 126364500.0 + }, + { + "time": 1389571200, + "open": 9.76, + "high": 9.8, + "low": 9.188, + "close": 9.3167, + "volume": 84717000.0 + }, + { + "time": 1389657600, + "open": 9.2933, + "high": 11.172, + "low": 9.1113, + "close": 11.0167, + "volume": 379350000.0 + }, + { + "time": 1389744000, + "open": 10.98, + "high": 11.4907, + "low": 10.8067, + "close": 10.942, + "volume": 274327500.0 + }, + { + "time": 1389830400, + "open": 11.026, + "high": 11.5133, + "low": 10.7773, + "close": 11.452, + "volume": 160425000.0 + }, + { + "time": 1389916800, + "open": 11.4147, + "high": 11.5467, + "low": 11.1967, + "close": 11.36, + "volume": 124987500.0 + }, + { + "time": 1390262400, + "open": 11.3333, + "high": 11.8193, + "low": 11.3, + "close": 11.7867, + "volume": 130549500.0 + }, + { + "time": 1390348800, + "open": 11.9833, + "high": 12.0213, + "low": 11.6507, + "close": 11.904, + "volume": 90628500.0 + }, + { + "time": 1390435200, + "open": 11.8133, + "high": 12.1587, + "low": 11.5613, + "close": 12.0, + "volume": 104628000.0 + }, + { + "time": 1390521600, + "open": 11.862, + "high": 12.0333, + "low": 11.554, + "close": 11.5667, + "volume": 101746500.0 + }, + { + "time": 1390780800, + "open": 11.7, + "high": 11.8613, + "low": 10.9807, + "close": 11.1867, + "volume": 115896000.0 + }, + { + "time": 1390867200, + "open": 11.308, + "high": 11.9593, + "low": 11.2927, + "close": 11.9593, + "volume": 80989500.0 + }, + { + "time": 1390953600, + "open": 11.9287, + "high": 11.9393, + "low": 11.542, + "close": 11.7867, + "volume": 77025000.0 + }, + { + "time": 1391040000, + "open": 11.6833, + "high": 12.3187, + "low": 11.6833, + "close": 12.2333, + "volume": 107673000.0 + }, + { + "time": 1391126400, + "open": 12.3333, + "high": 12.4, + "low": 11.9007, + "close": 12.0773, + "volume": 84319500.0 + }, + { + "time": 1391385600, + "open": 11.6667, + "high": 12.3253, + "low": 11.6667, + "close": 11.8187, + "volume": 89644500.0 + }, + { + "time": 1391472000, + "open": 11.8, + "high": 12.1067, + "low": 11.7467, + "close": 11.922, + "volume": 62623500.0 + }, + { + "time": 1391558400, + "open": 11.87, + "high": 12.0393, + "low": 11.2907, + "close": 11.6533, + "volume": 93388500.0 + }, + { + "time": 1391644800, + "open": 11.668, + "high": 12.0073, + "low": 11.628, + "close": 11.8953, + "volume": 73384500.0 + }, + { + "time": 1391731200, + "open": 12.032, + "high": 12.488, + "low": 11.9, + "close": 12.4733, + "volume": 117148500.0 + }, + { + "time": 1391990400, + "open": 12.5627, + "high": 13.2867, + "low": 12.42, + "close": 13.1027, + "volume": 164770500.0 + }, + { + "time": 1392076800, + "open": 13.2, + "high": 13.48, + "low": 12.8467, + "close": 12.9733, + "volume": 140068500.0 + }, + { + "time": 1392163200, + "open": 13.1067, + "high": 13.218, + "low": 12.9547, + "close": 13.0007, + "volume": 66439500.0 + }, + { + "time": 1392249600, + "open": 12.9333, + "high": 13.5147, + "low": 12.684, + "close": 13.1313, + "volume": 105280500.0 + }, + { + "time": 1392336000, + "open": 13.2073, + "high": 13.4587, + "low": 13.1273, + "close": 13.1933, + "volume": 80040000.0 + }, + { + "time": 1392681600, + "open": 13.1333, + "high": 13.8833, + "low": 13.1333, + "close": 13.5567, + "volume": 117477000.0 + }, + { + "time": 1392768000, + "open": 13.6893, + "high": 15.0, + "low": 12.8867, + "close": 14.5393, + "volume": 202486500.0 + }, + { + "time": 1392854400, + "open": 14.446, + "high": 14.5667, + "low": 13.7513, + "close": 13.968, + "volume": 231760500.0 + }, + { + "time": 1392940800, + "open": 14.0327, + "high": 14.2653, + "low": 13.946, + "close": 13.9947, + "volume": 102037500.0 + }, + { + "time": 1393200000, + "open": 13.98, + "high": 14.5573, + "low": 13.876, + "close": 14.4867, + "volume": 108903000.0 + }, + { + "time": 1393286400, + "open": 14.6533, + "high": 17.28, + "low": 14.6533, + "close": 16.8467, + "volume": 420369000.0 + }, + { + "time": 1393372800, + "open": 16.9333, + "high": 17.6667, + "low": 16.3693, + "close": 17.44, + "volume": 312486000.0 + }, + { + "time": 1393459200, + "open": 17.5333, + "high": 17.83, + "low": 16.5553, + "close": 16.804, + "volume": 223077000.0 + }, + { + "time": 1393545600, + "open": 16.9333, + "high": 16.94, + "low": 16.17, + "close": 16.2567, + "volume": 180037500.0 + }, + { + "time": 1393804800, + "open": 15.4667, + "high": 16.7767, + "low": 15.4667, + "close": 16.6667, + "volume": 165219000.0 + }, + { + "time": 1393891200, + "open": 16.91, + "high": 17.386, + "low": 16.8553, + "close": 16.964, + "volume": 108879000.0 + }, + { + "time": 1393977600, + "open": 17.2, + "high": 17.2653, + "low": 16.7867, + "close": 16.82, + "volume": 72594000.0 + }, + { + "time": 1394064000, + "open": 16.9333, + "high": 17.1667, + "low": 16.63, + "close": 16.86, + "volume": 94290000.0 + }, + { + "time": 1394150400, + "open": 16.8667, + "high": 16.99, + "low": 16.294, + "close": 16.3767, + "volume": 95437500.0 + }, + { + "time": 1394409600, + "open": 16.27, + "high": 16.4387, + "low": 15.7373, + "close": 15.8193, + "volume": 97983000.0 + }, + { + "time": 1394496000, + "open": 15.8333, + "high": 16.3067, + "low": 15.4953, + "close": 15.5033, + "volume": 109213500.0 + }, + { + "time": 1394582400, + "open": 15.4733, + "high": 16.2993, + "low": 15.2647, + "close": 16.1927, + "volume": 123525000.0 + }, + { + "time": 1394668800, + "open": 16.248, + "high": 16.33, + "low": 15.6, + "close": 15.7667, + "volume": 79090500.0 + }, + { + "time": 1394755200, + "open": 15.6467, + "high": 15.8527, + "low": 15.2213, + "close": 15.3333, + "volume": 103077000.0 + }, + { + "time": 1395014400, + "open": 15.51, + "high": 15.862, + "low": 15.3667, + "close": 15.7067, + "volume": 76896000.0 + }, + { + "time": 1395100800, + "open": 15.7047, + "high": 16.1, + "low": 15.6, + "close": 16.0467, + "volume": 78610500.0 + }, + { + "time": 1395187200, + "open": 16.1613, + "high": 16.2133, + "low": 15.5673, + "close": 15.72, + "volume": 62955000.0 + }, + { + "time": 1395273600, + "open": 15.7333, + "high": 15.95, + "low": 15.5573, + "close": 15.6133, + "volume": 47638500.0 + }, + { + "time": 1395360000, + "open": 15.7333, + "high": 15.76, + "low": 15.1667, + "close": 15.18, + "volume": 104617500.0 + }, + { + "time": 1395619200, + "open": 15.3867, + "high": 15.4173, + "low": 14.018, + "close": 14.7233, + "volume": 142279500.0 + }, + { + "time": 1395705600, + "open": 14.746, + "high": 15.1367, + "low": 14.5267, + "close": 14.7193, + "volume": 99859500.0 + }, + { + "time": 1395792000, + "open": 14.8113, + "high": 14.9333, + "low": 14.09, + "close": 14.1793, + "volume": 87933000.0 + }, + { + "time": 1395878400, + "open": 14.1347, + "high": 14.252, + "low": 13.5333, + "close": 13.7153, + "volume": 120972000.0 + }, + { + "time": 1395964800, + "open": 13.7367, + "high": 14.448, + "low": 13.734, + "close": 14.294, + "volume": 125509500.0 + }, + { + "time": 1396224000, + "open": 14.3267, + "high": 14.4513, + "low": 13.7593, + "close": 13.8533, + "volume": 106504500.0 + }, + { + "time": 1396310400, + "open": 13.88, + "high": 14.544, + "low": 13.8667, + "close": 14.528, + "volume": 93630000.0 + }, + { + "time": 1396396800, + "open": 14.5847, + "high": 15.4787, + "low": 14.5367, + "close": 15.4727, + "volume": 138853500.0 + }, + { + "time": 1396483200, + "open": 15.5253, + "high": 15.7153, + "low": 14.8, + "close": 15.0153, + "volume": 140214000.0 + }, + { + "time": 1396569600, + "open": 15.14, + "high": 15.218, + "low": 14.0493, + "close": 14.0867, + "volume": 146892000.0 + }, + { + "time": 1396828800, + "open": 13.954, + "high": 14.4133, + "low": 13.5673, + "close": 13.8593, + "volume": 126373500.0 + }, + { + "time": 1396915200, + "open": 13.9667, + "high": 14.4327, + "low": 13.708, + "close": 14.3327, + "volume": 87385500.0 + }, + { + "time": 1397001600, + "open": 14.4667, + "high": 14.5633, + "low": 14.0593, + "close": 14.5033, + "volume": 65019000.0 + }, + { + "time": 1397088000, + "open": 14.4747, + "high": 14.5333, + "low": 13.5067, + "close": 13.546, + "volume": 89880000.0 + }, + { + "time": 1397174400, + "open": 13.546, + "high": 13.8, + "low": 13.24, + "close": 13.6067, + "volume": 115252500.0 + }, + { + "time": 1397433600, + "open": 13.56, + "high": 13.9667, + "low": 12.9607, + "close": 13.2233, + "volume": 96993000.0 + }, + { + "time": 1397520000, + "open": 13.2067, + "high": 13.4, + "low": 12.288, + "close": 13.0127, + "volume": 174859500.0 + }, + { + "time": 1397606400, + "open": 13.182, + "high": 13.3327, + "low": 12.7213, + "close": 13.1333, + "volume": 87391500.0 + }, + { + "time": 1397692800, + "open": 13.1667, + "high": 13.486, + "low": 12.9387, + "close": 13.2, + "volume": 75393000.0 + }, + { + "time": 1398038400, + "open": 13.234, + "high": 13.7467, + "low": 12.9333, + "close": 13.6933, + "volume": 67105500.0 + }, + { + "time": 1398124800, + "open": 13.7687, + "high": 14.622, + "low": 13.6067, + "close": 14.5073, + "volume": 123586500.0 + }, + { + "time": 1398211200, + "open": 14.6, + "high": 14.6653, + "low": 13.8, + "close": 14.04, + "volume": 91764000.0 + }, + { + "time": 1398297600, + "open": 14.0333, + "high": 14.1867, + "low": 13.5467, + "close": 13.8333, + "volume": 67018500.0 + }, + { + "time": 1398384000, + "open": 13.8507, + "high": 13.8867, + "low": 13.1767, + "close": 13.3027, + "volume": 88900500.0 + }, + { + "time": 1398643200, + "open": 13.2667, + "high": 13.586, + "low": 12.7, + "close": 13.28, + "volume": 90400500.0 + }, + { + "time": 1398729600, + "open": 13.3387, + "high": 13.81, + "low": 13.0353, + "close": 13.7, + "volume": 74610000.0 + }, + { + "time": 1398816000, + "open": 13.666, + "high": 13.924, + "low": 13.4187, + "close": 13.9067, + "volume": 55795500.0 + }, + { + "time": 1398902400, + "open": 13.878, + "high": 14.268, + "low": 13.7127, + "close": 13.8167, + "volume": 68469000.0 + }, + { + "time": 1398988800, + "open": 13.9727, + "high": 14.1033, + "low": 13.768, + "close": 14.0867, + "volume": 51756000.0 + }, + { + "time": 1399248000, + "open": 14.1327, + "high": 14.5127, + "low": 13.8673, + "close": 14.4467, + "volume": 62872500.0 + }, + { + "time": 1399334400, + "open": 14.5333, + "high": 14.5773, + "low": 13.7867, + "close": 13.8173, + "volume": 71347500.0 + }, + { + "time": 1399420800, + "open": 13.8867, + "high": 14.05, + "low": 12.254, + "close": 12.406, + "volume": 127287000.0 + }, + { + "time": 1399507200, + "open": 12.53, + "high": 12.96, + "low": 11.8147, + "close": 11.8427, + "volume": 257352000.0 + }, + { + "time": 1399593600, + "open": 11.95, + "high": 12.2267, + "low": 11.8147, + "close": 12.1333, + "volume": 109512000.0 + }, + { + "time": 1399852800, + "open": 12.1333, + "high": 12.4793, + "low": 11.992, + "close": 12.332, + "volume": 91471500.0 + }, + { + "time": 1399939200, + "open": 12.3873, + "high": 12.756, + "low": 12.16, + "close": 12.6793, + "volume": 91531500.0 + }, + { + "time": 1400025600, + "open": 12.7007, + "high": 12.8987, + "low": 12.4733, + "close": 12.73, + "volume": 70441500.0 + }, + { + "time": 1400112000, + "open": 12.6207, + "high": 12.844, + "low": 12.3533, + "close": 12.5787, + "volume": 79266000.0 + }, + { + "time": 1400198400, + "open": 12.5333, + "high": 12.8027, + "low": 12.474, + "close": 12.77, + "volume": 57685500.0 + }, + { + "time": 1400457600, + "open": 12.7707, + "high": 13.1333, + "low": 12.6667, + "close": 13.1333, + "volume": 59709000.0 + }, + { + "time": 1400544000, + "open": 13.08, + "high": 13.2887, + "low": 12.8713, + "close": 12.9793, + "volume": 72919500.0 + }, + { + "time": 1400630400, + "open": 13.0, + "high": 13.3333, + "low": 12.986, + "close": 13.326, + "volume": 67347000.0 + }, + { + "time": 1400716800, + "open": 13.348, + "high": 13.792, + "low": 13.3033, + "close": 13.6507, + "volume": 77029500.0 + }, + { + "time": 1400803200, + "open": 13.6867, + "high": 13.8507, + "low": 13.5, + "close": 13.826, + "volume": 49992000.0 + }, + { + "time": 1401148800, + "open": 13.9333, + "high": 14.258, + "low": 13.8, + "close": 14.078, + "volume": 68053500.0 + }, + { + "time": 1401235200, + "open": 14.0387, + "high": 14.1847, + "low": 13.684, + "close": 14.0, + "volume": 68530500.0 + }, + { + "time": 1401321600, + "open": 14.0133, + "high": 14.166, + "low": 13.848, + "close": 14.0, + "volume": 46740000.0 + }, + { + "time": 1401408000, + "open": 14.0213, + "high": 14.32, + "low": 13.7833, + "close": 13.8227, + "volume": 72352500.0 + }, + { + "time": 1401667200, + "open": 13.8213, + "high": 13.9567, + "low": 13.4447, + "close": 13.5667, + "volume": 59125500.0 + }, + { + "time": 1401753600, + "open": 13.59, + "high": 13.8667, + "low": 13.506, + "close": 13.64, + "volume": 50698500.0 + }, + { + "time": 1401840000, + "open": 13.6473, + "high": 13.7507, + "low": 13.36, + "close": 13.5433, + "volume": 44190000.0 + }, + { + "time": 1401926400, + "open": 13.5827, + "high": 13.9467, + "low": 13.5507, + "close": 13.8, + "volume": 50929500.0 + }, + { + "time": 1402012800, + "open": 13.9267, + "high": 14.054, + "low": 13.812, + "close": 13.858, + "volume": 39301500.0 + }, + { + "time": 1402272000, + "open": 13.8993, + "high": 13.9993, + "low": 13.5867, + "close": 13.602, + "volume": 34545000.0 + }, + { + "time": 1402358400, + "open": 13.5853, + "high": 13.798, + "low": 13.4367, + "close": 13.484, + "volume": 43896000.0 + }, + { + "time": 1402444800, + "open": 13.44, + "high": 13.6667, + "low": 13.2833, + "close": 13.6333, + "volume": 52020000.0 + }, + { + "time": 1402531200, + "open": 13.6493, + "high": 13.992, + "low": 13.514, + "close": 13.5627, + "volume": 78660000.0 + }, + { + "time": 1402617600, + "open": 13.596, + "high": 13.816, + "low": 13.4387, + "close": 13.7227, + "volume": 91671000.0 + }, + { + "time": 1402876800, + "open": 13.8, + "high": 15.0327, + "low": 13.694, + "close": 15.0, + "volume": 171028500.0 + }, + { + "time": 1402963200, + "open": 14.9767, + "high": 15.7027, + "low": 14.8567, + "close": 15.3667, + "volume": 169213500.0 + }, + { + "time": 1403049600, + "open": 15.3713, + "high": 15.4993, + "low": 15.0747, + "close": 15.12, + "volume": 89343000.0 + }, + { + "time": 1403136000, + "open": 15.1547, + "high": 15.6873, + "low": 15.0667, + "close": 15.0687, + "volume": 114487500.0 + }, + { + "time": 1403222400, + "open": 15.202, + "high": 15.4193, + "low": 15.08, + "close": 15.2667, + "volume": 63924000.0 + }, + { + "time": 1403481600, + "open": 15.264, + "high": 15.9327, + "low": 15.2147, + "close": 15.846, + "volume": 100888500.0 + }, + { + "time": 1403568000, + "open": 15.82, + "high": 16.1253, + "low": 15.442, + "close": 15.5133, + "volume": 104314500.0 + }, + { + "time": 1403654400, + "open": 15.472, + "high": 15.8367, + "low": 15.3493, + "close": 15.7833, + "volume": 74611500.0 + }, + { + "time": 1403740800, + "open": 15.7853, + "high": 16.0267, + "low": 15.614, + "close": 15.6733, + "volume": 65886000.0 + }, + { + "time": 1403827200, + "open": 15.6667, + "high": 16.0, + "low": 15.5667, + "close": 15.9573, + "volume": 75367500.0 + }, + { + "time": 1404086400, + "open": 15.868, + "high": 16.2993, + "low": 15.868, + "close": 16.0233, + "volume": 61995000.0 + }, + { + "time": 1404172800, + "open": 16.066, + "high": 16.2293, + "low": 15.9133, + "close": 15.9633, + "volume": 53196000.0 + }, + { + "time": 1404259200, + "open": 15.9667, + "high": 16.1553, + "low": 15.138, + "close": 15.32, + "volume": 102298500.0 + }, + { + "time": 1404345600, + "open": 15.3333, + "high": 15.5933, + "low": 14.9333, + "close": 15.2327, + "volume": 66034500.0 + }, + { + "time": 1404691200, + "open": 15.2113, + "high": 15.3333, + "low": 14.6933, + "close": 14.7833, + "volume": 74419500.0 + }, + { + "time": 1404777600, + "open": 14.8667, + "high": 14.8667, + "low": 14.2847, + "close": 14.598, + "volume": 101098500.0 + }, + { + "time": 1404864000, + "open": 14.6107, + "high": 14.948, + "low": 14.5993, + "close": 14.8667, + "volume": 50980500.0 + }, + { + "time": 1404950400, + "open": 14.8347, + "high": 14.8667, + "low": 14.4027, + "close": 14.62, + "volume": 63258000.0 + }, + { + "time": 1405036800, + "open": 14.6587, + "high": 14.7927, + "low": 14.4667, + "close": 14.502, + "volume": 41347500.0 + }, + { + "time": 1405296000, + "open": 14.6827, + "high": 15.2527, + "low": 14.3633, + "close": 15.1333, + "volume": 92257500.0 + }, + { + "time": 1405382400, + "open": 15.1707, + "high": 15.2, + "low": 14.54, + "close": 14.62, + "volume": 71305500.0 + }, + { + "time": 1405468800, + "open": 14.6533, + "high": 14.9867, + "low": 14.4273, + "close": 14.4387, + "volume": 51513000.0 + }, + { + "time": 1405555200, + "open": 14.4467, + "high": 14.7033, + "low": 14.2333, + "close": 14.3247, + "volume": 57648000.0 + }, + { + "time": 1405641600, + "open": 14.35, + "high": 14.7473, + "low": 14.3333, + "close": 14.68, + "volume": 53826000.0 + }, + { + "time": 1405900800, + "open": 14.6813, + "high": 14.8807, + "low": 14.448, + "close": 14.6993, + "volume": 49165500.0 + }, + { + "time": 1405987200, + "open": 14.836, + "high": 14.8867, + "low": 14.6073, + "close": 14.6407, + "volume": 35058000.0 + }, + { + "time": 1406073600, + "open": 14.628, + "high": 14.9833, + "low": 14.628, + "close": 14.906, + "volume": 39615000.0 + }, + { + "time": 1406160000, + "open": 14.9053, + "high": 15.0067, + "low": 14.72, + "close": 14.8347, + "volume": 39552000.0 + }, + { + "time": 1406246400, + "open": 14.824, + "high": 15.1313, + "low": 14.77, + "close": 14.914, + "volume": 39411000.0 + }, + { + "time": 1406505600, + "open": 14.894, + "high": 15.4667, + "low": 14.76, + "close": 14.9767, + "volume": 84943500.0 + }, + { + "time": 1406592000, + "open": 15.024, + "high": 15.22, + "low": 14.944, + "close": 15.0533, + "volume": 41269500.0 + }, + { + "time": 1406678400, + "open": 15.0333, + "high": 15.3067, + "low": 14.6833, + "close": 15.2867, + "volume": 60807000.0 + }, + { + "time": 1406764800, + "open": 15.3573, + "high": 15.4713, + "low": 13.9147, + "close": 14.8727, + "volume": 96696000.0 + }, + { + "time": 1406851200, + "open": 14.8333, + "high": 15.8333, + "low": 14.388, + "close": 15.54, + "volume": 153400500.0 + }, + { + "time": 1407110400, + "open": 15.6653, + "high": 16.0333, + "low": 15.4667, + "close": 15.8867, + "volume": 75952500.0 + }, + { + "time": 1407196800, + "open": 15.9087, + "high": 16.1993, + "low": 15.7127, + "close": 15.9287, + "volume": 67884000.0 + }, + { + "time": 1407283200, + "open": 15.9467, + "high": 16.7613, + "low": 15.8167, + "close": 16.536, + "volume": 118677000.0 + }, + { + "time": 1407369600, + "open": 16.5667, + "high": 17.1127, + "low": 16.5067, + "close": 16.8033, + "volume": 95010000.0 + }, + { + "time": 1407456000, + "open": 16.752, + "high": 16.826, + "low": 16.4333, + "close": 16.5473, + "volume": 64384500.0 + }, + { + "time": 1407715200, + "open": 16.8327, + "high": 17.5827, + "low": 16.5333, + "close": 17.2627, + "volume": 101056500.0 + }, + { + "time": 1407801600, + "open": 17.3587, + "high": 17.3813, + "low": 16.972, + "close": 17.3333, + "volume": 74634000.0 + }, + { + "time": 1407888000, + "open": 17.39, + "high": 17.7093, + "low": 17.3073, + "close": 17.532, + "volume": 88335000.0 + }, + { + "time": 1407974400, + "open": 17.5867, + "high": 17.5927, + "low": 17.236, + "close": 17.41, + "volume": 51877500.0 + }, + { + "time": 1408060800, + "open": 17.4953, + "high": 17.5193, + "low": 17.2333, + "close": 17.4667, + "volume": 47685000.0 + }, + { + "time": 1408320000, + "open": 17.5333, + "high": 17.8173, + "low": 17.2833, + "close": 17.2833, + "volume": 71943000.0 + }, + { + "time": 1408406400, + "open": 17.3313, + "high": 17.4, + "low": 16.7747, + "close": 17.0787, + "volume": 66840000.0 + }, + { + "time": 1408492800, + "open": 17.0153, + "high": 17.2493, + "low": 16.8667, + "close": 17.0167, + "volume": 38166000.0 + }, + { + "time": 1408579200, + "open": 17.0667, + "high": 17.2533, + "low": 16.884, + "close": 16.96, + "volume": 37018500.0 + }, + { + "time": 1408665600, + "open": 16.9267, + "high": 17.1413, + "low": 16.8407, + "close": 17.116, + "volume": 35620500.0 + }, + { + "time": 1408924800, + "open": 17.2, + "high": 17.5787, + "low": 17.1333, + "close": 17.51, + "volume": 55287000.0 + }, + { + "time": 1409011200, + "open": 17.5333, + "high": 17.706, + "low": 17.44, + "close": 17.468, + "volume": 47110500.0 + }, + { + "time": 1409097600, + "open": 17.5, + "high": 17.616, + "low": 17.3527, + "close": 17.55, + "volume": 38287500.0 + }, + { + "time": 1409184000, + "open": 17.4273, + "high": 17.632, + "low": 17.41, + "close": 17.606, + "volume": 36576000.0 + }, + { + "time": 1409270400, + "open": 17.666, + "high": 18.1333, + "low": 17.666, + "close": 17.9833, + "volume": 82822500.0 + }, + { + "time": 1409616000, + "open": 18.0067, + "high": 18.9927, + "low": 18.0067, + "close": 18.9733, + "volume": 122932500.0 + }, + { + "time": 1409702400, + "open": 18.9967, + "high": 19.2513, + "low": 18.6733, + "close": 18.7067, + "volume": 83658000.0 + }, + { + "time": 1409788800, + "open": 18.8133, + "high": 19.428, + "low": 18.62, + "close": 19.1133, + "volume": 104331000.0 + }, + { + "time": 1409875200, + "open": 19.198, + "high": 19.2607, + "low": 18.1673, + "close": 18.442, + "volume": 136144500.0 + }, + { + "time": 1410134400, + "open": 18.5433, + "high": 18.992, + "low": 18.4927, + "close": 18.8, + "volume": 69922500.0 + }, + { + "time": 1410220800, + "open": 18.8313, + "high": 19.0327, + "low": 18.4667, + "close": 18.5933, + "volume": 57493500.0 + }, + { + "time": 1410307200, + "open": 18.6, + "high": 18.7647, + "low": 18.244, + "close": 18.7533, + "volume": 46741500.0 + }, + { + "time": 1410393600, + "open": 18.8, + "high": 18.986, + "low": 18.5753, + "close": 18.6767, + "volume": 48127500.0 + }, + { + "time": 1410480000, + "open": 18.7193, + "high": 18.826, + "low": 18.4667, + "close": 18.59, + "volume": 41457000.0 + }, + { + "time": 1410739200, + "open": 18.5413, + "high": 18.5413, + "low": 16.6087, + "close": 17.0, + "volume": 209746500.0 + }, + { + "time": 1410825600, + "open": 17.1153, + "high": 17.4973, + "low": 16.828, + "close": 17.38, + "volume": 106606500.0 + }, + { + "time": 1410912000, + "open": 17.4967, + "high": 17.6467, + "low": 17.3, + "close": 17.434, + "volume": 65944500.0 + }, + { + "time": 1410998400, + "open": 17.5413, + "high": 17.7067, + "low": 17.4253, + "close": 17.55, + "volume": 47353500.0 + }, + { + "time": 1411084800, + "open": 17.6, + "high": 17.6333, + "low": 17.0087, + "close": 17.2307, + "volume": 87552000.0 + }, + { + "time": 1411344000, + "open": 17.2187, + "high": 17.3133, + "low": 16.314, + "close": 16.5333, + "volume": 104559000.0 + }, + { + "time": 1411430400, + "open": 16.4327, + "high": 16.92, + "low": 16.2333, + "close": 16.66, + "volume": 73747500.0 + }, + { + "time": 1411516800, + "open": 16.63, + "high": 16.856, + "low": 16.4693, + "close": 16.7967, + "volume": 48142500.0 + }, + { + "time": 1411603200, + "open": 16.918, + "high": 16.9973, + "low": 16.4067, + "close": 16.48, + "volume": 61905000.0 + }, + { + "time": 1411689600, + "open": 16.4707, + "high": 16.6487, + "low": 16.4047, + "close": 16.4367, + "volume": 49257000.0 + }, + { + "time": 1411948800, + "open": 16.3587, + "high": 16.576, + "low": 16.0467, + "close": 16.3133, + "volume": 61668000.0 + }, + { + "time": 1412035200, + "open": 16.3673, + "high": 16.51, + "low": 16.008, + "close": 16.1933, + "volume": 54453000.0 + }, + { + "time": 1412121600, + "open": 16.1667, + "high": 16.2333, + "low": 15.71, + "close": 16.0573, + "volume": 75615000.0 + }, + { + "time": 1412208000, + "open": 16.0973, + "high": 16.9867, + "low": 16.0413, + "close": 16.724, + "volume": 118692000.0 + }, + { + "time": 1412294400, + "open": 16.8667, + "high": 17.1, + "low": 16.7353, + "close": 17.0667, + "volume": 70530000.0 + }, + { + "time": 1412553600, + "open": 17.0767, + "high": 17.4993, + "low": 17.014, + "close": 17.35, + "volume": 102403500.0 + }, + { + "time": 1412640000, + "open": 17.3547, + "high": 17.4307, + "low": 17.0487, + "close": 17.3267, + "volume": 59218500.0 + }, + { + "time": 1412726400, + "open": 17.3267, + "high": 17.5253, + "low": 16.8427, + "close": 17.352, + "volume": 63711000.0 + }, + { + "time": 1412812800, + "open": 17.466, + "high": 17.7027, + "low": 16.96, + "close": 17.2373, + "volume": 94407000.0 + }, + { + "time": 1412899200, + "open": 16.7993, + "high": 16.8667, + "low": 15.68, + "close": 15.8133, + "volume": 167515500.0 + }, + { + "time": 1413158400, + "open": 15.8067, + "high": 16.0193, + "low": 14.6667, + "close": 14.87, + "volume": 145405500.0 + }, + { + "time": 1413244800, + "open": 15.0, + "high": 15.498, + "low": 14.8667, + "close": 15.2493, + "volume": 89052000.0 + }, + { + "time": 1413331200, + "open": 15.2013, + "high": 15.3993, + "low": 14.488, + "close": 14.8993, + "volume": 116542500.0 + }, + { + "time": 1413417600, + "open": 14.8667, + "high": 15.328, + "low": 14.5, + "close": 15.1053, + "volume": 66036000.0 + }, + { + "time": 1413504000, + "open": 15.286, + "high": 15.6513, + "low": 15.09, + "close": 15.1633, + "volume": 146335500.0 + }, + { + "time": 1413763200, + "open": 15.2693, + "high": 15.4933, + "low": 14.8747, + "close": 15.388, + "volume": 43081500.0 + }, + { + "time": 1413849600, + "open": 15.4667, + "high": 15.7167, + "low": 15.226, + "close": 15.6333, + "volume": 49818000.0 + }, + { + "time": 1413936000, + "open": 15.6107, + "high": 15.826, + "low": 15.3707, + "close": 15.4567, + "volume": 50922000.0 + }, + { + "time": 1414022400, + "open": 15.554, + "high": 15.752, + "low": 15.4067, + "close": 15.69, + "volume": 44418000.0 + }, + { + "time": 1414108800, + "open": 15.6573, + "high": 15.8533, + "low": 15.4133, + "close": 15.7067, + "volume": 44964000.0 + }, + { + "time": 1414368000, + "open": 15.7107, + "high": 15.7333, + "low": 14.6873, + "close": 14.792, + "volume": 122512500.0 + }, + { + "time": 1414454400, + "open": 14.9333, + "high": 16.3067, + "low": 14.9333, + "close": 16.0307, + "volume": 136755000.0 + }, + { + "time": 1414540800, + "open": 16.1653, + "high": 16.2667, + "low": 15.7093, + "close": 15.8607, + "volume": 64392000.0 + }, + { + "time": 1414627200, + "open": 15.8667, + "high": 16.0333, + "low": 15.6407, + "close": 15.9107, + "volume": 41557500.0 + }, + { + "time": 1414713600, + "open": 16.1267, + "high": 16.2333, + "low": 15.9167, + "close": 16.1127, + "volume": 95433000.0 + }, + { + "time": 1414972800, + "open": 16.1533, + "high": 16.504, + "low": 16.088, + "close": 16.152, + "volume": 53284500.0 + }, + { + "time": 1415059200, + "open": 16.2013, + "high": 16.2267, + "low": 15.7687, + "close": 15.9993, + "volume": 45828000.0 + }, + { + "time": 1415145600, + "open": 16.0967, + "high": 16.6267, + "low": 14.4667, + "close": 16.46, + "volume": 110295000.0 + }, + { + "time": 1415232000, + "open": 16.4, + "high": 16.446, + "low": 15.2333, + "close": 16.12, + "volume": 199843500.0 + }, + { + "time": 1415318400, + "open": 16.332, + "high": 16.332, + "low": 15.8133, + "close": 15.9907, + "volume": 66370500.0 + }, + { + "time": 1415577600, + "open": 16.036, + "high": 16.192, + "low": 15.7867, + "close": 16.152, + "volume": 60531000.0 + }, + { + "time": 1415664000, + "open": 16.1347, + "high": 16.788, + "low": 16.0973, + "close": 16.74, + "volume": 104346000.0 + }, + { + "time": 1415750400, + "open": 16.7467, + "high": 16.8227, + "low": 16.372, + "close": 16.6593, + "volume": 74176500.0 + }, + { + "time": 1415836800, + "open": 16.6767, + "high": 17.05, + "low": 16.6067, + "close": 16.8, + "volume": 83121000.0 + }, + { + "time": 1415923200, + "open": 16.7813, + "high": 17.2567, + "low": 16.4467, + "close": 17.2233, + "volume": 80746500.0 + }, + { + "time": 1416182400, + "open": 17.1833, + "high": 17.2667, + "low": 16.8013, + "close": 16.93, + "volume": 106527000.0 + }, + { + "time": 1416268800, + "open": 16.9573, + "high": 17.3327, + "low": 16.8667, + "close": 17.1733, + "volume": 59107500.0 + }, + { + "time": 1416355200, + "open": 17.1833, + "high": 17.1973, + "low": 16.3733, + "close": 16.5687, + "volume": 102915000.0 + }, + { + "time": 1416441600, + "open": 16.4367, + "high": 16.7287, + "low": 16.4, + "close": 16.6327, + "volume": 46186500.0 + }, + { + "time": 1416528000, + "open": 16.656, + "high": 16.8667, + "low": 16.12, + "close": 16.1513, + "volume": 98868000.0 + }, + { + "time": 1416787200, + "open": 16.3153, + "high": 16.5567, + "low": 16.0427, + "close": 16.4253, + "volume": 62733000.0 + }, + { + "time": 1416873600, + "open": 16.5053, + "high": 16.648, + "low": 16.4, + "close": 16.566, + "volume": 41280000.0 + }, + { + "time": 1416960000, + "open": 16.582, + "high": 16.6, + "low": 16.44, + "close": 16.592, + "volume": 25401000.0 + }, + { + "time": 1417132800, + "open": 16.486, + "high": 16.6433, + "low": 16.168, + "close": 16.2733, + "volume": 26473500.0 + }, + { + "time": 1417392000, + "open": 16.162, + "high": 16.3647, + "low": 15.2673, + "close": 15.4993, + "volume": 111850500.0 + }, + { + "time": 1417478400, + "open": 15.5733, + "high": 15.8127, + "low": 15.2, + "close": 15.4653, + "volume": 77887500.0 + }, + { + "time": 1417564800, + "open": 15.4933, + "high": 15.512, + "low": 15.0333, + "close": 15.3327, + "volume": 68868000.0 + }, + { + "time": 1417651200, + "open": 15.3327, + "high": 15.5033, + "low": 15.154, + "close": 15.1913, + "volume": 50370000.0 + }, + { + "time": 1417737600, + "open": 15.234, + "high": 15.3653, + "low": 14.7893, + "close": 14.9667, + "volume": 79653000.0 + }, + { + "time": 1417996800, + "open": 14.9193, + "high": 14.9907, + "low": 14.1333, + "close": 14.3193, + "volume": 121050000.0 + }, + { + "time": 1418083200, + "open": 14.1333, + "high": 14.5153, + "low": 13.618, + "close": 14.4167, + "volume": 124179000.0 + }, + { + "time": 1418169600, + "open": 14.4833, + "high": 14.5233, + "low": 13.8467, + "close": 13.9407, + "volume": 96352500.0 + }, + { + "time": 1418256000, + "open": 13.9833, + "high": 14.362, + "low": 13.8193, + "close": 13.8667, + "volume": 86691000.0 + }, + { + "time": 1418342400, + "open": 13.8387, + "high": 14.112, + "low": 13.602, + "close": 13.86, + "volume": 93274500.0 + }, + { + "time": 1418601600, + "open": 14.05, + "high": 14.05, + "low": 13.5113, + "close": 13.5667, + "volume": 67555500.0 + }, + { + "time": 1418688000, + "open": 13.6, + "high": 13.6, + "low": 13.0247, + "close": 13.1667, + "volume": 109290000.0 + }, + { + "time": 1418774400, + "open": 13.1873, + "high": 13.7793, + "low": 12.8333, + "close": 13.77, + "volume": 95917500.0 + }, + { + "time": 1418860800, + "open": 13.9627, + "high": 14.5913, + "low": 13.9627, + "close": 14.5507, + "volume": 95482500.0 + }, + { + "time": 1418947200, + "open": 14.7273, + "high": 14.8113, + "low": 14.3, + "close": 14.6127, + "volume": 91818000.0 + }, + { + "time": 1419206400, + "open": 14.6667, + "high": 14.9373, + "low": 14.5507, + "close": 14.8367, + "volume": 63783000.0 + }, + { + "time": 1419292800, + "open": 14.8653, + "high": 14.9667, + "low": 14.6347, + "close": 14.7, + "volume": 58047000.0 + }, + { + "time": 1419379200, + "open": 14.7313, + "high": 14.8333, + "low": 14.6167, + "close": 14.8307, + "volume": 17316000.0 + }, + { + "time": 1419552000, + "open": 14.8267, + "high": 15.2333, + "low": 14.7647, + "close": 15.1893, + "volume": 43195500.0 + }, + { + "time": 1419811200, + "open": 15.1433, + "high": 15.194, + "low": 14.9347, + "close": 15.046, + "volume": 35398500.0 + }, + { + "time": 1419897600, + "open": 14.9247, + "high": 15.0667, + "low": 14.76, + "close": 14.838, + "volume": 38286000.0 + }, + { + "time": 1419984000, + "open": 14.838, + "high": 15.0453, + "low": 14.8153, + "close": 14.8267, + "volume": 30895500.0 + }, + { + "time": 1420156800, + "open": 14.886, + "high": 14.9333, + "low": 14.2173, + "close": 14.62, + "volume": 60666000.0 + }, + { + "time": 1420416000, + "open": 14.57, + "high": 14.57, + "low": 13.8107, + "close": 13.908, + "volume": 68766000.0 + }, + { + "time": 1420502400, + "open": 13.9333, + "high": 14.28, + "low": 13.614, + "close": 14.0933, + "volume": 81739500.0 + }, + { + "time": 1420588800, + "open": 14.1867, + "high": 14.3187, + "low": 13.9853, + "close": 14.0733, + "volume": 38506500.0 + }, + { + "time": 1420675200, + "open": 14.1613, + "high": 14.3213, + "low": 14.0007, + "close": 14.0633, + "volume": 43804500.0 + }, + { + "time": 1420761600, + "open": 13.8607, + "high": 14.0533, + "low": 13.664, + "close": 13.75, + "volume": 60375000.0 + }, + { + "time": 1421020800, + "open": 13.7047, + "high": 13.7047, + "low": 13.2833, + "close": 13.4873, + "volume": 77257500.0 + }, + { + "time": 1421107200, + "open": 13.4267, + "high": 13.8407, + "low": 12.5333, + "close": 12.7967, + "volume": 56380500.0 + }, + { + "time": 1421193600, + "open": 12.8013, + "high": 13.0133, + "low": 12.2333, + "close": 12.8533, + "volume": 149176500.0 + }, + { + "time": 1421280000, + "open": 12.936, + "high": 13.05, + "low": 12.6367, + "close": 12.74, + "volume": 68364000.0 + }, + { + "time": 1421366400, + "open": 12.7047, + "high": 12.966, + "low": 12.3367, + "close": 12.8953, + "volume": 46059000.0 + }, + { + "time": 1421712000, + "open": 12.89, + "high": 13.0193, + "low": 12.4693, + "close": 12.84, + "volume": 57217500.0 + }, + { + "time": 1421798400, + "open": 12.652, + "high": 13.2453, + "low": 12.3333, + "close": 13.104, + "volume": 54037500.0 + }, + { + "time": 1421884800, + "open": 13.2387, + "high": 13.5493, + "low": 13.0133, + "close": 13.5167, + "volume": 53611500.0 + }, + { + "time": 1421971200, + "open": 13.4833, + "high": 13.5667, + "low": 13.222, + "close": 13.4093, + "volume": 43978500.0 + }, + { + "time": 1422230400, + "open": 13.3913, + "high": 13.908, + "low": 13.3667, + "close": 13.782, + "volume": 41752500.0 + }, + { + "time": 1422316800, + "open": 13.8, + "high": 13.8687, + "low": 13.48, + "close": 13.7933, + "volume": 35581500.0 + }, + { + "time": 1422403200, + "open": 13.8253, + "high": 13.8633, + "low": 13.228, + "close": 13.3333, + "volume": 40210500.0 + }, + { + "time": 1422489600, + "open": 13.2673, + "high": 13.732, + "low": 13.1, + "close": 13.6907, + "volume": 42373500.0 + }, + { + "time": 1422576000, + "open": 13.7333, + "high": 13.8313, + "low": 13.5333, + "close": 13.5667, + "volume": 39295500.0 + }, + { + "time": 1422835200, + "open": 13.574, + "high": 14.13, + "low": 13.5533, + "close": 14.0007, + "volume": 54160500.0 + }, + { + "time": 1422921600, + "open": 14.2, + "high": 14.6913, + "low": 14.0333, + "close": 14.5733, + "volume": 62689500.0 + }, + { + "time": 1423008000, + "open": 14.4907, + "high": 14.7653, + "low": 14.4533, + "close": 14.5167, + "volume": 40846500.0 + }, + { + "time": 1423094400, + "open": 14.5853, + "high": 15.032, + "low": 14.57, + "close": 14.73, + "volume": 45030000.0 + }, + { + "time": 1423180800, + "open": 14.6673, + "high": 14.8933, + "low": 14.4333, + "close": 14.45, + "volume": 41568000.0 + }, + { + "time": 1423440000, + "open": 14.4333, + "high": 14.5533, + "low": 14.1327, + "close": 14.5007, + "volume": 45162000.0 + }, + { + "time": 1423526400, + "open": 14.4747, + "high": 14.7, + "low": 14.268, + "close": 14.32, + "volume": 70638000.0 + }, + { + "time": 1423612800, + "open": 14.3267, + "high": 14.5227, + "low": 13.4, + "close": 13.6333, + "volume": 122290500.0 + }, + { + "time": 1423699200, + "open": 13.6327, + "high": 13.6327, + "low": 12.8747, + "close": 13.5233, + "volume": 202587000.0 + }, + { + "time": 1423785600, + "open": 13.6667, + "high": 13.7327, + "low": 13.394, + "close": 13.5213, + "volume": 77947500.0 + }, + { + "time": 1424131200, + "open": 13.7333, + "high": 13.8087, + "low": 13.4333, + "close": 13.6567, + "volume": 48615000.0 + }, + { + "time": 1424217600, + "open": 13.6627, + "high": 13.7447, + "low": 13.5067, + "close": 13.6, + "volume": 66528000.0 + }, + { + "time": 1424304000, + "open": 13.626, + "high": 14.1627, + "low": 13.5833, + "close": 14.1067, + "volume": 65745000.0 + }, + { + "time": 1424390400, + "open": 14.106, + "high": 14.5067, + "low": 13.98, + "close": 14.4767, + "volume": 78301500.0 + }, + { + "time": 1424649600, + "open": 14.4, + "high": 14.5467, + "low": 13.7553, + "close": 13.7767, + "volume": 112644000.0 + }, + { + "time": 1424736000, + "open": 13.792, + "high": 13.8573, + "low": 13.4467, + "close": 13.5633, + "volume": 87600000.0 + }, + { + "time": 1424822400, + "open": 13.5667, + "high": 13.8093, + "low": 13.5053, + "close": 13.59, + "volume": 52257000.0 + }, + { + "time": 1424908800, + "open": 13.6147, + "high": 14.0727, + "low": 13.4813, + "close": 13.824, + "volume": 86088000.0 + }, + { + "time": 1424995200, + "open": 13.8267, + "high": 13.9033, + "low": 13.52, + "close": 13.5567, + "volume": 50161500.0 + }, + { + "time": 1425254400, + "open": 13.5333, + "high": 13.5733, + "low": 13.0547, + "close": 13.1533, + "volume": 101004000.0 + }, + { + "time": 1425340800, + "open": 13.1867, + "high": 13.35, + "low": 13.0213, + "close": 13.2933, + "volume": 57592500.0 + }, + { + "time": 1425427200, + "open": 13.2447, + "high": 13.5013, + "low": 13.1473, + "close": 13.45, + "volume": 57156000.0 + }, + { + "time": 1425513600, + "open": 13.5353, + "high": 13.746, + "low": 13.3407, + "close": 13.3573, + "volume": 65712000.0 + }, + { + "time": 1425600000, + "open": 13.3347, + "high": 13.4, + "low": 12.81, + "close": 12.978, + "volume": 87417000.0 + }, + { + "time": 1425859200, + "open": 12.898, + "high": 12.974, + "low": 12.55, + "close": 12.75, + "volume": 87274500.0 + }, + { + "time": 1425945600, + "open": 12.6667, + "high": 12.9, + "low": 12.5067, + "close": 12.688, + "volume": 69730500.0 + }, + { + "time": 1426032000, + "open": 12.7, + "high": 13.0787, + "low": 12.6953, + "close": 12.9007, + "volume": 64245000.0 + }, + { + "time": 1426118400, + "open": 12.9167, + "high": 12.9633, + "low": 12.65, + "close": 12.7573, + "volume": 53023500.0 + }, + { + "time": 1426204800, + "open": 12.7573, + "high": 12.7867, + "low": 12.4733, + "close": 12.58, + "volume": 67867500.0 + }, + { + "time": 1432598400, + "open": 16.4667, + "high": 16.8, + "low": 16.4333, + "close": 16.5, + "volume": 43978500.0 + }, + { + "time": 1432684800, + "open": 16.5733, + "high": 16.6593, + "low": 16.37, + "close": 16.5013, + "volume": 43153500.0 + }, + { + "time": 1432771200, + "open": 16.4907, + "high": 16.79, + "low": 16.3367, + "close": 16.7773, + "volume": 44253000.0 + }, + { + "time": 1432857600, + "open": 16.7587, + "high": 16.858, + "low": 16.6287, + "close": 16.7167, + "volume": 49329570.0 + }, + { + "time": 1433116800, + "open": 16.7987, + "high": 16.8, + "low": 16.498, + "close": 16.63, + "volume": 31530225.0 + }, + { + "time": 1433203200, + "open": 16.616, + "high": 16.6667, + "low": 16.42, + "close": 16.5467, + "volume": 26885745.0 + }, + { + "time": 1433289600, + "open": 16.6, + "high": 16.7147, + "low": 16.4673, + "close": 16.6033, + "volume": 22884615.0 + }, + { + "time": 1433376000, + "open": 16.4807, + "high": 16.62, + "low": 16.3667, + "close": 16.3667, + "volume": 30814980.0 + }, + { + "time": 1433462400, + "open": 16.384, + "high": 16.6467, + "low": 16.3533, + "close": 16.61, + "volume": 40628865.0 + }, + { + "time": 1433721600, + "open": 16.6873, + "high": 17.25, + "low": 16.58, + "close": 17.1233, + "volume": 65460270.0 + }, + { + "time": 1433808000, + "open": 17.0333, + "high": 17.1827, + "low": 16.9427, + "close": 16.9807, + "volume": 32805165.0 + }, + { + "time": 1433894400, + "open": 17.0667, + "high": 17.1033, + "low": 16.5487, + "close": 16.7133, + "volume": 43567065.0 + }, + { + "time": 1433980800, + "open": 16.8333, + "high": 16.9793, + "low": 16.6953, + "close": 16.7167, + "volume": 26028345.0 + }, + { + "time": 1434067200, + "open": 16.7073, + "high": 16.8973, + "low": 16.6767, + "close": 16.7307, + "volume": 18391890.0 + }, + { + "time": 1434326400, + "open": 16.6947, + "high": 16.752, + "low": 16.4007, + "close": 16.6973, + "volume": 27654165.0 + }, + { + "time": 1434412800, + "open": 16.6287, + "high": 16.896, + "low": 16.606, + "close": 16.882, + "volume": 24904965.0 + }, + { + "time": 1434499200, + "open": 16.8833, + "high": 17.624, + "low": 16.8, + "close": 17.4207, + "volume": 70233015.0 + }, + { + "time": 1434585600, + "open": 17.3647, + "high": 17.564, + "low": 17.3333, + "close": 17.46, + "volume": 35891805.0 + }, + { + "time": 1434672000, + "open": 17.5147, + "high": 17.5867, + "low": 17.34, + "close": 17.5, + "volume": 32618625.0 + }, + { + "time": 1434931200, + "open": 17.7, + "high": 17.7313, + "low": 17.046, + "close": 17.3233, + "volume": 60604575.0 + }, + { + "time": 1435017600, + "open": 17.3713, + "high": 17.8667, + "low": 17.238, + "close": 17.84, + "volume": 50767455.0 + }, + { + "time": 1435104000, + "open": 17.8547, + "high": 17.8547, + "low": 17.5813, + "close": 17.66, + "volume": 29859885.0 + }, + { + "time": 1435190400, + "open": 17.732, + "high": 18.094, + "low": 17.68, + "close": 17.9133, + "volume": 37257870.0 + }, + { + "time": 1435276800, + "open": 17.9067, + "high": 17.9673, + "low": 17.7333, + "close": 17.8173, + "volume": 46306020.0 + }, + { + "time": 1435536000, + "open": 17.6, + "high": 17.73, + "low": 17.3267, + "close": 17.4833, + "volume": 44892210.0 + }, + { + "time": 1435622400, + "open": 17.482, + "high": 18.0613, + "low": 17.482, + "close": 17.9167, + "volume": 40032600.0 + }, + { + "time": 1435708800, + "open": 17.9667, + "high": 18.2333, + "low": 17.8567, + "close": 17.9567, + "volume": 26522145.0 + }, + { + "time": 1435795200, + "open": 17.956, + "high": 18.8453, + "low": 17.9067, + "close": 18.6507, + "volume": 89596185.0 + }, + { + "time": 1436140800, + "open": 18.5993, + "high": 18.7913, + "low": 18.42, + "close": 18.6867, + "volume": 51407370.0 + }, + { + "time": 1436227200, + "open": 18.4233, + "high": 18.4933, + "low": 17.3847, + "close": 17.71, + "volume": 76788555.0 + }, + { + "time": 1436313600, + "open": 17.5673, + "high": 17.5993, + "low": 16.954, + "close": 17.0147, + "volume": 77151690.0 + }, + { + "time": 1436400000, + "open": 17.24, + "high": 17.532, + "low": 17.1193, + "close": 17.2667, + "volume": 42350805.0 + }, + { + "time": 1436486400, + "open": 17.294, + "high": 17.6467, + "low": 17.188, + "close": 17.2787, + "volume": 32995410.0 + }, + { + "time": 1436745600, + "open": 17.4133, + "high": 17.5227, + "low": 17.07, + "close": 17.46, + "volume": 37339440.0 + }, + { + "time": 1436832000, + "open": 17.536, + "high": 17.7867, + "low": 17.3673, + "close": 17.6833, + "volume": 23937300.0 + }, + { + "time": 1436918400, + "open": 17.7853, + "high": 17.9033, + "low": 17.4067, + "close": 17.5213, + "volume": 24810810.0 + }, + { + "time": 1437004800, + "open": 17.6873, + "high": 18.0587, + "low": 17.544, + "close": 17.9667, + "volume": 19932795.0 + }, + { + "time": 1437091200, + "open": 18.0193, + "high": 18.3693, + "low": 17.8833, + "close": 18.31, + "volume": 64817235.0 + }, + { + "time": 1437350400, + "open": 18.4333, + "high": 19.11, + "low": 18.1693, + "close": 18.8267, + "volume": 62984370.0 + }, + { + "time": 1437436800, + "open": 18.8313, + "high": 18.8313, + "low": 17.608, + "close": 17.6667, + "volume": 76316850.0 + }, + { + "time": 1437523200, + "open": 17.6333, + "high": 17.9627, + "low": 17.3333, + "close": 17.858, + "volume": 38555175.0 + }, + { + "time": 1437609600, + "open": 18.0067, + "high": 18.0067, + "low": 17.6847, + "close": 17.8533, + "volume": 28486500.0 + }, + { + "time": 1437696000, + "open": 17.9267, + "high": 18.0727, + "low": 17.5947, + "close": 17.7067, + "volume": 37048095.0 + }, + { + "time": 1437955200, + "open": 17.682, + "high": 17.682, + "low": 16.7193, + "close": 16.88, + "volume": 60568065.0 + }, + { + "time": 1438041600, + "open": 17.0113, + "high": 17.6933, + "low": 16.7887, + "close": 17.6933, + "volume": 48846450.0 + }, + { + "time": 1438128000, + "open": 17.7187, + "high": 17.8593, + "low": 17.4667, + "close": 17.5753, + "volume": 34009380.0 + }, + { + "time": 1438214400, + "open": 17.6133, + "high": 17.8293, + "low": 17.474, + "close": 17.7987, + "volume": 26370390.0 + }, + { + "time": 1438300800, + "open": 17.8767, + "high": 17.9573, + "low": 17.674, + "close": 17.6933, + "volume": 27594270.0 + }, + { + "time": 1438560000, + "open": 17.7333, + "high": 17.842, + "low": 17.138, + "close": 17.3433, + "volume": 32603745.0 + }, + { + "time": 1438646400, + "open": 17.338, + "high": 17.7813, + "low": 17.2227, + "close": 17.6833, + "volume": 28507875.0 + }, + { + "time": 1438732800, + "open": 17.7933, + "high": 18.4667, + "low": 16.3333, + "close": 17.0, + "volume": 68174265.0 + }, + { + "time": 1438819200, + "open": 17.0133, + "high": 17.0493, + "low": 15.7413, + "close": 16.3833, + "volume": 189249225.0 + }, + { + "time": 1438905600, + "open": 16.3533, + "high": 16.4087, + "low": 15.8927, + "close": 16.1673, + "volume": 67028235.0 + }, + { + "time": 1439164800, + "open": 16.1333, + "high": 16.198, + "low": 15.7367, + "close": 16.04, + "volume": 53537460.0 + }, + { + "time": 1439251200, + "open": 15.9033, + "high": 15.9533, + "low": 15.6293, + "close": 15.8247, + "volume": 52796445.0 + }, + { + "time": 1439337600, + "open": 15.7073, + "high": 15.9847, + "low": 15.4913, + "close": 15.9347, + "volume": 46502790.0 + }, + { + "time": 1439424000, + "open": 16.0133, + "high": 16.432, + "low": 15.9267, + "close": 16.208, + "volume": 58656540.0 + }, + { + "time": 1439510400, + "open": 16.1967, + "high": 16.6147, + "low": 16.118, + "close": 16.2567, + "volume": 53596260.0 + }, + { + "time": 1439769600, + "open": 16.3333, + "high": 17.2587, + "low": 16.3333, + "close": 17.02, + "volume": 88423530.0 + }, + { + "time": 1439856000, + "open": 17.1, + "high": 17.4, + "low": 16.904, + "close": 17.3733, + "volume": 53375535.0 + }, + { + "time": 1439942400, + "open": 17.4673, + "high": 17.4673, + "low": 16.964, + "close": 16.9867, + "volume": 46379340.0 + }, + { + "time": 1440028800, + "open": 16.8687, + "high": 16.9707, + "low": 16.0007, + "close": 16.034, + "volume": 62651175.0 + }, + { + "time": 1440115200, + "open": 16.044, + "high": 16.2533, + "low": 15.314, + "close": 15.3433, + "volume": 83421645.0 + }, + { + "time": 1440374400, + "open": 14.5667, + "high": 15.4267, + "low": 13.0, + "close": 14.6667, + "volume": 120938985.0 + }, + { + "time": 1440460800, + "open": 15.2667, + "high": 15.5333, + "low": 14.5667, + "close": 14.5667, + "volume": 53007090.0 + }, + { + "time": 1440547200, + "open": 15.1493, + "high": 15.3333, + "low": 14.3673, + "close": 15.02, + "volume": 63997230.0 + }, + { + "time": 1440633600, + "open": 15.318, + "high": 16.3167, + "low": 15.2593, + "close": 16.2173, + "volume": 98315805.0 + }, + { + "time": 1440720000, + "open": 16.1307, + "high": 16.7633, + "low": 15.9333, + "close": 16.592, + "volume": 71507475.0 + }, + { + "time": 1440979200, + "open": 16.2647, + "high": 16.9967, + "low": 16.236, + "close": 16.474, + "volume": 122503890.0 + }, + { + "time": 1441065600, + "open": 16.3333, + "high": 16.4, + "low": 15.798, + "close": 15.9733, + "volume": 71484615.0 + }, + { + "time": 1441152000, + "open": 15.9453, + "high": 17.0327, + "low": 15.9453, + "close": 16.9333, + "volume": 61671885.0 + }, + { + "time": 1441238400, + "open": 16.9167, + "high": 17.0033, + "low": 16.2067, + "close": 16.2333, + "volume": 53779770.0 + }, + { + "time": 1441324800, + "open": 16.1453, + "high": 16.2727, + "low": 15.88, + "close": 16.1287, + "volume": 47893560.0 + }, + { + "time": 1441670400, + "open": 16.53, + "high": 16.75, + "low": 16.27, + "close": 16.686, + "volume": 40088835.0 + }, + { + "time": 1441756800, + "open": 16.6867, + "high": 16.9627, + "low": 16.5333, + "close": 16.6053, + "volume": 43224345.0 + }, + { + "time": 1441843200, + "open": 16.7107, + "high": 16.8007, + "low": 16.3553, + "close": 16.5933, + "volume": 33505485.0 + }, + { + "time": 1441929600, + "open": 16.4667, + "high": 16.6927, + "low": 16.3153, + "close": 16.69, + "volume": 30261885.0 + }, + { + "time": 1442188800, + "open": 16.7313, + "high": 16.95, + "low": 16.6033, + "close": 16.876, + "volume": 37000215.0 + }, + { + "time": 1442275200, + "open": 16.82, + "high": 16.9733, + "low": 16.6333, + "close": 16.93, + "volume": 37735680.0 + }, + { + "time": 1442361600, + "open": 16.9453, + "high": 17.5253, + "low": 16.8587, + "close": 17.4993, + "volume": 53034555.0 + }, + { + "time": 1442448000, + "open": 17.4547, + "high": 17.7, + "low": 17.3793, + "close": 17.4607, + "volume": 44743740.0 + }, + { + "time": 1442534400, + "open": 17.4533, + "high": 17.588, + "low": 17.16, + "close": 17.3327, + "volume": 46208550.0 + }, + { + "time": 1442793600, + "open": 17.3153, + "high": 18.1047, + "low": 17.0533, + "close": 17.6667, + "volume": 78873465.0 + }, + { + "time": 1442880000, + "open": 17.5853, + "high": 17.5853, + "low": 17.058, + "close": 17.3973, + "volume": 47461185.0 + }, + { + "time": 1442966400, + "open": 17.2933, + "high": 17.5313, + "low": 17.172, + "close": 17.3973, + "volume": 33568950.0 + }, + { + "time": 1443052800, + "open": 17.3867, + "high": 17.5667, + "low": 17.0807, + "close": 17.5667, + "volume": 43135980.0 + }, + { + "time": 1443139200, + "open": 17.6, + "high": 17.8167, + "low": 17.0767, + "close": 17.13, + "volume": 49134375.0 + }, + { + "time": 1443398400, + "open": 17.1893, + "high": 17.3193, + "low": 16.4407, + "close": 16.6053, + "volume": 127229130.0 + }, + { + "time": 1443484800, + "open": 16.7333, + "high": 16.982, + "low": 16.364, + "close": 16.4467, + "volume": 47435895.0 + }, + { + "time": 1443571200, + "open": 16.6247, + "high": 16.926, + "low": 16.156, + "close": 16.5633, + "volume": 62164515.0 + }, + { + "time": 1443657600, + "open": 16.6433, + "high": 16.6433, + "low": 15.8087, + "close": 15.9667, + "volume": 56504925.0 + }, + { + "time": 1443744000, + "open": 16.038, + "high": 16.7333, + "low": 15.5333, + "close": 16.5667, + "volume": 54307740.0 + }, + { + "time": 1444003200, + "open": 16.6673, + "high": 16.7333, + "low": 16.2753, + "close": 16.354, + "volume": 48077100.0 + }, + { + "time": 1444089600, + "open": 16.3327, + "high": 16.3327, + "low": 15.7053, + "close": 15.95, + "volume": 65567505.0 + }, + { + "time": 1444176000, + "open": 15.7947, + "high": 15.8667, + "low": 15.2747, + "close": 15.46, + "volume": 89247075.0 + }, + { + "time": 1444262400, + "open": 15.378, + "high": 15.424, + "low": 14.754, + "close": 15.0, + "volume": 77791965.0 + }, + { + "time": 1444348800, + "open": 14.7333, + "high": 14.958, + "low": 14.5333, + "close": 14.6933, + "volume": 79845975.0 + }, + { + "time": 1444608000, + "open": 14.8, + "high": 14.9067, + "low": 14.2793, + "close": 14.3, + "volume": 49668135.0 + }, + { + "time": 1444694400, + "open": 14.3067, + "high": 14.8353, + "low": 14.0753, + "close": 14.6, + "volume": 67942260.0 + }, + { + "time": 1444780800, + "open": 14.6173, + "high": 14.7433, + "low": 14.362, + "close": 14.4933, + "volume": 39930165.0 + }, + { + "time": 1444867200, + "open": 14.59, + "high": 14.8627, + "low": 14.2467, + "close": 14.8627, + "volume": 36025155.0 + }, + { + "time": 1444953600, + "open": 14.788, + "high": 15.366, + "low": 14.788, + "close": 15.11, + "volume": 56215725.0 + }, + { + "time": 1445212800, + "open": 15.2293, + "high": 15.41, + "low": 14.996, + "close": 15.15, + "volume": 31590870.0 + }, + { + "time": 1445299200, + "open": 15.1667, + "high": 15.24, + "low": 13.4667, + "close": 14.1107, + "volume": 197281935.0 + }, + { + "time": 1445385600, + "open": 14.2267, + "high": 14.3207, + "low": 13.92, + "close": 14.0667, + "volume": 53924745.0 + }, + { + "time": 1445472000, + "open": 14.134, + "high": 14.3833, + "low": 13.96, + "close": 14.2, + "volume": 35633430.0 + }, + { + "time": 1445558400, + "open": 14.4527, + "high": 14.5333, + "low": 13.846, + "close": 14.0, + "volume": 54594090.0 + }, + { + "time": 1445817600, + "open": 14.0327, + "high": 14.4667, + "low": 13.9267, + "close": 14.38, + "volume": 42132645.0 + }, + { + "time": 1445904000, + "open": 14.372, + "high": 14.4733, + "low": 13.834, + "close": 14.0233, + "volume": 45352560.0 + }, + { + "time": 1445990400, + "open": 14.0473, + "high": 14.23, + "low": 13.8867, + "close": 14.1867, + "volume": 34321920.0 + }, + { + "time": 1446076800, + "open": 14.1333, + "high": 14.25, + "low": 13.94, + "close": 14.0007, + "volume": 23203560.0 + }, + { + "time": 1446163200, + "open": 14.0933, + "high": 14.1087, + "low": 13.5927, + "close": 13.7927, + "volume": 55364160.0 + }, + { + "time": 1446422400, + "open": 13.7933, + "high": 14.3867, + "low": 13.7933, + "close": 14.2633, + "volume": 49048695.0 + }, + { + "time": 1446508800, + "open": 14.26, + "high": 15.5967, + "low": 13.5, + "close": 15.1713, + "volume": 81725865.0 + }, + { + "time": 1446595200, + "open": 14.998, + "high": 15.516, + "low": 14.8, + "close": 15.4233, + "volume": 164936790.0 + }, + { + "time": 1446681600, + "open": 15.442, + "high": 15.6393, + "low": 15.2793, + "close": 15.46, + "volume": 57396345.0 + }, + { + "time": 1446768000, + "open": 15.4333, + "high": 15.5573, + "low": 15.3, + "close": 15.5, + "volume": 62338770.0 + }, + { + "time": 1447027200, + "open": 15.4507, + "high": 15.5327, + "low": 14.954, + "close": 14.9993, + "volume": 49130655.0 + }, + { + "time": 1447113600, + "open": 14.99, + "high": 15.0, + "low": 14.4053, + "close": 14.44, + "volume": 58650945.0 + }, + { + "time": 1447200000, + "open": 14.5527, + "high": 14.632, + "low": 14.242, + "close": 14.6267, + "volume": 42948015.0 + }, + { + "time": 1447286400, + "open": 14.5953, + "high": 14.6, + "low": 14.16, + "close": 14.1667, + "volume": 37479450.0 + }, + { + "time": 1447372800, + "open": 14.16, + "high": 14.22, + "low": 13.6947, + "close": 13.702, + "volume": 42982740.0 + }, + { + "time": 1447632000, + "open": 13.7667, + "high": 14.332, + "low": 13.7, + "close": 14.28, + "volume": 37396095.0 + }, + { + "time": 1447718400, + "open": 14.3447, + "high": 14.4, + "low": 14.0933, + "close": 14.2667, + "volume": 27685005.0 + }, + { + "time": 1447804800, + "open": 14.3267, + "high": 14.7587, + "low": 14.168, + "close": 14.68, + "volume": 36768795.0 + }, + { + "time": 1447891200, + "open": 14.864, + "high": 15.0793, + "low": 14.6867, + "close": 14.74, + "volume": 30967155.0 + }, + { + "time": 1447977600, + "open": 14.7867, + "high": 15.0, + "low": 14.2387, + "close": 14.664, + "volume": 57603405.0 + }, + { + "time": 1448236800, + "open": 14.6673, + "high": 14.6673, + "low": 14.3113, + "close": 14.4933, + "volume": 31581555.0 + }, + { + "time": 1448323200, + "open": 14.4, + "high": 14.7333, + "low": 14.3333, + "close": 14.4733, + "volume": 31788765.0 + }, + { + "time": 1448409600, + "open": 14.5667, + "high": 15.3887, + "low": 14.5667, + "close": 15.3533, + "volume": 51472185.0 + }, + { + "time": 1448582400, + "open": 15.3913, + "high": 15.4833, + "low": 15.134, + "close": 15.3353, + "volume": 24905370.0 + }, + { + "time": 1448841600, + "open": 15.4367, + "high": 15.6187, + "low": 15.272, + "close": 15.3667, + "volume": 33631095.0 + }, + { + "time": 1448928000, + "open": 15.404, + "high": 15.8667, + "low": 15.32, + "close": 15.82, + "volume": 47844060.0 + }, + { + "time": 1449014400, + "open": 15.81, + "high": 15.9067, + "low": 15.4153, + "close": 15.532, + "volume": 37548885.0 + }, + { + "time": 1449100800, + "open": 15.56, + "high": 15.83, + "low": 15.3333, + "close": 15.5667, + "volume": 37645980.0 + }, + { + "time": 1449187200, + "open": 15.6, + "high": 15.63, + "low": 15.1773, + "close": 15.3933, + "volume": 32882220.0 + }, + { + "time": 1449446400, + "open": 15.3587, + "high": 15.7087, + "low": 15.0767, + "close": 15.3933, + "volume": 40632900.0 + }, + { + "time": 1449532800, + "open": 15.2667, + "high": 15.2667, + "low": 14.9467, + "close": 15.18, + "volume": 34195545.0 + }, + { + "time": 1449619200, + "open": 15.0667, + "high": 15.1667, + "low": 14.7147, + "close": 14.9873, + "volume": 39684090.0 + }, + { + "time": 1449705600, + "open": 14.9993, + "high": 15.2327, + "low": 14.9093, + "close": 15.1653, + "volume": 26159520.0 + }, + { + "time": 1449792000, + "open": 15.0053, + "high": 15.05, + "low": 14.36, + "close": 14.432, + "volume": 42714765.0 + }, + { + "time": 1450051200, + "open": 14.6587, + "high": 14.728, + "low": 14.3247, + "close": 14.572, + "volume": 35973795.0 + }, + { + "time": 1450137600, + "open": 14.7333, + "high": 14.8287, + "low": 14.5333, + "close": 14.7267, + "volume": 28405860.0 + }, + { + "time": 1450224000, + "open": 14.8333, + "high": 15.6587, + "low": 14.7153, + "close": 15.5833, + "volume": 64146990.0 + }, + { + "time": 1450310400, + "open": 15.69, + "high": 15.8507, + "low": 15.3207, + "close": 15.4733, + "volume": 40449015.0 + }, + { + "time": 1450396800, + "open": 15.4, + "high": 15.7267, + "low": 15.286, + "close": 15.3833, + "volume": 38668740.0 + }, + { + "time": 1450656000, + "open": 15.4667, + "high": 15.722, + "low": 15.4, + "close": 15.5333, + "volume": 24367620.0 + }, + { + "time": 1450742400, + "open": 15.5333, + "high": 15.77, + "low": 15.3087, + "close": 15.3467, + "volume": 25559175.0 + }, + { + "time": 1450828800, + "open": 15.4667, + "high": 15.5633, + "low": 15.2087, + "close": 15.3133, + "volume": 18879060.0 + }, + { + "time": 1450915200, + "open": 15.3133, + "high": 15.4587, + "low": 15.2187, + "close": 15.3713, + "volume": 8807865.0 + }, + { + "time": 1451260800, + "open": 15.3573, + "high": 15.4653, + "low": 15.036, + "close": 15.2667, + "volume": 22891215.0 + }, + { + "time": 1451347200, + "open": 15.3167, + "high": 15.86, + "low": 15.3027, + "close": 15.86, + "volume": 31348185.0 + }, + { + "time": 1451433600, + "open": 15.7387, + "high": 16.2427, + "low": 15.7113, + "close": 15.9133, + "volume": 47373570.0 + }, + { + "time": 1451520000, + "open": 16.0, + "high": 16.23, + "low": 15.8913, + "close": 16.0, + "volume": 35687385.0 + }, + { + "time": 1451865600, + "open": 15.5733, + "high": 15.9667, + "low": 14.6, + "close": 14.9727, + "volume": 84687525.0 + }, + { + "time": 1451952000, + "open": 14.934, + "high": 15.126, + "low": 14.6667, + "close": 14.85, + "volume": 39873360.0 + }, + { + "time": 1452038400, + "open": 14.6047, + "high": 14.7167, + "low": 14.3987, + "close": 14.7167, + "volume": 45644085.0 + }, + { + "time": 1452124800, + "open": 14.5333, + "high": 14.5627, + "low": 14.144, + "close": 14.334, + "volume": 44442075.0 + }, + { + "time": 1452211200, + "open": 14.4133, + "high": 14.696, + "low": 14.03, + "close": 14.0753, + "volume": 42351450.0 + }, + { + "time": 1452470400, + "open": 14.0633, + "high": 14.2967, + "low": 13.5333, + "close": 13.8287, + "volume": 51419670.0 + }, + { + "time": 1452556800, + "open": 13.9893, + "high": 14.2493, + "low": 13.6873, + "close": 14.066, + "volume": 37346910.0 + }, + { + "time": 1452643200, + "open": 14.17, + "high": 14.1767, + "low": 13.3333, + "close": 13.4, + "volume": 45447780.0 + }, + { + "time": 1452729600, + "open": 13.3667, + "high": 14.0, + "low": 12.892, + "close": 13.8033, + "volume": 78481125.0 + }, + { + "time": 1452816000, + "open": 13.4667, + "high": 13.6793, + "low": 13.1333, + "close": 13.65, + "volume": 65273250.0 + }, + { + "time": 1453161600, + "open": 13.992, + "high": 14.0313, + "low": 13.3853, + "close": 13.6647, + "volume": 49873515.0 + }, + { + "time": 1453248000, + "open": 13.5, + "high": 13.5, + "low": 12.75, + "close": 13.346, + "volume": 71760615.0 + }, + { + "time": 1453334400, + "open": 13.2, + "high": 13.5487, + "low": 13.0013, + "close": 13.2733, + "volume": 39395805.0 + }, + { + "time": 1453420800, + "open": 13.56, + "high": 13.7667, + "low": 13.2687, + "close": 13.5033, + "volume": 36423510.0 + }, + { + "time": 1453680000, + "open": 13.5033, + "high": 13.5713, + "low": 13.034, + "close": 13.0667, + "volume": 32746890.0 + }, + { + "time": 1453766400, + "open": 13.0767, + "high": 13.2187, + "low": 12.592, + "close": 12.79, + "volume": 61887765.0 + }, + { + "time": 1453852800, + "open": 12.8007, + "high": 12.884, + "low": 12.3847, + "close": 12.6033, + "volume": 43610685.0 + }, + { + "time": 1453939200, + "open": 12.6333, + "high": 12.7933, + "low": 12.1607, + "close": 12.4327, + "volume": 58177335.0 + }, + { + "time": 1454025600, + "open": 12.5853, + "high": 12.916, + "low": 12.5193, + "close": 12.7787, + "volume": 36289005.0 + }, + { + "time": 1454284800, + "open": 12.7167, + "high": 13.3013, + "low": 12.1833, + "close": 13.088, + "volume": 67881600.0 + }, + { + "time": 1454371200, + "open": 13.09, + "high": 13.09, + "low": 12.0153, + "close": 12.18, + "volume": 72660375.0 + }, + { + "time": 1454457600, + "open": 12.2467, + "high": 12.3267, + "low": 11.3453, + "close": 11.572, + "volume": 102199185.0 + }, + { + "time": 1454544000, + "open": 11.6373, + "high": 11.732, + "low": 11.1327, + "close": 11.37, + "volume": 55556535.0 + }, + { + "time": 1454630400, + "open": 11.4867, + "high": 11.5627, + "low": 10.516, + "close": 10.8333, + "volume": 121217820.0 + }, + { + "time": 1454889600, + "open": 10.6, + "high": 10.6, + "low": 9.7333, + "close": 9.75, + "volume": 117036630.0 + }, + { + "time": 1454976000, + "open": 9.798, + "high": 10.6527, + "low": 9.34, + "close": 9.6667, + "volume": 111349140.0 + }, + { + "time": 1455062400, + "open": 9.7533, + "high": 10.9933, + "low": 9.0, + "close": 10.502, + "volume": 114878790.0 + }, + { + "time": 1455148800, + "open": 10.2, + "high": 10.884, + "low": 9.6013, + "close": 10.1333, + "volume": 187276440.0 + }, + { + "time": 1455235200, + "open": 10.1333, + "high": 10.4673, + "low": 9.58, + "close": 9.9967, + "volume": 95316150.0 + }, + { + "time": 1455580800, + "open": 10.0993, + "high": 10.8633, + "low": 10.0993, + "close": 10.3307, + "volume": 72728055.0 + }, + { + "time": 1455667200, + "open": 10.4987, + "high": 11.3447, + "low": 10.4453, + "close": 11.3447, + "volume": 76193205.0 + }, + { + "time": 1455753600, + "open": 11.3533, + "high": 11.5833, + "low": 10.9847, + "close": 11.1333, + "volume": 49621590.0 + }, + { + "time": 1455840000, + "open": 11.0333, + "high": 11.166, + "low": 10.8333, + "close": 11.1233, + "volume": 36965385.0 + }, + { + "time": 1456099200, + "open": 11.3, + "high": 11.9273, + "low": 11.3, + "close": 11.7967, + "volume": 66003810.0 + }, + { + "time": 1456185600, + "open": 11.648, + "high": 12.1153, + "low": 11.5787, + "close": 11.7667, + "volume": 69213390.0 + }, + { + "time": 1456272000, + "open": 11.6733, + "high": 12.0, + "low": 11.1893, + "close": 11.9993, + "volume": 69879090.0 + }, + { + "time": 1456358400, + "open": 11.8887, + "high": 12.568, + "low": 11.68, + "close": 12.4907, + "volume": 67942905.0 + }, + { + "time": 1456444800, + "open": 12.6067, + "high": 12.8, + "low": 12.3333, + "close": 12.6507, + "volume": 78149805.0 + }, + { + "time": 1456704000, + "open": 12.6, + "high": 13.09, + "low": 12.6, + "close": 12.7533, + "volume": 115657890.0 + }, + { + "time": 1456790400, + "open": 12.9527, + "high": 13.0633, + "low": 12.18, + "close": 12.3167, + "volume": 87616590.0 + }, + { + "time": 1456876800, + "open": 12.3953, + "high": 12.568, + "low": 12.1, + "close": 12.458, + "volume": 62262495.0 + }, + { + "time": 1456963200, + "open": 12.556, + "high": 13.1613, + "low": 12.2813, + "close": 13.0267, + "volume": 63760695.0 + }, + { + "time": 1457049600, + "open": 13.04, + "high": 13.602, + "low": 13.04, + "close": 13.3833, + "volume": 86046540.0 + }, + { + "time": 1457308800, + "open": 13.3333, + "high": 13.98, + "low": 13.16, + "close": 13.7, + "volume": 67046235.0 + }, + { + "time": 1457395200, + "open": 13.6667, + "high": 13.8333, + "low": 13.48, + "close": 13.5233, + "volume": 53949945.0 + }, + { + "time": 1457481600, + "open": 13.5667, + "high": 13.9587, + "low": 13.5193, + "close": 13.93, + "volume": 41877810.0 + }, + { + "time": 1457568000, + "open": 13.93, + "high": 14.2333, + "low": 13.378, + "close": 13.6787, + "volume": 67059180.0 + }, + { + "time": 1457654400, + "open": 13.918, + "high": 13.9613, + "low": 13.6887, + "close": 13.8347, + "volume": 42624135.0 + }, + { + "time": 1457913600, + "open": 13.88, + "high": 14.448, + "low": 13.88, + "close": 14.3667, + "volume": 50652270.0 + }, + { + "time": 1458000000, + "open": 14.2667, + "high": 14.598, + "low": 14.1, + "close": 14.5333, + "volume": 80336310.0 + }, + { + "time": 1458086400, + "open": 14.556, + "high": 14.8387, + "low": 14.4533, + "close": 14.8113, + "volume": 45207405.0 + }, + { + "time": 1458172800, + "open": 14.8, + "high": 15.2333, + "low": 14.6267, + "close": 15.21, + "volume": 48334365.0 + }, + { + "time": 1458259200, + "open": 15.1333, + "high": 15.632, + "low": 15.1067, + "close": 15.4733, + "volume": 59588040.0 + }, + { + "time": 1458518400, + "open": 15.5333, + "high": 15.992, + "low": 15.516, + "close": 15.9, + "volume": 66283815.0 + }, + { + "time": 1458604800, + "open": 15.9, + "high": 15.9327, + "low": 15.5033, + "close": 15.5333, + "volume": 53471670.0 + }, + { + "time": 1458691200, + "open": 15.6333, + "high": 15.68, + "low": 14.6867, + "close": 14.6893, + "volume": 62026500.0 + }, + { + "time": 1458777600, + "open": 14.5127, + "high": 15.2593, + "low": 14.2987, + "close": 15.22, + "volume": 64368510.0 + }, + { + "time": 1459123200, + "open": 15.226, + "high": 15.654, + "low": 15.0, + "close": 15.3333, + "volume": 49788900.0 + }, + { + "time": 1459209600, + "open": 15.4333, + "high": 15.492, + "low": 15.022, + "close": 15.3533, + "volume": 51507480.0 + }, + { + "time": 1459296000, + "open": 15.46, + "high": 15.7, + "low": 15.1, + "close": 15.1, + "volume": 52204845.0 + }, + { + "time": 1459382400, + "open": 15.1333, + "high": 15.828, + "low": 15.0007, + "close": 15.54, + "volume": 103025805.0 + }, + { + "time": 1459468800, + "open": 15.6667, + "high": 16.7493, + "low": 15.318, + "close": 15.83, + "volume": 205378890.0 + }, + { + "time": 1459728000, + "open": 16.3333, + "high": 16.808, + "low": 15.7133, + "close": 15.76, + "volume": 169088775.0 + }, + { + "time": 1459814400, + "open": 15.8567, + "high": 17.1667, + "low": 15.7767, + "close": 17.1667, + "volume": 127513170.0 + }, + { + "time": 1459900800, + "open": 16.86, + "high": 17.8493, + "low": 16.8533, + "close": 17.7533, + "volume": 143856135.0 + }, + { + "time": 1459987200, + "open": 17.8667, + "high": 17.956, + "low": 16.9673, + "close": 17.0647, + "volume": 111640635.0 + }, + { + "time": 1460073600, + "open": 17.04, + "high": 17.434, + "low": 16.5347, + "close": 16.6333, + "volume": 92146575.0 + }, + { + "time": 1460332800, + "open": 16.7847, + "high": 17.266, + "low": 16.3533, + "close": 16.62, + "volume": 119938500.0 + }, + { + "time": 1460419200, + "open": 16.6333, + "high": 16.8, + "low": 16.242, + "close": 16.49, + "volume": 73495020.0 + }, + { + "time": 1460505600, + "open": 16.5667, + "high": 17.0333, + "low": 16.4887, + "close": 16.9913, + "volume": 63754965.0 + }, + { + "time": 1460592000, + "open": 16.8747, + "high": 17.1227, + "low": 16.7367, + "close": 16.788, + "volume": 53539065.0 + }, + { + "time": 1460678400, + "open": 16.8007, + "high": 17.004, + "low": 16.608, + "close": 16.9267, + "volume": 47150220.0 + }, + { + "time": 1460937600, + "open": 16.9, + "high": 17.2207, + "low": 16.7773, + "close": 16.848, + "volume": 56465895.0 + }, + { + "time": 1461024000, + "open": 17.0267, + "high": 17.0393, + "low": 16.0833, + "close": 16.3333, + "volume": 80956815.0 + }, + { + "time": 1461110400, + "open": 16.5193, + "high": 16.9107, + "low": 16.1, + "close": 16.66, + "volume": 67998930.0 + }, + { + "time": 1461196800, + "open": 16.6553, + "high": 16.7313, + "low": 16.4, + "close": 16.4887, + "volume": 36160305.0 + }, + { + "time": 1461283200, + "open": 16.5133, + "high": 16.9333, + "low": 16.3807, + "close": 16.9233, + "volume": 50184240.0 + }, + { + "time": 1461542400, + "open": 17.02, + "high": 17.1587, + "low": 16.7173, + "close": 16.7667, + "volume": 46018590.0 + }, + { + "time": 1461628800, + "open": 16.8007, + "high": 17.0487, + "low": 16.626, + "close": 16.772, + "volume": 41643750.0 + }, + { + "time": 1461715200, + "open": 16.83, + "high": 17.0, + "low": 16.6267, + "close": 16.7853, + "volume": 41368650.0 + }, + { + "time": 1461801600, + "open": 16.696, + "high": 16.8953, + "low": 16.496, + "close": 16.5433, + "volume": 31875060.0 + }, + { + "time": 1461888000, + "open": 16.5167, + "high": 16.666, + "low": 15.854, + "close": 15.9533, + "volume": 67850040.0 + }, + { + "time": 1462147200, + "open": 16.1167, + "high": 16.2127, + "low": 15.6547, + "close": 16.12, + "volume": 48718935.0 + }, + { + "time": 1462233600, + "open": 15.9907, + "high": 16.12, + "low": 15.4207, + "close": 15.4387, + "volume": 54099555.0 + }, + { + "time": 1462320000, + "open": 15.3467, + "high": 16.1753, + "low": 14.6933, + "close": 15.2333, + "volume": 101952825.0 + }, + { + "time": 1462406400, + "open": 15.3647, + "high": 15.6, + "low": 13.986, + "close": 14.0347, + "volume": 140309865.0 + }, + { + "time": 1462492800, + "open": 14.0667, + "high": 14.4247, + "low": 13.874, + "close": 14.3267, + "volume": 74756025.0 + }, + { + "time": 1462752000, + "open": 14.4333, + "high": 14.534, + "low": 13.7867, + "close": 13.8167, + "volume": 62450460.0 + }, + { + "time": 1462838400, + "open": 14.026, + "high": 14.0413, + "low": 13.6667, + "close": 13.88, + "volume": 51794940.0 + }, + { + "time": 1462924800, + "open": 13.874, + "high": 14.3653, + "low": 13.7367, + "close": 13.894, + "volume": 61181340.0 + }, + { + "time": 1463011200, + "open": 13.9933, + "high": 14.1533, + "low": 13.5767, + "close": 13.7767, + "volume": 46360335.0 + }, + { + "time": 1463097600, + "open": 13.7793, + "high": 14.08, + "low": 13.7473, + "close": 13.82, + "volume": 35990505.0 + }, + { + "time": 1463356800, + "open": 13.9327, + "high": 14.21, + "low": 13.8587, + "close": 13.888, + "volume": 37083990.0 + }, + { + "time": 1463443200, + "open": 13.9327, + "high": 13.988, + "low": 13.6013, + "close": 13.6867, + "volume": 34568325.0 + }, + { + "time": 1463529600, + "open": 13.902, + "high": 14.354, + "low": 13.2007, + "close": 14.0333, + "volume": 69813285.0 + }, + { + "time": 1463616000, + "open": 14.0467, + "high": 14.7333, + "low": 13.82, + "close": 14.574, + "volume": 86109435.0 + }, + { + "time": 1463702400, + "open": 14.7313, + "high": 14.7313, + "low": 14.194, + "close": 14.6547, + "volume": 113611050.0 + }, + { + "time": 1463961600, + "open": 14.726, + "high": 14.84, + "low": 14.38, + "close": 14.38, + "volume": 66618810.0 + }, + { + "time": 1464048000, + "open": 14.4993, + "high": 14.5827, + "low": 14.3453, + "close": 14.53, + "volume": 37793115.0 + }, + { + "time": 1464134400, + "open": 14.6327, + "high": 14.7573, + "low": 14.41, + "close": 14.5933, + "volume": 37445070.0 + }, + { + "time": 1464220800, + "open": 14.666, + "high": 15.0327, + "low": 14.6033, + "close": 15.0327, + "volume": 53304360.0 + }, + { + "time": 1464307200, + "open": 15.0667, + "high": 15.0667, + "low": 14.7167, + "close": 14.8433, + "volume": 47011290.0 + }, + { + "time": 1464652800, + "open": 14.926, + "high": 14.9833, + "low": 14.7667, + "close": 14.8733, + "volume": 31549200.0 + }, + { + "time": 1464739200, + "open": 14.8267, + "high": 14.8267, + "low": 14.4593, + "close": 14.6, + "volume": 38188845.0 + }, + { + "time": 1464825600, + "open": 14.632, + "high": 14.7327, + "low": 14.474, + "close": 14.702, + "volume": 24582015.0 + }, + { + "time": 1464912000, + "open": 14.7, + "high": 14.796, + "low": 14.534, + "close": 14.5673, + "volume": 28329450.0 + }, + { + "time": 1465171200, + "open": 14.6047, + "high": 14.7267, + "low": 14.3633, + "close": 14.7053, + "volume": 28419060.0 + }, + { + "time": 1465257600, + "open": 14.748, + "high": 15.6293, + "low": 14.7327, + "close": 15.5127, + "volume": 80287470.0 + }, + { + "time": 1465344000, + "open": 15.5333, + "high": 16.0567, + "low": 15.4567, + "close": 15.7233, + "volume": 76060455.0 + }, + { + "time": 1465430400, + "open": 15.6467, + "high": 15.6887, + "low": 15.07, + "close": 15.09, + "volume": 58262070.0 + }, + { + "time": 1465516800, + "open": 14.8733, + "high": 15.2667, + "low": 14.4787, + "close": 14.674, + "volume": 78597060.0 + }, + { + "time": 1465776000, + "open": 14.5533, + "high": 15.0513, + "low": 14.4653, + "close": 14.5133, + "volume": 53577120.0 + }, + { + "time": 1465862400, + "open": 14.582, + "high": 14.8133, + "low": 14.1687, + "close": 14.28, + "volume": 44983245.0 + }, + { + "time": 1465948800, + "open": 14.4333, + "high": 14.7933, + "low": 14.342, + "close": 14.532, + "volume": 36963330.0 + }, + { + "time": 1466035200, + "open": 14.51, + "high": 14.658, + "low": 14.2333, + "close": 14.5333, + "volume": 31423200.0 + }, + { + "time": 1466121600, + "open": 14.5353, + "high": 14.666, + "low": 14.3, + "close": 14.33, + "volume": 38441865.0 + }, + { + "time": 1466380800, + "open": 14.5, + "high": 14.9167, + "low": 14.5, + "close": 14.696, + "volume": 44990895.0 + }, + { + "time": 1466467200, + "open": 14.7667, + "high": 14.838, + "low": 12.608, + "close": 12.8533, + "volume": 41360595.0 + }, + { + "time": 1466553600, + "open": 14.0, + "high": 14.0, + "low": 12.8807, + "close": 13.1867, + "volume": 288062460.0 + }, + { + "time": 1466640000, + "open": 13.196, + "high": 13.196, + "low": 12.8087, + "close": 13.0, + "volume": 122422515.0 + }, + { + "time": 1466726400, + "open": 12.96, + "high": 13.008, + "low": 12.476, + "close": 12.7333, + "volume": 83003595.0 + }, + { + "time": 1466985600, + "open": 12.9067, + "high": 13.254, + "low": 12.5247, + "close": 13.22, + "volume": 90248895.0 + }, + { + "time": 1467072000, + "open": 13.27, + "high": 13.6033, + "low": 13.2633, + "close": 13.4527, + "volume": 69636630.0 + }, + { + "time": 1467158400, + "open": 13.5467, + "high": 14.1187, + "low": 13.5333, + "close": 14.0167, + "volume": 70308465.0 + }, + { + "time": 1467244800, + "open": 14.0827, + "high": 14.2373, + "low": 13.668, + "close": 13.7333, + "volume": 56418435.0 + }, + { + "time": 1467331200, + "open": 13.6393, + "high": 14.5493, + "low": 13.5967, + "close": 14.4133, + "volume": 63605955.0 + }, + { + "time": 1467676800, + "open": 14.0367, + "high": 14.3033, + "low": 13.7, + "close": 14.0933, + "volume": 64103865.0 + }, + { + "time": 1467763200, + "open": 13.9587, + "high": 14.3487, + "low": 13.9327, + "close": 14.2433, + "volume": 56001630.0 + }, + { + "time": 1467849600, + "open": 14.2867, + "high": 14.5413, + "low": 14.1667, + "close": 14.4, + "volume": 41651820.0 + }, + { + "time": 1467936000, + "open": 14.3667, + "high": 14.654, + "low": 14.3, + "close": 14.4, + "volume": 45595800.0 + }, + { + "time": 1468195200, + "open": 14.5633, + "high": 15.1187, + "low": 14.5633, + "close": 14.82, + "volume": 66368370.0 + }, + { + "time": 1468281600, + "open": 14.792, + "high": 15.1667, + "low": 14.7667, + "close": 14.9667, + "volume": 56701455.0 + }, + { + "time": 1468368000, + "open": 15.0, + "high": 15.0667, + "low": 14.686, + "close": 14.8667, + "volume": 44640195.0 + }, + { + "time": 1468454400, + "open": 14.9, + "high": 15.0667, + "low": 14.7367, + "close": 14.7687, + "volume": 32683545.0 + }, + { + "time": 1468540800, + "open": 14.8333, + "high": 14.85, + "low": 14.6067, + "close": 14.6067, + "volume": 28054815.0 + }, + { + "time": 1468800000, + "open": 14.6667, + "high": 15.1393, + "low": 14.5533, + "close": 15.0433, + "volume": 43574475.0 + }, + { + "time": 1468886400, + "open": 15.034, + "high": 15.2733, + "low": 14.9833, + "close": 15.08, + "volume": 36414315.0 + }, + { + "time": 1468972800, + "open": 15.1347, + "high": 15.32, + "low": 15.0, + "close": 15.28, + "volume": 31636800.0 + }, + { + "time": 1469059200, + "open": 15.342, + "high": 15.3667, + "low": 14.6067, + "close": 14.6667, + "volume": 55197015.0 + }, + { + "time": 1469145600, + "open": 14.714, + "high": 14.9667, + "low": 14.592, + "close": 14.7933, + "volume": 32939685.0 + }, + { + "time": 1469404800, + "open": 14.8333, + "high": 15.426, + "low": 14.758, + "close": 15.3333, + "volume": 57810465.0 + }, + { + "time": 1469491200, + "open": 15.4, + "high": 15.4, + "low": 15.02, + "close": 15.2833, + "volume": 39602580.0 + }, + { + "time": 1469577600, + "open": 15.31, + "high": 15.5573, + "low": 15.128, + "close": 15.22, + "volume": 35585460.0 + }, + { + "time": 1469664000, + "open": 15.2607, + "high": 15.3853, + "low": 15.1067, + "close": 15.3853, + "volume": 29429970.0 + }, + { + "time": 1469750400, + "open": 15.3507, + "high": 15.6853, + "low": 15.3333, + "close": 15.6147, + "volume": 38264985.0 + }, + { + "time": 1470009600, + "open": 15.6907, + "high": 15.7753, + "low": 15.276, + "close": 15.4113, + "volume": 51807975.0 + }, + { + "time": 1470096000, + "open": 15.3453, + "high": 15.3453, + "low": 14.76, + "close": 15.1333, + "volume": 48089565.0 + }, + { + "time": 1470182400, + "open": 15.1167, + "high": 15.5333, + "low": 14.4333, + "close": 14.94, + "volume": 49846905.0 + }, + { + "time": 1470268800, + "open": 15.2, + "high": 15.3907, + "low": 14.8033, + "close": 15.3367, + "volume": 52533225.0 + }, + { + "time": 1470355200, + "open": 15.3187, + "high": 15.4667, + "low": 15.15, + "close": 15.1653, + "volume": 38675430.0 + }, + { + "time": 1470614400, + "open": 15.1653, + "high": 15.3067, + "low": 15.0667, + "close": 15.1, + "volume": 27615555.0 + }, + { + "time": 1470700800, + "open": 15.02, + "high": 15.436, + "low": 15.0, + "close": 15.2333, + "volume": 26310885.0 + }, + { + "time": 1470787200, + "open": 15.2953, + "high": 15.3247, + "low": 14.9747, + "close": 15.0667, + "volume": 28483890.0 + }, + { + "time": 1470873600, + "open": 15.0727, + "high": 15.1713, + "low": 14.894, + "close": 15.0, + "volume": 24076710.0 + }, + { + "time": 1470960000, + "open": 14.9993, + "high": 15.11, + "low": 14.936, + "close": 15.0393, + "volume": 20300850.0 + }, + { + "time": 1471219200, + "open": 15.0667, + "high": 15.3, + "low": 14.9867, + "close": 15.0007, + "volume": 25273980.0 + }, + { + "time": 1471305600, + "open": 14.9813, + "high": 15.146, + "low": 14.8887, + "close": 14.9067, + "volume": 26379855.0 + }, + { + "time": 1471392000, + "open": 14.7053, + "high": 14.9887, + "low": 14.7053, + "close": 14.892, + "volume": 21790455.0 + }, + { + "time": 1471478400, + "open": 14.8827, + "high": 15.044, + "low": 14.8193, + "close": 14.8667, + "volume": 20870070.0 + }, + { + "time": 1471564800, + "open": 14.8667, + "high": 15.0133, + "low": 14.8353, + "close": 15.0, + "volume": 19653315.0 + }, + { + "time": 1471824000, + "open": 15.0067, + "high": 15.0527, + "low": 14.8453, + "close": 14.87, + "volume": 26019900.0 + }, + { + "time": 1471910400, + "open": 14.9067, + "high": 15.2327, + "low": 14.8533, + "close": 15.1087, + "volume": 63281610.0 + }, + { + "time": 1471996800, + "open": 15.1067, + "high": 15.1433, + "low": 14.8147, + "close": 14.8147, + "volume": 30888090.0 + }, + { + "time": 1472083200, + "open": 14.802, + "high": 14.9327, + "low": 14.7167, + "close": 14.7327, + "volume": 21926385.0 + }, + { + "time": 1472169600, + "open": 14.7567, + "high": 14.8633, + "low": 14.588, + "close": 14.634, + "volume": 28345545.0 + }, + { + "time": 1472428800, + "open": 14.6, + "high": 14.6933, + "low": 14.3333, + "close": 14.3413, + "volume": 41806380.0 + }, + { + "time": 1472515200, + "open": 14.3667, + "high": 14.4073, + "low": 14.0347, + "close": 14.064, + "volume": 39825960.0 + }, + { + "time": 1472601600, + "open": 14.066, + "high": 14.1733, + "low": 13.91, + "close": 14.1, + "volume": 40418205.0 + }, + { + "time": 1472688000, + "open": 14.1647, + "high": 14.206, + "low": 13.35, + "close": 13.4167, + "volume": 102308160.0 + }, + { + "time": 1472774400, + "open": 13.5233, + "high": 13.5467, + "low": 13.08, + "close": 13.22, + "volume": 74876685.0 + }, + { + "time": 1473120000, + "open": 13.3333, + "high": 13.5667, + "low": 13.2513, + "close": 13.5493, + "volume": 54042450.0 + }, + { + "time": 1473206400, + "open": 13.5627, + "high": 13.7667, + "low": 13.3807, + "close": 13.4633, + "volume": 44694975.0 + }, + { + "time": 1473292800, + "open": 13.4953, + "high": 13.4993, + "low": 13.0907, + "close": 13.1767, + "volume": 41787750.0 + }, + { + "time": 1473379200, + "open": 13.144, + "high": 13.3487, + "low": 12.9133, + "close": 12.95, + "volume": 48325905.0 + }, + { + "time": 1473638400, + "open": 12.8667, + "high": 13.4247, + "low": 12.812, + "close": 13.2567, + "volume": 45839700.0 + }, + { + "time": 1473724800, + "open": 13.2113, + "high": 13.25, + "low": 12.8967, + "close": 12.9807, + "volume": 44783100.0 + }, + { + "time": 1473811200, + "open": 13.0233, + "high": 13.1953, + "low": 12.99, + "close": 13.0667, + "volume": 28667115.0 + }, + { + "time": 1473897600, + "open": 13.1247, + "high": 13.5013, + "low": 13.0333, + "close": 13.3507, + "volume": 36054000.0 + }, + { + "time": 1473984000, + "open": 13.354, + "high": 13.7167, + "low": 13.258, + "close": 13.694, + "volume": 38842110.0 + }, + { + "time": 1474243200, + "open": 13.7007, + "high": 13.962, + "low": 13.6667, + "close": 13.766, + "volume": 28640355.0 + }, + { + "time": 1474329600, + "open": 13.756, + "high": 13.85, + "low": 13.594, + "close": 13.6233, + "volume": 24932340.0 + }, + { + "time": 1474416000, + "open": 13.6667, + "high": 13.8, + "low": 13.4373, + "close": 13.712, + "volume": 31800480.0 + }, + { + "time": 1474502400, + "open": 13.7093, + "high": 13.8187, + "low": 13.5333, + "close": 13.6733, + "volume": 29451975.0 + }, + { + "time": 1474588800, + "open": 13.716, + "high": 14.012, + "low": 13.6667, + "close": 13.8667, + "volume": 33538245.0 + }, + { + "time": 1474848000, + "open": 13.7833, + "high": 14.0667, + "low": 13.7047, + "close": 13.93, + "volume": 28243755.0 + }, + { + "time": 1474934400, + "open": 13.9533, + "high": 14.0133, + "low": 13.64, + "close": 13.7253, + "volume": 39862860.0 + }, + { + "time": 1475020800, + "open": 13.7553, + "high": 13.8833, + "low": 13.6333, + "close": 13.76, + "volume": 27330960.0 + }, + { + "time": 1475107200, + "open": 13.7353, + "high": 13.822, + "low": 13.35, + "close": 13.3767, + "volume": 35370465.0 + }, + { + "time": 1475193600, + "open": 13.38, + "high": 13.6653, + "low": 13.3033, + "close": 13.6, + "volume": 33940980.0 + }, + { + "time": 1475452800, + "open": 13.7933, + "high": 14.378, + "low": 13.602, + "close": 14.2333, + "volume": 80238360.0 + }, + { + "time": 1475539200, + "open": 14.232, + "high": 14.3, + "low": 13.9213, + "close": 14.1333, + "volume": 45776940.0 + }, + { + "time": 1475625600, + "open": 14.0927, + "high": 14.21, + "low": 13.8747, + "close": 13.94, + "volume": 23797215.0 + }, + { + "time": 1475712000, + "open": 13.9107, + "high": 13.9107, + "low": 13.3473, + "close": 13.3773, + "volume": 61862850.0 + }, + { + "time": 1475798400, + "open": 13.3973, + "high": 13.4633, + "low": 13.0533, + "close": 13.1133, + "volume": 44352930.0 + }, + { + "time": 1476057600, + "open": 13.4067, + "high": 13.6093, + "low": 13.1073, + "close": 13.4133, + "volume": 43733445.0 + }, + { + "time": 1476144000, + "open": 13.4133, + "high": 13.48, + "low": 13.2207, + "close": 13.35, + "volume": 30339060.0 + }, + { + "time": 1476230400, + "open": 13.3367, + "high": 13.592, + "low": 13.32, + "close": 13.426, + "volume": 24088650.0 + }, + { + "time": 1476316800, + "open": 13.334, + "high": 13.3933, + "low": 13.1367, + "close": 13.3653, + "volume": 28215435.0 + }, + { + "time": 1476403200, + "open": 13.4013, + "high": 13.4333, + "low": 13.0867, + "close": 13.1327, + "volume": 57088020.0 + }, + { + "time": 1476662400, + "open": 13.114, + "high": 13.2307, + "low": 12.8, + "close": 12.9833, + "volume": 59920515.0 + }, + { + "time": 1476748800, + "open": 13.0513, + "high": 13.298, + "low": 12.884, + "close": 13.2867, + "volume": 77545620.0 + }, + { + "time": 1476835200, + "open": 13.2867, + "high": 13.7773, + "low": 13.178, + "close": 13.6333, + "volume": 94281555.0 + }, + { + "time": 1476921600, + "open": 13.4667, + "high": 13.5493, + "low": 13.1367, + "close": 13.2367, + "volume": 65298930.0 + }, + { + "time": 1477008000, + "open": 13.2487, + "high": 13.438, + "low": 13.1493, + "close": 13.3507, + "volume": 37628655.0 + }, + { + "time": 1477267200, + "open": 13.3667, + "high": 13.5967, + "low": 13.35, + "close": 13.4673, + "volume": 35458005.0 + }, + { + "time": 1477353600, + "open": 13.522, + "high": 13.646, + "low": 13.4047, + "close": 13.42, + "volume": 28966155.0 + }, + { + "time": 1477440000, + "open": 13.4707, + "high": 14.432, + "low": 13.3333, + "close": 14.0667, + "volume": 75116040.0 + }, + { + "time": 1477526400, + "open": 14.0367, + "high": 14.2467, + "low": 13.4433, + "close": 13.5533, + "volume": 175683330.0 + }, + { + "time": 1477612800, + "open": 13.6007, + "high": 13.688, + "low": 13.322, + "close": 13.366, + "volume": 57461385.0 + }, + { + "time": 1477872000, + "open": 13.3333, + "high": 13.556, + "low": 13.054, + "close": 13.1667, + "volume": 56721510.0 + }, + { + "time": 1477958400, + "open": 13.192, + "high": 13.2667, + "low": 12.5007, + "close": 12.5893, + "volume": 89997060.0 + }, + { + "time": 1478044800, + "open": 12.6487, + "high": 12.8467, + "low": 12.4147, + "close": 12.4827, + "volume": 54515745.0 + }, + { + "time": 1478131200, + "open": 12.5307, + "high": 12.7647, + "low": 12.4693, + "close": 12.5, + "volume": 32900445.0 + }, + { + "time": 1478217600, + "open": 12.4747, + "high": 12.8973, + "low": 12.3973, + "close": 12.7467, + "volume": 65781930.0 + }, + { + "time": 1478476800, + "open": 12.93, + "high": 12.996, + "low": 12.67, + "close": 12.89, + "volume": 50097405.0 + }, + { + "time": 1478563200, + "open": 12.8893, + "high": 13.166, + "low": 12.7507, + "close": 13.0333, + "volume": 42242490.0 + }, + { + "time": 1478649600, + "open": 12.232, + "high": 12.8, + "low": 12.1333, + "close": 12.678, + "volume": 103742010.0 + }, + { + "time": 1478736000, + "open": 12.8, + "high": 12.8733, + "low": 12.028, + "close": 12.3667, + "volume": 84858330.0 + }, + { + "time": 1478822400, + "open": 12.306, + "high": 12.592, + "low": 12.2, + "close": 12.57, + "volume": 51611205.0 + }, + { + "time": 1479081600, + "open": 12.648, + "high": 12.648, + "low": 11.8793, + "close": 12.1233, + "volume": 85608450.0 + }, + { + "time": 1479168000, + "open": 12.2167, + "high": 12.4287, + "low": 12.1253, + "close": 12.2787, + "volume": 50682225.0 + }, + { + "time": 1479254400, + "open": 12.2433, + "high": 12.3153, + "low": 12.0807, + "close": 12.2167, + "volume": 41321985.0 + }, + { + "time": 1479340800, + "open": 12.2773, + "high": 12.9, + "low": 12.1407, + "close": 12.6467, + "volume": 57600180.0 + }, + { + "time": 1479427200, + "open": 12.634, + "high": 12.8667, + "low": 12.3273, + "close": 12.3273, + "volume": 67142955.0 + }, + { + "time": 1479686400, + "open": 12.3467, + "high": 12.5927, + "low": 12.294, + "close": 12.312, + "volume": 57124485.0 + }, + { + "time": 1479772800, + "open": 12.3853, + "high": 12.7647, + "low": 12.2473, + "close": 12.7633, + "volume": 73593240.0 + }, + { + "time": 1479859200, + "open": 12.74, + "high": 13.0433, + "low": 12.6, + "close": 12.8667, + "volume": 62876265.0 + }, + { + "time": 1480032000, + "open": 12.9, + "high": 13.1493, + "low": 12.9, + "close": 13.11, + "volume": 30619665.0 + }, + { + "time": 1480291200, + "open": 13.0233, + "high": 13.29, + "low": 12.97, + "close": 13.0847, + "volume": 58714410.0 + }, + { + "time": 1480377600, + "open": 13.068, + "high": 13.1333, + "low": 12.6333, + "close": 12.6347, + "volume": 57520620.0 + }, + { + "time": 1480464000, + "open": 12.7273, + "high": 12.8, + "low": 12.5, + "close": 12.6233, + "volume": 45849390.0 + }, + { + "time": 1480550400, + "open": 12.5927, + "high": 12.6307, + "low": 12.0667, + "close": 12.1533, + "volume": 65228070.0 + }, + { + "time": 1480636800, + "open": 12.1407, + "high": 12.3253, + "low": 12.0, + "close": 12.1, + "volume": 51604950.0 + }, + { + "time": 1480896000, + "open": 12.1673, + "high": 12.5927, + "low": 12.1667, + "close": 12.4667, + "volume": 50948565.0 + }, + { + "time": 1480982400, + "open": 12.4993, + "high": 12.5067, + "low": 12.1787, + "close": 12.3833, + "volume": 44166465.0 + }, + { + "time": 1481068800, + "open": 12.43, + "high": 12.8933, + "low": 12.3333, + "close": 12.8167, + "volume": 71439045.0 + }, + { + "time": 1481155200, + "open": 12.8427, + "high": 12.8667, + "low": 12.636, + "close": 12.8, + "volume": 40960065.0 + }, + { + "time": 1481241600, + "open": 12.7807, + "high": 12.9227, + "low": 12.6833, + "close": 12.7833, + "volume": 33890505.0 + }, + { + "time": 1481500800, + "open": 12.7867, + "high": 12.9613, + "low": 12.686, + "close": 12.8287, + "volume": 31229640.0 + }, + { + "time": 1481587200, + "open": 12.87, + "high": 13.4187, + "low": 12.8667, + "close": 13.2133, + "volume": 89130030.0 + }, + { + "time": 1481673600, + "open": 13.23, + "high": 13.5333, + "low": 13.1173, + "close": 13.3, + "volume": 54654495.0 + }, + { + "time": 1481760000, + "open": 13.2493, + "high": 13.3827, + "low": 13.1593, + "close": 13.1653, + "volume": 41365305.0 + }, + { + "time": 1481846400, + "open": 13.2027, + "high": 13.506, + "low": 13.1733, + "close": 13.4933, + "volume": 49030395.0 + }, + { + "time": 1482105600, + "open": 13.51, + "high": 13.63, + "low": 13.3227, + "close": 13.4967, + "volume": 45378420.0 + }, + { + "time": 1482192000, + "open": 13.5593, + "high": 13.9333, + "low": 13.5, + "close": 13.9193, + "volume": 62280810.0 + }, + { + "time": 1482278400, + "open": 13.8893, + "high": 14.1487, + "low": 13.8273, + "close": 13.852, + "volume": 69526095.0 + }, + { + "time": 1482364800, + "open": 13.8093, + "high": 13.9993, + "low": 13.7667, + "close": 13.91, + "volume": 40609665.0 + }, + { + "time": 1482451200, + "open": 13.8667, + "high": 14.2667, + "low": 13.8473, + "close": 14.2533, + "volume": 57488535.0 + }, + { + "time": 1482796800, + "open": 14.2033, + "high": 14.8167, + "low": 14.1867, + "close": 14.6533, + "volume": 76603605.0 + }, + { + "time": 1482883200, + "open": 14.6667, + "high": 14.92, + "low": 14.48, + "close": 14.616, + "volume": 48715005.0 + }, + { + "time": 1482969600, + "open": 14.65, + "high": 14.6667, + "low": 14.2747, + "close": 14.3107, + "volume": 53864715.0 + }, + { + "time": 1483056000, + "open": 14.338, + "high": 14.5, + "low": 14.112, + "close": 14.236, + "volume": 61296165.0 + }, + { + "time": 1483401600, + "open": 14.2507, + "high": 14.6887, + "low": 13.8, + "close": 14.1893, + "volume": 76751040.0 + }, + { + "time": 1483488000, + "open": 14.2, + "high": 15.2, + "low": 14.0747, + "close": 15.1067, + "volume": 148240920.0 + }, + { + "time": 1483574400, + "open": 14.9253, + "high": 15.1653, + "low": 14.7967, + "close": 15.13, + "volume": 48295200.0 + }, + { + "time": 1483660800, + "open": 15.1167, + "high": 15.354, + "low": 15.03, + "close": 15.264, + "volume": 72480600.0 + }, + { + "time": 1483920000, + "open": 15.2667, + "high": 15.4613, + "low": 15.2, + "close": 15.4187, + "volume": 51153120.0 + }, + { + "time": 1484006400, + "open": 15.4007, + "high": 15.4667, + "low": 15.126, + "close": 15.3, + "volume": 47673600.0 + }, + { + "time": 1484092800, + "open": 15.2667, + "high": 15.334, + "low": 15.112, + "close": 15.31, + "volume": 45848955.0 + }, + { + "time": 1484179200, + "open": 15.2687, + "high": 15.38, + "low": 15.0387, + "close": 15.2933, + "volume": 47768535.0 + }, + { + "time": 1484265600, + "open": 15.3333, + "high": 15.8567, + "low": 15.2733, + "close": 15.85, + "volume": 80412510.0 + }, + { + "time": 1484611200, + "open": 15.7607, + "high": 15.9973, + "low": 15.6247, + "close": 15.7053, + "volume": 59745210.0 + }, + { + "time": 1484697600, + "open": 15.7027, + "high": 15.9807, + "low": 15.7027, + "close": 15.9147, + "volume": 48709860.0 + }, + { + "time": 1484784000, + "open": 16.4073, + "high": 16.5787, + "low": 16.05, + "close": 16.1767, + "volume": 101214150.0 + }, + { + "time": 1484870400, + "open": 16.3167, + "high": 16.4, + "low": 16.2007, + "close": 16.32, + "volume": 49923165.0 + }, + { + "time": 1485129600, + "open": 16.31, + "high": 16.726, + "low": 16.2733, + "close": 16.598, + "volume": 78557610.0 + }, + { + "time": 1485216000, + "open": 16.5553, + "high": 16.9993, + "low": 16.5553, + "close": 16.9993, + "volume": 62280870.0 + }, + { + "time": 1485302400, + "open": 17.0667, + "high": 17.2307, + "low": 16.7867, + "close": 16.96, + "volume": 65941140.0 + }, + { + "time": 1485388800, + "open": 16.9887, + "high": 17.0493, + "low": 16.7167, + "close": 16.742, + "volume": 39469215.0 + }, + { + "time": 1485475200, + "open": 16.798, + "high": 16.9853, + "low": 16.568, + "close": 16.9267, + "volume": 39775995.0 + }, + { + "time": 1485734400, + "open": 16.8633, + "high": 17.0193, + "low": 16.4733, + "close": 16.688, + "volume": 48218610.0 + }, + { + "time": 1485820800, + "open": 16.67, + "high": 17.0593, + "low": 16.5133, + "close": 16.8133, + "volume": 52682265.0 + }, + { + "time": 1485907200, + "open": 16.8767, + "high": 16.9327, + "low": 16.6033, + "close": 16.6167, + "volume": 51352470.0 + }, + { + "time": 1485993600, + "open": 16.5333, + "high": 16.828, + "low": 16.4993, + "close": 16.684, + "volume": 31979490.0 + }, + { + "time": 1486080000, + "open": 16.7533, + "high": 16.8527, + "low": 16.6453, + "close": 16.764, + "volume": 24938490.0 + }, + { + "time": 1486339200, + "open": 16.7907, + "high": 17.2027, + "low": 16.6807, + "close": 17.2027, + "volume": 45616860.0 + }, + { + "time": 1486425600, + "open": 17.1667, + "high": 17.3333, + "low": 17.0947, + "close": 17.1653, + "volume": 52628640.0 + }, + { + "time": 1486512000, + "open": 17.1833, + "high": 17.666, + "low": 17.08, + "close": 17.6493, + "volume": 50357010.0 + }, + { + "time": 1486598400, + "open": 17.638, + "high": 18.3333, + "low": 17.472, + "close": 17.95, + "volume": 101696130.0 + }, + { + "time": 1486684800, + "open": 18.0, + "high": 18.0887, + "low": 17.7407, + "close": 17.934, + "volume": 46664505.0 + }, + { + "time": 1486944000, + "open": 18.0067, + "high": 18.7333, + "low": 17.9807, + "close": 18.73, + "volume": 91768200.0 + }, + { + "time": 1487030400, + "open": 18.7333, + "high": 19.1593, + "low": 18.574, + "close": 18.732, + "volume": 94881045.0 + }, + { + "time": 1487116800, + "open": 18.6747, + "high": 18.816, + "low": 18.4293, + "close": 18.6467, + "volume": 63557535.0 + }, + { + "time": 1487203200, + "open": 18.5707, + "high": 18.6667, + "low": 17.734, + "close": 17.8333, + "volume": 89172345.0 + }, + { + "time": 1487289600, + "open": 17.5933, + "high": 18.1927, + "low": 17.51, + "close": 18.124, + "volume": 81886155.0 + }, + { + "time": 1487635200, + "open": 18.22, + "high": 18.76, + "low": 18.1487, + "close": 18.6, + "volume": 71768040.0 + }, + { + "time": 1487721600, + "open": 18.5333, + "high": 18.8967, + "low": 18.1733, + "close": 18.5113, + "volume": 113085195.0 + }, + { + "time": 1487808000, + "open": 18.6067, + "high": 18.6467, + "low": 17.0, + "close": 17.0, + "volume": 193472580.0 + }, + { + "time": 1487894400, + "open": 17.0, + "high": 17.2167, + "low": 16.68, + "close": 17.1133, + "volume": 107111355.0 + }, + { + "time": 1488153600, + "open": 17.4007, + "high": 17.4333, + "low": 16.134, + "close": 16.3867, + "volume": 150069720.0 + }, + { + "time": 1488240000, + "open": 16.2933, + "high": 16.7333, + "low": 16.26, + "close": 16.692, + "volume": 78670740.0 + }, + { + "time": 1488326400, + "open": 16.7927, + "high": 17.0, + "low": 16.6073, + "close": 16.6553, + "volume": 61044060.0 + }, + { + "time": 1488412800, + "open": 16.7, + "high": 16.8853, + "low": 16.5513, + "close": 16.6707, + "volume": 44183175.0 + }, + { + "time": 1488499200, + "open": 16.62, + "high": 16.8, + "low": 16.6, + "close": 16.75, + "volume": 38606160.0 + }, + { + "time": 1488758400, + "open": 16.7033, + "high": 16.78, + "low": 16.3593, + "close": 16.7567, + "volume": 43940415.0 + }, + { + "time": 1488844800, + "open": 16.726, + "high": 16.926, + "low": 16.4807, + "close": 16.5333, + "volume": 43656195.0 + }, + { + "time": 1488931200, + "open": 16.5793, + "high": 16.6713, + "low": 16.3547, + "close": 16.4593, + "volume": 47784270.0 + }, + { + "time": 1489017600, + "open": 16.4833, + "high": 16.5773, + "low": 16.2, + "close": 16.3533, + "volume": 50291415.0 + }, + { + "time": 1489104000, + "open": 16.4, + "high": 16.4933, + "low": 16.2, + "close": 16.2473, + "volume": 40420680.0 + }, + { + "time": 1489363200, + "open": 16.1907, + "high": 16.506, + "low": 16.1853, + "close": 16.4533, + "volume": 38125545.0 + }, + { + "time": 1489449600, + "open": 16.4373, + "high": 17.2867, + "low": 16.38, + "close": 17.2667, + "volume": 100832040.0 + }, + { + "time": 1489536000, + "open": 17.2533, + "high": 17.6467, + "low": 16.7073, + "close": 17.402, + "volume": 69533460.0 + }, + { + "time": 1489622400, + "open": 17.4067, + "high": 17.7167, + "low": 17.2707, + "close": 17.4667, + "volume": 90819975.0 + }, + { + "time": 1489708800, + "open": 17.48, + "high": 17.6887, + "low": 17.4053, + "close": 17.41, + "volume": 80565870.0 + }, + { + "time": 1489968000, + "open": 17.4167, + "high": 17.6367, + "low": 17.2547, + "close": 17.4633, + "volume": 46284510.0 + }, + { + "time": 1490054400, + "open": 17.4867, + "high": 17.6533, + "low": 16.6827, + "close": 16.7253, + "volume": 90363240.0 + }, + { + "time": 1490140800, + "open": 16.6667, + "high": 17.0327, + "low": 16.6333, + "close": 16.9853, + "volume": 50458350.0 + }, + { + "time": 1490227200, + "open": 17.0367, + "high": 17.1787, + "low": 16.8867, + "close": 16.972, + "volume": 42898545.0 + }, + { + "time": 1490313600, + "open": 17.0067, + "high": 17.5927, + "low": 17.0007, + "close": 17.5913, + "volume": 74085210.0 + }, + { + "time": 1490572800, + "open": 17.5333, + "high": 18.1267, + "low": 17.3167, + "close": 18.1, + "volume": 80728845.0 + }, + { + "time": 1490659200, + "open": 18.0667, + "high": 18.712, + "low": 17.8667, + "close": 18.5833, + "volume": 102388365.0 + }, + { + "time": 1490745600, + "open": 18.5947, + "high": 18.64, + "low": 18.3693, + "close": 18.4833, + "volume": 46356210.0 + }, + { + "time": 1490832000, + "open": 18.484, + "high": 18.8, + "low": 18.4807, + "close": 18.5333, + "volume": 53993670.0 + }, + { + "time": 1490918400, + "open": 18.512, + "high": 18.6593, + "low": 18.4207, + "close": 18.542, + "volume": 41612610.0 + }, + { + "time": 1491177600, + "open": 18.75, + "high": 19.9333, + "low": 18.5533, + "close": 19.9013, + "volume": 180777570.0 + }, + { + "time": 1491264000, + "open": 19.9333, + "high": 20.3207, + "low": 19.6353, + "close": 20.1333, + "volume": 129370695.0 + }, + { + "time": 1491350400, + "open": 20.2467, + "high": 20.3253, + "low": 19.6133, + "close": 19.6833, + "volume": 99987900.0 + }, + { + "time": 1491436800, + "open": 19.5933, + "high": 20.1293, + "low": 19.534, + "close": 19.9247, + "volume": 71159910.0 + }, + { + "time": 1491523200, + "open": 19.9233, + "high": 20.1967, + "low": 19.674, + "close": 20.1753, + "volume": 57513600.0 + }, + { + "time": 1491782400, + "open": 20.3067, + "high": 20.9153, + "low": 20.3067, + "close": 20.8147, + "volume": 97980315.0 + }, + { + "time": 1491868800, + "open": 20.8907, + "high": 20.902, + "low": 20.3667, + "close": 20.5533, + "volume": 72841680.0 + }, + { + "time": 1491955200, + "open": 20.6, + "high": 20.6433, + "low": 19.744, + "close": 19.8187, + "volume": 76993785.0 + }, + { + "time": 1492041600, + "open": 19.6587, + "high": 20.4927, + "low": 19.5667, + "close": 20.2713, + "volume": 124106325.0 + }, + { + "time": 1492387200, + "open": 20.2833, + "high": 20.2833, + "low": 19.912, + "close": 20.008, + "volume": 53491485.0 + }, + { + "time": 1492473600, + "open": 20.0327, + "high": 20.056, + "low": 19.8393, + "close": 20.0, + "volume": 38393445.0 + }, + { + "time": 1492560000, + "open": 20.0133, + "high": 20.4413, + "low": 20.0133, + "close": 20.3373, + "volume": 49679670.0 + }, + { + "time": 1492646400, + "open": 20.4, + "high": 20.61, + "low": 20.0153, + "close": 20.15, + "volume": 78870705.0 + }, + { + "time": 1492732800, + "open": 20.1867, + "high": 20.4593, + "low": 20.028, + "close": 20.4447, + "volume": 57667530.0 + }, + { + "time": 1492992000, + "open": 20.6667, + "high": 20.7033, + "low": 20.4013, + "close": 20.5153, + "volume": 65769240.0 + }, + { + "time": 1493078400, + "open": 20.5667, + "high": 20.932, + "low": 20.3907, + "close": 20.9167, + "volume": 85255320.0 + }, + { + "time": 1493164800, + "open": 20.876, + "high": 20.9667, + "low": 20.6, + "close": 20.6673, + "volume": 54209820.0 + }, + { + "time": 1493251200, + "open": 20.66, + "high": 20.8727, + "low": 20.5, + "close": 20.6067, + "volume": 44895480.0 + }, + { + "time": 1493337600, + "open": 20.6527, + "high": 21.0073, + "low": 20.5333, + "close": 20.9733, + "volume": 58899975.0 + }, + { + "time": 1493596800, + "open": 20.9993, + "high": 21.8167, + "low": 20.938, + "close": 21.5967, + "volume": 108803550.0 + }, + { + "time": 1493683200, + "open": 21.492, + "high": 21.844, + "low": 21.1, + "close": 21.1667, + "volume": 67132200.0 + }, + { + "time": 1493769600, + "open": 21.2167, + "high": 21.4353, + "low": 20.0733, + "close": 20.2467, + "volume": 88490685.0 + }, + { + "time": 1493856000, + "open": 20.34, + "high": 20.56, + "low": 19.384, + "close": 19.7253, + "volume": 178937325.0 + }, + { + "time": 1493942400, + "open": 19.7907, + "high": 20.6, + "low": 19.7373, + "close": 20.6, + "volume": 103262310.0 + }, + { + "time": 1494201600, + "open": 20.6433, + "high": 20.9193, + "low": 20.388, + "close": 20.5053, + "volume": 91822080.0 + }, + { + "time": 1494288000, + "open": 20.55, + "high": 21.466, + "low": 20.55, + "close": 21.3467, + "volume": 124801560.0 + }, + { + "time": 1494374400, + "open": 21.6, + "high": 21.7067, + "low": 21.208, + "close": 21.6807, + "volume": 72771405.0 + }, + { + "time": 1494460800, + "open": 21.7533, + "high": 21.7533, + "low": 21.23, + "close": 21.5327, + "volume": 60381360.0 + }, + { + "time": 1494547200, + "open": 21.54, + "high": 21.8, + "low": 21.4353, + "close": 21.6653, + "volume": 52982295.0 + }, + { + "time": 1494806400, + "open": 21.2587, + "high": 21.3467, + "low": 20.8353, + "close": 21.06, + "volume": 98139675.0 + }, + { + "time": 1494892800, + "open": 21.1133, + "high": 21.3373, + "low": 21.0027, + "close": 21.0333, + "volume": 53030295.0 + }, + { + "time": 1494979200, + "open": 21.0267, + "high": 21.0267, + "low": 20.352, + "close": 20.4133, + "volume": 84943980.0 + }, + { + "time": 1495065600, + "open": 20.396, + "high": 20.9293, + "low": 20.1667, + "close": 20.8233, + "volume": 73016490.0 + }, + { + "time": 1495152000, + "open": 20.8733, + "high": 21.1167, + "low": 20.6587, + "close": 20.6913, + "volume": 59414115.0 + }, + { + "time": 1495411200, + "open": 20.71, + "high": 20.958, + "low": 20.4533, + "close": 20.6473, + "volume": 53613555.0 + }, + { + "time": 1495497600, + "open": 20.732, + "high": 20.732, + "low": 20.232, + "close": 20.262, + "volume": 53430645.0 + }, + { + "time": 1501632000, + "open": 21.4, + "high": 23.736, + "low": 20.748, + "close": 23.334, + "volume": 158508465.0 + }, + { + "time": 1501718400, + "open": 23.114, + "high": 23.34, + "low": 22.8667, + "close": 23.18, + "volume": 169206135.0 + }, + { + "time": 1501804800, + "open": 23.1873, + "high": 23.84, + "low": 22.8867, + "close": 23.8187, + "volume": 118611315.0 + }, + { + "time": 1502064000, + "open": 24.0, + "high": 24.0, + "low": 23.5167, + "close": 23.6667, + "volume": 76922280.0 + }, + { + "time": 1502150400, + "open": 23.6333, + "high": 24.572, + "low": 23.6207, + "close": 24.2547, + "volume": 92226420.0 + }, + { + "time": 1502236800, + "open": 24.208, + "high": 24.6667, + "low": 23.8747, + "close": 24.2773, + "volume": 86519625.0 + }, + { + "time": 1502323200, + "open": 24.22, + "high": 24.444, + "low": 23.5533, + "close": 23.5667, + "volume": 88535805.0 + }, + { + "time": 1502409600, + "open": 23.5447, + "high": 24.084, + "low": 23.3333, + "close": 23.8667, + "volume": 54039555.0 + }, + { + "time": 1502668800, + "open": 24.0667, + "high": 24.5107, + "low": 24.0667, + "close": 24.28, + "volume": 55720770.0 + }, + { + "time": 1502755200, + "open": 24.3433, + "high": 24.38, + "low": 23.958, + "close": 24.1307, + "volume": 36768285.0 + }, + { + "time": 1502841600, + "open": 24.1533, + "high": 24.4333, + "low": 24.068, + "close": 24.2067, + "volume": 39519210.0 + }, + { + "time": 1502928000, + "open": 24.258, + "high": 24.26, + "low": 23.4267, + "close": 23.4333, + "volume": 59729325.0 + }, + { + "time": 1503014400, + "open": 23.3333, + "high": 23.6167, + "low": 23.0007, + "close": 23.0707, + "volume": 64878945.0 + }, + { + "time": 1503273600, + "open": 23.144, + "high": 23.1867, + "low": 22.1233, + "close": 22.4547, + "volume": 80873040.0 + }, + { + "time": 1503360000, + "open": 22.7793, + "high": 22.816, + "low": 22.4913, + "close": 22.7707, + "volume": 53835240.0 + }, + { + "time": 1503446400, + "open": 22.72, + "high": 23.566, + "low": 22.5413, + "close": 23.46, + "volume": 59650080.0 + }, + { + "time": 1503532800, + "open": 23.5327, + "high": 23.7773, + "low": 23.316, + "close": 23.5467, + "volume": 53365110.0 + }, + { + "time": 1503619200, + "open": 23.6, + "high": 23.7127, + "low": 23.1533, + "close": 23.1813, + "volume": 42063270.0 + }, + { + "time": 1503878400, + "open": 23.1707, + "high": 23.2267, + "low": 22.648, + "close": 22.8873, + "volume": 43703055.0 + }, + { + "time": 1503964800, + "open": 22.7333, + "high": 23.27, + "low": 22.5627, + "close": 23.1987, + "volume": 47693040.0 + }, + { + "time": 1504051200, + "open": 23.2707, + "high": 23.5653, + "low": 23.1093, + "close": 23.5653, + "volume": 39211260.0 + }, + { + "time": 1504137600, + "open": 23.5733, + "high": 23.896, + "low": 23.5213, + "close": 23.68, + "volume": 47533125.0 + }, + { + "time": 1504224000, + "open": 23.7333, + "high": 23.8393, + "low": 23.5793, + "close": 23.6673, + "volume": 36370140.0 + }, + { + "time": 1504569600, + "open": 23.6433, + "high": 23.6993, + "low": 23.0593, + "close": 23.3267, + "volume": 46009875.0 + }, + { + "time": 1504656000, + "open": 23.3707, + "high": 23.5, + "low": 22.7707, + "close": 22.9773, + "volume": 49117995.0 + }, + { + "time": 1504742400, + "open": 23.0727, + "high": 23.4987, + "low": 22.8967, + "close": 23.3787, + "volume": 50711130.0 + }, + { + "time": 1504828800, + "open": 23.3093, + "high": 23.3187, + "low": 22.82, + "close": 22.8953, + "volume": 38831370.0 + }, + { + "time": 1505088000, + "open": 23.2, + "high": 24.266, + "low": 23.2, + "close": 24.234, + "volume": 93792450.0 + }, + { + "time": 1505174400, + "open": 24.2733, + "high": 24.584, + "low": 24.0267, + "close": 24.1667, + "volume": 71484885.0 + }, + { + "time": 1505260800, + "open": 24.19, + "high": 24.538, + "low": 23.9727, + "close": 24.4, + "volume": 51254190.0 + }, + { + "time": 1505347200, + "open": 24.3333, + "high": 25.1973, + "low": 24.1753, + "close": 24.8987, + "volume": 88268760.0 + }, + { + "time": 1505433600, + "open": 24.9793, + "high": 25.36, + "low": 24.8467, + "close": 25.3553, + "volume": 65391495.0 + }, + { + "time": 1505692800, + "open": 25.4, + "high": 25.974, + "low": 25.1787, + "close": 25.6533, + "volume": 88693770.0 + }, + { + "time": 1505779200, + "open": 25.48, + "high": 25.4927, + "low": 24.9047, + "close": 24.9547, + "volume": 77656125.0 + }, + { + "time": 1505865600, + "open": 25.0133, + "high": 25.2167, + "low": 24.738, + "close": 24.944, + "volume": 60187995.0 + }, + { + "time": 1505952000, + "open": 24.928, + "high": 25.122, + "low": 24.3007, + "close": 24.432, + "volume": 58301040.0 + }, + { + "time": 1506038400, + "open": 24.4, + "high": 24.66, + "low": 23.37, + "close": 23.38, + "volume": 100120800.0 + }, + { + "time": 1506297600, + "open": 23.378, + "high": 23.8313, + "low": 22.8587, + "close": 23.002, + "volume": 95209215.0 + }, + { + "time": 1506384000, + "open": 23.08, + "high": 23.416, + "low": 22.7267, + "close": 23.0267, + "volume": 89596305.0 + }, + { + "time": 1506470400, + "open": 23.2633, + "high": 23.4327, + "low": 22.7, + "close": 22.74, + "volume": 73275165.0 + }, + { + "time": 1506556800, + "open": 22.7333, + "high": 22.85, + "low": 22.36, + "close": 22.7133, + "volume": 63105405.0 + }, + { + "time": 1506643200, + "open": 22.768, + "high": 22.9787, + "low": 22.5733, + "close": 22.72, + "volume": 62996130.0 + }, + { + "time": 1506902400, + "open": 22.872, + "high": 23.2067, + "low": 22.34, + "close": 22.4, + "volume": 63673905.0 + }, + { + "time": 1506988800, + "open": 22.4667, + "high": 23.476, + "low": 22.0853, + "close": 23.422, + "volume": 127915005.0 + }, + { + "time": 1507075200, + "open": 23.4, + "high": 23.908, + "low": 23.282, + "close": 23.7253, + "volume": 102388050.0 + }, + { + "time": 1507161600, + "open": 23.6327, + "high": 23.8293, + "low": 23.4233, + "close": 23.6967, + "volume": 49240515.0 + }, + { + "time": 1507248000, + "open": 23.6973, + "high": 24.0067, + "low": 23.4833, + "close": 23.5867, + "volume": 52458270.0 + }, + { + "time": 1507507200, + "open": 23.5587, + "high": 23.6, + "low": 22.8407, + "close": 23.0467, + "volume": 91929060.0 + }, + { + "time": 1507593600, + "open": 23.086, + "high": 23.744, + "low": 23.0353, + "close": 23.7167, + "volume": 85714425.0 + }, + { + "time": 1507680000, + "open": 23.7, + "high": 23.84, + "low": 23.41, + "close": 23.6333, + "volume": 54369930.0 + }, + { + "time": 1507766400, + "open": 23.5793, + "high": 23.9853, + "low": 23.4667, + "close": 23.6633, + "volume": 49478250.0 + }, + { + "time": 1507852800, + "open": 23.7033, + "high": 23.8993, + "low": 23.5787, + "close": 23.7467, + "volume": 42626325.0 + }, + { + "time": 1508112000, + "open": 23.5833, + "high": 23.6667, + "low": 23.144, + "close": 23.3833, + "volume": 63696315.0 + }, + { + "time": 1508198400, + "open": 23.4167, + "high": 23.748, + "low": 23.3333, + "close": 23.69, + "volume": 39478785.0 + }, + { + "time": 1508284800, + "open": 23.6267, + "high": 24.2, + "low": 23.6087, + "close": 23.9767, + "volume": 58906215.0 + }, + { + "time": 1508371200, + "open": 23.8, + "high": 23.8533, + "low": 23.2133, + "close": 23.416, + "volume": 60596670.0 + }, + { + "time": 1508457600, + "open": 23.45, + "high": 23.6367, + "low": 22.956, + "close": 22.9933, + "volume": 58987380.0 + }, + { + "time": 1508716800, + "open": 23.3133, + "high": 23.4833, + "low": 22.4167, + "close": 22.534, + "volume": 69079140.0 + }, + { + "time": 1508803200, + "open": 22.4667, + "high": 22.8533, + "low": 22.4107, + "close": 22.5, + "volume": 54037110.0 + }, + { + "time": 1508889600, + "open": 22.5013, + "high": 22.53, + "low": 21.5707, + "close": 21.75, + "volume": 84060840.0 + }, + { + "time": 1508976000, + "open": 22.1, + "high": 22.1, + "low": 21.5467, + "close": 21.886, + "volume": 59895495.0 + }, + { + "time": 1509062400, + "open": 21.6667, + "high": 21.8893, + "low": 21.1107, + "close": 21.3667, + "volume": 82456560.0 + }, + { + "time": 1509321600, + "open": 21.4073, + "high": 21.5853, + "low": 21.15, + "close": 21.2733, + "volume": 50183595.0 + }, + { + "time": 1509408000, + "open": 21.3667, + "high": 22.2, + "low": 21.3453, + "close": 22.2, + "volume": 67143015.0 + }, + { + "time": 1509494400, + "open": 22.2633, + "high": 22.2667, + "low": 20.14, + "close": 20.3267, + "volume": 98873415.0 + }, + { + "time": 1509580800, + "open": 20.3, + "high": 21.4053, + "low": 19.5087, + "close": 19.9627, + "volume": 239871705.0 + }, + { + "time": 1509667200, + "open": 19.8573, + "high": 20.434, + "low": 19.6753, + "close": 20.4133, + "volume": 106874280.0 + }, + { + "time": 1509926400, + "open": 20.4533, + "high": 20.626, + "low": 19.934, + "close": 20.1333, + "volume": 75212505.0 + }, + { + "time": 1510012800, + "open": 20.1667, + "high": 20.4333, + "low": 19.634, + "close": 20.378, + "volume": 64488030.0 + }, + { + "time": 1510099200, + "open": 20.334, + "high": 20.4593, + "low": 20.0867, + "close": 20.31, + "volume": 58790550.0 + }, + { + "time": 1510185600, + "open": 20.2873, + "high": 20.326, + "low": 19.7533, + "close": 20.14, + "volume": 64908075.0 + }, + { + "time": 1510272000, + "open": 20.1227, + "high": 20.5573, + "low": 20.1227, + "close": 20.1867, + "volume": 55910415.0 + }, + { + "time": 1510531200, + "open": 20.2667, + "high": 21.12, + "low": 19.9067, + "close": 21.0533, + "volume": 92643630.0 + }, + { + "time": 1510617600, + "open": 21.08, + "high": 21.0933, + "low": 20.46, + "close": 20.5933, + "volume": 69989505.0 + }, + { + "time": 1510704000, + "open": 20.548, + "high": 20.8327, + "low": 20.1, + "close": 20.78, + "volume": 74143695.0 + }, + { + "time": 1510790400, + "open": 20.8833, + "high": 21.2093, + "low": 20.7533, + "close": 20.8373, + "volume": 70739175.0 + }, + { + "time": 1510876800, + "open": 21.1, + "high": 21.8333, + "low": 20.8767, + "close": 21.0167, + "volume": 170145555.0 + }, + { + "time": 1511136000, + "open": 21.0333, + "high": 21.0333, + "low": 20.3167, + "close": 20.5567, + "volume": 103487040.0 + }, + { + "time": 1511222400, + "open": 20.6133, + "high": 21.2153, + "low": 20.534, + "close": 21.1733, + "volume": 91762275.0 + }, + { + "time": 1511308800, + "open": 21.2067, + "high": 21.266, + "low": 20.7893, + "close": 20.812, + "volume": 62022240.0 + }, + { + "time": 1511481600, + "open": 20.9, + "high": 21.094, + "low": 20.7333, + "close": 21.0013, + "volume": 41299770.0 + }, + { + "time": 1511740800, + "open": 21.0367, + "high": 21.1567, + "low": 20.634, + "close": 21.0747, + "volume": 55527705.0 + }, + { + "time": 1511827200, + "open": 21.0747, + "high": 21.3333, + "low": 20.928, + "close": 21.1227, + "volume": 59546580.0 + }, + { + "time": 1511913600, + "open": 21.0907, + "high": 21.2133, + "low": 20.082, + "close": 20.4633, + "volume": 101149335.0 + }, + { + "time": 1512000000, + "open": 20.5033, + "high": 20.7133, + "low": 20.3027, + "close": 20.5333, + "volume": 53600970.0 + }, + { + "time": 1512086400, + "open": 20.4667, + "high": 20.688, + "low": 20.2, + "close": 20.43, + "volume": 52615485.0 + }, + { + "time": 1512345600, + "open": 20.52, + "high": 20.618, + "low": 20.0407, + "close": 20.3107, + "volume": 73463115.0 + }, + { + "time": 1512432000, + "open": 20.2667, + "high": 20.5333, + "low": 20.0667, + "close": 20.22, + "volume": 56832825.0 + }, + { + "time": 1512518400, + "open": 20.196, + "high": 20.8927, + "low": 20.0, + "close": 20.8867, + "volume": 78075690.0 + }, + { + "time": 1512604800, + "open": 20.9, + "high": 21.2427, + "low": 20.7333, + "close": 20.75, + "volume": 56477175.0 + }, + { + "time": 1512691200, + "open": 20.8, + "high": 21.132, + "low": 20.7507, + "close": 21.0093, + "volume": 42380790.0 + }, + { + "time": 1512950400, + "open": 20.9067, + "high": 22.0067, + "low": 20.8993, + "close": 22.0067, + "volume": 99929295.0 + }, + { + "time": 1513036800, + "open": 21.9933, + "high": 22.7627, + "low": 21.84, + "close": 22.746, + "volume": 108343800.0 + }, + { + "time": 1513123200, + "open": 22.6833, + "high": 22.948, + "low": 22.4333, + "close": 22.6, + "volume": 74635725.0 + }, + { + "time": 1513209600, + "open": 22.54, + "high": 23.1627, + "low": 22.46, + "close": 22.5113, + "volume": 71098425.0 + }, + { + "time": 1513296000, + "open": 22.5333, + "high": 22.9333, + "low": 22.384, + "close": 22.8673, + "volume": 85651935.0 + }, + { + "time": 1513555200, + "open": 22.9667, + "high": 23.1333, + "low": 22.5053, + "close": 22.5933, + "volume": 67302900.0 + }, + { + "time": 1513641600, + "open": 22.6333, + "high": 22.7933, + "low": 22.02, + "close": 22.0773, + "volume": 79694640.0 + }, + { + "time": 1513728000, + "open": 22.2067, + "high": 22.34, + "low": 21.6693, + "close": 21.9767, + "volume": 72798450.0 + }, + { + "time": 1513814400, + "open": 21.924, + "high": 22.2493, + "low": 21.814, + "close": 22.11, + "volume": 54460410.0 + }, + { + "time": 1513900800, + "open": 22.1333, + "high": 22.1333, + "low": 21.6547, + "close": 21.6573, + "volume": 51109455.0 + }, + { + "time": 1514246400, + "open": 21.6807, + "high": 21.6807, + "low": 21.1053, + "close": 21.154, + "volume": 52441845.0 + }, + { + "time": 1514332800, + "open": 21.1867, + "high": 21.2, + "low": 20.7167, + "close": 20.7367, + "volume": 57229200.0 + }, + { + "time": 1514419200, + "open": 20.7507, + "high": 21.0547, + "low": 20.636, + "close": 21.032, + "volume": 53772345.0 + }, + { + "time": 1514505600, + "open": 20.9667, + "high": 21.1333, + "low": 20.6667, + "close": 20.7033, + "volume": 45971790.0 + }, + { + "time": 1514851200, + "open": 20.8, + "high": 21.474, + "low": 20.7167, + "close": 21.37, + "volume": 51439980.0 + }, + { + "time": 1514937600, + "open": 21.4333, + "high": 21.6833, + "low": 20.6, + "close": 20.7127, + "volume": 53039445.0 + }, + { + "time": 1515024000, + "open": 20.6827, + "high": 21.2367, + "low": 20.34, + "close": 21.0, + "volume": 119513085.0 + }, + { + "time": 1515110400, + "open": 21.04, + "high": 21.1493, + "low": 20.8, + "close": 21.1167, + "volume": 54689490.0 + }, + { + "time": 1515369600, + "open": 21.1667, + "high": 22.4907, + "low": 21.026, + "close": 22.4173, + "volume": 120026880.0 + }, + { + "time": 1515456000, + "open": 22.4333, + "high": 22.5867, + "low": 21.8267, + "close": 22.1627, + "volume": 85692555.0 + }, + { + "time": 1515542400, + "open": 22.0667, + "high": 22.4667, + "low": 21.9333, + "close": 22.3333, + "volume": 46271310.0 + }, + { + "time": 1515628800, + "open": 22.33, + "high": 22.9873, + "low": 22.2173, + "close": 22.54, + "volume": 80395725.0 + }, + { + "time": 1515715200, + "open": 22.6627, + "high": 22.694, + "low": 22.2447, + "close": 22.3533, + "volume": 57715995.0 + }, + { + "time": 1516060800, + "open": 22.3533, + "high": 23.0, + "low": 22.32, + "close": 22.6333, + "volume": 79779555.0 + }, + { + "time": 1516147200, + "open": 22.6867, + "high": 23.2667, + "low": 22.65, + "close": 23.1333, + "volume": 83660295.0 + }, + { + "time": 1516233600, + "open": 23.2, + "high": 23.4867, + "low": 22.916, + "close": 22.9767, + "volume": 67304595.0 + }, + { + "time": 1516320000, + "open": 23.008, + "high": 23.4, + "low": 22.84, + "close": 23.4, + "volume": 58015335.0 + }, + { + "time": 1516579200, + "open": 23.3347, + "high": 23.8553, + "low": 23.2333, + "close": 23.4647, + "volume": 76691625.0 + }, + { + "time": 1516665600, + "open": 23.68, + "high": 24.1867, + "low": 23.4, + "close": 23.5787, + "volume": 66095520.0 + }, + { + "time": 1516752000, + "open": 23.56, + "high": 23.7333, + "low": 22.9013, + "close": 23.17, + "volume": 62762115.0 + }, + { + "time": 1516838400, + "open": 23.17, + "high": 23.324, + "low": 22.4267, + "close": 22.7, + "volume": 82199130.0 + }, + { + "time": 1516924800, + "open": 22.7993, + "high": 22.9333, + "low": 22.3807, + "close": 22.8567, + "volume": 52383270.0 + }, + { + "time": 1517184000, + "open": 22.76, + "high": 23.39, + "low": 22.552, + "close": 23.2667, + "volume": 55837245.0 + }, + { + "time": 1517270400, + "open": 23.2167, + "high": 23.35, + "low": 22.8113, + "close": 23.052, + "volume": 51916335.0 + }, + { + "time": 1517356800, + "open": 23.1653, + "high": 23.746, + "low": 23.0127, + "close": 23.7, + "volume": 68225850.0 + }, + { + "time": 1517443200, + "open": 23.72, + "high": 23.9773, + "low": 23.242, + "close": 23.3667, + "volume": 48808785.0 + }, + { + "time": 1517529600, + "open": 23.2467, + "high": 23.4633, + "low": 22.7007, + "close": 22.84, + "volume": 42620370.0 + }, + { + "time": 1517788800, + "open": 22.6, + "high": 22.9647, + "low": 22.0, + "close": 22.0333, + "volume": 49498560.0 + }, + { + "time": 1517875200, + "open": 22.0367, + "high": 22.4147, + "low": 21.542, + "close": 22.3953, + "volume": 58819215.0 + }, + { + "time": 1517961600, + "open": 22.3327, + "high": 23.778, + "low": 22.1893, + "close": 22.9, + "volume": 81471840.0 + }, + { + "time": 1518048000, + "open": 22.896, + "high": 23.2413, + "low": 20.8667, + "close": 21.0667, + "volume": 122580555.0 + }, + { + "time": 1518134400, + "open": 21.4, + "high": 21.5933, + "low": 19.6507, + "close": 20.75, + "volume": 157762590.0 + }, + { + "time": 1518393600, + "open": 21.066, + "high": 21.2747, + "low": 20.4167, + "close": 21.0487, + "volume": 74060220.0 + }, + { + "time": 1518480000, + "open": 21.128, + "high": 21.7327, + "low": 20.834, + "close": 21.6333, + "volume": 53357370.0 + }, + { + "time": 1518566400, + "open": 21.612, + "high": 21.7447, + "low": 21.2347, + "close": 21.5333, + "volume": 46124280.0 + }, + { + "time": 1518652800, + "open": 21.64, + "high": 22.324, + "low": 21.4933, + "close": 22.3, + "volume": 68946270.0 + }, + { + "time": 1518739200, + "open": 22.3333, + "high": 22.8747, + "low": 22.0867, + "close": 22.3667, + "volume": 67143360.0 + }, + { + "time": 1519084800, + "open": 22.3073, + "high": 22.7227, + "low": 22.1, + "close": 22.34, + "volume": 47355345.0 + }, + { + "time": 1519171200, + "open": 22.3407, + "high": 22.6427, + "low": 22.1767, + "close": 22.1813, + "volume": 37654230.0 + }, + { + "time": 1519257600, + "open": 22.138, + "high": 23.1627, + "low": 22.1333, + "close": 23.1033, + "volume": 80854995.0 + }, + { + "time": 1519344000, + "open": 23.2, + "high": 23.666, + "low": 23.14, + "close": 23.4627, + "volume": 69096450.0 + }, + { + "time": 1519603200, + "open": 23.62, + "high": 23.9333, + "low": 23.49, + "close": 23.8667, + "volume": 52423515.0 + }, + { + "time": 1519689600, + "open": 23.7893, + "high": 23.9993, + "low": 23.334, + "close": 23.4067, + "volume": 55899915.0 + }, + { + "time": 1519776000, + "open": 23.4, + "high": 23.6827, + "low": 22.8147, + "close": 22.9467, + "volume": 74032890.0 + }, + { + "time": 1519862400, + "open": 22.8867, + "high": 23.2447, + "low": 22.0047, + "close": 22.1, + "volume": 82409115.0 + }, + { + "time": 1519948800, + "open": 22.1333, + "high": 22.348, + "low": 21.5313, + "close": 22.34, + "volume": 59703135.0 + }, + { + "time": 1520208000, + "open": 22.2813, + "high": 22.5167, + "low": 21.9527, + "close": 22.2633, + "volume": 44503275.0 + }, + { + "time": 1520294400, + "open": 22.28, + "high": 22.4247, + "low": 21.5333, + "close": 21.5333, + "volume": 51460950.0 + }, + { + "time": 1520380800, + "open": 21.6133, + "high": 22.1667, + "low": 21.4493, + "close": 22.0967, + "volume": 59825250.0 + }, + { + "time": 1520467200, + "open": 22.1333, + "high": 22.3, + "low": 21.5267, + "close": 21.7067, + "volume": 41452350.0 + }, + { + "time": 1520553600, + "open": 21.7673, + "high": 21.8993, + "low": 21.4913, + "close": 21.8053, + "volume": 63614580.0 + }, + { + "time": 1520812800, + "open": 21.92, + "high": 23.1473, + "low": 21.7667, + "close": 22.9967, + "volume": 100808145.0 + }, + { + "time": 1520899200, + "open": 22.886, + "high": 23.0987, + "low": 22.4173, + "close": 22.6833, + "volume": 71138010.0 + }, + { + "time": 1520985600, + "open": 22.758, + "high": 22.7813, + "low": 21.5953, + "close": 21.8333, + "volume": 94350375.0 + }, + { + "time": 1521072000, + "open": 21.8333, + "high": 22.19, + "low": 21.4067, + "close": 21.6653, + "volume": 76010130.0 + }, + { + "time": 1521158400, + "open": 21.6973, + "high": 21.8267, + "low": 21.2713, + "close": 21.4367, + "volume": 74099280.0 + }, + { + "time": 1521417600, + "open": 21.3533, + "high": 21.3833, + "low": 20.6447, + "close": 20.9107, + "volume": 89344530.0 + }, + { + "time": 1521504000, + "open": 20.9733, + "high": 21.0833, + "low": 20.584, + "close": 20.734, + "volume": 53260785.0 + }, + { + "time": 1521590400, + "open": 20.73, + "high": 21.496, + "low": 20.6127, + "close": 21.1333, + "volume": 71613060.0 + }, + { + "time": 1521676800, + "open": 21.05, + "high": 21.2547, + "low": 20.5333, + "close": 20.5333, + "volume": 52637865.0 + }, + { + "time": 1521763200, + "open": 20.5393, + "high": 20.8667, + "low": 20.03, + "close": 20.15, + "volume": 75360090.0 + }, + { + "time": 1522022400, + "open": 20.268, + "high": 20.6, + "low": 19.424, + "close": 20.3267, + "volume": 97042815.0 + }, + { + "time": 1522108800, + "open": 20.3333, + "high": 20.5, + "low": 18.074, + "close": 18.3, + "volume": 158944560.0 + }, + { + "time": 1522195200, + "open": 18.264, + "high": 18.5933, + "low": 16.8067, + "close": 16.9667, + "volume": 243796575.0 + }, + { + "time": 1522281600, + "open": 17.0807, + "high": 18.064, + "low": 16.5473, + "close": 17.3, + "volume": 177807180.0 + }, + { + "time": 1522627200, + "open": 17.0, + "high": 17.742, + "low": 16.306, + "close": 16.8067, + "volume": 195963285.0 + }, + { + "time": 1522713600, + "open": 17.0133, + "high": 18.2233, + "low": 16.9067, + "close": 17.88, + "volume": 230425485.0 + }, + { + "time": 1522800000, + "open": 17.7733, + "high": 19.2247, + "low": 16.8, + "close": 19.2133, + "volume": 246546495.0 + }, + { + "time": 1522886400, + "open": 19.26, + "high": 20.4173, + "low": 19.1333, + "close": 19.8667, + "volume": 226914720.0 + }, + { + "time": 1522972800, + "open": 19.8667, + "high": 20.6187, + "low": 19.7, + "close": 19.88, + "volume": 164396325.0 + }, + { + "time": 1523232000, + "open": 19.9927, + "high": 20.6333, + "low": 19.2267, + "close": 19.4267, + "volume": 124936080.0 + }, + { + "time": 1523318400, + "open": 19.8933, + "high": 20.4733, + "low": 19.5787, + "close": 20.22, + "volume": 133247355.0 + }, + { + "time": 1523404800, + "open": 20.1833, + "high": 20.5987, + "low": 19.9333, + "close": 20.1133, + "volume": 84874725.0 + }, + { + "time": 1523491200, + "open": 19.9853, + "high": 20.3333, + "low": 19.5787, + "close": 19.6667, + "volume": 86663775.0 + }, + { + "time": 1523577600, + "open": 19.68, + "high": 20.2653, + "low": 19.68, + "close": 19.98, + "volume": 87163425.0 + }, + { + "time": 1523836800, + "open": 20.0, + "high": 20.1, + "low": 19.2547, + "close": 19.3667, + "volume": 76768875.0 + }, + { + "time": 1523923200, + "open": 19.2467, + "high": 19.6933, + "low": 18.834, + "close": 19.584, + "volume": 84747060.0 + }, + { + "time": 1524009600, + "open": 19.574, + "high": 20.016, + "low": 19.2107, + "close": 19.6413, + "volume": 79921260.0 + }, + { + "time": 1524096000, + "open": 19.5767, + "high": 20.0673, + "low": 19.2367, + "close": 19.93, + "volume": 71637165.0 + }, + { + "time": 1524182400, + "open": 19.8667, + "high": 19.9987, + "low": 19.3073, + "close": 19.3167, + "volume": 67236780.0 + }, + { + "time": 1524441600, + "open": 19.38, + "high": 19.5533, + "low": 18.822, + "close": 18.9333, + "volume": 57966930.0 + }, + { + "time": 1524528000, + "open": 19.1, + "high": 19.1927, + "low": 18.564, + "close": 18.8667, + "volume": 63192825.0 + }, + { + "time": 1524614400, + "open": 18.9, + "high": 19.0107, + "low": 18.4833, + "close": 18.8527, + "volume": 45042330.0 + }, + { + "time": 1524700800, + "open": 18.8253, + "high": 19.1333, + "low": 18.4333, + "close": 19.0853, + "volume": 50144700.0 + }, + { + "time": 1524787200, + "open": 19.0333, + "high": 19.6313, + "low": 18.7867, + "close": 19.5, + "volume": 49810530.0 + }, + { + "time": 1525046400, + "open": 19.5513, + "high": 19.9153, + "low": 19.454, + "close": 19.5893, + "volume": 47944485.0 + }, + { + "time": 1525132800, + "open": 19.5967, + "high": 20.0767, + "low": 19.548, + "close": 20.0667, + "volume": 46620600.0 + }, + { + "time": 1525219200, + "open": 20.0267, + "high": 20.7733, + "low": 18.8147, + "close": 19.164, + "volume": 100044315.0 + }, + { + "time": 1525305600, + "open": 19.2667, + "high": 19.3667, + "low": 18.3487, + "close": 18.8667, + "volume": 200230050.0 + }, + { + "time": 1525392000, + "open": 18.9333, + "high": 19.7907, + "low": 18.6347, + "close": 19.55, + "volume": 97219695.0 + }, + { + "time": 1525651200, + "open": 19.6107, + "high": 20.3973, + "low": 19.55, + "close": 20.2653, + "volume": 100077990.0 + }, + { + "time": 1525737600, + "open": 20.2033, + "high": 20.5167, + "low": 19.9333, + "close": 20.12, + "volume": 69679140.0 + }, + { + "time": 1525824000, + "open": 20.1333, + "high": 20.4673, + "low": 19.9533, + "close": 20.3987, + "volume": 65864130.0 + }, + { + "time": 1525910400, + "open": 20.4567, + "high": 20.866, + "low": 20.2367, + "close": 20.2367, + "volume": 65703270.0 + }, + { + "time": 1525996800, + "open": 20.3213, + "high": 20.592, + "low": 19.9387, + "close": 20.04, + "volume": 52073175.0 + }, + { + "time": 1526256000, + "open": 20.3333, + "high": 20.4667, + "low": 19.4, + "close": 19.4, + "volume": 83199000.0 + }, + { + "time": 1526342400, + "open": 19.3333, + "high": 19.3333, + "low": 18.7, + "close": 18.8667, + "volume": 109926450.0 + }, + { + "time": 1526428800, + "open": 18.9153, + "high": 19.254, + "low": 18.7707, + "close": 19.0933, + "volume": 65149395.0 + }, + { + "time": 1526515200, + "open": 19.0527, + "high": 19.2793, + "low": 18.92, + "close": 19.0367, + "volume": 50506260.0 + }, + { + "time": 1526601600, + "open": 19.0073, + "high": 19.0633, + "low": 18.2667, + "close": 18.4533, + "volume": 82659480.0 + }, + { + "time": 1526860800, + "open": 18.7, + "high": 19.4327, + "low": 18.6467, + "close": 18.9333, + "volume": 110223840.0 + }, + { + "time": 1526947200, + "open": 19.0267, + "high": 19.2333, + "low": 18.228, + "close": 18.342, + "volume": 104515395.0 + }, + { + "time": 1527033600, + "open": 18.3333, + "high": 18.6607, + "low": 18.1653, + "close": 18.56, + "volume": 68248245.0 + }, + { + "time": 1527120000, + "open": 18.6047, + "high": 18.7407, + "low": 18.326, + "close": 18.5653, + "volume": 48098295.0 + }, + { + "time": 1527206400, + "open": 18.5667, + "high": 18.6427, + "low": 18.374, + "close": 18.6, + "volume": 43134090.0 + }, + { + "time": 1527552000, + "open": 18.6, + "high": 19.1, + "low": 18.41, + "close": 18.8333, + "volume": 68391420.0 + }, + { + "time": 1527638400, + "open": 18.8667, + "high": 19.6673, + "low": 18.7407, + "close": 19.4133, + "volume": 86829480.0 + }, + { + "time": 1527724800, + "open": 19.4007, + "high": 19.4267, + "low": 18.862, + "close": 18.9667, + "volume": 65445975.0 + }, + { + "time": 1527811200, + "open": 18.9873, + "high": 19.4667, + "low": 18.922, + "close": 19.4667, + "volume": 60092265.0 + }, + { + "time": 1528070400, + "open": 19.47, + "high": 19.9333, + "low": 19.466, + "close": 19.7167, + "volume": 56356245.0 + }, + { + "time": 1528156800, + "open": 19.7, + "high": 19.8667, + "low": 19.116, + "close": 19.6, + "volume": 67469700.0 + }, + { + "time": 1528243200, + "open": 19.6067, + "high": 21.478, + "low": 19.574, + "close": 21.2667, + "volume": 223350765.0 + }, + { + "time": 1528329600, + "open": 21.22, + "high": 22.0, + "low": 20.9053, + "close": 21.12, + "volume": 173810055.0 + }, + { + "time": 1528416000, + "open": 21.0407, + "high": 21.632, + "low": 20.9, + "close": 21.1773, + "volume": 97360800.0 + }, + { + "time": 1528675200, + "open": 21.1773, + "high": 22.3107, + "low": 21.1773, + "close": 22.2153, + "volume": 159962145.0 + }, + { + "time": 1528761600, + "open": 22.238, + "high": 23.6647, + "low": 22.238, + "close": 22.8413, + "volume": 268792350.0 + }, + { + "time": 1528848000, + "open": 23.0, + "high": 23.3387, + "low": 22.6, + "close": 23.1987, + "volume": 115255125.0 + }, + { + "time": 1528934400, + "open": 23.06, + "high": 23.9167, + "low": 22.9993, + "close": 23.8, + "volume": 133885455.0 + }, + { + "time": 1529020800, + "open": 23.7167, + "high": 24.3113, + "low": 23.4167, + "close": 23.9, + "volume": 128061330.0 + }, + { + "time": 1529280000, + "open": 23.7087, + "high": 24.9153, + "low": 23.4, + "close": 24.494, + "volume": 145368480.0 + }, + { + "time": 1529366400, + "open": 24.3333, + "high": 24.6667, + "low": 23.0833, + "close": 23.414, + "volume": 155148825.0 + }, + { + "time": 1529452800, + "open": 23.6, + "high": 24.292, + "low": 23.4667, + "close": 24.1833, + "volume": 99665430.0 + }, + { + "time": 1529539200, + "open": 24.1733, + "high": 24.4147, + "low": 23.0673, + "close": 23.0673, + "volume": 94828470.0 + }, + { + "time": 1529625600, + "open": 23.0667, + "high": 23.6807, + "low": 22.1333, + "close": 22.2167, + "volume": 120476655.0 + }, + { + "time": 1529884800, + "open": 22.17, + "high": 22.5647, + "low": 21.8333, + "close": 22.2287, + "volume": 80040690.0 + }, + { + "time": 1529971200, + "open": 22.15, + "high": 22.9033, + "low": 21.7193, + "close": 22.82, + "volume": 90073035.0 + }, + { + "time": 1530057600, + "open": 22.6667, + "high": 23.386, + "low": 22.4507, + "close": 23.026, + "volume": 101165250.0 + }, + { + "time": 1530144000, + "open": 23.16, + "high": 23.8013, + "low": 22.932, + "close": 23.35, + "volume": 100403235.0 + }, + { + "time": 1530230400, + "open": 23.4467, + "high": 23.728, + "low": 22.8207, + "close": 22.9333, + "volume": 79185540.0 + }, + { + "time": 1530489600, + "open": 23.8067, + "high": 24.4467, + "low": 21.99, + "close": 22.456, + "volume": 233595795.0 + }, + { + "time": 1530576000, + "open": 22.4567, + "high": 22.4667, + "low": 20.62, + "close": 20.654, + "volume": 149002155.0 + }, + { + "time": 1530748800, + "open": 20.7333, + "high": 21.0, + "low": 19.748, + "close": 20.5007, + "volume": 213613665.0 + }, + { + "time": 1530835200, + "open": 20.6, + "high": 20.8047, + "low": 20.1333, + "close": 20.6, + "volume": 110289180.0 + }, + { + "time": 1531094400, + "open": 20.7933, + "high": 21.2347, + "low": 20.5333, + "close": 21.2193, + "volume": 89890020.0 + }, + { + "time": 1531180800, + "open": 21.2667, + "high": 21.9653, + "low": 21.0707, + "close": 21.1267, + "volume": 113676510.0 + }, + { + "time": 1531267200, + "open": 21.1733, + "high": 21.4627, + "low": 20.9427, + "close": 21.2333, + "volume": 58766760.0 + }, + { + "time": 1531353600, + "open": 21.3667, + "high": 21.562, + "low": 20.8513, + "close": 21.076, + "volume": 67817835.0 + }, + { + "time": 1531440000, + "open": 21.1733, + "high": 21.306, + "low": 20.6167, + "close": 21.2267, + "volume": 73379730.0 + }, + { + "time": 1531699200, + "open": 21.124, + "high": 21.1433, + "low": 20.4167, + "close": 20.48, + "volume": 96201240.0 + }, + { + "time": 1531785600, + "open": 20.5733, + "high": 21.6493, + "low": 20.4667, + "close": 21.49, + "volume": 84189390.0 + }, + { + "time": 1531872000, + "open": 21.5067, + "high": 21.7267, + "low": 21.0833, + "close": 21.612, + "volume": 69456900.0 + }, + { + "time": 1531958400, + "open": 21.4667, + "high": 21.5693, + "low": 20.934, + "close": 21.3667, + "volume": 72958365.0 + }, + { + "time": 1532044800, + "open": 21.408, + "high": 21.5493, + "low": 20.78, + "close": 20.904, + "volume": 62980500.0 + }, + { + "time": 1532304000, + "open": 20.666, + "high": 20.666, + "low": 19.524, + "close": 20.2667, + "volume": 129825210.0 + }, + { + "time": 1532390400, + "open": 20.266, + "high": 20.5147, + "low": 19.5027, + "close": 19.7987, + "volume": 115360290.0 + }, + { + "time": 1532476800, + "open": 19.8287, + "high": 20.6413, + "low": 19.5333, + "close": 20.1333, + "volume": 86301735.0 + }, + { + "time": 1532563200, + "open": 20.214, + "high": 20.7133, + "low": 20.214, + "close": 20.5, + "volume": 56522880.0 + }, + { + "time": 1532649600, + "open": 20.5667, + "high": 20.5667, + "low": 19.6893, + "close": 19.7993, + "volume": 52540545.0 + }, + { + "time": 1532908800, + "open": 19.6667, + "high": 19.8013, + "low": 19.0753, + "close": 19.3333, + "volume": 79959210.0 + }, + { + "time": 1532995200, + "open": 19.27, + "high": 19.9907, + "low": 19.27, + "close": 19.854, + "volume": 60069180.0 + }, + { + "time": 1533081600, + "open": 19.9567, + "high": 22.3833, + "low": 19.3333, + "close": 21.9327, + "volume": 117020970.0 + }, + { + "time": 1533168000, + "open": 21.77, + "high": 23.3333, + "low": 21.544, + "close": 23.3213, + "volume": 279512445.0 + }, + { + "time": 1533254400, + "open": 23.0667, + "high": 23.6667, + "low": 22.8353, + "close": 23.1367, + "volume": 159452790.0 + }, + { + "time": 1533513600, + "open": 23.0567, + "high": 23.6653, + "low": 22.6013, + "close": 22.6667, + "volume": 102678015.0 + }, + { + "time": 1533600000, + "open": 22.7373, + "high": 25.8307, + "low": 22.61, + "close": 25.1333, + "volume": 381052725.0 + }, + { + "time": 1533686400, + "open": 25.266, + "high": 25.5093, + "low": 24.4347, + "close": 24.6333, + "volume": 280429020.0 + }, + { + "time": 1533772800, + "open": 24.5067, + "high": 24.5867, + "low": 23.0487, + "close": 23.874, + "volume": 199309800.0 + }, + { + "time": 1533859200, + "open": 23.7333, + "high": 24.1933, + "low": 23.0667, + "close": 23.48, + "volume": 137798880.0 + }, + { + "time": 1534118400, + "open": 23.54, + "high": 24.5327, + "low": 23.268, + "close": 23.6393, + "volume": 121692615.0 + }, + { + "time": 1534204800, + "open": 23.8253, + "high": 23.9467, + "low": 23.1133, + "close": 23.1333, + "volume": 82835430.0 + }, + { + "time": 1534291200, + "open": 23.246, + "high": 23.3227, + "low": 22.1427, + "close": 22.3733, + "volume": 105751815.0 + }, + { + "time": 1534377600, + "open": 22.5533, + "high": 22.9567, + "low": 22.2547, + "close": 22.34, + "volume": 66955965.0 + }, + { + "time": 1534464000, + "open": 22.2067, + "high": 22.2667, + "low": 20.2033, + "close": 20.2033, + "volume": 224153370.0 + }, + { + "time": 1534723200, + "open": 20.2333, + "high": 20.5993, + "low": 18.8193, + "close": 20.4933, + "volume": 202795425.0 + }, + { + "time": 1534809600, + "open": 20.56, + "high": 21.6527, + "low": 20.534, + "close": 21.2, + "volume": 156089955.0 + }, + { + "time": 1534896000, + "open": 21.372, + "high": 21.592, + "low": 20.978, + "close": 21.4867, + "volume": 73769700.0 + }, + { + "time": 1534982400, + "open": 21.4867, + "high": 21.8213, + "low": 21.2067, + "close": 21.3587, + "volume": 63324510.0 + }, + { + "time": 1535068800, + "open": 21.3593, + "high": 21.59, + "low": 21.2933, + "close": 21.4793, + "volume": 42289110.0 + }, + { + "time": 1535328000, + "open": 20.6667, + "high": 21.496, + "low": 20.2347, + "close": 21.2273, + "volume": 164076645.0 + }, + { + "time": 1535414400, + "open": 21.3067, + "high": 21.3067, + "low": 20.746, + "close": 20.8333, + "volume": 94857345.0 + }, + { + "time": 1535500800, + "open": 20.776, + "high": 20.8233, + "low": 20.2333, + "close": 20.2413, + "volume": 90330150.0 + }, + { + "time": 1535587200, + "open": 20.2333, + "high": 20.38, + "low": 19.848, + "close": 20.1533, + "volume": 87190275.0 + }, + { + "time": 1535673600, + "open": 20.1667, + "high": 20.354, + "low": 19.9067, + "close": 20.09, + "volume": 64315245.0 + }, + { + "time": 1536019200, + "open": 20.0, + "high": 20.0, + "low": 19.1507, + "close": 19.1507, + "volume": 100324125.0 + }, + { + "time": 1536105600, + "open": 19.2, + "high": 19.2213, + "low": 18.4787, + "close": 18.8167, + "volume": 87707505.0 + }, + { + "time": 1536192000, + "open": 18.83, + "high": 19.4113, + "low": 18.592, + "close": 18.7667, + "volume": 88452450.0 + }, + { + "time": 1536278400, + "open": 18.7333, + "high": 18.7333, + "low": 16.8167, + "close": 17.6353, + "volume": 264414765.0 + }, + { + "time": 1536537600, + "open": 17.8667, + "high": 19.1333, + "low": 17.866, + "close": 18.9793, + "volume": 176956905.0 + }, + { + "time": 1536624000, + "open": 19.0, + "high": 19.0327, + "low": 18.2367, + "close": 18.62, + "volume": 110538330.0 + }, + { + "time": 1536710400, + "open": 18.7333, + "high": 19.5, + "low": 18.576, + "close": 19.35, + "volume": 118337070.0 + }, + { + "time": 1536796800, + "open": 19.3567, + "high": 19.6667, + "low": 19.012, + "close": 19.3167, + "volume": 73748235.0 + }, + { + "time": 1536883200, + "open": 19.4233, + "high": 19.822, + "low": 19.1013, + "close": 19.6587, + "volume": 79030395.0 + }, + { + "time": 1537142400, + "open": 19.6467, + "high": 20.058, + "low": 19.0813, + "close": 19.5267, + "volume": 81452700.0 + }, + { + "time": 1537228800, + "open": 19.8527, + "high": 20.176, + "low": 18.3667, + "close": 18.8067, + "volume": 201292170.0 + }, + { + "time": 1537315200, + "open": 18.954, + "high": 20.0, + "low": 18.56, + "close": 19.8833, + "volume": 96540390.0 + }, + { + "time": 1537401600, + "open": 19.9647, + "high": 20.3987, + "low": 19.5553, + "close": 19.9187, + "volume": 87191865.0 + }, + { + "time": 1537488000, + "open": 19.8653, + "high": 20.0387, + "low": 19.6913, + "close": 19.828, + "volume": 55254180.0 + }, + { + "time": 1537747200, + "open": 19.6667, + "high": 20.2, + "low": 19.572, + "close": 19.912, + "volume": 56511855.0 + }, + { + "time": 1537833600, + "open": 19.9333, + "high": 20.3067, + "low": 19.7667, + "close": 20.0, + "volume": 52293330.0 + }, + { + "time": 1537920000, + "open": 20.1333, + "high": 20.926, + "low": 20.0667, + "close": 20.7, + "volume": 91873710.0 + }, + { + "time": 1538006400, + "open": 20.6333, + "high": 21.0, + "low": 17.6667, + "close": 18.06, + "volume": 95037525.0 + }, + { + "time": 1538092800, + "open": 18.2007, + "high": 18.5333, + "low": 17.37, + "close": 17.7333, + "volume": 403081170.0 + }, + { + "time": 1538352000, + "open": 19.726, + "high": 21.03, + "low": 19.4333, + "close": 20.3333, + "volume": 260729640.0 + }, + { + "time": 1538438400, + "open": 20.5847, + "high": 21.166, + "low": 19.9433, + "close": 20.2733, + "volume": 139184115.0 + }, + { + "time": 1538524800, + "open": 20.3333, + "high": 20.4333, + "low": 19.438, + "close": 19.654, + "volume": 96930465.0 + }, + { + "time": 1538611200, + "open": 19.68, + "high": 19.68, + "low": 18.1333, + "close": 18.35, + "volume": 114758670.0 + }, + { + "time": 1538697600, + "open": 18.2673, + "high": 18.35, + "low": 17.3333, + "close": 17.53, + "volume": 208825890.0 + }, + { + "time": 1538956800, + "open": 17.5333, + "high": 17.8507, + "low": 16.6, + "close": 17.03, + "volume": 153828015.0 + }, + { + "time": 1539043200, + "open": 17.0, + "high": 17.7847, + "low": 16.8347, + "close": 17.6507, + "volume": 141231210.0 + }, + { + "time": 1539129600, + "open": 17.6507, + "high": 17.766, + "low": 16.518, + "close": 16.8133, + "volume": 148776810.0 + }, + { + "time": 1539216000, + "open": 17.0, + "high": 17.4833, + "low": 16.602, + "close": 17.0, + "volume": 94547865.0 + }, + { + "time": 1539302400, + "open": 17.0667, + "high": 17.466, + "low": 16.8007, + "close": 17.2333, + "volume": 83192580.0 + }, + { + "time": 1539561600, + "open": 17.148, + "high": 17.552, + "low": 16.9687, + "close": 17.3, + "volume": 74660160.0 + }, + { + "time": 1539648000, + "open": 17.3333, + "high": 18.6, + "low": 17.2747, + "close": 18.6, + "volume": 107659140.0 + }, + { + "time": 1539734400, + "open": 18.5833, + "high": 18.8667, + "low": 17.72, + "close": 17.9347, + "volume": 101049495.0 + }, + { + "time": 1539820800, + "open": 18.0, + "high": 18.0667, + "low": 17.5333, + "close": 17.7213, + "volume": 62268090.0 + }, + { + "time": 1539907200, + "open": 17.8333, + "high": 17.99, + "low": 16.9, + "close": 17.304, + "volume": 110253090.0 + }, + { + "time": 1540166400, + "open": 17.3993, + "high": 17.5133, + "low": 16.8393, + "close": 17.3533, + "volume": 61455330.0 + }, + { + "time": 1540252800, + "open": 17.2667, + "high": 19.9, + "low": 17.108, + "close": 19.8467, + "volume": 224905620.0 + }, + { + "time": 1540339200, + "open": 19.8, + "high": 22.1333, + "low": 19.0, + "close": 21.12, + "volume": 235572405.0 + }, + { + "time": 1540425600, + "open": 21.1333, + "high": 21.666, + "low": 20.0673, + "close": 20.748, + "volume": 246957480.0 + }, + { + "time": 1540512000, + "open": 20.4867, + "high": 22.66, + "low": 20.1247, + "close": 21.7993, + "volume": 331244850.0 + }, + { + "time": 1540771200, + "open": 21.6667, + "high": 23.144, + "low": 21.596, + "close": 22.1013, + "volume": 177468000.0 + }, + { + "time": 1540857600, + "open": 22.1013, + "high": 22.5267, + "low": 21.484, + "close": 22.0333, + "volume": 111830760.0 + }, + { + "time": 1540944000, + "open": 22.12, + "high": 22.8, + "low": 21.94, + "close": 22.486, + "volume": 88997550.0 + }, + { + "time": 1541030400, + "open": 22.6433, + "high": 23.1893, + "low": 22.3147, + "close": 22.8, + "volume": 98076885.0 + }, + { + "time": 1541116800, + "open": 23.1333, + "high": 23.28, + "low": 22.7273, + "close": 23.034, + "volume": 96029265.0 + }, + { + "time": 1541376000, + "open": 23.0, + "high": 23.0, + "low": 22.0093, + "close": 22.7793, + "volume": 93116505.0 + }, + { + "time": 1541462400, + "open": 22.6733, + "high": 23.2533, + "low": 22.406, + "close": 22.8753, + "volume": 83178450.0 + }, + { + "time": 1541548800, + "open": 22.9333, + "high": 23.412, + "low": 22.72, + "close": 23.2053, + "volume": 82208655.0 + }, + { + "time": 1541635200, + "open": 23.2667, + "high": 23.8387, + "low": 23.134, + "close": 23.426, + "volume": 83512380.0 + }, + { + "time": 1541721600, + "open": 23.2453, + "high": 23.6, + "low": 23.0153, + "close": 23.3667, + "volume": 62071020.0 + }, + { + "time": 1541980800, + "open": 23.3333, + "high": 23.372, + "low": 21.9, + "close": 21.9, + "volume": 85421925.0 + }, + { + "time": 1542067200, + "open": 22.1667, + "high": 22.98, + "low": 22.1467, + "close": 22.7167, + "volume": 61718760.0 + }, + { + "time": 1542153600, + "open": 22.52, + "high": 23.1407, + "low": 22.4733, + "close": 22.8947, + "volume": 61075260.0 + }, + { + "time": 1542240000, + "open": 23.0, + "high": 23.2387, + "low": 22.6027, + "close": 23.1333, + "volume": 55608810.0 + }, + { + "time": 1542326400, + "open": 23.0767, + "high": 23.7133, + "low": 22.9333, + "close": 23.6267, + "volume": 83323110.0 + }, + { + "time": 1542585600, + "open": 23.6833, + "high": 24.45, + "low": 23.4867, + "close": 23.5933, + "volume": 117911925.0 + }, + { + "time": 1542672000, + "open": 23.5, + "high": 23.5, + "low": 22.2367, + "close": 23.1653, + "volume": 96513690.0 + }, + { + "time": 1542758400, + "open": 23.3333, + "high": 23.6, + "low": 22.4767, + "close": 22.56, + "volume": 55336395.0 + }, + { + "time": 1542931200, + "open": 22.3333, + "high": 22.5, + "low": 21.6, + "close": 21.6, + "volume": 50440110.0 + }, + { + "time": 1543190400, + "open": 21.7333, + "high": 23.0813, + "low": 21.6533, + "close": 22.8867, + "volume": 98172615.0 + }, + { + "time": 1543276800, + "open": 22.8333, + "high": 23.1307, + "low": 22.3667, + "close": 23.03, + "volume": 76446435.0 + }, + { + "time": 1543363200, + "open": 23.0, + "high": 23.2187, + "low": 22.814, + "close": 23.1327, + "volume": 50226975.0 + }, + { + "time": 1543449600, + "open": 23.0333, + "high": 23.1667, + "low": 22.6367, + "close": 22.7333, + "volume": 36297450.0 + }, + { + "time": 1543536000, + "open": 22.6667, + "high": 23.44, + "low": 22.5507, + "close": 23.38, + "volume": 67724880.0 + }, + { + "time": 1543795200, + "open": 23.8, + "high": 24.4, + "low": 23.4667, + "close": 23.8133, + "volume": 101594700.0 + }, + { + "time": 1543881600, + "open": 23.7333, + "high": 24.5787, + "low": 23.4667, + "close": 24.168, + "volume": 103683075.0 + }, + { + "time": 1544054400, + "open": 23.8333, + "high": 24.492, + "low": 23.384, + "close": 24.22, + "volume": 93603030.0 + }, + { + "time": 1544140800, + "open": 24.522, + "high": 25.2993, + "low": 23.8333, + "close": 24.0667, + "volume": 135610470.0 + }, + { + "time": 1544400000, + "open": 23.9993, + "high": 24.4, + "low": 23.5413, + "close": 24.2333, + "volume": 78864630.0 + }, + { + "time": 1544486400, + "open": 24.3133, + "high": 24.84, + "low": 24.0153, + "close": 24.5667, + "volume": 76196595.0 + }, + { + "time": 1544572800, + "open": 24.638, + "high": 24.794, + "low": 24.344, + "close": 24.526, + "volume": 60857985.0 + }, + { + "time": 1544659200, + "open": 24.5333, + "high": 25.1807, + "low": 24.45, + "close": 25.03, + "volume": 87478575.0 + }, + { + "time": 1544745600, + "open": 24.96, + "high": 25.1913, + "low": 24.2887, + "close": 24.4333, + "volume": 75673965.0 + }, + { + "time": 1545004800, + "open": 24.4733, + "high": 24.59, + "low": 22.9253, + "close": 23.3333, + "volume": 90968295.0 + }, + { + "time": 1545091200, + "open": 23.5253, + "high": 23.554, + "low": 22.246, + "close": 22.452, + "volume": 85943745.0 + }, + { + "time": 1545177600, + "open": 22.4707, + "high": 23.134, + "low": 21.9827, + "close": 22.0927, + "volume": 91612320.0 + }, + { + "time": 1545264000, + "open": 22.08, + "high": 22.2873, + "low": 20.7907, + "close": 20.97, + "volume": 112096500.0 + }, + { + "time": 1545350400, + "open": 21.1033, + "high": 21.5647, + "low": 20.8293, + "close": 21.1333, + "volume": 97661730.0 + }, + { + "time": 1545609600, + "open": 21.5333, + "high": 21.6, + "low": 19.5333, + "close": 19.5407, + "volume": 66350835.0 + }, + { + "time": 1545782400, + "open": 19.4667, + "high": 21.798, + "low": 19.4667, + "close": 21.6233, + "volume": 98012415.0 + }, + { + "time": 1545868800, + "open": 21.478, + "high": 21.5967, + "low": 20.1, + "close": 20.9, + "volume": 104624100.0 + }, + { + "time": 1545955200, + "open": 20.9333, + "high": 22.416, + "low": 20.9333, + "close": 22.2, + "volume": 121384305.0 + }, + { + "time": 1546214400, + "open": 22.3067, + "high": 22.706, + "low": 21.684, + "close": 22.2, + "volume": 78022320.0 + }, + { + "time": 1546387200, + "open": 21.7333, + "high": 22.1867, + "low": 19.92, + "close": 20.3767, + "volume": 138488085.0 + }, + { + "time": 1546473600, + "open": 20.4327, + "high": 20.6267, + "low": 19.8253, + "close": 19.9333, + "volume": 85079760.0 + }, + { + "time": 1546560000, + "open": 20.3, + "high": 21.2, + "low": 20.182, + "close": 21.2, + "volume": 89212035.0 + }, + { + "time": 1546819200, + "open": 21.3333, + "high": 22.4493, + "low": 21.1833, + "close": 22.3267, + "volume": 89667855.0 + }, + { + "time": 1546905600, + "open": 22.3333, + "high": 23.0, + "low": 21.8013, + "close": 22.3793, + "volume": 86465175.0 + }, + { + "time": 1546992000, + "open": 22.344, + "high": 22.9007, + "low": 22.0667, + "close": 22.5333, + "volume": 63893385.0 + }, + { + "time": 1547078400, + "open": 22.386, + "high": 23.026, + "low": 22.1193, + "close": 22.9333, + "volume": 72991995.0 + }, + { + "time": 1547164800, + "open": 22.9333, + "high": 23.2273, + "low": 22.5847, + "close": 23.1167, + "volume": 60942345.0 + }, + { + "time": 1547424000, + "open": 22.9, + "high": 22.9, + "low": 22.228, + "close": 22.316, + "volume": 63718830.0 + }, + { + "time": 1547510400, + "open": 22.4267, + "high": 23.2533, + "low": 22.3, + "close": 23.04, + "volume": 73060710.0 + }, + { + "time": 1547596800, + "open": 22.9927, + "high": 23.4667, + "low": 22.9, + "close": 23.0067, + "volume": 53209815.0 + }, + { + "time": 1547683200, + "open": 22.95, + "high": 23.4333, + "low": 22.92, + "close": 23.2133, + "volume": 44328525.0 + }, + { + "time": 1547769600, + "open": 23.3333, + "high": 23.3333, + "low": 19.982, + "close": 20.3133, + "volume": 289579830.0 + }, + { + "time": 1548115200, + "open": 20.2667, + "high": 20.5667, + "low": 19.7, + "close": 19.9407, + "volume": 146101185.0 + }, + { + "time": 1548201600, + "open": 19.6267, + "high": 19.7193, + "low": 18.7793, + "close": 19.1713, + "volume": 148002600.0 + }, + { + "time": 1548288000, + "open": 19.1833, + "high": 19.5787, + "low": 18.6187, + "close": 19.2667, + "volume": 92497140.0 + }, + { + "time": 1548374400, + "open": 19.4653, + "high": 19.9013, + "low": 19.3033, + "close": 19.7413, + "volume": 83032155.0 + }, + { + "time": 1548633600, + "open": 19.6867, + "high": 19.85, + "low": 19.1833, + "close": 19.6407, + "volume": 75093600.0 + }, + { + "time": 1548720000, + "open": 19.6, + "high": 19.9293, + "low": 19.4533, + "close": 19.8727, + "volume": 55303035.0 + }, + { + "time": 1548806400, + "open": 19.9527, + "high": 21.2, + "low": 19.3673, + "close": 19.6, + "volume": 128510025.0 + }, + { + "time": 1548892800, + "open": 19.7407, + "high": 20.7713, + "low": 19.4767, + "close": 20.3073, + "volume": 150214920.0 + }, + { + "time": 1548979200, + "open": 20.396, + "high": 21.0733, + "low": 20.2333, + "close": 20.8, + "volume": 88314525.0 + }, + { + "time": 1549238400, + "open": 20.7327, + "high": 21.02, + "low": 20.1253, + "close": 20.8213, + "volume": 91278885.0 + }, + { + "time": 1549324800, + "open": 20.8327, + "high": 21.496, + "low": 20.7707, + "close": 21.4327, + "volume": 80787765.0 + }, + { + "time": 1549411200, + "open": 21.4233, + "high": 21.616, + "low": 21.0413, + "close": 21.1333, + "volume": 61091385.0 + }, + { + "time": 1549497600, + "open": 21.0667, + "high": 21.0807, + "low": 20.2, + "close": 20.4027, + "volume": 79000440.0 + }, + { + "time": 1549584000, + "open": 20.308, + "high": 20.53, + "low": 19.9, + "close": 20.3433, + "volume": 69815910.0 + }, + { + "time": 1549843200, + "open": 20.3887, + "high": 21.24, + "low": 20.3887, + "close": 20.8333, + "volume": 88060125.0 + }, + { + "time": 1549929600, + "open": 21.0667, + "high": 21.2127, + "low": 20.6413, + "close": 20.7, + "volume": 65880930.0 + }, + { + "time": 1550016000, + "open": 20.8147, + "high": 20.9, + "low": 20.3713, + "close": 20.48, + "volume": 59951655.0 + }, + { + "time": 1550102400, + "open": 20.5147, + "high": 20.58, + "low": 20.0667, + "close": 20.2333, + "volume": 61683570.0 + }, + { + "time": 1550188800, + "open": 20.3, + "high": 20.5587, + "low": 20.26, + "close": 20.5293, + "volume": 46719975.0 + }, + { + "time": 1550534400, + "open": 20.4667, + "high": 20.77, + "low": 20.3007, + "close": 20.44, + "volume": 48097965.0 + }, + { + "time": 1550620800, + "open": 20.4833, + "high": 20.614, + "low": 19.9167, + "close": 20.1467, + "volume": 84401340.0 + }, + { + "time": 1550707200, + "open": 20.1927, + "high": 20.24, + "low": 19.3667, + "close": 19.4933, + "volume": 107646420.0 + }, + { + "time": 1550793600, + "open": 19.6, + "high": 19.7667, + "low": 19.4153, + "close": 19.6667, + "volume": 68671965.0 + }, + { + "time": 1551052800, + "open": 19.7793, + "high": 20.194, + "low": 18.8327, + "close": 19.2, + "volume": 81461385.0 + }, + { + "time": 1551139200, + "open": 19.2333, + "high": 20.134, + "low": 19.164, + "close": 19.868, + "volume": 104134410.0 + }, + { + "time": 1551225600, + "open": 19.8307, + "high": 21.0867, + "low": 19.8307, + "close": 21.0307, + "volume": 137486940.0 + }, + { + "time": 1551312000, + "open": 21.0307, + "high": 21.578, + "low": 20.4533, + "close": 20.6267, + "volume": 128665170.0 + }, + { + "time": 1551398400, + "open": 20.6667, + "high": 20.6667, + "low": 19.46, + "close": 19.6027, + "volume": 274694670.0 + }, + { + "time": 1551657600, + "open": 19.8, + "high": 20.0513, + "low": 18.852, + "close": 19.062, + "volume": 200186820.0 + }, + { + "time": 1551744000, + "open": 19.1587, + "high": 19.2333, + "low": 18.0067, + "close": 18.4833, + "volume": 224784825.0 + }, + { + "time": 1551830400, + "open": 18.5333, + "high": 18.7673, + "low": 18.2927, + "close": 18.4533, + "volume": 130688295.0 + }, + { + "time": 1551916800, + "open": 18.4, + "high": 18.98, + "low": 18.2833, + "close": 18.6333, + "volume": 117750495.0 + }, + { + "time": 1552003200, + "open": 18.5867, + "high": 19.0393, + "low": 18.222, + "close": 18.96, + "volume": 109426785.0 + }, + { + "time": 1552262400, + "open": 19.0667, + "high": 19.4187, + "low": 18.64, + "close": 19.35, + "volume": 91647090.0 + }, + { + "time": 1552348800, + "open": 19.35, + "high": 19.4433, + "low": 18.7373, + "close": 18.8567, + "volume": 94183110.0 + }, + { + "time": 1552435200, + "open": 18.7673, + "high": 19.466, + "low": 18.74, + "close": 19.29, + "volume": 84463050.0 + }, + { + "time": 1552521600, + "open": 19.3327, + "high": 19.6927, + "low": 19.076, + "close": 19.2467, + "volume": 87638685.0 + }, + { + "time": 1552608000, + "open": 19.1333, + "high": 19.1333, + "low": 18.2933, + "close": 18.358, + "volume": 181501410.0 + }, + { + "time": 1552867200, + "open": 18.5, + "high": 18.5367, + "low": 17.82, + "close": 17.9, + "volume": 126356685.0 + }, + { + "time": 1552953600, + "open": 17.8733, + "high": 18.22, + "low": 17.564, + "close": 17.8767, + "volume": 147554025.0 + }, + { + "time": 1553040000, + "open": 17.926, + "high": 18.3313, + "low": 17.7533, + "close": 18.2633, + "volume": 87481035.0 + }, + { + "time": 1553126400, + "open": 18.2607, + "high": 18.43, + "low": 17.8967, + "close": 18.3267, + "volume": 73793190.0 + }, + { + "time": 1553212800, + "open": 18.324, + "high": 18.3933, + "low": 17.6, + "close": 17.6233, + "volume": 107444580.0 + }, + { + "time": 1553472000, + "open": 17.5753, + "high": 17.6, + "low": 16.964, + "close": 17.424, + "volume": 125519295.0 + }, + { + "time": 1553558400, + "open": 17.5153, + "high": 18.0173, + "low": 17.5153, + "close": 17.8833, + "volume": 90114720.0 + }, + { + "time": 1553644800, + "open": 17.9, + "high": 18.358, + "low": 17.764, + "close": 18.3173, + "volume": 111765915.0 + }, + { + "time": 1553731200, + "open": 18.322, + "high": 18.6887, + "low": 18.2753, + "close": 18.6267, + "volume": 84429480.0 + }, + { + "time": 1553817600, + "open": 18.608, + "high": 18.6773, + "low": 18.3, + "close": 18.6533, + "volume": 74496975.0 + }, + { + "time": 1554076800, + "open": 18.8133, + "high": 19.28, + "low": 18.7333, + "close": 19.2133, + "volume": 100487535.0 + }, + { + "time": 1554163200, + "open": 19.2067, + "high": 19.296, + "low": 18.9253, + "close": 19.1567, + "volume": 67021665.0 + }, + { + "time": 1554249600, + "open": 19.252, + "high": 19.7447, + "low": 19.0733, + "close": 19.428, + "volume": 98939940.0 + }, + { + "time": 1554336000, + "open": 18.322, + "high": 18.4, + "low": 17.34, + "close": 17.8667, + "volume": 265556415.0 + }, + { + "time": 1554422400, + "open": 17.9733, + "high": 18.4067, + "low": 17.7407, + "close": 18.3267, + "volume": 155499960.0 + }, + { + "time": 1554681600, + "open": 18.4333, + "high": 18.744, + "low": 18.0293, + "close": 18.2667, + "volume": 129487440.0 + }, + { + "time": 1554768000, + "open": 18.314, + "high": 18.3333, + "low": 17.974, + "close": 18.154, + "volume": 72568875.0 + }, + { + "time": 1554854400, + "open": 18.2333, + "high": 18.65, + "low": 18.184, + "close": 18.44, + "volume": 87333435.0 + }, + { + "time": 1554940800, + "open": 18.3953, + "high": 18.45, + "low": 17.5467, + "close": 17.9267, + "volume": 115465245.0 + }, + { + "time": 1555027200, + "open": 17.9467, + "high": 18.13, + "low": 17.7887, + "close": 17.8347, + "volume": 83273295.0 + }, + { + "time": 1555286400, + "open": 17.8333, + "high": 17.93, + "low": 17.242, + "close": 17.7667, + "volume": 121678560.0 + }, + { + "time": 1555372800, + "open": 17.7973, + "high": 18.3333, + "low": 17.648, + "close": 18.1867, + "volume": 89589750.0 + }, + { + "time": 1555459200, + "open": 18.3133, + "high": 18.3267, + "low": 17.902, + "close": 18.08, + "volume": 61218300.0 + }, + { + "time": 1555545600, + "open": 18.0, + "high": 18.3227, + "low": 17.8993, + "close": 18.1987, + "volume": 65756700.0 + }, + { + "time": 1555891200, + "open": 17.9933, + "high": 17.9933, + "low": 17.4813, + "close": 17.5033, + "volume": 150683310.0 + }, + { + "time": 1555977600, + "open": 17.5867, + "high": 17.7067, + "low": 17.05, + "close": 17.5867, + "volume": 131710980.0 + }, + { + "time": 1556064000, + "open": 17.5733, + "high": 17.7333, + "low": 16.7027, + "close": 17.2167, + "volume": 127073520.0 + }, + { + "time": 1556150400, + "open": 17.0467, + "high": 17.2667, + "low": 16.4047, + "close": 16.486, + "volume": 265586880.0 + }, + { + "time": 1556236800, + "open": 16.5467, + "high": 16.636, + "low": 15.4087, + "close": 15.866, + "volume": 272603400.0 + }, + { + "time": 1556496000, + "open": 15.9127, + "high": 16.2653, + "low": 15.478, + "close": 16.0313, + "volume": 211597680.0 + }, + { + "time": 1556582400, + "open": 16.0487, + "high": 16.2807, + "low": 15.8, + "close": 15.9233, + "volume": 114634905.0 + }, + { + "time": 1556668800, + "open": 15.9133, + "high": 16.0, + "low": 15.4333, + "close": 15.5833, + "volume": 130472910.0 + }, + { + "time": 1556755200, + "open": 15.596, + "high": 16.6367, + "low": 15.3667, + "close": 16.3667, + "volume": 221207520.0 + }, + { + "time": 1556841600, + "open": 16.4653, + "high": 17.1073, + "low": 16.0667, + "close": 17.0, + "volume": 285771600.0 + }, + { + "time": 1557100800, + "open": 16.6667, + "high": 17.2233, + "low": 16.4913, + "close": 16.9407, + "volume": 129715710.0 + }, + { + "time": 1557187200, + "open": 17.022, + "high": 17.2833, + "low": 16.34, + "close": 16.4733, + "volume": 121401255.0 + }, + { + "time": 1557273600, + "open": 16.6487, + "high": 16.7067, + "low": 16.208, + "close": 16.2207, + "volume": 70776975.0 + }, + { + "time": 1557360000, + "open": 16.1733, + "high": 16.2453, + "low": 15.796, + "close": 16.0773, + "volume": 79827930.0 + }, + { + "time": 1557446400, + "open": 16.132, + "high": 16.1973, + "low": 15.7347, + "close": 15.9333, + "volume": 85723890.0 + }, + { + "time": 1557705600, + "open": 15.8213, + "high": 16.0073, + "low": 14.9667, + "close": 15.0833, + "volume": 123465510.0 + }, + { + "time": 1557792000, + "open": 15.1833, + "high": 15.6333, + "low": 15.1653, + "close": 15.4833, + "volume": 83553315.0 + }, + { + "time": 1557878400, + "open": 15.5333, + "high": 15.5727, + "low": 15.0167, + "close": 15.4067, + "volume": 87076290.0 + }, + { + "time": 1557964800, + "open": 15.39, + "high": 15.5327, + "low": 15.1, + "close": 15.18, + "volume": 85589625.0 + }, + { + "time": 1558051200, + "open": 15.1333, + "high": 15.1467, + "low": 13.928, + "close": 14.0007, + "volume": 213667560.0 + }, + { + "time": 1558310400, + "open": 14.0, + "high": 14.1187, + "low": 13.0167, + "close": 13.622, + "volume": 241324890.0 + }, + { + "time": 1558396800, + "open": 13.5987, + "high": 13.8267, + "low": 13.0693, + "close": 13.4467, + "volume": 221423400.0 + }, + { + "time": 1558483200, + "open": 13.3867, + "high": 13.6667, + "low": 12.7073, + "close": 12.71, + "volume": 223585785.0 + }, + { + "time": 1558569600, + "open": 12.6533, + "high": 13.3067, + "low": 12.1253, + "close": 13.0633, + "volume": 313514490.0 + }, + { + "time": 1558656000, + "open": 13.1993, + "high": 13.5807, + "low": 12.5833, + "close": 12.6467, + "volume": 172574760.0 + }, + { + "time": 1559001600, + "open": 12.7907, + "high": 13.0, + "low": 12.5233, + "close": 12.6327, + "volume": 121369680.0 + }, + { + "time": 1559088000, + "open": 12.5573, + "high": 12.826, + "low": 12.336, + "close": 12.6773, + "volume": 147665835.0 + }, + { + "time": 1559174400, + "open": 12.6, + "high": 12.8173, + "low": 12.468, + "close": 12.484, + "volume": 96234330.0 + }, + { + "time": 1559260800, + "open": 12.4533, + "high": 12.662, + "low": 12.2, + "close": 12.396, + "volume": 126511080.0 + }, + { + "time": 1559520000, + "open": 12.2773, + "high": 12.4453, + "low": 11.7993, + "close": 11.9633, + "volume": 162149595.0 + }, + { + "time": 1559606400, + "open": 11.9933, + "high": 12.9867, + "low": 11.974, + "close": 12.9473, + "volume": 168287700.0 + }, + { + "time": 1559692800, + "open": 13.0773, + "high": 13.4187, + "low": 12.7893, + "close": 13.0387, + "volume": 170547300.0 + }, + { + "time": 1559779200, + "open": 13.2133, + "high": 14.0667, + "low": 13.106, + "close": 13.76, + "volume": 239261910.0 + }, + { + "time": 1559865600, + "open": 13.8293, + "high": 14.0567, + "low": 13.566, + "close": 13.6107, + "volume": 185291190.0 + }, + { + "time": 1560124800, + "open": 13.6753, + "high": 14.4627, + "low": 13.6753, + "close": 14.35, + "volume": 120507465.0 + }, + { + "time": 1560211200, + "open": 14.4333, + "high": 15.2493, + "low": 14.2333, + "close": 15.0207, + "volume": 136661955.0 + }, + { + "time": 1560297600, + "open": 15.0207, + "high": 15.0967, + "low": 13.9067, + "close": 13.9867, + "volume": 182775390.0 + }, + { + "time": 1560384000, + "open": 14.0, + "high": 14.3267, + "low": 13.834, + "close": 14.1653, + "volume": 101617290.0 + }, + { + "time": 1560470400, + "open": 14.2147, + "high": 14.4433, + "low": 13.9413, + "close": 14.3327, + "volume": 88657065.0 + }, + { + "time": 1560729600, + "open": 14.4193, + "high": 15.1333, + "low": 14.2733, + "close": 15.0333, + "volume": 149330235.0 + }, + { + "time": 1560816000, + "open": 15.0833, + "high": 15.6493, + "low": 14.8373, + "close": 15.0133, + "volume": 152172840.0 + }, + { + "time": 1560902400, + "open": 15.0887, + "high": 15.1847, + "low": 14.7373, + "close": 15.1307, + "volume": 79817250.0 + }, + { + "time": 1560988800, + "open": 15.2, + "high": 15.3493, + "low": 14.4233, + "close": 14.6333, + "volume": 145668465.0 + }, + { + "time": 1561075200, + "open": 14.6267, + "high": 14.812, + "low": 14.3667, + "close": 14.7667, + "volume": 91318920.0 + }, + { + "time": 1561334400, + "open": 14.7667, + "high": 15.0573, + "low": 14.7347, + "close": 14.9533, + "volume": 69803340.0 + }, + { + "time": 1561420800, + "open": 14.9007, + "high": 15.0227, + "low": 14.6327, + "close": 14.6733, + "volume": 71846805.0 + }, + { + "time": 1561507200, + "open": 14.7993, + "high": 15.1487, + "low": 14.4353, + "close": 14.5587, + "volume": 101637405.0 + }, + { + "time": 1561593600, + "open": 14.5593, + "high": 14.8793, + "low": 14.4747, + "close": 14.8533, + "volume": 73779210.0 + }, + { + "time": 1561680000, + "open": 14.814, + "high": 15.0113, + "low": 14.6753, + "close": 14.93, + "volume": 76459620.0 + }, + { + "time": 1561939200, + "open": 15.1133, + "high": 15.54, + "low": 15.0853, + "close": 15.2, + "volume": 102639255.0 + }, + { + "time": 1562025600, + "open": 15.2, + "high": 16.3327, + "low": 14.8147, + "close": 16.0333, + "volume": 112517325.0 + }, + { + "time": 1562112000, + "open": 15.9333, + "high": 16.1333, + "low": 15.6, + "close": 15.6233, + "volume": 171219210.0 + }, + { + "time": 1562284800, + "open": 15.6913, + "high": 15.7147, + "low": 15.3867, + "close": 15.5167, + "volume": 85099530.0 + }, + { + "time": 1562544000, + "open": 15.5333, + "high": 15.5333, + "low": 15.244, + "close": 15.35, + "volume": 71488095.0 + }, + { + "time": 1562630400, + "open": 15.28, + "high": 15.4, + "low": 15.152, + "close": 15.35, + "volume": 74145135.0 + }, + { + "time": 1562716800, + "open": 15.4, + "high": 15.9333, + "low": 15.3753, + "close": 15.92, + "volume": 109079265.0 + }, + { + "time": 1562803200, + "open": 15.9393, + "high": 16.1, + "low": 15.72, + "close": 15.8733, + "volume": 87319530.0 + }, + { + "time": 1562889600, + "open": 15.902, + "high": 16.4127, + "low": 15.902, + "close": 16.4127, + "volume": 95006310.0 + }, + { + "time": 1563148800, + "open": 16.4667, + "high": 16.9613, + "low": 16.324, + "close": 16.8533, + "volume": 129415845.0 + }, + { + "time": 1563235200, + "open": 16.8333, + "high": 16.902, + "low": 16.5287, + "close": 16.7833, + "volume": 94476000.0 + }, + { + "time": 1563321600, + "open": 16.8253, + "high": 17.2207, + "low": 16.8253, + "close": 16.96, + "volume": 105617190.0 + }, + { + "time": 1563408000, + "open": 16.972, + "high": 17.05, + "low": 16.792, + "close": 16.9667, + "volume": 56868000.0 + }, + { + "time": 1563494400, + "open": 16.9973, + "high": 17.3307, + "low": 16.9747, + "close": 17.1913, + "volume": 85749975.0 + }, + { + "time": 1563753600, + "open": 17.2, + "high": 17.48, + "low": 16.946, + "close": 17.0667, + "volume": 83095470.0 + }, + { + "time": 1563840000, + "open": 17.1, + "high": 17.3653, + "low": 16.9667, + "close": 17.3127, + "volume": 54661110.0 + }, + { + "time": 1563926400, + "open": 17.3167, + "high": 17.88, + "low": 15.5333, + "close": 15.7133, + "volume": 130306335.0 + }, + { + "time": 1564012800, + "open": 15.72, + "high": 15.8, + "low": 15.0367, + "close": 15.1693, + "volume": 270950850.0 + }, + { + "time": 1564099200, + "open": 15.2453, + "high": 15.3507, + "low": 14.8167, + "close": 15.1407, + "volume": 118829130.0 + }, + { + "time": 1564358400, + "open": 15.1667, + "high": 15.7293, + "low": 15.0, + "close": 15.6747, + "volume": 113923785.0 + }, + { + "time": 1564444800, + "open": 15.6747, + "high": 16.224, + "low": 15.4467, + "close": 16.102, + "volume": 96458760.0 + }, + { + "time": 1564531200, + "open": 16.1347, + "high": 16.4453, + "low": 15.7767, + "close": 16.0727, + "volume": 111596460.0 + }, + { + "time": 1564617600, + "open": 16.154, + "high": 16.3007, + "low": 15.4513, + "close": 15.5467, + "volume": 98159715.0 + }, + { + "time": 1570665600, + "open": 16.2667, + "high": 16.6187, + "low": 16.1053, + "close": 16.3933, + "volume": 71848110.0 + }, + { + "time": 1570752000, + "open": 16.438, + "high": 16.7387, + "low": 16.316, + "close": 16.5667, + "volume": 99881625.0 + }, + { + "time": 1571011200, + "open": 16.4853, + "high": 17.2367, + "low": 16.4667, + "close": 17.1507, + "volume": 120297450.0 + }, + { + "time": 1571097600, + "open": 17.1433, + "high": 17.3333, + "low": 16.9413, + "close": 17.1667, + "volume": 74867415.0 + }, + { + "time": 1571184000, + "open": 17.1333, + "high": 17.4733, + "low": 17.0667, + "close": 17.32, + "volume": 76111920.0 + }, + { + "time": 1571270400, + "open": 17.3587, + "high": 17.652, + "low": 17.2667, + "close": 17.46, + "volume": 54637350.0 + }, + { + "time": 1571356800, + "open": 17.42, + "high": 17.52, + "low": 17.0067, + "close": 17.1067, + "volume": 67372005.0 + }, + { + "time": 1571616000, + "open": 17.2, + "high": 17.3, + "low": 16.6787, + "close": 16.964, + "volume": 59437185.0 + }, + { + "time": 1571702400, + "open": 16.9133, + "high": 17.222, + "low": 16.7233, + "close": 17.0, + "volume": 51015450.0 + }, + { + "time": 1571788800, + "open": 16.928, + "high": 20.5667, + "low": 16.7567, + "close": 20.4, + "volume": 126354015.0 + }, + { + "time": 1571875200, + "open": 20.074, + "high": 20.3287, + "low": 19.28, + "close": 19.9333, + "volume": 333785415.0 + }, + { + "time": 1571961600, + "open": 19.816, + "high": 22.0, + "low": 19.7407, + "close": 21.828, + "volume": 346900110.0 + }, + { + "time": 1572220800, + "open": 21.82, + "high": 22.7227, + "low": 21.5067, + "close": 21.8533, + "volume": 217401990.0 + }, + { + "time": 1572307200, + "open": 21.8, + "high": 21.8, + "low": 20.9333, + "close": 20.972, + "volume": 148391235.0 + }, + { + "time": 1572393600, + "open": 20.8, + "high": 21.2527, + "low": 20.6647, + "close": 21.0267, + "volume": 110357760.0 + }, + { + "time": 1572480000, + "open": 21.0, + "high": 21.2667, + "low": 20.85, + "close": 20.968, + "volume": 57293355.0 + }, + { + "time": 1572566400, + "open": 21.01, + "high": 21.158, + "low": 20.6533, + "close": 20.87, + "volume": 74996490.0 + }, + { + "time": 1572825600, + "open": 20.9333, + "high": 21.4627, + "low": 20.6173, + "close": 21.19, + "volume": 107054385.0 + }, + { + "time": 1572912000, + "open": 21.268, + "high": 21.5673, + "low": 21.074, + "close": 21.1407, + "volume": 80141085.0 + }, + { + "time": 1572998400, + "open": 21.1267, + "high": 21.8033, + "low": 20.9667, + "close": 21.742, + "volume": 94473615.0 + }, + { + "time": 1573084800, + "open": 21.8373, + "high": 22.7667, + "low": 21.8373, + "close": 22.412, + "volume": 170876115.0 + }, + { + "time": 1573171200, + "open": 22.3333, + "high": 22.4973, + "low": 22.1667, + "close": 22.45, + "volume": 70916190.0 + }, + { + "time": 1573430400, + "open": 22.3873, + "high": 23.2793, + "low": 22.3667, + "close": 23.0087, + "volume": 115064865.0 + }, + { + "time": 1573516800, + "open": 23.0333, + "high": 23.358, + "low": 22.936, + "close": 23.3133, + "volume": 83768280.0 + }, + { + "time": 1573603200, + "open": 23.4, + "high": 23.7867, + "low": 23.012, + "close": 23.0667, + "volume": 95754555.0 + }, + { + "time": 1573689600, + "open": 23.0073, + "high": 23.5893, + "low": 22.8607, + "close": 23.28, + "volume": 73642995.0 + }, + { + "time": 1573776000, + "open": 23.3467, + "high": 23.52, + "low": 23.224, + "close": 23.4547, + "volume": 53228490.0 + }, + { + "time": 1574035200, + "open": 23.4547, + "high": 23.6467, + "low": 23.0733, + "close": 23.3327, + "volume": 47569800.0 + }, + { + "time": 1574121600, + "open": 23.3373, + "high": 23.9993, + "low": 23.1867, + "close": 23.934, + "volume": 88743975.0 + }, + { + "time": 1574208000, + "open": 23.8533, + "high": 24.1807, + "low": 23.3047, + "close": 23.4733, + "volume": 73837815.0 + }, + { + "time": 1574294400, + "open": 23.4813, + "high": 24.056, + "low": 23.4813, + "close": 23.8067, + "volume": 67119255.0 + }, + { + "time": 1574380800, + "open": 23.3933, + "high": 23.6553, + "low": 22.0, + "close": 22.2067, + "volume": 185281845.0 + }, + { + "time": 1574640000, + "open": 22.84, + "high": 23.3073, + "low": 22.2973, + "close": 22.4293, + "volume": 136063125.0 + }, + { + "time": 1574726400, + "open": 22.4613, + "high": 22.4613, + "low": 21.8067, + "close": 21.9867, + "volume": 85639260.0 + }, + { + "time": 1574812800, + "open": 21.9867, + "high": 22.262, + "low": 21.9047, + "close": 22.0, + "volume": 60248265.0 + }, + { + "time": 1574985600, + "open": 22.0713, + "high": 22.2, + "low": 21.8333, + "close": 22.0027, + "volume": 26162310.0 + }, + { + "time": 1575244800, + "open": 22.0933, + "high": 22.426, + "low": 21.9, + "close": 22.25, + "volume": 65817750.0 + }, + { + "time": 1575331200, + "open": 22.4087, + "high": 22.5667, + "low": 22.0333, + "close": 22.4253, + "volume": 71516535.0 + }, + { + "time": 1575417600, + "open": 22.4327, + "high": 22.5747, + "low": 22.186, + "close": 22.2187, + "volume": 52213935.0 + }, + { + "time": 1575504000, + "open": 22.2347, + "high": 22.3333, + "low": 21.8167, + "close": 22.26, + "volume": 39315060.0 + }, + { + "time": 1575590400, + "open": 22.2667, + "high": 22.5907, + "low": 22.2667, + "close": 22.3927, + "volume": 87443550.0 + }, + { + "time": 1575849600, + "open": 22.4, + "high": 22.9633, + "low": 22.3387, + "close": 22.6527, + "volume": 97238610.0 + }, + { + "time": 1575936000, + "open": 22.6353, + "high": 23.382, + "low": 22.4667, + "close": 23.2667, + "volume": 94475535.0 + }, + { + "time": 1576022400, + "open": 23.276, + "high": 23.8127, + "low": 23.276, + "close": 23.6387, + "volume": 75745965.0 + }, + { + "time": 1576108800, + "open": 23.6667, + "high": 24.1827, + "low": 23.5487, + "close": 24.04, + "volume": 86341350.0 + }, + { + "time": 1576195200, + "open": 24.08, + "high": 24.3473, + "low": 23.6427, + "close": 23.9187, + "volume": 73028070.0 + }, + { + "time": 1576454400, + "open": 23.9333, + "high": 25.574, + "low": 23.9333, + "close": 25.204, + "volume": 196900605.0 + }, + { + "time": 1576540800, + "open": 25.3127, + "high": 25.7, + "low": 25.06, + "close": 25.268, + "volume": 88895370.0 + }, + { + "time": 1576627200, + "open": 25.1333, + "high": 26.348, + "low": 25.1333, + "close": 26.24, + "volume": 159076170.0 + }, + { + "time": 1576713600, + "open": 26.1447, + "high": 27.1233, + "low": 26.12, + "close": 26.992, + "volume": 195368595.0 + }, + { + "time": 1576800000, + "open": 27.0, + "high": 27.5333, + "low": 26.6787, + "close": 27.0667, + "volume": 162292950.0 + }, + { + "time": 1577059200, + "open": 27.2007, + "high": 28.134, + "low": 27.2007, + "close": 27.9793, + "volume": 147161505.0 + }, + { + "time": 1577145600, + "open": 28.0653, + "high": 28.392, + "low": 27.512, + "close": 28.3533, + "volume": 92001720.0 + }, + { + "time": 1577318400, + "open": 28.3533, + "high": 28.8987, + "low": 28.3533, + "close": 28.7667, + "volume": 118997565.0 + }, + { + "time": 1577404800, + "open": 28.772, + "high": 29.1453, + "low": 28.4073, + "close": 28.7167, + "volume": 110319030.0 + }, + { + "time": 1577664000, + "open": 28.7847, + "high": 28.89, + "low": 27.2833, + "close": 27.4833, + "volume": 140912100.0 + }, + { + "time": 1577750400, + "open": 27.6, + "high": 28.086, + "low": 26.8053, + "close": 27.9, + "volume": 115227540.0 + }, + { + "time": 1577923200, + "open": 28.0607, + "high": 28.7993, + "low": 27.8887, + "close": 28.7867, + "volume": 105742830.0 + }, + { + "time": 1578009600, + "open": 28.4267, + "high": 30.2667, + "low": 28.1007, + "close": 29.4607, + "volume": 201368895.0 + }, + { + "time": 1578268800, + "open": 29.2007, + "high": 30.1333, + "low": 29.1667, + "close": 30.1333, + "volume": 114317175.0 + }, + { + "time": 1578355200, + "open": 30.2633, + "high": 31.442, + "low": 30.1673, + "close": 30.5, + "volume": 200288085.0 + }, + { + "time": 1578441600, + "open": 31.06, + "high": 33.2327, + "low": 30.9187, + "close": 33.07, + "volume": 348554655.0 + }, + { + "time": 1578528000, + "open": 32.68, + "high": 33.2867, + "low": 31.5247, + "close": 32.008, + "volume": 308683530.0 + }, + { + "time": 1578614400, + "open": 32.2667, + "high": 32.6167, + "low": 31.58, + "close": 31.866, + "volume": 142140990.0 + }, + { + "time": 1578873600, + "open": 32.206, + "high": 35.496, + "low": 32.206, + "close": 35.4413, + "volume": 296673120.0 + }, + { + "time": 1578960000, + "open": 35.428, + "high": 36.5, + "low": 34.9933, + "close": 35.7653, + "volume": 313603800.0 + }, + { + "time": 1579046400, + "open": 35.8667, + "high": 35.8667, + "low": 34.452, + "close": 34.65, + "volume": 189689685.0 + }, + { + "time": 1579132800, + "open": 33.5533, + "high": 34.2973, + "low": 32.8113, + "close": 34.174, + "volume": 234395160.0 + }, + { + "time": 1579219200, + "open": 34.2687, + "high": 34.5533, + "low": 33.2587, + "close": 33.6067, + "volume": 149312700.0 + }, + { + "time": 1579564800, + "open": 33.8733, + "high": 37.0067, + "low": 33.7733, + "close": 36.95, + "volume": 189698280.0 + }, + { + "time": 1579651200, + "open": 37.134, + "high": 39.6333, + "low": 37.134, + "close": 38.1333, + "volume": 324324630.0 + }, + { + "time": 1579737600, + "open": 37.97, + "high": 38.8, + "low": 37.0367, + "close": 38.0407, + "volume": 203213130.0 + }, + { + "time": 1579824000, + "open": 38.296, + "high": 38.6533, + "low": 36.9507, + "close": 37.2667, + "volume": 148648650.0 + }, + { + "time": 1580083200, + "open": 36.92, + "high": 37.6293, + "low": 35.9207, + "close": 37.3333, + "volume": 139065495.0 + }, + { + "time": 1580169600, + "open": 37.442, + "high": 38.454, + "low": 37.2053, + "close": 38.1, + "volume": 125302140.0 + }, + { + "time": 1580256000, + "open": 38.148, + "high": 43.9867, + "low": 37.8287, + "close": 43.2333, + "volume": 183743490.0 + }, + { + "time": 1580342400, + "open": 42.74, + "high": 43.392, + "low": 41.2, + "close": 42.9407, + "volume": 273085440.0 + }, + { + "time": 1580428800, + "open": 42.6667, + "high": 43.5333, + "low": 42.0013, + "close": 43.05, + "volume": 158981265.0 + }, + { + "time": 1580688000, + "open": 43.2667, + "high": 52.4533, + "low": 43.0067, + "close": 51.0667, + "volume": 475263390.0 + }, + { + "time": 1580774400, + "open": 52.3667, + "high": 64.5993, + "low": 52.3667, + "close": 60.2667, + "volume": 552886995.0 + }, + { + "time": 1580860800, + "open": 56.6667, + "high": 58.9333, + "low": 46.9407, + "close": 48.5, + "volume": 464742915.0 + }, + { + "time": 1580947200, + "open": 49.0, + "high": 53.0553, + "low": 45.8, + "close": 49.4, + "volume": 383700900.0 + }, + { + "time": 1581033600, + "open": 49.2, + "high": 51.3167, + "low": 48.2, + "close": 49.7073, + "volume": 168028710.0 + }, + { + "time": 1581292800, + "open": 50.3333, + "high": 54.666, + "low": 50.16, + "close": 51.5733, + "volume": 240893220.0 + }, + { + "time": 1581379200, + "open": 52.2, + "high": 52.432, + "low": 50.5333, + "close": 51.3333, + "volume": 115196955.0 + }, + { + "time": 1581465600, + "open": 51.9993, + "high": 52.65, + "low": 49.55, + "close": 50.1333, + "volume": 117541665.0 + }, + { + "time": 1581552000, + "open": 50.0667, + "high": 54.5333, + "low": 47.4667, + "close": 53.3333, + "volume": 259599570.0 + }, + { + "time": 1581638400, + "open": 53.6, + "high": 54.2, + "low": 51.6667, + "close": 53.5, + "volume": 160881435.0 + }, + { + "time": 1581984000, + "open": 52.5333, + "high": 59.3193, + "low": 51.6673, + "close": 58.8007, + "volume": 168671805.0 + }, + { + "time": 1582070400, + "open": 59.3333, + "high": 62.9853, + "low": 59.3333, + "close": 60.47, + "volume": 249771750.0 + }, + { + "time": 1582156800, + "open": 60.6333, + "high": 61.08, + "low": 57.3287, + "close": 59.3333, + "volume": 181159170.0 + }, + { + "time": 1582243200, + "open": 60.3133, + "high": 61.2, + "low": 58.6, + "close": 59.9213, + "volume": 149621535.0 + }, + { + "time": 1582502400, + "open": 58.2327, + "high": 58.234, + "low": 54.8133, + "close": 56.2667, + "volume": 148606905.0 + }, + { + "time": 1582588800, + "open": 56.3333, + "high": 57.1067, + "low": 52.4667, + "close": 52.7333, + "volume": 168777675.0 + }, + { + "time": 1582675200, + "open": 52.1707, + "high": 54.2207, + "low": 50.6467, + "close": 51.2667, + "volume": 136474050.0 + }, + { + "time": 1582761600, + "open": 51.2, + "high": 51.532, + "low": 42.8333, + "close": 43.668, + "volume": 249019995.0 + }, + { + "time": 1582848000, + "open": 43.0, + "high": 46.0347, + "low": 40.768, + "close": 44.9987, + "volume": 257814675.0 + }, + { + "time": 1583107200, + "open": 47.1507, + "high": 51.3333, + "low": 44.1333, + "close": 51.2667, + "volume": 206093775.0 + }, + { + "time": 1583193600, + "open": 51.8447, + "high": 54.6793, + "low": 47.7407, + "close": 48.7333, + "volume": 250127055.0 + }, + { + "time": 1583280000, + "open": 50.3333, + "high": 52.734, + "low": 48.3153, + "close": 49.62, + "volume": 154058295.0 + }, + { + "time": 1583366400, + "open": 49.0733, + "high": 49.7167, + "low": 47.4673, + "close": 48.0, + "volume": 108482445.0 + }, + { + "time": 1583452800, + "open": 47.2, + "high": 47.4667, + "low": 45.1327, + "close": 46.05, + "volume": 123425130.0 + }, + { + "time": 1583712000, + "open": 43.6447, + "high": 44.2, + "low": 40.0, + "close": 42.3867, + "volume": 175009290.0 + }, + { + "time": 1583798400, + "open": 42.8873, + "high": 45.4, + "low": 40.5333, + "close": 41.6867, + "volume": 161919360.0 + }, + { + "time": 1583884800, + "open": 41.6, + "high": 43.572, + "low": 40.8667, + "close": 42.2067, + "volume": 140357565.0 + }, + { + "time": 1583971200, + "open": 40.566, + "high": 40.7433, + "low": 34.08, + "close": 34.6, + "volume": 197614035.0 + }, + { + "time": 1584057600, + "open": 37.4667, + "high": 40.5307, + "low": 33.4667, + "close": 35.6, + "volume": 239295285.0 + }, + { + "time": 1584316800, + "open": 33.7667, + "high": 33.7667, + "low": 28.6667, + "close": 30.2, + "volume": 221492175.0 + }, + { + "time": 1584403200, + "open": 31.4667, + "high": 32.1333, + "low": 26.4, + "close": 27.1707, + "volume": 261417435.0 + }, + { + "time": 1584489600, + "open": 26.8667, + "high": 26.9907, + "low": 23.3673, + "close": 24.8667, + "volume": 265132005.0 + }, + { + "time": 1584576000, + "open": 24.3333, + "high": 30.1333, + "low": 23.4, + "close": 26.2667, + "volume": 328591200.0 + }, + { + "time": 1584662400, + "open": 28.0, + "high": 31.8, + "low": 27.8387, + "close": 28.252, + "volume": 307001235.0 + }, + { + "time": 1584921600, + "open": 27.66, + "high": 30.2, + "low": 27.0667, + "close": 29.692, + "volume": 178044150.0 + }, + { + "time": 1585008000, + "open": 30.3333, + "high": 35.6, + "low": 30.1467, + "close": 33.9987, + "volume": 237852525.0 + }, + { + "time": 1585094400, + "open": 36.5333, + "high": 37.9333, + "low": 33.9933, + "close": 36.0007, + "volume": 218541390.0 + }, + { + "time": 1585180800, + "open": 35.2433, + "high": 37.3333, + "low": 34.15, + "close": 35.1333, + "volume": 179456955.0 + }, + { + "time": 1585267200, + "open": 34.5307, + "high": 35.0533, + "low": 32.9353, + "close": 33.9333, + "volume": 148377030.0 + }, + { + "time": 1585526400, + "open": 33.6667, + "high": 34.76, + "low": 32.7487, + "close": 33.5333, + "volume": 119682195.0 + }, + { + "time": 1585612800, + "open": 33.9333, + "high": 36.1973, + "low": 33.0067, + "close": 34.3667, + "volume": 188997660.0 + }, + { + "time": 1585699200, + "open": 33.7253, + "high": 34.264, + "low": 31.6733, + "close": 32.3727, + "volume": 138967425.0 + }, + { + "time": 1585785600, + "open": 32.6, + "high": 36.5313, + "low": 29.76, + "close": 35.6667, + "volume": 203988075.0 + }, + { + "time": 1585872000, + "open": 35.2, + "high": 35.4, + "low": 31.226, + "close": 31.6667, + "volume": 241104990.0 + }, + { + "time": 1586131200, + "open": 33.6667, + "high": 34.7333, + "low": 33.1973, + "close": 34.2, + "volume": 150877275.0 + }, + { + "time": 1586217600, + "open": 35.3333, + "high": 37.6667, + "low": 35.2227, + "close": 36.658, + "volume": 187243695.0 + }, + { + "time": 1586304000, + "open": 36.5847, + "high": 37.7333, + "low": 35.5553, + "close": 36.7293, + "volume": 135389595.0 + }, + { + "time": 1586390400, + "open": 37.036, + "high": 39.8, + "low": 36.094, + "close": 39.6333, + "volume": 140315520.0 + }, + { + "time": 1586736000, + "open": 39.2, + "high": 45.22, + "low": 38.414, + "close": 44.8987, + "volume": 232627920.0 + }, + { + "time": 1586822400, + "open": 45.3433, + "high": 49.9993, + "low": 45.0733, + "close": 49.7667, + "volume": 300642825.0 + }, + { + "time": 1586908800, + "open": 49.3993, + "high": 50.8, + "low": 47.3333, + "close": 47.5667, + "volume": 231622050.0 + }, + { + "time": 1586995200, + "open": 48.7773, + "high": 52.7333, + "low": 47.114, + "close": 51.6667, + "volume": 211446420.0 + }, + { + "time": 1587081600, + "open": 51.8, + "high": 52.3587, + "low": 49.844, + "close": 50.102, + "volume": 132770940.0 + }, + { + "time": 1587340800, + "open": 50.08, + "high": 51.038, + "low": 47.4807, + "close": 49.8667, + "volume": 152149290.0 + }, + { + "time": 1587427200, + "open": 49.2, + "high": 50.222, + "low": 44.9193, + "close": 46.0007, + "volume": 202718685.0 + }, + { + "time": 1587513600, + "open": 46.8, + "high": 49.344, + "low": 45.2327, + "close": 48.2533, + "volume": 145122495.0 + }, + { + "time": 1587600000, + "open": 48.4, + "high": 49.1267, + "low": 46.4, + "close": 46.4613, + "volume": 136673115.0 + }, + { + "time": 1587686400, + "open": 46.4667, + "high": 48.7153, + "low": 46.4667, + "close": 48.3333, + "volume": 139092495.0 + }, + { + "time": 1587945600, + "open": 49.07, + "high": 53.7787, + "low": 48.9673, + "close": 52.1373, + "volume": 202881945.0 + }, + { + "time": 1588032000, + "open": 52.4733, + "high": 53.6667, + "low": 50.446, + "close": 51.786, + "volume": 155158260.0 + }, + { + "time": 1588118400, + "open": 52.1333, + "high": 59.126, + "low": 51.0067, + "close": 58.0667, + "volume": 158846565.0 + }, + { + "time": 1588204800, + "open": 57.6333, + "high": 58.4, + "low": 50.6667, + "close": 51.0, + "volume": 272728890.0 + }, + { + "time": 1588291200, + "open": 50.9733, + "high": 51.518, + "low": 45.536, + "close": 47.2, + "volume": 325839930.0 + }, + { + "time": 1588550400, + "open": 47.2, + "high": 51.2667, + "low": 45.4667, + "close": 51.2667, + "volume": 191118300.0 + }, + { + "time": 1588636800, + "open": 52.1333, + "high": 53.2613, + "low": 50.812, + "close": 51.6333, + "volume": 175710750.0 + }, + { + "time": 1588723200, + "open": 51.9967, + "high": 52.6533, + "low": 50.7407, + "close": 51.9667, + "volume": 113329740.0 + }, + { + "time": 1588809600, + "open": 52.3407, + "high": 53.0933, + "low": 51.1333, + "close": 52.2333, + "volume": 118667010.0 + }, + { + "time": 1588896000, + "open": 52.4333, + "high": 55.0667, + "low": 52.4327, + "close": 54.6, + "volume": 160369815.0 + }, + { + "time": 1589155200, + "open": 54.0333, + "high": 54.9333, + "low": 52.3333, + "close": 54.0807, + "volume": 171898425.0 + }, + { + "time": 1589241600, + "open": 53.8573, + "high": 56.2193, + "low": 52.9933, + "close": 53.0267, + "volume": 163140435.0 + }, + { + "time": 1589328000, + "open": 53.5773, + "high": 55.1733, + "low": 50.8867, + "close": 53.3193, + "volume": 197153685.0 + }, + { + "time": 1589414400, + "open": 53.3333, + "high": 53.9333, + "low": 50.9333, + "close": 53.5333, + "volume": 134271540.0 + }, + { + "time": 1589500800, + "open": 53.7333, + "high": 53.7333, + "low": 52.1633, + "close": 53.24, + "volume": 107025660.0 + }, + { + "time": 1589760000, + "open": 54.018, + "high": 55.6487, + "low": 53.592, + "close": 54.1, + "volume": 119931690.0 + }, + { + "time": 1589846400, + "open": 54.5333, + "high": 54.8047, + "low": 53.6667, + "close": 54.0733, + "volume": 98436405.0 + }, + { + "time": 1589932800, + "open": 54.4, + "high": 55.0667, + "low": 54.12, + "close": 54.3007, + "volume": 70987260.0 + }, + { + "time": 1590019200, + "open": 54.078, + "high": 55.5, + "low": 53.0667, + "close": 55.0333, + "volume": 125158530.0 + }, + { + "time": 1590105600, + "open": 54.4667, + "high": 55.452, + "low": 54.1333, + "close": 54.5067, + "volume": 102896430.0 + }, + { + "time": 1590451200, + "open": 55.6293, + "high": 55.92, + "low": 54.38, + "close": 54.6653, + "volume": 77548890.0 + }, + { + "time": 1590537600, + "open": 54.4667, + "high": 55.1807, + "low": 52.3333, + "close": 54.2933, + "volume": 115787835.0 + }, + { + "time": 1590624000, + "open": 54.2833, + "high": 54.9833, + "low": 53.446, + "close": 53.8, + "volume": 73302210.0 + }, + { + "time": 1590710400, + "open": 54.1587, + "high": 56.1833, + "low": 53.614, + "close": 56.1833, + "volume": 122263095.0 + }, + { + "time": 1590969600, + "open": 56.6667, + "high": 60.2, + "low": 56.6, + "close": 59.1333, + "volume": 145189200.0 + }, + { + "time": 1591056000, + "open": 59.2333, + "high": 60.5773, + "low": 58.0667, + "close": 58.8, + "volume": 132256140.0 + }, + { + "time": 1591142400, + "open": 58.8, + "high": 59.8627, + "low": 58.6733, + "close": 58.8747, + "volume": 80101050.0 + }, + { + "time": 1591228800, + "open": 59.0513, + "high": 59.7167, + "low": 57.2293, + "close": 57.7333, + "volume": 88832985.0 + }, + { + "time": 1591315200, + "open": 58.2907, + "high": 59.1227, + "low": 57.7467, + "close": 58.99, + "volume": 78301965.0 + }, + { + "time": 1591574400, + "open": 58.6667, + "high": 63.8327, + "low": 58.6, + "close": 62.9667, + "volume": 141366735.0 + }, + { + "time": 1591660800, + "open": 62.6667, + "high": 63.6293, + "low": 61.5953, + "close": 62.466, + "volume": 115863015.0 + }, + { + "time": 1591747200, + "open": 62.6, + "high": 68.8, + "low": 62.3333, + "close": 67.3, + "volume": 174956610.0 + }, + { + "time": 1591833600, + "open": 66.6667, + "high": 67.9307, + "low": 64.276, + "close": 65.0, + "volume": 156858300.0 + }, + { + "time": 1591920000, + "open": 63.8627, + "high": 66.134, + "low": 60.8373, + "close": 61.2367, + "volume": 162138555.0 + }, + { + "time": 1592179200, + "open": 60.2, + "high": 66.5893, + "low": 59.7607, + "close": 66.2707, + "volume": 155522580.0 + }, + { + "time": 1592265600, + "open": 66.6, + "high": 67.99, + "low": 64.1593, + "close": 65.2667, + "volume": 133777140.0 + }, + { + "time": 1592352000, + "open": 65.8667, + "high": 67.0, + "low": 65.134, + "close": 65.7667, + "volume": 100027320.0 + }, + { + "time": 1592438400, + "open": 66.4, + "high": 67.9467, + "low": 66.298, + "close": 67.466, + "volume": 97189380.0 + }, + { + "time": 1592524800, + "open": 67.5653, + "high": 67.9833, + "low": 66.0667, + "close": 66.1267, + "volume": 83171715.0 + }, + { + "time": 1592784000, + "open": 66.7827, + "high": 67.2587, + "low": 66.0013, + "close": 66.6, + "volume": 64500420.0 + }, + { + "time": 1592870400, + "open": 66.846, + "high": 67.4667, + "low": 66.2673, + "close": 66.4667, + "volume": 64613580.0 + }, + { + "time": 1592956800, + "open": 66.2673, + "high": 66.726, + "low": 63.4, + "close": 63.4, + "volume": 106925520.0 + }, + { + "time": 1593043200, + "open": 63.3333, + "high": 66.1867, + "low": 62.4767, + "close": 66.1333, + "volume": 92884695.0 + }, + { + "time": 1593129600, + "open": 65.7753, + "high": 66.5333, + "low": 63.658, + "close": 63.7267, + "volume": 83687025.0 + }, + { + "time": 1593388800, + "open": 64.2667, + "high": 67.4267, + "low": 63.2347, + "close": 67.1667, + "volume": 85269270.0 + }, + { + "time": 1593475200, + "open": 66.9087, + "high": 72.5127, + "low": 66.7333, + "close": 71.6867, + "volume": 166442490.0 + }, + { + "time": 1593561600, + "open": 72.194, + "high": 75.95, + "low": 71.0667, + "close": 75.866, + "volume": 123111735.0 + }, + { + "time": 1593648000, + "open": 76.3847, + "high": 82.1333, + "low": 76.3847, + "close": 80.88, + "volume": 154935240.0 + }, + { + "time": 1593993600, + "open": 83.34, + "high": 95.7967, + "low": 82.8673, + "close": 95.484, + "volume": 175538805.0 + }, + { + "time": 1594080000, + "open": 95.1933, + "high": 95.3, + "low": 89.114, + "close": 92.0667, + "volume": 167984835.0 + }, + { + "time": 1594166400, + "open": 92.0773, + "high": 94.484, + "low": 87.4227, + "close": 90.7353, + "volume": 137422935.0 + }, + { + "time": 1594252800, + "open": 91.6667, + "high": 93.9047, + "low": 90.0853, + "close": 92.9, + "volume": 99822150.0 + }, + { + "time": 1594339200, + "open": 92.5333, + "high": 103.5327, + "low": 91.734, + "close": 102.8, + "volume": 196613790.0 + }, + { + "time": 1594598400, + "open": 105.6433, + "high": 119.666, + "low": 96.6667, + "close": 101.9333, + "volume": 293325390.0 + }, + { + "time": 1594684800, + "open": 102.5353, + "high": 107.5247, + "low": 95.4, + "close": 104.402, + "volume": 191646180.0 + }, + { + "time": 1594771200, + "open": 105.0667, + "high": 106.332, + "low": 97.1327, + "close": 100.7333, + "volume": 128684670.0 + }, + { + "time": 1594857600, + "open": 100.32, + "high": 102.114, + "low": 96.2673, + "close": 99.2027, + "volume": 124492275.0 + }, + { + "time": 1594944000, + "open": 99.8593, + "high": 102.5007, + "low": 99.3333, + "close": 100.452, + "volume": 78639675.0 + }, + { + "time": 1595203200, + "open": 99.8293, + "high": 111.7267, + "low": 99.2, + "close": 110.8667, + "volume": 137656275.0 + }, + { + "time": 1595289600, + "open": 112.0, + "high": 113.2, + "low": 103.8667, + "close": 105.3333, + "volume": 131882220.0 + }, + { + "time": 1595376000, + "open": 105.6667, + "high": 114.4313, + "low": 103.5933, + "close": 110.4667, + "volume": 106352115.0 + }, + { + "time": 1595462400, + "open": 112.0013, + "high": 112.6, + "low": 98.706, + "close": 98.966, + "volume": 187476870.0 + }, + { + "time": 1595548800, + "open": 98.0973, + "high": 98.132, + "low": 91.1027, + "close": 93.4667, + "volume": 157381425.0 + }, + { + "time": 1595808000, + "open": 94.7667, + "high": 103.2667, + "low": 91.6667, + "close": 102.8667, + "volume": 129609780.0 + }, + { + "time": 1595894400, + "open": 101.0667, + "high": 104.314, + "low": 98.0053, + "close": 98.084, + "volume": 135868020.0 + }, + { + "time": 1595980800, + "open": 99.2013, + "high": 102.3207, + "low": 98.4327, + "close": 100.0767, + "volume": 81939615.0 + }, + { + "time": 1596067200, + "open": 99.52, + "high": 100.8833, + "low": 98.008, + "close": 100.4, + "volume": 65301720.0 + }, + { + "time": 1596153600, + "open": 99.9733, + "high": 101.8667, + "low": 94.732, + "close": 95.0333, + "volume": 103662660.0 + }, + { + "time": 1596412800, + "open": 96.6667, + "high": 100.6547, + "low": 96.2, + "close": 99.0, + "volume": 73760145.0 + }, + { + "time": 1596499200, + "open": 99.01, + "high": 101.8273, + "low": 97.4667, + "close": 99.4667, + "volume": 72451020.0 + }, + { + "time": 1596585600, + "open": 100.0, + "high": 100.5333, + "low": 97.8873, + "close": 98.8, + "volume": 40635945.0 + }, + { + "time": 1596672000, + "open": 98.5333, + "high": 101.154, + "low": 98.1727, + "close": 99.4933, + "volume": 49976850.0 + }, + { + "time": 1596758400, + "open": 99.0, + "high": 100.1987, + "low": 94.334, + "close": 96.7333, + "volume": 72015780.0 + }, + { + "time": 1597017600, + "open": 96.9987, + "high": 97.2653, + "low": 92.3893, + "close": 94.2, + "volume": 60084135.0 + }, + { + "time": 1597104000, + "open": 95.1993, + "high": 99.3333, + "low": 90.9993, + "close": 97.5487, + "volume": 67698210.0 + }, + { + "time": 1597190400, + "open": 97.7433, + "high": 105.6667, + "low": 95.6667, + "close": 104.3333, + "volume": 173744580.0 + }, + { + "time": 1597276800, + "open": 104.7333, + "high": 110.0, + "low": 104.132, + "close": 109.0, + "volume": 165591105.0 + }, + { + "time": 1597363200, + "open": 108.8667, + "high": 112.2667, + "low": 108.4427, + "close": 109.754, + "volume": 101037135.0 + }, + { + "time": 1597622400, + "open": 110.82, + "high": 123.0573, + "low": 110.82, + "close": 122.4, + "volume": 156188385.0 + }, + { + "time": 1597708800, + "open": 123.9253, + "high": 129.2673, + "low": 122.376, + "close": 126.3333, + "volume": 123741405.0 + }, + { + "time": 1597795200, + "open": 127.2, + "high": 127.8, + "low": 122.7473, + "close": 124.6667, + "volume": 94184685.0 + }, + { + "time": 1597881600, + "open": 124.6, + "high": 134.7993, + "low": 123.7333, + "close": 133.9993, + "volume": 159074805.0 + }, + { + "time": 1597968000, + "open": 135.9967, + "high": 139.6993, + "low": 134.2013, + "close": 136.1667, + "volume": 166461210.0 + }, + { + "time": 1598227200, + "open": 138.6673, + "high": 142.6667, + "low": 128.5313, + "close": 133.3347, + "volume": 150696765.0 + }, + { + "time": 1598313600, + "open": 135.4667, + "high": 136.6, + "low": 130.9333, + "close": 136.5333, + "volume": 80517750.0 + }, + { + "time": 1598400000, + "open": 136.9333, + "high": 144.8833, + "low": 135.7333, + "close": 142.8, + "volume": 105153030.0 + }, + { + "time": 1598486400, + "open": 143.6, + "high": 153.04, + "low": 142.5333, + "close": 149.8, + "volume": 180878220.0 + }, + { + "time": 1598572800, + "open": 150.666, + "high": 154.566, + "low": 145.8373, + "close": 147.7993, + "volume": 145062675.0 + }, + { + "time": 1598832000, + "open": 156.0333, + "high": 172.6667, + "low": 146.0333, + "close": 171.5833, + "volume": 248705622.0 + }, + { + "time": 1598918400, + "open": 176.68, + "high": 179.5833, + "low": 156.8367, + "close": 160.33, + "volume": 177822417.0 + }, + { + "time": 1599004800, + "open": 162.0067, + "high": 164.2667, + "low": 135.04, + "close": 145.7533, + "volume": 188849097.0 + }, + { + "time": 1599091200, + "open": 146.0, + "high": 146.1, + "low": 126.6667, + "close": 126.8, + "volume": 180565761.0 + }, + { + "time": 1599177600, + "open": 131.5, + "high": 142.6667, + "low": 124.0067, + "close": 130.5, + "volume": 231814941.0 + }, + { + "time": 1599523200, + "open": 130.3333, + "high": 131.6667, + "low": 102.6667, + "close": 108.05, + "volume": 247260840.0 + }, + { + "time": 1599609600, + "open": 113.3, + "high": 125.2667, + "low": 112.5767, + "close": 124.9933, + "volume": 168193332.0 + }, + { + "time": 1599696000, + "open": 122.0, + "high": 132.9967, + "low": 120.1667, + "close": 125.2, + "volume": 188312610.0 + }, + { + "time": 1599782400, + "open": 127.3333, + "high": 129.52, + "low": 120.1667, + "close": 124.5833, + "volume": 137663229.0 + }, + { + "time": 1600041600, + "open": 127.7333, + "high": 142.9167, + "low": 124.4333, + "close": 141.15, + "volume": 181388055.0 + }, + { + "time": 1600128000, + "open": 142.7733, + "high": 153.98, + "low": 141.75, + "close": 148.6667, + "volume": 210951363.0 + }, + { + "time": 1600214400, + "open": 151.6667, + "high": 152.6167, + "low": 144.4467, + "close": 148.2467, + "volume": 165125403.0 + }, + { + "time": 1600300800, + "open": 142.88, + "high": 147.2533, + "low": 136.0, + "close": 141.2333, + "volume": 170581353.0 + }, + { + "time": 1600387200, + "open": 142.6667, + "high": 150.3333, + "low": 142.1533, + "close": 149.8333, + "volume": 191458605.0 + }, + { + "time": 1600646400, + "open": 148.2333, + "high": 151.9, + "low": 135.69, + "close": 141.0133, + "volume": 235264287.0 + }, + { + "time": 1600732800, + "open": 143.5767, + "high": 149.3333, + "low": 130.5033, + "close": 131.6933, + "volume": 168209415.0 + }, + { + "time": 1600819200, + "open": 132.9267, + "high": 141.3767, + "low": 121.67, + "close": 122.61, + "volume": 197688879.0 + }, + { + "time": 1600905600, + "open": 124.62, + "high": 133.1667, + "low": 117.1, + "close": 131.25, + "volume": 219102480.0 + }, + { + "time": 1600992000, + "open": 130.5, + "high": 136.4733, + "low": 128.3667, + "close": 135.2667, + "volume": 148599174.0 + }, + { + "time": 1601251200, + "open": 138.68, + "high": 142.7567, + "low": 138.3333, + "close": 139.9333, + "volume": 102743079.0 + }, + { + "time": 1601337600, + "open": 139.6967, + "high": 142.8167, + "low": 135.3333, + "close": 139.4033, + "volume": 105701094.0 + }, + { + "time": 1601424000, + "open": 138.0, + "high": 144.6433, + "low": 137.0033, + "close": 143.9, + "volume": 101027403.0 + }, + { + "time": 1601510400, + "open": 144.6667, + "high": 149.6267, + "low": 144.4467, + "close": 147.6, + "volume": 108278334.0 + }, + { + "time": 1601596800, + "open": 143.3233, + "high": 146.3767, + "low": 135.8333, + "close": 137.0667, + "volume": 153489573.0 + }, + { + "time": 1601856000, + "open": 141.41, + "high": 144.5467, + "low": 138.7067, + "close": 140.7267, + "volume": 95763156.0 + }, + { + "time": 1601942400, + "open": 140.6667, + "high": 142.9267, + "low": 135.35, + "close": 137.74, + "volume": 106731042.0 + }, + { + "time": 1602028800, + "open": 139.65, + "high": 143.3, + "low": 137.95, + "close": 142.45, + "volume": 93197385.0 + }, + { + "time": 1602115200, + "open": 143.5, + "high": 146.3967, + "low": 141.7667, + "close": 143.25, + "volume": 87453252.0 + }, + { + "time": 1602201600, + "open": 143.25, + "high": 144.8633, + "low": 142.1533, + "close": 144.8233, + "volume": 62810682.0 + }, + { + "time": 1602460800, + "open": 145.49, + "high": 149.58, + "low": 145.0267, + "close": 147.3967, + "volume": 83716995.0 + }, + { + "time": 1602547200, + "open": 147.1667, + "high": 149.63, + "low": 145.5333, + "close": 149.3067, + "volume": 73758798.0 + }, + { + "time": 1602633600, + "open": 149.3333, + "high": 155.3, + "low": 148.5, + "close": 153.45, + "volume": 103619673.0 + }, + { + "time": 1602720000, + "open": 150.9833, + "high": 153.3333, + "low": 147.34, + "close": 148.9167, + "volume": 76002600.0 + }, + { + "time": 1602806400, + "open": 149.6267, + "high": 151.9833, + "low": 145.6667, + "close": 146.0667, + "volume": 70403769.0 + }, + { + "time": 1603065600, + "open": 148.6667, + "high": 149.5833, + "low": 142.9567, + "close": 144.4833, + "volume": 79414086.0 + }, + { + "time": 1603152000, + "open": 145.3, + "high": 146.2767, + "low": 139.6833, + "close": 141.5333, + "volume": 66908925.0 + }, + { + "time": 1603238400, + "open": 141.6, + "high": 147.2833, + "low": 140.0033, + "close": 145.4367, + "volume": 65343702.0 + }, + { + "time": 1603324800, + "open": 145.65, + "high": 148.6667, + "low": 141.5033, + "close": 142.1633, + "volume": 85645152.0 + }, + { + "time": 1603411200, + "open": 142.28, + "high": 142.28, + "low": 135.7933, + "close": 140.1667, + "volume": 68631111.0 + }, + { + "time": 1603670400, + "open": 137.6667, + "high": 141.92, + "low": 136.6667, + "close": 138.8333, + "volume": 60391515.0 + }, + { + "time": 1603756800, + "open": 139.0, + "high": 143.5, + "low": 139.0, + "close": 140.55, + "volume": 47481831.0 + }, + { + "time": 1603843200, + "open": 140.0, + "high": 140.4, + "low": 134.3733, + "close": 135.8367, + "volume": 50498646.0 + }, + { + "time": 1603929600, + "open": 137.1333, + "high": 139.3533, + "low": 135.1, + "close": 135.5333, + "volume": 46622136.0 + }, + { + "time": 1604016000, + "open": 134.3433, + "high": 136.9433, + "low": 126.37, + "close": 129.0, + "volume": 87711978.0 + }, + { + "time": 1604275200, + "open": 130.2667, + "high": 135.66, + "low": 129.0, + "close": 133.6667, + "volume": 62289972.0 + }, + { + "time": 1604361600, + "open": 134.1033, + "high": 142.59, + "low": 134.1033, + "close": 141.5333, + "volume": 74676897.0 + }, + { + "time": 1604448000, + "open": 141.3, + "high": 145.8833, + "low": 139.0333, + "close": 140.8, + "volume": 66091209.0 + }, + { + "time": 1604534400, + "open": 143.0333, + "high": 146.6667, + "low": 141.3333, + "close": 144.1333, + "volume": 59458839.0 + }, + { + "time": 1604620800, + "open": 142.7867, + "high": 146.03, + "low": 141.4267, + "close": 143.3, + "volume": 47468925.0 + }, + { + "time": 1604880000, + "open": 146.47, + "high": 150.8333, + "low": 140.3333, + "close": 141.3333, + "volume": 72391911.0 + }, + { + "time": 1604966400, + "open": 141.3333, + "high": 141.3433, + "low": 132.01, + "close": 136.3333, + "volume": 62105277.0 + }, + { + "time": 1605052800, + "open": 138.3333, + "high": 139.5667, + "low": 136.7833, + "close": 138.9367, + "volume": 36576201.0 + }, + { + "time": 1605139200, + "open": 138.8333, + "high": 141.0, + "low": 136.5067, + "close": 137.0, + "volume": 39151536.0 + }, + { + "time": 1605225600, + "open": 136.0233, + "high": 137.9833, + "low": 133.8867, + "close": 136.04, + "volume": 39364200.0 + }, + { + "time": 1605484800, + "open": 136.6667, + "high": 155.8333, + "low": 134.6933, + "close": 153.9733, + "volume": 52552809.0 + }, + { + "time": 1605571200, + "open": 150.5667, + "high": 155.5667, + "low": 144.3367, + "close": 146.1, + "volume": 126524304.0 + }, + { + "time": 1605657600, + "open": 150.4033, + "high": 165.3333, + "low": 147.26, + "close": 160.6633, + "volume": 163818360.0 + }, + { + "time": 1605744000, + "open": 160.0233, + "high": 169.54, + "low": 159.3367, + "close": 164.3333, + "volume": 130075530.0 + }, + { + "time": 1605830400, + "open": 166.1167, + "high": 167.5, + "low": 163.0033, + "close": 163.5333, + "volume": 68026170.0 + }, + { + "time": 1606089600, + "open": 165.16, + "high": 177.4467, + "low": 165.16, + "close": 176.6667, + "volume": 103891680.0 + }, + { + "time": 1606176000, + "open": 178.0, + "high": 188.27, + "low": 173.7333, + "close": 187.4667, + "volume": 111214107.0 + }, + { + "time": 1606262400, + "open": 189.3333, + "high": 192.1533, + "low": 181.0, + "close": 191.6667, + "volume": 100834929.0 + }, + { + "time": 1606435200, + "open": 191.3333, + "high": 199.5933, + "low": 187.27, + "close": 194.9233, + "volume": 76762173.0 + }, + { + "time": 1606694400, + "open": 196.3333, + "high": 202.6, + "low": 184.8367, + "close": 197.3667, + "volume": 131103393.0 + }, + { + "time": 1606780800, + "open": 197.3667, + "high": 199.7667, + "low": 190.6833, + "close": 191.8267, + "volume": 81546585.0 + }, + { + "time": 1606867200, + "open": 191.6667, + "high": 196.8367, + "low": 180.4033, + "close": 194.31, + "volume": 96274566.0 + }, + { + "time": 1606953600, + "open": 195.0, + "high": 199.6567, + "low": 189.6067, + "close": 197.7233, + "volume": 86454540.0 + }, + { + "time": 1607040000, + "open": 198.72, + "high": 200.8967, + "low": 195.1667, + "close": 199.5667, + "volume": 59674344.0 + }, + { + "time": 1607299200, + "open": 199.0, + "high": 216.4833, + "low": 198.3333, + "close": 216.4133, + "volume": 116487387.0 + }, + { + "time": 1607385600, + "open": 218.2533, + "high": 223.0, + "low": 204.93, + "close": 215.4, + "volume": 132180669.0 + }, + { + "time": 1607472000, + "open": 215.3967, + "high": 219.64, + "low": 196.0, + "close": 197.0067, + "volume": 137626977.0 + }, + { + "time": 1607558400, + "open": 199.0333, + "high": 212.0367, + "low": 188.78, + "close": 208.3, + "volume": 139451475.0 + }, + { + "time": 1607644800, + "open": 205.4333, + "high": 208.0, + "low": 198.9333, + "close": 202.5467, + "volume": 95785260.0 + }, + { + "time": 1607904000, + "open": 203.3333, + "high": 214.25, + "low": 203.3333, + "close": 212.0, + "volume": 110166885.0 + }, + { + "time": 1607990400, + "open": 213.1, + "high": 216.0667, + "low": 207.9333, + "close": 209.1333, + "volume": 97244397.0 + }, + { + "time": 1608076800, + "open": 211.6667, + "high": 211.6667, + "low": 201.6667, + "close": 206.8667, + "volume": 87571866.0 + }, + { + "time": 1608163200, + "open": 206.9, + "high": 219.6067, + "low": 205.8333, + "close": 216.0, + "volume": 117472365.0 + }, + { + "time": 1608249600, + "open": 217.1, + "high": 231.6667, + "low": 209.5667, + "close": 225.6667, + "volume": 453121770.0 + }, + { + "time": 1608508800, + "open": 218.3333, + "high": 231.6667, + "low": 215.2033, + "close": 216.6, + "volume": 115350915.0 + }, + { + "time": 1608595200, + "open": 217.45, + "high": 219.5, + "low": 204.7433, + "close": 211.4433, + "volume": 104906727.0 + }, + { + "time": 1608681600, + "open": 212.55, + "high": 217.1667, + "low": 207.5233, + "close": 214.1667, + "volume": 67952889.0 + }, + { + "time": 1608768000, + "open": 214.1667, + "high": 222.03, + "low": 213.6667, + "close": 220.0, + "volume": 46317783.0 + }, + { + "time": 1609113600, + "open": 220.6667, + "high": 227.1333, + "low": 219.9, + "close": 220.0, + "volume": 66460887.0 + }, + { + "time": 1609200000, + "open": 221.6667, + "high": 223.3, + "low": 218.3333, + "close": 221.7967, + "volume": 46040676.0 + }, + { + "time": 1609286400, + "open": 221.7933, + "high": 232.2, + "low": 221.3333, + "close": 231.1333, + "volume": 89297991.0 + }, + { + "time": 1609372800, + "open": 231.1667, + "high": 239.5733, + "low": 230.1633, + "close": 234.8333, + "volume": 103795989.0 + }, + { + "time": 1609718400, + "open": 236.3333, + "high": 248.1633, + "low": 236.3333, + "close": 244.5333, + "volume": 100289490.0 + }, + { + "time": 1609804800, + "open": 243.3767, + "high": 251.4667, + "low": 239.7333, + "close": 250.9667, + "volume": 63907479.0 + }, + { + "time": 1609891200, + "open": 249.3333, + "high": 258.0, + "low": 248.8867, + "close": 254.5333, + "volume": 92182257.0 + }, + { + "time": 1609977600, + "open": 256.3333, + "high": 278.24, + "low": 255.7333, + "close": 276.5, + "volume": 102648621.0 + }, + { + "time": 1610064000, + "open": 281.6667, + "high": 294.9633, + "low": 279.4633, + "close": 289.1667, + "volume": 150111201.0 + }, + { + "time": 1610323200, + "open": 288.7933, + "high": 290.1667, + "low": 267.8733, + "close": 272.8333, + "volume": 115961742.0 + }, + { + "time": 1610409600, + "open": 274.0, + "high": 289.3333, + "low": 274.0, + "close": 284.0, + "volume": 94456524.0 + }, + { + "time": 1610496000, + "open": 285.0, + "high": 287.0, + "low": 277.3333, + "close": 281.0333, + "volume": 66342027.0 + }, + { + "time": 1610582400, + "open": 280.0, + "high": 287.6667, + "low": 279.22, + "close": 282.65, + "volume": 63056748.0 + }, + { + "time": 1610668800, + "open": 283.23, + "high": 286.6333, + "low": 273.0333, + "close": 274.59, + "volume": 78848139.0 + }, + { + "time": 1611014400, + "open": 279.0, + "high": 283.3333, + "low": 277.6667, + "close": 281.0833, + "volume": 46853928.0 + }, + { + "time": 1611100800, + "open": 280.9967, + "high": 286.7267, + "low": 279.0933, + "close": 283.9567, + "volume": 49166334.0 + }, + { + "time": 1611187200, + "open": 286.0, + "high": 286.33, + "low": 280.3333, + "close": 280.6633, + "volume": 38889873.0 + }, + { + "time": 1611273600, + "open": 280.2733, + "high": 282.6667, + "low": 276.2067, + "close": 282.5, + "volume": 37781574.0 + }, + { + "time": 1611532800, + "open": 283.9633, + "high": 300.1333, + "low": 279.6067, + "close": 291.5, + "volume": 76459485.0 + }, + { + "time": 1611619200, + "open": 293.16, + "high": 298.6333, + "low": 290.5333, + "close": 295.97, + "volume": 44113677.0 + }, + { + "time": 1611705600, + "open": 296.11, + "high": 297.17, + "low": 266.1433, + "close": 273.4633, + "volume": 44969781.0 + }, + { + "time": 1611792000, + "open": 272.8333, + "high": 282.6667, + "low": 264.6667, + "close": 276.4833, + "volume": 43576764.0 + }, + { + "time": 1611878400, + "open": 274.55, + "high": 280.8033, + "low": 260.0333, + "close": 262.6333, + "volume": 59973315.0 + }, + { + "time": 1612137600, + "open": 270.6967, + "high": 280.6667, + "low": 265.1867, + "close": 280.0, + "volume": 44447226.0 + }, + { + "time": 1612224000, + "open": 281.6667, + "high": 293.4067, + "low": 277.3333, + "close": 292.6667, + "volume": 42602496.0 + }, + { + "time": 1612310400, + "open": 292.6667, + "high": 293.2133, + "low": 283.3333, + "close": 283.6667, + "volume": 32335680.0 + }, + { + "time": 1612396800, + "open": 286.2333, + "high": 286.7433, + "low": 277.8067, + "close": 282.1667, + "volume": 28538979.0 + }, + { + "time": 1612483200, + "open": 283.6133, + "high": 288.2567, + "low": 279.6567, + "close": 284.4967, + "volume": 32859015.0 + }, + { + "time": 1612742400, + "open": 285.73, + "high": 292.6267, + "low": 280.18, + "close": 286.2067, + "volume": 36266742.0 + }, + { + "time": 1612828800, + "open": 287.7933, + "high": 287.8067, + "low": 280.6667, + "close": 281.83, + "volume": 25635285.0 + }, + { + "time": 1612915200, + "open": 283.3333, + "high": 283.6267, + "low": 266.6733, + "close": 269.9633, + "volume": 64580658.0 + }, + { + "time": 1613001600, + "open": 272.82, + "high": 276.6267, + "low": 267.2633, + "close": 270.3333, + "volume": 38372664.0 + }, + { + "time": 1613088000, + "open": 269.8767, + "high": 272.8333, + "low": 261.7767, + "close": 272.5167, + "volume": 40260147.0 + }, + { + "time": 1613433600, + "open": 273.6667, + "high": 275.0, + "low": 263.7333, + "close": 263.8067, + "volume": 34891947.0 + }, + { + "time": 1613520000, + "open": 263.3333, + "high": 266.6133, + "low": 254.0033, + "close": 264.55, + "volume": 45436740.0 + }, + { + "time": 1613606400, + "open": 263.57, + "high": 264.8967, + "low": 258.6667, + "close": 261.0333, + "volume": 32746779.0 + }, + { + "time": 1613692800, + "open": 260.9267, + "high": 267.5567, + "low": 259.1233, + "close": 260.8333, + "volume": 33005790.0 + }, + { + "time": 1613952000, + "open": 254.5, + "high": 256.1667, + "low": 236.3333, + "close": 236.87, + "volume": 66209229.0 + }, + { + "time": 1614038400, + "open": 231.7333, + "high": 240.0, + "low": 206.3333, + "close": 238.8333, + "volume": 120777558.0 + }, + { + "time": 1614124800, + "open": 240.0, + "high": 248.3333, + "low": 231.39, + "close": 246.0667, + "volume": 69555915.0 + }, + { + "time": 1614211200, + "open": 247.1667, + "high": 247.34, + "low": 218.3333, + "close": 222.6667, + "volume": 69715503.0 + }, + { + "time": 1614297600, + "open": 226.0067, + "high": 235.5667, + "low": 219.8367, + "close": 223.6, + "volume": 77062926.0 + }, + { + "time": 1614556800, + "open": 230.8367, + "high": 241.8133, + "low": 228.35, + "close": 241.75, + "volume": 48766533.0 + }, + { + "time": 1614643200, + "open": 238.8333, + "high": 241.1167, + "low": 228.3333, + "close": 229.5967, + "volume": 40553202.0 + }, + { + "time": 1614729600, + "open": 233.0, + "high": 234.1667, + "low": 216.3733, + "close": 217.9767, + "volume": 52144758.0 + }, + { + "time": 1614816000, + "open": 218.27, + "high": 222.8167, + "low": 200.0, + "close": 200.0333, + "volume": 120709596.0 + }, + { + "time": 1614902400, + "open": 203.5, + "high": 210.74, + "low": 179.83, + "close": 198.75, + "volume": 166008762.0 + }, + { + "time": 1615161600, + "open": 194.4, + "high": 206.71, + "low": 184.6667, + "close": 189.0, + "volume": 99075645.0 + }, + { + "time": 1615248000, + "open": 193.72, + "high": 231.3, + "low": 192.3333, + "close": 229.7367, + "volume": 126304164.0 + }, + { + "time": 1615334400, + "open": 230.5233, + "high": 239.2833, + "low": 218.6067, + "close": 221.52, + "volume": 115159767.0 + }, + { + "time": 1615420800, + "open": 229.0, + "high": 235.2633, + "low": 225.7267, + "close": 232.8333, + "volume": 66966033.0 + }, + { + "time": 1615507200, + "open": 225.0, + "high": 232.0, + "low": 222.0433, + "close": 230.9967, + "volume": 60956052.0 + }, + { + "time": 1615766400, + "open": 229.9667, + "high": 237.7267, + "low": 228.0133, + "close": 234.0, + "volume": 55377972.0 + }, + { + "time": 1615852800, + "open": 236.9233, + "high": 237.0, + "low": 223.6667, + "close": 224.7, + "volume": 59068035.0 + }, + { + "time": 1615939200, + "open": 224.8667, + "high": 234.5767, + "low": 216.67, + "close": 233.2467, + "volume": 77101338.0 + }, + { + "time": 1616025600, + "open": 229.2567, + "high": 230.93, + "low": 216.8333, + "close": 216.8533, + "volume": 59758062.0 + }, + { + "time": 1616112000, + "open": 216.6667, + "high": 222.8333, + "low": 208.2067, + "close": 217.4, + "volume": 81737448.0 + }, + { + "time": 1616371200, + "open": 220.6667, + "high": 233.2067, + "low": 218.29, + "close": 223.1167, + "volume": 75553839.0 + }, + { + "time": 1616457600, + "open": 223.0, + "high": 227.2, + "low": 219.17, + "close": 221.0, + "volume": 53724156.0 + }, + { + "time": 1616544000, + "open": 221.3333, + "high": 225.3333, + "low": 210.0, + "close": 211.3, + "volume": 63886878.0 + }, + { + "time": 1616630400, + "open": 211.3667, + "high": 215.1667, + "low": 201.48, + "close": 214.2, + "volume": 75643422.0 + }, + { + "time": 1616716800, + "open": 214.0167, + "high": 217.0767, + "low": 200.0, + "close": 207.1, + "volume": 59529975.0 + }, + { + "time": 1616976000, + "open": 203.15, + "high": 207.36, + "low": 198.6733, + "close": 202.6, + "volume": 48334989.0 + }, + { + "time": 1617062400, + "open": 202.0, + "high": 213.3333, + "low": 197.0033, + "close": 213.0033, + "volume": 77555175.0 + }, + { + "time": 1617148800, + "open": 211.5667, + "high": 224.0, + "low": 209.1667, + "close": 221.1033, + "volume": 64970841.0 + }, + { + "time": 1617235200, + "open": 225.1833, + "high": 230.81, + "low": 219.3333, + "close": 219.3333, + "volume": 68217258.0 + }, + { + "time": 1617580800, + "open": 233.3333, + "high": 238.9, + "low": 228.2333, + "close": 230.9, + "volume": 82286721.0 + }, + { + "time": 1617667200, + "open": 230.1667, + "high": 232.1833, + "low": 227.1233, + "close": 230.8333, + "volume": 57601257.0 + }, + { + "time": 1617753600, + "open": 230.9567, + "high": 231.1167, + "low": 222.6133, + "close": 224.1333, + "volume": 53050818.0 + }, + { + "time": 1617840000, + "open": 226.33, + "high": 229.85, + "low": 223.88, + "close": 228.9233, + "volume": 48333639.0 + }, + { + "time": 1617926400, + "open": 228.2433, + "high": 229.1667, + "low": 223.1433, + "close": 225.6667, + "volume": 39606963.0 + }, + { + "time": 1618185600, + "open": 228.5667, + "high": 234.9333, + "low": 226.2367, + "close": 233.8367, + "volume": 54284880.0 + }, + { + "time": 1618272000, + "open": 234.6667, + "high": 254.5, + "low": 234.5767, + "close": 252.5667, + "volume": 86973186.0 + }, + { + "time": 1618358400, + "open": 254.9067, + "high": 262.23, + "low": 242.6767, + "close": 244.2933, + "volume": 93136587.0 + }, + { + "time": 1618444800, + "open": 248.3333, + "high": 249.1133, + "low": 240.4367, + "close": 246.0833, + "volume": 53544411.0 + }, + { + "time": 1618531200, + "open": 245.8767, + "high": 249.8033, + "low": 241.5333, + "close": 246.4167, + "volume": 53036541.0 + }, + { + "time": 1618790400, + "open": 244.6667, + "high": 247.21, + "low": 230.6, + "close": 240.5333, + "volume": 75574374.0 + }, + { + "time": 1618876800, + "open": 240.07, + "high": 245.75, + "low": 233.9, + "close": 237.4633, + "volume": 70814043.0 + }, + { + "time": 1618963200, + "open": 237.2067, + "high": 248.28, + "low": 232.6667, + "close": 246.8667, + "volume": 58436706.0 + }, + { + "time": 1619049600, + "open": 247.24, + "high": 251.2567, + "low": 237.6667, + "close": 239.5, + "volume": 68573160.0 + }, + { + "time": 1619136000, + "open": 239.04, + "high": 245.7867, + "low": 237.51, + "close": 243.3667, + "volume": 55616598.0 + }, + { + "time": 1619395200, + "open": 244.6667, + "high": 249.7667, + "low": 238.39, + "close": 239.9533, + "volume": 56943357.0 + }, + { + "time": 1619481600, + "open": 240.0, + "high": 241.9467, + "low": 233.63, + "close": 233.86, + "volume": 54962673.0 + }, + { + "time": 1619568000, + "open": 233.3333, + "high": 236.1667, + "low": 230.5133, + "close": 231.5, + "volume": 40961961.0 + }, + { + "time": 1619654400, + "open": 233.84, + "high": 234.6, + "low": 222.8667, + "close": 223.6267, + "volume": 53380290.0 + }, + { + "time": 1619740800, + "open": 224.3367, + "high": 238.49, + "low": 221.0467, + "close": 236.6667, + "volume": 76883430.0 + }, + { + "time": 1620000000, + "open": 236.0067, + "high": 236.21, + "low": 226.8333, + "close": 227.1, + "volume": 51935973.0 + }, + { + "time": 1620086400, + "open": 227.0633, + "high": 229.5, + "low": 219.2333, + "close": 225.1, + "volume": 55854111.0 + }, + { + "time": 1620172800, + "open": 225.7667, + "high": 228.4333, + "low": 222.1667, + "close": 222.17, + "volume": 42513225.0 + }, + { + "time": 1620259200, + "open": 224.4567, + "high": 230.0767, + "low": 216.6667, + "close": 221.6667, + "volume": 54950481.0 + }, + { + "time": 1620345600, + "open": 222.1667, + "high": 227.84, + "low": 218.5433, + "close": 223.1667, + "volume": 45285756.0 + }, + { + "time": 1620604800, + "open": 223.0, + "high": 223.3333, + "low": 206.7033, + "close": 206.7033, + "volume": 59311011.0 + }, + { + "time": 1620691200, + "open": 206.67, + "high": 209.0333, + "low": 192.6667, + "close": 205.25, + "volume": 89671815.0 + }, + { + "time": 1620777600, + "open": 206.1, + "high": 206.8033, + "low": 193.3333, + "close": 194.1667, + "volume": 64890921.0 + }, + { + "time": 1620864000, + "open": 193.6667, + "high": 202.1533, + "low": 186.6667, + "close": 191.1667, + "volume": 83126715.0 + }, + { + "time": 1620950400, + "open": 193.67, + "high": 199.6267, + "low": 190.1533, + "close": 199.3333, + "volume": 65228229.0 + }, + { + "time": 1621209600, + "open": 196.58, + "high": 197.6667, + "low": 187.0667, + "close": 190.6467, + "volume": 63467550.0 + }, + { + "time": 1621296000, + "open": 193.0467, + "high": 198.75, + "low": 187.7933, + "close": 190.3333, + "volume": 75257196.0 + }, + { + "time": 1621382400, + "open": 188.56, + "high": 189.2833, + "low": 181.6667, + "close": 186.0033, + "volume": 77524299.0 + }, + { + "time": 1621468800, + "open": 187.6667, + "high": 196.3333, + "low": 186.6333, + "close": 196.3, + "volume": 64313097.0 + }, + { + "time": 1621555200, + "open": 196.7667, + "high": 201.57, + "low": 192.7933, + "close": 192.8333, + "volume": 49913517.0 + }, + { + "time": 1621814400, + "open": 195.0333, + "high": 204.8267, + "low": 191.2167, + "close": 202.5, + "volume": 72762678.0 + }, + { + "time": 1621900800, + "open": 203.5, + "high": 204.6633, + "low": 198.57, + "close": 202.4267, + "volume": 57594786.0 + }, + { + "time": 1621987200, + "open": 203.0, + "high": 208.7233, + "low": 200.5, + "close": 206.3367, + "volume": 59423178.0 + }, + { + "time": 1622073600, + "open": 205.5433, + "high": 210.3767, + "low": 204.47, + "close": 209.7433, + "volume": 53587350.0 + }, + { + "time": 1622160000, + "open": 210.0, + "high": 211.8633, + "low": 207.46, + "close": 208.1667, + "volume": 45708411.0 + }, + { + "time": 1622505600, + "open": 208.73, + "high": 211.2667, + "low": 206.85, + "close": 207.2333, + "volume": 35538018.0 + }, + { + "time": 1622592000, + "open": 206.9967, + "high": 207.9667, + "low": 199.7133, + "close": 200.6733, + "volume": 43231854.0 + }, + { + "time": 1622678400, + "open": 200.3367, + "high": 201.5167, + "low": 190.0, + "close": 190.7167, + "volume": 57641328.0 + }, + { + "time": 1622764800, + "open": 191.9333, + "high": 200.2033, + "low": 190.4667, + "close": 200.0, + "volume": 47932023.0 + }, + { + "time": 1623024000, + "open": 199.4967, + "high": 203.3333, + "low": 194.2933, + "close": 200.0, + "volume": 43852587.0 + }, + { + "time": 1623110400, + "open": 198.6833, + "high": 209.0, + "low": 198.5, + "close": 200.4833, + "volume": 52664493.0 + }, + { + "time": 1623196800, + "open": 201.24, + "high": 203.93, + "low": 199.0067, + "close": 199.3333, + "volume": 34338024.0 + }, + { + "time": 1623283200, + "open": 199.2733, + "high": 205.53, + "low": 197.3333, + "close": 202.6667, + "volume": 49835202.0 + }, + { + "time": 1623369600, + "open": 203.0, + "high": 205.3333, + "low": 200.5067, + "close": 203.5, + "volume": 31935483.0 + }, + { + "time": 1623628800, + "open": 203.9967, + "high": 208.42, + "low": 203.06, + "close": 205.3333, + "volume": 41926515.0 + }, + { + "time": 1623715200, + "open": 205.81, + "high": 206.3367, + "low": 198.6667, + "close": 198.7667, + "volume": 36347325.0 + }, + { + "time": 1623801600, + "open": 199.6267, + "high": 202.8333, + "low": 197.67, + "close": 200.8333, + "volume": 44065245.0 + }, + { + "time": 1623888000, + "open": 200.3033, + "high": 207.1567, + "low": 199.6567, + "close": 205.53, + "volume": 44940105.0 + }, + { + "time": 1623974400, + "open": 205.6367, + "high": 209.45, + "low": 203.5433, + "close": 206.9833, + "volume": 50973756.0 + }, + { + "time": 1624233600, + "open": 207.33, + "high": 210.4633, + "low": 202.96, + "close": 207.0833, + "volume": 50577285.0 + }, + { + "time": 1624320000, + "open": 206.1333, + "high": 209.5233, + "low": 205.1667, + "close": 208.0167, + "volume": 39783501.0 + }, + { + "time": 1624406400, + "open": 208.3333, + "high": 221.5467, + "low": 208.3333, + "close": 221.0, + "volume": 63081165.0 + }, + { + "time": 1624492800, + "open": 221.6667, + "high": 232.54, + "low": 219.4033, + "close": 227.3333, + "volume": 95330490.0 + }, + { + "time": 1624579200, + "open": 227.3333, + "high": 231.27, + "low": 222.6767, + "close": 223.0, + "volume": 68989917.0 + }, + { + "time": 1624838400, + "open": 222.9, + "high": 231.5667, + "low": 222.4333, + "close": 228.8, + "volume": 43411218.0 + }, + { + "time": 1624924800, + "open": 229.33, + "high": 229.3333, + "low": 225.2967, + "close": 226.67, + "volume": 35486958.0 + }, + { + "time": 1625011200, + "open": 227.0, + "high": 230.9367, + "low": 224.6667, + "close": 226.4667, + "volume": 38338683.0 + }, + { + "time": 1625097600, + "open": 227.1667, + "high": 229.5733, + "low": 224.2667, + "close": 225.3, + "volume": 35654799.0 + }, + { + "time": 1625184000, + "open": 225.3, + "high": 233.3333, + "low": 224.09, + "close": 225.7, + "volume": 54561240.0 + }, + { + "time": 1625529600, + "open": 225.4867, + "high": 228.0, + "low": 217.1333, + "close": 218.7, + "volume": 41297160.0 + }, + { + "time": 1625616000, + "open": 220.0, + "high": 221.9, + "low": 212.7733, + "close": 214.6333, + "volume": 37118532.0 + }, + { + "time": 1625702400, + "open": 210.0, + "high": 218.3333, + "low": 206.82, + "close": 216.8667, + "volume": 44881728.0 + }, + { + "time": 1625788800, + "open": 217.5967, + "high": 220.0, + "low": 214.8967, + "close": 218.5933, + "volume": 34968744.0 + }, + { + "time": 1626048000, + "open": 219.0, + "high": 229.1667, + "low": 218.9833, + "close": 229.0033, + "volume": 51243600.0 + }, + { + "time": 1626134400, + "open": 228.1333, + "high": 231.58, + "low": 220.5067, + "close": 220.8, + "volume": 42033159.0 + }, + { + "time": 1626220800, + "open": 223.3333, + "high": 226.2033, + "low": 217.6, + "close": 218.2833, + "volume": 46162458.0 + }, + { + "time": 1626307200, + "open": 219.0633, + "high": 222.0467, + "low": 212.6267, + "close": 216.4, + "volume": 41483562.0 + }, + { + "time": 1626393600, + "open": 217.5, + "high": 218.92, + "low": 213.66, + "close": 214.0667, + "volume": 31873818.0 + }, + { + "time": 1626652800, + "open": 213.6467, + "high": 216.33, + "low": 207.0967, + "close": 215.9267, + "volume": 40264497.0 + }, + { + "time": 1626739200, + "open": 216.6667, + "high": 220.8, + "low": 213.5, + "close": 220.6667, + "volume": 29554182.0 + }, + { + "time": 1626825600, + "open": 220.6667, + "high": 221.62, + "low": 216.7633, + "close": 218.2333, + "volume": 26824704.0 + }, + { + "time": 1626912000, + "open": 219.6333, + "high": 220.7233, + "low": 214.8667, + "close": 216.1667, + "volume": 29336946.0 + }, + { + "time": 1626998400, + "open": 217.3333, + "high": 217.3367, + "low": 212.4333, + "close": 214.44, + "volume": 27217935.0 + }, + { + "time": 1627257600, + "open": 215.2, + "high": 226.1167, + "low": 213.21, + "close": 221.3867, + "volume": 50556135.0 + }, + { + "time": 1627344000, + "open": 222.4967, + "high": 224.7967, + "low": 209.08, + "close": 213.0033, + "volume": 64392234.0 + }, + { + "time": 1627430400, + "open": 214.3, + "high": 218.3233, + "low": 213.1333, + "close": 215.3333, + "volume": 29813055.0 + }, + { + "time": 1627516800, + "open": 215.66, + "high": 227.8967, + "low": 215.66, + "close": 222.9967, + "volume": 59894136.0 + }, + { + "time": 1627603200, + "open": 221.8333, + "high": 232.51, + "low": 220.99, + "close": 229.1933, + "volume": 55456236.0 + }, + { + "time": 1627862400, + "open": 230.7333, + "high": 242.3133, + "low": 230.6667, + "close": 238.33, + "volume": 65648568.0 + }, + { + "time": 1627948800, + "open": 238.3333, + "high": 240.8833, + "low": 233.67, + "close": 235.6667, + "volume": 42860139.0 + }, + { + "time": 1628035200, + "open": 237.0, + "high": 241.6333, + "low": 235.5167, + "close": 237.0, + "volume": 32493825.0 + }, + { + "time": 1628121600, + "open": 237.6667, + "high": 240.3167, + "low": 236.94, + "close": 238.2, + "volume": 24828657.0 + }, + { + "time": 1628208000, + "open": 238.3367, + "high": 239.0, + "low": 232.2833, + "close": 232.3333, + "volume": 28781466.0 + }, + { + "time": 1628467200, + "open": 236.0, + "high": 239.6767, + "low": 234.9633, + "close": 237.9, + "volume": 29672529.0 + }, + { + "time": 1628553600, + "open": 238.1, + "high": 238.8633, + "low": 233.96, + "close": 236.1667, + "volume": 26595642.0 + }, + { + "time": 1628640000, + "open": 236.2167, + "high": 238.3933, + "low": 234.7367, + "close": 235.8033, + "volume": 17842452.0 + }, + { + "time": 1628726400, + "open": 235.3333, + "high": 242.0033, + "low": 233.1333, + "close": 240.1133, + "volume": 34809909.0 + }, + { + "time": 1628812800, + "open": 239.97, + "high": 243.3, + "low": 238.18, + "close": 238.9067, + "volume": 32477205.0 + }, + { + "time": 1629072000, + "open": 238.7267, + "high": 238.7267, + "low": 226.02, + "close": 227.2333, + "volume": 42453582.0 + }, + { + "time": 1629158400, + "open": 226.8, + "high": 226.8, + "low": 216.28, + "close": 221.0, + "volume": 43246251.0 + }, + { + "time": 1629244800, + "open": 223.0033, + "high": 231.9233, + "low": 222.7767, + "close": 228.3333, + "volume": 39414696.0 + }, + { + "time": 1629331200, + "open": 227.0, + "high": 228.85, + "low": 222.53, + "close": 224.3333, + "volume": 27499356.0 + }, + { + "time": 1629417600, + "open": 224.6667, + "high": 230.71, + "low": 223.6667, + "close": 226.7667, + "volume": 27058611.0 + }, + { + "time": 1629676800, + "open": 228.0, + "high": 237.3767, + "low": 226.9167, + "close": 236.1, + "volume": 40378269.0 + }, + { + "time": 1629763200, + "open": 236.8, + "high": 238.4033, + "low": 234.2133, + "close": 235.4333, + "volume": 24506721.0 + }, + { + "time": 1629849600, + "open": 235.5967, + "high": 238.99, + "low": 234.6667, + "close": 237.0, + "volume": 24902058.0 + }, + { + "time": 1629936000, + "open": 236.3367, + "high": 238.4667, + "low": 232.54, + "close": 233.3, + "volume": 24901170.0 + }, + { + "time": 1630022400, + "open": 235.0, + "high": 238.3333, + "low": 234.0333, + "close": 237.4667, + "volume": 25801872.0 + }, + { + "time": 1630281600, + "open": 238.0, + "high": 245.7833, + "low": 237.44, + "close": 244.6667, + "volume": 35205261.0 + }, + { + "time": 1630368000, + "open": 244.6667, + "high": 246.78, + "low": 242.1467, + "close": 244.6667, + "volume": 41367243.0 + }, + { + "time": 1630454400, + "open": 245.5667, + "high": 247.33, + "low": 243.3333, + "close": 243.7333, + "volume": 23279241.0 + }, + { + "time": 1630540800, + "open": 244.33, + "high": 246.99, + "low": 242.0033, + "close": 244.4333, + "volume": 24648756.0 + }, + { + "time": 1630627200, + "open": 245.7, + "high": 245.8333, + "low": 241.4, + "close": 244.8333, + "volume": 29042418.0 + }, + { + "time": 1630972800, + "open": 245.12, + "high": 253.4, + "low": 245.0, + "close": 250.4367, + "volume": 38376276.0 + }, + { + "time": 1631059200, + "open": 252.0, + "high": 254.8167, + "low": 246.9233, + "close": 250.5167, + "volume": 37344477.0 + }, + { + "time": 1631145600, + "open": 250.0, + "high": 254.0333, + "low": 249.0067, + "close": 251.2833, + "volume": 27285180.0 + }, + { + "time": 1631232000, + "open": 251.8533, + "high": 254.2033, + "low": 243.7233, + "close": 244.1667, + "volume": 28766106.0 + }, + { + "time": 1631491200, + "open": 245.4233, + "high": 248.26, + "low": 236.3933, + "close": 247.6667, + "volume": 45762033.0 + }, + { + "time": 1631577600, + "open": 246.3333, + "high": 251.49, + "low": 245.4067, + "close": 248.5, + "volume": 35848818.0 + }, + { + "time": 1631664000, + "open": 248.48, + "high": 252.2867, + "low": 246.12, + "close": 251.93, + "volume": 30442302.0 + }, + { + "time": 1631750400, + "open": 250.6667, + "high": 252.97, + "low": 249.2033, + "close": 251.8333, + "volume": 26342049.0 + }, + { + "time": 1631836800, + "open": 252.0033, + "high": 253.68, + "low": 250.0, + "close": 253.04, + "volume": 59345472.0 + }, + { + "time": 1632096000, + "open": 250.0, + "high": 250.0, + "low": 239.54, + "close": 242.9867, + "volume": 44764014.0 + }, + { + "time": 1632182400, + "open": 247.3333, + "high": 248.2467, + "low": 243.48, + "close": 245.6667, + "volume": 31419141.0 + }, + { + "time": 1632268800, + "open": 246.37, + "high": 251.5333, + "low": 246.3167, + "close": 251.5333, + "volume": 28690833.0 + }, + { + "time": 1632355200, + "open": 252.0133, + "high": 253.2667, + "low": 249.3067, + "close": 250.9333, + "volume": 21861891.0 + }, + { + "time": 1632441600, + "open": 250.0, + "high": 258.3333, + "low": 248.01, + "close": 257.9167, + "volume": 41849742.0 + }, + { + "time": 1632700800, + "open": 258.0, + "high": 266.3333, + "low": 256.1633, + "close": 262.3267, + "volume": 56626173.0 + }, + { + "time": 1632787200, + "open": 260.48, + "high": 265.2133, + "low": 255.3933, + "close": 258.0, + "volume": 50707452.0 + }, + { + "time": 1632873600, + "open": 261.6667, + "high": 264.5, + "low": 256.8933, + "close": 259.9667, + "volume": 42686520.0 + }, + { + "time": 1632960000, + "open": 261.6667, + "high": 263.0467, + "low": 258.0, + "close": 258.3767, + "volume": 36607635.0 + }, + { + "time": 1633046400, + "open": 256.6667, + "high": 260.6667, + "low": 254.53, + "close": 258.3333, + "volume": 33948654.0 + }, + { + "time": 1633305600, + "open": 261.6833, + "high": 268.99, + "low": 257.76, + "close": 260.5, + "volume": 62392521.0 + }, + { + "time": 1633392000, + "open": 261.1233, + "high": 265.77, + "low": 258.17, + "close": 260.0, + "volume": 36630258.0 + }, + { + "time": 1633478400, + "open": 257.1267, + "high": 262.22, + "low": 255.0533, + "close": 261.2467, + "volume": 28747782.0 + }, + { + "time": 1633564800, + "open": 262.75, + "high": 268.3333, + "low": 260.2633, + "close": 263.3333, + "volume": 35731074.0 + }, + { + "time": 1633651200, + "open": 264.5033, + "high": 266.1133, + "low": 260.3033, + "close": 261.7, + "volume": 31890201.0 + }, + { + "time": 1633910400, + "open": 261.92, + "high": 267.08, + "low": 261.0, + "close": 264.2, + "volume": 27505347.0 + }, + { + "time": 1633996800, + "open": 263.68, + "high": 270.7733, + "low": 263.32, + "close": 268.5, + "volume": 40789215.0 + }, + { + "time": 1634083200, + "open": 270.0067, + "high": 271.8033, + "low": 267.9, + "close": 271.1667, + "volume": 27633120.0 + }, + { + "time": 1634169600, + "open": 272.3867, + "high": 273.4167, + "low": 269.6833, + "close": 273.2333, + "volume": 21017235.0 + }, + { + "time": 1634256000, + "open": 273.3333, + "high": 283.2633, + "low": 272.09, + "close": 283.0, + "volume": 37482756.0 + }, + { + "time": 1634515200, + "open": 281.15, + "high": 291.6767, + "low": 280.3067, + "close": 290.6667, + "volume": 46397166.0 + }, + { + "time": 1634601600, + "open": 291.5667, + "high": 293.3333, + "low": 287.5033, + "close": 287.5533, + "volume": 34256370.0 + }, + { + "time": 1634688000, + "open": 286.7067, + "high": 291.8, + "low": 283.8633, + "close": 283.9333, + "volume": 26102676.0 + }, + { + "time": 1634774400, + "open": 285.53, + "high": 300.0, + "low": 283.4333, + "close": 296.2933, + "volume": 63007014.0 + }, + { + "time": 1634860800, + "open": 297.1667, + "high": 303.4067, + "low": 296.9867, + "close": 303.0833, + "volume": 44809167.0 + }, + { + "time": 1635120000, + "open": 304.66, + "high": 348.34, + "low": 303.3367, + "close": 343.3333, + "volume": 120727032.0 + }, + { + "time": 1635206400, + "open": 342.99, + "high": 364.98, + "low": 333.8133, + "close": 337.9667, + "volume": 116972874.0 + }, + { + "time": 1635292800, + "open": 340.0667, + "high": 356.96, + "low": 336.55, + "close": 353.67, + "volume": 71864214.0 + }, + { + "time": 1635379200, + "open": 353.6, + "high": 362.9333, + "low": 345.9533, + "close": 360.0, + "volume": 51902868.0 + }, + { + "time": 1635465600, + "open": 360.0, + "high": 376.5833, + "low": 357.7333, + "close": 376.05, + "volume": 58173909.0 + }, + { + "time": 1635724800, + "open": 377.4, + "high": 408.2967, + "low": 372.26, + "close": 406.4, + "volume": 103645668.0 + }, + { + "time": 1635811200, + "open": 397.0367, + "high": 402.8633, + "low": 375.1033, + "close": 387.0, + "volume": 73600182.0 + }, + { + "time": 1635897600, + "open": 388.5433, + "high": 406.33, + "low": 383.55, + "close": 405.83, + "volume": 62335545.0 + }, + { + "time": 1635984000, + "open": 407.7333, + "high": 416.6667, + "low": 405.6667, + "close": 407.4, + "volume": 44871267.0 + }, + { + "time": 1636070400, + "open": 407.41, + "high": 413.29, + "low": 402.6667, + "close": 405.5, + "volume": 38407929.0 + }, + { + "time": 1636329600, + "open": 383.6667, + "high": 399.0, + "low": 376.8333, + "close": 383.3367, + "volume": 55734987.0 + }, + { + "time": 1636416000, + "open": 388.2333, + "high": 395.9267, + "low": 337.1733, + "close": 341.3333, + "volume": 99305115.0 + }, + { + "time": 1636502400, + "open": 345.1667, + "high": 366.3333, + "low": 329.1033, + "close": 365.3333, + "volume": 72635043.0 + }, + { + "time": 1636588800, + "open": 364.5733, + "high": 373.2433, + "low": 351.56, + "close": 353.3333, + "volume": 37079193.0 + }, + { + "time": 1636675200, + "open": 355.11, + "high": 357.3333, + "low": 339.88, + "close": 343.1667, + "volume": 40773651.0 + }, + { + "time": 1636934400, + "open": 340.0, + "high": 345.3367, + "low": 326.2, + "close": 334.0, + "volume": 55007415.0 + }, + { + "time": 1637020800, + "open": 334.3333, + "high": 353.0, + "low": 332.0033, + "close": 352.7333, + "volume": 45724431.0 + }, + { + "time": 1637107200, + "open": 354.47, + "high": 373.2133, + "low": 351.8333, + "close": 362.6667, + "volume": 54335913.0 + }, + { + "time": 1637193600, + "open": 366.2567, + "high": 371.6667, + "low": 358.34, + "close": 362.4167, + "volume": 38152728.0 + }, + { + "time": 1637280000, + "open": 367.07, + "high": 381.4133, + "low": 363.3333, + "close": 380.0, + "volume": 40460397.0 + }, + { + "time": 1637539200, + "open": 382.8367, + "high": 400.65, + "low": 377.4767, + "close": 387.02, + "volume": 61802889.0 + }, + { + "time": 1637625600, + "open": 384.9233, + "high": 393.5, + "low": 354.2333, + "close": 366.9333, + "volume": 66676008.0 + }, + { + "time": 1637712000, + "open": 371.0833, + "high": 377.59, + "low": 354.0, + "close": 372.5, + "volume": 40844445.0 + }, + { + "time": 1637884800, + "open": 363.1667, + "high": 369.5967, + "low": 357.05, + "close": 360.0, + "volume": 20116359.0 + }, + { + "time": 1638144000, + "open": 368.3333, + "high": 380.89, + "low": 364.3367, + "close": 380.6567, + "volume": 35464650.0 + }, + { + "time": 1638230400, + "open": 375.9, + "high": 389.3333, + "low": 372.3333, + "close": 381.67, + "volume": 49770600.0 + }, + { + "time": 1638316800, + "open": 384.6633, + "high": 390.9467, + "low": 361.2567, + "close": 365.9167, + "volume": 40769319.0 + }, + { + "time": 1638403200, + "open": 369.79, + "high": 371.9967, + "low": 352.2167, + "close": 357.9967, + "volume": 42563499.0 + }, + { + "time": 1638489600, + "open": 359.9833, + "high": 366.0, + "low": 333.4033, + "close": 336.0, + "volume": 52544382.0 + }, + { + "time": 1638748800, + "open": 342.3267, + "high": 343.4633, + "low": 316.8333, + "close": 336.6667, + "volume": 46148676.0 + }, + { + "time": 1638835200, + "open": 345.1267, + "high": 352.9333, + "low": 336.3367, + "close": 352.6633, + "volume": 35199075.0 + }, + { + "time": 1638921600, + "open": 349.8333, + "high": 357.46, + "low": 344.3333, + "close": 354.2433, + "volume": 24624063.0 + }, + { + "time": 1639008000, + "open": 352.67, + "high": 357.2133, + "low": 332.3333, + "close": 332.5167, + "volume": 36719553.0 + }, + { + "time": 1639094400, + "open": 333.03, + "high": 340.6, + "low": 324.3333, + "close": 337.5067, + "volume": 34100466.0 + }, + { + "time": 1639353600, + "open": 339.6767, + "high": 341.15, + "low": 317.17, + "close": 318.3333, + "volume": 42878616.0 + }, + { + "time": 1639440000, + "open": 320.4233, + "high": 322.9433, + "low": 310.0, + "close": 317.78, + "volume": 40971606.0 + }, + { + "time": 1639526400, + "open": 318.4067, + "high": 331.6333, + "low": 309.4167, + "close": 329.6667, + "volume": 42256527.0 + }, + { + "time": 1639612800, + "open": 331.9233, + "high": 334.6067, + "low": 305.5, + "close": 306.6, + "volume": 44465637.0 + }, + { + "time": 1639699200, + "open": 306.4933, + "high": 320.22, + "low": 301.6667, + "close": 310.5, + "volume": 59531019.0 + }, + { + "time": 1639958400, + "open": 303.6667, + "high": 307.23, + "low": 297.81, + "close": 301.0133, + "volume": 31028196.0 + }, + { + "time": 1640044800, + "open": 304.3567, + "high": 313.1667, + "low": 295.3733, + "close": 310.1333, + "volume": 40021422.0 + }, + { + "time": 1640131200, + "open": 314.3333, + "high": 338.5533, + "low": 312.1333, + "close": 334.3333, + "volume": 53675220.0 + }, + { + "time": 1640217600, + "open": 336.4933, + "high": 357.66, + "low": 332.52, + "close": 356.4333, + "volume": 53221719.0 + }, + { + "time": 1640563200, + "open": 356.9333, + "high": 372.3333, + "low": 356.9033, + "close": 364.0, + "volume": 39116811.0 + }, + { + "time": 1640649600, + "open": 368.6033, + "high": 373.0, + "low": 359.4733, + "close": 364.5, + "volume": 33759246.0 + }, + { + "time": 1640736000, + "open": 367.6667, + "high": 371.8733, + "low": 354.7133, + "close": 360.6667, + "volume": 33236880.0 + }, + { + "time": 1640822400, + "open": 362.9967, + "high": 365.1833, + "low": 351.05, + "close": 355.3333, + "volume": 26776320.0 + }, + { + "time": 1640908800, + "open": 355.3333, + "high": 360.6667, + "low": 351.53, + "close": 354.3, + "volume": 21442167.0 + }, + { + "time": 1641168000, + "open": 369.9133, + "high": 403.3333, + "low": 368.6667, + "close": 403.3333, + "volume": 59739450.0 + }, + { + "time": 1641254400, + "open": 400.3267, + "high": 403.4033, + "low": 374.35, + "close": 380.0, + "volume": 55300041.0 + }, + { + "time": 1641340800, + "open": 377.3833, + "high": 390.1133, + "low": 357.9333, + "close": 361.1667, + "volume": 45923958.0 + }, + { + "time": 1641427200, + "open": 362.0, + "high": 362.6667, + "low": 340.1667, + "close": 358.67, + "volume": 50920653.0 + }, + { + "time": 1641513600, + "open": 355.57, + "high": 367.0, + "low": 336.6667, + "close": 342.3, + "volume": 48486174.0 + }, + { + "time": 1641772800, + "open": 341.0533, + "high": 357.7833, + "low": 326.6667, + "close": 355.93, + "volume": 50742453.0 + }, + { + "time": 1641859200, + "open": 356.2667, + "high": 359.7533, + "low": 346.2733, + "close": 353.0, + "volume": 37721568.0 + }, + { + "time": 1641945600, + "open": 352.9667, + "high": 371.6133, + "low": 352.6667, + "close": 369.6667, + "volume": 47720787.0 + }, + { + "time": 1642032000, + "open": 368.0867, + "high": 371.8667, + "low": 341.9633, + "close": 341.9633, + "volume": 56243877.0 + }, + { + "time": 1642118400, + "open": 346.7333, + "high": 350.6667, + "low": 332.53, + "close": 348.6667, + "volume": 40407246.0 + }, + { + "time": 1642464000, + "open": 344.0, + "high": 356.93, + "low": 338.6867, + "close": 341.67, + "volume": 37357950.0 + }, + { + "time": 1642550400, + "open": 341.57, + "high": 351.5567, + "low": 329.7, + "close": 333.0, + "volume": 41641410.0 + }, + { + "time": 1642636800, + "open": 337.0, + "high": 347.22, + "low": 327.4, + "close": 329.9667, + "volume": 40021428.0 + }, + { + "time": 1642723200, + "open": 331.9567, + "high": 334.85, + "low": 311.6667, + "close": 312.0, + "volume": 54432708.0 + }, + { + "time": 1642982400, + "open": 317.2233, + "high": 317.45, + "low": 283.8233, + "close": 303.3333, + "volume": 83257308.0 + }, + { + "time": 1643068800, + "open": 301.6667, + "high": 317.0, + "low": 298.1067, + "close": 307.28, + "volume": 47386206.0 + }, + { + "time": 1643155200, + "open": 313.4, + "high": 329.23, + "low": 293.29, + "close": 309.9667, + "volume": 59069976.0 + }, + { + "time": 1643241600, + "open": 310.4333, + "high": 316.46, + "low": 273.5967, + "close": 279.0, + "volume": 78316839.0 + }, + { + "time": 1643328000, + "open": 279.3033, + "high": 285.8333, + "low": 264.0033, + "close": 284.0, + "volume": 73422666.0 + }, + { + "time": 1643587200, + "open": 286.8633, + "high": 313.3333, + "low": 283.7, + "close": 312.6667, + "volume": 60666141.0 + }, + { + "time": 1643673600, + "open": 315.01, + "high": 315.6667, + "low": 301.6667, + "close": 312.8333, + "volume": 40608771.0 + }, + { + "time": 1643760000, + "open": 313.3333, + "high": 315.0, + "low": 293.5333, + "close": 293.6667, + "volume": 37054980.0 + }, + { + "time": 1643846400, + "open": 296.6733, + "high": 312.3333, + "low": 291.76, + "close": 302.6, + "volume": 45404325.0 + }, + { + "time": 1643932800, + "open": 302.7033, + "high": 312.1667, + "low": 293.7233, + "close": 308.6667, + "volume": 41669502.0 + }, + { + "time": 1644192000, + "open": 308.5967, + "high": 315.9233, + "low": 300.9, + "close": 303.17, + "volume": 34018512.0 + }, + { + "time": 1644278400, + "open": 303.6667, + "high": 308.7633, + "low": 298.2667, + "close": 308.0, + "volume": 28583517.0 + }, + { + "time": 1644364800, + "open": 309.3367, + "high": 315.4233, + "low": 306.6667, + "close": 310.0, + "volume": 30368949.0 + }, + { + "time": 1644451200, + "open": 309.48, + "high": 314.6033, + "low": 298.9, + "close": 300.0667, + "volume": 37176897.0 + }, + { + "time": 1644537600, + "open": 299.9967, + "high": 305.32, + "low": 283.5667, + "close": 285.6667, + "volume": 44144829.0 + }, + { + "time": 1644796800, + "open": 281.3333, + "high": 299.6267, + "low": 277.8867, + "close": 293.3333, + "volume": 38758287.0 + }, + { + "time": 1644883200, + "open": 299.33, + "high": 307.6667, + "low": 297.79, + "close": 306.0, + "volume": 32850735.0 + }, + { + "time": 1644969600, + "open": 306.0, + "high": 309.4967, + "low": 300.4033, + "close": 306.2667, + "volume": 28010172.0 + }, + { + "time": 1645056000, + "open": 304.6667, + "high": 307.03, + "low": 290.33, + "close": 290.4033, + "volume": 30422382.0 + }, + { + "time": 1645142400, + "open": 294.7067, + "high": 296.0633, + "low": 279.2033, + "close": 284.0, + "volume": 40040778.0 + }, + { + "time": 1645488000, + "open": 276.5133, + "high": 285.58, + "low": 267.0333, + "close": 277.0, + "volume": 47556666.0 + }, + { + "time": 1645574400, + "open": 280.0, + "high": 281.5967, + "low": 249.3333, + "close": 249.3333, + "volume": 53536245.0 + }, + { + "time": 1645660800, + "open": 241.2133, + "high": 267.6667, + "low": 230.54, + "close": 263.8333, + "volume": 81729354.0 + }, + { + "time": 1645747200, + "open": 266.0633, + "high": 275.5, + "low": 260.8, + "close": 270.3667, + "volume": 43164210.0 + }, + { + "time": 1646006400, + "open": 263.49, + "high": 292.2867, + "low": 262.33, + "close": 290.8867, + "volume": 59203599.0 + }, + { + "time": 1646092800, + "open": 289.3333, + "high": 296.6267, + "low": 283.6667, + "close": 288.1967, + "volume": 43701348.0 + }, + { + "time": 1646179200, + "open": 286.6667, + "high": 295.4933, + "low": 281.4233, + "close": 290.2, + "volume": 41124426.0 + }, + { + "time": 1646265600, + "open": 290.0, + "high": 295.4933, + "low": 272.8333, + "close": 273.1833, + "volume": 34345506.0 + }, + { + "time": 1646352000, + "open": 277.0667, + "high": 285.2167, + "low": 275.0533, + "close": 281.3333, + "volume": 39490536.0 + }, + { + "time": 1646611200, + "open": 276.0, + "high": 288.7133, + "low": 264.4067, + "close": 266.6633, + "volume": 41203665.0 + }, + { + "time": 1646697600, + "open": 268.3333, + "high": 283.33, + "low": 260.7233, + "close": 275.5833, + "volume": 47495559.0 + }, + { + "time": 1646784000, + "open": 278.7133, + "high": 288.2133, + "low": 274.8, + "close": 285.3333, + "volume": 34494873.0 + }, + { + "time": 1646870400, + "open": 283.3333, + "high": 284.8167, + "low": 270.12, + "close": 277.33, + "volume": 33274095.0 + }, + { + "time": 1646956800, + "open": 279.6667, + "high": 285.3333, + "low": 264.12, + "close": 264.6433, + "volume": 37045917.0 + }, + { + "time": 1647216000, + "open": 265.1167, + "high": 267.69, + "low": 252.0133, + "close": 259.8333, + "volume": 39402378.0 + }, + { + "time": 1647302400, + "open": 256.0667, + "high": 268.5233, + "low": 251.6667, + "close": 267.2833, + "volume": 37676769.0 + }, + { + "time": 1647388800, + "open": 268.6667, + "high": 282.6667, + "low": 267.2967, + "close": 279.6667, + "volume": 46220172.0 + }, + { + "time": 1647475200, + "open": 281.0, + "high": 291.6667, + "low": 275.2367, + "close": 288.5, + "volume": 37029492.0 + }, + { + "time": 1647561600, + "open": 288.0267, + "high": 302.6167, + "low": 287.5033, + "close": 302.5433, + "volume": 61952121.0 + }, + { + "time": 1647820800, + "open": 302.3333, + "high": 314.2833, + "low": 299.2233, + "close": 306.09, + "volume": 46753863.0 + }, + { + "time": 1647907200, + "open": 306.2967, + "high": 332.62, + "low": 306.2967, + "close": 330.7433, + "volume": 62365338.0 + }, + { + "time": 1647993600, + "open": 331.0, + "high": 346.9, + "low": 325.37, + "close": 332.85, + "volume": 68725848.0 + }, + { + "time": 1648080000, + "open": 334.34, + "high": 341.4967, + "low": 329.6, + "close": 336.5067, + "volume": 39163167.0 + }, + { + "time": 1648166400, + "open": 337.3333, + "high": 340.6, + "low": 332.44, + "close": 337.05, + "volume": 36286704.0 + }, + { + "time": 1648425600, + "open": 335.3333, + "high": 365.96, + "low": 334.0733, + "close": 365.2667, + "volume": 56465760.0 + }, + { + "time": 1648512000, + "open": 366.6133, + "high": 374.8667, + "low": 357.7033, + "close": 364.6867, + "volume": 39172281.0 + }, + { + "time": 1648598400, + "open": 364.3233, + "high": 371.3167, + "low": 361.3333, + "close": 365.2933, + "volume": 33436668.0 + }, + { + "time": 1648684800, + "open": 367.1933, + "high": 368.3333, + "low": 358.3333, + "close": 358.5, + "volume": 26907888.0 + }, + { + "time": 1648771200, + "open": 360.0333, + "high": 364.9167, + "low": 355.5467, + "close": 363.6667, + "volume": 29717751.0 + }, + { + "time": 1649030400, + "open": 364.3333, + "high": 383.3033, + "low": 357.51, + "close": 380.0, + "volume": 46320690.0 + }, + { + "time": 1649116800, + "open": 380.5367, + "high": 384.29, + "low": 361.45, + "close": 362.6667, + "volume": 43596441.0 + }, + { + "time": 1649203200, + "open": 362.0, + "high": 364.6633, + "low": 342.5667, + "close": 347.6667, + "volume": 50559519.0 + }, + { + "time": 1649289600, + "open": 351.8133, + "high": 358.8633, + "low": 340.5133, + "close": 355.5, + "volume": 44438853.0 + }, + { + "time": 1649376000, + "open": 357.67, + "high": 359.05, + "low": 340.3433, + "close": 340.6667, + "volume": 30800952.0 + }, + { + "time": 1649635200, + "open": 336.51, + "high": 337.0, + "low": 320.6667, + "close": 320.6667, + "volume": 32727522.0 + }, + { + "time": 1649721600, + "open": 322.7767, + "high": 340.4, + "low": 320.9667, + "close": 330.5933, + "volume": 38553336.0 + }, + { + "time": 1649808000, + "open": 333.2267, + "high": 342.08, + "low": 324.3633, + "close": 341.0, + "volume": 31495641.0 + }, + { + "time": 1649894400, + "open": 342.0667, + "high": 343.3433, + "low": 327.3967, + "close": 329.8167, + "volume": 32337318.0 + }, + { + "time": 1650240000, + "open": 329.0833, + "high": 338.3067, + "low": 324.47, + "close": 337.6733, + "volume": 28905387.0 + }, + { + "time": 1650326400, + "open": 336.06, + "high": 344.98, + "low": 331.7733, + "close": 339.3333, + "volume": 27618669.0 + }, + { + "time": 1650412800, + "open": 338.4133, + "high": 348.9967, + "low": 324.4967, + "close": 343.7267, + "volume": 37622106.0 + }, + { + "time": 1650499200, + "open": 343.87, + "high": 364.0733, + "low": 332.1367, + "close": 337.1333, + "volume": 57751845.0 + }, + { + "time": 1650585600, + "open": 337.1333, + "high": 344.95, + "low": 331.3333, + "close": 333.4333, + "volume": 37934373.0 + }, + { + "time": 1650844800, + "open": 333.4, + "high": 336.2067, + "low": 320.3333, + "close": 332.7667, + "volume": 37647819.0 + }, + { + "time": 1650931200, + "open": 330.0, + "high": 334.3333, + "low": 287.1667, + "close": 291.67, + "volume": 74006871.0 + }, + { + "time": 1651017600, + "open": 298.3333, + "high": 306.0, + "low": 292.4533, + "close": 298.6667, + "volume": 38960505.0 + }, + { + "time": 1651104000, + "open": 300.4967, + "high": 305.0, + "low": 273.9, + "close": 284.8333, + "volume": 67646268.0 + }, + { + "time": 1651190400, + "open": 299.6667, + "high": 311.4667, + "low": 289.3333, + "close": 292.5, + "volume": 48944871.0 + }, + { + "time": 1651449600, + "open": 296.1567, + "high": 303.25, + "low": 281.3333, + "close": 302.3333, + "volume": 42804726.0 + }, + { + "time": 1651536000, + "open": 301.0067, + "high": 308.0267, + "low": 296.1967, + "close": 302.3333, + "volume": 37183326.0 + }, + { + "time": 1651622400, + "open": 302.3333, + "high": 318.5, + "low": 295.0933, + "close": 316.02, + "volume": 49005195.0 + }, + { + "time": 1651708800, + "open": 314.3, + "high": 316.91, + "low": 285.9, + "close": 292.6667, + "volume": 52158030.0 + }, + { + "time": 1651795200, + "open": 291.9667, + "high": 296.6267, + "low": 281.0333, + "close": 288.0, + "volume": 41014902.0 + }, + { + "time": 1652054400, + "open": 284.4133, + "high": 284.4133, + "low": 260.3833, + "close": 262.2333, + "volume": 49423431.0 + }, + { + "time": 1652140800, + "open": 269.3333, + "high": 275.12, + "low": 258.0833, + "close": 265.9167, + "volume": 48430737.0 + }, + { + "time": 1652227200, + "open": 271.0133, + "high": 272.6667, + "low": 242.4, + "close": 244.7, + "volume": 53134143.0 + }, + { + "time": 1652313600, + "open": 243.8633, + "high": 253.22, + "low": 226.6667, + "close": 247.0, + "volume": 85963638.0 + }, + { + "time": 1652400000, + "open": 249.6667, + "high": 262.45, + "low": 249.6667, + "close": 258.5667, + "volume": 55949757.0 + }, + { + "time": 1652659200, + "open": 255.0, + "high": 258.09, + "low": 239.6933, + "close": 240.74, + "volume": 52901019.0 + }, + { + "time": 1652745600, + "open": 248.49, + "high": 254.8267, + "low": 242.95, + "close": 253.6833, + "volume": 47844489.0 + }, + { + "time": 1652832000, + "open": 250.54, + "high": 253.5, + "low": 233.3333, + "close": 233.3333, + "volume": 52252599.0 + }, + { + "time": 1652918400, + "open": 232.9367, + "high": 244.6667, + "low": 229.8333, + "close": 238.3333, + "volume": 55037787.0 + }, + { + "time": 1653004800, + "open": 242.5967, + "high": 243.52, + "low": 211.0, + "close": 221.8333, + "volume": 85888587.0 + }, + { + "time": 1653264000, + "open": 227.5267, + "high": 228.0, + "low": 212.6867, + "close": 219.0, + "volume": 51265281.0 + }, + { + "time": 1653350400, + "open": 217.8867, + "high": 219.6667, + "low": 206.8567, + "close": 211.3333, + "volume": 52180665.0 + }, + { + "time": 1653436800, + "open": 212.2567, + "high": 223.1067, + "low": 205.81, + "close": 218.4333, + "volume": 58653768.0 + }, + { + "time": 1653523200, + "open": 221.76, + "high": 239.5567, + "low": 217.8867, + "close": 237.6667, + "volume": 66064707.0 + }, + { + "time": 1653609600, + "open": 236.93, + "high": 255.9667, + "low": 235.81, + "close": 255.0833, + "volume": 56435403.0 + }, + { + "time": 1653955200, + "open": 253.9067, + "high": 259.6, + "low": 244.7433, + "close": 253.23, + "volume": 64379274.0 + }, + { + "time": 1654041600, + "open": 253.2533, + "high": 257.3267, + "low": 243.64, + "close": 244.6667, + "volume": 47765442.0 + }, + { + "time": 1654128000, + "open": 248.4833, + "high": 264.21, + "low": 242.0667, + "close": 261.0667, + "volume": 59789013.0 + }, + { + "time": 1654214400, + "open": 251.3333, + "high": 260.3333, + "low": 233.3333, + "close": 233.43, + "volume": 70047213.0 + }, + { + "time": 1654473600, + "open": 241.6667, + "high": 245.0, + "low": 234.35, + "close": 237.8367, + "volume": 52758504.0 + }, + { + "time": 1654560000, + "open": 236.7667, + "high": 239.9967, + "low": 230.0933, + "close": 238.3333, + "volume": 46067151.0 + }, + { + "time": 1654646400, + "open": 237.6, + "high": 249.9633, + "low": 237.6, + "close": 242.7667, + "volume": 47875032.0 + }, + { + "time": 1654732800, + "open": 248.1567, + "high": 255.5467, + "low": 239.3267, + "close": 239.5033, + "volume": 60465090.0 + }, + { + "time": 1654819200, + "open": 241.3333, + "high": 244.1833, + "low": 227.9133, + "close": 236.4167, + "volume": 60624126.0 + }, + { + "time": 1655078400, + "open": 229.63, + "high": 232.33, + "low": 214.2167, + "close": 214.4333, + "volume": 61920003.0 + }, + { + "time": 1655164800, + "open": 221.0, + "high": 226.33, + "low": 211.7367, + "close": 223.1167, + "volume": 63877368.0 + }, + { + "time": 1655251200, + "open": 222.6667, + "high": 235.6633, + "low": 218.15, + "close": 235.4133, + "volume": 76913121.0 + }, + { + "time": 1655337600, + "open": 227.64, + "high": 231.9967, + "low": 208.6933, + "close": 211.8333, + "volume": 65683083.0 + }, + { + "time": 1655424000, + "open": 215.3333, + "high": 220.97, + "low": 211.48, + "close": 216.1, + "volume": 61196430.0 + }, + { + "time": 1655769600, + "open": 222.3333, + "high": 243.58, + "low": 219.6833, + "close": 237.5167, + "volume": 79742895.0 + }, + { + "time": 1655856000, + "open": 229.8633, + "high": 246.8233, + "low": 228.3733, + "close": 234.1833, + "volume": 67988037.0 + }, + { + "time": 1655942400, + "open": 234.3333, + "high": 241.1667, + "low": 228.6367, + "close": 234.2333, + "volume": 69978438.0 + }, + { + "time": 1656028800, + "open": 238.25, + "high": 246.0667, + "low": 235.5533, + "close": 245.4667, + "volume": 62441367.0 + }, + { + "time": 1656288000, + "open": 248.9433, + "high": 252.07, + "low": 242.5633, + "close": 245.27, + "volume": 56900979.0 + }, + { + "time": 1656374400, + "open": 245.3333, + "high": 249.97, + "low": 231.0067, + "close": 232.3, + "volume": 58576794.0 + }, + { + "time": 1656460800, + "open": 232.3333, + "high": 233.3333, + "low": 222.2733, + "close": 227.4667, + "volume": 53105913.0 + }, + { + "time": 1656547200, + "open": 223.3, + "high": 229.4567, + "low": 218.8633, + "close": 224.3333, + "volume": 61716366.0 + }, + { + "time": 1656633600, + "open": 222.0, + "high": 230.23, + "low": 220.8367, + "close": 226.4867, + "volume": 48110886.0 + }, + { + "time": 1656979200, + "open": 228.3, + "high": 233.9933, + "low": 216.1667, + "close": 232.9733, + "volume": 54336840.0 + }, + { + "time": 1657065600, + "open": 232.9333, + "high": 234.5633, + "low": 227.1867, + "close": 231.6667, + "volume": 45489657.0 + }, + { + "time": 1657152000, + "open": 233.6333, + "high": 245.3633, + "low": 232.21, + "close": 243.6667, + "volume": 52164897.0 + }, + { + "time": 1657238400, + "open": 242.7667, + "high": 259.3333, + "low": 240.73, + "close": 256.4667, + "volume": 66933489.0 + }, + { + "time": 1657497600, + "open": 250.97, + "high": 254.6, + "low": 233.6267, + "close": 234.0, + "volume": 61863519.0 + }, + { + "time": 1657584000, + "open": 231.8467, + "high": 239.7733, + "low": 228.3667, + "close": 232.1, + "volume": 56026785.0 + }, + { + "time": 1657670400, + "open": 232.9, + "high": 242.06, + "low": 223.9033, + "close": 234.6833, + "volume": 62291388.0 + }, + { + "time": 1657756800, + "open": 236.0467, + "high": 239.48, + "low": 229.3333, + "close": 239.48, + "volume": 50364726.0 + }, + { + "time": 1657843200, + "open": 237.3333, + "high": 243.6233, + "low": 236.4667, + "close": 239.6633, + "volume": 40794570.0 + }, + { + "time": 1658102400, + "open": 244.0033, + "high": 250.5167, + "low": 239.6033, + "close": 241.3367, + "volume": 52663089.0 + }, + { + "time": 1658188800, + "open": 242.1333, + "high": 247.8967, + "low": 236.9767, + "close": 247.1467, + "volume": 51763212.0 + }, + { + "time": 1658275200, + "open": 247.0633, + "high": 259.3333, + "low": 243.48, + "close": 251.1, + "volume": 54030141.0 + }, + { + "time": 1658361600, + "open": 251.87, + "high": 273.2667, + "low": 249.3333, + "close": 269.75, + "volume": 86439174.0 + }, + { + "time": 1658448000, + "open": 269.2767, + "high": 280.7867, + "low": 268.6733, + "close": 271.6667, + "volume": 60837000.0 + }, + { + "time": 1658707200, + "open": 272.3167, + "high": 276.5433, + "low": 266.67, + "close": 266.8333, + "volume": 39659769.0 + }, + { + "time": 1658793600, + "open": 267.0967, + "high": 268.0, + "low": 256.2633, + "close": 262.3333, + "volume": 42541404.0 + }, + { + "time": 1658880000, + "open": 263.3333, + "high": 275.9267, + "low": 258.86, + "close": 273.58, + "volume": 55620006.0 + }, + { + "time": 1658966400, + "open": 273.3333, + "high": 284.5633, + "low": 271.6667, + "close": 284.3333, + "volume": 53337165.0 + }, + { + "time": 1659052800, + "open": 284.1767, + "high": 298.32, + "low": 279.1, + "close": 296.6, + "volume": 58007934.0 + }, + { + "time": 1659312000, + "open": 296.6667, + "high": 311.88, + "low": 293.3333, + "close": 298.0, + "volume": 71199081.0 + }, + { + "time": 1659398400, + "open": 294.1133, + "high": 307.8333, + "low": 291.46, + "close": 301.3333, + "volume": 59609352.0 + }, + { + "time": 1659484800, + "open": 301.3667, + "high": 309.55, + "low": 301.15, + "close": 307.7467, + "volume": 49034241.0 + }, + { + "time": 1659571200, + "open": 308.8467, + "high": 313.6067, + "low": 305.0, + "close": 309.1667, + "volume": 44030208.0 + }, + { + "time": 1659657600, + "open": 312.2233, + "high": 312.2233, + "low": 285.5433, + "close": 287.3333, + "volume": 67475064.0 + }, + { + "time": 1659916800, + "open": 294.3333, + "high": 305.19, + "low": 289.0833, + "close": 292.8, + "volume": 59549943.0 + }, + { + "time": 1660003200, + "open": 295.2467, + "high": 295.7233, + "low": 279.3533, + "close": 283.8, + "volume": 52285851.0 + }, + { + "time": 1660089600, + "open": 286.2033, + "high": 297.9867, + "low": 283.3333, + "close": 293.3333, + "volume": 57884541.0 + }, + { + "time": 1660176000, + "open": 295.1367, + "high": 298.2367, + "low": 285.8333, + "close": 288.1, + "volume": 43055865.0 + }, + { + "time": 1660262400, + "open": 290.3333, + "high": 301.5667, + "low": 285.0333, + "close": 301.3333, + "volume": 49332492.0 + }, + { + "time": 1660521600, + "open": 298.39, + "high": 313.1333, + "low": 297.7367, + "close": 309.6667, + "volume": 54710223.0 + }, + { + "time": 1660608000, + "open": 308.5233, + "high": 314.6667, + "low": 302.8833, + "close": 306.4, + "volume": 55540302.0 + }, + { + "time": 1660694400, + "open": 306.0, + "high": 309.6567, + "low": 300.0333, + "close": 303.0, + "volume": 43278504.0 + }, + { + "time": 1660780800, + "open": 303.0267, + "high": 307.5033, + "low": 301.8533, + "close": 303.1033, + "volume": 28342434.0 + }, + { + "time": 1660867200, + "open": 301.9767, + "high": 303.63, + "low": 292.5, + "close": 295.2667, + "volume": 37094298.0 + }, + { + "time": 1661126400, + "open": 291.6667, + "high": 294.8333, + "low": 286.2967, + "close": 290.5833, + "volume": 33285654.0 + }, + { + "time": 1661212800, + "open": 290.0, + "high": 298.8267, + "low": 287.9233, + "close": 296.5333, + "volume": 39575148.0 + }, + { + "time": 1661299200, + "open": 295.76, + "high": 308.94, + "low": 295.5, + "close": 306.6, + "volume": 11374931.0 + }, + { + "time": 1661385600, + "open": 307.95, + "high": 307.95, + "low": 291.6, + "close": 295.7, + "volume": 37975857.0 + }, + { + "time": 1661472000, + "open": 296.77, + "high": 302.0, + "low": 284.3, + "close": 284.5, + "volume": 41690512.0 + }, + { + "time": 1661731200, + "open": 281.91, + "high": 288.09, + "low": 280.0, + "close": 285.7, + "volume": 31229778.0 + }, + { + "time": 1661817600, + "open": 289.38, + "high": 292.5, + "low": 272.65, + "close": 278.12, + "volume": 36111921.0 + }, + { + "time": 1661904000, + "open": 279.44, + "high": 281.25, + "low": 271.81, + "close": 272.01, + "volume": 36997072.0 + }, + { + "time": 1661990400, + "open": 271.57, + "high": 280.34, + "low": 266.15, + "close": 279.7, + "volume": 39657641.0 + }, + { + "time": 1662076800, + "open": 279.1, + "high": 282.57, + "low": 269.08, + "close": 269.3, + "volume": 36972502.0 + }, + { + "time": 1662422400, + "open": 276.14, + "high": 276.14, + "low": 265.74, + "close": 273.81, + "volume": 39823707.0 + }, + { + "time": 1662508800, + "open": 274.75, + "high": 283.95, + "low": 272.21, + "close": 283.45, + "volume": 36023268.0 + }, + { + "time": 1662595200, + "open": 282.87, + "high": 290.0, + "low": 279.78, + "close": 290.0, + "volume": 40320418.0 + }, + { + "time": 1662681600, + "open": 291.82, + "high": 299.95, + "low": 289.98, + "close": 298.4, + "volume": 40244272.0 + }, + { + "time": 1662940800, + "open": 300.0, + "high": 305.49, + "low": 298.01, + "close": 304.65, + "volume": 35331535.0 + }, + { + "time": 1663027200, + "open": 305.04, + "high": 307.0, + "low": 290.4, + "close": 291.6, + "volume": 47611133.0 + }, + { + "time": 1663113600, + "open": 292.6, + "high": 306.0, + "low": 289.3, + "close": 304.25, + "volume": 51667238.0 + }, + { + "time": 1663200000, + "open": 304.53, + "high": 309.12, + "low": 299.5, + "close": 300.19, + "volume": 48241149.0 + }, + { + "time": 1663286400, + "open": 299.65, + "high": 304.01, + "low": 295.6, + "close": 303.9, + "volume": 70185787.0 + }, + { + "time": 1663545600, + "open": 301.23, + "high": 309.84, + "low": 297.8, + "close": 309.44, + "volume": 44466573.0 + }, + { + "time": 1663632000, + "open": 308.4, + "high": 313.33, + "low": 305.58, + "close": 307.4, + "volume": 46760937.0 + }, + { + "time": 1663718400, + "open": 306.21, + "high": 313.8, + "low": 299.0, + "close": 299.3, + "volume": 46208549.0 + }, + { + "time": 1663804800, + "open": 301.03, + "high": 304.5, + "low": 285.82, + "close": 288.02, + "volume": 50406357.0 + }, + { + "time": 1663891200, + "open": 287.78, + "high": 288.03, + "low": 272.82, + "close": 275.75, + "volume": 44530343.0 + }, + { + "time": 1664150400, + "open": 275.33, + "high": 284.09, + "low": 269.8, + "close": 276.4, + "volume": 40779663.0 + }, + { + "time": 1664236800, + "open": 282.78, + "high": 288.67, + "low": 276.7, + "close": 287.1, + "volume": 45446685.0 + }, + { + "time": 1664323200, + "open": 281.45, + "high": 289.0, + "low": 274.77, + "close": 286.3, + "volume": 40051777.0 + }, + { + "time": 1664409600, + "open": 283.0, + "high": 288.53, + "low": 265.81, + "close": 269.21, + "volume": 56781305.0 + }, + { + "time": 1664496000, + "open": 273.8, + "high": 275.57, + "low": 262.47, + "close": 266.05, + "volume": 49037220.0 + }, + { + "time": 1664755200, + "open": 256.68, + "high": 260.0, + "low": 241.01, + "close": 243.7, + "volume": 72670646.0 + }, + { + "time": 1664841600, + "open": 249.43, + "high": 257.5, + "low": 242.01, + "close": 247.7, + "volume": 82343604.0 + }, + { + "time": 1664928000, + "open": 247.24, + "high": 248.09, + "low": 233.27, + "close": 240.99, + "volume": 65285626.0 + }, + { + "time": 1665014400, + "open": 241.8, + "high": 244.58, + "low": 235.35, + "close": 236.7, + "volume": 51843790.0 + }, + { + "time": 1665100800, + "open": 237.83, + "high": 239.7, + "low": 221.75, + "close": 223.8, + "volume": 62463602.0 + }, + { + "time": 1665360000, + "open": 223.46, + "high": 226.99, + "low": 218.0, + "close": 223.0, + "volume": 51669555.0 + }, + { + "time": 1665446400, + "open": 221.36, + "high": 225.75, + "low": 215.0, + "close": 215.2, + "volume": 59920745.0 + }, + { + "time": 1665532800, + "open": 218.4, + "high": 219.69, + "low": 211.51, + "close": 216.8, + "volume": 51834612.0 + }, + { + "time": 1665619200, + "open": 216.43, + "high": 222.99, + "low": 206.22, + "close": 220.51, + "volume": 70560950.0 + }, + { + "time": 1665705600, + "open": 223.4, + "high": 226.26, + "low": 203.5, + "close": 204.43, + "volume": 72262028.0 + }, + { + "time": 1665964800, + "open": 210.32, + "high": 222.87, + "low": 204.99, + "close": 222.75, + "volume": 64099875.0 + }, + { + "time": 1666051200, + "open": 225.9, + "high": 229.82, + "low": 217.25, + "close": 224.25, + "volume": 61738061.0 + }, + { + "time": 1666137600, + "open": 222.09, + "high": 228.29, + "low": 206.23, + "close": 208.16, + "volume": 50898030.0 + }, + { + "time": 1666224000, + "open": 209.74, + "high": 215.55, + "low": 202.0, + "close": 206.6, + "volume": 92683950.0 + }, + { + "time": 1666310400, + "open": 206.08, + "high": 215.0, + "low": 203.0, + "close": 214.55, + "volume": 58617759.0 + }, + { + "time": 1666569600, + "open": 213.4, + "high": 216.66, + "low": 198.58, + "close": 208.8, + "volume": 78968509.0 + }, + { + "time": 1666656000, + "open": 209.5, + "high": 224.35, + "low": 208.0, + "close": 217.12, + "volume": 79670683.0 + }, + { + "time": 1666742400, + "open": 219.56, + "high": 230.6, + "low": 218.2, + "close": 226.5, + "volume": 68562598.0 + }, + { + "time": 1666828800, + "open": 226.5, + "high": 233.81, + "low": 217.55, + "close": 223.38, + "volume": 49680215.0 + }, + { + "time": 1666915200, + "open": 221.0, + "high": 228.86, + "low": 215.0, + "close": 228.35, + "volume": 56109870.0 + }, + { + "time": 1667174400, + "open": 228.79, + "high": 229.85, + "low": 221.94, + "close": 227.59, + "volume": 49891734.0 + }, + { + "time": 1667260800, + "open": 229.19, + "high": 237.4, + "low": 226.51, + "close": 227.0, + "volume": 49775576.0 + }, + { + "time": 1667347200, + "open": 229.0, + "high": 229.37, + "low": 213.44, + "close": 215.87, + "volume": 49853305.0 + }, + { + "time": 1667433600, + "open": 216.74, + "high": 221.2, + "low": 210.14, + "close": 214.48, + "volume": 44646949.0 + }, + { + "time": 1667520000, + "open": 220.79, + "high": 223.8, + "low": 203.08, + "close": 209.05, + "volume": 80308864.0 + }, + { + "time": 1667779200, + "open": 210.6, + "high": 210.6, + "low": 196.5, + "close": 197.3, + "volume": 73397622.0 + }, + { + "time": 1667865600, + "open": 198.58, + "high": 198.93, + "low": 186.75, + "close": 190.0, + "volume": 105514188.0 + }, + { + "time": 1667952000, + "open": 194.0, + "high": 195.89, + "low": 175.51, + "close": 176.5, + "volume": 102644299.0 + }, + { + "time": 1668038400, + "open": 178.69, + "high": 193.64, + "low": 172.01, + "close": 191.47, + "volume": 110460759.0 + }, + { + "time": 1668124800, + "open": 194.48, + "high": 196.52, + "low": 182.59, + "close": 195.65, + "volume": 95853553.0 + }, + { + "time": 1668384000, + "open": 195.04, + "high": 195.95, + "low": 186.34, + "close": 191.25, + "volume": 77319752.0 + }, + { + "time": 1668470400, + "open": 194.53, + "high": 200.83, + "low": 191.42, + "close": 193.3, + "volume": 74960504.0 + }, + { + "time": 1668556800, + "open": 196.22, + "high": 196.67, + "low": 184.05, + "close": 187.8, + "volume": 54096082.0 + }, + { + "time": 1668643200, + "open": 189.18, + "high": 189.18, + "low": 180.9, + "close": 183.62, + "volume": 52118517.0 + }, + { + "time": 1668729600, + "open": 183.0, + "high": 185.83, + "low": 176.55, + "close": 179.3, + "volume": 61891438.0 + }, + { + "time": 1668988800, + "open": 178.6, + "high": 179.66, + "low": 167.54, + "close": 167.83, + "volume": 73810772.0 + }, + { + "time": 1669075200, + "open": 167.67, + "high": 171.35, + "low": 165.38, + "close": 170.42, + "volume": 64763513.0 + }, + { + "time": 1669161600, + "open": 173.11, + "high": 184.88, + "low": 170.51, + "close": 184.8, + "volume": 90934248.0 + }, + { + "time": 1669334400, + "open": 186.07, + "high": 188.5, + "low": 180.63, + "close": 182.89, + "volume": 41660711.0 + }, + { + "time": 1669593600, + "open": 181.59, + "high": 188.5, + "low": 178.0, + "close": 183.9, + "volume": 78408629.0 + }, + { + "time": 1669680000, + "open": 185.11, + "high": 186.88, + "low": 178.75, + "close": 180.4, + "volume": 68205280.0 + }, + { + "time": 1669766400, + "open": 182.42, + "high": 196.6, + "low": 180.63, + "close": 195.9, + "volume": 92743086.0 + }, + { + "time": 1669852800, + "open": 194.24, + "high": 198.92, + "low": 191.8, + "close": 193.93, + "volume": 65844119.0 + }, + { + "time": 1669939200, + "open": 194.07, + "high": 196.9, + "low": 189.55, + "close": 194.2, + "volume": 60902399.0 + }, + { + "time": 1670198400, + "open": 192.95, + "high": 194.3, + "low": 180.55, + "close": 182.55, + "volume": 75912778.0 + }, + { + "time": 1670284800, + "open": 182.89, + "high": 183.82, + "low": 175.33, + "close": 179.05, + "volume": 76040783.0 + }, + { + "time": 1670371200, + "open": 179.33, + "high": 179.69, + "low": 172.21, + "close": 173.42, + "volume": 69718106.0 + }, + { + "time": 1670457600, + "open": 174.14, + "high": 175.7, + "low": 169.06, + "close": 173.45, + "volume": 80762690.0 + }, + { + "time": 1670544000, + "open": 174.92, + "high": 182.5, + "low": 172.3, + "close": 178.5, + "volume": 88081017.0 + }, + { + "time": 1670803200, + "open": 178.45, + "high": 179.56, + "low": 167.52, + "close": 168.02, + "volume": 90494485.0 + }, + { + "time": 1670889600, + "open": 169.66, + "high": 179.14, + "low": 156.91, + "close": 161.3, + "volume": 135812432.0 + }, + { + "time": 1670976000, + "open": 161.75, + "high": 162.25, + "low": 155.31, + "close": 156.9, + "volume": 113815160.0 + }, + { + "time": 1671062400, + "open": 155.75, + "high": 160.93, + "low": 151.33, + "close": 158.72, + "volume": 101035229.0 + }, + { + "time": 1671148800, + "open": 156.46, + "high": 160.99, + "low": 149.0, + "close": 149.06, + "volume": 113741284.0 + }, + { + "time": 1671408000, + "open": 156.57, + "high": 158.2, + "low": 145.82, + "close": 150.53, + "volume": 118190710.0 + }, + { + "time": 1671494400, + "open": 148.0, + "high": 151.57, + "low": 137.37, + "close": 139.07, + "volume": 131775303.0 + }, + { + "time": 1671580800, + "open": 141.0, + "high": 141.5, + "low": 135.91, + "close": 138.37, + "volume": 123736453.0 + }, + { + "time": 1671667200, + "open": 138.5, + "high": 139.48, + "low": 122.26, + "close": 126.85, + "volume": 177342265.0 + }, + { + "time": 1671753600, + "open": 127.07, + "high": 128.62, + "low": 121.02, + "close": 122.2, + "volume": 141626063.0 + }, + { + "time": 1672099200, + "open": 123.88, + "high": 125.0, + "low": 106.6, + "close": 106.69, + "volume": 175910731.0 + }, + { + "time": 1672185600, + "open": 107.84, + "high": 116.27, + "low": 104.22, + "close": 114.0, + "volume": 186100201.0 + }, + { + "time": 1672272000, + "open": 115.0, + "high": 123.57, + "low": 114.47, + "close": 122.84, + "volume": 189503721.0 + }, + { + "time": 1672358400, + "open": 122.46, + "high": 124.48, + "low": 118.51, + "close": 123.5, + "volume": 136672797.0 + }, + { + "time": 1672704000, + "open": 120.02, + "high": 121.9, + "low": 104.64, + "close": 107.0, + "volume": 191557167.0 + }, + { + "time": 1672790400, + "open": 108.88, + "high": 114.59, + "low": 107.28, + "close": 113.66, + "volume": 153862552.0 + }, + { + "time": 1672876800, + "open": 112.5, + "high": 114.87, + "low": 107.16, + "close": 110.35, + "volume": 133687246.0 + }, + { + "time": 1672963200, + "open": 107.69, + "high": 114.39, + "low": 101.2, + "close": 113.68, + "volume": 184006970.0 + }, + { + "time": 1673222400, + "open": 114.03, + "high": 123.52, + "low": 113.75, + "close": 119.55, + "volume": 162885492.0 + }, + { + "time": 1673308800, + "open": 120.6, + "high": 122.76, + "low": 115.0, + "close": 118.66, + "volume": 144503095.0 + }, + { + "time": 1673395200, + "open": 118.63, + "high": 125.95, + "low": 118.23, + "close": 123.19, + "volume": 158558924.0 + }, + { + "time": 1673481600, + "open": 123.22, + "high": 124.6, + "low": 117.0, + "close": 123.0, + "volume": 145833294.0 + }, + { + "time": 1673568000, + "open": 118.0, + "high": 123.0, + "low": 115.6, + "close": 122.03, + "volume": 157396482.0 + }, + { + "time": 1673913600, + "open": 122.0, + "high": 132.3, + "low": 120.6, + "close": 131.3, + "volume": 160937377.0 + }, + { + "time": 1674000000, + "open": 132.16, + "high": 137.5, + "low": 126.6, + "close": 126.72, + "volume": 169078250.0 + }, + { + "time": 1674086400, + "open": 127.47, + "high": 129.99, + "low": 124.3, + "close": 128.36, + "volume": 152223302.0 + }, + { + "time": 1674172800, + "open": 128.36, + "high": 133.85, + "low": 127.34, + "close": 133.85, + "volume": 123571951.0 + }, + { + "time": 1674432000, + "open": 133.87, + "high": 145.39, + "low": 133.5, + "close": 144.8, + "volume": 177044569.0 + }, + { + "time": 1674518400, + "open": 146.0, + "high": 146.5, + "low": 140.64, + "close": 140.97, + "volume": 140230986.0 + }, + { + "time": 1674604800, + "open": 142.47, + "high": 153.0, + "low": 138.07, + "close": 152.35, + "volume": 166419849.0 + }, + { + "time": 1674691200, + "open": 153.43, + "high": 161.42, + "low": 152.35, + "close": 158.95, + "volume": 200431932.0 + }, + { + "time": 1674777600, + "open": 159.89, + "high": 180.68, + "low": 158.0, + "close": 178.99, + "volume": 263157488.0 + }, + { + "time": 1675036800, + "open": 178.5, + "high": 180.0, + "low": 165.77, + "close": 165.77, + "volume": 196790466.0 + }, + { + "time": 1675123200, + "open": 165.89, + "high": 174.3, + "low": 162.78, + "close": 171.82, + "volume": 172099948.0 + }, + { + "time": 1675209600, + "open": 173.22, + "high": 184.84, + "low": 169.97, + "close": 184.33, + "volume": 187082506.0 + }, + { + "time": 1675296000, + "open": 185.11, + "high": 196.76, + "low": 182.61, + "close": 184.06, + "volume": 186940474.0 + }, + { + "time": 1675382400, + "open": 183.47, + "high": 199.0, + "low": 182.0, + "close": 192.77, + "volume": 199115506.0 + }, + { + "time": 1675641600, + "open": 192.91, + "high": 198.17, + "low": 189.1, + "close": 195.14, + "volume": 161365866.0 + }, + { + "time": 1675728000, + "open": 195.38, + "high": 197.8, + "low": 189.55, + "close": 196.19, + "volume": 162102866.0 + }, + { + "time": 1675814400, + "open": 196.2, + "high": 203.0, + "low": 194.31, + "close": 202.49, + "volume": 155395535.0 + }, + { + "time": 1675900800, + "open": 205.0, + "high": 214.0, + "low": 201.29, + "close": 204.0, + "volume": 181049895.0 + }, + { + "time": 1675987200, + "open": 206.01, + "high": 206.73, + "low": 192.92, + "close": 194.58, + "volume": 172846466.0 + }, + { + "time": 1676246400, + "open": 194.54, + "high": 199.5, + "low": 187.61, + "close": 195.62, + "volume": 147807152.0 + }, + { + "time": 1676332800, + "open": 195.5, + "high": 212.0, + "low": 189.44, + "close": 211.5, + "volume": 185629204.0 + }, + { + "time": 1676419200, + "open": 209.0, + "high": 216.21, + "low": 206.11, + "close": 215.91, + "volume": 152835862.0 + }, + { + "time": 1676505600, + "open": 216.6, + "high": 217.82, + "low": 196.74, + "close": 198.23, + "volume": 195125412.0 + }, + { + "time": 1676592000, + "open": 199.0, + "high": 209.77, + "low": 197.5, + "close": 209.0, + "volume": 183119234.0 + }, + { + "time": 1676937600, + "open": 205.95, + "high": 209.71, + "low": 195.8, + "close": 197.35, + "volume": 151695722.0 + }, + { + "time": 1677024000, + "open": 198.94, + "high": 203.0, + "low": 191.83, + "close": 202.4, + "volume": 167116119.0 + }, + { + "time": 1677110400, + "open": 203.45, + "high": 205.13, + "low": 196.33, + "close": 200.43, + "volume": 126002008.0 + }, + { + "time": 1677196800, + "open": 198.1, + "high": 201.33, + "low": 192.8, + "close": 196.48, + "volume": 121759004.0 + }, + { + "time": 1677456000, + "open": 198.0, + "high": 209.42, + "low": 195.68, + "close": 209.09, + "volume": 135811509.0 + }, + { + "time": 1677542400, + "open": 208.08, + "high": 212.6, + "low": 203.75, + "close": 204.7, + "volume": 129887964.0 + }, + { + "time": 1677628800, + "open": 207.66, + "high": 209.05, + "low": 189.0, + "close": 191.3, + "volume": 135485305.0 + }, + { + "time": 1677715200, + "open": 191.4, + "high": 193.75, + "low": 185.42, + "close": 190.85, + "volume": 154029003.0 + }, + { + "time": 1677801600, + "open": 191.96, + "high": 200.48, + "low": 190.8, + "close": 198.3, + "volume": 132018423.0 + }, + { + "time": 1678060800, + "open": 198.45, + "high": 199.6, + "low": 192.3, + "close": 193.03, + "volume": 111186290.0 + }, + { + "time": 1678147200, + "open": 194.11, + "high": 194.68, + "low": 186.1, + "close": 188.12, + "volume": 127160413.0 + }, + { + "time": 1678233600, + "open": 187.45, + "high": 188.2, + "low": 180.0, + "close": 180.62, + "volume": 130599496.0 + }, + { + "time": 1678320000, + "open": 179.28, + "high": 185.18, + "low": 169.65, + "close": 169.9, + "volume": 142783264.0 + }, + { + "time": 1678406400, + "open": 171.84, + "high": 178.29, + "low": 168.44, + "close": 174.47, + "volume": 163214327.0 + }, + { + "time": 1678665600, + "open": 178.0, + "high": 179.25, + "low": 164.0, + "close": 174.4, + "volume": 141125454.0 + }, + { + "time": 1678752000, + "open": 174.72, + "high": 184.49, + "low": 173.8, + "close": 184.15, + "volume": 124651497.0 + }, + { + "time": 1678838400, + "open": 184.5, + "high": 185.66, + "low": 176.03, + "close": 180.54, + "volume": 124829688.0 + }, + { + "time": 1678924800, + "open": 180.99, + "high": 185.81, + "low": 178.84, + "close": 183.86, + "volume": 103701677.0 + }, + { + "time": 1679011200, + "open": 184.14, + "high": 186.22, + "low": 177.33, + "close": 179.05, + "volume": 113188518.0 + }, + { + "time": 1679270400, + "open": 176.45, + "high": 186.44, + "low": 176.29, + "close": 183.31, + "volume": 111938751.0 + }, + { + "time": 1679356800, + "open": 184.56, + "high": 198.0, + "low": 183.42, + "close": 197.5, + "volume": 129806598.0 + }, + { + "time": 1679443200, + "open": 197.6, + "high": 200.66, + "low": 189.8, + "close": 192.36, + "volume": 127873104.0 + }, + { + "time": 1679529600, + "open": 194.3, + "high": 199.31, + "low": 188.65, + "close": 192.9, + "volume": 122801841.0 + }, + { + "time": 1679616000, + "open": 194.0, + "high": 194.28, + "low": 187.15, + "close": 190.23, + "volume": 100588036.0 + }, + { + "time": 1679875200, + "open": 190.23, + "high": 197.39, + "low": 189.6, + "close": 192.96, + "volume": 105008001.0 + }, + { + "time": 1679961600, + "open": 192.36, + "high": 193.95, + "low": 185.43, + "close": 189.65, + "volume": 85183670.0 + }, + { + "time": 1680048000, + "open": 191.27, + "high": 195.29, + "low": 189.44, + "close": 192.78, + "volume": 107927597.0 + }, + { + "time": 1680134400, + "open": 194.66, + "high": 197.33, + "low": 193.12, + "close": 195.35, + "volume": 94431494.0 + }, + { + "time": 1680220800, + "open": 195.35, + "high": 208.0, + "low": 195.15, + "close": 207.65, + "volume": 146669747.0 + }, + { + "time": 1680480000, + "open": 204.0, + "high": 206.8, + "low": 192.2, + "close": 193.2, + "volume": 141493469.0 + }, + { + "time": 1680566400, + "open": 194.51, + "high": 198.75, + "low": 190.32, + "close": 192.75, + "volume": 105533822.0 + }, + { + "time": 1680652800, + "open": 192.35, + "high": 194.0, + "low": 183.76, + "close": 184.19, + "volume": 112676921.0 + }, + { + "time": 1680739200, + "open": 184.81, + "high": 187.2, + "low": 179.83, + "close": 185.0, + "volume": 105769070.0 + }, + { + "time": 1681084800, + "open": 183.56, + "high": 185.9, + "low": 176.11, + "close": 184.4, + "volume": 123177931.0 + }, + { + "time": 1681171200, + "open": 184.51, + "high": 189.19, + "low": 184.15, + "close": 186.6, + "volume": 100721415.0 + }, + { + "time": 1681257600, + "open": 186.29, + "high": 191.59, + "low": 179.75, + "close": 179.9, + "volume": 131472591.0 + }, + { + "time": 1681344000, + "open": 181.25, + "high": 186.5, + "low": 180.33, + "close": 185.95, + "volume": 99401779.0 + }, + { + "time": 1681430400, + "open": 185.36, + "high": 186.57, + "low": 182.01, + "close": 185.0, + "volume": 84119837.0 + } + ] +} \ No newline at end of file diff --git a/docs/source/_static/pkg.js b/docs/source/_static/pkg.js new file mode 100644 index 0000000..39207a2 --- /dev/null +++ b/docs/source/_static/pkg.js @@ -0,0 +1,7 @@ +/*! + * @license + * TradingView Lightweight Charts™ v4.1.0-dev+202306102016 + * Copyright (c) 2023 TradingView, Inc. + * Licensed under Apache License 2.0 https://www.apache.org/licenses/LICENSE-2.0 + */ +!function(){"use strict";var t,i;function s(t,i){const s={0:[],1:[t.lineWidth,t.lineWidth],2:[2*t.lineWidth,2*t.lineWidth],3:[6*t.lineWidth,6*t.lineWidth],4:[t.lineWidth,4*t.lineWidth]}[i];t.setLineDash(s)}function e(t,i,s,e){t.beginPath();const h=t.lineWidth%2?.5:0;t.moveTo(s,i+h),t.lineTo(e,i+h),t.stroke()}function h(t,i){if(!t)throw new Error("Assertion failed"+(i?": "+i:""))}function n(t){if(void 0===t)throw new Error("Value is undefined");return t}function r(t){if(null===t)throw new Error("Value is null");return t}function o(t){return r(n(t))}!function(t){t[t.Simple=0]="Simple",t[t.WithSteps=1]="WithSteps",t[t.Curved=2]="Curved"}(t||(t={})),function(t){t[t.Solid=0]="Solid",t[t.Dotted=1]="Dotted",t[t.Dashed=2]="Dashed",t[t.LargeDashed=3]="LargeDashed",t[t.SparseDotted=4]="SparseDotted"}(i||(i={}));const l={khaki:"#f0e68c",azure:"#f0ffff",aliceblue:"#f0f8ff",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",gray:"#808080",green:"#008000",honeydew:"#f0fff0",floralwhite:"#fffaf0",lightblue:"#add8e6",lightcoral:"#f08080",lemonchiffon:"#fffacd",hotpink:"#ff69b4",lightyellow:"#ffffe0",greenyellow:"#adff2f",lightgoldenrodyellow:"#fafad2",limegreen:"#32cd32",linen:"#faf0e6",lightcyan:"#e0ffff",magenta:"#f0f",maroon:"#800000",olive:"#808000",orange:"#ffa500",oldlace:"#fdf5e6",mediumblue:"#0000cd",transparent:"#0000",lime:"#0f0",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",midnightblue:"#191970",orchid:"#da70d6",mediumorchid:"#ba55d3",mediumturquoise:"#48d1cc",orangered:"#ff4500",royalblue:"#4169e1",powderblue:"#b0e0e6",red:"#f00",coral:"#ff7f50",turquoise:"#40e0d0",white:"#fff",whitesmoke:"#f5f5f5",wheat:"#f5deb3",teal:"#008080",steelblue:"#4682b4",bisque:"#ffe4c4",aquamarine:"#7fffd4",aqua:"#0ff",sienna:"#a0522d",silver:"#c0c0c0",springgreen:"#00ff7f",antiquewhite:"#faebd7",burlywood:"#deb887",brown:"#a52a2a",beige:"#f5f5dc",chocolate:"#d2691e",chartreuse:"#7fff00",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cadetblue:"#5f9ea0",tomato:"#ff6347",fuchsia:"#f0f",blue:"#00f",salmon:"#fa8072",blanchedalmond:"#ffebcd",slateblue:"#6a5acd",slategray:"#708090",thistle:"#d8bfd8",tan:"#d2b48c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",blueviolet:"#8a2be2",black:"#000",darkmagenta:"#8b008b",darkslateblue:"#483d8b",darkkhaki:"#bdb76b",darkorchid:"#9932cc",darkorange:"#ff8c00",darkgreen:"#006400",darkred:"#8b0000",dodgerblue:"#1e90ff",darkslategray:"#2f4f4f",dimgray:"#696969",deepskyblue:"#00bfff",firebrick:"#b22222",forestgreen:"#228b22",indigo:"#4b0082",ivory:"#fffff0",lavenderblush:"#fff0f5",feldspar:"#d19275",indianred:"#cd5c5c",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightskyblue:"#87cefa",lightslategray:"#789",lightslateblue:"#8470ff",snow:"#fffafa",lightseagreen:"#20b2aa",lightsalmon:"#ffa07a",darksalmon:"#e9967a",darkviolet:"#9400d3",mediumpurple:"#9370d8",mediumaquamarine:"#66cdaa",skyblue:"#87ceeb",lavender:"#e6e6fa",lightsteelblue:"#b0c4de",mediumvioletred:"#c71585",mintcream:"#f5fffa",navajowhite:"#ffdead",navy:"#000080",olivedrab:"#6b8e23",palevioletred:"#d87093",violetred:"#d02090",yellow:"#ff0",yellowgreen:"#9acd32",lawngreen:"#7cfc00",pink:"#ffc0cb",paleturquoise:"#afeeee",palegoldenrod:"#eee8aa",darkolivegreen:"#556b2f",darkseagreen:"#8fbc8f",darkturquoise:"#00ced1",peachpuff:"#ffdab9",deeppink:"#ff1493",violet:"#ee82ee",palegreen:"#98fb98",mediumseagreen:"#3cb371",peru:"#cd853f",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",purple:"#800080",seagreen:"#2e8b57",seashell:"#fff5ee",papayawhip:"#ffefd5",mediumslateblue:"#7b68ee",plum:"#dda0dd",mediumspringgreen:"#00fa9a"};function a(t){return t<0?0:t>255?255:Math.round(t)||0}function u(t){return t<=0||t>0?t<0?0:t>1?1:Math.round(1e4*t)/1e4:0}const c=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,d=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,f=/^rgb\(\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*\)$/,p=/^rgba\(\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?[\d]{0,10}(?:\.\d+)?)\s*\)$/;function m(t){(t=t.toLowerCase())in l&&(t=l[t]);{const i=p.exec(t)||f.exec(t);if(i)return[a(parseInt(i[1],10)),a(parseInt(i[2],10)),a(parseInt(i[3],10)),u(i.length<5?1:parseFloat(i[4]))]}{const i=d.exec(t);if(i)return[a(parseInt(i[1],16)),a(parseInt(i[2],16)),a(parseInt(i[3],16)),1]}{const i=c.exec(t);if(i)return[a(17*parseInt(i[1],16)),a(17*parseInt(i[2],16)),a(17*parseInt(i[3],16)),1]}throw new Error(`Cannot parse color: ${t}`)}function v(t){const i=m(t);return{background:`rgb(${i[0]}, ${i[1]}, ${i[2]})`,foreground:(s=i,.199*s[0]+.687*s[1]+.114*s[2]>160?"black":"white")};var s}class b{constructor(){this._listeners=[]}subscribe(t,i,s){const e={callback:t,linkedObject:i,singleshot:!0===s};this._listeners.push(e)}unsubscribe(t){const i=this._listeners.findIndex((i=>t===i.callback));i>-1&&this._listeners.splice(i,1)}unsubscribeAll(t){this._listeners=this._listeners.filter((i=>i.linkedObject!==t))}fire(t,i,s){const e=[...this._listeners];this._listeners=this._listeners.filter((t=>!t.singleshot)),e.forEach((e=>e.callback(t,i,s)))}hasListeners(){return this._listeners.length>0}destroy(){this._listeners=[]}}function g(t,...i){for(const s of i)for(const i in s)void 0!==s[i]&&("object"!=typeof s[i]||void 0===t[i]?t[i]=s[i]:g(t[i],s[i]));return t}function w(t){return"number"==typeof t&&isFinite(t)}function M(t){return"number"==typeof t&&t%1==0}function S(t){return"string"==typeof t}function x(t){return"boolean"==typeof t}function _(t){const i=t;if(!i||"object"!=typeof i)return i;let s,e,h;for(e in s=Array.isArray(i)?[]:{},i)i.hasOwnProperty(e)&&(h=i[e],s[e]=h&&"object"==typeof h?_(h):h);return s}function y(t){return null!==t}function k(t){return null===t?void 0:t}const C="-apple-system, BlinkMacSystemFont, 'Trebuchet MS', Roboto, Ubuntu, sans-serif";function T(t,i,s){return void 0===i&&(i=C),`${s=void 0!==s?`${s} `:""}${t}px ${i}`}var P;!function(t){t[t.BorderSize=1]="BorderSize",t[t.TickLength=5]="TickLength"}(P||(P={}));class R{constructor(t){this._rendererOptions={borderSize:1,tickLength:5,fontSize:NaN,font:"",fontFamily:"",color:"",paneBackgroundColor:"",paddingBottom:0,paddingInner:0,paddingOuter:0,paddingTop:0,baselineOffset:0},this._chartModel=t}options(){const t=this._rendererOptions,i=this._fontSize(),s=this._fontFamily();return t.fontSize===i&&t.fontFamily===s||(t.fontSize=i,t.fontFamily=s,t.font=T(i,s),t.paddingTop=2.5/12*i,t.paddingBottom=t.paddingTop,t.paddingInner=i/12*t.tickLength,t.paddingOuter=i/12*t.tickLength,t.baselineOffset=0),t.color=this._textColor(),t.paneBackgroundColor=this._paneBackgroundColor(),this._rendererOptions}_textColor(){return this._chartModel.options().layout.textColor}_paneBackgroundColor(){return this._chartModel.backgroundTopColor()}_fontSize(){return this._chartModel.options().layout.fontSize}_fontFamily(){return this._chartModel.options().layout.fontFamily}}class D{constructor(){this._renderers=[]}setRenderers(t){this._renderers=t}draw(t,i,s){this._renderers.forEach((e=>{e.draw(t,i,s)}))}}class A{draw(t,i,s){t.useMediaCoordinateSpace((t=>this._drawImpl(t,i,s)))}drawBackground(t,i,s){t.useMediaCoordinateSpace((t=>this._drawBackgroundImpl(t,i,s)))}_drawBackgroundImpl(t,i,s){}}class E extends A{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}_drawImpl({context:t}){if(null===this._data||null===this._data.visibleRange)return;const i=this._data.visibleRange,s=this._data,e=e=>{t.beginPath();for(let h=i.to-1;h>=i.from;--h){const i=s.items[h];t.moveTo(i.x,i.y),t.arc(i.x,i.y,e,0,2*Math.PI)}t.fill()};s.lineWidth>0&&(t.fillStyle=s.backColor,e(s.radius+s.lineWidth)),t.fillStyle=s.lineColor,e(s.radius)}}function O(){return{items:[{x:0,y:0,time:0,price:0}],lineColor:"",backColor:"",radius:0,lineWidth:0,visibleRange:null}}const B={from:0,to:1};class L{constructor(t,i){this._compositeRenderer=new D,this._markersRenderers=[],this._markersData=[],this._invalidated=!0,this._chartModel=t,this._crosshair=i,this._compositeRenderer.setRenderers(this._markersRenderers)}update(t){const i=this._chartModel.serieses();i.length!==this._markersRenderers.length&&(this._markersData=i.map(O),this._markersRenderers=this._markersData.map((t=>{const i=new E;return i.setData(t),i})),this._compositeRenderer.setRenderers(this._markersRenderers)),this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._compositeRenderer}_updateImpl(){const t=this._chartModel.serieses(),i=this._crosshair.appliedIndex(),s=this._chartModel.timeScale();t.forEach(((t,e)=>{var h;const n=this._markersData[e],o=t.markerDataAtIndex(i);if(null===o||!t.visible())return void(n.visibleRange=null);const l=r(t.firstValue());n.lineColor=o.backgroundColor,n.radius=o.radius,n.lineWidth=o.borderWidth,n.items[0].price=o.price,n.items[0].y=t.priceScale().priceToCoordinate(o.price,l.value),n.backColor=null!==(h=o.borderColor)&&void 0!==h?h:this._chartModel.backgroundColorAtYPercentFromTop(n.items[0].y/t.priceScale().height()),n.items[0].time=i,n.items[0].x=s.indexToCoordinate(i),n.visibleRange=B}))}}class z{draw(t,i,s){t.useBitmapCoordinateSpace((t=>this._drawImpl(t,i,s)))}}class I extends z{constructor(t){super(),this._data=t}_drawImpl({context:t,bitmapSize:i,horizontalPixelRatio:h,verticalPixelRatio:n}){if(null===this._data)return;const r=this._data.vertLine.visible,o=this._data.horzLine.visible;if(!r&&!o)return;const l=Math.round(this._data.x*h),a=Math.round(this._data.y*n);t.lineCap="butt",r&&l>=0&&(t.lineWidth=Math.floor(this._data.vertLine.lineWidth*h),t.strokeStyle=this._data.vertLine.color,t.fillStyle=this._data.vertLine.color,s(t,this._data.vertLine.lineStyle),function(t,i,s,e){t.beginPath();const h=t.lineWidth%2?.5:0;t.moveTo(i+h,s),t.lineTo(i+h,e),t.stroke()}(t,l,0,i.height)),o&&a>=0&&(t.lineWidth=Math.floor(this._data.horzLine.lineWidth*n),t.strokeStyle=this._data.horzLine.color,t.fillStyle=this._data.horzLine.color,s(t,this._data.horzLine.lineStyle),e(t,a,0,i.width))}}class N{constructor(t){this._invalidated=!0,this._rendererData={vertLine:{lineWidth:1,lineStyle:0,color:"",visible:!1},horzLine:{lineWidth:1,lineStyle:0,color:"",visible:!1},x:0,y:0},this._renderer=new I(this._rendererData),this._source=t}update(){this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._renderer}_updateImpl(){const t=this._source.visible(),i=r(this._source.pane()),s=i.model().options().crosshair,e=this._rendererData;e.horzLine.visible=t&&this._source.horzLineVisible(i),e.vertLine.visible=t&&this._source.vertLineVisible(),e.horzLine.lineWidth=s.horzLine.width,e.horzLine.lineStyle=s.horzLine.style,e.horzLine.color=s.horzLine.color,e.vertLine.lineWidth=s.vertLine.width,e.vertLine.lineStyle=s.vertLine.style,e.vertLine.color=s.vertLine.color,e.x=this._source.appliedX(),e.y=this._source.appliedY()}}function V(t,i,s,e,h,n){t.fillRect(i+n,s,e-2*n,n),t.fillRect(i+n,s+h-n,e-2*n,n),t.fillRect(i,s,n,h),t.fillRect(i+e-n,s,n,h)}function F(t,i,s,e,h,n){t.save(),t.globalCompositeOperation="copy",t.fillStyle=n,t.fillRect(i,s,e,h),t.restore()}function W(t,i){return Array.isArray(t)?t.map((t=>0===t?t:t+i)):t+i}function j(t,i,s,e,h,n){let r,o,l,a;if(Array.isArray(n))if(2===n.length){const t=Math.max(0,n[0]),i=Math.max(0,n[1]);r=t,o=t,l=i,a=i}else{if(4!==n.length)throw new Error("Wrong border radius - it should be like css border radius");r=Math.max(0,n[0]),o=Math.max(0,n[1]),l=Math.max(0,n[2]),a=Math.max(0,n[3])}else{const t=Math.max(0,n);r=t,o=t,l=t,a=t}t.beginPath(),t.moveTo(i+r,s),t.lineTo(i+e-o,s),0!==o&&t.arcTo(i+e,s,i+e,s+o,o),t.lineTo(i+e,s+h-l),0!==l&&t.arcTo(i+e,s+h,i+e-l,s+h,l),t.lineTo(i+a,s+h),0!==a&&t.arcTo(i,s+h,i,s+h-a,a),t.lineTo(i,s+r),0!==r&&t.arcTo(i,s,i+r,s,r)}function H(t,i,s,e,h,n,r=0,o=0,l=""){if(t.save(),!r||!l||l===n)return j(t,i,s,e,h,o),t.fillStyle=n,t.fill(),void t.restore();const a=r/2;if("transparent"!==n){j(t,i+r,s+r,e-2*r,h-2*r,W(o,-r)),t.fillStyle=n,t.fill()}if("transparent"!==l){j(t,i+a,s+a,e-r,h-r,W(o,-a)),t.lineWidth=r,t.strokeStyle=l,t.closePath(),t.stroke()}t.restore()}function $(t,i,s,e,h,n,r){t.save(),t.globalCompositeOperation="copy";const o=t.createLinearGradient(0,0,0,h);o.addColorStop(0,n),o.addColorStop(1,r),t.fillStyle=o,t.fillRect(i,s,e,h),t.restore()}class U{constructor(t,i){this.setData(t,i)}setData(t,i){this._data=t,this._commonData=i}height(t,i){return this._data.visible?t.fontSize+t.paddingTop+t.paddingBottom:0}draw(t,i,s,e){if(!this._data.visible||0===this._data.text.length)return;const h=this._data.color,n=this._commonData.background,r=t.useBitmapCoordinateSpace((t=>{const r=t.context;r.font=i.font;const o=this._calculateGeometry(t,i,s,e),l=o.bitmap,a=(t,i)=>{o.alignRight?H(r,l.xOutside,l.yTop,l.totalWidth,l.totalHeight,t,l.horzBorder,[l.radius,0,0,l.radius],i):H(r,l.xInside,l.yTop,l.totalWidth,l.totalHeight,t,l.horzBorder,[0,l.radius,l.radius,0],i)};return a(n,"transparent"),this._data.tickVisible&&(r.fillStyle=h,r.fillRect(l.xInside,l.yMid,l.xTick-l.xInside,l.tickHeight)),a("transparent",n),this._data.borderVisible&&(r.fillStyle=i.paneBackgroundColor,r.fillRect(o.alignRight?l.right-l.horzBorder:0,l.yTop,l.horzBorder,l.yBottom-l.yTop)),o}));t.useMediaCoordinateSpace((({context:t})=>{const s=r.media;t.font=i.font,t.textAlign=r.alignRight?"right":"left",t.textBaseline="middle",t.fillStyle=h,t.fillText(this._data.text,s.xText,(s.yTop+s.yBottom)/2+s.textMidCorrection)}))}_calculateGeometry(t,i,s,e){var h;const{context:n,bitmapSize:r,mediaSize:o,horizontalPixelRatio:l,verticalPixelRatio:a}=t,u=this._data.tickVisible||!this._data.moveTextToInvisibleTick?i.tickLength:0,c=this._data.separatorVisible?i.borderSize:0,d=i.paddingTop+this._commonData.additionalPaddingTop,f=i.paddingBottom+this._commonData.additionalPaddingBottom,p=i.paddingInner,m=i.paddingOuter,v=this._data.text,b=i.fontSize,g=s.yMidCorrection(n,v),w=Math.ceil(s.measureText(n,v)),M=b+d+f,S=i.borderSize+p+m+w+u,x=Math.max(1,Math.floor(a));let _=Math.round(M*a);_%2!=x%2&&(_+=1);const y=c>0?Math.max(1,Math.floor(c*l)):0,k=Math.round(S*l),C=Math.round(u*l),T=null!==(h=this._commonData.fixedCoordinate)&&void 0!==h?h:this._commonData.coordinate,P=Math.round(T*a)-Math.floor(.5*a),R=Math.floor(P+x/2-_/2),D=R+_,A="right"===e,E=A?o.width-c:c,O=A?r.width-y:y;let B,L,z;return A?(B=O-k,L=O-C,z=E-u-p-c):(B=O+k,L=O+C,z=E+u+p),{alignRight:A,bitmap:{yTop:R,yMid:P,yBottom:D,totalWidth:k,totalHeight:_,radius:2*l,horzBorder:y,xOutside:B,xInside:O,xTick:L,tickHeight:x,right:r.width},media:{yTop:R/a,yBottom:D/a,xText:z,textMidCorrection:g}}}}class q{constructor(t){this._commonRendererData={coordinate:0,background:"#000",additionalPaddingBottom:0,additionalPaddingTop:0},this._axisRendererData={text:"",visible:!1,tickVisible:!0,moveTextToInvisibleTick:!1,borderColor:"",color:"#FFF",borderVisible:!1,separatorVisible:!1},this._paneRendererData={text:"",visible:!1,tickVisible:!1,moveTextToInvisibleTick:!0,borderColor:"",color:"#FFF",borderVisible:!0,separatorVisible:!0},this._invalidated=!0,this._axisRenderer=new(t||U)(this._axisRendererData,this._commonRendererData),this._paneRenderer=new(t||U)(this._paneRendererData,this._commonRendererData)}text(){return this._updateRendererDataIfNeeded(),this._axisRendererData.text}coordinate(){return this._updateRendererDataIfNeeded(),this._commonRendererData.coordinate}update(){this._invalidated=!0}height(t,i=!1){return Math.max(this._axisRenderer.height(t,i),this._paneRenderer.height(t,i))}getFixedCoordinate(){return this._commonRendererData.fixedCoordinate||0}setFixedCoordinate(t){this._commonRendererData.fixedCoordinate=t}isVisible(){return this._updateRendererDataIfNeeded(),this._axisRendererData.visible||this._paneRendererData.visible}isAxisLabelVisible(){return this._updateRendererDataIfNeeded(),this._axisRendererData.visible}renderer(t){return this._updateRendererDataIfNeeded(),this._axisRendererData.tickVisible=this._axisRendererData.tickVisible&&t.options().ticksVisible,this._paneRendererData.tickVisible=this._paneRendererData.tickVisible&&t.options().ticksVisible,this._axisRenderer.setData(this._axisRendererData,this._commonRendererData),this._paneRenderer.setData(this._paneRendererData,this._commonRendererData),this._axisRenderer}paneRenderer(){return this._updateRendererDataIfNeeded(),this._axisRenderer.setData(this._axisRendererData,this._commonRendererData),this._paneRenderer.setData(this._paneRendererData,this._commonRendererData),this._paneRenderer}_updateRendererDataIfNeeded(){this._invalidated&&(this._axisRendererData.tickVisible=!0,this._paneRendererData.tickVisible=!1,this._updateRendererData(this._axisRendererData,this._paneRendererData,this._commonRendererData))}}class Y extends q{constructor(t,i,s){super(),this._source=t,this._priceScale=i,this._valueProvider=s}_updateRendererData(t,i,s){t.visible=!1;const e=this._source.options().horzLine;if(!e.labelVisible)return;const h=this._priceScale.firstValue();if(!this._source.visible()||this._priceScale.isEmpty()||null===h)return;const n=v(e.labelBackgroundColor);s.background=n.background,t.color=n.foreground;const r=2/12*this._priceScale.fontSize();s.additionalPaddingTop=r,s.additionalPaddingBottom=r;const o=this._valueProvider(this._priceScale);s.coordinate=o.coordinate,t.text=this._priceScale.formatPrice(o.price,h),t.visible=!0}}const X=/[1-9]/g;class Z{constructor(){this._data=null}setData(t){this._data=t}draw(t,i){if(null===this._data||!1===this._data.visible||0===this._data.text.length)return;const s=t.useMediaCoordinateSpace((({context:t})=>(t.font=i.font,Math.round(i.widthCache.measureText(t,r(this._data).text,X)))));if(s<=0)return;const e=i.paddingHorizontal,h=s+2*e,n=h/2,o=this._data.width;let l=this._data.coordinate,a=Math.floor(l-n)+.5;a<0?(l+=Math.abs(0-a),a=Math.floor(l-n)+.5):a+h>o&&(l-=Math.abs(o-(a+h)),a=Math.floor(l-n)+.5);const u=a+h,c=Math.ceil(0+i.borderSize+i.tickLength+i.paddingTop+i.fontSize+i.paddingBottom);t.useBitmapCoordinateSpace((({context:t,horizontalPixelRatio:s,verticalPixelRatio:e})=>{const h=r(this._data);t.fillStyle=h.background;const n=Math.round(a*s),o=Math.round(0*e),l=Math.round(u*s),d=Math.round(c*e),f=Math.round(2*s);if(t.beginPath(),t.moveTo(n,o),t.lineTo(n,d-f),t.arcTo(n,d,n+f,d,f),t.lineTo(l-f,d),t.arcTo(l,d,l,d-f,f),t.lineTo(l,o),t.fill(),h.tickVisible){const n=Math.round(h.coordinate*s),r=o,l=Math.round((r+i.tickLength)*e);t.fillStyle=h.color;const a=Math.max(1,Math.floor(s)),u=Math.floor(.5*s);t.fillRect(n-u,r,a,l-r)}})),t.useMediaCoordinateSpace((({context:t})=>{const s=r(this._data),h=0+i.borderSize+i.tickLength+i.paddingTop+i.fontSize/2;t.font=i.font,t.textAlign="left",t.textBaseline="middle",t.fillStyle=s.color;const n=i.widthCache.yMidCorrection(t,"Apr0");t.translate(a+e,h+n),t.fillText(s.text,0,0)}))}}class K{constructor(t,i,s){this._invalidated=!0,this._renderer=new Z,this._rendererData={visible:!1,background:"#4c525e",color:"white",text:"",width:0,coordinate:NaN,tickVisible:!0},this._crosshair=t,this._model=i,this._valueProvider=s}update(){this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._renderer.setData(this._rendererData),this._renderer}_updateImpl(){const t=this._rendererData;t.visible=!1;const i=this._crosshair.options().vertLine;if(!i.labelVisible)return;const s=this._model.timeScale();if(s.isEmpty())return;t.width=s.width();const e=this._valueProvider();if(null===e)return;t.coordinate=e.coordinate;const h=s.indexToTimeScalePoint(this._crosshair.appliedIndex());t.text=s.formatDateTime(r(h)),t.visible=!0;const n=v(i.labelBackgroundColor);t.background=n.background,t.color=n.foreground,t.tickVisible=s.options().ticksVisible}}class G{constructor(){this._priceScale=null,this._zorder=0}zorder(){return this._zorder}setZorder(t){this._zorder=t}priceScale(){return this._priceScale}setPriceScale(t){this._priceScale=t}labelPaneViews(t){return[]}timeAxisViews(){return[]}visible(){return!0}}var J,Q,tt,it;!function(t){t[t.Normal=0]="Normal",t[t.Magnet=1]="Magnet"}(J||(J={}));class st extends G{constructor(t,i){super(),this._pane=null,this._price=NaN,this._index=0,this._visible=!0,this._priceAxisViews=new Map,this._subscribed=!1,this._x=NaN,this._y=NaN,this._originX=NaN,this._originY=NaN,this._model=t,this._options=i,this._markersPaneView=new L(t,this);this._currentPosPriceProvider=((t,i)=>s=>{const e=i(),h=t();if(s===r(this._pane).defaultPriceScale())return{price:h,coordinate:e};{const t=r(s.firstValue());return{price:s.coordinateToPrice(e,t),coordinate:e}}})((()=>this._price),(()=>this._y));const s=((t,i)=>()=>{const s=this._model.timeScale().indexToTime(t()),e=i();return s&&Number.isFinite(e)?{time:s,coordinate:e}:null})((()=>this._index),(()=>this.appliedX()));this._timeAxisView=new K(this,t,s),this._paneView=new N(this)}options(){return this._options}saveOriginCoord(t,i){this._originX=t,this._originY=i}clearOriginCoord(){this._originX=NaN,this._originY=NaN}originCoordX(){return this._originX}originCoordY(){return this._originY}setPosition(t,i,s){this._subscribed||(this._subscribed=!0),this._visible=!0,this._tryToUpdateViews(t,i,s)}appliedIndex(){return this._index}appliedX(){return this._x}appliedY(){return this._y}visible(){return this._visible}clearPosition(){this._visible=!1,this._setIndexToLastSeriesBarIndex(),this._price=NaN,this._x=NaN,this._y=NaN,this._pane=null,this.clearOriginCoord()}paneViews(t){return null!==this._pane?[this._paneView,this._markersPaneView]:[]}horzLineVisible(t){return t===this._pane&&this._options.horzLine.visible}vertLineVisible(){return this._options.vertLine.visible}priceAxisViews(t,i){this._visible&&this._pane===t||this._priceAxisViews.clear();const s=[];return this._pane===t&&s.push(this._createPriceAxisViewOnDemand(this._priceAxisViews,i,this._currentPosPriceProvider)),s}timeAxisViews(){return this._visible?[this._timeAxisView]:[]}pane(){return this._pane}updateAllViews(){this._paneView.update(),this._priceAxisViews.forEach((t=>t.update())),this._timeAxisView.update(),this._markersPaneView.update()}_priceScaleByPane(t){return t&&!t.defaultPriceScale().isEmpty()?t.defaultPriceScale():null}_tryToUpdateViews(t,i,s){this._tryToUpdateData(t,i,s)&&this.updateAllViews()}_tryToUpdateData(t,i,s){const e=this._x,h=this._y,n=this._price,r=this._index,o=this._pane,l=this._priceScaleByPane(s);this._index=t,this._x=isNaN(t)?NaN:this._model.timeScale().indexToCoordinate(t),this._pane=s;const a=null!==l?l.firstValue():null;return null!==l&&null!==a?(this._price=i,this._y=l.priceToCoordinate(i,a)):(this._price=NaN,this._y=NaN),e!==this._x||h!==this._y||r!==this._index||n!==this._price||o!==this._pane}_setIndexToLastSeriesBarIndex(){const t=this._model.serieses().map((t=>t.bars().lastIndex())).filter(y),i=0===t.length?null:Math.max(...t);this._index=null!==i?i:NaN}_createPriceAxisViewOnDemand(t,i,s){let e=t.get(i);return void 0===e&&(e=new Y(this,i,s),t.set(i,e)),e}}function et(t){return"left"===t||"right"===t}!function(t){t.Left="left",t.Right="right"}(Q||(Q={})),function(t){t[t.None=0]="None",t[t.Cursor=1]="Cursor",t[t.Light=2]="Light",t[t.Full=3]="Full"}(tt||(tt={})),function(t){t[t.FitContent=0]="FitContent",t[t.ApplyRange=1]="ApplyRange",t[t.ApplyBarSpacing=2]="ApplyBarSpacing",t[t.ApplyRightOffset=3]="ApplyRightOffset",t[t.Reset=4]="Reset",t[t.Animation=5]="Animation",t[t.StopAnimation=6]="StopAnimation"}(it||(it={}));class ht{constructor(t){this._invalidatedPanes=new Map,this._timeScaleInvalidations=[],this._globalLevel=t}invalidatePane(t,i){const s=function(t,i){return void 0===t?i:{level:Math.max(t.level,i.level),autoScale:t.autoScale||i.autoScale}}(this._invalidatedPanes.get(t),i);this._invalidatedPanes.set(t,s)}fullInvalidation(){return this._globalLevel}invalidateForPane(t){const i=this._invalidatedPanes.get(t);return void 0===i?{level:this._globalLevel}:{level:Math.max(this._globalLevel,i.level),autoScale:i.autoScale}}setFitContent(){this.stopTimeScaleAnimation(),this._timeScaleInvalidations=[{type:0}]}applyRange(t){this.stopTimeScaleAnimation(),this._timeScaleInvalidations=[{type:1,value:t}]}setTimeScaleAnimation(t){this._removeTimeScaleAnimation(),this._timeScaleInvalidations.push({type:5,value:t})}stopTimeScaleAnimation(){this._removeTimeScaleAnimation(),this._timeScaleInvalidations.push({type:6})}resetTimeScale(){this.stopTimeScaleAnimation(),this._timeScaleInvalidations=[{type:4}]}setBarSpacing(t){this.stopTimeScaleAnimation(),this._timeScaleInvalidations.push({type:2,value:t})}setRightOffset(t){this.stopTimeScaleAnimation(),this._timeScaleInvalidations.push({type:3,value:t})}timeScaleInvalidations(){return this._timeScaleInvalidations}merge(t){for(const i of t._timeScaleInvalidations)this._applyTimeScaleInvalidation(i);this._globalLevel=Math.max(this._globalLevel,t._globalLevel),t._invalidatedPanes.forEach(((t,i)=>{this.invalidatePane(i,t)}))}static light(){return new ht(2)}static full(){return new ht(3)}_applyTimeScaleInvalidation(t){switch(t.type){case 0:this.setFitContent();break;case 1:this.applyRange(t.value);break;case 2:this.setBarSpacing(t.value);break;case 3:this.setRightOffset(t.value);break;case 4:this.resetTimeScale();break;case 5:this.setTimeScaleAnimation(t.value);break;case 6:this._removeTimeScaleAnimation()}}_removeTimeScaleAnimation(){const t=this._timeScaleInvalidations.findIndex((t=>5===t.type));-1!==t&&this._timeScaleInvalidations.splice(t,1)}}const nt=".";function rt(t,i){if(!w(t))return"n/a";if(!M(i))throw new TypeError("invalid length");if(i<0||i>16)throw new TypeError("invalid length");if(0===i)return t.toString();return("0000000000000000"+t.toString()).slice(-i)}class ot{constructor(t,i){if(i||(i=1),w(t)&&M(t)||(t=100),t<0)throw new TypeError("invalid base");this._priceScale=t,this._minMove=i,this._calculateDecimal()}format(t){const i=t<0?"−":"";return t=Math.abs(t),i+this._formatAsDecimal(t)}_calculateDecimal(){if(this._fractionalLength=0,this._priceScale>0&&this._minMove>0){let t=this._priceScale;for(;t>1;)t/=10,this._fractionalLength++}}_formatAsDecimal(t){const i=this._priceScale/this._minMove;let s=Math.floor(t),e="";const h=void 0!==this._fractionalLength?this._fractionalLength:NaN;if(i>1){let n=+(Math.round(t*i)-s*i).toFixed(this._fractionalLength);n>=i&&(n-=i,s+=1),e=nt+rt(+n.toFixed(this._fractionalLength)*this._minMove,h)}else s=Math.round(s*i)/i,h>0&&(e=nt+rt(0,h));return s.toFixed(0)+e}}class lt extends ot{constructor(t=100){super(t)}format(t){return`${super.format(t)}%`}}class at{constructor(t){this._precision=t}format(t){let i="";return t<0&&(i="-",t=-t),t<995?i+this._formatNumber(t):t<999995?i+this._formatNumber(t/1e3)+"K":t<999999995?(t=1e3*Math.round(t/1e3),i+this._formatNumber(t/1e6)+"M"):(t=1e6*Math.round(t/1e6),i+this._formatNumber(t/1e9)+"B")}_formatNumber(t){let i;const s=Math.pow(10,this._precision);return i=(t=Math.round(t*s)/s)>=1e-15&&t<1?t.toFixed(this._precision).replace(/\.?0+$/,""):String(t),i.replace(/(\.[1-9]*)0+$/,((t,i)=>i))}}function ut(t,i,s,e,h,n,r){if(0===i.length||e.from>=i.length||e.to<=0)return;const o=t.context,l=i[e.from];let a=n(t,l),u=l;if(e.to-e.from<2){const t=h/2;o.beginPath();const i={x:l.x-t,y:l.y},s={x:l.x+t,y:l.y};return o.moveTo(i.x,i.y),o.lineTo(s.x,s.y),void r(o,a,i,s)}const c=(t,i)=>{r(o,a,u,i),o.beginPath(),a=t,u=i};let d=u;o.beginPath(),o.moveTo(l.x,l.y);for(let h=e.from+1;h>1,r=e+h;s(t[r],i)?(e=r+1,n-=h+1):n=h}return e}function xt(t,i,s,e=0,h=t.length){let n=h-e;for(;0>1,r=e+h;s(i,t[r])?n=h:(e=r+1,n-=h+1)}return e}var _t,yt;function kt(t,i){return t.time0&&n=e&&(o=n-1),r>0&&rObject.assign(Object.assign({},t),this._series.barColorer().barStyle(t.time))))}_clearVisibleRange(){this._itemsVisibleRange=null}_makeValid(){this._dataInvalidated&&(this._fillRawPoints(),this._dataInvalidated=!1),this._optionsInvalidated&&(this._updateOptions(),this._optionsInvalidated=!1),this._invalidated&&(this._makeValidImpl(),this._invalidated=!1)}_makeValidImpl(){const t=this._series.priceScale(),i=this._model.timeScale();if(this._clearVisibleRange(),i.isEmpty()||t.isEmpty())return;const s=i.visibleStrictRange();if(null===s)return;if(0===this._series.bars().size())return;const e=this._series.firstValue();null!==e&&(this._itemsVisibleRange=Tt(this._items,s,this._extendedVisibleRange),this._convertToCoordinates(t,i,e.value),this._prepareRendererData())}}class Rt extends Pt{constructor(t,i){super(t,i,!0)}_convertToCoordinates(t,i,s){i.indexesToCoordinates(this._items,k(this._itemsVisibleRange)),t.pointsArrayToCoordinates(this._items,s,k(this._itemsVisibleRange))}_createRawItemBase(t,i){return{time:t,price:i,x:NaN,y:NaN}}_fillRawPoints(){const t=this._series.barColorer();this._items=this._series.bars().rows().map((i=>{const s=i.value[3];return this._createRawItem(i.index,s,t)}))}}class Dt extends Rt{constructor(t,i){super(t,i),this._renderer=new D,this._areaRenderer=new bt,this._lineRenderer=new Mt,this._renderer.setRenderers([this._areaRenderer,this._lineRenderer])}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options();this._areaRenderer.setData({lineType:t.lineType,items:this._items,lineStyle:t.lineStyle,lineWidth:t.lineWidth,baseLevelCoordinate:null,invertFilledArea:t.invertFilledArea,visibleRange:this._itemsVisibleRange,barWidth:this._model.timeScale().barSpacing()}),this._lineRenderer.setData({lineType:t.lineType,items:this._items,lineStyle:t.lineStyle,lineWidth:t.lineWidth,visibleRange:this._itemsVisibleRange,barWidth:this._model.timeScale().barSpacing()})}}class At extends z{constructor(){super(...arguments),this._data=null,this._barWidth=0,this._barLineWidth=0}setData(t){this._data=t}_drawImpl({context:t,horizontalPixelRatio:i,verticalPixelRatio:s}){if(null===this._data||0===this._data.bars.length||null===this._data.visibleRange)return;if(this._barWidth=this._calcBarWidth(i),this._barWidth>=2){Math.max(1,Math.floor(i))%2!=this._barWidth%2&&this._barWidth--}this._barLineWidth=this._data.thinBars?Math.min(this._barWidth,Math.floor(i)):this._barWidth;let e=null;const h=this._barLineWidth<=this._barWidth&&this._data.barSpacing>=Math.floor(1.5*i);for(let n=this._data.visibleRange.from;np+v-1&&(h=p+v-1,e=h-u+1),t.fillRect(i,e,a-i,h-e+1)}const i=l+b;let e=Math.max(p,Math.round(r.closeY*s)-o),h=e+u-1;h>p+v-1&&(h=p+v-1,e=h-u+1),t.fillRect(c+1,e,i-c,h-e+1)}}}_calcBarWidth(t){const i=Math.floor(t);return Math.max(i,Math.floor(function(t,i){return Math.floor(.3*t*i)}(r(this._data).barSpacing,t)))}}class Et extends Pt{constructor(t,i){super(t,i,!1)}_convertToCoordinates(t,i,s){i.indexesToCoordinates(this._items,k(this._itemsVisibleRange)),t.barPricesToCoordinates(this._items,s,k(this._itemsVisibleRange))}_createDefaultItem(t,i,s){return{time:t,open:i.value[0],high:i.value[1],low:i.value[2],close:i.value[3],x:NaN,openY:NaN,highY:NaN,lowY:NaN,closeY:NaN}}_fillRawPoints(){const t=this._series.barColorer();this._items=this._series.bars().rows().map((i=>this._createRawItem(i.index,i,t)))}}class Ot extends Et{constructor(){super(...arguments),this._renderer=new At}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createDefaultItem(t,i,s)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options();this._renderer.setData({bars:this._items,barSpacing:this._model.timeScale().barSpacing(),openVisible:t.openVisible,thinBars:t.thinBars,visibleRange:this._itemsVisibleRange})}}function Bt(t,i,s){return Math.min(Math.max(t,i),s)}function Lt(t,i,s){return i-t<=s}function zt(t){return t<=0?NaN:Math.log(t)/Math.log(10)}function It(t){const i=Math.ceil(t);return i%2==0?i-1:i}class Nt extends vt{constructor(){super(...arguments),this._fillCache=null}_fillStyle(t,i){var s;const{context:e,mediaSize:h}=t,n=this._data,{topFillColor1:r,topFillColor2:o,bottomFillColor1:l,bottomFillColor2:a}=i,u=null!==(s=n.baseLevelCoordinate)&&void 0!==s?s:h.height,c=h.height;if(null!==this._fillCache&&this._fillCache.topFillColor1===r&&this._fillCache.topFillColor2===o&&this._fillCache.bottomFillColor1===l&&this._fillCache.bottomFillColor2===a&&this._fillCache.baseLevelCoordinate===u&&this._fillCache.bottom===c)return this._fillCache.fillStyle;const d=e.createLinearGradient(0,0,0,c),f=Bt(u/c,0,1);return d.addColorStop(0,r),d.addColorStop(f,o),d.addColorStop(f,l),d.addColorStop(1,a),this._fillCache={topFillColor1:r,topFillColor2:o,bottomFillColor1:l,bottomFillColor2:a,fillStyle:d,baseLevelCoordinate:u,bottom:c},d}}class Vt extends wt{constructor(){super(...arguments),this._strokeCache=null}_strokeStyle(t,i){const{context:s,mediaSize:e}=t,h=this._data,{topLineColor:n,bottomLineColor:r}=i,{baseLevelCoordinate:o}=h,l=e.height;if(null!==this._strokeCache&&this._strokeCache.topLineColor===n&&this._strokeCache.bottomLineColor===r&&this._strokeCache.baseLevelCoordinate===o&&this._strokeCache.bottom===l)return this._strokeCache.strokeStyle;const a=s.createLinearGradient(0,0,0,l),u=Bt(o/l,0,1);return a.addColorStop(0,n),a.addColorStop(u,n),a.addColorStop(u,r),a.addColorStop(1,r),this._strokeCache={topLineColor:n,bottomLineColor:r,strokeStyle:a,baseLevelCoordinate:o,bottom:l},a}}class Ft extends Rt{constructor(t,i){super(t,i),this._renderer=new D,this._baselineAreaRenderer=new Nt,this._baselineLineRenderer=new Vt,this._renderer.setRenderers([this._baselineAreaRenderer,this._baselineLineRenderer])}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t=this._series.firstValue();if(null===t)return;const i=this._series.options(),s=this._series.priceScale().priceToCoordinate(i.baseValue.price,t.value),e=this._model.timeScale().barSpacing();this._baselineAreaRenderer.setData({items:this._items,lineWidth:i.lineWidth,lineStyle:i.lineStyle,lineType:i.lineType,baseLevelCoordinate:s,invertFilledArea:!1,visibleRange:this._itemsVisibleRange,barWidth:e}),this._baselineLineRenderer.setData({items:this._items,lineWidth:i.lineWidth,lineStyle:i.lineStyle,lineType:i.lineType,baseLevelCoordinate:s,visibleRange:this._itemsVisibleRange,barWidth:e})}}!function(t){t[t.BarBorderWidth=1]="BarBorderWidth"}(yt||(yt={}));class Wt extends z{constructor(){super(...arguments),this._data=null,this._barWidth=0}setData(t){this._data=t}_drawImpl(t){if(null===this._data||0===this._data.bars.length||null===this._data.visibleRange)return;const{horizontalPixelRatio:i}=t;if(this._barWidth=function(t,i){if(t>=2.5&&t<=4)return Math.floor(3*i);const s=1-.2*Math.atan(Math.max(4,t)-4)/(.5*Math.PI),e=Math.floor(t*s*i),h=Math.floor(t*i),n=Math.min(e,h);return Math.max(Math.floor(i),n)}(this._data.barSpacing,i),this._barWidth>=2){Math.floor(i)%2!=this._barWidth%2&&this._barWidth--}const s=this._data.bars;this._data.wickVisible&&this._drawWicks(t,s,this._data.visibleRange),this._data.borderVisible&&this._drawBorder(t,s,this._data.visibleRange);const e=this._calculateBorderWidth(i);(!this._data.borderVisible||this._barWidth>2*e)&&this._drawCandles(t,s,this._data.visibleRange)}_drawWicks(t,i,s){if(null===this._data)return;const{context:e,horizontalPixelRatio:h,verticalPixelRatio:n}=t;let r="",o=Math.min(Math.floor(h),Math.floor(this._data.barSpacing*h));o=Math.max(Math.floor(h),Math.min(o,this._barWidth));const l=Math.floor(.5*o);let a=null;for(let t=s.from;t2*o)V(e,a,c,u-a+1,d-c+1,o);else{const t=u-a+1;e.fillRect(a,c,t,d-c+1)}l=u}}_drawCandles(t,i,s){if(null===this._data)return;const{context:e,horizontalPixelRatio:h,verticalPixelRatio:n}=t;let r="";const o=this._calculateBorderWidth(h);for(let t=s.from;ta||e.fillRect(u,l,c-u+1,a-l+1)}}}class jt extends Et{constructor(){super(...arguments),this._renderer=new Wt}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createDefaultItem(t,i,s)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options();this._renderer.setData({bars:this._items,barSpacing:this._model.timeScale().barSpacing(),wickVisible:t.wickVisible,borderVisible:t.borderVisible,visibleRange:this._itemsVisibleRange})}}class Ht extends z{constructor(){super(...arguments),this._data=null,this._precalculatedCache=[]}setData(t){this._data=t,this._precalculatedCache=[]}_drawImpl({context:t,horizontalPixelRatio:i,verticalPixelRatio:s}){if(null===this._data||0===this._data.items.length||null===this._data.visibleRange)return;this._precalculatedCache.length||this._fillPrecalculatedCache(i);const e=Math.max(1,Math.floor(s)),h=Math.round(this._data.histogramBase*s)-Math.floor(e/2),n=h+e;for(let i=this._data.visibleRange.from;ie.center?e.right=s.left-i-1:s.left=e.right+i+1))}let e=Math.ceil(this._data.barSpacing*t);for(let t=this._data.visibleRange.from;t0&&e<4)for(let t=this._data.visibleRange.from;te&&(i.roundedCenter>i.center?i.right-=1:i.left+=1)}}}class $t extends Rt{constructor(){super(...arguments),this._renderer=new Ht}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t={items:this._items,barSpacing:this._model.timeScale().barSpacing(),visibleRange:this._itemsVisibleRange,histogramBase:this._series.priceScale().priceToCoordinate(this._series.options().base,r(this._series.firstValue()).value)};this._renderer.setData(t)}}class Ut extends Rt{constructor(){super(...arguments),this._renderer=new Mt}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options(),i={items:this._items,lineStyle:t.lineStyle,lineType:t.lineType,lineWidth:t.lineWidth,visibleRange:this._itemsVisibleRange,barWidth:this._model.timeScale().barSpacing()};this._renderer.setData(i)}}const qt=/[2-9]/g;class Yt{constructor(t=50){this._actualSize=0,this._usageTick=1,this._oldestTick=1,this._tick2Labels={},this._cache=new Map,this._maxSize=t}reset(){this._actualSize=0,this._cache.clear(),this._usageTick=1,this._oldestTick=1,this._tick2Labels={}}measureText(t,i,s){return this._getMetrics(t,i,s).width}yMidCorrection(t,i,s){const e=this._getMetrics(t,i,s);return((e.actualBoundingBoxAscent||0)-(e.actualBoundingBoxDescent||0))/2}_getMetrics(t,i,s){const e=s||qt,h=String(i).replace(e,"0");if(this._cache.has(h))return n(this._cache.get(h)).metrics;if(this._actualSize===this._maxSize){const t=this._tick2Labels[this._oldestTick];delete this._tick2Labels[this._oldestTick],this._cache.delete(t),this._oldestTick++,this._actualSize--}t.save(),t.textBaseline="middle";const r=t.measureText(h);return t.restore(),0===r.width&&i.length||(this._cache.set(h,{metrics:r,tick:this._usageTick}),this._tick2Labels[this._usageTick]=h,this._actualSize++,this._usageTick++),r}}class Xt{constructor(t){this._priceAxisViewRenderer=null,this._rendererOptions=null,this._align="right",this._textWidthCache=t}setParams(t,i,s){this._priceAxisViewRenderer=t,this._rendererOptions=i,this._align=s}draw(t){null!==this._rendererOptions&&null!==this._priceAxisViewRenderer&&this._priceAxisViewRenderer.draw(t,this._rendererOptions,this._textWidthCache,this._align)}}class Zt{constructor(t,i,s){this._priceAxisView=t,this._textWidthCache=new Yt(50),this._dataSource=i,this._chartModel=s,this._fontSize=-1,this._renderer=new Xt(this._textWidthCache)}renderer(){const t=this._chartModel.paneForSource(this._dataSource);if(null===t)return null;const i=t.isOverlay(this._dataSource)?t.defaultVisiblePriceScale():this._dataSource.priceScale();if(null===i)return null;const s=t.priceScalePosition(i);if("overlay"===s)return null;const e=this._chartModel.priceAxisRendererOptions();return e.fontSize!==this._fontSize&&(this._fontSize=e.fontSize,this._textWidthCache.reset()),this._renderer.setParams(this._priceAxisView.paneRenderer(),e,s),this._renderer}}var Kt,Gt;!function(t){t[t.HitTestThreshold=7]="HitTestThreshold"}(Kt||(Kt={}));class Jt extends z{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}hitTest(t,i){var s;if(!(null===(s=this._data)||void 0===s?void 0:s.visible))return null;const{y:e,lineWidth:h,externalId:n}=this._data;return i>=e-h-7&&i<=e+h+7?{hitTestData:this._data,externalId:n}:null}_drawImpl({context:t,bitmapSize:i,horizontalPixelRatio:h,verticalPixelRatio:n}){if(null===this._data)return;if(!1===this._data.visible)return;const r=Math.round(this._data.y*n);r<0||r>i.height||(t.lineCap="butt",t.strokeStyle=this._data.color,t.lineWidth=Math.floor(this._data.lineWidth*h),s(t,this._data.lineStyle),e(t,r,0,i.width))}}class Qt{constructor(t){this._lineRendererData={y:0,color:"rgba(0, 0, 0, 0)",lineWidth:1,lineStyle:0,visible:!1},this._lineRenderer=new Jt,this._invalidated=!0,this._series=t,this._model=t.model(),this._lineRenderer.setData(this._lineRendererData)}update(){this._invalidated=!0}renderer(){return this._series.visible()?(this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._lineRenderer):null}}class ti extends Qt{constructor(t){super(t)}_updateImpl(){this._lineRendererData.visible=!1;const t=this._series.priceScale(),i=t.mode().mode;if(2!==i&&3!==i)return;const s=this._series.options();if(!s.baseLineVisible||!this._series.visible())return;const e=this._series.firstValue();null!==e&&(this._lineRendererData.visible=!0,this._lineRendererData.y=t.priceToCoordinate(e.value,e.value),this._lineRendererData.color=s.baseLineColor,this._lineRendererData.lineWidth=s.baseLineWidth,this._lineRendererData.lineStyle=s.baseLineStyle)}}class ii extends z{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}data(){return this._data}_drawImpl({context:t,horizontalPixelRatio:i,verticalPixelRatio:s}){const e=this._data;if(null===e)return;const h=Math.max(1,Math.floor(i)),n=h%2/2,r=Math.round(e.center.x*i)+n,o=e.center.y*s;t.fillStyle=e.seriesLineColor,t.beginPath();const l=Math.max(2,1.5*e.seriesLineWidth)*i;t.arc(r,o,l,0,2*Math.PI,!1),t.fill(),t.fillStyle=e.fillColor,t.beginPath(),t.arc(r,o,e.radius*i,0,2*Math.PI,!1),t.fill(),t.lineWidth=h,t.strokeStyle=e.strokeColor,t.beginPath(),t.arc(r,o,e.radius*i+h/2,0,2*Math.PI,!1),t.stroke()}}!function(t){t[t.AnimationPeriod=2600]="AnimationPeriod",t[t.Stage1Period=.25]="Stage1Period",t[t.Stage2Period=.275]="Stage2Period",t[t.Stage3Period=.475]="Stage3Period",t[t.Stage1StartCircleRadius=4]="Stage1StartCircleRadius",t[t.Stage1EndCircleRadius=10]="Stage1EndCircleRadius",t[t.Stage1StartFillAlpha=.25]="Stage1StartFillAlpha",t[t.Stage1EndFillAlpha=0]="Stage1EndFillAlpha",t[t.Stage1StartStrokeAlpha=.4]="Stage1StartStrokeAlpha",t[t.Stage1EndStrokeAlpha=.8]="Stage1EndStrokeAlpha",t[t.Stage2StartCircleRadius=10]="Stage2StartCircleRadius",t[t.Stage2EndCircleRadius=14]="Stage2EndCircleRadius",t[t.Stage2StartFillAlpha=0]="Stage2StartFillAlpha",t[t.Stage2EndFillAlpha=0]="Stage2EndFillAlpha",t[t.Stage2StartStrokeAlpha=.8]="Stage2StartStrokeAlpha",t[t.Stage2EndStrokeAlpha=0]="Stage2EndStrokeAlpha",t[t.Stage3StartCircleRadius=14]="Stage3StartCircleRadius",t[t.Stage3EndCircleRadius=14]="Stage3EndCircleRadius",t[t.Stage3StartFillAlpha=0]="Stage3StartFillAlpha",t[t.Stage3EndFillAlpha=0]="Stage3EndFillAlpha",t[t.Stage3StartStrokeAlpha=0]="Stage3StartStrokeAlpha",t[t.Stage3EndStrokeAlpha=0]="Stage3EndStrokeAlpha"}(Gt||(Gt={}));const si=[{start:0,end:.25,startRadius:4,endRadius:10,startFillAlpha:.25,endFillAlpha:0,startStrokeAlpha:.4,endStrokeAlpha:.8},{start:.25,end:.525,startRadius:10,endRadius:14,startFillAlpha:0,endFillAlpha:0,startStrokeAlpha:.8,endStrokeAlpha:0},{start:.525,end:1,startRadius:14,endRadius:14,startFillAlpha:0,endFillAlpha:0,startStrokeAlpha:0,endStrokeAlpha:0}];function ei(t,i,s,e){return function(t,i){if("transparent"===t)return t;const s=m(t),e=s[3];return`rgba(${s[0]}, ${s[1]}, ${s[2]}, ${i*e})`}(t,s+(e-s)*i)}function hi(t,i){const s=t%2600/2600;let e;for(const t of si)if(s>=t.start&&s<=t.end){e=t;break}h(void 0!==e,"Last price animation internal logic error");const n=(s-e.start)/(e.end-e.start);return{fillColor:ei(i,n,e.startFillAlpha,e.endFillAlpha),strokeColor:ei(i,n,e.startStrokeAlpha,e.endStrokeAlpha),radius:(r=n,o=e.startRadius,l=e.endRadius,o+(l-o)*r)};var r,o,l}class ni{constructor(t){this._renderer=new ii,this._invalidated=!0,this._stageInvalidated=!0,this._startTime=performance.now(),this._endTime=this._startTime-1,this._series=t}onDataCleared(){this._endTime=this._startTime-1,this.update()}onNewRealtimeDataReceived(){if(this.update(),2===this._series.options().lastPriceAnimation){const t=performance.now(),i=this._endTime-t;if(i>0)return void(i<650&&(this._endTime+=2600));this._startTime=t,this._endTime=t+2600}}update(){this._invalidated=!0}invalidateStage(){this._stageInvalidated=!0}visible(){return 0!==this._series.options().lastPriceAnimation}animationActive(){switch(this._series.options().lastPriceAnimation){case 0:return!1;case 1:return!0;case 2:return performance.now()<=this._endTime}}renderer(){return this._invalidated?(this._updateImpl(),this._invalidated=!1,this._stageInvalidated=!1):this._stageInvalidated&&(this._updateRendererDataStage(),this._stageInvalidated=!1),this._renderer}_updateImpl(){this._renderer.setData(null);const t=this._series.model().timeScale(),i=t.visibleStrictRange(),s=this._series.firstValue();if(null===i||null===s)return;const e=this._series.lastValueData(!0);if(e.noData||!i.contains(e.index))return;const h={x:t.indexToCoordinate(e.index),y:this._series.priceScale().priceToCoordinate(e.price,s.value)},n=e.color,r=this._series.options().lineWidth,o=hi(this._duration(),n);this._renderer.setData({seriesLineColor:n,seriesLineWidth:r,fillColor:o.fillColor,strokeColor:o.strokeColor,radius:o.radius,center:h})}_updateRendererDataStage(){const t=this._renderer.data();if(null!==t){const i=hi(this._duration(),t.seriesLineColor);t.fillColor=i.fillColor,t.strokeColor=i.strokeColor,t.radius=i.radius}}_duration(){return this.animationActive()?performance.now()-this._startTime:2599}}var ri,oi;function li(t,i){return It(Math.min(Math.max(t,12),30)*i)}function ai(t,i){switch(t){case"arrowDown":case"arrowUp":return li(i,1);case"circle":return li(i,.8);case"square":return li(i,.7)}}function ui(t){return function(t){const i=Math.ceil(t);return i%2!=0?i-1:i}(li(t,1))}function ci(t){return Math.max(li(t,.1),3)}function di(t,i,s,e,h){const n=ai("square",s),r=(n-1)/2,o=t-r,l=i-r;return e>=o&&e<=o+n&&h>=l&&h<=l+n}function fi(t,i,s,e,h){const n=(ai("arrowUp",h)-1)/2,r=(It(h/2)-1)/2;i.beginPath(),t?(i.moveTo(s-n,e),i.lineTo(s,e-n),i.lineTo(s+n,e),i.lineTo(s+r,e),i.lineTo(s+r,e+n),i.lineTo(s-r,e+n),i.lineTo(s-r,e)):(i.moveTo(s-n,e),i.lineTo(s,e+n),i.lineTo(s+n,e),i.lineTo(s+r,e),i.lineTo(s+r,e-n),i.lineTo(s-r,e-n),i.lineTo(s-r,e)),i.fill()}function pi(t,i,s,e,h,n){return di(i,s,e,h,n)}!function(t){t[t.MinShapeSize=12]="MinShapeSize",t[t.MaxShapeSize=30]="MaxShapeSize",t[t.MinShapeMargin=3]="MinShapeMargin"}(ri||(ri={}));class mi extends A{constructor(){super(...arguments),this._data=null,this._textWidthCache=new Yt,this._fontSize=-1,this._fontFamily="",this._font=""}setData(t){this._data=t}setParams(t,i){this._fontSize===t&&this._fontFamily===i||(this._fontSize=t,this._fontFamily=i,this._font=T(t,i),this._textWidthCache.reset())}hitTest(t,i){if(null===this._data||null===this._data.visibleRange)return null;for(let s=this._data.visibleRange.from;s=t&&h<=t+s&&n>=i-r&&n<=i+r}(t.text.x,t.text.y,t.text.width,t.text.height,i,s))||function(t,i,s){if(0===t.size)return!1;switch(t.shape){case"arrowDown":case"arrowUp":return pi(0,t.x,t.y,t.size,i,s);case"circle":return function(t,i,s,e,h){const n=2+ai("circle",s)/2,r=t-e,o=i-h;return Math.sqrt(r*r+o*o)<=n}(t.x,t.y,t.size,i,s);case"square":return di(t.x,t.y,t.size,i,s)}}(t,i,s)}function gi(t,i,s,e,h,n,r,o,l){const a=w(s)?s:s.close,u=w(s)?s:s.high,c=w(s)?s:s.low,d=w(i.size)?Math.max(i.size,0):1,f=ui(o.barSpacing())*d,p=f/2;switch(t.size=f,i.position){case"inBar":return t.y=r.priceToCoordinate(a,l),void(void 0!==t.text&&(t.text.y=t.y+p+n+.6*h));case"aboveBar":return t.y=r.priceToCoordinate(u,l)-p-e.aboveBar,void 0!==t.text&&(t.text.y=t.y-p-.6*h,e.aboveBar+=1.2*h),void(e.aboveBar+=f+n);case"belowBar":return t.y=r.priceToCoordinate(c,l)+p+e.belowBar,void 0!==t.text&&(t.text.y=t.y+p+n+.6*h,e.belowBar+=1.2*h),void(e.belowBar+=f+n)}i.position}!function(t){t[t.TextMargin=.1]="TextMargin"}(oi||(oi={}));class wi{constructor(t,i){this._invalidated=!0,this._dataInvalidated=!0,this._autoScaleMarginsInvalidated=!0,this._autoScaleMargins=null,this._renderer=new mi,this._series=t,this._model=i,this._data={items:[],visibleRange:null}}update(t){this._invalidated=!0,this._autoScaleMarginsInvalidated=!0,"data"===t&&(this._dataInvalidated=!0)}renderer(t){if(!this._series.visible())return null;this._invalidated&&this._makeValid();const i=this._model.options().layout;return this._renderer.setParams(i.fontSize,i.fontFamily),this._renderer.setData(this._data),this._renderer}autoScaleMargins(){if(this._autoScaleMarginsInvalidated){if(this._series.indexedMarkers().length>0){const t=this._model.timeScale().barSpacing(),i=ci(t),s=1.5*ui(t)+2*i;this._autoScaleMargins={above:s,below:s}}else this._autoScaleMargins=null;this._autoScaleMarginsInvalidated=!1}return this._autoScaleMargins}_makeValid(){const t=this._series.priceScale(),i=this._model.timeScale(),s=this._series.indexedMarkers();this._dataInvalidated&&(this._data.items=s.map((t=>({time:t.time,x:0,y:0,size:0,shape:t.shape,color:t.color,internalId:t.internalId,externalId:t.id,text:void 0}))),this._dataInvalidated=!1);const e=this._model.options().layout;this._data.visibleRange=null;const h=i.visibleStrictRange();if(null===h)return;const n=this._series.firstValue();if(null===n)return;if(0===this._data.items.length)return;let r=NaN;const o=ci(i.barSpacing()),l={aboveBar:o,belowBar:o};this._data.visibleRange=Tt(this._data.items,h,!0);for(let h=this._data.visibleRange.from;h0&&(u.text={content:a.text,x:0,y:0,width:0,height:0});const c=this._series.dataAt(a.time);null!==c&&gi(u,a,c,l,e.fontSize,o,t,i,n.value)}this._invalidated=!1}}class Mi extends Qt{constructor(t){super(t)}_updateImpl(){const t=this._lineRendererData;t.visible=!1;const i=this._series.options();if(!i.priceLineVisible||!this._series.visible())return;const s=this._series.lastValueData(0===i.priceLineSource);s.noData||(t.visible=!0,t.y=s.coordinate,t.color=this._series.priceLineColor(s.color),t.lineWidth=i.priceLineWidth,t.lineStyle=i.priceLineStyle)}}class Si extends q{constructor(t){super(),this._source=t}_updateRendererData(t,i,s){t.visible=!1,i.visible=!1;const e=this._source;if(!e.visible())return;const h=e.options(),n=h.lastValueVisible,r=""!==e.title(),o=0===h.seriesLastValueMode,l=e.lastValueData(!1);if(l.noData)return;n&&(t.text=this._axisText(l,n,o),t.visible=0!==t.text.length),(r||o)&&(i.text=this._paneText(l,n,r,o),i.visible=i.text.length>0);const a=e.priceLineColor(l.color),u=v(a);s.background=u.background,s.coordinate=l.coordinate,i.borderColor=e.model().backgroundColorAtYPercentFromTop(l.coordinate/e.priceScale().height()),t.borderColor=a,t.color=u.foreground,i.color=u.foreground}_paneText(t,i,s,e){let h="";const n=this._source.title();return s&&0!==n.length&&(h+=`${n} `),i&&e&&(h+=this._source.priceScale().isPercentage()?t.formattedPriceAbsolute:t.formattedPricePercentage),h.trim()}_axisText(t,i,s){return i?s?this._source.priceScale().isPercentage()?t.formattedPricePercentage:t.formattedPriceAbsolute:t.text:""}}class xi{constructor(t,i){this._minValue=t,this._maxValue=i}equals(t){return null!==t&&(this._minValue===t._minValue&&this._maxValue===t._maxValue)}clone(){return new xi(this._minValue,this._maxValue)}minValue(){return this._minValue}maxValue(){return this._maxValue}length(){return this._maxValue-this._minValue}isEmpty(){return this._maxValue===this._minValue||Number.isNaN(this._maxValue)||Number.isNaN(this._minValue)}merge(t){return null===t?this:new xi(Math.min(this.minValue(),t.minValue()),Math.max(this.maxValue(),t.maxValue()))}scaleAroundCenter(t){if(!w(t))return;if(0===this._maxValue-this._minValue)return;const i=.5*(this._maxValue+this._minValue);let s=this._maxValue-i,e=this._minValue-i;s*=t,e*=t,this._maxValue=i+s,this._minValue=i+e}shift(t){w(t)&&(this._maxValue+=t,this._minValue+=t)}toRaw(){return{minValue:this._minValue,maxValue:this._maxValue}}static fromRaw(t){return null===t?null:new xi(t.minValue,t.maxValue)}}class _i{constructor(t,i){this._priceRange=t,this._margins=i||null}priceRange(){return this._priceRange}margins(){return this._margins}toRaw(){return null===this._priceRange?null:{priceRange:this._priceRange.toRaw(),margins:this._margins||void 0}}static fromRaw(t){return null===t?null:new _i(xi.fromRaw(t.priceRange),t.margins)}}class yi extends Qt{constructor(t,i){super(t),this._priceLine=i}_updateImpl(){const t=this._lineRendererData;t.visible=!1;const i=this._priceLine.options();if(!this._series.visible()||!i.lineVisible)return;const s=this._priceLine.yCoord();null!==s&&(t.visible=!0,t.y=s,t.color=i.color,t.lineWidth=i.lineWidth,t.lineStyle=i.lineStyle,t.externalId=this._priceLine.options().id)}}class ki extends q{constructor(t,i){super(),this._series=t,this._priceLine=i}_updateRendererData(t,i,s){t.visible=!1,i.visible=!1;const e=this._priceLine.options(),h=e.axisLabelVisible,n=""!==e.title,r=this._series;if(!h||!r.visible())return;const o=this._priceLine.yCoord();if(null===o)return;n&&(i.text=e.title,i.visible=!0),i.borderColor=r.model().backgroundColorAtYPercentFromTop(o/r.priceScale().height()),t.text=this._formatPrice(e.price),t.visible=!0;const l=v(e.axisLabelColor||e.color);s.background=l.background;const a=e.axisLabelTextColor||l.foreground;t.color=a,i.color=a,s.coordinate=o}_formatPrice(t){const i=this._series.firstValue();return null===i?"":this._series.priceScale().formatPrice(t,i.value)}}class Ci{constructor(t,i){this._series=t,this._options=i,this._priceLineView=new yi(t,this),this._priceAxisView=new ki(t,this),this._panePriceAxisView=new Zt(this._priceAxisView,t,t.model())}applyOptions(t){g(this._options,t),this.update(),this._series.model().lightUpdate()}options(){return this._options}paneView(){return this._priceLineView}labelPaneView(){return this._panePriceAxisView}priceAxisView(){return this._priceAxisView}update(){this._priceLineView.update(),this._priceAxisView.update()}yCoord(){const t=this._series,i=t.priceScale();if(t.model().timeScale().isEmpty()||i.isEmpty())return null;const s=t.firstValue();return null===s?null:i.priceToCoordinate(this._options.price,s.value)}}class Ti extends G{constructor(t){super(),this._model=t}model(){return this._model}}const Pi={Bar:(t,i,s,e)=>{var h;const n=i.upColor,l=i.downColor,a=r(t(s,e)),u=o(a.value[0])<=o(a.value[3]);return{barColor:null!==(h=a.color)&&void 0!==h?h:u?n:l}},Candlestick:(t,i,s,e)=>{var h,n,l;const a=i.upColor,u=i.downColor,c=i.borderUpColor,d=i.borderDownColor,f=i.wickUpColor,p=i.wickDownColor,m=r(t(s,e)),v=o(m.value[0])<=o(m.value[3]);return{barColor:null!==(h=m.color)&&void 0!==h?h:v?a:u,barBorderColor:null!==(n=m.borderColor)&&void 0!==n?n:v?c:d,barWickColor:null!==(l=m.wickColor)&&void 0!==l?l:v?f:p}},Area:(t,i,s,e)=>{var h,n,o,l;const a=r(t(s,e));return{barColor:null!==(h=a.lineColor)&&void 0!==h?h:i.lineColor,lineColor:null!==(n=a.lineColor)&&void 0!==n?n:i.lineColor,topColor:null!==(o=a.topColor)&&void 0!==o?o:i.topColor,bottomColor:null!==(l=a.bottomColor)&&void 0!==l?l:i.bottomColor}},Baseline:(t,i,s,e)=>{var h,n,o,l,a,u;const c=r(t(s,e));return{barColor:c.value[3]>=i.baseValue.price?i.topLineColor:i.bottomLineColor,topLineColor:null!==(h=c.topLineColor)&&void 0!==h?h:i.topLineColor,bottomLineColor:null!==(n=c.bottomLineColor)&&void 0!==n?n:i.bottomLineColor,topFillColor1:null!==(o=c.topFillColor1)&&void 0!==o?o:i.topFillColor1,topFillColor2:null!==(l=c.topFillColor2)&&void 0!==l?l:i.topFillColor2,bottomFillColor1:null!==(a=c.bottomFillColor1)&&void 0!==a?a:i.bottomFillColor1,bottomFillColor2:null!==(u=c.bottomFillColor2)&&void 0!==u?u:i.bottomFillColor2}},Line:(t,i,s,e)=>{var h,n;const o=r(t(s,e));return{barColor:null!==(h=o.color)&&void 0!==h?h:i.color,lineColor:null!==(n=o.color)&&void 0!==n?n:i.color}},Histogram:(t,i,s,e)=>{var h;return{barColor:null!==(h=r(t(s,e)).color)&&void 0!==h?h:i.color}}};class Ri{constructor(t){this._findBar=(t,i)=>void 0!==i?i.value:this._series.bars().valueAt(t),this._series=t,this._styleGetter=Pi[t.seriesType()]}barStyle(t,i){return this._styleGetter(this._findBar,this._series.options(),t,i)}}var Di;!function(t){t[t.NearestLeft=-1]="NearestLeft",t[t.None=0]="None",t[t.NearestRight=1]="NearestRight"}(Di||(Di={}));const Ai=30;class Ei{constructor(){this._items=[],this._minMaxCache=new Map,this._rowSearchCache=new Map}last(){return this.size()>0?this._items[this._items.length-1]:null}firstIndex(){return this.size()>0?this._indexAt(0):null}lastIndex(){return this.size()>0?this._indexAt(this._items.length-1):null}size(){return this._items.length}isEmpty(){return 0===this.size()}contains(t){return null!==this._search(t,0)}valueAt(t){return this.search(t)}search(t,i=0){const s=this._search(t,i);return null===s?null:Object.assign(Object.assign({},this._valueAt(s)),{index:this._indexAt(s)})}rows(){return this._items}minMaxOnRangeCached(t,i,s){if(this.isEmpty())return null;let e=null;for(const h of s){e=Oi(e,this._minMaxOnRangeCachedImpl(t,i,h))}return e}setData(t){this._rowSearchCache.clear(),this._minMaxCache.clear(),this._items=t}_indexAt(t){return this._items[t].index}_valueAt(t){return this._items[t]}_search(t,i){const s=this._bsearch(t);if(null===s&&0!==i)switch(i){case-1:return this._searchNearestLeft(t);case 1:return this._searchNearestRight(t);default:throw new TypeError("Unknown search mode")}return s}_searchNearestLeft(t){let i=this._lowerbound(t);return i>0&&(i-=1),i!==this._items.length&&this._indexAt(i)t.indexi.index>t))}_plotMinMax(t,i,s){let e=null;for(let h=t;he.max&&(e.max=t)))}return e}_minMaxOnRangeCachedImpl(t,i,s){if(this.isEmpty())return null;let e=null;const h=r(this.firstIndex()),n=r(this.lastIndex()),o=Math.max(t,h),l=Math.min(i,n),a=Math.ceil(o/Ai)*Ai,u=Math.max(a,Math.floor(l/Ai)*Ai);{const t=this._lowerbound(o),h=this._upperbound(Math.min(l,a,i));e=Oi(e,this._plotMinMax(t,h,s))}let c=this._minMaxCache.get(s);void 0===c&&(c=new Map,this._minMaxCache.set(s,c));for(let t=Math.max(a+1,o);t{this._animationTimeoutId=null,this.model().cursorUpdate()}),0)),i.invalidateStage(),[i]):[]}paneViews(){const t=[];this._isOverlay()||t.push(this._baseHorizontalLineView),t.push(this._paneView,this._priceLineView,this._markersPaneView);const i=this._customPriceLines.map((t=>t.paneView()));return t.push(...i),t}labelPaneViews(t){return[this._panePriceAxisView,...this._customPriceLines.map((t=>t.labelPaneView()))]}priceAxisViews(t,i){if(i!==this._priceScale&&!this._isOverlay())return[];const s=[...this._priceAxisViews];for(const t of this._customPriceLines)s.push(t.priceAxisView());return s}autoscaleInfo(t,i){if(void 0!==this._options.autoscaleInfoProvider){const s=this._options.autoscaleInfoProvider((()=>{const s=this._autoscaleInfoImpl(t,i);return null===s?null:s.toRaw()}));return _i.fromRaw(s)}return this._autoscaleInfoImpl(t,i)}minMove(){return this._options.priceFormat.minMove}formatter(){return this._formatter}updateAllViews(){var t;this._paneView.update(),this._markersPaneView.update();for(const t of this._priceAxisViews)t.update();for(const t of this._customPriceLines)t.update();this._priceLineView.update(),this._baseHorizontalLineView.update(),null===(t=this._lastPriceAnimationPaneView)||void 0===t||t.update()}priceScale(){return r(super.priceScale())}markerDataAtIndex(t){if(!(("Line"===this._seriesType||"Area"===this._seriesType||"Baseline"===this._seriesType)&&this._options.crosshairMarkerVisible))return null;const i=this._data.valueAt(t);if(null===i)return null;return{price:i.value[3],radius:this._markerRadius(),borderColor:this._markerBorderColor(),borderWidth:this._markerBorderWidth(),backgroundColor:this._markerBackgroundColor(t)}}title(){return this._options.title}visible(){return this._options.visible}_isOverlay(){return!et(this.priceScale().id())}_autoscaleInfoImpl(t,i){if(!M(t)||!M(i)||this._data.isEmpty())return null;const s="Line"===this._seriesType||"Area"===this._seriesType||"Baseline"===this._seriesType||"Histogram"===this._seriesType?[3]:[2,1],e=this._data.minMaxOnRangeCached(t,i,s);let h=null!==e?new xi(e.min,e.max):null;if("Histogram"===this.seriesType()){const t=this._options.base,i=new xi(t,t);h=null!==h?h.merge(i):i}return new _i(h,this._markersPaneView.autoScaleMargins())}_markerRadius(){switch(this._seriesType){case"Line":case"Area":case"Baseline":return this._options.crosshairMarkerRadius}return 0}_markerBorderColor(){switch(this._seriesType){case"Line":case"Area":case"Baseline":{const t=this._options.crosshairMarkerBorderColor;if(0!==t.length)return t}}return null}_markerBorderWidth(){switch(this._seriesType){case"Line":case"Area":case"Baseline":return this._options.crosshairMarkerBorderWidth}return 0}_markerBackgroundColor(t){switch(this._seriesType){case"Line":case"Area":case"Baseline":{const t=this._options.crosshairMarkerBackgroundColor;if(0!==t.length)return t}}return this.barColorer().barStyle(t).barColor}_recreateFormatter(){switch(this._options.priceFormat.type){case"custom":this._formatter={format:this._options.priceFormat.formatter};break;case"volume":this._formatter=new at(this._options.priceFormat.precision);break;case"percent":this._formatter=new lt(this._options.priceFormat.precision);break;default:{const t=Math.pow(10,this._options.priceFormat.precision);this._formatter=new ot(t,this._options.priceFormat.minMove*t)}}null!==this._priceScale&&this._priceScale.updateFormatter()}_recalculateMarkers(){const t=this.model().timeScale();if(!t.hasPoints()||this._data.isEmpty())return void(this._indexedMarkers=[]);const i=r(this._data.firstIndex());this._indexedMarkers=this._markers.map(((s,e)=>{const h=r(t.timeToIndex(s.time,!0)),n=ht instanceof Bi)).reduce(((t,e)=>{if(s.isOverlay(e)||!e.visible())return t;const h=e.priceScale(),n=e.bars();if(h.isEmpty()||!n.contains(i))return t;const r=n.valueAt(i);if(null===r)return t;const l=o(e.firstValue());return t.concat([h.priceToCoordinate(r.value[3],l.value)])}),[]);if(0===l.length)return e;l.sort(((t,i)=>Math.abs(t-r)-Math.abs(i-r)));const a=l[0];return e=h.coordinateToPrice(a,n),e}}class zi extends z{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}_drawImpl({context:t,bitmapSize:i,horizontalPixelRatio:e,verticalPixelRatio:h}){if(null===this._data)return;const n=Math.max(1,Math.floor(e));t.lineWidth=n,function(t,i){t.save(),t.lineWidth%2&&t.translate(.5,.5),i(),t.restore()}(t,(()=>{const o=r(this._data);if(o.vertLinesVisible){t.strokeStyle=o.vertLinesColor,s(t,o.vertLineStyle),t.beginPath();for(const s of o.timeMarks){const h=Math.round(s.coord*e);t.moveTo(h,-n),t.lineTo(h,i.height+n)}t.stroke()}if(o.horzLinesVisible){t.strokeStyle=o.horzLinesColor,s(t,o.horzLineStyle),t.beginPath();for(const s of o.priceMarks){const e=Math.round(s.coord*h);t.moveTo(-n,e),t.lineTo(i.width+n,e)}t.stroke()}}))}}class Ii{constructor(t){this._renderer=new zi,this._invalidated=!0,this._pane=t}update(){this._invalidated=!0}renderer(){if(this._invalidated){const t=this._pane.model().options().grid,i={horzLinesVisible:t.horzLines.visible,vertLinesVisible:t.vertLines.visible,horzLinesColor:t.horzLines.color,vertLinesColor:t.vertLines.color,horzLineStyle:t.horzLines.style,vertLineStyle:t.vertLines.style,priceMarks:this._pane.defaultPriceScale().marks(),timeMarks:this._pane.model().timeScale().marks()||[]};this._renderer.setData(i),this._invalidated=!1}return this._renderer}}class Ni{constructor(t){this._paneView=new Ii(t)}paneView(){return this._paneView}}const Vi={logicalOffset:4,coordOffset:1e-4};function Fi(t,i){const s=100*(t-i)/i;return i<0?-s:s}function Wi(t,i){const s=Fi(t.minValue(),i),e=Fi(t.maxValue(),i);return new xi(s,e)}function ji(t,i){const s=100*(t-i)/i+100;return i<0?-s:s}function Hi(t,i){const s=ji(t.minValue(),i),e=ji(t.maxValue(),i);return new xi(s,e)}function $i(t,i){const s=Math.abs(t);if(s<1e-15)return 0;const e=zt(s+i.coordOffset)+i.logicalOffset;return t<0?-e:e}function Ui(t,i){const s=Math.abs(t);if(s<1e-15)return 0;const e=Math.pow(10,s-i.logicalOffset)-i.coordOffset;return t<0?-e:e}function qi(t,i){if(null===t)return null;const s=$i(t.minValue(),i),e=$i(t.maxValue(),i);return new xi(s,e)}function Yi(t,i){if(null===t)return null;const s=Ui(t.minValue(),i),e=Ui(t.maxValue(),i);return new xi(s,e)}function Xi(t){if(null===t)return Vi;const i=Math.abs(t.maxValue()-t.minValue());if(i>=1||i<1e-15)return Vi;const s=Math.ceil(Math.abs(Math.log10(i))),e=Vi.logicalOffset+s;return{logicalOffset:e,coordOffset:1/Math.pow(10,e)}}var Zi;!function(t){t[t.TickSpanEpsilon=1e-14]="TickSpanEpsilon"}(Zi||(Zi={}));class Ki{constructor(t,i){if(this._base=t,this._integralDividers=i,function(t){if(t<0)return!1;for(let i=t;i>1;i/=10)if(i%10!=0)return!1;return!0}(this._base))this._fractionalDividers=[2,2.5,2];else{this._fractionalDividers=[];for(let t=this._base;1!==t;){if(t%2==0)this._fractionalDividers.push(2),t/=2;else{if(t%5!=0)throw new Error("unexpected base");this._fractionalDividers.push(2,2.5),t/=5}if(this._fractionalDividers.length>100)throw new Error("something wrong with base")}}}tickSpan(t,i,s){const e=0===this._base?0:1/this._base;let h=Math.pow(10,Math.max(0,Math.ceil(zt(t-i)))),n=0,r=this._integralDividers[0];for(;;){const t=Lt(h,e,1e-14)&&h>e+1e-14,i=Lt(h,s*r,1e-14),o=Lt(h,1,1e-14);if(!(t&&i&&o))break;h/=r,r=this._integralDividers[++n%this._integralDividers.length]}if(h<=e+1e-14&&(h=e),h=Math.max(1,h),this._fractionalDividers.length>0&&(o=h,l=1,a=1e-14,Math.abs(o-l)e+1e-14;)h/=r,r=this._fractionalDividers[++n%this._fractionalDividers.length];var o,l,a;return h}}class Gi{constructor(t,i,s,e){this._marks=[],this._priceScale=t,this._base=i,this._coordinateToLogicalFunc=s,this._logicalToCoordinateFunc=e}tickSpan(t,i){if(t=a?1:-1;let f=null,p=0;for(let s=l-c;s>a;s-=u){const e=this._logicalToCoordinateFunc(s,i,!0);null!==f&&Math.abs(e-f)o||(pr(t.zorder())-r(i.zorder())))}var Qi;!function(t){t[t.Normal=0]="Normal",t[t.Logarithmic=1]="Logarithmic",t[t.Percentage=2]="Percentage",t[t.IndexedTo100=3]="IndexedTo100"}(Qi||(Qi={}));const ts=new lt,is=new ot(100,1);class ss{constructor(t,i,s,e){this._height=0,this._internalHeightCache=null,this._priceRange=null,this._priceRangeSnapshot=null,this._invalidatedForRange={isValid:!1,visibleBars:null},this._marginAbove=0,this._marginBelow=0,this._onMarksChanged=new b,this._modeChanged=new b,this._dataSources=[],this._cachedOrderedSources=null,this._marksCache=null,this._scaleStartPoint=null,this._scrollStartPoint=null,this._formatter=is,this._logFormula=Xi(null),this._id=t,this._options=i,this._layoutOptions=s,this._localizationOptions=e,this._markBuilder=new Gi(this,100,this._coordinateToLogical.bind(this),this._logicalToCoordinate.bind(this))}id(){return this._id}options(){return this._options}applyOptions(t){if(g(this._options,t),this.updateFormatter(),void 0!==t.mode&&this.setMode({mode:t.mode}),void 0!==t.scaleMargins){const i=n(t.scaleMargins.top),s=n(t.scaleMargins.bottom);if(i<0||i>1)throw new Error(`Invalid top margin - expect value between 0 and 1, given=${i}`);if(s<0||s>1||i+s>1)throw new Error(`Invalid bottom margin - expect value between 0 and 1, given=${s}`);if(i+s>1)throw new Error(`Invalid margins - sum of margins must be less than 1, given=${i+s}`);this._invalidateInternalHeightCache(),this._marksCache=null}}isAutoScale(){return this._options.autoScale}isLog(){return 1===this._options.mode}isPercentage(){return 2===this._options.mode}isIndexedTo100(){return 3===this._options.mode}mode(){return{autoScale:this._options.autoScale,isInverted:this._options.invertScale,mode:this._options.mode}}setMode(t){const i=this.mode();let s=null;void 0!==t.autoScale&&(this._options.autoScale=t.autoScale),void 0!==t.mode&&(this._options.mode=t.mode,2!==t.mode&&3!==t.mode||(this._options.autoScale=!0),this._invalidatedForRange.isValid=!1),1===i.mode&&t.mode!==i.mode&&(!function(t,i){if(null===t)return!1;const s=Ui(t.minValue(),i),e=Ui(t.maxValue(),i);return isFinite(s)&&isFinite(e)}(this._priceRange,this._logFormula)?this._options.autoScale=!0:(s=Yi(this._priceRange,this._logFormula),null!==s&&this.setPriceRange(s))),1===t.mode&&t.mode!==i.mode&&(s=qi(this._priceRange,this._logFormula),null!==s&&this.setPriceRange(s));const e=i.mode!==this._options.mode;e&&(2===i.mode||this.isPercentage())&&this.updateFormatter(),e&&(3===i.mode||this.isIndexedTo100())&&this.updateFormatter(),void 0!==t.isInverted&&i.isInverted!==t.isInverted&&(this._options.invertScale=t.isInverted,this._onIsInvertedChanged()),this._modeChanged.fire(i,this.mode())}modeChanged(){return this._modeChanged}fontSize(){return this._layoutOptions.fontSize}height(){return this._height}setHeight(t){this._height!==t&&(this._height=t,this._invalidateInternalHeightCache(),this._marksCache=null)}internalHeight(){if(this._internalHeightCache)return this._internalHeightCache;const t=this.height()-this._topMarginPx()-this._bottomMarginPx();return this._internalHeightCache=t,t}priceRange(){return this._makeSureItIsValid(),this._priceRange}setPriceRange(t,i){const s=this._priceRange;(i||null===s&&null!==t||null!==s&&!s.equals(t))&&(this._marksCache=null,this._priceRange=t)}isEmpty(){return this._makeSureItIsValid(),0===this._height||!this._priceRange||this._priceRange.isEmpty()}invertedCoordinate(t){return this.isInverted()?t:this.height()-1-t}priceToCoordinate(t,i){return this.isPercentage()?t=Fi(t,i):this.isIndexedTo100()&&(t=ji(t,i)),this._logicalToCoordinate(t,i)}pointsArrayToCoordinates(t,i,s){this._makeSureItIsValid();const e=this._bottomMarginPx(),h=r(this.priceRange()),n=h.minValue(),o=h.maxValue(),l=this.internalHeight()-1,a=this.isInverted(),u=l/(o-n),c=void 0===s?0:s.from,d=void 0===s?t.length:s.to,f=this._getCoordinateTransformer();for(let s=c;st.updateAllViews()))}updateFormatter(){this._marksCache=null;const t=this._formatterSource();let i=100;null!==t&&(i=Math.round(1/t.minMove())),this._formatter=is,this.isPercentage()?(this._formatter=ts,i=100):this.isIndexedTo100()?(this._formatter=new ot(100,1),i=100):null!==t&&(this._formatter=t.formatter()),this._markBuilder=new Gi(this,i,this._coordinateToLogical.bind(this),this._logicalToCoordinate.bind(this)),this._markBuilder.rebuildTickMarks()}invalidateSourcesCache(){this._cachedOrderedSources=null}_formatterSource(){return this._dataSources[0]||null}_topMarginPx(){return this.isInverted()?this._options.scaleMargins.bottom*this.height()+this._marginBelow:this._options.scaleMargins.top*this.height()+this._marginAbove}_bottomMarginPx(){return this.isInverted()?this._options.scaleMargins.top*this.height()+this._marginAbove:this._options.scaleMargins.bottom*this.height()+this._marginBelow}_makeSureItIsValid(){this._invalidatedForRange.isValid||(this._invalidatedForRange.isValid=!0,this._recalculatePriceRangeImpl())}_invalidateInternalHeightCache(){this._internalHeightCache=null}_logicalToCoordinate(t,i){if(this._makeSureItIsValid(),this.isEmpty())return 0;t=this.isLog()&&t?$i(t,this._logFormula):t;const s=r(this.priceRange()),e=this._bottomMarginPx()+(this.internalHeight()-1)*(t-s.minValue())/s.length();return this.invertedCoordinate(e)}_coordinateToLogical(t,i){if(this._makeSureItIsValid(),this.isEmpty())return 0;const s=this.invertedCoordinate(t),e=r(this.priceRange()),h=e.minValue()+e.length()*((s-this._bottomMarginPx())/(this.internalHeight()-1));return this.isLog()?Ui(h,this._logFormula):h}_onIsInvertedChanged(){this._marksCache=null,this._markBuilder.rebuildTickMarks()}_recalculatePriceRangeImpl(){const t=this._invalidatedForRange.visibleBars;if(null===t)return;let i=null;const s=this.sourcesForAutoScale();let e=0,h=0;for(const n of s){if(!n.visible())continue;const s=n.firstValue();if(null===s)continue;const o=n.autoscaleInfo(t.left(),t.right());let l=o&&o.priceRange();if(null!==l){switch(this._options.mode){case 1:l=qi(l,this._logFormula);break;case 2:l=Wi(l,s.value);break;case 3:l=Hi(l,s.value)}if(i=null===i?l:i.merge(r(l)),null!==o){const t=o.margins();null!==t&&(e=Math.max(e,t.above),h=Math.max(e,t.below))}}}if(e===this._marginAbove&&h===this._marginBelow||(this._marginAbove=e,this._marginBelow=h,this._marksCache=null,this._invalidateInternalHeightCache()),null!==i){if(i.minValue()===i.maxValue()){const t=this._formatterSource(),s=5*(null===t||this.isPercentage()||this.isIndexedTo100()?1:t.minMove());this.isLog()&&(i=Yi(i,this._logFormula)),i=new xi(i.minValue()-s,i.maxValue()+s),this.isLog()&&(i=qi(i,this._logFormula))}if(this.isLog()){const t=Yi(i,this._logFormula),s=Xi(t);if(n=s,o=this._logFormula,n.logicalOffset!==o.logicalOffset||n.coordOffset!==o.coordOffset){const e=null!==this._priceRangeSnapshot?Yi(this._priceRangeSnapshot,this._logFormula):null;this._logFormula=s,i=qi(t,s),null!==e&&(this._priceRangeSnapshot=qi(e,s))}}this.setPriceRange(i)}else null===this._priceRange&&(this.setPriceRange(new xi(-.5,.5)),this._logFormula=Xi(null));var n,o;this._invalidatedForRange.isValid=!0}_getCoordinateTransformer(){return this.isPercentage()?Fi:this.isIndexedTo100()?ji:this.isLog()?t=>$i(t,this._logFormula):null}_formatValue(t,i,s){return void 0===i?(void 0===s&&(s=this.formatter()),s.format(t)):i(t)}_formatPrice(t,i){return this._formatValue(t,this._localizationOptions.priceFormatter,i)}_formatPercentage(t,i){return this._formatValue(t,this._localizationOptions.percentageFormatter,i)}}class es{constructor(t,i){this._dataSources=[],this._overlaySourcesByScaleId=new Map,this._height=0,this._width=0,this._stretchFactor=1e3,this._cachedOrderedSources=null,this._destroyed=new b,this._timeScale=t,this._model=i,this._grid=new Ni(this);const s=i.options();this._leftPriceScale=this._createPriceScale("left",s.leftPriceScale),this._rightPriceScale=this._createPriceScale("right",s.rightPriceScale),this._leftPriceScale.modeChanged().subscribe(this._onPriceScaleModeChanged.bind(this,this._leftPriceScale),this),this._rightPriceScale.modeChanged().subscribe(this._onPriceScaleModeChanged.bind(this,this._rightPriceScale),this),this.applyScaleOptions(s)}applyScaleOptions(t){if(t.leftPriceScale&&this._leftPriceScale.applyOptions(t.leftPriceScale),t.rightPriceScale&&this._rightPriceScale.applyOptions(t.rightPriceScale),t.localization&&(this._leftPriceScale.updateFormatter(),this._rightPriceScale.updateFormatter()),t.overlayPriceScales){const i=Array.from(this._overlaySourcesByScaleId.values());for(const s of i){const i=r(s[0].priceScale());i.applyOptions(t.overlayPriceScales),t.localization&&i.updateFormatter()}}}priceScaleById(t){switch(t){case"left":return this._leftPriceScale;case"right":return this._rightPriceScale}return this._overlaySourcesByScaleId.has(t)?n(this._overlaySourcesByScaleId.get(t))[0].priceScale():null}destroy(){this.model().priceScalesOptionsChanged().unsubscribeAll(this),this._leftPriceScale.modeChanged().unsubscribeAll(this),this._rightPriceScale.modeChanged().unsubscribeAll(this),this._dataSources.forEach((t=>{t.destroy&&t.destroy()})),this._destroyed.fire()}stretchFactor(){return this._stretchFactor}setStretchFactor(t){this._stretchFactor=t}model(){return this._model}width(){return this._width}height(){return this._height}setWidth(t){this._width=t,this.updateAllSources()}setHeight(t){this._height=t,this._leftPriceScale.setHeight(t),this._rightPriceScale.setHeight(t),this._dataSources.forEach((i=>{if(this.isOverlay(i)){const s=i.priceScale();null!==s&&s.setHeight(t)}})),this.updateAllSources()}dataSources(){return this._dataSources}isOverlay(t){const i=t.priceScale();return null===i||this._leftPriceScale!==i&&this._rightPriceScale!==i}addDataSource(t,i,s){const e=void 0!==s?s:this._getZOrderMinMax().maxZOrder+1;this._insertDataSource(t,i,e)}removeDataSource(t){const i=this._dataSources.indexOf(t);h(-1!==i,"removeDataSource: invalid data source"),this._dataSources.splice(i,1);const s=r(t.priceScale()).id();if(this._overlaySourcesByScaleId.has(s)){const i=n(this._overlaySourcesByScaleId.get(s)),e=i.indexOf(t);-1!==e&&(i.splice(e,1),0===i.length&&this._overlaySourcesByScaleId.delete(s))}const e=t.priceScale();e&&e.dataSources().indexOf(t)>=0&&e.removeDataSource(t),null!==e&&(e.invalidateSourcesCache(),this.recalculatePriceScale(e)),this._cachedOrderedSources=null}priceScalePosition(t){return t===this._leftPriceScale?"left":t===this._rightPriceScale?"right":"overlay"}leftPriceScale(){return this._leftPriceScale}rightPriceScale(){return this._rightPriceScale}startScalePrice(t,i){t.startScale(i)}scalePriceTo(t,i){t.scaleTo(i),this.updateAllSources()}endScalePrice(t){t.endScale()}startScrollPrice(t,i){t.startScroll(i)}scrollPriceTo(t,i){t.scrollTo(i),this.updateAllSources()}endScrollPrice(t){t.endScroll()}updateAllSources(){this._dataSources.forEach((t=>{t.updateAllViews()}))}defaultPriceScale(){let t=null;return this._model.options().rightPriceScale.visible&&0!==this._rightPriceScale.dataSources().length?t=this._rightPriceScale:this._model.options().leftPriceScale.visible&&0!==this._leftPriceScale.dataSources().length?t=this._leftPriceScale:0!==this._dataSources.length&&(t=this._dataSources[0].priceScale()),null===t&&(t=this._rightPriceScale),t}defaultVisiblePriceScale(){let t=null;return this._model.options().rightPriceScale.visible?t=this._rightPriceScale:this._model.options().leftPriceScale.visible&&(t=this._leftPriceScale),t}recalculatePriceScale(t){null!==t&&t.isAutoScale()&&this._recalculatePriceScaleImpl(t)}resetPriceScale(t){const i=this._timeScale.visibleStrictRange();t.setMode({autoScale:!0}),null!==i&&t.recalculatePriceRange(i),this.updateAllSources()}momentaryAutoScale(){this._recalculatePriceScaleImpl(this._leftPriceScale),this._recalculatePriceScaleImpl(this._rightPriceScale)}recalculate(){this.recalculatePriceScale(this._leftPriceScale),this.recalculatePriceScale(this._rightPriceScale),this._dataSources.forEach((t=>{this.isOverlay(t)&&this.recalculatePriceScale(t.priceScale())})),this.updateAllSources(),this._model.lightUpdate()}orderedSources(){return null===this._cachedOrderedSources&&(this._cachedOrderedSources=Ji(this._dataSources)),this._cachedOrderedSources}onDestroyed(){return this._destroyed}grid(){return this._grid}_recalculatePriceScaleImpl(t){const i=t.sourcesForAutoScale();if(i&&i.length>0&&!this._timeScale.isEmpty()){const i=this._timeScale.visibleStrictRange();null!==i&&t.recalculatePriceRange(i)}t.updateAllViews()}_getZOrderMinMax(){const t=this.orderedSources();if(0===t.length)return{minZOrder:0,maxZOrder:0};let i=0,s=0;for(let e=0;es&&(s=h))}return{minZOrder:i,maxZOrder:s}}_insertDataSource(t,i,s){let e=this.priceScaleById(i);if(null===e&&(e=this._createPriceScale(i,this._model.options().overlayPriceScales)),this._dataSources.push(t),!et(i)){const s=this._overlaySourcesByScaleId.get(i)||[];s.push(t),this._overlaySourcesByScaleId.set(i,s)}e.addDataSource(t),t.setPriceScale(e),t.setZorder(s),this.recalculatePriceScale(e),this._cachedOrderedSources=null}_onPriceScaleModeChanged(t,i,s){i.mode!==s.mode&&this._recalculatePriceScaleImpl(t)}_createPriceScale(t,i){const s=Object.assign({visible:!0,autoScale:!0},_(i)),e=new ss(t,s,this._model.options().layout,this._model.options().localization);return e.setHeight(this.height()),e}}const hs=t=>t.getUTCFullYear();function ns(t,i,s){return i.replace(/yyyy/g,(t=>rt(hs(t),4))(t)).replace(/yy/g,(t=>rt(hs(t)%100,2))(t)).replace(/MMMM/g,((t,i)=>new Date(t.getUTCFullYear(),t.getUTCMonth(),1).toLocaleString(i,{month:"long"}))(t,s)).replace(/MMM/g,((t,i)=>new Date(t.getUTCFullYear(),t.getUTCMonth(),1).toLocaleString(i,{month:"short"}))(t,s)).replace(/MM/g,(t=>rt((t=>t.getUTCMonth()+1)(t),2))(t)).replace(/dd/g,(t=>rt((t=>t.getUTCDate())(t),2))(t))}class rs{constructor(t="yyyy-MM-dd",i="default"){this._dateFormat=t,this._locale=i}format(t){return ns(t,this._dateFormat,this._locale)}}class os{constructor(t){this._formatStr=t||"%h:%m:%s"}format(t){return this._formatStr.replace("%h",rt(t.getUTCHours(),2)).replace("%m",rt(t.getUTCMinutes(),2)).replace("%s",rt(t.getUTCSeconds(),2))}}const ls={dateFormat:"yyyy-MM-dd",timeFormat:"%h:%m:%s",dateTimeSeparator:" ",locale:"default"};class as{constructor(t={}){const i=Object.assign(Object.assign({},ls),t);this._dateFormatter=new rs(i.dateFormat,i.locale),this._timeFormatter=new os(i.timeFormat),this._separator=i.dateTimeSeparator}format(t){return`${this._dateFormatter.format(t)}${this._separator}${this._timeFormatter.format(t)}`}}class us{constructor(t,i=50){this._actualSize=0,this._usageTick=1,this._oldestTick=1,this._cache=new Map,this._tick2Labels=new Map,this._format=t,this._maxSize=i}format(t){const i=t.time,s=void 0===i.businessDay?new Date(1e3*i.timestamp).getTime():new Date(Date.UTC(i.businessDay.year,i.businessDay.month-1,i.businessDay.day)).getTime(),e=this._cache.get(s);if(void 0!==e)return e.string;if(this._actualSize===this._maxSize){const t=this._tick2Labels.get(this._oldestTick);this._tick2Labels.delete(this._oldestTick),this._cache.delete(n(t)),this._oldestTick++,this._actualSize--}const h=this._format(t);return this._cache.set(s,{string:h,tick:this._usageTick}),this._tick2Labels.set(this._usageTick,s),this._actualSize++,this._usageTick++,h}}class cs{constructor(t,i){h(t<=i,"right should be >= left"),this._left=t,this._right=i}left(){return this._left}right(){return this._right}count(){return this._right-this._left+1}contains(t){return this._left<=t&&t<=this._right}equals(t){return this._left===t.left()&&this._right===t.right()}}function ds(t,i){return null===t||null===i?t===i:t.equals(i)}class fs{constructor(){this._marksByWeight=new Map,this._cache=null}setTimeScalePoints(t,i){this._removeMarksSinceIndex(i),this._cache=null;for(let s=i;s{t<=s[0].index?i.push(e):s.splice(St(s,t,(i=>i.indexi-t))){if(!this._marksByWeight.get(s))continue;const e=i;i=[];const h=e.length;let r=0;const o=n(this._marksByWeight.get(s)),l=o.length;let a=1/0,u=-1/0;for(let s=0;s=t&&l-u>=t&&(i.push(n),u=l)}for(;rthis._points[this._points.length-1].time.timestamp)return i?this._points.length-1:null;const s=St(this._points,t.timestamp,((t,i)=>t.time.timestamp0}visibleStrictRange(){return this._updateVisibleRange(),this._visibleRange.strictRange()}visibleLogicalRange(){return this._updateVisibleRange(),this._visibleRange.logicalRange()}visibleTimeRange(){const t=this.visibleStrictRange();if(null===t)return null;const i={from:t.left(),to:t.right()};return this.timeRangeForLogicalRange(i)}timeRangeForLogicalRange(t){const i=Math.round(t.from),s=Math.round(t.to),e=r(this._firstIndex()),h=r(this._lastIndex());return{from:r(this.indexToTime(Math.max(e,i))),to:r(this.indexToTime(Math.min(h,s)))}}logicalRangeForTimeRange(t){return{from:r(this.timeToIndex(t.from,!0)),to:r(this.timeToIndex(t.to,!0))}}width(){return this._width}setWidth(t){if(!isFinite(t)||t<=0)return;if(this._width===t)return;const i=this.visibleLogicalRange(),s=this._width;if(this._width=t,this._visibleRangeInvalidated=!0,this._options.lockVisibleTimeRangeOnResize&&0!==s){const i=this._barSpacing*t/s;this._barSpacing=i}if(this._options.fixLeftEdge&&null!==i&&i.left()<=0){const i=s-t;this._rightOffset-=Math.round(i/this._barSpacing)+1,this._visibleRangeInvalidated=!0}this._correctBarSpacing(),this._correctOffset()}indexToCoordinate(t){if(this.isEmpty()||!M(t))return 0;const i=this.baseIndex()+this._rightOffset-t;return this._width-(i+.5)*this._barSpacing-1}indexesToCoordinates(t,i){const s=this.baseIndex(),e=void 0===i?0:i.from,h=void 0===i?t.length:i.to;for(let i=e;ii/2&&!u?s.needAlignCoordinate=!1:s.needAlignCoordinate=c&&t.index<=l||d&&t.index>=a,f++}return this._labels.length=f,this._timeMarksCache=this._labels,this._labels}restoreDefault(){this._visibleRangeInvalidated=!0,this.setBarSpacing(this._options.barSpacing),this.setRightOffset(this._options.rightOffset)}setBaseIndex(t){this._visibleRangeInvalidated=!0,this._baseIndexOrNull=t,this._correctOffset(),this._doFixLeftEdge()}zoom(t,i){const s=this._coordinateToFloatIndex(t),e=this.barSpacing(),h=e+i*(e/10);this.setBarSpacing(h),this._options.rightBarStaysOnScroll||this.setRightOffset(this.rightOffset()+(s-this._coordinateToFloatIndex(t)))}startScale(t){this._scrollStartPoint&&this.endScroll(),null===this._scaleStartPoint&&null===this._commonTransitionStartState&&(this.isEmpty()||(this._scaleStartPoint=t,this._saveCommonTransitionsStartState()))}scaleTo(t){if(null===this._commonTransitionStartState)return;const i=Bt(this._width-t,0,this._width),s=Bt(this._width-r(this._scaleStartPoint),0,this._width);0!==i&&0!==s&&this.setBarSpacing(this._commonTransitionStartState.barSpacing*i/s)}endScale(){null!==this._scaleStartPoint&&(this._scaleStartPoint=null,this._clearCommonTransitionsStartState())}startScroll(t){null===this._scrollStartPoint&&null===this._commonTransitionStartState&&(this.isEmpty()||(this._scrollStartPoint=t,this._saveCommonTransitionsStartState()))}scrollTo(t){if(null===this._scrollStartPoint)return;const i=(this._scrollStartPoint-t)/this.barSpacing();this._rightOffset=r(this._commonTransitionStartState).rightOffset+i,this._visibleRangeInvalidated=!0,this._correctOffset()}endScroll(){null!==this._scrollStartPoint&&(this._scrollStartPoint=null,this._clearCommonTransitionsStartState())}scrollToRealTime(){this.scrollToOffsetAnimated(this._options.rightOffset)}scrollToOffsetAnimated(t,i=400){if(!isFinite(t))throw new RangeError("offset is required and must be finite number");if(!isFinite(i)||i<=0)throw new RangeError("animationDuration (optional) must be finite positive number");const s=this._rightOffset,e=performance.now();this._model.setTimeScaleAnimation({finished:t=>(t-e)/i>=1,getPosition:h=>{const n=(h-e)/i;return n>=1?t:s+(t-s)*n}})}update(t,i){this._visibleRangeInvalidated=!0,this._points=t,this._tickMarks.setTimeScalePoints(t,i),this._correctOffset()}visibleBarsChanged(){return this._visibleBarsChanged}logicalRangeChanged(){return this._logicalRangeChanged}optionsApplied(){return this._optionsApplied}baseIndex(){return this._baseIndexOrNull||0}setVisibleRange(t){const i=t.count();this._setBarSpacing(this._width/i),this._rightOffset=t.right()-this.baseIndex(),this._correctOffset(),this._visibleRangeInvalidated=!0,this._model.recalculateAllPanes(),this._model.lightUpdate()}fitContent(){const t=this._firstIndex(),i=this._lastIndex();null!==t&&null!==i&&this.setVisibleRange(new cs(t,i+this._options.rightOffset))}setLogicalRange(t){const i=new cs(t.from,t.to);this.setVisibleRange(i)}formatDateTime(t){return void 0!==this._localizationOptions.timeFormatter?this._localizationOptions.timeFormatter(t.originalTime):this._dateTimeFormatter.format(new Date(1e3*t.time.timestamp))}_isAllScalingAndScrollingDisabled(){const{handleScroll:t,handleScale:i}=this._model.options();return!(t.horzTouchDrag||t.mouseWheel||t.pressedMouseMove||t.vertTouchDrag||i.axisDoubleClickReset.time||i.axisPressedMouseMove.time||i.mouseWheel||i.pinch)}_firstIndex(){return 0===this._points.length?null:0}_lastIndex(){return 0===this._points.length?null:this._points.length-1}_rightOffsetForCoordinate(t){return(this._width-1-t)/this._barSpacing}_coordinateToFloatIndex(t){const i=this._rightOffsetForCoordinate(t),s=this.baseIndex()+this._rightOffset-i;return Math.round(1e6*s)/1e6}_setBarSpacing(t){const i=this._barSpacing;this._barSpacing=t,this._correctBarSpacing(),i!==this._barSpacing&&(this._visibleRangeInvalidated=!0,this._resetTimeMarksCache())}_updateVisibleRange(){if(!this._visibleRangeInvalidated)return;if(this._visibleRangeInvalidated=!1,this.isEmpty())return void this._setVisibleRange(ps.invalid());const t=this.baseIndex(),i=this._width/this._barSpacing,s=this._rightOffset+t,e=new cs(s-i+1,s);this._setVisibleRange(new ps(e))}_correctBarSpacing(){const t=this._minBarSpacing();if(this._barSpacingt&&(this._barSpacing=t,this._visibleRangeInvalidated=!0)}}_minBarSpacing(){return this._options.fixLeftEdge&&this._options.fixRightEdge&&0!==this._points.length?this._width/this._points.length:this._options.minBarSpacing}_correctOffset(){const t=this._maxRightOffset();this._rightOffset>t&&(this._rightOffset=t,this._visibleRangeInvalidated=!0);const i=this._minRightOffset();null!==i&&this._rightOffsetthis._formatLabelImpl(t))),this._formattedByWeight.set(t.weight,i)),i.format(t)}_formatLabelImpl(t){const i=function(t,i,s){switch(t){case 0:case 10:return i?s?4:3:2;case 20:case 21:case 22:case 30:case 31:case 32:case 33:return i?3:2;case 50:return 2;case 60:return 1;case 70:return 0}}(t.weight,this._options.timeVisible,this._options.secondsVisible);if(void 0!==this._options.tickMarkFormatter){const s=this._options.tickMarkFormatter(t.originalTime,i,this._localizationOptions.locale);if(null!==s)return s}return function(t,i,s){const e={};switch(i){case 0:e.year="numeric";break;case 1:e.month="short";break;case 2:e.day="numeric";break;case 3:e.hour12=!1,e.hour="2-digit",e.minute="2-digit";break;case 4:e.hour12=!1,e.hour="2-digit",e.minute="2-digit",e.second="2-digit"}const h=void 0===t.businessDay?new Date(1e3*t.timestamp):new Date(Date.UTC(t.businessDay.year,t.businessDay.month-1,t.businessDay.day));return new Date(h.getUTCFullYear(),h.getUTCMonth(),h.getUTCDate(),h.getUTCHours(),h.getUTCMinutes(),h.getUTCSeconds(),h.getUTCMilliseconds()).toLocaleString(s,e)}(t.time,i,this._localizationOptions.locale)}_setVisibleRange(t){const i=this._visibleRange;this._visibleRange=t,ds(i.strictRange(),this._visibleRange.strictRange())||this._visibleBarsChanged.fire(),ds(i.logicalRange(),this._visibleRange.logicalRange())||this._logicalRangeChanged.fire(),this._resetTimeMarksCache()}_resetTimeMarksCache(){this._timeMarksCache=null}_invalidateTickMarks(){this._resetTimeMarksCache(),this._formattedByWeight.clear()}_updateDateTimeFormatter(){const t=this._localizationOptions.dateFormat;this._options.timeVisible?this._dateTimeFormatter=new as({dateFormat:t,timeFormat:this._options.secondsVisible?"%h:%m:%s":"%h:%m",dateTimeSeparator:" ",locale:this._localizationOptions.locale}):this._dateTimeFormatter=new rs(t,this._localizationOptions.locale)}_doFixLeftEdge(){if(!this._options.fixLeftEdge)return;const t=this._firstIndex();if(null===t)return;const i=this.visibleStrictRange();if(null===i)return;const s=i.left()-t;if(s<0){const t=this._rightOffset-s-1;this.setRightOffset(t)}this._correctBarSpacing()}_doFixRightEdge(){this._correctOffset(),this._correctBarSpacing()}}class ys extends A{constructor(t){super(),this._metricsCache=new Map,this._data=t}_drawImpl(t){}_drawBackgroundImpl(t){if(!this._data.visible)return;const{context:i,mediaSize:s}=t;let e=0;for(const t of this._data.lines){if(0===t.text.length)continue;i.font=t.font;const h=this._metrics(i,t.text);h>s.width?t.zoom=s.width/h:t.zoom=1,e+=t.lineHeight*t.zoom}let h=0;switch(this._data.vertAlign){case"top":h=0;break;case"center":h=Math.max((s.height-e)/2,0);break;case"bottom":h=Math.max(s.height-e,0)}i.fillStyle=this._data.color;for(const t of this._data.lines){i.save();let e=0;switch(this._data.horzAlign){case"left":i.textAlign="left",e=t.lineHeight/2;break;case"center":i.textAlign="center",e=s.width/2;break;case"right":i.textAlign="right",e=s.width-1-t.lineHeight/2}i.translate(e,h),i.textBaseline="top",i.font=t.font,i.scale(t.zoom,t.zoom),i.fillText(t.text,0,t.vertOffset),i.restore(),h+=t.lineHeight*t.zoom}}_metrics(t,i){const s=this._fontCache(t.font);let e=s.get(i);return void 0===e&&(e=t.measureText(i).width,s.set(i,e)),e}_fontCache(t){let i=this._metricsCache.get(t);return void 0===i&&(i=new Map,this._metricsCache.set(t,i)),i}}class ks{constructor(t){this._invalidated=!0,this._rendererData={visible:!1,color:"",lines:[],vertAlign:"center",horzAlign:"center"},this._renderer=new ys(this._rendererData),this._source=t}update(){this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._renderer}_updateImpl(){const t=this._source.options(),i=this._rendererData;i.visible=t.visible,i.visible&&(i.color=t.color,i.horzAlign=t.horzAlign,i.vertAlign=t.vertAlign,i.lines=[{text:t.text,font:T(t.fontSize,t.fontFamily,t.fontStyle),lineHeight:1.2*t.fontSize,vertOffset:0,zoom:0}])}}class Cs extends G{constructor(t,i){super(),this._options=i,this._paneView=new ks(this)}priceAxisViews(){return[]}paneViews(){return[this._paneView]}options(){return this._options}updateAllViews(){this._paneView.update()}}!function(t){t[t.Top=0]="Top",t[t.Bottom=1]="Bottom"}(bs||(bs={})),function(t){t[t.OnTouchEnd=0]="OnTouchEnd",t[t.OnNextTap=1]="OnNextTap"}(gs||(gs={}));class Ts{constructor(t,i){this._panes=[],this._serieses=[],this._width=0,this._hoveredSource=null,this._priceScalesOptionsChanged=new b,this._crosshairMoved=new b,this._gradientColorsCache=null,this._invalidateHandler=t,this._options=i,this._rendererOptionsProvider=new R(this),this._timeScale=new _s(this,i.timeScale,this._options.localization),this._crosshair=new st(this,i.crosshair),this._magnet=new Li(i.crosshair),this._watermark=new Cs(this,i.watermark),this.createPane(),this._panes[0].setStretchFactor(2e3),this._backgroundTopColor=this._getBackgroundColor(0),this._backgroundBottomColor=this._getBackgroundColor(1)}fullUpdate(){this._invalidate(ht.full())}lightUpdate(){this._invalidate(ht.light())}cursorUpdate(){this._invalidate(new ht(1))}updateSource(t){const i=this._invalidationMaskForSource(t);this._invalidate(i)}hoveredSource(){return this._hoveredSource}setHoveredSource(t){const i=this._hoveredSource;this._hoveredSource=t,null!==i&&this.updateSource(i.source),null!==t&&this.updateSource(t.source)}options(){return this._options}applyOptions(t){g(this._options,t),this._panes.forEach((i=>i.applyScaleOptions(t))),void 0!==t.timeScale&&this._timeScale.applyOptions(t.timeScale),void 0!==t.localization&&this._timeScale.applyLocalizationOptions(t.localization),(t.leftPriceScale||t.rightPriceScale)&&this._priceScalesOptionsChanged.fire(),this._backgroundTopColor=this._getBackgroundColor(0),this._backgroundBottomColor=this._getBackgroundColor(1),this.fullUpdate()}applyPriceScaleOptions(t,i){if("left"===t)return void this.applyOptions({leftPriceScale:i});if("right"===t)return void this.applyOptions({rightPriceScale:i});const s=this.findPriceScale(t);null!==s&&(s.priceScale.applyOptions(i),this._priceScalesOptionsChanged.fire())}findPriceScale(t){for(const i of this._panes){const s=i.priceScaleById(t);if(null!==s)return{pane:i,priceScale:s}}return null}timeScale(){return this._timeScale}panes(){return this._panes}watermarkSource(){return this._watermark}crosshairSource(){return this._crosshair}crosshairMoved(){return this._crosshairMoved}setPaneHeight(t,i){t.setHeight(i),this.recalculateAllPanes()}setWidth(t){this._width=t,this._timeScale.setWidth(this._width),this._panes.forEach((i=>i.setWidth(t))),this.recalculateAllPanes()}createPane(t){const i=new es(this._timeScale,this);void 0!==t?this._panes.splice(t,0,i):this._panes.push(i);const s=void 0===t?this._panes.length-1:t,e=ht.full();return e.invalidatePane(s,{level:0,autoScale:!0}),this._invalidate(e),i}startScalePrice(t,i,s){t.startScalePrice(i,s)}scalePriceTo(t,i,s){t.scalePriceTo(i,s),this.updateCrosshair(),this._invalidate(this._paneInvalidationMask(t,2))}endScalePrice(t,i){t.endScalePrice(i),this._invalidate(this._paneInvalidationMask(t,2))}startScrollPrice(t,i,s){i.isAutoScale()||t.startScrollPrice(i,s)}scrollPriceTo(t,i,s){i.isAutoScale()||(t.scrollPriceTo(i,s),this.updateCrosshair(),this._invalidate(this._paneInvalidationMask(t,2)))}endScrollPrice(t,i){i.isAutoScale()||(t.endScrollPrice(i),this._invalidate(this._paneInvalidationMask(t,2)))}resetPriceScale(t,i){t.resetPriceScale(i),this._invalidate(this._paneInvalidationMask(t,2))}startScaleTime(t){this._timeScale.startScale(t)}zoomTime(t,i){const s=this.timeScale();if(s.isEmpty()||0===i)return;const e=s.width();t=Math.max(1,Math.min(t,e)),s.zoom(t,i),this.recalculateAllPanes()}scrollChart(t){this.startScrollTime(0),this.scrollTimeTo(t),this.endScrollTime()}scaleTimeTo(t){this._timeScale.scaleTo(t),this.recalculateAllPanes()}endScaleTime(){this._timeScale.endScale(),this.lightUpdate()}startScrollTime(t){this._timeScale.startScroll(t)}scrollTimeTo(t){this._timeScale.scrollTo(t),this.recalculateAllPanes()}endScrollTime(){this._timeScale.endScroll(),this.lightUpdate()}serieses(){return this._serieses}setAndSaveCurrentPosition(t,i,s,e){this._crosshair.saveOriginCoord(t,i);let h=NaN,n=this._timeScale.coordinateToIndex(t);const r=this._timeScale.visibleStrictRange();null!==r&&(n=Math.min(Math.max(r.left(),n),r.right()));const o=e.defaultPriceScale(),l=o.firstValue();null!==l&&(h=o.coordinateToPrice(i,l)),h=this._magnet.align(h,n,e),this._crosshair.setPosition(n,h,e),this.cursorUpdate(),this._crosshairMoved.fire(this._crosshair.appliedIndex(),{x:t,y:i},s)}setAndSaveCurrentPositionFire(t,i,s,e){this._crosshair.saveOriginCoord(t,i);let h=NaN,n=this._timeScale.coordinateToIndex(t);const r=this._timeScale.visibleStrictRange();null!==r&&(n=Math.min(Math.max(r.left(),n),r.right()));const o=e.defaultPriceScale(),l=o.firstValue();null!==l&&(h=o.coordinateToPrice(i,l)),h=this._magnet.align(h,n,e),this._crosshair.setPosition(n,h,e),this.cursorUpdate(),s&&this._crosshairMoved.fire(this._crosshair.appliedIndex(),{x:t,y:i},null)}clearCurrentPosition(){this.crosshairSource().clearPosition(),this.cursorUpdate(),this._crosshairMoved.fire(null,null,null)}updateCrosshair(){const t=this._crosshair.pane();if(null!==t){const i=this._crosshair.originCoordX(),s=this._crosshair.originCoordY();this.setAndSaveCurrentPosition(i,s,null,t)}this._crosshair.updateAllViews()}updateTimeScale(t,i,s){const e=this._timeScale.indexToTime(0);void 0!==i&&void 0!==s&&this._timeScale.update(i,s);const h=this._timeScale.indexToTime(0),n=this._timeScale.baseIndex(),r=this._timeScale.visibleStrictRange();if(null!==r&&null!==e&&null!==h){const i=r.contains(n),s=e.timestamp>h.timestamp,o=null!==t&&t>n&&!s,l=i&&this._timeScale.options().shiftVisibleRangeOnNewBar;if(o&&!l){const i=t-n;this._timeScale.setRightOffset(this._timeScale.rightOffset()-i)}}this._timeScale.setBaseIndex(t)}recalculatePane(t){null!==t&&t.recalculate()}paneForSource(t){const i=this._panes.find((i=>i.orderedSources().includes(t)));return void 0===i?null:i}recalculateAllPanes(){this._watermark.updateAllViews(),this._panes.forEach((t=>t.recalculate())),this.updateCrosshair()}destroy(){this._panes.forEach((t=>t.destroy())),this._panes.length=0,this._options.localization.priceFormatter=void 0,this._options.localization.percentageFormatter=void 0,this._options.localization.timeFormatter=void 0}rendererOptionsProvider(){return this._rendererOptionsProvider}priceAxisRendererOptions(){return this._rendererOptionsProvider.options()}priceScalesOptionsChanged(){return this._priceScalesOptionsChanged}createSeries(t,i){const s=this._panes[0],e=this._createSeries(i,t,s);return this._serieses.push(e),1===this._serieses.length?this.fullUpdate():this.lightUpdate(),e}removeSeries(t){const i=this.paneForSource(t),s=this._serieses.indexOf(t);h(-1!==s,"Series not found"),this._serieses.splice(s,1),r(i).removeDataSource(t),t.destroy&&t.destroy()}moveSeriesToScale(t,i){const s=r(this.paneForSource(t));s.removeDataSource(t);const e=this.findPriceScale(i);if(null===e){const e=t.zorder();s.addDataSource(t,i,e)}else{const h=e.pane===s?t.zorder():void 0;e.pane.addDataSource(t,i,h)}}fitContent(){const t=ht.light();t.setFitContent(),this._invalidate(t)}setTargetLogicalRange(t){const i=ht.light();i.applyRange(t),this._invalidate(i)}resetTimeScale(){const t=ht.light();t.resetTimeScale(),this._invalidate(t)}setBarSpacing(t){const i=ht.light();i.setBarSpacing(t),this._invalidate(i)}setRightOffset(t){const i=ht.light();i.setRightOffset(t),this._invalidate(i)}setTimeScaleAnimation(t){const i=ht.light();i.setTimeScaleAnimation(t),this._invalidate(i)}stopTimeScaleAnimation(){const t=ht.light();t.stopTimeScaleAnimation(),this._invalidate(t)}defaultVisiblePriceScaleId(){return this._options.rightPriceScale.visible?"right":"left"}backgroundBottomColor(){return this._backgroundBottomColor}backgroundTopColor(){return this._backgroundTopColor}backgroundColorAtYPercentFromTop(t){const i=this._backgroundBottomColor,s=this._backgroundTopColor;if(i===s)return i;if(t=Math.max(0,Math.min(100,Math.round(100*t))),null===this._gradientColorsCache||this._gradientColorsCache.topColor!==s||this._gradientColorsCache.bottomColor!==i)this._gradientColorsCache={topColor:s,bottomColor:i,colors:new Map};else{const i=this._gradientColorsCache.colors.get(t);if(void 0!==i)return i}const e=function(t,i,s){const[e,h,n,r]=m(t),[o,l,c,d]=m(i),f=[a(e+s*(o-e)),a(h+s*(l-h)),a(n+s*(c-n)),u(r+s*(d-r))];return`rgba(${f[0]}, ${f[1]}, ${f[2]}, ${f[3]})`}(s,i,t/100);return this._gradientColorsCache.colors.set(t,e),e}_paneInvalidationMask(t,i){const s=new ht(i);if(null!==t){const e=this._panes.indexOf(t);s.invalidatePane(e,{level:i})}return s}_invalidationMaskForSource(t,i){return void 0===i&&(i=2),this._paneInvalidationMask(this.paneForSource(t),i)}_invalidate(t){this._invalidateHandler&&this._invalidateHandler(t),this._panes.forEach((t=>t.grid().paneView().update()))}_createSeries(t,i,s){const e=new Bi(this,t,i),h=void 0!==t.priceScaleId?t.priceScaleId:this.defaultVisiblePriceScaleId();return s.addDataSource(e,h),et(h)||e.applyOptions(t),e}_getBackgroundColor(t){const i=this._options.layout;return"gradient"===i.background.type?0===t?i.background.topColor:i.background.bottomColor:i.background.color}}function Ps(t){return!w(t)&&!S(t)}function Rs(t){return w(t)}function Ds(t){var i=t.width,s=t.height;if(i<0)throw new Error("Negative width is not allowed for Size");if(s<0)throw new Error("Negative height is not allowed for Size");return{width:i,height:s}}function As(t,i){return t.width===i.width&&t.height===i.height}!function(t){t[t.Disabled=0]="Disabled",t[t.Continuous=1]="Continuous",t[t.OnDataUpdate=2]="OnDataUpdate"}(ws||(ws={})),function(t){t[t.LastPriceAndPercentageValue=0]="LastPriceAndPercentageValue",t[t.LastValueAccordingToScale=1]="LastValueAccordingToScale"}(Ms||(Ms={})),function(t){t[t.LastBar=0]="LastBar",t[t.LastVisible=1]="LastVisible"}(Ss||(Ss={})),function(t){t.Solid="solid",t.VerticalGradient="gradient"}(xs||(xs={}));var Es=function(){function t(t){var i=this;this._resolutionListener=function(){return i._onResolutionChanged()},this._resolutionMediaQueryList=null,this._observers=[],this._window=t,this._installResolutionListener()}return t.prototype.dispose=function(){this._uninstallResolutionListener(),this._window=null},Object.defineProperty(t.prototype,"value",{get:function(){return this._window.devicePixelRatio},enumerable:!1,configurable:!0}),t.prototype.subscribe=function(t){var i=this,s={next:t};return this._observers.push(s),{unsubscribe:function(){i._observers=i._observers.filter((function(t){return t!==s}))}}},t.prototype._installResolutionListener=function(){if(null!==this._resolutionMediaQueryList)throw new Error("Resolution listener is already installed");var t=this._window.devicePixelRatio;this._resolutionMediaQueryList=this._window.matchMedia("all and (resolution: ".concat(t,"dppx)")),this._resolutionMediaQueryList.addListener(this._resolutionListener)},t.prototype._uninstallResolutionListener=function(){null!==this._resolutionMediaQueryList&&(this._resolutionMediaQueryList.removeListener(this._resolutionListener),this._resolutionMediaQueryList=null)},t.prototype._reinstallResolutionListener=function(){this._uninstallResolutionListener(),this._installResolutionListener()},t.prototype._onResolutionChanged=function(){var t=this;this._observers.forEach((function(i){return i.next(t._window.devicePixelRatio)})),this._reinstallResolutionListener()},t}();var Os=function(){function t(t,i,s){var e;this._canvasElement=null,this._bitmapSizeChangedListeners=[],this._suggestedBitmapSize=null,this._suggestedBitmapSizeChangedListeners=[],this._devicePixelRatioObservable=null,this._canvasElementResizeObserver=null,this._canvasElement=t,this._canvasElementClientSize=Ds({width:this._canvasElement.clientWidth,height:this._canvasElement.clientHeight}),this._transformBitmapSize=null!=i?i:function(t){return t},this._allowResizeObserver=null===(e=null==s?void 0:s.allowResizeObserver)||void 0===e||e,this._chooseAndInitObserver()}return t.prototype.dispose=function(){var t,i;if(null===this._canvasElement)throw new Error("Object is disposed");null===(t=this._canvasElementResizeObserver)||void 0===t||t.disconnect(),this._canvasElementResizeObserver=null,null===(i=this._devicePixelRatioObservable)||void 0===i||i.dispose(),this._devicePixelRatioObservable=null,this._suggestedBitmapSizeChangedListeners.length=0,this._bitmapSizeChangedListeners.length=0,this._canvasElement=null},Object.defineProperty(t.prototype,"canvasElement",{get:function(){if(null===this._canvasElement)throw new Error("Object is disposed");return this._canvasElement},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"canvasElementClientSize",{get:function(){return this._canvasElementClientSize},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bitmapSize",{get:function(){return Ds({width:this.canvasElement.width,height:this.canvasElement.height})},enumerable:!1,configurable:!0}),t.prototype.resizeCanvasElement=function(t){this._canvasElementClientSize=Ds(t),this.canvasElement.style.width="".concat(this._canvasElementClientSize.width,"px"),this.canvasElement.style.height="".concat(this._canvasElementClientSize.height,"px"),this._invalidateBitmapSize()},t.prototype.subscribeBitmapSizeChanged=function(t){this._bitmapSizeChangedListeners.push(t)},t.prototype.unsubscribeBitmapSizeChanged=function(t){this._bitmapSizeChangedListeners=this._bitmapSizeChangedListeners.filter((function(i){return i!==t}))},Object.defineProperty(t.prototype,"suggestedBitmapSize",{get:function(){return this._suggestedBitmapSize},enumerable:!1,configurable:!0}),t.prototype.subscribeSuggestedBitmapSizeChanged=function(t){this._suggestedBitmapSizeChangedListeners.push(t)},t.prototype.unsubscribeSuggestedBitmapSizeChanged=function(t){this._suggestedBitmapSizeChangedListeners=this._suggestedBitmapSizeChangedListeners.filter((function(i){return i!==t}))},t.prototype.applySuggestedBitmapSize=function(){if(null!==this._suggestedBitmapSize){var t=this._suggestedBitmapSize;this._suggestedBitmapSize=null,this._resizeBitmap(t),this._emitSuggestedBitmapSizeChanged(t,this._suggestedBitmapSize)}},t.prototype._resizeBitmap=function(t){var i=this.bitmapSize;As(i,t)||(this.canvasElement.width=t.width,this.canvasElement.height=t.height,this._emitBitmapSizeChanged(i,t))},t.prototype._emitBitmapSizeChanged=function(t,i){var s=this;this._bitmapSizeChangedListeners.forEach((function(e){return e.call(s,t,i)}))},t.prototype._suggestNewBitmapSize=function(t){var i=this._suggestedBitmapSize,s=Ds(this._transformBitmapSize(t,this._canvasElementClientSize)),e=As(this.bitmapSize,s)?null:s;null===i&&null===e||null!==i&&null!==e&&As(i,e)||(this._suggestedBitmapSize=e,this._emitSuggestedBitmapSizeChanged(i,e))},t.prototype._emitSuggestedBitmapSizeChanged=function(t,i){var s=this;this._suggestedBitmapSizeChangedListeners.forEach((function(e){return e.call(s,t,i)}))},t.prototype._chooseAndInitObserver=function(){var t=this;this._allowResizeObserver?new Promise((function(t){var i=new ResizeObserver((function(s){t(s.every((function(t){return"devicePixelContentBoxSize"in t}))),i.disconnect()}));i.observe(document.body,{box:"device-pixel-content-box"})})).catch((function(){return!1})).then((function(i){return i?t._initResizeObserver():t._initDevicePixelRatioObservable()})):this._initDevicePixelRatioObservable()},t.prototype._initDevicePixelRatioObservable=function(){var t=this;if(null!==this._canvasElement){var i=Bs(this._canvasElement);if(null===i)throw new Error("No window is associated with the canvas");this._devicePixelRatioObservable=function(t){return new Es(t)}(i),this._devicePixelRatioObservable.subscribe((function(){return t._invalidateBitmapSize()})),this._invalidateBitmapSize()}},t.prototype._invalidateBitmapSize=function(){var t,i;if(null!==this._canvasElement){var s=Bs(this._canvasElement);if(null!==s){var e=null!==(i=null===(t=this._devicePixelRatioObservable)||void 0===t?void 0:t.value)&&void 0!==i?i:s.devicePixelRatio,h=this._canvasElement.getClientRects(),n=void 0!==h[0]?function(t,i){return Ds({width:Math.round(t.left*i+t.width*i)-Math.round(t.left*i),height:Math.round(t.top*i+t.height*i)-Math.round(t.top*i)})}(h[0],e):Ds({width:this._canvasElementClientSize.width*e,height:this._canvasElementClientSize.height*e});this._suggestNewBitmapSize(n)}}},t.prototype._initResizeObserver=function(){var t=this;null!==this._canvasElement&&(this._canvasElementResizeObserver=new ResizeObserver((function(i){var s=i.find((function(i){return i.target===t._canvasElement}));if(s&&s.devicePixelContentBoxSize&&s.devicePixelContentBoxSize[0]){var e=s.devicePixelContentBoxSize[0],h=Ds({width:e.inlineSize,height:e.blockSize});t._suggestNewBitmapSize(h)}})),this._canvasElementResizeObserver.observe(this._canvasElement,{box:"device-pixel-content-box"}))},t}();function Bs(t){return t.ownerDocument.defaultView}var Ls=function(){function t(t,i,s){if(0===i.width||0===i.height)throw new TypeError("Rendering target could only be created on a media with positive width and height");if(this._mediaSize=i,0===s.width||0===s.height)throw new TypeError("Rendering target could only be created using a bitmap with positive integer width and height");this._bitmapSize=s,this._context=t}return t.prototype.useMediaCoordinateSpace=function(t){try{return this._context.save(),this._context.setTransform(1,0,0,1,0,0),this._context.scale(this._horizontalPixelRatio,this._verticalPixelRatio),t({context:this._context,mediaSize:this._mediaSize})}finally{this._context.restore()}},t.prototype.useBitmapCoordinateSpace=function(t){try{return this._context.save(),this._context.setTransform(1,0,0,1,0,0),t({context:this._context,mediaSize:this._mediaSize,bitmapSize:this._bitmapSize,horizontalPixelRatio:this._horizontalPixelRatio,verticalPixelRatio:this._verticalPixelRatio})}finally{this._context.restore()}},Object.defineProperty(t.prototype,"_horizontalPixelRatio",{get:function(){return this._bitmapSize.width/this._mediaSize.width},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"_verticalPixelRatio",{get:function(){return this._bitmapSize.height/this._mediaSize.height},enumerable:!1,configurable:!0}),t}();function zs(t,i){var s=t.canvasElementClientSize;if(0===s.width||0===s.height)return null;var e=t.bitmapSize;if(0===e.width||0===e.height)return null;var h=t.canvasElement.getContext("2d",i);return null===h?null:new Ls(h,s,e)}const Is="undefined"!=typeof window;function Ns(){return!!Is&&window.navigator.userAgent.toLowerCase().indexOf("firefox")>-1}function Vs(){return!!Is&&/iPhone|iPad|iPod/.test(window.navigator.platform)}function Fs(t){return t+t%2}var Ws,js,Hs,$s,Us,qs,Ys,Xs;function Zs(t,i){return t.position-i.position}function Ks(t,i,s){const e=(t.position-i.position)/(t.time-i.time);return Math.sign(e)*Math.min(Math.abs(e),s)}!function(t){t[t.MaxStartDelay=50]="MaxStartDelay",t[t.EpsilonDistance=1]="EpsilonDistance"}(Ws||(Ws={}));class Gs{constructor(t,i,s,e){this._position1=null,this._position2=null,this._position3=null,this._position4=null,this._animationStartPosition=null,this._durationMsecs=0,this._speedPxPerMsec=0,this._minSpeed=t,this._maxSpeed=i,this._dumpingCoeff=s,this._minMove=e}addPosition(t,i){if(null!==this._position1){if(this._position1.time===i)return void(this._position1.position=t);if(Math.abs(this._position1.position-t)50)return;let s=0;const e=Ks(this._position1,this._position2,this._maxSpeed),h=Zs(this._position1,this._position2),n=[e],r=[h];if(s+=h,null!==this._position3){const t=Ks(this._position2,this._position3,this._maxSpeed);if(Math.sign(t)===Math.sign(e)){const i=Zs(this._position2,this._position3);if(n.push(t),r.push(i),s+=i,null!==this._position4){const t=Ks(this._position3,this._position4,this._maxSpeed);if(Math.sign(t)===Math.sign(e)){const i=Zs(this._position3,this._position4);n.push(t),r.push(i),s+=i}}}}let o=0;for(let t=0;t({width:Math.max(t.width,i.width),height:Math.max(t.height,i.height)})});return e.resizeCanvasElement(i),e}function Qs(t){Is&&void 0!==window.chrome&&t.addEventListener("mousedown",(t=>{if(1===t.button)return t.preventDefault(),!1}))}!function(t){t[t.ResetClick=500]="ResetClick",t[t.LongTap=240]="LongTap",t[t.PreventFiresTouchEvents=500]="PreventFiresTouchEvents"}(js||(js={})),function(t){t[t.CancelClickManhattanDistance=5]="CancelClickManhattanDistance",t[t.CancelTapManhattanDistance=5]="CancelTapManhattanDistance",t[t.DoubleClickManhattanDistance=5]="DoubleClickManhattanDistance",t[t.DoubleTapManhattanDistance=30]="DoubleTapManhattanDistance"}(Hs||(Hs={}));class te{constructor(t,i,s){this._clickCount=0,this._clickTimeoutId=null,this._clickPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._tapCount=0,this._tapTimeoutId=null,this._tapPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._longTapTimeoutId=null,this._longTapActive=!1,this._mouseMoveStartPosition=null,this._touchMoveStartPosition=null,this._touchMoveExceededManhattanDistance=!1,this._cancelClick=!1,this._cancelTap=!1,this._unsubscribeOutsideMouseEvents=null,this._unsubscribeOutsideTouchEvents=null,this._unsubscribeMobileSafariEvents=null,this._unsubscribeMousemove=null,this._unsubscribeRootMouseEvents=null,this._unsubscribeRootTouchEvents=null,this._startPinchMiddlePoint=null,this._startPinchDistance=0,this._pinchPrevented=!1,this._preventTouchDragProcess=!1,this._mousePressed=!1,this._lastTouchEventTimeStamp=0,this._activeTouchId=null,this._acceptMouseLeave=!Vs(),this._onFirefoxOutsideMouseUp=t=>{this._mouseUpHandler(t)},this._onMobileSafariDoubleClick=t=>{if(this._firesTouchEvents(t)){const i=this._makeCompatEvent(t);if(++this._tapCount,this._tapTimeoutId&&this._tapCount>1){const{manhattanDistance:s}=this._touchMouseMoveWithDownInfo(ee(t),this._tapPosition);s<30&&!this._cancelTap&&this._processTouchEvent(i,this._handler.doubleTapEvent),this._resetTapTimeout()}}else{const i=this._makeCompatEvent(t);if(++this._clickCount,this._clickTimeoutId&&this._clickCount>1){const{manhattanDistance:s}=this._touchMouseMoveWithDownInfo(ee(t),this._clickPosition);s<5&&!this._cancelClick&&this._processMouseEvent(i,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}}},this._target=t,this._handler=i,this._options=s,this._init()}destroy(){null!==this._unsubscribeOutsideMouseEvents&&(this._unsubscribeOutsideMouseEvents(),this._unsubscribeOutsideMouseEvents=null),null!==this._unsubscribeOutsideTouchEvents&&(this._unsubscribeOutsideTouchEvents(),this._unsubscribeOutsideTouchEvents=null),null!==this._unsubscribeMousemove&&(this._unsubscribeMousemove(),this._unsubscribeMousemove=null),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null),null!==this._unsubscribeMobileSafariEvents&&(this._unsubscribeMobileSafariEvents(),this._unsubscribeMobileSafariEvents=null),this._clearLongTapTimeout(),this._resetClickTimeout()}_mouseEnterHandler(t){this._unsubscribeMousemove&&this._unsubscribeMousemove();const i=this._mouseMoveHandler.bind(this);if(this._unsubscribeMousemove=()=>{this._target.removeEventListener("mousemove",i)},this._target.addEventListener("mousemove",i),this._firesTouchEvents(t))return;const s=this._makeCompatEvent(t);this._processMouseEvent(s,this._handler.mouseEnterEvent),this._acceptMouseLeave=!0}_resetClickTimeout(){null!==this._clickTimeoutId&&clearTimeout(this._clickTimeoutId),this._clickCount=0,this._clickTimeoutId=null,this._clickPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}}_resetTapTimeout(){null!==this._tapTimeoutId&&clearTimeout(this._tapTimeoutId),this._tapCount=0,this._tapTimeoutId=null,this._tapPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}}_mouseMoveHandler(t){if(this._mousePressed||null!==this._touchMoveStartPosition)return;if(this._firesTouchEvents(t))return;const i=this._makeCompatEvent(t);this._processMouseEvent(i,this._handler.mouseMoveEvent),this._acceptMouseLeave=!0}_touchMoveHandler(t){const i=ne(t.changedTouches,r(this._activeTouchId));if(null===i)return;if(this._lastTouchEventTimeStamp=he(t),null!==this._startPinchMiddlePoint)return;if(this._preventTouchDragProcess)return;this._pinchPrevented=!0;const s=this._touchMouseMoveWithDownInfo(ee(i),r(this._touchMoveStartPosition)),{xOffset:e,yOffset:h,manhattanDistance:n}=s;if(this._touchMoveExceededManhattanDistance||!(n<5)){if(!this._touchMoveExceededManhattanDistance){const t=.5*e,i=h>=t&&!this._options.treatVertTouchDragAsPageScroll(),s=t>h&&!this._options.treatHorzTouchDragAsPageScroll();i||s||(this._preventTouchDragProcess=!0),this._touchMoveExceededManhattanDistance=!0,this._cancelTap=!0,this._clearLongTapTimeout(),this._resetTapTimeout()}if(!this._preventTouchDragProcess){const s=this._makeCompatEvent(t,i);this._processTouchEvent(s,this._handler.touchMoveEvent),se(t)}}}_mouseMoveWithDownHandler(t){if(0!==t.button)return;const i=this._touchMouseMoveWithDownInfo(ee(t),r(this._mouseMoveStartPosition)),{manhattanDistance:s}=i;if(s>=5&&(this._cancelClick=!0,this._resetClickTimeout()),this._cancelClick){const i=this._makeCompatEvent(t);this._processMouseEvent(i,this._handler.pressedMouseMoveEvent)}}_touchMouseMoveWithDownInfo(t,i){const s=Math.abs(i.x-t.x),e=Math.abs(i.y-t.y);return{xOffset:s,yOffset:e,manhattanDistance:s+e}}_touchEndHandler(t){let i=ne(t.changedTouches,r(this._activeTouchId));if(null===i&&0===t.touches.length&&(i=t.changedTouches[0]),null===i)return;this._activeTouchId=null,this._lastTouchEventTimeStamp=he(t),this._clearLongTapTimeout(),this._touchMoveStartPosition=null,this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);const s=this._makeCompatEvent(t,i);if(this._processTouchEvent(s,this._handler.touchEndEvent),++this._tapCount,this._tapTimeoutId&&this._tapCount>1){const{manhattanDistance:t}=this._touchMouseMoveWithDownInfo(ee(i),this._tapPosition);t<30&&!this._cancelTap&&this._processTouchEvent(s,this._handler.doubleTapEvent),this._resetTapTimeout()}else this._cancelTap||(this._processTouchEvent(s,this._handler.tapEvent),this._handler.tapEvent&&se(t));0===this._tapCount&&se(t),0===t.touches.length&&this._longTapActive&&(this._longTapActive=!1,se(t))}_mouseUpHandler(t){if(0!==t.button)return;const i=this._makeCompatEvent(t);if(this._mouseMoveStartPosition=null,this._mousePressed=!1,this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),Ns()){this._target.ownerDocument.documentElement.removeEventListener("mouseleave",this._onFirefoxOutsideMouseUp)}if(!this._firesTouchEvents(t))if(this._processMouseEvent(i,this._handler.mouseUpEvent),++this._clickCount,this._clickTimeoutId&&this._clickCount>1){const{manhattanDistance:s}=this._touchMouseMoveWithDownInfo(ee(t),this._clickPosition);s<5&&!this._cancelClick&&this._processMouseEvent(i,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}else this._cancelClick||this._processMouseEvent(i,this._handler.mouseClickEvent)}_clearLongTapTimeout(){null!==this._longTapTimeoutId&&(clearTimeout(this._longTapTimeoutId),this._longTapTimeoutId=null)}_touchStartHandler(t){if(null!==this._activeTouchId)return;const i=t.changedTouches[0];this._activeTouchId=i.identifier,this._lastTouchEventTimeStamp=he(t);const s=this._target.ownerDocument.documentElement;this._cancelTap=!1,this._touchMoveExceededManhattanDistance=!1,this._preventTouchDragProcess=!1,this._touchMoveStartPosition=ee(i),this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);{const i=this._touchMoveHandler.bind(this),e=this._touchEndHandler.bind(this);this._unsubscribeRootTouchEvents=()=>{s.removeEventListener("touchmove",i),s.removeEventListener("touchend",e)},s.addEventListener("touchmove",i,{passive:!1}),s.addEventListener("touchend",e,{passive:!1}),this._clearLongTapTimeout(),this._longTapTimeoutId=setTimeout(this._longTapHandler.bind(this,t),240)}const e=this._makeCompatEvent(t,i);this._processTouchEvent(e,this._handler.touchStartEvent),this._tapTimeoutId||(this._tapCount=0,this._tapTimeoutId=setTimeout(this._resetTapTimeout.bind(this),500),this._tapPosition=ee(i))}_mouseDownHandler(t){if(0!==t.button)return;const i=this._target.ownerDocument.documentElement;Ns()&&i.addEventListener("mouseleave",this._onFirefoxOutsideMouseUp),this._cancelClick=!1,this._mouseMoveStartPosition=ee(t),this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null);{const t=this._mouseMoveWithDownHandler.bind(this),s=this._mouseUpHandler.bind(this);this._unsubscribeRootMouseEvents=()=>{i.removeEventListener("mousemove",t),i.removeEventListener("mouseup",s)},i.addEventListener("mousemove",t),i.addEventListener("mouseup",s)}if(this._mousePressed=!0,this._firesTouchEvents(t))return;const s=this._makeCompatEvent(t);this._processMouseEvent(s,this._handler.mouseDownEvent),this._clickTimeoutId||(this._clickCount=0,this._clickTimeoutId=setTimeout(this._resetClickTimeout.bind(this),500),this._clickPosition=ee(t))}_init(){this._target.addEventListener("mouseenter",this._mouseEnterHandler.bind(this)),this._target.addEventListener("touchcancel",this._clearLongTapTimeout.bind(this));{const t=this._target.ownerDocument,i=t=>{this._handler.mouseDownOutsideEvent&&(t.composed&&this._target.contains(t.composedPath()[0])||t.target&&this._target.contains(t.target)||this._handler.mouseDownOutsideEvent())};this._unsubscribeOutsideTouchEvents=()=>{t.removeEventListener("touchstart",i)},this._unsubscribeOutsideMouseEvents=()=>{t.removeEventListener("mousedown",i)},t.addEventListener("mousedown",i),t.addEventListener("touchstart",i,{passive:!0})}Vs()&&(this._unsubscribeMobileSafariEvents=()=>{this._target.removeEventListener("dblclick",this._onMobileSafariDoubleClick)},this._target.addEventListener("dblclick",this._onMobileSafariDoubleClick)),this._target.addEventListener("mouseleave",this._mouseLeaveHandler.bind(this)),this._target.addEventListener("touchstart",this._touchStartHandler.bind(this),{passive:!0}),Qs(this._target),this._target.addEventListener("mousedown",this._mouseDownHandler.bind(this)),this._initPinch(),this._target.addEventListener("touchmove",(()=>{}),{passive:!1})}_initPinch(){void 0===this._handler.pinchStartEvent&&void 0===this._handler.pinchEvent&&void 0===this._handler.pinchEndEvent||(this._target.addEventListener("touchstart",(t=>this._checkPinchState(t.touches)),{passive:!0}),this._target.addEventListener("touchmove",(t=>{if(2===t.touches.length&&null!==this._startPinchMiddlePoint&&void 0!==this._handler.pinchEvent){const i=ie(t.touches[0],t.touches[1])/this._startPinchDistance;this._handler.pinchEvent(this._startPinchMiddlePoint,i),se(t)}}),{passive:!1}),this._target.addEventListener("touchend",(t=>{this._checkPinchState(t.touches)})))}_checkPinchState(t){1===t.length&&(this._pinchPrevented=!1),2!==t.length||this._pinchPrevented||this._longTapActive?this._stopPinch():this._startPinch(t)}_startPinch(t){const i=this._target.getBoundingClientRect()||{left:0,top:0};this._startPinchMiddlePoint={x:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,y:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this._startPinchDistance=ie(t[0],t[1]),void 0!==this._handler.pinchStartEvent&&this._handler.pinchStartEvent(),this._clearLongTapTimeout()}_stopPinch(){null!==this._startPinchMiddlePoint&&(this._startPinchMiddlePoint=null,void 0!==this._handler.pinchEndEvent&&this._handler.pinchEndEvent())}_mouseLeaveHandler(t){if(this._unsubscribeMousemove&&this._unsubscribeMousemove(),this._firesTouchEvents(t))return;if(!this._acceptMouseLeave)return;const i=this._makeCompatEvent(t);this._processMouseEvent(i,this._handler.mouseLeaveEvent),this._acceptMouseLeave=!Vs()}_longTapHandler(t){const i=ne(t.touches,r(this._activeTouchId));if(null===i)return;const s=this._makeCompatEvent(t,i);this._processTouchEvent(s,this._handler.longTapEvent),this._cancelTap=!0,this._longTapActive=!0}_firesTouchEvents(t){return t.sourceCapabilities&&void 0!==t.sourceCapabilities.firesTouchEvents?t.sourceCapabilities.firesTouchEvents:he(t){"touchstart"!==t.type&&se(t)}}}}function ie(t,i){const s=t.clientX-i.clientX,e=t.clientY-i.clientY;return Math.sqrt(s*s+e*e)}function se(t){t.cancelable&&t.preventDefault()}function ee(t){return{x:t.pageX,y:t.pageY}}function he(t){return t.timeStamp||performance.now()}function ne(t,i){for(let s=0;s{this._isSettingSize||this._pane.chart().model().lightUpdate()},this._topCanvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||this._pane.chart().model().lightUpdate()},this._pane=t,this._options=i,this._layoutOptions=i.layout,this._rendererOptionsProvider=s,this._isLeft="left"===e,this._cell=document.createElement("div"),this._cell.style.height="100%",this._cell.style.overflow="hidden",this._cell.style.width="25px",this._cell.style.left="0",this._cell.style.position="relative",this._canvasBinding=Js(this._cell,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler);const h=this._canvasBinding.canvasElement;h.style.position="absolute",h.style.zIndex="1",h.style.left="0",h.style.top="0",this._topCanvasBinding=Js(this._cell,Ds({width:16,height:16})),this._topCanvasBinding.subscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler);const n=this._topCanvasBinding.canvasElement;n.style.position="absolute",n.style.zIndex="2",n.style.left="0",n.style.top="0";const r={mouseDownEvent:this._mouseDownEvent.bind(this),touchStartEvent:this._mouseDownEvent.bind(this),pressedMouseMoveEvent:this._pressedMouseMoveEvent.bind(this),touchMoveEvent:this._pressedMouseMoveEvent.bind(this),mouseDownOutsideEvent:this._mouseDownOutsideEvent.bind(this),mouseUpEvent:this._mouseUpEvent.bind(this),touchEndEvent:this._mouseUpEvent.bind(this),mouseDoubleClickEvent:this._mouseDoubleClickEvent.bind(this),doubleTapEvent:this._mouseDoubleClickEvent.bind(this),mouseEnterEvent:this._mouseEnterEvent.bind(this),mouseLeaveEvent:this._mouseLeaveEvent.bind(this)};this._mouseEventHandler=new te(this._topCanvasBinding.canvasElement,r,{treatVertTouchDragAsPageScroll:()=>!1,treatHorzTouchDragAsPageScroll:()=>!0})}destroy(){this._mouseEventHandler.destroy(),this._topCanvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler),this._topCanvasBinding.dispose(),this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose(),null!==this._priceScale&&this._priceScale.onMarksChanged().unsubscribeAll(this),this._priceScale=null}getElement(){return this._cell}fontSize(){return this._layoutOptions.fontSize}rendererOptions(){const t=this._rendererOptionsProvider.options();return this._font!==t.font&&(this._widthCache.reset(),this._font=t.font),t}optimalWidth(){if(null===this._priceScale)return 0;let t=0;const i=this.rendererOptions(),s=r(this._canvasBinding.canvasElement.getContext("2d"));s.save();const e=this._priceScale.marks();s.font=this._baseFont(),e.length>0&&(t=Math.max(this._widthCache.measureText(s,e[0].label),this._widthCache.measureText(s,e[e.length-1].label)));const h=this._backLabels();for(let i=h.length;i--;){const e=this._widthCache.measureText(s,h[i].text());e>t&&(t=e)}const n=this._priceScale.firstValue();if(null!==n&&null!==this._size){const i=this._priceScale.coordinateToPrice(1,n),e=this._priceScale.coordinateToPrice(this._size.height-2,n);t=Math.max(t,this._widthCache.measureText(s,this._priceScale.formatPrice(Math.floor(Math.min(i,e))+.11111111111111,n)),this._widthCache.measureText(s,this._priceScale.formatPrice(Math.ceil(Math.max(i,e))-.11111111111111,n)))}s.restore();const o=t||34;return Fs(Math.ceil(i.borderSize+i.tickLength+i.paddingInner+i.paddingOuter+5+o))}setSize(t){null!==this._size&&As(this._size,t)||(this._size=t,this._isSettingSize=!0,this._canvasBinding.resizeCanvasElement(t),this._topCanvasBinding.resizeCanvasElement(t),this._isSettingSize=!1,this._cell.style.width=`${t.width}px`,this._cell.style.height=`${t.height}px`)}getWidth(){return r(this._size).width}setPriceScale(t){this._priceScale!==t&&(null!==this._priceScale&&this._priceScale.onMarksChanged().unsubscribeAll(this),this._priceScale=t,t.onMarksChanged().subscribe(this._onMarksChanged.bind(this),this))}priceScale(){return this._priceScale}reset(){const t=this._pane.state();this._pane.chart().model().resetPriceScale(t,r(this.priceScale()))}paint(t){if(null===this._size)return;if(1!==t){this._alignLabels(),this._canvasBinding.applySuggestedBitmapSize();const t=zs(this._canvasBinding);null!==t&&(t.useBitmapCoordinateSpace((t=>{this._drawBackground(t),this._drawBorder(t)})),this._drawTickMarks(t),this._drawBackLabels(t))}this._topCanvasBinding.applySuggestedBitmapSize();const i=zs(this._topCanvasBinding);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this._drawCrosshairLabel(i))}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}update(){var t;null===(t=this._priceScale)||void 0===t||t.marks()}_mouseDownEvent(t){if(null===this._priceScale||this._priceScale.isEmpty()||!this._options.handleScale.axisPressedMouseMove.price)return;const i=this._pane.chart().model(),s=this._pane.state();this._mousedown=!0,i.startScalePrice(s,this._priceScale,t.localY)}_pressedMouseMoveEvent(t){if(null===this._priceScale||!this._options.handleScale.axisPressedMouseMove.price)return;const i=this._pane.chart().model(),s=this._pane.state(),e=this._priceScale;i.scalePriceTo(s,e,t.localY)}_mouseDownOutsideEvent(){if(null===this._priceScale||!this._options.handleScale.axisPressedMouseMove.price)return;const t=this._pane.chart().model(),i=this._pane.state(),s=this._priceScale;this._mousedown&&(this._mousedown=!1,t.endScalePrice(i,s))}_mouseUpEvent(t){if(null===this._priceScale||!this._options.handleScale.axisPressedMouseMove.price)return;const i=this._pane.chart().model(),s=this._pane.state();this._mousedown=!1,i.endScalePrice(s,this._priceScale)}_mouseDoubleClickEvent(t){this._options.handleScale.axisDoubleClickReset.price&&this.reset()}_mouseEnterEvent(t){if(null===this._priceScale)return;!this._pane.chart().model().options().handleScale.axisPressedMouseMove.price||this._priceScale.isPercentage()||this._priceScale.isIndexedTo100()||this._setCursor(1)}_mouseLeaveEvent(t){this._setCursor(0)}_backLabels(){const t=[],i=null===this._priceScale?void 0:this._priceScale;return(s=>{for(let e=0;e{t.fillStyle=s.borderColor;const o=Math.max(1,Math.floor(r)),l=Math.floor(.5*r),a=Math.round(e.tickLength*n);t.beginPath();for(const s of i)t.rect(Math.floor(h*n),Math.round(s.coord*r)-l,a,o);t.fill()})),t.useMediaCoordinateSpace((({context:t})=>{var n;t.font=this._baseFont(),t.fillStyle=null!==(n=s.textColor)&&void 0!==n?n:this._layoutOptions.textColor,t.textAlign=this._isLeft?"right":"left",t.textBaseline="middle";const r=this._isLeft?Math.round(h-e.paddingInner):Math.round(h+e.tickLength+e.paddingInner),o=i.map((i=>this._widthCache.yMidCorrection(t,i.label)));for(let s=i.length;s--;){const e=i[s];t.fillText(e.label,r,e.coord+o[s])}}))}_alignLabels(){if(null===this._size||null===this._priceScale)return;let t=this._size.height/2;const i=[],s=this._priceScale.orderedSources().slice(),e=this._pane.state(),h=this.rendererOptions();this._priceScale===e.defaultVisiblePriceScale()&&this._pane.state().orderedSources().forEach((t=>{e.isOverlay(t)&&s.push(t)}));const n=this._priceScale.dataSources()[0],r=this._priceScale;s.forEach((s=>{const h=s.priceAxisViews(e,r);h.forEach((t=>{t.setFixedCoordinate(null),t.isVisible()&&i.push(t)})),n===s&&h.length>0&&(t=h[0].coordinate())})),i.forEach((t=>t.setFixedCoordinate(t.coordinate())));this._priceScale.options().alignLabels&&this._fixLabelOverlap(i,h,t)}_fixLabelOverlap(t,i,s){if(null===this._size)return;const e=t.filter((t=>t.coordinate()<=s)),h=t.filter((t=>t.coordinate()>s));e.sort(((t,i)=>i.coordinate()-t.coordinate())),e.length&&h.length&&h.push(e[0]),h.sort(((t,i)=>t.coordinate()-i.coordinate()));for(const s of t){const t=Math.floor(s.height(i)/2),e=s.coordinate();e>-t&&ethis._size.height-t&&eo-n&&s.setFixedCoordinate(o-n)}for(let t=1;t{if(i.isAxisLabelVisible()){i.renderer(r(this._priceScale)).draw(t,s,this._widthCache,e)}}))}_drawCrosshairLabel(t){if(null===this._size||null===this._priceScale)return;const i=this._pane.chart().model(),s=[],e=this._pane.state(),h=i.crosshairSource().priceAxisViews(e,this._priceScale);h.length&&s.push(h);const n=this.rendererOptions(),o=this._isLeft?"right":"left";s.forEach((i=>{i.forEach((i=>{i.renderer(r(this._priceScale)).draw(t,n,this._widthCache,o)}))}))}_setCursor(t){this._cell.style.cursor=1===t?"ns-resize":"default"}_onMarksChanged(){const t=this.optimalWidth();this._prevOptimalWidth{this._isSettingSize||null===this._state||this._model().lightUpdate()},this._topCanvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||null===this._state||this._model().lightUpdate()},this._chart=t,this._state=i,this._state.onDestroyed().subscribe(this._onStateDestroyed.bind(this),this,!0),this._paneCell=document.createElement("td"),this._paneCell.style.padding="0",this._paneCell.style.position="relative";const s=document.createElement("div");s.style.width="100%",s.style.height="100%",s.style.position="relative",s.style.overflow="hidden",this._leftAxisCell=document.createElement("td"),this._leftAxisCell.style.padding="0",this._rightAxisCell=document.createElement("td"),this._rightAxisCell.style.padding="0",this._paneCell.appendChild(s),this._canvasBinding=Js(s,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler);const e=this._canvasBinding.canvasElement;e.style.position="absolute",e.style.zIndex="1",e.style.left="0",e.style.top="0",this._topCanvasBinding=Js(s,Ds({width:16,height:16})),this._topCanvasBinding.subscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler);const h=this._topCanvasBinding.canvasElement;h.style.position="absolute",h.style.zIndex="2",h.style.left="0",h.style.top="0",this._rowElement=document.createElement("tr"),this._rowElement.appendChild(this._leftAxisCell),this._rowElement.appendChild(this._paneCell),this._rowElement.appendChild(this._rightAxisCell),this.updatePriceAxisWidgetsStates(),this._mouseEventHandler=new te(this._topCanvasBinding.canvasElement,this,{treatVertTouchDragAsPageScroll:()=>null===this._startTrackPoint&&!this._chart.options().handleScroll.vertTouchDrag,treatHorzTouchDragAsPageScroll:()=>null===this._startTrackPoint&&!this._chart.options().handleScroll.horzTouchDrag})}destroy(){null!==this._leftPriceAxisWidget&&this._leftPriceAxisWidget.destroy(),null!==this._rightPriceAxisWidget&&this._rightPriceAxisWidget.destroy(),this._topCanvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler),this._topCanvasBinding.dispose(),this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose(),null!==this._state&&this._state.onDestroyed().unsubscribeAll(this),this._mouseEventHandler.destroy()}state(){return r(this._state)}setState(t){null!==this._state&&this._state.onDestroyed().unsubscribeAll(this),this._state=t,null!==this._state&&this._state.onDestroyed().subscribe(de.prototype._onStateDestroyed.bind(this),this,!0),this.updatePriceAxisWidgetsStates()}chart(){return this._chart}getElement(){return this._rowElement}updatePriceAxisWidgetsStates(){if(null!==this._state&&(this._recreatePriceAxisWidgets(),0!==this._model().serieses().length)){if(null!==this._leftPriceAxisWidget){const t=this._state.leftPriceScale();this._leftPriceAxisWidget.setPriceScale(r(t))}if(null!==this._rightPriceAxisWidget){const t=this._state.rightPriceScale();this._rightPriceAxisWidget.setPriceScale(r(t))}}}updatePriceAxisWidgets(){null!==this._leftPriceAxisWidget&&this._leftPriceAxisWidget.update(),null!==this._rightPriceAxisWidget&&this._rightPriceAxisWidget.update()}stretchFactor(){return null!==this._state?this._state.stretchFactor():0}setStretchFactor(t){this._state&&this._state.setStretchFactor(t)}mouseEnterEvent(t){if(!this._state)return;this._onMouseEvent();const i=t.localX,s=t.localY;this._setCrosshairPosition(i,s,t)}mouseDownEvent(t){this._onMouseEvent(),this._mouseTouchDownEvent(),this._setCrosshairPosition(t.localX,t.localY,t)}mouseMoveEvent(t){if(!this._state)return;this._onMouseEvent();const i=t.localX,s=t.localY;this._setCrosshairPosition(i,s,t);const e=this.hitTest(i,s);this._model().setHoveredSource(e&&{source:e.source,object:e.object})}mouseClickEvent(t){null!==this._state&&(this._onMouseEvent(),this._fireClickedDelegate(t))}pressedMouseMoveEvent(t){this._onMouseEvent(),this._pressedMouseTouchMoveEvent(t),this._setCrosshairPosition(t.localX,t.localY,t)}mouseUpEvent(t){null!==this._state&&(this._onMouseEvent(),this._longTap=!1,this._endScroll(t))}tapEvent(t){null!==this._state&&this._fireClickedDelegate(t)}longTapEvent(t){if(this._longTap=!0,null===this._startTrackPoint){const i={x:t.localX,y:t.localY};this._startTrackingMode(i,i,t)}}mouseLeaveEvent(t){null!==this._state&&(this._onMouseEvent(),this._state.model().setHoveredSource(null),this._clearCrosshairPosition())}clicked(){return this._clicked}pinchStartEvent(){this._prevPinchScale=1,this._model().stopTimeScaleAnimation()}pinchEvent(t,i){if(!this._chart.options().handleScale.pinch)return;const s=5*(i-this._prevPinchScale);this._prevPinchScale=i,this._model().zoomTime(t.x,s)}touchStartEvent(t){if(this._longTap=!1,this._exitTrackingModeOnNextTry=null!==this._startTrackPoint,this._mouseTouchDownEvent(),null!==this._startTrackPoint){const i=this._model().crosshairSource();this._initCrosshairPosition={x:i.appliedX(),y:i.appliedY()},this._startTrackPoint={x:t.localX,y:t.localY}}}touchMoveEvent(t){if(null===this._state)return;const i=t.localX,s=t.localY;if(null===this._startTrackPoint)this._pressedMouseTouchMoveEvent(t);else{this._exitTrackingModeOnNextTry=!1;const e=r(this._initCrosshairPosition),h=e.x+(i-this._startTrackPoint.x),n=e.y+(s-this._startTrackPoint.y);this._setCrosshairPosition(h,n,t)}}touchEndEvent(t){0===this.chart().options().trackingMode.exitMode&&(this._exitTrackingModeOnNextTry=!0),this._tryExitTrackingMode(),this._endScroll(t)}hitTest(t,i){const s=this._state;if(null===s)return null;const e=s.orderedSources();for(const h of e){const e=this._hitTestPaneView(h.paneViews(s),t,i);if(null!==e)return{source:h,view:e.view,object:e.object}}return null}setPriceAxisSize(t,i){r("left"===i?this._leftPriceAxisWidget:this._rightPriceAxisWidget).setSize(Ds({width:t,height:this._size.height}))}getSize(){return this._size}setSize(t){As(this._size,t)||(this._size=t,this._isSettingSize=!0,this._canvasBinding.resizeCanvasElement(t),this._topCanvasBinding.resizeCanvasElement(t),this._isSettingSize=!1,this._paneCell.style.width=t.width+"px",this._paneCell.style.height=t.height+"px")}recalculatePriceScales(){const t=r(this._state);t.recalculatePriceScale(t.leftPriceScale()),t.recalculatePriceScale(t.rightPriceScale());for(const i of t.dataSources())if(t.isOverlay(i)){const s=i.priceScale();null!==s&&t.recalculatePriceScale(s),i.updateAllViews()}}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}paint(t){if(0===t)return;if(null===this._state)return;if(t>1&&this.recalculatePriceScales(),null!==this._leftPriceAxisWidget&&this._leftPriceAxisWidget.paint(t),null!==this._rightPriceAxisWidget&&this._rightPriceAxisWidget.paint(t),1!==t){this._canvasBinding.applySuggestedBitmapSize();const t=zs(this._canvasBinding);null!==t&&(t.useBitmapCoordinateSpace((t=>{this._drawBackground(t)})),this._state&&(this._drawGrid(t),this._drawWatermark(t),this._drawSources(t,ae),this._drawSources(t,ue)))}this._topCanvasBinding.applySuggestedBitmapSize();const i=zs(this._topCanvasBinding);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this._drawSources(i,ce),this._drawCrosshair(i))}leftPriceAxisWidget(){return this._leftPriceAxisWidget}rightPriceAxisWidget(){return this._rightPriceAxisWidget}setCrosshair(t,i,s){if(this._state)if(s){const s=t,e=i;this._setCrosshairPositionNoFire(s,e)}else this._state.model().setHoveredSource(null),this._clearCrosshairPosition()}_onStateDestroyed(){null!==this._state&&this._state.onDestroyed().unsubscribeAll(this),this._state=null}_fireClickedDelegate(t){const i=t.localX,s=t.localY;this._clicked.hasListeners()&&this._clicked.fire(this._model().timeScale().coordinateToIndex(i),{x:i,y:s},t)}_drawBackground({context:t,bitmapSize:i}){const{width:s,height:e}=i,h=this._model(),n=h.backgroundTopColor(),r=h.backgroundBottomColor();n===r?F(t,0,0,s,e,r):$(t,0,0,s,e,n,r)}_drawGrid(t){const i=r(this._state).grid().paneView().renderer();null!==i&&i.draw(t,!1)}_drawWatermark(t){const i=this._model().watermarkSource();this._drawSourceImpl(t,ae,oe,i),this._drawSourceImpl(t,ae,le,i)}_drawCrosshair(t){this._drawSourceImpl(t,ae,le,this._model().crosshairSource())}_drawSources(t,i){const s=r(this._state).orderedSources();for(const e of s)this._drawSourceImpl(t,i,oe,e);for(const e of s)this._drawSourceImpl(t,i,le,e)}_drawSourceImpl(t,i,s,e){const h=r(this._state),n=i(e,h),o=h.model().hoveredSource(),l=null!==o&&o.source===e,a=null!==o&&l&&void 0!==o.object?o.object.hitTestData:void 0;for(const i of n){const e=i.renderer();null!==e&&s(e,t,l,a)}}_hitTestPaneView(t,i,s){for(const e of t){const t=e.renderer();if(null!==t&&t.hitTest){const h=t.hitTest(i,s);if(null!==h)return{view:e,object:h}}}return null}_recreatePriceAxisWidgets(){if(null===this._state)return;const t=this._chart,i=this._state.leftPriceScale().options().visible,s=this._state.rightPriceScale().options().visible;i||null===this._leftPriceAxisWidget||(this._leftAxisCell.removeChild(this._leftPriceAxisWidget.getElement()),this._leftPriceAxisWidget.destroy(),this._leftPriceAxisWidget=null),s||null===this._rightPriceAxisWidget||(this._rightAxisCell.removeChild(this._rightPriceAxisWidget.getElement()),this._rightPriceAxisWidget.destroy(),this._rightPriceAxisWidget=null);const e=t.model().rendererOptionsProvider();i&&null===this._leftPriceAxisWidget&&(this._leftPriceAxisWidget=new re(this,t.options(),e,"left"),this._leftAxisCell.appendChild(this._leftPriceAxisWidget.getElement())),s&&null===this._rightPriceAxisWidget&&(this._rightPriceAxisWidget=new re(this,t.options(),e,"right"),this._rightAxisCell.appendChild(this._rightPriceAxisWidget.getElement()))}_preventScroll(t){return t.isTouch&&this._longTap||null!==this._startTrackPoint}_correctXCoord(t){return Math.max(0,Math.min(t,this._size.width-1))}_correctYCoord(t){return Math.max(0,Math.min(t,this._size.height-1))}_setCrosshairPosition(t,i,s){this._model().setAndSaveCurrentPosition(this._correctXCoord(t),this._correctYCoord(i),s,r(this._state))}_setCrosshairPositionNoFire(t,i){this._model().setAndSaveCurrentPositionFire(this._correctXCoord(t),this._correctYCoord(i),!1,r(this._state))}_clearCrosshairPosition(){this._model().clearCurrentPosition()}_tryExitTrackingMode(){this._exitTrackingModeOnNextTry&&(this._startTrackPoint=null,this._clearCrosshairPosition())}_startTrackingMode(t,i,s){this._startTrackPoint=t,this._exitTrackingModeOnNextTry=!1,this._setCrosshairPosition(i.x,i.y,s);const e=this._model().crosshairSource();this._initCrosshairPosition={x:e.appliedX(),y:e.appliedY()}}_model(){return this._chart.model()}_endScroll(t){if(!this._isScrolling)return;const i=this._model(),s=this.state();if(i.endScrollPrice(s,s.defaultPriceScale()),this._startScrollingPos=null,this._isScrolling=!1,i.endScrollTime(),null!==this._scrollXAnimation){const t=performance.now(),s=i.timeScale();this._scrollXAnimation.start(s.rightOffset(),t),this._scrollXAnimation.finished(t)||i.setTimeScaleAnimation(this._scrollXAnimation)}}_onMouseEvent(){this._startTrackPoint=null}_mouseTouchDownEvent(){if(!this._state)return;if(this._model().stopTimeScaleAnimation(),document.activeElement!==document.body&&document.activeElement!==document.documentElement)r(document.activeElement).blur();else{const t=document.getSelection();null!==t&&t.removeAllRanges()}!this._state.defaultPriceScale().isEmpty()&&this._model().timeScale().isEmpty()}_pressedMouseTouchMoveEvent(t){if(null===this._state)return;const i=this._model(),s=i.timeScale();if(s.isEmpty())return;const e=this._chart.options(),h=e.handleScroll,n=e.kineticScroll;if((!h.pressedMouseMove||t.isTouch)&&(!h.horzTouchDrag&&!h.vertTouchDrag||!t.isTouch))return;const r=this._state.defaultPriceScale(),o=performance.now();if(null!==this._startScrollingPos||this._preventScroll(t)||(this._startScrollingPos={x:t.clientX,y:t.clientY,timestamp:o,localX:t.localX,localY:t.localY}),null!==this._startScrollingPos&&!this._isScrolling&&(this._startScrollingPos.x!==t.clientX||this._startScrollingPos.y!==t.clientY)){if(t.isTouch&&n.touch||!t.isTouch&&n.mouse){const t=s.barSpacing();this._scrollXAnimation=new Gs(.2/t,7/t,.997,15/t),this._scrollXAnimation.addPosition(s.rightOffset(),this._startScrollingPos.timestamp)}else this._scrollXAnimation=null;r.isEmpty()||i.startScrollPrice(this._state,r,t.localY),i.startScrollTime(t.localX),this._isScrolling=!0}this._isScrolling&&(r.isEmpty()||i.scrollPriceTo(this._state,r,t.localY),i.scrollTimeTo(t.localX),null!==this._scrollXAnimation&&this._scrollXAnimation.addPosition(s.rightOffset(),o))}}class fe{constructor(t,i,s,e,h){this._invalidated=!0,this._size=Ds({width:0,height:0}),this._canvasSuggestedBitmapSizeChangedHandler=()=>this.paint(3),this._isLeft="left"===t,this._rendererOptionsProvider=s.rendererOptionsProvider,this._options=i,this._borderVisible=e,this._bottomColor=h,this._cell=document.createElement("div"),this._cell.style.width="25px",this._cell.style.height="100%",this._cell.style.overflow="hidden",this._canvasBinding=Js(this._cell,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler)}destroy(){this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose()}getElement(){return this._cell}getSize(){return this._size}setSize(t){As(this._size,t)||(this._size=t,this._canvasBinding.resizeCanvasElement(t),this._cell.style.width=`${t.width}px`,this._cell.style.height=`${t.height}px`,this._invalidated=!0)}paint(t){if(t<3&&!this._invalidated)return;if(0===this._size.width||0===this._size.height)return;this._invalidated=!1,this._canvasBinding.applySuggestedBitmapSize();const i=zs(this._canvasBinding);null!==i&&i.useBitmapCoordinateSpace((t=>{this._drawBackground(t),this._drawBorder(t)}))}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}_drawBorder({context:t,bitmapSize:i,horizontalPixelRatio:s,verticalPixelRatio:e}){if(!this._borderVisible())return;t.fillStyle=this._options.timeScale.borderColor;const h=Math.floor(this._rendererOptionsProvider.options().borderSize*s),n=Math.floor(this._rendererOptionsProvider.options().borderSize*e),r=this._isLeft?i.width-h:0;t.fillRect(r,0,h,n)}_drawBackground({context:t,bitmapSize:i}){F(t,0,0,i.width,i.height,this._bottomColor())}}function pe(t,i){return t.weight>i.weight?t:i}!function(t){t[t.BorderSize=1]="BorderSize",t[t.TickLength=5]="TickLength"}(Ys||(Ys={})),function(t){t[t.Default=0]="Default",t[t.EwResize=1]="EwResize"}(Xs||(Xs={}));class me{constructor(t){this._leftStub=null,this._rightStub=null,this._rendererOptions=null,this._mouseDown=!1,this._size=Ds({width:0,height:0}),this._sizeChanged=new b,this._widthCache=new Yt(5),this._isSettingSize=!1,this._canvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||this._chart.model().lightUpdate()},this._topCanvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||this._chart.model().lightUpdate()},this._chart=t,this._options=t.options().layout,this._element=document.createElement("tr"),this._leftStubCell=document.createElement("td"),this._leftStubCell.style.padding="0",this._rightStubCell=document.createElement("td"),this._rightStubCell.style.padding="0",this._cell=document.createElement("td"),this._cell.style.height="25px",this._cell.style.padding="0",this._dv=document.createElement("div"),this._dv.style.width="100%",this._dv.style.height="100%",this._dv.style.position="relative",this._dv.style.overflow="hidden",this._cell.appendChild(this._dv),this._canvasBinding=Js(this._dv,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler);const i=this._canvasBinding.canvasElement;i.style.position="absolute",i.style.zIndex="1",i.style.left="0",i.style.top="0",this._topCanvasBinding=Js(this._dv,Ds({width:16,height:16})),this._topCanvasBinding.subscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler);const s=this._topCanvasBinding.canvasElement;s.style.position="absolute",s.style.zIndex="2",s.style.left="0",s.style.top="0",this._element.appendChild(this._leftStubCell),this._element.appendChild(this._cell),this._element.appendChild(this._rightStubCell),this._recreateStubs(),this._chart.model().priceScalesOptionsChanged().subscribe(this._recreateStubs.bind(this),this),this._mouseEventHandler=new te(this._topCanvasBinding.canvasElement,this,{treatVertTouchDragAsPageScroll:()=>!0,treatHorzTouchDragAsPageScroll:()=>!1})}destroy(){this._mouseEventHandler.destroy(),null!==this._leftStub&&this._leftStub.destroy(),null!==this._rightStub&&this._rightStub.destroy(),this._topCanvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler),this._topCanvasBinding.dispose(),this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose()}getElement(){return this._element}leftStub(){return this._leftStub}rightStub(){return this._rightStub}mouseDownEvent(t){if(this._mouseDown)return;this._mouseDown=!0;const i=this._chart.model();!i.timeScale().isEmpty()&&this._chart.options().handleScale.axisPressedMouseMove.time&&i.startScaleTime(t.localX)}touchStartEvent(t){this.mouseDownEvent(t)}mouseDownOutsideEvent(){const t=this._chart.model();!t.timeScale().isEmpty()&&this._mouseDown&&(this._mouseDown=!1,this._chart.options().handleScale.axisPressedMouseMove.time&&t.endScaleTime())}pressedMouseMoveEvent(t){const i=this._chart.model();!i.timeScale().isEmpty()&&this._chart.options().handleScale.axisPressedMouseMove.time&&i.scaleTimeTo(t.localX)}touchMoveEvent(t){this.pressedMouseMoveEvent(t)}mouseUpEvent(){this._mouseDown=!1;const t=this._chart.model();t.timeScale().isEmpty()&&!this._chart.options().handleScale.axisPressedMouseMove.time||t.endScaleTime()}touchEndEvent(){this.mouseUpEvent()}mouseDoubleClickEvent(){this._chart.options().handleScale.axisDoubleClickReset.time&&this._chart.model().resetTimeScale()}doubleTapEvent(){this.mouseDoubleClickEvent()}mouseEnterEvent(){this._chart.model().options().handleScale.axisPressedMouseMove.time&&this._setCursor(1)}mouseLeaveEvent(){this._setCursor(0)}getSize(){return this._size}sizeChanged(){return this._sizeChanged}setSizes(t,i,s){As(this._size,t)||(this._size=t,this._isSettingSize=!0,this._canvasBinding.resizeCanvasElement(t),this._topCanvasBinding.resizeCanvasElement(t),this._isSettingSize=!1,this._cell.style.width=`${t.width}px`,this._cell.style.height=`${t.height}px`,this._sizeChanged.fire(t)),null!==this._leftStub&&this._leftStub.setSize(Ds({width:i,height:t.height})),null!==this._rightStub&&this._rightStub.setSize(Ds({width:s,height:t.height}))}optimalHeight(){const t=this._getRendererOptions();return Math.ceil(t.borderSize+t.tickLength+t.fontSize+t.paddingTop+t.paddingBottom+t.labelBottomOffset)}update(){this._chart.model().timeScale().marks()}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}paint(t){if(0===t)return;if(1!==t){this._canvasBinding.applySuggestedBitmapSize();const i=zs(this._canvasBinding);null!==i&&(i.useBitmapCoordinateSpace((t=>{this._drawBackground(t),this._drawBorder(t)})),this._drawTickMarks(i)),null!==this._leftStub&&this._leftStub.paint(t),null!==this._rightStub&&this._rightStub.paint(t)}this._topCanvasBinding.applySuggestedBitmapSize();const i=zs(this._topCanvasBinding);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this._drawLabels([this._chart.model().crosshairSource()],i))}_drawBackground({context:t,bitmapSize:i}){F(t,0,0,i.width,i.height,this._chart.model().backgroundBottomColor())}_drawBorder({context:t,bitmapSize:i,verticalPixelRatio:s}){if(this._chart.options().timeScale.borderVisible){t.fillStyle=this._lineColor();const e=Math.max(1,Math.floor(this._getRendererOptions().borderSize*s));t.fillRect(0,0,i.width,e)}}_drawTickMarks(t){const i=this._chart.model().timeScale(),s=i.marks();if(!s||0===s.length)return;let e=s.reduce(pe,s[0]).weight;e>30&&e<50&&(e=30);const h=this._getRendererOptions(),n=i.options();n.borderVisible&&n.ticksVisible&&t.useBitmapCoordinateSpace((({context:t,horizontalPixelRatio:i,verticalPixelRatio:e})=>{t.strokeStyle=this._lineColor(),t.fillStyle=this._lineColor();const n=Math.max(1,Math.floor(i)),r=Math.floor(.5*i);t.beginPath();const o=Math.round(h.tickLength*e);for(let e=s.length;e--;){const h=Math.round(s[e].coord*i);t.rect(h-r,0,n,o)}t.fill()})),t.useMediaCoordinateSpace((({context:t})=>{const i=h.borderSize+h.tickLength+h.paddingTop+h.fontSize/2;t.textAlign="center",t.textBaseline="middle",t.fillStyle=this._textColor(),t.font=this._baseFont();for(const h of s)if(h.weight=e){const s=h.needAlignCoordinate?this._alignTickMarkLabelCoordinate(t,h.coord,h.label):h.coord;t.fillText(h.label,s,i)}}))}_alignTickMarkLabelCoordinate(t,i,s){const e=this._widthCache.measureText(t,s),h=e/2,n=Math.floor(i-h)+.5;return n<0?i+=Math.abs(0-n):n+e>this._size.width&&(i-=Math.abs(this._size.width-(n+e))),i}_drawLabels(t,i){const s=this._getRendererOptions();for(const e of t)for(const t of e.timeAxisViews())t.renderer().draw(i,s)}_lineColor(){return this._chart.options().timeScale.borderColor}_textColor(){return this._options.textColor}_fontSize(){return this._options.fontSize}_baseFont(){return T(this._fontSize(),this._options.fontFamily)}_baseBoldFont(){return T(this._fontSize(),this._options.fontFamily,"bold")}_getRendererOptions(){null===this._rendererOptions&&(this._rendererOptions={borderSize:1,baselineOffset:NaN,paddingTop:NaN,paddingBottom:NaN,paddingHorizontal:NaN,tickLength:5,fontSize:NaN,font:"",widthCache:new Yt,labelBottomOffset:0});const t=this._rendererOptions,i=this._baseFont();if(t.font!==i){const s=this._fontSize();t.fontSize=s,t.font=i,t.paddingTop=3*s/12,t.paddingBottom=3*s/12,t.paddingHorizontal=9*s/12,t.baselineOffset=0,t.labelBottomOffset=4*s/12,t.widthCache.reset()}return this._rendererOptions}_setCursor(t){this._cell.style.cursor=1===t?"ew-resize":"default"}_recreateStubs(){const t=this._chart.model(),i=t.options();i.leftPriceScale.visible||null===this._leftStub||(this._leftStubCell.removeChild(this._leftStub.getElement()),this._leftStub.destroy(),this._leftStub=null),i.rightPriceScale.visible||null===this._rightStub||(this._rightStubCell.removeChild(this._rightStub.getElement()),this._rightStub.destroy(),this._rightStub=null);const s={rendererOptionsProvider:this._chart.model().rendererOptionsProvider()},e=()=>i.leftPriceScale.borderVisible&&t.timeScale().options().borderVisible,h=()=>t.backgroundBottomColor();i.leftPriceScale.visible&&null===this._leftStub&&(this._leftStub=new fe("left",i,s,e,h),this._leftStubCell.appendChild(this._leftStub.getElement())),i.rightPriceScale.visible&&null===this._rightStub&&(this._rightStub=new fe("right",i,s,e,h),this._rightStubCell.appendChild(this._rightStub.getElement()))}}const ve=!!Is&&!!navigator.userAgentData&&navigator.userAgentData.brands.some((t=>t.brand.includes("Chromium")))&&!!Is&&((null===(be=null===navigator||void 0===navigator?void 0:navigator.userAgentData)||void 0===be?void 0:be.platform)?"Windows"===navigator.userAgentData.platform:navigator.userAgent.toLowerCase().indexOf("win")>=0);var be;class ge{constructor(t,i){var s;this._paneWidgets=[],this._drawRafId=0,this._height=0,this._width=0,this._leftPriceAxisWidth=0,this._rightPriceAxisWidth=0,this._invalidateMask=null,this._drawPlanned=!1,this._clicked=new b,this._crosshairMoved=new b,this._observer=null,this._container=t,this._options=i,this._element=document.createElement("div"),this._element.classList.add("tv-lightweight-charts"),this._element.style.overflow="hidden",this._element.style.direction="ltr",this._element.style.width="100%",this._element.style.height="100%",(s=this._element).style.userSelect="none",s.style.webkitUserSelect="none",s.style.msUserSelect="none",s.style.MozUserSelect="none",s.style.webkitTapHighlightColor="transparent",this._tableElement=document.createElement("table"),this._tableElement.setAttribute("cellspacing","0"),this._element.appendChild(this._tableElement),this._onWheelBound=this._onMousewheel.bind(this),we(this._options)&&this._setMouseWheelEventListener(!0),this._model=new Ts(this._invalidateHandler.bind(this),this._options),this.model().crosshairMoved().subscribe(this._onPaneWidgetCrosshairMoved.bind(this),this),this._timeAxisWidget=new me(this),this._tableElement.appendChild(this._timeAxisWidget.getElement());const e=i.autoSize&&this._installObserver();let h=this._options.width,n=this._options.height;if(e||0===h||0===n){const i=t.getBoundingClientRect();h=h||i.width,n=n||i.height}this.resize(h,n),this._syncGuiWithModel(),t.appendChild(this._element),this._updateTimeAxisVisibility(),this._model.timeScale().optionsApplied().subscribe(this._model.fullUpdate.bind(this._model),this),this._model.priceScalesOptionsChanged().subscribe(this._model.fullUpdate.bind(this._model),this)}model(){return this._model}options(){return this._options}paneWidgets(){return this._paneWidgets}timeAxisWidget(){return this._timeAxisWidget}destroy(){this._setMouseWheelEventListener(!1),0!==this._drawRafId&&window.cancelAnimationFrame(this._drawRafId),this._model.crosshairMoved().unsubscribeAll(this),this._model.timeScale().optionsApplied().unsubscribeAll(this),this._model.priceScalesOptionsChanged().unsubscribeAll(this),this._model.destroy();for(const t of this._paneWidgets)this._tableElement.removeChild(t.getElement()),t.clicked().unsubscribeAll(this),t.destroy();this._paneWidgets=[],r(this._timeAxisWidget).destroy(),null!==this._element.parentElement&&this._element.parentElement.removeChild(this._element),this._crosshairMoved.destroy(),this._clicked.destroy(),this._uninstallObserver()}resize(t,i,s=!1){if(this._height===i&&this._width===t)return;const e=function(t){const i=Math.floor(t.width),s=Math.floor(t.height);return Ds({width:i-i%2,height:s-s%2})}(Ds({width:t,height:i}));this._height=e.height,this._width=e.width;const h=this._height+"px",n=this._width+"px";r(this._element).style.height=h,r(this._element).style.width=n,this._tableElement.style.height=h,this._tableElement.style.width=n,s?this._drawImpl(ht.full(),performance.now()):this._model.fullUpdate()}paint(t){void 0===t&&(t=ht.full());for(let i=0;i{let e=0;for(let h=0;h{r("left"===i?this._timeAxisWidget.leftStub():this._timeAxisWidget.rightStub()).drawBitmap(r(t),s,e)};if(this._options.timeScale.visible){const i=this._timeAxisWidget.getBitmapSize();if(null!==t){let h=0;this._isLeftAxisVisible()&&(n("left",h,s),h=r(e.leftPriceAxisWidget()).getBitmapSize().width),this._timeAxisWidget.drawBitmap(t,h,s),h+=i.width,this._isRightAxisVisible()&&n("right",h,s)}s+=i.height}return Ds({width:i,height:s})}_adjustSizeImpl(){let t=0,i=0,s=0;for(const e of this._paneWidgets)this._isLeftAxisVisible()&&(i=Math.max(i,r(e.leftPriceAxisWidget()).optimalWidth())),this._isRightAxisVisible()&&(s=Math.max(s,r(e.rightPriceAxisWidget()).optimalWidth())),t+=e.stretchFactor();i=Fs(i),s=Fs(s);const e=this._width,h=this._height,n=Math.max(e-i-s,0),o=this._options.timeScale.visible;let l=o?this._timeAxisWidget.optimalHeight():0;var a;l=(a=l)+a%2;const u=0+l,c=h{t.updatePriceAxisWidgets()})),3===(null===(s=this._invalidateMask)||void 0===s?void 0:s.fullInvalidation())&&(this._invalidateMask.merge(t),this._updateGui(),this._applyMomentaryAutoScale(this._invalidateMask),this._applyTimeScaleInvalidations(this._invalidateMask,i),t=this._invalidateMask,this._invalidateMask=null)),this.paint(t)}_applyTimeScaleInvalidations(t,i){for(const s of t.timeScaleInvalidations())this._applyTimeScaleInvalidation(s,i)}_applyMomentaryAutoScale(t){const i=this._model.panes();for(let s=0;s{if(this._drawPlanned=!1,this._drawRafId=0,null!==this._invalidateMask){const i=this._invalidateMask;this._invalidateMask=null,this._drawImpl(i,t);for(const s of i.timeScaleInvalidations())if(5===s.type&&!s.value.finished(t)){this.model().setTimeScaleAnimation(s.value);break}}})))}_updateGui(){this._syncGuiWithModel()}_syncGuiWithModel(){const t=this._model.panes(),i=t.length,s=this._paneWidgets.length;for(let t=i;t{const s=i.bars().search(t);null!==s&&h.set(i,s)}))}let n;if(null!==t){const i=null===(e=this._model.timeScale().indexToTimeScalePoint(t))||void 0===e?void 0:e.originalTime;void 0!==i&&(n=i)}const r=this.model().hoveredSource(),o=null!==r&&r.source instanceof Bi?r.source:void 0,l=null!==r&&void 0!==r.object?r.object.externalId:void 0;return{time:n,index:null!=t?t:void 0,point:null!=i?i:void 0,hoveredSeries:o,seriesData:h,hoveredObject:l,touchMouseEventData:null!=s?s:void 0}}_onPaneWidgetClicked(t,i,s){this._clicked.fire((()=>this._getMouseEventParamsImpl(t,i,s)))}_onPaneWidgetCrosshairMoved(t,i,s){this._crosshairMoved.fire((()=>this._getMouseEventParamsImpl(t,i,s)))}_updateTimeAxisVisibility(){const t=this._options.timeScale.visible?"":"none";this._timeAxisWidget.getElement().style.display=t}_isLeftAxisVisible(){return this._paneWidgets[0].state().leftPriceScale().options().visible}_isRightAxisVisible(){return this._paneWidgets[0].state().rightPriceScale().options().visible}_installObserver(){return"ResizeObserver"in window&&(this._observer=new ResizeObserver((t=>{const i=t.find((t=>t.target===this._container));i&&this.resize(i.contentRect.width,i.contentRect.height)})),this._observer.observe(this._container,{box:"border-box"}),!0)}_uninstallObserver(){null!==this._observer&&this._observer.disconnect()}}function we(t){return Boolean(t.handleScroll.mouseWheel||t.handleScale.mouseWheel)}function Me(t,i,s,e){const h=s.value,n={index:i,time:t,value:[h,h,h,h],originalTime:e};return void 0!==s.color&&(n.color=s.color),n}function Se(t){return void 0!==t.value}function xe(t){return(i,s,e,h)=>{return void 0===(n=e).open&&void 0===n.value?{time:i,index:s,originalTime:h}:t(i,s,e,h);var n}}const _e={Candlestick:xe((function(t,i,s,e){const h={index:i,time:t,value:[s.open,s.high,s.low,s.close],originalTime:e};return void 0!==s.color&&(h.color=s.color),void 0!==s.borderColor&&(h.borderColor=s.borderColor),void 0!==s.wickColor&&(h.wickColor=s.wickColor),h})),Bar:xe((function(t,i,s,e){const h={index:i,time:t,value:[s.open,s.high,s.low,s.close],originalTime:e};return void 0!==s.color&&(h.color=s.color),h})),Area:xe((function(t,i,s,e){const h=s.value,n={index:i,time:t,value:[h,h,h,h],originalTime:e};return void 0!==s.lineColor&&(n.lineColor=s.lineColor),void 0!==s.topColor&&(n.topColor=s.topColor),void 0!==s.bottomColor&&(n.bottomColor=s.bottomColor),n})),Baseline:xe((function(t,i,s,e){const h=s.value,n={index:i,time:t,value:[h,h,h,h],originalTime:e};return void 0!==s.topLineColor&&(n.topLineColor=s.topLineColor),void 0!==s.bottomLineColor&&(n.bottomLineColor=s.bottomLineColor),void 0!==s.topFillColor1&&(n.topFillColor1=s.topFillColor1),void 0!==s.topFillColor2&&(n.topFillColor2=s.topFillColor2),void 0!==s.bottomFillColor1&&(n.bottomFillColor1=s.bottomFillColor1),void 0!==s.bottomFillColor2&&(n.bottomFillColor2=s.bottomFillColor2),n})),Histogram:xe(Me),Line:xe(Me)};function ye(t){return _e[t]}function ke(t){return 60*t*60*1e3}function Ce(t){return 60*t*1e3}const Te=[{divisor:(Pe=1,1e3*Pe),weight:10},{divisor:Ce(1),weight:20},{divisor:Ce(5),weight:21},{divisor:Ce(30),weight:22},{divisor:ke(1),weight:30},{divisor:ke(3),weight:31},{divisor:ke(6),weight:32},{divisor:ke(12),weight:33}];var Pe;function Re(t,i){if(t.getUTCFullYear()!==i.getUTCFullYear())return 70;if(t.getUTCMonth()!==i.getUTCMonth())return 60;if(t.getUTCDate()!==i.getUTCDate())return 50;for(let s=Te.length-1;s>=0;--s)if(Math.floor(i.getTime()/Te[s].divisor)!==Math.floor(t.getTime()/Te[s].divisor))return Te[s].weight;return 0}function De(t,i=0){if(0===t.length)return;let s=0===i?null:t[i-1].time.timestamp,e=null!==s?new Date(1e3*s):null,h=0;for(let n=i;n1){const i=Math.ceil(h/(t.length-1)),s=new Date(1e3*(t[0].time.timestamp-i));t[0].timeWeight=Re(new Date(1e3*t[0].time.timestamp),s)}}function Ae(t){if(!Ps(t))throw new Error("time must be of type BusinessDay");const i=new Date(Date.UTC(t.year,t.month-1,t.day,0,0,0,0));return{timestamp:Math.round(i.getTime()/1e3),businessDay:t}}function Ee(t){if(!Rs(t))throw new Error("time must be of type isUTCTimestamp");return{timestamp:t}}function Oe(t){return 0===t.length?null:Ps(t[0].time)?Ae:Ee}function Be(t){return Rs(t)?Ee(t):Ps(t)?Ae(t):Ae(Le(t))}function Le(t){const i=new Date(t);if(isNaN(i.getTime()))throw new Error(`Invalid date string=${t}, expected format=yyyy-mm-dd`);return{day:i.getUTCDate(),month:i.getUTCMonth()+1,year:i.getUTCFullYear()}}function ze(t){S(t.time)&&(t.time=Le(t.time))}function Ie(t){return{index:0,mapping:new Map,timePoint:t}}function Ne(t){if(void 0!==t&&0!==t.length)return{firstTime:t[0].time.timestamp,lastTime:t[t.length-1].time.timestamp}}function Ve(t){let i;return t.forEach((t=>{void 0===i&&(i=t.originalTime)})),n(i)}function Fe(t){void 0===t.originalTime&&(t.originalTime=t.time)}class We{constructor(){this._pointDataByTimePoint=new Map,this._seriesRowsBySeries=new Map,this._seriesLastTimePoint=new Map,this._sortedTimePoints=[]}destroy(){this._pointDataByTimePoint.clear(),this._seriesRowsBySeries.clear(),this._seriesLastTimePoint.clear(),this._sortedTimePoints=[]}setSeriesData(t,i){let s=0!==this._pointDataByTimePoint.size,e=!1;const h=this._seriesRowsBySeries.get(t);if(void 0!==h)if(1===this._seriesRowsBySeries.size)s=!1,e=!0,this._pointDataByTimePoint.clear();else for(const i of this._sortedTimePoints)i.pointData.mapping.delete(t)&&(e=!0);let n=[];if(0!==i.length){const s=i;s.forEach((t=>Fe(t))),function(t){t.forEach(ze)}(i);const h=r(Oe(i)),o=ye(t.seriesType());n=s.map((i=>{const s=h(i.time);let n=this._pointDataByTimePoint.get(s.timestamp);void 0===n&&(n=Ie(s),this._pointDataByTimePoint.set(s.timestamp,n),e=!0);const r=o(s,n.index,i,i.originalTime);return n.mapping.set(t,r),r}))}s&&this._cleanupPointsData(),this._setRowsToSeries(t,n);let o=-1;if(e){const t=[];this._pointDataByTimePoint.forEach((i=>{t.push({timeWeight:0,time:i.timePoint,pointData:i,originalTime:Ve(i.mapping)})})),t.sort(((t,i)=>t.time.timestamp-i.time.timestamp)),o=this._replaceTimeScalePoints(t)}return this._getUpdateResponse(t,o,function(t,i){const s=Ne(t),e=Ne(i);if(void 0!==s&&void 0!==e)return{lastBarUpdatedOrNewBarsAddedToTheRight:s.lastTime>=e.lastTime&&s.firstTime>=e.firstTime}}(this._seriesRowsBySeries.get(t),h))}removeSeries(t){return this.setSeriesData(t,[])}updateSeriesData(t,i){const s=i;Fe(s),ze(i);const e=r(Oe([i]))(i.time),h=this._seriesLastTimePoint.get(t);if(void 0!==h&&e.timestampt.time.timestampe.time.timestamp?Se(i)&&s.push(i):Se(i)?s[s.length-1]=i:s.splice(-1,1),this._seriesLastTimePoint.set(t,i.time)}_setRowsToSeries(t,i){0!==i.length?(this._seriesRowsBySeries.set(t,i.filter(Se)),this._seriesLastTimePoint.set(t,i[i.length-1].time)):(this._seriesRowsBySeries.delete(t),this._seriesLastTimePoint.delete(t))}_cleanupPointsData(){for(const t of this._sortedTimePoints)0===t.pointData.mapping.size&&this._pointDataByTimePoint.delete(t.time.timestamp)}_replaceTimeScalePoints(t){let i=-1;for(let s=0;s{0!==i.length&&(t=Math.max(t,i[i.length-1].index))})),t}_getUpdateResponse(t,i,s){const e={series:new Map,timeScale:{baseIndex:this._getBaseIndex()}};if(-1!==i)this._seriesRowsBySeries.forEach(((i,h)=>{e.series.set(h,{data:i,info:h===t?s:void 0})})),this._seriesRowsBySeries.has(t)||e.series.set(t,{data:[],info:s}),e.timeScale.points=this._sortedTimePoints,e.timeScale.firstChangedPointIndex=i;else{const i=this._seriesRowsBySeries.get(t);e.series.set(t,{data:i||[],info:s})}return e}}function je(t,i){t.index=i,t.mapping.forEach((t=>{t.index=i}))}function He(t){return{value:t.value[3],time:t.originalTime}}function $e(t){const i=He(t);return void 0!==t.color&&(i.color=t.color),i}function Ue(t){return{open:t.value[0],high:t.value[1],low:t.value[2],close:t.value[3],time:t.originalTime}}const qe={Area:function(t){const i=He(t);return void 0!==t.lineColor&&(i.lineColor=t.lineColor),void 0!==t.topColor&&(i.topColor=t.topColor),void 0!==t.bottomColor&&(i.bottomColor=t.bottomColor),i},Line:$e,Baseline:function(t){const i=He(t);return void 0!==t.topLineColor&&(i.topLineColor=t.topLineColor),void 0!==t.bottomLineColor&&(i.bottomLineColor=t.bottomLineColor),void 0!==t.topFillColor1&&(i.topFillColor1=t.topFillColor1),void 0!==t.topFillColor2&&(i.topFillColor2=t.topFillColor2),void 0!==t.bottomFillColor1&&(i.bottomFillColor1=t.bottomFillColor1),void 0!==t.bottomFillColor2&&(i.bottomFillColor2=t.bottomFillColor2),i},Histogram:$e,Bar:function(t){const i=Ue(t);return void 0!==t.color&&(i.color=t.color),i},Candlestick:function(t){const i=Ue(t),{color:s,borderColor:e,wickColor:h}=t;return void 0!==s&&(i.color=s),void 0!==e&&(i.borderColor=e),void 0!==h&&(i.wickColor=h),i}};function Ye(t){return qe[t]}const Xe={autoScale:!0,mode:0,invertScale:!1,alignLabels:!0,borderVisible:!0,borderColor:"#2B2B43",entireTextOnly:!1,visible:!1,ticksVisible:!1,scaleMargins:{bottom:.1,top:.2}},Ze={color:"rgba(0, 0, 0, 0)",visible:!1,fontSize:48,fontFamily:C,fontStyle:"",text:"",horzAlign:"center",vertAlign:"center"},Ke={width:0,height:0,autoSize:!1,layout:{background:{type:"solid",color:"#FFFFFF"},textColor:"#191919",fontSize:12,fontFamily:C},crosshair:{vertLine:{color:"#9598A1",width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:"#131722"},horzLine:{color:"#9598A1",width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:"#131722"},mode:1},grid:{vertLines:{color:"#D6DCDE",style:0,visible:!0},horzLines:{color:"#D6DCDE",style:0,visible:!0}},overlayPriceScales:Object.assign({},Xe),leftPriceScale:Object.assign(Object.assign({},Xe),{visible:!1}),rightPriceScale:Object.assign(Object.assign({},Xe),{visible:!0}),timeScale:{rightOffset:0,barSpacing:6,minBarSpacing:.5,fixLeftEdge:!1,fixRightEdge:!1,lockVisibleTimeRangeOnResize:!1,rightBarStaysOnScroll:!1,borderVisible:!0,borderColor:"#2B2B43",visible:!0,timeVisible:!1,secondsVisible:!0,shiftVisibleRangeOnNewBar:!0,ticksVisible:!1},watermark:Ze,localization:{locale:Is?navigator.language:"",dateFormat:"dd MMM 'yy"},handleScroll:{mouseWheel:!0,pressedMouseMove:!0,horzTouchDrag:!0,vertTouchDrag:!0},handleScale:{axisPressedMouseMove:{time:!0,price:!0},axisDoubleClickReset:{time:!0,price:!0},mouseWheel:!0,pinch:!0},kineticScroll:{mouse:!1,touch:!0},trackingMode:{exitMode:1}},Ge={upColor:"#26a69a",downColor:"#ef5350",wickVisible:!0,borderVisible:!0,borderColor:"#378658",borderUpColor:"#26a69a",borderDownColor:"#ef5350",wickColor:"#737375",wickUpColor:"#26a69a",wickDownColor:"#ef5350"},Je={upColor:"#26a69a",downColor:"#ef5350",openVisible:!0,thinBars:!0},Qe={color:"#2196f3",lineStyle:0,lineWidth:3,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},th={topColor:"rgba( 46, 220, 135, 0.4)",bottomColor:"rgba( 40, 221, 100, 0)",invertFilledArea:!1,lineColor:"#33D778",lineStyle:0,lineWidth:3,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},ih={baseValue:{type:"price",price:0},topFillColor1:"rgba(38, 166, 154, 0.28)",topFillColor2:"rgba(38, 166, 154, 0.05)",topLineColor:"rgba(38, 166, 154, 1)",bottomFillColor1:"rgba(239, 83, 80, 0.05)",bottomFillColor2:"rgba(239, 83, 80, 0.28)",bottomLineColor:"rgba(239, 83, 80, 1)",lineWidth:3,lineStyle:0,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},sh={color:"#26a69a",base:0},eh={title:"",visible:!0,lastValueVisible:!0,priceLineVisible:!0,priceLineSource:0,priceLineWidth:1,priceLineColor:"",priceLineStyle:2,baseLineVisible:!0,baseLineWidth:1,baseLineColor:"#B2B5BE",baseLineStyle:0,priceFormat:{type:"price",precision:2,minMove:.01}};class hh{constructor(t,i){this._chartWidget=t,this._priceScaleId=i}applyOptions(t){this._chartWidget.model().applyPriceScaleOptions(this._priceScaleId,t)}options(){return this._priceScale().options()}width(){return et(this._priceScaleId)?this._chartWidget.getPriceAxisWidth(this._priceScaleId):0}_priceScale(){return r(this._chartWidget.model().findPriceScale(this._priceScaleId)).priceScale}}const nh={color:"#FF0000",price:0,lineStyle:2,lineWidth:1,lineVisible:!0,axisLabelVisible:!0,title:"",axisLabelColor:"",axisLabelTextColor:""};class rh{constructor(t){this._priceLine=t}applyOptions(t){this._priceLine.applyOptions(t)}options(){return this._priceLine.options()}priceLine(){return this._priceLine}}class oh{constructor(t,i,s){this._series=t,this._dataUpdatesConsumer=i,this._priceScaleApiProvider=s}priceFormatter(){return this._series.formatter()}priceToCoordinate(t){const i=this._series.firstValue();return null===i?null:this._series.priceScale().priceToCoordinate(t,i.value)}coordinateToPrice(t){const i=this._series.firstValue();return null===i?null:this._series.priceScale().coordinateToPrice(t,i.value)}barsInLogicalRange(t){if(null===t)return null;const i=new ps(new cs(t.from,t.to)).strictRange(),s=this._series.bars();if(s.isEmpty())return null;const e=s.search(i.left(),1),h=s.search(i.right(),-1),n=r(s.firstIndex()),o=r(s.lastIndex());if(null!==e&&null!==h&&e.index>h.index)return{barsBefore:t.from-n,barsAfter:o-t.to};const l={barsBefore:null===e||e.index===n?t.from-n:e.index-n,barsAfter:null===h||h.index===o?o-t.to:o-h.index};return null!==e&&null!==h&&(l.from=e.time.businessDay||e.time.timestamp,l.to=h.time.businessDay||h.time.timestamp),l}setData(t){this._series.seriesType(),this._dataUpdatesConsumer.applyNewData(this._series,t)}update(t){this._series.seriesType(),this._dataUpdatesConsumer.updateData(this._series,t)}dataByIndex(t,i){const s=this._series.bars().search(t,i);return null===s?null:Ye(this.seriesType())(s)}setMarkers(t){const i=t.map((t=>Object.assign(Object.assign({},t),{originalTime:t.time,time:Be(t.time)})));this._series.setMarkers(i)}markers(){return this._series.markers().map((t=>{const{originalTime:i,time:s}=t,e=function(t,i){var s={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&i.indexOf(e)<0&&(s[e]=t[e]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var h=0;for(e=Object.getOwnPropertySymbols(t);h=1)return 0;let i=0;for(;i<8;i++){const s=Math.round(t);if(Math.abs(s-t)<1e-8)return i;t*=10}return i}(i.minMove))}function ch(t){return function(t){if(x(t.handleScale)){const i=t.handleScale;t.handleScale={axisDoubleClickReset:{time:i,price:i},axisPressedMouseMove:{time:i,price:i},mouseWheel:i,pinch:i}}else if(void 0!==t.handleScale){const{axisPressedMouseMove:i,axisDoubleClickReset:s}=t.handleScale;x(i)&&(t.handleScale.axisPressedMouseMove={time:i,price:i}),x(s)&&(t.handleScale.axisDoubleClickReset={time:s,price:s})}const i=t.handleScroll;x(i)&&(t.handleScroll={horzTouchDrag:i,vertTouchDrag:i,mouseWheel:i,pressedMouseMove:i})}(t),t}class dh{constructor(t,i){this._dataLayer=new We,this._seriesMap=new Map,this._seriesMapReversed=new Map,this._clickedDelegate=new b,this._crosshairMovedDelegate=new b;const s=void 0===i?_(Ke):g(_(Ke),ch(i));this._chartWidget=new ge(t,s),this._chartWidget.clicked().subscribe((t=>{this._clickedDelegate.hasListeners()&&this._clickedDelegate.fire(this._convertMouseParams(t()))}),this),this._chartWidget.crosshairMoved().subscribe((t=>{this._crosshairMovedDelegate.hasListeners()&&this._crosshairMovedDelegate.fire(this._convertMouseParams(t()))}),this);const e=this._chartWidget.model();this._timeScaleApi=new ah(e,this._chartWidget.timeAxisWidget())}remove(){this._chartWidget.clicked().unsubscribeAll(this),this._chartWidget.crosshairMoved().unsubscribeAll(this),this._timeScaleApi.destroy(),this._chartWidget.destroy(),this._seriesMap.clear(),this._seriesMapReversed.clear(),this._clickedDelegate.destroy(),this._crosshairMovedDelegate.destroy(),this._dataLayer.destroy()}resize(t,i,s){this.autoSizeActive()||this._chartWidget.resize(t,i,s)}addAreaSeries(t){return this._addSeriesImpl("Area",th,t)}addBaselineSeries(t){return this._addSeriesImpl("Baseline",ih,t)}addBarSeries(t){return this._addSeriesImpl("Bar",Je,t)}addCandlestickSeries(t={}){return function(t){void 0!==t.borderColor&&(t.borderUpColor=t.borderColor,t.borderDownColor=t.borderColor),void 0!==t.wickColor&&(t.wickUpColor=t.wickColor,t.wickDownColor=t.wickColor)}(t),this._addSeriesImpl("Candlestick",Ge,t)}addHistogramSeries(t){return this._addSeriesImpl("Histogram",sh,t)}addLineSeries(t){return this._addSeriesImpl("Line",Qe,t)}removeSeries(t){const i=n(this._seriesMap.get(t)),s=this._dataLayer.removeSeries(i);this._chartWidget.model().removeSeries(i),this._sendUpdateToChart(s),this._seriesMap.delete(t),this._seriesMapReversed.delete(i)}applyNewData(t,i){this._sendUpdateToChart(this._dataLayer.setSeriesData(t,i))}updateData(t,i){this._sendUpdateToChart(this._dataLayer.updateSeriesData(t,i))}subscribeClick(t){this._clickedDelegate.subscribe(t)}unsubscribeClick(t){this._clickedDelegate.unsubscribe(t)}subscribeCrosshairMove(t){this._crosshairMovedDelegate.subscribe(t)}setCrosshairXY(t,i,s){this._chartWidget.paneWidgets()[0].setCrosshair(t,i,s)}unsubscribeCrosshairMove(t){this._crosshairMovedDelegate.unsubscribe(t)}priceScale(t){return new hh(this._chartWidget,t)}timeScale(){return this._timeScaleApi}applyOptions(t){this._chartWidget.applyOptions(ch(t))}options(){return this._chartWidget.options()}takeScreenshot(){return this._chartWidget.takeScreenshot()}autoSizeActive(){return this._chartWidget.autoSizeActive()}_addSeriesImpl(t,i,s={}){uh(s.priceFormat);const e=g(_(eh),_(i),s),h=this._chartWidget.model().createSeries(t,e),n=new oh(h,this,this);return this._seriesMap.set(n,h),this._seriesMapReversed.set(h,n),n}_sendUpdateToChart(t){const i=this._chartWidget.model();i.updateTimeScale(t.timeScale.baseIndex,t.timeScale.points,t.timeScale.firstChangedPointIndex),t.series.forEach(((t,i)=>i.setData(t.data,t.info))),i.recalculateAllPanes()}_mapSeriesToApi(t){return n(this._seriesMapReversed.get(t))}_convertMouseParams(t){const i=new Map;t.seriesData.forEach(((t,s)=>{const e=Ye(s.seriesType())(t);h(function(t){return void 0!==t.open||void 0!==t.value}(e)),i.set(this._mapSeriesToApi(s),e)}));const s=void 0===t.hoveredSeries?void 0:this._mapSeriesToApi(t.hoveredSeries);return{time:t.time,logical:t.index,point:t.point,hoveredSeries:s,hoveredObjectId:t.hoveredObject,seriesData:i,sourceEvent:t.touchMouseEventData}}}var fh=Object.freeze({__proto__:null,get ColorType(){return xs},get CrosshairMode(){return J},get LastPriceAnimationMode(){return ws},get LineStyle(){return i},get LineType(){return t},get MismatchDirection(){return Di},get PriceLineSource(){return Ss},get PriceScaleMode(){return Qi},get TickMarkType(){return vs},get TrackingModeExitMode(){return gs},createChart:function(t,i){let s;if(S(t)){const i=document.getElementById(t);h(null!==i,`Cannot find element in DOM with id=${t}`),s=i}else s=t;return new dh(s,i)},isBusinessDay:Ps,isUTCTimestamp:Rs,version:function(){return"4.1.0-dev+202306102016"}});window.LightweightCharts=fh}(); \ No newline at end of file diff --git a/docs/source/_static/splash.css b/docs/source/_static/splash.css new file mode 100644 index 0000000..36772aa --- /dev/null +++ b/docs/source/_static/splash.css @@ -0,0 +1,140 @@ +@font-face { + font-family: 'Maison Neue'; + src: url('fonts/MaisonNeue-Demi.otf') format('opentype'); + +} +@font-face { + font-family: 'Maison Neue Italic'; + src: url('fonts/MaisonNeue-MediumItalic.otf') format('opentype'); +} + + + +.splash-head { + position: relative; + display: flex; + flex-direction: column; + text-align: center; + align-self: center; + margin-bottom: 20px; +} + +.splash-page-container { + display: flex; + flex-direction: column; +} + +.theme-button { +position: absolute; + top: 70px; + right: -50px; +} + +.top-nav { + margin: 0; + padding: 0; + align-self: center; +} + +.top-nav ul { + list-style-type: none; + padding: 0; + display: flex; + justify-content: space-evenly; + background-color: var(--color-background-hover); + border-radius: 5px; + margin: 2rem 0 0; +} + +.top-nav li { + display: inline; +} + +.top-nav li a { + text-decoration: none; + border-radius: 3px; + color: var(--color-foreground-primary); + padding: 0.3rem 0.6rem; + display: flex; + align-items: center; + font-weight: 500; + +} + +.top-nav li a:hover { + background-color: var(--color-background-item) +} + + + +#wrapper { + width: 500px; + + height: 350px; + display: flex; + overflow: hidden; + border-radius: 10px; + border: 2px solid var(--color-foreground-muted); + box-sizing: border-box; + + position: relative; + z-index: 1000; +} + +#main-content { + margin: 30px 0; + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; +} + +#curved-arrow { + transition: transform 0.1s; + transform: rotate(-42deg); + padding: 0 3vw; + width: 100px; + height: 100px; +} + + + + + +@media (max-width: 968px) { + #curved-arrow { + transform: rotate(-70deg) scalex(-1); + } +} + +@media (max-width: 550px) { + .splash-head h1 { + font-size: 30px; + } + #main-content { + flex-direction: column; + } + #curved-arrow { + padding: 4vw 0; + width: 60px; + height: 60px + } +} +@media (max-width: 450px) { + .splash-head h1 { + font-size: 22px; + } + .splash-head i { + font-size: 13px; + } + .top-nav a { + font-size: 12px; + } + .theme-button { + right: -20px; + } + #wrapper { + width: 300px; + height: 250px; + } +} \ No newline at end of file diff --git a/docs/source/_static/toolbox.js b/docs/source/_static/toolbox.js new file mode 100644 index 0000000..47be952 --- /dev/null +++ b/docs/source/_static/toolbox.js @@ -0,0 +1,688 @@ +if (!window.ToolBox) { + class ToolBox { + constructor(chart) { + this.onTrendSelect = this.onTrendSelect.bind(this) + this.onHorzSelect = this.onHorzSelect.bind(this) + this.onRaySelect = this.onRaySelect.bind(this) + this.saveDrawings = this.saveDrawings.bind(this) + + this.chart = chart + this.drawings = [] + this.chart.cursor = 'default' + this.makingDrawing = false + + this.interval = 24 * 60 * 60 * 1000 + this.activeBackgroundColor = 'rgba(0, 122, 255, 0.7)' + this.activeIconColor = 'rgb(240, 240, 240)' + this.iconColor = 'lightgrey' + this.backgroundColor = 'transparent' + this.hoverColor = 'rgba(80, 86, 94, 0.7)' + this.clickBackgroundColor = 'rgba(90, 106, 104, 0.7)' + + this.elem = this.makeToolBox() + this.subscribeHoverMove() + } + + toJSON() { + // Exclude the chart attribute from serialization + const {chart, ...serialized} = this; + return serialized; + } + + makeToolBox() { + let toolBoxElem = document.createElement('div') + toolBoxElem.style.position = 'absolute' + toolBoxElem.style.zIndex = '2000' + toolBoxElem.style.display = 'flex' + toolBoxElem.style.alignItems = 'center' + toolBoxElem.style.top = '25%' + toolBoxElem.style.borderRight = '2px solid #3C434C' + toolBoxElem.style.borderTop = '2px solid #3C434C' + toolBoxElem.style.borderBottom = '2px solid #3C434C' + toolBoxElem.style.borderTopRightRadius = '4px' + toolBoxElem.style.borderBottomRightRadius = '4px' + toolBoxElem.style.backgroundColor = 'rgba(25, 27, 30, 0.5)' + toolBoxElem.style.flexDirection = 'column' + + this.chart.activeIcon = null + + let trend = this.makeToolBoxElement(this.onTrendSelect, 'KeyT', ``) + let horz = this.makeToolBoxElement(this.onHorzSelect, 'KeyH', ``) + let ray = this.makeToolBoxElement(this.onRaySelect, 'KeyR', ``) + //let testB = this.makeToolBoxElement(this.onTrendSelect, ``) + toolBoxElem.appendChild(trend) + toolBoxElem.appendChild(horz) + toolBoxElem.appendChild(ray) + //toolBoxElem.appendChild(testB) + + this.chart.div.append(toolBoxElem) + + let commandZHandler = (toDelete) => { + if (!toDelete) return + if ('price' in toDelete && toDelete.id !== 'toolBox') return commandZHandler(this.drawings[this.drawings.indexOf(toDelete) - 1]) + this.deleteDrawing(toDelete) + } + this.chart.commandFunctions.push((event) => { + if ((event.metaKey || event.ctrlKey) && event.code === 'KeyZ') { + commandZHandler(this.drawings[this.drawings.length - 1]) + return true + } + }); + + return toolBoxElem + } + + makeToolBoxElement(action, keyCmd, paths) { + let icon = { + elem: document.createElement('div'), + action: action, + } + icon.elem.style.margin = '3px' + icon.elem.style.borderRadius = '4px' + icon.elem.style.display = 'flex' + + let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("width", "29"); + svg.setAttribute("height", "29"); + + let group = document.createElementNS("http://www.w3.org/2000/svg", "g"); + group.innerHTML = paths + group.setAttribute("fill", this.iconColor) + + svg.appendChild(group) + icon.elem.appendChild(svg); + + icon.elem.addEventListener('mouseenter', () => { + icon.elem.style.backgroundColor = icon === this.chart.activeIcon ? this.activeBackgroundColor : this.hoverColor + }) + icon.elem.addEventListener('mouseleave', () => { + icon.elem.style.backgroundColor = icon === this.chart.activeIcon ? this.activeBackgroundColor : this.backgroundColor + }) + icon.elem.addEventListener('mousedown', () => { + icon.elem.style.backgroundColor = icon === this.chart.activeIcon ? this.activeBackgroundColor : this.clickBackgroundColor + }) + icon.elem.addEventListener('mouseup', () => { + icon.elem.style.backgroundColor = icon === this.chart.activeIcon ? this.activeBackgroundColor : 'transparent' + }) + icon.elem.addEventListener('click', () => { + if (this.chart.activeIcon) { + this.chart.activeIcon.elem.style.backgroundColor = this.backgroundColor + group.setAttribute("fill", this.iconColor) + document.body.style.cursor = 'crosshair' + this.chart.cursor = 'crosshair' + this.chart.activeIcon.action(false) + if (this.chart.activeIcon === icon) { + return this.chart.activeIcon = null + } + } + this.chart.activeIcon = icon + group.setAttribute("fill", this.activeIconColor) + icon.elem.style.backgroundColor = this.activeBackgroundColor + document.body.style.cursor = 'crosshair' + this.chart.cursor = 'crosshair' + this.chart.activeIcon.action(true) + }) + this.chart.commandFunctions.push((event) => { + if (event.altKey && event.code === keyCmd) { + event.preventDefault() + if (this.chart.activeIcon) { + this.chart.activeIcon.elem.style.backgroundColor = this.backgroundColor + group.setAttribute("fill", this.iconColor) + document.body.style.cursor = 'crosshair' + this.chart.cursor = 'crosshair' + this.chart.activeIcon.action(false) + } + this.chart.activeIcon = icon + group.setAttribute("fill", this.activeIconColor) + icon.elem.style.backgroundColor = this.activeBackgroundColor + document.body.style.cursor = 'crosshair' + this.chart.cursor = 'crosshair' + this.chart.activeIcon.action(true) + return true + } + }) + return icon.elem + } + + onTrendSelect(toggle, ray = false) { + let trendLine = { + line: null, + color: 'rgb(15, 139, 237)', + markers: null, + data: null, + from: null, + to: null, + ray: ray, + } + let firstTime = null + let firstPrice = null + let currentTime = null + + + if (!toggle) { + this.chart.chart.unsubscribeClick(this.clickHandler) + return + } + let crosshairHandlerTrend = (param) => { + this.chart.chart.unsubscribeCrosshairMove(crosshairHandlerTrend) + + if (!this.makingDrawing) return + + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + let logical = this.chart.chart.timeScale().getVisibleLogicalRange() + let lastCandleTime = this.chart.candleData[this.chart.candleData.length - 1].time + currentTime = this.chart.chart.timeScale().coordinateToTime(param.point.x) + if (!currentTime) { + let barsToMove = param.logical - this.chart.chart.timeScale().coordinateToLogical(this.chart.chart.timeScale().timeToCoordinate(lastCandleTime)) + currentTime = dateToStamp(new Date(stampToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval))) + } + let currentPrice = this.chart.series.coordinateToPrice(param.point.y) + + + if (!currentTime) return this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + let data = calculateTrendLine(firstTime, firstPrice, currentTime, currentPrice, this.interval, this.chart, ray) + trendLine.from = [data[0].time, data[0].value] + trendLine.to = [data[data.length - 1].time, data[data.length-1].value] + + trendLine.line.setData(data) + + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + this.chart.chart.timeScale().setVisibleLogicalRange(logical) + + if (!ray) { + trendLine.markers = [ + {time: firstTime, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1}, + {time: currentTime, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1} + ] + trendLine.line.setMarkers(trendLine.markers) + } + setTimeout(() => { + this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + }, 10); + } + + this.clickHandler = (param) => { + if (!this.makingDrawing) { + this.makingDrawing = true + trendLine.line = this.chart.chart.addLineSeries({ + color: 'rgb(15, 139, 237)', + lineWidth: 2, + lastValueVisible: false, + priceLineVisible: false, + crosshairMarkerVisible: false, + autoscaleInfoProvider: () => ({ + priceRange: { + minValue: 1_000_000_000, + maxValue: 0, + }, + }), + }) + firstPrice = this.chart.series.coordinateToPrice(param.point.y) + firstTime = !ray ? this.chart.chart.timeScale().coordinateToTime(param.point.x) : this.chart.candleData[this.chart.candleData.length - 1].time + this.chart.chart.applyOptions({handleScroll: false}) + this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + } + else { + this.chart.chart.applyOptions({handleScroll: true}) + this.makingDrawing = false + trendLine.line.setMarkers([]) + this.drawings.push(trendLine) + this.chart.chart.unsubscribeCrosshairMove(crosshairHandlerTrend) + this.chart.chart.unsubscribeClick(this.clickHandler) + document.body.style.cursor = 'default' + this.chart.cursor = 'default' + this.chart.activeIcon.elem.style.backgroundColor = this.backgroundColor + this.chart.activeIcon = null + this.saveDrawings() + } + } + this.chart.chart.subscribeClick(this.clickHandler) + } + + clickHandlerHorz = (param) => { + let price = this.chart.series.coordinateToPrice(param.point.y) + let lineStyle = LightweightCharts.LineStyle.Solid + let line = new HorizontalLine(this.chart, 'toolBox', price,'red', 2, lineStyle, true) + this.drawings.push(line) + this.chart.chart.unsubscribeClick(this.clickHandlerHorz) + document.body.style.cursor = 'default' + this.chart.cursor = 'default' + this.chart.activeIcon.elem.style.backgroundColor = this.backgroundColor + this.chart.activeIcon = null + this.saveDrawings() + } + onHorzSelect(toggle) { + !toggle ? this.chart.chart.unsubscribeClick(this.clickHandlerHorz) : this.chart.chart.subscribeClick(this.clickHandlerHorz) + } + + onRaySelect(toggle) { + this.onTrendSelect(toggle, true) + } + + subscribeHoverMove() { + let hoveringOver = null + let x, y + let colorPicker = new ColorPicker(this.saveDrawings) + + let onClickDelete = () => this.deleteDrawing(contextMenu.drawing) + let onClickColor = (rect) => colorPicker.openMenu(rect, contextMenu.drawing) + let contextMenu = new ContextMenu() + contextMenu.menuItem('Color Picker', onClickColor, () =>{ + document.removeEventListener('click', colorPicker.closeMenu) + colorPicker.container.style.display = 'none' + }) + contextMenu.separator() + contextMenu.menuItem('Delete Drawing', onClickDelete) + + let hoverOver = (param) => { + if (!param.point || this.makingDrawing) return + this.chart.chart.unsubscribeCrosshairMove(hoverOver) + x = param.point.x + y = param.point.y + + this.drawings.forEach((drawing) => { + let boundaryConditional + let horizontal = false + + if ('price' in drawing) { + horizontal = true + let priceCoordinate = this.chart.series.priceToCoordinate(drawing.price) + boundaryConditional = Math.abs(priceCoordinate - param.point.y) < 6 + } else { + let trendData = param.seriesData.get(drawing.line); + if (!trendData) return + let priceCoordinate = this.chart.series.priceToCoordinate(trendData.value) + let timeCoordinate = this.chart.chart.timeScale().timeToCoordinate(trendData.time) + boundaryConditional = Math.abs(priceCoordinate - param.point.y) < 6 && Math.abs(timeCoordinate - param.point.x) < 6 + } + + if (boundaryConditional) { + if (hoveringOver === drawing) return + if (!horizontal && !drawing.ray) drawing.line.setMarkers(drawing.markers) + document.body.style.cursor = 'pointer' + document.addEventListener('mousedown', checkForClick) + document.addEventListener('mouseup', checkForRelease) + hoveringOver = drawing + contextMenu.listen(true) + contextMenu.drawing = drawing + } else if (hoveringOver === drawing) { + if (!horizontal && !drawing.ray) drawing.line.setMarkers([]) + document.body.style.cursor = this.chart.cursor + hoveringOver = null + contextMenu.listen(false) + if (!mouseDown) { + document.removeEventListener('mousedown', checkForClick) + document.removeEventListener('mouseup', checkForRelease) + } + } + }) + this.chart.chart.subscribeCrosshairMove(hoverOver) + } + let originalIndex + let originalTime + let originalPrice + let mouseDown = false + let clickedEnd = false + let labelColor + let checkForClick = (event) => { + mouseDown = true + document.body.style.cursor = 'grabbing' + this.chart.chart.applyOptions({handleScroll: false}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + + this.chart.chart.unsubscribeCrosshairMove(hoverOver) + + labelColor = this.chart.chart.options().crosshair.horzLine.labelBackgroundColor + this.chart.chart.applyOptions({crosshair: {horzLine: {labelBackgroundColor: hoveringOver.color}}}) + if ('price' in hoveringOver) { + originalPrice = hoveringOver.price + this.chart.chart.subscribeCrosshairMove(crosshairHandlerHorz) + } else if (Math.abs(this.chart.chart.timeScale().timeToCoordinate(hoveringOver.from[0]) - x) < 4 && !hoveringOver.ray) { + clickedEnd = 'first' + this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + } else if (Math.abs(this.chart.chart.timeScale().timeToCoordinate(hoveringOver.to[0]) - x) < 4 && !hoveringOver.ray) { + clickedEnd = 'last' + this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + } else { + originalPrice = this.chart.series.coordinateToPrice(y) + originalTime = this.chart.chart.timeScale().coordinateToTime(x * this.chart.scale.width) + this.chart.chart.subscribeCrosshairMove(checkForDrag) + } + originalIndex = this.chart.chart.timeScale().coordinateToLogical(x) + document.removeEventListener('mousedown', checkForClick) + } + let checkForRelease = (event) => { + mouseDown = false + document.body.style.cursor = this.chart.cursor + + this.chart.chart.applyOptions({handleScroll: true}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + this.chart.chart.applyOptions({crosshair: {horzLine: {labelBackgroundColor: labelColor}}}) + if (hoveringOver && 'price' in hoveringOver && hoveringOver.id !== 'toolBox') { + window.callbackFunction(`${hoveringOver.id}_~_${hoveringOver.price.toFixed(8)}`); + } + hoveringOver = null + document.removeEventListener('mousedown', checkForClick) + document.removeEventListener('mouseup', checkForRelease) + this.chart.chart.subscribeCrosshairMove(hoverOver) + this.saveDrawings() + } + let checkForDrag = (param) => { + if (!param.point) return + this.chart.chart.unsubscribeCrosshairMove(checkForDrag) + if (!mouseDown) return + + let priceAtCursor = this.chart.series.coordinateToPrice(param.point.y) + + let priceDiff = priceAtCursor - originalPrice + let barsToMove = param.logical - originalIndex + + let startBarIndex = this.chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(hoveringOver.from[0]).getTime()) + let endBarIndex = this.chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(hoveringOver.to[0]).getTime()) + + let startDate + let endBar + if (hoveringOver.ray) { + endBar = this.chart.candleData[startBarIndex + barsToMove] + startDate = hoveringOver.to[0] + } else { + startDate = this.chart.candleData[startBarIndex + barsToMove].time + endBar = endBarIndex === -1 ? null : this.chart.candleData[endBarIndex + barsToMove] + } + + let endDate = endBar ? endBar.time : dateToStamp(new Date(stampToDate(hoveringOver.to[0]).getTime() + (barsToMove * this.interval))) + let startValue = hoveringOver.from[1] + priceDiff + let endValue = hoveringOver.to[1] + priceDiff + let data = calculateTrendLine(startDate, startValue, endDate, endValue, this.interval, this.chart, hoveringOver.ray) + + + let logical = this.chart.chart.timeScale().getVisibleLogicalRange() + + hoveringOver.from = [data[0].time, data[0].value] + hoveringOver.to = [data[data.length - 1].time, data[data.length - 1].value] + hoveringOver.line.setData(data) + + this.chart.chart.timeScale().setVisibleLogicalRange(logical) + + if (!hoveringOver.ray) { + hoveringOver.markers = [ + {time: startDate, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1}, + {time: endDate, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1} + ] + hoveringOver.line.setMarkers(hoveringOver.markers) + } + + originalIndex = param.logical + originalPrice = priceAtCursor + this.chart.chart.subscribeCrosshairMove(checkForDrag) + } + let crosshairHandlerTrend = (param) => { + if (!param.point) return + this.chart.chart.unsubscribeCrosshairMove(crosshairHandlerTrend) + if (!mouseDown) return + + let currentPrice = this.chart.series.coordinateToPrice(param.point.y) + let currentTime = this.chart.chart.timeScale().coordinateToTime(param.point.x) + + let [firstTime, firstPrice] = [null, null] + if (clickedEnd === 'last') { + firstTime = hoveringOver.from[0] + firstPrice = hoveringOver.from[1] + } else if (clickedEnd === 'first') { + firstTime = hoveringOver.to[0] + firstPrice = hoveringOver.to[1] + } + + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + let logical = this.chart.chart.timeScale().getVisibleLogicalRange() + + let lastCandleTime = this.chart.candleData[this.chart.candleData.length - 1].time + if (!currentTime) { + let barsToMove = param.logical - this.chart.chart.timeScale().coordinateToLogical(this.chart.chart.timeScale().timeToCoordinate(lastCandleTime)) + currentTime = dateToStamp(new Date(stampToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval))) + } + let data = calculateTrendLine(firstTime, firstPrice, currentTime, currentPrice, this.interval, this.chart) + hoveringOver.line.setData(data) + + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + this.chart.chart.timeScale().setVisibleLogicalRange(logical) + + hoveringOver.from = [data[0].time, data[0].value] + hoveringOver.to = [data[data.length - 1].time, data[data.length - 1].value] + + + hoveringOver.markers = [ + {time: firstTime, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1}, + {time: currentTime, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1} + ] + hoveringOver.line.setMarkers(hoveringOver.markers) + + setTimeout(() => { + this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + }, 10); + } + let crosshairHandlerHorz = (param) => { + if (!param.point) return + this.chart.chart.unsubscribeCrosshairMove(crosshairHandlerHorz) + if (!mouseDown) return + hoveringOver.updatePrice(this.chart.series.coordinateToPrice(param.point.y)) + setTimeout(() => { + this.chart.chart.subscribeCrosshairMove(crosshairHandlerHorz) + }, 10) + } + this.chart.chart.subscribeCrosshairMove(hoverOver) + } + + renderDrawings() { + this.drawings.forEach((item) => { + if ('price' in item) return + let startDate = dateToStamp(new Date(Math.round(stampToDate(item.from[0]).getTime() / this.interval) * this.interval)) + let endDate = dateToStamp(new Date(Math.round(stampToDate(item.to[0]).getTime() / this.interval) * this.interval)) + let data = calculateTrendLine(startDate, item.from[1], endDate, item.to[1], this.interval, this.chart, item.ray) + item.from = [data[0].time, data[0].value] + item.to = [data[data.length - 1].time, data[data.length-1].value] + item.line.setData(data) + }) + } + + deleteDrawing(drawing) { + if ('price' in drawing) { + this.chart.series.removePriceLine(drawing.line) + } + else { + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + this.chart.chart.removeSeries(drawing.line); + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + } + this.drawings.splice(this.drawings.indexOf(drawing), 1) + this.saveDrawings() + } + + clearDrawings() { + this.drawings.forEach((item) => { + if ('price' in item) this.chart.series.removePriceLine(item.line) + else this.chart.chart.removeSeries(item.line) + }) + this.drawings = [] + } + + saveDrawings() { + let drawingsString = JSON.stringify(this.drawings, (key, value) => { + if (key === '' && Array.isArray(value)) { + return value.filter(item => !(item && typeof item === 'object' && 'priceLine' in item && item.id !== 'toolBox')); + } else if (key === 'line' || (value && typeof value === 'object' && 'priceLine' in value && value.id !== 'toolBox')) { + return undefined; + } + return value; + }); + window.callbackFunction(`save_drawings${this.chart.id}_~_${drawingsString}`) + } + + loadDrawings(drawings) { + this.drawings = drawings + this.chart.chart.applyOptions({handleScroll: false}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + this.drawings.forEach((item) => { + let idx = this.drawings.indexOf(item) + if ('price' in item) { + this.drawings[idx] = new HorizontalLine(this.chart, 'toolBox', item.priceLine.price, item.priceLine.color, 2, item.priceLine.lineStyle, item.priceLine.axisLabelVisible) + } + else { + this.drawings[idx].line = this.chart.chart.addLineSeries({ + lineWidth: 2, + color: this.drawings[idx].color, + lastValueVisible: false, + priceLineVisible: false, + crosshairMarkerVisible: false, + autoscaleInfoProvider: () => ({ + priceRange: { + minValue: 1_000_000_000, + maxValue: 0, + }, + }), + }) + let startDate = dateToStamp(new Date(Math.round(stampToDate(item.from[0]).getTime() / this.interval) * this.interval)) + let endDate = dateToStamp(new Date(Math.round(stampToDate(item.to[0]).getTime() / this.interval) * this.interval)) + let data = calculateTrendLine(startDate, item.from[1], endDate, item.to[1], this.interval, this.chart, item.ray) + item.from = [data[0].time, data[0].value] + item.to = [data[data.length - 1].time, data[data.length-1].value] + item.line.setData(data) + } + }) + this.chart.chart.applyOptions({handleScroll: true}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + } + } + window.ToolBox = ToolBox +} + +if (!window.ColorPicker) { + class ColorPicker { + constructor(saveDrawings) { + this.saveDrawings = saveDrawings + + this.container = document.createElement('div') + this.container.style.maxWidth = '170px' + this.container.style.backgroundColor = '#191B1E' + this.container.style.position = 'absolute' + this.container.style.zIndex = '10000' + this.container.style.display = 'none' + this.container.style.flexDirection = 'column' + this.container.style.alignItems = 'center' + this.container.style.border = '2px solid #3C434C' + this.container.style.borderRadius = '8px' + this.container.style.cursor = 'default' + + let colorPicker = document.createElement('div') + colorPicker.style.margin = '10px' + colorPicker.style.display = 'flex' + colorPicker.style.flexWrap = 'wrap' + + let colors = [ + '#EBB0B0','#E9CEA1','#E5DF80','#ADEB97','#A3C3EA','#D8BDED', + '#E15F5D','#E1B45F','#E2D947','#4BE940','#639AE1','#D7A0E8', + '#E42C2A','#E49D30','#E7D827','#3CFF0A','#3275E4','#B06CE3', + '#F3000D','#EE9A14','#F1DA13','#2DFC0F','#1562EE','#BB00EF', + '#B50911','#E3860E','#D2BD11','#48DE0E','#1455B4','#6E009F', + '#7C1713','#B76B12','#8D7A13','#479C12','#165579','#51007E', + ] + + colors.forEach((color) => colorPicker.appendChild(this.makeColorBox(color))) + + let separator = document.createElement('div') + separator.style.backgroundColor = '#3C434C' + separator.style.height = '1px' + separator.style.width = '130px' + + let opacity = document.createElement('div') + opacity.style.margin = '10px' + + let opacityText = document.createElement('div') + opacityText.style.color = 'lightgray' + opacityText.style.fontSize = '12px' + opacityText.innerText = 'Opacity' + + let opacityValue = document.createElement('div') + opacityValue.style.color = 'lightgray' + opacityValue.style.fontSize = '12px' + + let opacitySlider = document.createElement('input') + opacitySlider.type = 'range' + opacitySlider.value = this.opacity*100 + opacityValue.innerText = opacitySlider.value+'%' + opacitySlider.oninput = () => { + opacityValue.innerText = opacitySlider.value+'%' + this.opacity = opacitySlider.value/100 + this.updateColor() + } + + opacity.appendChild(opacityText) + opacity.appendChild(opacitySlider) + opacity.appendChild(opacityValue) + + this.container.appendChild(colorPicker) + this.container.appendChild(separator) + this.container.appendChild(opacity) + document.getElementById('wrapper').appendChild(this.container) + + } + makeColorBox(color) { + let box = document.createElement('div') + box.style.width = '18px' + box.style.height = '18px' + box.style.borderRadius = '3px' + box.style.margin = '3px' + box.style.boxSizing = 'border-box' + box.style.backgroundColor = color + + box.addEventListener('mouseover', (event) => box.style.border = '2px solid lightgray') + box.addEventListener('mouseout', (event) => box.style.border = 'none') + + let rgbValues = this.extractRGB(color) + + box.addEventListener('click', (event) => { + this.rgbValues = rgbValues + this.updateColor() + }) + return box + } + extractRGB = (anyColor) => { + let dummyElem = document.createElement('div'); + dummyElem.style.color = anyColor; + document.body.appendChild(dummyElem); + let computedColor = getComputedStyle(dummyElem).color; + document.body.removeChild(dummyElem); + let colorValues = computedColor.match(/\d+/g).map(Number); + let isRgba = computedColor.includes('rgba'); + let opacity = isRgba ? parseFloat(computedColor.split(',')[3]) : 1 + return [colorValues[0], colorValues[1], colorValues[2], opacity] + } + updateColor() { + let oColor = `rgba(${this.rgbValues[0]}, ${this.rgbValues[1]}, ${this.rgbValues[2]}, ${this.opacity})` + if ('price' in this.drawing) this.drawing.updateColor(oColor) + else { + this.drawing.color = oColor + this.drawing.line.applyOptions({color: oColor}) + } + this.saveDrawings() + } + openMenu(rect, drawing) { + this.drawing = drawing + this.rgbValues = this.extractRGB(drawing.color) + this.opacity = parseFloat(this.rgbValues[3]) + this.container.style.top = (rect.top-30)+'px' + this.container.style.left = rect.right+'px' + this.container.style.display = 'flex' + setTimeout(() => document.addEventListener('mousedown', (event) => { + if (!this.container.contains(event.target)) { + this.closeMenu() + } + }), 10) + } + closeMenu(event) { + document.removeEventListener('click', this.closeMenu) + this.container.style.display = 'none' + } + } + window.ColorPicker = ColorPicker +} diff --git a/docs/source/_templates/landing.html b/docs/source/_templates/landing.html new file mode 100644 index 0000000..c806168 --- /dev/null +++ b/docs/source/_templates/landing.html @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + Getting Started - lightweight-charts-python 1.0.16 documentation + + + + + + + + + + + + + + +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/docs/source/callbacks.md b/docs/source/callbacks.md deleted file mode 100644 index 1fa14e4..0000000 --- a/docs/source/callbacks.md +++ /dev/null @@ -1,156 +0,0 @@ -# Events - -Events allow asynchronous and synchronous callbacks to be passed back into python. - -___ -## `chart.events` - -`events.search` `->` `chart` | `string`: Fires upon searching. Searchbox will be automatically created. - -`events.new_bar` `->` `chart`: Fires when a new candlestick is added to the chart. - -`events.range_change` `->` `chart` | `bars_before` | `bars_after`: Fires when the range (visibleLogicalRange) changes. - -Chart events can be subscribed to using: `chart.events. += ` -___ - -## How to use Events - -Take a look at this minimal example: - -```python -from lightweight_charts import Chart - - -def on_search(chart, string): - print(f'Search Text: "{string}" | Chart/SubChart ID: "{chart.id}"') - - -if __name__ == '__main__': - chart = Chart() - chart.events.search += on_search - chart.show(block=True) - -``` -Upon searching in a pane, the expected output would be akin to: -``` -Search Text: "AAPL" | Chart/SubChart ID: "window.blyjagcr" -``` -The ID shown above will change depending upon which pane was used to search, allowing for access to the object in question. - -```{important} -* When using `show` rather than `show_async`, block should be set to `True` (`chart.show(block=True)`). -* Event callables can be either coroutines, methods, or functions. -``` - -___ - -## `TopBar` -The `TopBar` class represents the top bar shown on the chart: - -![topbar](https://i.imgur.com/Qu2FW9Y.png) - -This object is accessed from the `topbar` attribute of the chart object (`chart.topbar.`). - -Switchers, text boxes and buttons can be added to the top bar, and their instances can be accessed through the `topbar` dictionary. For example: - -```python -chart.topbar.textbox('symbol', 'AAPL') # Declares a textbox displaying 'AAPL'. -print(chart.topbar['symbol'].value) # Prints the value within ('AAPL') - -chart.topbar['symbol'].set('MSFT') # Sets the 'symbol' textbox to 'MSFT' -print(chart.topbar['symbol'].value) # Prints the value again ('MSFT') -``` - -Events can also be emitted from the topbar. For example: - -```python -from lightweight_charts import Chart - -def on_button_press(chart): - new_button_value = 'On' if chart.topbar['my_button'].value == 'Off' else 'Off' - chart.topbar['my_button'].set(new_button_value) - print(f'Turned something {new_button_value.lower()}.') - - -if __name__ == '__main__': - chart = Chart() - chart.topbar.button('my_button', 'Off', func=on_button_press) - chart.show(block=True) - -``` - -___ - -### `switcher` -`name: str` | `options: tuple` | `default: str` | `func: callable` - -* `name`: the name of the switcher which can be used to access it from the `topbar` dictionary. -* `options`: The options for each switcher item. -* `default`: The initial switcher option set. -___ - -### `textbox` -`name: str` | `initial_text: str` - -* `name`: the name of the text box which can be used to access it from the `topbar` dictionary. -* `initial_text`: The text to show within the text box. -___ - -### `button` -`name: str` | `button_text: str` | `separator: bool` | `func: callable` - -* `name`: the name of the text box to access it from the `topbar` dictionary. -* `button_text`: Text to show within the button. -* `separator`: places a separator line to the right of the button. -* `func`: The event handler which will be executed upon a button click. -___ - -## Callbacks Example: - -```python -import pandas as pd -from lightweight_charts import Chart - - -def get_bar_data(symbol, timeframe): - if symbol not in ('AAPL', 'GOOGL', 'TSLA'): - print(f'No data for "{symbol}"') - return pd.DataFrame() - return pd.read_csv(f'../examples/6_callbacks/bar_data/{symbol}_{timeframe}.csv') - - -def on_search(chart, searched_string): - new_data = get_bar_data(searched_string, chart.topbar['timeframe'].value) - if new_data.empty: - return - chart.topbar['symbol'].set(searched_string) - chart.set(new_data) - - -def on_timeframe_selection(chart): - new_data = get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value) - if new_data.empty: - return - chart.set(new_data, True) - - -def on_horizontal_line_move(chart, line): - print(f'Horizontal line moved to: {line.price}') - - -if __name__ == '__main__': - chart = Chart(toolbox=True) - chart.legend(True) - - chart.topbar.textbox('symbol', 'TSLA') - chart.topbar.switcher('timeframe', ('1min', '5min', '30min'), default='5min', - func=on_timeframe_selection) - - df = get_bar_data('TSLA', '5min') - chart.set(df) - - chart.horizontal_line(200, func=on_horizontal_line_move) - - chart.show(block=True) -``` diff --git a/docs/source/common_methods.md b/docs/source/common_methods.md deleted file mode 100644 index 861546c..0000000 --- a/docs/source/common_methods.md +++ /dev/null @@ -1,360 +0,0 @@ -# Common Methods -The methods below can be used within all chart objects. - -___ -## `set` -`data: pd.DataFrame` `render_drawings: bool` - -Sets the initial data for the chart. The data must be given as a DataFrame, with the columns: - -`time | open | high | low | close | volume` - -The `time` column can also be named `date` or be the index, and the `volume` column can be omitted if volume is not enabled. Column names are not case sensitive. - -If `render_drawings` is `True`, any drawings made using the `toolbox` will be redrawn with the new data. This is designed to be used when switching to a different timeframe of the same symbol. - -```{important} -the `time` column must have rows all of the same timezone and locale. This is particularly noticeable for data which crosses over daylight saving hours on data with intervals of less than 1 day. Errors are likely to be raised if they are not converted beforehand. -``` - -An empty `DataFrame` object or `None` can also be given to this method, which will erase all candle and volume data displayed on the chart. -___ - -## `update` -`series: pd.Series` - -Updates the chart data from a `pd.Series` object. The bar should contain values with labels akin to `set`. -___ - -## `update_from_tick` -`series: pd.Series` | `cumulative_volume: bool` - -Updates the chart from a tick. The series should use the labels: - -`time | price | volume` - -As before, the `time` can also be named `date`, and the `volume` can be omitted if volume is not enabled. The `time` column can also be the name of the Series object. - -```{information} -The provided ticks do not need to be rounded to an interval (1 min, 5 min etc.), as the library handles this automatically. -``` - -If `cumulative_volume` is used, the volume data given will be added onto the latest bar of volume data. -___ - -## `create_line` (Line) -`name: str` | `color: str` | `style: LINE_STYLE`| `width: int` | `price_line: bool` | `price_label: bool` | `-> Line` - -Creates and returns a `Line` object, representing a `LineSeries` object in Lightweight Charts and can be used to create indicators. As well as the methods described below, the `Line` object also has access to: -[`title`](#title), [`marker`](#marker), [`horizontal_line`](#horizontal-line) [`hide_data`](#hide-data), [`show_data`](#show-data) and[`price_line`](#price-line). - -Its instance should only be accessed from this method. - -### `set` -`data: pd.DataFrame` - -Sets the data for the line. - -When a name has not been set upon declaration, the columns should be named: `time | value` (Not case sensitive). - -Otherwise, the method will use the column named after the string given in `name`. This name will also be used within the legend of the chart. For example: -```python -line = chart.create_line('SMA 50') - -# DataFrame with columns: date | SMA 50 -df = pd.read_csv('sma50.csv') - -line.set(df) -``` - -### `update` -`series: pd.Series` - -Updates the data for the line. - -This should be given as a Series object, with labels akin to the `line.set()` function. - -### `delete` -Irreversibly deletes the line. - -___ - -## `lines` -`-> List[Line]` - -Returns a list of all lines for the chart or subchart. -___ - -## `trend_line` -`start_time: str/datetime` | `start_value: float/int` | `end_time: str/datetime` | `end_value: float/int` | `color: str` | `width: int` | `-> Line` - -Creates a trend line, drawn from the first point (`start_time`, `start_value`) to the last point (`end_time`, `end_value`). -___ - -## `ray_line` -`start_time: str/datetime` | `value: float/int` | `color: str` | `width: int` | `-> Line` - -Creates a ray line, drawn from the first point (`start_time`, `value`) and onwards. -___ - -## `marker` -`time: datetime` | `position: 'above'/'below'/'inside'` | `shape: 'arrow_up'/'arrow_down'/'circle'/'square'` | `color: str` | `text: str` | `-> str` - -Adds a marker to the chart, and returns its id. - -If the `time` parameter is not given, the marker will be placed at the latest bar. - -When using multiple markers, they should be placed in chronological order or display bugs may be present. -___ - -## `remove_marker` -`marker_id: str` - -Removes the marker with the given id. - -Usage: -```python -marker = chart.marker(text='hello_world') -chart.remove_marker(marker) -``` -___ - -## `horizontal_line` (HorizontalLine) -`price: float/int` | `color: str` | `width: int` | `style: 'solid'/'dotted'/'dashed'/'large_dashed'/'sparse_dotted'` | `text: str` | `axis_label_visible: bool` | `interactive: bool` | `-> HorizontalLine` - -Places a horizontal line at the given price, and returns a `HorizontalLine` object, representing a `PriceLine` in Lightweight Charts. - -If `interactive` is set to `True`, this horizontal line can be edited on the chart. Upon its movement a callback will also be emitted to an `on_horizontal_line_move` method, containing its ID and price. The toolbox should be enabled during its usage. It is designed to be used to update an order (limit, stop, etc.) directly on the chart. - - -### `update` -`price: float/int` - -Updates the price of the horizontal line. - -### `label` -`text: str` - -Updates the label of the horizontal line. - -### `delete` - -Irreversibly deletes the horizontal line. -___ - -## `remove_horizontal_line` -`price: float/int` - -Removes a horizontal line at the given price. -___ - -## `clear_markers` - -Clears the markers displayed on the data. -___ - -## `clear_horizontal_lines` - -Clears the horizontal lines displayed on the data. -___ - -## `precision` -`precision: int` - -Sets the precision of the chart based on the given number of decimal places. -___ - -## `price_scale` -`mode: 'normal'/'logarithmic'/'percentage'/'index100'` | `align_labels: bool` | `border_visible: bool` | `border_color: str` | `text_color: str` | `entire_text_only: bool` | `ticks_visible: bool` | `scale_margin_top: float` | `scale_margin_bottom: float` - -Price scale options for the chart. -___ - -## `time_scale` -`right_offset: int` | `min_bar_spacing: float` | `visible: bool` | `time_visible: bool` | `seconds_visible: bool` | `border_visible: bool` | `border_color: str` - -Timescale options for the chart. -___ - -## `layout` -`background_color: str` | `text_color: str` | `font_size: int` | `font_family: str` - -Global layout options for the chart. -___ - -## `grid` -`vert_enabled: bool` | `horz_enabled: bool` | `color: str` | `style: 'solid'/'dotted'/'dashed'/'large_dashed'/'sparse_dotted'` - -Grid options for the chart. -___ - -## `candle_style` -`up_color: str` | `down_color: str` | `wick_enabled: bool` | `border_enabled: bool` | `border_up_color: str` | `border_down_color: str` | `wick_up_color: str` | `wick_down_color: str` - - Candle styling for each of the candle's parts (border, wick). - -```{admonition} Color Formats -:class: note - -Throughout the library, colors should be given as either: -* rgb: `rgb(100, 100, 100)` -* rgba: `rgba(100, 100, 100, 0.7)` -* hex: `#32a852` -``` -___ - -## `volume_config` -`scale_margin_top: float` | `scale_margin_bottom: float` | `up_color: str` | `down_color: str` - -Volume config options. - -```{important} -The float values given to scale the margins must be greater than 0 and less than 1. -``` -___ - -## `crosshair` -`mode` | `vert_visible: bool` | `vert_width: int` | `vert_color: str` | `vert_style: str` | `vert_label_background_color: str` | `horz_visible: bool` | `horz_width: int` | `horz_color: str` | `horz_style: str` | `horz_label_background_color: str` - -Crosshair formatting for its vertical and horizontal axes. - -`vert_style` and `horz_style` should be given as one of: `'solid'/'dotted'/'dashed'/'large_dashed'/'sparse_dotted'` -___ - -## `watermark` -`text: str` | `font_size: int` | `color: str` - -Overlays a watermark on top of the chart. -___ - -## `legend` -`visible: bool` | `ohlc: bool` | `percent: bool` | `lines: bool` | `color: str` | `font_size: int` | `font_family: str` - -Configures the legend of the chart. -___ - -## `spinner` -`visible: bool` - -Shows a loading spinner on the chart, which can be used to visualise the loading of large datasets, API calls, etc. -___ - -## `price_line` -`label_visible: bool` | `line_visible: bool` | `title: str` - -Configures the visibility of the last value price line and its label. -___ - -## `fit` - -Attempts to fit all data displayed on the chart within the viewport (`fitContent()`). -___ - -## `hide_data` - -Hides the candles on the chart. -___ - -## `show_data` - -Shows the hidden candles on the chart. -___ - -## `hotkey` -`modifier: 'ctrl'/'shift'/'alt'/'meta'` | `key: str/int/tuple` | `func: callable` - -Adds a global hotkey to the chart window, which will execute the method or function given. - -When using a number in `key`, it should be given as an integer. If multiple key commands are needed for the same function, you can pass a tuple to `key`. For example: - -```python -def place_buy_order(key): - print(f'Buy {key} shares.') - - -def place_sell_order(key): - print(f'Sell all shares, because I pressed {key}.') - - -if __name__ == '__main__': - chart = Chart() - chart.hotkey('shift', (1, 2, 3), place_buy_order) - chart.hotkey('shift', 'X', place_sell_order) - chart.show(block=True) -``` - -___ - -## `create_table` -`width: int/float` | `height: int/float` | `headings: tuple[str]` | `widths: tuple[float]` | `alignments: tuple[str]` | `position: 'left'/'right'/'top'/'bottom'` | `draggable: bool` | `func: callable` | `-> Table` - -Creates and returns a [`Table`](https://lightweight-charts-python.readthedocs.io/en/latest/tables.html) object. -___ - -## `create_subchart` (SubChart) -`position: 'left'/'right'/'top'/'bottom'`, `width: float` | `height: float` | `sync: bool/str` | `scale_candles_only: bool`|`toolbox: bool` | `-> SubChart` - -Creates and returns a `SubChart` object, placing it adjacent to the previous `Chart` or `SubChart`. This allows for the use of multiple chart panels within the same `Chart` window. Its instance should only be accessed by using this method. - -`position`: specifies how the Subchart will float. - -`height` | `width`: Specifies the size of the Subchart, where `1` is the width/height of the window (100%) - -`sync`: If given as `True`, the Subchart's timescale and crosshair will follow that of the declaring `Chart` or `SubChart`. If a `str` is passed, the `SubChart` will follow the panel with the given id. Chart ids can be accessed from the`chart.id` and `subchart.id` attributes. - -```{important} -`width` and `height` should be given as a number between 0 and 1. -``` - -`SubCharts` are arranged horizontally from left to right. When the available space is no longer sufficient, the subsequent `SubChart` will be positioned on a new row, starting from the left side. - -### Grid of 4 Example: - -```python -import pandas as pd -from lightweight_charts import Chart - -if __name__ == '__main__': - chart = Chart(inner_width=0.5, inner_height=0.5) - chart2 = chart.create_subchart(position='right', width=0.5, height=0.5) - chart3 = chart.create_subchart(position='left', width=0.5, height=0.5) - chart4 = chart.create_subchart(position='right', width=0.5, height=0.5) - - chart.watermark('1') - chart2.watermark('2') - chart3.watermark('3') - chart4.watermark('4') - - df = pd.read_csv('ohlcv.csv') - chart.set(df) - chart2.set(df) - chart3.set(df) - chart4.set(df) - - chart.show(block=True) - -``` - -### Synced Line Chart Example: - -```python -import pandas as pd -from lightweight_charts import Chart - -if __name__ == '__main__': - chart = Chart(inner_width=1, inner_height=0.8) - chart.time_scale(visible=False) - - chart2 = chart.create_subchart(width=1, height=0.2, sync=True) - line = chart2.create_line() - - df = pd.read_csv('ohlcv.csv') - df2 = pd.read_csv('rsi.csv') - - chart.set(df) - line.set(df2) - - chart.show(block=True) -``` - - diff --git a/docs/source/conf.py b/docs/source/conf.py index 60b009e..27551a3 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,12 +1,110 @@ +import os.path + project = 'lightweight-charts-python' copyright = '2023, louisnw' author = 'louisnw' -release = '1.0.16' +release = '1.0.17' -extensions = ["myst_parser"] +extensions = [ + "myst_parser", + "sphinx_tippy", + "sphinx_copybutton" +] + +myst_enable_extensions = [ + "deflist", + "fieldlist", + "attrs_block" +] + +source_suffix = '.md' +master_doc = 'index' templates_path = ['_templates'] -exclude_patterns = [] +html_additional_pages = { + 'index': 'landing.html' +} +html_css_files = [ + 'splash.css' +] + +html_title = '''Lightweight
Charts
Python
''' + html_theme = 'furo' html_static_path = ['_static'] + +import sys + +sys.path.append(os.path.abspath('_ext')) + +pygments_style = 'styles.LightStyle' +pygments_dark_style = "styles.DarkStyle" + +html_theme_options = { + "light_css_variables": { + + }, + "dark_css_variables": { + + "color-background-primary": '#121417', + "color-background-secondary": '#181b1e', + + }, + "footer_icons": [ + { + "name": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/7wzcr2p9vxm", + "html": """ +
+ + + + + + + + + + + + + + + + + Support the library! +
+ """, + "class": "", + }, + { + "name": "GitHub", + "url": "https://github.com/louisnw01/lightweight-charts-python", + "html": """ + + + + """, + "class": "", + }, + ], +} + + + + diff --git a/docs/source/examples/events.md b/docs/source/examples/events.md new file mode 100644 index 0000000..ee468fc --- /dev/null +++ b/docs/source/examples/events.md @@ -0,0 +1,74 @@ +# Events + +## Hotkey Example + +```python +from lightweight_charts import Chart + +def place_buy_order(key): + print(f'Buy {key} shares.') + + +def place_sell_order(key): + print(f'Sell all shares, because I pressed {key}.') + + +if __name__ == '__main__': + chart = Chart() + chart.hotkey('shift', (1, 2, 3), place_buy_order) + chart.hotkey('shift', 'X', place_sell_order) + chart.show(block=True) +``` +___ + + +## Topbar Example + +```python +import pandas as pd +from lightweight_charts import Chart + + +def get_bar_data(symbol, timeframe): + if symbol not in ('AAPL', 'GOOGL', 'TSLA'): + print(f'No data for "{symbol}"') + return pd.DataFrame() + return pd.read_csv(f'bar_data/{symbol}_{timeframe}.csv') + + +def on_search(chart, searched_string): + new_data = get_bar_data(searched_string, chart.topbar['timeframe'].value) + if new_data.empty: + return + chart.topbar['symbol'].set(searched_string) + chart.set(new_data) + + +def on_timeframe_selection(chart): + new_data = get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value) + if new_data.empty: + return + chart.set(new_data, True) + + +def on_horizontal_line_move(chart, line): + print(f'Horizontal line moved to: {line.price}') + + +if __name__ == '__main__': + chart = Chart(toolbox=True) + chart.legend(True) + + chart.events.search += on_search + + chart.topbar.textbox('symbol', 'TSLA') + chart.topbar.switcher('timeframe', ('1min', '5min', '30min'), default='5min', + func=on_timeframe_selection) + + df = get_bar_data('TSLA', '5min') + chart.set(df) + + chart.horizontal_line(200, func=on_horizontal_line_move) + + chart.show(block=True) +``` diff --git a/docs/source/examples/gui_examples.md b/docs/source/examples/gui_examples.md new file mode 100644 index 0000000..0678068 --- /dev/null +++ b/docs/source/examples/gui_examples.md @@ -0,0 +1,98 @@ +# Alternative GUI's + + +## PyQt5 / PySide6 + +```python +import pandas as pd +from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget + +from lightweight_charts.widgets import QtChart + +app = QApplication([]) +window = QMainWindow() +layout = QVBoxLayout() +widget = QWidget() +widget.setLayout(layout) + +window.resize(800, 500) +layout.setContentsMargins(0, 0, 0, 0) + +chart = QtChart(widget) + +df = pd.read_csv('ohlcv.csv') +chart.set(df) + +layout.addWidget(chart.get_webview()) + +window.setCentralWidget(widget) +window.show() + +app.exec_() +``` +___ + + + +## WxPython + +```python +import wx +import pandas as pd + +from lightweight_charts.widgets import WxChart + + +class MyFrame(wx.Frame): + def __init__(self): + super().__init__(None) + self.SetSize(1000, 500) + + panel = wx.Panel(self) + sizer = wx.BoxSizer(wx.VERTICAL) + panel.SetSizer(sizer) + + chart = WxChart(panel) + + df = pd.read_csv('ohlcv.csv') + chart.set(df) + + sizer.Add(chart.get_webview(), 1, wx.EXPAND | wx.ALL) + sizer.Layout() + self.Show() + + +if __name__ == '__main__': + app = wx.App() + frame = MyFrame() + app.MainLoop() +``` +___ +## Jupyter + +```python +import pandas as pd +from lightweight_charts import JupyterChart + +chart = JupyterChart() + +df = pd.read_csv('ohlcv.csv') +chart.set(df) + +chart.load() +``` +___ + +## Streamlit + +```python +import pandas as pd +from lightweight_charts.widgets import StreamlitChart + +chart = StreamlitChart(width=900, height=600) + +df = pd.read_csv('ohlcv.csv') +chart.set(df) + +chart.load() +``` \ No newline at end of file diff --git a/docs/source/examples/subchart.md b/docs/source/examples/subchart.md new file mode 100644 index 0000000..3ddd397 --- /dev/null +++ b/docs/source/examples/subchart.md @@ -0,0 +1,50 @@ +# Subcharts + +## Grid of 4 + +```python +import pandas as pd +from lightweight_charts import Chart + +if __name__ == '__main__': + chart = Chart(inner_width=0.5, inner_height=0.5) + chart2 = chart.create_subchart(position='right', width=0.5, height=0.5) + chart3 = chart.create_subchart(position='left', width=0.5, height=0.5) + chart4 = chart.create_subchart(position='right', width=0.5, height=0.5) + + chart.watermark('1') + chart2.watermark('2') + chart3.watermark('3') + chart4.watermark('4') + + df = pd.read_csv('ohlcv.csv') + chart.set(df) + chart2.set(df) + chart3.set(df) + chart4.set(df) + + chart.show(block=True) + +``` +___ +## Synced Line Chart + +```python +import pandas as pd +from lightweight_charts import Chart + +if __name__ == '__main__': + chart = Chart(inner_width=1, inner_height=0.8) + chart.time_scale(visible=False) + + chart2 = chart.create_subchart(width=1, height=0.2, sync=True) + line = chart2.create_line() + + df = pd.read_csv('ohlcv.csv') + df2 = pd.read_csv('rsi.csv') + + chart.set(df) + line.set(df2) + + chart.show(block=True) +``` diff --git a/docs/source/examples/table.md b/docs/source/examples/table.md new file mode 100644 index 0000000..cb691a8 --- /dev/null +++ b/docs/source/examples/table.md @@ -0,0 +1,38 @@ +# Table + +```python +import pandas as pd +from lightweight_charts import Chart + +def on_row_click(row): + row['PL'] = round(row['PL']+1, 2) + row.background_color('PL', 'green' if row['PL'] > 0 else 'red') + + table.footer[1] = row['Ticker'] + +if __name__ == '__main__': + chart = Chart(width=1000, inner_width=0.7, inner_height=1) + subchart = chart.create_subchart(width=0.3, height=0.5) + df = pd.read_csv('ohlcv.csv') + chart.set(df) + subchart.set(df) + + table = chart.create_table(width=0.3, height=0.2, + headings=('Ticker', 'Quantity', 'Status', '%', 'PL'), + widths=(0.2, 0.1, 0.2, 0.2, 0.3), + alignments=('center', 'center', 'right', 'right', 'right'), + position='left', func=on_row_click) + + table.format('PL', f'£ {table.VALUE}') + table.format('%', f'{table.VALUE} %') + + table.new_row('SPY', 3, 'Submitted', 0, 0) + table.new_row('AMD', 1, 'Filled', 25.5, 105.24) + table.new_row('NVDA', 2, 'Filled', -0.5, -8.24) + + table.footer(2) + table.footer[0] = 'Selected:' + + chart.show(block=True) + +``` diff --git a/docs/source/examples/toolbox.md b/docs/source/examples/toolbox.md new file mode 100644 index 0000000..8c1a3e6 --- /dev/null +++ b/docs/source/examples/toolbox.md @@ -0,0 +1,73 @@ +# Toolbox with persistent drawings + +To get started, create a file called `drawings.json`, which should contain: +``` +{} +``` +___ + + + +```python +import pandas as pd +from lightweight_charts import Chart + + +def get_bar_data(symbol, timeframe): + if symbol not in ('AAPL', 'GOOGL', 'TSLA'): + print(f'No data for "{symbol}"') + return pd.DataFrame() + return pd.read_csv(f'bar_data/{symbol}_{timeframe}.csv') + + +def on_search(chart, searched_string): + new_data = get_bar_data(searched_string, chart.topbar['timeframe'].value) + if new_data.empty: + return + chart.topbar['symbol'].set(searched_string) + chart.set(new_data) + + # Load the drawings saved under the symbol. + chart.toolbox.load_drawings(searched_string) + + +def on_timeframe_selection(chart): + new_data = get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value) + if new_data.empty: + return + # The symbol has not changed, so we want to re-render the drawings. + chart.set(new_data, render_drawings=True) + + +if __name__ == '__main__': + chart = Chart(toolbox=True) + chart.legend(True) + + chart.events.search += on_search + chart.topbar.textbox('symbol', 'TSLA') + chart.topbar.switcher( + 'timeframe', + ('1min', '5min', '30min'), + default='5min', + func=on_timeframe_selection + ) + + df = get_bar_data('TSLA', '5min') + + chart.set(df) + + # Imports the drawings saved in the JSON file. + chart.toolbox.import_drawings('drawings.json') + + # Loads the drawings under the default symbol. + chart.toolbox.load_drawings(chart.topbar['symbol'].value) + + # Saves drawings based on the symbol. + chart.toolbox.save_drawings_under(chart.topbar['symbol']) + + chart.show(block=True) + + # Exports the drawings to the JSON file upon close. + chart.toolbox.export_drawings('drawings.json') + +``` \ No newline at end of file diff --git a/docs/source/examples/yfinance.md b/docs/source/examples/yfinance.md new file mode 100644 index 0000000..0efbfd5 --- /dev/null +++ b/docs/source/examples/yfinance.md @@ -0,0 +1,48 @@ +# YFinance + +```python +import datetime as dt +import yfinance as yf +from lightweight_charts import Chart + + +def get_bar_data(symbol, timeframe): + if timeframe in ('1m', '5m', '30m'): + days = 7 if timeframe == '1m' else 60 + start_date = dt.datetime.now()-dt.timedelta(days=days) + else: + start_date = None + + chart.spinner(True) + data = yf.download(symbol, start_date, interval=timeframe) + chart.spinner(False) + + if data.empty: + return False + chart.set(data) + return True + + +def on_search(chart, searched_string): + if get_bar_data(searched_string, chart.topbar['timeframe'].value): + chart.topbar['symbol'].set(searched_string) + + +def on_timeframe_selection(chart): + get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value) + + +if __name__ == '__main__': + chart = Chart(toolbox=True, debug=True) + chart.legend(True) + chart.events.search += on_search + chart.topbar.textbox('symbol', 'n/a') + chart.topbar.switcher( + 'timeframe', + ('1m', '5m', '30m', '1d', '1wk'), + default='5m', + func=on_timeframe_selection + ) + + chart.show(block=True) +``` \ No newline at end of file diff --git a/docs/source/index.md b/docs/source/index.md index d2b32fb..0ccc926 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -1,15 +1,35 @@ ```{toctree} :hidden: +:caption: TUTORIALS +tutorials/getting_started +tutorials/events +``` -common_methods -charts -callbacks -toolbox -tables + + + + +```{toctree} +:hidden: +:caption: EXAMPLES +examples/table +examples/toolbox +examples/subchart +examples/yfinance +examples/events +examples/gui_examples +``` + + +```{toctree} +:hidden: +:caption: DOCS +reference/index polygon + Github Repository ``` -```{include} ../../README.md -``` +```{include} ../../README.md +``` \ No newline at end of file diff --git a/docs/source/polygon.md b/docs/source/polygon.md index 9492aa6..c82c9a1 100644 --- a/docs/source/polygon.md +++ b/docs/source/polygon.md @@ -1,14 +1,11 @@ # Polygon.io [Polygon.io's](https://polygon.io/?utm_source=affiliate&utm_campaign=pythonlwcharts) market data API is directly integrated within lightweight-charts-python, and is easy to use within the library. + ___ -## Requirements -To use data from Polygon, there are certain libraries (not listed as requirements) that must be installed: -* Static data requires the `requests` library. -* Live data requires the `websockets` library. -___ -## `polygon` -`polygon` is a [Common Method](https://lightweight-charts-python.readthedocs.io/en/latest/common_methods.html), and can be accessed from within any chart type. + +````{py:class} PolygonAPI +This class should be accessed from the `polygon` attribute, which is contained within all chart types. `chart.polygon.` @@ -21,14 +18,15 @@ The `stock`, `option`, `index`, `forex`, and `crypto` methods of `chart.polygon` * `live`: When set to `True`, a websocket connection will be used to update the chart or subchart in real-time. * These methods will also return a boolean representing whether the request was successful. +The `websockets` library is required when using live data. + ```{important} When using live data and the standard `show` method, the `block` parameter __must__ be set to `True` in order for the data to congregate on the chart (`chart.show(block=True)`). If `show_async` is used with live data, `block` can be either value. ``` -___ -### Example: +For Example: ```python from lightweight_charts import Chart @@ -43,67 +41,90 @@ if __name__ == '__main__': ) chart.show(block=True) ``` + ___ -### `api_key` -`key: str` +```{py:method} api_key(key: str) Sets the API key for the chart. Subsequent `SubChart` objects will inherit the API key given to the parent chart. + +``` ___ -### `stock` -`symbol: str` | `timeframe: str` | `start_date: str` | `end_date: str` | `limit: int` | `live: bool` | `-> bool` + + + +```{py:method} stock(symbol: str, timeframe: str, start_date: str, end_date: str, limit: int, live: bool) -> bool Requests and displays stock data pulled from Polygon.io. + +`async_stock` can also be used. +``` ___ -### `option` -`symbol: str` | `timeframe: str` | `start_date: str` | `expiration` | `right: 'C' | 'P'` | `strike: int | float` | `end_date: str` | `limit: int` | `live: bool` | `-> bool` + + +```{py:method} option(symbol: str, timeframe: str, expiration: str, right: 'C' | 'P', strike: NUM, end_date: str, limit: int, live: bool) -> bool Requests and displays option data pulled from Polygon.io. A formatted option ticker (SPY251219C00650000) can also be given to the `symbol` parameter, allowing for `expiration`, `right`, and `strike` to be left blank. + +`async_option` can also be used. + +``` ___ -### `index` -`symbol: str` | `timeframe: str` | `start_date: str` | `end_date: str` | `limit: int` | `live: bool` | `-> bool` + + +```{py:method} index(symbol: str, timeframe: str, start_date: str, end_date: str, limit: int, live: bool) -> bool Requests and displays index data pulled from Polygon.io. +`async_index` can also be used. +``` ___ -### `forex` -`fiat_pair: str` | `timeframe: str` | `start_date: str` | `end_date: str` | `limit: int` | `live: bool` | `-> bool` + + +```{py:method} forex(fiat_pair: str, timeframe: str, start_date: str, end_date: str, limit: int, live: bool) -> bool Requests and displays a forex pair pulled from Polygon.io. The two currencies should be separated by a '-' (`USD-CAD`, `GBP-JPY`, etc.). +`async_forex` can also be used. +``` ___ -### `crypto` -`crypto_pair: str` | `timeframe: str` | `start_date: str` | `end_date: str` | `limit: int` | `live: bool` | `-> bool` + + +```{py:method} crypto(crypto_pair: str, timeframe: str, start_date: str, end_date: str, limit: int, live: bool) -> bool Requests and displays a crypto pair pulled from Polygon.io. The two currencies should be separated by a '-' (`BTC-USD`, `ETH-BTC`, etc.). +`async_crypto` can also be used. +``` ___ -### `log` -`info: bool` + + +```{py:method} log(info: bool) If `True`, informational log messages (connection, subscriptions etc.) will be displayed in the console. Data errors will always be shown in the console. +``` + +```` + ___ -## PolygonChart - -`api_key: str` | `live: bool` | `num_bars: int` - +````{py:class} PolygonChart(api_key: str, num_bars: int, limit: int, end_date: str, timeframe_options: tuple, security_options: tuple, live: bool) The `PolygonChart` provides an easy and complete way to use the Polygon.io API within lightweight-charts-python. -This object requires the `requests` library for static data, and the `websockets` library for live data. +This object requires the `websockets` library for live data. All data is requested within the chart window through searching and selectors. @@ -118,18 +139,45 @@ As well as the parameters from the [Chart](https://lightweight-charts-python.rea * `live`: If True, the chart will update in real-time. ___ -### Example: +For Example: ```python from lightweight_charts import PolygonChart if __name__ == '__main__': - chart = PolygonChart(api_key='', - num_bars=200, - limit=5000, - live=True) + chart = PolygonChart( + api_key='', + num_bars=200, + limit=5000, + live=True + ) chart.show(block=True) ``` ![PolygonChart png](https://raw.githubusercontent.com/louisnw01/lightweight-charts-python/main/docs/source/polygonchart.png) +```` + +```{py:function} polygon.get_bar_data(ticker: str, timeframe: str, start_date: str, end_date: str, limit: int = 5_000) -> pd.DataFrame +Module function which returns a formatted Dataframe of the requested aggregate data. + +`ticker` should be prefixed for the appropriate security type (eg. `I:NDX`) + +``` + +```{py:function} polygon.subscribe(ticker: str, sec_type: SEC_TYPE, func: callable, args: tuple, precision=2) +:async: + +Subscribes the given callable to live data from polygon. emitting a dictionary (and any given arguments) to the function. + +``` + +```{py:function} polygon.unsubscribe(func: callable) +:async: + +Unsubscribes the given function from live data. + +The ticker will only be unsubscribed if there are no additional functions that are currently subscribed. + +``` + diff --git a/docs/source/reference/abstract_chart.md b/docs/source/reference/abstract_chart.md new file mode 100644 index 0000000..97e2879 --- /dev/null +++ b/docs/source/reference/abstract_chart.md @@ -0,0 +1,329 @@ + +# `AbstractChart` + +`````{py:class} AbstractChart(width, height) +Abstracted chart used to create child classes. + +___ + + + +```{py:method} set(data: pd.DataFrame, render_drawings: bool = False) +Sets the initial data for the chart. + + + +Columns should be named: +: `time | open | high | low | close | volume` + +Time can be given in the index rather than a column, and volume can be omitted if volume is not used. Column names are not case sensitive. + +If `render_drawings` is `True`, any drawings made using the `toolbox` will be redrawn with the new data. This is designed to be used when switching to a different timeframe of the same symbol. + +`None` can also be given, which will erase all candle and volume data displayed on the chart. +``` + + +___ + + + +```{py:method} update(series: pd.Series) +Updates the chart data from a bar. + +Series labels should be akin to [`set`](#AbstractChart.set). + +``` + + +___ + + +```{py:method} update_from_tick(series: pd.Series, cumulative_volume: bool = False) +Updates the chart from a tick. + +Labels should be named: +: `time | price | volume` + +As before, the `time` can also be named `date`, and the `volume` can be omitted if volume is not enabled. The `time` column can also be the name of the Series object. + +The provided ticks do not need to be rounded to an interval (1 min, 5 min etc.), as the library handles this automatically. + +If `cumulative_volume` is used, the volume data given will be added onto the latest bar of volume data. +``` +___ + + + +```{py:method} create_line(name: str, color: COLOR, style: LINE_STYLE, width: int, price_line: bool, price_label: bool) -> Line + +Creates and returns a Line object, representing a `LineSeries` object in Lightweight Charts and can be used to create indicators. As well as the methods described below, the `Line` object also has access to: + +[`marker`](#marker), [`horizontal_line`](#AbstractChart.horizontal_line) [`hide_data`](#hide_data), [`show_data`](#show_data) and[`price_line`](#price_line). + +Its instance should only be accessed from this method. +``` +___ + + + +```{py:function} lines() -> List[Line] + +Returns a list of all lines for the chart. + +``` +___ + + + +```{py:function} trend_line(start_time: str | datetime, start_value: NUM, end_time: str | datetime, end_value: NUM, color: COLOR, width: int) -> Line + +Creates a trend line, drawn from the first point (`start_time`, `start_value`) to the last point (`end_time`, `end_value`). + +``` +___ + + + +```{py:function} ray_line(start_time: str | datetime, value: NUM, color: COLOR, width: int) -> Line + +Creates a ray line, drawn from the first point (`start_time`, `value`) and onwards. + +``` +___ + + + +```{py:function} marker(time: datetime, position: MARKER_POSITION, shape: MARKER_SHAPE, color: COLOR, text: str) -> str + +Adds a marker to the chart, and returns its id. + +If the `time` parameter is not given, the marker will be placed at the latest bar. + +When using multiple markers, they should be placed in chronological order or display bugs may be present. + +``` +___ + + + +```{py:function} remove_marker(marker_id: str) + +Removes the marker with the given id. + +``` +___ + + + +```{py:function} horizontal_line(price: NUM, color: COLOR, width: int, style: LINE_STYLE, text: str, axis_label_visible: bool, func: callable= None) -> HorizontalLine + +Places a horizontal line at the given price, and returns a [`HorizontalLine`] object. + +If a `func` is given, the horizontal line can be edited on the chart. Upon its movement a callback will also be emitted to the callable given, containing the HorizontalLine object. The toolbox should be enabled during its usage. It is designed to be used to update an order (limit, stop, etc.) directly on the chart. + +``` +___ + + + +```{py:function} remove_horizontal_line(price: NUM) + +Removes a horizontal line at the given price. +``` +___ + + + +```{py:function} clear_markers() + +Clears the markers displayed on the data. +``` +___ + + + +```{py:function} clear_horizontal_lines + +Clears the horizontal lines displayed on the data. +``` +___ + + + +```{py:function} precision(precision: int) + +Sets the precision of the chart based on the given number of decimal places. + +``` +___ + + + +```{py:function} price_scale(mode: PRICE_SCALE_MODE, align_labels: bool, border_visible: bool, border_color: COLOR, text_color: COLOR, entire_text_only: bool, ticks_visible: bool, scale_margin_top: float, scale_margin_bottom: float) + +Price scale options for the chart. +``` +___ + + + +```{py:function} time_scale(right_offset: int, min_bar_spacing: float, visible: bool, time_visible: bool, seconds_visible: bool, border_visible: bool, border_color: COLOR) + +Timescale options for the chart. +``` +___ + + + +```{py:function} layout(background_color: COLOR, text_color: COLOR, font_size: int, font_family: str) + +Global layout options for the chart. +``` +___ + + + +```{py:function} grid(vert_enabled: bool, horz_enabled: bool, color: COLOR, style: LINE_STYLE) + +Grid options for the chart. +``` +___ + + + +```{py:function} candle_style(up_color: COLOR, down_color: COLOR, wick_enabled: bool, border_enabled: bool, border_up_color: COLOR, border_down_color: COLOR, wick_up_color: COLOR, wick_down_color: COLOR) + +Candle styling for each of the candle's parts (border, wick). +``` +___ + + + +```{py:function} volume_config(scale_margin_top: float, scale_margin_bottom: float, up_color: COLOR, down_color: COLOR) + +Volume config options. + +```{important} +The float values given to scale the margins must be greater than 0 and less than 1. +``` +___ + + + +```{py:function} crosshair(mode, vert_visible: bool, vert_width: int, vert_color: COLOR, vert_style: LINE_STYLE, vert_label_background_color: COLOR, horz_visible: bool, horz_width: int, horz_color: COLOR, horz_style: LINE_STYLE, horz_label_background_color: COLOR) + +Crosshair formatting for its vertical and horizontal axes. +``` +___ + + + +```{py:function} watermark(text: str, font_size: int, color: COLOR) + +Overlays a watermark on top of the chart. +``` +___ + + + +```{py:function} legend(visible: bool, ohlc: bool, percent: bool, lines: bool, color: COLOR, font_size: int, font_family: str) + +Configures the legend of the chart. +``` +___ + + + +```{py:function} spinner(visible: bool) + +Shows a loading spinner on the chart, which can be used to visualise the loading of large datasets, API calls, etc. + +```{important} +This method must be used in conjunction with the search event. +``` +___ + + + +```{py:function} price_line(label_visible: bool, line_visible: bool, title: str) + +Configures the visibility of the last value price line and its label. +``` +___ + + + +```{py:function} fit() + +Attempts to fit all data displayed on the chart within the viewport (`fitContent()`). +``` +___ + + + +```{py:function} show_data() + +Shows the hidden candles on the chart. +``` +___ + + + +```{py:function} hide_data() + +Hides the candles on the chart. +``` +___ + + + +```{py:function} hotkey(modifier: 'ctrl' | 'alt' | 'shift' | 'meta', key: 'str' | 'int' | 'tuple', func: callable) + +Adds a global hotkey to the chart window, which will execute the method or function given. + +When using a number in `key`, it should be given as an integer. If multiple key commands are needed for the same function, a tuple can be passed to `key`. +``` +___ + + + +```{py:function} create_table(width: NUM, height: NUM, headings: Tuple[str], widths: Tuple[float], alignments: Tuple[str], position: FLOAT, draggable: bool, func: callable) -> Table + +Creates and returns a [`Table`](https://lightweight-charts-python.readthedocs.io/en/latest/tables.html) object. + +``` +___ + + + +````{py:function} create_subchart(position: FLOAT, width: float, height: float, sync: bool | str, scale_candles_only: bool, toolbox: bool) -> AbstractChart + +Creates and returns a Chart object, placing it adjacent to the previous Chart. This allows for the use of multiple chart panels within the same window. + +`position` +: specifies how the Subchart will float. + +`height` | `width` +: Specifies the size of the Subchart, where `1` is the width/height of the window (100%) + +`sync` +: If given as `True`, the Subchart's timescale and crosshair will follow that of the declaring Chart. If a `str` is passed, the Chart will follow the panel with the given id. Chart ids can be accessed from the `chart.id` attribute. + +```{important} +`width` and `height` should be given as a number between 0 and 1. +``` + +Charts are arranged horizontally from left to right. When the available space is no longer sufficient, the subsequent Chart will be positioned on a new row, starting from the left side. + + +```` +````` + + + + + + + + diff --git a/docs/source/charts.md b/docs/source/reference/charts.md similarity index 58% rename from docs/source/charts.md rename to docs/source/reference/charts.md index 59a17b9..e21f572 100644 --- a/docs/source/charts.md +++ b/docs/source/reference/charts.md @@ -1,11 +1,12 @@ # Charts -This page contains a reference to all chart objects that can be used within the library. They all have access to the common methods. +This page contains a reference to all chart objects that can be used within the library. + +They inherit from [AbstractChart](#AbstractChart). ___ -## Chart -`width: int` | `height: int` | `x: int` | `y: int` | `on_top: bool` | `maximize: bool` | `debug: bool` | `toolbox: bool` +`````{py:class} Chart(width: int, height: int, x: int, y: int, on_top: bool, maximize: bool, debug: bool, toolbox: bool, inner_width: float, inner_height: float, scale_candles_only: bool) The main object used for the normal functionality of lightweight-charts-python, built on the pywebview library. @@ -14,31 +15,45 @@ The `Chart` object should be defined within an `if __name__ == '__main__'` block ``` ___ -### `show` -`block: bool` + + +```{py:method} show(block: bool) Shows the chart window, blocking until the chart has loaded. If `block` is enabled, the method will block code execution until the window is closed. + +``` ___ -### `hide` + + +```{py:method} hide() Hides the chart window, which can be later shown by calling `chart.show()`. +``` ___ -### `exit` + + +```{py:method} exit() Exits and destroys the chart window. +``` ___ -### `show_async` -`block: bool` + + +```{py:method} show_async(block: bool) +:async: Show the chart asynchronously. + +``` ___ -### `screenshot` -`-> bytes` + + +````{py:method} screenshot(block: bool) -> bytes Takes a screenshot of the chart, and returns a bytes object containing the image. For example: @@ -57,10 +72,14 @@ if __name__ == '__main__': ```{important} This method should be called after the chart window has loaded. ``` +```` + +````` ___ -## QtChart -`widget: QWidget` + + +````{py:class} QtChart(widget: QWidget) The `QtChart` object allows the use of charts within a `QMainWindow` object, and has similar functionality to the `Chart` object for manipulating data, configuring and styling. @@ -69,141 +88,68 @@ Either the `PyQt5` or `PySide6` libraries will work with this chart. Callbacks can be received through the Qt event loop. ___ -### `get_webview` -`-> QWebEngineView` + +```{py:method} get_webview() -> QWebEngineView Returns the `QWebEngineView` object. -___ -### Example: - -```python -import pandas as pd -from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget - -from lightweight_charts.widgets import QtChart - -app = QApplication([]) -window = QMainWindow() -layout = QVBoxLayout() -widget = QWidget() -widget.setLayout(layout) - -window.resize(800, 500) -layout.setContentsMargins(0, 0, 0, 0) - -chart = QtChart(widget) - -df = pd.read_csv('ohlcv.csv') -chart.set(df) - -layout.addWidget(chart.get_webview()) - -window.setCentralWidget(widget) -window.show() - -app.exec_() ``` +```` ___ -## WxChart -`parent: wx.Panel` + +````{py:class} WxChart(parent: WxPanel) The WxChart object allows the use of charts within a `wx.Frame` object, and has similar functionality to the `Chart` object for manipulating data, configuring and styling. Callbacks can be received through the Wx event loop. ___ -### `get_webview` -`-> wx.html2.WebView` + + +```{py:method} get_webview() -> wx.html2.WebView Returns a `wx.html2.WebView` object which can be used to for positioning and styling within wxPython. -___ -### Example: - -```python -import wx -import pandas as pd - -from lightweight_charts.widgets import WxChart - - -class MyFrame(wx.Frame): - def __init__(self): - super().__init__(None) - self.SetSize(1000, 500) - - panel = wx.Panel(self) - sizer = wx.BoxSizer(wx.VERTICAL) - panel.SetSizer(sizer) - - chart = WxChart(panel) - - df = pd.read_csv('ohlcv.csv') - chart.set(df) - - sizer.Add(chart.get_webview(), 1, wx.EXPAND | wx.ALL) - sizer.Layout() - self.Show() - - -if __name__ == '__main__': - app = wx.App() - frame = MyFrame() - app.MainLoop() ``` +```` ___ -## StreamlitChart + +````{py:class} StreamlitChart The `StreamlitChart` object allows the use of charts within a Streamlit app, and has similar functionality to the `Chart` object for manipulating data, configuring and styling. This object only supports the displaying of **static** data, and should not be used with the `update_from_tick` or `update` methods. Every call to the chart object must occur **before** calling `load`. + ___ -### `load` -Loads the chart into the Streamlit app. This should be called after setting, styling, and configuring the chart, as no further calls to the `StreamlitChart` will be acknowledged. -___ -### Example: -```python -import pandas as pd -from lightweight_charts.widgets import StreamlitChart +```{py:method} load() -chart = StreamlitChart(width=900, height=600) +Loads the chart into the Streamlit app. This should be called after setting, styling, and configuring the chart, as no further calls to the `StreamlitChart` will be acknowledged. -df = pd.read_csv('ohlcv.csv') -chart.set(df) - -chart.load() ``` +```` ___ -## JupyterChart + + +````{py:class} JupyterChart The `JupyterChart` object allows the use of charts within a notebook, and has similar functionality to the `Chart` object for manipulating data, configuring and styling. This object only supports the displaying of **static** data, and should not be used with the `update_from_tick` or `update` methods. Every call to the chart object must occur **before** calling `load`. ___ -### `load` + + +```{py:method} load() Renders the chart. This should be called after setting, styling, and configuring the chart, as no further calls to the `JupyterChart` will be acknowledged. -___ -### Example: -```python -import pandas as pd -from lightweight_charts import JupyterChart - -chart = JupyterChart() - -df = pd.read_csv('ohlcv.csv') -chart.set(df) - -chart.load() ``` +```` diff --git a/docs/source/reference/events.md b/docs/source/reference/events.md new file mode 100644 index 0000000..83a785a --- /dev/null +++ b/docs/source/reference/events.md @@ -0,0 +1,28 @@ +# `Events` + +````{py:class} AbstractChart.Events +The chart events class, accessed through `chart.events` + +Events allow asynchronous and synchronous callbacks to be passed back into python. + +Chart events can be subscribed to using: `chart.events. += ` + +```{py:method} search -> (chart: Chart, string: str) +Fires upon searching. Searchbox will be automatically created. + +``` + +```{py:method} new_bar -> (chart: Chart) +Fires when a new candlestick is added to the chart. + +``` + +```{py:method} range_change -> (chart: Chart, bars_before: NUM, bars_after: NUM) +Fires when the range (visibleLogicalRange) changes. + +``` + +```` + +Tutorial: [Topbar & Events](../tutorials/events.md) + diff --git a/docs/source/reference/horizontal_line.md b/docs/source/reference/horizontal_line.md new file mode 100644 index 0000000..5dc9139 --- /dev/null +++ b/docs/source/reference/horizontal_line.md @@ -0,0 +1,28 @@ +# `HorizontalLine` + + +````{py:class} HorizontalLine(price: NUM, color: COLOR, width: int, style: LINE_STYLE, text: str, axis_label_visible: bool, func: callable= None) + +The `HorizontalLine` object represents a `PriceLine` in Lightweight Charts. + +Its instance should be accessed from the `horizontal_line` method. + + + +```{py:method} update(price: NUM) + +Updates the price of the horizontal line. +``` + + +```{py:method} label(text: str) + +Updates the label of the horizontal line. +``` + + +```{py:method} delete() + +Irreversibly deletes the horizontal line. +``` +```` \ No newline at end of file diff --git a/docs/source/reference/index.md b/docs/source/reference/index.md new file mode 100644 index 0000000..279350c --- /dev/null +++ b/docs/source/reference/index.md @@ -0,0 +1,23 @@ +# Reference + +```{toctree} +:hidden: +abstract_chart +line +horizontal_line +charts +events +topbar +toolbox +tables + +``` + + +1. [`AbstractChart`](#AbstractChart) +2. [`Line`](#Line) +3. [`HorizontalLine`](#HorizontalLine) +4. [Charts](#charts) +5. [`Events`](./events.md) +6. [`Toolbox`](#ToolBox) +7. [`Table`](#Table) \ No newline at end of file diff --git a/docs/source/reference/line.md b/docs/source/reference/line.md new file mode 100644 index 0000000..db9b25b --- /dev/null +++ b/docs/source/reference/line.md @@ -0,0 +1,44 @@ +# `Line` + + +````{py:class} Line(name: str, color: COLOR, style: LINE_STYLE, width: int, price_line: bool, price_label: bool) + +The `Line` object represents a `LineSeries` object in Lightweight Charts and can be used to create indicators. As well as the methods described below, the `Line` object also has access to: + +[`marker`](#marker), [`horizontal_line`](#AbstractChart.horizontal_line) [`hide_data`](#hide_data), [`show_data`](#show_data) and [`price_line`](#price_line). + +Its instance should only be accessed from [create_line](#AbstractChart.create_line). +___ + + + +```{py:function} set(data: pd.DataFrame) + +Sets the data for the line. + +When a name has not been set upon declaration, the columns should be named: `time | value` (Not case sensitive). + +Otherwise, the method will use the column named after the string given in `name`. This name will also be used within the legend of the chart. + +``` +___ + + + +```{py:function} update(series: pd.Series) + +Updates the data for the line. + +This should be given as a Series object, with labels akin to the `line.set()` function. +``` + + + +___ + +```{py:function} line.delete() + +Irreversibly deletes the line. + +``` +```` \ No newline at end of file diff --git a/docs/source/reference/tables.md b/docs/source/reference/tables.md new file mode 100644 index 0000000..091aef2 --- /dev/null +++ b/docs/source/reference/tables.md @@ -0,0 +1,125 @@ +# `Table` + +`````{py:class} Table(width: NUM, height: NUM, headings: Tuple[str], widths: Tuple[float], alignments: Tuple[str], position: FLOAT, draggable: bool, func: callable) + +Tables are panes that can be used to gain further functionality from charts. They are intended to be used for watchlists, order management, or position management. It should be accessed from the `create_table` common method. + +The `Table` and `Row` objects act as dictionaries, and can be manipulated as such. + +`width`/`height` +: Either given as a percentage (a `float` between 0 and 1) or as an integer representing pixel size. + +`widths` +: Given as a `float` between 0 and 1. + +`position` +: Used as you would with [`create_subchart`](#AbstractChart.create_subchart), representing how the table will float within the window. + +`draggable` +: If `True`, then the window can be dragged to any position within the window. + +`func` +: If given, this will be called when a row is clicked, returning the `Row` object in question. +___ + + + +````{py:method} new_row(*values, id: int) -> Row + +Creates a new row within the table, and returns a `Row` object. + +if `id` is passed it should be unique to all other rows. Otherwise, the `id` will be randomly generated. + +Rows can be passed a string (header) item or a tuple to set multiple headings: + +```python +row['Symbol'] = 'AAPL' +row['Symbol', 'Action'] = 'AAPL', 'BUY' +``` + +```` +___ + + + +```{py:method} clear() + +Clears and deletes all table rows. +``` +___ + + + +````{py:method} format(column: str, format_str: str) + +Sets the format to be used for the given column. `Table.VALUE` should be used as a placeholder for the cell value. For example: + +```python +table.format('Daily %', f'{table.VALUE} %') +table.format('PL', f'$ {table.VALUE}') +``` + +```` +___ + + + +```{py:method} visible(visible: bool) + +Sets the visibility of the Table. + +``` +````` +___ + + + +````{py:class} Row() + +```{py:method} background_color(column: str, color: COLOR) + +Sets the background color of the row cell. +``` +___ + + + +```{py:method} text_color(column: str, color: COLOR) + +Sets the foreground color of the row cell. +``` +___ + + + +```{py:method} delete() + +Deletes the row. +``` +```` +___ + + +````{py:class} Footer +Tables can also have a footer containing a number of text boxes. To initialize this, call the `footer` attribute with the number of textboxes to be used: + +```python +table.footer(3) # Footer will be displayed, with 3 text boxes. +``` +To edit the textboxes, treat `footer` as a list: + +```python +table.footer[0] = 'Text Box 1' +table.footer[1] = 'Text Box 2' +table.footer[2] = 'Text Box 3' +``` + +```` + + + + + + + + diff --git a/docs/source/reference/toolbox.md b/docs/source/reference/toolbox.md new file mode 100644 index 0000000..d340d53 --- /dev/null +++ b/docs/source/reference/toolbox.md @@ -0,0 +1,62 @@ +# `ToolBox` + +`````{py:class} ToolBox + +The Toolbox allows for trendlines, ray lines and horizontal lines to be drawn and edited directly on the chart. + +It can be used within any Chart object, and is enabled by setting the `toolbox` parameter to `True` upon Chart declaration. + +The following hotkeys can also be used when the Toolbox is enabled: + +| Key Cmd | Action | +|--- |--- | +| `alt T` | Trendline | +| `alt H` | Horizontal Line | +| `alt R` | Ray Line | +| `⌘ Z` or `ctrl Z` | Undo | + +Right-clicking on a drawing will open a context menu, allowing for color selection and deletion. +___ + + + +````{py:method} save_drawings_under(widget: Widget) + +Saves drawings under a specific `topbar` text widget. For example: + +```python +chart.toolbox.save_drawings_under(chart.topbar['symbol']) +``` + +```` +___ + + + +```{py:method} load_drawings(tag: str) + +Loads and displays drawings stored under the tag given. +``` +___ + + + +```{py:method} import_drawings(file_path: str) + +Imports the drawings stored at the JSON file given in `file_path`. + +``` +___ + + + +```{py:method} export_drawings(file_path: str) + +Exports all currently saved drawings to the JSON file given in `file_path`. + +``` + +````` + + + diff --git a/docs/source/reference/topbar.md b/docs/source/reference/topbar.md new file mode 100644 index 0000000..914fc83 --- /dev/null +++ b/docs/source/reference/topbar.md @@ -0,0 +1,54 @@ +# `TopBar` + + +````{py:class} TopBar +The `TopBar` class represents the top bar shown on the chart: + +![topbar](https://i.imgur.com/Qu2FW9Y.png) + +This object is accessed from the `topbar` attribute of the chart object (`chart.topbar.`). + +Switchers, text boxes and buttons can be added to the top bar, and their instances can be accessed through the `topbar` dictionary. For example: + +```python +chart.topbar.textbox('symbol', 'AAPL') # Declares a textbox displaying 'AAPL'. +print(chart.topbar['symbol'].value) # Prints the value within ('AAPL') + +chart.topbar['symbol'].set('MSFT') # Sets the 'symbol' textbox to 'MSFT' +print(chart.topbar['symbol'].value) # Prints the value again ('MSFT') +``` +___ + + + +```{py:method} switcher(name: str, options: tuple: default: str, func: callable) + +* `name`: the name of the switcher which can be used to access it from the `topbar` dictionary. +* `options`: The options for each switcher item. +* `default`: The initial switcher option set. + +``` +___ + + + +```{py:method} textbox(name: str, initial_text: str) + +* `name`: the name of the text box which can be used to access it from the `topbar` dictionary. +* `initial_text`: The text to show within the text box. + +``` +___ + + + +```{py:method} button(name: str, button_text: str, separator: bool, func: callable) + +* `name`: the name of the text box to access it from the `topbar` dictionary. +* `button_text`: Text to show within the button. +* `separator`: places a separator line to the right of the button. +* `func`: The event handler which will be executed upon a button click. + +``` + +```` \ No newline at end of file diff --git a/docs/source/reference/typing.md b/docs/source/reference/typing.md new file mode 100644 index 0000000..f0b3653 --- /dev/null +++ b/docs/source/reference/typing.md @@ -0,0 +1,42 @@ +:orphan: + +# `Typing` + +These classes serve as placeholders for type requirements. + + +```{py:class} NUM(Literal[float, int]) +``` + +```{py:class} FLOAT(Literal['left', 'right', 'top', 'bottom']) +``` + +```{py:class} TIME(Union[datetime, pd.Timestamp, str]) +``` + +```{py:class} COLOR(str) +Throughout the library, colors should be given as either rgb (`rgb(100, 100, 100)`), rgba(`rgba(100, 100, 100, 0.7)`), hex(`#32a852`) or a html literal(`blue`, `red` etc). +``` + +```{py:class} LINE_STYLE(Literal['solid', 'dotted', 'dashed', 'large_dashed', 'sparse_dotted']) +``` + +```{py:class} MARKER_POSITION(Literal['above', 'below', 'inside']) +``` + +```{py:class} MARKER_SHAPE(Literal['arrow_up', 'arrow_down', 'circle', 'square']) +``` + +```{py:class} CROSSHAIR_MODE(Literal['normal', 'magnet']) +``` + +```{py:class} PRICE_SCALE_MODE(Literal['normal', 'logarithmic', 'percentage', 'index100']) +``` + + + + + + + + diff --git a/docs/source/tables.md b/docs/source/tables.md deleted file mode 100644 index dd68626..0000000 --- a/docs/source/tables.md +++ /dev/null @@ -1,121 +0,0 @@ -# Table -`width: int/float` | `height: int/float` | `headings: tuple[str]` | `widths: tuple[float]` | `alignments: tuple[str]` | `position: 'left'/'right'/'top'/'bottom'` | `draggable: bool` | `func: callable` - -Tables are panes that can be used to gain further functionality from charts. They are intended to be used for watchlists, order management, or position management. It should be accessed from the `create_table` common method. - -The `Table` and `Row` objects act as dictionaries, and can be manipulated as such. - -`width`/`height`: Either given as a percentage (a `float` between 0 and 1) or as an integer representing pixel size. - -`widths`: Given as a `float` between 0 and 1. - -`position`: Used as you would when creating a `SubChart`, representing how the table will float within the window. - -`draggable`: If `True`, then the window can be dragged to any position within the window. - -`func`: If given this will be called when a row is clicked, returning the `Row` object in question. -___ - -## `new_row` (Row) -`*values` | `id: int` | `-> Row` - -Creates a new row within the table, and returns a `Row` object. - -if `id` is passed it should be unique to all other rows. Otherwise, the `id` will be randomly generated. - -Rows can be passed a string (header) item or a tuple to set multiple headings: - -```python -row['Symbol'] = 'AAPL' -row['Symbol', 'Action'] = 'AAPL', 'BUY' -``` - -### `background_color` -`column: str` | `color: str` - -Sets the background color of the row cell. - -### `text_color` -`column: str` | `color: str` - -Sets the foreground color of the row cell. - -### `delete` -Deletes the row. -___ - -## `clear` -Clears and deletes all table rows. -___ - -## `format` -`column: str` | `format_str: str` - -Sets the format to be used for the given column. `table.VALUE` should be used as a placeholder for the cell value. For example: - -```python -table.format('Daily %', f'{table.VALUE} %') -table.format('PL', f'$ {table.VALUE}') -``` -___ - -## `visible` -`visible: bool` - -Sets the visibility of the Table. -___ - -## Footer -Tables can also have a footer containing a number of text boxes. To initialize this, call the `footer` attribute with the number of textboxes to be used: - -```python -table.footer(3) # Footer will be displayed, with 3 text boxes. -``` -To edit the textboxes, treat `footer` as a list: - -```python -table.footer[0] = 'Text Box 1' -table.footer[1] = 'Text Box 2' -table.footer[2] = 'Text Box 3' -``` -___ - -## Example: - -```python -import pandas as pd -from lightweight_charts import Chart - -def on_row_click(row): - row['PL'] = round(row['PL']+1, 2) - row.background_color('PL', 'green' if row['PL'] > 0 else 'red') - - table.footer[1] = row['Ticker'] - -if __name__ == '__main__': - chart = Chart(width=1000, inner_width=0.7, inner_height=1) - subchart = chart.create_subchart(width=0.3, height=0.5) - df = pd.read_csv('ohlcv.csv') - chart.set(df) - subchart.set(df) - - table = chart.create_table(width=0.3, height=0.2, - headings=('Ticker', 'Quantity', 'Status', '%', 'PL'), - widths=(0.2, 0.1, 0.2, 0.2, 0.3), - alignments=('center', 'center', 'right', 'right', 'right'), - position='left', func=on_row_click) - - table.format('PL', f'£ {table.VALUE}') - table.format('%', f'{table.VALUE} %') - - table.new_row('SPY', 3, 'Submitted', 0, 0) - table.new_row('AMD', 1, 'Filled', 25.5, 105.24) - table.new_row('NVDA', 2, 'Filled', -0.5, -8.24) - - table.footer(2) - table.footer[0] = 'Selected:' - - chart.show(block=True) - -``` - diff --git a/docs/source/toolbox.md b/docs/source/toolbox.md deleted file mode 100644 index f766ae3..0000000 --- a/docs/source/toolbox.md +++ /dev/null @@ -1,98 +0,0 @@ -# Toolbox -The Toolbox allows for trendlines, ray lines and horizontal lines to be drawn and edited directly on the chart. - -It can be used within any Chart object, and is enabled by setting the `toolbox` parameter to `True` upon Chart declaration. - -The following hotkeys can also be used when the Toolbox is enabled: -* Alt+T: Trendline -* Alt+H: Horizontal Line -* Alt+R: Ray Line -* Meta+Z or Ctrl+Z: Undo - - -Right-clicking on a drawing will open a context menu, allowing for color selection and deletion. - -___ - -## `save_drawings_under` -`widget: Widget` - -Saves drawings under a specific `topbar` text widget. For example: - -```python -chart.toolbox.save_drawings_under(chart.topbar['symbol']) -``` -___ - -## `load_drawings` -`tag: str` - -Loads and displays drawings stored under the tag given. -___ - -## `import_drawings` -`file_path: str` - -Imports the drawings stored at the JSON file given in `file_path`. -___ - -## `export_drawings` -`file_path: str` - -Exports all currently saved drawings to the JSON file given in `file_path`. -___ - -## Example: - -To get started, create a file called `drawings.json`, which should only contain `{}`. - -```python -import pandas as pd -from lightweight_charts import Chart - - -def get_bar_data(symbol, timeframe): - if symbol not in ('AAPL', 'GOOGL', 'TSLA'): - print(f'No data for "{symbol}"') - return pd.DataFrame() - return pd.read_csv(f'bar_data/{symbol}_{timeframe}.csv') - - -def on_search(chart, searched_string): - new_data = get_bar_data(searched_string, chart.topbar['timeframe'].value) - if new_data.empty: - return - chart.topbar['symbol'].set(searched_string) - chart.set(new_data) - chart.toolbox.load_drawings(searched_string) # Loads the drawings saved under the symbol. - - -def on_timeframe_selection(chart): - new_data = get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value) - if new_data.empty: - return - chart.set(new_data, render_drawings=True) # The symbol has not changed, so we want to re-render the drawings. - - -if __name__ == '__main__': - chart = Chart(toolbox=True) - chart.legend(True) - - chart.events.search += on_search - chart.topbar.textbox('symbol', 'TSLA') - chart.topbar.switcher('timeframe', ('1min', '5min', '30min'), default='5min', func=on_timeframe_selection) - - df = get_bar_data('TSLA', '5min') - - chart.set(df) - - chart.toolbox.import_drawings('drawings.json') # Imports the drawings saved in the JSON file. - chart.toolbox.load_drawings(chart.topbar['symbol'].value) # Loads the drawings under the default symbol. - - chart.toolbox.save_drawings_under(chart.topbar['symbol']) # Saves drawings based on the symbol. - - chart.show(block=True) - - chart.toolbox.export_drawings('drawings.json') # Exports the drawings to the JSON file upon close. - -``` diff --git a/docs/source/tutorials/events.md b/docs/source/tutorials/events.md new file mode 100644 index 0000000..ac91c20 --- /dev/null +++ b/docs/source/tutorials/events.md @@ -0,0 +1,160 @@ +# Topbar & Events + +This section gives an overview of how events are handled across the library. + +## How to use events + + +Take a look at this minimal example, which uses the [`search`](#AbstractChart.Events) event: + +```python +from lightweight_charts import Chart + + +def on_search(chart, string): + print(f'Search Text: "{string}" | Chart/SubChart ID: "{chart.id}"') + + +if __name__ == '__main__': + chart = Chart() + + # Subscribe the function above to search event + chart.events.search += on_search + + chart.show(block=True) + +``` +Upon searching in a pane, the expected output would be akin to: +``` +Search Text: "AAPL" | Chart/SubChart ID: "window.blyjagcr" +``` +The ID shown above will change depending upon which pane was used to search, allowing for access to the object in question. + +```{important} +* When using `show` rather than `show_async`, block should be set to `True` (`chart.show(block=True)`). +* Event callables can be either coroutines, methods, or functions. +``` + +___ + +## Topbar events + + +Events can also be emitted from the topbar: + +```python +from lightweight_charts import Chart + +def on_button_press(chart): + new_button_value = 'On' if chart.topbar['my_button'].value == 'Off' else 'Off' + chart.topbar['my_button'].set(new_button_value) + print(f'Turned something {new_button_value.lower()}.') + + +if __name__ == '__main__': + chart = Chart() + chart.topbar.button('my_button', 'Off', func=on_button_press) + chart.show(block=True) + +``` +In this example, we are passing `on_button_press` to the `func` parameter. + +When the button is pressed, the function will be emitted the `chart` object as with the previous example, allowing access to the topbar dictionary. + + +The `switcher` is typically used for timeframe selection: + +```python +from lightweight_charts import Chart + +def on_timeframe_selection(chart): + print(f'Getting data with a {chart.topbar["my_switcher"].value} timeframe.') + + +if __name__ == '__main__': + chart = Chart() + chart.topbar.switcher( + name='my_switcher', + options=('1min', '5min', '30min'), + default='5min', + func=on_timeframe_selection) + chart.show(block=True) +``` +___ + +## Async clock + +There are many use cases where we will need to run our own code whilst the GUI loop continues to listen for events. Let's demonstrate this by using the `textbox` widget to display a clock: + +```python +import asyncio +from datetime import datetime +from lightweight_charts import Chart + + +async def update_clock(chart): + while chart.is_alive: + await asyncio.sleep(1-(datetime.now().microsecond/1_000_000)) + chart.topbar['clock'].set(datetime.now().strftime('%H:%M:%S')) + + +async def main(): + chart = Chart() + chart.topbar.textbox('clock') + await asyncio.gather(chart.show_async(block=True), update_clock(chart)) + + +if __name__ == '__main__': + asyncio.run(main()) +``` + +This is how the library is intended to be used with live data (option #2 [described here]()). +___ + +## Live data, topbar & events + + +Now we can create an asyncio program which updates chart data whilst allowing the GUI loop to continue processing events, based the [Live data](live_chart.md) example: + +```python +import asyncio +import pandas as pd +from lightweight_charts import Chart + + +async def data_loop(chart): + ticks = pd.read_csv('ticks.csv') + + for i, tick in ticks.iterrows(): + if not chart.is_alive: + return + chart.update_from_tick(ticks.iloc[i]) + await asyncio.sleep(0.03) + i += 1 + + +def on_new_bar(chart): + print('New bar event!') + + +def on_timeframe_selection(chart): + print(f'Selected timeframe of {chart.topbar["timeframe"].value}') + + +async def main(): + chart = Chart() + chart.events.new_bar += on_new_bar + + chart.topbar.switcher('timeframe', ('1min', '5min'), func=on_timeframe_selection) + + df = pd.read_csv('ohlc.csv') + + chart.set(df) + await asyncio.gather(chart.show_async(block=True), data_loop(chart)) + + +if __name__ == '__main__': + asyncio.run(main()) + +``` + diff --git a/docs/source/tutorials/getting_started.md b/docs/source/tutorials/getting_started.md new file mode 100644 index 0000000..6595576 --- /dev/null +++ b/docs/source/tutorials/getting_started.md @@ -0,0 +1,85 @@ +# Getting Started + +## Installation + +To install the library, use pip: + +```text +pip install lightweight-charts +``` + +Pywebview's installation can differ depending on OS. Please refer to their [documentation](https://pywebview.flowrl.com/guide/installation.html#installation). + +___ + +## A simple static chart + +```python +import pandas as pd +from lightweight_charts import Chart +``` + +Download this +[`ohlcv.csv`](../../../examples/1_setting_data/ohlcv.csv) +file for this tutorial. + +In this example, we are reading a csv file using pandas: +```text + date open high low close volume +0 2010-06-29 1.2667 1.6667 1.1693 1.5927 277519500.0 +1 2010-06-30 1.6713 2.0280 1.5533 1.5887 253039500.0 +2 2010-07-01 1.6627 1.7280 1.3513 1.4640 121461000.0 +3 2010-07-02 1.4700 1.5500 1.2473 1.2800 75871500.0 +4.. +``` +..which can be used as data for the `Chart` object: + + +```python +if __name__ == '__main__': + chart = Chart() + + df = pd.read_csv('ohlcv.csv') + chart.set(df) + + chart.show(block=True) +``` + +The `block` parameter is set to `True` in this case, as we do not want the program to exit. + +```{warning} +Due to the library's use of multiprocessing, instantiations of `Chart` should be encapsulated within an `if __name__ == '__main__'` block. +``` + + +## Adding a line + +Now lets add a moving average to the chart using the following function: +```python +def calculate_sma(df, period: int = 50): + return pd.DataFrame({ + 'time': df['date'], + f'SMA {period}': df['close'].rolling(window=period).mean() + }).dropna() +``` + +`calculate_sma` derives the data column from `f'SMA {period}'`, which we will use as the name of our line: + +```python +if __name__ == '__main__': + chart = Chart() + line = chart.create_line(name='SMA 50') + + df = pd.read_csv('ohlcv.csv') + sma_df = calculate_sma(df, period=50) + + chart.set(df) + line.set(sma_df) + + chart.show(block=True) +``` + + + + + diff --git a/lightweight_charts/__init__.py b/lightweight_charts/__init__.py index d0a59b6..341e66f 100644 --- a/lightweight_charts/__init__.py +++ b/lightweight_charts/__init__.py @@ -1,4 +1,4 @@ -from .abstract import LWC +from .abstract import AbstractChart, Window from .chart import Chart from .widgets import JupyterChart from .polygon import PolygonChart diff --git a/lightweight_charts/abstract.py b/lightweight_charts/abstract.py index 200cc91..f99508e 100644 --- a/lightweight_charts/abstract.py +++ b/lightweight_charts/abstract.py @@ -1,14 +1,17 @@ import asyncio -import json import os -from datetime import timedelta, datetime -from base64 import b64decode +from datetime import datetime +from typing import Union, Literal, List import pandas as pd -from typing import Union, Literal, Dict, List -from lightweight_charts.table import Table -from lightweight_charts.util import LINE_STYLE, MARKER_POSITION, MARKER_SHAPE, CROSSHAIR_MODE, crosshair_mode, \ - line_style, jbool, price_scale_mode, PRICE_SCALE_MODE, marker_position, marker_shape, IDGen, Events +from .table import Table +from .toolbox import ToolBox +from .topbar import TopBar +from .util import ( + IDGen, jbool, Pane, Events, TIME, NUM, FLOAT, + LINE_STYLE, MARKER_POSITION, MARKER_SHAPE, CROSSHAIR_MODE, PRICE_SCALE_MODE, + line_style, marker_position, marker_shape, crosshair_mode, price_scale_mode, +) JS = {} current_dir = os.path.dirname(os.path.abspath(__file__)) @@ -16,7 +19,7 @@ for file in ('pkg', 'funcs', 'callback', 'toolbox', 'table'): with open(os.path.join(current_dir, 'js', f'{file}.js'), 'r', encoding='utf-8') as f: JS[file] = f.read() -HTML = f""" +TEMPLATE = f""" @@ -28,7 +31,8 @@ HTML = f""" margin: 0; padding: 0; overflow: hidden; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, + Cantarell, "Helvetica Neue", sans-serif; }} #wrapper {{ width: 100vw; @@ -48,74 +52,125 @@ HTML = f""" """ -class SeriesCommon: +class Window: + _id_gen = IDGen() + handlers = {} + + def __init__(self, script_func: callable = None, js_api_code: str = None, run_script: callable = None): + self.loaded = False + self.script_func = script_func + self.scripts = [] + self.final_scripts = [] + + if run_script: + self.run_script = run_script + + if js_api_code: + self.run_script(f'window.callbackFunction = {js_api_code}') + + def on_js_load(self): + if self.loaded: + return + self.loaded = True + [self.run_script(script) for script in self.scripts] + [self.run_script(script) for script in self.final_scripts] + + def run_script(self, script: str, run_last: bool = False): + """ + For advanced users; evaluates JavaScript within the Webview. + """ + if self.loaded: + self.script_func(script) + return + self.scripts.append(script) if not run_last else self.final_scripts.append(script) + + def create_table(self, width: NUM, height: NUM, headings: tuple, widths: tuple = None, + alignments: tuple = None, position: FLOAT = 'left', draggable: bool = False, + func: callable = None + ) -> 'Table': + return Table(self, width, height, headings, widths, alignments, position, draggable, func) + + def create_subchart(self, position: FLOAT = 'left', width: float = 0.5, height: float = 0.5, + sync: str = None, scale_candles_only: bool = False, toolbox: bool = False + ) -> 'AbstractChart': + subchart = AbstractChart(self, width, height, scale_candles_only, toolbox, position=position) + if not sync: + return subchart + sync_id = sync + self.run_script(f''' + syncCrosshairs({subchart.id}.chart, {sync_id}.chart) + {sync_id}.chart.timeScale().subscribeVisibleLogicalRangeChange((timeRange) => {{ + {subchart.id}.chart.timeScale().setVisibleLogicalRange(timeRange) + }}) + {subchart.id}.chart.timeScale().setVisibleLogicalRange( + {sync_id}.chart.timeScale().getVisibleLogicalRange() + ) + ''', run_last=True) + return subchart + + +class SeriesCommon(Pane): + def __init__(self, chart: 'AbstractChart'): + super().__init__(chart.win) + self._chart = chart + self._interval = pd.Timedelta(seconds=1) + self._last_bar = None + self.num_decimals = 2 + def _set_interval(self, df: pd.DataFrame): if not pd.api.types.is_datetime64_any_dtype(df['time']): df['time'] = pd.to_datetime(df['time']) common_interval = df['time'].diff().value_counts() - try: - self._interval = common_interval.index[0] - except IndexError: - raise IndexError('Not enough bars within the given data to calculate the interval/timeframe.') - self.run_script(f''' - if ({self.id}.toolBox) {{ - {self.id}.toolBox.interval = {self._interval.total_seconds()*1000} - }} - ''') + if common_interval.empty: + return + self._interval = common_interval.index[0] + self.run_script( + f'if ({self.id}.toolBox) {self.id}.toolBox.interval = {self._interval.total_seconds() * 1000}' + ) @staticmethod - def _rename(data, mapper, is_dataframe): - if is_dataframe: - data.columns = [mapper[key] if key in mapper else key for key in data.columns] - else: - data.index = [mapper[key] if key in mapper else key for key in data.index] + def _format_labels(data, labels, index, exclude_lowercase): + def rename(la, mapper): + return [mapper[key] if key in mapper else key for key in la] + if 'date' not in labels and 'time' not in labels: + labels = labels.str.lower() + if exclude_lowercase: + labels = rename(labels, {exclude_lowercase.lower(): exclude_lowercase}) + if 'date' in labels: + labels = rename(labels, {'date': 'time'}) + elif 'time' not in labels: + data['time'] = index + labels = [*labels, 'time'] + return labels def _df_datetime_format(self, df: pd.DataFrame, exclude_lowercase=None): df = df.copy() - if 'date' not in df.columns and 'time' not in df.columns: - df.columns = df.columns.str.lower() - if exclude_lowercase: - df[exclude_lowercase] = df[exclude_lowercase.lower()] - if 'date' in df.columns: - self._rename(df, {'date': 'time'}, True) - elif 'time' not in df.columns: - df['time'] = df.index + df.columns = self._format_labels(df, df.columns, df.index, exclude_lowercase) self._set_interval(df) - df['time'] = self._datetime_format(df['time']) + if not pd.api.types.is_datetime64_any_dtype(df['time']): + df['time'] = pd.to_datetime(df['time']) + df['time'] = df['time'].astype('int64') // 10 ** 9 return df def _series_datetime_format(self, series: pd.Series, exclude_lowercase=None): series = series.copy() - if 'date' not in series.index and 'time' not in series.index: - series.index = series.index.str.lower() - if exclude_lowercase: - self._rename(series, {exclude_lowercase.lower(): exclude_lowercase}, False) - if 'date' in series.index: - self._rename(series, {'date': 'time'}, False) - elif 'time' not in series.index: - series['time'] = series.name - series['time'] = self._datetime_format(series['time']) + series.index = self._format_labels(series, series.index, series.name, exclude_lowercase) + series['time'] = self._single_datetime_format(series['time']) return series - def _datetime_format(self, arg: Union[pd.Series, str]): + def _single_datetime_format(self, arg): if not pd.api.types.is_datetime64_any_dtype(arg): arg = pd.to_datetime(arg) - if self._interval < timedelta(days=1): - if isinstance(arg, pd.Series): - arg = arg.astype('int64') // 10 ** 9 - else: - interval_seconds = self._interval.total_seconds() - arg = interval_seconds * (arg.timestamp() // interval_seconds) - else: - arg = arg.dt.strftime('%Y-%m-%d') if isinstance(arg, pd.Series) else arg.strftime('%Y-%m-%d') - + interval_seconds = self._interval.total_seconds() + arg = interval_seconds * (arg.timestamp() // interval_seconds) return arg - def marker(self, time: datetime = None, position: MARKER_POSITION = 'below', shape: MARKER_SHAPE = 'arrow_up', - color: str = '#2196F3', text: str = '') -> str: + def marker(self, time: datetime = None, position: MARKER_POSITION = 'below', + shape: MARKER_SHAPE = 'arrow_up', color: str = '#2196F3', text: str = '' + ) -> str: """ Creates a new marker.\n - :param time: The time that the marker will be placed at. If no time is given, it will be placed at the last bar. + :param time: Time location of the marker. If no time is given, it will be placed at the last bar. :param position: The position of the marker. :param color: The color of the marker (rgb, rgba or hex). :param shape: The shape of the marker. @@ -123,10 +178,10 @@ class SeriesCommon: :return: The id of the marker placed. """ try: - time = self._last_bar['time'] if not time else self._datetime_format(time) + time = self._last_bar['time'] if not time else self._single_datetime_format(time) except TypeError: raise TypeError('Chart marker created before data was set.') - marker_id = self._rand.generate() + marker_id = self.win._id_gen.generate() self.run_script(f""" {self.id}.markers.push({{ time: {time if isinstance(time, float) else f"'{time}'"}, @@ -149,16 +204,18 @@ class SeriesCommon: {self.id}.markers.splice({self.id}.markers.indexOf(marker), 1) {self.id}.series.setMarkers({self.id}.markers) }} - }});''') + }});''') - def horizontal_line(self, price: Union[float, int], color: str = 'rgb(122, 146, 202)', width: int = 2, - style: LINE_STYLE = 'solid', text: str = '', axis_label_visible: bool = True, func: callable = None) -> 'HorizontalLine': + def horizontal_line(self, price: NUM, color: str = 'rgb(122, 146, 202)', width: int = 2, + style: LINE_STYLE = 'solid', text: str = '', axis_label_visible: bool = True, + func: callable = None + ) -> 'HorizontalLine': """ Creates a horizontal line at the given price. """ return HorizontalLine(self, price, color, width, style, text, axis_label_visible, func) - def remove_horizontal_line(self, price: Union[float, int] = None): + def remove_horizontal_line(self, price: NUM = None): """ Removes a horizontal line at the given price. """ @@ -200,61 +257,70 @@ class SeriesCommon: {self.id}.series.applyOptions({{ priceFormat: {{precision: {precision}, minMove: {1 / (10 ** precision)}}} }})''') + self.num_decimals = precision - def hide_data(self): self._toggle_data(False) + def hide_data(self): + self._toggle_data(False) - def show_data(self): self._toggle_data(True) + def show_data(self): + self._toggle_data(True) def _toggle_data(self, arg): self.run_script(f''' {self.id}.series.applyOptions({{visible: {jbool(arg)}}}) - {f'{self.id}.volumeSeries.applyOptions({{visible: {jbool(arg)}}})' if hasattr(self, 'loaded') else ''} + if ('volumeSeries' in {self.id}) {self.id}.volumeSeries.applyOptions({{visible: {jbool(arg)}}}) ''') -class HorizontalLine: + +class HorizontalLine(Pane): def __init__(self, chart, price, color, width, style, text, axis_label_visible, func): - self._chart = chart - self.id = self._chart._rand.generate() + super().__init__(chart.win) self.price = price - self._chart.run_script(f''' - {self.id} = new HorizontalLine({self._chart.id}, '{self.id}', {price}, '{color}', {width}, {line_style(style)}, {jbool(axis_label_visible)}, '{text}') - ''') - if not func: return + self.run_script(f''' + {self.id} = new HorizontalLine( + {chart.id}, '{self.id}', {price}, '{color}', {width}, + {line_style(style)}, {jbool(axis_label_visible)}, '{text}' + )''') + if not func: + return + def wrapper(p): - self.price = p + self.price = float(p) func(chart, self) - chart._handlers[self.id] = wrapper - self._chart.run_script(f'if ("toolBox" in {self._chart.id}) {self._chart.id}.toolBox.drawings.push({self.id})') + + async def wrapper_async(p): + self.price = float(p) + await func(chart, self) + + self.win.handlers[self.id] = wrapper_async if asyncio.iscoroutinefunction(func) else wrapper + self.run_script(f'if ("toolBox" in {chart.id}) {chart.id}.toolBox.drawings.push({self.id})') def update(self, price): """ Moves the horizontal line to the given price. """ - self._chart.run_script(f'{self.id}.updatePrice({price})') + self.run_script(f'{self.id}.updatePrice({price})') self.price = price def label(self, text: str): - self._chart.run_script(f'{self.id}.updateLabel("{text}")') + self.run_script(f'{self.id}.updateLabel("{text}")') def delete(self): """ Irreversibly deletes the horizontal line. """ - self._chart.run_script(f'{self.id}.deleteLine()') + self.run_script(f'{self.id}.deleteLine()') del self class Line(SeriesCommon): def __init__(self, chart, name, color, style, width, price_line, price_label, crosshair_marker=True): + super().__init__(chart) self.color = color self.name = name - self._chart = chart - self._rand = chart._rand - self.id = self._rand.generate() - self.run_script = self._chart.run_script self.run_script(f''' {self.id} = {{ - series: {self._chart.id}.chart.addLineSeries({{ + series: {chart.id}.chart.addLineSeries({{ color: '{color}', lineStyle: {line_style(style)}, lineWidth: {width}, @@ -266,7 +332,7 @@ class Line(SeriesCommon): minValue: 1_000_000_000, maxValue: 0, }, - }),""" if self._chart._scale_candles_only else ''} + }),""" if chart._scale_candles_only else ''} }}), markers: [], horizontal_lines: [], @@ -276,23 +342,20 @@ class Line(SeriesCommon): }} {self._chart.id}.lines.push({self.id}) if ('legend' in {self._chart.id}) {{ - {self._chart.id}.legend.makeLines({self._chart.id}) - }} - ''') + {self._chart.id}.legend.lines.push({self._chart.id}.legend.makeLineRow({self.id})) + }}''') - - def set(self, data: pd.DataFrame): + def set(self, df: pd.DataFrame): """ Sets the line data.\n - :param data: If the name parameter is not used, the columns should be named: date/time, value. - :param name: The column of the DataFrame to use as the line value. When used, the Line will be named after this column. + :param df: If the name parameter is not used, the columns should be named: date/time, value. """ - if data.empty or data is None: + if df is None or df.empty: self.run_script(f'{self.id}.series.setData([])') return - df = self._df_datetime_format(data, exclude_lowercase=self.name) + df = self._df_datetime_format(df, exclude_lowercase=self.name) if self.name: - if self.name not in data: + if self.name not in df: raise NameError(f'No column named "{self.name}".') df = df.rename(columns={self.name: 'value'}) self._last_bar = df.iloc[-1] @@ -311,13 +374,14 @@ class Line(SeriesCommon): def _set_trend(self, start_time, start_value, end_time, end_value, ray=False): def time_format(time_val): - time_val = pd.to_datetime(time_val) - time_val = time_val.timestamp() if self._chart._interval < pd.Timedelta(days=1) else time_val.strftime('%Y-%m-%d') + time_val = pd.to_datetime(time_val).timestamp() return f"'{time_val}'" if isinstance(time_val, str) else time_val + self.run_script(f''' {self._chart.id}.chart.timeScale().applyOptions({{shiftVisibleRangeOnNewBar: false}}) - {self.id}.series.setData(calculateTrendLine({time_format(start_time)}, {start_value}, {time_format(end_time)}, {end_value}, - {self._chart._interval.total_seconds()*1000}, {self._chart.id}, {jbool(ray)})) + {self.id}.series.setData( + calculateTrendLine({time_format(start_time)}, {start_value}, {time_format(end_time)}, {end_value}, + {self._chart._interval.total_seconds() * 1000}, {self._chart.id}, {jbool(ray)})) {self._chart.id}.chart.timeScale().applyOptions({{shiftVisibleRangeOnNewBar: true}}) ''') @@ -328,212 +392,25 @@ class Line(SeriesCommon): self._chart._lines.remove(self) if self in self._chart._lines else None self.run_script(f''' {self._chart.id}.chart.removeSeries({self.id}.series) + if ('legend' in {self._chart.id}) {{ + {self._chart.id}.legend.lines.forEach(line => {{ + if (line.line === {self.id}) {self._chart.id}.legend.div.removeChild(line.row) + }}) + }} delete {self.id} - ''') + ''') del self -class Widget: - def __init__(self, topbar, value, func=None): - self._chart = topbar._chart - self.id = topbar._chart._rand.generate() - self.value = value - self._handler = func - def wrapper(v): - self.value = v - func(topbar._chart) - async def async_wrapper(v): - self.value = v - await func(topbar._chart) - self._chart._handlers[self.id] = async_wrapper if asyncio.iscoroutinefunction(func) else wrapper - - -class TextWidget(Widget): - def __init__(self, topbar, initial_text): - super().__init__(topbar, value=initial_text) - self._chart.run_script(f'{self.id} = {topbar.id}.makeTextBoxWidget("{initial_text}")') - - def set(self, string): - self.value = string - self._chart.run_script(f'{self.id}.innerText = "{string}"') - - -class SwitcherWidget(Widget): - def __init__(self, topbar, options, default, func): - super().__init__(topbar, value=default, func=func) - self._chart.run_script(f''' - {self.id} = {topbar.id}.makeSwitcher({list(options)}, '{default}', '{self.id}') - reSize({self._chart.id}) - ''') - - -class ButtonWidget(Widget): - def __init__(self, topbar, button, separator, func): - super().__init__(topbar, value=button, func=func) - self._chart.run_script(f''' - {self.id} = {topbar.id}.makeButton('{button}', '{self.id}') - {f'{topbar.id}.makeSeparator()' if separator else ''} - reSize({self._chart.id}) - ''') - - def set(self, string): - self.value = string - self._chart.run_script(f'{self.id}.elem.innerText = "{string}"') - - -class TopBar: - def __init__(self, chart): - self._chart = chart - self.id = chart._rand.generate() - self._widgets: Dict[str, Widget] = {} - - self.click_bg_color = '#50565E' - self.hover_bg_color = '#3c434c' - self.active_bg_color = 'rgba(0, 122, 255, 0.7)' - self.active_text_color = '#ececed' - self.text_color = '#d8d9db' - self._created = False - - def _create(self): - if self._created: - return - self._created = True - if not self._chart._callbacks_enabled: - self._chart._callbacks_enabled = True - self._chart.run_script(JS['callback']) - self._chart.run_script(f''' - {self.id} = new TopBar({self._chart.id}, '{self.hover_bg_color}', '{self.click_bg_color}', - '{self.active_bg_color}', '{self.text_color}', '{self.active_text_color}') - {self._chart.id}.topBar = {self.id}.topBar - reSize({self._chart.id}) - ''') - - def __getitem__(self, item): - if widget := self._widgets.get(item): - return widget - raise KeyError(f'Topbar widget "{item}" not found.') - - def get(self, widget_name): return self._widgets.get(widget_name) - - def __setitem__(self, key, value): self._widgets[key] = value - - def switcher(self, name, options: tuple, default: str = None, func: callable = None): - self._create() - self._widgets[name] = SwitcherWidget(self, options, default if default else options[0], func) - - def textbox(self, name: str, initial_text: str = ''): - self._create() - self._widgets[name] = TextWidget(self, initial_text) - - def button(self, name, button_text: str, separator: bool = True, func: callable = None): - self._create() - self._widgets[name] = ButtonWidget(self, button_text, separator, func) - - -class ToolBox: - def __init__(self, chart): - self.run_script = chart.run_script - self.id = chart.id - self._return_q = chart._return_q - self._save_under = None - self.drawings = {} - chart._handlers[f'save_drawings{self.id}'] = self._save_drawings - - def save_drawings_under(self, widget: Widget): - """ - Drawings made on charts will be saved under the widget given. eg `chart.toolbox.save_drawings_under(chart.topbar['symbol'])`. - """ - self._save_under = widget - - def load_drawings(self, tag: str): - """ - Loads and displays the drawings on the chart stored under the tag given. - """ - if not self.drawings.get(tag): - return - self.run_script(f'if ("toolBox" in {self.id}) {self.id}.toolBox.loadDrawings({json.dumps(self.drawings[tag])})') - - def import_drawings(self, file_path): - """ - Imports a list of drawings stored at the given file path. - """ - with open(file_path, 'r') as f: - json_data = json.load(f) - self.drawings = json_data - - def export_drawings(self, file_path): - """ - Exports the current list of drawings to the given file path. - """ - with open(file_path, 'w+') as f: - json.dump(self.drawings, f, indent=4) - - def _save_drawings(self, drawings): - if not self._save_under: - return - self.drawings[self._save_under.value] = json.loads(drawings) - - -class LWC(SeriesCommon): - def __init__(self, inner_width: float = 1.0, inner_height: float = 1.0, - scale_candles_only: bool = False, toolbox: bool = False, _js_api_code: str = None, - autosize: bool = True, _run_script=None): - self.loaded = False - self._scripts = [] - self._final_scripts = [] - if _run_script: - self.run_script = _run_script - self.run_script(f'window.callbackFunction = {_js_api_code}') if _js_api_code else None - self._scale_candles_only = scale_candles_only - self._inner_width = inner_width - self._inner_height = inner_height - self._rand = IDGen() - self.id = self._rand.generate() - self._position = 'left' - self._html = HTML - self._script_func = None - self.candle_data = pd.DataFrame() - self._last_bar = None - self._interval = None - self._lines = [] - self.events: Events = Events(self) - self._handlers = {} - self._return_q = None - self._callbacks_enabled = False - self.topbar: TopBar = TopBar(self) - - self._background_color = '#000000' +class Candlestick(SeriesCommon): + def __init__(self, chart: 'AbstractChart'): + super().__init__(chart) self._volume_up_color = 'rgba(83,141,131,0.8)' self._volume_down_color = 'rgba(200,127,130,0.8)' - from lightweight_charts.polygon import PolygonAPI - self.polygon: PolygonAPI = PolygonAPI(self) + self.candle_data = pd.DataFrame() - self.run_script(f''' - {self.id} = makeChart({self._inner_width}, {self._inner_height}, autoSize={jbool(autosize)}) - {self.id}.id = '{self.id}' - {self.id}.wrapper.style.float = "{self._position}" - ''') - if toolbox: - self.run_script(JS['toolbox']) - self.run_script(f'{self.id}.toolBox = new ToolBox({self.id})') - self.toolbox: ToolBox = ToolBox(self) - - def _on_js_load(self): - if self.loaded: - return - self.loaded = True - [self.run_script(script) for script in self._scripts] - [self.run_script(script) for script in self._final_scripts] - - def run_script(self, script: str, run_last: bool = False): - """ - For advanced users; evaluates JavaScript within the Webview. - """ - if self.loaded: - self._script_func(script) - return - self._scripts.append(script) if not run_last else self._final_scripts.append(script) + self.run_script(f'{self.id}.makeCandlestickSeries()') def set(self, df: pd.DataFrame = None, render_drawings=False): """ @@ -541,70 +418,61 @@ class LWC(SeriesCommon): :param df: columns: date/time, open, high, low, close, volume (if volume enabled). :param render_drawings: Re-renders any drawings made through the toolbox. Otherwise, they will be deleted. """ - - if df.empty or df is None: + if df is None or df.empty: self.run_script(f'{self.id}.series.setData([])') self.run_script(f'{self.id}.volumeSeries.setData([])') self.candle_data = pd.DataFrame() return - bars = self._df_datetime_format(df) - self.candle_data = bars.copy() - self._last_bar = bars.iloc[-1] + df = self._df_datetime_format(df) + self.candle_data = df.copy() + self._last_bar = df.iloc[-1] - if 'volume' in bars: - volume = bars.drop(columns=['open', 'high', 'low', 'close']).rename(columns={'volume': 'value'}) - volume['color'] = self._volume_down_color - volume.loc[bars['close'] > bars['open'], 'color'] = self._volume_up_color - self.run_script(f'{self.id}.volumeSeries.setData({volume.to_dict(orient="records")})') - bars = bars.drop(columns=['volume']) - - bars = bars.to_dict(orient='records') + bars = df.to_dict(orient='records') self.run_script(f'{self.id}.candleData = {bars}; {self.id}.series.setData({self.id}.candleData)') - self.run_script(f"if ('toolBox' in {self.id}) {self.id}.toolBox.{'clearDrawings' if not render_drawings else 'renderDrawings'}()") + toolbox_action = 'clearDrawings' if not render_drawings else 'renderDrawings' + self.run_script(f"if ('toolBox' in {self._chart.id}) {self._chart.id}.toolBox.{toolbox_action}()") + if 'volume' not in df: + return + volume = df.drop(columns=['open', 'high', 'low', 'close']).rename(columns={'volume': 'value'}) + volume['color'] = self._volume_down_color + volume.loc[df['close'] > df['open'], 'color'] = self._volume_up_color + self.run_script(f'{self.id}.volumeSeries.setData({volume.to_dict(orient="records")})') # for line in self._lines: # if line.name in df.columns: # line.set() - def fit(self): - """ - Fits the maximum amount of the chart data within the viewport. - """ - self.run_script(f'{self.id}.chart.timeScale().fitContent()') - def update(self, series: pd.Series, _from_tick=False): """ Updates the data from a bar; if series['time'] is the same time as the last bar, the last bar will be overwritten.\n - :param series: labels: date/time, open, high, low, close, volume (if volume enabled). + :param series: labels: date/time, open, high, low, close, volume (if using volume). """ series = self._series_datetime_format(series) if not _from_tick else series if series['time'] != self._last_bar['time']: self.candle_data.loc[self.candle_data.index[-1]] = self._last_bar self.candle_data = pd.concat([self.candle_data, series.to_frame().T], ignore_index=True) - self.events.new_bar._emit(self) + self._chart.events.new_bar._emit(self) self._last_bar = series - if 'volume' in series: - volume = series.drop(['open', 'high', 'low', 'close']).rename({'volume': 'value'}) - volume['color'] = self._volume_up_color if series['close'] > series['open'] else self._volume_down_color - self.run_script(f'{self.id}.volumeSeries.update({volume.to_dict()})') - series = series.drop(['volume']) bar = series.to_dict() self.run_script(f''' - if (chartTimeToDate({self.id}.candleData[{self.id}.candleData.length-1].time).getTime() === chartTimeToDate({bar['time']}).getTime()) {{ + if (stampToDate(lastBar({self.id}.candleData).time).getTime() === stampToDate({bar['time']}).getTime()) {{ {self.id}.candleData[{self.id}.candleData.length-1] = {bar} }} - else {{ - {self.id}.candleData.push({bar}) - }} + else {self.id}.candleData.push({bar}) {self.id}.series.update({bar}) - ''') + ''') + if 'volume' not in series: + return + volume = series.drop(['open', 'high', 'low', 'close']).rename({'volume': 'value'}) + volume['color'] = self._volume_up_color if series['close'] > series['open'] else self._volume_down_color + self.run_script(f'{self.id}.volumeSeries.update({volume.to_dict()})') def update_from_tick(self, series: pd.Series, cumulative_volume: bool = False): """ Updates the data from a tick.\n - :param series: labels: date/time, price, volume (if volume enabled). + :param series: labels: date/time, price, volume (if using volume). :param cumulative_volume: Adds the given volume onto the latest bar. """ series = self._series_datetime_format(series) @@ -627,33 +495,10 @@ class LWC(SeriesCommon): bar['volume'] = series['volume'] self.update(bar, _from_tick=True) - def create_line(self, name: str = '', color: str = 'rgba(214, 237, 255, 0.6)', style: LINE_STYLE = 'solid', width: int = 2, - price_line: bool = True, price_label: bool = True) -> Line: - """ - Creates and returns a Line object.)\n - """ - self._lines.append(Line(self, name, color, style, width, price_line, price_label)) - return self._lines[-1] - - def lines(self) -> List[Line]: - """ - Returns all lines for the chart. - """ - return self._lines.copy() - - def trend_line(self, start_time, start_value, end_time, end_value, color: str = '#1E80F0', width: int = 2) -> Line: - line = Line(self, '', color, 'solid', width, price_line=False, price_label=False, crosshair_marker=False) - line._set_trend(start_time, start_value, end_time, end_value, ray=False) - return line - - def ray_line(self, start_time, value, color: str = '#1E80F0', width: int = 2) -> Line: - line = Line(self, '', color, 'solid', width, price_line=False, price_label=False, crosshair_marker=False) - line._set_trend(start_time, value, start_time, value, ray=True) - return line - - def price_scale(self, mode: PRICE_SCALE_MODE = 'normal', align_labels: bool = True, border_visible: bool = False, - border_color: str = None, text_color: str = None, entire_text_only: bool = False, - ticks_visible: bool = False, scale_margin_top: float = 0.2, scale_margin_bottom: float = 0.2): + def price_scale( + self, mode: PRICE_SCALE_MODE = 'normal', align_labels: bool = True, border_visible: bool = False, + border_color: str = None, text_color: str = None, entire_text_only: bool = False, + ticks_visible: bool = False, scale_margin_top: float = 0.2, scale_margin_bottom: float = 0.2): self.run_script(f''' {self.id}.series.priceScale().applyOptions({{ mode: {price_scale_mode(mode)}, @@ -666,81 +511,31 @@ class LWC(SeriesCommon): scaleMargins: {{top: {scale_margin_top}, bottom: {scale_margin_bottom}}} }})''') - def time_scale(self, right_offset: int = 0, min_bar_spacing: float = 0.5, - visible: bool = True, time_visible: bool = True, seconds_visible: bool = False, - border_visible: bool = True, border_color: str = None): - """ - Options for the time scale of the chart. - """ - self.run_script(f''' - {self.id}.chart.applyOptions({{ - timeScale: {{ - rightOffset: {right_offset}, - minBarSpacing: {min_bar_spacing}, - visible: {jbool(visible)}, - timeVisible: {jbool(time_visible)}, - secondsVisible: {jbool(seconds_visible)}, - borderVisible: {jbool(border_visible)}, - {f'borderColor: "{border_color}",' if border_color else ''} - }} - }})''') - - def layout(self, background_color: str = None, text_color: str = None, font_size: int = None, - font_family: str = None): - """ - Global layout options for the chart. - """ - self._background_color = background_color if background_color else self._background_color - self.run_script(f""" - document.getElementById('wrapper').style.backgroundColor = '{self._background_color}' - {self.id}.chart.applyOptions({{ - layout: {{ - background: {{ - color: "{self._background_color}", - }}, - {f'textColor: "{text_color}",' if text_color else ''} - {f'fontSize: {font_size},' if font_size else ''} - {f'fontFamily: "{font_family}",' if font_family else ''} - }}}})""") - - def grid(self, vert_enabled: bool = True, horz_enabled: bool = True, color: str = 'rgba(29, 30, 38, 5)', style: LINE_STYLE = 'solid'): - """ - Grid styling for the chart. - """ - self.run_script(f""" - {self.id}.chart.applyOptions({{ - grid: {{ - vertLines: {{ - visible: {jbool(vert_enabled)}, - color: "{color}", - style: {line_style(style)}, - }}, - horzLines: {{ - visible: {jbool(horz_enabled)}, - color: "{color}", - style: {line_style(style)}, - }}, - }} - }})""") - - def candle_style(self, up_color: str = 'rgba(39, 157, 130, 100)', down_color: str = 'rgba(200, 97, 100, 100)', - wick_enabled: bool = True, border_enabled: bool = True, border_up_color: str = '', - border_down_color: str = '', wick_up_color: str = '', wick_down_color: str = ''): + def candle_style( + self, up_color: str = 'rgba(39, 157, 130, 100)', down_color: str = 'rgba(200, 97, 100, 100)', + wick_enabled: bool = True, border_enabled: bool = True, border_up_color: str = '', + border_down_color: str = '', wick_up_color: str = '', wick_down_color: str = ''): """ Candle styling for each of its parts.\n If only `up_color` and `down_color` are passed, they will color all parts of the candle. """ + if border_enabled: + border_up_color = border_up_color if border_up_color else up_color + border_down_color = border_down_color if border_down_color else down_color + if wick_enabled: + wick_up_color = wick_up_color if wick_up_color else up_color + wick_down_color = wick_down_color if wick_down_color else down_color self.run_script(f""" - {self.id}.series.applyOptions({{ - upColor: "{up_color}", - downColor: "{down_color}", - wickVisible: {jbool(wick_enabled)}, - borderVisible: {jbool(border_enabled)}, - {f'borderUpColor: "{border_up_color if border_up_color else up_color}",' if border_enabled else ''} - {f'borderDownColor: "{border_down_color if border_down_color else down_color}",' if border_enabled else ''} - {f'wickUpColor: "{wick_up_color if wick_up_color else up_color}",' if wick_enabled else ''} - {f'wickDownColor: "{wick_down_color if wick_down_color else down_color}",' if wick_enabled else ''} - }})""") + {self.id}.series.applyOptions({{ + upColor: "{up_color}", + downColor: "{down_color}", + wickVisible: {jbool(wick_enabled)}, + borderVisible: {jbool(border_enabled)}, + {f'borderUpColor: "{border_up_color}",' if border_enabled else ''} + {f'borderDownColor: "{border_down_color}",' if border_enabled else ''} + {f'wickUpColor: "{wick_up_color}",' if wick_enabled else ''} + {f'wickDownColor: "{wick_down_color}",' if wick_enabled else ''} + }})""") def volume_config(self, scale_margin_top: float = 0.8, scale_margin_bottom: float = 0.0, up_color='rgba(83,141,131,0.8)', down_color='rgba(200,127,130,0.8)'): @@ -748,10 +543,6 @@ class LWC(SeriesCommon): Configure volume settings.\n Numbers for scaling must be greater than 0 and less than 1.\n Volume colors must be applied prior to setting/updating the bars.\n - :param scale_margin_top: Scale the top of the margin. - :param scale_margin_bottom: Scale the bottom of the margin. - :param up_color: Volume color for upward direction (rgb, rgba or hex) - :param down_color: Volume color for downward direction (rgb, rgba or hex) """ self._volume_up_color = up_color if up_color else self._volume_up_color self._volume_down_color = down_color if down_color else self._volume_down_color @@ -763,9 +554,126 @@ class LWC(SeriesCommon): }} }})''') - def crosshair(self, mode: CROSSHAIR_MODE = 'normal', vert_visible: bool = True, vert_width: int = 1, vert_color: str = None, - vert_style: LINE_STYLE = 'large_dashed', vert_label_background_color: str = 'rgb(46, 46, 46)', horz_visible: bool = True, - horz_width: int = 1, horz_color: str = None, horz_style: LINE_STYLE = 'large_dashed', horz_label_background_color: str = 'rgb(55, 55, 55)'): + +class AbstractChart(Candlestick, Pane): + def __init__(self, window: Window, inner_width: float = 1.0, inner_height: float = 1.0, + scale_candles_only: bool = False, toolbox: bool = False, + autosize: bool = True, position: FLOAT = 'left'): + Pane.__init__(self, window) + + self._lines = [] + self._scale_candles_only = scale_candles_only + self.events: Events = Events(self) + + from lightweight_charts.polygon import PolygonAPI + self.polygon: PolygonAPI = PolygonAPI(self) + + self.run_script( + f'{self.id} = new Chart("{self.id}", {inner_width}, {inner_height}, "{position}", {jbool(autosize)})') + + Candlestick.__init__(self, self) + + self.topbar: TopBar = TopBar(self) + if toolbox: + self.toolbox: ToolBox = ToolBox(self) + + def fit(self): + """ + Fits the maximum amount of the chart data within the viewport. + """ + self.run_script(f'{self.id}.chart.timeScale().fitContent()') + + def create_line( + self, name: str = '', color: str = 'rgba(214, 237, 255, 0.6)', + style: LINE_STYLE = 'solid', width: int = 2, + price_line: bool = True, price_label: bool = True + ) -> Line: + """ + Creates and returns a Line object.)\n + """ + self._lines.append(Line(self, name, color, style, width, price_line, price_label)) + return self._lines[-1] + + def lines(self) -> List[Line]: + """ + Returns all lines for the chart. + """ + return self._lines.copy() + + def trend_line(self, start_time: TIME, start_value: NUM, end_time: TIME, end_value: NUM, + color: str = '#1E80F0', width: int = 2 + ) -> Line: + line = Line(self, '', color, 'solid', width, False, False, False) + line._set_trend(start_time, start_value, end_time, end_value) + return line + + def ray_line(self, start_time: TIME, value: NUM, + color: str = '#1E80F0', width: int = 2 + ) -> Line: + line = Line(self, '', color, 'solid', width, False, False, False) + line._set_trend(start_time, value, start_time, value, ray=True) + return line + + def time_scale(self, right_offset: int = 0, min_bar_spacing: float = 0.5, + visible: bool = True, time_visible: bool = True, seconds_visible: bool = False, + border_visible: bool = True, border_color: str = None): + """ + Options for the timescale of the chart. + """ + self.run_script(f''' + {self.id}.chart.applyOptions({{ + timeScale: {{ + rightOffset: {right_offset}, + minBarSpacing: {min_bar_spacing}, + visible: {jbool(visible)}, + timeVisible: {jbool(time_visible)}, + secondsVisible: {jbool(seconds_visible)}, + borderVisible: {jbool(border_visible)}, + {f'borderColor: "{border_color}",' if border_color else ''} + }} + }})''') + + def layout(self, background_color: str = '#000000', text_color: str = None, + font_size: int = None, font_family: str = None): + """ + Global layout options for the chart. + """ + self.run_script(f""" + document.getElementById('wrapper').style.backgroundColor = '{background_color}' + {self.id}.chart.applyOptions({{ + layout: {{ + background: {{color: "{background_color}"}}, + {f'textColor: "{text_color}",' if text_color else ''} + {f'fontSize: {font_size},' if font_size else ''} + {f'fontFamily: "{font_family}",' if font_family else ''} + }}}})""") + + def grid(self, vert_enabled: bool = True, horz_enabled: bool = True, + color: str = 'rgba(29, 30, 38, 5)', style: LINE_STYLE = 'solid'): + """ + Grid styling for the chart. + """ + self.run_script(f""" + {self.id}.chart.applyOptions({{ + grid: {{ + vertLines: {{ + visible: {jbool(vert_enabled)}, + color: "{color}", + style: {line_style(style)}, + }}, + horzLines: {{ + visible: {jbool(horz_enabled)}, + color: "{color}", + style: {line_style(style)}, + }}, + }} + }})""") + + def crosshair(self, mode: CROSSHAIR_MODE = 'normal', vert_visible: bool = True, + vert_width: int = 1, vert_color: str = None, vert_style: LINE_STYLE = 'large_dashed', + vert_label_background_color: str = 'rgb(46, 46, 46)', horz_visible: bool = True, + horz_width: int = 1, horz_color: str = None, horz_style: LINE_STYLE = 'large_dashed', + horz_label_background_color: str = 'rgb(55, 55, 55)'): """ Crosshair formatting for its vertical and horizontal axes. """ @@ -805,39 +713,25 @@ class LWC(SeriesCommon): }} }})''') - def legend(self, visible: bool = False, ohlc: bool = True, percent: bool = True, lines: bool = True, color: str = 'rgb(191, 195, 203)', - font_size: int = 11, font_family: str = 'Monaco'): + def legend(self, visible: bool = False, ohlc: bool = True, percent: bool = True, lines: bool = True, + color: str = 'rgb(191, 195, 203)', font_size: int = 11, font_family: str = 'Monaco'): """ Configures the legend of the chart. """ if not visible: return self.run_script(f''' - {self.id}.legend = new Legend({self.id}, {jbool(ohlc)}, {jbool(percent)}, {jbool(lines)}, '{color}', {font_size}, '{font_family}') + {self.id}.legend = new Legend( {self.id}, {jbool(ohlc)}, {jbool(percent)}, {jbool(lines)}, + '{color}', {font_size}, '{font_family}') ''') - def spinner(self, visible): self.run_script(f"{self.id}.spinner.style.display = '{'block' if visible else 'none'}'") + def spinner(self, visible): + self.run_script(f"{self.id}.spinner.style.display = '{'block' if visible else 'none'}'") - def screenshot(self) -> bytes: - """ - Takes a screenshot. This method can only be used after the chart window is visible. - :return: a bytes object containing a screenshot of the chart. - """ - self.run_script(f''' - let canvas = {self.id}.chart.takeScreenshot() - canvas.toBlob(function(blob) {{ - const reader = new FileReader(); - reader.onload = function(event) {{ - window.callbackFunction(`return_~_{self.id}_~_${{event.target.result}}`) - }}; - reader.readAsDataURL(blob); - }}) - ''') - serial_data = self._return_q.get() - return b64decode(serial_data.split(',')[1]) - - def hotkey(self, modifier_key: Literal['ctrl', 'alt', 'shift', 'meta'], keys: Union[str, tuple, int], func: callable): - if not isinstance(keys, tuple): keys = (keys,) + def hotkey(self, modifier_key: Literal['ctrl', 'alt', 'shift', 'meta'], + keys: Union[str, tuple, int], func: callable): + if not isinstance(keys, tuple): + keys = (keys,) for key in keys: key_code = 'Key' + key.upper() if isinstance(key, str) else 'Digit' + str(key) self.run_script(f''' @@ -849,38 +743,17 @@ class LWC(SeriesCommon): }} else return false }})''') - self._handlers[f'{modifier_key, keys}'] = func + self.win.handlers[f'{modifier_key, keys}'] = func - def create_table(self, width: Union[float, int], height: Union[float, int], headings: tuple, widths: tuple = None, alignments: tuple = None, - position: str = 'left', draggable: bool = False, func: callable = None) -> Table: - return Table(self, width, height, headings, widths, alignments, position, draggable, func) + def create_table(self, width: NUM, height: NUM, + headings: tuple, widths: tuple = None, alignments: tuple = None, + position: FLOAT = 'left', draggable: bool = False, func: callable = None + ) -> Table: + return self.win.create_table(width, height, headings, widths, alignments, position, draggable, func) - def create_subchart(self, position: Literal['left', 'right', 'top', 'bottom'] = 'left', width: float = 0.5, height: float = 0.5, - sync: Union[bool, str] = False, scale_candles_only: bool = False, toolbox: bool = False): - return SubChart(self, position, width, height, sync, scale_candles_only, toolbox) - - -class SubChart(LWC): - def __init__(self, parent, position, width, height, sync, scale_candles_only, toolbox): - self._chart = parent._chart if isinstance(parent, SubChart) else parent - super().__init__(width, height, scale_candles_only, toolbox, _run_script=self._chart.run_script) - self._parent = parent - self._position = position - self._return_q = self._chart._return_q - for key, val in self._handlers.items(): - self._chart._handlers[key] = val - self._handlers = self._chart._handlers - self.polygon = self._chart.polygon._subchart(self) - - if not sync: - return - sync_parent_id = self._parent.id if isinstance(sync, bool) else sync - self.run_script(f''' - {sync_parent_id}.chart.timeScale().subscribeVisibleLogicalRangeChange((timeRange) => {{ - {self.id}.chart.timeScale().setVisibleLogicalRange(timeRange) - }}); - syncCrosshairs({self.id}.chart, {sync_parent_id}.chart) - ''') - self.run_script(f''' - {self.id}.chart.timeScale().setVisibleLogicalRange({sync_parent_id}.chart.timeScale().getVisibleLogicalRange()) - ''', run_last=True) + def create_subchart(self, position: FLOAT = 'left', width: float = 0.5, height: float = 0.5, + sync: Union[str, bool] = None, scale_candles_only: bool = False, + toolbox: bool = False) -> 'AbstractChart': + if sync is True: + sync = self.id + return self.win.create_subchart(position, width, height, sync, scale_candles_only, toolbox) diff --git a/lightweight_charts/chart.py b/lightweight_charts/chart.py index 56f6470..237638f 100644 --- a/lightweight_charts/chart.py +++ b/lightweight_charts/chart.py @@ -1,42 +1,42 @@ import asyncio import multiprocessing as mp +from base64 import b64decode import webview -from lightweight_charts.abstract import LWC - - -chart = None -num_charts = 0 +from lightweight_charts import abstract +from .util import parse_event_message class CallbackAPI: - def __init__(self, emit_queue, return_queue): - self.emit_q, self.return_q = emit_queue, return_queue + def __init__(self, emit_queue): + self.emit_q = emit_queue def callback(self, message: str): - name, args = message.split('_~_') - self.return_q.put(*args) if name == 'return' else self.emit_q.put((name, args.split(';;;'))) + self.emit_q.put(message) class PyWV: - def __init__(self, q, start: mp.Event, exit, loaded, html, width, height, x, y, on_top, maximize, debug, emit_queue, return_queue): - if maximize: - width, height = webview.screens[0].width, webview.screens[0].height + def __init__(self, q, start_ev, exit_ev, loaded, emit_queue, return_queue, html, debug, + width, height, x, y, on_top, maximize): self.queue = q - self.exit = exit - self.callback_api = CallbackAPI(emit_queue, return_queue) + self.return_queue = return_queue + self.exit = exit_ev + self.callback_api = CallbackAPI(emit_queue) self.loaded: list = loaded + self.html = html self.windows = [] - self.create_window(html, on_top, width, height, x, y) + self.create_window(width, height, x, y, on_top, maximize) - start.wait() + start_ev.wait() webview.start(debug=debug) self.exit.set() - def create_window(self, html, on_top, width, height, x, y): + def create_window(self, width, height, x, y, on_top, maximize): + if maximize: + width, height = webview.screens[0].width, webview.screens[0].height self.windows.append(webview.create_window( - '', html=html, on_top=on_top, js_api=self.callback_api, + '', html=self.html, on_top=on_top, js_api=self.callback_api, width=width, height=height, x=x, y=y, background_color='#000000')) self.windows[-1].events.loaded += lambda: self.loop(self.loaded[len(self.windows)-1]) @@ -47,57 +47,62 @@ class PyWV: if i == 'create_window': self.create_window(*arg) elif arg in ('show', 'hide'): - getattr(self.windows[i], arg)() + getattr(self.windows[i], arg)() elif arg == 'exit': self.exit.set() else: try: - self.windows[i].evaluate_js(arg) + if '_~_~RETURN~_~_' in arg: + self.return_queue.put(self.windows[i].evaluate_js(arg[14:])) + else: + self.windows[i].evaluate_js(arg) except KeyError: return -class Chart(LWC): +class Chart(abstract.AbstractChart): + MAX_WINDOWS = 10 + _window_num = 0 + _main_window_handlers = None + _exit, _start = (mp.Event() for _ in range(2)) + _q, _emit_q, _return_q = (mp.Queue() for _ in range(3)) + _loaded_list = [mp.Event() for _ in range(MAX_WINDOWS)] + def __init__(self, width: int = 800, height: int = 600, x: int = None, y: int = None, on_top: bool = False, maximize: bool = False, debug: bool = False, toolbox: bool = False, inner_width: float = 1.0, inner_height: float = 1.0, scale_candles_only: bool = False): - super().__init__(inner_width, inner_height, scale_candles_only, toolbox, 'pywebview.api.callback') - global chart, num_charts + self._i = Chart._window_num + self._loaded = Chart._loaded_list[self._i] + window = abstract.Window(lambda s: self._q.put((self._i, s)), 'pywebview.api.callback') + abstract.Window._return_q = Chart._return_q + Chart._window_num += 1 + self.is_alive = True - if chart: - self._q, self._exit, self._start, self._process = chart._q, chart._exit, chart._start, chart._process - self._emit_q, self._return_q = mp.Queue(), mp.Queue() - for key, val in self._handlers.items(): - chart._handlers[key] = val - self._handlers = chart._handlers - self._loaded = chart._loaded_list[num_charts] - self._q.put(('create_window', (self._html, on_top, width, height, x, y))) - else: - self._q, self._emit_q, self._return_q = (mp.Queue() for _ in range(3)) - self._loaded_list = [mp.Event() for _ in range(10)] - self._loaded = self._loaded_list[0] - self._exit, self._start = (mp.Event() for _ in range(2)) - self._process = mp.Process(target=PyWV, args=(self._q, self._start, self._exit, self._loaded_list, self._html, - width, height, x, y, on_top, maximize, debug, - self._emit_q, self._return_q), daemon=True) + if self._i == 0: + super().__init__(window, inner_width, inner_height, scale_candles_only, toolbox) + Chart._main_window_handlers = self.win.handlers + self._process = mp.Process(target=PyWV, args=( + self._q, self._start, self._exit, Chart._loaded_list, + self._emit_q, self._return_q, abstract.TEMPLATE, debug, + width, height, x, y, on_top, maximize, + ), daemon=True) self._process.start() - chart = self - - self.i = num_charts - num_charts += 1 - self._script_func = lambda s: self._q.put((self.i, s)) + else: + window.handlers = Chart._main_window_handlers + super().__init__(window, inner_width, inner_height, scale_candles_only, toolbox) + self._q.put(('create_window', (abstract.TEMPLATE, on_top, width, height, x, y))) def show(self, block: bool = False): """ Shows the chart window.\n :param block: blocks execution until the chart is closed. """ - if not self.loaded: + if not self.win.loaded: self._start.set() self._loaded.wait() - self._on_js_load() + self.win.on_js_load() else: - self._q.put((self.i, 'show')) + self._q.put((self._i, 'show')) if block: asyncio.run(self.show_async(block=True)) @@ -107,20 +112,19 @@ class Chart(LWC): asyncio.create_task(self.show_async(block=True)) return try: + from lightweight_charts import polygon + [asyncio.create_task(self.polygon.async_set(*args)) for args in polygon._set_on_load] while 1: - while self._emit_q.empty() and not self._exit.is_set() and self.polygon._q.empty(): + while self._emit_q.empty() and not self._exit.is_set(): await asyncio.sleep(0.05) if self._exit.is_set(): self._exit.clear() + self.is_alive = False return elif not self._emit_q.empty(): - name, args = self._emit_q.get() - func = self._handlers[name] + func, args = parse_event_message(self.win, self._emit_q.get()) await func(*args) if asyncio.iscoroutinefunction(func) else func(*args) continue - value = self.polygon._q.get() - func, args = value[0], value[1:] - func(*args) except KeyboardInterrupt: return @@ -128,16 +132,26 @@ class Chart(LWC): """ Hides the chart window.\n """ - self._q.put((self.i, 'hide')) + self._q.put((self._i, 'hide')) def exit(self): """ Exits and destroys the chart window.\n """ - global num_charts, chart - chart = None - num_charts = 0 - self._q.put((self.i, 'exit')) - self._exit.wait() + self._q.put((self._i, 'exit')) + self._exit.wait() if self.win.loaded else None self._process.terminate() - del self + + Chart._main_window_handlers = None + Chart._window_num = 0 + Chart._q = mp.Queue() + self.is_alive = False + + def screenshot(self) -> bytes: + """ + Takes a screenshot. This method can only be used after the chart window is visible. + :return: a bytes object containing a screenshot of the chart. + """ + self.run_script(f'_~_~RETURN~_~_{self.id}.chart.takeScreenshot().toDataURL()') + serial_data = self.win._return_q.get() + return b64decode(serial_data.split(',')[1]) diff --git a/lightweight_charts/js/callback.js b/lightweight_charts/js/callback.js index f23eaa4..2b474aa 100644 --- a/lightweight_charts/js/callback.js +++ b/lightweight_charts/js/callback.js @@ -14,6 +14,9 @@ if (!window.TopBar) { this.topBar.style.display = 'flex' this.topBar.style.alignItems = 'center' chart.wrapper.prepend(this.topBar) + chart.topBar = this.topBar + this.reSize = () => chart.reSize() + this.reSize() } makeSwitcher(items, activeItem, callbackName) { let switcherElement = document.createElement('div'); @@ -45,6 +48,7 @@ if (!window.TopBar) { switcherElement.appendChild(itemEl); return itemEl; }); + widget.intervalElements = intervalElements let onItemClicked = (item)=> { if (item === activeItem) return @@ -59,6 +63,7 @@ if (!window.TopBar) { this.topBar.appendChild(switcherElement) this.makeSeparator(this.topBar) + this.reSize() return widget } makeTextBoxWidget(text) { @@ -69,9 +74,10 @@ if (!window.TopBar) { textBox.innerText = text this.topBar.append(textBox) this.makeSeparator(this.topBar) + this.reSize() return textBox } - makeButton(defaultText, callbackName) { + makeButton(defaultText, callbackName, separator) { let button = document.createElement('button') button.style.border = 'none' button.style.padding = '2px 5px' @@ -103,7 +109,9 @@ if (!window.TopBar) { button.style.color = this.textColor button.style.fontWeight = 'normal' }) + if (separator) this.makeSeparator() this.topBar.appendChild(button) + this.reSize() return widget } @@ -159,11 +167,10 @@ function makeSearchBox(chart) { chart.chart.subscribeCrosshairMove((param) => { if (param.point) yPrice = param.point.y; }) - let selectedChart = false - chart.wrapper.addEventListener('mouseover', (event) => selectedChart = true) - chart.wrapper.addEventListener('mouseout', (event) => selectedChart = false) + window.selectedChart = chart + chart.wrapper.addEventListener('mouseover', (event) => window.selectedChart = chart) chart.commandFunctions.push((event) => { - if (!selectedChart) return false + if (selectedChart !== chart) return false if (searchWindow.style.display === 'none') { if (/^[a-zA-Z0-9]$/.test(event.key)) { searchWindow.style.display = 'flex'; diff --git a/lightweight_charts/js/funcs.js b/lightweight_charts/js/funcs.js index ff6d953..ac61d9b 100644 --- a/lightweight_charts/js/funcs.js +++ b/lightweight_charts/js/funcs.js @@ -1,103 +1,113 @@ -function makeChart(innerWidth, innerHeight, autoSize=true) { - let chart = { - markers: [], - horizontal_lines: [], - lines: [], - wrapper: document.createElement('div'), - div: document.createElement('div'), - scale: { - width: innerWidth, - height: innerHeight, - }, - candleData: [], - commandFunctions: [], - precision: 2, - } - chart.chart = LightweightCharts.createChart(chart.div, { - width: window.innerWidth*innerWidth, - height: window.innerHeight*innerHeight, - layout: { - textColor: '#d1d4dc', - background: { - color:'#000000', - type: LightweightCharts.ColorType.Solid, - }, - fontSize: 12 - }, - rightPriceScale: { - scaleMargins: {top: 0.3, bottom: 0.25}, - }, - timeScale: {timeVisible: true, secondsVisible: false}, - crosshair: { - mode: LightweightCharts.CrosshairMode.Normal, - vertLine: { - labelBackgroundColor: 'rgb(46, 46, 46)' - }, - horzLine: { - labelBackgroundColor: 'rgb(55, 55, 55)' +if (!window.Chart) { + class Chart { + constructor(chartId, innerWidth, innerHeight, position, autoSize) { + this.makeCandlestickSeries = this.makeCandlestickSeries.bind(this) + this.reSize = this.reSize.bind(this) + this.id = chartId + this.lines = [] + this.wrapper = document.createElement('div') + this.div = document.createElement('div') + this.scale = { + width: innerWidth, + height: innerHeight, } - }, - grid: { - vertLines: {color: 'rgba(29, 30, 38, 5)'}, - horzLines: {color: 'rgba(29, 30, 58, 5)'}, - }, - handleScroll: {vertTouchDrag: true}, - }) - let up = 'rgba(39, 157, 130, 100)' - let down = 'rgba(200, 97, 100, 100)' - chart.series = chart.chart.addCandlestickSeries({ - color: 'rgb(0, 120, 255)', upColor: up, borderUpColor: up, wickUpColor: up, - downColor: down, borderDownColor: down, wickDownColor: down, lineWidth: 2, - }) - chart.volumeSeries = chart.chart.addHistogramSeries({ - color: '#26a69a', - priceFormat: {type: 'volume'}, - priceScaleId: '', - }) - chart.series.priceScale().applyOptions({ - scaleMargins: {top: 0.2, bottom: 0.2}, - }); - chart.volumeSeries.priceScale().applyOptions({ - scaleMargins: {top: 0.8, bottom: 0}, - }); - chart.wrapper.style.width = `${100*innerWidth}%` - chart.wrapper.style.height = `${100*innerHeight}%` - chart.wrapper.style.display = 'flex' - chart.wrapper.style.flexDirection = 'column' - chart.wrapper.style.position = 'relative' + this.commandFunctions = [] + this.chart = LightweightCharts.createChart(this.div, { + width: window.innerWidth * innerWidth, + height: window.innerHeight * innerHeight, + layout: { + textColor: '#d1d4dc', + background: { + color: '#000000', + type: LightweightCharts.ColorType.Solid, + }, + fontSize: 12 + }, + rightPriceScale: { + scaleMargins: {top: 0.3, bottom: 0.25}, + }, + timeScale: {timeVisible: true, secondsVisible: false}, + crosshair: { + mode: LightweightCharts.CrosshairMode.Normal, + vertLine: { + labelBackgroundColor: 'rgb(46, 46, 46)' + }, + horzLine: { + labelBackgroundColor: 'rgb(55, 55, 55)' + } + }, + grid: { + vertLines: {color: 'rgba(29, 30, 38, 5)'}, + horzLines: {color: 'rgba(29, 30, 58, 5)'}, + }, + handleScroll: {vertTouchDrag: true}, + }) + this.wrapper.style.width = `${100 * innerWidth}%` + this.wrapper.style.height = `${100 * innerHeight}%` + this.wrapper.style.display = 'flex' + this.wrapper.style.flexDirection = 'column' + this.wrapper.style.position = 'relative' + this.wrapper.style.float = position - chart.div.style.position = 'relative' - chart.div.style.display = 'flex' - chart.wrapper.appendChild(chart.div) - document.getElementById('wrapper').append(chart.wrapper) + this.div.style.position = 'relative' + this.div.style.display = 'flex' + this.wrapper.appendChild(this.div) + document.getElementById('wrapper').append(this.wrapper) - document.addEventListener('keydown', (event) => { - for (let i=0; i { + for (let i = 0; i < this.commandFunctions.length; i++) { + if (this.commandFunctions[i](event)) break + } + }) + if (!autoSize) return + window.addEventListener('resize', () => this.reSize()) } - }) + reSize() { + let topBarOffset = 'topBar' in this ? this.topBar.offsetHeight : 0 + this.chart.resize(window.innerWidth * this.scale.width, (window.innerHeight * this.scale.height) - topBarOffset) + } + makeCandlestickSeries() { + this.markers = [] + this.horizontal_lines = [] + this.candleData = [] + this.precision = 2 + let up = 'rgba(39, 157, 130, 100)' + let down = 'rgba(200, 97, 100, 100)' + this.series = this.chart.addCandlestickSeries({ + color: 'rgb(0, 120, 255)', upColor: up, borderUpColor: up, wickUpColor: up, + downColor: down, borderDownColor: down, wickDownColor: down, lineWidth: 2, + }) + this.volumeSeries = this.chart.addHistogramSeries({ + color: '#26a69a', + priceFormat: {type: 'volume'}, + priceScaleId: '', + }) + this.series.priceScale().applyOptions({ + scaleMargins: {top: 0.2, bottom: 0.2}, + }); + this.volumeSeries.priceScale().applyOptions({ + scaleMargins: {top: 0.8, bottom: 0}, + }); + } + toJSON() { + // Exclude the chart attribute from serialization + const {chart, ...serialized} = this; + return serialized; + } + } + window.Chart = Chart - if (!autoSize) return chart - window.addEventListener('resize', () => reSize(chart)) - return chart -} - -function reSize(chart) { - let topBarOffset = 'topBar' in chart ? chart.topBar.offsetHeight : 0 - chart.chart.resize(window.innerWidth*chart.scale.width, (window.innerHeight*chart.scale.height)-topBarOffset) -} - -if (!window.HorizontalLine) { class HorizontalLine { constructor(chart, lineId, price, color, width, style, axisLabelVisible, text) { this.updatePrice = this.updatePrice.bind(this) this.deleteLine = this.deleteLine.bind(this) this.chart = chart this.price = price + this.color = color this.id = lineId this.priceLine = { price: this.price, - color: color, + color: this.color, lineWidth: width, lineStyle: style, axisLabelVisible: axisLabelVisible, @@ -128,7 +138,8 @@ if (!window.HorizontalLine) { updateColor(color) { this.chart.series.removePriceLine(this.line) - this.priceLine.color = color + this.color = color + this.priceLine.color = this.color this.line = this.chart.series.createPriceLine(this.priceLine) } @@ -210,11 +221,7 @@ if (!window.HorizontalLine) { makeLines(chart) { this.lines = [] - if (this.linesEnabled) { - chart.lines.forEach((line) => { - this.lines.push(this.makeLineRow(line)) - }) - } + if (this.linesEnabled) chart.lines.forEach(line => this.lines.push(this.makeLineRow(line))) } makeLineRow(line) { @@ -322,39 +329,29 @@ function syncCrosshairs(childChart, parentChart) { childChart.subscribeCrosshairMove(childCrosshairHandler) } -function chartTimeToDate(stampOrBusiness) { - if (typeof stampOrBusiness === 'number') { - stampOrBusiness = new Date(stampOrBusiness*1000) - } - else if (typeof stampOrBusiness === 'string') { - let [year, month, day] = stampOrBusiness.split('-').map(Number) - stampOrBusiness = new Date(Date.UTC(year, month-1, day)) - } - else { - stampOrBusiness = new Date(Date.UTC(stampOrBusiness.year, stampOrBusiness.month - 1, stampOrBusiness.day)) - } - return stampOrBusiness +function stampToDate(stampOrBusiness) { + return new Date(stampOrBusiness*1000) +} +function dateToStamp(date) { + return Math.floor(date.getTime()/1000) } -function dateToChartTime(date, interval) { - if (interval >= 24*60*60*1000) { - return {day: date.getUTCDate(), month: date.getUTCMonth()+1, year: date.getUTCFullYear()} - } - return Math.floor(date.getTime()/1000) +function lastBar(obj) { + return obj[obj.length-1] } function calculateTrendLine(startDate, startValue, endDate, endValue, interval, chart, ray=false) { let reversed = false - if (chartTimeToDate(endDate).getTime() < chartTimeToDate(startDate).getTime()) { + if (stampToDate(endDate).getTime() < stampToDate(startDate).getTime()) { reversed = true; [startDate, endDate] = [endDate, startDate]; } let startIndex - if (chartTimeToDate(startDate).getTime() < chartTimeToDate(chart.candleData[0].time).getTime()) { + if (stampToDate(startDate).getTime() < stampToDate(chart.candleData[0].time).getTime()) { startIndex = 0 } else { - startIndex = chart.candleData.findIndex(item => chartTimeToDate(item.time).getTime() === chartTimeToDate(startDate).getTime()) + startIndex = chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(startDate).getTime()) } if (startIndex === -1) { @@ -366,9 +363,9 @@ function calculateTrendLine(startDate, startValue, endDate, endValue, interval, startValue = endValue } else { - endIndex = chart.candleData.findIndex(item => chartTimeToDate(item.time).getTime() === chartTimeToDate(endDate).getTime()) + endIndex = chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(endDate).getTime()) if (endIndex === -1) { - let barsBetween = (chartTimeToDate(endDate)-chartTimeToDate(chart.candleData[chart.candleData.length-1].time))/interval + let barsBetween = (stampToDate(endDate)-stampToDate(chart.candleData[chart.candleData.length-1].time))/interval endIndex = chart.candleData.length-1+barsBetween } } @@ -384,8 +381,7 @@ function calculateTrendLine(startDate, startValue, endDate, endValue, interval, } else { iPastData ++ - currentDate = dateToChartTime(new Date(chartTimeToDate(chart.candleData[chart.candleData.length-1].time).getTime()+(iPastData*interval)), interval) - + currentDate = dateToStamp(new Date(stampToDate(chart.candleData[chart.candleData.length-1].time).getTime()+(iPastData*interval))) } const currentValue = reversed ? startValue + rate_of_change * (numBars - i) : startValue + rate_of_change * i; @@ -431,22 +427,23 @@ if (!window.ContextMenu) { active ? document.addEventListener('contextmenu', this.onRightClick) : document.removeEventListener('contextmenu', this.onRightClick) } menuItem(text, action, hover=false) { - let item = document.createElement('div') + let item = document.createElement('span') item.style.display = 'flex' item.style.alignItems = 'center' item.style.justifyContent = 'space-between' - item.style.padding = '0px 10px' - item.style.margin = '3px 0px' + item.style.padding = '2px 10px' + item.style.margin = '1px 0px' item.style.borderRadius = '3px' this.menu.appendChild(item) - let elem = document.createElement('div') + let elem = document.createElement('span') elem.innerText = text item.appendChild(elem) if (hover) { - let arrow = document.createElement('div') - arrow.innerHTML = `` + let arrow = document.createElement('span') + arrow.innerText = `►` + arrow.style.fontSize = '8px' item.appendChild(arrow) } @@ -457,13 +454,17 @@ if (!window.ContextMenu) { }) elem.addEventListener('mouseout', (event) => item.style.backgroundColor = 'transparent') if (!hover) elem.addEventListener('click', (event) => {action(event); this.menu.style.display = 'none'}) - else elem.addEventListener('mouseover', () => action(item.getBoundingClientRect())) + else { + let timeout + elem.addEventListener('mouseover', () => timeout = setTimeout(() => action(item.getBoundingClientRect()), 100)) + elem.addEventListener('mouseout', () => clearTimeout(timeout)) + } } separator() { let separator = document.createElement('div') separator.style.width = '90%' separator.style.height = '1px' - separator.style.margin = '4px 0px' + separator.style.margin = '3px 0px' separator.style.backgroundColor = '#3C434C' this.menu.appendChild(separator) } @@ -471,3 +472,5 @@ if (!window.ContextMenu) { } window.ContextMenu = ContextMenu } + +window.callbackFunction = () => undefined; \ No newline at end of file diff --git a/lightweight_charts/js/table.js b/lightweight_charts/js/table.js index 0a2e7d3..28ba5cc 100644 --- a/lightweight_charts/js/table.js +++ b/lightweight_charts/js/table.js @@ -1,9 +1,8 @@ if (!window.Table) { class Table { - constructor(width, height, headings, widths, alignments, position, draggable = false, chart) { + constructor(width, height, headings, widths, alignments, position, draggable = false) { this.container = document.createElement('div') this.callbackName = null - this.chart = chart if (draggable) { this.container.style.position = 'absolute' @@ -15,7 +14,7 @@ if (!window.Table) { this.container.style.zIndex = '2000' this.container.style.width = width <= 1 ? width * 100 + '%' : width + 'px' - this.container.style.minHeight = height <= 1 ? height * 100 + '%' : height + 'px' + this.container.style.height = height <= 1 ? height * 100 + '%' : height + 'px' this.container.style.display = 'flex' this.container.style.flexDirection = 'column' this.container.style.justifyContent = 'space-between' @@ -52,7 +51,10 @@ if (!window.Table) { th.style.border = '1px solid rgb(70, 70, 70)' } - this.container.appendChild(this.table) + let overflowWrapper = document.createElement('div') + overflowWrapper.style.overflow = 'auto' + overflowWrapper.appendChild(this.table) + this.container.appendChild(overflowWrapper) document.getElementById('wrapper').appendChild(this.container) if (!draggable) return @@ -137,11 +139,6 @@ if (!window.Table) { this.footer[i].style.textAlign = 'center' } } - toJSON() { - // Exclude the chart attribute from serialization - const {chart, ...serialized} = this; - return serialized; - } } window.Table = Table } diff --git a/lightweight_charts/js/toolbox.js b/lightweight_charts/js/toolbox.js index ec30ff1..47be952 100644 --- a/lightweight_charts/js/toolbox.js +++ b/lightweight_charts/js/toolbox.js @@ -174,7 +174,7 @@ if (!window.ToolBox) { currentTime = this.chart.chart.timeScale().coordinateToTime(param.point.x) if (!currentTime) { let barsToMove = param.logical - this.chart.chart.timeScale().coordinateToLogical(this.chart.chart.timeScale().timeToCoordinate(lastCandleTime)) - currentTime = dateToChartTime(new Date(chartTimeToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval)), this.interval) + currentTime = dateToStamp(new Date(stampToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval))) } let currentPrice = this.chart.series.coordinateToPrice(param.point.y) @@ -298,7 +298,6 @@ if (!window.ToolBox) { if (boundaryConditional) { if (hoveringOver === drawing) return - if (!horizontal && !drawing.ray) drawing.line.setMarkers(drawing.markers) document.body.style.cursor = 'pointer' document.addEventListener('mousedown', checkForClick) @@ -324,13 +323,17 @@ if (!window.ToolBox) { let originalPrice let mouseDown = false let clickedEnd = false + let labelColor let checkForClick = (event) => { mouseDown = true document.body.style.cursor = 'grabbing' this.chart.chart.applyOptions({handleScroll: false}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) this.chart.chart.unsubscribeCrosshairMove(hoverOver) + labelColor = this.chart.chart.options().crosshair.horzLine.labelBackgroundColor + this.chart.chart.applyOptions({crosshair: {horzLine: {labelBackgroundColor: hoveringOver.color}}}) if ('price' in hoveringOver) { originalPrice = hoveringOver.price this.chart.chart.subscribeCrosshairMove(crosshairHandlerHorz) @@ -353,6 +356,8 @@ if (!window.ToolBox) { document.body.style.cursor = this.chart.cursor this.chart.chart.applyOptions({handleScroll: true}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + this.chart.chart.applyOptions({crosshair: {horzLine: {labelBackgroundColor: labelColor}}}) if (hoveringOver && 'price' in hoveringOver && hoveringOver.id !== 'toolBox') { window.callbackFunction(`${hoveringOver.id}_~_${hoveringOver.price.toFixed(8)}`); } @@ -372,8 +377,8 @@ if (!window.ToolBox) { let priceDiff = priceAtCursor - originalPrice let barsToMove = param.logical - originalIndex - let startBarIndex = this.chart.candleData.findIndex(item => chartTimeToDate(item.time).getTime() === chartTimeToDate(hoveringOver.from[0]).getTime()) - let endBarIndex = this.chart.candleData.findIndex(item => chartTimeToDate(item.time).getTime() === chartTimeToDate(hoveringOver.to[0]).getTime()) + let startBarIndex = this.chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(hoveringOver.from[0]).getTime()) + let endBarIndex = this.chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(hoveringOver.to[0]).getTime()) let startDate let endBar @@ -385,19 +390,18 @@ if (!window.ToolBox) { endBar = endBarIndex === -1 ? null : this.chart.candleData[endBarIndex + barsToMove] } - let endDate = endBar ? endBar.time : dateToChartTime(new Date(chartTimeToDate(hoveringOver.to[0]).getTime() + (barsToMove * this.interval)), this.interval) + let endDate = endBar ? endBar.time : dateToStamp(new Date(stampToDate(hoveringOver.to[0]).getTime() + (barsToMove * this.interval))) let startValue = hoveringOver.from[1] + priceDiff let endValue = hoveringOver.to[1] + priceDiff let data = calculateTrendLine(startDate, startValue, endDate, endValue, this.interval, this.chart, hoveringOver.ray) - this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + let logical = this.chart.chart.timeScale().getVisibleLogicalRange() hoveringOver.from = [data[0].time, data[0].value] hoveringOver.to = [data[data.length - 1].time, data[data.length - 1].value] hoveringOver.line.setData(data) - this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) this.chart.chart.timeScale().setVisibleLogicalRange(logical) if (!hoveringOver.ray) { @@ -435,7 +439,7 @@ if (!window.ToolBox) { let lastCandleTime = this.chart.candleData[this.chart.candleData.length - 1].time if (!currentTime) { let barsToMove = param.logical - this.chart.chart.timeScale().coordinateToLogical(this.chart.chart.timeScale().timeToCoordinate(lastCandleTime)) - currentTime = dateToChartTime(new Date(chartTimeToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval)), this.interval) + currentTime = dateToStamp(new Date(stampToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval))) } let data = calculateTrendLine(firstTime, firstPrice, currentTime, currentPrice, this.interval, this.chart) hoveringOver.line.setData(data) @@ -472,8 +476,8 @@ if (!window.ToolBox) { renderDrawings() { this.drawings.forEach((item) => { if ('price' in item) return - let startDate = dateToChartTime(new Date(Math.round(chartTimeToDate(item.from[0]).getTime() / this.interval) * this.interval), this.interval) - let endDate = dateToChartTime(new Date(Math.round(chartTimeToDate(item.to[0]).getTime() / this.interval) * this.interval), this.interval) + let startDate = dateToStamp(new Date(Math.round(stampToDate(item.from[0]).getTime() / this.interval) * this.interval)) + let endDate = dateToStamp(new Date(Math.round(stampToDate(item.to[0]).getTime() / this.interval) * this.interval)) let data = calculateTrendLine(startDate, item.from[1], endDate, item.to[1], this.interval, this.chart, item.ray) item.from = [data[0].time, data[0].value] item.to = [data[data.length - 1].time, data[data.length-1].value] @@ -537,8 +541,8 @@ if (!window.ToolBox) { }, }), }) - let startDate = dateToChartTime(new Date(Math.round(chartTimeToDate(item.from[0]).getTime() / this.interval) * this.interval), this.interval) - let endDate = dateToChartTime(new Date(Math.round(chartTimeToDate(item.to[0]).getTime() / this.interval) * this.interval), this.interval) + let startDate = dateToStamp(new Date(Math.round(stampToDate(item.from[0]).getTime() / this.interval) * this.interval)) + let endDate = dateToStamp(new Date(Math.round(stampToDate(item.to[0]).getTime() / this.interval) * this.interval)) let data = calculateTrendLine(startDate, item.from[1], endDate, item.to[1], this.interval, this.chart, item.ray) item.from = [data[0].time, data[0].value] item.to = [data[data.length - 1].time, data[data.length-1].value] @@ -664,7 +668,7 @@ if (!window.ColorPicker) { } openMenu(rect, drawing) { this.drawing = drawing - this.rgbValues = this.extractRGB('price' in drawing ? drawing.priceLine.color : drawing.color) + this.rgbValues = this.extractRGB(drawing.color) this.opacity = parseFloat(this.rgbValues[3]) this.container.style.top = (rect.top-30)+'px' this.container.style.left = rect.right+'px' diff --git a/lightweight_charts/polygon.py b/lightweight_charts/polygon.py index 615f49c..ff56c8e 100644 --- a/lightweight_charts/polygon.py +++ b/lightweight_charts/polygon.py @@ -2,26 +2,43 @@ import asyncio import logging import datetime as dt import re -import threading -import queue import json -import ssl +import urllib.request from typing import Literal, Union, List import pandas as pd -from lightweight_charts import Chart +from .chart import Chart -try: - import requests -except ImportError: - requests = None try: import websockets except ImportError: websockets = None +SEC_TYPE = Literal['stocks', 'options', 'indices', 'forex', 'crypto'] -def convert_timeframe(timeframe): +ch = logging.StreamHandler() +ch.setFormatter(logging.Formatter('%(asctime)s | [polygon.io] %(levelname)s: %(message)s', datefmt='%H:%M:%S')) +ch.setLevel(logging.DEBUG) +_log = logging.getLogger('polygon') +_log.setLevel(logging.ERROR) +_log.addHandler(ch) + +api_key = '' +_tickers = {} +_set_on_load = [] + +_lasts = {} +_ws = {'stocks': None, 'options': None, 'indices': None, 'crypto': None, 'forex': None} +_subscription_type = { + 'stocks': ('Q', 'A'), + 'options': ('Q', 'A'), + 'indices': ('V', None), + 'forex': ('C', 'CA'), + 'crypto': ('XQ', 'XA'), +} + + +def _convert_timeframe(timeframe): spans = { 'min': 'minute', 'H': 'hour', @@ -37,50 +54,211 @@ def convert_timeframe(timeframe): return multiplier, timespan +def _get_sec_type(ticker): + if '/' in ticker: + return 'forex' + for prefix, security_type in zip(('O:', 'I:', 'C:', 'X:'), ('options', 'indices', 'forex', 'crypto')): + if ticker.startswith(prefix): + return security_type + else: + return 'stocks' + + +def _polygon_request(query_url): + query_url = 'https://api.polygon.io'+query_url + query_url += f'&apiKey={api_key}' + + request = urllib.request.Request(query_url, headers={'User-Agent': 'lightweight_charts/1.0'}) + with urllib.request.urlopen(request) as response: + if response.status != 200: + error = response.json() + _log.error(f'({response.status}) Request failed: {error["error"]}') + return + data = json.loads(response.read()) + if 'results' not in data: + _log.error(f'No results for {query_url}') + return + return data['results'] + + +def get_bar_data(ticker: str, timeframe: str, start_date: str, end_date: str, limit: int = 5_000): + end_date = dt.datetime.now().strftime('%Y-%m-%d') if end_date == 'now' else end_date + mult, span = _convert_timeframe(timeframe) + if '-' in ticker: + ticker = ticker.replace('-', '') + + query_url = f"/v2/aggs/ticker/{ticker}/range/{mult}/{span}/{start_date}/{end_date}?limit={limit}" + results = _polygon_request(query_url) + if not results: + return None + + df = pd.DataFrame(results) + df['t'] = pd.to_datetime(df['t'], unit='ms') + + rename = {'o': 'open', 'h': 'high', 'l': 'low', 'c': 'close', 't': 'time'} + if not ticker.startswith('I:'): + rename['v'] = 'volume' + + return df[rename.keys()].rename(columns=rename) + + +async def async_get_bar_data(ticker: str, timeframe: str, start_date: str, end_date: str, limit: int = 5_000): + loop = asyncio.get_running_loop() + return await loop.run_in_executor(None, get_bar_data, ticker, timeframe, start_date, end_date, limit) + + +async def _send(sec_type: SEC_TYPE, action: str, params: str): + ws = _ws[sec_type] + while ws is None: + await asyncio.sleep(0.05) + ws = _ws[sec_type] + await ws.send(json.dumps({'action': action, 'params': params})) + + +async def subscribe(ticker: str, sec_type: SEC_TYPE, func, args, precision=2): + if not _ws[sec_type]: + asyncio.create_task(_websocket_connect(sec_type)) + + if sec_type in ('forex', 'crypto'): + key = ticker[ticker.index(':')+1:] + key = key.replace('-', '/') if sec_type == 'forex' else key + else: + key = ticker + + if not _lasts.get(key): + _lasts[key] = { + 'price': 0, + 'funcs': [], + 'precision': precision + } + if sec_type != 'indices': + _lasts[key]['volume'] = 0 + + data = _lasts[key] + + quotes, aggs = _subscription_type[sec_type] + await _send(sec_type, 'subscribe', f'{quotes}.{ticker}') + await _send(sec_type, 'subscribe', f'{aggs}.{ticker}') if aggs else None + + if func in data['funcs']: + return + data['funcs'].append((func, args)) + + +async def unsubscribe(func): + for key, data in _lasts.items(): + if val := next(((f, args) for f, args in data['funcs'] if f == func), None): + break + else: + return + data['funcs'].remove(val) + + if data['funcs']: + return + sec_type = _get_sec_type(key) + quotes, aggs = _subscription_type[sec_type] + await _send(sec_type, 'unsubscribe', f'{quotes}.{key}') + await _send(sec_type, 'unsubscribe', f'{aggs}.{key}') + + +async def _websocket_connect(sec_type): + if websockets is None: + raise ImportError('The "websockets" library was not found, and must be installed to pull live data.') + ticker_key = { + 'stocks': 'sym', + 'options': 'sym', + 'indices': 'T', + 'forex': 'p', + 'crypto': 'pair', + }[sec_type] + async with websockets.connect(f'wss://socket.polygon.io/{sec_type}') as ws: + _ws[sec_type] = ws + await _send(sec_type, 'auth', api_key) + while 1: + response = await ws.recv() + data_list: List[dict] = json.loads(response) + for i, data in enumerate(data_list): + if data['ev'] == 'status': + _log.info(f'{data["message"]}') + continue + _ticker_key = { + 'stocks': 'sym', + 'options': 'sym', + 'indices': 'T', + 'forex': 'p', + 'crypto': 'pair', + } + await _handle_tick(data[ticker_key], data) + + +async def _handle_tick(ticker, data): + lasts = _lasts[ticker] + sec_type = _get_sec_type(ticker) + + if data['ev'] in ('Q', 'V', 'C', 'XQ'): + if sec_type == 'forex': + data['bp'] = data.pop('b') + data['ap'] = data.pop('a') + price = (data['bp'] + data['ap']) / 2 if sec_type != 'indices' else data['val'] + if abs(price - lasts['price']) < (1/(10**lasts['precision'])): + return + lasts['price'] = price + + if sec_type != 'indices': + lasts['volume'] = 0 + + if 't' not in data: + lasts['time'] = pd.to_datetime(data.pop('s'), unit='ms') + else: + lasts['time'] = pd.to_datetime(data['t'], unit='ms') + + elif data['ev'] in ('A', 'CA', 'XA'): + lasts['volume'] = data['v'] + if not lasts.get('time'): + return + lasts['symbol'] = ticker + for func, args in lasts['funcs']: + func(pd.Series(lasts), *args) + + class PolygonAPI: """ Offers direct access to Polygon API data within all Chart objects. It is not designed to be initialized by the user, and should be utilised - through the `polygon` method of `LWC` (chart.polygon.). + through the `polygon` method of `AbstractChart` (chart.polygon.). """ + _set_on_load = [] + def __init__(self, chart): - ch = logging.StreamHandler() - ch.setFormatter(logging.Formatter('%(asctime)s | [polygon.io] %(levelname)s: %(message)s', datefmt='%H:%M:%S')) - ch.setLevel(logging.DEBUG) - self._log = logging.getLogger('polygon') - self._log.setLevel(logging.ERROR) - self._log.addHandler(ch) - - self.max_ticks_per_response = 20 - self._chart = chart - self._lasts = {} - self._key = None - self._ws_q = queue.Queue() - self._q = queue.Queue() - self._lock = threading.Lock() + def set(self, *args): + if asyncio.get_event_loop().is_running(): + asyncio.create_task(self.async_set(*args)) + return True + else: + _set_on_load.append(args) + return False - self._using_live_data = False - self._using_live = {'stocks': False, 'options': False, 'indices': False, 'crypto': False, 'forex': False} - self._ws = {'stocks': None, 'options': None, 'indices': None, 'crypto': None, 'forex': None} - self._tickers = {} + async def async_set(self, sec_type: Literal['stocks', 'options', 'indices', 'forex', 'crypto'], ticker, timeframe, + start_date, end_date, limit, live): + await unsubscribe(self._chart.update_from_tick) + df = await async_get_bar_data(ticker, timeframe, start_date, end_date, limit) - def log(self, info: bool): - """ - Streams informational messages related to Polygon.io. - """ - self._log.setLevel(logging.INFO) if info else self._log.setLevel(logging.ERROR) + self._chart.set(df, render_drawings=_tickers.get(self._chart) == ticker) + _tickers[self._chart] = ticker - def api_key(self, key: str): - """ - Sets the API key to be used with Polygon.io. - """ - self._key = key + if not live: + return True + await subscribe(ticker, sec_type, self._chart.update_from_tick, (True,), self._chart.num_decimals) + return True - def stock(self, symbol: str, timeframe: str, start_date: str, end_date='now', limit: int = 5_000, live: bool = False): + def stock( + self, symbol: str, timeframe: str, start_date: str, end_date='now', + limit: int = 5_000, live: bool = False + ) -> bool: """ Requests and displays stock data pulled from Polygon.io.\n :param symbol: Ticker to request. @@ -90,13 +268,17 @@ class PolygonAPI: :param limit: The limit of base aggregates queried to create the timeframe given (max 50_000). :param live: If true, the data will be updated in real-time. """ - return self._set(self._chart, 'stocks', symbol, timeframe, start_date, end_date, limit, live) + return self.set('stocks', symbol, timeframe, start_date, end_date, limit, live) - def option(self, symbol: str, timeframe: str, start_date: str, expiration: str = None, right: Literal['C', 'P'] = None, strike: Union[int, float] = None, - end_date: str = 'now', limit: int = 5_000, live: bool = False): + def option( + self, symbol: str, timeframe: str, start_date: str, expiration: str = None, + right: Literal['C', 'P'] = None, strike: Union[int, float] = None, + end_date: str = 'now', limit: int = 5_000, live: bool = False + ) -> bool: """ Requests and displays option data pulled from Polygon.io.\n - :param symbol: The underlying ticker to request. A formatted option ticker can also be given instead of using the expiration, right, and strike parameters. + :param symbol: The underlying ticker to request. + A formatted option ticker can also be given instead of using the expiration, right, and strike parameters. :param timeframe: Timeframe to request (1min, 5min, 2H, 1D, 1W, 2M, etc). :param start_date: Start date of the data (YYYY-MM-DD). :param expiration: Expiration of the option (YYYY-MM-DD). @@ -107,10 +289,14 @@ class PolygonAPI: :param live: If true, the data will be updated in real-time. """ if any((expiration, right, strike)): - symbol = f'{symbol}{dt.datetime.strptime(expiration, "%Y-%m-%d").strftime("%y%m%d")}{right}{strike * 1000:08d}' - return self._set(self._chart, 'options', f'O:{symbol}', timeframe, start_date, end_date, limit, live) + expiration = dt.datetime.strptime(expiration, "%Y-%m-%d").strftime("%y%m%d") + symbol = f'{symbol}{expiration}{right}{strike * 1000:08d}' + return self.set('options', f'O:{symbol}', timeframe, start_date, end_date, limit, live) - def index(self, symbol, timeframe, start_date, end_date='now', limit: int = 5_000, live=False): + def index( + self, symbol: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: """ Requests and displays index data pulled from Polygon.io.\n :param symbol: Ticker to request. @@ -120,9 +306,12 @@ class PolygonAPI: :param limit: The limit of base aggregates queried to create the timeframe given (max 50_000). :param live: If true, the data will be updated in real-time. """ - return self._set(self._chart, 'indices', f'I:{symbol}', timeframe, start_date, end_date, limit, live) + return self.set('indices', f'I:{symbol}', timeframe, start_date, end_date, limit, live) - def forex(self, fiat_pair, timeframe, start_date, end_date='now', limit: int = 5_000, live=False): + def forex( + self, fiat_pair: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: """ Requests and displays forex data pulled from Polygon.io.\n :param fiat_pair: The fiat pair to request. (USD-CAD, GBP-JPY etc.) @@ -132,9 +321,12 @@ class PolygonAPI: :param limit: The limit of base aggregates queried to create the timeframe given (max 50_000). :param live: If true, the data will be updated in real-time. """ - return self._set(self._chart, 'forex', f'C:{fiat_pair}', timeframe, start_date, end_date, limit, live) + return self.set('forex', f'C:{fiat_pair}', timeframe, start_date, end_date, limit, live) - def crypto(self, crypto_pair, timeframe, start_date, end_date='now', limit: int = 5_000, live=False): + def crypto( + self, crypto_pair: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: """ Requests and displays crypto data pulled from Polygon.io.\n :param crypto_pair: The crypto pair to request. (BTC-USD, ETH-BTC etc.) @@ -144,174 +336,61 @@ class PolygonAPI: :param limit: The limit of base aggregates queried to create the timeframe given (max 50_000). :param live: If true, the data will be updated in real-time. """ - return self._set(self._chart, 'crypto', f'X:{crypto_pair}', timeframe, start_date, end_date, limit, live) + return self.set('crypto', f'X:{crypto_pair}', timeframe, start_date, end_date, limit, live) - def _set(self, chart, sec_type, ticker, timeframe, start_date, end_date, limit, live): - if requests is None: - raise ImportError('The "requests" library was not found, and must be installed to use polygon.io.') + async def async_stock( + self, symbol: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: + return await self.async_set('stocks', symbol, timeframe, start_date, end_date, limit, live) - self._ws_q.put(('_unsubscribe', chart)) - end_date = dt.datetime.now().strftime('%Y-%m-%d') if end_date == 'now' else end_date - mult, span = convert_timeframe(timeframe) + async def async_option( + self, symbol: str, timeframe: str, start_date: str, expiration: str = None, + right: Literal['C', 'P'] = None, strike: Union[int, float] = None, + end_date: str = 'now', limit: int = 5_000, live: bool = False + ) -> bool: + if any((expiration, right, strike)): + expiration = dt.datetime.strptime(expiration, "%Y-%m-%d").strftime("%y%m%d") + symbol = f'{symbol}{expiration}{right}{strike * 1000:08d}' + return await self.async_set('options', f'O:{symbol}', timeframe, start_date, end_date, limit, live) - query_url = f"https://api.polygon.io/v2/aggs/ticker/{ticker.replace('-', '')}/range/{mult}/{span}/{start_date}/{end_date}?limit={limit}&apiKey={self._key}" - response = requests.get(query_url, headers={'User-Agent': 'lightweight_charts/1.0'}) - if response.status_code != 200: - error = response.json() - self._log.error(f'({response.status_code}) Request failed: {error["error"]}') - return - data = response.json() - if 'results' not in data: - self._log.error(f'No results for "{ticker}" ({sec_type})') - return + async def async_index( + self, symbol: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: + return await self.async_set('indices', f'I:{symbol}', timeframe, start_date, end_date, limit, live) - df = pd.DataFrame(data['results']) - columns = ['t', 'o', 'h', 'l', 'c'] - rename = {'o': 'open', 'h': 'high', 'l': 'low', 'c': 'close', 't': 'time'} - if sec_type != 'indices': - rename['v'] = 'volume' - columns.append('v') - df = df[columns].rename(columns=rename) - df['time'] = pd.to_datetime(df['time'], unit='ms') + async def async_forex( + self, fiat_pair: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: + return await self.async_set('forex', f'C:{fiat_pair}', timeframe, start_date, end_date, limit, live) - chart.set(df, render_drawings=self._tickers.get(chart) == ticker) - self._tickers[chart] = ticker + async def async_crypto( + self, crypto_pair: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: + return await self.async_set('crypto', f'X:{crypto_pair}', timeframe, start_date, end_date, limit, live) - if not live: - return True - if not self._using_live_data: - threading.Thread(target=asyncio.run, args=[self._thread_loop()], daemon=True).start() - self._using_live_data = True - with self._lock: - if not self._ws[sec_type]: - self._ws_q.put(('_websocket_connect', self._key, sec_type)) - self._ws_q.put(('_subscribe', chart, ticker, sec_type)) - return True + @staticmethod + def log(info: bool): + """ + Streams informational messages related to Polygon.io. + """ + _log.setLevel(logging.INFO) if info else _log.setLevel(logging.ERROR) - async def _thread_loop(self): - while 1: - while self._ws_q.empty(): - await asyncio.sleep(0.05) - value = self._ws_q.get() - func, args = value[0], value[1:] - asyncio.create_task(getattr(self, func)(*args)) - - async def _subscribe(self, chart, ticker, sec_type): - key = ticker if ':' not in ticker else ticker.split(':')[1] - if not self._lasts.get(key): - self._lasts[key] = { - 'ticker': ticker, - 'sec_type': sec_type, - 'sub_type': { - 'stocks': ('Q', 'A'), - 'options': ('Q', 'A'), - 'indices': ('V', None), - 'forex': ('C', 'CA'), - 'crypto': ('XQ', 'XA'), - }[sec_type], - 'price': chart._last_bar['close'], - 'charts': [], - } - quotes, aggs = self._lasts[key]['sub_type'] - await self._send(self._lasts[key]['sec_type'], 'subscribe', f'{quotes}.{ticker}') - await self._send(self._lasts[key]['sec_type'], 'subscribe', f'{aggs}.{ticker}') if aggs else None - - if sec_type != 'indices': - self._lasts[key]['volume'] = chart._last_bar['volume'] - if chart in self._lasts[key]['charts']: - return - self._lasts[key]['charts'].append(chart) - - async def _unsubscribe(self, chart): - for data in self._lasts.values(): - if chart in data['charts']: - break - else: - return - if chart in data['charts']: - data['charts'].remove(chart) - if data['charts']: - return - - while self._q.qsize(): - self._q.get() # Flush the queue - quotes, aggs = data['sub_type'] - await self._send(data['sec_type'], 'unsubscribe', f'{quotes}.{data["ticker"]}') - await self._send(data['sec_type'], 'unsubscribe', f'{aggs}.{data["ticker"]}') - - async def _send(self, sec_type, action, params): - while 1: - with self._lock: - ws = self._ws[sec_type] - if ws: - break - await asyncio.sleep(0.1) - await ws.send(json.dumps({'action': action, 'params': params})) - - async def _handle_tick(self, sec_type, data): - data['ticker_key'] = { - 'stocks': 'sym', - 'options': 'sym', - 'indices': 'T', - 'forex': 'p', - 'crypto': 'pair', - }[sec_type] - key = data[data['ticker_key']].replace('/', '-') - if ':' in key: - key = key[key.index(':')+1:] - data['t'] = pd.to_datetime(data.pop('s'), unit='ms') if 't' not in data else pd.to_datetime(data['t'], unit='ms') - - if data['ev'] in ('Q', 'V', 'C', 'XQ'): - self._lasts[key]['time'] = data['t'] - if sec_type == 'forex': - data['bp'] = data.pop('b') - data['ap'] = data.pop('a') - if sec_type == 'indices': - self._lasts[key]['price'] = data['val'] - else: - self._lasts[key]['price'] = (data['bp']+data['ap'])/2 - self._lasts[key]['volume'] = 0 - elif data['ev'] in ('A', 'CA', 'XA'): - self._lasts[key]['volume'] = data['v'] - if not self._lasts[key].get('time'): - return - for chart in self._lasts[key]['charts']: - self._q.put((chart.update_from_tick, pd.Series(self._lasts[key]), True)) - - async def _websocket_connect(self, api_key, sec_type): - if websockets is None: - raise ImportError('The "websockets" library was not found, and must be installed to pull live data.') - ssl_context = ssl.create_default_context() - ssl_context.check_hostname = False - ssl_context.verify_mode = ssl.CERT_NONE - async with websockets.connect(f'wss://socket.polygon.io/{sec_type}', ssl=ssl_context) as ws: - with self._lock: - self._ws[sec_type] = ws - await self._send(sec_type, 'auth', api_key) - while 1: - response = await ws.recv() - data_list: List[dict] = json.loads(response) - for i, data in enumerate(data_list): - if data['ev'] == 'status': - self._log.info(f'{data["message"]}') - continue - elif data_list.index(data) < len(data_list)-self.max_ticks_per_response: - continue - await self._handle_tick(sec_type, data) - - def _subchart(self, subchart): - return PolygonAPISubChart(self, subchart) - - -class PolygonAPISubChart(PolygonAPI): - def __init__(self, polygon, subchart): - super().__init__(subchart) - self._set = polygon._set + @staticmethod + def api_key(key: str): + """ + Sets the API key to be used with Polygon.io. + """ + global api_key + api_key = key class PolygonChart(Chart): """ - A prebuilt callback chart object allowing for a standalone and plug-and-play + A prebuilt callback chart object allowing for a standalone, plug-and-play experience of Polygon.io's API. Tickers, security types and timeframes are to be defined within the chart window. @@ -319,41 +398,44 @@ class PolygonChart(Chart): If using the standard `show` method, the `block` parameter must be set to True. When using `show_async`, either is acceptable. """ - def __init__(self, api_key: str, live: bool = False, num_bars: int = 200, end_date: str = 'now', limit: int = 5_000, - timeframe_options: tuple = ('1min', '5min', '30min', 'D', 'W'), - security_options: tuple = ('Stock', 'Option', 'Index', 'Forex', 'Crypto'), - toolbox: bool = True, width: int = 800, height: int = 600, x: int = None, y: int = None, - on_top: bool = False, maximize: bool = False, debug: bool = False): - super().__init__(width=width, height=height, x=x, y=y, on_top=on_top, maximize=maximize, debug=debug, toolbox=toolbox) - self.chart = self + def __init__( + self, api_key: str, live: bool = False, num_bars: int = 200, end_date: str = 'now', limit: int = 5_000, + timeframe_options: tuple = ('1min', '5min', '30min', 'D', 'W'), + security_options: tuple = ('Stock', 'Option', 'Index', 'Forex', 'Crypto'), + toolbox: bool = True, width: int = 800, height: int = 600, x: int = None, y: int = None, + on_top: bool = False, maximize: bool = False, debug: bool = False + ): + super().__init__(width, height, x, y, on_top, maximize, debug, toolbox) + self.num_bars = num_bars self.end_date = end_date self.limit = limit self.live = live + self.polygon.api_key(api_key) + self.events.search += self.on_search + self.legend(True) + self.grid(False, False) + self.crosshair(vert_visible=False, horz_visible=False) self.topbar.active_background_color = 'rgb(91, 98, 246)' self.topbar.textbox('symbol') self.topbar.switcher('timeframe', timeframe_options, func=self._on_timeframe_selection) self.topbar.switcher('security', security_options, func=self._on_security_selection) - self.legend(True) - self.grid(False, False) - self.crosshair(vert_visible=False, horz_visible=False) - self.events.search += self.on_search + self.run_script(f''' {self.id}.search.box.style.backgroundColor = 'rgba(91, 98, 246, 0.5)' {self.id}.spinner.style.borderTop = '4px solid rgba(91, 98, 246, 0.8)' - {self.id}.search.window.style.display = "flex" {self.id}.search.box.focus() ''') - def _polygon(self, symbol): + async def _polygon(self, symbol): self.spinner(True) self.set(pd.DataFrame(), True) self.crosshair(vert_visible=False, horz_visible=False) - mult, span = convert_timeframe(self.topbar['timeframe'].value) + mult, span = _convert_timeframe(self.topbar['timeframe'].value) delta = dt.timedelta(**{span + 's': int(mult)}) short_delta = (delta < dt.timedelta(days=7)) start_date = dt.datetime.now() if self.end_date == 'now' else dt.datetime.strptime(self.end_date, '%Y-%m-%d') @@ -365,7 +447,7 @@ class PolygonChart(Chart): remaining_bars -= 1 epoch = dt.datetime.fromtimestamp(0) start_date = epoch if start_date < epoch else start_date - success = getattr(self.polygon, self.topbar['security'].value.lower())( + success = await getattr(self.polygon, 'async_'+self.topbar['security'].value.lower())( symbol, timeframe=self.topbar['timeframe'].value, start_date=start_date.strftime('%Y-%m-%d'), @@ -374,14 +456,14 @@ class PolygonChart(Chart): live=self.live ) self.spinner(False) - self.crosshair(vert_visible=True, horz_visible=True) if success else None + self.crosshair() if success else None return success async def on_search(self, chart, searched_string): - self.topbar['symbol'].set(searched_string if self._polygon(searched_string) else '') + chart.topbar['symbol'].set(searched_string if await self._polygon(searched_string) else '') async def _on_timeframe_selection(self, chart): - self._polygon(self.topbar['symbol'].value) if self.topbar['symbol'].value else None + await self._polygon(chart.topbar['symbol'].value) if chart.topbar['symbol'].value else None async def _on_security_selection(self, chart): - self.precision(5 if self.topbar['security'].value == 'Forex' else 2) + self.precision(5 if chart.topbar['security'].value == 'Forex' else 2) diff --git a/lightweight_charts/table.py b/lightweight_charts/table.py index 3559fcd..83886e3 100644 --- a/lightweight_charts/table.py +++ b/lightweight_charts/table.py @@ -1,25 +1,28 @@ import random from typing import Union -from .util import jbool +from .util import jbool, Pane, NUM class Footer: - def __init__(self, table): self._table = table + def __init__(self, table): + self._table = table - def __setitem__(self, key, value): self._table._run_script(f'{self._table.id}.footer[{key}].innerText = "{value}"') + def __setitem__(self, key, value): + self._table.run_script(f'{self._table.id}.footer[{key}].innerText = "{value}"') - def __call__(self, number_of_text_boxes): self._table._run_script(f'{self._table.id}.makeFooter({number_of_text_boxes})') + def __call__(self, number_of_text_boxes: int): + self._table.run_script(f'{self._table.id}.makeFooter({number_of_text_boxes})') class Row(dict): def __init__(self, table, id, items): super().__init__() + self.run_script = table.run_script self._table = table - self._run_script = table._run_script self.id = id self.meta = {} - self._run_script(f'''{self._table.id}.newRow({list(items.values())}, '{self.id}')''') + self.run_script(f'{self._table.id}.newRow({list(items.values())}, "{self.id}")') for key, val in items.items(): self[key] = val @@ -29,8 +32,7 @@ class Row(dict): original_value = value if column in self._table._formatters: value = self._table._formatters[column].replace(self._table.VALUE, str(value)) - self._run_script(f'{self._table.id}.updateCell("{self.id}", "{column}", "{value}")') - + self.run_script(f'{self._table.id}.updateCell("{self.id}", "{column}", "{value}")') return super().__setitem__(column, original_value) def background_color(self, column, color): self._style('backgroundColor', column, color) @@ -38,30 +40,29 @@ class Row(dict): def text_color(self, column, color): self._style('textColor', column, color) def _style(self, style, column, arg): - self._run_script(f"{self._table.id}.rows[{self.id}]['{column}'].style.{style} = '{arg}'") + self.run_script(f"{self._table.id}.rows[{self.id}]['{column}'].style.{style} = '{arg}'") def delete(self): - self._run_script(f"{self._table.id}.deleteRow('{self.id}')") + self.run_script(f"{self._table.id}.deleteRow('{self.id}')") self._table.pop(self.id) -class Table(dict): + +class Table(Pane, dict): VALUE = 'CELL__~__VALUE__~__PLACEHOLDER' - def __init__(self, chart, width, height, headings, widths=None, alignments=None, position='left', draggable=False, func=None): - super().__init__() - self._run_script = chart.run_script - self._chart = chart - self.headings = headings + def __init__(self, window, width: NUM, height: NUM, headings: tuple, widths: tuple = None, alignments: tuple = None, position='left', draggable: bool = False, func: callable = None): + dict.__init__(self) + Pane.__init__(self, window) self._formatters = {} + self.headings = headings self.is_shown = True + self.win.handlers[self.id] = lambda rId: func(self[rId]) + headings = list(headings) + widths = list(widths) if widths else [] + alignments = list(alignments) if alignments else [] - self.id = chart._rand.generate() - chart._handlers[self.id] = lambda rId: func(self[rId]) - self._run_script(f''' - {self.id} = new Table({width}, {height}, {list(headings)}, {list(widths) if widths else []}, {list(alignments) if alignments else []}, - '{position}', {jbool(draggable)}, {chart.id}) - ''') - self._run_script(f'{self.id}.callbackName = "{self.id}"') if func else None + self.run_script(f'{self.id} = new Table({width}, {height}, {headings}, {widths}, {alignments}, "{position}", {jbool(draggable)})') + self.run_script(f'{self.id}.callbackName = "{self.id}"') if func else None self.footer = Footer(self) def new_row(self, *values, id=None) -> Row: @@ -69,7 +70,7 @@ class Table(dict): self[row_id] = Row(self, row_id, {heading: item for heading, item in zip(self.headings, values)}) return self[row_id] - def clear(self): self._run_script(f"{self.id}.clearRows()"), super().clear() + def clear(self): self.run_script(f"{self.id}.clearRows()"), super().clear() def get(self, __key: Union[int, str]) -> Row: return super().get(int(__key)) @@ -79,7 +80,7 @@ class Table(dict): def visible(self, visible: bool): self.is_shown = visible - self._run_script(f""" + self.run_script(f""" {self.id}.container.style.display = '{'block' if visible else 'none'}' {self.id}.container.{'add' if visible else 'remove'}EventListener('mousedown', {self.id}.onMouseDown) """) diff --git a/lightweight_charts/toolbox.py b/lightweight_charts/toolbox.py new file mode 100644 index 0000000..1fe4b27 --- /dev/null +++ b/lightweight_charts/toolbox.py @@ -0,0 +1,47 @@ +import json + + +class ToolBox: + def __init__(self, chart): + from lightweight_charts.abstract import JS + self.run_script = chart.run_script + self.id = chart.id + self._save_under = None + self.drawings = {} + chart.win.handlers[f'save_drawings{self.id}'] = self._save_drawings + self.run_script(JS['toolbox']) + self.run_script(f'{self.id}.toolBox = new ToolBox({self.id})') + + def save_drawings_under(self, widget: 'Widget'): + """ + Drawings made on charts will be saved under the widget given. eg `chart.toolbox.save_drawings_under(chart.topbar['symbol'])`. + """ + self._save_under = widget + + def load_drawings(self, tag: str): + """ + Loads and displays the drawings on the chart stored under the tag given. + """ + if not self.drawings.get(tag): + return + self.run_script(f'if ("toolBox" in {self.id}) {self.id}.toolBox.loadDrawings({json.dumps(self.drawings[tag])})') + + def import_drawings(self, file_path): + """ + Imports a list of drawings stored at the given file path. + """ + with open(file_path, 'r') as f: + json_data = json.load(f) + self.drawings = json_data + + def export_drawings(self, file_path): + """ + Exports the current list of drawings to the given file path. + """ + with open(file_path, 'w+') as f: + json.dump(self.drawings, f, indent=4) + + def _save_drawings(self, drawings): + if not self._save_under: + return + self.drawings[self._save_under.value] = json.loads(drawings) diff --git a/lightweight_charts/topbar.py b/lightweight_charts/topbar.py new file mode 100644 index 0000000..c86b35c --- /dev/null +++ b/lightweight_charts/topbar.py @@ -0,0 +1,90 @@ +import asyncio +from typing import Dict + +from .util import jbool, Pane + + +class Widget(Pane): + def __init__(self, topbar, value, func=None): + super().__init__(topbar.win) + self.value = value + + def wrapper(v): + self.value = v + func(topbar._chart) + + async def async_wrapper(v): + self.value = v + await func(topbar._chart) + + self.win.handlers[self.id] = async_wrapper if asyncio.iscoroutinefunction(func) else wrapper + + +class TextWidget(Widget): + def __init__(self, topbar, initial_text): + super().__init__(topbar, value=initial_text) + self.run_script(f'{self.id} = {topbar.id}.makeTextBoxWidget("{initial_text}")') + + def set(self, string): + self.value = string + self.run_script(f'{self.id}.innerText = "{string}"') + + +class SwitcherWidget(Widget): + def __init__(self, topbar, options, default, func): + super().__init__(topbar, value=default, func=func) + self.run_script(f'{self.id} = {topbar.id}.makeSwitcher({list(options)}, "{default}", "{self.id}")') + + +class ButtonWidget(Widget): + def __init__(self, topbar, button, separator, func): + super().__init__(topbar, value=button, func=func) + self.run_script(f'{self.id} = {topbar.id}.makeButton("{button}", "{self.id}", {jbool(separator)})') + + def set(self, string): + self.value = string + self.run_script(f'{self.id}.elem.innerText = "{string}"') + + +class TopBar(Pane): + def __init__(self, chart): + super().__init__(chart.win) + self._chart = chart + self._widgets: Dict[str, Widget] = {} + + self.click_bg_color = '#50565E' + self.hover_bg_color = '#3c434c' + self.active_bg_color = 'rgba(0, 122, 255, 0.7)' + self.active_text_color = '#ececed' + self.text_color = '#d8d9db' + self._created = False + + def _create(self): + if self._created: + return + from lightweight_charts.abstract import JS + self._created = True + self.run_script(JS['callback']) + self.run_script(f''' + {self.id} = new TopBar( {self._chart.id}, '{self.hover_bg_color}', '{self.click_bg_color}', + '{self.active_bg_color}', '{self.text_color}', '{self.active_text_color}') + ''') + + def __getitem__(self, item): + if widget := self._widgets.get(item): + return widget + raise KeyError(f'Topbar widget "{item}" not found.') + + def get(self, widget_name): return self._widgets.get(widget_name) + + def switcher(self, name, options: tuple, default: str = None, func: callable = None): + self._create() + self._widgets[name] = SwitcherWidget(self, options, default if default else options[0], func) + + def textbox(self, name: str, initial_text: str = ''): + self._create() + self._widgets[name] = TextWidget(self, initial_text) + + def button(self, name, button_text: str, separator: bool = True, func: callable = None): + self._create() + self._widgets[name] = ButtonWidget(self, button_text, separator, func) \ No newline at end of file diff --git a/lightweight_charts/util.py b/lightweight_charts/util.py index fbe32b3..6196023 100644 --- a/lightweight_charts/util.py +++ b/lightweight_charts/util.py @@ -1,6 +1,18 @@ import asyncio +from datetime import datetime from random import choices -from typing import Literal +from typing import Literal, Union +import pandas as pd + + +class Pane: + def __init__(self, window): + from lightweight_charts import Window + self.win: Window = window + self.run_script = window.run_script + if hasattr(self, 'id'): + return + self.id = Window._id_gen.generate() class IDGen(list): @@ -14,6 +26,13 @@ class IDGen(list): self.generate() +def parse_event_message(window, string): + name, args = string.split('_~_') + args = args.split(';;;') + func = window.handlers[name] + return func, args + + def jbool(b: bool): return 'true' if b is True else 'false' if b is False else None @@ -27,6 +46,12 @@ CROSSHAIR_MODE = Literal['normal', 'magnet'] PRICE_SCALE_MODE = Literal['normal', 'logarithmic', 'percentage', 'index100'] +TIME = Union[datetime, pd.Timestamp, str] + +NUM = Union[float, int] + +FLOAT = Literal['left', 'right', 'top', 'bottom'] + def line_style(line: LINE_STYLE): js = 'LightweightCharts.LineStyle.' @@ -65,6 +90,7 @@ class Emitter: def _emit(self, *args): self._callable(*args) if self._callable else None + class JSEmitter: def __init__(self, chart, name, on_iadd, wrapper=None): self._on_iadd = on_iadd @@ -78,7 +104,7 @@ class JSEmitter: async def final_async_wrapper(*arg): await other(self._chart, *arg) if not self._wrapper else await self._wrapper(other, self._chart, *arg) - self._chart._handlers[self._name] = final_async_wrapper if asyncio.iscoroutinefunction(other) else final_wrapper + self._chart.win.handlers[self._name] = final_async_wrapper if asyncio.iscoroutinefunction(other) else final_wrapper self._on_iadd(other) return self @@ -89,7 +115,7 @@ class Events: from lightweight_charts.abstract import JS self.search = JSEmitter(chart, f'search{chart.id}', lambda o: chart.run_script(f''' - {JS['callback'] if not chart._callbacks_enabled else ''} + {JS['callback']} makeSpinner({chart.id}) {chart.id}.search = makeSearchBox({chart.id}) ''') diff --git a/lightweight_charts/widgets.py b/lightweight_charts/widgets.py index 2321e68..29143c9 100644 --- a/lightweight_charts/widgets.py +++ b/lightweight_charts/widgets.py @@ -1,97 +1,85 @@ import asyncio +from .util import parse_event_message +from lightweight_charts import abstract + try: import wx.html2 except ImportError: wx = None + try: from PyQt5.QtWebEngineWidgets import QWebEngineView from PyQt5.QtWebChannel import QWebChannel - from PyQt5.QtCore import QObject, pyqtSlot - - class Bridge(QObject): - def __init__(self, chart): - super().__init__() - self.chart = chart - - @pyqtSlot(str) - def callback(self, message): - _widget_message(self.chart, message) + from PyQt5.QtCore import QObject, pyqtSlot as Slot except ImportError: try: from PySide6.QtWebEngineWidgets import QWebEngineView from PySide6.QtWebChannel import QWebChannel from PySide6.QtCore import QObject, Slot - - class Bridge(QObject): - def __init__(self, chart): - super().__init__() - self.chart = chart - - @Slot(str) - def callback(self, message): - _widget_message(self.chart, message) except ImportError: QWebEngineView = None + +if QWebEngineView: + class Bridge(QObject): + def __init__(self, chart): + super().__init__() + self.chart = chart + + @Slot(str) + def callback(self, message): + emit_callback(self.chart, message) + try: from streamlit.components.v1 import html except ImportError: html = None + try: from IPython.display import HTML, display except ImportError: HTML = None -from lightweight_charts.abstract import LWC, JS - -def _widget_message(chart, string): - name, args = string.split('_~_') - args = args.split(';;;') - func = chart._handlers[name] +def emit_callback(window, string): + func, args = parse_event_message(window, string) asyncio.create_task(func(*args)) if asyncio.iscoroutinefunction(func) else func(*args) -class WxChart(LWC): +class WxChart(abstract.AbstractChart): def __init__(self, parent, inner_width: float = 1.0, inner_height: float = 1.0, scale_candles_only: bool = False, toolbox: bool = False): if wx is None: raise ModuleNotFoundError('wx.html2 was not found, and must be installed to use WxChart.') self.webview: wx.html2.WebView = wx.html2.WebView.New(parent) + super().__init__(abstract.Window(self.webview.RunScript, 'window.wx_msg.postMessage.bind(window.wx_msg)'), + inner_width, inner_height, scale_candles_only, toolbox) - super().__init__(inner_width=inner_width, inner_height=inner_height, - scale_candles_only=scale_candles_only, toolbox=toolbox, - _js_api_code='window.wx_msg.postMessage.bind(window.wx_msg)') - self._script_func = self.webview.RunScript - - self.webview.Bind(wx.html2.EVT_WEBVIEW_LOADED, lambda e: wx.CallLater(500, self._on_js_load)) - self.webview.Bind(wx.html2.EVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED, lambda e: _widget_message(self, e.GetString())) + self.webview.Bind(wx.html2.EVT_WEBVIEW_LOADED, lambda e: wx.CallLater(500, self.win.on_js_load)) + self.webview.Bind(wx.html2.EVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED, lambda e: emit_callback(self, e.GetString())) self.webview.AddScriptMessageHandler('wx_msg') - self.webview.SetPage(self._html, '') - self.webview.AddUserScript(JS['toolbox']) if toolbox else None + self.webview.SetPage(abstract.TEMPLATE, '') + self.webview.AddUserScript(abstract.JS['toolbox']) if toolbox else None def get_webview(self): return self.webview -class QtChart(LWC): +class QtChart(abstract.AbstractChart): def __init__(self, widget=None, inner_width: float = 1.0, inner_height: float = 1.0, scale_candles_only: bool = False, toolbox: bool = False): if QWebEngineView is None: raise ModuleNotFoundError('QWebEngineView was not found, and must be installed to use QtChart.') self.webview = QWebEngineView(widget) - - super().__init__(inner_width=inner_width, inner_height=inner_height, - scale_candles_only=scale_candles_only, toolbox=toolbox, - _js_api_code='window.pythonObject.callback') - self._script_func = self.webview.page().runJavaScript + super().__init__(abstract.Window(self.webview.page().runJavaScript, 'window.pythonObject.callback'), + inner_width, inner_height, scale_candles_only, toolbox) self.web_channel = QWebChannel() self.bridge = Bridge(self) self.web_channel.registerObject('bridge', self.bridge) self.webview.page().setWebChannel(self.web_channel) - self.webview.loadFinished.connect(self._on_js_load) + self.webview.loadFinished.connect(self.win.on_js_load) self._html = f''' - {self._html[:85]} + {abstract.TEMPLATE[:85]} - {self._html[85:]} + {abstract.TEMPLATE[85:]} ''' self.webview.page().setHtml(self._html) def get_webview(self): return self.webview -class StaticLWC(LWC): +class StaticLWC(abstract.AbstractChart): def __init__(self, width=None, height=None, inner_width=1, inner_height=1, scale_candles_only: bool = False, toolbox=False, autosize=True): - super().__init__(inner_width, inner_height, scale_candles_only=scale_candles_only, toolbox=toolbox, autosize=autosize) + self._html = abstract.TEMPLATE.replace('\n\n', '') + super().__init__(abstract.Window(run_script=self.run_script), inner_width, inner_height, + scale_candles_only, toolbox, autosize) self.width = width self.height = height - self._html = self._html.replace('\n\n', '') def run_script(self, script, run_last=False): if run_last: - self._final_scripts.append(script) + self.win.final_scripts.append(script) else: self._html += '\n' + script def load(self): - if self.loaded: + if self.win.loaded: return - self.loaded = True - for script in self._final_scripts: + self.win.loaded = True + for script in self.win.final_scripts: self._html += '\n' + script self._load() @@ -143,8 +132,7 @@ class StreamlitChart(StaticLWC): class JupyterChart(StaticLWC): def __init__(self, width: int = 800, height=350, inner_width=1, inner_height=1, scale_candles_only: bool = False, toolbox: bool = False): - super().__init__(width, height, inner_width, inner_height, scale_candles_only, toolbox, autosize=False) - self._position = "" + super().__init__(width, height, inner_width, inner_height, scale_candles_only, toolbox, False) self.run_script(f''' for (var i = 0; i < document.getElementsByClassName("tv-lightweight-charts").length; i++) {{ diff --git a/setup.py b/setup.py index 681084a..ad5db66 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open('README.md', 'r', encoding='utf-8') as f: setup( name='lightweight_charts', - version='1.0.16', + version='1.0.17', packages=find_packages(), python_requires='>=3.8', install_requires=[
+ + + + + + +
+
+
pip install lightweight-charts
+
+
+ + + + + + + +
+ + +
+
import pandas as pd
+from lightweight_charts import Chart
+
+
+if __name__ == '__main__':
+
+    chart = Chart(toolbox=True)
+
+    df = pd.read_csv('ohlcv.csv')
+    chart.set(df)
+
+    chart.show(block=True)
+
+
+
+
+ + + + + + + + +
+ + + + + +
+ + + +
+ + +