From 28dbc2dd7db76bcfa75e09602c3f1c1c17ea5871 Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Thu, 20 Nov 2025 11:06:23 +0100 Subject: [PATCH] mastodon-post wip --- manyfold/README.md | 2 + manyfold/cli/manyfold.sh | 9 +- .../experience_updated/1000-scan-dir.sh | 2 +- .../hook.d/experience_updated/200-to-gltf.rb | 1 - .../300-package_godot_zip.sh | 4 +- ...don-post2image.rb => 500-mastodon-post.rb} | 22 ++- .../mastodon-post/mastodon-post-bg.png | Bin 0 -> 52512 bytes .../templates/mastodon-post/mastodon-post.bin | Bin 0 -> 748 bytes .../mastodon-post/mastodon-post.gltf | 154 ++++++++++++++++++ .../templates/mastodon-post/mastodon-post.png | Bin 0 -> 176 bytes .../templates/mastodon-post/mastodon-post.sh | 30 ++++ .../root/{ => templates}/template_godot.zip | Bin nix/docker.nix | 27 +-- 13 files changed, 224 insertions(+), 27 deletions(-) rename manyfold/root/hook.d/experience_updated/{500-mastodon-post2image.rb => 500-mastodon-post.rb} (67%) create mode 100644 manyfold/root/templates/mastodon-post/mastodon-post-bg.png create mode 100644 manyfold/root/templates/mastodon-post/mastodon-post.bin create mode 100644 manyfold/root/templates/mastodon-post/mastodon-post.gltf create mode 100644 manyfold/root/templates/mastodon-post/mastodon-post.png create mode 100755 manyfold/root/templates/mastodon-post/mastodon-post.sh rename manyfold/root/{ => templates}/template_godot.zip (100%) diff --git a/manyfold/README.md b/manyfold/README.md index 2f480f1..b1eaea8 100644 --- a/manyfold/README.md +++ b/manyfold/README.md @@ -16,6 +16,8 @@ $ mkdir mnt config $ docker run -t xrforge docker.io/coderofsalvation/xrforge:latest -v ./mnt:/mnt -v ./config:/config ``` +> To scan all (mounted) libraries run this once: `$ docker exec xrforge /manyfold/cli/manyfold.sh scan_libraries` + # Build & Run the container-image > **NOTE**: [nix](https://nixos.org) is used to promote reproducability-over-repeatability diff --git a/manyfold/cli/manyfold.sh b/manyfold/cli/manyfold.sh index bf61e20..4f4d03d 100755 --- a/manyfold/cli/manyfold.sh +++ b/manyfold/cli/manyfold.sh @@ -210,8 +210,7 @@ start_syslog(){ scan_libraries(){ cd /usr/src/app echocolor "scanning libraries" - test -f ${db}.startupscan || bin/manyfold libraries scan - touch ${db}.startupscan # only do once + bin/manyfold libraries scan } scan_experience(){ @@ -248,6 +247,7 @@ get_xrfragment_assets(){ } init_database(){ + test -f ${db}.xrforgeinit && exit 0 # already inited sleep 3 test -z "$THEME" || set_global theme "'$THEME'" set_admin @@ -256,12 +256,11 @@ init_database(){ set_global model_tags_auto_tag_new "replace('--- \"\"\\n','\\n',char(10))" set_global model_path_template "replace('--- \"{creator}/{modelId} \"\\n','\\n',char(10))" #set_global about "$ABOUT" - mount_rclone set_upload_path & - force_public & get_xrfragment_assets mount_dir scan_libraries & + touch ${db}.xrforgeinit } # The new entrypoint of the docker @@ -272,6 +271,8 @@ boot(){ rename_app set_homepage start_hook_daemon + mount_rclone + force_public & # enable development mode (disables template caching etc) test -n "$DEV" && { diff --git a/manyfold/root/hook.d/experience_updated/1000-scan-dir.sh b/manyfold/root/hook.d/experience_updated/1000-scan-dir.sh index 068cb69..659b605 100755 --- a/manyfold/root/hook.d/experience_updated/1000-scan-dir.sh +++ b/manyfold/root/hook.d/experience_updated/1000-scan-dir.sh @@ -4,6 +4,6 @@ cd "$dir" echo "[v] scan (new) files of model" id="$(basename "$dir" | sed 's/\#//g')" # TODO: better ratelimiting -test -f /tmp/.scan && test $id = "$(cat /tmp/.scan)" && exit +#test -f /tmp/.scan && test $id = "$(cat /tmp/.scan)" && exit /manyfold/cli/manyfold.sh scan_experience $id echo $id > /tmp/.scan diff --git a/manyfold/root/hook.d/experience_updated/200-to-gltf.rb b/manyfold/root/hook.d/experience_updated/200-to-gltf.rb index 076c998..85891d5 100755 --- a/manyfold/root/hook.d/experience_updated/200-to-gltf.rb +++ b/manyfold/root/hook.d/experience_updated/200-to-gltf.rb @@ -33,7 +33,6 @@ begin XRForge.log("✅ generating gltf", logfile) gltf_path = ".xrforge/scene.gltf" system("assimp export #{filename} #{gltf_path}") - system("assimp extract #{filename} | sed 's|/.*/||g'") # tag it! if ! data['keywords'].include?('gltf') diff --git a/manyfold/root/hook.d/experience_updated/300-package_godot_zip.sh b/manyfold/root/hook.d/experience_updated/300-package_godot_zip.sh index 88180da..bcb4963 100755 --- a/manyfold/root/hook.d/experience_updated/300-package_godot_zip.sh +++ b/manyfold/root/hook.d/experience_updated/300-package_godot_zip.sh @@ -4,7 +4,7 @@ cd "$dir" echo "[package_godot_zip.sh] zipping godot.zip" # overwrite empty godot template project-zip with given URL -test -n "$GODOT_TEMPLATE_ZIP" && timeout 50 wget "$GODOT_TEMPLATE_ZIP" -O ~/template_godot.zip +test -n "$GODOT_TEMPLATE_ZIP" && timeout 50 wget "$GODOT_TEMPLATE_ZIP" -O ~/templates/template_godot.zip -cp ~/template_godot.zip .xrforge/godot.zip +cp ~/templates/template_godot.zip .xrforge/godot.zip zip .xrforge/godot.zip *.glb *.usdz *.obj diff --git a/manyfold/root/hook.d/experience_updated/500-mastodon-post2image.rb b/manyfold/root/hook.d/experience_updated/500-mastodon-post.rb similarity index 67% rename from manyfold/root/hook.d/experience_updated/500-mastodon-post2image.rb rename to manyfold/root/hook.d/experience_updated/500-mastodon-post.rb index f9c3d2e..b55d0b3 100755 --- a/manyfold/root/hook.d/experience_updated/500-mastodon-post2image.rb +++ b/manyfold/root/hook.d/experience_updated/500-mastodon-post.rb @@ -21,7 +21,8 @@ end begin # Change the directory - Dir.chdir( File.dirname(filename) ) + dir = File.dirname(filename) + Dir.chdir( dir ) # Read and parse the JSON file data = JSON.parse( File.read( "datapackage.json" ) ) @@ -67,16 +68,25 @@ begin if img and img[1] and img[1].match(/(png|jpg)/) imgurl = img[1] end + + cmd = "cp -r /root/assets/template/mastodon-post .xrforge/. && rm .xrforge/mastodon-post/mastodon-post.png && " - text = "\n\"#{description}\"\n\n~ #{feed.channel.title}\n#{feed.channel.link}" - textFile = ".xrforge/mastodon-post.txt" + text = "\n\"#{description}\"" + textFile = ".xrforge/mastodon-post/mastodon-post.txt" File.open(textFile,'w') do |file| file.puts text end - cmd = "magick -size 800x800 -background white -pointsize 48 -interline-spacing 10 -fill \\#555 -gravity center -font /usr/local/lib/ruby/3.4.0/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf caption:@#{textFile} mastodon-post.png" - puts cmd - system(cmd) + cmd = cmd + "magick -size 800x800 -background white -pointsize 48 -interline-spacing 10 -fill \\#555 -gravity center -font /usr/local/lib/ruby/3.4.0/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf caption:@#{textFile}" + cmd = cmd + " -pointsize 18 -fill \\#FFFFFF -gravity NorthWest -annotate +152+100 #{APHandle} " + cmd = cmd + " -fill \\#9c9cc9 -gravity NorthWest -annotate +152+130 #{feed.channel.title} " + cmd = cmd + " -fill \\#9c9cc9 -gravity NorthWest -annotate +40+470 #{feed.channel.link} " + cmd = cmd + " PNG8:.xrforge/mastodon-post/mastodon-post.png &&" + cmd = cmd + "cd .xrforge/mastodon-post && assimp export mastodon-post.gltf mastodon-post.glb && mv mastodon-post.glb ../../." + ret = system(cmd) + if ret != 0 + XRForge.log("❌ something went wrong :(", logfile) + end XRForge.log(" ", logfile) diff --git a/manyfold/root/templates/mastodon-post/mastodon-post-bg.png b/manyfold/root/templates/mastodon-post/mastodon-post-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..47c43df3c566160c615171c98aca2b4acf8c6188 GIT binary patch literal 52512 zcmeFX2T+q=w?2vueu@$sph&SGNJnW>0-_>@76Ae2BE5v(5(p>=C8r=GXMDX4w zjz^rG=Ef>RYGK|N-G2R+n^4JlI3{>C<8eN#k(YS=4s((uuYhP&kYigLqO&kKqOz2w zH0b8ui8;}S0u9eU($vq1yis_#-qq-bX!Lp8s%Kd^k#PED|APu#>}Rp!bEnF#J-c@6 z$LG&q3kE;FVN9DRa4WW8I-&98dZn%pI+EA_T=@{AAtO9@VeUt6jt7Q6sysaVBJv8D z!&7-qwX|2X)lF1>bvg0UorF~WsEf>t-0^;2_0GrnhCVFJ=U6=078OdVeOOe@NSKak z6@N9NA78KK!D%o2=Irg$zwFY(IfQ@Mk3PTuC5IXt7TC8Lu@K#@cjivlN&JgjvH=@P zdov}5NonpeK?3Qt&KjjR-@l9gcAnfNe}mM5-+q^H&GDj=*u)P&u*xD8#M|G}u5L4< z3&20_OxNJ3yHDJ+88ib6PB$TkWLV#Bh=^A$?T$@!;ZA+dDt#dHz3rB`cJ8Vd!UwRs zyGu;e3RK$0yHA?*?8Vc)!uUpA^(n(O`rj=wBBYRh<*e&-Lk|W9(L2Yl6TUf0-t>!1 zo*+#XCLHq>fan7T7wH@HOV>SBUU@!ofk3RCJsF<3TU&TqTix`r_q4mI3etRG@Q#I@ zf#D_t=&ABc-^tY(XqA;0oJbw4EgZmIGO`P0yz2DS>SFdK*4S?7<10fyZbk>iu$M^7ZYhBe6( z*kwfFq*66&97Y}J(_q-RH#9Fo|IcuOmHu`!{Uig! z+qcJIdhx{x28KtE&d@*pLl4z|eZ_G4<$rv|a8i)|@n1Lm|7_10@VPg^1?u!dXZHhSRXntTU zceFQb#B)G9!Uq1no8W(|VKtR_SiZE(Zd*%5(Ds^2o3`FGlS%?5H@~$X5XaqGo$D8$ z(I0>uqL8pfE(fuBDFw*=MDw9#C0Z*z2G9f%7ijHRnRyW)aIaMrvA>h2WG)uCe}fe1 z;{S{=26xO|_Ac{8oBFIwI*OqaT6Vyb-z<}P?VX*!49G4o%Hgsls^4_JYao=$@5~Sb z^w>>zWcBoNBnB10Vz41X_~15s;3f+M(?p-@a^R8APBwo@L7@4o@e*T~nf$TqyxSoZBoK4x~DYR z1kD&1c`3<;x5HqyHxK<57I#^4Ta6h=2t2@3gmdvbz*%fxeTqs4mV@sbp4Mo{t(er;ZZwe%Qw6GFbm$ zUffx*Z-suDqH==it`uYjMmNCxPsfPCddL*8VIev&Qk2=H(QO_^{lkQ%hl4-Ox_1}t z)|Falz8B)NQi-G*!Fmc07*K+dp^ ze#vVJBBL_sfrT3z)3n&l_GH&4t92vTM26@qRWF0~yWsBdKoOCYk$!kt*y$Hw>@xhm&^B02Bn?-NIAO7VRWAKQ|9Ph4W!Wkd$fCoJp z(*>4rv?Yekh`doYdWPNqakS^3cVR0dx`U$^WQvFBuNYp)M8(JEOLRwoPLRI1(!a*L zA>^MK*Eo$SGnJsesB#zaQ1j1P=B4g(uF+#uaj%V*JJaX`imq{KH5l|?Qs4Q(uc%^R zO6sT7czAdmTg%j~Q^s>X5{ukxnyQ(}Dub`-PAsZ&x>fPo)4>;xPFSZciUmG)3D|Dj ziB4!TLz`@y&iD~iC)Us<2k`?6+X_G&$Z@BcXvzyRYV!Sf>`WgFv`8A#;Fi05)MKD% zNK-6z<#zvN=`{%S!FPidO$q3-(JrMU{%Br_VY**bVUxpYd32!iWI>E-*NszY`gA)R zLa+g4ytsprOq!ACVwdw>y77rC!Sg1xldgS8U!L#y7!Yo@| zj2iCTxW-pv=n+q$%2MZ*TFQ>(vA*+i&AZjDC3#BJeF{2|n(y3T-^`2qYN>@P$V)4_ zaHBMBFM!U5~@vQDo}sYj zrL~s5IWY(EuftQ=BW@rOs#Fvw1Q-UAokl4n$B4L|fxzFGM?wbNMl|_9Z=YlmmY3NH zZ%?t5($;FRC$8|gY%lSEqFI1Dzvf7Ez&6)7H=Ba}=LGO%rmS*Gm9{T+$qYyiXJrCK zueZ_^AyeLE$4to;u;)PSDQi;ALmoXAF>OHpb%=SZexvtVF|pQZ;%I1Fm=4qJ12hp( z<-3V$Q2*Y>1PI2L)H;81mN}yS2}XS8J%+X&dEFF7DhkwGM$+`TyhhxNUXACF2xuEJ zJwL__{h(cZRgK@2Tln0CFEXdvf;#w?vk;2fsyuKV;GdOavNCP-UO6M?8#w?Z`=|P? z?;EuSlqeod0B{5HE;IAXiYw`Qlt}DeC56l-Uqhf%?Gx%jl9a7ue^Mm@E8}cZ2Jrtw zHs*0T*!ANDsmBXLn)~$(;JUV{qzAy+v*0lj+C0Y+VVWhsUZ+<(?QZGWXg>&KLF<53 zxk$Y9AdI5hO!J0}89#_Jl6RzIT#G5RRouQSM{F`jMVKGLOuZ)zb~?oZB+um^=ZCCi z>Q5QPtUwx>Hrzlxrp|a_!@~Xj965Sga|j4<13q`)bSAdaS{C5-E}qnAxnF@B!8E<) zR5Bx-dSs8GQDxoB2S3`T8PkEbs7_ZCC!}iMboQ)1@Uh?DVogd;Mwglb6zm4QdIW6M zqNO2|>GYr&UFugV76YjM2qgN^GO8WLhOVT!R?vA{mL7R|1Wgx88H{!is4MS1-KshW zC(rndoburGp7Cc9V^>@cA3ap^yA&rNiLBjI^VjWk(v-0H4JJ2g6&L#SV)DcCrXTUG>&; zj{XGW`Ro522NrzIk#-w2S-*Xx{m7gfLZstKm7k#>i(5)|`OT!babR>D4WyAuQdJ%h zToymqwy-v3p z8=#3DOm=Pv$VKlJfT?lb>(d#j@;)oOQ!ZmOJ}w1iQx%JBTpoShf3Xp!)WrACaG1(0 zc_9W_aC{$=(q5^w3npF6-y+z#&LY)}+<+ZRl3G4ipEuK`SrqsFp`!(?&LQ2^vKdMI z)Sk`Dm355*-;eFy}B0_<3Cnwb`YlcPu6hn(>eZ zTrPnm6S%Ea-^hz=IarUEOkvs?dc8SkEk`I$a733fd5-EOXf&l9bZvv!JYQ}bfL0r4&5<_OP~48-u@VPDzPe$ske4dh0Pt)GXxTfY>xM0GQ7 zthD**G2f(mjrCT$%~#X&LbDn8IO{F08`V0G5AIG32IS}$zbYWNkPQf34o7JNX@7&F z1AZ$h$vz<9ThzljyJPp#x!4gtLnXT;X6Z7`xK;-$rP`>$Qwc~aSjJ=gh=t2P{qM!r_;rL9 z5emMQOogbZN?)vRaXV5jBd6iAS zEUb+=K#Q&*jj^;NpDO4!T%{DyfGP#j1F0_$HJ6Jm^MJP{kyROk|vGKp5q0l-&GVY`)s=(GF^Px#aJJn1^d zl&&(x@V(|oR-V{Ag~h%%zo%o~3SMYrm<~A5q!Y>V3Jx6Dvfkns(X!WxSec7Rj%zyh zGa1`zN_U=ns@qRydYX1_Ch@_SBzRDv7Yr)%PB6S?q?dVkWd3fK+aoGn8P^&7t<(S) zmXwd{x__5#QBL%H$;QU!No+RWC!AtnP&h~ZK~jzjrM?(e*7#fU(5pg*>y-a)arn1x z{Ew&nHw(-E&R9Tc8)7&jFnz!--vBYV&Fz1OwJ$T>@twV;sx{EK!V_S=kp3|GHIZs$* z=V#&b=akDu75r9?ehOq&+H z5VF3;stG-?)Pk*U&}P@#k^E=ShUQZlVQCrj2%1O>y+(igwjodJ;VjVbVd~Yx+>ky{ zZSsz9Olk5i=WwZ*o=qME?2E0L%0bApjE8ZT>Jslf9j*cU_NfX!1^G3V$9eqLMDM#2G;Ju=%TV&9f}~JPB5kP)gH&; z?cE9Jiv&^GVwRT}HjccIm%y*L^kSaOWv>yo7}A`{=WprhKK7V(OAyWZ$aCxg+XphQ z_U}|V9Rzdh1>JJ=SiGH4 zbKYGrO2;5t%b4-1reKg(qpAJ2iQ7F+sxu!{@0GQniLAq+pTK*t*1Cwzr zR63*5(}*!4=jNL1r-g;}reBZnr|q*2-nW(Re>3{bqWF|vt()c*e~B0VHZ+|XE|@rG zv7PnKgk$&POtbN1jb_7^8ZNw7QwDQSFAfa{S3fgp{0{m-$ReOVJI5#3 z{8yI&)iqH&(PpU}w&Ucf>w$kDP=m4hUO<|dKiESz>W};o1)FOP-~!Y7e;*{2x{X9|u!W;l*~r#Tcp1JM?x8+ViN0f(L}^4XfTD zfP&4y)OS1lfqbT(7CGR<`KoHY66jhQcEA`z?@!X#+ILIpgTbu${sv=?H*s!6t5l|` zATO^NXD_}2#4i`f#886M1{8X${P%;7)}M^N&&jtjsTfT;ZtMB}*x8+Nl`CbT*lCR{ zk(ZD`%F0<&kuLHqwOI$vdv|kn$9BjcT{*&D4huNKU_WsVX0=STXsl@txnQlCUJ268 zk^-JlJ<}>4GX{0K+Vc!;7z+aa@+f6*ty03fG`KVa=GE|yW->4IpwTm?B@@8DayNY! z3?0PunV)YH&i??r?-f_(u^9J*Oj|s>m!efD>HsKnY;4X|h>}w(OLP>srEIq*@$`33 zjzp-BYJ&xH*7fua?;=k!yjAT{1opr5HYA8G5=>FEVT}~HSANP8U~k3+n}-N+ji_-p zeNo2Gbu>#$48e(;- z{b$_E0;5+i%Fw+v4W#C?jGETEZpS&}q|<2O=z&$qYRIzLP%&$gmaE*lIfv-zOWOw5 zMFE_cV)^stfU?AFrEuFEuV_vJ%p?s=Kb<;0xw0%N*SRgK1FOJPygx4b_ z*B(`ocM!7e^7}A)(WnZmob`HgI#&!7kzHu?TlHvN5x(%mXXOd43RXAwa^o8Dus^b4 zf2k#YwN|IO&14p8I+|(S;B&x2Z5MJG!P2(zpyg}*U>mumkEgnQ?h?Bm=I0Vsw^}|7 z9WXHb`BLkGm@8vahVC}9J}b|oneF4>Ifd411#ZSEjYLxcW7Bhs9pScI__;tJ!9DL15sm7#HufQQb@=`zf-J@j%+ZKs#Zpih|CijrMt?e4~7rts5=p5)4xU1 zle(QO_MYqQ!?kDkg%izs1akgTOy60l>#Or^JKCb^xf%|+sT|mB)S-W^rvu+ig}oNF z%|rpByAh$HYYR5Yk3YKw!Fye~C_DDLe4z0nH{61{|fnMs6RzV`Iy%ZG{>)K}12h zjl{$<{#$mI(JUqt!%O{U{xiA~tu}Q)28QoXUh}xj4KgvX2Dk9tCC2Wko|cj!@{=jk{{NmhNqiw zV46dL8kGUo+_s}BZ9kNG^9QkC=`Yn3pOxb7n{NxuA`qHbS<(yTlwu+=xxUtXxF0b~ zBZTFTLmGIJCUYZuMP^asf?f{QU?-fsM$(92BgK|1EpV{>#=n>}sd}FE&Jt=cV`n_l z;!M|Q-|tu>UFKw}Yc-53kd_1Ok4`}cM1|O)OsmgcnQ>f>*WB&)@M1aXKnet z=}yTryBqxL1AQ~=&!q~4!Hbeu-e7DFN++kE+SoO_`6y>|+c#`TEh6Dnxsh(AKYmU{ z(W}Id2OP)xX^Gg-DZgH};LI@w?RenOl&QCy7K@>a20CFE->QC6m$K)Vkat~b8=;%& zsYfDwue$1}6#oOpdlYmrboUcXT9R#FlV$@qBs&csAeS zqoi{72*`lU~*E{J>`zPP;3%EHdzjSCT zoja`f=4Bh@VR-uolK(Hi!)wl)yoWgWGbM6gc7P+BQ){tSw3%oUWuXffB4K3B^?IA- zTbdV!t1FPcsxWgGEaotMza>dBP8Zkkm}lgph4@!A-r`kJ%R`CL>=&FZ#c80zxug1= z6UMlM2Od1e^ifP$1X@i;!b&ivii$ZSVv0eCt!|lAf*l*eX8qLCt7_0Ti;wVJ7=Cww z;{~s)JX(7=Za;n|ecxJPZ>6-PasKTjEU?Ugs~U7-UpWwt@l^Smlo@ukpH&MmFZMg) zeh<+8O6ke-gwhM@o9S8?BH7*-_}>CYvJp91-ty#DxPBbwDQ+|mQ*s_!ST4x+X(fKP zA1+i}!BB0(*v#U>gG(PHsd*(vRaS;OEw99*0uNiDzR>Xso+ckUv`&vqTy`+E;0%*N z%sFzH0vngYiB7|n<~v_Mf-Ql=ZDB0jW8s+~kwF}u#K+XtHhs7ekLh#&)8<&~rZ@I1 z!B2paH+1bdCME?ko>{_B8yvYnG1?)Oxb~HsO%o5`UUGOt@X*3U`7|xckth*ir+x}w z$4WW>EDL&#l@>$qfJsDTVEEDbY_4zMn#!XI29iu3^?Dn?M|Wi~YMf zXzmgwLda9_aZlkmY1rrDwehp=nX|<1d%j?s?Sv5mDM0w>gAM9N0R8|ESeh@$$JgG0 zu4R3E9Y#}U)RmpRN*`IVi{m@;JeTwOQXb5!K=^A&t<=XfF)3< zN8E@7+5xRv+x&2(M2-SdCrt(Ve$wYwC@X|rtjGt+`@C#eoon3r2yj6yC41*9eT^Ye z@Pi@-tul7f4^6atQRoDX%Z~d57wYw6uQxDV_i9p$bs8^oPbn#M3vkqr4$sx!vPmsS zBUQntg5teiZAp3^4f5oc(WbO!w(g+IT907R>YHSToiZF#k}Xb~qiXh%NOvX;KqFZ< zxAd{ucUN>~+4v9FMLgbvb+l=n3*^CeggH7&NnAgDr5(1R2$h}xTY)yd*9D`)!YxO| zV{;sDLoaUrv>)1WENe94q3p!iVnTCzDbX7A)+mr5WTNnz^F`K=Y2n$caZZq{`dw2l zqNQi9j~&T) zu>CgDI`QMLndlo_vGy$*`1C3Irqy4 zCcXWj`!rlDDB4j|MQhX$EgIIVBx9{tkOIkLlxlSMzhgAyL zd8KCo(q>JQF`zRA=T-Z0TbxVkeoPO|5C4%$}`*>WHl30 z(*mcATZrj&whcGC)>rIn15<6n{plw=xNjXd1>q0EQ#_`ZLoFW6z#b~2x ztqGa`J|$mEuw+k>!#|mvX?I4i549@MIy4)WdJe3cADa(r+oUARa0M(hne9`8cd}#R zM+|7M*SwpFt&pA?sTt>j>jrwQ7#5-`2YR^iJ#iFW2EG388YGViRBtSqpKs{cQlGuw zAB4+o@4AK=Si~EeZ*Qyb(DzJB6%Rx52CAf}?+VZ|7Z^*ihaGpGZD&Z|sm6o+Z7ZXt9pzYRkxDn1w7U&dKiPLC1l)%}`VmX_jI(B`#T$fNQ8o`j1c zkgy6`@_zmUJgIfoX)kB(hRUidA4A-;F~7@i<^xL28k%brY)8QQ=RebF_4G({Z=Oij zZl2cW%WG0ZZjEB4rar5r8^U8sfqT-_>3Zx~ys-~&T=(v0!y{VuXW-$428`C|eD8dD zct>I0Y_-TQw!G=Bt(&5QNV?ki^Q9b6#+&2&qZwe}7%ql5C`hW_8T`aoL0&n_7_5RP zF;YnA(&2XcP9{w$Ei>3a3k{WdQ)Yn?bPVDjE! z#9&0V_uP2?8;9JzoRALWPpV;XQGeEGv4TJIt9d$O(>qNMGk=!MIE>{X67Wu;>N&lB zM$ufuEy?p;5(G!_SH%G?X04kIUWJ7-_(VeB;Y>Gd6@RyoE%p;dET?G?CV`vh+54in z{mpoUNT%0z_Ri%`ZJLW=hD^WmT?&~hwV|AWaD~;P>sqXxD-C~EOI(Cx{}QR~KpsZ! zlO1X!6I44Kdyq(yToH?>blB|rG;JEyi+wuMD-<-)tB)66bL_5Y(I}l^M(z6fIFi>b zaz={zE7M?fHlxtb3M5)J%e{iV#J^-~A9YJ^CP~GXZCuA5gYcw-Bj*jN(PVHFXxDEh zZSBf>jMm!7p_2`stckkGF}`5d&7KV*OCqL-g9TU~OqUf@9=13?k#BU_-M$7@Gqe|C zm)}%#DGzi#Yp2VtN zvbf2R_pl7sd-|lBGcwfS?##=|+gtC0iu~$>A5m#Tj?>kyJXn^$fa;85az;0C0MGmx;U67hGL=;u5pQZ7#Z9nJg~1r z#hfcEc)=E#))h9oP%O}Da?V+>Qy*-;$lZ$J0yxbcH)FXk9jrd3`Ve24+v$?!>>3bx z78S2C`<_8m|NaA*DdpzWXxjsgmaGP+S2dp!u5^k?iNMG1@Yl1*^WRJ3AU5GGoU*@(En0P>PCTKk<*u*1H+9 z-TVyl&%fKq<7>uV2k?ZuMIv$WH!l>1aEl5h4esG^CSbm5G5f-M!dmA)PW(7vd#|UW zENOB^=sZ@_Rqxg(AsBF;(6iCxy!4oMu_m)dO~3j+B$qlsd9Xac-AP> zPvsM0oVk}^WTAEs(c$_K{_+~<_IpPtI>^eeqa|AtIdzjkbuc-UY~fm3RK+(_PygYj zZA*WlQc+1JJp% zsOnAkHzNg~&r6KGc)hfqQ{j_AsnMUWh5jB|9Lg?;4|`d^Ai}C!X>+dl?5#RZeRZXx z#fq&pQ#ub!Rav6f8V-&KRh#Qzhgz4#slQ;Ozdb7KqE`)cyZ_%h+xV}8lm9c8p4%CQo&CrE^P$-P8B3R$bY(y%^#Aez@&7YhHPN#iy*#A{ z+||MjH)eSG2n$Tt58z5mzF|DUnPCjOhM z{x|0z5L@x>8pdr5nB_TV)BscW5i*KW>`QeTx-K z4|u3plXbRf3s0e#>8`2!hpoNV&O@gT?6UebowF{e*J8WK2rOgmCN&8C5W`qW`4*=1 zs=S1|$#$&i+JvhRWas>PhfFc_&ydJm>-Rm=%@x2UD(X<0k}(m!N!Z*higIRGeAXm# z&a7>tSyNQBe4%5Z69Q=^uRwDZ+|iEQ9A-zE3dM+dTy5Tl@0FGj3843sM|R*8Dy+jO zz~$hkreARlntmWu9U*}O>h`YjHvx?*o3GCUgCkg55sCjcDPXjKDk_+Hq+ZE zDGW_eb086} zKulJ56(s5CNSf)uDo_8P8|#X4>Ch$vQ2S%wav==gL*Mg&oizWa^IV09(%J<(355xk zT@7i9?93U@vyve%^m#6-XB6E15z^Q~d7Z=tL{O4%JCU+2_Pr+aAF2@$^($;t&;)ih`93N*_yV8blZ zWqu#oo0odCA*hS|XE(agChtWgCV6wYBa5o-|4AA_P@hK|*9S z_H0OZo%J2y{cz?D{roDcxCGvpR{ZsB26C}4ub{ST#1}@UQr;(QFc=lH<-f=&e_Vdv z+;f(*EBaiNiu}s1i&25a9roiFyn|7yu)N*Rsn3#HQpnkr?^Et5wg9#+5j9YH z`NntFxY4=jFRCYQyL{W;czykFbPl~VWEs-N+w13b?b?~91^E|=p(VD;LOQ#-kwKjs zit+F|pvZj4iF@a*;})bRoo}$oRS+ZneUr>10qa?>E&24aeBSKrlZP^75Bs1Swdd5& zj;?5p@uvTQ+~`C*>;!zmS_68-EY3juTLs6x0j*?iDyUCT&zaO6YcT)Z1}FcD4#b0f z!2+{qURTLOyOa4|HBd|8d*(15H4P3!0w5t0d>W7K7|c|O>vdiJ691}i{=M~5|G|BS zyOBn3`s2pho2p_s;HplC^$v3o*S?DUayC|MUyN8PNdK<>bw9sAiXbxme7g)DOMexpfq)!c4XY;Z8Z3+CRHKT}{>=BG#x= zn=>7Cs_80IC`eP>o;A-Tfh*v#La}?c9(f18t>E;uU%V|rx|s8aGA~9MHn#eL@>43% z6QFpWJMT-KfU26{_1Tv0iuB??-`NZl+YgLuBs|3=Q~hRRzt3O1?DhD%!TF%@;E>U% zjqi$u;v-BS%JFlW))uee8-Hk7;?Zjo!lm54oO?xX?8qI449W9Lx8xO-zvWivzSt~o zr}R9uyUR0OoX^P)$&A0No8c+YE#z|Y1?&$OB=!t~0P2)+MmZ@?&$p_=f`0SD5l1zf zXVos2PZQvQW1cYH98krpZG z@EhkaxX_pkZHZx48r-}k4Ea{E@+whZuxk*fe4|3ux;Op4_#}@MkB%6p5YREQ%4%v0 z{+WHZ#o}?lvE_E9u0e)X+Dpmpjz(4hS+Lp;A%zG@8X`MSN+zRn;#s(QwwV zcho&`S)|tN96wit6~=oE=rA`(iOX-wQa`YdEo9F*hse9tH81$|nzTlzp#QX!PT}R) zB)!=6wUR^3-Hg8Aor@%|em}O;1|hZrZdYJ4BX2A|+~eGf;buyEc@5Q7b91LIZ?nFh zxYyj1bf-OZ%Pp>bTl}|^v5vWC?;XF{^McOa&y%!KHWwn~1?%t1Cv3LC{fittrA-!D z9l^?Dvr#@*Z~N~wvBjQwySqvfM9k2op2@lmJgExcn|` zKV`Ok=36%9267+KQ6|GgE%c9GwAi@TTq#|+@wF#zt`0huHE3sg{h#E?tH^RGcn@m= zQ!qZrO8bhf5oqJF;e7@8KLD%vIP>JstdO9P8UJ>oRV9$ko9NaHU{O3e&;wPs&ru88 zf5&<@UN^uNhYR|W7>;qTHixVwU@^#7G&4S40ZssnZh?81}T7CpYsnydf zxR1Z99Ncm8YiX;x%ppu-Tn#`64$>QPfr7Y(A3QCfjo|RI4v5)(!&fB>?SfNYNOH$Qza65C`9(BPi?2Pq?Dnls(yK&gpKj{Q* z@Sw%`Sqw_Bx$C8>%+MPEY z3LGb6GFuTjtzA>*NDHG^DI4iVgwAM(z3%HRDT0dQOgvHaB$>e_=VSvq;721nb*7xv zYgxbtJYjK95G?I%QnkFnD3e7sp3%e-CFr;4`#A7gNN}ak3gf(??P1M}`OY;x{RzRRaUbC$ zz3^!`s%_L3$UubftS~i#ckk?9d!g=Ug-Mzi1J(bIebpfD=>B{%(qG|ogKRzmk;5i= zDmSEYg%@V>y<)@ackV(-F6n3c(%A^4Ft@1HkUVSkNq(w&$w;|-jx?7`_xS2^p3wf2---{<%D1gk}{ z%jNS!I&ooL!#yD1e=3^>Kjt-0Bm+Qu1F&25u*q(bhY|yfice<>e`XD|+eC`@8IFCK z$r99}Z<58I^L-$Q6>-%0c%a*Pfwqo=#N>`#}eg9mEgEt`W#};kIj^Ym2tI*Bn5cEd5%&ENH8o^n= z4bJx;RE?YOOcbrUb!M*>SW9_w)ZaaL z<#>+SMzdF0at{7dvfL`xTaH0~b#lRtXEK|OhbLdvrG-^+*sC|V(~@a;KDAyI5{J80 zV}hu*dz)!1!nRoII6sypXB^Ts@i@#w?2yx|9>n~~%+6+a&q|u-$MTf{C~#f+(uHR{ z(v48bx{|6e^4wYfk)G%aJ%zkwLiziN{$`+!H(8(}MMo9RE_W+OZs$_Vjt z=iouY1@TX_eu>DrT5k`$!XO)P&pwC67F$;5@c#&JfJ&OiqS$Un7_%0OfBz|*nlEDK z4F(jlg#|6VH6`m^SPJ@xU$lX?dXlaF#98ZZs1Qee88olG59;xkbif1`P!!;2bW$vn zz7ADs-GzsC1v7VCLDjswW}!4#e&ZFYt2b|ro1j$BFJd45Soe*kFp2R#-gxJ?nRL&4Y#tL(L|^tD>>zLpQTmu6*jNsk?WnD_GE}DBKwIQ>D}` zy^NL*Z+fH_NpfAjq#c1rR*C+@4RFSru$evSV<8Y@0TNSaoU7x4-$eRtJ0H`S_ zWsG91l`?NxVD;lL)W8XIS!k8C!$b2#VzY>`Q~3$TilI4c?}vi-%POFb6#<)z2o(R`6q|9rK~nC_5)$@Rk9)n#wDv&8YBK!t2+L2+YZh1B^`8R< z7CN|G#FZd5cZbZrN9(6r`8Gx?11gGdsG7BHHrThZ1{xQy2RiJ(jZX(yn5@?N#ssa^ z?!3*+F7s+$)0FTW&zHh{Gjh+oGI)0SJV&?#FkU6wDO0}kCSRngTBv+tgU)5*dy#SN z`g3=%Id-3)kFQ4e$2e)`+*ZVr_==$!q|TT;&{Fqi{1*cB?MC~`=HpI<)C;#8>~lPS z8~fHFkuee#90n2e(5eo5=Km_a^|CQvZ)Xu@n?C6I z9`}o=?W6VCmghsC_|oDU=1+n-6%`&r&!yd>V)(ZMY%CwOKgxDBR!sp7Z*` zR~dt|=Z+Bb0UVt|SxaX^`fnb4sD#{q=vG1?b3j*BI}5Ap1trR)vi`Yp1rz zhWIe}%qN6iu;fO#$%HwDCHK)w6r2i*EYYMYhpOC{wuxDUnb}vrsq~29uJ9dkFRw0- zP?me&CY*%1jnBFcG#MvLUC3HYH|2nGEhjAqOK@3bR)N}B$@M8Oc?Jdt+TT5053%n* zcWNSb^&iyIWuc!}g?4!Jw|)vDk{_8svOI@}DnKOO^VHeCjo!9mqEKQHlBNXR&l%tWR=w z5w12iFOXK#6?5lnwWPe@`F|!9a@~;I_X3PjBU~?qH1}(uu@OM5cW1|4VXk{Jm>c}T zMBzaLkvn2x@rys}3xeCCznxq>VF@}j(t9P$F9QeD`R8}+%^}%34d+;4v`F5C z)8uZ%#N=1Gk}m`NCNmkE-+KS-h>}OIEB!(c)w{e-094FE9i$BFWa75U3>~OVF^v2eM^DlANLV#LtocCgEHa) z>RY+6*{ctP{P|K#J5JT#Wz|9?Z}o81ZOKB~k2J!Ub~FT~^$XEIb#Yh2YufBK_uy(> z*QS27rU)Q^_RWPmOiN!ka3%=aPZubx{V`4IynP_dKVNrMlHX?Ao{i;mn!i%6RKoj= zJH`UMib(s453DRK-P=|0vf*}IwrSh@&VjiD4Wr-r*2Xr5lj*)wKvS`IXA%N5CX2cI z^!`ZBTdv{YeEnn~)*Y?Xm9>F+)b~s*7B;)>{seZ|@am z$9K&>&BDe=WK%jrw|^Qw_``2>HY@G9xEX21ih)qWp$B- zrHM`TO8ZI3z~e(vDrww6;- zi<9yi>gWc*_Iljg^}vHD>ko-VfEXd!eY`!_?ka|qDCb?4=$ok^(x(9v?tgJcyVu*t z^r*V`u`u5C1=6d!wlu@eC_jl!cy~uv8X_>Up>E&y<|g#SO$9>9a#G~dX=3>U<8dd* z@KpL-aBWwwM1gpouYQxZh1RB9gdOYEyV211S(Y$X_BTz2|Fok@?Y(**o80e?S2q~v zaUZGB<4K-pyQ&hw;rn2@6kT$UgcVyAU5Z8|IaJ^tWX0c$;Cmg>=zVwQ(a-%~KdJDJ zQZu~@2K5KM>Z!NdS<|-mzxIn9G(u;{)o0ty$Z&%hvEubwW4kLmypFb-PrK39F9c`0 z?)=_X`K}-gxSKUNwUjBuwddciJfaStP;2YVW9e}|d)Dk9r*{;968sb{t;|Kr3|k%2Oe@s8Ird##UYt zGt!fvrV;b;EpD~c7{?TGpIWR%uzc+#6$q6#z$}m50CZBT2Bg$z3W* zE6K|_SfKIi@60m0bM+;*!;bL{Au2Pv6;iN{?n}b~>-$?vW>CqCLQR^@k$TfzGCf{7 z6HKw}WtkdRy;Z*XK0{jBJ)2JLYbqaCuQ+ER?%R6K=q6LAN_a#sQmZZ!T%@H@^f*?C zSyAdb zKk;MHb)oax$RQm)v9#eaS>1II7 z>$u$4R?q9gKdbcfvhlnmD8KH`f6RQa$hhb)BxdY@yL5}I+5vR2blJAjH_x)$u?P*) zVyZH%Dq-_x1uYMizrMt%p1`$ZWor$^c9(yA-qwCOhrhVf3GDo5^%gYFd`A zFDqJwyVc%)`*XE$KbkFlm}YZnlCQXSa*HZ)_tfbu;>WnWVVrMiHNRJ1Sd~y7dwiYd z_A|HjzNl(1#L@JXWdO3uJh93pdGZ%>_ds-qE;*g_9o|&7qX&Dg1pN?tU+}*GjX-k0 zFeo(n`vzT`%*tWLEw8AQ&IhyQk-cSx|#6cr^PSeR^w|J^dLka#J#YUR_Oz%lH=T zp_*xL!YMSu>506asJ96?&6GGB0xIwq8z%E}ahWdzk31i*b`(tTx zw=|nPUuf$tCS9#Wc>y(DN;usgw(gpfFp<44DqOFYqGEa;5q_Ntm4>z&f8J$CN#(CF z+P`Hf$_vu236p&(xKUc=UiyqPkpSa`O~Y18(RH$Az>4Ns$f(8IOSlV*{0!A)2yF{$#hcUQWdE5oowwd9Czooq+(Ov505IhseSlEQoY58?tEElT1B-bg@Oc-G| zVavORl-bsS&oApz2@6$)2F38(U1@T+vG6g%=dRk@NoRiTny_;!1y=7^MeG`Ey9|Kq z8ix0zOW3r4R4QeK->q?LowXjPqdC>mGw@`eWXbo`!sSQD{fqNGZP1Jm&--hI{^7-9 zM$pQd?0vH?U)d>cGUsx!m=R247qwWZ*dSdX_D7U$NO-Bi|Ay!F!ftDwG|7{(Ngnq{4Z=s(U$P!`o$QI~x51~@7+u9fUo-=bJU-Pc zAKyLerV&nC*z`pV5A>d8fv782aI8wtt(t9^bh$^lu6&WRY-~Zeht4PNjgP8r z#i7=d{_LDL&cc(&wa*t2hi*=bxw&n2KIxlZ&j`7j951KXH<5v-PBDd@n zdUn9JWc_t(Is3Nkpzdjf#Ivuo@`dV>sz!Q1_v9N~ocw>vo9`_(KW~o^(OKFaR~V)} zetMg>YR9A!V%2iMt2&e&+YW@2&d7br!M1cW;md?g{h=Rf9C^z>2F-MgeafV zgya*Nqoxfuo7OBjA)I8xDAiu&@U}Vj^7&`uDuO12ic+8H>7jViyAuuMC@h}QRH(x~ zs-91)QZD8PQ`xA{tIo3tZ}SoF$@>;AP@#NuYq%t9`(M-JRwMJ`0Bj4UzAFw$$|mde zyi10PNAIA(5-dEB+`jIcT|DRaya=IS^|o}qb4!*#w|EqF+8r#ajD;)VsnGhA9%xO) zMF-N;6HR!GNv%ZYEq!j&y@O8)H-%Yq+FEaBnpD1JCYp2*cyXnmLSfpi{ChMY%-fEL zaqEtkf`7WuL%4KubjM-;T@SszJ-g0Sb5i3X!(iCA9cYcZ|)) zUddV{S<`0IC3w8rnu5iA!o^Ii3E<(PILR`|QQKb~{o)Fxxn+Nw=Hw?Fn3{ejn=gGd zM~7QhO&xTrw^S1jkkcwArLfT@;FP}p#jos?AeL@NrS6@K+n#S)C9W!jfl~0BJPB~Q zfjC&6&$@NS4u)<8=aKmuzm~N@G+*wl^q(|KOm0{7c<{QF_bSEZP+Pkfcrq7YDWetY zhU3wv;c8y;sGCN*Mz9rT(=T@0kFG1NI@A(WqGpZY6ff*5lC9nod`hD8rld`O!geZI zy4BKtqUkVHOO`N9KF+0uI>SM8-ZI&~%v%=*Fe`U~i54cX4ol~?t&%foI-I0pVJ#Jb zsH!xnn&1-)@$Jh2ddq>n>+21-p~_!ZsW10%jq{dnMuiP1o$PzkC#(K3*cH~#;bCPi z>3R|zjK?!ld9geb9_W0u8d~0@u^2S|DU}#jkPSjuEW-T?^SipLsxZmcU8}$I5lTdCM8M{DNC^oLxE!_PLv>k zfdB@g!1)pX2ogj_fcQrO48SBATCCjD1~5x2SZHfjJ$J&1!A~kTLvIM<%uNmPMgWp;{WiUW9UZAl92Pzx5Gv6PyL1X<1;37NgO8*&(ifemXD z%)I=gPkprB|n{L3FW{f85-kQf^fbh${;gC4OQ{bo*5XF0Vxk zeSy&j)p21K5u;Vv|8gi^wBNdV_(fm_G<(#**bs|##>+ru-D`7%Q;Q^pO;4)6f&l8mj>>y^M&o%lz?=YckE?$npQ ztX18zk!&lG>FqfnCm;LRPcj_{!9?IM@cK*1id6Uwb52=Wlbko<8c)f|G(Z1ymMfni z41r`3IHkP2NSgI0WGmB0C@n=wwIN$@+*EsPr%G9p$BnG(bEiXzjRq!?fU2dlk}76M zC{$G-o(DW=ZQ2CLkn(*S8Qz=T`pNgfdIU?x94#wRYyvRz;B7GKc`} zLn&TtIb8?DAkJAbl7^gusD*egmE`M4;JnXymWzc;ZDMG#}26l!K z&=&J=nrviDf1WRi>SPU|wvl2m0QV*#ibIdI3V-C(~Oa_M%(Qr#O z_Q_aopxUEAVMaL<|E7}Erlpm5D_puBDnq}PHYGHJZwXB9+e&6=O}91?_HDlxH<&}q z7x(QR3|N&Vi7{ww(FmUrwl!)UR`S6|A9Ow4fyF>w5W!?sU2hV03!M4c>Fb0t_N*$o z#R!Bm6P^}cbqjq9Gk-R<4bD8LDW3aQx8J(&)+o;9x+Cdl3xZ*OK5Z_5T6k|zbjgy9 zLKif1wajw%;vr7dm0m)x1w8U1`XPU4RFA6SwsibuNxmPB`9W`JLfMez6LV}J?Xot0`xcT+N&(As@W>1TfWC$gdu~a`>E8j*MK|y@-XOL}JOdeSI zep(z6TAFZEI(5tbo=Zl!x$oi3<6P$Ntq4TRwP@YPoO7tZuWVb|xc}4@tf7LRRXTCD zQ(6$}&yoZ;&5W8uns-{AGGKwz%uC#aDxgMcg5V|XGFP1-7NAxwssN~ibyj6dND9Y5 zM>+v|FZ1Ki(G0j}4mk?_K!u;$(=+^JRo``SUx4Xn^hr>E9XJ|}^v5}Vg`;)>2b9Eici?(*S=Q!Jc0q1Ks)bu38K24WLAto%qz0KJ7SsB=>YFD` z7iH)ms=*!lPEa=VsJ1n}x2((K(ZAun9h6gE_E?VzSVvkrWFlJCc67>IR&IdZ*pcMe zZ?RF{+-e*q;x)&8{3jQ@a15jKo6lBfC{3F?>{K^&?5_2S4x?SGMf1#XEM=I~({`WZ zM15l2IV=du%t+jT+Ms~pBq2>f(>W@an9lI9mh@Laaoh*0o9}pvIDPH$;b77Y(){kh zSgC-Lie5ho`qK1HFgke94k(HnN4C%9;*xyyqn~|Oz&hK_p_oiQm{{+j(bBM%OxX3> z-fy~4L?)f%s{KmUA6zmM#zxip5RrqNaZJM^DM(=cSczFqzFk0lCf+qNXNitx0pyMD=t?+Z6YzcOr5j=BL-r^Jq z5>c&dw~J6->o#!mLC+BjX)87o5AT)*D&=t%EKK37h`k@Dw|X5vH@=su+6dm{$PKQ7 z<+DNsd%I>28FnR)za z@HU$#W%k6PCeUTDmey0T+J4!tSBe9k8OkH%`N78sc5M%b6txdk zM(ZV$cF=}yNs|$%R)eZEjV=$;c7>_7q||dtu8#9w6u&U)HIn*RDhrWt0?3>b{KW+* zFMBn$kAi@=gWFnNm-Ax5yMC10Gc2?S{WFxcFS7QePwc(3hvxZ&B3?4i(})^~8-^RC z!Q4O`bkbnR*kT_EBo?Mx^jo2PP!+jJOp=zR9`w>xlXwYcWoJBY8)k}M6k0H#5>8sf zST2k0DGL(>P#7D83>c@G;?&2ew<7_)%QU{mHH2w#lRYg3UBY5J6V+tiE-N$BhMg>9 z=e6_t0eme36_$aFH6{Xr9xc-Lh+JsBbvh_%-P_F7fqqa#&x|PHekrMyikYxr>Zst_ z9$H^-hT=v)mCbGxyw<-naJ7^(I2xs03>teJy8|jQVVGDa?e!|#3kam6b?U%~Vi*^a z{xCX@EeMGM!N&H$iRW5kHeIJ?vu)w!!Nd^uyO`P=ltdx7(wPFMA6(M|Oxi8PV|OC9 zMbf*=1TGq6Q{&A53hvsAqnnFZQE)Y=1egEQ{W&1J7|G;8RW4{>7Ti*3ixF`Gm}E?D zbO9u}dTFZkU3ARK^z__BRBkz1IX5Q9pV-s-zenrl`0sE$?!q%WzHBfr`w5vIBjDRy z*#hZ*%&Kb)>PJ#|d;7o-qlMl4n6vYGhbIp}nQB)`GPb_|xHX18%TtOCrCJ9r2yDRe_6SAe|-ja_d_B+g=(2Zzisyy74080GcF zL-&?$Tw55yei`?t2i9$zA88DOla!UIv6mQ1U{(Z)6Nt50i_v7%yt9+fn+eMZU`Up7 zE)o?P(WI<}V!mhBf*elTCk6~|dNxr<*+gEqx7@^iXc^O5!qB0AJ`jYqFAFoqDk(Lm z%RIO-nJQ-ze+%6ICJ@IcepDfvhB6L9`q7M2!AiSWga^ z1$iWs=`B9zY)vU5C$01WR^GSsdK)AWQ(Bi>Nj_S&@mjatk|4Bf&Wh(t^_pmnSQ!%z z#W5bl;$g`&p@WmQLfn2dcCL&|;J0G~1EQ-MtKFQwu!d{Hk8}iGm>1|KjQnoufvz;W za9zig@}&k{`~IkW2!H373+@ zpZHKM?IYF9y}#OjEma1Z9`CSfmReM&s^$;PB#~D zLi&BcH}l%5X#DWGz~PQuQh^=r8N!M;4*^UNPPKN2fs+xT(cQGEHPvEZw7k_|(WTNh zv7NIJB9&zooh`CmX**@C080s3Tr17nx3Yr0j1HaqtG<_5Nqqt5xw|-S7`li@;>Pc- zmqCQ-dX5r`zL*yyD;bvrOJAXvx=Ss@-TTbFruqARd!yUd(48EdxWu}Hg{;;BB%bwd zL$20wrcWz|qJz%;530*csxxuj#NKzwV_abg)9YZW15IPWJKWcO0^M19r8Nk$s9EQ% zoFiI{VC@W31hM+88hc_t*CH$!ThK)_1}8u(xG-3q?j#ds`_s9}M$34#%u6IPo@+*4 z^h;nh|EVZ3gz@SuxfUaF;xO;@voul@<3cM1HzGR%LZ=_+7RSMYuaKpyr^UJ(iEWpN zrJ;BZq!#%XV>?^=W*t?)uItvV$MIk#>*phPA!Bg!QCv+kDQ>ItEQzp|0vZls+_vOF zcT9k2(3yeGFwja=3u!>f9og5MzSAx)bQH|M76&=zV1GD%?Oo9vc^rJ|j_*^meamVDGbRB0*;7Uq7|!TvIbGr0k9PR%R?*!S^xkb07*naRJxfg15_-4i!Fs?wji=) z+bq$)icF>=&bSts8HtCvwZlW{8@5=6a{K}P+=&u>*E|jbsMui(gJ8gUaA)4YYWiB7 z^n^xEv_XME7c@6BNf5;Q1sg<^!KG(J1(Yvw82YeY$?%PypxnS<0%hbnlAFvfLfsG? zhbo+T8W?_l+_jlA!4kA&&|F82S@|{qzAJlWM(v zoq#a3LZ+T?XWPjU+0kYI_F>LeKUoAMx`#ia8+M;4%Y>M_-OuI zobYtF_-aj2kRp5*M;Y%E-DafS?_dT(c<|OHQ>vo{hsas#yEQRUbR7CX3>`4Xplnnt z)LQC!<)m{4Q!tFRAB`1}K0ZIiZM{zv%8~0|SnCPZPK`FIo~KPjlQibeV8*M0A+Y;{ z^5Ka!d1k)~I16fBw`RfHFNdB^CP|R>=yL!Ylbkl~zHz#%$3k+#xt;?|o(a?wm8ngl z&}n6LfwUA4l$)Rv=WF9f`Me6W;WAO6sf(N4ZbUlVntTLK*v?PRC<5rmwrNh6gsvkadJ$d)#K!f0>h}q z^VbUjOZ^KWa}i#5u`P+(B>{opU7|k}wvkSUd+7ozh#Zw0Ylu+^(G=T?fJ5fsEZl3> zX2~>rvH6{d8iYxCCu@@~!UgXD$)0x)7{I;9SJM(MQPdYqEI&19?E{%_)0$l+!{4=j z0P3}+3B2A2s<;jJ`Ji|;$0MO~&_&Uk%+gc>I8=Tup+vRw+D@az?b=qY0OguWq zxTN9HU+cLQqofTIu@W748EX_>9V@_QAQZE(e$YaY{YzV$*uxg{eR z+)j&DIAm0^)`horOKx(y4@%a4K|$Gug?%?!T$T}p+MqJg*!C#2JWG{)+7@YOfV@Eb(Z3B5q0g?;)$`AHP-^>GF~q=l%(YtFo8<6 zBoUY>FCFs763^2)fUKM`Ki^@=iVFziB@(t3zs46 z5|&2`0{9r`WTFkvRdVdicT$7}qZ1^ZFXWT>NQUKrFb`iHIm&8_jN(>WqWbe#%iwo5 zK9fui+^;K?%7GWoGM#VoUu+?;v+(S)WnDozQK`*>6}cU3Pm0oQq(3XSB{mTq z_tDYN4FB3*d=|v3viyK4g~Q$~EUn$zi{2wto>J(M9n+mw&nJ@$j!Y61j)(8)cdSg^ ztK(-#;20gBst7lLOdcyy(g|xk$GMWVwgtLA=#z@oQ<5aZCo`?n$Nr0*8d~B+&_)9i zQVPIR@-HpP3mW#-Qt8h{7i1!s3+7w8wj2W|{%lP&BC;=&$wwSuXhJ(mr~@>|v4oDq z{blJmJb^`5`z6Z6Qi)Y*Id$C${Tn~cs=5kxcx>b+4o|3O!(^2_3Rb5XEyPDZ$I9{G zQkWmCNDqp{DO(n57m?iQEv@kiONJi|$}GHFm*E<3QkWwcn<4x*1K zEG0&E<)A-TmwK2E1KrqAPzA_utn^xt;hHedEORWBGZbqwUFW2|#!}M7x#)Q9U2|jI z)LNXjmS-UAb3P-D@5}yO`)nyk^m)oujucz2Ys>k=w|wDj_~Kf=JcNv2(w0a4@J-7h zNg@jLY>Qa9_DTHi=}?C(0f;RY;}tG32`G2|6k-H2Z;KS0kM9B)i92yGSzJo@5I_#6Ow~6rLSnah`;*L!TMoGNSf$luPCn^@6Ur z#%us0K@Q?hEf__K?GceEi8CMx1qVyNoq!Z0aierVt4Q1?GLL)O?vUqt!Y4fv2CegC z7_l$Hf*y~VMAotyN^?$_^F~tX3|DRYhM>6CykXhWPPmW9z(Om*?k^2Ifg@f~Rbum?ql9^!>iOMpOcoAYD4wQm|&_=bT75<|IIv z(S=I3LrI|UmSG!TWNL!*#Ag9NfZF3Vd*)VcNa5?D=It7EH5<8WKixQ-8V~A$yvvXHc$iVgMwRXF;-Buw8>#~5KIwA=V@i}P zt=#q#1gC=3M72hTbj)f)Fli;RC0&`>vRDRv$Pk99Dt#`3Kb5p($wOBNq&_fDArP(A zJ`ha@0{#WtD6Q4?t@E`x`}p8RAs`HVKsqoaWz7_}jK(7-$~j zAS(>_)$nZ1SInYWOg8h7;%0Poks7J17m6b|rQ%1d9wSTRc*Lg6hFc3?z`p!Z_ zma+gIeOGrp@s2clPzP<_79ugtB`o*l6wT z)-9cz4KjE#r^R35O2|ZoUqcP%&LB_0_h!C7`8zAe&&ocg-aD08Wc-URZM04&U!`)U zg3$&&T)=lL7-X!B@`TtRtsOp?EvR07%}h>c!EkzoGmCtvQ-As8=kfW^ z{{!50*8_OsiBIDve&Vm;;Gx^`$A9!MT{}p3J~n^;d%yQ<_`TozH3)#8|8M_yoId>w zKL7cDSU?&SXKiu5pZMfY;)j3ur}5;IU&3$w*8hps)m`}1r+x-M@e_XyPd)Xukmz|^ z<335c_uj{_v9XR_yKch|{m_T-%d#E<^y&*F2R z`%iJ}2EgJN*VN&s}{#%tsE z$7oQ#PXFAAEG~4bM_EI-gaSshoXOydxZiKeQYwmwKwXhbK$W*wtht=OB~Ef zM1xB1OSa}I-rU54Ut$X(WK-_q9MzaKsg#|$L)-N_&7^SgBlm+r3>0E(kloxsB^m-S zIFd0Px})vB7HqC*)@qsxfY}3_fqX0jD8UKT97hy4COWL>r=Ee5P6R(&!uGk-gjCsi zXr~nx-dFmM{_pxrpgJ+CMZxV$d#5k{8_ui0LFflWl4B*@zG$WhwO2ezb=j@sjD4Rv z#)LGkemn?$lN|mV&u2Vls`r*IIsKSszfIquU7X|Sib8Wa7zP?RSi%j*rEVFjii}B+ zrP+qPG+{f4ztgvgI5{T?0gS`6tGHvKSa6< z3(ky>L9Vo*?g=uf_PYXTjO_b!*Mysih+i!>HaeU>{Vaa_xBoAkKK(R4^5GxDzP$(C z<3@8HT|ytAOLzjckk0h^zvjX?%j@z)~6rv93ANk>%|8{H<3>YkS*sM=@G zIGGUec}fZLRT%ohcgL()xT&}-h zn-EalTrt`3Hx-j-GYjx05W9rL=#W+9n!Gy))gX%Ar?_VlE^yN)jE){W7f- znsGBp3foyE0=^*Z*S3yke>wnUiIm<*zmRpNXn|X#&AMo=Yv+ouY!S1;%LN-(%;+L9 z+;ck6nxNXF!7&IMYf_gKh$(t(pmU!BKs^2QpJHuo7oK?HQ)7@;*S6oM49SAPa_sf_ z>4ZQRZ=3(#y?YOC+_-L&1`=QRz0VJy?M+Lvgn}djw^QO&L5$8j>&U37QR5dzg%)S?z9;R7G|lzswLf(KPp+qJ+H?L(l|iGWVpx?y4P`x&3p@^b=Jf-nmlbglj*Apkum z-GVz*U`a?&%%a*E_c*o&efJ&~lZ#SanG{3h_hr-OyaYoX^35pmS&bii` z;KX)IKP!EP4-S^(D}H;IiQHf>emXh1W%zRdaAWcDs5z-rK)B+Fg~Nn z=S@;JuCt4}1*+;%)v&9GboJc%x4_!>`RMO)ET9>YsB=GXfF8}~;KX$iD z3_5ch_EN#M?sqwxZ)t*zkhyC1^GKmJ*)uiwOzPyYLQ7pWKk*vRv)@ynM_EMETJ zivWOQ{r5MS3~(ZOm_k}wlK?dA0~5!F%D(3*&`f{6F__QV-;BhnaT1cAf6#bzlc^1t zyAouhGI7nPzLLWcm7k&97!KXHMhp_Qjve!^n%!sY{-oW;(2=BVyPMjE35VDgJ}y*- zy37NV^lNrFS7L4S*_L!F&X95$WtW%{Lqv&o_dzB&Ah0ZOpUEaUSTGYwvB$5t6V4-2 zPa;}yIb$+=a6Cy;-Oue2B?5_oyJ05)Oww((*&z&_seUpu2?5qv^O6+z*)_<<2<&^9 zDHgI-M#T=Q(GQ}jNq^ee*22Q-)U65FDe0CKFcB86s1f+>Z>ne&MVgeW>v$tfBnaQ^}h)}``zFDfAP(4{&DUzjIwIUNv5}suI&PDSshwHg{5`$cj8AinDNZH2?vBLpeklH2D&NJs1Wc;XRbVgpPxT~($ zY;nftJvViT^`ewu`oAwOYM|Rorf?GNrI;wu_ELzktvG+CRXpjV@dZ zorv6i``tKn=yp8&>^DIG&p!KSxOwwBPMvyaT(}oQBsK<&131^OU&Al`!~X%RYb!W$ z;vRhB6F-d~|MC9_>+3i0t#5rLbrBM=D26Vf%(QZd`y7%8{rc5k{Y9L9@tHB84uf<` z+AfpY3+XY<_cz#F4x;qYaboiliBVfIiHH&t9ut%C9cF5tC0$k+M;y_q46XbSk*LXJ z1v+z4N|vPRLhO?89cBPPO~%l~XP^9-B;M0$Mi8nflFtnCNidF%Zupd8;H^(o^Qko` z0AuW12!T#3iaFE4f#D(qyUip#&VG!~OXrHUA=6phJkpKaW9hoh;jhKOnROQ9kZ=tN zy1({r_`w@3_XA)9Em61_nw5enGsgs5#18gSlzK&Hr684pg)W@>`%l2cKS6(Hkqe4l z(`^S#%VHShFVPsK#fkI;b3aHZ47Z3Z^3RpF7E7(2#DEQQPJx%=U`n73-uc1XGi$8IbO zw?3J-R6?#q%Z*JrzW(l_MlMPmQP0g(?GVAp(R4t)7+$Py9nlVLi5&z{(twse!SOgv zVuDCt)cjz&$<+SZ96EFiz^3F9V24!9&;+R^d6>!?o@f`Ojt&(e;!ONBOYNMrXO;bl<-wtB__0 zGtguJGZbZ3_JLZ`|D-cWRXUgpKbT|(boytq)AS&~-pka(Lvdg$49tch+Rfxg6g9@v zys|+%xItvPVJ$j3mzg8*!)jrGt>+n!`xZqr(;doz;uW6hWMJ3~48?uMAw0#GAD&w` zeCH`pzH6x8r-y{y9jN*AG?c6O-mo`!EJz3M?9cTq0o>qWjolH4Lm8)`br8>nQGmdQ zW;&#zii?b9T68m%yr%(eDt-Sd-^q9J zwF8>sIQP%0Qk&j{t7| zwwEm;!+x!tpyC_pfKAU`Qu=~Sh$`Mmg<_hT;1URo6PK+2^iTa9zVL<5R=HL9gxc~mg@x?FxPTx9Z?f zqWL|}^L1!Zj9Advl88bQw&}B=O^~CD&8c4+mZQ*6db&z9<;%?jRyXg|e9D zxmwz2HCE4g)z9QTewd5}n2kyBVrdwTHPC=5Lcs$6fd&~b2TYc9h$3c_COsvTgvBI) z2}nE*%dncWH;`*`#yZ+!#|39?|l?s{_?-Z#fxve>0$Kb$@}qhKlk6`i(mX# z_|A8}j=S!95I^!Ge;K!KZQvW<_~Ytl-}k;xVr^{~PM?0({QUCeOE`D#72I*hJ+qJJ z`0I#IrEGqEfSY5lW_I1N_2b? zcdtp(uEZd`?}v#*BV1w;Z*guy5~%!4tj~MXfRPKTMgKJibS&U?HxqGaE)3CW4r|_Y z7VqAnx#8lv$qvx>W-!{{#tw)va@gq%Omr7YH0Tf|FEwop;syEb`3#f?#Q~3PI^$6x;C{|Q&FT(J1WV5zzJvwQD-6d(Wi zPvFFfQ`ocT0B+vAf%E6j;EP}U*LeEruU8YPpZ(eY8V^4BUi{O4`oH4bxz{vV0-yWb zU&j+qd>X&?TmKACJ@pk^0Le&!`7i&AzhkUUZ{6C!<;xfF)Kg!>AO68_ssO8t#SwS- z;ZOb)KK<#RNzec0&FlEZU;H}(2^zR|0{q3F`p@wG_x*7C`4?XJ4u19j`}-9~Tq%El zU;P8OHCYUT#AETLxpxio)5pfBF64w_5}JU2N$xXVa%2nXY{4p1Cl;A`o}rwT4E3gb z*GsPg4NdQ}`g^pE>?P!Wg8%>^07*naRL@Mnroz`P`MA?Dr-?_xu6mZxmgH4zC$5yQFdxEV+R6$`ZSwn zSI4gwLvP}d1#8J}0~c6*ptnd)ye-8wS%T#&<2jWw21zVDL#LzgXv|J98WNeee08h@ zaJb~4xx`}SS~jezm`ZS*vYKQCq~?FJ+`<^(||CktGpui&YiEN#-NDz+;r&L`SmWw8sVUE>Opg}&ku8R%@|)W4OGs#=x1wK}g*B$4g3D@*pb z?4}F}s%<9t+tW5JBm`n9tS)pnwZ!SGV*2iWAKEkVF&TW2jl6_zk)ZfxYZ#SbKI{zT@Qenx zu(}*7-u6yAFwh0WE~=FB%BY`1oxG%pfxGnK5veJfNjOI@_ zXKZ}8do#tL*dfy1=Y5pYk%1Owbvz@*MltG>-lx}@ru$SBF0#d!Y;oF0DtKK9MnyI8 zDP)2bY>;oks>cRwat_e5EO)n7GE8x51=G}-+A3L-*v!ta^u11hUf%PbPjd3>&DtbW z?F8SdND6^$621i#2nb8*a(F#KX-rZ|s7oWHKDC{94d~mbdr8LiR2qR~gOE)W{>63- zBEneGcMQi3SJa{+x9^c0=QEJCGEr;g7$BH~cBCwVo+c`ZDOkkux)%Rm+c&IQMj+$^ z*3iSXCq*5n?Q5zgFIDm)`F)YKNC)0rfF%31Mj0lEMZHmK&kjEAiJ`=he2phI68N=> zhDjmZnk1%-kD;1@=f^@2uccwr=tN6!U-su)EtB46z29OY!p5fQ+-=I%7THGr|lw?X;#3t@) zI&P4Z5?kdD$E*G=URgoiNy1SIYzT)U_L_l4w0uCD2}_t)5b7|XHsL}Q=L`!Aq{?)x z*tx`HL7_rkvd0YHEyR+wW6E^p`2Bpn+52B+`^)lVTedehh|l5X&OtO<11}m;l$L~` zr7bs=2-Xr9nLxc-k*o%O!|Z)y2|T>z*ysLys|n9LFsGRD$W1*>)!}!Uw+v*?T0U2Ub&oZl}UztYKVY9KB&gG=X-9aoan5fS*&0D$LYBbn8!6qk(V=(YL7&YZIT4Q97q`VOKgnzQIY>MKUVBqh0Ss&Z+ zNTAT{D){Wqv)H`^U&^+S1}M7;1AdnzD{n?}F$Ya(ar9b7wgeL`6q!gimXSi4N)o18 zM6E7pz;yepCE00Bj#?6h)BrGu z-;kgblBd8NVeC9)k9UcUP%MQK9{2c}+#q;PITR0|zP4vXKL4Z`PJN=GFm7kgyh%%I zzok1cwf$vd@YI?vkRSS?PjKE!w+s@p%z?Ki2U8bzZtd2>4dFx*F&A-}lc;S6zo+)J z)wU%QH+2hwAX_-jcTWOA*In514E-`TqqX-Xj{yrj$Bf5ZwSM(OAr74|Ka=*A$9t6r zY6zo-vn1URP3g$c5KrUq1|+2##LzfQ=OjUGh@k9a5|G4azBD)%kO|gT&@{Q3NF@DG zTA2dkhR%wQ_efDhn6)GqBg;Taa)L_lth8RT zI33M8HkM4RdTqLpBot1MelWr#MM+Dfim7{)rvEz=qn>Q=1r_-jDYQu%mhxhVn4RcACM?#nBoKSSbj@TcpKm^BQ$ajHU|(J77AW zcgE+$Y?HK_#X8O6cq4hvs+G)*E^E;pNRk!Fb;2_8zRxNXr=!$zp86Ujf>UN<%9*qT zS0U{RCB^t)`*cjLiAzgb{ESo8sKk;cbAs8ij$4dxbF9Vnt82^yyg#%|oQt^6$;5uU ziA0)iTT?&^3j43|bGybwbP8ph+QwAUZY#iHfVvVKvhvD?cNSuHzF4OzWtjeSsD_iL z5_rQUnloQR;AhYVRP8b&%CORDU3t`@SU<5Y6_e?PQ4$0sLD@x;Hj?lBXZ#GG07yRI zlTDqPYwu)cLclLPS4GRc0-7{gFiK1iY~q&(Uu^)uFk%nm;uKmaEF*(!6^arM@)lJwGd1kf%3ZDTQd@YwHDnWLqs6^*j4j_6J=nHw z+j?!|wQbvYZQHhO_iNj)ZQHi(xu0+HOJ*|3{5vO6r_bd+)XPUhAALBKIXn zl^fS0moN6ljkOY4%F6indL9cULYo!s5XKTGeH0z=JHA_^w1Q;yBl`GYMVkbYKScBWwXmp_;9OBnXajAF5)z# zq-Lkbifl*R=0vO9P|MMffd?;6EjZzb1;FCq%$g*((ZFTAUI*okz~yA2jP`AEl~EnW znB)&4W}3NK2;+~1s{Yzd7;_yeCU*T5UCM|D;79+6rtc__Br<4lLaJRa%e2%|n5#q0 zCN381nNpHvV{a7&LQBC*0HavehKjqLzjuKv8gGJ}_4?W7X~+;09Zhf6r6OD7j2ND!l5B9J|HV1J6l7cSw6Jw>MxFgoi4vwzh*a__ z3=SNf{Bpi_64fTnfGLSDK1$@9D`}CudeIFGH`vcUk;;=H|8}AbS*oPH`xyJ>s3@v8 z4=qLZ?P`yjivxd3?<5q~)d_=+!DX=DHc-&8{9(BLPiWq(qPi6ONwn8b5T$`3(BiF< z%$C7H2)-<7`GE_&C7(>AuCZ=ubL3T(86mpOpF;ze#0o-We6*pYvOG3foP{a3D&7NR z-}FL*0e_;kr)4Kb5}p=51gNyW&&%t716Aw*Rq}cCR!)UgIh=tr7oLucS;7i=YHkN&e>xgRei9d zEXxROi^4x&G8{5)aaIXl@{?_`@@q-{DO-+ST%BAo{YkR@J3c~0!`Taz<&78{q|@VD z1{kMo&eJKipOirDN)5()1xQ*hJ#e+S1cg5PafI-rydX4% zf&#esn)fKI%|<;OWH2u94+}0j3Yn0J2F$!SsGnIYqj&VZYUFi$hgTv`$MT?cL#t1Cz zDHWY3(ReKZ%v$lq)Nq%uE^3J(EzD7k&r#v}KUXR3>g~UpRD*w!zhxjg1t>+z67=T6 z!;Wa;Slq_n|6<2`4cxQIp;mfrivv{={7=%Q<+L1NQE;7Tmrs6}#O#NgAW zL|yfGYI9byKDCw+zNQfRoHnbD3CzDWJud6x9IH;2Ox9CeUAE{tg<9!Ah^V6q12gOL z{nC!;5L6%QV2e<__}dtqQ;SFw6Ygk3U4c{Lq8<<1qhNivTiXcH@SlC|@%4uT_lrf)p8bLo6@;owUJpUUx4w?zZ`d zVc~9o#4t7Y?7Z}76Xe$&@J8iTcarvHm#f~*F<24xeSvIYy{dJ4utt*d|mt0iZdlV{F z92oP`$N?o87m=5y2g&Zcn4MlIqBy>HWGgn%{3qTrTfV^-iQ%c)QJG;Y`NU)(Cr_%z zXu8zIKnu(@j5TE?SKuj8@V9IkylsYIk^e?>+B(9-NOK_KN|0R3dpzy#o#C>~f}As_ zPhs!UR$UV2-WBCdV7hX)Z8Q8@WA=y_MfEF+TG=o_PRGwtoCtc8fw2s=hl`b|G}5ii zHEEjZ<2D07i~9E9XbK`_KbtV-A`eWAz{@^Y@0V+^Np$D6mQ)03l@NneW})fUgd@yu zhtz(IKT>d53}3yghz<~Qrhxn}$rDwpL1=jphrWK956oPS1ks`2-Rijb;5{K^Cr!!I zmv~PR)b)PCfRa2ZPsQBy1%9kVleb-`LX0Ugn8Dk#comtfS`a1%(z!o4OBK#@P|VTGCQisu&x%nq9&J|ifqK<EJm}L1^p(fIEh>10q0%20^4b{g(4W zXG_G5%5YHP6>f+{)Hcn2JWeGa2a=3oRih&l5+QK*64^@M>?pBC&J`^PkS7ET<>X%x zFC&{F$C~nMt8fE&5Hi2*u3onm$hg1ionF5$eLUI-t-&#ucTp{+I2qWe#tG^UR@@@PoSt#jQ;sWGkZ~0-^!>zw1MOn3^I>>` z98jcONImmtgVpMAy^^$S8R63Ee6r^IdZ{o@UmsE129W4j>j)v_*)vuz@7cp(!I~B3 z+7LR)wns{m8SHrm!Z|?=l02v&aYc)|hzyaDBxAQ)xw1V)T&MX@Sg&9ORP|Y~sjB(T z{IOU-A%=SJ*VXViE3kVaBqaCE`)+Kb7RrK%oDjGBRz|MUrL9mu+*} zYe<2+$m**}TbPh|IX&8z#ZO)>hUDDm>YI6G-#z^I-km(P$WfVb_+^_UFD63EKi!U_ zIdsSDBUY3|a>FrmV+<)jvJXI2=8o-%gTpntgt*2fYG`oQNdw>S|THVb7p#YTl!^bZ7Q8?Nu0U z?S4$Z(Aj%8MGeXcHu{gZDKsjW87hzKm#0OXwtY?iJ|Eq$G6Spth}5b;t3_tf%y|v8 zKkI#!9aS>L%4mE^S;;GJ*(Echq2bZZ72p%jv7^ejs#-m66hTIfh z)MX)K#2qsa$g6p9wRMqQIxaVj0d|yjJy;Y=$-f2|VV>HEvW<4@QC9}y(m`8!g@3}A zp_+x!7)1jK6q8}-Bi7C&QdV;$ulr&nvVv~UwLw`Ctg^f1n?%2LjSk&n&*6+j@0wf6 z{vOBZH54F+D@~4qMHsW79M&1ZssC!ykb=73lPf6MWSYApK%{kz6K;Ee0~6PX!I(}Z zAth$M9|kh@0pMcUZT&Gx);Fqhu>`lLi_w6u|aY!D*vu zEcrVu)IX0On~kCSVI=+bapbbh_v~elZCv(tr9owX16`7rwG^18C3mz=0_&H2(Tr76 z{^?b;C_X6iUm_<>B#I5Yr*jE7sLD_%)$(FKV)u!6=ncAGZIk7C`P$NJElq`w>IlBz z(y9`C%u;iTFB3K_8@Mp(acEsIN>|q=SoGcOA%mo{1lXEF85NQ8SV~R^?!KJaX0Mzv z{2fD*RtSk_X{egR$)j(tMjT6*a&KCse9|bmI(d(yRLsSsIY;@JHnIzlIxeOQl3#SB zI==~MQGKki^}tIZ*N!zBWEAJLFc&qgF3aVQd)sMic|UImfLjj64>!B6_AO#1LSw~-VS?UVkqnVCO60OH`vi;p(z^|2Si4E4fk2E7 z5&L_HL=tkgBLhPw#HVGqvfLv1JUR(M)f1;V*m4Mu%IdC-4?YRPY4YwiB`I?C>Vq_; zGpcY)7v|F|4rjeW+x=sOU{zwZ1*xPCYYHtWTf|uNu1j(hU`KePDFPqnGw0Y|5}(bS zr6L~*?k5Y2y=HJ`0V6~0w1=YDUb@lu(dc5u-I!<4GsF9*M9Y04sDcwuM{}e$~VHQJA zDWv&H6Ni^=Ok}s~+-X^-Flm-GHZM%zD4`JkVVqFoArK|pb|&GMRBK>IMhzbFnpz-6 z&{T?-ZSksF;a!aGS4D|ZBU3BnmyDnH@)62U5)rMQLU>+Kn$-|Ij> zEM3UI7zWj$NcCV`_6k-K9!f(fp7-~kq*-e@+i`kU$Gx|f1#7YTX?a-p`10?j+43)8 zi%I0@G&6C?sy?D)@#(rv20Lt@n9Y$%Jy8r83BSVt!a07#ZD z6~=(JqRF2K>>`H6{GE8j0{u;pL+wH|Prfcc*GWcX%`6CgyIyQ)BfDA+2Nl>sV=M)+ zc@Ytxg@mZYr-_j|%#kO1?i#U89n>zY%OQ`mj-ni=D3iP%c+CeanBTA$fg;xDm0p|m3d_(Uqx!;a5_BS7{`76_j|0O@|61R>rVIZbJz^I(rLa;u?TRw(Uy!B9<#OL^~o* z6ecDnw}a;#U=3B%JHsM&qahp>gykC4#5A}x0fiivZTDoj(gK?$>{pJhZWiaeZuiAT z&j21pRgyxhbhK)L)YYJCFoUkHN!y&c($P88?eE*EuW-)WFcbntw}Obgie?Z&vJ`o= z;hZC_IVpt@HZ_i&{}h>3RA0&KEQ+x;ZulX7h!bE=f*!-pF5kG%^~Q3Rze%8)uJF`-byCE(Uge)=w@2$5K_Tt6bB0iJMu%*eM6{F!cw3lhCzi*u@B;hSM}lf z4#bwWr3@E_0?j1NcqhqD^Jvz7*UWMrYb$*z%hQW0MhjBd8L&1>+bfAg&Hl2i1s(Xe zr?zjA&{m`;jT(M!hJ~3jp%|%>l!^aHg=@ObkuWQ%ZB~CcMx)4e-cyC*kzx9Kh^*-9 zpu*p6W&=609#28M34z zl39Ko+nY8)T5yu$^H1QfNzodZMN`c8>CnW?(8vYxDXGJgQ{?Sl%50u2v@-NOjT8#_7}_Vo$QE`s+Tm9|LEWWB7imQWLi>N z-P*+GB4yQNuoP>G%w%BKfeZQS0+9_02khQ9j{{|Tx}a2}n#78^quKrnOuf%1RuG-Y>AbZQYIXzmatHM~8T zAr(f9jbi3R$#8=ZgS5k;eGK#wP#iUT6T_+P&LiHP_kfbMfwrS^Ykamj@>(KRlf9xg zN;dY|m6C0cTEJ*(uy88xFjoXrYTKS`eDwUqG!J3l-NDP=5N2;k6y{7FgVCC2?42y>9n!oLL#k>T%Ma*rw-oC@$IvAi31 z)uM`G_o&ak_ny3^g12R7=WfiSTUQ6 z4u0|dO4Dg$I~gRpozfjEI=hGmo?5qYYkJ=dWqk%%KeN0OQ7n^z=hpWgE)Kf1*ULp0 z13gdk1X9sv8I`Ola}w&ucp(zom7!KR3UX#VPX+5v_mnWCn=T*@Qb)x^C}T-`B1tS3 zlfenArvPVDQ}i&zJbx(r9iN;2GfeOk#;#DMuFyd+DZ;k!X7AJXlJ|eJlu*f{9pmSL z9%AsiPcM{bN7JVtj4TvTW_=~{xr0&>t7nFXObH9Ds3o2WQjQh46?wd7wib!8yL-;r zG5oCJcw&?|yY5AG3i&T+DI0OwecRoT^=>ypI^CXgc5&BSEM^JpAuNzf%2wrd_``ST zr4t65kOjyD)*`m#vQ30sq_u8suGu>GU3cIEUY2=Lch!?#88zY#=E_y8moC{$oT#mC zhqt=KFdZQ#@~TyYaT^J*4cEKMt0ng zUv7foOY1|UlK-a{fK*)mGcfIsl#zIXISsn=zb0gz&TX48&8&W3f^d>eoNlTkos5BC z31Dc4q=xMp%9sfwLgWZd1T=_^O~aTBNvIT= zR@!+Z11*M|aoBF{Kh7)&;LRJ8qe3Zf`t5 z18RTFg*r|`B#PeJyjnu5foW3CP`A4!*vr<3UiIIh0 zfeQ_2^PjhqS?J=LNCxX=Xt~Auc*>=qo*NB3l#8qkDKuU?&4v8M%Z*^335tD8fS!Qu08MoK97(p;u1HBVze2FdY$k~iOe!6QwN#~slU{C2LS4|1Hp3$( ztDh|sN>X3adeOaiK?Pcl09}afAkLl4c{r@3ZGQuB~X(e5Y3o3w=8=%uR&51P` zmsBc>gM%~OV|Qmln4n>oQMFeQA4mKuiXWX`AZN>o=wz-_!yZOz%E<^v-5&niyhRj% zsppM?Ih{w%E8t2BvU?3^JYB8#s`py4wWArN@Fg{Gyp-leC@8ItLBqtTXI4cEq&GWN z-JyVM7qq{2%!kkLPHhoqK8+1506jF$=NI7igk~j(u?{gEVRe>G52j6nR2nfjpBASl z@!+w+-O!90Yr@+$`Xsa7(>fy7Tx1-~wvW*G)Z33}eATV9FHn1DYnZ3h>MD`v;QHjF zU{om^sT0rYL(|&HmnPGq0$Vd5R|!@wBN#{^b=&WU6bR?@dj4hC`paKlkto$Ngf0p1 zk_^?UcHRU>q8KsxXA|FTvvD`q;hUrX(lTci;(?uVp_LhpQuJFQDRQ>G(Fwvj&ZoZ6g9zWis0HxUmMxSa~-DYMj9uJR>rCHnk5=0p%rz_&J` zq~q&3DIe+E@9QJ%Vc%VDpvR<(q4-B0!|xe-uT8eYiG&?F_0F3qH)`I1yq$CTd)+Z% zclBxvBqqR1-c`>2gzW21q}Q!Wf7qJI*DuQ=`Ca$N)R9*XZbf*cYsjm4_x&~pF|Kc4 zz;DN~tLND5;O+EcpCu*!XVASEadAXC?bg0)bm`e8IR8s z6KHq7#Hr2Uz{({J82C0NIq0)0Gk@qgDhZ7PA7KKO)o3l3pGFRMaq2?J$sUq>4L0d1t#`AymdxKAMzqm)IT|uz0qg}DgY^dP_M9ck=-C_mn z2ItZ|FY&PKNAmf73)^HS3Lx;J;WC!_;lUYf1xUy$fX5gqE11{oweBEw`W*-&J~gC- zQV9|i{C2vn84>U}VSw5^4scwrwxf(koP_s!VuJL?rzQl1r`pk-H46+yR}E3~2ci1<)C_ zia2n_vJ2sSb$^)PaybXgm?I|C?taM1-9K1A_D#;F0u}hV@XE`rtHNw4@0|F}pabDN z&9pSZr&$D{rlScJ19`D$AGd}Ek9H0zAv-WhHONksZk!&S<@NjH7m1c96+e&IwiI$59b5bDG z+A1?0tmuB_2^h7SZfYnvSwTWSlJ1hK17Ny>qh*AUU--5{+6gQYtT6_mMZypt^C0mC zeaKXAGR>fODnJOBgVWVazpjapA@ojBC0(?w$aFX9t&MWAy_;WW-J|9wcOSzT3EERV zUlevV3eV<;1n*SRBj4_{AkNAH_+){2^X5n~s@;eOz$i&Ql??nF=GlovxT65}Xk@M^ zYwRrK!Tfd~R-S@48z!$1%bu$UM{Xtm2KRj0b{%{tL35O4$@{Aj(BcbVZ}~H$Wv6;HYs$9Xx)DFZ1oM51`Y zo7t!lltCgeyL89TfsWlPAQhM?O$-qZ|5y{kXx>$(@*4O{p%|o%Y366(8#@haMgiuO z5D<0${1tJgXWx<=nW4u=WL*tJSv+raLLteKTd7E9XAFc|J$jzFEMGSzba*LG%$sYgZ!k^&Dw*ey;sS0(-TX9wely&J5r!t1|@aRUJYcv*19-0z17 zgVp_cmNdUQIHP*iyuAwcp+yH1qcn0fO6@nYfHyu6#D!I;{e){TCQ|p`C0h3fzto6} z!d?UonUv&YwAqVSciUFISGN8w$oqkp$?=5(`aoGXwa9Sy)hQM2bl3Ga>FpIT@-q6G zpT9$cOKfaNBmQxt+4jA!EOdkbSw${JAaNZEZ)8TMp(;zriW*`)P{gs6Pse<>V?uEB zt9P4A0CWMUPXe(v{6=@y$}gJZ$;X!TKJYIt1q~-d0zMg!y9Y!h5^%C*U|zj z9=oaeIe9ekXZP)-my6_jIE0Z9YI1srlys@Zi{c{r4jt9LLCY!a7*kQwu{_XMt*$Y9 zkyESwOpbYCDrdlu9iNYvCkGddVJhm>ymisRKGDmkl$C&ySl9G8*QzVZn8RMehKD(I zm?=jAB&Ycg!Hw;)?sWgL#;l}wsZ50M(FK*~*Bpwe6n|XZ@~Bk7?GUpT}liiD=}c<>`?#F;avaHHKxNR|*TR=r#cw3o`;gWnxW& zgh^;1&0}#TD7y)y@CC(GE{qLCGkA9rI}4=HGHk|6@u8*MA=ImZ47U6w+LB5-iF5sD zM;*arqX{T;3I+*GF?r<6e{@C`cHU43yibExTW{heC015y4~Ao`|I>M(Ri8FCHpT~Y zxZBs%>9WVL?zB@LtxCc7Jcv=Ze}7cY(m4|A3l;h#(*mKud!7O&!!BFOa2Pd#(f|BhlMtap|3SPT}|r2gjpYgNv+m7L=A`a*SpsOPHh@PZK~~K5mR|_ zu%j?zP6}kzMXz9nB241^+4sueG@X9GtbS*jJNN)w0rQoHm0)ES>+K$0e#tKW(6a!EB)ab_ExS>1~jg(!_t#Ch@+gG*fh@7s{`@|Iy zPpJ5W4nzw2ySQh?IQ=u`%*KsCu=1-^>5C8MPzrpVF# z5rdJGUeTof^)5JTX_s1FJY+^Q5ZC|(*P-?UAQFH8f|Q4KtldZF>crN&F0yAOuBg;8 zvwYQ#IL~b8N2ba~=a%KWz^@zaJCs083h>Y6v3m)wbsUr4z0@e|$K*EKc;> z9f5bgt~mfH7y6T9qEiXpm#sf=xI4|(90VSRML}>&fV6&?y1owqsKb=RWVF7*`m_lg zCpLH$o&8N7ymxr-C5~ zGxb;JVnLNKENU`626wpfn=qd_m5-bWIHJHOF~Avu0A=&OQ2{vU>=qO|ZaZG~x4TzB z>>gMDi4i<4nF9k+%5BCSjK~A8Cf92Nk|~WdzBR;UmTw<;4<)Hirt4facC>I-Ps*Pa zE!3MDf9|V2M8#mTk^g}B4<41{t_<&HZPNR0wL*8)PYIP&m}{X&HSZn2!volw>UXyT zgxE;YumC3R(gfze@`n0Z?PAC(0FS5l2MQ2-0-)TV0TDzWC;$UNY;#?ML&Ws??###2 zt6T8bV@itzUROFD_de3}9@Ul;#c(sE(Cf-NK-#9!!lk^**dZd+^2f4&%V0U$V6mEp z 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 L-p|?TvNHSvk2IBB literal 0 HcmV?d00001 diff --git a/manyfold/root/templates/mastodon-post/mastodon-post.gltf b/manyfold/root/templates/mastodon-post/mastodon-post.gltf new file mode 100644 index 0000000..f9e83de --- /dev/null +++ b/manyfold/root/templates/mastodon-post/mastodon-post.gltf @@ -0,0 +1,154 @@ +{ + "asset":{ + "generator":"Khronos glTF Blender I/O v4.4.56", + "version":"2.0" + }, + "extensionsUsed":[ + "KHR_materials_unlit" + ], + "scene":0, + "scenes":[ + { + "name":"Scene", + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0, + "name":"mastodon-post", + "rotation":[ + 0.70710688829422, + 0, + 0, + 0.7071066498756409 + ], + "scale":[ + 2.471118211746216, + 2.471118450164795, + 2.471118450164795 + ] + } + ], + "materials":[ + { + "doubleSided":true, + "extensions":{ + "KHR_materials_unlit":{} + }, + "name":"unlit.001", + "pbrMetallicRoughness":{ + "baseColorTexture":{ + "index":0 + }, + "metallicFactor":0, + "roughnessFactor":0.9 + } + } + ], + "meshes":[ + { + "name":"Plane", + "primitives":[ + { + "attributes":{ + "POSITION":0, + "NORMAL":1, + "TEXCOORD_0":2 + }, + "indices":3, + "material":0 + } + ] + } + ], + "textures":[ + { + "sampler":0, + "source":0 + } + ], + "images":[ + { + "mimeType":"image/png", + "name":"mastodon-post", + "uri":"mastodon-post.png" + } + ], + "accessors":[ + { + "bufferView":0, + "componentType":5126, + "count":20, + "max":[ + 1, + 0, + 1 + ], + "min":[ + -1, + 0, + -1 + ], + "type":"VEC3" + }, + { + "bufferView":1, + "componentType":5126, + "count":20, + "type":"VEC3" + }, + { + "bufferView":2, + "componentType":5126, + "count":20, + "type":"VEC2" + }, + { + "bufferView":3, + "componentType":5123, + "count":54, + "type":"SCALAR" + } + ], + "bufferViews":[ + { + "buffer":0, + "byteLength":240, + "byteOffset":0, + "target":34962 + }, + { + "buffer":0, + "byteLength":240, + "byteOffset":240, + "target":34962 + }, + { + "buffer":0, + "byteLength":160, + "byteOffset":480, + "target":34962 + }, + { + "buffer":0, + "byteLength":108, + "byteOffset":640, + "target":34963 + } + ], + "samplers":[ + { + "magFilter":9729, + "minFilter":9987 + } + ], + "buffers":[ + { + "byteLength":748, + "uri":"mastodon-post.bin" + } + ] +} diff --git a/manyfold/root/templates/mastodon-post/mastodon-post.png b/manyfold/root/templates/mastodon-post/mastodon-post.png new file mode 100644 index 0000000000000000000000000000000000000000..8ba01144da8197ea205aeb92a9f80d2962ef12ae GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blv(yOBG+$o^Eg)M0h&_N9qzFPY zF-kG8LPabP0l+XkKyqX<8 literal 0 HcmV?d00001 diff --git a/manyfold/root/templates/mastodon-post/mastodon-post.sh b/manyfold/root/templates/mastodon-post/mastodon-post.sh new file mode 100755 index 0000000..d950219 --- /dev/null +++ b/manyfold/root/templates/mastodon-post/mastodon-post.sh @@ -0,0 +1,30 @@ +#!/bin/sh +test -n "$6" || { echo "usage: ./mastodon-post.sh <link> <handle> <ttf-file> </abs/path/to/out.glb>"; exit 0; } + +out="$6" +tmpdir=/tmp/.mastodon-post +mydir="$(dirname $(readlink -f $0))" +cd $mydir + +# create tmp workspace +test -d $tmpdir && rm -rf $tmpdir +mkdir $tmpdir +cp * $tmpdir/. +rm $tmpdir/mastodon-post.png # IMPORTANT: prevent newer/older imagemagick -clobber (non)existence + +set -x +magick $tmpdir/mastodon-post-bg.png \ + \( -background none -pointsize 48 -interline-spacing 10 -fill \#FFF -font "$5" "caption:$1" \) \ + -gravity center -composite \ + -pointsize 18 \ + -fill \#FFFFFF -gravity NorthWest -annotate +152+100 "$4" \ + -fill \#9c9cc9 -gravity NorthWest -annotate +152+130 "$2" \ + -fill \#9c9cc9 -gravity NorthWest -annotate +40+470 "$3" \ + PNG8:$tmpdir/mastodon-post.png + +# -define png:compression-level=9 \ +# -define png:compression-filter=5 \ +# -define png:compression-strategy=1 \ + +cd $tmpdir +assimp export mastodon-post.gltf $out diff --git a/manyfold/root/template_godot.zip b/manyfold/root/templates/template_godot.zip similarity index 100% rename from manyfold/root/template_godot.zip rename to manyfold/root/templates/template_godot.zip diff --git a/nix/docker.nix b/nix/docker.nix index 83ce7d2..f54ea26 100644 --- a/nix/docker.nix +++ b/nix/docker.nix @@ -38,18 +38,18 @@ let finalImageTag = "latest"; }; - # generate the reproducable blob below via: - # $ nix-shell -p nix-prefetch-github --command 'nix-prefetch-github assimp assimp --rev e778c84cd62bc8b38d8e491ad3d2c27cb8ed37d5' - assimpSrc = pkgs.fetchFromGitHub { - "owner" = "assimp"; - "repo" = "assimp"; - "rev" = "e778c84cd62bc8b38d8e491ad3d2c27cb8ed37d5"; - "hash" = "sha256-ja5pFwpnzLT2MDIR8ISwC6+eA5UXyqRZW2CMCCrF1Q0="; - }; - myAssimp = pkgs.pkgsStatic.assimp.overrideAttrs (oldAttrs: { - inherit assimpSrc; # Set the source to the fetched commit - src = assimpSrc; - }); +# # generate the reproducable blob below via: +# # $ nix-shell -p nix-prefetch-github --command 'nix-prefetch-github assimp assimp --rev e778c84cd62bc8b38d8e491ad3d2c27cb8ed37d5' +# assimpSrc = pkgs.fetchFromGitHub { +# "owner" = "assimp"; +# "repo" = "assimp"; +# "rev" = "e778c84cd62bc8b38d8e491ad3d2c27cb8ed37d5"; +# "hash" = "sha256-ja5pFwpnzLT2MDIR8ISwC6+eA5UXyqRZW2CMCCrF1Q0="; +# }; +# myAssimp = pkgs.pkgsStatic.assimp.overrideAttrs (oldAttrs: { +# inherit assimpSrc; # Set the source to the fetched commit +# src = assimpSrc; +# }); in @@ -76,7 +76,8 @@ rec pkgs.pkgsStatic.inotify-tools # inotifywait e.g. pkgs.pkgsStatic.zip # inotifywait e.g. pkgs.pkgsStatic.ts # job management - myAssimp # cli 3D editing/conversion + pkgs.pkgsStatic.assimp # job management +# myAssimp # cli 3D editing/conversion ./.. ]; };