From 1d5bc310b9c2f891bfb5ce31f006f7fbd120ba8e Mon Sep 17 00:00:00 2001 From: Strangedusk Date: Wed, 6 Jul 2022 02:12:18 +0200 Subject: [PATCH] Kicking, not for I pieces --- .gitignore | 3 +- src/movement.zig | 71 +++++++++++++++--- src/piece.zig | 51 +++++++++++-- .../h/8fb74d559dd889eac55495e9f1d9dc64.txt | 8 +- zig-cache/z/15c879599ff43bd66fcf3641638f0aa9 | Bin 10507 -> 17928 bytes zig-cache/z/a4146a97860546c83bdbfe47a036b0af | Bin 19840 -> 22145 bytes 6 files changed, 111 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index f7a9913..ab15b91 100644 --- a/.gitignore +++ b/.gitignore @@ -88,4 +88,5 @@ tags zig zig-out zig-cache -zig-cache/* +zig-cache/h +zig-cache/z diff --git a/src/movement.zig b/src/movement.zig index f96d13f..e73f116 100644 --- a/src/movement.zig +++ b/src/movement.zig @@ -1,3 +1,4 @@ +const std = @import("std"); const Grid = @import("grid.zig"); const Piece = @import("piece.zig"); @@ -65,9 +66,12 @@ pub fn shadow(grid: Grid, piece: Piece) Piece { fn checkCollision(grid: Grid, piece: Piece) bool { for (piece.structure) |_, y| { for (piece.structure[y]) |_, x| { - if (piece.structure[y][x] and ((@intCast(i32, x) + piece.col > Grid.ncolumns - 1) or - (@intCast(i32, x) + piece.col < 0) or (@intCast(i32, y) + piece.row > Grid.nrows - 1) or - (!grid.cells[@intCast(usize, piece.row + @intCast(i32, y))][@intCast(usize, piece.col + @intCast(i32, x))].free))) + if (piece.structure[y][x] + and ((@intCast(i32, x) + piece.col > Grid.ncolumns - 1) + or (@intCast(i32, x) + piece.col < 0) + or (@intCast(i32, y) + piece.row > Grid.nrows - 1) + or (@intCast(i32, y) + piece.row < 0) + or (!grid.cells[@intCast(usize, piece.row + @intCast(i32, y))][@intCast(usize, piece.col + @intCast(i32, x))].free))) { return true; } @@ -78,16 +82,65 @@ fn checkCollision(grid: Grid, piece: Piece) bool { pub fn rotateLeft(grid: Grid, piece: Piece) Piece { var new_piece = piece.rotate(Piece.Rot.left); - if (checkCollision(grid, new_piece)) { - return piece; - } + new_piece = kick(grid, new_piece, piece); + std.debug.print("{}\n",.{new_piece.rot_stage}); return new_piece; } pub fn rotateRight(grid: Grid, piece: Piece) Piece { var new_piece = piece.rotate(Piece.Rot.right); - if (checkCollision(grid, new_piece)) { - return piece; - } + new_piece = kick(grid, new_piece, piece); + std.debug.print("{}\n",.{new_piece.rot_stage}); return new_piece; } + +pub fn kick(grid: Grid, piece: Piece, prev_piece: Piece) Piece { + if (piece.piece_type == Piece.Type.o) return piece; + const prev_stage = prev_piece.rot_stage; + const next_stage = piece.rot_stage; + var new_piece = piece; + + if (piece.piece_type == Piece.Type.i) { + if (!checkCollision(grid, new_piece)) return new_piece; + } //TODO + + if ( + (prev_stage == Piece.RotStage.init and next_stage == Piece.RotStage.right) + or (prev_stage == Piece.RotStage.flip and next_stage == Piece.RotStage.right) + or (prev_stage == Piece.RotStage.left and next_stage == Piece.RotStage.flip) + or (prev_stage == Piece.RotStage.left and next_stage == Piece.RotStage.init) + ) { + // Test Positions + if (!checkCollision(grid, new_piece)) return new_piece; + + new_piece.col -= 1; + if (!checkCollision(grid, new_piece)) return new_piece; + + new_piece.row -= 1; + if (!checkCollision(grid, new_piece)) return new_piece; + + new_piece.col += 1; + new_piece.row += 3; + if (!checkCollision(grid, new_piece)) return new_piece; + + new_piece.col -= 1; + if (!checkCollision(grid, new_piece)) return new_piece; + + } else { + if (!checkCollision(grid, new_piece)) return new_piece; + + new_piece.col += 1; + if (!checkCollision(grid, new_piece)) return new_piece; + + new_piece.row += 1; + if (!checkCollision(grid, new_piece)) return new_piece; + + new_piece.col -= 1; + new_piece.row -= 3; + if (!checkCollision(grid, new_piece)) return new_piece; + + new_piece.col += 1; + if (!checkCollision(grid, new_piece)) return new_piece; + } + return prev_piece; +} diff --git a/src/piece.zig b/src/piece.zig index 6176698..693a436 100644 --- a/src/piece.zig +++ b/src/piece.zig @@ -11,6 +11,13 @@ pub const Rot = enum { left, }; +pub const RotStage = enum(i8) { + init, + right, + flip, + left, +}; + pub const Type = enum { o, i, @@ -31,9 +38,14 @@ col: i32, // 4x4 grid indicating piece form structure: [4][4]bool, +// Rotation Stage +rot_stage: RotStage = RotStage.init, + // Should this be dropped and become part of the grid (flag) dropped: bool = false, +// Has the piece been swapped? swapped: bool = false, + piece_type: Type, color: SDL.SDL_Color, @@ -107,15 +119,28 @@ pub fn rotate(self: Self, dir: Rot) Self { var new_piece = self; + // The "sequences" indicate square coords and are always the same when rotating, so we make all squares follow said rotation + // [Inner/Outer][The sequence (0 -> 1 -> 2 -> 3 -> 0...)][Rows, Cols] + if (self.piece_type == Type.i) { const sequences = .{ .{ .{ 1, 0 }, .{ 0, 2 }, .{ 2, 3 }, .{ 3, 1 } }, .{ .{ 2, 0 }, .{ 0, 1 }, .{ 1, 3 }, .{ 3, 2 } }, .{ .{ 1, 1 }, .{ 1, 2 }, .{ 2, 2 }, .{ 2, 1 } } }; - inline for (sequences) |seq| { - inline for (seq) |_, i| { - if (dir == Rot.right) { + if (dir == Rot.right) { + // Cicle through rotation stage + new_piece.rot_stage = @intToEnum(RotStage, @mod((@enumToInt(new_piece.rot_stage) + 1), 4)); + // Rotate structure CW + inline for (sequences) |seq| { + inline for (seq) |_, i| { const refi = @mod((@intCast(i32, i) - 1), 4); new_piece.structure[seq[i][0]][seq[i][1]] = self.structure[seq[refi][0]][seq[refi][1]]; - } else { + } + } + } else { + // Cicle through rotation stage + new_piece.rot_stage = @intToEnum(RotStage, @mod((@enumToInt(new_piece.rot_stage) - 1), 4)); + // Rotate structure CCW + inline for (sequences) |seq| { + inline for (seq) |_, i| { const refi = @mod((@intCast(i32, i) + 1), 4); new_piece.structure[seq[i][0]][seq[i][1]] = self.structure[seq[refi][0]][seq[refi][1]]; } @@ -124,12 +149,22 @@ pub fn rotate(self: Self, dir: Rot) Self { } else { const sequences = .{ .{ .{ 0, 0 }, .{ 0, 2 }, .{ 2, 2 }, .{ 2, 0 } }, .{ .{ 0, 1 }, .{ 1, 2 }, .{ 2, 1 }, .{ 1, 0 } } }; - inline for (sequences) |seq| { - inline for (seq) |_, i| { - if (dir == Rot.right) { + if (dir == Rot.right) { + // Cicle through rotation stage + new_piece.rot_stage = @intToEnum(RotStage, @mod((@enumToInt(new_piece.rot_stage) + 1), 4)); + // Rotate structure CW + inline for (sequences) |seq| { + inline for (seq) |_, i| { const refi = @mod((@intCast(i32, i) - 1), 4); new_piece.structure[seq[i][0]][seq[i][1]] = self.structure[seq[refi][0]][seq[refi][1]]; - } else { + } + } + } else { + // Cicle through rotation stage + new_piece.rot_stage = @intToEnum(RotStage, @mod((@enumToInt(new_piece.rot_stage) - 1), 4)); + // Rotate structure CCW + inline for (sequences) |seq| { + inline for (seq) |_, i| { const refi = @mod((@intCast(i32, i) + 1), 4); new_piece.structure[seq[i][0]][seq[i][1]] = self.structure[seq[refi][0]][seq[refi][1]]; } diff --git a/zig-cache/h/8fb74d559dd889eac55495e9f1d9dc64.txt b/zig-cache/h/8fb74d559dd889eac55495e9f1d9dc64.txt index 6180e8b..fd69f67 100644 --- a/zig-cache/h/8fb74d559dd889eac55495e9f1d9dc64.txt +++ b/zig-cache/h/8fb74d559dd889eac55495e9f1d9dc64.txt @@ -1,7 +1,7 @@ 1361 36569768 1657038271710135652 e361ab3d1987688681b5db7b52fd5cba /home/strange/Documentos/Projectes/Programació/usg/src/main.zig 1361 36569768 1657038271710135652 e361ab3d1987688681b5db7b52fd5cba /home/strange/Documentos/Projectes/Programació/usg/src/main.zig 135300 36570392 1655299923670057346 b4c2d851673df5aab566633b89bdaa84 /home/strange/Documentos/Projectes/Programació/usg/lib/SDL.zig/src/binding/sdl.zig -32 36570080 1657057884680280513 91a8da097c7c1645ba2a6217a5171c4e /home/strange/Documentos/Projectes/Programació/usg/zig-cache/options/kh59p23UXKId3bWMadeQ0Yp6cv2kATA4qPk2nBQ2q_3IsG9JTjKRYS1YxdIMHL6s +32 36570080 1657065821400339134 91a8da097c7c1645ba2a6217a5171c4e /home/strange/Documentos/Projectes/Programació/usg/zig-cache/options/kh59p23UXKId3bWMadeQ0Yp6cv2kATA4qPk2nBQ2q_3IsG9JTjKRYS1YxdIMHL6s 5621 36968525 1655270162000000000 66001e1a55f68e4681c1f32a69223647 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/std.zig 5621 36968525 1655270162000000000 66001e1a55f68e4681c1f32a69223647 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/std.zig 29901 36968437 1655270162000000000 5c441d88acbf5e7fe2a26137df2b5376 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/builtin.zig @@ -21,7 +21,7 @@ 121502 36968568 1655270162000000000 4bad05f05e4a10364e515a13d2fa2b3f /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/os/linux/io_uring.zig 135300 36570392 1655299923670057346 b4c2d851673df5aab566633b89bdaa84 /home/strange/Documentos/Projectes/Programació/usg/lib/SDL.zig/src/binding/sdl.zig 1640 36570393 1655299923670057346 c3d50ea43c9e10688a521a9ac927ded4 /home/strange/Documentos/Projectes/Programació/usg/lib/SDL.zig/src/binding/sdl_image.zig -32 36570080 1657057884680280513 91a8da097c7c1645ba2a6217a5171c4e /home/strange/Documentos/Projectes/Programació/usg/zig-cache/options/kh59p23UXKId3bWMadeQ0Yp6cv2kATA4qPk2nBQ2q_3IsG9JTjKRYS1YxdIMHL6s +32 36570080 1657065821400339134 91a8da097c7c1645ba2a6217a5171c4e /home/strange/Documentos/Projectes/Programació/usg/zig-cache/options/kh59p23UXKId3bWMadeQ0Yp6cv2kATA4qPk2nBQ2q_3IsG9JTjKRYS1YxdIMHL6s 7338 36968289 1655270162000000000 ee4fd6c02929ff52d99a8faa2539dce8 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/zig.zig 21121 36968483 1655270162000000000 669c911cf26ce07c5f5516d896b30e33 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/zig/c_translation.zig 113573 36968636 1655270162000000000 2c3980264c753ba754322c7c8c4f2634 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/mem.zig @@ -29,7 +29,7 @@ 2077 36569864 1657057506010277717 a18ae95a6705d7982e23251e180871b3 /home/strange/Documentos/Projectes/Programació/usg/src/grid.zig 256 36569823 1657057405170276972 a69ae39529d33ff9e7623523a1e0dbe9 /home/strange/Documentos/Projectes/Programació/usg/src/cell.zig 1708 36569840 1657038395020136563 151ce67aaf4e36de54f56be701bc0b66 /home/strange/Documentos/Projectes/Programació/usg/src/bag.zig -5393 36569846 1657057045880274318 1150e3c04cfc9dfab11e84e9393b3c7f /home/strange/Documentos/Projectes/Programació/usg/src/piece.zig +6714 36569846 1657063070590318817 75177ff9bec84da98c4812ee52669e19 /home/strange/Documentos/Projectes/Programació/usg/src/piece.zig 16192 36968506 1655270162000000000 744a2bb13e662f350a196780c9fbcad2 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/rand.zig 3105 36968346 1655270162000000000 412e5ff0bcf84571f173caa8acab5393 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/rand/Xoshiro256.zig 45023 36968356 1655270162000000000 c30e605ecc099ad6f5498460429756fa /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/elf.zig @@ -40,7 +40,7 @@ 9352 36968413 1655270162000000000 8c526bbafa435d2af666b490a1e838ad /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/Thread/Mutex.zig 3400 36968452 1655270162000000000 5d1d518c32f4fd700943417f56120125 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/io/writer.zig 41490 36968415 1655270162000000000 f3d5b2d6057676d8866cf9291ef27dee /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/Thread/Futex.zig -2630 36569862 1657050236460224024 5dff7cfcc8018dda84a0c5cdfefabc5b /home/strange/Documentos/Projectes/Programació/usg/src/movement.zig +4491 36569862 1657065820400339127 9a2d44189292dcdacdca08c75c5b78ec /home/strange/Documentos/Projectes/Programació/usg/src/movement.zig 1287 36569807 1657025367450040341 019ede768d3bb377ce293523ab6255bf /home/strange/Documentos/Projectes/Programació/usg/src/renderer.zig 102705 36968384 1655270162000000000 4896646ce9abce74b86bcbbc275a18c1 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/fmt.zig 31107 36968497 1655270162000000000 efe5272d00145b6eca03d42fcf5fcd30 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/mem/Allocator.zig diff --git a/zig-cache/z/15c879599ff43bd66fcf3641638f0aa9 b/zig-cache/z/15c879599ff43bd66fcf3641638f0aa9 index 288d0b3b1486ad2b39508120c532926a8b844dc9..f167e6666656062203503dbdee63b1e7ab0d391c 100644 GIT binary patch literal 17928 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 literal 10507 zcmbW52Yi)9x`z)&iWI4e6%%?FDT0NNKmrJeNI;4TLUJI1m_QNs2R8*{}sMxTVRoAt^eV&u~_MV%~-Mzm%`tYCko%+o?GvCQqv|lXtb1W9S zaDV2p+ka!RLxy%as-VWcgDb39Y;T*fo%}zmQgdr(!r>_HU|KRhRU zM{GyhfFR7QvL~lv$i%q+>)=kVv+J8!#D7lA@v9oWDjzdypS>d|mX(vzJ*|VeE@_=A zG6@&?oWv{#g@0L^PW<=ZG3+=bd6ES4pYzD-MEDCvq~~Yl-_E1#J?1lThbpebur1z~RC6$V~y0>KvS-;~fZ=tB1is z&_3u9Xyp{msR0Ekb7QgkXlu|ehyRp(PUqJcZ11x<54A1mp9htb^D0Slb|Rk%&LT&bxzt9Mt*g`xLyxT%#u7JYDzK!ROU~2zbt#qRvNkj{3iW|CH=Q5_bvx z97f)L)VG8G7qoKnId>&Fk0YN6KHslU3V*@~n2;3z4cIQA^$tcI+t_S`lwcno)cCt5 zHL#;(*0w&ssWy)4pl#mxt5N(LVs{R99rE5ImOE~0(B|j?*o}j>L~YkIXlpb|`t7H3 za{t(88n`yvN0<+7RkQWL@!dDa1npr#rL+w@6Sf3(-1^jWKluEfOOyM@{?vh}{*Gvr ztUCyMJ$f`+fM&2b&d)X516}c3ZxR~C<11|Er9Bn3zVSGVd@qQS+2nYfh@(5$xA~Pp zZEro*wYJ}Bl&gKw0jO(}74q7%L%BZdm4vbbnZM;_N#)uzv8_8K)KjD6U1M34oQr*` ziI|}CC^xp&8v!H1XFd(h4)sQpcP#BipR_MJ!*P+JLb#8-yJ=zw15H%Lg zrvp5M-5K48c0rxbG3cXcS9BBF4Sgc$X7pmX40__zD%5vy3WN_)N2 T?PjkFBEKUi_KxTTu5_f9km>-J2(Y zX&`u>)aL9j{jPhItlJX*r|8}IA3%$+J#U`HI6mWGy=?rhxA(65=zh>16#VYH^Y9s$ zD4DgbXV=so+Oo@;bI zdqF7IXT7=D`m-2Ry&$Pv`(kYC?h5^>QM!+eWl^GPV$Q1LI{zgY&dqwC!RO%m>_Kx- z>wQVy`DrhwzUBJVE3ozVWPa*ZN#)wtU|aXc(4QJ5?<32i#m~SKJs;F?EPeUWArBc2cfs12cv6H`_BY_zub=PJ#;7PJ+wCHJ?H_j z5t`w*zoXE5vD46XXmfNu+7f**=tHP`u>sl||7Nriyb5ixUFUY_7HsdKt!PK|S=4#u zg7?z%*xpOqQ17Lef^J8>V~#+(;eQWp2ERZL>|JOt^h4Bp$??3Gc4K=leS-EzKSNWY z6=Y)XLHnUTXO@cXeeyNhAN>|>4IN-0_V+=5L{Gx@JB|7i>N}weIvD!^9_j(?uGlAI zAAx-;+97B&v~uzs8Piij!BDgv^|Vi*pUTNOXX3QqW2-2?HI%Oo>c0G%eC6c3FB7Nt zwd(nLo4oggcf%+!od%XlHpUj1O(>&%LkCr`&UXG3uD}&@-tQ2cOUU z{Gc{>j;d|_yV5hD?HQVCCa7cjyTSIJ%LVkSUWR)9t_!*Zt({7sh-!PVMA- z6f=?9Fh(Xh`}O|yPIjI?qsiYH&O=>8Kl;5dqh#IN@z=n25%}BqNSw~YHSCSg``3Eg za5^{FDg)ml(0(QOjZYyy@6RZ?7PfUgO+LqB%I*6N+F70oSBEzC7sY2M<;Led)G^;e zy-TkH`!hd3sLdTmwU5g2@h&u}j%j>sZ(MfKueuv`9lsCy30gVnvj61xe2Y{2?l4Aj zo73@S;;>)u)vDs-JdDpD^y9O8Z$`;y+Kc~qd=FRn2b2`##fBBcbK|kIi)X}#7fjAC zOXP;cCsky!ipz^)`4dX=vPz1l#q#{8G=D-~ad|8^Kb||aUvXh!L1{s8QLLo6Y(iN) z(XJv}(b;51=sde%a%`HTByzec%ve#pe0-uHmRnp%7v+f&rp5CTC5eiqWhLk2mYq`) z=ljCU*rbwpJeC_TEG)G}aY>?Hm{1X(bIvX*jTO;RX_!!~&?gyQTox-yJe-ShJ}cq# zi$PFbOgGX@FzGWmZkqGKq|eRb<{Sr0AP+Ji6{difR}pxii^2B(xYG6omkMdn99lq2 zXazH149o$}YHS)rh zo74+I+ZVc<%8lcu@e*nZzQFxs!WXzNZ~uU34gN6qCFl##-; znU3vYN?uPlbYEBouIKfT0jaPW7Q?OJ`mF)iGY3Y%NN~MT+d5k5nKkYw{f@}T)!*9exm+9CZ7@PYtTL5^M3_j!%y%tya(_%UifNQ2tY91endlp(Q~VLKTASK&3- z0k6Xw;9hte-hsEkJ>h<6PvZ{Yc7BJ@T!!Gy$K7`%y z5twQ~w0;}NZv^+#Cy=~;pJ9Iv$?Nw8_LtxXz1z?MXg^3H|2zBvf5KpV1JUZR7xsY* zQVm?MsQu~WM}h6@qYc2=jEAVb@o5ak$F)5eqV~qE5W5!Y$Ic_bm^6c?Ek8?Tp61XCi`(xeuSD{yf@wUFY47~=s_ESgloxl&d zM?)9z2Vz&~2Hl|t91D)q3yy>1;RNv6dP6$&fegrmzTiH{f^6sy?u~(P61X3Rz#upo zhQb-(y@bS?^3Ne~DEJ43ABBd≻Gmha9lK2BA#~`Te0f)PR~$3l4zVPzUNlJvb0X z!f7x9M!{&f9qs_n*{9G1yg$EzZ{a)m9)5ry;cxI0c(?une}`Y;AMhKDp|7#vzV`Xf z1o!edFdYaTV1L*H-q&YQHUW~)UM_YXB%i%W*pnfZHjkj|-~reIPlL}e5p9STpi^Kf zcs|@CMNkaWU^RM&^?A5a#Y}1%FmU#z8V>z}TLDQfGc-OQXRFxI=^1Naa=g5B^jd;*_>eI7-hp7#f_H^4*iFl+?R zz@zXOY=Xz(8F&_6gB|c0d=B>IW^~Q&!Tu}U3-`e~xF6Po=V=ePzx)F&i~8MB*8x}T zEB^T!+=Ji3ci_JJ5x$4Nf&S=TyOaD~uomuyFX3nS1%86R!>{1lMEBY?){5t5mv%qU=^%}-{5!n2mAql!Vu={yNGP!UFE&w8eELy5?BBW;Zj%xm%(E2T)-+5xfU;QGau! zf*)T-LNPe+X{c-JM?m*PD!6CeyY5@}Y%6FD<=_XS=@7-uJ?#E9-IA1{vt&(1O6$H8vke(C`| zA^MP4gR#1TYwHIz@04C}93-!;9|li^}>La5mJz7i-wCVFUJZ*7!%NeUSD^jT=77*}P+6<~)mh$550=Gg~*SyQ0sQIc+wi zEN)f()5iK;1N$}IeBA1{>UMvs>C~L~7mdFB^E=ym?tBlJmLAva+PNzZ7`ET^(nXDC z|K82J_7Lc8At`-c$4wj84t{duk0smh-#M{?Ym^417LsbkaxUET;^lW8m2&6jU8}#d zsRcfN_xbmM>87`ypY`rb`&Rw({+l&s3|qdU13sVI-!-QGuS~md^tpSle)_x@Huku! z%U37h>je|T1GZg1qvO%v6%4$0=kzO^?#eqigEHS|b3*yb(Z9ztZrj&w@VGDPFCD({ rnxT}5?@7~!8Z~z}E3C7+#r!R~u@~#DIt||#@E$cOai|VO;Pd|%=yyeU diff --git a/zig-cache/z/a4146a97860546c83bdbfe47a036b0af b/zig-cache/z/a4146a97860546c83bdbfe47a036b0af index 7ebee058d32c6d53b95012c244da57f81901f1f9..31d7f1c8081780942a005007c09741db384069e6 100644 GIT binary patch literal 22145 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 ak+I2I!8-8s+G60GJN{jvB4mSW^M3&0&qGH5 literal 19840 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 T@_v?f%{+hY;S|UM=k~t