From 0a374b852d4aaf5f5fec112717af259276b8c8c0 Mon Sep 17 00:00:00 2001 From: Amy Gale Ruth Bowersox Date: Thu, 28 May 2020 21:04:10 -0600 Subject: [PATCH] added "Hold" functionality; revamped scoring system; added popup banner for 2+ lines removed at once; fixed bug at end game where shapes still present were not cleared away --- Privyet/Base.lproj/Main.storyboard | 21 ++++++--- Privyet/Block.swift | 39 +++++++++++++++++ Privyet/GameScene.swift | 45 +++++++++++++++++++- Privyet/GameViewController.swift | 61 +++++++++++++++++++++------ Privyet/Privyet.swift | 48 +++++++++++++++++++-- Privyet/Shape.swift | 36 ++++++++++++++++ Privyet/Sounds/privyet.mp3 | Bin 0 -> 12734 bytes Privyet/Sounds/zap.mp3 | Bin 0 -> 7272 bytes Privyet/Sprites.atlas/double.png | Bin 0 -> 1815 bytes Privyet/Sprites.atlas/double@2x.png | Bin 0 -> 3150 bytes Privyet/Sprites.atlas/privyet.png | Bin 0 -> 2283 bytes Privyet/Sprites.atlas/privyet@2x.png | Bin 0 -> 4204 bytes Privyet/Sprites.atlas/triple.png | Bin 0 -> 1676 bytes Privyet/Sprites.atlas/triple@2x.png | Bin 0 -> 2644 bytes 14 files changed, 227 insertions(+), 23 deletions(-) create mode 100755 Privyet/Sounds/privyet.mp3 create mode 100755 Privyet/Sounds/zap.mp3 create mode 100644 Privyet/Sprites.atlas/double.png create mode 100644 Privyet/Sprites.atlas/double@2x.png create mode 100644 Privyet/Sprites.atlas/privyet.png create mode 100644 Privyet/Sprites.atlas/privyet@2x.png create mode 100644 Privyet/Sprites.atlas/triple.png create mode 100644 Privyet/Sprites.atlas/triple@2x.png diff --git a/Privyet/Base.lproj/Main.storyboard b/Privyet/Base.lproj/Main.storyboard index 966bd70..c9c0c3c 100644 --- a/Privyet/Base.lproj/Main.storyboard +++ b/Privyet/Base.lproj/Main.storyboard @@ -15,13 +15,6 @@ - @@ -60,6 +53,20 @@ + + diff --git a/Privyet/Block.swift b/Privyet/Block.swift index aee499e..b66ee74 100644 --- a/Privyet/Block.swift +++ b/Privyet/Block.swift @@ -37,6 +37,45 @@ enum BlockColor: Int, CustomStringConvertible, CaseIterable { } } +// Rectangles in block coordinates +class BlockRect { + var left: Int + var top: Int + var right: Int + var bottom: Int + + init(left: Int, top: Int, right: Int, bottom: Int) { + self.left = left + self.top = top + self.right = right + self.bottom = bottom + } + + convenience init(x: Int, y: Int) { + self.init(left: x, top: y, right: x, bottom: y) + } + + var width: Int { + return right - left + 1 + } + + var height: Int { + return bottom - top + 1 + } + + static func +(lhs: BlockRect, rhs: BlockRect) -> BlockRect { + return BlockRect(left: min(lhs.left, rhs.left), top: min(lhs.top, rhs.top), right: max(lhs.right, rhs.right), bottom: max(lhs.bottom, rhs.bottom)) + } + + static func +=(lhs: BlockRect, rhs: BlockRect) -> BlockRect { + lhs.left = min(lhs.left, rhs.left) + lhs.top = min(lhs.top, rhs.top) + lhs.right = max(lhs.right, rhs.right) + lhs.bottom = max(lhs.bottom, rhs.bottom) + return lhs + } +} + // Represents a single block in the game. class Block: Hashable, CustomStringConvertible { // Constants diff --git a/Privyet/GameScene.swift b/Privyet/GameScene.swift index 87d5ffc..69192f4 100644 --- a/Privyet/GameScene.swift +++ b/Privyet/GameScene.swift @@ -23,6 +23,7 @@ class GameScene: SKScene { var lastTick: NSDate? var scaleFactor: CGFloat! + var holdControlRect: CGRect! var textureCache = Dictionary() var textureAtlas: SKTextureAtlas? @@ -62,6 +63,14 @@ class GameScene: SKScene { shapeLayer.addChild(gameBoard) gameLayer.addChild(shapeLayer) + // Calculate area of "hold" piece for hit-testing + let holdBBox = Shape.boundingBox(baseColumn: HoldColumn, baseRow: HoldRow) + let holdWidth = CGFloat(holdBBox.width) * BlockSize + let holdHeight = CGFloat(holdBBox.height) * BlockSize + let holdX = LayerPosition.x + (CGFloat(HoldColumn) * BlockSize) + let holdY = LayerPosition.y + (CGFloat(HoldRow) * BlockSize) + holdControlRect = CGRect(x: holdX * scaleFactor, y: holdY * scaleFactor, width: holdWidth * scaleFactor, height: holdHeight * scaleFactor) + // Set the theme music to play infinitely. run(SKAction.repeatForever(SKAction.playSoundFileNamed("Sounds/theme.mp3", waitForCompletion: true))) } @@ -163,9 +172,19 @@ class GameScene: SKScene { } // Animate the removed lines "exploding" and the remaining blocks dropping into place. - func animateCollapsingLines(linesToRemove: Array>, fallenBlocks: Array>, completion: @escaping () -> ()) { + func animateCollapsingLines(linesToRemove: Array>, fallenBlocks: Array>, fadingShapes: Array, completion: @escaping () -> ()) { var longestDuration: TimeInterval = 0 + // Animate the shapes fading out + for fadeShape in fadingShapes { + for block in fadeShape.blocks { + let sprite = block.sprite! + let fadeOutAction: SKAction = SKAction.fadeOut(withDuration: TimeInterval(0.1)) + fadeOutAction.timingMode = .easeIn + sprite.run(SKAction.sequence([fadeOutAction, SKAction.removeFromParent()])) + } + } + // Animate the falling blocks dropping into place for (columnIdx, column) in fallenBlocks.enumerated() { for (blockIdx, block) in column.enumerated() { @@ -212,4 +231,28 @@ class GameScene: SKScene { } run(SKAction.sequence([SKAction.wait(forDuration: longestDuration), SKAction.run(completion)])) } + + // Animate the multiple-line clearance banner. + func animateClearanceBanner(bannerName: String?) { + guard let name = bannerName else { + return + } + var texture = textureCache[name] + if texture == nil { + texture = textureAtlas?.textureNamed(name) + textureCache[name] = texture + } + let sprite = SKSpriteNode(texture: texture) + + sprite.position = CGPoint(x: LayerPosition.x + (CGFloat(NumColumns / 2) * BlockSize), y: LayerPosition.y - (CGFloat(NumRows / 2) * BlockSize)) + sprite.zPosition = 20 + sprite.alpha = 0 + shapeLayer.addChild(sprite) + + // Animate a quick fade-in followed by a slow fade out + let fadeInAction: SKAction = SKAction.fadeAlpha(to: 0.9, duration: 0.05) + let fadeOutAction: SKAction = SKAction.fadeOut(withDuration: 1.5) + fadeOutAction.timingMode = .easeIn + sprite.run(SKAction.sequence([fadeInAction, fadeOutAction, SKAction.removeFromParent()])) + } } diff --git a/Privyet/GameViewController.swift b/Privyet/GameViewController.swift index 8c9a0d8..c903ab2 100644 --- a/Privyet/GameViewController.swift +++ b/Privyet/GameViewController.swift @@ -10,6 +10,8 @@ import UIKit import SpriteKit import GameplayKit +let ClearanceAnimation = [nil, "double", "triple", "privyet"] + class GameViewController: UIViewController, PrivyetDelegate, UIGestureRecognizerDelegate { var scene: GameScene! var privyet: Privyet! @@ -31,7 +33,8 @@ class GameViewController: UIViewController, PrivyetDelegate, UIGestureRecognizer scene.scaleMode = .aspectFill bucketRect = scene.rectForBucket() - print("Computed bucket rectangle = \(bucketRect!)") + //print("Computed bucket rectangle = \(bucketRect!)") + //print("Computed hold rectangle = \(scene.holdControlRect!)") scene.tick = didTick @@ -52,6 +55,8 @@ class GameViewController: UIViewController, PrivyetDelegate, UIGestureRecognizer let tapLoc = sender.location(in: view) if bucketRect.contains(tapLoc) { privyet.rotateShape() + } else if scene.holdControlRect.contains(tapLoc) { + privyet.holdShape() } } @@ -136,7 +141,7 @@ class GameViewController: UIViewController, PrivyetDelegate, UIGestureRecognizer view.isUserInteractionEnabled = false scene.stopTicking() scene.playSound(sound: "Sounds/gameover.mp3") - scene.animateCollapsingLines(linesToRemove: privyet.removeAllBlocks(), fallenBlocks: privyet.removeAllBlocks()) { + scene.animateCollapsingLines(linesToRemove: privyet.removeAllBlocks(), fallenBlocks: privyet.removeAllBlocks(), fadingShapes: privyet.removeAllShapes()) { privyet.beginGame() } } @@ -161,20 +166,52 @@ class GameViewController: UIViewController, PrivyetDelegate, UIGestureRecognizer scene.playSound(sound: "Sounds/drop.mp3") } + // Called when the current shape is put "on hold" + func gameShapePutOnHold(privyet: Privyet, firstHold: Bool) { + guard let held = privyet.heldShape else { + return + } + scene.stopTicking() + view.isUserInteractionEnabled = false + scene.redrawShape(shape: held) { + if (firstHold) { + self.nextShape() // act like the previous shape settled + } else { + self.scene.redrawShape(shape: privyet.fallingShape!) { + self.scene.startTicking() + self.view.isUserInteractionEnabled = true + } + } + } + scene.playSound(sound: "Sounds/zap.mp3") + } + + // Internal: called when a shape lands, used to keep from showing the "special" banner more than once + func internalDidLand(privyet: Privyet, showBanner: Bool) { + let removedLines = privyet.removeCompletedLines() + let linesCount = removedLines.linesRemoved.count + if linesCount > 0 { + self.scoreLabel.text = "\(privyet.score)" + if (showBanner) { + scene.animateClearanceBanner(bannerName: ClearanceAnimation[linesCount - 1]) + } + scene.animateCollapsingLines(linesToRemove: removedLines.linesRemoved, fallenBlocks: removedLines.fallenBlocks, fadingShapes: []) { + self.internalDidLand(privyet: privyet, showBanner: (linesCount <= 1) && showBanner) + } + self.scene.playSound(sound: "Sounds/bomb.mp3") + if showBanner && linesCount == 4 { + self.scene.playSound(sound: "Sounds/privyet.mp3") + } + } else { + nextShape() + } + } + // Called when a shape "lands" on top of existing blocks or at the bottom of the bucket func gameShapeDidLand(privyet: Privyet) { scene.stopTicking() self.view.isUserInteractionEnabled = false - let removedLines = privyet.removeCompletedLines() - if removedLines.linesRemoved.count > 0 { - self.scoreLabel.text = "\(privyet.score)" - scene.animateCollapsingLines(linesToRemove: removedLines.linesRemoved, fallenBlocks: removedLines.fallenBlocks) { - self.gameShapeDidLand(privyet: privyet) - } - self.scene.playSound(sound: "Sounds/bomb.mp3") - } else { - nextShape() - } + internalDidLand(privyet: privyet, showBanner: true) } // Called when a shape moves on the screen diff --git a/Privyet/Privyet.swift b/Privyet/Privyet.swift index 216835a..5c7f375 100644 --- a/Privyet/Privyet.swift +++ b/Privyet/Privyet.swift @@ -17,8 +17,12 @@ let StartingRow = 0 let PreviewColumn = 12 let PreviewRow = 3 -let PointsPerLine = 10 -let LevelThreshold = 500 +let HoldColumn = 12 +let HoldRow = 10 + +// number of points for single (1 line), double (2 lines), triple (3 lines), Privyet (4 lines) +let PointsPerLine = [1, 2, 5, 10] +let LevelThreshold = 50 protocol PrivyetDelegate { // Invoked when the current round of Privyet ends @@ -36,6 +40,9 @@ protocol PrivyetDelegate { // invoked when the falling shape has changed its location after being dropped func gameShapeDidDrop(privyet: Privyet) + // invoked when the current shape is put on hold + func gameShapePutOnHold(privyet: Privyet, firstHold: Bool) + // invoked when the game has reached a new level func gameDidLevelUp(privyet: Privyet) } @@ -44,6 +51,7 @@ class Privyet { var bucket: Array2D var nextShape: Shape? var fallingShape: Shape? + var heldShape: Shape? var delegate: PrivyetDelegate? var score = 0 @@ -52,6 +60,7 @@ class Privyet { init() { fallingShape = nil nextShape = nil + heldShape = nil bucket = Array2D(columns: NumColumns, rows: NumRows) } @@ -154,7 +163,7 @@ class Privyet { } // Advance score and game level as appropriate - let pointsEarned = removedLines.count * PointsPerLine * level + let pointsEarned = PointsPerLine[removedLines.count - 1] * max(level / 2, 1) score += pointsEarned if score >= level * LevelThreshold { level += 1 @@ -201,6 +210,21 @@ class Privyet { return allBlocks } + // Removes all stored shapes from their slots (at end of game). Returns all the removed shapes. + func removeAllShapes() -> Array { + var allShapes = Array() + for shape in [fallingShape, nextShape, heldShape] { + guard let s = shape else { + continue + } + allShapes.append(s) + } + fallingShape = nil + nextShape = nil + heldShape = nil + return allShapes + } + // Drop the falling shape down as far as it will go. func dropShape() { guard let shape = fallingShape else { @@ -272,4 +296,22 @@ class Privyet { } delegate?.gameShapeDidMove(privyet: self) } + + // Places current shape "on hold." + func holdShape() { + guard let shape = fallingShape else { + return + } + guard let held = heldShape else { + shape.moveTo(column: HoldColumn, row: HoldRow) + heldShape = shape + fallingShape = nil + delegate?.gameShapePutOnHold(privyet: self, firstHold: true) + return + } + shape.exchangePositions(other: held) + fallingShape = held + heldShape = shape + delegate?.gameShapePutOnHold(privyet: self, firstHold: false) + } } diff --git a/Privyet/Shape.swift b/Privyet/Shape.swift index 77ca24c..9456895 100644 --- a/Privyet/Shape.swift +++ b/Privyet/Shape.swift @@ -131,6 +131,21 @@ class Shape: Hashable, CustomStringConvertible { } } + final func getBoundingBoxForOrientation(baseColumn: Int, baseRow: Int, orientation: Orientation) -> BlockRect { + guard let offsets = blockRowColumnPositions[orientation] else { + return BlockRect(x: baseColumn, y: baseRow) + } + + let blockRects = offsets.map { (offset) -> BlockRect in + return BlockRect(x: baseColumn + offset.columnDiff, y: baseRow + offset.rowDiff) + } + return blockRects[0] + blockRects[1] + blockRects[2] + blockRects[3] + } + + final func getBoundingBox(baseColumn: Int, baseRow: Int) -> BlockRect { + return getBoundingBoxForOrientation(baseColumn: baseColumn, baseRow: baseRow, orientation: .Zero) + getBoundingBoxForOrientation(baseColumn: baseColumn, baseRow: baseRow, orientation: .Ninety) + getBoundingBoxForOrientation(baseColumn: baseColumn, baseRow: baseRow, orientation: .OneEighty) + getBoundingBoxForOrientation(baseColumn: baseColumn, baseRow: baseRow, orientation: .TwoSeventy) + } + // Rotate the blocks in this shape to a new orientation. final func rotateBlocks(orientation: Orientation) { guard let blockRowColumnTranslation: Array<(columnDiff: Int, rowDiff: Int)> = blockRowColumnPositions[orientation] else { @@ -193,6 +208,17 @@ class Shape: Hashable, CustomStringConvertible { rotateBlocks(orientation: orientation) } + final func exchangePositions(other: Shape) { + var tmp = other.column + other.column = self.column + self.column = tmp + tmp = other.row + other.row = self.row + self.row = tmp + other.rotateBlocks(orientation: other.orientation) + rotateBlocks(orientation: orientation) + } + // Generates a random shape. final class func random(startingColumn: Int, startingRow: Int) -> Shape { switch Int.random(in: 0 ..< NumShapeTypes) { @@ -212,4 +238,14 @@ class Shape: Hashable, CustomStringConvertible { return ZShape(column: startingColumn, row: startingRow) } } + + final class func boundingBox(baseColumn: Int, baseRow: Int) -> BlockRect { + return SquareShape(column: 0, row: 0).getBoundingBox(baseColumn: baseColumn, baseRow: baseRow) + + TShape(column: 0, row: 0).getBoundingBox(baseColumn: baseColumn, baseRow: baseRow) + + LineShape(column: 0, row: 0).getBoundingBox(baseColumn: baseColumn, baseRow: baseRow) + + LShape(column: 0, row: 0).getBoundingBox(baseColumn: baseColumn, baseRow: baseRow) + + JShape(column: 0, row: 0).getBoundingBox(baseColumn: baseColumn, baseRow: baseRow) + + SShape(column: 0, row: 0).getBoundingBox(baseColumn: baseColumn, baseRow: baseRow) + + ZShape(column: 0, row: 0).getBoundingBox(baseColumn: baseColumn, baseRow: baseRow) + } } diff --git a/Privyet/Sounds/privyet.mp3 b/Privyet/Sounds/privyet.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..7797ac421b5963f4182571a9e106f570561c1f90 GIT binary patch literal 12734 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

