From edcdd665e116c4799c712f460bb77776e9d7f117 Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Tue, 13 Jun 2023 21:18:01 -0400 Subject: [PATCH] movement --- client/css/main.css | 53 ++++++- client/index.html | 13 ++ client/js/game.js | 111 +++++++++++++ client/js/gfx/graphics.js | 56 +++++++ client/js/{ => gfx}/map.js | 60 ++++--- client/js/gfx/sprite.js | 60 +++++++ client/js/input.js | 77 +++++++++ client/js/logic.js | 269 +++++++++++++++++++++++++++++++ client/js/main.js | 124 ++++++++++++--- client/js/multiplayer.js | 318 +++++++++++++++++++++++++++++++++++++ client/js/sprite.js | 43 ----- client/static/tux.png | Bin 101931 -> 14000 bytes 12 files changed, 1099 insertions(+), 85 deletions(-) create mode 100644 client/js/game.js create mode 100644 client/js/gfx/graphics.js rename client/js/{ => gfx}/map.js (84%) create mode 100644 client/js/gfx/sprite.js create mode 100644 client/js/input.js create mode 100644 client/js/logic.js create mode 100644 client/js/multiplayer.js delete mode 100644 client/js/sprite.js diff --git a/client/css/main.css b/client/css/main.css index fbe272c..bfb7426 100644 --- a/client/css/main.css +++ b/client/css/main.css @@ -3,9 +3,26 @@ padding: 0; } -#container img { - image-rendering: -webkit-optimize-contrast; /* webkit */ - image-rendering: -moz-crisp-edges /* Firefox */ +:root { + font-size: 2rem; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; + color: #fff; +} + +body { + background-color: #191919; + width: 100vw; + height: 100vh; + display: flex; +} + +#center { + width: 100vw; + height: 100vh; + display: flex; + align-items: center; + justify-content: center; + position: absolute; } .rotate90 { @@ -25,3 +42,33 @@ transition: left .1s, top .1s; z-index: 2; } + +#join, #lobby { + display: flex; + flex-direction: column; +} + +#lobby span { + margin-bottom: .5rem; +} + +#lobby #start { + margin-top: 1rem; +} + +#lobby #players { + display: flex; + flex-direction: column; +} + +input { + background-color: transparent; + outline: none; + box-shadow: none; + color: #fff; + font-size: 1rem; + border: solid 2px #fff; + padding: .25rem; + margin-bottom: .215rem; +} + diff --git a/client/index.html b/client/index.html index 9ba6b4c..0740f5f 100644 --- a/client/index.html +++ b/client/index.html @@ -1,8 +1,21 @@ + +
+
+ + + +
+
+ Players: +
+ +
+
diff --git a/client/js/game.js b/client/js/game.js new file mode 100644 index 0000000..3d8f6a7 --- /dev/null +++ b/client/js/game.js @@ -0,0 +1,111 @@ +/** + * @author tint + * @template Data, Input + */ +export class Game { + /** + * @param {number} history How many frames of history to keep in memory + * @param {(data: Data, input: Input, frame: number) => Data} advance The function to apply game logic. For rollback to work properly, this must be a pure function, and can't mutate inputs. + */ + constructor(history, advance) { + this.historysize = history; + this.advance = advance; + + /** @type {{data: Data, input: Input}[]} */ + this.history = []; + this.historyStart = 0; + + // the game may have inputs from the "future" + // (local input delay to make sure inputs play at the same time on all machines) + // so the "present" isn't always the latest frame + // the game loop should set this every frame + this.currentFrame = 0; + } + + startHistory(frame, data) { + this.historyStart = frame; + this.history = [{ data }]; + this.currentFrame = frame; + } + + getHistory(frame) { + return this.history[frame - this.historyStart]; + } + + getFrame() { + return this.historyStart + this.history.length - 1; + } + + getCurrentData() { + const entry = this.history[this.history.length - 1]; + return entry && entry.data; + } + + /** + * Sets the input at a specific frame. If that frame is in history, + * the game will be rewound, the input applied, and then fast-forwarded to the current head. + * If the frame is ahead of the current latest frame, the game will be run until that frame. + * @param {number} frame The time to apply the input at + * @param {Input} input The input + */ + setInput(frame, input) { + this.editFrame(frame, index => { + let past = this.history[index - 1]; + if(index === 0) { + past = { data: undefined }; + } + this.history[index] = { + input, + data: this.advance(past ? past.data : undefined, input, frame), + }; + }); + } + + setData(frame, data) { + this.editFrame(frame, index => { + this.history[index] = { + data, + input: this.history[index] && this.history[index].input, + } + }); + } + + /** + * @param {number} frame + * @param {(index: number) => void} edit + */ + editFrame(frame, edit) { + const head = this.historyStart + this.history.length; + if(frame < head) { + if(frame < this.historyStart) { + throw new Error("Tried to edit a past frame not in history:", frame); + } + + edit(frame - this.historyStart); + // fast forward back to the present with the new data + for(let i = frame + 1; i < head; i++) { + const past = this.history[i - this.historyStart - 1]; + this.history[i - this.historyStart].data = this.advance( + past ? past.data : undefined, + this.history[i - this.historyStart].input, + i + ); + } + } else { + // fast forward the inbetween frames with no input + for(let i = head; i < frame; i++) { + const entry = this.history[i - this.historyStart - 1]; + this.history[i - this.historyStart] = { + input: undefined, + data: this.advance(entry ? entry.data : undefined, undefined, i), + }; + } + edit(frame - this.historyStart); + } + + while(this.history.length > this.historysize) { + this.history.shift(); + this.historyStart++; + } + } +} diff --git a/client/js/gfx/graphics.js b/client/js/gfx/graphics.js new file mode 100644 index 0000000..e73927e --- /dev/null +++ b/client/js/gfx/graphics.js @@ -0,0 +1,56 @@ +import { Sprite } from './sprite.js' +import { Rotation } from '../logic.js' + + +export const startGraphicsUpdater = () => { + + let sprites = [] + + /** + * @type {(data: import("../logic.js").GameState) => void} + */ + return (data) => { + + if (!data.started) return + + let players = Object.keys(data.players).filter(k => data.players[k] !== undefined) + + if (sprites.length !== players.length) { + + for (const sprite of sprites) { + if (sprite !== undefined) { + sprite.destroy() + } + } + + sprites = Array(players) + sprites.fill(undefined) + + for (let id of players) { + let sprite = new Sprite("/static/tux.png", data.map) + sprite.show() + sprite.resize(1.5,1.5) + sprites[id] = sprite + } + } + + for (let id of players) { + let pos = data.players[id].pos + sprites[id].move(pos[0], pos[1]) + switch (data.players[id].move_rot) { + case Rotation.NORTH: + sprites[id].rotate(270) + break + case Rotation.EAST: + sprites[id].rotate(0) + break + case Rotation.SOUTH: + sprites[id].rotate(90) + break + case Rotation.WEST: + sprites[id].rotate(180) + break + } + } + } +} diff --git a/client/js/map.js b/client/js/gfx/map.js similarity index 84% rename from client/js/map.js rename to client/js/gfx/map.js index e293ad2..0ba7f9c 100644 --- a/client/js/map.js +++ b/client/js/gfx/map.js @@ -1,18 +1,11 @@ -const create_style = (map) => { +const gen_style = (map, style) => { const css = ` * { --scale: 100; --aspect: ${map.width/map.height}; --scaleX: calc(var(--scale) * 1vw); --scaleY: calc(var(--scale) * 1vh); - } - - body { - background-color: #191919; - width: 100vw; - height: 100vh; - display: flex; - } + } #container { width: calc(var(--scaleY) * var(--aspect)); @@ -20,12 +13,15 @@ const create_style = (map) => { margin-top: calc((100vh - var(--scaleY))/2); margin-left: calc(50vw - var(--scaleY)*var(--aspect)/2); position: relative; + vertical-align: top; + line-height: 0; } #container img { display: inline-block; width: ${100/map.width}%; height: ${100/map.height}%; + image-rendering: pixelated; } @media (max-aspect-ratio: ${map.width}/${map.height}) { @@ -37,7 +33,7 @@ const create_style = (map) => { } }`; - map.style.innerHTML = css + style.innerHTML = css } const Direction = { @@ -211,11 +207,10 @@ const gen_walls = (width, height, data) => { return walls } -const gen_map = (map) => { - let walls = gen_walls(map.width, map.height, map.data) +const gen_map = (map, container) => { for (let y = 0; y < map.height; y++) { for (let x = 0; x < map.width; x++) { - place_tile(map.container, walls[y * map.width + x]) + place_tile(container, map.walls[y * map.width + x]) } } @@ -224,20 +219,43 @@ const gen_map = (map) => { export class Map { constructor(width, height, data) { + + let last = document.getElementById("container") + if (last) last.remove() + this.width = width this.height = height this.data = data - this.container = document.body.appendChild(document.createElement("div")) - this.container.id = "container" - this.style = document.body.appendChild(document.createElement("style")) + this.walls = gen_walls(width, height, data) - create_style(this) - gen_map(this) } - destroy() { - this.container.remove() - this.style.remove() + show() { + this.hide() + + let container = document.getElementById("container") + if (!container) { + container = document.createElement("div") + container.id = "container" + document.body.appendChild(container) + } + + gen_map(this, container) + + let style = document.getElementById("style") + if (!style) { + style = document.createElement("style") + style.id = "style" + document.body.appendChild(style) + } + + gen_style(this, style) } + hide() { + let container = document.getElementById("container") + if (container) container.remove() + let style = document.getElementById("style") + if (style) style.remove() + } } diff --git a/client/js/gfx/sprite.js b/client/js/gfx/sprite.js new file mode 100644 index 0000000..1ed8136 --- /dev/null +++ b/client/js/gfx/sprite.js @@ -0,0 +1,60 @@ +export class Sprite { + + constructor(image_src, map) { + this.element = document.createElement("img") + this.element.src = image_src + this.element.className = "sprite" + document.getElementById("container").appendChild(this.element) + + this.map = map + this.x = 0 + this.y = 0 + this.w = 1 + this.h = 1 + this.d = 0 + this.hide() + } + + #update_pos() { + let width = 100 / this.map.width * this.w + let height = 100 / this.map.height * this.h + let left = 100 / this.map.width * (this.x + (1 - this.w) / 2) + let top = 100 / this.map.height * (this.y + (1 - this.h) / 2) + + this.element.style.width = `${width}%` + this.element.style.height = `${height}%` + this.element.style.left = `${left}%` + this.element.style.top = `${top}%` + this.element.style.transform = `rotate(${this.d}deg)` + } + + move(x, y) { + this.x = x + this.y = y + this.#update_pos() + } + + resize(w, h) { + this.w = w + this.h = h + this.#update_pos() + } + + rotate(d) { + this.d = d + this.#update_pos() + } + + hide() { + this.element.style.display = "none" + } + + show() { + this.element.style.display = "initial" + } + + destroy() { + this.element.remove() + } + +} diff --git a/client/js/input.js b/client/js/input.js new file mode 100644 index 0000000..421ce2e --- /dev/null +++ b/client/js/input.js @@ -0,0 +1,77 @@ +import { Key } from "./logic.js"; + +const debug_style = document.body.appendChild(document.createElement("style")) +var debug_enabled = false + +export function startInputListener() { + let dir = 0; + let start = false; + + // document.getElementById("start").onclick = e => { + // e.preventDefault(); + // start = true; + // } + + let keymap = { + "KeyW": Key.UP, + "KeyA": Key.LEFT, + "KeyS": Key.DOWN, + "KeyD": Key.RIGHT, + }; + + document.getElementById("start").onclick = function() { + start = true + } + + window.addEventListener("keydown", ev => { + if(ev.repeat) { + return; + } + if(!(ev.code in keymap)) { + if (ev.code === "KeyB") { + debug_enabled = !debug_enabled + if (debug_enabled) { + debug_style.innerHTML = "* {box-shadow: 0 0 1px red inset;}" + } else { + debug_style.innerHTML = "" + } + } + return; + } + dir = keymap[ev.code]; + }); + + window.addEventListener("keyup", ev => { + if (ev.repeat) { + return; + } + if (!(ev.code in keymap)) { + return + } + if (dir == keymap[ev.code]) { + dir = Key.NOTHING + } + }) + + let last = { + dir: 0, + } + + return function() { + + if(dir === last.dir && !start) { + return; + } + + last = { + dir, + }; + + let s = start; + start = false; + return { + dir, + start: s, + } + } +} diff --git a/client/js/logic.js b/client/js/logic.js new file mode 100644 index 0000000..e9a0b05 --- /dev/null +++ b/client/js/logic.js @@ -0,0 +1,269 @@ +import { Map } from "./gfx/map.js"; + +// enum +export const Key = { + NOTHING: undefined, + UP: 1, + DOWN: 2, + LEFT: 3, + RIGHT: 4, +} + +// enum +export const Rotation = { + NOTHING: undefined, + NORTH: 1, + EAST: 2, + SOUTH: 3, + WEST: 4 +} + +/** + * @typedef {[number, number]} Vec2 + * + * @typedef {{[key: number]: Key} InputMap + * + * @typedef {{pos: Vec2, move_rot: Rotation, input_rot: Rotation, name?: string}} Player + * @typedef {{start: boolean, key: Key, name?: string}} PlayerInput + * @typedef {{players: {[key: number]: PlayerInput}, added?: number[], removed?: number[] }} Input + * + * @typedef {{[key: number]: Player}} Players + * + * @typedef {{width: number, height: number, data: number[]}} Map + * + * @typedef {{ + * started: boolean, + * input: InputMap, + * players: Players, + * map: Map + * }} GameState + */ + +/** @type {GameState} */ +export const initState = { + started: false, + input: {}, + players: [], + map: {} +} + +export function advance( + pastData = initState, + input = { players: {} }, + frame +) { + let data = processInput(pastData, input, frame); + + return data; +} + +/** + * @param {GameState} pastData + * @param {Input} input + * @param {number} frame + */ +function processInput(pastData, input) { + + /** @type {GameState} */ + let data = structuredClone(pastData) + + let startPressed = false; + + for(const added of input.added || []) { + if (data.started || Object.keys(data.players).length >= 4) continue; + console.log("added", added); + data.input[added] ||= { + pos: [1, 1], + input_rot: Rotation.EAST, + mov_rot: Rotation.EAST + }; + if(!(added in data.players)) { + data.players[added] = structuredClone(data.input[added]) + } + } + + for(const id in input.players) { + if(!input.players[id]) { + continue; + } + + if(id in data.players && input.players[id].name !== undefined) { + let name = input.players[id].name; + name = name.substring(0, 16); + + data.players[id] = { + ...data.players[id], + name, + }; + + } + + startPressed ||= input.players[id].start; + data.input[id] = input.players[id].dir + } + + const player_display = document.getElementById("players") + for (const id in data.players) { + if (data.players[id] === null) continue + let name = data.players[id].name + if (name === undefined) continue + + let element_id = 'span' + id + + let element = player_display.children[element_id] + if (element === null || element === undefined) { + let span = document.createElement("span") + span.innerHTML = `[${id}] ${name}` + span.id = element_id + player_display.appendChild(span) + } + } + + if (startPressed && !data.started) { + init_map(data) + data.started ||= startPressed; + } + + if (data.started) { + update_players(data) + } + + + for(const removed of input.removed || []) { + console.log("removed", removed); + delete data.input[removed]; + delete data.players[removed]; + + let element_id = 'span' + removed + let element = document.getElementById(element_id) + if (element !== null && element !== undefined) element.remove() + } + + + return data +} + +const init_map = (data) => { + + document.getElementById("lobby").style.display = "none" + + let width = 13 + let height = 5 + let m_data = [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, + 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, + 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, + 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 + ] + + data.map = new Map(width, height, m_data) + data.map.show() +} + +const MOVE_SPEED = .1 + +const round_pos = (pos) => { + return [Math.round(pos[0]), Math.round(pos[1])] +} + +const is_stable_pos = (pos) => { + let rpos = round_pos(pos) + return Math.abs(rpos[0] - pos[0]) < MOVE_SPEED && Math.abs(rpos[1] - pos[1]) < MOVE_SPEED +} + +const get_tile = (map, pos, ox, oy) => { + let x = Math.round(pos[0] + ox) + let y = Math.round(pos[1] + oy) + if (x < 0 || x >= map.width || y < 0 || y >= map.height) return 1 + return map.data[y * map.width + x] +} + +const get_tile_with_rot = (map, pos, rot) => { + let collider = 1 + switch(rot) { + case Rotation.NORTH: + collider = get_tile(map, pos, 0, -.51) + break + case Rotation.SOUTH: + collider = get_tile(map, pos, 0, .51) + break + case Rotation.WEST: + collider = get_tile(map, pos, -.51, 0) + break + case Rotation.EAST: + collider = get_tile(map, pos, .51, 0) + break + } + return collider +} + +const get_rot = (dir) => { + switch (dir) { + case Key.UP: return Rotation.NORTH + case Key.DOWN: return Rotation.SOUTH + case Key.LEFT: return Rotation.WEST + case Key.RIGHT: return Rotation.EAST + case Key.NOTHING: return Rotation.NOTHING + } +} + +const increment_pos = (pos, rot, speed) => { + switch (rot) { + case Rotation.NORTH: + pos[1] -= speed + break + case Rotation.SOUTH: + pos[1] += speed + break + case Rotation.WEST: + pos[0] -= speed + break + case Rotation.EAST: + pos[0] += speed + break + } +} + +/** + * @param {GameState} data + */ +const update_players = (data) => { + + for(const id in data.input) { // move players + if(!(id in data.players)) { + console.log("what. player undefined???", id); + continue; + } + + let input_key = data.input[id] + let input_dir = get_rot(input_key) + let move_dir = data.players[id].move_rot + let current_pos = data.players[id].pos + + if (get_tile_with_rot(data.map, current_pos, input_dir) == 1) { + input_dir = Rotation.NOTHING + } + + let turning = input_dir != Key.NOTHING && input_dir != move_dir + + data.players[id].input_rot = input_dir + + if (turning && is_stable_pos(current_pos)) { + current_pos = round_pos(current_pos) + data.players[id].move_rot = input_dir + move_dir = input_dir + } + + let move_pos = structuredClone(current_pos) + increment_pos(move_pos, move_dir, MOVE_SPEED) + + if (get_tile_with_rot(data.map, current_pos, move_dir) != 1) { + data.players[id].pos = move_pos + } else { + data.players[id].pos = round_pos(current_pos) + } + + } + +} diff --git a/client/js/main.js b/client/js/main.js index 7004fb5..81262d3 100644 --- a/client/js/main.js +++ b/client/js/main.js @@ -1,25 +1,113 @@ -import { Sprite } from './sprite.js' -import { Map } from './map.js' +import { Game } from "./game.js"; +import { startInputListener } from "./input.js"; +import { multiplayer } from "./multiplayer.js"; +import { advance, initState } from "./logic.js"; +import { startGraphicsUpdater } from "./gfx/graphics.js"; -let width = 13 -let height = 5 -let data = [ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, - 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, - 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, - 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 -] +const join = document.getElementById("join") +const lobby = document.getElementById("lobby") +lobby.style.display = "none" -let map = new Map(width, height, data) -let tux = new Sprite("/static/tux.png", map) +join.onsubmit = async function(event) { + event.preventDefault() + + const room_code = this.elements.room_code.value.trim() + const player_name = this.elements.name.value.trim() -tux.show() -const callback = () => { + if (room_code == '') { + alert('Please enter a room code') + return + } - tux.add_pos(1, 0) + if (player_name == '') { + alert('Please enter a player name') + return + } + + join.style.display = "none" - setTimeout(callback, 500) + startGame(room_code, player_name) } -callback() +function startGame(code, name) { + + const game = window.game = new Game(3000, advance); + const fps = 60; + let delay = 3; + + // set up the game up + // const ui = document.getElementById("ui"); + // ui.style.display = "block"; + + multiplayer( + game, + code, + (startFrame, latency, player, update, ping, desyncCheck) => { + // document.getElementById("desynccheck").onclick = function(e) { + // e.preventDefault(); + // this.textContent = "check for desyncs: checking..."; + // desyncCheck(game.currentFrame - 5) + // .then(res => { + // this.textContent = "check for desyncs: " + (res ? "desync" : "no desync"); + // }); + // } + console.log("started game at frame", startFrame); + window.desyncCheck = () => desyncCheck(game.currentFrame - 5); + + lobby.style.display = "" + + let startTs = performance.now() - latency; + let lastFrame = startFrame; + update({ + name, + }, startFrame + 1); + + const getInput = startInputListener(); + const updateGraphics = startGraphicsUpdater(); + + const start_data = game.getHistory(startFrame) + if (start_data.data.started) { + alert('Room has already started') + return false + } + + let players = Object.values(start_data.data.players).filter(p => { return p.name !== undefined }) + if (players.length >= 4) { + alert('Room is full') + return false + } + + // main game loop + let lastTs = performance.now(); + function f(ts) { + const frame = Math.floor((ts - startTs) / 1000 * fps) + startFrame; + if(frame !== lastFrame) { // update input once per frame, regardless of the display refresh rate + lastFrame = frame; + + // gather input + const input = getInput(); + + // apply input + update(input, frame + delay); + } + + // set up graphics + game.currentFrame = frame; + const data = game.getHistory(frame); + updateGraphics(data ? data.data : initState); + lastTs = ts; + + requestAnimationFrame(f); + } + + requestAnimationFrame(f); + if(startFrame === -1) { + update({ + name, + }, 0); + } + + return true + } + ); +} diff --git a/client/js/multiplayer.js b/client/js/multiplayer.js new file mode 100644 index 0000000..eec1c7d --- /dev/null +++ b/client/js/multiplayer.js @@ -0,0 +1,318 @@ +/** + * @author tint + */ + +/** + * @template Input + * @typedef {{ + * added?: number[], + * removed?: number[], + * players: { + * [conn: number]: Input + * }, + * }} GameInput + */ + +/** + * @template Data, Input + * @param {import("./game.js").Game>} game + * @param {string} code + * @param {( + * startFrame: number, + * latency: number, + * connection: number, + * update: (input: Input, frame: number) => void, + * ping: () => Promise, + * desyncCheck: () => Promise, + * ) => void} onStart + * Called when the game is in a ready state with the current frame + * (or -1 if you're starting the room), an estimate of how many milliseconds have elapsed since that frame was sent, + * and your connection ID + */ +export function multiplayer(game, code, onStart) { + const url = new URL("api/join/" + encodeURIComponent(code), window.location); + url.protocol = url.protocol.replace("http", "ws"); + + const socket = new WebSocket(url); + + let requestStateTime; + let hasState = false; + let connectionId; + let cachedInputs = []; + let connections = []; + + let pingPromise; + + function send(obj) { + socket.send(JSON.stringify(obj)); + } + + function applyInput(input) { + let prev = game.getHistory(input.frame); + let newInput = prev && prev.input ? {...prev.input} : { players: {} }; + + if(input.type === "input") { + if(input.connection === undefined) { // local input + if(input.data) { + // send it to the server + send(input); + + // then apply it + newInput.players[connectionId] = input.data; + } + } else { + newInput.players[input.connection] = input.data; + } + } else if(input.type === "connections") { + if(input.added !== null) { + newInput.added = (newInput.added || []).concat([input.added]); + } + if(input.removed !== null) { + if(newInput.added) { + newInput.added = newInput.added.filter(n => n !== input.removed); + } + newInput.removed = (newInput.removed || []).concat([input.removed]); + } + } + + game.setInput(input.frame, newInput); + } + + function flushCachedInputs(latency = 0) { + for(const input of cachedInputs) { + // only care about inputs after the new state + if(input.frame <= game.historyStart) { + continue; + } + + applyInput(input); + } + cachedInputs = []; + return onStart(game.getFrame(), latency, connectionId, update, ping, desyncCheck); + } + + function update(input, frame) { + if(input === undefined) { // used to update the game locally + if(hasState) { + applyInput({ + frame, + }); + } + return; + } + const data = { + type: "input", + data: input, + frame: frame, + }; + + if(!hasState) { + cachedInputs.push(data); + } else { + applyInput(data); + } + } + + async function ping() { + send({ + type: "ping", + frame: Math.max(0, game.currentFrame), + }); + const frame = await new Promise(r => pingPromise = r); + return game.currentFrame - frame; + } + + async function desyncCheck(frame) { + const history = game.getHistory(frame); + if(!history) { + console.error("tried to check for desyncs on a frame not in memory", frame); + return true; + } + const localstate = history.data; + const proms = connections + .filter(n => n !== connectionId) + .map(connection => { + send({ + type: "requeststate", + frame, + connection, + }); + return new Promise(r => { + stateRequests[frame + "," + connection] = state => { + r({ + state, + connection, + }); + } + }); + }); + + if(!proms.length) { + return false; // this is the only connection, no check necessary + } + const states = await Promise.all(proms); + if(!states.every(({ state }) => objeq(localstate, state))) { + console.error("desync! remote states:", states, "local state:", localstate); + return true; + } + return false; + } + + let stateRequests = {}; + + socket.onmessage = message => { + const data = JSON.parse(message.data.toString()); + + switch(data.type) { + case "error": + console.error(data); + break; + case "framerequest": + send({ + type: "frame", + frame: Math.max(game.currentFrame, 1), + }); + break; + case "state": + if(data.frame + "," + data.connection in stateRequests) { + stateRequests[data.frame + "," + data.connection](data.state); + } + if(!hasState) { + game.startHistory(data.frame, data.state); + hasState = true; + + // this state is from the past + // i want to find out exactly how far in the past + // the sequence of requests looks like: + // client -[staterequest]-> server -[staterequest]-> client2 + // client2 -[state]-> server -[state]-> client + // and the time i'm concerned with is the second half, + // how long it takes the state to come from client2 + let delta = 0; + if(requestStateTime !== undefined) { + delta = performance.now() - requestStateTime; + } + if (!flushCachedInputs(delta / 2)) { + socket.close() + document.getElementById("lobby").style.display = "none" + document.getElementById("join").style.display = "" + return + } + } + break; + case "requeststate": + // wait until there's some state to send + const startTime = performance.now(); + function check() { + if(performance.now() - startTime > 5000) { + return; // give up after 5s + } + const state = game.getHistory(data.frame); + if(!state) { + return; + } + + send({ + type: "state", + frame: data.frame, + state: state.data, + }); + clearInterval(interval); + } + const interval = setInterval(check, 100); + check(); + break; + case "connections": + connections = data.connections; + if(connectionId === undefined) { + console.log("setting connection id", data.id); + connectionId = data.id; + if(data.connections.length === 1) { // no need to request state + hasState = true; + applyInput(data); + flushCachedInputs(); // just in case, also it calls onStart + break; + } + + // grab the state from another client + console.log("requesting state"); + // measure the time it takes for state to be delivered + requestStateTime = performance.now(); + send({ + type: "requeststate", + frame: data.frame, + }); + } + + if(!hasState) { + cachedInputs.push(data); + } else { + applyInput(data); + } + + break; + case "input": + if(!hasState) { + cachedInputs.push(data); + } else { + applyInput(data); + } + break; + case "pong": + if(pingPromise) { + pingPromise(data.frame); + pingPromise = undefined; + } + break; + default: + console.warn("unknown server message", data); + break; + } + } +} + +// compare two plain objects (things that can be JSON.stringified) +function objeq(a, b) { + if(typeof(a) !== typeof(b)) { + return false; + } + // array diff + if(Array.isArray(a) && Array.isArray(b)) { + if(a.length !== b.length) { + return false; + } + for(let i = 0; i < a.length; i++) { + if(!objeq(a[i], b[i])) { + return false; + } + } + return true; + } + switch(typeof(a)) { + // primitives can be compared directly + case "number": + case "boolean": + case "string": + case "undefined": return a === b; + + case "object": + // typeof(null) = "object" but null can be compared directly + if(a === null || b === null) { + return a === b; + } + // object diff + for(let k in a) { + if(!(k in b) || !objeq(a[k], b[k])) { + return false; + } + } + for(let k in b) { + if(!(k in a)) { + return false; + } + } + return true; + default: // incomparable things + return false; + } +} diff --git a/client/js/sprite.js b/client/js/sprite.js deleted file mode 100644 index ec6ecbd..0000000 --- a/client/js/sprite.js +++ /dev/null @@ -1,43 +0,0 @@ -export class Sprite { - - constructor(image_src, map) { - this.element = document.createElement("img") - this.element.src = image_src - this.element.className = "sprite" - this.map = map - this.map.container.appendChild(this.element) - this.x = 0 - this.y = 0 - this.hide() - } - - #update_pos() { - this.element.style.left = `${100/this.map.width*this.x}%`, - this.element.style.top = `${100/this.map.height*this.y}%` - } - - set_pos(x, y) { - this.x = x - this.y = y - this.#update_pos() - } - - add_pos(x, y) { - this.x += x - this.y += y - this.#update_pos() - } - - hide() { - this.element.style.display = "none" - } - - show() { - this.element.style.display = "initial" - } - - destory() { - this.element.remove() - } - -} diff --git a/client/static/tux.png b/client/static/tux.png index b78a72b3e7b0c132fad1494278eac1feb803d05b..a5951459c73394bf8db3a721cc5d7bfe2a455464 100644 GIT binary patch literal 14000 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 literal 101931 zcmeEt_fr#0*lp+`fJPyTAVmbx(4tb54vI)uAe7KWdQ<5o^k6|jK{^sp2vS0k-a=Cl z5h;@z}4g%qaXxvsY^h^KuJMis!2kg>bZeXq1q>Vr%T=mr0=gzdrX?V+;z2_(9 zjt8@F>Gr3};^yZ|;;l<=`LJFnji3`0v2iJ7zB(jQQWpN4F6Q~CGKavUy-Yem9?#P=e<2-hf$ue^SbB@W5X*+5_#|c(4_^*Skza zGJ|jSzkmMs1pfB~{=b}nwKvkcjt){XAep8!d#L~X$OV*!cg@8oAddGjO)fIDf)L2p zXsc6@*D6)5cnMVj2xO&Mf)P?;a%G~MiRKgplDxt~14$$jAaklW=pm3(!3c;6S(byg z^JWG+#~2G;%LNF;g}ad+Qh3D;8tUI-`3A-uLw^eb8MqWo12JKT!NPx^2vNkGcoup5 z%M*tMC$0OD{PabUkmO6o%7PrUkP_(?s~|{$E{n<|DSG9k?-M1_%_a5w9|aRTDtAg( zD>eUB{8{K2^qBj#tk5%Ti!kBE1P7PYYZu9|7BfJU^)A3^O%Twq6g$`z2FBJG*&}Ox zo6kr|g_PLtRa49BizfKN7pe~wN?#64o`gVTUnoPZ)jH47%kj{b)m!BjXs9u@V*cH~ zDmod|ZYLF~N|}6beFJY2%L{>U{P%yqouVH-M=N&@HHzSDu=E|Rbelffq8yrWtZ2s; z2DQ82>kDXIW9VFv(m3dh9eHAA=YKAwc&D<{@IfGEf>USV-)kc)_cSw0T``Fd?XG{k zF>FceQSF7$Xh>)}G!kO;_N7Y6T;@OlSu2|Lc^C&{RI%NC6-~ZZx zbp9i*ypv@A*!wqL@{$EE(?ay&P?|!h1uR_TW~ATVJIe06wS#R6MM+U{tg)ozo{J>c zfv2aZQ$OjGplP^`sm<%anrvd6Wo`Yh(}Awv`r4%)YWH2mO{@&9+1~DZtf9`q*zs&( z`TEG&Iqe%Sm8yH#Aj+r1;L5QJs&MnX3q3Q1e23t$3WD}VDNB4jJd1pMe8o~+uMX|Y zOyB(ASqS)zeHG6Sm6l5DVo6L)v=pBg7JOHXqPOHf%1ilbkLg=koBX=AwzBp_^l{;W zhrgvmi;ZEkpdf7%*KL0Kp0aC^%|^G(C73#XDfRg-j^uE=S7(JB9UdH9ym+x9pkb`B zyxdE7TH@UPpGnK&K?HsCjD6Ye3-HsZQCl+XN>c3;;n1CypS?Mk>ZGwJ#3rV6;;w9V z$;h1kK+2U|16aXp1KI6;bx0HPcsWm54*GS)Dr4lcS^6&?A$z0KX6`k1S3s znVT10>80Rs3=1qjy1R|foINW63m;GDvR}_l?V3@;oCsE=FlUuG=!mdB>((3*aiXmG z>|4=lhYa@a#WZ(c4{{mva~dwcty+ayBi zWQk?*ww|`O`KOYS6}|}mYC&kYvB-3g5=Gj$ZaKK{GFg@#jyJI!DU#*@k#^oJSR9hs zehNzCrN$j$U8icTPKa@*kQ&x1im`6vJz2L7+GF{aPlh+`kh<*4>Z_|c@Am!s_iz03 z=g&f$0S8KAVqy*UPEPavFpqD%N{YKdWS4-7irSMRm|GK)lUv-syn4FldY zhc8T*N}-TBesE+l>#Qt`uy6%qsrucSG?$Y~`zuWotxuT_jTgS^sfXF%RN4{=mfhZ(PRPjb|;P)m9F8W6pzRdm|gv`Tm-1J$i^29OS2Z z`32T9h?SB1rtbnzY?m~qw{eTw!_wYd>=yDtJJp&D;!%y}aA`6DQVM;!#P4{uoJ*$C@S zmDOPfyx0+0>A>KKtf!=al9iQ(Q_iA~{%kE%LRP_jgcJ=fc$k3CuW;h}_;YN0aNd)x zlt2&bRtmb?cLKMqs_lH4_38c1*9D2R%4y)r%XOMndS-Xrmj{Q2Om??MJ(ejAf!pId zJATAoM-%*Y85!fitzm}{`+xxI(MRy%j?!snAF!l^>Ux{vgxASAT@HK$g_ChU$inkW z1H;A=Vhh?gGvMX_3PJa&AKOVyq>3xEh;wt|YLC2f?nJlYvw^LcXgW}0bRmOk_hI1i5ZiN5TaI-vj$eJIHEMn%hZ%ipZg}kN%U%fLR8<{Kx4d7F{diDO{j7;P3 z(btQytlHYz>DRxM6&LHpNh&E>`R}i`TgfOY9%_LcdqtSfbo#{DQoryUhND+4x3=t~ ziz5}I1l!bRxlcr|v(fOggJ}OHYmRXBh0Et+!MRrO?T<5oGRJ%VnfM8IT;p9h{j_j~ z-=BVv%^{)mpYgSDfhW9G1HhT;VjFBB9{XQlm#lOZ-iLHmP$H>nFk30gwyN3TXkE}FLJ3#(dZ zXg8tyFhC0ZLFpWmH9@$l!zC+!`_H~R04199 z_!^UboCw8Yv342(8@=ihia|Ro#a-RqjXA@vMX_6Hs#X}dHu6up3O+MwI=R087Ny(P zg$^c3Tv3%g!e<|pZYfVJibQ$2OPzuY2-04FNbuA@((bicNw)>%q|@r)uQ5|bz~8)0 z00R*7+VGdE<3E2Ix(yatc%&pJ`x$@e^+U_gAx_c9zxW87VaC3L;tZL4?E-}k8snDw zhx?n4i`lc5OenwN4&c8A)PfWZexS2XH^0kwH5x|J8VJr zX5X+4Xwn$A@W+Z53V5=L=kDE2fGap-CcOGQL|DW0caGTC!P&e{)`eNK3BYMf{;qNK zz7MzFwK|-(a^C*!OBo*;8VUuwdgSDkx7I{=a=&F~XD1Mxyi3k?6$uy44Yp^B=rW_+ zr>Ti*QMV}Glx`NU9(NqNmC2hR%Xzu}+I;Zi)U zj0)m@{8A7pT%+!Rhf&q(w6}Fe=s-e)(w8!yt5N`dNS@% zZ9;+VL&57G$aGCv!SD;Ah!|yP;bR6|a}1i{1OLvyvhEY~D)-*BIAz_3%Y*70)y^CE z?}b6GZbRL$tNZJJG$m(|kwil#ENzy@PN&?#&z~}bwcXM^9|#5<_W8Oe4zy5~tgLpM z!syaK^zfkRuQN3JJXPiMC%l+RIZUY#>kO<(Eb=B-64^{>{(=)YGU)sKWb|!|wcqD0 zLC72ed@$Sm8&q;FcGRtk?cc8&&*Nl_V+{x2eze}9JA;yumKGRTHe8s}VmWYc=r4o4 z_NX+;K#d%3gW)f)KpV5WbY3x;jX-&9`$H! z2$}uyZed|FKn<1~d53%}_WaFHtG()c4bJxVGfy;9BCJpKs}2U3e^L^84v+`Ux<73dGixsy#C??kX zs#g;<)j+*X003-O0bmS1Xt?zUk@4Ngro!f)3hkn_%6Rh$VJ*9!s!zs-sBBGWxvOg5 zAY!Z?bgnIHOXHQyR+#e+gR zAPVbc>^In#)ktYIxd=h+iKkO5C*8X24RZ9aNNwyyDvt(aC?`+*cVL~c*Tk@c7H&<* z$L4)UV)KX7i~hL&mMnK~CqGKo$ax}WtUi9 z1?p-}PEItoAXp9eWry@I&FNf+teqq=JW-hS&R#hGBVMxRUF`*fPhyK@m;PI(%(#yS zCLw(hhxpts_{xW<4jGUH>wL@J&s-Ye=v@xpuB)h9s&zT&h!@@)B%0-3W*u;rS{yE$ z4F?eLaH6H9C2ftd$>`Pxr{CpX#JX(U`|_2fUt7%HYV@~_m9!U%a$J7*GZyNf)Tp)S zE1h1n!8N~LXQA=p01==TAj+C3Pt3t$c5EA=MYL?d!@1e1*7){t$Z zjFQsP5B)sDH~aYk#3jATFI6AB@pkEAoR=Eobt9Vvcq_LhH_83>dxeUVbcHl*IGL)W zsB9cY{3ynsk-7XLJoDV8T0;god+}r7sM|yiRtF z_E29S*a>!f_3rq{w15#q%oyf|t;AMNaSjcD2;h2rx6dsu12e{(xbZCc4lMH(2sYS& ztxbu%tZaTacFA*Ld+E2FNuJ@iUXET2k>G&G`Ygl-Z+wUaQ&9b|Oi#@g;uPoP9=HQL zK`{;jLst3g{#S4lubdvK6N;lvTpOV+>n!aYx*}Npi7$?j%txS{;Qm&i{5r*|HYkD1 z4cverK=!5Nk55fKbOYm%ao6|nLCX4#KQU@0&tBMI_}+VyuhqD_c;eD^aVo~}@9d}J zv08hq1iO);=5K?AcCm zR8MNopO^Q0v~HlMu(=x0aCoL;*)n`FxOz;6B!Tf2i(e2gf~AN&N*P%*It&_JGh)&C zFNn+8l;gbc*~ORZ$G_LNI8VGO+JZLaEA!JEy|!eI_-`{o>s{Og0)Z-Y1s0K`pSORo z9C9=W;C~T$t^ZcezwOf-*teZFN#CZQEalq(ixUyKRaI`I(mS8o^=_k^$p*JWc3Sx? zpKQ$a>d63}%6y`GV9a^kMdMOnZ@Sm9T-)2r2tjsb+Io{wL^dCjKAcvB2!#VQJE z;%A=0L4xMavU-AMj{NoORaD8t}$18s$eALc?O11+nUVgB(UIPj6SiLxqu%$|sThtd&6|YeNKUc;OOKSMO^(Ig3@B5@WpoMS1+g9C7F4kM53U`lO$i%@2LKY?Cj4 zi9+#tNeoD?z$91D-u(i1toxK*bvNKuwprq+wAM)8N+kkft%ifoUHyF`qFa7ldpC;P zeF$~+>Q#P?`<&^?$#Wr7Z`6ydOiZeO$(U4JhuC8?3anPKy|qp$=2fNW&wWT2#o4Wt ze5_M{lYGK0vpQlUp?j|ExD(Pm^r^}&Mi#=C(0)St>y6iFOxBMNQE>X{qtRl)0J4q@ z+b@85xv5m@aS|UxYOR>_H`j*k%lv~g#)WsS6eP7EqJL?xuXdj%rX`*-xGag@4;mmN zA9rluHQMXT4=ehc?WRCHNwEDCbt6AY*{s2|Pbls%z&|iLn@RAMH|R?NMpjjF5dNRd zD3gKVGP-YoZ_HUJZVYa<1(QLGa|I^f5Q$9cbe80**juVw9*Gy$JM`6%_|9Ez-b^$X z$8VNYr16s4cS%uB3VJ(lUl6ZR|9QU4O)^UGL@$7_mw3H_M;uNbsc4+lbk>v|>(Zr} zQvg@W+cSak8`yg1J7!w5{zFdY$M^3)2S6j7`*RiSvtbT!kw>m@`m?#{{!jF`I?TmH zYl%Gl&E@(}fs|}I;f{mWbYer1uk&$z-$paapdfbGl zm}Cml(`lB4nl9ofE79X%HPYu*WIa~!YUZXdiui{)6V9e_ba}oG);dlX7vog{j*-^j zPMG*#BhFvPyhSVD;YxJW)2AVYV9YWUPeK>;OUldFPiH;lrGnPpQm2`tkJlU0N+UVJ z+=}M2NX2GThP_i9_eZaJR9uZSvUxdlDBjnCF0d(l7G1X!eCKQnf6o~^jp9VF(rkse zN@V&K>GzM2S3;#;T=}4!%Iz=Hp!nmO?|is_T*3J8 zvfh6ueQy zFVXE=5MsMr|NMXNOS|hUOa?K#*c9}R#{hI#Fl^8ZHG@x zOf<5Fk3ZzSTUQH}L9SM@k08JZr#wcYo?Acr`|xK4jdm9J!GQ;Ql3x}~vT1A4+A*Iqk( z1xR5xBbAxFWLbF?0?PNZPGaZO^Z?_^B9fq~5trZZybIW5rBX1xj2;UVR)!Gmg0Y-; ze2!+_f$lcJu57Dz@*WAx!%f#-~Hjq z!T^xJ(hK)E1bCcSNB~$x&WHCId!{;BNzrFYfp!re- zM(Df#746_L$IzG(H(_)9?{e*;_FdhxI%BE=yZe5e+C>g*5x=1?4cWuc1y+4eg^rtxATep9@iXyC zC>ji|<@z@JGV6(xCp{D&jW^8#PXD%ZH~RLv`3*w~WodwS!CI_PX{zmlSp~ zXk3ly#CboPJVRL?Mm(Uav`+9T2AP!&*Q4|pQ0Ge44C&W@vGi=$D-T{Jkc79VnNy3D z=eaLkEZT$E-;_YrSpKYuB#?5jCm;oV(Lx7cTtm3OE*JbELT`is+1f07j8Z*p4Z!5b!!11dXZo&YKR1O1cELTs)jJQ?(_Mskz zFANY3;Pe%H%Z*2RKsur#@&mEY5!U7J zq|xP$PR7zYawnQn4c}}8`>Z-LOJ#7k1XDAHVpguyT06>c53+W%s;5wcxJ`E7_y z_@?iN06c&1D=?Vv6#&g>lA96B_pT6Hd5u_Re&VSJrnV&ubYi_1Po<0zJzuK+7#n)` zNJ~}RC8p~!TYvHYkiG6bQ{S?zkva!JT6v^0lp{0VX62Zw7*yJwisybmpB3jd-V|mW z^YZ1sHxLf=A99LP!>_8LnX&odMM#@+UaL!k*kN~`H}aPbdDV=W)(y9A$iS6Z#N#%Y zHSkG>@#Plgu8bz7)gM`V-s?s+Z`aQ%aO1IC!<(z9YLJaGczORddkyXv9~r4pN~1XI zKW>V9YnF~}o0!VzuS2SiG7^IEo3z&y&&I9RWWHQ@aE%zH-y&FYDP4Gemc!DTVAU6% z-3w5&vN%Y~tt+C(p}LUjQZy_tEj?gW(69Tn`Ix`)otd3IQoe@2I5?kgoron`nzs!I zk2=IwsV}VB@v0dznfZGR`Xox@XOmm(E$Q!A_kYx&zRnKO-=P$-#rgPv;JpT*ve={j z5;0NMG3@s5=`{CRr}gjOwZ&i&>+9l7LUvl~+tN z<0?z9ieZy~Y-$-XeHhec!TC?I8JZHFR0f<>Z8={;IH=F=iaXS_xm<6i-%y}HJC5^& zhMku^#pqEz5jAqm3?_+-i*JFt|KxwBWeFf9_80@g{)_(V*;kLzJAL6+BmO}}KIB6{ z1;{Oy?b3G@CbWU6AY;onZn|ED;>lE&ack~xM8Pr%-@9d6MiLK2%zufq6mdFQqpk~Z z&?>|#Lm&Qpj`I8MJ;>%tAz?k?^f>@*6&WH&K)MP6nc(O}OGuaw@tGa7RuRMw=4M(D zqDa%ju^-ezSnxKdL3Njt!HVwj(rEHP;u*-gxog`1lbO;w{|b%E7>i(ot_|le{`utW zVGtUj>|yY)nd~+z$D`Bu((gJeQQY>~La-Q6Qqq84b5v`HY*2PqV71Q!T=)}zx^z9Y ztHXL`UrIjywU(?T}*s?vBAH*fvpUY*RiuegiM~>Thri_>`7HMY8ds`%Ek^@F&*VtlB z;gVtKT+#U|K{s>DVvT@W5HgQW&|Y{gFs<&K@pt^D&5D~x;Ak5F#zjdSzimrCxeONR z0c(JjE@SHZ)=WKI$;TYMk_~2@X?_3!J_n0jZ90on9VLnO(HbOX&hDKj*Df|#9DH9( z(O#riu{~J^leKb}fjs@^Ldzd$8nu2Jp$6#3^g?3my z{48D5r$H?)!yQUCz=> zo*R$GJ<>qR6`>qmy7f&(0-POXe(*@Xx>YZRiQS=>C41dB$myAt3fig*Pu8mt7yDd; zjI4CZR>YIN(}}0&*Ha+_k!xO*9`o|!ds?g*c!RcpCGZq8xtqXV!?sJMB zSKs!Nyz+ja=LV_ewpbUah-;xy#METK$~)^7Kx^B?NlKXRiyq!RRhn}KY+(AOB?=e43egbB&}p-R1_Hj7(G9yh z`m?Rp19|UE^P@=!9ySv#L%jz3lUP6N*7|F}? zvbZB1F|ArN{SP2*2jIv^lXd;z@3nC_G1d(C#)YCfB>r$Cw~Ah+L^lr9-+3S!B)yD{ zJt8KyW)hzy-vJW*(HV=pn^AqNp{{ zoi5+jf5(sB`hI_krVYB!^8xj8&nbGTAx)%LP%cvVbT3%RK5J4jm$MG!%w4f@0 zz|P(sE(j;U`-@ORnrYpY1p(l&9GG!$jKZ_roU=VRwcXEN_5Qi7;Cc`pl31RfDFPjB z`x+Gr0Lt_2!~u?>|u(ktVjMsOscBY@Dwzz|7>wRa|FHrP>1@7-{z!)}9== zBhLgm?;NL?z4GT;SoSigN=<+7;NUKClTV#MD8wGl#a90K@ndVyxk5ijzZV3e1lZ3` zntq;FhL=0Iso;u&Ysnx1(1+$H2N!l@R4{5NB6XIXi~Nw-f7Eo>e+I(|GJp&UCmHa7f$sF91`| z(YT59<|&^lP}==E&4jcI;BBK=WR}wfl$%vd<15dtS!P@Rf^gDF^1_!u zt|w;L!YfffH956eg8lO&O(Sxz&|gw|>M`9TnW15tA4Uoj!RU#Po}va>j#hbecn`Xy zwF!|HF{v3RAvbSltwd&W507;c1K5t*fDf^0)YB>z9r&5 z&v(qZ?_5Jcgg7b*zgTux_P0CN2S2lNUOqj(oVWwz`#0sv_Oh3pqnEV;iS7z<*m5i{ zndFz|q_A5rx(IpQo0;t*Bqi7{q%it>2~t3ZP%R9I;rk%=PG(1>aZQ993~T!jH2y9u zkiUQb-ZqO5Ib0TUbE`lmpJ6Q1KH0?$!HR?{Hec0BAfpj4V;x3@Dp!0T4_qyR41K!@ z4X~)L;?#w7yg>ASQ|JGjKTw47+nr7-rT}QD z1r+5n0CE;Ksj+NqY*^F2Mh__{0X^tylmE`9=M1ey`!LmH<87}|H4;N`#_ZqxT|^xY zx4aL|^M+7+vx6v2rgcPIu>Qo)-U}MnEf(2IT24Vropbi#UD#78E=4u=<8Rb?hXwKs z3;H#I&EeREC;b2e$Ij+wJ;hU0id0^L39EPX-k;RCz^RzO56meIkL{V%feE z+4L~2;7C#1c4AK+G8cMQGXU43IZ+mOrgoIadRhSf0Ij)uKXp&w8t5qtM^zzvRY|}U zT4Yp!OwddKe8PbpoW8gWr($51s651C(<3GIb1S2$dr(uYNB9PHA3H>l^_jdswb45@ z+sW=6ZyRS`C5CP1g}~MxXq>&wiUUf#8I=E`I5MK*k}qfd!PcnAF)>ytE+&>x(4U{$ zW$zCFHy#)o*?O-MtmC90ISfcMP8SD|Wnqd3x|L~d#{m%?Ybyfq(x=~E+I20Kb*fn+ zb2$vQgG19io{-B!1wscIErA?|(V$1#8$wI}-UyBa1+#DMXCIH8&s(M44n2~qjZKyj z(MU*RZ+rPD;?9T1DQ}6$WTOik#N%EVc!4#Q@aj?(xotIF;*t=5YQAwLgoENxP$(4J zar*BF0*0kNlxy1>c2nt*JX2}gM`8!-b_zD!oe;ZHy>|KasW5nf<`2~6ll-Du$pJ+Ze9b0EFalI@u$K}29+(L3N$ zZlX7iQLmPRy*=ZHKsGRPHa_<8*=p26PP2uZg3|a!yt5`0fSv+;C8=`lS*#0hhqY~i z->|CT*toHm5Nf$~(H3&1-+ET@;~b+z z!$#k$`1tsR4~uW!yfHo|7o&h^=`O@-&-_9$p;h;(iWwTE1$`N7R_>0OnSddS@-Z3w zjxb+Rf->a_L6PQDLiePckAE80^nyME4Vr2jo{E3(zEZ=Nmiu8 zn%Rs|QH_4*3i+#7SC@ecq|qFiz!(h;cgo72TW45j{OS`4Lf#9fg4fK_WB6VbH{g6( zRDg2^E2yNGI`x>~J=!O=1nFVG!XzZG3(Y${j#cGHguz8DF?a$D zEqIEnG@5AC3DWrqF#U9E2Kaluyz+5q%PxT|31pKb|L-99FvhMG|xnt*c#cS;}J40fzNjq}W(vrDqrngrlo z;&nEOqzG!D1-f`Jq$~mMn8y1T7N$s6#kN{z3_1c-rfL)PPkX^%h)y4z|-G@)yPtu6~5B)719Kfm3ICnqXL8q{%_`j2_-MXKlj<0Q;a(JFOo+0fid7J!!7)yKipA41ujL_ zMjKwe0^-Q{eQj~Vq`6-}ncOyUi`Szjd=12I0FHY*5LCb*@xnsK% zUs4Oo@6YGw#yYyXhp`~kour`l?*v9-@~r{8d`=P@PW0e>$(J;}C&QpZ_IwdsO~B5i zh-18zH<({{TwQ05GaaGHRDUaYP!8IEtXAs6aZt3}1khJ;J*E36FLtAs2qF+DsM0Y2 z>e}TQ{@rGdC_1PtnUX{QtWq6vPCyZnPJ5z?2DdD1IaZm&HH!F?jTAg_C^I{h7^JoZ z-@O~|uWG&KnS=c?wIkI2-66$%dp8)8$@EhYd$-T7a{-bFn#%hd!4GHhPaIoO_D>$I zoSX#;45;%!OG*H#oF?cNb3&3K`342{-a|-?7@lM#v_TZ89TO2_O-14q!)_{CcKC4P zdrni9xiidFL>Ihz%dO|u6-_f{xvAQ=PF&Y1t2%qZ<{$y+r0-I1X?V>0sE1m%yuDw@ zsrFPwBcNSwZ1oeE#4^070@wJ!>w^G;L}aGO%5G#~p@G`yRSQY2gll5IM%s|hu~T`l zwq3)|F9L?d1>?QHIo?0}W|g_NsKjw(>zoVTmL{{^?QJ=F;(+;S-LJEm!T?VRlwV{8 z=p%<)4@fKzG`hg}z{|@UyazaFDN|tG2`l-y&KM}hdS|r5E(7J5kI6x|VVHwERt7X7 z8#Ve)7--k&4cEy(u<(vmsaJXPn|(1fp}ZUHag2fr0#5Hcu{5YvlhlhuibfXXyRI&_z?GMDu;yojp`1ZYe_1xCX=fvMVVw_=~q2$e*HU1AC{2}Pm7;|j0MUk>fJ}wp_T6~_Wkk_$CjD5%lrnH$0fSp9t z%O^CyFXB&~UKef`xtU0Kw8-UqY_Wm_7^?M!By6}p=9VsetbI;RPXu*rPdP@|Od%^w z5-j24^6Cv(+Kk-9`6EM3bE9jK*oHHV@uQVZ@$v%*l6I$$A(KV%8yRS-BEI{E z;Hb9kKk5nSbBIx?@m=c2?C84Rr!vi;k#nXuL#!_y5%fH)f_JBnT~;z06NZ3>iY4V) z7F)T)!kuWkXOqiU`u`gC)|1u9w9dfa#&IHkfkdeg`~JBKD-!&!=mf#y?WN_P_bJ^O z(msk>WM5lq5i|l~R4t=H#cHJ0g0;B8S{gBY$u&Q?_gl`A?gjpNF06}}xd8_7HNdCo zJ!Au&q3QjPbKj}wNB8!05nWu2leSJ6JzJQtX+$Ql{&~`*2oyvpPN2FSbYsv@T-_%B z?fnK%LA-LZDW_+_VF6Gk)PWrv7pwa9NeUYN1Q@6W7d8)9S69F;2}dD z{K?V^{lZ@_jcQLKC_co|ov63(=`vlueO&%x9W;t92qU%UJZ5MupB<&m?p}qIgl}rq z8ug_epBNeJ;^xg@YuRO)9bkU&ApiOEN4Xpex=}13abX?7W7hg(`I%RqO)EH{x;^^{ zk@k7e)V2#_XNc{wT>`rev&5JjT!Cm6ZiRS)`pcu|%pEi4TBoqy^2IVQEFYxg#XE_4 zJt2#qi!qRQxA|}DJ>H-DzE%}L9V#d$1+46>PWJjoOan5ezM|K0|C8QODFa><-CRDO zMl^z2Ok5-CDH^C**s^b7bc{4>R?kUbq$`TFWthPAeH)lK@Ex zVlrVVJU{v8Fw*1}G}46m$vYXpK?`5>QsdDf5j@l|2fiCH_ecO&@PT6@zscuTVGc0M zb<9quAX8^g@m1~INF8xAzaWI^J{=WAn^f??_%^Pm;&;q9eBKKO*w2pA%>zZ(QN>~= zh{#YKBE#V8^20*rUr*r*t*dn8MDcV3HOhL%b~?pTk`XXwT(9of0qX-xT;<)}Th@u+ z%tj>dnD{zV-Iv>#FGZkX1~!Od%NS(MP?9|H z=Z!}>(-Mo8nIHqNUu5IsHa=!&E%`7wDjiPKDKxKsxISput0mFkH3`_j`FY-_C;3Ry z(D3N&KR>u#D`b;%xf}!C6PqxG=#n`&Fch`i!$7rJtUFLi4yhjty3W8xy-As3%I)p_ zQZtpyZL@oHq3D0pux?@bM$qC%UMWAbOmxYg12hx$>C>lGcl9eU{a?R+aPC@YtgvzPI@<|%& zguoBkN^cDpK$-IqfWKc5RYG}E9{gFbI-(8$Ghx3o8n_hG*2g@0wyO)9J7wqzJPQVh z?_3Y%5R4X!{;HX7_=P`Lk88FW1|O9ByjC^KMcXaw$5s$!kO4C1tl_cjBmCb-7r>~! z{sUr{xL&m>Z;TvU6SK3~dJpRn&7uh{Mug|~L^w6F1$_Brs|g&8 z{grfN0LUH+crFz{oC=xl6v&TsS_GJPu+(XRbWjH9lw|K~te5Z$>}#LQ?-IVkY~Ex6 z$DLdIrS`8<1B#UAZrqT8>S!Uic*)m3{3WMPL3^cc276(0UmQ2=dN7Htr*#oPbO8&2 z{{(omAXWK#GXF)z=^a;eO(9tYOL$JrxSpKDmAt>dx|r<~1*~doH?4Xk(UNYp4g=EU zLtS(8ONxo$Dw5Mk(egI0Uqh{51=eM6`_{25%RL%p_QFlJ=PdADiDRDHC{42P8IJAl z>LLPt0A!G<9B_Ki3N;vhQ`Grs^k&_Z@cT>)IHf|j(TeZfr^$(?q}g&5r;_+`Yt@6K zS>y-O?8!5T9c|k=uIuC*X^A9ClAau-@B%i@QfQu6L;bjG-!p{vYCX|GG*JH*Fo73a zG8%wHy27Uruu%mXgUKg78mYzgywlXkuL8(0#aZ4F>g(}LIw(;j%r)ph(0Xy6BX$b$7dc+rDA)=lf+(ZMEyz28xsCNcx z!1>+0p0iTl48%&~{)J5u3-X1@PDh31i`@ygb&4m*?sXrvi!JW|H0;$BC%5P(YG#W0 z<>*kp%VK}d?l->|7l=OtkDqkK$Q&$xM=&x6L&m4|HI6Dq-$7o0Vpsgtn~n;|O!rRk zYKw>==7UFQ$AeOQj{bb%;J4G^YxF9{fdzm9aH%}~00@_>n}rD~WS~n z$glt=X#meg_e>f(CB8O#f4gg@Y;%(aY5?p!?f|_) zPKO5dhn>~UMnVi~f3sU+S?m&cx8eDo`~P|YPTaxE?e0$6KETvwGa$^QM7l37`$trc zCshc{!GbHLfm|^}jmdMG$H=(RLF)Izvrl@1I6MVba-o7x1itnY{vd zSkp2x4sTzX1kD@WA{y2u451n_l|}W7;%^?-9D4veeVt)JtBX^L#^8-WSP?8;gtNBg zefN5qAw#s^P}@(*rK07pGOVXh)9|BB`zqor$)Gh6K@qz6WWTBW(9JS%v4RfNiC^d4 z_`n1eq0?@7pMo;r5ZWIFNlzPm{*0u)pCZ{|Gbxww$WO1T1-j(Qw-U^*j>a%{M+ z8Ik+k#U{8RW!l_sn~LEb-D&5aP6Z_XwKkUntasNLMje$Nhf##6+w#QvP4fgr3cn+_ z-eBJr&u}FTq^ADo|huw*k=?vg9EUx{V|4K_si!Sb`qogw!mqIYkkMkW* z(UkT>l0kD2IzQ5OiNr&6NH}v3M1v`?nzx#bxly)DHuDnHpP0wHb$ANhhE|O~Hu51^8F+lJh7k4`#1_o1w?sTn-uGPyItJ>?nP9Z1|~t z4%C4&!JinB6rg>05*fdU9(1go)3K3o`=veUO11pc`7m(A7Y1?cFcWMj19`f}4}YIz za>PqH+^X_OPD>l*$0=DJKVr)^M7}#rsy50GSM2V7qQz|N_&tEHRo)n0vC7sh?qqXm z%w6u1SmbV0vAm5$H^alek)Rg0vCQQ2zGg#Z47KtTaL8*dwLW3Q*ax`DeQ2a3cV}$( z_x|Q%9t!XG=Q-Ix?byQZ0w!|I6DyRE$Bs)y_#7;%au$JYY%ag&im4@4m52UehgjHL z(c;uj6Hm?6O!lEUXI9;Lo%j>MNN%Zcna5ONi;H|9%J#+gIALK39O&0J4X?igy{0P1 zTzn9;3GhZw8obOonS)a{3ly2?5&mkI2RnnHB`ewnoe$bIEDE^Fn%a`lUFuKO|J*7$ z15&5<3Vm%%m0NBF9puTLn1&K%Q5RwghxVRH}Kq%SMNx($FHI)z!OE( zh`SUjhoMpQcszURkBm@M>AgghO~#33?iki-s}%CslzavL25Xmq7?&W|y-7EM_uzKV zw{2#~?@;XGR3Z?ne2r z?oC+|{(>T}|85k*%;XaT!KlR=)6`ijp``>Ib@2&}Q`MK~GDLQS@E&`lpcpzxdDnuV z1sQCE1dY6$KF#!T(WA@%LP|h`;$__S`E&pWKRR(e#K4`wOy3Zyjp;A>IRCz~JN`T$ zxmLnV>RT=>v2dW`G^0*CnARwHIhCPv+630auxPKE$j}IXGTezNFj^XjbC6vSG*1xhd z%1Nn}^UN|6aBBEcX)%ih0(ig&QO=SUNtcCffCtquyWP^18rhv=RmU^WFkhn&(Axy? z*iyuzxea~urHAnLZd7&sEYzMkh6F%#w>39=T6uore6oCV5Bi-85MXePMzq!#?~(+R zBP@#WSmyt&Vpea^w@~++nV${hcDASne)qeBGjPEJ-tE{V40yLam|ouxj&#g0zG5Uv zh;wF_wd1fhS=D9?xNU$eh0Vs5fol*ZJUavQoJkk6Sc!PbNl4}_7&bH}6kuT)YW%lt zM3wZf8#5i-l8FDkG34Um!RmlFfAMc)#tf)?1#{s;gexzoDr zfwRZzv+6MUKNPP zq|5@ELgQ7~Czvy%mjp_-KvUff(5=idMy28~?l+-f>lj#oGy3 z(-%Rj-H0T{DfWXsNYkrwy#K=Y!A^skV@1t*_3Do8y*OYK8U&rfl1J&QZ+>pHPzhI=2B^rFMs#G=i@eq}Oe>VSpTV8F<> z);;>rj7K@yEa0-6B9)){bQu2El8&vL8wUa4VNa2>bXtTHx}^L{qM9MYC=bjntABGh zuKmmC#mXLQnBS_~=+#QiRJVLP4F5WFu%b=RMg|F?fk(}mF?+pAatgw#X3p1rKfMAb z=AP?}LI-wLax}@HetbF;;*}^g->{5bK91U84Pda8YXlF>75p;`u5nU48$_GA+zRL?)5>dhKR1F+Rjn~c>+*jlUAO{`Ie}VF_MII)0hvp!x=Y;! z*K+rGl=zP+S?^YAtiTX8w;5f&1byVb&Wt2LKPr=BmeCQGtD-hM0;;j4ad7R zGfpvB2l?`tGj@Od6#h8^VmSXRYm5-U>`Jz9Cg0fvYu`Yj_!k9Gk!)Udw1F!LkW2o4 z1+s^_j{t5|2DK2#y8%o8?DoCSEDIZH>(@}3@E#AH2M3x3n^;37vtD9iDpcSY{#If>L=xSdMn?wgB^k@1NrNnhtK~_4hQU9+l;RWLTx|dQcW!eXu=~m zs2Gb-rX;mbTWo({7*5yyMvoMol`vR1!wwq!pw&KFCYa8PRigDviH2SEzhMm{caR_) z?|j9)36;>1cMtmsJEDM0oUy048-b;kMh_jRnx)F4y8kO@zp=5A1#TgPwg!;VbZ%AB zl%DwvT9t(ur*?vl3aIK^Bo#jf)JY=CXX0klP8ieaqIP|oW+VXYs+<8J3{*Ee>)Az`YsL;P16l7LE=N{_l-C3pj@ zLb~$og_X@XzdPNIIjmYNdFTs)_~$1+6%IBhH7;$Mc0j1;zX>UWqIps(s>gGnkyEdK zN|#r=Mcz`6Dm^bc?^-R|3u@3Tn1$hL#J9pPmung{4uJ4EX*Myt!-_P?6Mn)s-D+oN zf3|pWy@CW0aSj3SIK&8q*0vmOqkqvX)uidUxhvEP0Evf_$MtQM{I0g7^iSrhYY9`LiQ*&cl{%jp1MF$`fbRKKd^wJ#`Se?71iS z98$|{_}b2`StzIxB(Q~Ek8C1{M?e7YA3$>)n4Nq#9`gT&k%wux1RD|7lG0gd=&(6G zyVev3*gEwK-J}CO(535H49@@dVTXLvci9l+pMXBZA6Hf(@*uLfq_kSb@~YJD2ogx- zEIwre;!>p}s-*i2k&YpkTFpGa{1m`8NhRKl|!etD+U|~Ni*Vt8MYAL=*ER!-UJFY5&H4o!NhkP4qqt5~Ngy{h- zE^PyrnCy54JDJu~dbo`Rpc#B2Hdb=%{KBR2mphC* zkNPjcp?(E=YrOJp_FzI5mYrU=>D~9zBNoTsv)dn@0$l~KI=wUrLg-V8Y5Z90(o3X+ zH8M8lRIbSk;Pos3Le$)3tJ*v>8QihL2<+67$h&Xq%n+4Z;z|VSk(+c|kxrftS^b4t zt@?UlB`pDs@>6WLs&Fxb3Hy>af6210I$=2N#mHJh?#vE~1-LfXbMVCRL8K_mju#4Ea_JF2%@NsT+?sny}^Cv*K{|*(B zgT2L}_^>umCTVMbS#goEGTgL!-dQ>hSP`%%m>OT0;oUr1Q^fxaB_{YQ8-1KiQ{A3U zcbT3xeDCA>J`OtsTAN!3M24yT#q-@#rVpVSCo;_&t~<{28}e4bxo?(+1D^^V`Mu9g zex)%C%j?6Nu69K2w9H}E^PcCEa;a(wyrfH#`Bh!1+7vuttpH}xGiI?T9XXYcxBEDP z5dsNB25X@Mt{o2@BdFFRf(Zch9mcx43%FvQoYk{{|9at}Ow!n4%rY&$p@h^$tWq!R z+nxCODkC_bW#AgM9UM5~I|mRgd>k$CsNjG#c<||b5e-tQmlk!4U)T+j`iO>yYS20i zs#0GDl$6~)(^TBqJ$HceO*G@D|H_-=SQaHQAdPJ%IzPtvU?(wg@k^LUTnF9#i8{FS zxo=VTH#@JIc5mzaOu!xCxatSqdIiJoG>AuY#K<)5Ti33wj>}C;Gcz*`3i^hIFA*+0 zvsVwW{7sE0wI9f|L(IOz(XrdacKf^0zlzIR1qMCaAe?@>j(Bbdlb<*LZl}dNiQ1d=Z$ub7L8e) z!#F|ci&G_yJ@O1A(GmEEZQo>?N)NdS?}WW8+Vw6?*ue}D1-39|6Xzm3Z;2tb*8dc5 zrV*P4QNg(Zp|%#_4K~Sx-S`y*)J`|=-#0IHO4z?2W@cs(GbtbKa?8wI_yr(lN$6g(8paOXK{z@h5BWK09?@7KcLB~4OIcL-1$ zLWNg%N~*F%zp>mc^>HsA-mohvu0nOPzEMDGw=2{BB_f^ySd$pnKdAi%;-Tx!!Q?FZ z*XY5g0QG2V2xp#`v2f^b%gy42G?5`ID@ky&Spscy9^|iEw%xL4rtQjJzH?aZm)C{W zav!skSD%>SLMG^caQJ^KLID*nM7xZorv2l_)YSWc3e737cR2XKUDl~{@DJNUROd`d z2xp>9q>74R)SCNz;fib0$9MNuw5jA9?KVNF64FRn()`|3qti1#Q3MTPkZ+zeGqn?5 z&8H)z@3!K-W4F;4x76ZVWc;s?q{5Kh{{H6NhGN=*571OgtQ#r-STz0l`udvvoa}El z$&ahvvPb@pi2nxUNqa{}V(`agkZ%GiYyS7|Z{t3Hws&w)0+7hQdCh#vXi{~GyM5Yi zkXF2SWPA3bITTn0{gwT<1v0wfq6^sBmBVckT+iv`k6TbW%;Kyztn05B?Bq`xJt~6< zW9K1(e=v2zs~XeUQOLsH_u$Z{B{)^T{mQ_ z44TJoZ&gLX2jUeKt)85G%0!OwYc?t{&ZVlIo;CY`L+D>KuhWOV;Ci~%w=D+mjr~k?{6)d zbUHeSgp`g(X5il2yN6%*_Qu_Hp!02_v$Kq@cUP`2MSV$u+Nlp9;hGk@iF`miZ90<9 zMJnbmEF1qaibg8j^!U%u@~>Yd)z$HkgT(U$&4j6RFV#14flxJgd)pcSX2_tPlCrR% z^Emt!Wz^b;r+faQA-GBXOSkd8&FZ7w|u&l!JV@Wro#5sEM@uMAhl)J%!bseNnGabu* z3s%XuMh+$4Gd$A4pj$5&Z-s+6X6?_f#}__l*3B9o{@pfJ0=c}{z93UTGOA% zhF)u79Tcz7+FSpN-uSIEdTG9L0UUm6{cb%fjoOHTzK&8~U;n*Z@SBKB2(&$MKLUym+ z*!G2g$%GpZ`C!4wpW{;K)^M7|>{qQleHKHjiF}EcizRzkz)G_KwF5fpm{`2bk$vH%Jg@=q zda10ed=Uzt96AVplfI66LbWBR?OX`C`4*6=)Vk z+wx=vH)J#k|H&HYi4oqMru`5WA;k(euhTU%Fj!`Re6$LW zIz=sv#Z4g!qYZY+_j;gAJW&ZtZ&06Gp}bx>$)f_@UriG-sCe7 z)L;NY%l#fwO@X~}W`}3rR18|RL(ZEB3SlqY;WUnZP^|?W9y;NSSJG;ba$93LwH@#o zLT9y@n3?xToU7>CZ9<^G<9D((n?_ISFCFRp5b<%>WFnLV!Jz8I>&{sG;kQICsU?PlI!9hCwR^Xa?ZaxHpxx__ z58gPw#v5sj?UrHrbxw>pNg^uJ)CZ4Q%?j|!lD~p1O0U?n5PKV_zvF@V1QGaxTkX(N`B&-IJD6| zk;SB&eW9Px>@++_qyG!YR_fe$-&Y!UEOjJjzVLna-{TqLFccsT!*F*b6Z*HWUm5z% z>$*%iNk7=xU3Zk)Y4LDvHhE4|r>R+rHMfV%otZi$&)Mx5H>tDUP=Qae5BwL41x4*>HP!G) z*&^LG4>sWBv0Cu``(o8}rMyLT`{}!10gv~jLLRK#6yM?_S5Rc~UKCobIQg0Of<6DKUXp~2lzGe|e&)g4$1z5iQ_^aDn85?0-WA0Q8_fK1HJLe)JzFD+P)bX(CS z6X{2dryhBmuq$aN+8v2-=bnlkNpRc-dPvNU^n@x$vHe7pU)D;GQzK|!~M|K1a(V0)~a@iXC;`MO7CH2GbRtPzGT1%pTCG|49*9I=k@Bmm4j5aj$2X&Bh0G_SsQ+~d4V>XlJ+vW>vJ415 zvKC1BOvH$~AG9mldIkt#BPXK8@@7Ljbrt7Y2bydRO9`GwoB-oG3?O#kKe=ZlhN0E` zmaUP$uXT#y3H)t)Oa?bHGV;1TXg&c-O$omRAw|R`34F93o`9<)Y3Vbxre1^JcC8Tl z-@@vlh>`m$aAaE#c-RRzKIzvJS=@dK*}ioQrEO57D%BC#2F5$sU}tI}i3?LweTCn+ zs~2!5OrD=n#W%ADbyB65nW;F>qb&&@(5PS*i8#oFM^AO-D3MBiI*#G%lX>9Z6^>&4 zzgM3z1~_WrN4`5kVA^fEC&ix>Ug7`zqGKEd z!u>knA8L1RzDXY%dgpr&H|bBJSM(7g!fyXcmsv`aXd2+Y(yFq|hmMNuCrwi`((r&& zBZ?&M=*ULty@^+8@`Lin{eg4CY>_C=f9R07hs=V3SHb?|`J`94PD6f&OU^D^Bq?owv%X0D-(WV6L?TkD>ipun&svg&d=9i-r>Rk@eG2J?0 z?*7Q^mWR_SPC^&qY08>9IvWUq#tE<{%P%gLZe>TgKO&JOwX=)c35)vg10;Fs^fU=O zMw&KV5XwwOMuxb@V9m`j=~eOsPOZBP!a!D;&SfE+H_1dhE*fYoCJ*h=PnFpV)lwVs zaA?&sv9;q>mV!cg*}re%_n33-uXGqJG-1(V{lWebr)K$l_oz?Z>-k#gFPi~dU>B*W zJdFu8!f9-7{(+pIPLD1lO=GWHnnP36?xn3iRR=8h?j9@Q+h??H4+@GeXqZ^gJBWil z7@4T=O_r|zu)P<_c0AkUU9B>%DSu* z`lrmGQXKM%EN(rHf91ca62$`}(%!&=>gwm8#U2EaJu zDD*IPwf*p+i$GO42vAQ1+QfHz^&lY$cZ6Y*YouE=nl9IeoYfx}kyoPou1`>QIrpkGT_Vw$UCc<7g;Bz#ugTF8l)a8`R59;6M);omZ@jCHsc_ZR_Qk}#1{3WJBUMI zX9I%cwDZyo>>A(KqgjrxHa-`%x4#VZiimz23(fVOpH&b^sABZk*!L2VH_OS%@jB@x zsWb1z^kmQNa(nmg-Ej!j9VG8=ld+;JZua}YUW@7PWiMzq`p)Q|{kdYUH#s35!n=Jp z)kbZ{F(!A&RaJT?2NzI?^%aN-+-j7PPe?K&juBCzQn${WFc5@=AJoJ#eo-^%Fgo<# z`w~P%c5@N+N}pM<;UU>`$6LISdN}UJ={XVA6l*s9usy|?1+QAxwG>Ox?j5vxe@6Smo^maJ>=c~La_)d{v^jq+5-|xbpwMK z;CN(Zl%dF9s+187BnFhzWvXSOpQPcDiMg6`Sn}8K*6f{^e+@3Y&WBX|@H(1LyW~%{ zwzks60z}Ek$zAtmUVn9b(S-~7@ziC?S&DG?Gd@@$9tngWk*0Lf5~-AUVj9!B$w zUi9b+y9)hy3KrM|dKV9_L9%57QnB<{cC-Vngm@tyKDt(6dC9pZ>T8V5XnH#_9&BF! z_e_=`A-p=T35Wx=X8kx;6s@EhEIz9_4$7?}UC@}gAC8`)z(R+t0GA5K`WZ%I90~IO zuQbIdDTo|F>~?Yd#%oMQNYVCW&NtTaEU8gNs)@UIScO1{c7lxZc?6gJ9P3}7DU0+q z)O?0C^_D=gH(&oqwje!)~1O zdbzxmcInR{gJ^UKy|ry=^j6-G@<{5%-oRX zG*Pu!emTZ`DJ$SOMe5eBWRzGT_vSoAYupR^wWtV1RrmxII9{!7CNUc#mKA`yln9Qk zJjPr7{-+omxj5~4t+7d7 zM-=->7T{WsWk&(^Z(&76ltVkM6(J$v9}xbC5OqM|jv?%9TH&607JG6hji~KXRD02S z%dDAlV#+=<{Oea{rHnUEzUkD+vZf|xz9#ukA0mXvDOXUh6bPdq92RN|hICb5;p@~- zMXzjHUC{9!>Mg&a9gd$U#9%o~n)zh+Fu88KdvNFFt>;)<%IKK9??Ha7=1jV=LZzU zFwDhr&P`z+wC}aXi&IbRv@Uh*=)#*EUhY1Kzq1$}$K1^oua~k6P@b;!Ix$Bq2QVDo zI{fC6*4ip~2d;^3kXW_k;LQnGEC(_MdRZ|i%Hv-04=I4+m_h|R-!n_|c~$>LZ`7t) zV;c13oIfpeBD=J>7XB6LGbR0YRv#;}+LJ#m;~q>?q`a1zKYIl&-G8;X zKCv0gu0RR&67~i+N-nbi(!o0*^A0B%2Wj*eAoi>0$DZAazg%f-;Pffum6>2#f`>;< zyB^K2nUa#rpFN!!ktHQ>*Ay8#`S2shtgwDXYK4~`WXi>k`swn945z=3{7Hb7G2?vO z&kwLA3SvfD_R)SW&SzR~>9eAV0&Tlqw+o{oseK~=pg0CeX;fx&mk4{yALRDqu4kme zUYwANPy6Bl&Vr7=Rg7G2xasia-q|ZNCQ&_`w5YpicG}tAUI#fdz%A%P59A3BPnIDv zK1HB%A)9uYbcO6$UTpC;$$aY8D@-8V*1U>BC(8sF0|QS+7M_iH*M z4mi}p$bL?+ij|qmE7#d~gS_RSY1yaQiY)a_oL(Xt8$2sa`_}d%^W;6M{-s3;!Jw3T z0CzHjau; z$VD%QS(JCtj!Qw|GDQHgFnPd^GQ%Rl{@dC)K*q7`vMmz0FH9}J9z?{!T&_zg@Sbe$ zSSe$z5Vmm~9vJO&?bR*seOo6@#}W_i^q$xFr=L8OjvwLxYVoEO3`?wikM#i`R$FX~ z3}NYgzIBkL*2dFB4?GlJpImf+?cxex2h8QtKN|1f2bbmflSxH9Ct~-c&7t-{rFZr) zf%pm9%iHOBOyhnhNw{#$d}`)2DyV)6aTPR09{TPr?J2@O10NnosfY(wy=bGX-85F~ZM_zp&Zs zt$lg>e$l*S+?~Di${biG&_NcuDSzX7sQl=#)*vYl^Ow22ETpNlBV+IQ_kJXc zUzN%ENtTO1EU^2)2TAQd!5E8MF|7Dr8lLzTCqq@Gg$)_F?_QYbc}K2?qr*yB06y4_ zBNl7QNryI~g{=Fh887;uGyowv#cn1)4^0BbrO`YGcmE(?_5lw}AJjL)#lK`a(PQOJF{XQVOM!(=f$34h2-PpygSqawaA6?bzTPV z<@P={xY6rxY2Am#T$PVq%l+s!2XsE2(x(K2iZe}Mt^(5e`MG5O`-y8HJ>*x)6E$kt zpV)iyI!E5fo1(t~TwUI`$6eAVlBoJ;)#c^?fx!~a!<|S2IiR4DS4BWS)3dW$ z7?9TL2zR3&12GoI!hGNpaU}ERXaq668PRZOVpK&xmCnjqSDVqE6RkJ@+{9jQ8J0Mu zJB(WsYefL==BveV|M1{oM_Ug&elR*#Y#qP%nezyTxMi6NrYN{MVVkj=?7sJns7v&ZXBBxx^Z*foEGr`F1cX zr4$q<{3~8XYPrD70|^~b=-#UZtNoOj<`D+AjX~11>KGt-_oakXNLRT!uiHx}P=%(+>5nyf&%Of24$Rye%o8ejyuPMO&K>kl73gp!%D z1`QB6Iz4*zGt!*pSzg$b;PrlM2Q?f3wRAd9iI$tJxX*UR%X|{{(V5`>;*YBDBk$ys zg`$?MS3GEu6|N%>Rfj&O^*OE3UXSDmkpKf@BEddLDQVzN9*Tw~Wc!}WZbY;W*=;snjcwPgHFcv{q>)+ z+uMb)Uc5mi=Xcsq`w^_9tc;!Oe`5!-^-tQ2wyTVA4(S&jt5{g$>!`*c4tjK6k<1gJ*qS@`qL%6)&d&D)GE2>X5v6W}HFj%j>rIJP_71pc zx*O+>71`!JR-+n|BhE8E^xBE!Z>?#Ie5^m%6e#r0n5Rob9~v5}1tpQccL@d!#2#t? z7*w4%h^iCs-Q-zPeKnjUhNsUf!D+qFdr}(Xb$qJvcE68jLQ42{klV&@3B8(pgGZwt z3+A&1V-mLvYPKq~%8xxP_Jyt)W5Dw;9N;g@BKNYStFK~Z6jOywAj(4%6{ z^dGHGV~YNFDk{$r$8p!fiU4TO`@l=Y{?D%_RX(Crk8?`&x8$$}%&qs}v3Gbm&e!U* z1^>9+bg3DrvE$E96SMC5#1oA}@4$Cr(ry_kNP4%7-rrW0cD?DY(G$q6tm=ma`^@c@ zpU#b=?T(GZzQS-(;ZF**Sq!OO=4r%EI+am9$@^PTBKj{mVm%*p&EA}3j3B_{81{NG zb!|9eAoua($75iuNkfQlPdgYb0q0Zbne2*tF7V#i zW4IG)BD9qU`^;Mje&E5ufvvN%9B37QN9>uXsw3wF0Ruztle3P24_zGXr&Puv0GN=8~R)p~#mXDO4-iuDK`&u*0 zDs|%M(Y+<((q#Lrg$luT{(P&`mTs?>h1IhDZ>Sj zdUDf1ZZH%>PCK#SWM}uYFOGb2VIdOy5(}W72UZ`Dv0M?B6lVzuBoH!hW)eZq;=-S= zx9W8KhC}=#eyJ+(HblS|6k7)bVG#Bw$2LE()r+5kcAeK|(ax5o(L71?p(T+jZDHaZ z{I#1BKc_=uwD#0vEeo0gUks+CTY9BSGLe5_Ki%SM7UVCaO4ta=`;Ai4+LOZWmdf)H z^fO6RK|7wq)gM&Ac93SSQZM8jK3`N)(yJ{h{$34O1`>kupchz1e(F9uJ>@j(LRCuV zL;^-zJwWv8NQHuX`{So6Zr<&$o#V5-$6u3mZ=yiQ?+=(-LZWiCH6fQd{~H_cZ+PSz z(9-*FZ}wZA^(a}TUIQ9vWgZ@Q!K4ff$UP30!az6j9D|C_fs{cxbH+gKqgzJ~Ke&+) zjYDwD_6MOn6&6XA`-KJIH^U(PcD#lm_2TEYCS+(q{6=+KKwlW{8|g6JWx39s^VV(q5AgHdKU2ZC zUnfn3@;51Ljovsh+Z$Md%I2NhdJhI-435|Ntj-A-lTvo4KRYvH`fzuxTWg9mG(1dk zPqK0YOg*2Tzm5hH&*fF~C74~8l}S_ka)kz@xaQlmVhoE0ASj09M(AO(qw-{ey3N2uh9#vz6qsO~>4y0Nsb?GkAzM?3T%O8_1Y~- zJMI^Iz_aL&?_KYW;d0v^S@Gf*5e6b7Y=8x(oS$z3)2Vg;bi>UTj5jYW59mIQpM`)P zvoP@WLcA>3{ROVoeMBqd`$u~1YQrd?KS6+kc~?D*YR1Ow*%7uB%xrAE?cQg=SDi|L zYZ2!i5-X(kmyHmiUEs}rXs`_Ff91L7EcoE5?a z0W3nBi0*N;axf`IdIcgEVi3a9=;&yNF9C~!(w{^#yDN|Pf|V9`O6sZ+{Tu{zbqof` zn4a&=f*B6*v^*1cDAWuL8A0?VTu(O@0HG!yeDSX+*c8=?nD?Ns3Pm|gVg0EA2?FUA z==_*+p^H#TDo<0Qs#(TwVo06|Dx=oVjV=oZ*@mT3VF;Ng5Ub*ARSIx~WhVRn!VRi) zV_Z@zF(T1USMqI2NK1>Ldc5i%7#=29qn(H?Ki>F)GI?ql3Yq}{-61%lktD`mNPtnX zxwOkzRaK?i>_mZRLxW5PQ9Ajp9{|Uex6@B{Q=BKK0b#9&ir9H+Qk1J?r%@VgpU3I=NeKjbJWw* zQ$xH^unz%IW1-WpO>XW}A2mb_H0yf*lf#gF5+ewCA~G!GC6Zn!Inioal^ky-M?D2X znO@;gCY2&-QkQOUyr%{k|DU_bc60mrBD1du#|0y&z&%-9K&Umb@-{X0ig# zCia5b86O-RdgePXc!f`T2n76Yc-_J1fV&<=cLa`{t1B18CRlBnCnYu2 z9M~opXNpq42BitO6jqka)@2uWM7nLSGrILI?ax}3M5rB;yVg$xjJ?*LAUb*gtnkzK z?sGTl2cAPGpsfb{=}mzkrGxuw2-E7!1KgW}9+@d9Ue6U&3nV3Ez+=Wi0$t@*g#Rf( zxV^E3Q>kBto%G~;i)o`wKXV-*2q|{&<5OLjoT`hbryXlw*sfaEi_Vss<6{FYRPxuX ztUZWiME=#fJZfflm7O%aygH^Mp!chgEZLGM%)QTthpZR$+Mgk&FLdXMd`fS^atADD z1pbY<wC&ND_oIFzy2J3K4s_u&^tUdWHuZlr9Uc&~KiypSt}aR5y;H z=B5C~2$sbN)PMD4O$72)+UHItEFb!s77Kw#zLE|NiRGjd(N#F{2u-atb)zMdaU{U= zePa%23H68rJS1}YD+Ek?dd6$)9jB+?J%>3C{~4^cBGXgwwu85_t`5)hHr@Gi)G`;X5nl+>y~q%((v~77Uc7Cv^e18a$!auy-hf6C?yDk;xv~g5=DR@ zpelO(>R~tUVQ?P9;#X;7BN6b!#4DU+0txdpaIbS0)z;KB1>A;RkH-O&V{*`E!g2s* z-bA^?$MCO`5FE&aC2E0p4g zUQ|_ujrdHMz>`i#hmjSv5)KgjT|w_~w!@Z<=b-Aw3H+sIn>dE6UT5o&g;zmUX%p^E zh3C5P>sKrSI{{-B4Et6TFZUNiz!hr-06mb|ZHao??iAG4;sSZu@rVje`IBP}$SxfC zjmLv*i;M&k3DHIWLra%H52;$NH%wdkE%0pP`RQ1Yy(8yP+=3OC96k=ST2RNI??8%*^c5Et4zM=V4_< z55_@sxceM}>76JEejMm5q3XeE611V4I}ALKW=J_dt=9^_x&(k_Fr=1Hbgi?(BIl!C zC5+g~#~%lcBY!*@;1iN z{%!e1X6iHS$J^?L1_EHOLS^i|MYPAo4eSfzO~LetbYbr|Aaf2CvWz{K2th+|9V)oy z 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 W+u