From 954e0cd865bfe7a30dfe4fcdeca521e45d635fc0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 07:15:19 +0000 Subject: [PATCH] Deployed d87a925 with MkDocs version: 1.6.0 --- .nojekyll | 0 404.html | 1280 +++ .../01_app_with_relational_db.png | Bin 0 -> 26907 bytes .../01_app_with_relational_db.puml | 13 + .../02_app_with_dynamodb.png | Bin 0 -> 28784 bytes .../02_app_with_dynamodb.puml | 13 + .../03_app_sftp_file_transfer.png | Bin 0 -> 23066 bytes .../03_app_sftp_file_transfer.puml | 13 + .../level_2_container/04_file_store_app.png | Bin 0 -> 36886 bytes .../level_2_container/04_file_store_app.puml | 16 + .../05_order_management_system.png | Bin 0 -> 41136 bytes .../05_order_management_system.puml | 16 + .../06_customer_management_system.png | Bin 0 -> 97201 bytes .../06_customer_management_system.puml | 26 + .../container/containers.png | Bin 0 -> 2565 bytes .../container/containers.puml | 48 + .../01_app_with_relational_db.png | Bin 0 -> 111076 bytes .../01_app_with_relational_db.puml | 45 + .../02_app_with_dynamodb.png | Bin 0 -> 110855 bytes .../02_app_with_dynamodb.puml | 45 + .../03_app_sftp_file_transfer.png | Bin 0 -> 171693 bytes .../03_app_sftp_file_transfer.puml | 50 + assets/_mkdocstrings.css | 119 + assets/images/favicon.png | Bin 0 -> 1870 bytes assets/javascripts/bundle.525ec568.min.js | 16 + assets/javascripts/bundle.525ec568.min.js.map | 7 + assets/javascripts/glightbox.min.js | 1 + assets/javascripts/lunr/min/lunr.ar.min.js | 1 + assets/javascripts/lunr/min/lunr.da.min.js | 18 + assets/javascripts/lunr/min/lunr.de.min.js | 18 + assets/javascripts/lunr/min/lunr.du.min.js | 18 + assets/javascripts/lunr/min/lunr.el.min.js | 1 + assets/javascripts/lunr/min/lunr.es.min.js | 18 + assets/javascripts/lunr/min/lunr.fi.min.js | 18 + assets/javascripts/lunr/min/lunr.fr.min.js | 18 + assets/javascripts/lunr/min/lunr.he.min.js | 1 + assets/javascripts/lunr/min/lunr.hi.min.js | 1 + assets/javascripts/lunr/min/lunr.hu.min.js | 18 + assets/javascripts/lunr/min/lunr.hy.min.js | 1 + assets/javascripts/lunr/min/lunr.it.min.js | 18 + assets/javascripts/lunr/min/lunr.ja.min.js | 1 + assets/javascripts/lunr/min/lunr.jp.min.js | 1 + assets/javascripts/lunr/min/lunr.kn.min.js | 1 + assets/javascripts/lunr/min/lunr.ko.min.js | 1 + assets/javascripts/lunr/min/lunr.multi.min.js | 1 + assets/javascripts/lunr/min/lunr.nl.min.js | 18 + assets/javascripts/lunr/min/lunr.no.min.js | 18 + assets/javascripts/lunr/min/lunr.pt.min.js | 18 + assets/javascripts/lunr/min/lunr.ro.min.js | 18 + assets/javascripts/lunr/min/lunr.ru.min.js | 18 + assets/javascripts/lunr/min/lunr.sa.min.js | 1 + .../lunr/min/lunr.stemmer.support.min.js | 1 + assets/javascripts/lunr/min/lunr.sv.min.js | 18 + assets/javascripts/lunr/min/lunr.ta.min.js | 1 + assets/javascripts/lunr/min/lunr.te.min.js | 1 + assets/javascripts/lunr/min/lunr.th.min.js | 1 + assets/javascripts/lunr/min/lunr.tr.min.js | 18 + assets/javascripts/lunr/min/lunr.vi.min.js | 1 + assets/javascripts/lunr/min/lunr.zh.min.js | 1 + assets/javascripts/lunr/tinyseg.js | 206 + assets/javascripts/lunr/wordcut.js | 6708 +++++++++++++ .../workers/search.6ce7567c.min.js | 42 + .../workers/search.6ce7567c.min.js.map | 7 + assets/stylesheets/glightbox.min.css | 1 + assets/stylesheets/main.8c3ca2c6.min.css | 1 + assets/stylesheets/main.8c3ca2c6.min.css.map | 1 + assets/stylesheets/palette.06af60db.min.css | 1 + .../stylesheets/palette.06af60db.min.css.map | 1 + configuration-options/index.html | 1767 ++++ development/index.html | 1424 +++ features/index.html | 1545 +++ .../index.html | 1550 +++ .../index.html | 1913 ++++ .../index.html | 1967 ++++ .../testing-asynchronous-systems/index.html | 2095 ++++ .../testing-cronjobs-and-scripts/index.html | 1319 +++ getting-started/testing-simple-app/index.html | 1638 +++ guides/creating-app-facade/index.html | 1319 +++ guides/creating-new-testcontainers/index.html | 1675 ++++ guides/debugging-testcontainers/index.html | 1612 +++ guides/exporting-test-coverage/index.html | 1435 +++ .../index.html | 1407 +++ guides/improving-test-performance/index.html | 1319 +++ guides/index.html | 1370 +++ guides/managing-test-isolation/index.html | 1385 +++ guides/parallelizing-tests/index.html | 1471 +++ guides/ports-and-adapters/index.html | 1319 +++ .../index.html | 1319 +++ .../index.html | 1635 +++ guides/testing-databases/index.html | 1662 +++ guides/testing-repositories/index.html | 2012 ++++ ...ainer-startup-message-debugging-vscode.png | Bin 0 -> 353866 bytes images/httpbin-container-logs.png | Bin 0 -> 281285 bytes ...t-with-testcontainers-logs-failed-test.png | Bin 0 -> 531663 bytes ...t-with-testcontainers-logs-passed-test.png | Bin 0 -> 499949 bytes ...-repositories-with-the-same-test-suite.png | Bin 0 -> 506231 bytes images/web-container-failed-healthcheck.png | Bin 0 -> 290660 bytes included-testcontainers/index.html | 1685 ++++ index.html | 1486 +++ installation/index.html | 1397 +++ objects.inv | Bin 0 -> 3963 bytes quickstart/index.html | 1389 +++ reference/assertions/index.html | 1923 ++++ reference/async-probes/index.html | 1822 ++++ reference/clients/index.html | 2999 ++++++ reference/containers/index.html | 8875 +++++++++++++++++ reference/fixtures/index.html | 7927 +++++++++++++++ reference/index.html | 7815 +++++++++++++++ reference/utils/index.html | 2213 ++++ resources-and-acknowledgements/index.html | 1386 +++ search/search_index.json | 1 + sitemap.xml | 183 + sitemap.xml.gz | Bin 0 -> 644 bytes troubleshooting/index.html | 1391 +++ 114 files changed, 87613 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 architecture/c4/level_2_container/01_app_with_relational_db.png create mode 100644 architecture/c4/level_2_container/01_app_with_relational_db.puml create mode 100644 architecture/c4/level_2_container/02_app_with_dynamodb.png create mode 100644 architecture/c4/level_2_container/02_app_with_dynamodb.puml create mode 100644 architecture/c4/level_2_container/03_app_sftp_file_transfer.png create mode 100644 architecture/c4/level_2_container/03_app_sftp_file_transfer.puml create mode 100644 architecture/c4/level_2_container/04_file_store_app.png create mode 100644 architecture/c4/level_2_container/04_file_store_app.puml create mode 100644 architecture/c4/level_2_container/05_order_management_system.png create mode 100644 architecture/c4/level_2_container/05_order_management_system.puml create mode 100644 architecture/c4/level_2_container/06_customer_management_system.png create mode 100644 architecture/c4/level_2_container/06_customer_management_system.puml create mode 100644 architecture/c4/level_2_container/container/containers.png create mode 100644 architecture/c4/level_2_container/container/containers.puml create mode 100644 architecture/c4/level_3_component/01_app_with_relational_db.png create mode 100644 architecture/c4/level_3_component/01_app_with_relational_db.puml create mode 100644 architecture/c4/level_3_component/02_app_with_dynamodb.png create mode 100644 architecture/c4/level_3_component/02_app_with_dynamodb.puml create mode 100644 architecture/c4/level_3_component/03_app_sftp_file_transfer.png create mode 100644 architecture/c4/level_3_component/03_app_sftp_file_transfer.puml create mode 100644 assets/_mkdocstrings.css create mode 100644 assets/images/favicon.png create mode 100644 assets/javascripts/bundle.525ec568.min.js create mode 100644 assets/javascripts/bundle.525ec568.min.js.map create mode 100644 assets/javascripts/glightbox.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 assets/javascripts/lunr/min/lunr.el.min.js create mode 100644 assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.he.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hy.min.js create mode 100644 assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 assets/javascripts/lunr/min/lunr.kn.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sa.min.js create mode 100644 assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 assets/javascripts/lunr/min/lunr.te.min.js create mode 100644 assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 assets/javascripts/lunr/tinyseg.js create mode 100644 assets/javascripts/lunr/wordcut.js create mode 100644 assets/javascripts/workers/search.6ce7567c.min.js create mode 100644 assets/javascripts/workers/search.6ce7567c.min.js.map create mode 100644 assets/stylesheets/glightbox.min.css create mode 100644 assets/stylesheets/main.8c3ca2c6.min.css create mode 100644 assets/stylesheets/main.8c3ca2c6.min.css.map create mode 100644 assets/stylesheets/palette.06af60db.min.css create mode 100644 assets/stylesheets/palette.06af60db.min.css.map create mode 100644 configuration-options/index.html create mode 100644 development/index.html create mode 100644 features/index.html create mode 100644 getting-started/applying-e2e-tests-with-testcontainers/index.html create mode 100644 getting-started/testing-app-with-backing-services/index.html create mode 100644 getting-started/testing-app-with-collaborator-services/index.html create mode 100644 getting-started/testing-asynchronous-systems/index.html create mode 100644 getting-started/testing-cronjobs-and-scripts/index.html create mode 100644 getting-started/testing-simple-app/index.html create mode 100644 guides/creating-app-facade/index.html create mode 100644 guides/creating-new-testcontainers/index.html create mode 100644 guides/debugging-testcontainers/index.html create mode 100644 guides/exporting-test-coverage/index.html create mode 100644 guides/forward-container-logs-to-pytest/index.html create mode 100644 guides/improving-test-performance/index.html create mode 100644 guides/index.html create mode 100644 guides/managing-test-isolation/index.html create mode 100644 guides/parallelizing-tests/index.html create mode 100644 guides/ports-and-adapters/index.html create mode 100644 guides/running-testcontainer-tests-in-ci-cd/index.html create mode 100644 guides/testing-apps-built-with-other-frameworks/index.html create mode 100644 guides/testing-databases/index.html create mode 100644 guides/testing-repositories/index.html create mode 100644 images/container-startup-message-debugging-vscode.png create mode 100644 images/httpbin-container-logs.png create mode 100644 images/pytest-with-testcontainers-logs-failed-test.png create mode 100644 images/pytest-with-testcontainers-logs-passed-test.png create mode 100644 images/testing-multiple-repositories-with-the-same-test-suite.png create mode 100644 images/web-container-failed-healthcheck.png create mode 100644 included-testcontainers/index.html create mode 100644 index.html create mode 100644 installation/index.html create mode 100644 objects.inv create mode 100644 quickstart/index.html create mode 100644 reference/assertions/index.html create mode 100644 reference/async-probes/index.html create mode 100644 reference/clients/index.html create mode 100644 reference/containers/index.html create mode 100644 reference/fixtures/index.html create mode 100644 reference/index.html create mode 100644 reference/utils/index.html create mode 100644 resources-and-acknowledgements/index.html create mode 100644 search/search_index.json create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz create mode 100644 troubleshooting/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..ee1fba16 --- /dev/null +++ b/404.html @@ -0,0 +1,1280 @@ + + + +
+ + + + + + + + + + + + + + + + +O9c{s5zxM~KFPZ_nyQoMdj6_vWCcK`nT|U>Us^j<#XzD6T%-8qZ zyEtTfE>#c3vDliwBu#wY{Zv`nrFX7lSOqbAKFGhXv9GF+wz1;icK}>#e|KvWEo=cw zVfRcX-X*}<>))C`8*GRwn0V(-vL&Wmq3%{{9$7lDYjUWB12jqEnoyr8E+!^ye% z^SuSSnKYfKySzf?n1@NEMfwhJ#Wv0aD35M|xZhSkkZz5Ojit}t_)%gv+^|2d*4Z$3 zANtYFXt=4f41Z}k3DykUcAFN!<>zBVnsj{@o04BnT@ZTT0B6%;{)yZcmLRcy7LxVw zRAnCtvP#Q#9UWHttN~aaw6zWO(~_{k5+z~$3p}lTxSP)0PJ~d(VP4)dH8{0zkBuGX z3)u9jKv4AbNI}4SxG=^!8)cGJ`j(NkDDDMO89ypLAq-W|pg1{jVOuH^)1#fbq3tAe zqtIu;aQLl8%-QYXzzGkGnnlORZj
@y@tUK~ul>eNgt1E$ zN7ZE10`WOhXn+|Nv)7Dcl?E#VTXPVdKx);}wxN%2f5Lqe% wfMPyeKHo=D`uCHV1d*I#>@z|8A0fr-9BA;mvGgRln54NSwxF<{ZQub!ueB zZXCulLlqE97&ZyCH8E!CA;WCj_@Z!Rxy*(}0}xSz)F~9fc8#?4EfyXZ_9{(GwfcHF z3f1IgJxTL>0Il^i#*+t`(4C~ykh>i4)S6|k{lP$X@rxhsyjF?BVvEBh=aBQ))LaKa z>u3Btz;4dv2OT~Xosd+ 0)H&reW|(~1xm!qB@+@g zvvh>WGWi_pY*uVM3d2LaDa{pMY$KcK5C4Acu)bWRO`!&6{Ui0Q?u|GL-&@EP`F%n6 z$nMi`A9)l7fvld>c-p8|v?D8|Bq3R&E%5RKkF;|i*Zayh7aPCEU=r10ZR; vLjuong-fsuJFkrqfCC>fCVLp5)t821sWxJ&0! zC?no4y~4#cT=nfYdq2>EdUf*b Xg!#CK6Bi8CQXeICV)zBSnVbFo*e~ z$EZbgJH+IP=YmPDb6@)pe$(w<}dI=+G5S$sK+2@EV0>!R4-Adk({V zaS!S#DtHc~g!!=2@+eBjUHdI&wfQG|C)3Nrd ovG_3#b_wp!!xq#K}C){RTqyl4CUo*4n{y zE_?Wp8A3xsiU2V+F=#%tiiMYTh<)T5sbSvbYF^ZOIGMZJc#oA>Tu){Bfofpm?2kdx z+RkphfNAWpi-uMHQSmH~49_!oEq^F++p^y|# zIjw-V(xA;V_-;XmO@}nkU9ZFRxvtQA{CabXH)GIFJrss0Z=E_78VG+2{9rFHA#igv z^SimO-SDc;d*Mkm{<|sjRFVhW$UNF$LO`w0WJOnutnwLGu2jW}-OkI&KqyNUCseSW zB9Lor>D#=BYd+$@=os*vb}Z(R!6%uvE<~wKg4k(Vo$;M^P3eq36Fw?Cg@kC+`u(AC zf4VZ#3~ho~>d+f2RSQEAjnsaH8LEc~oi1Ry9RIVcqJfU!4>% z+xX43)jA6cSw4;kD7N^V8O!f%)q{Q7d@oZYTtmJkrL_|oNK__z`DT8gkkiGeg=Asl zU4NS%s03yzUoxX%u4Y!)A@um*G|pGy!`B(c Z=4MCJei>kiCMkK8QfbLkGyGnn*2gs50uyVlmpUe}>1t2fzRV^f~ zim@ TB@l(F$z)L`?Zf-yxH+TpqZ-Yo z e+f=g{lq&^k&NIh5S{zH7X(@7x0YHBNTq^TN1 zKSw;&K1fhQiC@L7Hl(MOwlHcsTCH&1(kIbrhC=6 =fje;t0|%^UW1no`{;c)kzHb; fI^HjrvDUl_f zz`x78P^)QWq~Xah;H?{YCnDMU1{E_wok7<1{&}QYi3UCn;rH=2uX1+jS|1LM%t}SY zE4f@3xt-#g&L0kO7wz{A`AC9R)n5r;)I32$l5ZJA5_vTQ{ NZt@V-exVGs|EV2- zLR2j(RS~}jSeGOIf|TTL*B@ 7esv}5^|P|gzg@mYl?!F z_IP=CkCFn3GVcSH+Cd#f0Zf!X54y_!pZWSI8SejH=&?o3w2DQcq_S4^0* aBv36=*uQ>dV)IXpg^_%-+CzCk0>=JB0T zFE_EPb1QO85y$KO@ft`fT}TdBb$Loo=u0BKLff$@`N#)8F6GH&fClb+YZR9^v}d&? z&64#ja!Hj$Vwa#*FvxgkGvL==lh{UG9;Io(qANj?bj4){SF1)3e|T9bLjv0Ujxosv z0xfTT?P)^9Y@2Lm%8Rzte=s2rn#1gvwj7&y`+LdzId!d4&eo1>tRyo`7xjj;k(bzA zDOZ~0@$dl;efAwInm+NGfrJd71&e$jNwmWIcMXLM8*Lduyk&_4^{ldf(@OwbvfKrA zZar(lfH2yY+97LH4Lz)9+1&j2ACjCXu~llr#unScH`oAR1J%kKxzurre&;N0^aA9C zxlau8gmrH5N}fJoR<*HNkIh5Iv`l@X>IY~OL;(v1BZvwh%NS#C(X$gSG{oDHD@HO4 zcYx?FyZff-uP2yb2 DMtLOZh ^MX;E^n?cC-omcX x@J4rE-09aioMmBS zgQGiKvv9sHBY8m (nmffhDz7C~tjFT!u*)5Q5rN|%HtYF$5d8rx6V%6@a`_=0Fn~+6 z0m_B+xjQUH6-UqUUn>tWv IixzT~t H %|y;Qatxf6d1tv|g}@sae!K&o`^C9c!xwR539RQJhUhf` z?+W$)8$TXVbw)Z01#{Ap*!Ajt)X{jI+mJO ^p+GM{ z2>P77w>g!a&=TMUBVElQteXHNlWyntg;M%0>XVsxP_%A(%ynN+I w zf^VO#eD3-rYJndFwUf%xB)9ea29FO$`a5ctn`Q^E{&($u9b|QF;1@Wb%$2k{V1}1E zm(7zAVYC$Qw<&AHYak;RAP5GWJ2Yc3uRQVacBPqFTdxGQm^+Uy*w?4dlWpHWuW0?D zm}|<7cN`V1C|nNPjJF86oUZ)zCG~a1lE!gS>AZDF_&k2G9FlQ?A)G64ra*d@BSNRZ zkaA_Jo!v8PaWgh4<;fS%cVim@=TmC#aKwgDok;*Y+vghcN@4v6Mbj9+IZ|jT^!VMW zxX-9TCrr>Xz{y!Ht2yknOra}P=X2QN%(%Y%BuBgDkE8b$kI3UW0KzS|?d2rEA;TaF z%@fem;1Vz_DbQ~;XlHX`KS3Gqnx&*(y7tnLSE_$U*BdhA@|k-Ah~wAr-jvue6hr|T zy9i|-H VO~#`zuTfY zwYfxX>weUVA{~DVGSE~NAB?X#;No`FX~QN_giwQ;rjO>pXreY 12TC%-3H^z;RAzX3+r2`~nG%ZYAZ7i0uR60OHHtxZs-3L4zQNIQ5|NTXo2DjF z5x{nm$txpXQ!|X4r4*LS F>LeAV8A0b6sH1O;VhU^oHZge3@k{N-%Q?G%B`s}BCL(NcT9N=O7`8_=QScKq z1N?}!K X@T326M%~&-5 zZErq3U-`84iQBe4w=`p|sq0OG%|uG5=q;fAFA)9)TC{92(!A*qTMCZGvZIbs4}G1e zNN4Y;n)}8rSW&x}T-CviKwNg9@~f#-@VyMl=X|h3+4{qRFE(z!=t-c;TSQj= R{gg!03#b_FaA=6kP{DtfZlm449_5io)> z9E10@z$$`Y {0Ag;?$3%Rl=7MjlUaQQQCwnc2+o4^fzZ2S_c<-RNf z_g^O+A$)KAd2LljvCwYLk|uqMYP|ahZd$e= JwpF!IE?nS2=uvtp z;0>~i0n0}M{_=KtzT$LJOXrv~W2|geZm1U-(3ecQ(ttYz%1EJk$}GKq9u1HvZfhN? z`uQ#6<9;C=jr4*Wj!PVI&2k&vt)YsZID7NO;5r?^6FdHk=8p>BrqhU445ntm!Ndj` zqm|zF^D3f2J}erfD$V=Q3r9?MB*o_?I@}D~IW|eoXa*uPY?(I5h24lpX{`9mi@TuW zV4^YZmo@ !xgv#grX-udce{c})Cf61 8JlcZH&C?VB lfytj1Bmf2j>w`Eveo~5 zfc$j_KmPd3^of3&4P`^5vrx>xPsL%N(^xvf98=~5qFVr>kMX!xAWYE!Ej@fZ2>-`p z`|rcHm6tK~hZhe(NDhAQjzIQ;+I1ZLIBz}Mf7Uah1gMv|3vAf-zZ({CJ#TqzfXVzz zgZ-!Y0I+ $qUf03$Nm-+uzLjgEw0AIhx_YY+M@0U7jz=AKI z{qnS6!BOnouf>WMsrzUAlxSN&*&m%G-MHJ)T>pECN5<0SDVwH#!_4~^1Ln8oA?p9j zyG_L}ZK+?2c&neuEK^#BSsRS -AycwY+UN59W+BmtFv@m iHbg6h! z+m!OjXlYHKXWq(qE00%m5WgL8vEIL44%^XNU6%O~`v>r%KM?QciWWAwNGVP}11QzZ zV%`>nRBfY^M3KJFif{E+{)Jg^1`y+K03BiJfuuaeM^o3a{`!ZTs_7#a3E1pHO5aTX z8FVs!3{)}RcM|3{bUdY)kDvvjIRVkmO*OlBs)iZb%fpNsB267M@{G%&C)i3!{@xIE zd+^u%Sv+5R^ ^~q$#a3XPy*%i;k2@j NSjco06^#i0(-j5HQkij<4qMKIrf*fbEo~%kJl*EtAVF@eV>IK%}nzW zkJ}TC>h%$x_v{Tf!8fHz18Ny^d=2lE_4~x`B&;KiH#Y&{HjwawdWS?h>z51>dhf%F zILQFu93m|#=8jm#>bq$-<6-TkP1bq?fZ9NtOc^$(^$~b_A0|CC*)HY&zeQj}3R%m9 zrW^qY^^*jhhNMWSbAD(!0Sned?hIE#_soj5&HBa7We+(ME^c4kSS3npak7=k^xLzL z {7Kp BZ77#tf%?iIH;#|ip%%GR7ebqLo9 zGByp6VhIUly-hm?KIpkrf;!qk;@J&_oK|t?UW~1HcD`CXKWcc^IFH- XiJkXJI;j+W|~&VFF%F38Jn#(I;-lBnrU* zZ?~(C@edIxGxXC!Z0rGrGHnfZsG)mm)Z2U&k1mu3 tn+lvZmhMQ>dlM7KE9%xhM*xf>2^L&}WWn0NZA0TjkrN zjWEdCd@5LP7({(`y%abd9X|4fUc$Jh>IyK4w>=N8@3VW(qMaN+N-4#{?m`7-RfYld z+XKvhx28&%pPNLK8}5Gi{meQ `f0%wCqPNbOL|@s7C>UzcqH0c zQdd%|UN$KuA^LlDV&$MF6)ch+kVbvjVdi|)v~kET-&MRp$y9cUE$A$%i2InuG|5$Q zQp}4A!HqvloY+y@#nG2AIW&}fD%hXzE%#17S}UNXWyf9Rwn+mwmj^juQ-$g5QoI9> zXXW_x8+An_pK};0M7AX4;NXM^Hw0-}L>_zva(qZ##ium7tE|FqFxFw9`fAU8pXtzZ z`Q0&X`=wP@mzfv=W7io#-2=rd xkQN~3<6 zJdv*WEOoi409Gkd8J{&b%LT0R6X9-V Jm07581bU_5XS?BTL3g+KkK@9WU>ngB>A3F4AI9iHbRUqEW?G_#Gl}VM$ zc8#hZyt7ylgfYU{U_7_A>ad5fN4FLGH|SmOzh~v1N^YlAW3z-b!o@XkD#I~9fUI19 zt>{M2ciP(8*lscF?9-A{ |>@_etP`WT-Ff#5n#8Bc8V)`Gf+Pk)OXNo&v%t=E#QpO@OY zZ^y%1X6o^OY_YN)KGS-Id;1-|22*Qu##2bY|8|Z+cK)19b(y%MThu1yywy-1+{V@O zPw$*(jDc6#DT(jx-kkS!mGjK6ggZI2?--u6XwAvagsn%(;$$~yRlZOq<#?06JRGni zdv>oPqFEua*v3Gbmm`aMl(-_US(&hu=|Xk?)}aOZ5``*w#?v2$289r}z!qM0%>;we z)&$pmC4DZcSH9!VDBw8;bLy?+%Lb`W7Zy?}P&VRmy|BFZ$mL_vl;<{^kWa@CptlZZ zB@H2&(2P?EmPm@Oc#-w6M usdM2i0R(omSzjQ~(BAd8Dbh zLat1)%se%~PE*y2X$O4x15IhQC@nPR-;DzpB*Xvr|M>Z6_P(TWjme`h;8%(;G*$If J8kC+y{SUQwwSNEr literal 0 HcmV?d00001 diff --git a/architecture/c4/level_2_container/01_app_with_relational_db.puml b/architecture/c4/level_2_container/01_app_with_relational_db.puml new file mode 100644 index 00000000..5e882599 --- /dev/null +++ b/architecture/c4/level_2_container/01_app_with_relational_db.puml @@ -0,0 +1,13 @@ +@startuml +!include ./container/containers.puml + +skinparam dpi 120 + +title Container Diagram - Application with Relational Database + +appContainer() +relationalDbContainer() + +Rel_R(app, relationalDb, "Reads from and writes to", "SQLAlchemy") + +@enduml diff --git a/architecture/c4/level_2_container/02_app_with_dynamodb.png b/architecture/c4/level_2_container/02_app_with_dynamodb.png new file mode 100644 index 0000000000000000000000000000000000000000..937819e2aec9d27a1ac7704355c73a866698f252 GIT binary patch literal 28784 zcmb@tbx>SU^DT *Ntv=DJ$};FE#3)cuQ0Q{9lIl=UFsZ=xArcJm?#*(44*X+u zm(q1Nb8_~vx3F}FlCf~Ka5ZtaFsC&2p|o~)cXs1vWp%bUadh`^uzzpn ;B*SP|$ye%Q`VIaLeSy4cODMo(ZrPP%>ph$dVJ_T0CxAQ529{25ylJXls;k zdqeLP3Ot`Nu~EQ`z>v~ed$pw7;55td>$}HShliw!Aw4@crYUssp1OBtP&qsEUaw;D zzyEW&@j2Au_gnZ4GB4zSW~lmNSo2~!xqO@n>{@jdHqT9q-?f<1zjjvBd%+j_&L?3T z-FNfhs805u+0nM((GuSF?0g6n4x}ERCnxyLeSkaOl_flwGb!5oO0*~-<%}O()A 7ffvg54?u2<38t1hYzCL?7Meexy&ee+jIdy5v@dE^EN~bv^a&MoObUa(ZD`XW* z@j_&nZml|?`DrG7t5CyN$n+6rJu8ngICX#QJ|tLhKe3Ew|Bc&^3$;({tCu}A0^Fm0 zVKZl`oj+Zz?7F~_j=^MX=*tV2R>P&wNHP>k68nY|Qx_M4gJ1mNjM|}s6rfh5=9j+N zzFnvA5 KnA z2x7f=mx8ruq)eOce;USVlt-H6DrYJk@Lm46%BhmAY4EzP*$L1>_rmsP7oeV%I50+w zCvsNImQkO5-z2?=I*KkngWCtu^HZZ0OR9%$B~^gf!rtVU50#>iW7Dd`-(yE;l}IW| z>qSp%vs}P2HlvF-U`c0% bj7395t%*fVMQA}SS+^t~O#HJK zC)fU2j_?^fT#Z_+04%2^iz^(BHCHebfgk;*^fPI+IHSf}{QN3Oo6HDe;`$AbPxiXr zOw~^*1&a18GWTkes(5QfG^;a@C6-QD)$`?VW9IndH7h>ReYMskBbWSsT;+v=#GqIu zQ=BKuQn!>azK?Kw)_b4&m|sjZg{kz5P)Z~d-!5$HTlGAW1ifB0c7$51;Y=9Tl%U^H zwz#HlB{r?{z+6U(jRRKb^idFb#kw-EJ!fMj*8_CLuKf> z4_4KWpX&^iR}V5EHIvE!LEg-Y^5;Nnbh8ytTc>OdAK(p(tMTVVnPB4rl_clnx^F2K zd+E*mc7M*YUcsEft+jM%+v$|S?S8eNV7CXRNwuoi21+@LWG~iXC*F@_dgMO&ET{1P z1+J7Sf}@_A5uP-WiosZ0($Qrr(hNh16?9Ruj1;cvPS^Vp%dF^zvfF(R^=K)YiE?-<1#lR=x|i*7?nD`95f z&CA8Z8i$W;!en5e50;Z$-9feB(lb)+f8p>s;m~kT@c8icphFRR|A=OW)E4d5U_>z> z_yZU{6r2)bVqMXWoku4lKyGW>RdZ<5u9%Fhn!c1IYEIluh#MB0{2@5~B~0lzb)L~y z{6{=!#TNSIU^q>$V9ZcBG&?B!a45E BbN7&Ojk2^ciueAGG7)E01gr(P{J zIwy+(=AhmARHPbP1ZDW{jf8wMOxK&}HZ57vnS(s#eATpRTTSXjbal}VjIXwDVP-2N zsWsk+R>{Bpzydvc9q%SrApnxGj6o!H@BxqaWn?#_!%H`PWWbC?=}sf|#|ySUw=g(| z?mt(?i9)5H*YJIpmsSvs FS|O~`{v8#~A%lqTW+>8k4YE9~?%=A6 zBq~1ya{_)l* aC&pI7gEM`OOF-q)pBbK8^e!|I>2|bzf_se3`25 zju1S=umGiguX$MLV_T%1BJ99XwMl*V1cv5@8J*J{fM~XGf2S55Z=ewlW*1~3557Kd z@74QZto%%a5&W_LPl~}QNpRr=9Ii3~G#j_(sdRqQt3aNMt{)6WY$Q~zB^D^%| %t0w*jld`^kY*X8ZsTzA(>bFsUV+KYyg+#PJ-7nj ztS``bE)=JN5$-fLeJMWB+LDIlp}YcKGEeJ0qU5He794c~BLO@YAGS~}5CK%jT1CUG z>l8w7(mdiDkIC(pgyz-5NCc#)u35b+-%+8r`E=k!u>{e9*Dv?po+kNudz12tfD OU}Y(nePWrSv=g7-!*C(zh2Ebb>*II8yt8#!{rFCT^UxCs(_wx&dNp^ zu+A!cd4?FSUw)%E_fq2y=nAX)%D;+gldp8bt}9FAT?GsBsz=Je;^`*UyJ7JOCX(m2 z^CO1*{8M_jm`!<=4bs9rp_{hzhVMBTMbC!khjB_B4iI{wS%acIP2Tpq096+)P$;`1 zDy{KkV`WiMxIt4W7hOE8=@PPETgLhMz^&)5JVsn0 xKOL)SD@60RHdQ zxi%6A6%M%Ctir-4KmxA1^{ANNWBtAQDXyyz3 cSyK(l>g&_u0)85iCx_r z8XJiwk$t 7`47z<@?|am3@921by1%^Ko6OCpp{KW= z%n>3YA{z9*#kX6iCi`GM9EDBuh3-^XUO{2fedzjV0R#fYUYy#|3SsHg7)lu!w0Vwu z7l_pQT<$`VAtNK>s%vR+Ne+!9(X|bo@ObZDdWh(}Ua7o>5&K;X5X92?Mm)xDkR+z0 zSkfE#`}=!%G_vQ6M_5)$D<~;7eySRjU2~!Mj&VrbLG~+!g(C;&irjDz(&l;cuzuSq z!y-Dc(0RjUHtPqv-3X#sy8G4jq_7>`hDnPCtEvVfV2xP*#eQZ+D};W3f8X``*cHFr z&H8}5eIO8#K5!;BxsyJ*@T`9wGO*_Kw2oB4&k=b2-H43eT{c!us}vG~NWS>P0z^C% z{HW`3yJ>LF nvbKTYw|X+zleYCreos&sJCD>z>w5`&o2`e3?v z5J$-D_2rqvax6_GsPm$K4Y4cMspA^|51YesgN{+a_2lc*B*XcVRqo00aZ%bWds0qB zI)|0|GgNNSOUuO-S>G50@Cv8zEbDyN4DBH>)2#2u$M(8=m_k?J7Pq}`QC|I!pANvh zEicM7N(O{xB@wROHLW({DVqbp@ zo*$m7e~tPvl8L@UH9SsLON6n~{-G9JRW#k~3#N z?(oo7($2v_3wA{Q@oqbQPE_2%fd#U+yGyLHilOXOl*7o%%9EoS{8)hSC7=J!K``)% z7cnI{`FW-5nIt?iB7$)$8>*$irXnQ;f1588os~m5`P(-_l{DkwqD&9?`sUi&1WcQW zF%O4Ts!DApw744o9j4jafY-+jFZQR!`S}#LwvlCjGTW&10R!07?f1pS#S!Q2?Sf$o zv$KS~2Apc8Wfc|T{I)^@Qf_V>1zSBtDpyPsxgsjb+p~G*_+Fo=5LSJ*y<#8`)7f_R zD^DjBSRzr #LW76Sa)k*w_e-F^FxK%k#sv$n%T{Iyf@%4Gs=NLd9ve*Lr^6 z=B9D0GjJsQ^PxMcT5}Ao=zDOx^7DI~N9QGAxodfGSF^}>ho_)ieNX-A6@-K^Y{!JO z+E{z+bp0Q$4z4yAstxP}7sxWX9Ug{)o@8Q3^WudK+PxDeT~}h`;>g)e`%}A~cAx^9 zF@;bkAW{%i en>-ha#XvDy@U@ttU+>9!6FZZ zBI4RBD=U1xabyDI-kZ?;sN2YgBG09#jirjM8al&xgmG db}`V8Xu;aYV2l z7-jLgz#Md443a3MFz5Rb?N+2K-<+;JRyhTLAcB`;9IHewN+l&FFOOZX0#bKV@qztW z4wf#ZH;5I)*^~=x=O<1 XO$Ag2y|zFsgO40q%X 2m#hx8SJF2+$YjJ2ukT%@7!IUZ?yNGdQC& zRgH})$q|iS`Y2wosy-_(xuatqTyA$$c+{4bmm{m}#lPOgA29E4j-_+>&);rxF~=F^ z f6nU*zT4;U=zH`!*4S$FzTZFjG3RE0OiF-m>HA z&o5l6?tVzb-Yts+S%~N;KbEe@Y2|j}h1m&qn*@ zPM!C(tqNg<)p Ko2(_DsF0K#sGJa$GG1`r9&A#L=lt)!6fCyx{r^J z&esrRe!8v+BGVMZr^6y5lEWTzuD_6xlvHhSSZQ*Bo8_A*DJ@<3hKREJvb@kaSV7Vp zM%@;u!Ar7fBgkB4>VB8G@w9vP`f@fU-ki7{yNQOiQRqe};K}R@Wh+(2Pad)#Juu~1 z4!zk?h?P8G(x5u@!S~Agnh|!jl0Wm;0@1Y`8A0$os8r7PD+s~ os`D`247a^yr6a&%s%^^DWdf?-U6bOHcVIP_;7REi?d%fLfQs`Dc z_>^}pN$d<3i0p{>TPArTTsf+$T3Xk1L4W9?ZuSe~)sfH$e0hx7)R2A}G`z8mvWCX( zg^gB@WSTRPZkKXLJ}TP9xN71Nf4GZBqgmlql#|P^=W$wZU_d83@dIKcn@m<5@sfUL zESufFW}L8) eIp zdRMxFL`uz|(ipn8RG{>dAh4+T%%VuTM6V)G=MpjY6Uj%|9#Ht?WBSTOZ%d^$wk)?J zLu4iY{7zDt{#ZuIE9n5H5)lUDt;?)tSE^Wx;P(6t7NY(QR_#c45>ye=6R>o{Y*J|) zRv6);h}4djHz&~p(1J5i26jafp WaoR09v#B4vnI|1Lm~(KF#7Ap|b)AvO;B4r0 z-I33n2AdSPWGI_-Vux-F>b25^@Fl@v5%O#Q4nc? `KgAK-3otHXu z84{Smr#7{Wse4MPtq)Qt9b16)0dYL|#`*cdV|Ht^ClvPTeY^^vLqWveFMJYvnK(0V z8D5=LDo7me=jx=I55|kNCeROeA>-^1QuC8}VxjgJlRY#tajNES-`&O`Y*u_>2vP?A z#k+yqk;PH3*3(6ud39Uo)5Qw7=^v1(x6Yc&Bt>2>;>iwdoF7USzuBMfV^>Z?t?6=d zy5`V90_C!U>1YT`=*U`)U5Fi|W2dOJ)?hIO&o@Ic#ZNH6 hjwb~8HD5au*v)n6pV<4{dwb|u=9iw_EC5Y z9S%R)G(bJH5|5|;^_(_*PVCI&J7mGEK kA~Ux>J^vIA9|FSuVI1YJmAbk;dTO^)=;%)j;4<<*;z2imLx36H>5I(#1U>Fid> zN1n{>?B66}8wCod2%sdq>sbvI^r?`S@NaZnA_zQ8nWq$@AD0_!lEyzO0hO3q*aiSp zxUEz+^mRD%V%jnTj#S~?RSp|WMbAD8zJDM0Uekk_)@Isltc99}tNR^j#u%9pn{}He zUhq$>lmGVN+;=4CgI;BrpkNFigk^o5>W}(Wp2VMyNI)dSBH!(dF}@MQ1-}oc$>fN} zf0I|+4B{CmF%Ok-U-vuffC{k8#&9T+R#u@vu29L tUCtYssSy!}0=%`aM7PoIwM< z4>+;h=^;5GXFFy s&^ol|Njv~H1{xfzd5iYJ|$a~$@@zz#1{4>}ndtVsBxPtV9u%YyFn{)~u z0=K8Ti~m^MoD9a2z+IlAgZz`g81|24zh4jlT746?h;}|* IHSv6olk<68nhcEKA+it~^EjHHqRZKhSjV}OW^0*0 zNCT>BJStJ2I)@TP+IR2NvJz=zdL8weovC7jpP%+bN-^SwM8K&%>!0hS<`shrk(4 5}Zjne2;_1W!nsMgJYc Y&j9}l>V;= zeLJ}al&P&yC26fDjb8qwawgbKBxf=U+s!k_NN*n^A)})gW9{=- i~#ABO(BEy&vLj>Fqt6n;~X^eEjJK!$Q=;(qewKBjaP%+;6Bz z!!L1PMTC*T0zE)93MzixpRk|sh4yj`<9$-2fn}`+BHS|IPlRCi3;D8o$6du~FPbn! za&KdBp4e5ceC(~*^Xy&S5czgzrl4w; noPl`$3ZN5>SeuFDadsxfV0M`hAP69&k%)xsqhHxL=df8#v$38& zC>_9pR<24_BqxI9adC0`vC{_7gL`c6{6i}yf{mUa1n*PEUFr`VANd#N=f9#T J C+cZ0; z#is*C@4h4dV2-rT)GiK2mk<|sy<(+C+HV0f#1nI&xClRAX?TnfWD1W<#L)STyrZR6 zk9uHO_=|sg+s--_ayJ&;ZK0tl;n+>aw&ExPuCPy)54OW4n_HdhGI@FxK4ah>Q2qpH zpT*7qfevqgQNSfafRph==}e3PN{fsxMGmVsULhtSdXw1#1Y}qkCLLP|*-!a=*#M~4 z$rcVEj#OQNb-#i9I`I65tk|6SgmVbQy=~Of>c3UaT-QIKSwG9-c*b9Zb-p01CC>jg z;TM~j3R9&5(72jaP0LJV0j#(b93jqOir{YPhK4~t&RY`HXi+&SEwCyyIZhhXF7`mA zRtVDHaD6(r3KY+&&i8+I0E%wgRhMPc(u2M?i%C}j*VM3B0iGB^YP)7IB$kASTGAl9 zZ(gE00g+zI`b}RX<{oYt(Ro>;l2H#b6~O)NV8O0BJ;Ax=e+W`HnfMJ1hu!O2bi@;0 z-!l*Mt}O7>!umHHXNA^x?WrTomx-}4%}I4?goL1Y=x@y^*Dbu^k6L>V9!&=h2 rn*?-Cwcv7spuv*(p_11mN9EuSO9cg2`K7&JRWyMQ;vwxS|Vktz`07wJrH zmN?FoBIK1|p;BG~6p5G31+q%;ZC&$b4m2EWa_;RsoWc~N*%M!9O|LyJu`%}=Tu%J# ztY(_K(fz27eoZM8mNx-F$O=Jr$1|ZHuFf%o?)oU6_hmQ-!zCzgZr&n+9?6Yigv)AF zhJ?SsggA-n>Vs)eP*Fu*?zaE(f4{@7*UkdH&Nq961=$9?FUNT(eD|p?o0$L_6$yLx ztQ?L!4xl83i~1;tYrAVG|8Ek!|JRt}|HFYcg$v6Y3!7Whi}HRj@Rw%nn2R55rG1r{ zdZ+iEKs+UP7(+Ot@mzH`tK;A;4t3I?gZz`TL%Z0zuIKhzt#0X`hd=uZDMUNTo0+?! zrCZIbS+pa5TXhoJQY5aQkHv)7QWS}#ch%rz?+*08AxTL IIHmpunr|A;4%bt@m0 zO=*PDc|ZC?_p24Ylt?}A?oS0s&L`4GFu@e&cx<3|U?pQpo_8U$;ve^q3D(1x!FhL% zI~fF_y#>ScyuZ^2ru3<5YNCoi`I`A$ZK^7TAnB9c26{6y;%M>P8jw~HBtH#wx@&s( zr>{y(4V1ms%UKj*i8A%h*w`F#3UeEU{NwQnr DSOK6vFx*$rw#n8({+Cfu{zk#|pb^3G; zl-dNB@%<^myO&HEg5#A0e ek|RYoWN2#AT|nyR9%Vfq$VYwoOWu&SmC=pTR_Y(z6dajNmrQ?1cU2 znKRMSIZy6#`;( @}`uRlLc-?@iQ*U`+q1m0LsSS?R5^5 z_e;-H&~E-^wNxUkU8>y>{Kbl5OfOLI(OkT|uIl#9Uk$3e5Zce;zOHgW<}yc@@rebZ z@tL;cPS m{wY}Gu{}(Vf`TFwtGCfncM-sT)vKR=3uM{?Cw8X+MPSdzKc$ zho$`0MYpWit$+V-gU*~RJ3sWf6;eD<+Xm|#Z@i<1MC7rH@Y126le~)H{oOvDD5fq| z3pDR@-L~^vrhf25NBtcA92U8^F3B-}w^A3}_0I?&*+BJZx(Q|1p+>90){hRq3~8xz zSTbPvS#R=L!PbT38GbXBp(uZ~x7_gb0WBZzK+>s}_dG82k3OJPuPJK*`Zy0IgEjZL z5C4oY*~ e;!B`9ueDCt$9>0EQ>>S#(H<0FV znj`sFyt`xe?Saq|)lxz;pHf~QeZu_i@nhel=hUV5l)3|_) ~T OI5+?!_-FXARgNKEC4oJ7b_1tBV||LWiquwvC>P3>uf&(E4(Uu86=Vs%OlPm;6gZ zlqHrSHqvR{i$2w8PzSc$?v)24hBFjpCEa{E%;hf2W*$L;PZLuAS;gr)P}@7yH_-=N zQ>&>3HhC{SA9c7o7XoW+y6UetfNMu*tgb< 4p{Xw3#Wq%cA}_5@?jKcJ40CL= zm9I134IYbS*brako@1t;``U18{6@g1QUCFkH!0{=JI&7>h21rNkW(i;aDOuNf#O-@ zb&5r*Z4nPfi-nC55rfDXvk~sG7H%WsU|zIU{^BGVtYt{o2u(ZxDqt(hlbZb5&W$1? z?a#IpHS_y(0o|&3PBI4vhe0>TyxQ9HA8}7l{@Z*`-DLP1ZJXE3>#PNs*DH wP4SRXqo${MOB={X9$E&_rk+5HNELn(*>Xq$+* zS;7IW1qHo?2N>Y>b@H;pqN0B9Q%_!xLtFy^fTjc3auO9k*wdoB_rayyHq%8wkx!zs zs)Gaq-L?N4B{4BklHYPqX6F?Lyn zKPW9N^@{hX0i KJ#>iYgH(FlayBQUc zfpR=1?Xt^x0EmCrt`fg%_ql{XAZVQ0s;a^DNpvbDNXjh3z#Tx3oDK&xW20JQF$oC? z4UHKXGTETDR*&ZP;$nE(N5Bx+M3Ed;6RSU+i~wz}G}JmOH#OC3A52A0pBr$q1Q0fW zeD1>Qu*^w1I5^1o^CTh%Wq2t#C&X7GY^mO=w7B>pyc$$v3g}_7rDbJN7+xpK;eFq} z;qnXmUeQnY eWq@&li0O4W zTV7^63tOPZ8|;qH@+piIf;+ls IF ze6THI9j!c`#tysc4AgkFwQOPWBs>_NbiHB)xHxhS8=V0F)593c#m(JoPRj4TU!s(m z03bPD^fVGxLqp{enD06@gR$M&lq4w7NmStgxP}-4Dwh~inL8j9gSpRx<|{uQ%SR|u z!`br#($a4>)l&Xd_b+jxYk^YbZ5yj`e=X8|;(RYd5g=*BK(;Wz1BDGk))?ELC`Ss3 z1}{b9&`C>5E|N|n?G&h=E!M#%M_~QI6AkR{4|&i;`rvF9EiJsVP-|u;Ce+tNX6uOeXUKDN zbM90_<`4Rv{(SJ$vLB*|DxGHPIZb-u!bI=$6ru+9#?oiXwgDofo5~wi3f4o-maUxZ z_W0i(&~36O8rA*uNj~x$BCupic6RJiWBkjYZ}7y?N)&b7TL3n(kF(-5?T@;<^Ulnn zNFH#Qke 2X*spOuscoq5D24qrOYOnbgKJ<7K3od+1SxElE*X%Yk(F6 z7%dG>4*gnQBM)F3lTKvuCDnXBh)w{5Rr%lI@3Gr{7!pfxM;h(V=bx=CD1~w5?gn!g z2j{u1oWwXmrM>iFiiDw~SD6BR4S#8at+1FF6kPNzB_$>9A&%u{7aAjPJ^V;ZtTGL* z0AHYMfRog)-FvEpN!`1|oo|+GHKV3g;(yMwU;)N7^~5%x>ko{n?HNusDqh~j63oTV z0YT>EP~8g;x)gkW6)YNHo>|iy0PA6wiBT>o zXrqJzmp%)XzN`FkRSFt?iLLg|0p!#TknFJ6J~47hw7_nE2DtnX{ }mE2HPn%*s+MMxDKGdU?P%($(+Z1JcN*i|XEhi9hC?SOX#?KW=?Y z6woomfYXLyL#o#}pi`+UR@$AYjMGCkzI*fg;|T^R7og2l_ozB!PBB1P7>{F+_bB@r z18dB}+x^ivA+6MJ%HoNzC_-H>aGhfy%_Dym2M7{y(xhd9qZgT$n33^tP?}rO(gE1Y z@7rpH;~IgU1qMM2&cEHQiH}H4P3_F<0+A&C_0IESUR(HfZGJu#KR <;(~^H-F14*Z&`s&`BPjQ+*T%*a?E zQF0<&-wc9jwR8dYENpr{QlU)z>HdEA$uL0(PD4u%gr3)+SDOp>vuHpH8CNJN^%Bs? zzz=%Z`}WgujhLSKRO`o~{>WDxsa@w#H2rT4r|L^l!}ga9i2~R_2{qKy4Kb#5T{o<^ zj8*cQfaL4+Mp6Vuoo8i{V&R2@=?p_!S)zWeEH9_E1_wOeOi>iDW04H>Yi$yq(=RHI zC=;xjxIp15jG>RimQ#%bQ~R^@KhyO>`Ea##8hIGp2lSP=hOPYIZ78_E+?$CNetmL7 z`P (=`vwAykfuY&Efutg{*>?0{Zn&mW z-p|p8@uj_;5#1^mL$2pF#P|2${Dc7y)5Tu8#V5+&b8IZ(8&zj1y-7U`QJ2HiCn8_P zKi^$yI*-b%xEi7==$KKPQ9dRnF2%n;_4RMYN~KAZxvrnA0e_$|{p&}{ANBPn)rq$s zpqq$U43q;^*tUVL4NRbu2Z+>wQgAUezS#>f7P%rp AqU8dk(w2TPkMR>;x|owjku<|Nu>6^TfOjay#dXj?@t}@ zikdXsS5s5tHE-M;O=jAiB^1H~C!k9}JG=*-;nrqihj^emGh)n5?jH~V%~mc*G0_QW zX@nSJEcv`;aM!4JqoeW_hcl%rbO6^%4m4 YL=}8GH(ip4agzLn1geFk_Cw? z<1KJ|&2o9+E;N0tYD#R4e)9G9RSbmHB?=+Sp3n3_S7Dx8@>P2S!(+rElA)`Vi>=As zAkrp?H&W3kbS6uM3!@LJ-??5E_(9kD^%5$nqj*ie-=C|EJUTK*D(Z&a+^^K*YMwNP z+eC-Fnx)#Nk8DOElfuY0=(8#>7S59N!yQgDmECy;n!0ea>I;JxXaJQlgVs@wn3VW( z`G+<32EL$$pq-$L84VWFDNon{3%|(_9_MFavA(@&TkJQUh9nWtRbMU8`iOT~bz6#> zPTXxzaQIz5(+X5^_xHb2*>O1VyKTSG?K2|n4DY)TaCNc0p*nd5wO%UEuE r~`VD+= zg&lIaH=s2LUw>|t(SNt&cq{cLSp##cPj9Zu&x~^>%i8Z(qbthm$p;5eSojd?g-Bt; zy{0^Rc;AHMS?zn*v1W=Gpf1Rnlev~N&gN ue70qu8qTp_fRr3;3mv-G4P3d*+9RZG9nN^TNQXD6rxoHV~N zYIeN1ehg4RjI|uv<)O3?z8*Zh8n)Zvxg^em4h}VW*5LgE)yKbICOt=KV7@s%=b7|e z=)lKI+RA=Jwg%xb{zKk&2=!Sc$DGbPr4M zcn*urQLT7invba7qxI^IzW&6Y#WyF&7@xkbuG<)Rwleu)t-{<0efxSlZ`G@KyCQZC zm~fkWM7LE0<$s%Hp6&T+?{+xlK}JcOTpL%L=Og;~+Vm#&&FAQWpZZLZJ?JDE`YYYz z{uKqC0eYI@QeGK-S~H{?3-?-8Y;gy#?g6u8oQjc_3*5>lfH#kAp3;BFw1t(dpo>>K z6gDjiZ8GzR@98uJ--&HWaaC;wUTOtW_d=+jX#sqv5}I4jYi@4t>1%T-nyp=9VOKx9 zDgJ#NKXU`CnF@9A0)iu@a^UGBZR6(Y^Gm>vBUdk{6{6_k7l}t|!8QFN!k#MPPW zp(?;dtxlt}2mxZ@FnMbKhOOiiE5-)Q00dXXj6{E>N&jbjgP!~821O|ge5m~ w;hwM263pYvQkk& z!L4p6W3%bMwd(;7HvSn)rS|t$(u2PpL0do%C;&BxB7qQ}xloF8g#x%knDu}8Bmjy< z1Ow Ns9<>hi}0qM zsF~LhXJ==zK$kfXAZK-N0la$E19`$7AQw=J1HFwKC-NaA`*@(Pc19(GN1Q*?@*>N| zg+B*^JbfyN@8?ea!rBrlKRl*1AI{SnvfTcZ{O@{2t*rLS)CxtXkLIfs6lWQ+r0;?9 z{c{3~UK6l0Hwj+plrkhqicx*T4eNMs2M|^(Y}d#PMnKUI6<1AnNSys)^XZ>fuUa}Q zGf`W*vb=bHzof|OKCO==M18qV{dM}wtdj?rJ&%5itHtl(#Jodxvq4o^7Z(>*Rjj4` zZUA?V{`%Es^wt?Q!0aOC;RdqI9VJX`D&wZNhnBnU1T4V{zsBC0^}F3sjBR}j?VrbA zK3)>1PSIflk79;~$ 2K(|By&IfR6gwqI+;jyg^(WN(q9|j>I z5A%BX0Uf7mdam9|;3kZt+F0Q>b1x^*B(w5ksvuF8>xU&_CU=7+?N#R6)XUR|)r~jE zppEh|VRuw1Poa?Cbbp~X=PDH_Nf0mVtA {^n!h87)zu)uiG~o$!DV}WusQETX zMd3Y0s0yXL6pr)Umw`?JyAQuC9?iakZ7AXU)?8+GtYZF?pvhe7+{fmtpW9}O*7Z_t zrg$D!U90?!?B`}XZs12Kj569cb+^{j a&Uv>fi--&bD_oKMv3V zO^4=?_YOU (~I2wEt9x$mmt4&RD7u3c@I*n&i( zK8-KFNl=BsQ5}&>EQRGnK6%OhKAFXwHFhmWfeK!$%63$?wzvc5TF|^oPZFsydYTWi zsG1CC!1+~7ou2uM?&{ni9UMZe&7;ndx^F5?7VckLt}vM=1D>6?Y1T0{`FX*;>QEf| zbrrkI*riOQVZd ?f2OJ$p;<=jTYy$tFFW&SA@7TibOHIy58Et=Yr@@;u-vSKKh zK@&|!AtZ7}ww%*q#go~}P p^3EekT(TP4MXW(YbGun>2^+Pk|(b-rZNN$9`;v$Lf^ouN|EBMIJ zA@qfQL5zubsx6-S4$;HKmucG2t>NSE~=a{r>T~+KLc8E7EYb Bcd|N+ z{@OO!cHc=f#3Ver!_3Y;g{PK*++lLzl(Puu+rVO_{b|^sFb97%7qo2u&KkC?W#1su zo@Bidx?s-P OLZlP+CQ?*CZYOq4> !A?r5kB~uuTfE^rR1c31G@uV z5eDV=nuwp4KZt|E! 0PDb3?8akUi8P%0jtsZ1d{py)M_>JV+ z5I3)5gvFOEWx;Nx>c`=BT$aN3Vs~R+7fKu1Z*faW(YQ!uWTewp_>n$xQ=S45Iwp$h z!%bx trjJ zOqm(ChH7YqWW*_(O(8$-^4P0?54|K!moZ(cd^Og<4?kX@yJLO`;}7o^R}~QYp>99g z9N+}1c_`C4XiHvk5BQ8AY=E?}KUeFX;j&TWBsB3Eq6$|=Op4_91;%FEO_$ZYGE~W? zGt2iFcjqfmezT2bjS9q3-Hx=KxZRJ$Re=Ej(?fOaG~KET?wL-#=)V|8A-YW;P`k&C zm2sfr%qv)as2)iDNXk#6DaZ+V_n JuUgqa&oSEu7I1GngEb& z)Z#ke-AkgXt}d=s=XvsJn~zlt2o6_g+C!u)DpBGGrC5Y C2251dk?xXN8}=pUamj AO4KEJ|~1|^FfoW zGP{`xQ>&_#Yw;m^;2t?cO?S;
8mV(`xgHzbGnGz!+-#*G80FyNd#4y>X zCBh%L_iCl*1ivYrG5Y+ZB5Qy`iFAyLP_ExjIO4muF3ei4s?c@~^0P=zfp)Y75@((Z zvtYGBveA;Oa_%+zulzgPLk8Wv!Ot(Dad-tgcneMCg>JVBfDz-#h4|fe6}^NnP%tn6 zDzA>cLBQ436$TcTgM&*7d?dQjHJ&Ztb$hxt=w|rq=UEaoLySaNE!T*7xh{lX8ZDLS$9&pwXL;6Sl~RnQmapPx z7dtP(kJpLq*O%|7Sz0_~Kc0WSyo)hcK}DsvS|ISG-T=hZ!fS;X+fV4Bm8VFGp7K^h zK$rs!&MONdd16XZC|sd`3NHySl^E6Ts`YMIx3qs?{*s?2;M985d;E(T!$(N4qq+q) zh8&J7N qZP?pt@wkKlYO b^YGGtyA35?k#JL{PvXVWdkQ_t2{9k)PcHILawXR z&I!`vreIk}4*V>PutFBPLbM3OTM<~Ek6E#SW$?#xLj>es>Vq=DOr`Fjcf7#B$!<}O zJd^yoqD;?U5fCNtA24!+e0=+)hh{!=eOY*;gpW6FbWMdpj!YL-&mKnv0#G=mAK_>- zYWgvyhveWp%9pEY%Rd~P%}wQw*g!RQZhbKRy7r)0Mm)gf;8(yD|JHVpCjb$ErN?`w zQ vrN#weY B`gpmf(Lp= zfhP#Z#~W3CZDFNYJ3Bi|O2WPTeR#-|9@^B@^#5t@tKy>U+J2Q*5Kweb8fh3pq#J1g z>Fx&U1_`B+4y8dFX#|FDL`oVYh8()P>s$Cf&wlql*+=_ebH)t6;l9^e_Z9!RCSex% zE``ScU!VhEVxT_+r~Cmyt~u}wa?5N07S0=>-IY8SAT+N(#U&-Z1?o6P^|E{GAFuX1 zCGRhVXnksaj3*kQl&wg_=Z4!I2z~+rynu5IFdW%Wg$B-W97z*@l1`&y%_#M7NZhBO zpoo5vO^S~nB=nswILwntvvLj4H1h~#c}%+yoJMRfBYUTsC1ljzm@S%QfrQ^XlLgsa zDUCzCv6pP2$ *Ir!%fgtkiV&4%q7D~Dr&@o1UaO8TcBkjKDDFBK%EY95|cYt zeTAfjjJ3yh&IpPNexzPSrG)q#rlSmM1$fxY@v^ceGc0IpZiBqOhHQW|6yK6EN*QFE zwCxhRUlQPT>9g_cq(mw O!r~&TTDmtn3)cn83rv$ zG|xKs8qZ8Rm-w*+kFIE`F))&pG^MIv;Nm0lpiB;&Khf2Rsty3)0Ech?y3h3l!gwv{ zw1#^YDYrdSAHVj lO4zj@TM}6QGtWLc=H9iXOcyy05qi}ouQfEc~P&79gTEZBiI?Jx^+vMFb`9wE+ z*;fG9jRtD7zFfeJcBJgd6nvli8Ka0!iIU|CA1-A;%Wo4|jKHYL860)Q8Du>3GFO2} z{nwSOCMinfCqWpeo2<{gN;AhALlN>M(IRB!Nh5AjZV98F?%d4{nzib >WD|DYxYJXTnc_!z>CNF^m@j-Q={PAI|_Q^pZK{?0k1I_cawH~?S4Bopx!gIAK z41Y7hKmvV3zJjW1|Nds^%^sB`?Uv`~B&wKM$T!S3) i z@_Bu1{l#D+fmdh{%q*yM)tU=!mvJw;xo$LIY!JX;oZ%Vxu~9(({WoZA({qNnHe1A| zzI3+M6a 0N_pP>w4FXG(37-)kMO7u4Q^6lrc8p-C* zIAt}Ugj->D!~cSnMhMKIKs t;Df|vgl9@6N){9DgeSMNq;#HWKnB8eB6+ipByQeU@0pT4SjPX#= zaRsYQC9)P79lIq>{5{J>G+7Xyc3v2gxVZQM9qVRRW+s gSsU1`-v!sC0 z!FFjq>L~$iC8zva2@ts#vJI&nk4mhi {f4?yv