From 6cdaacf669ca3b0a44811556d5236b25a93151f0 Mon Sep 17 00:00:00 2001 From: Jeremy Janella Date: Wed, 12 Mar 2025 04:55:07 -0400 Subject: [PATCH] feat: added gamedev --- .svelte-kit/generated/server/internal.js | 2 +- node_modules/.vite/deps/_metadata.json | 48 +- .../{chunk-D2CNISQR.js => chunk-X4Y3PAQF.js} | 8 +- ...-D2CNISQR.js.map => chunk-X4Y3PAQF.js.map} | 0 node_modules/.vite/deps/devalue.js | 698 ++++++++++++++++++ node_modules/.vite/deps/devalue.js.map | 7 + node_modules/.vite/deps/svelte.js | 4 +- .../.vite/deps/svelte_internal_client.js | 4 +- node_modules/.vite/deps/svelte_motion.js | 4 +- node_modules/.vite/deps/svelte_reactivity.js | 4 +- .../.vite/deps/svelte_reactivity_window.js | 4 +- node_modules/.vite/deps/svelte_store.js | 4 +- resume.pdf | Bin 0 -> 32117 bytes src/routes/+page.svelte | 14 +- src/style.css | 20 +- vite.config.ts | 3 + 16 files changed, 776 insertions(+), 48 deletions(-) rename node_modules/.vite/deps/{chunk-D2CNISQR.js => chunk-X4Y3PAQF.js} (99%) rename node_modules/.vite/deps/{chunk-D2CNISQR.js.map => chunk-X4Y3PAQF.js.map} (100%) create mode 100644 node_modules/.vite/deps/devalue.js create mode 100644 node_modules/.vite/deps/devalue.js.map create mode 100644 resume.pdf diff --git a/.svelte-kit/generated/server/internal.js b/.svelte-kit/generated/server/internal.js index 11eec8a..02ba79e 100644 --- a/.svelte-kit/generated/server/internal.js +++ b/.svelte-kit/generated/server/internal.js @@ -21,7 +21,7 @@ export const options = { app: ({ head, body, assets, nonce, env }) => "\n\n \n \n \n \n \n \n
" + body + "
\n \n\n\n", error: ({ status, message }) => "\n\n\t\n\t\t\n\t\t" + message + "\n\n\t\t\n\t\n\t\n\t\t
\n\t\t\t" + status + "\n\t\t\t
\n\t\t\t\t

" + message + "

\n\t\t\t
\n\t\t
\n\t\n\n" }, - version_hash: "2x21hb" + version_hash: "fxalwd" }; export async function get_hooks() { diff --git a/node_modules/.vite/deps/_metadata.json b/node_modules/.vite/deps/_metadata.json index e4e5c0a..ea0adff 100644 --- a/node_modules/.vite/deps/_metadata.json +++ b/node_modules/.vite/deps/_metadata.json @@ -2,24 +2,24 @@ "hash": "59b8483d", "configHash": "128179c4", "lockfileHash": "a4492988", - "browserHash": "5274aa10", + "browserHash": "ccebbd50", "optimized": { "svelte": { "src": "../../svelte/src/index-client.js", "file": "svelte.js", - "fileHash": "30edb4ea", + "fileHash": "7e88f53b", "needsInterop": false }, "svelte/animate": { "src": "../../svelte/src/animate/index.js", "file": "svelte_animate.js", - "fileHash": "efe49e75", + "fileHash": "e0aef126", "needsInterop": false }, "svelte/easing": { "src": "../../svelte/src/easing/index.js", "file": "svelte_easing.js", - "fileHash": "6aef75b7", + "fileHash": "48603420", "needsInterop": false }, "svelte/internal": { @@ -31,73 +31,79 @@ "svelte/internal/client": { "src": "../../svelte/src/internal/client/index.js", "file": "svelte_internal_client.js", - "fileHash": "d94966ec", + "fileHash": "7ef89f43", "needsInterop": false }, "svelte/internal/disclose-version": { "src": "../../svelte/src/internal/disclose-version.js", "file": "svelte_internal_disclose-version.js", - "fileHash": "63eecaea", + "fileHash": "3762321e", "needsInterop": false }, "svelte/internal/flags/legacy": { "src": "../../svelte/src/internal/flags/legacy.js", "file": "svelte_internal_flags_legacy.js", - "fileHash": "93c2442d", + "fileHash": "23f9f177", "needsInterop": false }, "svelte/internal/flags/tracing": { "src": "../../svelte/src/internal/flags/tracing.js", "file": "svelte_internal_flags_tracing.js", - "fileHash": "e66f93f2", + "fileHash": "543c3929", "needsInterop": false }, "svelte/legacy": { "src": "../../svelte/src/legacy/legacy-client.js", "file": "svelte_legacy.js", - "fileHash": "e1a27bb6", + "fileHash": "fef1e3b8", "needsInterop": false }, "svelte/motion": { "src": "../../svelte/src/motion/index.js", "file": "svelte_motion.js", - "fileHash": "1d8e2fab", + "fileHash": "0eb7fefe", "needsInterop": false }, "svelte/reactivity": { "src": "../../svelte/src/reactivity/index-client.js", "file": "svelte_reactivity.js", - "fileHash": "77d9e53c", + "fileHash": "ff2358ad", "needsInterop": false }, "svelte/reactivity/window": { "src": "../../svelte/src/reactivity/window/index.js", "file": "svelte_reactivity_window.js", - "fileHash": "a6e0d036", + "fileHash": "9eebd751", "needsInterop": false }, "svelte/store": { "src": "../../svelte/src/store/index-client.js", "file": "svelte_store.js", - "fileHash": "34081923", + "fileHash": "3830be79", "needsInterop": false }, "svelte/transition": { "src": "../../svelte/src/transition/index.js", "file": "svelte_transition.js", - "fileHash": "98c02919", + "fileHash": "451a25c5", "needsInterop": false }, "svelte/events": { "src": "../../svelte/src/events/index.js", "file": "svelte_events.js", - "fileHash": "dd3ffcda", + "fileHash": "0566e234", "needsInterop": false }, "clsx": { "src": "../../clsx/dist/clsx.mjs", "file": "clsx.js", - "fileHash": "de0643ec", + "fileHash": "029a0cae", + "needsInterop": false + }, + "devalue": { + "src": "../../devalue/index.js", + "file": "devalue.js", + "fileHash": "af3a9384", "needsInterop": false } }, @@ -117,8 +123,11 @@ "chunk-YERFD2CZ": { "file": "chunk-YERFD2CZ.js" }, - "chunk-D2CNISQR": { - "file": "chunk-D2CNISQR.js" + "chunk-X4Y3PAQF": { + "file": "chunk-X4Y3PAQF.js" + }, + "chunk-U7P2NEEE": { + "file": "chunk-U7P2NEEE.js" }, "chunk-YGTFLEU5": { "file": "chunk-YGTFLEU5.js" @@ -129,9 +138,6 @@ "chunk-X4XZK27Q": { "file": "chunk-X4XZK27Q.js" }, - "chunk-U7P2NEEE": { - "file": "chunk-U7P2NEEE.js" - }, "chunk-RVAV4ZRS": { "file": "chunk-RVAV4ZRS.js" }, diff --git a/node_modules/.vite/deps/chunk-D2CNISQR.js b/node_modules/.vite/deps/chunk-X4Y3PAQF.js similarity index 99% rename from node_modules/.vite/deps/chunk-D2CNISQR.js rename to node_modules/.vite/deps/chunk-X4Y3PAQF.js index 7c325ec..613e02d 100644 --- a/node_modules/.vite/deps/chunk-D2CNISQR.js +++ b/node_modules/.vite/deps/chunk-X4Y3PAQF.js @@ -1,3 +1,6 @@ +import { + clsx +} from "./chunk-U7P2NEEE.js"; import { append, assign_nodes, @@ -147,9 +150,6 @@ import { invalid_raw_snippet_render, true_default } from "./chunk-X4XZK27Q.js"; -import { - clsx -} from "./chunk-U7P2NEEE.js"; import { legacy_mode_flag } from "./chunk-RVAV4ZRS.js"; @@ -3894,4 +3894,4 @@ export { afterUpdate, flushSync }; -//# sourceMappingURL=chunk-D2CNISQR.js.map +//# sourceMappingURL=chunk-X4Y3PAQF.js.map diff --git a/node_modules/.vite/deps/chunk-D2CNISQR.js.map b/node_modules/.vite/deps/chunk-X4Y3PAQF.js.map similarity index 100% rename from node_modules/.vite/deps/chunk-D2CNISQR.js.map rename to node_modules/.vite/deps/chunk-X4Y3PAQF.js.map diff --git a/node_modules/.vite/deps/devalue.js b/node_modules/.vite/deps/devalue.js new file mode 100644 index 0000000..6366761 --- /dev/null +++ b/node_modules/.vite/deps/devalue.js @@ -0,0 +1,698 @@ +import "./chunk-UGBVNEQM.js"; + +// node_modules/devalue/src/utils.js +var escaped = { + "<": "\\u003C", + "\\": "\\\\", + "\b": "\\b", + "\f": "\\f", + "\n": "\\n", + "\r": "\\r", + " ": "\\t", + "\u2028": "\\u2028", + "\u2029": "\\u2029" +}; +var DevalueError = class extends Error { + /** + * @param {string} message + * @param {string[]} keys + */ + constructor(message, keys) { + super(message); + this.name = "DevalueError"; + this.path = keys.join(""); + } +}; +function is_primitive(thing) { + return Object(thing) !== thing; +} +var object_proto_names = Object.getOwnPropertyNames( + Object.prototype +).sort().join("\0"); +function is_plain_object(thing) { + const proto = Object.getPrototypeOf(thing); + return proto === Object.prototype || proto === null || Object.getOwnPropertyNames(proto).sort().join("\0") === object_proto_names; +} +function get_type(thing) { + return Object.prototype.toString.call(thing).slice(8, -1); +} +function get_escaped_char(char) { + switch (char) { + case '"': + return '\\"'; + case "<": + return "\\u003C"; + case "\\": + return "\\\\"; + case "\n": + return "\\n"; + case "\r": + return "\\r"; + case " ": + return "\\t"; + case "\b": + return "\\b"; + case "\f": + return "\\f"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + return char < " " ? `\\u${char.charCodeAt(0).toString(16).padStart(4, "0")}` : ""; + } +} +function stringify_string(str) { + let result = ""; + let last_pos = 0; + const len = str.length; + for (let i = 0; i < len; i += 1) { + const char = str[i]; + const replacement = get_escaped_char(char); + if (replacement) { + result += str.slice(last_pos, i) + replacement; + last_pos = i + 1; + } + } + return `"${last_pos === 0 ? str : result + str.slice(last_pos)}"`; +} +function enumerable_symbols(object) { + return Object.getOwnPropertySymbols(object).filter( + (symbol) => Object.getOwnPropertyDescriptor(object, symbol).enumerable + ); +} +var is_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/; +function stringify_key(key) { + return is_identifier.test(key) ? "." + key : "[" + JSON.stringify(key) + "]"; +} + +// node_modules/devalue/src/uneval.js +var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$"; +var unsafe_chars = /[<\b\f\n\r\t\0\u2028\u2029]/g; +var reserved = /^(?:do|if|in|for|int|let|new|try|var|byte|case|char|else|enum|goto|long|this|void|with|await|break|catch|class|const|final|float|short|super|throw|while|yield|delete|double|export|import|native|return|switch|throws|typeof|boolean|default|extends|finally|package|private|abstract|continue|debugger|function|volatile|interface|protected|transient|implements|instanceof|synchronized)$/; +function uneval(value, replacer) { + const counts = /* @__PURE__ */ new Map(); + const keys = []; + const custom = /* @__PURE__ */ new Map(); + function walk(thing) { + if (typeof thing === "function") { + throw new DevalueError(`Cannot stringify a function`, keys); + } + if (!is_primitive(thing)) { + if (counts.has(thing)) { + counts.set(thing, counts.get(thing) + 1); + return; + } + counts.set(thing, 1); + if (replacer) { + const str2 = replacer(thing); + if (typeof str2 === "string") { + custom.set(thing, str2); + return; + } + } + const type = get_type(thing); + switch (type) { + case "Number": + case "BigInt": + case "String": + case "Boolean": + case "Date": + case "RegExp": + return; + case "Array": + thing.forEach((value2, i) => { + keys.push(`[${i}]`); + walk(value2); + keys.pop(); + }); + break; + case "Set": + Array.from(thing).forEach(walk); + break; + case "Map": + for (const [key, value2] of thing) { + keys.push( + `.get(${is_primitive(key) ? stringify_primitive(key) : "..."})` + ); + walk(value2); + keys.pop(); + } + break; + case "Int8Array": + case "Uint8Array": + case "Uint8ClampedArray": + case "Int16Array": + case "Uint16Array": + case "Int32Array": + case "Uint32Array": + case "Float32Array": + case "Float64Array": + case "BigInt64Array": + case "BigUint64Array": + return; + case "ArrayBuffer": + return; + default: + if (!is_plain_object(thing)) { + throw new DevalueError( + `Cannot stringify arbitrary non-POJOs`, + keys + ); + } + if (enumerable_symbols(thing).length > 0) { + throw new DevalueError( + `Cannot stringify POJOs with symbolic keys`, + keys + ); + } + for (const key in thing) { + keys.push(stringify_key(key)); + walk(thing[key]); + keys.pop(); + } + } + } + } + walk(value); + const names = /* @__PURE__ */ new Map(); + Array.from(counts).filter((entry) => entry[1] > 1).sort((a, b) => b[1] - a[1]).forEach((entry, i) => { + names.set(entry[0], get_name(i)); + }); + function stringify2(thing) { + if (names.has(thing)) { + return names.get(thing); + } + if (is_primitive(thing)) { + return stringify_primitive(thing); + } + if (custom.has(thing)) { + return custom.get(thing); + } + const type = get_type(thing); + switch (type) { + case "Number": + case "String": + case "Boolean": + return `Object(${stringify2(thing.valueOf())})`; + case "RegExp": + return `new RegExp(${stringify_string(thing.source)}, "${thing.flags}")`; + case "Date": + return `new Date(${thing.getTime()})`; + case "Array": + const members = ( + /** @type {any[]} */ + thing.map( + (v, i) => i in thing ? stringify2(v) : "" + ) + ); + const tail = thing.length === 0 || thing.length - 1 in thing ? "" : ","; + return `[${members.join(",")}${tail}]`; + case "Set": + case "Map": + return `new ${type}([${Array.from(thing).map(stringify2).join(",")}])`; + case "Int8Array": + case "Uint8Array": + case "Uint8ClampedArray": + case "Int16Array": + case "Uint16Array": + case "Int32Array": + case "Uint32Array": + case "Float32Array": + case "Float64Array": + case "BigInt64Array": + case "BigUint64Array": { + const typedArray = thing; + return `new ${type}([${typedArray.toString()}])`; + } + case "ArrayBuffer": { + const ui8 = new Uint8Array(thing); + return `new Uint8Array([${ui8.toString()}]).buffer`; + } + default: + const obj = `{${Object.keys(thing).map((key) => `${safe_key(key)}:${stringify2(thing[key])}`).join(",")}}`; + const proto = Object.getPrototypeOf(thing); + if (proto === null) { + return Object.keys(thing).length > 0 ? `Object.assign(Object.create(null),${obj})` : `Object.create(null)`; + } + return obj; + } + } + const str = stringify2(value); + if (names.size) { + const params = []; + const statements = []; + const values = []; + names.forEach((name, thing) => { + params.push(name); + if (custom.has(thing)) { + values.push( + /** @type {string} */ + custom.get(thing) + ); + return; + } + if (is_primitive(thing)) { + values.push(stringify_primitive(thing)); + return; + } + const type = get_type(thing); + switch (type) { + case "Number": + case "String": + case "Boolean": + values.push(`Object(${stringify2(thing.valueOf())})`); + break; + case "RegExp": + values.push(thing.toString()); + break; + case "Date": + values.push(`new Date(${thing.getTime()})`); + break; + case "Array": + values.push(`Array(${thing.length})`); + thing.forEach((v, i) => { + statements.push(`${name}[${i}]=${stringify2(v)}`); + }); + break; + case "Set": + values.push(`new Set`); + statements.push( + `${name}.${Array.from(thing).map((v) => `add(${stringify2(v)})`).join(".")}` + ); + break; + case "Map": + values.push(`new Map`); + statements.push( + `${name}.${Array.from(thing).map(([k, v]) => `set(${stringify2(k)}, ${stringify2(v)})`).join(".")}` + ); + break; + default: + values.push( + Object.getPrototypeOf(thing) === null ? "Object.create(null)" : "{}" + ); + Object.keys(thing).forEach((key) => { + statements.push( + `${name}${safe_prop(key)}=${stringify2(thing[key])}` + ); + }); + } + }); + statements.push(`return ${str}`); + return `(function(${params.join(",")}){${statements.join( + ";" + )}}(${values.join(",")}))`; + } else { + return str; + } +} +function get_name(num) { + let name = ""; + do { + name = chars[num % chars.length] + name; + num = ~~(num / chars.length) - 1; + } while (num >= 0); + return reserved.test(name) ? `${name}0` : name; +} +function escape_unsafe_char(c) { + return escaped[c] || c; +} +function escape_unsafe_chars(str) { + return str.replace(unsafe_chars, escape_unsafe_char); +} +function safe_key(key) { + return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key) ? key : escape_unsafe_chars(JSON.stringify(key)); +} +function safe_prop(key) { + return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key) ? `.${key}` : `[${escape_unsafe_chars(JSON.stringify(key))}]`; +} +function stringify_primitive(thing) { + if (typeof thing === "string") return stringify_string(thing); + if (thing === void 0) return "void 0"; + if (thing === 0 && 1 / thing < 0) return "-0"; + const str = String(thing); + if (typeof thing === "number") return str.replace(/^(-)?0\./, "$1."); + if (typeof thing === "bigint") return thing + "n"; + return str; +} + +// node_modules/devalue/src/base64.js +function encode64(arraybuffer) { + const dv = new DataView(arraybuffer); + let binaryString = ""; + for (let i = 0; i < arraybuffer.byteLength; i++) { + binaryString += String.fromCharCode(dv.getUint8(i)); + } + return binaryToAscii(binaryString); +} +function decode64(string) { + const binaryString = asciiToBinary(string); + const arraybuffer = new ArrayBuffer(binaryString.length); + const dv = new DataView(arraybuffer); + for (let i = 0; i < arraybuffer.byteLength; i++) { + dv.setUint8(i, binaryString.charCodeAt(i)); + } + return arraybuffer; +} +var KEY_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +function asciiToBinary(data) { + if (data.length % 4 === 0) { + data = data.replace(/==?$/, ""); + } + let output = ""; + let buffer = 0; + let accumulatedBits = 0; + for (let i = 0; i < data.length; i++) { + buffer <<= 6; + buffer |= KEY_STRING.indexOf(data[i]); + accumulatedBits += 6; + if (accumulatedBits === 24) { + output += String.fromCharCode((buffer & 16711680) >> 16); + output += String.fromCharCode((buffer & 65280) >> 8); + output += String.fromCharCode(buffer & 255); + buffer = accumulatedBits = 0; + } + } + if (accumulatedBits === 12) { + buffer >>= 4; + output += String.fromCharCode(buffer); + } else if (accumulatedBits === 18) { + buffer >>= 2; + output += String.fromCharCode((buffer & 65280) >> 8); + output += String.fromCharCode(buffer & 255); + } + return output; +} +function binaryToAscii(str) { + let out = ""; + for (let i = 0; i < str.length; i += 3) { + const groupsOfSix = [void 0, void 0, void 0, void 0]; + groupsOfSix[0] = str.charCodeAt(i) >> 2; + groupsOfSix[1] = (str.charCodeAt(i) & 3) << 4; + if (str.length > i + 1) { + groupsOfSix[1] |= str.charCodeAt(i + 1) >> 4; + groupsOfSix[2] = (str.charCodeAt(i + 1) & 15) << 2; + } + if (str.length > i + 2) { + groupsOfSix[2] |= str.charCodeAt(i + 2) >> 6; + groupsOfSix[3] = str.charCodeAt(i + 2) & 63; + } + for (let j = 0; j < groupsOfSix.length; j++) { + if (typeof groupsOfSix[j] === "undefined") { + out += "="; + } else { + out += KEY_STRING[groupsOfSix[j]]; + } + } + } + return out; +} + +// node_modules/devalue/src/constants.js +var UNDEFINED = -1; +var HOLE = -2; +var NAN = -3; +var POSITIVE_INFINITY = -4; +var NEGATIVE_INFINITY = -5; +var NEGATIVE_ZERO = -6; + +// node_modules/devalue/src/parse.js +function parse(serialized, revivers) { + return unflatten(JSON.parse(serialized), revivers); +} +function unflatten(parsed, revivers) { + if (typeof parsed === "number") return hydrate(parsed, true); + if (!Array.isArray(parsed) || parsed.length === 0) { + throw new Error("Invalid input"); + } + const values = ( + /** @type {any[]} */ + parsed + ); + const hydrated = Array(values.length); + function hydrate(index, standalone = false) { + if (index === UNDEFINED) return void 0; + if (index === NAN) return NaN; + if (index === POSITIVE_INFINITY) return Infinity; + if (index === NEGATIVE_INFINITY) return -Infinity; + if (index === NEGATIVE_ZERO) return -0; + if (standalone) throw new Error(`Invalid input`); + if (index in hydrated) return hydrated[index]; + const value = values[index]; + if (!value || typeof value !== "object") { + hydrated[index] = value; + } else if (Array.isArray(value)) { + if (typeof value[0] === "string") { + const type = value[0]; + const reviver = revivers == null ? void 0 : revivers[type]; + if (reviver) { + return hydrated[index] = reviver(hydrate(value[1])); + } + switch (type) { + case "Date": + hydrated[index] = new Date(value[1]); + break; + case "Set": + const set = /* @__PURE__ */ new Set(); + hydrated[index] = set; + for (let i = 1; i < value.length; i += 1) { + set.add(hydrate(value[i])); + } + break; + case "Map": + const map = /* @__PURE__ */ new Map(); + hydrated[index] = map; + for (let i = 1; i < value.length; i += 2) { + map.set(hydrate(value[i]), hydrate(value[i + 1])); + } + break; + case "RegExp": + hydrated[index] = new RegExp(value[1], value[2]); + break; + case "Object": + hydrated[index] = Object(value[1]); + break; + case "BigInt": + hydrated[index] = BigInt(value[1]); + break; + case "null": + const obj = /* @__PURE__ */ Object.create(null); + hydrated[index] = obj; + for (let i = 1; i < value.length; i += 2) { + obj[value[i]] = hydrate(value[i + 1]); + } + break; + case "Int8Array": + case "Uint8Array": + case "Uint8ClampedArray": + case "Int16Array": + case "Uint16Array": + case "Int32Array": + case "Uint32Array": + case "Float32Array": + case "Float64Array": + case "BigInt64Array": + case "BigUint64Array": { + const TypedArrayConstructor = globalThis[type]; + const base64 = value[1]; + const arraybuffer = decode64(base64); + const typedArray = new TypedArrayConstructor(arraybuffer); + hydrated[index] = typedArray; + break; + } + case "ArrayBuffer": { + const base64 = value[1]; + const arraybuffer = decode64(base64); + hydrated[index] = arraybuffer; + break; + } + default: + throw new Error(`Unknown type ${type}`); + } + } else { + const array = new Array(value.length); + hydrated[index] = array; + for (let i = 0; i < value.length; i += 1) { + const n = value[i]; + if (n === HOLE) continue; + array[i] = hydrate(n); + } + } + } else { + const object = {}; + hydrated[index] = object; + for (const key in value) { + const n = value[key]; + object[key] = hydrate(n); + } + } + return hydrated[index]; + } + return hydrate(0); +} + +// node_modules/devalue/src/stringify.js +function stringify(value, reducers) { + const stringified = []; + const indexes = /* @__PURE__ */ new Map(); + const custom = []; + if (reducers) { + for (const key of Object.getOwnPropertyNames(reducers)) { + custom.push({ key, fn: reducers[key] }); + } + } + const keys = []; + let p = 0; + function flatten(thing) { + if (typeof thing === "function") { + throw new DevalueError(`Cannot stringify a function`, keys); + } + if (indexes.has(thing)) return indexes.get(thing); + if (thing === void 0) return UNDEFINED; + if (Number.isNaN(thing)) return NAN; + if (thing === Infinity) return POSITIVE_INFINITY; + if (thing === -Infinity) return NEGATIVE_INFINITY; + if (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO; + const index2 = p++; + indexes.set(thing, index2); + for (const { key, fn } of custom) { + const value2 = fn(thing); + if (value2) { + stringified[index2] = `["${key}",${flatten(value2)}]`; + return index2; + } + } + let str = ""; + if (is_primitive(thing)) { + str = stringify_primitive2(thing); + } else { + const type = get_type(thing); + switch (type) { + case "Number": + case "String": + case "Boolean": + str = `["Object",${stringify_primitive2(thing)}]`; + break; + case "BigInt": + str = `["BigInt",${thing}]`; + break; + case "Date": + const valid = !isNaN(thing.getDate()); + str = `["Date","${valid ? thing.toISOString() : ""}"]`; + break; + case "RegExp": + const { source, flags } = thing; + str = flags ? `["RegExp",${stringify_string(source)},"${flags}"]` : `["RegExp",${stringify_string(source)}]`; + break; + case "Array": + str = "["; + for (let i = 0; i < thing.length; i += 1) { + if (i > 0) str += ","; + if (i in thing) { + keys.push(`[${i}]`); + str += flatten(thing[i]); + keys.pop(); + } else { + str += HOLE; + } + } + str += "]"; + break; + case "Set": + str = '["Set"'; + for (const value2 of thing) { + str += `,${flatten(value2)}`; + } + str += "]"; + break; + case "Map": + str = '["Map"'; + for (const [key, value2] of thing) { + keys.push( + `.get(${is_primitive(key) ? stringify_primitive2(key) : "..."})` + ); + str += `,${flatten(key)},${flatten(value2)}`; + keys.pop(); + } + str += "]"; + break; + case "Int8Array": + case "Uint8Array": + case "Uint8ClampedArray": + case "Int16Array": + case "Uint16Array": + case "Int32Array": + case "Uint32Array": + case "Float32Array": + case "Float64Array": + case "BigInt64Array": + case "BigUint64Array": { + const typedArray = thing; + const base64 = encode64(typedArray.buffer); + str = '["' + type + '","' + base64 + '"]'; + break; + } + case "ArrayBuffer": { + const arraybuffer = thing; + const base64 = encode64(arraybuffer); + str = `["ArrayBuffer","${base64}"]`; + break; + } + default: + if (!is_plain_object(thing)) { + throw new DevalueError( + `Cannot stringify arbitrary non-POJOs`, + keys + ); + } + if (enumerable_symbols(thing).length > 0) { + throw new DevalueError( + `Cannot stringify POJOs with symbolic keys`, + keys + ); + } + if (Object.getPrototypeOf(thing) === null) { + str = '["null"'; + for (const key in thing) { + keys.push(stringify_key(key)); + str += `,${stringify_string(key)},${flatten(thing[key])}`; + keys.pop(); + } + str += "]"; + } else { + str = "{"; + let started = false; + for (const key in thing) { + if (started) str += ","; + started = true; + keys.push(stringify_key(key)); + str += `${stringify_string(key)}:${flatten(thing[key])}`; + keys.pop(); + } + str += "}"; + } + } + } + stringified[index2] = str; + return index2; + } + const index = flatten(value); + if (index < 0) return `${index}`; + return `[${stringified.join(",")}]`; +} +function stringify_primitive2(thing) { + const type = typeof thing; + if (type === "string") return stringify_string(thing); + if (thing instanceof String) return stringify_string(thing.toString()); + if (thing === void 0) return UNDEFINED.toString(); + if (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO.toString(); + if (type === "bigint") return `["BigInt","${thing}"]`; + return String(thing); +} +export { + parse, + stringify, + uneval, + unflatten +}; +//# sourceMappingURL=devalue.js.map diff --git a/node_modules/.vite/deps/devalue.js.map b/node_modules/.vite/deps/devalue.js.map new file mode 100644 index 0000000..a0293f0 --- /dev/null +++ b/node_modules/.vite/deps/devalue.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../devalue/src/utils.js", "../../devalue/src/uneval.js", "../../devalue/src/base64.js", "../../devalue/src/constants.js", "../../devalue/src/parse.js", "../../devalue/src/stringify.js"], + "sourcesContent": ["/** @type {Record} */\nexport const escaped = {\n\t'<': '\\\\u003C',\n\t'\\\\': '\\\\\\\\',\n\t'\\b': '\\\\b',\n\t'\\f': '\\\\f',\n\t'\\n': '\\\\n',\n\t'\\r': '\\\\r',\n\t'\\t': '\\\\t',\n\t'\\u2028': '\\\\u2028',\n\t'\\u2029': '\\\\u2029'\n};\n\nexport class DevalueError extends Error {\n\t/**\n\t * @param {string} message\n\t * @param {string[]} keys\n\t */\n\tconstructor(message, keys) {\n\t\tsuper(message);\n\t\tthis.name = 'DevalueError';\n\t\tthis.path = keys.join('');\n\t}\n}\n\n/** @param {any} thing */\nexport function is_primitive(thing) {\n\treturn Object(thing) !== thing;\n}\n\nconst object_proto_names = /* @__PURE__ */ Object.getOwnPropertyNames(\n\tObject.prototype\n)\n\t.sort()\n\t.join('\\0');\n\n/** @param {any} thing */\nexport function is_plain_object(thing) {\n\tconst proto = Object.getPrototypeOf(thing);\n\n\treturn (\n\t\tproto === Object.prototype ||\n\t\tproto === null ||\n\t\tObject.getOwnPropertyNames(proto).sort().join('\\0') === object_proto_names\n\t);\n}\n\n/** @param {any} thing */\nexport function get_type(thing) {\n\treturn Object.prototype.toString.call(thing).slice(8, -1);\n}\n\n/** @param {string} char */\nfunction get_escaped_char(char) {\n\tswitch (char) {\n\t\tcase '\"':\n\t\t\treturn '\\\\\"';\n\t\tcase '<':\n\t\t\treturn '\\\\u003C';\n\t\tcase '\\\\':\n\t\t\treturn '\\\\\\\\';\n\t\tcase '\\n':\n\t\t\treturn '\\\\n';\n\t\tcase '\\r':\n\t\t\treturn '\\\\r';\n\t\tcase '\\t':\n\t\t\treturn '\\\\t';\n\t\tcase '\\b':\n\t\t\treturn '\\\\b';\n\t\tcase '\\f':\n\t\t\treturn '\\\\f';\n\t\tcase '\\u2028':\n\t\t\treturn '\\\\u2028';\n\t\tcase '\\u2029':\n\t\t\treturn '\\\\u2029';\n\t\tdefault:\n\t\t\treturn char < ' '\n\t\t\t\t? `\\\\u${char.charCodeAt(0).toString(16).padStart(4, '0')}`\n\t\t\t\t: '';\n\t}\n}\n\n/** @param {string} str */\nexport function stringify_string(str) {\n\tlet result = '';\n\tlet last_pos = 0;\n\tconst len = str.length;\n\n\tfor (let i = 0; i < len; i += 1) {\n\t\tconst char = str[i];\n\t\tconst replacement = get_escaped_char(char);\n\t\tif (replacement) {\n\t\t\tresult += str.slice(last_pos, i) + replacement;\n\t\t\tlast_pos = i + 1;\n\t\t}\n\t}\n\n\treturn `\"${last_pos === 0 ? str : result + str.slice(last_pos)}\"`;\n}\n\n/** @param {Record} object */\nexport function enumerable_symbols(object) {\n\treturn Object.getOwnPropertySymbols(object).filter(\n\t\t(symbol) => Object.getOwnPropertyDescriptor(object, symbol).enumerable\n\t);\n}\n\nconst is_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/** @param {string} key */\nexport function stringify_key(key) {\n\treturn is_identifier.test(key) ? '.' + key : '[' + JSON.stringify(key) + ']';\n}\n", "import {\n\tDevalueError,\n\tenumerable_symbols,\n\tescaped,\n\tget_type,\n\tis_plain_object,\n\tis_primitive,\n\tstringify_key,\n\tstringify_string\n} from './utils.js';\n\nconst chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$';\nconst unsafe_chars = /[<\\b\\f\\n\\r\\t\\0\\u2028\\u2029]/g;\nconst reserved =\n\t/^(?:do|if|in|for|int|let|new|try|var|byte|case|char|else|enum|goto|long|this|void|with|await|break|catch|class|const|final|float|short|super|throw|while|yield|delete|double|export|import|native|return|switch|throws|typeof|boolean|default|extends|finally|package|private|abstract|continue|debugger|function|volatile|interface|protected|transient|implements|instanceof|synchronized)$/;\n\n/**\n * Turn a value into the JavaScript that creates an equivalent value\n * @param {any} value\n * @param {(value: any) => string | void} [replacer]\n */\nexport function uneval(value, replacer) {\n\tconst counts = new Map();\n\n\t/** @type {string[]} */\n\tconst keys = [];\n\n\tconst custom = new Map();\n\n\t/** @param {any} thing */\n\tfunction walk(thing) {\n\t\tif (typeof thing === 'function') {\n\t\t\tthrow new DevalueError(`Cannot stringify a function`, keys);\n\t\t}\n\n\t\tif (!is_primitive(thing)) {\n\t\t\tif (counts.has(thing)) {\n\t\t\t\tcounts.set(thing, counts.get(thing) + 1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcounts.set(thing, 1);\n\n\t\t\tif (replacer) {\n\t\t\t\tconst str = replacer(thing);\n\n\t\t\t\tif (typeof str === 'string') {\n\t\t\t\t\tcustom.set(thing, str);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst type = get_type(thing);\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'Number':\n\t\t\t\tcase 'BigInt':\n\t\t\t\tcase 'String':\n\t\t\t\tcase 'Boolean':\n\t\t\t\tcase 'Date':\n\t\t\t\tcase 'RegExp':\n\t\t\t\t\treturn;\n\n\t\t\t\tcase 'Array':\n\t\t\t\t\t/** @type {any[]} */ (thing).forEach((value, i) => {\n\t\t\t\t\t\tkeys.push(`[${i}]`);\n\t\t\t\t\t\twalk(value);\n\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Set':\n\t\t\t\t\tArray.from(thing).forEach(walk);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Map':\n\t\t\t\t\tfor (const [key, value] of thing) {\n\t\t\t\t\t\tkeys.push(\n\t\t\t\t\t\t\t`.get(${is_primitive(key) ? stringify_primitive(key) : '...'})`\n\t\t\t\t\t\t);\n\t\t\t\t\t\twalk(value);\n\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"Int8Array\":\n\t\t\t\tcase \"Uint8Array\":\n\t\t\t\tcase \"Uint8ClampedArray\":\n\t\t\t\tcase \"Int16Array\":\n\t\t\t\tcase \"Uint16Array\":\n\t\t\t\tcase \"Int32Array\":\n\t\t\t\tcase \"Uint32Array\":\n\t\t\t\tcase \"Float32Array\":\n\t\t\t\tcase \"Float64Array\":\n\t\t\t\tcase \"BigInt64Array\":\n\t\t\t\tcase \"BigUint64Array\":\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\tcase \"ArrayBuffer\":\n\t\t\t\t\treturn;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (!is_plain_object(thing)) {\n\t\t\t\t\t\tthrow new DevalueError(\n\t\t\t\t\t\t\t`Cannot stringify arbitrary non-POJOs`,\n\t\t\t\t\t\t\tkeys\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (enumerable_symbols(thing).length > 0) {\n\t\t\t\t\t\tthrow new DevalueError(\n\t\t\t\t\t\t\t`Cannot stringify POJOs with symbolic keys`,\n\t\t\t\t\t\t\tkeys\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const key in thing) {\n\t\t\t\t\t\tkeys.push(stringify_key(key));\n\t\t\t\t\t\twalk(thing[key]);\n\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\twalk(value);\n\n\tconst names = new Map();\n\n\tArray.from(counts)\n\t\t.filter((entry) => entry[1] > 1)\n\t\t.sort((a, b) => b[1] - a[1])\n\t\t.forEach((entry, i) => {\n\t\t\tnames.set(entry[0], get_name(i));\n\t\t});\n\n\t/**\n\t * @param {any} thing\n\t * @returns {string}\n\t */\n\tfunction stringify(thing) {\n\t\tif (names.has(thing)) {\n\t\t\treturn names.get(thing);\n\t\t}\n\n\t\tif (is_primitive(thing)) {\n\t\t\treturn stringify_primitive(thing);\n\t\t}\n\n\t\tif (custom.has(thing)) {\n\t\t\treturn custom.get(thing);\n\t\t}\n\n\t\tconst type = get_type(thing);\n\n\t\tswitch (type) {\n\t\t\tcase 'Number':\n\t\t\tcase 'String':\n\t\t\tcase 'Boolean':\n\t\t\t\treturn `Object(${stringify(thing.valueOf())})`;\n\n\t\t\tcase 'RegExp':\n\t\t\t\treturn `new RegExp(${stringify_string(thing.source)}, \"${\n\t\t\t\t\tthing.flags\n\t\t\t\t}\")`;\n\n\t\t\tcase 'Date':\n\t\t\t\treturn `new Date(${thing.getTime()})`;\n\n\t\t\tcase 'Array':\n\t\t\t\tconst members = /** @type {any[]} */ (thing).map((v, i) =>\n\t\t\t\t\ti in thing ? stringify(v) : ''\n\t\t\t\t);\n\t\t\t\tconst tail = thing.length === 0 || thing.length - 1 in thing ? '' : ',';\n\t\t\t\treturn `[${members.join(',')}${tail}]`;\n\n\t\t\tcase 'Set':\n\t\t\tcase 'Map':\n\t\t\t\treturn `new ${type}([${Array.from(thing).map(stringify).join(',')}])`;\n\t\t\t\n\t\t\tcase \"Int8Array\":\n\t\t\tcase \"Uint8Array\":\n\t\t\tcase \"Uint8ClampedArray\":\n\t\t\tcase \"Int16Array\":\n\t\t\tcase \"Uint16Array\":\n\t\t\tcase \"Int32Array\":\n\t\t\tcase \"Uint32Array\":\n\t\t\tcase \"Float32Array\":\n\t\t\tcase \"Float64Array\":\n\t\t\tcase \"BigInt64Array\":\n\t\t\tcase \"BigUint64Array\": {\n\t\t\t\t/** @type {import(\"./types.js\").TypedArray} */\n\t\t\t\tconst typedArray = thing;\n\t\t\t\treturn `new ${type}([${typedArray.toString()}])`;\n\t\t\t}\n\t\t\t\t\n\t\t\tcase \"ArrayBuffer\": {\n\t\t\t\tconst ui8 = new Uint8Array(thing);\n\t\t\t\treturn `new Uint8Array([${ui8.toString()}]).buffer`;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tconst obj = `{${Object.keys(thing)\n\t\t\t\t\t.map((key) => `${safe_key(key)}:${stringify(thing[key])}`)\n\t\t\t\t\t.join(',')}}`;\n\t\t\t\tconst proto = Object.getPrototypeOf(thing);\n\t\t\t\tif (proto === null) {\n\t\t\t\t\treturn Object.keys(thing).length > 0\n\t\t\t\t\t\t? `Object.assign(Object.create(null),${obj})`\n\t\t\t\t\t\t: `Object.create(null)`;\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\t\t}\n\t}\n\n\tconst str = stringify(value);\n\n\tif (names.size) {\n\t\t/** @type {string[]} */\n\t\tconst params = [];\n\n\t\t/** @type {string[]} */\n\t\tconst statements = [];\n\n\t\t/** @type {string[]} */\n\t\tconst values = [];\n\n\t\tnames.forEach((name, thing) => {\n\t\t\tparams.push(name);\n\n\t\t\tif (custom.has(thing)) {\n\t\t\t\tvalues.push(/** @type {string} */ (custom.get(thing)));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (is_primitive(thing)) {\n\t\t\t\tvalues.push(stringify_primitive(thing));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst type = get_type(thing);\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'Number':\n\t\t\t\tcase 'String':\n\t\t\t\tcase 'Boolean':\n\t\t\t\t\tvalues.push(`Object(${stringify(thing.valueOf())})`);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RegExp':\n\t\t\t\t\tvalues.push(thing.toString());\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Date':\n\t\t\t\t\tvalues.push(`new Date(${thing.getTime()})`);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Array':\n\t\t\t\t\tvalues.push(`Array(${thing.length})`);\n\t\t\t\t\t/** @type {any[]} */ (thing).forEach((v, i) => {\n\t\t\t\t\t\tstatements.push(`${name}[${i}]=${stringify(v)}`);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Set':\n\t\t\t\t\tvalues.push(`new Set`);\n\t\t\t\t\tstatements.push(\n\t\t\t\t\t\t`${name}.${Array.from(thing)\n\t\t\t\t\t\t\t.map((v) => `add(${stringify(v)})`)\n\t\t\t\t\t\t\t.join('.')}`\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Map':\n\t\t\t\t\tvalues.push(`new Map`);\n\t\t\t\t\tstatements.push(\n\t\t\t\t\t\t`${name}.${Array.from(thing)\n\t\t\t\t\t\t\t.map(([k, v]) => `set(${stringify(k)}, ${stringify(v)})`)\n\t\t\t\t\t\t\t.join('.')}`\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tvalues.push(\n\t\t\t\t\t\tObject.getPrototypeOf(thing) === null ? 'Object.create(null)' : '{}'\n\t\t\t\t\t);\n\t\t\t\t\tObject.keys(thing).forEach((key) => {\n\t\t\t\t\t\tstatements.push(\n\t\t\t\t\t\t\t`${name}${safe_prop(key)}=${stringify(thing[key])}`\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tstatements.push(`return ${str}`);\n\n\t\treturn `(function(${params.join(',')}){${statements.join(\n\t\t\t';'\n\t\t)}}(${values.join(',')}))`;\n\t} else {\n\t\treturn str;\n\t}\n}\n\n/** @param {number} num */\nfunction get_name(num) {\n\tlet name = '';\n\n\tdo {\n\t\tname = chars[num % chars.length] + name;\n\t\tnum = ~~(num / chars.length) - 1;\n\t} while (num >= 0);\n\n\treturn reserved.test(name) ? `${name}0` : name;\n}\n\n/** @param {string} c */\nfunction escape_unsafe_char(c) {\n\treturn escaped[c] || c;\n}\n\n/** @param {string} str */\nfunction escape_unsafe_chars(str) {\n\treturn str.replace(unsafe_chars, escape_unsafe_char);\n}\n\n/** @param {string} key */\nfunction safe_key(key) {\n\treturn /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key)\n\t\t? key\n\t\t: escape_unsafe_chars(JSON.stringify(key));\n}\n\n/** @param {string} key */\nfunction safe_prop(key) {\n\treturn /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key)\n\t\t? `.${key}`\n\t\t: `[${escape_unsafe_chars(JSON.stringify(key))}]`;\n}\n\n/** @param {any} thing */\nfunction stringify_primitive(thing) {\n\tif (typeof thing === 'string') return stringify_string(thing);\n\tif (thing === void 0) return 'void 0';\n\tif (thing === 0 && 1 / thing < 0) return '-0';\n\tconst str = String(thing);\n\tif (typeof thing === 'number') return str.replace(/^(-)?0\\./, '$1.');\n\tif (typeof thing === 'bigint') return thing + 'n';\n\treturn str;\n}\n", "/**\n * Base64 Encodes an arraybuffer\n * @param {ArrayBuffer} arraybuffer\n * @returns {string}\n */\nexport function encode64(arraybuffer) {\n const dv = new DataView(arraybuffer);\n let binaryString = \"\";\n\n for (let i = 0; i < arraybuffer.byteLength; i++) {\n binaryString += String.fromCharCode(dv.getUint8(i));\n }\n\n return binaryToAscii(binaryString);\n}\n\n/**\n * Decodes a base64 string into an arraybuffer\n * @param {string} string\n * @returns {ArrayBuffer}\n */\nexport function decode64(string) {\n const binaryString = asciiToBinary(string);\n const arraybuffer = new ArrayBuffer(binaryString.length);\n const dv = new DataView(arraybuffer);\n\n for (let i = 0; i < arraybuffer.byteLength; i++) {\n dv.setUint8(i, binaryString.charCodeAt(i));\n }\n\n return arraybuffer;\n}\n\nconst KEY_STRING =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n/**\n * Substitute for atob since it's deprecated in node.\n * Does not do any input validation.\n *\n * @see https://github.com/jsdom/abab/blob/master/lib/atob.js\n *\n * @param {string} data\n * @returns {string}\n */\nfunction asciiToBinary(data) {\n if (data.length % 4 === 0) {\n data = data.replace(/==?$/, \"\");\n }\n\n let output = \"\";\n let buffer = 0;\n let accumulatedBits = 0;\n\n for (let i = 0; i < data.length; i++) {\n buffer <<= 6;\n buffer |= KEY_STRING.indexOf(data[i]);\n accumulatedBits += 6;\n if (accumulatedBits === 24) {\n output += String.fromCharCode((buffer & 0xff0000) >> 16);\n output += String.fromCharCode((buffer & 0xff00) >> 8);\n output += String.fromCharCode(buffer & 0xff);\n buffer = accumulatedBits = 0;\n }\n }\n if (accumulatedBits === 12) {\n buffer >>= 4;\n output += String.fromCharCode(buffer);\n } else if (accumulatedBits === 18) {\n buffer >>= 2;\n output += String.fromCharCode((buffer & 0xff00) >> 8);\n output += String.fromCharCode(buffer & 0xff);\n }\n return output;\n}\n\n/**\n * Substitute for btoa since it's deprecated in node.\n * Does not do any input validation.\n *\n * @see https://github.com/jsdom/abab/blob/master/lib/btoa.js\n *\n * @param {string} str\n * @returns {string}\n */\nfunction binaryToAscii(str) {\n let out = \"\";\n for (let i = 0; i < str.length; i += 3) {\n /** @type {[number, number, number, number]} */\n const groupsOfSix = [undefined, undefined, undefined, undefined];\n groupsOfSix[0] = str.charCodeAt(i) >> 2;\n groupsOfSix[1] = (str.charCodeAt(i) & 0x03) << 4;\n if (str.length > i + 1) {\n groupsOfSix[1] |= str.charCodeAt(i + 1) >> 4;\n groupsOfSix[2] = (str.charCodeAt(i + 1) & 0x0f) << 2;\n }\n if (str.length > i + 2) {\n groupsOfSix[2] |= str.charCodeAt(i + 2) >> 6;\n groupsOfSix[3] = str.charCodeAt(i + 2) & 0x3f;\n }\n for (let j = 0; j < groupsOfSix.length; j++) {\n if (typeof groupsOfSix[j] === \"undefined\") {\n out += \"=\";\n } else {\n out += KEY_STRING[groupsOfSix[j]];\n }\n }\n }\n return out;\n}\n", "export const UNDEFINED = -1;\nexport const HOLE = -2;\nexport const NAN = -3;\nexport const POSITIVE_INFINITY = -4;\nexport const NEGATIVE_INFINITY = -5;\nexport const NEGATIVE_ZERO = -6;\n", "import { decode64 } from './base64.js';\nimport {\n\tHOLE,\n\tNAN,\n\tNEGATIVE_INFINITY,\n\tNEGATIVE_ZERO,\n\tPOSITIVE_INFINITY,\n\tUNDEFINED\n} from './constants.js';\n\n/**\n * Revive a value serialized with `devalue.stringify`\n * @param {string} serialized\n * @param {Record any>} [revivers]\n */\nexport function parse(serialized, revivers) {\n\treturn unflatten(JSON.parse(serialized), revivers);\n}\n\n/**\n * Revive a value flattened with `devalue.stringify`\n * @param {number | any[]} parsed\n * @param {Record any>} [revivers]\n */\nexport function unflatten(parsed, revivers) {\n\tif (typeof parsed === 'number') return hydrate(parsed, true);\n\n\tif (!Array.isArray(parsed) || parsed.length === 0) {\n\t\tthrow new Error('Invalid input');\n\t}\n\n\tconst values = /** @type {any[]} */ (parsed);\n\n\tconst hydrated = Array(values.length);\n\n\t/**\n\t * @param {number} index\n\t * @returns {any}\n\t */\n\tfunction hydrate(index, standalone = false) {\n\t\tif (index === UNDEFINED) return undefined;\n\t\tif (index === NAN) return NaN;\n\t\tif (index === POSITIVE_INFINITY) return Infinity;\n\t\tif (index === NEGATIVE_INFINITY) return -Infinity;\n\t\tif (index === NEGATIVE_ZERO) return -0;\n\n\t\tif (standalone) throw new Error(`Invalid input`);\n\n\t\tif (index in hydrated) return hydrated[index];\n\n\t\tconst value = values[index];\n\n\t\tif (!value || typeof value !== 'object') {\n\t\t\thydrated[index] = value;\n\t\t} else if (Array.isArray(value)) {\n\t\t\tif (typeof value[0] === 'string') {\n\t\t\t\tconst type = value[0];\n\n\t\t\t\tconst reviver = revivers?.[type];\n\t\t\t\tif (reviver) {\n\t\t\t\t\treturn (hydrated[index] = reviver(hydrate(value[1])));\n\t\t\t\t}\n\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase 'Date':\n\t\t\t\t\t\thydrated[index] = new Date(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Set':\n\t\t\t\t\t\tconst set = new Set();\n\t\t\t\t\t\thydrated[index] = set;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 1) {\n\t\t\t\t\t\t\tset.add(hydrate(value[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Map':\n\t\t\t\t\t\tconst map = new Map();\n\t\t\t\t\t\thydrated[index] = map;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 2) {\n\t\t\t\t\t\t\tmap.set(hydrate(value[i]), hydrate(value[i + 1]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RegExp':\n\t\t\t\t\t\thydrated[index] = new RegExp(value[1], value[2]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\thydrated[index] = Object(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BigInt':\n\t\t\t\t\t\thydrated[index] = BigInt(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'null':\n\t\t\t\t\t\tconst obj = Object.create(null);\n\t\t\t\t\t\thydrated[index] = obj;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 2) {\n\t\t\t\t\t\t\tobj[value[i]] = hydrate(value[i + 1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n case \"Int8Array\":\n case \"Uint8Array\":\n case \"Uint8ClampedArray\":\n case \"Int16Array\":\n case \"Uint16Array\":\n case \"Int32Array\":\n case \"Uint32Array\":\n case \"Float32Array\":\n case \"Float64Array\":\n case \"BigInt64Array\":\n case \"BigUint64Array\": {\n const TypedArrayConstructor = globalThis[type];\n const base64 = value[1];\n const arraybuffer = decode64(base64);\n const typedArray = new TypedArrayConstructor(arraybuffer);\n hydrated[index] = typedArray;\n break;\n }\n\n case \"ArrayBuffer\": {\n const base64 = value[1];\n const arraybuffer = decode64(base64);\n hydrated[index] = arraybuffer;\n break;\n }\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(`Unknown type ${type}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst array = new Array(value.length);\n\t\t\t\thydrated[index] = array;\n\n\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\tconst n = value[i];\n\t\t\t\t\tif (n === HOLE) continue;\n\n\t\t\t\t\tarray[i] = hydrate(n);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t/** @type {Record} */\n\t\t\tconst object = {};\n\t\t\thydrated[index] = object;\n\n\t\t\tfor (const key in value) {\n\t\t\t\tconst n = value[key];\n\t\t\t\tobject[key] = hydrate(n);\n\t\t\t}\n\t\t}\n\n\t\treturn hydrated[index];\n\t}\n\n\treturn hydrate(0);\n}\n", "import {\n\tDevalueError,\n\tenumerable_symbols,\n\tget_type,\n\tis_plain_object,\n\tis_primitive,\n\tstringify_key,\n\tstringify_string\n} from './utils.js';\nimport {\n\tHOLE,\n\tNAN,\n\tNEGATIVE_INFINITY,\n\tNEGATIVE_ZERO,\n\tPOSITIVE_INFINITY,\n\tUNDEFINED\n} from './constants.js';\nimport { encode64 } from './base64.js';\n\n/**\n * Turn a value into a JSON string that can be parsed with `devalue.parse`\n * @param {any} value\n * @param {Record any>} [reducers]\n */\nexport function stringify(value, reducers) {\n\t/** @type {any[]} */\n\tconst stringified = [];\n\n\t/** @type {Map} */\n\tconst indexes = new Map();\n\n\t/** @type {Array<{ key: string, fn: (value: any) => any }>} */\n\tconst custom = [];\n\tif (reducers) {\n\t\tfor (const key of Object.getOwnPropertyNames(reducers)) {\n\t\t\tcustom.push({ key, fn: reducers[key] });\n\t\t}\n\t}\n\n\t/** @type {string[]} */\n\tconst keys = [];\n\n\tlet p = 0;\n\n\t/** @param {any} thing */\n\tfunction flatten(thing) {\n\t\tif (typeof thing === 'function') {\n\t\t\tthrow new DevalueError(`Cannot stringify a function`, keys);\n\t\t}\n\n\t\tif (indexes.has(thing)) return indexes.get(thing);\n\n\t\tif (thing === undefined) return UNDEFINED;\n\t\tif (Number.isNaN(thing)) return NAN;\n\t\tif (thing === Infinity) return POSITIVE_INFINITY;\n\t\tif (thing === -Infinity) return NEGATIVE_INFINITY;\n\t\tif (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO;\n\n\t\tconst index = p++;\n\t\tindexes.set(thing, index);\n\n\t\tfor (const { key, fn } of custom) {\n\t\t\tconst value = fn(thing);\n\t\t\tif (value) {\n\t\t\t\tstringified[index] = `[\"${key}\",${flatten(value)}]`;\n\t\t\t\treturn index;\n\t\t\t}\n\t\t}\n\n\t\tlet str = '';\n\n\t\tif (is_primitive(thing)) {\n\t\t\tstr = stringify_primitive(thing);\n\t\t} else {\n\t\t\tconst type = get_type(thing);\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'Number':\n\t\t\t\tcase 'String':\n\t\t\t\tcase 'Boolean':\n\t\t\t\t\tstr = `[\"Object\",${stringify_primitive(thing)}]`;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'BigInt':\n\t\t\t\t\tstr = `[\"BigInt\",${thing}]`;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Date':\n\t\t\t\t\tconst valid = !isNaN(thing.getDate());\n\t\t\t\t\tstr = `[\"Date\",\"${valid ? thing.toISOString() : ''}\"]`;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RegExp':\n\t\t\t\t\tconst { source, flags } = thing;\n\t\t\t\t\tstr = flags\n\t\t\t\t\t\t? `[\"RegExp\",${stringify_string(source)},\"${flags}\"]`\n\t\t\t\t\t\t: `[\"RegExp\",${stringify_string(source)}]`;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Array':\n\t\t\t\t\tstr = '[';\n\n\t\t\t\t\tfor (let i = 0; i < thing.length; i += 1) {\n\t\t\t\t\t\tif (i > 0) str += ',';\n\n\t\t\t\t\t\tif (i in thing) {\n\t\t\t\t\t\t\tkeys.push(`[${i}]`);\n\t\t\t\t\t\t\tstr += flatten(thing[i]);\n\t\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstr += HOLE;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tstr += ']';\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Set':\n\t\t\t\t\tstr = '[\"Set\"';\n\n\t\t\t\t\tfor (const value of thing) {\n\t\t\t\t\t\tstr += `,${flatten(value)}`;\n\t\t\t\t\t}\n\n\t\t\t\t\tstr += ']';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Map':\n\t\t\t\t\tstr = '[\"Map\"';\n\n\t\t\t\t\tfor (const [key, value] of thing) {\n\t\t\t\t\t\tkeys.push(\n\t\t\t\t\t\t\t`.get(${is_primitive(key) ? stringify_primitive(key) : '...'})`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstr += `,${flatten(key)},${flatten(value)}`;\n\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t}\n\n\t\t\t\t\tstr += ']';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Int8Array\":\n\t\t\t\tcase \"Uint8Array\":\n\t\t\t\tcase \"Uint8ClampedArray\":\n\t\t\t\tcase \"Int16Array\":\n\t\t\t\tcase \"Uint16Array\":\n\t\t\t\tcase \"Int32Array\":\n\t\t\t\tcase \"Uint32Array\":\n\t\t\t\tcase \"Float32Array\":\n\t\t\t\tcase \"Float64Array\":\n\t\t\t\tcase \"BigInt64Array\":\n\t\t\t\tcase \"BigUint64Array\": {\n\t\t\t\t\t/** @type {import(\"./types.js\").TypedArray} */\n\t\t\t\t\tconst typedArray = thing;\n\t\t\t\t\tconst base64 = encode64(typedArray.buffer);\n\t\t\t\t\tstr = '[\"' + type + '\",\"' + base64 + '\"]';\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\tcase \"ArrayBuffer\": {\n\t\t\t\t\t/** @type {ArrayBuffer} */\n\t\t\t\t\tconst arraybuffer = thing;\n\t\t\t\t\tconst base64 = encode64(arraybuffer);\n\t\t\t\t\t\n\t\t\t\t\tstr = `[\"ArrayBuffer\",\"${base64}\"]`;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tif (!is_plain_object(thing)) {\n\t\t\t\t\t\tthrow new DevalueError(\n\t\t\t\t\t\t\t`Cannot stringify arbitrary non-POJOs`,\n\t\t\t\t\t\t\tkeys\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (enumerable_symbols(thing).length > 0) {\n\t\t\t\t\t\tthrow new DevalueError(\n\t\t\t\t\t\t\t`Cannot stringify POJOs with symbolic keys`,\n\t\t\t\t\t\t\tkeys\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Object.getPrototypeOf(thing) === null) {\n\t\t\t\t\t\tstr = '[\"null\"';\n\t\t\t\t\t\tfor (const key in thing) {\n\t\t\t\t\t\t\tkeys.push(stringify_key(key));\n\t\t\t\t\t\t\tstr += `,${stringify_string(key)},${flatten(thing[key])}`;\n\t\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstr += ']';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstr = '{';\n\t\t\t\t\t\tlet started = false;\n\t\t\t\t\t\tfor (const key in thing) {\n\t\t\t\t\t\t\tif (started) str += ',';\n\t\t\t\t\t\t\tstarted = true;\n\t\t\t\t\t\t\tkeys.push(stringify_key(key));\n\t\t\t\t\t\t\tstr += `${stringify_string(key)}:${flatten(thing[key])}`;\n\t\t\t\t\t\t\tkeys.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstr += '}';\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstringified[index] = str;\n\t\treturn index;\n\t}\n\n\tconst index = flatten(value);\n\n\t// special case — value is represented as a negative index\n\tif (index < 0) return `${index}`;\n\n\treturn `[${stringified.join(',')}]`;\n}\n\n/**\n * @param {any} thing\n * @returns {string}\n */\nfunction stringify_primitive(thing) {\n\tconst type = typeof thing;\n\tif (type === 'string') return stringify_string(thing);\n\tif (thing instanceof String) return stringify_string(thing.toString());\n\tif (thing === void 0) return UNDEFINED.toString();\n\tif (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO.toString();\n\tif (type === 'bigint') return `[\"BigInt\",\"${thing}\"]`;\n\treturn String(thing);\n}\n"], + "mappings": "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", + "names": ["str", "value", "stringify", "index", "value", "stringify_primitive"] +} diff --git a/node_modules/.vite/deps/svelte.js b/node_modules/.vite/deps/svelte.js index 8c8ca14..d17669f 100644 --- a/node_modules/.vite/deps/svelte.js +++ b/node_modules/.vite/deps/svelte.js @@ -6,7 +6,8 @@ import { flushSync, onDestroy, onMount -} from "./chunk-D2CNISQR.js"; +} from "./chunk-X4Y3PAQF.js"; +import "./chunk-U7P2NEEE.js"; import { hydrate, mount, @@ -21,7 +22,6 @@ import { untrack } from "./chunk-QCBUMAKQ.js"; import "./chunk-X4XZK27Q.js"; -import "./chunk-U7P2NEEE.js"; import "./chunk-RVAV4ZRS.js"; import "./chunk-UGBVNEQM.js"; export { diff --git a/node_modules/.vite/deps/svelte_internal_client.js b/node_modules/.vite/deps/svelte_internal_client.js index 7505dee..82609b2 100644 --- a/node_modules/.vite/deps/svelte_internal_client.js +++ b/node_modules/.vite/deps/svelte_internal_client.js @@ -102,7 +102,8 @@ import { validate_store, validate_void_dynamic_element, wrap_snippet -} from "./chunk-D2CNISQR.js"; +} from "./chunk-X4Y3PAQF.js"; +import "./chunk-U7P2NEEE.js"; import { append, comment, @@ -183,7 +184,6 @@ import { user_pre_effect } from "./chunk-QCBUMAKQ.js"; import "./chunk-X4XZK27Q.js"; -import "./chunk-U7P2NEEE.js"; import "./chunk-RVAV4ZRS.js"; import "./chunk-UGBVNEQM.js"; export { diff --git a/node_modules/.vite/deps/svelte_motion.js b/node_modules/.vite/deps/svelte_motion.js index 1d702a9..8643479 100644 --- a/node_modules/.vite/deps/svelte_motion.js +++ b/node_modules/.vite/deps/svelte_motion.js @@ -11,7 +11,8 @@ import { loop, raf, writable -} from "./chunk-D2CNISQR.js"; +} from "./chunk-X4Y3PAQF.js"; +import "./chunk-U7P2NEEE.js"; import "./chunk-YGTFLEU5.js"; import { deferred, @@ -22,7 +23,6 @@ import { source } from "./chunk-QCBUMAKQ.js"; import "./chunk-X4XZK27Q.js"; -import "./chunk-U7P2NEEE.js"; import "./chunk-RVAV4ZRS.js"; import { __privateAdd, diff --git a/node_modules/.vite/deps/svelte_reactivity.js b/node_modules/.vite/deps/svelte_reactivity.js index 97adfdd..eb9de99 100644 --- a/node_modules/.vite/deps/svelte_reactivity.js +++ b/node_modules/.vite/deps/svelte_reactivity.js @@ -11,11 +11,11 @@ import { createSubscriber } from "./chunk-QKODC7H5.js"; import "./chunk-7RQDXF5S.js"; -import "./chunk-D2CNISQR.js"; +import "./chunk-X4Y3PAQF.js"; +import "./chunk-U7P2NEEE.js"; import "./chunk-YGTFLEU5.js"; import "./chunk-QCBUMAKQ.js"; import "./chunk-X4XZK27Q.js"; -import "./chunk-U7P2NEEE.js"; import "./chunk-RVAV4ZRS.js"; import "./chunk-UGBVNEQM.js"; export { diff --git a/node_modules/.vite/deps/svelte_reactivity_window.js b/node_modules/.vite/deps/svelte_reactivity_window.js index a99da2f..70a1903 100644 --- a/node_modules/.vite/deps/svelte_reactivity_window.js +++ b/node_modules/.vite/deps/svelte_reactivity_window.js @@ -3,7 +3,8 @@ import { } from "./chunk-MAVRAI4X.js"; import "./chunk-QKODC7H5.js"; import "./chunk-7RQDXF5S.js"; -import "./chunk-D2CNISQR.js"; +import "./chunk-X4Y3PAQF.js"; +import "./chunk-U7P2NEEE.js"; import "./chunk-YGTFLEU5.js"; import { get, @@ -14,7 +15,6 @@ import { import { true_default } from "./chunk-X4XZK27Q.js"; -import "./chunk-U7P2NEEE.js"; import "./chunk-RVAV4ZRS.js"; import { __privateAdd, diff --git a/node_modules/.vite/deps/svelte_store.js b/node_modules/.vite/deps/svelte_store.js index ecc4a8a..34ed761 100644 --- a/node_modules/.vite/deps/svelte_store.js +++ b/node_modules/.vite/deps/svelte_store.js @@ -7,7 +7,8 @@ import { readable, readonly, writable -} from "./chunk-D2CNISQR.js"; +} from "./chunk-X4Y3PAQF.js"; +import "./chunk-U7P2NEEE.js"; import "./chunk-YGTFLEU5.js"; import { effect_root, @@ -15,7 +16,6 @@ import { render_effect } from "./chunk-QCBUMAKQ.js"; import "./chunk-X4XZK27Q.js"; -import "./chunk-U7P2NEEE.js"; import "./chunk-RVAV4ZRS.js"; import "./chunk-UGBVNEQM.js"; diff --git a/resume.pdf b/resume.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cda58b51d16c8fdcf323bd23fc38f473811d5f72 GIT binary patch literal 32117 zcmce-1ymhfx2_2U2_8HIcXu}K?gV#tcY-^?A-F?=ySqzp*8suYU4wOz@Bi;Pr|-G9 zNB140cg@YNnrp3DbIn>+$ooL{SwxJEiJl#f%nx|M!LboC651JB!twCH5fU;eyW5)( zGKksPI=>w$xfnYCb-cM5-#kJFP9|@yKu;l6bx{Qx84E)bM`sIL7bhhXM+;LrAv}?fLMC8iVP_#^1~yg>PC^!7V`b(bWCb=(MiAlO z4a7mn25ihAMnZOA12KZ=Ie`~D5E*D;Vgo7%jARB8G64aBK8$RHOh8~JLJ$b}V16?e zAO;i5n}Ik0AM2ZeH~}9p2=q@YFo+F^4K%U887l~I03A4h$Uq3rH)CaHCuC-PGj?|E9ROqD1RTIrSP0obfP?kT*nsl@i2=sO3bX=~U?XG)&hr+Cosf+Y7|THj zL;$e?bzuB!Z`lF|Ou$&68o&Yb-?Om*2Q0uIE8#x|0wS}#rB2As3Jhce%1HRv2P6#C z1(*Q~P!vue3XnJBo4xe|k^qdI9he_baAqKTzyXvTs0$E}^{;{6nm}&`dh5sbW*nSA z6yN~J83c3!E)WMHJCHZ)Ujx1MeY>DQ`GNTWRR@e2hz8W*&EAR)oB=2d2ha)}07YSD z)cMbA{cZ98$6A*$u{Cox2d)+C+j{!vP8F6luzx#JlYP5c{@$Wu7S_%tj=+MmHgGl( zF?qX--eLml*TldE&Mm`6S=Mfo@k9F+O&biUhrZEXuSF>wEQAE^pC5`RSww8sq?;mg zj_YfcC+vADa}r)W6K<=XTaksGtG8GAmeC$rPrJuDU&i#Mc^R^hPmH;A*mpi#&2*ZV z*R_bYiq9_<96L{huXvc1tmdD}xML@D>^vpZOz#bQk-H(OBIvBm(%&oGU^Q~|Lcpgj z$Z=klbTa$wDZZHhR*7;q?(vUO5LNPYSRo}w!ffZ9ZYSYY5z{a<6rbQmVNz0AM1xy1 zInn+z_GtC%$iqwyQTki{*Cggt&zvuJjYlVmV*yp%1=p~#YNd7Mqp4%IhMkai!oPLv zu!h{!=fr~72Ge~xXVXND-L%P)WxVLUwY6lSayloXTEM}>^0f|@go{tQGj6uSTFtt% z8csFb`t2@g`x>^2pT1NP>9jbH8+DvhZU~@Kf>T3mLQQgg=Rlc3YDxd+K3E_q99F806++!ogHIckT)Kr2k{y|Zpb*EyKT9uhLD_r`vZh#tqdpsoLR7V%_`aW)F^p!Lu|1`6@X zxOkE_22Rd^B;07omV_A#MRHuSeG#O&0G`1qhqx%3tY3&Qvi<~UzBrLi8c6dk&4|f@ zABFfG5~sGxr`gKaF!(mOT2`#_+ihRpxfyD$zdeutwWR+2WCorx|IKn`V_{+b`~3TF zmL;%o|HrqO|NO`n{x1tQ-yK$4$!wkvrM5`Mx>+}(`Bqn}9M7sg8V{z?606=)Wf?;h z9U@lLRpPy;pEbLu&;r6^M+g~2P3UwB!|Xi${L(xZi`>A{g`U~Ci|&hFXGG2>d#0T4 z8cgT1b?4RURn}d`70(3hfX$N|J5orX-FrlY=qThUnb6;uxH#0QcdoNPzQ;1mGeWZH z>jb-+3z^-}HP*O9x>3p^~_A+mK$}BQ>x8Cpmc8@KuOQ(I_8hnLGuYUiC{aZM| zjOW6le|Mp%O5forvJrJtILB~nx3xLSX{(7&YQjtvV;jq_uzgX%XzRx)H6N!#hAHAp z`~YO;K;CT_qYJ7`z30={gWeU5cefLs#%fB}T$w(`Xe2M~T#lT(2fMsA+hUEFlQ2ciR^ekzX7s9FQFzo7ml`Uq+tjyHy2ug7(Nc$j37m_$)5+r14)mQ(x0@dTNIH z&60Swyi~V1*J?2z>0I5z&85KcId0gM9Fwn&UQ= zX61AUoLXagbA4x9i-eRf#cA z`e5QDcI%k(q4UJq@pn72xNhL4O~PnOk$PWJ~Tipd3Y zibB`c)#&uS=;L>cb9ksf(CvokMj1#?8gQ+MV&l_`s}wX;#Z@^Kw3PNr!i%^+qT*KD z66Eh%94WVRDIjHXUYqkI!@lq7aX3&$%SOKAMHT?{B-J8fL=mACvyDf-Wc8AH5;k6~iycp})WhMh zMjY12;RWwbDyrR@%5g7ef3FI6G&gH8>_U93iJxgAM@9;lJqt=bo;N{m%(}5_Sk+Ac#|^` zFq)-1nLooCrcEh=@uqi+Z4TJ{iDiGtk)kGuwkLp_IvC9NERoseUVtCvT%s;%mJCym z)&)0w(`=o$t%7&FX=oGcnWGi|Sg$(V$EAzlN#odTE_>9CQ%}IE42ttm_a|ZKpk-sz zki(TIHVIVqZO%Z=^8RK@;*K;zu*;RM^LRgZazZBB`Az+mp7ZGsW|-Ou@~WI=+MEm5 z)GIIcXT$327w!kH)IDTtI1XPh1ig%mW{XI6oj+)=n`160TLS}M$8j>bm??fINJ>p7 zo0LtPPv2ng%5-Zart0=4E%5X)?dBpyqwTh^Fi@WVW^c9A&2dzgbjSXQQ<~IYM*eLb zl!64mUeBNpCj(J)6eX&noYnF(#YzEh7=ZJ&FXUGYUMIxAlUxPwRpe+`TZJ)#wstUd9-1|7Dd8S2 z@~ZtMu^+(Ted&|zB0~n9jOZs^$9v4oMdFeYm)&GEJl+oTfGknv$i^o#3zvid1&9z_}*rl z#u=_XAQBN_W*F8X=s_4RiPwfIf2TF@1_oct)k+$pYzN{6z5;Kp&P)6EIk-hAi1bk8 zz$3lH&wfcB17YVQ?GkFaXjN~9!@W1#i7ORf(8Qnh9oz}K#b2+Ng&&14l!4$flf`puTafS@7-B1~!Tt-DP)sM@BBxmkoi3q&nEl6>KIq}ym zn5i|lTL>j2l?iqW1ZvdQF!J+jS?yj?qeeO7sgH{>wkFcdHSxuH#}X#41%%v6cq$BpwUec9>-%(16%y#hR=s&JrzOV7zx|t+F z2{=8czhIlndiNuJzJl|D0y~V1Tq|yl$`X9+1;uX3byrHF?8rM8L1NR{F19w%ve<5) zkAy2}5_d`h8gEgRK$-YMav9fchj~?T@#|3<#!>hngiAg>yEx-%^p2eS_qI{S zoEzh`?f!cf5iAm69IQ-nZcbMY=U{ikXz#{*zT1;v*pwxKJ|ONS-so`45hJB>T&Z0D zzS+_GO`4Eb&b`CzU^(cLlPG&-+(2cM_?+3d)=I)lwL`RdlM3x(Y+FE<7&)w-cEgV| ze5;qd8mdoxQ59ZwTTzl!(sG{!)_H&aUNMvh!)6o`Yme5x6WZSsc?40$bJV9n-@oQw z`;zctQBQ|Gt)^s)rnu;<->|o}3~n)Eea_|P=F)D#xoo0wEV-IpBb?@Jc`Bl@pj(+Y zclC@KCca$XfSHJB1o7o&c)qdse%QAbWx-aSJN*nw9v-SCU%R^jMdrm6QHoM1A-80k zkJ;=FwpEB*1bZujY(0f=W7$y~N=N(cFGdfu#V}rQ^%r`@dc2fG?BWa> ztvA&L5Ue&hzuZTsMiHoK#iO}0h@ZI^v&^YRxx6d8m`Y9H3JsI09E|8U{%!HAqt6|!*+F%R7?v%_vQBFhca2cjqM@isKu88SV7%H!u? zbcVBvF?fbHhjFajY56tcX*B@x4gywu)gk36w+*g&DWu zo@gMK)7(&2N?E<}Esz@ScV=hcLKDf(_n@Uc0$jhQoH}QpB2uylDG#^9Kz`4|fea&_ z1rw?2>O!PdIJGo%O`XZ9jR(daT8H$An_geu(CPy-!^r&S63SlUm${5%wElPQ=+n#Z)|I{nG6d7L!HJtdJ%G;Qr`JIy%2^Gw`t0ykze|wj z^y=CC{pYPDj4j_^xaTDL|v>{_kPyVK^DeM3A$+w7OYE42T;f5o;ly>fNhT_!IqhA%BWbb0;t@~pG5lytb#1g zO|FQqD!=_Pg3jeW7+KQf(|Ojf4NitcSu@r&+kkX6StV)RXQN_!O)-L;-T;VfMsIM} zT2Z5sZ=$E_8~F;w&X%RGg}T#8Uc#jovl3#Jg^g#}BuJ1tWK)};4#|5WEi*M!c~3w; zBM{fJQGWPrW3wseRQ_Ve<^1!L{g%&hhDchYUBFyP+mE{f0b4nmaTz7&o=uAh3*5tA zID_Z_>myukd<@SgqA+E#Xt3|r>uWM)}1-iuIK#`lo@c_kP zM|AnPQyB>guRv&n9>4t7rmPZIWr7Nl5^9hE271neMvII$X2dtC1jn%EyN`)yJ)*cK zmyMdwzruRr0*Dn==9dvJ?HvtGC}Ytv@pt%BKHoLh)~rh6+1PNwYKhpNC!_G-r1?Up z$XlfAyKs+MLG%{A_jCUc__GSX_3Fy-du@D$8}8wIrMQ!peQ6)rcJf8J#E^MNF4BM} zN+Z*7%CB~ljxH_q!cGH(Ctk)V#!{0a&P3p4*NPhTZ1K%!L0GqUUw038t+&}_U1|5D?dEt8XwUq zALlCL%+*(ay=rTo=;G2@LzJ{$WaJp7WAaHH?k=3Rj-l7(MR~-!OiDaL{lj3425h!$dRu$+BOh2Z@h&j&QR5L8d45;R#KJjBZ`)>#Bg$l*iA-CPx>U zRZ+!{d9A~FE^fEa&rm5~@EZ9~8U(d4F?2E3#pQIR>{jJzxJgu2WuMqS?2N7OK9Ave z&6gk_Uz5F7q4NfklZ#s96sGnxk1FfxTCIM&@%AU9n?aXvOaFj2%v?@L(e`wnklGt?jlEtvKrlh`3F4e)TZ=szhS9g!OJ3pN9*EVJ) zFCn4#=u8=CwM;_wdMqc^vM5$gn_;q5Qxk4Y!eF-cVDf`(OR}?#A13NAJ4E0r7(>aT zqUh!DMuXVbMZZ*0opUqZP#X(Dr+GQB^_b;e3?kEYgqwC-5082UG~&411MIA^%Jxz1GhnBNfw)du}%gvk$U6hik=?J1yVlc#klPVk5NevbmyQrFqz z;U^h_`%tn@q@-c(1Aj5>!XA%j@aawD?3L6R8Q5sd@3qIF8y-;yL9w_x>N1_e5q)+C zefYI6YBC{-J7%$GmBykB&n=$t3_K}CewPZZntVO}DZ?m8tXxE~WpP2)WQ#tbD=&TI zOl?`Ol_w{~vATXt!I>@sV4cHrDFfqHX})u9(5-AzmfaNMnhbQw%y;QL-R&{%?Z{5c z*{m2^6-qi4Sk-;*GX^h{e?+`Vr@&vPnGUyltwT)x--9lUW=4yVP%*k6g73aHZfyLT zi8enJqGJl!5cL|hGl;WvxkX$0Ty}O$`$^ag_)#R%7gdlT8_!f@wBfi;8`Y_+v6sP7 z+E7|Of7P0O7rj~q`}K4Df?&@m%yedKkD8mIyhouNX(5_R*jKgKUg`Mq`H~YYgJ3M1 zJj6PtxqKcT(~d8GtIu`JOyrnn&_ty&sO1lus;THWQZ}=C0(WZ0>%--JpKeJ)s(*@g z8{c<1{G8(A5GxzhAmw1hgdJrH^KAGYtb6F3uWN(#zE`0DUiHN!1l{L1+_b7ory0Gy z>Z*G%M*oB#mAph!rih!e!AjtT{Cxgr zfHAsfuzVW?#-H+$0c0U#Q@M*=CEPd~N{xrQ`B6F&VtY5;Qb2EN` zj*D8W2j#Za6QxKJO{wElQ5WX0i>wxKUJ-ms7u^{-8D->#kWc2J(T<)xAJd(8n#mHD zvMT9J($~PwHz4@fsd-I}<`Z9NMCWY8r2~@UbK8f}#=Cz)`5Ea2W^u-}N^L!<+AdwE zCDepBCr$GR6VZf3duIgje0W_^m;6>Y9V>=mN}4DcDtwtjYGEs-0ZnFyEpbG)fL-#7 z?mOQl_mRzys!Hw=4;Z-!t}S|EM^ga_V~$ipC9%RV#j%U1O!pl`%uDBrkp+?WEa(-a zR4fmdy~OQ3mwOL8DOW4FwdHTN?ws^UP!@EX4jYRHx;a1+t)6z8FEly}fQ;jML zw zUjL^;!AMy*MnB1|I41pyA4lm*Uh7V_&XCfB3v#W@5+zP!h> z>fC;fi?v!w5r^n6UQO3b4HYwdbp1q?QPPSqn2ugJ+lE-YeUv0zrRcDp24M)LKG1oP z?@Ud=FDS=fp-ukm2K`=c*hcH+k2B|b(tJx3nU`*{bE4o_9nFs?FL!!HKM=ekIdwO< zrWiiOEepKlRmQMod=%O{AK^J(eLY&L8x;TJxxJH1Tb7@)a8bV-a7Ehhj6A$Ydxfke zYO@7vkhr-}F>`K&R_5Z~(4DaD+g1C8-#Aek`HI);tJ)XU`D-owyC`0HWKO=%G)Q@3 z!?)7HLJ%53bH%g}E4V3H+QKDc%XVqwh`MMuCw$MJ!dxoWP_R5g;gE-x35b@|P?ws+ zetLW}_wM4R-N4dDgkGIvk*y%vUg{Vh70fBE%P@o z(cK|0l^I|l$EHj70_hNA`{8)Sm(d6rrK$081Yc|7zz6P#HjuKdwWc_?_;MXway#0O zQPE_hzpnpoHX=xaR)_N7>#{EUT`q_C(DOa!Y&4Gy2F=3;uWL4(+jR$d@$r&*l_GB0R@ejui~FV za5{goV}w1DUB0ZM=;{2_${Dr_^rV;YqoS&CY%HAGWewNHp0ax+7uaGU z(?tG8=szD*`=*^?X{KyF@(E-d9D?@|G@->g&yO*_BwZW1MT+1OXnj&C%ee&YXu#&A ztdu^@NUEgi#-{JoRW+-S6craA+F*KP&sPVY)Y8gmo|*2tWf`_r6D@QV*)Q~Ig%ptB zhkLyntI6|Rsju~He@_$BOXDY;&pZH+BeZrYRPP#}F+ItJD0(*LMrNhfu_U*L4XKv^ z(!g2l7o_Avz|HLEO*t!S-NxGC!CkXh zxL7G=Oipe+scnpqkj~J~7O?g@OD<$rpRP<>tKt{xTIRzY!^8gQt*JHd?pV9V78OHK zYT7ACH0|p#!l9Sp7=lfS@mkn8;p=`C{EB!?+5q<7h$L^i?|(>o|A=`1RT}=cSS)8? z14!}z8=3uYM{5H!CqThvVr1v|_dp>bJ2yftIyPo@5Fs54AU(1%u>H;L2nKv zKqFTL#9k0%Y(H zW&qqWe=!4q40wwIFb4o|@IN4mf3O1(aO!`s19o5z|6m6oPJk--iyg26Rr?1!Us4y|w7unr~?2!0NltMe)1Lq zINx23&OjIAH_aKxu&U zumNlaKu-Wo>~G8pV89;0W&pE(^8vwtoS8ZQ3nlUQ-u;g|^MSRW|26EP@1X4W$T+nLT?XS=-=FgvW>0T;?a*(9-guzFG`!aP7SNF<`vh8GK-_OTHX=YBOR6N3TL&Q z7l+A4f;iIzAZBeRy&XT><0`EYWTIm67}{ae56W;VmAfJ^r#L zH7(bhEs`R*w14dLJjFezsb^5pxII?GzKx>0%Tqp$OYcpypH=GEjp(?PqzWZse=0FP zMe}a)ZS82UvG{O17|FY_+YV}=D`81r{pr)Xj4bO^txLMKF{?`c6xH_7C~To2@^wJT zap>ps{?U^9rw`9Qq~+P-zbh8`eUb3WS@(m- zWhX-#043%HK1qO$`IAm63B>(T1$Q_cfk4Hc{PacZJK|}PT|}y+fE3t->8+eHZXvS0#~0%KYT+c$mv03GWO?S{X}E z;i@Q$kU$?dDWOJKi+&)bTyQ?HK}qI28K>AXnL4c%l1kOiAi+oG>n29^Bw0f0`%`WW zwgtgOL=PuQ%C5^*vMcu$=V+=|HY1+b9nbI>{ogqLn;$EH2kC$QZuPHw zfP;zS|B$`N)P(UupPQH0T_9fnGukv!mCF+FojBZ&^2DE&YC2eeFyUL)H(fT~McIb& z@!O!1$;CDSN@iWn%zCrG-hcO9+%=-z+seF#Y7nVlwhoz7mLCSEge)RLKu zw6%3~c;~;~L;w64Eb?=}7AX`K*6aD%@B4jKJJYx)&BqLPIZ&2<7QvZNqzjQsNyx8@ zjJ*z-z=A!V^R?63tS=4@2kvk>Is<%B6|XOM_mbm!&m2BAS0gJIO4`fXI*V-}=_eBJ zcdCytB0qzFlF>y(N`=G1!bN);Y`1E#n2vjR&qr$1>Mfw+p7(@mF<3{2At0Vdcp6B0 zY1ch!F($Cv-7_16qd7T>N9dTv(g zg$y^r9?bc~Ywq*nq?rmnJ^m8x7P&e(n1Ay6C!fRSwmmbRR}vIq$|3flT`Vt(KQd{Y z2ai}IWNS`K{2FzR^|KtC8kWJ*aBS)H8GMH=1|j0*T$7iMMLe~p!i)m4 zS7GFPeyMqiJwT!g@`a_(!*#i?k9AHpevtcmdKP@*#RS=;*P-$BfJKVjp+*UL*P-!6 zJAVCTW#9}!e^Hj}Hkb^mKE)*Na&zTc{`t(~m?L24mnuEqd?z4C> z{JNDK$#3Hz1neo!s97SC8#xj#W08VA+xf5zu>!|GJ30>aB9e|NppOIe#|s%9jwG6E zG7kLr1+X$~%|3kV^TV_og+nYggU->B1$94R&Ivu;ZH&dmG=Ur%w}zpU!q%rMHv?n!;3fev9WyBL-1MjS z_&lTUDnpM_xo;{E?^5ROmQUqjvM>Azyim^9rJ68m)}5VKkaUCOf4Dic&fQ4zPkA+M zKY_s8pt$b4w$$#~n{X<;tWb@G@wdU$s-Pf!JfF4V?n;{a8Y8fcoGLq8cA4Fd(8{2k zoiBQ?lZx=$s`)yLQhxR%s5VRH?MaahZ94M=SRN8~kKi&|80<{DJMpf?)SD)#VxgPi zPzEYWfBqz8hcbKG$hyQGPb8i5jfQfQjtJf=6|>dwNUFO{c*+b9B<6{ukT9Sa=;F2C zEtxD;lNZFuMM{slhQFr$TX)%^`h(49-kwFvKx%NF=S=GE=ZLda+%C&*OZ20z^uWyh zsVrp_%~bM;Q1pi=!ZJP6qz?X%?}+>U7z8as8-0(hK_o#a)v3g=sD!IZ!j@s>Z=r1| zD=DjKl2OMH)o)lBTu|Tkd)ME<)QRYMe)7eRlULur){AmS0GZRvvXxRN!gYjpd@y1_ zv?nMp^iN&S=DV~d=$hK0@Mp5;vkwdN|*g634-a2n#;Xfh`aenv7 zCU-cb*R7RJDMYMuXh>n_vuaLdDQ_#R9c`GnQ8EeKH=D;^br=;8kLyTpbuCABVV3ud zmCk08O^^^#B9-iNlFVz1&3%Cl5%*o3dZP?^;%8O*34#J$QxEG?)pIU&gjK;GJ>92Z z1RUwvYKb}~<;@U0zkPYY`q57&hK^>D1rHt}siVUYkaK$n+@VQH@`vpA|wy^d*^tnS_;u85EgL zC^Zr(8E+-xCSvK9g`Z7} zl_pb29NP`6{a`u*YOU8n;^y!iy6~8DExz_p@9F)53%f6A7CReGrDcCJw{<@Q^tAFz!(G#}Ma7fx7u;)kso$m2ZZj#n32b-6CDk zIO{n2sLL>08(dA0-iY8V>->V4`gktRxMb7t>U>#8o2&glcJMwx>p~fxPY`rjty@$b zW9-B4RjzP~rWUisTL|a-=I6`TDhTqr8}%I=7)#*$20E5%QWRT#aN z7h*Svr}Cp-WPV0y7^@*lSvgZCUF}4j->*Jbb!z0}0r7;dPqgbkb(QC}_;Gu%EI3^S zMg~Fx^8rQDS@rK(T+F=qwWeWQwW;<8=&@LEQq3NMp`b+j!rT?6R)>hDNL_y{q@ZZl zp=5*XdU3K$3{(_I=Qq)?(>KwG-&2Q|Nl;Wpu<+c8o?fDizR(^rcXdk_`bq0px{F{d z?7hYiK{UF8|S!5S!eJs+V4e?cey3<16F%>UhjxIVb~Ch}19>cC($ z^%CEpS_6MP-iiY##&{qa@qp%6JbHc(r4UiFWI4pApS4xeB(YytUUbSVSg8?L3#y7< zsNAZSsP@^0#N)8xR>acdcfY<@O%GGVwrgLg_`q!Zd-BnX8BEAlUqv5W_&i^+d5ILv zic@{1h|}oRaa=i?KQT{&q^g8AQ_i;U#-nz~oLTFJTAG}_x=!q{%NK0x)Q=t9Za06C z4}2)rAde_gPgB9Dq(A0{)*YkfOZ$yxN>v_@KjbI5>iG;C!7ABi1_}EysCwJ)TOEF9 zBVRXt-D@-#c<$dJpuXI?1{@XI*sfco48NY7@V;KLg}{(g+Ys9Gv(R^|yenw&XNSIj z)`z3fD*TnSK^W={NniIBalU*jr7C|TvDx@eZ@inI&&*>W1nQBS1pFW8eja%ps~|#T1oioHHe-pVxWv>vUPjm`8 zNVVP9(ac)1x?=W7vBq_I7+Vh}eWDLJ5C-@fAMnayyY^)C;LN`H=w^^EhJNIG7qRH1 zw4IeJ1qTD+{i`U>@Q3Q52qD6|YH^)(|31V7e{~;Mxx_hI_6W(3L*o)L(x^u)vZNEg zhicck2R_K8+xiuOL(Zi0J`v?afuLhPoOJLLX_|7Ip+}~_!u6kHM~f6Ed~noD@KHSr zLp~?*_R3+WN9ihzo`9r(zaon$7tpA^jf`^1Co-6o&JQM^Jz+6UN6u|^XBB?_=kmIV zn3+P91QzW)z##O)&qZuim^f**4A8fIXf`lYMxzW(iz=?x>txG=Zte{JpFXCd}@5LjmIKVAO=XGjxOT{gCLqabp0-+tLKf!h}^nnNR11AYa{CaiP4994{o&5 zg>Q=bI`y=n%!q;hK~x-hCrd6>RJ#q42cG{{Vg@JQblG@z4}0(o{Dve?qZd$qRgk*&4UnNy8-zS`Q`uE)mLkIHDi2wFD0$Kbug@--*>f6+ zB;#y$Q;~BFN|a$!7Zr6gkh68rHT4mqPfh<|3)e;BntvQY*85!3&_Q({zuz;x7cSP9 zoLNzb7p+?2{t=x9MzGt{*L-hP;P-71&OM~fZ^33h;e8N+hkM@rh%(h>2WkSw`q$`e$P+`b=r}NadiP1ewWJsSQy`PpwU1FGL{iuMRH#VI# zo7r??P-jWyy&DUKk93Bw2m(r)qRnD1uJshqP z=bK)}K1=P4PkcN)jz5LzZyz?Hn?+G@E>{td!_?)>G@5v#N?=)8v*akH!L-uqVNdz> z#AEGXUN z)zRc11J`KhXZnu$vUcMX)$`NV<(ibCqEG7Rm9kM7`pNpt6k&1s(xH(}l+;jbte*TS zw=*vhYLmU7L~JH9QU<&Y87r7)SB-#2`Co!hc*jTCDa0=X$wir`1xI)Uk%#?sv;ABL zPAKAviUs!T>+L>_r+;8xI(uAqP;&g*~|_b>G5kn9@Re`Y7acHm~DQJ-K?>h zC}r}oj0#=%rm{7#Wou$vc71o(_f*M$cK^g`5hr;~?6q;3XfWdtDlcv_Ak8i{@vAX@ zz$022uM2#N|EwHtnws5;)?*P|GPxDufbbwT`m zTVUbcJVg_PYz)pMBhACPEJsXyY*tEI{seQZKDPGHaaO6Q=HNwDh*4-Kjz!LV)7<5t z%R|Si6r1r`)3B}SX;|I5lCTHP?wjNzTm3_Rf%mPK(m^;*F%JnZe(Ds8W|Szl5bSb4 zf7Lw4!+A=YV(wXXoR)oct8;EG&Qundl=Jvy|NaSzJ{@VsHKP&BW-8o~5ev31B2gt4jwn$$6(fmOsQ|Roqa0)DYek&dtuiTv zxPkDJ12FsM=AT2^#BfYP@bx=FvAvF^HsM@l&)bV3|7{b=MM zjX@kA4UKpYA0`(mA2uwZY~PKHd%Q{selep5`+gN}Hu!lv23!xBZ}*jcwW?K_Q^f{r z;Q+2>GX{knPoY<^v^mP$>{XFZ0ui$w8l>qvf$%Qe7#m~D_^bCBe-bvXGxEynDsM|6 z_d*bKD+f;#jJ-nq1&4$)H&Wb#m1nzL#{LPfLr>|K6HSK7ddk<%vO1RR1r(W&26M&UynaNuxk5nSMG zLbxIQ(o50U8>S>G>S8`^)^|f#im#1pZ7A1v+Rx+uO2(({XZdJmfUXVof|L!D-o3!R zBQ6(D96xG~0!BX&Ygd6EWQOh0r%wI#5`IPU40{>)ZBwbUP4Se%uhQu@xGc_N(|#Ve z>Vq5M%?R|?6tRp&YQ*NGkj5-#rekLr=MK-WHlj)J75h~<2X8L7z(tEMXS^`Xl?EpW z?!LHdO_Dks7`_(sC1LTl9&2z!G5tD`8PqAAo@W6EIGUYN6jeW+%hjopEU+wc%ekA> zAHzzTCN6GOrNaVw6!m`dGuYSe@6h{coXP55s##l7vDKtIm0QNKbh?D9<#W28aG)70 zJ`K^M35WXzsjcZ(I17|8g(PWxh4q9U%LzXH{nYP?rbR6FWkhturlpKNI3RF2eZ8kc z3dXB@jW)< zs}CQ=KIU!wp)YwxcH8b&Zfbh=i5tWCP6s3ObA9k-%HR<^0eL5;tI>PmB{Agom(zNQ zP3(^_i+OE;sW3GiShv{dx&Pjg7k8_fn;UFx#o-9nM!EhRe*X|YcC+hpZq%d-ph})}Y-CYiX zaknZVLE(VZY_G{5)yNS@dU;__LV*X~B;i{}e4>&mR4vZ+A#B1Vnk=gn}QbJ1v2qG>rqbjOvFbki5`{Z{zA#DA;}SsxP~y(;_|#c}5pk)siN*t_E| z7Ez@+m=I7n362Gi;*0-Lnw=3_pSht5XECU-a(_>3yo?+lbE_WgW?d?c(Z2Zy-V~yh zZzxwC);(3nrMV-+Y2q#8r7ks^D@63F^Mf)5#fx2Mg80%oQ)UMa?eqGxaVZp`X4I2- zS$I3ufv(?cT3;RUg1kRD!WiMlo~Jr)|%sQ%}{n? zEGTSy?h@=4M`7RaAYM?y4r=T{elT0uZ{9;@NNZ+wi`cEOfjuDnk=JR&@%a|Pu6D~Z%j&+#mJ^adWPnA=Cq(`&oz__g-ZoPg}l zym_A-uL^>yqh%DVF6r{=v6v0^9DI>DT$x3ldyltURZn_wl8YflAc=v}Z8c6Uy2#~T zfU9dviKGo_g5^A4g9v%z&`^B@A=bF(yN*HGx&2&A`}HemPc^?`Gq>2OX8e_@S&2Es zi7H_lWmmWkp5CD$IuS(Z_Rt`^08Bn>|8&mw?96vY<6gn$t~;Q~6A$q1R-LAPn1^+Y zP(BSFMw1V1$kwO)&MZo;)glEkOcxs%aye3@v4xndA|KB2Yk~jOOtDg#g*?h_Mqb?< zl}hTM!M-d>v@INw;x2k7NidU`U&Zu8=5ST1P_RSk+e0e~d+H5zDN~kqHO0>|s=G_B8fkI8e^Z*AbSrI%2g6O?5? zA4rAo$d)lC6Tw|F!DsU^T$A6D9RnR*CWNbeYEZLtG)21^!rE8=Qep~+)D-=!09ORe zC-O%XOXb1Oa|yFK0<6aLTRf_p$#5uKTWfAx-{qk#OXm_^Oc`m?`4F26q|4avJpxH{ z3F`)96XRp!8);58AhEW3KBkVa$iw3>u8`~nJ%^$&nTDF2&A^{1_qv?{Iqk+n<0oY4 z_QfKil7m@)PB*z`>N8?Af6F<(#)zk?Aam<8fh3Xc7@++cSq#~bZ@W95yra&h2k3Kt z-?(lH$psffGSJ9LGsX(la#o`<43E)SE}Cee-upbwe?Wa~q4jR`2FJ&s8~PAO^CXlk zoTU%**a`h@3>(SiRzZIyU)J}dz-raU8=q~@ui52d877rh`I_RxzvT%q|Inn|JdF|# z^9!!Sw9DciAI*q`bbM=4T(%wR!-J}3!es6?mMRjMi_{dJVI7jjIeZNp3uVC6foO%P zYK=^0Da=L7^jBh?Zdo`HtWVFvAd!l7a@zWW9eBYRpWO3c%mLGS)aQf1!a8~T=c_`T zQ!V|rg?m(A}=G2;#@Yvd(Pc6kR z*Omrf*sW$VuECQ?cAhVMCfAiI*6C3rU#}=2`jRhmARyYsgC~S@zSeH&Fh1T*a4EI? za@FHnXEH2^I?cg3YAtTy54Wy0so70V z0sLQD1x7*t&bQ8<{Iblsa?hB}<_F8n)Y(sz@ymlNct&u&4F%aNjP?W0x>g z)56<(ze-yjc;MXhMHh^Q@1iBx8~K)L@1cBb%BsOm^IGat@$Uh}J*=V{hvV^$2r9~J ziqUYm+hJO|K|-gW2lJ5Hlrl0Gt(Y$8k&ipfiW?PIX>4hdQe!Azp1@;dj z+62jiL2Sc%l)kTK zmd+X6T!QFA`{w5kkrJ|+xqu~N{u4SZcr(C(e_7CsPY#~@yV=3(V%ZNI~U)-bdx1*=-=N z3USA8Z{M-_eZW>UgU1IOKQ2?gZ%gT_h*=gU|GaBVpTiE@aty7R5&97Al)zUoPVOv~ zn6ZFb1KO3Z&`&qARuYWiWhG! zgNE~d%b?}}m%oKOw_5q!;ERi>w8j1D_bwZ&TjK2!IVR|kNB>f3db$qSq}3idJfnbz zo}RqTr?ddnT*XS(@4^E4f|ks1!!(Bsvv>V6T4;?nThN9>ikP<#v&l+r>~PBMhg=Y} zM!#IX7f8BhKcMQ6%;lH%Nu6G9Z>JFA{$IU)2|QHa`@dAkF1wV;mUYH#%t*3liEJq% z27|H8FveCPp(I%&6@_FeTZML8ijpO=l~yWCrAQLxf9{x%EPcOy{>$(0_3G8!bI-l^ zInQ&R=bU@a`@WwNr=U!HaR=Ya@MiVCmruVThaXq>s-CMc)4nD+u9~P}j?L}0ylCnD z$F5`zZ;;}+e%SiyM^o#cZ0ETxC2XD@xtJt2!K(0v;Ppz+ z(IEJ`)qqdH*;g4#*Lv+x2RNhh3t@TO2sm7h%tmHc+BEKR=uyP?VbieML8Wirjv+S_ zxZajHk#3@c^f&tpU->GMw(Y^O%3dGqkKuWxnc=6ayeCeCe(zO|e4jYjTam$D(U=gW z3eyYOF3OAe-0vj(;}uzPy1Yd-{Ql!DqOkv$m_;ld965(s#AD%fh~omtA_SgT z3|agWOjDaorYxpK+D;;SK_DYbq6-bS2ZL0FtD)2Y&IzZ2fumIbcnpid!vXva6sh6W zz)2)-4t=RZfw+U_7=Hle3%G>=j4qV+Jm=7yji=cqJZLmue{}@Hoka5paE7~3d=Q?DCN6Ig z00#c=w+N$#fvW=JV1Bn~fxZ4`S_B$2XD&ulpmzPCIe$XT{>?xb6dd3cRdE2esiq27 zK?4IJRaM|96doYzu&Q`Cz~=pbG7!St8+1n6J~~s@;=Tvai2nzc`rR}X4z7ZNu$)*N z90N5Mpcs*G?EiS*b4NO(sYrhhgrT*KGVTv1`%{Gc_a;LFpHfo=?Lw;p+tJ&F#;L;5 z$p2}Rk%@sMGQpMLLh$k-cp?0QNWMg6e-9GT+jV&(|I|ivf;$lkVCDoWgdYbuUIy0K zl;}z#(4pv%b7Dc*1%PxwnuS5aaX37V9`$rVi~?5y1UsGk4Z4pd(Vr4Pbs_o#+%e-$ zbTtBgH~gxJV__o^CbMv9AQ#6@1a<1*vAdmvOu&=Fze4wTiO}F;XER6 z;n~&oA}{Vd6O?c9)eJ{JIU0K_JgDvtrozdzL$!07=hn1i+^>o6t+P8vw|)wq`0|qw zG`q4?y7a}CPgUX9`1=d&&^xbXTryUa-Fbf9&O6g((?i4te9&xk_{m=mA1~$YJE~dq z^VYXf7Ou*>(z^vk=wzXiU3OiK#+XkPsXo`;{5Jd& zDV>;k{Mga$TPnF>Vhsn&xtbp{*2$4U;l~APi}HQn_D}TpSvqt3xV^_*aQsxCGo8@j zDA9syvMtVZHJ;Qxe2oY!Z8`=bBTuVjrN1 zNjitidk&vU%WF6$zDuJ$72D^Dxrz-v;(YX(f{Xk&v#1#<^JzPjvR%iMRAdpKP5RX? zf1QyV9pCL(%f;nlXDHjU9)5n9#JTxUZCW!Mu=VHQuUW6jj#je`VZEK5F9WY~Vl!;}T^p?>0_{xPD#+VE4^;dzG#Ink+0z`q)>Gal0s$BA*}kqSW{sH4Ke;I)j5e z;w2(Pj_(%=Q#*E3raV)TYt-z~{-_|E!{wYT>((7`De*2S?KvwocITCi(_o>ANM%U5 zQvej&K<3M+mB?P)$a(y#&ewzPY%s`H@^96`cXskCmTn&hmhHQ=TV9t z4)F&`r+K-DV^{7TUW4R%s_Yc;6YCL92#$$#_n`?w^nIOe@7xkAj>FMULT z*aCN>+{}P;p4+S28y9o8mx=e%y6`VEO==w+Rh3c!1Glk`Nh`~u2L0692`!qNV0}tM zwBq!FY%|35<{f#@V$i{7s4ob)j}{a;I8zvA@%Kd zjO!fJXC5Vyu@tcr8wExZ;taGEA0`~kDt&bQRj8ox-mx#YP7NL9FUQ|?Xe8M#7O_j;8f>y zHDoPbiOQ^5cOUO%2Q%&%AbJ-hY*p z9VN5Ac;GwPAI3UrcuVEzRx_eZy7-Yxv9E@u^hLT!Hd$El*O{Brn1nCmJ70()r`D9z zNV4VNIOTORU}v5Q=`h8*wM4n}+iFLx&p+y+DnhBT7NSs?Rilm~^2bCQ&Xg-0OT#xR z&~6NvZK_1_!Q>0xo5v0%Dkkprn7MkHkKoz3J&9XnrB^~M)7tutq9!pVw>K1KA9|@S z+i5a<*+g;VE$V{5C9S)fQ}#^Ko`V8sI}D`GMLC%imVIFPkQ6J_8=qVdttXRuC+w6g z`RD)^Mm#9-d`;%qU2%h2IbV~9JgH1;4IS2Mu(b>5)bq1&uX(kxr}6ds>G-x&o~b2Z`ms**daYszl>dkd4bJs)%4~}Q0L<^-WxzEVP8Wx!4puX4+vYana zSntl$Bgivx;QK(AZGN;4r}vHBRUMB=0UksxED0q**9A#iT@A z>vVg4_j$(!zVEJj zHyy3OhmL%jtMh6*&k*?bOIDq+6ffZBxe62BIJv98NB||VvCq@1vFD^|`3Vg+(P%!h z`+CeM0;~yEp6qEd2rU&puX({U@99o*gh;#cHp<(*waz;u&ruT6EYs2O!22*MvJq?@ zvp@v3_%JJnZ#=C&;}G03!yeBQ%hn$V6XzlfvgEaKd@;8+z2G3>Fw$bkaXC8$;TV%` z?PKesogHRj`(~r7wFt|Q^dMjIMDDwz6I^_@;enf9poi3jbLAg@50$jJQPyoDTE{cZrSB|Vf?fKCMWZGo_BiN!%#76|B;&U_MY@BTd0GVFCTkil8xUAJ9XZQ zCU*=cd#0nG*f3d?6;P#==tI%l5P6X=F-x;G|0U*dCRItAsm7ugMwMPYglB5rl*`OM zTlXUIer{2uoW(nxit6rrJ9Xkev5dwRk=WJlRyiis;MkKr)H(WBul~6`;+l!uOd+== z^I9}8c_6lQ?Qy;RwIkk$O4v^XX!~5;C&+#6!#;4oQaU{SII?AMagOPJA z+7A-BHgFpUoFG$W5{1`Rv>M{v34S4IWyxX}w;M`a#8kmcj9xGaZOHD*A}8u!NAsB~ zWH7~2^Ik^Xj%y1%CCpYn8S}pJ!iGkozz;!nU)h|fQbYN4sqG49HIql0uN=R(XXk+f zhtgD@msJ|pyoyFJ=OCOD&0^S1*;F#8r3Ls3k?hB%_|0GNu>~nB?kDc7PQ;ySfoi{TpzrGOe9+Zcp%pgzn)=w! zAqp9URN7ScVDE?ZiIGU=8oxe5MtXDm%Y^9)K|)~fCAQPaK6k(OrF^&;th3_ljZyBB zk8zrch3UVZ{A8){8z0>1B!(Q2t>iu_FB)bfc)QiF$Om=8VvoelmENXYcbM5V9&200 zT-Y>n>{P$slb9=!WDXeh#dx+5FWVk+%_@GbixGJkc!Y(`py27XJg;k8+E%h9u` zk^l5AFsW}+z+-IcE7OI8Uyvjf))NBaX3VG09)9cY(!SZ#w9bw2@@7TLo;cG(t*p~^ z#OLkrBLs8tdPYZ6tXbk8ZuL84bu3A{TPyg!8~WRa*sY&p@248)d)Xf>D7qy(C?rrc z`jGR|U3=vFvwP6z)YooTCiK|hCMfWbckffu0v_D=7L%-fda`kSW8l8)&LVmpPX1!g z^r-SO6+OhX19^9ExB3@h;@43XcPeV=zcIVVG^)DF! zzPBfH7i#RdS2d<2^62`c0oA~YWe>Mlb2f+P&-%|1q|etlGD}}FCnbk!t$Y^zeM-5< z{(9%#)mWKkwzC6I*0WZIJ*&Rm$Y)`0WhgH$+18vjBVcA2o!H@dPj4D4a;Sf!Lh^C$ zU4nN%;{C!gTr)K}qc=E%7C6-QdF9`$;M!|&A8StgoR zNKcy_K)cgsN@c%&S|tm!E8~5fU~6+Y1kJtiE=-EOHh$IX?-`QP`AS?3r`f#P0&fg< z-qV>e{G@4oQ}{%*u%_4%IWHwmUiZFF96@b~ths*0m zS@CSE`FgP-8K(W5>e2SmKaw}{+2?7+`rV1a86m7qQZStlgJynlFOSr^T#@@Bz9avE zE=WtQ%%3pOog*v|EZ4}$hJ2`)h9W>RbAJBPK{Tk~Po%%M$O+)A2+BWU( zD?f@tPd@0f%DngLnQ5rl$hx*`oi91;-C~=CxDpZ?it`3VnrnThhigT`b9;K(G+4=05*oLhi@flZRP}k#!uI zOe1NwXT-+z>^Gfigs-xAa(Qdbcki-;#?rlYYvNxKoL7C6Jo>Qht&SeILeFDv;njn^ z!!d=^bvHU9-Z;JAFwDd$V%7TmFml@u+inxTgRe{2z6)%tIuQ0q!WyWF9dZ^_%HW{tCPzqmT#^Hj`!r6v3d z&3^ykfC;9w9hzn$?%h2pHD#MtU(IYA9Q@S=b3IFr`@n55^)PJ$lQSl}Uaslf58-n~ zuktT-L015821Bv*Sz}43pSnw zcqGDEG3=XuiuCv7nt|<%T>aVRE{%fxReMgR@C*xRN(cW?nTT^z6t8mMH(UKqwDzKIUR^20$6bcY zrT1yH@d3fOfRz-cuw!Q|v=p1RJgq5{N;{C@^MpM`?-9J* zP#DGeY1Zw~yZbEZX@iOh$~-rH#ofB(dZIhNhDi<9B^l#Ichq+npo`b;nB-y}wjFO% zn@EltemYsT_u{RFO{YlVEE}G(jpJyVQNm7MQ;~?(EywsSDacj-#EaZ|J7tehe|T22 z;xnJ6-qazsgEPO{8#ZgV!^a$|1`gMCrjRqknA7al?JK4{B-UIj$sX!!T>Eu<<5!`3 zn(JdKck|~{ZhXw$+$bX{r|zce<0J;pFtU&Ip$YG&&aN;fwC{J0Nz?4Hw0GDC5AQdZ zJbyRPR6U%O>uOvwJR*Boqqh9{VTlV0A_KA3qsKi@UgG1}#}B(^u4~@K=ls6IKqFAJ ziLcYq=wtRd1(EnHi{P)k+NYF-4LR8e_o_ZywfvZ@j@$nwJSI=<`5%_lp%2cNuBiXN zSxW&Q0fRM=zpSM!S|Xue@mm%AMK4xg# zQ?{b%G}mfXrs9gTAuZ}l5hK4#YEZORQEc<$f2ezeF_^jFEw z?;h)9o>qE|9BCMScjxNtr`aj{tp|!+e|{nCdfr!P_h8?h;xLC@p2?o&Wf%Q@tP~OI zolm=-j5G{4zcnzPa-OK%TV1lZI4NeQ&M@o^j_-!(?3wT7Ur06qdmQga?CtCh6FYTX zZ{$11kf!z^@%R?J*4-(IwgJrz12$WjzU+RReNfAN^tw#xt5@9IVeW+X7aZrk^YQ8A z2!+wH_xjc@J>Nttal?V>aYuKUwx#%Xq7I8WW4ZUD+F6;*zrD}tXxI2Uo#v5od?r#m zyvYucdiR$ad+}zNK>Kj;yZDY*hrBgxo$zg8E)JQIjfRf{-mm79Lg_j(7wh9hqnb9q zk&QB|_tfftCvfwTh;sChcY~d1cbqKAl}2+ekvvE;^gY z>n?JFs%D%cJ*Z+a*;gqXHySg(NkO6pzJH)o-r`YNMN(a0sH$5VXYcoYW4GZh1M&k8 zWcC-pyRyq;2hRq(zh29meJQRRscMTj!F4~wEYDKMc~4bG>X!ZExxSlKR)h#`-5)8< zy=IGlX6}gKHgz-YO%7KKu5u$EuA%JLOyd^4^1gM2Z^~UuV!XW&hX0IsXn*-bc1^+! zcXR8HWfjQ;H_nmQCnQX^+~ndHVt|mk3D@hkuZEm1xKj#p@3t8@E_j&4D znkjC1q2AHd6pH(xLoU6Om z{d%@~xcM2=m+6azvqe`N?bcg_6%}=ceqJ@$F)-U1ICJ0x>K4rf1DjO`zEY0 zbkOxGZ)Gz09 zuRu+r_L0Z>iaH#hy4HW(pKN_8W#`khCLXpTect=W*K1o?rm8&6jclBVs&Vb z?uvUQ9+u)Hqj^4VY#Z4~(6Wrw+OI3Gv#%&b*fD}VGmXn)-@O~Jir$@NKUu;3Wi+R> zgm-n*GvC6C4)D~J&8;zKo4dzQgU_b5;FZTOnTiJ9cr#_N3UNFC!Fsgt@$&DT9H*jZ z&Q^L`lHY!f^K1Lr=a=8-wfBuVwqm0@a^j;d#jdiaZLjy? z76G(&f(olQyi(4RG4ym~V$(4X{6mPPuSNe3YjZnlP>l75!kR860IXNjzmGN{xq{_o z`qD9Ay;!<{3^*kI3DpZW(ZE{$pGto(HZQ3A`v%a1ckgiagf*dY#>7% z6^zKOA57b3MFR;OAhrrdnJ&efLbdWGxPU_XN;o|@gBA4oJwpRPw7{qh#cetd$K1tB zHenWTZ~9Z+ondG_w%_t3;UCU?yR?(HbDOT8GmUR>ai(5BUo?-^yM2CmJP zXz!8_89I_!pDrxl^0d~-k9S)DU;T~vz|TCqt5_{~)w;h~-fde$xP#;Bh~S42HNwjxd;ZjVV}u$Z-dq3^pM^{^+;)=OWe*iqt?a_YUs(UvQ{8uywURONHRWreyWPI*a_q*eK zB%N*IUOn~P{q5C{GTgPLY%RvLaOtP_a@h@b>YfR)nR*YmgNOS3tQM#mHTk$z>8zmQ zCj1nFlrSv`qa+0$i`Y@5f3&~PO~~)i_g5Rwn5}i>T~{(*ziBp#%Nakapu6FdG%V>* z&3MM6VY!stpjA<7tuG|UH#PJZ_sDm8%XL0yl`O4!Wm@>_mSrT5R;ks*wsUJ#9}eeU zIIv>y0P{N8GKUpilp{SGj6VE9*?{(Bp|%+tWPoOd;m>BoU>Za(!#K1i(Et~doGwL~ z;tSKI`1l4uX9;nFivkLfJ4AO!#JFa^UCzyK8B7h ziQdFOkar5EAM6WKIMEeMAiKgqE1<~i|F>qS;!tojW_dFp5teBZ&;~IinKStO?3^Kt zHIYgsP)P)3Z;}^eXDGgJgSfx+h=D|JiZ4Bn6d-2`Arh#6mkiqRS6MC@^w7UbHoxII zr{H;oG6da8?`tq+m@y%c0MjPBQYj=?n6|Gk4D7|CFn?1T7VKx!Q3*@B-{QfMVf&>@ z`)62VbibuKG$goq5ojJ1GLTM>sOwD$a0S22h_oOI)eB0|1zA^*;^GB73KACmS7Ff% zoWT-dAvyl4$N3R^PLK0yW$4k6;_Ms(!~^J|fZ)Fg0;r_`9$>jaf6p`MPC2*vzEo@T zvxGT8=9T!5APcl+1#SFW(f9p?N z5FljIzcW2Xg@JBZqRqwAkpE!%`FJ_kh{w4Bg~v&^U7Z8F1v`%pi}yj+{ts@kU%3igL&4%;PbB>2nE5d zmisncj{hR;oOJVAWJsqI0OnpW0!$CU#EAdSCr~P?0CKZTS@gKP?DC`m>hF`+IbuM`^&j z#t>+}n~?!5#UG{vJOe~!DijMDW3$qqhvPY=DuZaF_E$-fNI0NsS|;fq$CKZZ(pC9e zbqq=82REQQsz1QdD8uF=_rIGZU_rdWqo6c^i+zG_!DVXuZRR;)mJG^(s&0{8=MNcn zrO!ASa_<76dVx6k&fcK`wvl%P^6k)*{)lxbCIG+6Oe~hPDQQT-jAZq?I%7WN& z00ttEmp=(4(le(}yg?8Qp^p_nf!YD?0bo+GWaRj>T%gw>kr2t`qL(DPqJFDy?p<_8 z0L>eOS^DcJV-_<%ZJBd~dAFHU78kI$#{dn87zY7)*1#h%}fp$gD};A~|}iS`tQb-6FXQYpP=Et4s7C8SbMJ zt@fE&yX^CF!MjRs)zk=95B34GAsPV|?Bh-LR}bDINr2LEs)OH9F+vhXuR`9vcDAL2LI&lga$q6h6HCy0BwsTcqUyKSC{#l`UX(F>9=%sL4b)SG=K9)00#&1 z{Uf=L?|f~tKb+nQI>I%W;0tQ1EUIa0`rqsN_$;b!ZSMZx>(dav?!T|_U7(FcqJR@X z6f~#_H1Ff9&gfp&z%w)#_Am{^(z8%?Q&V*?-3ox(ZltFf7@~$Y57OJ_Owsr8c30U+ z*zJKfve>ePe(mC_jEjxP{xkx3@A(%OFQ}^F>Z0yOq52SLngo!7l`%&_fTn05exK3+ z$Lb&pt_}1CMImc~WVjkoorPu4odAZ_Jpim0&2=Chg8SSLZ;~dFtbu^~0QfoggMJcv z#P4f>5`Zbx&FJe*nkafx7ZfnsX$g`ilAwu{t~bHoU(=ULp#WLu6u9KvZz~WXPt}CH zSXl+Fj6_+h;MB1wb>PYij4@Y3KrxR;6`mo#2_LS3@2^?*ABXX|NQcn9*GLx z&L9UwY)3&0XCN?vAoEYaffBJYMw@>ED@5u#KLA0QdWmHDg&{N;JcS)_u;SSvX5_g) zz)Ok+WUg*pb7d%yD;7jy=nqDoFH?nJr;E!}pe(OT$}mvE+$CiIF%JfZMc0A@XdGKo zhQu$chf@Kc5-hEUhh~6_uSG&o;w5D`G)Muwv2f8)$AxnFi(jS}F#TC>OMqZrs%OwQme~!3#{x#&CC^X=BjnODH6$S3T~bdC z1>pNj%P`B@27P3*R4*ts@Lk5TYw_TFjV1TPfpo;n%23O7g~I@T-=){8F0&g7r?$Ku zI6UNd(BFK2LE%-FKLd|i)^|~$J1^^3cvWbcyX1aqfP;8(8CnGgEd%{ik46Qb!Vsy9 z)aF*CeMHF9LBz16P{0ZixO#4zl%DIGKAWPi#vAFu_Q?IGAxj?ipHI;zd|=$7(&%vo Pt%Aql*=1z(cNqLH=izV3 literal 0 HcmV?d00001 diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 6b85464..4fae1d6 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -12,14 +12,22 @@ Jeremy Janella | Computer Scientist -
+