78*71F&5?BeOP9Jj2# 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 literal 0 HcmV?d00001 diff --git a/Privyet/Sounds/zap.mp3 b/Privyet/Sounds/zap.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..06b4115ffbf92b3e60aea451ee7bbd1567742edb GIT binary patch literal 7272 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 GgZW?La(zGm literal 0 HcmV?d00001 diff --git a/Privyet/Sprites.atlas/double.png b/Privyet/Sprites.atlas/double.png new file mode 100644 index 0000000000000000000000000000000000000000..642023fc78ae50dd982c5bdce51be2eadadce36d GIT binary patch literal 1815 zcmaJ>`7_%IAO4C&h$4b@6b&19P)D6@l_-L^q9sZl6~|V@5fapqQcWD|T4xW(R;z?c zqwSWK7}3%?R?Av-WreDumRhWfFoQHl`X%4Pj{ zw3w*^>b5F%4XE`DZk#wJ*-%Bihln*Q36RTtBpM_NvQsFnd^n8tLfjQBtDfzg>7|uz zKeusoHy|5xwGhL`)2$41#shQxJ73SnW|ht>uUoEH*vg~Q=G*5sjxW~rfQIuFmPSv< zX8EEMTiZuk>V#-VFqa*qYjZ<({xRX6&@%ypEZAj78zM#sQZdf4>S zt^!g=5@@HIuGhT!$SkAM{oOK2KN-9kEi6Ay!c7PpP%{p-0?a}kH{Q#_ApC>8P95>h zY0&i5XmWGv?Xy7SXWb-WWo6Kh=igl3rcoO>&(eq6cK3uZjJRK_S772tZxIP`akK}% zeMim92PH?2Sd0@P9stB;zEcROx~*_zLMd3>dFVVu1q2t3l6v_)sYp5ROTmyyBw{oL zz{C-QDa24DHIfp6bj0F3eCU$$003UY+S_{5KCIrl%D8YrA-lT1Bx!JT!yz~)G^>mV zOO)<8w<{g&VB@T<>`}`=YNHvjT4TLEyqBz}`cGNd&0pc@D0SGA$0G(gYE}=EBD2}= zJZIAes{A=0!iN-biiJE^PW<|k4LSMrQr{U32PSKE=Mq@t3A%0U=` z8TyM));SF1@WA+6Ef>xogIj#miW;KQStTCbiSaiMb=eYI?^i2Sr!5-pQ{W1uNi0*7 zNkTMfe8l=sLCA}4d`W&^TZFl(BYNBJr^|N~P=`E_fdr%*J10WN`jWJ-vK_y$=iXkuZ*{2)yZB0a-_HSo zF|N(LmWW5?zUXx<`a}_pP)Cm2575vQyQ_O8&|kB+-F@yYs0)X<;-=MG{F{FWu5B%6 z`{}8&TY{Z|x55|Dg$omG{aBT{!A?^)$^EqsLQiJWfhol9yvZBG)+~U;5Ix0QmNzmV zLGDE!YH$v8jap4WMGE>OaMEjymb`y{MY*BUhAkQ!eUL7&JV6dbOz4sWscRodPjEQZ5}o9P4MW_N{*h@^okdGx;5J zEs)v}=#E~RUc+&aoY*~WzWb|Y2+fd_N}_vf2{;>#a6jm>-2H}Aa*R(biD$a5in%)` zdgC{_@5fY+sb;nf_c#j46gN8XpYNnlZQW1T)Kp&kOo@j+*zbDa@-_YhXzSvqOVy=X zmg-0S)PLFQM@3x9uq0KN+~i^pJ07Q9&}@~ij4;dQ{vnyX6ij%YUb&3cYPkA%v@S!#Hp0cRqulWNrm^pToM6iRcHKrJ1hh_Dxe3hB>d^pX5 zBLtjf3+>pK_BPBE)K>UbwZ<##X5OKm@!kPpuSsU|GP9`iU~j-ien%WK?xSa9nl@!= zJ9j`M<5dWY&$P2$UTCvBdAk2NB63k>y$~DhHNADl=2}~{XNRB|(j`E|YwS8tq1c9E ztVx%hbicV|r8(V%qE+Un4zn^U@8GU>>kLAQNWwV}S#pA;y$~Js`08#)=@%D28iH;* zPhX;P}0#p0@(9z_APcn*Z%{QWiz+{ literal 0 HcmV?d00001 diff --git a/Privyet/Sprites.atlas/double@2x.png b/Privyet/Sprites.atlas/double@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..180d90154edf6955632b1ce709a5a703c491de66 GIT binary patch literal 3150 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 literal 0 HcmV?d00001 diff --git a/Privyet/Sprites.atlas/privyet.png b/Privyet/Sprites.atlas/privyet.png new file mode 100644 index 0000000000000000000000000000000000000000..1a776109efb9e033250bf60b117cbbda3d3d1225 GIT binary patch literal 2283 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 UG`-k&yZ@HMOstJ-Z{A7zFWO-%iU0rr literal 0 HcmV?d00001 diff --git a/Privyet/Sprites.atlas/triple.png b/Privyet/Sprites.atlas/triple.png new file mode 100644 index 0000000000000000000000000000000000000000..20a96fd2f369205138eab4c53d10d5fe737cfa4a GIT binary patch literal 1676 zcmV;726Op|P)EX>4Tx04R}tkv&MmKpe$iQ%j3f9PA*XkfFM0K~%(1t5Adrp;lC`-Ngjg(gu+qV-WT?bb#L=9pQNECI zImda6vs$UK);;+P!+C9Gnd>wMk-#FBAVGwJ8p^1^LX1|86cZ`hk9+tB9KS>^g?&Kfh(=;uQq_0Ptxmc zEqVm>ZUYzBZB5w&E_Z??00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliruA5wJDmUk02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00d-7L_t(|+U=Z8XkA4V$A6Q=7~96$mK17Rm7=u>YSoRP z8>5AEBPb%M(1ivjaG4NZOp+!+E#qhU3bMAa1lAuuR$7jS$&zxW~0 zFR=;O0Sp423-C-M{#xxIwcz~__iO=dDKi8p7;K_prw-by~hUWwz0%oDZlBg#HUr^HJot8d>)oIe`}kyxGS*^)fZL{h)oR$=DsAW`P( z%ox9wXqLDmtA9C>>8a!(vHf5sdwbH>QWA+Cnx%t$n6!N*(U`RLCT(ZSB2+!mV7Hhz z`JTf!AutYn0(>0njsnjmea_9Gb1W+lCJFu+@M6|}kHmRZ{s>$Lv?o<3vd=S++&2QZ zIY~FQBt%0#18iHMF}?=If#z7g0=N)3RfTMO_PuWgo{3SU5x6|-zupdFmKsAb$`lTA zQF1>M8}pz7OvX#V>sk93b`Z1V(xt3CUd6Pn;Logl0(d%vX*!K_kR{8CEMoMP7=9(b z&m3&4?Z6H)pI_(yLw>e0mjW$G`EUqTA1^rqj3(tRS<;>+^n2=kKg13)-B8nI%|_so z8D#R+qt#W6lgcauE|{VJm05X5a{n9feAeEQmH+*FkPtWx)Al#IBp!&n_()tP@hd4^jwN|Us&6<|7y`Q_ z4gkA=4yMk20i0xNCF|J`_`{}Q7Gp%qBgl<@E6zcTv4fbZXwAxN{Ys3dR^o1nu9APg zFd0t`?<^8|<0QQvnPBRiRd1H?7s>WtenrL@V~jDz7-Nhv#u#IaF~%5Uj4{S6O8x;j WFUCsY-&oNA0000Mp`X`+LhQSns+J;& zWGuCHJjULJj8da^RXdr?zwpjGcR8Q)IrrXQ?mhS36o*?@{5%po008jAtt}7$z?Q|r zJ`hfpuNm^ivWSELb8`o{xw$MR4DA~bgaQDi>?heq*4?I(z4sh#)0`yNWGk}DJN(U@ zdhXOYB=D3w`%lmokGSn62*RRPv=#>AqxS@@*VTo~#Z2G?2n~xsL}Uvx3xwTzqA*{c zWA~-8n?U)U`)_7+&eas7Dg{HY<#>w3H$c1~>^H^oifTvT2*J{?tJ21lx!$P!{dN

