From 2449e9b96a47f2eb2e151669f15e885eb283292f Mon Sep 17 00:00:00 2001 From: Wancat Date: Wed, 19 Oct 2022 11:09:35 +0800 Subject: [PATCH] Add README & deployment examples --- README.md | 70 +++++++++++++++++++++++++++++++++++++ deployment/nginx.conf | 12 +++++++ deployment/systemd.service | 12 +++++++ main.go | 2 +- screenshots/exec.png | Bin 0 -> 14981 bytes screenshots/home.png | Bin 0 -> 23572 bytes 6 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 README.md create mode 100644 deployment/nginx.conf create mode 100644 deployment/systemd.service create mode 100644 screenshots/exec.png create mode 100644 screenshots/home.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..18c3f80 --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# Ledger Quick Note + +![screenshot](screenshots/home.png) + +**Add ledger transactions on the fly!** + +## Feature + +### Transaction Template + +add your transaction template in `tx/` (in Go's template syntax), and create transaction from them on the fly. + +Examples: + +Take some cash +``` +{{ .Date }} * cash + expenses:cash ${{ .Amount }} + assets:cash + +``` + +Cash expenses +``` +{{ .Date }} {{ with .Name }}{{ . }}{{ else }}{{ .Account }}{{ end }} + {{ .Account }} ${{ .Amount }} + expenses:cash + +``` + +Checkout `tx/` folder for more examples. + +### Ledger Scripts + +Run some commonly used ledger commands. + +Define your commands in config.go + +```go +var SCRIPTS = map[string][]string{ + "balance assets": {"b", "assets", "-X", "$"}, + "register": {"r", "--tail", "10"}, + "balance this month": {"b", "-b", "this month"}, +} +``` + +Execute them and see the result in the browser. + +![execute result](screenshots/exec.png) + +## Install + +Requirements: +* go +* ledger (Only required when you use scripts) + +``` +git clone https://github.com/lancatlin/ledger-quicknote.git +``` + +``` +go build +``` + +``` +./ledger-quicknote +``` + +Checkout `deployment/` for Nginx & Systemd example configuration. + diff --git a/deployment/nginx.conf b/deployment/nginx.conf new file mode 100644 index 0000000..fa6440a --- /dev/null +++ b/deployment/nginx.conf @@ -0,0 +1,12 @@ +server { + listen 80; + listen [::]:80; + server_name ledger.example.com; + + location / { + auth_basic "private zone"; + auth_basic_user_file /etc/nginx/myusers; + + proxy_pass http://127.0.0.1:8000; + } +} diff --git a/deployment/systemd.service b/deployment/systemd.service new file mode 100644 index 0000000..216f828 --- /dev/null +++ b/deployment/systemd.service @@ -0,0 +1,12 @@ +[Unit] +Description=Ledger Quick Note + +[Service] +Type=simple +User=www-data +Group=www-data +WorkingDirectory=/path/to/ledger-quicknote +ExecStart=/path/to/ledger-quicknote/ledger-quicknote -f /path/to/ledger/journal.txt -w /path/to/ledger + +[Install] +WantedBy=multi-user.target diff --git a/main.go b/main.go index 0810f16..e108219 100644 --- a/main.go +++ b/main.go @@ -131,7 +131,7 @@ func executeScript(w io.Writer, name string) (err error) { if !ok { return fmt.Errorf("%s script not found", name) } - cmd := exec.Command("ledger", append([]string{"--init-file", LEDGER_INIT}, script...)...) + cmd := exec.Command("ledger", append([]string{"--init-file", LEDGER_INIT, "--file", LEDGER_FILE}, script...)...) cmd.Dir = WORKING_DIR cmd.Stdout = w cmd.Stderr = w diff --git a/screenshots/exec.png b/screenshots/exec.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed2433fbaefd0e020ba69881c179191217ac70e GIT binary patch literal 14981 zcmd73Wl&t-yCn=EgkZtlLI|Pp;I6^l-GVzb?hpuW!QI^*8iznbaCh&<-681o@6ODv zx%d9>)LZlE{nFKSPSx3apS{oXtY@wDgexgXqN5O_z`?wu$jmkp47F#mLx|#f<;bif@UP{&karlYEr69wOGJ3?vxtdhwlgU3P9)aJ9?Lx<# zQnSg}*!kjy#zSlxOk14>X08U&x|NZNSewrzMcsZ(=sD{X+z8}&PPqCS2zf!mX}ZMU zQ;Ll~Y$SUj{lpYq&BC>&{22yRDGkQ_G$5UaFB(Qj6Rh)|(m3<~Fl9bVZFWLBkDf<3~gbw~F>A`iD2dm9yM^c)1$&>N%+ z?;7XUr5Lln&#{jp+N#212VZO}QoJPn77LXk!3CwI$ihDS(pQ>u-nz+h!>Si(e0#iGcjdF%x57#Xn8o;Q%a!T4pc;snfK$k_2zbhW)^Ffkr!`U zI3xxGxXqSFwZVzz5Q-F;`#EofsEJ2m1pG)M@LAyqaxztlm9I3|`QXzxN~#0xUBnn& z(+HxYIE}U%bO_lk^zMVx^HqbI9qX89sL^Oy?#-2>?w9>L)_ZZTDsP5{Ws!Fb?HT(o zza#xWhxsp(tQ*99pT8m=TH6@j`SAzTD>zP0*Hb8GH|Rzw^_8&y(SWl*jrIiHp91Y& zYsVnFv$G9KsnwZ@xi538wEFg1#m1OJY#@XElK1|F{-;TYff?lN7A9vjJBFDlR|V_b>gK0tR6!MHCb z3rZ89A+9acEcI?re}OBd&l#v+m%3yve(vlK`X$OpzQ`Dh!AO}ESY-twu*w)7cxRtU z_kM!#8+@i@vy$3Twl;(7GdWmQ{F!Bw#3J!C8eM6~XQQ7}EK1~>%0Gl>q4-N$G-kTI z7Egbs*aD}VvO88?5@kQQ2zw4kX(Kych;cBk#Zh(5N{>WI(xqn0i_bk;EiH)dX_^s=ev?_`x6CT^dVkOf5h1zFg|}V?Qi22u_Cb) zuTsA@&pmDFMV^7v+kiFbKmp00l@(#|yxz1%#Z@K}S{)Ys=X@C5Ot&~JT=8?SeOnnvo9DlK z(=K=s@IiV)bMnE8nS+F;trVqo(0=pAYtK)=g3{Z~_dN*c;y!f)M4el?EbFNJrEegz z9$5WlYVzeBe|5aaO3Oq50{3u-=iWW_4ns^DGBCkaFrL3k{7JG9}iqR){ip%xd;ky zkHx7~i)&#RSub}H0DiU!R|86lXZMruZyjGZ z1plzc)nnhY4wFrX5YEh2{q}r~6s1KWpRA=6xBjYuBRYd~Q6}uuXVvzPf*rT7W6Ifm-Mol|rF9u(|{blr-abutt z!L8g{fV-g_80ylfj4sM_*qjIix}08FauN6yJ}l^~IUMB^D=nCstUc<|xv?wlI4QX( zR3~ersg#1yVs`A8}2Oo zYgc?HMwFOrg*LdEY05lXBEo#5Sc5ZRKwmc0QhM6yzTnIMmiGdn>?YPIf)pL9 zO8ckmWVui1Po@gSF#`r@n$zcS;(Pa|kz37_*s|98ws zyWFX0A^1_Tg)r71`$~d7BS-Z-OOOYeZVPRD!%zX)LRP&88@b}oSD6#uZ9VmeGr!HA z8En;>jkuAb|6!7K@0S_f**|(eCqrDL&`B!BXMeE|@_L+duAJ@gk1WtfsQr|2Qk3@8 zSJMYoj3-3;feFYsJn%#I^2+paRSm*B(2`|U?y`aoZzK7jEQK!DF}p(@Z=uM-(`=rL z&T4PgV#?eZ3`t8KpnB;TuFh`iR9V$n19P9{id|S2VrP;YY%YVO;Czh&DC>uO$6^|m zhW>CzJ%*mY{Y0Yoz2HWup6IXPhX(<9UsyOmH$#Hsf!{Qq5~fOJ!QBzcrjd591kT^@O6+wIe|` zk$=tkn4CIzDV2&sp$)^LHg6v1Z&UCzl|x*L`4_X`2q)b>uKjI2ed@UspD-|Gunxng z;J_I!D;?K(^dtHmVjW8SaJ?H!{1jXZO8m9@L2~co9+k77_gx@)0Q>m4FvYVWI-A=W z(tFDMk5w4|z^~~C%>N3!z@OT5aZ}(&V#*N10;&8u3|(d#X}ovSF;T-Htd-0~2Qy_H z={1JsgAb#tN9EKJN9_fbHCqp1DaDzOhD@@n8LMdk{E1^g^#NA|AkB8ehT3&fMADh0 zizPVmMx%14Dix=t)-Q+6XXU;TP#sB5L97^G55$>wXZ{sm8y9^hX}_nyxO07gGTN6l z+x7f`TxC(uxa8$7JnB_;YL+Z2F088KSI|JqM(>>%=j}9|PJ$7%c%UqUFQ1I2ANyB@ zVE?C7GB9H9L=+@~&B&k%N}lN!sh1f(t@v1~wImL-o{G{WeSjgVJYLSqngKGE z+K!dMznbia^_)s%+CpNU#S!a@CsEzqKhQ(_5Z4+@GS;0C$aGm3=WxQ;mYvhqosweY ziBy&Klw)w%Xpe06ZJ2wS?9jm}+oZmlg*TMsT58IAc|D__&@nH!E-Zija=H7u%A>4D zSIi;t9&~UghdzTucKt}X!-KkYUPc%TdH4V*Lsav1NfU7>>~w*$Ry~$5^OPGeX-_Oo z)UfT}K<~VXI_BkVJa042qzQ2An)ov!Zo3>wtnYdEFm{YnEmA>3u-(Ks?kWI5R6Kaq zgB?~u7BwZnSU~kX_iiOWQtrk(>Lsa&H}J;%5jJ&IbyI%TA=fNOG#FfvCv#F)GhW2j zv_hsMl$r$Wl(37k&l0eZW_QW*#3l8xH?}CN!;|rA;=wl#s;AVi!N0VFcb#Kjc#Kxq zp(b-MPNk;jT3f-lJF!e9g3{z+bVmX<^D07FAx0lum&j~*5!eujknQ8D?46KHO%8H4 zPMi45wu{%ZG4}^4mW3SLREq1gu^L3ZE^ekk8EvTe)Dbz3kyNJp_)Tzm9bhUUtl1Kz zJoB+i+cOmd`?W}UQTDZ~`MzJksvL{74h7_gI2o8Dx~(gs z`1v5pPfv8HthJ(Y4K{;8;OVC>GyLPT<+@5Wmdf$s>&^w1g1(arPxJ0NLU2=9q6_N` z+CCT4^uUoosS2>wJ1UC<<(21?rEc;ycm7KKov8%dq>KZ7ZQ4rc3L~ZK{L?FrDkXkB&V~EV5 zt3-`hB)0Ie-M#x6VAe1g{zwfA1L@&_YF%H+A;Xs7K^mPz>Is?O}uMpQS$od-K1PXM>E@re3#^4HdYs>Y9w{j4SHF z!CiEoFMw+A=twJKD&o?Sgk3!c!7NJp*wMEb(R`6*d^5pU=_Ge46YDDmW$UtTha|TcaY=ovyZ?tsfSAQlPZMt1Tl5 z%6e4J1t4~cQyV5dLz`0OF7WOgv8LcN18YT;m~GX2Nn0yTzJmv1Ii9Vss+T2Yy*pBZ zzH7f~(3|rHe$JZgn|6?u1^b7@C5qlJ1iv!!V5QpCXPq}VSh{v-!Lw5R$sVcOePS0q z`4JEm2DRs|A8+R5WgB7>eduX%NZv<7UK&x|9pRPrWQdCfo3FOzxw^WA^LaAlGZ+91 zbe<)?7e`caBb{n& zyGbbhMc?@nIh_$GF`{|4M5{1(??)}D1qLP7{|S*uvL1UNlk!(DT`I?wpEpVTQLvOk zp{Z~N$?CIXTcQ2IBxA4+zRy#!4Nd=qrJIDCG|{&5bs1P^TN})n;qu|Mp{}(9xjnz& zZ>Xc6Q{s=6I2ME^+%t_bTKZfF0zLGFGBYPpX)$GJDfaSf3GHN6UutO0OQPgDGkvW> zGc7`+MXCSuMU$u)3zOf`G>2;qO z4AbL%E0u?TXSAp#ezkR?72n5}F>Szn8xY#eHLp6~5TIM(V7O)ZGGSia;j;*?f+Z6V zPd?AkESH$zGdWw5%)d%It#mRulLrpmT-slgn%s`H>9X$(b3vRP_=Dm#G8>2_ZW(Fg zL2-a;O#>Q-;Mf>OakaaBVVY;)7q1b!#f7ZQ2uOrerU&;mYWp8h?W{KzA1src+6E_u zU>twm0GNDJAUpjb!C5_IG}8Ma1iwx1%2yIdYx?5ECh?4twO2e}rLgoXgk?ML2!eT7 z{Dp~P=-q<2mwlk8zJ@7SFdULj0>&dEurR%9-)lV$Z;W1+-D~#L&;r=SG$u*37uS5A;jdhxY#x8na2y_BI^z1?~wo?b9B z9yWqi@sR(<(3}K%PatMI==-utMmczt44o? z11DsNTU30W>S7^N1eUa7Tyiir>=2SuF28axzucbTgE@MC84BNC!V#=6kMBp(lwX{? zM^9mvzQaS4{#=k}#rs(-Sp!`fcOer{9X|EL`Pi$9se^okn#)>(0*?qk3Um%XP=%+p zVCizQDta*(N7d~Te6h`3=IM&G8(YyAt8W73>ShNX$x$+QurygFLq%7}$|Gf#vu7Gp zh=HdgdvmJUX*Rw`#9cKUi95=2Z{O+MyH+7k^bF25;%S%FYkdW`p8phHGU|I6<&NQM zQE}t-LDN6=kbBj{O9qTvGQ<%zff{N^X!-U7R=+$jB^ete$<86EFV;t~S)>9{%FD;E zI3|{-vF;)uC~Wnfs$YiBEnL=%Ccw!L#GkBiks)WM= zfTK%xHBaop<7JZb_e9w|b`GM&a~8d)32{v;1i)wRRgXT0d1e#U4b3ZfdlI{xm6*E4 z8RY8vyExli@b3*PSHW%{9hJ1OTt@} zNL|3J``7xkpp%qVCBZpOwU%b+KlQw)SD6-{dj%}X!&la+oM#4}&2UzaJ`f0$M~4

