From 7a0f3421dd3495324d79bb612ae77684e8fbede7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C4=93teris=20Caune?= Date: Tue, 18 Feb 2020 16:48:01 +0200 Subject: [PATCH] Setup instructions for Prometheus. --- hc/front/templatetags/hc_extras.py | 13 ++++ hc/front/urls.py | 8 +- hc/front/views.py | 6 ++ static/img/integrations/prometheus.png | Bin 0 -> 2489 bytes .../img/integrations/setup_prometheus_1.png | Bin 0 -> 39688 bytes templates/front/channels.html | 10 +++ templates/integrations/add_prometheus.html | 72 ++++++++++++++++++ 7 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 static/img/integrations/prometheus.png create mode 100644 static/img/integrations/setup_prometheus_1.png create mode 100644 templates/integrations/add_prometheus.html diff --git a/hc/front/templatetags/hc_extras.py b/hc/front/templatetags/hc_extras.py index 5f1e31e9..16fc643f 100644 --- a/hc/front/templatetags/hc_extras.py +++ b/hc/front/templatetags/hc_extras.py @@ -40,6 +40,19 @@ def site_root(): return settings.SITE_ROOT +@register.simple_tag +def site_scheme(): + parts = settings.SITE_ROOT.split("://") + assert parts[0] in ("http", "https") + return parts[0] + + +@register.simple_tag +def site_hostname(): + parts = settings.SITE_ROOT.split("://") + return parts[1] + + @register.simple_tag def site_version(): return settings.VERSION diff --git a/hc/front/urls.py b/hc/front/urls.py index 21511b42..ade96a74 100644 --- a/hc/front/urls.py +++ b/hc/front/urls.py @@ -49,6 +49,7 @@ channel_urls = [ path("add_matrix/", views.add_matrix, name="hc-add-matrix"), path("add_apprise/", views.add_apprise, name="hc-add-apprise"), path("add_msteams/", views.add_msteams, name="hc-add-msteams"), + path("add_prometheus/", views.add_prometheus, name="hc-add-prometheus"), path("/checks/", views.channel_checks, name="hc-channel-checks"), path("/name/", views.update_channel_name, name="hc-channel-name"), path("/test/", views.send_test_notification, name="hc-channel-test"), @@ -70,11 +71,8 @@ urlpatterns = [ path("projects//checks/add/", views.add_check, name="hc-add-check"), path("checks/cron_preview/", views.cron_preview), path("projects//checks/status/", views.status, name="hc-status"), - path( - "projects//checks/metrics/", - views.metrics, - name="hc-metrics", - ), + path("projects//checks/metrics/", views.metrics,), + path("projects//metrics/", views.metrics, name="hc-metrics",), path("checks//", include(check_urls)), path("integrations/", include(channel_urls)), path("docs/", views.serve_doc, name="hc-docs"), diff --git a/hc/front/views.py b/hc/front/views.py index dbfff65e..bb8b5690 100644 --- a/hc/front/views.py +++ b/hc/front/views.py @@ -1542,6 +1542,12 @@ def add_msteams(request): return render(request, "integrations/add_msteams.html", ctx) +@login_required +def add_prometheus(request): + ctx = {"page": "channels", "project": request.project} + return render(request, "integrations/add_prometheus.html", ctx) + + def metrics(request, code, key): if len(key) != 32: return HttpResponseBadRequest() diff --git a/static/img/integrations/prometheus.png b/static/img/integrations/prometheus.png new file mode 100644 index 0000000000000000000000000000000000000000..749846319a8a8ef15ff81d8893c92d1e2f950df6 GIT binary patch literal 2489 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 EACi%upa1{> literal 0 HcmV?d00001 diff --git a/static/img/integrations/setup_prometheus_1.png b/static/img/integrations/setup_prometheus_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3529815450b20b6719bc5a89041562eb46eacdff GIT binary patch literal 39688 zcmc$kbC6`ux8U2hZA?$w=Jd2ZZQHhO+nly-+qT`+wz>WNz1`Rs@q6#TeX$jBPgR{f zc`NhYyp^AWFgY1fco-ZQARr)kaWP>9ARrLM?*kGF;#;HU-)9R1gy!$AsOqSo=R#y_ zZ)0p`X+-4cW@|)bsg(TbHZDP3bKIcG)xE{lD!%Uip8YUu6jLwxoXa9q4U zlne+2$nCIp$Q*pQJ7w*k?1Pf?4G#nMizb$Fb#nZ&QKzrjj;GweG*xo^{C)6UrnifD zbIxuu4tc)bJ%haNt5*@%}84=njBDv)HrF|ecc0Z_CC1XN#rt2O(RD;E;!4XlxxGkn>AgAFW$H| z4Z~+`bX*_2Uu|O+S4cF1^+}w;hwX>4%fH7*qFA zw?EPe@!#3IuRyc%=bU7E$sR6~bgR>iamF$~0Y6dprcmb{_dR?jJ=FQV6ITQv=HVTT z{5GSPkw{x()?nDD{m$Z}hPu@IlOEs%LR(z)ndoAHGql9$xHUTHr;vvwyt$a4h+hRE zG$p(_9Y&;~(hg?eH!`NtT&f>NyAeQX$w+2@1T8eoh$}~iy;9XG{NfElla`<=jyE?i z1;iT2a023k4_VJ15#>dQaC_@LzryYYqf@hA8W75F2xo2Th&1Vo7_mB^I1ASHV>M_&7XQ}igQJc=*HJpz=m}V)XLm; zUzF5I?8&U`r2`sWbVqsP8>kTXY5m}-^X2BuJFYN2E1Z}I_|7YxyV)dh%*7_jD{J-Q z9T7{p%qMQ8)#<`5v8v~*o;`Fur?UEys#F#pgzSi=cC>^kcP8@usVA2J`7k2-R|7ZO z(1wxiI!{l&s)v3NE%UUxTAMk0E9`Z4ogWJd*2;h6^3%ps8M>qO(UaXo6* zv{^}SG77X*t3xB)Q3&0OFsf|&JYl)Tt3;ZimISCHcG1k$nKna@_7P+1>Th8cMlUkO z4DiD&OpQnORl-atC-IM54Z63B4M4>$M}L6GTij===Cjyn*d@nwjX_Em(Vd?Jyd7SI z#axPYCFL+H?U&fp#d3F*aUBQ*N-D+B=_NRHDjknFr9ppElJPZ)2|hp&QWI&OOVZ!3 zAqZR6r!Nb|W1#E{qAb;qBvU3dF@^|et<(>LwNU^_#pT2YM1IG!mKDz{oI$kagua92 z3oBC&&z@#F;(&+4{7Bf4&vZe5>dF`9vX82rNc(j<&<>Iu*|Sm(Nfgl0T#1pZPom3C zsnKo=Ww(%j4Hv%gJKw{zRJm zCBy!Jgb0RlWEsTMPzTxAhd!FL6j^}d)Md{LtiJ#x;8+|_%2ALxYY};JWgDpwIrinH{6$lsD@K7sRe^7iW8nYuu0Ed>-H0T}+u)G6BLq;(+`3 zkXB=7>McJDO$S;Il&!7Yv@_W36B4|AyFWF=w}>A~lnMShGt8y4wWn+H@?b#Jc%YtJ zOwfF!phEs3$0n|rbgbZsVQ2>u1be{S>9oTxD^~?`w;~r(Q?#adp(kd+y?9T5De}Yx zpmiOP0@dU)Z5fn-EN(e#V3YlXDl^0x)?`HFa%b3LA^X91)(8g(fdkfO(Yzylv5X1{ z?2_b?bZ@!PqYc9%p-e^jLPWS})`5#aWei&2SZW0n5xDF%aBOf5sX50;h1SBa3J#S+ zR!(J((anZvFv15$*j#eS>2Xr=v^4$_Atd&*MZ1S$Dds>$-QpUw))@)c!N~S%ha?k% zX9Y+>1S6kAk=*M^l9IJl&rSA-Mc2@d#O2C|w7^(_EEUs+N^zsj1$BF~c6;o4Wc~G= zNe&=6G(5W?dgnCPzG{H=lMvw1k76zx`6YAAPW_T}+NEZqvFcRiW(Tlr{`-BgtPL&!moYl3U(Hs*~hv+PKie1Tyl5P z*}Q9NTOe>wXzrzofSv^VtuFn`qu%a0YJS18?l7wZYdPDpl2bDG)k#RSRtUt&*g^Qo zrTHU`Ohu98?mNc{we=y5D>lPoBmX|oqWHTDOXW&G zRwA>PHz^uEtuZ>&!?J>j@*ST9uCZDI^q#~CM%|}P!_(hfTOPkl|43ltNBwAgX}WPe z5F)a+t*ca30$Ll{U(-<7znus`Xgu?5MZF^<8VVUdob>}g8v;dPZFE4ce08s7lc9D- z6JZ)tJr&|a0#Ne{kVjf4fE@KpsjVv@TIqS{%5)Q%ueIhtA1n2`_i-FXi>g>UFB=s( z@7xh!Xe}O1Bt;47lXhK~S;uQh`-4C1qF%BhK4Bq277cx^YG>tFv#T69LP>syv<{Qg zNcCQn*|Fj|Ed=28ARnBPy!!v_f5fvwQ;5I)C>Kyfa@gRWa;EpLN9|6HD>waOtY%?3 z#K5POET1F6InV6njQTRd$QcIz(C^o^gI=2FdGgMoWL}W^vQ2Gg3C_zWwM(DfrTgV1 zw)o^^ie4Q{rF*DsF*b+Qx$_Ymn%bUG_$mrDh{;owvf^%-=5lpT|tj?J)s$b@EgP@yioJ9pfbkW28hSgeC~8L=y}`E@DsE3F02_ zRO(bNh6^P{wMyh6u*!?lA-!{L^;ftU*2VY*)(qOZ#hv2%Wrfr&vWN&zJOqY32hejh zlZW#$_c@m{QirufhJo|1b5=GCUnukj$3ob;j?GOLfwREl<|!i6H=HbNqQE|udtR~* z>OVft7@D3|Pw%VcFN5H>&_+h+bNtCEtgQpb?H06Lui2+FY@`TKY+P<;e+*YyM;EoY zG%p{M-bDQotNR;s2Sy;gA(_ZH8?La7=y~3GWD@N1vN3d(mTLgVl%p^3eE3?&+!GL74h%P0RLVw9FutCh_jgSi2SiX~I`YDh`CQ4Z0HaZmH z9|XaSZGr`YA~vhXa>u!Izr5uo~pFGbslzA#os&jzBLq-DwBYsHX$^rbQN!hZf* zi;$5?>_Qwlmn*qaQ2E`KvnTJGjFFV_V*;DI>6|YWGVx1)@40D7Z7mx9DwK4pX-2Xq zE)uy=8D>ob@nEc$)na&)i{ixk18#!xtcP4S$BuZ*^6a*t6IAZ*C)0&5xD>!1mU*-j zvW^o$?+CqC-0 z-;pxVKd~;%NMLpX7z!Dwa37Jq^khu=?94&ehbCvxCFbXf3h z5j3Rj#Pdtwg8vK^ zh^HQ+Cd+eGsw~5AmYFQ6fnp7KObX>P(Pv^Xf?pleP&+k%Cmj@Dw?8=X^1ip|8dAG& z-_v&u`tCuG8x#nhSK&3#47sJOn+;yn5z3Cx(2@IMnXx>&i@r*r1HGvR8IsetCM?MS z8kxU8CyIqo;!Q3-(b3WyF11+enU+QV!}#vejWq|c1N073+2M8-gyzJHUT*)_N18}L zf+_#Cskx-E>>F0@KBwe#+~}0QLC9ZbVWrZ-+|F!xY!sqrbAK_q!>YbHkyz%P&w4^l zyC&eiAQ|dO{MY*(D?$SMDpJ@TvW5*RA`h{80lUIf7vWt3Xu}hy}0+kGq!y z706>{bVVsh-LmPdcMJYSkHwYtfZMfJbuFf(L+i+RROS^dgHP&|g>nPgKywo~T`(F- zL^R8No#WkEaxKdqCfXCyNQpTyMsw{s*wO!Sa@ek~T(~B0Thq%GtWHetWaL`Ayf0~2 z08eq~?H=gxnkGdtqDXf$Ki5wf&rKycC;s}-V}@n^bB>WzzHu@vJQKD`48A_g?RkfLh;+=qJ;el?co*mYx z60dfpdsm7;tX%;=qSL`_?C~F$dnG7dHgZlyBH~)6H*zx{@^)XK2xMYFEJ)(YtkXp3 zp#uKAq8!@ppnoDRuiM|u;>Rferd3EeUnGZPTrj6CeNF~~j}pk<5-DB+JUy0qb2y9} zOf~m~RDpbg{IJZ%QrDy8_I%D?L(Zq`$eO;P(L19kGaQU24psy*%*Q)Gl91H64Vlj(alu}tP(>-A`gH}I3~@O{z&zOAx-%3 zjdLDZK=NM8y~w@r6izB&kls^4|CRrlc7EeGRouqL1J6xN*|3Up^ru7H#B-jrrx%r(_>w6QR#w!TaLM;wcdM)C0E}=Xz`;*!R z9U`0=#2v*4Ce_kvnB17-&pg0<50#jg6_xXN{zah$M6xcLvHqKvIV`xPEMqTgs<1mm zp|t7WY$4Nny71lsI%H@OZgMYbgOfKnIpe;BzpWz)*<5tI?u#nXU2+94+03N+VEOHx z%c7=k}K#3+v@Aa7jBfjhpGj43+hkFCWEp zw{uhp^G;IsT<(OVbeq5@KU{`e^DwgF2!gE&N0vnQf&7wPKAY14GCUEy5@vd0J6my{ zk{UnAvT&ybHQ0aG>{C+Y^23D|^q2F`WApjz&O;#OjdJ1dBfLHZ9>AiR_+o8<%&y^m zjRo8FF^q3@H>|NkSe-ljnC7a~T})hKTGI{;PBw#qdQki0mlvxr1b2^?o)mql8@Y6A z%*+qa70^*(&N;31Tu1>17D*feA24F#BWxK0q~YwpEQm%6v;s>&PZd^(sj`+Va$n_U zqy$)b61>t=o%lm4vRx0cS}}P)5Ya(2A165ehS@>?SiIh}yW`5M-pw7VLMeg_K>BGh zk5ebycif(bZWj=-S_j*!TJe^L&ldAht+KOuSsy##zD! z%S(E_LVXuWEV33GM8TZx!gNw`NcPpPm+aksOf#UuK_W2Krb+JM$s(YpfFFC`d&o2L z8s}Pe*fk^grQOX_s{ehHr%P*1XL8>F=jiI_MhZ0bSMBTwR__~aY(&$}mfGYyAr=#H zwHi?)*>_M9LSIr;80ZUV1BlOgu@dfE18pm&<^TjlNBYkJ>{`h0{H=s^6qo)Dc>scf z@DqM5>F+iW5D}2Lu%M#r+WDrBRHDh>r!SXg27&P`QtW#VV>W8ksa0ZRwTunxq}f2T zJ^xK3_p(HO-T82epaFm07)KYx7U)zSp+`ke^;(J<%J6lx&)h#AFeWN$vRo7(50;c_ z;FC-y%hA?&Y$PGs_-#F6IWM2RzP=6mgAbzo)q%n$m#u)d>bGIfqqeHI^x?m=rfA6D zua~v1!kfDqwX>JQJJgZH@OH*&WY?0d+Zwh~{oD+u zq<$c-sDqYK=IhU%hqcN;FE?OqElg5uIhTCzTE0oPEb1bpS$*SJO%1U_Y-YlP^XvDP z-Toykd?0_rZj%=tiGXr!WpMR)p_mQFtB{0^jc;7@#WL({RlJ7j&B0E>BOq$Um>tgM z&&4k+EQ~>Znce-%o~`{X+!iQqgn`%x(`ri_f;1p=OCyTCJP73Nm%2xNQ`87UZxtJY z6L=_tl!^iD`Ubio&1wdAY9Z?a9Oz?($CCYl&Box?lwM657x(vR2~q`;bVB+Xpw}(CL3xBu2v8+(aOLHe8RPNK07UVRP1{JoX5w6e)E) zck7TaHxX86aSxUwjBDuM+Gl3KP-)tj zI9~*Ph(7;*L(ioDj7(ul@Wsu1JJepIlcDp>(^L|kl%(c-Qw9Z0NNB6&pl}aV*A4^=Uz5k%=5p%Ed7Erx9QU|g z!t&&c9w%|wUow`ZvSOa*8@~=V4KD6Ap%@)OKdoO}+)hIV6A!rDP+A_Z`19UZ4#Bmb zUEXt#tUgap3C6yzd}uo^DeYYwIR-LxZak$WiF5wtceu_TV{aYL|ak&26sr zL2hC~e;^KgWo2DiyJpAl!F#U%6=*Dgdt$S<(rSS3(~XJo8>>i5&OG~6Mqp{0Ma3f1 zuiYCN%PZ*sksZ3nUKR~7;kF9URmLy;u^{ANLf=~hUOq1^u0-DYY|1kuq_Rzf+#j5# zBd!z_!MS?mPKZCOZhH3ujUZZs#a3q@PDM+*bB1^!F?iA-cx6N+^#cy6pzs+S0lcTx zivM@OB+E01a3r4jmK71bQ?1dX(QT(nT#WLTPpgi$H1hfr#C zoyp2s3@y*f&|{;OYBQT%-RrJpCC*KEzXrY@6Prz5!-&Y-0h9{g<$ScL9B|7x`Rde-Uz39 zMhtVR_P|u16rAq45VxpIWPOz_WDqqx7Owt|BDa+&1=Z%Ep3!@NVt>9S&sH?Q7vvF$ zbP?4N!lR*#mw$AY#lG&7y*ABeAg}f5oB@#co|xJb2{-$yO)CreP~Sq54q?%YC0>yU zY@rM;#6FzXOX{ED3{Ixj2o<)f)E5TUW|dn{cS}m?XlBRS0GH_QUx4sUOYxkl4&*5> zJdzI&>edCX=(vf80;K7(zMNVU6y12q;q3$04Gisv0$DAxeUva0M{VuyzG_6mUCRv| zo*-^gkh-$+S zw;WMs3h$V|D!c{5zzGJCnw-)e9=OHI%D3kgT9~(QX_^nb3Uryfdq<8-WRvjRM-kOE zZboDhoZQ<1fBsYa9d3C{JS7YQV{kNV*!L)^QE-+nQL0s zTlU_%tjIIXHT4#s<}hwD`^tW{1l`Rxt?{<(22IA(>9f)GflIlW_v?^i&xv;(AD_*PHm3>mgOPVy?Ob zf-*NP1D0PeQ7`m}nD1Gac~ke&;KWn(2!r3&)9Tq3<%(lscts$m#fb$?KOv)-gK8}t zBGbyYxR)CJWSm}~2o76$(0D+~3GXA$;?k2TRdm)%UV@_acK^w4##uO=PSMkcySwa@ zoI?Zf^s>2Hn@p}x+dYKyS;u@yWqN1aimtN-26m~7PV(T=>VN>Okx|HT&O;gl*UI#X zLHjY{<^Cqba=w#cjMmOFzDkWvX@PB#5>eQMiB8}R+mseI@LM=Hmr{H@d?Y`g?%dmXc|spaIxZx8ocfS@LcNI2sesI4VMB2Ms) z5&HPerQO8bre&IVf_TM*XEJ629M`Y>$XflP&%M2b&>U?VK7#g>Bag0rO_(Sl_lm&0 z7*6hZ!B5F@G0!_N!jPrA3jDo<$h1>wsdTQ8Kauo^Or$2<$Js1Yo1E0gI2NwX!xE9r zI2_*kKqh)a3tToTD(t~nc;b3WapLahH7rcLXwfka=9XZWZx_Tj^^aMCnjC2Z907@| zr3XXgQ`sR(^nByts5bUT8&DQY#S^gHR8lIXdIdYH$f7NIQGWoN=M34w$_%9;<2H6SUL*K`GG=u=VxrS6ibSxSQHvfk&MpHi3}Uv0_d$0 zwx*ohUncBn+u81>tMlaN?`MDpA8&YLk_A+nZ%gp{s6+8&wIWbuo&o;eI&_DWk5d4@ zPVS8bJZCf!t<8&Sp?RLD)w?98vZpvuAaY>-2QG;>IGyQ69d8*y+lhzLLz=X!v!aT{SE; zJsSL43S>|lSN}$I)%8Rtt@Ki$=DRz;ptAj{4V#WNaCMefTnxEAilAOLUh*^yk}w~| zSzSntQXAXZ9`>}wJ=R<1iRYq`{Cim~bn5k}l)-4y_-Pi^^L{o2kH((qfh~k%$z+G~ z85#1EZ6aQbf|wTOIUNI^BLrm_R!qS z+jFqD-q+%&2i4yitbx<1YNSY%v@_0$y(mJ0%BsK^U`jT6 z^rDT&SW_*P?RGx5dM8z-CK|kJXmCXKc`3QkvL7FW-NGR@_S3;nxgTvJ>Le0T^FTJD zvi#X`sWSb*a-II<`57-oNY5IGdO|3iy{hA@-F-v$?)+~5T5TmUhLf5;3Y_mq=x>;r ztllCQCFv&N_9s{RfuS^)W-A)VP>bUwie1{7Nl>X8V8|VD+88T>kBxb`*x_OTS>5M@ z5tB}f)Du*-HEvHR0sX0-jyCOm=Z*b&61RGOZgDbb$3)oIrd?+@$LF9U23*7MEh)wA z=Stshl?5zI#YghC_oJ5g&gWz0G_6NCKxZnd(YJEvjbC+eamlOW#v1d>ZTDx+Zy-R- zGeBj-GecBmT!rg~HdmS;FL5V*so;!S+KH7$!*`Oo}DBO0zgI4>M@Mvk(oYwQNGNcUqq zJdrWqMuDRVv5AZZ?fWqKj^>K)TLniii|!YbGQU=)TmP7xV8Q*8;5s^@wVaZ2%f%_t zpZsA-)iKiBq&!v7-8aNdw?p=;81e4z((TP~F=7G31c?9}++eUmIh6XnEidizL<$8^ zaBV_A*p@89>2UyfHmS@QxT-N8k2sJm&c+4i>xvy|n=6g2v+w7M?B}C9n!d_z^UB46 z4v4F}=96Vo5W_>1^$MjgtAb;SaEY_;onCb?;q)%c%Cif&s#x`<^dY5AxV-b0(fqwT zHR(yITuqwNc5?0+f|z{umw^--%HhV+7yXRqkKSNw_QaHO8zh^2D)Ltnt&X^Om{jm^ zYcIzx1J+6X)Ic0_$HNgcgu%A;p0f4P;#?H7PN4VA-IN=rIeuXhfilzL;rr>W!}AB= z8lS&+2dSW-x;HB)#;iNXWR5BO6X0Vs==1t4J#FLK{=tyfO}F1(MOasPAj)Ad$`a!V+8Cj$LM<4o(3o}%+Y%kQ->{mJV<$e*qyodbWvIj+i9j(zT8(>Za* z>yu?B@9=S8rR@fz-12nY)``1)LhyNUq3lnr+GP$ponqO4;pzw}zgaB6DoBQBFJ^bsFnvsiT`M}a^9V42 z#7ZeYZuDLw%nyk83i{uJQ-&7S4SHYn#9I!=CE??CH}qIsOtli9MUU0>kn^^TaMgnu zY@;RAavMJoQW);gwY0w>@e&~RWXd^p_oE4P=zU|AkgKI%(?>1CZj0Kciyak>PObiB z?mhpchrA|Nh6{Q;HviMTxK!FJgA}8#C)q@$7Bf3k2qj}t!loh5Nwz}x^2W}DMu?fs zlR?frxTC>O0p5&g&LlW!EuP;V9?V(d^~1ot9Pv!IZhUt{R}F7s^pWlRl5%5hm{d;F z7R+LquX3ykD8#l_%9v5`E@tFslztW_9Jf<570CmJT`JEo(^Y}Eq@bBx-r>jqirdKy z(Bfgb?8CidB)|T~=OTmUXEKv_(u&nodrFO{I4FaC1DXYV7g9W99>$Yoy1nYMa$NTK z8WU?n$sFIQ^Ot+4&Yxrc&{?M|t&aCBx`Zfa#7#FWRIsZ~jyoH+6K5l%jY zNM_eUzco~5^l`(d-?z+5o<`LA96U0b@q#>IWY|(c$0sfljBY23QWSpIt;*@slOH6C zuX7t2;-QiqFN4QJ@R3Otw$+*exVq;!n4W|)-UV3$oLb>N9&sZH9NC}9^!y*BKz!ZK zz}xFKa!>9&U+Nj$PVka%l;+;I0j*lz$&_l&G2@R1f5SDhBKy5tJt6OY$t2evV@73E zP*8mq;SO*F*mHe&3uT-;w0~4NIUMY$&AEKSAqwbooh?gwu~^eQBDvmiblq z@QTTY6{@v+*^njRBz8q8Ml9xU_m3Lunyy5fDY%BFiK=I!Pj8Z5tVND!U#f>uQJ%6is!30%{>EbVP` z##PqEvc*tjb}(3d0DkX>Fhk%jm5c+OW3mP6kDOcP2CB-SWfAP=XKPs(OeWpUw)E&* zrW>zB4Z?}2tUp6I?;%2lc=g|j?wl4zbXw17wRDL6qbYu)wIR-eU-r4r|GEDeLgo7m zm%V8TnA{gNCA^DGXw57bMW)N*6de8?0MFemiZaoL{_aeHjSG(&-A)d#OEy@qp9Oh$ zj=beIOyqNiql{x088l^Ac88{CLTt^=!0^SqT2N!_%f7yq=Ws~ZRItvtyn4)M7wF7Z zPwWLQ9*GQ-xwnvX=t<9i*xMOTR+ymE5FHTGj@`ydHLz#y%p=9&d3KX!iZxKZ(vu7i zF#R-QHn3(t%VJa5qiB6BcF25iVm7QGJshvnr=kebpu0Bqz@?mX*%g0Jtq*YCpkGbn zUD{BsM*xH&Ou<>d2iKh4NtA#kU_8yF&(`CN;qAt%-WfH`8g|>ye zR2fLWb2oG+j2uZ*P)E61M{53kTLuty#=h}~pF-@$o$ULZA`GAcdel;7-lHTlc?pNo zzIYXk*+;R@7_Gi(yR}b5)>0=#6e`5Pkvu(xOU*;7T#(VEEar~_Z;x+P4KMU07Q^_WNSjk^*ngMF_7cOXW~pvT2O zLR`jq0cGJ^EjfXv$?zVi%dSqkNr8ofE=dga7ul-@}aeyhi zV>t>!*0}Csk??vx=PMkkcE@J4;MoY1->WmZGY9=vmfsa-nCY3u(J$NQi`|nw`A-X+ z>LUxkXIWBzb$4&w9^q}G0rrg#{7pNe`pZRvto+4JoYNKP;sB8sFK;ae5;5NW?9#@l z5m1D^&6?? zW0y!_Ww=60)@&EXX?iimKy51c!B#|8cFlm1nq^j@aYFl=e>Z=hkqs}rni3jkUUjSA zRF4sfpI#=pNQD=@a}fgM@fj{qzf7`$o#6QX%>-CEq~O@=#kmxhU~zR)e^!2E!pLn> zn&nTgxCa-mV11?@$nKS4$U8z842AlBGAgPpT5cEHqWxt@wj6y!&-fNYT$%b%6*eR9 z6JB+ZBaHCL0G8&agwIpSiq)2YEIZ2Mb8EmgWWLl8dAzj8NKS8JG(_Rt(ei0rZv76! zX6=LirbgJse36NdqnBxzygsMaXheC*`j|#9l;FeF+v`PXO;twwWzx~c7{vOUdsmpU zYhRRuk&BPHSVR7V;?iRJB|-Maep1$ye@Vt-vl{F541VuxYO1VQa;5&_BrQ1`_iJ(N zI}UGSg}UM#y6oe46|$(2Ie7kFynS=$lc9C5^1SS|>3Q8-ZR*vTmG_nQ^UWpalX#K- z%Xb1DXnf`Rl+V;^H=y~<^dqOc4|TlOq|LRl=sPrWDSxlZf)hpeVcz}T{BB(rujP<9 zq~-vk$*(pV^OR})oNSaZT4feR>)}99#_2%zayCNkk)vmchJT^!UNw_#j@jNu65ABz z(pj4}9)Pcycv0x$nx}ubVO-{~)_vGqLf4&fC#PorH2(*X{dBKCUU$u-7*Sro(g3}V zINRMrS9^2`*yLg_?Qycfo?d)2;Xwh8t-Sj^+|Apy)oZ>%sxRncS$E3z5 zBm}HAT1d&rlm-9(&b0MH^V!*blZgMozyKt--0yt(Dy{aRf5vT4tJ(ngz9$EM$YH|I zcR61ZE?sx{1Rm$#3*{=_<>lLyf|3%w=wBw^#;KW^WZw_XiTjoKzjBdovAoxQ692Sj zi2Una_`j2ACEr%U|1SThI$UPSSwLGXS7}{OA5P`xR-_Ll2vQ`!XHjyfo#&=h zxl>a@WuNB)UN4ei=j9n2FTmlwbh;)#)o+)o2Ipsr^L4&Q>~~5LVZ~amGX3G8syDMe zSj#(TX@lJYnRjYqkXxI&$7=;9g87v`zU7_{N#W=i5gPg)HNXplyGv7=U)bY4zQ6nd ze_m!vI-@CTVhsyRbIVG;Q}q#xiVBT2)VbL-yQ@dCq1Q_ay!P0%Yew6fXQ26gF|$1i zhUE&=4-?xHh*5d~I%{36V5CV4iUEO;*5y_l^YLL|>7`cir%;&xB!%0~RsuGS!AS!9 z|M;1kZzw_2dK1EvyR~T2-NKw6r%h?>@^v_&qXAm&DxG$xsBOA~Uenym`EYnFsLt@fLGax5 zXf5teTRui8sb3b+Q%sd74}B^57o!lG{%_84`}r+*7Vh1A&yJR zbBU(WHJbc~vXN}@eJohXvsFLP6K88?9z!5GR^`O)EIC!Qfzh3`U;DVIz89_EDKN93 ztu0oKZli_?FJEYL6V6o){Jdkl<#dl8P#(fhofVmnH}5_K_Ltw_Em;gRZoYMdDl^FM zr!KJW)X#RSz+8|hs#!WcO(5)#dW6H;)J2wC991>letUbocz5vntansD#s)`$vLMHP zl;5EaiCDX#Yp7@dQLnD^RzhO_pIU&jlC_K8rck7`SY-jF7jqh9{-_814Yof)9wnPy zS+8vT$R=#y;J?uhO$_iKWs{2SbhluI8akV@f_>3t-QeGx0S362hbtE7iiuXmbKHJv z3csb5fU)zv*R;!X-E^mh=H=?Lc&$1EFRWpj&||x~{JNgbR<$)FuG(azkdfV526)>t z*aVLad84%QV>5qMake{HrwU3Ui)v7hrn^0J;XlA<5;Xm@eThupw-ibUQBtpV0azX$ zv?q%EgG5<^Iu_XPnJmWvJG1JVrM1K3lBSzVeSW_@%p95(_JFW*TdShRIaZezgnuhr z5-GdIF4gHHbZq-JwYFxfWlMOn~g|*gcG@j zP6@)6yEM-z@SI6kxyapYXuG#_VV8^$861Vl2PZV&SpNaXh6ZvooSk-n1i6Q}<9ybp zr879SYj#TQSZ=#^f|rYn1D4vcsVKUr19xzNg^a*w-YhEQZM5886u$sw$9J-Z%gXuZ zpY)*_)wHyzz~GS-xi3JF4pG$Cu#TE~G~?+c^N1=Hy~y{h_~bsO?^L0T$AL6~w>o_8 z$)ohi;{*m{Kxno@Ztif9ur~IOwi~k)Fd4^>ACrfwt8cEIpoxmc0y>mk`Q&1zEqgx5(|&TcC*l}@n0$7?OHTGV3fTOZxb9fy z;LTP|4PT7w7iR)SvFE8}VC@u_Id??HiLTW9i)pjWP+(>7^c`}JJ^fica9*$lD5N~^ zGRpbhQ+~*8{)+4MeuV_^8H+dVPE1jBmjr?=zq66UBCK~z)sK6Dk?M|*spo?KL}y-y z_$2b%0c+mkV(%5uL8@WcSQj$bNe0meh6n)eGZbLxA<|8s(tv2BG(?w+Yh-zdkCm5D z@{75!DlX;U>3@$`&RKwC&xX?_kuoI`V89~5I?m^xiQxw#6SXeoFQ4SPnj``~a;gNu zfOV+TtBLWG@4+c3uZ^p6vmk)eAVMkNhjLTn68zWGX=CiP7y>Jkah;?`s;8X@EeZvS zaMm|TG8zmFhoWukUd)i6k4z-w17LjZK9}y->+4yNpdq8&KBGtls~fYRy0t2YpLf)6?7Id59i)ZUsXx!x69J~nIa;Zm*HM-aWaZHM zXB#095@CWsBG7(L@MK|mXwf6er(XoN)j~ zBVg~1+NJ(yIP05zQ0_In=jZBdRds8sZT#Bzs`jr4!SFaR;Upmtis7MV+Go7JhzX)O{98P zx~bzgoD|egkfCEiGO}}xvRv=QDgzt&_`qO0o`8DqhHGlcIqIwa&lc);N}QNJsmzT1 z8Z$e?$UdRT@8)al12%r@X^#)v&C|c%D;~J@3;xdf4RKapXS}wF%{{~*KdkQ7uDI7! zh1tr%n}k9Pz(|Ne>zMN$P~Vz$Qf$ug7_-HUAM z$8#InpnQJghBS2x*i>aK4uSP%)5+*S0GfV=>-SC`)qnu6X;bHIr%Af~V$`vyXxcS? zy2NvT%ru^w2B9#FyK0(ST>Wje3YM*jYQZ69zd8 z>Y9{i@3m3EqpM#NWr^~ii7Fw-N2h%SQc?`8w7^D)n%}=Qutytsrm0CR_?x2gO@bqU zLsbpR55wBVqaV`fYRs#Hm!$%m4fgx%dKJ6cliY3VAzjht_3frphA2R{E=p7(b) z;ByJoKd}Ueu(fBXn^D<;fZo#`%03mem0IyiNXLaSZUj83;%4y%s7{iYM>ok`%y~k8 zdkeO1G&oTrDfU4+o;Tnr^g0y0ydTI_P2W{nJpI|)3F$F7H^+D1G;@$=cQQvlH#g_{ zelwh6nPr~$sveAuAljp^Yg!TW4Y2IlLvovO(68!eW_OUsCy?XjsKrCC|3cqVn9BhM zzxmGRcRe^0x}?UJmH$ooW&YfH#knVB;AK$XMQCZi4gMR_`w#Z}pW?m$OPBxo7Y=|i zi@!_f;%qsj7_i7t!b+G9x@uKvIPehQ`sKa}HZDY#0qcP9>xS?f^c9RoyqMY8h6q2e zA?xbu2-@n($7O|uLxo9T{@8Dmlauo{R2KXPbGw`nU*6vRNl_Vk>#rxMBQtPl`%$(c zU7Pj_lxPQ{bI9D`>~6i*L{=P^q|tXNfrt&QW6-$VnaB$uZ*NRO8P-a+-687=&FH8A z%Yy%2cH12Stb=L|ITB9`JB?wsP(Gr}A!ALbmga?Po(vF;Y7ErIP>P_dy132@TfNVk&c`JO!N#TXZ<)%KA=W zOC#8DfSi;C2Hkwei_d%z=>Z^UD&bxwBh{s?D-ezc9a~ba209D)dpMFi$aue!!i!lj zHF9Bf7#?Sw_-T^{4_cS@>^**zbBo(@NoqbR9R19n)esFEjv7xAwR3_51*I&dzS*&F z9icAm$4uAuNd>mKSg5nmIzU&MKSkVjLuvBTy1DG^YOzs+yM|KXE)-rkpyA z_>Wc&p*lUXd$rD%SBd@s1l9;r*bs6tBCzkG%_@lwG`Zzh;wx6Az4Pkgzg;0|SZFu< z7j=JDPxtemBp5wCR=dhkMU|*|3GoX9-7 z$Y+N^_o1RnNl7sL=Tp5M5a`hAsurN@>OI4z)#o z@!W3$UvliHCXzb1o)L;+GvY)g3Ah&%SM$02g%I%q%$Hvu!-TYv=dz|P!yfAJv%zunX0O2JrD9r*& z3oDy5D;DdO(H>{lz+0mlUG;5js>=%4t8uEk6DtDQxFDsSo6!t#eDed#${4o7pqK-i zX`oHPlKzPgENbq`i`42eqhJw0G4ZU)J}`H!B8P~PMF~LNRsbniJf=Acg6OJN*59oz z*ye{3^$NmH(F|8O71phpk>f$xXVGA^HP7fL&#PMNhgDA0aM>12MKNHMXQjDx@CYDL zYGlXw@wl1t()W34*}LU(G`Iha+$w< zd|^LxJ=BypC=t8^4qqbGxu&{qyH6k|*kJq?gxGJM09Eg@ywKT7zAKzo#ZPTcdsvLu zeMzqrMkYyKOk`h-}vh*fbq~J$FvBcz9rA;Zf)p#3lXdyM#f+u8k<~ zri%%m{po(Xf%rPavoXI3$D(k(&xSIlVV3nI;ssAI=3kg;d9Qn1qGcbmgH?9s*!T=p zJvC?rS>7LQbj=ii!R_pEPJg~XlP3e>;+~-44;n%%l}pb7_;>~F$1-~?|11@f8kpVZ4}uhDgXAl?8J7k}4xXA^i*cCsj17H`=U z=KclZj@8B3t$mnnDMsEF2%YH>KYb+lOKC}d5q%dJ;J-&BM7zk6iARKn)3e+XGQhku}um*aV5;VL2< zcTHQUrv`n9dFOKgvCyaTX$E9XyOct$uC%XiHKGqgMZKW#rRs==Y`*}6l4wQ=ovnef z(e4;^US27lNlhAP)-vG~e1x=%K{`dzNuQRSw3Z-Ff3fV`m(x;8tY7h8-}W2=J4U;y z@X6!++Fi0`r_j$yo_j5Czo(~~vyYQ%H08OvIx3r=#jb5sEW{CGLm#TAxFy@(k$M#z z|BJP^j;iBn)`gQ`NzmX@J7;?e$s4waD?cUMejS zYlOG5fF9NO+#LYsXadUwfgx|PJO5gXYn)p~(z!vZJS}lmVpd2iueWNTQCcpM(~%d_ zu2X5~T)3nZMB#uBf6FMdKH=?&V7^F%jIJ53V#=ms@dXK-1GCWTEZd6KXLBUKusS%J z<3%v+ae8$|@QMyB?GNlSDcb^H5aHlZfD4@cEgd?Y2*Y(zX>q5){v373v4`prmhmwx zLjA%ZkgA}V9)94)aZd(53^wrK1QxM=ffky)sL0y3`D6gQ1?I#V($Na3-T!Q&et~o; zEyVHsGu(svOj8(yugb*^K4x;ug%&Pxw7FhgOY9Okd^q^UymMg~vMj>g)EtM%Lb4#Q z0?OHMLVKz<7~MX~GCfZl#nK8wzlyB%emI^4Le!}dpOob{$sZcJF)=ZdJa3l~vQ2>j zYa#K5XoBl)#l;9wd6z>Z87q$={XD^n21dfeJTJqi^BpuSrpauR7SGZGY&OsZt1NYr{CEn2c6RlG_Zh5s zZ7#Rd2PEfb;d}e$A??qHK3FKP#*Pk*uJ=I)TKxk#+uPfdmzNy^73rQd%^d5Ydna$C zPYH*oLt_z&ZSy#(4vW2eZ;GIl{wsIg4ud!s8L^t(JJN zAlzKY6OT(Z7HM?-RTK0$6+#tnZ#f5V*{Q}Jl8!etlg5nfZ_fu^Ws8$5SB^OuZZ1qu zha|!|yG@IeQ}^X#oJwz-6EpSW_s_nQWs7-}_W^H+uepZBa6Ca&P9B~fj4dxcpmt0i zJUqTmzMPazCL?u3XyRZ7dn~!rswT(aP`z3k&%FU7=29CmaU$M`o`%|A3X{^1sFvUnN`75kxr~$8R~KstVSMfJm^LOqy=o4Mi-a{_xPTeAs2H%)aB9Yy zHqh-@6HFQB^RR%0$Omib5fs%xS?s~7y&XHvPe~sus4o9Btuv6mnO_YA)3CVl^L|_S z!(!i;2*&|e19}$|D3YuX{b7MLG$3kgXT8?+iD+IYNgv`H> zJ_?4jYW%>Z2BWH|YNPV2$;6+_BO$QOK!*%~=-#BI)a~@@+v{XL23w~k@FPI-!l~)( z@fsHg1y*=#M|!t^^8FE$!e0?%vtT9kH6-ejz+dY$?Vq8uX>=vv4)luB5pQr)XrTzk z)cv!Z9I^tPi26RE5WYigsb_l*(~pT=p!ZL|bxq64j{lQOYdW#vx|yZ^j;!{>p(!YY zf@g47+pGOIc!}Pe_Wj~=f;N5^{c(t!k3TrH{PRBZ^!){F(`PY|K^-GIDJJcI#4CUc zE+qlQ_zWiDwD&&o49*2>P^&_*poNIFA9G=VSH`P4EXIlq{K>)s#jxH}?-SFi$i-@w zwCqOex$Dk^T1}x=1Waea3-5Eu$ZvT(I&>p`O0a~_b15dhZU1fOPNHB^Q(RIIzcufM zzKCn9VW}>dx5I2z;NPUs-gw$Fdc(DjaCC(PVql(aB*RHUDl3x49vcn<+1d8eFs>v#?;WGv6pZiMWJHI78Byi#{jL4v376{d6%Ix(EnT(W5`SXu zcZjFcVeuAReoNEpA8v7u)v&a!V!0FdFl<&X&KPdjrRJ|K$E-^-qN3hVj*4G4D^i0u zOV+kZ3eNut9ct1@9a@)c((`&cHJEXBe|Ubm`NJqDJNG*y=Wnr(;L4uCLM44@hojep zKw{*&xJ8eN5aADk5Og0s)Sc}Myv+JpX$)dw{AcHNXCr znP2g;jfW1SeH3xzW-rHtH|xlBp^w!FwX}q-PIdd z|Fy|J3}8sLyO0i=O?y8_QD`pIZJ5&H-R@Wv20Vlv9MU8u_vN)OWjkKk(w9BFJcQZ8 z?5hsl5cBg}Y=l*dC_Tc_$lH{IF&C7yp-vjVOB^hT3+jy%s9hosl9&B@-}53>-?c|Z z=hk#R!$^1DWKs>VD_Tevda%7P8__^XX(u7^X=qN|PcO-2(;rK2-%r`B0=*10fG8f9 zeQ4_KZb>&ce>99id>W!h2i`Oz9IEDzHIX5wv0|Ib70znRwHB4=l5d)@mSG`EmoD1IMm|^scjDD+@B-|iHmjVqGE_#%RAJ6;axZ6I*`exMtu3Ggi zwR3_NBj#=hO}k7YD8w-eD!flu$JRF5n6WwcxQ*nW0o&od>xBAbb7vnHdkSKH4nag)+Yib`CbxwHeEY0ENX(0u#;`8`^qOCK_WF@& zEn!mxXm@@pX6J<)No{Sp7OrSkg8f?|Oq2ZfYt+p`I=5%=CS>);g&+>zxtEij3NYVt za3fr)Oeyf9DHUj0<7SIlqEwOoyic3>^$7%GhHPnQ`iTFyc4@l_RjpLcTt7DWJ&^j3 zwe3qjGwaQxOVrRQX`72@HLo;)AEF{AFAhyr^RCLl`ncv{Ye9Qtm3yiGV7ZOVwWcXV zwTQg4ykU#B*8UC09yE;K0r1&BHPT)q&9~O#BPcMwXwtZA=}CTbU{T0hR7UUfY>sFN z=9zbIJ&({HvX$Sl(bJ18XXXk1Ahjdnh4o-&e?#GX78x7rlVGZ9j5$0y={}|*8J1|= zp2cv$f<%B@*ML?ys7+}9>tDKJexd@mQqR2P()!R%eH99!iEx&a)8x;bk+Jb%iO|}K zkyczp>bRxtLb5KdjL?DP+Tf+kBdJ^O8Eq{QCKTh>T<^s2+_wlT@EaURK9&fYM0!>W zOty-|mP3sd`V2XA?vBs3idf@f{^#XiJpC%w01H^b=6R^eBXWYP;<7p7)j8f%rXz8d zQYKb5hILhS)BRIKmCdLp(M(7VBlh_?Q>y_UmD8*Ch2VGa*V>5Dk;S>>qV8JJ;wUd1 z(mZ%>+-{yccy`4Kd4|h(uv1mTFyR6sBkOx`P^`)dJwd;b3Vg=0n~Ym5Nc<4^+-h2p zQHoW#x+UQ@EdR&_`%Itbg&OE?nz==Z)W)`p;*xSHhhO>Mn?@x%q@l>ezCGDy26(;G zt~B+NMCIWyW9BfRZ>>(6?NGE9l1Oh=sN!D^wfH3qH|lWew7B`aG)w=Q%Sxe~L z#f13zp#4QT?Vg&IN?w0T6lnim@dRmAs97AU!u^<;wD(pJ^ba#zrD2!P7!O9y}5w4UhxOq0#{<})9vvx z&(XatXl)WTW;dw|DlYTY-pUCPu*Bd^$hy`*3*}*!;St0bQU@rf{j(o?;J}a+ffmZ#vY+nSd!*z?p-381M!<1qEcx7crt~~ zIcY4C*RhIRqAg~|Q3k9pkXDvvP`hW-jBNJQ{fxv{nwVlr-{bP)1P%AEoml$6#9>Nl zJ;kz!QIINq0=4rizF*|;+w4BF@&7dT0+RqKD^iqKTyr*Bp-u`4AcmezT{o@_yA&0gt zJDcr$F(?6!+N%G%^l^)sqh36gqgOR!R2MJ7JyTm6OP5&ku?Yy1?5s%NxN4byV4d;u zXoM_iNq6Z$bCeX6#XG4_L*V<0?|sx49YM!z1J&s3vFCcgQP+gQn_`jIw%2|Ec-Qlo zTJNkOEk^$qHfZ5x*82Lo-P*>VvinykdsPLUfFXVeEPrZB_6~=>E#l=O2B7u6g+AYo;D7r=Y0=ij0w3|{a>>HG>lnSv14@{)*B*R zYlIwb=4W?IH@y}FOW*}&D_WC%Yd^F4l>2)(kvvR+4qxSizRp_?poi_+u*CYv36WK% zj_Y-TJ)59slAg4$euhA@{%IYw0I^Sfr;^pZ+6&=`gdVaY@~aVba+2WNO@kU)8M+#L z?*FY z`<5W*vPR87C3hHdsbm-WhNz+0-zUeo3ra)2MH; z4kaW;&q&*V96LRwO`PQ>i028=ve+mjlQakDWzR^rsQP9DtYkWC|Qvi=emz_iupo*Vn(7CKnBoS155Yx%kc-(s=vevR$DD0LIT_d>eYcTCyS$TjSA z!akhe^K!95W{T{ExyGs?y>n`_1`8SVm|ED!ab`-6bEe%?C zPwKM{?1=CLH!cyg7BGlq&1k1*W3B)>qjHslBrTR&I@6sqnA;|WeqVGA12=2B4aEb9 z<%02c!T3h*d;CO-=UMtgJYmaid%!O+g|(Pdg#)yhZl&bwTUc0}nv`FxwYjdeI>#Ix znI39@{=>)Vh>D8J>h?hEdVl6_db~ooN)D2OrlT0BrxEzR#C@Fjfs=oneEkOaIQeg+ zh=u=L_@B!DTl!1pV^RNKHT*}ZNG9Sx_5PRA$lpZ&)cfxm{$2KeO8?!=|62O*#{Z|X zUuGGiI+nuk8&ilaF58V@bWbhA@p#%#H}8rW@560+7K{@%eC8#OXJ5jPGfu5~S21F0 z1V0{|W9c5TmyGxZ9M~ndSNHYf-SVso(wvJoG8UlAAh1AB9oH>^0dQebVE4NJ&l72l zglJ^}2PTld-%5Tip3)0lUC5GDfwe3^DwqzMKI|`Xm@2_FbbcY9-^Kpu=w22s8LGZN zh{PnC9T`YaR)~{Ej&-R;rO2UiGzc4phw#lN#&|ijoyL*4$9YYYAS1EexDDcehy%{hz>fFf;vzn^9gesdHacyxB<`TQ1<1_cO~5T zSLkyx2BdROCoK#N;rLdm(EEWs9BUi4vrid@5awx_V!zmO)6B96L?yCo!rq&6cq;A= zut3KJEVHgdkQFxXOej?%)9Ngem%tWQig62&IZ|}hkEIC*{O6Xf6PhP%0P$@B!>&gu z9o!k&js)KvJ>zd+1+Hd>Gr)&sw|CcNG%o9tUv2xXv1ja(REW+E8N4|`UE<^l-#ZDm z3F&~z-L))$&oVz+JB!R<)#oe`%z1cou&58d!8Bm?i6AsV-nI?Me99Bbs}qvq`$sir z=Z)#;g}#vRI8+Q|WAc!|g(FVt?ySP5=nU;}j&7Kc5PymZnyMx*24tB}->(yV8)?v3G(XE@`sSp5ZIorVM-0F+BIst4=Q`&wz-;{(CGVrhzw*5V z^Ewb~Z*Mkh)E=fPB=s}D^&X!(hKsG|+=k>PczMp%S-Xvoh20RYr;b-c%~Flw?aus6 zTwUc=Hm7~ZK9R&q-3Z{`m?gHJ6AF@nTE4Y=wKbL{COlD*!g{$!t5mMO=+gSm4_EPP zVjv;?XitL412dJxLa*2_MJBDawYRW=ZlTsy- zgM>*W;#Q9!`42S&FWx7T?jsn%yRelj%PKB5J>In78nLi9rZ~&p+{fYY<8&*pUby-9$I*Yi?)_gY z+*TgbYS_SZU+vAu67>y0>~iOcB^0m8w;$WeeEUU$QK3Vr|x`_5c0}yl664wt!RjM(q~$GHK@W zH-H{?l^G8ZMWsnk(?19e9?+pE?J)Q|bkZL~R?EQq1s6)OBrJZA`q>37+C6>rwOZAp z@eBS_|2#`7RsqLB&u(QIk7K~*;Yxq>&7(PZ-N_t~z^JmRIdO$E-{y&r8=IMeS;;GY z(}X$R@QRYUq|SI*vD6!1u4U<1v{{|wrl;Sqhu6GCa~?^V2TI*&faRHm0lO1*rat@_ zIwJ*=?3J>3z?L9do&-AW-c0AMoek^g0s?Kkd1Yef}WV3iCYABvq5 zyp>>~T8;5{XNtb@=kxnUkDR7MTt10I8$-b!dDZ;W2x{!QU{`u#zD57)hAvGkN=yjj z>(1AP+AM?5eZejcU%9yX=`oC0YrAC%Lk7#Kr&MagnHlpSEQp6@ti4u#L$7WhLn++j zUg}35eumG#ig}s+6P-KfbKAtzAi0xGc(6#KVu-eHXqp&bW5@cGJu)guSGtGs)xPG| zG4R{^@8}&sY?ch$C0txh3XK32*X6IFoqmuTp)}bpH%f%cnzBD=CTMPOG6kVRtS9|c zgczx#s+}>Is59vd9Z(W?Ff~1{*wjxY>+!FUA_I^4fkU(~;M{={qT8=q)}yI%qvW0o zJ!{ajcY$znMzHghHr7YXm8idrsCs9DpSkpi76Zm|6)0y?0Y0K^b_!4(Aq|#uirk&! zv%Ky$D!P{iC0SZocTS`RGuU7bG)*{gcF_;A4f#C=fMV0yP6a zi!Br!kp+3_Q0gt1DM-a8b@CX;z||Mb;oP#gn`fSjb+p6+M6|wU4114)v^HIkhI%wK zqi^?^fYU9&Yrq$jys1)FgMN1FI`^v?$4p26_y%ctXx`HW+ZgTG_W0-tAT?Bh2w?Pi zWPxAODU@_+r=BuUw_Y3mW}+ZDNOP*eBanH_NDv?GG>hgitA)dB*JdCVllZ`9^DtT8 z!0^-TZujoh1e4_;NA<_Nn5S;(^pOo}qaS#XVc9fc1z6y>SchP1Up`b8WJ{E3;mOO( z?;O3%kokwK0>rw+Vo@{nu6>&6z6%md2n(kkwX@nWup7l;5MTQjj06@}>C5Yf{fZ%D z*j+S<77CCM%4&9@h>~<@s#HClVNN%iLfp{5%(x5$_=IB!;i~x*_8Kz8B&85Sp-;z1 zP{48Ct%8sJx-5d(J2C}1Et*31XbP7-9^Tta@kpl_=JRLhP_KpA8>XtkweCa3)ugBl=uLd~*;Bsb$-mewKB?qyVVJsO_2{vMt{`qt{_@Tu z+cRWTMGmWn3!{uon@TE&nUd3b5N~Hj&Yr8aiK~)NYUwK*!G?|_$3OnUFa%R%PBfQo zrl>KFTr|VD?Kvw*ik|7P>^~4nvxCo28s##AcW79HVcW!)sXFAVyQXNcXzBl;0uL7m zmO}W~;eeBW|5)}DVFFl<^Xmg)Y8A>}r_)okR&@m|F=0$1*eEzTip+^$@-bPP=lGVz zjB1(kDXuCbgncIbY_$T8*`$1K^!AIrBSRKmbLGh%Hm&W>f~LJ3GDIk41eJB()>F3!4PTp?|(zQXcX<+yIn zbYeW<4XfzSgi-IlYJ1s+Sh;fZ_|JvRMj}E5LyK+?>fi0;?I}Lp-nr6l`H(>8QjdoG(D4QKr!4V}aW&dyZX<7Ml$@~0I@-0ab~U#O7`Ypx>gXd-yY^2BUxjyP9E;aB&M9nZFfaby13 zguN*j7b(*JV!%>L!G?xbp_~n5UOzbHh6e&tcXn8(74gzX%{+GNALZcppcwRP)Ov)P zIK}%Fnff%7h;TJBmkb7uDx-pgh5$=d+$Vh1(S&U7@0~#?OaRe80wnJfTtl=B2{}_b z6yW5pI1YLNPFJ!RJ)wPaq85b_a3xaXos5v$j*GH#+siz+_kbtWtXlQ1!M%F_&K0zD zTs^NS9m}pyv3!GMa1y0n*~psPVjOX~B8K(pqrVtPX9IDyHtCggnXf2!>&a;rSLE4Q z;%tGVDsoA}jy_k3oyK>87Y5yaG51sk$O>h)LbCUqXDfip;`6LNBhb9(J1-(msMfAI zT~RAaLS8UyAigxRA9EzRyiF@udl3v5jgJ3k^B`Qrf6IH*LrVr`JIxOxsfZ|J*0415 zbb)Tejh)uL1@ddVnePxTBg%pOF@#LL;ldg&s}_M%+4yC~kTGCjK2Rv2TcX08O3i&x z+fpcNuH36F9=HRO1O#?J)ojDS3yT<5?}SnoiGVm)ev4IKqzp=LV(e*I;)bvybZvC> zMdWRM9GE=QZxHhdWiZyn+L>wR#L++s%B*uZm!zs~S z7+N_>N-n1^7G@w9g&^9I@Le5WT1U7#AVnhngB>_$3Y_N1IoOO3P8p6v#nNiKkw8e>mRy{ljjMWY#%eBe18 zw(|&IJI&Ck&^pC`WrucY1}1z=Ml3Swbl7TkpMc zAyFY;?Zb4jB1ilQjNM{)mE`ed_M>S88w;I?B+1YYjP2sDrA6HAIDDVFz5(cfD54_A z=^ta8W{UF(8hA(7_S3Q@C)Oh^LrHmw45D&u&V;BR) zag9~S&qsBPEgOgkqi1l`5cW6Ils{hA>B@`d5C~mI0-Wk;9$e!K;Tr1fWDJlK7k2u} z#3L{PnmJz)6@5}+EpNo5xie5&UdPcjRPmP#2Q2MT&LVCT+nJ%753ffje|$xdS)Qn} zgpJ}pQvleGz|>{As4tj-{plSA4-7D_LakSur~9qeBos0nKAT6cUkGFWJYN!tI@A6c zp!aoFX8>i2wgJ}0Bgc*288u;6%0ewRE>HGt#FC~NJ}zyd)46z?su7!d<_80H;9)yC z(1mBA0e4Q@sm8Xc+B&E|d;dfc&3`$SY{mg*dS5k@MCM_FKa-#29pXEqB9j0Ph1$MI zo|w{v_RkGM1asaVp}Oj2I|gC$74M^J`QvYNt=aU9$mGpoy-%0yZnZG0-P34$ZDG!G zO{}Vag4A-}LzgTDPI9ao8paDPvdSC+;3B{hhI>>VV>1x8AQY?X>+A0rm7LDkxGdLN zMeXfxhnLL)qy~TVqroH94vOB`0%=Pj6HU`~2Wj|0Cfg;win8*?#b(dRYKsy%K+DF5 zfQe01=X)rx7<5dni?wK?OVLhrj6?N{$?5sli6^rdR{Pxc~!ylW9e8qTD z6}J@E=eNJEj_1{m=W7K|I9k&7T1w~L`zo}kD$kU#W*NS_9l5!=e$mm0&UF6&v`CBp zH=PIX&}qZw8fS^wZfR+0Ch2$AyOYNyFyPV=SK~7Ut!2&KqNJGO9vR(M)g)bX#ZHZZo4{1`>`wBQ1^2FUe)otXR9rV68ZbTIQz6uSp+vtNFY1j z?So(Q-xIl9?<$QVMt1&X6}uVe92vz@zS$|i!l&>o*F1sp_`%Jh!Ao;2o2_iDweduM zk3-PPN!XH3dYN@-9av>F34wpvMKyD@dwICDfNxOBYjO<5>KAGOM{BiIt=Mx^e>e9e zJR4h3vZEE(t7W-mFmq!{QG;RGwESN4V6G??(-L%{r<88A#TPlItm#46r-YQxJuFlG zuxqexH zDjcP6<^%iZ9&Z?CW`=WfbLmcSv(x3ATqEa7X)m_3!);1tPP1-a^Y^EE=WA{BWE!BY zj~20S?*~+P`nmi*g3ci)XfEfzj;y5X^pEB1@?pLyU01|SiTe4UEjP_@qB0xj`hYt} zV287jt{@>viAS%&D{{h&?c*r&II+a*84q&z%+eMAa_QQuxl&wu1v#fhV}nDa)|$me zgDXz!T^WCC^_yt#>+^k$6_?D=3mJYpH_eOHx|{@wj_ua%Gn>r?@eg+grQsx?SeNqS zm(P~*Z<#3pcU8AK^u9OBG^1gfE1}YKID+LSU8J%ZspE(yk3iV>^pw*BvX>fOL4y0r&I&O^pRdz~=i4U=wM#;lz2~9TZ zE)LUZc}!BpQ*_@SE55%Mv3$j*h+CJtL?)N_lpY#iUs2d7B4rzIxPGU~&yznHs;}Np zcn5R!c%^o=eLZeazFMWMWIz0y|`%3e&l;OJp_xqWrq)AiSyq2dsgFxHU zQ3+{q_uK2UL80{D{oW9+od!lJebm%**faCq5p&vpFG)GQ2sYK zG0Iw~FB+?TnfLG#tj{Tl@t+P`? zHMNyor%}rkdEKtTYe>AQD4%v2+c$S@Nk?^Y!+$XnIMcM9GotPpE2QPv-C>qpV|mk! z0}Y$$WmR3UEPn9{$|sK9o+{LJNFTqzH)5v~EvS4?WW{Ectjw>KF_3GEJ-i;-*I6Dk zJEVTf&JO-ApWMq?xU1llqPoihaC@Y+Hwur|s_j{_$~b;qF%hu>=~haQGZw$gc+YDU z2m@8gR1FP{>Kuw#J;u-N9}n`)5vWCXcI+`!re~98a9Rrb)~TOeTN+$^MUwK^O8@p5 z?elaHJ)9+VvLSO@_sj0jv*ErlrOw#?4N{UXma$T4ew+PCf2~IWdJUS z$ep}?z{rF5)+_x~A4JHcAc#e=zYs-#b!`$~NcNJOZCns1C#Isa>y0mIfaWeMrgHfG zaF_FE9N8sfHy}D%tMyT$L{!W4eeN!*V}E%`SD5zIV;`3)tH))5)q)bug%+a2P1mcyIUf~eo%jaVoNK9w` zHlSKs173UI=qz^c`xuewnR(gySCd*{H%K|>Ud!`^x1cA!zcd(%whXcQ>tDD%&+aUi z3vM*II=uq{IllzHfhd7R@qa`2L`$oJv!Q7D*z26%1dR%vF*cffo@TD!+X#1|VT)k|6){@vGe zw?(&HGKHR2wlNbY&RAAKhzDImC-|bRfRcY>zXw~WEX{vCKi&E5ch*+nwYQ`a&WN1_ zGwfLLZ3d-{yGPPg4~n!Vzl*unj>=dHDMidt>_fGVX>#<*;y$?q*O9yneJ)9F$hm)7 zY&nZ#O^IZ*#_`W_t z#7)Ph!aP~#z%Jy}u-imk%qlRCFYpvYv5Gc38}x@aIhK}>iKlV6xuFJ#^Olh;SCqtz z)He}!MtQX01*xo}dMcrBQelgIf|ly1yITvV!V+Q?e6VwstW%=zvsjeWYd@JEn0;#$ zQUPgNh3~kFXdxz36v9PpUm}T_=?52J`8~w@kOGRpi56KhVrc6!R#tg7@y;|i&?-DH z7Nie{!0kY)!%te}R4T$%EOrf^7dy*s>UJ?|VmRVaE&bz}z z6;^$mg!d45KKTB&#=8`9KB6-Hx53=sSCdB=uX!uSY1LpvD`i*q2WSy4kzt!Z(|4xr zz3-U+UC1KTS2Uf<8oAdm2^NdF1m$|UhLHuzrN1>Y;P|z0OgMZ&q41o+sW^BMp6_Kt zc=QHDJ25@rOA2>rzjI~NTm_j?;uh@-fSfPG)!)!xn^(9rIC&GFZhKu4RbN%_^|s|* z-YefdyB^Lwdp-|)KA)mW{7+v1;Bf_>(?P*aE;&&zXg_vJ=Bd=x=6c`gd`&z%J3G~q zB8o3$v~3U`>St2y0+7PSUr61%DL}KPSg&nY)-Amq|NHQs+$GdhRq#NdbF?m7z4BOR z@&1P27N*m>)g=3&AJ;lMI^I2j@HHPh)q1H%;!z{h|AS{aEFNI2kYn40p~qC|ex33U z9=H)?_o-KwZqe$FefXktl<-bM)bW(j{&bpsk}RDD_}dmMd#iL<;OYxCr*-+^jlxLwMRxJAuYyB6EO04P* zIxPBSL#evX)eNf1z5-&p;q5QjG5*n8aqI^OgUHva4eC9a==YEc^AK0@c;#iKfNWBD zH~cC8*AP? z+V;0RI`;N)>*eKFC2`}8&x;j{c8)=>B|HPQ@tbvA^NSt(=NUkUj_XIFtByLG%$wzt zWfH5jkB8hcV_rSY>O0UYE;tjfpa9V|EbakK@UK%pSfb`TsMeQ$V`Wg zSsA^*GwcDk_#7a&4CY@()V+-=efL;dq(i^#`F9-kSL&+5%Fij3-t9`AnkJcX)7&|h zqk)Pcd z%XbEj*O+I(2Nmr5(}dY(`!NYe*E83#;MsZMtIHvjh}q!dlZQPI)VbY_k%y-eZY~M& zPX7-k4|8 zZ~@GTvZc`ywqX*r!tgg$qvr@n@5=MeM(h#L&2zET{+_~RCf>P^{jmBD+|PKw9+iIjhTl7^lm!$x zkkbIMJ)B*Z%|3!C2`8-XS)DF*{oW)C{^?7aS|WYh`bSF#7w8g)(;VtDD8IYRVG*uy zK@s6q%}}>SBA$J5|V7P0%o!IwA1v@bp+Q`2P4Uv*4um6kBzW zSG%z>ASriwd+S6fNWo^)ZZu006Fmk~ewLeaFKl)0FD7@gufs?%M#+*yCub1qI2S^` z50wozn9kU|g?~}02V}&se~)3C6`q4LoErqMSx&OT3sK+m{rP%T_U+Sg#r4N8?OgTY z3=ey^v+KO-9R3ZOyP@`~#7bi?-Xu}2Rk}SleEdwG#Wx9ouT|fhoWC*0mrM=svI*mc zftI1J`jzJJH`?X{ww;~LlQ~1G1s1WwpC5mZ$WFN7xjm^Conj9I`!ZvtSY4pS>tI9V z0x@O&n#H8_kS`YY*D4TQEL2A%J;mVKHrLmc#fHZh6QNgrssr&143j&1{;qD#h!IBa zeNA6+sCp){=@?jqZ_L?T)Rv$8Ir!-z0*f0=q4tjWm8+pC%{6IG!F^G)d$!@>G*kcq z1%`=9Njio?IX#yBs9&|$|AK?z9PDZc80{q{1<}u(kQS$-EBokVbJaMAB`I%xQCXUY(<%e_J%sDO>!zEm5FZfW$;(CBfBnz<5MkF+7y_n)w zz5|k2Cu31EN)T&?g)Nwa+byDjR6>~0*GlT9c+laN0qo!Tjp|H4*#Xot9OHTfC;hkyRD^@cZ&^l{SwcT5TveQ;i$@hPu=T<) z)3BJlOfKTq?{_;uFcfEsGh_%X9^I){Lz|Y9M&d2`5{!~DF6OX_%GQ}Um&6G56@pw= zrZO!#7Wfb6fr=RCQ*A*FVAM?_#+;Gtv=jWx^G- ztqA~H7hKvZisT76Q~(ApTn_Ag7P;(LK=T5rn0u1lC$AThTGn84pLA;C5O@j~)cL(@ zYQ9ZAKYCZd5k2NpzZ(Tt@TPnb6)t-z>_+nO-b-xQZ&^}$+x{muSpbpzoTugjxx6ZJ z&zI>ZWNAfpml3u~dcg*(V<+Dp=+f3tyvK1$njnZ#vrC_TC=vwu62Sr%DcLBMDb=hF zcKbYK_Vd4Gz#?8WS~saT`tXlbbpxO32(jixRn;3yz4|~@Dp5O?EKarwr675nt|f8! zoesit|I;bCsX?lAHrt@UWOQ92_wd=BS`i_-S0Qr{FQVk|7Mn_kil7XL**4gcFu=#i z_!41NBc{J|jlKuW2Fh$c)HGp}<|WbwcOz-<(9&ALtL(Y(wZrr*jcvy)4yr6=Ge1H4 zEO+y23?Sgl%HM!epRl|0KTa{%T$gO0R@C+jH}P9L*punAMEx*@k0gKs3i5mu`t-pl)QU z#4t=zbUm-rpa}AWAY`22b!TqJ@avdi`y_L;&BZ0g*!(uZPMV%(bd@T+?nGV8kXhb= zX$a3#I-Dsi-wC3V-Aq^SvLy0QnT!XHpyfEJWauc4_j?tcm_u(f(CUM82t#qXBiyS) z;9f-uX7$EC$N1J?%w5722GVjBSW&@avBye3e#6%s`)yFAO)Tzk&BZeyH+j(gM+*x~ z{4->>yo97A9g1aFJqp&}V^KxRunWQxl#;si^d=P4EgOgXBo>O#v%p+b1NP#mV)@0^ zcydGJP>T#rdKj?0KNK?N02X2rrffF&uC0>vMc)c$Q8)6T830^_Rf$+`Y<%_(z2Gr5 zc1NE%BzcwE=3KYp$Pm>Efmu=hQtNBC5*7fTv-LG5>{F4>(ijZ_`cc-~8@x@D*|$5G zoB^Z6NmZGfYZwWS$Al_tiN!KKdRs~hMG4A8D#)hnG0Jim3+xC`G?tu+uzLlxQgurE zWm;g;_pYgp5O=`1pD3B;o$P+6qP9BE=RvN@Q8_URDu4F|P-e=Jdw&AENjp?#26)3G z&jb7tVNog5-pj1B3$|~r#)%j1DE+`A(^!e%k-c^hTbVi4j*>`D8D6%L`a^I!;ONWDZnpXqJ^F8EdI47XkZ}XZ z(uXgK(VL$MFu({ohB_~P#kGHeSGOu7#|QZ$%6dkn>%d22e6v(27gf;I`JEd~zK+<_rBc z=JpT_ThGq~%z|?+oE+*-OYTdnUxWuSWYuh7gee45ulTZk{Fx4D`(CzxO~nI-ZkJ(q z`kC^t;LSh7fIeJ!`O96gVhd<`(~2f|Su}IjT%o`z7AwB_iw#C@iReZh=LilDzpl_d zwIVIQWxIXZ>4Tyf`hpS%{_J8sYQIs%_O%r%e5s7r@2MV_)6U}I3%O|}tfY-hTN23i zCD|Q3m?V7x?15ZfV7sN&P1z0HjDZpzcV=t6U5|)y!q*}nHexlHaH5B5{gXTIFc?a? zKLo@&+%81OfUp6l*wooNZvBWyb08l&KRIaoq%}_E=I#zY4-GRHkH2O|HL+czcVA1V zcf6Q-Z@-TEmC;!yn562L{f$2naSNE*waXW^dv4%p*i;rOx5j~7pe&zzEms(aNFvxD z_(IBC2t^dLcSPr>o%K+n8=wy1jz(vjl&Fm7ezO32gdcY)^mR5y&$K^Ox{ileYkrzxCV&mQ+n{dyTx9F;n18j3pR#au zzew_Kk}ma2^i2`2IyD;3B+4En0CbSf@Wb}1ogCzWPp;w$#8YT;JjZ3RTFY&2elp`} z{4f!h>~G>Lwy4D+V>ED=(0{JU-}l~=01v60Ad9~Vb5ssHtLP_FOJl+G9u~Q;-QNzU zfoYwW7kq61$H)x3u)f%Bq5dN1ZlH0`Y< z7gW1taNLGW;!!Sv4#;601oUtbk2ilk)P{$hxbq7lEoj(a;|Omm_s!DI`?EJsAgE6Y z>^UhaV`&D*i|IU%IA) zJcB-pfNuMbbNhdCLjSL&|Bb`?QAuQG!zSxM1RBqZ6IRLr%y_h?rUL`durj5_!#h!! zp<`s!&9DO|2BnlbQPoZ5{&Xn#Dq{o{*Sv5Qx@Gq&vf-t8#o@Pzh6ilt)EO(MU7BkN zpliZEt|7_cscsqK3DhXKpt$2R1rfIipnu7@aIP3kyP&7}&e-C|v2I>=98af1Y)x{uh`HNMBR1Q(s?37N^VN*IzK&bp6^TV!qF;mR5wLZAzk8 z#~}ktHc+nL?pdY}?6>cVYXgi#rEjKJ4*E_(pB4_cs2ljnHK*ou_Ae**V?C|IA8~uq z@l81yn~m&)VYhc7NWQhj{`O4F_YAU}^tG|txm=Cg?HEdGHY|4xEsLz7?hOj3nSVD9U-s5 zlW)EuzZA=_yWm%9HJNDt1Bdn8afbC}7(`H2u4PzaCR1lxoE(%#eAbRq_M|ADAGK*f ztFw;`>U)lmUFH<3SQ;BVnWMuvq@!kJ+S1^86KO8&MKv41Y3sFsHV1UkE4JHNE4+)5CTXsR3+3{Knzs`q)6{QH0cmU1Oo)tjHdYGWaU)QAGK1mIF9cov=k$5eS;vs@B9apZtu1-_$t=S&Az2#(fg^8v47 zr8gb(_9Gxmou7OWrcIAraE(g(>4mJ~jG_vyk%r1kowLFsS6Ku6WX?Vu`mq7DW`nUb z%n)|L&%4yHNO@@L%F@u=LepK4Xd*z?HPolGs1DecFPYdZlq(7-l4xqWSFz(=8LsG zD}L3@(b~?oFj_0BsTr(ZD&4cx+x6N;>gs-tIZ)R#>YK+${P6X*{ebEilU}tqN!pUZ z2O@@%Gk4kDK6xtvZy}x!DjNAuH5*3AVNDmkTtw%%>w;dVoZQ@-4lU6ngp0zSN>0F; z+&nSfEiJKt#&5##;pW1^Cg~$o(i!0xaz-BqFWMOkPCo}3U)F+XEaBR==Z~gqj_T0c zJEd+Cx#tn^peTQYA-Iii>ql0P73MFi5Wf?(VkVJSv|J1jK#&W*=eyl z!t%1RvuPZ5E@GUQ*@xZ9XribklBz)nG`asokZzh{uLDsAQ>VaiU=Li5hV zp>FKAFKDKYAUV7?>5G`bPnq-_>BkZI{+v|xmDP2^RC$iG`yC>rA~n@PM}BINT8~a_pq%=i@iTjokdu2JFrcuGF~(pcUnnNP5euM%zZGzCpU9(feuYRf!5Bp8Da=gzD+T}KF4 z+&lxCa!;H4l=|?;p-p`Yb?+Pd@ByIs9($~J?=EHD3gN8}`-RFaET#rm= zi+Lct0;>;Sw+E4TK6SNuur#|k!>b-DrY$Bf1#X#dMV&iqRL3F=C0$1S;I_ZGI{j0Y z?-*TVyoI*Rd&kR5awYa(VhXdg45xS^BQyl$cq-LowV20#51IZ_GGBLB7-2CMAj9!G z-97L{Zz3=aizvf=Lo;Pbrh#t6hDEs?s-(8glw_7I>+(!K>n@VJt`9QqMn)CtyhF5> zQY7$R=7nU4YVch#12>pAupkn~vRhl)Cl7>8#xq@qKmWlfj424TY}4(CslJiG8&DEc z14!#@WHQUJe>#z{Z_LQ~wDwW_O{YPn{zOeALVUS1>&@e*=9k{iaqHjN2zk?LL(xIu zrX-1UyI{A}{6ObIMd$9SHc(FK*G4{J^mAj(Rh2;>3=Eh1KKu=q{w!A292gxPa&|Yu zBJ}e4kY_|{bMvo0vN>fCJ+V$rFyf>9(Jz>SRPcu_n_~nbb^)HmsMhy=_dWzDunM}Y ze_^0ps#A^rC1J~?SxvhwISI*AxX4-BT)$@K`cc+7n)h4;<;rKeK3$r*xUOi?6m_)X z+xB9ys?hxN=fno@#-6Mi29L~D*81{L**aF3%}B*w`?P}xvr@Hn!L0Qgzv4yA6dK#*sFnGm2^5-TL$}1Q__@5!vdN zRqLlm=m?_vpuUBU-bv`PVe!J)i5bCmNKqa>AYU42^pz~1cWn-d{K%(%p`X4hwp;tqc5Hz>WUZ<)on z1SRX~QkRXg;~b&yo&|zcPJC0RZrJODS@@Y+ujMl0pf~2@%E5vATr(~WGRrJ_kn4O{ z*9coj$1_G;I#0U1e{7DnCJIPCY@o)lT%0R4-jWzo2S#efI=knheF6GKndP(g8qvD7 z*7Q@S&iPKRf(h!LwuW@iW1xJmP|0DB?#dt2CMWBSq#5xfRfGw&_WXpH>F8-h>34-X zyHtDUDP$lotIRL8D5N-!2E0kMl|HTcSypsK=_Xxg$*K@zzZb(p`L zKt^R>iJmy$g$r(6PVy>U&ok_d|3Ddb=TwwM+|s(0`{b64+gNYozSuHqN`*7~dQsjx zk4$&|I(h-^GXkMcFbt8~&dBYqw5a@+T(lNR6ZhrEK=y8BFE! zZ$e9IwMMDaywR&FPyN{&<2nWzjX1&N!w?nO&b?ar?H}H`k%?yq8dCkOIdjf}=xC*t@>JbO zMc~pyUwqLluJstzY&MKG5pl{59OGlT^-PC9dTe)cwmKt^l-AM}MHa)!u2?_`W@~dD zl38v!SFvHlim7$Kt$`}B*T{ZHcQD-jc2biwyL;yID{Nyb+H*lY5oD(Jz?q)Y*VQs~ z|KWtbMr&= zWPkOrq^%U~ygag0VRQZv&@T*yTWhC+??Iu|S&vt$6IS2zYaoH_c|a(V_$Ad>B<7Pf zZKTM?CFo#`XSg~N*l||?inPr{0-;imq5pCGhrFWyH)|U=yh{g}3(1s*xaDrP2A%{3 zZNAejFRu_Lo<7$M$m{&G$C46~<$f(5dHqn-zmnLfJZ@eDK)vkL2t@+VZajDZE45k^ zDgQp_so>@C_rZUUc1h%auH`S8TNkIp5(iwRXDt}*cHqgl?d+7Sc?#{_JZ9R|5?VcP z_+`nV7rJw?7FIHMh6XXbd8v-f#jOq=H&?;})6%mj#{yJ%2nsZSnY-|Hn@Rw_<^mll zu+{NFhZU{#`m1>_(ihAqq%C+)?h141jH9=90^61x zR6xd>_W}BGveJIt4fd@lj~UTY&ly9Fj*FRZCJkl;h@Cv0z6}ovtC2}Yj(;Y^FMGo( z%ifv^AAG=sj!&QaUMEDw!U6&wc8^duRK&~#JJ4Y`5V2=5J=Y)~sPdbAYP9)Jj9SH23bhQTX^1Fb4hJWdceojjXG?+YS6}()(HQSKyWkh9-6zZH0h=@b8i>7`HlU72JpGZb@px3D z5BJMz;<+czmX%q3n_q>NQ3A*5lEn5$JJmSV_iJ}`h3~mD;eTyd4epS!Q3RWQq@CpU zqvRmnSR4$44vzqU)cADG{y-~ooRF;UPaF`yrNlr%wtqHqCv?xm`lrpcUIv5_H(KFX zVqi?wN7|!yyGHnuxB$BJ>v~rC$@HnD8x{8IvomhNroAhG=T|7Ii+pIgQ>y!wL=+DE zrj*_rdC(^Sp$m_fXEl5XBB%}*9;^A5m;FB{##_UkRQm_CXJ(_5x`YeFI0@fjm{Z7A z3R)H^yL;?PT9K>dDDK9-?&CIRV~F$V#og?>R%N5H;Ml%$w_mH{8LWNm6xwpX`$P~?6jbI?3=oM@Ml&^!TzAYJS;>Z67m%zVzhW>`> zZ%INT@E`Iw|Nrg$r}e+f0rKzi_v-N5Dgz=n0CNeZX;0LV@QFZbW2hsWYZ@kth@>`Q zJo`xl^~GcEqC;whZ4elxyOnC literal 0 HcmV?d00001 diff --git a/templates/front/channels.html b/templates/front/channels.html index 04164260..3d38d6ac 100644 --- a/templates/front/channels.html +++ b/templates/front/channels.html @@ -291,6 +291,16 @@ Add Integration +
  • + Prometheus icon + +

    Prometheus

    +

    Export check and tag status values to Prometheus.

    + + Add Integration +
  • + {% if enable_pushbullet %}
  • +
    +

    Prometheus

    + +

    + {% site_name %} provides a + Prometheus-compatible metrics endpoint + for each project. The endpoints are secured using each project's + read-only API key. + + If your team uses Prometheus, you can configure it to scrape {% site_name %} + and have up-to-date check and tag status values available in Prometheus. +

    + +

    Setup Guide

    + +
    +
    + 1 +

    + Look up your project's read-only API key in + Project Settings › API Access. +

    +

    + If you have not generated API keys before, you will need to do that + first. +

    +
    +
    + Click create integration button +
    +
    + +
    +
    + 2 +

    + Edit Prometheus configuration and add a new section in the + scrape_configs section. +

    +
    +- job_name: 'healthchecks-{{ project|slugify }}'
    +  scheme: {% site_scheme %}
    +  metrics_path: /projects/{{ project.code }}/metrics/YOUR-READ-ONLY-API-KEY
    +  static_configs:
    +  - targets: ['{% site_hostname %}']
    +
    +
    + +
    +
    + 3 +

    + Reload Prometheus' configuration. You should now start seeing + {% site_name %} data appear in Prometheus. +

    +
    +
    + +
    + +{% endblock %}