Hey! My name is

-

An experienced full stack developer, cybersecurity enthusiast, and computer science student at the University of Toronto active in CTFs, hackathons, programming competitions, and indie developer of the soon-to-be-released game Subterworks

-

This site is still being ported!

+

An experienced full stack developer, cybersecurity enthusiast, and Co-Op Computer Science Student at the University of Toronto active in CTFs, hackathons, programming competitions, and indie developer of the soon-to-be-released game Subterstrike

+

This site is still being ported! More of my projects are listed on my resume

+
+

Subterstrike Game Development

+

I am currently developing an underground-submarine openworld multiplayer physics inspired game. As a gamer and enjoyer of large, rich maps and depth to gameplay, I would really like to say thats what I started out trying to create. Instead, the story goes that I had this random idea for terrain manipulation. Games like Minecraft and Terraria use squares and cubes, which just feels boring in my opinion. I thought I could do something much more visceral As a sort of tech-demo/proof of concept I programmed a shape that could be modified by boolean geomerty operations, mainly union and subtract with a second polygon. This led to a very interesting, but quickly boring "game" to hop around in. However, since I could drill through and place prettymuch any shape I wanted to, it felt like I could "fly" through the land, much like a submarine "flies" through water.

I implemented some modularly built vehicles with use of graphs theory and object oriented programming, and terrain generation using cellular noise. The reason I used cellular noise is because if you look at the lines between cells, they form a network without dead ends. Then by applying an algorithm using a density function on depth I am able to fine tune the width and density of the caves without impacting their interconnectedness. By using this method chunks can generate completely independant of their neighbor, which is optimal.