B0~Ye&PZs2hEq661wD&KYFCKPm=%rywW$h+WrYO=oQ5 z(jVM4%<7N3&^Z8ZOjFjwm@P(*#wMKGI^v8la4_*0ANBBIwX(QoCic=p3CRI`^{8nm zgz{@iZCN4Ur7$UZ6^77H5X^9#jSKGc5tE%bc-@Pe@yJzU;uH8?_|9seB@i`frLGX4 zX0!-Pi$!-lgU<%0ps9N!!4?n4)aig~x7q9(#RKv{hV}7>b+MscA z3K<=8ZTeo{CYsfjL_l>dDA>=Vcxq!$LXp#i*ctlbbej??Tc> zf?Wx9J&=W>@8oMSc_hnB$7k`heV@R$G~KyS1mts3mvTIYdpx zW(|}a9w27wc$1^=xJj%U9;^D*Y>C!mD9W!2dr-94PFVsduf(PESG+!^;_qq)SH`{} z`}87=N*@1`{yOys91s_XO+O$^0A^GTR?i2SO8~`3uG*~?@EaTUMm@9n=Z5gk02k5{ zDk_YoWgq;Ss;Hlgxfg%)QP>r`>f-D{V`ipLzOz$?m#}e~T;i&_*uG3qTr(d5c;cn+ ze$XAd-(LMjo*0E+pKx4fF!R2^I{v}Ay3C#4LUHGKjg)6-Utnj%R`jT#isMc?D22U5 z%_$eVIVKB(C1eNRG#y`D`8>T*7ZWP;;m|4W2@lImN4gN#s|d_+HBG;IGMkwYwu_zw z^Z85?UQS&u<3ljW`fqj6TQ8vZ_AW{q$~>-`pQLaXU*(>)x}AL(W4EAR*sVJ z)z+gI+@NGN5e0;2_=@)7N@TshOJOXME(-A+-DhBEUf138&3PuEz)PQtV+TF)c1QJY zr}0x|J9k?Lcjf2d3P2N{7DkgX+1-?XTMYgoEqe4- zEMj(i(dQ%O$WlVLY>RVY{v<0BD^i2QPArHZExvVi7EQ$+BI~+~;F}zQpF>ePVtdMI z>L@JHp1SCW$o3CNzEM#XsV!frHIZscx{otKUwDKe(1`L;s zhZXhYf*j%Z9v?--)jxhcLGYk%iMZVT6Ebl%2> zi>7Z_C{1rvRdaR(!PwSKKD;P#SGF}uq|R^fq|tBOyvN%1(sl_Wq28d3FGmA&lH(C1lOYQdgkNHEsE`6F<7-pGp^lf-kDCq z>8{1e^CM~24#hF_I4{tVZoL234Tm1ZLBVcO+DY!!W5Zsiu9-YM$B8f62g#W4|40!e zyV_?9b4{Fw%-8Zw<$`vl`!sxwFG3sZFFCbtX zhBwW803pq}I6?Ga+bMZ_Vq%OZqNV?nwNu^WJ@?1L32ijhZgiRYxI{h%LJKB_k9KLH z&NC?r`sJ_>4N~ob5e)+*Nk&CmQX(L!a{LeEEeWhzvKJzIQ8y(?l`6-IdZr5x9F>1P ziN*_0*k7vy8;20SDxJT)=H9rXdfh3@G~+2xZx4W)!W+)aC-mT%$A8|uHnRFXXxeIJ zh)f;89ki2_E^?pP_NOg5=fh_VNv^EasN9ce(pDT91A3({8!?e~(o~j(%D!JI@;7$q zi%pGNw+*nB@vcSqjy0-YPRBV`rZl9-8{(^6n^W5{WfkIuM|wag1f~n{F~UOzNdhwY z-6~f9BH*GjA{7k3LzEN&LF_e+j9j&`f}1a@ZcoSr3> zwiD%GSLx8EnydLp2_FlTrF!>IycMYKFriF^5Alr0GOal|@=T5>Y45k)=Z&}o?q-hf z+71#2F&&fCsnQ&@9_g_vz5{rkY6Mvn3LCUZV?{LyAqm4{;_T~DQHNxd2Rii4cK8aX zuK5K^JMFx ztPO2*kpq&qEt9dCL%J%M>>1e-vU%;ANvF?2C7p#K5`=Rfm9y}%SvY?Vq82kEm2KEj zdshJuuR>u-c*L2`%aF#7tK?bF8RBw8m?IxqSa@{5O3qG=^B7KN`xjp>M3On|w*4ba z7vX&(Bkyv@uKbJNyEf3uhV5j>od2v_=AtZZME6i2375jD z=YekAf6MG#hkpJ7!>WV-L;AperkQ|xz2O7mKpnjvKbQBxEOi(}M|gFvU+}iYouyGu z?L}%s1LH+)>=D?2g5$`MzXP zmCK{OyI0rf>-{S$5xyruU^juoe@H%7vW>aO>&FlAs|kuzJ>+ddj5}3!Gza{f>7-_> zvpq}h4Xrodv2-!`_GlA{t4)IWy_ds0qv5Iddwpl5#2pYHa`>GsMnm{3wcjpY2KYS_tW`e$5V(AHO6oVueU<+vDM>Q- zaXa5$mWV)d?=;!Xc}ud~e@*RULEb zcK`Wq0WP@2qLWX{j?#t$M76?J*XdS>jtCPLye>A{^8 zn28dP7B}9t9y?Q{Y{c5TUzKc)32-3ILgwb={kf=pPj=0m4 z+=2ypl{fv&iX}$fWU_&=kvS6fg3^pTE)D2VN18c*IS7GnmFfy138cZf+Hp%`8X(Y| zMdQ$R@r;N)wq(0(D$=Sk#COtwqLdjfk9Yuh`M}%0m&3v&j;q-S)C`g5V7Haee-&2d zM%)?cJZ^HC@ybPhjP@Z$Dn8jb!8LfTMJ8r~c=BhRcsGPoltN9nmmRyf6>bJw*(nZp zkIN-^^{JvNq*LV%OsgqM7%djILt&rre7BCJEMOBIR}bS8SAX%}VrMoz&((ET*6>YH`?Y<)U|E>sRsA?fUCo7?OUG$!alscXQ-pE-(_{#`4#ci`CQKB zpGPyqc|5vdJM@j*gf_CI1g=ja+*B+=LOs1LcE{YcMBm<6!c%0EDDYOxchJB0Pvy2B z*}d6oF;T+14hVg5HcKSk*Lj*iCZ}|=$oIHUv_0(R9%1%E_1r}tq)KYUYJfx~8nh{h zm&SAOL`VA3=4t6T&4p^cfeI}e6ky(cgQ1qKb^*D)I+@iz@-%r=EX03n5|CGtB?9l%vP5qZI2uSz2vc`JgW6E!T=p z_MJZv=?&`E!*BdPkyzm1z#U<}6Nf^_ijwGoc}jb*fV52dkHT;cY3c}BAH_fFunA~4 z0+@`NvQA$sf1fK;lHBs*J1(S)0U5uT`J(%tAcC5!^6uj^3(g`M1^d6%rz-0it)_+& z5in9P6iVTE!}v`(X~x{cf)O+YG4C~y+|i4bY)t;Y5+52_;_SqU>JWP_ZRwV&Sakaq zc>Do(<3LN}-hZ%-DN6weS0#rvKME~R+j_rii<%G(La|?LWwHEpz=Xwu2X0!NU$hij z=)WzI*yq+0{XSKZ$ib(aJ@VPr82tbw7NtndGQA>t0z(>&RX-2MvE=x4dAvW`9dZ{$ zEuuuyw08u~GLz7*v_|sMXt|N65iL=ZhrzhWe_PbAdlS4_LnY-?sIfk>&__LT{%rv3TpZw3rps7sx8N%K8>Bqf1(^K?2!tJMRXc2 zzfw4EpzU~B6T+Mnp%z#Lpn<^wO7{LFBKRNA*RRT< zrZ~Gi4ihE}5jIo*ACv}bUoo6I4y(+Iy0ndn@MCNYG1!X#e8~r~cUce7P<6-T6~0+t zPUbY3Rm0W1;8)h;&Ca0OdL=pW{%x5L(vTAesyBlsHL3mGVaH3sL=3^zb6Vf~I;4`H z6^Ebwl%e=kj$quze$~)xGG)wHjoa9UY9d{u)>@x3N#Ivk!H;sE0|6mhScw{+9tM$# z5(A33DC>Pwpb=F0qi2!%kQcA;po+5kgmPEuxDpOv8eD@7`V+Pq8Dd6;%dIS zV}qOi{3op-nBxPkd6R2A>Yp*CkAm6ve71t5b#ntsQqf|z;i1xAvyd&VZ2;5rp|nml zo|5{@Mp>*w|5ohY0fB5?^{itDPX!WL0c=IG|Br$IGFMVT#3D9EBupD|WN^dP{PPVO z^C{82VzI6Txgx*77g`KGF{ZOHyuhk}4P*DO3H)$(!v8ygFG*HMP5z;kO_|>Z8%*6F zC>5*201vCOj46`^ZWm3El3@xu#%Qcxf9i`x$it(fr^)MYF3RNe{~Lv0N8c1ULghE! z#XrF~Qh{3fw=|;*p4rczJEY=F1*b^cSyLp2)A-062V7MAUC1@9cT4Jc(UBez`Oa@K zU)jm(@@?x&_0E(Q`7PE*u8y$OA|}mnBnVEnST7gU%Z8d3aYiV5+JB4NP7obir50DG zjN9(ZMbV9#!m2!>UH|+YAYue`^AV4SE(Sq7lXUVUd!YC6dMr+zEUZ@N89sdTfm|re zwF(~bYo|Ba>kC|UNY(a22*J}rjmFjQD>jM+j|2QQP5Q+S+JwW3EfOoanhu3^6bdrk zh|<%k9|{jpx$ESW+8RC{qB^`2&|=B2Ok3f<6_GKj`U%P=kf|?K7+AUxxy4v6Bl-I% z%>}$^w;Ac3We!`9rsRo`oAwRxy=L^qity9+rGm1AtuIDC=+jAv(d5KmJBhEjlZV~k zj;MO0ZvJ>a@Z$jW*Vs>*N2AAKbpLmK+N#c=d&#GJq_(mR>rV#70g*BaC1H#aY1bSm zT^PFim*u7is~Pf;?R%61mi4J z3+c`jhg1F=FlDJ9RwNcUEKKE?7TqjsR|;{M2&gE6=h@Mmi}83*=k;;z8S_0H$g(yF z>$ozDuUr3CbA-XpBvv#eBL1O4O$GAi`mU{{^V|8Btt`7@VmiJJ=Nxs{fv@UfCo<6CgDw0H-j46f5HzuKJYz{)JO)Zyb#?kx#k))@Y(_B&k(L$etNcA(x7qAG`Qq0E5hu z6eQxYvSRX?p5zJHN|c3pR$kXoQK~J`7m&>KwNL+`x|&rv6CLd=B+hZ<=sRvwKSgM_ zCiX7vVu&28yzs|>Gfpvzx*LHo*t>8u3CQ~eFRSq|I|cws)N>W~7z+68X#e3xUq}(W zw<1ofD9-+-pA)Wq>Y}Z7*+ye58<>Q9k1F8Y&jZ@PmMSeB{RVJ>D`V@ny zHYE@q#|6%i8E5>j<7;l%gY+DWitH>8z2ZKxB@NHfwveKmx>D0L)qlP`T+-5>Ho>gx zxp#@&!VBkXAStMSMd41QW6NS=Sww{0Qeicxv0inL7B}7DD$?An!TD%MB+H!4Sf0w| z^gpJN|849!v>XI;1|Q#bZ66Oz0DR0B)V8t|I86AIf(2;E3S_vej|$uub@}L}xQBru zH$|j8jX}qA@6OxzJ!;T93$rV;3I2Gj{Ozq{i2Ur zz#40&D~DhRx$Y~B>8KldC1MPfAnK%Su)64jMUns3cO!lb^W7|bMra+ZhGM)sSP^nx zv;3xjSe5bsI=z5UAVco-N*>h^TPybLuV6tIFZw6D?O9gQF12gf-FACRaX|Wv{GtZ) zP0XqgY+mMLQIPalQJue5#0H$}EE&u|b-E#_y_cVR;`8HhsUTET+fe3ckYihc`F9+E z$)-Luxh0a;#u2N#E@EEwmIqbDm$|am$d`vC;o-S^L06u>=e8r92Ablfc)D?SAtZ7U z7WpLtwWqNuZKi$fo{2kbVkp~PH`^rGmYegLhS9}Cz01deEyLeHVqtKj1;BLS`3A!|Ol{{&E1x5&Bi9#n-O0x>UR#$~?3~gnxDP(NgLY00 z{xxx9n7Qgse52DT(l+8;m$kp!#^p2qps*sH!4HSfjJgHA>`Flgn#*_xB@B9b#vb^+ z=*dc$&wgqaBLf%xyBqm#y|O%?F8s4#Qn0TBdHL(7EP*)n;uPKpSx@4}&@Un0hXBv1 zG0S{pS&ix0njG4q=LD3|A56p>)w}eJ;n#NFrMzn>Jj`P8>cYMU@2ege?-evvovaAu zsMLuLpC8cCci1Sam{aG)pkgPV#nsV|E3+qo1zp zQWkmi2UJd!WyHO6Sl0$y_SMkp?NR#a)5@P|PMwx?`V#Ltcj?Y!cqGr8Az z5hsejM>#`~5B{BhOLYE_>HF;Q=I&KcSl^}yB2S_{LF}obuAGcjO$ZO;i+Y})7#sbV z4BAFyvwH)5Uv+USWqVT#^O-U%BRr(^KFIMQwY=NcSk*GDnN8i3J#mX*RQZ8fx+x=sN4aiaUgo?3i30U-+DVG<$(ba z8=K~F_y-#p_vFaPbk6((XHJR3`Iq%|jbocLD0W8@XS!hZp!M~nTkTIqW_zQ)D-zmv z+yJu+_m1J+>_#k!Q#CQ@XyQv(R{0(jn6s>SA^X?X!w-Q3BXonMe{jr4LqF%nnD~vy zPv#R4YMOH7B0CniNeF#noM3;LcVdUiyVjzquHvz`4g8Qx68mAPLLLB`qJb3&^5Veg z7+7VZoh%qZ&mM8>{@&%x*e1yP)Nj9qFrC4NcpRtQF&hp$s&Hq8+oMN8y$Z=fgX0u& zloegu)AWmn<*K&aT2H^C`sheL?E~Ef@|4g*A&2MoGaEOCt=U3&nRW}%*T+NulA@O4 zek)Q^oI8Tvmo2RDK&M+W zEosaZK`%TQ2h|cP+q|Zsqww4A$NAa6jXO$&AHQaXJKqK$eEjWXF{K^I{dn>A<3Sq# zF%R7jd!*+EjPL!?D;V>EDwY10ea{4BFz;8!))&Ria@4yM7276`C{Dg}Mp^2!rUe!& zc&)sUnL*bcXT$}rqD6y>66;EIF4}FoG3pCHg|t1CaR-^YBz9HT$Is(&V$&^&#%!yi zR4l6nT^J8NaNkT59@EJz8WQ4wgm)MMO0O^9VGN9M7thb z8fAF;4goP{EaYs&h^S8@kUvZ$DLdub*vIO-tLPd?Uc%FJP-yqtZ>q*TY_vBMmR5w?BJKBl36?VSksDtq`$1oHt))qf z?E23)PJK~5GXvAVZiv=GqikkakFaOYRT8eEW*WK*r@LR78 zxd1YfCN=&7*7=~x);ny3nrLnNM!LbenKrXqepRfDLj{b}9wUE+4rHRybq6@&K7FkE zdsT@~Zdq`irqAsnT&LuG!r#2z+IM}bU-@LFdr#4yj>2@8Y@EGEQE}AMV9SrMz05NF ze>{KIH_{LG{H=8x-^#BE&uY{B-Gtyhr>$@X7aOUjbC+p;w)kJMF9wRH0(y8eZ7xw) z@_H|qcrnaW7ktPP)2woz$L}h$=|Lek!O@XBCR!1`kAkFqpU!k=p+B|W)B_U!c}su4 zD*p?E+<*09|EtcpPl^AfYfa@W2@}>v_x``>I$QIOmZt1dt%uQ(0al7!ojdP%n@wvg zBx9eBSvz;=$TDD_W_r}Dh$5KFf%2{Z&blLVMG#rECzWOMeA6UUto=YZ_rO1dZ2XSEdrp|LgynAirn~A zxQ7jn&zs^5)UD@I?|sAagpO*5!>rNpa;n*`|EquRJ#)K< z#oar|U*d`~RmKL0!+cx-U0|uSpKw&&d=57yURJOgA5pDSxIOtT=S<)c8Ns q2L}iLTURE&Jno^;%SG(ds{wV73q!BeF|555PFh?+tXkA4@P7a)HiKdS literal 0 HcmV?d00001 diff --git a/screenshots/home.png b/screenshots/home.png new file mode 100644 index 0000000000000000000000000000000000000000..9eb934c1da0b4363b0c7d1fd0cdcf83fe95b0f9f GIT binary patch literal 23572 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 Qcl)N$(K661(y$Bt4}hh3e*gdg literal 0 HcmV?d00001