From f4b6d9f69c43ad672106ad36c9a52e7bfb29356a Mon Sep 17 00:00:00 2001 From: Ashley <8253488+mrjones-plip@users.noreply.github.com> Date: Fri, 2 Jun 2023 12:58:08 -0700 Subject: [PATCH 01/26] fix (#1098) remove instances of local-ip.co from docs (#1103) * fix (#1098) remove instances of local-ip.co from docs * update ascii screenshot to have correct URL * update png screenshot to have correct URL * mention medic hosted solution alongside local-ip.co * update 3.x docs to use new local-ip provider * fix quote to be one level instead of two * update local setup docs to use new local-ip provider * update couch2pg-setup docs to use new local-ip provider * update feature release docs to use new local-ip provider * update dev env docs to use new local-ip provider --- .../apps/guides/hosting/3.x/app-developer.md | 22 +++++++++--------- content/en/apps/guides/hosting/3.x/offline.md | 4 ++-- .../apps/guides/hosting/4.x/app-developer.md | 4 ++-- .../4.x/app-developer/cht-docker-helper.png | Bin 80396 -> 110168 bytes content/en/apps/guides/hosting/4.x/logs.md | 10 ++++---- content/en/apps/tutorials/couch2pg-setup.md | 2 +- content/en/apps/tutorials/local-setup.md | 14 +++++------ .../contribute/code/core/dev-environment.md | 4 ++-- .../code/releasing/feature_releases.md | 4 ++-- 9 files changed, 32 insertions(+), 32 deletions(-) diff --git a/content/en/apps/guides/hosting/3.x/app-developer.md b/content/en/apps/guides/hosting/3.x/app-developer.md index 24b0abd61..12330443c 100644 --- a/content/en/apps/guides/hosting/3.x/app-developer.md +++ b/content/en/apps/guides/hosting/3.x/app-developer.md @@ -209,17 +209,17 @@ If you still get stuck review the items below as possible issues you may find wo If you're on macOS, or other OS without the `ip` utility, your IP address will always show as `127.0.0.1`. You can not connect to this IP from a mobile client on your LAN because it always references the host it's on, not a foreign host. -To work around this, you can find out your IP on your LAN and just replace the `127-0-0-1` part of the `https://127-0-0-1.my.local-ip.co:8443` URL to be your IP address. So if your local IP was `192.168.0.22` your URL would be `https://192-168-0-22.my.local-ip.co:8443`. +To work around this, you can find out your IP on your LAN and just replace the `127-0-0-1` part of the `https://127-0-0-1.local-ip.medicmobile.org:8443` URL to be your IP address. So if your local IP was `192.168.0.22` your URL would be `https://192-168-0-22.local-ip.medicmobile.org:8443`. #### Booting with no connectivity -This script can work without connectivity after the initial boot. However, it needs connectivity to do DNS lookups for the *.my.local-ip.co URLs. To work around this, when you have no connectivity, add an entry in your `/etc/hosts` for the URL showing up in the script. For example, if you're seeing `https://127-0-0-1.my.local-ip.co:8443` as your IP, add this line to the top of your `/etc/hosts` file. +This script can work without connectivity after the initial boot. However, it needs connectivity to do DNS lookups for the `*.local-ip.medicmobile.org` URLs. To work around this, when you have no connectivity, add an entry in your `/etc/hosts` for the URL showing up in the script. For example, if you're seeing `https://127-0-0-1.local-ip.medicmobile.org:8443` as your IP, add this line to the top of your `/etc/hosts` file. ```shell script -127.0.0.1 127-0-0-1.my.local-ip.co +127.0.0.1 127-0-0-1.local-ip.medicmobile.org ``` -_**NOTE**_ - You need connectivity on the initial boot of the VM to connect to `staging.dev.medicmobile.org` to download the base version of the CHT. As well, certificates for `*.my.local-ip.co` are downloaded. Subsequent boots do not require connectivity as long as you do not run `destroy`. +_**NOTE**_ - You need connectivity on the initial boot of the VM to connect to `staging.dev.medicmobile.org` to download the base version of the CHT. As well, certificates for `*.local-ip.medicmobile.org` are downloaded. Subsequent boots do not require connectivity as long as you do not run `destroy`. #### Port conflicts @@ -281,7 +281,7 @@ When you first call the script, a line is output with generic information about | Name in log | Note | Example(s) | | --------------- | --------------- | --------------- | | `item` | which log item this is | `start` | -| `URL` | the full URL of the instance, with port | `https://192-168-68-17.my.local-ip.co:443` | +| `URL` | the full URL of the instance, with port | `https://192-168-68-17.local-ip.medicmobile.org:443` | | `IP` | the IP address of the instance | `192.168.68.17` | | `port_https` | port used for `https` | `443` or `8443` | | `port_http` | port used for `http` | `80` or `8080` | @@ -298,7 +298,7 @@ For each internal loop of the script, each one taking 1-5 seconds, a status line | `CHT_count` | number of CHT contianers running for this project. Healthy is `2` | `2` | | `port_stat` | Status of the `https` port. Healhty is `open` | `open` or `closed` | | `http_code` | If the `https` port is open by the web server, what `HTTP` response code is returned for a `GET`. Healthy is `200`. If you see `000`, [see workarounds](#booting-with-no-connectivity). | `200` or `404` | -| `ssl_verify` | If the `https` port is open by the web server, is the valid `local-ip.co` certificate installed. Healthy is `yes` | `yes` or `no` | +| `ssl_verify` | If the `https` port is open by the web server, is the valid `local-ip.medicmobile.org` certificate installed. Healthy is `yes` | `yes` or `no` | | `reboot_count` | How many times `docker restart` has been called. Max is `5` | `3` | | `docker_call` | The docker action call to the script | `up` | | `last_msg` | Last message the user was shown | `Running "down" then "up"` | @@ -318,7 +318,7 @@ For each internal loop of the script, each one taking 1-5 seconds, a status line #### Sample ```shell -Fri 15 Oct 2021 02:30:26 PM PDT pid="410066" count="1" item="start" URL="https://192-168-68-17.my.local-ip.co:443" IP="192.168.68.17" port_https="443" port_http="80" project_name="helper_test" total_containers="2" +Fri 15 Oct 2021 02:30:26 PM PDT pid="410066" count="1" item="start" URL="https://192-168-68-17.local-ip.medicmobile.org:443" IP="192.168.68.17" port_https="443" port_http="80" project_name="helper_test" total_containers="2" Fri 15 Oct 2021 02:30:26 PM PDT pid="410066" count="1" item="docker_logs" container="helper_test_medic-os_1" processes="64" last_log="[2021/10/15 19:53:39] Info: Horticulturalist has already bootstrapped" Fri 15 Oct 2021 02:30:26 PM PDT pid="410066" count="1" item="docker_logs" container="helper_test_haproxy_1" processes="4" last_log="Oct 15 21:30:20 576ca039cd88 haproxy[25]: 172.20.0.3,200,GET,/medic/_design/medic,-,medic,'-',21703,5,21402,'curl/7.68.0'" Fri 15 Oct 2021 02:30:26 PM PDT pid="410066" count="1" item="status" CHT_count="2" port_stat="open" http_code="200" ssl_verify="yes" reboot_count="0" docker_call="up" last_msg="Initializing" load_now="2.66" helper_test_haproxy_1="true" helper_test_medic-os_1="true" @@ -329,15 +329,15 @@ Fri 15 Oct 2021 02:30:28 PM PDT pid="410066" count="2" item="status" CHT_count=" ## Cookie collisions -The CHT stores its cookies based on the domain. This means if you're running two concurrent instances on `https://192-168-68-40.my.local-ip.co:8443` and `https://192-168-68-40.my.local-ip.co:8440` (note different ports), the CHT would write the cookie under the same `192-168-68-40.my.local-ip.co` domain. When logging out of one instance, you would get logged out of both and other consistencies. +The CHT stores its cookies based on the domain. This means if you're running two concurrent instances on `https://192-168-68-40.local-ip.medicmobile.org:8443` and `https://192-168-68-40.local-ip.medicmobile.org:8440` (note different ports), the CHT would write the cookie under the same `192-168-68-40.local-ip.medicmobile.org` domain. When logging out of one instance, you would get logged out of both and other consistencies. To avoid this collision of cookies, you can use different IP addresses to access the instances. This works because of two reasons: -1. the TLS certificate being used is valid for any subdomain of `*.my.local-ip.co`. Further, the URL always resolves to the IP passed in the `*` section, so you can use any IP +1. the TLS certificate being used is valid for any subdomain of `*.local-ip.medicmobile.org`. Further, the URL always resolves to the IP passed in the `*` section, so you can use any IP 2. the IPs that are available to reference your `localhost` are actually a `/8` netmask, meaning [there are 16 million addresses](https://en.wikipedia.org/wiki/Localhost#Name_resolution) to choose from! Using the above two reasons, these URLs could work to avoid the cookie collision: -* `https://127-0-0-1.my.local-ip.co:8443` -* `https://127-0-0-2.my.local-ip.co:8440` +* `https://127-0-0-1.local-ip.medicmobile.org:8443` +* `https://127-0-0-2.local-ip.medicmobile.org:8440` This would result in the domains being `127.0.0.1` and `127.0.0.2` from the CHT's perspective. When using a mobile device for testing, you're limited to use the LAN ip output in the helper and can not use the `127.x.x.x` IPs. diff --git a/content/en/apps/guides/hosting/3.x/offline.md b/content/en/apps/guides/hosting/3.x/offline.md index d2de28d82..87eae2e31 100644 --- a/content/en/apps/guides/hosting/3.x/offline.md +++ b/content/en/apps/guides/hosting/3.x/offline.md @@ -70,9 +70,9 @@ An offline deployment may consider substituting some requirements above with the When an offline solution is deployed, traffic stays 100% local, whereas when using either [your own reverse proxy]({{< relref "/secure-sharing-of-developer-instance" >}}) or a third party provider like [ngrok](https://ngrok.com/), traffic may traverse 100s or 1,000s of kilometers to ultimately reach the CHT server which is 10 meters away. This can help when Internet connectivity is very slow, very expensive per megabyte, or both. -### local-ip.co +### local-ip.co -[local-ip.co](http://local-ip.co/) offers both the TLS certificate and private key for `*.my.local-ip.co`. Additionally, the service has a DNS server that dynamically maps any IP you pass in the sub-sub-domain to the real world IP such that `192-168-0-1.my.local-ip.co` would resolve to `192.168.0.1`. This can make it very handy to deploy a development instance where all HTTP traffic remains local (unlike `ngrok` above). +[local-ip.co](http://local-ip.co/), and [related services](https://local-ip.medicmobile.org/), offer both the TLS certificates and private keys for `*.my.local-ip.co`. Additionally, the service has a DNS server that dynamically maps any IP you pass in the sub-sub-domain to the real world IP such that `192-168-0-1.my.local-ip.co` would resolve to `192.168.0.1`. This can make it very handy to deploy a development instance where all HTTP traffic remains local (unlike `ngrok` above). As the DNS traffic still needs to leave your network and return, it is not a viable solution for a truly offline CHT deployment. diff --git a/content/en/apps/guides/hosting/4.x/app-developer.md b/content/en/apps/guides/hosting/4.x/app-developer.md index 45dfc76ce..148a20307 100644 --- a/content/en/apps/guides/hosting/4.x/app-developer.md +++ b/content/en/apps/guides/hosting/4.x/app-developer.md @@ -171,8 +171,8 @@ Starting project "4_oh_the_first". First run takes a while. Will try for up to f Success! "4_oh_the_first" is set up: - https://127-0-0-1.my.local-ip.co:10444/ (CHT) - https://127-0-0-1.my.local-ip.co:10444/_utils/ (Fauxton) + https://127-0-0-1.local-ip.medicmobile.org:10444/ (CHT) + https://127-0-0-1.local-ip.medicmobile.org:10444/_utils/ (Fauxton) Login: medic Password: password diff --git a/content/en/apps/guides/hosting/4.x/app-developer/cht-docker-helper.png b/content/en/apps/guides/hosting/4.x/app-developer/cht-docker-helper.png index 8c769ed5fed5ddd01144283f87c7f717faad41da..e291d6741b315a89fab04b27d6265870e6060ae7 100644 GIT binary patch literal 110168 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

yv2_^w6fxxF6IWy&RhazI4X=FzTbXJ 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

-ug`e-rw+i48_9fPfH=Np4Z~)K;_3`YI*fyHJzI>U3m|4kKc* zy}o4};jo;v)c)T2YfSATmF{-ShB5AWox?(PgO^te#$UF`JflXS0c?5}EGJVIi=SY~ zzgL=fuNiT#U}pblSCeN~zR4G8$ioLGp~8~NEm99%Ms0|qh8h-Xp>~xUhR*gD+MV;H z%Gq#@`lYvCCjq2XZ*dp3U*=u~*)Xc7!c8&vWb$Qu;+a~=)(j;PeyLv9d?xc(p0}HV z9$YS%RbrQ^!F`vsPZ!Dh&Q2rj*!tmJH~pU@$>e)VWVlZlms3x`87>ba&VF})Ptt9A z^9I6e=|AnZucsHyW}|*@YWt1w%}+l!6!`QB`qvgN5hENEe=48daBjZu3&ApM^n+O1 z+2E$vl{gvAwf_U_;4fAMDXCCBiW8G@*6+TYn=8;`&GN`~dLR_u?h#JLos%_#hyTEr z&#1~&s%y7+@<~c!^q}&*+ zsrJ^sr-v9zoK7nV{&Oi_W~+;j>Zh4U^jr0^M*UB8DphN@f50o=6=yXNh?FKb$}&e@ zQsqlO>wma0Pb1l2cvfl9<$6opD!jGR*~#IE^Mq=^lGffk->VV`&th+g@9`7V2{xEG zD!u{-oIn`5FvFFJJX1EQZ=&-O)j>7gl6ry-fIH#gPk zUh;cok)t(Vw-;su+Htefj%Kl+2%FKKE{j@hKL&v9#Ycv%9SVme4ykwKYklu?tPrp8 zrE+q4oQdNS+YKzvhPM4{@spzGmO{?g&v|f5Cb5ov?#eVQi=w2TD|}tn0t5W9j`jSg zPBSTf{SpNg##jGPHLE9J>P46I%)l^RLF!aD^1g-3=~Xz9!N3WFUYNLN-6HIgKoM+< zlhXx#=?0^HUN4by@FzH}t>g{CZgdh+yG>{zXEk}=EZ!p*t!u;^kmo!ApoF*_CZLMh z>T9t}4f!DIEwS;%P;Ew9^}TL}f;!FK+V@8KYkD1{1PsVJGC851rANG*L}uXuVuV;J z%fp4%npN>mihG_ABL08$(E;xrrN50lW&(s}G5Lvxz``E~_kNaA9=IKrBkpE0f*pdR z7Ir0cTT!Q{vQZ#Tj+?8?Z7kD?E3fLc)R)6@oufY2KXLpdnYBb}*=K4hELmNUF*Pu( z7U!vL+rm8wd?FJl-Q15b}Gx)}XYR=7S*(m5rKPiwS9Y%r3kso>4CzAG$=? z6Q=E0@~_ZUj5eWCVuWtSxii;~lzN2r*Hi2qsCkH-V zW%eViiJ+zHV@~b#w|Y-Yi%bA(zn*o&Nv|Md4tyk;VNaeGiNiN@qe}k5GUkYtV-VHf z<^M*qXI~39*IX{E9}9oHxz;y$*e@hk$5J*QEM{!1Q;dN7Gsc}lO5Nu7d&_XO^V%^U zWk^Q)Bg4!$HI)UH6P8PNQA`C5V6r`J-*HXqB|ys!uRLz`WJamlS=kg6Eik8k&im2K z-EQ(C@Q|w-n@ba`&#D+`morgY?>^I`(0twcLwile#L`s1Le7hN178S$^as7Il$=1% zS`bq-yTeg$c2GdbC@ zBU3UN0Qg=yGN_ALa77`_2H$7gyvLM>UMD@PWhX z2+Y>w-(=PKv-q0pS-E0M(c!>$0oLCl3A|zi|spa zfx5&vEe=glo7gNM{m_9tvkLy~A?b`}lfuG_+UNmFbYaX+u66TjxzbMPz!&<$V)C>9 z7N?L2&p{=Tv+* zKcRL5%LjjEiyh}qTtsC5!CZ1*rhHxv7Gfj1ttECJo+7CJXr`v?m8E1D2ghQBOf4!m z*Zr|$id@!E#~q#$`SOgkN156knV?rXwH3K}LD@*}6Z=mxV+DG}6&`CZZQvz9`jf5x ztl~R|1LBv!xlZPf7H-w9yEKl|G*%Wm#r<$k1k$?z5!l7YSznYF41CAV<9L^2rkW!5 zDkPaj3Ng(S*kE~Wr~}v55-pgyE7_e+|Mo9nci=foi=NdOPA+6cvF+Pm2}*#!MgmD7 zkG$(%t+V0veP%ssr5}vW9a&#VnkHLo_ahg1{4+s?8^D004fSpHZfV9;Fv3*~H(t51 zHkPZZscaFyS5@fe%6f{ssnkM-N9dN?F-`EIt%ob?t-E1^eFQfa$BXSG^kAN00hOzY z>q^Yb^go=FB@yIRk&f?_R7r~ySgP6=6O%{l@vV4*jRCMESEIoK1bG?%2UXVk+(@c#K3a;8!Ok?}hJI}rAevG2agLf9kJ$tU zFEA<|0;57JHGf}v2V5NYlYTbfv`$SN>SwoylLH>^zj)l}o4Y=zs|mVgG56 zo!AH7kX$qIBZG+UPiHT;tqnSJCG3ph@iiu+zTj-sa#;3V`7%uUMfwJREI1V#+LND9QABP4rlM;#~R+j05X zdq9NSB`%s9i+b**(VQ@O9qV6QbuzJwpLjfA*`McLx9yB-dqfu~OE`0mkEGmoyL66T zAzsLEviF49>!{r@j8Wh`R*t25UW5=EF+O%I^kR01OzwT!S}V_;dsgEVMJubBFZSFt zuz5iGEu)q_u&`y`viYDf!>wC{hMC*4Z0ap^Or$ju&>S-;>+EubN0cR>rpiI!6=zT?$aY0O8qTkd0`+z!C)9Ec$sBAZn zfz=i(y7`tm&F84C#wdqV;Li#5DrVjQ|1?n2*8V$r<4i#isJTqwVW zR{do&ocA%8V`17H#L%)iZDM#?qnLr>gf=E(D20XYIjoQ!iP5)^0BJ-rbxf0 z&6AH1LHEApuf(Vfql9u^lOYsXn5bwUQC|QNc*~#vKLML?V2k|tq)Blx6cw6C?6_(> zpAM>flVHQXt+<-6Ympb2@o+zqR(tj3e(31qdkWg8>>S*hdGPl&(3R87l8z(H(`r}X zbjo{WMJeYrq+n@32utDT_LPg-XPX0=Q+S-ElId>}qT-zw&XG9>*mNFK8x}~SNNMza z`Iy2c_KvReHldb+C*V7jH`r9`R51QMG`QN;5#gEKu>$WL&F0I-R|nb%?mD{u3|cti zw=HMt&68_j@3s!6&Fc@`HA9QCfn>E2;``5@pn>Yo)u6iV7R;ymgWnAm;Yua;cfaz` zFEnjcDi5a0(&4S4v8*)GpT^PLkX<_(i~WU-XUF~1W(sOSbIhstCv-m32feF2^tQu) z*u<6kvd~s{yQjo`l1)Y@MUID#6}8%p{pUy-U_wiO1Z#@O{c}zFNA@6*d_z2tlkFxm z8{6>T5?42pzgpuYfAn#Q!nV^c{TNjfa$2Mo!PJIM0ZNEF4J->9L~%M^aK$NP{#`^r z-va;=dSEmxHBS@Ms+3tBF28gMqUJ(QUv|RDd3-xS?mC_gIUKBJIyhZw|H448n*cCY zAr}ZWpDK2N?$3peVZ@aJI>igBNBO=ce@k}#F8Ys)G`fe%rtnA_80@t-M_WtH3jnMF zA8OgJO(1IV+Ye#(_jQEW6pa6cc>zY__J3i%K$YhQe`|hSwHxifh%E3s5@;4KX)tGF z1L4@opA&U%e7@;x4S$+THrH+vTPq~#=DZ)sbeWB2?BPANA6cx*YjHfEttY{>(5K{@ z^?1%HB-Yt3bT=K0oa12!R`($`-p@LR>AQQ)ojrKA$@p)!89)b|rl6=oS}f?-)$<2D zR>+XnlFw>elNV)2tv&R0ceCs^44t)haJ93#^z&I_v=V0+8gToQttN}zN31e3_8`K?!x1k$Ov{&CKmLHQI)n%rarISqu? zuC-wz0}?XJip3C(t0lb3ui^os(B(IyN)-TKS7utf6{@w&UDCQm=!jPT%!QJt8)A4P zidGUdZt4diHX`~-<(!1;+Vi-ei&8rGy9@HV!r#a>-G^ApYwFXb@lw;6JM=^ql>4r zQ$xqi;nohm*=a9$Wg#kM$g_7(AqD2x!~iy4L1>AJqPjX4W*AJ_P-{n;K-F$@A2F_6 zE$5gf%Dd(;`0Jf|J<1XNt!{UF-svemOC0bn-Vlk&g-h^tV$x6P4Jqw*CroUP*7HrU z)8zjMikxOCpmJ&gD!nzb`b@bMJPy5V&YGitknpk=ymVgFN(buEw^cYtlZjr~JVX$- z2^7ldNy*UB7dJGFW4n7yveoMAG(=LQLRLFHK^SiP(5sx zd0Iw~h1Tc*;rlzfd8-cnm3qn={_2?4&r_>QgpB|&w=A7`8;47qN;3=iZ%TrXVw9_e z4(oa_K{?37fh*+H8K6%v3z;sY%~K8# zCdu7LQN_vE+c@goYO?Bl4*bJMFyRHtBb3b5e{ep021=iwvV83Ft?O7vK2+%(??h(A zJsUOdvH`$L@jK6i)v~)}>WHBS)88A!iQbcpRL5`GNsbL^IC<`Q{T9xiw-oIhS?4A_ zDohE`IN6{-xbUXTRch##KecYYf>4uXYu$6pDLJ|J2bSE{$m-YxxslD6@+DIH$BaYL zm8$uYQ%%Z+cWB068jR#Vs3SiS6vB&EP_LCqXY-JfSEs-)6Xn@)xwfcCC_y*eEyl z*`ATbjA_2wu^y@0n5V_BuA0jwoqs1AnC*S{l(+Jd*UmYk-QHQmk1Y- zXtR5_l0$V+Y?0^D&pdzA35~CBViKYpQ4QD~=`CNE&xf*Y?hG1bS9aSQP*RWHe=YCX zs{a77zp@;p8KFaVGj1O&Zk`?gzz5jw0L)fb?JM}KRW24SXCE9mqvYdyOFzzo^H>tQ)L1DvJFdUCRG>WOQicfoBScUh9q z(%AE%f#>q!NeJ5^!quxLN`CfYX&WWuq95tDKz$VtLKcr;gFB|eM|A4X7#v#Y4Ns^h znf_p(;p*gK*VyL;!IXvuw%#jVUOe~FR6@H7oiKTD+1Vz+PsySPd~8GjVvEZD%L`2* zx#hMWh3f$$`ui5Ek6<$Jf!-tIY zMEmY<3>?Hx_yK9>#mFrm*0l~ug$Zbq`9c#4u&qCNJ_k`rQo-zw{@_W zQy?kg-Ot$i%nEV!@WPJ~DSDI|TB02~uzJ_%RN@pjq9g zE0t>-M+@&;-&$%^&>2i!@*O^AK{s%(WW8Ft5UeT|3-rVsaX~gqcgPLwE`oPV^}8_L zM+;$&UJ;UuOrv@-=Ful64^7qZybJL(YSvH-73MeTzF5nHH+lwc3!mK8@2$7vG+UT- zNUeEKzpUXoG{bt4OdQ+uTatY83N*jMdMzY|Vb6VQ*ZB~y*XC?y8$hY;B$VJO;$r9a z5z~@rEB@~~B9aSVJHOoYTb&YS7nA^F{BMh6+p2k(#3Q zv8WAWv}evWa$aNMKFOj}bL%YJmofNuF_&Q!bxoHp$vkoCZlkpFwDw2?vuQiSs+n$1oQB|cFMO~gh{iNGquhLcg#;aK5a@N?zTY19h`(ChWkV}6Q`;3fv|Tez zes~PjJ~;jS4sA9n^cUo|c#yIVz8RWflae8cQyjfYaWpwV2V&L&(nZY|>cevns5A;I zXYP6rVQ!%#6Mp{o4<)&X-l7qt-N1QRCmqrZAkt2LF1*p!@J9{v!cb4uW~HCPc8ob1 zU(=RYks6lc#?#&}4w(NJdv6&Q<=?f9T385(2uKUkDJ`ua-5@axA>Cb)qf*k{B`q~b zGo;epFbpX*bjJWg>pahOiKKrl$60Jp z(}7*7)~{7yT9J_0^jW4tx*`jG&yO`)XvBNyd zD_XEJ7(o|pjM(tROGef2{GzqV24!5nz%{b&QMQUx;nA11D)3j#? zP25Y)VB?%G0*Lfxqn#Ho`O~_u@42*8pxYY=p6Tfx#*%y=H6|h7bm@Xs)f5}-s@?CE zEx;FtqE*N6NNk#Xcd6EH*YRrSR%UHek&}xA5{rbAN?1s|ok8beBUjto4$VS9$D3RXp=4%U(=I(bq3BfeJm+@1paX z_?tp6>M{IIFtI$7Fp?-<$Y>r=iV!LR1NHkH`80|UV|T|X5KEf5SdQL7I*K|n@10`_ zbW2t8XUvhs>-i^-<{ZMpAuXj;Oe4k^UC9ZfSVE_;U~cU?o-9A5DkQ^);&&ta*w+IW zV0QLu${XyFTmo|~gjG-Mm|b4-Uv(*Y_e|Z)>Y)$EfLZ-$ZmL;W#6|W39AY_vQ}Lj& zaM?n`b&;`0(%Baves({68O^fVg0>ybh(<@eA0`6xV-m>m7FvE%HMTTQaAJe%NMdPE4mqd zX5k_EeIyw%w=Z77T-#}x&3C?7g>GM#MIF>dIfO)+iS7LpBDz3`sKA%wtn~rfN6`3J z-M%{|5lw}mftDgmY+9@e>jU;<2XhqEW1qKsPvE{;_um1}&QCv6Fn@$zJnfV}p)^c5-FVB$< zP(^%@>|~t1VB7!99Bu!}A=rVnGC)8h@lG4AOmzn4Ulz44uo}mxQEoeuovpNkng9x- zcx=Scf}XhOH6Vkj!^zN1{N#L0g#Cq`K=tdTTR?FGDzs|l+NV`JY2~AQYMkWD)8jue z+�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 literal 80396 zcmd?R^;aC*^99n?(XjH8Z_A8I>_UG?)|Q}-rw-n z8tIw-p{uLv)Y)g(J{=-2EA|l)9}xh6j}qb{KL7yQ6aXNb;UVAuDT39sd;dbP5m&bd z0Cb0c-VmF{BrX6z3P^~2Q*uc^-Eh{#7JC9NOpLc)XL;b6$jRaLBRce!mNne;_0i*8 zM)qgNv|2}AVp)u=2AeGhk&q}Z=ntNz&zZ(9_d zyr|8WwT?;Zwxz=iF)h!=u9ilrv0Kns=bfCBxW{XJFb|$fRkr=kr?de@iS9L4X1tk* z0_VWXT{^YJ3NvrZ-?7!;0P&asE8`ZdCT^DhnR#}m!f(5i;kFlbtc(q^R^T#^>qp1b zJUSl_(0FJM!3QHV;;wfH9S&ZUsETc`#{GWqT@MNPSg>kb8sMY3*&45uKP22+?JIKj zEzd1RLkWyHxn@|EcqD$0YJ*smM~oxXu}U7OLa_=m0J%O|E4nuwzL4gg5wl#kz!>xq z-F}H|j{12qS-OuT_KB$e+q{#NL|mOJkKt8gFq9BHS2q#2(z(<3t10kHGxJ4I1jNvl zby{YUhRdRWw(RqL8IBH~@u{ihs1igt6re`eTu^f;)1MUSBAI+$NMFcQ&$|PO&?WYF z1rI)`Tx+M(pxu(ha$}r#)!{7bci9_rLTkgoL510Al#W^s8npA*?Qf;_R$(H?bKwsM z%O$fDa`)9WazY(63?BO(G~b;pjo_9US#=Mjyx$J}VzdYsY;!9;sijl+o5M`R)?%h7 z{xiOoZ&$FM&$zw$;C@0?ZU8%TC9e4l%ocWVqrCL2O!P83#ZzbC{j3{2W@-N<0>2^q zi3cnsmTQhPHM>eM8_!fHjOShkN@AVMqTZ6B+a&@d!DY?$cW1?s_uP6x%eJOP zcwvoR&(pY7?Jp;)uZKewJX2WaQ0qo)aGKvZTvP-|aHfjYnYC7rk5q%+L-tpt=Fjww z&cU^Qh~Mx{nMbJX*eaNv`}i+r0!GoEGibOk6n8H}-_dQ{L`Y4A%fXrVKm4=2Cd7* zaKP7LnnE0I*|zvTUR{{C;_#K(y63PYB0!?O*79=nZ&B;POFMPV1W4P_hm$nG3XgzW z_Ny$dkM070G~D!PXWaU_g*a$gydw(#v(!9Q#76bZQ&Kpd(mLJnU;61C&7wKmO>i96 zEitCNg}B3?i{emJ>$*BfkvMt*RRZsI6YJFpE(~{>jwf+vI*8O-fxQz9NjdQl!mqSuq=nuy$n5hh!j8JprUL_;Mlb^(RKhcg&?&d=g@l3FD+NE9hMY^jFF&hP3 zFd(n8+^N^Zkba}zws2-un9Mtpkg{dLA@r}?yY%=7<~4;aNHC1H$p6Te2)Y=SY;u*BfS!!A6%n8_9xz6e6L;*)5W?Gn~qJGWQ9Nv~oahax7B*o0GzE034&MJt%rPlue8PTYu|zi+;N0&M7sg3{noYZj;zkUx|e` z2I`O#ua?Vg@ti#WA_X0+uEsPXfj)x%p$3#oML_LwfUmt)n=Zbt)}4M|Z~U|mk79K0 zYl38Xu|3`3i~Liv?F%VK)xm91LEU4O>0`fk3_lrHYTT^1 z-c4W%{hjLn9XZFAV%}s)_*j8)K_0{<`6OrM_as3JCzD z^WOLm8M(wpTkn+dP{z7OuhxHRm6On+IVv#@Zs!zF_E~AOKx?yQ=Ruz{e#nk+J z13Z4TMQ|NSe5N07$5~2@5UJsZk2jD2`d44W^h5QUEy z?inz9n6EcIjaQdJoj+@6j~w(1O#GeX_}nKvURGM>z>asZM=X;hTDKFmRA82q&G~3X z(Txe$sE5-cxdX7a_H#eWc~)t$In64gLFU^S)cuFEO8bKX^`twihb{0}RQ{6F4a`;! z3ymDnytRCOWn5BQQ5fR*Q|>rl74J=tTN*NRqhW1|K6+D6l=tn(jp0J5br*lS)**X}5@kps zcyH+K^&**U{0N>%CG?8YFgMrahEKLC3sah1FRu{RR_y+$o!b|`P23hWc_|q^ zZ7vQa7GViu)|pbPtcC~$QzM{k!(6Ydk;I&$J|JA!FAdWhEyeCEzE~g8tj&Ff00Q`# zDmUL8iiFRl)9$3SEs-#LGkNQeQl|Z_#rQi4P{m-#<{OWl)1hVYPbAdk+%Rd8I*M@3 zES_Zjyl3*^kzjPOQVlLA3qA`^5gYj)6Cj~Fu7o2{@qgV`alPVd!ptjhpPJRJz~$Y0 zYOZJ0sKfx6^_7g3t0c;mw4|Lz>GPzi-P|temI7e$$Und2*HD3=$6Yf8&TSYfpXxLP zjzGPnRMm(wr=ONSP#~RZbBdTaB8(Ai4eT$K-D=O(D1Ej=+Q-6%{5mrcp)+QkEOM>Z za?lTBS+YLeU5?<=&{I=u#yB9LW!v5ls==z`n&BZ(dkF6&+CdoY}>C1>NBPH z`JuUHKs$bK=<$4fK4=w<006#NIDu}0o2#a`I$S2zly3j@>8<0)9@G`6gN&z-8f!L2#^~8Lw2crk0!b z^_&t2c!_a8a9hv!4!hP}}ne8j%NUkK^_zuPhKaYnLc}>fs&N z#GLR|NK&?wk%2ZUfdWGH&adEsg$)ck59O85G z4nKHy);VkW(LhYc6=Se#&rq87`Uey>^l+r;Y^{^^?Zxeugta?NXeDB=LtlHV!B94t z&2tMBku;$VB_`+Lz7nlR!k7%+RgOC=C?Vf(~MP79*)jd3+(ZpS?>2OpXizX+^q1?Tp^CiWIG|y`W zI36aB8eR`jTKy5GzIBMu>F_Z4*5oS3d+D85=Tz~0l-AvbGwFUF7LUZ@J)t*WvDJ)V zkQZvuWVI1(67T9n#NsppRM(Yx9!-ihOJev47< zNq6iU4EK7x=FjPUxo+HJL7h71i*MYHfyje(eQqtuZoM*1QlKD*+4beCY23p42H&7$ zDG)Lyb^w-UL5#J|A1z;nyK3&K`kU(+2Vt`{ZO4SzZB*oZw5XK>ly^5g$5?SVIWz_D z(0&A>>-&1ft1SDHk~a+=!?TMkNz86 zRW`4l{&Ht4!Wb&^TM-zH0-ah->9WA-CfD?wc|Rpp*SD5w1qcPh5_J8=(x%K*_RWgG~RtT_yX;KDUrR<~Pv_zL7g- z9QbyE=wQUPWvws|Kh9n%lP9^ZeW_oWp3wB_G~;#&UO}om{-}Y!XVKU1*s5O)qMOV* z%HwM@0sxSS+VGLGo-W(v@-opveAoa0A7AosHlIuDfIm;nDo8N2iH}}6 z#cq^G4n(tAb)k&)=pro{MUV-~MvF#6KDE zG|iuJpiQY;cic-ubAexU4n6EB+e&zU%F??XFEqdcz%3KfeTA$3Q{S$?(`#%G&_A9b z@LI3<7sP$t8Dr!6;w%7axMzbu{A1n0zFKwq7wNwJ!ZH;G5L^IfrFD8v<{3jwbT@5g z5E)0hU%wtEQl%RHDF z02h8QU0!clB28EP%vnK%PxoDkB#AU&l85_ny^i^=10@osa)h^+Au;8If@vAB)dJ6) zj^|m;%RiRP#z5~^BlNWo)LHYsuE%~yGPBQ4rA`n@FiuVXSp2p(wMnR6b5~V$#<0im zP@n6N{WC*?z&YJG*3?r=eBT#`ru<0<5}<{JV{9)9iBwc(Pg`foFKxSpLnYYNm3g?j zy)Pv%3H{k@eTJcUu(4qTMo|^1*5s_F0RQQ_A>kTyytbwy1O%sL(oo4*`YYGMh z;n>8?da*X7XFCdy6Us+*(N0e}eUpL$0YFh}@|S}QF{*AngikSlnv&}AS>NEkhRo zXqd901@~4;ET7di07b;LhGaCzi1DwLkW>)c>+>FJW()pAR5qmZf&gcg>qr#L&oG+M zgr4zZNL|QWXkfeaxW<(-tyHr66e1C=FkHUpD0!SpMLuyg-FY-T0|Mw?NWHE~WnuaA z0f29Ev#It*ccMtf1AK%ws9y@BB{1MVe|EOyOV%-2n>V>JFyK`?Mq#42>g=-h|FiR& zfp_g5ASyCS+V{)is&<$wYwBE)#U$Is@!I>frR#|+?5UC&gO|)=|6ZVAL6ceiX5Z1t zL-`G1?u87zWSvB#`Zjun;&t<~;{G;sxETU5rfTR{QIO5=k7M=h;&tB3AUFAD;!^ zu@eW^4)gB9;SfR7`n_5CL=@CX%r83*oH`?LpcX#mpW^RpgQt~N?hT~KgHrB|1>;d5 zd~C*UEVOPrtFt=`IRR#yLHMMFG)XQWRBkI-N`@DMG2>GXvUy^2ZrOB|%6s&yk6%SG zkV+>~H;p9$K<&5GC0QHIj-ezM4Un#&xXWSI{Br~zu*u22gN#RVqky21jh7Y`EJQDh zW%!gJMQCEADeD8DxGih!npk@GP^1zD4fu>DwCf?zE_1)p>47>E$Uu%>XeIV@bZHay ztzYJCT}`_`)3HF(LSW|B@`a8#z98n#cgvL0*VTw6$22D|Km*OA!drPr`GuvUmb||; zlrAMkajo-!ZmD!etX12OO!FRx%d6UP-W<1K|#=I8ZB)$Ul^0?KQ@y17)k!FojlXkej{Os>+M(Tnb1%Ea#E& zN#{CkRRK%j7AaLcrm!d;1Muw!rb!0F{J6NV58Ve1&|TVfMH^bzShy!6QgpA@-edqE zPohO*V$K(rzS=)nEN7BI*FfB(5{r&Gfix$&`VW05KNA$I=9oRn6@2(Gc)QBx$Q&O10 zo{SV!b)3FUiL$(P+CSMRMV)Ka+0Myn>{cmPZAS~TWr-M^{<1snjOyf*Ah;hm$C>BP zmLqc;pY=M+McU}d7WJ0nug8sYVLRPYNRqe+i>CX^ z2}TiH^(yr_v`HiK4We&DVP#rDlcBexL_Ihh9H7nNEhGMU;eF^1+3IfMW4&u zWtKD%6I<}kNRmZmuzP(mK695q;Ja#ze2$3s7Y{C0ULc$Z`J2B3bVtm0_n2dr19kuh z4pQI&tV0N%w#LMOVw<|KnBgS-ar=|xEuFeC3yf~J(pu+vZCm!y?ON=aYxOQhX+TM- zn>e<)RggZqMRZpRq))Bg_`I7=nqAaz#?p%8z^rV@Ev$}>B)mmA=hyRIE~s#2ob&lI zn@Q3`CX_Nu-h{NzTmS^5Y$ZT7!LVY3-TvFVk%7kNNY*uQ4+l&drNRKmg-zL*9p~f4RNh2i|66N-#h_@|pv^c!jC8G^@TI1PYswhfUJnx5OF#I7%g_eOo^DePW@{kBzaTQ@ja z8*iX%YbHL`9wN-*gE-T0Eg9KG`(M&H->~j_qms0X?}GyA8u@IWcmIn0WSvE)Jjta3 z2WA{o{Zm~QPphoJ^|Z+8%*F0HlWwkSrS?&b_+MRHry8*eJc(1Wr7J6*FaKIzt%wC! zxwC&LR!P>v*=vJlDL!WN+=$i20HW7ZncQ(J^3R^nMTKooN`&CPlE75d;_WNQU$N ziUU8>*dDd4QoIB4_c=s01R4-1qRO-qU%QwbA8VagJXoVFuguQOgPs_m6+Q}1nb+uH zajv7FIrc0G!MQ|4)7;xWkQ&}EWMUt24Fr)aylEYxLE>m}0fGhFm|`$=0P5;CS8R8R zU~vj9<1jDNFmFcx^OAJItL_<9>Y{@3L?9L$6vTGCh86_kNjc*WBWgj)3qcDr=alYzTbsUKd)Z&7Mc6D*N6XD!UIZv#Ja z8gr64lJDug^y?KRVzKgxoiM7V)*PP?%teh*gbaY==fXj^O&$R zQ!YmI>O6hT8)euN0_MLLgh*HjG#>`EPBKdL9lq}R&m?ZWJzkau>_HxB$7wmvNHT2M zuI9`v?x>Un`fG0POwCEEG|AYSmWy)HBI^$_brHIsy}=4_DmPuOman`nD!x6vh!F5` ziNLc_zGR{!RM=QKRv`eS0xN8DhyXo3_3livADT0ksQaQu_Dw7}P!iD9qhL80zziq$ zdN~>yu!3$b=CxI^fY{z=6k{6W1RR-MPiN-EhV~4JUh5H3=6WkWGN!cjn9VUZ zk;958GJERBpuhmMQg#AGZ~$oTa8(M$ScXWG)6Eo=UUI}F5RdcgkWPca*q+!_Hq#FR z)pcMGZ)Fz_TRJoP@-JYpA!-OA%JLg0oG=-@98YfjzEH!dDjjg5rA{JwZ2*U5i7dXl zKk}T@!vd6G(yW1IuP%VxXqz z%_r+yuYvr3Dn2Ce0)R4Z#zW|7r)uCgKK!n^pNT_w06e7|b_BkpyBx-El#*-Dq94;N z0C3p$clwgmob!xD2A3mq9UjY_i zsX1gdkV~=#gcUwv++ORRGz|P6FB%u!EjQ{bFQ5=rT%a>bbOTq>XFda9DW|^VQUlbPNtXAm$DQ6Q zP1Y|Zd?%`tSJwH=qvVIu9|{BER7fmc^7UHWz4(>B3!lH77La``>t-zfLMI1Z6zrAb zWIbTxangFS&13Y(;zf&~!hAR6?4-*7EuJP5vFa7mXB*@CUd(;u<7L-b^W-UAAeYe? zco*l{Muq2DhmPNavf0hdV7<{%eVgOOI_&#n-$26-gqMdt0+UjmA|fhCh`0H zB%8H5S`!4*#7S8-wdF?Er`34qnda7FtNc8<)fzj;TIGu)%yMd7x$IP{ICP16e5MvR zyP;11HS1>{LidU8Z{BR6>B)zaMi0t~%vRG3l~c~MX;X_Dzh_=qs9s?LFKWS5%LPke z!c=nw@- zz9{I#U@Vi^T>g{v4AfPwwd}}tt!UD_@y6)~r6%-JTLrV?Y33#$Ah1 zSVdX>HQe-Y-(-J%yH>9)XsbRKfN?%i z;x1LZCAeFc?AVJ2Rp*RP)bOFS;B5SW-3$2CQda4biwtzf?@_}kpOK3g;C^`+42Mp@ z({@)Z(UPd=>%~=)6X+J-c%Ksr=3tdS1EEuor&DC)&DOliSI?+kGX_!bV#9n{1*_vx>BGhNKRe*k@brqtje$QU;^E45CN-j0&acdaT(iJrmDV;NR4}SYD@^Z^g_8&zAm}JkNNCRdsfBqk9b;}7 zlHNysVSRSX{8WcSIhUWbj0Yquj>-zFPz8Zan+UBE^wTr4Pn0}ef%`UslD&VTEJq8-_y>cs1&c4}+7VEWk=L!pC`=>`dbKeyZ4I7YNuX0N5W!jI_<9MZKG zD?w1E!Hq1_L@PFs^YyMwC-(g9B)Ns#>9#G4eWxB3zJY`QM3{oPFYvf}r$>aqx@&rY zGXS#-PISC&EQZl%h2J+CEw`9#$P%QLK~}p8b6elu`70QQQ9$*$I!DuSPxZ-y>DINt zX^crLHWw-A`!SDuN(N@SMqup^BXcq=e7s5Obb%em1`XL{p;LCsE^vX52!>MrgXd+Q z(_gKD4!?*_Minl3&yufv!WL8I&=p1o#4aI2Qzt9oF#{W(^oZ1$Sf-5H%JY1JwfbkS z9R*=kqIwGXG_Jq+|7!EN+l&3fnIsJn-9$FGRfqlX0{NI+MJOQY?^U9oJ}{lx1R#gpfYF;aB2QicdVz)_aZEiepFTM1Ne0F24U za#Kaj-%LAvn3akkP#+W2tllnAogBeTCxuWZj9YfCGkAyt zryEEn1*a~1IbuWi=N!hPYFNw(SoxZ~p3~%T)t)!RV`?vx{vf6fKIiH9mKnbiN`}il zua1bNr}n?oU4t7*4_Cb{b8zAA^xu1=_g&Qy)?|t0O8B4N*(#DKciP8Wlk*g2w^h_{ zSzdZWU~77f+Ver4C#QG7M5OjS-6eeA!4FPDnMC%qvcTS@8tO{^!lL&l&fWwW#FJN4 zH~TXtEyeE2p(NJFKzks1GT(vOQi}Sl`?5Cr8%7X!NZ=>ivBc;5zAbYB7P5@~1^=`= zo{zX+Y(bbNFv)aRwUwt&PLDfPO$#2ZD}#b;OVkCif8hz0aAtot?A8nCRZvrV-#zmX zpVKGvn2vhTPBlAR`BbFT*R)dYPD_W`DG~M~b-mUbY{DsG+3LL7G{Uf4k_Y?@{p-LT z1qmLa&(n~g^}blKc!}3-nLWzb(mLxr@`fw9mqquzaIJ0QhQfW!@eZ?Oov>0&e?q`0 zLZuRX#IwCGB#0^neW`>BsEG?k%zln{5nm|+$@)SfI6FIovQA2GJuc?IaErd!ik&!YP+W8eZ%YZ08%r!B*t(B*J)L2{5M&%+VV&)Qy6 zPxR^<1H#yP!=yWe5_ya@eTS>hb?s*%E;E__A)$i%SWc!4bPgU{gJ$FNXqmh(Z51KQ z)CeTa7&kvVdRy!nampoJuGFP)u{g9}WAr zdnKY6Q}@%MsM+(CUSf=$)*FfOF0uOOoJ9Bk zpAU<-Y-3SeZf6TzUiOc@_h~lqXqqf6AiN*D7(`~=in^=?^-Y=c= z?SBG%==Gn5qVB5cm{@hMIL0zFP*0CaV|@qYW1Y`VFE_U6HCnh9beEid%1wXFT$maX zJz%3N90Q9@sjYH75(Gw(mnKAcdU{1Eb-IVcH6&% z3krA~rJJ2P)wp|{-M^$NKVymb&$gnNNDL<4F6V{wBd6PBb0un`K&8FX=wfuEsCDh79q01S z2iaAT-FH>*6-c1rYtKK&_B-~@>w)xliq_`LEh3&|9^CeW?AxVw?ti@qp9|Ramdkku zUuE3)gD(>-Gi?9OOAu#-L%J2S{cNPSSIrVMAm};RS@$+p!u00&EGK6@xqFt3z-+&f zd$`zO;CDL{jle|j>M1Kt6YB-C(^gtKun1{JNn;rw@o-ui3|~EzNLBEDT%+HrJ$p-b zeoLjNLp@xWI)A;4>FQ($C&78QuIKVI|C{*U`V1+ALhk3@22##^-l}O`vVB)~*30n| z8E*Gy$_tLDxtm*fs$LHfXbsld2zu65k!8VP-Pm`fWU$7#pR;P!^V#!^Fbs}d0_7=B z(}B*p>~VR?M*cjc(1V`=j>XnYD9>Zl#qSL45z6<0?H+YR;@R-^((u<&K^#nxQ-=Ee zf^(G|d>xy9yAbFgvF0{{=J11?y#UZOXPCSmb}l;k(W@;SK1r8 zbFYr^S&XOGw|f`fHqF-Nh%>wPEA%t~Ai!pX94wtND`&vlaTnFT>J?XRZ)mOh!|TEU z(w^jU9!U;1{c-P&Ju_IUW-#C`LPN%@>)2+_JF}#ZT>*ubvyOyk$|zzz6m2;J41^O;gu1d-iMI;f>;P)Y-aS-WK%y&{9@)`YG>>b1%V^91&R$70t3-r52rkxydiL;l z(1MF_|667>HAHK-r(Xv_3sf0MqO+4QLi{-IHAqPeJQ5;K0_Z? z!`Xh{(9stSl!GO_8L{}!RDZtbrC?=lIJQ>PUk`(%RKiC3Ig6De%jy5M<(2T4*G@j} zH_3iShvNuugL(l*5 zwm`(>Aw!Fgr-XdgG%AWYUuyI^aorNa|4VD_ z32QKh81iqi$V!URkNz!Yn40A}(C z&gnGL!r#KiLVIV@6HW$zyXt7I^0?XMa3XOtbDq%Ldx}Mr<#q*|1Cm5p4qEHx4K~qZ z`?Fz-eOGnY;q9uXOS)W`4VQgHIfr|f8xlvU3^hi#Z@My4yc(kvZucRHM4So>_T-gN zPmVDmpNbe8@0SA5{#PzqUmUkvO6aCMz`b%u+Rj}!An~N*p>O(5y#wf#fB7uRtu;*2 zvGxva@llD7%?|U5N1OYCK8s(}2b~`&T`yuPm!6(^uLxmtndpCE;H`f8D^s_Jx1;hF zgVJioB!?0W0iYJ~qX=+FTS_mtFh^{(Q~jF|@^#!duecV+n20~|NxjuE8_$fRcrEkUz2OOW4`2HC_UFq9 zs0ZnE{fjh)y%>%-@$Tro%yU1#>8}a2Zd1YWKZ2geRY9(YnU0EHZQ2O=s(V2Hs{mVNXf0WO(J=%llh>&X;KkR%t3FtN1 zbp3UDVOEz=*qdKxGS!THX2JH?62y(>IN!(g?C5a@?J_gB83KzMC&1ghZ>pfIfaPBp zj_kL-uOZ99eHUqDt#gt6=`mr5gpm6dt%ZO0^tUR%&eO!FXTSg85rd!ucZS%v37A%o z?y^I#^t9`vbmp-+jTH=q{&siAmHY>1Q0A)z-9djFh5Xi0SyKn!)p#zkT=|rv68*ez zB1rqH+H9d8A&WS{>%;H=4KGyli0_%4Xj8*6_p(fez` z7<_D#es1d;u5HTIpa98Tb7rQhidn(W^XMLmpc|D!&lV5W%w4x=S$`VYyPZ#TP8t2$ z|JiF<850>dZ8VBBRs;amJ0I)rmgj79LAzO==W%W3CPEL2USESbM-Z;h*~|mF(o~EW zaEx>~Ury||yzY1L*2In_?C@C}18C<Srdy(*85p{Wj?MUr~MlYO4fXW+dT%zqny} zOcwGoj^e>3sQ{A+IH{Hw7RXLxARt5rAuND_}u*zYfugX%Ou&En@fibEp-V|rw4YoWdhN>zl+oM_3u@#teoj9V=pdM}y zm8fWB1nOuQu2>`X0sLLe*uOcp2W1*?&W(l&)~(zYEqT5|bE@dJHCs-OL&h)=h{n`TFFd$f-Do+d259Qt$|^11BfE2*~WmWC1$`TRR#UUgOB6U8OsP93&e z@l~cTD}NH}LD>6^ZPa=8MSP2_aO+r8TroED9-7CvdvIABT`4^GB{4phaOG=ngk_v2 zMoM=F0a*aI-(9+LRP;33e8_dcM-Dd`fK)|rgPCVk5TDNv`Y1Tok3X$|SPv)8ntq!j z{I@fem9|I)Y_DL}*j!W%5>9i&@f0N9RViw2`4b8EQ$;Gyf_jGDuXvG7xwa>?2v}O5 znqZR*eUm7A3OInY(_t3!SX(hV7HX%_^JAMIx+?$xDL6;`eon|#KdICtUGLPL?%F1Htno30+Mfk?MdCjLbjea`>nQZXTfaV>Af<~_Y&?{_g$%p|!1FAYEqW9~0JKM! z#nV%9v_`t)hh}2SE!Vf9D})-yy}v0b$yaK5lOKBI`Ym#07A&QVTJEy>;Lxo}a$|iL zhCdobd#dp|LNuS*M(3V=cSoUl^%5D(KE-b`KQWyCRuE0?@AJw^AL`sSF)WOi|33Y#QG^p3Sr;dUU!@(jLBsU2Kd(s+?L;;g8-kMYfa%ymZuJnDW@%x9?6(^&x0{yd(KH$i@3r*2#}RF@xV_zvJ1=iMF%Z2(59lm$jvI)RRcZ4h!W8(ayd{bP(~|7!qx=sJ!tzlThgp7j|A|9E#|q z#Q9=fgCJeW0|-GhX)ysoKHMqpso9(D^+4DtbdUD_jFXlea|EuCWNCj+Orwia2jj1h z!{5qaI{4%^S@{Be`N$j_k~M)%r*adG;xZ(p`43AN$)ew%$;J2Rzx7p!F)k+Yz$%KcHBD?R`r-wvkmh;^ zQ%KX#m+Zm?F~5H4B>ssKjb`?qjI0-@yny!{v1}Sj8O;Qxdj8CrO))Jp*k1`d#02{C zKIr-S^d}4|!zD_QCrQ57+5i+ynMMP7d}Lcxt8He|_*Xi?Y4k0d*%kl%vp+_;6~5*N z0OXGZmy&{m%5<@C z5pF;aKB$A-9XUC9b_+-G{tkaE!;5n10V_YE7-TPYZCL}4vOk4@Up-C6U)Do|Eq&De|Lx&l`1a#>mRIs5@L#MJ7dy5K*pBnqr=fGgy z<0`a&#Ns~D*`R=*E^c3e<@r5I{BVk$>DOS4OFOtkow>6n1(rjk5tyIelC>@W#2|Jy zv+j5#{30D@h4v+!8k~%gV6mm>>@9VOgIUh-k>!VFK~}9xN;+fs(k!l~5Gwss z{a4+W3l*u*ak|c5()E%EFO9wP;7~_KYipD_NP-U1(xIFPV~S|5F33cdux8QUS7jUs zcTm?YGzU_WUiCu6A~3O4Dvzj?*B}~ z7E|iC<(kmsijcm8Qy!n?a!I4p`c5+GKeVh5hs5EKO)u}#Ps$_!#H4W$%Px^I7#rgF z3t`PX5D?oc)$iAx-9d3)obq1{qlGX24bSqMRa3sivh?pAnnS%RB_`;Q%5HiX0*HU# zGdcWww0msXJBBRf4NezSuu7XMT#zOXrfHV{qO&X7sOlN^KhNR4I9eGl zRQx;>jfcLf{pBTBr7%G(NJ%#~sIuWfm}+f@ykd(ubvfJ9&lF0F(Tvbdk=m>v&Sh|t zfjvXJ7$4>L^upWtu6$Z}2e=-fybV>czg<0u~%{7JO zHgdY?RHrov9X^xnLj?4TGIm##suH9!#>SUYi;e8SR@dTI{mG*B*qChV&&$J8^%FrR1Mb&mhM*e8A{xR~hG&<`z@bqKwEy zR-kxHY1k>C=V|PTT|U0Y?^>?R3@kXKxv-)}VVLuSrHFw;7VO#7AZ#~AsW@J%FNON- z2*i}r6KFJu5T;uGbJs46avjK?t@0UlE-QkqA{eyBszmok%0vA*TES+g!wQqMN4%M^ zV`Ll!n=ggf^%5i8rY|!UAZ)_vf2J&Di=p?sMw?=Ulp{j8^y?qwCpD$tGnUnS2?01J zrOgF$$>r5_r%D2#3{?GA70j$gqoy>g6QPOKUABj<84UePpNr{VXKRjHjSJgIyBm zHpD;UNy28(b8YCc6eau+xIP}D0mS$!5&qN)ExgdDHQB}xUx(3NPCbmM2!^uxlIGKl z_Ac>0&|s2edN)uLny_09ksQv%T1dkK@6-Q01lM?6n3`@7yUoiMd7muXdP9jfpmc~B z*yj3;qAHwybB~fhx(&2Z(KqI*^3|l*$r_D+CLW7G8$`kiXB~FfSA*pUgiL6k_0In91~2PghNZ zq76Qrh?}t0{U8YYwZzY!50}f-w9Cf@cIT_{yyKcwL#fo;*poGWwYy99~sy` zdVXR{gLUSlpN~x~K^l>6^rWmaQOq*$z*t1#w#x97UG8sPvs~2S~>`giJ!y3g{Q6ceUJOqckT)!<~{oAnZ=< zv6IO@li+Dvpcl;N&z=5)g8onau@f(|>Kx%RA7ZAg4M)5<6$7JCOJd0J&kZvqynE8n z-)yR5O`$yHbPu62Jh!85;n~nW?N~^r6&dM4z(i z7lv9{TS+M7*IEror?fhfBqu@DWVEM%su1|JMUg2B^W`dDgm^hDGFk3x<%J}RJd6v6 z)5oDO7ZrXNC#*r}@k@wHwI_OIt)vnH@n#@By(IyUkx7)^+c_E6UT zs!tmIw(m)4sI?qBau;eiRz@Jmq3D!^GbOuUP|!`w34^Xhnp}0Y{zNkTOPR3oYnHp& zJjK^Hy7Fx3;?##`j;~1)7LsJX!pH10LyGW3b_+LbSiFBw?}?;f z`9DEZT}zTye(N8q+tmDnPKiPqo3J0O!Z5Q(*sz=YSinh)F6_sb{j9dT1val8kzmIS zGW_w~0V__knTWuO! z|EmCX&c&Gspzqu@4^KW zOZfGcpah1VoSvdNF|UA*KsQDG!uUBRI_S$msB}tu7wM@Q@t>BS5arIZhzGx|zzETv;vf zI+XW&E_<@x0@sEPSIWhhyUJ8vqk=Y&QhU@ODNG$od zhIwEuy>>n|G5Iq8Pw6XwTwVQt=yOtmM|R{>BAYlo`a{8P`=y&z>pua4GyDOOlV>J) zrcUp3hxiWj|Aa1oC!#6dJ2YsqqCeY+I^#lKe-906#qxilfdGJiA60M!gCG< zT9-=oka;%T+E{c7&oWA^W4j7A;X%gxv|`*k!r;M_WhNO`?~1J~jB8{t2dpChgE;JP z2}_+170|mFvrXM1i$*Qlv)lV<{_Q=!^E)rSbjY9(s zZ|A)4%ssR2%$fOcKizw4^;-1mRkZB=R6SL{{olKOy0k!74?$Tgx0~g^3yW4d)cjlZ zwG2GYitxo~`huAG-CN9I95>hH?+*km*6E>wtTkm1E(*DLy?@27ZFF=#Vlf=0G*vRny>6{v9tfJlECh<+s~?u2v65Zc?A>$yCb8vM~7)}Q=Bgv zv`Mc@J$}Q5u8=WRc!FZl`O+~F-8M`vH?m;GJ;viIWtcK7+?|OTx1C>u z3}9JgjVA&c#prfP(_W#af~oDQ#MYpbMEjIS_x0_C!`f8eqy}HUQ^^p1QDR$6S4mpF zAEv3qgTl>6VW5?#qcY6d3}(l@j&JO+?x-7$&y|`V6v0vSWDh1sB^#@x7$vY~&H_74 zR(|occ%F$B@`X=RBx~u@mTsaV*JYE+b*_Sq$F1%$4|h4jJ_fGK`RAx4Jl~JXNv(wD zwOn7>d^4}gqUvC5-FYt^tkJ-zPXJe)ZOfYdykZDxkyIsxpAQNzNsf81lF>Ro%;;#P zwdLlBBuMx=K=S$D>k&&Zl8p zAx}&Zcu^jnHEx%UkO*qpovCVVtd}h&F=oup7M=7l{Bhk&hdnjA?LXS2F=z4UI?-0r ztp8510ghgNZ1_wrIFZ`a!{Fw6HLyBDCa8+|cj?X!N2|xHll+m?I};ZuD?AURPK6j4 z?M^joQJsD@mTA3q_IqxI|Tk6UD^BXRUX=>_UHZ(V_c!b9K{*{NZCY($dS zbt)XR4W`P9WR#h6G@V8U^}d`TdrxrnIMURDlt?$?Es*!P+fb+1+XmYYWv`YBV?9g9VmSy-Xd_(F#} z(dNele7AM$!r& z3IyQ;&huQl{{$Y`%92oF#1hzWVTw-O^KTAdf?0DL0#N=fR;)aYVLK^Ou7$y?J}cEO z^#ViOxnMYc8^$ggsqJHB{~( z&mVYi8kS>Y@o*)yY6Ge%Lm9{^=6B3`*#h4Y^p1QBXJD@Z^>+jw#fI0>DAStI7O2Wt zOqL$6IQsaie!g*0Sf)>bwHZ8q0qhFw&W~IO?(*)+DZ@|6-g`EdXCB8`dVTwY)4^;+ z!~3ckz-*@C;2@xU_vo#KIzPX@8 ziUBvgxGtxCPHzVt&?nY_tRkGAjMWZ7WhJw|%l^axK-9^FkCqU6q2td9f|Y zA8DBSX819ZccwElDjLV^Y8gUy096b37dD@yAME@2LO6gYKCQWeHqKzLrNJ zSB>)tvxR0Y`L&^*cAUg$73R+`Oq7ngb(LQ%wiz|cA-Nw22EHX)I@5~|f+SoTH5XP? zypEc;>+5uYmxmN>@{&;Ha4;sVuGp+fChs}!T3VNwLPch*bccqxhX{QsDvge@<93|w z%+!1GZVq;y()e_1EvabgGaW%>>9%yCH|IQ#OtLF;Lmo>%GvMKgIt=Y9q?xB2_clW3 zNn)NNh6A-qDe=Z$a8@K%M7Vc)wQz0!R$n$y@1jM< zV{rf0B@|p8)32%b$^fzf6(ce;2QP8DKHf>aT1pkvQF2sDlk>T5CFtMh0Dz?@53sd) zhYKw~@7h?}Z~J~dSx!$SMk|3JbG?EEytOFJ{(_Q&^O8=cZQ^IAvbKW0pV9gG8;g13 zfT^asenS388rHR$!RBTDOQL+|bCVtr&E=8tLa@&v(Ff*u3QRIdZ3Q!8T2F3zChTxN z64Qj-9T%etI1^7+tvCR>BAa|=4D$2lSgJHpk0%~AUwek_Q=R3i$R(D4!V~YoU%Re1 z)j8U#KWxqKyfZZXOW8I{$h``N5>#^N(j!cCm`D`{`%Z#ZYNJkqooCtpOUmSmFtCD1H4t_d5uiy8V`9s#l@rV|7wgX45^4P)O;>uRvD#A&l?6 z*F=}aWz)M=lHe8tlW+840(^#nI_JC7BMoRfdRr-;r&QN% zyuI?@Vbn;2lNYJ%Vntr>c~IpvtdmXeR?J57af=L+5bM|#_LbHV;<}Wp3q!IZns+&= z3l;j@MS{5Y)*bLwzmlvhwWcX5JL^VR^UM`+b0W%cn+A9gSTU_{bJd%+fa@ zPFCcd=)lhmQ)WgG+8-_CEHri--wz9&ht}_lvIBH@r>f9qTB7+db<@1jocm(voNNn28$h#v4m>vvx(3=|1ZIO??&rP-co zxYtz=#}&|K_nwaoehBq21YTQ948NL{3l%e?1~cZgnD6&tQ>gC2CbMK0{2!_hHXJ3z z0AYZlf(}?TZGU^3XI$LZyEDIIo{Mudi`-AlQttvzhy*bob9cBM$8sI((usSvwsBeN z_jwGkb~7p6J+NG->23EPnDUS2@0(U8F5zCwM~yE0oSomOkD`h}KzTdJ=JAs&CtpWt`lX!MDzIY$+S-mc7OV zcOnNHq%#h$`LsJ?Emb%r^j(61bP3>zk=@muZ!r zS-913I*kHp?ipfF?ZPFS+icL)N#X%!jwvnf7UY*2G-=~JH_a>(nh+#Q)#QHpHjE(83fLT zW;fk?vWT9BIAfM?&(IUPq^4i9&X?Mk?^xV8H+i^R_0{MI1N5ulVpH8E^Mf_ThfbpJ zD5(l39JCRY9>hEH;PK?2Y#% zbk)CcNX|57oN_xqKldLQX1v9huirDr9EFGm2z4z-@Jzqtd?5*(Z0ly$F1d@)C#K#C<-% zA5>nhTZGTq=S5Sw>xc6_e_=m|rhn2oV>gC`3JLPC!?U?7tcToSz~QF%vC#zJkD|RW zoB?*T&Qj2RA!O*^1B1Gs7FYLQR@6`Szt% z1B>HgV*H4uOWl9G{6 zKw7c983#Fiw>@Kp#%nN&$c=?nV443(%cWd)1@lM$Q_cjK|EXG<G~;fASV>?nw7vNZcwvg%(qKl7FN?Y9eFrPtzPkxX;>dm zf^iyEB0f1;xz}n{If@#@Y1d?{6*K16RPfl~*uq%fcPNh9RUVEUefNQE@1aeXqUa;& zbouvl?Wo9dxqCzS>7)Fw?Je57<<_M@*2lg;n(>S7F0EFNh&pbk)w9sOlr-m!ZG(I2 z{4ZQ-Nsm(x0aKPg|CIU>7qUF0&V~^P>qPFYUfxB>NmiB(+hOZpr^w!{u;%;lDd_dN z(NuyEu9Q1+=2SYl;D?yK4*Zcd$3tLjo{A-^raQfMfkG}CQ=VmEhIk=0F_(FE=MI@M7xi5rnL#ai)k2rK zlaFXO1fBVfxF^XE($csRa(=xS zX9YO|wVzG|=CtWmBWVYQm`tDGK$MIVpMw#)+ILU2HjS=ky=#6MTNhrSr6i@L&mrLe zO6R@Dn&fX)r8gQTXvV-ycedev>->uA;jZT8!f>v9{VXAS@J6bOm|(R!QRty+n%dvH zc#Vcw0DgPZL0nyTz624H5bOg_LINs*jQ-<=PGG!cR*1U%ezMq8T03*@L%ukt66vGt zF%or1>+O$sZw5b57{DiS%lE>kE{zJy?5)JyV;Nfq>Ea8ktGS{gzj}4$2v6>#N;lV8 z@W;)BelA1!d(vuEJ&pQJ7+}NBK10DbAz3Vq3wsN8uL`x<7MBh=qZk;flQM(dM_Fn= z4(m@jQ+lj-_=r|z511oL4n5vn{Tg7hxjU5mE=P4w`{nNEM&-!%Z+(0=)mhUgKN|W4 zSKm6Qk6D7t%moH8y~#eQYtzsd+3N_k#sX7D9vwZQW>fhbJVrMTEFk_&GerB1#+#AE zM6_c}#R!qoS+@Tc1lF+isM~muToj~^f61QM+(rWpUP=?RQj+})N0mrEWowBCPMO~3 z8_J7C>I$Z2UmbS**}QA#{4A|uWYyRbR^OlC`&K*Bz~&X;xHqW9nHVv$T*KRB8vWpP znXOCmqoZfnOwKh#vH4$j^TGGu(<=^@rYN2h(R$*=?Yi!m51pE9Qe(6~Ivu&bA>al+ z#u?1EscHzDrSmyGY0I++MXOF-xf@kf_lLxeWO`RwJFY%Our=K+*rr#Wjwj0gDM(0( z-wvstT6EvZmgHsj_YbyeR!&#snJL_AiQfM*!1v>8)-x1xwJiG$&hhb5zEMht7SrXc zTe+RIQV?cNt@4CKzS2Eu@3a_GAYS6QKMf6PzAl{B9iJ@jyJqqvi#9P{MwDw)x$H2h=#eK9;dfEZMdZzEiBg2_kGFlbY6A*OVjwa_j zukdJ41yHkobTC&CrDgQ$tofnu{@j9pnYm8rk=UUG=Hh{x$z|p%bn5tTky|`hpKj6;nThGG}Y}_=b)u zluyr5i!>l!-3wcL=|>EKMT;|<@X41;kRU!+Vk&0-cGc=x6xntfgHhE~oIqW48urHO zDM~GiET$UJg_0fMx9D9aWjL=F2Mb`*W4Qr3j5`6+M^9YeF1_Q~v^#oKmSds&%5-qY zUtPn&yK`KDmc+j0A(y%PF!?3o=a;0x5HbwKLTdFpz0S$#qJH=HwqsLp|ITVIt75cy z^!#$9;7io(i69TvqsP|873l)RR&o4Ht4Ca`takqQADdSMu7C_TrGiGb=8hFZ7}6bs zgW%K*H{CCF3&ROIpTlrm5tID2KeVHbpCCTaokGukVXAFGMo{@Q$oUuoA#_oaj>p-% za!`nR3=`CqgHPTLFB0|IrZv+A!>9S=c8;&^A=d`h&AS^V<3jKH#q+#xR^ZxaA^A*{ zA)>3t+{|;x!V!bOsp(u_%!(Rn|bHi>sQW*#hYm zy&`a=y?YKidH!C^Way^1ZXw)jZK4W-iKO2)Y!=Uv*0`VU?)AII_YDfUQ{W;W^@aMO z@2v$OUq0UVG|b<%z+oW5S?53;dTVmkHSlvoampa>@>Nd^$M$b+{2G;AQveMozgZMx zMQ%HpfM-mq4n@(z#MDG3y)gA}=8s^R!6XsSwfepJ#$P{jg99a=Fy167gS(Y;fH}mL ziXPA*7|SAW*DT2sWC?0$8ImhWFY6uJ=S2`X)N4t_Z+_EckN`X(0dKBN)b*#?nz0`Z zXBsQbe!0UArCA@p5bdd!4+ZMCr~bjBdbqsW$}(-lc_kcHzU_fDLq+X@yLI8=fv}@=wvZYx ztv_iRqY5^>t=r;XHmEgt_wp~So@T#~r=EFR_qy&RZGA@QQ5d%nLE*T~>bqT3km(4? zxbaZ@BjG?kjW9F+VKY!%Q}o#OUV5bmIXC$jTsf`DZ{9=) zsO31LK(^$2$arlY71}fG--_T4`QPg%947gG>u%FoF3E~7!l!g>;5p;u?%ri zQp3S(laIti9aPKz3Tx3&Iv_!Az10y`Na3n8!=z99Bcm#oAlqv_1`Zw0x1N#MD_dKwmaTJEcup4 z-3Pdgv$i)eDx>yx_hLkAxjk(q7*pOV(3r#ki~{nUmq%{fjZw%uPtovy6){?0bChzC zm3{KJGj}ina5F9~ZQYdQy`D>DaSs{Kc`o54>Yollrsczkd%R&xM|QeIfYp!TkGUkby(rWVN8L zV?>W}kpeq2czc2f#^}rMYv|1nE)m3U9Xv|d$%@fX#7Rty_q9;=-aA`Nv#yQQUN}Mp z@&FMf5T6yB{lplIB-5V1JSbN3y&t^1YC;!<%dtGmKIxd-wI!q}tsV}Q7dCH`mK*hC z-YPM#Kd>@1ElsY1T)B84d5EBbCz&C@`GnU}-PHIf3s<#!Mf${B8)sXqIGp|5wv}at zG#1jVU0Y`P`S{Wrlvh<@Kng^T+bR!C!FUE^nl77D4ms+BVe-L&-RTOL+498?;BQ|h zJIl|2@fJN~j4?Hh7;HS#A|W(KM**kH?#+dYsr$~Y0VBBJd*sVQ6V7Z_W?{x&@5L1p zDU(~yG*A?fW4|+jSMRfsnv#=Y=62npG9z(uke(MdLT`E7d*-y57WI?^j`TW9+e21x zY_LJ=v-nzM{p=QcJIXx$3-r@+YG7hWQ*T1lNHU)I1fOEL(d)nve^s0mVXS9g@UVCg zaX&<>GUov*BGSYW%{=?xU;MI$$fiQH-!J^I|MBD*+DnE1{e2Ig z-NS~BD`B=$|E2}NPd{o!qw}TPYuk#~upA4yGL1N_4KIt9aQ21g{r#|8<~aMc?#Uxl z@YPyMaddWiaW?n!ByZg(P0sRyA8>rIh{LMQm9OgU)O?3R5cT_U|C|5{(crIN*~7nn zHtH@?Wg&JRV6OYP;4LrJfin+hyM4{>Vi4Y5YxGS}TD?~MCVIj&zP)*~!Y*g{=o!cYy;x;02ne9um^ix% zJQ8g42q(>YKkbUwtYl$pJtxQeV6}p@ZZSWX!ig&c^FAmi0d?cV?QP5NPG*=jDhNBT zyU*_mCq|?W`dK;8X6r|adZ1?u{9kzqe^m0jJ$8AOu=BOpl`UbE%bbkYqaH&9Tt(DYHoF!(v}2> zrF@x`yA`GoiGRqglC`0}%z1w&_4hZQ8c=l=c(hS@EQID?s@;a=Mm^Ee4KbJM#&tt) zi!{uAeuq9MOFTPWEN>&##%l3t5=}U!;Ur`8o^M7=+U)%4ko!}aY~?L)yGQKvD9;zT zpUM(+FoiK%vfvD-)5l#wBzFYrdOYH^u2uE|&L=WnZi=?5ik8v4oAk)(LEM}60L7d{ zs|q3b@=b{a0dS=a?>&VKz)L0lfvWwkJZqv#tNpBTCrV>z#qQXqqG;a#G}VQqv1gi* zih+iI;{Gh{r-OkpVC zMTdg$JwaN=&D}~HDG_lr2}vr+{>}MLYBgbktGuNxX8M4in6qr}K1~ysc0Z4GPT|1D z+~2Bt4QGDJjki7frT0C1Yrl{7#>%A{NlEqKWzCfvyE>Mv8__{P%eD3Cc2#>Q8p0Ld z#RFZ_#R*1@9Fm#Z3jwx=&Yugb6c*Pkt{1(wn1il=cE+3eJw{>I%514}MxYO#*P7d+ z{>xa<#b1h?I$z$pFYq-Q%jxW>qWgt*cHwkQJu4vDfFQMs>h=d-2ufG5xU;sn2A=)H zJ!R*IcjWn7CoYh^hf6@?=ppWf5IN7FesQR$r>*pxtJ-$Vdsg+J4sY5cM|f6hmQjh?)Gw)ea#7l5F?+4@z~@H8M>oKAVZ zCE#k>Z2gECMZe$UAg`l?PFlMj9k6|;g$;ltsY{!2Y7*t2?QH09 zQ@*=lr_1`U=D#P6^kr*FQw2m(Xk}$&@cZl2Hq2*1DL<3ttEh{+w@h}%ob+uY!z+t? z#Vx|M?heN`h-4dHZ_ii=W-E^xHne=c>Ls5|4qcRW3ViA{erF=HOr?DoQW2d?V*vWB zog?oV$9z4|VA;B+sD=J~_xhAmI!ii{kz;6pPQImjXKs>h`=H{^dyaHa#28#lcn|O4 zW`kz@W9p>5&~i|UEjr{I{lqW#IubT)-#hBtf?*9dKW+KKGzh*8l&siJZaW==ysvy; zOS!gR$7VgWY4zyz@u0|3_`QW?=|!JTDvH=OlTLYSzr_(9vkqh~$dy^Q-DTp_!xd!P zsvMPWeBMHf;#~q$S-@8^loo&vyDp{EY=PMe8*fDM2vErowLfS8m;6`uq^zau99QK6`FUMGC z#1erGaGOjh8Mt!(KL5vhVz#nQz?Z|Lxl!6x7W1BATzsY_n0?Q2L$fu#6 zKX{jpLQ8FE{|i1E?*KrAosBD@xd{%q{m1Ivc71A3@Kbhb3jOiV-rW0OGeJC>6KN~CZ_&0Z{b z7@u!qLcQQrGqI)LF-;T4LaOw_i<^PiLSoHcWP2KUV`Cdql9<~!<=4#LL$|tVL~yJoQIVVGq%<5WBynaG7;eehB$J^uMdNl8R0YcQ|$to zXWhqPLzmqWPUWbfVnBU4@?mRy9`vagme&0EX+nDMC8PB)ouW|)3T)vn5Le4gUa^@x zLca_n{f$6}Q+S6p+1WRT4N+Uzt*6feHr8cJFnNG|&P`kAs+~K&gniZSHn;e!>CTZ0 zF4S_zN~bb)My-S9VTmzC=t{(_AV2JD-nC%370FM>Vuq9)cJ>K^Onv^%!upP^-U`95 zN*GJhLT@S~)Y%dl?J5{72K;Qiiib+Rs5Nh7(_HC?6}o6(b)25Uw}|wAo;Z4YF$te{ zcr7S2{t;k6Mp$B%k3iu9r}gQi!ByG9-__2^OPy6|=D?cE&Q3?9cUgs6KYr9w2AaW3 zX3B4N+p_tTd@m@+s5E76QUZvH0(K49>Fj=Av4mp^ABWV1Aj$#9oK~tTG*{coX6%uG z%Y8I^GqeADq!yo=Q42{_A78=DZ2vmU7^7liVQDd&kcGX5A8l|JYMuBJm&SRJ7L0yS zEMBj}va#em+Z|Y27mg(wD#}&v*f=M+vcCk&S@~0KqTSAL?`#q4I=c@tre)Kc>fXBZ z2-?QntL?i|)LAWlt6dNvU3Oc+uKv>At$@(Vq(72|cIP+7SdR;#wW$Yr|z`MGfi8 z4isx*s!D{;ZV%zPS7E)FjfAtZezfjc_t*0NW}1Cv121!@_%U408hz5)Y|KYV)wzBp z6vws=-4?SvvAK&5@O=K}Kzc&R#Wk_MduDv^LN+O(rlfhw#VhogK_iA@8{pXuGq|vs zDoeU@BT{>%tR0>vz(X9;V3Rst9N%ho+zEu1g!qas>XcyR)}kp|3cQ`eP+-to`j4&dR37u41Iq3DEh6q&HI?|wy*K{{uegE>NnOt5 zxBkA(v+Nfyih$^=<`V(*jxAqHc?$PB1qLk|3$$Z2Fk5e_&j0p#ridzg)xoKnr=Doq zdk{-XWGLRh?nAz>-2OcGpWf;H3+jLLeuj5DfH*qnZ~K2G*2ookr4TQJT!tEkAI_F= zzrg$a*)3OJBeB48j;nF$ifj2d4u}4H3aYd>1;iZ{d~ z6MLP~+}tr|+&arYL&yEc9%4P9dfQi246m;2so22O9m`4IVSt`xc)Q`9rvqtM84DGH{V7do;>X z4>XJ&57!AVgTV%AkPnUxINel z$4b(>e_ZMScJ&mw4>e{WcZe9Yk}gD~xzyEi-1P$QW~RP1HA=tgQYv~7Max~Db;2Q= z43_=EX)CzbDD3+B_O?(MbL8!nmzz_B@pK1_VCGDO&1cYFAt~wVodB;T)Qu^#GLs*^ z5|^&0AdJ?Lg}aZvZNGH{jYB@5#}Xx6Jn0KX?|=y(mm*h=xo!{QZ*L-vcCTAUCXatY zY~qfNuSG()!N0fk3>w#>f(kNxmNtaIVKO!s7>G5?F^pwGLCQxT{m-<1ZH4n&0j>DxK+w>4jeFbxg|bm%?FIE@EIhY;kw~Mk%C6UQ zwhxtIBU7|xqG2fH;_+@>SBkMl(=Qaw`M>|Pu~L$;RJejAylgY=!bo5F21>v_IX(mA zRQ9m6RzUa<maT6*@sP8`q~}{)n6Y=Z~5CybgR7 zeAih5wJdw702$iFz?4Q2+rxBDH-D^B=_lwDcauf=qCV)nsq)e!{Zy>wp=fc3X@aL7 zI%~ki^9t~I?DI#X1#v9oGezN!{@?pLqMWRa+(1=A`+LjS+aD6TFZ9a{(Oj7u8>foi zXLT34TI;nZ%H%1K@+2qN4^#4}d_^IDNQ`rNUCExtS8~&}Cp>h!l1$xMlcLJ*fLGfB7ryo;t#J|K5Q&f5^kcdIPA1wMp7#e8u$80IIENXe zSGE|0V_*zLVhnpY9j=d0gHsRb)Q6uHEdA*{n`)*%TNi0o5-AbMi~dS22or-2F-i#poul-!%DmMa>hMg`(iHXmJ=^t355IPeC9&* z{3K-bDs0f3ISKb0f9qp#=KX6$F93zyD{uc%X`S~(MMpy`blPnzaq7doP(`=Zg7Xrd zMq_eS_R&`;#B7GS-kPa6QM?2ey+1gj*F=nu7mtk_kAT5_`_pl6>Cj{?5%$aTLSz6;nJGaq+NYxAM(j;$C^<7)WXtCoOzIUM^3GK$dC4d~&!EWWt6F zVVvrpj;0YhY~YM#W_Y{_*cowl%j^8-`dvjh+h|=tgXSdAT&I!w)2k7Z zD~UKWH&a%`&Hq2)9ku9u)I1SXy6^uxIPqQ-1(Y(}k~Z?|C8`Mi=!y(O_A5(mMjfIH ze^{1+wVULpjz(Y^6`*A}<8nFiTb5BZ1R<3(nG|d08G>gyon26zp(ckDl??;`5-pM< zHWfBD+nyqJeai1)^XLHI%k<`BcfifDK+KS{3)SpIw`#<|4Q5z=+S}yzQ?qu6FR+7< zn2@=Sev;pL3J7jWAI}Tn?946jd&mmGXJ7Wzx(zYv_*ci?lZ4Se>D) zj#>71M;a+txe~ir2leYKZl}d8U1<`&ZRG0z4_FIm5BZb$14}f1s?M2XDy{LD|3X8j zz5HHQ!9R?a5^>j}$UOU2#`Lg+hVMNg9ER!c0he-Cr$GaIoJ+vVn;1~}d>PM!cxSp= zP#<3OR7fELLAS2vKm1g*swR&LP9zXJFP_6SN5jHnOfem|40(hGi_$ZLXTJxU&E*pN zDx}@(vU}MQ8)@d{wtvjM@2X}8+N)pVQlsVddM(y1P~s$<)PKfDm9#_IDxyDg!{qpA zzuzNwM0410?PJtHb2M*%9|q<(g)ly+ei8R7OsbK_r|n#`IQdq7<@>c9`}9()4nSt8 zC^_8Xa8KDu+p^`W*<7fB6nbpsZdoeh!kirQMDI!$Qn0dAv{PtrJ2Jw}GNEVk&a4WlO~IWPB#K*D&w zO7qQuaBn>=x*qSmy{jC;twkoy(DaM=9@!%IQG4ke)afbPs}|nll3?SD<0lL`T%yVl zBTNRpyLE%9n6)@kg*-^a?a7xZZ!Le%DlHPcID$6=taY29)noQB~Q(vZ&yn~W?m>1kge zWlgC-5JxE$`=YbhmFCh6%+gy(7I7WRZ+(rGW2*2iOk02s7xr1 zimtAVnZy#tAlo!rGd3f`p{^*qcy_*`uue2(Aq(h7&dV3iCBACuyO6Kb)6=WuN9W`T z3Xt&+LD`o?p-Zsusi){3+8-350^bqIOC`H3I(o4OE`6MZ8)~or5QMjyT*pbHVV(3{UQy)sbZmeOYC%*78}V6Mdxade$B=drCUsE68i2E$RkW-O zh#ZlTX27{fi~pjPlDoQvKc&fY-o8r~k!)}*ECIDli5Xax4e@5&a-HU0!~Pp>J%vtJ zAyId>d8SFI+(i%$zB@O0K`pwMPpw3ds~{=)+Tn9^{C`E;oI{dV8Ajy7D-FB6x~f0P zZC!XTdpmTGhG}9~K}T0>6p%0yfW>tVVlWEExIPDL4+H~Acv_wj!g5d(nZP9a7rCU;}vZeA3QMd^|0#$%-c zin$Iv;n#mB=vb@J_F(nokJD#*A#j}d+ET#qi|TZbsgtFX9G{K$%GQT})6;GeYByyU zEHA;rAlLi(lxx_Mn(0rO)PQ$FAg)oGftKPjXX1wTT4E|s5jD7AVkPx+t27*^tOnC2 znY~Kc(U%K%FGNucR8jya2K6Nk`f=%Xt`ecvsC34-eDLO{f?a>Cn|3p6fW9WX#qg4q z57+>-P?~@682UmYl$MqW?e^TW=OK;Y@9yIdgNKLn|j$rmgE}s(tX@a7a%s8>MvBIBd{kblG&eTT~4!Dk@_HqFckV_Eh|`6W}xc z@6@tYNcKhJD6l<&(v$ScfMudV1!(+u6&&Rk?z9YMY5cLi&uPoR#Pz=2C*!LM70Ciu z0R<&kIbZ~F!qh-Tl+{aI2Tz+)Zy~x<)hSgsCnXV~l~M%QdNM^9w0mDxF4w1cejW=B z7)Z^glbM{;Op}uO+)=`Y^v*=${v_&p8CpIu;<2(Gfz5s5;3jYc{Q+Q3r03-1P#uVr zeaEk}=1Ra@hm_#CE~%J#3$LLneg|0e`E>zZw#bTbr2Gp?5?0{IG?UC;51W?FK9b3& z0u)IWz=ew1bOSrsx{_tP$A|uq4KfLP?QSYKo@GIA%SV62@?eyBie@(;I{E;=Cq)3v zE@d3ZOeAc-cU5EzR_SYUzsP#fhW>mPBK|gJQ)7|uKcLa9FPs04Mp048|5@1DEvO+; za-Cv69UsYi37)^Fpp&TyIX^WJ!c70Xm4o*orz)KM{9IRvgt1{0iy|jmoFS+`CwtE2 zPiTca8}rgE00mDKb;j+u_o>52alSy_HzOpxKVRY%18Vn4BK7F5l0TmJxypVEn1+$7 zB>CXm_uQ`5d#!RR8LzdBwXq6FaeoC9Fbb5E;ONzbQE{8w?LR8iiHO>r0w)kaU?dbV zRUz`tjy*rfqTFj@E54W>kP`eSMk$Yn&~Fu#&uH#%7QQi9;`0`g?3}bUN z8_gJl41H*_PQUTk(=p((Oyid@=>3e|81KB+TR>w)^<5FSbm%WZW-xgR7rR+wnVT!O z!J@--UFEsN`mSwz4rNw>Gj}PCtE5O#$onnWY!|YL5CloNsEi9 zZu{}`v46@~->+x4rE@{!bWVR0`zG{?MGGy|8UILg;q!m4Q7udsL!TQ9!cONx6CMOsjkuANgIpU3soeM@) z27k1L%zt5w#d)uO7B1FH$IQaq~Dq~j5T4NoT0`Z z>k61N>@BB*>X{B?dS;wGoJxGiRA`J$6;QGhmm|R&!|{MFyH8J89NlfYGI){U?`yq1 zo|L>aI$XtX_HI?D()q?1E~Yj4o5e(wk=5y#>y*`=L6dC zZf|r=BT^o0%2yuk>63X+Mws|2PaHlM*MZfGrj;8L_L^w_`)ZKYtK#^eRo9<-Ca zqvvZ%#(~!;=?7_C(kFISuV7x<~wBNSCpl_ zpY9!FRlL}?k7YTUtxO(9<{SHmTAixJgd(GzF=7{`Yp2Q1VR@e{KFc2!sBuXjNC*|X zsl~sd#O>eDM$@tm?#h2)H?JcAvz*OW2x~MQUBhl0kp881)5O33OcQ?Lufe_>xyNcM z?RmzlhwCNsVm+JPAZTT_D_=(f?3$&^uF^`hNeO+`PEc&LPPj~Ax z#hS9di^| zN9@U-Y~%g>{3NLwgZv)RZ~s{<>D$cA`DW;PWgafpPjG0c0}X3`J(&9JASJu2W-~~g ztDVnsYV|R8R_M`n8UTSsMJwGDO(7q(w;f9j-?rEK>id8dfXOk029SZCV^By08DqWc z+|wJhtG^-0LEh4*WJe?o1@t&F096bg^VMg9>+hHy5C&4~N9NrVj z(BV1a0ocC^gF6i)&G_^Y=Tkjj;DPwdB=cIZC4^M?YYEg-C|*10k#Xgvz_7&B zUxT8fq$3a)qG^6B`G-jIpQ8hWs%!t3)U53gq5Kqz1@gMJh(UX&W=9|zIsY4}KaKxF zerEm!(Yt$+@TBVdvRv5AxdA_QO@YAL+Apc*S>OH7`}GLwot?AMn0ED%u8pPP0bt(u z)8&fnYLEf*=ZLI=d%^1rO<*8_w&0!ivVnuMZ;U$Qv>}~qM#ts}DWpE~lQw6uqdGjB zP=}vE_hOeEqy~3-{1t@xZ0v_uSRTvjx89SmYFG8Q@i+$6RK*4n!xceRV*uNg$k@{v z`hL{nUOls=w?3C1weIydu8O4<$GiOQD{Y9Yjpt&#B6`zmH_gIVK=)Nx*ScZCMP{k5 zXcu0JT^15;eU)zg;nu}ic6l(rAw*;Nq)>nHngT(C$vNY@G^EV@n~oN4cCWpOn1qJ! zWuR6%awwzbb%mDnCULU@;0=wUc{d zf=KfqMW5v^DL+R8ZP=~$6@ARdmgBTcN*Vbu_qk0~K(-!}9R}}|Kbz8*Z;CBfzx~Cj z+IXZ>j}t^|#xZYFUm$tDEnR!FDgtYkRxDs@`67@V05)ep(C2&bNm6!0GfVl|5#&h_T}4;boX$;XSPnsHSYa#;O7zTr70v&zCLEWtW%UJ*{e`cS%nb= zQ?Fa5 zkG6MpAVBOwqp$J@U)G#=7hg{|`Du82Jk0iJB+BuB zDQLW(&y8`G0*B47?&4tLL=*1ZUk%=5$3oyHBmah2DPSnj2UK5n-R$#t9Ly7S8GgRX zt92p0UqTNS)tgB(T^X~j%e($ikEJN36<*wCV-XeY2iXm6Ve@R%yYMr&?mC}O#EkX` zNQ5EyOY?)z`~pnM3B!Tz=>E`SnbMKFuh`G|=w7YWs<{BF-Z|VKo%jY?bo{U&(p_bj zp1S`q5I$&9)$wt%5nM7vQe7`~F90F*FD6rJxLYN@rdq2IV%+G5#lWI2m-^fsbvvAB zd~7(^(A&ofsDT4&p2_?k2Rrv}33B0fq#mi7GbcSqvBZw5N~VJeY*u}Dj*cy7n76Q1 zb2Wy)%;qjG*Zkq`BF61Hh@Q^xLT7nFPKVXS&lpDt0pq_B{Q%+r68$h~Cx0r_)bm}} zo2ME113W*3BQ}T_xR2XHD`6R&Ebw_G>^}o$<8Bvj44m z$gdg#GL_KH_nur;xL7&7$Y-9(@k*q*1*R6Nv1v+bI)5*gGO@+MwEI;WZLTR>HCXh@ zPg#P(5i9Cj(^{E6kL1NS8feIRNzd4qx@xi1hwT`!C?-b_8~oaUYcLOL%?ls&jI5mE z%=D#3OK3vN+^!+)R3_Dwq=wmYzz+6T6)GG&VQU61bKJxf!_H+&xS#{yV7?uoMk0k) z4|NDHtG>b(*mIDx;%4?o3~1*S)Ol=|-dl0;qy6X>6j@U!N zwl8O+EasMR3`qw(J>tm_(x@5w@=145t(cgb;lSWA+%|3WBlBIaNG2PUy?Ld3IE{yIj)zFtbJz;79 z&3DH;Vb^722d$R4cG0Im4bMIn3mHSlVDcUs1KLubheCN|4A0`j?G7hBL(CQM8|*69 z4&q^lj?91^lxvGRI8ORBbuCg5vmk$Q7id4HfYGx#|40~5!>)XPLc83uwwN$^~To?C#l&JqisDNIgkkqk<=a?5W9HL>u>i8n}hpf z*=+nrVt~+e7?dOM{8e%R)h{`T#L;{yH%zWbvM7nYH0s|p&^nBP2C1qkdqA>e)PJZ; z=+2kI<%lip-If7jy-R8p2SEv>2c)#H?M5A?_MrIap~m0S?`j~s2$2)L%6_KFUN~1U zT*>^h<#iOsjr|2(qa_gLw)Wy_Y0^0qb2-s(1^ijv0H zAe4@pI!N%naI9|k5W*?5V|Qvfs!;{`?H8ok`R|e6GorJl@~cL2lm?nElP|*sv$;7c zSV7Qm{t1r*m!Z>Sd#f#{Vf$1e>QK#-77|01?t46S*)5VjwI4ytOKsTvQ2B8ysQDSy z-ZeaGA!EvYu#*u4b1{eWt_5F?pOQa6p(@demWhG`ke%h_6qH2A`C!lnCQev?KOXYn ztV-MBe&^M(sjdA8E?jATEVe=ES3c}TySJPb8{Lw|@F)f4(y_Nvnwm{J?xQ%bcPxMM z*+FD{(RiRf$NLSI<#p8MG2a$gR;shX9388P%p}MsV?*jA=7ALjtF@b(OD{4;6Y$P` zcuY7kN%O7p&HS)LozvQ2m&Bv9XfsvmT8beTbvX)MeD2zZq9|v%k=fR}hR2`wILm^4 zK((^1!)lL&R(ktfm+VPfijUMYoT_%RI+pl4gwcuIOzdT?Hqb0w z)VL(X#KgV_#iw8vJHb|S#2&erLRMAL>Hyu!0D8_9Q47cEAzz2+Uh?93a@DT&oG(Lz z1ASwiDUM9xjv4L9x9{=0-jMjgnJc>PJi9o3;MrVYxo^ZJF?*T6#2)w1H88?k3|GmN zNEgmf*xJN4=xDopA#-LzOKY!nr646UVS!NT-s7#mHh}X|Y$r8J1udrO@v@$B%uF4& z^`r*93P(?EtWYnEy=K&j6Su>5b|V@z0HE+)Mx)y~4pZNH4iypAx(;P0wdj;It9YEO zJSqj=ab1f+qN8K8W=<+9Ub5_BqT$9ZJ5}aXl2Z>uJzukTd3E53TB*9voGdT`=8lAF zt+JI=D^(b8&U?y-33G|!f$^<)kOZ!r+Gzqh3` ztTLVqhcD6x)cSeQP$25t5_~#LnL6pR$2!?QQQp${?&9jYle;;Qv87zRvZH_-cgUcr z-(W{M(QK7$b6*XiI6u8zAC6IH6RD;5bu&7}-p{~2S}A|2GLD&3m74QbhE-ny+yhoQ zs{%Bo+ebQ$N4}4R+?I~~yo!7qvC{=wqkY%U5aISQDmOXJ*h_|T4tEpbQQ?P-rXEXj z+N))PfR!~9Yhu+pHoT4kp&Z=ACkY^HiRrXqGh3{qt0Sam{E*AfM|Ue1S~t6=45Cf^ zTMs@RX@+WoCO3N^=in=@YtuA4a=0$K#R6gE#P6=-NJ*G(m*Oc-GPcB=q!(EsqaP%m zGb#55T-rD=pD)-JZjWa$^k_qvUy)>`^1D_QeWQa!8Or$7!w`b(6;@LLk>MlI(Jy(8QrI zjBvt4_mh0VSMB}o00fsuIp4f zhN{=s;n%jdazyKDTV6t+0fgl1COHU%T}p72B_5HXJYZePc!z3C<+;|KOBC;`Ep|&T zY{Ik-gkUbD2{n59p-k#_1oOrlYJX2L5R-&ye!&2`{K!Y9gK&W%2&7un79PBioRJk^fz|wt*_GSeh!W@?*ZQv>DCub8DO6Sfom6L z5l0TM=1+X6`^2R9f8fEKe-H2R2zx!d@k*ahC7I_`GL4u2)@9*9glm*9A+tiKr*j87;4!P|aU1AdeV7962l?Ek1!KSa*zu&kJ0n#q~e zH!GK{WV1FyIeXV>)6)6{dif|Qs1se0MRxo^|JWPCeDKT%U0tN1`?}KMcC&%nIo1j94G z4(%<5tGwjA?PK@K?r~2}$uZioW^F5F?RjquSY(1u$5SP^Sta;$W7N(^rAU0D(e+^o z7*hd*wTD*PLO}N8r_m=-z6bC;FS-m^DlECHrEctZPh^|(;K*+F&$w8)f7nlBEKKDE*O%{!nw^=x7Dz>y}U8J;4fZNbJX%LAGTXeZ5;Se%=HT+}#?7)~xO72r% z`-1GMrcv?EPqI)8Q8NX`;VWpt)+&t5p8Nrtf{=J>ZTs zkwidpXlBey>PGSp$=sE5jRSO#`H$34r*QG~NjC@ObYES$W8!0okyvYL3xj$Crv<0u zBI&lSDQz$b#lEktr`7rE{n=`%iWftmyv}m^Ppt;pTsB_{W>=*fzHwf@*Ck%cYt!;Q zaxqyBR$HXQ)t*}fu!?F{3hnu%R4V%;em1@81{%|ArfBlYpdlhiEEissv+hk*9Qh5z zX2#f?G0hU~Y2MT>9*tKmjyf{6>Du;{(smlCo9q_!9NZXA0{Ez#-P$iFZTyJ=ysX1; zJ-IEqora2#T~~aYroDH}y1SN-#+9KETo*7NT+4d(L0(ju{*AaC>f52PRSODZ(ZC9N zPRID18A^igy{d%);HNh4k-9h+_v6@NZuNL4%l8pL-2}If)$dbIPtygkYo$}d%F+N1 zi{<9`)=L9)af)W<`N9$ExhsF>jn|)fV@^Th;{ohoG|3M<56=XrENZy5!%Hu~qpHXR zRi`wWdR2d#*zLMKj71l;8vneIemT%Qt^(eFaZB z_nN}dd+xi+fePs^m+msvM=>WDfKn>7`W~2L0IE>sZ$?CNye+BMK2Z9_*Ell{~@j?v9fvMf=H^W2L{Vh|3aSZG6;^K|NS zH2h=8aW11*Ch^kL_;L-pl<=Sz=E~{RCBkXlQC*n52}Z#(|5DW#`vEBB{fE|OOpW;0 zZv0u%q5)sg*(ps1mIIFmHpB3^Onj(I$u51HLqKlDM~Tx|Jp}ZC;;ob%cmYv#LarWDEPc)XR8hkeca;6*&=pq6mRr zx3Gzu8*wMhNRbQYm#=UL^Vx9n1Z5_WI$#-NC-V&E9!6;*9qOPkv$9p(q_-5%l{PLL z{?rO@K_vuW#VT3WuHLyX%VOB~nwstS`AQ2Fi=0P%8GvFn_6MAVB6w=+PjB2Mug@)H z!FCuQ*bZX}n<%K$(4p?2(pZiJmXvr_#BBuzOoLw00j8AVCZI!ru zAt-kqJ;fwRFH7#L)1Zg7(52d6v!zZY_|uegw<}Nfx8+6nv{h6}*s=d@Y-&omA7kI> z$K$iq1MA#jiw|{N`Ii}$X@|#NV>xam;0Hxe|J3F%4-mxEtM;TBrpB8Mt6L%4eAR)b z;k`$Edv$-q3_s+w%ENV+l$Q{_`W3L{bXOEvWjqyP=)`A6n)3J}wIL>{C$^lPhz@VR z@sR7~?$amk*pQQ;@mlGUw0#?F_MMT*BUfo$PUO}&k|o3SM3RE8kjRMhGF|S3gCTe; z61FzusgV`NrHtyFZw4Nj&&?F~;d zj)35R+3nLfTYN@rJ% zImQ-LehkNqKC92>><08kjEO}lK-cTW*=C?rBaGUv(|gGds};ShA>3D8%{r-4WF5qz z9FOC|a_0uHj~!z_AaQr*xCaNr_#5JFBaKoby=&hN9p;}uai>N9D_q0L+OzeSbb`Aa z!e1&CZ~yu3yT9JE`Dg_;9pSw{>&59|I*Q^^$p)Y zxB#60r#k&#?I`#0rTEmynC_CK`SYb|?caC(_3_6c3#XWqmU}xt%h}b-ah!>1?YJC) zT07M`yKzb6rroxkmTAdfzw2x18UeC2{ZFS23ZH99+1sMMuJMB{lcFiX`pV4g)S0cK z?Y$f6#NVTGbnOvGIni#+H!tIuGRd&lnUH%|+QghT>@@bLui-=RE9p=1n;Xo-d*-EG z#+NCqzwc+c(j3$lsC;lxW>FH=R9+IKDz>}ElZ#qc|1vv9nRcXN04+GBC*)^wDf#eP zT%)uE2nP>z9B%o5DA>*tk7uXrSX-csoOX~fVy%+=<7SmwcmVG-h5i*!wPp6Gyhw=7 z73o3q^a?=3BMLg9iKd;TYjqpS#kN(Y)p^`} zs?!^aJ}@$@?htHTUNYHoR7NW9wXIP~5*v+4=qRWqM&oQ|1HiXiC!s|7A$i5Wvz4wG zSSw+XLRALvE_XxIJMyEOE+3?rW^W4>aKZ(Yb9~2HkBh`dmL7tmy~wfj-N5IC=Ecy8 zM1ECe6|?PFAE2p&U*L0mk?gdkVFByPjw(ITe0>X(FGDOuJJgmY3PCsnsy$*55|GEiQs z``tcI)GDG)UeiUWn9N&VZDt?&ZNS!v7qv(`ndhNGYW?a>PEF?KqhU_%pkCj($}19| zsT!!WM{tZt-|1fSmV#;ML6g)?-bhwi0qTL#Yr(>JOTNag`b-D0o2dCVGzGhXu63m| z;FWOwXQ|&SshYKPnQYu?a!zia_Mr3)|1eu~GP+=)`oZ}EpY3R5-_y#)F+9>q{p%ZB zKZ~;)VqR6z(eD#L&<}>GvmuNg1ykHHGyF+BaXgyuIJc*ONmV(6Y4NpV=fL zB`S5X@9BM5%m!%3ekP!Ya?Wl`E&sF~kZE4V6zok^cir#|G`mcJ;SuMnLnIyy{Bous(kWa-CWJE;#NXI<(d-lHj3>aG- z$5gRSRKqUCzWeVzhE*l`!M|AS+Rpnd{5mST33pqSUEcW2-B z|9U>jiR0Lm>QX8iUN}CTWXb~wl13KpIQm(?pdaRmvw51)Z#<*N*1J05ndNX?*RQhQ zzo(V{43Uud1^h^<%3-TF6-y&0<}zD)4pyl%A}T3jnMM}p6qCy!6Ls@jpT(5aI&-`3 zch0o;-lFllV*DN;Xv8K~@~+(eYzZ%s6aofWxH8@diy6(q)sS85`?=%fL>HLh#> zk?N&b86PjCQfT|uy92Msf_9Gm3E|MF5MQ`CoWC@CFB)%bre~>HKqO!4dBlo zBFOI}<>7q#h6ZW$!F#pi7?dt3I^w!;&-f%dySn%deY2v04p}F!$AkGC%QS>rFLu1w zPu5=eG!n!28USSaj6+znkiDOqQ|5{@rsd)=FLDF-sMh41yqtE;b3U+{+6xlV|TDiAqX4;z-mokElG%AajfXwqCqU^+dOM$jaR8xgb5|zP7zut7=cg1@#}? zI%i{|++H(0pWJ)pn0?vU#2nC&ayqtzgi;FffEZ}QCD$o^-V0x>AE{EZM;iV;#5!HI z&SR3bJNy?M^{cz48N3fS&8@iYV@IKTL+W+h_0Fk8uhC;$Rrd8wr-}_%P~zxC$MFOa zlI(#UeDJ5jvEU}@5QGr%_u_EuB>ugB;mjD9}EER7RBH+Za5AH4aN zpzKVYi6o14!LT~_I@Pv?@U#M{nJ`wHCg+F#k{>Ct=5;}Bf@Dn(cie*|#~rJsQ$chB?7lyFWnlum9p@{gCu(p=06k#m2>u>`ui?k^+O{_@ z6p_IjNg(A=l`*F_{KcxIr{bcD*2X zNsuAs-6Z6-yVKo|fU#tLHPYKsG+0foU+u~OV#aOv`{mct|ITE}wSG!&ZnE>iI;Z;S zp?Rs8y?-iB z4{cX-Q@Nd5LXna#YDO`#GLUJ8ORq zdPN_A2zhnx;jH_3k&a(Q1?Q}#RkAe9&%f`T57+s!=$O{M(LC9GBfQG)Qf__$u=-x` zG~+o@>Ref8MYY5EDlf2dRDr`9in(sjMM6i$cmdKrgBbG_5=Q6Ml9M^m8NWSlyd&kN zV;nm?@S0Wb$GUz}3Munm5=f|p73O=d(=&kb1B)JHTkkwY%l^|*`{(@vJm@m4=tjp= zst@1tCd?I9Q4wb0j=OuSB%7_q#UUeNtTk!L)inMDss{`&;<{vik{+0tavbY#5;;+L zc@UNl&E6T@yzvWAoMi9O5}2h!b8zSUbRqO-FhZGlZPrGipakE zd=3XkmBO`jG^pF#vWTYz_57mwyAnmt!cf2Kdbc-DEP+uNAVKkX@%;CkYNfoH@{Uq0 z8NL(@InS~MN-*dBG^gm_F(jox`}ka6V?E0#QP966u}JpLKBN&48a$px1h&03s_A5vq?CoomuF8WVXV$rIK~0iKyR` zHEo;VZGos*VYO*yY2keJ)>mo?C&JW`L}E`z&!Z&uY-jnCexyhTZD-k{uga4XuS@UP z_}SPbsEj_?re-GiebSP!uKW6doIDCcVNyOP(0OYV6CSOWm`yW|qDtKy*l^Yr>_8H+ zYpGu<#$5W=A-uGKs{LPW6}bk5hPaqeX0aB#v$XYEC(B>9#2(c(gQF>r<%NF}K@LUn zUY$u#%Dj`dD15FT6ymmB-KLsM%G*#t^6dy9f$L(t!(DWS)_~(;0YT~^vNT(m9k+R^ zD=yBRHZ@@>9PEV0sTie0GeK;Y-xW1Bp+wFoKSqO4oKsl*5qVYbbzw>xOG5cEj07$t zqv3<>T$NZ8%S#^+?#a+EoK=w=J#$9tg+N~aAwOKN!go^nglA9e*LZ)GIYN0!*%s9l zj4Kmg`DJ3g&ttF{EM`U1ZB!6%(WN#&Y@ZL}6vE1rNO_uOAuI?5oI<`*c$W82)4qg3g zm}9#rA3_ttzvk?SG-n2uy%Iv`_~7${^7o#Gzd`Uyy8Y+vbcs$K{<;&-uBo!=xxLFj zka_p^B1_Md;}&Q7<&bILy?kQ6w<_@j1Xb31NCf6dOQ!(+7`n%+`B_Q9tY_cWjmxol zQ!a#hW~uyj8l2b1Ak$jKq6s^D-zRzyvwc4Njts=ZA_J2p%_GI!jKGjZpc3^dDY=(1 z^q>o>7!sdo-|N)jcZrVU#(0V;N2e2XD$)lG+W0#=lw&EM|C14)?z^e#0?z$vOYCdd=;$E`JOK36+8qxo+k&p9RY=h@43i*6e8 zGhe|ntIWv#UF*P5IzsU2iI9~aRyip)It9P8I_b_x#o*Rzmqlz@1SMmxR8ltWE4SBL zE|gOL4vXE%fGo@6A5_eZyARhv!(7zhpr{gz*a{;|)*-Do?{~nc#gr?F`zSKdA z+#Bzi>XX*~rif*n%@1}R@wf%0VTp7;yW18;{DzT8lxx*&gh=wOmqlAQ3fF`ec6Ul& zA&7I#&U$wh_4*>H_`3bHVlJz-p!y{9FNwVhSYih2#l0xefb2FwZh3YoXg;h)?s&f5J3xex(q>TI*Al zf51Wie_=C!iyZy0f;|5N9R;veIOmRnb1uH8(|Eq7(0(vikY(_GM)mct3y2Nd2p@w) zUQ(utT*|%otIoSYCP4@XRB=(^!pT1Q>)NG*jr=2abWKf-d|2nS_Fqz_*0=|@|65So z|AhngKQpQFrN^{z(~gE;0h-&Y;3nM*uN+6z*Bq0F1L~X?%GqGX^)F?`Cm+`)5u~fc z!$&=dII%H_5{WSrG3@w8Jod#2w03rdo#zy^nqHSM5>q|QD(@gGwlyK$zYU#Kr*d+v zn!voB5oTQoqR7j@i#TAnD+~MPp0py=Fu-=*-r_|F3$wvAxAqEBDhDnSx9kn%DcRSi zs_nJ$HssB2Jfw;V!O63`I`=3Q#pgg)15*Ai;YdbVIQSKow0%nOkXamXbx`3!l)*a_ zTS`v&^mudVU~w7?e#A@E8khZktmOgqw@dK|Jp6`9&hH+iKzZDmvIf#VFRR*(<5hDB zN@dth7&XAGCnZ-f6DNo8GD?&cFKa9wk_5um-qP8M#G7eRN|`U zgUsTf?iCtEH$_TSwW2yr?RQdaau?I5!IV~{(7Mx@q z?W7{!J9Z(OIVFay9GTL3Rxt1XNT(BC!fFJaGjBA^&yhDX;$d(Hfsw>V?YiBKkvpU< zHB76bG1hRK1Hgws=V4{&I>#aMC_VVDY{q4o zrxNGh$kOCTar%^CBz>O?j>qjpy7#RR^8hr))L9=EcP?I7)ScC&bkoq*F1_Tckv+VJ1;1t|1G^;{6$7fu3qDs9@q*gVbSaw7*kZE9Om(&AD#4x% z(CvtR*2zDQvUOt-n^N~8>dL)FBaM2E=ZZLt@wzPQ!|~Zr%4p=ScWy{+w2Qlebt{V> zjJ+8}d=Z&X(-9ljB#nGre@j{#-D{dKHz%!LKm8fh-@3@8l-vKeo`k=Sb#wB&l`TKd-o(Vhjm8y34*h1nNXwr)l=iPJp{we^xs#PPLfpOwmv!rT^ ziBuhqB}SNnmRfqre7~Y;`*^uJZ;ic{(g?oeo_h^iq%`XJ%`{_ne1x*>q-CxQa?qR6 zU(ZCnJQs4blA_~(tJ4yzG}vo?S&Ls~qJrkJbS0)z0YgmE)f4F(8>|~i`VbK7ex`K9 z$(tIR8m?wVxw-nAz;JL@A`AV+YhYgOrEd{4(}tt+)O!x1sk0abLj`II7bS14lXo0=%V|8y8Sl~VV&*HDXQ(dHKA7f-zh}oG@lj@) zcXtl97u|_GqpbBN&RLHQ?kn8hI|{bLlWX|BR(=FFw)Et)E|-S-hq6m+IMOYgj4gE# zQCb0D0`o`=lBfI+;rzq0ZMw;DVw|4qSD|P>EW+fLz zDT2Dt(&>YHJYD1=L(8~XR+=e87)Igq`OJKuH)m*>>|Y!*V3ijbn^X}-hWLcul=8nCc_-%pq`f~kYg;S7&&%%WF zz_Y3Ogla~Z8uOo-|1Q$3a+gU>;E@2ZWSXRtSaQGl+<2`Ny#Hoe={j?hc1x^}miF_Q z%ZfnxGj%0}Jqal%ip6PABdS=P`zDT#n1qnluPbH&%|%mWFA={`kcXK{^^SCFiq9OP|a%=)P^=u^flUz0GfACUPlq$^^8(AN9Rc_FQ`_{{h(GB zA3PmLu9=QW{JqCEC#$pQ#^u~Jl%4__3&&d{S|CZ>`c1d3VaUbPi$jLO8i`dUYsose zT=5QaF`F35vdU+EIJpSn4}vnm8I$w7RX<#4#xHs#3(q5Eg@q$1V%Ay^G~U+h9_tR+ zx15=Dpe;6R*obFZ`C<4Rsx^GJj|%P(_q=sMytGQLcitgB?8V(!IJ|SV5Rm2*+Ue~L z!ju;%+^JQ{fOE=NgW9wxI7seh##`v(0sxjwk;-jy@yg?q%0J*pm;xu~AO_vt#!Mol z3|_E@_fOopJ{IoRPdiGOyhb3=Z5!X~$$_HE@By7?eaN|TsrU4e*pBR-u85d5#PQD`3{?qE*9tA^VJ7qdO?xngJ@#*I9%B_ z*sWhvjtCh2jxPAe6CAEj2*+bG$l6~vOxpKMBB;9XEWG5UvFen^_cw%zI)<_L7AZ)-Zu?!q%hV=yd?%(4KwFqXN43kk zhs_@@+QZ5lwtsknzd2el&kOTnnT0$}-E9hLVT*j~G}^uUvrxka&a#U>=W|$9s>Yv3 zgQ#3_%7e~dob2|UYoYJy;^2%XdHIe1;NyD)hE#*0D08?l9}-;TwZ9N%LP0|=($J`qhuVrXWtpmaCn?bj_2I{RxqWn6l1Z^!Nyj7^rl2{28( zu;|jaXRavJ`u63Y#I60_uHP&spJ>)__sE;VWkpA54{eIc%&-$)p0>_gjB&?>7TY@4 zyYhVVJ0ad_`lCKefZaw3#%{GACi6czPZvs9;v(t36SsEcwjfHG9%N@Tb?!;9jF0k! z4xB&7rH~c20{43me&%^isi|0gcwIzDWNci1L6ZE>N*j3@M1f={*+eRpivD)@VPkYD z@J{6`GFX5|p;D8p9_(xib7%diaEm!Pa87BKJBtO?J%0}Q<`m=4;PUDE|90xpAz%fm zzSI`CpLi-5*yuP((HbHKir_@ls)Kha9&4S)b!L=fe@}J#8^X>U+k<9}7Y%0&pN$%5 zu+#D+Mz!nl1DM?Bd-5rR#=fgH zP`ze`+97bO@RIVbePaG$*oYvB@x+k@3Djr4C`YN=a~6~CE=bL3b-6Uf&c1vQRX6y} zj>$#qy+qGJy%=!sVao$%O z*aJa49z!9hZpo@-(~Ip3sxgn-t!cMuf$WN?Zn;CHs-= zFl{Y*xB4>v=XcP3kqD|K_4^^lA?Jtn&Kl2JLbQA?;Ik-KSBOt6vIR=CW{Z*^ z1&t;hmg@w$)MnEkJl(PP!wXL~DIpUQ4@Nq*OM59SOeT5q38p*wM;Cy@O1ug-6T3H| zxAWa3b1r^SLM^H9!F>`)K|0ywzM@#4<+I|mfufAsOTi1XjUXq@Nj0`4f~(sw4Iy?E z&0BN+7N|9DV=z(sRm!7AW|dJ+RN$hbd^A1*=yac(?C*T{XnYre-}5ytNEF_)x-X^4 zD5&~6KrV8l-d0Wy4SUcPNn8RSJH@Au;}E-st(+|ibCY7x$$qhR^whRI&)UfTTg|J~ zH!T(i@e$r4@h9T)saM512b=h+!&T^5;i3wkRPVcs{5W8?1_Dbd4-dulJ+JM__oZ%S z$0>P57hP$2$xk12lD|9EZ!0*y`L#_wk(2%H!`Ja-C1g(S%iI>#IB$;`-dw9>7*PHv z_KXyJ_BDJbIT;-G1`MT_4H62|S~N&=>m0LkGEf*c`@KYt5>`sSZw8p@*1C_&h~rVK z`C7lIDl(e~;pB)!_JJ2mjXZ=DMvfcq>;{L+N$F^)i&f`Z2iqmf=_Vkz81lcF2(0`F z(hv-CN@=FVMOXAd{DHEQ;AMjDt-AUkLupkz5Pq-X6 z?BMKo@*lcR7FES`w8tbFsc*9>*<@h5&dkhSjw@IlBptdPDLMYqt9@dk2e}&r3wzF| zix0j}D`b+ob$FM0p{P>ovo`?0YJl7P^f%YzQ|!bI?p}TSS5btO9U0`nK)S|itN3T< z2lSCb>`g&vTn6Lw zOEofYfR-VhwmzaRALhhvVd;v|FK6Ff3F3N%p8e%i=rOiE*Yk#g<6J?>P-Ab;r1z8j z0{PSCSGr^8`aMKAEuMScJAVs^uc zW4C8&D>(m;oBL{cGp8T8x3cMHc?D98|w&1y1i#@z!)a8G9eUCy*YG+h1}x^d6yc5$GW^l8B_wA z4I&DDjsKNv;;}419AdWpaW+Wy@N2X>rJ8&(yo}ne%ci^DClipQ$tED}D5|jARK>hN z^)j21flS0_lOHh*TsGb%EpxFb@fydU^u4&A487%Wrjn=@=*FsXWOgz|n3$0)U7u?$ zU~2<+RM#Z}g!c4+NTAc$41DPj8_1je4k&E;NZY#GVu z^_+S$&{QaBMWsGXj~?x{)(5Gm1lwH%6hBbo@22Q?~eKBw@V~iLTx3CU>!|{ z)bk(|a0;#)|D_kS>3!kDv`*z_$Qw<7Sl^pD2+xWO2{m)oI|^2oiOUt=`+0ve#Y54s zuvIcaY?OUFDWNx>D`zM<)2l9I1t4GXk4ë@AzO$34Cuvmwn@fz(D5> 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 Kk}H#W>-%3a3m?@0 diff --git a/content/en/apps/guides/hosting/4.x/logs.md b/content/en/apps/guides/hosting/4.x/logs.md index b40728fcf..99935c79c 100644 --- a/content/en/apps/guides/hosting/4.x/logs.md +++ b/content/en/apps/guides/hosting/4.x/logs.md @@ -40,11 +40,11 @@ upgrade-service-cht-upgrade-service-1 You can then use the `docker logs` command to view the logs of any given container. For example, if we call `docker logs cht_nginx_1` it will show ALL the logs from that container. To show only the last 5 lines, you can use the `--tail` flag to specify the number of lines like this `docker logs cht_nginx_1 --tail 5`. The result will look like this: ``` -10.131.161.1 - - [15/Feb/2023:21:08:35 +0000] "GET /medic/_changes?feed=longpoll&heartbeat=10000&since=115-g1AAAAH5eJyF0LENwjAQBVCLRIAEFBTMgESBCA0lrACJBzgnRXSKoKJmClaAxEswRZbIDCTHZ4GzXPzCT-d_rowx8zIqzDK_3fOycKdkf9jucJIKVyMybmVtxhQp6E-s23jfME00B-LdUWQIOBBxmJkG3gXJHHtfM8WaA2ncQ6RnGmsOZLjG5mLtk2mmSKAUCPHGSkxT3dZAiK_IR28A1AMhzta2wbko2iJe3ndMC92iaIfAzwrTmn8as5aY&limit=25 HTTP/1.1" 499 0 "https://10-131-161-159.my.local-ip.co/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0" -10.131.161.1 - - [15/Feb/2023:21:08:35 +0000] "GET /medic-user-medic-meta/_changes?include_docs=true&feed=longpoll&heartbeat=10000&since=13-g1AAAAH5eJyF0LENwkAMhWETKGkoWIICERpKWAESD3BOiugUQUXNFKwAiZdgiiyRGUjMY4FYV_zFfbJ8VxPRspqXtCpu96Iq5ZTuD9sdTlrjKgkka-Y8htkE-hOWjWrrOBCVo9noOBATzMwcB5JLVG0cB9LKw2xwHMh4XdCF-TktgTIg5I0nubYBQr5mnxiSaTsAIWfmzp2LRTvkpdq7Fov2CH7WYOMP5CCWMg&limit=25 HTTP/1.1" 499 0 "https://10-131-161-159.my.local-ip.co/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0" -10.131.161.1 - - [15/Feb/2023:21:08:35 +0000] "GET /fontawesome-webfont.woff2 HTTP/1.1" 304 0 "https://10-131-161-159.my.local-ip.co/styles.css" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0" -10.131.161.1 - - [15/Feb/2023:21:08:35 +0000] "GET /fonts/NotoSans-Bold.ttf HTTP/1.1" 304 0 "https://10-131-161-159.my.local-ip.co/styles.css" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0" -10.131.161.1 - - [15/Feb/2023:21:08:35 +0000] "GET /fonts/NotoSans-Regular.ttf HTTP/1.1" 200 221787 "https://10-131-161-159.my.local-ip.co/styles.css" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0 +10.131.161.1 - - [15/Feb/2023:21:08:35 +0000] "GET /medic/_changes?feed=longpoll&heartbeat=10000&since=115-g1AAAAH5eJyF0LENwjAQBVCLRIAEFBTMgESBCA0lrACJBzgnRXSKoKJmClaAxEswRZbIDCTHZ4GzXPzCT-d_rowx8zIqzDK_3fOycKdkf9jucJIKVyMybmVtxhQp6E-s23jfME00B-LdUWQIOBBxmJkG3gXJHHtfM8WaA2ncQ6RnGmsOZLjG5mLtk2mmSKAUCPHGSkxT3dZAiK_IR28A1AMhzta2wbko2iJe3ndMC92iaIfAzwrTmn8as5aY&limit=25 HTTP/1.1" 499 0 "https://10-131-161-159.local-ip.medicmobile.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0" +10.131.161.1 - - [15/Feb/2023:21:08:35 +0000] "GET /medic-user-medic-meta/_changes?include_docs=true&feed=longpoll&heartbeat=10000&since=13-g1AAAAH5eJyF0LENwkAMhWETKGkoWIICERpKWAESD3BOiugUQUXNFKwAiZdgiiyRGUjMY4FYV_zFfbJ8VxPRspqXtCpu96Iq5ZTuD9sdTlrjKgkka-Y8htkE-hOWjWrrOBCVo9noOBATzMwcB5JLVG0cB9LKw2xwHMh4XdCF-TktgTIg5I0nubYBQr5mnxiSaTsAIWfmzp2LRTvkpdq7Fov2CH7WYOMP5CCWMg&limit=25 HTTP/1.1" 499 0 "https://10-131-161-159.local-ip.medicmobile.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0" +10.131.161.1 - - [15/Feb/2023:21:08:35 +0000] "GET /fontawesome-webfont.woff2 HTTP/1.1" 304 0 "https://10-131-161-159.local-ip.medicmobile.org/styles.css" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0" +10.131.161.1 - - [15/Feb/2023:21:08:35 +0000] "GET /fonts/NotoSans-Bold.ttf HTTP/1.1" 304 0 "https://10-131-161-159.local-ip.medicmobile.org/styles.css" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0" +10.131.161.1 - - [15/Feb/2023:21:08:35 +0000] "GET /fonts/NotoSans-Regular.ttf HTTP/1.1" 200 221787 "https://10-131-161-159.local-ip.medicmobile.org/styles.css" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0 ``` Sometimes you may want to search the logs for a specific string. To search, use the pipe (`|`) and `grep` commands to do this. Here we search for all the times HA Proxy thought CouchDB wasn't reachable (`DOWN`) with this call `docker logs cht_haproxy_1 2>&1 | grep 'DOWN'`: diff --git a/content/en/apps/tutorials/couch2pg-setup.md b/content/en/apps/tutorials/couch2pg-setup.md index bd4aeec35..6bbdf6b0b 100644 --- a/content/en/apps/tutorials/couch2pg-setup.md +++ b/content/en/apps/tutorials/couch2pg-setup.md @@ -100,7 +100,7 @@ The simplest way to run couch2pg is with `docker-compose` which only needs confi 2. Set the URL for CouchDB in the `COUCHDB_URL` env variable. e.g. ```shell -export COUCHDB_URL=https://medic:password@192-168-68-26.my.local-ip.co:8442/medic +export COUCHDB_URL=https://medic:password@192-168-68-26.local-ip.medicmobile.org:8442/medic ``` {{% alert title="Note" %}} The CouchDB URL needs to be reachable from the docker container (i.e. not localhost). {{% /alert %}} diff --git a/content/en/apps/tutorials/local-setup.md b/content/en/apps/tutorials/local-setup.md index eba11cff9..3524dace0 100644 --- a/content/en/apps/tutorials/local-setup.md +++ b/content/en/apps/tutorials/local-setup.md @@ -169,7 +169,7 @@ To open a terminal running on you _host environment_ in VS Code, open the Comman When using `cht-conf` within a Docker container to connect to a CHT instance that is running on your local machine (e.g. a development instance), you cannot use the `--local` flag or `localhost` in your `--url` parameter (since these will be interpreted as "local to the container"). -It is recommended to run a local CHT instance using the [CHT Docker Helper script]({{< relref "apps/guides/hosting/4.x/app-developer#cht-docker-helper-for-4x" >}}). You can connect to the resulting `...my.local-ip.co` URL from the Docker container (or the VS Code terminal). (Just make sure the port your CHT instance is hosted on is not blocked by your firewall). +It is recommended to run a local CHT instance using the [CHT Docker Helper script]({{< relref "apps/guides/hosting/4.x/app-developer#cht-docker-helper-for-4x" >}}). You can connect to the resulting `...local-ip.medicmobile.org` URL from the Docker container (or the VS Code terminal). (Just make sure the port your CHT instance is hosted on is not blocked by your firewall). --- @@ -180,7 +180,7 @@ Now that you have the dependent tools and software installed, you are ready to s Refer to the [App Developer Hosting Guide]({{< relref "apps/guides/hosting/4.x/app-developer" >}}) for instructions on how to deploy a local CHT instance. Note that the first time you run your CHT instance it may take a while. In case you run into issues running your docker file, ensure that the following setting in Docker is checked. ->> Settings >> General >> Use Docker Compose V2 +> Settings >> General >> Use Docker Compose V2 {{< figure src="medic-login.png" link="medic-login.png" class="right col-6 col-lg-8" >}} @@ -241,8 +241,8 @@ Deploy the blank project onto your local test environment with the following com cht --url=https://medic:password@localhost --accept-self-signed-certs {{< /tab >}} {{< tab header="Dev Container" >}} -# Requires instance started with CHT Docker Helper (accessible via a my.local-ip.co URL) -cht --url=https://medic:password@ +# Requires instance started with CHT Docker Helper (accessible via a local-ip.medicmobile.org URL) +cht --url=https://medic:password@ {{< /tab >}} {{< /tabpane >}} @@ -277,13 +277,13 @@ The output of `add-local-ip-certs-to-docker.sh` looks like this: ```text cht_nginx_1 -If just container name is shown above, a fresh local-ip.co certificate was downloaded. +If just container name is shown above, a fresh local-ip.medicmobile.org certificate was downloaded. ``` -The IP of your computer is used in the URL of the CHT instance now. For example if your IP is `192.168.68.40` then the CHT URL with a valid TLS certificate is `192-168-68-40.my.local-ip.co`. See the [local-ip.co](http://local-ip.co/) site to read more about these free to use certificates. +The IP of your computer is used in the URL of the CHT instance now. For example if your IP is `192.168.68.40` then the CHT URL with a valid TLS certificate is `192-168-68-40.local-ip.medicmobile.org`. See the [local-ip.medicmobile.org](https://local-ip.medicmobile.org/) site to read more about these free to use certificates. -When using `cht-conf` you can now drop the use of `--accept-self-signed-certs`. Further, update the URL to be based on your IP. Using the example IP above, this would be `--url=https://medic:password@192-168-68-40.my.local-ip.co`. As well, you can now use this URL to test with the CHT Android app. +When using `cht-conf` you can now drop the use of `--accept-self-signed-certs`. Further, update the URL to be based on your IP. Using the example IP above, this would be `--url=https://medic:password@192-168-68-40.local-ip.medicmobile.org`. As well, you can now use this URL to test with the CHT Android app. ## Frequently Asked Questions diff --git a/content/en/contribute/code/core/dev-environment.md b/content/en/contribute/code/core/dev-environment.md index 69ef077fd..7c3d21288 100644 --- a/content/en/contribute/code/core/dev-environment.md +++ b/content/en/contribute/code/core/dev-environment.md @@ -262,8 +262,8 @@ Refer to [the testing doc](https://github.com/medic/cht-core/blob/master/TESTING 1. Clone the repo: `git clone https://github.com/medic/nginx-local-ip.git` 1. `cd` into the new directory: `cd nginx-local-ip` 1. Assuming your IP is `192.168.0.3`, start `nginx-local-ip` to connect to: - * The CHT API running via `grunt` or `horti`, execute `APP_URL=http://192.168.0.3:5988 docker compose up` and then access it at `https://192-168-0-3.my.local-ip.co/`. - * The CHT API running via `docker`, the ports are remapped, so execute `HTTP=8080 HTTPS=8443 APP_URL=https://192.168.0.3 docker compose up` and then access it at `https://192-168-0-3.my.local-ip.co:8443/`. + * The CHT API running via `grunt` or `horti`, execute `APP_URL=http://192.168.0.3:5988 docker compose up` and then access it at `https://192-168-0-3.local-ip.medicmobile.org/`. + * The CHT API running via `docker`, the ports are remapped, so execute `HTTP=8080 HTTPS=8443 APP_URL=https://192.168.0.3 docker compose up` and then access it at `https://192-168-0-3.local-ip.medicmobile.org:8443/`. 2. The HTTP/HTTPS ports (`80`/`443`) need to accept traffic from the IP address of your host machine and your local webapp port (e.g. `5988`) needs to accept traffic from the IP address of the `nginx-local-ip` container (on the Docker network). If you are using the UFW firewall (in a Linux environment) you can allow traffic on these ports with the following commands: (Since local IP addresses can change over time, ranges are used in these rules so that the firewall configuration does not have to be updated each time a new address is assigned.) diff --git a/content/en/contribute/code/releasing/feature_releases.md b/content/en/contribute/code/releasing/feature_releases.md index 998dd762f..759816dfc 100644 --- a/content/en/contribute/code/releasing/feature_releases.md +++ b/content/en/contribute/code/releasing/feature_releases.md @@ -22,10 +22,10 @@ A Feature Release can easily be identified by its version, which follows the pat ## Initial FR Installation ### 3.x -When you are on a non-feature release, you need to use horticulturalist (horti) to do the initial install of the FR. For example, if your instance was running at `192-168-68-26.my.local-ip.co:8443` and you wanted to install `3.16.0-FR-offline-user-replace-beta.1`, after [installing](https://github.com/medic/horticulturalist#usage) `horti` you could start the installation with this command: +When you are on a non-feature release, you need to use horticulturalist (horti) to do the initial install of the FR. For example, if your instance was running at `192-168-68-26.local-ip.medicmobile.org:8443` and you wanted to install `3.16.0-FR-offline-user-replace-beta.1`, after [installing](https://github.com/medic/horticulturalist#usage) `horti` you could start the installation with this command: ``` -COUCH_URL=https://medic:password@192-168-68-26.my.local-ip.co:8443/medic horti --local --install=3.16.0-FR-offline-user-replace-beta.1 +COUCH_URL=https://medic:password@192-168-68-26.local-ip.medicmobile.org:8443/medic horti --local --install=3.16.0-FR-offline-user-replace-beta.1 ``` On subsequent upgrades to the later beta's of the FR, you will be able to more easily do it through the admin UI in the CHT. From 845c30bf84d89006533f589823d65b00a265bda0 Mon Sep 17 00:00:00 2001 From: Phil Mwago <41321750+Phil-Mwago@users.noreply.github.com> Date: Tue, 6 Jun 2023 11:36:30 +0300 Subject: [PATCH 02/26] Update interoperability page on docs.md (#1046) * Update interoperability.md An update on the interoperability docs based on the Q1 work. * Update content/en/apps/concepts/interoperability.md Co-authored-by: Ashley <8253488+mrjones-plip@users.noreply.github.com> * Update content/en/apps/concepts/interoperability.md Co-authored-by: Ashley <8253488+mrjones-plip@users.noreply.github.com> * Update content/en/apps/concepts/interoperability.md Co-authored-by: Ashley <8253488+mrjones-plip@users.noreply.github.com> * Update content/en/apps/concepts/interoperability.md Co-authored-by: Ashley <8253488+mrjones-plip@users.noreply.github.com> * Update content/en/apps/concepts/interoperability.md Co-authored-by: Ashley <8253488+mrjones-plip@users.noreply.github.com> * Update content/en/apps/concepts/interoperability.md Co-authored-by: Ashley <8253488+mrjones-plip@users.noreply.github.com> * Update content/en/apps/concepts/interoperability.md Co-authored-by: Ashley <8253488+mrjones-plip@users.noreply.github.com> * Update content/en/apps/concepts/interoperability.md Co-authored-by: Ashley <8253488+mrjones-plip@users.noreply.github.com> * Update content/en/apps/concepts/interoperability.md Co-authored-by: Ashley <8253488+mrjones-plip@users.noreply.github.com> * Add files via upload * Update interoperability.md Updated sequence diagram * Update content/en/apps/concepts/interoperability.md Co-authored-by: Andra Blaj * Update content/en/apps/concepts/interoperability.md Co-authored-by: Andra Blaj * Update content/en/apps/concepts/interoperability.md Co-authored-by: Andra Blaj * Update content/en/apps/concepts/interoperability.md Co-authored-by: Andra Blaj * Update content/en/apps/concepts/interoperability.md Co-authored-by: Andra Blaj * Update content/en/apps/concepts/interoperability.md Co-authored-by: Andra Blaj * Update content/en/apps/concepts/interoperability.md Co-authored-by: Ashley <8253488+mrjones-plip@users.noreply.github.com> * Update content/en/apps/concepts/interoperability.md Co-authored-by: Andra Blaj * Update content/en/apps/concepts/interoperability.md Co-authored-by: Andra Blaj * Update interoperability.md * Update interoperability.md Added mermaid * Removing unused diagram * Remove unused flow diagram, using mermaid --------- Co-authored-by: Ashley <8253488+mrjones-plip@users.noreply.github.com> Co-authored-by: Andra Blaj --- content/en/apps/concepts/interoperability.md | 38 ++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/content/en/apps/concepts/interoperability.md b/content/en/apps/concepts/interoperability.md index a206be648..a9b3b90c5 100644 --- a/content/en/apps/concepts/interoperability.md +++ b/content/en/apps/concepts/interoperability.md @@ -3,30 +3,21 @@ title: Interoperability linkTitle: "Interoperability" weight: 8 description: > - Exchanging information between CHT Core and other systems + Exchanging information between the CHT Core and other health systems keywords: interoperability integrations fhir icd openhie openhim relatedContent: > apps/features/integrations --- -# Introduction +## Introduction -Interoperability is the ability of health information systems to work together, even if they weren't specifically designed to work together. With interoperability, patient information can be seen, exchanged, and used across different platforms. This is different from _integration_ which requires custom development to connect two specific systems together. +Interoperability refers to the ability of different health information systems and applications to communicate with each other and exchange data seamlessly. With interoperability, patient information can be seen, exchanged, and used across different platforms. The information/data exchanged has to be understood across the different software for these systems to become interoperable. This is different from _integration_ which requires custom development to connect two specific systems together. -Interoperability is the best practice for health systems because it allows information from one system to be shared with one or more other systems with no additional development. +Interoperability is the best practice for health systems because it allows information from one system to be shared with one or more other systems with no additional development. Interoperability allows technical teams to scale in an efficient and repeatable manner due to the already predefined standards. -# Components +## CHT Interoperability -Useful components and reference information for interoperability include: - -- [OpenHIE](https://ohie.org/) defines the architecture for an interoperability layer. -- [OpenHIM](http://openhim.org/) is a middleware component designed to ease interoperability between systems. -- [HL7 FHIR](https://www.hl7.org/fhir/index.html) is a messaging format to allow all systems to understand the format of the message. -- [ICD-11](https://www.who.int/standards/classifications/classification-of-diseases) and [LOINC](https://loinc.org/) are examples of classification systems. - -# CHT - -The structure of documents in the CHT database reflect the configuration of the system, and therefore do not map directly to a FHIR message format. To achieve interoperability you should use middleware to convert the CHT datastructure into a standardized form so the other systems can read it. +The native CHT database structure does not map directly to a [Fast Healthcare Interoperability Resources (FHIR)](http://www.hl7.org/fhir/) message format. To be compatible, we use a middleware to convert the CHT data structure into a standardized JSON format so the other systems can read it. ```mermaid graph LR @@ -41,9 +32,20 @@ mediator_a -- Request\nfa:fa-arrow-right --- openhim mediator_b -- Channel\nfa:fa-arrow-left --- openhim ``` -The recommended approach is to use OpenHIM as the middleware component with [Mediators](http://openhim.org/docs/configuration/mediators/) to do the conversion. [Outbound Push]({{< ref "apps/reference/app-settings/outbound" >}}) should be configured to make a request to the middleware when relevant documents are created or modified in the CHT. A Mediator then calls [CHT APIs]({{< ref "apps/reference/api" >}}) to gather any additional data required to create a FHIR resource which is then routed to OpenHIM. OpenHIM will then route the resource to any other configured systems. +## Standards & Components + +- [OpenHIE](https://ohie.org/): OpenHIE is an open-source framework for building interoperable health information systems. OpenHIE provides a set of standards and protocols for enabling different health systems and applications to communicate with each other. + +- [OpenHIM](http://openhim.org/): OpenHIM is an open-source middleware platform that provides a central point of control for managing health information exchange (HIE). OpenHIM enables healthcare providers to connect different health systems and applications and provides a common interface for managing data exchange and security. + +- [FHIR](http://www.hl7.org/fhir): FHIR is a standard for exchanging healthcare data electronically. FHIR provides a modern, web-based approach to exchanging healthcare data and is rapidly becoming the preferred standard for healthcare interoperability. + -Conversely to bring data in to the CHT, OpenHIM should be configured to route the updated resource to a Mediator, which then calls the relevant CHT APIs to update the document in the CHT database. This will then be replicated to users' devices as per usual. +A reference application for this pattern is available in the [CHIS Interoperability repository](https://github.com/medic/cht-interoperability). +This application implements a Loss to Follow Up (LTFU) workflow system for CHIS based on the [OpenHIE LTFU Guide](https://wiki.ohie.org/display/SUB/Use+Case+Summary:+Request+Community+Based+Follow-Up). -A reference application for this pattern is available in the [CHIS Interoperability repository](https://github.com/medic/chis-interoperability). +## Important Links +- [cht-interoperability repository](https://github.com/medic/cht-interoperability): A reference application for the LTFU workflow +- [CHT Instance with LTFU configuration](https://interop-cht-test.dev.medicmobile.org/medic/login?redirect=https%3A%2F%2Finterop-cht-test.dev.medicmobile.org%2F) +- [OpenHIM Admin Console](https://interoperability.dev.medicmobile.org/#!/login) From 9646cccd1f36a60eca707069bbe7f743d9e8bc00 Mon Sep 17 00:00:00 2001 From: Binod Adhikary Date: Fri, 9 Jun 2023 04:50:30 +0545 Subject: [PATCH 03/26] fix(#1107): replace role with permission --- content/en/apps/reference/app-settings/user-permissions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/apps/reference/app-settings/user-permissions.md b/content/en/apps/reference/app-settings/user-permissions.md index 997c326c1..38f3b8261 100644 --- a/content/en/apps/reference/app-settings/user-permissions.md +++ b/content/en/apps/reference/app-settings/user-permissions.md @@ -20,7 +20,7 @@ Permissions can be assigned to user roles either directly in `base_settings.json |Property|Description| |-------|---------| -| `can_edit` | This is probably one of the most important permissions in CHT Framework. It allows creating, editing and deleting documents in CouchDB's `medic` database. This permission overrides any other role in this list. | +| `can_edit` | This is probably one of the most important permissions in CHT Framework. It allows creating, editing and deleting documents in CouchDB's `medic` database. This permission overrides any other permission in this list. | | `can_access_gateway_api` | Allows access to gateway API | | `can_aggregate_targets` | Allows access to Target Aggregates page | | `can_bulk_delete_reports` | Allows users to select multiple reports and delete | From bec510a0b936fbbee6bddbfb82457f7067d97ae5 Mon Sep 17 00:00:00 2001 From: Gareth Bowen Date: Fri, 9 Jun 2023 13:00:17 +1200 Subject: [PATCH 04/26] fix(#1108): fix empty placeholders --- content/en/apps/reference/api.md | 35 +++++++++++++++++++------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/content/en/apps/reference/api.md b/content/en/apps/reference/api.md index 89b442896..0556be3fa 100644 --- a/content/en/apps/reference/api.md +++ b/content/en/apps/reference/api.md @@ -1,11 +1,17 @@ --- title: "API to interact with CHT Applications" linkTitle: "API" -weight : 1 +weight: 1 description: > RESTful Application Programming Interfaces for integrating with CHT applications --- + + {{% pageinfo %}} This page covers the endpoints to use when integrating with the CHT server. If there isn't an endpoint that provides the function or data you need, direct access to the database is possible via the [CouchDB API](https://docs.couchdb.org/en/stable/api/index.html). Access to the [PostgreSQL database]({{% ref "core/overview/data-flows-for-analytics" %}}) may also prove useful for data analysis. If additional endpoints would be helpful, please make suggestions via a [GitHub issue](https://github.com/medic/cht-core/issues/new/choose). {{% /pageinfo %}} @@ -472,14 +478,14 @@ Use JSON in the request body to specify a person's details. Note: this does not accommodate having a `place` field on your form and will likely be revised soon. -##### Required +#### Required | Key | Description | | ---- | ----------------------------------- | | name | String used to describe the person. | | type | ID of the `contact_type` for the new person. Defaults to 'person' for backwards compatibility. | -##### Optional +#### Optional | Key | Description | | ------------- | ---------------------------------------------------------------------- | @@ -554,7 +560,7 @@ By default any user can create or modify a place. Use JSON in the request body to specify a place's details. -##### Required Properties +#### Required Properties | Key | Description | | ------ | ---------------------------------------------------------------------------------------------------------------------------- | @@ -562,14 +568,14 @@ Use JSON in the request body to specify a place's details. | type | Place type | | parent | String that references a place or object that defines a new place. Optional for District Hospital and National Office types. | -##### Optional Properties +#### Optional Properties | Key | Description | | ------------- | ---------------------------------------------------------------------- | | contact | String identifier for a person or object that defines a new person. | | reported_date | Timestamp of when the record was reported or created. Defaults to now. | -##### Place Types +#### Place Types | Key | Description | | ----------------- | ----------------- | @@ -733,7 +739,7 @@ will be undefined. | email | no | String | Email address | | known | no | Boolean | Boolean to define if the user has logged in before. | -##### Login by SMS +#### Login by SMS When creating or updating a user, sending a truthy value for the field `token_login` will enable Login by SMS for this user. This action resets the user's password to an unknown string and generates a complex 64 character token, that is used to generate a token-login URL. @@ -772,7 +778,7 @@ If `app_settings.app_url` is not defined, the generated token-login URL will use Returns a list of users and their profile data in JSON format. -##### Permissions +#### Permissions `can_view_users` @@ -828,7 +834,7 @@ Content-Type: application/json; charset=utf-8 Returns a list of users and their profile data in JSON format. -##### Permissions +#### Permissions `can_view_users` @@ -1324,7 +1330,8 @@ HTTP/1.1 200 OK Returns the total number of documents an offline user would replicate (`total_docs`), the number of docs excluding tasks the user would replicate (`warn_docs`), along with a `warn` flag if this number exceeds the recommended limit (now set at 10 000). When the authenticated requester has an offline role, it returns the requester doc count. -###### Example + +#### Example ``` GET /api/v1/users-info -H 'Cookie: AuthSession=OFFLINE_USER_SESSION;' ``` @@ -1622,14 +1629,14 @@ Only allowed for users with "online" roles. ### GET /api/v1/hydrate -##### Query parameters +#### Query parameters | Name | Required | Description | | ----- | -------- | ------ | | doc_ids | true | A JSON array of document uuids | -##### Example +#### Example ``` GET /api/v1/hydrate?doc_ids=["id1","missingId","id3"] @@ -1649,14 +1656,14 @@ Content-Type: application/json ### POST /api/v1/hydrate -##### Parameters +#### Parameters | Name | Required | Description | | ----- | -------- | ------ | | doc_ids | true | A JSON array of document uuids | -##### Example +#### Example ``` POST /api/v1/hydrate From 6ba4bc84b9b51df5bf864e2408ea01a83f6e5591 Mon Sep 17 00:00:00 2001 From: Ashley <8253488+mrjones-plip@users.noreply.github.com> Date: Fri, 9 Jun 2023 21:24:47 -0700 Subject: [PATCH 05/26] fix #1106 Muffet: DNS Issues, CI Names (#1109) --- .github/scripts/set_dns.sh | 36 ++++++++++++++++++++++++++++++++++++ .github/workflows/daily.yml | 22 +++++++++++++--------- 2 files changed, 49 insertions(+), 9 deletions(-) create mode 100755 .github/scripts/set_dns.sh diff --git a/.github/scripts/set_dns.sh b/.github/scripts/set_dns.sh new file mode 100755 index 000000000..9f063ede4 --- /dev/null +++ b/.github/scripts/set_dns.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# At one point we had issues with the DNS server that GH CI Runners use, +# so this script was written to change Muffet to use Quad9. While Quad9 presumably +# will be a bit slower than local DNS to GH CI, it shouldn't matter as Muffet +# is run once a day and is not speed sensitive. +# +# More Info: +# - Issue: local-ip.medicmobile.org doesn't resolve on GH runners, causes +# link check errors (https://github.com/medic/cht-docs/issues/1106) +# - Quad9: 9.9.9.9 DNS Server being used (https://quad9.net) + +echo +echo "------------------------" +echo "calling: resolvectl dns eth0" +resolvectl dns eth0 + +echo +echo "------------------------" +echo "calling: dig local-ip.medicmobile.org +short" +dig local-ip.medicmobile.org +short + +echo +echo "------------------------" +echo "calling: sudo resolvectl dns eth0 9.9.9.9 149.112.112.112" +sudo resolvectl dns eth0 9.9.9.9 149.112.112.112 + +echo +echo "------------------------" +echo "calling: resolvectl dns eth0" +resolvectl dns eth0 + +echo +echo "------------------------" +echo "calling: dig local-ip.medicmobile.org +short" +dig local-ip.medicmobile.org +short diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index 094228798..5264fb62a 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -20,44 +20,48 @@ jobs: timeout-minutes: 15 steps: - - name: All Branches - Git checkout + - name: Git checkout cht-docs repos uses: actions/checkout@v2 with: fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod - - name: All Branches - Install hugo extended v0.101.0 + - name: Install hugo extended v0.101.0 uses: peaceiris/actions-hugo@v2 with: hugo-version: "0.101.0" extended: true - - name: All Branches - Install Node 12.x + - name: Install Node 12.x uses: actions/setup-node@v1 with: node-version: '12.x' - - name: All Branches - Install npm modules for Hugo + - name: Install npm modules for Hugo run: npm install - - name: All Branches - Install Go v1.18 + - name: Install Go v1.18 uses: actions/setup-go@v2 with: go-version: '1.18' - - name: All Branches - Install Muffet v1.5.7 + - name: Install Muffet v1.5.7 run: GO111MODULE=on go install github.com/raviqqe/muffet@v1.5.7 # run in background so CI doesn't hang waiting for "ctrl + c". Sleep ensures server is ready in next step - - name: All Branches - Serve Hugo site + - name: Serve Hugo site run: | hugo server& sleep 30 - - name: All Branches - Run Muffet link checker + - name: Set DNS to 9.9.9.9 + shell: bash + run: ./.github/scripts/set_dns.sh + + - name: Run Muffet link checker shell: bash run: ./.github/scripts/muffet.sh - - name: Main Branch Only - Report errors to Slack, if any + - name: Report errors to Slack, if any if: ${{ github.ref == 'refs/heads/main' && failure() }} uses: rtCamp/action-slack-notify@v2.0.2 env: From 01a4d09c33e68fae2a3d8eccfbb66141cb0809ab Mon Sep 17 00:00:00 2001 From: Diana Barsan <35681649+dianabarsan@users.noreply.github.com> Date: Sat, 10 Jun 2023 09:20:32 +0300 Subject: [PATCH 06/26] chore: adds 4.2.1 release notes (#1112) --- content/en/core/releases/4.2.1.md | 26 ++++++++++++++++++++++++++ content/en/core/releases/_index.md | 1 + 2 files changed, 27 insertions(+) create mode 100644 content/en/core/releases/4.2.1.md diff --git a/content/en/core/releases/4.2.1.md b/content/en/core/releases/4.2.1.md new file mode 100644 index 000000000..90818e55c --- /dev/null +++ b/content/en/core/releases/4.2.1.md @@ -0,0 +1,26 @@ +--- +title: "4.2.1 release notes" +linkTitle: "4.2.1" +weight: +description: > +relevantLinks: > +toc_hide: true +--- + +## Known issues + +Check the repository for the [latest known issues](https://github.com/medic/cht-core/issues?q=is%3Aissue+label%3A%22Affects%3A+4.2.1%22). + +## Upgrade notes + +### Breaking changes + +None. + +### UI/UX changes + +None. + +### Improvements + +- [#8214](https://github.com/medic/cht-core/issues/8214): Align nginx and ALB timeout values diff --git a/content/en/core/releases/_index.md b/content/en/core/releases/_index.md index 27de11706..365499182 100644 --- a/content/en/core/releases/_index.md +++ b/content/en/core/releases/_index.md @@ -86,6 +86,7 @@ Devices with more navigation systems are more likely to get a more accurate loca ### 4.x +- [4.2.1]({{% ref "core/releases/4.2.1.md" %}}) - [4.2.0]({{% ref "core/releases/4.2.0.md" %}}) - [4.1.1]({{% ref "core/releases/4.1.1.md" %}}) - [4.1.0]({{% ref "core/releases/4.1.0.md" %}}) From b178ec32a2e9251222fce70efb97925fdc9f6e14 Mon Sep 17 00:00:00 2001 From: mariachana_moturi <112471942+esthermmoturi@users.noreply.github.com> Date: Wed, 14 Jun 2023 09:53:43 +0300 Subject: [PATCH 07/26] Correct misspellings and punctuations on sentinel transitions doc (#1117) --- content/en/core/overview/transitions.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/en/core/overview/transitions.md b/content/en/core/overview/transitions.md index 6f3956eed..9a2b4787d 100644 --- a/content/en/core/overview/transitions.md +++ b/content/en/core/overview/transitions.md @@ -33,9 +33,9 @@ Transitions obey the following rules: * has an `onChange(change, db, audit, callback)` function that makes changes to the `change.doc` reference (copying is discouraged). `db` and `audit` are - handles to let you query those DBs. More about `callback` below. + handled to let you query those DBs. You can learn more about `callback` in subsequent sections. -* It is not necessary for an individual transition to save the changes to `change.doc` to the db: the doc will be saved once, after all the transitions have edited it. +* It is not necessary for an individual transition to save the changes made to `change.doc` to the db, the doc will be saved once, after all the transitions have edited it. If an individual transition saves the document provided at `change.doc`, it takes responsibility re-attaching the newly saved document (with new seq etc) at `change.doc` * guarantees the consistency of a document. @@ -56,10 +56,10 @@ Callback arguments: * callback(err, needsSaving) - `needsSaving` is true if the `change.doc` needs to be saved to db by the transition runner. For instance the transition has edited the `change.doc` in memory. + `needsSaving` is true if the `change.doc` needs to be saved to db by the transition runner. For instance if the transition has edited the `change.doc` in memory. `err` if truthy, the error will be added to the `changes.doc` in memory. (Note that if `needsSaving` is falsy, the doc will not be saved, so that error will not be persisted). -Regardless whether the doc is saved or not, the transitions will all be run (unless one crashes!). +Regardless whether the doc is saved or not, the transitions will all be run (unless one crashes). When your transition encounters an error, there are different ways to deal with it. You can : - finish your transition with `callback(someError, true)`. This will save the error to `change.doc`. From e179a1836c1f7a4764e7cafdbdb300ede138c64e Mon Sep 17 00:00:00 2001 From: mariachana_moturi <112471942+esthermmoturi@users.noreply.github.com> Date: Tue, 20 Jun 2023 00:14:35 +0300 Subject: [PATCH 08/26] fix: misspelling on architecture doc --- content/en/core/overview/architecture.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/core/overview/architecture.md b/content/en/core/overview/architecture.md index 33c85d1bd..d6ed8b997 100644 --- a/content/en/core/overview/architecture.md +++ b/content/en/core/overview/architecture.md @@ -51,7 +51,7 @@ A suite of tools for extracting and normalizing data from the Core Framework's C ### CHT Watchdog -Monitoring and alerting for the CHT Core Framework to ensure CHWs are able to deliver care without interruption cause by server downtime. Read more detail on the [CHT Watchdog overview page]({{< relref "core/overview/watchdog" >}}) and the [CHT Watchdog GitHub repository](https://github.com/medic/cht-watchdog). +Monitoring and alerting for the CHT Core Framework to ensure CHWs are able to deliver care without interruption caused by server downtime. Read more detail on the [CHT Watchdog overview page]({{< relref "core/overview/watchdog" >}}) and the [CHT Watchdog GitHub repository](https://github.com/medic/cht-watchdog). ## Client From 85e13e6f6fd754246e14f01b4ae909f4aad1d3ef Mon Sep 17 00:00:00 2001 From: Yauvaraj Rimal Date: Tue, 20 Jun 2023 20:57:52 +0545 Subject: [PATCH 09/26] #1122 Update documentation about absolute path (#1123) --- content/en/apps/guides/hosting/monitoring/setup.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/en/apps/guides/hosting/monitoring/setup.md b/content/en/apps/guides/hosting/monitoring/setup.md index e8ca713d1..5867bea4c 100644 --- a/content/en/apps/guides/hosting/monitoring/setup.md +++ b/content/en/apps/guides/hosting/monitoring/setup.md @@ -54,6 +54,8 @@ These instructions have been tested against Ubuntu, but should work against any echo " username: medic" echo " password: ${password}";echo ``` + If you're using docker-compose v2.x, it doesn't support relative paths and you'll have to edit your `.env` file to update paths to absolute path. + Note that in step 4 below you'll need the username and password which is printed after you run the above command. 2. Edit the `cht-instances.yml` file to have the URLs of your CHT instances. You may include as many URLs of CHT instances as you like. From db860d4c085b1eaec2b2bb209361e280d5f31edd Mon Sep 17 00:00:00 2001 From: Gareth Bowen Date: Wed, 21 Jun 2023 07:36:02 +1200 Subject: [PATCH 10/26] fix: adds 4.1.2 release notes medic/cht-core#8326 --- content/en/core/releases/4.1.2.md | 27 +++++++++++++++++++++++++++ content/en/core/releases/_index.md | 1 + 2 files changed, 28 insertions(+) create mode 100644 content/en/core/releases/4.1.2.md diff --git a/content/en/core/releases/4.1.2.md b/content/en/core/releases/4.1.2.md new file mode 100644 index 000000000..4034c4979 --- /dev/null +++ b/content/en/core/releases/4.1.2.md @@ -0,0 +1,27 @@ +--- +title: "4.1.2 release notes" +linkTitle: "4.1.2" +weight: +description: > +relevantLinks: > +toc_hide: true +--- + +## Known issues + +Check the repository for the [latest known issues](https://github.com/medic/cht-core/issues?q=is%3Aissue+label%3A%22Affects%3A+4.1.2%22). + +## Upgrade notes + +### Breaking changes + +None. + +### UI/UX changes + +None. + +### Bug fixes + +- [#8173](https://github.com/medic/cht-core/issues/8173): API Changes watcher skips changes - or becomes blocked +- [#8205](https://github.com/medic/cht-core/issues/8205): Nginx can't connect to API after container restarts because of dynamic IP allocation diff --git a/content/en/core/releases/_index.md b/content/en/core/releases/_index.md index 365499182..ac1dba897 100644 --- a/content/en/core/releases/_index.md +++ b/content/en/core/releases/_index.md @@ -88,6 +88,7 @@ Devices with more navigation systems are more likely to get a more accurate loca - [4.2.1]({{% ref "core/releases/4.2.1.md" %}}) - [4.2.0]({{% ref "core/releases/4.2.0.md" %}}) +- [4.1.2]({{% ref "core/releases/4.1.2.md" %}}) - [4.1.1]({{% ref "core/releases/4.1.1.md" %}}) - [4.1.0]({{% ref "core/releases/4.1.0.md" %}}) - [4.0.1]({{% ref "core/releases/4.0.1.md" %}}) From a1cce7716124c7f616205f93b732dc7fe8c98bc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tatiana=20L=C3=A9piz?= <94494491+tatilepizs@users.noreply.github.com> Date: Fri, 23 Jun 2023 11:33:32 -0600 Subject: [PATCH 11/26] chore(7723): remove protractor references (#1120) This commit remove the protractor references found in the docs --- .../contribute/code/core/fixing-e2e-tests.md | 36 ++++--------------- content/en/core/overview/architecture.md | 8 ++--- 2 files changed, 11 insertions(+), 33 deletions(-) diff --git a/content/en/contribute/code/core/fixing-e2e-tests.md b/content/en/contribute/code/core/fixing-e2e-tests.md index 1223a8336..7d0190328 100644 --- a/content/en/contribute/code/core/fixing-e2e-tests.md +++ b/content/en/contribute/code/core/fixing-e2e-tests.md @@ -12,47 +12,25 @@ aliases: > End to end (e2e) tests can be really difficult to debug - sometimes they fail seemingly at random, and sometimes they only fail on certain environments (eg: ci but not locally). This can make reproducing and reliably fixing the issue challenging, so here are some tips to help! -## Read the protractor logs +## Read the logs -Read the failure carefully - it often has really good info but sometimes it's just hard to find. Most importantly it tells you exactly the line in the test that failed and you can look that up in the source to see what protractor was trying to do. The error message itself is also really useful. Also sometimes one error causes the next, so always start with the first test failure before looking at the others. +Read the failure carefully - it often has really good info but sometimes it's just hard to find. Most importantly it tells you exactly the line in the test that failed and you can look that up in the source to see what it was trying to do. The error message itself is also really useful. Also sometimes one error causes the next, so always start with the first test failure before looking at the others. ### Known failure patterns - Can't click on an element because another element would get the click. This usually means a modal dialog was being shown. 90% of the time this is the update notification modal which means some settings change has been detected after the test started execution. -- Stale element. This means the DOM element has been removed after protractor found it on the page but before you tried to do something with it. I generally try to get protractor to find the element just before I need it to reduce the chance of this happening. +- Stale element. This means the DOM element has been removed after it was found on the page but before trying to do something with it. Generally try to find the element just before it needs it to reduce the chance of this happening -## Other logs +## Other logs and screenshots -The API and Sentinel logs are sometimes useful, particularly if API has crashed. These are available locally under `/tests/logs/` and for CI builds [on AWS](https://s3.console.aws.amazon.com/s3/buckets/medic-e2e/). - -## Screenshots - -We automatically take screenshots when a test fails and store it locally in `/tests/results/` and for CI builds [on AWS](https://s3.console.aws.amazon.com/s3/buckets/medic-e2e/). These can be particularly useful if a dialog was blocking a click. +There are logs and screenshots stored in the allure reports. [Here](https://github.com/medic/cht-core/blob/master/TESTING.md#view-the-ci-report) are the instructions to access that information. ## Running just the failing test -### Option 1 - -Running e2e tests can be quite slow so to save time modify the `specs` property of `/tests/base.conf.js` so it only finds your test. You can also change `describe` and `it` to `xdescribe` and `xit` to skip specific tests. - -### Option 2 - -Alternatively you can run API in test mode using: - -``` -API_PORT=4988 COUCH_URL=http://admin:pass@localhost:5984/medic-test node server.js -``` - -Then grep for just the tests you want to run: +Running e2e tests can be quite slow so to save time modify the `specs` property of `/tests/e2e/**/wdio.conf.js` so it only finds your test. You can also use `describe.skip` and `it.skip` to skip specific tests. ``` -protractor /home/kenn/webapp/tests/e2e.tests.conf.js --specs='/home/kenn/webapp/tests/e2e/api/controllers/_changes.spec.js' --grep="should allow DB admins to POST to _changes" -``` - -### Option 3 - -Use the "Protractor test runner" extension for VSCode. ## Watching the test run -Running the tests locally with `grunt e2e-debug` will allow you to watch it run but if you interact with the page the test will fail in unexpected ways. Furthermore the browser will close after a short timeout so you won't be able to inspect the console or DOM. To do this, force quit the process running the test before it tears down and you will be able to navigate around the app, use Chrome dev tools, and inspect the docs in the database to (hopefully) work out what's going wrong. +Running the tests locally with `npm run wdio-local` or `npm run standard-wdio-local` will allow you to watch it run but if you interact with the page the test will fail in unexpected ways. Furthermore the browser will close after a short timeout so you won't be able to inspect the console or DOM. To do this, force quit the process running the test before it tears down and you will be able to navigate around the app, use Chrome dev tools, and inspect the docs in the database to (hopefully) work out what's going wrong. diff --git a/content/en/core/overview/architecture.md b/content/en/core/overview/architecture.md index d6ed8b997..5649f2981 100644 --- a/content/en/core/overview/architecture.md +++ b/content/en/core/overview/architecture.md @@ -68,7 +68,7 @@ The CHT Web Application is used by Community Health Workers and provides a large The CHT Web Application is [reactive](https://angular.io/guide/rx-library), responsive and a single page application built with [Angular](https://angular.io/) and [NgRx](https://ngrx.io) frameworks. Additionally, it uses the following technology: | Technology | Usage | -| ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|------------------------------------------------------------------| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [PouchDB](https://pouchdb.com) | To implement an [Offline-First]({{< ref "core/overview/offline-first" >}}) strategy which means the data is stored on the client and all pages can load immediately regardless of whether the user has a fast connection, slow connection, or no connection at all. The data is stored in PouchDB which replicates changes back and forth in the background with the server CouchDB. | | [Enketo](https://enketo.org) | To render configured xforms and help with styling and dynamic elements such as show/hide and validation rules. | | [Nools](https://github.com/C2FO/nools) | A rules engine to compute the upcoming tasks and monthly targets of the users. | @@ -76,7 +76,7 @@ The CHT Web Application is [reactive](https://angular.io/guide/rx-library), resp | [Ngx-translate](https://github.com/ngx-translate/core) | To automatically translate the labels from a Angular application. Read more about [how to configure translations](https://docs.communityhealthtoolkit.org/apps/reference/translations/). | | [Karma](https://github.com/karma-runner/karma) | A test runner for [unit tests](https://github.com/medic/cht-core/tree/master/webapp/tests) | | [MochaJS](https://mochajs.org/) | A test framework to run the [unit tests](https://github.com/medic/cht-core/tree/master/webapp/tests) | -| [Protractor](https://www.protractortest.org/#/) | To run the [e2e tests](https://github.com/medic/cht-core/tree/master/tests/e2e) | +| [WebDriverIO](https://webdriver.io/) | To run the [e2e tests](https://github.com/medic/cht-core/tree/master/tests/e2e) | | [Less](http://lesscss.org/) | A CSS preprocessor | ##### Structure @@ -102,11 +102,11 @@ View the application source code in [our GitHub repository](https://github.com/m App Management is a single page application built with [AngularJS](https://angularjs.org) framework and implements [Redux](https://github.com/reduxjs/redux) to manage a reactive state. Additionally, it uses the following technology: | Technology | Usage | -| --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-----------------------------------------------------------------------------| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [Angular Translate](https://github.com/angular-translate/angular-translate) | To automatically translate the labels from a AngularJS application. Read more about [how to manage translations](https://docs.communityhealthtoolkit.org/apps/reference/translations/). | | [Karma](https://github.com/karma-runner/karma) | A test runner for [unit tests](https://github.com/medic/cht-core/tree/master/admin/tests) | | [MochaJS](https://mochajs.org/) | A test framework to run the [unit tests](https://github.com/medic/cht-core/tree/master/admin/tests) | -| [Protractor](https://www.protractortest.org/#/) | To run the [e2e tests](https://github.com/medic/cht-core/tree/master/tests/e2e) | +| [WebDriverIO](https://webdriver.io/) | To run the [e2e tests](https://github.com/medic/cht-core/tree/master/tests/e2e) | | [Less](http://lesscss.org/) | A CSS preprocessor | ##### Structure From 4e76bce1f2d0ee0d5c7fce0664ede7d09fde9f29 Mon Sep 17 00:00:00 2001 From: mariachana_moturi <112471942+esthermmoturi@users.noreply.github.com> Date: Mon, 26 Jun 2023 07:18:05 +0300 Subject: [PATCH 12/26] =?UTF-8?q?Adding=20link=20to=20token=20login=20link?= =?UTF-8?q?=20for=20clear=20understanding=20on=20supervisor=E2=80=A6=20(#1?= =?UTF-8?q?111)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adding link to token login link for clear understanding on supervisor chw create feature * fix reference link --- content/en/apps/features/supervision/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/apps/features/supervision/_index.md b/content/en/apps/features/supervision/_index.md index d19cd6a1f..f6196877e 100644 --- a/content/en/apps/features/supervision/_index.md +++ b/content/en/apps/features/supervision/_index.md @@ -52,7 +52,7 @@ The CHT can be configured to create [Tasks]({{< relref "apps/features/tasks" >}} ## User Management Supervisors are able to set up users in the CHT without contacting a system administrator. They can **create** new CHW user accounts or **replace** CHWs on an existing device. -When _creating_ a new user account, Supervisors fill out the necessary details, including the CHW's phone number, from their own device. They can do this while offline, but must sync before the actual user account is created. Once the Supervisor syncs, the CHT will send an SMS to the new CHW with a link that enables them to start using the app. +When _creating_ a new user account, Supervisors fill out the necessary details, including the CHW's phone number, from their own device. They can do this while offline, but must sync before the actual user account is created. Once the Supervisor syncs, the CHT will send an SMS to the new CHW with a [magic link]({{< relref "apps/concepts/access#magic-links-for-logging-in-token-login" >}}) that enables them to login and start using the app. When _replacing_ a CHW, Supervisors access the existing device and provide details about the new CHW. The new CHW can start using the app immediately, even while offline, and will see all of the existing household data. Once the new CHW syncs, the records on the server will be updated to reflect the new CHWs details. This can be used to manage both CHW and CHW supervisor roles. From 13c416e38596c5b948352e70884f410ba8ff4a33 Mon Sep 17 00:00:00 2001 From: Binod Adhikary Date: Tue, 27 Jun 2023 05:11:38 +0545 Subject: [PATCH 13/26] chore: improve grammar --- content/en/apps/guides/forms/app-form-sms.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/apps/guides/forms/app-form-sms.md b/content/en/apps/guides/forms/app-form-sms.md index 971d12f45..4ef4431c8 100644 --- a/content/en/apps/guides/forms/app-form-sms.md +++ b/content/en/apps/guides/forms/app-form-sms.md @@ -13,11 +13,11 @@ relatedContent: > ## Triggering Calls and SMS -When a XForm is loaded on a phone you can start a phone call or trigger the sending of an SMS within the form itself. This can be useful if within a task or assessment you want to tell the user to contact a patient, or perhaps a health worker at a facility. +When an XForm is loaded on a phone you can start a phone call or trigger the sending of an SMS within the form itself. This can be useful if within a task or assessment, you want to tell the user to contact a patient, or perhaps a health worker at a facility. To set up the call or SMS you'll need to create a link with `tel:` or `sms:` within a `note` field. To create the link, use the markdown link format, eg `[Call Patient](tel:+2547009875000)`. You can specify the content of the SMS by using the body parameter, eg `[Send SMS](sms://+25470098765000?body=Hello World!)`. -The phone number and message can be generated from fields within the XForm. For instance, if you have `patient_name`, `patient_phone` and `message` fields, you can generate the SMS as follows: +The phone number and message can be generated from fields within the XForm. For instance, if you have `patient_name`, `patient_phone`, and `message` fields, you can generate the SMS as follows: - **XLSForm** `[Send SMS to ${patient_name}](sms://${patient_phone}?body=${message})` @@ -47,7 +47,7 @@ To get forms sent in this format, follow the [ODK documentation](https://getodk. ### Medic Custom SMS representation -To configure a form to send using Medic's custom SMS definition, the value of `xml2sms` from the form's CouchDB doc should be an string containing an [Angular expression](https://docs.angularjs.org/guide/expression). +To configure a form to send using Medic's custom SMS definition, the value of `xml2sms` from the form's CouchDB doc should be a string containing an [Angular expression](https://docs.angularjs.org/guide/expression). This allows access to the `fields` property of the `data_record` doc created when saving the form submission to the database. Extra functions are also provided to make compiling a form submission more simple. #### Special Functions From 4ed8b649ecf03ede866773528a0d0982f9a1a631 Mon Sep 17 00:00:00 2001 From: Ashley <8253488+mrjones-plip@users.noreply.github.com> Date: Tue, 27 Jun 2023 12:49:03 -0500 Subject: [PATCH 14/26] fix(#1127): update TLS docs to include AUTO_GENERATE and other important steps/warnings (#1128) --- .../hosting/4.x/adding-tls-certificates.md | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/content/en/apps/guides/hosting/4.x/adding-tls-certificates.md b/content/en/apps/guides/hosting/4.x/adding-tls-certificates.md index 30be22a6e..265e2fff2 100644 --- a/content/en/apps/guides/hosting/4.x/adding-tls-certificates.md +++ b/content/en/apps/guides/hosting/4.x/adding-tls-certificates.md @@ -54,11 +54,25 @@ Your certificates are now safely stored in the native docker volume. Restart you ## Certbot certificate -If you have a deployment with a publically accessible domain name, you can have Certbot automatically create free TLS certificates by using [their Docker image](https://hub.docker.com/r/certbot/certbot/). +_The Certbot integration requires CHT 4.2.0 or later_ -Assuming your CHT instance is running with the default self signed cert: +If you have a deployment with a publicly accessible domain name, you can have Certbot automatically create free TLS certificates by using [their Docker image](https://hub.docker.com/r/certbot/certbot/). -1. Create certbot compose and env files by copying and pasting this code: +Assuming your CHT instance is **already running with the default self-signed cert**: + +1. Edit the CHT's environment file at `/home/ubuntu/cht/upgrade-service/.env` so this line is present: + ```shell + CERTIFICATE_MODE=AUTO_GENERATE + ``` + This will ensure the `deploy.sh` script that certbot uses to deploy the certificates is available for use. +2. Restart your CHT instance to ensure the new `CERTIFICATE_MODE` value takes effect: + ```shell + cd /home/ubuntu/cht/upgrade-service/ + docker stop $(docker ps --filter "name=^cht*" -q) + docker stop $(docker ps --filter "name=^upgrade-service*" -q) + docker compose up --detach + ``` +3. Create certbot compose and env files by copying and pasting this code: ```shell mkdir -p /home/ubuntu/cht/certbot cd /home/ubuntu/cht/certbot @@ -86,20 +100,21 @@ Assuming your CHT instance is running with the default self signed cert: TZ=America/Whitehorse EOF ``` -2. Generate certs: + Certbot only lets you create the identical certificates 5 times per 7 days. If you're unsure of how this works you can change `STAGING=` to `STAGING=--staging` in the `/home/ubuntu/cht/certbot/.env` file to do repeated tests. Be sure to change this back to `STAGING=` when you're ready to create production certificates. +4. Generate certs: ```shell cd /home/ubuntu/cht/certbot docker compose up ``` -3. Run this command to find the name of your CHT ngnix container: +5. Run this command to find the name of your CHT ngnix container: ```shell docker ps --filter "name=nginx" --format '{{ .Names }}' ``` -4. Assuming the name is `cht_nginx_1` from the prior step, reload your `nginx` config with this command: +6. Assuming the name is `cht_nginx_1` from the prior step, reload your `nginx` config with this command: ```shell docker exec -it cht_nginx_1 nginx -s reload ``` -5. Attempt to renew your certificates once a week by adding this cronjob via `crontab -e`. Certbot will only renew them as needed: +7. Attempt to renew your certificates once a week by adding this cronjob via `crontab -e`. Certbot will only renew them as needed: ```shell 0 0 * * 0 cd /home/ubuntu/cht/certbot&&docker compose up ``` From 74db48980140042f602348fd2400b754e9f9f9fb Mon Sep 17 00:00:00 2001 From: Gareth Bowen Date: Thu, 29 Jun 2023 09:58:29 +1200 Subject: [PATCH 15/26] chore: update DPO in policy.md --- content/en/apps/guides/privacy/policy.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/content/en/apps/guides/privacy/policy.md b/content/en/apps/guides/privacy/policy.md index 12eb8a26c..5f9d7bf89 100644 --- a/content/en/apps/guides/privacy/policy.md +++ b/content/en/apps/guides/privacy/policy.md @@ -116,5 +116,4 @@ We work with every partner to make sure they are trained and equipped to handle ## Inquiries with Medic’s Data Protection Officer -For the purposes of this policy, Medic’s Chief Operations Officer serves as Medic’s Data Protection Officer. For any inquiries, please send an email to support@medic.org with the words “Data Protection” in the subject line. - +For any inquiries, please reach out to Medic’s Data Protection Officer, by emailing support@medic.org with the words “Data Protection” in the subject line. From a91272809de5e456983f24a5d8b3f5709963b3d7 Mon Sep 17 00:00:00 2001 From: Andra Blaj Date: Mon, 3 Jul 2023 11:05:26 +0300 Subject: [PATCH 16/26] fix: Fix broken SDGS link (#1130) --- content/en/glossary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/glossary.md b/content/en/glossary.md index 9b9bce392..eadd36921 100644 --- a/content/en/glossary.md +++ b/content/en/glossary.md @@ -269,7 +269,7 @@ A Statement of Work is a formal document that describes the project goals. The S ###### Sustainable Development Goals (SDG) -"The 2030 Agenda for Sustainable Development, adopted by all United Nations Member States in 2015, provides a shared blueprint for peace and prosperity for people and the planet, now and into the future. At its heart are the 17 Sustainable Development Goals (SDGs), which are an urgent call for action by all countries - developed and developing - in a global partnership. They recognize that ending poverty and other deprivations must go hand-in-hand with strategies that improve health and education, reduce inequality, and spur economic growth – all while tackling climate change and working to preserve our oceans and forests." [More info](https://sdgs.un.org/goals). +"The 2030 Agenda for Sustainable Development, adopted by all United Nations Member States in 2015, provides a shared blueprint for peace and prosperity for people and the planet, now and into the future. At its heart are the 17 Sustainable Development Goals (SDGs), which are an urgent call for action by all countries - developed and developing - in a global partnership. They recognize that ending poverty and other deprivations must go hand-in-hand with strategies that improve health and education, reduce inequality, and spur economic growth – all while tackling climate change and working to preserve our oceans and forests." [More info](https://www.undp.org/sustainable-development-goals). ###### Systemized Nomenclature of Medicine (SNOMED) From a6696341be86dae670089006b6f89603524963b1 Mon Sep 17 00:00:00 2001 From: Diana Barsan <35681649+dianabarsan@users.noreply.github.com> Date: Fri, 7 Jul 2023 21:11:26 +0300 Subject: [PATCH 17/26] chore: add 4.2.2 release notes (#1131) --- content/en/core/releases/4.2.2.md | 28 ++++++++++++++++++++++++++++ content/en/core/releases/_index.md | 1 + 2 files changed, 29 insertions(+) create mode 100644 content/en/core/releases/4.2.2.md diff --git a/content/en/core/releases/4.2.2.md b/content/en/core/releases/4.2.2.md new file mode 100644 index 000000000..65f9ed521 --- /dev/null +++ b/content/en/core/releases/4.2.2.md @@ -0,0 +1,28 @@ +--- +title: "4.2.2 release notes" +linkTitle: "4.2.2" +weight: +description: > +relevantLinks: > +toc_hide: true +--- + +## Known issues + +Check the repository for the [latest known issues](https://github.com/medic/cht-core/issues?q=is%3Aissue+label%3A%22Affects%3A+4.2.2%22). + +## Upgrade notes + +### Breaking changes + +None. + +### UI/UX changes + +None. + +### Bug fixes + +- [#8161](https://github.com/medic/cht-core/issues/8161): Telemetry doc metadata.versions.app is `unknown` for all telemetry docs +- [#8359](https://github.com/medic/cht-core/issues/8359): Infinite scrolling not working on Contacts tab + diff --git a/content/en/core/releases/_index.md b/content/en/core/releases/_index.md index ac1dba897..4486fa227 100644 --- a/content/en/core/releases/_index.md +++ b/content/en/core/releases/_index.md @@ -86,6 +86,7 @@ Devices with more navigation systems are more likely to get a more accurate loca ### 4.x +- [4.2.2]({{% ref "core/releases/4.2.2.md" %}}) - [4.2.1]({{% ref "core/releases/4.2.1.md" %}}) - [4.2.0]({{% ref "core/releases/4.2.0.md" %}}) - [4.1.2]({{% ref "core/releases/4.1.2.md" %}}) From 882c574c562b1d3b5d41628d225d6089855aacbe Mon Sep 17 00:00:00 2001 From: Andra Blaj Date: Mon, 10 Jul 2023 10:26:53 +0300 Subject: [PATCH 18/26] fix: Fix OpenHIE link and remove broken link (#1133) --- content/en/apps/concepts/interoperability.md | 2 +- content/en/contribute/medic/onboarding/technical-resources.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/apps/concepts/interoperability.md b/content/en/apps/concepts/interoperability.md index a9b3b90c5..89a1252c3 100644 --- a/content/en/apps/concepts/interoperability.md +++ b/content/en/apps/concepts/interoperability.md @@ -42,7 +42,7 @@ mediator_b -- Channel\nfa:fa-arrow-left --- openhim A reference application for this pattern is available in the [CHIS Interoperability repository](https://github.com/medic/cht-interoperability). -This application implements a Loss to Follow Up (LTFU) workflow system for CHIS based on the [OpenHIE LTFU Guide](https://wiki.ohie.org/display/SUB/Use+Case+Summary:+Request+Community+Based+Follow-Up). +This application implements a Loss to Follow Up (LTFU) workflow system for CHIS based on the [OpenHIE LTFU Guide](https://wiki.ohie.org/display/CP/Use+Case+Summary%3A+Request+Community+Based+Follow-Up). ## Important Links - [cht-interoperability repository](https://github.com/medic/cht-interoperability): A reference application for the LTFU workflow diff --git a/content/en/contribute/medic/onboarding/technical-resources.md b/content/en/contribute/medic/onboarding/technical-resources.md index 71349eaf3..13c39dcd7 100644 --- a/content/en/contribute/medic/onboarding/technical-resources.md +++ b/content/en/contribute/medic/onboarding/technical-resources.md @@ -35,7 +35,7 @@ There is a Slack channel *#exercism* where engineers and tech enthusiats meet an | **Web Architecture** | [Web Architecture 101](https://medium.com/storyblocks-engineering/web-architecture-101-a3224e126947) | | **Web Browsers** | [Inside look at modern web browsers, part I](https://developer.chrome.com/blog/inside-browser-part1/)
[Inside look at modern web browsers, part II](https://developer.chrome.com/blog/inside-browser-part2/)
[Inside look at modern web browsers, part III](https://developer.chrome.com/blog/inside-browser-part3/)
[Inside look at modern web browsers, part IV](https://developer.chrome.com/blog/inside-browser-part4/)| | **Web Performance** | [High Performance Browser Networking](https://hpbn.co/)| -| **PostgreSQL** | [PostgreSQL Tutorial](https://www.postgresqltutorial.com/)
[PostgreSQL Queries Cheat Sheet](https://postgrescheatsheet.com/#/queries)
[PostgreSQL Cheat Sheet](https://www.postgresqltutorial.com/postgresql-cheat-sheet/)
[PostgreSQL Views Tutorial](https://www.postgresqltutorial.com/postgresql-views/)
[PostgreSQL Views Documentation](https://www.postgresql.org/docs/current/tutorial-views.html)
[Common Table Expressions (CTEs)](https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-cte/)
[PostgreSQL Queries with CTEs Documentation](https://www.postgresql.org/docs/current/queries-with.html) | +| **PostgreSQL** | [PostgreSQL Tutorial](https://www.postgresqltutorial.com/)
[PostgreSQL Cheat Sheet](https://www.postgresqltutorial.com/postgresql-cheat-sheet/)
[PostgreSQL Views Tutorial](https://www.postgresqltutorial.com/postgresql-views/)
[PostgreSQL Views Documentation](https://www.postgresql.org/docs/current/tutorial-views.html)
[Common Table Expressions (CTEs)](https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-cte/)
[PostgreSQL Queries with CTEs Documentation](https://www.postgresql.org/docs/current/queries-with.html) | | **Superset** | [Introduction to Superset](https://superset.apache.org/docs/intro/)
[Creating Your First Dashboard](https://superset.apache.org/docs/creating-charts-dashboards/creating-your-first-dashboard/) | | **DBT** | [DBT Core Manual Installation Guide](https://docs.getdbt.com/quickstarts/manual-install?step=1)
[DBT Video Playlist](https://www.youtube.com/playlist?list=PLohMhitTY9xuEVMpLG3xXhsKG9j2XCTeF) | | **Logstash** | [Getting Started with Logstash](https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html)
[Logstash Tutorial](https://logz.io/blog/logstash-tutorial/) | From 4239943d0f439142635ac751fb0267ded6799530 Mon Sep 17 00:00:00 2001 From: Marc Abbyad <789512+abbyad@users.noreply.github.com> Date: Thu, 13 Jul 2023 11:32:53 -0400 Subject: [PATCH 19/26] Verify ownership for Google Search Console (#1138) --- static/google0d6c891ed1d8e5ed.html | 1 + 1 file changed, 1 insertion(+) create mode 100644 static/google0d6c891ed1d8e5ed.html diff --git a/static/google0d6c891ed1d8e5ed.html b/static/google0d6c891ed1d8e5ed.html new file mode 100644 index 000000000..830891f1e --- /dev/null +++ b/static/google0d6c891ed1d8e5ed.html @@ -0,0 +1 @@ +google-site-verification: google0d6c891ed1d8e5ed.html \ No newline at end of file From 8fa650afaf1a283c60fbd9ac8b61e0b4a5aff526 Mon Sep 17 00:00:00 2001 From: Phil Mwago <41321750+Phil-Mwago@users.noreply.github.com> Date: Fri, 21 Jul 2023 11:53:12 +0300 Subject: [PATCH 20/26] Update cht-sync.md (#1140) --- content/en/core/overview/data-flows-for-analytics/cht-sync.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/core/overview/data-flows-for-analytics/cht-sync.md b/content/en/core/overview/data-flows-for-analytics/cht-sync.md index 1487c562b..19557005a 100644 --- a/content/en/core/overview/data-flows-for-analytics/cht-sync.md +++ b/content/en/core/overview/data-flows-for-analytics/cht-sync.md @@ -1,5 +1,5 @@ --- -title: "CHT Sync and CHT Pipeline setup" +title: "CHT Sync and CHT Pipeline" linkTitle: "CHT Sync" weight: 2 description: > From 444e5625cffc4ad3956d07102df8817ffc043b0a Mon Sep 17 00:00:00 2001 From: Marc Abbyad <789512+abbyad@users.noreply.github.com> Date: Wed, 26 Jul 2023 12:04:49 -0400 Subject: [PATCH 21/26] Uses measurement ID (#1141) Needs to use the Measurement ID, and not the Property ID. --- config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.toml b/config.toml index 9df78cf3b..58204d67f 100644 --- a/config.toml +++ b/config.toml @@ -46,7 +46,7 @@ anchor = "smart" [services] [services.googleAnalytics] # Comment out the next line to disable GA tracking. Also disables the feature described in [params.ui.feedback]. -id = "G-362515267" +id = "G-98W4V2NTPJ" # Language configuration From 96005dcf89bde1ae8c9d9b80c6e353c67970266d Mon Sep 17 00:00:00 2001 From: Jennifer Q <66472237+latin-panda@users.noreply.github.com> Date: Fri, 28 Jul 2023 13:11:04 +0700 Subject: [PATCH 22/26] chore(#8328): permission for default filters in reports tab #1142 --- .../en/apps/reference/app-settings/_index.md | 27 ++--- .../app-settings/user-permissions.md | 99 ++++++++++--------- 2 files changed, 64 insertions(+), 62 deletions(-) diff --git a/content/en/apps/reference/app-settings/_index.md b/content/en/apps/reference/app-settings/_index.md index 48aeef50f..062295f30 100644 --- a/content/en/apps/reference/app-settings/_index.md +++ b/content/en/apps/reference/app-settings/_index.md @@ -28,20 +28,21 @@ The following settings do not need to be specified. They should only be defined ### `app_settings.json` -| Setting | Description | Default | Version | -|----------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------|---------| -| phone_validation |

| "full" | 3.1.0 | -| uhc.contacts_default_sort |
  • "alpha": Sort contacts alphanumerically
  • "last_visited_date": sort contacts by the date they were most recently visited.
| "alpha" | 2.18.0 | -| uhc.visit_count.month_start_date | The date of each month when the visit count is reset to 0. | 1 | 2.18.0 | -| uhc.visit_count.visit_count_goal | The monthly visit count goal. | 0 | 2.18.0 | -| outgoing_deny_list | All outgoing messages will be denied (unsent) if the recipient phone number starts with an entry in this list. A comma delimited list. (eg. `outgoing_deny_list="253,ORANGE"` will deny all messages sent to `253 543 4448` and `ORANGE NET`) | "" | | -| outgoing_deny_shorter_than | Deny all messages to recipient phone numbers which are shorter than this value. Intended to avoid [message loops]({{% ref "apps/guides/messaging/message-loops" %}}) with short codes used by gateways (eg. `60396`). An integer. | 6 | 3.3.0 | -| outgoing_deny_with_alphas | When `true`, deny all messages to recipient phone numbers containing letters (eg. `Safaricom`). Intended to avoid [message loops]({{% ref "apps/guides/messaging/message-loops" %}}) with non-numeric senders used by gateways. A boolean. | true | 3.3.0 | -| outgoing_deny_with_alphas | When `true`, deny all messages to recipient phone numbers containing letters (eg. `Safaricom`). Intended to avoid [message loops]({{% ref "apps/guides/messaging/message-loops" %}}) with non-numeric senders used by gateways. A boolean. | true | 3.3.0 | -| task_day_limit | The number of days before a task is due to show the due date. | 4 | 3.9.0 | -| app_url | The URL of the app, eg: "https://demo.app.medicmobile.org" | | 3.10.0 | -| task_days_overdue | Display number of overdue days in tasks list | false | 3.13.0 | +| Setting | Description | Default | Version | +|----------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------|---------| +| phone_validation |
  • "full": full validation of a phone number for a region using length and prefix information.
  • "partial": quickly guesses whether a number is a possible phone number by using only the length information, much faster than a full validation.
  • "none": allows almost any values but still fails for any phone that contains a-z chars.
| "full" | 3.1.0 | +| uhc.contacts_default_sort |
  • "alpha": Sort contacts alphanumerically
  • "last_visited_date": sort contacts by the date they were most recently visited.
| "alpha" | 2.18.0 | +| uhc.visit_count.month_start_date | The date of each month when the visit count is reset to 0. | 1 | 2.18.0 | +| uhc.visit_count.visit_count_goal | The monthly visit count goal. | 0 | 2.18.0 | +| outgoing_deny_list | All outgoing messages will be denied (unsent) if the recipient phone number starts with an entry in this list. A comma delimited list. (eg. `outgoing_deny_list="253,ORANGE"` will deny all messages sent to `253 543 4448` and `ORANGE NET`) | "" | | +| outgoing_deny_shorter_than | Deny all messages to recipient phone numbers which are shorter than this value. Intended to avoid [message loops]({{% ref "apps/guides/messaging/message-loops" %}}) with short codes used by gateways (eg. `60396`). An integer. | 6 | 3.3.0 | +| outgoing_deny_with_alphas | When `true`, deny all messages to recipient phone numbers containing letters (eg. `Safaricom`). Intended to avoid [message loops]({{% ref "apps/guides/messaging/message-loops" %}}) with non-numeric senders used by gateways. A boolean. | true | 3.3.0 | +| outgoing_deny_with_alphas | When `true`, deny all messages to recipient phone numbers containing letters (eg. `Safaricom`). Intended to avoid [message loops]({{% ref "apps/guides/messaging/message-loops" %}}) with non-numeric senders used by gateways. A boolean. | true | 3.3.0 | +| task_day_limit | The number of days before a task is due to show the due date. | 4 | 3.9.0 | +| app_url | The URL of the app, eg: "https://demo.app.medicmobile.org" | | 3.10.0 | +| task_days_overdue | Display number of overdue days in tasks list | false | 3.13.0 | | languages | Array of objects with `locale` and `enabled` properties representing respectively the 2 or 3 letter language code and whether that language should be enabled.
If unset it falls back to the previous behavior of relying on the `enabled` property of each translation document `messages-XX.properties`. This fallback behavior is now deprecated and will be removed in the next major version (5.0). This `languages` configuration property will be required for CHT 5.0+. | | 4.2.0 | +| place_hierarchy_types | Array of contact types' IDs, should match the ones defined in `contact_types`. This is used to define the Place Filter's options in Reports tab. | | 2.15.0 | ## SMS Workflows diff --git a/content/en/apps/reference/app-settings/user-permissions.md b/content/en/apps/reference/app-settings/user-permissions.md index 38f3b8261..e48f28fb4 100644 --- a/content/en/apps/reference/app-settings/user-permissions.md +++ b/content/en/apps/reference/app-settings/user-permissions.md @@ -18,55 +18,56 @@ Permissions can be assigned to user roles either directly in `base_settings.json ### System defined permissions -|Property|Description| -|-------|---------| -| `can_edit` | This is probably one of the most important permissions in CHT Framework. It allows creating, editing and deleting documents in CouchDB's `medic` database. This permission overrides any other permission in this list. | -| `can_access_gateway_api` | Allows access to gateway API | -| `can_aggregate_targets` | Allows access to Target Aggregates page | -| `can_bulk_delete_reports` | Allows users to select multiple reports and delete | -| `can_configure` | Allows update of configuration parameters | -| `can_upgrade` | Allows upgrades of the CHT Core Framework version via the API or admin interface | -| `can_create_people` | Allows creation & editing of person contacts | -| `can_create_places` | Allows creation & editing of place contacts | -| `can_create_records` | Allows creation of reports | -| `can_create_users` | Allows creation of user logins | -| `can_delete_contacts` | Allows deletion of people and places | -| `can_delete_messages` | Allows deletion of messages | -| `can_delete_reports` | Allows deletion of reports | -| `can_delete_users` | Allows deletion of users | -| `can_edit_profile` | Allows editing of their own user profile | -| `can_edit_verification` | Allows setting and editing of report verification status. To block the user from updating the existing status, use `can_verify_reports` instead. | -| `can_export_all` | Allows export of data including data they do not have access to | -| `can_export_contacts` | Allows export of contacts | -| `can_export_dhis` | Allows export of DHIS2 metrics | -| `can_export_feedback` | Allows export of user feedback | -| `can_export_messages` | Allows export of reports and messages | -| `can_log_out_on_android` | Displays logout menu item in hamburger menu for Android users and can be used to log out from the application | -| `can_update_places` | Allows editing of place documents | -| `can_update_reports` | Allows editing of report documents | -| `can_update_users` | Allows editing of user documents | -| `can_verify_reports` | Allows setting report verification status if no status is currently set. To allow the user to update the existing status, use `can_edit_verification` instead. | -| `can_view_analytics` | Allows access to in-app analytics | -| `can_view_analytics_tab` | Displays analytics tab on the application | -| `can_view_call_action` | Displays a button to call the selected person | -| `can_view_contacts` | Allows viewing contacts | -| `can_view_contacts_tab` | Displays the contacts tab in the application | -| `can_view_last_visited_date` | Enable display of the date a family was last visited | -| `can_view_message_action` | Displays a button to send a message to the selected contact | -| `can_view_messages` | Allows viewing messages | -| `can_view_messages_tab` | Displays the messages tab in the application | -| `can_view_outgoing_messages` | Allows viewing outgoing messages when logged in as an administrator | -| `can_view_reports` | Allows viewing reports | -| `can_view_reports_tab` | Displays the reports tab in the application | -| `can_view_tasks` | Allows viewing tasks | -| `can_view_tasks_tab` | Displays tasks tab in the application | -| `can_view_tasks_group` | Displays all available tasks within same place after submitting | -| `can_view_uhc_stats` | Allows users to view UHC metrics | -| `can_view_unallocated_data_records` | Allows viewing reports that have no associated contact | -| `can_view_users` | Allows viewing all user accounts | -| `can_write_wealth_quintiles` | Allows updating contacts with wealth quintile information | -| `can_view_old_filter_and_search` | Allows users to see the old filter and search in Reports Tab and Contact Tab which is considered deprecated and will be completely removed in a future release. Admin user will always see the new redesigned filter. See [Feature Flags]({{< ref "apps/guides/updates/feature-flags" >}}) for more info.| -| `can_view_old_action_bar` | Allows users to see the old action bar in Message Tab, Reports Tab and Contact Tab which is considered deprecated and will be completely removed in a future release. The More Options menu will be hidden when this permission is enabled. The Admin user will always see the new More Options menu. See [Feature Flags]({{< ref "apps/guides/updates/feature-flags" >}}) for more info.| +|Property| Description | +|-------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `can_edit` | This is probably one of the most important permissions in CHT Framework. It allows creating, editing and deleting documents in CouchDB's `medic` database. This permission overrides any other permission in this list. | +| `can_access_gateway_api` | Allows access to gateway API | +| `can_aggregate_targets` | Allows access to Target Aggregates page | +| `can_bulk_delete_reports` | Allows users to select multiple reports and delete | +| `can_configure` | Allows update of configuration parameters | +| `can_upgrade` | Allows upgrades of the CHT Core Framework version via the API or admin interface | +| `can_create_people` | Allows creation & editing of person contacts | +| `can_create_places` | Allows creation & editing of place contacts | +| `can_create_records` | Allows creation of reports | +| `can_create_users` | Allows creation of user logins | +| `can_delete_contacts` | Allows deletion of people and places | +| `can_delete_messages` | Allows deletion of messages | +| `can_delete_reports` | Allows deletion of reports | +| `can_delete_users` | Allows deletion of users | +| `can_edit_profile` | Allows editing of their own user profile | +| `can_edit_verification` | Allows setting and editing of report verification status. To block the user from updating the existing status, use `can_verify_reports` instead. | +| `can_export_all` | Allows export of data including data they do not have access to | +| `can_export_contacts` | Allows export of contacts | +| `can_export_dhis` | Allows export of DHIS2 metrics | +| `can_export_feedback` | Allows export of user feedback | +| `can_export_messages` | Allows export of reports and messages | +| `can_log_out_on_android` | Displays logout menu item in hamburger menu for Android users and can be used to log out from the application | +| `can_update_places` | Allows editing of place documents | +| `can_update_reports` | Allows editing of report documents | +| `can_update_users` | Allows editing of user documents | +| `can_verify_reports` | Allows setting report verification status if no status is currently set. To allow the user to update the existing status, use `can_edit_verification` instead. | +| `can_view_analytics` | Allows access to in-app analytics | +| `can_view_analytics_tab` | Displays analytics tab on the application | +| `can_view_call_action` | Displays a button to call the selected person | +| `can_view_contacts` | Allows viewing contacts | +| `can_view_contacts_tab` | Displays the contacts tab in the application | +| `can_view_last_visited_date` | Enable display of the date a family was last visited | +| `can_view_message_action` | Displays a button to send a message to the selected contact | +| `can_view_messages` | Allows viewing messages | +| `can_view_messages_tab` | Displays the messages tab in the application | +| `can_view_outgoing_messages` | Allows viewing outgoing messages when logged in as an administrator | +| `can_view_reports` | Allows viewing reports | +| `can_view_reports_tab` | Displays the reports tab in the application | +| `can_view_tasks` | Allows viewing tasks | +| `can_view_tasks_tab` | Displays tasks tab in the application | +| `can_view_tasks_group` | Displays all available tasks within same place after submitting | +| `can_view_uhc_stats` | Allows users to view UHC metrics | +| `can_view_unallocated_data_records` | Allows viewing reports that have no associated contact | +| `can_view_users` | Allows viewing all user accounts | +| `can_write_wealth_quintiles` | Allows updating contacts with wealth quintile information | +| `can_view_old_filter_and_search` | Allows users to see the old filter and search in Reports Tab and Contact Tab which is considered deprecated and will be completely removed in a future release. Admin user will always see the new redesigned filter. See [Feature Flags]({{< ref "apps/guides/updates/feature-flags" >}}) for more info. | +| `can_view_old_action_bar` | Allows users to see the old action bar in Message Tab, Reports Tab and Contact Tab which is considered deprecated and will be completely removed in a future release. The More Options menu will be hidden when this permission is enabled. The Admin user will always see the new More Options menu. See [Feature Flags]({{< ref "apps/guides/updates/feature-flags" >}}) for more info. | +| `can_default_facility_filter` | Defaults the Place Filter in Reports tab to the user's associated facility. The user should have a contact associated that belongs to a facility. This feature is not available for Admin and Offline type of users. Added in 4.3. | ### Code sample This sample shows how to define the `permissions` object in the `base_settings.json` file. Observe how `can_edit` permission has been associated to `supervisor_role` and `chw_role` user roles. From 57d6bac87f86cb008aade336873a7bac7581bed6 Mon Sep 17 00:00:00 2001 From: Joshua Kuestersteffen Date: Fri, 28 Jul 2023 10:05:35 -0500 Subject: [PATCH 23/26] Update Watchdog docs to include min version of Postgres (#1143) --- content/en/apps/guides/hosting/monitoring/setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/apps/guides/hosting/monitoring/setup.md b/content/en/apps/guides/hosting/monitoring/setup.md index 5867bea4c..b1190a166 100644 --- a/content/en/apps/guides/hosting/monitoring/setup.md +++ b/content/en/apps/guides/hosting/monitoring/setup.md @@ -117,7 +117,7 @@ docker compose up -d #### couch2pg Data -With the [release of 1.1.0](https://github.com/medic/cht-watchdog/releases/tag/1.1.0), Watchdog now supports easily ingesting [couch2pg]({{< relref "apps/tutorials/couch2pg-setup" >}}) data read in from a Postgres database. +With the [release of 1.1.0](https://github.com/medic/cht-watchdog/releases/tag/1.1.0), Watchdog now supports easily ingesting [couch2pg]({{< relref "apps/tutorials/couch2pg-setup" >}}) data read in from a Postgres database (supports Postgres `>= 9.x`). 1. Copy the two example config files so you can add the correct contents in them. Do so by running this code: From 503ec998dd03dc5122b13fedc024bc6e2484223b Mon Sep 17 00:00:00 2001 From: Kenn Sippell Date: Fri, 4 Aug 2023 00:10:47 -0700 Subject: [PATCH 24/26] #1145 - Documentation for /api/v1/express-metrics (#1146) * Documentation for /api/v1/express-metrics * Update api.md * make docs more consistent --------- Co-authored-by: Gareth Bowen --- content/en/apps/reference/api.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/content/en/apps/reference/api.md b/content/en/apps/reference/api.md index 0556be3fa..8a281c6a8 100644 --- a/content/en/apps/reference/api.md +++ b/content/en/apps/reference/api.md @@ -307,6 +307,7 @@ GET /api/v1/forms/NPYY.json ### POST /api/v1/forms/validate *Added in 3.12.0* + Validate the XForm passed. Require the `can_configure` permission. #### Headers @@ -774,7 +775,7 @@ If `app_settings.app_url` is not defined, the generated token-login URL will use ### GET /api/v1/users -*DEPRECATED: use /api/v2/users* +*DEPRECATED: use [/api/v2/users](#get-apiv2users)* Returns a list of users and their profile data in JSON format. @@ -1111,6 +1112,7 @@ Content-Type: application/json ### POST /api/v2/users *Added in 3.16.0* + Create new users with a place and a contact from a CSV file. Creating users from a CSV file behaves the same as passing a JSON array of users into the [`POST /api/v1/users`]({{< ref "apps/reference/api#post-apiv1users" >}}) @@ -1459,7 +1461,8 @@ See the [Monitoring and alerting on the CHT]({{< relref "apps/guides/hosting/mon ### GET /api/v1/monitoring -*Deprecated in 3.12.x in favor of [/api/v2/monitoring](#get-apiv2monitoring)* +*DEPRECATED: use [/api/v2/monitoring](#get-apiv2monitoring)* + Used to retrieve a range of metrics about the instance. While the output is human-readable this is intended for automated monitoring allowing for tracking trends over time and alerting about potential issues. #### Permissions @@ -1577,6 +1580,18 @@ curl http://localhost:5988/api/v2/monitoring - A metric of `""` (for string values) or `-1` (for numeric values) indicates an error occurred while querying the metric - check the API logs for details. - If no response or an error response is received the instance is unreachable. Thus, this API can be used as an uptime monitoring endpoint. +### GET /api/v1/express-metrics + +*Added in 4.3.0* + +Used to retrieve a range of metrics for monitoring CHT API's performance and internals. This API is used by [CHT Watchdog]({{< ref "/core/overview/watchdog" >}}). + +The response is formatted for the [Prometheus Data Model](https://prometheus.io/docs/concepts/data_model/). The metrics exposed are defined by the [prometheus-api-metrics package](https://www.npmjs.com/package/prometheus-api-metrics) and include optional default metrics and garbage collection metrics. + +#### Permissions + +No permissions required. + ## Upgrades All of these endpoints require the `can_configure` permission. @@ -1690,6 +1705,7 @@ Content-Type: application/json ## Contacts by phone *Added in 3.10.0* + Accepts a phone number parameter and returns fully hydrated contacts that match the requested phone number. If multiple contacts are found, all are returned. When no matches are found, a 404 error is returned. Supports both GET and POST. @@ -1763,6 +1779,7 @@ Content-Type: application/json ## Replication Limit *Added in 3.11.0* + Returns the quantity of documents that were replicated by each user. Accepts filtering by user name, when not provided, it returns all users. Supports GET. From 17c6ae5dbf0ffdc3f3b5785f4e25392bf6035298 Mon Sep 17 00:00:00 2001 From: Binod Adhikary Date: Mon, 7 Aug 2023 03:00:23 +0545 Subject: [PATCH 25/26] fix: improve spelling and grammar --- content/en/apps/tutorials/local-setup.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/en/apps/tutorials/local-setup.md b/content/en/apps/tutorials/local-setup.md index 3524dace0..28aacf453 100644 --- a/content/en/apps/tutorials/local-setup.md +++ b/content/en/apps/tutorials/local-setup.md @@ -28,7 +28,7 @@ This guide will only work with CHT 4.x instances. See the The *CHT Core Framework* makes it faster to build full-featured, scalable digital health apps by providing a foundation developers can build on. These apps can support most languages, are [Offline-First]({{< ref "core/overview/offline-first" >}}), and work on basic phones (via SMS), smartphones, tablets, and computers. -[*CHT Project Configurer*](https://github.com/medic/cht-conf) also known as ***cht-conf*** is command-line interface tool to manage and configure CHT apps. +[*CHT Project Configurer*](https://github.com/medic/cht-conf) also known as ***cht-conf*** is a command-line interface tool to manage and configure CHT apps. *Docker* is a tool designed to make it easier to create, deploy, and run applications by using containers. @@ -38,7 +38,7 @@ The *CHT Core Framework* makes it faster to build full-featured, scalable digita CHT app development can be done on Linux, macOS, or Windows (using the [Windows Subsystem for Linux (WSL2)](https://learn.microsoft.com/en-us/windows/wsl/install)). -CHT apps can can be built on your local system (with the necessary libraries installed and configured) or they can be built from within VS Code Dev Containers. +CHT apps can be built on your local system (with the necessary libraries installed and configured) or they can be built from within VS Code Dev Containers. Before you begin, ensure you have the following tools: @@ -119,7 +119,7 @@ You can confirm that the installation was successful by typing `cht` in your ter If you have trouble installing `cht-conf`, see the application's [GitHub repository](https://github.com/medic/cht-conf) for more information. -Using the terminal (or the WLS shell on Windows: _Start > wsl_), run the following commands from within your project directory (created above) to bootstrap your new CHT project: +Using the terminal (or the WSL shell on Windows: _Start > wsl_), run the following commands from within your project directory (created above) to bootstrap your new CHT project: ```shell cd ~/cht-project @@ -136,7 +136,7 @@ If you want to develop CHT apps with VS Code, you can use the `cht-app-ide` Dock [Install VS Code](https://code.visualstudio.com/) if you do not have it already. -Using the terminal (or the WLS shell on Windows: _Start > wsl_), run the following commands from within your project directory (created above) to download the `.devcontainer.json` config file, install the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers), and open the project directory in VSCode: +Using the terminal (or the WSL shell on Windows: _Start > wsl_), run the following commands from within your project directory (created above) to download the `.devcontainer.json` config file, install the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers), and open the project directory in VSCode: ```shell cd ~/cht-project @@ -277,11 +277,11 @@ The output of `add-local-ip-certs-to-docker.sh` looks like this: ```text cht_nginx_1 -If just container name is shown above, a fresh local-ip.medicmobile.org certificate was downloaded. +If just the container name is shown above, a fresh local-ip.medicmobile.org certificate was downloaded. ``` -The IP of your computer is used in the URL of the CHT instance now. For example if your IP is `192.168.68.40` then the CHT URL with a valid TLS certificate is `192-168-68-40.local-ip.medicmobile.org`. See the [local-ip.medicmobile.org](https://local-ip.medicmobile.org/) site to read more about these free to use certificates. +The IP of your computer is used in the URL of the CHT instance now. For example, if your IP is `192.168.68.40` then the CHT URL with a valid TLS certificate is `192-168-68-40.local-ip.medicmobile.org`. See the [local-ip.medicmobile.org](https://local-ip.medicmobile.org/) site to read more about these free-to-use certificates. When using `cht-conf` you can now drop the use of `--accept-self-signed-certs`. Further, update the URL to be based on your IP. Using the example IP above, this would be `--url=https://medic:password@192-168-68-40.local-ip.medicmobile.org`. As well, you can now use this URL to test with the CHT Android app. From 91cedb26abf1256dcaa3461b9c4435933a24f3c8 Mon Sep 17 00:00:00 2001 From: Kenn Sippell Date: Mon, 7 Aug 2023 01:42:44 -0700 Subject: [PATCH 26/26] chore: Report's subject ID cannot be set by `doc.patient_uuid` (#1015) A report's subject can only be defined via doc.fields.patient_uuid, never doc.patient_uuid. --- content/en/core/overview/db-schema.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/content/en/core/overview/db-schema.md b/content/en/core/overview/db-schema.md index 8d52c6aa9..00682c543 100644 --- a/content/en/core/overview/db-schema.md +++ b/content/en/core/overview/db-schema.md @@ -178,13 +178,10 @@ All reports: - Store the form's identifier in the `form` field - May have a `contact` property, which is a minified version of the report author's contact and its hierarchy (see above) -Reports can be about people or places. +Reports can and should be linked to a contact when possible. The report's associated contact (sometimes called the report's subject) can be either a person or place. The link between report and contact is established by defining one of the following properties within the report: -Reports about people should have one or more of: - - A patient shortcode, found at `doc.patient_id` or `doc.fields.patient_id` - - A patient record's `_id`, found at `doc.patient_uuid` or `doc.fields.patient_uuid`, as well as potientially in the same locations as the shortcode - -Reports about places should have a place's shortcode, found at `doc.place_id` or `doc.fields.place_id`. + 1. A person shortcode or uuid at `doc.fields.patient_id`, `doc.fields.patient_uuid`, or `doc.patient_id` + 2. A place shortcode or uuid at `doc.fields.place_id` or `doc.place_id`. Additionally, SMS reports: - Have an `sms_message` property which contains, among other things, the raw SMS