"Multiplayer is the hardest part of game dev, maybe release that later" I have been told by a lot of people. However, as a hobby-server configurer and network security nerd, I thought I could take it on. I was right, however as a network security nerd I have more layers of firewalls than I do braincells. Every single time I have an issue with networking, its a firewall. Once I found which ports were blocked, yes multiplayer was easy.

The result? I could fly drilling vehicles through terrain, pop out of the ground or into random caves, mine materials, play hide and seek with friends, and even orbit the planet. One of the things important to me in this game was accurate phyiscs: thrust, torque, gravity, mass, all the fun stuff. While I am a physics minor, I am more importantly a heavy player of physics and rocket science games such as Kerbal Space Program. I was able to glide through AP physics simply because it just part of the games world, it included everything we would learn in the classroom. Realistic phyiscs also added to the depth of gameplay I was looking for.

After some formal computer science education, I discovered new ways to more efficiently implement many of the algorithms I had initially generated and rewrote them ...multiple times. Currently everything runs buttery smooth and framerates are high due to efficienct caching of unloaded chunks, multithreaded chunk generation, gpu accelerated compute shaders to modify chunk density, enhanced use of object oriented programing and graph algorithms to build massive modular vehicles, authoritative server networking to disable hackers, and other performance tweaks.

So this sounds amazing, wheres the game? Well, a game needs graphics, audio, a sound track. As much as I'd love to release it now, its unplayable for these reasons along with a few minor implementations left such as NPC's and reworking the tech tree. Currently I am contracting a graphical artist and sound designer. Alpha tests have been a lot of fun, and investors have appeared. The finish line is close.

