From b4c506b9f6f50046e4dc0b86ed9a68936b9b9ca4 Mon Sep 17 00:00:00 2001 From: Mirko Maischberger Date: Fri, 16 Oct 2026 15:11:00 +0200 Subject: [PATCH] Implement physical Wipe transitions and refresh examples and showcase --- README.md | 4 ++ docs/transitions/README.md | 55 +++++++++++++++++++++++++--- docs/transitions/wipe-down.png | Bin 0 -> 44190 bytes docs/transitions/wipe-left.png | Bin 0 -> 44607 bytes docs/transitions/wipe-right.png | Bin 0 -> 44747 bytes docs/transitions/wipe-up.png | Bin 0 -> 44221 bytes examples/showcase/README.md | 7 ++-- examples/showcase/showcase.tex | 16 ++++---- examples/transitions/README.md | 11 ++++++ examples/transitions/wipe-down.pdf | Bin 0 -> 2878 bytes examples/transitions/wipe-left.pdf | Bin 0 -> 2878 bytes examples/transitions/wipe-right.pdf | Bin 0 -> 2876 bytes examples/transitions/wipe-up.pdf | Bin 0 -> 2877 bytes man/pdfcube.1 | 6 +++ src/options.cc | 2 +- src/playback.hpp | 2 + src/renderer.cc | 47 ++++++++++++++++++++++++ src/renderer.hpp | 5 ++- src/wipe.hpp | 46 +++++++++++++++++++++++ tests/README.md | 5 +++ tests/meson.build | 8 +++- tests/test_playback.cc | 3 +- tests/test_transition_metadata.cc | 2 + tests/test_transitions.py | 24 ++++++++++-- tests/test_wipe.cc | 44 ++++++++++++++++++++++ tests/test_wipe_replay.py | 23 ++++++++++++ tests/transition_fixture.py | 3 ++ tools/transition_gallery.py | 2 +- 28 files changed, 289 insertions(+), 26 deletions(-) create mode 100644 docs/transitions/wipe-down.png create mode 100644 docs/transitions/wipe-left.png create mode 100644 docs/transitions/wipe-right.png create mode 100644 docs/transitions/wipe-up.png create mode 100644 examples/transitions/wipe-down.pdf create mode 100644 examples/transitions/wipe-left.pdf create mode 100644 examples/transitions/wipe-right.pdf create mode 100644 examples/transitions/wipe-up.pdf create mode 100644 src/wipe.hpp create mode 100644 tests/test_wipe.cc create mode 100644 tests/test_wipe_replay.py diff --git a/README.md b/README.md index f396648..cbe025f 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,10 @@ Fly adds a controlled leaf-like drift in arbitrary PDF directions, with the same reproducible review assets. Push transfers momentum between two softly compressing slide blocks in all four PDF directions. Dissolve fractures the outgoing slide into deterministic glass shards that clear to reveal the next page. +Glitter releases directional fragments with brief warm sparks. Wipe sweeps a +raised, beveled wiper across the slide in all four cardinal directions, revealing +the next page without stretching either image. Fade remains the next planned +effect; Replace is instant. [![CI](https://github.com/baol/pdfcube/actions/workflows/ci.yml/badge.svg)](https://github.com/baol/pdfcube/actions/workflows/ci.yml) diff --git a/docs/transitions/README.md b/docs/transitions/README.md index 8cc15a1..94600e5 100644 --- a/docs/transitions/README.md +++ b/docs/transitions/README.md @@ -12,13 +12,53 @@ review, to accepted; a passing build is not visual approval. | 4 | Fly | A page drifting like a leaf on a controlled gust | Direction, scale, readable flight, controlled landing | | 5 | Push | Cube pushes a soft cube | Deterministic contact and recovery | | 6 | Dissolve / Glitter | Glass shatter / flare and sparks | Stable geometry, bounded memory and brightness | -| 7 | Wipe / Fade / Replace | Physical wiper / crossfade / instant | Direction, clean endpoints | +| 7 | Wipe | Raised physical wiper sweeping the outgoing image away | Four directions, exact reveal mask and endpoints | +| 8 | Fade / Replace | Crossfade (next) / instant (already available) | Clean endpoints | Box keeps the classic cube. Unsupported PDF effects currently replace the page. Future effects must preserve document ratio, prepare full-resolution source images before motion, and finish on the exact static destination image. Geometry is a function of progress, never an uncontrolled physics simulation. +## Wipe: experimental, awaiting visual approval + +A shallow squeegee rail sweeps across the viewport, clearing the outgoing page +and revealing the destination behind it. A dark rubber lip, metal face and +highlighted bevel make the moving edge visible. The pages stay flat, readable +and at full resolution. Travel eases in and out and extends beyond both edges, +so the rail enters and leaves completely. There is no simulation or accumulating +state, and no per-frame geometry allocation. + +PDF `/Di` values 0, 90, 180 and 270 select right, up, left and down. Missing or +invalid angles default to right. `--program 4:wipe` uses the same effect and the +normal 750 ms programmed duration; document playback uses PDF `/Trans /D`, with +`/Dur` reserved for dwell time. Explicit cube and instant navigation are unchanged. + +Each page keeps its own fitted aspect ratio. The unrevealed region includes the +outgoing letterbox, so a differently shaped incoming page cannot show through +early. The clipping edge is pixel-aligned and concealed by the rail. At 0% and +100% the renderer bypasses the wiper and draws the exact static page. + +Try the [right](../../examples/transitions/wipe-right.pdf), +[up](../../examples/transitions/wipe-up.pdf), [left](../../examples/transitions/wipe-left.pdf) +and [down](../../examples/transitions/wipe-down.pdf) diagnostic PDFs, or the +[Beamer showcase](../../examples/showcase/README.md). Candidate contact sheets: + +![Wipe right](wipe-right.png) + +![Wipe up](wipe-up.png) + +Other directions: [left](wipe-left.png), [down](wipe-down.png). +These are software-renderer candidates, not visual acceptance or hardware +performance measurements. Fade is the next unimplemented roadmap effect; +Replace already changes the page instantly. + +Local Wipe captures were inspected with GTK 4.22.4, Poppler 26.01 and software +OpenGL, including a midpoint from the updated Beamer deck. All 26 Wipe cases +pass with address/undefined-behavior sanitizers. Cold sanitizer checkpoint cases +missed the 500 ms SLO (up to 1.47 seconds); this is recorded separately from +functional correctness and does not establish a hardware performance pass. + ## Glitter: experimental, awaiting visual approval A directional front releases small textured pieces of the outgoing slide, @@ -241,16 +281,16 @@ python3 tools/transition_gallery.py build/src/pdfcube build/transition-gallery Add `--update-docs` to regenerate the checked-in contact sheets from those same captures. The default 33 samples include exact quarter-progress frames. -Use `--effects Cover Uncover` for a focused page-flip review; CI captures all -implemented effects by default. Gallery capture reuses one Xvfb display and +Use `--effects Wipe` for a focused wiper review. The manual transition-review +workflow captures all implemented effects by default. Gallery capture reuses one Xvfb display and captures up to four frames concurrently. Use `--jobs N` to tune that limit for the available CPU and memory; this does not change the generated frames. Open build/transition-gallery/index.html. Each effect/axis/direction has a looping video, five-frame contact sheet, full-resolution individual frames, and its input PDF. The manifest records the source revision and binary version. Rebuild first; -captures must come from the revision under review. CI uploads this bundle on -every pull request. Download and unzip it to view locally. +captures must come from the revision under review. The manual transition-review +workflow uploads the bundle; ordinary CI keeps only one GUI smoke capture. Download and unzip it to view locally. Candidate captures are never automatically promoted to golden references. The reviewer checks framing, direction, readability, motion and final alignment, @@ -291,6 +331,11 @@ native-platform or motion approval. - Dissolve checks deterministic fracture geometry, bounded shard parameters, portrait/landscape/mixed ratios, PDF metadata, program selection, distinct sampled stages, exact endpoints and a reproducible example. +- Wipe checks bounded and monotonic clipping, symmetric travel, all four directions, + omitted/invalid angle fallback, exact revealed/unrevealed pixel regions including + mixed page letterboxes, deterministic replay, GL state cleanup, PDF metadata, + program dispatch, complete frame sweeps, repeated-playback RSS bounds in one + shared context, and reproducible example PDFs. - Pending manual approval: realistic Beamer deck; HD/2K/4K frame-time measurements; native Wayland/NVIDIA, X11, Windows and macOS playback; long-running playback memory checks. Still-frame and geometry checks are not substitutes for these. diff --git a/docs/transitions/wipe-down.png b/docs/transitions/wipe-down.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a9baf701b6763fbf1ddc44b263936659ae0eb0 GIT binary patch literal 44190 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 literal 0 HcmV?d00001 diff --git a/docs/transitions/wipe-left.png b/docs/transitions/wipe-left.png new file mode 100644 index 0000000000000000000000000000000000000000..f9f0858eaca13c7cf641cdfaeefccb9a19a69781 GIT binary patch literal 44607 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 literal 0 HcmV?d00001 diff --git a/docs/transitions/wipe-up.png b/docs/transitions/wipe-up.png new file mode 100644 index 0000000000000000000000000000000000000000..250291cbab67c5b13e72f579dfde69ad76bf16a6 GIT binary patch literal 44221 zcmeFZ2UJsA7cR=tqauiKq$7wZQUz3+)M!wVj-mGhh?EeJUXzFd9=bG9s`MI)5Rj6f zpr9ax8X%N_NH3v>5JKL@^Z)1m_ue<|9pjDr#(3|(moZ4#dnY?0P#K6G7qV@0|gn{Agp9~DYg)*K1_Iw`V#xgKeglpZqYaE!lIvMcH$q!Da;}(1f zQiIezth+Pw^=dJbYWuiRM~4eg2kcGZN9>Ll9384VDt~8wkpD-Dn0BJ{T(8$^ zVNaa>4<6{PQX zf{r$?rCDEbac8*wNA^@lOaAF+-=-z)DB6XY$b-Qg^_@PA=VTni4cDRJVfeaFPRRbu zOG!Fqhm1RZ>+09BT4&HKeSfr59X~k)2By%gi)xnaXuXwg#lw?k*kl7Pm(YT3k$dP(@(&pEUkN-V2F2hcW?O- zEg5_B4C^I#cXtkO9UATD=O=)?$aj%pA|&|Yc03=02&?#9^VDvoWaS6&#t|=rNE|C- z<3;L|%D@Av^VFl0cl@*c?u-%$gvm*%@Wth2H&@p`z@dA!IW#hoPR51K%cfa-f8%c5 zzYj$IUd+3YSEAT5E}etJa} z6PFW@0KRrkjTD4K9(E#)kG@l#8TMOafWdG_)7|O$&CShd^zOz?I}8TXjOQ;sEKJ#I z7d+YkEXf;~^OhMF&wb#8!IOR?jZNhY&u&J5X8@b((p29{oSL!~`b@@>F)z-rG6{LK zY<3`NBS_RlWXEZS&VN~;mcv|E>dBKQQ->da0>1i9MfTCrTfhchWjU+8*r*@(2t1$M)Q#NDSRs?6;N{E&RT)9ltKZFwG-Aw*aD3j%Twyk|nj3@>NqE z(#S^dN|kKzn6#wm0C$-G-*-5Qj3L2ii&>eDC-?F0e`De$C=~5*0Yn@f4FtYKN4oLx z)2G#ymFvgX)l8&$IDS8)z7eJfT)UZ#-!QO5=l9N^yn}Au{}Dsq6r^v?ycFaDpJQeH zwXr%@3!;wU+)&+fTcYZlQEDN3|7q&H-_zw+V(booTqN#yY_`tOWEpfNG8ABzH4YJh zMVzkxwzvP{UZ%e+SjgNw_Kkl(roX)WP3Yen42Ji4*p9vA-w%`U{{@GBHt6rDF+6kI zUK*Ly}?j&<=p>&=>Kc8 z@grwZAJ}?t?}DLWt~8@^j8!lVjeI&BY1Qbj5Nl_T908$DcP&6Bj)=ubQzOWTv$k zb8E=!O0G;--`TBzy6avUE^vd0Fh1$Rf#E@ih`195;!2kO+!En&U^{aw{kmF~k4#p7 zg~HsG`lWNG9C{Pjlig;w67fG@KrEn+lftH8==P_F;(l+$!>i>Zo(9U*=xf~96XN01 zvKG-6j}Ah*2zyz)(T)QDWQ`X&pONeE_=;j)PHjwKjw}oCcOT>&i%{p%0y*<*gPi$v zK+eud%e%DB72zS;!f)SYv^%5dsI zWi@;8dS^63m|w4A*PSJz`6EQM zw%-p^ieAGT?5e<;xgzn!nf|Zk=lf^@WjA~|EwjCP%O5ne?z&H1e(~{0Oe^cs zy8l21-DTVWJA132xh<$Fgjz3XC!J+uK1isp_n7atrH&e4i@};yoi9XxeHZE`e0Il# zoA9%sk|nm7o#?X@*5hKd;TuPiGltsiplk4hQC0jAMV2GK7rm=1X17x=Lm96$-T8TM zdFgY2U(H+Nl>@_YgACLg513;)lpUK0ow@J#j7(JpZSWJ`QwykKJcG#2W%5N&GC`_s*O zy`WRq{mz?ROrWx4_-qV@QK;gY+@K-(?T>qpnKZ<5W!!eQV{WD(L{j>=PaaUd@MweB zwHKKUime?u7%qpGR5qlVTyR5iRu=ghocHS?us`MD%9X+PolUQ^lRp2CtDTMrIMI9g z_g~wA_Jx^uj{~Xhs4OdETn%A#(=)2tG%(v3VkuOo(7{+3UTi#fI`ty6PyvT_*KBKF zo27m1Zp$paqln<7ytt}pEzzaoRim5dfyN2S#t8Xf%W;kvA&TzY5;>! zBgznB8r;s4;U+m}e(J1H1t)<=GModfU0R@eM0JlRNsAXiAlmj3Hx8n%45W@T-n5nI zFn3%H3~+T!<>+AYv1Vb~ytkBPz9Y-vytuFsjyOGij&|s7n%y$tdWpdp14V8%)2*Pf z@&_M0zr7#WE--Gh%tu#05Gza(m1ynl@VFlS3L;(_ACeD6$v+65+Cxy32CUQsi6 zSgK0@=4C2z&3!J9{@IMo}ca%*0mizuGoj` z3&s=T=R-Apa<}^1$SEm#wa^dEp2pgZzWTF6cn9Z^jd~0m&nSLB#0ZPNNs@f)QdGXG90I|fd?qd1pho_;$`>yR z%>(2(U-!avFKmD9oxZusd-CWT`)Q)+W3t=eOG$AW&y<3~*~1X@{-1L#qcZxEQ7>)%bZU z6(*Dbo+qP7Vk07@{fvrcNONII9CI4ic=36`)z$Gvl=rF?wor{YA)!Vr__py0zIi97 z;v5i4?B94U@hF9UOgCl}uV7*N(qyp>E$Vf%!9IvclukS2@5#DyF=lPB<29-9I(hei z(!xEbm(D1ZBKSslo!Gc09<$3}dk#3w&<$vIjtqw-AtS9~r%jBPmv5p$Cru{;AK!6G zM=yOxeea=aU$LrP#3S0ym@Us)p)MK*7-%OEWaa1`ClyhDzEoA{UeNU7Mi?B=BXe%s zs3_K7K+e@+pl{d_PZ z)bl%x{jJU+%F4@Iv~AgQj7BiCoT05U*(Y3AkejQKdMd%mpRK)Uj=(Jyox-?%ijBm) zJmYLoI$49{GPBaD_xMHpbnLm=v* z4d#WD!8c)f=j%{v139OOw9!|w$44}>(bS~RQCDOv6}N4wEUTT&a*`kto8vE8aoLb@ z{2RL)7=5iqm>rUCcqn65k-)A4Iw^CjgV5x#PnEGVG-B+v9IJ8nm_4eT=_Ip;E{P^s z`_5O8TRr-xDrfr41bQes$m%8h%k$UYO!-nedkG&fo#ra}m?yJ)*#>Y=cv)P^d;S&0 z91wZexrgw+*+5(#g|2ooAQJ8N?&!dGJOyvB$zXlSN0qrCL{A=3#kqG6PK(I2vtvhW zcCxa@345v`Z8c!~IAV|(H>G2=HK;S%ZVKIy-&pOhWo2X|7vQ!=vua9B%Aw43OrCie zN}|*6I=%ec*<|+N7&3En=-kBp1I26_(h|DLt_iy+m8yJH#|e!!wso>Gmk?hyqJJAa z+8%99(vF=(tX74yLDVVy9^w@@!HlIt`%*b)B!OL6Hqf$CWYb|GL`k;;UQ&9v?91oY z*^Bi%P#L$}9%4!D(;12)x*e_rZkEu-~4r+ ziPi@Hj@3^Xl}iT$qB20VR?y&bi0vTAZrLYhWSUP690@>W+yz&65+mphpW~ER`?<$VfFHBLE z#$gtFYNbQr#96BpNJP9VJi#+)dK)PyU!S?xk8Gyq962oZ9o_e&%_>#xV~%XbX`w!*DU67Rr>Ul6wUWJ8|IY-osQmj>*XJm-)S7+1Io)TY6i_bxEnY#hVYVYmJe5`25 zneMdE-R#>p_5Au%bArdVf zk1CZH9ks@!Ar_efBEp<2b}{VM8vk`jZ!Ll2(HxSg3k%FkU!OXes8zspH8pk9jXMk_ z7%^gL=k}-(eC306))&AJ=OX0Mn|*hj%*`ohzkRLdQEB`v0ovG(@bxuL(*eiXyy%MA z0(bd7{%|4G{hTYt;V#qL*AKGEY+to;Y1(gv{cjt*?_v#S>&(7smV5U$VpzsG*H-iCU%*xV@Sukc9iAC>kt_9Whuzcw>Uu!PYKuQbK z^T&ZtL-)BkR{UH)^Q|nzeA{@&*2c$E#3w_D3qLHpXOwh>{F65OnpUU4{>po#Wtpzk)%=69D09Im96)@S!L*u zOR`IHL5HP9G@4XC+xp;(Dh2gm4z!hMW_4~mF~`kFyAFM2!^GxhEZ7Of!>3orRa#$K z(-k|(-o+dEhYngEZ;Evk?>FV67Wph3KAFuOSLDAwe?szeYQuWynvSzgAYq3kL7+7B ztWi=rqymM;R&`WmKSA|%@Ig`49iyKTAIs@Suyt5Eu4VLQQS&bbxCgh0=4{WJBWcbV zqzT{sl>1U01nWil;ro<6Mf^ebtxiO5Ad7^&h2>vB+`2$h^#T@H+Tw!qPU3v7^I=H- zVAI=e{NWeS6s@%N`mXO>#<=alk_?fC6TAfEG!(4X;DHjeK6M;7by)0aOZn8wKic3k zo*-j}1(EX_zBf(#H6Zr0w1e=Agty!JlnqhRK`|(SN-fyZy%12L7P6Z|r|sp?7Ah|y zmNkR&2fgh`fH4;P6Ds0}2Nm3r_~^%h4|%d)KQL<{Riz4g>=Rn|DQ(+9u_94cW|`?w zkI9g28H^Y?6fyL9>4WNS>~_UXz+%@v2;J+*og1h~!}u4hOebnyDzo~{DX+b%6 zM;=X%XTdq&N~dvQDG7VTpg|XMF8ASTrL$vFVE_13!*)~oK<-`VS+?@QFQh=KqZxdp zpfuxi^nFhx6;E&a?v#g~Z|kP7Z06W*?&FZc1?IcXNar7c?G5U)no9O4tz_Aw&7AX- z0U@~8dc{X`AY$;hX5FNFEO85n&G%LSyfaQL`!(yk*G&Uny}q>VNrrJ~h&YkC(iFaF0VW!2(QOr_n zgT1Qc_ykOqYTv>sdx{IGs2hZw2f=syC9w{%H(ec)?pc<1U*p_2P!=D2BT9FX4ByBL zH8)yW*m_XhWPJfI0b+zM8}pn!W>9j`dPe0&E2Uk6Z_b~PaWE~e-#Twute{nq;$urG z(je33r{N7}D0$WX3uv?6;4x@%j^9jT&&7&<5iQ+xz=`mchti`ofE?w4m16}O|K_pF z4XL+qSs zo<964=I~4HMeIiYOLTp9@Vur&g$wK}4Pa@q1G;uTCXes!!FMi_MN5_FDW!u}G1^hL zWlF7G;$j$b3$Poot%fgt#9OF%zWr+al2bR!?N--o|CXce79 z8yt+SktIMC)Tf%gLJX$kFygupT36b4H`v#pY)j?hnGUM5qS};7fF*2B)Bq}Zv{OH+ z{jI*^FvPZ5j63k|J7pj%P1%ir7USHjHdE@r*RuxqlQROeEtF2|M}^310Xe62UXCbG zkpPzRVeHn{Tb$0V0WP?OnbCC#p$ZQVl9<>EtAJE6_@Sig49m_?xV@2%PJddhE%o(M z%-NJh38B=Opz_qM3iuDvzyWR7xVkTQ>T%gt+jx*=;Ce(CndIp zsyuSks=Skk@EpqM*O`-+1cG(J^BXcK`t<U4F5f{A>ys&cQw z_+Fbfo{M{)B;(kSi+*IjQ}D{PiAjC{Ki`&jp~g2r-dhp|la>(6wNd*XO|af^pL_L( zq&pm@r^hj0xY<_iM~DRss>pB*UeG7<2tEmueUjiYdE4nzn-6_m7QYB2rJBluGN2=u zn;YSErFEz5dYY#5@TEqD3-Z$DP4vo)9|Bfx&b_E|aW44S%>Y}RXJrqw&ESOh!1&bc zg15w9k>^*3=lZ|MAlFhFnF|)qLN6LvB7Wkb60EHv8_RCdysKYujwj0w>jQtV)b%vz zX+@sy)(lAzWE3}HONsYg`j82A8=f1;G;67`pSl7{gT86lpXqM>Gwu=<{HeHBWMrsm zBd!%hySAVuvpC+kcBBJx8+g3jv>hWb7y%K9BGJEhJ~%I^>VHPq^IaHs>!yyhj(EXN zTXi1+F`Yf0x*!N;P^k{k^y-Se$_g@GeS;tn5qLf$S-%G)d>oMKnpPHF4)1flwUTKz zpKg`9#m6PR)-u~Mg~~X-?!%uBopqBVG-K^lPY}|Z;u9;0nE$4 zvT#Z#;AmMCtSug2{)xRG%&vS%TSDn}5{D0hC)ocXqfjj8qj%o9igM`(*};LDB$@Sz zl@M?8r%#xdFWaUq5&|I*Uve52N!t@7)?F10N-cc#(MWN!m7dc|HRK4!N6$c(gCN2( zLyo_1AY<`Q>M|9E=VEz7#@$e`vbg%Sl{Cl>OXtW$qvpka5WnY?pPW|Dz6EzS1mIB* zvg}~Yp=f{!f!f|GujDZ|qMXe$*0;KNMe?(Y5@w;l@~c@+FtOBZ^1W>T+zM%uTuQ3M zX<~2g5$Qi->4l#~E*|hc)7jbn-2ZFENM^%&#+mFZZai5H`PilLLc;77!jSS_35wd# z;Emkecx5t`h|1WT+Gk#(zQ}5Rxkoa&>ymTGzFL#x8o{UJ9XM`KHR{!qfU%x(gQ*z= z9${5HLl?X0s}YH83Ie=b*`D{^D^Q_#N4Krt2sVq#d`<|C&&6l|W$1Vx9j>ffQD!LA zvB#ZO!PfCcyArP~9(UR=4*2(xo8t>YWa8DAsFXr%ezQl*10Dg^T|u~etyXfEMM0{} zh1Ie5uH6RM{O9kyJ`Gqbw04x2%Hw$);79FGq;^ZHqSdGfHigNL zai|d#fP*BQOENd3klctrJG0N&$9grwKxUAx$1Z(1Zp;mS6{Ai*&Ih(BI+~FwB(g`y zzBui06{M3I+}uE4rOwi>s~J!}9W{F>V{>x+u#E4Rcu<1_E|s~iha8Wg?#9HSR%nLd ztxJpJK7+D5wQOK<(qjF~27wXWUA@VgZDyFI#Qh!=c(hKH;Aag=8+=S$1ELp>ZWW~@ zm#es$ofN{#N&?;5BBXuimntqaPy4Z>x6nHYcPS|kklPq?3_0*@LegO?tm`X$dl*rg zE)*t?&v#O@)K4B_1b9fA#@q|Fs{rt5rs|lQ3*A?`3D@u<8cu-t6OaYJ8AcSabr7sB zDL?&0SnBa>O!QV(O_$CbtM<0(y{Y!2_)duuPqBET z?NzeJK0p)~P~O5RhO5;!tN0A=^N5^j=x* zh_4n>I-@}aQu#s5=Fz00wN%0PhC0D=ju8$o>1Y{<*>q}}{FZ%>Ul9umqErfTU1iAAeUr=3|QdR8JD3h>L4lO7)oCV&7!ud(Fb?X z8H|^9>$z{cC@G#jqoa4iE=W7x3+pP0?m>`|ANdc_jFe{;6DeQFoU(s3dd8wDde@BwF?fnKU{d zk;on1T#4~s=3U67HImjbl(a`Sj@{8lKf=_-3%5>ksy@0a5#3>sl&q~pJ>UO}E(g*F z4xIAkofOpxl`VkvdX8Bte| zOHzejYctx~=Ru6a&iH zN7J;`y-DrpZ>`UVO0ejcmi^N?*(^dmVZ|sJ`r+oOhB&8v^Rbn zAD7<&ochQ-uc>0&N9q`?xq#!*wD>j6?t=kA_f-KgGRv2ogQ=dv#1)bxeJ|t`DS|HU-Rj0j(Gf=9T4bRW{ z?ZZ8g0sp`5e8JX(c>bx4I0I3Q7Z8c15X}Zqa3>M#xff9dwfx}zCvG+&l++CX&==qy z05r((@mZ!HSCNtSbtzRh(YGM3}f@9mJs@6gE96Y&XNkC1ABr6cfB;|nt;IA#;$=N zVp>|Ji$!3x`KUbS{R1F@A7gH_Q9RUrxD=6StevK*h?pJlw)0f&YXII5{qpp{hr@9L zL?E8RE&tsPvb+?$sFPFiR-tzHCpyIA;J%@l={yWl+C!uhTt;%WukNa0on{r)X({X^ z{o8-X%|SJ2S&Fxd9LBLdx9cT~(7oyM7i#%-w55EAHnak{y76;2VfUdpoK$M?I>n(N z#nxwJO0-SYH5TwJG=Oyiwajc<|2!*{_i^Q7Gzx8CF}<+sbsKm=%x z^cUcX1sgC571o&^E?2@^o1i&t_1>B9+44Nauy9(~##_9a+BHQ%Gd{>)DvFm(wF9*$ zu}62NL$Jk>I!mk`qtb5??9ys2Uft<8%iyX0HLGy8WSHxvJ6r`@ zKyoQC(cB$#MJPN4V%|)8ZMW7uXNG4IcXI0DWZe_^u;4Ef8cBMWlpWwpeX@Da^=mup zgm?<1OXVqU&6Z6JXQ27A!H)JqJ4$Qr%L|&Gs1#|uriVEpi&fN#92ru$pfz_^=s`%c zW)rJ^QdJ9|Cg|kTCr*L)>#k?V8%|5RQ}HZ4z6+(YT@2U=R^?LT1B6daHw; zM$!_>_LsY=bMa2yl>|H(sKBM9;65}x+DsYXp)btR?|l=M4tk8*Rl8QWff2Qd zTiY+kh+os#J-6oD_Fv89A^$^4iWB!zP&RqUc^=u^m6?)iGVdj#hq(bkOy6(Zq+e5` z^9q7=aCb}+vqcj;-xQk|&XKacb{l_)7v4O=b<(3$*9#iDF6%v1Qr8dZY6W<_!h&?` z!B01VK>BiVq4>{J|LA4@#}XMtCXXYkw#7KZJ1==C#bNEboW5QrPiOAjJ+tg_NJW;~ zr$Tel(kOPDXtY8+L=xDa=CBsxq2UPZ@ZRO*_Huy0v}>flST-G4#u<-myCm^xCOS6i zleqzLm}72l{gvY+B-PNYx%*AqXO9QR)nWfX0NKJDK(_D~;*usvg%OZ6fI-f0Z;w&O zglpv2Z3B{vl%+G|`sb3G`-By=+%FX8DodMXTiHmTH9LjszLqSk9PiioI4(a6s2+*v z`C8-Wl6LvwQe&IB5GCb!qHv9tk&X0{x7G&>lNlt;2ybTrlWN%L(cHc>s67n;Hw5bt~%p{^sRF4`oQxV zBiG%|hWhzdS6KTwm92H1>d7zkEvT?Tc{0LQqbYixO2|sQKInPXn~|ORv>u}b z4(A)}ZV<;zA4f?2e4ff|IpsAIN*va=+}zd_^_4wPy1L_o&;7TWVRmt$LSt!RwGTJ; z_K>E!c8&Yqt{yKjP1HP}S-=RuEp@JChkcJq^jDtXSlw1y#JsuOdM#b;(U?w7_e;YjCRvCe>}Kv!uif6hj_R?l#g(QsVajk;42n$-#jV z={UxjGK~rk%NB?A`<^wWgYDw!T&OqX^oB-VV=S>H@XO%{#zsQZDv?v+E4StA%1rt} zfS4Jz`wfW}dZi)n*G(4yrac!Gt-ZA>jPEIN|m9X9_=3?xO&%-2gqPan3Yr=snCcr~C6q^6MVx zL{kF}m~&K#)amV_VUNi{?hgd59QOa5?r+cjLpBn0i-*waTvt49kvUwd<-i#ZSE(=i z*dKOPLC=`&UR;l~h8~}$UmQLiD_}K=3KpGnpzZ*5I;_BW0m}6W#H7@V8+Af|ukldf>t{zmTW`VR_2e z@oJ1Hw{rSmN9i}sBSWJpCqSJe5O>OPEpkom(X?0{$I2<$WtHYgMR$_dUKomFC6zh7 zVQp=^sTenAUr=aXWi^F$BKOlKuS&}#`tB`@C#)~8UG)9%F?X#SuRB?nKeBl(snZ|3rIk!~KNS%F%!J?Ze>diFu-ha+6Fw+0Vn5!4O(rE4j zLyMog=Ry=bH}W#``-JzlDTf=cx(x-=n56{pZ?bzXw)FLvHAtr|J4^AXPmI+%y*y5XE z$+J46aTO{J0V@xH+2ui_EJkXb^1bC%YVZ&I;`Cx(lijDLBjSthb?TO|FD}IP;VfPb z9LtGh6>{}A;08?@_nCzXH`M0DdH1`J1lX@159bT1aku|qR+v@gov__ zX1(g^mjsvH!`dxxUIJb;w98X`k)f5;zAl}mV}VUmRX&h(0ve^&>wuc(1fZtr!|~?k zWJL_%EZ*gao?N1=6D$~o3bsO*g1T5I1TJ`>d@s4h0TH9Xm#+-HqYAu1!{pk~@QJ!% zO9=xCcI%`wb6*=_(=dR!529TN@G=c{4$551hI56+h-vTNEGbxHkCny7cR96P1v$0n z3v+6LB=2U(sHgDZR4hHH!8s$3$F!K{e(K>`5Lp%+FpA2j!_Krqm{Eq|ST2ei0i+$9w=g7cO zfOs0Z5!W#W#6jBMaj+baoz4D|o*gUuy#9`g{)-E%x<`m?znPWo9@wuyhyqIBU-n$@ z=02c=mG{*>IaqyXp5_S);Bp(N1Gq?g*yQS|u7J9CPX-DAml0T9DJ)a$=Y4+r+Hb)A!J=0^>87+czw0tsl$w!;thf zat#x+cD6Z#&^m{GLr!zFj!{5=T|HQ`ZW()%&*1ohUF%4)D9T^|zm zQoi*#PHE?3mIR|fM2D08mxtussh*1kpW|dt%a5EtNuDrWR=;kY zmFtjvn>bJdu+&LF35vN7TnyaKtX2wI%SbZ{K#xpoMthS8O!qw*#{6S-rj2M8>Xg+* zJf1@NfgP{(t4~({ZvrB5((b}})(Ty8sZ6AiUN8Ts z0&j=Yk+T|VS7{ni-8#Z7=S6{%h_DCu?bDh`Cp8~fi#!NZyusf*5nX}4TIl=d?J1%f ze(>QpV)Nm9H1tb*#(?v?Ml^XJ0y^EI0ySp^N(rR^2@ zSoaeA1up@@u9<7AU7LL$ACBZct|rc1TTROSlvw#fL~BCWR9NH1)t9UvbOF8AB|aYY z(2rx^uHXs2zQV^_bwnTebmb@Dgv9?Gwj+CREH(*pTjh-rqf;RSqO~NxwCYn@T#zIx z;=9V)D_H6+SZ4jQi=FQ{>RAXCKBe4{l*pB4ANDe+%D4yZ1lz3tQkA-vyvvbg{jPD>^Z-H$Y>J> z)uC(R26vQhBMR`BnEe`lnZU2p+yG7kly%SQc2NJ8a2`jo%UAz*?Il2z#i7@M&<26k z)o8h?UYiUTDb+&v6W}HCc#+aa12!dig<%n`xQx#=hO%7C?pDg`#!8`jk{KRJd}cDG z577dwejMWAY)f5%7{C)V|3W2zC!PoJ z$&FIJ_^-=Ppa2~e@%)IOIuiSh9(O+p#L|EeJ zn5GeGjkkLo%6zx9A`8y1&{1hMwH`FU^HMSqTw#S@FB9$D*UoM#FfpHT2XeXjtH>{h zB6eE1V+hyt@_!29$itq}b^eb-?Xv%j`=;11KVI}R-7=M=!Zh4;+wXy4Md@4haf^~) zDuZxzoTyX)FQM+Kh3XKoW?nZyXU&!H-q)o4`Io|}tLymZgLSYu*NDB+&Aw-~hC@4vNPUQ7W*nPYuD9zKd4lH3uiQh}R znTGKBKS6Eu;Yn(yK#pYiL$rllxjlfofV!3}lYrV)FE_ljD-8P8#%IAcAU8@K*(2w; zhGG?9JgJ#GXWqJAVF4&{RX^-LoK_)pb=M%Mrd$e#z4Q(GEIQo#_N~lKj_wIKzCK96q!*-H(lYo-B94bR#xkN z4Y%IL_09!>^v@{Ksvh}a2i?+XTP98D5E+trtL>-rMtg&8iw-61D)v0zCP) zn%(CZ?*to)O>vaHa4KPsNc2}sf3HvhePbl;NhNh>{ddaxX@Gh0*3WR0-C^iMs$;^LDjU0?#1&;j@X?tx5$gXaF8s_-#VcB+T#!+U-6Dv9q_mbP*n=(jHyfGspxm#L2W`ra$-<$9+h66F^p zCm`VUfx+gMR-R7&(&As;r(BXnf_;U7y^Rd8f#cT}2Ai{fZ(Y!p;Z4@h_MTT?Saugx zdjkHOrRh}%7B?F$v*zq>txUvI|C&DmuF%mHqCDPaV7|z{=Q zZ1RjeMo`i_Q9Ev8Y~WwbGfZk+dLZV5F)bHPwCQg60FF1}QcQLx?RvQH7!KT3Q~Y^X z1OWyo&_4NZx{}fJ)zZHSs+i`;VMZDvH z&PWXLcy+v2Af^$_H4}mCPT!6&e@mZnMiTwxQ4Cw#n5l5Z*ZWgjje6MP%(VheJ1bCb zMnBF1fX2N4g5&o=3Hg6xSPhV~%K&+M!ptVqbLHzkR`nBKvZqH+gZ?)~v^Ft-qs$M` z!6Isk{14pIa{X%OnV}h6Qfb)>Vsd&w2`cX8X~IaRxSFPB!?+yG_I;WCrymf~AEgr! z_1P`;ed_YOd~B6W1h>ih<(+p$`e{172Npbo^#|vcsCXAMVC?+>N=WkpGtN<@x`9?= zz_GS5$#ls}SyqM;$Mluw?OGL%p}-h0_P3G0sDxVi8pK{zi<9$l$5N>RFjvPF!ZV7h z+04KEDli%NsW+_$ip^OOui4=8fw^^3qUyoi}QY_!8H_xAzO?B*xUhyS$v@X;~_4ubgq z?y3?vP*O>5%?Yp#ajGZJegmAWwE0Bc{?E>;qcH9{pp(jLylik=YOUGx1Hl4t9D{bj zx$;lwHi|*^KLHP$z8y`xsNT{VGE0+S%#4r@oNbO*-TIT*3+wW!!&Y?{0unSjcDzau zNMOf;3$=a#s?6L@J40?T?=oTbuf zZ9P4AwMv9^2Ae;qA(;#GCM1*LI2#w95{KTZZ`7{g)BIGC9g~|RD6FtNOJunILV8ih zqXIVYUmwlngNRNJJb}4Y)*koq1c#}r@W@L4f$09I$=H8x{&73tG4vX{3tS)2+IDQk z7;9UJfPn9dLpbi18w=b};7Lp_4p6pum7F^vlh)9&|AkNHFaC%FEcbki^^^==4D^(D zd4U;``yeQO&t-`!!3d~tWriNkxdbSQ%YR1WSiO=QnpxJ(d`#)9T{y3Eg)8*Bu4^y1_quwA zi{q2}k)fY2@R6CdeM4^|fW#JETZ})b0T6{^` z7hqW;)1Ur%JF&6}a=ZL#iq)7@m4?iXIX?4 za(_7jDDOzRt8bZohX#}HcZ?lDHc`$0)7*A8(~Q${Tox;1aH9ig2HHXy9a`U|#J_$U ziSYA zS~2U7n^v-{@FnH`=1g<1^RU1^2+kHyn~=J5aj?aA`1uYQh4;81nVwc*xgSFEek-Qd z>a@1$`o-5f*(H98e{8(joy zKHoj8(eEhHD-8=8nz)Bb@++^=XhkkWFjd+)xA0!8!%TCHB`H@6F2pP)@@ zkUiGV+X(!o#ODiVYHnCxW41;K#&sMR5I_7R5ZBe7KK?xRN8j9M9!W%C``%IR z@m5s5c9*9$M#(GW_d4TlZ0OuoY4-e&A*2;<_-3o1*Kx1wMYsG0n;Rq@P|)WwS0+w& z)uNdH&We9^X8wynARP`HSlc##E6|#4yVj#)3ZpM^+NK0>q^FFVR!P>?12UH4Ua+5a zI$}?<;wF`}kFFhb@D1`^FPFZgT-O@Xj_DfygWROrw4p~@N9-Q~WsTH@#X26FOEz0n zWD~g_s(D`EX+Welgsa1yPGLlviN0npsQfGRM~ zZqIUxr5bYn4hfQA%t}o{@7){f_W>GZIkiA4Ourc4|L3sme=-X z%^*yUD7?Z(=jj1UE6MPbE5q~q$i6dry>8H-MpON{`5Y6+Nu%JGG?$z>LWvc%EYkz^O1c2%~-6P1h^o9BtZj;>4;6h&lB$YYkqwX6s~Wik5>t3V{DL z+;j1TE<&GcQik||W~)@>kAt@i&%Q++*k)Pr1CV0R%K0Z}K$wXEuJ9f13?$X-7>9P8%zn@*)S7v4~W<3CY4Mz0%=_(W> zrbwOhoB%}YE8Nnk45a{ETq_&I5;bm`{ra^I#!A7$(eicG+xL6dTg_Le0_kDR9$Y}5 z?hC@f7@!3dT((bwvek>Uolu)W5%0%D8;pbPgAyuE_iHemk~@%-wf63~Yb z*a&WK`Lb4yUu#@iXtRXs0t7Yqud4~FkKfE@-mo(V81bfDmJI`i_%5A4Az6 zv~w-*_6uHeC)LbXO(C{&Fs`o7BTs?G+Z?-=RnI9eZza4>@i1lqEou@UppRC9nsnY@ zdGgx9MgmGS5^M@Ag}mojf#fadRZ$ZXusa17EEfeyfVLI8t0-e}v#OM1Wz5K}bvH4s zH|J5qOigxu(V>%I(6{AeOF+I-KGLHaGMw_!3`ssC3EEsY(bh)k>1gb%n@R1!t7;Su z4(zgmdY4Nx0(N;FTX*Pq%<7P_(HmC2^-iFNg%o)Ow zR2wsm4}$u=XsUC0vd*avHqn05<)GHU(uGn;g-+C45M~{u9*p;*9S%6stOLe0ap|CZ zMEl;~V}ma(-i?fxN-@vp|+f8x;$!-SXD434M`ec>*H!`M(uy_%r;zS)Z!}t3N@Whr~E-z8B8_2M`xgaMycum zBaftf1Nx($k}8kW+~lbPQDx}`D}vpY4AI@TzR7v}L91ctw_& zW!%dnO2|rTl9rqLM#q<8DOkv#pfV9eC>NRKn&9E8Ku7fLexUqOVKL;rqH)GxBKda) zQ3k+h#YWi^AG#FfUeVv703#1E=@dNNUIRF&-EFcuVz0?56@i~^&q4 z&ga98%Gg}9^H^Jwp=KW*T$5?^nf(Mb(PD}pm-U>P`tTFLtE?U>-rua!CecfM=AdFn z+W$e`dq6d{?(M!VyC9$4@e2UNHHiS zp#}+6TIjvk^G4U+d+qO@bME=h`R*8Z-0K(_PC&?HI_LXu&+~f^yZh8Jw>P8TSlbx^ zJ1yGj^$D;c>RC<7X6v4Ox1wfd{}FlU_U>B(_}guDx<1o*yGn!R68J$#giuMn38m5S?z;j+V27g&W=D zb|+l8ur2Nl+-5P-iTq1L^`?8wK9yESb>F+bn5$|ne7D*e-XzVf1wPTOrQz4etJ1T= z)Ho6=plfyN(L2uc>^;+bVOs}IZS*bNjFNp3}|3UnGd&NkLm zeq{V}UJl#_H_rRMX*4(C5q81D87N#_DQKMPucViH?p9E^!E0X6Gcu$YcMhmM1Xq4F zGy3_sU%jPW2R23bV49Qpl9xu{q5hNsY{>RjOUHI%)N28+pRE+~_3JQGudV#CWzQWs zHUXSJ4rm>s9W#@?7ktXSrr>N^+-5 zndhECX3fU^`aK7vL{;=pKH;yuX>R@=n7`p#K;>4rtjQ%G!3K=p5+AZ6}I^o*r(Gqrz$Kw*I<57Yek3sS*(+cL31-yo3p-H zU|n2CQj`NB{%LBZZhMT}jY2D|d3QH}1PnQ2O}G%(rM=c3Up>d6(kXQ)w*Y@qTAi&&fa{BTgc6g<0i%fC(b= z%ESeV!F#JceTTMN*2vwN*c=~W!G=kST}Ie+caB}o;;vhp7E>623vg2+qK#k=ZqPc@ zi+-A_@MgG7-h$bV`w;uCS9ttQ8wJI%lb-s(=S>6V>J>g_D(QHB8~x9B=olr}XJsCz z-OF4YE8aTB9>bZZb+roXc6xn~(b?~woqK&^XD2z=>C;#FB1mED?bxXJbXn=n@b1P$ z^qjE)3_C*>Q`8_Dd+mnzY=!hUQ=d&5H=lK$g3p=@{_epA3KXL-t7rF!BHYHTlilQg zUH5{SKZsA`sUNS_-aS{Oc07K2`}SlimBiheurQ1{r^-}s28!i!-Ipktj37bR>82S9 z5MXBW&q&-h+W(%BG3{JdfQSSgA-Uwl#)!;v+C-Do0~sTv&*HbDm4(Cniqu0?J`)PC zH}228fBUmVTg=RIN#4iDlzTOr?PRLAfsS5*Ly76sGcw|BLbbEvlB`|s`h}#`Q{Ecs z!h|2PLtN=un)>-PHKxbKe4x1N=m@8~;BI+n-3UK=qQH)rm3RfSTRb)O9#-CyDt*!T zE6#S(Q}JoU#bRXZy}SLz2X@F%zmHJcW!@CFR%R{hr3`uN@qCzs=F^`FRU3g3(j>RU zRnfR@H=QvxF^`bw^`L=~53)Z98&fwHOBEGc2QtO&`#dl{NsCff(=K?x19W+ZO;o?| zEJz0|$i7Iv4s{Rr+EF6F<{Cg-$|6!*8#rY(vsuG5Xf& z*}X*meg~cX<3lYY@goGydA~#q@NG;D8Lg%tUUGkU>czFR)VGAtKW-U5K>v`De?oxd zQ@So*zhbkPu0y7`v#AkAD~Q&;6@tRPc~BJn(*BMLDxv>*&CY5UP!}=pE*e--3pAXN zDTQr@KY2TVi(Xk|(oBoXDlZnXw)*D6%&5_d)by=)8^l(4@2p_Fw-Wdw)w6TwmO0`4 zrN?iPBQ@mY-n&X}6#_FLz%8H$bWVLz1d*N8YQ()rwA<~EQ+e&nTomxxnm_ZhyzGD( zAogS*w+@`NjW97_M^cmz-}QU>Of4=fjOa^BS*JOvTxyMr+xJ*_-N`UNyfp3jBzteB z{Bt>Qi+@@_0@lkf%dJDIBBfx8Qd4v?xLIm=9DO~vb{(i%y-)I$PF7`L;S##@3ye!k z-y=&Gq^Abr5I)w-`QnO1Gk-epp;mPm4L}#P_%eq=#3BYnsQ<0G5{iDkju;kG&p0w z*z14W^V!ZqRDENnhxlE=>Dr*FQQ_oh;MQ$6I?3k)ny>btJrH$$RzrhVyr)*{3x7Hm zjIFKjZ3!4hS{{knY~!^(7tgu42JWq;g|YYn%n&o#^^fX@u&z;$Qn^XbB>&Z!pa5wV9 z_0pm@_Ihqgu;r&d7CUKaI*cgT`)Sa56?S+zZ`EXh{8}wNVf}|_e|aITiXB%LUiiax z>5D*7Vpc|F!0KPGb;-q*1PG!ESqqASUJDN^aFYKTBWtE@@*N#Y0}UGA-hl`t%6jF( zsd2YRJ6kp5+54DGi+Yqqo?TwTLp8YwFmu8PRZP<-!Tr$=g}ME}=x3T$YW5?#y$bz0 zBWfa=j@USUvIPNznK$O2x_X%U`l!XS2=sb~`h`F-p>8>V(&_{~U@#l4LdPPd_QM63 zkF)6rwGWx-L9fZHc|a0wWhrs^1#ZKsQnxxZa09j&0eBrQ`W~~vC)$hgOgMq-*&VaG zK5k1LRWcXEj=XpW`XX1XI9)p~F3dOMMTyEh%PhFS>HK=(R_+3FU{`5QN1Gz-w`H-pmfCZyLD?^>{3h5q3#IeQ{q-i6rlhbU}9qht;9y^8g z5_b%$wCFkSljItYHh2=bh@{^{vWA+io==x)`bw@#`;eXI?4LkWT+EWX0U$qzNm~~r zDrf``8ygJ8Ba-S4&zt~;-dk_#%?(nZ{qD+KAq>NU&^tz$xB!|1ndF~YE-R-Zuy&36Ia$;S`_kON_)Lsb|ET;;g!rQtkrc~VPOh;D2F z2gNopuH|}}MkjTF;tp6*#5^*U+*6El6y*KYuaK|<4PWMG{MoPc`6yxy_D-6&!0HN= zRp$Nou0J0CZa#e}B=b>E=B z!PE00f6nB3adf(XW}K2{wjnojzraOAPj>_uhXk*Sa!X<5Em0|s`-3A%OkLAGr0ac< z`~AuyN5e7{!xpGswR@lf#58)^IwjS*!gFie7*=VhE_De#^GeY=)^g#?YL$CHUZAcYw1j&7JQ zH^4}@2YG+B;0r-D)EDvn9#w%piK{EwSWQ*?Ak>o`hbXD{vD(2&m?$lw@x|@upE?}6 zJxefA%7L~`Qv8{te{6dw#c5`%bzBf#h6@|Pe^|3YC7Y{$H#%~)GaL8}*k|sC6uF1K zYbWB8S{FHe2Hx{bv`n$ATo|xhVQ}>DSA>i<946W*%x_+fc{$p!NYFC?QY@O?^`w*1 zuhVoKp{VDPm;-dbp0t*jh1@?Bnxv1V8czKsV?oaalb?$JBq4M>ELvb5l?Cuwf;!fM$RjD||qOi^qt0FM*zBaQAf2uvVS>F6fo)d&1#q z>Fsw7xLxe38;FAKJsfSW`ZU?|Txus(YVBY=e^ij@oAHJEbeT zO_1DJ~o$RB(+{sVq$5J6^O@m`sVuFj}B76Pa!PUlHKyXLR1_)AJ>pJ;C>|kQ#)t!-0Y>_ zegNPFpa<$Me*V7H*_um!w!zF-*bR8Di9AKyg20wKB?hoxN#E3o`p3`ipwH+2I*PBSJ zLe*33U0+v4$3%G{pkXq8SDI{c1fG!GioTA)48`@(8;Gb6GO{Ca+(ihdCTYK%8|sE! zX(^5sbCOr*KZk)gRGvMpKpZNjkp7~1e{ot}VLnjGcE@Rw$An%ufHTT)6l^)VPw#zS z{nY-f;n{V~%#3DknfEV|-MQSM)tAYv7F?<_Crf&}s{Nf`{g~~0o_?hX^v~Iu=H1*i zc#UoPx~@}f9@&mr9f$?bCjo{Uu{1O`kf|yf7}31rtIko7%elksLPsS1-X#4cdHa(v z{(jFk4p@-D#M@TaYkgAd zD+THf@b~Hs@e{igpF)RL&+dQ^dG49ZGX0mxT-=&~2Z)@V5VS5U-a~oq_itF(aQl}T z3J?N#@@_{z1K)lsivIugQjNe=OA}-baAv79*jPu>t11WqWi=4+xiVXZq7*EnooVt= z5R?LRlGWjUUx=URP;3~52DwphTUJsgx?hO{YSSviCQGH-IFNMV*9O!@ zJ>>ulSC+B{EaRp?F~RU$3yv@}u$2?&mv zj?OnT6e#mi-MK_Po)ZHpL@kOHQ+^jT?7`c^JOByuWshtn9*$H=z37rdlnQdV-0$lK zqAW%q2qJ%M9e5_vfKBNi!!;)`WCMPWUo+!PC&Axq>^2Q1hiB@rV5PlMeMm&j%B*~# zKr;6(2@vfCm6MwF3H49w`=fIcgpfFrZoaN-`(YrkBuJpLKJKX5z_8utwNyGlN9iXt zG2AOI4PZ%>2>d948Ak3$Ll#_qR2xbDPoQz6U21wHoHYE|_&LYbzL};xzfNw-Gh<13 zC>U~nCCbQA<*bum|EI}rFsbFn4d*~?)I*~zu1L)cSCXp?~Mg*Vnu1mwb>NVQB;n`;e4w!s{D+CIrn0$|v#$1WgOdu#e0Qo({ zB}`Q5Vp=F1r)zE1flW0eSnCM(yXsmM*V9&ChLk1Xp${}WQVnU|ENj*cC6S~RwH3RT zf1t_ELh=gn>uyTSEuQ@(EWkxprK4s!Z+Y5`?GyqpI6#OmoU?9Mn2823d2S4mwbgfgVak!ex0v1s7B#w~WBnco_loU(2!(CREf3weF za4=gos-x_Or z3P6o=>T_*z;&DN3I{;n>ke6_H)(a%rx?fIlmF>3IwB_T~-=b3>5ZC~+SEWrS^ekZw z91Ve2GkEa<*}zc}v+(#jy=$(Z(hPs0Zr34zPfbb7^T;G8g0xpGab0Vqyj=&lujEyO zLyH^g8-8a-NYv6IeZ8AgT9sZXNRS@^Y@7qCls2DND z`Fb`y@n0qs5PJL09_)RwvnxlBEZFvxIsA+S9yHg(33(8CuP3%FS>dMjL|qNsVoHI~ zeDXNsAE^y_1h8sCz`zSrxV0lHmaZ13WEj0L>g+QXhHUH4`@kKS?w?gxVJPNk-cX}- z=dMFN!enPli|suOxX0A3Q|lM-oREplcXFT(6Z6>{Re!_8%!&-mh6}sf zseYZutohu=Kd<@%xW;O~uDS`hozcYG`mZHKMk~%a|0ycumwk6L8F`NLZu27%@))RZ z{X^W0GO_03VMp29A@=Aq;8R0dg+66m>o~nnapP zn2ZVvm}=-ZASF2+a7FqY7!mWdRn<-fub<%wsl7+AemlAQ%#8E~lzsZZ@OpwU!SSuk zUOmlpGNXYZ@jYk#o)h0QfF{&W)Mz~Z%Dzac`u^Z^kf59c2@058D=0TDZiH0kL^L6@cRs~3;C>d94_4;tE$mI!L)WZz9opAO*e`1N?vpZjX)SA&j#paCv0UDK>+1q6IB2nWb1Ole8O-IN!zDmu?$YDRE%dO1lF8Y2-f7dfgvN)()8ot2r$4jJ!;`x+}E@1&S ztX(2b*F1*|riG%)em$3rez5x5<+?;b8nAK!pRB|g)9E};N*iiSj+on4-_J-_)bahY zV$!UEy2WS<{1W{fSi5ObL`O_tj^_jUykWg-HPJGp*KvW=jKB79lMVxxaxta^V%+?j z2AjB;R}|_q;QCC7;`XvaxL}4WdYI0vLHb;nH%~mjMSO#Bp4C%%{}F&%Z|~{H=>qo0 zX{|Je-iatu#@?pt^V0_yX$BhZt)|byHnGr@(k}n1;K-kV2h9YQa|@`D*-tRY?9XUk zrWOtDax`23Z4 zq5|k|r#zUR+6uHlL=pL44(mmR+hxss>LH9KAuh3im;FSTydShILs58b#0^O(X8{#j zn+xtw4?ffM)5;S00B8`9`7zCtGJg3~vu%`C1vQY0CQ;Q*bc&&yUc_e{&{_zfEw#kv zoPZAHU-)!(+R4Q?GPisM(1|AJmKKHOO*m>|d!OYm75kT?`yb(Hd5`nIP50{MUYVTl z7%uKo6l3_g=sT_mTphGP3e{Qc?^>Bka;pGUNEs?rJ}2sF%h|6#s5&C~BM6jRMCAzu zxT8A|K<2V9k^z=eVjyeR-*>;Z3i^vnyVqPn)QXwd9N2N2k(PJD1KD|og{R3cyKqW0 z8qct@5^`ET4WTX6=MUi4K<7lF4-Z!RuvLa@I?@Zb9&ze(bBXt1#{r!6NYz@`@$F_{ zJc^4)I3*EjaCY|`fbW)SBhk)%^-titMaB;}Z=5+G7UdN$ULS?-thoIWIaxV@R7_}e zjINq!l6rGV?C)8PGURh=jgZ9n?llDnXZ8;f&q6?Fi|EvfC76KF**B7ZF|5jZ<=QqQ2oVjsegg14EWv zi=REfgO+l6yQ)?ex{*!=&_KbHN_T*Mm*_<^0A-81lw0Gmn4PohYCTF&YXGzbaqg|5 zhO^7kG}3{W1c5IFqzM1xUwS9HR#@BhM7 zBy0bF)_wJVz}WbQtr+M~{%I>F#;f19;wJoGw&Lpx|86U;Awo64gU!cJ3|H2nzrq!< z$LL%&#myfCxt7#o0VLNk1kfx5D%1tX?{|WJnTIFM2|d%13Y3g-fUqGk2FpHV8co$rYhGYFl( zT&_TfPe+7&{PzGGHnU>*BB%*LH9w#8{PS56Qb?JOWW{&gA$&ZkxP00#Gtm;GdAv~F zs9X8{q{QCXa+JWd7LWDX4gW%&zH7VlvoCb2=G)YV0IEP!#j;4$I`h`dKUIG!x6tz63!?46`Unzs1Pn-eVg$jU2HBoT#E} ziv*q_4j%jKiD)DzPH=MvhfQQNKnle3+v>UN)>k1-2QAqp%+k2pfkOD+4s*LX zVBdH`ZF9z_j=rDEWS44*uGT@=zh`P# zIZ6Ncq^&3BWJs)J+{#Gy0KfiUo^7Hj^~Qckp6!;;0l6cu~vA1_;3dM-zcxbSpFV?vRHp$&v-I{@j5FcRHatG-fZJMXrq!q zUP`56DJZHg_d8T|^%#fF4c0c2G9vS49do^L?|wGJ0X{S5OZNpq18xBx!@&wCJ#bAh zC+NPLT}PCG`^Xz_Fek>HKof)4gbs2GYG8mU?MoUBQa-7&E*>n zHvhZN-Cu}} zW8eP?V&f^+Z2$x0B{2jgteW@u@<$mf#KtqLkWKMhh~8&NK#{__G3Rll6;cZq;Gphp zJ2A|{dgE7cVFA^8;~$|Mh{H#fN7s6bp9OI60Ek>1>5aA>grlB3_8jmYvi>&409YO< z-2R=h;m~>RA9dTQM^F9>d>sE38?^nGpT?muFIv~kJy+1-Khmbya=US{FP9cCaeoz6 zfF#F53s4Tx9{1IWw5erjHJi2|z?fp61C9{oJctMmp{*pJzyh2d^x5d=Q`&{SM{*Z$ zEo%R&-t<(Q0rX_~Vb+6U;0gQ3)T*!}vDUbHJe zAscnwYW*>A#e#Tf=GNCo^=><>w&s})b*JTLO|S?PJb`_>uRyiT7`ia}xrMlPbP^8xN%bUmpG;b_A$N~6D62t} z_+OscU)yBq(9}zg4acs*+~4(!j^Unz2HbVaXy!^1h*cJr{DaFL&ebdpOcG|euHkT< zhM&CTnSUrJ^79zdQEa2`>)n>X>X-vPB2jH4;i%2wmd2Q!OeesPet!fN#g`TUHwV1% z-J`fCBV6{hBd+VZQD{xEqqC#s6Mew()zB_Gy=TK#WU!8*5FT}VU7~;%GGiHY5-ys_({|4E(RP%3;jUWGnY<#-# zpM-3Hjo+YlZoeIh{w`a4+w4Sq#<%W-X;yZcY)o{DBVFDkbk00n;PvjaY?>KhvXpN> zszZz}|7^aHjMST3HwRl1%|;Z052HbQGZfs&86yGmD%#HZYPm!dev&nd(q?Ogg6y z+nvo_DPfWr%i40o#kBRa{?%fq@f^HN^O4bPpKjccf?9?9RsUwg^gbhUi+)>Z&VoJm zWI(_p`U63*yA~g^bLsyN(M_GfYGfLL&%~Sm+S9H25(FA$nSnZZW>o-zW@Oep0}O9S zB)w3ON!siCeS_uBUOA4tiJF2VU`s6PouGwfPoJetq^t*M?cL$sKkKUt*ELa&d^$b* z=tQBO|M|F1z~W`7paP4*QLNN&>phL4R1FbL^&Kpw za=!{XM&O(u{4LV@KgDcp{~Kn5I{ELIjh-~zcF6P+%I}jp4in26TD%Zj;hDmZ{+anS z5DZWZwx(!}zN^KRk#G`$6?m_yqWG~X&N(7Yr+#nM_cw3yuiXfV6Hed)Z>Z|RM-YRT z0PEOrqFqv?m8C}g%02aki9Wi=#aXZSt%=cVfpGr{PB5ix*wnnY$#m_RPirFI2-kF` zMSG7187Xy~M|h>4)ze-e>!HGDqh-!u_6IFT>i0uFX@k8XKpzraR%FN~fu+w5Py|0JA;P7^aZ2?#Ah40PxUr8-hd+_r-Jwh zB@mN@qUBM-;^C!RvU#0AX4_5>Jl@TMKcAhY3sM8I-%3wrIZ|nEx zXoX3*TK8SdIz{bYO*JCrPmgtL8is8R@jL~37K8a)2v)TN$ja_Zct&w(sbScGFwd1V*7S zS4QVIXPpZUU$mmMvfdwYhyS^qak!ld8@rHgbqLICxbCZk9#sbf3 z(|c#6r>yf%Lc*)qniMB*ALT^Wv=?ceHUg)9mOrqX+y5CluaX|Zh6rz=i#qJA_CKirvo zag9IkjYSnQ{@A-BCVXT1pr`nZ81w530VG})gujjszhDA}8=n*3pUX7OJf87JQyGbz zjM!7Rp={qLlHpgTHonowNrvB?+PEkqxx)Ryi#+Y#y8Ek}sq&vEZlz++-zKpse!=px zpn={bt*)6uw_BpWnXB#Drcsf3AXPvNd6oXRBL2fyZ?ryQZ)-WLZgpR|c~3N*_$#S9 zyUoe)r3Puo?ial{hIkz!dvgbkIjLg4%#9kO03X5K@`b3^#Y&EQaK(RI+#Eoj`Qixsf zE&e$`VrsqfJ|-4Qag6Lqyh>(>)?)8GAJdn}Ki6o} zkVm~;q^Fiuv_b@yN@z_%bxR*BWR=ZW^JuY(-K5O>h&^?Merltpgz%0mgqFe4KQ}h= zDIYh9(WPxii-3wnp7Mi(_nL}IBD)p3xe_%mb|lV(v$6E(MllVaM+%UUnG?_OGR6!U ztvS!-BYjHv)uwzYPVwqoV|I)M;7o_C9jlFO=}B5I-Th>NeILWZ!usY!5QWpF5V10} zLIz|8;4JMWdzb%Yx*@B}3H@+hS1uFvvW%^=3>vagfu8(B#F%;S@~NMXB^wyNnVq^w zvF>iSE&1phZA_f@RkbT7?yah3;xhK=dmlgW30hbe-`Xw56f7w8j>p`++I!s(#wo0( zTT}l*N19S0*Y8D$Hg4M~jQMO{I{!l#uOL%Lsb^Q!9y~F1Xs3u?YHM1U2#JZ&7Gb;i z>Vz~ne)z%e7fap5drShs>FDK+^YKe(6Kaj9D_CM_XHD8f9*bK(cmkb!G|!9ZHrLjw zIQ^#^r)5xE&r^j64FjfyPWQL!{^Pn)%-{0XwIOn4VoP_R<;JV=rqO6F7RILrwCA0~ zE$H>_Sz}(yzH?H|8x2`F*Yd?W)pN6`XzOdNMCZP=etn5>B#*XhoB( z$?rYa)Gl&^OMj~}nj>ay+ll`&xTMC?k`1IGI*93}4-cNy!*}+3^l4k-BmXd|eRFun zmUa+;W)~cLL!vcE+WQnO5DB-+)Z5(T?mWpvMJr!?(t$NQ@=`hXII|%ARgb!@ZrhF@ z)h%>ECiy3uUeWyH5H zZt-6*bj8BFS%^N4K+TY=5wqS)l&5HUS+0dfYw4~+bF3!@ObK6ub!vYzgFp;+K>Z27dap7hL2E`GSdHrP_^HZ~GBX zUm;}b=H}RZ2i@@|XkDCYSGI+gFIWk&5O0bYzM`neG9jJw$OFbc#kWp3o_cY8&)|{d znMZ*iv7V^7Kco@P3K8x@TB^Kfoy6(F>Bty7z1P3#w#G!Esf~R0icP;>%`Id9fn~DM z#YOKP?)91}bMS=ft;JVma1O+6(Cd1rBuQYd)E4HM%ezT_+ZEpDVtw$Qr|fvP-AQrc_0I{J!t4}xn}v63Y;yM{ z>qS%Mow%ZkY$5A%2YcM7|2%^wokEyF>K0`J8`AL9^SL#`=q+5GoN9azW z==|po3z9C@X;GpVH@O2TqZK@d|q!8Y&~3>ab>sS3GKlc;ewJo>mxN<)H7iZ zo{a4+E-IJ=^Xa5Iad4M-Z*A^NagSDy_bHT;7ad}Fv}A8jgSIAlNoCX zrHjNBl67jMzE?5f>)q^Odj?8>XU5yqD>`GJw+Eym3f08Ddy2ITnAy2{6(2TR?=NAm zk+o+Tt?#Yp@)b-#OYfyD4F5FU_rM8+i0$!nhos}Hy$Ix7U^@iy&yy$`GyVM)O02M| z5*@Rcr0#Rn^062ylFjF!)myN1%F}4t{}!xhd8$`+eCm6Ivc_Uw?0t)xHInQlwb zg?{ZbE%tSiZEx^0ukF|1fsgGm=P|(tb!%myvl%e8HJN>|?a{UfQb!l_QV%f08u@9E>=`kj>ykdjki547oPJxFAZ*ZGl(;7XT$EIqxiqx!@v9CzEE)IB?_dSSb&M`9_($vy$Ug&qS zt!_x;voKp9HIwvesbW*z-Dhn7kd8j2Y-N_Jo9`v4)Ep#`AsiOsb7Ls2f-78R0)GrT z&0BH4eBOR9#K97BSMIfqob@Lg-Cp0sT_>e-iG662DG54$Nuhn*rC&~Je)V*c%DnWXBGI|F4YR|U@J_BFPo58g|B4?^u5Y%?S?byn$AqwzQ*ATy-n}(dUqj+LYSsvl9WLbx0js-J#^$-ihitDUjErIg67n_Aa>i=` z7t6+EZnSy-s@UPXc9rVothl23mO%7`$wDhODb>>U4#YGnTgNm;(_-(D9xb7pR{*Ih zRc5lL6cW5oku0&$b~3!S&%$STgF%f`!fl^TQf#ebBW`4KOSv`nM|@({*k0}k{KxJt zta!foNkL#V3xn5n$D20(t3M@Nll) zOdUfHNn$9}IVQI^s~HXUQVd(yrUGU{;uLufWlZdF?L&<#hUR*x;)4karr5=e>K+xN z(RQ)Nszp)rPEO@Ul|SD+93-$pU0bfl!3DNvE@%qbDxQbh4MtS0jS5M5??>mYo0nj9 zDg}-)m-J>MqN#Hinnr0vqsk+$xLQt z653~wbwZ;DGk)2s-0Tl)peiL;lte;Xr9_g<7$ev_3&4EPn< zk>?1CbC2@0`zm)k*ek>FVs2Nd13#qkp4(- z*$0N1kNGkdNJO8mJIsQupK7Y~vE;&?n%er!KdRy>|GNC3PW@G;87{%jr}b3dc|8hp zy!~}U1C8430Rwz=<#vxr;*h6-(btUgS1&bc+ANCLYzwzfJ^mzY5^|ML@cHs}LW_ur zY%(7vr<%p`;%IdpkL4xww}T@#WhH(GFjO+!3xhOt#o~ z9V!6v?&-+$OdX1Et4!uYGhPI^m&ygmLS_CSTx6s@FEef*lIm!=5m)GHAr6vwpTXXPm* zz=;+3Fd^IGJ8PjUV2iOBE>XYo08Ltx<&zL`%n;(B(vlI=uTKk0(v!QR7~;_0wqzYw z$jGdvDl2Aar0zM)&ZRnR1nUT@!jR`zZo)To&W(Zu>X{FIFoYDX(>}T5cHcXQ*Lzst zWHKvCpLWDbtH5)W=Ex`St>&#ye~@c%T%1>x68h}q!j}5n^~WX%PKg>&*8BN(O2L7$ zbSA?erd-RFTDc38#Yn--q*~vezIlLmVE$CEhPCT*8}4s58$*6~FtV4kU>VDvENP`E)c1+Ysfz z_1xYC6-k+M-mb0Xn^~`4F3w`TUE17JUnB=V<=526N4!erUyGf{*cCKkCH8WSi3miM<>=kKu#KgPj7Fm(r^v zrIJrC+FqQwu+D59{M2e45hmO6NR+*&IOk_&$%7=D?|4k_s1Wx>XFJ@&EQVB)KTQDT z_IkiZ;Zoy#-b=N4#S2*}yKhVG8^&IIclvA2nwhkv z4;Xnb{xN6k%{j$)%J;X!@9P5-yaDBKNu)bU8B$*A|G*T)1+Z>MWcyE<|jOpYg1rk)5}eybs&c zpAoXMqBR*3{ncR(SMzf@;lidb#5h*{OnIAcBIyVn4;0a1MN&t@@OHy~T^o<%VgtKF z_@%2{%ub7OMN&6MI_>;^r`$V?V0~-y^%^~}b+0ix3oRN;v^AgGJDA4|Xu731zv}GC zYT*sg!i5D57CKAN@qSHU3o#lTz8&L1NHN6du$Y1Q%3rH7#Cq- ztt4Qhh+=a*s4_ZrQ#s^0%aXG*K@)X{**zCo&&u=^RmUlI;#*xyx%;+FtZ_KQDzhia z?UnDF>=xq|+U`gcJiC)g@4CPZBhi$CdqEvZ8VBg=v$r3f)hj7?+Rt1+w~|^}!2Z+2 zan(%ZiL%8JxP_U$irqKiCHflbB86mU^`#ycgVq~{0)?W> zd-ym}YF@0kaZ}q&rg|c+Nr)3Bz{b}}CB%XInuVEJxWq}zrLdyt*WRC069fc5mbsf@ z9)=cB7T78nIO2W^P=V}+71H~{8kX?jakA0;RA}fAn^AbJvAv{IUeXyEas!RIvr5i67WBf4zM#G0S4P_%+>Kns4 zDF5-6O5@eSvY~F%RF{dfxj7b2`{)DBq90w5zOj^TS?{GR^~o9M4V zG>m8G%C{sI=tbjB>YVnh1Xje@i!CjtLrh-wqk4)F1QO1N-lGW;p`0;?7bbHvg_CwIA z3RXUdE$nZv87Q1Jtm#?CYY5kflp?uM#k{Cu_KFOcl#%2q-w(XmY!M5KPX&>dp4$<- zKRl?;4#I~PW;!VrYuAsyUleD*1OyLw1ECkpf({%35^ly45U)PMif%ABXcCY z4by*;v7j$!I88@_6`T!Y^wC_K73Q|Oc@Z72X-Oz)KuK)aFZ4DHt#%pouO#)3iL_Vs z_QtF%()!GMO&@$G102so@0Xp9Jx8#MRbe*YXHX!mnJa%iO+L8zmiQnO({nQ7%64I| zR>(8;@l)C9yEs!bh>hyh2NpDFC5>zhqfHmCaSA!})Xqd79G7)(P0KNhhXkg0m{anR1h(b!3B_*M_qi|$0k;V(B93A^bkd5&?C zi4_U&1ZuaKFU(HLlB&R+=g4??-kf9_4^kD&_FW@(o1wWqFY`FE1^#pA9@1;Ns;W0ESJ=8h zai>stec4P{I+L*!IhfC&q{k+Y2LoBKN^}WwV`ndfhJMZzquS-FN znO0^no`DATyNqIb&(&ee3jHC0PUQvc5z9+(0g>%)ca(plh>3wkb{aw~>H9}#<(Y&Q z1xf`LNG5w+=dPiONBzn}DEW7{{i2;m&>lCZ56<7@B!p<*>`C|p+J6ugnI6hab`!ok z`zMVHykOlXl6>y-@rg#8ONr=bh4TjzEu|}RC=)Yw`=|aMS0SyK<-0eY1V*}Y^Oe?f zG1T|qq}9c&GYOrq{c9JZ zOEz={zDGIUZ%l8~rg!QfrOP;%p7M5)oKal?0u& zX(@peZ)-WpxVv+kKBN8j<2pZ<-EJ}o5oa?al&(D;#}9f*=6QMkZ0021IJwR%ZDa<$ ztRYoX?*N2ShtA7TntXBjj{`nb-WgcE=igsCjp0 zDYdoNW{PZc$uf#lwaWM>nr%6%(DR2o&D9Jp9`UabwLM8n|IaKkf{oh7kME%4o#ALt z>XcQ~3Z0yTP)xG$$>DD0rTmp@x$3aMCkYm=wc8T`%ih&X;S_`#(NOcN49;X!FAF9D zGqQ{h-JgV98a=L%io$JW!);n7hWTj;Rq!E@uHIpJZmT=|pvsus)(^Z{`T0`;OlY~S zVm5RuX&AvBZvRq?y z{oruxkHA1Z9F8UxDK_0vHCBgQ8kDazR<2q70Dgv8T%BW!oEB}j_E@>#ORt{8b38uN z|E;|%kB92}`?9au_hmwcQg)#%$&9j06C&Bhn6fj7vPOiVi9`!R)*@?+eH2BqO~{yx zHDuqn8S8U_QvnHuoIG93 z>|2mm6>n1V-WdE43B{#6-Z`U9wXI?8pSP*Z0Y*WmX6*Cw&uBlgjb>Jw zqgu!&oSk@exHp3?cAu*-J#05guMf$9bWqn;1{H3S-9+}k-l*{${h?>n&J_ytSZ|#c z53ux=a>5$NcgZ^Z2p!%mV!^dWhj_|-o639PimLq*4bYFRh?jJ8MLXhC{Dxt zK$7C|?jF?CcX(5IYhdk{7aoqUhq@iK)t7pp5!;28oLOO?U-}dA%QNURh_TxucD!{D zg2xFZBlw<=D!!4GADVi5U+i#1skYf6>_hhYItf}oe^M>N5NCt$%;YM1IbnfllVI~| zNeViPtclCcYZ!D}nhim^g&?V}Qhks_d}C05f+q&=8W5gQ;*b z7{t{m;%^;(N4>G~Uh2BPcS9abY>S&+gQnZo>XHc45mluT;LuPtkF>FmE zNLDGYj}BFz#+QrU9~?=L#TA_EIfIzzz98!>WU_FZOrKOu%kSI^B}bbFx8E0{<`6~{ zX$zsXP|)79Rl3&efs;`MM9vYn+RT&U4rYKGnjAfIFd3lES-f{2>~9S{TLQ9n)#g^k zV3djbJSHyM(~M}fewQNwWqN|vVZ7mFKYU@?VQ>nI@q--s4%i3D3Iz@d+bHg5XY<{3 zxQMMYKAH(1w!A6wRZADOcw{9qf=^)nzCmt9XeRzRyjR*F>lE)#-0Lv5Fz$YJD9>$d zI7TT$)McvB89_>HDK8KjRZB;{yx|V3wM%85Z{TzHeU5&te)~pg zS@A`lij!~Nm8smhdLl(2FMQ7;iW@rYc*M!oW<5><{C|9+7WUfSkzn`wo$Z8HMHczp zUrTzLi;eKB=ND-E>TA4E3;i0DI(FVjHfdmF)9%7l&m%N>|6Kn%Aw^lcS+w zbFjgy_C9W38{t_nbf*@2TgqKs_u@4`65qh z6wg`jJ2h69mLn@`Z*8!_uZxG-tx;H_jURX=6VE1&ynru?__?1%L8_?m#M{-?Q2C+wtng9JpWN2$D)s&zFUP3UN(D|SJkiv zll|fKIli7)Y`y!*<4tC`5isJcyii?QyG34Gr3!qs-8kF{G=s_UuA{|6L-8a4FpRU2%;=ujT{n;=%9kMQ zdX+uz_qF?KQ`h?6`1?<@PReETA8cy%Tb;Y7fj0T@#m#)BaMlu(L7mB8x=_C%?JtvE zvmP3-C7ZB&fUpgzyzk0}Wim%>e9aA~ZU*Zy2gGy?WNFTC>#0Rs^>FgJESd=RG;U?9 z7f4DuA63`|4scs&Hr;~It+>Ocg8Njc<3`@+1Sdi5viZM5F3HSU&gB{wnMSD`<|@ z>D;>gc`DlMOUon^=xOMH#?I}U&1pP-w2bv#nu-)G?QOYW6*ylVb=_L#nX(8;%O)AD zB%)VCms zaQA+D^YC@Kf@gbWCl1VdF#m|@oh#)AQu7K_oef{q_la|c+fuVD4pVWMVfR*-OC+s| zs77HgsgYPW_Bb~?BxdYUvR7jfs1^NK@M+PiZF8!58Y5JggH`5qmw{EttH5pwayR zEoj4N+#xB;<8E(la zlIvf73dUxM>iR+LT{^Ttgn+yLB@R8^bl=FhMCcoP%G`3>vpHC|omhMS>R8=u7u}RL4dNdwkKCt3YsU+y{L3X$4_Y&lBdp^FHF-ajyBB%NUC$IF_}- z0Gmu4R*Tg!30A0)ivFmuzr+Z7IyPJZN812oCVkyRf3v9#%q3mvEEa00<0Gl8%RK8r zQzx=^+*e|GrQ@O7Dg~`VP}6L6H&{}(v{#H{+qcy3(K3ciVE_Vlyhg7a8{s?zCI*!e!P48 zZae2Ah8}ClG7RZrk5FXtET~VFURtU-Rxwdqb69905v=gCVsE+SjNz%+DtA&PqsEF( zBGDz-Vr3}~h^sT2A~4XjBdZF|slbn+p;tWmY#=eAZZ0icpPGgRo?j7pC<^B8H~0G_ zMk&@S7f0P|MUEUZWtO&5o03qd)e5C-ECnk(wtjmsXV%A%rOog({}F_Q&Gc{s7Y zA|yd%xRGv{i~**pTmZz&@OxOuOl`cea=S51FShiPUNea1uy6_PioG_j#ERPf@$l4T zY#;{>jSxf&FO72xjR3G=@kr3?Pl$d;(0@aW9}`25yIoSCp=q=Q)vZ2_8lk6&=$%fD zy&qJb{x8NdSIiRu!k^VSfH=b77$ftam8*cnko$}>D~%84sk!(f_+Jmw(0u%GLVDc! z$fZ5)@# zpTMR}?$41+K=Q3UGy_O=%ILVYRC*9MsM^hrK z@%S17%+0+e$bq{xTXvmy5-ZAt+*y_f`mq2&&U5^yBZGJVj-53hRXg$@#$c$N<5=-| zm9F44f3xp$38@)I>9Jb^gElYP&i0Rw;I9H$5E0;R!2p62QlLa3vA(HmDpbI!7l40F zM+ptba#!Ptmi#h%c7zvvR%Rtzl=(oZ+f3%M7D*Vjx!rk6!gAyBGB9^9B`qfbqT3b! zs=rnlN^bDW#y`STNe058#kul=Lu=-%*Vc5G$Sb3vWM&OuAIBKV;nv_{=clHOA@vpx zVPg+zt6Kv6;)(Y*ge- zwwn9rYq=c8nzR>1ZL6_91~KxXCTvt*=J>+}eoKhwcRmg(Tkq_tqPWfG!2F{IbXHap zL2egr!$-yD>;V+Vu2~i?K5?^l7rv43*g##;X6Bm7C9#xxrfENi3BduT+_&ubpKnhG zUrP|=)0r*xMC*`XfI`_X7nW#|V5Ekq_gpN$-^Foca_T>i9~$PlG=gdAp_jkQ{ZsS| z(hwf;dKM!hb1X7PdY+3gvpNH4%|~5fbZmWx{2wjB@(2NYN^3&IQ|5~PNLLkCUUyCY z*_{)(5)nm5_wdghKrWa0e<&h57wzA-V5NQ+{#O!$DqUp$>zqa@-Z6sfZ-FCUGtKWH zWB*Pc7OqS3`gbS!or!qj$oRkSIY~#HIzONcCrb=} QhrFXPf?kD`UUH254>D|1Qvd(} literal 0 HcmV?d00001 diff --git a/examples/showcase/README.md b/examples/showcase/README.md index a4e5008..420d8b0 100644 --- a/examples/showcase/README.md +++ b/examples/showcase/README.md @@ -92,9 +92,10 @@ MP4 output. Recording ignores interactive demo mode and requires no `--program`. - Push and Wipe: all four cardinal directions. - Dissolve, Glitter (right/down/lower right), Fade and Replace. -Glitter, Wipe and Fade currently fall back to an instant change -in PDFCube. Their slides say so; they preserve the real PDF metadata to provide -a showcase as these effects are implemented. Other viewers may implement them +Glitter and Wipe are animated in PDFCube. Glitter releases fading fragments and +sparks; Wipe moves a raised blade in the requested direction. Fade currently +falls back to an instant change; its slide says so and preserves the real PDF +metadata for the planned implementation. Other viewers may implement them or ignore PDF transitions entirely. Replace is deliberately instant. PDF transitions are stored on the **destination** page. Each `\ShowSlide` call diff --git a/examples/showcase/showcase.tex b/examples/showcase/showcase.tex index d2c3c02..fd78c8f 100644 --- a/examples/showcase/showcase.tex +++ b/examples/showcase/showcase.tex @@ -171,21 +171,21 @@ % Slide 37: transition entering this page. \ShowSlide{Push /Di 270 /D 1.25}{Push / down}{Soft slide blocks transfer\\momentum and briefly deform.}{Dissolve}{36}{night}{Animated in PDFCube} % Slide 38: transition entering this page. -\ShowSlide{Dissolve /D 1.25}{Dissolve}{The outgoing slide cracks\\into falling glass shards.}{Glitter / right}{37}{sea}{Animated in PDFCube} +\ShowSlide{Dissolve /D 1.25}{Dissolve}{The outgoing slide shatters\\into tumbling glass fragments.}{Glitter / right}{37}{sea}{Animated in PDFCube} % Slide 39: transition entering this page. -\ShowSlide{Glitter /Di 0 /D 1.25}{Glitter / right}{A standard PDF sparkle effect\\ready for a future renderer.}{Glitter / down}{38}{plum}{PDFCube currently replaces instantly} +\ShowSlide{Glitter /Di 0 /D 1.25}{Glitter / right}{A moving front releases pieces\\with a brief trail of sparks.}{Glitter / down}{38}{plum}{Animated in PDFCube} % Slide 40: transition entering this page. -\ShowSlide{Glitter /Di 270 /D 1.25}{Glitter / down}{A standard PDF sparkle effect\\ready for a future renderer.}{Glitter / lower right}{39}{night}{PDFCube currently replaces instantly} +\ShowSlide{Glitter /Di 270 /D 1.25}{Glitter / down}{A moving front releases pieces\\with a brief trail of sparks.}{Glitter / lower right}{39}{night}{Animated in PDFCube} % Slide 41: transition entering this page. -\ShowSlide{Glitter /Di 315 /D 1.25}{Glitter / lower right}{A standard PDF sparkle effect\\ready for a future renderer.}{Wipe / right}{40}{sea}{PDFCube currently replaces instantly} +\ShowSlide{Glitter /Di 315 /D 1.25}{Glitter / lower right}{A moving front releases pieces\\with a brief trail of sparks.}{Wipe / right}{40}{sea}{Animated in PDFCube} % Slide 42: transition entering this page. -\ShowSlide{Wipe /Di 0 /D 1.25}{Wipe / right}{A standard PDF directional reveal\\ready for a future renderer.}{Wipe / up}{41}{plum}{PDFCube currently replaces instantly} +\ShowSlide{Wipe /Di 0 /D 1.25}{Wipe / right}{A raised wiper sweeps right\\and reveals the next slide.}{Wipe / up}{41}{plum}{Animated in PDFCube} % Slide 43: transition entering this page. -\ShowSlide{Wipe /Di 90 /D 1.25}{Wipe / up}{A standard PDF directional reveal\\ready for a future renderer.}{Wipe / left}{42}{night}{PDFCube currently replaces instantly} +\ShowSlide{Wipe /Di 90 /D 1.25}{Wipe / up}{A raised wiper sweeps up\\and reveals the next slide.}{Wipe / left}{42}{night}{Animated in PDFCube} % Slide 44: transition entering this page. -\ShowSlide{Wipe /Di 180 /D 1.25}{Wipe / left}{A standard PDF directional reveal\\ready for a future renderer.}{Wipe / down}{43}{sea}{PDFCube currently replaces instantly} +\ShowSlide{Wipe /Di 180 /D 1.25}{Wipe / left}{A raised wiper sweeps left\\and reveals the next slide.}{Wipe / down}{43}{sea}{Animated in PDFCube} % Slide 45: transition entering this page. -\ShowSlide{Wipe /Di 270 /D 1.25}{Wipe / down}{A standard PDF directional reveal\\ready for a future renderer.}{Fade}{44}{plum}{PDFCube currently replaces instantly} +\ShowSlide{Wipe /Di 270 /D 1.25}{Wipe / down}{A raised wiper sweeps down\\and reveals the next slide.}{Fade}{44}{plum}{Animated in PDFCube} % Slide 46: transition entering this page. \ShowSlide{Fade /D 1.25}{Fade}{A standard PDF crossfade\\ready for a future renderer.}{Replace}{45}{night}{PDFCube currently replaces instantly} % Slide 47: transition entering this page. diff --git a/examples/transitions/README.md b/examples/transitions/README.md index ac2f25e..48aea80 100644 --- a/examples/transitions/README.md +++ b/examples/transitions/README.md @@ -23,6 +23,10 @@ Ready-to-open diagnostic slides: - Push: [right](push-right.pdf), [up](push-up.pdf), [left](push-left.pdf), [down](push-down.pdf) - [Dissolve](dissolve.pdf) +- Glitter: [right](glitter-right.pdf), [down](glitter-down.pdf), + [lower right](glitter-down-right.pdf) +- Wipe: [right](wipe-right.pdf), [up](wipe-up.pdf), + [left](wipe-left.pdf), [down](wipe-down.pdf) From the repository root: @@ -56,6 +60,13 @@ python3 tests/transition_fixture.py examples/transitions The generator is the source of truth; do not edit the PDFs by hand. See the [review roadmap](../../docs/transitions/README.md) for videos and tests. +## Wipe + +The four Wipe examples move a raised, beveled blade in the named PDF direction. +The destination is revealed behind its rubber lip; the unrevealed part stays +exactly on the outgoing page. Both pages retain their aspect ratios. Use the +normal Space/Page Down playback or `--program 4:wipe`. + ## Glitter `glitter-right.pdf`, `glitter-down.pdf` and `glitter-down-right.pdf` demonstrate diff --git a/examples/transitions/wipe-down.pdf b/examples/transitions/wipe-down.pdf new file mode 100644 index 0000000000000000000000000000000000000000..026ab1e491efccf7a31cb7ca9c7810a79823525b GIT binary patch literal 2878 zcmeHJO>f#j5WV|X%q3ELsO|N74MTCk!zYuA;RoTzo`4X_y9e*|6oTyMHx0pgUgxWF3Be>^>McYFn8Mka zr#Eu~((h)0!37_S`4(ff zu8aHJVWBQ<5hS_N+>kT}*Lq&${qhlRL&PU>2r>y#)l_fGU3HJc(bU|90|BIthNU-( z-_*#q1;tsXJtYq9uk>bFe+3an9YSpDO6O}Y^aU=IFX+r-5568^I%1D3Ak%R9zc#a9LWK+Mn0PU>hk)h==G4phr`uDeC zE9>yMw;{*GV{UJ}@%tI>G5i%nw!m!y68B*?hj&>zfvdqVdk@(I46+vrlx$W^FGu6Q zlwc3seAJ?!W?6du$}Y{CSM-T^?FC;Q>Xv@WM(O3v=r9l(=H3nV)=5iwunpt2WS#%Y zwP@p@30~|fh|$}td}I7>2EpfojQ(N`!5F^^z)A2MgdZtmeh0HBj)UTtj1KKB^dodm zvb;B=+k1FS|22D?elt2Ugb<=Pqx&z6?(*h5z5bKYJyv>w*SqV5PX{DQNd*hAxgPLY z*w~!vwsIoEM^ri-oanW4QnYG??4f}*YlZ5dUmbFFl@}{r@zd|LENgrqW7C`!zch5s T^ITrlJWrIU*gH8Hq(kpFy7YXR literal 0 HcmV?d00001 diff --git a/examples/transitions/wipe-left.pdf b/examples/transitions/wipe-left.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d1702f5241c85363139e5ecc89ba14516c09a2db GIT binary patch literal 2878 zcmeHJO>f#j5WV|X%q3ELsO|N74MTCk!zYuA;RoTzo`4X_y9e*|6oTyMHx0pgUgxWF3Be>^>McYFn8Mka zr#Eu~((h)0!37_S`4(ff zu8aHJVWBQ<5hS_N+>kT}*Lq&${qhlRL&PU>2r>y#)l_fGU3HJc(bU|90|BIthNU-( z-_*#q1;tsXJtYq9uk>bFe+3an9YSpDO6O}Y^aU=IFX+r-5568^I%1D3Ak%R9zc#a9LWK+Mn0PU>hk)h==G4phr`uDeC zE9>yMw;{*GV{UJ}@%tI>G5i%nw!m!y68B*?hj&>zfvdqVdk@(I46+vrlx$W^FGu6Q zlwc3seAJ?!W?6du$}Y{CSM-T^?FC;Q>Xv@WM(O3v=r9l(=H3nV)=5iwunpt2WS#%Y zwP@p@30~|fh|$}td}I7>2EpfojQ(N`!5F^^z!~rxgdZtmeh0HBj)UTtj1KKB^dodm zvb;B=+k1FS|22D?elt2Ugb<=Pqx&z6?(*h5z5bKYJyv>w*SqV5PX{DQNd*hAxgPLY z*w~!vwsIoEM^ri-oanW4QnYG??4f}*YlZ5dUmbFFl@}{r@zd|LENgrqW7C`!zch5s T^ITrlJWrIU*gH8Hq(kpFy7PRQ literal 0 HcmV?d00001 diff --git a/examples/transitions/wipe-right.pdf b/examples/transitions/wipe-right.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8a3553034ffffc6d7ecdd4117bf5f1ab0c6bae2c GIT binary patch literal 2876 zcmeHJO>f#j5WV|X%q3ELsO{bL8jzwK2wzc?I09EaL_IiRp^gAo#kT}S7x4P{o)aBL&V2X2r3Ry)zoZ@U3rhg(bU|90|BIthNU-( z-&Dx91+<%um1hs?tf(F=|&x@XZG z5?YF9^63h#;Yix@2x*Dxn3>|H{#w3lWgQ;v@Ni5#irGm-9Xa@}gXfs>oo5s90IHR> zJW^PmIwqb-9@F2>Iy{lX!!h%)GSVM$yMw;{*GQ{Ucrmj9l6C$o z*P@MsCOFuY5TUo1*{1fp83dnmGWx+9f(d@*2n+@we5q^eJ6Jt29Q3|qb7*d%FVQ#2 z@ZM~0@8A*r)9g+9&F07sLXdAZ_g~oD#r1h|^(UKqEX@M1ch?J_4v4i@8Wv!4J>avj zu{qss<%GlsR5~1-=(Tf7v}%Rwp@B7Ph3=qL9dcEfs9vN%totzAlk@p+WSbQu1 literal 0 HcmV?d00001 diff --git a/examples/transitions/wipe-up.pdf b/examples/transitions/wipe-up.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dcdf7d9caa4fb5a5cc1e82be379499a3a2220c0a GIT binary patch literal 2877 zcmeHJO>f#j5WV|X%q3ELsJ-j;8jzwKNcf1F#0XsV5cS}Mg*pOU8Plfy^_`i8cpZ~A zmtLwE1jG2vn>TCk!zYuA;RoqQo&*8K-Gg^}3PJkwn}OgwtFl$GgkX{_%@#rgOyTUz zGn+X9>36fh;)0L)d<(Y`!(;mVf?UOJQz1oNu3F{80wKX{cUN(H5+NbzXIo>>jLqu1 zsq*{GVWBQ<5hS@Z+>kT}*Jhq){o)aB1>)mKfQkjGnwo8~EAMeQnwqoo5s90IHR( zc|uw9*qC^t@R~@g>fhgn zt*pc2-i90#kG;L|#_y-N$M9DK=>oS2DBOqX9NwkL1g-|d^gW~xFi2l0(5hK6y&R4I zQi45j^HGa_lBUV^E4wsnUePDywU>N#s9W+W9VM4Hqr*UGn0q(aTPH2$!8WYdl6C$o z*P@MsCU~(cAwq92vyJt;83dnmGWv@(1Y`Wlp(pSQq#tVQeFv{6ii6;nd=A}B_#ql6 zIo_Mk?JYc_znZ;Ezxf>bfq?MM=l%3~>krC|Yet_OS; zHg!&STR9ox6Dl1JPWIY4C0n&p_0YhYwNiKRkMWSJ$}C@*k{^DjMN#4N7<=X{|7D()->implicit_value(true), "Enable experimental animation details, including thin glass shard edges.") ("program", po::value(), - "Transition program duration:type pairs (c, p, blinds, split, cover, uncover, fly, push, dissolve, glitter), for example 5:c:3:p.") + "Transition program duration:type pairs (c, p, blinds, split, cover, uncover, fly, push, dissolve, glitter, wipe), for example 5:c:3:p.") ("performance-log", po::value(), "Write buffered animation frame timings to a CSV file on exit.") ("no-fullscreen,n", po::value()->implicit_value(true), diff --git a/src/playback.hpp b/src/playback.hpp index 159917c..668e67f 100644 --- a/src/playback.hpp +++ b/src/playback.hpp @@ -18,6 +18,7 @@ inline Transition transition_from_name(const std::string& effect) { if (effect == "fly") return Transition::fly; if (effect == "push") return Transition::push; if (effect == "dissolve") return Transition::dissolve; + if (effect == "wipe") return Transition::wipe; if (effect == "glitter") return Transition::glitter; return Transition::switch_page; } @@ -32,6 +33,7 @@ inline Transition transition_from_page(const PageInfo& page) { case POPPLER_PAGE_TRANSITION_FLY: return Transition::fly; case POPPLER_PAGE_TRANSITION_PUSH: return Transition::push; case POPPLER_PAGE_TRANSITION_DISSOLVE: return Transition::dissolve; + case POPPLER_PAGE_TRANSITION_WIPE: return Transition::wipe; case POPPLER_PAGE_TRANSITION_GLITTER: return Transition::glitter; default: return Transition::switch_page; } diff --git a/src/renderer.cc b/src/renderer.cc index dbd3e50..dcf696c 100644 --- a/src/renderer.cc +++ b/src/renderer.cc @@ -8,6 +8,7 @@ #include "push.hpp" #include "dissolve.hpp" #include "glitter.hpp" +#include "wipe.hpp" #include #include @@ -555,6 +556,52 @@ void Renderer::render(int width, int height, const FrameState& frame) { texture_size, Matrix::identity().value.data()); return; } + if (frame.transition == Transition::wipe) { + const auto wipe = wipe_geometry(frame.progress, frame.direction_degrees, width, height); + const auto draw_fitted = [&](int index) { + const auto& info = document_.page_info(index); + const auto fit = content_viewport(width, height, info.width / info.height); + glViewport(fit.x, fit.y, fit.width, fit.height); + draw_page(index, page_size(index), Matrix::identity().value.data()); + }; + glDisable(GL_DEPTH_TEST); + draw_fitted(frame.next_page); + glEnable(GL_SCISSOR_TEST); + glScissor(wipe.outgoing.x, wipe.outgoing.y, + wipe.outgoing.width, wipe.outgoing.height); + // The outgoing letterbox is part of its image too. Clear the unrevealed + // region before drawing it, so a taller incoming page cannot leak through. + glClear(GL_COLOR_BUFFER_BIT); + draw_fitted(frame.current_page); + glDisable(GL_SCISSOR_TEST); + + // A shallow squeegee rail, with dark rubber lip and a bright metal bevel. + // Its center covers the pixel-aligned reveal edge. Fixed geometry and + // closed-form travel keep memory bounded and replay exactly reproducible. + glViewport(0, 0, width, height); + const Matrix view = perspective(2 * std::atan(1 / flip_camera), 1, .5F, 10) * + translate(0, 0, -flip_camera); + const Matrix rail = translate(wipe.horizontal ? wipe.center : 0, + wipe.horizontal ? 0 : wipe.center, 0) * + rotate_z(wipe.horizontal ? 0 : pi / 2); + const float half = wipe.half_width; + constexpr float depth = .035F; + for (const float side : {-1.0F, 1.0F}) { + draw_color(Color{.11F,.14F,.17F,1}, + (view * rail * translate(side * half,0,depth/2) * + rotate_y(side * pi/2) * scale(depth/2,1.08F,1)).value.data()); + } + draw_color(Color{.14F,.17F,.20F,1}, + (view * rail * translate(0,0,depth) * scale(half,1.08F,1)).value.data()); + draw_color(Color{.43F,.48F,.53F,1}, + (view * rail * translate(-half*.12F,0,depth) * scale(half*.58F,1.08F,1)).value.data()); + draw_color(Color{.78F,.82F,.85F,1}, + (view * rail * translate(-half*.67F,0,depth) * scale(half*.10F,1.08F,1)).value.data()); + draw_color(Color{.035F,.045F,.055F,1}, + (view * rail * translate(half*.78F,0,depth) * scale(half*.22F,1.08F,1)).value.data()); + glEnable(GL_DEPTH_TEST); + return; + } if (frame.transition == Transition::push) { const PushPose pose = push_pose(frame.progress, frame.direction_degrees); const Matrix view = perspective(2 * std::atan(1 / flip_camera), 1, .5F, 10) * diff --git a/src/renderer.hpp b/src/renderer.hpp index 6d61be5..2e74ac6 100644 --- a/src/renderer.hpp +++ b/src/renderer.hpp @@ -17,14 +17,15 @@ namespace pdfcube { enum class Transition { none, cube_forward, cube_backward, switch_page, blinds, split, cover, uncover, fly, push, - dissolve, glitter + dissolve, glitter, wipe }; inline bool page_effect(Transition transition) { return transition == Transition::blinds || transition == Transition::split || transition == Transition::cover || transition == Transition::uncover || transition == Transition::fly || transition == Transition::push || - transition == Transition::dissolve || transition == Transition::glitter; + transition == Transition::dissolve || transition == Transition::glitter || + transition == Transition::wipe; } struct FrameState { diff --git a/src/wipe.hpp b/src/wipe.hpp new file mode 100644 index 0000000..0c73f97 --- /dev/null +++ b/src/wipe.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include +#include + +namespace pdfcube { + +inline int wipe_direction(int degrees) { + return degrees == 90 || degrees == 180 || degrees == 270 ? degrees : 0; +} + +struct WipeClip { int x, y, width, height; }; +struct WipeGeometry { + WipeClip outgoing; + bool horizontal; + float center; // Clip-space blade center along its travel axis. + float half_width; + int direction; +}; + +// The blade travels just beyond both edges, including its bevel. Pixel-aligned +// clipping leaves no partially sampled seam between independently fitted pages. +inline WipeGeometry wipe_geometry(double progress, int degrees, int width, int height) { + const int direction = wipe_direction(degrees); + const bool horizontal = direction == 0 || direction == 180; + const bool positive = direction == 0 || direction == 90; + const int extent = horizontal ? width : height; + const float half_pixels = std::max(2.0F, .014F * std::min(width, height)); + const float margin = 2 * half_pixels / extent; + const double p = std::clamp(progress, 0.0, 1.0); + const double eased = p * p * (3 - 2 * p); + const double front = -margin + (1 + 2 * margin) * eased; + const int swept = std::clamp(static_cast(std::lround(front * extent)), 0, extent); + WipeClip clip{0, 0, width, height}; + if (horizontal) { + clip.x = positive ? swept : 0; + clip.width = width - swept; + } else { + clip.y = positive ? swept : 0; + clip.height = height - swept; + } + return {clip, horizontal, static_cast((positive ? 1 : -1) * (2 * front - 1)), + 2 * half_pixels / extent, direction}; +} + +} // namespace pdfcube diff --git a/tests/README.md b/tests/README.md index 6c6fb4b..d8d0931 100644 --- a/tests/README.md +++ b/tests/README.md @@ -31,6 +31,11 @@ and reads back all 61 frames of a 60 Hz second, including experimental glass. A small Fontconfig fixture uses DejaVu Sans instead of scanning all system font folders; both cold font and shader initialization remain inside the measured budget. +Wipe cases compare the regions ahead of and behind the blade with exact static +page pixels, including mixed page letterboxes. They verify that the next static +frame is unaffected by clipping/depth state. Geometry tests sample 1001 explicit +progress values per direction and viewport shape without wall-clock waits. + Clock and auto-advance tests use synthetic timestamps and a recording scheduler. They verify frame progress and the exact millisecond delays sent to the backend, including cancellation and idle dispatch. They never sleep. diff --git a/tests/meson.build b/tests/meson.build index 47943ee..b5465eb 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -3,6 +3,7 @@ python = import('python').find_installation('python3') test_watchdog = 10 foreach item : [ + ['physical wiper geometry', 'test_wipe.cc'], ['directional glitter geometry', 'test_glitter.cc'], ['deterministic glass fracture', 'test_dissolve.cc'], ['Fly leaf trajectory', 'test_fly.cc'], @@ -74,7 +75,7 @@ if host_machine.system() == 'linux' render_environment.set('FONTCONFIG_FILE', meson.current_source_dir() / 'fonts.conf') render_environment.set('XDG_CACHE_HOME', meson.current_build_dir() / 'native-test-cache') # Every case targets 500 ms, including cold setup. Serialize to avoid GPU contention. - foreach effect : ['Blinds', 'Split', 'Cover', 'Uncover', 'Fly', 'Push', 'Dissolve', 'Glitter'] + foreach effect : ['Blinds', 'Split', 'Cover', 'Uncover', 'Fly', 'Push', 'Dissolve', 'Glitter', 'Wipe'] axes = ['H'] angles = ['none'] motions = ['I'] @@ -84,7 +85,7 @@ if host_machine.system() == 'linux' if effect == 'Split' or effect == 'Fly' motions = ['I', 'O'] endif - if effect == 'Cover' or effect == 'Uncover' or effect == 'Push' + if effect == 'Cover' or effect == 'Uncover' or effect == 'Push' or effect == 'Wipe' angles = ['0', '90', '180', '270'] elif effect == 'Fly' angles = ['0', '45', '90', '135', '180', '225', '270', '315'] @@ -112,6 +113,9 @@ if host_machine.system() == 'linux' endforeach endforeach endforeach + test('Wipe repeated playback memory', python, + args: [files('test_wipe_replay.py'), render_driver], + timeout: test_watchdog, is_parallel: false, suite: ['render'], env: render_environment) test('rendering compatibility', python, args: [files('test_render.py'), render_driver, files('fixture.pdf'), files('fixture-wide.pdf')], timeout: test_watchdog, is_parallel: false, suite: ['render'], env: render_environment) diff --git a/tests/test_playback.cc b/tests/test_playback.cc index 534285e..f875ff5 100644 --- a/tests/test_playback.cc +++ b/tests/test_playback.cc @@ -10,7 +10,8 @@ int main() { {POPPLER_PAGE_TRANSITION_COVER,"cover"}, {POPPLER_PAGE_TRANSITION_UNCOVER,"uncover"}, {POPPLER_PAGE_TRANSITION_FLY,"fly"}, {POPPLER_PAGE_TRANSITION_PUSH,"push"}, {POPPLER_PAGE_TRANSITION_DISSOLVE,"dissolve"}, - {POPPLER_PAGE_TRANSITION_GLITTER,"glitter"}}; + {POPPLER_PAGE_TRANSITION_GLITTER,"glitter"}, + {POPPLER_PAGE_TRANSITION_WIPE,"wipe"}}; for (const auto& [kind,name] : kinds) { pdfcube::PageInfo page; page.transition_type=kind; diff --git a/tests/test_transition_metadata.cc b/tests/test_transition_metadata.cc index 8c53cb7..ebe4017 100644 --- a/tests/test_transition_metadata.cc +++ b/tests/test_transition_metadata.cc @@ -12,6 +12,7 @@ int main(int argc, char** argv) { const bool fly = argc >= 5 && argv[3][0] == 'F'; const bool push = argc >= 5 && argv[3][0] == 'P'; const bool dissolve = argc >= 5 && argv[3][0] == 'D'; + const bool wipe = argc >= 5 && argv[3][0] == 'W'; const bool glitter = argc >= 5 && argv[3][0] == 'G'; const auto type = split ? POPPLER_PAGE_TRANSITION_SPLIT : cover ? POPPLER_PAGE_TRANSITION_COVER : @@ -19,6 +20,7 @@ int main(int argc, char** argv) { fly ? POPPLER_PAGE_TRANSITION_FLY : push ? POPPLER_PAGE_TRANSITION_PUSH : dissolve ? POPPLER_PAGE_TRANSITION_DISSOLVE : + wipe ? POPPLER_PAGE_TRANSITION_WIPE : glitter ? POPPLER_PAGE_TRANSITION_GLITTER : POPPLER_PAGE_TRANSITION_BLINDS; const bool success = page.transition_type == type && (argc < 6 || page.angle == std::atoi(argv[5])) && diff --git a/tests/test_transitions.py b/tests/test_transitions.py index bc163f0..d90d4a8 100644 --- a/tests/test_transitions.py +++ b/tests/test_transitions.py @@ -17,6 +17,7 @@ push = effect == "Push" dissolve = effect == "Dissolve" glitter = effect == "Glitter" +wipe = effect == "Wipe" with tempfile.TemporaryDirectory() as directory: root = Path(directory) @@ -57,7 +58,7 @@ def capture(pdf, progress=None, *extra): sys.exit(0) assert mode == "checkpoints", "unknown rendering test mode" metadata = [metadata_test, str(deck), orientation, effect, motion] - extra_metadata = [str(angle)] if flip or push or glitter else \ + extra_metadata = [str(angle)] if flip or push or glitter or wipe else \ [str(angle), ".35", "1"] if fly else [] subprocess.run(metadata + extra_metadata, check=True) make_pdf(first, orientation, sizes, (0,)) @@ -79,7 +80,7 @@ def capture(pdf, progress=None, *extra): fallback = root / "fallback.pdf" make_pdf(fallback, orientation, sizes, effect=effect, angle=value) assert capture(fallback, .5) == middle, "default/invalid direction differs" - if (push or glitter) and angle == 0: + if (push or glitter or wipe) and angle == 0: for value in (None, 45, -90): fallback = root / "fallback.pdf" make_pdf(fallback, orientation, sizes, effect=effect, angle=value) @@ -107,6 +108,23 @@ def capture(pdf, progress=None, *extra): make_pdf(opposite, orientation, sizes, effect=effect, motion="O" if motion == "I" else "I") assert middle != capture(opposite, .5), "inward/outward direction ignored" + if wipe: + from PIL import Image + from io import BytesIO + # Pixels safely behind/ahead of the blade must be exact page + # pixels, including the independent letterboxes in mixed ratios. + before = Image.open(BytesIO(start)) + after = Image.open(BytesIO(end)) + wiped = Image.open(BytesIO(middle)) + w,h = wiped.size + if angle in (0,180): + low,high = (0,0,w*2//5,h),(w*3//5,0,w,h) + else: + low,high = (0,0,w,h*2//5),(0,h*3//5,w,h) + revealed,covered = (low,high) if angle in (0,270) else (high,low) + assert wiped.crop(revealed).tobytes() == after.crop(revealed).tobytes() + assert wiped.crop(covered).tobytes() == before.crop(covered).tobytes() + assert capture(first) == start, "wiper leaked GL state into a static frame" quarter, three_quarters = capture(deck, .25), capture(deck, .75) assert len({start, quarter, middle, three_quarters, end}) == 5, "cascade stalled" if not dissolve: @@ -114,7 +132,7 @@ def capture(pdf, progress=None, *extra): if glitter: make_pdf(changed, orientation, sizes, effect=effect, angle={0: 270, 270: 315, 315: 0}[angle]) - elif flip or fly or push: + elif flip or fly or push or wipe: make_pdf(changed, orientation, sizes, effect=effect, motion=motion, angle=(angle+180)%360) else: diff --git a/tests/test_wipe.cc b/tests/test_wipe.cc new file mode 100644 index 0000000..f32be96 --- /dev/null +++ b/tests/test_wipe.cc @@ -0,0 +1,44 @@ +#include "wipe.hpp" + +#include +#include + +int main() { + using namespace pdfcube; + for (const int direction : {0,90,180,270}) { + for (const auto size : {WipeClip{0,0,320,240},WipeClip{0,0,180,320},WipeClip{0,0,1,1}}) { + const auto first = wipe_geometry(0,direction,size.width,size.height); + const auto last = wipe_geometry(1,direction,size.width,size.height); + assert(first.outgoing.width == size.width && first.outgoing.height == size.height); + assert(last.outgoing.width == 0 || last.outgoing.height == 0); + int previous = size.width * size.height; + float previous_center = first.center; + for (int step=0; step<=1000; ++step) { + const auto pose = wipe_geometry(step/1000.0,direction,size.width,size.height); + const auto again = wipe_geometry(step/1000.0,direction,size.width,size.height); + const auto clip = pose.outgoing; + assert(clip.x >= 0 && clip.y >= 0 && clip.width >= 0 && clip.height >= 0); + assert(clip.x + clip.width <= size.width && clip.y + clip.height <= size.height); + const int area = clip.width * clip.height; + assert(area <= previous); + previous = area; + assert(pose.center == again.center && pose.half_width == again.half_width); + assert(pose.half_width > 0 && std::isfinite(pose.center)); + if (direction == 0 || direction == 90) assert(pose.center >= previous_center); + else assert(pose.center <= previous_center); + previous_center = pose.center; + } + assert(wipe_geometry(-1,direction,size.width,size.height).center == first.center); + assert(wipe_geometry(2,direction,size.width,size.height).center == last.center); + // Symmetric travel and a midpoint exactly at the center, without time integration. + const auto quarter = wipe_geometry(.25,direction,size.width,size.height); + const auto three = wipe_geometry(.75,direction,size.width,size.height); + assert(std::abs(quarter.center + three.center) < .00001F); + assert(std::abs(wipe_geometry(.5,direction,size.width,size.height).center) < .00001F); + } + } + for (const int invalid : {-90,45,135,360}) { + assert(wipe_direction(invalid) == 0); + assert(wipe_geometry(.37,invalid,320,240).center == wipe_geometry(.37,0,320,240).center); + } +} diff --git a/tests/test_wipe_replay.py b/tests/test_wipe_replay.py new file mode 100644 index 0000000..3a5e58a --- /dev/null +++ b/tests/test_wipe_replay.py @@ -0,0 +1,23 @@ +"""Replay in one live headless renderer; RSS growth must stay bounded.""" +from pathlib import Path +import sys +import tempfile + +from render_client import Frames +from transition_fixture import make_pdf + +with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + deck = root / 'wipe.pdf' + make_pdf(deck,effect='Wipe',angle=270) + frames = Frames(Path(sys.argv[1]),root) + command = ('@sequence','--snapshot',root/'unused.png','--snapshot-progress','0',deck) + frames.render(*command) # Warm font, texture and shader caches in this context. + def rss(): + status = Path(f'/proc/{frames.process.pid}/status').read_text() + return int(next(line.split()[1] for line in status.splitlines() if line.startswith('VmRSS:')))*1024 + baseline = rss() + for _ in range(4): + frames.render(*command) + assert rss() <= baseline + 4*1024*1024, 'Wipe memory grew during repeated playback' + frames.close() diff --git a/tests/transition_fixture.py b/tests/transition_fixture.py index d6fec8e..fb1c586 100644 --- a/tests/transition_fixture.py +++ b/tests/transition_fixture.py @@ -21,6 +21,9 @@ EXAMPLES += [(f"glitter-{name}", "Glitter", "H", "I", angle) for angle, name in ((0, "right"), (270, "down"), (315, "down-right"))] +EXAMPLES += [(f"wipe-{name}", "Wipe", "H", "I", angle) + for angle,name in ((0,"right"),(90,"up"),(180,"left"),(270,"down"))] + def make_pdf(path, orientation="H", sizes=((640, 360), (640, 360)), pages=(0, 1), effect="Blinds", motion="I", angle=None, start_scale=.35, rectangular=True): diff --git a/tools/transition_gallery.py b/tools/transition_gallery.py index 919aadc..888b5e1 100644 --- a/tools/transition_gallery.py +++ b/tools/transition_gallery.py @@ -21,7 +21,7 @@ help="Number of snapshots to capture concurrently (default: up to 4)") parser.add_argument("--update-docs", action="store_true", help="Refresh the checked-in contact sheets from these captures") -parser.add_argument("--effects", nargs="+", choices=("Blinds", "Split", "Cover", "Uncover", "Fly", "Push", "Dissolve", "Glitter"), +parser.add_argument("--effects", nargs="+", choices=("Blinds", "Split", "Cover", "Uncover", "Fly", "Push", "Dissolve", "Glitter", "Wipe"), help="Capture only selected effects (default: all)") parser.add_argument("--inside-xvfb", action="store_true", help=argparse.SUPPRESS) args = parser.parse_args()