From 44045203f7586da3a0eeb3eaffd3819fa3eea0e8 Mon Sep 17 00:00:00 2001 From: NatureFreshMilk Date: Wed, 18 Sep 2019 08:03:25 +0200 Subject: [PATCH] recommended specs --- doc/recommended_specs.md | 76 +++++++++++++++++++++++++++++++++++++++ pics/cpu_graph.png | Bin 0 -> 12282 bytes pics/network_graph.png | Bin 0 -> 38792 bytes readme.md | 1 + 4 files changed, 77 insertions(+) create mode 100644 doc/recommended_specs.md create mode 100644 pics/cpu_graph.png create mode 100644 pics/network_graph.png diff --git a/doc/recommended_specs.md b/doc/recommended_specs.md new file mode 100644 index 0000000..75456aa --- /dev/null +++ b/doc/recommended_specs.md @@ -0,0 +1,76 @@ + +# Recommended specs + +Recommended specs for running the mapserver + +## Storage + +The tiles are cached in several zoom-levels on disk. +Storage usage depends heavily on map-size and explored areas +but it will be in the region of several gigabytes (5 to 10 GB for "older" servers) + +## Memory + +Memory depedends on the amount of caching (see: [Configuration](./config.md)) +Per default there will be around 500 mapblocks cached for quicker access. +This will be around 5 to 10 megabytes depending on the contents. + +The recommendation is to maximize caching so the queries don't slow down the game-database. +If you are willing to spend around 2 GB of memory set the `maxitems` to 5000 mapblocks. +Otherwise leave the defaults and see if it has any impact. + +Example config from `mapserver.json`: +```json +{ + "mapblockaccessor": { + "expiretime": "10s", + "purgetime": "15s", + "maxitems": 500 + } +} +``` + + +## CPU + +The application is more CPU-bound than IO-bound. +It will use all the configured CPU's while rendering: + + + +It is recommended to set the `renderjobs` setting to a number of CPU's +you can spare. + +Per default it will set the setting to the number of cores you have, +but it will also run on just 1 job and take a bit longer... + +Example config from `mapserver.json`: +```json +{ + "renderingjobs": 2 +} +``` + +## Database + +The recommended database is Postgres if you have a busy server. +SQLite will work too if the disk-access is good. + +**Personal experience**: Don't worry about it if you have fast SSD's ;) + +## Network + +I don't recommend serving the map behind a slow residential internet connection. +An upload-bandwidth from 10 MBPS upwards will do the job pretty ok though: + + + +# Recap + +If your setup looks something like this, don't worry about performance: + +* 4+ cores +* 8+ GB RAM +* 20+ GB SSD +* Postgres DB + diff --git a/pics/cpu_graph.png b/pics/cpu_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8491dce4501430f1911232093084fc29521b81 GIT binary patch literal 12282 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 HNznfQ5^Aq% literal 0 HcmV?d00001 diff --git a/pics/network_graph.png b/pics/network_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3dc4607176176970d4bf5f07e194c9cbd0a084 GIT binary patch literal 38792 zcmb@uby!s4+b+5&L8PQRMY>U%K|)eM8l)SMPN|_m=|&WgmR3?gLQ*zs34hkxK&%zFE|@B4{&-e{^T;^R`|0sw%otR$}m0O+~^faZXMj(Q?4 ztWt&gh2bHqtb>DtGq<9#3;>LPviuVr-w%5WjsY)VUX1YibFu5?XT*i_TTf=m6<&O{ z68KVDTs)!l4liw5ho*nOezJ7oho{r{S(*?Fd^+Lr+xP5FJ#~5>ERX6_O$W1-#YtKa z3J0;jMiNsZ52l7rRYV%KO7gUlgA%`B^)t&8GX|gh@|ULlgGL0PwcV`%Dc%4CuBadK z^F_z%INjZ83`S;vQ4Q&$GMgJtB&+0R&ee*6`r`-g$4f;Vrb5zEDi?)BSp$GE!^Z`O zDLk<#I9l!bdhDlkCM1&*;M&p}%ON8djCx~QnyEsb`A)Pp6Tci-V)IVDWR4){w#obE zYHp&&=?>~k$?I;yyh^B6Kk*k2(M}hL{_WxU4NEwY)?0SueOVk11yT^zODgkQDC$*} z`#lg@9Hye^-waHHp@-tf`q?Efb~ix0?_t%*;U<=6F^#I>sSQJCqc}{<4hNTm=aK#G z%q$og&21h#Lxk0pYtr{+$?;K*xKq8}o$9Y53f@@y(thS)1~2ozTrTC}YSj);RFFAJ zNHmVsG;=v51A-TyX#6>~!pDE)$~t?wmB;qpXUgwP(+oD)r*UB#ww!kufN1-Eh|rvC zD*sL>=aP*a_;O$YKqtR%=DxZMXTfkW8LwOOIBwo(C}CJ^{aLLL>DL~3EWep%|7W?} z%;k;o*TP4_;p&nBg>}QA#|eiJ&OSk zwjA@Cu}wwm2CX1`s{y7!xDtuaZn$;cfI>mTqEGhy79S*BV@p1NyyA; zsnSI91iMfDlrqjt6n;bBj!>x&u}4kZtff$HIwN>irtYMB9CEqny1%%Y>rgs!`3fek z5#-;|Ug89v7l&0!EO(YplHTCFi<^apuMz*6JEHJU0Tb{%TRnG%?F->kwNcD+VX*u$ zALKC${-YNde;xwCK}U0JE&gbC9M2D(%B#+1pl^y310X)HWcB% zNV{G5t_Pd=MF3)@y6xllA`&*gPA-o<9K!|FX-gjbK^V^kE(S z{CFkxzDDxJ*F)pYgp0-ns_iRN5!OAT=aW;#F#;2bCW$DlB#b!^b z)!HMcN{z-#Xuw7jpLb+~^o^(L*#sTF>@+XRFi9W6r{9s7I=M$DXsgK{h@a1g}SmQF;mP(y5vs|0_ zXa@=@n)-gU-MaabAzp10(2#{quwO|h?vwBF`B1_xh{(ZrZ;Tg0Bs*dLv-u2&#sP4E zXm;+d&GO73%-?VK>6pTaYJ7Y9Tm)IK!qQO3?*9rJ;fY%EM+qnl;>iDpX8-T7=KrtP zN+XpuZ@>Z@xN6u@sIh>0Q`6S`5eA~gl=@jjrFJ+ zog7eK^Fb$bn%f%Tr&A@Tev(843LEVjw@7cgK?nM-Zf13Dwp0&)RX%ZN$%?gareC4f zm;q!LOva`B8_@tv?|MwX7QSbTn@e76d++o|+s=3Hc~O`uzgGV{InsIX-P%$s#P_P+ zMSjwG!|42(FwTW1L13lLHJ5&8%lo`?D;Yt)UFc2Ym z;Za{!xgaTgI+?Z@^C*^J8GRhh7)RXip70^Yucf8-=oW#|OZ{5A-1hQS_m`;?EO%T9 zvH1bvY8a(@D-EhAZ$im$K6a}=a_lc^yFN=G90~$k1C1O%6T@XW8uFT}4^(a^xhz|)`?bZRxXP|2e;5M83MMSek zppW9U$Y@;%y*TvPp!k9Ms+OI`X zh#g?e|BRPgZ3(|0&DG%3Q{L7V^hg+l@&1?5nT1 zSR2@<%hgI@J+6u3^2BfacVY)ZNblcrcrx4DAcY7NfB&b&V-|fs>>v4m?Qt7D=-Z}u zP7s$Cz|DC}{0|mba^2c}J4AMEsX?xPkFr(e2J@#)lL~Gvcw17vu3P00)6nwo$FpGy zN7a|NMxE$MPeH=m3X*VuMPL7p!joRHxSxPHNznW)&aI44-t-a@lK`~-aPj_ocQit4 z1lMN@VQ73SJ(O^tVaZ#+()(I))c!kv#E!*u;q+JDbas8-p|nro$?TBCj!}*aXdHKk z2(=Ht95V{EFEG#PAam4#rDsa|zQ^i#pU9j>jcnaG{eq$WDI+wd=f93-{I+~tZ#wM~CJC(VdT6Mx^IHa5p+{$a7 z+V{k1*elDq8LX`>8ZT!9aZq+U2Hy&qW>d!#k!s>|l90tQRJWmjd>K-zb!hN~>xSf9 zcz%s30y3@uZma7A z(v;3?h-26buY{xDZyJKhn_V}GNFX0xV!SkUmQT6=48~%tT1r32G_|nqu+Xx9rmfHT zxtw+E8veqovK|1IQKtQ>0FAyK5`dgpEsaw_wXGLT9KKdt9WQ*NZ;YD&rB6_dX*-)3 zw_*uNUy?XKJs4EJ-zk+XXXZGA97y|fV7s+LIX0W(6R{-ew`|Q2%;x)f z^T8P?(Ej^2xw*F`=SP6ZfWWjq0oPczo8ipHyg`vbKWa-m;*0|TY# zTCuV&(Dn`w&AJ!ZC6NkoTVv}nOc>^0FR;6=!yb)!^t34^PnpA7h;BbS$@8`>+&w8 zh%SGwoK_aTN3;D88X^)v{8Llhy;(W{0MF?{#+Dxe2N(W82jw^Z06Xn4>|odLIL=^?nUA~cr`vg|Oid)&B2tJqNBj#y z)lBLn@eWJI2<1l4zZ%?yN*Hb<|b)pCU<*T>!hMxksXx|(WD zT_}v$CQ>))hmpc9m1{A6#3W+YCP@^RiTP*OA?!t|#jKN&0LLX6)nCjBMR_JnPjt1M zOL`LC;{7%L5FD+12W3{LyEsN*!#{u^jm=Bd!qH4UZTUp6B#?ItFQpHZ?iOQh??YZ9 z$teCcB|tPW0;)C9QPm^g;{I)ljnzPF}gH}Hv~&fwF@uZO?9i>;~^VQ4ak5@)ALRe#o`zE!PXosa&s z2W}5dtGAeV{WJ5WquR>x45Jc;A)2{SdZ#V1o2{nhBbWL+ofa6tspjY)ogHsv2$8HF z4mx8fM`3blhztk6f))Ky!Zl*-tS3s{G|NllzbF@E^a?s<`wj4H7x({dbsN*k5Dc6GZ@ScZX zdwoBO>BoPGn?Fj1aplAiH-$!|^z1CYbPiUXfYH6X+j!^k#Q2NE*SSFm1R~}u%}GD> zE_iwT2m^?0X|Ae!j0GegY5Z51dlVgVXJzpqBugh7=E5YMsgzp#HpQ0z;e z4V<4>=Q>O>3c4PwT}0+>d}rZuKIdt`>5 z|3+iQh=uc}wnSWs^Np_jKkV_(X(8IyrlXX536hcg1xIwW2;lBJIOIMhY9!=;UyN8l zrl3FzDW`n$A2>qoIs!rMv1mt+$KtFm}*(zQ`v=(;{WZpv+9KTL19{Z@7fJy2jC(8H)J`ELQ>gc zn`Ztysi5Kiz{~D6PQuzbXe#o5Ja}7r=3|TJ-xs3j%T!zSqs#}ZcKX{TC0nf9BUPD*wlrg z@l>bC%J;t6mo4$xclVca{h~J3p9)irdrEaa%Bi73p`v7^e`9OV4(?x%&J0>!RZk88 zHz;g$67E>Nh#H0X-^^BIR8&{<1wi!cXJ?1GTJJg1{8JBd3O$%FxxZ(^3Sck|FQbrl zOWEf`FI+0g2vDw?;NfI-dpq>LPr>qK-!8rM*ZR%NQpczKldVSQJdgg@&fv*bNJ=1( zv-~~YZZ=dSdrx)W&}9DNn+oardn5IKw)@yBZjsQ%=+LZ|cy1nn&@XXmA9c)}^*_W{ zE>Tf*3DN69pi7{`u_T(ZRxvL1|=u6-E?xp1#SMZ9JDmhqC;txtuWd^K<7 zp^WR{NN>8-_(9dm%qac-?*8OXXj(+uy;~)XSCq<#Sy+9>_+*6h?bGQh**WObL)FUG zb7&a02ITSSygpJKZ~hS0x$^1ORqQXmGfK#}tTTJ`38kJU!xS160Q#BTKpMm zeveHP7Vyc(n%)KFXOq8aMOLP6pP41@k;Ro^OE;$Yu zQl7}QFW>PJ9`Sme%OBqRa2VGad%5W%?cOjBjGV3HWQg-pQ$7BRwdN?5!TJage0s7J zGl2fvY-u}e6dmaJv%9bHON1&cTanPq*3We-?i}MByfZ3!6pd(i+?*vu2aFxSJ(`mx zeAJ9}VxKjDTAPpuFz83_G0P`sW=eX_*x$}ubmD_kY2^Wqi10c~KD;D2BnBl@lGBP; zczzD39AYsI;-iJjGs(Qu1r=0YBFG5eLLW$Qp2({tXKymw_#r5)+0jaohT|wetjS+$ zDijvLWGc%1IVA@u(|uG3|IN@J-?mZsKp>LwiM0`!&}nun^dhbLxw_KiO*QQmEh zC62p0X=36;h<%2P>fwz{st!<@iDC=GncCpe#;8KKPq-qO z9;z}WTmJEwd-SX*=3<^QG?5XL(_t6POZ~@BC_mgVPYMia+b^7AQ~{W*;g<}+Sfwh4#Tae&`w&KbRx?K_6vIT{(S1J^=FA3Zgn5Vie}-m&y)1<&b>>;0=ga<3*q;y zW};0%G7+(DVT-vt`pw&YN<-t5Ef6!!f*7tybu#9M)g%I0Y!0Qhq#ehU=|OAONB-jU;pKbQ5FnJ^GVuC%^2U`o*NP@F&= z1*AsRJZ9VKA(n18iYjBE`lir^eJ_pGylRF;aC)+uP-E$P{T_`2(ZMz?+-UGzzbf2E zL{7gicsl1B*UiQ_2HQ0t`F~TqkZOc+>q|$G>QmmKO555HQMX;5`sJ*p*EQkO-Dt+T zWnA3BN6kEquer!RVq~TaK5Da&drhjtp?LVUV6iS4ZFHZW0$s$3lVaWTl-zo;#0&}r znGc?RhdnZ#`~?J3L=_OV{+jdoYQq(^V*UC55(31x{P^T+qyO?ss|1bWxqM45UF5>H z#$RkV3QHTKP-zNuTRP$V0$-Z)!)~moSy{D2Wd+Y&cw6fI!S5ggL)?DeOv_J_qikro!#y1Zso zm9fCdG(}IUcy6rFaT?w$)+GGvi__0~WCpcdq855Et5&g$xjO<|@*5v~UGMPiK7-){ ztlXLLMQt`zpx|szj#~aso6pT9qs%b!eM<9j0M_SJf9@^$)6&)%btj^%&^>bxSC4i=vuxzM-o zRh{Mdw)t$}cU3n+EWlC9JxRY$LX%JPL}m$pfi#jQ-7NiV;;Zs?c2#qz*#ro441@QkZH*<37;S!c zyYPG|`H69{So$q{;K~908y^HrUc!3om7nj;%tr(o@nRdLbJu_2{Xh?@mU>6x$fBd; z#58?EG+HOlLalpd()iqA&?GIbkjzI_1j-?dbfA5vDo$5)Mx{~tht1jusp>8-V?i`& z)6`f;Fj(^h_`=PHN~l;D@wdFrC})#Rw+^~7D&#a*=B`7QgcWcU7N<|!#R_dghD0q< zZuSGYOr>ad5fey8cPs~+YK$}_Sy%chm%r}@r^e{l35e?iiaip3#$Ins7;Zi6$YEoI zz?R_U#IwBn@q9_^GtE-O!)tBm0-%u6(3HlGE+!(d{<4IvEdA zpqnm7PQg=hIxFon!dhAG%VZUm@-5c?)B@;*cgjSE>YuoZX^N;iSBcb;NC~Y$^RvNz zA~n^jU zgeBm}$2skLzi;w1n2^wInx!O0FrRB-!~yB^4MKSks^h7U}X zi*0t5hBzzrq0Xa*v(Nl%$D=+-ur;!km9Y{Tvmh{#X{>PMqPy3V|2*ZM7f+w#Ez=7; zTsNMaOXATk7BpnkeWFTwW8uKr>zOGAwvqwT{QL^<_#}j}G!)zH#wDEEg^t465-SB-zltapjEW@vn+!XsLUNC)Sma{ckzO znI$5%2G-z*9QzPVi6}h_bEEPiFolV9l9~H$XnLwJm|el&EAzIgDl&>M9MyH-VBspe zq0oK8^a)92=nz{p3TER|k&72)Rp6xM>G}@j_qqkhs`Wr3(q!TH)OaBL{yp*>MJ6Ys z#*eP}@M21@u#M4b|H!Xj<*8EiZbNuHqL$gZ>9?vjiC14B`Q>x-%JH;ln#CmL)u`JbMa`x4*5p&)2yX+uuwqZfJ&_JMRIhks+q=7GLt?pQ+SMHUJWMdfqYF! z20)Hqt+Xosa{(uok7Knhr<^Lcc1*+a=;);9*7j@;AIfPyJzB+(Ae5r~;AZwe;*pJX z0pF}#FY=;xv>Kyj;;48Q@Z@MOW8;a5x)?Kbw6B2UX#?p z;Im3PmL8b_9f<&WR9Ps|VCst(mxmdeuu}cSZ+C!RSF>n;J7enqma*B7{lDj2J(X6@ zd>Luql77>$R%Xm6>Tu7A#_eL}f(XoAS?RXlc*Hj`G&XbK8p(3vrGDeuZK0)vJrObI z9DlB>QaEpN98O+}V88*`_emD(aCwWHe8s`p^I}=K8818?PtU0+A+)BRQ|n_8hC*G<{am4jfNjvsfRY zoHXl$$uWAI@A;e^@4p+huYoOQN2&hLaVnN7ZuXD7UOTU^W%3ttgiDRTurN2YOnV^3 zTiUMrAt#0=Xc|(H(6P4;qu4L#bpIH zHa6r|WiKzeU>O-yXJ;X=G=5KYulifEjrynixeNw8XNr{wJBw_x4a!;*MLc$zdc^a^ zIh$?OVftUby81Q<5^(hVu(3Ury!bR4ZN3W)4;bEk6sa9XX-{;pPw(rC3PdEK0ugpm z7Cvwi#cRLox@mLP(+DkRv)dp@1ybaZcQxD2bC<|7B+{UvkJ2x~f)j_|PiTG#oLrx8 zwUG#x)iG)JZf%FON%A$4;uR1-h>h>Q&rY$&)P|9huju23c1-waoiCsC zskUkxX3hV9$f8tzk52!oN3|lf2Qj@ zJlliYuYSxt#Sn!>`J3*1wYUD2$PKY3E*zr!MT*6J&)6u5BGPylMjoN8@MJLg6S=10 zK&gc>MKM+xF3_RN-}Ca_X+vT0G!#%W0m+|)N`ZuU9`UsJRkFqzadVd!$i9hl+E2Jy z=%Uy^W}nrje|mKlWQ!^miCrwX4r1DGh}qY8a7g=4Ufcc`d3_F6WjjJ}0M{Z!tqW;0 zjWrd&ysG&@h<(J2VT3{Va42*1URmf{^mL$?AH*cjz#zFpS-gge9$d!H6T)plb>GleBH@am!o%^HJ+c0$YEazz!11%p7k7-G<$N0aV|2@?DQ6Im>}cE+*-#q+Hon=x-&qH<2t;3N z5~Zkcsuu3uve0za`kUUu57ZCw_<6=e!}`6SzBz@?Dwx~y$urv2gji-JUQ_Qc+h-)gd|SxUafC%NVxQHYPVgP5{$}B2KzN}ImqNyhZabu zb*Au>?6m!vbXx5Ei#+PuPI}(b&5^Gxl)YVOFufEScEX2N_iM>@i@_jTl(-x`_tIDV z+q5Wo?c+-Po%Nv(n{S7+6)~UneC7RaI{YDo^*9d7tLQE_nQZ)|D%3&!0=t5%&x=gK z5AEG^(Bu4)!Ac9~Gxt0H0W|$5A{hmUl2UV{&%a}irYp3|2FO(-w7ng=I>Up^_w@BGRxu2!;@mc%q7e4_VM3~h;fC%IlbcANb>MS;EP<7Mi?E`Jx}5SC;&$5iOYLBfEL#c7HQ?q?-1V3=fc0|MW+FX+7&D_zsnA z7w+-QiRj(Tq^bS5V5_-d`lWnQ=lv*grXGm*fH5@Dd{`HEq%EE=0JpoKec97aBey2w zrQpyNH)UO8|IwQk3LYWV=R_2%0hz|23p`zWpKQsuIbdZ}lIE{$$GpqExrL>g{-)D% z7}QCN&}T_)N?1v@#0d}wwK;K~7F(NC-vd4(m=3qWa?72kQN6ZnP;~t<;gZcT|Lj=4 z8Ecu5=jdyOCAQU@7x%U zLaucyBzM|xrmOv6X+?W?^<`FLJZxv{L&$B2Q_J!l-lVpzv%U{j{TGP+BnCB@^`Y*W zL!yEa6v=VDfa`jjov}hyhc%K-5DQPp=4SN!6D9TwPM||e(PTc}`g)Z9e3f%cXrtZV zc!>Xmr$~?enF3SCzHw5@OYxhcb*Nxn#zPs^(9Ckj@N(4Qs42|qW2(UnSpQPP79LEP5tq!RsA-N;@M|rb4NPPGB$H~Sr`-87_WTMXAvl-7sY~XOhiJTLb$|jW% z4>J7P;3P5m%b6BmBcYK^+hSIe_=?dEGJYP5i&vY)Wn0QTz58B5OUzz^62jNapK&yb z%09m57!>1pRaz|fH-L^sWOyze7&$@QPy8#L-52xs1^q>3wK?$lOR{cS<;0&-c6Rc| zH2M}?O##U!5n5`t9_)ChQ%~Rbj@MZ?MWF=`tPL^DUM%MIc!gUBk+`$kj59Qn;AgN=hNm@LXD4IdGI~VSSN%4gWkfNh?@GHcV$gSE_CTg?UQ-bNXb0cRLYDV9RH+7xyAkm25*OFT3N9=S6G@sbiCJ2+OQ4}lQpSunm+%g z7FAT7Nv@%&tmoU3{n*K95j>eRffQ2v<9{C@jnszte4tkAjzB;qVB@^@fhgYBp`Mz3(1t&`Gv@RO@J>dtVVg<>bQ{}$1%F)5#}7q z<`4PY`<;Iuv>wYs2D8xPh4fVlB;voA!QMTaVbICiEEHuqm_Rt*0uz@AA2I#p=?k z-pT0+^iJ$Tik=g3t4c%t@PLCBRgX{n&wre7;d0{6>9DeS{xYbanDnXDB;)U)O{;R( zPF#1EW>(?ID9h{8Ribo1_T#z#TtutthdMrrThtSqhc*Y8mapW6=joS}!YE-77(49A9dy|IfGG)*Yk3$8FxW zYpdA{XdzUTQ$&|FeSl|Z*b4-6P3}_qFNg|If#Dxsg3mVFeN8Aef{QJ4gsOdl!rPBuwHfYZ;YPA9 z7*<^mU%X@koeXm{9uW%7LMOz;o^&`Op3q^^h#HJWGScNvq!R^bplq)*UFsr(`8Ex@_PCeI+6zNm&HRc@{3kxf- z;8w@is-|K2lG<3n>A_tu>Ou;t%tDcYpj_^NI9fE*+5u?IUZSX?Rm-`t<`HHQ3X7v> zi|IxM8JallG+nWH9Hmpri`hMFs%Lild9YgSP$qk?S?axzMd1|0!!>rdUyne)n1)Me z4jOqk>#ecEf|6H;Q&zYEmTk zK{h5*X-ykp}`OGQ!tb6^?!X;ai|lZxihh1egi@;Yfe>J2udS4C@>t);6(@I1BPMQ4=W|jYtpv$_t@Q z+eN(Enw{tl!P3k`vA7y!PU`HXF4Zm)Jgu7}!}7R^1b{Z{qtU#4XBDR8$&&CyoW!y3 z`qHfs>b|eM53eCJQxaYhzvKf1k%k}3K5`0DYp4&oOSlHeZWT{W&AT|ynlv8MB7C>~ ztMV*tTMvX9Qj1`=u^?;gwkdwECeGayMdH1#PX0>a{^~t<0+U)~-stDu+-+OarF&74 z%^ZDJ#|J!<5Dajaq3YVqg+{=nxpqivOh@$QqfdZrX8I5%Q_!w{>x;*q2neJ_&heFV zX~29o=|62}XL2_9UN?ulyEJ8)E*4y;&I=W;So;=AZOgfz)d?aw@Kr}7%XQMePYiu5 zIyY0ciWa-WM*6TQQLKh$?@h-!h&pjQFnG%KJX9Js;EGz@-DMA<1QIsl7Mc9W_{l>C-Ap0zO( zmNx18x!ReTGw(D>O5NwR&Mlbq3RmA(AU*N?tGP6UfM~s!bG_^Nmnz9>$9TD(@HaDa zQdi#1BN$fw2hRYdtqHL!jQavJ*kx)P(6?%}BZQEx*4@WssEs%=ez(y7M8x{R!`2kK zm0hmP&}FYL_Qrl6mc70=%$~B%nwE%*2CecH6sNtu(Xjc*x$OB7Hr&g$#@EI#_@@mE zIE<)BSSmtvCEzb86(dL9tIEl{x(ag}_)^4=cJ;Cq5{cGof6wC``SJS|%DScykn(+p zsl;`pdp?KzPv34TDTSo3AB+%#o0ejJuU?t5^%8gP$|l4->t627{B&O3Tl?JN%G-iT zw%1KMZCyN49lx8IY$P+T+&uHoLi@9u_P{#;4ilB^gNMX$PyflhC&Ik@csM1I+Wx=Y ze(PM1)&+B+CUlfphoKQcp;*9dp%fK4A_;GGgmJma#mDxak-cu!j+2w6n1Mr@YDA0D zg=B+EA1(|a{9woc?-jwfjxD6hS-n z=+g)R)!^j5^~ZCf41;3+jh!)frCP`Oo89L%n?w!oHj6Es)?qStDXERnMtQiZQEIN( zsN>Vpda;NlueqDgD@i{UDe4{H?ELb^8mStQu@H;Xg^8_bM_)_I8Ssjm(bOm%tWTLKCgGx4nBfA9?NwbOrZv{#5|8A<>URt5uQ-{-UzrL4gaK?n4_97G~O{*Su8K zZn2|qLw*Ha+$tqkaP;NqrVrkIO|{6k-LXx~-ljuqH$Fh{jA6zu=PzHiUuNO`X9?EQ zhDiiGO;5idih$sar<;U9h5p8(kC}|st#ON`MxoHsoyEB;e;7CLmFm9GW`j$Gr3g!n zbAi#plj@kbzV0}IJQ}Jy@A}x}4TDypga_V1@I}0%>Y*3{0&2xBQtdNykt*%U4IL$= zkq<{r6A-=jjD=>VtHptNZb2ry>GWDIjEelrK8(5dFA`|M*)Xr#gHlH^_v5|NNjnX? zKzsjzCUR8t-DQMsLC8uiTBHGdy;<%w$B4RYWR`tBG9y%-gQ{X}jIVz@BH%2%o)A>K zmk{J}pgj5FF(;udd`9ax=^bM%4v#bgc|dhzz{DD_1Pru2m+VhadTeJ0sYk`BZ7r9z?N^f!TJ3^?)>q6-3#Clfa;#kM z1vot%WfmGeq)8qK6QD9Q9QW6T-3(XWx4n`O+li#jC0eKVbQn6AzyzxAu@U!k6Q0n-)y^=LT_aw2rE3nyt!k|93wYcZy;_a84%cA!wa=2T!2u3K$A0Gx? zlLsxC#NXnK`-|gN=*`HGL>vxr@d>1)Hf#Tika7Q;J@C2WG!}FhS)?Qj;==%*VNE6% zr|IjGVrxv>$MuGfV)-nV;h9k+iFOlD2!G!v6jdTnaRzNG0y2_b zPlA{G@Kdu;dbX_eQ_-Z8(^T=uNy9#Ail@IVZJoqQ!g{Qq==-?eCNLRN!;;a@MGtZ+#z~3qbqflfx0VM;3KHbJ0Ez8s$9V~$`uuu zKV54xw0I=cNYYx>bir^x#{1m})-tE4&e*d*8_`faR4}gUN2%FB!T1`jAmA!C2`wMl z@LI8#_cht_Hdl+<716GWZFJHU>kEdiLqz=%Q2|CYl7sB6W#;i`6zL z{eKN{Mfde24u2t1d`j?WrreeU{l0*$(qt+@&JF6Smz@Ype&?Vtfg9Z(JtV=y4;khV zQvAS9<(GoSjp<|R`+#|-V0thG!&wkK$9Ul*nd#%lOiz2);gWMu&TcP%r2idWY)bMq zp#xEc=ZQ>`^-Cvz=tY39*_Ux8gLdam>ZYda`;Sm1WEpGV{`!7lCNI%T+;`Ig2OhPW z1`pV@XU`zR-)wut#3r8s!AF^=O*4wlt5P787NEab_!E&!$%`N0{P?~`@iuz!XoS`C zqb9znRdJx>$JbAs+B#U$2!Z|Y8ciaVR);1+yCUW4`1x*Bqk?h_z{B5yxn9KwP1&HF zS$=~!A}NT0CQhaL-Xns$EL7VFQ=Lq;T{0iBvAT~#VFV)+LA3rKhH8?z5`7ma(>5TGH61pra&&Ff6mWI$*mS&__Z8x7 zb@r5SW9F5nCHpBv{<_I2%+JGkUaR%kB)=@#g@Rmv5|;LCv1-i-^V@t(Ql{r{X84R| zABfC7^{LA8qDkqiEyKgdD6R^;s^!wtKscD`soi^8P%|Xe6wA{W&eX^Du{m^xBiq~9 z4b@B1{FrdWT*RtC3;APCTs`=&;ZKP`F)K;rD+a30j zyEoVwk&ztt%HoH~mN^+e%3%S2nmX#VLXTV^zwsCIY5h7*qBPVsaB^qBH_@o%J%4&E zH1Bg7xj}&QH}T{f=1;i4PL@s#!Oh}Z+{cc+-r(wEu4$6asCjk3R?Gh zHBt0EEH=Bbm4^rV9`4^TU=OP>lp9u`w%Un5qN2}mGclMMY>{6T?BiSJK!GBx>vwPF zyg`~fu^!yO*Z3=)eFALOET#F`Ku_+L1D&cfHg)l-=y++-<_G@;N>!!y1hnAMo_qld z!;gY>Y#Vc%b}DiKN8B4{3jgzJWT`1pZq|Ql0XQURQP(7Mrd#JsAzoPMEk@|A)$O`4 zqk8~wn`L`Uy?k`twV5jw) zDtcI0_drk2{_N~06+?l;s_t&9b7Ri_*3YV1okvFcjaa}pX)eu27Lb~nfcd;Pw0+;2 z=Vx{3TJEo|=ZG@vRaSo%E}9o=-jA>Je)2BC`8{Rai#XI*0K9ltvdK4xHeV;O;!4eH zSJi06b)i5zpM~Hr@lXr>wtCJZQb2`nu)rhGU)ZkpD_6GZg=9S+JP!OVr73V^H(CZF zuMfZ@tNn8xw}pwurPp&Bin#BYYu5GTR^Bu>d!6U%O5YRE()M@kjCF4HLYzIv0?>bc z2@mG+Wi$Wr z#!vNw!|~JZm(3;T6B3gY=PfQm#Cn~i)5XDNx`i+&R8mwVkUPHYkEnJP%?syo9;%kz z_*wVE@Z#bCsLKMa2sh%uys{v6sYdK^QpXEteD;A~P$Z(P#FUrM=U&HMG(q3KO8qVs zC=_~N!t;X}Y}*iPmigaY*ZuDm+NiG($cfm_V86bWYx3Ei791wFIc%M*e&59Kb)Nhp zj5{?n4TtCrF4o6(@MUkGK_s|?UGU~b_6&hwZ<@ipi0I{Gz}PF)4qAj_-QOCN17j_S zH+U>4zrFqB)oZV!<9*O?73m*f9FluVm=GJYD>B&U@(qE+M+17ehJ`xhlBRCw-% zK@Ntme!a&l5U0yz;z+M?QbA9o~9ty>yX|;MDbkeH{%2==+JZYL~JiBPW2Yh+zvQa#R$(36Ht;z=Vg*-ZLGv@R)5e{cvoG)O(q3s}y+{CR(Hd~MLXZP>bdkQaRL zl^#Cx!k7Lj^J#QQ|+L1IjUsr=J4Bsi_x-I2$61{BkYVP{tYG#Egt^jfo0^@;VrgB zc)cfM;{!Lj4&!6fqpI6uYF;hx=TYZ&!(J@q_iXeB%9g8B#E7HCi3_yQjIgDc9s_`N*)&!PA=ivOmjfNQ0{3&P z=SB55?7xMXQ3;~_122L?0hYJNLW^RM`@8g`{vzE`S#%<1lj$6u=ZBLaWui!;E0)77Fx^}Gc%LLWHDLHIAU4M%xsaxj26pc zW@cuF`RDuZ-iUqLr>&=siSFs{>a3F|Pi0oU4&>x!Xl)R;v=(Ab&Llh$S7>QCS{;|E z8`0kFZ6>g~ncQ0ddxU1U2|lL@@#hINyMf|A9npGR7Kq|rvBSW9SOY4H(noe@y%T-_ z&%v95xWJ{N6q)Wfb7bplg6QiV4Rz+qjUBe0kL(ivO~AMRFgIiw))-OkFpE?dC%?@M zQdiSQb+yKi86!ga!3I+`|4=hWiwsUTqTbCf9~H&UiyGYhYI}p4?6Ka5_OVqYOi=&T z>BPxI0T1AKQ40T^9td>aFlAx}D=X&9txxWsb+0&=kQ&(EsycBU9r?*q(}i+@tA_Sy z#48OF$&AW%XGN>qZ>6@k3V#f0I)M}~R3OLsdL-N$hT$6o-Xe4tLjfgyqrdm_pUMHF zpUPUdNpn2-r9@E(J$SqA(~2k4+fhB22+t|yuX&{F=x6`5DO2^43{|H|rc9ATB;-Xn zn4QrmQhXda=!gCbVXnmXtkNBCXuRj7+1^Xtt?-q9Wq6e#A56yWzb5(^AbxEn`Z2|P z-KHZzzLdtG$3^=Ds=CW^P|&g`_1((kU9Zf#Uhlbqbx=iDk&ExkeT;lGF0WSN66v{3 zzZ#r+6Hv;Q=}jT;zkt>-PK6oLuiUk!A2BO|1O&(^ENWJY7n~qI6HMzwWv5Cc|3>q_&A#$|jC8^xV?Y!}vF)Z-e%U;OOv+jUl_e`J7VPBWOW z>Z}DT1v!LYj$XaXUfeB~VU*DtY@cZmPj7;NAIOII-3{e`p?c3UgS@vyJQpecU#kF& zcVh+oSJz=>MOmZe#@CzEfa+bLbfjHw#>@l{&$PtzDq7&{Hl zM~w$^$Jpi>Sh{Mn`Zxk^K0K6-fvl(T^WwquuGf(_edEXLb*X3T%1eu|oWT0|XCCP1 z`-b^PHE z*vuG~*2swg@p@z(Oy#H2*c!zkAM({9;!wbt@ z!-KsD?Z`hU2CgL3JGOdmKyWk{=H>&hYb0sbymU1uHlmZD@2+X|b9;Eq>nC@^L+154 zbSP5(5}A=qb7rl>Rxy3$C9689GYEJt>2Q?CNHaCA=C>!MvCQ%vR)p61vtX2J)f53B z6WdRzvuLZ@ss-{9?qD;jQH2;D>vW8m6iEktF&Y># zw(22BMzsXTGYJz{0jIxou)O7O%VM@F@hME+3fSf%zs_+nWNRczfCJVeHX?SLGBrL= zj^At*}l8~4fvpHYKZMuvyWT8%~Rakek@8*li( zmo;WhHO2&72Ag-Q*P0#t7`uLMEYAAlP83e7SOL~busB1ZZ)}K3+msMUc>w`rNKo1S zDB&Iiy`N_!AVL6GT&oMwj7dj_Ug=iW^ktEbA%8BUzAenH*a<-;4SI?Vp@sZ-*&6?t zYBzc#qy2UK;8(Egk^WY5a)SdY9;{$op<%25-zPN6hk{83?{JdDv->6+#BR>0qd6GP zqf;%0C517?I9*1y8$LTu! zOP{P<`=~d>LioU1+qWZh0=bP*WHVx^`OHaM@eJ(&d>mQpM+1ZAwu*R*&-h$N%a zkU_$QrM!(%+Rs45j+UYVQK%`=hPL7LO5B)sx!GRR_bW8e_q};gbYj3ZW_mu5)1tC7 zwWVYFB5SzBGD8@R@UIXWJ5&bJ3gs4Vp9hO;F?NaLL4_+3c_GFiueP&F!?ft9HV<(+ zBUFSqe=vkdl05QTFr~I*3}XMcA7X5Pd9J7)pOlxoo^$|GCm;jW!~qoU)o2r9iov1} zfUn1_mTH<1jQqaFIBWBLj#hzK`qRB*YA)?_VIL<=BNDg#z41T5TQQ5K;_x- zGebHO}%z|73MrT+?! z8P5!_o`sFNd^C10{r?!De;T>nh~M>tY&Y9nSpmHnC0oEdwn!1%Z=#7Bl=m&8*iuE1 zh5?nV98L0NNJT)UU2}j*8yo!X*E<^gC^Twd ze6a=;;Fv=OokE@udeZ?jyHVm@n~HQ-M7%)HA;01@w9dVLW}yJosn!Y8phu@0+|=AK zN28jP8$t;YH$Ib7ff1+qxb`MJj0N-)*4|p>Ox)Gp*I$E^UJ+*6@es27e8wj=w63zp zW;hGE@PT@on2wDco?4I=ethN?VuX$ixV5=auv;>nT0kg-wvOVbbCC;j7Cj)#xX()Ee*-)rLYB6q8jcC!Q1=K z8>J836>-sKV8cHZVU(bJK;D5B8zSXlcPIy0f^kg7BhprU8wrt|*;s-ogDHdOm|{+BQxL?-WY~m6-qRc<-cbn+Or+?&#w2h6 zA+17*OY0ws6J>%%x`qKQXpbGd5aJQaPATwtz}EfOGR;sJUf$`QdgV%1!(Yol{6z=o zj5_x|ykv6%XpGVg5fa)Xu}&g*$!@#5f2^>b_l%(VF~c|`t{Ls4Fb^AnnaL5;3#g0| zx|?OZqtM7GgUE^*DwgN2F8~35uZJEtB&`MK}KJwH4EJA&TE$7&dF3;F#?MW$vDu%9(s#Jxj{se__zS>g-f>D+yJ0@LoXG_<}5 zO88r=2^)|}{dY#b!R9;qz8MY-p!P#{?n0e5ilnJ|ENS+a-4#q}Y|%XSHqU9dj$|eI zh%6(E*L(e7zzK(TlyouYk40mpCy{^Jux%3zNMGYALl~57+zJPOc|r9jafF<}2TCOv6zG>lQ!#E}G7>hnve2@M>Xb=B$Bq+6AzBFDKAUq! ztP-r8Bq9)THboc*Q}#-cyv2Nx1*))}IT?wtoqcl^ErF8#YvBCc0h)gaW|VOqeh+x zPYQYV_HLAzV&yCgKsPHX)_%VTK8IrP`56s{x6v}bsOxEPCN(P)t2cy*VgVV0Ev>5y zU-^>B4eq$jz}Xsf7cRdpU3T?>L!MYuYso&(`II~|EYqxQJPR2TWUWAU`GFfD7-!1l zz4t_{o(kk$WuUjsi^DW;!dt9)l~T=%H43CW!Xc-Poh%rK0@^;*$S9vsoy$~>*#d@H z^4e%)BhS?KO)myo*nVf|&>M*?R;Ye2UZjoHM0CkLJ;f*KL58BH{(>3TGyi!Qn z?h{vEgmvv9OltMVmp~uxRk>2EMKN|0YPv!-J|zSFxcwyHUR5Fyhx<%rilNRiHI=2P z$_V$y0(*CVGlIbh`4%ogHe0huLI%-#>hT!xN zgka1fO5xt9_IxBwo*GOGnj%OVMUxZnLnlu6`}@}$*^mm>7F13?FiOshIU225M23V5 zg=_eZ{VJQBX*HPr=NI(YE8kk}k<9OXY$QNnyz4#V(XFg84i9z0?<%Z@A$6ZmtBW~d z+R;cq_t)7kCwX~?uDVrkr@KCR;kQek%wDG0pZUd0Vrq<&x6Wb;S}h9Ee>a49N97uu zrC~jcL?StNp&=fscWJ-O@E6PAM@A3y3#c==Qp3(z1H{=R0mD#Zqc%91IYqDcNQ)#< z!he)8&-bsNA%>txUiCrL=N??Z5Z7Ol zC}GENzMonp)aZH1cOHs!p6`iDF|?RY!FN9JE>nn0Gza2s1;Eu#Hrf2E_2NiQ;|qT$ z`#*;Xyp5EjSZZHQ17+hvU8KK>g86Yb8RY;vKx8}rYaqht74czg4i-Qp@c>u3SQw7K zFRhFk-O?6DH)gfdD~ zZ&Koh_QiW^SEkorPA0LO0C>~E3U&ju4v?3`bK7_9kM6B-yih|X%Y z6!80|E={Ts+fG#sAPfLUqiiB{8Ot@mI79kGcwsb?{H^Q-s($C+ZIS^wH0pZ5&D79J z#0M}|Hi9B3d;K&bBz&~*uNX% zDj%h4exU?dStUifvn4{?8s7EXr}i8lh2?FQWCU&j>O-Ma3`c&f@9uq-^cLRO$eU_cNQixx0Un~2-CuF$Gd;F!;#zb!4(%-Y= zwHJwXFR3m&f-;s|GytN$+9Hld>HCfFXDs!|Kju6E*3f`h9E%1L3R(04$J~%(8cN-| zQq;Yx;U1SB;Qnl%wH+ST__8`ko|JDeMFT0W>-giCN0>pc!LH5v%z5tFY}RH#i)B$A zI$E~RgP3sMWah?2ELnZ%U`=_tOB~qUFqRH8$@kXu}%THnD_U_ z>1Aqa9j7RWt9hV;%;uv#nEY;uhxaxrd z=-l&+yLU78B(&%LQVezQer0&EnrC|_r-@}TW15!D(dt)k7&Xa_2qwE9mMOf0VM|<5 z9cXoUS(4R=gZNGkKhn`W&~i;v#GHwYId>=Q={AE%EB7l2LxO4A?p0d{0~WFIE51Mj zeguJK0sV^vQ(kW-%`Iv-BT_!qK`oE$zt`-Ew4+$+*Z=ssS144Wq4^JC$u*TYjR~juQbv>Apjyg%`)&PJC7`A0Q*XXO1XITL+V$)L$Q(l=3pkh*ph1|?}_myzSKv2BbQNtf&li}e&2aDg-rRWPWyLUBjSSGbcNHGkC1oaH>IJ4&% zNqg5}T&%3kw#}K?QF#vNSDi4N9`pA}&X*D?0Dw}9Sz%pKN~dlpII7q@CY$0$0CROL z4KW)5|GG7ZYbf*cA)|Cd5YO@BSozI>W!Vd1S$-+HY<>kS1R&7_Ax6&mr9I?jQ4|-@ z#}EP*Cz!BC6O-Qc;KTvwrV^u0_+x0Apt^Sv@$fMQMFM$U1>ylnUi>n9p zA_T;rqy4okYlTL79qhUXt({y60R%Rxmp{+}Kp z{bhsbG(gwRv2@foU;hk!xJOa|kAaEjAg@Aa=m?>_8Z_S)Wo!eMtmgZq-h4HQ7f?qc zndN;AIMu?j)uw|2utBUN`WGFgznyh>H;RMRj z#ChqeM;>{W)rvAE&`NNbdsc`}LH#9&l2=DI7@2}UCSMxh}?Y4)(C!>Olv-h8j z8@$7N$v~|AsEOU1SmWXf(e!VTt!_c5{j(~T7d#}|hC=?aM(RIa3w4kEtSb1?s$9+a zM!HJK%k(PjvHA8ON%#h}xV9~s_1}IaF9m+UfyYBKez04v8QWQHT&xSr72<%N%BKe> z!>5+C?R4`~d)PVFLSG;o7g45+qGIfW<@9)Z6`u-MD>|nZ#`mp0OTJ&_rlV8J zE`Z~LmHV-djv&PE`ups2zrYF&#E(m4H;u0OW!#g$9jH!PiRgP~C_w4d)0`=B1(i!X zOgHCJ>$z5&&7m6 zn%(@{Qujzfh5P^J0{Al>;{b0SEu(pH`Abd-^`9fJGqoC>PS|BEi2z#l()=@2 zz>|=rF#lj%`^8aCB_4=I%cWcN+7(Ijs~q}nv0%wh8_3U^k2LKm466Iew6DP;-$^~+ zYMa|%F$=PKp#Pw~T|M)5zZFL6#Cg4A0yx^tDiOr-I}I@T{QuZ;k&jL9C!R0Xe)fx< ze>(>aX4LutV+qXr-;mE1NHw9_t$ocBSsDG`Er{E%xSA*uczna+SbuDF>A3wd^t@5D zIP+2PKp>($nw3u2`j-#*p-S@cnLr}gM4Dx%;_H-~#})>bM(ih)Q7rsOHD_w~zPL_T zjrH3Mc%;;Vn2bU14xqcxp*CHhhe26>G4B+DdL~! zRwjEQYP(NtAuFuDg6V?b(PD{KrUr;eO2UaC%4mfip}5C^SKESOp;+Q6$$Ky8 zdZU@LzXLk?dq&4`)nHrxm7g-4K~_#C7sxjdrzFr9%+aYJl%R;|dK8V@1{BgFeZ7YK zxlRypmUku&`tSkL&WS3?MbTn5kTiJ=_*dKEfvZI1A9UL7lXS{GcwwKnK21F_u1QS0 zXGRd4eR3o826>C6*V&?6vMBtMM{C$9Oxg$tt^Iu0lhFix>Uoyhp48(o>a*QOGGuzY zDp*xiqSnYxRG)<+jX52WnPm-GNqoJYy{sxtYi_HRAdYR$6- zgNHR*sjV9!BYNW0{Ow+nlWHQ2>g7F%2q)aH{;$mph4fb^HzEhL^xa zzrQO*KiB{u&eMja;a3_!BfImXCw-?2iD@t2Q~Rr)uC;Rnf+jc)pvOjCW1lyAUqCxi zb$U+3`#RNHy4c`MMbO1qEP`;founx&S)Y-wvWuZ7LNVL2&jD``~bALP{gYO z;DcJvhmAHaQ#gjGgu^{4!;g55j*`2NUP$(V2svV!iXJ?ce9w~o8 zekIuVkO8sHw`n>zWM};7232H8vygfVUMcy&`>C zPzgIO{#X+yUWDZcRQc=-lCS;I2?&CgkVXM>eIbE=ljDVkz71RRVN0BDOtS}c!T`^Y zy=igaPtu`-$g?1$u6^Ri5o)c7nxxy{GZ|1$I~iEmGy<0vIdKq}_QKtT`Fcj1^S(U9 zL5W8a$C{#}hGqPq`c`!o?bQimYljDszrsYN3)d0NyQnnJachIf=~MiVPsk5DH$w_M z@nvD=sOP_eQ-L!4Ts%K32v-$9`ykZsihM&9qOn1;U<-M2{;{(sOukZEhSm*Q7p~4|Y zCS;CfohP#uk32`jo%w{>MGi zr)x}at<|2Ag#%rOD>Dip7J9c(okwqME35MJhhOwWP>L2pIRbb_8l}f?0nf7U^TzmE zUl8cRr{i?PXEf2t_?TKxKs-#~guIA*TvqD#0Kh>2zGv(#vAmhZPjN@q2-u%Dt~%sZ zbWc-mCM#Jlj95Sdo44%kjj?{Dr#4oP9p3|KAOPKmqSCe(%&CzexI_fO*OR zw`HJG%Rbt_9>3}5hK`e)(PykXH?XVzm^?baBIVF`jRZZ@N>t87^?dtybm-PCbF8fi z7RAdN6z(j53fKr2Qy*6KMscRxZJL;E^LAQAspv0j+dFD)$7SWrO^+9AZavuQI!!a@ z*&?GJ+|{6%`h*JTw`_fBXau_=!1nOgj3<<{A#NHc^KO@$3m?uVmfxNFqtTn#6|n_3 z6K9O#5NWG;4rlE1HIL7kg!39!DL2qkQF#dWU`C$X+leTqeg|x!V;zvfKHYx#TblTP z6<#)55n4(N&(vu3nf`nMO({L*{g^_Yf#uVn*kpyteTy(uG@b+1H1&*GSd>R@nS%qz zVagrh=hRo_jvxTp=bWDV5TAl{IV*HS@$pLRFB(Ff_FR;)N=*6! zvE76wR^x{b8F1ml;wN-JF6qBP0ZSzAKm`8^Sud#hc71oT<1!wxNOBaZ+ofh{ah)J# zo}<0?bv>(+04IDarO4kmX(^ZJ?JXR6>odi6$joMvdx2^rb{XiHoW&9LK68=DRnzDX zw}&LxlUwHVio+5%y_%Ql->?7&fcy8n=x%iVdd;iS3Y(7Uno1eWIf#Ev-?eXx6j?U} zNfrVCi1Hj{jhsCg{2@4&3kpTXTKv2VL5b+p`;Hx9xVbQ#&;)nKu^B)VJHMHO5A_Ur z9o5#Z4M4}GAX%tK9S?e^#ZKAxeoHzGHmYUmesSZm z^ghtO2j@0aKiB!6@hjLx?K>8moQKjJeG%fHXlB0^7D6@{E%?Ncu|)fRoJ8jlqn!OC z1)6S| z!*CBPV1093qoti8AfO3&wO5OWl~^O-=>P0_veGVu+yOdA%O>>h%dcVBp*ZdN(9<#- zb9tBr+5I94{jP#%2(_dF$hu>k=u&*e8i3;n}~3{>>kJ7k#-Rr4_g4 zNHsHEWqL#!&gz`#XCVp+9LhKO2%`O^TSPzo=e%BD(h)ME??B8DZLpu~>t@k|A0g_$hstG1kCg)4SJA9S-cCsu=EyOZg^O+k-`f9Od+JDpOYzRkNA zbe%TnX7~QwGpRsbfPy@>8l~GJHPTR%pV?3Dm}L+WGSb_uno$=uGQ$d=NB30$0Ad0W zS@q9p)n{Xx?@CZ&&!J`GKkOiS_~%`l?OGA5I4hwp$No9G(?ugR4vcj#?vRE$R;R|U zf|AT-OHMOyeQ_Q^ji*BY;^XZX^qM}$aO8dkBPrE2>-gUNIR5BgKd{>~;Ie2~xwtfK zdytp1Rl6(jPt%rGmd)oV?v4D@ZXDwhCSvZU3^ znMB-LW({Bd^&UH@Z*O?8_0-q7W}>U+7a%-zz6x5osK@2gUT%80G=mcsXAcq8F-=Mt zVVx=!F4{>qbqC_dY>w%$ANzrcm-^B4ia`K=>_e*KGqaYRkAc@+y52=JKl*iT1CSHN z`1gegKR}_|)>ona@6x|wWzr4(i%Y*ZEut=sei&##ucKKHD>E;}B7PYs6``4|++^d+ zT2OK3fD`4l^O%?N$W}i)+1sY8R#Dn)qM>D+3_N~di3OD!hq>%LRq1d&#Lkcd|7sQ# zB*VD(Gj);TlEId?6hRR2oKSY31x=oK&G*b4lzM(j6S`29%9Y7kjZ4<(aI}g8Zq+I2F`RV$+(XWAD zQWA8j(&rhqnvd%hIIHrNB}aI6`omkjGgieIzF&9J=NnPRxi@lwtVgVqrk5-3#LFyf z2zm)Qpdg-`vNn-fD#tylt7M4ysP;QiYXJEGEDvBHTteAYD^)(buhd`IAeFL|Y5xft z1E93a6ERjePzO1}CI(M)<4#jlTAobDr6zu2Iv?oXe9+l(s?ueb9ZIJ1QO?z+Azl&j z#iE2$s|_9p;~qMTek0;UQ%rIi_kji|h@tUOc@Yqxp1z#$2dh7U64gv#Wk|PENq8#4 zhWNmNSjJj1A>E$XrE+5lw~_LsEq+>iCX<6T*0L=>t;}jxV~ylG#HwL6)5NCy#u4Ig za=xhm`D$?=`fMgA6W)4qrcK8&g11hSDA+RLR>ccx_jnGi@4>c8xa&#?75eS_qkTyY z6%QDIl>D?)+|OuZcjk*9f1bSLb7NoE&fS&OLj0*Kj6rdP4qVE!m+hdM$u^6JKDn31 z0{|#yq9xUJZM&c&vM^mOAD1XM(1AA+6k_Rg5vAWH`ZE@zXfmA;8%oo&1&8N~5$Y6E z{-mpV$EeyVvgW?$OKpdwt4ampKwhd;_3zuEdJ=vB@>$jXJ~DG+2@91Tbbdkq_49t+ zb$-9~{-iwby$P8z;%Klog`Lhp;f|M^xCn!HM(1EALqk74j=+3h=Vlk7jA~`u1BORR zCex}~c)_M|M*Wg-%X!nTapqOq;7qcmhDxNuF<#Vip~7lm2bjY~bt=Qj>Md6&rwrRw zRW>us1{q5ch=nCJOuXX8W**7ppZzc%7*!nhjpn#5{+qX)?_P$cnBui4`8MicG@Bu# zOX)_US?!Fphvqd!|h{BecEINC-w0ZQEPt7>37}2%cw)W%Z|Tu+eKDv0`PGYb#JH=+8b3X zZg%GXh71^ITyGudc`c}35WMPss{6^@+wsNMQrtHvDR8zJ zL6@c`%a6l!(X;4Pd1(?lrkZdYH+L2g(;f`Gqi0&sT(eiMXHVqD{;|d^ z@sG=Lo64e9bY81D{EufCe3Zo zhtwA-GTHdx3&uT!9caWCm>@{M>{v3#Tr4Wl`Qh1Ue#+ZI#!;y(T$+dgnvkUBh>es* z?4rs|VQ(8qz(``qj!cObc|3vEuX%Kur)=fP=prWFpaB^aas*7WfpE|4UN6mLs+H{G z9?#AMGz9uCIa8HD-tfFlaaL$zYs6eD!_`BCBj~(@k|@nrPp~rXIFQ% zm$xHI!`XCB`b-X*TlQ9=b;s&7QcGE?VqyQ`w3Spc`>3k?8@@AwUxw5ej?6_YyCcBBb_r10u4il` z{NM>wYe*7$llFQ9DI`niU{WQdEd#)d9r02Rj>GWEDP~@H58;U6-*UaMV$KoHw<0cO zEMP10F&HGL7B}wCnmOi~ zu^3jt0MtU`Mr99!I%}AI)+%mTR#P%$DmSfevz}}QAPDkbRKH51 zjQ3>aWT^9Xz$yQVIiyG6k^dm(^JIdL<$4k0pAu{GK?K0xZKP*f(Y#859tC@#YHMlQ zMBj_BY$qD|Nyvc3Dk=EF&C5SFg(Rb^VpY?#&Lv?JoYO$F$;j%qj-zU3n1K7B-S^d! zF?SDquZ{aWUdxqCpMSaD?>UFLEi`MK-jze?`EjJS)(*D`gtzl>oI5qNOc;g($EafY ztQFFV^`n4dL}@^BDkcnu@wP3>>uOLUSs-I*XExbLF=9XbI=XzNTk=flftM_%Sp*&@ zY|3IW>Py?BR9!$>%Ej4Cn7Jp!WE8ExQ!=n%B18I(W? zwVxd_DW(jkDzH8j>Ds!5vJOJjVd2=-)iz15NGk)=Et((OF*K+fT{Hpq3-M1hRo&US zZEzTL5aj!7=NqzYCnbehI+9?x}u5FGt zem7_^?^i8Kq@ZYpjjKmyt_eq{*Z(02s9k;-^7Qj*AnjLOldM@EbCu$We64jk8%dU# zV{IIWs>Tz@DVf#bY}A>6^^}cQ1hbdatV;c=9$O;H@AxHDP?!Ek8l{vuWt(Wk?7BG` z#8#GY<<{Q8jxtJ-G7j3uO!2nxU%$PaUY)qR_mDevoeFy|{);)OVOdu}1;oCigkEaM zd$=F-tZkgNj5o9qkXSXWbe-MwP2kLMDm2@+gLvmJO%&#DAPnvDDKV^yk-gnr}>!@J0d7_qjB^xy(c zC29d#)i2)*VvFh%FuxM)cb6=!yu-r`$Oh3y%z)_fBZAGU5kDimfnrh(fvtc$J1fyj6pHqr>n0S3eczt z6@VxmhGe;nig5-32#B>Io`lOr0|b0U&K-%8f(pRSJ&xG61*Ei7Xg{j7&n*T2Ci(r1 z^1la9qY+6V)YT1}J9?C#1!m{LB~n9p0_4i}&R!RH6eML~Qu6Er5iR4UrgAzW{f7|$ zYZUP;C-3}5e#Q1;O4KMKe9p6Nk^aqsBllIV_08^9m#zQzEJX3cF~%Ant3U}~ zhcZ|P7Di)0S&xlOWF>JI6dvC!RYCy9bzsI2OIK*Ovq>EcHzR#O38z&rZ-BRl``SzE?a>SYT_{t-EuJ{aiJNZ%Lg8-i?DJXAB4N~i-_AT;?|UNx zJaz_IPkbR6H+tT#xV;bZI)O4=e@jXT^Exz*JD`FpW0wv}n&AzVPka(=A_MLOpH-IP zOlm;$eCvXS7qNJERqXbKp{hy^zI@^RQS^b!1>@FkB?Q*(~#vw z>(xq2Ry{ef`0X1?5eObGM2IvrlZzWQ_R;lI1yaFX&d z0q9-Q;E^RRfp-+~Mv9-zNHS3EGzPj@njuIAe9TlfJdlI$^}$Y?;cE{4y9$WPo*cWM zA){>YYfGqQPhdY6H z)&N6{Z50_Mq_C7 z4CZsM&^Aj==2nMIs4=-&yeSU=fKuQy#=Ck9D_vq zEv`Gkm5)?-%%deZ5Qae{In^y9*e56hWM;P-82N>uu#8CsJoHJ|zt{I6jPirsYTN)9 z3uOW`vmq2mrz_>|cY0qOa$=V}o!@Jpu1-_q+K~V_n11%Ak`g77=k~<7v!5rAlMdJr zkD^nPTmj&}ez1^XYdeJee!unYKPyvTLymQYLjX8sV7X2xaRcnQlKcz>MkEL*qFYat z1u|c5GTo?hW>uhhuq)*L{hV{L1N@jAY38lW!hv{HcC|c{CyTs)HFsotseo6B01BRm ze0UIl=b4jye((1iOC47#4R9e@@AOtL=l8ogq`FLr>oi;%9_$h(NC3z5pzO9|FsBEA zy*yAbY3GkycneHx{Y2d5=<08H#~|v2E#6UV8blbTS44pa{(i- z9Qe+#Cg^N!rI6<&Al?5RK`>OH;Qtv^(*OGt#{Z5yiT{t0_y6ZfP)Uls0017ktc2+I z|7Xxk{IY%7JLF&b$>8|BfvlXUZ!r4!Ao-Sgl5L)a*QO=d*%kzs-;mm^JyOlUNPm_B zJ>z?n*~3C^q}%Fh=`t++*!G2+#bj~o?b&ch$m0Xcb%r8gKQE0@TJy6AhCPw)cmx&E ziB~@L&@v067r4K$@a56t6Sf%7-r)Pg@!pkd2^H5?n}uHB#>F9ojANR;QID}Q@s_1I z9PRZs^kUK{qHO6AUUi1%?XkFCWgu99G4KZR!DNGEZouHv9_hD&gCMSK)MQuZV(zc1 z)03u;$VUNONhBD>er9N{(P=4*g(I^gX!G*&TDjbn=1TMEd1RB9KVmd8`W6V8*nHA^ zVBxtP+o_`cozSg-mx3i~tEHuI%A$6P$ven!OWDX78(Ua-4H*E?zj!p?zA?pcs))E6MHozwmB|Z{9bF@z0razdk+}b=`<5N`3HB0C)8@v#Hf`FxS2#18|1ZOCY*+%vRyD|L_T`&6=kXN zc};ql0rMn&)Bh5MSGAm{AD_2iG#aLj0k~_-7`3PN(L5~41@HUAen&dSX!P;pvoDw(w9ao#p`P+YTXKSe#L{=>fyI&zign9F z_a9T4CLC6;U1>E8yt~c3i4eVAz&XvQsy^O^+qC`puKE*|p5}yx#(}(~G?JH_=oOvI z;F8O0&mVaW78e3=05e?sjn=B`Hk2%*weE+u4r0mxQ{$P`!IKRVab9^tFLMWCv|fJO zvw%X{?)#TPhNpIjfY^ov`xgG!GzcYsiTksq*6F5q^EzC*HhSZd zrBSawufZ{E719BO%Zo| zlKv0v!AaH1%0h?X4x)v$kz{7UeL0n+{af~t)>Ovz;cNYpmH_HT-oNixTcn?POdd+! zFPCY3dl{yet2j?3SsOl@0)%!lYKK*QC3kJR!`x}?0PFx}%h6OCv!pIFRa@pbczI(s3yo!lY z1Q3}dRDZa%Sni%{J8jXnGlR)gj_iezfu;=uLwb^8+PP`$IUPfKj^x!E+DhA~dB@o7 zp~Y6|JvLmzSRC-9OHb96wHpqZn|v|KQ4+m?K$Bwk^$w&go zl#GiaIBsBY7c%KZ1$xb@sNnxaF8T;hNYi!xD~lQTDwEdXs&})vgDYnXl{;_`9jg0K=`*{oA zu@WamqPxof~5K z=zu^xXJk1lWijaRo^U{_pKv8Y0ZeolEn6Gb3p7;yZVkFBTNXr=;5U|Ca774T^%03Yb3re;abWwbrk3z{F^yYkeRWkUoUo>n;46^%`$ z;nb|9=|7jDoaLpbj5|hy)O_;Om>z!*n^~U3o->;RdJXCuzNh6FUw*ogqRhx%Q9E9) zHCjCE!Q7E(>z+^f{G9Ow;Qv0lpTYGrAlks;cOb3pH%k4_pxOF=gMzA+4EF~=K{ppl zJ@{_wW^*Qk%-o7%!)mb?msBpTyOu^YM|hKsD9>36D}N{+SK7d^-<)W0px|)9EhFQz zi6u|mu~fxk4hU$pH0QMf01p38BUc*DhPJjtk7`wqQc7!TDK)EVsi``|?3gO%sVah+ zBT^!X4rZask%rRZIEI*OsCfvA5XCi?n8grM^AO~wXWjL!@5lXdpSAz&wcmHI^{%z| zUeB}lyWd{&9n$Qw(qq<+ly#_kKdt)m5DQICK47=D=Vc6QGA<6=pHJRd*a9b(CJ3|w z9-8yAH(Ir-#|eSDzETl^KB+iUzwydLT>X%Dh^cn-?LVJ~XA=lA#W}~PnQ^XI+oa79 zW$*4U);?2K4U6S+>PV}Si{YhX(Duyq^yGAhCd$rrEcwHhFrGuyu41RaT2`v5+Sg^C z*3(YDm@v;i23@bear6yYSJZZ~MHNd`h;Y+$U}#0H4PQaRzhpWpr9BEdxMA?*(X*S% z@kjmeEiQyJeUW~`_(2~LTt_OPSkX(v)`fZUX;;|+m$3U|4uN_Dr1u#*2=7C-p*|#e zFaUB`!V`L0QCo%>y*}j_uA*0O{Q)XspK4$2zL;6}bJ{YHJot%Jnap&@=?)L?38mrp z8|t3*$)2haX;9!F%LWLmgg)C@q0m=->S@mfMD!6>sTfuc02PYuEpn>yPDBQvB&X`f z8ac)tDiqM<*RMOc_~cM~eKHg#>GD0v&Ms1rzmLrPpPaV7z-!YxSNws|FE3Z45h_7!T@HC zjrj{5U^cZ}e2(?&I`c+Esj?yj4%gde3Fvj){;ldXt1mHzjV#a;T0*S_deHTsQDgn5qn=wWJz5vn_Eo z*?p`pTCNJ&Sgoj2PsrA%f6VT5TN# zRn`zO!ho)#HjH-vT;ZP2ORsmgKqU{U8J5j;q2C6XLQ|221ln6YQe6dfov?TFH9Pic z*M>n#BbV#S;d~!X(w({;nyO!Nvweh4M^0lAldu7dYcrz5FFB5%_s@N=3um+K%Sube z@OCG#17dRI>$Y=eJ8Yh_TzU)$2LNu|jA?N4TdiZwdSRs=vG(WJ9pl2nqJ&%P(2L zs$rDCj``VsA>zfWYzFTy=!(Vu#~?=P$n+5t&u(TfYyV@E6#c&#b=`|c>;4xSX)Hh0 z(ABs)+sCH~$f(-scgH7qf%@^=L$u zQwup<-9h^EPzQ_^=Eab{`i;LI@8%81Q-^mIsm1eswugyVde5OP8bYT|-LDIW7-7ku zOjsz|77bp6tdf!1-o4fO`YSq7!OD;Y@FsoFYG)j^SF2FouQUz~QlelReWM=OH9TP@3^#FbjB<^dF_a|m7YqT{ zk((nD8+jrjjpFmfr9Zx?@RFwK9sxc_*&Vn%RjtAQqt6-k;;QOf?h;Uk`}fgPB)&v~ z3+S8{vU|$`eO?a+uDPMiVZ}G*gkEh0WhmB-8>eb&Kwv8~nJd#ZsMhUVfXgTQoxG57 z(NgIZXp6vS4(t=rj*WeM>u_k9j<6e&rFY0(vL3f!i*p-a)Mcxp@bw1!g&wR}NGkZP zA02y2;A=aKBvT&j&J4kr)HE3O$fUb4_CK^c*Ld<{)r+k!hKk(b^ua}1X}vBt7K(O) zdTJlhEZ(hbU+MpREChJCo3I!M2R34=E!aw$#1ubHD`&>lk$<3a4gw^av+e4$kRj2Ww{OP22Tf4dbZX+(n zBlliXpr{-y3YtDaDYDh*X93_M>{S(H!+Z%#qs(#}8@}x4XKZXL!2zNBl-u-C?K-dR zOkb~5Qd;s_7lLoDCNLWQ#?E1*qEC5;&Df%e(l(Bj;Grd- z^iwoq|MHM-@HduYy&mISPFdKVi*saLQY@l{pKg}Jm;45qU%*SbR4A|CF8fM$*b*~v zR`0y6PlczkOan;CJRHOcvMDh0%s8{rD&+P1fh&IatHnn{8`)XHHJGy3+OuwBR;`w; zZz5FBHY*mi_Etnl|NQ>8--0L&GmAM?zb}?d-=p4AxXcY{R@VsW*di1@42ndCC1>Sd z{C(KJ!Hq{N%u6h_rdCLZTZv@mZMhH~Oo>(tgFcig8Y04GXu8U937AB5P*v$q`P&ZMEyIfc!#%9>ej-{@?_6$B|C=? zE&N77_YMncAFLeOX*nIQJC{gTb#DAX7!ogE$izLv-raC6D92ot&Etu0{vkqy+#`|K zrR20MPNqPFIcWq`O6CIDlt32MiqVhD8Oh{67H}W!rSNj#HWq`Y9$;`y zw_Ip(ZTpi5nEziM^@LGN=KYZCx5?2yYc?al{3zGvJun~nYV2DD%voRE12snHdO6TQ z@eSRy==WFwBj=X1*hvStx~x#rT8&uErSILl(zHZFY759BBDFoV2c3VuE%~v1d0^*M&rVHCX+~6NnSR*9 z%7}Z2-5^n_o=7bQdRhNOy`+{*w?ZWoqE&dB6Stq-Naw{Y-pgRFP@m7;E}tf7)#Wec zeX(hV{07PIEndL+P5&|=TBLhW?x#!X8^qMuNhkM811rsKeqc&ujJHiACv*MLrZoDi z4mk1wy+*OKivE~?F>0W(+Z6MHQnd{VxE9qYk=!K%yqPyYenpQR{nhr?8@kLJSGh(O z`%p2bd;3eM$$6>Hr}Z_9UQTcS%t%xV{FvOO*s>D%dY3jl-8_NHS{GuBoo?Z+nW-H> zx2F3Gpy#5BcaSXDT6a?&yPk7Xu2IWMdDy_%)>S)fp+|>tbv}3Zie;-eceFlAW)Upr zBc9P^fnV&pC5+cEc%Re%)Dcu^p>pB?KP)ym7w>aBDC;&%{BEGUkn=S9Mk>e?zS%!h zwx)WO_Izflmi<#lZpokVr;b{`|zPG#ftiMNzrOR0B^IBXSUf$x!4c}G%*?j%_m zpXgM>IDo+TnOc#`o1J2|5z&^Q8>v5v!yPWzD~M`sr!TBs0u6gP^dDW-{JV7iy$5O( z_QKukC@0Rxy}#JBlv)Bzo774**4*|fE`o7e!A7(!i0MoGGbw7_NBdFJVN<(!vV@)1Zy2Lu&RuG%b zEk3sHo@yh;qrg?mF)wcL>^o#Wh_ygOMG1inO5+6j_~&=dfvF;To?d0s@LXnV_6v%E z#;_)(8oArkOKkpfGs(FqU8+7QEX0kI^Qj*IMHZyQ+NDqRT;iUdy^S4FiGE4>87+mG zGTFe`5{)`k^4^GxB@4?c_Cj2cLe~>Zme{?YIav^5%{WqMAQd#>GATX8qe0034C8!u7U>EGw#&hH` zL9_^w7dgzi#@izj%mWVah!XHR{@dPslPM=anUw{nz`UHTOnD z`#`E!VV@U3teZPWe>&}!ekjqJjO9O_L}%h+H|?5NYOT&S;LhPN1!)1!?v|O{2K&5 z2;KQoWM_woG(QH+XuLTT1pw~G61KIE8KwY$2QVKE0DO-&W0tS|%$@b?@Zw)AREiUC;T#pp*89+mvZFxNqrQR|fMb;{KWHni{^v z>8d@nHhcqNZ=bFkdkX+)DfqcMOypNoNl(X}h^y~2g7XUsVpLQa+h`#H<}kdlptd#y zL79P^(3+`Kv!Pn|wmGKXN4}^y(OJ48Gu99PORU)pR&E^|;OF00X#ge+bWDIHk6m8> E8yJd}&j0`b literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 61c76dc..4754dd9 100644 --- a/readme.md +++ b/readme.md @@ -19,6 +19,7 @@ Demo: [Pandorabox Server map](https://pandorabox.io/map/#-1782.25/493.5/10) * [Parameters](doc/params.md) * [Search](doc/search.md) * [Configuration](doc/config.md) +* [Recommended specs](doc/recommended_specs.md) * [Contribution](doc/contrib.md) * [Development](doc/dev.md) * [License](doc/license.md)