+
+ + + + diff --git a/src/style.css b/src/style.css index faa9d87..430df0b 100644 --- a/src/style.css +++ b/src/style.css @@ -1,7 +1,3 @@ -#name-card { - background-color: #222; -} - #projects-card { background-color: maroon; } @@ -19,18 +15,26 @@ button { .card { margin-top: 2rem; - min-width: 55vw; - max-width: 70vw; + min-width: 65vw; + max-width: 75vw; width: min-content; margin-bottom: 2rem; padding: 12px; + background-color: #222; } .align-right { float: right; border-left: 0.8rem solid orangered; + padding-right: 20px; } .align-left { - margin-right: 25%; + float: left; + border-right: 0.8rem solid orangered; + padding-left: 20px; +} + +.indent { + text-indent: 6mm; } #HeyIm { @@ -39,6 +43,7 @@ button { margin: 10px; margin-bottom: 15px; } + body { background-color: #000; margin: 0px; @@ -54,6 +59,7 @@ body { font-size: 5rem; line-height: 1; margin: 20px; + padding: 0px; text-shadow: 2px 2px orangered, -2px -2px cornflowerblue; letter-spacing: 2px; width: fit-content; diff --git a/vite.config.ts b/vite.config.ts index 6c734bf..2e78733 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -5,5 +5,8 @@ export default defineConfig({ plugins: [sveltekit()], server: { allowedHosts: true, + fs: { + allow: ['./resume.pdf'] + } }, });