diff --git a/.scripts/ts_machete.js b/.scripts/ts_machete.js new file mode 100755 index 000000000..8ee667762 --- /dev/null +++ b/.scripts/ts_machete.js @@ -0,0 +1,285 @@ +#!/usr/bin/env bun + +/** + * ts_machete: Find (and optionally remove) unused dependencies across workspace packages. + * Mirrors the behaviour of `cargo machete` for TypeScript/JS monorepos. + * + * Usage: + * bun .scripts/ts_machete.js # report unused deps + * bun .scripts/ts_machete.js --fix # also remove them from package.json + */ + +import path from "node:path"; +import fs from "node:fs"; +import { Glob } from "bun"; + +const args = process.argv.slice(2); +const fix = args.includes("--fix"); + +// ANSI colours +const RED = "\x1b[31m"; +const YELLOW = "\x1b[33m"; +const GREEN = "\x1b[32m"; +const BOLD = "\x1b[1m"; +const DIM = "\x1b[2m"; +const RESET = "\x1b[0m"; + +const cwd = path.resolve(__dirname, ".."); +process.chdir(cwd); + +const rootPkg = JSON.parse(fs.readFileSync(path.join(cwd, "package.json"), "utf8")); + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +/** Node.js built-in module names (without the node: prefix). */ +const NODE_BUILTINS = new Set([ + "assert", + "buffer", + "child_process", + "cluster", + "console", + "constants", + "crypto", + "dgram", + "dns", + "domain", + "events", + "fs", + "http", + "http2", + "https", + "inspector", + "module", + "net", + "os", + "path", + "perf_hooks", + "process", + "punycode", + "querystring", + "readline", + "repl", + "stream", + "string_decoder", + "sys", + "timers", + "tls", + "trace_events", + "tty", + "url", + "util", + "v8", + "vm", + "worker_threads", + "zlib", +]); + +/** + * Given an import specifier, return the npm package name it belongs to, + * or null if it is a relative/local/built-in import that has no package.json entry. + * + * Returns the sentinel "__node_builtin__" for bare or node:-prefixed Node.js modules + * so that @types/node detection still works. + */ +function extractPackageName(specifier) { + // Relative imports and local path aliases (e.g. "#utils/log") + if (specifier.startsWith(".") || specifier.startsWith("#")) { + return null; + } + + // node: protocol (e.g. "node:fs") + if (specifier.startsWith("node:")) { + return "__node_builtin__"; + } + + const bare = specifier.split("/")[0]; + + // Bare Node.js built-ins imported without the node: prefix (legacy style) + if (NODE_BUILTINS.has(bare)) { + return "__node_builtin__"; + } + + // Scoped packages: "@scope/pkg" or "@scope/pkg/subpath" → "@scope/pkg" + if (specifier.startsWith("@")) { + const parts = specifier.split("/"); + if (parts.length >= 2) { + return `${parts[0]}/${parts[1]}`; + } + return null; + } + + // Regular packages: "lodash/fp" → "lodash" + return bare; +} + +/** Build-output directory prefixes to exclude when scanning source files. */ +const EXCLUDED_PREFIXES = ["node_modules/", "js/", "dist/", "build/", ".cache/"]; + +/** Return all TS/JS source file paths inside a package directory. */ +function getSourceFiles(pkgDir) { + const glob = new Glob("**/*.{ts,tsx,js,jsx,mts,cts,mjs,cjs}"); + const files = []; + + for (const rel of glob.scanSync(pkgDir)) { + if (EXCLUDED_PREFIXES.some((prefix) => rel.startsWith(prefix))) { + continue; + } + files.push(path.join(pkgDir, rel)); + } + + return files; +} + +// Pre-compiled patterns for extracting import specifiers from source text. +// We match three syntactic forms: +// 1. Static imports/exports: import ... from "pkg" / export ... from "pkg" +// 2. Dynamic imports: import("pkg") +// 3. CommonJS require: require("pkg") +const IMPORT_PATTERNS = [ + /\bfrom\s+["']([^"'\s]+)["']/gm, + /\bimport\(["']([^"'\s]+)["']\)/gm, + /\brequire\(["']([^"'\s]+)["']\)/gm, +]; + +/** + * Scan all source files in pkgDir and return the set of npm package names + * that are actually imported. + */ +function findUsedPackages(pkgDir) { + const used = new Set(); + const files = getSourceFiles(pkgDir); + + for (const file of files) { + let content; + try { + content = fs.readFileSync(file, "utf8"); + } catch { + continue; + } + + for (const pattern of IMPORT_PATTERNS) { + pattern.lastIndex = 0; + let match; + while ((match = pattern.exec(content)) !== null) { + const pkgName = extractPackageName(match[1]); + if (pkgName !== null) { + used.add(pkgName); + } + } + } + } + + return used; +} + +/** + * Determine whether a listed dependency is "used", given the set of packages + * actually imported in the source tree. + * + * Special handling for @types/* packages: "@types/foo" is considered used when: + * - "foo" itself appears in imports (TypeScript automatically uses @types/foo), OR + * - depName is "@types/node" and any Node.js built-in is imported. + */ +function isDepUsed(depName, usedPackages) { + if (depName.startsWith("@types/")) { + const underlying = depName.slice("@types/".length); + + if (underlying === "node") { + return usedPackages.has("__node_builtin__"); + } + + // "@types/react-router-dom" → underlying "react-router-dom" + return usedPackages.has(underlying); + } + + return usedPackages.has(depName); +} + +// --------------------------------------------------------------------------- +// Main +// --------------------------------------------------------------------------- + +let totalUnused = 0; +let totalFixed = 0; +let packageCount = 0; + +for (const workspacePattern of rootPkg.workspaces) { + const glob = new Glob(workspacePattern + "*/package.json"); + + for (const pkgPath of glob.scanSync(".")) { + // Exclude packages nested inside node_modules (the workspace glob pattern + // produces "typescript/**\/package.json" which recurses into node_modules). + if (pkgPath.includes("node_modules/")) { + continue; + } + + const pkgDir = path.dirname(pkgPath); + const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8")); + + const usedPackages = findUsedPackages(path.join(cwd, pkgDir)); + + const unusedBySection = {}; + + for (const section of ["dependencies", "devDependencies"]) { + if (!pkg[section]) { + continue; + } + + for (const depName of Object.keys(pkg[section])) { + if (!isDepUsed(depName, usedPackages)) { + (unusedBySection[section] ??= []).push(depName); + } + } + } + + const unusedCount = Object.values(unusedBySection).reduce((n, arr) => n + arr.length, 0); + + if (unusedCount === 0) { + continue; + } + + packageCount++; + console.log(`\n${BOLD}${pkgPath}${RESET} ${DIM}(${pkg.name ?? pkgDir})${RESET}`); + + for (const [section, deps] of Object.entries(unusedBySection)) { + console.log(` ${DIM}${section}:${RESET}`); + for (const dep of deps) { + console.log(` ${RED}✗${RESET} ${dep}`); + totalUnused++; + + if (fix) { + delete pkg[section][dep]; + totalFixed++; + } + } + } + + if (fix && unusedCount > 0) { + fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, "\t")); + } + } +} + +// Summary +console.log(""); + +if (totalUnused === 0) { + console.log(`${GREEN}${BOLD}✓ No unused dependencies found.${RESET}`); +} else { + const depWord = totalUnused === 1 ? "dependency" : "dependencies"; + + if (fix) { + console.log( + `${GREEN}${BOLD}✓ Removed ${totalFixed} unused ${depWord} across ${packageCount} package(s).${RESET}`, + ); + } else { + console.log( + `${YELLOW}${BOLD}⚠ Found ${totalUnused} unused ${depWord} across ${packageCount} package(s).${RESET}`, + ); + console.log(`${DIM} Run with --fix to remove them automatically.${RESET}`); + } +} + +process.exit(totalUnused > 0 && !fix ? 1 : 0); diff --git a/bun.lock b/bun.lock index 37ebfe1d3..de7265349 100644 --- a/bun.lock +++ b/bun.lock @@ -92,10 +92,9 @@ "json5": "catalog:", "lodash": "catalog:", "luxon": "catalog:", - "mei-logger": "catalog:", "monk": "catalog:", "node-fetch": "catalog:", - "pino": "^10.3.1", + "pino": "catalog:", "prudence": "catalog:", "seq-logging": "catalog:", "tachi-common": "workspace:*", @@ -333,7 +332,6 @@ "html-entities": "catalog:", "iconv-lite": "catalog:", "lodash.get": "catalog:", - "mei-logger": "catalog:", "monk": "catalog:", "node-fetch": "catalog:", "prudence": "catalog:", @@ -401,7 +399,7 @@ "node-html-parser": "catalog:", "nodemailer": "catalog:", "pg": "catalog:", - "pino": "^10.3.1", + "pino": "catalog:", "prudence": "catalog:", "rate-limit-redis": "catalog:", "redis": "catalog:", @@ -446,7 +444,6 @@ "bms-table-loader": "catalog:", "commander": "catalog:", "fast-xml-parser": "catalog:", - "mei-logger": "catalog:", "node-fetch": "catalog:", "tachi-common": "workspace:*", "winston": "catalog:", @@ -503,6 +500,7 @@ "@types/google-protobuf": "^3.15.12", "@types/history": "4.7.11", "@types/humanize-duration": "^3.27.1", + "@types/jest": "^26.0.23", "@types/json5": "2.2.0", "@types/lodash": "4.14.172", "@types/lodash.get": "^4.4.7", @@ -511,7 +509,7 @@ "@types/mongodb": "3.6.20", "@types/multer": "1.4.7", "@types/natural-compare": "^1.4.1", - "@types/node": "18.11.18", + "@types/node": "*", "@types/node-fetch": "2.5.12", "@types/nodemailer": "^6.4.4", "@types/pg": "^8.11.11", @@ -527,8 +525,8 @@ "@types/semver": "^7.3.9", "@types/supertest": "2.0.11", "@types/tap": "15.0.5", - "@typescript-eslint/eslint-plugin": "^8.23.0", - "@typescript-eslint/parser": "^8.23.0", + "@typescript-eslint/eslint-plugin": "^4.27.0", + "@typescript-eslint/parser": "^4.27.0", "@typescript-eslint/utils": "^8.24.1", "@typescript/native-preview": "7.0.0-dev.20260309.1", "@valuabletouch/winston-seq": "1.3.0", @@ -556,9 +554,12 @@ "discord.js": "13.6.0", "dotenv": "16.0.0", "encoding-japanese": "^1.0.30", + "eslint": "^7.29.0", "eslint-config-prettier": "^9.1.0", + "eslint-config-standard": "^16.0.3", "eslint-import-resolver-typescript": "^3.7.0", "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jest": "^24.3.6", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-perfectionist": "^3.9.1", "eslint-plugin-react": "^7.37.4", @@ -591,6 +592,7 @@ "isexe": "^2.0.0", "istanbul-lib-processinfo": "^2.0.2", "jackspeak": "^1.4.0", + "jest": "^27.0.4", "json-2-csv": "3.14.4", "json5": "2.2.0", "kysely": "^0.27.5", @@ -598,7 +600,6 @@ "lodash": "4.17.21", "lodash.get": "^4.4.2", "luxon": "^2.3.1", - "mei-logger": "^1.0.1", "minipass": "^3.1.1", "mkdirp": "^1.0.4", "mongodb": "3.6.3", @@ -617,6 +618,7 @@ "nyc": "^15.1.0", "opener": "^1.5.1", "pg": "^8.13.3", + "pino": "^10.3.1", "prettier": "3.2.5", "pretty-bytes": "5.6.0", "process-on-spawn": "^1.0.0", @@ -643,6 +645,7 @@ "seq-logging": "1.1.1", "signal-exit": "^3.0.0", "source-map-support": "^0.5.16", + "standard": "^16.0.3", "supertest": "6.2.2", "sync-fetch": "^0.3.1", "tap-mocha-reporter": "^5.0.0", @@ -650,10 +653,12 @@ "tap-yaml": "^1.0.0", "tcompare": "^5.0.6", "treport": "^2.0.2", + "ts-jest": "^27.0.3", "ts-node": "^8.5.2", "ts-protoc-gen": "^0.15.0", "tsconfig-paths": "3.12.0", - "typescript": "^3.7.2", + "tsd": "^0.17.0", + "typescript": "^4.3.4", "typescript-eslint": "^8.24.1", "uuidv7": "^1.1.0", "vite": "^3.0.7", @@ -1460,25 +1465,27 @@ "@types/yoga-layout": ["@types/yoga-layout@1.9.2", "", {}, "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.56.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/type-utils": "8.56.1", "@typescript-eslint/utils": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.56.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@4.33.0", "", { "dependencies": { "@typescript-eslint/experimental-utils": "4.33.0", "@typescript-eslint/scope-manager": "4.33.0", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "peerDependencies": { "@typescript-eslint/parser": "^4.0.0", "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.56.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg=="], + "@typescript-eslint/experimental-utils": ["@typescript-eslint/experimental-utils@4.33.0", "", { "dependencies": { "@types/json-schema": "^7.0.7", "@typescript-eslint/scope-manager": "4.33.0", "@typescript-eslint/types": "4.33.0", "@typescript-eslint/typescript-estree": "4.33.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, "peerDependencies": { "eslint": "*" } }, "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@4.33.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "4.33.0", "@typescript-eslint/types": "4.33.0", "@typescript-eslint/typescript-estree": "4.33.0", "debug": "^4.3.1" }, "peerDependencies": { "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA=="], "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.56.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.56.1", "@typescript-eslint/types": "^8.56.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1" } }, "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w=="], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@4.33.0", "", { "dependencies": { "@typescript-eslint/types": "4.33.0", "@typescript-eslint/visitor-keys": "4.33.0" } }, "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ=="], "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.56.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ=="], "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/utils": "8.56.1", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], + "@typescript-eslint/types": ["@typescript-eslint/types@4.33.0", "", {}, "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.56.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.56.1", "@typescript-eslint/tsconfig-utils": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@4.33.0", "", { "dependencies": { "@typescript-eslint/types": "4.33.0", "@typescript-eslint/visitor-keys": "4.33.0", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA=="], "@typescript-eslint/utils": ["@typescript-eslint/utils@8.56.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw=="], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@4.33.0", "", { "dependencies": { "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" } }, "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg=="], "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260309.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260309.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260309.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260309.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260309.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260309.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260309.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260309.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-ZK+ExK7scBzUCAXCTtAwUm6QENJ+l3tCDQXNCly4WcGUvbIAWdaiNns4brganGN9nrxxRkC9Rx0CrxvIsn9zHA=="], @@ -2090,6 +2097,8 @@ "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], + "eslint-utils": ["eslint-utils@3.0.0", "", { "dependencies": { "eslint-visitor-keys": "^2.0.0" }, "peerDependencies": { "eslint": ">=5" } }, "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="], + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], "esm": ["esm@3.2.25", "", {}, "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA=="], @@ -2220,6 +2229,8 @@ "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], + "functional-red-black-tree": ["functional-red-black-tree@1.0.1", "", {}, "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g=="], + "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], "generator-function": ["generator-function@2.0.1", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="], @@ -2592,8 +2603,6 @@ "media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], - "mei-logger": ["mei-logger@1.0.3", "", { "dependencies": { "winston": "^3.3.3" } }, "sha512-s6dMacOWAfDSQ58idaRpiE/xCVsbHSrixnGs9YZbafLNgZHZ9/ByTsGdogU1GwpGKFxgc9QRDVqKxfUA3FhkHA=="], - "memoize-one": ["memoize-one@6.0.0", "", {}, "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="], "memory-pager": ["memory-pager@1.5.0", "", {}, "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="], @@ -3030,6 +3039,8 @@ "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + "regexpp": ["regexpp@3.2.0", "", {}, "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg=="], + "reinterval": ["reinterval@1.1.0", "", {}, "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ=="], "relateurl": ["relateurl@0.2.7", "", {}, "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog=="], @@ -3334,6 +3345,8 @@ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "tsutils": ["tsutils@3.21.0", "", { "dependencies": { "tslib": "^1.8.1" }, "peerDependencies": { "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA=="], + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], "tweetnacl": ["tweetnacl@0.14.5", "", {}, "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="], @@ -3636,11 +3649,21 @@ "@types/superagent/form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], - "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + "@typescript-eslint/experimental-utils/eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "@typescript-eslint/project-service/@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], - "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + "@typescript-eslint/type-utils/@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], + + "@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.56.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.56.1", "@typescript-eslint/tsconfig-utils": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg=="], + + "@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1" } }, "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w=="], + + "@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], + + "@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.56.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.56.1", "@typescript-eslint/tsconfig-utils": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg=="], + + "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="], "@vitejs/plugin-react/@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], @@ -3738,12 +3761,16 @@ "eslint-plugin-import/tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], + "eslint-plugin-perfectionist/@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], + "eslint-plugin-perfectionist/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], "eslint-plugin-react/prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="], + "express/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "express-session/cookie": ["cookie@0.4.1", "", {}, "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="], @@ -3986,6 +4013,14 @@ "tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "tsutils/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + + "typescript-eslint/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.56.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/type-utils": "8.56.1", "@typescript-eslint/utils": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.56.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A=="], + + "typescript-eslint/@typescript-eslint/parser": ["@typescript-eslint/parser@8.56.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg=="], + + "typescript-eslint/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.56.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.56.1", "@typescript-eslint/tsconfig-utils": "8.56.1", "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg=="], + "uvu/diff": ["diff@5.2.2", "", {}, "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A=="], "verror/core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="], @@ -4062,7 +4097,17 @@ "@types/minimatch/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], - "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + "@typescript-eslint/experimental-utils/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], + + "@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw=="], + + "@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + + "@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw=="], + + "@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw=="], + + "@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], "@vitejs/plugin-react/@babel/core/convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], @@ -4178,6 +4223,24 @@ "test-exclude/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1" } }, "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w=="], + + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw=="], + + "typescript-eslint/@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "@typescript-eslint/visitor-keys": "8.56.1" } }, "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w=="], + + "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], + + "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.56.1", "", { "dependencies": { "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "vite-node/vite/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], "vite-node/vite/rollup": ["rollup@4.59.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.59.0", "@rollup/rollup-android-arm64": "4.59.0", "@rollup/rollup-darwin-arm64": "4.59.0", "@rollup/rollup-darwin-x64": "4.59.0", "@rollup/rollup-freebsd-arm64": "4.59.0", "@rollup/rollup-freebsd-x64": "4.59.0", "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", "@rollup/rollup-linux-arm-musleabihf": "4.59.0", "@rollup/rollup-linux-arm64-gnu": "4.59.0", "@rollup/rollup-linux-arm64-musl": "4.59.0", "@rollup/rollup-linux-loong64-gnu": "4.59.0", "@rollup/rollup-linux-loong64-musl": "4.59.0", "@rollup/rollup-linux-ppc64-gnu": "4.59.0", "@rollup/rollup-linux-ppc64-musl": "4.59.0", "@rollup/rollup-linux-riscv64-gnu": "4.59.0", "@rollup/rollup-linux-riscv64-musl": "4.59.0", "@rollup/rollup-linux-s390x-gnu": "4.59.0", "@rollup/rollup-linux-x64-gnu": "4.59.0", "@rollup/rollup-linux-x64-musl": "4.59.0", "@rollup/rollup-openbsd-x64": "4.59.0", "@rollup/rollup-openharmony-arm64": "4.59.0", "@rollup/rollup-win32-arm64-msvc": "4.59.0", "@rollup/rollup-win32-ia32-msvc": "4.59.0", "@rollup/rollup-win32-x64-gnu": "4.59.0", "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg=="], @@ -4206,7 +4269,15 @@ "@types/minimatch/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + + "@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], "kanel/rimraf/glob/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], @@ -4234,6 +4305,18 @@ "test-exclude/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], + + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@8.56.1", "", {}, "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw=="], + + "typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "typescript-eslint/@typescript-eslint/parser/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "typescript-eslint/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + "vite-node/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], "vite-node/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], @@ -4250,6 +4333,10 @@ "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "kanel/rimraf/glob/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], "log-update/cli-cursor/restore-cursor/onetime/mimic-fn": ["mimic-fn@1.2.0", "", {}, "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="], @@ -4260,6 +4347,8 @@ "pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "typescript-eslint/@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "yargs/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "kanel/rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index ecbf22083..a519664d5 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -1,6 +1,6 @@ services: - mongo: - container_name: mongo + tachi-mongo: + container_name: tachi-mongo command: "--config /etc/mongod.conf" image: mongo:5 restart: unless-stopped @@ -10,17 +10,17 @@ services: - tachi-volume:/data/db - "./dev/mongod.conf:/etc/mongod.conf" - redis: - container_name: redis + tachi-redis: + container_name: tachi-redis command: redis-server --save 60 1 --loglevel warning - image: redis:6 + image: redis:7.4.1 restart: unless-stopped ports: - "6379:6379" volumes: - tachi-redis:/data - postgres: - container_name: postgres + tachi-postgres: + container_name: tachi-postgres image: postgres:18 restart: unless-stopped ports: @@ -32,6 +32,18 @@ services: volumes: - tachi-postgres:/var/lib/postgresql - "./dev/postgres-init.sql:/docker-entrypoint-initdb.d/init.sql" + tachi-s3: + container_name: tachi-s3 + image: quay.io/minio/minio:RELEASE.2024-10-29T16-01-48Z + environment: + MINIO_ROOT_USER: minio + MINIO_ROOT_PASSWORD: password + ports: + - "9000:9000" + - "9001:9001" + volumes: + - tachi-minio:/data + entrypoint: /usr/bin/minio server /data --console-address=':9001' tachi-dev: user: "1000:1000" @@ -56,3 +68,4 @@ volumes: tachi-redis: tachi-logs: tachi-postgres: + tachi-minio: \ No newline at end of file diff --git a/package.json b/package.json index 5fd8d62d9..53935f4d8 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,6 @@ "discord.js": "13.6.0", "express": "4.20.0", "json5": "2.2.0", - "mei-logger": "^1.0.1", "monk": "^7.3.4", "node-fetch": "2.6.7", "seq-logging": "1.1.1", diff --git a/typescript/bot/package.json b/typescript/bot/package.json index 14fc3705f..2a3ad8f0e 100644 --- a/typescript/bot/package.json +++ b/typescript/bot/package.json @@ -38,7 +38,6 @@ "json5": "catalog:", "lodash": "catalog:", "luxon": "catalog:", - "mei-log": "catalog:", "monk": "catalog:", "node-fetch": "catalog:", "pino": "catalog:", diff --git a/typescript/bot/src/config.ts b/typescript/bot/src/config.ts index 4120c4ba9..5afeae73a 100644 --- a/typescript/bot/src/config.ts +++ b/typescript/bot/src/config.ts @@ -43,7 +43,6 @@ function ParseBotConfig(fileLoc = "conf.json5"): BotConfig { try { const contents = fs.readFileSync(fileLoc, "utf-8"); - data = JSON5.parse(contents); } catch (err) { log.error({ err }, "Failed to find/parse a valid conf.json5 file. Cannot boot."); @@ -148,7 +147,7 @@ async function GetServerConfig() { // this fetch is complete, and it saves us having to do a singleton pattern or worse. // This *should* be solved with top-level-await, but good luck actually getting // typescript to output the right stuff here. - + const res = await fetch(`${BotConfig.TACHI_SERVER_LOCATION}/api/v1/config`).then((res) => res.json(), ); diff --git a/typescript/bot/src/database/queries.ts b/typescript/bot/src/database/queries.ts index f092cfcab..d8283d61e 100644 --- a/typescript/bot/src/database/queries.ts +++ b/typescript/bot/src/database/queries.ts @@ -6,7 +6,6 @@ import type { DiscordUserMapDocument } from "./documents"; import db from "./mongo"; - export function GetUserAndTokenForDiscordID( discordID: string, ): Promise { diff --git a/typescript/bot/src/server/middleware.ts b/typescript/bot/src/server/middleware.ts index e52a38a20..c95ba1e76 100644 --- a/typescript/bot/src/server/middleware.ts +++ b/typescript/bot/src/server/middleware.ts @@ -4,7 +4,6 @@ import { log } from "#utils/log"; import { BotConfig } from "../config"; - /** * Middleware that checks that a webhook request has Authorization set to * exactly "Bearer $CLIENT_SECRET". @@ -34,9 +33,7 @@ export const ValidateWebhookRequest: RequestHandler = (req, res, next) => { } if (value !== BotConfig.OAUTH.CLIENT_SECRET) { - log.warn( - `Recieved invalid auth value from ${req.ip}. Has the client secret been changed?`, - ); + log.warn(`Recieved invalid auth value from ${req.ip}. Has the client secret been changed?`); return res.status(403).json({ success: false, description: "Unauthorised.", diff --git a/typescript/bot/src/server/server.ts b/typescript/bot/src/server/server.ts index 11aad45a8..ea4496902 100644 --- a/typescript/bot/src/server/server.ts +++ b/typescript/bot/src/server/server.ts @@ -15,7 +15,6 @@ import { ValidateWebhookRequest } from "./middleware"; export const app: Express = express(); - app.use(express.json()); // Let NGINX work its magic. @@ -88,8 +87,7 @@ app.get("/oauth/callback", async (req, res) => { const whoamiRes = await TachiServerV1Get("/users/me", apiToken); if (!whoamiRes.success) { - log.error({ discordID } - , "Failed to request user with token we just got?"); + log.error({ discordID }, "Failed to request user with token we just got?"); return res .status(500) .send( @@ -208,7 +206,10 @@ const MainExpressErrorHandler: express.ErrorRequestHandler = (err, req, res, _ne const expErr: ExpressJSONErr = err as ExpressJSONErr; if (expErr.status === 400 && "body" in expErr) { - log.info({ url: req.originalUrl, err: err }, `Error in parsing JSON in request body from ${req.url}`); + log.info( + { url: req.originalUrl, err: err }, + `Error in parsing JSON in request body from ${req.url}`, + ); return res.status(400).send({ success: false, description: err.message }); } diff --git a/typescript/bot/src/utils/fetchTachi.ts b/typescript/bot/src/utils/fetchTachi.ts index c6da2dd32..7335a33b4 100644 --- a/typescript/bot/src/utils/fetchTachi.ts +++ b/typescript/bot/src/utils/fetchTachi.ts @@ -7,7 +7,10 @@ import { URLSearchParams } from "url"; import { BotConfig } from "../config"; import { VERSION_STR } from "../version"; -export type APIResponse = (({ body: null } & UnsuccessfulAPIResponse) | SuccessfulAPIResponse) & { +export type APIResponse = ( + | ({ body: null } & UnsuccessfulAPIResponse) + | SuccessfulAPIResponse +) & { statusCode: integer; }; @@ -132,9 +135,7 @@ export function PrependTachiUrl(url: string, version: "1" = "1"): string { */ function LogRequestResult(logUrl: string, res: APIResponse): void { if (!res.success) { - log.warn( - `Request ${logUrl} was unsuccessful: ${res.description} (${res.statusCode})`, - ); + log.warn(`Request ${logUrl} was unsuccessful: ${res.description} (${res.statusCode})`); } else { log.debug(`Request ${logUrl} was successful: ${res.description} (${res.statusCode})`); } diff --git a/typescript/bot/src/version.ts b/typescript/bot/src/version.ts index e17d9a6b9..acd4545e7 100644 --- a/typescript/bot/src/version.ts +++ b/typescript/bot/src/version.ts @@ -2,12 +2,6 @@ const MAJOR = 2; const MINOR = 2; const PATCH = 0; -export const VERSION_INFO = { - major: MAJOR, - minor: MINOR, - patch: PATCH, -}; - export const VERSION_STR = `${MAJOR}.${MINOR}.${PATCH}`; export const VERSION_PRETTY = `v${VERSION_STR}`; diff --git a/typescript/bot/src/webhookHandlers/classUpdate.ts b/typescript/bot/src/webhookHandlers/classUpdate.ts index 7cb90a316..d75d8d458 100644 --- a/typescript/bot/src/webhookHandlers/classUpdate.ts +++ b/typescript/bot/src/webhookHandlers/classUpdate.ts @@ -14,7 +14,7 @@ import { client } from "../main"; import { GetUGPTStats, GetUserInfo } from "../utils/apiRequests"; import { CreateEmbed } from "../utils/embeds"; import { PrependTachiUrl } from "../utils/fetchTachi"; -import { log } from "#utils/log" +import { log } from "#utils/log"; import { FormatClass, GetGameChannel } from "../utils/misc"; export async function HandleClassUpdateV1( diff --git a/typescript/bot/src/webhookHandlers/goalsAchieved.ts b/typescript/bot/src/webhookHandlers/goalsAchieved.ts index 1eae8132c..b52142f57 100644 --- a/typescript/bot/src/webhookHandlers/goalsAchieved.ts +++ b/typescript/bot/src/webhookHandlers/goalsAchieved.ts @@ -1,6 +1,6 @@ import { BotConfig } from "#config"; import { PrependTachiUrl } from "#utils/fetchTachi"; -import { log } from "#utils/log" +import { log } from "#utils/log"; import { GetGameGroupConfig, type GoalDocument, diff --git a/typescript/client/.tsbuildinfo b/typescript/client/.tsbuildinfo deleted file mode 100644 index 6912bc1a3..000000000 --- a/typescript/client/.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"version":"7.0.0-dev.20260309.1","root":[60,[293,297],[310,312],[336,358],[483,493],[495,497],[511,537],[547,548],[565,572],[574,575],[617,626],[628,637],[640,713],789,[875,915],[928,966],[968,1001],[1003,1030],[1032,1041],[1043,1046],1095,[1098,1131],[1153,1184],[1186,1198]],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2021.d.ts","lib.es2022.d.ts","lib.dom.d.ts","lib.dom.iterable.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.es2021.promise.d.ts","lib.es2021.string.d.ts","lib.es2021.weakref.d.ts","lib.es2021.intl.d.ts","lib.es2022.array.d.ts","lib.es2022.error.d.ts","lib.es2022.intl.d.ts","lib.es2022.object.d.ts","lib.es2022.string.d.ts","lib.es2022.regexp.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","./src/declarations.d.ts","../node_modules/@types/react/global.d.ts","../node_modules/csstype/index.d.ts","../node_modules/@types/prop-types/index.d.ts","../node_modules/@types/react/index.d.ts","../node_modules/@types/react/jsx-runtime.d.ts","../node_modules/formik/dist/types.d.ts","../node_modules/formik/dist/Formik.d.ts","../node_modules/formik/dist/Field.d.ts","../node_modules/formik/dist/Form.d.ts","../node_modules/formik/dist/withFormik.d.ts","../node_modules/formik/dist/FieldArray.d.ts","../node_modules/formik/dist/utils.d.ts","../node_modules/formik/dist/connect.d.ts","../node_modules/formik/dist/ErrorMessage.d.ts","../node_modules/formik/dist/FormikContext.d.ts","../node_modules/formik/dist/FastField.d.ts","../node_modules/formik/dist/index.d.ts","../node_modules/zod/v4/core/json-schema.d.cts","../node_modules/zod/v4/core/standard-schema.d.cts","../node_modules/zod/v4/core/registries.d.cts","../node_modules/zod/v4/core/to-json-schema.d.cts","../node_modules/zod/v4/core/util.d.cts","../node_modules/zod/v4/core/versions.d.cts","../node_modules/zod/v4/core/schemas.d.cts","../node_modules/zod/v4/core/checks.d.cts","../node_modules/zod/v4/core/errors.d.cts","../node_modules/zod/v4/core/core.d.cts","../node_modules/zod/v4/core/parse.d.cts","../node_modules/zod/v4/core/regexes.d.cts","../node_modules/zod/v4/locales/ar.d.cts","../node_modules/zod/v4/locales/az.d.cts","../node_modules/zod/v4/locales/be.d.cts","../node_modules/zod/v4/locales/bg.d.cts","../node_modules/zod/v4/locales/ca.d.cts","../node_modules/zod/v4/locales/cs.d.cts","../node_modules/zod/v4/locales/da.d.cts","../node_modules/zod/v4/locales/de.d.cts","../node_modules/zod/v4/locales/en.d.cts","../node_modules/zod/v4/locales/eo.d.cts","../node_modules/zod/v4/locales/es.d.cts","../node_modules/zod/v4/locales/fa.d.cts","../node_modules/zod/v4/locales/fi.d.cts","../node_modules/zod/v4/locales/fr.d.cts","../node_modules/zod/v4/locales/fr-CA.d.cts","../node_modules/zod/v4/locales/he.d.cts","../node_modules/zod/v4/locales/hu.d.cts","../node_modules/zod/v4/locales/hy.d.cts","../node_modules/zod/v4/locales/id.d.cts","../node_modules/zod/v4/locales/is.d.cts","../node_modules/zod/v4/locales/it.d.cts","../node_modules/zod/v4/locales/ja.d.cts","../node_modules/zod/v4/locales/ka.d.cts","../node_modules/zod/v4/locales/kh.d.cts","../node_modules/zod/v4/locales/km.d.cts","../node_modules/zod/v4/locales/ko.d.cts","../node_modules/zod/v4/locales/lt.d.cts","../node_modules/zod/v4/locales/mk.d.cts","../node_modules/zod/v4/locales/ms.d.cts","../node_modules/zod/v4/locales/nl.d.cts","../node_modules/zod/v4/locales/no.d.cts","../node_modules/zod/v4/locales/ota.d.cts","../node_modules/zod/v4/locales/ps.d.cts","../node_modules/zod/v4/locales/pl.d.cts","../node_modules/zod/v4/locales/pt.d.cts","../node_modules/zod/v4/locales/ru.d.cts","../node_modules/zod/v4/locales/sl.d.cts","../node_modules/zod/v4/locales/sv.d.cts","../node_modules/zod/v4/locales/ta.d.cts","../node_modules/zod/v4/locales/th.d.cts","../node_modules/zod/v4/locales/tr.d.cts","../node_modules/zod/v4/locales/ua.d.cts","../node_modules/zod/v4/locales/uk.d.cts","../node_modules/zod/v4/locales/ur.d.cts","../node_modules/zod/v4/locales/uz.d.cts","../node_modules/zod/v4/locales/vi.d.cts","../node_modules/zod/v4/locales/zh-CN.d.cts","../node_modules/zod/v4/locales/zh-TW.d.cts","../node_modules/zod/v4/locales/yo.d.cts","../node_modules/zod/v4/locales/index.d.cts","../node_modules/zod/v4/core/doc.d.cts","../node_modules/zod/v4/core/api.d.cts","../node_modules/zod/v4/core/json-schema-processors.d.cts","../node_modules/zod/v4/core/json-schema-generator.d.cts","../node_modules/zod/v4/core/index.d.cts","../node_modules/zod/v4/classic/errors.d.cts","../node_modules/zod/v4/classic/parse.d.cts","../node_modules/zod/v4/classic/schemas.d.cts","../node_modules/zod/v4/classic/checks.d.cts","../node_modules/zod/v4/classic/compat.d.cts","../node_modules/zod/v4/classic/from-json-schema.d.cts","../node_modules/zod/v4/classic/iso.d.cts","../node_modules/zod/v4/classic/coerce.d.cts","../node_modules/zod/v4/classic/external.d.cts","../node_modules/zod/index.d.cts","../common/build/types/import-types.d.ts","../common/build/types/api.d.ts","../node_modules/@types/node/compatibility/disposable.d.ts","../node_modules/@types/node/compatibility/indexable.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/compatibility/index.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/@types/node/web-globals/events.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.generated.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@types/bson/index.d.ts","../node_modules/@types/mongodb/index.d.ts","../common/build/types/notifications.d.ts","../common/build/types/documents.d.ts","../common/build/types/metrics.d.ts","../common/build/types/utils.d.ts","../common/build/types/batch-manual.d.ts","../common/build/types.d.ts","../common/build/types/game-config-utils.d.ts","../common/build/types/internals.d.ts","../common/build/types/game-config.d.ts","../common/build/config/config-utils.d.ts","../node_modules/prudence/js/error.d.ts","../node_modules/@types/range-parser/index.d.ts","../node_modules/@types/qs/index.d.ts","../node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/prudence/js/types.d.ts","../node_modules/prudence/js/validator.d.ts","../node_modules/prudence/js/static.d.ts","../node_modules/prudence/js/util.d.ts","../node_modules/prudence/js/assert.d.ts","../node_modules/prudence/js/main.d.ts","../common/build/constants/grade-boundaries.d.ts","../common/build/utils/util.d.ts","../common/build/config/game-support/bms.d.ts","../common/build/config/config.d.ts","../common/build/constants/bms-tables.d.ts","../common/build/constants/colour-set.d.ts","../common/build/constants/game.d.ts","../common/build/constants/import-types.d.ts","../common/build/constants/permissions.d.ts","../common/build/lib/schemas.d.ts","../common/build/seeds/types.d.ts","../common/build/webhooks.d.ts","../common/build/index.d.ts","./src/types/react.ts","./src/context/UserContext.tsx","./src/util/humanise-error.ts","./src/types/bootstrap.ts","./src/components/util/Icon.tsx","../node_modules/react-hot-toast/dist/core/types.d.ts","../node_modules/react-hot-toast/dist/core/toast.d.ts","../node_modules/react-hot-toast/dist/core/use-toaster.d.ts","../node_modules/react-hot-toast/dist/components/toast-bar.d.ts","../node_modules/goober/goober.d.ts","../node_modules/react-hot-toast/dist/components/error.d.ts","../node_modules/react-hot-toast/dist/components/loader.d.ts","../node_modules/react-hot-toast/dist/components/checkmark.d.ts","../node_modules/react-hot-toast/dist/components/toast-icon.d.ts","../node_modules/react-hot-toast/dist/components/toaster.d.ts","../node_modules/react-hot-toast/dist/core/store.d.ts","../node_modules/react-hot-toast/dist/index.d.ts","./src/util/toaster.tsx","./src/util/api.ts","./src/lib/config.ts","../node_modules/@restart/ui/esm/types.d.ts","../node_modules/react-bootstrap/esm/helpers.d.ts","../node_modules/@popperjs/core/lib/enums.d.ts","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.d.ts","../node_modules/@popperjs/core/lib/modifiers/flip.d.ts","../node_modules/@popperjs/core/lib/modifiers/hide.d.ts","../node_modules/@popperjs/core/lib/modifiers/offset.d.ts","../node_modules/@popperjs/core/lib/modifiers/eventListeners.d.ts","../node_modules/@popperjs/core/lib/modifiers/computeStyles.d.ts","../node_modules/@popperjs/core/lib/modifiers/arrow.d.ts","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.d.ts","../node_modules/@popperjs/core/lib/modifiers/applyStyles.d.ts","../node_modules/@popperjs/core/lib/types.d.ts","../node_modules/@popperjs/core/lib/modifiers/index.d.ts","../node_modules/@popperjs/core/lib/utils/detectOverflow.d.ts","../node_modules/@popperjs/core/lib/createPopper.d.ts","../node_modules/@popperjs/core/lib/popper-lite.d.ts","../node_modules/@popperjs/core/lib/popper.d.ts","../node_modules/@popperjs/core/lib/index.d.ts","../node_modules/@popperjs/core/index.d.ts","../node_modules/@restart/ui/esm/usePopper.d.ts","../node_modules/react-bootstrap/esm/types.d.ts","../node_modules/react-bootstrap/esm/Spinner.d.ts","./src/components/util/Loading.tsx","./src/components/layout/misc/SplashImage.tsx","./src/components/layout/screens/SplashScreen.tsx","./src/components/layout/screens/LoadingScreen.tsx","./src/context/AllLUGPTStatsContext.tsx","./src/context/BannedContext.tsx","./src/context/NotificationsContext.tsx","./src/components/tables/cells/CHUNITHMJudgementCell.tsx","./src/util/color-opacity.ts","./src/components/tables/cells/CHUNITHMLampCell.tsx","./src/components/tables/cells/ITGJudgementCell.tsx","./src/components/tables/cells/JubeatJudgementCell.tsx","./src/components/tables/cells/JubeatScoreCell.tsx","./src/components/tables/cells/JubilityCell.tsx","./src/components/tables/cells/LampCell.tsx","./src/components/tables/cells/MaimaiDXJudgementCell.tsx","./src/components/tables/cells/MaimaiJudgementCell.tsx","./src/components/tables/cells/MillionsScoreCell.tsx","./src/components/tables/cells/MusecaJudgementCell.tsx","./src/components/tables/cells/OngekiDamageCell.tsx","./src/components/tables/cells/OngekiJudgementCell.tsx","./src/components/tables/cells/OngekiLampCell.tsx","./src/components/tables/cells/OngekiPlatinumCell.tsx","../node_modules/nanoid/index.d.ts","../node_modules/react-bootstrap/esm/AccordionContext.d.ts","../node_modules/react-bootstrap/esm/AccordionButton.d.ts","../node_modules/@types/react-transition-group/Transition.d.ts","../node_modules/react-bootstrap/esm/Collapse.d.ts","../node_modules/react-bootstrap/esm/AccordionCollapse.d.ts","../node_modules/react-bootstrap/esm/AccordionItem.d.ts","../node_modules/react-bootstrap/esm/AccordionHeader.d.ts","../node_modules/react-bootstrap/esm/AccordionBody.d.ts","../node_modules/react-bootstrap/esm/Accordion.d.ts","../node_modules/react-bootstrap/esm/CloseButton.d.ts","../node_modules/@restart/ui/esm/Anchor.d.ts","../node_modules/react-bootstrap/esm/Alert.d.ts","../node_modules/react-bootstrap/esm/Anchor.d.ts","../node_modules/react-bootstrap/esm/Badge.d.ts","../node_modules/react-bootstrap/esm/BreadcrumbItem.d.ts","../node_modules/react-bootstrap/esm/Breadcrumb.d.ts","../node_modules/@restart/ui/esm/Button.d.ts","../node_modules/react-bootstrap/esm/Button.d.ts","../node_modules/react-bootstrap/esm/ButtonGroup.d.ts","../node_modules/react-bootstrap/esm/ButtonToolbar.d.ts","../node_modules/react-bootstrap/esm/CardImg.d.ts","../node_modules/react-bootstrap/esm/CardHeader.d.ts","../node_modules/react-bootstrap/esm/Card.d.ts","../node_modules/react-bootstrap/esm/CardGroup.d.ts","../node_modules/react-bootstrap/esm/CarouselItem.d.ts","../node_modules/react-bootstrap/esm/Carousel.d.ts","../node_modules/react-bootstrap/esm/Col.d.ts","../node_modules/@restart/ui/esm/DropdownContext.d.ts","../node_modules/@restart/ui/esm/useClickOutside.d.ts","../node_modules/@restart/ui/esm/DropdownMenu.d.ts","../node_modules/@restart/ui/esm/DropdownToggle.d.ts","../node_modules/@restart/ui/esm/DropdownItem.d.ts","../node_modules/@restart/ui/esm/Dropdown.d.ts","../node_modules/react-bootstrap/esm/DropdownContext.d.ts","../node_modules/react-bootstrap/esm/DropdownToggle.d.ts","../node_modules/react-bootstrap/esm/DropdownMenu.d.ts","../node_modules/react-bootstrap/esm/DropdownItem.d.ts","../node_modules/react-bootstrap/esm/Dropdown.d.ts","../node_modules/react-bootstrap/esm/DropdownButton.d.ts","../node_modules/react-bootstrap/esm/Fade.d.ts","../node_modules/react-bootstrap/esm/FormGroup.d.ts","../node_modules/react-bootstrap/esm/Feedback.d.ts","../node_modules/react-bootstrap/esm/FormControl.d.ts","../node_modules/react-bootstrap/esm/FormCheckInput.d.ts","../node_modules/react-bootstrap/esm/FormCheckLabel.d.ts","../node_modules/react-bootstrap/esm/FormCheck.d.ts","../node_modules/react-bootstrap/esm/FormLabel.d.ts","../node_modules/react-bootstrap/esm/FormText.d.ts","../node_modules/react-bootstrap/esm/FormRange.d.ts","../node_modules/react-bootstrap/esm/FormSelect.d.ts","../node_modules/react-bootstrap/esm/FloatingLabel.d.ts","../node_modules/react-bootstrap/esm/Form.d.ts","../node_modules/react-bootstrap/esm/FormFloating.d.ts","../node_modules/react-bootstrap/esm/Container.d.ts","../node_modules/react-bootstrap/esm/Image.d.ts","../node_modules/react-bootstrap/esm/Figure.d.ts","../node_modules/react-bootstrap/esm/InputGroup.d.ts","../node_modules/@restart/ui/esm/NavItem.d.ts","../node_modules/@restart/ui/esm/Nav.d.ts","../node_modules/react-bootstrap/esm/ListGroupItem.d.ts","../node_modules/react-bootstrap/esm/ListGroup.d.ts","../node_modules/@restart/ui/esm/ModalManager.d.ts","../node_modules/@restart/ui/esm/useWaitForDOMRef.d.ts","../node_modules/@restart/ui/esm/ImperativeTransition.d.ts","../node_modules/@restart/ui/esm/Modal.d.ts","../node_modules/react-bootstrap/esm/AbstractModalHeader.d.ts","../node_modules/react-bootstrap/esm/ModalHeader.d.ts","../node_modules/react-bootstrap/esm/ModalDialog.d.ts","../node_modules/react-bootstrap/esm/Modal.d.ts","../node_modules/react-bootstrap/esm/ModalBody.d.ts","../node_modules/react-bootstrap/esm/ModalFooter.d.ts","../node_modules/react-bootstrap/esm/ModalTitle.d.ts","../node_modules/react-bootstrap/esm/NavLink.d.ts","../node_modules/react-bootstrap/esm/Nav.d.ts","../node_modules/react-bootstrap/esm/NavbarBrand.d.ts","../node_modules/react-bootstrap/esm/NavbarCollapse.d.ts","../node_modules/react-bootstrap/esm/OffcanvasHeader.d.ts","../node_modules/react-bootstrap/esm/Offcanvas.d.ts","../node_modules/react-bootstrap/esm/NavbarOffcanvas.d.ts","../node_modules/react-bootstrap/esm/NavbarToggle.d.ts","../node_modules/react-bootstrap/esm/Navbar.d.ts","../node_modules/react-bootstrap/esm/NavDropdown.d.ts","../node_modules/react-bootstrap/esm/NavItem.d.ts","../node_modules/react-bootstrap/esm/OffcanvasTitle.d.ts","../node_modules/react-bootstrap/esm/OffcanvasBody.d.ts","../node_modules/@restart/ui/esm/useRootClose.d.ts","../node_modules/@restart/ui/esm/Overlay.d.ts","../node_modules/react-bootstrap/esm/Overlay.d.ts","../node_modules/react-bootstrap/esm/OverlayTrigger.d.ts","../node_modules/react-bootstrap/esm/PageItem.d.ts","../node_modules/react-bootstrap/esm/Pagination.d.ts","../node_modules/react-bootstrap/esm/usePlaceholder.d.ts","../node_modules/react-bootstrap/esm/PlaceholderButton.d.ts","../node_modules/react-bootstrap/esm/Placeholder.d.ts","../node_modules/react-bootstrap/esm/Popover.d.ts","../node_modules/react-bootstrap/esm/PopoverHeader.d.ts","../node_modules/react-bootstrap/esm/PopoverBody.d.ts","../node_modules/react-bootstrap/esm/ProgressBar.d.ts","../node_modules/react-bootstrap/esm/Ratio.d.ts","../node_modules/react-bootstrap/esm/Row.d.ts","../node_modules/react-bootstrap/esm/SplitButton.d.ts","../node_modules/@react-aria/ssr/dist/types.d.ts","../node_modules/@restart/ui/esm/ssr.d.ts","../node_modules/react-bootstrap/esm/SSRProvider.d.ts","../node_modules/react-bootstrap/esm/createUtilityClasses.d.ts","../node_modules/react-bootstrap/esm/Stack.d.ts","../node_modules/react-bootstrap/esm/TabPane.d.ts","../node_modules/@restart/ui/esm/TabPanel.d.ts","../node_modules/@restart/ui/esm/Tabs.d.ts","../node_modules/react-bootstrap/esm/TabContainer.d.ts","../node_modules/react-bootstrap/esm/Tab.d.ts","../node_modules/react-bootstrap/esm/TabContent.d.ts","../node_modules/react-bootstrap/esm/Table.d.ts","../node_modules/react-bootstrap/esm/Tabs.d.ts","../node_modules/react-bootstrap/esm/ThemeProvider.d.ts","../node_modules/react-bootstrap/esm/ToastHeader.d.ts","../node_modules/react-bootstrap/esm/Toast.d.ts","../node_modules/react-bootstrap/esm/ToastBody.d.ts","../node_modules/react-bootstrap/esm/ToastContainer.d.ts","../node_modules/react-bootstrap/esm/ToggleButton.d.ts","../node_modules/react-bootstrap/esm/ToggleButtonGroup.d.ts","../node_modules/react-bootstrap/esm/Tooltip.d.ts","../node_modules/react-bootstrap/esm/index.d.ts","./src/components/layout/misc/QuickTooltip.tsx","./src/components/tables/components/MiniTable.tsx","./src/components/tables/cells/OngekiScoreRatingCell.tsx","./src/components/tables/cells/PopnJudgementCell.tsx","./src/components/tables/cells/PopnLampCell.tsx","./src/components/tables/cells/RatingCell.tsx","./src/components/tables/cells/ScoreCell.tsx","./src/components/tables/cells/WACCAJudgementCell.tsx","./src/util/sorts.ts","./src/components/util/Select.tsx","./src/components/util/SmallText.tsx","./node_modules/deepmerge/index.d.ts","./src/components/util/table/useZTable.tsx","./src/context/UserSettingsContext.tsx","./src/util/constants/breakpoints.ts","../node_modules/@types/lodash/common/common.d.ts","../node_modules/@types/lodash/common/array.d.ts","../node_modules/@types/lodash/common/collection.d.ts","../node_modules/@types/lodash/common/date.d.ts","../node_modules/@types/lodash/common/function.d.ts","../node_modules/@types/lodash/common/lang.d.ts","../node_modules/@types/lodash/common/math.d.ts","../node_modules/@types/lodash/common/number.d.ts","../node_modules/@types/lodash/common/object.d.ts","../node_modules/@types/lodash/common/seq.d.ts","../node_modules/@types/lodash/common/string.d.ts","../node_modules/@types/lodash/common/util.d.ts","../node_modules/@types/lodash/index.d.ts","./src/context/WindowContext.tsx","./src/util/constants/search-directives.ts","./src/util/ztable/search.ts","./src/components/util/Divider.tsx","./src/components/util/ExternalLink.tsx","./src/components/util/StickyPopover.tsx","./src/components/tables/components/FilterDirectivesIndicator.tsx","./src/components/tables/components/NoDataWrapper.tsx","./src/components/tables/components/PageSelector.tsx","./src/components/tables/components/SortableTH.tsx","./src/components/tables/components/TachiTable.tsx","./src/lib/types.ts","./src/lib/games/_util.ts","./src/components/tables/cells/ArcaeaJudgementCell.tsx","./src/lib/games/arcaea.tsx","./src/components/tables/cells/BMSOrPMSLampCell.tsx","./src/components/tables/cells/DeltaCell.tsx","./src/lib/games/bms-pms.tsx","./src/components/tables/cells/DDRScoreCell.tsx","./src/components/tables/cells/FlareCell.tsx","./src/lib/games/ddr.tsx","./src/components/tables/cells/GitadoraJudgementCell.tsx","./src/lib/games/gitadora.tsx","./src/components/util/Muted.tsx","./src/types/api-returns.ts","./src/components/util/query/fetchUGPTData.ts","./src/util/asserts.ts","../node_modules/@types/history/DOMUtils.d.ts","../node_modules/@types/history/createBrowserHistory.d.ts","../node_modules/@types/history/createHashHistory.d.ts","../node_modules/@types/history/createMemoryHistory.d.ts","../node_modules/@types/history/LocationUtils.d.ts","../node_modules/@types/history/PathUtils.d.ts","../node_modules/@types/history/index.d.ts","../node_modules/@types/react-router/index.d.ts","../node_modules/@types/react-router-dom/index.d.ts","./src/context/UGPTContext.tsx","./src/components/util/useLUGPTSettings.tsx","../node_modules/rg-stats/js/util/types.d.ts","../node_modules/rg-stats/js/algorithms/poyashi-bpi.d.ts","../node_modules/rg-stats/js/algorithms/chunithm-rating.d.ts","../node_modules/rg-stats/js/algorithms/jubility.d.ts","../node_modules/rg-stats/js/algorithms/volforce.d.ts","../node_modules/rg-stats/js/algorithms/wacca-rate.d.ts","../node_modules/rg-stats/js/algorithms/gitadora-skill.d.ts","../node_modules/rg-stats/js/algorithms/popn-classpoints.d.ts","../node_modules/rg-stats/js/algorithms/itg-highest-unbroken.d.ts","../node_modules/rg-stats/js/algorithms/maimaidx-rate.d.ts","../node_modules/rg-stats/js/algorithms/curator-skill.d.ts","../node_modules/rg-stats/js/algorithms/maimai-rate.d.ts","../node_modules/rg-stats/js/algorithms/potential.d.ts","../node_modules/rg-stats/js/algorithms/ongeki-rating.d.ts","../node_modules/rg-stats/js/algorithms/ddr-flare.d.ts","../node_modules/rg-stats/js/main.d.ts","./src/components/tables/cells/BPICell.tsx","./src/components/tables/cells/IIDXLampCell.tsx","./src/lib/games/iidx.tsx","./src/components/tables/cells/SDVXJudgementCell.tsx","./src/components/tables/cells/SDVXLampCell.tsx","./src/components/tables/cells/VF6Cell.tsx","./src/lib/games/sdvx-usc.tsx","./src/lib/game-implementations.tsx","../node_modules/fast-json-stable-hash/index.d.ts","./src/util/misc.ts","./src/context/SubheaderContext.tsx","../node_modules/react-query/types/core/retryer.d.ts","../node_modules/react-query/types/core/subscribable.d.ts","../node_modules/react-query/types/core/mutationCache.d.ts","../node_modules/react-query/types/core/queryClient.d.ts","../node_modules/react-query/types/core/queryObserver.d.ts","../node_modules/react-query/types/core/query.d.ts","../node_modules/react-query/types/core/types.d.ts","../node_modules/react-query/types/core/mutationObserver.d.ts","../node_modules/react-query/types/core/mutation.d.ts","../node_modules/react-query/types/core/utils.d.ts","../node_modules/react-query/types/core/queryCache.d.ts","../node_modules/react-query/types/core/queriesObserver.d.ts","../node_modules/react-query/types/core/infiniteQueryObserver.d.ts","../node_modules/react-query/types/core/logger.d.ts","../node_modules/react-query/types/core/notifyManager.d.ts","../node_modules/react-query/types/core/focusManager.d.ts","../node_modules/react-query/types/core/onlineManager.d.ts","../node_modules/react-query/types/core/index.d.ts","../node_modules/react-query/types/react/setBatchUpdatesFn.d.ts","../node_modules/react-query/types/react/setLogger.d.ts","../node_modules/react-query/types/react/QueryClientProvider.d.ts","../node_modules/react-query/types/react/QueryErrorResetBoundary.d.ts","../node_modules/react-query/types/react/useIsFetching.d.ts","../node_modules/react-query/types/react/useIsMutating.d.ts","../node_modules/react-query/types/react/types.d.ts","../node_modules/react-query/types/react/useMutation.d.ts","../node_modules/react-query/types/react/useQuery.d.ts","../node_modules/react-query/types/react/useQueries.d.ts","../node_modules/react-query/types/react/useInfiniteQuery.d.ts","../node_modules/react-query/types/react/index.d.ts","../node_modules/react-query/types/index.d.ts","./node_modules/@types/humanize-duration/index.d.ts","./node_modules/@types/luxon/src/zone.d.ts","./node_modules/@types/luxon/src/misc.d.ts","./node_modules/@types/luxon/src/duration.d.ts","./node_modules/@types/luxon/src/interval.d.ts","./node_modules/@types/luxon/src/datetime.d.ts","./node_modules/@types/luxon/src/info.d.ts","./node_modules/@types/luxon/src/settings.d.ts","./node_modules/@types/luxon/src/luxon.d.ts","./node_modules/@types/luxon/index.d.ts","./src/util/time.ts","./src/util/splashes.ts","./src/components/util/useSplashText.tsx","./src/util/subheader.ts","./src/components/layout/header/useSetSubheader.tsx","./src/app/pages/ErrorPage.tsx","./src/components/util/CenterPage.tsx","./src/components/util/SiteWordmark.tsx","./src/components/layout/LoginPageLayout.tsx","./src/app/pages/ForgotPasswordPage.tsx","../node_modules/@types/react-google-recaptcha/index.d.ts","./src/app/pages/LoginPage.tsx","./src/components/layout/CenterLayoutPage.tsx","./src/components/util/ApiError.tsx","./src/components/util/query/useApiQuery.tsx","./src/components/util/OAuthMoreInfo.tsx","./src/components/util/useQueryString.tsx","./src/app/pages/OAuthRequestAuthPage.tsx","./src/app/pages/RegisterPage.tsx","./src/components/util/MainPageTitleContainer.tsx","./src/app/pages/ResetPasswordPage.tsx","../node_modules/@types/react-router-bootstrap/lib/LinkContainer.d.ts","../node_modules/@types/react-router-bootstrap/index.d.ts","./src/components/util/LinkButton.tsx","./src/app/pages/VerifyEmailPage.tsx","./src/components/util/DebugContent.tsx","./src/components/util/ErrorBoundary.tsx","./src/app/pages/ClientFileFlowPage.tsx","./src/app/routes/ClientFileFlowRoutes.tsx","./src/app/pages/dashboard/misc/SupportMePage.tsx","./src/components/layout/page/Card.tsx","./src/components/tables/cells/RatingSystemPart.tsx","./src/components/tables/cells/BMSOrPMSDifficultyCell.tsx","./src/components/tables/cells/ITGDifficultyCell.tsx","./src/components/tables/cells/USCDifficultyCell.tsx","./src/components/tables/cells/DifficultyCell.tsx","./src/components/util/GentleLink.tsx","./src/util/data.ts","./src/components/tables/cells/TitleCell.tsx","./src/components/tables/headers/ChartHeader.tsx","./src/components/user/ProfilePicture.tsx","./src/components/util/DebounceSearch.tsx","./src/components/util/search/useTachiSearch.ts","./src/components/util/SelectButton.tsx","./src/util/constants/time.ts","./src/app/pages/dashboard/search/SearchPage.tsx","./src/components/tables/cells/TimestampCell.tsx","./src/components/notifications/NotificationRow.tsx","./src/app/pages/dashboard/users/NotificationsPage.tsx","./src/app/pages/PrivacyPolicyPage.tsx","./src/context/BackgroundContext.tsx","./src/components/layout/misc/BackgroundImage.tsx","./src/components/layout/footer/Footer.tsx","./src/components/util/SignOut.tsx","./src/components/ui/DropdownNavLink.tsx","./src/components/ui/QuickDropdown.tsx","./src/components/layout/header/GlobalInfoDropdown.tsx","./src/components/layout/header/ImportScoresDropdown.tsx","./src/components/layout/header/UGPTDropdown.tsx","./src/components/layout/header/UtilsDropdown.tsx","./src/components/layout/header/HeaderMenu.tsx","./src/components/layout/header/Logo.tsx","./src/components/layout/header/MobileMenuToggle.tsx","./src/components/layout/header/SearchButton.tsx","./src/components/layout/header/UserNotificationButton.tsx","./src/components/util/SupporterIcon.tsx","./src/components/layout/header/UserProfileDropdown.tsx","./src/components/layout/header/UserArea.tsx","./src/components/layout/header/Header.tsx","./src/components/layout/subheader/components/Breadcrumbs.tsx","./src/components/layout/subheader/SubHeader.tsx","./src/components/layout/Layout.tsx","./src/util/themeUtils.ts","./src/app/pages/dashboard/users/UserSettingsPage.tsx","./src/components/layout/misc/EmailVerify.tsx","./src/components/util/DashboardErrorBoundary.tsx","./src/components/game/ClassBadge.tsx","./src/components/tables/dropdowns/components/ScoreEditButtons.tsx","./src/components/util/useScoreRatingAlg.tsx","./src/components/tables/game-core-cells/ScoreCoreCells.tsx","./src/components/sessions/SessionRaiseBreakdown.tsx","./src/types/tables.ts","./src/util/str-to-num.ts","./src/util/tables/create-search.ts","./src/components/tables/cells/DropdownIndicatorCell.tsx","./src/components/tables/cells/IndicatorsCell.tsx","./src/components/tables/cells/UserCell.tsx","./src/components/tables/components/DropdownRow.tsx","./src/components/tables/components/UseScoreState.tsx","./src/components/util/HasDevModeOn.tsx","./src/components/tables/dropdowns/components/DeleteScoreBtn.tsx","./src/components/tables/dropdowns/components/CommentContainer.tsx","./src/components/tables/dropdowns/components/JudgementTable.tsx","./src/components/tables/dropdowns/components/PBNote.tsx","./src/components/tables/dropdowns/components/DocumentComponent.tsx","./src/components/tables/dropdowns/components/DropdownStructure.tsx","./src/components/tables/dropdowns/components/PBCompare.tsx","../node_modules/@react-spring/rafz/dist/declarations/src/types.d.ts","../node_modules/@react-spring/rafz/dist/declarations/src/index.d.ts","../node_modules/@react-spring/rafz/dist/react-spring-rafz.cjs.d.ts","../node_modules/@react-spring/types/animated.d.ts","../node_modules/@react-spring/types/util.d.ts","../node_modules/@react-spring/types/interpolation.d.ts","../node_modules/@react-spring/types/index.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/fluids.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/FrameLoop.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/globals.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/colors.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/colorToRgba.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/colorMatchers.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/createInterpolator.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/stringInterpolation.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/deprecations.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/helpers.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/isAnimatedString.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/hooks/useForceUpdate.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/hooks/useMemoOne.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/hooks/useOnce.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/hooks/usePrev.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/hooks/useLayoutEffect.d.ts","../node_modules/@react-spring/shared/dist/declarations/src/index.d.ts","../node_modules/@react-spring/shared/dist/react-spring-shared.cjs.d.ts","../node_modules/@react-spring/web/dist/declarations/src/primitives.d.ts","../node_modules/@react-spring/web/dist/declarations/src/animated.d.ts","../node_modules/@react-spring/core/dist/declarations/src/Interpolation.d.ts","../node_modules/@react-spring/core/dist/declarations/src/FrameValue.d.ts","../node_modules/@react-spring/animated/dist/declarations/src/AnimatedValue.d.ts","../node_modules/@react-spring/animated/dist/declarations/src/Animated.d.ts","../node_modules/@react-spring/animated/dist/declarations/src/AnimatedString.d.ts","../node_modules/@react-spring/animated/dist/declarations/src/AnimatedObject.d.ts","../node_modules/@react-spring/animated/dist/declarations/src/AnimatedArray.d.ts","../node_modules/@react-spring/animated/dist/declarations/src/types.d.ts","../node_modules/@react-spring/animated/dist/declarations/src/getAnimatedType.d.ts","../node_modules/@react-spring/animated/dist/declarations/src/withAnimated.d.ts","../node_modules/@react-spring/animated/dist/declarations/src/createHost.d.ts","../node_modules/@react-spring/animated/dist/declarations/src/index.d.ts","../node_modules/@react-spring/animated/dist/react-spring-animated.cjs.d.ts","../node_modules/@react-spring/core/dist/declarations/src/AnimationConfig.d.ts","../node_modules/@react-spring/core/dist/declarations/src/types/objects.d.ts","../node_modules/@react-spring/core/dist/declarations/src/types/internal.d.ts","../node_modules/@react-spring/core/dist/declarations/src/Animation.d.ts","../node_modules/@react-spring/core/dist/declarations/src/runAsync.d.ts","../node_modules/@react-spring/core/dist/declarations/src/SpringValue.d.ts","../node_modules/@react-spring/core/dist/declarations/src/Controller.d.ts","../node_modules/@react-spring/core/dist/declarations/src/types/common.d.ts","../node_modules/@react-spring/core/dist/declarations/src/types/functions.d.ts","../node_modules/@react-spring/core/dist/declarations/src/TransitionPhase.d.ts","../node_modules/@react-spring/core/dist/declarations/src/types/transition.d.ts","../node_modules/@react-spring/core/dist/declarations/src/types/props.d.ts","../node_modules/@react-spring/core/dist/declarations/src/types/index.d.ts","../node_modules/@react-spring/core/dist/declarations/src/SpringRef.d.ts","../node_modules/@react-spring/core/dist/declarations/src/hooks/useChain.d.ts","../node_modules/@react-spring/core/dist/declarations/src/hooks/useSpring.d.ts","../node_modules/@react-spring/core/dist/declarations/src/hooks/useSprings.d.ts","../node_modules/@react-spring/core/dist/declarations/src/hooks/useSpringRef.d.ts","../node_modules/@react-spring/core/dist/declarations/src/hooks/useTrail.d.ts","../node_modules/@react-spring/core/dist/declarations/src/hooks/useTransition.d.ts","../node_modules/@react-spring/core/dist/declarations/src/hooks/index.d.ts","../node_modules/@react-spring/core/dist/declarations/src/components/Spring.d.ts","../node_modules/@react-spring/core/dist/declarations/src/components/Trail.d.ts","../node_modules/@react-spring/core/dist/declarations/src/components/Transition.d.ts","../node_modules/@react-spring/core/dist/declarations/src/components/index.d.ts","../node_modules/@react-spring/core/dist/declarations/src/interpolate.d.ts","../node_modules/@react-spring/core/dist/declarations/src/constants.d.ts","../node_modules/@react-spring/core/dist/declarations/src/globals.d.ts","../node_modules/@react-spring/core/dist/declarations/src/SpringContext.d.ts","../node_modules/@react-spring/core/dist/declarations/src/helpers.d.ts","../node_modules/@react-spring/core/dist/declarations/src/index.d.ts","../node_modules/@react-spring/core/dist/react-spring-core.cjs.d.ts","../node_modules/@react-spring/web/dist/declarations/src/index.d.ts","../node_modules/@react-spring/web/dist/react-spring-web.cjs.d.ts","../node_modules/@nivo/core/index.d.ts","./src/util/constants/chart-theme.ts","../node_modules/@nivo/colors/dist/types/schemes/categorical.d.ts","../node_modules/@nivo/colors/dist/types/schemes/diverging.d.ts","../node_modules/@nivo/colors/dist/types/schemes/sequential.d.ts","../node_modules/@nivo/colors/dist/types/schemes/all.d.ts","../node_modules/@nivo/colors/dist/types/schemes/cyclical.d.ts","../node_modules/@nivo/colors/dist/types/schemes/interpolators.d.ts","../node_modules/@nivo/colors/dist/types/schemes/index.d.ts","../node_modules/@nivo/colors/dist/types/inheritedColor.d.ts","../node_modules/@nivo/colors/dist/types/props.d.ts","../node_modules/@nivo/colors/dist/types/scales/sequentialColorScale.d.ts","../node_modules/@nivo/colors/dist/types/scales/divergingColorScale.d.ts","../node_modules/@nivo/colors/dist/types/scales/quantizeColorScale.d.ts","../node_modules/@nivo/colors/dist/types/scales/continuousColorScale.d.ts","../node_modules/@nivo/colors/dist/types/scales/ordinalColorScale.d.ts","../node_modules/@nivo/colors/dist/types/scales/index.d.ts","../node_modules/@nivo/colors/dist/types/index.d.ts","../node_modules/@nivo/legends/dist/types/svg/symbols/types.d.ts","../node_modules/@nivo/legends/dist/types/svg/symbols/SymbolCircle.d.ts","../node_modules/@nivo/legends/dist/types/svg/symbols/SymbolDiamond.d.ts","../node_modules/@nivo/legends/dist/types/svg/symbols/SymbolSquare.d.ts","../node_modules/@nivo/legends/dist/types/svg/symbols/SymbolTriangle.d.ts","../node_modules/@nivo/legends/dist/types/svg/symbols/index.d.ts","../node_modules/@nivo/legends/dist/types/types.d.ts","../node_modules/@nivo/legends/dist/types/svg/AnchoredContinuousColorsLegendSvg.d.ts","../node_modules/@nivo/legends/dist/types/svg/BoxLegendSvg.d.ts","../node_modules/@nivo/legends/dist/types/svg/ContinuousColorsLegendSvg.d.ts","../node_modules/@nivo/legends/dist/types/svg/LegendSvg.d.ts","../node_modules/@nivo/legends/dist/types/svg/LegendSvgItem.d.ts","../node_modules/@nivo/legends/dist/types/svg/index.d.ts","../node_modules/@nivo/legends/dist/types/canvas.d.ts","../node_modules/@nivo/legends/dist/types/defaults.d.ts","../node_modules/@nivo/legends/dist/types/hooks.d.ts","../node_modules/@nivo/legends/dist/types/props.d.ts","../node_modules/@nivo/legends/dist/types/compute.d.ts","../node_modules/@nivo/legends/dist/types/index.d.ts","../node_modules/@nivo/scales/dist/types/timeHelpers.d.ts","../node_modules/@nivo/scales/dist/types/types.d.ts","../node_modules/@nivo/scales/dist/types/compute.d.ts","../node_modules/@nivo/scales/dist/types/linearScale.d.ts","../node_modules/@nivo/scales/dist/types/logScale.d.ts","../node_modules/@nivo/scales/dist/types/symlogScale.d.ts","../node_modules/@nivo/scales/dist/types/pointScale.d.ts","../node_modules/@nivo/scales/dist/types/timeScale.d.ts","../node_modules/@nivo/scales/dist/types/bandScale.d.ts","../node_modules/@nivo/scales/dist/types/ticks.d.ts","../node_modules/@nivo/scales/dist/types/index.d.ts","../node_modules/@nivo/axes/dist/types/types.d.ts","../node_modules/@nivo/axes/dist/types/components/Axes.d.ts","../node_modules/@nivo/axes/dist/types/components/Axis.d.ts","../node_modules/@nivo/axes/dist/types/components/AxisTick.d.ts","../node_modules/@nivo/axes/dist/types/components/Grid.d.ts","../node_modules/@nivo/axes/dist/types/components/GridLine.d.ts","../node_modules/@nivo/axes/dist/types/components/GridLines.d.ts","../node_modules/@nivo/axes/dist/types/components/index.d.ts","../node_modules/@nivo/axes/dist/types/canvas.d.ts","../node_modules/@nivo/axes/dist/types/props.d.ts","../node_modules/@nivo/axes/dist/types/index.d.ts","../node_modules/@nivo/tooltip/dist/types/types.d.ts","../node_modules/@nivo/tooltip/dist/types/context.d.ts","../node_modules/@nivo/tooltip/dist/types/TooltipWrapper.d.ts","../node_modules/@nivo/tooltip/dist/types/BasicTooltip.d.ts","../node_modules/@nivo/tooltip/dist/types/Chip.d.ts","../node_modules/@nivo/tooltip/dist/types/TableTooltip.d.ts","../node_modules/@nivo/tooltip/dist/types/Crosshair.d.ts","../node_modules/@nivo/tooltip/dist/types/Tooltip.d.ts","../node_modules/@nivo/tooltip/dist/types/TooltipProvider.d.ts","../node_modules/@nivo/tooltip/dist/types/hooks.d.ts","../node_modules/@nivo/tooltip/dist/types/index.d.ts","../node_modules/@nivo/line/index.d.ts","../node_modules/@nivo/annotations/dist/types/types.d.ts","../node_modules/@nivo/annotations/dist/types/Annotation.d.ts","../node_modules/@nivo/annotations/dist/types/canvas.d.ts","../node_modules/@nivo/annotations/dist/types/compute.d.ts","../node_modules/@nivo/annotations/dist/types/hooks.d.ts","../node_modules/@nivo/annotations/dist/types/props.d.ts","../node_modules/@nivo/annotations/dist/types/utils.d.ts","../node_modules/@nivo/annotations/dist/types/index.d.ts","../node_modules/@nivo/bar/dist/types/types.d.ts","../node_modules/@nivo/bar/dist/types/Bar.d.ts","../node_modules/@nivo/bar/dist/types/BarItem.d.ts","../node_modules/@nivo/bar/dist/types/BarCanvas.d.ts","../node_modules/@nivo/bar/dist/types/ResponsiveBar.d.ts","../node_modules/@nivo/bar/dist/types/ResponsiveBarCanvas.d.ts","../node_modules/@nivo/bar/dist/types/props.d.ts","../node_modules/@nivo/bar/dist/types/index.d.ts","./src/components/charts/ChartTooltip.tsx","./src/components/charts/IIDXLampChart.tsx","./src/components/util/SelectNav.tsx","./src/components/tables/dropdowns/components/BMSScoreDropdownParts.tsx","./src/components/charts/GekichumaiScoreChart.tsx","./src/components/tables/dropdowns/components/ChunithmScoreDropdownParts.tsx","./src/components/tables/dropdowns/components/IIDXScoreDropdownParts.tsx","./src/components/charts/ITGDensityChart.tsx","./src/components/tables/dropdowns/components/ITGScoreDropdownParts.tsx","./src/components/tables/dropdowns/components/JubeatScoreDropdownParts.tsx","./src/components/tables/dropdowns/components/MaimaiDXScoreDropdownParts.tsx","./src/components/tables/dropdowns/components/OngekiScoreDropdownParts.tsx","./src/components/tables/dropdowns/GPTDropdownSettings.tsx","./src/components/tables/components/SelectableRating.tsx","./src/components/tables/headers/GameHeaders.tsx","./src/components/tables/headers/IndicatorHeader.tsx","./src/components/tables/history-scores/HistoryScoreTable.tsx","./src/components/tables/dropdowns/components/PlayHistory.tsx","./src/components/tables/cells/IndexCell.tsx","./src/components/tables/cells/RankingCell.tsx","./src/components/tables/components/SelectableRanking.tsx","./src/components/tables/headers/RankingHeader.tsx","./src/components/tables/rivals/RivalChartTable.tsx","./src/components/util/useUGPTBase.tsx","./src/components/tables/dropdowns/components/RivalCompare.tsx","./src/components/util/GoalLink.tsx","./src/context/TargetsContext.tsx","./src/components/targets/quests/Quest.tsx","./src/components/targets/GoalSubInfo.tsx","./src/components/util/CheckEdit.tsx","./src/components/targets/SetNewGoalModal.tsx","./src/components/tables/dropdowns/components/TargetInfo.tsx","./src/components/tables/dropdowns/ScoreDropdown.tsx","./src/components/tables/scores/ScoreTable.tsx","./src/types/tachi.ts","./src/util/activity.ts","./src/components/activity/Activity.tsx","./src/components/dashboard/DashboardLoggedInNoScores.tsx","./src/components/dashboard/DashboardActivity.tsx","./src/components/nav/Navbar.tsx","./src/components/dashboard/DashboardHeader.tsx","../node_modules/preact/src/jsx.d.ts","../node_modules/preact/src/index.d.ts","../node_modules/preact/hooks/src/index.d.ts","../node_modules/preact/compat/src/suspense.d.ts","../node_modules/preact/compat/src/suspense-list.d.ts","../node_modules/preact/compat/src/index.d.ts","../node_modules/@fullcalendar/core/preact.d.ts","../node_modules/@fullcalendar/core/internal-common.d.ts","../node_modules/@fullcalendar/core/index.d.ts","../node_modules/@fullcalendar/daygrid/index.d.ts","../node_modules/@fullcalendar/core/internal.d.ts","../node_modules/@fullcalendar/react/dist/index.d.ts","./src/components/sessions/SessionCalendar.tsx","./src/components/sessions/SessionCard.tsx","./src/components/util/LoadingWrapper.tsx","./src/components/util/ReferToUser.tsx","./src/util/site.ts","./src/components/user/UGPTRankingData.tsx","./src/components/user/UGPTStatsOverview.tsx","./src/components/user/UGPTProfiles.tsx","./src/app/pages/dashboard/misc/SupportBanner.tsx","./src/app/pages/dashboard/DashboardPage.tsx","./src/app/pages/dashboard/games/_game/_playtype/ChartRedirector.tsx","./src/util/tables/get-pb-leaders.ts","./src/components/tables/dropdowns/PBDropdown.tsx","./src/components/tables/pbs/PBLeadingRows.tsx","./src/components/tables/pbs/PBTable.tsx","./src/util/routing.ts","./src/components/util/SelectLinkButton.tsx","./src/app/pages/dashboard/games/_game/_playtype/GPTChartPage.tsx","./src/app/pages/dashboard/games/_game/_playtype/GPTDevInfo.tsx","./src/util/charts.ts","./src/components/game/ScoreLeaderboard.tsx","./src/app/pages/dashboard/games/_game/_playtype/GPTLeaderboardsPage.tsx","./src/app/pages/dashboard/games/_game/_playtype/GPTMainPage.tsx","./src/app/pages/dashboard/games/_game/_playtype/GPTSongsPage.tsx","./src/app/pages/dashboard/games/_game/PlaytypeSelect.tsx","./src/components/game/charts/ChartInfoFormat.tsx","./src/components/game/GPTHeader.tsx","./src/components/game/songs/DefaultSongChartInfoFormat.tsx","./src/components/game/songs/IIDXStyleSongChartInfoFormat.tsx","./src/components/game/songs/SongChartInfoFormat.tsx","./src/components/targets/Questline.tsx","./src/components/game/targets/QuestlinePage.tsx","./src/components/game/targets/QuestPage.tsx","./src/components/game/targets/QuestsPage.tsx","./src/app/routes/GameRoutes.tsx","./src/app/pages/dashboard/import/AquaArtemisExportPage.tsx","./src/app/pages/dashboard/import/BarbatosPage.tsx","./src/types/import.ts","./src/components/util/import/useImport.ts","../node_modules/pretty-bytes/index.d.ts","./src/components/tables/dropdowns/components/ManageImport.tsx","./src/components/imports/ImportInfo.tsx","./src/components/imports/ImportStateRenderer.tsx","./src/components/imports/ImportFileInfo.tsx","./src/app/pages/dashboard/import/BatchManualPage.tsx","./src/app/pages/dashboard/import/BeatorajaIRPage.tsx","./src/app/pages/dashboard/import/ChunitachiPage.tsx","./src/app/pages/dashboard/import/ChunithmMYTExportPage.tsx","./src/app/pages/dashboard/import/ChunithmSiteImportPage.tsx","./src/app/pages/dashboard/import/FervidexPage.tsx","./src/app/pages/dashboard/import/IIDXCGSiteImportPage.tsx","./src/app/pages/dashboard/import/IIDXEamCSVPage.tsx","./src/components/util/DiscordLink.tsx","./src/app/pages/dashboard/import/ImportPage.tsx","./src/app/pages/dashboard/import/ITGHookPage.tsx","./src/app/pages/dashboard/import/KsHookPage.tsx","./src/components/imports/TISInfo.tsx","./src/app/pages/dashboard/import/LR2DBPage.tsx","./src/app/pages/dashboard/import/LR2HookPage.tsx","./src/app/pages/dashboard/import/LR2orajaDBPage.tsx","./src/app/pages/dashboard/import/MaimaiDXSiteImportPage.tsx","./src/app/pages/dashboard/import/MikadoPage.tsx","./src/app/pages/dashboard/import/OngekiArtemisExportPage.tsx","./src/app/pages/dashboard/import/OngekiInoharaPage.tsx","./src/app/pages/dashboard/import/OngekiSiteImportPage.tsx","./src/app/pages/dashboard/import/SaekawaPage.tsx","./src/app/pages/dashboard/import/SDVXEamCSVPage.tsx","./src/app/pages/dashboard/import/SilentHookPage.tsx","./src/app/pages/dashboard/import/SSSXMLPage.tsx","./src/app/pages/dashboard/import/USCDBPage.tsx","./src/app/pages/dashboard/import/USCIRPage.tsx","./src/app/pages/dashboard/import/WACCAMyPageScraperPage.tsx","./src/components/util/FormInput.tsx","./src/components/imports/CGIntegrationPage.tsx","../node_modules/hash.js/lib/hash.d.ts","./src/components/imports/KAIIntegrationPage.tsx","./src/components/imports/MYTIntegrationPage.tsx","./src/app/routes/ImportRoutes.tsx","./src/app/routes/RedirectLegacyRoutes.tsx","./src/components/game/folder/FolderDistributionTable.tsx","./src/components/util/useBucket.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/folders/FolderSelectPage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/folders/FolderTablePage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/folders/RecentFoldersPage.tsx","./src/components/game/folder/FolderMinimap.tsx","./src/components/game/folder/FolderScoreAverages.tsx","./src/components/game/folder/FolderScoreDistributionChart.tsx","./src/components/game/folder/FolderInfoHeader.tsx","./src/components/util/usePreferredRanking.tsx","./src/components/tables/folders/FolderTable.tsx","./src/components/tables/cells/PBCompareCell.tsx","./src/components/tables/components/SelectableCompareType.tsx","./src/components/tables/rivals/ComparePBsTable.tsx","./src/components/util/modal/UserSelectModal.tsx","./src/components/util/UserIcon.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/folders/FolderComparePage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/folders/FolderQuestsPage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/folders/SpecificFolderPage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/folders/FoldersMainPage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/LeaderboardsPage.tsx","./src/components/charts/TimelineChart.tsx","./src/components/layout/page/CardHeader.tsx","./src/components/layout/page/CardNavButton.tsx","../node_modules/react-async/dist-types/index.d.ts","./src/components/util/AsyncLoader.tsx","./src/components/user/UGPTStatContainer.tsx","./src/components/user/UGPTStatCreator.tsx","./src/components/user/UGPTStatShowcase.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/OverviewPage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/rivals/RivalsActivityPage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/rivals/RivalsManagePage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/rivals/RivalsMainPage.tsx","./src/components/tables/sessions/GenericSessionTable.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/SessionsPage.tsx","../node_modules/@types/natural-compare/index.d.ts","./src/components/sessions/SessionFolderRaiseBreakdown.tsx","./src/components/sessions/SessionOverview.tsx","./src/components/util/EditableText.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/SpecificSessionPage.tsx","../node_modules/react-select/dist/declarations/src/filters.d.ts","../node_modules/@emotion/sheet/dist/declarations/src/index.d.ts","../node_modules/@emotion/sheet/dist/emotion-sheet.cjs.d.mts","../node_modules/@emotion/utils/dist/declarations/src/types.d.ts","../node_modules/@emotion/utils/dist/declarations/src/index.d.ts","../node_modules/@emotion/utils/dist/emotion-utils.cjs.d.mts","../node_modules/@emotion/cache/dist/declarations/src/types.d.ts","../node_modules/@emotion/cache/dist/declarations/src/index.d.ts","../node_modules/@emotion/cache/dist/emotion-cache.cjs.default.d.ts","../node_modules/@emotion/cache/dist/emotion-cache.cjs.d.mts","../node_modules/@emotion/serialize/dist/declarations/src/index.d.ts","../node_modules/@emotion/serialize/dist/emotion-serialize.cjs.d.mts","../node_modules/@emotion/react/dist/declarations/src/context.d.ts","../node_modules/@emotion/react/dist/declarations/src/types.d.ts","../node_modules/@emotion/react/dist/declarations/src/theming.d.ts","../node_modules/@emotion/react/dist/declarations/src/jsx-namespace.d.ts","../node_modules/@emotion/react/dist/declarations/src/jsx.d.ts","../node_modules/@emotion/react/dist/declarations/src/global.d.ts","../node_modules/@emotion/react/dist/declarations/src/keyframes.d.ts","../node_modules/@emotion/react/dist/declarations/src/class-names.d.ts","../node_modules/@emotion/react/dist/declarations/src/css.d.ts","../node_modules/@emotion/react/dist/declarations/src/index.d.ts","../node_modules/@emotion/react/dist/emotion-react.cjs.d.mts","../node_modules/react-select/dist/declarations/src/components/containers.d.ts","../node_modules/react-select/dist/declarations/src/components/Control.d.ts","../node_modules/react-select/dist/declarations/src/components/Group.d.ts","../node_modules/react-select/dist/declarations/src/components/indicators.d.ts","../node_modules/react-select/dist/declarations/src/components/Input.d.ts","../node_modules/react-select/dist/declarations/src/components/Placeholder.d.ts","../node_modules/react-select/dist/declarations/src/components/Option.d.ts","../node_modules/react-select/dist/declarations/src/components/Menu.d.ts","../node_modules/react-select/dist/declarations/src/components/SingleValue.d.ts","../node_modules/react-select/dist/declarations/src/components/MultiValue.d.ts","../node_modules/react-select/dist/declarations/src/styles.d.ts","../node_modules/react-select/dist/declarations/src/types.d.ts","../node_modules/react-select/dist/declarations/src/accessibility/index.d.ts","../node_modules/react-select/dist/declarations/src/components/index.d.ts","../node_modules/react-select/dist/declarations/src/theme.d.ts","../node_modules/react-select/dist/declarations/src/useStateManager.d.ts","../node_modules/react-select/dist/declarations/src/stateManager.d.ts","../node_modules/react-select/dist/declarations/src/NonceProvider.d.ts","../node_modules/react-select/dist/declarations/src/index.d.ts","../node_modules/react-select/dist/declarations/src/Select.d.ts","../node_modules/react-select/dist/declarations/src/useAsync.d.ts","../node_modules/react-select/dist/declarations/src/Async.d.ts","../node_modules/react-select/dist/declarations/src/async/index.d.ts","../node_modules/react-select/async/dist/react-select-async.cjs.default.d.ts","../node_modules/react-select/async/dist/react-select-async.cjs.d.mts","./src/components/util/AsyncSelect.tsx","../node_modules/react-select/dist/react-select.cjs.default.d.ts","../node_modules/react-select/dist/react-select.cjs.d.mts","./src/components/targets/AddNewGoalForQuestModal.tsx","./src/components/targets/DeleteGoalsModal.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/targets/UGPTGoalsPage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/targets/UGPTQuestsPage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/targets/TargetsPage.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/UGPTSettingsPage.tsx","./src/types/ugpt.ts","./src/components/gpt-utils/insights/JubilityBreakdownInsight.tsx","./src/components/gpt-utils/insights/ONGEKIBreakdownInsight.tsx","./src/components/gpt-utils/tools/BMSCustomTablesTool.tsx","./src/components/gpt-utils/tools/BMSSieglindeInfoTool.tsx","./src/components/gpt-utils/tools/IIDXEamusementExportTool.tsx","./src/components/gpt-utils/tools/IIDXPlaylistsTool.tsx","./src/components/gpt-utils/GPTUtils.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/utils/UGPTUtilsPage.tsx","./src/app/pages/dashboard/users/UserGamesPage.tsx","./src/components/tables/dropdowns/components/ImportInputViewer.tsx","./src/components/tables/dropdowns/FailedImportDropdown.tsx","./src/components/tables/imports/FailedImportsTable.tsx","./src/components/tables/dropdowns/ImportDropdown.tsx","./src/components/tables/imports/ImportsTable.tsx","./src/components/util/import/ImportViewerOptions.tsx","./src/app/pages/dashboard/users/UserImportsPage.tsx","./src/app/pages/dashboard/users/FervidexIntegrationPage.tsx","./src/app/pages/dashboard/users/KsHookSV6CIntegrationPage.tsx","./src/app/pages/dashboard/users/UserIntegrationsPage.tsx","./src/app/pages/dashboard/users/UserInvitesPage.tsx","./src/components/auth/RequireAuthAsUserParam.tsx","./src/components/layout/LayoutHeaderContainer.tsx","./src/components/util/FollowUserButton.tsx","./src/components/user/ProfileBadges.tsx","./src/components/user/UGPTHeader.tsx","./src/components/user/UserHeader.tsx","./src/app/pages/dashboard/users/games/_game/_playtype/ScoresPage.tsx","../node_modules/react-markdown/lib/uri-transformer.d.ts","../node_modules/@types/unist/index.d.ts","../node_modules/vfile-message/lib/index.d.ts","../node_modules/vfile-message/index.d.ts","../node_modules/vfile/lib/minurl.shared.d.ts","../node_modules/vfile/lib/index.d.ts","../node_modules/vfile/index.d.ts","../node_modules/unified/index.d.ts","../node_modules/@types/hast/index.d.ts","../node_modules/react-markdown/lib/rehype-filter.d.ts","../node_modules/style-to-object/index.d.ts","../node_modules/property-information/lib/util/info.d.ts","../node_modules/property-information/lib/util/schema.d.ts","../node_modules/property-information/lib/find.d.ts","../node_modules/property-information/lib/hast-to-react.d.ts","../node_modules/property-information/lib/normalize.d.ts","../node_modules/property-information/index.d.ts","../node_modules/react-markdown/lib/complex-types.ts","../node_modules/react-markdown/lib/ast-to-react.d.ts","../node_modules/react-markdown/lib/react-markdown.d.ts","../node_modules/react-markdown/index.d.ts","./src/app/pages/dashboard/users/UserPage.tsx","./src/app/routes/UserRoutes.tsx","./src/app/pages/dashboard/utils/ImportAnalysers.tsx","./src/components/targets/AddNewQuestModal.tsx","./src/components/targets/quests/editor/EditableQuest.tsx","./src/app/pages/dashboard/utils/QuestEditor.tsx","./src/types/git.ts","./src/components/seeds/SeedsPicker.tsx","./src/types/seeds.ts","./src/util/seeds.ts","./src/components/tables/cells/SeedsDiffCell.tsx","./src/components/tables/cells/SeedsIndicatorCell.tsx","./src/components/tables/seeds/MakeSeedsDiffTable.tsx","./src/components/tables/seeds/MakeSeedsTable.tsx","./src/components/tables/seeds/SeedsBMSCourseLookupTable.tsx","./src/components/tables/cells/ObjCell.tsx","./src/components/tables/seeds/SeedsChartsTable.tsx","./src/components/tables/seeds/SeedsFolderTable.tsx","./src/components/tables/seeds/SeedsGoalsTable.tsx","./src/components/tables/seeds/SeedsQuestlineTable.tsx","./src/components/tables/seeds/SeedsQuestTable.tsx","./src/components/tables/seeds/SeedsSongsTable.tsx","./src/components/tables/seeds/SeedsTableTable.tsx","./src/components/tables/seeds/SeedsTable.tsx","./src/components/seeds/SeedsStateViewer.tsx","./src/app/pages/dashboard/utils/SeedsViewer.tsx","./src/app/routes/UtilRoutes.tsx","./src/app/routes/DashboardRoutes.tsx","./src/app/pages/OAuth2CallbackPage.tsx","./src/app/routes/OAuth2CallbackRoutes.tsx","./src/app/routes/AppRoutes.tsx","./src/app/App.tsx","../node_modules/@types/react-dom/index.d.ts","./src/index.tsx","./src/app/pages/LandingPage.tsx","./src/components/layout/header/MenuLink.tsx","./src/components/tables/dropdowns/GenericSessionDropdown.tsx","./src/components/tables/dropdowns/components/DropdownScoreButtons.tsx","./src/components/util/BigSearch.tsx","./src/components/util/HoverText.tsx","./src/components/util/SplashText.tsx","./src/components/util/UpdateUserGameStats.tsx","./src/components/util/useComponentVisible.tsx","./src/util/submit-file.ts","./src/util/constants/colours.ts","./src/util/constants/contributors.ts","../node_modules/@types/aws-lambda/common/api-gateway.d.ts","../node_modules/@types/aws-lambda/common/cloudfront.d.ts","../node_modules/@types/aws-lambda/handler.d.ts","../node_modules/@types/aws-lambda/trigger/alb.d.ts","../node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts","../node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts","../node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts","../node_modules/@types/aws-lambda/trigger/autoscaling.d.ts","../node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts","../node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts","../node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts","../node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts","../node_modules/@types/aws-lambda/trigger/cloudwatch-alarm.d.ts","../node_modules/@types/aws-lambda/trigger/eventbridge.d.ts","../node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts","../node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts","../node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts","../node_modules/@types/aws-lambda/trigger/codecommit.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-sms-sender.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/inbound-federation.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v2.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v3.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts","../node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts","../node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts","../node_modules/@types/aws-lambda/trigger/guard-duty-event-notification.d.ts","../node_modules/@types/aws-lambda/trigger/iot.d.ts","../node_modules/@types/aws-lambda/trigger/iot-authorizer.d.ts","../node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts","../node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts","../node_modules/@types/aws-lambda/trigger/lambda-function-url.d.ts","../node_modules/@types/aws-lambda/trigger/lex.d.ts","../node_modules/@types/aws-lambda/trigger/lex-v2.d.ts","../node_modules/@types/aws-lambda/trigger/amplify-resolver.d.ts","../node_modules/@types/aws-lambda/trigger/msk.d.ts","../node_modules/@types/aws-lambda/trigger/s3.d.ts","../node_modules/@types/aws-lambda/trigger/s3-batch.d.ts","../node_modules/@types/aws-lambda/trigger/s3-event-notification.d.ts","../node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts","../node_modules/@types/aws-lambda/trigger/self-managed-kafka.d.ts","../node_modules/@types/aws-lambda/trigger/ses.d.ts","../node_modules/@types/aws-lambda/trigger/sns.d.ts","../node_modules/@types/aws-lambda/trigger/sqs.d.ts","../node_modules/@types/aws-lambda/trigger/transfer-family-authorizer.d.ts","../node_modules/@types/aws-lambda/index.d.ts","../node_modules/@types/bcryptjs/index.d.ts","../node_modules/@types/connect/index.d.ts","../node_modules/@types/body-parser/index.d.ts","../node_modules/@types/bunyan/index.d.ts","../node_modules/@types/http-errors/index.d.ts","../node_modules/@types/serve-static/index.d.ts","../node_modules/@types/express/index.d.ts","../node_modules/@types/express-session/index.d.ts","../node_modules/@types/redis/index.d.ts","../node_modules/@types/connect-redis/index.d.ts","../node_modules/@types/cookiejar/index.d.ts","../node_modules/@types/ms/index.d.ts","../node_modules/@types/debug/index.d.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../node_modules/@types/eslint/index.d.ts","../node_modules/@eslint/core/dist/cjs/types.d.cts","../node_modules/eslint/lib/types/use-at-your-own-risk.d.ts","../node_modules/eslint/lib/types/index.d.ts","../node_modules/@types/eslint__js/index.d.ts","../node_modules/@types/express-rate-limit/index.d.ts","../node_modules/@types/glob/index.d.ts","../node_modules/@types/google-protobuf/index.d.ts","../node_modules/@types/lodash.get/index.d.ts","../node_modules/@types/mdast/index.d.ts","../node_modules/@types/mdurl/encode.d.ts","../node_modules/@types/mdurl/decode.d.ts","../node_modules/@types/mdurl/parse.d.ts","../node_modules/@types/mdurl/format.d.ts","../node_modules/@types/mdurl/index.d.ts","../node_modules/@types/methods/index.d.ts","../node_modules/@types/minimist/index.d.ts","../node_modules/@types/mkdirp/index.d.ts","../node_modules/@types/multer/index.d.ts","../node_modules/form-data/index.d.ts","../node_modules/@types/node-fetch/externals.d.ts","../node_modules/@types/node-fetch/index.d.ts","../node_modules/@types/nodemailer/lib/dkim/index.d.ts","../node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts","../node_modules/@types/nodemailer/lib/xoauth2/index.d.ts","../node_modules/@types/nodemailer/lib/mailer/index.d.ts","../node_modules/@types/nodemailer/lib/mime-node/index.d.ts","../node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts","../node_modules/@types/nodemailer/lib/shared/index.d.ts","../node_modules/@types/nodemailer/lib/json-transport/index.d.ts","../node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts","../node_modules/@types/nodemailer/lib/ses-transport/index.d.ts","../node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts","../node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts","../node_modules/@types/nodemailer/lib/stream-transport/index.d.ts","../node_modules/@types/nodemailer/index.d.ts","../node_modules/@types/normalize-package-data/index.d.ts","../node_modules/@types/parse-json/index.d.ts","../node_modules/pg-types/index.d.ts","../node_modules/pg-protocol/dist/messages.d.ts","../node_modules/pg-protocol/dist/serializer.d.ts","../node_modules/pg-protocol/dist/parser.d.ts","../node_modules/pg-protocol/dist/index.d.ts","../node_modules/@types/pg/lib/type-overrides.d.ts","../node_modules/@types/pg/index.d.ts","../node_modules/@types/rate-limit-redis/node_modules/@types/express-rate-limit/index.d.ts","../node_modules/@types/rate-limit-redis/index.d.ts","../node_modules/@types/react-transition-group/config.d.ts","../node_modules/@types/react-transition-group/CSSTransition.d.ts","../node_modules/@types/react-transition-group/SwitchTransition.d.ts","../node_modules/@types/react-transition-group/TransitionGroup.d.ts","../node_modules/@types/react-transition-group/index.d.ts","../node_modules/@types/rimraf/index.d.ts","../node_modules/@types/safe-json-stringify/index.d.ts","../node_modules/@types/scheduler/index.d.ts","../node_modules/@types/semver/functions/inc.d.ts","../node_modules/@types/semver/classes/semver.d.ts","../node_modules/@types/semver/functions/parse.d.ts","../node_modules/@types/semver/functions/valid.d.ts","../node_modules/@types/semver/functions/clean.d.ts","../node_modules/@types/semver/functions/diff.d.ts","../node_modules/@types/semver/functions/major.d.ts","../node_modules/@types/semver/functions/minor.d.ts","../node_modules/@types/semver/functions/patch.d.ts","../node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/@types/semver/functions/compare.d.ts","../node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/@types/semver/functions/sort.d.ts","../node_modules/@types/semver/functions/rsort.d.ts","../node_modules/@types/semver/functions/gt.d.ts","../node_modules/@types/semver/functions/lt.d.ts","../node_modules/@types/semver/functions/eq.d.ts","../node_modules/@types/semver/functions/neq.d.ts","../node_modules/@types/semver/functions/gte.d.ts","../node_modules/@types/semver/functions/lte.d.ts","../node_modules/@types/semver/functions/cmp.d.ts","../node_modules/@types/semver/functions/coerce.d.ts","../node_modules/@types/semver/classes/comparator.d.ts","../node_modules/@types/semver/classes/range.d.ts","../node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/@types/semver/ranges/valid.d.ts","../node_modules/@types/semver/ranges/outside.d.ts","../node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/@types/semver/ranges/subset.d.ts","../node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/@types/semver/index.d.ts","../node_modules/@types/superagent/lib/agent-base.d.ts","../node_modules/@types/superagent/lib/node/response.d.ts","../node_modules/@types/superagent/types.d.ts","../node_modules/@types/superagent/lib/node/agent.d.ts","../node_modules/@types/superagent/lib/request-base.d.ts","../node_modules/@types/superagent/node_modules/form-data/index.d.ts","../node_modules/@types/superagent/lib/node/http2wrapper.d.ts","../node_modules/@types/superagent/lib/node/index.d.ts","../node_modules/@types/superagent/index.d.ts","../node_modules/@types/supertest/index.d.ts","../node_modules/@types/tap/index.d.ts","../node_modules/@types/triple-beam/index.d.ts","../node_modules/@types/warning/index.d.ts","../node_modules/@types/ws/index.d.ts","../node_modules/@types/yoga-layout/index.d.ts"],"fileInfos":[{"version":"a1aa1a5e065d48ef5c7bb99e38412f96","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d4306fb2e47f74835e8674ffac07d76f","impliedNodeFormat":99},{"version":"e437c5c1302869326c3bb93da85bbbcf","impliedNodeFormat":99},{"version":"e4324975a566567b21d350615f1fc6ac","impliedNodeFormat":99},{"version":"333b1b9a2a9ac3b8497dba5c63b5ba50","impliedNodeFormat":99},{"version":"6cffacd662b6eb5fa7a36aa2ea366bfa","impliedNodeFormat":99},{"version":"b4c34f9c23304dbef2d23698637ed638","impliedNodeFormat":99},{"version":"e5cb86a5fc491796ecd1d2dd348d208f","impliedNodeFormat":99},{"version":"feb6c6fb19cdb246a5d8acb36a6901c7","impliedNodeFormat":99},{"version":"aae8996e8b5684814785a42cbbefcd79","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"abad6dd56cc8caf095c165df8124d237","impliedNodeFormat":99},{"version":"01ac052ec4a79e87229f90466a9645f8","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"edba5df642941aa062a62f6328c6df3d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"bb3a710cbcda0533bb127712927cbe37","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7a42de379b489e8f7b647455bebfc576","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"692bcd75364db0f65d428801c7884466","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4ef72aa378127e7b7abba915b0110b1e","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3ec74c6a7d4463f0254db3a74cf75646","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"84c2bdfa470d075526cce6322d81b0b6","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0b3844c2b8c73e4e1ab91431411cad11","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4fc71cf4a15b8d99675a31df77f26e07","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d1b49564ddaeca3df5b6dbae925d2242","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6a25be566d60ccfc2d6e8b7bfdeefa83","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"8a20e27646985dfd58c57ca6566553dd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"9969f02ad3cdcbf4f709405cda44167f","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"9c9be4792a7a4f42c15ae7360bf28779","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":99},"4a34b730ef37d02a523a352ee38d5b4a",{"version":"7376cd32b4c24f5e3471d538cce0a6cc","affectsGlobalScope":true,"impliedNodeFormat":1},"afd868916e9e1d1fc494f6573e112e3f","52b842fca322a4b30f1f7b8cab78ab88",{"version":"7b395e75f006f1b735d397f8db9f19de","affectsGlobalScope":true,"impliedNodeFormat":1},"d63279d4a4e3c8976c93acccdbad5cee","26e5f29b11d665f98353aaead3964c14","bd6d92942aee8980c86b6bcd79befeed","8d7dc7b189b14a9833cc73dc0d537650","d0597cdf60c8a619bddf7d53b5c83b80","8228d85606edb47a21fa8d8bb506773a","5d7c55a43f50fd7a0b24c1f9ed7dcee8","1d11ec907cbf060dc5aa95c09315f36f","6d4d30a4d804b0c0f39967a1d85e2c4e","bc3e540ef5107e54e3074296ee10ed44","457d4af186d8f863f714fe9dd9c43fca","11ca1163bdd3fb8f862096f3ea92a5eb","85da1a7564f1525e1d8dceb419f6e11b","5f3c015bce4302b247acedb9ec20e302","a9fe29dcdd4288cacf574947747a4572","daada721cfdc43aa8e7c2e2d14d760de","c4d7f2ab9358166b1815281a9e767232","2af86ade36e4051944f46da0fd1df525","90eb781c9a8145090ce17290f0744bb6","a3ddf6412484d665d76145ba7fa319a8","b53e5eafe089103ad7be4f243fb517d4","344aa18a1a1f48b6d51fa564e2910864","ffd8c3d2e39447925561777d1ebcdc02","2b76267afeb2e83dff758e3fba2faa8a","662eae47724ed2ca873fb608034d0645","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","360c84ef5634445ed4b1111f041b6212","a21f1b172546b6a64cc7ddea394b54ea","937e86ab76f06c8dbd613be6555c03b6","8bdf05c98551836db89f23d60d176f56","5b3f18777c97e7ed444a39661c4462ba","cd3b63580b271a0e93649c0d92a1b098","1cc59f020b9d62d875bdb28a6e2f745b","a06c5977df8ff3f289f16a7505c8d539","652a1f711ddcd6149df9fc04c2d77ec7","f04158c558df8c51d46a1fb44c832c1c","d1ab6402ad42100de1cf3f5d15aa9d27","96b06af537c71de0a80e9ed880958afd","dec40354e62d8ca81f5996c1760bc6da","a9356de7c324c6f49c15587032b1f65f","9db07004a5d271a5a4c3f499ed8a033f","ec7a3f5e189221b1a18bed55a592c89d","d6990c434d94952d5be9a50a3a75a02f","635f7b3760665df603ed56c9adf06f9e",{"version":"90630acdc4134173bcf216f187bd3010","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"913b52a39743d1c11984e4e124b1f3a8","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2514e9a2749c0fc18d2f478e9e1e641e","affectsGlobalScope":true,"impliedNodeFormat":1},"fe51d7a9bcdbcce1e65bbcf39b212298",{"version":"849a1873c4e917b0887368c1be897faa","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"c46c3108bde06d3b1fc6f802eb09eeeb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1332add604574cf529fb33b23304b296","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9af0a7e3ef1c42cd066b9f8d365cc1ba","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9eca652586205dc5b07f9ba57b1c8500","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ec5f75939754ce94652189ec7d0d3058","affectsGlobalScope":true,"impliedNodeFormat":1},"e2f0114efc512fd95bdc12c81d5e8d6a","628b774b54637325e286752c79c12432","bb1f9e3091b88e9d0e93b7198c736af3","514fd35e5eb35bb2e5cbb908af0a0aa2","ed57ae88565308729f2327f26d684976","dcd932d6b0038f2e250e30dc10125b22","9508c917bd7e458745e222a82dd24ef0","fabf86f455f96b90538cc26320ab2765","14550b4cd9f433e0addd8b6d67614d23","cf0ac6aebc25cb780674653aaeee688e","35fef7bac8048f583e4ce6eaa0c2a4c0","6752dc653fc7a333027249fd851fdb62","b9ad7e689b46dfba362c1bf174e69018","8b0a2930dfabdf27c69c6bb1eeabcdc8","4513b1ed15523d247040689f37fa9db2","5c0c499eed773a750903d9497beafacd","2377da227d1bac82ff7b3f2081ddf8d3","beef985b474fefeb80d27fb2c8778371","c79fc9d9f09ae598a374ae7c0b5284a4","f2caa3cebb1e6be855519004830a6be0","8ebc9f2a77c900e710801214c5cb994c","ec617a0e0577dd6a3210c3b067ecb325","1db5d06e485bd82d6d5f6e36925a8714","24b864518967840216c779b5e5f00975","8719cd8047700bfb6046798390053823","f2840afb502c94db92dab0fb8d27812f","a7e7d08b372210c203745d3eac61a411","531183cc80535e0e94226d720e5eb038","f627eb958ca52c85e42f04dce4661f86","9a43fc665bce9012a3d5fe1b574ff4dc","13f4b4da6546a34719fd6bde15fb63dd","a589216508844bfc00e62fc2d97fda45","865aea1c3209e31b076cb6fe780e769e","12e64aaf26af0f5c8f1b263dd66e3feb","928971ebbcdf5b093ef37669b33bddf6","b744265d8ad12b7d4d5c5dc35d18d44e","eff32168b8348b822afeed9cbf61afa7","9aafd1f29b4d8861c1c6c34bf83c0721",{"version":"a127795c4dad633990c87aa0b86831e5","affectsGlobalScope":true,"impliedNodeFormat":1},"4ef82d390af85e719a46d566e229dd83","7deced3ef46e082f97d49bb71622526a","fa7acb320bbf7da8f76e431437143034",{"version":"ee57e9bfec6167b488ced231a7bf233d","affectsGlobalScope":true,"impliedNodeFormat":1},"7aa99080b86233d5b21416907d7a75a6","7d6a8df1becce5c270da2093e7835920",{"version":"c37fea1584ced70492ff5748ed570abd","affectsGlobalScope":true,"impliedNodeFormat":1},"b2b472cd0bf0f8d5f022e00ca1c401f4",{"version":"e22c8fb0fc65df14299c6c94cf729b3c","affectsGlobalScope":true,"impliedNodeFormat":1},"a84efb87b57f78ea0b0577edaacd8b33","814e0c2cc2a92531b6dc5d2a1767a6e1","79ac55b2d493df83277d681e4d64a992","7ab3b7243211fa08af307609be231d6c","7fd0f028e135bdf15ff757781a2f4ba9",{"version":"cab5b406d3defff17c931e41fa98aeb1","affectsGlobalScope":true,"impliedNodeFormat":1},"aa7dc1db3d208fb91418794a18539d4c","e9b8fc3c9291fc5701e219c0407e973d","b8f5d7bb61117f48a99b0cecaa75d186","687b6f8f042393a27ce6c8fd32972129","1d3b57f542db6054f952f8076b3c6a3a","4e0ba29e69c1176d4b909ad8a85a2695",{"version":"e5d25a206975fb43b72d246ed86fd7fe","affectsGlobalScope":true,"impliedNodeFormat":1},"88822a7d78686871bb9c15cedd3f45f2","86308ea691fd06825dd9a3ce0f1e901a","44782881f424302151e0de8fdaa39575",{"version":"f0ef68e9c53d126a7b3bfc1ae9f2c7c4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"71259a408a4178e5f0795188b4d802f1","affectsGlobalScope":true,"impliedNodeFormat":1},"eb80d821e5e931dcccee2697f3e249e2","961969874f5ee12ed3429d3d0c82de02","9a62058bc2d476e807cc6594eed72adb","40cbc4bb3b225b03c54255154dada07d","6534825a8bda3eeecde9bca9e3a99712","09a582ab2a73806ab5887ea413b3d55a","a0592261111f47230eb35ee52c12e635","c8206d568b54e5ea06131963eecd576a","15878f4f50c2e562c0768eb735c2aed5",{"version":"b636ba40489f78f02a4b71322994828a","affectsGlobalScope":true,"impliedNodeFormat":1},"7b844f3801adf7e09ea25ec5f39f9a86","46c937d243665015f13587ac0db55909",{"version":"1f29cf27395029939dd41fce4f0c5653","affectsGlobalScope":true,"impliedNodeFormat":1},"f026c594d60114f10583261f6499df38","1ac553606580aeec204cce24c38b2e3f","3c29bf7066a67e7151f563fc1c4e56cb","00d49834780046c2d6a7da3e50d83cca",{"version":"377c78771ee061f2b4e59d5eb5a28782","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7293552290431bff8ef5f13e6f7fcbfc","affectsGlobalScope":true,"impliedNodeFormat":1},"9453ee3aca6a51ae747057fbc6388cf2","6c491c1508bd3e1df0f45f38b07243c2","1f99b8445612afcfaae0f8591d8d18ac",{"version":"bbd4e0ea8a847a4b60ba7d5741985c9d","affectsGlobalScope":true,"impliedNodeFormat":1},"f57ef54941c62bf28f3beafb86025735","7b6c16d46b33570aaef9d0fdc4f02f14","29c297b3336e6ee3c2b9aa7c7dbdf00d","07841866bdfb5333a0eeb445e8052006","9c7ba88aa1cfda1b6580c52e0c80e335","2eb86e3874c1a686c4668f2135d75568","c5196a5d20837e2535b54f4134bff14f","7285e75e167b65a26b308a7510eee3dc","225da2c3ad049c48c9e018ba6c31184d","f90b9cd6331a86398aa726ee8239cf66","b9334806e53cd7de33ed19fc147d7c69","159d165336983b6fd6ef71c03939dec3","0f7d3fec2896c95f0542cd208ad679d3","f7c4ac7d083a16666110736b7423b75a","16a3bf4e99e3275960702bbfcbbfa9d8","cd5c183c2bad150213a0cccaafe937e2","d6ea403bc9232d6fe7e7622a88f42faf",{"version":"7fa578df98e59f9f70329e3e06ae7784","affectsGlobalScope":true,"impliedNodeFormat":1},"2a85fc47377fe0593e11df0805c37b24","0bf60b6ce895c720124a6b0aba87990f","f5da2e5790c2d5acd98acdce0b2c6a60","0997be57498f2b766cc3561c7df58f06","4f8a359db312d088f12df2b4333c70b2","c5bea81fda0ed705abe31dfb992bebbf","1e810fa9c060cbd95bdedab0574287d3","e6879a6f480f19900cab308fd24295c2","f8755544beb8f306b6255afaca6d086b","012c8541cac1ef9c2d3542ce682acae6","1c33130adeb5a1a554aebdac8b6e4a21","59aaa4b00f7d1578b419956b5f723fcb","ecef6658f3aaef431fd96e55c545c2f0","1e80ef7492031618c4d545ff3dea5468","6029eb954f3939596bd9931dd20fcc9a","5755513089d93475a238e60e5937b78f","dddcf41cf4b058be12da3980eff3a9db","bfac75e3d1430ca15d782f68008120b6","6e3e6a7b1f4216b6e7129c22e985ff33",{"version":"6a1db78594f3e37c2896488167b29bc3","signature":"151eb24f6c76e8b47bbc8646e207e3be","impliedNodeFormat":1},{"version":"c93d71d7c02c24c1b2b20f8e55a3ebaa","signature":"3722a26421696f0e09c0c293bd0ab3c8","impliedNodeFormat":1},{"version":"c2bc43024eaedf61693f7f9cf3c3e928","signature":"ae616431af868bbd45414ee5170fabe5","impliedNodeFormat":1},{"version":"d97b77d7b391420a577505120c07b1d0","signature":"2828dec26b4e760d8b208804dbcd3f17","impliedNodeFormat":1},{"version":"8fc334aa6f76a72ae234ebad2af0d416","signature":"ed1e881fcb10f3bd02c731f45677f3a7","impliedNodeFormat":1},"90262bce5ba60681c470eebb7eef04e5","fb6a6c0a3d33c5319659d925d4f17c2f","6dc887037890327c31795987a2cd82f9","5933b9a070a1e6804d0bb2128d97dc71",{"version":"b57a285c50a001e4728b40bb37c07c49","impliedNodeFormat":99},"c1fc70621683296956f53bd929672a1e","c0672cb2cadd144926320fcfac42339c","2664dbb4c951792f9b8f266ab510ab5c","61357444a3227aa8d6e33ffd89ae7e52","f2dbf189b643cc0d72d3924c2f0f4d9c","182b4084ac425a5e09f50330718ee625","c16b62c498b6104e3eba5efb8be1153b",{"version":"8af7bca0eb1df4066b630798a960df26","signature":"88b7fa54deaa5f14b7b640f503c69b6f","impliedNodeFormat":1},{"version":"55a4cc7f1a7fdae2e3ea78cfd1587bee","signature":"2e4c38c0f9085085983f19707e07c376","impliedNodeFormat":1},{"version":"79667296d5a26ca01143a16e767d0c31","signature":"a533b9a86c610d91514fb398db51b2c4","impliedNodeFormat":1},"d2a2ede630129324f6f2c8770c54a324","4d1516aa59a1f332866d691d978f6f7f","b31a207222fa71170e111daf7a509678","e8f0f0a73e8ea9fe78222747342b82af","4dfb850253f7eaf7cc92d117322f7c8c","c4b0b4a3f2db2e1494cb00e29bdc29bd","7265c1e62d7ae1f47cef598a045ba74b","bca5fb19b603c013d3ef1f516ede2f88","f6ad9697f63c34d0568bad694ee1d745","b11698350898fb414beb33b3edcafe8e","589a2f3e47a4af567e1d48f99279b36f","dd016cff3a411891f9d511bbb41e66d7","090407f4e51511db24daba9a8fd59fed","ca7d794c056d2316f33824b4f9ad17dd","14d7efdae44aa80aac6a1489f7b8e139","0ddc386f5ca97cf42007934f4cccbf20","4a53fb6fd58553ca61d2cd6615ef13ee","5e0f996530b6904d7297aa9322abbc1a","57217a32bf113dc5a223f46aacbd5638","33eda1f4f3449db554679a7e6e15526f","0aa5a447f4a92160faf03df80f13986c","e5e22421a2c2d0e3a3460537f36f833e","8ab52a92e249f6c84b6caeb5ff52d1df",{"version":"f172af2a267faed4fa9cacb183c76aa1","signature":"73ba827ae493bc50fb0cc876c9f1385e","impliedNodeFormat":1},"9ca26239bc5259114894c41db8c8dc23","a415e562a7f8e4b718643d6ba2617937",{"version":"29883b38c842112781d5da32a6e091a0","signature":"12d3782899265a333313649eb80efe17","impliedNodeFormat":1},{"version":"9d8b47eedc9e528054c53a1430e04ca8","signature":"0a0533d7793b27f5a84ff88622eff951","impliedNodeFormat":1},"72c4b083d97fffa95b9e2568554802cb",{"version":"0356b063ef7ac99c6cb9bb6229809f57","signature":"8ae43d60633b4e3c1079263cf966c1bf","impliedNodeFormat":1},{"version":"5da9239b7c0fdda1c33e484cb765993b","signature":"90b61977c19abf1e2c5ed39e3f8cf4be","impliedNodeFormat":1},{"version":"0f41b6864816704889be4c453b9590cf","signature":"0690b02c2e07468907f8ed4fafe8e82e","impliedNodeFormat":1},{"version":"5930abb23129dfad8d03c53269c9b447","signature":"380da2580160886b30e94405954edc58","impliedNodeFormat":1},{"version":"95a872d7ea5673b75506abae50578f91","signature":"7b3e6e6fb52363a591c0e049b7f0173b","impliedNodeFormat":1},{"version":"968c83842ee7f87e79afc9dc49232994","signature":"47a118511a6c2ba573b067a9bb535e3a","impliedNodeFormat":1},{"version":"16dfa05518573e67acc007ad728ebaad","signature":"45418c6b1d25a852d81f55e3b0b64803","impliedNodeFormat":1},{"version":"99e5cbed24f5ebb7b9aaab5b1cd699c9","signature":"cd277d9fd817f405c0b03ca5f73b505e","impliedNodeFormat":1},{"version":"b2ea5824c931bedda3d3bcf01aa03f31","signature":"1ba73732f23303639f73990860ad0722","impliedNodeFormat":1},{"version":"ad0e9a5a237054d50790a83c38ac4b74","signature":"812b4c5a414b000303f2549496406da6","impliedNodeFormat":1},{"version":"935c429176ddffe7ec1466d2ca46cac7","signature":"d4c3e51be904e5df359405d3f544586c","impliedNodeFormat":1},{"version":"4a6d5a2a228f77a17440e434f5ce4179","signature":"139f2c83109c9699b3413d3d49b5dd95","impliedNodeFormat":1},{"version":"28e5a5e13c5ca90f6747f56817d401c8","signature":"36ba4c9fd8553f327fe235c823e4d4c1","impliedNodeFormat":1},{"version":"af835f581c784645d2b3513164c4ddd1","signature":"7120633f61120881377ce07baa36a58b","impliedNodeFormat":1},{"version":"b20d04ba407fe91e529461abbe6c4a91","signature":"465b99382b840a747fea346823b7987e","impliedNodeFormat":1},{"version":"dd8887dc0573b76ed2953c7df7b43787","signature":"f48d38c4697f4f68bc881f6e3feb5eda","impliedNodeFormat":1},{"version":"6b93d6cae74b4824714542770e14ad0e","signature":"735e8b1b553f73240021990be4c61c1c","impliedNodeFormat":1},{"version":"017d0ed65a8430bec9e78a1f67391a36","impliedNodeFormat":99},"aae7b203fcecc10f25aeeba11ce5fff6","190d8f5da2abc43d16bb22d2bd8eca28","e30cd47fea0096ba312924f04657fcfd","42b9a10a2b103244d0ff3d64903f758a","e9dc588ff82d48f8007c58df94bdd099","62257789c6b6035fa20fdf1bf77c3ffb","41e6a46bb397fa9fac581901df875306","84400312d01ef0d0fbeac00b5a58eeef","ed590173ea3ecd9b6778dd93436fd155","4de5cd20b05709951f67a5866b4d3784","5c7efdd8e0a8c55615185914dd8ad852","166954ffdc497967bef0f857bc785bc3","afae1e973842a8b40d6078f48d733113","945aed6e707047e7bbfb5c4c913ce510","f1d3c56778acf20273a2bb9d4e8b4c54","075dcbb1c053e70512f6454e37df3b51","2eb8545a221535650a8dbabc5e10377d","0d9701872921f01c6033710298e89d97","e605b85b93fd894dca5dbb7c906738af","7708744fe28eea34455610724b288d96","b8b51c7d520e46e8661e2867450358ed","0b2e0629d50db6e5d8669a51a210b456","8cf70fd16f19b9220316647ff096efdc","42b76735cb6692a31bcbf429d35e1caf","4fa51083650c47ffd74a9493a6efea1d","fd73fdec48454e0c86ccf224f9e128cf","bdab1d8467c46b1f4ac7e5a4a0e2bde0","ba0c5a40c1651c2caa67420b9242cbf2","accb376a577e9e872aa42a39e5cbf247","e6140d76797d1b58387464872051085a","9f539167a1f2b9b370f51f63bd0db44e","6f1d691dcb491daf12d2dd088bd721cd","71aaf413e71ea98b2801f3fa5874003f","52196b73356f895a670737814aa63328","2e133e06585a4dc93fdd2a9ccb9c3db2","2a3467a6361df7fe3ec91d3abe823131","26c7f15d0ae88dd9dd4289f0d6ef2820","c39c2d833dbb62d9113e7448bfb9e9f1","01a3645596c99d2b54abc92922e1cb9a","c5eb4f5a767d6ffaf1868b5595513d55","3c3707b7189855cf80ae1b28ea4b0acd","4cdd54c253133c8049e09edce0b9ae92","6f06a85a2dad88eefb4ca2f783f25c26","7965a9e28b328eab4d7fc8385d2e187c","4c998492eb67016414814d1e4f647fa4","d8e58359717d80c1d8c8da376e2d2134","57a18184dd18917cb44fb3f4940b7643","02c34b2e66c303c3206c2f31eb40fdfa","e47f1546aa1d71b9e278776660e43d29","26523def25d0b46ed59965f359a87f38","7ac4ab51e3c1916ac5d27c73e8037c4c","43f4ce9c63dbf6c4a29d78df84ced7d3","42b76735cb6692a31bcbf429d35e1caf","8ea6e9ad1e74cefc3de57dc69f511e4c","bab899f85c5f88fd24ee8caf4eef3c92","93a276d931370c246ac70249bd677cee","17adebd317417629885a6b7f63ea7739","c80e1582c188e1dad6753593d503e496","cb4ffa07a0e1430e60c1f6e4f0576a12","2529b017dfeb5dc02bc90cec6182448f","60160b8fd9c89bfdae08ee2e46d4ae71","4909144452c08e67e2ced97bb99a0174","acb7f1a0c90a3f52237ea87158289b96","28ccaec5443d5fde4304a36fd1685d0d","37013dc910e1842a2f247d5a4e1c97b0","a1dd297ccc5e0df130caff3e394b4711","060df70d1f0f739a3368ca3be13f5c70","f163d830877ba191419e37c601705edb","d9789a5fd7f48bfa99e8a1dd2c543f22","42b76735cb6692a31bcbf429d35e1caf","42b76735cb6692a31bcbf429d35e1caf","eb089e657937fec7fab2cf8419d32823","c5115870b6d29c555f44d2d3e16cc806","e786a27f4ee6db096e01da28373daa4c","dcfef1ebab80f46072ced5108b0e0392","b9c269572e72bed12eef41435f984f73","507c9c3e2c9dfd57eeac770825bcd012","94698bba3401267d1c45c36d035209a2","9a82dd009725174d15ec3e6f72cf5e43","d14e31145fedb63c364d64bd0e896d95","c38ab453a6fe20168d4e65c8e21f722c","2c63eb2e1fa0d673dbf609bd112ee977","42b76735cb6692a31bcbf429d35e1caf","eb089e657937fec7fab2cf8419d32823","42b76735cb6692a31bcbf429d35e1caf","757a49ab191e1cc3903a88368f676746","0cbddc54ee9b62376187cdf2586c03d2","622ccd82b7f3d7dcaa7ff0795965b6d8","8fa10fa9c5fc6e6463455ee6b91201f7","1d5ce9427ebc5f8368d983f378750381","22d07309a352f92c8a1a251cf6e2382e","59c997a54d3274ad582d4184e7e461bc","e43d3c5c7c1c896bd6f99c9fefbd2ea7","eed582e5f7e01446c157fc79fe6b4498","2b86d57c65a4489afbff3f422f5736c0","42b76735cb6692a31bcbf429d35e1caf","42b76735cb6692a31bcbf429d35e1caf","a0125ba9f69c1227eb509abb96925585","78bc82abf9aad6d75cb158dfbe4c8161","59bb7d997ed9f39be3fa579650fa6349","25521ef51d4a623ce99eec53b592e965","ee226703b46c9f94860a49544e038076","865ef11e38dfea2c316662f73e295468","793715c624d6ea243ef7a15867d8495b","3b84e1dcd58ce6510a1bd44af8eed550","6869a1682e1ab198320d511ffe9e6744","bac13bdf8d3b3460c2297cfdc1b9fe5f","cb2374242e1eda9f231103a3a63c2f3c","c599d85f332bec6a0d8d793a01fbb5e1","57f59722963ec3cbaf82e2128e49e7b8","4014c9f8a92c163a3b67423562c1c34f","42b76735cb6692a31bcbf429d35e1caf","63ddda6896bced253aeff636821c3274","b897bbb5b1d14e7979fc343aef7c9eb3","d290f335a7b786c52e0c3f96d50244ec","5708405db53fce7c7b50e047dc30e1fb","7fd15f560a43fd69c2160060547c500a","42b76735cb6692a31bcbf429d35e1caf","f2c58caf81ffba7eb48bad19b216ba25","189358f6710c008c08b943e0a2def1a0","dbd33c9a2394146467f38cb1a87ef1f0","2ec54e357a256a9a979a83c6cd12dbdc","593dfa4f54bfc01643dee6fb5415cf15",{"version":"b7e3aa6882c8b13aaeb0734b4ec5dff9","signature":"6ff22e17565c66a88e9b71f03a445197","impliedNodeFormat":1},{"version":"33dc02b9c4f6a337d9af36240a89af69","signature":"cad7cddff86d7991fb1b1a3f0f0577c8","impliedNodeFormat":1},{"version":"796b9c84289819e284a6b41658f3c806","signature":"50fb2c4e1e4c6ca98ebc07fce1f3786d","impliedNodeFormat":1},{"version":"02f365ccc604ed6c1259ffe0d304c5df","signature":"8e58585cafe41df34c666f4b84223d90","impliedNodeFormat":1},{"version":"b850220a4081893f2fcc949a5ccec568","signature":"ab5ca30434ae125044e66a670fe54dce","impliedNodeFormat":1},{"version":"d2ccfabe10a1cdfd4030ab79f5513f48","signature":"ea195f67ea51e4e6d2729c2481c01bed","impliedNodeFormat":1},{"version":"98c9a5cd1bd2c162b1645fda18b317bc","signature":"af8af924e0ecc97edba296856dc8454f","impliedNodeFormat":1},{"version":"b1f2470557bce131e8b0e2fa3fae7c05","signature":"9a8c1ab8c662d05589bbb9af760d27cc","impliedNodeFormat":1},{"version":"dc1adb991407a1b20b96cac71ee0b26a","signature":"468fba60e8fc5fb6d9ffbc94ddaf3630","impliedNodeFormat":1},{"version":"4ba6926dc1d6a1a37bd30ce87d0b2f8b","signature":"cdb6fba8f151fd378a508d927188ba9c","impliedNodeFormat":1},{"version":"6757ecdb34e40bdde41297758782ba59","signature":"960cff870e49f472e26c26f44a73e4fd","impliedNodeFormat":1},"6ed0b20033c580429f38a2b7b823a0f7",{"version":"f1c882568168e298f7c84b6f5c57b65b","signature":"67ccc5719e9aca29ff4bb8bd092a0b3d","impliedNodeFormat":1},{"version":"066ea6e854695f27e7d955536c85c1b0","signature":"80fa0d016c243d8ac7395a772a99ce38","impliedNodeFormat":1},{"version":"484a0ec304994dc1fd7b840a7e7bbf17","signature":"fac918efb0ea7041b66131ebc087f8e7","impliedNodeFormat":1},"182d0810dc5bdb879a67cc73a54ab2e3","1131df6a1351dcd15a42b4f3dc2c26bc","bc4823928adf48deb7c79ccc4775af03","1b3158a1a6d317b1c468286c3cf11a52","54dd1676bc6db5ce3e64a4eef95409c9","32fb98b3fa25d2c284822d8b409a5a70","8c895bc59b75fb4c3c7a83990ea8e5e3","9abb48a6060724febe2476521e93fe94","34e8d5bbd90cfb7d60388aad23d2e702","a62d8dafef1e7f21c6440685faa5ce88","acffc5529515007024548e136a409ff2","088e36755fde5ceaad9cb5dea73f3ab3",{"version":"29fc9434962e9a75367715ae674704df","affectsGlobalScope":true,"impliedNodeFormat":1},"60e6c5e818ae9d8cfef4ac7dc686a10d",{"version":"739c67b0dc311303cc6e7f4f8b96e606","signature":"9cb584556afd29a4980cb9e38336a280","impliedNodeFormat":1},"ed9972687c9690d0b2379c6dc9cca7cb",{"version":"8ecbbe18921600fcc7654beedfddfee7","signature":"8adcc956345a1b762686866ff80b6964","impliedNodeFormat":1},{"version":"cf45ce667d728bdd90f19589317c161d","signature":"5344a814e0b70129b9c4fa220b15e2a4","impliedNodeFormat":1},{"version":"f4dfae69b2ea450ee60e24dde877bbc0","signature":"3d97f107cd8920b9255550d4b8812e88","impliedNodeFormat":1},"549ee2c68df60762065bef21c8a9131b",{"version":"9d1b4b71dff2c335a03622a7690eaa8e","signature":"4e9d8c3cadb4cd5cee15988a7ab41d70","impliedNodeFormat":1},{"version":"048469d11f2d3d98996daaa2ed2b0ecc","signature":"37773d60974bf7eaf7527da93f487e6a","impliedNodeFormat":1},{"version":"82e80d31761c9eb6853fb014995f770c","signature":"f5f1aca3394556be2773481a16699a67","impliedNodeFormat":1},{"version":"a9c2a69457a311a44fa91482e76fe891","signature":"6cff723add516f8a6245ce9fc5fdcc16","impliedNodeFormat":1},{"version":"5490bc233afcadb592778d1ad151c9e2","signature":"9ead3cf8240f39459e4cb4e961d34942","impliedNodeFormat":1},{"version":"0802c6811f420acc92252f8f290ac698","signature":"1b7c3a6a75b7a876b3788b0eeaf91aa4","impliedNodeFormat":1},{"version":"287c99581b150b95ab61fe20ca5fd4ff","signature":"43ecd949bbf9b240f634298de4f268ea","impliedNodeFormat":1},{"version":"d88f874a6521c2f974714a0957a713c2","signature":"e08f2e6e547b3ff48f15a7ca695961ff","impliedNodeFormat":1},{"version":"b4353f9706ba22a168680dbf0ddde85e","signature":"fc07d58060212f1ab1ac4641d68d33a8","impliedNodeFormat":1},{"version":"8910211c38176b049e7647272eca876f","signature":"7549df3c7eb32d2ff4e0008c83c72dcf","impliedNodeFormat":1},{"version":"2289526e7a53769d3833ede562cf31f6","signature":"99834fec6b911e123f926e538a82d19d","impliedNodeFormat":1},{"version":"b08a3f41db473fd940718986a225cb50","signature":"d4412f9c9cd1fd6b3caae54bbf061611","impliedNodeFormat":1},{"version":"d27b497fc27b80d68be961a19ec01892","signature":"0ca5e6f32df17ccc4d9cb3bfce0fa980","impliedNodeFormat":1},{"version":"8a4b2e6412f8ceeb9c72efe72fd06574","signature":"903980f0b6796c2bbb3771bb4e5f4160","impliedNodeFormat":1},{"version":"ae69d3d68340cab0ca00017a907ba081","signature":"a9bd790464721a983754ffe69c5500a6","impliedNodeFormat":1},{"version":"98af206c1f5272c271614626be2987f6","signature":"0886c189a756d6542cc517b60ae595ba","impliedNodeFormat":1},"b14a98feeeb0e5a50e9133a22c68446c",{"version":"574a60b5144a50acdddfbbfae1d76b46","signature":"c98d96401e13a04b99ff93d0d02af8ab","impliedNodeFormat":1},{"version":"69a6fafda75d514eebd20afd033acaf9","signature":"c996a6fa30756a5103e04ab447beb7df","impliedNodeFormat":1},{"version":"fcec3a6d57f53755026bd4c70e156206","signature":"20221899e286aea93ae5e8b4a06e3249","impliedNodeFormat":1},{"version":"8c6ffdee98d8e8323825d4ec4d2c6ee7","affectsGlobalScope":true,"impliedNodeFormat":1},"3ef6bce1299faf411f33ab1bae59a884","086accdf702b13dc96a5cc430c0c5fe4","2746dbce860e8644ce715860fb7f880b","7dec06c9860e0c2431b1f63823cd58f3","c15e75315b24033b53bf1716c810bc55","2a4d28da0f4f4a73c6a6ca0b70432196","48500b61fc86a5b4dbba2c94adf5214d","cec011fd991c3267563c5309daf65ea2","2fc06f6ade056b6a515a30b3e79fe977",{"version":"28fd06768fe440916999719adf9cd531","signature":"64e3d5ca3392abc8e11d7fe257c99884","impliedNodeFormat":1},"58e6515b42564dd576591485ea14386d","a71be2d49e8f5a3fa541e1853789cd4e","0dd119002dc6613bad0b2d070c770577","99d83f6dc243042b8a22ceb52a57e498","ea26b52d5672afa2a2c9ce6a7b7af368","df5fdeca48b1b52a8d19739277ab41db","33aaede8aa3d72a61b792a1e7771e058","b5f9f334f477ef49ddab5b6ea5cdf6e4","fe7203b4271a828ed0dd9a42dd3dfb8f","e0fa829caecc65afdc573ad881c4146b","7f74a43e7f22207bd0e42d3fe4ca435b","e6ac6a7cdc797f6d3e6d276c4be54a7d","fabd5be8a26982c3e41a7a2f3355d126","53e1c7a2e32f612a2d7f7968b9880283","6c1284045dfce96c5cbc80deb5f6f071","a8ecd7bde74366e17a77e647e3a1fab5",{"version":"a6e52a7b3265ff5f81e82cf9ad8005ad","signature":"5d6c52df077dc5e87284d59215f6c6c8","impliedNodeFormat":1},{"version":"a02c34c3ae78c3fd85009a67996cd037","signature":"c34fde61bbd03bdd31714551339aa854","impliedNodeFormat":1},{"version":"df6feeceb762b442694daa50dcf24538","signature":"edd644038908924c7b5df00c989b842a","impliedNodeFormat":1},{"version":"2ee39d474feaeece32da481451fd8235","signature":"571eac93ee60841b34e3c6e70f672df6","impliedNodeFormat":1},{"version":"7e6bbbfca71dc6a5f615121137a2a365","signature":"d9b7353a3588a71271aedd370bbc19fc","impliedNodeFormat":1},{"version":"01f13d738cfaac60c4728d27abec970d","signature":"03848ea9df33d15d8a26448b4b2717ab","impliedNodeFormat":1},{"version":"9fd41793c070adac239d66fb03e1b89c","signature":"8db3c9cf79f2d2db07a05a7a119464cd","impliedNodeFormat":1},{"version":"044b491989e04751b596407c7dd843fa","signature":"f2a5fbcb7d963b32b937270865757158","impliedNodeFormat":1},"ca3dae57dbba7f5a8b2e3843dfbbc5f7",{"version":"68d944d8b23d8f262f484bc45f83e021","signature":"6ab5480c95dc1a4a84eebe968603536f","impliedNodeFormat":1},"61308f0f2032073a3744705670031fc2","21cfb61fdf6de98e79081cbf876e778f","0fee551147a23ecfd5de5a62516635aa","e06d3e0d1b7654900426c6a0beb65a52","f988f054f112a0f52c2fda39d23974bd","43e3d2307fe9d1ce7e9ddab6e9f87f9b","58163c3e27a1dfbb30b53b17b0f74961","1ede4fdea44c7a202500a5e1ac29efd4","92872bff635e51e84307935ce62e4ac5","688881ad1b202bde71983afa676a2e5d","7b9cb4c19cb81a59148b20d5927b8ae7","e948d92ca1997b20b75ecbfadd990a3a","fecb322a2d1da0fb4bf157ec1f0f3b88","840f3882402f7d040fdb34170ce6dbff","32dc2fe8db7044ca2422502bb56acc27","405130245a22d0ac72f35f98555a3da6","6577a3e2a74b67c7b2528084915665ac","583a169e22edbdb51154cab87f81fb48","706a76f8e79abc658eebd4163c463aaa","abe7d9981d6018efb6b2b794f40a1607","abe7d9981d6018efb6b2b794f40a1607",{"version":"70eb37a34f7858f9d24f40b1f96aa00e","affectsGlobalScope":true,"impliedNodeFormat":1},"bcdae93521bdf605d31a091ffbf34096","008df2b25525ff7e59f5f7667afef247","eef71b1677743cb71433e0f085331f14","deb2b3b77acbc21a1c51d0a4d143b606","445a869f2a7360d6d8782014bb6b4a8f","1ac3dc0e8131d8dbf1cc87d263dc3059","f048d19182a55fc0009ef80b488ddc11","9a097f893ec6f14e8c13551186dae07a","2ea4a70245e70baab5af89922be62e7e","1ab4f127f2510e057870fdb8ffdf22d2","c958a9a0ff49b4fa948b69a495984d5d","a359c7c1bdbcf32cc76a55052c865b1b","ca09b913bb36f2d7d51f699b4857c100","f3f761239cc172c5dd60236aceb79395","694df9fb36ff10f61d09365ec28d9501","9e47510993c6cca516e16bb37cd1fb9a","580294eb9ddd4c063818f3ae92e26f91","1088206b7fbbc31177e6b7599b208e09","36ccb3844d98882c63be347b7c67c0a3","f32d3183d0f3f7b2ea57cd14c11c2636",{"version":"179b4ace29938c3a536f141b65b2b449","signature":"54b1c47654ae551ea6cb7e36e1e9bd2d","impliedNodeFormat":1},"fe96ecea78e4b3b8dd156ae8143da3bf","b87ad1feb679fd40f233f952aa0cde87","477a06bd5ab89d518a86f1c511211c6d","b89c0afdd628335b41866d819dcf047f","67f42adb1e867ebc6b6b0f391e6cab76","dbaa441a20d246ad0f54b2db2da679a6","86787ef87ac9c986c2844c10ed51dcf2","b099e0bdf298918caf48cb43b9242a09","f1b7ac624a31c1745db98775310afa18","55775a298812b43e9114dabd88a8918d",{"version":"0f0cb5884dca060194416407ea32db96","signature":"a3708f559af809cbe1913800741c89ca","impliedNodeFormat":1},"94c167a64bed5de38936f439221db426","b8c1053af4d82b73ae1dcd12f9339866",{"version":"8ea16c039bc0eb8b11a14a47eb7b2b69","signature":"85b5fc00a416eac6f39b1459d9532b66","impliedNodeFormat":1},{"version":"30180c2ddfc614d2401de432df4144f4","signature":"75b232bfd8aefee3974e4a01690263f2","impliedNodeFormat":1},{"version":"1623ca93d093f67730e8cb7f2fe43ebc","signature":"78f9da3cdbfd516caed4f5efa11d5d04","impliedNodeFormat":1},{"version":"c90bcb589997650aac1259d4bf7b0185","signature":"f7333933d04e4720a1098312be7aa909","impliedNodeFormat":1},{"version":"e541d963c05d87669acb475f83f0740f","signature":"84b9152c732cf27387a6853f899fa395","impliedNodeFormat":1},"7bc9fbac6fba13b0c439b45e7f413937","baba6baadb6677655c1078dc52105212","08438df3f7f27a87056551849edd15cd","6aec5e4ab841d50c79df02ede12103ef",{"version":"9d01dd0d45ef010e0e00b9e2cac8064f","signature":"52c847dc37e8ac2691a7be1eb4ae4e8d","impliedNodeFormat":1},"8490bec05f8fb166c78fd2ab00a1bbe0",{"version":"3bc7fae538a78354c6e5dcd6f964a774","signature":"54d6e79ecff56b62b98a0947ac03fe2c","impliedNodeFormat":1},"d806e9e0e872d5c486175c45989b9bba",{"version":"9543b758390433683879963944676c01","signature":"b07adf636520ded7ee9a951e07b1ad12","impliedNodeFormat":1},"0efbbf1fbb04b4468856a566dcb817dd","6fe3b7c75b6a3006c61abb96e0b834ac","51787b0763de52c67a65b271de24834c",{"version":"725e267e415de60c4942487bd569b842","signature":"d3edf85d1af31c186ca5d4a2171d5cb6","impliedNodeFormat":1},{"version":"8d44424720a0fea70204b423ddd592f2","signature":"68296613ceeb1ae06eb97cf95407ce03","impliedNodeFormat":1},{"version":"b042509a23fd6dba4e3cf191abec3590","signature":"debbd6efdcc2364d55d08ae499bd72b0","impliedNodeFormat":1},{"version":"283f30b9a785dce48ffc6a48c0a7b607","signature":"7256dadb0cf51422c2fd866a63aefbd0","impliedNodeFormat":1},{"version":"39f7c30115410d907cbad47eda03c453","signature":"d510b2ce64081bf6f6d9c8866e1ba61a","impliedNodeFormat":1},"213aaba873aee987793cb6fb35e7c979",{"version":"9bcbfcc3700be445628e014ad8acfb1a","signature":"b4f1700d3f36fc091e094aafe5c9eb5d","impliedNodeFormat":1},{"version":"81c1cd79d36fade61f1cbf8af7d944d3","signature":"de2725fbee3e50e85f97e9e8e186067b","impliedNodeFormat":1},{"version":"0d2ef3c173523d8efd78c7e3aff16a21","signature":"767c0cac109c69ca418c9e3ad482cd44","impliedNodeFormat":1},{"version":"382a26fb1ee5e060f915430f4100a93a","signature":"b18f3b4bd7f60da01dae70329983abf8","impliedNodeFormat":1},"110643cc807a639508d8c2f03e001250",{"version":"eaf233b674a4d616f44727360201e004","signature":"1f5a3099778bb419b52caefd1029c0cc","impliedNodeFormat":1},"1a49478575855223020afbfa19fbc651",{"version":"73edc84d8b1dba507adb62670bcbf2aa","signature":"83a46a5e5354d4a3ea89ccf1cffe08e4","impliedNodeFormat":1},{"version":"bd12dff1ba515c7a90ba89a59d790bad","signature":"1574d520ba1f95f51edac217b0e47d19","impliedNodeFormat":1},{"version":"371baf5dd9af2d72fd088d696fd50a6e","signature":"80d41765eced618756b1be52dad9e824","impliedNodeFormat":1},{"version":"93694cb534c2a54f51a2efb1f70eded9","signature":"a98a337800ca317d1cf7985c79ba2976","impliedNodeFormat":1},{"version":"4290db2e289969ac031c7d4618b9c48e","signature":"3bee3c405ef2d4af76360d84760b74c3","impliedNodeFormat":1},"0936eae97b9f80c458976a9f0c8bc09c","a704b99ca4e0abe3828136d45d557ca7","d87bf898da6d0243655da868369d9276","3afb18de7a3a9ea615a144ab1ba3cf3b","274d25f1637bda0b482ab6227470151b",{"version":"c4f0542a5dfaf53291668afd7921f601","signature":"ff37f1be6f43a4957f2a3db94ade900c","impliedNodeFormat":1},{"version":"aca7cf53aced3c4023a2cf7d9344c523","signature":"e62b4358bad67865c28fbcec1bc58bfe","impliedNodeFormat":1},{"version":"2aa8109bfc5c719a3d31f0cf09c23237","signature":"173ad93ead7d065688494b10acfb90f9","impliedNodeFormat":1},{"version":"03e9927284046bad044f9fbe23e33339","signature":"fa9cee943a56f7679799665e0066af06","impliedNodeFormat":1},{"version":"cf54c5616f78c1c60d4baea185aa52fc","signature":"82c157e1cbf8868488f05c6a0ade2b07","impliedNodeFormat":1},"e07ef02f5a71fe790b99fcc1332a01fc",{"version":"82f4109f9091a0a476e47ac665054290","signature":"2ead767649ccf9b0b581138b308d2308","impliedNodeFormat":1},"c7d097fd4ecf99dcf5edd9ca0576c3f2","22e3d46fe907b3165b55b56faf3130a0",{"version":"bed461584fe7b4f37427e6af01e6f54a","signature":"64f45864ce10beb6cb57597811340c8f","impliedNodeFormat":1},"29108d7e2ea98fb5c60adf5389c14f51","abb3d657004be9bc26aa9a2af10f42ae",{"version":"b0dc8d0d655e9c52089be80c108f4e1b","signature":"7fea6f6f39c72c1a4bacadaf96ad01b1","impliedNodeFormat":1},{"version":"04d566da3a895265227d90d68b03a3d8","signature":"a35ea3adc395263768fdac89132186ec","impliedNodeFormat":1},"9549bd6fa099a7287b20433facb8891d",{"version":"34f9fa5b840d4efb8af9e72470b10492","signature":"4bebdcb8f015d5a35be4c041b086b746","impliedNodeFormat":1},"3e1ccb4bc3f0dd10d599404a119d2817","8271c866c44b502b4e6a717974fd2033",{"version":"c84d5b4457505cd16bf66030c26c96ab","signature":"6b23e5a9a540b52ead9de4144522da23","impliedNodeFormat":1},{"version":"a2bfb9fe23b190a907ee16ab40e49000","signature":"c90e1c63f821bef68b561d38efdfeded","impliedNodeFormat":1},"60fc42e11c7dfc6ce3f1605242ce66ee","16041794603a900d628175621386a28e",{"version":"b36d9a585dbcee4cae552f486d681d10","signature":"8e148064b80ea850a39df69df44e8b58","impliedNodeFormat":1},{"version":"397f52353f6d41d9675da70ec09ceeff","signature":"5f0a9696c8a67aef997e7c94f97fca85","impliedNodeFormat":1},{"version":"38c972c46007946eaf39b37964664cb8","signature":"3ef79107e26ef56eb70633a977b46ae7","impliedNodeFormat":1},{"version":"606af6bc14e8da4f84be8ca2cd82ef9b","signature":"af7221c54288ceb935911e938af8b2b4","impliedNodeFormat":1},{"version":"81a86cc1520aa7d9ba0ede2d84ac1e9d","signature":"d721462efab04ec173d730325b684536","impliedNodeFormat":1},{"version":"25f01ba0c45e5c02d5fed02eeb30e0dc","signature":"c0dae10f700c7a0357e00b519386e668","impliedNodeFormat":1},{"version":"30112b559de46e51f6b4df06431b0762","signature":"d2541a4e67ab28b6c82a786bfd588cd3","impliedNodeFormat":1},{"version":"6a78a4d995b28519027f006968e4c99a","signature":"c5ba9dcd4d9dea89aa10e419546ea553","impliedNodeFormat":1},{"version":"e460206b6dd08ab642258ee1fab58592","signature":"913dc9c3855670d3d205ea1ee5fad3dc","impliedNodeFormat":1},{"version":"70f408d2db04aebba764e3abd9690cc9","signature":"016e2ff70cdcb0105216283a29741728","impliedNodeFormat":1},{"version":"357705dfd76c194fc055e0ab28de9614","signature":"6debfb1c5027466e93e462ce8779aa31","impliedNodeFormat":1},"af41b5a2e8bdc95899f583fed3fda8d3",{"version":"92c0d10737231c3d052f2b532bec7bce","signature":"4d62b06e356bb4cebef62e5c5eb8a0b1","impliedNodeFormat":1},"6046370170d241608d0c871b9b900e2b",{"version":"f66e89e897583f927bf58bbefbc0a116","signature":"ae17dfa4eb2cdab514d67b4132959d6f","impliedNodeFormat":1},{"version":"1c20506f7e961034d3e36ce968c19c3d","signature":"0bfde5e21c54fbb963cfe2a9253a3299","impliedNodeFormat":1},{"version":"534a93df6c4e1d6d4a41f7d50430a902","signature":"9e63cdb215466eeb920e4c0a06832690","impliedNodeFormat":1},{"version":"cc0c8f312e5d8e5ebbf4392a8abe0446","signature":"f6a658ebbe038273bbcc446d852ac8f8","impliedNodeFormat":1},{"version":"5117f2b532abbb867c1714cf5d759fb9","signature":"89b3068c94687184d33440170fc6a052","impliedNodeFormat":1},"d44577a8d8c05a76862a473044e2336b",{"version":"45f46c418f19f5b4ff68219ffead1385","signature":"b8af95c0118f96411cf4fa9d8b42a918","impliedNodeFormat":1},"7538b1c08a53fa23b3f02d1a550a1e65","4e3bdc2a46780ef469739ae6d3a46976","ca245c6ce097137e0dc520e96567db8f","d02a501b9fb16bd8c117ff8465a07427","8ac74e5075c95313f4cb0ee7b805b39a","41a9280d6b082eed3fb936a96d0628b4","944a4af073352e262ecaf69d6c5f5c74","05677279b5fc0f5c0d423003eac15226","3528f013289baa0fdb46985855f269e7","a2f569fda5d2b8a919f6784fa5bc46f3","67d814141bce215fb7308c17a0eea88c","25b74f0d624847065f2c399e5d4ec448","a1079e3fe82b3ea8b6f69472531ce108","fb0463f3af506288d56e84e1cebb9441","ccff2206953fb970c97f649340402e5a","42f9eb39b7b71f182f9c11729c28a58d","9827c70a2bf06bfaffa1608793d1711f","b78a2520ca3d0db66388f4dc9440ce4d","b9c8c4ddf6ffaca366c9340bbc79a64b","bbdefce7e2f1cf15657e0077d232188a","def2cadc9d9165e3d1e2cc3c154979e5","4700c90d9f6363e93f30c4a57078c3af","ff0996d3719542ce6b3d724a85b62768","73a0e81d3e9bb3430dda3bb71ae4ae6a","ca245c6ce097137e0dc520e96567db8f","13cd7a0b0fe0db124ffd9caf41fb9ea0","b8c49faac7a512e486323d3de7cb11d6","1ba7fac884d5269079258fd9f0176dd3","85d5c80508d0c60c3c8ab0707510a8bf","2908cddba6a1f6717d903de29cf263b0","e589ca88f399de70bdb568da0543f903","74e0ac4ae8db83cec90db49f141733ad","adffef5d6c7ba2d4d70b754bd4c0579f","28b84c2856d80c54bb1661e08f5d261e","6efd6ddcfe2ece9457cf0df7ad9b35f3","5127a8e5fe1c960d5ad56af7fb5c0d09","d7df463975af65641028f059d070d6bc","3e31632844292362855cb22abc35301f","70f3530904ea91512a66673d48678541","ca245c6ce097137e0dc520e96567db8f","99f45d4cea87f835187084481518b99b","c621253fa468f01dadd0cf42eb546ab3","0f5a80561580d32356ea95dbab409122","6e03e5141976296ea51cb2ce6cb44771","0dd0b38317f55e51f86ca8998255a8f9","a11f6de52e440f81d0ddfee9ec1d4a21","94e0dd44eb92cece87080529c8357dca","77a75d00bf1b19adfc82e8db94d43730","bccc989eaf585572fe040ce9abceacbf","dbe29ac3ea847c76b2bb2801352e27ac","ee7f1fd32c097328648aecccaf6962df","505ddd9cea1f038860fbd1e7a7894302","b33f08fe2bb3775ff7dec8c35ca3b08d","9bcdc3945118e4855f4073adc5bb0290","55f608a4faff001142ebded3d7b322a0","dd5070bfdc1840a9159f19c8496c09c7","eb7d0d3b93c5c3bfc02938b357c942f0","9f717e47082408ea6c24d2e8bc0847cb","a508889ee35c9332b048260aaea4f7c4","9ac41cb6de14a90a21284bb25dde4f3d","f0ba2948d978159000b7b326625bac87","97cda79e4751b1486819a1ea8db47dba","5afc68aa3cf38fef67ed66f727a8379b","3e4f2c02e0b896750c52f4bee0a5521d","7fce23a83eab31f40263475459b4bd98","334a5a5e28bbb15965331c7ae288191b","e23f7eadb078ff56ce485a233dc52b7e","e368326ffd5fabec50b51c2cde8e8224","5cff2075d48451d02d7ad17e16d6e684","13ef3c3eb2459f724f2833bb3eeb60c2","78bd940e0a29c5d56d0e32d672777b8f","ca245c6ce097137e0dc520e96567db8f","cc648d3d4361f1306d3ce32ae0ad4084","ca245c6ce097137e0dc520e96567db8f","fe83ec6ad99e702e0dfee99ea7f93860",{"version":"34eedee94cff56802092cad70100512f","signature":"54b61477206dd3bfcea810a96d010cc8","impliedNodeFormat":1},"25aaa4abb5d535881ab5a7d171e82677","ed58e510b4579775fb9ff42a59ada33b","224ca5d680207511bfb8fac059cf043c","c8ed60e7f83451ed9b0c8de53ff3886d","60ac93faeee030cf11de9e6944e1cb84","afe5bee93571fb761385296f2a3f2379","e15c46e0ee480a483441d1d422f0316e","ecefde9552d1349ce05fb08a245aeb0c","3cfe59e41f20f6274f4a58bb27f91f8b","959e11c182fd2aaf0e26c365775095b3","845aa4ee4cb58c6a2e97189678c80656","608f83a1e4b4ca16e9ff174e6335f040","ed3a814064d28fcbe836ed23d7358b9d","09d118a20137de5ace306be987700083","b717f96e88d6b54809e924156de0acaf","dc4bddc14f7865222b95dc8d728626b9","c3499d3d48f02e8e9835f12b7b48ca3f","d5a73896c87e3abc6b835f0682e70ba2","4d4bcfe1b6123eab56f0338cb5af5366","8358af6128b718735f6c9aa17b134f6c","e39eaa164cfd85f947d93c51cbd9b68b","45060316b390dac92bfe675dccb36e6c","72dd553f11bc6b3d167a3533d6458e63","9aee5fc92874b62a30df39c6fba38831","582816d369c4291638a1994f6d520774","f39734410c2d80b6b20e3e732d905026","6682306fb07e1e0e61b6adfc6111fab2","8df75d01707e247c2f5564a868730f03","128c4b4aa17b034b0604b72e6b9b78f2","40e0f2b184891a22ed330196bf6a0609","4b713b0e03c50d92dba78167e76e683f","4bc1660562588b9ed7264ce910e4d27b","6918d2c62129b2eee9b8c760ae3120f6","be26ea6a63f6e0d925cc9aae8c2052c2","9decc60e91a3a25577479f4ab804a0d5","c1714aa4450ea598b685959c8428d95f","967cca654d1166de81b309b8f6ecdc32","2ce9ac7af1f0d5eafee70ec92da94ab1","1ba6feb2d0d3a147a5feb2042bfa26d0","9dfc74fe48d1a97061096c64b51d4370","23a05d288fd54c6a5482eb3531dcf9f0","5725764b4c4915f20b7c8cc30aba856e","76a27eabf19476c5fba65e798c61c7cf","733f29acd8e55851f32c9374cfb3634e","5c5ae7bc92304f59c7068dae50d70c0a","4f7e4aa2ca8b3b039a3a627d4e01fc2b","54219304480f9d0e36520305d6eef3ef","b633bcdbcb1736d02212cc0beac607e8","7acf34aa374339bbf99bb932ee3e4f42","90eff78c4ac94d95ba7a08125062e7d2","e2abd88fed3d79046eef24b1c8897581","03ae5fffb70e8eb345671760a8b9269f","2827e1b9fab2c90dc112b63d3c6ad729","0c622f858e2e7ffb24595050b852a2d5","2d8dd1bda9d17af16d5fa26c34ba743a","c20178593957466bcb988a4645a838b0","dd94ac9e0c046400c0c3586b2edf7843","25f385779a15d9d84cb6b884c97d9199","7415d864a505024d772d5ebc9d615d7b","ac3dc9c1444c0fbf1fe03278b63f3c19","eb6ebd5c359d674b3883a427109a21b7","1886b90dd17904bccfb09a4854e968d3","ea3815b46f21de2fee0779f053b1e55c","82d83d4621bb7c0784fb8f62660bb187","02d596af009cdd30fb3b15c418efbe9c","51ec0a87dbadb040a6f5ed9d44055d9d","1a8270dbbae2689f558960d88d43f602","bf4dd376307e0916a69680850f6b83f1","8a1afa63d4199827431a0c13efa4bcf0","448aad8657e760df6ea2b4a4f3b61e31","dba6b1b3cc8437e5dac09ed29450a42c","ef52fb995f80fabedf55077d384a21b4","dd52b91f1513de1fed9ed8e3c0dfd135","41a99334af15f9e29e37e122a49be012","bbec4c6b2d9208c134df21e50f741533","574138a02a8778c619ec2242d9882ea7","27f4fd720830ea406a892e5652e7f4b6","d545d4a7b0dd7660220824c7c6365675","f4dece295453643623c7e90e9489893e","98739d9bd6d96a4d1c6eebf4c83bb034","1d61b0417ee76cb71e116423ef96faaa","ccb38e9cd5d567c642efd7169be9a640","5c6b9074f05afbb2da84b486b33dfe21","e737b40e71213accba7100585d4f1dac","1680ec74bf8a0f712efabcf249edc624","9dd65b9c871218a6b996ea7b0591b3a7",{"version":"c4adb398a07fbcb1f7329b84442b2baa","signature":"3faf98f676d64db868217cafbc030781","impliedNodeFormat":1},"5c77298fc1109b2f5fe43cb9cc38cb4b",{"version":"f240fd59f09713bcbfbd6175e1866ceb","signature":"da7074d5166374d4e821a68d6abd016a","impliedNodeFormat":1},{"version":"989b9ba867b1ed73add79b78fe5afa7c","signature":"f44540cb59f6245d833b9f5a8312c9ff","impliedNodeFormat":1},{"version":"701f21b7520755ffbf270e9cfb304462","signature":"e52879b6c8663c88370f61efc5449dc7","impliedNodeFormat":1},{"version":"5831e750b15acdcdc3028961e8d7ffb4","signature":"1fb550713c828929f5150d25dc7f05fa","impliedNodeFormat":1},{"version":"2d2b384bbdf2ce18f7c15392381be6b5","signature":"d0c14e9cdc4c0d48ed6e8d2981ae2aa9","impliedNodeFormat":1},{"version":"eb7dda35991757aa347e175004ae9ceb","signature":"3b58794fc515038db1741ef540a8b07e","impliedNodeFormat":1},{"version":"0d8b8fc52a7e676e0c3e97dfb4537cd4","signature":"c96a45caf2801ada33330bebef74afd6","impliedNodeFormat":1},{"version":"488175c6386deff4069f7be943e7e29d","signature":"40a20f204a176deb126a7756bcb83dbc","impliedNodeFormat":1},{"version":"033f641036ea5c8cdb9d0503321adfc5","signature":"54b6bb32580e3479c1b479d642f29b7d","impliedNodeFormat":1},{"version":"2233b1d750fd8111774011e2469634ee","signature":"1717f45d4d8be39fd5c4804205fc6845","impliedNodeFormat":1},{"version":"93f8f450fe075581c057395eb836fc27","signature":"07d787f93665c1a9421890bc69fe165f","impliedNodeFormat":1},{"version":"0ad3c50944526ad44036a15930a19994","signature":"3b65b94a95eb3c9aa755f3fce362c46e","impliedNodeFormat":1},{"version":"91c96de16ebf8dbc0d70c7e7557086eb","signature":"8aa7832a43450837ef7aa9c4c84c3655","impliedNodeFormat":1},{"version":"8b81615cc0eb8e73259124683ddeb260","signature":"1c224d3d04cea1cd2e7d4baf5789a3ee","impliedNodeFormat":1},{"version":"636044723cbbff8aa5b16a9da3bdf150","signature":"109ed63abe644dba76c51cf8b34dac93","impliedNodeFormat":1},{"version":"f9c796ccb5feeb2ffe35e0859290c2ba","signature":"d862a506a3b93dd1d052226eb35b3aca","impliedNodeFormat":1},{"version":"73862da36be4876dbdbb58b81b979229","signature":"eba49016bbb8a885d30a270a1998fcd4","impliedNodeFormat":1},"7f13154e9ab48da024b9febeed692962",{"version":"cc5e37d5cb6b8527e6edc01097c78028","signature":"59b7705145aab3425a8f629fca0d05fa","impliedNodeFormat":1},{"version":"818e8b13cf2dc2ae81a128f9e17ec3d7","signature":"fdea4a38941ea9c78d71bdea3969fac9","impliedNodeFormat":1},"396dcd1305dd153bd9fd4162d117f3f8",{"version":"3ca7fd86e2e1d1ec084611d46141ce57","signature":"10f1ebda99bd491fa2639b22c849394e","impliedNodeFormat":1},{"version":"633d4f7ebcc48b8b2f86b96bc220ce6d","signature":"51889ae44f7c9c43810e897eb884f636","impliedNodeFormat":1},{"version":"c0443e8b1715fc3380c39582e9fa2413","signature":"2bc1191b74acd885467f66ec5c6cd58f","impliedNodeFormat":1},{"version":"1b6772dec0271b13d2924e3faaf36eaf","signature":"d8d99c018cd803a2e790a6e60d679c85","impliedNodeFormat":1},"2e35fe6243833adfa7ca64e6d628ac87","9322173f62378407eed19ab1b2bd8115",{"version":"56a5c04d21bd53665d740bcdd420d8e5","signature":"16d5f207a2dcc0fb100578d3330913ff","impliedNodeFormat":1},{"version":"d626559ccad44477234d0314d525d122","signature":"f3a22cbe5bc81f50d8eb82bc8f299f1e","impliedNodeFormat":1},{"version":"58c4ea1a39996de0377ebb257cacd3a2","signature":"2a4082d0efa830dc92adcdb5a73b585a","impliedNodeFormat":1},{"version":"9ee560930d1617b687aa4d3db3e8c57a","signature":"437451f33ee974080f1cc232a4d2741f","impliedNodeFormat":1},{"version":"5f0c030f429fc6965e5abf74e64d1c81","signature":"492006e62a930e120f90e292018cd90d","impliedNodeFormat":1},"e9877a74f728a1405438aaf3462a3c8c",{"version":"b0769a453588f868c82892026ab0dfa5","signature":"97a57d1ff02f35d6d4d75debb091ff96","impliedNodeFormat":1},{"version":"4c49386c2dd546809b325764c267f007","signature":"83ef578d98224a491749dc086fa3c93f","impliedNodeFormat":1},{"version":"242301e13aef3c64496e04e8b2066148","signature":"3e8dcd9394cb2bfcc4b119e1704fe48c","impliedNodeFormat":1},{"version":"14de3a49e2bbbf7f2c0f629f5a2d7b21","signature":"dd390059bd744cc01752c33ddc0ff1fd","impliedNodeFormat":1},{"version":"701ee757a17ea1acb2a502b21a5f5321","signature":"ead11e683de3d25c871b2c16635245de","impliedNodeFormat":1},"baf89beceb4eabf0dc5a21714f4ef376","f1a797fb75e810f66bdaab50d93f4059","ffd0c175be8a97dee226050ad88040bc","fd8a48098708fe82287ac81e09c7830f","dafde23e485778d481276c7d22fc4c26","38700fda5d892cc5e1cf794015e18936",{"version":"92955df68e5c76a54c39920bf27e3357","impliedNodeFormat":99},{"version":"2126fb8510236882a08f34ab06c41e15","impliedNodeFormat":99},{"version":"95440af318852459ed59c9d8044163e3","impliedNodeFormat":99},{"version":"4e138cc25fab5e5457ddd68d81a12bb3","impliedNodeFormat":99},{"version":"229878bd1f7ae2097e0756bb3774a5cd","impliedNodeFormat":99},{"version":"d7b9d4279fcf213ccec5540641fd4e79","impliedNodeFormat":99},{"version":"2f17152dba7940cc084d872f7b680fef","signature":"a4f195fff90bb23ded37eac6abbe8f5f","impliedNodeFormat":1},{"version":"4acc074fa5a0ff7dc5aeeee7b110b4c7","signature":"beba7ff6bb4fc6ab3da07c342d3c0fac","impliedNodeFormat":1},{"version":"784f3ae559fcfd330cb3383d04885282","signature":"771fca83645d6bd2e8dc52c951fe933a","impliedNodeFormat":1},{"version":"7bc5df9a47682963c8569bbdb2cc0096","signature":"486d6a8a694dd0cba7764697fefa0dc4","impliedNodeFormat":1},{"version":"540cb881a58b25a257120444dfb86e98","signature":"82f15783f69c1ff890f72565e81ec90d","impliedNodeFormat":1},{"version":"a5ab44e2368ae36c42008706fe40dca1","signature":"79ae5f563dcbdd2023be64616de0c5c5","impliedNodeFormat":1},{"version":"59da75bbba2e63c815f16dfc778ad007","signature":"3e30683bdff9312efc4d08dd40c65759","impliedNodeFormat":1},{"version":"db7a7a2caa519ac17a6824a3da76ac62","signature":"e817d7c9e9af11c55de00a459a215fb3","impliedNodeFormat":1},{"version":"10c592debf2061667d41e4aab9caf875","signature":"3acf78c5e65f2b6ce23c4c8afbc3f062","impliedNodeFormat":1},{"version":"a26ee2b1a6e4639e3b689bf77b486ced","signature":"bd8d6a5117339043a1ec83e5c3d840c7","impliedNodeFormat":1},{"version":"882ee1360bbe2e8a5ce038e06d420581","signature":"28f77d33e32010d34ea305e83003912f","impliedNodeFormat":1},"f9c33de642ab84bcab4cc9c8f8a36d3c",{"version":"09210d42c0975350d591c61c02ece617","signature":"56cb5e91ca05fcc737af2239f6a03dfe","impliedNodeFormat":1},"eae21da3d2de5c5d9eee597cb7feb766",{"version":"fa8ec547d110d836fb3026ab85d51a73","signature":"392a71703cd433229991d95f4b810ca7","impliedNodeFormat":1},"62d024793c77ac5b4ad49bd0038cdd2d","c50a3a0258212bb4e8bf82986b3dc5ed",{"version":"dbad06024d6f2b354066f65df0067fb4","signature":"f0c5d0bcc7c0a21978b53e8b351a51f1","impliedNodeFormat":1},{"version":"92af1255358c75f4f73844e511a5be36","signature":"4b612955c19c6be647f33919055c967f","impliedNodeFormat":1},{"version":"615553c509d0275ec1ec130c402164c1","signature":"0a448638996b3883831d5057595cb0d1","impliedNodeFormat":1},{"version":"a446cbe63cf19f67afd855f099ec230d","signature":"8073864b8bfddc525df93363474ac99e","impliedNodeFormat":1},{"version":"41228b1bd3e8e5284a91a1401eb70082","signature":"fdd0a105d23446b764b25dedccd4909c","impliedNodeFormat":1},{"version":"ef416f7b00302b1da6f0044b650e002c","signature":"77446d1d793fe6f71e93adb405f5cb0e","impliedNodeFormat":1},{"version":"599e0edb64f2c1297ec399daec0c1b1e","signature":"327862ed7872425cf7eb3fd9be4ab4be","impliedNodeFormat":1},{"version":"24d25cc74ae3ca0081d87a2e3824779f","signature":"312afa637e503f6d8618087e960b7178","impliedNodeFormat":1},{"version":"76b955d88f30c8625954b7be0d11e9d1","signature":"0cba5e67f702d85c046c4b5e44ef9138","impliedNodeFormat":1},"03ebfa1863f43eb60c66351ce62c627c",{"version":"09d8edb3be4486185f8efc96446daa76","signature":"916ae1f613d4c332782feef1c1820ad7","impliedNodeFormat":1},{"version":"f46e7b3a779fc702edf7fa5c89900719","signature":"4ed1f4c2fb33ffe2f0d6a36974f22cd1","impliedNodeFormat":1},{"version":"624cc57ed54a9ffa0c9eebd2776e6aa7","signature":"c01f18f60ab33320d7310368b8abc508","impliedNodeFormat":1},{"version":"5a1fd643347b28c7afd7df96261ff7c4","signature":"171cccfdff6de92f53d8e229bd851628","impliedNodeFormat":1},{"version":"0f45037f93eee6f638fdcd58e32faae2","signature":"69f16a3d2838ac49b836d0f6848692aa","impliedNodeFormat":1},{"version":"ffea274205d9872edc9024d0bb8b2e25","signature":"8ecef11caa01d1633ced1293d77da81f","impliedNodeFormat":1},{"version":"8463e47ea6f37468a4bc15e45bade8d4","signature":"fdd711277cb396f7c6a1b7467f00384c","impliedNodeFormat":1},{"version":"72bcc5d0358a41603a1a3473a846c3e3","signature":"5b939d685eb7ecd1ed87f3b021414ad5","impliedNodeFormat":1},"857dc7e436fcbc605e72ad393c05d80f","2e329d8d52bbdaf3cea4b3ec4e17bb3f",{"version":"6b6b74aef8f11bb3cf0e05a9615bb35c","signature":"b0fa6e36dee12e3169ac6327f5e1ed6b","impliedNodeFormat":1},{"version":"49a000c391b1ef67728d278f907d47f3","signature":"277e8fad17d54ea9381a0fb44bb2f7b1","impliedNodeFormat":1},"9c2a5ba9c1877289e008d6456a4d0c1d",{"version":"4a1c21a89d24b77796a952988e9c4e1d","signature":"7ab0b90abacac977fe7abaf23a698b56","impliedNodeFormat":1},{"version":"46290eb0374861276d94220cf47a1917","signature":"0b92db985f364c977280dffebe62d070","impliedNodeFormat":1},"da5d3657706048d6d7338014f3d7feb4",{"version":"90ffc26a71f436e254dada105d3705ab","signature":"5f4542026f2c44d9b2b3358db8b9ec45","impliedNodeFormat":1},{"version":"da07f0e58ecb8ebb0585630de0f73596","signature":"ef9355c67818acd15183cf162970795b","impliedNodeFormat":1},"c4f1b4668591f39787776d5c5d7a6edd","8946d18c1dc12d82dfa9acb70f7420d3","3b0c8345550a631a15ebe84e57f961c4","c5ef5f3bedbda860cd2d9d94a54bdfde","c0e677ecbdc536a9b6a52380a0f80109","f4d57a8568a0fca356407e256505a0d2",{"version":"6647d15e4d86c69b7de65dec028976f7","signature":"3e22843fd9bdd13cd48c8a12de55b453","impliedNodeFormat":1},"9c98f33c33666ebe48cc258d2583e7b9",{"version":"31e5c43e4a70504af25ac3e7cddef14f","signature":"5232d605f49bc095b08e16feee5fb715","impliedNodeFormat":1},"67d97cd896fd159e2e86071571d2de01","e62fb601a2c094cbfd48e09dfb1e09bd","f38d0c391f49a59f6c4a4181eb7081fc","9e0713dc45f09d6eeeb9868eeabf41f3","b14d7c0ac29c233e0db820d5c651b8aa","84470b50751a2447d3726a3e7edbadd5","ef83635d5d0c092104a51a73e1f65765","78829b9b97ba169bfca0c2212089f2a1","06415c3ce6377ce8c615247f332b2b4d","07493224143fdbd477efa29a9d4c071f","14ecd4492aba5b6a3ed14c2a8698614c","2634898efb04686009e92dbb7581f542",{"version":"d48d530203e276087d117938ab5cbfeb","signature":"7fc4a3b05efeadac0f367dda87fcfd1e","impliedNodeFormat":1},"201ec7ebfc80bbb511ee376f3fcd2fef","8629ee77bf6c0b3cd4ba99d1a5209a53","b5cfd225900f17e4b0b05643a403fd8a","cfaec9188e556d0d1c706b8d13a2b9b3","d39491d1e0157e0ef7c45eadff9c524d","af7bd184fe82015f5a63011de50490e5",{"version":"6c413948ae7deb102e20c8eb3de41a50","signature":"c86f7ba286cd057be4884847f2ece73a","impliedNodeFormat":1},{"version":"2da5338a5f16a0a4e6f95615ee614d28","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"94b9fee4e1c0727e3f48301e807df685","signature":"58a1d845b0bcf69f59d246811b9a8526","impliedNodeFormat":1},{"version":"8f1f0ead0b4147a739e75fe48db11df6","signature":"904cdca2a04f7de7cfe38631885d9405","impliedNodeFormat":1},"8f1c2801a99d87613cc472f3002fd2e3",{"version":"10c4c6a0c67cb71d554a50b1db3b66fc","signature":"617753869fcb73880097d9c0902cc5ca","impliedNodeFormat":1},{"version":"979bd9d00d0f8b75ba2a4257c6ed2b80","signature":"545b15abdb0ce2718729374b3fdefb9a","impliedNodeFormat":1},{"version":"fb9e431b7db7b7d59f66089a73996ec3","signature":"4d19bf3108c2b917d25bc49d2e3e50c7","impliedNodeFormat":1},{"version":"85eda4b687d5c7ba1c60df9e0c8a4d77","signature":"a2f015e2442f48d0a2da3235a3c1010b","impliedNodeFormat":1},{"version":"cc0175fc00b3d2490496d768cf7bdeb1","signature":"be34590eb004309b38acaaede62e19fe","impliedNodeFormat":1},{"version":"d36eea0326981e00ffff63552d3d39ef","signature":"e85396a9bec9cd2d2b21a251f06a69a6","impliedNodeFormat":1},{"version":"5d959b2a4a4d28b952eedf1e778787aa","signature":"61a42e7dc3a636c583c922caa6e55ada","impliedNodeFormat":1},{"version":"91a50e83b323bb6d5358b52bf6d8e3ab","signature":"18c75233bdc9162461cf9b5ca10a5e2b","impliedNodeFormat":1},{"version":"bbf462e15717605396e686c50911a873","signature":"bf32f227e6c0e267a5adbe31757f3b97","impliedNodeFormat":1},{"version":"d17bbfa89958bf8bbb17364db4f14874","signature":"c78b93cfa7c556dc3ef5d8ffe9d01798","impliedNodeFormat":1},{"version":"ceb3c95ccae6a995cab192ed8392399a","signature":"ffcc38ddaca3c129152effc1ef24b0a7","impliedNodeFormat":1},{"version":"56697d1f796b784e36595a23059ebd91","signature":"9fc75a2d8648c90b66e8b2f3dfaa7a16","impliedNodeFormat":1},{"version":"2633452361250c917d0bd4e3c85fba6d","signature":"b85624942f50ed76ecb76a6a585f357f","impliedNodeFormat":1},{"version":"d8e575411c0280781dba962f4a6c96dd","signature":"c48a0b79f04412462ccde0eddb1dbbf3","impliedNodeFormat":1},{"version":"16a24eaef37cb01a8d57ff1348566846","signature":"da297b5613bdcdba58dcf7368d7158b2","impliedNodeFormat":1},{"version":"f5ffe99d094655a55ffbfd191c1227d7","signature":"16f2e35a62fc4399b80459303f0b5d09","impliedNodeFormat":1},{"version":"07931f8438603b6da6bca80e1a63db40","signature":"368a6aea5e6264fc3d062e7dd49e0d2b","impliedNodeFormat":1},{"version":"a30c5967531077d73f9817e094e6870d","signature":"17d361ae33a1605df98b307dc0edd47d","impliedNodeFormat":1},{"version":"9d6402d699ab5d820172265bed4d8024","signature":"b62629874b7388a9a5f2824ce3a654cc","impliedNodeFormat":1},{"version":"c49cf3ace728f6acd558e885d9e9f536","signature":"6ab1cb903613407bb51555320fd7f975","impliedNodeFormat":1},{"version":"1d9ba297dadc640b8985013bccccdc76","signature":"2210c3893b7b68c8ae4ad5c2c874d014","impliedNodeFormat":1},{"version":"427fd2357fb273c2dfeaf06df9a5e211","signature":"0f165bf58a7ccd32942e2ce7ffea02f0","impliedNodeFormat":1},"85c6ec19bf7f01d7f08e2960a9e271e5","715156ee341bea593b1f5b3e5ea9f297",{"version":"91c6cf869bf8c768ccd0cad6ee788db0","signature":"bf3c16ec7acde9062a0a395e84641f07","impliedNodeFormat":1},"4b48b553d5f68df6ed2300fbd10f2021",{"version":"c3224e30c506cd2be43db54f3eb2500b","signature":"cbad3ac89f0e3c76e53729412bbfee17","impliedNodeFormat":1},{"version":"1afa499c9a280c0fe8ad90239806f5cb","signature":"99ad15c111cacaae26802acf920874b1","impliedNodeFormat":1},{"version":"9fdb08d2357e4f5cf9b4d275c6375cfc","signature":"7fcb7e424d8258401d2d8d4acc7756bf","impliedNodeFormat":1},{"version":"562afb40e537adba71bc7f2bc362bdd1","signature":"8a75b1df19f1b3b2299baef3a3051961","impliedNodeFormat":1},{"version":"d5166137f3518b0f7a857aa3808da54e","signature":"c9473f9e2c5411a53a7269c1474524ce","impliedNodeFormat":1},"67c58aa0a66c3f8e872bf09cfd26ab0b",{"version":"507747cdbf5b8df16fc794556370202f","signature":"2ad75d445310096f255246ec71520970","impliedNodeFormat":1},{"version":"410ee99c1c9957e1e59bb2f89af3fcd1","signature":"c5bffa7f688939dbfd628ed431e480ab","impliedNodeFormat":1},{"version":"4de82e361d4667095a0527da31e06e21","signature":"f4b08a9cda429e6e092331e037f7111f","impliedNodeFormat":1},{"version":"41c59319a9f02824e142bf30a301a551","signature":"aa191329891b5dd6aa20bbc1a619e2ec","impliedNodeFormat":1},"2f1bb71d08da4fe6737ce0fd504fab4f",{"version":"7b5ce60595c1e8a9d7eb5edf79209751","signature":"9eda787d0ac3c7cd5a7364fef4d4e107","impliedNodeFormat":1},{"version":"040fcb9ab849658d6b62e30b451f9402","signature":"91b29ea22b621a785c28c10506c025f4","impliedNodeFormat":1},"dfbf45bfa1ae7ce1a2ea3b1330863d2b",{"version":"b8fc42d47fd4b11273c4582bf876fe0f","signature":"b40928ca1e5e259f975de118aa39991d","impliedNodeFormat":1},"d57953dcf2702f052348a5facb9b983a","3626c2e3f2d14372f3ebdaeed15432da",{"version":"f903a18fad2fbab8325490f4c1542f82","impliedNodeFormat":99},"924940d5fc893f6e416081d08850fcd2","f1dbc1cdf2052da6227c516276d96675",{"version":"372af12f4f71e343ec5e0c21e57ae339","impliedNodeFormat":99},"29add4ca69e05d76d6f94210e5a31df2","c846666ec4634a2ad1fca0fa476f8181","e94643435fcd8de8439e2a4dd8d861eb",{"version":"ec4c03af97f00dd74dac5ecf9ef8a0b5","impliedNodeFormat":99},"da74217ee254c9c2c8b49f3565e4ef6d",{"version":"2886707ae301bb4d09fa8c8436550dce","impliedNodeFormat":99},"2ea5d88e5c7ef00864d418cfbc5687cf","66e49f59efeaf8ad00dce887f449bed1","f95cd31a8681feb58d7bb4865afa911c","ca2eaa2ca74bba38867fdd8a6611f12d","b5ca726d0712cee4e779f1d58fca09d5","498c2a27008ecdae5e55a0413b362c10","cc917d5a09755ca01bcde70d23569f8c","647c34623a2ce523fa3dbfa9efecc3d5","5fc48db8985efa97ea93e2bed3251e07","c79a4149b0f19ccbd4257e2600d970f9",{"version":"fea053d64e7bec1782280d0b5afda4b7","impliedNodeFormat":99},"d6bed73681a7bb557e216e99a6df700d","aa44e61fd608137b659d4b2c2c4af363","df9bcfa9d07db09feefbd4bbf9d807b9","f3aefb8babc41bcea9d9c5a184081a2f","199e3f8df325561ed9d98b36ffa209d1","9e1664fa2502c880f87362371f30de43","2453d62def99899109def81de95e74d3","247604908dc4453d4a6f69dc9c0da70e","95d9f2be47f40de12c6c464c4f68857c","d7794933c5a40c6f316d144e6285ade7","39685d28e0b10096e6262041e7f0682e","64f5ecb61feb3af4c6983a9ed2629641","c811571a9ba091762d9cbcf9014c6d3c","b4544eca33683a290c77527d3f163538","4bb6d9481ec34cd7b255f934ee75d926","46969f46dac9e68cef3766d6e16c49d0","6906734d386473b9793690be89fe377f","5ca5db1728f6e6c5eece3d0b07d8f2e1","e7b99496ae2e872bcef84ae929969d15","1a39a9ca474e66f53db9f629ee07edbe","7f560152c609d4f27408c4db6c53687e","a30e5ffb0029d20ab1bcea2d66f037cb","6e6ea3e973300d40bad230cb03ca471d","9cf7366ad8c698e507d1e37b5b5a25cd",{"version":"6fa448be11f7d649c499bd62e93d6502","impliedNodeFormat":99},{"version":"ec60904ec669b072a92bcbd02b70b8bb","signature":"f87b157dfa4b32c9dbe2f8769ce65608","impliedNodeFormat":1},"e94643435fcd8de8439e2a4dd8d861eb",{"version":"b992733dbdd77380d92065055b6f030b","impliedNodeFormat":99},{"version":"eb8eeea186e41d7982f44b040b48fa54","signature":"a5c9c7a8dc90d525e5dc9ea9ec213120","impliedNodeFormat":1},"23a9f09b1951b62b9540021a7160b0fb",{"version":"22b5df5c27e2e1b46829b99af235a5ab","signature":"261f485c52f189fc5eb2e8b1eb59f58a","impliedNodeFormat":1},{"version":"4dc187c9c86b4ec43a827e50b02b73f2","signature":"085ef51538e67a01e3f50897e2902f73","impliedNodeFormat":1},{"version":"994a214060e0f93b595016493a73fdd1","signature":"9a5cec72be665bf09e3d498d9e1c481a","impliedNodeFormat":1},{"version":"898bd5da56bc638752b344cbb89c167b","signature":"ea04b4a8cab330b9493eba2edd81cff4","impliedNodeFormat":1},"13b81f5cd40312593950539a6c0f9093",{"version":"7235e5a583cc08b36fb420fb47221473","signature":"14e5451414cc8d219b1b67b500130f15","impliedNodeFormat":1},{"version":"9483aa604a5b0caec8ed3f7e2c7f74a2","signature":"93423f074689c3fbce4c5ac2feadfffa","impliedNodeFormat":1},"bc0e5696c18963621d9fd4dcbb2776fb",{"version":"ab176589d9b43d9934e1531246984f4a","signature":"9574f238f9d38724183910743d49c36f","impliedNodeFormat":1},"8dbdb8c801fb425d87dd6a32b3cfea7d","11387d74cb431a6e6463c2fa4708fa19",{"version":"eb58fe7e5477ec0eb51e5ed36e15a0f2","signature":"f8958fd68b14907e36a8f9685262eaef","impliedNodeFormat":1},{"version":"f3ad5b1853b5b92225326800468a5727","signature":"00c1b982d240d20edf8b49ee4c44a72b","impliedNodeFormat":1},{"version":"b0b7b81eddf8d7db9dd1efaba659edd1","signature":"7ca42049910ed0879093040961604d80","impliedNodeFormat":1},{"version":"882508f25aa0f218c6f725456b80a45f","signature":"75d3185c2e3bdce6e4da74420d3a2681","impliedNodeFormat":1},"326d3a7aac33d4b52b931a615e987df9","87b3cfaf68b932f8d0ccd1385802e151","84c28866623335de112e285b49946e39","fa78123b8298c76ef489316849710463","3bd1cc474157d96b69d5ea91408dd66a",{"version":"5e739fddccd69c6f67493379b1fff913","signature":"dedc77c0136933187f4220441a9a116f","impliedNodeFormat":1},{"version":"70c9e25a11a15815f691b0271c777b52","signature":"d3758b61c7332b07073e564b0b78a675","impliedNodeFormat":1},{"version":"a879e870b83cff1224d07e74d58d9128","signature":"ef575f8c108e3c20d679186626419743","impliedNodeFormat":1},{"version":"7703b232dd4ed52d4e0f3b0807e52d7e","signature":"113b16b5cc1f38e809ef8f47bb238f3a","impliedNodeFormat":1},{"version":"2c8c57c6d1d560a0c19234cc4a3dd90f","signature":"bb5b95551509c853f66f8e5ad693212f","impliedNodeFormat":1},{"version":"3e4f32834995c97de7ab5035c08ae6cc","signature":"116069ba965145c46e992f3279d60204","impliedNodeFormat":1},{"version":"55ff9212d3263ff08b6b3c4c2da9ce2a","signature":"3f6bda5e72e2dd310930dfddf9146f10","impliedNodeFormat":1},{"version":"203434ffbded12d55936b0519882c796","signature":"11726f3e79bd7bfa85db3504775d51a8","impliedNodeFormat":1},{"version":"a5639ec78afc46545a77c3c96d2e86df","signature":"52d46b2855dcfc2383f7d36979f6c9fa","impliedNodeFormat":1},{"version":"924b89698ef270b92e2255381a2d20a6","signature":"6f47859fc0802a2d6e5c4e2323a0c087","impliedNodeFormat":1},{"version":"945e55f60ba17b2631d33ea0f0f9955d","signature":"8581ebd28c0c19c7af8922227a2a9170","impliedNodeFormat":1},{"version":"51ebd9c49313395ff802b3c2cc4efda8","signature":"c726d23af676c7b42439b433d968c8b2","impliedNodeFormat":1},{"version":"312dbf1a6f362062a47d41a219b02a9d","impliedNodeFormat":99},"f9dccda118924be25899c703ae07bf83",{"version":"91cc67314e3a7d9bcad873bde68188c5","impliedNodeFormat":99},{"version":"24eb4945db45a5a9a41a23a0f27f458a","impliedNodeFormat":99},{"version":"5000cbd3526f4727dbbff4c2acb83950","impliedNodeFormat":99},{"version":"6744092dbcfd6cd95dd98a95295e6fae","impliedNodeFormat":99},{"version":"2044b3b5e4b797d9bcfb3fce0c2ce9d3","impliedNodeFormat":99},{"version":"5f36c14ba490a79fcdb3461750c22809","impliedNodeFormat":99},"9befaa4adb42627db765639b7b5ba193",{"version":"1a395a24dd11f2f5e12a958059e53479","impliedNodeFormat":99},"80822fef2770d7bf215bdee218bf02ef",{"version":"7b3a1db9a9e17dd53adadf10af3e2935","impliedNodeFormat":99},{"version":"b0b5791327e1e6c57e0f6ad255f6253d","impliedNodeFormat":99},{"version":"1855e109a0fb0f9889f1cf32ca757c0b","impliedNodeFormat":99},{"version":"d53a0c7df993df4a0869c567a76c901d","impliedNodeFormat":99},{"version":"97c5726d4dc6eede7598fac7277093c5","impliedNodeFormat":99},{"version":"0af385f6fdc933b95a1d5925b12676b6","impliedNodeFormat":99},{"version":"5189e13296fc12e5e1bdfc3b0c18aa05","impliedNodeFormat":99},{"version":"7807a8c9a4910a8b65def63b440afd38","impliedNodeFormat":99},{"version":"baea5b0e72f5c70b22eaf93282da81fa","impliedNodeFormat":99},{"version":"b9a324b3c7aacfb0ed4a8c2027c1f749","impliedNodeFormat":99},{"version":"632d1a941eff3defdded3c45b83162a2","signature":"d793ff5f6c2037ce296f81644cbfdf23","impliedNodeFormat":1},{"version":"9574944bf5ced641de476b3c9d79e9cc","signature":"87437365387a254ae44a73d5e3712aab","impliedNodeFormat":1},"36adc94af4fef20de4b8f6181cf0ba9e",{"version":"32364b6d1843299b7dfa9d73d3e74138","signature":"a1823efe17307ce9fe2608184ddedf6e","impliedNodeFormat":1},{"version":"b9ccdaaf43b4e557f95ad408837eaa89","signature":"b1befb6b872d74df9028a892c1277d4c","impliedNodeFormat":1},{"version":"2c63ddfdd6fb7baf7d383e70dc228fba","signature":"aea3cf2ba8ab3d28d98dee79874f2b6c","impliedNodeFormat":1},{"version":"c796c2cb71e6c7e7ffb7b26566aa996b","signature":"bacff0b91ba410c236a90fcfeb0db251","impliedNodeFormat":1},{"version":"e5ff0dab813fb5d0f767d2c176fe4d9f","signature":"a4da824eaab3b412b79b7ed3a58a45cc","impliedNodeFormat":1},{"version":"2f8c9c15538f820c66d905113ea508cf","signature":"f70690261692c144e88447e3e845cfa6","impliedNodeFormat":1},{"version":"176d30952d1502f985c7a3f591712b81","signature":"2d2ef3467b73699e00c2b18428a51ed1","impliedNodeFormat":1},"1dedf49cc0ccf2e37e0bef270eeeea53",{"version":"418d91229e3b07d32ffe537f55ed8ee5","signature":"2ef5dfc3001cc72392410e3f2687ca09","impliedNodeFormat":1},"f5e8f7bf0270aac061642e6d97001dc3","acaa7bad90afaa9d2da57027cac7aaca",{"version":"55ae8aa424904a4d5e634d5f710517a6","signature":"24cca1cdc0314b44fecf0af6e3a25306","impliedNodeFormat":1},"2ee3cf08970869d5242cb66d22fa1d03",{"version":"77b3909190d471789e01e62ce49ed403","signature":"0482780fb75d8b413bf1d935071d6f49","impliedNodeFormat":1},{"version":"226bd13747f123664b3313ad1112e166","signature":"1ff08a6565158e831e06d0320f0564b4","impliedNodeFormat":1},{"version":"16991a35ca268a7d9b3f9287622d4417","signature":"e22f40e3eb0bbd6b46e0ddaf0f5a970f","impliedNodeFormat":1},{"version":"da89ffcee10a79a5b919a6ee37d7f693","signature":"f3e08f8dfbda01ea82821deb2e3134d5","impliedNodeFormat":1},{"version":"73217047b4ba25c62796f5393074a371","signature":"c9bb8f56fbf824f991899cd203f13ca9","impliedNodeFormat":1},{"version":"ba292be31334b936a89ae67ee2544a29","signature":"a7519098bda709d1152b04785ad2a815","impliedNodeFormat":1},{"version":"3cf179e8357c74e784d1e0d02cf1456c","signature":"f5ccadb2853aec07f2c07d28d3b6c4cd","impliedNodeFormat":1},{"version":"07b136d0313abe29daad1912c66c5283","signature":"d13712b31992ef92c919d89b4c2867e7","impliedNodeFormat":1},{"version":"5ab9c6c0c0aab97620f95e07dd62a88a","signature":"8940d436b7a2e18895f4d13fdfd8642c","impliedNodeFormat":1},"98f82d1523ff69db3d4c826cdc5ef885","67f68f4b34b08d62b951e43455326bd0","4eae13ecaf976dfdf652a0b56d8450a9","b862999f3d885c5b23953aac62bbdfbe","13130bd0904ba80fbe2b1da676a52503","7918323d00d3231eb1abe1801f836fc4","da0ca72144035d66ca92b228b690edf2","da1fd4bfd6803838104ca05c0ed7fadc","6085b404ebaf53045c30f6ae411a5db8","70a5cd692eea89345a6d516ebc1750da",{"version":"8e0e482f9095333d0195e3aaa13163d4","signature":"0ac1cd1f380798fcc743ae700ad66e9a","impliedNodeFormat":1},{"version":"de181cc0414509020ddabb03c8c90f12","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"4a18deea0f430987d1cd72f5ed0c7c81","a575170a16c24c1e4432747106e6bedc",{"version":"b9fa3408531f1c6f271c85144c2fae8a","signature":"558fbc59f3dfee4e0a230cdd21815de0","impliedNodeFormat":1},"55f2b7bd176ef6245c9b1ff44d25eef3",{"version":"206648f88db8a009d3ee39f5bf71c0d3","signature":"4d01935a3fb6ba008a6a4ea6ec010282","impliedNodeFormat":1},{"version":"8246871e4931c4463f2c573bba02729e","signature":"af14ffe682a10000e79b234bcae2eb5d","impliedNodeFormat":1},{"version":"78f27fe1b55f70d3252dd89c5856f964","signature":"11d1a33178eac382e54c600fd6365e49","impliedNodeFormat":1},{"version":"ea572ef97cc87f0c3a620d8d12736ac9","signature":"de2524ce53fb387eb872aa1df1a1edb6","impliedNodeFormat":1},{"version":"f8c89caba98dc1b09bf52328fe235876","signature":"385de78d2ce894b569482380105dbc6d","impliedNodeFormat":1},"e16ee2cba8fccd4888dda67d8313af8f","09236d421d18c90c9cf2b1a62df88e93",{"version":"8c9f31c32a5525bd747cf424bc17f778","affectsGlobalScope":true,"impliedNodeFormat":1},"9da7817000afeeeea3222d0ff2a686c6","2cfba9984aed78da242b0a21e3f38a2a","e93eb137b979617ec06b22a362976ce6","c0ec98811b4559ddda1f61ba53e1d2d4","9de6d4b67fc1b39b6dda81b6f93579dd","f150286488a8ca9e5402dd15c8957340","31ce40f173f27100522a719437fcfd9c","01253493709f6c42fb5b70e764ef90cc","7aa0667e23415be0a645dfcf2b47c82e","4efac62cab7941afad9cadf1d94be7f3","e0f557cdd6695b87547a877b69ca38b9","70ad1c3b71a769b2a1a584c774788db7","642f6536f2a6b5bdbafd4e25f407d2c7","1db38078e8dbd37f16947069fd0093c6","fe812c7b8986cf1c50ce352e9e3f8c89","a9b6a70f9e138db0cacf973b904f9ce8","138603e1e6787901dc8761a2803a6310","8cdf819bc802d165541b23781a845948","23133f69c05e8d7c456e1a9d68c1fffc","89bcd59d3d48cb11935ff1cfa15070f3","6502191f732e6a899b71d18f2cb7a669","83a6c12fe0d568638a6e8db98c137c49","844210e48517107ab0fa5a7e40edbba4","3c2f892a82b351392b98c312e067fa15","cc262de9275b1c5fa529688f33ceae7f","7acde96d9deadd2884a93ae4bba972da","767f37418b3ec86d2e6fe3e3219c64f7","b7f217cb2b3f9082360e5684f55f8cc1","bffc4e97a99bff31a3686a5c688581f0","8ce2d57bab6ef91e5eddacbf7d7f0181","0331baa726704b161af0efe64f980e41","3e47b1dab9282fd8fd4922d3f0655314","0e52a45f8d24b10b300a582bbc389238","38586984d045a69166f13015d71501b2","256153f676e34a933916962fe97f4749","da107fb4df9e8676ccef0f7b37ea53ce","0991cffb042883e18ab62d233b31d3aa","428c7c416f9ef4b684745ecd18800cdf","2732b197815df32818230d9e433fe682","6f29a9c10351aafe84986db22f67df8a","b41b7744429d74640dd2a1cb87b3199e","09182295d359b15a9facd08f8fd51966","6c7c40d6161213505b0b2a0991aa708b","c61dcede83e20904c8751b2d08beb296","6a1ef55dc603c92ba031491cf46c78a6","6d6c5e4f921002d2a37f4e7750513f8c","d9d2d04eb9d7c7a35ea9249d96ab66e9","c92e37bef68312b0809b209dd35bc2ee","46d5eb0382f3ca27ce2af109ac132709","1f9ff9d0706bcf42c48445798e0aa736","18c29f2c9116baa565528501a8d7a367","0fba992bccaca17b160c8f20986c8b30","a4e850cd58d40f96cca03c145e523ea7","1f18f87f73dd7802d6ac6d69f9791f58","cd88c0466b9ef15bdbc49bfe4acd11d5","7842952684833f73af52e689186b8804","04092ab5516d57c53e4b6d4385217184","1372fea4f73fc1f594cf3ffa58c56484","c8693ee5630c780142bb6a834f71cb9d","42a13551ef0ce9e68aef58b6a4ac31fa","fbb1086d78fad2e81eefa859d53b6ffd","fa614d3a843db2f4f4f804155cf537a6","db4704d82c740ed3bd067c9bae72d092","f8059a9ddf1aeefd103fce9c853541b9","f100181a3e9ff7f5b23eed47dd66a1de","c4437a75ed05801f47848d00286b7f3e",{"version":"5a297566b9863f5dfd9c8d4850ed8af4","affectsGlobalScope":true,"impliedNodeFormat":1},"81ffe24ac8999f2e25fff992831b7324","02575b4ec4091570b193cc6ca8e6821e","fdf29cba6a2cc2f1f28f95f337ae66a4","58e9b716b50fdc8506289bd37edd9a55","8f4109203208f26263f439ab576f3820","4501167a04f84205017251407e6ed43b","295c0cb8891e7424d3a27dc56dc1b430","e1d3f27d8738af5fa721eed17a4e4d69","a6965f10e458de7e18e283070aca6c05","9d9ae7679668928510f3c7d0f678969c","1c17807e0ad03afd162d77cb40ad5309","7749a56d15eb26058bcfef426d94139b","9b7ad984483d8ffb801e212338bc8f2c",{"version":"1bd9c33fa4dc9f5db21e3499cce058e6","affectsGlobalScope":true,"impliedNodeFormat":1},"112adfdfe0121f630c2187e89145ee2c","da3da10502293a0e1bf580ef6c26486c","0cb91525c248fbd47796f4b66bf6d1ce","079f4855e44a9ca9b014e5a860bfb72f","cc495e570859464081995c5735f3badc","9f2f4a4f07a3455f4d52a26f7a4b8fcb","c7eb90a6d4e18b33d0eeba6074e872d4","2baf2a8f6a612cd1295f79f3e873a2a4","ad276fb55297e6d29fe65d795d7e7ce4","e2a8e187d8a7db24931ea2c655d52c80","0db97d91db6e499a5df8e99257afe07c","af4e50cb99ba66919d9a70c28bfc5e24",{"version":"ff4d71935967e02fbe90430738a46c4e","affectsGlobalScope":true,"impliedNodeFormat":1},"80934c477870fc97980d6296f5e7f063","98e86452fc67f68abc49450eb5f01d73","9916f4848c2282b9cb588a41f6b7d823","d9baefe45beff3fcb99e0e879c4b3a1a","a0e5e2be58876b4545cb3be195801e6e","1aa0fb5fa5d8275b5db27bc931aa1975","3449ea63993a991312e0e444ece2382b","7e5c546175ec5fae4c0e494ad24c5b90","bc6d97e46a1dafb8e8d1b601ccaf7e1a","579e6d11933f5644dc142c0a4e79c645","2a9d6baa2c42865fc9f5e7516d0910de","9ca582829e8eba4129943a1a941c6bbe","2aef22a88fd7dd975ba87f7c8e099fc3","836ca98928668baf27ac19645c07198e","757a8e678340c7a0aa01c699d2084933","48c676e5241e9876faafba68ef7d6d26","c3201c3dc232ea9f79fd9034b036ba94","8829f5982af596616a839da1807c12a2","5c4f67e441d334f46ff34670f61b22cd","25d40df8bff69a330a687d98bdbc2eb6","87175b4aa2f6ef2d25834a1969a45b51","be8b3bcdd2ba7d7c8c87946a20626c5b","b52b31c86a05afbf7cc827a8889b69da","cd8070bba6df1e7a7b65224ab106d7d0","ce15efa1c092340d16d533b69f4fb1a9","6b72f2919a3ebe1223b418b9bc920d7e","292f07f2059da3d1699f18623544d2a8","bd29402f5bac2be501b52a3a0ec997a1","aa13fb67f56469e7590006108066e0be","f12c7bdfa7c2ad0fe84247f800b9956c","d40cee60c3c264a4c1cd9c1013dbaac7","bec0d6e171cab6b12d98455bf99217c6","92fe312f908112181c00a3d36883a58e","3720c6074ec2bfeba0a1d638ab26a0bb","a041df5c00a7c9e6343c519782e99329","0303d7f5e0d019fa88ca2945794fa8d2","9dad91c6969461f75aef8fc683a9376e","c33ae00968f45dfe2ef2bea7966cf6c5","18c8c018e7e8a2f4ae676f8661110c6d","24d9b69b67823f208423e5796b79c23b","bf799332c55c6eb4a6d9d652d6dda457","3948daef404f94c35fb3ceca755a27d6","cd2ad42b2eff27f2277cced9b91b270e","304539db53f7fe3cc4bfd5878b7223fe","9c56184330b09c7c690ed42d3bcff59d","450ca6229325f8123bea072e71c866ed","88d22ddd44a72912036f38833360b8f1","edeec51072253363d7345541bb78d745","32d5973e5b42693387462b0998810615","db80558b0bf2653338bcf91434263fda","0136b37037b7ce74caaad4abcdd15237","e6179eee2131e249ccd9f2dd960b92b5","c089839d8abcdfe1168ebde55894cad4","097a7aae20edb8e5de5f45463d6fa417","c1df21c2195796f767d0e03cf9ac00d1","1362b703c4f9be29bd918a71a07b7e6c","f71afe5e74b683a5260d9b7dbd741104","adcc06f04eaa91f672f07e00c5f63eec","6ea7a8edac19a93df999f41b0058f2a2","563051f5836b5e450d5c9868552c9685","e41fb55415372b37046b46fd27a3e8b9","649b0e8e352b40125538627774ddccd6","b1c43dab0c298c8661b08e49779c32a0","239019e12520a280526af43974a0aeca","ec8beec2c9e2259c26be90574cb94989","57d6b728909ea2c50bf50e0e19c99b8c","93f871c7865a245efe8b0b2405a09c9e","b9b7a66404c8da7d1fc634a7a69a989e","0312a7938ed343c86f23d1178be1a62f","0d34e16363c4b2e88f9be19c0eda14a3","b4646a5c02912f7b2e8ce18a2f960bb7","4ba759be6e6d6510d41817c11f60c6d2","482e3e94bb83169ff0a2f1cd516c9394","9e07e42545fb1aba960b46e3d676c245","bd8fbc7e2e26a4686f8b4c45386a46db","ad1145336b61b23d724d3923b953ae82","3fb91489cde0479c146410f814c27749","589e3a40397dc48971ac6612dca9896b","86d78487119720cc47028100d7bb39d1","91535037303b09ae267a5ee85f9efd85","39f77cd7e5d49be8457371af1c217c22","80934c477870fc97980d6296f5e7f063","928a0d860e4d81f663a40bb1a5b4b1fd","e2eef8c06c88bf82bd89bd640527a835","0238452f4fa45cb934637e05d02d1db8","ff00d59cbd64d6d0ba3e1d83e11ca21b",{"version":"a62fe363e41eb53f7404361a8232f476","affectsGlobalScope":true,"impliedNodeFormat":1},"ec4eccca7dc09c8eac03e58d5704c74c","4e3963a0487d205b3f1ca917119aa4ac","19c7641b62556c1c081bd997e2f32a2f","de3e3ebddccbc9fe1e96a37b45aff49d"],"fileIdsList":[[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,615,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,608,610,611,616,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,609,612,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,608,609,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,610,612,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,608,609,610,611,612,613,614,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,608,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,294,309,339,340,341,342,496,511,546,575,606,1002,1183,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,311,312,336,514,546,630,631,632,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,311,546,574,621,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,311,482,546,574,625,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,311,312,514,640,669,1002,1270],[60,64,77,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,295,309,311,482,546,574,621,625,627,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,336,546,622,630,631,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,336,514,546,629,630,631,632,633,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,515,621,1002,1270],[60,64,77,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,295,309,311,312,482,514,546,574,621,625,627,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,311,482,574,622,625,636,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,294,336,514,622,628,629,630,631,633,640,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,312,336,371,465,491,496,511,514,535,546,574,618,621,630,631,640,654,900,911,913,915,928,929,935,936,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,546,621,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,546,622,631,654,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,311,336,378,386,459,465,484,511,514,534,535,546,548,574,606,617,621,630,631,647,654,657,696,698,901,906,942,944,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,484,621,642,647,693,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,336,482,491,514,521,534,535,574,621,630,631,654,660,693,695,698,703,893,948,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,621,911,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,482,491,514,521,621,630,631,652,654,655,656,658,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,514,515,621,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,371,514,515,621,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,279,289,292,312,621,971,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,371,514,515,534,621,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,371,514,515,546,621,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,482,621,971,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,482,514,515,534,621,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,297,312,336,386,411,459,482,514,515,546,621,630,631,640,647,980,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,514,534,621,984,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,514,534,546,621,984,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,621,971,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,621,971,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,371,514,534,546,621,984,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,311,482,514,515,621,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,514,515,621,971,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,297,312,515,631,647,661,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,515,546,621,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,336,482,491,514,521,534,546,621,630,647,652,655,656,657,658,659,660,661,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,336,482,514,546,574,630,631,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,336,482,514,546,630,631,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,311,336,342,482,484,621,622,664,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,621,935,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,336,514,546,621,630,631,698,944,1002,1116,1118,1119,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,311,312,336,482,514,515,534,546,574,621,630,631,647,944,1000,1001,1002,1004,1121,1122,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,297,311,336,482,514,534,546,574,617,621,630,631,647,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,311,482,514,515,534,621,647,911,1002,1152,1270],[60,64,77,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,309,311,371,377,411,416,465,496,514,534,574,621,631,647,657,660,689,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,311,344,484,491,535,574,606,621,640,647,653,693,695,930,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,336,409,492,514,534,535,574,616,617,621,630,631,647,660,695,875,911,1002,1028,1035,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,482,546,574,621,631,658,695,898,908,930,942,944,1002,1016,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,311,491,514,606,621,658,660,695,928,930,1002,1040,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,311,336,482,496,514,535,546,621,630,631,642,647,654,1002,1044,1045,1270],[60,64,77,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,311,312,336,482,494,514,534,536,546,547,574,621,622,630,631,633,647,660,1002,1033,1034,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,336,377,386,411,459,465,514,535,546,548,630,631,647,654,657,698,934,1002,1020,1021,1022,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,482,514,535,630,631,654,901,903,905,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,292,293,294,297,311,336,514,535,572,574,631,640,647,658,660,898,1002,1007,1008,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,292,294,297,311,336,344,411,416,491,514,521,534,535,548,572,574,630,631,640,642,647,660,874,875,947,1002,1008,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,340,514,546,621,898,944,1002,1009,1010,1011,1025,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,336,482,535,546,630,631,1002,1009,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,292,297,336,344,482,483,484,491,511,514,522,534,535,546,572,574,617,630,631,647,652,654,655,660,661,663,696,698,898,931,944,1002,1015,1017,1023,1024,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,546,548,911,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,297,482,514,546,548,621,898,944,948,1002,1037,1038,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,297,310,311,336,482,514,534,546,548,621,630,631,647,1002,1021,1022,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,482,514,546,621,898,944,1002,1100,1101,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,311,336,482,514,535,546,630,631,654,901,903,1002,1098,1099,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,482,491,492,514,546,574,630,631,654,902,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,482,514,546,621,640,647,1002,1111,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,336,514,535,546,621,630,631,654,698,944,1002,1116,1118,1119,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,279,292,293,297,312,482,514,574,621,909,1002,1156,1157,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,336,482,514,515,621,631,660,1002,1159,1160,1162,1177,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,294,312,546,574,622,625,626,628,634,635,637,641,643,645,1002,1006,1180,1182,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,294,546,622,629,644,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,294,311,341,546,622,646,662,665,666,667,688,691,692,937,962,1002,1005,1006,1154,1179,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,266,292,293,311,336,344,482,491,496,514,534,535,537,546,547,548,572,622,631,640,642,647,654,660,667,901,938,945,946,949,950,951,952,953,954,957,959,960,961,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,294,312,514,546,963,964,972,973,974,975,976,977,978,979,981,982,983,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1001,1002,1003,1004,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,294,337,546,628,1002,1181,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,546,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,311,336,496,535,537,546,547,606,622,631,667,690,901,952,1002,1026,1027,1036,1039,1041,1046,1102,1103,1112,1113,1120,1123,1124,1125,1126,1129,1130,1131,1153,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,546,1002,1155,1158,1178,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,311,336,482,514,534,535,546,574,617,630,631,640,654,657,661,682,693,697,698,902,908,909,910,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,546,622,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,874,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,572,574,689,789,858,875,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,789,858,875,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,511,789,858,875,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,511,789,858,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,340,911,912,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,914,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,312,514,640,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,482,483,572,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,496,914,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,411,491,514,535,574,630,631,654,695,698,874,942,947,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,336,340,482,483,484,515,534,546,572,574,630,631,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,484,534,574,789,874,875,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,514,572,574,647,660,698,1002,1008,1012,1013,1014,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,344,483,484,491,514,546,572,630,631,654,661,696,698,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,292,293,484,491,534,574,652,655,696,698,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,292,293,572,574,698,1002,1007,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,652,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,534,652,955,956,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,482,514,535,546,621,630,631,654,902,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,482,514,535,546,574,621,630,631,654,902,958,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,482,514,546,621,630,631,647,654,902,958,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,1002,1104,1105,1106,1107,1108,1109,1110,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,482,491,514,574,630,631,647,654,698,942,1002,1016,1104,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,344,358,482,485,491,514,521,572,574,630,631,647,652,653,654,698,1002,1104,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,297,311,312,336,482,514,574,630,631,647,1002,1104,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,282,292,293,312,336,482,491,514,521,630,631,649,654,655,656,1002,1104,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,312,336,482,514,574,630,631,1002,1104,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,311,312,336,482,630,631,647,1002,1104,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,311,336,482,514,621,622,630,631,966,970,1000,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,482,484,514,966,967,970,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,297,311,336,340,482,484,514,521,546,630,631,654,660,698,908,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,336,514,647,965,968,969,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,336,482,514,515,621,622,630,631,966,970,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,312,515,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,337,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,413,511,667,668,669,685,687,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,514,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,623,624,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,311,341,413,433,515,535,546,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,312,671,672,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,294,413,482,511,546,624,670,677,678,679,684,688,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,340,433,496,631,673,674,675,676,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,311,312,546,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,433,482,546,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,297,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,297,640,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,261,640,657,680,681,683,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,297,342,482,640,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,296,297,514,574,618,657,670,671,672,682,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,671,672,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,575,619,620,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,311,667,688,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,294,309,311,482,514,534,621,631,661,690,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,359,482,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,311,312,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,483,546,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,311,312,338,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,336,337,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,482,575,686,688,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,297,546,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,297,510,546,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,297,546,663,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,311,482,492,514,574,617,647,1000,1002,1159,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,312,336,344,482,491,514,574,647,660,1002,1159,1162,1176,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,336,344,482,483,514,534,535,546,630,631,640,697,924,925,927,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,297,309,311,336,377,459,491,514,534,535,617,630,631,640,647,654,698,908,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,292,336,344,482,484,491,492,510,534,535,546,548,572,574,630,631,647,654,701,704,1002,1042,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,482,514,535,546,572,574,617,631,647,697,698,898,908,944,1002,1043,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,292,294,297,311,336,344,484,494,510,514,522,535,572,574,606,652,654,655,660,694,696,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,483,514,534,548,574,648,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,572,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,483,484,489,514,527,534,548,564,572,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,344,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,297,344,483,534,572,648,649,650,651,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,297,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,537,572,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,483,484,514,534,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,344,483,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,344,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,350,483,484,572,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,292,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,572,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,548,549,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,297,483,484,522,534,572,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,1002,1161,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,617,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,534,653,654,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,297,344,483,522,572,574,648,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,311,546,682,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,548,564,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,482,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,482,493,513,514,515,516,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,482,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,521,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,297,520,521,548,894,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,297,411,416,482,492,493,495,496,511,513,517,518,519,520,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,698,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,297,482,642,660,698,706,712,1002,1114,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,878,880,881,883,884,885,886,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,294,297,482,642,660,698,706,712,968,969,1002,1114,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,336,535,630,631,642,660,706,711,712,887,892,899,906,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,336,535,548,631,642,660,706,707,711,712,713,887,892,899,906,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,482,537,876,877,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,482,631,877,879,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,297,311,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,535,537,572,574,663,694,695,696,707,708,709,710,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,537,694,708,710,711,940,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,482,877,882,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,336,514,515,534,606,642,660,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,484,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,482,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,535,907,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,515,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,311,336,891,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,336,482,491,535,546,630,631,698,897,898,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,311,482,483,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,311,336,482,514,535,630,654,903,905,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,521,534,652,655,656,663,695,696,698,700,702,704,705,889,890,894,896,940,1002,1016,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,572,695,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,521,522,572,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,491,521,572,574,698,888,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,521,698,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,491,521,894,895,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,521,663,695,696,698,701,704,711,887,889,890,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,491,521,546,617,698,704,1002,1115,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,491,521,546,617,698,704,1002,1117,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,534,652,655,698,702,703,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,521,656,663,695,696,698,700,701,704,705,889,890,893,894,896,939,940,941,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,521,572,652,655,656,696,698,700,1002,1018,1019,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,521,663,695,696,698,703,704,711,887,889,893,894,896,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,521,652,655,656,663,695,696,698,700,701,702,703,704,705,889,890,907,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,482,513,521,534,704,1002,1161,1162,1163,1164,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,513,521,642,704,890,1002,1161,1164,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,513,521,1002,1161,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,297,344,483,491,513,521,574,652,655,656,1002,1161,1168,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,482,491,513,514,521,534,574,1002,1161,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,513,521,574,1002,1161,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,513,521,534,902,1002,1161,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,513,521,534,1002,1161,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,513,521,574,655,1002,1161,1168,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,312,344,482,514,574,660,1002,1161,1162,1165,1166,1167,1169,1170,1171,1172,1173,1174,1175,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,482,491,513,521,534,1002,1161,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,491,521,546,574,617,654,695,888,893,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,292,293,311,482,491,492,514,535,654,905,909,1002,1095,1097,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,312,482,492,514,909,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,297,482,483,491,698,902,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,482,491,492,514,698,902,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,297,311,482,483,514,534,548,617,640,647,654,901,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,292,293,311,482,492,514,574,904,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,311,482,483,514,534,574,617,647,654,900,901,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,297,482,483,514,534,574,647,909,1002,1045,1098,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,396,546,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,297,334,394,397,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,482,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,311,546,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,295,310,311,312,336,482,483,484,496,514,535,548,617,630,631,657,914,933,934,1002,1111,1127,1128,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,340,482,534,535,631,640,647,930,931,932,933,934,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,546,574,695,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,311,336,535,606,1002,1035,1270],[60,64,77,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,311,482,491,534,535,574,654,658,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,311,340,359,482,514,535,546,574,647,654,931,1002,1029,1030,1032,1033,1034,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,483,484,491,514,574,693,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,297,311,312,482,514,515,534,617,657,914,1002,1127,1128,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,311,496,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,336,1002,1031,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,312,344,1002,1094,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,514,515,534,623,642,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,297,411,416,482,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,534,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,297,482,534,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,514,515,534,629,642,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,482,483,496,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,546,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,546,548,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,496,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,296,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,296,377,639,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,335,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,336,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,624,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,336,534,630,631,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,294,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,482,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,334,482,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,334,640,943,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,294,297,309,311,377,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,619,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,311,312,483,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,311,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,546,657,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,312,492,647,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,535,574,965,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,311,482,514,657,658,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,535,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,606,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,494,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,548,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,547,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,496,574,618,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,294,311,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,311,535,548,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,294,336,536,537,546,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,497,510,1002,1270],[162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,689,1002,1184,1185,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,485,486,487,488,489,490,491,522,523,525,528,531,533,567,571,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,522,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,350,353,488,491,522,523,524,572,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,282,292,488,489,491,522,523,526,527,572,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,350,488,491,522,523,529,530,572,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,350,488,489,491,522,523,532,572,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,488,489,491,522,523,527,565,566,572,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,344,353,491,522,523,568,569,570,572,574,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,292,521,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,1002,1270],[60,64,77,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,574,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,491,535,574,654,661,909,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,295,310,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,312,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,789,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,788,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,535,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,309,546,572,573,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,574,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,311,495,513,521,574,654,890,1002,1159,1161,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,574,617,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,293,312,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,293,311,965,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,292,513,698,699,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,491,521,698,890,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,607,616,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,297,309,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,495,512,1002,1270],[60,154,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,265,266,1002,1270],[60,144,154,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,266,268,269,282,292,1002,1270],[60,154,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,266,281,292,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,265,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,268,1002,1270],[60,155,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,265,280,281,283,284,285,286,287,288,289,290,291,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,268,279,1002,1270],[60,155,156,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,260,261,264,268,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,263,265,268,1002,1270],[60,155,156,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,259,260,265,1002,1270],[60,154,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,263,264,265,266,267,283,1002,1270],[60,154,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,264,266,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,261,265,268,1002,1270],[60,154,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,262,265,279,280,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,265,268,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1052,1053,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1054,1055,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1054,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1058,1061,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1056,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1052,1058,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1056,1058,1059,1060,1061,1063,1064,1065,1066,1067,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1062,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1058,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1060,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1062,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1068,1270],[60,62,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1052,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1057,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1048,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1050,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1049,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1051,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1275],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,917,922,923,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,917,922,924,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,917,922,923,924,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,917,921,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,924,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,924,926,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,859,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,788,859,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,859,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,859,860,861,862,863,864,865,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,788,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,788,835,836,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,835,836,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,835,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,787,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,836,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,837,838,839,840,841,842,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,836,843,844,845,1002,1270],[60,63,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,787,835,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,867,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,788,846,867,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,867,868,869,870,871,872,873,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,805,835,867,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,787,788,805,824,835,846,866,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,796,797,798,804,1002,1270],[60,63,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,796,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,799,800,801,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,796,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,799,800,801,802,803,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,790,791,792,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,790,791,792,793,794,795,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,791,792,794,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,788,812,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,812,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,812,818,819,820,821,822,823,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,812,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,811,813,814,815,816,817,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,806,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,807,808,809,810,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,788,806,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,788,805,824,835,846,857,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,826,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,825,826,827,828,829,830,831,832,833,834,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,825,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,847,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,848,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,847,848,849,850,851,852,853,854,855,856,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,331,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,325,327,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,315,325,326,328,329,330,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,325,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,315,325,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,316,317,318,319,320,321,322,323,324,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,316,320,321,324,325,328,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,316,317,318,319,320,321,322,323,324,325,326,328,329,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,315,316,317,318,319,320,321,322,323,324,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,743,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,743,746,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,743,744,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,744,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,744,750,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,748,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,743,744,745,746,747,748,749,751,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,743,747,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,751,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,752,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,738,753,754,756,766,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,742,758,759,766,767,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,738,741,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,738,742,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,760,766,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,738,742,753,756,757,758,766,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,766,769,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,761,766,769,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,761,766,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,775,776,777,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,738,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,738,760,766,767,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,768,769,770,771,772,773,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,767,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,761,766,767,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,767,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,760,766,767,769,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,760,761,766,767,769,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,717,719,720,738,741,742,758,759,760,766,767,774,778,779,780,781,782,783,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,738,756,766,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,738,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,755,756,759,760,761,765,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,755,762,764,765,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,738,755,759,760,765,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,738,754,756,759,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,738,755,759,760,761,762,764,767,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,755,760,762,763,765,767,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,784,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,714,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,715,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,716,720,721,722,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,716,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,737,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,717,718,719,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,717,718,1002,1270],[60,62,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,720,738,739,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,740,785,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,786,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,333,376,389,390,391,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,333,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,376,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,333,387,388,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,387,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,421,422,423,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,376,417,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,333,422,423,445,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,467,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,461,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,332,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,388,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,332,333,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1201,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1201,1205,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1199,1201,1203,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1199,1201,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1201,1207,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1200,1201,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1212,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1201,1218,1219,1220,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1201,1222,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1201,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1201,1204,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1201,1203,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1201,1212,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1262,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1267,1268,1269],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1272],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1274,1275,1276],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1277],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1280],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1267,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,271,272,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,272,273,1002,1263,1266,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1133,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,544,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,538,544,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,539,540,541,542,543,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,500,501,502,503,504,505,506,507,508,509,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,499,501,502,503,504,505,506,507,508,509,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,499,500,501,502,503,504,505,506,507,508,509,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,499,500,502,503,504,505,506,507,508,509,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,499,500,501,503,504,505,506,507,508,509,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,499,500,501,502,504,505,506,507,508,509,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,499,500,501,502,503,505,506,507,508,509,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,499,500,501,502,503,504,506,507,508,509,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,499,500,501,502,503,504,505,507,508,509,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,499,500,501,502,503,504,505,506,508,509,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,499,500,501,502,503,504,505,506,507,509,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,499,500,501,502,503,504,505,506,507,508,510,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,498,499,500,501,502,503,504,505,506,507,508,509,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1291],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1287,1288,1289,1290],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1296,1297],[60,162,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,157,158,159,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,160,161,162,163,164,165,166,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,255,256,1002,1270],[60,162,204,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,204,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1300,1302,1306,1307,1308,1309,1310,1311],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1300,1302,1303,1305,1312],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1299,1300,1301,1303,1304,1305,1312],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1302,1303],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1302],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1304],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1301,1303,1305],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1300,1302,1303,1304,1305,1312],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1300,1301,1302,1303,1304,1305,1312],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1305],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1315,1316,1319,1320],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1321],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1269,1270,1322],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,638,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,544,545,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,544,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,362,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,362,1002,1270,1324,1325,1326,1327],[60,61,62,63,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1283],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1333,1371],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1333,1356,1371],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1332,1371],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1371],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1333],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1333,1357,1371],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1357,1371],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1265,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1379],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1271,1292,1372,1374,1380],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1292,1373,1374,1375,1376,1377,1378],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1373,1374],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1373],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1380],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270,1274,1278,1279],[60,64,66,68,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,64,66,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,66,67,68,69,70,71,72,73,74,75,76,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,62,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1316,1317,1318],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270,1316],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,916,917,918,919,920,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,917,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,916,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1143,1144,1145,1146,1147,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1143,1144,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1143,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,274,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,274,275,276,277,278,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,270,273,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,273,274,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,270,274,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,369,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,360,361,364,365,366,367,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,314,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,363,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,334,369,370,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,370,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,334,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,374,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,334,376,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,334,380,381,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,384,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,362,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,334,392,393,394,395,396,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,394,395,397,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,334,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,391,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,334,389,393,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,377,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,414,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,400,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,400,401,402,403,404,405,406,407,408,409,410,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,401,403,404,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,401,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,386,1002,1270],[60,63,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,314,418,419,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,334,417,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,424,426,427,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,425,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,314,418,432,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,395,396,397,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,417,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,314,434,435,438,439,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,363,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,437,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,424,436,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,334,446,1002,1270],[60,63,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,447,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,449,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,451,452,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,334,451,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,462,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,376,394,397,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,334,464,1002,1270],[60,63,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,466,469,1002,1270],[60,63,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,468,1002,1270],[60,63,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,433,468,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,313,314,334,475,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,369,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,377,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,314,378,479,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,335,360,361,363,364,368,369,371,372,373,374,375,377,378,379,380,382,383,384,385,386,397,398,399,400,402,405,406,407,409,410,411,412,413,414,415,416,419,420,426,427,428,429,430,431,432,433,434,436,437,440,441,442,443,444,447,448,449,450,452,453,454,455,456,457,458,459,460,463,465,466,469,470,471,472,473,474,475,476,477,478,479,480,481,1002,1270],[60,63,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,333,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,334,386,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,302,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,298,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,298,302,303,304,305,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,298,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,298,299,300,301,306,307,308,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1132,1150,1151,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1133,1140,1142,1148,1149,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1133,1140,1270],[60,63,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1132,1139,1140,1141,1150,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1133,1139,1140,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,577,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,576,578,579,580,581,582,583,585,586,587,588,589,590,591,592,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,579,580,581,582,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,578,582,583,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,577,579,582,584,585,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,577,579,582,584,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,577,579,580,582,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,576,580,582,585,586,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,577,579,580,581,582,585,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,576,578,581,582,585,586,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,577,579,581,582,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,576,581,584,585,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,581,582,584,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,593,605,1002,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,593,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,594,595,596,597,598,599,600,601,602,603,604,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,576,582,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,582,600,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,582,585,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,585,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,600,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1092,1093,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1092,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1081,1089,1090,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1047,1069,1073,1077,1079,1080,1081,1082,1083,1084,1088,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1081,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1091,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1069,1081,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1069,1081,1089,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1081,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1047,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1089,1270],[60,64,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1081,1085,1089,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1081,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1081,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1069,1080,1089,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1081,1085,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1081,1089,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1088,1096,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1088,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,549,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,550,551,552,553,554,555,556,557,558,559,560,561,562,563,1002,1270],[60,162,176,180,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,176,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,171,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,173,176,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,171,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270],[60,162,168,169,172,175,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,176,183,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,168,174,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,176,197,198,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,172,176,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270],[60,162,197,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270],[60,162,170,171,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270],[60,162,170,171,172,173,174,175,176,177,178,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,198,199,200,201,202,203,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,176,191,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,176,183,184,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,174,176,184,185,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,175,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,168,171,176,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,176,180,184,185,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,180,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,174,176,179,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,168,173,176,183,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,162,171,176,197,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,1002,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1133,1138,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1134,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1137,1270],[60,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1133,1135,1136,1138,1270],[60,153,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,144,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,144,147,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,139,142,144,145,146,147,148,149,150,151,152,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,78,80,147,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,144,145,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,79,144,146,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,80,82,84,85,86,87,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,82,84,86,87,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,82,84,86,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,79,82,84,85,87,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,78,80,81,82,83,84,85,86,87,88,89,139,140,141,142,143,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,78,80,81,84,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,80,81,84,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,84,87,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,78,79,81,82,83,85,86,87,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,78,79,80,84,144,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,84,85,86,87,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,86,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270],[60,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,162,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,1002,1270]],"options":{"allowJs":true,"allowImportingTsExtensions":true,"composite":true,"declaration":true,"declarationMap":true,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"skipLibCheck":true,"strict":true,"sourceMap":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","useDefineForClassFields":true,"esModuleInterop":true},"referencedMap":[[607,1],[616,2],[612,3],[610,4],[613,5],[611,6],[615,7],[609,1],[614,8],[608,1],[494,1],[1184,9],[644,10],[622,11],[626,12],[1187,13],[628,14],[1181,15],[634,16],[666,17],[635,18],[637,19],[641,20],[937,21],[952,22],[938,23],[945,24],[946,25],[949,26],[950,27],[951,28],[963,29],[964,30],[972,31],[973,32],[974,30],[975,29],[976,29],[977,33],[978,29],[979,34],[982,35],[981,36],[983,30],[985,37],[986,35],[987,38],[988,29],[989,30],[990,29],[991,30],[992,29],[994,39],[996,40],[993,30],[995,32],[997,41],[998,42],[999,43],[936,44],[646,45],[662,46],[1121,47],[1122,48],[665,49],[1113,50],[1120,51],[1123,52],[1124,53],[1153,54],[690,55],[1027,56],[1036,57],[1131,58],[1041,59],[1046,60],[1103,61],[1023,62],[1024,63],[1009,64],[1010,65],[1026,66],[1011,67],[1025,68],[1037,69],[1039,70],[1038,71],[1102,72],[1100,73],[1101,74],[1112,75],[1155,76],[1158,77],[1178,78],[1183,79],[645,80],[1180,81],[962,82],[1005,83],[1182,84],[1006,85],[1154,86],[1179,87],[911,88],[1125,89],[875,90],[879,91],[876,92],[882,93],[1028,94],[913,95],[915,96],[912,97],[693,98],[954,99],[948,100],[953,101],[1007,102],[1015,103],[1012,104],[1013,105],[1014,106],[955,107],[956,108],[957,109],[960,110],[959,111],[961,112],[1111,113],[1105,114],[1106,115],[1107,116],[1108,117],[1109,118],[1110,119],[1001,120],[971,121],[969,122],[970,123],[1003,124],[1004,120],[984,125],[629,126],[688,127],[1126,128],[625,129],[669,130],[673,131],[685,132],[677,133],[674,131],[678,134],[1188,135],[679,136],[680,137],[675,131],[684,138],[681,139],[683,140],[676,141],[621,142],[668,143],[691,144],[483,145],[337,146],[647,147],[1029,147],[1030,148],[339,149],[338,150],[687,151],[686,152],[914,153],[664,154],[1160,155],[1177,156],[928,157],[929,158],[1043,159],[1044,160],[697,161],[524,108],[649,162],[526,163],[565,164],[343,108],[345,165],[529,166],[527,167],[652,168],[701,169],[530,170],[532,108],[566,171],[650,172],[346,108],[893,167],[702,173],[347,108],[348,163],[349,167],[350,174],[351,108],[352,108],[353,175],[354,108],[1168,176],[355,167],[356,108],[357,166],[358,167],[485,177],[1018,178],[486,108],[487,179],[894,180],[488,108],[648,181],[568,108],[569,179],[489,175],[1163,176],[1164,182],[663,183],[655,184],[651,185],[703,186],[570,187],[490,108],[704,188],[517,189],[484,190],[518,170],[519,191],[1019,192],[895,193],[888,192],[520,169],[521,194],[705,195],[1115,196],[887,197],[1189,1],[1117,198],[940,199],[907,200],[878,201],[880,202],[708,170],[707,203],[711,204],[1190,205],[712,147],[881,201],[883,206],[1114,207],[884,167],[709,208],[885,202],[968,209],[886,202],[713,210],[710,211],[892,212],[899,213],[694,214],[906,215],[1017,216],[696,217],[656,218],[889,219],[890,220],[896,221],[891,222],[1116,223],[1118,224],[941,225],[942,226],[1020,227],[897,228],[908,229],[1165,230],[1166,231],[1167,232],[1169,233],[1170,234],[1171,235],[1173,236],[1172,237],[1174,238],[1176,239],[1175,240],[1040,241],[1098,242],[1156,243],[1099,244],[903,245],[958,246],[905,247],[902,248],[1157,249],[671,250],[672,251],[1128,252],[657,253],[1129,254],[935,255],[933,256],[1033,257],[1034,258],[1035,259],[934,260],[1130,261],[630,262],[1032,263],[1095,264],[1191,147],[623,147],[904,188],[692,265],[658,266],[642,170],[980,267],[514,170],[1045,268],[643,269],[515,170],[1127,270],[1000,188],[653,271],[900,272],[706,273],[1192,170],[297,274],[640,275],[336,276],[930,277],[636,278],[534,147],[632,279],[931,280],[492,281],[660,282],[944,283],[877,188],[670,284],[624,146],[493,170],[1193,285],[516,145],[682,286],[1194,287],[1022,288],[1119,289],[966,290],[1021,291],[536,292],[631,293],[659,294],[495,295],[1008,296],[1195,170],[548,297],[1016,296],[633,85],[695,296],[619,298],[898,147],[340,190],[667,299],[341,147],[342,300],[575,299],[901,301],[547,302],[294,190],[496,300],[511,303],[60,304],[1186,305],[312,306],[572,307],[523,308],[525,309],[528,310],[531,311],[533,312],[567,313],[571,314],[522,315],[535,316],[296,1],[1159,1],[965,316],[293,317],[1161,318],[698,316],[909,316],[1104,147],[910,319],[311,320],[537,321],[947,322],[344,1],[497,1],[789,323],[1197,1],[1198,1],[512,1],[661,1],[654,324],[295,1],[574,325],[943,326],[1162,327],[932,321],[491,1],[618,328],[699,316],[620,329],[1196,330],[700,331],[939,332],[689,1],[617,333],[310,334],[513,335],[269,336],[283,337],[282,338],[284,339],[285,1],[286,1],[280,340],[287,341],[288,339],[292,342],[289,343],[290,339],[265,344],[156,1],[264,345],[261,346],[266,1],[268,347],[155,1],[267,348],[262,349],[260,339],[263,1],[281,350],[291,351],[1054,352],[1053,1],[1056,353],[1055,354],[1066,355],[1059,356],[1067,357],[1064,355],[1068,358],[1062,355],[1063,359],[1065,360],[1061,361],[1060,362],[1069,363],[1057,364],[1058,365],[1048,1],[1049,366],[1051,367],[1050,368],[1052,369],[1278,370],[924,371],[923,372],[926,373],[922,374],[925,375],[927,376],[860,377],[861,378],[862,379],[863,379],[866,380],[864,1],[859,381],[865,379],[844,382],[837,383],[838,383],[839,383],[840,384],[841,385],[842,386],[843,387],[846,388],[845,389],[836,390],[868,391],[870,392],[869,391],[871,391],[872,391],[874,393],[873,394],[867,395],[805,396],[797,381],[798,397],[802,398],[800,399],[804,400],[803,399],[801,399],[799,399],[793,401],[790,1],[794,1],[791,1],[796,402],[795,403],[792,1],[788,385],[819,404],[823,405],[820,405],[821,1],[824,406],[822,389],[813,407],[814,407],[815,407],[816,407],[817,407],[818,408],[807,409],[808,409],[809,409],[810,409],[811,410],[806,1],[812,411],[858,412],[833,413],[827,413],[835,414],[828,413],[829,413],[831,413],[830,413],[834,413],[825,1],[832,413],[826,415],[850,381],[851,170],[853,416],[852,170],[854,417],[855,170],[849,417],[848,416],[856,417],[857,418],[847,1],[332,419],[328,420],[315,1],[331,421],[324,422],[322,423],[321,423],[320,422],[317,423],[318,422],[326,424],[319,423],[316,422],[323,423],[329,425],[330,426],[325,427],[327,423],[461,170],[744,428],[747,429],[746,430],[745,428],[743,431],[751,432],[749,433],[752,434],[748,435],[750,436],[753,437],[757,438],[754,1],[760,439],[742,440],[741,441],[782,170],[767,442],[759,443],[763,1],[775,444],[776,445],[777,446],[778,447],[780,1],[781,448],[783,449],[774,450],[768,451],[769,452],[771,453],[770,454],[772,455],[773,452],[784,456],[779,440],[758,457],[761,458],[762,459],[766,460],[756,461],[755,462],[765,463],[764,464],[785,465],[715,466],[714,1],[716,467],[722,1],[726,1],[725,1],[724,1],[727,468],[729,1],[721,1],[723,469],[730,468],[732,1],[736,170],[733,1],[734,170],[735,1],[737,470],[731,1],[728,468],[738,471],[717,1],[720,472],[719,473],[718,170],[740,474],[786,475],[739,1],[787,476],[370,170],[376,170],[392,477],[387,478],[391,479],[389,480],[390,481],[423,482],[424,483],[421,1],[418,484],[417,479],[446,485],[467,482],[468,486],[462,487],[313,170],[388,170],[333,488],[445,489],[422,490],[1199,1],[1200,1],[1201,1],[1260,491],[1202,492],[1249,493],[1204,494],[1203,495],[1205,492],[1206,492],[1208,496],[1207,492],[1209,497],[1210,497],[1211,492],[1213,498],[1214,492],[1215,498],[1216,492],[1218,492],[1219,492],[1220,492],[1221,499],[1217,492],[1222,1],[1223,500],[1224,500],[1225,500],[1226,500],[1227,500],[1228,500],[1238,501],[1229,500],[1230,500],[1231,500],[1232,500],[1234,500],[1235,500],[1233,500],[1236,500],[1237,500],[1239,492],[1240,492],[1212,492],[1241,498],[1243,502],[1242,492],[1244,492],[1245,492],[1246,503],[1248,492],[1247,492],[1250,492],[1252,492],[1253,504],[1251,492],[1254,492],[1255,492],[1256,492],[1257,492],[1258,492],[1259,492],[1261,1],[1263,505],[258,506],[1264,506],[1270,507],[1262,506],[1271,1],[1273,508],[1277,509],[1276,510],[1281,511],[1274,1],[1282,512],[273,513],[1268,512],[1267,514],[1283,506],[1284,1],[1140,515],[538,1],[542,516],[543,516],[539,517],[540,517],[541,517],[544,518],[1265,1],[1275,1],[1285,519],[499,520],[500,521],[498,522],[501,523],[502,524],[503,525],[504,526],[505,527],[506,528],[507,529],[508,530],[509,531],[510,532],[1286,515],[1288,1],[1287,1],[1290,533],[1291,534],[1289,533],[1292,1],[1293,1],[1294,506],[259,535],[1272,1],[1295,512],[1042,1],[1297,1],[1298,536],[206,537],[207,538],[208,539],[162,540],[209,541],[210,542],[211,543],[157,1],[160,544],[158,1],[159,1],[212,545],[213,546],[214,547],[215,548],[216,549],[217,550],[218,551],[219,552],[220,553],[221,554],[222,555],[163,1],[161,1],[223,556],[224,557],[225,558],[257,559],[226,560],[227,561],[228,562],[229,563],[230,564],[231,565],[232,566],[233,567],[234,568],[235,569],[236,570],[237,571],[238,572],[239,573],[241,574],[240,575],[242,576],[243,577],[244,578],[245,579],[246,580],[247,581],[248,582],[249,583],[250,584],[251,585],[252,586],[253,587],[254,588],[164,1],[165,1],[166,1],[205,589],[255,590],[256,591],[1312,592],[1299,506],[1306,593],[1302,594],[1300,595],[1303,596],[1307,593],[1308,593],[1305,597],[1304,598],[1309,599],[1310,600],[1311,593],[1301,601],[1313,1],[1314,1],[1321,602],[1320,603],[63,1],[272,1],[271,1],[1323,604],[1322,512],[1185,170],[627,170],[639,605],[638,170],[546,606],[545,607],[1325,608],[1326,170],[362,170],[1327,608],[1324,1],[1328,609],[61,1],[64,610],[65,170],[1269,506],[1329,611],[1330,1],[1331,1],[1356,612],[1357,613],[1333,614],[1336,615],[1354,612],[1355,612],[1345,612],[1344,616],[1342,612],[1337,612],[1350,612],[1348,612],[1352,612],[1332,612],[1349,612],[1353,612],[1338,612],[1339,612],[1351,612],[1334,612],[1340,612],[1341,612],[1343,612],[1347,612],[1358,617],[1346,612],[1335,612],[1371,618],[1370,1],[1365,617],[1367,619],[1366,617],[1359,617],[1360,617],[1362,617],[1364,617],[1368,619],[1369,619],[1361,619],[1363,619],[1266,620],[1380,621],[1372,1],[1375,622],[1378,506],[1379,623],[1373,621],[1376,624],[1377,506],[1374,625],[1381,626],[1382,506],[1383,1],[1133,1],[1384,1],[1385,506],[1386,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[167,1],[62,1],[1280,627],[1279,511],[573,1],[1296,506],[74,170],[76,628],[68,629],[71,629],[69,170],[67,629],[75,629],[73,629],[77,630],[66,170],[72,170],[70,629],[302,631],[1002,632],[359,1],[1319,633],[1316,506],[1318,634],[1317,1],[1315,1],[921,635],[920,636],[919,636],[918,636],[917,637],[916,636],[967,1],[1148,638],[1145,639],[1146,1],[1147,1],[1143,1],[1144,640],[278,641],[270,1],[279,642],[276,641],[274,643],[277,644],[275,645],[1031,170],[425,646],[368,647],[367,648],[361,649],[364,650],[360,170],[366,649],[365,649],[371,651],[372,652],[373,653],[375,654],[374,649],[377,655],[378,649],[379,649],[382,656],[383,657],[381,649],[380,649],[385,658],[384,649],[369,170],[386,649],[363,659],[413,649],[397,660],[398,661],[393,662],[396,663],[395,664],[394,665],[399,659],[401,649],[415,666],[410,667],[411,668],[405,669],[403,649],[404,649],[402,670],[412,657],[400,649],[406,671],[408,649],[409,649],[407,649],[414,672],[416,649],[420,673],[419,674],[428,675],[429,657],[427,649],[430,657],[426,676],[431,649],[433,677],[441,678],[442,657],[432,679],[440,680],[434,649],[435,681],[438,682],[439,649],[437,683],[444,657],[436,676],[443,649],[447,684],[448,685],[449,649],[450,686],[453,687],[452,688],[454,684],[456,657],[455,657],[457,649],[458,649],[459,649],[463,689],[335,653],[460,690],[465,691],[470,692],[469,693],[471,657],[466,648],[472,649],[473,694],[474,170],[476,695],[477,657],[478,649],[475,696],[479,697],[480,698],[481,684],[464,389],[314,482],[482,699],[334,700],[451,701],[305,702],[303,702],[304,702],[301,703],[306,704],[307,703],[308,705],[299,705],[298,170],[300,705],[309,706],[1152,707],[1150,708],[1149,709],[1151,710],[1141,711],[1132,1],[591,712],[593,713],[588,714],[589,1],[584,715],[578,716],[583,717],[590,1],[592,712],[587,718],[581,719],[586,720],[579,721],[580,722],[576,1],[577,1],[582,723],[585,724],[606,725],[596,726],[597,170],[605,727],[594,1],[595,1],[600,728],[604,729],[598,730],[599,731],[601,729],[603,732],[602,729],[1094,733],[1093,734],[1091,735],[1087,170],[1089,736],[1082,737],[1092,738],[1071,739],[1072,740],[1074,739],[1077,739],[1079,740],[1076,739],[1075,739],[1078,739],[1070,739],[1083,741],[1073,739],[1047,1],[1088,742],[1086,743],[1080,744],[1084,745],[1081,746],[1090,747],[1085,748],[1097,749],[1096,750],[551,1],[559,1],[563,1],[555,1],[557,1],[552,1],[560,1],[558,1],[562,1],[556,751],[561,1],[550,751],[553,751],[554,751],[564,752],[549,1],[1142,1],[183,753],[193,754],[182,753],[203,755],[174,756],[173,1],[202,506],[196,757],[201,756],[176,758],[190,759],[175,760],[199,761],[171,762],[170,506],[200,763],[172,764],[177,754],[178,1],[181,754],[168,1],[204,765],[194,766],[185,767],[186,768],[188,769],[184,770],[187,771],[197,506],[179,772],[180,773],[189,774],[169,1],[192,766],[191,754],[195,1],[198,775],[1139,776],[1135,777],[1134,515],[1138,778],[1137,779],[1136,1],[154,780],[148,781],[152,782],[149,782],[145,781],[153,783],[150,784],[151,782],[146,785],[147,786],[141,787],[85,788],[87,789],[140,1],[86,790],[144,791],[143,792],[142,793],[78,1],[88,788],[89,1],[80,794],[84,795],[79,1],[81,796],[82,797],[83,1],[90,798],[91,798],[92,798],[93,798],[94,798],[95,798],[96,798],[97,798],[98,798],[99,798],[100,798],[101,798],[102,798],[104,798],[103,798],[105,798],[106,798],[107,798],[108,798],[139,799],[109,798],[110,798],[111,798],[112,798],[113,798],[114,798],[115,798],[116,798],[117,798],[118,798],[119,798],[120,798],[121,798],[123,798],[122,798],[124,798],[125,798],[126,798],[127,798],[128,798],[129,798],[130,798],[131,798],[132,798],[133,798],[134,798],[135,798],[138,798],[136,798],[137,798]],"affectedFilesPendingEmit":[[1184,51],[644,51],[622,51],[626,51],[1187,51],[628,51],[1181,51],[634,51],[666,51],[635,51],[637,51],[641,51],[937,51],[952,51],[938,51],[945,51],[946,51],[949,51],[950,51],[951,51],[963,51],[964,51],[972,51],[973,51],[974,51],[975,51],[976,51],[977,51],[978,51],[979,51],[982,51],[981,51],[983,51],[985,51],[986,51],[987,51],[988,51],[989,51],[990,51],[991,51],[992,51],[994,51],[996,51],[993,51],[995,51],[997,51],[998,51],[999,51],[936,51],[646,51],[662,51],[1121,51],[1122,51],[665,51],[1113,51],[1120,51],[1123,51],[1124,51],[1153,51],[690,51],[1027,51],[1036,51],[1131,51],[1041,51],[1046,51],[1103,51],[1023,51],[1024,51],[1009,51],[1010,51],[1026,51],[1011,51],[1025,51],[1037,51],[1039,51],[1038,51],[1102,51],[1100,51],[1101,51],[1112,51],[1155,51],[1158,51],[1178,51],[1183,51],[645,51],[1180,51],[962,51],[1005,51],[1182,51],[1006,51],[1154,51],[1179,51],[911,51],[1125,51],[875,51],[879,51],[876,51],[882,51],[1028,51],[913,51],[915,51],[912,51],[693,51],[954,51],[948,51],[953,51],[1007,51],[1015,51],[1012,51],[1013,51],[1014,51],[955,51],[956,51],[957,51],[960,51],[959,51],[961,51],[1111,51],[1105,51],[1106,51],[1107,51],[1108,51],[1109,51],[1110,51],[1001,51],[971,51],[969,51],[970,51],[1003,51],[1004,51],[984,51],[629,51],[688,51],[1126,51],[625,51],[669,51],[673,51],[685,51],[677,51],[674,51],[678,51],[1188,51],[679,51],[680,51],[675,51],[684,51],[681,51],[683,51],[676,51],[621,51],[668,51],[691,51],[483,51],[337,51],[647,51],[1029,51],[1030,51],[339,51],[338,51],[687,51],[686,51],[914,51],[664,51],[1160,51],[1177,51],[928,51],[929,51],[1043,51],[1044,51],[697,51],[524,51],[649,51],[526,51],[565,51],[343,51],[345,51],[529,51],[527,51],[652,51],[701,51],[530,51],[532,51],[566,51],[650,51],[346,51],[893,51],[702,51],[347,51],[348,51],[349,51],[350,51],[351,51],[352,51],[353,51],[354,51],[1168,51],[355,51],[356,51],[357,51],[358,51],[485,51],[1018,51],[486,51],[487,51],[894,51],[488,51],[648,51],[568,51],[569,51],[489,51],[1163,51],[1164,51],[663,51],[655,51],[651,51],[703,51],[570,51],[490,51],[704,51],[517,51],[484,51],[518,51],[519,51],[1019,51],[895,51],[888,51],[520,51],[521,51],[705,51],[1115,51],[887,51],[1189,51],[1117,51],[940,51],[907,51],[878,51],[880,51],[708,51],[707,51],[711,51],[1190,51],[712,51],[881,51],[883,51],[1114,51],[884,51],[709,51],[885,51],[968,51],[886,51],[713,51],[710,51],[892,51],[899,51],[694,51],[906,51],[1017,51],[696,51],[656,51],[889,51],[890,51],[896,51],[891,51],[1116,51],[1118,51],[941,51],[942,51],[1020,51],[897,51],[908,51],[1165,51],[1166,51],[1167,51],[1169,51],[1170,51],[1171,51],[1173,51],[1172,51],[1174,51],[1176,51],[1175,51],[1040,51],[1098,51],[1156,51],[1099,51],[903,51],[958,51],[905,51],[902,51],[1157,51],[671,51],[672,51],[1128,51],[657,51],[1129,51],[935,51],[933,51],[1033,51],[1034,51],[1035,51],[934,51],[1130,51],[630,51],[1032,51],[1095,51],[1191,51],[623,51],[904,51],[692,51],[658,51],[642,51],[980,51],[514,51],[1045,51],[643,51],[515,51],[1127,51],[1000,51],[653,51],[900,51],[706,51],[1192,51],[297,51],[640,51],[336,51],[930,51],[636,51],[534,51],[632,51],[931,51],[492,51],[660,51],[944,51],[877,51],[670,51],[624,51],[493,51],[1193,51],[516,51],[682,51],[1194,51],[1022,51],[1119,51],[966,51],[1021,51],[536,51],[631,51],[659,51],[495,51],[1008,51],[1195,51],[548,51],[1016,51],[633,51],[695,51],[619,51],[898,51],[340,51],[667,51],[341,51],[342,51],[575,51],[901,51],[547,51],[294,51],[496,51],[511,51],[1186,51],[312,51],[572,51],[523,51],[525,51],[528,51],[531,51],[533,51],[567,51],[571,51],[522,51],[535,51],[296,51],[1159,51],[965,51],[293,51],[1161,51],[698,51],[909,51],[1104,51],[910,51],[311,51],[537,51],[947,51],[344,51],[497,51],[789,51],[1197,51],[1198,51],[512,51],[661,51],[654,51],[295,51],[574,51],[943,51],[1162,51],[932,51],[491,51],[618,51],[699,51],[620,51],[1196,51],[700,51],[939,51],[689,51],[617,51],[310,51],[513,51]],"emitSignatures":[293,294,295,296,297,310,311,312,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,483,484,485,486,487,488,489,490,491,492,493,495,496,497,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,547,548,565,566,567,568,569,570,571,572,574,575,617,618,619,620,621,622,623,624,625,626,628,629,630,631,632,633,634,635,636,637,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,789,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1043,1044,1045,1046,1095,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198]} \ No newline at end of file diff --git a/typescript/common/.tsbuildinfo b/typescript/common/.tsbuildinfo deleted file mode 100644 index a672a6f4c..000000000 --- a/typescript/common/.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"version":"7.0.0-dev.20260309.1","root":[[253,254],[257,300]],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2021.d.ts","lib.es2022.d.ts","lib.dom.d.ts","lib.dom.iterable.d.ts","lib.dom.asynciterable.d.ts","lib.webworker.importscripts.d.ts","lib.scripthost.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.es2021.promise.d.ts","lib.es2021.string.d.ts","lib.es2021.weakref.d.ts","lib.es2021.intl.d.ts","lib.es2022.array.d.ts","lib.es2022.error.d.ts","lib.es2022.intl.d.ts","lib.es2022.object.d.ts","lib.es2022.string.d.ts","lib.es2022.regexp.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","lib.es2022.full.d.ts","../node_modules/@types/node/compatibility/disposable.d.ts","../node_modules/@types/node/compatibility/indexable.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/compatibility/index.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/@types/node/web-globals/events.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.generated.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts","./node_modules/@types/tap/index.d.ts","../node_modules/prudence/js/error.d.ts","../node_modules/@types/range-parser/index.d.ts","../node_modules/@types/qs/index.d.ts","../node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/prudence/js/types.d.ts","../node_modules/prudence/js/validator.d.ts","../node_modules/prudence/js/static.d.ts","../node_modules/prudence/js/util.d.ts","../node_modules/prudence/js/assert.d.ts","../node_modules/prudence/js/main.d.ts","../node_modules/zod/v4/core/json-schema.d.cts","../node_modules/zod/v4/core/standard-schema.d.cts","../node_modules/zod/v4/core/registries.d.cts","../node_modules/zod/v4/core/to-json-schema.d.cts","../node_modules/zod/v4/core/util.d.cts","../node_modules/zod/v4/core/versions.d.cts","../node_modules/zod/v4/core/schemas.d.cts","../node_modules/zod/v4/core/checks.d.cts","../node_modules/zod/v4/core/errors.d.cts","../node_modules/zod/v4/core/core.d.cts","../node_modules/zod/v4/core/parse.d.cts","../node_modules/zod/v4/core/regexes.d.cts","../node_modules/zod/v4/locales/ar.d.cts","../node_modules/zod/v4/locales/az.d.cts","../node_modules/zod/v4/locales/be.d.cts","../node_modules/zod/v4/locales/bg.d.cts","../node_modules/zod/v4/locales/ca.d.cts","../node_modules/zod/v4/locales/cs.d.cts","../node_modules/zod/v4/locales/da.d.cts","../node_modules/zod/v4/locales/de.d.cts","../node_modules/zod/v4/locales/en.d.cts","../node_modules/zod/v4/locales/eo.d.cts","../node_modules/zod/v4/locales/es.d.cts","../node_modules/zod/v4/locales/fa.d.cts","../node_modules/zod/v4/locales/fi.d.cts","../node_modules/zod/v4/locales/fr.d.cts","../node_modules/zod/v4/locales/fr-CA.d.cts","../node_modules/zod/v4/locales/he.d.cts","../node_modules/zod/v4/locales/hu.d.cts","../node_modules/zod/v4/locales/hy.d.cts","../node_modules/zod/v4/locales/id.d.cts","../node_modules/zod/v4/locales/is.d.cts","../node_modules/zod/v4/locales/it.d.cts","../node_modules/zod/v4/locales/ja.d.cts","../node_modules/zod/v4/locales/ka.d.cts","../node_modules/zod/v4/locales/kh.d.cts","../node_modules/zod/v4/locales/km.d.cts","../node_modules/zod/v4/locales/ko.d.cts","../node_modules/zod/v4/locales/lt.d.cts","../node_modules/zod/v4/locales/mk.d.cts","../node_modules/zod/v4/locales/ms.d.cts","../node_modules/zod/v4/locales/nl.d.cts","../node_modules/zod/v4/locales/no.d.cts","../node_modules/zod/v4/locales/ota.d.cts","../node_modules/zod/v4/locales/ps.d.cts","../node_modules/zod/v4/locales/pl.d.cts","../node_modules/zod/v4/locales/pt.d.cts","../node_modules/zod/v4/locales/ru.d.cts","../node_modules/zod/v4/locales/sl.d.cts","../node_modules/zod/v4/locales/sv.d.cts","../node_modules/zod/v4/locales/ta.d.cts","../node_modules/zod/v4/locales/th.d.cts","../node_modules/zod/v4/locales/tr.d.cts","../node_modules/zod/v4/locales/ua.d.cts","../node_modules/zod/v4/locales/uk.d.cts","../node_modules/zod/v4/locales/ur.d.cts","../node_modules/zod/v4/locales/uz.d.cts","../node_modules/zod/v4/locales/vi.d.cts","../node_modules/zod/v4/locales/zh-CN.d.cts","../node_modules/zod/v4/locales/zh-TW.d.cts","../node_modules/zod/v4/locales/yo.d.cts","../node_modules/zod/v4/locales/index.d.cts","../node_modules/zod/v4/core/doc.d.cts","../node_modules/zod/v4/core/api.d.cts","../node_modules/zod/v4/core/json-schema-processors.d.cts","../node_modules/zod/v4/core/json-schema-generator.d.cts","../node_modules/zod/v4/core/index.d.cts","../node_modules/zod/v4/classic/errors.d.cts","../node_modules/zod/v4/classic/parse.d.cts","../node_modules/zod/v4/classic/schemas.d.cts","../node_modules/zod/v4/classic/checks.d.cts","../node_modules/zod/v4/classic/compat.d.cts","../node_modules/zod/v4/classic/from-json-schema.d.cts","../node_modules/zod/v4/classic/iso.d.cts","../node_modules/zod/v4/classic/coerce.d.cts","../node_modules/zod/v4/classic/external.d.cts","../node_modules/zod/index.d.cts","./src/types/import-types.ts","./src/types/api.ts","../node_modules/@types/bson/index.d.ts","../node_modules/@types/mongodb/index.d.ts","./src/types/notifications.ts","./src/types/documents.ts","./src/types/metrics.ts","./src/types/utils.ts","./src/types/batch-manual.ts","./src/types.ts","./src/types/game-config-utils.ts","./src/types/internals.ts","./src/types/game-config.ts","./src/constants/grade-boundaries.ts","./src/utils/util.ts","./src/config/config-utils.ts","./src/config/game-support/_common.ts","./src/config/game-support/arcaea.ts","./src/config/game-support/bms.ts","./src/config/game-support/chunithm.ts","./src/config/game-support/ddr.ts","./src/config/game-support/gitadora.ts","./src/config/game-support/iidx.ts","./src/config/game-support/itg.ts","./src/config/game-support/jubeat.ts","./src/config/game-support/maimai.ts","./src/config/game-support/maimai-dx.ts","./src/config/game-support/museca.ts","./src/config/game-support/ongeki.ts","./src/config/game-support/pms.ts","./src/config/game-support/popn.ts","./src/config/game-support/sdvx.ts","./src/config/game-support/usc.ts","./src/config/game-support/wacca.ts","./src/config/config.ts","./src/constants/colour-set.ts","./src/constants/bms-tables.ts","./src/constants/game.ts","./src/constants/import-types.ts","./src/constants/permissions.ts","./src/lib/schemas.ts","./src/seeds/types.ts","./src/webhooks.ts","./src/index.ts","./src/index.test.ts","./src/config/config.test.ts","./src/constants/bms-tables.test.ts","./src/utils/util.test.ts","../node_modules/@types/aws-lambda/common/api-gateway.d.ts","../node_modules/@types/aws-lambda/common/cloudfront.d.ts","../node_modules/@types/aws-lambda/handler.d.ts","../node_modules/@types/aws-lambda/trigger/alb.d.ts","../node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts","../node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts","../node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts","../node_modules/@types/aws-lambda/trigger/autoscaling.d.ts","../node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts","../node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts","../node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts","../node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts","../node_modules/@types/aws-lambda/trigger/cloudwatch-alarm.d.ts","../node_modules/@types/aws-lambda/trigger/eventbridge.d.ts","../node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts","../node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts","../node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts","../node_modules/@types/aws-lambda/trigger/codecommit.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-sms-sender.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/inbound-federation.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v2.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v3.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts","../node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts","../node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts","../node_modules/@types/aws-lambda/trigger/guard-duty-event-notification.d.ts","../node_modules/@types/aws-lambda/trigger/iot.d.ts","../node_modules/@types/aws-lambda/trigger/iot-authorizer.d.ts","../node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts","../node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts","../node_modules/@types/aws-lambda/trigger/lambda-function-url.d.ts","../node_modules/@types/aws-lambda/trigger/lex.d.ts","../node_modules/@types/aws-lambda/trigger/lex-v2.d.ts","../node_modules/@types/aws-lambda/trigger/amplify-resolver.d.ts","../node_modules/@types/aws-lambda/trigger/msk.d.ts","../node_modules/@types/aws-lambda/trigger/s3.d.ts","../node_modules/@types/aws-lambda/trigger/s3-batch.d.ts","../node_modules/@types/aws-lambda/trigger/s3-event-notification.d.ts","../node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts","../node_modules/@types/aws-lambda/trigger/self-managed-kafka.d.ts","../node_modules/@types/aws-lambda/trigger/ses.d.ts","../node_modules/@types/aws-lambda/trigger/sns.d.ts","../node_modules/@types/aws-lambda/trigger/sqs.d.ts","../node_modules/@types/aws-lambda/trigger/transfer-family-authorizer.d.ts","../node_modules/@types/aws-lambda/index.d.ts","../node_modules/@types/bcryptjs/index.d.ts","../node_modules/@types/connect/index.d.ts","../node_modules/@types/body-parser/index.d.ts","../node_modules/@types/bunyan/index.d.ts","../node_modules/@types/http-errors/index.d.ts","../node_modules/@types/serve-static/index.d.ts","../node_modules/@types/express/index.d.ts","../node_modules/@types/express-session/index.d.ts","../node_modules/@types/redis/index.d.ts","../node_modules/@types/connect-redis/index.d.ts","../node_modules/@types/cookiejar/index.d.ts","../node_modules/@types/ms/index.d.ts","../node_modules/@types/debug/index.d.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../node_modules/@types/eslint/index.d.ts","../node_modules/@eslint/core/dist/cjs/types.d.cts","../node_modules/eslint/lib/types/use-at-your-own-risk.d.ts","../node_modules/eslint/lib/types/index.d.ts","../node_modules/@types/eslint__js/index.d.ts","../node_modules/@types/express-rate-limit/index.d.ts","../node_modules/@types/glob/index.d.ts","../node_modules/@types/google-protobuf/index.d.ts","../node_modules/@types/unist/index.d.ts","../node_modules/@types/hast/index.d.ts","../node_modules/@types/history/DOMUtils.d.ts","../node_modules/@types/history/createBrowserHistory.d.ts","../node_modules/@types/history/createHashHistory.d.ts","../node_modules/@types/history/createMemoryHistory.d.ts","../node_modules/@types/history/LocationUtils.d.ts","../node_modules/@types/history/PathUtils.d.ts","../node_modules/@types/history/index.d.ts","../node_modules/@types/humanize-duration/index.d.ts","../node_modules/@types/lodash/common/common.d.ts","../node_modules/@types/lodash/common/array.d.ts","../node_modules/@types/lodash/common/collection.d.ts","../node_modules/@types/lodash/common/date.d.ts","../node_modules/@types/lodash/common/function.d.ts","../node_modules/@types/lodash/common/lang.d.ts","../node_modules/@types/lodash/common/math.d.ts","../node_modules/@types/lodash/common/number.d.ts","../node_modules/@types/lodash/common/object.d.ts","../node_modules/@types/lodash/common/seq.d.ts","../node_modules/@types/lodash/common/string.d.ts","../node_modules/@types/lodash/common/util.d.ts","../node_modules/@types/lodash/index.d.ts","../node_modules/@types/lodash.get/index.d.ts","../node_modules/@types/luxon/src/zone.d.ts","../node_modules/@types/luxon/src/misc.d.ts","../node_modules/@types/luxon/src/duration.d.ts","../node_modules/@types/luxon/src/interval.d.ts","../node_modules/@types/luxon/src/datetime.d.ts","../node_modules/@types/luxon/src/info.d.ts","../node_modules/@types/luxon/src/settings.d.ts","../node_modules/@types/luxon/src/luxon.d.ts","../node_modules/@types/luxon/index.d.ts","../node_modules/@types/mdast/index.d.ts","../node_modules/@types/mdurl/encode.d.ts","../node_modules/@types/mdurl/decode.d.ts","../node_modules/@types/mdurl/parse.d.ts","../node_modules/@types/mdurl/format.d.ts","../node_modules/@types/mdurl/index.d.ts","../node_modules/@types/methods/index.d.ts","../node_modules/@types/minimist/index.d.ts","../node_modules/@types/mkdirp/index.d.ts","../node_modules/@types/multer/index.d.ts","../node_modules/@types/natural-compare/index.d.ts","../node_modules/form-data/index.d.ts","../node_modules/@types/node-fetch/externals.d.ts","../node_modules/@types/node-fetch/index.d.ts","../node_modules/@types/nodemailer/lib/dkim/index.d.ts","../node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts","../node_modules/@types/nodemailer/lib/xoauth2/index.d.ts","../node_modules/@types/nodemailer/lib/mailer/index.d.ts","../node_modules/@types/nodemailer/lib/mime-node/index.d.ts","../node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts","../node_modules/@types/nodemailer/lib/shared/index.d.ts","../node_modules/@types/nodemailer/lib/json-transport/index.d.ts","../node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts","../node_modules/@types/nodemailer/lib/ses-transport/index.d.ts","../node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts","../node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts","../node_modules/@types/nodemailer/lib/stream-transport/index.d.ts","../node_modules/@types/nodemailer/index.d.ts","../node_modules/@types/normalize-package-data/index.d.ts","../node_modules/@types/parse-json/index.d.ts","../node_modules/pg-types/index.d.ts","../node_modules/pg-protocol/dist/messages.d.ts","../node_modules/pg-protocol/dist/serializer.d.ts","../node_modules/pg-protocol/dist/parser.d.ts","../node_modules/pg-protocol/dist/index.d.ts","../node_modules/@types/pg/lib/type-overrides.d.ts","../node_modules/@types/pg/index.d.ts","../node_modules/@types/prop-types/index.d.ts","../node_modules/@types/rate-limit-redis/node_modules/@types/express-rate-limit/index.d.ts","../node_modules/@types/rate-limit-redis/index.d.ts","../node_modules/@types/react/global.d.ts","../node_modules/csstype/index.d.ts","../node_modules/@types/react/index.d.ts","../node_modules/@types/react-dom/index.d.ts","../node_modules/@types/react-google-recaptcha/index.d.ts","../node_modules/@types/react-router/index.d.ts","../node_modules/@types/react-router-bootstrap/lib/LinkContainer.d.ts","../node_modules/@types/react-router-bootstrap/index.d.ts","../node_modules/@types/react-router-dom/index.d.ts","../node_modules/@types/react-transition-group/config.d.ts","../node_modules/@types/react-transition-group/Transition.d.ts","../node_modules/@types/react-transition-group/CSSTransition.d.ts","../node_modules/@types/react-transition-group/SwitchTransition.d.ts","../node_modules/@types/react-transition-group/TransitionGroup.d.ts","../node_modules/@types/react-transition-group/index.d.ts","../node_modules/@types/rimraf/index.d.ts","../node_modules/@types/safe-json-stringify/index.d.ts","../node_modules/@types/scheduler/index.d.ts","../node_modules/@types/semver/functions/inc.d.ts","../node_modules/@types/semver/classes/semver.d.ts","../node_modules/@types/semver/functions/parse.d.ts","../node_modules/@types/semver/functions/valid.d.ts","../node_modules/@types/semver/functions/clean.d.ts","../node_modules/@types/semver/functions/diff.d.ts","../node_modules/@types/semver/functions/major.d.ts","../node_modules/@types/semver/functions/minor.d.ts","../node_modules/@types/semver/functions/patch.d.ts","../node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/@types/semver/functions/compare.d.ts","../node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/@types/semver/functions/sort.d.ts","../node_modules/@types/semver/functions/rsort.d.ts","../node_modules/@types/semver/functions/gt.d.ts","../node_modules/@types/semver/functions/lt.d.ts","../node_modules/@types/semver/functions/eq.d.ts","../node_modules/@types/semver/functions/neq.d.ts","../node_modules/@types/semver/functions/gte.d.ts","../node_modules/@types/semver/functions/lte.d.ts","../node_modules/@types/semver/functions/cmp.d.ts","../node_modules/@types/semver/functions/coerce.d.ts","../node_modules/@types/semver/classes/comparator.d.ts","../node_modules/@types/semver/classes/range.d.ts","../node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/@types/semver/ranges/valid.d.ts","../node_modules/@types/semver/ranges/outside.d.ts","../node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/@types/semver/ranges/subset.d.ts","../node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/@types/semver/index.d.ts","../node_modules/@types/superagent/lib/agent-base.d.ts","../node_modules/@types/superagent/lib/node/response.d.ts","../node_modules/@types/superagent/types.d.ts","../node_modules/@types/superagent/lib/node/agent.d.ts","../node_modules/@types/superagent/lib/request-base.d.ts","../node_modules/@types/superagent/node_modules/form-data/index.d.ts","../node_modules/@types/superagent/lib/node/http2wrapper.d.ts","../node_modules/@types/superagent/lib/node/index.d.ts","../node_modules/@types/superagent/index.d.ts","../node_modules/@types/supertest/index.d.ts","../node_modules/@types/triple-beam/index.d.ts","../node_modules/@types/warning/index.d.ts","../node_modules/@types/ws/index.d.ts","../node_modules/@types/yoga-layout/index.d.ts"],"fileInfos":[{"version":"a1aa1a5e065d48ef5c7bb99e38412f96","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d4306fb2e47f74835e8674ffac07d76f","impliedNodeFormat":99},{"version":"e437c5c1302869326c3bb93da85bbbcf","impliedNodeFormat":99},{"version":"e4324975a566567b21d350615f1fc6ac","impliedNodeFormat":99},{"version":"333b1b9a2a9ac3b8497dba5c63b5ba50","impliedNodeFormat":99},{"version":"6cffacd662b6eb5fa7a36aa2ea366bfa","impliedNodeFormat":99},{"version":"b4c34f9c23304dbef2d23698637ed638","impliedNodeFormat":99},{"version":"e5cb86a5fc491796ecd1d2dd348d208f","impliedNodeFormat":99},{"version":"feb6c6fb19cdb246a5d8acb36a6901c7","impliedNodeFormat":99},{"version":"aae8996e8b5684814785a42cbbefcd79","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"abad6dd56cc8caf095c165df8124d237","impliedNodeFormat":99},{"version":"abad6dd56cc8caf095c165df8124d237","impliedNodeFormat":99},{"version":"2a9941db0809c9ad0e8837ed629b1dcc","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d051b93324f36bcc68d152a5ca0988cd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"01ac052ec4a79e87229f90466a9645f8","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"edba5df642941aa062a62f6328c6df3d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"bb3a710cbcda0533bb127712927cbe37","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7a42de379b489e8f7b647455bebfc576","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"692bcd75364db0f65d428801c7884466","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4ef72aa378127e7b7abba915b0110b1e","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3ec74c6a7d4463f0254db3a74cf75646","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"84c2bdfa470d075526cce6322d81b0b6","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0b3844c2b8c73e4e1ab91431411cad11","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4fc71cf4a15b8d99675a31df77f26e07","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d1b49564ddaeca3df5b6dbae925d2242","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6a25be566d60ccfc2d6e8b7bfdeefa83","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"8a20e27646985dfd58c57ca6566553dd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"9969f02ad3cdcbf4f709405cda44167f","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"9c9be4792a7a4f42c15ae7360bf28779","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0eb5b8b97bde45c8fde5cd07c33f6631","impliedNodeFormat":99},{"version":"90630acdc4134173bcf216f187bd3010","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"913b52a39743d1c11984e4e124b1f3a8","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2514e9a2749c0fc18d2f478e9e1e641e","affectsGlobalScope":true,"impliedNodeFormat":1},"fe51d7a9bcdbcce1e65bbcf39b212298",{"version":"849a1873c4e917b0887368c1be897faa","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"c46c3108bde06d3b1fc6f802eb09eeeb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1332add604574cf529fb33b23304b296","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9af0a7e3ef1c42cd066b9f8d365cc1ba","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9eca652586205dc5b07f9ba57b1c8500","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ec5f75939754ce94652189ec7d0d3058","affectsGlobalScope":true,"impliedNodeFormat":1},"e2f0114efc512fd95bdc12c81d5e8d6a","628b774b54637325e286752c79c12432","bb1f9e3091b88e9d0e93b7198c736af3","514fd35e5eb35bb2e5cbb908af0a0aa2","ed57ae88565308729f2327f26d684976","dcd932d6b0038f2e250e30dc10125b22","9508c917bd7e458745e222a82dd24ef0","fabf86f455f96b90538cc26320ab2765","14550b4cd9f433e0addd8b6d67614d23","cf0ac6aebc25cb780674653aaeee688e","35fef7bac8048f583e4ce6eaa0c2a4c0","6752dc653fc7a333027249fd851fdb62","b9ad7e689b46dfba362c1bf174e69018","8b0a2930dfabdf27c69c6bb1eeabcdc8","4513b1ed15523d247040689f37fa9db2","5c0c499eed773a750903d9497beafacd","2377da227d1bac82ff7b3f2081ddf8d3","beef985b474fefeb80d27fb2c8778371","c79fc9d9f09ae598a374ae7c0b5284a4","f2caa3cebb1e6be855519004830a6be0","8ebc9f2a77c900e710801214c5cb994c","ec617a0e0577dd6a3210c3b067ecb325","1db5d06e485bd82d6d5f6e36925a8714","24b864518967840216c779b5e5f00975","8719cd8047700bfb6046798390053823","f2840afb502c94db92dab0fb8d27812f","a7e7d08b372210c203745d3eac61a411","531183cc80535e0e94226d720e5eb038","f627eb958ca52c85e42f04dce4661f86","9a43fc665bce9012a3d5fe1b574ff4dc","13f4b4da6546a34719fd6bde15fb63dd","a589216508844bfc00e62fc2d97fda45","865aea1c3209e31b076cb6fe780e769e","12e64aaf26af0f5c8f1b263dd66e3feb","928971ebbcdf5b093ef37669b33bddf6","b744265d8ad12b7d4d5c5dc35d18d44e","eff32168b8348b822afeed9cbf61afa7","9aafd1f29b4d8861c1c6c34bf83c0721",{"version":"a127795c4dad633990c87aa0b86831e5","affectsGlobalScope":true,"impliedNodeFormat":1},"4ef82d390af85e719a46d566e229dd83","7deced3ef46e082f97d49bb71622526a","fa7acb320bbf7da8f76e431437143034",{"version":"ee57e9bfec6167b488ced231a7bf233d","affectsGlobalScope":true,"impliedNodeFormat":1},"7aa99080b86233d5b21416907d7a75a6","7d6a8df1becce5c270da2093e7835920",{"version":"c37fea1584ced70492ff5748ed570abd","affectsGlobalScope":true,"impliedNodeFormat":1},"b2b472cd0bf0f8d5f022e00ca1c401f4",{"version":"e22c8fb0fc65df14299c6c94cf729b3c","affectsGlobalScope":true,"impliedNodeFormat":1},"a84efb87b57f78ea0b0577edaacd8b33","814e0c2cc2a92531b6dc5d2a1767a6e1","79ac55b2d493df83277d681e4d64a992","7ab3b7243211fa08af307609be231d6c","7fd0f028e135bdf15ff757781a2f4ba9",{"version":"cab5b406d3defff17c931e41fa98aeb1","affectsGlobalScope":true,"impliedNodeFormat":1},"aa7dc1db3d208fb91418794a18539d4c","e9b8fc3c9291fc5701e219c0407e973d","b8f5d7bb61117f48a99b0cecaa75d186","687b6f8f042393a27ce6c8fd32972129","1d3b57f542db6054f952f8076b3c6a3a","4e0ba29e69c1176d4b909ad8a85a2695",{"version":"e5d25a206975fb43b72d246ed86fd7fe","affectsGlobalScope":true,"impliedNodeFormat":1},"88822a7d78686871bb9c15cedd3f45f2","86308ea691fd06825dd9a3ce0f1e901a","44782881f424302151e0de8fdaa39575",{"version":"f0ef68e9c53d126a7b3bfc1ae9f2c7c4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"71259a408a4178e5f0795188b4d802f1","affectsGlobalScope":true,"impliedNodeFormat":1},"eb80d821e5e931dcccee2697f3e249e2","961969874f5ee12ed3429d3d0c82de02","9a62058bc2d476e807cc6594eed72adb","40cbc4bb3b225b03c54255154dada07d","6534825a8bda3eeecde9bca9e3a99712","09a582ab2a73806ab5887ea413b3d55a","a0592261111f47230eb35ee52c12e635","c8206d568b54e5ea06131963eecd576a","15878f4f50c2e562c0768eb735c2aed5",{"version":"b636ba40489f78f02a4b71322994828a","affectsGlobalScope":true,"impliedNodeFormat":1},"7b844f3801adf7e09ea25ec5f39f9a86","46c937d243665015f13587ac0db55909",{"version":"1f29cf27395029939dd41fce4f0c5653","affectsGlobalScope":true,"impliedNodeFormat":1},"f026c594d60114f10583261f6499df38","1ac553606580aeec204cce24c38b2e3f","3c29bf7066a67e7151f563fc1c4e56cb","00d49834780046c2d6a7da3e50d83cca",{"version":"377c78771ee061f2b4e59d5eb5a28782","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7293552290431bff8ef5f13e6f7fcbfc","affectsGlobalScope":true,"impliedNodeFormat":1},"9453ee3aca6a51ae747057fbc6388cf2","6c491c1508bd3e1df0f45f38b07243c2","1f99b8445612afcfaae0f8591d8d18ac",{"version":"bbd4e0ea8a847a4b60ba7d5741985c9d","affectsGlobalScope":true,"impliedNodeFormat":1},"f57ef54941c62bf28f3beafb86025735","7b6c16d46b33570aaef9d0fdc4f02f14",{"version":"d6d171746f93983a3326fdf57c5916a2","affectsGlobalScope":true,"impliedNodeFormat":1},"16a3bf4e99e3275960702bbfcbbfa9d8","cd5c183c2bad150213a0cccaafe937e2","d6ea403bc9232d6fe7e7622a88f42faf",{"version":"7fa578df98e59f9f70329e3e06ae7784","affectsGlobalScope":true,"impliedNodeFormat":1},"2a85fc47377fe0593e11df0805c37b24","0bf60b6ce895c720124a6b0aba87990f","f5da2e5790c2d5acd98acdce0b2c6a60","0997be57498f2b766cc3561c7df58f06","4f8a359db312d088f12df2b4333c70b2","c5bea81fda0ed705abe31dfb992bebbf","5f3c015bce4302b247acedb9ec20e302","a9fe29dcdd4288cacf574947747a4572","daada721cfdc43aa8e7c2e2d14d760de","c4d7f2ab9358166b1815281a9e767232","2af86ade36e4051944f46da0fd1df525","90eb781c9a8145090ce17290f0744bb6","a3ddf6412484d665d76145ba7fa319a8","b53e5eafe089103ad7be4f243fb517d4","344aa18a1a1f48b6d51fa564e2910864","ffd8c3d2e39447925561777d1ebcdc02","2b76267afeb2e83dff758e3fba2faa8a","662eae47724ed2ca873fb608034d0645","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","360c84ef5634445ed4b1111f041b6212","a21f1b172546b6a64cc7ddea394b54ea","937e86ab76f06c8dbd613be6555c03b6","8bdf05c98551836db89f23d60d176f56","5b3f18777c97e7ed444a39661c4462ba","cd3b63580b271a0e93649c0d92a1b098","1cc59f020b9d62d875bdb28a6e2f745b","a06c5977df8ff3f289f16a7505c8d539","652a1f711ddcd6149df9fc04c2d77ec7","f04158c558df8c51d46a1fb44c832c1c","d1ab6402ad42100de1cf3f5d15aa9d27","96b06af537c71de0a80e9ed880958afd","dec40354e62d8ca81f5996c1760bc6da","a9356de7c324c6f49c15587032b1f65f","9db07004a5d271a5a4c3f499ed8a033f","ec7a3f5e189221b1a18bed55a592c89d",{"version":"d3c2bfca84b932a6df60b7f83582bd56","signature":"a10eab55270c27c6420f0aaebcb0e4d0","impliedNodeFormat":1},{"version":"074f8411540e2eb5e4600f8da5fe5b53","signature":"7e58f15b70f2d5b5a7e8cb98a02f3d3c","impliedNodeFormat":1},"29c297b3336e6ee3c2b9aa7c7dbdf00d","07841866bdfb5333a0eeb445e8052006",{"version":"b4d7d343839c174dde329f6edcb07aa6","signature":"723e1a8fcc811c2bb63589b56224ccda","impliedNodeFormat":1},{"version":"3e4c96dcbe92be943c2013dda919585c","signature":"e809a8dbff06e8e6276f559f12ab0969","impliedNodeFormat":1},{"version":"f6d67c44b3b1f6e343ae998bef912b29","signature":"b22b61afc72de214a4ad3d9fb49ae584","impliedNodeFormat":1},{"version":"a56aa7f58bb167976802b81be16a149d","signature":"976e5a411658c3f3d932e58c7009dd18","impliedNodeFormat":1},{"version":"b5ebb4ff299a3ab5c268599c0299a0e6","signature":"fa85f9509b6b8fa7582cc053dc700f89","impliedNodeFormat":1},{"version":"387b654b041a621bcf572c6873b5a49d","signature":"3dd8f16df6ab331acc8e80ddea0e0117","impliedNodeFormat":1},{"version":"de2bbec762bdc660f55c75e8504cacbe","signature":"99a82f62dda21efe5d337803128218c2","impliedNodeFormat":1},{"version":"b30b8ad7b8755c456fa67d9a380edd56","signature":"8620b817abbc1476d4f0fd60e0000a78","impliedNodeFormat":1},{"version":"033af9dc29a4d3c83b80936a719a3573","signature":"2c1ee76552ffe51e0bc532bf48ecb146","impliedNodeFormat":1},{"version":"6fb0bbf6b9c4d536a6c69ddd4ca7f4bb","signature":"cd3b449b66b72c406de836cdcafa869d","impliedNodeFormat":1},{"version":"82d2c3635c09e291945e4e758c999baf","signature":"c767483159961f16168e93e3905d325c","impliedNodeFormat":1},{"version":"59649ba5ed1370766dafcf0695e36ebc","signature":"a442ebb1b6edfa29639d4a24f5d1c396","impliedNodeFormat":1},{"version":"77efa5f7fd7b83ba42d427e41979d9d2","signature":"58f96ee916ccd023a371aa328efd9b45","impliedNodeFormat":1},{"version":"a91f09abb4725aff7daf7ed5161d54b4","signature":"15f843b9cda20cf235dbf7207f0d798c","impliedNodeFormat":1},{"version":"01cee35dbe4ff380203ffc772c9e13fd","signature":"6110d01cc98ffbae1c4f1c86165bf7b7","impliedNodeFormat":1},{"version":"c3d0248e4af479bb5082e38edc4db4e7","signature":"2cc7cf3c4cd6ba3a8f0ee673bc543866","impliedNodeFormat":1},{"version":"ffb4fa84735eaeaa39c21764e6465f15","signature":"71ca4a40be789d4c817ad392257d568d","impliedNodeFormat":1},{"version":"47f45655f3692cbd96a728805d23da1b","signature":"3e0fd026d855113f4a9914a129137244","impliedNodeFormat":1},{"version":"eec0ef7a7139c24f31858fb8cb7478bc","signature":"4297a40a885890f487de6bbec4d20978","impliedNodeFormat":1},{"version":"fc14986828b3406dc756d26520f19fef","signature":"cde470127e0a51cedcc0bc545793445b","impliedNodeFormat":1},{"version":"f5a49a39ec0b62af8ea99361cd507325","signature":"d8c4659c35b20fef7a10579ac5cb7b7e","impliedNodeFormat":1},{"version":"36a41b3838910ccb4eb868729312f401","signature":"09326512f3a161b2ffb5adac7a0f1a9c","impliedNodeFormat":1},{"version":"f6316e679a89b6ee4062769ec5ffe5ec","signature":"af7f963ed220d2425c817e1a460216be","impliedNodeFormat":1},{"version":"626e7d2f54be57f137e1672d8d647b06","signature":"9a1c8bb0e3eb45e62ca8cd99dd4ae50c","impliedNodeFormat":1},{"version":"31185e75e830d140f1dbf5de7672cbe9","signature":"f06ae13fc946e0c89321e9b485256068","impliedNodeFormat":1},{"version":"64fd4d1ee1ba39507b56e15276e0cac5","signature":"6041c009ce39928b5a079ec477c50b62","impliedNodeFormat":1},{"version":"a6396aff71fa680a2dc12d8852585c5c","signature":"dd3c5b1d7d0649dfdeafbd607adb7ad8","impliedNodeFormat":1},{"version":"6ae55472da6911fec2507b0c0a8c8d8d","signature":"d60dd30ef0d1debeb7ed2816f054b50f","impliedNodeFormat":1},{"version":"97de8975b5861b4f969887eef425ab1e","signature":"c499aabf1e0710b09d5a228f36794f22","impliedNodeFormat":1},{"version":"623ad4596e5cd735b63b9bc0264fafb7","signature":"7091c96cd79285a771f45940d241744e","impliedNodeFormat":1},{"version":"dfb5d28d139a43b2cd6f8b0cf8a74b59","signature":"895af6635c268be2dfdb0dda4c547491","impliedNodeFormat":1},{"version":"9d74400b7cdd3f4e7be86ba196c10024","signature":"ebd0758225677c1d0cd22765d76cb6ca","impliedNodeFormat":1},{"version":"38e61d3f1d85af6e3945349ff83bf425","signature":"d84b797323d32ef97c917e4c8108430a","impliedNodeFormat":1},{"version":"7a84e263f105ddc35a75e23b41969005","signature":"9ac82f621744cf1dea617a5bb8fb0995","impliedNodeFormat":1},{"version":"1ece30b47c088a1a8624c296d4deaea9","signature":"75952463f3f308a1338524e28996ac45","impliedNodeFormat":1},{"version":"65b839a8ea4c1e6e405a0626f8cf2d90","signature":"7640a075842dbf3c5e764fa93975c452","impliedNodeFormat":1},{"version":"45add743ae14a3a05980464b41158a3c","signature":"b5ee8457484f66e21c391a5b58b91f1f","impliedNodeFormat":1},{"version":"4056c0b1948bb93a05ce859a572ca6b1","signature":"db04c1c07fa3d69a2353fdb038314fd2","impliedNodeFormat":1},{"version":"2093e932421086c088582dacfdcec0c5","signature":"e469109881c85d3121655ded4025b974","impliedNodeFormat":1},{"version":"dfdc1b5bdbb060e73df8e670d5222411","signature":"6400bdad5769a71998d5b6a82edf0181","impliedNodeFormat":1},{"version":"087d0ab06139d916cbf0919ef45cac3f","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"2c3171b471579e2d5f97ac160e54d418","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"47ea75c440b52c00e444f3d458ee452c","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"54591190213687cccccc9f23018ca81a","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"e16ee2cba8fccd4888dda67d8313af8f","09236d421d18c90c9cf2b1a62df88e93",{"version":"8c9f31c32a5525bd747cf424bc17f778","affectsGlobalScope":true,"impliedNodeFormat":1},"9da7817000afeeeea3222d0ff2a686c6","2cfba9984aed78da242b0a21e3f38a2a","e93eb137b979617ec06b22a362976ce6","c0ec98811b4559ddda1f61ba53e1d2d4","9de6d4b67fc1b39b6dda81b6f93579dd","f150286488a8ca9e5402dd15c8957340","31ce40f173f27100522a719437fcfd9c","01253493709f6c42fb5b70e764ef90cc","7aa0667e23415be0a645dfcf2b47c82e","4efac62cab7941afad9cadf1d94be7f3","e0f557cdd6695b87547a877b69ca38b9","70ad1c3b71a769b2a1a584c774788db7","642f6536f2a6b5bdbafd4e25f407d2c7","1db38078e8dbd37f16947069fd0093c6","fe812c7b8986cf1c50ce352e9e3f8c89","a9b6a70f9e138db0cacf973b904f9ce8","138603e1e6787901dc8761a2803a6310","8cdf819bc802d165541b23781a845948","23133f69c05e8d7c456e1a9d68c1fffc","89bcd59d3d48cb11935ff1cfa15070f3","6502191f732e6a899b71d18f2cb7a669","83a6c12fe0d568638a6e8db98c137c49","844210e48517107ab0fa5a7e40edbba4","3c2f892a82b351392b98c312e067fa15","cc262de9275b1c5fa529688f33ceae7f","7acde96d9deadd2884a93ae4bba972da","767f37418b3ec86d2e6fe3e3219c64f7","b7f217cb2b3f9082360e5684f55f8cc1","bffc4e97a99bff31a3686a5c688581f0","8ce2d57bab6ef91e5eddacbf7d7f0181","0331baa726704b161af0efe64f980e41","3e47b1dab9282fd8fd4922d3f0655314","0e52a45f8d24b10b300a582bbc389238","38586984d045a69166f13015d71501b2","256153f676e34a933916962fe97f4749","da107fb4df9e8676ccef0f7b37ea53ce","0991cffb042883e18ab62d233b31d3aa","428c7c416f9ef4b684745ecd18800cdf","2732b197815df32818230d9e433fe682","6f29a9c10351aafe84986db22f67df8a","b41b7744429d74640dd2a1cb87b3199e","09182295d359b15a9facd08f8fd51966","6c7c40d6161213505b0b2a0991aa708b","c61dcede83e20904c8751b2d08beb296","6a1ef55dc603c92ba031491cf46c78a6","6d6c5e4f921002d2a37f4e7750513f8c","d9d2d04eb9d7c7a35ea9249d96ab66e9","c92e37bef68312b0809b209dd35bc2ee","46d5eb0382f3ca27ce2af109ac132709","1f9ff9d0706bcf42c48445798e0aa736","18c29f2c9116baa565528501a8d7a367","0fba992bccaca17b160c8f20986c8b30","a4e850cd58d40f96cca03c145e523ea7","1f18f87f73dd7802d6ac6d69f9791f58","cd88c0466b9ef15bdbc49bfe4acd11d5","7842952684833f73af52e689186b8804","04092ab5516d57c53e4b6d4385217184","1372fea4f73fc1f594cf3ffa58c56484","c8693ee5630c780142bb6a834f71cb9d","42a13551ef0ce9e68aef58b6a4ac31fa","fbb1086d78fad2e81eefa859d53b6ffd","fa614d3a843db2f4f4f804155cf537a6","db4704d82c740ed3bd067c9bae72d092","f8059a9ddf1aeefd103fce9c853541b9","f100181a3e9ff7f5b23eed47dd66a1de","c4437a75ed05801f47848d00286b7f3e",{"version":"5a297566b9863f5dfd9c8d4850ed8af4","affectsGlobalScope":true,"impliedNodeFormat":1},"81ffe24ac8999f2e25fff992831b7324","02575b4ec4091570b193cc6ca8e6821e","fdf29cba6a2cc2f1f28f95f337ae66a4","58e9b716b50fdc8506289bd37edd9a55","8f4109203208f26263f439ab576f3820","4501167a04f84205017251407e6ed43b","295c0cb8891e7424d3a27dc56dc1b430","e1d3f27d8738af5fa721eed17a4e4d69","a6965f10e458de7e18e283070aca6c05","9d9ae7679668928510f3c7d0f678969c","1c17807e0ad03afd162d77cb40ad5309","7749a56d15eb26058bcfef426d94139b","9b7ad984483d8ffb801e212338bc8f2c",{"version":"1bd9c33fa4dc9f5db21e3499cce058e6","affectsGlobalScope":true,"impliedNodeFormat":1},"112adfdfe0121f630c2187e89145ee2c","da3da10502293a0e1bf580ef6c26486c","f9dccda118924be25899c703ae07bf83","9befaa4adb42627db765639b7b5ba193",{"version":"8c6ffdee98d8e8323825d4ec4d2c6ee7","affectsGlobalScope":true,"impliedNodeFormat":1},"3ef6bce1299faf411f33ab1bae59a884","086accdf702b13dc96a5cc430c0c5fe4","2746dbce860e8644ce715860fb7f880b","7dec06c9860e0c2431b1f63823cd58f3","c15e75315b24033b53bf1716c810bc55","2a4d28da0f4f4a73c6a6ca0b70432196","2441a7d236246e3191870102259d866c","182d0810dc5bdb879a67cc73a54ab2e3","1131df6a1351dcd15a42b4f3dc2c26bc","bc4823928adf48deb7c79ccc4775af03","1b3158a1a6d317b1c468286c3cf11a52","54dd1676bc6db5ce3e64a4eef95409c9","32fb98b3fa25d2c284822d8b409a5a70","8c895bc59b75fb4c3c7a83990ea8e5e3","9abb48a6060724febe2476521e93fe94","34e8d5bbd90cfb7d60388aad23d2e702","a62d8dafef1e7f21c6440685faa5ce88","acffc5529515007024548e136a409ff2","088e36755fde5ceaad9cb5dea73f3ab3",{"version":"29fc9434962e9a75367715ae674704df","affectsGlobalScope":true,"impliedNodeFormat":1},"0cb91525c248fbd47796f4b66bf6d1ce","52d0b2118c50f027c3e705fb3a5b3a76","6835b3cccbe7b95c93e13a5d2188af82","ac4f57a25ce44013001d94a713084cbe","e64c6ae74fe4629d2dbd4cbc0327523c","ea87a90387d7680c978dd4af6a7451c8","7c397e72523aa26bbf2d48cf765213d2","9292df5c013e4ea9da035de7faa497e6","36ccb3844d98882c63be347b7c67c0a3","37c3bfc01246d2b6cd575bddb0ea9d1b","079f4855e44a9ca9b014e5a860bfb72f","cc495e570859464081995c5735f3badc","9f2f4a4f07a3455f4d52a26f7a4b8fcb","c7eb90a6d4e18b33d0eeba6074e872d4","2baf2a8f6a612cd1295f79f3e873a2a4","ad276fb55297e6d29fe65d795d7e7ce4","e2a8e187d8a7db24931ea2c655d52c80","0db97d91db6e499a5df8e99257afe07c","af4e50cb99ba66919d9a70c28bfc5e24",{"version":"ff4d71935967e02fbe90430738a46c4e","affectsGlobalScope":true,"impliedNodeFormat":1},"2f1bb71d08da4fe6737ce0fd504fab4f","80934c477870fc97980d6296f5e7f063","98e86452fc67f68abc49450eb5f01d73","9916f4848c2282b9cb588a41f6b7d823","d9baefe45beff3fcb99e0e879c4b3a1a","a0e5e2be58876b4545cb3be195801e6e","1aa0fb5fa5d8275b5db27bc931aa1975","3449ea63993a991312e0e444ece2382b","7e5c546175ec5fae4c0e494ad24c5b90","bc6d97e46a1dafb8e8d1b601ccaf7e1a","579e6d11933f5644dc142c0a4e79c645","2a9d6baa2c42865fc9f5e7516d0910de","9ca582829e8eba4129943a1a941c6bbe","2aef22a88fd7dd975ba87f7c8e099fc3","836ca98928668baf27ac19645c07198e","757a8e678340c7a0aa01c699d2084933","48c676e5241e9876faafba68ef7d6d26","c3201c3dc232ea9f79fd9034b036ba94","8829f5982af596616a839da1807c12a2","5c4f67e441d334f46ff34670f61b22cd","25d40df8bff69a330a687d98bdbc2eb6","87175b4aa2f6ef2d25834a1969a45b51","be8b3bcdd2ba7d7c8c87946a20626c5b","b52b31c86a05afbf7cc827a8889b69da","cd8070bba6df1e7a7b65224ab106d7d0","ce15efa1c092340d16d533b69f4fb1a9","6b72f2919a3ebe1223b418b9bc920d7e","52b842fca322a4b30f1f7b8cab78ab88","292f07f2059da3d1699f18623544d2a8","bd29402f5bac2be501b52a3a0ec997a1",{"version":"7376cd32b4c24f5e3471d538cce0a6cc","affectsGlobalScope":true,"impliedNodeFormat":1},"afd868916e9e1d1fc494f6573e112e3f",{"version":"7b395e75f006f1b735d397f8db9f19de","affectsGlobalScope":true,"impliedNodeFormat":1},"da1fd4bfd6803838104ca05c0ed7fadc","55775a298812b43e9114dabd88a8918d","48500b61fc86a5b4dbba2c94adf5214d","08438df3f7f27a87056551849edd15cd","6aec5e4ab841d50c79df02ede12103ef","cec011fd991c3267563c5309daf65ea2","aa13fb67f56469e7590006108066e0be","e30cd47fea0096ba312924f04657fcfd","f12c7bdfa7c2ad0fe84247f800b9956c","d40cee60c3c264a4c1cd9c1013dbaac7","bec0d6e171cab6b12d98455bf99217c6","92fe312f908112181c00a3d36883a58e","3720c6074ec2bfeba0a1d638ab26a0bb","a041df5c00a7c9e6343c519782e99329","0303d7f5e0d019fa88ca2945794fa8d2","9dad91c6969461f75aef8fc683a9376e","c33ae00968f45dfe2ef2bea7966cf6c5","18c8c018e7e8a2f4ae676f8661110c6d","24d9b69b67823f208423e5796b79c23b","bf799332c55c6eb4a6d9d652d6dda457","3948daef404f94c35fb3ceca755a27d6","cd2ad42b2eff27f2277cced9b91b270e","304539db53f7fe3cc4bfd5878b7223fe","9c56184330b09c7c690ed42d3bcff59d","450ca6229325f8123bea072e71c866ed","88d22ddd44a72912036f38833360b8f1","edeec51072253363d7345541bb78d745","32d5973e5b42693387462b0998810615","db80558b0bf2653338bcf91434263fda","0136b37037b7ce74caaad4abcdd15237","e6179eee2131e249ccd9f2dd960b92b5","c089839d8abcdfe1168ebde55894cad4","097a7aae20edb8e5de5f45463d6fa417","c1df21c2195796f767d0e03cf9ac00d1","1362b703c4f9be29bd918a71a07b7e6c","f71afe5e74b683a5260d9b7dbd741104","adcc06f04eaa91f672f07e00c5f63eec","6ea7a8edac19a93df999f41b0058f2a2","563051f5836b5e450d5c9868552c9685","e41fb55415372b37046b46fd27a3e8b9","649b0e8e352b40125538627774ddccd6","b1c43dab0c298c8661b08e49779c32a0","239019e12520a280526af43974a0aeca","ec8beec2c9e2259c26be90574cb94989","57d6b728909ea2c50bf50e0e19c99b8c","93f871c7865a245efe8b0b2405a09c9e","b9b7a66404c8da7d1fc634a7a69a989e","0312a7938ed343c86f23d1178be1a62f","0d34e16363c4b2e88f9be19c0eda14a3","b4646a5c02912f7b2e8ce18a2f960bb7","4ba759be6e6d6510d41817c11f60c6d2","482e3e94bb83169ff0a2f1cd516c9394","9e07e42545fb1aba960b46e3d676c245","bd8fbc7e2e26a4686f8b4c45386a46db","ad1145336b61b23d724d3923b953ae82","3fb91489cde0479c146410f814c27749","589e3a40397dc48971ac6612dca9896b","86d78487119720cc47028100d7bb39d1","91535037303b09ae267a5ee85f9efd85","39f77cd7e5d49be8457371af1c217c22","80934c477870fc97980d6296f5e7f063","928a0d860e4d81f663a40bb1a5b4b1fd","e2eef8c06c88bf82bd89bd640527a835","0238452f4fa45cb934637e05d02d1db8","ff00d59cbd64d6d0ba3e1d83e11ca21b","ec4eccca7dc09c8eac03e58d5704c74c","4e3963a0487d205b3f1ca917119aa4ac","19c7641b62556c1c081bd997e2f32a2f","de3e3ebddccbc9fe1e96a37b45aff49d"],"fileIdsList":[[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,252,262,263,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,165,287,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,175,259,264,265,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,175,259,267,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,252,264,267,268,269,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,175,252,264,267,268,269,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,175,252,264,267,268,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,175,252,264,267,268,271,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,175,252,264,267,268,269,284,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,165,289,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,262,288,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,259,265,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,253,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,262,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,165,296,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,262,266,267,287,288,289,290,291,292,293,294,295,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,175,252,257,259,262,264,265,267,287,291,292,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,262,287,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,253,254,257,258,261,265,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,259,260,262,265,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,253,254,256,257,262,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,252,259,260,261,262,263,264,287,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,252,259,261,263,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,258,262,265,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,165,266,267,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,175,252,259,262,266,287,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,262,265,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,377],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,303,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,303,307,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,301,303,305,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,301,303,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,303,309,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,302,303,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,314,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,303,320,321,322,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,303,324,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,303,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,303,306,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,303,305,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,303,314,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,364,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,369,370,371],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,374],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,376,377,378],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,379],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,382],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,369,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,167,168,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,168,169,365,368,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,387],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,395],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,389,395],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,390,391,392,393,394],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,399,400,401,402,403,404,405,406,407,408,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,398,400,401,402,403,404,405,406,407,408,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,398,399,400,401,402,403,404,405,406,407,408,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,398,399,401,402,403,404,405,406,407,408,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,398,399,400,402,403,404,405,406,407,408,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,398,399,400,401,403,404,405,406,407,408,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,398,399,400,401,402,404,405,406,407,408,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,398,399,400,401,402,403,405,406,407,408,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,398,399,400,401,402,403,404,406,407,408,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,398,399,400,401,402,403,404,405,407,408,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,398,399,400,401,402,403,404,405,406,408,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,398,399,400,401,402,403,404,405,406,407,409],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,397,398,399,400,401,402,403,404,405,406,407,408],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,418],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,411,413,414,419],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,412,415],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,411,412],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,413,415],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,411,412,413,414,415,416,417],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,411],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,425],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,421,422,423,424],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,255,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,431,432],[69,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[64,65,66,69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[67,68,69,70,71,72,73,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,153,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,154,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,156,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,157,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,158,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,160,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,161,162,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,162,163,372],[69,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,163,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,435,437,441,442,443,444,445,446],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,435,437,438,440,447],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,434,435,436,438,439,440,447],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,437,438],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,437],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,439],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,436,438,440],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,435,437,438,439,440,447],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,435,436,437,438,439,440,447],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,440],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,450,451,454,455],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,456],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,371,372,458],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,462],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,466],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,395,462,465],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,395,462],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,462,470],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,469,470,471,472,473],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,457,460,461],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,385],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,479,517],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,479,502,517],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,478,517],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,517],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,479],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,479,503,517],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,503,517],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,367,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,525],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,373,426,518,520,526],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,426,519,520,521,522,523,524],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,519,520],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,519],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,526],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372,376,380,381],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,451,452,453],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372,451],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,170,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,170,171,172,173,174,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,166,169,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,169,170,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,166,170,372],[69,83,87,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,78,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,80,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,78,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372],[69,75,76,79,82,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,83,90,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,75,81,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,83,104,105,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,79,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372],[69,104,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372],[69,77,78,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372],[69,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,105,106,107,108,109,110,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,83,98,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,83,90,91,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,81,83,91,92,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,82,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,75,78,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,83,87,91,92,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,87,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,81,83,86,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,75,80,83,90,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,372],[69,78,83,104,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,251,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,242,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,242,245,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,237,240,242,243,244,245,246,247,248,249,250,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,176,178,245,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,242,243,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,177,242,244,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,178,180,182,183,184,185,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,180,182,184,185,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,180,182,184,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,177,180,182,183,185,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,176,178,179,180,181,182,183,184,185,186,187,237,238,239,240,241,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,176,178,179,182,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,178,179,182,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,182,185,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,176,177,179,180,181,183,184,185,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,176,177,178,182,242,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,182,183,184,185,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,184,372],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,372]],"options":{"composite":true,"declaration":true,"declarationMap":true,"module":200,"noFallthroughCasesInSwitch":true,"noUncheckedIndexedAccess":false,"outDir":"./build","rootDir":"./src","skipLibCheck":true,"strict":true,"sourceMap":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[165,1],[268,2],[298,3],[287,4],[269,5],[270,6],[271,7],[272,7],[273,7],[274,7],[275,7],[276,8],[277,7],[279,7],[278,6],[280,7],[281,7],[282,9],[283,7],[284,7],[285,10],[286,7],[299,11],[289,12],[288,13],[290,13],[266,14],[291,15],[292,16],[297,17],[296,18],[293,19],[294,20],[262,21],[254,13],[261,22],[258,23],[263,13],[265,24],[253,13],[264,25],[259,26],[257,16],[260,13],[300,27],[267,28],[295,29],[380,30],[301,13],[302,13],[303,13],[362,31],[304,32],[351,33],[306,34],[305,35],[307,32],[308,32],[310,36],[309,32],[311,37],[312,37],[313,32],[315,38],[316,32],[317,38],[318,32],[320,32],[321,32],[322,32],[323,39],[319,32],[324,13],[325,40],[326,40],[327,40],[328,40],[329,40],[330,40],[340,41],[331,40],[332,40],[333,40],[334,40],[336,40],[337,40],[335,40],[338,40],[339,40],[341,32],[342,32],[314,32],[343,38],[345,42],[344,32],[346,32],[347,32],[348,43],[350,32],[349,32],[352,32],[354,32],[355,44],[353,32],[356,32],[357,32],[358,32],[359,32],[360,32],[361,32],[363,13],[365,45],[255,1],[366,1],[372,46],[364,1],[373,13],[375,47],[379,48],[378,49],[383,50],[376,13],[384,51],[169,52],[370,51],[369,53],[385,1],[386,13],[388,54],[389,13],[393,55],[394,55],[390,56],[391,56],[392,56],[395,57],[367,13],[396,13],[377,13],[410,58],[398,59],[399,60],[397,61],[400,62],[401,63],[402,64],[403,65],[404,66],[405,67],[406,68],[407,69],[408,70],[409,71],[419,72],[415,73],[413,74],[416,75],[414,76],[418,77],[412,13],[417,78],[411,13],[420,54],[422,13],[421,13],[424,79],[425,80],[423,79],[426,13],[427,13],[428,1],[256,81],[374,13],[429,51],[430,13],[432,13],[433,82],[113,83],[114,84],[115,85],[69,86],[116,87],[117,88],[118,89],[64,13],[67,90],[65,13],[66,13],[119,91],[120,92],[121,93],[122,94],[123,95],[124,96],[125,97],[126,98],[127,99],[128,100],[129,101],[70,13],[68,13],[130,102],[131,103],[132,104],[164,105],[133,106],[134,107],[135,108],[136,109],[137,110],[138,111],[139,112],[140,113],[141,114],[142,115],[143,116],[144,117],[145,118],[146,119],[148,120],[147,121],[149,122],[150,123],[151,124],[152,125],[153,126],[154,127],[155,128],[156,129],[157,130],[158,131],[159,132],[160,133],[161,134],[71,13],[72,13],[73,13],[112,135],[162,136],[163,137],[447,138],[434,1],[441,139],[437,140],[435,141],[438,142],[442,139],[443,139],[440,143],[439,144],[444,145],[445,146],[446,139],[436,147],[448,13],[449,13],[456,148],[455,149],[457,13],[168,13],[167,13],[459,150],[458,51],[463,151],[464,151],[467,152],[466,151],[468,153],[465,154],[471,155],[472,151],[470,151],[473,155],[469,13],[474,156],[460,13],[462,157],[371,1],[475,158],[476,13],[477,13],[502,159],[503,160],[479,161],[482,162],[500,159],[501,159],[491,159],[490,163],[488,159],[483,159],[496,159],[494,159],[498,159],[478,159],[495,159],[499,159],[484,159],[485,159],[497,159],[480,159],[486,159],[487,159],[489,159],[493,159],[504,164],[492,159],[481,159],[517,165],[516,13],[511,164],[513,166],[512,164],[505,164],[506,164],[508,164],[510,164],[514,166],[515,166],[507,166],[509,166],[368,167],[526,168],[518,13],[521,169],[524,1],[525,170],[519,168],[522,171],[523,1],[520,172],[527,173],[528,13],[387,13],[529,13],[530,1],[531,13],[61,13],[62,13],[12,13],[10,13],[11,13],[16,13],[15,13],[2,13],[17,13],[18,13],[19,13],[20,13],[21,13],[22,13],[23,13],[24,13],[3,13],[25,13],[26,13],[4,13],[27,13],[31,13],[28,13],[29,13],[30,13],[32,13],[33,13],[34,13],[5,13],[35,13],[36,13],[37,13],[38,13],[6,13],[42,13],[39,13],[40,13],[41,13],[43,13],[7,13],[44,13],[49,13],[50,13],[45,13],[46,13],[47,13],[48,13],[8,13],[54,13],[51,13],[52,13],[53,13],[55,13],[9,13],[56,13],[63,13],[57,13],[58,13],[60,13],[59,13],[1,13],[14,13],[13,13],[74,13],[461,13],[382,174],[381,50],[431,1],[454,175],[451,1],[453,176],[452,13],[450,13],[174,177],[166,13],[175,178],[172,177],[170,179],[173,180],[171,181],[90,182],[100,183],[89,182],[110,184],[81,185],[80,13],[109,1],[103,186],[108,185],[83,187],[97,188],[82,189],[106,190],[78,191],[77,1],[107,192],[79,193],[84,183],[85,13],[88,183],[75,13],[111,194],[101,195],[92,196],[93,197],[95,198],[91,199],[94,200],[104,1],[86,201],[87,202],[96,203],[76,13],[99,195],[98,183],[102,13],[105,204],[252,205],[246,206],[250,207],[247,207],[243,206],[251,208],[248,209],[249,207],[244,210],[245,211],[239,212],[183,213],[185,214],[238,13],[184,215],[242,216],[241,217],[240,218],[176,13],[186,213],[187,13],[178,219],[182,220],[177,13],[179,221],[180,222],[181,13],[188,223],[189,223],[190,223],[191,223],[192,223],[193,223],[194,223],[195,223],[196,223],[197,223],[198,223],[199,223],[200,223],[202,223],[201,223],[203,223],[204,223],[205,223],[206,223],[237,224],[207,223],[208,223],[209,223],[210,223],[211,223],[212,223],[213,223],[214,223],[215,223],[216,223],[217,223],[218,223],[219,223],[221,223],[220,223],[222,223],[223,223],[224,223],[225,223],[226,223],[227,223],[228,223],[229,223],[230,223],[231,223],[232,223],[233,223],[236,223],[234,223],[235,223]],"latestChangedDtsFile":"./build/utils/util.test.d.ts"} \ No newline at end of file diff --git a/typescript/db-migration-engine/tsconfig.tsbuildinfo b/typescript/db-migration-engine/tsconfig.tsbuildinfo index 5df3bec85..41675e9ba 100644 --- a/typescript/db-migration-engine/tsconfig.tsbuildinfo +++ b/typescript/db-migration-engine/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"version":"7.0.0-dev.20260309.1","root":[[173,174]],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2021.d.ts","lib.es2022.d.ts","lib.dom.d.ts","lib.dom.iterable.d.ts","lib.dom.asynciterable.d.ts","lib.webworker.importscripts.d.ts","lib.scripthost.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.es2021.promise.d.ts","lib.es2021.string.d.ts","lib.es2021.weakref.d.ts","lib.es2021.intl.d.ts","lib.es2022.array.d.ts","lib.es2022.error.d.ts","lib.es2022.intl.d.ts","lib.es2022.object.d.ts","lib.es2022.string.d.ts","lib.es2022.regexp.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","lib.es2022.full.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/@types/node/web-globals/events.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/file.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/filereader.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.generated.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/pg-types/index.d.ts","../../node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/pg-protocol/dist/index.d.ts","../../node_modules/@types/pg/lib/type-overrides.d.ts","../../node_modules/@types/pg/index.d.ts","../../node_modules/@types/pg/index.d.mts","./src/index.ts","./src/apply-migrations.ts"],"fileInfos":[{"version":"a1aa1a5e065d48ef5c7bb99e38412f96","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d4306fb2e47f74835e8674ffac07d76f","impliedNodeFormat":99},{"version":"e437c5c1302869326c3bb93da85bbbcf","impliedNodeFormat":99},{"version":"e4324975a566567b21d350615f1fc6ac","impliedNodeFormat":99},{"version":"333b1b9a2a9ac3b8497dba5c63b5ba50","impliedNodeFormat":99},{"version":"6cffacd662b6eb5fa7a36aa2ea366bfa","impliedNodeFormat":99},{"version":"b4c34f9c23304dbef2d23698637ed638","impliedNodeFormat":99},{"version":"e5cb86a5fc491796ecd1d2dd348d208f","impliedNodeFormat":99},{"version":"feb6c6fb19cdb246a5d8acb36a6901c7","impliedNodeFormat":99},{"version":"aae8996e8b5684814785a42cbbefcd79","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"abad6dd56cc8caf095c165df8124d237","impliedNodeFormat":99},{"version":"abad6dd56cc8caf095c165df8124d237","impliedNodeFormat":99},{"version":"2a9941db0809c9ad0e8837ed629b1dcc","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d051b93324f36bcc68d152a5ca0988cd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"01ac052ec4a79e87229f90466a9645f8","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"edba5df642941aa062a62f6328c6df3d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"bb3a710cbcda0533bb127712927cbe37","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7a42de379b489e8f7b647455bebfc576","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"692bcd75364db0f65d428801c7884466","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4ef72aa378127e7b7abba915b0110b1e","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3ec74c6a7d4463f0254db3a74cf75646","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"84c2bdfa470d075526cce6322d81b0b6","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0b3844c2b8c73e4e1ab91431411cad11","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4fc71cf4a15b8d99675a31df77f26e07","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d1b49564ddaeca3df5b6dbae925d2242","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6a25be566d60ccfc2d6e8b7bfdeefa83","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"8a20e27646985dfd58c57ca6566553dd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"9969f02ad3cdcbf4f709405cda44167f","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"9c9be4792a7a4f42c15ae7360bf28779","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0eb5b8b97bde45c8fde5cd07c33f6631","impliedNodeFormat":99},{"version":"90630acdc4134173bcf216f187bd3010","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"913b52a39743d1c11984e4e124b1f3a8","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2514e9a2749c0fc18d2f478e9e1e641e","affectsGlobalScope":true,"impliedNodeFormat":1},"fe51d7a9bcdbcce1e65bbcf39b212298",{"version":"849a1873c4e917b0887368c1be897faa","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"c46c3108bde06d3b1fc6f802eb09eeeb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1332add604574cf529fb33b23304b296","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9af0a7e3ef1c42cd066b9f8d365cc1ba","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9eca652586205dc5b07f9ba57b1c8500","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ec5f75939754ce94652189ec7d0d3058","affectsGlobalScope":true,"impliedNodeFormat":1},"e2f0114efc512fd95bdc12c81d5e8d6a","628b774b54637325e286752c79c12432","bb1f9e3091b88e9d0e93b7198c736af3","514fd35e5eb35bb2e5cbb908af0a0aa2","ed57ae88565308729f2327f26d684976","dcd932d6b0038f2e250e30dc10125b22","9508c917bd7e458745e222a82dd24ef0","fabf86f455f96b90538cc26320ab2765","14550b4cd9f433e0addd8b6d67614d23","cf0ac6aebc25cb780674653aaeee688e","35fef7bac8048f583e4ce6eaa0c2a4c0","6752dc653fc7a333027249fd851fdb62","b9ad7e689b46dfba362c1bf174e69018","8b0a2930dfabdf27c69c6bb1eeabcdc8","4513b1ed15523d247040689f37fa9db2","5c0c499eed773a750903d9497beafacd","2377da227d1bac82ff7b3f2081ddf8d3","beef985b474fefeb80d27fb2c8778371","c79fc9d9f09ae598a374ae7c0b5284a4","f2caa3cebb1e6be855519004830a6be0","8ebc9f2a77c900e710801214c5cb994c","ec617a0e0577dd6a3210c3b067ecb325","1db5d06e485bd82d6d5f6e36925a8714","24b864518967840216c779b5e5f00975","8719cd8047700bfb6046798390053823","f2840afb502c94db92dab0fb8d27812f","a7e7d08b372210c203745d3eac61a411","531183cc80535e0e94226d720e5eb038","f627eb958ca52c85e42f04dce4661f86","9a43fc665bce9012a3d5fe1b574ff4dc","13f4b4da6546a34719fd6bde15fb63dd","a589216508844bfc00e62fc2d97fda45","865aea1c3209e31b076cb6fe780e769e","12e64aaf26af0f5c8f1b263dd66e3feb","928971ebbcdf5b093ef37669b33bddf6","b744265d8ad12b7d4d5c5dc35d18d44e","eff32168b8348b822afeed9cbf61afa7","9aafd1f29b4d8861c1c6c34bf83c0721",{"version":"a127795c4dad633990c87aa0b86831e5","affectsGlobalScope":true,"impliedNodeFormat":1},"4ef82d390af85e719a46d566e229dd83","7deced3ef46e082f97d49bb71622526a","fa7acb320bbf7da8f76e431437143034",{"version":"ee57e9bfec6167b488ced231a7bf233d","affectsGlobalScope":true,"impliedNodeFormat":1},"7aa99080b86233d5b21416907d7a75a6","7d6a8df1becce5c270da2093e7835920",{"version":"c37fea1584ced70492ff5748ed570abd","affectsGlobalScope":true,"impliedNodeFormat":1},"b2b472cd0bf0f8d5f022e00ca1c401f4",{"version":"e22c8fb0fc65df14299c6c94cf729b3c","affectsGlobalScope":true,"impliedNodeFormat":1},"a84efb87b57f78ea0b0577edaacd8b33","814e0c2cc2a92531b6dc5d2a1767a6e1","79ac55b2d493df83277d681e4d64a992","7ab3b7243211fa08af307609be231d6c","7fd0f028e135bdf15ff757781a2f4ba9",{"version":"cab5b406d3defff17c931e41fa98aeb1","affectsGlobalScope":true,"impliedNodeFormat":1},"aa7dc1db3d208fb91418794a18539d4c","e9b8fc3c9291fc5701e219c0407e973d","b8f5d7bb61117f48a99b0cecaa75d186","687b6f8f042393a27ce6c8fd32972129","1d3b57f542db6054f952f8076b3c6a3a","4e0ba29e69c1176d4b909ad8a85a2695",{"version":"e5d25a206975fb43b72d246ed86fd7fe","affectsGlobalScope":true,"impliedNodeFormat":1},"88822a7d78686871bb9c15cedd3f45f2","86308ea691fd06825dd9a3ce0f1e901a","44782881f424302151e0de8fdaa39575",{"version":"f0ef68e9c53d126a7b3bfc1ae9f2c7c4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"71259a408a4178e5f0795188b4d802f1","affectsGlobalScope":true,"impliedNodeFormat":1},"eb80d821e5e931dcccee2697f3e249e2","961969874f5ee12ed3429d3d0c82de02","9a62058bc2d476e807cc6594eed72adb","40cbc4bb3b225b03c54255154dada07d","6534825a8bda3eeecde9bca9e3a99712","09a582ab2a73806ab5887ea413b3d55a","a0592261111f47230eb35ee52c12e635","c8206d568b54e5ea06131963eecd576a","15878f4f50c2e562c0768eb735c2aed5",{"version":"b636ba40489f78f02a4b71322994828a","affectsGlobalScope":true,"impliedNodeFormat":1},"7b844f3801adf7e09ea25ec5f39f9a86","46c937d243665015f13587ac0db55909",{"version":"1f29cf27395029939dd41fce4f0c5653","affectsGlobalScope":true,"impliedNodeFormat":1},"f026c594d60114f10583261f6499df38","1ac553606580aeec204cce24c38b2e3f","3c29bf7066a67e7151f563fc1c4e56cb","00d49834780046c2d6a7da3e50d83cca",{"version":"377c78771ee061f2b4e59d5eb5a28782","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7293552290431bff8ef5f13e6f7fcbfc","affectsGlobalScope":true,"impliedNodeFormat":1},"9453ee3aca6a51ae747057fbc6388cf2","6c491c1508bd3e1df0f45f38b07243c2","1f99b8445612afcfaae0f8591d8d18ac",{"version":"bbd4e0ea8a847a4b60ba7d5741985c9d","affectsGlobalScope":true,"impliedNodeFormat":1},"f57ef54941c62bf28f3beafb86025735","7b6c16d46b33570aaef9d0fdc4f02f14","25d40df8bff69a330a687d98bdbc2eb6","87175b4aa2f6ef2d25834a1969a45b51","be8b3bcdd2ba7d7c8c87946a20626c5b","b52b31c86a05afbf7cc827a8889b69da","cd8070bba6df1e7a7b65224ab106d7d0","ce15efa1c092340d16d533b69f4fb1a9","6b72f2919a3ebe1223b418b9bc920d7e",{"version":"d24ce383e45fc15d6fa9f750441ba231","impliedNodeFormat":99},"9272226ae3acdfeea94dd2949b0d93b3","cf876a3127dc68b96708142a9effee06"],"fileIdsList":[[69,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[64,65,66,69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[67,68,69,70,71,72,73,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,162,163],[69,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,171],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,169,170],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,166,167,168],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,166],[69,83,87,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,78,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,80,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,78,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,75,76,79,82,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,90,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,75,81,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,104,105,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,79,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,104,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,77,78,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,105,106,107,108,109,110,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,98,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,90,91,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,81,83,91,92,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,82,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,75,78,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,87,91,92,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,87,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,81,83,86,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,75,80,83,90,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,78,83,104,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,173],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,172]],"options":{"composite":true,"declaration":true,"declarationMap":true,"module":200,"noFallthroughCasesInSwitch":true,"noUncheckedIndexedAccess":false,"outDir":"./js","rootDir":"./src","skipLibCheck":true,"strict":true,"sourceMap":true,"target":9},"referencedMap":[[113,1],[114,2],[115,3],[69,4],[116,5],[117,6],[118,7],[64,8],[67,9],[65,8],[66,8],[119,10],[120,11],[121,12],[122,13],[123,14],[124,15],[125,16],[126,17],[127,18],[128,19],[129,20],[70,8],[68,8],[130,21],[131,22],[132,23],[164,24],[133,25],[134,26],[135,27],[136,28],[137,29],[138,30],[139,31],[140,32],[141,33],[142,34],[143,35],[144,36],[145,37],[146,38],[148,39],[147,40],[149,41],[150,42],[151,43],[152,44],[153,45],[154,46],[155,47],[156,48],[157,49],[158,50],[159,51],[160,52],[161,53],[71,8],[72,8],[73,8],[112,54],[162,55],[163,56],[172,57],[171,58],[170,57],[61,8],[62,8],[12,8],[10,8],[11,8],[16,8],[15,8],[2,8],[17,8],[18,8],[19,8],[20,8],[21,8],[22,8],[23,8],[24,8],[3,8],[25,8],[26,8],[4,8],[27,8],[31,8],[28,8],[29,8],[30,8],[32,8],[33,8],[34,8],[5,8],[35,8],[36,8],[37,8],[38,8],[6,8],[42,8],[39,8],[40,8],[41,8],[43,8],[7,8],[44,8],[49,8],[50,8],[45,8],[46,8],[47,8],[48,8],[8,8],[54,8],[51,8],[52,8],[53,8],[55,8],[9,8],[56,8],[63,8],[57,8],[58,8],[60,8],[59,8],[1,8],[14,8],[13,8],[74,8],[169,59],[166,60],[168,61],[167,8],[165,8],[90,62],[100,63],[89,62],[110,64],[81,65],[80,8],[109,60],[103,66],[108,65],[83,67],[97,68],[82,69],[106,70],[78,71],[77,60],[107,72],[79,73],[84,63],[85,8],[88,63],[75,8],[111,74],[101,75],[92,76],[93,77],[95,78],[91,79],[94,80],[104,60],[86,81],[87,82],[96,83],[76,8],[99,75],[98,63],[102,8],[105,84],[174,85],[173,86]],"affectedFilesPendingEmit":[[174,51],[173,51]],"emitSignatures":[173,174]} \ No newline at end of file +{"version":"7.0.0-dev.20260309.1","root":[[173,174]],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2021.d.ts","lib.es2022.d.ts","lib.dom.d.ts","lib.dom.iterable.d.ts","lib.dom.asynciterable.d.ts","lib.webworker.importscripts.d.ts","lib.scripthost.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.es2021.promise.d.ts","lib.es2021.string.d.ts","lib.es2021.weakref.d.ts","lib.es2021.intl.d.ts","lib.es2022.array.d.ts","lib.es2022.error.d.ts","lib.es2022.intl.d.ts","lib.es2022.object.d.ts","lib.es2022.string.d.ts","lib.es2022.regexp.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","lib.es2022.full.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/@types/node/web-globals/events.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/file.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/filereader.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.generated.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/pg-types/index.d.ts","../../node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/pg-protocol/dist/index.d.ts","../../node_modules/@types/pg/lib/type-overrides.d.ts","../../node_modules/@types/pg/index.d.ts","../../node_modules/@types/pg/index.d.mts","./src/index.ts","./src/apply-migrations.ts"],"fileInfos":[{"version":"a1aa1a5e065d48ef5c7bb99e38412f96","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d4306fb2e47f74835e8674ffac07d76f","impliedNodeFormat":99},{"version":"e437c5c1302869326c3bb93da85bbbcf","impliedNodeFormat":99},{"version":"e4324975a566567b21d350615f1fc6ac","impliedNodeFormat":99},{"version":"333b1b9a2a9ac3b8497dba5c63b5ba50","impliedNodeFormat":99},{"version":"6cffacd662b6eb5fa7a36aa2ea366bfa","impliedNodeFormat":99},{"version":"b4c34f9c23304dbef2d23698637ed638","impliedNodeFormat":99},{"version":"e5cb86a5fc491796ecd1d2dd348d208f","impliedNodeFormat":99},{"version":"feb6c6fb19cdb246a5d8acb36a6901c7","impliedNodeFormat":99},{"version":"aae8996e8b5684814785a42cbbefcd79","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"abad6dd56cc8caf095c165df8124d237","impliedNodeFormat":99},{"version":"abad6dd56cc8caf095c165df8124d237","impliedNodeFormat":99},{"version":"2a9941db0809c9ad0e8837ed629b1dcc","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d051b93324f36bcc68d152a5ca0988cd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"01ac052ec4a79e87229f90466a9645f8","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"edba5df642941aa062a62f6328c6df3d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"bb3a710cbcda0533bb127712927cbe37","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7a42de379b489e8f7b647455bebfc576","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"692bcd75364db0f65d428801c7884466","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4ef72aa378127e7b7abba915b0110b1e","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3ec74c6a7d4463f0254db3a74cf75646","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"84c2bdfa470d075526cce6322d81b0b6","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0b3844c2b8c73e4e1ab91431411cad11","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4fc71cf4a15b8d99675a31df77f26e07","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d1b49564ddaeca3df5b6dbae925d2242","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6a25be566d60ccfc2d6e8b7bfdeefa83","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"8a20e27646985dfd58c57ca6566553dd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"9969f02ad3cdcbf4f709405cda44167f","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"9c9be4792a7a4f42c15ae7360bf28779","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0eb5b8b97bde45c8fde5cd07c33f6631","impliedNodeFormat":99},{"version":"90630acdc4134173bcf216f187bd3010","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"913b52a39743d1c11984e4e124b1f3a8","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2514e9a2749c0fc18d2f478e9e1e641e","affectsGlobalScope":true,"impliedNodeFormat":1},"fe51d7a9bcdbcce1e65bbcf39b212298",{"version":"849a1873c4e917b0887368c1be897faa","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"c46c3108bde06d3b1fc6f802eb09eeeb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1332add604574cf529fb33b23304b296","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9af0a7e3ef1c42cd066b9f8d365cc1ba","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9eca652586205dc5b07f9ba57b1c8500","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ec5f75939754ce94652189ec7d0d3058","affectsGlobalScope":true,"impliedNodeFormat":1},"e2f0114efc512fd95bdc12c81d5e8d6a","628b774b54637325e286752c79c12432","bb1f9e3091b88e9d0e93b7198c736af3","514fd35e5eb35bb2e5cbb908af0a0aa2","ed57ae88565308729f2327f26d684976","dcd932d6b0038f2e250e30dc10125b22","9508c917bd7e458745e222a82dd24ef0","fabf86f455f96b90538cc26320ab2765","14550b4cd9f433e0addd8b6d67614d23","cf0ac6aebc25cb780674653aaeee688e","35fef7bac8048f583e4ce6eaa0c2a4c0","6752dc653fc7a333027249fd851fdb62","b9ad7e689b46dfba362c1bf174e69018","8b0a2930dfabdf27c69c6bb1eeabcdc8","4513b1ed15523d247040689f37fa9db2","5c0c499eed773a750903d9497beafacd","2377da227d1bac82ff7b3f2081ddf8d3","beef985b474fefeb80d27fb2c8778371","c79fc9d9f09ae598a374ae7c0b5284a4","f2caa3cebb1e6be855519004830a6be0","8ebc9f2a77c900e710801214c5cb994c","ec617a0e0577dd6a3210c3b067ecb325","1db5d06e485bd82d6d5f6e36925a8714","24b864518967840216c779b5e5f00975","8719cd8047700bfb6046798390053823","f2840afb502c94db92dab0fb8d27812f","a7e7d08b372210c203745d3eac61a411","531183cc80535e0e94226d720e5eb038","f627eb958ca52c85e42f04dce4661f86","9a43fc665bce9012a3d5fe1b574ff4dc","13f4b4da6546a34719fd6bde15fb63dd","a589216508844bfc00e62fc2d97fda45","865aea1c3209e31b076cb6fe780e769e","12e64aaf26af0f5c8f1b263dd66e3feb","928971ebbcdf5b093ef37669b33bddf6","b744265d8ad12b7d4d5c5dc35d18d44e","eff32168b8348b822afeed9cbf61afa7","9aafd1f29b4d8861c1c6c34bf83c0721",{"version":"a127795c4dad633990c87aa0b86831e5","affectsGlobalScope":true,"impliedNodeFormat":1},"4ef82d390af85e719a46d566e229dd83","7deced3ef46e082f97d49bb71622526a","fa7acb320bbf7da8f76e431437143034",{"version":"ee57e9bfec6167b488ced231a7bf233d","affectsGlobalScope":true,"impliedNodeFormat":1},"7aa99080b86233d5b21416907d7a75a6","7d6a8df1becce5c270da2093e7835920",{"version":"c37fea1584ced70492ff5748ed570abd","affectsGlobalScope":true,"impliedNodeFormat":1},"b2b472cd0bf0f8d5f022e00ca1c401f4",{"version":"e22c8fb0fc65df14299c6c94cf729b3c","affectsGlobalScope":true,"impliedNodeFormat":1},"a84efb87b57f78ea0b0577edaacd8b33","814e0c2cc2a92531b6dc5d2a1767a6e1","79ac55b2d493df83277d681e4d64a992","7ab3b7243211fa08af307609be231d6c","7fd0f028e135bdf15ff757781a2f4ba9",{"version":"cab5b406d3defff17c931e41fa98aeb1","affectsGlobalScope":true,"impliedNodeFormat":1},"aa7dc1db3d208fb91418794a18539d4c","e9b8fc3c9291fc5701e219c0407e973d","b8f5d7bb61117f48a99b0cecaa75d186","687b6f8f042393a27ce6c8fd32972129","1d3b57f542db6054f952f8076b3c6a3a","4e0ba29e69c1176d4b909ad8a85a2695",{"version":"e5d25a206975fb43b72d246ed86fd7fe","affectsGlobalScope":true,"impliedNodeFormat":1},"88822a7d78686871bb9c15cedd3f45f2","86308ea691fd06825dd9a3ce0f1e901a","44782881f424302151e0de8fdaa39575",{"version":"f0ef68e9c53d126a7b3bfc1ae9f2c7c4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"71259a408a4178e5f0795188b4d802f1","affectsGlobalScope":true,"impliedNodeFormat":1},"eb80d821e5e931dcccee2697f3e249e2","961969874f5ee12ed3429d3d0c82de02","9a62058bc2d476e807cc6594eed72adb","40cbc4bb3b225b03c54255154dada07d","6534825a8bda3eeecde9bca9e3a99712","09a582ab2a73806ab5887ea413b3d55a","a0592261111f47230eb35ee52c12e635","c8206d568b54e5ea06131963eecd576a","15878f4f50c2e562c0768eb735c2aed5",{"version":"b636ba40489f78f02a4b71322994828a","affectsGlobalScope":true,"impliedNodeFormat":1},"7b844f3801adf7e09ea25ec5f39f9a86","46c937d243665015f13587ac0db55909",{"version":"1f29cf27395029939dd41fce4f0c5653","affectsGlobalScope":true,"impliedNodeFormat":1},"f026c594d60114f10583261f6499df38","1ac553606580aeec204cce24c38b2e3f","3c29bf7066a67e7151f563fc1c4e56cb","00d49834780046c2d6a7da3e50d83cca",{"version":"377c78771ee061f2b4e59d5eb5a28782","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7293552290431bff8ef5f13e6f7fcbfc","affectsGlobalScope":true,"impliedNodeFormat":1},"9453ee3aca6a51ae747057fbc6388cf2","6c491c1508bd3e1df0f45f38b07243c2","1f99b8445612afcfaae0f8591d8d18ac",{"version":"bbd4e0ea8a847a4b60ba7d5741985c9d","affectsGlobalScope":true,"impliedNodeFormat":1},"f57ef54941c62bf28f3beafb86025735","7b6c16d46b33570aaef9d0fdc4f02f14","25d40df8bff69a330a687d98bdbc2eb6","87175b4aa2f6ef2d25834a1969a45b51","be8b3bcdd2ba7d7c8c87946a20626c5b","b52b31c86a05afbf7cc827a8889b69da","cd8070bba6df1e7a7b65224ab106d7d0","ce15efa1c092340d16d533b69f4fb1a9","6b72f2919a3ebe1223b418b9bc920d7e",{"version":"d24ce383e45fc15d6fa9f750441ba231","impliedNodeFormat":99},{"version":"e76311e76bd8a9e43272cca4929810aa","signature":"d68292674e32a3379769e24e8c5ab69d","impliedNodeFormat":1},{"version":"cf876a3127dc68b96708142a9effee06","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1}],"fileIdsList":[[69,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[64,65,66,69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[67,68,69,70,71,72,73,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,153,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,154,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,156,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,157,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,158,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,160,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,161,162,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,162,163],[69,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,163],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,171],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,169,170],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,166,167,168],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,166],[69,83,87,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,78,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,80,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,78,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,75,76,79,82,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,90,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,75,81,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,104,105,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,79,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,104,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,77,78,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,105,106,107,108,109,110,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,98,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,90,91,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,81,83,91,92,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,82,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,75,78,83,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,83,87,91,92,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,87,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,81,83,86,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,75,80,83,90,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[69,78,83,104,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,173],[69,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,172]],"options":{"composite":true,"declaration":true,"declarationMap":true,"module":200,"noFallthroughCasesInSwitch":true,"noUncheckedIndexedAccess":false,"outDir":"./js","rootDir":"./src","skipLibCheck":true,"strict":true,"sourceMap":true,"target":9},"referencedMap":[[113,1],[114,2],[115,3],[69,4],[116,5],[117,6],[118,7],[64,8],[67,9],[65,8],[66,8],[119,10],[120,11],[121,12],[122,13],[123,14],[124,15],[125,16],[126,17],[127,18],[128,19],[129,20],[70,8],[68,8],[130,21],[131,22],[132,23],[164,24],[133,25],[134,26],[135,27],[136,28],[137,29],[138,30],[139,31],[140,32],[141,33],[142,34],[143,35],[144,36],[145,37],[146,38],[148,39],[147,40],[149,41],[150,42],[151,43],[152,44],[153,45],[154,46],[155,47],[156,48],[157,49],[158,50],[159,51],[160,52],[161,53],[71,8],[72,8],[73,8],[112,54],[162,55],[163,56],[172,57],[171,58],[170,57],[61,8],[62,8],[12,8],[10,8],[11,8],[16,8],[15,8],[2,8],[17,8],[18,8],[19,8],[20,8],[21,8],[22,8],[23,8],[24,8],[3,8],[25,8],[26,8],[4,8],[27,8],[31,8],[28,8],[29,8],[30,8],[32,8],[33,8],[34,8],[5,8],[35,8],[36,8],[37,8],[38,8],[6,8],[42,8],[39,8],[40,8],[41,8],[43,8],[7,8],[44,8],[49,8],[50,8],[45,8],[46,8],[47,8],[48,8],[8,8],[54,8],[51,8],[52,8],[53,8],[55,8],[9,8],[56,8],[63,8],[57,8],[58,8],[60,8],[59,8],[1,8],[14,8],[13,8],[74,8],[169,59],[166,60],[168,61],[167,8],[165,8],[90,62],[100,63],[89,62],[110,64],[81,65],[80,8],[109,60],[103,66],[108,65],[83,67],[97,68],[82,69],[106,70],[78,71],[77,60],[107,72],[79,73],[84,63],[85,8],[88,63],[75,8],[111,74],[101,75],[92,76],[93,77],[95,78],[91,79],[94,80],[104,60],[86,81],[87,82],[96,83],[76,8],[99,75],[98,63],[102,8],[105,84],[174,85],[173,86]],"affectedFilesPendingEmit":[[174,51],[173,51]],"emitSignatures":[173,174]} \ No newline at end of file diff --git a/typescript/docs-autogen-scripts/.tsbuildinfo b/typescript/docs-autogen-scripts/.tsbuildinfo deleted file mode 100644 index 067863031..000000000 --- a/typescript/docs-autogen-scripts/.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"version":"7.0.0-dev.20260309.1","root":[280],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2021.d.ts","lib.es2022.d.ts","lib.dom.d.ts","lib.dom.iterable.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.es2021.promise.d.ts","lib.es2021.string.d.ts","lib.es2021.weakref.d.ts","lib.es2021.intl.d.ts","lib.es2022.array.d.ts","lib.es2022.error.d.ts","lib.es2022.intl.d.ts","lib.es2022.object.d.ts","lib.es2022.string.d.ts","lib.es2022.regexp.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react/jsx-runtime.d.ts","../../node_modules/zod/v4/core/json-schema.d.cts","../../node_modules/zod/v4/core/standard-schema.d.cts","../../node_modules/zod/v4/core/registries.d.cts","../../node_modules/zod/v4/core/to-json-schema.d.cts","../../node_modules/zod/v4/core/util.d.cts","../../node_modules/zod/v4/core/versions.d.cts","../../node_modules/zod/v4/core/schemas.d.cts","../../node_modules/zod/v4/core/checks.d.cts","../../node_modules/zod/v4/core/errors.d.cts","../../node_modules/zod/v4/core/core.d.cts","../../node_modules/zod/v4/core/parse.d.cts","../../node_modules/zod/v4/core/regexes.d.cts","../../node_modules/zod/v4/locales/ar.d.cts","../../node_modules/zod/v4/locales/az.d.cts","../../node_modules/zod/v4/locales/be.d.cts","../../node_modules/zod/v4/locales/bg.d.cts","../../node_modules/zod/v4/locales/ca.d.cts","../../node_modules/zod/v4/locales/cs.d.cts","../../node_modules/zod/v4/locales/da.d.cts","../../node_modules/zod/v4/locales/de.d.cts","../../node_modules/zod/v4/locales/en.d.cts","../../node_modules/zod/v4/locales/eo.d.cts","../../node_modules/zod/v4/locales/es.d.cts","../../node_modules/zod/v4/locales/fa.d.cts","../../node_modules/zod/v4/locales/fi.d.cts","../../node_modules/zod/v4/locales/fr.d.cts","../../node_modules/zod/v4/locales/fr-CA.d.cts","../../node_modules/zod/v4/locales/he.d.cts","../../node_modules/zod/v4/locales/hu.d.cts","../../node_modules/zod/v4/locales/hy.d.cts","../../node_modules/zod/v4/locales/id.d.cts","../../node_modules/zod/v4/locales/is.d.cts","../../node_modules/zod/v4/locales/it.d.cts","../../node_modules/zod/v4/locales/ja.d.cts","../../node_modules/zod/v4/locales/ka.d.cts","../../node_modules/zod/v4/locales/kh.d.cts","../../node_modules/zod/v4/locales/km.d.cts","../../node_modules/zod/v4/locales/ko.d.cts","../../node_modules/zod/v4/locales/lt.d.cts","../../node_modules/zod/v4/locales/mk.d.cts","../../node_modules/zod/v4/locales/ms.d.cts","../../node_modules/zod/v4/locales/nl.d.cts","../../node_modules/zod/v4/locales/no.d.cts","../../node_modules/zod/v4/locales/ota.d.cts","../../node_modules/zod/v4/locales/ps.d.cts","../../node_modules/zod/v4/locales/pl.d.cts","../../node_modules/zod/v4/locales/pt.d.cts","../../node_modules/zod/v4/locales/ru.d.cts","../../node_modules/zod/v4/locales/sl.d.cts","../../node_modules/zod/v4/locales/sv.d.cts","../../node_modules/zod/v4/locales/ta.d.cts","../../node_modules/zod/v4/locales/th.d.cts","../../node_modules/zod/v4/locales/tr.d.cts","../../node_modules/zod/v4/locales/ua.d.cts","../../node_modules/zod/v4/locales/uk.d.cts","../../node_modules/zod/v4/locales/ur.d.cts","../../node_modules/zod/v4/locales/uz.d.cts","../../node_modules/zod/v4/locales/vi.d.cts","../../node_modules/zod/v4/locales/zh-CN.d.cts","../../node_modules/zod/v4/locales/zh-TW.d.cts","../../node_modules/zod/v4/locales/yo.d.cts","../../node_modules/zod/v4/locales/index.d.cts","../../node_modules/zod/v4/core/doc.d.cts","../../node_modules/zod/v4/core/api.d.cts","../../node_modules/zod/v4/core/json-schema-processors.d.cts","../../node_modules/zod/v4/core/json-schema-generator.d.cts","../../node_modules/zod/v4/core/index.d.cts","../../node_modules/zod/v4/classic/errors.d.cts","../../node_modules/zod/v4/classic/parse.d.cts","../../node_modules/zod/v4/classic/schemas.d.cts","../../node_modules/zod/v4/classic/checks.d.cts","../../node_modules/zod/v4/classic/compat.d.cts","../../node_modules/zod/v4/classic/from-json-schema.d.cts","../../node_modules/zod/v4/classic/iso.d.cts","../../node_modules/zod/v4/classic/coerce.d.cts","../../node_modules/zod/v4/classic/external.d.cts","../../node_modules/zod/index.d.cts","../../common/js/types/import-types.d.ts","../../common/js/constants/import-types.d.ts","../../common/js/constants/grade-boundaries.d.ts","../../node_modules/prudence/js/error.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/@types/node/web-globals/events.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/file.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/filereader.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.generated.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/prudence/js/types.d.ts","../../node_modules/prudence/js/validator.d.ts","../../node_modules/prudence/js/static.d.ts","../../node_modules/prudence/js/util.d.ts","../../node_modules/prudence/js/assert.d.ts","../../node_modules/prudence/js/main.d.ts","../../common/js/utils/util.d.ts","../../common/js/webhooks.d.ts","../../common/js/constants/game.d.ts","../../common/js/constants/bms-tables.d.ts","../../common/js/constants/permissions.d.ts","../../common/js/constants/colour-set.d.ts","../../common/js/lib/schemas.d.ts","../../common/js/seeds/types.d.ts","../../common/js/index.d.ts","../../common/js/types/game-config-utils.d.ts","../../common/js/config/config-utils.d.ts","../../common/js/config/game-support/bms.d.ts","../../common/js/config/config.d.ts","../../common/js/types/utils.d.ts","../../common/js/types/batch-manual.d.ts","../../common/js/types/internals.d.ts","../../common/js/types/game-config.d.ts","../../common/js/types/api.d.ts","../../common/js/types/notifications.d.ts","../../node_modules/@types/bson/index.d.ts","../../node_modules/@types/mongodb/index.d.ts","../../common/js/types/documents.d.ts","../../common/js/types.d.ts","../../common/js/types/metrics.d.ts","./src/main.ts","../../node_modules/@types/aws-lambda/common/api-gateway.d.ts","../../node_modules/@types/aws-lambda/common/cloudfront.d.ts","../../node_modules/@types/aws-lambda/handler.d.ts","../../node_modules/@types/aws-lambda/trigger/alb.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/autoscaling.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-alarm.d.ts","../../node_modules/@types/aws-lambda/trigger/eventbridge.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts","../../node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts","../../node_modules/@types/aws-lambda/trigger/codecommit.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-sms-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/inbound-federation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v3.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts","../../node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts","../../node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/guard-duty-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/iot.d.ts","../../node_modules/@types/aws-lambda/trigger/iot-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/lambda-function-url.d.ts","../../node_modules/@types/aws-lambda/trigger/lex.d.ts","../../node_modules/@types/aws-lambda/trigger/lex-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/amplify-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/msk.d.ts","../../node_modules/@types/aws-lambda/trigger/s3.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-batch.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts","../../node_modules/@types/aws-lambda/trigger/self-managed-kafka.d.ts","../../node_modules/@types/aws-lambda/trigger/ses.d.ts","../../node_modules/@types/aws-lambda/trigger/sns.d.ts","../../node_modules/@types/aws-lambda/trigger/sqs.d.ts","../../node_modules/@types/aws-lambda/trigger/transfer-family-authorizer.d.ts","../../node_modules/@types/aws-lambda/index.d.ts","../../node_modules/@types/bcryptjs/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/bunyan/index.d.ts","../../node_modules/@types/http-errors/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/express-session/index.d.ts","../../node_modules/@types/redis/index.d.ts","../../node_modules/@types/connect-redis/index.d.ts","../../node_modules/@types/cookiejar/index.d.ts","../../node_modules/@types/ms/index.d.ts","../../node_modules/@types/debug/index.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../node_modules/@types/eslint/index.d.ts","../../node_modules/@eslint/core/dist/cjs/types.d.cts","../../node_modules/eslint/lib/types/use-at-your-own-risk.d.ts","../../node_modules/eslint/lib/types/index.d.ts","../../node_modules/@types/eslint__js/index.d.ts","../../node_modules/@types/express-rate-limit/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/google-protobuf/index.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/@types/history/DOMUtils.d.ts","../../node_modules/@types/history/createBrowserHistory.d.ts","../../node_modules/@types/history/createHashHistory.d.ts","../../node_modules/@types/history/createMemoryHistory.d.ts","../../node_modules/@types/history/LocationUtils.d.ts","../../node_modules/@types/history/PathUtils.d.ts","../../node_modules/@types/history/index.d.ts","../../node_modules/@types/humanize-duration/index.d.ts","../../node_modules/@types/lodash/common/common.d.ts","../../node_modules/@types/lodash/common/array.d.ts","../../node_modules/@types/lodash/common/collection.d.ts","../../node_modules/@types/lodash/common/date.d.ts","../../node_modules/@types/lodash/common/function.d.ts","../../node_modules/@types/lodash/common/lang.d.ts","../../node_modules/@types/lodash/common/math.d.ts","../../node_modules/@types/lodash/common/number.d.ts","../../node_modules/@types/lodash/common/object.d.ts","../../node_modules/@types/lodash/common/seq.d.ts","../../node_modules/@types/lodash/common/string.d.ts","../../node_modules/@types/lodash/common/util.d.ts","../../node_modules/@types/lodash/index.d.ts","../../node_modules/@types/lodash.get/index.d.ts","../../node_modules/@types/luxon/src/zone.d.ts","../../node_modules/@types/luxon/src/misc.d.ts","../../node_modules/@types/luxon/src/duration.d.ts","../../node_modules/@types/luxon/src/interval.d.ts","../../node_modules/@types/luxon/src/datetime.d.ts","../../node_modules/@types/luxon/src/info.d.ts","../../node_modules/@types/luxon/src/settings.d.ts","../../node_modules/@types/luxon/src/luxon.d.ts","../../node_modules/@types/luxon/index.d.ts","../../node_modules/@types/mdast/index.d.ts","../../node_modules/@types/mdurl/encode.d.ts","../../node_modules/@types/mdurl/decode.d.ts","../../node_modules/@types/mdurl/parse.d.ts","../../node_modules/@types/mdurl/format.d.ts","../../node_modules/@types/mdurl/index.d.ts","../../node_modules/@types/methods/index.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/mkdirp/index.d.ts","../../node_modules/@types/multer/index.d.ts","../../node_modules/@types/natural-compare/index.d.ts","../../node_modules/form-data/index.d.ts","../../node_modules/@types/node-fetch/externals.d.ts","../../node_modules/@types/node-fetch/index.d.ts","../../node_modules/@types/nodemailer/lib/dkim/index.d.ts","../../node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts","../../node_modules/@types/nodemailer/lib/xoauth2/index.d.ts","../../node_modules/@types/nodemailer/lib/mailer/index.d.ts","../../node_modules/@types/nodemailer/lib/mime-node/index.d.ts","../../node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts","../../node_modules/@types/nodemailer/lib/shared/index.d.ts","../../node_modules/@types/nodemailer/lib/json-transport/index.d.ts","../../node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts","../../node_modules/@types/nodemailer/lib/ses-transport/index.d.ts","../../node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts","../../node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts","../../node_modules/@types/nodemailer/lib/stream-transport/index.d.ts","../../node_modules/@types/nodemailer/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/parse-json/index.d.ts","../../node_modules/pg-types/index.d.ts","../../node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/pg-protocol/dist/index.d.ts","../../node_modules/@types/pg/lib/type-overrides.d.ts","../../node_modules/@types/pg/index.d.ts","../../node_modules/@types/rate-limit-redis/node_modules/@types/express-rate-limit/index.d.ts","../../node_modules/@types/rate-limit-redis/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/react-google-recaptcha/index.d.ts","../../node_modules/@types/react-router/index.d.ts","../../node_modules/@types/react-router-bootstrap/lib/LinkContainer.d.ts","../../node_modules/@types/react-router-bootstrap/index.d.ts","../../node_modules/@types/react-router-dom/index.d.ts","../../node_modules/@types/react-transition-group/config.d.ts","../../node_modules/@types/react-transition-group/Transition.d.ts","../../node_modules/@types/react-transition-group/CSSTransition.d.ts","../../node_modules/@types/react-transition-group/SwitchTransition.d.ts","../../node_modules/@types/react-transition-group/TransitionGroup.d.ts","../../node_modules/@types/react-transition-group/index.d.ts","../../node_modules/@types/rimraf/index.d.ts","../../node_modules/@types/safe-json-stringify/index.d.ts","../../node_modules/@types/scheduler/index.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/superagent/lib/agent-base.d.ts","../../node_modules/@types/superagent/lib/node/response.d.ts","../../node_modules/@types/superagent/types.d.ts","../../node_modules/@types/superagent/lib/node/agent.d.ts","../../node_modules/@types/superagent/lib/request-base.d.ts","../../node_modules/@types/superagent/node_modules/form-data/index.d.ts","../../node_modules/@types/superagent/lib/node/http2wrapper.d.ts","../../node_modules/@types/superagent/lib/node/index.d.ts","../../node_modules/@types/superagent/index.d.ts","../../node_modules/@types/supertest/index.d.ts","../../node_modules/@types/tap/index.d.ts","../../node_modules/@types/triple-beam/index.d.ts","../../node_modules/@types/warning/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/@types/yoga-layout/index.d.ts"],"fileInfos":[{"version":"a1aa1a5e065d48ef5c7bb99e38412f96","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d4306fb2e47f74835e8674ffac07d76f","impliedNodeFormat":99},{"version":"e437c5c1302869326c3bb93da85bbbcf","impliedNodeFormat":99},{"version":"e4324975a566567b21d350615f1fc6ac","impliedNodeFormat":99},{"version":"333b1b9a2a9ac3b8497dba5c63b5ba50","impliedNodeFormat":99},{"version":"6cffacd662b6eb5fa7a36aa2ea366bfa","impliedNodeFormat":99},{"version":"b4c34f9c23304dbef2d23698637ed638","impliedNodeFormat":99},{"version":"e5cb86a5fc491796ecd1d2dd348d208f","impliedNodeFormat":99},{"version":"feb6c6fb19cdb246a5d8acb36a6901c7","impliedNodeFormat":99},{"version":"aae8996e8b5684814785a42cbbefcd79","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"abad6dd56cc8caf095c165df8124d237","impliedNodeFormat":99},{"version":"01ac052ec4a79e87229f90466a9645f8","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"edba5df642941aa062a62f6328c6df3d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"bb3a710cbcda0533bb127712927cbe37","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7a42de379b489e8f7b647455bebfc576","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"692bcd75364db0f65d428801c7884466","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4ef72aa378127e7b7abba915b0110b1e","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3ec74c6a7d4463f0254db3a74cf75646","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"84c2bdfa470d075526cce6322d81b0b6","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0b3844c2b8c73e4e1ab91431411cad11","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4fc71cf4a15b8d99675a31df77f26e07","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d1b49564ddaeca3df5b6dbae925d2242","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6a25be566d60ccfc2d6e8b7bfdeefa83","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"8a20e27646985dfd58c57ca6566553dd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"9969f02ad3cdcbf4f709405cda44167f","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"9c9be4792a7a4f42c15ae7360bf28779","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7376cd32b4c24f5e3471d538cce0a6cc","affectsGlobalScope":true,"impliedNodeFormat":1},"afd868916e9e1d1fc494f6573e112e3f","52b842fca322a4b30f1f7b8cab78ab88",{"version":"7b395e75f006f1b735d397f8db9f19de","affectsGlobalScope":true,"impliedNodeFormat":1},"d63279d4a4e3c8976c93acccdbad5cee","5f3c015bce4302b247acedb9ec20e302","a9fe29dcdd4288cacf574947747a4572","daada721cfdc43aa8e7c2e2d14d760de","c4d7f2ab9358166b1815281a9e767232","2af86ade36e4051944f46da0fd1df525","90eb781c9a8145090ce17290f0744bb6","a3ddf6412484d665d76145ba7fa319a8","b53e5eafe089103ad7be4f243fb517d4","344aa18a1a1f48b6d51fa564e2910864","ffd8c3d2e39447925561777d1ebcdc02","2b76267afeb2e83dff758e3fba2faa8a","662eae47724ed2ca873fb608034d0645","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","360c84ef5634445ed4b1111f041b6212","a21f1b172546b6a64cc7ddea394b54ea","937e86ab76f06c8dbd613be6555c03b6","8bdf05c98551836db89f23d60d176f56","5b3f18777c97e7ed444a39661c4462ba","cd3b63580b271a0e93649c0d92a1b098","1cc59f020b9d62d875bdb28a6e2f745b","a06c5977df8ff3f289f16a7505c8d539","652a1f711ddcd6149df9fc04c2d77ec7","f04158c558df8c51d46a1fb44c832c1c","d1ab6402ad42100de1cf3f5d15aa9d27","96b06af537c71de0a80e9ed880958afd","dec40354e62d8ca81f5996c1760bc6da","a9356de7c324c6f49c15587032b1f65f","9db07004a5d271a5a4c3f499ed8a033f","ec7a3f5e189221b1a18bed55a592c89d","927c49f0f45c68c58ffd6b9cf87aae4a","b5e4b85cdedafe03af4b37863fc196d2","4cd7618cc2881d93b492a15623da2371","16a3bf4e99e3275960702bbfcbbfa9d8",{"version":"90630acdc4134173bcf216f187bd3010","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"913b52a39743d1c11984e4e124b1f3a8","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2514e9a2749c0fc18d2f478e9e1e641e","affectsGlobalScope":true,"impliedNodeFormat":1},"fe51d7a9bcdbcce1e65bbcf39b212298",{"version":"849a1873c4e917b0887368c1be897faa","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"c46c3108bde06d3b1fc6f802eb09eeeb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1332add604574cf529fb33b23304b296","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9af0a7e3ef1c42cd066b9f8d365cc1ba","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9eca652586205dc5b07f9ba57b1c8500","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ec5f75939754ce94652189ec7d0d3058","affectsGlobalScope":true,"impliedNodeFormat":1},"e2f0114efc512fd95bdc12c81d5e8d6a","628b774b54637325e286752c79c12432","bb1f9e3091b88e9d0e93b7198c736af3","514fd35e5eb35bb2e5cbb908af0a0aa2","ed57ae88565308729f2327f26d684976","dcd932d6b0038f2e250e30dc10125b22","9508c917bd7e458745e222a82dd24ef0","fabf86f455f96b90538cc26320ab2765","14550b4cd9f433e0addd8b6d67614d23","cf0ac6aebc25cb780674653aaeee688e","35fef7bac8048f583e4ce6eaa0c2a4c0","6752dc653fc7a333027249fd851fdb62","b9ad7e689b46dfba362c1bf174e69018","8b0a2930dfabdf27c69c6bb1eeabcdc8","4513b1ed15523d247040689f37fa9db2","5c0c499eed773a750903d9497beafacd","2377da227d1bac82ff7b3f2081ddf8d3","beef985b474fefeb80d27fb2c8778371","c79fc9d9f09ae598a374ae7c0b5284a4","f2caa3cebb1e6be855519004830a6be0","8ebc9f2a77c900e710801214c5cb994c","ec617a0e0577dd6a3210c3b067ecb325","1db5d06e485bd82d6d5f6e36925a8714","24b864518967840216c779b5e5f00975","8719cd8047700bfb6046798390053823","f2840afb502c94db92dab0fb8d27812f","a7e7d08b372210c203745d3eac61a411","531183cc80535e0e94226d720e5eb038","f627eb958ca52c85e42f04dce4661f86","9a43fc665bce9012a3d5fe1b574ff4dc","13f4b4da6546a34719fd6bde15fb63dd","a589216508844bfc00e62fc2d97fda45","865aea1c3209e31b076cb6fe780e769e","12e64aaf26af0f5c8f1b263dd66e3feb","928971ebbcdf5b093ef37669b33bddf6","b744265d8ad12b7d4d5c5dc35d18d44e","eff32168b8348b822afeed9cbf61afa7","9aafd1f29b4d8861c1c6c34bf83c0721",{"version":"a127795c4dad633990c87aa0b86831e5","affectsGlobalScope":true,"impliedNodeFormat":1},"4ef82d390af85e719a46d566e229dd83","7deced3ef46e082f97d49bb71622526a","fa7acb320bbf7da8f76e431437143034",{"version":"ee57e9bfec6167b488ced231a7bf233d","affectsGlobalScope":true,"impliedNodeFormat":1},"7aa99080b86233d5b21416907d7a75a6","7d6a8df1becce5c270da2093e7835920",{"version":"c37fea1584ced70492ff5748ed570abd","affectsGlobalScope":true,"impliedNodeFormat":1},"b2b472cd0bf0f8d5f022e00ca1c401f4",{"version":"e22c8fb0fc65df14299c6c94cf729b3c","affectsGlobalScope":true,"impliedNodeFormat":1},"a84efb87b57f78ea0b0577edaacd8b33","814e0c2cc2a92531b6dc5d2a1767a6e1","79ac55b2d493df83277d681e4d64a992","7ab3b7243211fa08af307609be231d6c","7fd0f028e135bdf15ff757781a2f4ba9",{"version":"cab5b406d3defff17c931e41fa98aeb1","affectsGlobalScope":true,"impliedNodeFormat":1},"aa7dc1db3d208fb91418794a18539d4c","e9b8fc3c9291fc5701e219c0407e973d","b8f5d7bb61117f48a99b0cecaa75d186","687b6f8f042393a27ce6c8fd32972129","1d3b57f542db6054f952f8076b3c6a3a","4e0ba29e69c1176d4b909ad8a85a2695",{"version":"e5d25a206975fb43b72d246ed86fd7fe","affectsGlobalScope":true,"impliedNodeFormat":1},"88822a7d78686871bb9c15cedd3f45f2","86308ea691fd06825dd9a3ce0f1e901a","44782881f424302151e0de8fdaa39575",{"version":"f0ef68e9c53d126a7b3bfc1ae9f2c7c4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"71259a408a4178e5f0795188b4d802f1","affectsGlobalScope":true,"impliedNodeFormat":1},"eb80d821e5e931dcccee2697f3e249e2","961969874f5ee12ed3429d3d0c82de02","9a62058bc2d476e807cc6594eed72adb","40cbc4bb3b225b03c54255154dada07d","6534825a8bda3eeecde9bca9e3a99712","09a582ab2a73806ab5887ea413b3d55a","a0592261111f47230eb35ee52c12e635","c8206d568b54e5ea06131963eecd576a","15878f4f50c2e562c0768eb735c2aed5",{"version":"b636ba40489f78f02a4b71322994828a","affectsGlobalScope":true,"impliedNodeFormat":1},"7b844f3801adf7e09ea25ec5f39f9a86","46c937d243665015f13587ac0db55909",{"version":"1f29cf27395029939dd41fce4f0c5653","affectsGlobalScope":true,"impliedNodeFormat":1},"f026c594d60114f10583261f6499df38","1ac553606580aeec204cce24c38b2e3f","3c29bf7066a67e7151f563fc1c4e56cb","00d49834780046c2d6a7da3e50d83cca",{"version":"377c78771ee061f2b4e59d5eb5a28782","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7293552290431bff8ef5f13e6f7fcbfc","affectsGlobalScope":true,"impliedNodeFormat":1},"9453ee3aca6a51ae747057fbc6388cf2","6c491c1508bd3e1df0f45f38b07243c2","1f99b8445612afcfaae0f8591d8d18ac",{"version":"bbd4e0ea8a847a4b60ba7d5741985c9d","affectsGlobalScope":true,"impliedNodeFormat":1},"f57ef54941c62bf28f3beafb86025735","7b6c16d46b33570aaef9d0fdc4f02f14","cd5c183c2bad150213a0cccaafe937e2","d6ea403bc9232d6fe7e7622a88f42faf",{"version":"7fa578df98e59f9f70329e3e06ae7784","affectsGlobalScope":true,"impliedNodeFormat":1},"2a85fc47377fe0593e11df0805c37b24","0bf60b6ce895c720124a6b0aba87990f","f5da2e5790c2d5acd98acdce0b2c6a60","0997be57498f2b766cc3561c7df58f06","4f8a359db312d088f12df2b4333c70b2","c5bea81fda0ed705abe31dfb992bebbf","02bc0d4b7ecbca94437680a982525a3d","0404adf603fad8732cfd40fdbb852deb","d0cbaffd8d6c62fcd3f67d23a72cc0a0","d84b797323d32ef97c917e4c8108430a","7640a075842dbf3c5e764fa93975c452","ebd0758225677c1d0cd22765d76cb6ca","902dc7b68ab83a907358d239a8cc6d49","67d21f8d2a1dcd5fb9e783fbfe2db41c","ae53c0698b5db07fbd171471de9c9d26","99a82f62dda21efe5d337803128218c2","a442ebb1b6edfa29639d4a24f5d1c396","3d70b921157a6a89c44d605c61a3591a","0654472e60fa7ed76ac399023993a1b2","976e5a411658c3f3d932e58c7009dd18","ce9bc852a89abeb28a2e1944a67a38fd","d256a25b91a98fe284eecdae65806a6a","95be56cf50505206cc22c347ab8aabeb","7e58f15b70f2d5b5a7e8cb98a02f3d3c","e5a78b9126ed06f1747157ce45aa6e3e","29c297b3336e6ee3c2b9aa7c7dbdf00d","07841866bdfb5333a0eeb445e8052006","6920f70bd1a2a0d843f303d97bf5a34d","16d1ee2ebc180b469f8bf4fc719c4fd3","690366c4a4745cee21a794496be37fac",{"version":"dae34298b7ed4a4f5b356421d20e017f","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"e16ee2cba8fccd4888dda67d8313af8f","09236d421d18c90c9cf2b1a62df88e93",{"version":"8c9f31c32a5525bd747cf424bc17f778","affectsGlobalScope":true,"impliedNodeFormat":1},"9da7817000afeeeea3222d0ff2a686c6","2cfba9984aed78da242b0a21e3f38a2a","e93eb137b979617ec06b22a362976ce6","c0ec98811b4559ddda1f61ba53e1d2d4","9de6d4b67fc1b39b6dda81b6f93579dd","f150286488a8ca9e5402dd15c8957340","31ce40f173f27100522a719437fcfd9c","01253493709f6c42fb5b70e764ef90cc","7aa0667e23415be0a645dfcf2b47c82e","4efac62cab7941afad9cadf1d94be7f3","e0f557cdd6695b87547a877b69ca38b9","70ad1c3b71a769b2a1a584c774788db7","642f6536f2a6b5bdbafd4e25f407d2c7","1db38078e8dbd37f16947069fd0093c6","fe812c7b8986cf1c50ce352e9e3f8c89","a9b6a70f9e138db0cacf973b904f9ce8","138603e1e6787901dc8761a2803a6310","8cdf819bc802d165541b23781a845948","23133f69c05e8d7c456e1a9d68c1fffc","89bcd59d3d48cb11935ff1cfa15070f3","6502191f732e6a899b71d18f2cb7a669","83a6c12fe0d568638a6e8db98c137c49","844210e48517107ab0fa5a7e40edbba4","3c2f892a82b351392b98c312e067fa15","cc262de9275b1c5fa529688f33ceae7f","7acde96d9deadd2884a93ae4bba972da","767f37418b3ec86d2e6fe3e3219c64f7","b7f217cb2b3f9082360e5684f55f8cc1","bffc4e97a99bff31a3686a5c688581f0","8ce2d57bab6ef91e5eddacbf7d7f0181","0331baa726704b161af0efe64f980e41","3e47b1dab9282fd8fd4922d3f0655314","0e52a45f8d24b10b300a582bbc389238","38586984d045a69166f13015d71501b2","256153f676e34a933916962fe97f4749","da107fb4df9e8676ccef0f7b37ea53ce","0991cffb042883e18ab62d233b31d3aa","428c7c416f9ef4b684745ecd18800cdf","2732b197815df32818230d9e433fe682","6f29a9c10351aafe84986db22f67df8a","b41b7744429d74640dd2a1cb87b3199e","09182295d359b15a9facd08f8fd51966","6c7c40d6161213505b0b2a0991aa708b","c61dcede83e20904c8751b2d08beb296","6a1ef55dc603c92ba031491cf46c78a6","6d6c5e4f921002d2a37f4e7750513f8c","d9d2d04eb9d7c7a35ea9249d96ab66e9","c92e37bef68312b0809b209dd35bc2ee","46d5eb0382f3ca27ce2af109ac132709","1f9ff9d0706bcf42c48445798e0aa736","18c29f2c9116baa565528501a8d7a367","0fba992bccaca17b160c8f20986c8b30","a4e850cd58d40f96cca03c145e523ea7","1f18f87f73dd7802d6ac6d69f9791f58","cd88c0466b9ef15bdbc49bfe4acd11d5","7842952684833f73af52e689186b8804","04092ab5516d57c53e4b6d4385217184","1372fea4f73fc1f594cf3ffa58c56484","c8693ee5630c780142bb6a834f71cb9d","42a13551ef0ce9e68aef58b6a4ac31fa","fbb1086d78fad2e81eefa859d53b6ffd","fa614d3a843db2f4f4f804155cf537a6","db4704d82c740ed3bd067c9bae72d092","f8059a9ddf1aeefd103fce9c853541b9","f100181a3e9ff7f5b23eed47dd66a1de","c4437a75ed05801f47848d00286b7f3e",{"version":"5a297566b9863f5dfd9c8d4850ed8af4","affectsGlobalScope":true,"impliedNodeFormat":1},"81ffe24ac8999f2e25fff992831b7324","02575b4ec4091570b193cc6ca8e6821e","fdf29cba6a2cc2f1f28f95f337ae66a4","58e9b716b50fdc8506289bd37edd9a55","8f4109203208f26263f439ab576f3820","4501167a04f84205017251407e6ed43b","295c0cb8891e7424d3a27dc56dc1b430","e1d3f27d8738af5fa721eed17a4e4d69","a6965f10e458de7e18e283070aca6c05","9d9ae7679668928510f3c7d0f678969c","1c17807e0ad03afd162d77cb40ad5309","7749a56d15eb26058bcfef426d94139b","9b7ad984483d8ffb801e212338bc8f2c",{"version":"1bd9c33fa4dc9f5db21e3499cce058e6","affectsGlobalScope":true,"impliedNodeFormat":1},"112adfdfe0121f630c2187e89145ee2c","da3da10502293a0e1bf580ef6c26486c","f9dccda118924be25899c703ae07bf83","9befaa4adb42627db765639b7b5ba193",{"version":"8c6ffdee98d8e8323825d4ec4d2c6ee7","affectsGlobalScope":true,"impliedNodeFormat":1},"3ef6bce1299faf411f33ab1bae59a884","086accdf702b13dc96a5cc430c0c5fe4","2746dbce860e8644ce715860fb7f880b","7dec06c9860e0c2431b1f63823cd58f3","c15e75315b24033b53bf1716c810bc55","2a4d28da0f4f4a73c6a6ca0b70432196","2441a7d236246e3191870102259d866c","182d0810dc5bdb879a67cc73a54ab2e3","1131df6a1351dcd15a42b4f3dc2c26bc","bc4823928adf48deb7c79ccc4775af03","1b3158a1a6d317b1c468286c3cf11a52","54dd1676bc6db5ce3e64a4eef95409c9","32fb98b3fa25d2c284822d8b409a5a70","8c895bc59b75fb4c3c7a83990ea8e5e3","9abb48a6060724febe2476521e93fe94","34e8d5bbd90cfb7d60388aad23d2e702","a62d8dafef1e7f21c6440685faa5ce88","acffc5529515007024548e136a409ff2","088e36755fde5ceaad9cb5dea73f3ab3",{"version":"29fc9434962e9a75367715ae674704df","affectsGlobalScope":true,"impliedNodeFormat":1},"0cb91525c248fbd47796f4b66bf6d1ce","52d0b2118c50f027c3e705fb3a5b3a76","6835b3cccbe7b95c93e13a5d2188af82","ac4f57a25ce44013001d94a713084cbe","e64c6ae74fe4629d2dbd4cbc0327523c","ea87a90387d7680c978dd4af6a7451c8","7c397e72523aa26bbf2d48cf765213d2","9292df5c013e4ea9da035de7faa497e6","36ccb3844d98882c63be347b7c67c0a3","37c3bfc01246d2b6cd575bddb0ea9d1b","079f4855e44a9ca9b014e5a860bfb72f","cc495e570859464081995c5735f3badc","9f2f4a4f07a3455f4d52a26f7a4b8fcb","c7eb90a6d4e18b33d0eeba6074e872d4","2baf2a8f6a612cd1295f79f3e873a2a4","ad276fb55297e6d29fe65d795d7e7ce4","e2a8e187d8a7db24931ea2c655d52c80","0db97d91db6e499a5df8e99257afe07c","af4e50cb99ba66919d9a70c28bfc5e24",{"version":"ff4d71935967e02fbe90430738a46c4e","affectsGlobalScope":true,"impliedNodeFormat":1},"2f1bb71d08da4fe6737ce0fd504fab4f","80934c477870fc97980d6296f5e7f063","98e86452fc67f68abc49450eb5f01d73","9916f4848c2282b9cb588a41f6b7d823","d9baefe45beff3fcb99e0e879c4b3a1a","a0e5e2be58876b4545cb3be195801e6e","1aa0fb5fa5d8275b5db27bc931aa1975","3449ea63993a991312e0e444ece2382b","7e5c546175ec5fae4c0e494ad24c5b90","bc6d97e46a1dafb8e8d1b601ccaf7e1a","579e6d11933f5644dc142c0a4e79c645","2a9d6baa2c42865fc9f5e7516d0910de","9ca582829e8eba4129943a1a941c6bbe","2aef22a88fd7dd975ba87f7c8e099fc3","836ca98928668baf27ac19645c07198e","757a8e678340c7a0aa01c699d2084933","48c676e5241e9876faafba68ef7d6d26","c3201c3dc232ea9f79fd9034b036ba94","8829f5982af596616a839da1807c12a2","5c4f67e441d334f46ff34670f61b22cd","25d40df8bff69a330a687d98bdbc2eb6","87175b4aa2f6ef2d25834a1969a45b51","be8b3bcdd2ba7d7c8c87946a20626c5b","b52b31c86a05afbf7cc827a8889b69da","cd8070bba6df1e7a7b65224ab106d7d0","ce15efa1c092340d16d533b69f4fb1a9","6b72f2919a3ebe1223b418b9bc920d7e","292f07f2059da3d1699f18623544d2a8","bd29402f5bac2be501b52a3a0ec997a1","da1fd4bfd6803838104ca05c0ed7fadc","55775a298812b43e9114dabd88a8918d","48500b61fc86a5b4dbba2c94adf5214d","08438df3f7f27a87056551849edd15cd","6aec5e4ab841d50c79df02ede12103ef","cec011fd991c3267563c5309daf65ea2","aa13fb67f56469e7590006108066e0be","e30cd47fea0096ba312924f04657fcfd","f12c7bdfa7c2ad0fe84247f800b9956c","d40cee60c3c264a4c1cd9c1013dbaac7","bec0d6e171cab6b12d98455bf99217c6","92fe312f908112181c00a3d36883a58e","3720c6074ec2bfeba0a1d638ab26a0bb","a041df5c00a7c9e6343c519782e99329","0303d7f5e0d019fa88ca2945794fa8d2","9dad91c6969461f75aef8fc683a9376e","c33ae00968f45dfe2ef2bea7966cf6c5","18c8c018e7e8a2f4ae676f8661110c6d","24d9b69b67823f208423e5796b79c23b","bf799332c55c6eb4a6d9d652d6dda457","3948daef404f94c35fb3ceca755a27d6","cd2ad42b2eff27f2277cced9b91b270e","304539db53f7fe3cc4bfd5878b7223fe","9c56184330b09c7c690ed42d3bcff59d","450ca6229325f8123bea072e71c866ed","88d22ddd44a72912036f38833360b8f1","edeec51072253363d7345541bb78d745","32d5973e5b42693387462b0998810615","db80558b0bf2653338bcf91434263fda","0136b37037b7ce74caaad4abcdd15237","e6179eee2131e249ccd9f2dd960b92b5","c089839d8abcdfe1168ebde55894cad4","097a7aae20edb8e5de5f45463d6fa417","c1df21c2195796f767d0e03cf9ac00d1","1362b703c4f9be29bd918a71a07b7e6c","f71afe5e74b683a5260d9b7dbd741104","adcc06f04eaa91f672f07e00c5f63eec","6ea7a8edac19a93df999f41b0058f2a2","563051f5836b5e450d5c9868552c9685","e41fb55415372b37046b46fd27a3e8b9","649b0e8e352b40125538627774ddccd6","b1c43dab0c298c8661b08e49779c32a0","239019e12520a280526af43974a0aeca","ec8beec2c9e2259c26be90574cb94989","57d6b728909ea2c50bf50e0e19c99b8c","93f871c7865a245efe8b0b2405a09c9e","b9b7a66404c8da7d1fc634a7a69a989e","0312a7938ed343c86f23d1178be1a62f","0d34e16363c4b2e88f9be19c0eda14a3","b4646a5c02912f7b2e8ce18a2f960bb7","4ba759be6e6d6510d41817c11f60c6d2","482e3e94bb83169ff0a2f1cd516c9394","9e07e42545fb1aba960b46e3d676c245","bd8fbc7e2e26a4686f8b4c45386a46db","ad1145336b61b23d724d3923b953ae82","3fb91489cde0479c146410f814c27749","589e3a40397dc48971ac6612dca9896b","86d78487119720cc47028100d7bb39d1","91535037303b09ae267a5ee85f9efd85","39f77cd7e5d49be8457371af1c217c22","80934c477870fc97980d6296f5e7f063","928a0d860e4d81f663a40bb1a5b4b1fd","e2eef8c06c88bf82bd89bd640527a835","0238452f4fa45cb934637e05d02d1db8","ff00d59cbd64d6d0ba3e1d83e11ca21b",{"version":"a62fe363e41eb53f7404361a8232f476","affectsGlobalScope":true,"impliedNodeFormat":1},"ec4eccca7dc09c8eac03e58d5704c74c","4e3963a0487d205b3f1ca917119aa4ac","19c7641b62556c1c081bd997e2f32a2f","de3e3ebddccbc9fe1e96a37b45aff49d"],"fileIdsList":[[141,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,265,278,352],[131,141,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,264,265,266,267,272,279,352],[141,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,256,265,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,278,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,272,352],[142,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[143,144,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,256,257,258,259,260,261,262,263,268,278,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,255,272,352],[142,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,270,272,273,274,277,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,269,272,278,279,352],[142,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,273,274,276,278,352],[141,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,265,268,269,270,271,278,279,352],[141,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,265,270,279,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,272,277,278,352],[141,144,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,255,278,279,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,272,278,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,264,265,279,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,357],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,283,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,283,287,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,281,283,285,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,281,283,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,283,289,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,282,283,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,294,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,283,300,301,302,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,283,304,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,283,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,283,286,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,283,285,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,283,294,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,344,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,349,350,351],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,354],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,356,357,358],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,359],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,362],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,349,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,248,249,345,348,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,367],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,375],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,369,375],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,370,371,372,373,374],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,379,380,381,382,383,384,385,386,387,388,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,378,380,381,382,383,384,385,386,387,388,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,378,379,380,381,382,383,384,385,386,387,388,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,378,379,381,382,383,384,385,386,387,388,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,378,379,380,382,383,384,385,386,387,388,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,378,379,380,381,383,384,385,386,387,388,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,378,379,380,381,382,384,385,386,387,388,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,378,379,380,381,382,383,385,386,387,388,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,378,379,380,381,382,383,384,386,387,388,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,378,379,380,381,382,383,384,385,387,388,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,378,379,380,381,382,383,384,385,386,388,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,378,379,380,381,382,383,384,385,386,387,389],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,377,378,379,380,381,382,383,384,385,386,387,388],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,398],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,391,393,394,399],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,392,395],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,391,392],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,393,395],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,391,392,393,394,395,396,397],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,391],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,405],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,401,402,403,404],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,275,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,411,412],[151,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[146,147,148,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[149,150,151,152,153,154,155,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,244,245,352],[151,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,415,417,421,422,423,424,425,426],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,415,417,418,420,427],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,414,415,416,418,419,420,427],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,417,418],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,417],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,419],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,416,418,420],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,415,417,418,419,420,427],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,415,416,417,418,419,420,427],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,420],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,430,431,434,435],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,436],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,351,352,437],[63,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,442],[63,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,375,441],[63,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,375],[63,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,446],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,445,446,447,448,449],[60,61,62,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,365],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,455,493],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,455,478,493],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,454,493],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,493],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,455],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,455,479,493],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,479,493],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,347,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,501],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,353,406,494,496,502],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,406,495,496,497,498,499,500],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,495,496],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,495],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,502],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352,356,360,361],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,431,432,433],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352,431],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,250,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,250,251,252,253,254,352],[145,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,249,352],[151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,249,250,352],[145,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,250,352],[151,165,169,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,165,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,160,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,162,165,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,160,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352],[151,157,158,161,164,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,165,172,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,157,163,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,165,186,187,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,161,165,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352],[151,186,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352],[151,159,160,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352],[151,159,160,161,162,163,164,165,166,167,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,187,188,189,190,191,192,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,165,180,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,165,172,173,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,163,165,173,174,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,164,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,157,160,165,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,165,169,173,174,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,169,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,163,165,168,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,157,162,165,172,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[151,160,165,186,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,352],[140,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[131,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[131,134,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[126,129,131,132,133,134,135,136,137,138,139,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[65,67,134,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[131,132,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[66,131,133,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[67,69,71,72,73,74,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[69,71,73,74,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[69,71,73,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[66,69,71,72,74,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[65,67,68,69,70,71,72,73,74,75,76,126,127,128,129,130,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[65,67,68,71,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[67,68,71,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[71,74,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[65,66,68,69,70,72,73,74,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[65,66,67,71,131,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[71,72,73,74,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[73,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352],[77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,151,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,352]],"options":{"allowImportingTsExtensions":true,"composite":true,"declaration":true,"declarationMap":true,"jsx":4,"module":199,"noFallthroughCasesInSwitch":true,"outDir":"./js","rootDir":"./src","skipLibCheck":true,"strict":true,"sourceMap":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","useDefineForClassFields":true},"referencedMap":[[266,1],[268,2],[267,3],[259,4],[261,5],[258,5],[144,6],[143,7],[260,4],[264,8],[262,9],[263,4],[278,10],[273,5],[270,11],[277,12],[265,5],[272,13],[142,5],[271,14],[279,15],[274,4],[269,5],[256,16],[257,17],[280,18],[360,19],[281,5],[282,5],[283,5],[342,20],[284,21],[331,22],[286,23],[285,24],[287,21],[288,21],[290,25],[289,21],[291,26],[292,26],[293,21],[295,27],[296,21],[297,27],[298,21],[300,21],[301,21],[302,21],[303,28],[299,21],[304,5],[305,29],[306,29],[307,29],[308,29],[309,29],[310,29],[320,30],[311,29],[312,29],[313,29],[314,29],[316,29],[317,29],[315,29],[318,29],[319,29],[321,21],[322,21],[294,21],[323,27],[325,31],[324,21],[326,21],[327,21],[328,32],[330,21],[329,21],[332,21],[334,21],[335,33],[333,21],[336,21],[337,21],[338,21],[339,21],[340,21],[341,21],[343,5],[345,34],[275,35],[346,35],[352,36],[344,35],[353,5],[355,37],[359,38],[358,39],[363,40],[356,5],[364,41],[249,42],[350,41],[349,43],[365,35],[366,5],[368,44],[369,5],[373,45],[374,45],[370,46],[371,46],[372,46],[375,47],[347,5],[376,5],[357,5],[390,48],[378,49],[379,50],[377,51],[380,52],[381,53],[382,54],[383,55],[384,56],[385,57],[386,58],[387,59],[388,60],[389,61],[399,62],[395,63],[393,64],[396,65],[394,66],[398,67],[392,5],[397,68],[391,5],[400,44],[402,5],[401,5],[404,69],[405,70],[403,69],[406,5],[407,5],[408,35],[276,71],[354,5],[409,41],[410,5],[412,5],[413,72],[195,73],[196,74],[197,75],[151,76],[198,77],[199,78],[200,79],[146,5],[149,80],[147,5],[148,5],[201,81],[202,82],[203,83],[204,84],[205,85],[206,86],[207,87],[208,88],[209,89],[210,90],[211,91],[152,5],[150,5],[212,92],[213,93],[214,94],[246,95],[215,96],[216,97],[217,98],[218,99],[219,100],[220,101],[221,102],[222,103],[223,104],[224,105],[225,106],[226,107],[227,108],[228,109],[230,110],[229,111],[231,112],[232,113],[233,114],[234,115],[235,116],[236,117],[237,118],[238,119],[239,120],[240,121],[241,122],[242,123],[243,124],[153,5],[154,5],[155,5],[194,125],[244,126],[245,127],[427,128],[414,35],[421,129],[417,130],[415,131],[418,132],[422,129],[423,129],[420,133],[419,134],[424,135],[425,136],[426,129],[416,137],[428,5],[429,5],[436,138],[435,139],[62,5],[248,5],[247,5],[438,140],[437,41],[439,141],[440,141],[443,142],[442,141],[444,143],[441,144],[447,145],[448,141],[446,141],[449,145],[445,5],[450,146],[60,5],[63,147],[64,141],[351,35],[451,148],[452,5],[453,5],[478,149],[479,150],[455,151],[458,152],[476,149],[477,149],[467,149],[466,153],[464,149],[459,149],[472,149],[470,149],[474,149],[454,149],[471,149],[475,149],[460,149],[461,149],[473,149],[456,149],[462,149],[463,149],[465,149],[469,149],[480,154],[468,149],[457,149],[493,155],[492,5],[487,154],[489,156],[488,154],[481,154],[482,154],[484,154],[486,154],[490,156],[491,156],[483,156],[485,156],[348,157],[502,158],[494,5],[497,159],[500,35],[501,160],[495,158],[498,161],[499,35],[496,162],[503,163],[504,35],[505,5],[367,5],[506,5],[507,35],[508,5],[58,5],[59,5],[10,5],[11,5],[13,5],[12,5],[2,5],[14,5],[15,5],[16,5],[17,5],[18,5],[19,5],[20,5],[21,5],[3,5],[22,5],[23,5],[4,5],[24,5],[28,5],[25,5],[26,5],[27,5],[29,5],[30,5],[31,5],[5,5],[32,5],[33,5],[34,5],[35,5],[6,5],[39,5],[36,5],[37,5],[38,5],[40,5],[7,5],[41,5],[46,5],[47,5],[42,5],[43,5],[44,5],[45,5],[8,5],[51,5],[48,5],[49,5],[50,5],[52,5],[9,5],[53,5],[54,5],[55,5],[57,5],[56,5],[1,5],[156,5],[61,5],[362,164],[361,40],[411,35],[434,165],[431,35],[433,166],[432,5],[430,5],[254,167],[145,5],[255,168],[252,167],[250,169],[253,170],[251,171],[172,172],[182,173],[171,172],[192,174],[163,175],[162,5],[191,35],[185,176],[190,175],[165,177],[179,178],[164,179],[188,180],[160,181],[159,35],[189,182],[161,183],[166,173],[167,5],[170,173],[157,5],[193,184],[183,185],[174,186],[175,187],[177,188],[173,189],[176,190],[186,35],[168,191],[169,192],[178,193],[158,5],[181,185],[180,173],[184,5],[187,194],[141,195],[135,196],[139,197],[136,197],[132,196],[140,198],[137,199],[138,197],[133,200],[134,201],[128,202],[72,203],[74,204],[127,5],[73,205],[131,206],[130,207],[129,208],[65,5],[75,203],[76,5],[67,209],[71,210],[66,5],[68,211],[69,212],[70,5],[77,213],[78,213],[79,213],[80,213],[81,213],[82,213],[83,213],[84,213],[85,213],[86,213],[87,213],[88,213],[89,213],[91,213],[90,213],[92,213],[93,213],[94,213],[95,213],[126,214],[96,213],[97,213],[98,213],[99,213],[100,213],[101,213],[102,213],[103,213],[104,213],[105,213],[106,213],[107,213],[108,213],[110,213],[109,213],[111,213],[112,213],[113,213],[114,213],[115,213],[116,213],[117,213],[118,213],[119,213],[120,213],[121,213],[122,213],[125,213],[123,213],[124,213]],"affectedFilesPendingEmit":[[280,51]],"emitSignatures":[280]} \ No newline at end of file diff --git a/typescript/seeds-scripts/.tsbuildinfo b/typescript/seeds-scripts/.tsbuildinfo deleted file mode 100644 index fed9139fc..000000000 --- a/typescript/seeds-scripts/.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"version":"7.0.0-dev.20260309.1","fileInfos":[],"options":{"allowJs":true,"allowImportingTsExtensions":true,"composite":true,"declaration":true,"declarationMap":true,"jsx":4,"module":7,"noFallthroughCasesInSwitch":true,"noImplicitAny":false,"outDir":"./js","rootDir":"./","skipLibCheck":true,"strict":true,"strictNullChecks":true,"sourceMap":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","useDefineForClassFields":true}} \ No newline at end of file diff --git a/typescript/seeds-scripts/import.js b/typescript/seeds-scripts/import.js index 95307e1aa..5acc4bb65 100644 --- a/typescript/seeds-scripts/import.js +++ b/typescript/seeds-scripts/import.js @@ -10,7 +10,7 @@ const { Command } = require("commander"); const fs = require("fs"); const path = require("path"); -const logger = require("./logger"); +const logger = require("./log"); const program = new Command(); diff --git a/typescript/seeds-scripts/log.ts b/typescript/seeds-scripts/log.ts new file mode 100644 index 000000000..1fa0e551c --- /dev/null +++ b/typescript/seeds-scripts/log.ts @@ -0,0 +1,15 @@ +import pino from "pino"; + +const useJson = process.env.LOG_JSON === "1" || process.env.LOG_JSON === "true"; + +export const log = pino({ + level: process.env.LOG_LEVEL ?? "info", + ...(useJson + ? {} + : { + transport: { + options: { colorize: true }, + target: "pino-pretty", + }, + }), +}); diff --git a/typescript/seeds-scripts/logger.js b/typescript/seeds-scripts/logger.js deleted file mode 100644 index 663658d92..000000000 --- a/typescript/seeds-scripts/logger.js +++ /dev/null @@ -1,3 +0,0 @@ -const { CreateLogger } = require("mei-logger"); - -module.exports = CreateLogger("tachi-database-seed-scripts"); diff --git a/typescript/seeds-scripts/package.json b/typescript/seeds-scripts/package.json index 08795df89..d7b57c5ad 100644 --- a/typescript/seeds-scripts/package.json +++ b/typescript/seeds-scripts/package.json @@ -37,7 +37,6 @@ "html-entities": "catalog:", "iconv-lite": "catalog:", "lodash.get": "catalog:", - "mei-logger": "catalog:", "monk": "catalog:", "node-fetch": "catalog:", "prudence": "catalog:", diff --git a/typescript/seeds-scripts/rerunners/arcaea/merge-songlist.ts b/typescript/seeds-scripts/rerunners/arcaea/merge-songlist.ts index b6ff3e567..16e51a117 100644 --- a/typescript/seeds-scripts/rerunners/arcaea/merge-songlist.ts +++ b/typescript/seeds-scripts/rerunners/arcaea/merge-songlist.ts @@ -8,12 +8,7 @@ import { type integer, type SongDocument, } from "../../../common/src"; -import { - CreateChartID, - GetFreshSongIDGenerator, - ReadCollection, - WriteCollection, -} from "../../util"; +import { CreateChartID, ReadCollection, WriteCollection } from "../../util"; type LocalizedText = { en: string } & Record; type LocalizedSearchTerms = Record>; diff --git a/typescript/seeds-scripts/rerunners/bms-pms/sync-bms-tablefolders.ts b/typescript/seeds-scripts/rerunners/bms-pms/sync-bms-tablefolders.ts index 6a9a815de..6740005a3 100644 --- a/typescript/seeds-scripts/rerunners/bms-pms/sync-bms-tablefolders.ts +++ b/typescript/seeds-scripts/rerunners/bms-pms/sync-bms-tablefolders.ts @@ -1,3 +1,4 @@ +import { log } from "#log"; import { LoadBMSTable } from "bms-table-loader"; import { BMS_TABLES, @@ -6,7 +7,6 @@ import { type TableDocument, } from "tachi-common"; -import logger from "../../logger"; import { MutateCollection, ReadCollection } from "../../util"; const existsTables = ReadCollection("tables.json").map((e) => e.tableID); @@ -19,9 +19,9 @@ async function UpdateTable(tableInfo: BMSTableInfo) { return; } - logger.info(`Fetching ${tableInfo.url} (${tableInfo.name})...`); + log.info(`Fetching ${tableInfo.url} (${tableInfo.name})...`); const table = await LoadBMSTable(tableInfo.url); - logger.info(`Fetched.`); + log.info(`Fetched.`); const levels = table.getLevelOrder(); @@ -58,7 +58,7 @@ async function UpdateTable(tableInfo: BMSTableInfo) { folders.push(realFolder); - logger.info(`Inserted new folder ${tableInfo.prefix}${level}.`); + log.info(`Inserted new folder ${tableInfo.prefix}${level}.`); } MutateCollection("folders.json", (f) => { @@ -80,9 +80,9 @@ async function UpdateTable(tableInfo: BMSTableInfo) { return t; }); - logger.info(`Bumped table ${tableInfo.name}.`); + log.info(`Bumped table ${tableInfo.name}.`); - logger.info(`Checking meta-folder...`); + log.info(`Checking meta-folder...`); const f = { title: tableInfo.name, @@ -118,7 +118,7 @@ async function UpdateTable(tableInfo: BMSTableInfo) { MutateCollection("folders.json", (folders) => [...folders, realFolder]); } - logger.info(`Done.`); + log.info(`Done.`); } (async () => { diff --git a/typescript/seeds-scripts/rerunners/chunithm/merge-options.ts b/typescript/seeds-scripts/rerunners/chunithm/merge-options.ts index 683120548..d70c57ef2 100644 --- a/typescript/seeds-scripts/rerunners/chunithm/merge-options.ts +++ b/typescript/seeds-scripts/rerunners/chunithm/merge-options.ts @@ -1,7 +1,6 @@ import { Command } from "commander"; import { XMLParser } from "fast-xml-parser"; import { existsSync, readdirSync, readFileSync, statSync } from "fs"; -import { CreateLogger } from "mei-logger"; import path from "path"; import { @@ -11,10 +10,9 @@ import { type integer, type SongDocument, } from "../../../common/src"; +import { log } from "../../log.js"; import { CreateChartID, ReadCollection, WriteCollection } from "../../util"; -const logger = CreateLogger("chunithm/merge-options"); - const OMNIMIX_OPTION_NAMES = ["AOMN", "AOLD", "AKON"]; const DISPLAY_VERSIONS = [ "CHUNITHM", @@ -152,7 +150,7 @@ const newCharts: Array> = []; for (const optionsDir of options.input) { for (const option of readdirSync(optionsDir)) { if (!isOmnimixVersion && OMNIMIX_OPTION_NAMES.includes(option)) { - logger.warn( + log.warn( `Ignoring omnimix option ${option} because the version specified is not an omnimix version.`, ); continue; @@ -170,11 +168,11 @@ for (const optionsDir of options.input) { } if (!existsSync(musicsDir) || !statSync(musicsDir).isDirectory()) { - logger.warn(`Option at ${optionDir} does not have a "music" directory.`); + log.warn(`Option at ${optionDir} does not have a "music" directory.`); continue; } - logger.info(`Scanning music directory ${musicsDir} for songs.`); + log.info(`Scanning music directory ${musicsDir} for songs.`); for (const music of readdirSync(musicsDir)) { const musicDir = path.join(musicsDir, music); @@ -184,14 +182,14 @@ for (const optionsDir of options.input) { } if (!statSync(musicDir).isDirectory()) { - logger.warn(`Ignoring ${musicDir} because it is not a directory.`); + log.warn(`Ignoring ${musicDir} because it is not a directory.`); continue; } const musicXmlLocation = path.join(musicDir, "Music.xml"); if (!existsSync(musicXmlLocation) || !statSync(musicXmlLocation).isFile()) { - logger.warn(`Music directory at ${musicDir} does not have a Music.xml file.`); + log.warn(`Music directory at ${musicDir} does not have a Music.xml file.`); continue; } const data = parser.parse(readFileSync(musicXmlLocation)) as MusicXML; @@ -209,7 +207,7 @@ for (const optionsDir of options.input) { // Has this song been disabled in-game? if (musicData.disableFlag) { if (tachiSongID !== undefined) { - logger.info( + log.info( `Removing charts of song ${musicData.artistName.str} - ${musicData.name.str} (ID ${tachiSongID}) from version ${options.version}, because disableFlag is enabled.`, ); @@ -232,14 +230,14 @@ for (const optionsDir of options.input) { const existingTitle = songTitleMap.get(musicData.name.str); if (existingTitle) { - logger.warn( + log.warn( `A song called ${musicData.name.str} already exists in songs-chunithm (ID ${existingTitle.id}). Is this a duplicate with a given inGameID?`, ); if (options.force) { - logger.warn("--force was requested, adding this song anyways."); + log.warn("--force was requested, adding this song anyways."); } else { - logger.warn("Must be resolved manually. Use --force to overwrite anyways."); + log.warn("Must be resolved manually. Use --force to overwrite anyways."); continue; } } @@ -270,7 +268,7 @@ for (const optionsDir of options.input) { inGameIDToSongIDMap.set(inGameID, tachiSongID); songMap.set(tachiSongID, songDoc); - logger.info(`Added new song ${songDoc.artist} - ${songDoc.title}.`); + log.info(`Added new song ${songDoc.artist} - ${songDoc.title}.`); } else if (songMap.has(tachiSongID)) { const songDoc = songMap.get(tachiSongID)!; @@ -308,7 +306,7 @@ for (const optionsDir of options.input) { if (!difficulty.enable) { if (versionIndex !== -1) { - logger.info( + log.info( `Removing ${displayName} from version ${options.version} because it has been disabled.`, ); exists.versions.splice(versionIndex, 1); @@ -318,19 +316,19 @@ for (const optionsDir of options.input) { } if (versionIndex === -1) { - logger.info(`Adding ${displayName} to version ${options.version}.`); + log.info(`Adding ${displayName} to version ${options.version}.`); exists.versions.push(options.version); } if (isLatestVersion && exists.level !== level) { - logger.info( + log.info( `Chart ${displayName} has had a level change: ${exists.level} -> ${level}`, ); exists.level = level; } if (isLatestVersion && exists.levelNum !== levelNum) { - logger.info( + log.info( `Chart ${displayName} has had a levelNum change: ${exists.levelNum} -> ${levelNum}`, ); exists.levelNum = levelNum; @@ -344,7 +342,7 @@ for (const optionsDir of options.input) { } if (difficultyName === "WORLD'S END") { - logger.warn( + log.warn( `Song ${musicData.artistName.str} - ${musicData.name.str} (inGameID=${musicData.name.id}) contains a WORLD'S END chart, which should be impossible. Refusing to process this difficulty.`, ); continue; @@ -370,7 +368,7 @@ for (const optionsDir of options.input) { // track of that too. Awesome. existingCharts.set(`${inGameID}-${difficultyName}`, chartDoc); - logger.info( + log.info( `Added chart ${musicData.artistName.str} - ${musicData.name.str} [${difficultyName}] (${chartDoc.chartID}).`, ); } diff --git a/typescript/seeds-scripts/rerunners/fix-folder-ids.js b/typescript/seeds-scripts/rerunners/fix-folder-ids.js index 119d6d164..7d8a16211 100644 --- a/typescript/seeds-scripts/rerunners/fix-folder-ids.js +++ b/typescript/seeds-scripts/rerunners/fix-folder-ids.js @@ -1,4 +1,4 @@ -const logger = require("../logger"); +const logger = require("../log"); const { CreateFolderID, MutateCollection, ReadCollection, WriteCollection } = require("../util"); const translateMap = new Map(); diff --git a/typescript/seeds-scripts/rerunners/fix-goal-ids.js b/typescript/seeds-scripts/rerunners/fix-goal-ids.js index 1e9f599cf..b3a23f78d 100644 --- a/typescript/seeds-scripts/rerunners/fix-goal-ids.js +++ b/typescript/seeds-scripts/rerunners/fix-goal-ids.js @@ -1,4 +1,4 @@ -const logger = require("../logger"); +const logger = require("../log"); const { CreateGoalID, MutateCollection, ReadCollection, WriteCollection } = require("../util"); const translateMap = new Map(); diff --git a/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/convert.ts b/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/convert.ts index 9045f36f2..cc89784a5 100644 --- a/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/convert.ts +++ b/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/convert.ts @@ -1,3 +1,4 @@ +import { log } from "#log"; import { execSync } from "child_process"; /* eslint-disable no-control-regex */ import fs, { mkdirSync } from "fs"; @@ -5,7 +6,6 @@ import iconv from "iconv-lite"; import path from "path"; import { type integer } from "../../../../common/src"; -import logger from "../../../logger"; import { ParseDotOneFile } from "./dot-one-parser/parser"; import { type IIDXConvertOutput } from "./dot-one-parser/types"; @@ -38,7 +38,7 @@ mkdirSync(ifsOUT, { recursive: true }); * Extracts an IFS file into the ./ifs-output cache directory. */ function ifsExtract(ifsPath: string) { - logger.info(`Extracting ${ifsPath}...`); + log.info(`Extracting ${ifsPath}...`); execSync(`ifstools "${ifsPath}" -o "${ifsOUT}" -y --super-disable`, { stdio: "ignore" }); } @@ -52,7 +52,7 @@ export async function ParseIIDXData( omni: boolean, alwaysExtract: boolean, ) { - logger.info(`Parsing from ${basedir}.`); + log.info(`Parsing from ${basedir}.`); const mdbPath = path.join( basedir, @@ -61,7 +61,7 @@ export async function ParseIIDXData( omni ? "music_omni.bin" : "music_data.bin", ); - logger.info(`Parsing MDB ${mdbPath}.`); + log.info(`Parsing MDB ${mdbPath}.`); const buffer = fs.readFileSync(mdbPath); @@ -197,11 +197,11 @@ export async function ParseIIDXData( if (buffer.length <= curLoc) { moreData = false; } - logger.error(`${dotOnePath} cannot find file. neither exist.`); + log.error(`${dotOnePath} cannot find file. neither exist.`); continue; } - logger.verbose(`Parsing data/sound/${songID}/${songID}.1`); + log.verbose(`Parsing data/sound/${songID}/${songID}.1`); try { const charts = await ParseDotOneFile(dotOnePath, { genre, @@ -215,7 +215,7 @@ export async function ParseIIDXData( if (chart.difficulty === "LEGGENDARIA") { if (notecount !== 0 && notecounts[`${chart.playtype}-LEGGENDARIA`]) { - logger.warn( + log.warn( `${chart.artist} - ${chart.title} has conflicting ${ chart.playtype } LEGGENDARIAs. @@ -228,7 +228,7 @@ Picking the INLINE version, as it's likely to be the correct one, but confirm th notecounts[`${chart.playtype}-${chart.difficulty}`] = notecount; } } catch (err) { - logger.error(err); + log.error(err); curLoc += structSize; if (buffer.length <= curLoc) { @@ -266,7 +266,7 @@ Picking the INLINE version, as it's likely to be the correct one, but confirm th } } - logger.info(`Done parsing.`); + log.info(`Done parsing.`); return parsedData; } diff --git a/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/dot-one-parser/parser.ts b/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/dot-one-parser/parser.ts index 08d1076d6..48b062f4d 100644 --- a/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/dot-one-parser/parser.ts +++ b/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/dot-one-parser/parser.ts @@ -1,8 +1,8 @@ +import { log } from "#log"; import fs from "fs/promises"; import path from "path"; import { type integer } from "../../../../../common/src"; -import logger from "../../../../logger"; import { type BGMObject, type BPMObject, @@ -229,7 +229,7 @@ function ParseEvent( } else if (data.param === 14) { obj.col = 1; } else { - logger.warn( + log.warn( `(${ parseContext.songTitle ?? "UNKNOWN" }) Unknown column of scratchObj sent to EventParser: ${ @@ -257,7 +257,7 @@ function ParseEvent( }; } else if (type === "BPM") { if (data.param === 0) { - logger.warn( + log.warn( `(${ parseContext.songTitle ?? "UNKNOWN" }) Invalid value of 0 for denominator in BPM event (numerator was ${ @@ -302,7 +302,7 @@ function ParseEvent( const window = IIDX_TIMING_TO_RGC[data.param]; if (!window) { - logger.warn( + log.warn( `(${ parseContext.songTitle ?? "UNKNOWN" }) Unknown type of timingWindow: ${window}, from .1 param ${data.param}. Skipping.`, @@ -341,7 +341,7 @@ function ParseEvent( if (parseContext.isDP) { if (data.param !== 0 && data.param !== 1) { - logger.warn( + log.warn( `(${parseContext.songTitle ?? "UNKNOWN"}) Invalid parameter for measurebar of ${ data.param }. Defaulting to 0 (left hand side).`, @@ -374,7 +374,7 @@ function ParseEvent( // charts. Maybe it was some sort of diverging bga instruction at one point? return null; } else { - logger.warn( + log.warn( `(${parseContext.songTitle ?? "UNKNOWN"}) Unknown event type in .1: ${ data.type } at ${ms.toFixed(2)}ms. Ignoring.`, @@ -465,14 +465,14 @@ export function ParseDotOne( const dir = dirs[i]; if (!dir || (dir.offset === 0 && dir.length === 0)) { - logger.verbose(`Skipped directory ${i}, as there was no data.`); + log.verbose(`Skipped directory ${i}, as there was no data.`); continue; // no data. } const difficulty = IIDX_DIFFICULTY_TO_RGC[i]; if (!difficulty) { - logger.warn( + log.warn( `(${ context.songTitle ?? "UNKNOWN" }) Data present inside directory ${i}, but this corresponds to an unknown difficulty. Ignoring.`, @@ -486,7 +486,7 @@ export function ParseDotOne( }; if (!eventContext.songTitle) { - logger.warn( + log.warn( "No filename provided in context.filename to IIDXParser, subsequent warnings will have no way of referring to the chart.", ); } diff --git a/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/merge-mdb.ts b/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/merge-mdb.ts index cf8c69b19..0edf8193d 100644 --- a/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/merge-mdb.ts +++ b/typescript/seeds-scripts/rerunners/iidx/iidx-mdb-parse/merge-mdb.ts @@ -1,3 +1,4 @@ +import { log } from "#log"; import { Command } from "commander"; import fs from "fs"; import path from "path"; @@ -10,7 +11,6 @@ import { type SongDocument, type Versions, } from "../../../../common/src"; -import logger from "../../../logger"; import { CreateChartID, GetFreshSongIDGenerator, @@ -135,7 +135,7 @@ async function ParseIIDXMDB() { for (const inp of mdbCharts) { if (isInBlacklist(`S${inp.songID}`)) { - logger.verbose( + log.debug( `Skipped ${inp.artist} - ${inp.title} (${inp.songID}) as it was in the blacklist.`, ); continue; @@ -150,17 +150,17 @@ async function ParseIIDXMDB() { const titleAlreadyExists = songTitleMap.get(inp.title); if (titleAlreadyExists) { - logger.warn( + log.warn( `A song called '${inp.title}' already exists in songs-iidx (songID:${titleAlreadyExists.id}). Is this a duplicate with a different inGameID?`, ); if (!options.force) { - logger.warn( + log.warn( `Must be resolved manually. Use --force to blindly overwrite it anyway.`, ); continue; } else { - logger.warn(`--force provided, adding it to the DB anyway.`); + log.warn(`--force provided, adding it to the DB anyway.`); } } @@ -181,16 +181,16 @@ async function ParseIIDXMDB() { altTitles: [], }; - logger.info(`Added new song ${inp.title}.`); + log.info(`Added new song ${inp.title}.`); if (inp.title.match(/\?/gu)) { - logger.warn( + log.warn( `${inp.title} has a potentially konami-screwed title. Investigate it manually.`, ); } if (inp.artist.match(/\?/gu)) { - logger.warn( + log.warn( `${inp.artist} - ${inp.title} has a potentially konami-screwed title. Investigate it manually.`, ); } @@ -202,7 +202,7 @@ async function ParseIIDXMDB() { const sxng = songMap.get(anySongIDMatch.songID); if (!sxng) { - logger.error(`Song ${anySongIDMatch.songID} has charts but no song?`); + log.error(`Song ${anySongIDMatch.songID} has charts but no song?`); throw new Error(`Song ${anySongIDMatch.songID} has charts but no song?`); } song = sxng; @@ -212,7 +212,7 @@ async function ParseIIDXMDB() { for (const diffName of diffNames) { if (isInBlacklist(`C${inp.songID}-${diffName}`)) { - logger.verbose( + log.verbose( `Ignored ${song.title} (${inp.songID}) ${diffName} as it was in the blacklist.`, ); continue; @@ -224,7 +224,7 @@ async function ParseIIDXMDB() { const level = inp.levels[diffName]; if (level === 0 && notecount && notecount > 0) { - logger.info( + log.info( `Chart ${song.title} ${diffName} has notecount ${notecount}, but has no level assigned. Skipping.`, ); continue; @@ -262,11 +262,11 @@ async function ParseIIDXMDB() { }, }; - logger.info(`Inserting new chart ${inp.title} ${diffName}.`); + log.info(`Inserting new chart ${inp.title} ${diffName}.`); existingCharts.push(tachiChart); } else { if (!notecount) { - logger.warn( + log.warn( `Chart ${inp.title} ${diffName} already exists, but has no notecount anymore. Not marking it as part of this version.`, ); continue; @@ -274,11 +274,11 @@ async function ParseIIDXMDB() { // chart already exists, diff notecounts. if (chart.data.notecount !== notecount) { - logger.warn( + log.warn( `Chart ${inp.title} ${diffName} has a different notecount in the JSON to the data just parsed. Has this chart been edited? OLD: ${chart.data.notecount} -> NEW: ${notecount}.`, ); if (!options.force) { - logger.warn( + log.warn( `Must be resolved manually. Use --force to blindly overwrite it anyway.`, ); continue; @@ -287,7 +287,7 @@ async function ParseIIDXMDB() { } if (chart.levelNum !== level) { - logger.info( + log.info( `Chart ${inp.title} ${diffName} has had a level change. ${chart.level} -> ${level}. Updating this.`, ); chart.level = level.toString(); diff --git a/typescript/seeds-scripts/rerunners/iidx/update-bpi-poyashi.js b/typescript/seeds-scripts/rerunners/iidx/update-bpi-poyashi.js index 938ebe797..b2f918f0f 100644 --- a/typescript/seeds-scripts/rerunners/iidx/update-bpi-poyashi.js +++ b/typescript/seeds-scripts/rerunners/iidx/update-bpi-poyashi.js @@ -3,7 +3,7 @@ const fs = require("fs"); const fetch = require("node-fetch"); const path = require("path"); -const logger = require("../../logger"); +const logger = require("../../log"); const { MutateCollection, ReadCollection } = require("../../util"); const program = new Command(); diff --git a/typescript/seeds-scripts/rerunners/maimaidx/merge-options.ts b/typescript/seeds-scripts/rerunners/maimaidx/merge-options.ts index 32c48c695..d05bf35a2 100644 --- a/typescript/seeds-scripts/rerunners/maimaidx/merge-options.ts +++ b/typescript/seeds-scripts/rerunners/maimaidx/merge-options.ts @@ -1,8 +1,8 @@ +import { log } from "#log"; import { execFileSync } from "child_process"; import { Command } from "commander"; import { XMLParser } from "fast-xml-parser"; import { existsSync, readdirSync, readFileSync, statSync } from "fs"; -import { CreateLogger } from "mei-logger"; import path from "path"; import { @@ -11,14 +11,7 @@ import { GetGamePTConfig, type SongDocument, } from "../../../common/src"; -import { - CreateChartID, - GetFreshSongIDGenerator, - ReadCollection, - WriteCollection, -} from "../../util"; - -const logger = CreateLogger("merge-options"); +import { CreateChartID, ReadCollection, WriteCollection } from "../../util"; const VERSION_DISPLAY_NAMES = [ "maimai", @@ -152,7 +145,7 @@ for (const chart of existingCharts) { const song = songMap.get(chart.songID); if (song === undefined) { - logger.error( + log.error( `CONSISTENCY ERROR: Chart ID ${chart.chartID} does not belong to any songs! (songID was ${chart.songID})`, ); process.exit(1); @@ -208,18 +201,16 @@ if (options.vgmsBinary) { const res = JSON.parse(stdout); if (res.sampleRate !== 48000) { - logger.warn( - `Sample rate of ${cuePath} is not 48000Hz (${res.sampleRate}Hz)`, - ); + log.warn(`Sample rate of ${cuePath} is not 48000Hz (${res.sampleRate}Hz)`); } const duration = Number((res.numberOfSamples / res.sampleRate).toFixed(3)); durationMap.set(cueName, duration); - logger.info(`Cue file ${cueName} has duration ${duration} seconds.`); + log.info(`Cue file ${cueName} has duration ${duration} seconds.`); } catch (e) { - logger.error(`Error parsing song duration: ${e}`); + log.error(`Error parsing song duration: ${e}`); } } } @@ -251,11 +242,11 @@ for (const optionsDir of options.input) { const musicsDir = path.join(optionDir, "music"); if (!existsSync(musicsDir)) { - logger.warn(`Option at ${optionDir} does not have a "music" folder.`); + log.warn(`Option at ${optionDir} does not have a "music" folder.`); continue; } - logger.info(`Scanning music directory ${musicsDir} for songs.`); + log.info(`Scanning music directory ${musicsDir} for songs.`); for (const music of readdirSync(musicsDir)) { if (!music.match(/music\d+$/u)) { @@ -271,7 +262,7 @@ for (const optionsDir of options.input) { const musicXmlLocation = path.join(musicDir, "Music.xml"); if (!existsSync(musicXmlLocation)) { - logger.warn(`Music folder at ${musicDir} does not have a Music.xml file.`); + log.warn(`Music folder at ${musicDir} does not have a Music.xml file.`); continue; } @@ -280,7 +271,7 @@ for (const optionsDir of options.input) { const inGameID = Number(musicData.name.id); if (isInBlacklist(`S${inGameID}`)) { - logger.verbose( + log.verbose( `Ignored ${musicData.artistName.str} - ${musicData.name.str} (inGameID ${inGameID}) as it is in the blacklist.`, ); continue; @@ -296,7 +287,7 @@ for (const optionsDir of options.input) { // Has this song been disabled in-game? if (musicData.disable || Number(musicData.eventName.id) === 0) { if (tachiSongID !== undefined) { - logger.info( + log.info( `Removing charts of song ID ${tachiSongID} from version ${options.version}, because the disable flag in Music.xml is enabled.`, ); @@ -335,7 +326,7 @@ for (const optionsDir of options.input) { const duration = durationMap.get(`music${musicData.cueName.id.padStart(6, "0")}`); if (!duration) { - logger.warn( + log.warn( `Unknown duration for music ID ${inGameID}, cue ID ${musicData.cueName.id}.`, ); } @@ -360,7 +351,7 @@ for (const optionsDir of options.input) { songTitleArtistMap.set(`${songDoc.title}-${songDoc.artist}`, tachiSongID); songMap.set(tachiSongID, songDoc); - logger.info( + log.info( `Added new song ${songDoc.artist} - ${songDoc.title} (inGameID ${inGameID}, tachiSongID ${tachiSongID}).`, ); } else { @@ -388,7 +379,7 @@ for (const optionsDir of options.input) { } if (isInBlacklist(`C${inGameID}-${difficultyName}`)) { - logger.verbose( + log.verbose( `Ignoring ${musicData.artistName.str} - ${musicData.name.str} [${difficultyName}] (inGameID ${inGameID}) as it is in the blacklist.`, ); continue; @@ -415,18 +406,18 @@ for (const optionsDir of options.input) { const displayName = `${musicData.artistName.str} - ${musicData.name.str} [${exists.difficulty}] (${exists.chartID})`; if (exists.data.inGameID === null) { - logger.info(`Adding inGameID ${inGameID} for chart ${displayName}.`); + log.info(`Adding inGameID ${inGameID} for chart ${displayName}.`); exists.data.inGameID = inGameID; } else if (exists.data.inGameID !== inGameID) { - logger.warn( + log.warn( `The chart ${displayName} already exists in charts-maimaidx under a different inGameID (${exists.data.inGameID} != ${inGameID}). Is this a duplicate with a different inGameID?`, ); if (options.force) { - logger.warn("Overwriting anyways, because --force has been requested."); + log.warn("Overwriting anyways, because --force has been requested."); exists.data.inGameID = inGameID; } else { - logger.warn( + log.warn( "Must be resolved manually. Use --force to overwrite anyways.", ); } @@ -440,14 +431,14 @@ for (const optionsDir of options.input) { if (isLatestVersion) { if (exists.level !== level) { - logger.info( + log.info( `Chart ${displayName} has had a level change: ${exists.level} -> ${level}.`, ); exists.level = level; } if (exists.levelNum !== levelNum) { - logger.info( + log.info( `Chart ${displayName} has had a levelNum change: ${exists.levelNum} -> ${levelNum}.`, ); exists.levelNum = levelNum; @@ -476,7 +467,7 @@ for (const optionsDir of options.input) { newCharts.push(chartDoc); - logger.info( + log.info( `Inserted new chart ${musicData.artistName.str} - ${musicData.name.str} [${chartDoc.difficulty}] (${chartDoc.chartID}).`, ); } diff --git a/typescript/seeds-scripts/rerunners/maimaidx/parse-maimaidx-dataset.ts b/typescript/seeds-scripts/rerunners/maimaidx/parse-maimaidx-dataset.ts index 972c1fe83..4a6855068 100644 --- a/typescript/seeds-scripts/rerunners/maimaidx/parse-maimaidx-dataset.ts +++ b/typescript/seeds-scripts/rerunners/maimaidx/parse-maimaidx-dataset.ts @@ -1,4 +1,4 @@ -import { CreateLogger } from "mei-logger"; +import { log } from "#log"; import { type ChartDocument, type Difficulties, type SongDocument } from "../../../common/src"; import { @@ -8,8 +8,6 @@ import { WriteCollection, } from "../../util"; -const logger = CreateLogger("parse-maimaidx-dataset"); - type BaseDifficulty = "adv" | "bas" | "exp" | "mas" | "remas"; type MaimaiDXDifficulty = `${"" | "dx_"}lev_${BaseDifficulty}`; @@ -109,7 +107,7 @@ async function ParseInternalLevelData( const dx = Number(dxMatch[1]!); if (dx !== 0 && dx !== 1) { - logger.warn(`DX should be 0 or 1, found ${dxMatch[1]} in ${line}`); + log.warn(`DX should be 0 or 1, found ${dxMatch[1]} in ${line}`); continue; } @@ -119,7 +117,7 @@ async function ParseInternalLevelData( const tmp = JSON.parse(lvMatch[1]!); if (!Array.isArray(tmp) || tmp.some((c) => typeof c !== "number")) { - logger.warn(`lv should be an array of numbers, found ${lvMatch[1]} in ${line}`); + log.warn(`lv should be an array of numbers, found ${lvMatch[1]} in ${line}`); continue; } @@ -138,7 +136,7 @@ async function ParseInternalLevelData( lv.remas = tmp[4]; } } catch (e) { - logger.warn(`lv should be an array of numbers, found ${lvMatch[1]} in ${line}`); + log.warn(`lv should be an array of numbers, found ${lvMatch[1]} in ${line}`); continue; } @@ -159,11 +157,11 @@ async function ParseMaimaiDXDataset() { const existingSongMap = new Map(songs.map((s) => [`${s.title}-${s.artist}`, s])); const existingChartMap = new Map(charts.map((c) => [`${c.songID}-${c.difficulty}`, c])); - logger.info(`Fetching official song information from ${DATA_URL}...`); + log.info(`Fetching official song information from ${DATA_URL}...`); const datum: Array = await fetch(DATA_URL).then((r) => r.json()); - logger.info(`Fetching internal level information from ${INTERNAL_LEVEL_URL}...`); + log.info(`Fetching internal level information from ${INTERNAL_LEVEL_URL}...`); const internalLevelData = await ParseInternalLevelData(INTERNAL_LEVEL_URL); const internalLevelDataMap = new Map( @@ -182,7 +180,7 @@ async function ParseMaimaiDXDataset() { if (version > CURRENT_VERSION_NUM) { // Skipping songs that are newer than currently supported version. - logger.warn( + log.warn( `Ignoring song ${data.artist} - ${data.title}, which is newer than CURRENT_VERSION_NUM.`, ); continue; @@ -221,7 +219,7 @@ async function ParseMaimaiDXDataset() { songs.push(songDoc); - logger.info(`Added new song ${songDoc.artist} - ${songDoc.title} (ID ${tachiSongID}).`); + log.info(`Added new song ${songDoc.artist} - ${songDoc.title} (ID ${tachiSongID}).`); } for (const [key, difficulty] of Object.entries(DIFFICULTY_TO_TACHI_DIFFICULTY) as [ @@ -260,7 +258,7 @@ async function ParseMaimaiDXDataset() { } if (existingChart.level !== level) { - logger.info( + log.info( `Chart ${displayName} has had a level change: ${existingChart.level} -> ${level}.`, ); existingChart.level = level; @@ -268,7 +266,7 @@ async function ParseMaimaiDXDataset() { } if (existingChart.levelNum !== levelNum) { - logger.info( + log.info( `Chart ${displayName} has had a levelNum change: ${existingChart.levelNum} -> ${levelNum}.`, ); existingChart.levelNum = levelNum; @@ -293,7 +291,7 @@ async function ParseMaimaiDXDataset() { charts.push(chartDoc); - logger.info(`Added new chart ${data.artist} - ${data.title} [${difficulty}].`); + log.info(`Added new chart ${data.artist} - ${data.title} [${difficulty}].`); } } diff --git a/typescript/server/.tsbuildinfo b/typescript/server/.tsbuildinfo deleted file mode 100644 index 5e3967b70..000000000 --- a/typescript/server/.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"version":"7.0.0-dev.20260309.1","root":[176,[285,288],[298,299],[301,303],[305,307],[310,311],[317,347],388,390,[439,456],[460,497],500,[502,503],[520,549],551,553,[555,557],[559,561],[563,565],567,[775,779],[781,829],[831,833],[835,840],[937,954],956,[959,986],[997,1098],[1100,1123],[1125,1126],[1443,1459],[1481,1482],[1486,1490],[1492,1501],[1503,1593],[1606,1607],[1609,1717]],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","../node_modules/@types/react/global.d.ts","../node_modules/csstype/index.d.ts","../node_modules/@types/prop-types/index.d.ts","../node_modules/@types/react/index.d.ts","../node_modules/@types/react/jsx-runtime.d.ts","../node_modules/@types/node/compatibility/disposable.d.ts","../node_modules/@types/node/compatibility/indexable.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/compatibility/index.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/@types/node/web-globals/events.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.generated.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@types/nodemailer/lib/dkim/index.d.ts","../node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts","../node_modules/@types/nodemailer/lib/xoauth2/index.d.ts","../node_modules/@types/nodemailer/lib/mailer/index.d.ts","../node_modules/@types/nodemailer/lib/mime-node/index.d.ts","../node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts","../node_modules/@types/nodemailer/lib/shared/index.d.ts","../node_modules/@types/nodemailer/lib/json-transport/index.d.ts","../node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts","../node_modules/@types/nodemailer/lib/ses-transport/index.d.ts","../node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts","../node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts","../node_modules/@types/nodemailer/lib/stream-transport/index.d.ts","../node_modules/@types/nodemailer/index.d.ts","../node_modules/prudence/js/error.d.ts","../node_modules/@types/range-parser/index.d.ts","../node_modules/@types/qs/index.d.ts","../node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/prudence/js/types.d.ts","../node_modules/prudence/js/validator.d.ts","../node_modules/prudence/js/static.d.ts","../node_modules/prudence/js/util.d.ts","../node_modules/prudence/js/assert.d.ts","../node_modules/prudence/js/main.d.ts","./src/utils/prudence.ts","../common/js/types/api.d.ts","../common/js/types/import-types.d.ts","../common/js/types/notifications.d.ts","../node_modules/@types/bson/index.d.ts","../node_modules/@types/mongodb/index.d.ts","../common/js/types/documents.d.ts","../common/js/types/metrics.d.ts","../node_modules/zod/v4/core/json-schema.d.cts","../node_modules/zod/v4/core/standard-schema.d.cts","../node_modules/zod/v4/core/registries.d.cts","../node_modules/zod/v4/core/to-json-schema.d.cts","../node_modules/zod/v4/core/util.d.cts","../node_modules/zod/v4/core/versions.d.cts","../node_modules/zod/v4/core/schemas.d.cts","../node_modules/zod/v4/core/checks.d.cts","../node_modules/zod/v4/core/errors.d.cts","../node_modules/zod/v4/core/core.d.cts","../node_modules/zod/v4/core/parse.d.cts","../node_modules/zod/v4/core/regexes.d.cts","../node_modules/zod/v4/locales/ar.d.cts","../node_modules/zod/v4/locales/az.d.cts","../node_modules/zod/v4/locales/be.d.cts","../node_modules/zod/v4/locales/bg.d.cts","../node_modules/zod/v4/locales/ca.d.cts","../node_modules/zod/v4/locales/cs.d.cts","../node_modules/zod/v4/locales/da.d.cts","../node_modules/zod/v4/locales/de.d.cts","../node_modules/zod/v4/locales/en.d.cts","../node_modules/zod/v4/locales/eo.d.cts","../node_modules/zod/v4/locales/es.d.cts","../node_modules/zod/v4/locales/fa.d.cts","../node_modules/zod/v4/locales/fi.d.cts","../node_modules/zod/v4/locales/fr.d.cts","../node_modules/zod/v4/locales/fr-CA.d.cts","../node_modules/zod/v4/locales/he.d.cts","../node_modules/zod/v4/locales/hu.d.cts","../node_modules/zod/v4/locales/hy.d.cts","../node_modules/zod/v4/locales/id.d.cts","../node_modules/zod/v4/locales/is.d.cts","../node_modules/zod/v4/locales/it.d.cts","../node_modules/zod/v4/locales/ja.d.cts","../node_modules/zod/v4/locales/ka.d.cts","../node_modules/zod/v4/locales/kh.d.cts","../node_modules/zod/v4/locales/km.d.cts","../node_modules/zod/v4/locales/ko.d.cts","../node_modules/zod/v4/locales/lt.d.cts","../node_modules/zod/v4/locales/mk.d.cts","../node_modules/zod/v4/locales/ms.d.cts","../node_modules/zod/v4/locales/nl.d.cts","../node_modules/zod/v4/locales/no.d.cts","../node_modules/zod/v4/locales/ota.d.cts","../node_modules/zod/v4/locales/ps.d.cts","../node_modules/zod/v4/locales/pl.d.cts","../node_modules/zod/v4/locales/pt.d.cts","../node_modules/zod/v4/locales/ru.d.cts","../node_modules/zod/v4/locales/sl.d.cts","../node_modules/zod/v4/locales/sv.d.cts","../node_modules/zod/v4/locales/ta.d.cts","../node_modules/zod/v4/locales/th.d.cts","../node_modules/zod/v4/locales/tr.d.cts","../node_modules/zod/v4/locales/ua.d.cts","../node_modules/zod/v4/locales/uk.d.cts","../node_modules/zod/v4/locales/ur.d.cts","../node_modules/zod/v4/locales/uz.d.cts","../node_modules/zod/v4/locales/vi.d.cts","../node_modules/zod/v4/locales/zh-CN.d.cts","../node_modules/zod/v4/locales/zh-TW.d.cts","../node_modules/zod/v4/locales/yo.d.cts","../node_modules/zod/v4/locales/index.d.cts","../node_modules/zod/v4/core/doc.d.cts","../node_modules/zod/v4/core/api.d.cts","../node_modules/zod/v4/core/json-schema-processors.d.cts","../node_modules/zod/v4/core/json-schema-generator.d.cts","../node_modules/zod/v4/core/index.d.cts","../node_modules/zod/v4/classic/errors.d.cts","../node_modules/zod/v4/classic/parse.d.cts","../node_modules/zod/v4/classic/schemas.d.cts","../node_modules/zod/v4/classic/checks.d.cts","../node_modules/zod/v4/classic/compat.d.cts","../node_modules/zod/v4/classic/from-json-schema.d.cts","../node_modules/zod/v4/classic/iso.d.cts","../node_modules/zod/v4/classic/coerce.d.cts","../node_modules/zod/v4/classic/external.d.cts","../node_modules/zod/index.d.cts","../common/js/types/game-config-utils.d.ts","../common/js/config/config-utils.d.ts","../common/js/constants/grade-boundaries.d.ts","../common/js/utils/util.d.ts","../common/js/config/game-support/bms.d.ts","../common/js/config/config.d.ts","../common/js/types/utils.d.ts","../common/js/types/batch-manual.d.ts","../common/js/types/internals.d.ts","../common/js/types/game-config.d.ts","../common/js/types.d.ts","../common/js/constants/import-types.d.ts","../common/js/webhooks.d.ts","../common/js/constants/game.d.ts","../common/js/constants/bms-tables.d.ts","../common/js/constants/permissions.d.ts","../common/js/constants/colour-set.d.ts","../common/js/lib/schemas.d.ts","../common/js/seeds/types.d.ts","../common/js/index.d.ts","./node_modules/dotenv/lib/main.d.ts","../node_modules/json5/lib/parse.d.ts","../node_modules/json5/lib/stringify.d.ts","../node_modules/json5/lib/index.d.ts","./src/lib/setup/config.ts","./src/lib/constants/filesize.ts","./src/lib/constants/time.ts","./src/utils/misc.ts","../node_modules/@types/triple-beam/index.d.ts","../node_modules/logform/index.d.ts","../node_modules/seq-logging/index.d.ts","../node_modules/winston-transport/index.d.ts","../node_modules/@valuabletouch/winston-seq/dist/index.d.ts","../node_modules/@types/safe-json-stringify/index.d.ts","../node_modules/winston/lib/winston/config/index.d.ts","../node_modules/winston/lib/winston/transports/index.d.ts","../node_modules/winston/index.d.ts","./src/lib/logger/logger.ts","./src/lib/score-import/framework/calculated-data/types.ts","../node_modules/bms-table-loader/js/main.d.ts","./src/lib/constants/err-codes.ts","./src/lib/notifications/notifications.ts","./src/lib/notifications/notification-wrappers.ts","../node_modules/monk/index.d.ts","./src/utils/user.ts","./src/lib/rivals/rivals.ts","./src/utils/db.ts","./node_modules/deepmerge/index.d.ts","../node_modules/fast-json-stable-hash/index.d.ts","./src/utils/folder.ts","./src/utils/queries/scores.ts","../node_modules/@types/http-errors/index.d.ts","../node_modules/@types/serve-static/index.d.ts","../node_modules/@types/connect/index.d.ts","../node_modules/@types/body-parser/index.d.ts","../node_modules/@types/express/index.d.ts","./src/lib/constants/tachi.ts","./src/utils/req-tachi-data.ts","./src/lib/game-specific/custom-bms-tables.ts","./src/utils/types.ts","./src/lib/score-import/framework/common/converter-failures.ts","./src/lib/score-import/framework/common/types.ts","./src/lib/score-import/import-types/api/myt-chunithm/types.ts","./src/lib/score-import/import-types/api/myt-maimaidx/types.ts","./src/lib/score-import/import-types/api/myt-ongeki/types.ts","./src/lib/score-import/import-types/api/myt-wacca/types.ts","./src/lib/score-import/import-types/file/eamusement-sdvx-csv/types.ts","./src/lib/score-import/import-types/file/solid-state-squad/types.ts","./src/lib/score-import/import-types/file/wacca-mypage-scraper/types.ts","./src/lib/score-import/import-types/ir/barbatos/types.ts","./src/lib/score-import/import-types/ir/beatoraja/types.ts","./src/lib/score-import/import-types/ir/fervidex/types.ts","./src/lib/score-import/import-types/ir/fervidex-static/types.ts","./src/lib/score-import/import-types/ir/kshook-sv6c/types.ts","./src/lib/score-import/import-types/ir/kshook-sv6c-static/types.ts","./src/lib/score-import/import-types/ir/lr2hook/types.ts","./src/lib/score-import/import-types/ir/usc/types.ts","./src/lib/score-import/import-types/common/api-cg/types.ts","./src/lib/score-import/import-types/common/api-kai/types.ts","./src/lib/score-import/import-types/common/batch-manual/types.ts","./src/lib/score-import/import-types/common/eamusement-iidx-csv/types.ts","./src/lib/score-import/import-types/common/types.ts","./src/external/mongo/db.ts","./src/external/mongo/indexes.ts","./src/external/mongo/sequence-docs.ts","./src/external/mongo/schemas.ts","./src/lib/builtin-clients/builtin-clients.ts","../node_modules/@types/semver/functions/inc.d.ts","../node_modules/@types/semver/classes/semver.d.ts","../node_modules/@types/semver/functions/parse.d.ts","../node_modules/@types/semver/functions/valid.d.ts","../node_modules/@types/semver/functions/clean.d.ts","../node_modules/@types/semver/functions/diff.d.ts","../node_modules/@types/semver/functions/major.d.ts","../node_modules/@types/semver/functions/minor.d.ts","../node_modules/@types/semver/functions/patch.d.ts","../node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/@types/semver/functions/compare.d.ts","../node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/@types/semver/functions/sort.d.ts","../node_modules/@types/semver/functions/rsort.d.ts","../node_modules/@types/semver/functions/gt.d.ts","../node_modules/@types/semver/functions/lt.d.ts","../node_modules/@types/semver/functions/eq.d.ts","../node_modules/@types/semver/functions/neq.d.ts","../node_modules/@types/semver/functions/gte.d.ts","../node_modules/@types/semver/functions/lte.d.ts","../node_modules/@types/semver/functions/cmp.d.ts","../node_modules/@types/semver/functions/coerce.d.ts","../node_modules/@types/semver/classes/comparator.d.ts","../node_modules/@types/semver/classes/range.d.ts","../node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/@types/semver/ranges/valid.d.ts","../node_modules/@types/semver/ranges/outside.d.ts","../node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/@types/semver/ranges/subset.d.ts","../node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/@types/semver/index.d.ts","./src/lib/constants/version.ts","../node_modules/@types/redis/index.d.ts","./src/external/redis/redis.ts","../node_modules/bullmq/dist/esm/interfaces/advanced-options.d.ts","../node_modules/bullmq/dist/esm/interfaces/backoff-options.d.ts","../node_modules/bullmq/dist/esm/interfaces/child-command.d.ts","../node_modules/bullmq/dist/esm/interfaces/parent-command.d.ts","../node_modules/bullmq/dist/esm/interfaces/child-message.d.ts","../node_modules/bullmq/dist/esm/interfaces/connection.d.ts","../node_modules/bullmq/dist/esm/interfaces/jobs-options.d.ts","../node_modules/bullmq/dist/esm/interfaces/redis-options.d.ts","../node_modules/bullmq/dist/esm/interfaces/queue-options.d.ts","../node_modules/bullmq/dist/esm/interfaces/flow-job.d.ts","../node_modules/bullmq/dist/esm/interfaces/job-json.d.ts","../node_modules/bullmq/dist/esm/interfaces/keep-jobs.d.ts","../node_modules/bullmq/dist/esm/interfaces/parent-message.d.ts","../node_modules/bullmq/dist/esm/interfaces/parent.d.ts","../node_modules/bullmq/dist/esm/interfaces/queue-scheduler-options.d.ts","../node_modules/bullmq/dist/esm/interfaces/rate-limiter-options.d.ts","../node_modules/bullmq/dist/esm/interfaces/redis-streams.d.ts","../node_modules/bullmq/dist/esm/interfaces/repeat-options.d.ts","../node_modules/bullmq/dist/esm/interfaces/sandboxed-job.d.ts","../node_modules/bullmq/dist/esm/interfaces/sandboxed-job-processor.d.ts","../node_modules/bullmq/dist/esm/interfaces/worker-options.d.ts","../node_modules/bullmq/dist/esm/interfaces/index.d.ts","../node_modules/bullmq/dist/esm/types/finished-target.d.ts","../node_modules/bullmq/dist/esm/types/job-type.d.ts","../node_modules/bullmq/dist/esm/types/index.d.ts","../node_modules/bullmq/dist/esm/classes/redis-connection.d.ts","../node_modules/bullmq/dist/esm/classes/queue-keys.d.ts","../node_modules/bullmq/dist/esm/classes/queue-base.d.ts","../node_modules/bullmq/dist/esm/classes/queue-events.d.ts","../node_modules/bullmq/dist/esm/classes/repeat.d.ts","../node_modules/bullmq/dist/esm/classes/timer-manager.d.ts","../node_modules/bullmq/dist/esm/classes/worker.d.ts","../node_modules/bullmq/dist/esm/classes/queue-scheduler.d.ts","../node_modules/bullmq/dist/esm/classes/scripts.d.ts","../node_modules/bullmq/dist/esm/classes/job.d.ts","../node_modules/bullmq/dist/esm/classes/backoffs.d.ts","../node_modules/bullmq/dist/esm/classes/queue-getters.d.ts","../node_modules/bullmq/dist/esm/classes/queue.d.ts","../node_modules/bullmq/dist/esm/classes/child-pool.d.ts","../node_modules/bullmq/dist/esm/classes/sandbox.d.ts","../node_modules/bullmq/dist/esm/classes/flow-producer.d.ts","../node_modules/bullmq/dist/esm/classes/index.d.ts","../node_modules/bullmq/dist/esm/commands/script-loader.d.ts","../node_modules/bullmq/dist/esm/commands/index.d.ts","../node_modules/bullmq/dist/esm/enums/error-code.enum.d.ts","../node_modules/bullmq/dist/esm/enums/index.d.ts","../node_modules/bullmq/dist/esm/utils.d.ts","../node_modules/bullmq/dist/esm/index.d.ts","./src/lib/score-import/worker/queue.ts","./src/lib/handlers/sigterm.ts","./src/lib/migration/migrations/add-following-to-users.ts","./src/lib/migration/migrations/add-lockedat.ts","./src/lib/migration/migrations/add-preferredRanking-to-ugpt.ts","./src/lib/migration/migrations/add-rivals-to-ugpt.ts","./src/lib/migration/migrations/chunithm-fix-preferred-default-enum.ts","./src/lib/score-import/framework/calculated-data/score.ts","./src/lib/score-import/framework/score-importing/derivers.ts","./src/lib/score-import/framework/pb/create-pb-doc.ts","./src/lib/score-import/framework/pb/process-pbs.ts","./src/lib/score-import/framework/score-importing/score-id.ts","./src/lib/targets/goal-utils.ts","./src/lib/targets/goals.ts","./src/utils/efficient-db-iterate.ts","./src/lib/migration/migrations/chunithm-lamp-split.ts","./src/lib/migration/migrations/fix-undefined-bms-data.ts","./src/lib/score-import/framework/calculated-data/session.ts","./node_modules/@types/node-fetch/node_modules/form-data/index.d.ts","./node_modules/@types/node-fetch/externals.d.ts","./node_modules/@types/node-fetch/index.d.ts","./src/utils/fetch.ts","./src/lib/webhooks/webhooks.ts","./src/lib/score-import/framework/goals/goals.ts","./src/lib/targets/quests.ts","./src/lib/score-import/framework/quests/quests.ts","./src/lib/game-settings/create-game-settings.ts","./src/lib/score-import/framework/calculated-data/profile.ts","./src/utils/class.ts","./src/lib/score-import/framework/calculated-data/profile-classes.ts","./src/lib/score-import/framework/profile-calculated-data/classes.ts","./src/lib/score-import/framework/ugpt-stats/update-ugpt-stats.ts","./src/utils/calculations/recalc-scores.ts","./src/lib/score-mutation/update-score.ts","./src/lib/migration/migrations/join-inf-casthour-charts.ts","./src/lib/migration/migrations/join-inf-casthour-songs.ts","./src/lib/migration/migrations/ktRating-to-curator-skill.ts","./src/lib/migration/migrations/maimaidx-fix-lamps.ts","./src/lib/migration/migrations/mark-fervidex-as-without-intent.ts","./src/lib/migration/migrations/mark-kshook-as-without-intent.ts","./src/lib/migration/migrations/null-lr2hook-failed-bps.ts","./src/lib/migration/migrations/ongeki-v2.ts","./src/utils/calculations/recalc-sessions.ts","./src/lib/score-mutation/delete-scores.ts","./src/lib/migration/migrations/remove-above-100pc.ts","./src/lib/migration/migrations/remove-iidx-beginners.ts","./src/lib/migration/migrations/remove-iidx-extra-beginners.ts","./src/lib/migration/migrations/remove-multifolder-stats.ts","./src/lib/migration/migrations/remove-random.ts","./src/lib/migration/migrations/remove-session-views.ts","./src/lib/migration/migrations/rm-hot.ts","./src/lib/migration/migrations/sessions-to-scoreIDs.ts","./src/lib/migration/migrations/update-jubeat-preferred-tables.ts","./src/lib/migration/migrations/v3-props.ts","./src/lib/migration/migrations/v3-scores.ts","./src/lib/migration/migrations.ts","./src/main.ts","./src/override-types.ts","./src/datasets/words.ts","../node_modules/@types/glob/index.d.ts","../node_modules/@types/rimraf/index.d.ts","./src/test-utils/resets.ts","./node_modules/@types/tap/index.d.ts","./src/external/mongo/db.test.ts","./src/game-implementations/types.ts","../node_modules/rg-stats/js/util/types.d.ts","../node_modules/rg-stats/js/algorithms/poyashi-bpi.d.ts","../node_modules/rg-stats/js/algorithms/chunithm-rating.d.ts","../node_modules/rg-stats/js/algorithms/jubility.d.ts","../node_modules/rg-stats/js/algorithms/volforce.d.ts","../node_modules/rg-stats/js/algorithms/wacca-rate.d.ts","../node_modules/rg-stats/js/algorithms/gitadora-skill.d.ts","../node_modules/rg-stats/js/algorithms/popn-classpoints.d.ts","../node_modules/rg-stats/js/algorithms/itg-highest-unbroken.d.ts","../node_modules/rg-stats/js/algorithms/maimaidx-rate.d.ts","../node_modules/rg-stats/js/algorithms/curator-skill.d.ts","../node_modules/rg-stats/js/algorithms/maimai-rate.d.ts","../node_modules/rg-stats/js/algorithms/potential.d.ts","../node_modules/rg-stats/js/algorithms/ongeki-rating.d.ts","../node_modules/rg-stats/js/algorithms/ddr-flare.d.ts","../node_modules/rg-stats/js/main.d.ts","./src/game-implementations/games/_common.ts","./src/game-implementations/games/arcaea.ts","./src/game-implementations/games/bms-pms.ts","./src/game-implementations/games/chunithm.ts","./src/game-implementations/utils/pb-merge.ts","./src/game-implementations/utils/session-calc.ts","./src/game-implementations/games/ddr.ts","./src/game-implementations/games/gitadora.ts","./src/game-implementations/games/iidx.ts","./src/game-implementations/games/itg.ts","./src/game-implementations/games/jubeat.ts","./src/game-implementations/games/maimai.ts","./src/game-implementations/games/maimaidx.ts","./src/game-implementations/games/museca.ts","./src/game-implementations/games/ongeki.ts","./src/game-implementations/games/popn.ts","./src/game-implementations/games/sdvx.ts","./src/game-implementations/games/usc.ts","./src/game-implementations/games/wacca.ts","./src/game-implementations/game-implementations.ts","./src/lib/constants/usc-ir.ts","./src/test-utils/test-data.ts","./src/test-utils/misc.ts","./src/test-utils/single-process-snapshot.ts","./src/game-implementations/games/arcaea.test.ts","./src/game-implementations/games/bms-pms.test.ts","./src/game-implementations/games/chunithm.test.ts","./src/game-implementations/games/ddr.test.ts","./src/game-implementations/games/gitadora.test.ts","./src/game-implementations/games/iidx.test.ts","../common/js/config/game-support/jubeat.d.ts","./src/game-implementations/games/jubeat.test.ts","../common/js/config/game-support/maimai.d.ts","./src/game-implementations/games/maimai.test.ts","../common/js/config/game-support/maimai-dx.d.ts","./src/game-implementations/games/maimaidx.test.ts","./src/game-implementations/games/museca.test.ts","./src/game-implementations/games/ongeki.test.ts","../common/js/config/game-support/popn.d.ts","./src/game-implementations/games/popn.test.ts","./src/game-implementations/games/sdvx.test.ts","./src/game-implementations/games/usc.test.ts","../common/js/config/game-support/wacca.d.ts","./src/game-implementations/games/wacca.test.ts","./src/game-implementations/utils/profile-calc.ts","./src/lib/activity/activity.ts","../node_modules/node-mocks-http/lib/index.d.ts","./src/test-utils/mock-request.ts","../node_modules/@types/mkdirp/index.d.ts","../node_modules/@aws-sdk/types/dist-types/abort.d.ts","../node_modules/@aws-sdk/types/dist-types/logger.d.ts","../node_modules/@aws-sdk/types/dist-types/http.d.ts","../node_modules/@aws-sdk/types/dist-types/response.d.ts","../node_modules/@aws-sdk/types/dist-types/util.d.ts","../node_modules/@aws-sdk/types/dist-types/middleware.d.ts","../node_modules/@aws-sdk/types/dist-types/command.d.ts","../node_modules/@aws-sdk/types/dist-types/client.d.ts","../node_modules/@aws-sdk/types/dist-types/credentials.d.ts","../node_modules/@aws-sdk/types/dist-types/crypto.d.ts","../node_modules/@aws-sdk/types/dist-types/eventStream.d.ts","../node_modules/@aws-sdk/types/dist-types/pagination.d.ts","../node_modules/@aws-sdk/types/dist-types/transfer.d.ts","../node_modules/@aws-sdk/types/dist-types/serde.d.ts","../node_modules/@aws-sdk/types/dist-types/shapes.d.ts","../node_modules/@aws-sdk/types/dist-types/signature.d.ts","../node_modules/@aws-sdk/types/dist-types/waiter.d.ts","../node_modules/@aws-sdk/types/dist-types/index.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/client.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/command.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/constants.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/date-utils.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/defaults-mode.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/emitWarningIfUnsupportedVersion.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/extended-encode-uri-component.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/get-array-if-single-item.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/get-value-from-text-node.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/lazy-json.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/parse-utils.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/ser-utils.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/split-every.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/index.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/models/models_0.d.ts","../node_modules/@aws-sdk/node-config-provider/dist-types/fromEnv.d.ts","../node_modules/@aws-sdk/shared-ini-file-loader/dist-types/index.d.ts","../node_modules/@aws-sdk/node-config-provider/dist-types/fromSharedConfigFiles.d.ts","../node_modules/@aws-sdk/node-config-provider/dist-types/fromStatic.d.ts","../node_modules/@aws-sdk/node-config-provider/dist-types/configLoader.d.ts","../node_modules/@aws-sdk/node-config-provider/dist-types/index.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/endpointsConfig/NodeUseDualstackEndpointConfigOptions.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/endpointsConfig/NodeUseFipsEndpointConfigOptions.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/endpointsConfig/resolveEndpointsConfig.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/endpointsConfig/resolveCustomEndpointsConfig.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/endpointsConfig/index.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionConfig/config.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionConfig/resolveRegionConfig.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionConfig/index.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionInfo/EndpointVariantTag.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionInfo/EndpointVariant.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionInfo/PartitionHash.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionInfo/RegionHash.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionInfo/getRegionInfo.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionInfo/index.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/index.d.ts","../node_modules/@aws-sdk/eventstream-serde-config-resolver/dist-types/EventStreamSerdeConfig.d.ts","../node_modules/@aws-sdk/eventstream-serde-config-resolver/dist-types/index.d.ts","../node_modules/@aws-sdk/middleware-bucket-endpoint/dist-types/NodeDisableMultiregionAccessPointConfigOptions.d.ts","../node_modules/@aws-sdk/middleware-bucket-endpoint/dist-types/NodeUseArnRegionConfigOptions.d.ts","../node_modules/@aws-sdk/middleware-bucket-endpoint/dist-types/configurations.d.ts","../node_modules/@aws-sdk/middleware-bucket-endpoint/dist-types/bucketEndpointMiddleware.d.ts","../node_modules/@aws-sdk/util-arn-parser/dist-types/index.d.ts","../node_modules/@aws-sdk/middleware-bucket-endpoint/dist-types/bucketHostnameUtils.d.ts","../node_modules/@aws-sdk/middleware-bucket-endpoint/dist-types/bucketHostname.d.ts","../node_modules/@aws-sdk/middleware-bucket-endpoint/dist-types/index.d.ts","../node_modules/@aws-sdk/middleware-host-header/dist-types/index.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/types.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/StandardRetryStrategy.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/AdaptiveRetryStrategy.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/DefaultRateLimiter.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/config.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/configurations.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/delayDecider.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/omitRetryHeadersMiddleware.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/retryDecider.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/retryMiddleware.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/index.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/SignatureV4.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/getCanonicalHeaders.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/getCanonicalQuery.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/getPayloadHash.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/moveHeadersToQuery.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/prepareRequest.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/normalizeProvider.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/credentialDerivation.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/index.d.ts","../node_modules/@aws-sdk/middleware-signing/dist-types/configurations.d.ts","../node_modules/@aws-sdk/middleware-signing/dist-types/middleware.d.ts","../node_modules/@aws-sdk/middleware-signing/dist-types/index.d.ts","../node_modules/@aws-sdk/middleware-user-agent/dist-types/configurations.d.ts","../node_modules/@aws-sdk/middleware-user-agent/dist-types/user-agent-middleware.d.ts","../node_modules/@aws-sdk/middleware-user-agent/dist-types/index.d.ts","../node_modules/@aws-sdk/protocol-http/dist-types/httpRequest.d.ts","../node_modules/@aws-sdk/protocol-http/dist-types/httpResponse.d.ts","../node_modules/@aws-sdk/protocol-http/dist-types/httpHandler.d.ts","../node_modules/@aws-sdk/protocol-http/dist-types/isValidHostname.d.ts","../node_modules/@aws-sdk/protocol-http/dist-types/index.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/CompleteMultipartUploadCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/CopyObjectCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/CreateBucketCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/CreateMultipartUploadCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketAnalyticsConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketCorsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketEncryptionCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketIntelligentTieringConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketInventoryConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketLifecycleCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketMetricsConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketOwnershipControlsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketPolicyCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketReplicationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketTaggingCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketWebsiteCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteObjectCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteObjectsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteObjectTaggingCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/DeletePublicAccessBlockCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketAccelerateConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketAclCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketAnalyticsConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketCorsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketEncryptionCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketIntelligentTieringConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketInventoryConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketLifecycleConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketLocationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketLoggingCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketMetricsConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketNotificationConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketOwnershipControlsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketPolicyCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketPolicyStatusCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketReplicationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketRequestPaymentCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketTaggingCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketVersioningCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketWebsiteCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectAclCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectLegalHoldCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectLockConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectRetentionCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectTaggingCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectTorrentCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/GetPublicAccessBlockCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/HeadBucketCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/HeadObjectCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/ListBucketAnalyticsConfigurationsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/ListBucketIntelligentTieringConfigurationsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/ListBucketInventoryConfigurationsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/ListBucketMetricsConfigurationsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/ListBucketsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/ListMultipartUploadsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/ListObjectsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/ListObjectsV2Command.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/ListObjectVersionsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/ListPartsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketAccelerateConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketAclCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketAnalyticsConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketCorsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketEncryptionCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketIntelligentTieringConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketInventoryConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketLifecycleConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketLoggingCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketMetricsConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketNotificationConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketOwnershipControlsCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketPolicyCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketReplicationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketRequestPaymentCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketTaggingCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketVersioningCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketWebsiteCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectAclCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectLegalHoldCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectLockConfigurationCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectRetentionCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectTaggingCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/PutPublicAccessBlockCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/models/models_1.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/RestoreObjectCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/SelectObjectContentCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/UploadPartCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/UploadPartCopyCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/WriteGetObjectResponseCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/S3Client.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/AbortMultipartUploadCommand.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/S3.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/commands/index.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/models/index.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/pagination/Interfaces.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/pagination/ListObjectsV2Paginator.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/pagination/ListPartsPaginator.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/pagination/index.d.ts","../node_modules/@aws-sdk/util-waiter/dist-types/waiter.d.ts","../node_modules/@aws-sdk/util-waiter/dist-types/createWaiter.d.ts","../node_modules/@aws-sdk/util-waiter/dist-types/index.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/waiters/waitForBucketExists.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/waiters/waitForBucketNotExists.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/waiters/waitForObjectExists.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/waiters/waitForObjectNotExists.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/waiters/index.d.ts","../node_modules/@aws-sdk/client-s3/dist-types/index.d.ts","./src/lib/cdn/s3.ts","./src/lib/cdn/cdn.ts","./src/lib/cdn/cdn.test.ts","./src/lib/cdn/url-format.ts","./src/lib/constants/ea3id.ts","../node_modules/@types/bunyan/index.d.ts","./src/lib/email/client.ts","./src/lib/email/formats.ts","./src/lib/game-settings/create-game-settings.test.ts","./src/lib/game-specific/iidx-playlists.ts","./src/lib/score-import/framework/import-locks/lock.ts","./src/lib/imports/imports.ts","./src/lib/imports/imports.test.ts","./src/lib/invites/invites.ts","./src/lib/invites/invites.test.ts","./src/lib/seeds/repo.ts","./src/lib/jobs/backsync-bms-pms-data.ts","./src/lib/jobs/bms-ai-table-sync.ts","./src/lib/orphan-queue/orphan-queue.ts","./src/lib/jobs/bms-table-sync.ts","./src/utils/queries/blacklist.ts","./src/lib/score-import/framework/common/score-utils.ts","./src/utils/queries/charts.ts","./src/utils/queries/songs.ts","./src/lib/score-import/import-types/api/myt-chunithm/converter.ts","./src/lib/score-import/import-types/api/myt-maimaidx/converter.ts","./src/lib/score-import/import-types/api/myt-ongeki/converter.ts","./src/lib/score-import/import-types/api/myt-wacca/converter.ts","./src/lib/score-import/import-types/common/api-cg/util.ts","./src/lib/score-import/import-types/common/api-cg/jb/converter.ts","./src/lib/score-import/import-types/common/api-cg/museca/converter.ts","./src/lib/score-import/import-types/common/api-cg/popn/converter.ts","./src/lib/score-import/import-types/common/api-cg/sdvx/converter.ts","./src/lib/score-import/import-types/common/api-kai/iidx/converter.ts","./src/lib/score-import/import-types/common/api-kai/sdvx/converter.ts","./src/lib/score-import/framework/score-importing/score-import-error.ts","./src/lib/score-import/framework/common/string-asserts.ts","./src/lib/score-import/import-types/common/batch-manual/converter.ts","./src/lib/score-import/import-types/common/eamusement-iidx-csv/converter.ts","./src/lib/score-import/import-types/file/eamusement-sdvx-csv/converter.ts","./src/lib/score-import/import-types/file/solid-state-squad/converter.ts","./src/lib/score-import/import-types/file/wacca-mypage-scraper/converter.ts","./src/lib/score-import/import-types/ir/barbatos/converter.ts","./src/lib/score-import/import-types/ir/beatoraja/converter.ts","./src/lib/score-import/import-types/ir/fervidex/converter.ts","./src/lib/score-import/import-types/ir/fervidex-static/converter.ts","./src/lib/score-import/import-types/ir/kshook-sv6c/converter.ts","./src/lib/score-import/import-types/ir/kshook-sv6c-static/converter.ts","./src/lib/score-import/import-types/ir/lr2hook/converter.ts","./src/lib/score-import/import-types/ir/usc/converter.ts","./src/lib/score-import/import-types/converters.ts","./src/utils/queries/auth.ts","./src/lib/score-import/import-types/common/api-kai/utils.ts","./src/lib/score-import/import-types/common/api-kai/reauth.ts","./src/lib/score-import/import-types/common/api-kai/traverse-api.ts","../common/js/config/game-support/iidx.d.ts","./src/lib/score-import/import-types/common/api-kai/iidx/class-handler.ts","./src/lib/score-import/import-types/common/api-kai/iidx/parser.ts","./src/lib/score-import/import-types/api/eag-iidx/parser.ts","../common/js/config/game-support/sdvx.d.ts","./src/lib/score-import/import-types/common/api-kai/sdvx/class-handler.ts","./src/lib/score-import/import-types/common/api-kai/sdvx/parser.ts","./src/lib/score-import/import-types/api/eag-sdvx/parser.ts","./src/lib/score-import/import-types/api/flo-iidx/parser.ts","./src/lib/score-import/import-types/api/flo-sdvx/parser.ts","./src/lib/score-import/import-types/api/min-sdvx/parser.ts","../node_modules/@grpc/grpc-js/build/src/auth-context.d.ts","../node_modules/@grpc/grpc-js/build/src/metadata.d.ts","../node_modules/@grpc/grpc-js/build/src/call-credentials.d.ts","../node_modules/@grpc/grpc-js/build/src/constants.d.ts","../node_modules/@grpc/grpc-js/build/src/deadline.d.ts","../node_modules/@grpc/grpc-js/build/src/certificate-provider.d.ts","../node_modules/@grpc/grpc-js/build/src/compression-algorithms.d.ts","../node_modules/@grpc/grpc-js/build/src/channel-options.d.ts","../node_modules/@grpc/grpc-js/build/src/uri-parser.d.ts","../node_modules/@grpc/grpc-js/build/src/channel-credentials.d.ts","../node_modules/@grpc/grpc-js/build/src/connectivity-state.d.ts","../node_modules/@js-sdsl/ordered-map/dist/esm/index.d.ts","../node_modules/protobufjs/index.d.ts","../node_modules/protobufjs/ext/descriptor/index.d.ts","../node_modules/@grpc/proto-loader/build/src/util.d.ts","../node_modules/long/umd/types.d.ts","../node_modules/long/umd/index.d.ts","../node_modules/@grpc/proto-loader/build/src/index.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Timestamp.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelRef.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SubchannelRef.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTraceEvent.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelTrace.d.ts","../node_modules/@grpc/grpc-js/build/src/subchannel-address.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelRequest.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelConnectivityState.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ChannelData.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketRef.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channel.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetChannelResponse.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerRequest.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerRef.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/ServerData.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Server.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerResponse.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsRequest.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServerSocketsResponse.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersRequest.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetServersResponse.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketRequest.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Int64Value.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Any.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketOption.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/SocketData.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Address.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Security.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Socket.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSocketResponse.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelRequest.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Subchannel.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetSubchannelResponse.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsRequest.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/GetTopChannelsResponse.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/Channelz.d.ts","../node_modules/@grpc/grpc-js/build/src/channelz.d.ts","../node_modules/@grpc/grpc-js/build/src/channel.d.ts","../node_modules/@grpc/grpc-js/build/src/client-interceptors.d.ts","../node_modules/@grpc/grpc-js/build/src/client.d.ts","../node_modules/@grpc/grpc-js/build/src/server-credentials.d.ts","../node_modules/@grpc/grpc-js/build/src/subchannel-call.d.ts","../node_modules/@grpc/grpc-js/build/src/transport.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/xds/data/orca/v3/OrcaLoadReport.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/Duration.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/xds/service/orca/v3/OrcaLoadReportRequest.d.ts","../node_modules/@grpc/grpc-js/build/src/generated/xds/service/orca/v3/OpenRcaService.d.ts","../node_modules/@grpc/grpc-js/build/src/subchannel.d.ts","../node_modules/@grpc/grpc-js/build/src/subchannel-interface.d.ts","../node_modules/@grpc/grpc-js/build/src/duration.d.ts","../node_modules/@grpc/grpc-js/build/src/service-config.d.ts","../node_modules/@grpc/grpc-js/build/src/load-balancer.d.ts","../node_modules/@grpc/grpc-js/build/src/picker.d.ts","../node_modules/@grpc/grpc-js/build/src/orca.d.ts","../node_modules/@grpc/grpc-js/build/src/server-interceptors.d.ts","../node_modules/@grpc/grpc-js/build/src/server.d.ts","../node_modules/@grpc/grpc-js/build/src/make-client.d.ts","../node_modules/@grpc/grpc-js/build/src/events.d.ts","../node_modules/@grpc/grpc-js/build/src/object-stream.d.ts","../node_modules/@grpc/grpc-js/build/src/server-call.d.ts","../node_modules/@grpc/grpc-js/build/src/call-interface.d.ts","../node_modules/@grpc/grpc-js/build/src/call.d.ts","../node_modules/@grpc/grpc-js/build/src/status-builder.d.ts","../node_modules/@grpc/grpc-js/build/src/admin.d.ts","../node_modules/@grpc/grpc-js/build/src/logging.d.ts","../node_modules/@grpc/grpc-js/build/src/filter.d.ts","../node_modules/@grpc/grpc-js/build/src/resolver.d.ts","../node_modules/@grpc/grpc-js/build/src/backoff-timeout.d.ts","../node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.d.ts","../node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.d.ts","../node_modules/@grpc/grpc-js/build/src/filter-stack.d.ts","../node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.d.ts","../node_modules/@grpc/grpc-js/build/src/load-balancing-call.d.ts","../node_modules/@grpc/grpc-js/build/src/resolving-call.d.ts","../node_modules/@grpc/grpc-js/build/src/retrying-call.d.ts","../node_modules/@grpc/grpc-js/build/src/internal-channel.d.ts","../node_modules/@grpc/grpc-js/build/src/experimental.d.ts","../node_modules/@grpc/grpc-js/build/src/index.d.ts","./src/lib/score-import/import-types/common/api-myt/types.ts","./src/lib/score-import/import-types/common/api-myt/util.ts","./src/lib/score-import/import-types/common/api-myt/traverse-api.ts","./src/lib/score-import/import-types/api/myt-chunithm/parser.ts","./src/lib/score-import/import-types/api/myt-maimaidx/parser.ts","./src/lib/score-import/import-types/api/myt-ongeki/parser.ts","./src/lib/score-import/import-types/api/myt-wacca/class-handler.ts","./src/lib/score-import/import-types/api/myt-wacca/parser.ts","./src/lib/score-import/import-types/common/api-cg/traverse-api.ts","./src/lib/score-import/import-types/common/api-cg/parsers.ts","./src/lib/score-import/import-types/common/batch-manual/class-handler.ts","./src/lib/score-import/import-types/common/batch-manual/parser.ts","./src/lib/score-import/import-types/file/batch-manual/parser.ts","./src/utils/naive-csv-parser.ts","./src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.ts","./src/lib/score-import/import-types/file/eamusement-iidx-csv/parser.ts","./src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.ts","./src/lib/score-import/import-types/file/pli-iidx-csv/parser.ts","./node_modules/fast-xml-parser/src/fxp.d.ts","./src/lib/score-import/import-types/file/solid-state-squad/parser.ts","../node_modules/csv-parse/lib/index.d.ts","../node_modules/csv-parse/lib/sync.d.ts","./src/lib/score-import/import-types/file/wacca-mypage-scraper/class-handler.ts","./src/lib/score-import/import-types/file/wacca-mypage-scraper/parser.ts","./src/lib/score-import/import-types/ir/barbatos/parser.ts","./src/lib/score-import/import-types/ir/beatoraja/parser.ts","./src/lib/score-import/import-types/ir/direct-manual/parser.ts","./src/utils/ea3id.ts","./src/lib/score-import/import-types/ir/fervidex/parser.ts","./src/lib/score-import/import-types/ir/fervidex-static/class-handler.ts","./src/lib/score-import/import-types/ir/fervidex-static/parser.ts","./src/lib/score-import/import-types/ir/kshook-sv6c/parser.ts","./src/lib/score-import/import-types/ir/kshook-sv6c-static/parser.ts","./src/lib/score-import/import-types/ir/lr2hook/parser.ts","./src/lib/score-import/import-types/ir/usc/parser.ts","./src/lib/score-import/import-types/parsers.ts","./src/lib/score-import/worker/types.ts","./src/lib/score-import/framework/common/import-logger.ts","./src/utils/session.ts","./src/lib/score-import/framework/sessions/name-generation.ts","./src/lib/score-import/framework/sessions/sessions.ts","./src/lib/score-import/framework/score-importing/hydrate-score.ts","./src/lib/score-import/framework/score-importing/insert-score.ts","./src/lib/score-import/framework/score-importing/validate-score.ts","./src/lib/score-import/framework/score-importing/score-importing.ts","./src/lib/score-import/framework/score-importing/score-import-main.ts","./src/lib/score-import/framework/orphans/orphans.ts","./src/lib/jobs/deorphan-scores.ts","./src/lib/jobs/ugs-snapshot.ts","./src/lib/jobs/update-bpi-data.ts","../node_modules/html-entities/dist/esm/index.d.ts","../node_modules/node-html-parser/dist/void-tag.d.ts","../node_modules/node-html-parser/dist/nodes/type.d.ts","../node_modules/node-html-parser/dist/nodes/node.d.ts","../node_modules/node-html-parser/dist/nodes/html.d.ts","../node_modules/node-html-parser/dist/nodes/comment.d.ts","../node_modules/node-html-parser/dist/nodes/text.d.ts","../node_modules/node-html-parser/dist/parse.d.ts","../node_modules/node-html-parser/dist/valid.d.ts","../node_modules/node-html-parser/dist/index.d.ts","./src/lib/jobs/update-dp-tiers.ts","./src/lib/jobs/update-sp12-data.ts","./src/lib/jobs/inline-job-runner/job-runner.ts","./src/lib/logger/logger.test.ts","./src/lib/migration/migrations.test.ts","./src/lib/migration/migrations/remove-jubeat-night.ts","./src/lib/migration/migrations/sdvx-maxxive-goals.ts","./src/lib/migration/migrations/sdvx-maxxive-lamp-rearrange.ts","./src/lib/notifications/notifications.test.ts","./src/lib/score-import/framework/common/get-input-parser.ts","./src/lib/score-import/framework/status-tracking/import-status-tracking.ts","./src/lib/score-import/framework/score-import.ts","./src/lib/score-import/framework/express-wrapper.ts","./src/lib/score-import/framework/score-import.test.ts","./src/lib/score-import/framework/common/string-asserts.test.ts","./src/lib/score-import/framework/goals/goals.test.ts","./src/lib/score-import/framework/orphans/orphans.test.ts","./src/lib/score-import/framework/pb/create-pb-doc.test.ts","./src/lib/score-import/framework/pb/process-pbs.test.ts","./src/lib/score-import/framework/profile-calculated-data/classes.test.ts","./src/lib/score-import/framework/quests/quests.test.ts","./src/lib/score-import/framework/score-importing/hydrate-score.test.ts","./src/lib/score-import/framework/score-importing/insert-score.test.ts","./src/lib/score-import/framework/score-importing/score-id.test.ts","./src/lib/score-import/framework/score-importing/score-import-error.test.ts","./src/lib/score-import/framework/score-importing/score-importing.test.ts","./src/lib/score-import/framework/score-importing/validate-score.test.ts","./src/lib/score-import/framework/sessions/name-generation.test.ts","./src/lib/score-import/framework/sessions/sessions.test.ts","./src/lib/score-import/framework/ugpt-stats/update-ugpt-stats.test.ts","./src/lib/score-import/import-types/api/myt-chunithm/converter.test.ts","./src/lib/score-import/import-types/api/myt-maimaidx/converter.test.ts","./src/lib/score-import/import-types/api/myt-ongeki/converter.test.ts","./src/lib/score-import/import-types/api/myt-wacca/converter.test.ts","./src/lib/score-import/import-types/common/api-cg/jb/converter.test.ts","./src/lib/score-import/import-types/common/api-cg/museca/converter.test.ts","./src/lib/score-import/import-types/common/api-cg/popn/converter.test.ts","./src/lib/score-import/import-types/common/api-cg/sdvx/converter.test.ts","./src/test-utils/mock-fetch.ts","./src/lib/score-import/import-types/common/api-kai/reauth.test.ts","./src/lib/score-import/import-types/common/api-kai/traverse-api.test.ts","./src/lib/score-import/import-types/common/api-kai/iidx/class-handler.test.ts","./src/lib/score-import/import-types/common/api-kai/iidx/converter.test.ts","./src/lib/score-import/import-types/common/api-kai/iidx/parser.test.ts","./src/lib/score-import/import-types/common/api-kai/sdvx/class-handler.test.ts","./src/lib/score-import/import-types/common/api-kai/sdvx/converter.test.ts","./src/lib/score-import/import-types/common/api-kai/sdvx/parser.test.ts","./src/lib/score-import/import-types/common/batch-manual/converter.test.ts","./src/lib/score-import/import-types/common/batch-manual/parser.test.ts","./src/lib/score-import/import-types/common/eamusement-iidx-csv/converter.test.ts","./src/test-utils/mock-multer.ts","./src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.test.ts","./src/lib/score-import/import-types/file/eamusement-sdvx-csv/converter.test.ts","./src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.test.ts","./src/lib/score-import/import-types/file/solid-state-squad/converter.test.ts","./src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts","./src/lib/score-import/import-types/file/wacca-mypage-scraper/converter.test.ts","./src/lib/score-import/import-types/file/wacca-mypage-scraper/parser.test.ts","./src/lib/score-import/import-types/ir/barbatos/converter.test.ts","./src/lib/score-import/import-types/ir/barbatos/parser.test.ts","./src/lib/score-import/import-types/ir/fervidex/converter.test.ts","./src/lib/score-import/import-types/ir/fervidex/parser.test.ts","./src/lib/score-import/import-types/ir/fervidex-static/class-handler.test.ts","./src/lib/score-import/import-types/ir/fervidex-static/converter.test.ts","./src/lib/score-import/import-types/ir/fervidex-static/parser.test.ts","./src/lib/score-import/import-types/ir/kshook-sv6c/converter.test.ts","./src/lib/score-import/import-types/ir/kshook-sv6c/parser.test.ts","./src/lib/score-import/import-types/ir/kshook-sv6c-static/converter.test.ts","./src/lib/score-import/import-types/ir/kshook-sv6c-static/parser.test.ts","./src/lib/score-import/import-types/ir/lr2hook/converter.test.ts","./src/lib/score-import/import-types/ir/lr2hook/parser.test.ts","./src/lib/score-import/import-types/ir/usc/converter.test.ts","./src/lib/score-import/import-types/ir/usc/parser.test.ts","./src/lib/score-import/worker/worker.ts","./src/lib/score-mutation/delete-scores.test.ts","./src/lib/score-mutation/update-isprimary.ts","./src/lib/score-mutation/update-score.test.ts","./src/lib/search/fzf/numerics.ts","./src/lib/search/fzf/runes.ts","./src/lib/search/fzf/char.ts","./src/lib/search/fzf/normalize.ts","./src/lib/search/fzf/slab.ts","./src/lib/search/fzf/algo.ts","./src/lib/search/fzf/types.ts","./src/lib/search/fzf/pattern.ts","./src/lib/search/fzf/extended.ts","./src/lib/search/fzf/matchers.ts","./src/lib/search/fzf/finders.ts","./src/lib/search/fzf/tiebreakers.ts","./src/lib/search/fzf/main.ts","./src/lib/search/search.ts","./src/lib/search/search.test.ts","./src/lib/showcase/evaluator.ts","./src/lib/showcase/evaluator.test.ts","./src/lib/showcase/get-related.ts","./src/lib/showcase/get-stats.ts","./src/lib/showcase/get-stats.test.ts","./src/lib/showcase/showcase.ts","./src/lib/showcase/showcase.test.ts","./src/lib/targets/goals.test.ts","./src/lib/targets/types.ts","./src/lib/v3/migration-tools.ts","../node_modules/@types/google-protobuf/index.d.ts","./src/proto/generated/cards/cards_pb.d.ts","./src/proto/generated/cards/cards_grpc_pb.d.ts","./src/proto/generated/chunithm/common_grpc_pb.d.ts","./src/proto/generated/chunithm/common_pb.d.ts","./src/proto/generated/chunithm/playlog_grpc_pb.d.ts","./src/proto/generated/chunithm/playlog_pb.d.ts","./src/proto/generated/chunithm/user_pb.d.ts","./src/proto/generated/chunithm/user_grpc_pb.d.ts","./src/proto/generated/maimai/common_grpc_pb.d.ts","./src/proto/generated/maimai/common_pb.d.ts","./src/proto/generated/maimai/playlog_grpc_pb.d.ts","./src/proto/generated/maimai/playlog_pb.d.ts","./src/proto/generated/maimai/user_pb.d.ts","./src/proto/generated/maimai/user_grpc_pb.d.ts","./src/proto/generated/ongeki/common_grpc_pb.d.ts","./src/proto/generated/ongeki/common_pb.d.ts","./src/proto/generated/ongeki/playlog_grpc_pb.d.ts","./src/proto/generated/ongeki/playlog_pb.d.ts","./src/proto/generated/ongeki/user_pb.d.ts","./src/proto/generated/ongeki/user_grpc_pb.d.ts","./src/proto/generated/wacca/common_grpc_pb.d.ts","./src/proto/generated/wacca/common_pb.d.ts","./src/proto/generated/wacca/user_pb.d.ts","./src/proto/generated/wacca/user_grpc_pb.d.ts","../node_modules/commander/typings/index.d.ts","./src/scripts/anonymise-db.ts","./src/scripts/init-sequence-docs.ts","../db/js/generated/public/AuthLevel.d.ts","../node_modules/kysely/dist/esm/query-builder/insert-result.d.ts","../node_modules/kysely/dist/esm/query-builder/delete-result.d.ts","../node_modules/kysely/dist/esm/query-builder/update-result.d.ts","../node_modules/kysely/dist/esm/util/type-error.d.ts","../node_modules/kysely/dist/esm/query-builder/merge-result.d.ts","../node_modules/kysely/dist/esm/util/type-utils.d.ts","../node_modules/kysely/dist/esm/operation-node/operation-node.d.ts","../node_modules/kysely/dist/esm/operation-node/identifier-node.d.ts","../node_modules/kysely/dist/esm/operation-node/check-constraint-node.d.ts","../node_modules/kysely/dist/esm/operation-node/column-node.d.ts","../node_modules/kysely/dist/esm/operation-node/default-value-node.d.ts","../node_modules/kysely/dist/esm/operation-node/generated-node.d.ts","../node_modules/kysely/dist/esm/operation-node/schemable-identifier-node.d.ts","../node_modules/kysely/dist/esm/operation-node/table-node.d.ts","../node_modules/kysely/dist/esm/operation-node/references-node.d.ts","../node_modules/kysely/dist/esm/operation-node/column-definition-node.d.ts","../node_modules/kysely/dist/esm/operation-node/add-column-node.d.ts","../node_modules/kysely/dist/esm/operation-node/drop-column-node.d.ts","../node_modules/kysely/dist/esm/operation-node/rename-column-node.d.ts","../node_modules/kysely/dist/esm/operation-node/raw-node.d.ts","../node_modules/kysely/dist/esm/operation-node/alter-column-node.d.ts","../node_modules/kysely/dist/esm/operation-node/foreign-key-constraint-node.d.ts","../node_modules/kysely/dist/esm/operation-node/primary-constraint-node.d.ts","../node_modules/kysely/dist/esm/operation-node/unique-constraint-node.d.ts","../node_modules/kysely/dist/esm/operation-node/constraint-node.d.ts","../node_modules/kysely/dist/esm/operation-node/add-constraint-node.d.ts","../node_modules/kysely/dist/esm/operation-node/drop-constraint-node.d.ts","../node_modules/kysely/dist/esm/operation-node/modify-column-node.d.ts","../node_modules/kysely/dist/esm/operation-node/drop-index-node.d.ts","../node_modules/kysely/dist/esm/operation-node/add-index-node.d.ts","../node_modules/kysely/dist/esm/operation-node/alter-table-node.d.ts","../node_modules/kysely/dist/esm/operation-node/where-node.d.ts","../node_modules/kysely/dist/esm/operation-node/create-index-node.d.ts","../node_modules/kysely/dist/esm/operation-node/create-schema-node.d.ts","../node_modules/kysely/dist/esm/operation-node/create-table-node.d.ts","../node_modules/kysely/dist/esm/operation-node/value-list-node.d.ts","../node_modules/kysely/dist/esm/operation-node/create-type-node.d.ts","../node_modules/kysely/dist/esm/operation-node/from-node.d.ts","../node_modules/kysely/dist/esm/operation-node/group-by-item-node.d.ts","../node_modules/kysely/dist/esm/operation-node/group-by-node.d.ts","../node_modules/kysely/dist/esm/operation-node/having-node.d.ts","../node_modules/kysely/dist/esm/operation-node/on-node.d.ts","../node_modules/kysely/dist/esm/operation-node/join-node.d.ts","../node_modules/kysely/dist/esm/operation-node/limit-node.d.ts","../node_modules/kysely/dist/esm/operation-node/offset-node.d.ts","../node_modules/kysely/dist/esm/operation-node/order-by-item-node.d.ts","../node_modules/kysely/dist/esm/operation-node/order-by-node.d.ts","../node_modules/kysely/dist/esm/operation-node/alias-node.d.ts","../node_modules/kysely/dist/esm/operation-node/select-all-node.d.ts","../node_modules/kysely/dist/esm/operation-node/reference-node.d.ts","../node_modules/kysely/dist/esm/operation-node/simple-reference-expression-node.d.ts","../node_modules/kysely/dist/esm/operation-node/selection-node.d.ts","../node_modules/kysely/dist/esm/operation-node/common-table-expression-name-node.d.ts","../node_modules/kysely/dist/esm/operation-node/common-table-expression-node.d.ts","../node_modules/kysely/dist/esm/operation-node/with-node.d.ts","../node_modules/kysely/dist/esm/operation-node/select-modifier-node.d.ts","../node_modules/kysely/dist/esm/operation-node/operation-node-source.d.ts","../node_modules/kysely/dist/esm/expression/expression.d.ts","../node_modules/kysely/dist/esm/util/explainable.d.ts","../node_modules/kysely/dist/esm/operation-node/explain-node.d.ts","../node_modules/kysely/dist/esm/operation-node/set-operation-node.d.ts","../node_modules/kysely/dist/esm/operation-node/value-node.d.ts","../node_modules/kysely/dist/esm/operation-node/fetch-node.d.ts","../node_modules/kysely/dist/esm/operation-node/top-node.d.ts","../node_modules/kysely/dist/esm/operation-node/select-query-node.d.ts","../node_modules/kysely/dist/esm/operation-node/create-view-node.d.ts","../node_modules/kysely/dist/esm/operation-node/drop-schema-node.d.ts","../node_modules/kysely/dist/esm/operation-node/drop-table-node.d.ts","../node_modules/kysely/dist/esm/operation-node/drop-type-node.d.ts","../node_modules/kysely/dist/esm/operation-node/drop-view-node.d.ts","../node_modules/kysely/dist/esm/operation-node/output-node.d.ts","../node_modules/kysely/dist/esm/operation-node/when-node.d.ts","../node_modules/kysely/dist/esm/operation-node/merge-query-node.d.ts","../node_modules/kysely/dist/esm/operation-node/column-update-node.d.ts","../node_modules/kysely/dist/esm/operation-node/on-conflict-node.d.ts","../node_modules/kysely/dist/esm/operation-node/on-duplicate-key-node.d.ts","../node_modules/kysely/dist/esm/operation-node/returning-node.d.ts","../node_modules/kysely/dist/esm/operation-node/insert-query-node.d.ts","../node_modules/kysely/dist/esm/operation-node/primitive-value-list-node.d.ts","../node_modules/kysely/dist/esm/operation-node/update-query-node.d.ts","../node_modules/kysely/dist/esm/operation-node/using-node.d.ts","../node_modules/kysely/dist/esm/operation-node/delete-query-node.d.ts","../node_modules/kysely/dist/esm/operation-node/query-node.d.ts","../node_modules/kysely/dist/esm/query-compiler/query-compiler.d.ts","../node_modules/kysely/dist/esm/query-compiler/compiled-query.d.ts","../node_modules/kysely/dist/esm/driver/database-connection.d.ts","../node_modules/kysely/dist/esm/driver/driver.d.ts","../node_modules/kysely/dist/esm/dialect/database-introspector.d.ts","../node_modules/kysely/dist/esm/dialect/dialect-adapter.d.ts","../node_modules/kysely/dist/esm/dialect/dialect.d.ts","../node_modules/kysely/dist/esm/driver/connection-provider.d.ts","../node_modules/kysely/dist/esm/util/query-id.d.ts","../node_modules/kysely/dist/esm/plugin/kysely-plugin.d.ts","../node_modules/kysely/dist/esm/query-executor/query-executor.d.ts","../node_modules/kysely/dist/esm/util/compilable.d.ts","../node_modules/kysely/dist/esm/parser/default-value-parser.d.ts","../node_modules/kysely/dist/esm/schema/column-definition-builder.d.ts","../node_modules/kysely/dist/esm/operation-node/data-type-node.d.ts","../node_modules/kysely/dist/esm/parser/data-type-parser.d.ts","../node_modules/kysely/dist/esm/schema/alter-column-builder.d.ts","../node_modules/kysely/dist/esm/schema/alter-table-executor.d.ts","../node_modules/kysely/dist/esm/schema/foreign-key-constraint-builder.d.ts","../node_modules/kysely/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts","../node_modules/kysely/dist/esm/schema/alter-table-drop-constraint-builder.d.ts","../node_modules/kysely/dist/esm/query-builder/select-query-builder-expression.d.ts","../node_modules/kysely/dist/esm/parser/table-parser.d.ts","../node_modules/kysely/dist/esm/operation-node/binary-operation-node.d.ts","../node_modules/kysely/dist/esm/operation-node/operator-node.d.ts","../node_modules/kysely/dist/esm/parser/value-parser.d.ts","../node_modules/kysely/dist/esm/util/column-type.d.ts","../node_modules/kysely/dist/esm/parser/binary-operation-parser.d.ts","../node_modules/kysely/dist/esm/query-builder/join-builder.d.ts","../node_modules/kysely/dist/esm/parser/join-parser.d.ts","../node_modules/kysely/dist/esm/dynamic/dynamic-reference-builder.d.ts","../node_modules/kysely/dist/esm/parser/select-parser.d.ts","../node_modules/kysely/dist/esm/parser/order-by-parser.d.ts","../node_modules/kysely/dist/esm/parser/group-by-parser.d.ts","../node_modules/kysely/dist/esm/query-builder/where-interface.d.ts","../node_modules/kysely/dist/esm/query-builder/no-result-error.d.ts","../node_modules/kysely/dist/esm/query-builder/having-interface.d.ts","../node_modules/kysely/dist/esm/parser/set-operation-parser.d.ts","../node_modules/kysely/dist/esm/util/streamable.d.ts","../node_modules/kysely/dist/esm/operation-node/and-node.d.ts","../node_modules/kysely/dist/esm/operation-node/or-node.d.ts","../node_modules/kysely/dist/esm/operation-node/parens-node.d.ts","../node_modules/kysely/dist/esm/expression/expression-wrapper.d.ts","../node_modules/kysely/dist/esm/query-builder/select-query-builder.d.ts","../node_modules/kysely/dist/esm/parser/coalesce-parser.d.ts","../node_modules/kysely/dist/esm/operation-node/partition-by-item-node.d.ts","../node_modules/kysely/dist/esm/operation-node/partition-by-node.d.ts","../node_modules/kysely/dist/esm/operation-node/over-node.d.ts","../node_modules/kysely/dist/esm/operation-node/aggregate-function-node.d.ts","../node_modules/kysely/dist/esm/parser/partition-by-parser.d.ts","../node_modules/kysely/dist/esm/query-builder/over-builder.d.ts","../node_modules/kysely/dist/esm/query-builder/aggregate-function-builder.d.ts","../node_modules/kysely/dist/esm/query-builder/function-module.d.ts","../node_modules/kysely/dist/esm/operation-node/case-node.d.ts","../node_modules/kysely/dist/esm/query-builder/case-builder.d.ts","../node_modules/kysely/dist/esm/operation-node/json-path-leg-node.d.ts","../node_modules/kysely/dist/esm/operation-node/json-path-node.d.ts","../node_modules/kysely/dist/esm/operation-node/json-operator-chain-node.d.ts","../node_modules/kysely/dist/esm/operation-node/json-reference-node.d.ts","../node_modules/kysely/dist/esm/query-builder/json-path-builder.d.ts","../node_modules/kysely/dist/esm/parser/tuple-parser.d.ts","../node_modules/kysely/dist/esm/expression/expression-builder.d.ts","../node_modules/kysely/dist/esm/parser/expression-parser.d.ts","../node_modules/kysely/dist/esm/parser/reference-parser.d.ts","../node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.d.ts","../node_modules/kysely/dist/esm/schema/unique-constraint-builder.d.ts","../node_modules/kysely/dist/esm/schema/alter-table-builder.d.ts","../node_modules/kysely/dist/esm/schema/create-index-builder.d.ts","../node_modules/kysely/dist/esm/schema/create-schema-builder.d.ts","../node_modules/kysely/dist/esm/schema/create-table-builder.d.ts","../node_modules/kysely/dist/esm/schema/drop-index-builder.d.ts","../node_modules/kysely/dist/esm/schema/drop-schema-builder.d.ts","../node_modules/kysely/dist/esm/schema/drop-table-builder.d.ts","../node_modules/kysely/dist/esm/query-executor/query-executor-provider.d.ts","../node_modules/kysely/dist/esm/raw-builder/raw-builder.d.ts","../node_modules/kysely/dist/esm/schema/create-view-builder.d.ts","../node_modules/kysely/dist/esm/schema/drop-view-builder.d.ts","../node_modules/kysely/dist/esm/schema/create-type-builder.d.ts","../node_modules/kysely/dist/esm/schema/drop-type-builder.d.ts","../node_modules/kysely/dist/esm/schema/schema.d.ts","../node_modules/kysely/dist/esm/dynamic/dynamic.d.ts","../node_modules/kysely/dist/esm/operation-node/values-node.d.ts","../node_modules/kysely/dist/esm/parser/insert-values-parser.d.ts","../node_modules/kysely/dist/esm/parser/update-set-parser.d.ts","../node_modules/kysely/dist/esm/parser/returning-parser.d.ts","../node_modules/kysely/dist/esm/query-builder/returning-interface.d.ts","../node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.ts","../node_modules/kysely/dist/esm/query-builder/output-interface.d.ts","../node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.ts","../node_modules/kysely/dist/esm/query-builder/delete-query-builder.d.ts","../node_modules/kysely/dist/esm/query-builder/update-query-builder.d.ts","../node_modules/kysely/dist/esm/query-builder/cte-builder.d.ts","../node_modules/kysely/dist/esm/parser/with-parser.d.ts","../node_modules/kysely/dist/esm/query-builder/merge-query-builder.d.ts","../node_modules/kysely/dist/esm/query-creator.d.ts","../node_modules/kysely/dist/esm/util/log.d.ts","../node_modules/kysely/dist/esm/kysely.d.ts","../node_modules/kysely/dist/esm/raw-builder/sql.d.ts","../node_modules/kysely/dist/esm/query-executor/query-executor-base.d.ts","../node_modules/kysely/dist/esm/query-executor/default-query-executor.d.ts","../node_modules/kysely/dist/esm/query-executor/noop-query-executor.d.ts","../node_modules/kysely/dist/esm/operation-node/list-node.d.ts","../node_modules/kysely/dist/esm/operation-node/default-insert-value-node.d.ts","../node_modules/kysely/dist/esm/operation-node/unary-operation-node.d.ts","../node_modules/kysely/dist/esm/operation-node/function-node.d.ts","../node_modules/kysely/dist/esm/operation-node/tuple-node.d.ts","../node_modules/kysely/dist/esm/operation-node/matched-node.d.ts","../node_modules/kysely/dist/esm/operation-node/cast-node.d.ts","../node_modules/kysely/dist/esm/operation-node/operation-node-visitor.d.ts","../node_modules/kysely/dist/esm/query-compiler/default-query-compiler.d.ts","../node_modules/kysely/dist/esm/driver/default-connection-provider.d.ts","../node_modules/kysely/dist/esm/driver/single-connection-provider.d.ts","../node_modules/kysely/dist/esm/driver/dummy-driver.d.ts","../node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.ts","../node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts","../node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect.d.ts","../node_modules/kysely/dist/esm/dialect/sqlite/sqlite-driver.d.ts","../node_modules/kysely/dist/esm/dialect/postgres/postgres-query-compiler.d.ts","../node_modules/kysely/dist/esm/dialect/postgres/postgres-introspector.d.ts","../node_modules/kysely/dist/esm/dialect/postgres/postgres-adapter.d.ts","../node_modules/kysely/dist/esm/dialect/mysql/mysql-dialect-config.d.ts","../node_modules/kysely/dist/esm/dialect/mysql/mysql-dialect.d.ts","../node_modules/kysely/dist/esm/dialect/mysql/mysql-driver.d.ts","../node_modules/kysely/dist/esm/dialect/mysql/mysql-query-compiler.d.ts","../node_modules/kysely/dist/esm/dialect/mysql/mysql-introspector.d.ts","../node_modules/kysely/dist/esm/dialect/mysql/mysql-adapter.d.ts","../node_modules/kysely/dist/esm/dialect/postgres/postgres-dialect-config.d.ts","../node_modules/kysely/dist/esm/dialect/postgres/postgres-driver.d.ts","../node_modules/kysely/dist/esm/dialect/postgres/postgres-dialect.d.ts","../node_modules/kysely/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts","../node_modules/kysely/dist/esm/dialect/sqlite/sqlite-introspector.d.ts","../node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.ts","../node_modules/kysely/dist/esm/dialect/mssql/mssql-adapter.d.ts","../node_modules/kysely/dist/esm/dialect/mssql/mssql-dialect-config.d.ts","../node_modules/kysely/dist/esm/dialect/mssql/mssql-dialect.d.ts","../node_modules/kysely/dist/esm/dialect/mssql/mssql-driver.d.ts","../node_modules/kysely/dist/esm/dialect/mssql/mssql-introspector.d.ts","../node_modules/kysely/dist/esm/dialect/mssql/mssql-query-compiler.d.ts","../node_modules/kysely/dist/esm/migration/migrator.d.ts","../node_modules/kysely/dist/esm/migration/file-migration-provider.d.ts","../node_modules/kysely/dist/esm/plugin/camel-case/camel-case-plugin.d.ts","../node_modules/kysely/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts","../node_modules/kysely/dist/esm/plugin/with-schema/with-schema-plugin.d.ts","../node_modules/kysely/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts","../node_modules/kysely/dist/esm/operation-node/operation-node-transformer.d.ts","../node_modules/kysely/dist/esm/util/infer-result.d.ts","../node_modules/kysely/dist/esm/util/log-once.d.ts","../node_modules/kysely/dist/esm/parser/unary-operation-parser.d.ts","../node_modules/kysely/dist/esm/index.d.ts","../db/js/generated/public/Account.d.ts","../db/js/generated/public/PrivSvcCgCardInfo.d.ts","../db/js/generated/public/Game.d.ts","../db/js/generated/public/ClassAchievement.d.ts","../db/js/generated/public/ImportType.d.ts","../db/js/generated/public/ImportTracker.d.ts","../db/js/generated/public/SvcFerSettings.d.ts","../db/js/generated/public/InviteLock.d.ts","../db/js/generated/public/OrphanChart.d.ts","../db/js/generated/public/GameRival.d.ts","../db/js/generated/public/Goal.d.ts","../db/js/generated/public/GameSettings.d.ts","../db/js/generated/public/GameGroup.d.ts","../db/js/generated/public/Import.d.ts","../db/js/generated/public/Quest.d.ts","../db/js/generated/public/ImportQuest.d.ts","../db/js/generated/public/CronTaskExecution.d.ts","../db/js/generated/public/Notification.d.ts","../db/js/generated/public/ImportLock.d.ts","../db/js/generated/public/ScoreBlacklist.d.ts","../db/js/generated/public/Table.d.ts","../db/js/generated/public/Folder.d.ts","../db/js/generated/public/TableFolder.d.ts","../db/js/generated/public/GameStats.d.ts","../db/js/generated/public/PrivOauth2AuthToken.d.ts","../db/js/generated/public/Session.d.ts","../db/js/generated/public/ImportSession.d.ts","../db/js/generated/public/PrivSvcFerCard.d.ts","../db/js/generated/public/Song.d.ts","../db/js/generated/public/Chart.d.ts","../db/js/generated/public/Pb.d.ts","../db/js/generated/public/Score.d.ts","../db/js/generated/public/PbComposedFrom.d.ts","../db/js/generated/public/BmsCourseLookup.d.ts","../db/js/generated/public/SongSearchTerm.d.ts","../db/js/generated/public/ImportGame.d.ts","../db/js/generated/public/ImportGoal.d.ts","../db/js/generated/public/OrphanChartUser.d.ts","../db/js/generated/public/PrivVerifyEmailToken.d.ts","../db/js/generated/public/PrivInvite.d.ts","../db/js/generated/public/PrivPasswordResetToken.d.ts","../db/js/generated/public/AccountUsernameChange.d.ts","../db/js/generated/public/Migration.d.ts","../db/js/generated/public/AccountBadgeKind.d.ts","../db/js/generated/public/AccountBadge.d.ts","../db/js/generated/public/ActionResult.d.ts","../db/js/generated/public/Action.d.ts","../db/js/generated/public/PrivSvcKaiAuthToken.d.ts","../db/js/generated/public/GameSettingsShowcase.d.ts","../db/js/generated/public/AccountFollowing.d.ts","../db/js/generated/public/PrivAccountCredential.d.ts","../db/js/generated/public/ImportTiming.d.ts","../db/js/generated/public/QuestSub.d.ts","../db/js/generated/public/OrphanScore.d.ts","../db/js/generated/public/FolderView.d.ts","../db/js/generated/public/ChartVersion.d.ts","../db/js/generated/public/GoalSub.d.ts","../db/js/generated/public/FolderSearchTerm.d.ts","../db/js/generated/public/JobQueue.d.ts","../db/js/generated/public/PrivApiClient.d.ts","../db/js/generated/public/PrivApiToken.d.ts","../db/js/generated/public/SvcKshookSv6cSettings.d.ts","../db/js/generated/public/ImportError.d.ts","../db/js/generated/public/AccountSettings.d.ts","../db/js/generated/public/PrivSvcMytCardInfo.d.ts","../db/js/generated/public/Questline.d.ts","../db/js/generated/public/QuestlineQuest.d.ts","../db/js/generated/public/CronTask.d.ts","../db/js/generated/public/ImportClass.d.ts","../db/js/generated/public/SongAltTitle.d.ts","../db/js/generated/public/GameStatsSnapshot.d.ts","../db/js/generated/public/ChartLeaderboard.d.ts","../db/js/generated/public/PublicSchema.d.ts","../db/js/generated/Database.d.ts","../db/js/generated/index.d.ts","../node_modules/pg-types/index.d.ts","../node_modules/pg-protocol/dist/messages.d.ts","../node_modules/pg-protocol/dist/serializer.d.ts","../node_modules/pg-protocol/dist/parser.d.ts","../node_modules/pg-protocol/dist/index.d.ts","../node_modules/@types/pg/lib/type-overrides.d.ts","../node_modules/@types/pg/index.d.ts","../node_modules/@types/pg/index.d.mts","./src/scripts/load-seeds-pg.ts","./src/scripts/load-seeds.ts","./src/scripts/make-user-admin.ts","./src/scripts/migrate-to-postgres.ts","./src/scripts/mongo-count-collections.ts","./src/scripts/set-indexes.ts","./src/scripts/validate-database.ts","./src/scripts/email/send-test-email.ts","./src/scripts/folders/folder-cache.ts","./src/scripts/invites/create-invite-code.ts","./src/scripts/state-sync/dedupe-score-ids.ts","./src/scripts/state-sync/recalc-all-scores.ts","./src/scripts/state-sync/recalc-game-profiles.ts","./src/scripts/state-sync/recalc-sessions.ts","./src/scripts/state-sync/rederive-all-scores.ts","./src/scripts/state-sync/sync-state.ts","./src/scripts/state-sync/update-all-pbs.ts","../node_modules/@types/express-session/index.d.ts","./@types/express/index.d.ts","../node_modules/@types/connect-redis/index.d.ts","../node_modules/prom-client/index.d.ts","../node_modules/express-prom-bundle/types/index.d.ts","../node_modules/helmet/dist/types/middlewares/content-security-policy/index.d.ts","../node_modules/helmet/dist/types/middlewares/cross-origin-embedder-policy/index.d.ts","../node_modules/helmet/dist/types/middlewares/cross-origin-opener-policy/index.d.ts","../node_modules/helmet/dist/types/middlewares/cross-origin-resource-policy/index.d.ts","../node_modules/helmet/dist/types/middlewares/expect-ct/index.d.ts","../node_modules/helmet/dist/types/middlewares/origin-agent-cluster/index.d.ts","../node_modules/helmet/dist/types/middlewares/referrer-policy/index.d.ts","../node_modules/helmet/dist/types/middlewares/strict-transport-security/index.d.ts","../node_modules/helmet/dist/types/middlewares/x-content-type-options/index.d.ts","../node_modules/helmet/dist/types/middlewares/x-dns-prefetch-control/index.d.ts","../node_modules/helmet/dist/types/middlewares/x-download-options/index.d.ts","../node_modules/helmet/dist/types/middlewares/x-frame-options/index.d.ts","../node_modules/helmet/dist/types/middlewares/x-permitted-cross-domain-policies/index.d.ts","../node_modules/helmet/dist/types/middlewares/x-powered-by/index.d.ts","../node_modules/helmet/dist/types/middlewares/x-xss-protection/index.d.ts","../node_modules/helmet/dist/types/index.d.ts","./src/server/middleware/request-logger.ts","./src/server/middleware/auth.ts","../node_modules/@types/express-rate-limit/index.d.ts","../node_modules/@types/rate-limit-redis/node_modules/@types/express-rate-limit/index.d.ts","../node_modules/@types/rate-limit-redis/index.d.ts","./src/server/middleware/rate-limiter.ts","./src/server/router/api/v1/activity/router.ts","./src/utils/reset-state/destroy-ugpt.ts","./src/server/router/api/v1/admin/router.ts","./src/utils/url.ts","../node_modules/@types/bcryptjs/index.d.ts","./src/server/router/api/v1/auth/auth.ts","./src/server/router/api/v1/auth/router.ts","./src/server/router/api/v1/clients/middleware.ts","./src/server/router/api/v1/clients/router.ts","./src/server/router/api/v1/config/router.ts","./src/server/router/api/v1/games/_game/_playtype/middleware.ts","./src/server/router/api/v1/games/@gameSpecificRoutes/bms/router.ts","./src/server/router/api/v1/games/@gameSpecificRoutes/iidx/router.ts","./src/server/router/api/v1/games/@gameSpecificRoutes/router.ts","./src/utils/string-checks.ts","../node_modules/node-cache/index.d.ts","./src/server/router/api/v1/games/_game/_playtype/charts/_chartID/middleware.ts","./src/server/router/api/v1/games/_game/_playtype/charts/_chartID/router.ts","./src/server/router/api/v1/games/_game/_playtype/charts/router.ts","./src/server/router/api/v1/games/_game/_playtype/folders/middleware.ts","./src/server/router/api/v1/games/_game/_playtype/folders/router.ts","./src/server/router/api/v1/games/_game/_playtype/songs/_songID/middleware.ts","./src/server/router/api/v1/games/_game/_playtype/songs/_songID/router.ts","./src/server/router/api/v1/games/_game/_playtype/tables/middleware.ts","./src/server/router/api/v1/games/_game/_playtype/tables/router.ts","./src/server/router/api/v1/games/_game/_playtype/targets/goals/router.ts","./src/server/router/api/v1/games/_game/_playtype/targets/questlines/router.ts","./src/server/router/api/v1/games/_game/_playtype/targets/quests/router.ts","./src/server/router/api/v1/games/_game/_playtype/targets/router.ts","./src/server/router/api/v1/games/_game/_playtype/router.ts","./src/server/router/api/v1/games/_game/middleware.ts","./src/server/router/api/v1/games/_game/router.ts","./src/server/router/api/v1/games/router.ts","./src/server/router/api/v1/import/router.ts","./src/server/router/api/v1/imports/middleware.ts","./src/server/router/api/v1/imports/router.ts","./src/server/router/api/v1/oauth/router.ts","./src/server/router/api/v1/scores/_scoreID/middleware.ts","./src/server/router/api/v1/scores/_scoreID/router.ts","./src/server/router/api/v1/scores/router.ts","./src/server/router/api/v1/search/router.ts","./src/utils/git.ts","./src/server/router/api/v1/seeds/router.ts","./src/server/router/api/v1/sessions/_sessionID/middleware.ts","./src/server/router/api/v1/sessions/_sessionID/router.ts","./src/server/router/api/v1/sessions/router.ts","./src/server/router/api/v1/status/router.ts","./src/utils/queries/summary.ts","./src/server/router/api/v1/users/_userID/middleware.ts","./src/server/router/api/v1/users/_userID/api-tokens/router.ts","./src/utils/crypto.ts","./src/server/router/api/v1/users/_userID/banner/router.ts","./src/server/router/api/v1/users/_userID/following/router.ts","./src/server/router/api/v1/users/_userID/games/@gameSpecificRoutes/bms/router.ts","./src/server/router/api/v1/users/_userID/games/@gameSpecificRoutes/iidx/router.ts","./src/server/router/api/v1/users/_userID/games/@gameSpecificRoutes/jubeat/router.ts","./src/server/router/api/v1/users/_userID/games/@gameSpecificRoutes/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/folders/_folderID/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/folders/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/middleware.ts","./src/utils/queries/pbs.ts","./src/utils/scores.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/pbs/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/rivals/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/scores/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/sessions/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/settings/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/showcase/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/tables/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/goals/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/quests/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/router.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/router.ts","./src/server/router/api/v1/users/_userID/imports/router.ts","./src/server/router/api/v1/users/_userID/integrations/cg/_cgType/router.ts","./src/server/router/api/v1/users/_userID/integrations/fervidex/router.ts","./src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/middleware.ts","./src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/router.ts","./src/server/router/api/v1/users/_userID/integrations/kshook-sv6c/router.ts","./src/server/router/api/v1/users/_userID/integrations/myt/router.ts","./src/server/router/api/v1/users/_userID/integrations/router.ts","./src/server/router/api/v1/users/_userID/invites/router.ts","./src/server/router/api/v1/users/_userID/notifications/router.ts","./src/server/router/api/v1/users/_userID/pfp/router.ts","./src/server/router/api/v1/users/_userID/sessions/router.ts","./src/server/router/api/v1/users/_userID/settings/router.ts","./src/server/router/api/v1/users/_userID/router.ts","./src/server/router/api/v1/users/router.ts","./src/server/router/api/v1/router.ts","./src/server/middleware/type-require.ts","./src/server/router/ir/barbatos/router.ts","./src/server/router/ir/beatoraja/auth.ts","./src/server/router/ir/beatoraja/charts/_chartSHA256/convert-scores.ts","./src/server/router/ir/beatoraja/charts/_chartSHA256/router.ts","./src/server/router/ir/beatoraja/router.ts","./src/server/router/ir/direct-manual/router.ts","./src/server/router/ir/fervidex/router.ts","./src/server/router/ir/kshook/sv6c/router.ts","./src/server/router/ir/kshook/router.ts","./src/server/router/ir/lr2hook/router.ts","./src/server/router/ir/usc/_playtype/types.ts","./src/server/router/ir/usc/_playtype/usc.ts","./src/server/router/ir/usc/_playtype/router.ts","./src/server/router/ir/usc/router.ts","./src/server/router/ir/router.ts","./src/server/router/router.ts","./src/server/server.ts","../node_modules/@types/methods/index.d.ts","../node_modules/@types/cookiejar/index.d.ts","../node_modules/@types/superagent/lib/agent-base.d.ts","../node_modules/@types/superagent/lib/node/response.d.ts","../node_modules/@types/superagent/types.d.ts","../node_modules/@types/superagent/lib/node/agent.d.ts","../node_modules/@types/superagent/lib/request-base.d.ts","../node_modules/@types/superagent/node_modules/form-data/index.d.ts","../node_modules/@types/superagent/lib/node/http2wrapper.d.ts","../node_modules/@types/superagent/lib/node/index.d.ts","../node_modules/@types/superagent/index.d.ts","../node_modules/@types/supertest/index.d.ts","./src/test-utils/mock-api.ts","./src/server/middleware/auth.test.ts","../node_modules/@types/multer/index.d.ts","./src/server/middleware/multer-upload.ts","./src/server/middleware/prudence-validate.ts","./src/server/middleware/prudence-validate.test.ts","./src/server/middleware/sanitise-qstring.ts","./src/server/middleware/sanitise-qstring.test.ts","./src/server/middleware/update-last-seen.ts","./src/server/router/api/v1/router.test.ts","./src/test-utils/fake-auth.ts","./src/server/router/api/v1/admin/router.test.ts","./src/server/router/api/v1/auth/auth.test.ts","./src/server/router/api/v1/auth/router.test.ts","./src/server/router/api/v1/clients/middleware.test.ts","./src/server/router/api/v1/clients/router.test.ts","./src/server/router/api/v1/config/router.test.ts","./src/server/router/api/v1/games/router.test.ts","./src/server/router/api/v1/games/@gameSpecificRoutes/bms/router.test.ts","./src/server/router/api/v1/games/_game/router.test.ts","./src/server/router/api/v1/games/_game/_playtype/router.test.ts","./src/server/router/api/v1/games/_game/_playtype/charts/router.test.ts","./src/server/router/api/v1/games/_game/_playtype/charts/_chartID/router.test.ts","./src/server/router/api/v1/games/_game/_playtype/folders/router.test.ts","./src/server/router/api/v1/games/_game/_playtype/songs/_songID/router.test.ts","./src/server/router/api/v1/games/_game/_playtype/tables/router.test.ts","./src/server/router/api/v1/games/_game/_playtype/targets/router.test.ts","./src/server/router/api/v1/games/_game/_playtype/targets/goals/router.test.ts","./src/server/router/api/v1/games/_game/_playtype/targets/questlines/router.test.ts","./src/server/router/api/v1/games/_game/_playtype/targets/quests/router.test.ts","./src/test-utils/api-common.ts","./src/server/router/api/v1/import/router.test.ts","./src/server/router/api/v1/imports/router.test.ts","./src/server/router/api/v1/oauth/router.test.ts","./src/server/router/api/v1/scores/_scoreID/router.test.ts","./src/server/router/api/v1/search/router.test.ts","./src/server/router/api/v1/sessions/_sessionID/router.test.ts","./src/server/router/api/v1/status/router.test.ts","./src/server/router/api/v1/users/router.test.ts","./src/server/router/api/v1/users/_userID/router.test.ts","./src/server/router/api/v1/users/_userID/api-tokens/router.test.ts","./src/server/router/api/v1/users/_userID/banner/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/folders/_folderID/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/pbs/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/rivals/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/scores/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/sessions/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/settings/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/showcase/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/tables/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/goals/router.test.ts","./src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/quests/router.test.ts","./src/server/router/api/v1/users/_userID/imports/router.test.ts","./src/server/router/api/v1/users/_userID/integrations/fervidex/router.test.ts","./src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/middleware.test.ts","./src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/router.test.ts","./src/server/router/api/v1/users/_userID/integrations/kshook-sv6c/router.test.ts","./src/server/router/api/v1/users/_userID/invites/router.test.ts","./src/server/router/api/v1/users/_userID/notifications/router.test.ts","./src/server/router/api/v1/users/_userID/pfp/router.test.ts","./src/server/router/api/v1/users/_userID/settings/router.test.ts","./src/server/router/ir/barbatos/router.test.ts","./src/server/router/ir/beatoraja/auth.test.ts","./src/server/router/ir/beatoraja/router.test.ts","./src/server/router/ir/beatoraja/charts/_chartSHA256/convert-scores.test.ts","./src/server/router/ir/beatoraja/charts/_chartSHA256/router.test.ts","./src/server/router/ir/direct-manual/router.test.ts","./src/server/router/ir/fervidex/router.test.ts","./src/server/router/ir/kshook/sv6c/router.test.ts","./src/server/router/ir/lr2hook/router.test.ts","./src/server/router/ir/usc/_playtype/router.test.ts","./src/server/router/ir/usc/_playtype/usc.test.ts","./src/test-utils/asserts.ts","./src/test-utils/cleanup.ts","./src/test-utils/server.ts","./src/test-utils/setup.ts","./src/test-utils/single-process-tap.ts","./src/utils/crypto.test.ts","./src/utils/db.test.ts","./src/utils/folder.test.ts","./src/utils/misc.test.ts","./src/utils/naive-csv-parser.test.ts","./src/utils/session.test.ts","./src/utils/user.test.ts","./src/utils/calculations/recalc-game-profiles.ts","./src/utils/queries/stats.ts","./src/proto/generated/cards/cards_grpc_pb.js","./src/proto/generated/cards/cards_pb.js","./src/proto/generated/chunithm/common_grpc_pb.js","./src/proto/generated/chunithm/common_pb.js","./src/proto/generated/chunithm/playlog_grpc_pb.js","./src/proto/generated/chunithm/playlog_pb.js","./src/proto/generated/chunithm/user_grpc_pb.js","./src/proto/generated/chunithm/user_pb.js","./src/proto/generated/maimai/common_grpc_pb.js","./src/proto/generated/maimai/common_pb.js","./src/proto/generated/maimai/playlog_grpc_pb.js","./src/proto/generated/maimai/playlog_pb.js","./src/proto/generated/maimai/user_grpc_pb.js","./src/proto/generated/maimai/user_pb.js","./src/proto/generated/ongeki/common_grpc_pb.js","./src/proto/generated/ongeki/common_pb.js","./src/proto/generated/ongeki/playlog_grpc_pb.js","./src/proto/generated/ongeki/playlog_pb.js","./src/proto/generated/ongeki/user_grpc_pb.js","./src/proto/generated/ongeki/user_pb.js","./src/proto/generated/wacca/common_grpc_pb.js","./src/proto/generated/wacca/common_pb.js","./src/proto/generated/wacca/user_grpc_pb.js","./src/proto/generated/wacca/user_pb.js","./@types/mongodb/index.d.ts","./@types/why-is-node-running/index.d.ts"],"fileInfos":[{"version":"a1aa1a5e065d48ef5c7bb99e38412f96","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"d4306fb2e47f74835e8674ffac07d76f","impliedNodeFormat":99},{"version":"e437c5c1302869326c3bb93da85bbbcf","impliedNodeFormat":99},{"version":"e4324975a566567b21d350615f1fc6ac","impliedNodeFormat":99},{"version":"333b1b9a2a9ac3b8497dba5c63b5ba50","impliedNodeFormat":99},{"version":"6cffacd662b6eb5fa7a36aa2ea366bfa","impliedNodeFormat":99},{"version":"b4c34f9c23304dbef2d23698637ed638","impliedNodeFormat":99},{"version":"01ac052ec4a79e87229f90466a9645f8","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"edba5df642941aa062a62f6328c6df3d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"bb3a710cbcda0533bb127712927cbe37","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7a42de379b489e8f7b647455bebfc576","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"692bcd75364db0f65d428801c7884466","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":99},{"version":"7376cd32b4c24f5e3471d538cce0a6cc","affectsGlobalScope":true,"impliedNodeFormat":1},"afd868916e9e1d1fc494f6573e112e3f","52b842fca322a4b30f1f7b8cab78ab88",{"version":"7b395e75f006f1b735d397f8db9f19de","affectsGlobalScope":true,"impliedNodeFormat":1},"d63279d4a4e3c8976c93acccdbad5cee",{"version":"90630acdc4134173bcf216f187bd3010","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"913b52a39743d1c11984e4e124b1f3a8","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2514e9a2749c0fc18d2f478e9e1e641e","affectsGlobalScope":true,"impliedNodeFormat":1},"fe51d7a9bcdbcce1e65bbcf39b212298",{"version":"849a1873c4e917b0887368c1be897faa","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"c46c3108bde06d3b1fc6f802eb09eeeb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1332add604574cf529fb33b23304b296","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9af0a7e3ef1c42cd066b9f8d365cc1ba","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9eca652586205dc5b07f9ba57b1c8500","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ec5f75939754ce94652189ec7d0d3058","affectsGlobalScope":true,"impliedNodeFormat":1},"e2f0114efc512fd95bdc12c81d5e8d6a","628b774b54637325e286752c79c12432","bb1f9e3091b88e9d0e93b7198c736af3","514fd35e5eb35bb2e5cbb908af0a0aa2","ed57ae88565308729f2327f26d684976","dcd932d6b0038f2e250e30dc10125b22","9508c917bd7e458745e222a82dd24ef0","fabf86f455f96b90538cc26320ab2765","14550b4cd9f433e0addd8b6d67614d23","cf0ac6aebc25cb780674653aaeee688e","35fef7bac8048f583e4ce6eaa0c2a4c0","6752dc653fc7a333027249fd851fdb62","b9ad7e689b46dfba362c1bf174e69018","8b0a2930dfabdf27c69c6bb1eeabcdc8","4513b1ed15523d247040689f37fa9db2","5c0c499eed773a750903d9497beafacd","2377da227d1bac82ff7b3f2081ddf8d3","beef985b474fefeb80d27fb2c8778371","c79fc9d9f09ae598a374ae7c0b5284a4","f2caa3cebb1e6be855519004830a6be0","8ebc9f2a77c900e710801214c5cb994c","ec617a0e0577dd6a3210c3b067ecb325","1db5d06e485bd82d6d5f6e36925a8714","24b864518967840216c779b5e5f00975","8719cd8047700bfb6046798390053823","f2840afb502c94db92dab0fb8d27812f","a7e7d08b372210c203745d3eac61a411","531183cc80535e0e94226d720e5eb038","f627eb958ca52c85e42f04dce4661f86","9a43fc665bce9012a3d5fe1b574ff4dc","13f4b4da6546a34719fd6bde15fb63dd","a589216508844bfc00e62fc2d97fda45","865aea1c3209e31b076cb6fe780e769e","12e64aaf26af0f5c8f1b263dd66e3feb","928971ebbcdf5b093ef37669b33bddf6","b744265d8ad12b7d4d5c5dc35d18d44e","eff32168b8348b822afeed9cbf61afa7","9aafd1f29b4d8861c1c6c34bf83c0721",{"version":"a127795c4dad633990c87aa0b86831e5","affectsGlobalScope":true,"impliedNodeFormat":1},"4ef82d390af85e719a46d566e229dd83","7deced3ef46e082f97d49bb71622526a","fa7acb320bbf7da8f76e431437143034",{"version":"ee57e9bfec6167b488ced231a7bf233d","affectsGlobalScope":true,"impliedNodeFormat":1},"7aa99080b86233d5b21416907d7a75a6","7d6a8df1becce5c270da2093e7835920",{"version":"c37fea1584ced70492ff5748ed570abd","affectsGlobalScope":true,"impliedNodeFormat":1},"b2b472cd0bf0f8d5f022e00ca1c401f4",{"version":"e22c8fb0fc65df14299c6c94cf729b3c","affectsGlobalScope":true,"impliedNodeFormat":1},"a84efb87b57f78ea0b0577edaacd8b33","814e0c2cc2a92531b6dc5d2a1767a6e1","79ac55b2d493df83277d681e4d64a992","7ab3b7243211fa08af307609be231d6c","7fd0f028e135bdf15ff757781a2f4ba9",{"version":"cab5b406d3defff17c931e41fa98aeb1","affectsGlobalScope":true,"impliedNodeFormat":1},"aa7dc1db3d208fb91418794a18539d4c","e9b8fc3c9291fc5701e219c0407e973d","b8f5d7bb61117f48a99b0cecaa75d186","687b6f8f042393a27ce6c8fd32972129","1d3b57f542db6054f952f8076b3c6a3a","4e0ba29e69c1176d4b909ad8a85a2695",{"version":"e5d25a206975fb43b72d246ed86fd7fe","affectsGlobalScope":true,"impliedNodeFormat":1},"88822a7d78686871bb9c15cedd3f45f2","86308ea691fd06825dd9a3ce0f1e901a","44782881f424302151e0de8fdaa39575",{"version":"f0ef68e9c53d126a7b3bfc1ae9f2c7c4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"71259a408a4178e5f0795188b4d802f1","affectsGlobalScope":true,"impliedNodeFormat":1},"eb80d821e5e931dcccee2697f3e249e2","961969874f5ee12ed3429d3d0c82de02","9a62058bc2d476e807cc6594eed72adb","40cbc4bb3b225b03c54255154dada07d","6534825a8bda3eeecde9bca9e3a99712","09a582ab2a73806ab5887ea413b3d55a","a0592261111f47230eb35ee52c12e635","c8206d568b54e5ea06131963eecd576a","15878f4f50c2e562c0768eb735c2aed5",{"version":"b636ba40489f78f02a4b71322994828a","affectsGlobalScope":true,"impliedNodeFormat":1},"7b844f3801adf7e09ea25ec5f39f9a86","46c937d243665015f13587ac0db55909",{"version":"1f29cf27395029939dd41fce4f0c5653","affectsGlobalScope":true,"impliedNodeFormat":1},"f026c594d60114f10583261f6499df38","1ac553606580aeec204cce24c38b2e3f","3c29bf7066a67e7151f563fc1c4e56cb","00d49834780046c2d6a7da3e50d83cca",{"version":"377c78771ee061f2b4e59d5eb5a28782","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7293552290431bff8ef5f13e6f7fcbfc","affectsGlobalScope":true,"impliedNodeFormat":1},"9453ee3aca6a51ae747057fbc6388cf2","6c491c1508bd3e1df0f45f38b07243c2","1f99b8445612afcfaae0f8591d8d18ac",{"version":"bbd4e0ea8a847a4b60ba7d5741985c9d","affectsGlobalScope":true,"impliedNodeFormat":1},"f57ef54941c62bf28f3beafb86025735","7b6c16d46b33570aaef9d0fdc4f02f14","d9baefe45beff3fcb99e0e879c4b3a1a","a0e5e2be58876b4545cb3be195801e6e","1aa0fb5fa5d8275b5db27bc931aa1975","3449ea63993a991312e0e444ece2382b","7e5c546175ec5fae4c0e494ad24c5b90","bc6d97e46a1dafb8e8d1b601ccaf7e1a","579e6d11933f5644dc142c0a4e79c645","2a9d6baa2c42865fc9f5e7516d0910de","9ca582829e8eba4129943a1a941c6bbe","2aef22a88fd7dd975ba87f7c8e099fc3","836ca98928668baf27ac19645c07198e","757a8e678340c7a0aa01c699d2084933","48c676e5241e9876faafba68ef7d6d26","c3201c3dc232ea9f79fd9034b036ba94","16a3bf4e99e3275960702bbfcbbfa9d8","cd5c183c2bad150213a0cccaafe937e2","d6ea403bc9232d6fe7e7622a88f42faf",{"version":"7fa578df98e59f9f70329e3e06ae7784","affectsGlobalScope":true,"impliedNodeFormat":1},"2a85fc47377fe0593e11df0805c37b24","0bf60b6ce895c720124a6b0aba87990f","f5da2e5790c2d5acd98acdce0b2c6a60","0997be57498f2b766cc3561c7df58f06","4f8a359db312d088f12df2b4333c70b2","c5bea81fda0ed705abe31dfb992bebbf","c477deabb8273559c51cf15c1b1e5047","7e58f15b70f2d5b5a7e8cb98a02f3d3c","927c49f0f45c68c58ffd6b9cf87aae4a","e5a78b9126ed06f1747157ce45aa6e3e","29c297b3336e6ee3c2b9aa7c7dbdf00d","07841866bdfb5333a0eeb445e8052006","6920f70bd1a2a0d843f303d97bf5a34d","690366c4a4745cee21a794496be37fac","5f3c015bce4302b247acedb9ec20e302","a9fe29dcdd4288cacf574947747a4572","daada721cfdc43aa8e7c2e2d14d760de","c4d7f2ab9358166b1815281a9e767232","2af86ade36e4051944f46da0fd1df525","90eb781c9a8145090ce17290f0744bb6","a3ddf6412484d665d76145ba7fa319a8","b53e5eafe089103ad7be4f243fb517d4","344aa18a1a1f48b6d51fa564e2910864","ffd8c3d2e39447925561777d1ebcdc02","2b76267afeb2e83dff758e3fba2faa8a","662eae47724ed2ca873fb608034d0645","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","360c84ef5634445ed4b1111f041b6212","a21f1b172546b6a64cc7ddea394b54ea","937e86ab76f06c8dbd613be6555c03b6","8bdf05c98551836db89f23d60d176f56","5b3f18777c97e7ed444a39661c4462ba","cd3b63580b271a0e93649c0d92a1b098","1cc59f020b9d62d875bdb28a6e2f745b","a06c5977df8ff3f289f16a7505c8d539","652a1f711ddcd6149df9fc04c2d77ec7","f04158c558df8c51d46a1fb44c832c1c","d1ab6402ad42100de1cf3f5d15aa9d27","96b06af537c71de0a80e9ed880958afd","dec40354e62d8ca81f5996c1760bc6da","a9356de7c324c6f49c15587032b1f65f","9db07004a5d271a5a4c3f499ed8a033f","ec7a3f5e189221b1a18bed55a592c89d","99a82f62dda21efe5d337803128218c2","a442ebb1b6edfa29639d4a24f5d1c396","4cd7618cc2881d93b492a15623da2371","02bc0d4b7ecbca94437680a982525a3d","3d70b921157a6a89c44d605c61a3591a","0654472e60fa7ed76ac399023993a1b2","976e5a411658c3f3d932e58c7009dd18","ce9bc852a89abeb28a2e1944a67a38fd","d256a25b91a98fe284eecdae65806a6a","95be56cf50505206cc22c347ab8aabeb","16d1ee2ebc180b469f8bf4fc719c4fd3","b5e4b85cdedafe03af4b37863fc196d2","0404adf603fad8732cfd40fdbb852deb","d0cbaffd8d6c62fcd3f67d23a72cc0a0","d84b797323d32ef97c917e4c8108430a","7640a075842dbf3c5e764fa93975c452","ebd0758225677c1d0cd22765d76cb6ca","902dc7b68ab83a907358d239a8cc6d49","67d21f8d2a1dcd5fb9e783fbfe2db41c","ae53c0698b5db07fbd171471de9c9d26","951dc84d8b38b2dc11ed0cbf81c6497e","a7f372b582a3b59254db80872877b3c0","8d9bc161c3b439b83803de5a8f8c12d8","383cd35398822f3c21a4390b53366257",{"version":"f0bb7a1da124706b50145755ee8cf8b8","signature":"a17ebacdc0a52c3663ed67f56c94ad4f","impliedNodeFormat":1},"700bbcfb97fefd6e7972393ad0115682","9a928df09fd9867acf62d8e18bd0574d",{"version":"67724d5131efeffab7a0757eef9370a3","signature":"fda46a54f320dfff832e3b532aab84f2","impliedNodeFormat":1},"ec4eccca7dc09c8eac03e58d5704c74c","9eae95ed516d9ffa7c138c55a239f25a","5887704a74fe526306709df76895b35b","9150a1c64175f21cc5ffe4f8afdd448a","a9fe26f756afbfea74b602654818063f","a041df5c00a7c9e6343c519782e99329","a0e953a20af9886fa2db73d3d68c3db8","cc5eb6fdb237ad7cb907cd5e7c611242","df2373e8dd346e5c9cdcf1a8a6c887a7",{"version":"4a0b7958c9e0e6cdbe25f5ec06af2c9a","signature":"d77107bf7f947d569f7eadc36d271960","impliedNodeFormat":1},{"version":"9e6c94efe0dd29033f9211cfdcf98b47","signature":"e4cda3ad49de6476091785835bfe4794","impliedNodeFormat":1},"a59c8ce7421757c9d0167e2b1951e34c","22c31d4c73b7348d90e85b93a1ab3b15",{"version":"76382b52f21be2221db74dd5bab6ea83","signature":"5beb10eb1e4341b8af0c9e9f96bfece4","impliedNodeFormat":1},{"version":"529e07b4d8b0da4f64f6c5eeadfef614","signature":"80cb27d0ddf08eec941d4dc4de8a3dce","impliedNodeFormat":1},"6d1b3a6fbe7cb5c973aa0a9f45fca9f7",{"version":"2675a1300662cb0281f637e01f2701e3","signature":"0ae967c9c66288791fff20af2be20aef","impliedNodeFormat":1},{"version":"165dcd44603969f12c57d4a3384a05d2","signature":"e05b0a4557fe0a0d078d8f34e7000327","impliedNodeFormat":1},{"version":"38551513a589085fd3608e79f743f7a7","signature":"14bb0cdd7becddd7c863dece6c5d07e7","impliedNodeFormat":1},"6ed0b20033c580429f38a2b7b823a0f7","ca3dae57dbba7f5a8b2e3843dfbbc5f7",{"version":"a3fed9809f97eea88078ebac533a8d0c","signature":"7781b565e61c762924c321dd020f9312","impliedNodeFormat":1},{"version":"6974be9b3ed9c67b9dae08206a960173","signature":"a117650b3e167e18f7da98be415d2d04","impliedNodeFormat":1},"f8059a9ddf1aeefd103fce9c853541b9","f100181a3e9ff7f5b23eed47dd66a1de","fbb1086d78fad2e81eefa859d53b6ffd","fa614d3a843db2f4f4f804155cf537a6","c4437a75ed05801f47848d00286b7f3e","3ba13097824ea69f58be2c614d381cfe",{"version":"b8b1918ea1742524362ac049fb79b015","signature":"faad4cf5048da4aea8f61673916cce27","impliedNodeFormat":1},{"version":"89db72f18cd46c4eda0d86edcf8938ec","signature":"1c4e88dd0698984fb6bea639719bd042","impliedNodeFormat":1},{"version":"191591d0d8a814ab7f56dda38d622f3e","signature":"82bdb7e404f99c5d4484645e07e14225","impliedNodeFormat":1},{"version":"68d6b2c8547c21a7a57fe5e0ca5b6f3d","signature":"36b491761e5aea395152fa08b806b0de","impliedNodeFormat":1},{"version":"79ee168681115fe88d080a995b1b7525","signature":"f932da3cb9031d227d047686e8dc0faf","impliedNodeFormat":1},"fec48a9969b9b3b1fe2d141b061c7afb","b194c0ec01b94f0eea0d46173a9a19e5","2311985a540553dcc03eae04a4809d0f","48d44330f6a171cb2a8235a58d9ae741","af55edd1fef580be932ecf8ae1cd1144","86c47116442d4c875107b8058ede117f","a1d711676a7ac08553b43a4854c9fc0e","2a92ba5fe7af74cd6bf71d594c35e456","3d50d0091cd1fdc3b1361360ba277d26","21709b81f8bf68c544ed606b8613a249","1c98ac099c5074a8716f299d72391d8d","b82753266bad28da99c192df5c9e18b6","a48207efe856a82d23c0a387a3dd59eb","99bc70d8688048488c876b98c1ff26f4","6692c6e18f7e763c012516d0c306c8b5","d63ec531644668b3068fcc6ed5695869","f7092c2af3380976ce571edd8dd2cfb1","5e05465815f6af5d222c471e22e1b8bb","876617371871fea0ebe32e134cbc25aa",{"version":"cc88f59800c61533a23b6b1600ec3ea1","signature":"6a6f5696fe4f2cdf590a835b0394aec1","impliedNodeFormat":1},{"version":"9fa39506d9f9a6372d42eea44d3dcaa5","signature":"761aebe62a6778c9e76edf81bfa2ec79","impliedNodeFormat":1},{"version":"863113ce9102277b90f61f7216c5413d","signature":"0761a8cd22245c7fa065ef56eb2195e8","impliedNodeFormat":1},{"version":"c0af159d9554f85cc74baf72b379fcee","signature":"7caed932ba300fde58d3bb1a1e74b316","impliedNodeFormat":1},{"version":"d9dda1e9975d489d52cae02f7aea2a03","signature":"4a5988cd03dda6b67b064fbd59518a62","impliedNodeFormat":1},{"version":"81d8311b445b11c9076df58b71ab482a","signature":"4522e5f74e4d1029e79f114613c777cd","impliedNodeFormat":1},"9dad91c6969461f75aef8fc683a9376e","c33ae00968f45dfe2ef2bea7966cf6c5","18c8c018e7e8a2f4ae676f8661110c6d","24d9b69b67823f208423e5796b79c23b","bf799332c55c6eb4a6d9d652d6dda457","3948daef404f94c35fb3ceca755a27d6","cd2ad42b2eff27f2277cced9b91b270e","304539db53f7fe3cc4bfd5878b7223fe","9c56184330b09c7c690ed42d3bcff59d","450ca6229325f8123bea072e71c866ed","88d22ddd44a72912036f38833360b8f1","edeec51072253363d7345541bb78d745","32d5973e5b42693387462b0998810615","db80558b0bf2653338bcf91434263fda","0136b37037b7ce74caaad4abcdd15237","e6179eee2131e249ccd9f2dd960b92b5","c089839d8abcdfe1168ebde55894cad4","097a7aae20edb8e5de5f45463d6fa417","c1df21c2195796f767d0e03cf9ac00d1","1362b703c4f9be29bd918a71a07b7e6c","f71afe5e74b683a5260d9b7dbd741104","adcc06f04eaa91f672f07e00c5f63eec","6ea7a8edac19a93df999f41b0058f2a2","563051f5836b5e450d5c9868552c9685","e41fb55415372b37046b46fd27a3e8b9","649b0e8e352b40125538627774ddccd6","b1c43dab0c298c8661b08e49779c32a0","239019e12520a280526af43974a0aeca","ec8beec2c9e2259c26be90574cb94989","57d6b728909ea2c50bf50e0e19c99b8c","93f871c7865a245efe8b0b2405a09c9e","b9b7a66404c8da7d1fc634a7a69a989e","0312a7938ed343c86f23d1178be1a62f","0d34e16363c4b2e88f9be19c0eda14a3","b4646a5c02912f7b2e8ce18a2f960bb7","4ba759be6e6d6510d41817c11f60c6d2","482e3e94bb83169ff0a2f1cd516c9394","9e07e42545fb1aba960b46e3d676c245","bd8fbc7e2e26a4686f8b4c45386a46db","ad1145336b61b23d724d3923b953ae82",{"version":"6baa35cb1e54fc4dc89eb425fd40d4fd","signature":"88b55f36827796c227f0b3f7c278ea66","impliedNodeFormat":1},"81ffe24ac8999f2e25fff992831b7324",{"version":"5c5db2f6c783b689089cc094875ffebe","signature":"a769c888b6d2b811712057919ad6d695","impliedNodeFormat":1},"60b296825c8eb0d641e7cb044f2963bc","c51bc0f7fbcefeafa6390381fa84cbe7","2b5ca98148c95450aec2695b6a7818c0","52fd0f84a482dc4c9de3bf4809c5bc43","91c474ba116b629077ab72387e065297","2212b5fa87f7679f40d6b4b1401c00b0","cb9f600f60887fd7298134a50228f681","f6509801795e731436b1e5072d4581da","113073cf17af76b25463c0b65ee740ca","29d86cf6b617d48a177e8c42b02f8782","7cedefa1d8c9c1b0a4d10809e68d591f","93932e17b7ffaf2122b90dd7b714fb1f","21f4ca736cc52605e248e2e73d22ebb2","3908d43b7ba5889b79bfb6d4dcdb04be","213af722cc743ece1887de534c99b411","1cb87ed4b094b8b924b2f9b3bc3322b1","94519529064b459bbb8588f8976ee981","733e8d3d411cc4f3d8ee0f8584e9277e","4356500550a59855c6f6dcc0b79645a1","f2cf50ac31b9d681d7f2f015d88794d4","d91efe2f2c1ca8c36616e986c738b3f8","dd623f488d0f8689ecbc03559237071f","fd2a5c76855c1a408ba3c0abbe9ffef1","4a2389797e860beac58c2fb8062b8199","714082124858071613bc6d54aef70487","ee7b98c712e65f48a343db97d76eb1fa","21654e3570688a9eeb8fb059b1ee28e4","757719b8ae707881eac541b6d74e45ea","0b3d2b95dbd56c517ffd406d88e0c298","705c015525373d868b6c2769063de639","8c1cce9ef7519f6c7c323a3833c460c9","f376072603534c46e3845e5ae6ed9a04","dfc0b2815d76aeedb4d9966b1be4fcd3","dbb9f2f88dc8db4f03503f296b63903e","1e90022c0855d49bf61f5f42ec6b6ebe","4d3349bd8d1ab2d3d98ca6fbc8ee4e52","69f513336cf5a6f59f4a2a6ff8d3d6a9","bc8f31b52ea72a7de3843f3749620951","8b75a886049a851d2f72e0bd3f813066","d5fd470d924e97eb2e9a2e147b0fad51","59867cfe2801bb4128729082c12bc3cf","290b5d55ef0dfe761baf5208bec930dc","341fe0197833b2ea120b960a24078d8a","3b66cc46f8c55ab192633fc2e68479c4","566aa4016e4bfdb602be144dcb3f146d","3919bc2f9b291145228a54a007448ecf","20d1b543dc034ce4a34b81c708bfaa12","ad762e33471f63c0f1a7ab8e80cdfbb4",{"version":"f756e20423d240494a5425661bdc0fdb","signature":"7cc392b91c0ebfa91de2348d3609a0b8","impliedNodeFormat":1},{"version":"baa7420a2ab2353e48a54ea43dc5f0fc","signature":"b0f0b92e644e36e53b2692ea790f89eb","impliedNodeFormat":1},{"version":"2a2beaffab3d52bf7279185988ef0e07","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"4b7b64538d3e8cdb282fd4ce5a51c7aa","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"85d17969c072bc3e9f33f606b7066d98","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"2a37a2642a3f660d59be033333bd2e06","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"27e3f19b0df7eadd25c69c9b5209bc60","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"2f62c301d0543f6ef9834ba84c84f93b","signature":"dc912ae590820053ef05e0615f5f3893","impliedNodeFormat":1},{"version":"6856065e4605e3c9910f296db2e398ff","signature":"cb504e356252d44470ea6e158d27ad58","impliedNodeFormat":1},{"version":"b8d89d15cef9a04a580127e5b5200c46","signature":"29003c7f2d9058427abe811f76905e87","impliedNodeFormat":1},{"version":"049e1e15a8c39604a0501735505378ca","signature":"d579faf64d1a68dd0afaedcac8f123d9","impliedNodeFormat":1},{"version":"dcc2ffd4c3b6fc6b8385d120e2cd2223","signature":"a903ec14396a91d170899eb1479f3449","impliedNodeFormat":1},{"version":"7b0d5840347851a1d8c80d1726b35048","signature":"c06d77c592355aee41577da59452190c","impliedNodeFormat":1},{"version":"d0607138c9af1b631e7e53f26e25f2c1","signature":"ab5201eed855222c82236223f7c761f2","impliedNodeFormat":1},{"version":"d8417c7f9f002abdc1f10e579e68a247","signature":"3c4e19db84556337d1447d00045f7b8b","impliedNodeFormat":1},{"version":"66f6e48c354ab36d0b0e9496b87a424c","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"7c8eb98e4f2c1d6411857ae9b64bb0ac","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},"f85a67c15aeffeed2c87d9629545b2c0","80934c477870fc97980d6296f5e7f063","98e86452fc67f68abc49450eb5f01d73","9916f4848c2282b9cb588a41f6b7d823",{"version":"888a1b74fbc071ff7f4bed831f9391eb","signature":"5134b267648e3a9fcc545194492ff4ec","impliedNodeFormat":1},{"version":"99460dc0a2ad2a0899a2ec5f90f2fe45","signature":"cbc81ac1746b0e037747176707706a67","impliedNodeFormat":1},{"version":"96a9328bd01c1549b96d743b4151bbfb","signature":"81c798fdd5819d581102fe72c745f471","impliedNodeFormat":1},{"version":"4bf3bb97df02a7faf31758f457fc5fcb","signature":"df8b04707dbc2d349a1d0a0e9d5504d1","impliedNodeFormat":1},{"version":"91992eb47cf7dd272b1ed9a7b1b3170e","signature":"42f75dcc34c8116b58a58b0835220f1e","impliedNodeFormat":1},{"version":"ba58258263b732cbbc974f2c2d7fdc0b","signature":"b260f1c27f767c6b6eb74397909d712e","impliedNodeFormat":1},"b2083fa7c57abedbc3ce005b73c44982",{"version":"27fcd059fbb39a16212b00db0b9b386d","signature":"3582400367a446bcc72268ace4d064d9","impliedNodeFormat":1},"57fa4baf6e56b3eab02576dbf7b81b1e",{"version":"c8e3d4cb9f8dc38c9f471b6378bd82f4","signature":"a601c0987ec23e0920719b04960bfee1","impliedNodeFormat":1},{"version":"fba1c0a765f581b2c5e545a273240ef9","signature":"773a5e576b4ad92f1b3f4da2de962a79","impliedNodeFormat":1},{"version":"db51914c02a44edd9bcd7a52ec969eb5","signature":"7792cf9c4af733a90ce7302379dd8136","impliedNodeFormat":1},{"version":"49df1cf4111f36576aeac717e76a344e","signature":"879d6d82a6579891f12f369468d64e53","impliedNodeFormat":1},{"version":"e8350da70e639fd64b7f5865f2b431fe","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"a8b8e0b581510efaf24a7668a001a9d3","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"bf928b9baa33e84d4ecf8dd9cde6c119","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"4c91254611e4e499301d6e0a23397e28","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"322c5ceac165d3c21dc3a4bc9c5d43d9","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"9b56223dadad0114ab750ad189dc1282","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"2fa4baf3d25e7d07a665023b1e990e41","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"a75e2222c555e5b3f270de1ec624b2d5","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"9126b19d132c3a3b19bbefd68bdd8f66","signature":"3faa9ce17d511faad9404caa1de0b945","impliedNodeFormat":1},{"version":"f2e596df5694bf5d02e75a33e110951a","signature":"88edae03a76c98d7b0cad7d1ef936a3b","impliedNodeFormat":1},{"version":"a7ab154411adf01071ba939561d793a9","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"b53abdfcb67d7556b7513732fb84593a","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"3f70e7c17be04a85fc9b20fb774304c7","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"0408d5839264f31d0da39f5a5e98dcd9","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"f3e8ae462f80c2c81db09e4af6a7f049","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"b1dac434127b613ac5150cb5d922143b","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"9eb1e91baadf8a9280a0bee1d9475584","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"77e7754f9fe3bcec28e078153c5e6aa4","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"55187b6e990d2dd178cab74ba3fac632","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"36afcb58843ee7f061b8d58c3a26df7d","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"6906cf7ad1186e108a19305fd17af387","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"a960a593876d21b1d2b228b3a4dee57c","signature":"a5f2269a72cdb36133f5b64e8acd61ff","impliedNodeFormat":1},{"version":"28197464a55f67d0b16fd8a2e17df661","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"a87a20cdccd00125ed6752cc64479692","affectsGlobalScope":true,"impliedNodeFormat":1},"d5f88edf071dc47625a09b624e0f15b4","112adfdfe0121f630c2187e89145ee2c","3720c6074ec2bfeba0a1d638ab26a0bb",{"version":"e9a8867ab5613c9726b3444823dd3ed5","signature":"e0867f03a071d9e36a358bba863f9c90","impliedNodeFormat":1},{"version":"d6d171746f93983a3326fdf57c5916a2","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7020feb283806c86232f145731d593b9","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"19e9963018c38e31213d4f9779eb966c","signature":"004a8276ac06fd82f8794b2cfeba87d6","impliedNodeFormat":1},"58e6515b42564dd576591485ea14386d","a71be2d49e8f5a3fa541e1853789cd4e","0dd119002dc6613bad0b2d070c770577","99d83f6dc243042b8a22ceb52a57e498","ea26b52d5672afa2a2c9ce6a7b7af368","df5fdeca48b1b52a8d19739277ab41db","33aaede8aa3d72a61b792a1e7771e058","b5f9f334f477ef49ddab5b6ea5cdf6e4","fe7203b4271a828ed0dd9a42dd3dfb8f","e0fa829caecc65afdc573ad881c4146b","7f74a43e7f22207bd0e42d3fe4ca435b","e6ac6a7cdc797f6d3e6d276c4be54a7d","fabd5be8a26982c3e41a7a2f3355d126","53e1c7a2e32f612a2d7f7968b9880283","6c1284045dfce96c5cbc80deb5f6f071","a8ecd7bde74366e17a77e647e3a1fab5",{"version":"eb637e14af28a46c4fcb67b74baa8b88","signature":"a704d6276be4c6455f2a29ca7092b8b1","impliedNodeFormat":1},{"version":"05c5270db9325d8950f7e1c1fae2a066","signature":"cf7a31ae86a099aa68d71429e40772a1","impliedNodeFormat":1},{"version":"742c0d834960219b9ea2fee566d1fc9b","signature":"c5e4ba149966cb218e9c37c5b6fda9f8","impliedNodeFormat":1},{"version":"334e569a2fea1bf0303644c8ac52fec1","signature":"6ccb11a402b3a22a6ec148b53303b360","impliedNodeFormat":1},{"version":"d4995e360ca1e7be044d105b99b6a23a","signature":"748cc195db16469065f56dee32c824f9","impliedNodeFormat":1},"e9f4e8686f159ecd2e2c23501ca3bf21",{"version":"6dc39237a986ca2a68092eb7b6ad2ccd","signature":"697110c867c49cecf1d1dbd604cc1aef","impliedNodeFormat":1},{"version":"d7e8b4cd4d0b2d5707588c8b261e91b1","signature":"bdce7cbfdc1441e5bb0cfe181919d0e3","impliedNodeFormat":1},{"version":"90ad78ad46ec691450124a2b50b08865","signature":"fe53f0c85c02cc18a772e50d1fd79fee","impliedNodeFormat":1},{"version":"822e720e4c5f37563c14c1b2012fe2c5","signature":"b4d17e3e6bed5599d393fca2cac4538e","impliedNodeFormat":1},{"version":"70cbe112ffecb55742fd1c8b20c5d09c","signature":"1be1cc63e68c81cc51f2d62f5b0ee5cb","impliedNodeFormat":1},{"version":"e24aedeb56c3daa9c77720e6623e8194","signature":"0ff61ccb0b4f73fa2b51a7b9c7889d45","impliedNodeFormat":1},{"version":"14989b1209f2e9a0687b524f282324d6","signature":"48c05e0ff10b06980b505367df0ea45e","impliedNodeFormat":1},{"version":"7160073310dfc1af0bd613773dfe4737","signature":"f95cb75429caffaf566dc7192e44da0a","impliedNodeFormat":1},{"version":"f2ea9fc3a90af56b5e2fe960671f3b61","signature":"d99b2e5c9ce5a1354faed6efa491ef2a","impliedNodeFormat":1},{"version":"7e5f07870b1f4544bb475b7fe8a7cbf1","signature":"6283be1d557f58c82e59e89852232a2f","impliedNodeFormat":1},{"version":"7e6f524359a5a1702a5c7128757ad710","signature":"09ee54adb848c808289de3c3c922234a","impliedNodeFormat":1},{"version":"5f3a19c55b87f7a841c0515740a3ab7f","signature":"8f9f50722be96f3aff32f55aab059bf4","impliedNodeFormat":1},{"version":"04eeaedb5e6b8f31e083862b22586ba5","signature":"041d45b1c9ba58118efe1cc2e1cb5776","impliedNodeFormat":1},{"version":"5a816ba2a5692afaa3caffb581d67e96","signature":"dff58001fdb3c7b80a6766fb18365e9f","impliedNodeFormat":1},"1776d9f492e43715df3b13af00cdd088",{"version":"05ce5d85bd0b857c0f6085b66c588bb3","signature":"c6cba14dcefe95ebb948d363d3d7f242","impliedNodeFormat":1},{"version":"693179384fcd82b84e46bc755bd04669","signature":"92d9cad10fcca14d186e1834d605e1fe","impliedNodeFormat":1},{"version":"0c8ffea3584105d837021bbc24de5440","signature":"8ba3f4edb432fc143ab0f30295d147af","impliedNodeFormat":1},{"version":"82d456efbdc161c99bc274cf387cea17","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"8d9c8c8a4079382d851bb7e669baca68","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"e0125b49f46dba23e122a0a22756fdea","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"be575df193e79a9b566aaacdfcdad60f","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"aada23ea5de850ff602859913728cc24","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"91c6361180804cc2f4e267a7e3801fd2","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"d81b513164e3da3d3e1e6d24e32fe57e",{"version":"52ecf504fd2edc803e563b0775d65299","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"9166fa7095050286388d5dbe5e07992b",{"version":"195181c40508c9e8535c3bcd2967e8cb","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"efc1db0e35e32c7546f16dab4ff99466",{"version":"1c0211095d4dddc64efc638e6bdbfbca","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"fcd3e7f82dc850bf04da3dca84c79c22","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"0f08494f0ff88a577b1c1b0b1dfd059c","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"7cbcdc5c1b4f6c33f097d605c98c2d52",{"version":"21dedef508b24fe6b17a35ede73db673","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"2c0a7093b0556927b4d49cc93dce345a","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"a0d092521d05dfbf065f7bb4f79d5fed","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"128824b1301317b346102bba7bb9be9a",{"version":"7cc124f28e09afe200d4beadd198aad9","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"bd625f6e03ca5da33ced4ab55112af52","signature":"907cba5a23ad4907a8ff89997961a0e1","impliedNodeFormat":1},{"version":"4bc393853a59a7de2b7d9f66796ccbe0","signature":"983f4beef49d8a8dc3fdb811ba7fb7c5","impliedNodeFormat":1},"00cb3e130cff4dd8b01e9aef8223541f","18739bc84a95b423635825135eb24d2b","af4e50cb99ba66919d9a70c28bfc5e24","0995502a1fd159614cbe98faca0ecc8e","e0cf839d59314c8a8e0042183e9976c0","50366fb0013b3638f0f153c24480b577","ca80f4e8b197cd5a3228a6514ed588e6","c4d26e83148d049923cb2eff10d435df","5cc50e3c3f806b06b798c2caf0f7383f","1cdbbb82fb505e493e10cb89bb97541e","fcf9639d9da27269d6e82d7b45e47eeb","28e0c26e124a4e35d2c29bbd0a1d3e9e","48d0abdee79c2084967cf9a507a0be5b","da4a427b751fd53e9f7dc97efaca2369","9fb3477d2d9a34adf342a0e22e580fe5","195ddead57e30b0e86eeaed9ebb52e84","3a44d8b08c36925d9714e9abedd10574","1818f1efa5399597d4dd3af14c2c45c8","c8bac1289df995c1717246d666d08791","a2afd93df6f04040afe38d5fd62c9693","f12c1ff4a115b572ab5a71f963ec23c5","d6b377742ddee6d7ebbe142a30cf8640","49e6c226d435af6463288297ce941fcd","5400ba6234f3f9c89b4faed13cde4c37","c708f5a6eba9cfa67f56c3f1bc9774a0","730071f734efa57a5f3a15e2cb2f61a6","a396b2d65e6c334421ca19a3a6f6f0a6","8047310894488d5d2b0cae4ea5683fb4","0ebcb1f425a98ea56a20113398367fcd","29973944e09761f1066f9cbf7c38a26a","497ea45a515bee17976f41b9e27dea68","e8a692fe5c2e8bc33558076290750b90","7c24fdca261900e0721fee0541cbafc3","f6f88a6e1c1aadc473cdc53d02e8693f","c2280c5bc10470fdcf2f3ad288c25da5","d4d5446906718fd149218f32e25ddaa7","a089df323e9e66d59566e9e14c84be3b","5af5e3928a0d899c1e06f8fa2c735605","d6fff6dc4cba3251924f12f3fc3fc7f7","a1fa3f0d1739ef7fb8b415750445bed1","548eeee828f9b64c5ff466ef4a93a1b7","e971dabad5b508ed3e28d1aa0218e893","7f0bcb41ad9be33c0e4ab177d9d413c6","6221010d8f8493472e3cfb1bd557905e","c32038ca7431bf17fb0171f8268bd0aa","f41e24d622d8c26d6b323a363495b7af","97a09b2b09c91be368efa0b9f11a4df2","34536f2ae87999522fb0b26dc261aac5","63472b7b2371681cbc5666ed509f74a6","458f825728e28ffdf2388d1f032d2dd3","99a1f80cbc4c974f6d4bc0f5c2222270","a2b6b01b436098218ce90918030e1087","e539a31c14be5328eb5285baacedf98a","c08864b06dabebc4ccf59f1e3a9884cd","01f041b7b49abd9d5ee6a31a290474b6","51116c0edb987ae45b9f739dfb82414b","f346bd70ca5fcebb7bb9397453b5e28e","9eaa0f2c49cca6fc7c5a3b8026097bbb","7430dc1acbcf3c4c7c10b857ff967b24","655ef993e05562f2aa024f0823f7a44c","116c3aaeffa6f59b9cc4dcec9f23e424","a97b1fa2a4c6544359e49aa887f68188","c21607db9abfde2103ddd9d9b0c9617c","d039a761272b17dc34b6886c4c55df77","a6069ae9b7aaa966d5c6dd36dceed05c","48f01ad1119ebfce50854651f71b28a8","5ed84c529159b9172339a059854fbe97","0d246f22ed8b565a40bf7429279716ae","d7b6773800d79221dd0ab287a5a8fcfd","56a3f8d91427935b6bae92144ce6f485","71f6d91bb9b9cc8195ae1e002b7f7b3e","63a09727edb559ba63c488c877db91d6","6bab5c35ada024df47fabee8be92484d","c8c3c107d76951560d8a780507e0618f","7c345b463c70437de43d33d87e55aaea","335f1ec5eb9113f39158a04753115e79","fb72e12e011ba8fcd1ef986ac435e435","28004bc3aaab96ec3e36d7e11d529645","e92b28e864c289526ee2e466bab55dec","55b3c62bb36f73c4379751f90d508bd0","051099173063a88c6a5f9a1a600567ea","9c90a950f7e44cdb404f899a723851b3","68a4c4a53f1e32fb3745a06476ff2b31","a83094c85c551b4288e68dc5961869b5","baab82c4167f6a00c3042fcb8d9d8bce","e2d7a6648274445131006f88c94166c6","b53883967b355e33f09c663fd6a227fd","e9c6fb0bb8ef581bcc5297bc439057d2","0278c3552a7791c018a589b20afe474b","04d29dbcca5c347106c3bd1385d21d2c","b2a85cb0d999c58ea47d5e65f3d14ae8","c9cd798a0541581e285b604e6090b0eb","812f1bb5048f2478cd9a8980daea33e4","5f8533389665a5f01e0f470e7cc47670","12ce65f8763620e7918541542761d4ac","0701dccd4c147cea0c9068b5f17e57ab","819af65c0b567ff7c4141c671b1001b8","58cf50869b3be9577931f91f5456b487","d129568963755852f8e1b49006ef3aaf","1a0a610569629a3f219a9f7509ab2420","064b59f68dd3b535cb2129271661e702","8ae2c582a4f2302a08926af74fbbc24d","7e6f9487b01e2bcb8bae0c71451683c0","16d98d9055bbdda3ed87bea5e1751d9a","2acef7024f34d310ed8aa5a9caf2487f","688fd0ec1ed6971fbb10f1bb3b3ec76a","5768b82672275ca82db0dbf1572d68ff","dc2628a2840b5267807cff0349c1fb23","8d22ce67f0b6472ecf23addc06dfd21b","17ed64ef3096b0974ff3e8392cedc8ea","bded24d74a212aafcbcd1b5c91b9aacc","5d2fad2331f11e9e47da70d03692f2b7","34cdc3a2b7b277f75755d42a25113b1b","67281129d7fdceef372b17085d16b77b","75a6641b746f6dae8e1f34eb8256ac27","4b08b43e46f601101ba425314887ecd3","313face464b65f03a7f45922dd08df0e","d13864f3bc1cf04c8d20dfaabbf5ff66","67c7f31d686253c7f2ac0eb3ea691549","f7ed0cadcca538e8cded3b445e151a51","eff9f63a3f94b0197d1ef1ed61f751a9","1544a9ccb282791db79c5b0520ccf037","046083003355e4305cf8a2a0abf7824b","9701f66147951bf67747d843eae585ee","bf73495f7758fd82bff1b7e31a751d0f","1f4efa4ae7c81421d368d31c60f71192","0aee9a8b49144f0012a18f9ef3a4bd30","37df4de17912eef28b4da92f89043762","ec3042dde2d77abb787ed14154e60843","ab48c00303a5e93918e40279ef77f96d","f6d1c9c6097a5b4659c8b32b2e87f1af","8dc7c7d604eccdd23cfacdea69712f74","f4b9ee2a87526736524eb8b8d0685e41","fe36cec886a598d7a5562a09fd5fa9e5","f2b633f7fd81fdd021e690176f10693f","bc2276ecf17f665d818f1725a2df3d5d","793ac62bc446b1ff86f220be347e0b4d","a77d61ae3b50d8fa751cb174d7a1b7b4","4ebf86a1c2102a7b9f2d4d697655447f","41a6e22b5258f74da29774971af42345","191a4a59250424b66362f3812ae7d4f2","7a128fe952e2dad7a0cefe1166f2112f","3b2ca58b1becf1ac1791524d110be7fb","af37aec20d3780b1d49a6871d1efcc95","1a65fcce42bcfdf2bd4dc44876b4e216","c397fa116115322ef8d3a4e7d1b3d844","e841d10da7cbec1ad19247633a5474ed","8d336dbfb9b5384c0c6b9649d31084c0","b5c7e059d7f528d26303b37412a64a20","b664a4297bb0cefc84a92e15ba0a6dc0","51f07d28f015522b7e82be31e26232c5","34792806c2204ad8663e19bede933ab4","cb0312189bf17b9b02496a177c3c6baa","45bd1b7f44e19274a489186706915c9a","ee3b0430a341ccb4a94494156d36a427","45ea87663506ad8eda9a06aa5285bc61","a59113cdbfa1213044ad2401acda05da","1b36d6a21b8628ba07676eb65be1c4f2","912365507a0a8fd9d59fbefc2b15f22f","d56f333fec5e49d4aa0ad2b66c28f270","6d5c93634971b075d759badfd7dbf859","209dc7c976fc74309a64c41c12a189b0","7d161ceed3399daaf44454f218aea7c3","962fd62e87eae1f85c4113efb278ef83","0635be1dbbaf2a3ca74cfee06290e00d","aed9534007c1cb37351af093de5c6876","10c7a7276ad54075ab04b0f5da26c524","0ef34d0c6294e250584097d572767c95","8c8ee9cb815ebb4ed4141fa699b49d03","0a265de442eb7942dbcfa87aa9141914","0b48d198420fb9069d1fc54a5e5c3f45","83b4d3f8fb125f187dde6a5852b842fc","72cdfcb26f2111bc32b87ab918d8147f","1f478a313495d483acaea20812831d69","21ed037da8d7ee0702bc41d1fbcabde3","e1ae814c595a9c6118c8d7361a53abf9","08a341521823f7425cf1258ca7f85b5c","0783f397edaccd8a9c9dafa7167c6d43","7431ba4cc0d2bbf62473c4530f86ed2f","ed917dc645c30cfaad9f73f3cbca4744","4455f0aa411551e9ebb87f3da94fe5ee","48d32a48816cb43852efd15184aca096","749a503bf1abd50893ba98c1fa9da5de","d662007166fed675e5ca3da731540c0c","eca22da27e211604594b8f35f55d1b8f","b699fd05ebfc67c4df6ac3738d48e3dc","b107a93be3d8d1bbf70c0f40a357f498","dff5c610cb82ae44087f76a4aec86da4","bc9dec7594007fde32f9af7563bc296d","2fc4683ca58ad9166980b28a6421636a","440b90c5c82f3a43c05ec73a049aeacf","372578951c3cd7cb2df80d748bf22c8d","20c5dbf83d797d2931895f30a4a93b8e","30ec4a2452508e20601493c884e46b52","1b7c2ff9c988acc2d28efc52a3312b4c","342540cd7b349e87d33adcf8f1bcebfb","5f66c05968ec98312a40fda2d18a5032","9a635d62de774810c2505a110c333c00","92a1276ee1ca3fbfe61a67884b5d5980","d01406c05510742e70bbd8b2f8f95614","71fc86c17388e3a47312ef152907ccfe","445f7d136d080d9b57e76287dd505460","05c7ea203db2f2000569f08d4fb70828","782972e0cca25fefbf5470c267ad11d8","45bee82fc7d6669fe539ff88bd0fcfdf","3edce97d1def8265035376c0567feff8","730b91f337d3480d740b4524a9665cab","6b0926eaad6bea502afcd3fef5322042","6d6178ee11e434a3256277a3a51d4520",{"version":"7444e19e766f83de5012060068eb2d41","signature":"148e1b0337448525e03152e6b49b34f4","impliedNodeFormat":1},{"version":"96f31d7e0acae0d7cfa4211863de7e5d","signature":"e75c653bf0a74417ae9365c3ede077dc","impliedNodeFormat":1},{"version":"f8ace8b9eca5ab507b1d2ebb5748b726","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"6b0b75857aa75c10b4689e7b8e6bce60","c92ce09e0a8df931d70f87603b5a6bd5","db4704d82c740ed3bd067c9bae72d092",{"version":"75151caca51dabfaf55626bc639adc78","signature":"e88a01b0606773936f4c5903e6e0e19f","impliedNodeFormat":1},{"version":"fb35bb508a2408046012554ec6eda798","signature":"37088fa28e6069ff97058e36a6247e04","impliedNodeFormat":1},{"version":"6ecf62cf3965ee3ee72ea0b64c5c4aef","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"ccad53585fa129aade382cab486335fc","signature":"c15e57fb410d0e0191d496befd8c189a","impliedNodeFormat":1},{"version":"cc78fdcc5f90063379d0e71f20b610e7","signature":"e60439f30ec67bd2e1c10f17be8c0a8c","impliedNodeFormat":1},{"version":"b5f16376a038f2c7ddf88d15ee8fe0a2","signature":"c16ce227505aace0cb8562aee55f9e89","impliedNodeFormat":1},{"version":"a30746c2c6879b21b2e8410b53da8419","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"7264b2a3aa400945b6fc347a15e578da","signature":"6eadc907466b22e96366eda48e167227","impliedNodeFormat":1},{"version":"992dc3924849d9cc7dbad71c2182235e","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"2d78e375fa4157a52eb6f101459d7725","signature":"8632cdd9e339fbbb42b2d418edcc7caa","impliedNodeFormat":1},{"version":"531f293182e0356d3bd9f7ed6436122b","signature":"dc6a6b22e86d2c90165396eb0b9fd550","impliedNodeFormat":1},{"version":"d77e71c77251e352e1ac6c752710a7ab","signature":"31aa3002744f9f29bfffff30494b895a","impliedNodeFormat":1},{"version":"918d86f2b207c3c1906ec1bb6cf232ec","signature":"d78ef48f0ae8d3db1f7b685fd55939ea","impliedNodeFormat":1},{"version":"6e62f34443ae501e9b91c7142b6ce2ee","signature":"376998b7849da8c9312761542c92386d","impliedNodeFormat":1},{"version":"fa02837a469e5ef47a4bdf8cedf14000","signature":"bd32b9d01d42315d09509bb407dff783","impliedNodeFormat":1},{"version":"37b1e574a6b431445d7550616f983858","signature":"6264f5da4b0b5a5c889e82b3d2e17f4f","impliedNodeFormat":1},{"version":"b9e64264ffd9464c0c2e1fd0a6ff0fff","signature":"cb040f101ee630f05be1d9622f6023b4","impliedNodeFormat":1},{"version":"a54429e56a7912f18257c6a661ea8b78","signature":"6aae96b96f9d12cc590f7d73f0128e2c","impliedNodeFormat":1},{"version":"d3dd62de63766268254ff959a10675bb","signature":"03b46cf17776c068d5900bc7682f6783","impliedNodeFormat":1},{"version":"a07bbd8c7a03a1982aa9942691d45106","signature":"45e2f3666bb727f07e838365205e90f6","impliedNodeFormat":1},{"version":"be47501744584a5bdb46983f0cfb26b0","signature":"a1d7113673199cfd99ec49d79481519f","impliedNodeFormat":1},{"version":"a82b5fcd6b9645c82dce2cbabb506180","signature":"5a7ff110f91b319d7dcfdbea0be47ee8","impliedNodeFormat":1},"23c66d3f6e9aa8f6bf46c0b1ace4d144",{"version":"1cee4ba185abd255aa72bb4aaa7bbc31","signature":"68e0eca61b066524ed6d1e58f110f30d","impliedNodeFormat":1},{"version":"e88e5cb1f4587fc392d79fc0479699a0","signature":"2fedb3e1dd18b1ce62a5fea1ddcffdc7","impliedNodeFormat":1},{"version":"66f4038e95f5d0451f4608f31b580e08","signature":"f51de94426f8f6bf424576b3a033ed38","impliedNodeFormat":1},{"version":"f3d28b4904811357b6f8280392e71ab7","signature":"1132a3693f7fce3cf892b9c789ae3f88","impliedNodeFormat":1},{"version":"2c08735d0935676cd293793af5db736e","signature":"db081badc6c658a461205ac16263aa24","impliedNodeFormat":1},{"version":"cd9e101676284041b95eed1c5a49643d","signature":"9ac7f425abf5400e717e718802d904a3","impliedNodeFormat":1},"4cf4c2dfe2bc0a428ef26c102e104d36",{"version":"fae74da459ab16f51a5092fe7f95d707","signature":"9738a775d52773434b5059f6010204a7","impliedNodeFormat":1},{"version":"00e074803a4e43995f0ebdeb7fcafb81","signature":"fea08c659452ea4021ae27120dc72db2","impliedNodeFormat":1},{"version":"9d59caf5241902d9f1449e8722b10378","signature":"b7901f01182ad8b187b503d5e7f6c93e","impliedNodeFormat":1},{"version":"efff4df7698879a8addf9d6902de6c37","signature":"4793bd32dc7a1b00032ad7be0bf7543e","impliedNodeFormat":1},{"version":"19cdcdb3fb65031e1a91f63a2f88ed75","signature":"c030cc68749e8ff1bdc1e3a2b9bf4cf7","impliedNodeFormat":1},{"version":"f5a3933abda96a823e3c6a97f553fec0","signature":"15024ebddfb6ac6319acd68d64fbf457","impliedNodeFormat":1},{"version":"ae436512dfdbab4e8d04ca48606be98a","signature":"3105c3a809b9b2edaf09316056d134c6","impliedNodeFormat":1},{"version":"f147e28127fcdc02c03a9a26754d0a2f","signature":"37ce129bcb83d859c8fb47dbd18c8427","impliedNodeFormat":1},{"version":"68c0b50df5d52df22ab5a5a59bab3311","signature":"0c894d9b9c0fcfcd6e0c9d82e1f2d248","impliedNodeFormat":1},{"version":"c0b37d0298817161f3361b6197c02558","signature":"e15ca39ac4767f840271b37b93b78312","impliedNodeFormat":1},{"version":"c97853ce1363d0a90080e33fd8141279","signature":"8c7b66014565cc305ec3ac76c63ddeea","impliedNodeFormat":1},{"version":"8261c9ca839972b0bbc5d45f0a540ace","signature":"aa9ba6bc4cfbc418aef5e77f63d379e3","impliedNodeFormat":1},{"version":"e46e882519b1913907e9d75d13267d14","signature":"cf5dc48a8fa06c389167df982bfa42f1","impliedNodeFormat":1},{"version":"9ffc3f5bcabcb4b23097ad3d9afab7ac","signature":"4ffe422ad18d29392b3acefdf3c89c42","impliedNodeFormat":1},{"version":"21587a796d287012821b0b0272772d5c","signature":"e20d80bbd1fe0471bbbd30ca022879a9","impliedNodeFormat":1},{"version":"d1012ef230227289fd626f756b2882b0","signature":"a8ff62b414881d04d07882ab96ce29a4","impliedNodeFormat":1},{"version":"312c0145ddb9f4b165d8e9e2311956bc","signature":"cf7fd5cf6f630609a26e7f352360460c","impliedNodeFormat":1},{"version":"95a9364f49c5524b1ef974447e99035f","signature":"93f65441c7537c2d39e7ba6e6937b6e9","impliedNodeFormat":1},{"version":"be27b506bcd9300327e3b54eed537559","signature":"73e75709ffa7536b23e6666fa4f83231","impliedNodeFormat":1},"00b274400a8aa52ae1a6dff1979f43aa",{"version":"f16465cb91376a916723723b0bfd7579","signature":"3316cd070852aa022a1cb1d4440d9723","impliedNodeFormat":1},{"version":"afc2809649cb175e5817357b33602165","signature":"0e413d25a059eb6c2a8b8ae9ae7e9824","impliedNodeFormat":1},{"version":"d77e8a3159b5fa7f5ddd4c28b32effb2","signature":"3f94c0c543e2551bfb6653214adbeb9c","impliedNodeFormat":1},"797c8142e411632fae4026ee8edb0a89",{"version":"893118cca0867a27560d0ae2899015ee","signature":"a313f5d8720bfede364d883796c63911","impliedNodeFormat":1},{"version":"6bb5ec6b941831ee019c54b458b0e5b3","signature":"52e5e5f03f5955bb425f4badde6e05b3","impliedNodeFormat":1},{"version":"63999b9bea4ad28774c2c9fdcd0161e4","signature":"9c86b31aa2b65e65e0e74a65b304aa5a","impliedNodeFormat":1},{"version":"e4c6c8dcb8261bd677bd5d566c694ef3","signature":"0ed8b54cee05d5401ff92ea458e244f0","impliedNodeFormat":1},{"version":"e73efd57083b7bebea39e7f7f389ad53","signature":"2063f736b3570e52b169bbc757d1a312","impliedNodeFormat":1},{"version":"62adb40d0382e9edb5c7be98aa9c7de7","signature":"a2374d81d1460cde00b3bce1e32d084b","impliedNodeFormat":1},"903fdeaf16e737c9830c862a30674966","d131b38a11f629138f8ce23b8a50916d","62e478f1aaf5e981d28630d8930ccdc7","79fcb62c2cfcfb83ccd07fddd1852ddc","25168e384619718e10ca0656cd090852","d57dcb606b94c24e431164f818eb1b8a","7d1e807f296b7c39119eb26ce9d909b4","d02254590ec47f2785203d4f74a9898b","aa4367369a0141c1ba3ea5c838682543","38e873c080ecb7a15b378a2f46dc789c","5def78c97eaed02ed5e25ab46f8e8b57","7901fa592e1787732ab24b44b039a053","e9f3ad2617d96d2f12f41aa303b15542","6fb8f09996856da044817cac9406e333","247845c5936905c7f63286e67a177073","c203aa93199d0e767f996be901624a6d","cc6327b2dd675da80dafbe3fd61f2141","7ad07edde74f5bf7466a074d86e056f6","36e6eacc849a3cb76c237c257ef8b34f","50df87ced516777e3ea5bc6ff5bdc812","61b3b4113d8fb9b81aeb78fa62f2eaa0","28d82e2d348dfdbfed21bf20e3e1fb61","6e051a495242c04220b9e878daa56658","cff67663435bf53cf79687b5ae4f07a1","d772ced27ea2380a4f9dc6c211ff2625","3bbf576b086ebd0bdbe8430c6cd82f8d","93e14846f1f8177bcb9f163226970958","7baa22a498ba80ae09321b66aca54f28","97844b1552a5f6dd8bd78c3b67f5fdb0","637f71b6869aa9c97385e00039583dba","6364af2fbdc040ec3c30d021a4f712ff","75251c52b65c803f5c829fe79d50e8a8","1821263d43e376bdf8eb625358af518e","b3c5c42bac23aab3fbb5052edf99bb52","05fb4827764e609976b72c18f18b22a7","0d20757a787b4ba515579363eb8b8862","5fdef04d6b2af2361ff5e8477a53a37e","040eb19db0cf22edaab199e83015e8fb","abb721e311b9dd29f40da9e1e57fd097","9795c8b86246807a6239d3e2233eab54","5609473d99186958b63118a908b7e4bf","7891665d8b2ae2f385980448376081e5","419f7bbb823b8ac0d815980a95e5e2fe","d1a67bb2066fbe1476486bd737a48e66","5b237bf6dde646d046f4ff3d6d036b87","2b87012a2195d7be96f6122c80747cb4","3fe7749386ced6b0cd782943e31c973d","721fdd56836af9ad867b6cb57a2a6508","40a631c6d03758e7b597083d8e5f195b","74182b42a95f05ff37acacc28158b4d1","fcd28fa37c354e42a79bc549f68b2e2f","588e9995baf1ce14891ca1c0f4733ca3","e2323c8c9c8534a09d9102e2999f5bdc","9510460ac1055bc2a4b9147ca2d606f1","7126270195312c233ef160ddf48b61fb","9899803a06ef3263c9f5d22a499ba1bf","77345914a207afa8f60247667324e84d","76eed5e821ae083f44ad902e385d31ac","24781579ada9026f8b91359071567af9","136fa48e831d4b586145b7176844138e","688acda32625f091edf4aa1d82e66e9a","6dbcb72be4ca329680e8e7582739eed8","5854989fe5bfb4036454ce8eb60fedb9","bcfed87558e3bd2bff59905debefa332","fd4cf3e744b94d986c7a917206b39358","0dd712128775881944ed3a5529d98cc9","79f8199a795cc7f7d26f6be29f245a8c","2a790afe8755ab9f41d1f05b925cc333","aa5211bfb9b7e5a87fba949d56854080","95af27858ba777b0f9044bb2e6fb1db3","87255f70f988af77c955f65f3815ffe9","970d60c8a6a77906040b8c020826b675","e7ff74fd14f7f34849f9580df1a4823e","69adbbce6bad17d246ce3b0e8185eabd","9f13bdd36b4850172188e23c9d6a4320","4dd5c893fb6b45a0d675ec017b8c9b9e","76b67e5afd29baec87eba469d1be3efa","c5bb44bb5406c250f44fb03d6dc352f0","537241b552c572924e8722d8d4e57a57","e60b2468efd08cd79a626c023205a5be","422f6578774bc83238fab1785c962e91","4a9f19ea5b5a1dcdfa56429cefabee54","dc32310475b5887d1cc33db36aa42ff2","7de952c227389bc944d66de312b6d82b","330c1e888d666ea74f6095cdd1f2dd79","d8b4c4da30260b521484af6b181124d9","85dffe3a0284bb47c7bda421288b250e","9f749b1bff787b29cef2d419e048f8e9","5c487ccc05b2d798bfec0a40a5f04c16","d65979c94412b44d8ebe13a7de179d81","f7420ca1a79517f38ca182eb2d4718fe","8ec476f618ec6e4d2435575c36f4d743","3b545bd866f205c08edaa47c8e6a5b1b","3cde510aead200643e141adcae44e633","b96521c3a312581e0078e6ed8c5128ff","b76319ed3e8ffba8ba3eb6051cab6900","43786377074efea872aa1dac1db461c3","00fa245df775127d5387d6b97f1437c4",{"version":"db07cf8a0f87a948f97491a61e5303dc","signature":"1cc663c6c40e145a9dd3d0a4c3afca1c","impliedNodeFormat":1},{"version":"7a99e7637b786fe91c2da52aa1553fdd","signature":"329c48e34fe2282cf6dae6977c0cf658","impliedNodeFormat":1},{"version":"c455cda927ccdfb02ef312f24825dc7d","signature":"565fdede885981e0b068ca9c36b60b01","impliedNodeFormat":1},{"version":"2988b0f1537f39b7dbd09666dfa54c8a","signature":"8cc9219ed330ccc670c49407fa0e8907","impliedNodeFormat":1},{"version":"bbed58f4a28f3cf20e3107ccde097a97","signature":"8e33c91434caf3be2278f8bbd35934c1","impliedNodeFormat":1},{"version":"0a54c65e33ee6cacc5774dd65fbf75ba","signature":"4f883b8629ed8f0ec09ce9b2d15cd89b","impliedNodeFormat":1},{"version":"6e5ecf31bc9a2a65c41231d7ddadd4c0","signature":"8924bb960dd15ae49e1088f9bab92916","impliedNodeFormat":1},{"version":"f33d20feea54ed32fe49cc30fbd96e35","signature":"9bcc8d2cef1fb40622399d841c2a092a","impliedNodeFormat":1},{"version":"d3db7267e76d35ec8029f87feb046ffc","signature":"86147cc1ddec48b4edcc6b725a23b111","impliedNodeFormat":1},{"version":"08667e0ab6974fcd163e0d7edaba89b7","signature":"f31374343b2dc7756c5665b0cce6094b","impliedNodeFormat":1},{"version":"661e3432fe225026ca1f49274cdd24a6","signature":"6a7d14c39866c6f19c226471468556b8","impliedNodeFormat":1},{"version":"aecc48323afd6e7643a02fcf909b5cf0","signature":"bfe1a4133a9440b14d61513eb975d856","impliedNodeFormat":1},{"version":"5a99bba4a408d814db9d400b1e78f1e2","signature":"5bf737c3f7569dc9ae2977c3d420d50b","impliedNodeFormat":1},{"version":"20573dd9cf8d86585c8cd4dc6394e07a","signature":"16ddc246e327c5610ed78a1c07fafcdf","impliedNodeFormat":1},{"version":"4ead6f2437488454dc052c1cf3bf14b3","signature":"ff4bb017e2ab9f5f1ac9714e87abba0d","impliedNodeFormat":1},{"version":"18ac09365b0b8851d152f718a1565524","signature":"80f3fe3eabf993d2ffcfbe00d2057b16","impliedNodeFormat":1},"16db355d66cd65be952fffea33d65bb1",{"version":"3cffb96a854ac6d754c1a135a6830ca7","signature":"7216ffa35ade7c4301b3c39ab094384f","impliedNodeFormat":1},{"version":"d7604f8a87f8957dff7fa7a26781384c","impliedNodeFormat":99},{"version":"57765591a33d6f947f9091dd8bcb5e99","impliedNodeFormat":99},{"version":"a77a0813e1e4f2e9fddf57553ec31076","signature":"e5c570ffbe3f2c72489d2399361a8f2b","impliedNodeFormat":1},{"version":"325f5f46802e6fea844f7603ce444d3d","signature":"911b32870f719316b10db2ea1d76efdd","impliedNodeFormat":1},{"version":"83d944cc27da2b129308bfe0976da93e","signature":"c56ad91ee0575b1800263ae36fca4811","impliedNodeFormat":1},{"version":"7a0fc000dece81bc5993089b223f7984","signature":"b6a8ef0900cbc6e9e41dc88ed5f39985","impliedNodeFormat":1},{"version":"7d6206a3b2d6f7e0e3cc985e9cdbd8df","signature":"a19586dc1544427476d92b73a5d3dc9c","impliedNodeFormat":1},"f0aaad858717a130d62d61c74e82c146",{"version":"74e1cdc63cb1b8dbacf8ec9513b37825","signature":"e25918cfbc803b216942e47e4fbb8a09","impliedNodeFormat":1},{"version":"83f371be035443a9abbd5a63ade9dc2d","signature":"5d86838753f98a1c7a44fe6d31e4f5b9","impliedNodeFormat":1},{"version":"efea8daf28c582df6f3333ec86a12f8e","signature":"fc41083ec2c5605181def4de3f821cdc","impliedNodeFormat":1},{"version":"bcffdd9c2d6484f5ca61f87558629c8c","signature":"6bc276f3081bf29142d44a2c9b4c34bc","impliedNodeFormat":1},{"version":"d4556ec8eabed04da8d7a521b8a07af1","signature":"a4f24dc9ab412c94de211f2c860f99f6","impliedNodeFormat":1},{"version":"e668bb39d5b1d64ca8ee8987d232200e","signature":"f20a33b43a79814f9b4ec5a8606daab3","impliedNodeFormat":1},{"version":"186693d834088c364896f292243180eb","signature":"b744309362b8bd364252c58af45ff88f","impliedNodeFormat":1},{"version":"710a6a149afae7292cf2ba7f787f79fa","signature":"bcd51122a2ab5fe8e9a5b799a91005b2","impliedNodeFormat":1},{"version":"971d1cfac5948796152b0dd339ad0cd1","signature":"0258a9e86c8430370053af8698ee79c5","impliedNodeFormat":1},{"version":"bf1bf738dcdf093a0d27a0ddb7ba1023","signature":"4a74b8eeea2fa29c2d283aa879a35541","impliedNodeFormat":1},{"version":"1a93197c47772e3e73f1b4da3481d2f7","signature":"f79da4fe482d6dd09ec821ac2dba16e9","impliedNodeFormat":1},"b3f28f7240fb564489dc796fe6d16bc8",{"version":"5c9c9c9df84f84e816cd2ba51f8d52f5","signature":"1d83b03213865b76c49052fbed6ebeec","impliedNodeFormat":1},{"version":"3dc45f514c3f4e7c95373898a63cee96","signature":"cc5a487e1ea89f718c72c86f216f6eae","impliedNodeFormat":1},{"version":"1796b6a2e037e34a920a347a1fc26caf","signature":"00d9d9c515011636af54299f2d0ad95f","impliedNodeFormat":1},{"version":"ea47f7a89ac7036b1d2af5707b996c7b","signature":"633216e0dc1602a225ede84cb96ef96f","impliedNodeFormat":1},{"version":"c8758dcc247935aa9a9e1dc66962cc06","signature":"58acf93a469b62aae1124f8607af69bd","impliedNodeFormat":1},{"version":"36ba42ce6870ed87623a2ad24b8ffce7","signature":"ac4355d768e1606f8b28930492a6eb39","impliedNodeFormat":1},{"version":"5d0322b047d02e8d422e75858c5239cf","signature":"0d7ee112b7a7b0943a6dca9276aefe27","impliedNodeFormat":1},{"version":"f8ad4456ae3751f11723448fada045e4","signature":"4d151e5fcd52981d2f5d83dc32e7ec50","impliedNodeFormat":1},{"version":"e886dbc08c69365c9e9e11f9e4156ba0","signature":"0451a2d4a4888b53fafc120f2897acd1","impliedNodeFormat":1},{"version":"4eb40436dbb7ca32581b99819adcad5b","signature":"0838df33c0c4df37f67785e5f68b8556","impliedNodeFormat":1},{"version":"ead2edd5cf1f8c7d8e4a87002793da51","impliedNodeFormat":99},"eb0c15d39c223a1107583e022cf32def","65418f4b7cae20b68de4f5fe89bca827","6d7d5db83dd7d40bc9790ffd7988e223","c42878076be4b904049091d8a4034f17","5ea610203fabe81c152a574d5cc1a19d","2f116fb422176929c07baf5c69364bb4","f1a95eb2a2737872507c34979936609b","5b4f9972c47fcc1ff0f5341645703c53","b4ee0f99005a54d319f873c1e18f5907",{"version":"fe01b2b91d779b29ea23ca5d8b0c3c97","signature":"b41c1a7f0ed1e8c308d3bcc02fa6a078","impliedNodeFormat":1},{"version":"bdb33ccca72fea8070e1003425855a4a","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"aab4c6ca6faef1ffdae2602917160269","signature":"0cb7f11f17f7af3b5e9f8ca43e0450bc","impliedNodeFormat":1},{"version":"60b62c5c5b42377c94620977cff877a6","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"a23b67418674d1114e4709b1fd134d30","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"6893eb449a73daea0118f09ecf51ee45","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"e5376d7fb00e982e6081c5f1f6b3cf2b","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"d3647fba724b6017c999632a8caa1520","signature":"6ed5c0f93c0d050236ae0fbc2be93eb3","impliedNodeFormat":1},{"version":"4638ba21038d49761b7bb394fd2de226","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"8fc51797d53d98ec5a6528bdfc90b4fa","signature":"522f0891d50be046e6408ece95fb9235","impliedNodeFormat":1},{"version":"1998d9efd4ff3be5e524b6e8432ad415","signature":"7bb536f85458876da3ef416fdf486bb1","impliedNodeFormat":1},{"version":"22a39834f230e13ebdcbd7d3bd6183b3","signature":"560af86f1132a09b3ad1b37da7962149","impliedNodeFormat":1},{"version":"1cf78a166ac68c8bef089456c7fe86fa","signature":"00ecdb3ab8bbc174f854eab2e3d27ec7","impliedNodeFormat":1},{"version":"fe7d721f00f783c3620f217256a37f53","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"59adb675175f731d15c4ea7a3ed6667c","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"b3d2f523adaef4fcba7402a31e592994","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"e31b7e84f9acdb41c1e0e1ad177dfb67","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"1b8cde5825e2c5320570d37a1d33049e","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"878035bfb87c467e8530d58a3a539c92","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"e06f7cd97fd6dccfd22c620481dccdd0","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"b3ea89d4d3628f3188a27b9f4316b2e3","ce4174140a3b0dd912ed78ecccf07a23",{"version":"46c7cf6514b2c7c1e8fe58ccc2a7d95a","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"c1423db17900877a54e8e6ee88c8cb15","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"56474a0538fa79184841a89d9d8b9b67","51073ac9bbe21c7e1a82f9c922fe5994",{"version":"34121a7915c0bab7f790e1f21272eccb","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"509b9166eb0ce5039964aef96569cf5a",{"version":"c6561827a63ca1691cb2a814d6bb96bc","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"c868888b433a64309a169c4a55043bbe","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"d00c5c4f27b387b14a9cdde240adbd4d","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"917501e7622b5e56b0b9315410635e9e","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"5d73f2bbf00818d99e7ddda70315d23a","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"aebb13f22f9e1a4823149de9726859e2","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"ba4cad5955dbdc792b6856830f399686","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"8f64495657efbfcb71caee9edfec9202","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"b3bcb3eb05fd519743a7f679c4940dd6","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"0b7515c914f0728b07b1cea6b0bbe831","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"5ce5fae46be7b47e6ca08575ef0565b2","signature":"a9d0bafc7af91b103cd654f2610cc1ad","impliedNodeFormat":1},{"version":"517635335faa5526dd141ab30c5aadff","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"5f379a9228b81cc7a9758cbf4e713670","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"90dd5ebf7864da62c4d04063109301f4","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"082cdaa0e574817a0d665ee339cc15e5","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"179e55aac0516c1ac3acf7ee3ec15e87","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"9856e208b2565b20e549f144bb34d8c8","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"8e886491895449af82244eafb68e530f","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"7527703bcd8010ba6705b2830b155187","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"871146d113111389f4a565ea3e1222cd","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"47d89485cd53f862ce56c619953c2cde","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"cb40fea63d7635f8eb1a3010420e81af","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"5bfea6f4c1c91b26f4f1308c50cc0cfc",{"version":"cd833886f601a24095022e0020757faa","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"86ee7b0206bb145c59ec82f64b77725c","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"3b8fc4d3637cf162518c0095900b64c0","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"69ab07a633ee30906068d137fa2adc81","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"22955595f411d1a29d3afed8efcba720","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"e293ef828fcd00fe303345fe8c49be5f","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"83e3bf418cf9cbc272c2ccddc00a5023","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"63c2607131ea6e069b066727a0844ec9","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"c6ece855f580b52607a45c59764ef1bc","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"098bb855bd397cde53fe2eecf91c232e","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"954e61597f18c8d0de16ab467761f3f0","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"723bb6869bf09967ecd10432e67d1605","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"fdc0d631046bde9b1d2d33cfeeef1d26",{"version":"7e95935d1bc734bc22caf1e10decbf7e","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"7cb0a1fd2ff9322dfb2b3e436bce72df","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"96091948019bb603ced9fb4cf7b43da7","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"2779f16ecd628fd25b00bfeffca4431a","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"751f567ec0828707d750d61cbb2428cb","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"8fc98bdf2431f458bc0561a992fb30c0","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"291ed8fa3c34eb7147db895673f13d70","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"fc6dcf055a15f696c54a9e1c4c84b2d6","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"03e85cbfe091ec653b90f805a6cef58c","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"55d5a66b59244666cd019800e288c97a","signature":"1931ec868624947bf474e1c3b873982d","impliedNodeFormat":1},{"version":"d5d25b66fe0491fc936bfe8b9cf6c36a","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"825179fe4ac0ad943708563f9af63ccf","signature":"6f894905b4cf875f2450395abac69a3f","impliedNodeFormat":1},{"version":"897fd1964d17d2b2aea7923b4009df5a","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"5b70462d26db5986ce9f31206e0bb23b","e527335a6e56d357c0aa46db8941acf1","c9721dc7980827c0fe9cf95e3e977974","00254df86c4993b07da82fb52aaaa06b","1c8bb5734f379968ea4c5836721eb86f","62332c41158629c7e4a66f2a188a04bb","c141428d56b0de89fcce1a253438742d","c597cd50525a534d6eae5b274b344aa8","09ed9d6a206da05eeb71f22675563738","61ee2f63ad8e42b3e311cda87912405b","72f619a9d1c64259cc53e674092e29fc","00b3ad4072e6cc7035182b991e8504ac","5b75f135b9b3eb3eb0882a57f455065f",{"version":"56988f6aa21527dc38e533c6e1606d4f","signature":"5b500c50e7db855b7c18275928713f2d","impliedNodeFormat":1},{"version":"186fa8b5a2c88cdd9f8720e8ef4242d9","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"4a82c8e42914dd0e3d4db020beec4e51","signature":"1f7375c6202ac6ba599f18d1340b4fbf","impliedNodeFormat":1},{"version":"7da205565daee5d515ec65874be5b6d5","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"c1320e6f27fbe032962b9a9b0612227a","signature":"3f54b744e899fec7deb0f75efd22827e","impliedNodeFormat":1},{"version":"5535ff96c9bd50cfe8b00a904898d9e6","signature":"b60d935f61e68943222628305050e48b","impliedNodeFormat":1},{"version":"97317123ece86c337fe07b071893985e","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"a4b82603b2e28a550cc3c397a33160f4","signature":"088392ee1411a5ebb0de229994885432","impliedNodeFormat":1},{"version":"4f1c668c7e4b0f396f8b5a2568e0394b","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"493f2c96b90d3f2f496d800e8d90dd6b","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"99aa06d3014798d86001c324468d497f","856924742b5c13106588c4ce06e59759","da3da10502293a0e1bf580ef6c26486c","8fa4aaafd0111ba2add17833f808c2a0","67e18c46030fadb4bcc6def42ef0eaf0","412a5a1b10ce3be53c1660971cc801ce","36ce709fdde33e1dc1d9262346a220ac","412a5a1b10ce3be53c1660971cc801ce","26b8a380de37679a795e2ecc25258c4a","142ceef55633381e0d4a7b9b701cad9c","11377200cfbbfd16f2fc2fc761c19c20","412a5a1b10ce3be53c1660971cc801ce","10627dd6bdfc35a966ecebe14156e023","412a5a1b10ce3be53c1660971cc801ce","1301d8a67d9a0f0163b76dfb04a1fdf5","3b799a0f1b251c35649ea1abe282f3c7","a6af94961be611537917d6570b760e68","412a5a1b10ce3be53c1660971cc801ce","c79e528c424257c4db80b691b23357f3","412a5a1b10ce3be53c1660971cc801ce","c0ef862e7e22d2000991fdad69544948","72df28291659c4e5467135a408887405","ba03cd3f14062d3262cf5f0ddc475e2b","412a5a1b10ce3be53c1660971cc801ce","f10cdd96d74cfb5571b0725d92e9be78","f7c723742c3fe5e87c1ca8c7ca6a49cf","70a03b3dd805ed87f3474f1470846f35","2ba8ed6f6eb108c46587ff24fc440293",{"version":"8d63c4bc92cdf6320269b3da45475d64","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"a32dba41617e4a9c9f007decad1abce9","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"4f0823506a46fd497138bafc6a8a69cf",{"version":"6c1599dc88b659cb36ebec19f94966e7","impliedNodeFormat":99},{"version":"fa9e064039f5992d70a8654422a567f4","impliedNodeFormat":99},{"version":"9722f7e7efbd6a3f6fbf299b911d9de0","impliedNodeFormat":99},{"version":"45ab38a8b7703eb327b4208cbae55703","impliedNodeFormat":99},{"version":"fb5eab87e14fffb5247c473ce1843cf4","impliedNodeFormat":99},{"version":"3d655e5e496c54841d66d1c36daa929a","impliedNodeFormat":99},{"version":"dc4edeb623ee15ff70d319f51e7778c3","impliedNodeFormat":99},{"version":"dc7703ab177272e877817dfdeee4a424","impliedNodeFormat":99},{"version":"8a4ddd0b05bc5a326f30e263de8c0719","impliedNodeFormat":99},{"version":"6481dce363090aea94a56e1fde6c10a3","impliedNodeFormat":99},{"version":"14727555c5eb508cbde6b3cedc437d82","impliedNodeFormat":99},{"version":"fc70d22904eac2e3bf59624c308674d2","impliedNodeFormat":99},{"version":"c21fb90800cd8a6c8c9ca5bccfe46727","impliedNodeFormat":99},{"version":"aca5725204b6f678d5e95d44f8450b2d","impliedNodeFormat":99},{"version":"08b20c91284ea7d74f64dac8cfc894ef","impliedNodeFormat":99},{"version":"92f2956cc0cfde490c8879b1a2f7c747","impliedNodeFormat":99},{"version":"6c9cdc7b69eac813764e91a0636b730a","impliedNodeFormat":99},{"version":"5612f21c48f3aeb31d7e1f0eb4a042c6","impliedNodeFormat":99},{"version":"bdf8c2a2a689431bb494d78ab4ff68a4","impliedNodeFormat":99},{"version":"04093bf38cf734affc09be5186f60208","impliedNodeFormat":99},{"version":"07d5b67f3247924f391c89b8f40d753b","impliedNodeFormat":99},{"version":"0ab0859743bb1c672cf20be1c9d4ac94","impliedNodeFormat":99},{"version":"1340547e648e289536f590c1cc5db8a0","impliedNodeFormat":99},{"version":"b58d4132ff118af85555a43be7f780a2","impliedNodeFormat":99},{"version":"2600e8c2bf908ceadb002867bff3b57b","impliedNodeFormat":99},{"version":"5738b9753abdd6ef7b56beed313af977","impliedNodeFormat":99},{"version":"01f99a364a35a5fe6b6459ae5a5229f6","impliedNodeFormat":99},{"version":"bc4514201080718a4a9b1b980dc21841","impliedNodeFormat":99},{"version":"43a6f296bfdb43ff42841a9f87aa01de","impliedNodeFormat":99},{"version":"e1dea82475d607b665192bf3fa7fabdf","impliedNodeFormat":99},{"version":"0c8f2465ed450332fdacb7539aa70056","impliedNodeFormat":99},{"version":"2bc07fc12fbcad6f9728688f6a52cdc3","impliedNodeFormat":99},{"version":"cac54634172ea5bb2674fe4d07460d18","impliedNodeFormat":99},{"version":"08253d6502b6ae2d5bc9bfbe7ee548a3","impliedNodeFormat":99},{"version":"5fd5840873128f7fa96bc9fec4435532","impliedNodeFormat":99},{"version":"924c45c0b6182b5ca7ae2a970a2a61aa","impliedNodeFormat":99},{"version":"78fc9a33768c32876dd747c91356b4e4","impliedNodeFormat":99},{"version":"6280a789f40ec76b0af44ec6ea16f90e","impliedNodeFormat":99},{"version":"f9b2d6915624121331006898385f6cda","impliedNodeFormat":99},{"version":"96864c169224e626d97cd7ffee36c9d4","impliedNodeFormat":99},{"version":"7a5ad9aa275b8cff075f758527617fd6","impliedNodeFormat":99},{"version":"632c9f5637d49bc0c4c5a941ab3c7852","impliedNodeFormat":99},{"version":"e14c73a84336aba33102f31c5e57e5aa","impliedNodeFormat":99},{"version":"a80771a332920d2f325528dc676696c0","impliedNodeFormat":99},{"version":"a9f00a607bfb0b0a9fb92879fe745094","impliedNodeFormat":99},{"version":"f3a414c2eb0936e8a675a72f02653985","impliedNodeFormat":99},{"version":"a0de90887ad598af28feb6eeaa9c3c02","impliedNodeFormat":99},{"version":"6b77f94308693b092310cc30c29c5a98","impliedNodeFormat":99},{"version":"601358b8a60b1940d8e07fc5f8939fe9","impliedNodeFormat":99},{"version":"7f01fc980b4f11ed7078897e5bb326b1","impliedNodeFormat":99},{"version":"d1f7fef4953b0e5a70899808f1b1ddcb","impliedNodeFormat":99},{"version":"816375a332a52599f40cbaac2fe077eb","impliedNodeFormat":99},{"version":"64b368740b530ef8be52e63b99432e22","impliedNodeFormat":99},{"version":"c520cd0b785fc1dd3dd0ae9395a40830","impliedNodeFormat":99},{"version":"e822946a2c32355ca845069b85984e7f","impliedNodeFormat":99},{"version":"e5b8716852d183202fb1620559e5bd84","impliedNodeFormat":99},{"version":"ecf4192d488fcff62253c403dd9c9df1","impliedNodeFormat":99},{"version":"83d64eba6d1148712ff84feedb417881","impliedNodeFormat":99},{"version":"663d5d271198e8fe8d50ea7f9423f3c8","impliedNodeFormat":99},{"version":"8d2cbe4d6c30046197980eac399305f2","impliedNodeFormat":99},{"version":"c8700a6947ba67174b0d0cd9f792fab1","impliedNodeFormat":99},{"version":"7d5fec0f219bba8719e9682aedbdb4eb","impliedNodeFormat":99},{"version":"7ee9a386232ce7f17b4362279afe98f4","impliedNodeFormat":99},{"version":"ed0aab69b20f55dc743131e4297aac92","impliedNodeFormat":99},{"version":"5c40a9e9adfbbc530ea61c9db65079bb","impliedNodeFormat":99},{"version":"d86f8e4a4959a27f00a35e14fbcff974","impliedNodeFormat":99},{"version":"2bd758f17abc71103beffc5cef473095","impliedNodeFormat":99},{"version":"28e330282b63d583ce2b55b7386c668f","impliedNodeFormat":99},{"version":"175325cd88388ec07fdaeb9445586651","impliedNodeFormat":99},{"version":"2ab60490400604b6aeb58edc61a749fc","impliedNodeFormat":99},{"version":"c57928cf22f40757e10321c0d5d48d8c","impliedNodeFormat":99},{"version":"f770fb41ec7fd0dd84d65a4986002cf2","impliedNodeFormat":99},{"version":"631fd010aafbe2bfc637f5b21e1ac6b0","impliedNodeFormat":99},{"version":"b2aa7c12509f8c4c1e3a63f3f533f961","impliedNodeFormat":99},{"version":"4574f3b9b1f442db2b5a504816aa167f","impliedNodeFormat":99},{"version":"2a27470b1dc2294f71ba14214375c61b","impliedNodeFormat":99},{"version":"73a1dcbbe26a967c85acce36b0db4add","impliedNodeFormat":99},{"version":"1b9c6f70b94942369fd98d2c8944e567","impliedNodeFormat":99},{"version":"adc152883992ef68b6802269156b27c6","impliedNodeFormat":99},{"version":"7c7cca116fb790e37050e215cc86be87","impliedNodeFormat":99},{"version":"2bf4fc9087d98f826e1719a045ba18ac","impliedNodeFormat":99},{"version":"ef0fd2c79ae54df6d0797e4cac77d29c","impliedNodeFormat":99},{"version":"ae5acc0d8c3ad39c5857bac438c0801d","impliedNodeFormat":99},{"version":"285ca32cb6a0bb1f8bc02a68eada6372","impliedNodeFormat":99},{"version":"6d95e5cab4f9deeb9b2de54148f12b2b","impliedNodeFormat":99},{"version":"5c1f09caaa79df8a3a4db339ea033a99","impliedNodeFormat":99},{"version":"98feec58c09c658e4359a69cb8990a45","impliedNodeFormat":99},{"version":"9db9a9fbed77561bac7fd9026781a4ca","impliedNodeFormat":99},{"version":"a8db1cd1946150d8b4558416eb8ce9ec","impliedNodeFormat":99},{"version":"92aac79341923fd6073e18943de38b49","impliedNodeFormat":99},{"version":"690377c97912887dfe722484973264a5","impliedNodeFormat":99},{"version":"733046aeb33f3d4c7b89aa4d3afa417c","impliedNodeFormat":99},{"version":"d0e7dfe0a29d8ff70d2ed40a51f5df09","impliedNodeFormat":99},{"version":"716836e4192bc72008683c298060ddb5","impliedNodeFormat":99},{"version":"0c1ac01dc15cd278ab5bcf26f182e792","impliedNodeFormat":99},{"version":"cd4d2df0ddce08a74b6b11cf2cfe83c7","impliedNodeFormat":99},{"version":"b693df2aa63dd58ae6ffa7dbb88bf293","impliedNodeFormat":99},{"version":"9a5a860726a96fd50287d79176490733","impliedNodeFormat":99},{"version":"e94d1677659d8945edccce20c7ed1b6c","impliedNodeFormat":99},{"version":"3218e493b23b52d5d344fa774171e73d","impliedNodeFormat":99},{"version":"1ba35609e1642f612fa7c6c6adbaa2dd","impliedNodeFormat":99},{"version":"4ddf484ca51655beb8344865fc20f50d","impliedNodeFormat":99},{"version":"e11ed3fd609df0846b3ca66db2cc097c","impliedNodeFormat":99},{"version":"99842e8237329843fec7415d1b3156e5","impliedNodeFormat":99},{"version":"2c4693df0794411d4efdf8fcecda6c06","impliedNodeFormat":99},{"version":"ff4c876de321c7bd0515acd74023f0d0","impliedNodeFormat":99},{"version":"b8c5f2d289ae31ca1670ab4635155048","impliedNodeFormat":99},{"version":"35ed7cbbb41000591b78a5c79b90a224","impliedNodeFormat":99},{"version":"963cceb0143a98ce41eec885ed0fb845","impliedNodeFormat":99},{"version":"75ea7ffccf6b9d2ef1c684f7ca8d754b","impliedNodeFormat":99},{"version":"7224f955477230d8d078aa2868e8d2b1","impliedNodeFormat":99},{"version":"afef5853b22b32fef2c04de3a6e2ccf8","impliedNodeFormat":99},{"version":"2b7539b437f02eca7f5160bc3ce00005","impliedNodeFormat":99},{"version":"404ceee0cc0721d3baba3dfc33c6fec9","impliedNodeFormat":99},{"version":"e67f09076fa398d5934468fea03a88cd","impliedNodeFormat":99},{"version":"41ee0fc60f48cb138c133468b248538f","impliedNodeFormat":99},{"version":"0fdc1971ca8627e4125ec553c2be9c2a","impliedNodeFormat":99},{"version":"ed0396a362b1b2596865f3ee11e40be5","impliedNodeFormat":99},{"version":"a09dde84449ac5bc6c2d3771cb0bad6d","impliedNodeFormat":99},{"version":"eb16fad95dcb2b65e1e0b2701bc6044d","impliedNodeFormat":99},{"version":"513595f36703987a6094deaacf17989a","impliedNodeFormat":99},{"version":"b48f6f3b5feece3c02b2bfd33ed7ac2f","impliedNodeFormat":99},{"version":"4d6d3dd77ce6be544dd8716466758ef7","impliedNodeFormat":99},{"version":"aac8669da08856c13b13a479595d23c4","impliedNodeFormat":99},{"version":"e1bb8e54fa271f5ba932eaf145d1c3b4","impliedNodeFormat":99},{"version":"617da0f1b0ad26a12312edb6f74d0556","impliedNodeFormat":99},{"version":"2e9b0e2a84463ef2718e950448b83d08","impliedNodeFormat":99},{"version":"5555c42206fdb8a56f373e30698c8d25","impliedNodeFormat":99},{"version":"5e701a780ac808b918cd4e8da35d002c","impliedNodeFormat":99},{"version":"e16ee594e9ec3412ca8bbe05c9622390","impliedNodeFormat":99},{"version":"0d86c028813da4704e24597d4f4b7ba4","impliedNodeFormat":99},{"version":"a8a0cc158fafe1806b0eb99216701304","impliedNodeFormat":99},{"version":"8b60d6edcfad0eab9298cdca53f42983","impliedNodeFormat":99},{"version":"e5dfc2b51588e93ebc9133250e1a640a","impliedNodeFormat":99},{"version":"f3f7f66e92ca2c362ea2e6d795f3e31f","impliedNodeFormat":99},{"version":"bb43930cd317c866fb19774ee0a95272","impliedNodeFormat":99},{"version":"baa8682c25cec769491bbbe940ed1efa","impliedNodeFormat":99},{"version":"a30ad01715ae27db5fccf1d8de445cc1","impliedNodeFormat":99},{"version":"63d6e524ac46045547e652e909d7d201","impliedNodeFormat":99},{"version":"8885eee863c6c5b7c9a9bd427f857f49","impliedNodeFormat":99},{"version":"8ffb1e64cffc7e39d07e8a8b3fc451a0","impliedNodeFormat":99},{"version":"e92de7e752c78d0e47fe7723eaa3c171","impliedNodeFormat":99},{"version":"d3d2734cca6d83bf01ea6df0cc212430","impliedNodeFormat":99},{"version":"e1b31941cabf6f8cbf798601079c291b","impliedNodeFormat":99},{"version":"3b4c045e363a1fc52935e39f8a41c953","impliedNodeFormat":99},{"version":"d2c0cc038d216197f4b2bcf72cf82681","impliedNodeFormat":99},{"version":"adc216236965f7a5a459e27ff0aefbf5","impliedNodeFormat":99},{"version":"0b7264b7cad857600cd7f24190f73fee","impliedNodeFormat":99},{"version":"65cdbb9ff63b0e8d30d8fa0e44887a25","impliedNodeFormat":99},{"version":"7c53759c037a208f9a763256e526be68","impliedNodeFormat":99},{"version":"2fb9d90050f55117cc285ce661cbbfe7","impliedNodeFormat":99},{"version":"a23161f9a52f63cc8993c4afa9fb8ea0","impliedNodeFormat":99},{"version":"43e8db18c82765e94896920578e3909b","impliedNodeFormat":99},{"version":"7dd5d36dbc10b82d749b41d9d8144036","impliedNodeFormat":99},{"version":"3edf52d79148fd66ea464aa6a5595f6e","impliedNodeFormat":99},{"version":"d19e08bf94eec5a97d63845e99da37b3","impliedNodeFormat":99},{"version":"0043393519cae4882c0b907c59ea8710","impliedNodeFormat":99},{"version":"6ba0c8e99a44675cd42546798cb804aa","impliedNodeFormat":99},{"version":"d491d0d32cac5a1bc693ed57058a556c","impliedNodeFormat":99},{"version":"987068ac8dd9c22e72c4dd2ff5c0e49f","impliedNodeFormat":99},{"version":"0cf18dc4778841c60241a8e0119f3215","impliedNodeFormat":99},{"version":"fac37940181e50701718f0d55239aeec","impliedNodeFormat":99},{"version":"cbcfd85d655b5f7add36f93fc900f604","impliedNodeFormat":99},{"version":"e64761d88968909e379acacd4c9e98db","impliedNodeFormat":99},{"version":"eddae9535d1119cf6ab371c77c57763d","impliedNodeFormat":99},{"version":"5dc6f1c73763390fd44b366256a365fe","impliedNodeFormat":99},{"version":"9828ae5fcb18ac45c0dee4a857291291","impliedNodeFormat":99},{"version":"960b53671ff9f02a65d2df9a00c9ba88","impliedNodeFormat":99},{"version":"a13f0b7cbfa65018ac31f4c8ce8da572","impliedNodeFormat":99},{"version":"aefa8eb31ffc1393bc04c80b559375d2","impliedNodeFormat":99},{"version":"6e278d438d4dd299484839b7bd111e5c","impliedNodeFormat":99},{"version":"47e923413c068e54b878f37433e04cd5","impliedNodeFormat":99},{"version":"e5685b15da0c9ec345e779e8e95c0d46","impliedNodeFormat":99},{"version":"2f45e44b53f6631a4a55f3cbf9f2e88c","impliedNodeFormat":99},{"version":"67540c4d422f140656789507e2e8ec83","impliedNodeFormat":99},{"version":"e99769387e2f6fea3eb7599fa4f9a006","impliedNodeFormat":99},{"version":"bd21f3e84c68d4fdb8ed18725a1e24e2","impliedNodeFormat":99},{"version":"8aa59d820939c60af0d0782df05c2a52","impliedNodeFormat":99},{"version":"09e45f310d9d670267544e5a15933d74","impliedNodeFormat":99},{"version":"737ed6e08719d42f047715df4f124b4d","impliedNodeFormat":99},{"version":"79e3efcac01d7de0181790c9caa63ad5","impliedNodeFormat":99},{"version":"0eb4fb8bdefe6b7eba3fbcd5782ea221","impliedNodeFormat":99},{"version":"0a80187132aec1a7303888936954f463","impliedNodeFormat":99},{"version":"89023da2a5dc12f1a3ea6e44b02ec421","impliedNodeFormat":99},{"version":"b54285892be490cf2ea79313caefec0a","impliedNodeFormat":99},{"version":"c558049e30ef3b86355ad0947169e2cd","impliedNodeFormat":99},{"version":"2a2c00b38682705d0072c3f16a99be03","impliedNodeFormat":99},{"version":"0277670460d53f391bce457dd1d7d7c6","impliedNodeFormat":99},{"version":"7be8254d1894e5f4f99a57e48dd1695d","impliedNodeFormat":99},{"version":"9a420f7274ce005efc5f9126d5d4a16a","impliedNodeFormat":99},{"version":"34c98e55011634b14b8a6b6a3b75d9a4","impliedNodeFormat":99},{"version":"9425c64d1e017079bc3c4c7facc26756","impliedNodeFormat":99},{"version":"54e87316b5a568692bc62e4defeecf53","impliedNodeFormat":99},{"version":"ed270fd3ef5727ad1605e0f726f8ff79","impliedNodeFormat":99},{"version":"d918b9743cae5be5f14a4b5bf2c4fc1d","impliedNodeFormat":99},{"version":"d25e4869f94f7fff9aa5221033548957","impliedNodeFormat":99},{"version":"9ac0b441de7c9dbbd28907741c5a9a4a","impliedNodeFormat":99},{"version":"bcdbfbb70c7d4e8e701cf6306e4db3ff","impliedNodeFormat":99},{"version":"950b09caed929e00d2f2f8fd8e6c791c","impliedNodeFormat":99},{"version":"386d197dcde1e55777273d84675ae1db","impliedNodeFormat":99},{"version":"0eb83caf975f1934c7ca394e9e7df33a","impliedNodeFormat":99},{"version":"76650e5fbfdfa75526433c66eba4daf1","impliedNodeFormat":99},{"version":"cb01c5726c3879143803e8632d9749b1","impliedNodeFormat":99},{"version":"945f99477fddcea4b46e6c0dbc46e6ed","impliedNodeFormat":99},{"version":"e9a5fbf59cb46ead47e23d8bc663e23a","impliedNodeFormat":99},{"version":"9c17aa207624e7d5b8ee468f6102bc5f","impliedNodeFormat":99},{"version":"c9af6ad68ccdb702b32ba33bbc0eae71","impliedNodeFormat":99},{"version":"6dfb86a6427b859cbf9334635f394927","impliedNodeFormat":99},{"version":"e612a544df11b843e334fc2447720b97","impliedNodeFormat":99},{"version":"e5123ca3b3637c7373cee90c84b61d07","impliedNodeFormat":99},{"version":"7f02a4fb4cb74b893a6aa739eeb62f53","impliedNodeFormat":99},{"version":"32a10886f80b249acba553242ef5c4f7","impliedNodeFormat":99},{"version":"4a4d5cf5fba8fc02c5f0f75495250b4c","impliedNodeFormat":99},{"version":"a6915edff84a22cd48a7eaa1a225315f","impliedNodeFormat":99},{"version":"487455dabbfd4940cb25685f25d9a23b","impliedNodeFormat":99},{"version":"1f78e816aa611b1caebcb79affcc2071","impliedNodeFormat":99},{"version":"ec1c9cc3c1be389c8a3bd3d631b17c8f","impliedNodeFormat":99},{"version":"eececef14d7cbf463c39d24b0cb4a35f","impliedNodeFormat":99},{"version":"0a59c4b4ccac605e14d62b74c77a75b3","impliedNodeFormat":99},{"version":"0b4f188c109fafb6e8bb7c86c9133417","impliedNodeFormat":99},{"version":"32a0704340d55bd21145bb7bfd0ba63d","impliedNodeFormat":99},{"version":"fbba297383614e7a2602a9b5dffb0279","impliedNodeFormat":99},{"version":"46ed3eb58cb571f8f9d37ba6f2fe9ee0","impliedNodeFormat":99},{"version":"dfbe4d54c6e0c9759c7fcd21f21514d2","impliedNodeFormat":99},{"version":"c7b50c1ee18dc172c50b53567ea9c0b7","impliedNodeFormat":99},{"version":"ccc31caf9ee5dc4f292e30557d6419c6","impliedNodeFormat":99},{"version":"1967558008a010d8c25514fb878503ad","impliedNodeFormat":99},{"version":"559fce5eecda72e0a24059b9fe8d0cb1","impliedNodeFormat":99},{"version":"8d4606796f1a65bb8879ffab6b325abd","impliedNodeFormat":99},{"version":"be9e85c6e0ffe83e77553a3a68e5a586","impliedNodeFormat":99},{"version":"9c7d505fc0ea399b8031c4aae9e00a00","impliedNodeFormat":99},{"version":"57a8858b7a4bc14e2d5a826c7167067b","impliedNodeFormat":99},"bf0afa677aab7ee27c777e41afb2f61b","75e1ca6f811d17a8f133ec5dfc8f80be","541705fa5dc3376e320f4cbf8e987f27","d50821391f9a6968c8caf112999bdb87","126d575044fdf204655a684396fc7723","c2b05507b1cac814c58d30173b46b1cf","2679beece9b4a91c8f79083ec08fac5b","8eddc6f79114efa96f9545c98cfebdff","7cb4eb9077421add1b8589404a201ae0","f2ca3f9fb98cd44902797e2650739894","f7f4bbbd71b857253bd81327faa0c9d6","762d5c2b3eccc9c13c3a2fcd086d89b1","97112f9f021ba28f668fafbd9860220d","5deff1e250fda3b85913cb1bf7bcd1fe","c3167ec2d3b3fbeb365d8b2e7d968c3f","041d9bf89d86c2cc3c1d9f6d7d1c596b","a9794bfb517966d101383c66453a9297","9bb75652c57c7eac9b443bf5d5daaaac","696d783a2a8e5df675363a979739acc8","b2047ce0b5175045daa2882589d0cbae","30507d58944d5da17f130a1d9167a7ee","b92c9540afde1d92570ea29086832ae1","5ccdfd21b8cb279666ffdb69e984c2bf","f0d9af287e63e924085bbb81083ac4ba","923235a9f9741a9e7db8cc75d4196f9e","158caaa688ac91bee38a946331b2fd12","97efc4d282e79c808b640a3d9e95e34e","00eee11e7f58fc350de516736a6740f5","7de828de445f690703a02c7eba9cea94","ac756acf17c87524a8f16b632c6f2b44","682df0eb9edc72931bb71f913fe42b46","37c632e523f262bfab05595a0ac2a3df","26bc199b60e6146a81ffed3a7f23202d","851d6839cc9b14aa9ec3eed98b070eb6","39f26ed7ec53c9094b51656a19fa3924","625b4141497f53172e4cda1027c3a2af","e6dec1a054b9d8f08bc290112c564dc6","ce6031af5b0b12dee346b241523265f0","19a9d32214405e871235729361a209e2","72770e6eb23b3c95d7986adf1c2306ff","57d35f625f5e9458383385934688e34e","240fffbdd44279aae18b2f7ed7d23caa","6135dd76dc47b55152798f0c2963c29b","d99b8a2afa5b8e8d140a4aef38b99ab0","8a09a54ac8b8d22b5fd5798a0c5aed04","33a52b4746857ab303ed2bac2c3deec6","996a8deba4c3305a1c9327169e9fe716","6591c197766137a5bb8e73b2ba9d3171","121c2ae41686f6d63de56357f78790af","d3d78992243f4fbf611eba0979350de0","7177d55f3acf72d2f3c647c789782ff0","26d04b867bf5a8ea6100664598445001","e60671868eb55f34f7a4f4455b1d9dce","54d94d2d9ba3fd50a89d4668aac70cb8","a42ec809cbdf347a25866f87f4e47939","fd222c79799a2968c7c8cfa176bf7497","ade18f78f172c10b0ae947bf57a51092","e9d33de0068fa6da1fe65db2033429c0","a485bddc86bf17f8be5237e211994cee","b7ab05e5f411c62b957b076a9952d0e0","4a53a5f10c4c33ed77b1f982e72a08f4","d4939775f397b8e92cc65ef55e6e3256","7e059469080c1abf6e326eacd89b8a9e","bbf34e5e5062359f45d0c62bbf01b72e","e036915b1f6b1240304178367f393efd","b2d8dffcaac66a1e294ce6b475d9447c","8b5a3b0503a0000afb797dca087c87f8","138f944ac42769407b401123d131d8de","5eb8916cf2c82382a214e18bcaae647b","eeaccea308f257b245f3b04fb6b60074","6ee95e1a7a2598ec56926c6e89d347ad","614a3bcd30dd4fe04eb38bfef2be5c29","edf4e937a1a77a291c0b5efa6caa764f","574403d551c097099e54eee560d4d71e","4f8041c30cc9a756e4f9c01f2c8ae501","25d40df8bff69a330a687d98bdbc2eb6","87175b4aa2f6ef2d25834a1969a45b51","be8b3bcdd2ba7d7c8c87946a20626c5b","b52b31c86a05afbf7cc827a8889b69da","cd8070bba6df1e7a7b65224ab106d7d0","ce15efa1c092340d16d533b69f4fb1a9","6b72f2919a3ebe1223b418b9bc920d7e",{"version":"d24ce383e45fc15d6fa9f750441ba231","impliedNodeFormat":99},{"version":"7f0fc91445cc316dedc5ba5b8ebcdbc0","signature":"ee99eb0d8b2a68db84af2c10f7732b7c","impliedNodeFormat":1},{"version":"e9a89749fc58084c682facfc9ee8c8a0","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"c33df883e1e73e6368c4c405015cc302","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"f28d3d3b2197d9730b6fc7d9ca1bb3b0","signature":"9c499dd88e74e48ed3edecdba00c832e","impliedNodeFormat":1},"96835098dbe4b42f2c82bf3e1cc7fd68",{"version":"20997c4c12bca58fde02d251d9fe5243","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"12100c0ec8d988ef550731f1fc9c9d67","signature":"3c21b0b248bb6dd41371b5a78f9a087e","impliedNodeFormat":1},{"version":"1a2770a04b1fd7f5f5d1c49f399653ed","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"0212071d6c808aa35ad8ccaa7d1ce3aa","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"f6ca14bf97d6b9ef8a7c4c173a1b3bd0","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"9ba078d1baf3652733d667f64254bf2b","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"1efb3902005eb4abd3321302296bed3b","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"fea2fa0481629df82206463079705b0b","signature":"525cd89a64928b77734d936fe1ff9fa6","impliedNodeFormat":1},{"version":"a4bf1eaf6b72b606a7ad56bd6671767a","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"3b90898990a9c47ef538b2df15eeea57","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"8ef82daa1627daefe5a625b5fc85668d","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"afaa3411fe6990c4a71959da59d186ec","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"5a297566b9863f5dfd9c8d4850ed8af4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"002f0578a75babb4cd79bb344179a330","affectsGlobalScope":true,"impliedNodeFormat":1},"02575b4ec4091570b193cc6ca8e6821e","d9e3f4bbc536c85bbe9f08c0e0d9652b","2a2422fc271486f7b76a1c2310e36feb",{"version":"047bb96650be4c28cb16faf87fc66719","impliedNodeFormat":99},{"version":"41fb57c58853085b3bb1b94563fce2ad","impliedNodeFormat":99},{"version":"2e36ab34833111f29beed9a88689086b","impliedNodeFormat":99},{"version":"f64564b54834655981019368ecd3d0b8","impliedNodeFormat":99},{"version":"50f369f2213493c4fe15314ae8c67531","impliedNodeFormat":99},{"version":"8834fe01bb42c2bd70cf6f6715fa43cd","impliedNodeFormat":99},{"version":"0bf68c45e66c3b3878bdc7a527313fdc","impliedNodeFormat":99},{"version":"fd45b3d9806d316a688ca4993ec95c77","impliedNodeFormat":99},{"version":"70f7bfdee9f516acd204606853e44ba7","impliedNodeFormat":99},{"version":"88f670fe3593f060f1f191b7b29a46a3","impliedNodeFormat":99},{"version":"5ed180fff635da6e5f7dcab1b37923a3","impliedNodeFormat":99},{"version":"f8af94ff96fb91e1b8f55b49d1a3aa15","impliedNodeFormat":99},{"version":"fa8c14dd4b124abdbc331e9f35c5a0fb","impliedNodeFormat":99},{"version":"f635d4bbad82ba393a1840608a641d5c","impliedNodeFormat":99},{"version":"d1e2b58c0e02b243721e3c95a800b17b","impliedNodeFormat":99},{"version":"cc204442bdc2965da145c9df22bc8c3f","impliedNodeFormat":99},{"version":"bf78972447708a9b939fa095b219dae1","signature":"b4fdd13418043eeced28d805b765b8d2","impliedNodeFormat":1},{"version":"25be53501b8bc6faf2546739859e670e","signature":"937e87ed0806e3017d59165a36a08b48","impliedNodeFormat":1},{"version":"1bd9c33fa4dc9f5db21e3499cce058e6","affectsGlobalScope":true,"impliedNodeFormat":1},"292f07f2059da3d1699f18623544d2a8","bd29402f5bac2be501b52a3a0ec997a1",{"version":"79810ea9af95984eee315547ace20882","signature":"ed91fd2e858d26ab3dad1b887a521fdd","impliedNodeFormat":1},{"version":"3773c8c047334fa1b5c28a985476dce9","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"a329e51a687a6ef1c38898b1f25f0343","signature":"57999914abb1d580ccd3ebcdc70f667d","impliedNodeFormat":1},{"version":"a0efc822cc48ae5cc16c2d64553cecc5","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},"9fc3ec402a78bc87c63ac86ce40edcc8","42a13551ef0ce9e68aef58b6a4ac31fa",{"version":"f345bb8fd4f4ab70603d1260e31ba436","signature":"288707dc80b3f8518c9f34edbbae62b7","impliedNodeFormat":1},{"version":"8525ef5a9082e767b436a3ecaaa20374","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"4a5a945e973883edeff92b53cf053c0f","signature":"6c40b52a590160c1c6b75803e9b25091","impliedNodeFormat":1},{"version":"e2e89f8504f5fda7f3fb1444c4a432d7","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"553ad331091d94d5f23e8318244cd197","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"62eb7afb7a117afae87b6f8687e536cc","signature":"222446dedce6a294c04ec9de588bb772","impliedNodeFormat":1},{"version":"b01547b4200d81ad51b75252702ebaf5","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"1f5e4b204e6d69df5fe9a6326f194246","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},"a3a6f5ccdb9eb1668d60342816d9e9cd",{"version":"7d9488472187856f3723b0ddcd9794b1","signature":"529c200c5b2c25a9328ac7eb6df5bfff","impliedNodeFormat":1},"f029660b399944c415719061b07eecac",{"version":"86281b8bf6c545aa340ecd319e1d7e6e","signature":"7591a64cc1c33f64c1b6aa2e13cf66f0","impliedNodeFormat":1},{"version":"c52f47d48b15084aab596d7136ce5ba4","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"f9efd3586ab0ffb3e125ae4cea851f27","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"ff9ff40cbbcb9ab3b668b4b5ac8a7f5d","signature":"35d5909073ba583804e123f0dc82d8a8","impliedNodeFormat":1},{"version":"cf9a83c582906310e099615814de166f","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"4aa82b92329aee1aae0881b1741921c2","signature":"8d12eb2255b6ae98136d891c5592e1e9","impliedNodeFormat":1},{"version":"fa747d735653d897da7af811ee82aa29","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"a073d2037757c838290137853ca4690e","signature":"b22352311d9e85a524c93dddd234fe26","impliedNodeFormat":1},{"version":"d694dffb10af69d97702f5c527581c15","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"60a9c442bad9b9492758060273c50170","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"742e177420d95e1a0f68b1ca8be184d8","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"4ea165d0cfaf738f4c43c5570ef61726","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"cd841d81dae0d9daa050fef87010086f","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"31cc05db1c9d4351b86571ab4cc34665","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"ad09a3a290f580fb250453959b8271f2","signature":"7f86771e1a1ed36fb75a320f27d7a857","impliedNodeFormat":1},{"version":"4812bf66c48f06b4b0a5f90ef3541d78","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"2fb5898fdf9a84fcbdfaf2b8dca90500","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"e1d9b32d5d85c650b10c45a999cad22f","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"47c2fd66217dde0a68e8eb84bec52eb8","signature":"2b7a3484e11a3625175b50d9a87c64f2","impliedNodeFormat":1},{"version":"bcffe8bffd67949bac1a4f149f42b766","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"2dc43f8035bd0c8df72e4aea51eec79e","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"9f976ac5ad2ea293284ce3b3fa8e7a90","signature":"83b8e64aff551871e7a7e38d3cfe55cd","impliedNodeFormat":1},{"version":"827e397ee936afeb5da2a28855dad48e","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},"facfe1f4ee1f835fc9ada88ab4e8f000",{"version":"4da517b7250a140c5251e612c5ea2ff9","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"cf79a0d3c29902e8e4546963e7b651ed","signature":"21836f104e7c1317294d339b0da2d143","impliedNodeFormat":1},{"version":"e9de6438a22671b3d8b04baa7f099490","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"dd0d9103a561185a063a4d1a1fa0c854","signature":"dad9ccefdd222cafcea8dafbabc781b2","impliedNodeFormat":1},{"version":"5dace2e94b5198dc04d64307e0d7eff4","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},"e2b48e033077219032325523f6ae12ec",{"version":"7b5d9d617a6778edae5ef63ee920f839","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"05897a7e0891d0052cb8b81f6839b210","signature":"316e3f3b88154054c6e6f5a1fb5fc053","impliedNodeFormat":1},{"version":"c16797a19c1ee904b32c462dafc4a2b9","signature":"57f5dcf9966b0fe58a940683844d8e6f","impliedNodeFormat":1},{"version":"80cbc67ad0e2b9a0e478d354878cebc7","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},"b24c7c10697baffc9e4305da542c4384",{"version":"3d80aa793b8cfe3084b5db9db51cbf56","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"2358b9c7ca78648d9be7ba6a294583a0","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"e6bd6c1af4d0554d69109bd498762c10","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"85ee99db5e81a1a40482ae43142f2389","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"b4147a491c5f51ff6389d5a8b0f20fa5","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"04a80058379dd9755c5356c1d0537033","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"c858c5d3b41c60bb1634c3ad13f15aff","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"cb6723e8130b9063b12d8bf934a3ed74","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"2913e673ed39c49ec26612a62ed95991","signature":"59267924a4fe7af9a49880ff691fe293","impliedNodeFormat":1},{"version":"f2f18ce087611338e6bf1a7d3ed50035","signature":"83b9ee6827f384a400ee25eec802f767","impliedNodeFormat":1},{"version":"0b5d030b2a94a458c6c8c15b82c4f542","signature":"bc36fc30b3cf6c53267e268810c711c7","impliedNodeFormat":1},{"version":"1ae9d79c277ea0ab02904563414a28b5","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"7def7f0a83b752cb855c7c9aa4b35941","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"8fc536210f48a3916a27bf5f7c7c2463","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"7c4bacef4e4ef2f5eed60b6f9dbe9af8","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"166f5251d456f995441c8711424750d1","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"e6cf54d5d6dc981c9110a17c07182d3b","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"0676974db61db193601bb4b140fb029e","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"e1c7bbfed59597187d082fa99153bcd7","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"68d322273790aa16592b5ac15e67d714","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"72fc97428c08334d8a5d53915a557525","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"9fee82d85fed2e94d38c33046c61d3f0","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"c1c2e23a7f19e7e1ccf2841f7fd2869f","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"28cbae5f1451e5f244529139fb2c3d07","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"87cf7daed8eef4f0717b4780ae3623e7","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},"f146c02bb94b3a3230d3c9075c3925e3",{"version":"5be428ca99a1e495069d029c2c4222b2","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"6e2a7bcfa5049fff04397b281a0ce59b","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"368f63224eee90931040ec0879750b57","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"dd61661c9f8d856f13e68b353b4cdb18","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"c308a30af26bcee97b26bc7f886d07fd","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"a248b07f73830875cf11d14ca5c77a98","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"1b616ad2493a8590719e23b1670093c6","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"48872a380ad291e2575755c582d117e1","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"153aad2136c7e63b2e3e45c4f06bb5eb","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"bee8a5a7a5f6156546ab3b09f54f1de7","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"185d24ca0d11e655d4ab94125223c1e1","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},"4f7cd8c27f37a919db75a1a5b49abd9f",{"version":"f891858dce670540d447371890356eec","signature":"f633c07c6ce1ce41359b1ac1c208171b","impliedNodeFormat":1},{"version":"47336e3f304642b70677263f8953d542","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},"e214c133f5519880a4412f538871c296","b79e889fead7dfcb0a276566f498d355",{"version":"d7b55dfea86a58f5c81b94e38582211e","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"5013e2a04c615f87a295feca03915eaa","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"d7307f58ea31e8c3deb844e8aca2603a","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"be19742b7ae88efd0fff2f18d624b066","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"645fe5f881976cd3292403ad70264cc5","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},"04b41ac7516cdfd1fd1cd3ff32253222",{"version":"1f183dffa2e1f8bd55c24d6e7cf21faf","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},"d5fee4fac2be905874ff687582fc3224",{"version":"d4fed85340bd713e3ff5618cac2bb669","signature":"434b2f59a776ed8505e9c302cca1b929","impliedNodeFormat":1},{"version":"97b0f81024cc6a6157a7d88767ab7898","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},"4c9b63337fdeefc637c90d3c85c72e3e",{"version":"130c8cb510b5d1ebd9cf26cea12ecb73","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"ed097a34cb06d0c35c9dc4e071ca8737","signature":"4692b79e33fbc6444747ac65f6104396","impliedNodeFormat":1},{"version":"fb4b7b580fb2f172ab3a96c5a20550e9","signature":"c22af955dc3f3d7b280dcecf1110da25","impliedNodeFormat":1},"e2a8e187d8a7db24931ea2c655d52c80","fdf29cba6a2cc2f1f28f95f337ae66a4","3fb91489cde0479c146410f814c27749","589e3a40397dc48971ac6612dca9896b","86d78487119720cc47028100d7bb39d1","91535037303b09ae267a5ee85f9efd85","39f77cd7e5d49be8457371af1c217c22","80934c477870fc97980d6296f5e7f063","928a0d860e4d81f663a40bb1a5b4b1fd","e2eef8c06c88bf82bd89bd640527a835","0238452f4fa45cb934637e05d02d1db8","ff00d59cbd64d6d0ba3e1d83e11ca21b","b95dc37e10dac548d96f5b757069a2d6",{"version":"98d7f1464c44c2452164c8fa5956661b","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"ff4d71935967e02fbe90430738a46c4e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"873f11d67a5ac6b801d0ecd308abcd89","signature":"2a0e595e96d10f31f8442c017f6ea5e6","impliedNodeFormat":1},{"version":"0860ee8d575fb51754a0a5f12d1cb954","signature":"ae5f877dac93aa1ddd0587ebc54e5636","impliedNodeFormat":1},{"version":"f5dde1612c6be0fe74c2413060cbe719","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"a26bfa2c8a888f0df64ddc0cf1349542",{"version":"a18b74f1bc825d5faa870ed6ee667f7c","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"11698e2ef5e6570e23b1c98adc9f747d","signature":"3f134495d204c3b57c32c95435cc5b4d","impliedNodeFormat":1},{"version":"f6e2c022678dbbad237f375f2c12b8dd","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"f1b54e3a0415bb060cb5226753f76465","signature":"7c685fb4566d80621fa7ae966f1e8790","impliedNodeFormat":1},{"version":"3b78f7357187352ae74b985f553175f7","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"f935220cc8a4e9bf276c2f64f9958eba","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"a99677184b17dd46631752d71771ba4b","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"90f0c8850f08ac186f43a9f01244c683","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"de2a18969abc0095d11e64af6cfca133","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"30bb6f5a07f2bf38e1a428ffec276f09","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"270d09fb16ab4c994029bd14af9694db","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"4eb09c0e5415dab9e978cd99d7abd949","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"215387dd5976d4700951ef4426549c53","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"0e3587ed16c1c20749cf6f8963c5f4ec","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"2366154b19a3a93d2d972d1605782b27","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"2de0bb25af4bdf863dec823008094415","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"cff07c7a259309e27425fa8ca1b1a82b","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"bab0a2d833dd379f535bb5980ff03eff","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"59f1196e6f4b324ab40c15d8fb655fe3","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"a31d76b9cf09bbd097a037a97936a9e6","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"cf78808a9cf2a8c11ab26c3745fa591c","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"9e8d7b39840e3c9aa0e76447ac4103c4","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"da679faaf9a2ad475be3b4871a2100ea","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"8543c40a375766a76db28a88363fc66a",{"version":"7e5485b3cdac5c856f09e90b76f38566","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"2451afd80c5bc76c556a88471e1e2705","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"aa8f755598131b7e85bb7f2d412f6bfe","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"dfd848b0fa8949ce2c7ba28c5b99e476","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"0b11e76ebe43d365f0a07c941870a238","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"7ba07321887064c5e1601454d1e96639","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"c67eefb7b2373088dfeee77207ff3a2f","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"fc420f73ce1780c99f7c0526e16f2653","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"8924d2ded730243b2e52c62036d57884","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"5932a91e2c43beea9d0fcb58bfc86a30","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"e01ef91115f963b65219ebdc27895caf","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"1d32ba3cc193f391bdca2a438e6354a5","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"04cf0db9396270457a54be5c52c3cf38","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"3f1926ec20d8da3cf6dd79a4e9a6deb1","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"77ff86e3702c0132998e2750841ad009","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"a2ab6c04b7bf0e2b2c8ffa18dbb71b03","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"efd6c70e046eac05c0d9f39be8f49ee8","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"54ec66c8540111c116c64b028baabc58","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"aae4c0662baff084228a0b701ff56bc1","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"a68301a4e2ad8cd60447d682b3c062e5","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"e2a2d96f5c5b53e8cc7ec71e001ef30e","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"d4b49af24b25b019cec584ebdf8db831","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"98e94f032acbd38af36488b5797c347c","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"e1c66cd1805b3c0bd69192d7ca358529",{"version":"e8c667b367638ce643e07c6d340daf16","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"865fc420c8342d20b9fc8ace57172ff7","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"2e53237dac3ef8eaf47c5931cf475745","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"f3c1505a3e4693c378840fdcaef1b68f","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"c13bd17cbcb74fe481f087cba7e97493","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"97bd5d04d91a22119921dbfb62cff3e8","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"fc5c6b095aef889a8ff3b62a5938e4dc","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"4e5652a37f25d54a1d39dd435375c0a3","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"99750d817ad25095964a03ce002e894b","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"caa63290541c92a9270435825b56cbe3","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"703b08c99964c65d987fe19dbceab664","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"0acd155528cd6b2e53970d709bb5f44a","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"1fd53098a5dfdad057b08df21a539a65","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"1b0be01baadee1515b0739821438c72e","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"451d242c3b8d0226a094fcf2512eb6ae","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"b4df08859b4407c96238e54f66436a37","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"6d3d64c2a56eba8197734f6e6c1ca4ce","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"5cfdfe4d5889e219e78eae7a820d5d42","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"76340ef572ce3418e32fcd4fd9f4021a","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"eaa9575e958fa4ef01569fb937f1a8e0","59405ef25e182179f9405cc9d442628c","a6d80e6c23e25c6d4876099dbd53d2ca",{"version":"fc1ef756c2b12e201306eb2cb560e8e4","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},"a77abd77cf5b0bd70b307a01205594f7","503d057e1e57002bf22b2fcf410a184d",{"version":"90018ea1c05386cc705a03d7f7516148","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"99aec57d46b055e07b5a8f386d4231ac","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"8a9606fefa99506f65c77041c416ac18","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"626c1092a690d8bae1a3648ea53553a0","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"41721091893da2bd3f014f5dc3fb0456","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"6ba5bae76bb96731069cd04d031089c3","signature":"abe7d9981d6018efb6b2b794f40a1607","impliedNodeFormat":1},{"version":"a9a78fbf139d236b8b0594f7d8efcb98","signature":"6e3ebb52dcf8d4ad407e19ce51201982","impliedNodeFormat":1},{"version":"ec2187787e7677196512a60fc54102a3","signature":"dabcc24331056eb496a85fd45d28e266","impliedNodeFormat":1},"b50db35c2850b028e530688bca782480",{"version":"0f0c5906091cb70e21bda9e94a45eded","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"412a5a1b10ce3be53c1660971cc801ce",{"version":"2784b23261ba5e477311e00f86219db5","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"412a5a1b10ce3be53c1660971cc801ce",{"version":"9d4f44f66036b66b7161be8392a69f62","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"48b5325e9725176010ed2db93782f4a8",{"version":"a82f13c3c30e3c87fc811b53efc4f5d8","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"412a5a1b10ce3be53c1660971cc801ce",{"version":"59fe0846705a39a7baf75fc72dbb093a","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"412a5a1b10ce3be53c1660971cc801ce",{"version":"77a43e94b6e4e5a97520756e48a3fee7","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"836c1116ba16807e6bc1a16b361a2711",{"version":"2a4db12d58171df286f6df0ec3f98d66","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"412a5a1b10ce3be53c1660971cc801ce",{"version":"e02cd71ff35ab7314431864aff0dfb22","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"412a5a1b10ce3be53c1660971cc801ce",{"version":"7a1b510e0dca81852bdc09befeb3ecab","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"8e3e70851c06e73c5cc729f0e1d4ff66",{"version":"da2fb2f1ffbd3a22005655e0d83b8773","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"412a5a1b10ce3be53c1660971cc801ce",{"version":"7b8a7d5027292b20a5d3d93ed1cfacd6","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"359e9b38b633f4cd1b7bd21d8e773d72",{"version":"9492d65b249facfbabfad73c7afa12b4","signature":"b7f2ca9f9decd375584e84817e397b88","impliedNodeFormat":1},"b30afe593d45257cc28a3170484642e7","66f680215b917b534f6085b5561ab359"],"fileIdsList":[[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,260,261,271,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,250,260,261,262,265,270,280,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,260,261,264,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,260,261,262,264,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,271,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,270,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,178,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,263,264,266,271,272,273,274,275,276,277,278,279,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,270,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,177,178,179,182,268,270,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,267,270,271,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,177,178,179,181,271,304,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,260,261,266,267,268,269,271,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,260,261,268,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,182,270,271,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,183,260,263,271,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,270,271,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1432,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1127,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1127,1359,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1403,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1405,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1362,1388,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1389,1390,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1389,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1362,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1362,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1381,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1381,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1370,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1364,1372,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1362,1373,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1373,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1370,1373,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1373,1374,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1373,1385,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1364,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1368,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1373,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1389,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1390,1391,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1419,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1360,1361,1363,1365,1366,1367,1368,1369,1370,1371,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1404,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1374,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1374,1425,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1360,1362,1389,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1372,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1388,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1359,1380,1381,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,752,753,754,755,756,757,758,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,586,600,622,624,632,633,644,656,659,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,752,753,754,755,756,758,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,600,601,757,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,586,600,601,757,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,600,601,751,757,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,600,751,757,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,586,600,751,757,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,752,753,754,755,756,758,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,757,759,760,761,765,773,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,601,751,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,586,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,601,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,757,759,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,723,762,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,725,762,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,762,763,764,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,769,770,771,772,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,714,757,768,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,715,757,768,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,607,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,608,609,610,611,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,610,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,612,615,621,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,613,614,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,616,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,617,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,618,619,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,618,619,620,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,623,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,627,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,630,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,629,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,625,626,627,628,630,631,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,634,635,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,634,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,634,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,607,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,634,635,636,637,638,639,640,641,642,643,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,639,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,653,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,654,655,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,654,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,657,658,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,657,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,602,604,605,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,603,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,606,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,660,661,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,660,661,662,663,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,645,646,647,648,649,650,651,652,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,586,587,588,589,590,591,592,593,594,595,596,597,598,599,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,572,574,575,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,572,574,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,573,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,571,572,574,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,569,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,570,573,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,576,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,571,573,581,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,571,572,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,571,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,766,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,766,767,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,914,915,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,842,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,841,842,843,844,845,918,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,841,842,897,916,917,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,843,846,848,849,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,847,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,845,848,850,851,895,918,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,851,852,863,864,894,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,841,842,844,896,898,915,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,842,843,845,848,850,896,897,915,918,920,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,846,849,850,864,899,907,908,910,911,919,922,923,924,925,926,927,928,929,930,934,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,842,919,924,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,842,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,858,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,882,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,860,861,867,868,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,858,859,863,866,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,858,859,862,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,859,860,861,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,858,865,870,871,875,876,877,878,879,880,888,889,891,892,893,936,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,869,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,874,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,868,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,887,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,890,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,868,872,873,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,858,859,863,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,868,884,885,886,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,858,859,881,883,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,858,902,904,936,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,903,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,842,843,844,845,847,848,850,851,895,896,897,898,899,909,912,913,914,915,918,919,920,921,922,935,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,842,843,845,848,850,851,895,907,911,918,919,925,931,932,933,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,848,864,910,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,848,864,908,909,910,919,935,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,848,851,864,910,911,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,848,851,864,895,907,909,911,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,841,842,843,844,845,919,925,934,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,844,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,848,850,898,914,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,916,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,896,902,905,907,911,914,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,842,844,907,910,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,842,844,848,849,864,909,919,924,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,841,842,843,844,919,929,934,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,841,842,845,912,913,915,917,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,846,936,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,841,842,845,848,901,912,915,918,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,848,864,895,899,913,915,918,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,844,908,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,842,844,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,841,844,901,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,843,851,895,896,906,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,842,843,848,849,850,851,864,895,896,900,901,907,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,841,842,848,849,850,864,895,900,919,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,853,854,855,857,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,853,858,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,314,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,389,1460,1461,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,167,168,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,168,169,304,313,315,320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,180,304,1462,1719],[56,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[51,52,53,56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[54,55,56,57,58,59,60,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,149,150,304,1462,1719],[56,98,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,98,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,153,155,159,160,161,162,163,164,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,153,155,156,158,165,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,156,157,158,165,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,155,156,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,155,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,157,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,154,156,158,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,153,155,156,157,158,165,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,153,154,155,156,157,158,165,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,158,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1441,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,1435,1436,1439,1440,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,389,1462,1484,1719],[46,47,48,56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[49,56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,498,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,349,387,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,349,372,387,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,348,387,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,387,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,349,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,349,373,387,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,373,387,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,312,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1603,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1594,1595,1596,1598,1604,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1594,1597,1598,1599,1600,1601,1602,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1597,1598,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1597,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1604,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,290,291,292,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,392,425,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,412,416,417,425,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,416,418,419,420,422,423,424,425,426,427,428,429,430,431,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,412,415,419,424,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,412,416,417,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,412,416,418,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,415,418,425,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,412,418,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,412,416,420,425,427,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,412,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,412,418,425,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,425,429,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,412,415,418,422,423,425,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,412,416,418,420,421,425,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,433,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,412,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,435,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,412,415,432,434,436,437,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,394,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,397,399,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,397,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,393,401,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,397,398,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,399,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,409,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,397,401,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,391,399,406,425,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,413,414,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,413,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,957,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,1462,1463,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,1462,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,282,283,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1216,1307,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1307,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1211,1214,1215,1216,1307,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1307,1324,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1211,1214,1215,1216,1217,1307,1344,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1212,1213,1214,1344,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1215,1307,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1144,1145,1158,1172,1200,1320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1216,1307,1324,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1213,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1211,1214,1215,1216,1217,1307,1331,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1212,1213,1214,1331,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1160,1320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1211,1214,1215,1216,1217,1307,1337,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1212,1213,1214,1337,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1211,1214,1215,1216,1217,1307,1325,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1213,1214,1325,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1313,1320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1212,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1213,1214,1218,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1213,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1213,1214,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1213,1218,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1178,1184,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1241,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1131,1133,1185,1221,1226,1233,1235,1236,1237,1238,1253,1254,1263,1265,1270,1271,1273,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1131,1133,1134,1175,1185,1238,1250,1251,1252,1273,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1175,1184,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1128,1129,1130,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1220,1221,1222,1224,1225,1227,1229,1233,1234,1235,1236,1237,1238,1239,1240,1242,1243,1245,1246,1247,1249,1250,1251,1252,1253,1254,1256,1257,1258,1259,1262,1263,1264,1265,1266,1267,1268,1269,1270,1272,1273,1274,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1296,1297,1298,1299,1300,1301,1304,1305,1306,1307,1308,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1185,1212,1213,1214,1215,1217,1219,1220,1221,1222,1263,1265,1284,1290,1291,1305,1306,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1349,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1143,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1152,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1135,1147,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1159,1173,1174,1258,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1137,1147,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1135,1141,1144,1145,1146,1148,1153,1154,1155,1156,1157,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1199,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1135,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1136,1137,1138,1139,1142,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1137,1141,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1180,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1136,1149,1150,1151,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1135,1141,1147,1159,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1134,1141,1143,1152,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1140,1163,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1137,1140,1147,1192,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1159,1165,1170,1171,1173,1174,1182,1187,1191,1198,1204,1208,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1137,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1140,1141,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1141,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1140,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1186,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1189,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1135,1137,1141,1142,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1166,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1137,1141,1182,1187,1191,1198,1202,1203,1204,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1169,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1189,1235,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1235,1266,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1177,1267,1268,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1141,1170,1175,1182,1191,1198,1199,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1135,1137,1159,1201,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1201,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1179,1180,1181,1182,1183,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1225,1234,1235,1250,1251,1252,1256,1257,1258,1259,1264,1266,1267,1268,1269,1292,1312,1313,1314,1315,1316,1317,1318,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1173,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1173,1174,1256,1257,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1178,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1256,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1135,1137,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1159,1170,1179,1185,1186,1187,1191,1192,1198,1200,1204,1205,1207,1209,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1137,1141,1176,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1134,1137,1141,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1179,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1159,1165,1166,1167,1168,1170,1171,1172,1173,1174,1179,1182,1183,1187,1188,1190,1191,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1141,1175,1176,1178,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1137,1177,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1159,1163,1165,1170,1171,1182,1187,1191,1198,1201,1204,1206,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1163,1206,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1181,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1184,1185,1234,1235,1236,1237,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1185,1225,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1185,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1175,1185,1232,1272,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1166,1272,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1137,1236,1237,1272,1292,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1170,1233,1239,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1173,1185,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1241,1256,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1134,1137,1175,1177,1178,1185,1232,1235,1237,1241,1243,1269,1273,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1128,1129,1130,1132,1242,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1179,1185,1237,1241,1254,1272,1273,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1185,1188,1272,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1134,1141,1175,1185,1273,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1236,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1235,1273,1274,1314,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1201,1236,1237,1272,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1185,1189,1232,1273,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1181,1185,1299,1300,1301,1302,1305,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1211,1213,1220,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1211,1213,1219,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1175,1185,1238,1241,1243,1259,1261,1273,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1131,1185,1236,1238,1253,1264,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1181,1184,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1129,1131,1133,1184,1185,1186,1209,1210,1212,1219,1220,1221,1222,1233,1236,1238,1240,1242,1243,1245,1246,1249,1273,1274,1295,1296,1298,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1131,1133,1185,1232,1237,1253,1255,1262,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1238,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1128,1131,1133,1184,1185,1186,1205,1210,1212,1219,1220,1221,1222,1237,1242,1246,1249,1273,1293,1294,1295,1296,1297,1298,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1170,1184,1238,1273,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1175,1185,1267,1269,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1132,1133,1184,1185,1200,1210,1212,1219,1221,1222,1233,1236,1238,1240,1246,1273,1274,1293,1294,1295,1298,1301,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1210,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1184,1185,1202,1237,1238,1245,1273,1274,1294,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1272,1273,1295,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1184,1241,1243,1258,1260,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1237,1242,1295,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1185,1192,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1131,1133,1185,1186,1190,1191,1192,1210,1212,1219,1220,1221,1222,1232,1233,1236,1237,1238,1240,1242,1243,1244,1245,1246,1247,1248,1249,1253,1273,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1130,1131,1133,1184,1185,1186,1207,1210,1212,1219,1220,1221,1222,1233,1236,1238,1240,1242,1245,1246,1249,1273,1274,1294,1295,1296,1298,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1238,1273,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1211,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1179,1180,1181,1182,1183,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1211,1212,1225,1234,1235,1250,1251,1252,1256,1257,1258,1259,1264,1266,1267,1268,1269,1292,1312,1313,1314,1315,1316,1317,1318,1319,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1147,1156,1158,1160,1161,1162,1164,1193,1194,1195,1196,1197,1200,1210,1212,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1128,1129,1130,1132,1182,1220,1221,1233,1242,1254,1299,1300,1301,1302,1303,1304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1211,1212,1213,1216,1218,1220,1309,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1212,1216,1220,1309,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1211,1212,1213,1216,1218,1219,1220,1221,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1221,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1211,1212,1213,1216,1218,1219,1220,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1147,1185,1212,1213,1219,1220,1284,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1285,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1148,1184,1223,1226,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1142,1158,1184,1212,1219,1221,1222,1229,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1158,1160,1184,1185,1212,1219,1221,1222,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1158,1184,1185,1212,1219,1221,1222,1224,1226,1227,1228,1230,1231,1275,1276,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1158,1184,1212,1219,1221,1222,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1142,1143,1184,1185,1223,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1160,1184,1185,1212,1219,1221,1222,1238,1272,1274,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1161,1184,1212,1219,1221,1222,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1162,1184,1185,1212,1219,1221,1222,1224,1226,1229,1276,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1164,1184,1212,1219,1221,1222,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1184,1193,1212,1219,1221,1222,1254,1285,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1156,1184,1212,1219,1221,1222,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1184,1194,1212,1219,1221,1222,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1184,1195,1212,1219,1221,1222,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1184,1196,1212,1219,1221,1222,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1184,1197,1212,1219,1221,1222,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1142,1149,1184,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1220,1221,1277,1278,1279,1280,1281,1282,1283,1286,1287,1288,1289,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1151,1184,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1185,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1128,1129,1130,1132,1133,1212,1222,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1133,1212,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1128,1129,1130,1131,1132,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,289,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,856,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,989,990,991,992,993,994,995,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,989,990,991,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,988,989,990,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,989,991,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,991,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,1436,1437,1438,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,1436,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,170,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,170,171,172,173,174,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,166,169,304,320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,169,170,304,320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,166,170,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,504,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,505,506,507,508,509,510,511,512,513,514,515,516,517,518,1462,1719],[56,70,74,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,70,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,65,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,67,70,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,65,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,1462,1719],[56,62,63,66,69,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,70,77,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,62,68,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,70,91,92,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,66,70,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,1462,1719],[56,91,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,1462,1719],[56,64,65,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,1462,1719],[56,64,65,66,67,68,69,70,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,92,93,94,95,96,97,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,70,85,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,70,77,78,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,68,70,78,79,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,69,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,62,65,70,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,70,74,78,79,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,74,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,68,70,73,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,62,67,70,77,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1719],[56,65,70,91,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,290,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,290,292,295,296,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,292,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,259,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,250,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,250,253,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,245,248,250,251,252,253,254,255,256,257,258,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,184,186,253,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,250,251,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,185,250,252,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,186,188,190,191,192,193,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,188,190,192,193,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,188,190,192,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,185,188,190,191,193,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,184,186,187,188,189,190,191,192,193,194,195,245,246,247,248,249,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,184,186,187,190,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,186,187,190,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,190,193,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,184,185,187,188,189,191,192,193,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,184,185,186,190,250,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,190,191,192,193,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,192,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,317,320,1460,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,304,457,458,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,500,501,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,287,288,298,304,320,342,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,285,288,298,304,343,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,272,278,285,304,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,287,288,298,304,389,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,503,521,522,523,526,527,528,529,530,531,532,533,534,535,536,537,538,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,304,519,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,320,343,448,500,501,520,521,541,542,543,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,304,519,520,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,522,542,543,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,520,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,523,541,542,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,501,526,528,541,542,543,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,343,519,520,524,525,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,527,541,542,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,528,541,542,543,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,530,541,542,543,550,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,288,304,343,519,520,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,531,541,542,543,552,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,532,541,542,554,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,533,541,542,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,519,520,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,534,541,542,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,535,541,542,558,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,288,304,519,520,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,536,541,542,543,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,520,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,500,501,537,541,542,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,320,343,448,500,501,520,538,541,542,543,562,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,261,280,304,322,448,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,183,280,304,343,448,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,169,181,280,288,304,305,307,318,320,343,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,280,285,288,298,304,309,343,346,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,304,501,567,776,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,298,304,316,568,775,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,298,304,774,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,298,304,387,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,165,285,298,304,780,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,465,500,501,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,169,280,285,298,300,304,306,307,310,311,318,320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,519,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,343,390,439,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,541,542,786,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,482,785,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,287,304,501,542,788,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,287,298,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,343,790,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,459,790,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,288,298,300,304,310,343,793,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,983,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,288,298,304,438,791,792,794,984,985,986,997,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,305,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,343,460,471,790,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,343,460,471,790,798,987,996,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,288,298,304,343,459,471,790,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,298,304,501,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,288,293,294,297,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,494,500,501,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,298,304,320,343,441,442,443,444,445,454,455,473,474,475,476,477,478,479,480,483,484,485,486,487,488,489,490,491,492,493,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,320,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,298,304,320,343,447,449,450,452,453,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,320,343,472,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,320,471,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,320,343,449,471,472,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,320,343,471,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,320,343,453,472,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,320,343,482,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,320,343,453,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,304,320,343,452,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,320,322,343,450,453,471,472,481,482,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,302,304,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,302,304,343,500,501,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,304,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,288,298,304,307,343,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,285,288,298,301,303,304,305,343,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,322,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,261,280,298,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,342,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,342,972,973,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,305,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,304,321,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,321,501,811,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,321,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,304,320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,810,973,1008,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,308,343,462,500,501,541,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,452,461,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,287,298,304,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,308,309,340,342,343,500,501,983,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,298,304,305,309,321,342,343,795,825,981,982,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,308,343,448,500,501,541,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,288,298,304,306,343,446,447,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,343,449,500,501,541,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,307,343,448,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,469,500,501,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,299,304,308,343,461,467,468,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,501,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,298,304,343,461,463,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,541,776,1008,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,288,298,304,317,439,785,810,973,982,1006,1007,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,298,304,321,322,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,322,446,447,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,500,501,979,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,322,450,500,501,541,542,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,309,322,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,501,810,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,299,304,305,321,322,342,343,449,462,464,470,785,810,825,973,974,977,981,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,321,322,342,343,450,973,978,979,980,983,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,287,304,501,541,980,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,287,304,321,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,501,976,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,343,500,501,541,974,977,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,287,298,304,307,322,343,448,456,975,976,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,776,778,810,973,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,343,470,500,501,541,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,299,304,343,465,466,469,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,826,832,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,826,836,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,323,500,501,541,542,796,799,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,320,321,322,323,342,796,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,320,323,342,810,936,939,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,324,500,501,541,542,796,800,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,320,321,322,324,342,796,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,320,324,342,810,936,939,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,325,500,501,541,542,796,801,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,320,321,322,325,342,796,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,320,325,342,810,936,939,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,299,304,562,810,939,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,326,500,501,541,796,802,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,304,320,321,322,326,342,796,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,320,326,342,810,936,939,943,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,322,338,501,542,796,804,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,321,322,338,342,796,797,798,803,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,322,338,501,542,796,805,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,298,304,338,342,343,459,803,810,945,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,322,338,501,542,796,806,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,304,321,322,338,342,796,797,798,803,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,322,338,501,542,796,807,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,285,298,304,338,460,810,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,338,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,500,501,827,831,1035,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,299,304,460,827,829,830,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,343,500,501,541,808,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,183,280,304,321,322,339,342,796,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,500,501,832,1035,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,339,342,460,827,828,829,831,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,298,304,308,343,500,501,828,1035,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,285,298,304,343,460,810,827,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,500,501,827,835,1035,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,299,304,460,827,829,834,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,343,500,501,541,809,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,500,501,836,1035,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,339,342,460,827,828,829,835,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,460,500,501,542,810,829,1035,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,288,298,304,388,460,810,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,298,304,343,810,844,936,938,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,937,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,299,304,467,810,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,308,321,343,500,501,541,542,812,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,321,322,340,342,343,797,798,810,811,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,308,501,810,948,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,278,280,285,288,298,304,340,342,810,947,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,500,501,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,304,321,322,341,342,796,797,798,811,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,501,541,810,951,1047,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,341,342,810,950,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,299,304,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,304,342,799,800,801,802,804,805,806,807,808,809,812,813,814,815,816,817,818,819,820,821,822,823,824,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,340,342,810,948,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,341,342,951,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,327,500,501,541,814,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,304,320,321,322,327,342,797,798,811,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,327,501,541,810,953,1047,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,320,327,342,810,950,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,328,500,501,541,815,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,304,320,321,322,328,342,796,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,500,501,541,956,1047,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,298,304,320,328,342,810,955,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,299,304,329,562,810,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,329,500,501,541,816,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,304,320,321,322,329,342,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,274,298,304,329,501,541,810,960,1047,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,298,304,320,329,342,810,958,959,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,330,343,500,501,541,817,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,321,322,330,342,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,500,501,541,961,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,298,304,330,342,810,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,288,298,304,320,321,322,331,342,793,797,798,983,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,280,298,304,331,342,810,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,340,342,948,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,500,501,830,966,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,299,304,830,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,321,322,333,342,797,798,819,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,500,501,541,967,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,288,298,304,333,342,810,811,965,966,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,321,332,343,450,500,501,541,542,819,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,304,321,322,332,342,343,450,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,501,965,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,280,298,304,332,342,779,810,964,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,500,501,541,822,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,320,321,322,335,342,797,798,821,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,501,541,969,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,298,304,320,335,342,810,968,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,334,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,500,501,541,821,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,304,321,322,334,342,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,501,541,968,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,298,304,334,342,810,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,500,501,541,542,823,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,304,321,322,336,342,797,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,308,501,541,970,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,298,304,336,342,810,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,308,343,500,501,541,824,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,304,321,322,337,342,343,540,798,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,501,541,971,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,280,298,304,337,342,810,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,833,837,838,839,840,940,941,942,944,946,949,952,953,954,956,960,961,962,963,965,967,968,969,970,971,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,304,438,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,438,972,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,298,304,305,438,439,440,810,973,982,1006,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,343,482,500,501,541,542,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,448,449,462,464,470,481,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,304,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,343,450,472,500,501,541,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,305,322,343,446,447,448,450,456,471,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1074,1075,1076,1077,1078,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1075,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1074,1075,1078,1079,1081,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1075,1079,1080,1083,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1080,1083,1084,1085,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1078,1080,1081,1082,1084,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1075,1077,1079,1080,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1074,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1080,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1079,1084,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,541,1087,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,285,288,298,304,305,307,343,1086,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,288,298,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,165,175,176,272,280,281,284,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,310,343,500,501,541,1089,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,310,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,310,343,500,501,541,1092,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,1089,1091,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,542,1094,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,304,307,310,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,308,310,343,452,500,501,541,542,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,298,301,304,309,310,343,451,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,301,302,304,343,452,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,460,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,298,304,310,343,344,345,347,388,440,460,494,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,936,1100,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1099,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1099,1103,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,936,1106,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,936,1105,1106,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1099,1105,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1099,1109,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,936,1112,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,936,1111,1112,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1099,1111,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1099,1115,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,936,1118,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,936,1117,1118,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1099,1117,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,936,1122,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,936,1121,1122,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1099,1121,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,1124,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,781,782,1124,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,310,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,345,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,343,1124,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,1359,1434,1442,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,285,288,298,304,307,309,310,343,462,463,471,790,1072,1094,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,320,1098,1359,1434,1442,1443,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,304,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,288,298,304,344,1124,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,471,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,305,343,470,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,481,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,343,453,471,472,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,471,481,1455,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,288,298,304,343,346,1124,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,317,343,500,501,567,1462,1482,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,288,298,304,316,317,343,1460,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,286,298,304,316,1462,1608,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,304,501,567,1462,1610,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,169,175,298,304,320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,287,288,298,304,316,390,1462,1483,1485,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,169,280,285,298,304,317,320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,501,567,1462,1612,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,169,285,304,320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,304,316,565,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,287,288,298,304,308,343,500,501,541,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,285,287,288,298,303,304,305,316,317,343,462,464,471,481,482,975,1462,1488,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,1035,1462,1492,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,285,288,298,304,305,320,343,460,1462,1490,1491,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,304,343,500,501,1462,1492,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,285,288,298,304,305,307,316,343,781,782,1462,1492,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,317,500,501,567,1462,1494,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,304,316,318,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,304,343,500,501,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,280,285,288,298,304,305,316,318,343,1462,1494,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,304,501,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,304,316,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,304,343,501,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,316,318,319,343,1462,1497,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,784,1462,1497,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,1462,1498,1499,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,318,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,343,500,501,541,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,288,298,304,305,316,318,343,1087,1462,1501,1503,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,541,542,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,278,280,288,298,304,316,317,318,343,797,812,1087,1462,1504,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,310,343,500,501,541,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,304,310,316,318,343,1087,1462,1506,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,316,318,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,343,500,501,541,542,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,287,288,304,305,307,316,318,343,565,1087,1462,1497,1501,1502,1505,1507,1509,1511,1515,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,318,343,1462,1501,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,500,501,541,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,318,343,1462,1508,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,298,304,310,316,318,343,1462,1510,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,298,304,305,307,316,318,343,451,452,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,304,307,316,318,343,463,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,304,305,316,318,343,463,1087,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,500,501,541,542,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,307,316,318,1462,1512,1513,1514,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,288,304,316,318,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,501,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,316,318,1462,1516,1517,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,304,501,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,304,316,1462,1500,1518,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,541,1462,1606,1616,1636,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,285,286,288,298,304,305,316,317,973,983,1008,1009,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,305,316,317,318,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,500,501,541,542,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,181,280,285,288,298,304,305,307,316,317,318,343,439,786,973,1462,1521,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,288,304,316,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,501,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,1462,1487,1489,1493,1495,1496,1519,1520,1522,1523,1526,1527,1529,1532,1533,1574,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,298,304,305,316,318,343,482,1462,1524,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,1462,1525,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,285,288,304,305,316,317,1087,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,288,298,304,316,790,1462,1528,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,316,317,318,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,541,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,278,280,288,304,305,310,316,318,343,977,1462,1530,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,1462,1531,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,388,501,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,317,388,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,500,501,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,288,298,304,305,316,318,343,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,343,500,501,541,776,778,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,286,298,304,305,316,318,343,776,778,1462,1535,1537,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,285,298,304,305,316,318,343,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,318,319,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,304,316,318,343,784,812,951,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,307,316,318,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,1462,1540,1541,1542,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,304,310,316,318,343,1462,1501,1506,1535,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,304,310,316,318,343,1087,1462,1544,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,304,316,318,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,500,501,541,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,278,280,288,298,304,305,306,307,316,318,343,812,1087,1462,1547,1548,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,288,301,304,305,306,307,316,318,343,565,1462,1501,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,287,304,308,343,500,501,541,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,287,288,298,304,305,316,318,343,565,1462,1488,1501,1535,1545,1546,1549,1550,1551,1552,1553,1554,1555,1558,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,307,316,318,343,1087,1462,1548,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,316,318,343,977,1087,1462,1501,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,500,501,542,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,280,298,304,305,316,318,343,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,310,343,500,501,541,542,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,280,288,304,305,316,318,343,1089,1091,1092,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,310,316,318,1462,1510,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,310,343,500,501,541,543,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,285,298,301,304,307,316,318,343,452,463,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,500,501,541,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,298,301,304,305,316,318,343,463,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,307,310,316,318,343,452,463,1462,1556,1557,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,181,280,285,288,304,316,318,343,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,169,175,280,304,316,318,320,338,343,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,176,288,304,316,318,343,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,501,567,1462,1563,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,288,298,304,305,316,318,343,460,826,827,1462,1535,1563,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,318,343,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,304,316,318,343,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,1462,1561,1562,1564,1565,1566,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,287,304,343,500,501,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,304,305,316,318,343,788,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,305,316,317,318,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,500,501,542,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,287,304,316,318,343,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,541,776,778,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,287,288,304,343,500,501,1462,1492,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,280,285,287,288,298,304,305,306,316,318,343,565,781,782,1462,1492,1534,1535,1536,1538,1539,1543,1559,1560,1567,1568,1569,1570,1571,1572,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,343,500,501,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,305,316,318,343,1462,1535,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,500,501,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,304,305,316,343,1087,1462,1573,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,541,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,317,1009,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,501,567,1462,1578,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,500,501,541,1462,1579,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,316,317,318,343,1462,1579,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,285,288,298,304,316,317,331,343,467,1009,1462,1578,1580,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,343,500,501,541,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,288,304,316,317,973,1008,1009,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,304,308,343,500,501,541,1462,1606,1616,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,280,288,298,304,316,317,343,467,779,964,965,1009,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,1462,1584,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,316,317,343,779,964,1009,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,304,308,343,500,501,541,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,317,336,343,467,970,1009,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,305,316,317,1462,1482,1576,1577,1581,1582,1583,1585,1586,1590,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,343,500,501,541,776,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,176,280,285,286,298,304,316,317,318,343,540,776,778,811,1009,1462,1587,1588,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,343,500,501,1462,1588,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,183,280,288,298,304,343,540,1462,1548,1587,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,1462,1589,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,304,316,1462,1482,1486,1575,1591,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,288,298,304,316,317,390,1460,1462,1464,1480,1481,1592,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,175,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,390,439,543,1462,1606,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,500,1462,1605,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,320,541,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,1462,1593,1605,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,459,460,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,316,566,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,298,304,343,344,499,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,1462,1593,1605,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,498,501,1462,1681,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,304,308,322,328,330,332,334,335,336,343,540,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,305,343,470,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,298,304,305,308,343,446,449,453,462,464,470,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,343,456,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,461,465,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,501,1462,1537,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,307,343,500,501,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,298,304,343,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,285,304,459,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,308,310,343,500,501,541,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,285,298,304,307,308,309,343,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,304,501,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,285,286,287,298,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,298,304,501,541,950,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,288,298,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,298,304,343,810,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,181,280,304,343,1462,1718,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,298,304,321,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,287,304,343,1462,1502,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,304,310,343,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,308,316,317,320,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,343,471,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,304,343,500,501,975,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,288,304,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,169,280,304,319,1460,1461,1462,1719],[56,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,280,304,305,343,346,500,501,542,1462,1719]],"options":{"allowJs":true,"allowImportingTsExtensions":true,"composite":true,"declaration":true,"declarationMap":true,"jsx":4,"module":7,"noFallthroughCasesInSwitch":true,"outDir":"./js","rootDir":"./src","skipLibCheck":true,"strict":true,"sourceMap":true,"target":7,"tsBuildInfoFile":"./.tsbuildinfo","useDefineForClassFields":true},"referencedMap":[[262,1],[266,2],[265,3],[830,3],[550,3],[554,4],[552,3],[558,3],[834,3],[562,3],[275,5],[277,6],[274,6],[263,7],[272,8],[276,5],[280,9],[278,10],[279,5],[271,11],[177,6],[268,12],[182,13],[261,6],[270,14],[178,6],[269,15],[183,16],[179,5],[267,6],[264,17],[273,18],[1433,19],[1434,20],[1360,21],[1404,22],[1403,6],[1409,23],[1423,23],[1401,23],[1406,24],[1405,6],[1127,6],[1393,25],[1389,26],[1431,27],[1415,28],[1363,29],[1427,25],[1376,25],[1381,30],[1417,31],[1414,32],[1362,6],[1372,6],[1369,29],[1371,29],[1408,29],[1383,29],[1430,29],[1370,30],[1416,33],[1373,34],[1428,35],[1422,36],[1395,35],[1396,37],[1378,23],[1375,38],[1386,39],[1411,36],[1365,40],[1364,6],[1367,23],[1418,25],[1402,25],[1377,23],[1368,30],[1397,41],[1413,42],[1390,43],[1392,44],[1410,23],[1419,23],[1420,45],[1399,23],[1384,23],[1400,23],[1361,23],[1387,23],[1407,23],[1424,23],[1398,23],[1432,46],[1374,30],[1412,47],[1425,30],[1426,48],[1391,49],[1379,23],[1385,29],[1388,50],[1429,51],[1394,51],[1366,23],[1421,23],[1380,30],[1382,52],[759,53],[757,54],[758,55],[665,55],[666,55],[667,55],[668,55],[669,55],[670,55],[671,55],[672,55],[673,55],[674,55],[675,55],[676,55],[677,55],[678,55],[679,55],[680,55],[681,55],[682,55],[684,55],[683,55],[685,55],[686,55],[687,55],[688,55],[689,55],[690,55],[691,55],[692,55],[693,55],[694,55],[695,55],[696,55],[697,55],[698,55],[699,55],[700,55],[701,55],[702,55],[703,55],[704,55],[705,55],[706,55],[707,55],[708,55],[709,55],[710,55],[711,55],[712,55],[713,55],[714,55],[715,55],[716,55],[717,55],[718,55],[719,55],[720,55],[721,55],[724,55],[722,55],[723,55],[725,55],[726,55],[727,55],[728,55],[729,55],[730,55],[731,55],[732,55],[733,55],[734,55],[735,55],[736,55],[737,55],[738,55],[739,55],[740,55],[741,55],[742,55],[743,55],[744,55],[745,56],[746,55],[747,55],[748,55],[749,55],[750,55],[752,57],[753,58],[754,59],[755,58],[756,59],[760,60],[774,61],[761,62],[601,63],[751,64],[762,65],[763,66],[764,67],[765,68],[773,69],[769,70],[770,70],[771,71],[772,71],[608,72],[609,72],[612,73],[611,74],[610,75],[622,76],[613,72],[615,77],[614,75],[617,78],[616,6],[618,79],[619,79],[620,80],[621,81],[623,75],[624,82],[625,72],[626,72],[628,83],[631,84],[630,85],[627,75],[632,86],[633,75],[636,87],[637,88],[635,89],[638,6],[639,90],[640,6],[644,91],[641,75],[642,75],[643,92],[634,75],[654,93],[656,94],[655,95],[657,75],[659,96],[658,97],[606,98],[602,63],[604,99],[605,75],[607,100],[662,101],[660,75],[661,75],[664,102],[663,6],[603,6],[645,75],[652,75],[646,75],[647,75],[648,75],[653,103],[649,75],[651,75],[650,75],[587,75],[588,75],[589,6],[590,6],[591,6],[592,6],[593,6],[594,6],[595,6],[600,104],[596,6],[597,6],[598,6],[599,6],[569,6],[576,105],[575,106],[577,107],[578,6],[579,108],[571,109],[586,110],[570,6],[574,111],[580,112],[572,6],[582,113],[583,114],[584,115],[581,6],[573,108],[585,109],[629,6],[767,116],[768,117],[766,75],[922,118],[841,6],[926,6],[843,119],[919,120],[920,121],[846,6],[850,122],[848,123],[896,124],[895,125],[897,126],[898,127],[847,6],[851,6],[844,6],[845,6],[908,6],[916,6],[935,128],[929,129],[924,130],[882,131],[903,131],[881,131],[859,131],[885,132],[869,133],[866,6],[867,134],[860,131],[863,135],[862,136],[894,137],[865,131],[870,138],[871,131],[875,139],[876,131],[877,140],[878,131],[879,139],[880,131],[888,141],[889,131],[891,142],[892,131],[893,138],[886,132],[874,143],[873,144],[872,131],[887,145],[884,146],[883,132],[868,131],[890,133],[861,131],[902,131],[905,147],[904,148],[936,149],[934,150],[928,151],[930,152],[927,153],[910,154],[931,155],[923,156],[915,157],[842,6],[917,158],[912,159],[911,160],[925,161],[932,162],[933,155],[918,163],[899,164],[913,165],[914,166],[909,167],[921,168],[864,6],[900,169],[907,170],[906,171],[901,172],[849,6],[858,173],[855,174],[852,6],[1491,6],[315,175],[180,176],[780,176],[1462,177],[314,176],[1595,6],[1483,178],[169,179],[1460,178],[316,180],[498,176],[1099,6],[312,6],[1594,6],[568,176],[181,181],[1608,178],[100,182],[101,183],[102,184],[56,185],[103,186],[104,187],[105,188],[51,6],[54,189],[52,6],[53,6],[106,190],[107,191],[108,192],[109,193],[110,194],[111,195],[112,196],[113,197],[114,198],[115,199],[116,200],[57,6],[55,6],[117,201],[118,202],[119,203],[151,204],[120,205],[121,206],[122,207],[123,208],[124,209],[125,210],[126,211],[127,212],[128,213],[129,214],[130,215],[131,216],[132,217],[133,218],[135,219],[134,220],[136,221],[137,222],[138,223],[139,224],[140,225],[141,226],[142,227],[143,228],[144,229],[145,230],[146,231],[147,232],[148,233],[58,6],[59,6],[60,6],[99,234],[149,235],[150,236],[165,237],[152,176],[159,238],[155,239],[153,240],[156,241],[160,238],[161,238],[158,242],[157,243],[162,244],[163,245],[164,238],[154,246],[1442,247],[1441,248],[1440,247],[48,6],[168,6],[167,6],[1485,249],[1484,178],[46,6],[49,250],[50,251],[389,176],[499,252],[294,6],[372,253],[373,254],[349,255],[352,256],[370,253],[371,253],[361,253],[360,257],[358,253],[353,253],[366,253],[364,253],[368,253],[348,253],[365,253],[369,253],[354,253],[355,253],[367,253],[350,253],[356,253],[357,253],[359,253],[363,253],[374,258],[362,253],[351,253],[387,259],[386,6],[381,258],[383,260],[382,258],[375,258],[376,258],[378,258],[380,258],[384,260],[385,260],[377,260],[379,260],[313,261],[1604,262],[1596,6],[1599,263],[1602,176],[1603,264],[1597,262],[1600,265],[1601,176],[1598,266],[1605,267],[289,6],[44,6],[45,6],[9,6],[8,6],[2,6],[10,6],[11,6],[12,6],[13,6],[14,6],[15,6],[16,6],[17,6],[3,6],[18,6],[19,6],[4,6],[20,6],[24,6],[21,6],[22,6],[23,6],[25,6],[26,6],[27,6],[5,6],[28,6],[29,6],[30,6],[31,6],[6,6],[35,6],[32,6],[33,6],[34,6],[36,6],[7,6],[37,6],[42,6],[43,6],[38,6],[39,6],[40,6],[41,6],[1,6],[293,268],[300,6],[61,6],[426,269],[429,176],[431,270],[432,271],[425,272],[418,273],[419,274],[427,275],[417,6],[423,276],[428,277],[416,278],[420,279],[430,280],[424,281],[421,6],[422,282],[434,283],[433,284],[435,6],[436,285],[438,286],[391,6],[392,6],[393,6],[395,287],[396,176],[400,288],[412,289],[401,290],[397,284],[402,6],[394,6],[403,291],[404,290],[399,292],[405,293],[406,6],[398,6],[407,6],[408,6],[410,294],[409,295],[411,296],[413,6],[415,297],[414,298],[437,278],[1124,6],[47,6],[957,176],[958,299],[1464,300],[309,6],[1480,301],[1465,176],[1466,6],[1467,6],[1468,6],[1469,6],[1470,6],[1471,6],[1472,6],[1473,6],[1474,6],[1475,6],[1476,6],[1477,6],[1478,6],[1479,6],[987,6],[284,302],[282,6],[283,6],[1215,6],[1324,303],[1216,304],[1217,305],[1343,306],[1344,6],[1345,307],[1346,308],[1347,309],[1348,310],[1336,311],[1331,312],[1332,313],[1333,314],[1335,309],[1334,315],[1330,311],[1337,312],[1339,316],[1338,317],[1329,309],[1328,318],[1342,311],[1325,312],[1326,319],[1327,320],[1341,309],[1340,321],[1218,312],[1213,322],[1321,323],[1214,324],[1323,325],[1322,326],[1241,327],[1291,328],[1272,329],[1253,330],[1185,331],[1359,332],[1307,333],[1350,334],[1349,304],[1144,335],[1153,336],[1157,337],[1259,338],[1175,339],[1148,340],[1158,341],[1250,339],[1234,339],[1264,342],[1318,339],[1136,343],[1143,344],[1137,343],[1201,339],[1180,345],[1181,346],[1152,347],[1160,348],[1161,343],[1162,349],[1164,350],[1193,351],[1225,339],[1313,339],[1138,339],[1209,352],[1145,353],[1154,343],[1156,354],[1194,343],[1195,355],[1196,356],[1197,356],[1187,357],[1190,358],[1149,359],[1165,339],[1315,339],[1139,339],[1166,339],[1167,360],[1168,339],[1135,339],[1205,361],[1170,362],[1268,363],[1266,339],[1267,364],[1269,365],[1171,339],[1312,339],[1317,339],[1200,366],[1155,335],[1172,339],[1202,367],[1203,368],[1169,339],[1184,339],[1355,369],[1319,369],[1134,6],[1235,339],[1251,339],[1173,339],[1174,370],[1198,339],[1258,371],[1252,339],[1256,372],[1257,373],[1150,374],[1206,339],[1210,375],[1147,339],[1177,376],[1142,377],[1146,353],[1204,378],[1140,343],[1176,339],[1183,339],[1192,379],[1179,380],[1188,339],[1178,381],[1141,356],[1191,339],[1316,339],[1314,339],[1151,374],[1207,382],[1208,339],[1163,339],[1189,339],[1292,383],[1199,339],[1159,339],[1182,384],[1238,385],[1255,386],[1226,387],[1223,388],[1273,389],[1244,390],[1293,391],[1240,392],[1243,393],[1260,394],[1274,395],[1295,396],[1242,397],[1248,398],[1233,399],[1271,400],[1358,401],[1294,402],[1236,403],[1303,404],[1351,405],[1352,405],[1220,406],[1354,405],[1353,405],[1262,407],[1265,408],[1302,409],[1300,410],[1129,6],[1263,411],[1247,412],[1299,413],[1128,6],[1239,414],[1270,415],[1304,416],[1132,6],[1246,417],[1297,418],[1298,419],[1261,420],[1296,421],[1232,422],[1254,423],[1301,424],[1130,6],[1245,425],[1212,426],[1320,427],[1211,428],[1305,429],[1310,430],[1311,431],[1309,432],[1284,433],[1221,434],[1285,435],[1308,436],[1227,437],[1230,438],[1275,439],[1277,440],[1231,441],[1228,441],[1224,442],[1278,443],[1279,444],[1280,445],[1288,446],[1286,447],[1281,448],[1282,449],[1283,450],[1289,451],[1287,452],[1229,453],[1290,454],[1276,455],[1237,456],[1222,322],[1186,457],[1356,458],[1357,6],[1306,459],[1219,6],[1249,6],[1131,6],[1133,460],[290,461],[857,462],[856,6],[304,463],[1502,176],[996,464],[992,465],[991,466],[990,467],[993,465],[989,6],[994,468],[995,468],[988,6],[566,178],[1439,469],[1436,176],[1438,470],[1437,6],[1435,6],[1463,6],[854,174],[853,6],[174,471],[166,6],[175,472],[172,471],[170,473],[173,474],[171,475],[506,6],[514,6],[518,6],[510,6],[512,6],[507,6],[515,6],[513,6],[517,6],[511,476],[516,6],[505,476],[508,476],[509,476],[519,477],[504,6],[291,6],[77,478],[87,479],[76,478],[97,480],[68,481],[67,6],[96,176],[90,482],[95,481],[70,483],[84,484],[69,485],[93,486],[65,487],[64,176],[94,488],[66,489],[71,479],[72,6],[75,479],[62,6],[98,490],[88,491],[79,492],[80,493],[82,494],[78,495],[81,496],[91,176],[73,497],[74,498],[83,499],[63,6],[86,491],[85,479],[89,6],[92,500],[292,501],[297,502],[295,176],[296,503],[260,504],[254,505],[258,506],[255,506],[251,505],[259,507],[256,508],[257,506],[252,509],[253,510],[247,511],[191,512],[193,513],[246,6],[192,514],[250,515],[249,516],[248,517],[184,6],[194,512],[195,6],[186,518],[190,519],[185,6],[187,520],[188,521],[189,6],[196,522],[197,522],[198,522],[199,522],[200,522],[201,522],[202,522],[203,522],[204,522],[205,522],[206,522],[207,522],[208,522],[210,522],[209,522],[211,522],[212,522],[213,522],[214,522],[245,523],[215,522],[216,522],[217,522],[218,522],[219,522],[220,522],[221,522],[222,522],[223,522],[224,522],[225,522],[226,522],[227,522],[229,522],[228,522],[230,522],[231,522],[232,522],[233,522],[234,522],[235,522],[236,522],[237,522],[238,522],[239,522],[240,522],[241,522],[244,522],[242,522],[243,522],[1461,524],[1718,525],[1719,526],[458,6],[459,527],[457,176],[501,176],[308,6],[281,176],[955,6],[497,6],[502,528],[343,529],[344,530],[346,531],[345,532],[390,533],[539,534],[520,535],[544,536],[521,537],[545,538],[522,539],[546,540],[523,537],[547,541],[526,542],[548,543],[527,537],[549,544],[528,537],[529,537],[551,545],[530,546],[553,547],[531,537],[555,548],[532,537],[556,549],[533,550],[557,551],[534,537],[559,552],[535,553],[560,554],[536,555],[561,556],[537,539],[563,557],[538,537],[503,558],[524,559],[564,560],[525,561],[565,562],[347,563],[777,564],[776,565],[775,566],[778,561],[779,6],[301,6],[286,6],[317,6],[287,6],[540,6],[388,567],[781,568],[782,569],[783,570],[465,571],[319,572],[784,573],[440,574],[787,575],[786,576],[789,577],[788,578],[791,579],[792,580],[794,581],[984,582],[999,583],[985,584],[986,585],[997,586],[998,587],[1000,588],[298,589],[1001,590],[494,591],[441,592],[442,592],[443,592],[444,592],[445,592],[454,593],[455,592],[473,594],[474,594],[475,595],[476,596],[477,592],[478,592],[479,597],[480,598],[483,599],[484,599],[485,599],[1002,599],[486,592],[487,599],[488,592],[489,592],[1003,592],[1004,592],[490,600],[491,592],[492,601],[493,602],[303,603],[1005,604],[302,605],[793,606],[306,607],[468,561],[466,561],[446,608],[456,561],[299,609],[321,610],[1006,611],[974,612],[796,613],[1011,614],[811,615],[322,616],[1009,617],[1012,618],[462,619],[785,620],[1013,621],[983,622],[1014,623],[448,624],[1015,625],[449,626],[1016,627],[469,628],[1017,629],[464,630],[1010,631],[1008,632],[447,633],[1018,629],[978,634],[1019,635],[979,571],[1020,636],[450,637],[1021,638],[810,6],[982,639],[1022,629],[981,640],[1023,641],[980,642],[1024,643],[976,6],[1025,644],[977,645],[1007,646],[1026,647],[470,648],[833,649],[837,650],[838,649],[839,650],[840,650],[1027,651],[799,652],[940,653],[323,6],[1028,654],[800,655],[941,656],[324,6],[1029,657],[801,658],[942,659],[325,6],[943,660],[1030,661],[802,662],[944,663],[326,6],[1031,664],[804,665],[1032,666],[805,665],[946,667],[1033,668],[806,669],[1034,670],[807,669],[945,671],[338,561],[803,672],[1038,673],[831,674],[1039,675],[808,676],[1040,677],[832,678],[1036,679],[828,680],[1041,681],[835,682],[1042,683],[809,676],[1043,684],[836,685],[1037,686],[829,687],[339,561],[827,569],[939,688],[937,6],[938,689],[947,690],[1044,691],[812,692],[1045,693],[948,694],[340,561],[1046,695],[813,696],[1048,697],[951,698],[341,561],[342,699],[825,700],[949,701],[952,702],[1049,703],[814,704],[1050,705],[953,706],[327,6],[954,702],[1051,707],[815,708],[1052,709],[956,710],[328,561],[959,711],[1053,712],[816,713],[1054,714],[960,715],[329,6],[1055,716],[817,717],[1056,718],[961,719],[330,561],[818,720],[962,721],[331,561],[963,722],[1059,723],[966,724],[1060,629],[820,725],[1061,726],[967,727],[333,561],[1057,728],[819,729],[1058,730],[965,731],[332,561],[1064,732],[822,733],[1065,734],[969,735],[335,736],[1062,737],[821,738],[1063,739],[968,740],[334,561],[1066,741],[823,742],[1067,743],[970,744],[336,561],[1068,745],[824,746],[1069,747],[971,748],[337,561],[972,749],[439,750],[973,751],[1070,752],[1071,753],[482,754],[1072,755],[1073,756],[472,757],[1079,758],[1076,759],[1082,760],[1084,761],[1086,762],[1083,763],[1077,759],[1074,6],[1081,764],[1075,765],[1078,6],[1085,766],[1080,767],[1088,768],[1087,769],[790,770],[285,771],[1090,772],[1089,773],[1091,571],[1093,774],[1092,775],[1095,776],[1094,777],[451,778],[1096,779],[452,780],[463,781],[1097,6],[1098,561],[461,782],[495,783],[496,6],[1101,784],[1694,784],[1100,785],[1695,785],[1102,6],[1696,6],[1103,785],[1697,785],[1104,6],[1698,6],[1105,786],[1699,786],[1107,787],[1700,788],[1106,789],[1701,789],[1108,6],[1702,6],[1109,785],[1703,785],[1110,6],[1704,6],[1111,790],[1705,790],[1113,791],[1706,792],[1112,793],[1707,793],[1114,6],[1708,6],[1115,785],[1709,785],[1116,6],[1710,6],[1117,794],[1711,794],[1119,795],[1712,796],[1118,797],[1713,797],[1120,6],[1714,6],[1121,785],[1715,785],[1123,798],[1716,799],[1122,800],[1717,800],[1125,801],[1450,802],[1451,803],[1126,804],[1452,805],[1443,806],[1444,807],[1445,584],[1446,808],[1447,809],[1448,810],[1453,811],[1454,812],[1455,813],[1456,814],[1457,815],[1458,816],[1459,812],[1449,817],[1607,818],[1482,819],[1609,820],[1611,821],[1610,822],[1486,823],[1481,824],[1613,825],[1612,178],[1576,826],[1614,827],[1487,828],[1617,829],[1489,830],[1618,831],[1492,832],[1619,833],[1493,834],[1620,835],[1494,836],[1621,837],[1495,838],[1622,839],[1496,840],[1624,841],[1498,842],[1499,843],[1500,844],[1503,845],[1628,846],[1504,847],[1627,848],[1505,849],[1506,845],[1629,850],[1507,851],[1497,852],[1626,853],[1516,854],[1508,855],[1630,856],[1509,857],[1510,845],[1631,846],[1511,858],[1633,846],[1512,859],[1634,846],[1513,860],[1635,846],[1514,861],[1632,862],[1515,863],[1517,864],[1625,865],[1518,866],[1623,867],[1519,868],[1637,869],[1520,870],[1521,871],[1638,872],[1522,873],[1639,874],[1523,875],[1615,876],[1575,877],[1524,871],[1640,872],[1525,878],[1526,879],[1641,862],[1527,880],[1529,881],[1530,882],[1642,883],[1531,884],[1532,885],[1643,886],[1533,887],[1646,888],[1536,889],[1647,890],[1538,891],[1539,892],[1540,893],[1541,894],[1542,895],[1543,896],[1649,850],[1544,897],[1545,898],[1546,899],[1650,900],[1549,901],[1651,872],[1550,902],[1648,903],[1559,904],[1652,862],[1551,905],[1653,900],[1552,906],[1654,907],[1553,908],[1655,909],[1554,910],[1656,850],[1555,911],[1658,912],[1556,913],[1659,914],[1557,915],[1657,846],[1558,916],[1660,629],[1560,917],[1561,918],[1661,888],[1562,919],[1662,920],[1563,178],[1663,921],[1564,922],[1664,888],[1565,923],[1566,924],[1567,925],[1665,926],[1568,927],[1535,928],[1666,929],[1569,930],[1667,931],[1570,891],[1645,932],[1573,933],[1571,845],[1668,934],[1572,935],[1644,936],[1574,937],[1669,938],[1577,939],[1670,940],[1578,178],[1672,941],[1579,561],[1673,936],[1580,942],[1671,846],[1581,943],[1674,944],[1582,945],[1675,946],[1583,947],[1585,948],[1676,944],[1584,949],[1677,950],[1586,951],[1591,952],[1678,953],[1589,954],[1587,561],[1679,955],[1588,956],[1590,957],[1592,958],[1593,959],[1636,936],[1680,960],[1681,961],[1616,962],[542,963],[1606,964],[1035,965],[1047,6],[567,966],[500,967],[1682,968],[1683,969],[543,970],[1684,971],[541,972],[1692,973],[471,974],[481,975],[467,976],[1685,977],[1537,6],[1686,978],[307,979],[964,6],[453,980],[460,981],[1687,982],[310,983],[1528,970],[1688,984],[288,985],[1689,986],[950,987],[176,960],[826,988],[795,777],[797,989],[1547,560],[311,560],[798,990],[1693,991],[1534,992],[318,993],[1488,994],[1548,605],[1690,995],[975,560],[1501,996],[320,997],[1490,6],[1691,998],[305,620]],"semanticDiagnosticsPerFile":[[323,[{"pos":42,"end":76,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/chunithm/user_pb"]}]],[324,[{"pos":42,"end":74,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/maimai/user_pb"]}]],[325,[{"pos":42,"end":74,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/ongeki/user_pb"]}]],[326,[{"pos":33,"end":64,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/wacca/user_pb"]}]],[342,[{"pos":225,"end":263,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/router/ir/usc/_playtype/types"]}]],[446,[{"pos":43,"end":86,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/game-implementations"]},{"pos":706,"end":708,"code":18046,"category":1,"messageKey":"_0_is_of_type_unknown_18046","messageArgs":["fn"]}]],[447,[{"pos":85,"end":113,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":222,"end":265,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/game-implementations"]},{"pos":1303,"end":1305,"code":18046,"category":1,"messageKey":"_0_is_of_type_unknown_18046","messageArgs":["fn"]}]],[448,[{"pos":335,"end":378,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/game-implementations"]}]],[451,[{"pos":43,"end":71,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":341,"end":384,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/game-implementations"]},{"pos":4426,"end":4493,"code":2578,"category":1,"messageKey":"Unused_ts_expect_error_directive_2578"},{"pos":8713,"end":8760,"code":2578,"category":1,"messageKey":"Unused_ts_expect_error_directive_2578"}]],[452,[{"pos":43,"end":71,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":422,"end":465,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/game-implementations"]},{"pos":6811,"end":6860,"code":2578,"category":1,"messageKey":"Unused_ts_expect_error_directive_2578"},{"pos":7879,"end":7940,"code":2578,"category":1,"messageKey":"Unused_ts_expect_error_directive_2578"}]],[456,[{"pos":43,"end":86,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/game-implementations"]}]],[466,[{"pos":43,"end":86,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/game-implementations"]},{"pos":668,"end":670,"code":18046,"category":1,"messageKey":"_0_is_of_type_unknown_18046","messageArgs":["fn"]}]],[468,[{"pos":34,"end":62,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":188,"end":231,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/game-implementations"]}]],[472,[{"pos":5326,"end":5332,"code":2554,"category":1,"messageKey":"Expected_0_arguments_but_got_1_2554","messageArgs":["2","3"]}]],[481,[{"pos":790,"end":796,"code":2554,"category":1,"messageKey":"Expected_0_arguments_but_got_1_2554","messageArgs":["2","3"]}]],[493,[{"pos":858,"end":899,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["scripts/state-sync/recalc-game-profiles"]}]],[495,[{"pos":999,"end":1031,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/router/api/v1/auth/auth"]},{"pos":1052,"end":1067,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/server"]}]],[496,[{"pos":384,"end":398,"code":2300,"category":1,"messageKey":"Duplicate_identifier_0_2300","messageArgs":["ReadableStream"],"relatedInformation":[{"file":136,"pos":22017,"end":22031,"code":6203,"category":3,"messageKey":"_0_was_also_declared_here_6203","messageArgs":["ReadableStream"]},{"file":136,"pos":22083,"end":22097,"code":6204,"category":3,"messageKey":"and_here_6204"}]}]],[500,[{"pos":434,"end":466,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/rate-limiter"]}]],[520,[{"pos":411,"end":439,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":525,"end":562,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":613,"end":654,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":692,"end":733,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":1137,"end":1144,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["exScore","any"]},{"pos":1146,"end":1151,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1717,"end":1722,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["score","any"]},{"pos":1726,"end":1731,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1802,"end":1807,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["score","any"]},{"pos":1811,"end":1816,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":2018,"end":2027,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":2029,"end":2034,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":2376,"end":2377,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":2826,"end":2831,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["score","any"]},{"pos":2944,"end":2953,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":2955,"end":2961,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_chart","any"]},{"pos":3110,"end":3112,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3337,"end":3346,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":3348,"end":3353,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":5592,"end":5601,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":5603,"end":5615,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":5617,"end":5622,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":5801,"end":5804,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":6116,"end":6123,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":6311,"end":6314,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":6504,"end":6508,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":6511,"end":6519,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":6522,"end":6528,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":6683,"end":6690,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":7045,"end":7047,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":7088,"end":7090,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":7123,"end":7125,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":7127,"end":7136,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["goalValue","any"]},{"pos":7420,"end":7424,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":7426,"end":7431,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":7630,"end":7631,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":7814,"end":7815,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":8188,"end":8189,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":8426,"end":8435,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":8437,"end":8442,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":8833,"end":8836,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":8993,"end":8997,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":9000,"end":9008,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":9011,"end":9017,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":9180,"end":9189,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":9192,"end":9204,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":9207,"end":9212,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]}]],[521,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":150,"end":187,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":221,"end":262,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":300,"end":341,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":664,"end":669,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":671,"end":676,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":959,"end":964,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["score","any"]},{"pos":1026,"end":1035,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1037,"end":1043,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_chart","any"]},{"pos":1124,"end":1133,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1135,"end":1147,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":1149,"end":1154,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1253,"end":1255,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1418,"end":1427,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1429,"end":1434,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1516,"end":1519,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":1614,"end":1618,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":1620,"end":1628,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":1630,"end":1636,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":1751,"end":1758,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":2539,"end":2546,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":3170,"end":3172,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3214,"end":3216,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3250,"end":3252,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3254,"end":3264,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":3557,"end":3561,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":3563,"end":3568,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":3691,"end":3692,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":4247,"end":4248,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":4601,"end":4602,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]}]],[522,[{"pos":62,"end":90,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":126,"end":163,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":197,"end":238,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":276,"end":317,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":816,"end":820,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":822,"end":826,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["lamp","any"]},{"pos":1478,"end":1482,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":1484,"end":1486,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["bp","any"]},{"pos":1892,"end":1900,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_ratings","any"]},{"pos":2253,"end":2254,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["v","any"]},{"pos":2328,"end":2330,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":2436,"end":2438,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":2484,"end":2486,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":2686,"end":2688,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":2690,"end":2699,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["goalValue","any"]},{"pos":3195,"end":3196,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["m","any"]}]],[523,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":150,"end":187,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":221,"end":262,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":300,"end":341,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":670,"end":675,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["score","any"]},{"pos":739,"end":748,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":750,"end":756,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_chart","any"]},{"pos":839,"end":848,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":850,"end":862,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":864,"end":869,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":970,"end":972,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1166,"end":1175,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1177,"end":1182,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1269,"end":1272,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":1361,"end":1365,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":1367,"end":1375,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":1377,"end":1383,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":1504,"end":1511,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":2779,"end":2786,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":3815,"end":3817,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3819,"end":3829,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":3994,"end":3996,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4038,"end":4040,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4079,"end":4081,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4268,"end":4272,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":4274,"end":4279,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":4422,"end":4426,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":4428,"end":4433,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":4566,"end":4567,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":5273,"end":5274,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":5907,"end":5908,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":6473,"end":6474,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]}]],[524,[{"pos":128,"end":156,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":2003,"end":2009,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":2011,"end":2018,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chartID","any"]},{"pos":2020,"end":2033,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["asOfTimestamp","any"]},{"pos":2035,"end":2039,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]}]],[525,[{"pos":39,"end":67,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":603,"end":606,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":646,"end":647,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["e","any"]},{"pos":837,"end":840,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":880,"end":881,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["e","any"]}]],[526,[{"pos":133,"end":161,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":221,"end":225,"code":2206,"category":1,"messageKey":"The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206"},{"pos":1188,"end":1190,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1195,"end":1201,"code":1361,"category":1,"messageKey":"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","messageArgs":["FmtNum"],"relatedInformation":[{"pos":212,"end":218,"code":1376,"category":3,"messageKey":"_0_was_imported_here_1376","messageArgs":["FmtNum"]}]},{"pos":1231,"end":1233,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1266,"end":1268,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1270,"end":1280,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":1310,"end":1325,"code":1361,"category":1,"messageKey":"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","messageArgs":["DDR_GBOUNDARIES"],"relatedInformation":[{"pos":194,"end":209,"code":1376,"category":3,"messageKey":"_0_was_imported_here_1376","messageArgs":["DDR_GBOUNDARIES"]}]},{"pos":1376,"end":1391,"code":1361,"category":1,"messageKey":"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","messageArgs":["DDR_GBOUNDARIES"],"relatedInformation":[{"pos":194,"end":209,"code":1376,"category":3,"messageKey":"_0_was_imported_here_1376","messageArgs":["DDR_GBOUNDARIES"]}]},{"pos":1425,"end":1431,"code":1361,"category":1,"messageKey":"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","messageArgs":["FmtNum"],"relatedInformation":[{"pos":212,"end":218,"code":1376,"category":3,"messageKey":"_0_was_imported_here_1376","messageArgs":["FmtNum"]}]},{"pos":2422,"end":2423,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":3396,"end":3397,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":3971,"end":3975,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":3978,"end":3986,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":3989,"end":3995,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":7315,"end":7322,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":7487,"end":7494,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":7712,"end":7717,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["score","any"]},{"pos":7719,"end":7723,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["lamp","any"]},{"pos":7792,"end":7800,"code":1361,"category":1,"messageKey":"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","messageArgs":["GetGrade"],"relatedInformation":[{"pos":238,"end":246,"code":1376,"category":3,"messageKey":"_0_was_imported_here_1376","messageArgs":["GetGrade"]}]},{"pos":7801,"end":7816,"code":1361,"category":1,"messageKey":"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","messageArgs":["DDR_GBOUNDARIES"],"relatedInformation":[{"pos":194,"end":209,"code":1376,"category":3,"messageKey":"_0_was_imported_here_1376","messageArgs":["DDR_GBOUNDARIES"]}]},{"pos":7849,"end":7858,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":7860,"end":7866,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_chart","any"]},{"pos":7919,"end":7927,"code":1361,"category":1,"messageKey":"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","messageArgs":["GetGrade"],"relatedInformation":[{"pos":238,"end":246,"code":1376,"category":3,"messageKey":"_0_was_imported_here_1376","messageArgs":["GetGrade"]}]},{"pos":7928,"end":7943,"code":1361,"category":1,"messageKey":"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","messageArgs":["DDR_GBOUNDARIES"],"relatedInformation":[{"pos":194,"end":209,"code":1376,"category":3,"messageKey":"_0_was_imported_here_1376","messageArgs":["DDR_GBOUNDARIES"]}]},{"pos":7980,"end":7989,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":7991,"end":8003,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":8005,"end":8010,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":8139,"end":8159,"code":1361,"category":1,"messageKey":"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","messageArgs":["GetSpecificGPTConfig"],"relatedInformation":[{"pos":249,"end":269,"code":1376,"category":3,"messageKey":"_0_was_imported_here_1376","messageArgs":["GetSpecificGPTConfig"]}]},{"pos":8350,"end":8352,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":8657,"end":8675,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["\"enumIndexes.lamp\"","\"enumIndexes.grade\""]},{"pos":8727,"end":8731,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["lamp","ScoreData<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">"],"messageChain":[{"pos":8727,"end":8731,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["lamp","ExtractMetrics<{ readonly percent: { readonly type: \"DECIMAL\"; readonly validate: (self: unknown) => string | true; readonly formatter: (v: number, dp?: number | undefined) => string; readonly description: \"EX Score divided by the maximum possible EX Score on this chart.\"; }; readonly grade: { ...; }; }> & ExtractMe..."]}]},{"pos":8750,"end":8754,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["lamp","ScoreData<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">"],"messageChain":[{"pos":8750,"end":8754,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["lamp","ExtractMetrics<{ readonly percent: { readonly type: \"DECIMAL\"; readonly validate: (self: unknown) => string | true; readonly formatter: (v: number, dp?: number | undefined) => string; readonly description: \"EX Score divided by the maximum possible EX Score on this chart.\"; }; readonly grade: { ...; }; }> & ExtractMe..."]}]},{"pos":8792,"end":8799,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["\"score\"","\"enumIndexes.grade\""]},{"pos":8852,"end":8857,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["score","ScoreData<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">"],"messageChain":[{"pos":8852,"end":8857,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["score","ExtractMetrics<{ readonly percent: { readonly type: \"DECIMAL\"; readonly validate: (self: unknown) => string | true; readonly formatter: (v: number, dp?: number | undefined) => string; readonly description: \"EX Score divided by the maximum possible EX Score on this chart.\"; }; readonly grade: { ...; }; }> & ExtractMe..."]}]},{"pos":8876,"end":8881,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["score","ScoreData<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">"],"messageChain":[{"pos":8876,"end":8881,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["score","ExtractMetrics<{ readonly percent: { readonly type: \"DECIMAL\"; readonly validate: (self: unknown) => string | true; readonly formatter: (v: number, dp?: number | undefined) => string; readonly description: \"EX Score divided by the maximum possible EX Score on this chart.\"; }; readonly grade: { ...; }; }> & ExtractMe..."]}]},{"pos":8968,"end":8986,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["\"optional.exScore\"","\"enumIndexes.grade\""]},{"pos":9051,"end":9058,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["exScore","(AllFieldsNullableOptional \"Expected a positive number.\" | true; readonly formatter: (v: number) => string; readonly description: \"The total bads + poors in this score.\"; }; ... 10 more ...; readonly maxCombo: { ...; }; }..."],"messageChain":[{"pos":9051,"end":9058,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["exScore","AllFieldsNullableOptional \"Expected a positive number.\" | true; readonly formatter: (v: number) => string; readonly description: \"The total bads + poors in this score.\"; }; ... 10 more ...; readonly maxCombo: { ...; }; }>..."]}]},{"pos":9086,"end":9093,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["exScore","(AllFieldsNullableOptional \"Expected a positive number.\" | true; readonly formatter: (v: number) => string; readonly description: \"The total bads + poors in this score.\"; }; ... 10 more ...; readonly maxCombo: { ...; }; }..."],"messageChain":[{"pos":9086,"end":9093,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["exScore","AllFieldsNullableOptional \"Expected a positive number.\" | true; readonly formatter: (v: number) => string; readonly description: \"The total bads + poors in this score.\"; }; ... 10 more ...; readonly maxCombo: { ...; }; }>..."]}]},{"pos":9124,"end":9127,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":9470,"end":9479,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":9481,"end":9486,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":9641,"end":9661,"code":1361,"category":1,"messageKey":"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","messageArgs":["GetSpecificGPTConfig"],"relatedInformation":[{"pos":249,"end":269,"code":1376,"category":3,"messageKey":"_0_was_imported_here_1376","messageArgs":["GetSpecificGPTConfig"]}]}]],[527,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":150,"end":187,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":221,"end":262,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":300,"end":341,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":674,"end":681,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["percent","any"]},{"pos":747,"end":756,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":758,"end":764,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_chart","any"]},{"pos":849,"end":858,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":860,"end":872,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":874,"end":879,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":980,"end":982,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1143,"end":1152,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1154,"end":1159,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1247,"end":1250,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":1332,"end":1336,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":1338,"end":1346,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":1348,"end":1354,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":1461,"end":1468,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":2698,"end":2705,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":3710,"end":3712,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3748,"end":3750,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3804,"end":3806,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3808,"end":3818,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":4152,"end":4156,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":4158,"end":4163,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]}]],[528,[{"pos":190,"end":218,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":295,"end":332,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":366,"end":407,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":445,"end":486,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":864,"end":873,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":875,"end":880,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1409,"end":1412,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":1793,"end":1797,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":1800,"end":1808,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":1811,"end":1817,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":2169,"end":2173,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":2175,"end":2179,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["lamp","any"]},{"pos":2862,"end":2866,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":2868,"end":2870,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["bp","any"]},{"pos":3067,"end":3068,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["v","any"]},{"pos":3249,"end":3250,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["m","any"]},{"pos":3361,"end":3363,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3467,"end":3469,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3514,"end":3516,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3709,"end":3711,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3713,"end":3723,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":4370,"end":4379,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":4381,"end":4393,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":4395,"end":4400,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":5308,"end":5317,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":5319,"end":5324,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":6065,"end":6073,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_ratings","any"]},{"pos":6651,"end":6660,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":6662,"end":6674,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":6676,"end":6681,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":7375,"end":7384,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":7386,"end":7391,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":7836,"end":7844,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_ratings","any"]}]],[529,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":148,"end":185,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":219,"end":260,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":297,"end":338,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":645,"end":652,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["metrics","any"]},{"pos":989,"end":1001,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["scorePercent","any"]},{"pos":1003,"end":1007,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["lamp","any"]},{"pos":1140,"end":1149,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1151,"end":1157,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_chart","any"]},{"pos":1534,"end":1543,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1545,"end":1557,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":1559,"end":1564,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":2109,"end":2111,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":2283,"end":2292,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":2294,"end":2299,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":2420,"end":2429,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":2431,"end":2436,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":3260,"end":3263,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":3359,"end":3363,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":3365,"end":3373,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":3375,"end":3381,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":3647,"end":3655,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_ratings","any"]},{"pos":4053,"end":4056,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["val","any"]},{"pos":4160,"end":4163,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["val","any"]},{"pos":4423,"end":4425,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4596,"end":4598,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4667,"end":4669,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4738,"end":4740,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4956,"end":4958,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4960,"end":4970,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":5198,"end":5201,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["num","any"]},{"pos":5243,"end":5246,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["num","any"]},{"pos":5288,"end":5291,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["num","any"]},{"pos":5621,"end":5625,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":5627,"end":5632,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":5812,"end":5813,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":5978,"end":5979,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]}]],[530,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":187,"end":224,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":258,"end":299,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":337,"end":378,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":3717,"end":3721,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["rate","any"]},{"pos":3723,"end":3728,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":3995,"end":4000,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["score","any"]},{"pos":4062,"end":4071,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":4073,"end":4079,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_chart","any"]},{"pos":4160,"end":4169,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":4171,"end":4183,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":4185,"end":4190,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":4308,"end":4310,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4490,"end":4499,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":4501,"end":4506,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":4611,"end":4614,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":4702,"end":4706,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":4708,"end":4716,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":4718,"end":4724,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":4962,"end":4969,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":5887,"end":5894,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":6557,"end":6558,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["v","any"]},{"pos":6670,"end":6672,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":6719,"end":6721,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":6776,"end":6778,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":6812,"end":6814,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":6816,"end":6826,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":7016,"end":7017,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["v","any"]},{"pos":7249,"end":7253,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":7255,"end":7260,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":7374,"end":7378,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":7380,"end":7385,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":7564,"end":7565,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":7905,"end":7906,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":8341,"end":8342,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]}]],[531,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":150,"end":187,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":221,"end":262,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":300,"end":341,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":641,"end":648,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["percent","any"]},{"pos":650,"end":655,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":916,"end":923,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["percent","any"]},{"pos":927,"end":932,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1080,"end":1089,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1091,"end":1096,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1245,"end":1254,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1256,"end":1268,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":1270,"end":1275,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1395,"end":1397,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1557,"end":1566,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1568,"end":1573,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1684,"end":1687,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":1767,"end":1771,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":1773,"end":1781,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":1783,"end":1789,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":1894,"end":1901,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":2702,"end":2709,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":3358,"end":3360,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3413,"end":3415,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3449,"end":3451,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3453,"end":3463,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":4419,"end":4423,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":4425,"end":4430,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":4555,"end":4556,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":4661,"end":4662,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":4973,"end":4974,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]}]],[532,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":150,"end":187,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":221,"end":262,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":300,"end":341,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":664,"end":671,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["percent","any"]},{"pos":737,"end":746,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":748,"end":754,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_chart","any"]},{"pos":839,"end":848,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":850,"end":862,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":864,"end":869,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":984,"end":986,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1146,"end":1155,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1157,"end":1162,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1268,"end":1271,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":1351,"end":1355,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":1357,"end":1365,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":1367,"end":1373,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":1478,"end":1485,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":2374,"end":2381,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":3050,"end":3051,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["v","any"]},{"pos":3121,"end":3123,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3176,"end":3178,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3212,"end":3214,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":3216,"end":3226,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":3451,"end":3452,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["v","any"]},{"pos":3573,"end":3577,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":3579,"end":3584,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":3709,"end":3710,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":4416,"end":4417,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":5196,"end":5197,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]}]],[533,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":109,"end":146,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":180,"end":221,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":259,"end":300,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":621,"end":626,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["score","any"]},{"pos":688,"end":697,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":699,"end":705,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_chart","any"]},{"pos":786,"end":795,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":797,"end":809,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":811,"end":816,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":921,"end":923,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1089,"end":1098,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1100,"end":1105,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1190,"end":1193,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":1289,"end":1293,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":1295,"end":1303,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":1305,"end":1311,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":1427,"end":1435,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_ratings","any"]},{"pos":1701,"end":1703,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1745,"end":1747,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1781,"end":1783,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1785,"end":1795,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":2088,"end":2092,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":2094,"end":2099,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":2222,"end":2223,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":2577,"end":2578,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":2944,"end":2945,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]}]],[534,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":150,"end":187,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":221,"end":262,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":300,"end":341,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":1092,"end":1101,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["bellCount","any"]},{"pos":1242,"end":1251,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["bellCount","any"]},{"pos":1390,"end":1396,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["damage","any"]},{"pos":1526,"end":1539,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["platinumScore","any"]},{"pos":1541,"end":1546,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1894,"end":1899,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["score","any"]},{"pos":1963,"end":1976,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["platinumScore","any"]},{"pos":1980,"end":1985,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":2062,"end":2071,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":2073,"end":2078,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":2237,"end":2246,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":2248,"end":2259,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["derivedData","any"]},{"pos":2261,"end":2266,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":2761,"end":2763,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":2978,"end":2987,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":2989,"end":2994,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":3099,"end":3108,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":3110,"end":3115,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":3367,"end":3376,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":3378,"end":3383,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":3575,"end":3578,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":3782,"end":3786,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":3788,"end":3796,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":3798,"end":3804,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":4343,"end":4350,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":5909,"end":5916,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":6855,"end":6857,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":6859,"end":6869,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":7037,"end":7039,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":7080,"end":7082,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":7120,"end":7122,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":7173,"end":7175,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":7234,"end":7236,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":7517,"end":7521,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":7523,"end":7528,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":7744,"end":7748,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":7750,"end":7755,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":7896,"end":7900,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":7902,"end":7907,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":8038,"end":8039,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":8041,"end":8046,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]}]],[535,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":214,"end":251,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":302,"end":343,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":381,"end":422,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":1265,"end":1275,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["clearMedal","any"]},{"pos":1328,"end":1333,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["score","any"]},{"pos":1335,"end":1345,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["clearMedal","any"]},{"pos":1651,"end":1660,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1662,"end":1668,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_chart","any"]},{"pos":1900,"end":1909,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1911,"end":1922,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["derivedData","any"]},{"pos":1924,"end":1929,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":2054,"end":2056,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":2227,"end":2236,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":2238,"end":2243,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":2396,"end":2399,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":2493,"end":2497,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":2499,"end":2507,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":2509,"end":2515,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":2634,"end":2641,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":3372,"end":3379,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":3954,"end":3956,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4004,"end":4006,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4045,"end":4047,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4081,"end":4083,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":4085,"end":4095,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":4391,"end":4395,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":4397,"end":4402,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":4630,"end":4631,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":5093,"end":5094,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]}]],[536,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":109,"end":146,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":876,"end":878,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1085,"end":1092,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["exScore","any"]},{"pos":1094,"end":1099,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1742,"end":1746,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":1748,"end":1753,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":1881,"end":1885,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":1887,"end":1892,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]}]],[537,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":869,"end":871,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]}]],[538,[{"pos":45,"end":73,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/types"]},{"pos":150,"end":187,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/pb-merge"]},{"pos":221,"end":262,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/profile-calc"]},{"pos":300,"end":341,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/utils/session-calc"]},{"pos":656,"end":661,"code":7031,"category":1,"messageKey":"Binding_element_0_implicitly_has_an_1_type_7031","messageArgs":["score","any"]},{"pos":722,"end":731,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":733,"end":739,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_chart","any"]},{"pos":819,"end":828,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":830,"end":842,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["_derivedData","any"]},{"pos":844,"end":849,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":943,"end":945,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":1103,"end":1112,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["scoreData","any"]},{"pos":1114,"end":1119,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["chart","any"]},{"pos":1201,"end":1204,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["arr","any"]},{"pos":1284,"end":1288,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["game","any"]},{"pos":1290,"end":1298,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["playtype","any"]},{"pos":1300,"end":1306,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["userID","any"]},{"pos":1411,"end":1418,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":2172,"end":2179,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["ratings","any"]},{"pos":2785,"end":2787,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":2829,"end":2831,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":2865,"end":2867,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["pb","any"]},{"pos":2869,"end":2879,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["gradeIndex","any"]},{"pos":3170,"end":3174,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["base","any"]},{"pos":3176,"end":3181,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["score","any"]},{"pos":3305,"end":3306,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":3727,"end":3728,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]},{"pos":4085,"end":4086,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["s","any"]}]],[541,[{"pos":681,"end":719,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/router/ir/usc/_playtype/types"]},{"pos":17565,"end":17627,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["{ goalID: string; criteria: { value: number; }; }","GoalDocument"],"messageChain":[{"pos":17565,"end":17627,"code":2739,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739","messageArgs":["{ goalID: string; criteria: { value: number; }; }","GoalDocumentSingle<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">","charts, game, playtype, name"]}]},{"pos":17630,"end":17708,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["{ goalID: string; criteria: { key: string; value: number; }; }","GoalDocument"],"messageChain":[{"pos":17630,"end":17708,"code":2739,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739","messageArgs":["{ goalID: string; criteria: { key: string; value: number; }; }","GoalDocumentSingle<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">","charts, game, playtype, name"]}]},{"pos":17711,"end":17790,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["{ goalID: string; criteria: { key: string; value: number; }; }","GoalDocument"],"messageChain":[{"pos":17711,"end":17790,"code":2739,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739","messageArgs":["{ goalID: string; criteria: { key: string; value: number; }; }","GoalDocumentSingle<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">","charts, game, playtype, name"]}]}]],[545,[{"pos":4310,"end":4333,"code":2578,"category":1,"messageKey":"Unused_ts_expect_error_directive_2578"}]],[790,[{"pos":8735,"end":8738,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["err","unknown"]},{"pos":8740,"end":8746,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["stderr","unknown"]}]],[799,[{"pos":561,"end":597,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/chunithm/common_pb"]}]],[800,[{"pos":579,"end":613,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/maimai/common_pb"]}]],[801,[{"pos":583,"end":617,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/ongeki/common_pb"]}]],[802,[{"pos":674,"end":707,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/wacca/common_pb"]}]],[817,[{"pos":2176,"end":2191,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["boolean | null","undefined"],"messageChain":[{"pos":2176,"end":2191,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["null","undefined"]}]}]],[824,[{"pos":36,"end":74,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/router/ir/usc/_playtype/types"]}]],[832,[{"pos":1190,"end":1198,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["(() => Promise) | null","KaiAPIReauthFunction"],"messageChain":[{"pos":1190,"end":1198,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["null","KaiAPIReauthFunction"]}]}]],[836,[{"pos":1198,"end":1206,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["(() => Promise) | null","KaiAPIReauthFunction"],"messageChain":[{"pos":1198,"end":1206,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["null","KaiAPIReauthFunction"]}]}]],[939,[{"pos":97,"end":101,"code":2206,"category":1,"messageKey":"The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206"},{"pos":557,"end":594,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/cards/cards_grpc_pb"]},{"pos":647,"end":679,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/cards/cards_pb"]},{"pos":5525,"end":5543,"code":1361,"category":1,"messageKey":"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","messageArgs":["GetGameGroupConfig"],"relatedInformation":[{"pos":77,"end":95,"code":1376,"category":3,"messageKey":"_0_was_imported_here_1376","messageArgs":["GetGameGroupConfig"]}]}]],[940,[{"pos":327,"end":366,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/chunithm/user_grpc_pb"]},{"pos":429,"end":463,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/chunithm/user_pb"]}]],[941,[{"pos":325,"end":362,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/maimai/user_grpc_pb"]},{"pos":425,"end":457,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/maimai/user_pb"]}]],[942,[{"pos":325,"end":362,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/ongeki/user_grpc_pb"]},{"pos":425,"end":457,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/ongeki/user_pb"]}]],[943,[{"pos":125,"end":161,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/wacca/user_grpc_pb"]},{"pos":293,"end":326,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/wacca/common_pb"]},{"pos":375,"end":406,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/wacca/user_pb"]}]],[944,[{"pos":324,"end":360,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/wacca/user_grpc_pb"]},{"pos":417,"end":448,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/wacca/user_pb"]}]],[971,[{"pos":88,"end":126,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/router/ir/usc/_playtype/types"]}]],[976,[{"pos":50,"end":66,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["datasets/words"]}]],[980,[{"pos":159,"end":202,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/game-implementations"]},{"pos":234,"end":270,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/games/_common"]},{"pos":3191,"end":3243,"code":2578,"category":1,"messageKey":"Unused_ts_expect_error_directive_2578"}]],[1012,[{"pos":2371,"end":2375,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["{ criteria: { value: number; }; }","SingleOrArray"],"messageChain":[{"pos":2371,"end":2375,"code":2739,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739","messageArgs":["{ criteria: { value: number; }; }","GoalDocumentSingle<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">","charts, game, playtype, name, goalID"]}]},{"pos":2686,"end":2746,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["{ scoreData: { score: number; }; }","SingleOrArray>"],"messageChain":[{"pos":2686,"end":2746,"code":2740,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740","messageArgs":["{ scoreData: { score: number; }; }","PBScoreDocument<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">","composedFrom, rankingData, userID, chartID","7"]}]},{"pos":2849,"end":2853,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["{ criteria: { value: number; }; }","GoalDocument"],"messageChain":[{"pos":2849,"end":2853,"code":2739,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739","messageArgs":["{ criteria: { value: number; }; }","GoalDocumentSingle<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">","charts, game, playtype, name, goalID"]}]}]],[1027,[{"pos":443,"end":479,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/chunithm/common_pb"]}]],[1028,[{"pos":408,"end":442,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/maimai/common_pb"]}]],[1029,[{"pos":433,"end":467,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/ongeki/common_pb"]}]],[1030,[{"pos":376,"end":409,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["proto/generated/wacca/common_pb"]}]],[1057,[{"pos":4771,"end":4784,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["{ playtype: string; chartID: string; data: {}; }","SingleOrArray>"],"messageChain":[{"pos":4771,"end":4784,"code":2740,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740","messageArgs":["{ playtype: string; chartID: string; data: {}; }","ChartDocument<\"iidx:DP\" | \"iidx:SP\">","songID, level, levelNum, isPrimary","2"]}]}]],[1068,[{"pos":36,"end":74,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/router/ir/usc/_playtype/types"]}]],[1096,[{"pos":5267,"end":5376,"code":2739,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739","messageArgs":["{ songID: number; level: string; chartID: string; data: {}; }","ChartDocument<\"iidx:DP\" | \"iidx:SP\">","levelNum, isPrimary, difficulty, playtype, versions"]},{"pos":5382,"end":5494,"code":2739,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739","messageArgs":["{ songID: number; level: string; chartID: string; data: {}; }","ChartDocument<\"iidx:DP\" | \"iidx:SP\">","levelNum, isPrimary, difficulty, playtype, versions"]}]],[1098,[{"pos":43,"end":86,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/game-implementations"]}]],[1489,[{"pos":1144,"end":1181,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":6152,"end":6156,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["self","any"]},{"pos":6158,"end":6164,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["parent","any"]}]],[1493,[{"pos":718,"end":755,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":842,"end":874,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/rate-limiter"]}]],[1495,[{"pos":451,"end":488,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":2161,"end":2165,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["self","any"]}]],[1496,[{"pos":130,"end":162,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/type-require"]}]],[1505,[{"pos":15,"end":19,"code":2206,"category":1,"messageKey":"The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206"},{"pos":652,"end":689,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1512,[{"pos":579,"end":616,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":1736,"end":1740,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["self","any"]},{"pos":1742,"end":1748,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["parent","any"]},{"pos":2062,"end":2066,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["self","any"]},{"pos":2068,"end":2074,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["parent","any"]}]],[1516,[{"pos":644,"end":681,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1520,[{"pos":842,"end":866,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":919,"end":952,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/multer-upload"]},{"pos":977,"end":1014,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":1055,"end":1087,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/rate-limiter"]}]],[1522,[{"pos":866,"end":890,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":915,"end":952,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1523,[{"pos":167,"end":204,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1525,[{"pos":347,"end":371,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":396,"end":433,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1529,[{"pos":399,"end":436,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":478,"end":510,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/type-require"]}]],[1531,[{"pos":426,"end":450,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":475,"end":512,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1536,[{"pos":313,"end":350,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1538,[{"pos":487,"end":511,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":564,"end":597,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/multer-upload"]}]],[1539,[{"pos":393,"end":430,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1540,[{"pos":399,"end":454,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/router/api/v1/games/_game/_playtype/middleware"]}]],[1541,[{"pos":649,"end":681,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/rate-limiter"]},{"pos":728,"end":783,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/router/api/v1/games/_game/_playtype/middleware"]}]],[1542,[{"pos":172,"end":207,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["game-implementations/games/jubeat"]}]],[1544,[{"pos":349,"end":386,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1549,[{"pos":728,"end":765,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":813,"end":845,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/rate-limiter"]}]],[1550,[{"pos":614,"end":638,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":663,"end":700,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1551,[{"pos":351,"end":383,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/rate-limiter"]}]],[1553,[{"pos":335,"end":359,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]}]],[1554,[{"pos":520,"end":544,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":582,"end":629,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/router/api/v1/users/_userID/middleware"]}]],[1556,[{"pos":632,"end":656,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":681,"end":718,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":3181,"end":3185,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["self","any"]},{"pos":3187,"end":3193,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["parent","any"]},{"pos":3494,"end":3498,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["self","any"]},{"pos":3500,"end":3506,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["parent","any"]}]],[1557,[{"pos":551,"end":575,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]}]],[1559,[{"pos":694,"end":731,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":783,"end":815,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/router/api/v1/auth/auth"]}]],[1560,[{"pos":396,"end":433,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1561,[{"pos":378,"end":415,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1562,[{"pos":243,"end":280,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":316,"end":348,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/type-require"]}]],[1564,[{"pos":531,"end":568,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":604,"end":636,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/type-require"]},{"pos":3413,"end":3420,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["kaiType","{}"]}]],[1565,[{"pos":148,"end":185,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":221,"end":253,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/type-require"]}]],[1566,[{"pos":228,"end":265,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":301,"end":333,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/type-require"]}]],[1568,[{"pos":316,"end":348,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/type-require"]}]],[1570,[{"pos":488,"end":512,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":565,"end":598,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/multer-upload"]}]],[1572,[{"pos":260,"end":297,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1573,[{"pos":1109,"end":1146,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1575,[{"pos":76,"end":108,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/rate-limiter"]}]],[1577,[{"pos":224,"end":248,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]}]],[1581,[{"pos":644,"end":668,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":693,"end":730,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]},{"pos":4752,"end":4756,"code":7006,"category":1,"messageKey":"Parameter_0_implicitly_has_an_1_type_7006","messageArgs":["self","any"]}]],[1582,[{"pos":468,"end":492,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":533,"end":565,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/rate-limiter"]}]],[1583,[{"pos":669,"end":693,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":734,"end":771,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1586,[{"pos":494,"end":518,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":543,"end":580,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/prudence-validate"]}]],[1589,[{"pos":892,"end":916,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/auth"]},{"pos":969,"end":1002,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/multer-upload"]},{"pos":7890,"end":7898,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["playtype","{}"]}]],[1592,[{"pos":114,"end":150,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/update-last-seen"]}]],[1615,[{"pos":87,"end":119,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/rate-limiter"]}]],[1616,[{"pos":168,"end":200,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/rate-limiter"]},{"pos":785,"end":829,"code":2352,"category":1,"messageKey":"Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352","messageArgs":["{ [index: string]: string; }","Record"],"messageChain":[{"pos":785,"end":829,"code":2634,"category":1,"messageKey":"_0_index_signatures_are_incompatible_2634","messageArgs":["string"],"messageChain":[{"pos":785,"end":829,"code":2678,"category":1,"messageKey":"Type_0_is_not_comparable_to_type_1_2678","messageArgs":["string","string[]"]}]}]}]],[1619,[{"pos":208,"end":240,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["server/middleware/rate-limiter"]}]],[1628,[{"pos":1165,"end":1280,"code":2740,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740","messageArgs":["{ userID: number; rankingData: { rank: number; }; scoreData: { score: number; }; }","PBScoreDocument<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">","composedFrom, chartID, game, playtype","5"]}]],[1672,[{"pos":1505,"end":1554,"code":2740,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740","messageArgs":["{ scoreData: { score: number; }; }","PBScoreDocument<\"bms:14K\" | \"bms:7K\" | \"pms:Controller\" | \"pms:Keyboard\">","composedFrom, rankingData, userID, chartID","7"]}]],[1678,[{"pos":4944,"end":5008,"code":2740,"category":1,"messageKey":"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740","messageArgs":["{ userID: number; rankingData: { rank: number; }; }","PBScoreDocument<\"arcaea:Touch\" | \"bms:14K\" | \"bms:7K\" | \"chunithm:Single\" | \"ddr:DP\" | \"ddr:SP\" | \"gitadora:Dora\" | \"gitadora:Gita\" | \"iidx:DP\" | \"iidx:SP\" | \"itg:Stamina\" | \"jubeat:Single\" | ... 11 more ... | \"wacca:Single\">","composedFrom, chartID, game, playtype","6"]}]],[1684,[{"pos":7,"end":26,"code":2882,"category":1,"messageKey":"Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882","messageArgs":["external/mongo/db"]}]]],"affectedFilesPendingEmit":[497,502,343,344,346,345,390,539,520,544,521,545,522,546,523,547,526,548,527,549,528,529,551,530,553,531,555,532,556,533,557,534,559,535,560,536,561,537,563,538,503,524,564,525,565,347,777,776,775,778,779,301,286,317,287,540,388,781,782,783,465,319,784,440,787,786,789,788,791,792,794,984,999,985,986,997,998,1000,298,1001,494,441,442,443,444,445,454,455,473,474,475,476,477,478,479,480,483,484,485,1002,486,487,488,489,1003,1004,490,491,492,493,303,1005,302,793,306,468,466,446,456,299,321,1006,974,796,1011,811,322,1009,1012,462,785,1013,983,1014,448,1015,449,1016,469,1017,464,1010,1008,447,1018,978,1019,979,1020,450,1021,810,982,1022,981,1023,980,1024,976,1025,977,1007,1026,470,833,837,838,839,840,1027,799,940,323,1028,800,941,324,1029,801,942,325,943,1030,802,944,326,1031,804,1032,805,946,1033,806,1034,807,945,338,803,1038,831,1039,808,1040,832,1036,828,1041,835,1042,809,1043,836,1037,829,339,827,939,937,938,947,1044,812,1045,948,340,1046,813,1048,951,341,342,825,949,952,1049,814,1050,953,327,954,1051,815,1052,956,328,959,1053,816,1054,960,329,1055,817,1056,961,330,818,962,331,963,1059,966,1060,820,1061,967,333,1057,819,1058,965,332,1064,822,1065,969,335,1062,821,1063,968,334,1066,823,1067,970,336,1068,824,1069,971,337,972,439,973,1070,1071,482,1072,1073,472,1079,1076,1082,1084,1086,1083,1077,1074,1081,1075,1078,1085,1080,1088,1087,790,285,1090,1089,1091,1093,1092,1095,1094,451,1096,452,463,1097,1098,461,495,496,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1125,1450,1451,1126,1452,1443,1444,1445,1446,1447,1448,1453,1454,1455,1456,1457,1458,1459,1449,1607,1482,1609,1611,1610,1486,1481,1613,1612,1576,1614,1487,1617,1489,1618,1492,1619,1493,1620,1494,1621,1495,1622,1496,1624,1498,1499,1500,1503,1628,1504,1627,1505,1506,1629,1507,1497,1626,1516,1508,1630,1509,1510,1631,1511,1633,1512,1634,1513,1635,1514,1632,1515,1517,1625,1518,1623,1519,1637,1520,1521,1638,1522,1639,1523,1615,1575,1524,1640,1525,1526,1641,1527,1529,1530,1642,1531,1532,1643,1533,1646,1536,1647,1538,1539,1540,1541,1542,1543,1649,1544,1545,1546,1650,1549,1651,1550,1648,1559,1652,1551,1653,1552,1654,1553,1655,1554,1656,1555,1658,1556,1659,1557,1657,1558,1660,1560,1561,1661,1562,1662,1563,1663,1564,1664,1565,1566,1567,1665,1568,1535,1666,1569,1667,1570,1645,1573,1571,1668,1572,1644,1574,1669,1577,1670,1578,1672,1579,1673,1580,1671,1581,1674,1582,1675,1583,1585,1676,1584,1677,1586,1591,1678,1589,1587,1679,1588,1590,1592,1593,1636,1680,1681,1616,542,1606,1035,1047,567,500,1682,1683,543,1684,541,1692,471,481,467,1685,1537,1686,307,964,453,460,1687,310,1528,1688,288,1689,950,176,826,795,797,1547,311,798,1693,1534,318,1488,1548,1690,975,1501,320,1490,1691,305],"emitSignatures":[176,285,286,287,288,298,299,301,302,303,305,306,307,310,311,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,388,390,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,500,502,503,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,551,553,555,556,557,559,560,561,563,564,565,567,775,776,777,778,779,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,831,832,833,835,836,837,838,839,840,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,956,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1125,1126,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1481,1482,1486,1487,1488,1489,1490,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1606,1607,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717]} \ No newline at end of file diff --git a/typescript/server/src/game-implementations/games/arcaea.test.ts b/typescript/server/src/game-implementations/games/arcaea.test.ts index 591d764e0..e754d678d 100644 --- a/typescript/server/src/game-implementations/games/arcaea.test.ts +++ b/typescript/server/src/game-implementations/games/arcaea.test.ts @@ -1,6 +1,6 @@ import type { DeepPartial } from "#utils/types"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -44,8 +44,6 @@ const scoreData: ScoreData<"arcaea:Touch"> = { const mockScore = mkMockScore("arcaea", "Touch", TestingArcaeaSheriruthFTR, scoreData); const mockPB = mkMockPB("arcaea", "Touch", TestingArcaeaSheriruthFTR, scoreData); -const logger = CreateLogCtx(__filename); - t.test("Arcaea Implementation", (t) => { t.test("Grade Deriver", (t) => { const f = (score: number, expected: string) => diff --git a/typescript/server/src/game-implementations/games/bms-pms.test.ts b/typescript/server/src/game-implementations/games/bms-pms.test.ts index 41c79a0ac..484402acb 100644 --- a/typescript/server/src/game-implementations/games/bms-pms.test.ts +++ b/typescript/server/src/game-implementations/games/bms-pms.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -45,8 +45,6 @@ function scoreToPercent(score: number) { return (100 * score) / max; } -const logger = CreateLogCtx(__filename); - for (const [game, playtype, impl] of [ ["bms", "7K", BMS_7K_IMPL], ["bms", "14K", BMS_14K_IMPL], diff --git a/typescript/server/src/game-implementations/games/chunithm.test.ts b/typescript/server/src/game-implementations/games/chunithm.test.ts index 15ac8a193..bff862ce1 100644 --- a/typescript/server/src/game-implementations/games/chunithm.test.ts +++ b/typescript/server/src/game-implementations/games/chunithm.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -38,8 +38,6 @@ const scoreData: ScoreData<"chunithm:Single"> = { const mockScore = mkMockScore("chunithm", "Single", CHUNITHMBBKKChart, scoreData); const mockPB = mkMockPB("chunithm", "Single", CHUNITHMBBKKChart, scoreData); -const logger = CreateLogCtx(__filename); - t.test("CHUNITHM Implementation", (t) => { t.test("Grade Deriver", (t) => { const f = (score: number, expected: any) => diff --git a/typescript/server/src/game-implementations/games/ddr.ts b/typescript/server/src/game-implementations/games/ddr.ts index ca860bfb6..0fdca565d 100644 --- a/typescript/server/src/game-implementations/games/ddr.ts +++ b/typescript/server/src/game-implementations/games/ddr.ts @@ -22,14 +22,12 @@ import { type SongDocument, } from "../../../../common/src"; import db from "../../external/mongo/db"; -import CreateLogCtx from "../../lib/logger/logger"; +import { log } from "../../lib/logger/log"; import { IsNullish } from "../../utils/misc"; import { CreatePBMergeFor } from "../utils/pb-merge"; import { SessionAvgBest10For } from "../utils/session-calc"; import { GoalFmtScore, GoalOutOfFmtScore, GradeGoalFormatter } from "./_common"; -const logger = CreateLogCtx(__filename); - interface PBScoreDocumentWithSong extends PBScoreDocument<"ddr:DP" | "ddr:SP"> { song: SongDocument<"ddr">; top?: number; diff --git a/typescript/server/src/game-implementations/games/gitadora.test.ts b/typescript/server/src/game-implementations/games/gitadora.test.ts index 518c6b29a..f9d1bb2ca 100644 --- a/typescript/server/src/game-implementations/games/gitadora.test.ts +++ b/typescript/server/src/game-implementations/games/gitadora.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -18,8 +18,6 @@ import { } from "../../../../common/src"; import { GITADORA_DORA_IMPL, GITADORA_GITA_IMPL } from "./gitadora"; -const logger = CreateLogCtx(__filename); - const baseMetrics: ProvidedMetrics[GPTStrings["gitadora"]] = { lamp: "CLEAR", percent: 45, diff --git a/typescript/server/src/game-implementations/games/iidx.test.ts b/typescript/server/src/game-implementations/games/iidx.test.ts index 41365a90a..4a532afd9 100644 --- a/typescript/server/src/game-implementations/games/iidx.test.ts +++ b/typescript/server/src/game-implementations/games/iidx.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkFakePBIIDXSP, mkFakeScoreIIDXSP } from "#test-utils/misc"; @@ -23,8 +23,6 @@ const baseMetrics: ProvidedMetrics["iidx:DP" | "iidx:SP"] = { score: 1000, }; -const logger = CreateLogCtx(__filename); - const max = Testing511SPA.data.notecount * 2; function percentToScore(percent: number) { diff --git a/typescript/server/src/game-implementations/games/jubeat.test.ts b/typescript/server/src/game-implementations/games/jubeat.test.ts index d27b1e9ff..14300e28f 100644 --- a/typescript/server/src/game-implementations/games/jubeat.test.ts +++ b/typescript/server/src/game-implementations/games/jubeat.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -12,8 +12,6 @@ import type { ProvidedMetrics, ScoreData } from "../../../../common/src"; import { JUBEAT_SINGLE_CONF } from "../../../../common/src/config/game-support/jubeat"; import { JUBEAT_IMPL } from "./jubeat"; -const logger = CreateLogCtx(__filename); - const baseMetrics: ProvidedMetrics["jubeat:Single"] = { lamp: "CLEAR", musicRate: 84.21, diff --git a/typescript/server/src/game-implementations/games/maimai.test.ts b/typescript/server/src/game-implementations/games/maimai.test.ts index 89c01671b..8e09161eb 100644 --- a/typescript/server/src/game-implementations/games/maimai.test.ts +++ b/typescript/server/src/game-implementations/games/maimai.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -12,8 +12,6 @@ import type { integer, ProvidedMetrics, ScoreData } from "../../../../common/src import { MAIMAI_SINGLE_CONF } from "../../../../common/src/config/game-support/maimai"; import { MAIMAI_IMPL } from "./maimai"; -const logger = CreateLogCtx(__filename); - const baseMetrics: ProvidedMetrics["maimai:Single"] = { lamp: "CLEAR", percent: 97.01, diff --git a/typescript/server/src/game-implementations/games/maimaidx.test.ts b/typescript/server/src/game-implementations/games/maimaidx.test.ts index 7cca912cd..929a5ddf4 100644 --- a/typescript/server/src/game-implementations/games/maimaidx.test.ts +++ b/typescript/server/src/game-implementations/games/maimaidx.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -11,8 +11,6 @@ import type { ProvidedMetrics, ScoreData } from "../../../../common/src"; import { MAIMAI_DX_SINGLE_CONF } from "../../../../common/src/config/game-support/maimai-dx"; import { MAIMAIDX_IMPL } from "./maimaidx"; -const logger = CreateLogCtx(__filename); - const baseMetrics: ProvidedMetrics["maimaidx:Single"] = { lamp: "CLEAR", percent: 97.012, diff --git a/typescript/server/src/game-implementations/games/museca.test.ts b/typescript/server/src/game-implementations/games/museca.test.ts index 30dcbeab5..956ca1f0f 100644 --- a/typescript/server/src/game-implementations/games/museca.test.ts +++ b/typescript/server/src/game-implementations/games/museca.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -34,8 +34,6 @@ const scoreData: ScoreData<"museca:Single"> = { const mockScore = mkMockScore("museca", "Single", TestingMusecaChart, scoreData); const mockPB = mkMockPB("museca", "Single", TestingMusecaChart, scoreData); -const logger = CreateLogCtx(__filename); - t.test("MUSECA Implementation", (t) => { t.test("Grade Deriver", (t) => { const f = (score: number, expected: any) => diff --git a/typescript/server/src/game-implementations/games/ongeki.test.ts b/typescript/server/src/game-implementations/games/ongeki.test.ts index 1dff14edb..745cc4c96 100644 --- a/typescript/server/src/game-implementations/games/ongeki.test.ts +++ b/typescript/server/src/game-implementations/games/ongeki.test.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc, UpdateChartRanking } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -44,8 +44,6 @@ const scoreData: ScoreData<"ongeki:Single"> = { const mockScore = mkMockScore("ongeki", "Single", TestingOngekiChart, scoreData); const mockPB = mkMockPB("ongeki", "Single", TestingOngekiChart, scoreData); -const logger = CreateLogCtx(__filename); - t.test("ONGEKI Implementation", (t: any) => { t.test("Grade Deriver", (t: any) => { const f = (score: number, expected: string) => diff --git a/typescript/server/src/game-implementations/games/popn.test.ts b/typescript/server/src/game-implementations/games/popn.test.ts index e8e0b92fc..d4ad2cb02 100644 --- a/typescript/server/src/game-implementations/games/popn.test.ts +++ b/typescript/server/src/game-implementations/games/popn.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -37,8 +37,6 @@ const scoreData: ScoreData<"popn:9B"> = { const mockScore = mkMockScore("popn", "9B", TestingPopnChart, scoreData); const mockPB = mkMockPB("popn", "9B", TestingPopnChart, scoreData); -const logger = CreateLogCtx(__filename); - t.test("Pop'n Implementation", (t) => { t.test("Grade Deriver", (t) => { const f = (score: number, expected: any) => diff --git a/typescript/server/src/game-implementations/games/sdvx.test.ts b/typescript/server/src/game-implementations/games/sdvx.test.ts index c0be4b238..74d2545d8 100644 --- a/typescript/server/src/game-implementations/games/sdvx.test.ts +++ b/typescript/server/src/game-implementations/games/sdvx.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -15,8 +15,6 @@ import { } from "../../../../common/src"; import { SDVX_IMPL } from "./sdvx"; -const logger = CreateLogCtx(__filename); - const baseMetrics: ProvidedMetrics["sdvx:Single"] = { lamp: "CLEAR", score: 9_003_000, diff --git a/typescript/server/src/game-implementations/games/usc.test.ts b/typescript/server/src/game-implementations/games/usc.test.ts index b94a2841c..cbd8c134d 100644 --- a/typescript/server/src/game-implementations/games/usc.test.ts +++ b/typescript/server/src/game-implementations/games/usc.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -16,8 +16,6 @@ import { } from "../../../../common/src"; import { USC_CONTROLLER_IMPL, USC_KEYBOARD_IMPL } from "./usc"; -const logger = CreateLogCtx(__filename); - const baseMetrics: ProvidedMetrics[GPTStrings["usc"]] = { lamp: "CLEAR", score: 9_003_000, diff --git a/typescript/server/src/game-implementations/games/wacca.test.ts b/typescript/server/src/game-implementations/games/wacca.test.ts index af824045b..090c1d3f2 100644 --- a/typescript/server/src/game-implementations/games/wacca.test.ts +++ b/typescript/server/src/game-implementations/games/wacca.test.ts @@ -1,6 +1,6 @@ import type { DeepPartial } from "#utils/types"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreatePBDoc } from "#lib/score-import/framework/pb/create-pb-doc"; import db from "#services/mongo/db"; import { dmf, mkMockPB, mkMockScore } from "#test-utils/misc"; @@ -38,8 +38,6 @@ const scoreData: ScoreData<"wacca:Single"> = { const mockScore = mkMockScore("wacca", "Single", TestingWaccaPupaExp, scoreData); const mockPB = mkMockPB("wacca", "Single", TestingWaccaPupaExp, scoreData); -const logger = CreateLogCtx(__filename); - t.test("WACCA Implementation", (t) => { t.test("Grade Deriver", (t) => { const f = (score: number, expected: any) => diff --git a/typescript/server/src/lib/builtin-clients/builtin-clients.ts b/typescript/server/src/lib/builtin-clients/builtin-clients.ts index 51bfa9520..b90e64c5c 100644 --- a/typescript/server/src/lib/builtin-clients/builtin-clients.ts +++ b/typescript/server/src/lib/builtin-clients/builtin-clients.ts @@ -1,6 +1,6 @@ import type { PrudenceError } from "prudence"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ServerConfig, TachiConfig } from "#lib/setup/config"; import { type TachiAPIClientDocument, UserAuthLevels } from "../../../../common/src"; @@ -11,8 +11,6 @@ import { Random20Hex } from "#utils/misc"; import { FormatPrError } from "#utils/prudence"; import fjsh from "fast-json-stable-hash"; -const logger = CreateLogCtx(__filename); - type DefaultClients = Array>; // Defines some Tachi API Clients that should come default with a Tachi @@ -315,7 +313,7 @@ async function LoadClients(clients: DefaultClients) { }); if (!firstAdmin) { - logger.warn( + log.warn( `There are no admins on this instance of tachi-server. We cannot create default API Clients! Chances are, you're seeing this message because you just bootstrapped Tachi. You'll need to set a user's authLevel to ${UserAuthLevels.ADMIN}. @@ -351,9 +349,7 @@ If you have no users, go create an account using the frontend, then run pnpm mak try { DatabaseSchemas["api-clients"](realClient); } catch (err) { - logger.error( - `Invalid API Client ${client.name}: ${FormatPrError(err as PrudenceError)}.`, - ); + log.error(`Invalid API Client ${client.name}: ${FormatPrError(err as PrudenceError)}.`); continue; } @@ -364,6 +360,6 @@ If you have no users, go create an account using the frontend, then run pnpm mak await db["api-clients"].insert(realClient); - logger.info(`Loaded/Modified new built-in client ${client.name}.`); + log.info(`Loaded/Modified new built-in client ${client.name}.`); } } diff --git a/typescript/server/src/lib/cdn/cdn.ts b/typescript/server/src/lib/cdn/cdn.ts index ca6f191e1..2edddd19a 100644 --- a/typescript/server/src/lib/cdn/cdn.ts +++ b/typescript/server/src/lib/cdn/cdn.ts @@ -1,6 +1,6 @@ import type { Response } from "express"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ServerConfig } from "#lib/setup/config"; import fs from "fs"; import mkdirp from "mkdirp"; @@ -13,8 +13,6 @@ const readFilePromise = promisify(fs.readFile); const writeFilePromise = promisify(fs.writeFile); const rmFilePromise = promisify(fs.rm); -const logger = CreateLogCtx(__filename); - /** * Joins a file location against the location of the CDN static store. * @@ -23,7 +21,7 @@ const logger = CreateLogCtx(__filename); */ export function CDNFileSystemRoot(fileLoc: string) { if (ServerConfig.CDN_CONFIG.SAVE_LOCATION.TYPE !== "LOCAL_FILESYSTEM") { - logger.severe( + log.error( `Attempted to run CDNFileSystemRoot, but was not using LOCAL_FILESYSTEM as a CDN.`, { fileLoc, conf: ServerConfig.CDN_CONFIG }, ); @@ -43,7 +41,7 @@ export function CDNFileSystemRoot(fileLoc: string) { * As in, this ruins the purpose of a CDN! make sure you have one running. */ export function CDNRetrieve(fileLoc: string) { - logger.debug(`Retrieving path ${fileLoc} locally.`); + log.debug(`Retrieving path ${fileLoc} locally.`); return readFilePromise(CDNFileSystemRoot(fileLoc)); } @@ -56,7 +54,7 @@ export function CDNRedirect(res: Response, fileLoc: string) { throw new Error(`Invalid fileLoc - did not start with /.`); } - logger.debug(`CDN Redirecting to ${ServerConfig.CDN_CONFIG.WEB_LOCATION}${fileLoc}.`); + log.debug(`CDN Redirecting to ${ServerConfig.CDN_CONFIG.WEB_LOCATION}${fileLoc}.`); res.redirect(`${ServerConfig.CDN_CONFIG.WEB_LOCATION}${fileLoc}`); } @@ -65,7 +63,7 @@ export function CDNRedirect(res: Response, fileLoc: string) { * Stores a file at fileLoc. If it already exists, overwrite it. */ export async function CDNStoreOrOverwrite(fileLoc: string, data: string | Buffer): Promise { - logger.debug(`Storing or overwriting path ${fileLoc}.`); + log.debug(`Storing or overwriting path ${fileLoc}.`); if (ServerConfig.CDN_CONFIG.SAVE_LOCATION.TYPE === "LOCAL_FILESYSTEM") { const loc = CDNFileSystemRoot(fileLoc); @@ -83,7 +81,7 @@ export async function CDNStoreOrOverwrite(fileLoc: string, data: string | Buffer * Removes a file at this CDN location. */ export async function CDNDelete(fileLoc: string) { - logger.verbose(`Deleting path ${fileLoc}.`); + log.verbose(`Deleting path ${fileLoc}.`); if (ServerConfig.CDN_CONFIG.SAVE_LOCATION.TYPE === "LOCAL_FILESYSTEM") { const loc = CDNFileSystemRoot(fileLoc); diff --git a/typescript/server/src/lib/cdn/s3.ts b/typescript/server/src/lib/cdn/s3.ts index a79ef801b..8cb387512 100644 --- a/typescript/server/src/lib/cdn/s3.ts +++ b/typescript/server/src/lib/cdn/s3.ts @@ -1,15 +1,13 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ServerConfig } from "#lib/setup/config"; import { DeleteObjectCommand, PutObjectCommand, S3Client } from "@aws-sdk/client-s3"; -const logger = CreateLogCtx("S3 Client"); - let s3: S3Client | null = null; if (ServerConfig.CDN_CONFIG.SAVE_LOCATION.TYPE === "S3_BUCKET") { const data = ServerConfig.CDN_CONFIG.SAVE_LOCATION; - logger.info(`Using S3_BUCKET as CDN location.`, { bootInfo: true }); + log.info(`Using S3_BUCKET as CDN location.`, { bootInfo: true }); s3 = new S3Client({ endpoint: data.ENDPOINT, region: @@ -25,10 +23,10 @@ if (ServerConfig.CDN_CONFIG.SAVE_LOCATION.TYPE === "S3_BUCKET") { * Pushes a file to the configured S3 Bucket. Overwrites if already exists. */ export function PushToS3(path: string, content: string | Buffer) { - logger.debug(`Saving content on S3 at ${path}.`); + log.debug(`Saving content on S3 at ${path}.`); if (!s3 || ServerConfig.CDN_CONFIG.SAVE_LOCATION.TYPE !== "S3_BUCKET") { - logger.severe( + log.error( `Attempted to push to S3, but CDN_CONFIG.SAVE_LOCATION.TYPE was not S3_BUCKET?`, ServerConfig.CDN_CONFIG, ); @@ -51,7 +49,7 @@ export function PushToS3(path: string, content: string | Buffer) { */ export function DeleteFromS3(path: string) { if (!s3 || ServerConfig.CDN_CONFIG.SAVE_LOCATION.TYPE !== "S3_BUCKET") { - logger.severe( + log.error( `Attempted to delete from S3, but CDN_CONFIG.SAVE_LOCATION.TYPE was not S3_BUCKET?`, ServerConfig.CDN_CONFIG, ); diff --git a/typescript/server/src/lib/constants/version.ts b/typescript/server/src/lib/constants/version.ts index 1ce8b0e36..891e88027 100644 --- a/typescript/server/src/lib/constants/version.ts +++ b/typescript/server/src/lib/constants/version.ts @@ -1,51 +1,3 @@ -import { execSync } from "child_process"; -import fs from "fs"; -// Note that Version Info is intentionally identical between all variants of tachi -// viz. boku and kamai share versioning. This is because they -// essentially share codebases. -import CreateLogCtx from "#lib/logger/logger"; import { Env } from "#lib/setup/config"; -import path from "path"; -import semver from "semver"; -const logger = CreateLogCtx(__filename); - -// we want to read the monorepo root package.json. -const packageJSON = JSON.parse( - fs.readFileSync(path.join(__dirname, "../../../../package.json"), "utf-8"), -) as { version: string }; - -const semverInfo = semver.parse(packageJSON.version); - -if (!semverInfo) { - logger.warn( - `Couldn't parse semverInfo out of package.json? Got a string of '${packageJSON.version}', but couldn't parse. Defaulting to v0.0.0-unknown.`, - ); -} - -let commit: string | null = null; - -try { - if (Env.COMMIT_HASH) { - commit = Env.COMMIT_HASH; - } else { - // This fetches the HEAD of our current running branch. This is useful for debugging. - // Note that git returns this with a trailing newline, so we have to trim that off. - commit = execSync("git rev-parse --short HEAD").toString("utf-8").trim(); - } -} catch (err) { - logger.warn(`Failed to read what commit we're on -- Using null as our commit version.`, { - err, - }); -} - -export const VERSION_INFO = { - major: semverInfo?.major ?? 0, - minor: semverInfo?.minor ?? 0, - patch: semverInfo?.patch ?? 0, - commit, -}; - -export const VERSION_STR = semverInfo?.raw ?? "0.0.0-unknown"; - -export const VERSION_PRETTY = `v${VERSION_STR} [${commit}]`; +export const VERSION_PRETTY = `v${Env.VERSION} [${Env.COMMIT_HASH ?? "unknown commit"}]`; diff --git a/typescript/server/src/lib/email/client.ts b/typescript/server/src/lib/email/client.ts index 005396bb5..f371a7b34 100644 --- a/typescript/server/src/lib/email/client.ts +++ b/typescript/server/src/lib/email/client.ts @@ -1,14 +1,12 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { Env, ServerConfig } from "#lib/setup/config"; import bunyan from "bunyan"; import nodemailer, { type SentMessageInfo, type Transporter } from "nodemailer"; -const logger = CreateLogCtx(__filename); - let transporter: Transporter | undefined; if (ServerConfig.EMAIL_CONFIG) { - logger.info(`Connecting to email server...`, { bootInfo: true }); + log.info(`Connecting to email server...`, { bootInfo: true }); const conf = ServerConfig.EMAIL_CONFIG; try { @@ -23,18 +21,18 @@ if (ServerConfig.EMAIL_CONFIG) { transporter.verify((err) => { if (err) { - logger.crit(`Could not connect to email server.`, { err }); + log.fatal(`Could not connect to email server.`, { err }); throw err; } else { - logger.info(`Successfully connected to email server.`, { bootInfo: true }); + log.info(`Successfully connected to email server.`, { bootInfo: true }); } }); } catch (err) { - logger.crit(`Failed to create email client.`, { err }); + log.fatal(`Failed to create email client.`, { err }); throw err; } } else { - logger.warn(`No EMAIL_CONFIG present in conf, emails will not be sent from the server.`, { + log.warn(`No EMAIL_CONFIG present in conf, emails will not be sent from the server.`, { bootInfo: true, }); } @@ -46,16 +44,16 @@ export function SendEmail( textContent: string, ): Promise | undefined { if (Env.NODE_ENV === "test") { - logger.debug(`Stubbed out SendEmail as env was test.`); + log.debug(`Stubbed out SendEmail as env was test.`); return; } if (!transporter || !ServerConfig.EMAIL_CONFIG) { - logger.debug(`Stubbed out SendEmail as no EMAIL_CONFIG was set.`); + log.debug(`Stubbed out SendEmail as no EMAIL_CONFIG was set.`); return; } - logger.verbose(`Sending email to ${to}.`); + log.verbose(`Sending email to ${to}.`); return transporter .sendMail({ @@ -68,7 +66,7 @@ export function SendEmail( headers: transporter.options.headers, }) .catch((err: unknown) => { - logger.info(`Failed to send email to ${to}.`, { + log.info(`Failed to send email to ${to}.`, { err, subject, textContent, diff --git a/typescript/server/src/lib/game-settings/create-game-settings.ts b/typescript/server/src/lib/game-settings/create-game-settings.ts index 9b30c8e09..25fa9c6a3 100644 --- a/typescript/server/src/lib/game-settings/create-game-settings.ts +++ b/typescript/server/src/lib/game-settings/create-game-settings.ts @@ -1,10 +1,8 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import type { GameGroup, integer, Playtype } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - /** * Create GameSettings for a UGPT (which contains their preferences). */ @@ -16,7 +14,7 @@ export async function CreateGameSettings(userID: integer, game: GameGroup, playt }); if (exists) { - logger.error( + log.error( `Cannot create ${userID} ${game} ${playtype} game-settings as one already exists?`, ); @@ -51,5 +49,5 @@ export async function CreateGameSettings(userID: integer, game: GameGroup, playt rivals: [], }); - logger.info(`Created game settings for ${userID} (${game} ${playtype}).`); + log.info(`Created game settings for ${userID} (${game} ${playtype}).`); } diff --git a/typescript/server/src/lib/game-specific/custom-bms-tables.ts b/typescript/server/src/lib/game-specific/custom-bms-tables.ts index aadc34e72..f9e451048 100644 --- a/typescript/server/src/lib/game-specific/custom-bms-tables.ts +++ b/typescript/server/src/lib/game-specific/custom-bms-tables.ts @@ -1,7 +1,7 @@ import type { BMSTableHead, RawBMSTableEntry } from "bms-table-loader"; import type { Request, Response } from "express-serve-static-core"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { GetRivalUsers } from "#lib/rivals/rivals"; import { ServerConfig, TachiConfig } from "#lib/setup/config"; import { GetRelevantSongsAndCharts } from "#utils/db"; @@ -25,8 +25,6 @@ import { type TableDocument, } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - // Instead of just supporting existing tables, Tachi should also be able // to emit its own, custom BMS tables. These may be dynamic. @@ -48,7 +46,7 @@ function AppendAndConvertChartsToBMSBody( md5: chart.data.hashMD5, }); } else { - logger.warn(`BMS Chart md5=${chart.data.hashMD5} has no parent song.`); + log.warn(`BMS Chart md5=${chart.data.hashMD5} has no parent song.`); body.push({ level, md5: chart.data.hashMD5, @@ -80,7 +78,7 @@ export async function TachiTableToBMSTableJSON( const folder = folderMap.get(folderID); if (!folder) { - logger.warn( + log.warn( `Table '${table.title}' refers to folder '${folderID}', yet no such folder exists in the db?`, ); continue; @@ -229,7 +227,7 @@ export async function HandleBMSTableHeaderRequest( return res.status(200).send(header); } catch (err) { - logger.error(`Failed to load header.json for table ${bmsTable.tableName}.`, { + log.error(`Failed to load header.json for table ${bmsTable.tableName}.`, { bmsTable, err, }); @@ -257,7 +255,7 @@ export async function HandleBMSTableBodyRequest( return res.status(200).send(body); } catch (err) { - logger.error(`Failed to load body.json for table ${bmsTable.tableName}.`, { + log.error(`Failed to load body.json for table ${bmsTable.tableName}.`, { bmsTable, err, }); diff --git a/typescript/server/src/lib/game-specific/iidx-playlists.ts b/typescript/server/src/lib/game-specific/iidx-playlists.ts index b4dbf9c7e..29744d122 100644 --- a/typescript/server/src/lib/game-specific/iidx-playlists.ts +++ b/typescript/server/src/lib/game-specific/iidx-playlists.ts @@ -1,11 +1,9 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { PoyashiBPI } from "rg-stats"; import type { ChartDocument, integer, Playtypes } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - interface PlaylistEntry { entry_id: integer; difficulty: "another" | "beginner" | "hyper" | "leggendaria" | "normal"; @@ -55,7 +53,7 @@ function ChartsToPlaylistFormat( if (el === undefined) { // wut, chart has an empty array of ingameids? - logger.warn(`Chart '${chart.chartID}' has an empty array of inGameIDs.`); + log.warn(`Chart '${chart.chartID}' has an empty array of inGameIDs.`); continue; } diff --git a/typescript/server/src/lib/handlers/sigterm.ts b/typescript/server/src/lib/handlers/sigterm.ts index 146571172..f55a6f44b 100644 --- a/typescript/server/src/lib/handlers/sigterm.ts +++ b/typescript/server/src/lib/handlers/sigterm.ts @@ -1,16 +1,14 @@ import type http from "http"; import type https from "https"; -import { rootLogger } from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CloseScoreImportQueue } from "#lib/score-import/worker/queue"; import { monkDB } from "#services/mongo/db"; import { ClosePgConnection } from "#services/pg/db.js"; import { CloseRedisConnection } from "#services/redis/redis"; -const logger = rootLogger; - export function HandleSIGTERMGracefully(instance?: http.Server | https.Server) { - logger.info("SIGTERM Received, closing program.", { shutdownInfo: true }); + log.info("SIGTERM Received, closing program.", { shutdownInfo: true }); if (instance) { instance.close(() => CloseEverythingElse()); @@ -20,19 +18,19 @@ export function HandleSIGTERMGracefully(instance?: http.Server | https.Server) { } async function CloseEverythingElse() { - logger.info("Closing Mongo Database.", { shutdownInfo: true }); + log.info("Closing Mongo Database.", { shutdownInfo: true }); await monkDB.close(); - logger.info("Closing database...", { shutdownInfo: true }); + log.info("Closing database...", { shutdownInfo: true }); await ClosePgConnection(); - logger.info("Closing Redis Connection.", { shutdownInfo: true }); + log.info("Closing Redis Connection.", { shutdownInfo: true }); await CloseRedisConnection(); - logger.info("Closing Score Import Queue.", { shutdownInfo: true }); + log.info("Closing Score Import Queue.", { shutdownInfo: true }); await CloseScoreImportQueue(); - logger.info("Everything closed. Waiting for process to exit naturally.", { + log.info("Everything closed. Waiting for process to exit naturally.", { shutdownInfo: true, }); } diff --git a/typescript/server/src/lib/imports/imports.ts b/typescript/server/src/lib/imports/imports.ts index a9550dcad..40078891d 100644 --- a/typescript/server/src/lib/imports/imports.ts +++ b/typescript/server/src/lib/imports/imports.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CheckAndSetOngoingImportLock, UnsetOngoingImportLock, @@ -8,8 +8,6 @@ import db from "#services/mongo/db"; import type { ImportDocument } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - interface OngoingImportError { tag: "ONGOING_IMPORT"; } @@ -22,16 +20,14 @@ interface OngoingImportError { * If this results in sessions being deleted, it will delete them. */ export async function RevertImport(importDoc: ImportDocument): Promise { - logger.info(`Received revert-import request for import '${importDoc.importID}'`, { importDoc }); + log.info(`Received revert-import request for import '${importDoc.importID}'`, { importDoc }); const scores = await GetImportScores(importDoc); const hasNoOngoingImport = await CheckAndSetOngoingImportLock(importDoc.userID); if (hasNoOngoingImport) { - logger.info( - `User ${importDoc.userID} tried to revert an import while they had one ongoing.`, - ); + log.info(`User ${importDoc.userID} tried to revert an import while they had one ongoing.`); return { tag: "ONGOING_IMPORT", @@ -41,7 +37,7 @@ export async function RevertImport(importDoc: ImportDocument): Promise>; - logger.info( + log.info( `Found ${existingCharts.length} existing chart(s) in the database for table ${prefix}.`, ); @@ -89,7 +87,7 @@ async function HandleTableRemovals( return; } - logger.info(`Removing ${toRemove.length} chart(s) from ${prefix}.`); + log.info(`Removing ${toRemove.length} chart(s) from ${prefix}.`); // remove this table info from all of the charts that no longer // exist in the table. @@ -115,7 +113,7 @@ async function ImportTableLevels( let success = 0; const total = tableEntries.length; - logger.info(`Handling removals for ${playtype}:${prefix}...`); + log.info(`Handling removals for ${playtype}:${prefix}...`); await HandleTableRemovals(tableEntries, playtype, prefix); const md5s = tableEntries.filter((e) => e.checksum.type === "md5").map((e) => e.checksum.value); @@ -183,7 +181,7 @@ async function ImportTableLevels( } if (!chart) { - logger.warn( + log.warn( `No chart exists in table for (${td.checksum.type}=${td.checksum.value} Possible title: ${td.content.title} ${prefix}${td.content.level}`, ); failures++; @@ -228,16 +226,16 @@ async function ImportTableLevels( success++; } - logger.info(`Finished updating table ${prefix}.`); - logger.info(`${success} Success | ${failures} Failures | ${total} Total.`); + log.info(`Finished updating table ${prefix}.`); + log.info(`${success} Success | ${failures} Failures | ${total} Total.`); } export async function UpdateTable(tableInfo: BMSTableInfo) { const table = await LoadBMSTable(tableInfo.url); - logger.info(`Bumping levels...`); + log.info(`Bumping levels...`); await ImportTableLevels(table.body, tableInfo.prefix, tableInfo.playtype); - logger.info(`Levels bumped.`); + log.info(`Levels bumped.`); } export async function SyncBMSTables() { @@ -245,13 +243,13 @@ export async function SyncBMSTables() { try { await UpdateTable(table); } catch (err) { - logger.error(`Failed to update table ${table.name} (${table.url}).`, { err }); + log.error(`Failed to update table ${table.name} (${table.url}).`, { err }); } } - logger.info(`Re-initialising folder-chart-lookup, since changes may have been made.`); + log.info(`Re-initialising folder-chart-lookup, since changes may have been made.`); await InitaliseFolderChartLookup(); - logger.info(`Done.`); + log.info(`Done.`); } if (require.main === module) { diff --git a/typescript/server/src/lib/jobs/deorphan-scores.ts b/typescript/server/src/lib/jobs/deorphan-scores.ts index e3c918176..38818d1ca 100644 --- a/typescript/server/src/lib/jobs/deorphan-scores.ts +++ b/typescript/server/src/lib/jobs/deorphan-scores.ts @@ -1,17 +1,15 @@ // Attempt to deoprhan lost scores. -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { DeorphanScores } from "#lib/score-import/framework/orphans/orphans"; import { WrapScriptPromise } from "#utils/misc"; -const logger = CreateLogCtx(__dirname); - export async function DeorphanScoresMain() { const { success, failed, removed } = await DeorphanScores({}, logger); - logger.info(`Finished attempting deorphaning.`); + log.info(`Finished attempting deorphaning.`); - logger.info(`Success: ${success} | Failed ${failed} | Removed ${removed}.`); + log.info(`Success: ${success} | Failed ${failed} | Removed ${removed}.`); } if (require.main === module) { diff --git a/typescript/server/src/lib/jobs/inline-job-runner/job-runner.ts b/typescript/server/src/lib/jobs/inline-job-runner/job-runner.ts index 1109560bc..e43c93f66 100644 --- a/typescript/server/src/lib/jobs/inline-job-runner/job-runner.ts +++ b/typescript/server/src/lib/jobs/inline-job-runner/job-runner.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { TachiConfig } from "#lib/setup/config"; import { DedupeArr } from "#utils/misc"; import { Queue, Worker } from "bullmq"; @@ -69,19 +69,17 @@ if (TachiConfig.TYPE !== "kamai") { }); } -const logger = CreateLogCtx("JOB_RUNNER"); - /** * Initalises a tachi-server job runner. * This runs the list of jobs defined in jobConfig.jobs. */ export function InitialiseJobRunner() { - logger.info(`Booting up Job Runner.`); + log.info(`Booting up Job Runner.`); const names = jobs.map((e) => e.name); if (DedupeArr(names).length !== names.length) { - logger.crit(`Jobs has duplicate name fields, refusing to run.`, () => { + log.fatal(`Jobs has duplicate name fields, refusing to run.`, () => { process.exit(1); }); } @@ -98,12 +96,12 @@ export function InitialiseJobRunner() { const worker = new Worker("Job Runner", async (j) => { const { jobName } = j.data as { jobName: string }; - logger.info(`Running job ${jobName}.`); + log.info(`Running job ${jobName}.`); const jobInfo = jobNameMap.get(jobName); if (!jobInfo) { - logger.severe(`Unknown job name ${jobName}, couldn't find a run function?`); + log.error(`Unknown job name ${jobName}, couldn't find a run function?`); return false; } @@ -112,7 +110,7 @@ export function InitialiseJobRunner() { return true; }); - logger.info(`Initialised ${jobs.length} jobs (${jobs.map((e) => e.name).join(", ")}).`); + log.info(`Initialised ${jobs.length} jobs (${jobs.map((e) => e.name).join(", ")}).`); return worker; } diff --git a/typescript/server/src/lib/jobs/ugs-snapshot.ts b/typescript/server/src/lib/jobs/ugs-snapshot.ts index a638453e8..56d690d0b 100644 --- a/typescript/server/src/lib/jobs/ugs-snapshot.ts +++ b/typescript/server/src/lib/jobs/ugs-snapshot.ts @@ -1,12 +1,10 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { GetMillisecondsSince } from "#utils/misc"; import { GetAllRankings } from "#utils/user"; import type { UserGameStats, UserGameStatsSnapshotDocument } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - // get the time of this midnight. it's possible this script eclipses itself when weird timezone // nonsense happens. we'll have to see. const currentTime = new Date().setUTCHours(0, 0, 0, 0); @@ -21,7 +19,7 @@ export async function UGSSnapshot() { const alreadyExists = await db["game-stats-snapshots"].findOne({ timestamp: currentTime }); if (alreadyExists) { - logger.warn( + log.warn( `There already exists snapshots at this time. Has this script been ran twice on one day? Ignoring request.`, ); @@ -30,7 +28,7 @@ export async function UGSSnapshot() { ); } - logger.info(`Snapshotting UserGameStats.`); + log.info(`Snapshotting UserGameStats.`); try { await db["game-stats"] @@ -40,7 +38,7 @@ export async function UGSSnapshot() { .each(async (ugs: UserGameStats, { pause, resume }) => { pause(); - logger.debug(`Snapshotting ${ugs.userID} ${ugs.playtype} ${ugs.game}.`); + log.debug(`Snapshotting ${ugs.userID} ${ugs.playtype} ${ugs.game}.`); const [playcount, rankings] = await Promise.all([ db.scores.count({ userID: ugs.userID, playtype: ugs.playtype, game: ugs.game }), @@ -57,7 +55,7 @@ export async function UGSSnapshot() { batchWrite.push(ugsSnapshot); if (batchWrite.length >= 500) { - logger.verbose(`Flushed batch.`); + log.verbose(`Flushed batch.`); await db["game-stats-snapshots"].insert(batchWrite); batchWrite = []; @@ -70,22 +68,22 @@ export async function UGSSnapshot() { await db["game-stats-snapshots"].insert(batchWrite); } - logger.info( + log.info( `Successfully snapshotted all data as of ${new Date( currentTime, ).toString()}. Took ${GetMillisecondsSince(timeStart)} ms.`, ); } catch (err) { // if we panic, we need to revert whatever we did. - logger.severe(`FATAL IN UGS-SNAPSHOT - Possibly failed midway through snapshotting.`, { + log.error(`FATAL IN UGS-SNAPSHOT - Possibly failed midway through snapshotting.`, { err, }); - logger.info(`Removing all snapshots at this timestamp (${currentTime}).`); + log.info(`Removing all snapshots at this timestamp (${currentTime}).`); await db["game-stats-snapshots"].remove({ timestamp: currentTime }); - logger.info(`Removed.`); + log.info(`Removed.`); throw err; } @@ -98,7 +96,7 @@ if (require.main === module) { }) .catch((err: unknown) => { // This is a severe error, not an error. Running the UGS snapshot every day is necessary. - logger.severe(`Failed to snapshot user game stats.`, { err }); + log.error(`Failed to snapshot user game stats.`, { err }); setTimeout(() => { process.exit(1); diff --git a/typescript/server/src/lib/jobs/update-bpi-data.ts b/typescript/server/src/lib/jobs/update-bpi-data.ts index f328aa850..24e2564df 100644 --- a/typescript/server/src/lib/jobs/update-bpi-data.ts +++ b/typescript/server/src/lib/jobs/update-bpi-data.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { BacksyncCollection, PullDatabaseSeeds } from "#lib/seeds/repo"; import db from "#services/mongo/db"; import { RecalcAllScores } from "#utils/calculations/recalc-scores"; @@ -14,8 +14,6 @@ import type { Versions, } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - const difficultyResolve: Record = { 3: ["SP", "HYPER"], @@ -56,12 +54,12 @@ interface PoyashiProxyData { export async function UpdatePoyashiData() { const repo = await PullDatabaseSeeds(); - logger.info("Fetching data from proxy..."); + log.info("Fetching data from proxy..."); const data = (await fetch("https://proxy.poyashi.me/?type=bpi").then((r) => r.json(), )) as PoyashiProxyData; - logger.info("Fetched data."); + log.info("Fetched data."); const iidxSongs: Array> = await repo.ReadCollection("songs-iidx"); const iidxCharts: Array> = @@ -114,7 +112,7 @@ export async function UpdatePoyashiData() { const tachiSong = FindSongOnTitle(d.title); if (!tachiSong) { - logger.warn(`Cannot find song ${d.title}?`); + log.warn(`Cannot find song ${d.title}?`); continue; } @@ -122,7 +120,7 @@ export async function UpdatePoyashiData() { const tachiChart = FindChartWithPTDFVersion(tachiSong.id, playtype, diff, "29"); if (!tachiChart) { - logger.warn( + log.warn( `Cannot find chart ${tachiSong.title} (${tachiSong.id}) ${playtype}, ${diff}?`, ); continue; @@ -131,14 +129,12 @@ export async function UpdatePoyashiData() { const kavg = Number(d.avg); if (kavg < 0) { - logger.warn( - `${tachiSong.title} (${playtype} ${diff}). Invalid kavg ${d.avg}, Skipping.`, - ); + log.warn(`${tachiSong.title} (${playtype} ${diff}). Invalid kavg ${d.avg}, Skipping.`); continue; } if (d.removed === true) { - logger.info(`Skipping removed chart ${tachiSong.title}.`); + log.info(`Skipping removed chart ${tachiSong.title}.`); continue; } @@ -164,15 +160,15 @@ export async function UpdatePoyashiData() { await repo.WriteCollection("charts-iidx", iidxCharts); if (updatedChartIDs.length !== 0) { - logger.info(`Finished applying BPI changes. These changes will be backsynced later.`); + log.info(`Finished applying BPI changes. These changes will be backsynced later.`); - logger.info(`Recalcing scores.`); + log.info(`Recalcing scores.`); await RecalcAllScores({ game: "iidx", chartID: { $in: updatedChartIDs }, }); - logger.info(`Finished recalcing scores.`); + log.info(`Finished recalcing scores.`); } await repo.Destroy(); diff --git a/typescript/server/src/lib/jobs/update-dp-tiers.ts b/typescript/server/src/lib/jobs/update-dp-tiers.ts index 50119182c..3a7d280e1 100644 --- a/typescript/server/src/lib/jobs/update-dp-tiers.ts +++ b/typescript/server/src/lib/jobs/update-dp-tiers.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { BacksyncCollection } from "#lib/seeds/repo"; /* eslint-disable no-await-in-loop */ import db from "#services/mongo/db"; @@ -9,8 +9,6 @@ import { FindSongOnTitle } from "#utils/queries/songs"; import { decode } from "html-entities"; import { parse } from "node-html-parser"; -const logger = CreateLogCtx(__filename); - export async function UpdateDPTiers() { const rawHTML = await fetch("https://zasa.sakura.ne.jp/dp/run.php").then((r) => r.text()); @@ -40,7 +38,7 @@ export async function UpdateDPTiers() { }); } - logger.info(`Got DP tier data. Applying it.`); + log.info(`Got DP tier data. Applying it.`); const updatedSongIDs = new Set(); @@ -49,7 +47,7 @@ export async function UpdateDPTiers() { const song = await FindSongOnTitle("iidx", d.songTitle); if (!song) { - logger.warn(`Couldn't find song with title ${d.songTitle}.`); + log.warn(`Couldn't find song with title ${d.songTitle}.`); return; } @@ -84,9 +82,7 @@ export async function UpdateDPTiers() { ); if (updatedSongIDs.size !== 0) { - logger.info( - `${updatedSongIDs.size} songs were changed. Recalcing the relevant scores now.`, - ); + log.info(`${updatedSongIDs.size} songs were changed. Recalcing the relevant scores now.`); await RecalcAllScores({ game: "iidx", @@ -94,12 +90,12 @@ export async function UpdateDPTiers() { songID: { $in: [...updatedSongIDs.values()] }, }); - logger.info(`Recalced those scores.`); + log.info(`Recalced those scores.`); await BacksyncCollection("charts-iidx", db.charts.iidx, "Update DP Tierlist"); } - logger.info("Done."); + log.info("Done."); } /** diff --git a/typescript/server/src/lib/jobs/update-sp12-data.ts b/typescript/server/src/lib/jobs/update-sp12-data.ts index ef3d2b26c..bc2893620 100644 --- a/typescript/server/src/lib/jobs/update-sp12-data.ts +++ b/typescript/server/src/lib/jobs/update-sp12-data.ts @@ -2,7 +2,7 @@ import type { ChartDocument, Difficulties, integer } from "../../../../common/sr /* eslint-disable no-await-in-loop */ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { BacksyncCollection } from "#lib/seeds/repo"; import db from "#services/mongo/db"; import { RecalcAllScores } from "#utils/calculations/recalc-scores"; @@ -12,8 +12,6 @@ import { FindSongOnTitle } from "#utils/queries/songs"; import fetch from "node-fetch"; import { p } from "prudence"; -const logger = CreateLogCtx(__filename); - interface SP12Data { id: integer; title: string; @@ -49,7 +47,7 @@ async function FetchSP12Data() { }); if (err) { - logger.error(`Got invalid/unexpected content from sp12.`, { unvalidatedRJ }); + log.error(`Got invalid/unexpected content from sp12.`, { unvalidatedRJ }); throw new Error(`Got invalid/unexpected content from sp12.`); } @@ -66,7 +64,7 @@ async function FetchSP12Data() { try { chart = await HumanisedTitleLookup(sh.title); } catch (err) { - logger.error((err as Error).message); + log.error((err as Error).message); continue; } @@ -189,21 +187,21 @@ async function FetchSP12Data() { }, ); - logger.info(`Saved ${sh.title} value ${key} = ${val} (${text}).`); + log.info(`Saved ${sh.title} value ${key} = ${val} (${text}).`); } } if (updatedChartIDs.length !== 0) { - logger.info(`Finished applying SP12 changes. Recalcing.`); - logger.info("These changes will be backsynced by a separate script."); + log.info(`Finished applying SP12 changes. Recalcing.`); + log.info("These changes will be backsynced by a separate script."); - logger.info(`Recalcing scores.`); + log.info(`Recalcing scores.`); await RecalcAllScores({ game: "iidx", chartID: { $in: updatedChartIDs }, }); - logger.info(`Finished recalcing scores.`); + log.info(`Finished recalcing scores.`); await BacksyncCollection("charts-iidx", db.charts.iidx, "Update SP12 Tierlist"); } diff --git a/typescript/server/src/lib/logger/log.ts b/typescript/server/src/lib/logger/log.ts new file mode 100644 index 000000000..1a18e3e78 --- /dev/null +++ b/typescript/server/src/lib/logger/log.ts @@ -0,0 +1,31 @@ +import pino from "pino"; + +export type KtLogger = pino.Logger; + +// Use JSON log lines when LOG_JSON=1 (dev/prod); otherwise pretty format for localdev. +// Deliberately process.env here instead of importing ENV to avoid a circular dep. +const useJson = process.env.LOG_JSON === "1" || process.env.LOG_JSON === "true"; + +export const log = pino({ + level: process.env.LOG_LEVEL ?? "info", + ...(useJson + ? {} + : { + transport: { + options: { colorize: true }, + target: "pino-pretty", + }, + }), +}); + +export function AppendLogCtx(context: string, parent: KtLogger = log): KtLogger { + return parent.child({ context }); +} + +export function ChangeRootLogLevel(level: string): void { + log.level = level; +} + +export function GetLogLevel(): string { + return log.level; +} diff --git a/typescript/server/src/lib/logger/logger.test.ts b/typescript/server/src/lib/logger/logger.test.ts deleted file mode 100644 index dae8e4de5..000000000 --- a/typescript/server/src/lib/logger/logger.test.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Env, ServerConfig } from "#lib/setup/config"; -import t from "tap"; - -import CreateLogCtx, { ChangeRootLogLevel, GetLogLevel, rootLogger, Transports } from "./logger"; - -const LOG_LEVEL = Env.LOG_LEVEL; - -t.test("Logger Tests", (t) => { - const logger = CreateLogCtx(__filename); - - if (!Transports[0]) { - throw new Error(`No transports were defined? Can't perform logger tests.`); - } - - // lol - Transports[0].level = "debug"; - - logger.debug("Debug Message Test"); - logger.verbose("Verbose Message Test"); - logger.info("Info Message Test"); - logger.warn("Warning Message Test"); - logger.error("Error Message Test"); - logger.severe("Severe Message Test"); - logger.crit("Critical Message Test"); - - Transports[0].level = process.env.LOG_LEVEL ?? "info"; - - logger.debug("This message shouldn't appear."); - - t.end(); -}); - -t.test("#GetLogLevel", (t) => { - t.equal(GetLogLevel(), LOG_LEVEL); - - ChangeRootLogLevel("crit"); - t.equal(GetLogLevel(), "crit"); - - ChangeRootLogLevel(LOG_LEVEL); - t.equal(GetLogLevel(), LOG_LEVEL); - - t.end(); -}); - -t.test("#ChangeRootLogLevel", (t) => { - t.test("Should work with the root logger.", (t) => { - rootLogger.info("The below message should appear."); - - ChangeRootLogLevel("verbose"); - rootLogger.verbose("== SHOULD APPEAR =="); - - ChangeRootLogLevel("info"); - - rootLogger.info("The below message SHOULD NOT appear."); - - rootLogger.verbose("== SHOULD NOT APPEAR =="); - - t.end(); - }); - - t.end(); -}); diff --git a/typescript/server/src/lib/logger/logger.ts b/typescript/server/src/lib/logger/logger.ts deleted file mode 100644 index d42058a93..000000000 --- a/typescript/server/src/lib/logger/logger.ts +++ /dev/null @@ -1,197 +0,0 @@ -import { Env, TachiConfig } from "#lib/setup/config"; -import { EscapeStringRegexp } from "#utils/misc"; -import SafeJSONStringify from "safe-json-stringify"; -import winston, { format, type LeveledLogMethod, type Logger, transports } from "winston"; - -export type KtLogger = { severe: LeveledLogMethod } & Logger; - -const level = process.env.LOG_LEVEL; - -const formatExcessProperties = (meta: Record, limit = false) => { - let i = 0; - - for (const [key, val] of Object.entries(meta)) { - // this is probably fine - if (val instanceof Error) { - meta[key] = { message: val.message, stack: val.stack }; - } - - i++; - } - - if (!i) { - return ""; - } - - const content = SafeJSONStringify(meta); - - return ` ${limit ? StrCap(content) : content}`; -}; - -function StrCap(string: string) { - if (string.length > 300) { - return `${string.slice(0, 297)}...`; - } - - return string; -} - -const formatExcessPropertiesNoStack = ( - meta: Record, - omitKeys: Array = [], - limit = false, -) => { - const realMeta: Record = {}; - - for (const [key, val] of Object.entries(meta)) { - if (omitKeys.includes(key)) { - continue; - } - - // this is probably fine - if (val instanceof Error) { - realMeta[key] = { message: val.message }; - } else if (!key.startsWith("__") && !key.startsWith("!")) { - realMeta[key] = val; - } - } - - if (Object.keys(realMeta).length === 0) { - return ""; - } - - const content = SafeJSONStringify(realMeta); - - return ` ${limit ? StrCap(content) : content}`; -}; - -const tachiPrintf = format.printf( - ({ level, message, context = "tachi-root", timestamp, ...meta }) => - `${timestamp} [${ - Array.isArray(context) ? context.join(" | ") : context - }] ${level}: ${message}${formatExcessProperties(meta)}`, -); - -const tachiConsolePrintf = format.printf( - ({ level, message, context = "tachi-root", timestamp, hideFromConsole, ...meta }) => - `${timestamp} [${ - Array.isArray(context) ? context.join(" | ") : context - }] ${level}: ${message}${formatExcessPropertiesNoStack( - meta, - hideFromConsole as Array, - true, - )}`, -); - -winston.addColors({ - crit: ["bgRed", "black"], - severe: ["bgBrightRed", "black"], - error: ["red"], - warn: ["yellow"], - info: ["cyan"], - verbose: ["white"], - debug: ["white"], -}); - -const baseFormatRoute = format.combine( - format.timestamp({ - format: "YYYY-MM-DD HH:mm:ss", - }), -); - -const defaultFormatRoute = format.combine( - baseFormatRoute, - format.errors({ stack: false }), - tachiPrintf, -); - -const consoleFormatRoute = format.combine( - baseFormatRoute, - format.errors({ stack: false }), - tachiConsolePrintf, - format.colorize({ - all: true, - }), -); - -const tports: Array = [ - new transports.Console({ - format: consoleFormatRoute, - }), -]; - -export const rootLogger = winston.createLogger({ - levels: { - // entire process termination is necessary - crit: 0, - - // something is wrong, and more than one function is affected (such as a failed assertion that is definitely expected to be true). - severe: 1, - - // function call (or related process) has failed unexpectedly - error: 2, - - // function call has hit something it didn't want, but can recover - warn: 3, - - // something has happened that is expected, but worth logging - info: 4, - - // something has happened - verbose: 5, - - // glorified console.log debugging - debug: 6, - }, - level, - format: defaultFormatRoute, - transports: tports, - defaultMeta: { - __ServerName: TachiConfig.NAME, - __Worker: !!process.env.IS_WORKER, - }, -}) as KtLogger; - -function CreateLogCtx(filename: string, lg = rootLogger): KtLogger { - const replacedFilename = filename.replace( - new RegExp(`^${EscapeStringRegexp(process.cwd())}/((js|src)/)?`, "u"), - "", - ); - - const logger = lg.child({ - context: [replacedFilename], - }) as KtLogger; - - // @hack, defaultMeta isn't reactive -- won't be updated unless we do this. - - logger.defaultMeta = { ...(logger.defaultMeta ?? {}), context: [replacedFilename] }; - - return logger; -} - -export function AppendLogCtx(context: string, lg: KtLogger): KtLogger { - const newContext = [...lg.defaultMeta.context, context]; - - return lg.child({ context: newContext }) as KtLogger; -} - -export function ChangeRootLogLevel( - level: "crit" | "debug" | "error" | "info" | "severe" | "verbose" | "warn", -) { - rootLogger.info(`Changing log level to ${level}.`); - - for (const tp of rootLogger.transports) { - tp.level = level; - } -} - -export function GetLogLevel() { - return ( - rootLogger.transports.map((e) => e.level).find((e) => typeof e === "string") ?? - Env.LOG_LEVEL - ); -} - -export const Transports = rootLogger.transports; - -export default CreateLogCtx; diff --git a/typescript/server/src/lib/migration/migrations.test.ts b/typescript/server/src/lib/migration/migrations.test.ts deleted file mode 100644 index a1efd9f1f..000000000 --- a/typescript/server/src/lib/migration/migrations.test.ts +++ /dev/null @@ -1,127 +0,0 @@ -import db from "#services/mongo/db"; -import ResetDBState from "#test-utils/resets"; -import t from "tap"; - -import { ApplyMigration, FAKE_MIGRATION, FindUnappliedMigrations } from "./migrations"; - -t.test("#FindUnappliedMigrations", (t) => { - t.beforeEach(ResetDBState); - - t.test("Should find all unapplied migrations", async (t) => { - const res = await FindUnappliedMigrations(); - - t.equal( - res.includes("fake-migration"), - true, - "Should contain fake-migration since it isn't applied.", - ); - - t.end(); - }); - - t.test("Shouldn't return pending migrations", async (t) => { - await db.migrations.insert({ - migrationID: "fake-migration", - status: "pending", - }); - - const res = await FindUnappliedMigrations(); - - t.equal(res.includes("fake-migration"), false); - - t.end(); - }); - - t.test("Shouldn't return applied migrations", async (t) => { - await db.migrations.insert({ - migrationID: "fake-migration", - status: "applied", - appliedOn: 1000, - }); - - const res = await FindUnappliedMigrations(); - - t.equal(res.includes("fake-migration"), false); - - t.end(); - }); - - t.end(); -}); - -t.test("#ApplyMigration", (t) => { - t.beforeEach(ResetDBState); - - t.test("Should apply a migration.", async (t) => { - await ApplyMigration(FAKE_MIGRATION); - - const dbRes = await db.users.findOne({ - id: 1, - }); - - t.equal( - // @ts-expect-error Our migration is a fake one that adds __wasMigrated - // to all user documents. There's nothing special about this property name. - dbRes?.__wasMigrated, - true, - "Migration should be applied on the users.", - ); - - t.end(); - }); - - t.test("Should panic and reset if something goes wrong.", async (t) => { - try { - await ApplyMigration({ - id: "bad-migration", - up: () => { - throw new Error("Failed to migrate."); - }, - down: () => - db.users.update({}, { $set: { __wasUnmigrated: true } }, { multi: true }), - }); - } catch (e) { - const err = e as Error; - - t.equal(err.message, "Was going to exit with statusCode 1, but we're in testing."); - } - - const dbRes = await db.users.findOne({ - id: 1, - }); - - t.equal( - // @ts-expect-error Our un-migration adds this property to check if it worked. - dbRes?.__wasUnmigrated, - true, - "Migration should be applied on the users.", - ); - - t.end(); - }); - - t.test( - "Should panic and panic again if un-migration failed, with a scarier log message.", - async (t) => { - try { - await ApplyMigration({ - id: "bad-migration", - up: () => { - throw new Error("Failed to migrate."); - }, - down: () => { - throw new Error("Failed to undo migration."); - }, - }); - } catch (e) { - const err = e as Error; - - t.equal(err.message, "Was going to exit with statusCode 1, but we're in testing."); - } - - t.end(); - }, - ); - - t.end(); -}); diff --git a/typescript/server/src/lib/migration/migrations.ts b/typescript/server/src/lib/migration/migrations.ts deleted file mode 100644 index 5c22849b5..000000000 --- a/typescript/server/src/lib/migration/migrations.ts +++ /dev/null @@ -1,280 +0,0 @@ -import type { Migration } from "#utils/types"; - -import CreateLogCtx from "#lib/logger/logger"; -import { Env, TachiConfig } from "#lib/setup/config"; -import db from "#services/mongo/db"; - -import UserFollowersMigration from "./migrations/add-following-to-users"; -import AddLockedAt from "./migrations/add-lockedat"; -import UGPTAddPreferredRanking from "./migrations/add-preferredRanking-to-ugpt"; -import UGPTRivalsMigration from "./migrations/add-rivals-to-ugpt"; -import ChunithmFixPreferredDefaultEnum from "./migrations/chunithm-fix-preferred-default-enum"; -import ChunithmLampSplit from "./migrations/chunithm-lamp-split"; -import FixUndefinedBMSData from "./migrations/fix-undefined-bms-data"; -import JoinINFCastHourCharts from "./migrations/join-inf-casthour-charts"; -import JoinINFCastHourSongs from "./migrations/join-inf-casthour-songs"; -import KtRatingToCuratorSkill from "./migrations/ktRating-to-curator-skill"; -import MaimaiDXFixLamps from "./migrations/maimaidx-fix-lamps"; -import MarkFervidexAsWithoutIntent from "./migrations/mark-fervidex-as-without-intent"; -import MarkKsHookAsWithoutIntent from "./migrations/mark-kshook-as-without-intent"; -import NullLR2HookFailedBPs from "./migrations/null-lr2hook-failed-bps"; -import OngekiV2 from "./migrations/ongeki-v2"; -import RemoveAbove100pc from "./migrations/remove-above-100pc"; -import RemoveIIDXBeginners from "./migrations/remove-iidx-beginners"; -import RemoveIIDX2dxtraBeginners from "./migrations/remove-iidx-extra-beginners"; -import RemoveMultifolderStats from "./migrations/remove-multifolder-stats"; -import RemoveRandom from "./migrations/remove-random"; -import RemoveSessionViews from "./migrations/remove-session-views"; -import RmHot from "./migrations/rm-hot"; - -// import SdvxMaxxiveGoals from "./migrations/sdvx-maxxive-goals"; -// import SdvxMaxxiveLampRearrange from "./migrations/sdvx-maxxive-lamp-rearrange"; -import SessionsToScoreIDs from "./migrations/sessions-to-scoreIDs"; -import UpdateJubeatPreferredTables from "./migrations/update-jubeat-preferred-tables"; -import V3PropsMigration from "./migrations/v3-props"; -import V3ScoresMigration from "./migrations/v3-scores"; - -const logger = CreateLogCtx(__filename); - -// NOTE: This is declared here, and NOT in test-utils. If any runtime file attempts to depend -// on test-utils, the server will not boot. - -export const FAKE_MIGRATION: Migration = { - id: "fake-migration", - up: () => db.users.update({}, { $set: { __wasMigrated: true } }, { multi: true }), - down: () => db.users.update({}, { $unset: { __wasMigrated: 1 } }, { multi: true }), -}; - -// Migrations are stored in an array because they have some concept of order -// That is, migrations should ideally be applied in a fixed order just to avoid -// any potential unsavoury interactions. -// If we're testing, we should pull fake migrations instead to ensure the tests -// stay consistent -const REGISTERED_MIGRATIONS: Array = - Env.NODE_ENV === "test" - ? [FAKE_MIGRATION] - : [ - UGPTRivalsMigration, - RemoveMultifolderStats, - UGPTAddPreferredRanking, - UserFollowersMigration, - RemoveSessionViews, - SessionsToScoreIDs, - V3PropsMigration, - V3ScoresMigration, - AddLockedAt, - ]; - -// only apply type-specific migrations if we're not in testing -if (Env.NODE_ENV !== "test") { - // kamaitachi specific migrations - if (TachiConfig.TYPE !== "boku") { - REGISTERED_MIGRATIONS.push( - RemoveIIDXBeginners, - UpdateJubeatPreferredTables, - JoinINFCastHourCharts, - JoinINFCastHourSongs, - MarkFervidexAsWithoutIntent, - MarkKsHookAsWithoutIntent, - KtRatingToCuratorSkill, - RemoveIIDX2dxtraBeginners, - RmHot, - ChunithmLampSplit, - OngekiV2, - ChunithmFixPreferredDefaultEnum, - // SdvxMaxxiveLampRearrange, - // SdvxMaxxiveGoals, - MaimaiDXFixLamps, - ); - } - - // bokutachi specific migrations - if (TachiConfig.TYPE !== "kamai") { - REGISTERED_MIGRATIONS.push( - NullLR2HookFailedBPs, - FixUndefinedBMSData, - RemoveRandom, - RemoveAbove100pc, - ); - } -} - -function CreateMigrationLookupMap(migrations: Array) { - const map = new Map(); - - for (const mig of migrations) { - if (map.get(mig.id)) { - logger.crit( - `Multiple migrations are registered for ${mig.id}. Cannot safely apply migrations.`, - () => { - // note, we want to exit in testing here, this is fine. - process.exit(1); - }, - ); - } - - map.set(mig.id, mig); - } - - return map; -} - -// That said, we still make a lookup map so we can efficiently find registered -// migrations. -const MIGRATION_LOOKUP = CreateMigrationLookupMap(REGISTERED_MIGRATIONS); - -/** - * Return the migrationID of all migrations that have not been applied. - */ -export async function FindUnappliedMigrations() { - // An unapplied migration is one that is acknowledged in the codebase - // (see REGISTERED_MIGRATIONS), but not stored inside the mongodb instance. - const migrations = await db.migrations.find( - {}, - { - projection: { - migrationID: 1, - }, - }, - ); - - const appliedIDs = new Set(migrations.map((e) => e.migrationID)); - - const notApplied = []; - - for (const migration of REGISTERED_MIGRATIONS) { - if (!appliedIDs.has(migration.id)) { - notApplied.push(migration.id); - } - } - - return notApplied; -} - -export async function ApplyUnappliedMigrations() { - const unapplied = await FindUnappliedMigrations(); - - if (unapplied.length === 0) { - logger.verbose(`Found no migrations to apply. Not bothering.`); - return; - } - - logger.info( - `Found ${ - unapplied.length - } migration(s) that have not been applied yet. These are '${unapplied.join("', '")}'.`, - { unapplied }, - ); - - for (const migrationID of unapplied) { - // These things need to apply in lockstep. - // Note that if any migration fails, this will exit at CRIT level - // and not continue. - // eslint-disable-next-line no-await-in-loop - await ApplyMigrationByID(migrationID); - } -} - -export function ApplyMigrationByID(migrationID: string) { - const migration = MIGRATION_LOOKUP.get(migrationID); - - if (!migration) { - logger.error( - `Attempted to apply migration ${migrationID}, but that migration doesn't exist?`, - ); - throw new Error( - `Attempted to apply migration ${migrationID}, but that migration doesn't exist?`, - ); - } - - return ApplyMigration(migration); -} - -/** - * Applies a migration. Will **EXIT TACHI** if a migration fails to apply, as this implies - * database level inconsistencies which could cause severe problems. - */ -export async function ApplyMigration(migration: Migration) { - const migrationID = migration.id; - - logger.info(`Received request to apply migration '${migrationID}'.`); - - // Lock the migration here: - // If the migration is already applied (i.e. migrationID is set and pending/applied) - // don't bother applying again - // If the migration isn't, set it as pending and continue. This is race-condition - // safe. - const wasApplied = await db.migrations.findOneAndUpdate( - { migrationID }, - { - $setOnInsert: { - migrationID, - status: "pending", - }, - }, - { - returnOriginal: true, - upsert: true, - }, - ); - - if (wasApplied) { - logger.error(`Tried to apply migration ${migrationID}, but it was already applied.`); - throw new Error(`Tried to apply migration ${migrationID}, but it was already applied.`); - } - - try { - await migration.up(); - - logger.info(`Successfully applied migration '${migrationID}'.`); - - await db.migrations.update( - { - migrationID, - }, - { - $set: { - status: "applied", - appliedOn: Date.now(), - }, - }, - ); - - logger.info(`Successfully set migration state for '${migrationID}' to applied.`); - } catch (err) { - logger.severe( - `Failed to apply migration '${migrationID}'. Attempting to revert migration. Tachi will exit after attempting to revert this migration.`, - { err }, - ); - - try { - await migration.down(); - - logger.info( - `Successfully reverted migration. Database state is okay, but Tachi will not boot.`, - ); - - logger.crit( - `Failed to apply migration '${migrationID}'. Although successfully reverted, Tachi will not boot if a migration fails.`, - ); - } catch (err) { - logger.crit( - `FAILED TO REVERT PARTIAL MIGRATION '${migrationID}'. THE DATABASE IS ALMOST CERTAINLY TAINTED. MANUAL INTERVENTION/BACKUP RESTORE NECESSARY.`, - { - err, - }, - ); - } - - // remove the stale migration so it can be re-ran in the future. - await db.migrations.findOneAndDelete({ migrationID }); - - if (Env.NODE_ENV === "test") { - throw new Error("Was going to exit with statusCode 1, but we're in testing."); - } - - logger.crit(`Exiting.`, () => { - process.exit(1); - }); - } -} diff --git a/typescript/server/src/lib/migration/migrations/add-following-to-users.ts b/typescript/server/src/lib/migration/migrations/add-following-to-users.ts deleted file mode 100644 index 0895e7916..000000000 --- a/typescript/server/src/lib/migration/migrations/add-following-to-users.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "add-following-to-users", - up: async () => { - await db["user-settings"].update( - {}, - { - $set: { - following: [], - }, - }, - { multi: true }, - ); - }, - down: async () => { - await db["user-settings"].update( - {}, - { - $unset: { following: 1 }, - }, - { multi: true }, - ); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/add-lockedat.ts b/typescript/server/src/lib/migration/migrations/add-lockedat.ts deleted file mode 100644 index 63d87eb21..000000000 --- a/typescript/server/src/lib/migration/migrations/add-lockedat.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "add-lockedat", - up: async () => { - await db["import-locks"].update( - {}, - { - $set: { - lockedAt: null, - }, - }, - { multi: true }, - ); - }, - down: async () => { - await db["import-locks"].update( - {}, - { - $unset: { - lockedAt: 1, - }, - }, - { multi: true }, - ); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/add-preferredRanking-to-ugpt.ts b/typescript/server/src/lib/migration/migrations/add-preferredRanking-to-ugpt.ts deleted file mode 100644 index 3edb7ee3b..000000000 --- a/typescript/server/src/lib/migration/migrations/add-preferredRanking-to-ugpt.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "add-preferredRanking-to-ugpt", - up: async () => { - await db["game-settings"].update( - {}, - { - $set: { - "preferences.preferredRanking": null, - }, - }, - { multi: true }, - ); - }, - down: async () => { - await db["game-settings"].update( - {}, - { - $unset: { "preferences.preferredRanking": 1 }, - }, - { multi: true }, - ); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/add-rivals-to-ugpt.ts b/typescript/server/src/lib/migration/migrations/add-rivals-to-ugpt.ts deleted file mode 100644 index 1e1460668..000000000 --- a/typescript/server/src/lib/migration/migrations/add-rivals-to-ugpt.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "add-rivals-to-ugpt", - up: async () => { - await db["game-settings"].update( - {}, - { - $set: { - rivals: [], - }, - }, - { multi: true }, - ); - }, - down: async () => { - await db["game-settings"].update( - {}, - { - $unset: { rivals: 1 }, - }, - { multi: true }, - ); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/chunithm-fix-preferred-default-enum.ts b/typescript/server/src/lib/migration/migrations/chunithm-fix-preferred-default-enum.ts deleted file mode 100644 index 1993a49dd..000000000 --- a/typescript/server/src/lib/migration/migrations/chunithm-fix-preferred-default-enum.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "chunithm-fix-preferred-default-enum", - up: async () => { - await db["game-settings"].update( - { - game: "chunithm", - "preferences.preferredDefaultEnum": "lamp", - }, - { - $set: { - "preferences.preferredDefaultEnum": "noteLamp", - }, - }, - { multi: true }, - ); - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/chunithm-lamp-split.ts b/typescript/server/src/lib/migration/migrations/chunithm-lamp-split.ts deleted file mode 100644 index 6328f113f..000000000 --- a/typescript/server/src/lib/migration/migrations/chunithm-lamp-split.ts +++ /dev/null @@ -1,593 +0,0 @@ -import type { Migration } from "#utils/types"; - -import CreateLogCtx from "#lib/logger/logger"; -import { ProcessPBs } from "#lib/score-import/framework/pb/process-pbs"; -import { CreateFullScoreData } from "#lib/score-import/framework/score-importing/derivers"; -import { CreateScoreID } from "#lib/score-import/framework/score-importing/score-id"; -import { CreateGoalID } from "#lib/targets/goals"; - -import type { GetEnumValue } from "../../../../../common/src/types/metrics"; - -import { - GetGPTString, - type GoalDocument, - type GoalSubscriptionDocument, - type integer, - type ScoreData, - type ScoreDocument, -} from "../../../../../common/src"; -/* eslint-disable no-await-in-loop */ -import db, { monkDB } from "#services/mongo/db"; -import { EfficientDBIterate } from "#utils/efficient-db-iterate"; - -const logger = CreateLogCtx(__filename); - -const OLD_LAMP_INDEXES = { - FAILED: 0, - CLEAR: 1, - "FULL COMBO": 2, - "ALL JUSTICE": 3, - "ALL JUSTICE CRITICAL": 4, -} as const; - -const NEW_CLEAR_LAMP_INDEXES = { - FAILED: 0, - CLEAR: 1, - HARD: 2, - BRAVE: 3, - ABSOLUTE: 4, - CATASTROPHY: 5, -} as const; - -const NEW_CLEAR_LAMPS = ["FAILED", "CLEAR", "HARD", "BRAVE", "ABSOLUTE", "CATASTROPHY"] as const; - -const NEW_NOTE_LAMP_INDEXES = { - NONE: 0, - "FULL COMBO": 1, - "ALL JUSTICE": 2, - "ALL JUSTICE CRITICAL": 3, -} as const; - -const NEW_NOTE_LAMPS = ["NONE", "FULL COMBO", "ALL JUSTICE", "ALL JUSTICE CRITICAL"] as const; - -async function FastUpdateSessions() { - const sessions = await db.sessions.find({ game: "chunithm", playtype: "Single" }); - const newScoreIDRefs: Array<{ new: string; old: string }> = await monkDB - .get("temp-update-map") - .find({}); - const lookup = new Map(newScoreIDRefs.map((r) => [r.old, r.new])); - const newScoreIDs = new Set(newScoreIDRefs.map((r) => r.new)); - - await Promise.allSettled( - sessions.map(async (session) => { - const updatedScoreIDs: Array = []; - - for (const oldScoreID of session.scoreIDs) { - const newScoreID = lookup.get(oldScoreID); - - // If the migration died here before, we might run into sessions where the scoreIDs - // are already the migrated ones. Therefore, we only emit errors for IDs that are - // actually non-existent. - if (!newScoreID && !newScoreIDs.has(oldScoreID)) { - logger.warning( - `[session ${session.sessionID}] No such score ${oldScoreID} exists in lookup, nor is it a new scoreID. Ignoring this score.`, - ); - continue; - } - - updatedScoreIDs.push(newScoreID ?? oldScoreID); - } - - await db.sessions.update( - { sessionID: session.sessionID }, - { - $set: { scoreIDs: updatedScoreIDs }, - }, - ); - }), - ); -} - -async function FastUpdateImports() { - const imports = await db.imports.find({ game: "chunithm", playtypes: "Single" }); - const newScoreIDRefs: Array<{ new: string; old: string }> = await monkDB - .get("temp-update-map") - .find({}); - const lookup = new Map(newScoreIDRefs.map((r) => [r.old, r.new])); - const newScoreIDs = new Set(newScoreIDRefs.map((r) => r.new)); - - await Promise.allSettled( - imports.map(async (importDoc) => { - const updatedScoreIDs: Array = []; - - for (const oldScoreID of importDoc.scoreIDs) { - const newScoreID = lookup.get(oldScoreID); - - // If the migration died here before, we might run into sessions where the scoreIDs - // are already the migrated ones. Therefore, we only emit errors for IDs that are - // actually non-existent. - if (!newScoreID && !newScoreIDs.has(oldScoreID)) { - logger.warning( - `[import ${importDoc.importID}] No such score ${oldScoreID} exists in lookup, nor is it a new scoreID. Ignoring this score.`, - ); - continue; - } - - updatedScoreIDs.push(newScoreID ?? oldScoreID); - } - - await db.imports.update( - { importID: importDoc.importID }, - { - $set: { scoreIDs: updatedScoreIDs }, - }, - ); - }), - ); -} - -function MoveLamps( - scoreData: { lamp?: string } & ScoreData<"chunithm:Single">, -): ScoreData<"chunithm:Single"> { - // This score has already been migrated. - - if (scoreData.clearLamp && scoreData.noteLamp && !scoreData.lamp) { - return scoreData; - } - - const oldLamp = scoreData.lamp; - - let noteLamp: GetEnumValue<"chunithm:Single", "noteLamp">; - let clearLamp: GetEnumValue<"chunithm:Single", "clearLamp">; - - // If the old score had a combo lamp, we assume that the score was at least a clear. - // While it is theoretically possible for there to be a failed all justice, the chance - // is small. - if (oldLamp === "FAILED" || oldLamp === "CLEAR") { - noteLamp = "NONE"; - clearLamp = oldLamp; - } else if ( - oldLamp === "FULL COMBO" || - oldLamp === "ALL JUSTICE" || - oldLamp === "ALL JUSTICE CRITICAL" - ) { - noteLamp = oldLamp; - clearLamp = "CLEAR"; - } else { - noteLamp = "NONE"; - clearLamp = "FAILED"; - } - - const newScoreData = { - ...scoreData, - noteLamp, - clearLamp, - }; - - delete newScoreData.lamp; - - return newScoreData; -} - -const migration: Migration = { - id: "chunithm-lamp-split", - up: async () => { - logger.info("Migrating CHUNITHM scores to new lamps..."); - const gptString = GetGPTString("chunithm", "Single") as "chunithm:Single"; - - await EfficientDBIterate( - // @ts-expect-error filter assures we're getting only chuni scores - db.scores, - (score: { scoreData: { lamp?: string } } & ScoreDocument<"chunithm:Single">) => { - // @ts-expect-error it does exist sometimes - delete score._id; - - const newScore = { - ...score, - scoreData: MoveLamps(score.scoreData), - }; - const newScoreID = CreateScoreID( - gptString, - newScore.userID, - newScore, - newScore.chartID, - ); - - // To make this faster, we update only the relevant parts of the scores instead - // of having it go through the UpdateScore process, which requires querying - // a chart from the database every UpdateScore call. - // - // We skip calculating calculatedData since that is outside the scope - // of this lamp move; no CHUNITHM calculated metrics depend on lamp. - newScore.scoreID = newScoreID; - newScore.scoreData = CreateFullScoreData( - gptString, - newScore.scoreData, - // @ts-expect-error This is intentional, CHUNITHM derivers do not - // depend on the chart. - null, - logger, - ); - - return { - oldScoreID: score.scoreID, - newScore, - }; - }, - async (changes) => { - const changesPrime = []; - - for (const change of changes) { - const scoreExists = await db.scores.findOne({ - scoreID: change.newScore.scoreID, - }); - - if (scoreExists) { - continue; - } - - changesPrime.push(change); - } - - await db.scores.bulkWrite( - changesPrime.map((c) => ({ - updateOne: { - filter: { - scoreID: c.oldScoreID, - }, - update: { - $set: c.newScore, - }, - }, - })), - ); - await monkDB.get("temp-update-map").insert( - changes.map((c) => ({ - old: c.oldScoreID, - new: c.newScore.scoreID, - })), - ); - }, - { - game: "chunithm", - playtype: "Single", - "scoreData.noteLamp": { $exists: false }, - "scoreData.clearLamp": { $exists: false }, - }, - ); - - logger.info("Reconstructing PBs..."); - const usersWithChuniScores = await db.scores.distinct("userID", { - game: "chunithm", - playtype: "Single", - }); - - // We don't use UpdateAllPBs here because it re-PBs all of a user's - // games and playtypes which is fairly wasteful. - for (const userID of usersWithChuniScores) { - const chartIDs = await db.scores.distinct("chartID", { - userID, - game: "chunithm", - playtype: "Single", - }); - - if (chartIDs.length === 0) { - continue; - } - - logger.info(`PBing #${userID}'s scores.`); - - await ProcessPBs("chunithm", "Single", userID, new Set(chartIDs), logger); - } - - logger.info("Updating references to scores..."); - await FastUpdateSessions(); - await FastUpdateImports(); - - await monkDB.get("temp-update-map").drop(); - - logger.info("Updating blacklisted scores..."); - await EfficientDBIterate( - // @ts-expect-error this works because of the filter restricting game and playtype - db["score-blacklist"], - (blacklistedScore: { - score: ScoreDocument<"chunithm:Single">; - scoreID: string; - userID: integer; - }) => { - const newScore = { - ...blacklistedScore.score, - scoreData: MoveLamps(blacklistedScore.score.scoreData), - }; - const newScoreID = CreateScoreID( - gptString, - blacklistedScore.userID, - newScore, - newScore.chartID, - ); - - newScore.scoreID = newScoreID; - newScore.scoreData = CreateFullScoreData( - gptString, - newScore.scoreData, - // @ts-expect-error This is intentional. CHUNITHM derivers - // do not need a chart. - null, - logger, - ); - - return { - oldScoreID: blacklistedScore.scoreID, - newScoreID, - newScore, - }; - }, - async (changes) => { - await db["score-blacklist"].bulkWrite( - changes - .filter((c) => c.oldScoreID !== c.newScoreID) - .map((c) => ({ - updateOne: { - filter: { - scoreID: c.oldScoreID, - }, - update: { - $set: { - scoreID: c.newScoreID, - score: c.newScore, - }, - }, - }, - })), - ); - }, - { - "score.game": "chunithm", - "score.playtype": "Single", - "score.scoreData.noteLamp": { $exists: false }, - "score.scoreData.clearLamp": { $exists: false }, - }, - ); - - logger.info("Updating stat showcases..."); - await db["game-settings"].bulkWrite([ - ...(["FULL COMBO", "ALL JUSTICE", "ALL JUSTICE CRITICAL"] as const).map((lamp) => ({ - updateMany: { - filter: { game: "chunithm", playtype: "Single" } as const, - update: { - $set: { - "preferences.stats.$[e].metric": "noteLamp", - "preferences.stats.$[e].gte": NEW_NOTE_LAMP_INDEXES[lamp], - }, - }, - arrayFilters: [ - { - "e.mode": "folder", - "e.metric": "lamp", - "e.gte": OLD_LAMP_INDEXES[lamp], - }, - ], - }, - })), - ...(["FAILED", "CLEAR"] as const).map((lamp) => ({ - updateMany: { - filter: { game: "chunithm", playtype: "Single" } as const, - update: { - $set: { - "preferences.stats.$[e].metric": "clearLamp", - "preferences.stats.$[e].gte": NEW_CLEAR_LAMP_INDEXES[lamp], - }, - }, - arrayFilters: [ - { - "e.mode": "folder", - "e.metric": "lamp", - "e.gte": OLD_LAMP_INDEXES[lamp], - }, - ], - }, - })), - // Unfortunately we don't have enough data to accurately migrate - // over chart lamp showcases, so we'll automatically migrate everyone - // over to noteLamp, which is what people usually showcase. - { - updateMany: { - filter: { game: "chunithm", playtype: "Single" } as const, - update: { - $set: { - "preferences.stats.$[e].metric": "noteLamp", - }, - }, - arrayFilters: [ - { - "e.mode": "chart", - "e.metric": "lamp", - }, - ], - }, - }, - ]); - - logger.info("Updating goals..."); - await EfficientDBIterate( - db.goals, - (goal: GoalDocument) => { - const oldGoalID = goal.goalID; - - if (goal.criteria.value <= OLD_LAMP_INDEXES.CLEAR) { - goal.criteria.key = "clearLamp"; - // goal.criteria.value remains unchanged - } else { - goal.criteria.key = "noteLamp"; - - // old lamps have FC = 2, AJ = 3, AJC = 4 - // new noteLamps have FC = 1, AJ = 2, AJC = 3 - goal.criteria.value = goal.criteria.value - 1; - } - - const newGoalID = CreateGoalID( - goal.charts, - goal.criteria, - goal.game, - goal.playtype, - ); - - // @ts-expect-error it exists - delete goal._id; - - return { - oldGoalID, - newGoalID, - goal, - }; - }, - async (changes) => { - await db.goals.bulkWrite( - changes.map((c) => ({ - updateOne: { - filter: { - goalID: c.oldGoalID, - }, - update: { - $set: { - goalID: c.newGoalID, - criteria: c.goal.criteria, - }, - }, - }, - })), - ); - await monkDB.get("temp-update-goal-map").insert( - changes.map((c) => ({ - old: c.oldGoalID, - new: c.newGoalID, - goal: c.goal, - })), - ); - }, - { game: "chunithm", playtype: "Single", "criteria.key": "lamp" }, - ); - - logger.info("Updating goal subscriptions..."); - const updatedGoalIDs: Array<{ goal: GoalDocument; new: string; old: string }> = await monkDB - .get("temp-update-goal-map") - .find({}); - const updatedGoalIDMap = new Map(updatedGoalIDs.map((u) => [u.old, u])); - - await EfficientDBIterate( - db["goal-subs"], - (subscription: GoalSubscriptionDocument) => { - // We're 100% sure the goal ID exists in updatedGoals due to the query. - - const { goal, new: newGoalID } = updatedGoalIDMap.get(subscription.goalID)!; - - if (goal.criteria.key !== "clearLamp" && goal.criteria.key !== "noteLamp") { - throw new Error(`Received invalid criteria key ${goal.criteria.key}`); - } - - // We don't update goal progress for goals that are "absolute" | "proportion" - // since the progress is the number of items already done, and not the lamp. - // Simply migrate them over to the new goal ID. - if (goal.criteria.mode !== "single") { - return { - userID: subscription.userID, - goalID: subscription.goalID, - newGoalID, - progress: subscription.progress, - progressHuman: subscription.progressHuman, - outOf: subscription.outOf, - outOfHuman: subscription.outOfHuman, - }; - } - - let newProgress: integer | null; - let newProgressHuman: string | undefined; - const newOutOfHuman = - goal.criteria.key === "clearLamp" - ? NEW_CLEAR_LAMPS[goal.criteria.value] - : NEW_NOTE_LAMPS[goal.criteria.value]; - - if (!newOutOfHuman) { - logger.severe(`Received invalid criteria value for a goal of mode "single".`, { - mode: goal.criteria.mode, - key: goal.criteria.key, - value: goal.criteria.value, - }); - throw new Error( - `Received invalid progress for a goal of mode "single". criteria_mode=${goal.criteria.mode} criteria_key=${goal.criteria.key} criteria_value=${goal.criteria.value}`, - ); - } - - if (subscription.progress === null) { - newProgress = null; - newProgressHuman = "NO DATA"; - } else if (goal.criteria.key === "clearLamp") { - // Clamp back to CLEAR if the user has made better progress (e.g. FULL COMBO). - newProgress = Math.min(NEW_CLEAR_LAMP_INDEXES.CLEAR, subscription.progress); - newProgressHuman = NEW_CLEAR_LAMPS[newProgress]; - } else { - // Clamp back to NONE if the user has made worse progress (e.g. FAILED). - // Otherwise, the -1 maps the old progress onto the new progress nicely: - // CLEAR: 1 -> NONE: 0 - // FULL COMBO: 2 -> FULL COMBO: 1 - // ... - newProgress = Math.max(NEW_NOTE_LAMP_INDEXES.NONE, subscription.progress - 1); - newProgressHuman = NEW_NOTE_LAMPS[newProgress]; - } - - if (!newProgressHuman) { - logger.severe(`Received invalid progress for a goal of mode "single".`, { - criteria: { - mode: goal.criteria.mode, - key: goal.criteria.key, - }, - progress: subscription.progress, - newProgress, - }); - throw new Error( - `Received invalid progress for a goal of mode "single". criteria_key=${goal.criteria.key} criteria_mode=${goal.criteria.mode} progress=${subscription.progress} newProgress=${newProgress}`, - ); - } - - return { - userID: subscription.userID, - goalID: subscription.goalID, - newGoalID, - progress: newProgress, - progressHuman: newProgressHuman, - outOf: goal.criteria.value, - outOfHuman: newOutOfHuman, - }; - }, - async (updates) => { - await db["goal-subs"].bulkWrite( - updates.map((u) => ({ - updateOne: { - filter: { - userID: u.userID, - goalID: u.goalID, - }, - update: { - $set: { - goalID: u.newGoalID, - progress: u.progress, - progressHuman: u.progressHuman, - outOf: u.outOf, - outOfHuman: u.outOfHuman, - }, - }, - }, - })), - ); - }, - { goalID: { $in: updatedGoalIDs.map((u) => u.old) } }, - ); - - await monkDB.get("temp-update-goal-map").drop(); - }, - down: () => { - throw new Error("Reverting this change is not possible."); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/fix-undefined-bms-data.ts b/typescript/server/src/lib/migration/migrations/fix-undefined-bms-data.ts deleted file mode 100644 index 940abd375..000000000 --- a/typescript/server/src/lib/migration/migrations/fix-undefined-bms-data.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "fix-undefined-bms-data", - up: async () => { - await db.songs.bms.update( - { - "data.tableString": { $exists: false }, - }, - { - $set: { - "data.tableString": null, - }, - }, - { multi: true }, - ); - - await db.charts.bms.update( - { - "data.aiLevel": { $exists: false }, - }, - { - $set: { - "data.aiLevel": null, - }, - }, - { multi: true }, - ); - }, - down: () => { - throw new Error(`Cannot revert migration.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/join-inf-casthour-charts.ts b/typescript/server/src/lib/migration/migrations/join-inf-casthour-charts.ts deleted file mode 100644 index 0e2747118..000000000 --- a/typescript/server/src/lib/migration/migrations/join-inf-casthour-charts.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type { Migration } from "#utils/types"; - -import UpdateScore from "#lib/score-mutation/update-score"; -/* eslint-disable no-await-in-loop */ -import db from "#services/mongo/db"; - -// old chart -> new chart -const mappings = [ - ["4ff8e32a6eefee5e476f6c8261db5c66e2496b51", "1de27f681eb00b8d422658b66507c5f438379e40"], - ["827b1f8cccce51d3e2e0fd2c0b1117a47b530c70", "96bf5cd64056bca7e870233eb1096e8bb24d24b7"], - ["43a7b6386da6b0c5d2d577c9f09ab83d516038a2", "764f6c14f4be643fe4d6e7715a77d4f5789a255e"], - ["ad0a143262671e970c3e148b62d4aaebec17f604", "2981d53beda743071c0174b3235e8b811c227231"], - ["69093ac77208326f1261b3dcc38f73d054b0400e", "f7fb763afd99981232c92a41a6c3276692551101"], - ["2f8bac0550e95c87f4ff4c931c49d118622d320d", "1d4025230032b8ee6ce787e80756286a1626dc04"], - ["2b2dc7bc90eb7715fda937a263878dc16c3df507", "78f3fcd2765233c1d588ea588d1416a45065b272"], - ["3cf992f0615ab51903d45fda6d4fda5ed5ec5c7c", "9b6eac3a3f152a43e3ef297130677daa42d895fd"], - ["fb4a6ca054b9697a34841afc52f52d7d100a5779", "6264bb33e8ab53e226cd514696789dd330ab13fc"], - ["4ee3a65c0ab0968ed3c52bf90753cfa7620fee94", "03efef860d7aa122dd601853d99b73622b560aa6"], - ["28c1ca0d1ef50f56d05e3143a1cde25e9b25a1ef", "1e112b872267c0b66fb64671ef2c8aedff8bcf7e"], - ["1cdb02868c5a23ca4c3131f9cf0403b7ef178b83", "bbe64b3d1158db2f1255eb342bafe165ba2871e5"], - ["29d7c72e8ed01173f7f68fb8102706694ba80619", "9d96ec36c37f7f723d3851618e7daef6d58a5176"], - ["4d3d3ae0760c520b471a6c4025fd4517e792fdd5", "e42f30c04bcdd07ccf46470c8ce321814c69f62f"], - ["5d2b11fc4d26b965dd30094c06548a55a670408c", "ee22f91a9be8826ef3b371ef9c3ab518d34753b0"], - ["46d3a5c245898f8fbc2492e293a8dadcfaff363c", "92efb4e0d1b036e385cb5a73a0ace0e12baaa0cc"], - ["39ed6d4a5c7a4557ab00266fae2363a6094fc0e1", "02218c7580fffe984d5db15e3ac9703c7c5ff42c"], - ["6e5231055e517dbe6f67d68f572286b1c647eceb", "ef2359505d0be7492dacc4b416d7528f669b4228"], -] as const; - -const migration: Migration = { - id: "join-inf-casthour-charts", - up: async () => { - for (const [oldChartID, newChartID] of mappings) { - const scores = await db.scores.find({ - chartID: oldChartID, - }); - - for (const score of scores) { - await UpdateScore(score, { ...score, chartID: newChartID }); - } - } - }, - down: () => { - throw new Error(`Cannot undo migration.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/join-inf-casthour-songs.ts b/typescript/server/src/lib/migration/migrations/join-inf-casthour-songs.ts deleted file mode 100644 index e42cf9d41..000000000 --- a/typescript/server/src/lib/migration/migrations/join-inf-casthour-songs.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { Migration } from "#utils/types"; - -import UpdateScore from "#lib/score-mutation/update-score"; -/* eslint-disable no-await-in-loop */ -import db from "#services/mongo/db"; - -// old songID -> new songID -const mappings = [ - [2100, 2042], - [2130, 1997], - [2142, 2000], -] as const; - -// i messed up the last migration, by only updating the chartID and not the song ID. - -const migration: Migration = { - id: "join-inf-casthour-songs", - up: async () => { - for (const [oldSongID, newSongID] of mappings) { - const scores = await db.scores.find({ - songID: oldSongID, - }); - - for (const score of scores) { - await UpdateScore(score, { - ...score, - songID: newSongID, - }); - } - } - }, - down: () => { - throw new Error(`Cannot undo migration.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/ktRating-to-curator-skill.ts b/typescript/server/src/lib/migration/migrations/ktRating-to-curator-skill.ts deleted file mode 100644 index 36007fca7..000000000 --- a/typescript/server/src/lib/migration/migrations/ktRating-to-curator-skill.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { Migration } from "#utils/types"; - -import { RecalcAllScores } from "#utils/calculations/recalc-scores"; - -const migration: Migration = { - id: "ktRating-to-curator-skill", - up: async () => { - await RecalcAllScores({ game: "museca" }); - }, - down: () => { - throw new Error(`Not possible to revert.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/maimaidx-fix-lamps.ts b/typescript/server/src/lib/migration/migrations/maimaidx-fix-lamps.ts deleted file mode 100644 index bbd8d99fc..000000000 --- a/typescript/server/src/lib/migration/migrations/maimaidx-fix-lamps.ts +++ /dev/null @@ -1,106 +0,0 @@ -import type { Migration } from "#utils/types"; - -import CreateLogCtx from "#lib/logger/logger"; -import { ProcessPBs } from "#lib/score-import/framework/pb/process-pbs"; -import UpdateScore from "#lib/score-mutation/update-score"; -import db from "#services/mongo/db"; -import { RecalcAllScores } from "#utils/calculations/recalc-scores"; - -import type { integer, ProvidedMetrics, ScoreDocument } from "../../../../../common/src"; - -const logger = CreateLogCtx(__filename); - -const migration: Migration = { - id: "maimaidx-fix-lamps", - up: async () => { - const affectedUserCharts: Map> = new Map(); - const affectedCharts: Set = new Set(); - - // @ts-expect-error query assures we're getting maimaidx:Single scores - const invalidScores: Array> = await db.scores.find({ - game: "maimaidx", - playtype: "Single", - "scoreData.lamp": "FAILED", - "scoreData.percent": { $gte: 80 }, - }); - - invalidScores.push( - // @ts-expect-error query assures we're getting maimaidx:Single scores - ...(await db.scores.find({ - game: "maimaidx", - playtype: "Single", - "scoreData.lamp": "CLEAR", - "scoreData.percent": { $lt: 80 }, - })), - ); - - for (const score of invalidScores) { - // @ts-expect-error just in case - delete score._id; - - if (affectedUserCharts.has(score.userID)) { - affectedUserCharts.get(score.userID)!.add(score.chartID); - } else { - affectedUserCharts.set(score.userID, new Set([score.chartID])); - } - - affectedCharts.add(score.chartID); - - let lamp: ProvidedMetrics["maimaidx:Single"]["lamp"]; - - if (score.scoreData.percent === 101) { - lamp = "ALL PERFECT+"; - } else if ( - score.scoreData.percent >= 100.5 && - score.scoreData.judgements.great === 0 && - score.scoreData.judgements.good === 0 && - score.scoreData.judgements.miss === 0 - ) { - lamp = "ALL PERFECT"; - } else if ( - score.scoreData.judgements.good === 0 && - score.scoreData.judgements.miss === 0 - ) { - lamp = "FULL COMBO+"; - } else if (score.scoreData.judgements.miss === 0) { - lamp = "FULL COMBO"; - } else if (score.scoreData.percent >= 80) { - lamp = "CLEAR"; - } else { - lamp = "FAILED"; - } - - await UpdateScore( - score, - { - ...score, - scoreData: { - ...score.scoreData, - lamp, - }, - }, - /* updateOldChart=*/ false, - /* skipUpdatingPBs=*/ true, - ); - } - - for (const [userID, chartIDs] of affectedUserCharts.entries()) { - logger.info(`PBing #${userID}'s scores.`); - - await ProcessPBs("maimaidx", "Single", userID, chartIDs, logger); - } - - // maimai DX CiRCLE rating recalc - await RecalcAllScores({ - game: "maimaidx", - "scoreData.lamp": { - $in: ["ALL PERFECT", "ALL PERFECT+"], - }, - }); - }, - down: () => { - throw new Error(`Unable to revert transaction.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/mark-fervidex-as-without-intent.ts b/typescript/server/src/lib/migration/migrations/mark-fervidex-as-without-intent.ts deleted file mode 100644 index 621edb24c..000000000 --- a/typescript/server/src/lib/migration/migrations/mark-fervidex-as-without-intent.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "mark-fervidex-as-without-intent", - up: async () => { - await db.imports.update( - { - importType: "ir/fervidex", - }, - { - $set: { userIntent: false }, - }, - ); - }, - down: () => { - throw new Error(`Unable to revert transaction.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/mark-kshook-as-without-intent.ts b/typescript/server/src/lib/migration/migrations/mark-kshook-as-without-intent.ts deleted file mode 100644 index 88b5b92d8..000000000 --- a/typescript/server/src/lib/migration/migrations/mark-kshook-as-without-intent.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "mark-kshook-as-without-intent", - up: async () => { - await db.imports.update( - { - importType: { $in: ["ir/kshook-sv6c", "ir/kshook-sv6c-static"] }, - }, - { - $set: { userIntent: false }, - }, - ); - }, - down: () => { - throw new Error(`Unable to revert transaction.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/null-lr2hook-failed-bps.ts b/typescript/server/src/lib/migration/migrations/null-lr2hook-failed-bps.ts deleted file mode 100644 index ee50b8562..000000000 --- a/typescript/server/src/lib/migration/migrations/null-lr2hook-failed-bps.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; -import { UpdateAllPBs } from "#utils/calculations/recalc-scores"; - -const migration: Migration = { - id: "null-lr2hook-failed-bps", - up: async () => { - await db.scores.update( - { - importType: "ir/lr2hook", - "scoreMeta.gauge": "HARD", - lamp: { $in: ["FAILED", "NO PLAY"] }, - }, - { - $set: { - "scoreData.optional.bp": null, - }, - }, - { - multi: true, - }, - ); - - await UpdateAllPBs(undefined, { game: "bms" }); - }, - down: () => { - throw new Error(`Unable to revert transaction, some scores may have been nulled.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/ongeki-v2.ts b/typescript/server/src/lib/migration/migrations/ongeki-v2.ts deleted file mode 100644 index bd160a48b..000000000 --- a/typescript/server/src/lib/migration/migrations/ongeki-v2.ts +++ /dev/null @@ -1,69 +0,0 @@ -import type { Migration } from "#utils/types"; - -import { rootLogger } from "#lib/logger/logger"; -import UpdateScore from "#lib/score-mutation/update-score"; -import db from "#services/mongo/db"; -import { EfficientDBIterate } from "#utils/efficient-db-iterate"; - -import { ONGEKI_NOTE_LAMPS, type ScoreDocument } from "../../../../../common/src"; - -const migration: Migration = { - id: "ongeki-v2", - up: async () => { - const failedScores = []; - - await EfficientDBIterate( - db.scores, - (score) => score as ScoreDocument<"ongeki:Single">, - async (scores: Array>) => { - for (const score of scores) { - // @ts-expect-error just incase - delete score._id; - - try { - const newScore = { - ...score, - }; - - if (newScore.scoreData.score === 1010000) { - newScore.scoreData.noteLamp = "ALL BREAK+"; - newScore.scoreData.enumIndexes.noteLamp = - ONGEKI_NOTE_LAMPS.ALL_BREAK_PLUS; - } - - if ( - "platScore" in newScore.scoreData.optional && - typeof newScore.scoreData.optional.platScore === "number" - ) { - newScore.scoreData.platinumScore = - newScore.scoreData.optional.platScore; - delete newScore.scoreData.optional.platScore; - } else { - newScore.scoreData.platinumScore ??= 0; - } - - await UpdateScore(score, newScore); - } catch (err) { - rootLogger.warn(`Error applying ${score.scoreID}:`); - rootLogger.warn(err); - rootLogger.warn("Continuing through the error."); - - failedScores.push(score.scoreID); - } - } - }, - { game: "ongeki" }, - ); - - if (failedScores.length > 0) { - throw new Error( - `${failedScores.length} failed to be migrated. Resolve these manually, please.`, - ); - } - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/remove-above-100pc.ts b/typescript/server/src/lib/migration/migrations/remove-above-100pc.ts deleted file mode 100644 index 1ae95b12c..000000000 --- a/typescript/server/src/lib/migration/migrations/remove-above-100pc.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { Migration } from "#utils/types"; - -import { DeleteMultipleScores } from "#lib/score-mutation/delete-scores"; -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "remove-above-100pc", - up: async () => { - const toDelete = await db.scores.find({ - game: "bms", - "scoreData.percent": { $gt: 100.0 }, - }); - - await DeleteMultipleScores(toDelete); - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/remove-iidx-beginners.ts b/typescript/server/src/lib/migration/migrations/remove-iidx-beginners.ts deleted file mode 100644 index ae051b6f1..000000000 --- a/typescript/server/src/lib/migration/migrations/remove-iidx-beginners.ts +++ /dev/null @@ -1,316 +0,0 @@ -import type { Migration } from "#utils/types"; - -import { DeleteMultipleScores } from "#lib/score-mutation/delete-scores"; -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "remove-iidx-beginners", - up: async () => { - // copied from seeds before they were removed - // the charts themselves are not guaranteed to be in the db - // so they have to be hardcoded. - const beginners = [ - "71865a2b6d3581decf076ae83c6621302c4bb271", - "fc143b488d1af894fdd0c5be145e1d613aaf5214", - "5e7128485017b67e85cc75432326c9656a33f310", - "5798dd1c2a16e6ef3e4469f7a2bdea8a7bc1cd8f", - "dafa3f6511a3150015ffaaac3f4a008aacc0ebe1", - "62c5cb9228f39e2d6d222ecf84aa709c5e2271ce", - "e852f83964486ef81558b84dd4b554ffc9caf174", - "963edf351b3c6f29c09c54e55ec2c3dd041340a9", - "17514921a23abf2b76983cf50e79b3ff600763b1", - "950c0181ee33d10d3af448c00657702d1a479b8c", - "7e70836d0a3001aa7bd5e9488660f31746be60d8", - "888259e7cc44e2bf2e032898f6a9e85cd4fcad1b", - "02aea8a2135311a7a1f9404e6a12f138ecfae092", - "87b65dbf2965949644c72515a202bb4363662b6b", - "d1e92965be52b5e887089383e0a687d20098e5b4", - "139d5851baf82d75731d9629a25fdee2b75d41c5", - "d903739755a1de064e646280260f7dabe16fbc2e", - "48ee9417cbc4ebad782d372d63548085f65ed660", - "d8ee3c7e42227d9f660598508531e30a990bae39", - "2a2406e6c5236448615f177eb5ac830c353bde12", - "fa424066e32730fe29faad0b0d25aa6323ea6129", - "b38485e92c09f6736ab7e1737c0ed7a191fcdba8", - "241a27876b22646ccb85b6f53a61d7a46fc93168", - "0f39a16ff18d509f44dcf4e37850269477475e77", - "1a44bf2a27033a89af7dad853d846c7bba9f9a48", - "c94536933f21c0ceb2f0b68b4b4bc35849f1d04b", - "4dd7495c32b560f50ad54bec6753c010feb9381c", - "46b18a37648c06bf480487c2b62f5caa8995281a", - "2a9b158e5974fb2f8707843493099b7fc728a320", - "db81c35d160fc5870f5957361a8b32add1bc318b", - "d399af231b377289e1d575337a43609c17998e35", - "e9ca3d286a330bb4ce29e89334c465c243af29c2", - "794ae8f3b8b1b62d0ff9f32c890bd5ccb887d0a0", - "c22c1a520f7dd87be4d1ba1c1ec59a4d572951ff", - "55471eca15caaa14b6dd9f4eaa7bcede2b6f8e7b", - "9f8deae94e16a9b075a8a5290a14df5bb1d349cc", - "5716dddd0316b932fd8b3a9c530cd624c1c50bdf", - "4eafaf1009423849c3709936e1a0b361a0c5e530", - "3f4cda22aa09aad1959993570447e107b6d3cf4c", - "b194cb8b2aa80189567a7bab0949d067792a9086", - "498b6d1388ce9f9672ba038a6b4b02aae4c8cc4c", - "24b4c560ee3daa9a286cca100246b3dc06e96cf0", - "5770f819940914328b74fc7616b69562285eed11", - "6b0831dbde8a52ae377be6aaddea37ec0771a49f", - "2f92bf3627e07e836a5d68aa538f33b3563ed167", - "75373c0c4d1dfef62de50bbb25085f729a20a72a", - "0cca3d6b4361195e883c79017e9850bc767b4f22", - "dcd047a218e17011c7ab340236af62be64893781", - "d821202823731335567f32730bfed70d5bfd1368", - "439bb68fc96706a86a98d437e4f03e032597bc7c", - "79c7ad40e434a5bc0cb139c9e6e0ad06730e9ea1", - "2d549a71666934fcf86d9d827c5f2f6959d49fa7", - "ccb99f9d00ae04b7a0fd0754c9b3024ec527f718", - "21bcddc1191acaf1911fc173d23eb81c939bbe2e", - "10a78c2b7ecf9f5f9c3a11f2385977dc789fbb4e", - "ec7d6764c543dccfbe097a014b6b8839000b76de", - "be19c987cdc067369151829a9889bcae2799fe95", - "b382c1cf9732e132b2fb7800d2d82a93b2497789", - "c70cf629f97a2623d5cff716185350f85b07435a", - "5a94628384b43f68cfee44df205bc0a3edbd1913", - "1c964098d2954f4c8d2e7b723d77a2d1f79f7317", - "a31d41fe3bfd21c0c6e71f8d6df4e556be329123", - "b0b3e92576de8d9090472d118c424e08d1bdd826", - "d667a2e1f226c09e2549393240e00878a8cc4edf", - "e1dbe5d59d4a776ecbffeb0b165c715aae2995b1", - "fb24f2688473c46c04d666d27a9210c871a8191f", - "cb61bd200eea0936d5278b3b28e1033c36713341", - "bcd1fc3e53e2c1c001079159a26767a07f8e628e", - "871db812f3ee5002266edfe7b2cf48b4b2451302", - "01b60f5125ef5123c3840943c047446d167f3e3e", - "10f3292e7f1c91bb9c3e7d8c7b1b43fc8d9d929f", - "6ab72d59a8967bb6265dc82c28ac054d1f86684d", - "2ea729f82867a2c29d34c88ef0cde22358702b00", - "7f5b5f3e3640e2848985b85a574dffbf95a37030", - "7c78e67927f620c06d30887e29cc26683f3748f6", - "b34d86e91d32590d39dcb62216d1a26ea6bdfbef", - "be31fc23b03c53aa58a3a7b599a5b8b2e7ee2ede", - "3f5b76fcb0e9db6146e2f216771250d89bcb6942", - "0568ca6e19a3660b74bbf6fb97453d57b8bd0c83", - "ff1d34af1db5a089505f84a9aa2407b95a64f29b", - "0484e8f3ab6c6dae1311ff4f2980cf76b438aaf9", - "66624f8162c7949744e84f3ef3abb314fcb2da8e", - "531d5a70c4b02da03ee3be0d1efcffb78fe4ef43", - "5df850385272324559182a07d6a2a6b84bbd32bf", - "8ea6931b5382a6460e052410990f8e7c6d2fbcbc", - "8c20bfdaa71322bd572f38c95ffe22b8e65a9fc7", - "fcda03d3fb068fb58c4ae4234582d313ee22eb9d", - "c030db51ec510815e28f0ba181a650de492d2bb5", - "f865fcc658bce3ee89e19dac88486546eb4a5648", - "4de8a44831d3d730d24a174a3c78fa4d17271b87", - "1dfb262a9455e010e635989e480affaf61cd0113", - "49ac835cf5e5cd96a095df0f7220f2532a8c3632", - "3cb97b11313657f9f59cd1ce859c6c642e7a0afe", - "a7286b7086f8e19d78c7cc3fe73249d752fe9fb4", - "982d79f972da4e0a98c73d7d6709b931aa9940a6", - "1757d3c8c1f2e5392ec8aa6adb31a5a85ce1754f", - "c14ac167a2141d14609878cb8b5a0bacaab18468", - "876c1d284d63b272725a33d83b061e8d187bd60d", - "7d495aad1d8e07a499e30373b44e2e1257c21281", - "aa87f48af5a7a658e3f518f07cf5a45ea6750d5e", - "8c88175d419658c9f0ca1ac0994bbd40675027be", - "f98896e0dcdf7994c2ed38f452b1bf3dadd345f8", - "20941a1f2f707ce1a3587be135e42f453230f337", - "dbece3e1d537f91b2d0a4bfbb6d1ce98cf08a20c", - "25c2c3b947ff45795f1aeacf257a872dad8a65a5", - "6e071685bb2aa43878945fad560c68ce8db7c57d", - "88a1445681b2f70f0e84c30a66737dc942a42005", - "c32334b6f121993235082be73afb8137d0c0da19", - "5b49b8de2b70283e2364418ae50af0586a4373c2", - "009aa903a4b9fac40138deb8c5162280a747ae66", - "5b4bf383e44746468c21bf800eac0ef13e72d2f4", - "8c8917854d96a23a40b844beca846f7211c26be6", - "e73a369bbc639f8bfca9b00ec167c772300fcae2", - "3fb05d8b7e68c340f0257c1c405e8a9c75d03119", - "f4af6d0da9cc5f21b8dcb447bc79dcaec0d82965", - "06acbead44e406c41e8827186850950096ffe6e5", - "e6b480eba3d7aaca43f05fcc243cae558f846b72", - "91076b64d7aae8f053a9cc1b6849fbefcde68717", - "8536c1167ee235c1c9c07740af55ef45348bc0fb", - "275e441a1589572ce76067e7db8a51755d6133b3", - "d13ce9d0b458d2d77ee92957a68df649a4ee723a", - "29f7e78c0b9062cb8b12b327253a6dd0358612e1", - "fda142a18547351ad1085c7a82fc0546a5aeba57", - "9b7367e990ab8251597dc85b9a8ffe46284881d0", - "53978253c493013d7e5f6cb4161cba6691414fb2", - "719b865582fe63cc16e4a376a28296853c19ec95", - "f41c638800df3f5ed079ed64ba1cc692e6976c49", - "c29c03903449bbe998640c7e9db74a76ec7fe06a", - "675ebf4acb10bffce2bf11a5d058ee22a04efc17", - "42fe786b7af412634ab8c2d939bad0d9dc29e38e", - "e0ea98985e05cf5f806cf8215ad3a1ee15423451", - "72c1a989bef60be4a8c1c62a3efe1e92233f6a7c", - "772756db2182cfbca706ee62357ebd2539f81c16", - "0493b956a14beca895b3f0b5e2d7e3471387ee63", - "f7c14287e59c6cc41cd4f6296a51694b6a5c8249", - "0e8875810b6b895b37e028a0f9a75ad14d17e28b", - "61322a1d7dc669604c9a8621b60eeb887e60dbd6", - "b83b48401a4352c533bfefde2f19b87815e88394", - "9f99251bf88c0efecb6cbcc62d5cb64be4c82a9d", - "507b2342d683a10cac317346fd5c743b129fb786", - "f17367f08b15d4af2823534180b290128852fb6c", - "738a4332f3aa8ef2c2ca698444621f7657c611cb", - "03877a6ee4f639c8449065d6e35709b22e9224af", - "e6b3645a8543654224140ac5854ab4584911b822", - "99a6807e22830dabd3f3aa5631dda0fd38940220", - "1af1a81e2ac30f5e21ac1eb39ebb970894c1db95", - "b026831b99bcb0c4b259c3446f969d2e75978474", - "204b94938a992ee3539324c70b922dd4b05d4156", - "0b8722317353af3bbb28d8578b08c682a3a442aa", - "ed8b651f6fbfbcb5bf258147d3bfe276f8e183bf", - "daec5d11791b7e87c8a67968ce2cd9a066167f6e", - "389e82aeebbe95519bf2957265f4e7126d90d27a", - "e1b25bb9af0b24562b51cd857b9fadb697ec6a0b", - "007d459a4ee5a2b29fdb5396d291a151b4915c58", - "29aa55ecfa77f792166b12a8188a9d1468af66df", - "519a1e30b9f563abb78654798be8304e55b1ef2c", - "a0b67afb6b3335a81dfe400d2ebf32d7d83f1924", - "edaa8463ac326baa34c99976c36f31a957e62190", - "7ba5b22204cbcdeaab550a7e37a8744a7760dd9e", - "34bdf077fcc2bbcc01cea8a2a7956dc988212815", - "b0f7f654a1663d21eca4665f9f98912c655065b0", - "81aa485038cec17ac15c3f39c8127cdb027e038c", - "be9b86ac9a898efa539ad74ae3106a4dc82d5aa1", - "868fa4e239b59a6eaeede9ea17fe15c466f018d5", - "27270db6941d575ae94c028df1b21eec448fb9e9", - "d7eaf8be7fafdd96f635954521c3e917fb9ad7c5", - "7551c2a33656c3065755e66519d245efcc6f7330", - "3625c061aaf90c384868b7f3745f7b77edc63b27", - "f68fd5dda2bfe7e5c8bcb961918ca87b5c8d4347", - "5d0ce8c1973e14aad82dd51c07fca8cdd5ad3dbb", - "356c75587a1d45c1bb02aab987ac15350e3dc665", - "cd84e01b39898103907e183b79b99d49da36fd50", - "8f76cd178ef94b5784b6a8011a71870b17705a77", - "9ee1128a70428a4ec7938173d6ba0f577d6b3069", - "86639d28029e7c8eb0246db1de83fa9134fb9997", - "c0aa7fcbc44e33a937bf21d761f9b5d348dc8cbe", - "451714744633ac72d15922ad651deabc611d1db9", - "42be14e5a7b8991d4e7be715dc43d3fce0326021", - "e653ffb2f2ea14e1bcdedbfaa9b7780e009c3dad", - "7962ec3bb553bf9103e7a186a02627a0f2086b8f", - "0a89606183c4d5aea122d6406a5c3eb2be895ec8", - "8f406d3aad3b5e1ac37486c71af86249f2f577c3", - "9c1ae44ea3ec24e3bb3a60a68fa8d1211f6d1bf8", - "27536e3ea51722536e236b916eb7d91c9ca98fa0", - "281ddcbba655858fdd5a408ff8c4ae1ed24ce0f4", - "0fcbce768b9f939b31c04132b00f18a27fc10fd3", - "3d483bdced0dced981b810c6a48caa78ffe7253a", - "a962cb8891965e5921b1f4910e99a36e688a9ac1", - "038db5c9c451e3e36ac5a9e48912fbad87502731", - "d376224b9c1ef9af6fee83ef01b2ee04c20319f5", - "50b1a2eaf172613919159f92bfb3d457174495fd", - "e710068ab927ee86ad0d1151531c2ae34b121321", - "9b0da3ed3be75dd75d445b503d3a95e743b2cff8", - "074bd51bbc30fa82ebe182fe9acaeedb8c7ef438", - "110b33a9b62d44d9792e0b5489e7595414e32464", - "83fa7c43089640b59f9ebd14ab76eed341284b26", - "a9de15a3d57fb813133aee02a6ae0d356e269c08", - "e35b6405fcf935e87fcfa50def7fa0f80efeb726", - "0261c38912717678437bfccaf9dc82bc70261e02", - "c9800a30504106c706326feea7567160ba67dad6", - "797d205f3ba57f5b7a95d9c94c0ade68012a16f6", - "6dac6a3ddb3ceec1f6c495d27143a77f6c5c838a", - "1af6993dbcb5b1dfa7719273104789f392473e0f", - "18e8111348312a2e2767dc7efb60f1f3df510ba5", - "1b0610afe3d5bcc4a1974d0ab5e8771ec2e1136c", - "1a5406ccf15a24d00a98b9a8032b935f107db3c7", - "d82fbd903ee1e18c6a472e18d6216b0f3ae062d1", - "3f5db998c2229ebb746b6bea276b30cf35e67209", - "fc642d958803578c20d4c23dc4c22a81c3fed837", - "5187b5640d7ca637dcc81752afa8c7186ba5b63a", - "9ca79b85d01b26e17e01e9d2afa72f902e3cff1c", - "6c8eac6e855e2ea8aeab605c070227fee4886f52", - "fbd5bb18023140aa47441db95c5c6e425eb36755", - "9037b528e4c59fb11f127e91e9dfce6981be93f9", - "f824c4a8333300fb48b2a6f3180fdb7079e5df3f", - "5ddd3993d2511402aad650bf8151f103d051e8fb", - "f6a7743e006826f1bc0e67689a42ce59273903d0", - "41510d24645438f3f7e26841985b57395ba4d63b", - "ee7620a802a13bbdc0aab6ee9ed5be64af55deb7", - "27dab68221b340a8e32117c2614206156641efb9", - "915d5cda9e21ae6d6dd50475bbd5beaed9088c8e", - "5f07b4e354fd330e2af82442d6e4feb9aa537dd9", - "3a3e57b1de5abf4249926cc8f71be71b8008fe2e", - "a7f5d9980188a6f146193447655d2b9a9c9a9b0b", - "1bf603dc03acca6369e66c91477c6d5493720595", - "7f1a82b40bae1b97c97505c2e038607e68d916ee", - "97956b06fab7cea820753c1cb538071f99173a02", - "b774f50e8fe309ffa9518296e0dca96e2b6aa329", - "f148efed4c6dd03e6568167db4b94b5b0b91ff68", - "d0275578f535d5644ada372923d749d86e2c91d1", - "6004ca07f5dcd4b3539237fe48e11c3f07bc9c83", - "d91b28a8d208c21fec5012f60d7052c0504043a4", - "10e6520b81372c1f9215b41fd8de26dfc26265c9", - "644d0643cac05a8c35a9ae75096684cb810453a1", - "24d417effd3daabaf210d1c198c3cdb242eda0a1", - "2f1d1a4ba1132a51624070e96699c9113e74e02e", - "1b88e59648977946136b592352c92bbbf399acb6", - "8a6b62892cfea4101ad0c7eefc465e14d7d46e09", - "1eb88833f3619c907715160ba3db08a35f535a70", - "4308833a3e042140f6f575f05e76e30e47a16e72", - "05d449abf2a7c10c21d25db1fdce1f37547d41e2", - "b1b4d7a79c8a616ce2929b073b389f9359bba734", - "942bbf29e46a42c8d513504a5fcd3fb311da7557", - "75b4172c7cf619d2862f85b5b94b0ebb50d70273", - "0280d845615cd24cf32f766e251508f381c6978c", - "f9e30a6b8ca6c0e401c88bda7700892ec068f3c4", - "abb2b4d61bddcae851fc0b207ee2253d9640e1f2", - "f547dc535fa50270b0dde4ae612a6eafa13d612d", - "682c0454c7b3dea6dcee516c6262410e8938c849", - "05f092dbcc41c1babe03956cd7da15ca6f997d12", - "819272234eef7fd5a3c6513a88a4c03636095584", - "1efed0d0ad95ff26142c576e63b8c602d39e0bfc", - "d06a6fa2fc3ed12b2662a609a8fb6ce054c22353", - "0669ea3d4a5faf5fafb5a70003ef2859c815bcb6", - "773e810fd95414af969b79682bbd66f82a0f478c", - "2480042e8eca6c91c5eda1f44b69134d09acfbaa", - "e058be2882fc01a2185212edcee770bc59346f05", - "0b7eee74be4866ebc23fc9355ce7d622435352a6", - "95f0e6f558090371b657342e3fd9a3faedea4a7f", - "dce6e24b4b72502995246ee0044953fcb8e7ea31", - "daa8492c68c6a41bb8a44f184bff4166f5cd421d", - "495865634d8c25f8e470cdf3864b62d175d3fc52", - "73eedaacedcbe3d6fa6dbd61175e571c45dde5db", - "65e718fbfa6dab8e8d5476cf134b607206e6d965", - "f121729bc1bfc399056f2c75cb733686814720a0", - "97459484cb0e0f41a1185c6e99fb994d00994aeb", - "bb76acff886184885cd262993aa4881773345ccd", - "961a83bbd5bd5f21490fe0c4415c5c43564981fb", - "b0df9236b4470ccb92db426fa17f3355514499b0", - "006950c9d7150c418c2a9affcb0fac1df9d5837e", - "3d98209e094cb09f932183109c68aff8f6789120", - "6539c449fb725fc647a01128392f71acd01c892e", - "bb0f7986f49ba638c092ad7849964c43095571f0", - "3b709254daa125c7f8440227c3fdcadf7583e616", - "1bc75b9f978cfcb5f86be6b78de0670a228194ec", - "3f9e7bf39c71bd1e781565e97311ec0bc9ca4dd8", - "00e731f4917e805c8df7252228197bfd86dc3e85", - "8e00ebfa454c91687b899f63cf224957966b32d4", - "5a2ddf992d135a647e77ceefcdf8fd50b8f1b503", - "7d4518eb1728f4d33a6d4a8b06ed666c11dfdfb7", - "ee61b3f43ff8309923ee62386d8058578feb6992", - "6f0079dc782cd267ee7f2bc1efac0b4e1b959ac7", - "e24a499d0a46c2d5021260a0c858fcd62525f544", - "3b82acd434b9bec22e76cd3ba276ce1b8e286318", - "7c32caa24c73f52cc39f3af98d451f75bb2e8773", - "e72249d9b6675f00c6411fa659d6b877cb94f32c", - "29c57eeea632fcb862099db5e24cc45f13e6e0c3", - "704301142885cbb14ea45de3b3cf758bfd97a3f4", - "3451b5d2b387e7103b7fa855ca8899d4c0e04abc", - ]; - - const toDelete = await db.scores.find({ - game: "iidx", - chartID: { $in: beginners }, - }); - - await DeleteMultipleScores(toDelete); - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/remove-iidx-extra-beginners.ts b/typescript/server/src/lib/migration/migrations/remove-iidx-extra-beginners.ts deleted file mode 100644 index 70478d3e2..000000000 --- a/typescript/server/src/lib/migration/migrations/remove-iidx-extra-beginners.ts +++ /dev/null @@ -1,989 +0,0 @@ -import type { Migration } from "#utils/types"; - -import { DeleteMultipleScores } from "#lib/score-mutation/delete-scores"; -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "remove-iidx-extra-beginners", - up: async () => { - // copied from seeds before they were removed - // the charts themselves are not guaranteed to be in the db - // so they have to be hardcoded. - const beginners = [ - "661ef517b026d69617787d3330b8e9dec4267e9d", - "5db25449c7b2ce780c864d3714a652ac763cf9dd", - "badefcb014e1a7eb180544d559962a4ddb761c58", - "d8bc08dacbecc4a57d05f501ebaa828e2a676df0", - "076c5aa10170468a2a771cbb461b30ca8b5d9ccc", - "9152feb1f2cdfc49f6972e626e5377cfbe9a3afc", - "afecfe333c2c0fc6087f14ab0d99cd479aba763e", - "5ba20d81aa60a6341e60685bf5d855c47b2725ef", - "bd92be1e0dc5f9cb2d6c6f05322c1f1d1e8d26b3", - "603cc46b10b5afe78a80e9a3da195d3ea748288c", - "9eb7434051156021b23e219bd5bf7504d415858b", - "565ee5e53365ff98196ee5a75985a58962702445", - "8384d234c4cf1c4c6ac50c2187384a816088d7ec", - "45f4d12f5268c2bd1b8bc13add5b08d0f160cb7c", - "78624d9d5d0ce4dc54b31187e448046d53237f1e", - "0301762d5593914dfce8478ed0a67abbbf642fc0", - "1c98b4e3a051058ec13123c91c0c600c0cc515ee", - "4bcb67d0267ad6734aeaacccbd6699ade3eea7c1", - "634fcb687087fb6e6d33440a573fc70736e4a2ee", - "774cf1e81d2e73a50c9f9b565f1ed1ffa16cac68", - "4391de0a3768d01ca40c4d25a304c81c50d874bf", - "3d5bf64fc577446099fb7ddd6f91b7bb441a8b41", - "a4d99811a54b103af446673221f03531ecbffcf5", - "d50e8aaede0de6cc485d9fe9c6fffb21f91c2530", - "4b74fc4ef182f589995db1c132fd4897cb9685fa", - "36cb496960ff9df38ee2f89996851ca42790c315", - "912ac090102b9ad9a05a87261907f3edc3f82691", - "2b393fa0857931aac303a26a54a5a955cfcc9299", - "b549d6670cc30624b8e3f87f97dd0d1cd1702968", - "25795d571d54ddfb27be5b2fc92c65e6ea68bba3", - "4b1ccae70b551f3e98e8fdc55c11f6c809f6cdd5", - "d26a29b485506f1761bbcfc99fe1963514c01028", - "4e03a64a613442ef5c18a58fccaff8889189e9d2", - "c435b0e66a6ead55b199d60c39cbf9ffd462a324", - "649fb4ee4e0a85ae2d108afb3f6ad36fde48b584", - "132021f620225d183e0f012b34ba6ebd66a402c6", - "18e9074f7a049c6023729de1e1edb9844a5afea7", - "8584a69f97e352ae8098492281542ec64e19589f", - "d2c16b237907d891cc16a1621e9788becfef6f21", - "3df0d37f3bf27ce2b8755541b407b6a2497820f4", - "e633d900cde7f44cb92d8bd976e5230fc10f9561", - "41ce5b44f364810496d689e751d939cd6da7646d", - "9c423859fa5467376a7a08cb96e6cb242282aed6", - "2dd6630dee52bea24bec2b021ff93b0b85d69377", - "d68e42c9b0e47c049985333178505be8de03d5f0", - "7c5667140ac1849cf14ae3771160bb07c2b54af7", - "4fe8b90c77832a5d656d69f046205dc4a6c03844", - "aea3e2128fe4ec63da7f4ece53dcf7498ff7aae1", - "5a47dc5639816e0fb9ec09ac83d53750d4cd4913", - "03a25566d002590ad1e9c3d59c76b8f954973377", - "34c2d0fe6a02f36052f17608b74694bdc729f309", - "86fac1a7a61da348f632273baaf89400b08000bc", - "2a0f07945050fc10c4095dcca54b4d53ef6beb4d", - "545c87b32cc0e2c5f93152431b8a011e59cd523c", - "90c0d2395690e64bffb295c59aaf867bea1de36d", - "842c48ccd6c3acdacc7f25d38e694bd91be90cc4", - "bfbb0c4f035698dda3e481ef97d5f4239c6039b8", - "739f198a65dc013b85e057bad0ea6cfb485eeeee", - "aadef0e3f5d1cf853b549b91b6e96b8d404b4c9e", - "1be0fd1abc68d0d89f0a57645255ed6369fc516a", - "95a83da1367ae85c138a13b45c936c22a94b6eea", - "eef1462f4c8d4f7427d82cd8b5a1f8de4cb46f9c", - "951f61227587b464bf95b04c936ed81f1e017213", - "c9cc718f69740e43a3f4c175fcdd8ceadff89246", - "a051c7c54f30fec226a8cf818acdf177cf6303b0", - "f83bafd60b4e4f6fb487bb22891ddd3cffb65ee1", - "d4371d5fbce357fb9051e14cb840ff260f9e314d", - "6baa57136dd329a61f9696b9ab9646409f126c41", - "51250776fef8c940b849c416f85cdde31852efa5", - "bdb69fd8088eb0559924c0db6410657aad1b168f", - "92b0807fd7b28a018f591e825c5a5a7e08b57c70", - "9e14a7c0e548bfef46b4541935110d4ac0f7ad31", - "4c2e7fa313c532fd7c9d10e773b6f8b5ebb007d8", - "aa8b7fd55db286e1aaaeac6f10e04663b625faf7", - "bddb0f0674c4f46ac566f6c16f67fc168c85ab4e", - "1a1d9f07d0eb6aa9185e081a51caf3ed0ec810a3", - "5590b2fbf8c9b6f64bbded8609891b7c7ef4d58b", - "b373944c0f39817bbc95d3473a6780460a6a1925", - "ddaf62ed398483f92b16f24c5d9bc3b22e0b9463", - "5b611dfd1c7501c53e33925decdf7e82731bd351", - "a57bb36f065df9bc877cf49992ea97a02ace31fb", - "d6c7f16b0f7858faf3405702c0ed204aca6c50a4", - "3a55cec3b6a4e7431f0121473c83f0ee0f660241", - "b079edccf0e90c80286587b5b619587922df2b26", - "bb896e6d8b5a74988cb2e7999beaafb6fc34b7f8", - "f1e9be1f667be2ec00f65450583908d369bca3e7", - "c4e32f10002bdd99d18f683dfebd5d774e932ae0", - "2f609a11fae78c10cd406fc0ab42848a24c05886", - "ee97d7fcd90786be6fa331997d6c36b4d53112d3", - "55449c569329c31abfb01f0712b4f9ecacaf8420", - "9b4b295b2b953f6a67981957d0a53aab55e8dadc", - "d43971c7afbfbb71efa3a6b3071586a67f9358c1", - "321486a05d7e28fca044d88b95cbdf4be1ab56f7", - "1dd1bfd3f24521a37440e5b5b3a2b1614781e726", - "110cc1c334849305240d4571d58c68dc0f49e16a", - "f34b22a54026a1e286a79053c6c0cbd8aac82111", - "bd05e161f1bd2d7c0815d763a51f25a1328019ee", - "b9dd1bd65a79ab68299cbb40cf930f9f9e0f0566", - "cb1c16e68b7beb3c955631643fdb6b2a3cf51f25", - "eb240a2118e7ba270b574ff913ee9b1948c87f84", - "b253b7d18813ef655ec9645ed74d06bea3497600", - "de2c9d8835122cdbc83653548240193f157e4c56", - "c608109064b0a3d7700fa94cccc365d7da1b065f", - "ef50dcce52d277246cbd1eb2ad0f63b086b15613", - "bbbede4a4341a5e48d9ce2272cb2a35dcabe8236", - "af7adf981622e4fb1e4160f583af5a1e36adc1a8", - "35be3c96ad2a423729b158318c49506e52720340", - "20542febf4e69e212d8aaba8303f5fc4a1309839", - "52f0c154a646232609d3604970c42e021a45bc25", - "824640e1b06f8b5a1c0fdf997e21397e1b21234a", - "38129eb41a24bd45d6d7e81fffc247751cf6b4f1", - "1c8eee750da7f77482c68bc2a5615ec113a2a139", - "2b7b3ebe2cb3e276418aa0993c4151be2cae2510", - "efa019fdffba654a58861a2c7ef4e0b482cf6740", - "4abffcad8ac89a23816831d6de29a04c306fd634", - "003e1d384c306515cab3087c8b0fc69ee4b846ed", - "d7149e80a0520654115c279e2e568777d0b4c7ba", - "987f4d414415647dfad38a0c62754798e64cc622", - "9e402abd7dc68d002ac29efe741bae1770c0ac5c", - "761983a6a52dc19145a20839f24967fe6dd5e58b", - "3b5c6488f14c7bf7ad26dca9bab646c43b0db033", - "7e0e8f7df56fde7535e804640f48a91ba24300e2", - "97f509f5aa3b4f012eb30ca19c032342058fb5ae", - "f317126b5fe11b7983080dfaa3769238fafd4d25", - "154495d34250b918ec43b8e5dc1319a994dc4ea8", - "5f4b69f18f43d68a05c62fd76e0926fc5ace659f", - "b36f6b80497a5aecbbaf587c984b36ed7f5fd37c", - "67080be1cb2331dadc3a4ee797b8cd75243ed950", - "7d9c61075b1a32dcbe93ff54539fae9ac1b21285", - "8bac128c26535144ccf702c28f71d0b1565f6ad6", - "14e86070032a42ef1c80c176cc48c31845d7c3ff", - "23917e570bbc0949afd97372ae0a5907765f0e37", - "d9d92cbae7abd8d50c1ad69eb0462e87ebb02066", - "92cbcb207d3c75e30ee25a0c2ce4c4cdbe7dfac1", - "f565df60602320e715ce5bb07095446e25e93a26", - "acbfd89b1303d235dce0c8f5d3039b90a0763d59", - "3ace93e28d251c458506f0acde582742ee5a7e5e", - "2d8dc46b4a621aaa954cdf9b1432d15c5f5c4783", - "0287936bbb7e60d70922f895c81f42a55a81436b", - "db9355e671e5af59ff8712927f0386621a911874", - "f47cb021b4ebda91d0404c4f30280e6396cd4be5", - "b1a4c2a959c1b1fdbd20579c1b874d40e8355dfa", - "8a1932353f141cc44dfdfa297243e38eff6bc88d", - "41a61e4be75e329d7e52f034dd03b38cbfc0dc31", - "314c5c3647b2b1ea8d5d4b67c9bde434c08ea40f", - "2e0261d7fd00c0f4f76e82255658b6e27209ba98", - "00c20b66b9c7a286f918e37ad0ba3690307d0288", - "73dda04a4c1eb86e5b9316cdaca7fdf8f9dd045e", - "4e0e1b44ebd373615fc21de1a8e2afddeab30a0f", - "869a59b0728b5fd3d0bee8b35cd72e363267e588", - "3ce2b6ad46886b244106c6c6ddbe50e9c3ad47c7", - "f1930ae5bdc25bdd6bdc34956389959ec6fc6b9a", - "8d71628f1d281f69e2162dfb0c6d6ac55482a0c0", - "79959cff3137fe640c3c13975fb4bc20b5f81983", - "f6873d250b57e3246ccb019c15f0325207a27199", - "b3cda4c1989ae7ea78d1ae2105f828f0b5c5bd30", - "bf0381fcaa3ea0635b5b4937ff41f71ee68e527e", - "ef0c0c8a265d075183015a8d817aa28dd3d6490e", - "97d9f87e888c23587b7690c9a42c1a1b1ff77321", - "6005b8ac86e3ee274193b21d148c32ac7e8ce21b", - "fe9e0497e0d059b530e2be559e0789b101f82886", - "fb148b2fe9b982420f478cb60f335afc46917405", - "7e3f2df88518a060f5bdd1d41041b061868e42b5", - "8eb325bfbca0a98e9d265c9650f1a73c1b7d3f3d", - "1f5dc62094fa8e5f70818a6a6052ad7a3c339867", - "5809be7f3ab9678af36a85ad9b1ad152d5ef6b97", - "6f6386629a02a3c05c66cf3b76d52eea9dfc1f66", - "32fa465f6ddbf7ff85df79bfd702c7b4871b2ce5", - "359febfe39a747bdb0d23a4e3946fcae340c3d8a", - "f1e607a001b8a82f2eddd1e4135e0686fb3c9c02", - "434543abcfe7dc2b8e31eada49227f5d24df9496", - "71b138941abef6865e796733767edb216b02e533", - "4d5a45e2b16cc6d1d39b5cb4fbbeadae28bd2818", - "ea59c3e921437da14e3b3a3fea0b261f5f8911f2", - "4133265895f20fb034c7827f635926730c277e6d", - "32f07bcae894a62660b3583954c88913758d2fcc", - "e53b65318b548eefb4b8b6427d6de008bc4419ef", - "5cec40c1ce58d4824ba7157361995897e822aa90", - "5d3fd69ce84dcaf7acb58ffb85bc264ca979853a", - "6bd02e8f9871463ae8ce18331a38ca6f669fab85", - "3a0a45380dfa73a523b0aa505bd95157e3f6ecda", - "89c3b3417577d5a212ed74116eccb0eae65e7071", - "88bf55fcfff10bede9503e170ad72e378a91dfb9", - "143a8bed833222c83ee284ba42159ed420932c0a", - "05b99fe6781edd9b2e730074cb4e26ab8e0edb25", - "c9e0c22e41a885dfb9edee81b2bd24411599017c", - "5e2fe3883337b15f47b279c483e47c57ac63272a", - "e351184f283bce39e43ce6a3c7bd26af5689262e", - "6ff4668de182a47e0b1a6fb534824971448a0b06", - "05565ae23927a7227578f7c9ad837d759aa36e07", - "8573e508b23c69304b0d60a8f65ef881397aaada", - "1d345afde76156f620f9385594f517a3b66704ef", - "274412110cff255b4e83d4b2ab034806a487d391", - "c23a69ca5157222526cc8e979dfe4d0c0e030144", - "5f0d2b7424016a0d16e783d5392ef9cb0802d1c5", - "d670727f4c3edee023ebfc5bc3779b9ee61fec0a", - "87037822b3b959a98e4875b2685e6e0284824818", - "fc7389fb7453bab1c40abcda82390b5ea52bf7ec", - "58147614cca9f43f4d392508da8f5a6eef850a6e", - "b98e20a4e21542edc04447f63a7f65f6daa5c944", - "f3e64f88953eeb2d1e3a809a05d8ed2d7cd13f25", - "61aa9f77e538f87a72b720726685c0452ea1e6ad", - "fc32afb41e6a53a7c17dcadae04648ca1698391d", - "e3994c1be06d17c4311245ba3554445245ef50d3", - "85b881645fc988984bff9d650ad6ce3f15954d32", - "e6722a337ef56712401fe2289ba91fc170f95d5e", - "48c637ec5619e2b0623e8934ac602527b139db80", - "b3a17ff07ec43bf551b2dddfe1e1d3bad0de788c", - "d2f7d85edf14d6def97d44d22edac72c52cfa530", - "84b8ee4c6c565535568e6707e327f48fcb1c02dc", - "931db4091942668efd050a8acf4a4cd3278fc607", - "e1ae1c80a1b63c5451757a6097c7d65837339f74", - "b413600118f500b3bd8bc4bd87a2e9ce66653e93", - "bd2f959f0feb0ff2b38c9e69a982bae0724a6808", - "e74e59833d1311b9696cf8418a0a5dead1c5d61a", - "e81953d7042d923453f2ee38aff65d7ae06c0920", - "3082f75036b6196b4b8dda1d04b87e8cea33cc8a", - "18108c442d57ae8688a7be265cd2309e52eb3823", - "5d94fb94c26235f084a3a165967f3a2052690399", - "63772bd386708944660ffe118fdb911477bf163a", - "4b9b2c93e24d64cc827cf307836bf1ea645259d5", - "2a364f95e38f094fdffe931d0ef0d95e065e8ad9", - "5c9d79af48b880abaa035bcb608a4af7dc11874b", - "cc9127f801536f308fd5be2fc3fb529a01de2f3d", - "5721c3bc13cd1444d1eca0d75e0fecdb31477c28", - "4e4f535c744ab77b64e0c774af9d3c603dccc6b9", - "6c5e4ab388a2384dba1c07521a6dd453d2472339", - "8d02f8458554f10a1fc2935f9edf1a0fc1bffe41", - "647e23e587dc009b97a42f1d695bc2f4940187ba", - "d8fbf3e52eba573c04721cbab25409f64f3f863a", - "aa3c7075dbe567c49f93c12dbc837ff18032c1f6", - "15766bf8720c9cfc38a877679737558fd92b2873", - "60da87f2cc15cd560107cebaeb4cea0306b24f40", - "acefef2e119d69a1b8c652f54a90dd71f7eb2da4", - "25de55c00eb1e2f66a289e7dd9f55f1c18b6e0f0", - "dce02a2af13f45e303849f3d01422c79b3c517fa", - "9131b7f5299abc4a3898cf011cb60d5b2767a176", - "c4abc38f4caf6b8205ef2c06c5262900bd25ace1", - "158dfe41824261305e91d8c8856aba160266d9ec", - "9b03fcb6e7055450550de1f77278dc2b8e631006", - "ada22a32b9c0a4046b852a1054b940625292c24c", - "fab9f586312463b0e691603bd1423fe6009a758d", - "9a753509e951225ec29323de2f0fcc57996664bd", - "89e00a559782f55944a444e197e5b77a9a80933c", - "9eb7806961df7931a853cca6b34e0e93b67aed00", - "981a6e6028402d8d8b1413b2db687a43f0742265", - "856de204915853d5a5621924621b4989eb0d6f4d", - "5cf850241f14347e435708c4864a4d5437def899", - "912e8d6ca87a83e1f5f2492e281ee4e9320e351e", - "abe2585d5a74f7183f067322593902f183d1f5ab", - "17ce6c85cff578e8f6332a3ddda4da15a83a951c", - "c3cf771dcbb5820063eb92cddd3d1f9ca552b49c", - "9217aad3be0c2e9137551675796bcf30bf86385c", - "b3242f5366b7569ce510bf2867d71f148659c5ce", - "3b4eac036e2ead87527b848c4cb09b103099ed93", - "73270bde4f47973b4741beffbbf984ddf4722fd6", - "0b7c24db33a65216c7071ecc2c9038066d531cf1", - "6c5c8cb009458d586c1f6bba31c3597bf93d7058", - "135353d0d80d7f4d53303e9274c683b194ef7fb9", - "bbc2f1233f6c257f96b6c52c60b86048521280ec", - "3bb3fada8e9ec4bccb3524ce141118edb2ee4ec2", - "ba92a9a30086b080879eb2e6659b1bdfb45fe7cc", - "c61739fdd80d2694ff1eeb0c4affa1e309a2c7d2", - "6c978544bd31102016ba757cc9eca9c2b977e48c", - "495167b4b7ed2132c75f29217226d01edf159b9d", - "05e4a77c9d5224792fc1d523ca73533b11b99c49", - "49a3cdf900f1956dcca818c06402f3c6083cc064", - "6e6fe05a55d14096d7dc6666971fb3bafe984981", - "6a35a6dc7c7a0ad54feb97d7ffbb68d96c6c1fe2", - "445048a42ffd2b99f40159227ad55ab102ed9517", - "f943ae18952b4b652ad0d7ac03ee662a2b996cd4", - "1d97254882f0c942bcc6ae94f398eabe3529e5c2", - "98771b9cb9eeec788cfb96f07b318c5862185691", - "469b93b630ae13a522653a6a09dfb152297a1103", - "191e94fef9e39ad64ac7053609b316d6bcd88998", - "6f2c87359cc182065f00647e9e2c8ea53a47100a", - "211a2590e0ec315770fb0dc951811bf63a31be16", - "6776022cbc158164cad300a220f4124e8aed9fa3", - "1b4dd9046af2f02e4db4f63a062cc7566a723ad2", - "c86dd9bf95aee32f3e2769a64a50aacacd0d2cc5", - "4fffa6d8809bb6d43a0cc3f9d81cba06f60c35c9", - "053309e6273ba4ae18db581240ee274a9624650d", - "642a16109de71c902315d1d52ca4f93eb2be146c", - "d31b02d2867ff6ca0a6c6f48aef52474a4dc33f6", - "fcc468d222de0ab95460739dff3de57eed8d1717", - "20fb5e4da4cf16c47773f2bc913d6214658f2f4d", - "982b6c05cfb5337d75e646b4ae328ba2bdad91c4", - "2bb0b45659c549b4b5562c3ae1c53646fb4e6be5", - "1bf8d06211232d3af4dcacb4358503ad1477972a", - "ec4fd5b625658ebeec8efd0dabbbfd7257c2f329", - "73199f0cac9fb5d3bde33b7ac7b5b37f37e709f9", - "dbc23d272c7934a19f1518d946fdba5739db6293", - "a7f48ffc54f93fb84ed661ce04efdf53c8cbe98d", - "58da1cfdd00b03e0f5a3c3863052840651c67943", - "28219e8374b133be408424c19a5e64fe817cad39", - "b7436a00af93cd59078bd3d271cfc6e9534a9c5b", - "b591163919446bd5cee65afb537e387952092057", - "623bdc242e7997932f879d80b112549441fa26f3", - "953cfb211fcb78cc7ca316587335588f92ab8dfe", - "672fe1d3522588ee4f4876ddbb9a336697514215", - "b372fb595269347a4c1423c5a5dec047e8c64219", - "d31813d7f861d8cbd0c27b967b85f6dde08626a5", - "0dcee6320f0942298ef1109d912a64f26b852f59", - "e07df555b0143ffd7f64c4b8fe2a03d0a87653d4", - "798df9d8129e134e6fbeb6a2676f8fbd95b87303", - "431e01faed05ed856dd7471370ed60f697273735", - "2feaec1c81fecff2bf227c09eba8b5d143ada31d", - "7bb9c4bc7557d5c086f26fa1d394e2bc4cd61459", - "a77ffc29ecc0cfab3880efbbdf7833aa7f12cbac", - "4f47f6732cb15a760acc918d4d5ee9923638e6ad", - "9298a270beac1b2bdf7098e8c370b81e56a76aee", - "930a72a66717026c08111ec41e0d987613321c59", - "c55043fdcf0a12f423e70094441f8a246fb5a518", - "69b7c73fd53cb7c003cedb6515a03b6484a5ff1a", - "473d7db7fe74d5ef48b8cdb6f78c3a0308e7cbe8", - "f33029333409e829c0c2425ea2e2c5313f17ad6a", - "f07d57305fa377a856e33db230b12a7cb72d830f", - "50504cc2b0bc8c61086c664488eebb4b096c5f1c", - "cc4512dbb6496610bd80decda249fe94fd5490b4", - "d78f91d6ce8de4b8db77a2acbbda9df163d1263c", - "8bb316892e5c7df55b5b450f3ed7d0b14e110e76", - "09e7035a1cfe261abe911e2b6e885d167b241402", - "256377f02c7378720e60dc129435355c06868fda", - "29a0dd24b4427ce98be10c4f0085977bfd18253f", - "5d040c18fac3ed826ef827ef5f52ae6a29aaf227", - "fc491a68d0e3fe56dc43b00e511cd2736df87f6e", - "645d83e627654293ae0faee6118cc4de741da862", - "e41eef2ecd3865c087413b05018b3ad1c7525291", - "92cdeebc7767d89208eab5bb9307d0c27ba42cbc", - "9dc2df9bf9d4487856ffc005088a36b81ce3d60a", - "9bfcfabf6928e7136dfd4d3ca02f5818a34f24c7", - "c4afd4d18fa93aaf6a0919ffeaaca8400724e874", - "03398570a0f6f9cc6e801c1a3b7d358ce4e0674d", - "16c65e5861ea9037919213a38abc2c9b3c63db3d", - "eaacaf57ca8b2eb7ab21a0c9f0d6ddd612e7dfe0", - "20d99e144f08bd704961f4a10a6a00356f40841e", - "9625ac84fa3f6d9c937f2db84da2c20ada875ff1", - "1a5e02d14ee35a4e262ec6df346b589c7d6cd849", - "e1ccf35f312e670bcef36f3fa7dde64720b6c2e6", - "efb361a3210ca28e880a057a200d8dfe29f8a49a", - "0560f93794f79accda85f5d5dc1febfe001950b1", - "eee7f0cf957bd6de9661af3160216e6bd7503402", - "389ec863fd47bbf8202903a888c9892b5d4e4601", - "49212d5592ae021321b1d0b317e63755476d3f93", - "27f30b6f8aa4668d569cfdf121f3fb23dbaeeae1", - "48c42a48c8493257f9137ec541057f25b9205105", - "d552cdb76740ad4655a0af177294e94df9fef11e", - "9729d7c0ca63e5ca7ea529beb50ea28331aed3bc", - "dd98309f2dc82f2ced97ee22c46190ec2967a22b", - "3055361001656483c48c5f57329d3837803357fd", - "f56b0e71751e5352f089e5c5cc7946c1b680195b", - "41068945d7673f9cc6f4ff0d614f5c4c2e86a72b", - "6a9f7cb1585630f4f419a239118085c1332ce97e", - "b9e23d53a9ec08f08e39f503d1d91d76c6c4e92b", - "411b2a0a91f5406a67e22239c380d54e417c6c14", - "cd101799f67fa4bea0836bf1cae7f56483f85961", - "c751963865e2d389a8c05dfb33b3fb66588b1e28", - "7bd8bda5c695ecd83ad414b105ade4a4d443bfe0", - "ac16a90821566a47b7fec44ba207a3dc23e5c998", - "0e7bcc798f848bb3f393dec56c27b31a32d7a1e3", - "f55b652322417f6cf79f9a45fe5ffe8a7b986001", - "cb32c897e85aaad6463a985a059cd8975f756c0a", - "41c2db43f7c1ece6ca8760c1c8149e8f7c90014c", - "64f1800df8001f9b70fa3fc2d9f0a2a3591fe227", - "4ec95aa11b6bdd235e7eae759850aa64047d86a2", - "df188c438cb0619c51203ee144cc021ae1f5cc75", - "02f7bb9f4eef89d4eb1ec7d966f68a804b082dcf", - "1bd753ee8d55f543d0f1b36c0d71968fa6dca97b", - "8df5ae837397aa7de54b185de1375f935a07d9ac", - "068e54406bd9cfe6fa2c1ba25c4604249005c957", - "52e5841906b62148d4b32b613de6d2ca037ab763", - "1b375b046c1b8741785b98afcdeb0c317d550df2", - "275ee7f8f35ddaf883a90b2280f80863fb8079e1", - "ce264cc6c0ffce8f346729f8829893589dadc223", - "47a67a3b625528f1e50e5f61730ed3ba2202e1ea", - "876820530a58d11d6578b47c7e89011c3bd61b6b", - "d2994fa15cd04cf0319ca8d788a3444e514f4ca8", - "938f8c47a37f4854f04d5f092dd54017538486fb", - "2a2eb914361a101bf47377da5f7255ebc45506aa", - "5de52db3efccb482e36110b436e5927a81b5eefc", - "52fd672afa633036888512d7429c43d0fdf1260e", - "493f083dd62c8ea8136a715deb0b47e81889015f", - "f217354944876d478eef34ab6fd9fc792855eeee", - "d3485eef775f8967e6dd8cb54403880a910aa30c", - "a5f179871a2f87324c9de852357b148d244e462b", - "746b7c3f420a41e19e1bda63d71fbc5304e9107c", - "a3346c541418b5b171e821b40546a5506985b658", - "5214ad784bd487634342ed5accb0b6e50b9a3e52", - "1d55635f9d8cd1d0e9db7263050b5d59eabae9a7", - "f38e13a3402f4f07646ad24b9b84a914f086e99c", - "97af01d4ea8aa264b33abd8b5eee7cc656b7691c", - "c78b0a814460e3c27bbe8cdc28cb02fd0776d5b2", - "a862e6bc181e1b06de773c053a3e849537c83e29", - "fdc0a4e501a197c7e0f77a0a59b168a06231e958", - "60f514dd88ae987b9ffbc6fc85f6cd5d86d9add0", - "e805ef6643cf4322914df94d44b05c2c33a313a9", - "916f52e2757722cde0c6b7122e796cf666f3c29b", - "ac6e415f395c3363d4da7c63fa7a4ba5fb18b53c", - "3163fa6bc1ccbf0b9dbc5806ad253436911bab13", - "4c2599bf6b7a18f7ce95a9ab68f6a9e86d55d511", - "03c9f7c81707056b56aace3306bde3cae3e850f2", - "d448dbb537b8058cae0c1059876b6698ca35b3be", - "7a3fc6bc3c6f46d3dcfbe220f62dca5f855f6d62", - "d1e8d96d3568513a240e43b4737b09cb79ed6403", - "df7edca301064a23ecc40cd5068a9e2b8b847a5d", - "c93270bbaeb82fa7dc9d09f91f97c7a1504bd77a", - "c025eef1993f9b7cc49f478b75e7e3b118e2012f", - "7b87015f33c5d910b23e0c57077d92b9503e27f6", - "84fdd626a18709f6546dd61172feb573e5875716", - "a97094b96b0448fdbe01936a6b62ff35825c0eae", - "b4641c57260ddd9b0c766d348045b012b4631f17", - "c6e5b39ff3bb039f12e337ad66b57d9fffb11b7d", - "f1ba2bee42aee0d9ea6ffdc8835e259cb55fe4a7", - "91ce3cf27118a44c531308f7aed4f871d1c99e68", - "ed0a3685464b70287baa989d6763c359fd2852c4", - "abf2d7e317003083b78c92fd1d28a1d54cd89b3c", - "60fbfc13555a22ad9d5a17a7ef6c909f3dc798b2", - "a765548ce6c964d23b368a40bd86374dec50d1ab", - "6fc4ddab97a40617df0a3d23f65f6c6157d88713", - "2e31ac1f46fc3d9875110445c2f02852a3406aa5", - "fce62cfb8c7bf2a837f43e746657e6df3f9336bc", - "db4823ff5b70e5ccc16d3a0e80dda9c2bba8d472", - "4c3b715944ae9ab07bd0bf6eb89b7f4f9ad48a85", - "fb1f7514e58c52426e822cac7307413cc458e3f0", - "07cd9c1e430831b7616aa0874e861b886d97ff6a", - "fb352bb389abe213843ab5c53c70cffde93352aa", - "a3a04027cdcc6b6fcb4065246f720cf8d707003e", - "8091d2c5b9812f6a5827dcd084240ad8b6046469", - "a4d373d199174113de05c1cf7c95acba08485aa2", - "baa07c18513ad734dfa100170a03e1199f3c882f", - "885b7375fe79df4f7afa2a05ba70239be5451c19", - "ce5455a72e679a6fd858cf7406e6e39056c85ea2", - "161fbcf59a5ca4ddfcdd2d84d543369957599c4b", - "2a2067531b2372d2847211086620da44beb6aa02", - "d58f0b7902969a83e02ce67a965427135beb3902", - "442e0a043467292e3e064021ae24b957c7535ae4", - "dc406d4f6487a7a2d8f668a4b53dd5cf95e4fc5e", - "5662b4d2b6c7b23c9423ee39415abce3515d8967", - "106b2dcaeb426c7f1b72163fef3a414ebe1cef21", - "1fbf6b6bc47284ab5aecbc917bc5c69e9930c438", - "2fb2bff8de52f5414712a3a8fc06f6245ea38682", - "0202b3c5e522907af1b198dc1422dfed65503054", - "0faf0ed0f848cebe614b7922b87ecee481157497", - "9125c893a2f6031f897bb4041a2b806329fdf5af", - "d59639f546370774513085fb1ab54121e2b2a56f", - "bebbb9856a927d3a0bdb641658a7aac32ca491bb", - "47f46650d837c9d7e54e1fd72fb318a04d8f179a", - "0f048ed4b8b914406c1f709d83c179013efce9be", - "1c3e6c3274ed59d3549f49a24d2cb1f94be81e85", - "d421b2165778b73bd0cc82221240774d6a0a920b", - "5d7ac6111f7c4e98f65612aeb6a4bae64511b164", - "96a5e71e931a8ca3b2db1850f416951aa11b6220", - "a66b8e11b98d78957213794bd9548686178d2891", - "8a5b5c3bd7a8dbc79f2b745610602ce2dc081e71", - "93667b009651ff896cd41cfb7e885a15a250bf29", - "9bbc1956990fab45fe2f678a5435472d7d39bcad", - "58220a1b88eb0dc1383fcb09e49433447c0c2b03", - "a84b40ef648c7ddfae0ed4e894c2e9352dbd868b", - "cd56842cbc2628eb71ddff63bfb7532c01858018", - "866fc4cfb176739e10e23f34af5c96b1312c6ea6", - "45309953bb82e3fe69426f5ae2ddbc5c4b81a8dd", - "67b3cedb4987ac68a8108b2b5a87f838c0de8c41", - "93a758c7f11ca6264286e41164bf74c4f7aa470f", - "5956b45826849de26ff9b879ac93b7802b9826e8", - "00d855c1225cb42604ef03ce6b06484e503737f5", - "47be771c26fc8d1af7b97db5e3ea2a4f42718074", - "546099ad054195fea9c6cb62c800ff7b5abb27d6", - "099d5a2d4591c10c1d67865780e66cb02ae743d8", - "9304109ec4b04b4d30567308e22195ae4374acb3", - "5b786550ad0343f10d9cc6fb2eb626589ae72933", - "a688d1c49dcb65ba5fe31b7b19c12603dc8f5cc2", - "80c10985281060da276f06009b7320c66122db40", - "96e4fb1b132c3d4084abf7945da6cfccf942ff56", - "7e3e4fbc0cceb92148122b5d689f4543ac4cf30b", - "7cab88bdb4a73edd53e4e82a3cc3c2e949661e65", - "5bd79b641f7653ef38825dd5145087499fa303df", - "ad8446426d232f83b1956ee8809196d6c2478f25", - "6b2fd95d06558bd242db1987a557fb045947bde6", - "a1bb65ceb97b73d98812f89952a8dd3d91c06f29", - "6fb049764a8e1c61e68f867a9fd42cf582ac2639", - "7e50f8f6d3ea4ff4d699d8a46350ca9b478f4df7", - "46b4f4f87bbc76dd6cd035a868500673ddf3d907", - "05d0726345dd072d5b95b8136c881910e00efbc0", - "4ad8f54b1cdd1fd453a784a7e56c573e02d17091", - "418eecd61315cd3b7fad281b9bfb22c873736815", - "b555e65b9e1da944ac12aa4c6f14295b49cf866d", - "c30601770bfcdfcd3c093137894f0bd7cf57e601", - "30c3e4e96b10722e0a3f1a27004ec9481d833d36", - "fd00f81c491bc35c63ddb72cb108be6bbe4e0494", - "75c82f898ac88fdf55f4c32940ee366e6bea12f3", - "0313dd5fa669f78262a823f0b2a1f0ea44787e6e", - "eaabfaf4932b7790ea966a65b6f9a9f16c2b96fb", - "25dc6d1aa70263bfc0fbade85fbf1cbba951206d", - "07418fe7bbddb437a0180b261f55e38ae89fedc2", - "db8cdb15305b833c03d7af35e03abdf946136cf4", - "4e7c2df5c4c5f8a4d40269ad01d66c09a12feb93", - "d324d6a8adc8374e0ae6d550e71092cb6665de73", - "e97adea34e4be1b6dcc5169d5d238f818f727810", - "6296657c5167e8dbc89dadd5a84fe32c13189c98", - "be57e4235074dc1981362ba89537d994f4703371", - "ba3501692905f9cbdf9b3e7cc987f4863e48ff6e", - "df939fa5faac2a9ec813f7b3d1ef856bac138cee", - "0e7c38a84643ffcf94567dede478191da80ecf8e", - "20faf996c508db4769ebc33a5d601d2a061d9eba", - "5288d0bb27932cdef3c947c0db5c0c3bd6c04f03", - "bc37702d1eca33414b1aaef1d1296b50d4dfcb53", - "60ca7c8fd036c1563daab42ea17e2682399f594d", - "3103a5e27c9fa7c8e6a4716ad7baa099c685ec97", - "5c83b690204fbcc631dfb9ce08e3ad8bb2013cc7", - "744e26330f76d58b3361d65c7a6bae617c5de3a9", - "ca701a0c86244af58cc0011e28881b4476680ad9", - "62bedd62745a4438e51f163274093be24a51c85c", - "2894400b7d8b2eebd2c58da54fcc11f26a83e2ad", - "1691cbd8cbf8607d0f595cb49ff539cf1aa5649a", - "2c4ebd5c09687709501ecf3325b5b73567276db5", - "2b155dd8d78695230d9ea3f0ff6869abedbce850", - "61c5df33f5e90a5cbb42b490b75646045fec5b29", - "24220318ce27141e01489a7133d36a5ec89d38d6", - "40769bcdd436403cc6cda2b6e4619f5c88ca3062", - "c6ee190a242f6cad9ed672c2bb2ddd5f24c513b2", - "6396e4b80acbe113bfa305f04459cc926192afd7", - "fce0e0b21211906978bc2f33e2aa4dab27aa034c", - "c2a5cf13b012a01878b792406e29e7f104a7aeb1", - "89c38e25dbaa133562781c5b75700bfa85f7307f", - "7318411156bc0e9607cb023986999bc371a9b295", - "7159c95a40648b20cbdbb52d0e0e99c4b299aed8", - "61308a0b2204bfaf77f2e7841b9c05163e6c4faf", - "c65cef23eba65016011d4eaacd9547849105e813", - "a274c5325bcaff83388233005d6fcef54c7c711d", - "edbda78c45a5540ad3a20ee0403206872f56ee45", - "5eee152a701b74de55f941d8d68a4747089349a6", - "586a20b2add3c93c9746f44da16eccbe5bb3ac63", - "e4b807374e0033f90e57323b6462ad376711c2ec", - "e211be66d052e4ed0e51c77407ec6346aa719738", - "ac10c29b29f6939ffe241d9ba642f8145226c61a", - "3e7df2ef0c608726ea6eb664815ce7e31358ea03", - "2a028d2a3a32b779a4243a5eb2322e6088626b1c", - "7c97ef5d1e22a60fa800c20abeb2a2c09492e00c", - "a1ac9f40c425b6d02627616d04d732e6e883a513", - "9defa08a5d66e06bd02a14d816d41524e9026361", - "c0bd6c7da6ac49acf8e38ea86f1f38f583df449c", - "7824bdab89f911cbc9c4844e122432c7d61b05c0", - "c2f62061343cb08f0bc4ba7e90c825a41dab3064", - "711898933be17e4f14756c2fa23275fcab81b267", - "94205d18851257af1118c50224e1ac4caba8fbd4", - "4c3c1350bae96ef643c72a6b1a2827ca9661a49a", - "59f170bd88b2ee6714f2de5da63680b5ae4d62b7", - "9b6ed450d5b8ad9241573b22fdcb488d1a8fdbfe", - "f44234ea03ad99515f943073a98a897e306be782", - "22ec0849d2c56385d4c9cf64a33c17c1f7122bec", - "a50326b6ef3299b881bd90d613f97d0782a5361a", - "72320aa416f668905b37773566754a82dd3c5b9e", - "9d4da973037050f21bc3bc594c37d38a2c488aed", - "def66308dca8c9a4a148d46548fbcc538a0ddd18", - "6899d9b70875150486b4c10fceabb4bbf231a82d", - "e84b3d6a2fba29231491789741dd1ebc013a31d9", - "ba3b49c09b97b28c5e35ad2ceba88586d3f92e09", - "757ba44fa70d1b3258f49d8a4612d52390988632", - "a7cbdd470a30c4de7354778539fdb4a50e016f99", - "8ae8b6e2ddfba263e0ab388379c40227c164b8ca", - "b32b8178ebf63838e46200a741da5569ea5f0697", - "9b281f385d5b7c767c2990ececeeae33a2692b4c", - "4c39ec49cb5cc0f7ea4ef2153d7a80e871d294ed", - "0ce4f6eb81686d1c4bd9060c33fe568a1ee5e140", - "749a7513deab3d925d528aa4ee67524e7d5d85a1", - "aa1ed59fda540ac6ace91dd17a455f56e05f0201", - "6ed3b764e569e7ea0e8345d897481422554f9d82", - "7fcf8e13dd639a3246fa85a773da91aa16f03862", - "73bc3f5d3cf932a2afe24614e29df75f3adca969", - "3b4d1ac660029ff0ab7f67901eeac3d7eb78264c", - "a55b643b9e0dedb6da9e2e292bfcddbce73ea856", - "f920cff2e0eb5d8eaa1963ab6c0a5f7ead426eec", - "2ee672c1923e29cd256ba6b164be9378558bae18", - "8f3b0986577fc71c259a90dcb12facebed94a4dd", - "28286b8566bcfe223e27de8e8528672ef7686552", - "60cc5472c70dedacc9c35329d348b3512f0b7684", - "59204498f84611716ae173e699d88152a85a2aba", - "b2aa6d13e04c18918b563d55854e7672ac5ea25f", - "3ff385bd4659b3806e35752500b2a7d18438a3b9", - "df2eee9c3f81384843708244bc5b9282bdfbaf44", - "347b6bc26a3de4bb584bca65bbdbc97f9a7c822c", - "04825179dfe97f8bda20c25683e7a04b2a5a26ea", - "86726851c5813fa12b359902a7d3cb4245f9846d", - "f571ccc44a8a2ce2ec4f3492ab70246dd3528230", - "1cb0471af86f9ec7c8ebf28d89035d3360e5a760", - "de7cd46ecfe8ffc1845f54399798c2bd3435d27a", - "abe63bdab5657026379ae3dc3314d1d74441ff3c", - "f6ee583dd1a29034340995e692ae57318a7bfdbb", - "fc49498fd063fdcd2928f8c151f80ca2cbcc1591", - "3494924ac518bb1edf39385728de55c4a478da5b", - "b935632b67f7dca5013f77f1ada6ee6800204370", - "9347f7d33cf1d6428b7fb79e0b515cef51d55708", - "7ae2ea9dcbfae8bc13f2a5d6b71ae82961c687db", - "3de907f5c95f33d28232c4a50c893256e9a4624e", - "189e164fa8d4691f652c8e809525a2487807c8ac", - "60d077985f65f86dd9623dab0c5ebd4026113dfa", - "2d0d0b1a815375825ae0b702f966404fe5632ea4", - "f960e47109712881dffa6732dcb8103c18748c5a", - "82d55eb13fee9545214b3bbf58091c2499e022fb", - "a2bf54eb5b3e5acb847c1ac16d06a82689f846cc", - "bffead1a879079ed8daba69bf509723be372be18", - "99adaf337cab34f56383c1fd8d2c4cdf53bf66a2", - "fbcebfd1a6f9f395f2384914e4d6c942fd93dd69", - "6535447739d1cbb2d008662a2c543a5538da4261", - "6447f4b736947c2d3bb6f3377bdc57c102a30e37", - "fa3b2a1ceedc63a3cf804942b0242ef81de62405", - "a02661b0b6bd3535eee8afca694c52e033d08730", - "05b736f44e3f625bf9c3d4b2a2eea63a8df7d91d", - "2056b07b25e55cdc4693cf754f979bd06510ad68", - "1a669306c84aa8c3e1b5504beb510d6a4354f0a4", - "490af3c6aa59844fb758ba43132309bd8407a802", - "4202a38283d46d27a70ea139e557e3ace5afbfe2", - "c25d4d2acf1608b6d1fd460e90f781d32dba55d9", - "1cee6f3b8d08dac6fcfa0ce30d1bbc67a7fe0c9a", - "e7261017e8744ddb8a8b3145111ddfc160942388", - "bc09dd500ae7b60067c928ed20ce6967a0c8cba0", - "0b9997111802fd4708e4a90cb6fbd0fb968eec7d", - "73d903a6e969e4c55c996f3c2e71fd737aab0a9a", - "81d310901256725dc3dbe658fe9768239299952d", - "7117d019e61351bd711bc04d536ee673519e8866", - "a4de4109230439a3f0f9532785cc17386cdc5d5b", - "5203d0816976e5539ee2a53f80338140984777ff", - "f5f3d43962e494689b6cfc49029f54c49f36cc20", - "32b489dfacd741e7945a2bd851f6b6d63f0997a1", - "c6c96367123866ae305ad3b7a6d14bccdf278430", - "b67ae3d116b48b86b7a2a0556fdf43a567c6fcdb", - "ea2dac39522405c5977892564edc489f0859870a", - "f5f1a6731486a3241814aa32760ddda22cad09d7", - "267d052b683ec1e8e9cb03fff7594ab5e16ebd40", - "fd8356698432d629e82c1f0430809f5d4b3978ca", - "ba23700b82e09b5574d9f51941266ad5cda7c5c6", - "416e5da53fb50464ede3efc00b59b646e7f2bd1e", - "5b93aabe50964908a2be04131b74ab52b4580ac6", - "55d832cfe5719b4d3312d9db4afac6819ff2350f", - "cbd3be2d22f81cca65c63ee55f632075a4a947cc", - "519c1bb35a1bef899bf70b03813197b09877ddde", - "2765beacf45a8d1eb902ab06d53aeefcaca60d67", - "730e38144f7dd8c6df14211965277d615973d815", - "e224031d709c56998298b1558b8ab48353087d0a", - "4d82f48ca4bab4928292903984b13646577e6fe1", - "5c2eba1e9996149317458b0a44fc37f080809eb1", - "792754253877a3be70481e94324f2d9860fd6ce6", - "f918e7c4fc2d02e9e1ac7e5c7a664b23acdb0ec6", - "765d6c16779dd07e05a5a430b460a709141534eb", - "f741c54d8e099de1b13c053b3c0bc14a12ab57ce", - "2957dba2823f4c1df3a36446aa6770333694978c", - "6450b0b2055288605b075775525722161dee9382", - "91130087e53328532c6a23f74451b5b6b7b31bda", - "52bc45485d0d489c98db495f6f9fd28247f90e9a", - "fc099f901f55f79daae2f91226cdd4b722895482", - "257c8f051d6110360c2902d12d2d5c8598177864", - "46651694e48ced51ad3daf2c842f3f089810c760", - "5e0fef152403f7c969538cde36e1afbffe062ef5", - "a8ef5a35dfaec15bbd3ad45ce0278dc67c2a1cb0", - "1568cba236677c952731fa99d4cb77f7ff295bcc", - "5ef980270be1a44d3f174e3a32a9ee320a7207ae", - "ae9984829aa0e9bca22c11c19792079188896b33", - "4c56d19327f821e40028a3c85b3a57d7ab95e1cd", - "087ccd321532fb9e6d0b4dc6b41fb5da9f2a3d07", - "5929efe3039f964b08f366a22553acc9b17fd39c", - "7ef896f73a531269ab7e0a3929b7d0fae4d77ebc", - "a096f3f657c09450891e95becaaffc80e6be8573", - "afa9f40f6f847e7e5d01d6b34248ed1375310a38", - "d4dc74f00cf43e0f0cc1fb23c9351fc194066a7e", - "d3b0ea6fd747a5a7b4197a3ccbd8c58f87d2e622", - "a08b48e9461237bcd3f31396d0b5ef95809c0c48", - "23439f0f1332f4c28a5470ea70b5639bb6274173", - "8b95ced29cf8bcee89b7cb8bf304e2ac19af3229", - "9b02d601852578bedcec852becccae7a2f2f3676", - "f75b4ca108cbdff0f70c593c00cd4e2ddb6524ec", - "19671ca0b42c3de113d239b613fbca3cd9698297", - "47aee42e8df5e26964a6afcdad13d9adb264a046", - "90d6353d339470c65ad41bfcf908c4211b6114f3", - "c424a84d1767d76e0548e7f9449e589daca5402d", - "436caccea52b061196e47378566811e1bbd8bfa6", - "547d444254e461df5f557ed90a68c623635d9d61", - "aa7437cb15a217316ce9f9298933dc3b241dbb9d", - "049353a3d3473900d6f1b8787b52dd4006e3ea16", - "3dbd3bbb0c5ed182a7fd5d4964e0a1795024397b", - "0b77d01cc53ff095342e0ede84b31950db2c1c21", - "2a8ecde4d001d6e2370c9e4dfc94fc9cdafda543", - "c9365acb116ac4e0f13f786a968404839a9941ab", - "8c496d1b4fc14f90ef43d6dc93cea0033353c519", - "bf62083c34967e933125a6f8c953790e712935f6", - "5a260ffb21cfadae9aa3a80e148b1e838aff66d5", - "81e7ede501486351847f116581824d6797bbeced", - "69663fae94e0d7abd4e3a659f490d3171678327f", - "a76f630d135721108db5e0f0bc7010a03adade0d", - "77bc193da7be8218ee8225903e334bc5da140033", - "820a23e16c599168d552f4068614e6b84aeed204", - "eb6480e87aeecb950d6214170059f9de44e12142", - "3643de2fd794fba4d9fc711ebb6f8d7bb853305a", - "2ec1ffe2c17c4401bda89f6ade266f7d11de0b2b", - "c935b1892cecf78cb8ac0f931c06eb4b8cd6fbed", - "8d8c245a046603d55dacf21c675ff8d08f2f6c49", - "399e9d5a67d1fefba95590f47e758deee3582702", - "88b167dac82c76e39d070fd29c7c01ced2c06394", - "e84e6faf60ef18890db8b038e59953fa8ee269a8", - "7b2bda1731540468ecfbe63bd3bb2f559781699f", - "2cc977a3ae387c509a4744c5d2413fe23eec7434", - "b3563a6a6abf98000e8bee4e5f8d278a5669db4f", - "7900b7cedf6e2e6ab5ad94139957511249fc98b7", - "29e2d91a6bb63e0cb3e95abcdd38fb84311e8325", - "3299188a53081b1fbde608eb9b6c5fdc3c65b223", - "4f6fb80e9a3d05ce3902c4bcec690f6d31da9db8", - "76f808e48c852aa1e3d29d45bc56fb943f91302f", - "cfc2fc795bb58d69c560e86d0647f913cca9d575", - "aab9f8af4bf136634492f92eb276ad8511691c97", - "95cc8f92750ce0594128163f25b94439806ebc9d", - "684dd0f19b0c00b04f722193edb78c13f0e0bf6a", - "d5de1b4c9dce7fd3fd5a623a19cd7188417e8ca7", - "d5e6591aade627f43228d73f9effa3fac1d7a073", - "e8fda62a36f6cb18f6e8e7c24c97e741f2cc15ff", - "dce3b7610b26c123cc399586971e40f5d7204a32", - "5c4a64afbc7fa8816124d33e63912481535801f9", - "cc1b1e771754ced2c5052a45a487dbab139d5e2a", - "c3a38aa8fa0f1c1b19ba06cc8731d605ebae4037", - "0da6321df53c79cd7be4ae52131f70c06b483a90", - "e5cb93bc9c9e319fde3c2a0c618fab884e4de1c1", - "8493deed55bd9241020d52e49d87102a5a262980", - "14f8742e937dba15b5676cfa2b2f7fa23084b508", - "745d186a53397b981e4d76cb50ac5c1578d5ef3f", - "ed9c4c150fe525c51c902f12797bd1a51c2d30c2", - "52842828e9b02efb10ab687917e4fcfea8afef43", - "88ebf01384c8a82eaa8e3fb3c4b8be411c8da681", - "eec189c881245d66d71842a6699c1becc3322dd4", - "c96080731dc25a5b439a76880922fa933fde1e1b", - "e1086bdba41cb1dcb3c7fa7bedc3a9913609378b", - "3005f5c28ee615d8fafb0410ef74afab21c0a250", - "37d6280f625db75e8677a5f7edddb26b1c80c223", - "61e62d047ba5037e6959744681709ad631c28d21", - "01599eead34323fd3d6172594c3abb009c710236", - "bf329f3d4ff25f3753c6ee413ae0c114afca8ec3", - "3f8c0c124807e1b554329635d26349c40bb373b8", - "99849f2b41b6c5d1bfdccf9bae54880c086c9147", - "d722a780c36be715a27644933bd053a33e0ab8ed", - "b2e7b1cc84d2a938a44438c1dbb1964fdf826917", - "9cb78a414c185c55bc653b8a6640a5da98603e07", - "81c2e8569ce844d35ff5076e767e5667823e2c7a", - "a33c11a246478d1704b61bf06b40490395a35225", - "70ef10d8b4d0b396fcf3d145926be9b3f33c1d09", - "1e91949e730d4b370fc7573e78fabd9743530586", - "2d8610c7e48b387a90a51fe26123a268da29ab9d", - "145b1d913f5cf742c08086845343b5fcf8c988aa", - "8a2a73aed2b157c0ab69550c31250c02c886558f", - "6b3ec12d6a6bea8c2bc9b375f99995b136104b29", - "dcb87acc18da271f4b7d668ff928d175f5e8214b", - "acfd42912e25f21786807c6e8b21114d0e08d1f7", - "d2dbaab513c1f67b989c51f86ea48585ffa19fe8", - "a95ad3047c03d113d1180fadf2711a3749f72e97", - "d7cc4a32063b7ad4372eae8bd02d016c03e22cc6", - "529783fd8948ab10ee41e5febc1413b0a306fdc2", - "728b726e5bda1731a9dc12fff708981eee424b23", - "e41b7dbaa3ce306dde66ed59fb535acd96bf9798", - "d428b2e059a734a50295517d29ba892b63215e5e", - "9eeaa086c83ee78c2ea79d3f0e7693bd10f7e34c", - "659f727b4a6734b8e2f523907b7e22917889e578", - "aa250c7b435485e150fc797ba1e9b20b6945c19e", - "1717219aaedc95c384bb7f13624fc6278d152948", - "5420879e60a0a73a15b2095de34ac4ed59983561", - "43a557fe4212f2fdea2bc774a6943f70247e6325", - "87de1176c7e0316c3aee8b27b59b6886018cd966", - "eff8acd9ea8570d7fa641865ae7532a8f69ebb5d", - "4effcec62202f5e8dd1618bd6859847d8014a310", - "95423f26cee41b6ab01b2466b09c0fb421f6aacb", - "66418ba2eec57654dec8c6ce08d94105347f45a4", - "36a13cf846b5d88a9823e686089ff812a639265b", - "a9c4e592c9b6cc65565d6276e76bf8495aeb20ed", - "9798b69aa6111f75cc8f649fc7ca64d7b51850ad", - "82786c1dc19bc326df4a8c4904203e2297b2be2a", - "6075ab3f0d54667549b0e73d3b1ceee29fa89d31", - "691bdcb475375321ff12b6914f73e41e724b1bd5", - "a214fb4c8c629cc9e6430316ed036503cdb79664", - "222e65439aec018e46817b9301c0a13d9e64fd13", - "ab4d72b9fcf370cc87f3c14be57c02b7149caa83", - "d90f5722a2624dc55a01cf5a243d25727407fe19", - "9c1398288cea88446e6cf0ea5d2634aadd7ec057", - "00e0e4864c4fcfb1a303f655e549d8a46d53fcc7", - "6a933e4c1e1dbd4072a01ac549deec81cb39be6d", - "ec5e0773a3199a94e32892444611c345a38ac8ef", - "4355112f572f124e42bbc74aa9e615b9f362d522", - "cf55fde290dcdf2cbe91cd7f3421e763d9f6db62", - "19dbbbb5d9b076e3e184e18cdbbdc395c4323be8", - "4a4d19686af4dc058c7b20e717255b5fe295a398", - "c052d869700ff60057fb93dd791836e3886a5398", - "f6208aa606ffc6f1fa06383534abc5303087094c", - "99e3b71ff8e92a36bdc1fb9a2495e1eab2841414", - "f3d6193e684ebfb5ec0df9f96df3264c4685c561", - "92f6124c73bae0da8673adeac94c025c25cf291c", - "7ad6d768773a77b6d86279327b8d83ad6d04664d", - "fce8d87884a1dc2f81b1b8f0778dafbc3a52da6c", - "f7abe720edbdd905a325b6c1f17a707f6b25a88a", - "f5ee28189c92ecb3ac8e39731937f025c7fcade4", - "1b25cef981a7d3e84bd77bc8d75b4e8a9d42da0d", - "33cbfd39a6b231a6cf41cfe9ae91550e988abc2e", - "4238b24b1df8dd2c01aa9719560e363f6705fe52", - "5e3d3593b5fc8aa790b6072bcffa440a8102dbef", - "873fc83e5afe2d7a58a7b3bdf1d9fb9b43ad678e", - "620f0aa2d9134b94cf8396bb1793a03f1da11cbc", - "3f1629ebf3cc02af5cf666b51206b8fbf8c020a1", - "cf47fc3f9511af4fbb9041e1b533cf00a8db7c85", - "b7bcc338e00e48ba4ec7808fa04e17f72bb0c6ee", - "958f4f0ad68ea2bad4a71cbf3d07e6f01f7800fa", - "9c1758498dac3963ed1fc474454012146fafbf28", - "44ea1a0c03c82feb9e561ecdf6663244e95f5c6a", - "d19ee330ad6fed7b7d2fbdf0dd5c96673863a606", - "dcba1860a53be99e2b98725681ef971d38f6adcc", - "bb73501ef6fe994d0b6d6e92a3fee6d02cc34a86", - "a634edc54f31a151e075043918a1ab1ef667d75c", - "70d9a7d460bb90d00228e363ae0e3a02a990fa03", - "196fe4d6d4ccdc2f6742bbd4ff7d53dd576a31d1", - "08a02a21f8b27fadfbae8f80fa08eaa8453b0da8", - "46bdfe3bb814d5aee9e4cb8a3df9d4c0c0155676", - "bc611d3207c7c83274029ed75e0d7a0842871182", - "a2be919ee2e8305377a8a88fb10ef1520dc0792c", - "e3285a3654eff5d2d4ac9bd00b445d92027d3c3f", - "b0df17f74cfbedc15d3d37718db0631def860638", - "3fe8c5ec18180d2d7f7826d9c26d2a36dd1e3a7f", - "f19dd315d535b2e5547252d3d781b0da27fa5cf7", - "d8e23fa6edc48c20c750563a2271524f5c7edd0d", - "43f6f591ac952854f52cefd0f45fa230f589c8b6", - "f706cef7fe4e1dfefbf64886307711ac27e88633", - "1b15a74007771eb9146c8e06476892c92c1d111e", - "01595d5229194fe3dda764e884d4432d71fedbad", - "3376cb6f201ad88d908be08bc068e1137d54edab", - "77170527d2de9b9d7c3ba8371021b78468745cb8", - "f7828300974982844f7903c9acb6f2933966ea8f", - "113d3e05e114d71b4e7a294b5e1fdd9ac964996a", - "3dd13035cf8ed8fa4be49cedeeab8852150c7132", - "933a5e1f1cdedfac2922d1701acc3ecb665521c3", - "dfaa9fffe27e0b8898b4a97bbc95778a88a43037", - "882451528aa8e48d2b4e3c2fb45b18b69e743bd4", - "3998d7313448f2835a07aff2ca30beb6d076b5c6", - "fac84d9ab171ec5b3e3345e60eb86f4b84d915c9", - "e6323f4d8d15c51f983dd030070caf931d66b80b", - "2b51fce7c00c0fea47408441ecfc98823068286b", - "5c36d5180cd58a51b7f8ec410f1b0e74f53b565e", - "a1ad36ac70b427e676097c87229d13336774b37f", - "0224e08d32f8642f39503fef0df6f1237b1c0583", - "15a2cfac5cae8f54e33278f0df714a33b3d0ade9", - "640f1149b5976278c28ab96a2b6e56259cdde4b0", - "fd81804ecc7a9e12fa55976196d7201a07f22fe6", - "0653caa316c76415416cb1b939ec0d52294bee76", - "aaad037f557a9f0550a1c17425c87e02f1247b18", - "b8befc039f6b083e4f15a14757303f36ccde447b", - "1a8661a9a2209d92fe047a5c8600d7be12cd126b", - "b7ce808b24e6f895aadbd78e202d144839559790", - "8092c4698e9b797cdb24b3cd53b230b6e342dcc6", - "b872f67e8d25cd1f8b0781976114f5826a2d5914", - "9ca4133308e64d363d6a1662b6f8b794285a7d99", - "412786052a477ad8f6db40c783b18d26385580c4", - "5fc77d1ba542bf5783132458b181ae2977a1f482", - "f1118ccf09145691c7f9a5af00ef9c304ebbf899", - "a1d74f34ada315db6d91acfbd4cf67e8df2422e2", - "7448859d90ec18d5a2f1f3da04343b6cc5f33711", - "0bc6003615fa23c5a0edfb8f6a8ffbf0ff27be43", - "fd3992b114340a09f01b0345fcd1cc94e6643185", - "870d1ed56d764380bd36692571243423cd025688", - "affc3e75b3feada02a7ffcf690843b83c1d8deec", - "6acdb2a34170e8151993867b7e34896e887600e8", - "9c4b5f193b38d0d19234a2472249e7062d58ca13", - "6605b6a3589c4df2ec70d81da3c151eb2daec254", - "58df496ff6a19a5deeef5d6e3b064f3bfa7ea350", - "bc7474c739a0d0daa5fad5ccf171e168aa52a82d", - "2b43573acd47d8dfad89c01218e9ec581ce95067", - "73028241cc6f6f6004b4448056e2b3692016e93f", - "191b283db4c19a1fd596997a4e48f9a64163d6fb", - "c1cf36701ec466960cbc46e729ef03978cdb7140", - "959f8dead8def7554482ff590f02c6cbfab55a52", - "a849ed976b7f464b322acd6997407bbd94744016", - "2bfe00fa4a09d6cb4109ec7b825910c2379a711d", - "e844c9f7850945c17a9ab01ca3f8809fd627ca93", - "15a897a7790aebe8751703953fe76fa631c84e41", - "3f040f7a287f0700aac10df1d9e923c1781d067f", - "4fa1a2c395aac52f0ee79608dc000832a6239a08", - "bb7a799e9ef50a1c5133bb017cc3871f99f2ea80", - "b686668366529c0969834c00a8e3ac957ab92b48", - "d2a1cb43dfcf5fc4b4eaec33dda1cf2d5ed5dcb7", - "4092a7ee4201b434a8d0931a0af6130eefe85222", - "a771348eda9592b9bc300b10cc71d9d08e54ac50", - "a749b75db4ae419d490b2320b0d50f7163375e84", - "b852cbe4e70f83b62015709b4b829f150b25a4d8", - "dbd294d1537f586af756d0223c8509946fe19c72", - "b59a11c4329a2b86b8261d1d68f6986dbf7a1750", - "aa618f9613d155e32e8a9cc234ecaef1942fe26d", - "53c39bf13c20a523a3aec7b43374228363af1c23", - "873cd59031929efd8b4d80be6ec9dc119cf7ff63", - "ca95fee72c33adb37add739f4c2d09e81ac715fb", - "3ffdb9590ae3d5372d92748c6e4f71bdd7d9c0b6", - "88d32bd5c7d0677744733b0e372614eed4a83771", - "2a4fe0216e7d4183ceacf097c889e456ee06bcc3", - "d557f3208e0ffe408c8f63efe696f0484aed7cd4", - "a39cbef0ed86ab17b5ae980cbdb3a627546562ef", - "0321b945180f1a6f1c0a7cc02cd9b9a5f5f9d347", - "03c8e5e03c6538e3b9d13d958cda825156cb02f2", - "e75bff7bbe762ad020151db8cae641a5a141252c", - "75cbe4a9a1d86a8fd12428434112e077f8617d83", - "3c9d72392a5f7675a100beb3238dc191ae6adac6", - "0b5aa8252ef054ca1a867a009283a56ee14feb03", - "8d2e5c9895663805202b8bda9121748ced63b0a1", - "6ea012cb3073e1ff2450b7a284f7800fc64acc97", - "07b7e823a22e198f9bae145819a21a5e39615774", - "c4f6d1764dd71c7c1ffab960087908e0ee1ad562", - "dce23af94b0de5c12752b312c98b9a817aa9dcc9", - "225279b710df7296cbeed02b596b56115e9d98c5", - "d4838241c2f7136d5cbe0bc83076507dc3a39b99", - "4c3254437f705b33869810913fbd9ccad29ccff7", - "6a61fca4e7d8efabaf07e346b2d4deb27d95e5a7", - "18edfff26b39300f03e396bbc604d517387a28d4", - "ce4ddc63b688bbee53b8e1cccd12fe2f271af558", - "05d0601b66880d011b162230c5a3845bb9f22283", - "58fe4103287f33c11e5e08c7a5b5efe715d402a8", - "28a67cdfde3d57d974789c01588e434ec4b41245", - "5cc1e0b3d3a611d216cab6f12836da0cf72749ea", - "460cee911aedeceab401b6e835193ec3770a7b98", - "b0cd7fa11857007b96a6f78826e11035870ad99a", - "0c9b9f3b58aada909f2c4b53c9bbc677b48a01c7", - "8dd6a95bbb3938960713d1432f1ca201fe769d38", - "ca65fc832ce0591fba2373066723657af1b35ea5", - "658914b3780029f78e7db8c114650272579534c5", - "da8ba2bbae6239c366a8c69b8b4192751caae48e", - "a4bcafd5dcdf7dc991383618d166492152cf742c", - "dd2f5c849a2526fd9f3947be6fba0f798d0ea05d", - "b9f40cbc79238063354ebda0ecc5f17f30bbf7d6", - "30084963244dd8b1ae7aa35fc698bd813fea8067", - "2f2d8797e98f240e009b6ea9ac2dc642d7cfb436", - "8fa41bcb155b247b4b98029d26a233bfd915fa5d", - "cfa98ee1bef7ba2b4fe531de38ba46a7266f9d3f", - "44fc9a4f3981b742e22769e56b317ae76528f8c3", - "444b9e41e4e09b539bdba1f2e2a6b935d72c744b", - "669a94001b8666c725674dfe634c706dcc4088e3", - "d3b0c191dc5e53bd1c25519c66fc3e33dd05d781", - "1ad560bd6f9e702cc48035a699418f68e852a7dd", - "acb09fb1bb00c3f527c14cc58aeb61ebeff86e24", - "ef046f2e39af156ae4e227c4761918531e811998", - "524b1abe9e01621788528b89dfc77f98114406d8", - "9b7725d7f5070abbd63aecbc43ad3c95ca451cb2", - "1d8876c9d1068f2df16d514009191c487a1f5652", - "8ba0908a9e885a955ea3159f3f62373f60f6e8ad", - "731244cbab264eec570d725903a7af17726eac02", - "c584df0ee552d355e6b0f000f6219084c304b475", - "2bf817a2113a376f73c7639ebc562357cee4750c", - "93a87c51f4d5dc4742e840a3fe38a510d66f7f11", - "3ddc3885f58963d2bb8bfcf1ddbb3febf89fa5b1", - "0687d129962bd2d906b6d9326c8d0318d2bc98a1", - "784d0ff036b5d812003ade8756e825c8382e2006", - "eca6008ac22644bfa7784922026516ca2d6a52bd", - "1686924230e7bb08c458c9c640588c2bb2d97346", - "834dcad3ef464483b316470bead5adbdb6ef1d61", - "199e9dc4f1ca75724b52a531959b30d121a5647d", - "c36ffa60a42b70d66ad7b7e4c412a5e3512e893f", - "d42f2beb114523527a111e2088cf2a76418b4cea", - "e08fb8cba473cfbe29a67db6aadfc08155b6fac9", - "3605f62e6b0411134d4085b7857fff4041ea26bf", - "26c0c877692664b43461c9962b7591d33efad1a0", - "d6d744471b895081826d81118f1e5cefad2f05bf", - "2d7f5fef141b66e9a9714c120136891b011410f5", - "d68077b9380db564151c842be4c8b53f5de1e1d5", - "3ba847423badafd9e7a648cd9d9902018d1627d3", - "9d562785f7232ae7c7b3498a6e0095820190c968", - "e0be45044b759131d7f226bdfc3d17ba7214dbc9", - "54e14e1b5d6ee0bd6d4d348a7e32b0975624db2d", - ]; - - const toDelete = await db.scores.find({ - game: "iidx", - chartID: { $in: beginners }, - }); - - await DeleteMultipleScores(toDelete); - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/remove-jubeat-night.ts b/typescript/server/src/lib/migration/migrations/remove-jubeat-night.ts deleted file mode 100644 index 0d80653ec..000000000 --- a/typescript/server/src/lib/migration/migrations/remove-jubeat-night.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { Migration } from "#utils/types"; - -import { DeleteMultipleScores } from "#lib/score-mutation/delete-scores"; -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "remove-jubeat-night", - up: async () => { - // copied from seeds before they were removed - // the charts themselves are not guaranteed to be in the db - // so they have to be hardcoded. - const nightSongIDs = [ - 724, 723, 1026, 1028, 1043, 1030, 1014, 1032, 1013, 1046, 1029, 1031, 1006, 1047, 1018, - 1037, 1008, 1021, 1023, 1035, 1005, 1034, 1036, 1038, 1040, 1025, 1017, 1015, 1011, - 1049, 1027, 1045, 1019, 1016, 1020, 1042, 1009, 1007, 1012, 1010, 1044, 1022, 1004, - 1024, 1039, 1041, 1033, 1048, - ]; - const toDelete = await db.scores.find({ - game: "jubeat", - songID: { $in: nightSongIDs }, - }); - - await DeleteMultipleScores(toDelete); - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/remove-multifolder-stats.ts b/typescript/server/src/lib/migration/migrations/remove-multifolder-stats.ts deleted file mode 100644 index 355b42d0e..000000000 --- a/typescript/server/src/lib/migration/migrations/remove-multifolder-stats.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "remove-multifolder-stats", - up: async () => { - await db["game-settings"].update( - { - "preferences.stats.mode": "folder", - "preferences.stats.folderID": { $type: "array" }, - }, - { - $pull: { - "preferences.stats": { - folderID: { $type: "array" }, - }, - }, - }, - { multi: true }, - ); - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/remove-random.ts b/typescript/server/src/lib/migration/migrations/remove-random.ts deleted file mode 100644 index 959163d95..000000000 --- a/typescript/server/src/lib/migration/migrations/remove-random.ts +++ /dev/null @@ -1,571 +0,0 @@ -/* eslint-disable no-await-in-loop */ -// ^ pulled from my local raja install. some of these are in the db. - -import type { Migration } from "#utils/types"; - -import { DeleteMultipleScores } from "#lib/score-mutation/delete-scores"; -import db from "#services/mongo/db"; - -const HAS_RANDOM_MD5 = [ - "b94b380dbf8ebb9e132f9314dfc90501", - "68cdc6f205aaf61a6f7d534df9a1ca89", - "55b9007054f81b9c90afe4ceb487d1a2", - "a808756a7ccadc5fa8bd2811acdc5757", - "28fd26d7e8b10ebee2c9fe66f6c2f3e1", - "3acc17d29dfa493069a4f190f28201de", - "c0633baaf71683c2e958abc05cc227c4", - "5001337d252b64edadbc5654e2653a41", - "e7cde366b201c84d3e802718fc6642b2", - "2d693e4081da35517527806454a563c3", - "2b91d8ce1cdbc9a44f71c922f5b4207d", - "f7f6b9e9390bb2744290b4673e111022", - "472590a92b09bb1250ee5b7b6f209373", - "0dc76d5e5fddc6768b1a2090a4afe35f", - "5106e14f3f7dec7bfa4177cc6a3fe815", - "3c9b0770aeedce6f973a4776a9ba7fd4", - "ee665f640d74d3447718baadf490d24f", - "13aeb61f696554359f5defd70379d677", - "5a9c567289fdacda73b4b28d125e5c13", - "e81ac8710f19eef8ee3f055427987e5a", - "dee90bfd129388419e72f0df85b53bbc", - "97c0cf8cd7c184d76593e12083bad836", - "f168af78895b093cc0fdffeb771cebac", - "9dfd19c33b08c9f710ca6a43bc0670f2", - "6c86021350b7b105995502dd24cc9bf3", - "7450fecbdecb5b657ecf0885d64c731f", - "7977867add6f1888200ce81f75ee255f", - "28bd2e6da722861c9d209e4c28ac152b", - "beec0ec093eaf6c9d3f0c55ff573d526", - "178b00a163dda5688ed4be49a88465ca", - "2c23d407ecdffd405d5c9c95cad7b91e", - "09b7fb5be08b8d07594e523a29405867", - "03b8718bf088f6951cf4e2e631738a22", - "5c160092005c193ab138ff0fe46b9ab9", - "8c0d6af3f1f4e2e73f1ef97d4fc2cd40", - "90bfa7091b38bc322af3ec08cc455e43", - "b3ec50bc5d0c8bf9938aeb39a215139f", - "6c771af5d84f3623b1271b31b058959d", - "c80816ef8f631d72a2dfbb4634079934", - "c00c50a59ace750cd8cc943897b39959", - "a8bf592f5ebd7869933ec1b5dd07333e", - "088a4dbae11c802dcbd0b313eeb69068", - "726cf167d76d14c40ef22c6684614107", - "4b445b51fe38e7a3ec5421cb50cdae1d", - "e420e30e57ba5d1b6e688864001684af", - "570c7e899e1cade06de5ebcbf52d9c02", - "9506d011abed48e851b79a7a5691d143", - "11c506b28a8492bc8d8f39bd423115e0", - "937e6e8c5c22398dca8bbccf6f519ea6", - "ef50e27377664ee1e2a29ae3a3c91b53", - "aba3b40c23f6d0a8c19aed91a1022d27", - "02d3ce07e8862a502a8e9a9353039713", - "46781572ce1711fb04c6f065bacf02a9", - "3482fe1a9ac768c9f43995507afaf2d7", - "72f120200fde9fc056bc65599a7a4906", - "f898064566edbbed05e2208c10203a9c", - "72e67be42857a55beb4d5490d43365f1", - "f60e07a810f5e8fcff965b20226e064d", - "2ab44688b54eba07d575e8df7155a206", - "b7209e898b880b413674236422891f41", - "057180cd0d9edc8d6f3ba80be414779c", - "bb279f79c74b788372ac513e8c97cb5e", - "830d10ad7eff9f489ca1a3f1226cc19b", - "bc3dc318370357a91a8d89eb3bc73def", - "011b37018971ee57a0956e50f3e67cf2", - "73f88511307ab1c632c4bb01449a501f", - "f80bc6c1205cd658d6e3a9262a058793", - "5669e90e9a3909ff03208f509a229f47", - "06c8de3fa651c6218e3540002567d9a4", - "45a8ce75415aa4f204ead4afa041ac75", - "9303858450c0668322c5015576e6aac7", - "2c9d5684208571436b3cde863c546602", - "cdf6cdc493c3cac3d5b9efb3457324bf", - "77e8cc866aac02ea056b2c232513f0cb", - "8f009e68251be9ad2603b19f8dec849d", - "8050d463f7efba554901fa3bc578f10a", - "7f8aef4f43a54065fd6c8ac0d1a361d9", - "4e269cd830d68e3e1497691be41fbb62", - "18dd57edd1dc9b969de7cec2ced0c41c", - "db2ce3c79016eb7a05104a26df2eb02c", - "bbee066aa3666bf0e812015515d40500", - "0624e226b1341db8457aaa3f608370c5", - "620c162aec244bc3a42e6daf3786cc18", - "138dc09661f886a51b210af6a551487e", - "df79c7967a9840964cabf2cabb2765f3", - "1fe19d30f345ca2ca95c15be90a7a8a0", - "73354263fa3beefec2635627b92551ab", - "e9a266efc4ec71fddbc4639ac626f23a", - "5dc8a641979b741fd17939c8121626f3", - "994fabe27b2d38152d5a1bb6d5e8de39", - "b25de77b496ecef8a48ab0b334d01ad2", - "619c8357df2399ae18e22c4e36b2be95", - "3bbec1005ef59916b0c0e6ca931c1756", - "049327db798151b4e25a6f8ef8a3fc3d", - "04c57f5a3826c3d3b4d704df486e21a1", - "188ac44b91c8f97436dd74b2d6825f2e", - "ff2d2ffa4ae22da44b8cc3f20597a899", - "778aeea01fdea30a4287e7b2eb19ee11", - "2ea031596696506e9d6d58354399e453", - "507bc8bb28eaa904942a630b09155b32", - "ee6dc9c8d2073f8b37d9f71b1c6a1d0e", - "6e98007ab76c890a7dc7a7b9a7f0ee21", - "9f6c6c2b7ea20a8189bfc90b25c2c273", - "f1b7eb1f64d98474f1fcbd0ba91fe3a3", - "c81c0b1698dbfbefe90ce6d2b502b63d", - "a5e08dc3211f3a5f5daaf56025050097", - "7ea4e79c5c8a71394b00d5ba845cc217", - "523862f70a3cec67ebe0a3267252140f", - "db3a25e763c3b4d970ec29e195fae473", - "4cb86b641a7ffdd5bcd0c3bd1ce00244", - "dace2eb74865e7280765ecd7e2398cfc", - "45f0574c38325760ed49b5020c6e8ece", - "657b5ff7cf6aabbaca438308e57db88e", - "ac82aca2b52ce00bdcb1b43091f8b77c", - "8adb5d61edb6fcb349cbb37b37c00de5", - "eeac12de1dfa182ceb518f431cb268aa", - "52bccda6a2a4c1235410dec3d467208f", - "a0d0614e9e0f4cdec2175ce89b094fca", - "5b0ba8f75ab1a58937a2c9eb7a68a7b6", - "fd7c600950424c69f075b84f7e821413", - "87323a23d5aee737f6bf8765570160c5", - "95543acc75936a31bfea37b88e17a86b", - "bcb0386396ed1eb128658dde13057229", - "3d5397f8c68912e477492003187a9072", - "67a169717caa40eec50ab1355e501965", - "6d53512547d425c0dbe574b5f65e59b7", - "83a96c2e76540a42859c795dbdee6768", - "87667ee3acde34b662b003938545c434", - "5945cddb62ebfe1119fd4686fd3742be", - "106827d8ef85f9d7bcd7b757e7347d80", - "ed5b2787a89d4a43c9f6337fcc110ad9", - "0a5a008e261a79a2a66126b67a980c87", - "17a2dd033d1161456b62f2c0b11e12c5", - "6f1d541e9e92ba6dd06a9836d922a039", - "2ba24954dd2e06b318cb043a287a89ca", - "307293dc6a70835717084ea2caa2e4fd", - "5259db5547f5b153fd82ed7c2da187ce", - "a5d55133fd47bf414da89de1f28f8415", - "08922898c9a4b7e6240e27202e6a325e", - "576045481be4bb3400d45d9dc3eed006", - "74c83032660dd26a4389095d7c480e4a", - "e6f384ed7a0889e9df5aee06c2a46b9f", - "83d685a5239f28db9eab94d846b44016", - "7de28e26e5579f11cf1f805907f234fd", - "76a43be54dad1bd972ed1c6a357fed86", - "74e311b2a2229fdbd1b1268766948d52", - "22b7b4da78dbf2eac4575deda4534fe4", - "c09e67e807d3be0d14695c3060ad7956", - "aaa6a9021bffee4f930ae91f32774113", - "bb9072b6b0460a5feb96a6a5dad45875", - "ab42a6ca7b0352d960ac1c1a6a9041d9", - "938660483afa26f132df20da002a549e", - "942a2ef62f2cb219046b2007775c46bc", - "75cde6cceabe2b0bb5f4b1731b97dd08", - "3b073741055654a2bcf0fb925489c869", - "458a168843bb988e840b8bd5312aa6ed", - "229e6053b6cc2a97bc2f37ed58b035c2", - "37ab461684ef428de94387be689b25a1", - "82fbb000f431997c84cd25dd230471c9", - "29233a1ae18aeb55104573533a1d8788", - "fda9c90f716be783b598609b93642596", - "34ebe51b1053a5043061c73e1164ebe9", - "a0c354b7dc48e1b4bdbde40721a6a9d6", - "c725ff7f7b7a99ad01339cf6d05f6af5", - "968d17b52500bc20415d9669f11e69f5", - "7ae3d2d7314e5e404e543ef4d9a4add2", - "3e1c9c40ac31e2f2f509182e596e232b", - "02f573770990a9af045a07c81ffbb59e", - "a205c9b3199f0a61c9981eccb4dc34b6", - "1c68375cac73c18be626a1b9f59e5eeb", - "41d5fd0d8a43eef42665703508b47e99", - "b40d9e637e3ce07a3b4054ae7b453e8a", - "725276e227259ff5613b7cba51903662", - "117d4598613c124b363561118808a13d", - "623c71599979807ce585c0b520fb79ca", - "715fa80618eeb3c0e2aa8219ef5a5207", - "f9060a24e376900064eb89cc124e0d94", - "1823e859b25257450139c44c670cf6a9", - "96ce2a1b3db373a89f22f53c97291a98", - "52201e88ad8175c93632d21eb11ccaca", - "bb71bcd0811e1c4ae68649d8157cc84b", - "09a397d277e23a5b4756f6422d357a45", - "572a212cf25e7ec13d95d36aa2350a24", - "61e43cd4eee6b231b063acb89048e27e", - "520a4d6fec68a28dbe13accb42a1a8a4", - "6c611a667e7a5f0cc757448e17a2fdc7", - "5e8182cfe19b53c915aa89afc9e069c0", - "7926ffe1f6915ea0b2e3e56de7ff52bf", - "686765b33d03faa0b19c19d8e147b391", - "0ffa538bbed25d43c3b8d11e66287160", - "799e7598d530456cb394c663dd88f590", - "ff654863671f01edc77a8b3058fe8758", - "04d1578d5550091630d2835870e39d9d", - "1820f45f501a633a01b4e991732f50be", - "ac035ea64b6502a5a9b36b37ce0b1b33", - "f735c0a5ff59d6faa177a4bb418e12f3", - "864406f20586a91bc6a28db7218a01ed", - "66743c12c927a8c1dd80e9d6b4c74e6a", - "6d20b030dd391e2d3d6a39860e16307c", - "bb01d921e6816e0cf8be789908d4c44f", - "9699fa026cb94b3c120114dd3311d70a", - "3ddbbae842e07855879b04b7ced50f06", - "73852585ef0a02b5ae2221977f134d12", - "dff93f5258e9ff8e34ca245df485bb40", - "b9ea3d3671badf0620e49416e5aa21be", - "9cea969b996bc6291e3b1781a61a7373", - "00351165ad4deb19dd03e059138a4a8d", - "726cf7fc681e4b95d48c39ce2d8740cc", - "ddafb40446a20a17b804ddf74dc127a2", - "886b376a46a7f9c397b62e539ed294bc", - "a540c995e5a4cc114ee93db84ecd0d8d", - "2a1b6a32b52bc46641ac25ea4b4a6828", - "cf0819a3ef3d59dc77e66c7e8eef4e47", - "be956ee713848ae7f11c8cdd044bdd84", - "a7a92f35284ecec49a0369fc2ba89daa", - "4010caafe71464630760391f1652046b", - "2d2d3268e83a8caccada4c0cd60a66ad", - "8a54a27a27bba973b1dbee516de4a9f2", - "3f132456a2ec89cc2e8b3a49fca1e74a", - "19342db445a0ba93a98d1c4c351f3e0c", - "0d8e9aab1b701c0420af4781f391576a", - "bb6db2432a7d440fb326e3c7ba0aa023", - "be4a9651fc5992be75c593a50f17e4fa", - "15ff6e8c810293548926104e65402c75", - "4d926fc787feaaf5ca79a5a8bb7ba76c", - "2570d6d58449f7299fc8c4660a6520b3", - "06b349050c015c66a24fdfde68c2a7b1", - "c47a24a1d5d06995679337ab8d658ba4", - "82470c719b1c5c67720775556f135fd9", - "c172fe29c37bc226ebbead5b55cd7ef9", - "73cf8af05f23baf56f43b85e74c28e4b", - "32e4fd1200f6650068c2143931afbba9", - "64134628009c0335f1b42222dc6ebf28", - "51aa4bb15c69386f0e01dd913487b1b6", - "23631ff772d634847c10bcf86f103b99", - "af6c77b4f516310f109af58adccb6c41", - "ccc86f0e28a4f5539f7cb005c9d43d06", - "0a360fe1d0420809fe967af8d51d81f2", - "6c2adb8118b1c073d0b70fd730accc9d", - "c51449041d7c70ee43145f6183b9c777", - "f5c8ffdfcb8fa5a509807d9f6197754e", - "7320658d347306fbbb8063b2ae6470d3", - "32ead63e9a5eb5b5e78bb91e24145603", - "8520d99bcd3ebc73b56890ce1581c25d", - "2615ff7950813b9af883b5a9616c444c", - "08684508f408e3bb8ab7246a773a8802", - "b553fef79ac2299a887c8eab80edbbc6", - "cdcf3d6785d6df87cc11f8e3186789fc", - "064f3800e0fa782fbe23bb13b88a3fad", - "7d9369c46503bdb00fa2d879675bb2a5", - "5e3046fc8a3deaf9e805a2cdba7b9286", - "d5f9e96ba7e019acde3c9863d25b0e37", - "21d5a1fa9996251bf7eb9e589cac6de1", - "06cc5247f7d1d95e1cca84d4ffb7d26b", - "520e23729ba9420da3d177ccdb7fb1f3", - "fbfd4a93aa3e91e758d6a767bfc1e782", - "3bd4480e0aaabd1bd0edc5cf6eb124e3", - "36d0cbc6f0427a3eca843b4efef7fcc1", - "770f14f022857cac0069aa2277c7937a", - "016f9de5b8338c522417313caba5746e", - "5b0ed334acd5ed0dfbc74e0ecfd46df6", - "c5ca232ab116e1c90b9f28665a2a97b7", - "d21691ebf9f690a360ccd269819464f2", - "d87f1b2a7436a13b4203c8269a5ce82a", - "be5d99e035c49b1ad1537e1a3363702b", - "47f172131f9afbf9ccc3ae58c2ab1766", - "29ac7babc977e0aff5ec52ab38b888f3", - "031d5e6b1ba8b705de216ce2ee738a03", - "a4fab81cbcb9a5c382afc99f9efa654b", - "28846fa5c003b5228dea15d9588b26ef", - "a1a8fc59d659db3421fc992e6ed43ebb", - "70cbd8da12ab2d623ea64a7ff59d6017", - "38c455db117cd47abe7ec84adcb82703", - "384e6e5390d91bf026ad92de3e736b67", - "20c07f23c94241c0544bedab4a27616c", - "f7768c8027f456fd023e0047bab85e50", - "6d5000b7960b444e735bcde5bbadcf67", - "27819ccc024698ce25f09c0d8fac7fba", - "7283f3d39e9f81f882cdd3a88a7c1975", - "5bf6405dd62de5d1a62ce5a869b0ff7a", - "aa271d610c9fbfda90456e83014a1219", - "98e5a0cfe3865a392c456a39d04a0d1e", - "e655c37f44efcbc6d9911a2d21de0057", - "e99804eaaee76e3ff71e5d0e1206cdc6", - "f81c6a8cb8bd3274f00f91f4d2311978", - "41355bba3a9a90dde0ca91883c94d7de", - "7746715309f78a5da6d1b6f98e11fbaf", - "4c57ace7a707683c873b652d4177c12a", - "4f7c6afaa207e58111e35be7511353ec", - "5af1f5e15d88dd0f947510dc0a27713b", - "8fa0805bcff15df07c6a485278bb1e67", - "bb71ab72d9008b92825b043932927990", - "5c9afbc6178718517a407d7d6349b6a9", - "ca16b49b82ecb338ba2e49be83f3e768", - "b4530667334ccdec608611afa283d263", - "f30aab1f10f73d3fd66dc590eabe072e", - "9207526277f1bc81817769eff74dc6b9", - "6d255bcaaf17dbd177d45215f584f276", - "cc879c77bfa5d15fd31be930e87cbf1e", - "cf8288d8f28b79a93819fe227a76ddb2", - "ff5303531b1ffe2f921c61a4aa03323f", - "4f73f087afc31294ed956c2600b37b1c", - "668215e653a481fa0086e45bfa933d3d", - "4c78e318b619e825b88ffe160eebeb5e", - "7690972aad49eeb701d2d18a745a98b6", - "8c7940010a72f0a48a037fe8391cd2fb", - "2ea3b62d1813e049596a9b0fda6b3e4e", - "7785ee8a88113c583146aa8dc23f946e", - "0f4c8e00fc2b26a8a29f4db770183dfa", - "1093a140b83ac76ad325c203a531f65e", - "c582e68cb6ed95348e8f6fcf074ff2fc", - "c6032361913d4785ed481f48b33f731a", - "217faeaad9304408b161e701285a3b8e", - "f45d0372f347002b98720d9453ddf1a2", - "b4d4c66327a1cdab0c07cd0093a974a8", - "954d8356dced1f1a3720da4f0046a398", - "911df550a51c8a181ef32b9753555dfb", - "bda7df95e666eafe33a8f2abe2fea634", - "0e0c4d35a061ad013a41b6e7d1c98b98", - "bf5b76dae267f0395505cfec63b50646", - "76bf70a68ab95a425ff8dcac46131132", - "c7e70ebf1632e663996b35118c160c8e", - "318c1b8c660d6af6d17fd6273b245af9", - "a0dfd7d70a53e4752d39e09b23877cff", - "e6f289a63cfe387475d8163aedcc81ad", - "1e5e699b986f4c23d09eff0e217085b8", - "833a5c48288f4952e9c61e6b0b930fa7", - "8ed1cf85741113aaf857e2965d4e4272", - "6dd9ab107eb20bbaeea02fa3ec0f33d2", - "a7b7eaf135d71e3022ad76ec107b48ff", - "073af39e97efb74768bb3183da953566", - "c3f863d0bdbafc92c0ca3faaed93ced4", - "08af1b56c7fc6425374e9872ff785b09", - "c0d0a55c63e6e33eec91128dc058ba23", - "91cbd62d57c8933f3c411118a81ab04d", - "a8cbfae060e9ce8f94a5c5cbcbee8df9", - "8f5b21d65d86a840a009eead6b8884cc", - "b1afdd65bac87ffd1c04793a0ab972aa", - "e40c4f069de5d95683ccdb5c0628b2ef", - "6491aef47c7959bce2e0a884abeb3bb2", - "f5e004e2bc642ca31f3abe2710c8a881", - "e1579a648e8e94d490c78527672dbffa", - "9635c20a64553e6333a134f256e0d8f6", - "709925f349a00398e02fdd0bb1ca3a2a", - "f79d18e08ad731408737f94fd5ec311e", - "fa49527db20263c08efbda57d32fb60f", - "abeb2e43db5870bfc7f67c95a5d0715e", - "1c7921492252eda86523556ee1b31cf0", - "86c17d99c0ba64ecc8dae0d1c374801b", - "413ee29a922e595bdc831d55d7bf869c", - "c1346e4458a976189e1f766edc58e3c6", - "77e3c9a12c3f439d8a688cd7104c6945", - "1edba00a2065fea20698be50c53aa469", - "108b628730e6b6d95a934dc753ba7800", - "765df7084717a95d8b661d94470d9874", - "b6f9d18e20f9fbfcc0f58a8249701c39", - "6c37a50657fc642ceba428745aa05524", - "645d96cd1ab254cb2960882c91e59818", - "51a91086bbf25cb202e7d90a90a96a23", - "a7cc74f1090aaf4c7f8ba15d47b94607", - "22db653c956f93fe86edc58e3d891d33", - "082f11ad48e6915edbcf73d1ce5f4d14", - "0052b5b88344ebe4964cd74f3468e33e", - "3d279760a58611179383a54938fee4c1", - "e7703438b9827715d48364f56b2394ae", - "3ce79f5b99aca6020af533fe9e3591c4", - "97e28d0cf7e7b90e5c8e28a824e39b20", - "03e342c00179c3afb0fe2a1959a40f2e", - "677c9d5e8606dbabed966fd9998d36a5", - "03122db996d2dd586190ecede173e042", - "31d0ab82d1381d6c404a4b4c2d312df5", - "210fa9270878d6779e3197642122c897", - "55af1f915c8305b6009ead4a3a5ca206", - "ea8d7e974991f0fd7ce49f1a6958b908", - "cb4acc5d6ba761d28d0eaf5998ccfbc3", - "2cd1ba926f08e0b8921ee731d4ad45d2", - "59cecd5ff719d4dbff1d5db7896073f8", - "23fcfe052943f99ae0be66429e2fed13", - "8ab828468c65071c469377994d333fd0", - "bb60899434542599246a5506f91acc70", - "9511650eaa7a03e0395bda03f81c8e46", - "25402db80324219bf47190e565826947", - "3fa08036424eb4abd45dff9e5a44d053", - "d227f25d2fec870921f490264cf10d4d", - "b673e3f2b80a49f5d1a302688ad6c507", - "a1089fb46ad31d4f2e5bdcb89c4ca450", - "a4cab8697eb3d01da02e8f919a6aa623", - "b31f456ef56d61c4caf94e7f08caddc0", - "9bcc87ca47c213d47c910eb42784a36b", - "b10d304e187eb51636281dcca6998bb4", - "a5a9774d73b86d4417da071e86d3e3c0", - "6ce588f19710e366eebadae627eee1fc", - "578dc4c94adf0c34b45663eb4a85a838", - "bf84f07538cc95f066691f26be070348", - "caf153b8021978ae8f9df99c2af233d9", - "89dfa8569d80c9740b4688c0c4817333", - "3a90490dd7f7ef066bf28b74f81e8c1f", - "ed7212665806b5001731bf221739ed36", - "652e1e096bad409f4284acb9e9eabd19", - "25356f8d57abcdf0b06b8e5602e0ccf1", - "03cc9703cd331fb9e79976c73ba65913", - "1824aa65b7e6c8b7723e635ad6639101", - "2c0120f93b519fe5182b422962212e15", - "8615b9ae85fdbf7e7a6738e8e3e1bd45", - "b01d663a2a02c660981056d7f16df586", - "906f62aa308315508487282538d96db1", - "d749670a542f3d85d257c694e997e316", - "df81bc8022bd51e2e17dd9738b452041", - "a8caeb99af594f40f7fff48b32066f89", - "8f263eb262bd4615303303cebf86782f", - "4d1b54f56bde5b2279a44fdfe096413f", - "21da00d34b00b6a3abb2dd0c680d1c37", - "0c10a05600ea952624c929253bf4ce8a", - "6df46e4c7f11a01eb2a362c02f17ed22", - "7bf5124eddcd6122b2709f56f045b7cf", - "9ff5bdd19778f4fa67984b5b7492e036", - "a60ba550973bfcd1415b8ed5b12de272", - "828df338ec04cb2f304eea9bf640999c", - "10b1f6d46172ca42292dd53533670daa", - "97aec799b90fd5bea919ad7eb8ae1e5e", - "010c173afbaa3eb6d78005836f687a10", - "2c1518c284eef37d9710dca5236d545e", - "ab6b23baf829811a17ac367aae043b19", - "e8c0d51d4086da5ab5c8f61e69397615", - "cff001e1b62d1b725ce16bf5a1065d14", - "34477cc17921837cb65f5bff8d53f55c", - "82f760de665244c7dc41f988660c0a77", - "778abd1a5c5422e7b8d52506fad0c4c3", - "6d86d5c5e9545eade5e5c40a0e7d9959", - "1b823369559fe3222934b016b661ae12", - "3dd185ee23db47cb9357f808a3d5892a", - "a1dc473d8b85302571f25b6a93269d26", - "f551b1b02371ea764b1a7816a16b9cde", - "b7d73f3a3240338cb956b7f75bd11a83", - "20f53f1fa841a187328da52185aeafe3", - "ad0af27bbe31f4a95f63d38ce3097a5c", - "743b0415fb37ed722ebc8fdcd6566b1c", - "99049f4e27c1075f5c2a8bee2a6078da", - "204d1e686918408ff168d13ffc06a572", - "6f6a7ac25ae4614ff7842849a2ee9d94", - "85ca525f01d26e432f9595ba148438f6", - "6d1522b0beb17d68ad4230b0158c4652", - "f7a42d6350eba9acc454dd6c08068c54", - "0da0c5262f4dca9033a7a7cd565b9d10", - "dbbcacbb8629807a8a022ae0c2051041", - "b40fa988b67df4f490895064fec7dac7", - "c87da7fa9431c9bf6173dcfc86bae31b", - "d5a32f44c958cefcdf3348be4de3ac6a", - "a3d87f9c67d70809291a10136fdd304e", - "b9e82e3fbdc7bdb4130cc00735503fb2", - "ee1b7fefc7a213cd3bc73b84e32f38b2", - "c4c038a06d11fd8101a1776764d27518", - "db080178c87a02266d23f07cd72d30b2", - "d0b25179c2eca995999f1eec6c266a4f", - "2b26cd9c0535473865d2242f9399ce8b", - "6dc87b9326fd2ff9e6a9e6e0bb330fb3", - "c4496fd117d8ce36f7052f03ccad1670", - "bba80ab1558408c357ad47aaaaeafe38", - "7481c11cb646d723c3b9ee6f0fae9330", - "bfc3ce3b1248483331c53d172bd2fbd0", - "9e4546091b7bf30d44473ada7a17634b", - "6503febe7505e7a128e4496c38ecdf1a", - "d230bd356b8efd6a1a0634b85676a07f", - "6e4beda3e0d14554270df61ebc78231d", - "7440252c5b23d6ec6e354a7cfc02afe5", - "7c55fa1d99d2cf5df085dfc292bb580d", - "d6f3b316e695d8fb421cb7dd1e236991", - "0a2cac0dcb4a896ee57f3abbddb19b8b", - "240526792717478c5ce8e89adc8f66f9", - "5d5266e37a48f0066c266418621c6e2b", - "8e23b3b768cf3df7b0a753607386ce92", - "20465d43926878705d88c9d31d5f5128", - "448c9f9ca3f7f13842d83a303a83a6e4", - "803aa630470ff5fe98c216f6dd307ec1", - "d4bb28b4788a28000c24bd20fd224168", - "80c30fd234cefa21fd37528b1f28fcca", - "9f36eb1cd54566e72ddecb7177c9662a", - "f25028ffcfd67f948323c209862fd81a", - "ac643a14932b315b1c55df2a79a6b9ed", - "2f4dadff83681e3487ee4120c502c8ee", - "8e68432df47e80760d47eae1bec44271", - "52997076c191e305515bf647e8a7f39c", - "6fabd22dbb92abf8f19ef7925b49018e", - "d736f396d6b8009ab3da1507298bd252", - "44eee6eefef6b5ab50953600e5216e58", - "007d43c295692443836fcb1c856a46df", - "55fb67ad0d29d3efd8cc4f4961c8cd9d", - "058edd56fcaf4f3e5b1f99da9901c8b5", - "67b805c0cef73db3706b1329775af537", - "834c3067f4149288a2e52a1aa992e908", - "37e9d2336b1321846741c784e2edf0b7", - "6091e0c0c2d192b489bdd3c852a3e08c", - "e1c5046950883c22740491ac7e9593b2", - "3cc29dc8878988d88875f7f48cfd06f4", - "3f0cbc3c2b5f3fc7d124ea0194594403", - "cdb6ba798a0249f78f6564c611606fd5", - "18a80a2c808396a7e5c92b1708bb26b8", - "dcd7de44b633139e72badc2bddb08b06", - "9e0da4fd7049a852eb895d42f5f6b233", - "3e76a01e9e73bea957eee0319f87da8b", - "64f3177822b9315319f1703606b6b8ae", - "a44fa7b7845808821af63c46378ee43a", - "9cbea4427d7e8caff0d28f9d7600cdec", - "c4d2162d5badfa27d969b03babf9698b", - "dc38dee4ece34ef9c253e0002e4aaa8e", - "f814e597a8c9a33f65061178cb2d7eb4", - "79d5a69c0c2fe77163f16ba16d810730", - "1c0adfdbdcda89c4c0472be4a6b36f0b", - "e9cd7a3495bce7deef0917766bd4ae9c", - "929dd6c71919f79896296cb65eda4e13", - "7fea808fa65ee1a8b692d6949e76de62", - "a697c5cc8c4dcbc81b5349a8299cfd2f", - "9382ec316f372840b9f07ab68adfd4be", - "a4923efc2333c32956995ae7a84224c9", - "0f3c5b204ec882447dc8aae513321508", - "c9d8c8b2eedc262a501f38d17ff8576b", - "e39d2cac795946660a0109410650131e", - "9a8324ed4219be3da821d7d7d51403de", - "c403cdc94083cf5038eecde2158f27b9", - "c1af93053920fe633a0071072a279669", - "4474fde06c283fbc09c86fd7c634b15f", - "7d008c39d752b615d703068aced8118f", - "7c305b8a003d4578b58cd26236f29d10", - "8729dd951263fa4636e54ff191b864c4", - "f8ccac3dd7cb79ae7129a4c8b0e26958", - "aceb234bd3ef312f8480f299690c8d85", - "2699862b096e1aa6fe6da4ebb4849753", - "13203d1e1076b42d3e4bb429870c5ada", - "63b8a6743660cb6ba3c8513435a20312", - "4cea997415cc8f2be6b61667b01913f3", - "64c61e76a8173efa4cf0b9b5554813ed", - "78182197c48a3db307ecbc4d9df83954", - "aee0711c7175fd5a41bfbb6b55ad3ab1", -]; - -const migration: Migration = { - id: "remove-random", - up: async () => { - for (const md5 of HAS_RANDOM_MD5) { - const chart = await db.charts.bms.findOne({ "data.hashMD5": md5 }); - - if (!chart) { - continue; - } - - const scores = await db.scores.find({ - chartID: chart.chartID, - }); - - await DeleteMultipleScores(scores); - - await db.charts.bms.remove({ - chartID: chart.chartID, - }); - } - }, - down: () => { - throw new Error(`Cannot undo.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/remove-session-views.ts b/typescript/server/src/lib/migration/migrations/remove-session-views.ts deleted file mode 100644 index b35c3510b..000000000 --- a/typescript/server/src/lib/migration/migrations/remove-session-views.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db, { monkDB } from "#services/mongo/db"; - -const migration: Migration = { - id: "remove-session-views", - up: async () => { - await db.sessions.update( - {}, - { - $unset: { - views: 1, - }, - }, - { multi: true }, - ); - - // remove session view cache (which no longer exists, so we have to - // access it raw with monk). - await monkDB.get("session-view-cache").drop(); - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/rm-hot.ts b/typescript/server/src/lib/migration/migrations/rm-hot.ts deleted file mode 100644 index a555f4568..000000000 --- a/typescript/server/src/lib/migration/migrations/rm-hot.ts +++ /dev/null @@ -1,51 +0,0 @@ -import type { Migration } from "#utils/types"; - -/* eslint-disable no-await-in-loop */ -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "rm-hot", - up: async () => { - const toRemove = [ - ["gitadora", "skill"], - ["wacca", "rate"], - ["maimai", "rate"], - ["maimaidx", "rate"], - ] as const; - - for (const [game, met] of toRemove) { - await db["game-settings"].update( - { - game, - "preferences.preferredProfileAlg": met, - }, - { - $set: { - "preferences.preferredProfileAlg": null, - }, - }, - { multi: true }, - ); - - await db["game-stats"].update( - { game }, - { - $unset: { [`ratings.${met}`]: 1 }, - }, - { multi: true }, - ); - await db["game-stats-snapshots"].update( - { game }, - { - $unset: { [`ratings.${met}`]: 1, [`rankings.${met}`]: 1 }, - }, - { multi: true }, - ); - } - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/sdvx-maxxive-goals.ts b/typescript/server/src/lib/migration/migrations/sdvx-maxxive-goals.ts deleted file mode 100644 index e608943b3..000000000 --- a/typescript/server/src/lib/migration/migrations/sdvx-maxxive-goals.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "sdvx-maxxive-lamp-rearrange", - up: async () => { - await db.goals.update( - { - game: "sdvx", - "criteria.key": "lamp", - "criteria.value": 4, - name: /PERFECT ULTIMATE CHAIN/u, - }, - { - $set: { - "criteria.value": 5, - }, - }, - ); - - await db.goals.update( - { - game: "sdvx", - "criteria.key": "lamp", - "criteria.value": 3, - }, - { - $set: { - "criteria.value": 4, - }, - }, - ); - }, - down: () => { - throw new Error("not doing this"); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/sdvx-maxxive-lamp-rearrange.ts b/typescript/server/src/lib/migration/migrations/sdvx-maxxive-lamp-rearrange.ts deleted file mode 100644 index 3a621f743..000000000 --- a/typescript/server/src/lib/migration/migrations/sdvx-maxxive-lamp-rearrange.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "sdvx-maxxive-lamp-rearrange", - up: async () => { - await db.scores.update( - { - game: "sdvx", - "scoreData.lamp": "ULTIMATE CHAIN", - }, - { - $set: { - "scoreData.enumIndexes.lamp": 4, - }, - }, - ); - - await db.scores.update( - { - game: "sdvx", - "scoreData.lamp": "PERFECT ULTIMATE CHAIN", - }, - { - $set: { - "scoreData.enumIndexes.lamp": 5, - }, - }, - ); - }, - down: async () => { - await db.scores.update( - { - game: "sdvx", - "scoreData.lamp": "ULTIMATE CHAIN", - }, - { - $set: { - "scoreData.enumIndexes.lamp": 3, - }, - }, - ); - - await db.scores.update( - { - game: "sdvx", - "scoreData.lamp": "PERFECT ULTIMATE CHAIN", - }, - { - $set: { - "scoreData.enumIndexes.lamp": 4, - }, - }, - ); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/sessions-to-scoreIDs.ts b/typescript/server/src/lib/migration/migrations/sessions-to-scoreIDs.ts deleted file mode 100644 index 821de6702..000000000 --- a/typescript/server/src/lib/migration/migrations/sessions-to-scoreIDs.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; -import { EfficientDBIterate } from "#utils/efficient-db-iterate"; - -import type { SessionDocument } from "../../../../../common/src"; - -const migration: Migration = { - id: "sessions-to-scoreIDs", - up: async () => { - await EfficientDBIterate( - db.sessions, - (s: any) => { - // this is completely unsafe but i don't care - - s.scoreIDs = s.scoreInfo.map((e: any) => e.scoreID); - - return s as SessionDocument; - }, - async (updates: Array) => { - await db.sessions.bulkWrite( - updates.map((e) => ({ - updateOne: { - filter: { - sessionID: e.sessionID, - }, - update: { - $set: { - scoreIDs: e.scoreIDs, - }, - $unset: { - scoreInfo: 1, - }, - }, - }, - })), - ); - }, - { scoreIDs: { $exists: false } }, - ); - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/update-jubeat-preferred-tables.ts b/typescript/server/src/lib/migration/migrations/update-jubeat-preferred-tables.ts deleted file mode 100644 index 72d53ff7f..000000000 --- a/typescript/server/src/lib/migration/migrations/update-jubeat-preferred-tables.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { Migration } from "#utils/types"; - -import db from "#services/mongo/db"; - -const migration: Migration = { - id: "update-jubeat-preferred-tables", - up: async () => { - await db["game-settings"].update( - { - game: "jubeat", - }, - { - $set: { - "preferences.defaultTable": null, - }, - }, - { multi: true }, - ); - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/v3-props.ts b/typescript/server/src/lib/migration/migrations/v3-props.ts deleted file mode 100644 index 1875c8190..000000000 --- a/typescript/server/src/lib/migration/migrations/v3-props.ts +++ /dev/null @@ -1,202 +0,0 @@ -import type { Migration } from "#utils/types"; -import type { FilterQuery } from "mongodb"; - -import { EditGoal } from "#lib/targets/goals"; -import db from "#services/mongo/db"; - -import type { GoalDocument } from "../../../../../common/src"; - -async function UpdateGoals( - query: FilterQuery, - newCriteriaKey: string, - newCriteriaValue?: (goal: GoalDocument) => number, -) { - const goals = await db.goals.find(query); - - for (const oldGoal of goals) { - // too lazy to parallelise this wrt. the quest changes. - // ah well - // eslint-disable-next-line no-await-in-loop - await EditGoal(oldGoal, { - ...oldGoal, - criteria: { - ...oldGoal.criteria, - key: newCriteriaKey, - value: newCriteriaValue?.(oldGoal) ?? oldGoal.criteria.value, - }, - }); - } -} - -function perToScore(goal: GoalDocument) { - const v = goal.criteria.value / 100; - - switch (goal.game) { - case "sdvx": - case "usc": - return v * 10_000_000; - case "wacca": - case "chunithm": - case "ongeki": - case "ddr": - case "museca": - return v * 1_000_000; - case "popn": - return v * 100_000; - case "iidx": - case "bms": - case "gitadora": - case "jubeat": - case "maimai": - case "maimaidx": - case "pms": - case "itg": - case "arcaea": - throw new Error(`Cannot convert this percent to score for game ${goal.game}`); - } -} - -const migration: Migration = { - id: "v3-props", - up: async () => { - // no more clans - await db.users.update( - {}, - { - $unset: { clan: 1 }, - }, - { multi: true }, - ); - - await db["game-settings"].update( - { - "preferences.defaultTable": { $exists: false }, - }, - { - $set: { - "preferences.defaultTable": null, - }, - }, - { multi: true }, - ); - await db["user-settings"].update( - { - "preferences.deletableScores": { $exists: false }, - }, - { - $set: { - "preferences.deletableScores": false, - }, - }, - { multi: true }, - ); - - await db["game-settings"].update( - { "preferences.scoreBucket": { $exists: true } }, - { - $rename: { - "preferences.scoreBucket": "preferences.preferredDefaultEnum", - }, - }, - { multi: true }, - ); - - await db["game-settings"].update( - { - "preferences.preferredDefaultEnum": { $exists: false }, - }, - { - $set: { - "preferences.preferredDefaultEnum": null, - }, - }, - { multi: true }, - ); - - await db["game-settings"].update( - { "preferences.preferredScoreAlg": "ktRating" }, - { $set: { "preferences.preferredScoreAlg": null } }, - { multi: true }, - ); - await db["game-settings"].update( - { "preferences.preferredSessionAlg": "ktRating" }, - { $set: { "preferences.preferredSessionAlg": null } }, - { multi: true }, - ); - await db["game-settings"].update( - { "preferences.preferredProfileAlg": "ktRating" }, - { $set: { "preferences.preferredProfileAlg": null } }, - { multi: true }, - ); - - const settings = await db["game-settings"].find({}); - - for (const set of settings) { - const newStats = []; - - for (const stat of set.preferences.stats) { - if ("property" in stat) { - newStats.push({ - ...stat, - metric: stat.property, - }); - } else { - newStats.push(stat); - } - } - - for (const stat of newStats) { - // @ts-expect-error we're renaming the prop - delete stat.property; - } - - await db["game-settings"].update( - { - userID: set.userID, - game: set.game, - playtype: set.playtype, - }, - { - $set: { "preferences.stats": newStats }, - }, - ); - } - - await db.goals.update({}, { $unset: { timeAdded: 1 } }, { multi: true }); - - const r = await db.goals.find({ "charts.type": "any" }); - - await db["goal-subs"].remove({ goalID: { $in: r.map((e) => e.goalID) } }); - await db.goals.remove({ "charts.type": "any" }); - - // score in these games is now percent - await UpdateGoals( - { - game: { $in: ["gitadora", "maimaidx"] }, - "criteria.key": "scoreData.score", - }, - "percent", - ); - - // percent no longer exists for these games - await UpdateGoals( - { - game: { $in: ["sdvx", "usc", "wacca", "museca", "popn", "chunithm"] }, - "criteria.key": "scoreData.percent", - }, - "score", - perToScore, - ); - - // obvious mappings - await UpdateGoals({ "criteria.key": "scoreData.score" }, "score"); - await UpdateGoals({ "criteria.key": "scoreData.percent" }, "percent"); - await UpdateGoals({ "criteria.key": "scoreData.lampIndex" }, "lamp"); - await UpdateGoals({ "criteria.key": "scoreData.gradeIndex" }, "grade"); - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -export default migration; diff --git a/typescript/server/src/lib/migration/migrations/v3-scores.ts b/typescript/server/src/lib/migration/migrations/v3-scores.ts deleted file mode 100644 index 83544a12e..000000000 --- a/typescript/server/src/lib/migration/migrations/v3-scores.ts +++ /dev/null @@ -1,487 +0,0 @@ -import type { DryScoreData } from "#lib/score-import/framework/common/types"; -import type { Migration } from "#utils/types"; - -import CreateLogCtx from "#lib/logger/logger"; -import { CreateScoreID } from "#lib/score-import/framework/score-importing/score-id"; -import { DeleteMultipleScores } from "#lib/score-mutation/delete-scores"; -import UpdateScore from "#lib/score-mutation/update-score"; -import { RecalcGameProfiles } from "#scripts/state-sync/recalc-game-profiles"; - -import { - allSupportedGameGroups, - GetGamePTConfig, - GetGPTString, - type GPTString, - type GPTStrings, - type integer, -} from "../../../../../common/src"; -/* eslint-disable no-await-in-loop */ -import db, { monkDB } from "#services/mongo/db"; -import { UpdateAllPBs } from "#utils/calculations/recalc-scores"; -import { RecalcSessions } from "#utils/calculations/recalc-sessions"; -import { EfficientDBIterate } from "#utils/efficient-db-iterate"; - -interface OldScoreData { - score: number; - percent: number; - lamp: string; - grade: string; - lampIndex: integer; - gradeIndex: integer; - hitMeta: any; - judgements: any; -} - -type ScoreMover = (old: OldScoreData) => DryScoreData; -type ScoreMovers = { - [GPT in GPTString]: ScoreMover; -}; - -const IIDX_MV: ScoreMover = (old) => ({ - score: old.score, - lamp: old.lamp as any, - judgements: old.judgements, - optional: { - bp: old.hitMeta.bp, - comboBreak: old.hitMeta.comboBreak, - fast: old.hitMeta.fast, - slow: old.hitMeta.slow, - maxCombo: old.hitMeta.maxCombo, - gauge: old.hitMeta.gauge, - gaugeHistory: old.hitMeta.gaugeHistory, - gsmEasy: old.hitMeta.gsm?.EASY, - gsmNormal: old.hitMeta.gsm?.NORMAL, - gsmHard: old.hitMeta.gsm?.HARD, - gsmEXHard: old.hitMeta.gsm?.EX_HARD, - }, -}); - -type NeutralGames = GPTStrings["chunithm" | "museca" | "sdvx" | "usc" | "wacca"]; - -const _NEUTRAL_MV = (old: OldScoreData): DryScoreData => ({ - judgements: old.judgements, - lamp: old.lamp as any, - optional: old.hitMeta, - score: old.score, -}); - -// silly hack for typechecker -const NEUTRAL_MV = _NEUTRAL_MV as any; - -const GITADORA_MV: ScoreMover = (old) => ({ - percent: old.percent, - optional: old.hitMeta, - judgements: old.judgements, - lamp: old.lamp as any, -}); - -const BMS_MV: ScoreMover = (old) => ({ - score: old.score, - lamp: old.lamp as any, - judgements: old.judgements, - optional: old.hitMeta, -}); - -const scoreMovers: ScoreMovers = { - "iidx:SP": IIDX_MV, - "iidx:DP": IIDX_MV, - "bms:14K": BMS_MV, - "bms:7K": BMS_MV, - "pms:Controller": BMS_MV, - "pms:Keyboard": BMS_MV, - "chunithm:Single": NEUTRAL_MV, - "ongeki:Single": NEUTRAL_MV, - "usc:Controller": NEUTRAL_MV, - "usc:Keyboard": NEUTRAL_MV, - "sdvx:Single": NEUTRAL_MV, - "wacca:Single": NEUTRAL_MV, - "museca:Single": NEUTRAL_MV, - "ddr:SP": NEUTRAL_MV, - "ddr:DP": NEUTRAL_MV, - "maimai:Single": (old) => ({ - percent: old.percent, - judgements: old.judgements, - lamp: old.lamp as any, - optional: old.hitMeta, - }), - "maimaidx:Single": (old) => ({ - percent: old.percent, - judgements: old.judgements, - lamp: old.lamp as any, - optional: old.hitMeta, - }), - "jubeat:Single": (old) => ({ - musicRate: old.percent, - score: old.score, - judgements: old.judgements, - lamp: old.lamp as any, - optional: old.hitMeta, - }), - "itg:Stamina": () => { - throw new Error( - `Delete ITG scores instead of migrating them, ITG support has fundamentally changed.`, - ); - }, - "popn:9B": (old) => { - if (!old.hitMeta.specificClearType) { - throw new Error( - `This score has an undefined specificClearType, but this property is now necessary. You should have wiped these scores.`, - ); - } - - return { - clearMedal: old.hitMeta.specificClearType, - judgements: old.judgements, - optional: { - fast: old.hitMeta.fast, - slow: old.hitMeta.slow, - gauge: old.hitMeta.gauge, - maxCombo: old.hitMeta.maxCombo, - }, - score: old.score, - }; - }, - "gitadora:Dora": GITADORA_MV, - "gitadora:Gita": GITADORA_MV, - "arcaea:Touch": (old) => ({ - score: old.score, - judgements: old.judgements, - lamp: old.lamp as any, - optional: old.hitMeta, - }), -}; - -const logger = CreateLogCtx(__filename); - -const migration: Migration = { - id: "v3-scores", - up: async () => { - // welp. here we go - // we need to do a **mass** score migration - - for (const game of allSupportedGameGroups) { - logger.info(`Removing dangling scores for ${game}...`); - - const allChartIDs = ( - await db.anyCharts[game].find( - {}, - { - projection: { chartID: 1 }, - }, - ) - ).map((e) => e.chartID); - - await DeleteMultipleScores( - await db.scores.find({ - game, - chartID: { $nin: allChartIDs }, - }), - ); - } - - await DeleteMultipleScores(await db.scores.find({ game: "itg" })); - await DeleteMultipleScores( - await db.scores.find({ - game: "popn", - "scoreData.hitMeta": { $exists: true }, - $or: [ - { "scoreData.hitMeta.specificClearType": { $exists: false } }, - { "scoreData.hitMeta.specificClearType": null }, - ], - }), - ); - - logger.info(`Starting score migration...`); - - const count = await db.scores.count({ - "scoreData.enumIndexes": { $exists: false }, - }); - - logger.info(`Migrating ${count} scores.`); - - const failedScores = []; - - await EfficientDBIterate( - db.scores, - async (score) => { - // @ts-expect-error just incase - delete score._id; - - try { - const gptString = GetGPTString(score.game, score.playtype); - - const newScore = { - ...score, - scoreData: scoreMovers[gptString]( - score.scoreData as unknown as OldScoreData, - ), - }; - - const newScoreID = CreateScoreID( - gptString, - newScore.userID, - newScore, - newScore.chartID, - ); - - await monkDB.get("temp-update-map").insert({ - old: score.scoreID, - new: newScoreID, - }); - - await UpdateScore( - score, - newScore, - undefined, - true, // skipUpdatingPBs because we'll do it after - // all scores are guaranteeably correct. - true, // dangerously skip updating refs - // as we're gonna do it ourselves - ); - } catch (err) { - logger.warn(err); - logger.warn("Continuing through the error."); - - failedScores.push(score.scoreID); - } - }, - // no-op - - async () => void 0, - { - "scoreData.enumIndexes": { $exists: false }, - }, - 10000, - ); - - if (failedScores.length > 0) { - throw new Error( - `${failedScores.length} failed to be migrated. Resolve these manually, please.`, - ); - } - - logger.info(`Reconstructing PBs...`); - - await UpdateAllPBs(); - - logger.info(`Re-calcing Game Profiles...`); - await RecalcGameProfiles(); - - // turn old integery classes into strings - const profiles = await db["game-stats"].find({}); - - for (const p of profiles) { - const newClasses: Record = {}; - - for (const [key, value] of Object.entries(p.classes)) { - if (value === null) { - newClasses[key] = null; - continue; - } - - if (typeof value === "string") { - newClasses[key] = value; - continue; - } - - const cVal = GetGamePTConfig(p.game, p.playtype).classes[key]!.values[value]; - - if (!cVal) { - logger.error(`No such class ${p.game} ${p.playtype} ${key} ${value}?`); - newClasses[key] = value; - continue; - } - - newClasses[key] = cVal.id; - } - - await db["game-stats"].update( - { - userID: p.userID, - game: p.game, - playtype: p.playtype, - }, - { - $set: { - classes: newClasses, - oldClasses: p.classes, - }, - }, - ); - } - - const classAchievements = await db["class-achievements"].find({}, { projectID: true }); - - for (const c of classAchievements) { - const gptConfig = GetGamePTConfig(c.game, c.playtype); - - let newPreviousValue: string | null | undefined = c.classOldValue; - - if (typeof newPreviousValue === "number") { - newPreviousValue = - // @ts-expect-error hack, we know this type isn't what it - // claims to be - gptConfig.classes[c.classSet].values[c.classOldValue]?.id; - } - - let newValue: string | undefined = c.classValue; - - if (typeof newValue === "number") { - newValue = // @ts-expect-error hack, we know this type isn't what it - // claims to be - gptConfig.classes[c.classSet].values[c.classValue]?.id; - } - - if (newPreviousValue === undefined) { - logger.error( - `OLD: No such class ${c.game} ${c.playtype} ${c.classSet} ${c.classOldValue}?`, - ); - continue; - } - - if (newValue === undefined) { - logger.error( - `NEW: No such class ${c.game} ${c.playtype} ${c.classSet} ${c.classValue}?`, - ); - continue; - } - - await db["class-achievements"].update( - { - _id: c._id, - }, - { - $set: { - classOldValue: newPreviousValue, - classValue: newValue, - }, - }, - ); - } - - // somehow these sessions got corrupted, my bad. - const corruptSessionsSomehow = await db.sessions.find({ - "scoreIDs.0": { $exists: false }, - }); - - for (const ses of corruptSessionsSomehow) { - await db.sessions.update( - { sessionID: ses.sessionID }, - { $set: { scoreIDs: [ses.scoreIDs as unknown as string] } }, - ); - } - - logger.info(`Starting Ref Update`); - - await FastUpdateSessions(); - await FastUpdateImports(); - - logger.info(`Finished Ref Update`); - - logger.info(`Re-calcing Sessions...`); - await RecalcSessions(); - - logger.info("Done!"); - }, - down: () => { - throw new Error(`Reverting this change is not possible.`); - }, -}; - -async function FastUpdateSessions() { - const sessions = await db.sessions.find({}); - - await Promise.allSettled( - sessions.map(async (session) => { - if (session.scoreIDs.every((k) => k.startsWith("T"))) { - return; - } - - const newScoreIDRefs: Array<{ new: string; old: string }> = await monkDB - .get("temp-update-map") - .find({ old: { $in: session.scoreIDs } }); - - const lookup = new Map(); - - for (const n of newScoreIDRefs) { - lookup.set(n.old, n.new); - } - - const newScoreIDs: Array = []; - - for (const oldScoreID of session.scoreIDs) { - // definitely new format - if (oldScoreID.startsWith("T")) { - newScoreIDs.push(oldScoreID); - continue; - } - - const newScoreID = lookup.get(oldScoreID); - - if (!newScoreID) { - logger.warn(`No such scoreID ${oldScoreID} exists in lookup? Skipping score.`); - continue; - } - - newScoreIDs.push(newScoreID); - } - - await db.sessions.update( - { sessionID: session.sessionID }, - { - $set: { scoreIDs: newScoreIDs }, - }, - ); - }), - ); -} - -async function FastUpdateImports() { - const sessions = await db.imports.find({}); - - await Promise.allSettled( - sessions.map(async (importDoc) => { - if (importDoc.scoreIDs.every((k) => k.startsWith("T"))) { - return; - } - - const newScoreIDRefs: Array<{ new: string; old: string }> = await monkDB - .get("temp-update-map") - .find({ old: { $in: importDoc.scoreIDs } }); - - const lookup = new Map(); - - for (const n of newScoreIDRefs) { - lookup.set(n.old, n.new); - } - - const newScoreIDs: Array = []; - - for (const oldScoreID of importDoc.scoreIDs) { - // definitely new format - if (oldScoreID.startsWith("T")) { - newScoreIDs.push(oldScoreID); - continue; - } - - const newScoreID = lookup.get(oldScoreID); - - if (!newScoreID) { - logger.warn(`No such scoreID ${oldScoreID} exists in lookup? Skipping score.`); - continue; - } - - newScoreIDs.push(newScoreID); - } - - await db.imports.update( - { importID: importDoc.importID }, - { - $set: { scoreIDs: newScoreIDs }, - }, - ); - }), - ); -} - -export default migration; diff --git a/typescript/server/src/lib/orphan-queue/orphan-queue.ts b/typescript/server/src/lib/orphan-queue/orphan-queue.ts index 04188225b..30c22ebac 100644 --- a/typescript/server/src/lib/orphan-queue/orphan-queue.ts +++ b/typescript/server/src/lib/orphan-queue/orphan-queue.ts @@ -1,6 +1,6 @@ import type { FilterQuery } from "mongodb"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { GetNextCounterValue } from "#utils/db"; import { DedupeArr } from "#utils/misc"; @@ -14,8 +14,6 @@ import type { SongDocument, } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - /** * Handles an orphan queue request. * @@ -38,7 +36,7 @@ export async function HandleOrphanQueue( userID: integer, chartName: string, ) { - logger.debug(`Received orphanqueue request for ${chartName}.`); + log.debug(`Received orphanqueue request for ${chartName}.`); const orphanChart = await db["orphan-chart-queue"].findOne( { gptString, ...orphanMatchCriteria }, @@ -48,7 +46,7 @@ export async function HandleOrphanQueue( ); if (!orphanChart) { - logger.verbose(`Received unknown chart ${chartName}, orphaning.`); + log.verbose(`Received unknown chart ${chartName}, orphaning.`); await db["orphan-chart-queue"].insert({ gptString, @@ -70,10 +68,10 @@ export async function HandleOrphanQueue( // it. if (playcount >= queueSize) { - logger.info(`Song ${chartName} was unorphaned by userIDs ${uniqueUsersArr.join(", ")}.`); + log.info(`Song ${chartName} was unorphaned by userIDs ${uniqueUsersArr.join(", ")}.`); const songID = await GetNextCounterValue(`${game}-song-id`); - logger.verbose(`${chartName} has been assigned songID ${songID}.`); + log.verbose(`${chartName} has been assigned songID ${songID}.`); const { songDoc, chartDoc } = orphanChart; @@ -92,7 +90,7 @@ export async function HandleOrphanQueue( // otherwise, update the state of this orphan. - logger.verbose(`UserID ${userID} played ${chartName}, which is now at ${playcount} plays.`); + log.verbose(`UserID ${userID} played ${chartName}, which is now at ${playcount} plays.`); await db["orphan-chart-queue"].update( { _id: orphanChart._id, @@ -131,10 +129,10 @@ export async function DeorphanIfInQueue( const { songDoc, chartDoc } = orphanChart; - logger.info(`Song ${songDoc.title} was unorphaned forcefully.`); + log.info(`Song ${songDoc.title} was unorphaned forcefully.`); const songID = await GetNextCounterValue(`${game}-song-id`); - logger.verbose(`${songDoc.title} has been assigned songID ${songID}.`); + log.verbose(`${songDoc.title} has been assigned songID ${songID}.`); songDoc.id = songID; chartDoc.songID = songID; diff --git a/typescript/server/src/lib/rivals/rivals.ts b/typescript/server/src/lib/rivals/rivals.ts index d443732a5..8d6183a73 100644 --- a/typescript/server/src/lib/rivals/rivals.ts +++ b/typescript/server/src/lib/rivals/rivals.ts @@ -1,7 +1,7 @@ import type { BulkWriteUpdateOneOperation } from "mongodb"; import { SetRivalsFailReasons } from "#lib/constants/err-codes"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { SendSetRivalNotification } from "#lib/notifications/notification-wrappers"; import { ServerConfig } from "#lib/setup/config"; import db from "#services/mongo/db"; @@ -17,8 +17,6 @@ import { type Playtype, } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - /** * Retrieve all of a user's set rival IDs. * Throws if the user hasn't played the GPT in question. @@ -125,7 +123,7 @@ export async function SetRivals( }); if (!currentGameSettings) { - logger.severe( + log.error( `User ${userID} attempted to set rivals for ${FormatGameGroup( game, playtype, diff --git a/typescript/server/src/lib/score-import/framework/calculated-data/types.ts b/typescript/server/src/lib/score-import/framework/calculated-data/types.ts index 9e6b39b53..c6c85d266 100644 --- a/typescript/server/src/lib/score-import/framework/calculated-data/types.ts +++ b/typescript/server/src/lib/score-import/framework/calculated-data/types.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { ClassConfigs, Classes, GPTString, integer } from "../../../../../../common/src"; import type { @@ -19,5 +19,5 @@ export type ClassProvider = ( gptString: GPT, userID: integer, ratings: Record, - logger: KtLogger, + log: KtLogger, ) => Partial> | Promise>> | undefined; diff --git a/typescript/server/src/lib/score-import/framework/common/get-input-parser.ts b/typescript/server/src/lib/score-import/framework/common/get-input-parser.ts index 0a579c331..5a0c42c91 100644 --- a/typescript/server/src/lib/score-import/framework/common/get-input-parser.ts +++ b/typescript/server/src/lib/score-import/framework/common/get-input-parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { ImportTypeContextMap, ImportTypeDataMap, @@ -14,7 +14,7 @@ export function GetInputParser(jobData: ScoreImportJobDat // Retrieve the set parser function for this import type. const ParserFunction = Parsers[jobData.importType]; - const InputParser = (logger: KtLogger) => + const InputParser = (log: KtLogger) => // @ts-expect-error TypeScript doesn't like the fact that we // pass this as a rest parameter, since none of the parsers // actually take rest args. However, this is the only way to diff --git a/typescript/server/src/lib/score-import/framework/common/import-logger.ts b/typescript/server/src/lib/score-import/framework/common/import-logger.ts index 5a7f108f7..3e06fe6fa 100644 --- a/typescript/server/src/lib/score-import/framework/common/import-logger.ts +++ b/typescript/server/src/lib/score-import/framework/common/import-logger.ts @@ -1,4 +1,4 @@ -import { type KtLogger, rootLogger } from "#lib/logger/logger"; +import { type KtLogger, log } from "#lib/logger/log.js"; import { FormatUserDoc } from "#utils/user"; import type { ImportTypes, UserDocument } from "../../../../../../common/src"; @@ -8,15 +8,8 @@ export function CreateScoreLogger( importID: string, importType: ImportTypes, ): KtLogger { - const meta = { + return log.child({ context: ["Score Import", importType, FormatUserDoc(user)], importID, - }; - - // used so appendLogCtx works - const childLogger = rootLogger.child(meta); - - childLogger.defaultMeta = meta; - - return childLogger as KtLogger; + }); } diff --git a/typescript/server/src/lib/score-import/framework/express-wrapper.ts b/typescript/server/src/lib/score-import/framework/express-wrapper.ts index d94c32272..5d7477b79 100644 --- a/typescript/server/src/lib/score-import/framework/express-wrapper.ts +++ b/typescript/server/src/lib/score-import/framework/express-wrapper.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { Random20Hex } from "#utils/misc"; import type { @@ -18,8 +18,6 @@ export interface WrappedAPIResponse { body: SuccessfulAPIResponse | UnsuccessfulAPIResponse; } -const logger = CreateLogCtx(__filename); - /** * A thin(ish) wrapper for ScoreImportMain which converts thrown * errors and import documents into a WrappedAPIResponse, which can @@ -33,7 +31,7 @@ export async function ExpressWrappedScoreImportMain( ): Promise { const importID = Random20Hex(); - logger.debug("Received import request."); + log.debug("Received import request."); try { const res = await MakeScoreImport({ @@ -55,7 +53,7 @@ export async function ExpressWrappedScoreImportMain( } catch (err) { // this is definitely fine, as the errors are emitted from the same place. if (err instanceof ScoreImportFatalError) { - logger.info(err.message); + log.info(err.message); return { statusCode: err.statusCode, body: { @@ -65,7 +63,7 @@ export async function ExpressWrappedScoreImportMain( }; } - logger.error(err); + log.error(err); return { statusCode: 500, body: { diff --git a/typescript/server/src/lib/score-import/framework/goals/goals.test.ts b/typescript/server/src/lib/score-import/framework/goals/goals.test.ts index b5da5f6c6..67edc4461 100644 --- a/typescript/server/src/lib/score-import/framework/goals/goals.test.ts +++ b/typescript/server/src/lib/score-import/framework/goals/goals.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { dmf } from "#test-utils/misc.js"; import ResetDBState from "#test-utils/resets"; @@ -15,8 +15,6 @@ import type { GoalDocument, GoalSubscriptionDocument } from "../../../../../../c import { ProcessGoal, UpdateGoalsForUser } from "./goals"; -const logger = CreateLogCtx(__filename); - t.test("#UpdateGoalsForUser", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/framework/goals/goals.ts b/typescript/server/src/lib/score-import/framework/goals/goals.ts index be9a8b8f4..1a1cf3381 100644 --- a/typescript/server/src/lib/score-import/framework/goals/goals.ts +++ b/typescript/server/src/lib/score-import/framework/goals/goals.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { EvaluateGoalForUser, GetRelevantGoals } from "#lib/targets/goals"; import { EmitWebhookEvent } from "#lib/webhooks/webhooks"; @@ -18,7 +18,7 @@ export async function GetAndUpdateUsersGoals( game: GameGroup, userID: integer, chartIDs: Set, - logger: KtLogger, + log: KtLogger, ) { const { goals, goalSubsMap } = await GetRelevantGoals(game, userID, chartIDs, logger); @@ -27,7 +27,7 @@ export async function GetAndUpdateUsersGoals( return []; } - logger.verbose(`Found ${goals.length} relevant goals.`); + log.verbose(`Found ${goals.length} relevant goals.`); return UpdateGoalsForUser(goals, goalSubsMap, userID, logger); } @@ -36,7 +36,7 @@ export async function UpdateGoalsForUser( goals: Array, goalSubsMap: Map, userID: integer, - logger: KtLogger, + log: KtLogger, skipMismatch = false, ) { const returns = await Promise.all( @@ -48,7 +48,7 @@ export async function UpdateGoalsForUser( return null; } - logger.error( + log.error( `UserGoal:GoalID mismatch ${goal.goalID} - this user has no goalSub for this, yet it is set.`, ); @@ -56,7 +56,7 @@ export async function UpdateGoalsForUser( } return ProcessGoal(goal, goalSub, userID, logger).catch((err: Error) => { - logger.warn( + log.warn( `Failed to process goal '${goal.name}' for ${userID}, ${err.message}. Skipping.`, { goal, err, userID, goalSub }, ); @@ -111,7 +111,7 @@ export async function ProcessGoal( goal: GoalDocument, goalSub: GoalSubscriptionDocument, userID: integer, - logger: KtLogger, + log: KtLogger, ) { const res = await EvaluateGoalForUser(goal, userID, logger); @@ -181,7 +181,7 @@ export async function ProcessGoal( // If this goal was achieved, and is now *not* achieved, we need to unset // some things. if (goalSub.achieved && !res.achieved) { - logger.info(`User ${userID} lost their achieved status on ${goal.name}.`, { + log.info(`User ${userID} lost their achieved status on ${goal.name}.`, { goal, res, goalSub, @@ -211,19 +211,19 @@ export async function ProcessGoal( }; } -export async function UpdateGoalsInFolder(folderID: string, logger: KtLogger) { +export async function UpdateGoalsInFolder(folderID: string, log: KtLogger) { const goals = await db.goals.find({ "charts.type": "folder", "charts.data": folderID, }); - logger.info(`Updating ${goals.length} goals for ${folderID}`); + log.info(`Updating ${goals.length} goals for ${folderID}`); const goalSubs = await db["goal-subs"].find({ goalID: { $in: goals.map((e) => e.goalID) }, }); - logger.info(`Updating ${goalSubs.length} goal subs for ${folderID}`); + log.info(`Updating ${goalSubs.length} goal subs for ${folderID}`); // (User -> (goalID -> GoalSub)) const ugsMap = new Map>(); diff --git a/typescript/server/src/lib/score-import/framework/import-locks/lock.ts b/typescript/server/src/lib/score-import/framework/import-locks/lock.ts index e60ca3a50..bf1f8e2c0 100644 --- a/typescript/server/src/lib/score-import/framework/import-locks/lock.ts +++ b/typescript/server/src/lib/score-import/framework/import-locks/lock.ts @@ -1,11 +1,9 @@ import { ONE_DAY, ONE_HOUR } from "#lib/constants/time"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import type { integer } from "../../../../../../common/src"; -const logger = CreateLogCtx(__filename); - /** * If a user has no ongoing import, enable the import lock and return true. * If a user has an ongoing import, return false. @@ -26,7 +24,7 @@ export async function CheckAndSetOngoingImportLock(userID: integer) { lockedAt: null, }); } else if (lockExists.locked && lockExists.lockedAt! + ONE_DAY < Date.now()) { - logger.warn(`Removed import lock for ${userID} as it is ostensibly stuck.`); + log.warn(`Removed import lock for ${userID} as it is ostensibly stuck.`); await db["import-locks"].update( { userID, @@ -56,7 +54,7 @@ export async function CheckAndSetOngoingImportLock(userID: integer) { if (lockWasSet.lockedAt !== null) { if (Date.now() - lockWasSet.lockedAt > ONE_HOUR) { - logger.error( + log.error( `User ${userID} has been locked for an hour. Automatically freeing the lock as they're stuck.`, ); await UnsetOngoingImportLock(userID); diff --git a/typescript/server/src/lib/score-import/framework/orphans/orphans.test.ts b/typescript/server/src/lib/score-import/framework/orphans/orphans.test.ts index 8be5ca58d..67b74934e 100644 --- a/typescript/server/src/lib/score-import/framework/orphans/orphans.test.ts +++ b/typescript/server/src/lib/score-import/framework/orphans/orphans.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import ResetDBState from "#test-utils/resets"; import deepmerge from "deepmerge"; @@ -11,8 +11,6 @@ import type { OrphanScoreDocument } from "../../import-types/common/types"; import { OrphanScore, ReprocessOrphan } from "./orphans"; -const logger = CreateLogCtx(__filename); - const batchManualScore: BatchManualScore = { score: 500, lamp: "HARD CLEAR", diff --git a/typescript/server/src/lib/score-import/framework/orphans/orphans.ts b/typescript/server/src/lib/score-import/framework/orphans/orphans.ts index 4470a3c7b..05e8cb9e6 100644 --- a/typescript/server/src/lib/score-import/framework/orphans/orphans.ts +++ b/typescript/server/src/lib/score-import/framework/orphans/orphans.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { FilterQuery } from "mongodb"; import db from "#services/mongo/db"; @@ -33,7 +33,7 @@ export async function OrphanScore( context: ImportTypeContextMap[T], errMsg: string | null, game: GameGroup, - logger: KtLogger, + log: KtLogger, ) { const orphan: Pick = { importType, @@ -42,21 +42,21 @@ export async function OrphanScore( userID, }; - logger.debug("Orphaning document", orphan); + log.debug("Orphaning document", orphan); let orphanID; try { orphanID = `O${fjsh.hash(orphan, "sha256")}`; } catch (err) { - logger.error(`Failed to orphan score -- `, { err, orphan }); + log.error(`Failed to orphan score -- `, { err, orphan }); throw new Error(`Failed to orphan score. ${(err as Error).message}`); } const exists = await db["orphan-scores"].findOne({ orphanID }); if (exists) { - logger.debug(`Skipped orphaning score ${orphanID} because it already exists.`); + log.debug(`Skipped orphaning score ${orphanID} because it already exists.`); return { success: false, orphanID }; } @@ -68,7 +68,7 @@ export async function OrphanScore( timeInserted: Date.now(), }; - logger.debug(`Inserting orphanScoreDoc...`, orphanScoreDoc); + log.debug(`Inserting orphanScoreDoc...`, orphanScoreDoc); await db["orphan-scores"].insert(orphanScoreDoc); @@ -86,7 +86,7 @@ export async function OrphanScore( export async function ReprocessOrphan( orphan: OrphanScoreDocument, blacklist: Array, - logger: KtLogger, + log: KtLogger, ) { const ConverterFunction = Converters[orphan.importType] as ConverterFunction< ImportTypeDataMap[ImportTypes], @@ -103,7 +103,7 @@ export async function ReprocessOrphan( // this is impossible to test, so we're going to ignore it /* istanbul ignore next */ if (!("failureType" in err)) { - logger.error( + log.error( `Converter function ${orphan.importType} returned unexpected error. ID=${orphan.orphanID}`, { err, @@ -121,16 +121,16 @@ export async function ReprocessOrphan( if ("failureType" in res) { // If the data still can't be found, we do nothing about it. if (res.failureType === "SongOrChartNotFound") { - logger.debug(`Unorphaning ${orphan.orphanID} failed. (${res.message})`); + log.debug(`Unorphaning ${orphan.orphanID} failed. (${res.message})`); return false; } else if (res.failureType === "Internal") { - logger.error(`Orphan Internal Failure - ${res.message}, OrphanID ${orphan.orphanID}`); + log.error(`Orphan Internal Failure - ${res.message}, OrphanID ${orphan.orphanID}`); return false; } // otherwise, it's another converterfailure we don't need to specifically handle. - logger.warn( + log.warn( `received ConverterFailure ${res.message} on orphan ${orphan.orphanID}. Removing orphan.`, ); @@ -172,7 +172,7 @@ export async function ReprocessOrphan( const user = await GetUserWithID(orphan.userID); if (!user) { - logger.severe( + log.error( `Orphan ${orphan.orphanID} belongs to ${orphan.userID}, but that user no longer exists in the database. Going to skip this and remove the orphan.`, ); await db["orphan-scores"].remove({ orphanID: orphan.orphanID }); @@ -193,13 +193,13 @@ export async function ReprocessOrphan( return converterReturns; } -export async function DeorphanScores(query: FilterQuery, logger: KtLogger) { +export async function DeorphanScores(query: FilterQuery, log: KtLogger) { const orphans = await db["orphan-scores"].find(query); // ScoreIDs are essentially userID dependent, so this is fine. const blacklist = await GetBlacklist(); - logger.info(`Found ${orphans.length} orphans.`, { query }); + log.info(`Found ${orphans.length} orphans.`, { query }); let failed = 0; let success = 0; @@ -226,7 +226,7 @@ export async function DeorphanScores(query: FilterQuery, lo success++; } } catch (err) { - logger.error(`Failed to reprocess orphan.`, { orphanID: or.orphanID, err }); + log.error(`Failed to reprocess orphan.`, { orphanID: or.orphanID, err }); failed++; } } diff --git a/typescript/server/src/lib/score-import/framework/pb/create-pb-doc.test.ts b/typescript/server/src/lib/score-import/framework/pb/create-pb-doc.test.ts index 5ad685072..75f974984 100644 --- a/typescript/server/src/lib/score-import/framework/pb/create-pb-doc.test.ts +++ b/typescript/server/src/lib/score-import/framework/pb/create-pb-doc.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx, { type KtLogger } from "#lib/logger/logger"; +import { log, type KtLogger } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import ResetDBState from "#test-utils/resets"; import { @@ -15,8 +15,6 @@ import { CreatePBDoc, type PBScoreDocumentNoRank } from "./create-pb-doc"; const IIDXScore = TestingIIDXSPScore; -const logger = CreateLogCtx(__filename); - t.test("#CreatePBDoc", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/framework/pb/create-pb-doc.ts b/typescript/server/src/lib/score-import/framework/pb/create-pb-doc.ts index 619af8236..f5c424d53 100644 --- a/typescript/server/src/lib/score-import/framework/pb/create-pb-doc.ts +++ b/typescript/server/src/lib/score-import/framework/pb/create-pb-doc.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { BulkWriteUpdateOneOperation, FilterQuery, SortOptionObject } from "mongodb"; import { GPT_SERVER_IMPLEMENTATIONS } from "#game-implementations/game-implementations"; @@ -33,7 +33,7 @@ export async function CreatePBDoc( gpt: GPTString, userID: integer, chart: ChartDocument, - logger: KtLogger, + log: KtLogger, asOfTimestamp?: number, ) { const chartID = chart.chartID; @@ -62,13 +62,10 @@ export async function CreatePBDoc( return; } - logger.warn( - `User ${userID} has no scores on chart, but a PB was attempted to be created?`, - { - chartID, - userID, - }, - ); + log.warn(`User ${userID} has no scores on chart, but a PB was attempted to be created?`, { + chartID, + userID, + }); return; } diff --git a/typescript/server/src/lib/score-import/framework/pb/process-pbs.test.ts b/typescript/server/src/lib/score-import/framework/pb/process-pbs.test.ts index f32a2cf98..248227816 100644 --- a/typescript/server/src/lib/score-import/framework/pb/process-pbs.test.ts +++ b/typescript/server/src/lib/score-import/framework/pb/process-pbs.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import ResetDBState from "#test-utils/resets"; import { Testing511SPA, TestingIIDXSPScore } from "#test-utils/test-data"; @@ -8,8 +8,6 @@ import t from "tap"; import { ProcessPBs } from "./process-pbs"; -const logger = CreateLogCtx(__filename); - t.test("#ProcessPBs", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/framework/pb/process-pbs.ts b/typescript/server/src/lib/score-import/framework/pb/process-pbs.ts index 7497b4dba..5a551faf5 100644 --- a/typescript/server/src/lib/score-import/framework/pb/process-pbs.ts +++ b/typescript/server/src/lib/score-import/framework/pb/process-pbs.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { GetChartForIDGuaranteed } from "#utils/db"; @@ -19,7 +19,7 @@ export async function ProcessPBs( playtype: Playtype, userID: integer, chartIDs: Set, - logger: KtLogger, + log: KtLogger, ): Promise { if (chartIDs.size === 0) { return; diff --git a/typescript/server/src/lib/score-import/framework/profile-calculated-data/classes.test.ts b/typescript/server/src/lib/score-import/framework/profile-calculated-data/classes.test.ts index 0fa71a8f8..a70193fd6 100644 --- a/typescript/server/src/lib/score-import/framework/profile-calculated-data/classes.test.ts +++ b/typescript/server/src/lib/score-import/framework/profile-calculated-data/classes.test.ts @@ -1,12 +1,10 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ResetDBState from "#test-utils/resets"; import t from "tap"; import { GITADORA_COLOURS, type UserGameStats } from "../../../../../../common/src"; import { CalculateUGPTClasses, ProcessClassDeltas } from "./classes"; -const logger = CreateLogCtx(__filename); - t.test("#CalculateUGPTClasses", (t) => { t.test("Should produce an empty object by default", async (t) => { const res = await CalculateUGPTClasses("iidx", "SP", 1, {}, null, logger); diff --git a/typescript/server/src/lib/score-import/framework/profile-calculated-data/classes.ts b/typescript/server/src/lib/score-import/framework/profile-calculated-data/classes.ts index 3d16b15dd..ea2ff8ded 100644 --- a/typescript/server/src/lib/score-import/framework/profile-calculated-data/classes.ts +++ b/typescript/server/src/lib/score-import/framework/profile-calculated-data/classes.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { EmitWebhookEvent } from "#lib/webhooks/webhooks"; import db from "#services/mongo/db"; @@ -49,7 +49,7 @@ export async function CalculateUGPTClasses( userID: integer, ratings: Record, ClassProvider: ClassProvider | null, - logger: KtLogger, + log: KtLogger, ): Promise { const gptString = GetGPTString(game, playtype); @@ -59,7 +59,7 @@ export async function CalculateUGPTClasses( // If this import method is providing us classes, merge those with the // other classes we have. if (ClassProvider) { - logger.debug(`Calling custom class handler.`); + log.debug(`Calling custom class handler.`); const customClasses = (await ClassProvider(gptString, userID, ratings, logger)) ?? {}; classes = deepmerge(customClasses, classes); @@ -86,7 +86,7 @@ export async function ProcessClassDeltas( classes: AnyClasses, userGameStats: UserGameStats | null, userID: integer, - logger: KtLogger, + log: KtLogger, ): Promise> { const gptString = GetGPTString(game, playtype); @@ -101,7 +101,7 @@ export async function ProcessClassDeltas( const classVal = classes[classSet]; if (classVal === undefined || classVal === null) { - logger.debug(`Skipped deltaing-class ${classSet}.`); + log.debug(`Skipped deltaing-class ${classSet}.`); continue; } @@ -159,7 +159,7 @@ export async function ProcessClassDeltas( deltas.push(delta); } } catch (err) { - logger.error(err); + log.error(err); } } diff --git a/typescript/server/src/lib/score-import/framework/quests/quests.ts b/typescript/server/src/lib/score-import/framework/quests/quests.ts index 07479f241..b7490d4b6 100644 --- a/typescript/server/src/lib/score-import/framework/quests/quests.ts +++ b/typescript/server/src/lib/score-import/framework/quests/quests.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { BulkWriteUpdateOneOperation } from "mongodb"; import { EvaluateQuestProgress } from "#lib/targets/quests"; @@ -20,7 +20,7 @@ export async function UpdateUsersQuests( game: GameGroup, playtypes: Array, userID: integer, - logger: KtLogger, + log: KtLogger, ) { const goalIDs = importGoalInfo.map((e) => e.goalID); @@ -35,7 +35,7 @@ export async function UpdateQuestsForUser( game: GameGroup, userID: integer, - logger: KtLogger, + log: KtLogger, ) { // create a map here to avoid linear searching when // co-iterating @@ -56,7 +56,7 @@ export async function UpdateQuestsForUser( const questSub = questSubMap.get(quest.questID); if (!questSub) { - logger.warn( + log.warn( `Invalid state achieved in quest processing - processed quest that user did not have? ${quest.questID}`, ); @@ -126,7 +126,7 @@ async function GetRelevantQuests( game: GameGroup, playtypes: Array, userID: integer, - logger: KtLogger, + log: KtLogger, ) { const questSubs = await db["quest-subs"].find({ game, @@ -134,14 +134,14 @@ async function GetRelevantQuests( userID, }); - logger.debug(`Found ${questSubs.length} quest-subs.`); + log.debug(`Found ${questSubs.length} quest-subs.`); const quests = await db.quests.find({ questID: { $in: questSubs.map((e) => e.questID) }, "questData.goals.goalID": { $in: goalIDs }, }); - logger.debug(`Found ${quests.length} relevant quests.`); + log.debug(`Found ${quests.length} relevant quests.`); return { questSubs, quests }; } diff --git a/typescript/server/src/lib/score-import/framework/score-import.ts b/typescript/server/src/lib/score-import/framework/score-import.ts index 98858a9bb..7871342dd 100644 --- a/typescript/server/src/lib/score-import/framework/score-import.ts +++ b/typescript/server/src/lib/score-import/framework/score-import.ts @@ -1,5 +1,5 @@ import { JOB_RETRY_COUNT } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ServerConfig } from "#lib/setup/config"; import { Sleep } from "#utils/misc"; @@ -18,8 +18,6 @@ import { StartTrackingImport, } from "./status-tracking/import-status-tracking"; -const logger = CreateLogCtx(__filename); - /** * Makes a score import given ScoreImportJobData. * If USE_EXTERNAL_SCORE_IMPORT_WORKER is set, then this will instead @@ -85,7 +83,7 @@ async function MakeScoreImportInner( const backoff = ExponentialBackoff(timesAttempted - 1); - logger.info( + log.info( `User ${jobData.userID} already had an import ongoing. (${ jobData.importID }) Backing off for ${(backoff / 1_000).toFixed(2)} seconds.`, @@ -100,14 +98,14 @@ async function MakeScoreImportInner( timesAttempted++; } - logger.error( + log.error( `User ${jobData.userID} didn't get an import through in around 6 hours. Has their lock gotten stuck?`, jobData, ); await UnsetOngoingImportLock(jobData.userID); - logger.error(`Forcing off ${jobData.userID}'s import lock. Sketchy.`); + log.error(`Forcing off ${jobData.userID}'s import lock. Sketchy.`); throw new ScoreImportFatalError( 409, diff --git a/typescript/server/src/lib/score-import/framework/score-importing/derivers.ts b/typescript/server/src/lib/score-import/framework/score-importing/derivers.ts index 0bcfc0303..3845820ca 100644 --- a/typescript/server/src/lib/score-import/framework/score-importing/derivers.ts +++ b/typescript/server/src/lib/score-import/framework/score-importing/derivers.ts @@ -1,5 +1,5 @@ import type { GPTDerivers } from "#game-implementations/types"; -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { GPT_SERVER_IMPLEMENTATIONS } from "#game-implementations/game-implementations"; @@ -50,7 +50,7 @@ function DeriveMetrics( return derivedMetrics as DerivedMetrics[GPT]; } -export function CreateEnumIndexes(gpt: GPT, metrics: any, logger: KtLogger) { +export function CreateEnumIndexes(gpt: GPT, metrics: any, log: KtLogger) { const gptConfig = GetGPTConfig(gpt); const indexes: Record = {}; @@ -67,7 +67,7 @@ export function CreateEnumIndexes(gpt: GPT, metrics: any, const index = conf.values.indexOf(metrics[key]); if (index === -1) { - logger.error( + log.error( `Got an invalid enum value of ${metrics[key]} for ${gpt} ${key} on DryScore. Can't add indexes?`, { metrics, key, conf }, ); @@ -96,7 +96,7 @@ export function CreateEnumIndexes(gpt: GPT, metrics: any, const index = conf.values.indexOf(metrics.optional[key]); if (index === -1) { - logger.error( + log.error( `Got an invalid enum value of ${metrics.optional[key]} for ${gpt} optional.${key} on DryScore. Can't add indexes?`, { metrics, key, conf }, ); @@ -122,7 +122,7 @@ export function CreateFullScoreData( gpt: GPT, dryScoreData: DryScore["scoreData"], chart: ChartDocument, - logger: KtLogger, + log: KtLogger, ) { const derivedMetrics = DeriveMetrics(gpt, dryScoreData, chart); diff --git a/typescript/server/src/lib/score-import/framework/score-importing/hydrate-score.ts b/typescript/server/src/lib/score-import/framework/score-importing/hydrate-score.ts index 8d7f7da09..1ce911f50 100644 --- a/typescript/server/src/lib/score-import/framework/score-importing/hydrate-score.ts +++ b/typescript/server/src/lib/score-import/framework/score-importing/hydrate-score.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { DryScore } from "../common/types"; @@ -23,7 +23,7 @@ export function HydrateScore( chart: ChartDocument, song: SongDocument, scoreID: string, - logger: KtLogger, + log: KtLogger, ): ScoreDocument { const gpt = GetGPTString(dryScore.game, chart.playtype); diff --git a/typescript/server/src/lib/score-import/framework/score-importing/insert-score.ts b/typescript/server/src/lib/score-import/framework/score-importing/insert-score.ts index 0b59b24bf..d6d695454 100644 --- a/typescript/server/src/lib/score-import/framework/score-importing/insert-score.ts +++ b/typescript/server/src/lib/score-import/framework/score-importing/insert-score.ts @@ -1,9 +1,8 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import type { integer, ScoreDocument } from "../../../../../../common/src"; -const logger = CreateLogCtx(__filename); const MAX_PIPELINE_LENGTH = 500; interface ScoreQueue { @@ -67,7 +66,7 @@ export async function InsertQueue(userID: integer) { try { await db.scores.insert(queuedScores); } catch (err) { - logger.warn( + log.warn( `Triggered duplicate key protection. Race condition protected against, but this is not good.`, { err }, ); @@ -89,16 +88,16 @@ export function QueueScoreInsert(score: ScoreDocument) { if (scoreQueue.scoreIDSet.has(score.scoreID)) { // skip - logger.verbose(`Score ID ${score.scoreID} was already queued to be imported.`); + log.verbose(`Score ID ${score.scoreID} was already queued to be imported.`); return null; } AddToScoreQueue(scoreQueue, score); - logger.debug(`ScoreQueue for ${score.userID} is now at ${scoreQueue.queue.length}.`); + log.debug(`ScoreQueue for ${score.userID} is now at ${scoreQueue.queue.length}.`); if (scoreQueue.queue.length >= MAX_PIPELINE_LENGTH) { - logger.verbose(`Triggered pipeline flush with len ${scoreQueue.queue.length}.`); + log.verbose(`Triggered pipeline flush with len ${scoreQueue.queue.length}.`); return InsertQueue(score.userID); } diff --git a/typescript/server/src/lib/score-import/framework/score-importing/score-id.ts b/typescript/server/src/lib/score-import/framework/score-importing/score-id.ts index d7407d37b..646d18886 100644 --- a/typescript/server/src/lib/score-import/framework/score-importing/score-id.ts +++ b/typescript/server/src/lib/score-import/framework/score-importing/score-id.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import fjsh from "fast-json-stable-hash"; diff --git a/typescript/server/src/lib/score-import/framework/score-importing/score-import-main.ts b/typescript/server/src/lib/score-import/framework/score-importing/score-import-main.ts index d0ae45572..e6cc605ed 100644 --- a/typescript/server/src/lib/score-import/framework/score-importing/score-import-main.ts +++ b/typescript/server/src/lib/score-import/framework/score-importing/score-import-main.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/log/log"; import type { ScoreImportJob } from "#lib/score-import/worker/types"; import db from "#services/mongo/db"; @@ -22,7 +22,7 @@ import { } from "../../../../../../common/src"; import { Converters } from "../../import-types/converters"; import { InternalFailure } from "../common/converter-failures"; -import { CreateScoreLogger } from "../common/import-logger"; +import { CreateScoreLogger } from "../common/import-log"; import { GetAndUpdateUsersGoals } from "../goals/goals"; import { CheckAndSetOngoingImportLock, UnsetOngoingImportLock } from "../import-locks/lock"; import { ProcessPBs } from "../pb/process-pbs"; @@ -54,23 +54,23 @@ export default async function ScoreImportMain( ); } - let logger; + let log; if (!providedLogger) { // If they weren't given to us - - // we create an "import logger". + // we create an "import log". // this holds a reference to the user's name, ID, and type // of score import for any future debugging. - logger = CreateScoreLogger(user, importID, importType); - logger.debug("Received import request."); + log = CreateScoreLogger(user, importID, importType); + log.debug("Received import request."); } else { - logger = providedLogger; + log = providedLogger; } const hasNoOngoingImport = await CheckAndSetOngoingImportLock(user.id); if (hasNoOngoingImport) { - logger.info(`User ${userID} made an import while they had one ongoing.`); + log.info(`User ${userID} made an import while they had one ongoing.`); // @danger // Throwing away an import if the user already has one outgoing is *bad*, as in the case @@ -90,11 +90,11 @@ export default async function ScoreImportMain( // We get an iterable from the provided parser function, alongside some context and a converter function. // This iterable does not have to be an array - it's anything that's iterable, like a generator. const parseTimeStart = process.hrtime.bigint(); - const { iterable, context, game, classProvider: classProvider } = await InputParser(logger); + const { iterable, context, game, classProvider: classProvider } = await InputParser(log); const parseTime = GetMillisecondsSince(parseTimeStart); - logger.debug(`Parsing took ${parseTime} milliseconds.`); + log.debug(`Parsing took ${parseTime} milliseconds.`); void SetJobProgress( job, @@ -128,7 +128,7 @@ export default async function ScoreImportMain( ConverterFunction, context, game, - logger, + log, job, ); } catch (err) { @@ -139,11 +139,11 @@ export default async function ScoreImportMain( }); if (r.deletedCount !== 0) { - logger.error( + log.error( `An error was thrown from ImportAllIterableData, which has resulted in a potential partial-score-import. Undoing scores inserted from this import.`, { err }, ); - logger.error( + log.error( `Removed ${r.deletedCount} scores from the database to undo partial-import.`, ); } @@ -154,7 +154,7 @@ export default async function ScoreImportMain( const importTime = GetMillisecondsSince(importTimeStart); const importTimeRel = importTime / importInfo.length; - logger.debug(`Importing took ${importTime} milliseconds. (${importTimeRel}ms/doc)`); + log.debug(`Importing took ${importTime} milliseconds. (${importTimeRel}ms/doc)`); void SetJobProgress(job, `Imported scores, took ${importTime} milliseconds. `); @@ -177,7 +177,7 @@ export default async function ScoreImportMain( importType, game, classProvider, - logger, + log, job, ); @@ -215,11 +215,11 @@ export default async function ScoreImportMain( // I only really want to log "big" imports. The others are here for debugging purposes. if (scoreIDs.length > 500) { - logger.info(logMessage); + log.info(logMessage); } else if (scoreIDs.length > 1) { - logger.verbose(logMessage); + log.verbose(logMessage); } else { - logger.debug(logMessage); + log.debug(logMessage); } await db.imports.insert(ImportDocument); @@ -265,7 +265,7 @@ export async function HandlePostImportSteps( importType: ImportTypes, game: GameGroup, classProvider: ClassProvider | null, - logger: KtLogger, + log: KtLogger, job: ScoreImportJob | undefined, ) { // --- 3. ParseImportInfo --- @@ -277,9 +277,7 @@ export async function HandlePostImportSteps( const importParseTime = GetMillisecondsSince(importParseTimeStart); const importParseTimeRel = importParseTime / importInfo.length; - logger.debug( - `Import Parsing took ${importParseTime} milliseconds. (${importParseTimeRel}ms/doc)`, - ); + log.debug(`Import Parsing took ${importParseTime} milliseconds. (${importParseTimeRel}ms/doc)`); void SetJobProgress(job, "Inserting Sessions."); @@ -287,12 +285,12 @@ export async function HandlePostImportSteps( // We create (or update existing) sessions here. This uses the aforementioned parsed import info // to determine what goes where. const sessionTimeStart = process.hrtime.bigint(); - const sessionInfo = await CreateSessions(user.id, game, scorePlaytypeMap, logger); + const sessionInfo = await CreateSessions(user.id, game, scorePlaytypeMap, log); const sessionTime = GetMillisecondsSince(sessionTimeStart); const sessionTimeRel = sessionTime / sessionInfo.length; - logger.debug(`Session Processing took ${sessionTime} milliseconds (${sessionTimeRel}ms/doc).`); + log.debug(`Session Processing took ${sessionTime} milliseconds (${sessionTimeRel}ms/doc).`); void SetJobProgress(job, "Processing scores and updating PBs."); @@ -314,47 +312,47 @@ export async function HandlePostImportSteps( await Promise.all( Object.entries(chartIDsSeparatedByPlaytype).map(([playtype, chartIDs]) => - ProcessPBs(game, playtype as Playtype, user.id, chartIDs, logger), + ProcessPBs(game, playtype as Playtype, user.id, chartIDs, log), ), ); const pbTime = GetMillisecondsSince(pbTimeStart); const pbTimeRel = pbTime / chartIDs.size; - logger.debug(`PB Processing took ${pbTime} milliseconds (${pbTimeRel}ms/doc)`); + log.debug(`PB Processing took ${pbTime} milliseconds (${pbTimeRel}ms/doc)`); void SetJobProgress(job, "Updating profile statistics."); // --- 6. Game Stats --- // This function updates the users "stats" for this game - such as their profile rating or their classes. const ugsTimeStart = process.hrtime.bigint(); - const classDeltas = await UpdateUsersGameStats(game, playtypes, user.id, classProvider, logger); + const classDeltas = await UpdateUsersGameStats(game, playtypes, user.id, classProvider, log); const ugsTime = GetMillisecondsSince(ugsTimeStart); - logger.debug(`UGS Processing took ${ugsTime} milliseconds.`); + log.debug(`UGS Processing took ${ugsTime} milliseconds.`); void SetJobProgress(job, "Updating Goals."); // --- 7. Goals --- // Evaluate and update the users goals. This returns information about goals that have changed. const goalTimeStart = process.hrtime.bigint(); - const goalInfo = await GetAndUpdateUsersGoals(game, user.id, chartIDs, logger); + const goalInfo = await GetAndUpdateUsersGoals(game, user.id, chartIDs, log); const goalTime = GetMillisecondsSince(goalTimeStart); - logger.debug(`Goal Processing took ${goalTime} milliseconds.`); + log.debug(`Goal Processing took ${goalTime} milliseconds.`); void SetJobProgress(job, "Updating Quests."); // --- 8. Quests --- // Evaluate and update the users quests. This returns... const questTimeStart = process.hrtime.bigint(); - const questInfo = await UpdateUsersQuests(goalInfo, game, playtypes, user.id, logger); + const questInfo = await UpdateUsersQuests(goalInfo, game, playtypes, user.id, log); const questTime = GetMillisecondsSince(questTimeStart); - logger.debug(`Quest Processing took ${questTime} milliseconds.`); + log.debug(`Quest Processing took ${questTime} milliseconds.`); return { classDeltas, @@ -389,7 +387,7 @@ async function UpdateUsersGameStats( modifiedPlaytypes: Array, userID: integer, classProvider: ClassProvider | null, - logger: KtLogger, + log: KtLogger, ) { const promises = []; @@ -401,7 +399,7 @@ async function UpdateUsersGameStats( const playtypes = classProvider ? allPlaytypes : modifiedPlaytypes; for (const pt of playtypes) { - promises.push(UpdateUsersGamePlaytypeStats(game, pt, userID, classProvider, logger)); + promises.push(UpdateUsersGamePlaytypeStats(game, pt, userID, classProvider, log)); } const r = await Promise.all(promises); diff --git a/typescript/server/src/lib/score-import/framework/score-importing/score-importing.ts b/typescript/server/src/lib/score-import/framework/score-importing/score-importing.ts index 44229619e..a755645b9 100644 --- a/typescript/server/src/lib/score-import/framework/score-importing/score-importing.ts +++ b/typescript/server/src/lib/score-import/framework/score-importing/score-importing.ts @@ -1,6 +1,6 @@ import type { ScoreImportJob } from "#lib/score-import/worker/types"; -import { AppendLogCtx, type KtLogger } from "#lib/logger/logger"; +import { AppendLogCtx, type KtLogger } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { ClassToObject } from "#utils/misc"; @@ -44,10 +44,10 @@ export async function ImportAllIterableData( ConverterFunction: ConverterFunction, context: C, game: GameGroup, - logger: KtLogger, + log: KtLogger, job: ScoreImportJob | undefined, ): Promise> { - logger.verbose("Getting Blacklist..."); + log.verbose("Getting Blacklist..."); // @optimisable: could filter harder with score.game and score.playtype // stuff. @@ -57,7 +57,7 @@ export async function ImportAllIterableData( }) ).map((e) => e.scoreID); - logger.verbose(`Starting Data Processing...`); + log.verbose(`Starting Data Processing...`); const processedResults = []; @@ -89,21 +89,21 @@ export async function ImportAllIterableData( // We need to filter out nulls, which we don't care for (these are neither successes or failures) - logger.verbose(`Finished Importing Data (${processedResults.length} datapoints).`); - logger.debug(`Removing null returns...`); + log.verbose(`Finished Importing Data (${processedResults.length} datapoints).`); + log.debug(`Removing null returns...`); const datapoints = processedResults.filter((e) => e !== null) as Array; - logger.debug(`Removed null from results.`); + log.debug(`Removed null from results.`); - logger.verbose(`received ${datapoints.length} returns, from ${processedResults.length} data.`); + log.verbose(`received ${datapoints.length} returns, from ${processedResults.length} data.`); // Flush the score queue out after finishing most of the import. This ensures no scores get left in the // queue. const emptied = await InsertQueue(userID); if (emptied !== 0 && emptied !== null) { - logger.verbose(`Emptied ${emptied} documents from score queue.`); + log.verbose(`Emptied ${emptied} documents from score queue.`); } return datapoints; @@ -125,7 +125,7 @@ export async function ImportIterableDatapoint( context: C, game: GameGroup, blacklist: Array, - logger: KtLogger, + log: KtLogger, ): Promise { try { const cfnReturn = await ConverterFunction(data, context, importType, logger); @@ -139,7 +139,7 @@ export async function ImportIterableDatapoint( // if this isn't a converterFailure, it's just a general error. // Some sort of internal issue? if (!IsConverterFailure(err)) { - logger.error(`Unknown error thrown from converter, Ignoring.`, { + log.error(`Unknown error thrown from converter, Ignoring.`, { err, }); return { @@ -159,12 +159,12 @@ export async function ImportIterableDatapoint( case "SongOrChartNotFound": { const dnfErr = err as SongOrChartNotFoundFailure; - logger.info(`SongOrChartNotFoundFailure: ${dnfErr.message}`, { + log.info(`SongOrChartNotFoundFailure: ${dnfErr.message}`, { err: ClassToObject(dnfErr), hideFromConsole: ["cfnReturn"], }); - logger.debug("Inserting orphan...", { cfnReturn: dnfErr }); + log.debug("Inserting orphan...", { cfnReturn: dnfErr }); const insertOrphan = await OrphanScore( dnfErr.importType, @@ -177,7 +177,7 @@ export async function ImportIterableDatapoint( ); if (insertOrphan.success) { - logger.debug("Orphan inserted successfully.", { + log.debug("Orphan inserted successfully.", { orphanID: insertOrphan.orphanID, }); return { @@ -192,7 +192,7 @@ export async function ImportIterableDatapoint( }; } - logger.debug(`Orphan already exists.`, { orphanID: insertOrphan.orphanID }); + log.debug(`Orphan already exists.`, { orphanID: insertOrphan.orphanID }); return { success: false, @@ -205,7 +205,7 @@ export async function ImportIterableDatapoint( } case "InvalidScore": { - logger.info(`InvalidScoreFailure: ${err.message}`, { + log.info(`InvalidScoreFailure: ${err.message}`, { err: ClassToObject(err), hideFromConsole: ["cfnReturn"], }); @@ -218,7 +218,7 @@ export async function ImportIterableDatapoint( } case "Internal": { - logger.error(`Internal error occured.`, { err: ClassToObject(err) }); + log.error(`Internal error occured.`, { err: ClassToObject(err) }); return { success: false, type: "InternalError", @@ -232,7 +232,7 @@ export async function ImportIterableDatapoint( case "AmbiguousTitle": { const atErr = err as AmbiguousTitleFailure; - logger.info(`AmbiguousTitleFailure: ${err.message}`, { err: ClassToObject(err) }); + log.info(`AmbiguousTitleFailure: ${err.message}`, { err: ClassToObject(err) }); return { type: "AmbiguousTitle", @@ -248,7 +248,7 @@ export async function ImportIterableDatapoint( return null; default: { - logger.warn(`Unknown error returned as ConverterFailure, Ignoring.`, { + log.warn(`Unknown error returned as ConverterFailure, Ignoring.`, { err: ClassToObject(err), }); return { @@ -266,7 +266,7 @@ export async function ProcessSuccessfulConverterReturn( userID: integer, cfnReturn: ConverterFnSuccessReturn, blacklist: Array, - logger: KtLogger, + log: KtLogger, forceImmediateImport = false, ): Promise { const result = await HydrateCheckAndInsertScore( @@ -286,7 +286,7 @@ export async function ProcessSuccessfulConverterReturn( return null; } - logger.debug(`Successfully imported score: ${result.scoreID}`); + log.debug(`Successfully imported score: ${result.scoreID}`); return { success: true, @@ -315,7 +315,7 @@ async function HydrateCheckAndInsertScore( chart: ChartDocument, song: SongDocument, blacklist: Array, - importLogger: KtLogger, + importlog: KtLogger, force = false, ): Promise { const gptString = GetGPTString(dryScore.game, chart.playtype); @@ -326,7 +326,7 @@ async function HydrateCheckAndInsertScore( const logger = AppendLogCtx(scoreID, importLogger); if (blacklist.length && blacklist.includes(scoreID)) { - logger.verbose("Skipped score, as it was on the blacklist."); + log.verbose("Skipped score, as it was on the blacklist."); return null; } @@ -345,13 +345,13 @@ async function HydrateCheckAndInsertScore( ); if (existingScore) { - logger.verbose(`Skipped score.`); + log.verbose(`Skipped score.`); return null; } // If this users score queue if (GetScoreQueueMaybe(userID)?.scoreIDSet.has(scoreID) === true) { - logger.verbose(`Skipped score.`); + log.verbose(`Skipped score.`); return null; } @@ -369,7 +369,7 @@ async function HydrateCheckAndInsertScore( // this is a last resort for avoiding doubled imports if (res === null) { - logger.verbose(`Skipped score - Race Condition protection triggered.`); + log.verbose(`Skipped score - Race Condition protection triggered.`); return null; } diff --git a/typescript/server/src/lib/score-import/framework/sessions/sessions.ts b/typescript/server/src/lib/score-import/framework/sessions/sessions.ts index 19274e68b..20504d727 100644 --- a/typescript/server/src/lib/score-import/framework/sessions/sessions.ts +++ b/typescript/server/src/lib/score-import/framework/sessions/sessions.ts @@ -1,5 +1,5 @@ import { ONE_HOUR } from "#lib/constants/time"; -import CreateLogCtx, { AppendLogCtx, type KtLogger } from "#lib/logger/logger"; +import { log, AppendLogCtx, type KtLogger } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { GetChartForIDGuaranteed } from "#utils/db"; import { GetScoresFromSession } from "#utils/session"; @@ -30,7 +30,7 @@ export async function CreateSessions( userID: integer, game: GameGroup, scorePtMap: ScorePlaytypeMap, - logger: KtLogger, + log: KtLogger, ) { const allSessionInfo = []; @@ -99,8 +99,6 @@ function ScoreToSessionScoreInfo( export async function GetSessionScoreInfo( session: SessionDocument, ): Promise> { - const logger = CreateLogCtx(`Session ${session.sessionID} Score Info`); - const scores = await db.scores.find({ scoreID: { $in: session.scoreIDs }, }); @@ -187,7 +185,7 @@ export async function LoadScoresIntoSessions( importScores: Array, game: GameGroup, playtype: Playtype, - baseLogger: KtLogger, + baselog: KtLogger, ): Promise> { const logger = AppendLogCtx("Session Generation", baseLogger); @@ -195,7 +193,7 @@ export async function LoadScoresIntoSessions( for (const score of importScores) { if (score.timeAchieved === null) { - logger.verbose(`Ignored score ${score.scoreID}, as it had no timeAchieved.`); + log.verbose(`Ignored score ${score.scoreID}, as it had no timeAchieved.`); // ignore scores without timestamps. We can't use these for sessions. continue; @@ -206,7 +204,7 @@ export async function LoadScoresIntoSessions( // If we have nothing to work with, why bother? if (timestampedScores.length === 0) { - logger.verbose(`Skipped calculating sessions as there were no timestamped scores`); + log.verbose(`Skipped calculating sessions as there were no timestamped scores`); return []; } @@ -235,7 +233,7 @@ export async function LoadScoresIntoSessions( // so push the group (which is guaranteed to have atleast one score) sessionScoreGroups.push(curGroup); - logger.verbose(`Created ${sessionScoreGroups.length} groups from timestamped scores.`); + log.verbose(`Created ${sessionScoreGroups.length} groups from timestamped scores.`); const sessionInfoReturns: Array = []; @@ -268,7 +266,7 @@ export async function LoadScoresIntoSessions( let infoReturn: SessionInfoReturn; if (nearbySession) { - logger.verbose( + log.verbose( `Found nearby session for ${userID} (${game} ${playtype}) around ${startOfGroup} ${endOfGroup}.`, ); @@ -287,7 +285,7 @@ export async function LoadScoresIntoSessions( }, ); } else { - logger.debug( + log.debug( `Creating new session for ${userID} (${game} ${playtype}) around ${startOfGroup} ${endOfGroup}.`, ); diff --git a/typescript/server/src/lib/score-import/framework/status-tracking/import-status-tracking.ts b/typescript/server/src/lib/score-import/framework/status-tracking/import-status-tracking.ts index 8857fea27..f35de63e3 100644 --- a/typescript/server/src/lib/score-import/framework/status-tracking/import-status-tracking.ts +++ b/typescript/server/src/lib/score-import/framework/status-tracking/import-status-tracking.ts @@ -2,14 +2,12 @@ import type { ScoreImportJobData } from "#lib/score-import/worker/types"; import { CDNStoreOrOverwrite } from "#lib/cdn/cdn"; import { GetScoreImportInputURL } from "#lib/cdn/url-format"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import type { ImportTypes } from "../../../../../../common/src"; import type ScoreImportFatalError from "../score-importing/score-import-error"; -const logger = CreateLogCtx(__filename); - /** * For us to save the incoming parserArguments, * we want to pretty it up a bit into something @@ -52,7 +50,7 @@ export async function StartTrackingImport(jobData: ScoreImportJobData { - logger.error( + log.error( `Failed to save score-import-input for import '${ jobData.importID }' at path '${GetScoreImportInputURL(jobData.importID)}'.`, diff --git a/typescript/server/src/lib/score-import/framework/ugpt-stats/update-ugpt-stats.test.ts b/typescript/server/src/lib/score-import/framework/ugpt-stats/update-ugpt-stats.test.ts index 51d66dc5a..7b50aa870 100644 --- a/typescript/server/src/lib/score-import/framework/ugpt-stats/update-ugpt-stats.test.ts +++ b/typescript/server/src/lib/score-import/framework/ugpt-stats/update-ugpt-stats.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import ResetDBState from "#test-utils/resets"; import { TestingIIDXSPScorePB } from "#test-utils/test-data"; @@ -8,8 +8,6 @@ import t from "tap"; import { UpdateUsersGamePlaytypeStats } from "./update-ugpt-stats"; -const logger = CreateLogCtx(__filename); - // more of an integration test t.test("#UpdateUsersGamePlaytypeStats", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/framework/ugpt-stats/update-ugpt-stats.ts b/typescript/server/src/lib/score-import/framework/ugpt-stats/update-ugpt-stats.ts index bb95392d6..137f4a91f 100644 --- a/typescript/server/src/lib/score-import/framework/ugpt-stats/update-ugpt-stats.ts +++ b/typescript/server/src/lib/score-import/framework/ugpt-stats/update-ugpt-stats.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { CreateGameSettings } from "#lib/game-settings/create-game-settings"; import db from "#services/mongo/db"; @@ -20,9 +20,9 @@ export async function UpdateUsersGamePlaytypeStats( playtype: Playtype, userID: integer, classProvider: ClassProvider | null, - logger: KtLogger, + log: KtLogger, ): Promise> { - logger.debug(`Calculating Ratings...`); + log.debug(`Calculating Ratings...`); const ratings = await CalculateProfileRatings(game, playtype, userID); @@ -34,7 +34,7 @@ export async function UpdateUsersGamePlaytypeStats( userID, }); - logger.debug(`Calculating UGSClasses...`); + log.debug(`Calculating UGSClasses...`); const classes = await CalculateUGPTClasses( game, @@ -45,16 +45,16 @@ export async function UpdateUsersGamePlaytypeStats( logger, ); - logger.debug(`Finished Calculating UGSClasses`); + log.debug(`Finished Calculating UGSClasses`); - logger.debug(`Calculating Class Deltas...`); + log.debug(`Calculating Class Deltas...`); const deltas = await ProcessClassDeltas(game, playtype, classes, userGameStats, userID, logger); - logger.debug(`Had ${deltas.length} deltas.`); + log.debug(`Had ${deltas.length} deltas.`); if (userGameStats) { - logger.debug(`Updated player gamestats for ${game} (${playtype})`); + log.debug(`Updated player gamestats for ${game} (${playtype})`); const updateClasses: Record = {}; @@ -83,7 +83,7 @@ export async function UpdateUsersGamePlaytypeStats( }); if (!hasAnyScores) { - logger.debug("Not creating new game stats for user with no scores.", { + log.debug("Not creating new game stats for user with no scores.", { userID, game, playtype, @@ -99,7 +99,7 @@ export async function UpdateUsersGamePlaytypeStats( classes, }; - logger.info(`Created new gamestats for ${game} (${playtype})`); + log.info(`Created new gamestats for ${game} (${playtype})`); await db["game-stats"].insert(newStats); await CreateGameSettings(userID, game, playtype); } diff --git a/typescript/server/src/lib/score-import/import-types/api/eag-iidx/parser.ts b/typescript/server/src/lib/score-import/import-types/api/eag-iidx/parser.ts index a379053c8..f861d7a8f 100644 --- a/typescript/server/src/lib/score-import/import-types/api/eag-iidx/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/api/eag-iidx/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { GetKaiAuthGuaranteed } from "#utils/queries/auth"; @@ -6,7 +6,7 @@ import type { integer } from "../../../../../../../common/src"; import { ParseKaiIIDX } from "../../common/api-kai/iidx/parser"; -export async function ParseEagIIDX(userID: integer, logger: KtLogger) { +export async function ParseEagIIDX(userID: integer, log: KtLogger) { const authDoc = await GetKaiAuthGuaranteed(userID, "EAG", logger); return ParseKaiIIDX("EAG", authDoc, logger); diff --git a/typescript/server/src/lib/score-import/import-types/api/eag-sdvx/parser.ts b/typescript/server/src/lib/score-import/import-types/api/eag-sdvx/parser.ts index 509c3bba1..8e97bc2a4 100644 --- a/typescript/server/src/lib/score-import/import-types/api/eag-sdvx/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/api/eag-sdvx/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { GetKaiAuthGuaranteed } from "#utils/queries/auth"; @@ -6,7 +6,7 @@ import type { integer } from "../../../../../../../common/src"; import { ParseKaiSDVX } from "../../common/api-kai/sdvx/parser"; -export async function ParseEagSDVX(userID: integer, logger: KtLogger) { +export async function ParseEagSDVX(userID: integer, log: KtLogger) { const authDoc = await GetKaiAuthGuaranteed(userID, "EAG", logger); return ParseKaiSDVX("EAG", authDoc, logger); diff --git a/typescript/server/src/lib/score-import/import-types/api/flo-iidx/parser.ts b/typescript/server/src/lib/score-import/import-types/api/flo-iidx/parser.ts index 4852ecc12..f15e69f78 100644 --- a/typescript/server/src/lib/score-import/import-types/api/flo-iidx/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/api/flo-iidx/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { GetKaiAuthGuaranteed } from "#utils/queries/auth"; @@ -6,7 +6,7 @@ import type { integer } from "../../../../../../../common/src"; import { ParseKaiIIDX } from "../../common/api-kai/iidx/parser"; -export async function ParseFloIIDX(userID: integer, logger: KtLogger) { +export async function ParseFloIIDX(userID: integer, log: KtLogger) { const authDoc = await GetKaiAuthGuaranteed(userID, "FLO", logger); return ParseKaiIIDX("FLO", authDoc, logger); diff --git a/typescript/server/src/lib/score-import/import-types/api/flo-sdvx/parser.ts b/typescript/server/src/lib/score-import/import-types/api/flo-sdvx/parser.ts index 95d4e01c5..88d980d0e 100644 --- a/typescript/server/src/lib/score-import/import-types/api/flo-sdvx/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/api/flo-sdvx/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { GetKaiAuthGuaranteed } from "#utils/queries/auth"; @@ -6,7 +6,7 @@ import type { integer } from "../../../../../../../common/src"; import { ParseKaiSDVX } from "../../common/api-kai/sdvx/parser"; -export async function ParseFloSDVX(userID: integer, logger: KtLogger) { +export async function ParseFloSDVX(userID: integer, log: KtLogger) { const authDoc = await GetKaiAuthGuaranteed(userID, "FLO", logger); return ParseKaiSDVX("FLO", authDoc, logger); diff --git a/typescript/server/src/lib/score-import/import-types/api/min-sdvx/parser.ts b/typescript/server/src/lib/score-import/import-types/api/min-sdvx/parser.ts index 3c9ea96c9..2f7938161 100644 --- a/typescript/server/src/lib/score-import/import-types/api/min-sdvx/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/api/min-sdvx/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { GetKaiAuthGuaranteed } from "#utils/queries/auth"; @@ -6,7 +6,7 @@ import type { integer } from "../../../../../../../common/src"; import { ParseKaiSDVX } from "../../common/api-kai/sdvx/parser"; -export async function ParseMinSDVX(userID: integer, logger: KtLogger) { +export async function ParseMinSDVX(userID: integer, log: KtLogger) { const authDoc = await GetKaiAuthGuaranteed(userID, "MIN", logger); return ParseKaiSDVX("MIN", authDoc, logger); diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/converter.test.ts b/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/converter.test.ts index b4093b122..d615f6749 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ParseDateFromString } from "#lib/score-import/framework/common/score-utils"; import { ChunithmClearStatus, @@ -16,8 +16,6 @@ import type { MytChunithmScore } from "./types"; import ConvertAPIMytChunithm from "./converter"; -const logger = CreateLogCtx(__filename); - const parsedScore: MytChunithmScore = { playlogApiId: "346907fc-ba1a-4ff9-a5a3-37a62b5f2e6c", info: { diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/converter.ts b/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/converter.ts index 4201b3c04..f9101eeb1 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/converter.ts @@ -93,7 +93,7 @@ const ConvertAPIMytChunithm: ConverterFunction = const song = await FindSongOnID("chunithm", chart.songID); if (song === null) { - logger.severe(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`, { chart }); + log.error(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`, { chart }); throw new InternalFailure(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`); } diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/parser.ts b/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/parser.ts index 5d0b6a562..2737a17d9 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-chunithm/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { EmptyObject } from "#utils/types"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; @@ -26,7 +26,7 @@ async function* getObjectsFromGrpcIterable( export default async function ParseMytChunithm( userID: integer, - logger: KtLogger, + log: KtLogger, ): Promise> { const profileApiId = await FetchMytTitleAPIID(userID, "chunithm", logger); const endpoint = GetMytHostname(); @@ -42,7 +42,7 @@ export default async function ParseMytChunithm( iterable = getObjectsFromGrpcIterable(stream); } catch (err) { - logger.error( + log.error( `Unexpected MYT error while streaming Chunithm playlog items for userID ${userID}: ${err}`, ); diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/converter.test.ts b/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/converter.test.ts index 61c014758..92508c29a 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ParseDateFromString } from "#lib/score-import/framework/common/score-utils"; import { MaimaiComboStatus, @@ -15,8 +15,6 @@ import type { MytMaimaiDxScore } from "./types"; import ConvertAPIMytMaimaiDx from "./converter"; -const logger = CreateLogCtx(__filename); - const parsedScore: MytMaimaiDxScore = { playlogApiId: "6071c489-6ab9-4674-a443-f88b603fa596", info: { diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/converter.ts b/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/converter.ts index 58310f91a..fddf0e116 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/converter.ts @@ -108,7 +108,7 @@ const ConvertAPIMytMaimaiDx: ConverterFunction = const song = await FindSongOnID("maimaidx", chart.songID); if (song === null) { - logger.severe(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`, { chart }); + log.error(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`, { chart }); throw new InternalFailure(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`); } diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/parser.ts b/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/parser.ts index de06ebc4a..7c6cfaa50 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-maimaidx/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { EmptyObject } from "#utils/types"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; @@ -26,7 +26,7 @@ async function* getObjectsFromGrpcIterable( export default async function ParseMytMaimaiDx( userID: integer, - logger: KtLogger, + log: KtLogger, ): Promise> { const profileApiId = await FetchMytTitleAPIID(userID, "maimaidx", logger); const endpoint = GetMytHostname(); @@ -42,7 +42,7 @@ export default async function ParseMytMaimaiDx( iterable = getObjectsFromGrpcIterable(stream); } catch (err) { - logger.error( + log.error( `Unexpected MYT error while streaming maimai DX playlog items for userID ${userID}: ${err}`, ); diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/converter.test.ts b/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/converter.test.ts index 6e564dbb7..7bb2c86fe 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ParseDateFromString } from "#lib/score-import/framework/common/score-utils"; import { OngekiBattleScoreRank, @@ -16,8 +16,6 @@ import type { MytOngekiScore } from "./types"; import ConvertAPIMytOngeki from "./converter"; -const logger = CreateLogCtx(__filename); - const parsedScore: MytOngekiScore = { playlogApiId: "806ca7ac-76f5-4d99-8760-770df60e1ff5", info: { diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/converter.ts b/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/converter.ts index c9cffbbce..55139e5d3 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/converter.ts @@ -106,7 +106,7 @@ const ConvertAPIMytOngeki: ConverterFunction = asyn const song = await FindSongOnID("ongeki", chart.songID); if (song === null) { - logger.severe(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`, { chart }); + log.error(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`, { chart }); throw new InternalFailure(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`); } diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/parser.ts b/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/parser.ts index 190ad03ff..a516fdbb4 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-ongeki/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { EmptyObject } from "#utils/types"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; @@ -26,7 +26,7 @@ async function* getObjectsFromGrpcIterable( export default async function ParseMytOngeki( userID: integer, - logger: KtLogger, + log: KtLogger, ): Promise> { const profileApiId = await FetchMytTitleAPIID(userID, "ongeki", logger); const endpoint = GetMytHostname(); @@ -42,7 +42,7 @@ export default async function ParseMytOngeki( iterable = getObjectsFromGrpcIterable(stream); } catch (err) { - logger.error( + log.error( `Unexpected MYT error while streaming Ongeki playlog items for userID ${userID}: ${err}`, ); diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-wacca/converter.test.ts b/typescript/server/src/lib/score-import/import-types/api/myt-wacca/converter.test.ts index 4723d36e2..ca87bad3c 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-wacca/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-wacca/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ParseDateFromString } from "#lib/score-import/framework/common/score-utils"; import { WaccaMusicDifficulty, @@ -14,8 +14,6 @@ import type { MytWaccaScore } from "./types"; import ConvertAPIMytWACCA from "./converter"; -const logger = CreateLogCtx(__filename); - const parsedScore: MytWaccaScore = { musicId: 2085, musicDifficulty: WaccaMusicDifficulty.WACCA_MUSIC_DIFFICULTY_EXPERT, diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-wacca/converter.ts b/typescript/server/src/lib/score-import/import-types/api/myt-wacca/converter.ts index f62a7bd2c..7ec0e6b91 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-wacca/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-wacca/converter.ts @@ -86,7 +86,7 @@ const ConvertAPIMytWACCA: ConverterFunction = async const song = await FindSongOnID("wacca", chart.songID); if (song === null) { - logger.severe(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`, { chart }); + log.error(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`, { chart }); throw new InternalFailure(`Song/chart desync: ${chart.songID} for chart ${chart.chartID}`); } diff --git a/typescript/server/src/lib/score-import/import-types/api/myt-wacca/parser.ts b/typescript/server/src/lib/score-import/import-types/api/myt-wacca/parser.ts index 9bce8942f..832ead88b 100644 --- a/typescript/server/src/lib/score-import/import-types/api/myt-wacca/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/api/myt-wacca/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { EmptyObject } from "#utils/types"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; @@ -29,7 +29,7 @@ async function* getObjectsFromGrpcIterable( export default async function ParseMytWACCA( userID: integer, - logger: KtLogger, + log: KtLogger, ): Promise> { const titleApiId = await FetchMytTitleAPIID(userID, "wacca", logger); const endpoint = GetMytHostname(); @@ -41,7 +41,7 @@ export default async function ParseMytWACCA( // Note: I don't think this actually does anything on the network, so // it shouldn't really fail. Still, wrap just in case. - logger.error(`Unexpected MYT during WaccaUserClient creation for ${userID}: ${err}`, { + log.error(`Unexpected MYT during WaccaUserClient creation for ${userID}: ${err}`, { userID, err, }); @@ -60,7 +60,7 @@ export default async function ParseMytWACCA( iterable = getObjectsFromGrpcIterable(stream); } catch (err) { - logger.error( + log.error( `Unexpected MYT error while streaming WACCA playlog items for userID ${userID}: ${err}`, ); @@ -72,9 +72,7 @@ export default async function ParseMytWACCA( try { classProvider = await CreateMytWACCAClassHandler(titleApiId, client); } catch (err) { - logger.error( - `Unexpected MYT error while fetching player data for userID ${userID}: ${err}`, - ); + log.error(`Unexpected MYT error while fetching player data for userID ${userID}: ${err}`); throw new ScoreImportFatalError(500, `Failed to fetch player data from MYT.`); } diff --git a/typescript/server/src/lib/score-import/import-types/common/api-cg/jb/converter.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-cg/jb/converter.test.ts index c61bdc589..5e38b2567 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-cg/jb/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-cg/jb/converter.test.ts @@ -1,6 +1,6 @@ import type { DryScore } from "#lib/score-import/framework/common/types"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ParseDateFromString } from "#lib/score-import/framework/common/score-utils"; import { dmf } from "#test-utils/misc"; import t from "tap"; @@ -9,8 +9,6 @@ import type { CGContext, CGJubeatScore } from "../types"; import { ConverterAPICGJubeat } from "./converter"; -const logger = CreateLogCtx(__filename); - const BIT_FAILED = 1 << 0; const BIT_CLEAR = 1 << 1; const BIT_FULL_COMBO = 1 << 2; diff --git a/typescript/server/src/lib/score-import/import-types/common/api-cg/jb/converter.ts b/typescript/server/src/lib/score-import/import-types/common/api-cg/jb/converter.ts index 174b6e1cb..78f95861e 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-cg/jb/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-cg/jb/converter.ts @@ -52,7 +52,7 @@ export const ConverterAPICGJubeat: ConverterFunction = const song = await FindSongOnID("jubeat", chart.songID); if (!song) { - logger.severe(`Song-Chart desync with song ID ${chart.songID} (jubeat).`); + log.error(`Song-Chart desync with song ID ${chart.songID} (jubeat).`); throw new InternalFailure(`Song-Chart desync with song ID ${chart.songID} (jubeat).`); } diff --git a/typescript/server/src/lib/score-import/import-types/common/api-cg/museca/converter.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-cg/museca/converter.test.ts index 40a2c6e10..b7476e401 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-cg/museca/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-cg/museca/converter.test.ts @@ -1,6 +1,6 @@ import type { DryScore } from "#lib/score-import/framework/common/types"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ParseDateFromString } from "#lib/score-import/framework/common/score-utils"; import { dmf } from "#test-utils/misc"; import t from "tap"; @@ -9,8 +9,6 @@ import type { CGContext, CGMusecaScore } from "../types"; import { ConverterAPICGMuseca } from "./converter"; -const logger = CreateLogCtx(__filename); - function mkInput(modifant: Partial = {}) { const validInput: CGMusecaScore = { internalId: 1, diff --git a/typescript/server/src/lib/score-import/import-types/common/api-cg/museca/converter.ts b/typescript/server/src/lib/score-import/import-types/common/api-cg/museca/converter.ts index 6aa857441..c1bb0b240 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-cg/museca/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-cg/museca/converter.ts @@ -44,7 +44,7 @@ export const ConverterAPICGMuseca: ConverterFunction = const song = await FindSongOnID("museca", chart.songID); if (!song) { - logger.severe(`Song-Chart desync with song ID ${chart.songID} (museca).`); + log.error(`Song-Chart desync with song ID ${chart.songID} (museca).`); throw new InternalFailure(`Song-Chart desync with song ID ${chart.songID} (museca).`); } diff --git a/typescript/server/src/lib/score-import/import-types/common/api-cg/parsers.ts b/typescript/server/src/lib/score-import/import-types/common/api-cg/parsers.ts index 1412e5acf..481597ef3 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-cg/parsers.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-cg/parsers.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; import db from "#services/mongo/db"; @@ -106,10 +106,7 @@ const CG_SCHEMAS: Record = { * identical, this basically just placeholders cgGame and service. */ export function CreateCGParser(cgGame: CGSupportedGames, service: CGServices) { - return async ( - userID: integer, - logger: KtLogger, - ): Promise> => { + return async (userID: integer, log: KtLogger): Promise> => { const cardInfo = await db["cg-card-info"].findOne({ userID, service, diff --git a/typescript/server/src/lib/score-import/import-types/common/api-cg/popn/converter.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-cg/popn/converter.test.ts index fa94b6b34..01d168350 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-cg/popn/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-cg/popn/converter.test.ts @@ -1,6 +1,6 @@ import type { DryScore } from "#lib/score-import/framework/common/types"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ParseDateFromString } from "#lib/score-import/framework/common/score-utils"; import { dmf } from "#test-utils/misc"; import t from "tap"; @@ -9,8 +9,6 @@ import type { CGContext, CGPopnScore } from "../types"; import { ConverterAPICGPopn } from "./converter"; -const logger = CreateLogCtx(__filename); - function mkInput(modifant: Partial = {}) { const validInput: CGPopnScore = { internalId: 0, // this is "i really wanna hurt you" diff --git a/typescript/server/src/lib/score-import/import-types/common/api-cg/popn/converter.ts b/typescript/server/src/lib/score-import/import-types/common/api-cg/popn/converter.ts index 689f4b620..a02c4731a 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-cg/popn/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-cg/popn/converter.ts @@ -50,7 +50,7 @@ export const ConverterAPICGPopn: ConverterFunction = asy const song = await FindSongOnID("popn", chart.songID); if (!song) { - logger.severe(`Song-Chart desync with song ID ${chart.songID} (popn).`); + log.error(`Song-Chart desync with song ID ${chart.songID} (popn).`); throw new InternalFailure(`Song-Chart desync with song ID ${chart.songID} (popn).`); } diff --git a/typescript/server/src/lib/score-import/import-types/common/api-cg/sdvx/converter.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-cg/sdvx/converter.test.ts index 01d0c6cc0..59c135e34 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-cg/sdvx/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-cg/sdvx/converter.test.ts @@ -1,6 +1,6 @@ import type { DryScore } from "#lib/score-import/framework/common/types"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ParseDateFromString } from "#lib/score-import/framework/common/score-utils"; import { dmf } from "#test-utils/misc"; import t from "tap"; @@ -9,8 +9,6 @@ import type { CGContext, CGSDVXScore } from "../types"; import { ConverterAPICGSDVX } from "./converter"; -const logger = CreateLogCtx(__filename); - function mkInput(modifant: Partial = {}) { const validInput: CGSDVXScore = { internalId: 1, // ALBIDA (Remix) ADV diff --git a/typescript/server/src/lib/score-import/import-types/common/api-cg/sdvx/converter.ts b/typescript/server/src/lib/score-import/import-types/common/api-cg/sdvx/converter.ts index c417e5add..591d32f9e 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-cg/sdvx/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-cg/sdvx/converter.ts @@ -39,7 +39,7 @@ export const ConverterAPICGSDVX: ConverterFunction = asy const song = await FindSongOnID("sdvx", chart.songID); if (!song) { - logger.severe(`Song-Chart desync with song ID ${chart.songID} (sdvx).`); + log.error(`Song-Chart desync with song ID ${chart.songID} (sdvx).`); throw new InternalFailure(`Song-Chart desync with song ID ${chart.songID} (sdvx).`); } diff --git a/typescript/server/src/lib/score-import/import-types/common/api-cg/traverse-api.ts b/typescript/server/src/lib/score-import/import-types/common/api-cg/traverse-api.ts index 2d80817af..ff39ea0e7 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-cg/traverse-api.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-cg/traverse-api.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; import { ServerConfig } from "#lib/setup/config"; @@ -35,7 +35,7 @@ export async function FetchCGScores( service: CGServices, cardInfo: CGCardInfo, game: CGSupportedGames, - logger: KtLogger, + log: KtLogger, fetch: NodeFetch = nodeFetch, ): Promise> { const url = GetCGUrl(service, cardInfo, game); @@ -48,13 +48,13 @@ export async function FetchCGScores( const prErr = p({ res }, { res: p.or(PR_CG_RESPONSE, PR_CG_ERR_RESPONSE) }); if (prErr) { - logger.error(`Got unexpected data from CG.`, { res }); + log.error(`Got unexpected data from CG.`, { res }); throw new Error(`Got unexpected data from CG.`); } validatedRes = res as CGErrorResponse | CGScoresResponse; } catch (err) { - logger.error(`Received invalid response from ${url}.`, { err }); + log.error(`Received invalid response from ${url}.`, { err }); throw new ScoreImportFatalError( 500, diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/class-handler.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/class-handler.test.ts index 04a85bd0a..763292fa3 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/class-handler.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/class-handler.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { MockBasicFetch, MockJSONFetch } from "#test-utils/mock-fetch"; import ResetDBState from "#test-utils/resets"; import t from "tap"; @@ -7,8 +7,6 @@ import { IIDX_DANS } from "../../../../../../../../common/src"; import { KaiTypeToBaseURL } from "../utils"; import { CreateKaiIIDXClassProvider } from "./class-handler"; -const logger = CreateLogCtx(__filename); - t.test("#CreateKaiIIDXClassProvider", async (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/class-handler.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/class-handler.ts index 3c2ec4b4f..e7ffebec5 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/class-handler.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/class-handler.ts @@ -54,12 +54,12 @@ export async function CreateKaiIIDXClassProvider( return (gptString, userID, ratings, logger) => { if (err !== undefined) { - logger.error(`An error occured while updating classes for ${baseUrl}.`, { err }); + log.error(`An error occured while updating classes for ${baseUrl}.`, { err }); return {}; } if (!IsRecord(json)) { - logger.error(`JSON Returned from server was not an object? Not updating anything.`, { + log.error(`JSON Returned from server was not an object? Not updating anything.`, { json, }); return {}; @@ -72,7 +72,7 @@ export async function CreateKaiIIDXClassProvider( } else if (gptString === "iidx:DP") { maybeIIDXDan = json.dp; } else { - logger.warn(`KAIIIDXClassUpdater called with invalid gptString of ${gptString}.`); + log.warn(`KAIIIDXClassUpdater called with invalid gptString of ${gptString}.`); return {}; } @@ -81,26 +81,26 @@ export async function CreateKaiIIDXClassProvider( maybeIIDXDan === undefined || typeof maybeIIDXDan !== "number" ) { - logger.info(`User has no ${gptString} dan. Not updating anything.`); + log.info(`User has no ${gptString} dan. Not updating anything.`); return {}; } const iidxDan: number = maybeIIDXDan; if (!Number.isInteger(iidxDan)) { - logger.warn(`${baseUrl} returned a dan of ${iidxDan}, which was not a number.`); + log.warn(`${baseUrl} returned a dan of ${iidxDan}, which was not a number.`); return {}; } if (iidxDan > IIDX_DANS.KAIDEN) { - logger.warn( + log.warn( `${baseUrl} returned a dan of ${iidxDan}, which was greater than KAIDEN (${IIDX_DANS.KAIDEN}.)`, ); return {}; } if (iidxDan < IIDX_DANS.KYU_7) { - logger.warn( + log.warn( `${baseUrl} returned a dan of ${iidxDan}, which was less than KYU_7 (${IIDX_DANS.KYU_7}.)`, ); return {}; @@ -109,9 +109,7 @@ export async function CreateKaiIIDXClassProvider( const value = IIDXDans[iidxDan]; if (!value) { - logger.warn( - `${baseUrl} returned a dan of ${iidxDan}, which has no corresponding value.`, - ); + log.warn(`${baseUrl} returned a dan of ${iidxDan}, which has no corresponding value.`); return {}; } diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/converter.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/converter.test.ts index 9451f1b53..8253b001b 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import ResetDBState from "#test-utils/resets"; import { LoadTachiIIDXData, Testing511Song, Testing511SPA } from "#test-utils/test-data"; @@ -7,8 +7,6 @@ import t from "tap"; import { ConvertAPIKaiIIDX } from "./converter"; -const logger = CreateLogCtx(__filename); - const iidxScore = { chart_id: 3848, music_id: 1000, diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/converter.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/converter.ts index 0b501cda6..1ad44af25 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/converter.ts @@ -247,7 +247,7 @@ export const ConvertAPIKaiIIDX: ConverterFunction = async ( const song = await FindSongOnID("iidx", chart.songID); if (!song) { - logger.severe(`Song-Chart desync with song ID ${chart.songID} (iidx).`); + log.error(`Song-Chart desync with song ID ${chart.songID} (iidx).`); throw new InternalFailure(`Song-Chart desync with song ID ${chart.songID} (iidx).`); } diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/parser.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/parser.test.ts index 5c6461c06..a899596d7 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/parser.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { MockJSONFetch } from "#test-utils/mock-fetch"; import ResetDBState from "#test-utils/resets"; import t from "tap"; @@ -12,8 +12,6 @@ const fakeAuth = { token: "bar", }; -const logger = CreateLogCtx(__filename); - const NO_REAUTH = () => Promise.resolve(""); t.test("#ParseKaiIIDX", (t) => { diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/parser.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/parser.ts index 9d35a2360..a93862580 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/iidx/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import nodeFetch from "#utils/fetch"; @@ -14,7 +14,7 @@ import { CreateKaiIIDXClassProvider } from "./class-handler"; export async function ParseKaiIIDX( service: "EAG" | "FLO", authDoc: KaiAuthDocument, - logger: KtLogger, + log: KtLogger, fetch = nodeFetch, reauthFn: (() => Promise) | null = null, ): Promise> { diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/reauth.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/reauth.test.ts index 8b8119262..c99aad923 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/reauth.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/reauth.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ServerConfig } from "#lib/setup/config"; import db from "#services/mongo/db"; import { MockJSONFetch } from "#test-utils/mock-fetch"; @@ -10,8 +10,6 @@ import type { KaiAuthDocument } from "../../../../../../../common/src"; import { CreateKaiReauthFunction } from "./reauth"; -const logger = CreateLogCtx(__filename); - const authDoc: KaiAuthDocument = { refreshToken: "REFRESH_TOKEN", service: "FLO", diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/reauth.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/reauth.ts index df587aec5..0856fdb6b 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/reauth.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/reauth.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; import { ServerConfig } from "#lib/setup/config"; @@ -18,14 +18,14 @@ const REAUTH_SCHEMA = { export function CreateKaiReauthFunction( kaiType: "EAG" | "FLO" | "MIN", authDoc: KaiAuthDocument, - logger: KtLogger, + log: KtLogger, fetch = nodeFetch, ) { const maybeCredentials = GetKaiTypeClientCredentials(kaiType); /* istanbul ignore next */ if (!maybeCredentials) { - logger.error( + log.error( `No CLIENT_ID or CLIENT_SECRET was configured for ${kaiType}. Cannot create reauth function.`, ); throw new ScoreImportFatalError( @@ -53,7 +53,7 @@ export function CreateKaiReauthFunction( headers: { "Content-Type": "application/x-www-form-urlencoded" }, }); } catch (err) { - logger.error(`Unexpected error while fetching reauth?`, { res, err }); + log.error(`Unexpected error while fetching reauth?`, { res, err }); throw new ScoreImportFatalError( 500, "An error has occured while attempting reauthentication.", @@ -74,7 +74,7 @@ export function CreateKaiReauthFunction( ); } - logger.error(`Unexpected ${res.status} error while fetching reauth?`, { res, text }); + log.error(`Unexpected ${res.status} error while fetching reauth?`, { res, text }); throw new ScoreImportFatalError( 500, "An error has occured while attempting reauthentication.", @@ -87,7 +87,7 @@ export function CreateKaiReauthFunction( try { json = (await res.json()) as unknown; } catch (err) { - logger.error(`Invalid JSON body in successful reauth response.`, { res, err }); + log.error(`Invalid JSON body in successful reauth response.`, { res, err }); throw new ScoreImportFatalError( 500, "An error has occured while attempting reauthentication.", @@ -97,7 +97,7 @@ export function CreateKaiReauthFunction( const err = p(json, REAUTH_SCHEMA, {}, { allowExcessKeys: true, throwOnNonObject: false }); if (err) { - logger.error(`Invalid JSON body in successful reauth response.`, { err, json }); + log.error(`Invalid JSON body in successful reauth response.`, { err, json }); throw new ScoreImportFatalError( 500, "An error has occured while attempting reauthentication.", diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/class-handler.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/class-handler.test.ts index c1013a385..17c10cd9d 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/class-handler.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/class-handler.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { MockBasicFetch, MockJSONFetch } from "#test-utils/mock-fetch"; import ResetDBState from "#test-utils/resets"; import t from "tap"; @@ -7,8 +7,6 @@ import { SDVX_DANS } from "../../../../../../../../common/src"; import { KaiTypeToBaseURL } from "../utils"; import { CreateKaiSDVXClassProvider } from "./class-handler"; -const logger = CreateLogCtx(__filename); - t.test("#CreateKaiSDVXClassProvider", async (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/class-handler.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/class-handler.ts index 048635ad9..2c386fb01 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/class-handler.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/class-handler.ts @@ -45,17 +45,17 @@ export async function CreateKaiSDVXClassProvider( } return (gptString, userID, ratings, logger) => { - logger.info(`Got return from ${baseUrl}/api/sdvx/v1/player_profile.`, { + log.info(`Got return from ${baseUrl}/api/sdvx/v1/player_profile.`, { json, }); if (err !== undefined) { - logger.error(`An error occured while updating classes for ${baseUrl}.`, { err }); + log.error(`An error occured while updating classes for ${baseUrl}.`, { err }); return {}; } if (!IsRecord(json)) { - logger.error(`JSON Returned from server was not an object? Not updating anything.`, { + log.error(`JSON Returned from server was not an object? Not updating anything.`, { json, }); return {}; @@ -66,7 +66,7 @@ export async function CreateKaiSDVXClassProvider( json.skill_level === undefined || typeof json.skill_level !== "number" ) { - logger.info(`User has no/invalid skill_level. Not updating anything.`, { + log.info(`User has no/invalid skill_level. Not updating anything.`, { skillLevel: json.skill_level, }); return {}; @@ -75,12 +75,12 @@ export async function CreateKaiSDVXClassProvider( const sdvxDan: number | null = json.skill_level - 1; if (!Number.isInteger(sdvxDan)) { - logger.warn(`${baseUrl} returned a dan of ${sdvxDan}, which was not an integer.`); + log.warn(`${baseUrl} returned a dan of ${sdvxDan}, which was not an integer.`); return {}; } if (sdvxDan > SDVX_DANS.INF) { - logger.warn( + log.warn( `${baseUrl} returned a dan of ${sdvxDan}, which was greater than INF (${SDVX_DANS.INF}.)`, ); return {}; @@ -93,7 +93,7 @@ export async function CreateKaiSDVXClassProvider( } if (sdvxDan < SDVX_DANS.DAN_1) { - logger.warn( + log.warn( `${baseUrl} returned a dan of ${sdvxDan}, which was less than DAN_1 (${SDVX_DANS.DAN_1}.)`, ); return {}; @@ -102,9 +102,7 @@ export async function CreateKaiSDVXClassProvider( const value = SDVXDans[sdvxDan]; if (!value) { - logger.warn( - `${baseUrl} returned a dan of ${sdvxDan}, which has no corresponding value.`, - ); + log.warn(`${baseUrl} returned a dan of ${sdvxDan}, which has no corresponding value.`); return {}; } diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/converter.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/converter.test.ts index ac5a7a932..9f58fba92 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import ResetDBState from "#test-utils/resets"; import { TestingAlbidaADV, TestingSDVXAlbidaSong } from "#test-utils/test-data"; @@ -7,8 +7,6 @@ import t from "tap"; import { ConvertAPIKaiSDVX, ConvertDifficulty, ConvertVersion, ResolveKaiLamp } from "./converter"; -const logger = CreateLogCtx(__filename); - const sdvxScore = { sdvx_id: 32157055, music_id: 1, diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/converter.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/converter.ts index 0cbac5061..52fa88582 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/converter.ts @@ -64,7 +64,7 @@ export const ConvertAPIKaiSDVX: ConverterFunction = async ( const song = await FindSongOnID("sdvx", chart.songID); if (!song) { - logger.severe(`Song-Chart desync with song ID ${chart.songID} (sdvx).`); + log.error(`Song-Chart desync with song ID ${chart.songID} (sdvx).`); throw new InternalFailure(`Song-Chart desync with song ID ${chart.songID} (sdvx).`); } diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/parser.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/parser.test.ts index 97025b60f..3d7c28b1d 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/parser.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { MockJSONFetch } from "#test-utils/mock-fetch"; import ResetDBState from "#test-utils/resets"; import t from "tap"; @@ -12,8 +12,6 @@ const fakeAuth = { token: "bar", }; -const logger = CreateLogCtx(__filename); - const NO_REAUTH = () => Promise.resolve(""); t.test("#ParseKaiSDVX", (t) => { diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/parser.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/parser.ts index 4100b73e6..ae9fc25e5 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/sdvx/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import nodeFetch from "#utils/fetch"; @@ -14,7 +14,7 @@ import { CreateKaiSDVXClassProvider } from "./class-handler"; export async function ParseKaiSDVX( service: "EAG" | "FLO" | "MIN", authDoc: KaiAuthDocument, - logger: KtLogger, + log: KtLogger, fetch = nodeFetch, reauthFn: KaiAPIReauthFunction | null = null, ): Promise> { diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/traverse-api.test.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/traverse-api.test.ts index f4a7ff44f..6fd50d9f7 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/traverse-api.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/traverse-api.test.ts @@ -1,6 +1,6 @@ import type { NodeFetch } from "#utils/fetch"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { agta } from "#test-utils/misc"; import { MockBasicFetch, MockJSONFetch } from "#test-utils/mock-fetch"; import ResetDBState from "#test-utils/resets"; @@ -9,8 +9,6 @@ import t from "tap"; import ScoreImportFatalError from "../../../framework/score-importing/score-import-error"; import { TraverseKaiAPI } from "./traverse-api"; -const logger = CreateLogCtx(__filename); - const fakeAuth = "bar"; t.test("#TraverseKaiAPI", (t) => { diff --git a/typescript/server/src/lib/score-import/import-types/common/api-kai/traverse-api.ts b/typescript/server/src/lib/score-import/import-types/common/api-kai/traverse-api.ts index 824b43259..2281e6d37 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-kai/traverse-api.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-kai/traverse-api.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { VERSION_STR } from "#lib/constants/version"; import { TachiConfig } from "#lib/setup/config"; @@ -43,7 +43,7 @@ export async function* TraverseKaiAPI( baseUrl: string, subUrl: string, token: string, - logger: KtLogger, + log: KtLogger, reauthFunction: KaiAPIReauthFunction | null = null, fetch = nodeFetch, ) { @@ -60,7 +60,7 @@ export async function* TraverseKaiAPI( const origin = new URL(url).origin; if (origin !== baseUrl) { - logger.severe(`${baseUrl} attempted SSRF with url ${url}?`); + log.error(`${baseUrl} attempted SSRF with url ${url}?`); throw new ScoreImportFatalError(500, `${baseUrl} returned invalid data.`); } @@ -81,7 +81,7 @@ export async function* TraverseKaiAPI( }, }); } catch (err) { - logger.error(`Received invalid response from ${url}.`, { err }); + log.error(`Received invalid response from ${url}.`, { err }); throw new ScoreImportFatalError( 500, `Received invalid response from their API. Are they down?`, @@ -124,7 +124,7 @@ export async function* TraverseKaiAPI( json = JSON.parse(text) as unknown; } catch (err) { - logger.error( + log.error( `Received invalid (non-json) response from ${url}. Status code was ${res.status}.`, { err, text }, ); @@ -135,7 +135,7 @@ export async function* TraverseKaiAPI( } if (!IsRecord(json)) { - logger.error(`Received invalid (non-object, but json) response from ${url}.`, { json }); + log.error(`Received invalid (non-object, but json) response from ${url}.`, { json }); throw new ScoreImportFatalError( 500, `Received invalid response from their API. Are they down?`, @@ -143,7 +143,7 @@ export async function* TraverseKaiAPI( } if (!IsRecord(json._links)) { - logger.error(`Received invalid JSON from ${url}. Invalid _links.`, { body: json }); + log.error(`Received invalid JSON from ${url}. Invalid _links.`, { body: json }); throw new ScoreImportFatalError( 500, @@ -154,7 +154,7 @@ export async function* TraverseKaiAPI( currentIteration++; if (currentIteration > MAX_ITERATIONS) { - logger.error( + log.error( `An infinite loop has occured - Terminating at MAX_ITERATIONS (${MAX_ITERATIONS}).`, ); throw new ScoreImportFatalError( @@ -169,7 +169,7 @@ export async function* TraverseKaiAPI( // exit the loop after this, we're on the last page. fetchMoreData = false; } else { - logger.error(`Received invalid response from ${url}. Invalid _links._next.`, { + log.error(`Received invalid response from ${url}. Invalid _links._next.`, { body: json, }); @@ -180,7 +180,7 @@ export async function* TraverseKaiAPI( } if (!Array.isArray(json._items)) { - logger.error(`Received invalid response from ${url}. Invalid _items.`, { + log.error(`Received invalid response from ${url}. Invalid _items.`, { body: json, }); diff --git a/typescript/server/src/lib/score-import/import-types/common/api-myt/traverse-api.ts b/typescript/server/src/lib/score-import/import-types/common/api-myt/traverse-api.ts index 9177c1eae..a041af783 100644 --- a/typescript/server/src/lib/score-import/import-types/common/api-myt/traverse-api.ts +++ b/typescript/server/src/lib/score-import/import-types/common/api-myt/traverse-api.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; import { ServerConfig } from "#lib/setup/config"; @@ -85,7 +85,7 @@ export async function* StreamRPCAsAsync( options: CallOptions, ) => ClientReadableStream, argument: TIn, - logger: KtLogger, + log: KtLogger, ): AsyncIterable { try { const stream = streamingCall( @@ -114,7 +114,7 @@ export async function* StreamRPCAsAsync( throw fixedErr; } } catch (err) { - logger.error(`Error while streaming score data from MYT: ${err}`); + log.error(`Error while streaming score data from MYT: ${err}`); // Avoid rethrowing the error as it may reveal things like the upstream // server IP address. @@ -136,7 +136,7 @@ function errIsServiceError(err: Error): err is ServiceError { export async function FetchMytTitleAPIID( userID: integer, game: GameGroup, - logger: KtLogger, + log: KtLogger, ): Promise { const mytGame = GameToMytGame(game); @@ -175,7 +175,7 @@ export async function FetchMytTitleAPIID( throw new ScoreImportFatalError(401, `Card not found on MYT: ${err.details}`); } - logger.error(`Received unexpected status from ${hostname}`, { + log.error(`Received unexpected status from ${hostname}`, { err, code: err.code, details: err.details, @@ -184,7 +184,7 @@ export async function FetchMytTitleAPIID( throw new ScoreImportFatalError(500, `Unexpected response from MYT - ${err.code}`); } - logger.error(`Received invalid response`, { err }); + log.error(`Received invalid response`, { err }); throw new ScoreImportFatalError(500, `Failed to look up card at MYT. Are they down?`); } diff --git a/typescript/server/src/lib/score-import/import-types/common/batch-manual/class-handler.ts b/typescript/server/src/lib/score-import/import-types/common/batch-manual/class-handler.ts index f8a528a24..d27e099bc 100644 --- a/typescript/server/src/lib/score-import/import-types/common/batch-manual/class-handler.ts +++ b/typescript/server/src/lib/score-import/import-types/common/batch-manual/class-handler.ts @@ -29,7 +29,7 @@ export function CreateBatchManualClassProvider( const index = ClassToIndex(gptString, set, classID); if (index === null) { - logger.warn( + log.warn( `User passed invalid class of ${classID} for set ${set}. Expected any of ${gptConfig.classes[ set ]!.values.map((e) => e.id).join(", ")}`, diff --git a/typescript/server/src/lib/score-import/import-types/common/batch-manual/converter.test.ts b/typescript/server/src/lib/score-import/import-types/common/batch-manual/converter.test.ts index 2701bb975..4b26adb39 100644 --- a/typescript/server/src/lib/score-import/import-types/common/batch-manual/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/batch-manual/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { InvalidScoreFailure } from "#lib/score-import/framework/common/converter-failures"; import db from "#services/mongo/db"; import { dmf } from "#test-utils/misc"; @@ -42,8 +42,6 @@ const context = { version: null, }; -const logger = CreateLogCtx(__filename); - const importType = "file/batch-manual" as const; const baseResolver: MatchTypeResolver = BatchManualScoreToResolver(baseBatchManualScore, context); diff --git a/typescript/server/src/lib/score-import/import-types/common/batch-manual/converter.ts b/typescript/server/src/lib/score-import/import-types/common/batch-manual/converter.ts index 2a421635d..b7c21a52b 100644 --- a/typescript/server/src/lib/score-import/import-types/common/batch-manual/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/common/batch-manual/converter.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; import db from "#services/mongo/db"; @@ -136,7 +136,7 @@ export const ConverterBatchManual: ConverterFunction { const { game, playtype } = resolver; @@ -178,7 +178,7 @@ export async function ResolveSongAndChart( const song = await FindSongOnID(game, chart.songID); if (!song) { - logger.severe(`BMS songID ${chart.songID} has charts but no parent song.`); + log.error(`BMS songID ${chart.songID} has charts but no parent song.`); throw new InternalFailure( `BMS songID ${chart.songID} has charts but no parent song.`, ); @@ -197,7 +197,7 @@ export async function ResolveSongAndChart( const song = await FindSongOnID(game, chart.songID); if (!song) { - logger.severe(`ITG songID ${chart.songID} has charts but no parent song.`); + log.error(`ITG songID ${chart.songID} has charts but no parent song.`); throw new InternalFailure( `ITG songID ${chart.songID} has charts but no parent song.`, ); @@ -223,7 +223,7 @@ export async function ResolveSongAndChart( const song = await FindSongOnID(game, chart.songID); if (!song) { - logger.severe(`Pop'n songID ${chart.songID} has charts but no parent song.`); + log.error(`Pop'n songID ${chart.songID} has charts but no parent song.`); throw new InternalFailure( `Pop'n songID ${chart.songID} has charts but no parent song.`, ); @@ -281,10 +281,9 @@ export async function ResolveSongAndChart( const config = GetGamePTConfig("sdvx", "Single"); if (config.difficulties.type === "DYNAMIC") { - logger.error( - `SDVX has 'DYNAMIC' difficulties set. This is completely unexpected.`, - { config }, - ); + log.error(`SDVX has 'DYNAMIC' difficulties set. This is completely unexpected.`, { + config, + }); throw new ScoreImportFatalError( 500, `SDVX has 'DYNAMIC' difficulties set. This is completely unexpected.`, @@ -329,7 +328,7 @@ export async function ResolveSongAndChart( const song = await db.anySongs[game].findOne({ id: chart.songID }); if (!song) { - logger.severe(`Song-Chart desync on ${chart.songID}.`); + log.error(`Song-Chart desync on ${chart.songID}.`); throw new InternalFailure(`Failed to get song for a chart that exists.`); } @@ -366,7 +365,7 @@ export async function ResolveSongAndChart( const song = await db.anySongs[game].findOne({ id: chart.songID }); if (!song) { - logger.severe(`Song-Chart desync on ${chart.songID}.`); + log.error(`Song-Chart desync on ${chart.songID}.`); throw new InternalFailure(`Failed to get song for a chart that exists.`); } @@ -401,7 +400,7 @@ export async function ResolveSongAndChart( const song = await db.anySongs[game].findOne({ id: chart.songID }); if (!song) { - logger.severe(`Song-Chart desync on ${chart.songID}.`); + log.error(`Song-Chart desync on ${chart.songID}.`); throw new InternalFailure(`Failed to get song for a chart that exists.`); } @@ -429,7 +428,7 @@ export async function ResolveSongAndChart( const song = await db.anySongs[game].findOne({ id: chart.songID }); if (!song) { - logger.severe(`Song-Chart desync on ${chart.songID}.`); + log.error(`Song-Chart desync on ${chart.songID}.`); throw new InternalFailure(`Failed to get song for a chart that exists.`); } @@ -457,7 +456,7 @@ export async function ResolveSongAndChart( }); if (!chartSync) { - logger.severe(`Song-Chart desync on ${song.id}.`); + log.error(`Song-Chart desync on ${song.id}.`); throw new InternalFailure(`Failed to get chart for a song that exists.`); } @@ -489,7 +488,7 @@ export async function ResolveSongAndChart( default: { const { matchType } = resolver; - logger.error( + log.error( `Invalid matchType ${matchType} ended up in conversion - should have been rejected by prudence?`, ); diff --git a/typescript/server/src/lib/score-import/import-types/common/batch-manual/parser.test.ts b/typescript/server/src/lib/score-import/import-types/common/batch-manual/parser.test.ts index 1dfc83a7a..835ec4f0b 100644 --- a/typescript/server/src/lib/score-import/import-types/common/batch-manual/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/batch-manual/parser.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { EscapeStringRegexp } from "#utils/misc"; import deepmerge from "deepmerge"; import t from "tap"; @@ -15,8 +15,6 @@ const mockErr = (...msg: Array) => name: "Error", }) as unknown as ScoreImportFatalError; -const logger = CreateLogCtx(__filename); - const baseBatchManual = { scores: [], meta: { service: "foo", game: "iidx", playtype: "SP" }, diff --git a/typescript/server/src/lib/score-import/import-types/common/batch-manual/parser.ts b/typescript/server/src/lib/score-import/import-types/common/batch-manual/parser.ts index 07f472c2c..f02a2a778 100644 --- a/typescript/server/src/lib/score-import/import-types/common/batch-manual/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/common/batch-manual/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { TachiConfig } from "#lib/setup/config"; import { IsRecord, IsValidGame, IsValidPlaytype } from "#utils/misc"; @@ -30,7 +30,7 @@ export function ParseBatchManualFromObject( object: unknown, importType: ImportTypes, inferTimestamp: boolean, - _logger: KtLogger, + _log: KtLogger, ): ParserFunctionReturns { // now to perform some basic validation so we can return // the iterable diff --git a/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/converter.ts b/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/converter.ts index c6fdd0255..96cbbe064 100644 --- a/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/converter.ts @@ -125,7 +125,7 @@ const ConvertEamIIDXCSV: ConverterFunction< const lamp = EAMUSEMENT_LAMP_RESOLVER.get(eamScore.lamp); if (!lamp) { - logger.info(`Invalid lamp of ${eamScore.lamp} provided.`); + log.info(`Invalid lamp of ${eamScore.lamp} provided.`); throw new InvalidScoreFailure( `${HUMANISED_CHART_TITLE} - Invalid Lamp of ${eamScore.lamp}.`, ); @@ -164,11 +164,11 @@ const ConvertEamIIDXCSV: ConverterFunction< dryScore.scoreData.optional.bp = numBP; } else if (eamScore.bp === "---") { - logger.debug( + log.debug( `Skipped assigning BP for score as it had expected null value of ${eamScore.bp}.`, ); } else { - logger.info(`Skipped assigning BP for score. Had unexpected value of ${eamScore.bp}.`); + log.info(`Skipped assigning BP for score. Had unexpected value of ${eamScore.bp}.`); } return { chart: tachiChart, dryScore, song: tachiSong }; diff --git a/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.test.ts b/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.test.ts index 11ceb9782..dcad3a711 100644 --- a/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { MockMulterFile } from "#test-utils/mock-multer"; import { TestingIIDXEamusementCSV26, TestingIIDXEamusementCSV27 } from "#test-utils/test-data"; import t from "tap"; @@ -6,8 +6,6 @@ import t from "tap"; import ScoreImportFatalError from "../../../framework/score-importing/score-import-error"; import GenericParseEamIIDXCSV, { IIDXCSVParse, ResolveHeaders } from "./parser"; -const logger = CreateLogCtx(__filename); - t.test("#ParseEamusementCSV", (t) => { t.test("Valid Rootage-Type CSV", (t) => { const { iterableData, hasBeginnerAndLegg, version } = IIDXCSVParse( diff --git a/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.ts b/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.ts index 5e5046e86..e7db06df8 100644 --- a/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { StringIsGameVersion } from "#utils/misc"; import { CSVParseError, NaiveCSVParse } from "#utils/naive-csv-parser"; @@ -87,27 +87,27 @@ const HV_HEADER_COUNT = 41; // "timestamp", // ]; -export function ResolveHeaders(headers: Array, logger: KtLogger) { +export function ResolveHeaders(headers: Array, log: KtLogger) { if (headers.length === PRE_HV_HEADER_COUNT) { - logger.verbose("PRE_HV csv received."); + log.verbose("PRE_HV csv received."); return { hasBeginnerAndLegg: false, }; } else if (headers.length === HV_HEADER_COUNT) { - logger.verbose("HV+ csv received."); + log.verbose("HV+ csv received."); return { hasBeginnerAndLegg: true, }; } - logger.info(`Invalid CSV header count of ${headers.length} received.`); + log.info(`Invalid CSV header count of ${headers.length} received.`); throw new ScoreImportFatalError( 400, "Invalid CSV provided. CSV does not have the correct amount of headers.", ); } -export function IIDXCSVParse(csvBuffer: Buffer, playtype: Playtypes["iidx"], logger: KtLogger) { +export function IIDXCSVParse(csvBuffer: Buffer, playtype: Playtypes["iidx"], log: KtLogger) { let rawHeaders: Array; let rawRows: Array>; @@ -141,7 +141,7 @@ export function IIDXCSVParse(csvBuffer: Buffer, playtype: Playtypes["iidx"], log const versionNum = EAM_VERSION_NAMES[version] as number | undefined; if (versionNum === undefined) { - logger.info(`Invalid/Unsupported EAM_VERSION_NAME ${version}.`); + log.info(`Invalid/Unsupported EAM_VERSION_NAME ${version}.`); throw new ScoreImportFatalError( 400, `Invalid/Unsupported Eamusement Version Name ${version}.`, @@ -204,7 +204,7 @@ function GenericParseEamIIDXCSV( fileData: Express.Multer.File, body: Record, service: string, - logger: KtLogger, + log: KtLogger, ): ParserFunctionReturns { let playtype: "DP" | "SP"; @@ -213,7 +213,7 @@ function GenericParseEamIIDXCSV( } else if (body.playtype === "DP") { playtype = "DP"; } else { - logger.info(`Invalid playtype of ${body.playtype} passed to ParseEamusementCSV.`); + log.info(`Invalid playtype of ${body.playtype} passed to ParseEamusementCSV.`); throw new ScoreImportFatalError(400, `Invalid playtype of ${body.playtype} given.`); } @@ -224,7 +224,7 @@ function GenericParseEamIIDXCSV( ((lowercaseFilename.includes("sp") && playtype === "DP") || (lowercaseFilename.includes("dp") && playtype === "SP")) ) { - logger.info( + log.info( `File was uploaded with filename ${fileData.originalname}, but this was set as a ${playtype} import. Sanity check refusing.`, ); @@ -242,7 +242,7 @@ function GenericParseEamIIDXCSV( logger, ); - logger.verbose("Successfully parsed CSV."); + log.verbose("Successfully parsed CSV."); const context: IIDXEamusementCSVContext = { playtype, @@ -251,7 +251,7 @@ function GenericParseEamIIDXCSV( service, }; - logger.verbose(`Successfully Parsed with ${iterableData.length} results.`); + log.verbose(`Successfully Parsed with ${iterableData.length} results.`); return { iterable: iterableData, diff --git a/typescript/server/src/lib/score-import/import-types/common/types.ts b/typescript/server/src/lib/score-import/import-types/common/types.ts index 290f99dda..918ebbeec 100644 --- a/typescript/server/src/lib/score-import/import-types/common/types.ts +++ b/typescript/server/src/lib/score-import/import-types/common/types.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { ClassProvider } from "#lib/score-import/framework/calculated-data/types"; import type { USCClientScore } from "#server/router/ir/usc/_playtype/types"; import type { EmptyObject } from "#utils/types"; @@ -153,11 +153,11 @@ export type ConverterFunction = ( data: D, processContext: C, importType: ImportTypes, - logger: KtLogger, + log: KtLogger, ) => Promise; export type ImportInputParser = ( - logger: KtLogger, + log: KtLogger, ) => ParserFunctionReturns | Promise>; export interface ParserFunctionReturns { diff --git a/typescript/server/src/lib/score-import/import-types/file/batch-manual/parser.ts b/typescript/server/src/lib/score-import/import-types/file/batch-manual/parser.ts index 774304b34..106dbefd9 100644 --- a/typescript/server/src/lib/score-import/import-types/file/batch-manual/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/file/batch-manual/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { BatchManualScore } from "../../../../../../../common/src"; import type { BatchManualContext } from "../../common/batch-manual/types"; @@ -15,7 +15,7 @@ import { ParseBatchManualFromObject } from "../../common/batch-manual/parser"; function ParseBatchManual( fileData: Express.Multer.File, body: Record, - logger: KtLogger, + log: KtLogger, ): ParserFunctionReturns { let jsonData: unknown; diff --git a/typescript/server/src/lib/score-import/import-types/file/eamusement-iidx-csv/parser.ts b/typescript/server/src/lib/score-import/import-types/file/eamusement-iidx-csv/parser.ts index 6467eca94..9797f7f66 100644 --- a/typescript/server/src/lib/score-import/import-types/file/eamusement-iidx-csv/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/file/eamusement-iidx-csv/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { IIDXEamusementCSVContext, @@ -11,7 +11,7 @@ import GenericParseEamIIDXCSV from "../../common/eamusement-iidx-csv/parser"; function ParseEamusementIIDXCSV( fileData: Express.Multer.File, body: Record, - logger: KtLogger, + log: KtLogger, ): ParserFunctionReturns { return GenericParseEamIIDXCSV(fileData, body, "e-amusement", logger); } diff --git a/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/converter.test.ts b/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/converter.test.ts index a04532049..02f546a24 100644 --- a/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ResetDBState from "#test-utils/resets"; import { GetKTDataJSON, TestingAlbidaADV, TestingSDVXAlbidaSong } from "#test-utils/test-data"; import deepmerge from "deepmerge"; @@ -8,8 +8,6 @@ import type { SDVXEamusementCSVData } from "./types"; import ConvertEamSDVXCSV from "./converter"; -const logger = CreateLogCtx(__filename); - const parsedScore = { title: "ALBIDA Powerless Mix", difficulty: "ADVANCED", diff --git a/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/converter.ts b/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/converter.ts index ba7957298..f52502a74 100644 --- a/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/converter.ts @@ -55,7 +55,7 @@ const ConvertEamSDVXCSV: ConverterFunction = const difficulty = DIFFICULTY_MAP.get(data.difficulty); if (!difficulty) { - logger.info(`Invalid difficulty of ${data.difficulty} provided.`); + log.info(`Invalid difficulty of ${data.difficulty} provided.`); throw new InvalidScoreFailure(`${data.title} - Invalid difficulty of ${data.difficulty}.`); } @@ -104,7 +104,7 @@ const ConvertEamSDVXCSV: ConverterFunction = const lamp = LAMP_MAP.get(data.lamp); if (!lamp) { - logger.info(`Invalid lamp of ${data.lamp} provided.`); + log.info(`Invalid lamp of ${data.lamp} provided.`); throw new InvalidScoreFailure(`${humanisedChartTitle} - Invalid lamp of ${data.lamp}.`); } @@ -127,9 +127,7 @@ const ConvertEamSDVXCSV: ConverterFunction = }, }; - logger.verbose( - `Returning dryscore with ${dryScore.scoreData.score} for ${humanisedChartTitle}`, - ); + log.verbose(`Returning dryscore with ${dryScore.scoreData.score} for ${humanisedChartTitle}`); return { chart, song, dryScore }; }; diff --git a/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.test.ts b/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.test.ts index 24691a9a7..4313c4a04 100644 --- a/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; import { MockMulterFile } from "#test-utils/mock-multer"; import { TestingSDVXEamusementCSV } from "#test-utils/test-data"; @@ -8,8 +8,6 @@ import type { SDVXEamusementCSVData } from "./types"; import ParseEamusementSDVXCSV from "./parser"; -const logger = CreateLogCtx(__filename); - t.test("#ParseEamusementSDVXCSV", (t) => { t.test("Valid CSV", (t) => { const file = MockMulterFile(TestingSDVXEamusementCSV, "score.csv"); diff --git a/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.ts b/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.ts index 7c7c3f32e..fc14b23d5 100644 --- a/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { EmptyObject } from "#utils/types"; import { CSVParseError, NaiveCSVParse } from "#utils/naive-csv-parser"; @@ -28,7 +28,7 @@ type SDVXCSVRow = [ export default function ParseEamusementSDVXCSV( fileData: Express.Multer.File, _body: Record, - logger: KtLogger, + log: KtLogger, ): ParserFunctionReturns { let rawHeaders: Array; let rawRows: Array>; @@ -45,7 +45,7 @@ export default function ParseEamusementSDVXCSV( } if (rawHeaders.length !== HEADER_COUNT) { - logger.info(`Invalid CSV header count of ${rawHeaders.length} received.`); + log.info(`Invalid CSV header count of ${rawHeaders.length} received.`); throw new ScoreImportFatalError( 400, "Invalid CSV provided. CSV does not have the correct number of headers.", diff --git a/typescript/server/src/lib/score-import/import-types/file/pli-iidx-csv/parser.ts b/typescript/server/src/lib/score-import/import-types/file/pli-iidx-csv/parser.ts index ca429c94b..ff008c64b 100644 --- a/typescript/server/src/lib/score-import/import-types/file/pli-iidx-csv/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/file/pli-iidx-csv/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { IIDXEamusementCSVContext, @@ -11,7 +11,7 @@ import GenericParseEamIIDXCSV from "../../common/eamusement-iidx-csv/parser"; function ParsePLIIIDXCSV( fileData: Express.Multer.File, body: Record, - logger: KtLogger, + log: KtLogger, ): ParserFunctionReturns { return GenericParseEamIIDXCSV(fileData, body, "PLI", logger); } diff --git a/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/converter.test.ts b/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/converter.test.ts index 20f442d6d..f9fc7ef29 100644 --- a/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ResetDBState from "#test-utils/resets"; import { LoadTachiIIDXData, @@ -13,8 +13,6 @@ import type { S3Score } from "./types"; import { ConvertFileS3, ParseDifficulty, ResolveS3Lamp } from "./converter"; -const logger = CreateLogCtx(__filename); - function cfile(data: S3Score) { return ConvertFileS3(data, {}, "file/solid-state-squad", logger); } diff --git a/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts b/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts index 5a024a4ae..f144697b7 100644 --- a/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { MockMulterFile } from "#test-utils/mock-multer"; import ResetDBState from "#test-utils/resets"; import { GetKTDataBuffer } from "#test-utils/test-data"; @@ -6,8 +6,6 @@ import t from "tap"; import { ParseSolidStateXML } from "./parser"; -const logger = CreateLogCtx(__filename); - t.test("#ParseSolidStateXML", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/parser.ts b/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/parser.ts index fb825c35d..6b9c578f9 100644 --- a/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/file/solid-state-squad/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { EmptyObject } from "#utils/types"; import { FormatPrError } from "#utils/prudence"; @@ -73,7 +73,7 @@ type PreStringifiedS3Score = { songname: number | string } & Omit, - logger: KtLogger, + log: KtLogger, ): ParserFunctionReturns { let parsedXML; @@ -83,7 +83,7 @@ export function ParseSolidStateXML( parsedXML = xmlParser.parse(fileData.buffer.toString("utf-8")); } catch (err) { - logger.info("S3 XML Parse Error", err); + log.info("S3 XML Parse Error", err); throw new ScoreImportFatalError(400, "Could not parse XML."); } diff --git a/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/class-handler.ts b/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/class-handler.ts index 082167adc..33a8ced65 100644 --- a/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/class-handler.ts +++ b/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/class-handler.ts @@ -50,7 +50,7 @@ export function CreateMyPageScraperClassProvider(stage: MyPagePlayerStage): Clas } if (`ステージ${stageName}` !== stage.name) { - logger.warn( + log.warn( `Stage up ${stageName} with id ${stage.id} did not correspond to the CSV name ${stage.name}.`, ); } diff --git a/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/converter.test.ts b/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/converter.test.ts index 0b45681be..2ddb21b1b 100644 --- a/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ResetDBState from "#test-utils/resets"; import { TestingWaccaPupaExp, TestingWaccaPupaSong } from "#test-utils/test-data"; import deepmerge from "deepmerge"; @@ -8,8 +8,6 @@ import type { MyPageRecordsParsedPB } from "./types"; import ConvertMyPageScraperRecordsCSV from "./converter"; -const logger = CreateLogCtx(__filename); - const parsedScore: MyPageRecordsParsedPB = { // 2085,PUPA,モリモリあつし,4,"[4,8,13+,0]","[0,0,12]","[0,0,996827]","[0,0,2]" songId: 2085, diff --git a/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/converter.ts b/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/converter.ts index 638848198..11ba9239e 100644 --- a/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/converter.ts @@ -69,7 +69,7 @@ const ConvertMyPageScraperRecordsCSV: ConverterFunction< const lamp = LAMPS[data.lamp]; if (lamp === undefined) { - logger.info(`Invalid lamp of ${data.lamp} provided.`); + log.info(`Invalid lamp of ${data.lamp} provided.`); throw new InvalidScoreFailure(`${humanisedChartTitle} - Invalid lamp of ${data.lamp}.`); } diff --git a/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/parser.test.ts b/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/parser.test.ts index b72d5c8a4..1d2c7205e 100644 --- a/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/parser.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; import { MockMulterFile } from "#test-utils/mock-multer"; import { TestingWaccaMyPageScraperRecordsCSV } from "#test-utils/test-data"; @@ -9,8 +9,6 @@ import type { MyPageRecordsParsedPB } from "./types"; import { WACCA_STAGEUPS } from "../../../../../../../common/src/constants/game"; import { ParseMyPageScraperPlayerCSV, ParseMyPageScraperRecordsCSV } from "./parser"; -const logger = CreateLogCtx(__filename); - t.test("#ParseMyPageScraperRecordsCSV", (t) => { t.test("Valid CSV", (t) => { // This example file is cg505's actual records dump. diff --git a/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/parser.ts b/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/parser.ts index 503039a10..985a9b7d1 100644 --- a/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/file/wacca-mypage-scraper/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { EmptyObject } from "#utils/types"; import { CsvError as CSVError, parse } from "csv-parse/sync"; @@ -49,7 +49,7 @@ function parseCSVArray(csvString: string): Array { export function ParseMyPageScraperRecordsCSV( fileData: Express.Multer.File, _body: Record, - _logger: KtLogger, + _log: KtLogger, ): ParserFunctionReturns { let rawCSVRecords: Array; @@ -119,7 +119,7 @@ export function ParseMyPageScraperRecordsCSV( export function ParseMyPageScraperPlayerCSV( fileData: Express.Multer.File, _body: Record, - _logger: KtLogger, + _log: KtLogger, ): ParserFunctionReturns { let csvRecords: Array>; diff --git a/typescript/server/src/lib/score-import/import-types/ir/barbatos/converter.test.ts b/typescript/server/src/lib/score-import/import-types/ir/barbatos/converter.test.ts index e54f685b7..214534969 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/barbatos/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/barbatos/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import ResetDBState from "#test-utils/resets"; import { MockBarbatosScore, MockBarbatosSDVX6Score } from "#test-utils/test-data"; @@ -9,8 +9,6 @@ import type { BarbatosScore } from "./types"; import { ConverterIRBarbatos } from "./converter"; -const logger = CreateLogCtx(__filename); - t.test("#ConverterIRBarbatos", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/import-types/ir/barbatos/converter.ts b/typescript/server/src/lib/score-import/import-types/ir/barbatos/converter.ts index 8c955218d..344ec7109 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/barbatos/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/barbatos/converter.ts @@ -48,7 +48,7 @@ export const ConverterIRBarbatos: ConverterFunction< const song = await FindSongOnID("sdvx", chart.songID); if (!song) { - logger.severe(`Song ${chart.songID} (sdvx) has no parent song?`); + log.error(`Song ${chart.songID} (sdvx) has no parent song?`); throw new InternalFailure(`Song ${chart.songID} (sdvx) has no parent song?`); } diff --git a/typescript/server/src/lib/score-import/import-types/ir/barbatos/parser.test.ts b/typescript/server/src/lib/score-import/import-types/ir/barbatos/parser.test.ts index 6c0dc3cab..66f7e0941 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/barbatos/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/barbatos/parser.test.ts @@ -1,12 +1,10 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ResetDBState from "#test-utils/resets"; import { MockBarbatosScore } from "#test-utils/test-data"; import t from "tap"; import { ParseBarbatosSingle } from "./parser"; -const logger = CreateLogCtx(__filename); - t.test("#ParseBarbatosSingle", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/import-types/ir/barbatos/parser.ts b/typescript/server/src/lib/score-import/import-types/ir/barbatos/parser.ts index f10c5e0ae..3d1fc2511 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/barbatos/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/barbatos/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { FormatPrError } from "#utils/prudence"; import { p } from "prudence"; @@ -59,7 +59,7 @@ const PR_BARBATOS_SDVX6 = { export function ParseBarbatosSingle( body: Record, - _logger: KtLogger, + _log: KtLogger, ): ParserFunctionReturns { // this is an extremely sketchy way of sniffing out whether it's sdvx6 or not. // We could ask barbatos to send a header, but what difference does it make? diff --git a/typescript/server/src/lib/score-import/import-types/ir/beatoraja/converter.ts b/typescript/server/src/lib/score-import/import-types/ir/beatoraja/converter.ts index 8d197ff9a..70a144365 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/beatoraja/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/beatoraja/converter.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { Mutable } from "#utils/types"; import { HandleOrphanQueue } from "#lib/orphan-queue/orphan-queue"; @@ -45,7 +45,7 @@ async function HandleOrphanChartProcess( game: "bms" | "pms", data: BeatorajaScore, context: BeatorajaContext, - logger: KtLogger, + log: KtLogger, ) { const chartName = `${context.chart.artist} (${context.chart.subartist})- ${context.chart.title} (${context.chart.subtitle})`; @@ -63,7 +63,7 @@ async function HandleOrphanChartProcess( // If you're someone forking tachi looking to remove this // check, remember to change the entire score import // framework and database to be able to handle variable notecounts. - logger.verbose(`Declined to orphan chart ${chartName} as it has #RANDOM declarations.`); + log.verbose(`Declined to orphan chart ${chartName} as it has #RANDOM declarations.`); throw new InvalidScoreFailure(`${TachiConfig.NAME} will not support #RANDOM charts.`); } @@ -195,7 +195,7 @@ export const ConverterIRBeatoraja: ConverterFunction, userID: integer, - _logger: KtLogger, + _log: KtLogger, ): ParserFunctionReturns { const err = p( body.score, diff --git a/typescript/server/src/lib/score-import/import-types/ir/direct-manual/parser.ts b/typescript/server/src/lib/score-import/import-types/ir/direct-manual/parser.ts index 9f56cb86c..89cce4a22 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/direct-manual/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/direct-manual/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { BatchManualScore } from "../../../../../../../common/src"; import type { BatchManualContext } from "../../common/batch-manual/types"; @@ -14,7 +14,7 @@ import { ParseBatchManualFromObject } from "../../common/batch-manual/parser"; function ParseDirectManual( body: Record, inferTimestamp: boolean, - logger: KtLogger, + log: KtLogger, ): ParserFunctionReturns { return ParseBatchManualFromObject(body, "ir/direct-manual", inferTimestamp, logger); } diff --git a/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.test.ts b/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.test.ts index 18d097ca2..71c1e9677 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.test.ts @@ -1,12 +1,10 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ResetDBState from "#test-utils/resets"; import t from "tap"; import { IIDXDans } from "../../../../../../../common/src/config/game-support/iidx"; import { CreateFerStaticClassProvider } from "./class-handler"; -const logger = CreateLogCtx(__filename); - t.test("#FerStaticClassProvider", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.ts b/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.ts index 619e607b4..d448c0f01 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.ts @@ -13,7 +13,7 @@ export function CreateFerStaticClassProvider(body: Record): Cla } else if (gptString === "iidx:DP") { index = body.dp_dan; } else { - logger.warn( + log.warn( `Invalid gptString ${gptString} passed to FerStaticClassProvider. Attempting to continue.`, ); return; @@ -24,14 +24,14 @@ export function CreateFerStaticClassProvider(body: Record): Cla } if (!Number.isInteger(index)) { - logger.info(`received invalid fer-static class of ${index} (${gptString}).`, { body }); + log.info(`received invalid fer-static class of ${index} (${gptString}).`, { body }); return; } const dan = IIDXDans[index as integer]; if (!dan) { - logger.warn(`Invalid fer-static class of ${index}. Skipping.`); + log.warn(`Invalid fer-static class of ${index}. Skipping.`); return; } diff --git a/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/converter.ts b/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/converter.ts index e607eb794..d31dbb095 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/converter.ts @@ -47,7 +47,7 @@ export const ConverterIRFervidexStatic: ConverterFunction< const song = await FindSongOnID("iidx", chart.songID); if (!song) { - logger.severe(`Song ${chart.songID} (iidx) has no parent song?`); + log.error(`Song ${chart.songID} (iidx) has no parent song?`); throw new InternalFailure(`Song ${chart.songID} (iidx) has no parent song?`); } diff --git a/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/parser.test.ts b/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/parser.test.ts index ae8551b93..e7a7f0c9d 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/parser.test.ts @@ -1,12 +1,10 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ResetDBState from "#test-utils/resets"; import { FervidexStaticBase, GetKTDataJSON } from "#test-utils/test-data"; import t from "tap"; import { ParseFervidexStatic } from "./parser"; -const logger = CreateLogCtx(__filename); - t.test("#ParseFervidexStatic", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/parser.ts b/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/parser.ts index 06057e3c0..40d4f69ed 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/fervidex-static/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { IsRecord } from "#utils/misc"; import { FormatPrError } from "#utils/prudence"; @@ -21,7 +21,7 @@ const PR_FERVIDEX_STATIC: PrudenceSchema = { export function ParseFervidexStatic( body: Record, headers: FervidexStaticHeaders, - logger: KtLogger, + log: KtLogger, ): ParserFunctionReturns { const version = SoftwareIDToVersion(headers.model, logger); const classProvider = CreateFerStaticClassProvider(body); diff --git a/typescript/server/src/lib/score-import/import-types/ir/fervidex/converter.test.ts b/typescript/server/src/lib/score-import/import-types/ir/fervidex/converter.test.ts index 9d9976a86..8d0c9e721 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/fervidex/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/fervidex/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreateScoreID } from "#lib/score-import/framework/score-importing/score-id"; import db from "#services/mongo/db"; import { dmf, mkFakeScoreIIDXSP } from "#test-utils/misc"; @@ -19,8 +19,6 @@ import { TachifyRange, } from "./converter"; -const logger = CreateLogCtx(__filename); - t.test("#SplitFervidexChartRef", (t) => { t.strictSame(SplitFervidexChartRef("spn"), { playtype: "SP", difficulty: "NORMAL" }); t.strictSame(SplitFervidexChartRef("sph"), { playtype: "SP", difficulty: "HYPER" }); diff --git a/typescript/server/src/lib/score-import/import-types/ir/fervidex/converter.ts b/typescript/server/src/lib/score-import/import-types/ir/fervidex/converter.ts index a8d41d136..207630da2 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/fervidex/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/fervidex/converter.ts @@ -192,7 +192,7 @@ export const ConverterIRFervidex: ConverterFunction { const f = (sid: string) => SoftwareIDToVersion(sid, logger); diff --git a/typescript/server/src/lib/score-import/import-types/ir/fervidex/parser.ts b/typescript/server/src/lib/score-import/import-types/ir/fervidex/parser.ts index 93c9f596b..76fd0f2a7 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/fervidex/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/fervidex/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import { EXT_BISTROVER, @@ -95,10 +95,7 @@ const PR_FERVIDEX: PrudenceSchema = { /** * Converts a string of the form LDJ:X:X:X:2020092900 into a game version. */ -export function SoftwareIDToVersion( - model: string, - logger: KtLogger, -): Versions["iidx:DP" | "iidx:SP"] { +export function SoftwareIDToVersion(model: string, log: KtLogger): Versions["iidx:DP" | "iidx:SP"] { try { const data = ParseEA3SoftID(model); @@ -166,7 +163,7 @@ export function SoftwareIDToVersion( throw new ScoreImportFatalError(400, `Unsupported Software Model ${model}.`); } catch (err) { - logger.warn(`Unsupported Software Model ${model}.`, { err }); + log.warn(`Unsupported Software Model ${model}.`, { err }); throw new ScoreImportFatalError(400, `Unsupported Software Model ${model}.`); } } @@ -175,7 +172,7 @@ export function ParseFervidexSingle( body: Record, headers: FervidexHeaders, userID: integer, - logger: KtLogger, + log: KtLogger, ): ParserFunctionReturns { const version = SoftwareIDToVersion(headers.model, logger); diff --git a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/converter.test.ts b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/converter.test.ts index 05cd14f36..72b747a8e 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/converter.test.ts @@ -1,12 +1,10 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ResetDBState from "#test-utils/resets"; import { TestingKsHookSV6CStaticScore } from "#test-utils/test-data"; import t from "tap"; import { ConverterKsHookSV6CStatic } from "./converter"; -const logger = CreateLogCtx(__filename); - t.test("#ConverterKsHookSV6CStatic", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/converter.ts b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/converter.ts index 23edaf36b..bc96e1bc8 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/converter.ts @@ -33,7 +33,7 @@ export const ConverterKsHookSV6CStatic: ConverterFunction< const song = await FindSongOnID("sdvx", chart.songID); if (!song) { - logger.severe(`Song ${chart.songID} (sdvx) has no parent song?`); + log.error(`Song ${chart.songID} (sdvx) has no parent song?`); throw new InternalFailure(`Song ${chart.songID} (sdvx) has no parent song?`); } diff --git a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/parser.test.ts b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/parser.test.ts index 5c177fe49..4893f00ff 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/parser.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { TestingKsHookSV6CScore, TestingKsHookSV6CStaticScore } from "#test-utils/test-data"; import deepmerge from "deepmerge"; import t from "tap"; @@ -6,8 +6,6 @@ import t from "tap"; /* eslint-disable @typescript-eslint/no-explicit-any */ import { ParseKsHookSV6CStatic } from "./parser"; -const logger = CreateLogCtx(__filename); - t.test("#ParseKsHookSV6CStatic", (t) => { const assertFail = (data: any, message: string) => { t.throws(() => ParseKsHookSV6CStatic(data, logger), message); diff --git a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/parser.ts b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/parser.ts index a16520a40..781498e80 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c-static/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { EmptyObject } from "#utils/types"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; @@ -28,7 +28,7 @@ const PR_KSHOOK_SV6C_STATIC: PrudenceSchema = { export function ParseKsHookSV6CStatic( body: Record, - _logger: KtLogger, + _log: KtLogger, ): ParserFunctionReturns { // Ignore excess keys, as SV6C might add more features in the future. const err = p(body, PR_KSHOOK_SV6C_STATIC, undefined, { allowExcessKeys: true }); diff --git a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.test.ts b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.test.ts index 84b6b4f81..c4fe752bc 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.test.ts @@ -1,12 +1,10 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ResetDBState from "#test-utils/resets"; import { TestingKsHookSV6CScore } from "#test-utils/test-data"; import t from "tap"; import { ConverterIRKsHookSV6C } from "./converter"; -const logger = CreateLogCtx(__filename); - t.test("#ConverterIRKsHookSV6C", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.ts b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.ts index 665137298..0449e4599 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.ts @@ -34,7 +34,7 @@ export const ConverterIRKsHookSV6C: ConverterFunction { const assertFail = (data: any, message: string) => { t.throws(() => ParseKsHookSV6C(data, logger), message); diff --git a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/parser.ts b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/parser.ts index d9eabd6e2..df51b6b90 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/kshook-sv6c/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; import { FormatPrError } from "#utils/prudence"; @@ -60,7 +60,7 @@ export const PR_KSHOOK_SV6C: PrudenceSchema = { export function ParseKsHookSV6C( body: Record, - _logger: KtLogger, + _log: KtLogger, ): ParserFunctionReturns { // Ignore excess keys, as SV6C might add more features in the future. const err = p(body, PR_KSHOOK_SV6C, undefined, { allowExcessKeys: true }); diff --git a/typescript/server/src/lib/score-import/import-types/ir/lr2hook/converter.test.ts b/typescript/server/src/lib/score-import/import-types/ir/lr2hook/converter.test.ts index cbfb607f1..22f700bff 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/lr2hook/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/lr2hook/converter.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { dmf } from "#test-utils/misc"; import ResetDBState from "#test-utils/resets"; import { TestingLR2HookScore } from "#test-utils/test-data"; @@ -7,8 +7,6 @@ import t from "tap"; import { ConverterLR2Hook } from "./converter"; -const logger = CreateLogCtx(__filename); - t.test("#ConverterLR2Hook", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/score-import/import-types/ir/lr2hook/converter.ts b/typescript/server/src/lib/score-import/import-types/ir/lr2hook/converter.ts index c2ceee92d..3916ba57d 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/lr2hook/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/lr2hook/converter.ts @@ -32,7 +32,7 @@ export const ConverterLR2Hook: ConverterFunction = const song = await FindSongOnID("bms", chart.songID); if (!song) { - logger.severe(`Song ${chart.songID} (bms) has no parent song?`); + log.error(`Song ${chart.songID} (bms) has no parent song?`); throw new InternalFailure(`Song ${chart.songID} (bms) has no parent song?`); } diff --git a/typescript/server/src/lib/score-import/import-types/ir/lr2hook/parser.test.ts b/typescript/server/src/lib/score-import/import-types/ir/lr2hook/parser.test.ts index 36ddb906e..49c855bd3 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/lr2hook/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/lr2hook/parser.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { TestingLR2HookScore } from "#test-utils/test-data"; import { ApplyNTimes } from "#utils/misc"; import deepmerge from "deepmerge"; @@ -7,8 +7,6 @@ import t from "tap"; /* eslint-disable @typescript-eslint/no-explicit-any */ import { ParseLR2Hook } from "./parser"; -const logger = CreateLogCtx(__filename); - t.test("#ParseLR2Hook", (t) => { const assertFail = (data: any, message: string) => { t.throws(() => ParseLR2Hook(data, logger), message); diff --git a/typescript/server/src/lib/score-import/import-types/ir/lr2hook/parser.ts b/typescript/server/src/lib/score-import/import-types/ir/lr2hook/parser.ts index 5c2f3ac45..74a5f1a06 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/lr2hook/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/lr2hook/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; import { FormatPrError, optNull } from "#utils/prudence"; @@ -82,7 +82,7 @@ export const PR_LR2HOOK: PrudenceSchema = { export function ParseLR2Hook( body: Record, - _logger: KtLogger, + _log: KtLogger, ): ParserFunctionReturns { // Ignore excess keys, as lr2hook is likely to add more features in the future. const err = p( diff --git a/typescript/server/src/lib/score-import/import-types/ir/usc/converter.test.ts b/typescript/server/src/lib/score-import/import-types/ir/usc/converter.test.ts index 9bf4101b2..4c769fe15 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/usc/converter.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/usc/converter.test.ts @@ -1,6 +1,6 @@ import type { USCClientScore } from "#server/router/ir/usc/_playtype/types"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import ResetDBState from "#test-utils/resets"; import { TestingUSCChart, uscScore } from "#test-utils/test-data"; @@ -9,8 +9,6 @@ import t from "tap"; import { ConverterIRUSC, DeriveLamp, DeriveNoteMod } from "./converter"; -const logger = CreateLogCtx(__filename); - t.test("#DeriveLamp", (t) => { t.equal(DeriveLamp(uscScore), "EXCESSIVE CLEAR"); diff --git a/typescript/server/src/lib/score-import/import-types/ir/usc/converter.ts b/typescript/server/src/lib/score-import/import-types/ir/usc/converter.ts index cbad2c808..3b0f12cc4 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/usc/converter.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/usc/converter.ts @@ -86,7 +86,7 @@ export const ConverterIRUSC: ConverterFunction = a data.windows.miss !== USC_DEFAULT_MISS || data.windows.slam !== USC_DEFAULT_SLAM ) { - logger.info(`Ignored score because hitWindows were modified.`, { + log.info(`Ignored score because hitWindows were modified.`, { windows: data.windows, }); throw new InvalidScoreFailure(`HitWindows have been modified - Score is invalid.`); @@ -94,7 +94,7 @@ export const ConverterIRUSC: ConverterFunction = a // if any auto-like option is enabled, reject score. if (data.options.autoFlags !== 0) { - logger.verbose(`Ignored score because autoplay was enabled.`); + log.verbose(`Ignored score because autoplay was enabled.`); throw new InvalidScoreFailure(`Autoplay was enabled - Score is invalid.`); } @@ -115,7 +115,7 @@ export const ConverterIRUSC: ConverterFunction = a const song = await FindSongOnID("usc", chartDoc.songID); if (!song) { - logger.severe(`Song-Chart desync on USCIR ${chartDoc.songID}.`); + log.error(`Song-Chart desync on USCIR ${chartDoc.songID}.`); throw new InternalFailure(`Song-Chart desync on USCIR ${chartDoc.songID}.`); } diff --git a/typescript/server/src/lib/score-import/import-types/ir/usc/parser.test.ts b/typescript/server/src/lib/score-import/import-types/ir/usc/parser.test.ts index f7c9f4567..0639034d2 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/usc/parser.test.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/usc/parser.test.ts @@ -1,11 +1,9 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { TestingUSCChart, uscScore } from "#test-utils/test-data"; import t from "tap"; import { ParseIRUSC } from "./parser"; -const logger = CreateLogCtx(__filename); - t.test("#ParseIRUSC", (t) => { t.test("Should validate and convert a score into an iterable", (t) => { const res = ParseIRUSC( diff --git a/typescript/server/src/lib/score-import/import-types/ir/usc/parser.ts b/typescript/server/src/lib/score-import/import-types/ir/usc/parser.ts index fd461e8f5..77aab53c0 100644 --- a/typescript/server/src/lib/score-import/import-types/ir/usc/parser.ts +++ b/typescript/server/src/lib/score-import/import-types/ir/usc/parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { USCClientScore } from "#server/router/ir/usc/_playtype/types"; import { FormatPrError } from "#utils/prudence"; @@ -39,7 +39,7 @@ export function ParseIRUSC( body: Record, chartHash: string, playtype: Playtypes["usc"], - _logger: KtLogger, + _log: KtLogger, ): ParserFunctionReturns { const err = p( body.score, diff --git a/typescript/server/src/lib/score-import/worker/types.ts b/typescript/server/src/lib/score-import/worker/types.ts index f020bcd95..76f8f7356 100644 --- a/typescript/server/src/lib/score-import/worker/types.ts +++ b/typescript/server/src/lib/score-import/worker/types.ts @@ -6,7 +6,7 @@ import type { Parsers } from "../import-types/parsers"; // Ok so, please hear me out on this one. // We need a type that removes the last element from an array. // This is because parser functions have variable signatures, but all -// end with requiring a logger. We don't want to have to pass the logger, +// end with requiring a log. We don't want to have to pass the logger, // we just want to pass those other arguments. type RemoveLast> = T extends [...infer RemoveLast, unknown] ? RemoveLast diff --git a/typescript/server/src/lib/score-import/worker/worker.ts b/typescript/server/src/lib/score-import/worker/worker.ts index 98f171c1f..82ea5994a 100644 --- a/typescript/server/src/lib/score-import/worker/worker.ts +++ b/typescript/server/src/lib/score-import/worker/worker.ts @@ -1,5 +1,5 @@ import { HandleSIGTERMGracefully } from "#lib/handlers/sigterm"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { Env, ServerConfig } from "#lib/setup/config"; import { FormatUserDoc, GetUserWithID } from "#utils/user"; import { Worker } from "bullmq"; @@ -29,16 +29,12 @@ EventEmitter.defaultMaxListeners = 20; // Explicitly set this before importing anything! process.env.IS_SCORE_WORKER_SERVER = "true"; -const workerLogger = CreateLogCtx(`Import Worker`); - // Exit if we're not called with node. Think of this like if __name__ != "__main__" in python. if (require.main !== module) { - workerLogger.crit( + log.fatal( "The Score Import Worker was imported, instead of ran directly with node. This is a fatal error. Exiting.", - () => { - process.exit(1); - }, ); + process.exit(1); } /** @@ -51,7 +47,7 @@ export const worker = new Worker( const user = await GetUserWithID(job.data.userID); if (!user) { - workerLogger.severe( + log.error( `Couldn't find user with ID ${job.data.userID}. Yet a score import from them was made? (Job ID ${job.id}).`, ); throw new Error( @@ -78,17 +74,11 @@ export const worker = new Worker( job.data.parserArguments = processedArgs as ScoreImportJobData["parserArguments"]; - // Create a logger that we can pass around for context. - // This helps us debug what score import did what! - const logger = CreateLogCtx( - `Import ${job.data.importType} ${FormatUserDoc(user)} ${job.id}`, - ); - - logger.debug(`Received score import job ${job.id}`, { job }); + log.debug(`Received score import job ${job.id}`, { job }); const InputParser = GetInputParser(job.data); - logger.debug(`Starting import.`); + log.debug(`Starting import.`); void job.updateProgress({ description: "Importing Scores.", @@ -101,11 +91,11 @@ export const worker = new Worker( job.data.importType, InputParser, job.data.importID, - logger, + undefined, job, ); - logger.debug(`Finished import.`); + log.debug(`Finished import.`); return { success: true, importDocument }; } catch (e) { @@ -115,7 +105,7 @@ export const worker = new Worker( // has suddenly made all `instanceof` calls faulty. I still - to this day - have absolutely // no idea why or how this broke, but now `instanceof` is considered a footgun so, great. if ("statusCode" in err) { - logger.info( + log.info( `Job ${job.id} hit ScoreImportFatalError (User Fault) with message: ${err.message}`, err, job.data, @@ -135,15 +125,13 @@ export const worker = new Worker( }, ); -const logger = CreateLogCtx("Score Import Worker"); - worker.on("failed", (job, err) => { // any errors that escalate this far are unexpected, as they haven't been caught by previous calls. - logger.error(`Job ${job.id} failed unexpectedly with message: ${err.message}`, err); + log.error(`Job ${job.id} failed unexpectedly with message: ${err.message}`, err); }); worker.on("completed", (job, result) => { - logger.debug(`Job ${job.id} finished successfully.`, result); + log.debug(`Job ${job.id} finished successfully.`, result); }); process.on("SIGTERM", () => { diff --git a/typescript/server/src/lib/score-mutation/delete-scores.ts b/typescript/server/src/lib/score-mutation/delete-scores.ts index ed273b139..363321476 100644 --- a/typescript/server/src/lib/score-mutation/delete-scores.ts +++ b/typescript/server/src/lib/score-mutation/delete-scores.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { GetAndUpdateUsersGoals } from "#lib/score-import/framework/goals/goals"; import { UpdateChartRanking } from "#lib/score-import/framework/pb/create-pb-doc"; import { ProcessPBs } from "#lib/score-import/framework/pb/process-pbs"; @@ -10,8 +10,6 @@ import type { GameGroup, Playtype, ScoreDocument } from "../../../../common/src" import db from "#services/mongo/db"; import { RecalcSessions } from "#utils/calculations/recalc-sessions"; -const logger = CreateLogCtx(__filename); - /** * Deletes the provided score. This needs a dedicated helper method due to * needing to unset things like sessions and recalcs. @@ -112,7 +110,7 @@ export async function DeleteScore( }); if (!alreadyBlacklisted) { - logger.info(`Blacklisted ${score.scoreID}.`); + log.info(`Blacklisted ${score.scoreID}.`); await db["score-blacklist"].insert({ userID: score.userID, scoreID: score.scoreID, @@ -123,7 +121,7 @@ export async function DeleteScore( } export async function DeleteMultipleScores(scores: Array, blacklist = false) { - logger.info(`Received request to delete ${scores.length} score(s) (Blacklist: ${blacklist}).`); + log.info(`Received request to delete ${scores.length} score(s) (Blacklist: ${blacklist}).`); const scoreIDs = scores.map((e) => e.scoreID); const chartIDs = scores.map((e) => e.chartID); @@ -225,7 +223,7 @@ export async function DeleteMultipleScores(scores: Array, blackli }); if (!alreadyBlacklisted) { - logger.info(`Blacklisted ${score.scoreID}.`); + log.info(`Blacklisted ${score.scoreID}.`); await db["score-blacklist"].insert({ userID: score.userID, scoreID: score.scoreID, @@ -256,5 +254,5 @@ export async function DeleteMultipleScores(scores: Array, blackli await UpdateUsersGamePlaytypeStats(game, playtype, userID, null, logger); } - logger.info(`Finished deleting ${scores.length} scores.`); + log.info(`Finished deleting ${scores.length} scores.`); } diff --git a/typescript/server/src/lib/score-mutation/update-score.ts b/typescript/server/src/lib/score-mutation/update-score.ts index 2d536de87..599b42931 100644 --- a/typescript/server/src/lib/score-mutation/update-score.ts +++ b/typescript/server/src/lib/score-mutation/update-score.ts @@ -1,6 +1,6 @@ import type { DryScoreData } from "#lib/score-import/framework/common/types"; -import { type KtLogger, rootLogger } from "#lib/logger/logger"; +import { log, type KtLogger } from "#lib/logger/log.js"; import { CreateScoreCalcData } from "#lib/score-import/framework/calculated-data/score"; import { CreateSessionCalcData } from "#lib/score-import/framework/calculated-data/session"; import { UpdateChartRanking } from "#lib/score-import/framework/pb/create-pb-doc"; @@ -37,7 +37,7 @@ export default async function UpdateScore( const user = await GetUserWithID(userID); if (!user) { - rootLogger.severe( + log.error( `User ${userID} does not exist, yet a score update was called for them? Panicking.`, ); throw new Error( @@ -52,7 +52,7 @@ export default async function UpdateScore( }); if (!chart) { - rootLogger.severe( + log.error( `Chart ${chartID} does not exist, yet a score update was called for it? Panicking.`, ); throw new Error( @@ -80,11 +80,11 @@ export default async function UpdateScore( newScore.scoreID = newScoreID; - const logger = rootLogger.child({ + const logger = log.child({ context: ["Update Score", oldScore.scoreID, newScore.scoreID, FormatUserDoc(user)], }) as KtLogger; - logger.verbose("Received Update Score request."); + log.verbose("Received Update Score request."); const gpt = GetGPTString(newScore.game, newScore.playtype); @@ -98,7 +98,7 @@ export default async function UpdateScore( // the update. // @ts-expect-error this shouldn't happen according to types. if (newScore._id) { - logger.warn( + log.warn( `Passed a score with _id to UpdateScore. This property should not be set. Deleting this property and continuing anyway.`, ); @@ -113,8 +113,8 @@ export default async function UpdateScore( { $set: newScore as ScoreDocument }, ); } catch (err) { - logger.error(err); - logger.warn( + log.error(err); + log.warn( `Score ID ${newScoreID} already existed -- this update caused a collision. Removing old score and updating old references anyway.`, ); await db.scores.remove({ @@ -123,12 +123,12 @@ export default async function UpdateScore( } if (oldScoreID === newScoreID) { - logger.verbose(`Done updating score.`); + log.verbose(`Done updating score.`); return; } if (dangerouslySkipUpdatingRefs) { - logger.verbose(`Done updating score.`); + log.verbose(`Done updating score.`); return; } @@ -142,7 +142,7 @@ export default async function UpdateScore( scoreIDs: newScoreID, }); - logger.verbose(`Updating ${sessions.length} sessions.`); + log.verbose(`Updating ${sessions.length} sessions.`); // For every session that interacts with this score ID (there should only ever be one) for (const session of sessions) { @@ -188,7 +188,7 @@ export default async function UpdateScore( } if (!skipUpdatingPBs) { - logger.verbose(`Updating PBs.`); + log.verbose(`Updating PBs.`); // Update the PBs to reference properly. // We run updateAllPbs on just the modified chart -- the reason @@ -212,7 +212,7 @@ export default async function UpdateScore( scoreIDs: oldScoreID, }); - logger.verbose(`Updating ${imports.length} imports.`); + log.verbose(`Updating ${imports.length} imports.`); for (const importDoc of imports) { await db.imports.update( @@ -227,5 +227,5 @@ export default async function UpdateScore( ); } - logger.verbose(`Done updating score.`); + log.verbose(`Done updating score.`); } diff --git a/typescript/server/src/lib/search/search.ts b/typescript/server/src/lib/search/search.ts index a25de828b..5301100eb 100644 --- a/typescript/server/src/lib/search/search.ts +++ b/typescript/server/src/lib/search/search.ts @@ -1,7 +1,7 @@ import type { FilterQuery } from "mongodb"; import type { ICollection } from "monk"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { TachiConfig } from "#lib/setup/config"; import db from "#services/mongo/db"; import { GetSongForIDGuaranteed } from "#utils/db"; @@ -24,8 +24,6 @@ import { } from "../../../../common/src"; import { AsyncFzf } from "./fzf/main"; -const logger = CreateLogCtx(__filename); - interface SearchControls { keys: Array; primary: string; @@ -231,7 +229,7 @@ export async function SearchGlobalGameSongsAndCharts( const song = songMap.get(chart.songID); if (!song) { - logger.warn(`Failed to find parent song for ${chart.songID} (${game})? Skipping.`); + log.warn(`Failed to find parent song for ${chart.songID} (${game})? Skipping.`); continue; } diff --git a/typescript/server/src/lib/seeds/repo.ts b/typescript/server/src/lib/seeds/repo.ts index 0e82fda5a..3d3e8405b 100644 --- a/typescript/server/src/lib/seeds/repo.ts +++ b/typescript/server/src/lib/seeds/repo.ts @@ -4,14 +4,12 @@ import fs from "fs/promises"; import type { GameGroup } from "../../../../common/src"; /* eslint-disable no-await-in-loop */ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { Env, ServerConfig } from "#lib/setup/config"; import { asyncExec } from "#utils/misc"; import os from "os"; import path from "path"; -const logger = CreateLogCtx(__filename); - export type SeedsCollections = | "bms-course-lookup" | "folders" @@ -24,7 +22,6 @@ export type SeedsCollections = */ export class DatabaseSeedsRepo { private readonly baseDir: string; - private readonly logger; private readonly shouldDestroy: "YES_IM_SURE_PLEASE_LET_THIS_DIRECTORY_BE_RM_RFD" | false; /** @@ -40,7 +37,6 @@ export class DatabaseSeedsRepo { shouldDestroy: "YES_IM_SURE_PLEASE_LET_THIS_DIRECTORY_BE_RM_RFD" | false = false, ) { this.baseDir = baseDir; - this.logger = CreateLogCtx(`DatabaseSeeds:${baseDir}`); this.shouldDestroy = shouldDestroy; } @@ -95,13 +91,13 @@ export class DatabaseSeedsRepo { * @returns True when a commit has occured, false when it hasn't. Throws on failure. */ async CommitChangesBack(commitMsg: string) { - this.logger.verbose(`Received commit-back request.`); + log.verbose(`Received commit-back request.`); try { const { stdout: statusOut } = await asyncExec(`git status --porcelain`, this.baseDir); if (statusOut === "") { - this.logger.info(`No changes. Not committing any changes back.`); + log.info(`No changes. Not committing any changes back.`); return false; } @@ -115,11 +111,11 @@ export class DatabaseSeedsRepo { // try { // await asyncExec(`cd "${this.baseDir}/scripts" || exit 2; pnpm install; pnpm test`); // } catch ({ err, stdout, stderr }) { - // logger.error(`Testing the changes failed. ${err}. Not committing back!`, { err }); + // log.error(`Testing the changes failed. ${err}. Not committing back!`, { err }); // throw err; // } - this.logger.info(`Changes detected. Authenticating with Github.`); + log.info(`Changes detected. Authenticating with Github.`); await this.#AuthenticateWithGitServer(); @@ -131,11 +127,11 @@ export class DatabaseSeedsRepo { await asyncExec(`git push`, this.baseDir); - this.logger.info(`Commit: ${commitOut}.`); + log.info(`Commit: ${commitOut}.`); return true; } catch (err) { - this.logger.error(`Failed to backport commits?`, { err }); + log.error(`Failed to backport commits?`, { err }); throw err; } } @@ -146,7 +142,7 @@ export class DatabaseSeedsRepo { return fs.rm(this.baseDir, { recursive: true, force: true }); } - this.logger.info(`Refusing to delete seeds as they were instantiated locally.`); + log.info(`Refusing to delete seeds as they were instantiated locally.`); } async *IterateCollections() { @@ -193,11 +189,11 @@ export class DatabaseSeedsRepo { // prevent an awful interaction where a user edits stuff on their disk // and tries to run pnpm load-seeds // but it fails because pull can't rebase with changes. - this.logger.warn(`Not pulling any updates to seeds as we're in local dev.`); + log.warn(`Not pulling any updates to seeds as we're in local dev.`); return; } - this.logger.info(`Pulling updates.`); + log.info(`Pulling updates.`); return asyncExec(`git pull`); } @@ -221,7 +217,7 @@ export class DatabaseSeedsRepo { * fail if there are uncommitted changes. */ switchBranch(newBranch: string) { - this.logger.info(`Switching to '${newBranch}'...`); + log.info(`Switching to '${newBranch}'...`); return asyncExec(`git switch '${newBranch}'`, this.baseDir); } @@ -246,7 +242,7 @@ export async function PullDatabaseSeeds() { if (ServerConfig.SEEDS_CONFIG?.TYPE === "GIT_REPO") { const seedsDir = await fs.mkdtemp(path.join(os.tmpdir(), "tachi-seeds-")); - logger.info(`Cloning data to ${seedsDir}.`); + log.info(`Cloning data to ${seedsDir}.`); await fs.rm(seedsDir, { recursive: true, force: true }); @@ -282,7 +278,7 @@ export async function PullDatabaseSeeds() { ); } catch (e) { const { err, stderr } = e as { err: Error; stderr: string }; - logger.error(`Error cloning seeds. ${stderr}.`); + log.error(`Error cloning seeds. ${stderr}.`); throw err; } } else if (ServerConfig.SEEDS_CONFIG?.TYPE === "LOCAL_FILES") { diff --git a/typescript/server/src/lib/setup/config.ts b/typescript/server/src/lib/setup/config.ts index 39d15e1b0..c6744ae75 100644 --- a/typescript/server/src/lib/setup/config.ts +++ b/typescript/server/src/lib/setup/config.ts @@ -9,7 +9,7 @@ const logger = console; const rawConf = process.env.TCHIS_CONF; if (!rawConf) { - logger.error("TCHIS_CONF environment variable is not set. Terminating."); + log.error("TCHIS_CONF environment variable is not set. Terminating."); process.exit(1); } @@ -18,7 +18,7 @@ let config: unknown; try { config = JSON5.parse(rawConf); } catch (err) { - logger.error("Failed to parse TCHIS_CONF as JSON5.", { err }); + log.error("Failed to parse TCHIS_CONF as JSON5.", { err }); process.exit(1); } @@ -147,7 +147,7 @@ export const ServerConfig: TachiServerConfig = result.data; let PORT = Number(process.env.PORT); if (Number.isNaN(PORT) && process.env.IS_SERVER) { - logger.warn(`No/invalid PORT specified in environment, defaulting to 8080.`); + log.warn(`No/invalid PORT specified in environment, defaulting to 8080.`); PORT = 8080; } @@ -155,27 +155,27 @@ const REDIS_URL = process.env.REDIS_URL; if (!REDIS_URL) { // n.b. These logs should be critical level, but the logger cant actually instantiate - // itself in this file, because this file also controlls the logger. Ouch! - logger.error(`No REDIS_URL specified in environment. Terminating.`); + // itself in this file, because this file also controlls the log. Ouch! + log.error(`No REDIS_URL specified in environment. Terminating.`); process.exit(1); } const MONGO_URL = process.env.MONGO_URL; if (!MONGO_URL) { - logger.error(`No MONGO_URL specified in environment. Terminating.`); + log.error(`No MONGO_URL specified in environment. Terminating.`); process.exit(1); } const NODE_ENV = process.env.NODE_ENV; if (!NODE_ENV) { - logger.error(`No NODE_ENV specified in environment. Terminating.`); + log.error(`No NODE_ENV specified in environment. Terminating.`); process.exit(1); } if (!["dev", "production", "staging", "test"].includes(NODE_ENV)) { - logger.error( + log.error( `Invalid NODE_ENV set in environment. Expected dev, production, test or staging. Got ${NODE_ENV}.`, ); process.exit(1); @@ -183,9 +183,7 @@ if (!["dev", "production", "staging", "test"].includes(NODE_ENV)) { // if (bms XOR pms) is enabled if (TachiConfig.GAMES.includes("bms") !== TachiConfig.GAMES.includes("pms")) { - logger.error( - `BMS and PMS MUST be enabled at the same time, due to how the beatoraja IR works.`, - ); + log.error(`BMS and PMS MUST be enabled at the same time, due to how the beatoraja IR works.`); process.exit(1); } @@ -193,7 +191,7 @@ if (TachiConfig.GAMES.includes("bms") !== TachiConfig.GAMES.includes("pms")) { const logLevel = process.env.LOG_LEVEL ?? "info"; if (!["crit", "debug", "error", "info", "severe", "verbose", "warn"].includes(logLevel)) { - logger.error(`Invalid LOG_LEVEL of ${logLevel}.`); + log.error(`Invalid LOG_LEVEL of ${logLevel}.`); process.exit(1); } @@ -201,7 +199,7 @@ if (!["crit", "debug", "error", "info", "severe", "verbose", "warn"].includes(lo const POSTGRES_URL = process.env.POSTGRES_URL ?? ""; if (!POSTGRES_URL) { - logger.error(`No POSTGRES_URL specified in environment. Terminating.`); + log.error(`No POSTGRES_URL specified in environment. Terminating.`); process.exit(1); } @@ -213,5 +211,6 @@ export const Env = { POSTGRES_URL, NODE_ENV: NODE_ENV as "dev" | "production" | "staging" | "test", COMMIT_HASH: process.env.COMMIT_HASH, + VERSION: process.env.VERSION, LOG_LEVEL: logLevel as "crit" | "debug" | "error" | "info" | "severe" | "verbose" | "warn", }; diff --git a/typescript/server/src/lib/showcase/get-related.ts b/typescript/server/src/lib/showcase/get-related.ts index b701f77f1..246a9737e 100644 --- a/typescript/server/src/lib/showcase/get-related.ts +++ b/typescript/server/src/lib/showcase/get-related.ts @@ -1,24 +1,22 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import type { GameGroup, ShowcaseStatDetails } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - export async function GetRelatedStatDocuments(stat: ShowcaseStatDetails, game: GameGroup) { switch (stat.mode) { case "chart": { const chart = await db.anyCharts[game].findOne({ chartID: stat.chartID }); if (!chart) { - logger.error(`This stat refers to a chart that does not exist?`, { stat }); + log.error(`This stat refers to a chart that does not exist?`, { stat }); throw new Error(`Stat refers to a chart that does not exist? ${stat.chartID}.`); } const song = await db.anySongs[game].findOne({ id: chart.songID }); if (!song) { - logger.severe(`Song-Chart Mismatch - ${chart.songID}.`, { chart }); + log.error(`Song-Chart Mismatch - ${chart.songID}.`, { chart }); throw new Error(`Song-Chart Mismatch on ${chart.songID}.`); } @@ -27,7 +25,7 @@ export async function GetRelatedStatDocuments(stat: ShowcaseStatDetails, game: G case "folder": { if (Array.isArray(stat.folderID)) { - logger.warn( + log.warn( `This stat is corrupt and attempted to use multiple folderIDs. This is no longer supported. Check that migrations have ran.`, { stat }, ); @@ -39,7 +37,7 @@ export async function GetRelatedStatDocuments(stat: ShowcaseStatDetails, game: G }); if (!folder) { - logger.error(`This stat refers to a folder that does not exist?`, { stat }); + log.error(`This stat refers to a folder that does not exist?`, { stat }); throw new Error(`Stat refers to folder that no longer exists.`); } @@ -47,7 +45,7 @@ export async function GetRelatedStatDocuments(stat: ShowcaseStatDetails, game: G } default: { - logger.error( + log.error( `Invalid stat - has nonsense stat.mode of ${(stat as ShowcaseStatDetails).mode}.`, { stat }, ); diff --git a/typescript/server/src/lib/showcase/get-stats.ts b/typescript/server/src/lib/showcase/get-stats.ts index d324472c2..1991e716d 100644 --- a/typescript/server/src/lib/showcase/get-stats.ts +++ b/typescript/server/src/lib/showcase/get-stats.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { @@ -12,8 +12,6 @@ import { import { EvaluateShowcaseStat } from "./evaluator"; import { GetRelatedStatDocuments } from "./get-related"; -const logger = CreateLogCtx(__filename); - /** * Evaluate a users set Stats Showcase. * @param projectUserStats - Optionally, provide another users ID here. Their stats showcase will be @@ -33,7 +31,7 @@ export async function EvaluateUsersStatsShowcase( }); if (!settings) { - logger.error( + log.error( `User ${getSettingsID} has no game-settings, yet a call to EvaluateUsersStatsShowcase was made.`, ); diff --git a/typescript/server/src/lib/targets/goals.test.ts b/typescript/server/src/lib/targets/goals.test.ts index 2557f5514..8e4baf22d 100644 --- a/typescript/server/src/lib/targets/goals.test.ts +++ b/typescript/server/src/lib/targets/goals.test.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { dmf, mkFakePBIIDXSP } from "#test-utils/misc"; import ResetDBState from "#test-utils/resets"; @@ -26,8 +26,6 @@ import { HumaniseGoalProgress, } from "./goals"; -const logger = CreateLogCtx(__filename); - t.test("#EvaluateGoalForUser", (t) => { t.beforeEach(ResetDBState); diff --git a/typescript/server/src/lib/targets/goals.ts b/typescript/server/src/lib/targets/goals.ts index 42b810453..7502d5aca 100644 --- a/typescript/server/src/lib/targets/goals.ts +++ b/typescript/server/src/lib/targets/goals.ts @@ -3,7 +3,7 @@ import type { FilterQuery } from "mongodb"; import { GPT_SERVER_IMPLEMENTATIONS } from "#game-implementations/game-implementations"; import { SubscribeFailReasons } from "#lib/constants/err-codes"; -import CreateLogCtx, { type KtLogger } from "#lib/logger/logger"; +import { log, type KtLogger } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { GetFolderChartIDs } from "#utils/folder"; import fjsh from "fast-json-stable-hash"; @@ -25,8 +25,6 @@ import { } from "../../../../common/src"; import { CreateGoalTitle as CreateGoalName, ValidateGoalChartsAndCriteria } from "./goal-utils"; -const logger = CreateLogCtx(__filename); - export interface EvaluatedGoalReturn { achieved: boolean; progress: number | null; @@ -58,7 +56,7 @@ export function CreateGoalID( export async function EvaluateGoalForUser( goal: GoalDocument, userID: integer, - logger: KtLogger, + log: KtLogger, ): Promise { // First, we need to resolve the set of charts this // goal involves. @@ -192,7 +190,7 @@ export async function EvaluateGoalForUser( default: { // note that this seemingly nonsensical type assertion is because typescript has whittled down // goal.criteria (correctly) to 'never', but we want to log if something somehow ends up here (it shouldn't). - logger.warn( + log.warn( `Invalid goal: ${goal.goalID}, unknown criteria.mode ${ (goal.criteria as GoalDocument["criteria"]).mode }, ignoring.`, @@ -344,7 +342,7 @@ export async function SubscribeToGoal( if (!goalExists) { await db.goals.insert(goalDocument); - logger.info(`Inserting new goal '${goalDocument.name}'.`); + log.info(`Inserting new goal '${goalDocument.name}'.`); } const userAlreadySubscribed = await db["goal-subs"].findOne({ @@ -573,7 +571,7 @@ export async function UnsubscribeFromOrphanedGoalSubs( const toRemove = maybeToRemove.filter((e) => e !== null) as Array; if (toRemove.length > 0) { - logger.info( + log.info( `Removing ${toRemove.length} goals from user ${userID} on ${FormatGameGroup( game, playtype, @@ -602,7 +600,7 @@ export async function GetRelevantGoals( game: GameGroup, userID: integer, chartIDs: Set, - logger: KtLogger, + log: KtLogger, onlyUnachieved = false, ): Promise<{ goals: Array; goalSubsMap: Map }> { const gsQuery: FilterQuery = { @@ -616,7 +614,7 @@ export async function GetRelevantGoals( const goalSubs = await db["goal-subs"].find(gsQuery); - logger.verbose(`Found user has ${goalSubs.length} goals.`); + log.verbose(`Found user has ${goalSubs.length} goals.`); if (!goalSubs.length) { return { goals: [], goalSubsMap: new Map() }; @@ -769,6 +767,6 @@ export async function EditGoal(oldGoal: GoalDocument, newGoal: GoalDocument) { try { await db.goals.insert(newGoal); } catch (err) { - logger.info(`Goal ${newGoal.name} already existed.`); + log.info(`Goal ${newGoal.name} already existed.`); } } diff --git a/typescript/server/src/lib/targets/quests.ts b/typescript/server/src/lib/targets/quests.ts index bb637f0e4..b4711abec 100644 --- a/typescript/server/src/lib/targets/quests.ts +++ b/typescript/server/src/lib/targets/quests.ts @@ -1,5 +1,5 @@ import { SubscribeFailReasons } from "#lib/constants/err-codes"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { BulkSendNotification } from "#lib/notifications/notifications"; import db from "#services/mongo/db"; @@ -21,8 +21,6 @@ import { UnsubscribeFromOrphanedGoalSubs, } from "./goals"; -const logger = CreateLogCtx(__filename); - /** * Retrieves the goalID documents in a single array from the * nested structure of quests. @@ -44,7 +42,7 @@ export async function GetGoalsInQuest(quest: QuestDocument) { }); if (goals.length !== goalIDs.length) { - logger.error( + log.error( `Quest ${quest.name} has ${goalIDs.length} goals registered, but we could only find ${goals.length} in the database?`, { goals: goals.length, quest, goalIDs: goalIDs.length }, ); @@ -53,7 +51,7 @@ export async function GetGoalsInQuest(quest: QuestDocument) { // this shouldn't happen, but if it does it's recoverable by just ignoring it. if (goalIDs.length < 2) { - logger.warn(`Quest ${quest.name} resolves to less than 2 goals. Isn't a valid quest?`, { + log.warn(`Quest ${quest.name} resolves to less than 2 goals. Isn't a valid quest?`, { quest, }); } @@ -125,14 +123,14 @@ export async function EvaluateQuestProgress(userID: integer, quest: QuestDocumen if (!goalSub) { // shouldn't happen. Let's just correct the user silently. - logger.warn( + log.warn( `User ${userID} has a corrupt subscription to quest '${quest.name}', They do not have all the goals in this quest assigned. Automatically subscribing them to the new goal.`, ); const newGoalSub = await SubscribeToGoal(userID, goal, false); if (newGoalSub === SubscribeFailReasons.ALREADY_SUBSCRIBED) { - logger.error( + log.error( `User ${userID} wasn't subscribed to a goal (${goal.goalID}), but subscription failed because they were already subscribed. This should never happen.`, ); throw new Error( @@ -142,7 +140,7 @@ export async function EvaluateQuestProgress(userID: integer, quest: QuestDocumen if (newGoalSub === SubscribeFailReasons.ALREADY_ACHIEVED) { // lol, wut - logger.error( + log.error( `Impossible via typesystem: attempted resubscription for user ${userID} on goal ${goal.goalID}, was rejected for being already achieved. Not possible, as we allow already achieved goals here.`, ); @@ -167,7 +165,7 @@ export async function EvaluateQuestProgress(userID: integer, quest: QuestDocumen const result = await EvaluateGoalForUser(goal, userID, logger); if (!result) { - logger.error( + log.error( `Failed to calculate ${userID} result for goal '${goal.name}'. Is the goal valid?`, { goal, quest }, ); @@ -264,7 +262,7 @@ export async function SubscribeToQuest( await db["quest-subs"].insert(questSub); - logger.info(`User ${userID} subscribed to '${quest.name}'.`); + log.info(`User ${userID} subscribed to '${quest.name}'.`); return { questSub, goals: result.goals, goalResults: result.goalResults }; } @@ -279,7 +277,7 @@ export async function SubscribeToQuest( * A quest that removes goals will not result in those users having goal subs removed. */ export async function UpdateQuestSubscriptions(questID: string) { - logger.info(`Received update-subscribe call to quest ${questID}.`); + log.info(`Received update-subscribe call to quest ${questID}.`); const subscriptions = await db["quest-subs"].find({ questID }); @@ -302,9 +300,7 @@ export async function UpdateQuestSubscriptions(questID: string) { subscriptions.map((e) => UnsubscribeFromOrphanedGoalSubs(e.userID, e.game, e.playtype)), ); - logger.info( - `Quest ${questID} has been deleted. Unsubscribed ${subscriptions.length} users.`, - ); + log.info(`Quest ${questID} has been deleted. Unsubscribed ${subscriptions.length} users.`); return; } diff --git a/typescript/server/src/lib/webhooks/webhooks.ts b/typescript/server/src/lib/webhooks/webhooks.ts index 34a461531..8aceb38ef 100644 --- a/typescript/server/src/lib/webhooks/webhooks.ts +++ b/typescript/server/src/lib/webhooks/webhooks.ts @@ -1,11 +1,9 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import fetch from "#utils/fetch"; import type { WebhookEvents } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - // @todo make use of aggressive caching here? export async function GetWebhookUrlInfo() { const urls = await db["api-clients"].find( @@ -22,7 +20,7 @@ export async function GetWebhookUrlInfo() { export async function EmitWebhookEvent(content: WebhookEvents) { const webhookUrls = await GetWebhookUrlInfo(); - logger.verbose(`Emitting webhook event ${content.type} to ${webhookUrls.length} clients.`); + log.verbose(`Emitting webhook event ${content.type} to ${webhookUrls.length} clients.`); // We don't actually care about the response of these. Just fire them and forget. for (const client of webhookUrls) { @@ -36,7 +34,7 @@ export async function EmitWebhookEvent(content: WebhookEvents) { }, }).catch((err: Error) => { // We don't care about errors. It's probably on their end. - logger.info(err.message); + log.info(err.message); }); } } diff --git a/typescript/server/src/main.ts b/typescript/server/src/main.ts index b3dd95363..6d4e05ae0 100644 --- a/typescript/server/src/main.ts +++ b/typescript/server/src/main.ts @@ -3,7 +3,7 @@ import type http from "http"; import { LoadDefaultClients } from "#lib/builtin-clients/builtin-clients"; import { VERSION_PRETTY } from "#lib/constants/version"; import { HandleSIGTERMGracefully } from "#lib/handlers/sigterm"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ApplyUnappliedMigrations } from "#lib/migration/migrations"; import { Env, ServerConfig, TachiConfig } from "#lib/setup/config"; import { AddNewUser } from "#server/router/api/v1/auth/auth"; @@ -20,14 +20,12 @@ import path from "path"; import { UserAuthLevels } from "../../common/src"; -const logger = CreateLogCtx(__filename); - -logger.info(`Booting ${TachiConfig.NAME} - ${VERSION_PRETTY} [ENV: ${Env.NODE_ENV}]`, { +log.info(`Booting ${TachiConfig.NAME} - ${VERSION_PRETTY} [ENV: ${Env.NODE_ENV}]`, { bootInfo: true, }); -logger.info(`Log level is set to ${Env.LOG_LEVEL}.`, { bootInfo: true }); +log.info(`Log level is set to ${Env.LOG_LEVEL}.`, { bootInfo: true }); -logger.info(`Loading sequence documents...`, { bootInfo: true }); +log.info(`Loading sequence documents...`, { bootInfo: true }); async function RunOnInit() { await InitSequenceDocs(); @@ -39,7 +37,7 @@ async function RunOnInit() { // If there are no folder chart lookups, initialise them. if (!r) { InitaliseFolderChartLookup().catch((err: unknown) => { - logger.error(`Failed to init folder-chart-lookup on first boot?`, { err }); + log.error(`Failed to init folder-chart-lookup on first boot?`, { err }); }); } }); @@ -48,10 +46,10 @@ async function RunOnInit() { const exists = await db.users.findOne({ id: 1 }); if (!exists) { - logger.info("First time setup in LOCAL DEV: Creating an admin user for you."); + log.info("First time setup in LOCAL DEV: Creating an admin user for you."); await AddNewUser("admin", "password", "admin@example.com", 1); await db.users.update({ id: 1 }, { $set: { authLevel: UserAuthLevels.ADMIN } }); - logger.info("Done! You have an admin user with password 'password'"); + log.info("Done! You have an admin user with password 'password'"); } } @@ -61,11 +59,11 @@ async function RunOnInit() { await fetch("https://example.com"); } catch (err) { if (ServerConfig.ALLOW_RUNNING_OFFLINE === true) { - logger.warn( + log.warn( `This instance of tachi-server cannot access the internet, however, ALLOW_RUNNING_OFFLINE was set. Allowing it anyway, but some things will not work.`, ); } else { - logger.crit( + log.fatal( `Cannot send HTTPS request to https://example.com. This instance of tachi-server cannot access the internet?`, err, () => { @@ -82,7 +80,7 @@ let instance: http.Server | https.Server; if (ServerConfig.ENABLE_SERVER_HTTPS === true) { if (Env.NODE_ENV === "production") { - logger.warn( + log.warn( "HTTPS Mode is enabled. This should not be used in production, and you should instead run behind a reverse proxy.", { bootInfo: true }, ); @@ -94,10 +92,10 @@ if (ServerConfig.ENABLE_SERVER_HTTPS === true) { const httpsServer = https.createServer({ key: privateKey, cert: certificate }, server); instance = httpsServer.listen(Env.PORT); - logger.info(`HTTPS Listening on port ${Env.PORT}`, { bootInfo: true }); + log.info(`HTTPS Listening on port ${Env.PORT}`, { bootInfo: true }); } else { instance = server.listen(Env.PORT); - logger.info(`HTTP Listening on port ${Env.PORT}`, { bootInfo: true }); + log.info(`HTTP Listening on port ${Env.PORT}`, { bootInfo: true }); } process.on("SIGTERM", () => { @@ -105,10 +103,10 @@ process.on("SIGTERM", () => { }); if (process.env.INVOKE_JOB_RUNNER) { - logger.info(`Spawning a tachi-server job runner inline.`, { bootInfo: true }); + log.info(`Spawning a tachi-server job runner inline.`, { bootInfo: true }); if (Env.NODE_ENV === "production") { - logger.warn( + log.warn( `Spawning inline tachi-server job runner in production. This is bad for performance.`, { bootInfo: true }, ); @@ -131,13 +129,13 @@ if (process.env.INVOKE_JOB_RUNNER) { ); jobProcess.on("error", (err) => { - logger.crit(`Failed to spawn job runner. Terminating process.`, { err }, () => { + log.fatal(`Failed to spawn job runner. Terminating process.`, { err }, () => { process.exit(1); }); }); process.on("beforeExit", () => { - logger.info(`Killing Job Runner.`); + log.info(`Killing Job Runner.`); jobProcess.kill(); }); } diff --git a/typescript/server/src/scripts/anonymise-db.ts b/typescript/server/src/scripts/anonymise-db.ts index 9e6356d41..a5669f022 100644 --- a/typescript/server/src/scripts/anonymise-db.ts +++ b/typescript/server/src/scripts/anonymise-db.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { execSync } from "child_process"; import { Command } from "commander"; import monk from "monk"; @@ -18,8 +18,6 @@ if (!path) { throw new Error("expected path!"); } -const logger = CreateLogCtx(__filename); - /** * Strips all name and private information from the database. * For use for things like future tachi-db-dumps? @@ -27,11 +25,11 @@ const logger = CreateLogCtx(__filename); * @param to The database to anonymise. DO NOT PASS THE PRODUCTION DATABASE TO THIS! */ async function AnonymiseDB(to: string) { - logger.info(`Connecting to ${to}.`); + log.info(`Connecting to ${to}.`); const clonedDB = monk(to); - logger.info(`Connected to ${to}.`); + log.info(`Connected to ${to}.`); const r1 = await clonedDB.get("user-private-information").update( {}, @@ -54,7 +52,7 @@ async function AnonymiseDB(to: string) { }, ); - logger.info(`Stripped private info.`, { r1 }); + log.info(`Stripped private info.`, { r1 }); const r2 = await clonedDB.get("users").update( {}, @@ -77,7 +75,7 @@ async function AnonymiseDB(to: string) { }, ); - logger.info(`Stripped username info.`, { r2 }); + log.info(`Stripped username info.`, { r2 }); const r3 = await clonedDB.get("sessions").update( {}, @@ -94,7 +92,7 @@ async function AnonymiseDB(to: string) { }, ); - logger.info(`Stripped session info.`, { r3 }); + log.info(`Stripped session info.`, { r3 }); const whitelist = [ "bms-course-lookup", @@ -136,11 +134,11 @@ async function AnonymiseDB(to: string) { if (!whitelist.includes(coll.name)) { await coll.drop(); - logger.info(`Removed collection ${coll.name}`); + log.info(`Removed collection ${coll.name}`); } } - logger.info(`Done! Closing.`); + log.info(`Done! Closing.`); process.exit(0); } @@ -149,7 +147,7 @@ if (require.main === module) { // Don't run any risks -- there's no way we're ever accidentally anonymising the production database. // any nsTo argument MUST start with anon- if (!path.includes("/anon-")) { - logger.error( + log.error( `Tried to clone to and anonymise ${path}, which is illegal. Anonymised DBs must start with anon-.`, () => { process.exit(1); @@ -158,11 +156,11 @@ if (require.main === module) { } else { AnonymiseDB(path) .then(() => { - logger.info(`Anonymised database successfully. Saved to ${path}.`); + log.info(`Anonymised database successfully. Saved to ${path}.`); process.exit(0); }) .catch((err: unknown) => { - logger.error(`Failed to anonymise database.`, { err }, () => { + log.error(`Failed to anonymise database.`, { err }, () => { process.exit(1); }); }); diff --git a/typescript/server/src/scripts/email/send-test-email.ts b/typescript/server/src/scripts/email/send-test-email.ts index 942c9aeb9..5b3d90661 100644 --- a/typescript/server/src/scripts/email/send-test-email.ts +++ b/typescript/server/src/scripts/email/send-test-email.ts @@ -1,14 +1,12 @@ import { SendEmail } from "#lib/email/client"; import { MainHTMLWrapper } from "#lib/email/formats"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { Command } from "commander"; const program = new Command(); program.option("-e, --email "); -const logger = CreateLogCtx(__filename); - program.parse(process.argv); const options: { email?: string } = program.opts(); @@ -18,18 +16,18 @@ if (!options.email) { if (require.main === module) { (async () => { - logger.info(`Sending email to ${options.email}.`); + log.info(`Sending email to ${options.email}.`); await SendEmail( options.email!, "Hello World", MainHTMLWrapper("Hello world! This is a test email for doing things."), "Hello world! This is a test email for doing things.", ); - logger.info(`Done.`); + log.info(`Done.`); process.exit(0); })().catch((err: unknown) => { - logger.error(`Failed to send test email.`, { err }, () => { + log.error(`Failed to send test email.`, { err }, () => { process.exit(1); }); }); diff --git a/typescript/server/src/scripts/init-sequence-docs.ts b/typescript/server/src/scripts/init-sequence-docs.ts index 0d7e146f1..1a93c8819 100644 --- a/typescript/server/src/scripts/init-sequence-docs.ts +++ b/typescript/server/src/scripts/init-sequence-docs.ts @@ -1,9 +1,7 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { InitSequenceDocs } from "#services/mongo/sequence-docs"; import { WrapScriptPromise } from "#utils/misc"; -const logger = CreateLogCtx(__filename); - if (require.main === module) { WrapScriptPromise(InitSequenceDocs(), logger); } diff --git a/typescript/server/src/scripts/invites/create-invite-code.ts b/typescript/server/src/scripts/invites/create-invite-code.ts index 98915b7e7..304ff4a11 100644 --- a/typescript/server/src/scripts/invites/create-invite-code.ts +++ b/typescript/server/src/scripts/invites/create-invite-code.ts @@ -1,10 +1,8 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { Random20Hex } from "#utils/misc"; import { Command } from "commander"; -const logger = CreateLogCtx(__filename); - const program = new Command(); program.option("-c, --code ", "The code for this invite."); @@ -28,12 +26,12 @@ db.invites consumedAt: null, }) .then(() => { - logger.info(`Created invite ${code}.`, () => { + log.info(`Created invite ${code}.`, () => { process.exit(0); }); }) .catch((err: unknown) => { - logger.error(`Failed to create invite ${code}`, { err }, () => { + log.error(`Failed to create invite ${code}`, { err }, () => { process.exit(1); }); }); diff --git a/typescript/server/src/scripts/load-seeds-mongo.ts b/typescript/server/src/scripts/load-seeds-mongo.ts index 32d94b749..540b63b03 100644 --- a/typescript/server/src/scripts/load-seeds-mongo.ts +++ b/typescript/server/src/scripts/load-seeds-mongo.ts @@ -1,7 +1,7 @@ import type { BulkWriteOperation, DeleteWriteOpResultObject } from "mongodb"; import type { ICollection } from "monk"; -import CreateLogCtx, { type KtLogger } from "#lib/logger/logger"; +import { log, type KtLogger } from "#lib/logger/log.js"; import { UpdateGoalsInFolder } from "#lib/score-import/framework/goals/goals"; import UpdateIsPrimaryStatus from "#lib/score-mutation/update-isprimary"; import { PullDatabaseSeeds } from "#lib/seeds/repo"; @@ -33,7 +33,7 @@ interface SyncInstructions { handler: ( c: Array, collection: ICollection, - logger: KtLogger, + log: KtLogger, collectionName: string, ) => Promise; } @@ -42,9 +42,9 @@ async function RemoveNotPresent>( documents: Array, collection: ICollection, field: keyof T, - logger: KtLogger, + log: KtLogger, ) { - logger.verbose(`Removing all documents that are no longer present.`); + log.verbose(`Removing all documents that are no longer present.`); // Remove anything no longer present. // Note that $nin is incredibly slow. @@ -54,7 +54,7 @@ async function RemoveNotPresent>( })) as DeleteWriteOpResultObject; if (r.deletedCount !== undefined && r.deletedCount > 0) { - logger.info(`Removed ${r.deletedCount} documents.`); + log.info(`Removed ${r.deletedCount} documents.`); } } @@ -62,7 +62,7 @@ async function GenericUpsert>( documents: Array, collection: ICollection, field: keyof T, - logger: KtLogger, + log: KtLogger, remove = false, update = true, ) { @@ -70,7 +70,7 @@ async function GenericUpsert>( await RemoveNotPresent(documents, collection, field, logger); } - logger.verbose(`Running bulkwrite.`); + log.verbose(`Running bulkwrite.`); const updateOps: Array> = []; const insertOps: Array> = []; @@ -90,7 +90,7 @@ async function GenericUpsert>( for (const document of documents) { i++; if (i % 10_000 === 0) { - logger.verbose(`On document ${i}/${documents.length}.`); + log.verbose(`On document ${i}/${documents.length}.`); } const exists = map.get(document[field]); @@ -107,7 +107,7 @@ async function GenericUpsert>( continue; } - logger.verbose(`Updating ${document[field]}`); + log.verbose(`Updating ${document[field]}`); updateOps.push({ replaceOne: { @@ -146,7 +146,7 @@ async function GenericUpsert>( const thingsChanged = updateOps.length + insertOps.length; if (thingsChanged === 0) { - logger.verbose(`No differences. Not performing any update.`); + log.verbose(`No differences. Not performing any update.`); } else { // update first, then insert new docs let up; @@ -161,7 +161,7 @@ async function GenericUpsert>( ins = await collection.bulkWrite(insertOps); } - logger.info(`Performed bulkWrite.`, { + log.info(`Performed bulkWrite.`, { up, ins, }); @@ -382,8 +382,6 @@ const syncInstructions: Array = [ }, ]; -const logger = CreateLogCtx("Database Sync"); - async function SynchroniseDBWithSeeds() { // Wait for mongo to connect first. await monkDB.then(() => void 0); @@ -391,45 +389,36 @@ async function SynchroniseDBWithSeeds() { const databaseSeedsRepo = await PullDatabaseSeeds(); for await (const { collectionName, data } of databaseSeedsRepo.IterateCollections()) { - const spawnLogger = CreateLogCtx(`${collectionName} Sync`); - if (collectionName.startsWith("songs-") || collectionName.startsWith("charts-")) { const game = collectionName.split("-")[1]; if (!TachiConfig.GAMES.includes(game as GameGroup)) { - spawnLogger.verbose( + log.verbose( `Skipping ${collectionName} (${game}) as it isn't for ${TachiConfig.NAME}.`, ); continue; } } - spawnLogger.verbose(`Found ${data.length} documents.`); + log.verbose(`Found ${data.length} documents.`); let matchedSomething = false; for (const syncInst of syncInstructions) { if (syncInst.pattern.exec(collectionName)) { - spawnLogger.info(`Starting handler...`); - await syncInst.handler( - data, - monkDB.get(collectionName), - spawnLogger, - collectionName, - ); + log.info(`Starting handler...`); + await syncInst.handler(data, monkDB.get(collectionName), log, collectionName); matchedSomething = true; break; } } if (!matchedSomething) { - spawnLogger.warn( - `Collection ${collectionName} didn't match any sync instructions. Skipping.`, - ); + log.warn(`Collection ${collectionName} didn't match any sync instructions. Skipping.`); } } - logger.info(`Done.`); + log.info(`Done.`); await databaseSeedsRepo.Destroy(); } diff --git a/typescript/server/src/scripts/make-user-admin.ts b/typescript/server/src/scripts/make-user-admin.ts index 56d69806c..bf28ebb67 100644 --- a/typescript/server/src/scripts/make-user-admin.ts +++ b/typescript/server/src/scripts/make-user-admin.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { WrapScriptPromise } from "#utils/misc"; import { FormatUserDoc, ResolveUser } from "#utils/user"; @@ -7,13 +7,11 @@ import { UserAuthLevels } from "../../../common/src"; const userID = process.argv[2]; -const logger = CreateLogCtx(__filename); - async function MakeUserAdmin(userID: string) { const user = await ResolveUser(userID); if (!user) { - logger.error(`No such user '${userID}' exists.`); + log.error(`No such user '${userID}' exists.`); throw new Error(`No such user '${userID}' exists.`); } @@ -28,11 +26,11 @@ async function MakeUserAdmin(userID: string) { }, ); - logger.info(`Made ${FormatUserDoc(user)} an administrator.`); + log.info(`Made ${FormatUserDoc(user)} an administrator.`); } if (!userID) { - logger.error(`Usage: pnpm make-user-admin .`); + log.error(`Usage: pnpm make-user-admin .`); throw new Error(`No userID provided.`); } diff --git a/typescript/server/src/scripts/state-sync/dedupe-score-ids.ts b/typescript/server/src/scripts/state-sync/dedupe-score-ids.ts index e55a260f3..749e86a88 100644 --- a/typescript/server/src/scripts/state-sync/dedupe-score-ids.ts +++ b/typescript/server/src/scripts/state-sync/dedupe-score-ids.ts @@ -1,13 +1,11 @@ import type { IObjectID } from "monk"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { WrapScriptPromise } from "#utils/misc"; import type { integer } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - async function DedupeScoreIDs() { const dups: Array<{ count: integer; dups: Array; id: string }> = await db.scores.aggregate( @@ -28,7 +26,7 @@ async function DedupeScoreIDs() { { allowDiskUse: true }, ); - logger.info(`Found ${dups.length} dups.`); + log.info(`Found ${dups.length} dups.`); for (const dup of dups) { dup.dups.shift(); diff --git a/typescript/server/src/scripts/state-sync/recalc-all-scores.ts b/typescript/server/src/scripts/state-sync/recalc-all-scores.ts index 94ca4e9a5..6ff020b60 100644 --- a/typescript/server/src/scripts/state-sync/recalc-all-scores.ts +++ b/typescript/server/src/scripts/state-sync/recalc-all-scores.ts @@ -1,9 +1,7 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { RecalcAllScores } from "#utils/calculations/recalc-scores"; import { WrapScriptPromise } from "#utils/misc"; -const logger = CreateLogCtx(__filename); - if (require.main === module) { WrapScriptPromise(RecalcAllScores(), logger); } diff --git a/typescript/server/src/scripts/state-sync/recalc-game-profiles.ts b/typescript/server/src/scripts/state-sync/recalc-game-profiles.ts index 0a7e5a12b..c04221ae3 100644 --- a/typescript/server/src/scripts/state-sync/recalc-game-profiles.ts +++ b/typescript/server/src/scripts/state-sync/recalc-game-profiles.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { UpdateUsersGamePlaytypeStats } from "#lib/score-import/framework/ugpt-stats/update-ugpt-stats"; import type { GameGroup, Playtype, ScoreDocument } from "../../../../common/src"; @@ -7,8 +7,6 @@ import db from "#services/mongo/db"; import { WrapScriptPromise } from "#utils/misc"; import { FormatUserDoc } from "#utils/user"; -const logger = CreateLogCtx(__filename); - export async function RecalcGameProfiles() { const users = await db.users.find({}); @@ -30,17 +28,17 @@ export async function RecalcGameProfiles() { }, ]); - logger.info(`Found ${gpts.length} GPTs for ${FormatUserDoc(user)}`); + log.info(`Found ${gpts.length} GPTs for ${FormatUserDoc(user)}`); for (const gpt of gpts) { const { game, playtype } = gpt._id; - logger.info(`Updating ${FormatUserDoc(user)}'s ${game} ${playtype} stats.`); + log.info(`Updating ${FormatUserDoc(user)}'s ${game} ${playtype} stats.`); await UpdateUsersGamePlaytypeStats(game, playtype, user.id, null, logger); } } - logger.info(`Done.`); + log.info(`Done.`); } if (require.main === module) { diff --git a/typescript/server/src/scripts/state-sync/recalc-sessions.ts b/typescript/server/src/scripts/state-sync/recalc-sessions.ts index fb83e6dc3..1a389f21e 100644 --- a/typescript/server/src/scripts/state-sync/recalc-sessions.ts +++ b/typescript/server/src/scripts/state-sync/recalc-sessions.ts @@ -1,9 +1,7 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { RecalcSessions } from "#utils/calculations/recalc-sessions"; import { WrapScriptPromise } from "#utils/misc"; -const logger = CreateLogCtx(__filename); - if (require.main === module) { WrapScriptPromise(RecalcSessions(), logger); } diff --git a/typescript/server/src/scripts/state-sync/rederive-all-scores.ts b/typescript/server/src/scripts/state-sync/rederive-all-scores.ts index 4eb254e7a..1e1acbe40 100644 --- a/typescript/server/src/scripts/state-sync/rederive-all-scores.ts +++ b/typescript/server/src/scripts/state-sync/rederive-all-scores.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import UpdateScore from "#lib/score-mutation/update-score"; import db from "#services/mongo/db"; import { UpdateAllPBs } from "#utils/calculations/recalc-scores"; @@ -8,8 +8,6 @@ import { EfficientDBIterate } from "#utils/efficient-db-iterate"; * Effectively, rerun CalculateData and DeriveMetrics on all scores. */ async function main() { - const logger = CreateLogCtx(__filename); - await EfficientDBIterate( db.scores, async (score) => { @@ -27,8 +25,8 @@ async function main() { // all scores are guaranteeably correct. ); } catch (err) { - logger.warn(err); - logger.warn("Continuing through the error."); + log.warn(err); + log.warn("Continuing through the error."); } }, // no-op diff --git a/typescript/server/src/scripts/state-sync/sync-state.ts b/typescript/server/src/scripts/state-sync/sync-state.ts index f08194a25..bba47ad81 100644 --- a/typescript/server/src/scripts/state-sync/sync-state.ts +++ b/typescript/server/src/scripts/state-sync/sync-state.ts @@ -1,11 +1,9 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { RecalcAllScores, UpdateAllPBs } from "#utils/calculations/recalc-scores"; import { RecalcSessions } from "#utils/calculations/recalc-sessions"; import { RecalcGameProfiles } from "./recalc-game-profiles"; -const logger = CreateLogCtx(__filename); - (async () => { // note: technically some of this stuff is unecessary/duplicate calculation // however it's idempotent, so, we should be good. @@ -14,11 +12,11 @@ const logger = CreateLogCtx(__filename); await RecalcGameProfiles(); await RecalcSessions(); - logger.info(`Completely done!`, () => { + log.info(`Completely done!`, () => { process.exit(0); }); })().catch((err: unknown) => { - logger.error(`Failed to sync state.`, { err }, () => { + log.error(`Failed to sync state.`, { err }, () => { process.exit(1); }); }); diff --git a/typescript/server/src/scripts/state-sync/update-all-pbs.ts b/typescript/server/src/scripts/state-sync/update-all-pbs.ts index d96e1f017..dfe642506 100644 --- a/typescript/server/src/scripts/state-sync/update-all-pbs.ts +++ b/typescript/server/src/scripts/state-sync/update-all-pbs.ts @@ -1,9 +1,7 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { UpdateAllPBs } from "#utils/calculations/recalc-scores"; import { WrapScriptPromise } from "#utils/misc"; -const logger = CreateLogCtx(__filename); - if (require.main === module) { WrapScriptPromise(UpdateAllPBs(), logger); } diff --git a/typescript/server/src/server/middleware/auth.ts b/typescript/server/src/server/middleware/auth.ts index 0910be7d1..700c7678d 100644 --- a/typescript/server/src/server/middleware/auth.ts +++ b/typescript/server/src/server/middleware/auth.ts @@ -2,7 +2,7 @@ import type { RequestHandler } from "express"; import type { Session, SessionData } from "express-session"; import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { TachiConfig } from "#lib/setup/config"; import db from "#services/mongo/db"; import { IsNullishOrEmptyStr, SplitAuthorizationHeader } from "#utils/misc"; @@ -14,8 +14,6 @@ import { UserAuthLevels, } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - const GuestToken: APITokenDocument = { token: null, userID: null, @@ -160,9 +158,7 @@ export const RequirePermissions = // This isn't possible on paper, but maybe some insane stuff has happened to lead this to happen. if (req[SYMBOL_TACHI_API_AUTH] === undefined) { - logger.error( - `RequirePermissions middleware was hit without any TachiAPIAuthentication?`, - ); + log.error(`RequirePermissions middleware was hit without any TachiAPIAuthentication?`); return res.status(500).json({ success: false, @@ -186,7 +182,7 @@ export const RequirePermissions = } if (missingPerms.length > 0) { - logger.info( + log.info( `IP ${req.ip} - userID ${ req[SYMBOL_TACHI_API_AUTH].userID } had insufficient permissions for request ${req.method} ${ @@ -210,7 +206,7 @@ const CreateRequireNotGuest = // See above -- this isn't possible on paper, but I want to check it anyway. if (req[SYMBOL_TACHI_API_AUTH] === undefined) { - logger.error(`RequirePermissions middleware was hit without any TachiAPIData?`); + log.error(`RequirePermissions middleware was hit without any TachiAPIData?`); return res.status(500).json({ success: false, description: "An internal error has occured.", @@ -218,7 +214,7 @@ const CreateRequireNotGuest = } if (req[SYMBOL_TACHI_API_AUTH].userID === null) { - logger.info(`Request to ${req.method} ${req.url} was attempted by guest.`); + log.info(`Request to ${req.method} ${req.url} was attempted by guest.`); return res.status(401).json({ success: false, [errorKeyName]: "This endpoint requires authentication.", diff --git a/typescript/server/src/server/middleware/multer-upload.ts b/typescript/server/src/server/middleware/multer-upload.ts index b9bcaff68..29a99b5aa 100644 --- a/typescript/server/src/server/middleware/multer-upload.ts +++ b/typescript/server/src/server/middleware/multer-upload.ts @@ -1,20 +1,17 @@ import type { RequestHandler } from "express"; import { SIXTEEN_MEGABTYES } from "#lib/constants/filesize"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import multer, { MulterError } from "multer"; import type { integer } from "../../../../common/src"; -const defaultLogger = CreateLogCtx(__filename); - // 16MB export const DefaultMulterUpload = multer({ limits: { fileSize: 1024 * 1024 * 16 } }); export const CreateMulterSingleUploadMiddleware = ( fieldName: string, fileSize: integer = SIXTEEN_MEGABTYES, - logger = defaultLogger, throwOnNoFile = true, ): RequestHandler => { const UploadMW = multer({ limits: { fileSize } }).single(fieldName); @@ -22,7 +19,7 @@ export const CreateMulterSingleUploadMiddleware = ( return (req, res, next) => { UploadMW(req, res, (err: unknown) => { if (err instanceof MulterError) { - logger.info(`Multer Error.`, { err }); + log.info(`Multer Error.`, { err }); return res.status(400).json({ success: false, @@ -30,7 +27,7 @@ export const CreateMulterSingleUploadMiddleware = ( "File provided was too large, corrupt, or provided in the wrong field.", }); } else if (err !== undefined && err !== null) { - logger.error(`Unknown file import error.`, { err }); + log.error(`Unknown file import error.`, { err }); return res.status(500).json({ success: false, diff --git a/typescript/server/src/server/middleware/prudence-validate.ts b/typescript/server/src/server/middleware/prudence-validate.ts index eae4dfb29..e342e2e5e 100644 --- a/typescript/server/src/server/middleware/prudence-validate.ts +++ b/typescript/server/src/server/middleware/prudence-validate.ts @@ -1,6 +1,6 @@ import type { RequestHandler } from "express-serve-static-core"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { type ErrorMessages, type MiddlewareErrorHandler, @@ -9,8 +9,6 @@ import { type PrudenceSchema, } from "prudence"; -const logger = CreateLogCtx(__filename); - export function TruncateString(string: string, len = 30) { if (string.length < len) { return string; diff --git a/typescript/server/src/server/middleware/rate-limiter.ts b/typescript/server/src/server/middleware/rate-limiter.ts index 9def016dd..c0609331b 100644 --- a/typescript/server/src/server/middleware/rate-limiter.ts +++ b/typescript/server/src/server/middleware/rate-limiter.ts @@ -1,7 +1,7 @@ import type { Request } from "express"; import { ONE_MINUTE } from "#lib/constants/time"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { Env, ServerConfig, TachiConfig } from "#lib/setup/config"; import { RedisClient } from "#services/redis/redis"; import { OmitUndefinedKeys } from "#utils/misc"; @@ -10,8 +10,6 @@ import RateLimitRedis from "rate-limit-redis"; import type { integer } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - function CreateStore(name: string) { // undefined forces a default to an in-memory store // So we use that when in testing or localdev. @@ -31,7 +29,7 @@ const CreateRateLimitOptions = (max: integer, name: string, windowMs?: number): OmitUndefinedKeys({ max, onLimitReached: (req: Request) => { - logger.warn(`User ${req.ip} hit rate limit.`, { + log.warn(`User ${req.ip} hit rate limit.`, { url: req.url, method: req.method, hideFromConsole: ["req"], diff --git a/typescript/server/src/server/middleware/request-logger.ts b/typescript/server/src/server/middleware/request-logger.ts index f7c0c7431..845ba4767 100644 --- a/typescript/server/src/server/middleware/request-logger.ts +++ b/typescript/server/src/server/middleware/request-logger.ts @@ -1,13 +1,11 @@ import type { RequestHandler, Response } from "express-serve-static-core"; import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { TachiConfig } from "#lib/setup/config"; import type { APITokenDocument } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - // https://stackoverflow.com/a/64546368/11885828 // Taken from Jonathan Turnock - This is an *incredibly* nice // solution for post-request express logging! @@ -32,7 +30,7 @@ export const RequestLoggerMiddleware: RequestHandler = (req, res, next) => { } } - logger.debug(`Received request ${req.method} ${req.originalUrl}.`, { + log.debug(`Received request ${req.method} ${req.originalUrl}.`, { query: req.query, body: safeBody, }); @@ -80,12 +78,9 @@ export const RequestLoggerMiddleware: RequestHandler = (req, res, next) => { contents, ); } else if (res.statusCode < 500) { - logger.info(`(${req.method} ${req.originalUrl}) Returned ${res.statusCode}.`, contents); + log.info(`(${req.method} ${req.originalUrl}) Returned ${res.statusCode}.`, contents); } else { - logger.error( - `(${req.method} ${req.originalUrl}) Returned ${res.statusCode}.`, - contents, - ); + log.error(`(${req.method} ${req.originalUrl}) Returned ${res.statusCode}.`, contents); } }); diff --git a/typescript/server/src/server/middleware/update-last-seen.ts b/typescript/server/src/server/middleware/update-last-seen.ts index a0d2b69fc..e309cc746 100644 --- a/typescript/server/src/server/middleware/update-last-seen.ts +++ b/typescript/server/src/server/middleware/update-last-seen.ts @@ -2,7 +2,7 @@ import type { RequestHandler } from "express"; import db from "#services/mongo/db"; -export const UpdateLastSeen: RequestHandler = (req, res, next) => { +export const UpdateLastSeen: RequestHandler = (req, _res, next) => { if (req.session.tachi?.user.id === undefined) { next(); return; diff --git a/typescript/server/src/server/router/api/v1/admin/router.test.ts b/typescript/server/src/server/router/api/v1/admin/router.test.ts index da2f3dfac..35581f363 100644 --- a/typescript/server/src/server/router/api/v1/admin/router.test.ts +++ b/typescript/server/src/server/router/api/v1/admin/router.test.ts @@ -1,5 +1,5 @@ import { ONE_MINUTE } from "#lib/constants/time"; -import { ChangeRootLogLevel, GetLogLevel } from "#lib/logger/logger"; +import { ChangeRootLogLevel, GetLogLevel } from "#lib/logger/log.js"; import { Env, ServerConfig } from "#lib/setup/config"; import db from "#services/mongo/db"; import { CreateFakeAuthCookie } from "#test-utils/fake-auth"; diff --git a/typescript/server/src/server/router/api/v1/admin/router.ts b/typescript/server/src/server/router/api/v1/admin/router.ts index 3e06cf08a..f24b9a2fa 100644 --- a/typescript/server/src/server/router/api/v1/admin/router.ts +++ b/typescript/server/src/server/router/api/v1/admin/router.ts @@ -1,11 +1,10 @@ import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import { ONE_MINUTE } from "#lib/constants/time"; -import CreateLogCtx, { ChangeRootLogLevel, GetLogLevel } from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { SendSiteAnnouncementNotification } from "#lib/notifications/notification-wrappers"; import { UpdateGoalsForUser } from "#lib/score-import/framework/goals/goals"; import { UpdateQuestsForUser } from "#lib/score-import/framework/quests/quests"; import { DeleteMultipleScores, DeleteScore } from "#lib/score-mutation/delete-scores"; -import { Env, ServerConfig, TachiConfig } from "#lib/setup/config"; +import { TachiConfig } from "#lib/setup/config"; import prValidate from "#server/middleware/prudence-validate"; import db from "#services/mongo/db"; import { RecalcAllScores, UpdateAllPBs } from "#utils/calculations/recalc-scores"; @@ -25,8 +24,6 @@ import { UserAuthLevels, } from "../../../../../../../common/src"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); const RequireAdminLevel: RequestHandler = async (req, res, next) => { @@ -40,7 +37,7 @@ const RequireAdminLevel: RequestHandler = async (req, res, next) => { const userDoc = await GetUserWithID(req[SYMBOL_TACHI_API_AUTH].userID); if (!userDoc) { - logger.severe( + log.error( `Api Token ${req[SYMBOL_TACHI_API_AUTH].token} is assigned to ${req[SYMBOL_TACHI_API_AUTH].userID}, who does not exist?`, ); @@ -60,67 +57,8 @@ const RequireAdminLevel: RequestHandler = async (req, res, next) => { next(); }; -const LOG_LEVEL = Env.LOG_LEVEL; - router.use(RequireAdminLevel); -let currentLogLevelTimer: NodeJS.Timeout | null = null; - -/** - * Changes the current server log level to the provided `logLevel` in the request body. - * - * @param logLevel - The log level to change to. - * @param duration - The amount of minutes to wait before changing the log level back to the default. - * Defaults to 60 minutes. - * @param noReset - If true, do not ever reset this decision. - * - * @name POST /api/v1/admin/change-log-level - */ -router.post( - "/change-log-level", - prValidate({ - logLevel: p.isIn("crit", "severe", "error", "warn", "info", "verbose", "debug"), - duration: p.optional(p.isPositiveNonZero), - noReset: p.optional("boolean"), - }), - (req, res) => { - const body = req.safeBody as { - duration?: integer; - logLevel: "crit" | "debug" | "error" | "info" | "severe" | "verbose" | "warn"; - noReset?: boolean; - }; - - const logLevel = GetLogLevel(); - - ChangeRootLogLevel(body.logLevel); - - const duration = body.duration ?? 60; - - if (currentLogLevelTimer) { - logger.verbose(`Removing last timer to reset log level to ${LOG_LEVEL}.`); - clearTimeout(currentLogLevelTimer); - } - - logger.info(`Log level has been changed to ${body.logLevel}.`); - - if (body.noReset !== true) { - logger.info(`This will reset to "${LOG_LEVEL}" level in ${duration} minutes.`); - - currentLogLevelTimer = setTimeout(() => { - logger.verbose(`Changing log level back to ${LOG_LEVEL}.`); - ChangeRootLogLevel(LOG_LEVEL); - logger.info(`Reset log level back to ${LOG_LEVEL}.`); - }, duration * ONE_MINUTE); - } - - return res.status(200).json({ - success: true, - description: `Changed log level from ${logLevel} to ${body.logLevel}.`, - body: {}, - }); - }, -); - /** * Resynchronises all PBs that match the given query or users. * @@ -441,8 +379,6 @@ router.post("/reprocess-all-goals", async (req, res) => { for (const ugpt of ugpts) { promises.push(async () => { - const logger = CreateLogCtx(`${ugpt.userID} ${ugpt.game}`); - const goalSubs = await db["goal-subs"].find({ game: ugpt.game, playtype: ugpt.playtype, @@ -459,7 +395,7 @@ router.post("/reprocess-all-goals", async (req, res) => { goalID: { $in: goalSubs.map((e) => e.goalID) }, }); - await UpdateGoalsForUser(goals, goalSubsMap, ugpt.userID, logger); + await UpdateGoalsForUser(goals, goalSubsMap, ugpt.userID, log); const allQuestSubs = await db["quest-subs"].find({ game: ugpt.game, @@ -471,7 +407,7 @@ router.post("/reprocess-all-goals", async (req, res) => { questID: { $in: allQuestSubs.map((e) => e.questID) }, }); - await UpdateQuestsForUser(quests, allQuestSubs, ugpt.game, ugpt.userID, logger); + await UpdateQuestsForUser(quests, allQuestSubs, ugpt.game, ugpt.userID, log); }); } diff --git a/typescript/server/src/server/router/api/v1/auth/auth.ts b/typescript/server/src/server/router/api/v1/auth/auth.ts index a0a0e93c4..534174099 100644 --- a/typescript/server/src/server/router/api/v1/auth/auth.ts +++ b/typescript/server/src/server/router/api/v1/auth/auth.ts @@ -1,6 +1,6 @@ import type { PrivateUserInfoDocument } from "#utils/types"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { Env, ServerConfig } from "#lib/setup/config"; import db from "#services/mongo/db"; import nodeFetch from "#utils/fetch"; @@ -17,8 +17,6 @@ import { type UserSettingsDocument, } from "../../../../../../../common/src"; -const logger = CreateLogCtx(__filename); - const BCRYPT_SALT_ROUNDS = 12; export const ValidatePassword = (self: unknown) => @@ -38,7 +36,7 @@ export function PasswordCompare(plaintext: string, password: string) { } export function ReinstateInvite(code: string) { - logger.info(`Reinstated Invite ${code}`); + log.info(`Reinstated Invite ${code}`); return db.invites.update( { code, @@ -65,7 +63,7 @@ export async function AddNewInvite(user: UserDocument) { consumedBy: null, }); - logger.info(`User ${FormatUserDoc(user)} created an invite.`); + log.info(`User ${FormatUserDoc(user)} created an invite.`); return result; } @@ -90,7 +88,7 @@ export async function AddNewUser( ) { const hashedPassword = await HashPassword(plaintext); - logger.verbose(`Hashed password for ${username}.`); + log.verbose(`Hashed password for ${username}.`); const userDoc: UserDocument = { id: userID, @@ -132,7 +130,7 @@ export function InsertPrivateUserInfo(userID: integer, hashedPassword: string, e } export function InsertDefaultUserSettings(userID: integer) { - logger.verbose(`Inserting default settings for ${userID}.`); + log.verbose(`Inserting default settings for ${userID}.`); const UserSettingsDocument: UserSettingsDocument = { userID, following: [], @@ -165,7 +163,7 @@ export async function ValidateCaptcha( ); if (err) { - logger.warn( + log.warn( `Google ReCaptcha returned something without a success property? Assuming this captcha check failed.`, { googleCaptchaRes, err }, ); @@ -176,7 +174,7 @@ export async function ValidateCaptcha( const gcr = googleCaptchaRes as { success: boolean }; if (!gcr.success) { - logger.verbose(`Failed GCaptcha response`, { gcr }); + log.verbose(`Failed GCaptcha response`, { gcr }); } return gcr.success; diff --git a/typescript/server/src/server/router/api/v1/auth/router.ts b/typescript/server/src/server/router/api/v1/auth/router.ts index 8022fe7dc..6e0f49e03 100644 --- a/typescript/server/src/server/router/api/v1/auth/router.ts +++ b/typescript/server/src/server/router/api/v1/auth/router.ts @@ -1,6 +1,6 @@ import { SendEmail } from "#lib/email/client"; import { EmailFormatResetPassword, EmailFormatVerifyEmail } from "#lib/email/formats"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { Env, ServerConfig, TachiConfig } from "#lib/setup/config"; import prValidate from "#server/middleware/prudence-validate"; import { @@ -36,8 +36,6 @@ import { ValidatePassword, } from "./auth"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); /** @@ -73,30 +71,30 @@ router.post( username: string; }; - logger.verbose(`Received login request with username ${body.username} (${req.ip})`); + log.verbose(`Received login request with username ${body.username} (${req.ip})`); /* istanbul ignore next */ if (Env.NODE_ENV === "production" || Env.NODE_ENV === "staging") { - logger.verbose("Validating captcha..."); + log.verbose("Validating captcha..."); const validCaptcha = await ValidateCaptcha(body.captcha, req.socket.remoteAddress); if (!validCaptcha) { - logger.verbose("Captcha failed."); + log.verbose("Captcha failed."); return res.status(400).json({ success: false, description: `Captcha failed.`, }); } - logger.verbose("Captcha validated!"); + log.verbose("Captcha validated!"); } else { - logger.warn("Skipped captcha check because not in production."); + log.warn("Skipped captcha check because not in production."); } const requestedUser = await GetUserCaseInsensitive(body.username); if (!requestedUser) { - logger.verbose(`Invalid username for login ${body.username}.`); + log.verbose(`Invalid username for login ${body.username}.`); return res.status(404).json({ success: false, description: `This user does not exist.`, @@ -106,7 +104,7 @@ router.post( const privateInfo = await GetUserPrivateInfo(requestedUser.id); if (!privateInfo) { - logger.severe( + log.error( `State desync for user ${FormatUserDoc( requestedUser, )}. This user has no password/email information?`, @@ -122,7 +120,7 @@ router.post( const passwordMatch = await PasswordCompare(body["!password"], privateInfo.password); if (!passwordMatch) { - logger.verbose("Invalid password provided."); + log.verbose("Invalid password provided."); return res.status(403).json({ success: false, description: `Invalid password.`, @@ -132,7 +130,7 @@ router.post( const user = await GetUserWithID(requestedUser.id); if (!user) { - logger.severe(`User logged in as someone who does not exist?`, { requestedUser }); + log.error(`User logged in as someone who does not exist?`, { requestedUser }); return res.status(500).json({ success: false, description: `An internal server error has occured.`, @@ -142,13 +140,13 @@ router.post( let settings = await GetSettingsForUser(requestedUser.id); if (!settings) { - logger.warn(`User ${FormatUserDoc(user)} has no settings. Inserting default settings.`); + log.warn(`User ${FormatUserDoc(user)} has no settings. Inserting default settings.`); settings = await InsertDefaultUserSettings(user.id); } MountAuthCookie(req, user, settings); - logger.verbose(`${FormatUserDoc(requestedUser)} Logged in.`); + log.verbose(`${FormatUserDoc(requestedUser)} Logged in.`); return res.status(200).json({ success: true, @@ -211,30 +209,30 @@ router.post( }); } - logger.verbose(`received register request with username ${body.username} (${req.ip})`); + log.verbose(`received register request with username ${body.username} (${req.ip})`); /* istanbul ignore next */ if (Env.NODE_ENV === "production" || Env.NODE_ENV === "staging") { - logger.verbose("Validating captcha..."); + log.verbose("Validating captcha..."); const validCaptcha = await ValidateCaptcha(body.captcha, req.socket.remoteAddress); if (!validCaptcha) { - logger.verbose("Captcha failed."); + log.verbose("Captcha failed."); return res.status(400).json({ success: false, description: `Captcha failed.`, }); } - logger.verbose("Captcha validated."); + log.verbose("Captcha validated."); } else { - logger.warn("Skipped captcha check because not in production."); + log.warn("Skipped captcha check because not in production."); } const existingUser = await GetUserCaseInsensitive(body.username); if (existingUser) { - logger.verbose(`Invalid username ${body.username}, already in use.`); + log.verbose(`Invalid username ${body.username}, already in use.`); return res.status(409).json({ success: false, description: "This username is already in use.", @@ -244,7 +242,7 @@ router.post( const existingEmail = await CheckIfEmailInUse(body.email); if (existingEmail) { - logger.info(`User attempted to sign up with email that was already in use.`); + log.info(`User attempted to sign up with email that was already in use.`); return res.status(409).json({ success: false, description: `This email is already in use.`, @@ -272,14 +270,14 @@ router.post( ); if (!inviteCodeDoc) { - logger.info(`Invalid invite code given: ${body.inviteCode}.`); + log.info(`Invalid invite code given: ${body.inviteCode}.`); return res.status(401).json({ success: false, description: `This invite code is not valid.`, }); } - logger.info(`Consumed invite ${inviteCodeDoc.code}.`); + log.info(`Consumed invite ${inviteCodeDoc.code}.`); } // if we get to this point, We're good to create the user. @@ -322,14 +320,14 @@ router.post( body: user, }); } catch (err) { - logger.error(`Bailed on user creation ${body.username}.`, { err }); + log.error(`Bailed on user creation ${body.username}.`, { err }); if (ServerConfig.INVITE_CODE_CONFIG && body.inviteCode !== undefined) { await ReinstateInvite(body.inviteCode); } if (hasInsertedUserID !== null) { - logger.warn( + log.warn( `Removing user ${body.username} (#${hasInsertedUserID}), as their document was created, but creation still failed.`, ); await db.users.remove({ username: body.username }); @@ -416,9 +414,7 @@ router.post("/resend-verify-email", HyperAggressiveRateLimitMiddleware, async (r const verifyInfo = await db["verify-email-codes"].findOne({ userID }); if (!verifyInfo) { - logger.warn( - `Attempted to send reset email to ${userID}, but no verifyInfo was set for them.`, - ); + log.warn(`Attempted to send reset email to ${userID}, but no verifyInfo was set for them.`); return; } @@ -476,7 +472,7 @@ router.post( body.email = body.email.toLowerCase(); - logger.debug(`received password reset request for ${body.email}.`); + log.debug(`received password reset request for ${body.email}.`); // For timing attack and infosec reasons, we can't do anything but **immediately** return here. res.status(202).json({ @@ -493,7 +489,7 @@ router.post( const user = await db.users.findOne({ id: userPrivateInfo.userID }); if (!user) { - logger.severe( + log.error( `User ${userPrivateInfo.userID} has private information but no real account.`, ); return; @@ -501,7 +497,7 @@ router.post( const code = `M${Random20Hex()}`; - logger.verbose(`Created password reset code for ${FormatUserDoc(user)}.`); + log.verbose(`Created password reset code for ${FormatUserDoc(user)}.`); await db["password-reset-codes"].insert({ code, @@ -513,7 +509,7 @@ router.post( void SendEmail(userPrivateInfo.email, "Reset Password", html, text); } else { - logger.info( + log.info( `Silently rejected password reset request for ${body.email}, as no user has this email.`, ); } @@ -566,7 +562,7 @@ router.post( }, ); - logger.info(`User ${code.userID} reset their password.`); + log.info(`User ${code.userID} reset their password.`); return res.status(200).json({ success: true, diff --git a/typescript/server/src/server/router/api/v1/clients/router.ts b/typescript/server/src/server/router/api/v1/clients/router.ts index e588bc504..270ff4be4 100644 --- a/typescript/server/src/server/router/api/v1/clients/router.ts +++ b/typescript/server/src/server/router/api/v1/clients/router.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ServerConfig } from "#lib/setup/config"; import prValidate from "#server/middleware/prudence-validate"; import db from "#services/mongo/db"; @@ -17,8 +17,6 @@ import { } from "../../../../../../../common/src"; import { GetClientFromID, RequireOwnershipOfClient } from "./middleware"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); /** @@ -158,7 +156,7 @@ router.post( await db["api-clients"].insert(clientDoc); - logger.info( + log.info( `User ${FormatUserDoc(req.session.tachi.user)} created a new API Client ${ body.name } (${clientID}).`, @@ -274,7 +272,7 @@ router.patch( }, ); - logger.info( + log.info( `API Client ${client.name} (${client.clientID}) has been renamed to ${body.name}.`, ); @@ -300,7 +298,7 @@ router.post( const client = GetTachiData(req, "apiClientDoc"); const clientName = `${client.name} (${client.clientID})`; - logger.info(`received request to reset client secret for ${clientName}`); + log.info(`received request to reset client secret for ${clientName}`); const newSecret = Random20Hex(); @@ -313,7 +311,7 @@ router.post( }, ); - logger.info(`Reset secret for ${clientName}.`); + log.info(`Reset secret for ${clientName}.`); return res.status(200).json({ success: true, @@ -333,20 +331,20 @@ router.delete("/:clientID", GetClientFromID, RequireOwnershipOfClient, async (re const clientName = `${client.name} (${client.clientID})`; - logger.info(`received request to destroy API Client ${client.name} (${client.clientID})`); + log.info(`received request to destroy API Client ${client.name} (${client.clientID})`); - logger.verbose(`Removing API Client ${clientName}.`); + log.verbose(`Removing API Client ${clientName}.`); await db["api-clients"].remove({ clientID: client.clientID, }); - logger.info(`Removed API Client ${clientName}.`); + log.info(`Removed API Client ${clientName}.`); - logger.verbose(`Removing all associated api tokens.`); + log.verbose(`Removing all associated api tokens.`); const result = await db["api-tokens"].remove({ fromOAuth2Client: client.clientID, }); - logger.info(`Removed ${result.deletedCount} api tokens from ${clientName}.`); + log.info(`Removed ${result.deletedCount} api tokens from ${clientName}.`); return res.status(200).json({ success: true, diff --git a/typescript/server/src/server/router/api/v1/games/_game/_playtype/charts/_chartID/router.ts b/typescript/server/src/server/router/api/v1/games/_game/_playtype/charts/_chartID/router.ts index 17564e498..717c0996c 100644 --- a/typescript/server/src/server/router/api/v1/games/_game/_playtype/charts/_chartID/router.ts +++ b/typescript/server/src/server/router/api/v1/games/_game/_playtype/charts/_chartID/router.ts @@ -1,6 +1,6 @@ import type { FilterQuery } from "mongodb"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { SearchUsersRegExp } from "#lib/search/search"; import db from "#services/mongo/db"; import { IsString } from "#utils/misc"; @@ -12,8 +12,6 @@ import { Router } from "express"; import { type FolderDocument, FormatChart } from "../../../../../../../../../../../common/src"; import { ValidateAndGetChart } from "./middleware"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); router.use(ValidateAndGetChart); @@ -32,7 +30,7 @@ router.get("/", async (req, res) => { }); if (!song) { - logger.severe( + log.error( `Song ${chart.songID} does not exist, yet chart ${chart.chartID} has it as a parent?`, ); diff --git a/typescript/server/src/server/router/api/v1/games/_game/_playtype/charts/router.ts b/typescript/server/src/server/router/api/v1/games/_game/_playtype/charts/router.ts index 3694212da..041274fab 100644 --- a/typescript/server/src/server/router/api/v1/games/_game/_playtype/charts/router.ts +++ b/typescript/server/src/server/router/api/v1/games/_game/_playtype/charts/router.ts @@ -1,5 +1,5 @@ import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ResolveSongAndChart } from "#lib/score-import/import-types/common/batch-manual/converter"; import { SearchSpecificGameSongs } from "#lib/search/search"; import prValidate from "#server/middleware/prudence-validate"; @@ -18,7 +18,6 @@ import { import { PR_RESOLVER } from "../../../../../../../../../../common/src/lib/schemas"; import chartIDRouter from "./_chartID/router"; -const logger = CreateLogCtx(__filename); const router: Router = Router({ mergeParams: true }); /** diff --git a/typescript/server/src/server/router/api/v1/games/_game/_playtype/tables/router.ts b/typescript/server/src/server/router/api/v1/games/_game/_playtype/tables/router.ts index a25cfd7a4..6ff16bfd1 100644 --- a/typescript/server/src/server/router/api/v1/games/_game/_playtype/tables/router.ts +++ b/typescript/server/src/server/router/api/v1/games/_game/_playtype/tables/router.ts @@ -1,6 +1,6 @@ import type { FilterQuery } from "mongodb"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { GetFoldersFromTable } from "#utils/folder"; import { GetGPT, GetTachiData } from "#utils/req-tachi-data"; @@ -11,8 +11,6 @@ import { GetTableFromParam } from "./middleware"; const router: Router = Router({ mergeParams: true }); -const logger = CreateLogCtx(__filename); - /** * Return all the tables for this game. * @@ -32,7 +30,7 @@ router.get("/", async (req, res) => { const tables = await db.tables.find(query); if (tables.length === 0) { - logger.error( + log.error( `The game ${FormatGameGroup( game, playtype, diff --git a/typescript/server/src/server/router/api/v1/games/_game/_playtype/targets/goals/router.ts b/typescript/server/src/server/router/api/v1/games/_game/_playtype/targets/goals/router.ts index a2be2eac8..62fbdd9d9 100644 --- a/typescript/server/src/server/router/api/v1/games/_game/_playtype/targets/goals/router.ts +++ b/typescript/server/src/server/router/api/v1/games/_game/_playtype/targets/goals/router.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreateGoalTitle, ValidateGoalChartsAndCriteria } from "#lib/targets/goal-utils"; import { GetQuestsThatContainGoal } from "#lib/targets/goals"; import prValidate from "#server/middleware/prudence-validate"; @@ -11,8 +11,6 @@ import { p } from "prudence"; import type { GoalDocument } from "../../../../../../../../../../../common/src"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); /** diff --git a/typescript/server/src/server/router/api/v1/import/router.ts b/typescript/server/src/server/router/api/v1/import/router.ts index 288526e18..b283a2df8 100644 --- a/typescript/server/src/server/router/api/v1/import/router.ts +++ b/typescript/server/src/server/router/api/v1/import/router.ts @@ -2,7 +2,7 @@ import type { ScoreImportJobData } from "#lib/score-import/worker/types"; import { SIXTEEN_MEGABTYES } from "#lib/constants/filesize"; import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ExpressWrappedScoreImportMain } from "#lib/score-import/framework/express-wrapper"; import { DeorphanScores } from "#lib/score-import/framework/orphans/orphans"; import { MakeScoreImport } from "#lib/score-import/framework/score-import"; @@ -18,8 +18,6 @@ import { p } from "prudence"; import type { APIImportTypes, FileUploadImportTypes } from "../../../../../../../common/src"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); const ParseMultipartScoredata = CreateMulterSingleUploadMiddleware( @@ -167,16 +165,16 @@ router.post( router.post("/orphans", RequirePermissions("submit_score"), async (req, res) => { const userDoc = await GetUserWithIDGuaranteed(req[SYMBOL_TACHI_API_AUTH].userID!); - logger.info(`User ${FormatUserDoc(userDoc)} forced an orphan sync.`); + log.info(`User ${FormatUserDoc(userDoc)} forced an orphan sync.`); const { processed, removed, failed, success } = await DeorphanScores( { userID: userDoc.id }, logger, ); - logger.info(`Finished attempting deorphaning.`); + log.info(`Finished attempting deorphaning.`); - logger.info(`Success: ${success} | Failed ${failed} | Removed ${removed}.`); + log.info(`Success: ${success} | Failed ${failed} | Removed ${removed}.`); return res.status(200).json({ success: true, diff --git a/typescript/server/src/server/router/api/v1/imports/middleware.ts b/typescript/server/src/server/router/api/v1/imports/middleware.ts index 0ba3d0888..8d500e580 100644 --- a/typescript/server/src/server/router/api/v1/imports/middleware.ts +++ b/typescript/server/src/server/router/api/v1/imports/middleware.ts @@ -1,13 +1,11 @@ import type { RequestHandler } from "express"; import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { AssignToReqTachiData, GetTachiData } from "#utils/req-tachi-data"; import { IsRequesterAdmin } from "#utils/user"; -const logger = CreateLogCtx(__filename); - export const GetImportFromParam: RequestHandler = async (req, res, next) => { const importDoc = await db.imports.findOne({ importID: req.params.importID }); @@ -36,7 +34,7 @@ export const RequireOwnershipOfImportOrAdmin: RequestHandler = async (req, res, if (importDoc.userID !== userID) { if (await IsRequesterAdmin(req[SYMBOL_TACHI_API_AUTH])) { - logger.info(`Admin ${userID} interacted with someone elses import.`); + log.info(`Admin ${userID} interacted with someone elses import.`); next(); return; } diff --git a/typescript/server/src/server/router/api/v1/imports/router.ts b/typescript/server/src/server/router/api/v1/imports/router.ts index 46e627ab4..654bcf2ea 100644 --- a/typescript/server/src/server/router/api/v1/imports/router.ts +++ b/typescript/server/src/server/router/api/v1/imports/router.ts @@ -3,7 +3,7 @@ import type { FilterQuery } from "mongodb"; import { JOB_RETRY_COUNT } from "#lib/constants/tachi"; import { RevertImport } from "#lib/imports/imports"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import ScoreImportQueue, { ScoreImportQueueEvents } from "#lib/score-import/worker/queue"; import { ServerConfig, TachiConfig } from "#lib/setup/config"; import { RequirePermissions } from "#server/middleware/auth"; @@ -22,8 +22,6 @@ import { GetImportFromParam, RequireOwnershipOfImportOrAdmin } from "./middlewar const router: Router = Router({ mergeParams: true }); -const logger = CreateLogCtx(__filename); - /** * Query imports. Returns the 500 most recently-finished imports. * @@ -146,7 +144,7 @@ router.get("/:importID", GetImportFromParam, async (req, res) => { const user = await GetUserWithID(importDoc.userID); if (!user) { - logger.severe(`User ${importDoc.userID} doesn't exist, yet has a session?`); + log.error(`User ${importDoc.userID} doesn't exist, yet has a session?`); return res.status(500).json({ success: false, description: `An internal server error has occured.`, @@ -305,7 +303,7 @@ router.get("/:importID/poll-status", async (req, res) => { try { isFailed = await job.isFailed(); } catch (err) { - logger.info(`Failed to read job: ${err}`); + log.info(`Failed to read job: ${err}`); isFailed = true; } @@ -314,14 +312,14 @@ router.get("/:importID/poll-status", async (req, res) => { try { isCompleted = await job.isCompleted(); } catch (err) { - logger.info(`Failed to read job: ${err}`); + log.info(`Failed to read job: ${err}`); isCompleted = false; } // job.isFailed() actually means a critical error has occured. // As in, an unhandled exception was thrown. if (isFailed) { - logger.error("Internal Server Error with job?", { job }); + log.error("Internal Server Error with job?", { job }); return res.status(500).json({ success: false, diff --git a/typescript/server/src/server/router/api/v1/scores/_scoreID/middleware.ts b/typescript/server/src/server/router/api/v1/scores/_scoreID/middleware.ts index b29cd0892..0c093f6c2 100644 --- a/typescript/server/src/server/router/api/v1/scores/_scoreID/middleware.ts +++ b/typescript/server/src/server/router/api/v1/scores/_scoreID/middleware.ts @@ -1,13 +1,11 @@ import type { RequestHandler } from "express"; import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { AssignToReqTachiData, GetTachiData } from "#utils/req-tachi-data"; import { IsRequesterAdmin } from "#utils/user"; -const logger = CreateLogCtx(__filename); - export const GetScoreFromParam: RequestHandler = async (req, res, next) => { const score = await db.scores.findOne({ scoreID: req.params.scoreID }); @@ -36,7 +34,7 @@ export const RequireOwnershipOfScoreOrAdmin: RequestHandler = async (req, res, n if (score.userID !== userID) { if (await IsRequesterAdmin(req[SYMBOL_TACHI_API_AUTH])) { - logger.info(`Admin ${userID} interacted with someone elses .`); + log.info(`Admin ${userID} interacted with someone elses .`); next(); return; } diff --git a/typescript/server/src/server/router/api/v1/scores/_scoreID/router.ts b/typescript/server/src/server/router/api/v1/scores/_scoreID/router.ts index 627b511c7..3f50629df 100644 --- a/typescript/server/src/server/router/api/v1/scores/_scoreID/router.ts +++ b/typescript/server/src/server/router/api/v1/scores/_scoreID/router.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { DeleteScore } from "#lib/score-mutation/delete-scores"; import { RequirePermissions } from "#server/middleware/auth"; import prValidate from "#server/middleware/prudence-validate"; @@ -12,8 +12,6 @@ import { GetScoreFromParam, RequireOwnershipOfScoreOrAdmin } from "./middleware" const router: Router = Router({ mergeParams: true }); -const logger = CreateLogCtx(__filename); - router.use(GetScoreFromParam); /** @@ -34,7 +32,7 @@ router.get("/", async (req, res) => { ]); if (!user || !chart || !song) { - logger.error( + log.error( `Score ${ score.scoreID } refers to non-existent data: [user,chart,song] [${!!user} ${!!chart} ${!!song}]`, diff --git a/typescript/server/src/server/router/api/v1/seeds/router.ts b/typescript/server/src/server/router/api/v1/seeds/router.ts index f996512ae..0a06eec44 100644 --- a/typescript/server/src/server/router/api/v1/seeds/router.ts +++ b/typescript/server/src/server/router/api/v1/seeds/router.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { PullDatabaseSeeds } from "#lib/seeds/repo"; import { Env } from "#lib/setup/config"; import prValidate from "#server/middleware/prudence-validate"; @@ -10,8 +10,6 @@ import fsSync from "fs"; import fs from "fs/promises"; import path from "path"; -const logger = CreateLogCtx(__filename); - // Routes for interacting with the `seeds` folder in this instance of Tachi. // Why do we have this, and why is it limited to only local development? @@ -41,7 +39,7 @@ const LOCAL_SEEDS_PATH = Env.NODE_ENV === "test" ? TEST_SEEDS_PATH : LOCAL_DEV_S if (Env.NODE_ENV === "dev" || Env.NODE_ENV === "test") { if (!fsSync.existsSync(LOCAL_SEEDS_PATH)) { - logger.error( + log.error( `Failed to load seeds routes, could not find any seeds/collections checked out at ${LOCAL_SEEDS_PATH}. These were expected to be present as this is local-development! All seeds routes will return 500.`, @@ -72,7 +70,7 @@ router.get("/has-uncommitted-changes", async (req, res) => { const { stdout, stderr } = await asyncExec(`git status --porcelain`); if (stderr) { - logger.error(`Failed to read git status --porcelain.`, { stderr }); + log.error(`Failed to read git status --porcelain.`, { stderr }); return res.status(500).json({ success: false, description: `Failed to check current git status.`, @@ -309,7 +307,7 @@ router.get( body: commit, }); } catch (err) { - logger.info(`Failed to fetch commit.`, { err }); + log.info(`Failed to fetch commit.`, { err }); return res.status(404).json({ success: false, description: `Failed to fetch commit. It may not exist.`, diff --git a/typescript/server/src/server/router/api/v1/sessions/_sessionID/middleware.ts b/typescript/server/src/server/router/api/v1/sessions/_sessionID/middleware.ts index a7ee58e7d..5e3b6fdc0 100644 --- a/typescript/server/src/server/router/api/v1/sessions/_sessionID/middleware.ts +++ b/typescript/server/src/server/router/api/v1/sessions/_sessionID/middleware.ts @@ -1,7 +1,7 @@ import type { RequestHandler } from "express"; import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { AssignToReqTachiData, GetTachiData } from "#utils/req-tachi-data"; diff --git a/typescript/server/src/server/router/api/v1/users/_userID/api-tokens/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/api-tokens/router.ts index b652baa23..5fac74e7d 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/api-tokens/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/api-tokens/router.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import prValidate from "#server/middleware/prudence-validate"; import db from "#services/mongo/db"; import { Random20Hex } from "#utils/misc"; @@ -14,8 +14,6 @@ import { } from "../../../../../../../../../common/src"; import { RequireSelfRequestFromUser } from "../middleware"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); router.use(RequireSelfRequestFromUser); @@ -114,16 +112,14 @@ router.post( identifier = client.name; fromAPIClient = client.clientID; - logger.info( + log.info( `Creating API Key for ${FormatUserDoc(user)} from ${client.name} specification.`, ); } else if (body.permissions) { permissions = body.permissions; identifier = body.identifier ?? "Custom Token"; - logger.info( - `Creating API Key for ${FormatUserDoc(user)} with ${permissions.join(", ")}.`, - ); + log.info(`Creating API Key for ${FormatUserDoc(user)} with ${permissions.join(", ")}.`); } else { return res.status(400).json({ success: false, @@ -143,7 +139,7 @@ router.post( await db["api-tokens"].insert(apiTokenDocument); - logger.info(`Inserted new API Key for ${FormatUserDoc(user)}.`); + log.info(`Inserted new API Key for ${FormatUserDoc(user)}.`); return res.status(200).json({ success: true, @@ -161,9 +157,7 @@ router.post( router.delete("/:token", async (req, res) => { const user = GetTachiData(req, "requestedUser"); - logger.info( - `received request from ${FormatUserDoc(user)} to delete token ${req.params.token}.`, - ); + log.info(`received request from ${FormatUserDoc(user)} to delete token ${req.params.token}.`); const token = await db["api-tokens"].findOne({ token: req.params.token, @@ -179,7 +173,7 @@ router.delete("/:token", async (req, res) => { await db["api-tokens"].remove({ token: req.params.token }); - logger.info(`Deleted ${req.params.token}, which belonged to ${FormatUserDoc(user)}.`); + log.info(`Deleted ${req.params.token}, which belonged to ${FormatUserDoc(user)}.`); return res.status(200).json({ success: true, diff --git a/typescript/server/src/server/router/api/v1/users/_userID/banner/router.test.ts b/typescript/server/src/server/router/api/v1/users/_userID/banner/router.test.ts index 5a7e032fc..0787e6d23 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/banner/router.test.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/banner/router.test.ts @@ -1,6 +1,6 @@ import { CDNStoreOrOverwrite } from "#lib/cdn/cdn"; import { GetProfileBannerURL } from "#lib/cdn/url-format"; -import { rootLogger } from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import mockApi from "#test-utils/mock-api"; import ResetDBState from "#test-utils/resets"; @@ -29,7 +29,7 @@ t.test("GET /api/v1/users/:userID/banner", (t) => { t.equal(res.statusCode, 200, "Should return 200."); if (res.statusCode !== 200) { - rootLogger.info("Unexpected non-200 in CDN tests, received this as a body.", { + log.info("Unexpected non-200 in CDN tests, received this as a body.", { body: res.body, }); } diff --git a/typescript/server/src/server/router/api/v1/users/_userID/banner/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/banner/router.ts index 890fb58e6..cd28ac106 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/banner/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/banner/router.ts @@ -1,7 +1,7 @@ import { CDNDelete, CDNRedirect, CDNStoreOrOverwrite } from "#lib/cdn/cdn"; import { GetProfileBannerURL } from "#lib/cdn/url-format"; import { ONE_MEGABYTE } from "#lib/constants/filesize"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { RequirePermissions } from "#server/middleware/auth"; import { CreateMulterSingleUploadMiddleware } from "#server/middleware/multer-upload"; import db from "#services/mongo/db"; @@ -14,8 +14,6 @@ import { RequireAuthedAsUser } from "../middleware"; // note: this is just the ../pfp/router.ts code copied and altered. -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); /** @@ -31,18 +29,18 @@ router.put( "/", RequireAuthedAsUser, RequirePermissions("customise_profile"), - CreateMulterSingleUploadMiddleware("banner", ONE_MEGABYTE, logger), + CreateMulterSingleUploadMiddleware("banner", ONE_MEGABYTE), async (req, res) => { const user = GetTachiData(req, "requestedUser"); if (!user.customBannerLocation) { - logger.verbose(`User ${FormatUserDoc(user)} set a custom profile banner.`); + log.verbose(`User ${FormatUserDoc(user)} set a custom profile banner.`); } else { - logger.verbose(`User ${FormatUserDoc(user)} updated their profile banner.`); + log.verbose(`User ${FormatUserDoc(user)} updated their profile banner.`); } if (!req.file) { - logger.error( + log.error( `Conflicting state - no req.file has been populated but passed middleware? (${FormatUserDoc( user, )})`, diff --git a/typescript/server/src/server/router/api/v1/users/_userID/following/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/following/router.ts index a5ac5fa1f..408357749 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/following/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/following/router.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ServerConfig } from "#lib/setup/config"; import prValidate from "#server/middleware/prudence-validate"; import db from "#services/mongo/db"; @@ -13,8 +13,6 @@ import { RequireSelfRequestFromUser } from "../middleware"; const router: Router = Router({ mergeParams: true }); -const logger = CreateLogCtx(__filename); - /** * Retrieve who this user is following. * @@ -28,7 +26,7 @@ router.get("/", async (req, res) => { const settings = await db["user-settings"].findOne({ userID: user.id }); if (!settings) { - logger.error(`User ${FormatUserDoc(user)} has no settings?`, { user }); + log.error(`User ${FormatUserDoc(user)} has no settings?`, { user }); return res.status(500).json({ success: false, @@ -73,7 +71,7 @@ router.post( const settings = await db["user-settings"].findOne({ userID: user.id }); if (!settings) { - logger.error(`User ${FormatUserDoc(user)} has no settings?`, { user }); + log.error(`User ${FormatUserDoc(user)} has no settings?`, { user }); return res.status(500).json({ success: false, @@ -147,7 +145,7 @@ router.post( const settings = await db["user-settings"].findOne({ userID: user.id }); if (!settings) { - logger.error(`User ${FormatUserDoc(user)} has no settings?`, { user }); + log.error(`User ${FormatUserDoc(user)} has no settings?`, { user }); return res.status(500).json({ success: false, diff --git a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/pbs/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/pbs/router.ts index be0cec418..0fe258e70 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/pbs/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/pbs/router.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { GetRivalUsers } from "#lib/rivals/rivals"; import { ResolveSongAndChart } from "#lib/score-import/import-types/common/batch-manual/converter"; import { SearchSpecificGameSongsAndCharts } from "#lib/search/search"; @@ -20,7 +20,6 @@ import { import { PR_RESOLVER } from "../../../../../../../../../../../../common/src/lib/schemas"; const router: Router = Router({ mergeParams: true }); -const logger = CreateLogCtx(__filename); /** * Searches a user's personal bests. diff --git a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/router.ts index 19a7e5d62..eb819f56f 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/router.ts @@ -1,6 +1,6 @@ import { CreateActivityRouteHandler } from "#lib/activity/activity"; import { ONE_MONTH, ONE_WEEK, ONE_YEAR } from "#lib/constants/time"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import prValidate from "#server/middleware/prudence-validate"; import { PasswordCompare, ValidatePassword } from "#server/router/api/v1/auth/auth"; import db from "#services/mongo/db"; @@ -40,8 +40,6 @@ import showcaseRouter from "./showcase/router"; import tablesRouter from "./tables/router"; import targetsRouter from "./targets/router"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); router.use(CheckUserPlayedGamePlaytype); @@ -410,14 +408,14 @@ router.delete( "!password": string; }; - logger.info( + log.info( `Recieved request to delete UGPT ${FormatUserDoc(user)} ${FormatGameGroup(game, playtype)}`, ); const privateInfo = await GetUserPrivateInfo(user.id); if (!privateInfo) { - logger.severe( + log.error( `State desync for user ${FormatUserDoc( user, )}. This user has no password/email information?`, diff --git a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/settings/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/settings/router.ts index 744d79960..dd6e6475e 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/settings/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/settings/router.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { RequirePermissions } from "#server/middleware/auth"; import db from "#services/mongo/db"; import { FormatPrError, optNull } from "#utils/prudence"; @@ -15,8 +15,6 @@ import { } from "../../../../../../../../../../../../common/src"; import { RequireAuthedAsUser } from "../../../../middleware"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); /** @@ -141,7 +139,7 @@ router.patch( }); if (!settings) { - logger.error( + log.error( `User ${FormatUserDoc( user, )} has no game-settings, but has played ${game} ${playtype}?`, diff --git a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/goals/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/goals/router.ts index 1d651450d..8d1da20df 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/goals/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/goals/router.ts @@ -1,5 +1,5 @@ import { SubscribeFailReasons } from "#lib/constants/err-codes"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ServerConfig } from "#lib/setup/config"; import { ConstructGoal, @@ -25,8 +25,6 @@ import { RequireAuthedAsUser } from "../../../../../middleware"; const router: Router = Router({ mergeParams: true }); -const logger = CreateLogCtx(__filename); - /** * Retrieves this user's set goals for this GPT. * @@ -180,7 +178,7 @@ router.post( } catch (e) { const err = e as Error; - logger.info(err.message, { err }); + log.info(err.message, { err }); return res.status(400).json({ success: false, diff --git a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/quests/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/quests/router.ts index 62ba2ff08..ef873effc 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/quests/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/quests/router.ts @@ -1,5 +1,5 @@ import { SubscribeFailReasons } from "#lib/constants/err-codes"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ServerConfig } from "#lib/setup/config"; import { EvaluateQuestProgress, @@ -15,8 +15,6 @@ import { type RequestHandler, Router } from "express"; import { RequireAuthedAsUser } from "../../../../../middleware"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); /** @@ -38,7 +36,7 @@ router.get("/", async (req, res) => { }); if (quests.length !== questSubs.length) { - logger.error( + log.error( `Found ${questSubs.length} subscriptions, but got ${quests.length} parents. This is a state desync.`, ); throw new Error("Failed to fetch quests"); @@ -212,7 +210,7 @@ router.delete( const { user } = GetUGPT(req); const quest = GetTachiData(req, "questDoc"); - logger.info(`User ${FormatUserDoc(user)} is unsubscribing from quest '${quest.name}'.`, { + log.info(`User ${FormatUserDoc(user)} is unsubscribing from quest '${quest.name}'.`, { quest, user, }); diff --git a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/router.ts index 1fb3bcd93..aac90c779 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/targets/router.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { GetRelevantGoals } from "#lib/targets/goals"; import { GetParentQuests } from "#lib/targets/quests"; import db from "#services/mongo/db"; @@ -15,8 +15,6 @@ import { Router } from "express"; import goalsRouter from "./goals/router"; import questsRouter from "./quests/router"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); /** diff --git a/typescript/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/router.ts index 81852c918..048068132 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/router.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { GetKaiTypeClientCredentials, KaiTypeToBaseURL, @@ -19,8 +19,6 @@ import { ValidateKaiType } from "./middleware"; const router: Router = Router({ mergeParams: true }); -const logger = CreateLogCtx(__filename); - router.use(RequireKamaitachi, RequireSelfRequestFromUser, ValidateKaiType); /** @@ -111,7 +109,7 @@ router.post( const maybeCredentials = GetKaiTypeClientCredentials(kaiType); if (!maybeCredentials) { - logger.severe( + log.error( `Attempted to /callback ${kaiType}, but this server has no oauth2 credentials configured for that type.`, ); return res.status(500).json({ @@ -132,7 +130,7 @@ router.post( params.append("client_id", CLIENT_ID); params.append("redirect_uri", REDIRECT_URI); - logger.info(`Making token reify request from ${baseUrl}/oauth/token`); + log.info(`Making token reify request from ${baseUrl}/oauth/token`); let getTokenRes; try { @@ -144,7 +142,7 @@ router.post( method: "POST", }); } catch (err) { - logger.error(`Completely failed to getTokenRes from ${url}.`, err); + log.error(`Completely failed to getTokenRes from ${url}.`, err); return res.status(500).json({ success: false, description: `We failed to reach this site. Are they down?`, @@ -152,7 +150,7 @@ router.post( } if (getTokenRes.status !== 200) { - logger.error(`Unexpected status of ${getTokenRes.status} from ${url} oauth2 flow.`); + log.error(`Unexpected status of ${getTokenRes.status} from ${url} oauth2 flow.`); return res.status(getTokenRes.status < 500 ? 400 : 500).json({ success: false, @@ -165,7 +163,7 @@ router.post( try { json = await getTokenRes.json(); } catch (err) { - logger.error(`Error parsing JSON in response body from getTokenRes.`, { + log.error(`Error parsing JSON in response body from getTokenRes.`, { res: getTokenRes, err, }); @@ -179,7 +177,7 @@ router.post( const err = p(json, KAI_OAUTH2_RETURN_SCHEMA, {}, { allowExcessKeys: true }); if (err) { - logger.error(`Validation error in JSON return from ${url}.`, { err }); + log.error(`Validation error in JSON return from ${url}.`, { err }); return res.status(500).json({ success: false, description: `Failed to validate JSON returned from this service. Is their server malfunctioning?`, @@ -206,7 +204,7 @@ router.post( }, ); - logger.info(`Updated Auth for ${kaiType} for user ${FormatUserDoc(user)}.`); + log.info(`Updated Auth for ${kaiType} for user ${FormatUserDoc(user)}.`); return res.status(200).json({ success: true, diff --git a/typescript/server/src/server/router/api/v1/users/_userID/middleware.ts b/typescript/server/src/server/router/api/v1/users/_userID/middleware.ts index 03829bdc9..1bd0cfadf 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/middleware.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/middleware.ts @@ -1,15 +1,13 @@ import type { RequestHandler } from "express"; import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { IsNullish } from "#utils/misc"; import { AssignToReqTachiData, GetTachiData } from "#utils/req-tachi-data"; import { GetUserWithID, ResolveUser } from "#utils/user"; import { UserAuthLevels } from "../../../../../../../../common/src"; -const logger = CreateLogCtx(__filename); - export const GetUserFromParam: RequestHandler = async (req, res, next) => { if (!req.params.userID) { return res.status(400).json({ @@ -72,7 +70,7 @@ export const RequireAuthedAsUser: RequestHandler = async (req, res, next) => { const requestingUser = await GetUserWithID(requestingUserID); if (!requestingUser) { - logger.severe(`${requestingUserID} is signed in as someone who does not exist.`); + log.error(`${requestingUserID} is signed in as someone who does not exist.`); return res.status(500).json({ success: false, description: `You are signed in as someone who does not exist.`, diff --git a/typescript/server/src/server/router/api/v1/users/_userID/pfp/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/pfp/router.ts index a17fea72d..6baf724ef 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/pfp/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/pfp/router.ts @@ -1,7 +1,7 @@ import { CDNDelete, CDNRedirect, CDNStoreOrOverwrite } from "#lib/cdn/cdn"; import { GetProfilePictureURL } from "#lib/cdn/url-format"; import { ONE_MEGABYTE } from "#lib/constants/filesize"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { RequirePermissions } from "#server/middleware/auth"; import { CreateMulterSingleUploadMiddleware } from "#server/middleware/multer-upload"; import db from "#services/mongo/db"; @@ -12,8 +12,6 @@ import { Router } from "express"; import { RequireAuthedAsUser } from "../middleware"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); /** @@ -29,18 +27,18 @@ router.put( "/", RequireAuthedAsUser, RequirePermissions("customise_profile"), - CreateMulterSingleUploadMiddleware("pfp", ONE_MEGABYTE, logger), + CreateMulterSingleUploadMiddleware("pfp", ONE_MEGABYTE), async (req, res) => { const user = GetTachiData(req, "requestedUser"); if (!user.customPfpLocation) { - logger.verbose(`User ${FormatUserDoc(user)} set a custom profile picture.`); + log.verbose(`User ${FormatUserDoc(user)} set a custom profile picture.`); } else { - logger.verbose(`User ${FormatUserDoc(user)} updated their profile picture.`); + log.verbose(`User ${FormatUserDoc(user)} updated their profile picture.`); } if (!req.file) { - logger.error( + log.error( `Conflicting state - no req.file has been populated but passed middleware? (${FormatUserDoc( user, )})`, @@ -91,7 +89,7 @@ router.put( router.get("/", (req, res) => { const user = GetTachiData(req, "requestedUser"); - logger.debug("User Info for /:userID/pfp request is ", user); + log.debug("User Info for /:userID/pfp request is ", user); if (!user.customPfpLocation) { res.setHeader("Content-Type", "image/png"); diff --git a/typescript/server/src/server/router/api/v1/users/_userID/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/router.ts index d25d67ba8..c342a05b9 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/router.ts @@ -2,7 +2,7 @@ import { GetRecentActivity } from "#lib/activity/activity"; import { ONE_MONTH } from "#lib/constants/time"; import { SendEmail } from "#lib/email/client"; import { EmailFormatVerifyEmail } from "#lib/email/formats"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { GetRivalIDs } from "#lib/rivals/rivals"; import { ServerConfig } from "#lib/setup/config"; import prValidate from "#server/middleware/prudence-validate"; @@ -51,8 +51,6 @@ import pfpRouter from "./pfp/router"; import sessionsRouter from "./sessions/router"; import settingsRouter from "./settings/router"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); router.use(GetUserFromParam); @@ -201,7 +199,7 @@ router.patch( const newUser = await GetUserWithID(user.id); if (!newUser) { - logger.severe( + log.error( `User ${FormatUserDoc(user)} updated profile but user doc no longer exists?`, { user }, ); @@ -342,7 +340,7 @@ router.get("/email", RequireSelfRequestFromUser, async (req, res) => { }); } - logger.error(`User ${user.id} doesn't have private info?`); + log.error(`User ${user.id} doesn't have private info?`); return res.status(500).json({ success: false, @@ -375,7 +373,7 @@ router.post( }); if (!privateInfo) { - logger.error(`User ${user.id} has no associated private info?`); + log.error(`User ${user.id} has no associated private info?`); return res.status(500).json({ success: false, description: `Internal server error.`, @@ -394,14 +392,14 @@ router.post( const existingEmail = await CheckIfEmailInUse(body.email); if (existingEmail) { - logger.info(`User attempted to change to email that was already in use.`); + log.info(`User attempted to change to email that was already in use.`); return res.status(409).json({ success: false, description: `This email is already in use.`, }); } - logger.info(`User ${user.id} changed email from ${privateInfo.email} to ${body.email}`); + log.info(`User ${user.id} changed email from ${privateInfo.email} to ${body.email}`); await db["user-private-information"].update( { @@ -467,7 +465,7 @@ router.post( /* istanbul ignore next */ if (!user) { - logger.severe( + log.error( `IP ${req.ip} got to /change-password without a user, but passed RequireSelfRequest?`, ); @@ -484,7 +482,7 @@ router.post( /* istanbul ignore next */ if (!privateInfo) { - logger.severe(`User ${FormatUserDoc(user)} has no private information?`, { user }); + log.error(`User ${FormatUserDoc(user)} has no private information?`, { user }); return res.status(500).json({ success: false, description: `An internal server error has occured.`, @@ -557,7 +555,7 @@ router.post( /* istanbul ignore next */ if (!user) { - logger.severe( + log.error( `IP ${req.ip} got to /change-username without a user, but passed RequireSelfRequest?`, ); @@ -574,7 +572,7 @@ router.post( /* istanbul ignore next */ if (!privateInfo) { - logger.severe(`User ${FormatUserDoc(user)} has no private information?`, { user }); + log.error(`User ${FormatUserDoc(user)} has no private information?`, { user }); return res.status(500).json({ success: false, description: `An internal server error has occured.`, @@ -593,7 +591,7 @@ router.post( const existingUser = await GetUserCaseInsensitive(body.newUsername); if (existingUser) { - logger.verbose(`Invalid username ${body.newUsername}, already in use.`); + log.verbose(`Invalid username ${body.newUsername}, already in use.`); return res.status(409).json({ success: false, description: "This username is already in use.", @@ -772,7 +770,7 @@ router.get( const settings = await db["user-settings"].findOne({ userID: user.id }); if (!settings) { - logger.error(`User ${FormatUserDoc(user)} doesn't have any settings?`); + log.error(`User ${FormatUserDoc(user)} doesn't have any settings?`); return res.status(500).json({ success: false, description: `This user has no settings.`, diff --git a/typescript/server/src/server/router/api/v1/users/_userID/settings/router.ts b/typescript/server/src/server/router/api/v1/users/_userID/settings/router.ts index a78ebd18c..385e889d9 100644 --- a/typescript/server/src/server/router/api/v1/users/_userID/settings/router.ts +++ b/typescript/server/src/server/router/api/v1/users/_userID/settings/router.ts @@ -1,4 +1,4 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import prValidate from "#server/middleware/prudence-validate"; import db from "#services/mongo/db"; import { GetTachiData } from "#utils/req-tachi-data"; @@ -7,7 +7,6 @@ import { Router } from "express"; import { RequireSelfRequestFromUser } from "../middleware"; -const logger = CreateLogCtx(__filename); const router: Router = Router({ mergeParams: true }); /** @@ -23,7 +22,7 @@ router.get("/", async (req, res) => { }); if (!settings) { - logger.severe(`User ${FormatUserDoc(user)} has no settings?`); + log.error(`User ${FormatUserDoc(user)} has no settings?`); return res.status(500).json({ success: false, description: `An internal server error has occured.`, @@ -91,7 +90,7 @@ router.patch( const settings = await GetSettingsForUser(user.id); if (!settings) { - logger.severe( + log.error( `User ${FormatUserDoc(user)} has no settings, yet just successfully updated them?`, { user }, ); diff --git a/typescript/server/src/server/router/ir/beatoraja/charts/_chartSHA256/router.ts b/typescript/server/src/server/router/ir/beatoraja/charts/_chartSHA256/router.ts index fbf4330a0..f247ce4f0 100644 --- a/typescript/server/src/server/router/ir/beatoraja/charts/_chartSHA256/router.ts +++ b/typescript/server/src/server/router/ir/beatoraja/charts/_chartSHA256/router.ts @@ -1,5 +1,5 @@ import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { AssignToReqTachiData, GetTachiData } from "#utils/req-tachi-data"; import { type RequestHandler, Router } from "express"; @@ -15,8 +15,6 @@ import { TachiScoreDataToBeatorajaFormat } from "./convert-scores"; const router: Router = Router({ mergeParams: true }); -const logger = CreateLogCtx(__filename); - const GetChartDocument: RequestHandler = async (req, res, next) => { let chart: ChartDocument<"bms:7K" | "bms:14K" | "pms:Controller" | "pms:Keyboard"> | null = (await db.charts.bms.findOne({ @@ -82,7 +80,7 @@ router.get("/scores", async (req, res) => { const username = userMap.get(score.userID)?.username; if (!username) { - logger.warn( + log.warn( `A PB on ${score.chartID} refers to user ${score.userID}, who apparantly doesn't exist? Skipping for beatoraja score returns, but this might be severe!`, ); continue; diff --git a/typescript/server/src/server/router/ir/beatoraja/router.ts b/typescript/server/src/server/router/ir/beatoraja/router.ts index 025d42ff0..bd35568a5 100644 --- a/typescript/server/src/server/router/ir/beatoraja/router.ts +++ b/typescript/server/src/server/router/ir/beatoraja/router.ts @@ -4,7 +4,7 @@ import type { } from "#lib/score-import/import-types/ir/beatoraja/types"; import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ExpressWrappedScoreImportMain } from "#lib/score-import/framework/express-wrapper"; import { ServerConfig } from "#lib/setup/config"; import { RequireNotGuest } from "#server/middleware/auth"; @@ -20,8 +20,6 @@ import type { integer } from "../../../../../../common/src"; import { ValidateIRClientVersion } from "./auth"; import chartsRouter from "./charts/_chartSHA256/router"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); router.use(ValidateIRClientVersion); @@ -61,12 +59,9 @@ router.post("/submit-score", RequireNotGuest, async (req, res) => { ); if (!orphanInfo) { - logger.warn( - `Chart '${chart.sha256}' got SongOrChartNotFound, but was not orphaned?`, - { - body: req.safeBody as unknown, - }, - ); + log.warn(`Chart '${chart.sha256}' got SongOrChartNotFound, but was not orphaned?`, { + body: req.safeBody as unknown, + }); return res.status(400).json({ success: false, @@ -105,7 +100,7 @@ router.post("/submit-score", RequireNotGuest, async (req, res) => { }); if (!scoreDoc) { - logger.severe( + log.error( `ScoreDocument ${importRes.body.body.scoreIDs[0]} was claimed to be inserted, but wasn't.`, ); return res.status(500).json({ @@ -123,7 +118,7 @@ router.post("/submit-score", RequireNotGuest, async (req, res) => { }); if (!chart) { - logger.error( + log.error( `Expected to a find a bms chart with chartID ${scoreDoc.chartID}, but found none?`, ); @@ -142,7 +137,7 @@ router.post("/submit-score", RequireNotGuest, async (req, res) => { }); if (!chart) { - logger.error( + log.error( `Expected to a find a pms chart with chartID ${scoreDoc.chartID}, but found none?`, ); diff --git a/typescript/server/src/server/router/ir/fervidex/router.ts b/typescript/server/src/server/router/ir/fervidex/router.ts index 92559eda0..f3d21c8a7 100644 --- a/typescript/server/src/server/router/ir/fervidex/router.ts +++ b/typescript/server/src/server/router/ir/fervidex/router.ts @@ -1,6 +1,6 @@ import { MODEL_INFINITAS_2, REV_2DXBMS } from "#lib/constants/ea3id"; import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ExpressWrappedScoreImportMain } from "#lib/score-import/framework/express-wrapper"; import { SoftwareIDToVersion } from "#lib/score-import/import-types/ir/fervidex/parser"; import { RequirePermissions } from "#server/middleware/auth"; @@ -19,15 +19,13 @@ import { type SpecificGamePTConfig, } from "../../../../../../common/src"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); const ValidateFervidexHeader: RequestHandler = (req, res, next) => { const agent = req.header("User-Agent"); if (IsNullishOrEmptyStr(agent)) { - logger.debug( + log.debug( `Rejected fervidex client with no agent from user ${req[SYMBOL_TACHI_API_AUTH].userID}.`, ); return res.status(400).json({ @@ -37,7 +35,7 @@ const ValidateFervidexHeader: RequestHandler = (req, res, next) => { } if (!agent.startsWith("fervidex/")) { - logger.info( + log.info( `Rejected fervidex client with invalid agent ${agent} from user ${req[SYMBOL_TACHI_API_AUTH].userID}.`, ); return res.status(400).json({ @@ -49,7 +47,7 @@ const ValidateFervidexHeader: RequestHandler = (req, res, next) => { const versions = agent.split("fervidex/")[1]!.split(".").map(Number); if (!versions.every((e) => !Number.isNaN(e)) || versions.length < 3) { - logger.info( + log.info( `Rejected fervidex client with agent ${agent} for NaN-like versions from user ${req[SYMBOL_TACHI_API_AUTH].userID}.`, ); return res.status(400).json({ @@ -61,7 +59,7 @@ const ValidateFervidexHeader: RequestHandler = (req, res, next) => { // version.minor // asserted to exist based on versions.length being greater than 3. if (versions[0] === 1 && versions[1]! < 3) { - logger.debug( + log.debug( `Rejected outdated fervidex client from user ${req[SYMBOL_TACHI_API_AUTH].userID}.`, ); return res.status(400).json({ @@ -77,7 +75,7 @@ const ValidateModelHeader: RequestHandler = (req, res, next) => { const swModel = req.header("X-Software-Model"); if (IsNullishOrEmptyStr(swModel)) { - logger.debug( + log.debug( `Rejected empty X-Software Model from user ${req[SYMBOL_TACHI_API_AUTH].userID}.`, ); return res.status(400).json({ @@ -105,7 +103,7 @@ const ValidateModelHeader: RequestHandler = (req, res, next) => { try { SoftwareIDToVersion(swModel, logger); } catch (err) { - logger.info( + log.info( `Rejected invalid Software Model ${swModel} from user ${req[SYMBOL_TACHI_API_AUTH].userID}.`, { err }, ); @@ -115,7 +113,7 @@ const ValidateModelHeader: RequestHandler = (req, res, next) => { }); } } catch (err) { - logger.debug(err); + log.debug(err); return res.status(400).json({ success: false, error: `Invalid X-Software-Model.`, @@ -167,7 +165,7 @@ async function ShouldImportScoresFromProfileSubmit(swModel: string, userID: inte }); if (settings?.forceStaticImport === true) { - logger.debug(`User ${settings.userID} had forceStaticImport set, allowing request.`); + log.debug(`User ${settings.userID} had forceStaticImport set, allowing request.`); // Force static import should ideally only ever be used once. If left on, a users profile // will get innundated with a bunch of pb imports on every game-load. This is not what @@ -193,10 +191,9 @@ async function ShouldImportScoresFromProfileSubmit(swModel: string, userID: inte return model === MODEL_INFINITAS_2; } catch (err) { - logger.warn( - `Unexpected fail while parsing swModel ${swModel}, has already been validated?.`, - { err }, - ); + log.warn(`Unexpected fail while parsing swModel ${swModel}, has already been validated?.`, { + err, + }); // try some good-natured attempt to recover, since this isn't that severe of an // issue. diff --git a/typescript/server/src/server/router/ir/kshook/sv6c/router.ts b/typescript/server/src/server/router/ir/kshook/sv6c/router.ts index 12a78c73f..c76d9dc68 100644 --- a/typescript/server/src/server/router/ir/kshook/sv6c/router.ts +++ b/typescript/server/src/server/router/ir/kshook/sv6c/router.ts @@ -1,6 +1,6 @@ import { MODEL_SDVX3_KONASTE } from "#lib/constants/ea3id"; import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ExpressWrappedScoreImportMain } from "#lib/score-import/framework/express-wrapper"; import db from "#services/mongo/db"; import { ParseEA3SoftID } from "#utils/ea3id"; @@ -9,13 +9,11 @@ import { type RequestHandler, Router } from "express"; const router: Router = Router({ mergeParams: true }); -const logger = CreateLogCtx(__filename); - const ValidateHeaders: RequestHandler = (req, res, next) => { const agent = req.header("User-Agent"); if (IsNullishOrEmptyStr(agent)) { - logger.debug( + log.debug( `Rejected KsHook client with no agent from user ${req[SYMBOL_TACHI_API_AUTH].userID}.`, ); return res.status(400).json({ @@ -25,7 +23,7 @@ const ValidateHeaders: RequestHandler = (req, res, next) => { } if (!agent.startsWith("kshook/")) { - logger.info( + log.info( `Rejected KsHook client with invalid agent ${agent} from user ${req[SYMBOL_TACHI_API_AUTH].userID}.`, ); return res.status(400).json({ @@ -40,7 +38,7 @@ const ValidateHeaders: RequestHandler = (req, res, next) => { const softID = req.header("X-Software-Model"); if (IsNullishOrEmptyStr(softID)) { - logger.debug( + log.debug( `received request without X-Software-Model from ${req[SYMBOL_TACHI_API_AUTH].userID}.`, ); return res.status(400).json({ @@ -53,7 +51,7 @@ const ValidateHeaders: RequestHandler = (req, res, next) => { const modelInfo = ParseEA3SoftID(softID); if (modelInfo.model !== MODEL_SDVX3_KONASTE) { - logger.info( + log.info( `received unexpected softID ${softID}. Expected ${MODEL_SDVX3_KONASTE} as model.`, ); return res.status(400).json({ @@ -62,7 +60,7 @@ const ValidateHeaders: RequestHandler = (req, res, next) => { }); } } catch (err) { - logger.info(`Invalid softID from ${req[SYMBOL_TACHI_API_AUTH].userID}.`, { err }); + log.info(`Invalid softID from ${req[SYMBOL_TACHI_API_AUTH].userID}.`, { err }); return res.status(400).json({ success: false, error: `Invalid X-Software-Model.`, diff --git a/typescript/server/src/server/router/ir/router.ts b/typescript/server/src/server/router/ir/router.ts index 5d798be13..85353fe1d 100644 --- a/typescript/server/src/server/router/ir/router.ts +++ b/typescript/server/src/server/router/ir/router.ts @@ -1,5 +1,5 @@ import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { FormatUserDoc, GetUserWithID } from "#utils/user"; import { Router } from "express"; @@ -20,11 +20,9 @@ import uscIR from "./usc/router"; const router: Router = Router({ mergeParams: true }); -const logger = CreateLogCtx(__filename); - router.use(async (req, res, next) => { if (!req[SYMBOL_TACHI_API_AUTH]) { - logger.info(`IR import request received from: ${req.header("Authorization")}`, { + log.info(`IR import request received from: ${req.header("Authorization")}`, { body: req.body, query: req.query, url: req.url, @@ -42,7 +40,7 @@ router.use(async (req, res, next) => { user = null; } - logger.info(`IR import request received from: ${user ? FormatUserDoc(user) : "Unknown"}`, { + log.info(`IR import request received from: ${user ? FormatUserDoc(user) : "Unknown"}`, { user, body: req.body, query: req.query, diff --git a/typescript/server/src/server/router/ir/usc/_playtype/router.ts b/typescript/server/src/server/router/ir/usc/_playtype/router.ts index b799c4cba..603fa9211 100644 --- a/typescript/server/src/server/router/ir/usc/_playtype/router.ts +++ b/typescript/server/src/server/router/ir/usc/_playtype/router.ts @@ -3,7 +3,7 @@ import { GetUSCIRReplayURL } from "#lib/cdn/url-format"; import { ONE_MEGABYTE } from "#lib/constants/filesize"; import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; import { USCIR_MAX_LEADERBOARD_N } from "#lib/constants/usc-ir"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { AssertStrAsPositiveNonZeroInt } from "#lib/score-import/framework/common/string-asserts"; import { ExpressWrappedScoreImportMain } from "#lib/score-import/framework/express-wrapper"; import { ServerConfig, TachiConfig } from "#lib/setup/config"; @@ -27,8 +27,6 @@ import { } from "../../../../../../../common/src"; import { CreatePOSTScoresResponseBody, TachiScoreToServerScore } from "./usc"; -const logger = CreateLogCtx(__filename); - const router: Router = Router({ mergeParams: true }); enum STATUS_CODES { @@ -318,7 +316,7 @@ router.post("/scores", RequirePermissions("submit_score"), async (req, res) => { // If the import failed, AND the import failure WAS NOT that the chart didnt exist // report that error instead. if (importDoc.errors[0] && importDoc.errors[0].type !== "SongOrChartNotFound") { - logger.info(`USC Import Failed ${importDoc.errors[0].message}`, { + log.info(`USC Import Failed ${importDoc.errors[0].message}`, { importDoc, userID, }); @@ -341,7 +339,7 @@ router.post("/scores", RequirePermissions("submit_score"), async (req, res) => { // If the chartDoc exists, any error is a failure here. if (importDoc.errors[0]) { - logger.info(`USC Import Failed ${importDoc.errors[0].message}`, { + log.info(`USC Import Failed ${importDoc.errors[0].message}`, { importDoc, userID, }); @@ -383,7 +381,7 @@ router.post("/scores", RequirePermissions("submit_score"), async (req, res) => { router.post( "/replays", RequirePermissions("submit_score"), - CreateMulterSingleUploadMiddleware("replay", ONE_MEGABYTE, logger, false), + CreateMulterSingleUploadMiddleware("replay", ONE_MEGABYTE, false), async (req, res) => { if (typeof req.safeBody.identifier !== "string") { return res.status(200).json({ @@ -431,7 +429,7 @@ router.post( } catch (err) { // impossible to test pretty much. /* istanbul ignore next */ - logger.error(`USCIR Replay Store error.`, { err }); + log.error(`USCIR Replay Store error.`, { err }); /* istanbul ignore next */ return res.status(200).json({ statusCode: STATUS_CODES.SERVER_ERROR, diff --git a/typescript/server/src/server/router/ir/usc/_playtype/usc.ts b/typescript/server/src/server/router/ir/usc/_playtype/usc.ts index 4031974f8..a830b408f 100644 --- a/typescript/server/src/server/router/ir/usc/_playtype/usc.ts +++ b/typescript/server/src/server/router/ir/usc/_playtype/usc.ts @@ -1,5 +1,5 @@ import { USCIR_ADJACENT_SCORE_N } from "#lib/constants/usc-ir"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { MStoS } from "#utils/misc"; import { GetPBOnChart, GetServerRecordOnChart } from "#utils/scores"; @@ -14,8 +14,6 @@ import type { import type { GetEnumValue } from "../../../../../../../common/src/types/metrics"; import type { USCServerScore } from "./types"; -const logger = CreateLogCtx(__filename); - export const TACHI_LAMP_TO_USC: Record< GetEnumValue, USCServerScore["lamp"] @@ -52,7 +50,7 @@ export async function TachiScoreToServerScore( ); if (!userDoc) { - logger.severe( + log.error( `User ${tachiScore.userID} from PB on chart ${tachiScore.chartID} has no user document?`, ); throw new Error( @@ -67,7 +65,7 @@ export async function TachiScoreToServerScore( })) as ScoreDocument<"usc:Controller" | "usc:Keyboard"> | null; if (!scorePB) { - logger.severe( + log.error( `Score ${firstScoreID} does not exist, but is referenced in ${tachiScore.userID}'s PBDoc on ${tachiScore.chartID}?`, ); @@ -100,7 +98,7 @@ export async function CreatePOSTScoresResponseBody( > | null; if (!scorePB) { - logger.severe(`Score was imported for chart, but no ScorePB was available on this chart?`, { + log.error(`Score was imported for chart, but no ScorePB was available on this chart?`, { chartDoc, scoreID, }); @@ -116,7 +114,7 @@ export async function CreatePOSTScoresResponseBody( // this is impossible to trigger without making a race-condition. /* istanbul ignore next */ if (!ktServerRecord) { - logger.severe( + log.error( `Score was imported for chart, but no Server Record was available on this chart?`, { chartDoc, @@ -182,7 +180,7 @@ export async function CreatePOSTScoresResponseBody( })) as ScoreDocument<"usc:Controller" | "usc:Keyboard"> | null; if (!originalScore) { - logger.severe( + log.error( `Score with ID ${scoreID} is not in the database, but was claimed to be inserted?`, ); throw new Error( diff --git a/typescript/server/src/server/server.ts b/typescript/server/src/server/server.ts index d6b867db7..a4ffbb3d3 100644 --- a/typescript/server/src/server/server.ts +++ b/typescript/server/src/server/server.ts @@ -7,7 +7,7 @@ import type { integer } from "../../../common/src"; // BUT AFTER EXPRESS IS IMPORTED. import { SYMBOL_TACHI_API_AUTH } from "#lib/constants/tachi"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { Env, ServerConfig, TachiConfig } from "#lib/setup/config"; import { RedisClient } from "#services/redis/redis"; import { IsNonEmptyString, IsRecord } from "#utils/misc"; @@ -18,12 +18,10 @@ import helmet from "helmet"; import { RequestLoggerMiddleware } from "./middleware/request-logger"; import mainRouter from "./router/router"; -const logger = CreateLogCtx(__filename); - let store; if (Env.NODE_ENV !== "test") { - logger.info("Connecting ExpressSession to Redis.", { bootInfo: true }); + log.info("Connecting ExpressSession to Redis.", { bootInfo: true }); const RedisStore = connectRedis(expressSession); store = new RedisStore({ @@ -58,7 +56,7 @@ const userSessionMiddleware = expressSession({ const app: Express = express(); if (Env.NODE_ENV !== "production" && IsNonEmptyString(ServerConfig.CLIENT_DEV_SERVER)) { - logger.warn(`Enabling CORS requests from ${ServerConfig.CLIENT_DEV_SERVER}.`, { + log.warn(`Enabling CORS requests from ${ServerConfig.CLIENT_DEV_SERVER}.`, { bootInfo: true, }); @@ -98,7 +96,7 @@ if (Env.NODE_ENV !== "production" && IsNonEmptyString(ServerConfig.CLIENT_DEV_SE app.options("*", (req, res) => res.send()); if (Env.NODE_ENV !== "test") { - logger.info("Enabling Helmet, as no CLIENT_DEV_SERVER was set, or we are in production.", { + log.info("Enabling Helmet, as no CLIENT_DEV_SERVER was set, or we are in production.", { bootInfo: true, }); } @@ -125,7 +123,7 @@ app.set("query parser", "simple"); process.on("unhandledRejection", (reason, promise) => { // @ts-expect-error reason is an error, and the logger can handle errors // it just refuses. - logger.error(reason, { promise }); + log.error(reason, { promise }); }); // enable reading json bodies @@ -157,13 +155,13 @@ if ( ServerConfig.CDN_CONFIG.SAVE_LOCATION.SERVE_OWN_CDN === true ) { if (Env.NODE_ENV === "production") { - logger.warn( + log.warn( `Running LOCAL_FILESYSTEM OWN_CDN in production. Consider making a separate process handle your CDN for performance.`, { bootInfo: true }, ); } - logger.info(`Running own CDN at ${ServerConfig.CDN_CONFIG.SAVE_LOCATION.LOCATION}.`, { + log.info(`Running own CDN at ${ServerConfig.CDN_CONFIG.SAVE_LOCATION.LOCATION}.`, { bootInfo: true, }); @@ -182,7 +180,7 @@ const MAIN_ERR_HANDLER: express.ErrorRequestHandler = (err, req, res, _next) => const expErr: ExpressJSONErr = err as ExpressJSONErr; if (expErr.status === 400 && "body" in expErr) { - logger.info(`JSON Parsing Error?`, { + log.info(`JSON Parsing Error?`, { url: req.originalUrl, userID: req[SYMBOL_TACHI_API_AUTH]?.userID, @@ -193,7 +191,7 @@ const MAIN_ERR_HANDLER: express.ErrorRequestHandler = (err, req, res, _next) => // else, this isn't a JSON parsing error } - logger.error(`MAIN_ERR_HANDLER hit by request.`, { url: req.originalUrl, body: req.body }); + log.error(`MAIN_ERR_HANDLER hit by request.`, { url: req.originalUrl, body: req.body }); const unknownErr = err as unknown; @@ -204,7 +202,7 @@ const MAIN_ERR_HANDLER: express.ErrorRequestHandler = (err, req, res, _next) => }); } - logger.error("Fatal error propagated to server root? ", { + log.error("Fatal error propagated to server root? ", { err: unknownErr, url: req.originalUrl, authInfo: req[SYMBOL_TACHI_API_AUTH], diff --git a/typescript/server/src/services/mongo/db.ts b/typescript/server/src/services/mongo/db.ts index 4ec76b676..e55eede25 100644 --- a/typescript/server/src/services/mongo/db.ts +++ b/typescript/server/src/services/mongo/db.ts @@ -49,12 +49,10 @@ import { // ^ These rules are disabled for good reason. We have to deal with some very nonsensical types here // so we just disable these rules. I know, it sucks, but we'll live. import { ONE_MINUTE, ONE_SECOND } from "#lib/constants/time"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { Env, ServerConfig } from "#lib/setup/config"; import { GetMillisecondsSince } from "#utils/misc"; -const logger = CreateLogCtx(__filename); - let dbName = ServerConfig.MONGO_DATABASE_NAME; /* istanbul ignore next */ @@ -62,7 +60,7 @@ if (Env.NODE_ENV === "test") { dbName = `testingdb`; } -logger.info(`Connecting to database ${Env.MONGO_URL}/${dbName}...`, { bootInfo: true }); +log.info(`Connecting to database ${Env.MONGO_URL}/${dbName}...`, { bootInfo: true }); const dbtime = process.hrtime.bigint(); export const monkDB = monk(`${Env.MONGO_URL}/${dbName}`, { @@ -78,12 +76,12 @@ export const monkDB = monk(`${Env.MONGO_URL}/${dbName}`, { /* istanbul ignore next */ monkDB .then(() => { - logger.info(`Database connection successful: took ${GetMillisecondsSince(dbtime)}ms`, { + log.info(`Database connection successful: took ${GetMillisecondsSince(dbtime)}ms`, { bootInfo: true, }); }) .catch((err) => { - logger.crit(`Failed to connect to database: ${err}`); + log.fatal(`Failed to connect to database: ${err}`); // can't connect. kill self after 1 second. setTimeout(() => { diff --git a/typescript/server/src/services/mongo/indexes.ts b/typescript/server/src/services/mongo/indexes.ts index faab61884..e55b33e4d 100644 --- a/typescript/server/src/services/mongo/indexes.ts +++ b/typescript/server/src/services/mongo/indexes.ts @@ -3,7 +3,7 @@ import type { IndexOptions } from "mongodb"; import monk, { type IMonkManager } from "monk"; /* eslint-disable no-await-in-loop */ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { TachiConfig } from "#lib/setup/config"; import { DedupeArr, Random20Hex } from "#utils/misc"; @@ -11,8 +11,6 @@ import type { Databases } from "./db"; import { GAME_PT_CONFIGS } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - interface Index { fields: Record; options?: IndexOptions; @@ -193,7 +191,7 @@ export async function UpdateIndexes(db: IMonkManager, reset: boolean) { if (reset) { await db.get(collection).dropIndexes(); - logger.debug(`Reset ${collection}.`); + log.debug(`Reset ${collection}.`); } for (const index of values) { @@ -202,16 +200,16 @@ export async function UpdateIndexes(db: IMonkManager, reset: boolean) { // that this sucks... const r = await db.get(collection).createIndex(index.fields, index.options); - logger.debug(r); + log.debug(r); } catch (err) { - logger.debug(err); + log.debug(err); // index already exists. } } } - logger.debug("Done."); + log.debug("Done."); } export async function SetIndexes(mongoUrl: string, reset: boolean) { diff --git a/typescript/server/src/services/mongo/sequence-docs.ts b/typescript/server/src/services/mongo/sequence-docs.ts index e6c1c7f8b..b262870ef 100644 --- a/typescript/server/src/services/mongo/sequence-docs.ts +++ b/typescript/server/src/services/mongo/sequence-docs.ts @@ -1,9 +1,7 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "./db"; -const logger = CreateLogCtx(__filename); - export async function InitSequenceDocs() { await db.counters.remove({}); @@ -49,7 +47,7 @@ export async function InitSequenceDocs() { }, ]; - logger.verbose( + log.verbose( `Setting Counters -> ${Counters.map((e) => `${e.counterName}: ${e.value}`).join(", ")}`, ); diff --git a/typescript/server/src/services/redis/redis.ts b/typescript/server/src/services/redis/redis.ts index 07cdd3960..208ada58f 100644 --- a/typescript/server/src/services/redis/redis.ts +++ b/typescript/server/src/services/redis/redis.ts @@ -1,12 +1,10 @@ import { ONE_MINUTE, ONE_SECOND } from "#lib/constants/time"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { Env } from "#lib/setup/config"; import { GetMillisecondsSince } from "#utils/misc"; import redis from "redis"; -const logger = CreateLogCtx(__filename); - -logger.verbose("Instantiated Redis Store", { bootInfo: true }); +log.verbose("Instantiated Redis Store", { bootInfo: true }); export const RedisClient = redis.createClient({ url: `redis://${Env.REDIS_URL}`, @@ -14,12 +12,12 @@ export const RedisClient = redis.createClient({ const startConnect = process.hrtime.bigint(); -logger.verbose("Instantiated Redis Client", { bootInfo: true }); +log.verbose("Instantiated Redis Client", { bootInfo: true }); function EmitCritical() { /* istanbul ignore next */ if (!RedisClient.connected) { - logger.crit(`Could not connect to redis in time. No more information is available.`); + log.fatal(`Could not connect to redis in time. No more information is available.`); // can't connect. kill self after 1 second. setTimeout(() => { @@ -33,7 +31,7 @@ function EmitCritical() { const ref = setTimeout(EmitCritical, ONE_MINUTE * 5); RedisClient.on("connect", () => { - logger.info(`Connected to Redis. Took ${GetMillisecondsSince(startConnect)}ms`, { + log.info(`Connected to Redis. Took ${GetMillisecondsSince(startConnect)}ms`, { bootInfo: true, }); diff --git a/typescript/server/src/test-utils/fake-auth.ts b/typescript/server/src/test-utils/fake-auth.ts index 496abaace..85719f847 100644 --- a/typescript/server/src/test-utils/fake-auth.ts +++ b/typescript/server/src/test-utils/fake-auth.ts @@ -1,14 +1,12 @@ import type supertest from "supertest"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { ClearTestingRateLimitCache } from "#server/middleware/rate-limiter"; import db from "#services/mongo/db"; import { ALL_PERMISSIONS } from "../../../common/src"; import ResetDBState from "./resets"; -const logger = CreateLogCtx(__filename); - export async function CreateFakeAuthCookie(mockApi: supertest.SuperTest) { await ResetDBState(); ClearTestingRateLimitCache(); @@ -21,7 +19,7 @@ export async function CreateFakeAuthCookie(mockApi: supertest.SuperTest(); const modifiedUserIDs = new Set(); @@ -34,7 +32,7 @@ export async function RecalcAllScores(filter = {}) { const chart = await db.anyCharts[c.game].findOne({ chartID: c.chartID }); if (!chart) { - logger.error(`Can't find chartID ${c.chartID} ${c.scoreID} (${c.game})`, { + log.error(`Can't find chartID ${c.chartID} ${c.scoreID} (${c.game})`, { score: c, }); @@ -69,10 +67,10 @@ export async function RecalcAllScores(filter = {}) { filter, ); - logger.info("Reprocessing PBs..."); + log.info("Reprocessing PBs..."); await UpdateAllPBs([...modifiedUserIDs.values()], filter); - logger.info(`Updating Profiles for ${modifiedUsers.size} users...`); + log.info(`Updating Profiles for ${modifiedUsers.size} users...`); for (const userInfo of modifiedUsers.values()) { const [game, playtype, strUserID] = userInfo.split("-") as [GameGroup, Playtype, string]; @@ -86,7 +84,7 @@ export async function RecalcAllScores(filter = {}) { await UpdateUsersQuests(goalInfo, game, [playtype], userID, logger); } - logger.info(`Done!`); + log.info(`Done!`); } export async function UpdateAllPBs(userIDs?: Array, filter = {}) { @@ -101,7 +99,7 @@ export async function UpdateAllPBs(userIDs?: Array, filter = {}) { } for (const user of allUsers) { - logger.verbose(`Finding ${FormatUserDoc(user)}'s scores.`); + log.verbose(`Finding ${FormatUserDoc(user)}'s scores.`); for (const game of TachiConfig.GAMES) { const gameConfig = GetGameGroupConfig(game); @@ -118,7 +116,7 @@ export async function UpdateAllPBs(userIDs?: Array, filter = {}) { continue; } - logger.verbose(`PBing ${FormatUserDoc(user)}'s scores.`); + log.verbose(`PBing ${FormatUserDoc(user)}'s scores.`); await ProcessPBs( game, playtype, @@ -130,5 +128,5 @@ export async function UpdateAllPBs(userIDs?: Array, filter = {}) { } } - logger.verbose(`Done!`); + log.verbose(`Done!`); } diff --git a/typescript/server/src/utils/calculations/recalc-sessions.ts b/typescript/server/src/utils/calculations/recalc-sessions.ts index f5763c8e2..4083e4e34 100644 --- a/typescript/server/src/utils/calculations/recalc-sessions.ts +++ b/typescript/server/src/utils/calculations/recalc-sessions.ts @@ -1,17 +1,15 @@ /* eslint-disable no-await-in-loop */ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { CreateSessionCalcData } from "#lib/score-import/framework/calculated-data/session"; import db from "#services/mongo/db"; import { GetGPTString } from "../../../../common/src"; -const logger = CreateLogCtx(__filename); - export async function RecalcSessions(filter = {}) { const allSessions = await db.sessions.find(filter); - logger.info(`Recalcing ${allSessions.length} sessions.`); + log.info(`Recalcing ${allSessions.length} sessions.`); for (const session of allSessions) { const scores = await db.scores.find( @@ -31,8 +29,8 @@ export async function RecalcSessions(filter = {}) { try { c = CreateSessionCalcData(GetGPTString(session.game, session.playtype), scores); } catch (err) { - logger.error(`Recalcing ${session.game} (${session.playtype}) failed.`, { err }); - logger.warn(`Destroying session!`); + log.error(`Recalcing ${session.game} (${session.playtype}) failed.`, { err }); + log.warn(`Destroying session!`); await db.sessions.remove({ sessionID: session.sessionID }); continue; } @@ -40,5 +38,5 @@ export async function RecalcSessions(filter = {}) { await db.sessions.update({ sessionID: session.sessionID }, { $set: { calculatedData: c } }); } - logger.info(`Done!`); + log.info(`Done!`); } diff --git a/typescript/server/src/utils/class.ts b/typescript/server/src/utils/class.ts index 665bba70d..148294fd3 100644 --- a/typescript/server/src/utils/class.ts +++ b/typescript/server/src/utils/class.ts @@ -1,5 +1,5 @@ import { CreateGameSettings } from "#lib/game-settings/create-game-settings"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { EmitWebhookEvent } from "#lib/webhooks/webhooks"; import db from "#services/mongo/db"; @@ -14,8 +14,6 @@ import { type UserGameStats, } from "../../../common/src"; -const logger = CreateLogCtx(__filename); - /** * Returns the provided class if it is greater than the one in userGameStats * @returns The provided class if it is greater, NULL if there is nothing @@ -32,7 +30,7 @@ export function ReturnClassIfGreater( const classInfo = gptConfig.classes[classSet]; if (!classInfo) { - logger.warn( + log.warn( `Invalid ReturnClassIfGreater call. Attempted to index set '${classSet}' on ${gptString}. No such class is defined for this game.`, ); @@ -69,7 +67,7 @@ export function ClassToIndex(gptString: GPTString, classSet: Classes[GPTString], const classInfo = gptConfig.classes[classSet]; if (!classInfo) { - logger.warn( + log.warn( `Invalid ClassToIndex call. Attempted to index set '${classSet}' on ${gptString}. No such class is defined for this game. Returning null.`, ); return null; @@ -78,7 +76,7 @@ export function ClassToIndex(gptString: GPTString, classSet: Classes[GPTString], const v = classInfo.values.map((e) => e.id).indexOf(classVal); if (v === -1) { - logger.warn( + log.warn( `Attempted to index a class that doesn't exist: ${classVal} on ${classSet} (${gptString}). Returning null.`, ); return null; @@ -129,7 +127,7 @@ export async function UpdateClassIfGreater( }, }); - logger.info(`Created new player gamestats for ${userID} (${game} ${playtype})`); + log.info(`Created new player gamestats for ${userID} (${game} ${playtype})`); await CreateGameSettings(userID, game, playtype); } diff --git a/typescript/server/src/utils/db.ts b/typescript/server/src/utils/db.ts index 6b1800de0..98f05c342 100644 --- a/typescript/server/src/utils/db.ts +++ b/typescript/server/src/utils/db.ts @@ -1,6 +1,6 @@ import type { FilterQuery } from "mongodb"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { @@ -16,8 +16,6 @@ import { type ScoreDocument, } from "../../../common/src"; -const logger = CreateLogCtx(__filename); - export async function GetNextCounterValue(counterName: string): Promise { const sequenceDoc = await db.counters.findOneAndUpdate( { @@ -36,7 +34,7 @@ export async function GetNextCounterValue(counterName: string): Promise ); if (!sequenceDoc) { - logger.error(`Could not find sequence document for ${counterName}`); + log.error(`Could not find sequence document for ${counterName}`); throw new Error(`Could not find sequence document for ${counterName}.`); } @@ -44,7 +42,7 @@ export async function GetNextCounterValue(counterName: string): Promise } export async function DecrementCounterValue(counterName: string): Promise { - logger.verbose(`Decrementing Counter Value ${counterName}.`); + log.verbose(`Decrementing Counter Value ${counterName}.`); const sequenceDoc = await db.counters.findOneAndUpdate( { @@ -61,7 +59,7 @@ export async function DecrementCounterValue(counterName: string): Promise( collection: ICollection, @@ -17,7 +15,7 @@ export async function EfficientDBIterate( let lastID: IObjectID | null = null; while (true) { - logger.info(`Running on ${i} - ${i + bucketSize} documents.`); + log.info(`Running on ${i} - ${i + bucketSize} documents.`); const newFilter: any = { ...filter }; @@ -35,7 +33,7 @@ export async function EfficientDBIterate( lastID = docs.at(-1)?._id ?? null; if (docs.length === 0) { - logger.info(`Ended documents at ${i}.`); + log.info(`Ended documents at ${i}.`); break; } diff --git a/typescript/server/src/utils/folder.ts b/typescript/server/src/utils/folder.ts index 5821fecde..6d4988c37 100644 --- a/typescript/server/src/utils/folder.ts +++ b/typescript/server/src/utils/folder.ts @@ -1,6 +1,6 @@ import type { BulkWriteOperation, FilterQuery } from "mongodb"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { TachiConfig } from "#lib/setup/config"; import db from "#services/mongo/db"; import deepmerge from "deepmerge"; @@ -23,8 +23,6 @@ import { } from "../../../common/src"; import { GetFolderForIDGuaranteed } from "./db"; -const logger = CreateLogCtx(__filename); - // overloads! export async function ResolveFolderToCharts( @@ -72,7 +70,7 @@ export async function ResolveFolderToCharts( case "charts": { const folderDataTransposed = TransposeFolderData(folder.data); - logger.debug(`Transposed folder data in resolve-folder-to-charts.`, { + log.debug(`Transposed folder data in resolve-folder-to-charts.`, { folder, folderDataTransposed, }); @@ -207,7 +205,7 @@ export async function CreateFolderChartLookup(folder: FolderDocument, flush = fa // create a folder-chart-lookup at the same time. await db["folder-chart-lookup"].bulkWrite(ops); } catch (err) { - logger.error(`Failed to create folder chart lookup for ${folder.title}.`, { folder, err }); + log.error(`Failed to create folder chart lookup for ${folder.title}.`, { folder, err }); throw err; } } @@ -217,9 +215,9 @@ export async function CreateFolderChartLookup(folder: FolderDocument, flush = fa * common use cases, such as retrieving chartIDs from a folder. */ export async function InitaliseFolderChartLookup() { - logger.info(`Started InitialiseFolderChartLookup`); + log.info(`Started InitialiseFolderChartLookup`); await db["folder-chart-lookup"].remove({}); - logger.info(`Flushed Cache.`); + log.info(`Flushed Cache.`); // temporary hack -- this will still break if we introduce a new // playtype on staging or something. @@ -228,11 +226,11 @@ export async function InitaliseFolderChartLookup() { game: { $in: TachiConfig.GAMES }, }); - logger.info(`Reloading ${folders.length} folders.`); + log.info(`Reloading ${folders.length} folders.`); await Promise.all(folders.map((folder) => CreateFolderChartLookup(folder))); - logger.info(`Completed InitialiseFolderChartLookup.`); + log.info(`Completed InitialiseFolderChartLookup.`); } export async function GetFoldersFromTable(table: TableDocument) { @@ -242,7 +240,7 @@ export async function GetFoldersFromTable(table: TableDocument) { if (folders.length !== table.folders.length) { // this is an error, but we can return anyway. - logger.warn( + log.warn( `Table ${table.tableID} has a mismatch of real folders to stored folders. ${table.folders.length} -> ${folders.length}`, ); } @@ -274,7 +272,7 @@ export async function GetFolderNamesInOrder(table: TableDocument): Promise, logger: KtLogger) { +export function WrapScriptPromise(promise: Promise, log: KtLogger) { let code = 0; void promise .then(() => { - logger.info(`Finished executing.`); + log.info(`Finished executing.`); }) .catch((err: Error) => { - logger.error(`Failed executing.`, { err }); + log.error(`Failed executing.`, { err }); code = 1; }) @@ -339,7 +339,7 @@ export function WrapScriptPromise(promise: Promise, logger: KtLogger) { process.exit(1); }, ONE_SECOND * 10); - logger.end(() => { + log.end(() => { process.exit(code); }); }); diff --git a/typescript/server/src/utils/naive-csv-parser.test.ts b/typescript/server/src/utils/naive-csv-parser.test.ts index d367886d0..9b5c91af6 100644 --- a/typescript/server/src/utils/naive-csv-parser.test.ts +++ b/typescript/server/src/utils/naive-csv-parser.test.ts @@ -1,11 +1,9 @@ -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import { TestingIIDXEamusementCSV27 } from "#test-utils/test-data"; import t from "tap"; import { CSVParseError, NaiveCSVParse } from "./naive-csv-parser"; -const logger = CreateLogCtx(__filename); - t.test("#ParseCSV", (t) => { t.test("Valid Basic CSV", (t) => { const headers = ["header1", "header2", "header3"]; diff --git a/typescript/server/src/utils/naive-csv-parser.ts b/typescript/server/src/utils/naive-csv-parser.ts index d4c1851bc..b01af5ebb 100644 --- a/typescript/server/src/utils/naive-csv-parser.ts +++ b/typescript/server/src/utils/naive-csv-parser.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import { type KtLogger, log } from "#lib/logger/log.js"; import { IsNonEmptyString } from "./misc"; @@ -16,7 +16,7 @@ export class CSVParseError extends Error { * The reason we have a handrolled CSV parser instead of using an existing library is because eamusement CSVs are * invalid -- due to their lack of escaping. We have to do very manual parsing to actually make this work! */ -export function NaiveCSVParse(csvBuffer: Buffer, logger: KtLogger) { +export function NaiveCSVParse(csvBuffer: Buffer, log: KtLogger) { const csvString = csvBuffer.toString("utf-8"); const csvData = csvString.split("\n"); @@ -75,12 +75,12 @@ export function NaiveCSVParse(csvBuffer: Buffer, logger: KtLogger) { // an empty string split on "," is an array with one empty value. if (cells.length === 1) { - logger.verbose(`Skipped empty row ${rowNumber}.`); + log.verbose(`Skipped empty row ${rowNumber}.`); continue; } if (cells.length !== rawHeaders.length) { - logger.info( + log.info( `csv has row (${rowNumber}) with invalid cell count of ${cells.length}, rejecting.`, { data, diff --git a/typescript/server/src/utils/queries/auth.ts b/typescript/server/src/utils/queries/auth.ts index 467c3512c..c45bf85db 100644 --- a/typescript/server/src/utils/queries/auth.ts +++ b/typescript/server/src/utils/queries/auth.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import ScoreImportFatalError from "#lib/score-import/framework/score-importing/score-import-error"; import db from "#services/mongo/db"; @@ -22,12 +22,12 @@ export function RevokeKaiAuth(userID: integer, service: "EAG" | "FLO" | "MIN") { export async function GetKaiAuthGuaranteed( userID: integer, service: "EAG" | "FLO" | "MIN", - logger: KtLogger, + log: KtLogger, ) { const authDoc = await GetKaiAuth(userID, service); if (!authDoc) { - logger.error(`No authentication was stored for ${service}.`); + log.error(`No authentication was stored for ${service}.`); throw new ScoreImportFatalError(401, `No authentication was stored for ${service}.`); } diff --git a/typescript/server/src/utils/queries/songs.ts b/typescript/server/src/utils/queries/songs.ts index 135e27652..928d4f11f 100644 --- a/typescript/server/src/utils/queries/songs.ts +++ b/typescript/server/src/utils/queries/songs.ts @@ -1,4 +1,4 @@ -import type { KtLogger } from "#lib/logger/logger"; +import type { KtLogger } from "#lib/logger/log.js"; import type { FindOneResult } from "monk"; import { @@ -117,11 +117,11 @@ export function FindSongOnID( }); } -export async function FindSongOnIDGuaranteed(game: GameGroup, songID: integer, logger: KtLogger) { +export async function FindSongOnIDGuaranteed(game: GameGroup, songID: integer, log: KtLogger) { const song = await FindSongOnID(game, songID); if (!song) { - logger.severe(`Song-Chart desync for ${songID}. Has charts, but no song.`); + log.error(`Song-Chart desync for ${songID}. Has charts, but no song.`); throw new InternalFailure(`Song-Chart desync for ${songID}. Has charts, but no song.`); } diff --git a/typescript/server/src/utils/user.ts b/typescript/server/src/utils/user.ts index 1b41342e3..85ddf8ff9 100644 --- a/typescript/server/src/utils/user.ts +++ b/typescript/server/src/utils/user.ts @@ -1,7 +1,7 @@ import type { FindOneResult } from "monk"; import { ONE_DAY } from "#lib/constants/time"; -import CreateLogCtx from "#lib/logger/logger"; +import { log } from "#lib/logger/log.js"; import db from "#services/mongo/db"; import { @@ -17,8 +17,6 @@ import { type UserGameStats, } from "../../../common/src"; -const logger = CreateLogCtx(__filename); - /** * Returns a user's username from their ID. Throws if no user with that ID exists. */ @@ -86,7 +84,7 @@ export async function GetUsersWithIDs(userIDs: Array) { // Note that we should dedupe this by making a set // as passing [1, 1, 1] is perfectly legal to this function. if (users.length !== new Set(userIDs).size) { - logger.severe( + log.error( `GetUsersWithIDs was given ${userIDs.length} userIDs, but only matched ${users.length} -- state desync likely.`, { userIDs, users }, ); @@ -107,7 +105,7 @@ export async function GetUserWithIDGuaranteed(userID: integer): Promise