J`BeO?qRpUUIdb+RGotp$U15lG``73(Z6opDuPR>|9)~=w=^D7h4%O3{60) zK5QJL)%(=+IQEQ|ytzZk3cc|Wm-gPR_T8k>A#XP>7*({Y&6Q1+&zChzz)K9)P;aI? zX9x=^&pv;Az$Mvbp`Pf0(g;(1#Us-6m5UiaPcKd!;MP-? z+=*j9D2uyFTyM~gExJ9n8m#sRyc+@%oeH*}0jXnS&#rjt`dID!Da^ycI8CQ0^X}5w z=?_BC#3v=jK)`nu97s}&=upZzFo&HJ{Pk>;agHuL1L+_E(uURGN;y=|>50Or5) zid>z;Vz@EZuHgWnuJEt1MOB$RWRYAEaC;cnB8L?FIgUQ&SpbU?kANW~%+bNYsE`Q2 zJPdU|0_7u%4T$iUwSwC_xWt_k1ptUD+``N$YIdC-Q}2S3qHgbZZ zbhrE0qE@^+ewX10@zHU4aFk@{NA%Aq9%^p3e;td|J$cQ|E@4;A0_wZm%~fLDa$xhf+GC?piWot zw(`?rG#Vt+a?1m(_rb4n!*+w6AJ2FvFb$-y$sW2Zzaw!>;rKMF3NK@K_G?FkVrP`M z(a&2Ib>7OCiqTe~76ZHG7d$rqUeF$TO`Oy1@qER$;l>!YE3MkNJOEVe)XiqlKQsj| z?yeh8udVP8{`vVgb{VcoAh?vQ8EZ{OqvLmW-{ejg2zJ?}xW~byEyYd8-$-*AvzKs@ zc*RNuxu^4sHvf{Jhj*rRv^F-=^4@1gP-LLFHAJIaO(yHI^$p&6Bi2MA) zA)t+|jB~HeT3`ko{pzhw7~g>c=2x5OmNLmYq0+a3I^AD5;%7xu2PxutduNah&dF9* zD4WN!TtQG=&9by@iiu8px>f8leS*Md0s08{KO?@#z0MuoOIH&&)y4$fN)dfrTVEYl zKwlc8e$~pN1>8l8yZO6mMQWq|*SMBf~Dl^S+rc7;-RbFX{2?AcQ@s2niLR1F#3 z#E-mZn6nZN9aftB5yrU52=db2GGWLza!sE*VV`zuR=K3?-X8Rcie6E3#>G{o;!#0ZGjsJvqOb9ra%Vr9~#f^Eo*v- zHYQ;A`k%;X@E1a&DgKG$FF=OUv~K7eIcr=`Eo%U(n(pPEST{ETJ!$228JN$Ig=rYz z-4&)sKV9fAgnYBw`UyFA7umNFvUk4q7km+UlwH})x=z1{NjbMOe+MzA-z7(QWE9(6 z_g`JV!RwJ}C_iwT!UvU{81qg|OXulKouZ#4ZG4-`T)vwCEdlaJG9w;p=y{)_Miw@u z%nXo{EDfs2c&aZGw~M{>ep3bhf=zW-SU1+17| zIF_I}@9&V6%_obHk$3@*Y2ijWi#tbkBw2C_)V3_W-Nmx17sws2Hn&Slh?`bU?v>gd zkWzfRi7$awz!26)k2JH3zyBe;=li?H2RvP-=`3SN(pSd@ZG- zP@J}HC%V8)Q6j53R+T(Z;d`y$oP>(L?$}o+qVh*%5vpFb2pa@uDv56{7V~`0x~RAG zhew?p-d?05FGc~sX@Nn3{j4-9kj!>yv;zJ#61Q)O$(+A15PMAp&w?;8RwU0n5Bf9H zqVY1m3hE&|dYFgtbnQ-S3dv-kMFyiPnilAi00YDzkni0_NTXsiESk|Bs=H&2l)ZU_? zG`b@}F;(5r7l!c!U%X24z-r=uLZfx@I9S;oLZz9QX{#=Sc#=lXk?1ESUi#l|Zb0Lq ZN!(}}?^2D}GV8ej;ILa3Z*O|x{{g_g-#-8V literal 0 HcmV?d00001