From da225e3d52c455fb37cc147950368993e0b234cd Mon Sep 17 00:00:00 2001 From: Tim Wijma Date: Mon, 31 Oct 2022 17:37:59 +0100 Subject: [PATCH] main layout and template --- __pycache__/dashboard.cpython-310.pyc | Bin 0 -> 1020 bytes dashboard_static/index.html | 78 ++--- dashboard_static/js/code.js | 0 dashboard_static/style/grid.css | 374 --------------------- dashboard_static/style/layout.css | 69 ---- dashboard_static/style/style.css | 11 + dashboard_static/style/theme.css | 160 --------- dashboard_static/style/wordcloud.css | 49 --- eca/__pycache__/__init__.cpython-310.pyc | Bin 9908 -> 9890 bytes eca/__pycache__/arff.cpython-310.pyc | Bin 0 -> 10596 bytes eca/__pycache__/generators.cpython-310.pyc | Bin 0 -> 3899 bytes eca/__pycache__/http.cpython-310.pyc | Bin 4738 -> 4720 bytes eca/__pycache__/httpd.cpython-310.pyc | Bin 11367 -> 11349 bytes eca/__pycache__/pubsub.cpython-310.pyc | Bin 2107 -> 2089 bytes eca/__pycache__/sessions.cpython-310.pyc | Bin 4038 -> 4020 bytes eca/__pycache__/sse.cpython-310.pyc | Bin 2289 -> 2271 bytes eca/__pycache__/util.cpython-310.pyc | Bin 1635 -> 1617 bytes 17 files changed, 44 insertions(+), 697 deletions(-) create mode 100644 __pycache__/dashboard.cpython-310.pyc create mode 100644 dashboard_static/js/code.js delete mode 100644 dashboard_static/style/grid.css delete mode 100644 dashboard_static/style/layout.css create mode 100644 dashboard_static/style/style.css delete mode 100644 dashboard_static/style/theme.css delete mode 100644 dashboard_static/style/wordcloud.css create mode 100644 eca/__pycache__/arff.cpython-310.pyc create mode 100644 eca/__pycache__/generators.cpython-310.pyc diff --git a/__pycache__/dashboard.cpython-310.pyc b/__pycache__/dashboard.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd973cdd37e0bbb6a16314041c882ca7213b8677 GIT binary patch literal 1020 zcmZ8f&2H2{3?5H@Hr;l&Eh>cr5=ESXM5S^;LI{w`vGf95qLrc{GhI@WOf=(k3tGfs z5w|`7h!^N9&6QJMfI|-mPZkj1XdK(g*q`lBk48gA^67hCdAqXo!V4nDF4WU)--%14$BC_be4s$A>ii42~zbaX)( zSqcvBklL~+4Ceais45$k<4h^EhuMY{_Vp_*jLhi=EDINwO^F5fcYleu2|C-SW4B2m z!IWGEXC7WSXE{hl1*5}vtG3k!?cOe)qKmDl+e)R74b_QiFmFVy3{ZlU8{fB!3f(oB zau*bM>Oh?{vqJI9NBa*ZFRe0mf@M7`Cr@?J)s(?bo@v=tYG-ePvl3C6yRFg3s=&#g zK6cx;F0u-{c0{SH2foIKU{=W}eAVCL?TAj_)&?2K<_uvDbH1R58iGR)trn-G$|en5 zROy*AE;03$z*0A6oi1ldYt%`pJ3IaI*~|H3A{!;E#M?ABzC#zPx-4MLA~oh?xB)RF5QZE$BtN!ebCW)#D=tul z$i}30f8Ex`E=d;~(MVmpO`|pDg>KMuvlaN-MLkb@sw~&$ll=w9lhgEDP9D}h6Ce38 V+AE|Iwgw3g!#Em3GKhmQ`~ - + -Neca Test - - - - - - - + + + + Twitter sports dashboard + + + + - -

ECA Dashboard Template

- -
-

This is the dashboard template file. The easiest way to get started is to think up a simple name (let's say we take 'dashboard'). Now copy template.py to {name}.py start a new module (so that's dashboard.py) and copy template_static to {name}_static. -

Now you can run the new project with:

python neca.py -s {name}.py
-

Further documentation on the ECA system can be found at github.com/utwente-db/eca/wiki, and demos can be found in the demos/ directory. -

-
-

In the sample template.py (which comes with the dashboard you're looking at right now), you will find the rules that power this example. -

Rules are written in Python and work as follows: -

@event("foo")
-def action(context, event):
-    print("Event " + event.name + "!")
-
-The @event part tells the system to fire the action whenever the event 'foo' occurs. The def action(context, event): part defines a new action that takes two arguments: the context and the event. The rest of the code is the action body. -
- -
- -
-

The graph to the right is continuously filled with data generated by the rules. -

In template.py you can see that an event called 'sample' is fired again and again to create new data points for the graph. -

These points are then sent to the browser with: -

emit('sample',{
-    'action': 'add',
-    'value': sample
-})
- -
-
- - --> + \ No newline at end of file diff --git a/dashboard_static/js/code.js b/dashboard_static/js/code.js new file mode 100644 index 0000000..e69de29 diff --git a/dashboard_static/style/grid.css b/dashboard_static/style/grid.css deleted file mode 100644 index 878d70e..0000000 --- a/dashboard_static/style/grid.css +++ /dev/null @@ -1,374 +0,0 @@ -/* - Variable Grid System. - Learn more ~ http://www.spry-soft.com/grids/ - Based on 960 Grid System - http://960.gs/ - - Licensed under GPL and MIT. -*/ - -/* - Forces backgrounds to span full width, - even if there is horizontal scrolling. - Increase this if your layout is wider. - - Note: IE6 works fine without this fix. -*/ - -body { - min-width: 960px; -} - -/* Containers -----------------------------------------------------------------------------------------------------*/ -.container_12 { - margin-left: auto; - margin-right: auto; - width: 960px; -} - -/* Grid >> Global -----------------------------------------------------------------------------------------------------*/ - - -.grid_1, -.grid_2, -.grid_3, -.grid_4, -.grid_5, -.grid_6, -.grid_7, -.grid_8, -.grid_9, -.grid_10, -.grid_11, -.grid_12 { - display:inline; - float: left; - position: relative; - margin-left: 10px; - margin-right: 10px; -} - - - -.push_1, .pull_1, -.push_2, .pull_2, -.push_3, .pull_3, -.push_4, .pull_4, -.push_5, .pull_5, -.push_6, .pull_6, -.push_7, .pull_7, -.push_8, .pull_8, -.push_9, .pull_9, -.push_10, .pull_10, -.push_11, .pull_11, -.push_12, .pull_12 { - position:relative; -} - - -/* Grid >> Children (Alpha ~ First, Omega ~ Last) -----------------------------------------------------------------------------------------------------*/ - -.alpha { - margin-left: 0; -} - -.omega { - margin-right: 0; -} - -/* Grid >> 12 Columns -----------------------------------------------------------------------------------------------------*/ - - -.container_12 .grid_1 { - width:60px; -} - -.container_12 .grid_2 { - width:140px; -} - -.container_12 .grid_3 { - width:220px; -} - -.container_12 .grid_4 { - width:300px; -} - -.container_12 .grid_5 { - width:380px; -} - -.container_12 .grid_6 { - width:460px; -} - -.container_12 .grid_7 { - width:540px; -} - -.container_12 .grid_8 { - width:620px; -} - -.container_12 .grid_9 { - width:700px; -} - -.container_12 .grid_10 { - width:780px; -} - -.container_12 .grid_11 { - width:860px; -} - -.container_12 .grid_12 { - width:940px; -} - - - - -/* Prefix Extra Space >> 12 Columns -----------------------------------------------------------------------------------------------------*/ - - -.container_12 .prefix_1 { - padding-left:80px; -} - -.container_12 .prefix_2 { - padding-left:160px; -} - -.container_12 .prefix_3 { - padding-left:240px; -} - -.container_12 .prefix_4 { - padding-left:320px; -} - -.container_12 .prefix_5 { - padding-left:400px; -} - -.container_12 .prefix_6 { - padding-left:480px; -} - -.container_12 .prefix_7 { - padding-left:560px; -} - -.container_12 .prefix_8 { - padding-left:640px; -} - -.container_12 .prefix_9 { - padding-left:720px; -} - -.container_12 .prefix_10 { - padding-left:800px; -} - -.container_12 .prefix_11 { - padding-left:880px; -} - - - -/* Suffix Extra Space >> 12 Columns -----------------------------------------------------------------------------------------------------*/ - - -.container_12 .suffix_1 { - padding-right:80px; -} - -.container_12 .suffix_2 { - padding-right:160px; -} - -.container_12 .suffix_3 { - padding-right:240px; -} - -.container_12 .suffix_4 { - padding-right:320px; -} - -.container_12 .suffix_5 { - padding-right:400px; -} - -.container_12 .suffix_6 { - padding-right:480px; -} - -.container_12 .suffix_7 { - padding-right:560px; -} - -.container_12 .suffix_8 { - padding-right:640px; -} - -.container_12 .suffix_9 { - padding-right:720px; -} - -.container_12 .suffix_10 { - padding-right:800px; -} - -.container_12 .suffix_11 { - padding-right:880px; -} - - - -/* Push Space >> 12 Columns -----------------------------------------------------------------------------------------------------*/ - - -.container_12 .push_1 { - left:80px; -} - -.container_12 .push_2 { - left:160px; -} - -.container_12 .push_3 { - left:240px; -} - -.container_12 .push_4 { - left:320px; -} - -.container_12 .push_5 { - left:400px; -} - -.container_12 .push_6 { - left:480px; -} - -.container_12 .push_7 { - left:560px; -} - -.container_12 .push_8 { - left:640px; -} - -.container_12 .push_9 { - left:720px; -} - -.container_12 .push_10 { - left:800px; -} - -.container_12 .push_11 { - left:880px; -} - - - -/* Pull Space >> 12 Columns -----------------------------------------------------------------------------------------------------*/ - - -.container_12 .pull_1 { - left:-80px; -} - -.container_12 .pull_2 { - left:-160px; -} - -.container_12 .pull_3 { - left:-240px; -} - -.container_12 .pull_4 { - left:-320px; -} - -.container_12 .pull_5 { - left:-400px; -} - -.container_12 .pull_6 { - left:-480px; -} - -.container_12 .pull_7 { - left:-560px; -} - -.container_12 .pull_8 { - left:-640px; -} - -.container_12 .pull_9 { - left:-720px; -} - -.container_12 .pull_10 { - left:-800px; -} - -.container_12 .pull_11 { - left:-880px; -} - - - - -/* `Clear Floated Elements -----------------------------------------------------------------------------------------------------*/ - -/* http://sonspring.com/journal/clearing-floats */ - -.clear { - clear: both; - display: block; - overflow: hidden; - visibility: hidden; - width: 0; - height: 0; -} - -/* http://www.yuiblog.com/blog/2010/09/27/clearfix-reloaded-overflowhidden-demystified */ - -.clearfix:before, -.clearfix:after { - content: '\0020'; - display: block; - overflow: hidden; - visibility: hidden; - width: 0; - height: 0; -} - -.clearfix:after { - clear: both; -} - -/* - The following zoom:1 rule is specifically for IE6 + IE7. - Move to separate stylesheet if invalid CSS is a problem. -*/ - -.clearfix { - zoom: 1; -} diff --git a/dashboard_static/style/layout.css b/dashboard_static/style/layout.css deleted file mode 100644 index 2fec0b4..0000000 --- a/dashboard_static/style/layout.css +++ /dev/null @@ -1,69 +0,0 @@ -/* -** Base layout: -** Grid layout + vertical sizing classes sized to match -*/ - -/* Grid layout based on (http://960.gs/) */ -@import url(grid.css); - -/* Vertical classes */ - -.grid_1, .vert_1, -.grid_2, .vert_2, -.grid_3, .vert_3, -.grid_4, .vert_4, -.grid_5, .vert_5, -.grid_6, .vert_6, -.grid_7, .vert_7, -.grid_8, .vert_8, -.grid_9, .vert_9, -.grid_10, .vert_10, -.grid_11, .vert_11, -.grid_12, .vert_12 { - margin-top: 10px; - margin-bottom: 10px; -} - - -.container_12 .vert_1 { height:60px; } -.container_12 .vert_2 { height:140px; } -.container_12 .vert_3 { height:220px; } -.container_12 .vert_4 { height:300px; } -.container_12 .vert_5 { height:380px; } -.container_12 .vert_6 { height:460px; } -.container_12 .vert_7 { height:540px; } -.container_12 .vert_8 { height:620px; } -.container_12 .vert_9 { height:700px; } -.container_12 .vert_10 { height:780px; } -.container_12 .vert_11 { height:860px; } -.container_12 .vert_12 { height:940px; } - - -/* Layout details */ - -p:first-child { - margin-top: 0; -} - - -/* Log block */ - -.block.log { - overflow: auto; -} - - -/* Tweets block */ - -.tweet-list * { - margin: 0; - padding: 0; -} - -.tweet-list.stream-items { - margin: 0; - padding: 0; - overflow: auto; - width: 100%; - height: 100%; -} diff --git a/dashboard_static/style/style.css b/dashboard_static/style/style.css new file mode 100644 index 0000000..6b545ed --- /dev/null +++ b/dashboard_static/style/style.css @@ -0,0 +1,11 @@ +body, html, .container { + width: 100%; + height: 100%; + margin: 0; + padding: 0; +} + +.container { + background-color: #292929; + color: white; +} \ No newline at end of file diff --git a/dashboard_static/style/theme.css b/dashboard_static/style/theme.css deleted file mode 100644 index 0dfc462..0000000 --- a/dashboard_static/style/theme.css +++ /dev/null @@ -1,160 +0,0 @@ -/* Basic style & theme*/ -body { - font-family: sans-serif; -} - -p { - text-align: justify; -} - -code { - background-color: #eee; - border: 1px solid #ddd; - border-radius: 2px; - padding: 0 0.2em; -} - -pre { - padding: 0.5em 1.5em; - background-color: #eee; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -/* Devevlopment helpers */ - -.debug_red { background-color: rgba(255,0,0,0.5); } -.debug_green { background-color: rgba(0,255,0,0.5); } -.debug_blue { background-color: rgba(0,0,255,0.5); } - - -/* Tweets block */ - -.tweet-list.stream-items { - position: relative; - background-color: #fff; - list-style: none; - color: #333; - font-size: 14px; - line-height: 18px; - font-family: arial, sans-serif; - border: 1px solid rgba(0, 0, 0, 0.1); -} - -.tweet-list .stream-item { - background: #fff; - background-clip: padding-box; -} - -.tweet-list .stream-item:hover { - background-color: #eee; -} - -.tweet-list li.stream-item { - line-height: inherit -} - -.tweet-list .tweet { - position: relative; - min-height: 51px; - padding: 9px 12px; -} - -.tweet-list .stream-item + .stream-item { - border-top: 1px solid rgba(0, 0, 0, 0.1); -} - -.tweet-list .tweet p { - word-wrap: break-word -} - -.tweet-list .tweet .details { - display: inline-block; - margin-right: 2px -} - -.tweet-list .tweet .context a { - color: #999 -} - -.tweet-list .stream-item .content { - margin-left: 58px -} - -.tweet-list .stream-item-header .avatar { - float: left; - margin-top: 3px; - margin-left: -58px -} -.tweet-list .account-group { - color: #999 -} - -.tweet-list a { - color: #0084b4; - text-decoration: none -} - -.tweet-list a:focus { - outline: 0 -} - -.tweet-list a:hover, -.tweet-list a:focus { - color: #0084b4; - text-decoration: underline -} - -.tweet-list a.account-group:hover, -.tweet-list a.account-group:focus { - text-decoration: none; -} - -.tweet-list a.account-group:hover .fullname, -.tweet-list a.account-group:focus .fullname { - text-decoration: underline; -} - -.tweet-list .avatar { - width: 48px; - height: 48px; - border-radius: 5px; - -moz-force-broken-image-icon: 1 -} - -.tweet-list .fullname { - font-weight: bold; - color: #333; -} - -.tweet-list .username { - font-size: 12px; - color: #999 -} - -.tweet-list .username s { - color: #bbb -} - -.tweet-list s { - text-decoration: none -} - -.tweet-list b { - font-weight: normal -} - -.tweet-list .tweet .time { - position: relative; - float: right; - margin-top: 1px; - color: #bbb -} - -.tweet-list .tweet-timestamp { - color: #999 -} - -.tweet-list .tweet .tweet-text { - white-space: pre-wrap -} diff --git a/dashboard_static/style/wordcloud.css b/dashboard_static/style/wordcloud.css deleted file mode 100644 index 74c976a..0000000 --- a/dashboard_static/style/wordcloud.css +++ /dev/null @@ -1,49 +0,0 @@ -/* fonts */ - -div.jqcloud { - font-family: "Helvetica", "Arial", sans-serif; - font-size: 10px; - line-height: normal; -} - -div.jqcloud a { - font-size: inherit; - text-decoration: none; -} - -div.jqcloud span.w10 { font-size: 550%; } -div.jqcloud span.w9 { font-size: 500%; } -div.jqcloud span.w8 { font-size: 450%; } -div.jqcloud span.w7 { font-size: 400%; } -div.jqcloud span.w6 { font-size: 350%; } -div.jqcloud span.w5 { font-size: 300%; } -div.jqcloud span.w4 { font-size: 250%; } -div.jqcloud span.w3 { font-size: 200%; } -div.jqcloud span.w2 { font-size: 150%; } -div.jqcloud span.w1 { font-size: 100%; } - -/* colors */ - -div.jqcloud { color: #09f; } -div.jqcloud a { color: inherit; } -div.jqcloud a:hover { color: #0df; } -div.jqcloud a:hover { color: #0cf; } -div.jqcloud span.w10 { color: #0cf; } -div.jqcloud span.w9 { color: #0cf; } -div.jqcloud span.w8 { color: #0cf; } -div.jqcloud span.w7 { color: #39d; } -div.jqcloud span.w6 { color: #90c5f0; } -div.jqcloud span.w5 { color: #90a0dd; } -div.jqcloud span.w4 { color: #90c5f0; } -div.jqcloud span.w3 { color: #a0ddff; } -div.jqcloud span.w2 { color: #99ccee; } -div.jqcloud span.w1 { color: #aab5f0; } - -/* layout */ - -div.jqcloud { - overflow: hidden; - position: relative; -} - -div.jqcloud span { padding: 0; } diff --git a/eca/__pycache__/__init__.cpython-310.pyc b/eca/__pycache__/__init__.cpython-310.pyc index fbcc8415b0362544e7933d09c99abc3bd18779f0..680cfe4bdabadbf6abdf7c86f3ad7a44bbc270c2 100644 GIT binary patch delta 84 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 literal 0 HcmV?d00001 diff --git a/eca/__pycache__/generators.cpython-310.pyc b/eca/__pycache__/generators.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01498c6c8ba1f70d9813f18b01d362c22d8e231b GIT binary patch literal 3899 zcmZ`+TaO$^6|U;bbWhJ^$Cuc-7}7~t$7AqCtd(YWUWiJ&l1H|I^ZuT%yeDt^i#ogW0R}6SLBL+s&sqS ziRCC&y)AuG@Xb^zF5+bPX_}>p*wyt#7l=BE==Xbg#o=e6j_<-OC#ZtRVid$~qTs-s z!(3K-LL!%W%!hByuume7HGt`sZr}Wb=js;ExkywY##=!M&kysE<9xU|UkHbi%P^Tw zq(vU~hj~w7M-}sFULBKRUlapFDam(35SWWR$wFBSMUStT1?{R4=c?x%lE;O<1@DjH zmFJ-;X-Q&I+R)O{g4QY>Xl><8-F*VR8YAoEIbG{|+MDY(Fs#RUGT^$t5J0yV-8d1O zQrFd%;0a6fP3;;b=(<$JPTbFuO*ES1Szok(2?35sL>n4idoaSY&xtq#!~a~rzPj-< z$%WhibC1%E8%1w80JX`D4+}QTczAh3fqg;xOFN?2<~_B+d&$Ov5xKIntNl1m^Hjz0 zNgyfF{cE)PwdwfmQS+?K_x8}W<`1e2J>fdM@^xqw*#^aJgC~4OC$ywfd!K-dTVQc} zeATEQt-P)hq0p$6CeV&sNzQ<8F$Ak_rE+f9LR3b>Q{ap>I0)Xn)^)@QxK7vZ7*%Q; z&S_U7*{&r{o281j(O1=+g=ujPn%Cf!X#Td-q~p`aBsElyh>0Sjs76dQ2Z%_f)QE-% zw8obgqJ6|44!H#3cT;dv;~S%S2ur0WJL9J233O7Si9&KPet?upmE>xk9M|YfIEk-s7ke zjwqKa!Q$v0wEBRnt%8L+i8P>}2Lterqa;ULX>ThWrCAo<=RjBCC3nP-FUY0+V@Kpx zG0a#9kQk&n#L1QL_F%wS3f;vd#uVTpFH|UiR|uZ$!2QN&KN{vap!Rr#TI<$zEh{!R zxzH}-_lKLJ2C6>>&v&l9G^Vq z0^s-%`b7iwb$x_1MxQv=K^zZED1d%5jvo$_Y_{UXF)Mm;EMA2(1`py*?BSh<_`otO;Cs@o$@uBf%7riG06w zk^CIYdAm6!lQt#ej`F8<)|dt*q+)~*?z#(358w7L+PPbOM|4EWR@r3DD+K6PG=6u4 zMhj@r66pZ<6n4#NJbdqfhH6ZkK&AZ}VN3hgWT~vnKa@+8dI`N($)rU4Ll|5dP~C2*aLkXZ)D~&QJUOEX@HA zm>>ZHJ6W)fl0$qVkG?(B6YtIg9I`R0~o5U@bc`?4i_QP_*Mu3eI5kN$wTNj zm&sm|!D&c^8P+Ues`vl`LI}^1n1<2UgBL+$a&r~arq(k8KkE&$Z=qtJL9&^RX%ljD z*IFCDbAy8f$ZD8FEihy8(L{z9u)(XlkV-5=Ef;1wfpPzkS_A&?-76EX2al*xD$#@|g>uQ(5Gz;iE}cyP$KCj4vKL zSM7vQ`)IQIXc8Vi5(PaV08SMrYJ7G%377AO%Pd^}(dzPttIO-*@;F?+*Im+1vBPsw z2d=b}6$#VMHr%RR>`U#Sv2|-5vgd7x_r`!a_&CXi{H73Ku@Dcs-1IL%U!cadFO}Fq z!|IkQRFZ*`p|S&dZZ9h&@1Ce^Uq=YUhyig4jzx9ULp5GOTHnFRnJ2K>Djv}ewoyGx zq>9ZoE&>JE#gB>LQD8I{o9&cGfl-y&EV@YBnE9L7!^o`LN3Hrjn3EgOSdTmPrqgj8 z%YnQR&^CM>>ch{n0_a(^2|pj!I`H!!TmSWK=W&~!##tD3Ts-MpaKgrl(1H&7+*I6Q6GjE`DK!tPn6jn?=&XkXldIj9ESg%1{ms9A9n=T22Mu7kc}JXCxiruD3d zKnbck!*Fc)G=T816v00iw%mn38&EF)#MCAN^RaRLL*n7(UzPN=f2ArPK0y3SEERm> S8>cyETAv1X+X~LNul)}v2+!I8 literal 0 HcmV?d00001 diff --git a/eca/__pycache__/http.cpython-310.pyc b/eca/__pycache__/http.cpython-310.pyc index 5fb9f1dd4c322d01ff183fc468e43e8324b908b7..0d3ed988967c372cf8cb75c19e9c90a32b73ed59 100644 GIT binary patch delta 84 zcmZot{h-2^&&$ij00j0A;*-mSHu5PkncF&B#e^2878S>oWagG<#<=7sm*%GCl@!PL m=BJeAq$(K3l$2+dl%y8v78K=Yr6!leq$VfEY_4SD6aWBd*c@sA delta 102 zcmeyM(xl3l&&$ij00iY*!;{|&Zsb#9^7PjaElw>e*3Zw$EK4oQ$V)8IcS$YIF3B&@ z4=pKA%_~XOk4#N0GSv6YPbtkwHPkOD&nziPEz&J0%FjwoF40d-P6Xr4=}epg0Lii< AzW@LL diff --git a/eca/__pycache__/httpd.cpython-310.pyc b/eca/__pycache__/httpd.cpython-310.pyc index 81aa9a156b3c71fe118c54a34f25b14de46a3e1d..8f5eeb1f461b979aa83deb8f4c9cd5eb19e07cb8 100644 GIT binary patch delta 1470 zcmZuwOKekD5X~hIV-jpX$JivsgxYZeFCmC1k(!v0q$QzELrBA?4d7sm^8&6Mn_j=f zN%-}%0STc>BekrM*i`DG3*@R&E2M7Nbkki`)s^_D3l^=acF_&$f;nSoQq^y9-rSkF zXFhl4>CBHa-h#)|P{-f!<5cE$*FEnyn_e9{m`I)|+Pau@vJ0hbaYKVHw{#vF0-86k{o(?wCS7uvnmuKdGqO|#YnvjUKLA#O4foeYU z{&U+7LR@cqy=r^pj~inw(mr>v9BEosO>gkYs@LPNhX8NV=Yii`6A;Jgv#pD6nzrzRW>~cKixYE|8syaAjrV|$ndYC z=Cuu-4`2f3>F4bek+Upv$ruhD1;|bDvS}o8uTeNfIYs|O+SOa-*pBa1V-mgvK#G2E z4XfGmrk&4J5Ixby0Xcv)QBx=y=bSMcN1{{eV);&VY(2wS`Xd&0Nuc+|E86yPuP_M- z-m~K2NnNs2^95}$abpL;?g2=uQqU6p)Yd)r4wUZ#W&kGv^?)>>1+X0;xob!cU=gqc zIL$!Qp`bcLsd$v}!}v|^wYNQ_mg$KV;5Qg(kB4i;kq|yO1xw7*s_N>BE*9K%hT2lE zOH8$c?zdkL{<}9{sEX@CIzN}Qd3pF=0AtX}_q1$~|4=sP&|QCwhC4Q{+k;j1da-Ta zcldc#e(C7>znS?OFj0Gij|O%n8WXrEEt7B)m-yU`G&itds8tUF+Inv_rz4hI*Q!%y z^)jerU_qj#Y_&pv?rKph<%Zn>wGF{|ww7Vu2e1Hx)MtJA(smUZaS%>PN{!Or*6GMK zm|jq^0Wm}h1rIo_Et(S^fCw0s&FFU2x)U;Ez zi;kT-Z)f#zYO<8Ctk}aTr&@3vTMw=3(wlb9N!huq{A+(VUvaD1+GWp^N{!IF-cI_! z8*(4waGOE8W%}uRZ+OSxGJDh^>NQ7p&dX+)&tq1AJ~aDwbU&K^arXI!J4Tr+xl6b3 zN523_)0A(q>m`Vf+FsnYed~)E$5^B<_gJ;v9UH3SIG>U(eG+y*-~_$j`K$Y7h$rdB zo=Wr-#8()ShCa=ox>3#QqTap%+ZhU3QFWG+{dD9xC?t`?kj4N<0FuB_NaFyBCls&Z zI8__+-&bms+5$P1q1C`|YMvIm@36)UzNIeG)!;#ur@O%i2j+1<3kU)%25!J2f9mRz z&O_$~m;jr;?l~1&V3BLYoOJ{so^mTs2SQt|!YRtr^h+qNCTiy1FI4Ls?iK+TsU8lh z`P%Q{Kb3_h=+^+t0O{Hq8Ic(0oQy20Qtf7B{88@(`Y9T8OORFiD|)+E7{nQatGDyI zt=kKiO4{ay;}LH4b*c(|)i*RgjR>y;&H-isEn&Rwmj@$h7$3Z)hLY&W#R#AoqfWpsj2K{p{2=C zZ7#jeLH5!o@%PdrU_`W!Ro%UmE#_BjordnQC|HbsX3_FCe8&qb4&Cxa>ALp`^Is1A zHayex(Y_czjc@i14?S*bz>IAh6lO{!p6^92+rb;9u}RkxkyxW*Wpm$wv#jqXYF8U{ zKhf>pU~O&}eb*HrYyTfz(p#67UOo+nBp^-ErDXa0InpqiX-?wMKPFXo)H;GKR~D@^IpskI!JD*a=M3<7zS53=Mr!X$+hnlT;=3 zLBH)TMDp&S^Bx3=!IEDYKCS8SK)F?NlJ!4NpAYPh&#`&dGqt4cY`#!@W3sR@QPdZ} Rh&UR(WzS5!i=G;M_8-RqE!qG8 diff --git a/eca/__pycache__/pubsub.cpython-310.pyc b/eca/__pycache__/pubsub.cpython-310.pyc index d7147d23e1886a4e92b9d992f0b94857c5d20884..fc16216fcb93361ee211b21b5d82d91a0366cd2d 100644 GIT binary patch delta 84 zcmdljuu_08pO=@50SN3L#3xI#ZRGQ0GPifOiU}=FEh>&F$;>U!jB&|NF3nBND=Cig m%}*)KNmVe6DJjn^DM>BTEhx&*N=+__Nli|S*}Q;hHY)%~0vw?L delta 102 zcmZ1}uv>sHpO=@50SL;sh9^H~-N@(3BgS(aLqk(XGa?~+=aU6Nm* zA6inLnpcvlADNn1WT@|(pHiBWYN%gQo>@|oTBKW0l%JKFT%wmzeS!epO=@50SN3L#3yqIY~)j6Hg|NkiU}=FEh>&F$;>U!jB&|NF3nBND=Cig m%}*)KNmVe6DJjn^DM>BTEhx&*N=+__Nli|S*<8)+%>w{UQXD@3 delta 102 zcmdlYe@vb)pO=@50SL;sh9`IMZ{$;9_6*h!Elw>e*3Zw$EK4oQ$V)8IcS$YIF3B&@ z4=pKA%_~XOk4#N0GSv6YPbtkwHPkOD&nziPEz&J0%FjwoF40d-P6Xr4natii0H^69 An*aa+ diff --git a/eca/__pycache__/sse.cpython-310.pyc b/eca/__pycache__/sse.cpython-310.pyc index 59c80acaf8c4f846a9c2d517cc3e750dc5c8572c..66c2e6d1bad74373d40f036c5d15a6c8b38ab13e 100644 GIT binary patch delta 81 zcmew;cwdk^pO=@50SN3L#BbzYz+`UYY!wq)oLW>IQ<9lmo*CnkpIn-onpaXBpO=@50SL;sh9|Gt$ji&<>8~GJoLW?@pP!RimRgjNmsq0jl3JWyl3$=7 yT2h{xSCXn9nVMK+sPCJfQks)$s9#c^SyGZ(q+3vwpOu