From f52fe7dbabc2030196ab784e745e50d186f1979b Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Sat, 6 Aug 2022 23:58:03 +0300 Subject: [PATCH 01/49] Added server resource cfg --- freeroam-extended/server/resource.cfg | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 freeroam-extended/server/resource.cfg diff --git a/freeroam-extended/server/resource.cfg b/freeroam-extended/server/resource.cfg new file mode 100644 index 0000000..fba3415 --- /dev/null +++ b/freeroam-extended/server/resource.cfg @@ -0,0 +1,3 @@ +type: 'csharp', +main: 'freeroam-extended/bin/Debug/net6.0/Freeroam-Extended.dll', +deps: [] \ No newline at end of file From be68b642c14e31a1f9d08142372a43cad40f43f4 Mon Sep 17 00:00:00 2001 From: xshady Date: Sun, 7 Aug 2022 00:17:10 +0300 Subject: [PATCH 02/49] update client --- freeroam-extended/client/package-lock.json | 1741 ----------------- freeroam-extended/client/package.json | 20 - freeroam-extended/client/resource.cfg | 5 + freeroam-extended/client/src/chat.js | 2 +- .../Freeroam-Extended.csproj | 1 + 5 files changed, 7 insertions(+), 1762 deletions(-) delete mode 100644 freeroam-extended/client/package-lock.json delete mode 100644 freeroam-extended/client/package.json create mode 100644 freeroam-extended/client/resource.cfg diff --git a/freeroam-extended/client/package-lock.json b/freeroam-extended/client/package-lock.json deleted file mode 100644 index 423573c..0000000 --- a/freeroam-extended/client/package-lock.json +++ /dev/null @@ -1,1741 +0,0 @@ -{ - "name": "client", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@altv/types-client": { - "version": "1.9.6", - "resolved": "https://registry.npmjs.org/@altv/types-client/-/types-client-1.9.6.tgz", - "integrity": "sha512-zJiNm6jYhhjJGA2yrUOX1tIpeFCGzsiwRxL30nh5u/bkYRFA0KaV+QkNgRNbFByV5EFxhlsDAFpyKE6asO8YSg==", - "dev": true - }, - "@altv/types-natives": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@altv/types-natives/-/types-natives-1.4.3.tgz", - "integrity": "sha512-O/qHgF4QqjzXeLzkx2QbSo+F/aRw+K8GFJaBiGiWFUecEj2MrdrwzuFzmQvGHG8BgQ0RPJ/b6FRJZE8pzDFhVw==", - "dev": true - }, - "@altv/types-shared": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@altv/types-shared/-/types-shared-1.1.0.tgz", - "integrity": "sha512-o09zVB4J00WTBMAoZGkKknuZOYoMKtU7RY4MGGWj3vF7p6xNYK+vMShYoXckRe5tWXalnV/oyUk6B38ydqFgnQ==", - "dev": true - }, - "@altv/types-webview": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@altv/types-webview/-/types-webview-1.0.2.tgz", - "integrity": "sha512-3RceTutIDS/XV8YUn/AiSe61BERBb6LfCCQxIcN5bvlh26lPXC0naxtQTcG39pSgj8a5iiVT8LaRNdEZP6JBcA==", - "dev": true - }, - "i": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", - "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", - "dev": true - }, - "npm": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.11.0.tgz", - "integrity": "sha512-4qmtwHa28J4SPmwCNoQI07KIF/ljmBhhuqG+xNXsIIRpwdKB5OXkMIGfH6KlThR6kzusxlkgR7t1haFDB88dcQ==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.0.4", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.1.0", - "@npmcli/fs": "^2.1.0", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.1", - "abbrev": "~1.1.1", - "archy": "~1.0.0", - "cacache": "^16.1.0", - "chalk": "^4.1.2", - "chownr": "^2.0.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.2", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.12", - "glob": "^8.0.1", - "graceful-fs": "^4.2.10", - "hosted-git-info": "^5.0.0", - "ini": "^3.0.0", - "init-package-json": "^3.0.2", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "libnpmaccess": "^6.0.2", - "libnpmdiff": "^4.0.2", - "libnpmexec": "^4.0.2", - "libnpmfund": "^3.0.1", - "libnpmhook": "^8.0.2", - "libnpmorg": "^4.0.2", - "libnpmpack": "^4.0.2", - "libnpmpublish": "^6.0.2", - "libnpmsearch": "^5.0.2", - "libnpmteam": "^4.0.2", - "libnpmversion": "^3.0.1", - "make-fetch-happen": "^10.1.5", - "minipass": "^3.1.6", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "ms": "^2.1.2", - "node-gyp": "^9.0.0", - "nopt": "^5.0.0", - "npm-audit-report": "^3.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.2", - "npm-pick-manifest": "^7.0.1", - "npm-profile": "^6.0.3", - "npm-registry-fetch": "^13.1.1", - "npm-user-validate": "^1.0.1", - "npmlog": "^6.0.2", - "opener": "^1.5.2", - "pacote": "^13.4.1", - "parse-conflict-json": "^2.0.2", - "proc-log": "^2.0.1", - "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^5.0.1", - "read-package-json-fast": "^2.0.3", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.1", - "tar": "^6.1.11", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^2.0.0", - "validate-npm-package-name": "^4.0.0", - "which": "^2.0.2", - "write-file-atomic": "^4.0.1" - }, - "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "@gar/promisify": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "@npmcli/arborist": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.0", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.0.5", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/ci-detect": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "@npmcli/config": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/map-workspaces": "^2.0.2", - "ini": "^3.0.0", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "proc-log": "^2.0.0", - "read-package-json-fast": "^2.0.3", - "semver": "^7.3.5", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/disparity-colors": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.3.0" - } - }, - "@npmcli/fs": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "bundled": true, - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/map-workspaces": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - } - }, - "@npmcli/metavuln-calculator": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "@npmcli/package-json": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" - } - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "aproba": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "asap": { - "version": "2.0.6", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "bin-links": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "builtins": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "cacache": { - "version": "16.1.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - } - }, - "chalk": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chownr": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "cidr-regex": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "ip-regex": "^4.1.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "cli-columns": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "cli-table3": { - "version": "0.6.2", - "bundled": true, - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "clone": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "cmd-shim": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "color-support": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "columnify": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "common-ancestor-path": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "debug": { - "version": "4.3.4", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true - } - } - }, - "debuglog": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "defaults": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "depd": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "dezalgo": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true, - "dev": true - }, - "encoding": { - "version": "0.1.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "env-paths": { - "version": "2.2.1", - "bundled": true, - "dev": true - }, - "err-code": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "bundled": true, - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "gauge": { - "version": "4.0.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "glob": { - "version": "8.0.1", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "bundled": true, - "dev": true - }, - "has": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "hosted-git-info": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ignore-walk": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "minimatch": "^5.0.1" - } - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "ini": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "init-package-json": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" - } - }, - "ip": { - "version": "1.1.8", - "bundled": true, - "dev": true - }, - "ip-regex": { - "version": "4.3.0", - "bundled": true, - "dev": true - }, - "is-cidr": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "cidr-regex": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "bundled": true, - "dev": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "bundled": true, - "dev": true - }, - "just-diff": { - "version": "5.0.2", - "bundled": true, - "dev": true - }, - "just-diff-apply": { - "version": "5.2.0", - "bundled": true, - "dev": true - }, - "libnpmaccess": { - "version": "6.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmdiff": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/disparity-colors": "^2.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "binary-extensions": "^2.2.0", - "diff": "^5.0.0", - "minimatch": "^5.0.1", - "npm-package-arg": "^9.0.1", - "pacote": "^13.0.5", - "tar": "^6.1.0" - } - }, - "libnpmexec": { - "version": "4.0.5", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^5.0.0", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/run-script": "^3.0.0", - "chalk": "^4.1.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^9.0.1", - "npmlog": "^6.0.2", - "pacote": "^13.0.5", - "proc-log": "^2.0.0", - "read": "^1.0.7", - "read-package-json-fast": "^2.0.2", - "walk-up-path": "^1.0.0" - } - }, - "libnpmfund": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^5.0.0" - } - }, - "libnpmhook": { - "version": "8.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmorg": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmpack": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/run-script": "^3.0.0", - "npm-package-arg": "^9.0.1", - "pacote": "^13.5.0" - } - }, - "libnpmpublish": { - "version": "6.0.4", - "bundled": true, - "dev": true, - "requires": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - } - }, - "libnpmsearch": { - "version": "5.0.3", - "bundled": true, - "dev": true, - "requires": { - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmteam": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmversion": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^3.0.0", - "json-parse-even-better-errors": "^2.3.1", - "proc-log": "^2.0.0", - "semver": "^7.3.7" - } - }, - "lru-cache": { - "version": "7.9.0", - "bundled": true, - "dev": true - }, - "make-fetch-happen": { - "version": "10.1.5", - "bundled": true, - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.1.1", - "ssri": "^9.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "3.1.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - } - }, - "ms": { - "version": "2.1.3", - "bundled": true, - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "bundled": true, - "dev": true - }, - "node-gyp": { - "version": "9.0.0", - "bundled": true, - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "nopt": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-audit-report": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "npm-bundled": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "npm-package-arg": { - "version": "9.0.2", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "npm-packlist": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "7.0.1", - "bundled": true, - "dev": true, - "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - } - }, - "npm-profile": { - "version": "6.0.3", - "bundled": true, - "dev": true, - "requires": { - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0" - } - }, - "npm-registry-fetch": { - "version": "13.1.1", - "bundled": true, - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - } - }, - "npm-user-validate": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "npmlog": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.2", - "bundled": true, - "dev": true - }, - "p-map": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "pacote": { - "version": "13.5.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^3.0.1", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - } - }, - "parse-conflict-json": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "proc-log": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-call-limit": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "read": "1" - } - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "read": { - "version": "1.0.7", - "bundled": true, - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "read-package-json": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "retry": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "7.3.7", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "bundled": true, - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "bundled": true, - "dev": true - }, - "socks": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "6.2.0", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "spdx-correct": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "bundled": true, - "dev": true - }, - "ssri": { - "version": "9.0.1", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tar": { - "version": "6.1.11", - "bundled": true, - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "treeverse": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "walk-up-path": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "yallist": { - "version": "4.0.0", - "bundled": true, - "dev": true - } - } - } - } -} diff --git a/freeroam-extended/client/package.json b/freeroam-extended/client/package.json deleted file mode 100644 index fb46c21..0000000 --- a/freeroam-extended/client/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "client", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "start": "cd ../../.. && altv-server.exe" - }, - "keywords": [], - "author": "", - "license": "ISC", - "devDependencies": { - "@altv/types-client": "^1.9.6", - "@altv/types-natives": "^1.4.3", - "@altv/types-shared": "^1.1.0", - "@altv/types-webview": "^1.0.2", - "i": "^0.3.7", - "npm": "^8.1.4" - } -} diff --git a/freeroam-extended/client/resource.cfg b/freeroam-extended/client/resource.cfg new file mode 100644 index 0000000..f0ecef5 --- /dev/null +++ b/freeroam-extended/client/resource.cfg @@ -0,0 +1,5 @@ +client-type: js +client-main: src/index.js +client-files: [ + src/* +] diff --git a/freeroam-extended/client/src/chat.js b/freeroam-extended/client/src/chat.js index a51117f..7fb9d42 100644 --- a/freeroam-extended/client/src/chat.js +++ b/freeroam-extended/client/src/chat.js @@ -6,7 +6,7 @@ export const chatData = { opened: false } -export const view = new alt.WebView("http://resource/client/src/html/index.html"); +export const view = new alt.WebView("http://resource/src/html/index.html"); const buffer = []; export function toggleChat() diff --git a/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj b/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj index 5f0ad37..5810b92 100644 --- a/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj +++ b/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj @@ -5,6 +5,7 @@ Freeroam-Extended enable enable + true From d3b5d6c98689149454e408ccb959131b8205a2dd Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Sun, 7 Aug 2022 01:55:24 +0300 Subject: [PATCH 03/49] Added Tp coords command --- .../server/freeroam-extended/Commands.cs | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/freeroam-extended/server/freeroam-extended/Commands.cs b/freeroam-extended/server/freeroam-extended/Commands.cs index 2f64998..1fa87ea 100644 --- a/freeroam-extended/server/freeroam-extended/Commands.cs +++ b/freeroam-extended/server/freeroam-extended/Commands.cs @@ -1,9 +1,6 @@ -using System; -using System.Linq; -using System.Numerics; +using System.Numerics; using AltV.Net; using AltV.Net.Data; -using AltV.Net.Elements.Entities; using AltV.Net.Enums; using AltV.Net.Resources.Chat.Api; using Freeroam_Extended.Factories; @@ -12,7 +9,7 @@ namespace Freeroam_Extended { public class Commands : IScript { - private readonly Random _random = new Random(); + private readonly Random _random = new(); [Command("veh")] public void SpawnVeh(IAltPlayer player, string vehicleName) @@ -139,6 +136,12 @@ public void Ban(IAltPlayer player, int id) return; } + if (player.Id == id) + { + player.SendChatMessage("{FF0000} You can't ban yourself!"); + return; + } + var target = Alt.GetAllPlayers().FirstOrDefault(p => p.Id == id); if (target == null) { @@ -429,5 +432,19 @@ public void Announce(IAltPlayer player, string header, int time, params string[] var message = string.Join(" ", body); Alt.EmitAllClients("announce", header, message, time); } + + [Command("tpcoords")] + public void TpCoords(IAltPlayer player, int x, int y, int z) + { + if (!player.IsAdmin) + { + player.SendChatMessage("{FF0000} No permission!"); + return; + } + + player.Position = new Vector3(x, y, z); + player.SendChatMessage($"{{00FF00}} You were teleported to {x}, {y}, {z}!"); + player.Emit("set_last_command"); + } } } \ No newline at end of file From 995a4c58583187e78184a2dbf02755c555106339 Mon Sep 17 00:00:00 2001 From: xshady Date: Sun, 7 Aug 2022 02:58:34 +0300 Subject: [PATCH 04/49] convert client to typescript --- freeroam-extended/client/.eslintrc.cjs | 122 ++ freeroam-extended/client/build.js | 22 + .../client/{src => }/html/app.js | 0 .../client/{src => }/html/index.html | 4 +- .../client/{src => }/html/style.css | 0 freeroam-extended/client/jsconfig.json | 10 - freeroam-extended/client/package.json | 28 + freeroam-extended/client/resource.cfg | 5 +- freeroam-extended/client/src/chat.js | 67 - freeroam-extended/client/src/chat.ts | 69 + freeroam-extended/client/src/events.js | 77 - freeroam-extended/client/src/events.ts | 89 + freeroam-extended/client/src/helpers.js | 234 --- freeroam-extended/client/src/helpers.ts | 300 +++ freeroam-extended/client/src/index.js | 85 - freeroam-extended/client/src/index.ts | 79 + freeroam-extended/client/src/keycodes.ts | 109 ++ freeroam-extended/client/src/noclip.js | 177 -- freeroam-extended/client/src/noclip.ts | 175 ++ freeroam-extended/client/tsconfig.eslint.json | 6 + freeroam-extended/client/tsconfig.json | 25 + freeroam-extended/client/yarn.lock | 1667 +++++++++++++++++ 22 files changed, 2696 insertions(+), 654 deletions(-) create mode 100644 freeroam-extended/client/.eslintrc.cjs create mode 100644 freeroam-extended/client/build.js rename freeroam-extended/client/{src => }/html/app.js (100%) rename freeroam-extended/client/{src => }/html/index.html (96%) rename freeroam-extended/client/{src => }/html/style.css (100%) delete mode 100644 freeroam-extended/client/jsconfig.json create mode 100644 freeroam-extended/client/package.json delete mode 100644 freeroam-extended/client/src/chat.js create mode 100644 freeroam-extended/client/src/chat.ts delete mode 100644 freeroam-extended/client/src/events.js create mode 100644 freeroam-extended/client/src/events.ts delete mode 100644 freeroam-extended/client/src/helpers.js create mode 100644 freeroam-extended/client/src/helpers.ts delete mode 100644 freeroam-extended/client/src/index.js create mode 100644 freeroam-extended/client/src/index.ts create mode 100644 freeroam-extended/client/src/keycodes.ts delete mode 100644 freeroam-extended/client/src/noclip.js create mode 100644 freeroam-extended/client/src/noclip.ts create mode 100644 freeroam-extended/client/tsconfig.eslint.json create mode 100644 freeroam-extended/client/tsconfig.json create mode 100644 freeroam-extended/client/yarn.lock diff --git a/freeroam-extended/client/.eslintrc.cjs b/freeroam-extended/client/.eslintrc.cjs new file mode 100644 index 0000000..22d8701 --- /dev/null +++ b/freeroam-extended/client/.eslintrc.cjs @@ -0,0 +1,122 @@ +module.exports = { + env: { + es2021: true, + }, + parser: '@typescript-eslint/parser', + extends: [ + 'standard', + 'plugin:@typescript-eslint/recommended', + ], + parserOptions: { + ecmaVersion: 12, + sourceType: 'module', + project: './tsconfig.eslint.json', + extraFileExtensions: ['.cjs'] + }, + rules: { + 'no-new': 0, + semi: ['warn', 'never'], + 'require-await': 'error', + quotes: ['warn', 'double'], + 'prefer-const': ['error', { + ignoreReadBeforeAssign: true, + }], + '@typescript-eslint/member-delimiter-style': ['warn', + { + multiline: { + delimiter: 'none', + requireLast: false, + }, + }, + ], + '@typescript-eslint/explicit-member-accessibility': ['error', { + ignoredMethodNames: ['constructor'], + }], + 'eol-last': 0, + '@typescript-eslint/no-empty-function': 0, + '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/explicit-function-return-type': 0, + 'comma-dangle': 'off', + '@typescript-eslint/comma-dangle': ['warn', { + arrays: 'always-multiline', + objects: 'always-multiline', + imports: 'always-multiline', + exports: 'always-multiline', + functions: 'always-multiline', + enums: 'always-multiline', + generics: 'always-multiline', + tuples: 'always-multiline', + }], + 'no-useless-constructor': 'off', + '@typescript-eslint/no-floating-promises': ['error', { + ignoreVoid: false, + ignoreIIFE: false, + }], + '@typescript-eslint/no-empty-interface': [ + 'error', + { + 'allowSingleExtends': true + } + ], + '@typescript-eslint/ban-ts-comment': ['warn', { + 'ts-expect-error': 'allow-with-description', + 'ts-ignore': 'allow-with-description', + 'ts-nocheck': true, + 'ts-check': false, + minimumDescriptionLength: 3, + }], + 'node/handle-callback-err': 0, + '@typescript-eslint/type-annotation-spacing': ['error', { + 'before': false, + 'after': true, + 'overrides': { + arrow: { + 'before': true, + 'after': true, + } + } + }], + '@typescript-eslint/await-thenable': 'error', + 'func-call-spacing': 0, + '@typescript-eslint/func-call-spacing': 0, + 'indent': 0, + '@typescript-eslint/indent': ['error', 2], + 'no-useless-escape': 0, + 'space-infix-ops': 0, + '@typescript-eslint/space-infix-ops': ['error'], + semi: 0, + '@typescript-eslint/semi': ['warn', 'never'], + 'lines-between-class-members': 0, + '@typescript-eslint/lines-between-class-members': ['error', 'always', { + 'exceptAfterSingleLine': true + }], + 'no-use-before-define': 0, + '@typescript-eslint/no-use-before-define': ['error', { + 'functions': false, + 'classes': true, + 'variables': true + }], + 'space-before-function-paren': ['error', { + anonymous: 'never', + named: 'never', + asyncArrow: 'always', + }], + 'curly': ['error', 'multi-or-nest'], + 'import/no-webpack-loader-syntax': 0, + 'space-before-function-paren': ['error', { + anonymous: 'never', + named: 'never', + asyncArrow: 'always', + }], + 'brace-style': ['error', 'stroustrup'], + 'dot-notation': 0, + '@typescript-eslint/dot-notation': ['error'], + 'no-multi-str': 0, + }, + ignorePatterns: [ + '.eslintrc.cjs', + '*.js', + 'dist', + '*.d.ts', + ], +} diff --git a/freeroam-extended/client/build.js b/freeroam-extended/client/build.js new file mode 100644 index 0000000..5471d07 --- /dev/null +++ b/freeroam-extended/client/build.js @@ -0,0 +1,22 @@ +import esbuild from 'esbuild' +import { altvEsbuild } from 'altv-esbuild' + +const dev = process.argv[2] === '-dev' + +console.log('dev:', dev) + +esbuild.build({ + watch: dev, + bundle: true, + format: 'esm', + target: "esnext", + logLevel: "info", + entryPoints: ['src/index.ts'], + outdir: 'dist', + plugins: [ + altvEsbuild({ + mode: 'client', + dev, + }) + ] +}) diff --git a/freeroam-extended/client/src/html/app.js b/freeroam-extended/client/html/app.js similarity index 100% rename from freeroam-extended/client/src/html/app.js rename to freeroam-extended/client/html/app.js diff --git a/freeroam-extended/client/src/html/index.html b/freeroam-extended/client/html/index.html similarity index 96% rename from freeroam-extended/client/src/html/index.html rename to freeroam-extended/client/html/index.html index 5d1a6e9..468a4fc 100644 --- a/freeroam-extended/client/src/html/index.html +++ b/freeroam-extended/client/html/index.html @@ -8,7 +8,7 @@ - +
diff --git a/freeroam-extended/client/src/html/style.css b/freeroam-extended/client/html/style.css similarity index 100% rename from freeroam-extended/client/src/html/style.css rename to freeroam-extended/client/html/style.css diff --git a/freeroam-extended/client/jsconfig.json b/freeroam-extended/client/jsconfig.json deleted file mode 100644 index 24b6b0a..0000000 --- a/freeroam-extended/client/jsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "rootDir": "src", - "typeRoots": [ - "./node_modules/@types", - "./node_modules/@altv" - ] - } -} \ No newline at end of file diff --git a/freeroam-extended/client/package.json b/freeroam-extended/client/package.json new file mode 100644 index 0000000..696df97 --- /dev/null +++ b/freeroam-extended/client/package.json @@ -0,0 +1,28 @@ +{ + "name": "client", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "devDependencies": { + "@altv/types-client": "^2.2.9", + "@altv/types-natives": "^1.4.4", + "@altv/types-server": "^2.4.2", + "@altv/types-shared": "^1.2.6", + "@typescript-eslint/eslint-plugin": "^4.33.0", + "@typescript-eslint/parser": "^4.33.0", + "eslint": "^7.30.0", + "eslint-config-standard": "^16.0.3", + "eslint-plugin-import": "^2.24.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^5.1.0", + "typescript": "^4.7.4" + }, + "dependencies": { + "altv-esbuild": "^0.0.7", + "esbuild": "^0.14.53" + }, + "scripts": { + "build": "node --es-module-specifier-resolution=node build.js" + }, + "type": "module" +} diff --git a/freeroam-extended/client/resource.cfg b/freeroam-extended/client/resource.cfg index f0ecef5..084d7b7 100644 --- a/freeroam-extended/client/resource.cfg +++ b/freeroam-extended/client/resource.cfg @@ -1,5 +1,6 @@ client-type: js -client-main: src/index.js +client-main: dist/index.js client-files: [ - src/* + dist/* + html/* ] diff --git a/freeroam-extended/client/src/chat.js b/freeroam-extended/client/src/chat.js deleted file mode 100644 index 7fb9d42..0000000 --- a/freeroam-extended/client/src/chat.js +++ /dev/null @@ -1,67 +0,0 @@ -import * as alt from "alt-client"; -import { playerData } from './helpers'; - -export const chatData = { - loaded: false, - opened: false -} - -export const view = new alt.WebView("http://resource/src/html/index.html"); -const buffer = []; - -export function toggleChat() -{ - view.isVisible = !view.isVisible; -} - -function addMessage(name, text) { - if (name) { - view.emit("addMessage", name, text); - } else { - view.emit("addString", text); - } -} - -export function pushMessage(name, text) { - if (!chatData.loaded) { - buffer.push({ name, text }); - } else { - addMessage(name, text); - } -} - -export function pushLine(text) { - pushMessage(null, text); -} - -view.on("chatloaded", () => { - for (const msg of buffer) { - addMessage(msg.name, msg.text); - } - - chatData.loaded = true; -}); - -view.on("chatmessage", (text) => { - // alt.emitServer("chat:message", text); - - if (text.startsWith('/') && (Date.now() - playerData.lastCommandTimestamp) / 1000 > 10) { - alt.emitServer("chat:message", text); - } - // Activate this if we want a cd on the messages - // else if (playerData.chatState && ((Date.now() - playerData.lastMessageTimestamp) / 1000 > 10)) { - else if(playerData.chatState) { - alt.emitServer("chat:message", text); - playerData.lastMessageTimestamp = Date.now(); - } - - alt.toggleGameControls(true); - view.unfocus(); - - // Timeout to avoid collision with Enter key - setTimeout(() => { - chatData.opened = false; - }, 200); -}); - -pushLine("alt:V Multiplayer has started"); diff --git a/freeroam-extended/client/src/chat.ts b/freeroam-extended/client/src/chat.ts new file mode 100644 index 0000000..a37de25 --- /dev/null +++ b/freeroam-extended/client/src/chat.ts @@ -0,0 +1,69 @@ +import * as alt from "alt-client" +import { playerData } from "./helpers" + +export const chatData = { + loaded: false, + opened: false, +} + +export const view = new alt.WebView("http://resource/html/index.html") + +interface IBufferItem { + name: string | null + text: string +} + +const buffer: IBufferItem[] = [] + +export function toggleChat(): void { + view.isVisible = !view.isVisible +} + +function addMessage(name: string | null, text: string) { + if (name) + view.emit("addMessage", name, text) + else + view.emit("addString", text) +} + +export function pushMessage(name: string | null, text: string): void { + if (!chatData.loaded) + buffer.push({ name, text }) + else + addMessage(name, text) +} + +export function pushLine(text: string): void { + pushMessage(null, text) +} + +view.on("chatloaded", () => { + for (const msg of buffer) + addMessage(msg.name, msg.text) + + chatData.loaded = true +}) + +view.on("chatmessage", (text: string) => { + // alt.emitServer("chat:message", text); + + if (text.startsWith("/") && (Date.now() - playerData.lastCommandTimestamp) / 1000 > 10) + alt.emitServer("chat:message", text) + + // Activate this if we want a cd on the messages + // else if (playerData.chatState && ((Date.now() - playerData.lastMessageTimestamp) / 1000 > 10)) { + else if (playerData.chatState) { + alt.emitServer("chat:message", text) + playerData.lastMessageTimestamp = Date.now() + } + + alt.toggleGameControls(true) + view.unfocus() + + // Timeout to avoid collision with Enter key + setTimeout(() => { + chatData.opened = false + }, 200) +}) + +pushLine("alt:V Multiplayer has started") diff --git a/freeroam-extended/client/src/events.js b/freeroam-extended/client/src/events.js deleted file mode 100644 index 3c4e8fe..0000000 --- a/freeroam-extended/client/src/events.js +++ /dev/null @@ -1,77 +0,0 @@ -import { drawDMZone, playerData, setWeaponsUsage, mhint } from './helpers'; -import { pushMessage, chatData, view, toggleChat } from './chat'; -import { toggleNoclip } from './noclip'; - -import * as native from 'natives'; -import * as alt from 'alt-client'; - -alt.on('connectionComplete', () => { - setTimeout(() => { - // We assume that we are not in the airport if areWeaponsDisabled is on true when it triggers - if (playerData.areWeaponsDisabled) { - setWeaponsUsage(false); - } - }, 1000); -}); - -alt.onServer('airport_state', setWeaponsUsage); - -alt.onServer("chat:message", pushMessage); - -alt.onServer('set_last_command', () => { - playerData.commandTimestamp = Date.now(); -}); - -alt.onServer('noclip', toggleNoclip); - -alt.onServer('set_chat_state', state => { - playerData.chatState = state; -}); - -alt.onServer('draw_dmzone', (center_x, center_y, radius, count) => { - drawDMZone(center_x, center_y, radius, count); -}); - -alt.onServer('announce', (header, body, time) => { - mhint(header, body, time); -}); - -alt.on('keyup', (key) => { - if (!chatData.loaded) return; - - switch (key) { - case 113: { // F2 - playerData.areNametagsVisible = !playerData.areNametagsVisible; - native.displayRadar(playerData.areNametagsVisible); - native.displayHud(playerData.areNametagsVisible); - toggleChat(); - break; - } - - case 0xD: // Enter - case 0x54: { // T - if (!chatData.opened && alt.gameControlsEnabled()) { - chatData.opened = true; - view.emit('openChat', false); - view.focus(); - alt.toggleGameControls(false); - alt.emit("Client:HUD:setCefStatus", true); - } - break; - } - - case 0x1B: { // Escape - if (chatData.opened) { - chatData.opened = false; - view.emit('closeChat'); - view.unfocus(); - alt.toggleGameControls(true); - alt.emit("Client:HUD:setCefStatus", false); - } - break; - } - - default: - break; - } -}); \ No newline at end of file diff --git a/freeroam-extended/client/src/events.ts b/freeroam-extended/client/src/events.ts new file mode 100644 index 0000000..e668ee9 --- /dev/null +++ b/freeroam-extended/client/src/events.ts @@ -0,0 +1,89 @@ +import { drawDMZone, playerData, setWeaponsUsage, mhint, tpToWaypoint } from "./helpers" +import { pushMessage, chatData, view, toggleChat } from "./chat" +import { toggleNoclip } from "./noclip" + +import * as native from "natives" +import * as alt from "alt-client" +import { KeyCode } from "./keycodes" + +alt.on("connectionComplete", () => { + setTimeout(() => { + // We assume that we are not in the airport if areWeaponsDisabled is on true when it triggers + if (playerData.areWeaponsDisabled) + setWeaponsUsage(false) + }, 1000) +}) + +alt.onServer("airport_state", setWeaponsUsage) + +alt.onServer("chat:message", pushMessage) + +alt.onServer("set_last_command", () => { + playerData.commandTimestamp = Date.now() +}) + +alt.onServer("noclip", toggleNoclip) + +alt.onServer("set_chat_state", state => { + playerData.chatState = state +}) + +alt.onServer("draw_dmzone", ( + centerX: number, + centerY: number, + radius: number, + count: number, +) => { + drawDMZone(centerX, centerY, radius, count) +}) + +alt.onServer("announce", (header, body, time) => { + mhint(header, body, time) +}) + +alt.on("keyup", (key) => { + if (!chatData.loaded) return + + switch (key) { + case KeyCode.F2: { + playerData.areNametagsVisible = !playerData.areNametagsVisible + native.displayRadar(playerData.areNametagsVisible) + native.displayHud(playerData.areNametagsVisible) + toggleChat() + break + } + + case KeyCode.Enter: + case KeyCode.T: { + if (alt.isKeyDown(KeyCode.Ctrl)) { + tpToWaypoint().catch(e => { + alt.logError(e?.stack ?? e) + }) + break + } + + if (!chatData.opened && alt.gameControlsEnabled()) { + chatData.opened = true + view.emit("openChat", false) + view.focus() + alt.toggleGameControls(false) + alt.emit("Client:HUD:setCefStatus", true) + } + break + } + + case KeyCode.Escape: { // Escape + if (chatData.opened) { + chatData.opened = false + view.emit("closeChat") + view.unfocus() + alt.toggleGameControls(true) + alt.emit("Client:HUD:setCefStatus", false) + } + break + } + + default: + break + } +}) diff --git a/freeroam-extended/client/src/helpers.js b/freeroam-extended/client/src/helpers.js deleted file mode 100644 index 143c528..0000000 --- a/freeroam-extended/client/src/helpers.js +++ /dev/null @@ -1,234 +0,0 @@ -import * as native from 'natives'; -import * as alt from 'alt-client'; - -export const LOCAL_PLAYER = alt.Player.local; -export const EMPTY_WEAPON_HASH = 0xA2719263; - -export const playerData = { - areWeaponsDisabled: true, - areNametagsVisible: true, - lastCommandTimestamp: Date.now() - 10000, - lastMessageTimestamp: Date.now() - 10000, - chatState: false -} - -export function distance(vector1, vector2) { - return Math.sqrt( - Math.pow(vector1.x - vector2.x, 2) + - Math.pow(vector1.y - vector2.y, 2) + - Math.pow(vector1.z - vector2.z, 2) - ); -} - -export function displayAdvancedNotification(message, title = "Title", subtitle = "subtitle", notifImage = null, iconType = 0, backgroundColor = null, durationMult = 1) { - native.beginTextCommandThefeedPost('STRING') - native.addTextComponentSubstringPlayerName(message) - if (backgroundColor != null) native.thefeedSetNextPostBackgroundColor(backgroundColor) - if (notifImage != null) native.endTextCommandThefeedPostMessagetextTu(notifImage, notifImage, false, iconType, title, subtitle, durationMult) - return native.endTextCommandThefeedPostTicker(false, true) -} - -export function setWeaponsUsage(state) { - native.playSoundFrontend(-1, 'SIGN_DESTROYED', 'HUD_AWARDS', 1); - - if (state) { - playerData.areWeaponsDisabled = false; - - native.setCanPedEquipAllWeapons(LOCAL_PLAYER, true); - displayAdvancedNotification('Have fun.', 'Weapons Usage', 'Activated', 'CHAR_AMMUNATION', 1, 203, 1.5); - } - else { - native.giveWeaponToPed(LOCAL_PLAYER, EMPTY_WEAPON_HASH, 0, false, true); - playerData.areWeaponsDisabled = true; - - native.setCanPedEquipAllWeapons(LOCAL_PLAYER, false); - displayAdvancedNotification('You can only use weapons in the LS Airport zone.', 'Weapons Usage', 'Deactivated', 'CHAR_AMMUNATION', 1, 31, 1.5); - } -} - -export function drawText3d(text, x, y, z, scale, r, g, b, a, outline, offset, lagcomp, lagcompEntity) { - // If lagcomp is enabled and the lagcomp entity is in a vehicle. - if (lagcomp === true && lagcompEntity.vehicle !== null) { - const vector = native.getEntityVelocity(lagcompEntity.vehicle); - const frameTime = native.getFrameTime(); - - native.setDrawOrigin(x + (vector.x * frameTime), y + (vector.y * frameTime), z + (vector.z * frameTime), 0); - } else native.setDrawOrigin(x, y, z, 0); - - native.setTextFont(4); - native.setTextProportional(false); - native.setTextScale(scale, scale); - native.setTextColour(r, g, b, a); - native.setTextDropshadow(0, 0, 0, 0, 255); - native.setTextEdge(2, 0, 0, 0, 150); - native.setTextDropShadow(); - native.setTextCentre(true); - - if (outline) native.setTextOutline(); - - native.beginTextCommandDisplayText("CELL_EMAIL_BCON"); - - text.match(/.{1,99}/g).forEach(textBlock => { - native.addTextComponentSubstringPlayerName(textBlock); - }); - - native.endTextCommandDisplayText(0.0, offset, 0.0); - native.clearDrawOrigin(); -}; - -export class DirectionVector { - position; - rotation; - - constructor(position, rotation) { - this.position = position; - this.rotation = rotation; - } - - euler_to_quaternion(rotation) { - const roll = rotation.x * (Math.PI / 180.0); - const pitch = rotation.y * (Math.PI / 180.0); - const yaw = rotation.z * (Math.PI / 180.0); - - const qx = Math.sin(roll / 2) * Math.cos(pitch / 2) * Math.cos(yaw / 2) - Math.cos(roll / 2) * Math.sin(pitch / 2) * Math.sin(yaw / 2) - const qy = Math.cos(roll / 2) * Math.sin(pitch / 2) * Math.cos(yaw / 2) + Math.sin(roll / 2) * Math.cos(pitch / 2) * Math.sin(yaw / 2) - const qz = Math.cos(roll / 2) * Math.cos(pitch / 2) * Math.sin(yaw / 2) - Math.sin(roll / 2) * Math.sin(pitch / 2) * Math.cos(yaw / 2) - const qw = Math.cos(roll / 2) * Math.cos(pitch / 2) * Math.cos(yaw / 2) + Math.sin(roll / 2) * Math.sin(pitch / 2) * Math.sin(yaw / 2) - - return { x: qx, y: qy, z: qz, w: qw }; - } - - ForwardVector() { - const quatRot = this.euler_to_quaternion(this.rotation); - - const fVectorX = 2 * (quatRot.x * quatRot.y - quatRot.w * quatRot.z); - const fVectorY = 1 - 2 * (quatRot.x * quatRot.x + quatRot.z * quatRot.z); - const fVectorZ = 2 * (quatRot.y * quatRot.z + quatRot.w * quatRot.x); - - return new alt.Vector3(fVectorX, fVectorY, fVectorZ); - } - - Forward(distance) { - const forwardVector = this.ForwardVector(); - - return new alt.Vector3( - this.position.x + forwardVector.x * distance, - this.position.y + forwardVector.y * distance, - this.position.z + forwardVector.z * distance - ); - } - - RightVector() { - const quatRot = this.euler_to_quaternion(this.rotation); - - const rVectorX = 1 - 2 * (quatRot.y * quatRot.y + quatRot.z * quatRot.z); - const rVectorY = 2 * (quatRot.x * quatRot.y + quatRot.w * quatRot.z); - const rVectorZ = 2 * (quatRot.x * quatRot.z - quatRot.w * quatRot.y); - - return new alt.Vector3(rVectorX, rVectorY, rVectorZ); - } - - Right(distance) { - const rightVector = this.RightVector(); - - return new alt.Vector3( - this.position.x + rightVector.x * distance, - this.position.y + rightVector.y * distance, - this.position.z + rightVector.z * distance - ); - } - - UpVector() { - const quatRot = this.euler_to_quaternion(this.rotation); - - const uVectorX = 2 * (quatRot.x * quatRot.z + quatRot.w * quatRot.y); - const uVectorY = 2 * (quatRot.y * quatRot.z - quatRot.w * quatRot.x); - const uVectorZ = 1 - 2 * (quatRot.x * quatRot.x + quatRot.y * quatRot.y); - - return new alt.Vector3(uVectorX, uVectorY, uVectorZ); - } - - Up(distance) { - const upVector = this.UpVector(); - - return new alt.Vector3( - this.position.x + upVector.x * distance, - this.position.y + upVector.y * distance, - this.position.z + upVector.z * distance - ); - } -} - -export function drawDMZone(center_x, center_y, radius, count) -{ - let steps = 2 * Math.PI / count; - for(let i = 0; i < count; i++) - { - let blip_x = radius * Math.cos(steps * i) + center_x; - let blip_y = radius * Math.sin(steps * i) + center_y; - - let blip = native.addBlipForCoord(blip_x, blip_y, 0); - native.setBlipSprite(blip, 310); - native.setBlipHiddenOnLegend(blip, true); - native.setBlipAsShortRange(blip, true); - } -} - -export function drawText2D( - text, - pos, - scale, - color, - alignment = 0, - padding = 0 -) { - if (scale > 2) { - scale = 2; - } - - native.beginTextCommandDisplayText('STRING'); - native.addTextComponentSubstringPlayerName(text); - native.setTextFont(4); - native.setTextScale(1, scale); - native.setTextColour(color.r, color.g, color.b, color.a); - native.setTextOutline(); - native.setTextDropShadow(); - if (alignment !== null) { - native.setTextWrap(padding, 1 - padding); - native.setTextJustification(alignment); - } - - native.endTextCommandDisplayText(pos.x, pos.y, 0); -} - -let adminMessageEveryTick = null; - -export function mhint(head, msg, time = 5) { - let scaleform = native.requestScaleformMovie("MIDSIZED_MESSAGE"); - alt.setTimeout(() => { - if (adminMessageEveryTick != null) { - alt.clearEveryTick(adminMessageEveryTick); - adminMessageEveryTick = null; - } - - native.playSoundFrontend(-1, 'SIGN_DESTROYED', 'HUD_AWARDS', 1); - - native.beginScaleformMovieMethod(scaleform, "SHOW_MIDSIZED_MESSAGE"); - native.beginTextCommandScaleformString("STRING"); - native.scaleformMovieMethodAddParamPlayerNameString(head); - native.scaleformMovieMethodAddParamTextureNameString(msg); - native.scaleformMovieMethodAddParamInt(100); - native.scaleformMovieMethodAddParamBool(true); - native.scaleformMovieMethodAddParamInt(100); - native.endScaleformMovieMethod(); - - adminMessageEveryTick = alt.everyTick(() => { - native.drawScaleformMovieFullscreen(scaleform, 255, 255, 255, 255, 0); - }); - - alt.setTimeout(() => { - alt.clearEveryTick(adminMessageEveryTick); - adminMessageEveryTick = null; - }, time * 1000); - }, 1000); -} \ No newline at end of file diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts new file mode 100644 index 0000000..c624e9a --- /dev/null +++ b/freeroam-extended/client/src/helpers.ts @@ -0,0 +1,300 @@ +/* eslint-disable @typescript-eslint/explicit-member-accessibility */ +import * as native from "natives" +import * as alt from "alt-client" + +export const LOCAL_PLAYER = alt.Player.local +export const EMPTY_WEAPON_HASH = 0xA2719263 + +export const playerData = { + areWeaponsDisabled: true, + areNametagsVisible: true, + lastCommandTimestamp: Date.now() - 10000, + lastMessageTimestamp: Date.now() - 10000, + chatState: false, + commandTimestamp: 0, +} + +export function displayAdvancedNotification( + message: string, + title = "Title", + subtitle = "subtitle", + notifImage: string | null = null, + iconType = 0, + backgroundColor: number | null = null, + durationMult = 1, +): number { + native.beginTextCommandThefeedPost("STRING") + native.addTextComponentSubstringPlayerName(message) + if (backgroundColor != null) + native.thefeedSetNextPostBackgroundColor(backgroundColor) + if (notifImage != null) + native.endTextCommandThefeedPostMessagetextTu(notifImage, notifImage, false, iconType, title, subtitle, durationMult) + return native.endTextCommandThefeedPostTicker(false, true) +} + +export function setWeaponsUsage(state: boolean): void { + native.playSoundFrontend(-1, "SIGN_DESTROYED", "HUD_AWARDS", true) + + if (state) { + playerData.areWeaponsDisabled = false + + native.setCanPedEquipAllWeapons(LOCAL_PLAYER, true) + displayAdvancedNotification("Have fun.", "Weapons Usage", "Activated", "CHAR_AMMUNATION", 1, 203, 1.5) + } + else { + native.giveWeaponToPed(LOCAL_PLAYER, EMPTY_WEAPON_HASH, 0, false, true) + playerData.areWeaponsDisabled = true + + native.setCanPedEquipAllWeapons(LOCAL_PLAYER, false) + displayAdvancedNotification( + "You can only use weapons in the LS Airport zone.", + "Weapons Usage", + "Deactivated", + "CHAR_AMMUNATION", + 1, 31, 1.5, + ) + } +} + +export function drawText3d( + text: string, + x: number, + y: number, + z: number, + scale: number, + r: number, g: number, b: number, a: number, + outline: boolean, + offset: number, + lagcomp: boolean, + lagcompEntity: { vehicle: alt.Vehicle | null }, +): void { + // If lagcomp is enabled and the lagcomp entity is in a vehicle. + if (lagcomp === true && lagcompEntity.vehicle !== null) { + const vector = native.getEntityVelocity(lagcompEntity.vehicle) + const frameTime = native.getFrameTime() + + native.setDrawOrigin(x + (vector.x * frameTime), y + (vector.y * frameTime), z + (vector.z * frameTime), 0) + } + else native.setDrawOrigin(x, y, z, 0) + + native.setTextFont(4) + native.setTextProportional(false) + native.setTextScale(scale, scale) + native.setTextColour(r, g, b, a) + native.setTextDropshadow(0, 0, 0, 0, 255) + native.setTextEdge(2, 0, 0, 0, 150) + native.setTextDropShadow() + native.setTextCentre(true) + + if (outline) native.setTextOutline() + + native.beginTextCommandDisplayText("CELL_EMAIL_BCON") + + text.match(/.{1,99}/g)?.forEach(textBlock => { + native.addTextComponentSubstringPlayerName(textBlock) + }) + + native.endTextCommandDisplayText(0.0, offset, 0.0) + native.clearDrawOrigin() +} + +export class DirectionVector { + constructor( + private readonly position: alt.IVector3, + private readonly rotation: alt.IVector3, + ) {} + + eulerToQuaternion(rotation: alt.IVector3): alt.IVector3 & { w: number } { + const roll = rotation.x * (Math.PI / 180.0) + const pitch = rotation.y * (Math.PI / 180.0) + const yaw = rotation.z * (Math.PI / 180.0) + + const qx = Math.sin(roll / 2) * Math.cos(pitch / 2) * Math.cos(yaw / 2) - Math.cos(roll / 2) * Math.sin(pitch / 2) * Math.sin(yaw / 2) + const qy = Math.cos(roll / 2) * Math.sin(pitch / 2) * Math.cos(yaw / 2) + Math.sin(roll / 2) * Math.cos(pitch / 2) * Math.sin(yaw / 2) + const qz = Math.cos(roll / 2) * Math.cos(pitch / 2) * Math.sin(yaw / 2) - Math.sin(roll / 2) * Math.sin(pitch / 2) * Math.cos(yaw / 2) + const qw = Math.cos(roll / 2) * Math.cos(pitch / 2) * Math.cos(yaw / 2) + Math.sin(roll / 2) * Math.sin(pitch / 2) * Math.sin(yaw / 2) + + return { x: qx, y: qy, z: qz, w: qw } + } + + forwardVector(): alt.Vector3 { + const quatRot = this.eulerToQuaternion(this.rotation) + + const fVectorX = 2 * (quatRot.x * quatRot.y - quatRot.w * quatRot.z) + const fVectorY = 1 - 2 * (quatRot.x * quatRot.x + quatRot.z * quatRot.z) + const fVectorZ = 2 * (quatRot.y * quatRot.z + quatRot.w * quatRot.x) + + return new alt.Vector3(fVectorX, fVectorY, fVectorZ) + } + + forward(distance: number): alt.Vector3 { + const forwardVector = this.forwardVector() + + return new alt.Vector3( + this.position.x + forwardVector.x * distance, + this.position.y + forwardVector.y * distance, + this.position.z + forwardVector.z * distance, + ) + } + + rightVector(): alt.Vector3 { + const quatRot = this.eulerToQuaternion(this.rotation) + + const rVectorX = 1 - 2 * (quatRot.y * quatRot.y + quatRot.z * quatRot.z) + const rVectorY = 2 * (quatRot.x * quatRot.y + quatRot.w * quatRot.z) + const rVectorZ = 2 * (quatRot.x * quatRot.z - quatRot.w * quatRot.y) + + return new alt.Vector3(rVectorX, rVectorY, rVectorZ) + } + + right(distance: number): alt.Vector3 { + const rightVector = this.rightVector() + + return new alt.Vector3( + this.position.x + rightVector.x * distance, + this.position.y + rightVector.y * distance, + this.position.z + rightVector.z * distance, + ) + } + + upVector(): alt.Vector3 { + const quatRot = this.eulerToQuaternion(this.rotation) + + const uVectorX = 2 * (quatRot.x * quatRot.z + quatRot.w * quatRot.y) + const uVectorY = 2 * (quatRot.y * quatRot.z - quatRot.w * quatRot.x) + const uVectorZ = 1 - 2 * (quatRot.x * quatRot.x + quatRot.y * quatRot.y) + + return new alt.Vector3(uVectorX, uVectorY, uVectorZ) + } + + up(distance: number): alt.Vector3 { + const upVector = this.upVector() + + return new alt.Vector3( + this.position.x + upVector.x * distance, + this.position.y + upVector.y * distance, + this.position.z + upVector.z * distance, + ) + } +} + +export function drawDMZone( + centerX: number, + centerY: number, + radius: number, + count: number, +): void { + const steps = 2 * Math.PI / count + for (let i = 0; i < count; i++) { + const blipX = radius * Math.cos(steps * i) + centerX + const blipY = radius * Math.sin(steps * i) + centerY + + const blip = new alt.PointBlip(blipX, blipY, 0) + blip.sprite = 310 + blip.shortRange = true + native.setBlipHiddenOnLegend(blip.scriptID, true) + } +} + +export function drawText2D( + text: string, + pos: alt.IVector2, + scale: number, + color: { r: number; g: number; b: number; a: number }, + alignment = 0, + padding = 0, +): void { + if (scale > 2) + scale = 2 + + native.beginTextCommandDisplayText("STRING") + native.addTextComponentSubstringPlayerName(text) + native.setTextFont(4) + native.setTextScale(1, scale) + native.setTextColour(color.r, color.g, color.b, color.a) + native.setTextOutline() + native.setTextDropShadow() + if (alignment !== null) { + native.setTextWrap(padding, 1 - padding) + native.setTextJustification(alignment) + } + + native.endTextCommandDisplayText(pos.x, pos.y, 0) +} + +let adminMessageEveryTick: number | null = null + +export function mhint(head: string, msg: string, time = 5): void { + const scaleform = native.requestScaleformMovie("MIDSIZED_MESSAGE") + alt.setTimeout(() => { + if (adminMessageEveryTick != null) { + alt.clearEveryTick(adminMessageEveryTick) + adminMessageEveryTick = null + } + + native.playSoundFrontend( + -1, + "SIGN_DESTROYED", + "HUD_AWARDS", + true, + ) + + native.beginScaleformMovieMethod(scaleform, "SHOW_MIDSIZED_MESSAGE") + native.beginTextCommandScaleformString("STRING") + native.scaleformMovieMethodAddParamPlayerNameString(head) + native.scaleformMovieMethodAddParamTextureNameString(msg) + native.scaleformMovieMethodAddParamInt(100) + native.scaleformMovieMethodAddParamBool(true) + native.scaleformMovieMethodAddParamInt(100) + native.endScaleformMovieMethod() + + adminMessageEveryTick = alt.everyTick(() => { + native.drawScaleformMovieFullscreen(scaleform, 255, 255, 255, 255, 0) + }) + + alt.setTimeout(() => { + if (adminMessageEveryTick == null) return + + alt.clearEveryTick(adminMessageEveryTick) + adminMessageEveryTick = null + }, time * 1000) + }, 1000) +} + +export async function tpToWaypoint(): Promise { + const point = getWaypoint() + if (!point) return + const [x, y, z] = point + + native.setFocusPosAndVel(x, y, z, 0, 0, 0) + + let foundZ: number | null = null + try { + await alt.Utils.waitFor(() => { + const [found, z] = native.getGroundZFor3dCoord(x, y, 9999999, 0, false, false) + if (!found) return false + + foundZ = z + return found + }, 3000) + } + catch {} + + if (foundZ == null) + alt.logError("failed to get ground z for waypoint") + + alt.emitServer("tp_to_waypoint", { x, y, z: foundZ ?? 9999 }) + + native.clearFocus() +} + +function getWaypoint(sprite = 8): [number, number, number, number] | null { + const waypoint = native.getFirstBlipInfoId(sprite) + + if (native.doesBlipExist(waypoint)) { + const coords = native.getBlipInfoIdCoord(waypoint) + return [coords.x, coords.y, coords.z, waypoint] + } + + return null +} diff --git a/freeroam-extended/client/src/index.js b/freeroam-extended/client/src/index.js deleted file mode 100644 index 62bee90..0000000 --- a/freeroam-extended/client/src/index.js +++ /dev/null @@ -1,85 +0,0 @@ -import { LOCAL_PLAYER, playerData, distance, drawText3d, drawText2D, mhint } from './helpers'; - -import * as native from 'natives'; -import * as alt from 'alt-client'; - -import './events'; -import './chat'; -import './noclip'; - -alt.setConfigFlag('DISABLE_AUTO_WEAPON_SWAP', true); -alt.setConfigFlag('DISABLE_IDLE_CAMERA', true); -alt.setStat('STAMINA', 100); - -let playersCount = alt.Player.all.length; - -setInterval(() => { - playersCount = alt.Player.all.length; -}, 5000); - -alt.everyTick(() => { - // workaround for flickering GTA BUG - native.drawRect(0, 0, 0, 0, 0, 0, 0, 0, 0); - - drawText2D('alt:V Public Stress Test - 5.12.2021', { x: 0.5, y: 0.0125 }, 0.35, { r: 255, g: 255, b: 255, a: 125 }, 0); - - // native.drawSphere(-1216.839599609375, -2832.514404296875, 13.9296875, 800, 0, 0, 255, 100); - if (playerData.areNametagsVisible) { - processNametags(); - - drawText2D(`${playersCount} players online`, { x: 0.925, y: 0.035}, 0.35, { r: 158, g: 209, b: 157, a: 255 }, 1); - drawText2D('F2: toggle HUD', { x: 0.8, y: 0.025 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - drawText2D('T / Enter: open chat', { x: 0.8, y: 0.05 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - drawText2D('/tp <1 to 26>', { x: 0.8, y: 0.075 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - drawText2D('/revive (revive your ped)', { x: 0.8, y: 0.1 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - // drawText2D('/model (change ped model)', { x: 0.8, y: 0.1 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - drawText2D('/veh (spawn vehicle)', { x: 0.8, y: 0.125 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - drawText2D('/clearvehicles (clear your vehicles)', { x: 0.8, y: 0.15 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - drawText2D('/tune (tune vehicle)', { x: 0.8, y: 0.175 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - drawText2D('/weapons (give yourself weapons)', { x: 0.8, y: 0.2 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - drawText2D('/addcomponent (add weapon component)', { x: 0.8, y: 0.225 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - drawText2D('/removecomponent (remove weapon component)', { x: 0.8, y: 0.25 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - drawText2D('/dm (toggles respawning in death match zone)', { x: 0.8, y: 0.275 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - } - - if (playerData.areWeaponsDisabled) { - native.setCanPedEquipAllWeapons(LOCAL_PLAYER, false); - native.disablePlayerFiring(LOCAL_PLAYER, true); - } - else { - native.setCanPedEquipAllWeapons(LOCAL_PLAYER, true); - } -}); - -function processNametags() { - renderNametags(LOCAL_PLAYER); - - const streamedIn = alt.Player.streamedIn; - for (let i = 0, len = streamedIn.length; i < len; i++) { - let player = streamedIn[i]; - if (player.valid && distance(LOCAL_PLAYER.pos, player.pos) <= 25) { - renderNametags(player); - } - } -} - -function renderNametags(player) { - native.requestPedVisibilityTracking(player); - if (!native.isTrackedPedVisible(player) && alt.Player.local.vehicle === null) return; - - const distance = alt.Player.local.pos.distanceTo(player.pos); - const pos = native.getPedBoneCoords(player.scriptID, 31086, 0.0, 0.0, 0.0); - const scale = 0.35 - distance * 0.01; - - let nametagText = `~n~~w~${player.name} #${player.id} | ~g~${player.health - 100} / 100`; - - if (player === LOCAL_PLAYER && playerData.areWeaponsDisabled) { - nametagText = "~o~Weapons Disabled" + nametagText; - } - - drawText3d( - nametagText, - pos.x, pos.y, (pos.z + -(scale)) + 1.0, - scale, 255, 255, 255, 255, true, 0.038 * (-scale), true, player - ); -} \ No newline at end of file diff --git a/freeroam-extended/client/src/index.ts b/freeroam-extended/client/src/index.ts new file mode 100644 index 0000000..34feb2d --- /dev/null +++ b/freeroam-extended/client/src/index.ts @@ -0,0 +1,79 @@ +import { LOCAL_PLAYER, playerData, drawText3d, drawText2D } from "./helpers" + +import * as native from "natives" +import * as alt from "alt-client" + +import "./events" +import "./chat" +import "./noclip" + +alt.setConfigFlag("DISABLE_AUTO_WEAPON_SWAP", true) +alt.setConfigFlag("DISABLE_IDLE_CAMERA", true) +alt.setStat("stamina", 100) + +let playersCount = alt.Player.all.length + +setInterval(() => { + playersCount = alt.Player.all.length +}, 5000) + +alt.everyTick(() => { + drawText2D("alt:V Public Stress Test - 5.12.2021", { x: 0.5, y: 0.0125 }, 0.35, { r: 255, g: 255, b: 255, a: 125 }, 0) + + // native.drawSphere(-1216.839599609375, -2832.514404296875, 13.9296875, 800, 0, 0, 255, 100); + if (playerData.areNametagsVisible) { + processNametags() + + drawText2D(`${playersCount} players online`, { x: 0.925, y: 0.035 }, 0.35, { r: 158, g: 209, b: 157, a: 255 }, 1) + // drawText2D("F2: toggle HUD", { x: 0.8, y: 0.025 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) + // drawText2D("T / Enter: open chat", { x: 0.8, y: 0.05 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) + // drawText2D("/tp <1 to 26>", { x: 0.8, y: 0.075 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) + // drawText2D("/revive (revive your ped)", { x: 0.8, y: 0.1 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) + // // drawText2D('/model (change ped model)', { x: 0.8, y: 0.1 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); + // drawText2D("/veh (spawn vehicle)", { x: 0.8, y: 0.125 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) + // drawText2D("/clearvehicles (clear your vehicles)", { x: 0.8, y: 0.15 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) + // drawText2D("/tune (tune vehicle)", { x: 0.8, y: 0.175 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) + // drawText2D("/weapons (give yourself weapons)", { x: 0.8, y: 0.2 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) + // drawText2D("/addcomponent (add weapon component)", { x: 0.8, y: 0.225 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) + // drawText2D("/removecomponent (remove weapon component)", { x: 0.8, y: 0.25 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) + // drawText2D("/dm (toggles respawning in death match zone)", { x: 0.8, y: 0.275 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) + } + + if (playerData.areWeaponsDisabled) { + native.setCanPedEquipAllWeapons(LOCAL_PLAYER, false) + native.disablePlayerFiring(LOCAL_PLAYER, true) + } + else + native.setCanPedEquipAllWeapons(LOCAL_PLAYER, true) +}) + +function processNametags() { + renderNametags(LOCAL_PLAYER) + + const streamedIn = alt.Player.streamedIn + for (let i = 0, len = streamedIn.length; i < len; i++) { + const player = streamedIn[i] + if (player?.valid && LOCAL_PLAYER.pos.distanceTo(player.pos) <= 25) + renderNametags(player) + } +} + +function renderNametags(player: alt.Player) { + native.requestPedVisibilityTracking(player) + if (!native.isTrackedPedVisible(player) && alt.Player.local.vehicle === null) return + + const distance = alt.Player.local.pos.distanceTo(player.pos) + const pos = native.getPedBoneCoords(player.scriptID, 31086, 0.0, 0.0, 0.0) + const scale = 0.35 - distance * 0.01 + + let nametagText = `~n~~w~${player.name} #${player.id} | ~g~${player.health - 100} / 100` + + if (player === LOCAL_PLAYER && playerData.areWeaponsDisabled) + nametagText = "~o~Weapons Disabled" + nametagText + + drawText3d( + nametagText, + pos.x, pos.y, (pos.z + -(scale)) + 1.0, + scale, 255, 255, 255, 255, true, 0.038 * (-scale), true, player, + ) +} diff --git a/freeroam-extended/client/src/keycodes.ts b/freeroam-extended/client/src/keycodes.ts new file mode 100644 index 0000000..ee18ff6 --- /dev/null +++ b/freeroam-extended/client/src/keycodes.ts @@ -0,0 +1,109 @@ +export enum KeyCode { + "Key0" = 48, + "Key1" = 49, + "Key2" = 50, + "Key3" = 51, + "Key4" = 52, + "Key5" = 53, + "Key6" = 54, + "Key7" = 55, + "Key8" = 56, + "Key9" = 57, + "Backspace" = 8, + "Tab" = 9, + "Clear" = 12, + "Enter" = 13, + "Return" = 13, + "Escape" = 27, + "Space" = 32, + "Left" = 37, + "Up" = 38, + "Right" = 39, + "Down" = 40, + "Delete" = 46, + "Insert" = 45, + "Home" = 36, + "End" = 35, + "Pageup" = 33, + "Pagedown" = 34, + "Papslock" = 20, + "Shift" = 16, + "Alt" = 18, + "Ctrl" = 17, + "-" = 189, + "=" = 187, + "," = 188, + ";" = 186, + "." = 190, + "/" = 191, + "`" = 192, + "~" = 192, + "'" = 222, + "[" = 219, + "]" = 221, + "\\" = 220, + "KpMultiply" = 106, + "KpAdd" = 107, + "KpSubtract" = 109, + "KpDecimal" = 110, + "KpDivide" = 111, + "A" = 65, + "B" = 66, + "C" = 67, + "D" = 68, + "E" = 69, + "F" = 70, + "G" = 71, + "H" = 72, + "I" = 73, + "J" = 74, + "K" = 75, + "L" = 76, + "M" = 77, + "N" = 78, + "O" = 79, + "P" = 80, + "Q" = 81, + "R" = 82, + "S" = 83, + "T" = 84, + "U" = 85, + "V" = 86, + "W" = 87, + "X" = 88, + "Y" = 89, + "Z" = 90, + "F1" = 112, + "F2" = 113, + "F3" = 114, + "F4" = 115, + "F5" = 116, + "F6" = 117, + "F7" = 118, + "F8" = 119, + "F9" = 120, + "F10" = 121, + "F11" = 122, + "F12" = 123, + "F13" = 124, + "F14" = 125, + "F15" = 126, + "F16" = 127, + "F17" = 128, + "F18" = 129, + "F19" = 130, + "F20" = 131, + "Numpad0" = 96, + "Numpad1" = 97, + "Numpad2" = 98, + "Numpad3" = 99, + "Numpad4" = 100, + "Numpad5" = 101, + "Numpad6" = 102, + "Numpad7" = 103, + "Numpad8" = 104, + "Numpad9" = 105, + "MouseLeft" = 1, + "MouseRight" = 2, + "MouseMiddle" = 4, +} diff --git a/freeroam-extended/client/src/noclip.js b/freeroam-extended/client/src/noclip.js deleted file mode 100644 index 75203d4..0000000 --- a/freeroam-extended/client/src/noclip.js +++ /dev/null @@ -1,177 +0,0 @@ -import * as native from 'natives'; -import * as alt from 'alt-client'; - -import { DirectionVector } from "./helpers"; - -let tick = null; -let noclipCam = null; - -export function toggleNoclip(state) { - switch (state) { - case false: { - alt.clearEveryTick(tick); - - noclipCam = null; - native.renderScriptCams(false, true, 500, true, false, 0); - - const position = native.getEntityCoords(alt.Player.local.scriptID, true); - let [unk, ground] = native.getGroundZFor3dCoord(position.x, position.y, position.z, 0.0, false, false); - native.setEntityCoordsNoOffset(alt.Player.local.scriptID, position.x, position.y, ground, false, false, false); - - break; - } - - case true: { - tick = alt.everyTick(handleTick); - - const gameplayCamPos = native.getGameplayCamCoord(); - const gameplayCamRot = native.getGameplayCamRot(2); - - noclipCam = native.createCamWithParams( - "DEFAULT_SCRIPTED_CAMERA", - gameplayCamPos.x, gameplayCamPos.y, gameplayCamPos.z, - 0.0, 0.0, gameplayCamRot.z, native.getGameplayCamFov(), false, 2, - ); - - native.setCamActiveWithInterp(noclipCam, native.getRenderingCam(), 500, 0, 0); - native.renderScriptCams(true, true, 500, true, false, 0); - - break; - } - } -}; - -function handleTick() { - native.disableControlAction(0, 1, true); - native.disableControlAction(0, 2, true); - native.disableControlAction(0, 24, true); - native.disableControlAction(0, 25, true); - native.disableControlAction(0, 30, true); - native.disableControlAction(0, 31, true); - native.disableControlAction(0, 49, true); - - const pos = native.getCamCoord(noclipCam); - const rot = native.getCamRot(noclipCam, 2); - - const dir = new DirectionVector(pos, rot); - const fwd = dir.Forward(3.5); - const sens = getSensitivity(); - - native.setEntityCoords(alt.Player.local, fwd.x, fwd.y, fwd.z - 2.0, true, false, false, true); - - if (alt.gameControlsEnabled() === false) - return; - - // 'W' and 'D' - if (native.isDisabledControlPressed(0, 32) && native.isDisabledControlPressed(0, 30)) { - const forward = dir.Forward(sens); - const right = dir.Right(sens); - - const finishedPos = { - x: (forward.x + right.x) / 2, - y: (forward.y + right.y) / 2, - z: (forward.z + right.z) / 2 - }; - - native.setCamCoord(noclipCam, finishedPos.x, finishedPos.y, finishedPos.z); - } - - // 'W' and 'A' - else if (native.isDisabledControlPressed(0, 32) && native.isDisabledControlPressed(0, 34)) { - const forward = dir.Forward(sens); - const left = dir.Right(-sens); - - const finishedPos = { - x: (forward.x + left.x) / 2, - y: (forward.y + left.y) / 2, - z: (forward.z + left.z) / 2 - }; - - native.setCamCoord(noclipCam, finishedPos.x, finishedPos.y, finishedPos.z); - } - - // 'S' and 'D' - else if (native.isDisabledControlPressed(0, 33) && native.isDisabledControlPressed(0, 30)) { - const back = dir.Forward(-sens); - const right = dir.Right(sens); - - const finishedPos = { - x: (back.x + right.x) / 2, - y: (back.y + right.y) / 2, - z: (back.z + right.z) / 2 - }; - - native.setCamCoord(noclipCam, finishedPos.x, finishedPos.y, finishedPos.z); - } - - // 'S' and 'A' - else if (native.isDisabledControlPressed(0, 33) && native.isDisabledControlPressed(0, 34)) { - const back = dir.Forward(-sens); - const left = dir.Right(-sens); - - const finishedPos = { - x: (back.x + left.x) / 2, - y: (back.y + left.y) / 2, - z: (back.z + left.z) / 2 - }; - - native.setCamCoord(noclipCam, finishedPos.x, finishedPos.y, finishedPos.z); - } - - else { - let direction = null; - - if (native.isDisabledControlPressed(0, 32)) direction = dir.Forward(sens); - if (native.isDisabledControlPressed(0, 33)) direction = dir.Forward(-sens); - if (native.isDisabledControlPressed(0, 34)) direction = dir.Right(-sens); - if (native.isDisabledControlPressed(0, 30)) direction = dir.Right(sens); - - if (direction !== null) { - native.setCamCoord(noclipCam, direction.x, direction.y, direction.z); - } - } - - processCameraRotation(); -}; - -// Noclip functions -function processCameraRotation() { - const camRot = native.getCamRot(noclipCam, 2); - - const mouseX = native.getDisabledControlNormal(1, 1); - const mouseY = native.getDisabledControlNormal(1, 2); - - const mouseSens = native.getProfileSetting(13); - - let finalRot = { - x: camRot.x - mouseY * mouseSens, - y: camRot.y, - z: camRot.z - mouseX * mouseSens - }; - - if (finalRot.x >= 89) finalRot.x = 89; - if (finalRot.x <= -89) finalRot.x = -89; - - native.setCamRot(noclipCam, finalRot.x, finalRot.y, finalRot.z, 2); -}; - -function getSensitivity() { - let sens = 0.15; - - // Left Shift - if (native.isDisabledControlPressed(0, 21)) { - // 'E' Key - if (native.isDisabledControlPressed(0, 38)) { - sens *= 5; - } - - return sens *= 5; - } - - // Left Ctrl - if (native.isDisabledControlPressed(0, 36)) { - return sens = 0.035; - } - - return sens; -}; \ No newline at end of file diff --git a/freeroam-extended/client/src/noclip.ts b/freeroam-extended/client/src/noclip.ts new file mode 100644 index 0000000..d20ce21 --- /dev/null +++ b/freeroam-extended/client/src/noclip.ts @@ -0,0 +1,175 @@ +import * as native from "natives" +import * as alt from "alt-client" +import { DirectionVector } from "./helpers" + +let tick: number | null = null +let noclipCam: number | null = null + +export function toggleNoclip(state: boolean): void { + switch (state) { + case false: { + if (tick == null) return + + alt.clearEveryTick(tick) + + noclipCam = null + native.renderScriptCams(false, true, 500, true, false, 0) + + const position = native.getEntityCoords(alt.Player.local.scriptID, true) + const [, ground] = native.getGroundZFor3dCoord(position.x, position.y, position.z, 0.0, false, false) + native.setEntityCoordsNoOffset(alt.Player.local.scriptID, position.x, position.y, ground, false, false, false) + + break + } + + case true: { + const gameplayCamPos = native.getGameplayCamCoord() + const gameplayCamRot = native.getGameplayCamRot(2) + + noclipCam = native.createCamWithParams( + "DEFAULT_SCRIPTED_CAMERA", + gameplayCamPos.x, gameplayCamPos.y, gameplayCamPos.z, + 0.0, 0.0, gameplayCamRot.z, native.getGameplayCamFov(), false, 2, + ) + + tick = alt.everyTick(handleTick.bind(null, noclipCam)) + + native.setCamActiveWithInterp(noclipCam, native.getRenderingCam(), 500, 0, 0) + native.renderScriptCams(true, true, 500, true, false, 0) + + break + } + } +} + +function handleTick(noclipCam: number) { + native.disableControlAction(0, 1, true) + native.disableControlAction(0, 2, true) + native.disableControlAction(0, 24, true) + native.disableControlAction(0, 25, true) + native.disableControlAction(0, 30, true) + native.disableControlAction(0, 31, true) + native.disableControlAction(0, 49, true) + + const pos = native.getCamCoord(noclipCam) + const rot = native.getCamRot(noclipCam, 2) + + const dir = new DirectionVector(pos, rot) + const fwd = dir.forward(3.5) + const sens = getSensitivity() + + native.setEntityCoords(alt.Player.local, fwd.x, fwd.y, fwd.z - 2.0, true, false, false, true) + + if (alt.gameControlsEnabled() === false) + return + + // 'W' and 'D' + if (native.isDisabledControlPressed(0, 32) && native.isDisabledControlPressed(0, 30)) { + const forward = dir.forward(sens) + const right = dir.right(sens) + + const finishedPos = { + x: (forward.x + right.x) / 2, + y: (forward.y + right.y) / 2, + z: (forward.z + right.z) / 2, + } + + native.setCamCoord(noclipCam, finishedPos.x, finishedPos.y, finishedPos.z) + } + + // 'W' and 'A' + else if (native.isDisabledControlPressed(0, 32) && native.isDisabledControlPressed(0, 34)) { + const forward = dir.forward(sens) + const left = dir.right(-sens) + + const finishedPos = { + x: (forward.x + left.x) / 2, + y: (forward.y + left.y) / 2, + z: (forward.z + left.z) / 2, + } + + native.setCamCoord(noclipCam, finishedPos.x, finishedPos.y, finishedPos.z) + } + + // 'S' and 'D' + else if (native.isDisabledControlPressed(0, 33) && native.isDisabledControlPressed(0, 30)) { + const back = dir.forward(-sens) + const right = dir.right(sens) + + const finishedPos = { + x: (back.x + right.x) / 2, + y: (back.y + right.y) / 2, + z: (back.z + right.z) / 2, + } + + native.setCamCoord(noclipCam, finishedPos.x, finishedPos.y, finishedPos.z) + } + + // 'S' and 'A' + else if (native.isDisabledControlPressed(0, 33) && native.isDisabledControlPressed(0, 34)) { + const back = dir.forward(-sens) + const left = dir.right(-sens) + + const finishedPos = { + x: (back.x + left.x) / 2, + y: (back.y + left.y) / 2, + z: (back.z + left.z) / 2, + } + + native.setCamCoord(noclipCam, finishedPos.x, finishedPos.y, finishedPos.z) + } + + else { + let direction = null + + if (native.isDisabledControlPressed(0, 32)) direction = dir.forward(sens) + if (native.isDisabledControlPressed(0, 33)) direction = dir.forward(-sens) + if (native.isDisabledControlPressed(0, 34)) direction = dir.right(-sens) + if (native.isDisabledControlPressed(0, 30)) direction = dir.right(sens) + + if (direction !== null) + native.setCamCoord(noclipCam, direction.x, direction.y, direction.z) + } + + processCameraRotation(noclipCam) +} + +// Noclip functions +function processCameraRotation(noclipCam: number) { + const camRot = native.getCamRot(noclipCam, 2) + + const mouseX = native.getDisabledControlNormal(1, 1) + const mouseY = native.getDisabledControlNormal(1, 2) + + const mouseSens = native.getProfileSetting(13) + + const finalRot = { + x: camRot.x - mouseY * mouseSens, + y: camRot.y, + z: camRot.z - mouseX * mouseSens, + } + + if (finalRot.x >= 89) finalRot.x = 89 + if (finalRot.x <= -89) finalRot.x = -89 + + native.setCamRot(noclipCam, finalRot.x, finalRot.y, finalRot.z, 2) +} + +function getSensitivity() { + let sens = 0.15 + + // Left Shift + if (native.isDisabledControlPressed(0, 21)) { + // 'E' Key + if (native.isDisabledControlPressed(0, 38)) + sens *= 5 + + return sens * 5 + } + + // Left Ctrl + if (native.isDisabledControlPressed(0, 36)) + return 0.035 + + return sens +} diff --git a/freeroam-extended/client/tsconfig.eslint.json b/freeroam-extended/client/tsconfig.eslint.json new file mode 100644 index 0000000..1e80070 --- /dev/null +++ b/freeroam-extended/client/tsconfig.eslint.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "./src/**/*", + ], +} \ No newline at end of file diff --git a/freeroam-extended/client/tsconfig.json b/freeroam-extended/client/tsconfig.json new file mode 100644 index 0000000..0b600a8 --- /dev/null +++ b/freeroam-extended/client/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "module": "ESNext", + "target": "ESNext", + "strict": true, + "exactOptionalPropertyTypes": true, + "noUncheckedIndexedAccess": true, + "noPropertyAccessFromIndexSignature": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "isolatedModules": true, + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true, + "typeRoots": [ + "./node_modules/@altv", + "./node_modules/@types", + "./@types", + ], + "paths": { + "@/*": ["./src/*"] + } + }, +} diff --git a/freeroam-extended/client/yarn.lock b/freeroam-extended/client/yarn.lock new file mode 100644 index 0000000..2383286 --- /dev/null +++ b/freeroam-extended/client/yarn.lock @@ -0,0 +1,1667 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@altv/types-client@^2.2.9": + version "2.2.9" + resolved "https://registry.yarnpkg.com/@altv/types-client/-/types-client-2.2.9.tgz#4b8d9b8bf03cd77ffb4c30946a27557cbc966a52" + integrity sha512-JghzVapoIqwT/ozAt1snx5E54RRHt4vGHrpVBi746O4n86pRF0SiAPUzqB447Pa5KbIa+9cnUy/dpSRMtKvivw== + +"@altv/types-natives@^1.4.4": + version "1.4.4" + resolved "https://registry.yarnpkg.com/@altv/types-natives/-/types-natives-1.4.4.tgz#d71aaf45eb5b1060dd6993ef010bdc1734294a73" + integrity sha512-qcIPhpRAhGnErtf3p1iVGL6CIUJWc1IdYJl6K9T5c7W8Nd9RM2cv4JIyQg3TTXLiu+1gAZlkD8KyYKIfs5BqnQ== + +"@altv/types-server@^2.4.2": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@altv/types-server/-/types-server-2.4.2.tgz#5c6c852b728e9e7c7007d61d62661537c0e5c207" + integrity sha512-TwJRKr23Thyi7LRPTKumI/9/FcY6CitTRMfqypRGvxznuvaIRPrT+jHK+mvQg3ErmR43cOKdh7MzqmaXWj8BKQ== + +"@altv/types-shared@^1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@altv/types-shared/-/types-shared-1.2.6.tgz#c12936691ae6e76cdc794ca0fe3fc62e8f4853ab" + integrity sha512-DC5WofhTkvC/0uYxTIihxQG7k13SdepHrSm9Xzd5HTTpVJxll4PRXRIZH3L3wRBnWNXTuKQhJ4Cy/qKZN3or9g== + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/highlight@^7.10.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@esbuild/linux-loong64@0.14.53": + version "0.14.53" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.53.tgz#251b4cd6760fadb4d68a05815e6dc5e432d69cd6" + integrity sha512-W2dAL6Bnyn4xa/QRSU3ilIK4EzD5wgYXKXJiS1HDF5vU3675qc2bvFyLwbUcdmssDveyndy7FbitrCoiV/eMLg== + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@types/json-schema@^7.0.7": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@typescript-eslint/eslint-plugin@^4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" + integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== + 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" + +"@typescript-eslint/experimental-utils@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" + integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== + 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" + +"@typescript-eslint/parser@^4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" + integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== + 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" + +"@typescript-eslint/scope-manager@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" + integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + +"@typescript-eslint/types@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" + integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== + +"@typescript-eslint/typescript-estree@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" + integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== + 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" + +"@typescript-eslint/visitor-keys@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" + integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== + dependencies: + "@typescript-eslint/types" "4.33.0" + eslint-visitor-keys "^2.0.0" + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +altv-esbuild@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/altv-esbuild/-/altv-esbuild-0.0.7.tgz#ac361dcdf405222fcf1cab169e95fb19e2a0ef30" + integrity sha512-UsOqmOQrIWDmc892qRlQEufp/Y/HVnpVBVANytQjwQAKVJS81KoRyiEhNvV4l3cMuRIhT1QB6hISpLbTA95cmg== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-includes@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.2.5: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: + version "1.20.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +esbuild-android-64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.53.tgz#259bc3ef1399a3cad8f4f67c40ee20779c4de675" + integrity sha512-fIL93sOTnEU+NrTAVMIKiAw0YH22HWCAgg4N4Z6zov2t0kY9RAJ50zY9ZMCQ+RT6bnOfDt8gCTnt/RaSNA2yRA== + +esbuild-android-arm64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.53.tgz#2158253d4e8f9fdd2a081bbb4f73b8806178841e" + integrity sha512-PC7KaF1v0h/nWpvlU1UMN7dzB54cBH8qSsm7S9mkwFA1BXpaEOufCg8hdoEI1jep0KeO/rjZVWrsH8+q28T77A== + +esbuild-darwin-64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.53.tgz#b4681831fd8f8d06feb5048acbe90d742074cc2a" + integrity sha512-gE7P5wlnkX4d4PKvLBUgmhZXvL7lzGRLri17/+CmmCzfncIgq8lOBvxGMiQ4xazplhxq+72TEohyFMZLFxuWvg== + +esbuild-darwin-arm64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.53.tgz#d267d957852d121b261b3f76ead86e5b5463acc9" + integrity sha512-otJwDU3hnI15Q98PX4MJbknSZ/WSR1I45il7gcxcECXzfN4Mrpft5hBDHXNRnCh+5858uPXBXA1Vaz2jVWLaIA== + +esbuild-freebsd-64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.53.tgz#aca2af6d72b537fe66a38eb8f374fb66d4c98ca0" + integrity sha512-WkdJa8iyrGHyKiPF4lk0MiOF87Q2SkE+i+8D4Cazq3/iqmGPJ6u49je300MFi5I2eUsQCkaOWhpCVQMTKGww2w== + +esbuild-freebsd-arm64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.53.tgz#76282e19312d914c34343c8a7da6cc5f051580b9" + integrity sha512-9T7WwCuV30NAx0SyQpw8edbKvbKELnnm1FHg7gbSYaatH+c8WJW10g/OdM7JYnv7qkimw2ZTtSA+NokOLd2ydQ== + +esbuild-linux-32@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.53.tgz#1045d34cf7c5faaf2af3b29cc1573b06580c37e5" + integrity sha512-VGanLBg5en2LfGDgLEUxQko2lqsOS7MTEWUi8x91YmsHNyzJVT/WApbFFx3MQGhkf+XdimVhpyo5/G0PBY91zg== + +esbuild-linux-64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.53.tgz#ab3f2ee2ebb5a6930c72d9539cb34b428808cbe4" + integrity sha512-pP/FA55j/fzAV7N9DF31meAyjOH6Bjuo3aSKPh26+RW85ZEtbJv9nhoxmGTd9FOqjx59Tc1ZbrJabuiXlMwuZQ== + +esbuild-linux-arm64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.53.tgz#1f5530412f6690949e78297122350488d3266cfe" + integrity sha512-GDmWITT+PMsjCA6/lByYk7NyFssW4Q6in32iPkpjZ/ytSyH+xeEx8q7HG3AhWH6heemEYEWpTll/eui3jwlSnw== + +esbuild-linux-arm@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.53.tgz#a44ec9b5b42007ab6c0d65a224ccc6bbd97c54cf" + integrity sha512-/u81NGAVZMopbmzd21Nu/wvnKQK3pT4CrvQ8BTje1STXcQAGnfyKgQlj3m0j2BzYbvQxSy+TMck4TNV2onvoPA== + +esbuild-linux-mips64le@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.53.tgz#a4d0b6b17cfdeea4e41b0b085a5f73d99311be9f" + integrity sha512-d6/XHIQW714gSSp6tOOX2UscedVobELvQlPMkInhx1NPz4ThZI9uNLQ4qQJHGBGKGfu+rtJsxM4NVHLhnNRdWQ== + +esbuild-linux-ppc64le@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.53.tgz#8c331822c85465434e086e3e6065863770c38139" + integrity sha512-ndnJmniKPCB52m+r6BtHHLAOXw+xBCWIxNnedbIpuREOcbSU/AlyM/2dA3BmUQhsHdb4w3amD5U2s91TJ3MzzA== + +esbuild-linux-riscv64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.53.tgz#36fd75543401304bea8a2d63bf8ea18aaa508e00" + integrity sha512-yG2sVH+QSix6ct4lIzJj329iJF3MhloLE6/vKMQAAd26UVPVkhMFqFopY+9kCgYsdeWvXdPgmyOuKa48Y7+/EQ== + +esbuild-linux-s390x@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.53.tgz#1622677ab6824123f48f75d3afc031cd41936129" + integrity sha512-OCJlgdkB+XPYndHmw6uZT7jcYgzmx9K+28PVdOa/eLjdoYkeAFvH5hTwX4AXGLZLH09tpl4bVsEtvuyUldaNCg== + +esbuild-netbsd-64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.53.tgz#e86d0efd0116658be335492ed12e66b26b4baf52" + integrity sha512-gp2SB+Efc7MhMdWV2+pmIs/Ja/Mi5rjw+wlDmmbIn68VGXBleNgiEZG+eV2SRS0kJEUyHNedDtwRIMzaohWedQ== + +esbuild-openbsd-64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.53.tgz#9bcbbe6f86304872c6e91f64c8eb73fc29c3588b" + integrity sha512-eKQ30ZWe+WTZmteDYg8S+YjHV5s4iTxeSGhJKJajFfQx9TLZJvsJX0/paqwP51GicOUruFpSUAs2NCc0a4ivQQ== + +esbuild-sunos-64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.53.tgz#f7a872f7460bfb7b131f7188a95fbce3d1c577e8" + integrity sha512-OWLpS7a2FrIRukQqcgQqR1XKn0jSJoOdT+RlhAxUoEQM/IpytS3FXzCJM6xjUYtpO5GMY0EdZJp+ur2pYdm39g== + +esbuild-windows-32@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.53.tgz#c5e3ca50e2d1439cc2c9fe4defa63bcd474ce709" + integrity sha512-m14XyWQP5rwGW0tbEfp95U6A0wY0DYPInWBB7D69FAXUpBpBObRoGTKRv36lf2RWOdE4YO3TNvj37zhXjVL5xg== + +esbuild-windows-64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.53.tgz#ec2ab4a60c5215f092ffe1eab6d01319e88238af" + integrity sha512-s9skQFF0I7zqnQ2K8S1xdLSfZFsPLuOGmSx57h2btSEswv0N0YodYvqLcJMrNMXh6EynOmWD7rz+0rWWbFpIHQ== + +esbuild-windows-arm64@0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.53.tgz#f71d403806bdf9f4a1f9d097db9aec949bd675c8" + integrity sha512-E+5Gvb+ZWts+00T9II6wp2L3KG2r3iGxByqd/a1RmLmYWVsSVUjkvIxZuJ3hYTIbhLkH5PRwpldGTKYqVz0nzQ== + +esbuild@^0.14.53: + version "0.14.53" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.53.tgz#20b1007f686e8584f2a01a1bec5a37aac9498ce4" + integrity sha512-ohO33pUBQ64q6mmheX1mZ8mIXj8ivQY/L4oVuAshr+aJI+zLl+amrp3EodrUNDNYVrKJXGPfIHFGhO8slGRjuw== + optionalDependencies: + "@esbuild/linux-loong64" "0.14.53" + esbuild-android-64 "0.14.53" + esbuild-android-arm64 "0.14.53" + esbuild-darwin-64 "0.14.53" + esbuild-darwin-arm64 "0.14.53" + esbuild-freebsd-64 "0.14.53" + esbuild-freebsd-arm64 "0.14.53" + esbuild-linux-32 "0.14.53" + esbuild-linux-64 "0.14.53" + esbuild-linux-arm "0.14.53" + esbuild-linux-arm64 "0.14.53" + esbuild-linux-mips64le "0.14.53" + esbuild-linux-ppc64le "0.14.53" + esbuild-linux-riscv64 "0.14.53" + esbuild-linux-s390x "0.14.53" + esbuild-netbsd-64 "0.14.53" + esbuild-openbsd-64 "0.14.53" + esbuild-sunos-64 "0.14.53" + esbuild-windows-32 "0.14.53" + esbuild-windows-64 "0.14.53" + esbuild-windows-arm64 "0.14.53" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-standard@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516" + integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg== + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-module-utils@^2.7.3: + version "2.7.3" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== + dependencies: + debug "^3.2.7" + find-up "^2.1.0" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.24.2: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz#a596acc32981627eb36d9d75f9666ac1a4564971" + integrity sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^7.30.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" + integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.6.0, globals@^13.9.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.3: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +object-inspect@^1.12.0, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" + integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.1, resolve@^1.20.0, resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +semver@^6.1.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.5: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +table@^6.0.9: + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typescript@^4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 750c3ec86d03881b180fb3bcbad40e5f50aa1044 Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Sun, 7 Aug 2022 03:14:33 +0300 Subject: [PATCH 05/49] Added tp to waypoint --- freeroam-extended/client/src/helpers.ts | 2 +- .../server/freeroam-extended/EventHandler.cs | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index c624e9a..3d4fd19 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -283,7 +283,7 @@ export async function tpToWaypoint(): Promise { if (foundZ == null) alt.logError("failed to get ground z for waypoint") - alt.emitServer("tp_to_waypoint", { x, y, z: foundZ ?? 9999 }) + alt.emitServer("tp_to_waypoint", x, y, foundZ ?? 9999) native.clearFocus() } diff --git a/freeroam-extended/server/freeroam-extended/EventHandler.cs b/freeroam-extended/server/freeroam-extended/EventHandler.cs index 6c4e2ee..beaf4bd 100644 --- a/freeroam-extended/server/freeroam-extended/EventHandler.cs +++ b/freeroam-extended/server/freeroam-extended/EventHandler.cs @@ -5,6 +5,7 @@ using System.Text.Json; using System.Text.Json.Serialization; using System.Collections.Generic; +using System.Numerics; using AltV.Net; using AltV.Net.Async; using AltV.Net.Data; @@ -23,7 +24,7 @@ public EventHandler() Alt.OnPlayerCustomEvent += (player, name, array) => { var altPlayer = (IAltPlayer)player; - if (name != "chat:message") + if (name != "chat:message" && !altPlayer.IsAdmin) { Alt.Log($"{altPlayer.Name} banned for illegal event: {name}"); player.Kick("You are not allowed to use this Event."); @@ -255,5 +256,20 @@ public void OnChatMessage(IAltPlayer player, params string[] args) $"{(player.IsAdmin ? "{008736}" : "{FFFFFF}")} {player.Name}({player.Id}): {{FFFFFF}}{message}"); } } + + [ClientEvent("tp_to_waypoint")] + public void TeleportWaypoint(IAltPlayer player, int x, int y, int z) + { + if (!player.IsAdmin) + { + player.SendChatMessage("{FF0000} No permission!"); + return; + } + + if (player.IsInVehicle) player.Vehicle.Position = new Vector3(x, y, z); + else player.Position = new Vector3(x, y, z); + + player.SendChatMessage($"{{00FF00}} You were teleported to waypoint on {x}, {y}, {z}!"); + } } } From 125db3549aa8c0c3e7b7cbb137a45ec849f6c50a Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Sun, 7 Aug 2022 03:15:48 +0300 Subject: [PATCH 06/49] Added banned players json update after console ban --- freeroam-extended/server/freeroam-extended/Commands.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/freeroam-extended/server/freeroam-extended/Commands.cs b/freeroam-extended/server/freeroam-extended/Commands.cs index 1fa87ea..cf2c5e4 100644 --- a/freeroam-extended/server/freeroam-extended/Commands.cs +++ b/freeroam-extended/server/freeroam-extended/Commands.cs @@ -1,4 +1,5 @@ using System.Numerics; +using System.Text.Json; using AltV.Net; using AltV.Net.Data; using AltV.Net.Enums; @@ -151,6 +152,9 @@ public void Ban(IAltPlayer player, int id) target.Kick("You've been banned from this server!"); Misc.BannedPlayers.Add(new Tuple(target.HardwareIdHash, target.HardwareIdExHash)); + string json = JsonSerializer.Serialize(Misc.BannedPlayers); + File.WriteAllText(@"BannedPlayers.json", json); + player.SendChatMessage($"{{00FF00}}Player with id {id} banned!"); player.Emit("set_last_command"); } From a118992c10f77315a35877dc02cd3f52fd926fee Mon Sep 17 00:00:00 2001 From: xshady Date: Sun, 7 Aug 2022 03:56:57 +0300 Subject: [PATCH 07/49] disable server illegal event check in debug mode --- freeroam-extended/server/freeroam-extended/EventHandler.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/freeroam-extended/server/freeroam-extended/EventHandler.cs b/freeroam-extended/server/freeroam-extended/EventHandler.cs index beaf4bd..1416997 100644 --- a/freeroam-extended/server/freeroam-extended/EventHandler.cs +++ b/freeroam-extended/server/freeroam-extended/EventHandler.cs @@ -26,9 +26,11 @@ public EventHandler() var altPlayer = (IAltPlayer)player; if (name != "chat:message" && !altPlayer.IsAdmin) { +#if RELEASE Alt.Log($"{altPlayer.Name} banned for illegal event: {name}"); player.Kick("You are not allowed to use this Event."); Misc.BannedPlayers.Add(new Tuple(altPlayer.HardwareIdHash, altPlayer.HardwareIdExHash)); +#endif }; altPlayer.EventCount++; if (altPlayer.EventCount > 100) altPlayer.Kick("Event count exceeded"); From 870bcd0078d683bbb43532ea0ed96ecc8e4b9338 Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Sun, 7 Aug 2022 21:08:23 +0300 Subject: [PATCH 08/49] Added /kick command --- .../server/freeroam-extended/Commands.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/freeroam-extended/server/freeroam-extended/Commands.cs b/freeroam-extended/server/freeroam-extended/Commands.cs index cf2c5e4..e259a3d 100644 --- a/freeroam-extended/server/freeroam-extended/Commands.cs +++ b/freeroam-extended/server/freeroam-extended/Commands.cs @@ -450,5 +450,33 @@ public void TpCoords(IAltPlayer player, int x, int y, int z) player.SendChatMessage($"{{00FF00}} You were teleported to {x}, {y}, {z}!"); player.Emit("set_last_command"); } + + [Command("kick")] + public void Kick(IAltPlayer player, int id) + { + if (!player.IsAdmin) + { + player.SendChatMessage("{FF0000} No permission!"); + return; + } + + if (player.Id == id) + { + player.SendChatMessage("{FF0000} You can't kick yourself!"); + return; + } + + var target = Alt.GetAllPlayers().FirstOrDefault(p => p.Id == id); + if (target == null) + { + player.SendChatMessage($"{{FF0000}}Player with id {id} not found!"); + return; + } + + target.Kick("You've been kicked from this server!"); + + player.SendChatMessage($"{{00FF00}}Player with id {id} kicked!"); + player.Emit("set_last_command"); + } } } \ No newline at end of file From d8147fc68d200ff15692773084a90fac18a502b3 Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Sun, 7 Aug 2022 22:02:40 +0300 Subject: [PATCH 09/49] Added /godmode for admins and global /godmodeall for all players --- .../server/freeroam-extended/Commands.cs | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/freeroam-extended/server/freeroam-extended/Commands.cs b/freeroam-extended/server/freeroam-extended/Commands.cs index e259a3d..b252555 100644 --- a/freeroam-extended/server/freeroam-extended/Commands.cs +++ b/freeroam-extended/server/freeroam-extended/Commands.cs @@ -478,5 +478,53 @@ public void Kick(IAltPlayer player, int id) player.SendChatMessage($"{{00FF00}}Player with id {id} kicked!"); player.Emit("set_last_command"); } + + [Command("godmode")] + public void Godmode(IAltPlayer player, int id) + { + if (!player.IsAdmin) + { + player.SendChatMessage("{FF0000} No permission!"); + return; + } + + var target = Alt.GetAllPlayers().FirstOrDefault(p => p.Id == id); + if (target == null) + { + player.SendChatMessage($"{{FF0000}}Player with id {id} not found!"); + return; + } + + target.Invincible = !target.Invincible; + target.SendChatMessage($"{(target.Invincible ? "{00FF00}" : "{FF0000}")}Godmode {(target.Invincible ? "on" : "off")}!"); + + if (player.Id != target.Id) player.SendChatMessage($"{{00FF00}}Godmode {(target.Invincible ? "on" : "off")}!"); + player.Emit("set_last_command"); + } + + [Command("godmodeall")] + public void GodmodeAllPlayers(IAltPlayer player, bool mode) + { + if (!player.IsAdmin) + { + player.SendChatMessage("{FF0000} No permission!"); + return; + } + + var targets = Alt.GetAllPlayers().ToList(); + if (targets.Count <= 0) + { + player.SendChatMessage("{{FF0000}}Players not found!"); + return; + } + + foreach (var target in targets) + { + target.Invincible = mode; + target.SendChatMessage($"{(mode ? "{00FF00}" : "{FF0000}")}Godmode for all players is {(mode ? "activated" : "deactivated")}!"); + } + + player.Emit("set_last_command"); + } } } \ No newline at end of file From e6e1f524fbb57ba7825dc8607d66c07d4f4b1b2f Mon Sep 17 00:00:00 2001 From: xshady Date: Mon, 8 Aug 2022 22:50:02 +0300 Subject: [PATCH 10/49] client: update ui & playerData --- .../client/html/Inter-Medium.ttf | Bin 0 -> 314712 bytes freeroam-extended/client/html/app.js | 5 ++ freeroam-extended/client/html/index.html | 30 +++++---- freeroam-extended/client/html/style.css | 44 +++++++++++-- freeroam-extended/client/src/chat.ts | 5 +- freeroam-extended/client/src/events.ts | 13 ++-- freeroam-extended/client/src/helpers.ts | 1 + freeroam-extended/client/src/index.ts | 36 ++++------- freeroam-extended/client/src/playerdata.ts | 61 ++++++++++++++++++ freeroam-extended/client/src/view.ts | 16 +++++ 10 files changed, 161 insertions(+), 50 deletions(-) create mode 100644 freeroam-extended/client/html/Inter-Medium.ttf create mode 100644 freeroam-extended/client/src/playerdata.ts create mode 100644 freeroam-extended/client/src/view.ts diff --git a/freeroam-extended/client/html/Inter-Medium.ttf b/freeroam-extended/client/html/Inter-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..49b53ab343cb18f12794b1c3103791a8d315b751 GIT binary patch literal 314712 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

+cuHakg=^)%x!-ERTM< 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 literal 0 HcmV?d00001 diff --git a/freeroam-extended/client/html/app.js b/freeroam-extended/client/html/app.js index 136c40b..dff22f4 100644 --- a/freeroam-extended/client/html/app.js +++ b/freeroam-extended/client/html/app.js @@ -166,7 +166,12 @@ function addString(text) { highlightChat(); } +function updatePlayersOnline (number) { + document.querySelector(".players-online").textContent = `${number} players online`; +} + alt.on("addString", (text) => addString(colorify(text))); alt.on("addMessage", (name, text) => addString("" + name + ": " + colorify(text))); alt.on("openChat", openChat); alt.on("closeChat", closeChat); +alt.on("updatePlayersOnline", updatePlayersOnline); diff --git a/freeroam-extended/client/html/index.html b/freeroam-extended/client/html/index.html index 468a4fc..e1d997b 100644 --- a/freeroam-extended/client/html/index.html +++ b/freeroam-extended/client/html/index.html @@ -8,19 +8,27 @@ +

+ Public Stress Test - xx.xx.2022 +
+
+ x players online +
    -
  1. F2: toggle HUD
  2. -
  3. T / Enter: open chat
  4. -
  5. /tp <1 to 22> (teleport)
  6. -
  7. /model <modelName> (change your ped model)
  8. -
  9. /veh <modelName> (spawn a vehicle)
  10. -
  11. /clearvehicles (clear your vehicles)
  12. -
  13. /tune <index> <value> (tune vehicle)
  14. -
  15. /weapons (give yourself weapons)
  16. -
  17. /addcomponent <name> (add weapon component)
  18. -
  19. /removecomponent <name> (remove weapon component)
  20. -
  21. /dm (Toggles respawning in death match zone)
  22. +
  23. F2: toggle HUD
  24. +
  25. T / Enter: open chat
  26. +
  27. Ctrl + T: teleport to waypoint
  28. + +
  29. /tp <1 to 22> (teleport)
  30. +
  31. /model <modelName> (change your ped model)
  32. +
  33. /veh <modelName> (spawn a vehicle)
  34. +
  35. /clearvehicles (clear your vehicles)
  36. +
  37. /tune <index> <value> (tune vehicle)
  38. +
  39. /weapons (give yourself weapons)
  40. +
  41. /addcomponent <name> (add weapon component)
  42. +
  43. /removecomponent <name> (remove weapon component)
  44. +
  45. /dm (Toggles respawning in death match zone)
diff --git a/freeroam-extended/client/html/style.css b/freeroam-extended/client/html/style.css index 25e6f0c..9214b5c 100644 --- a/freeroam-extended/client/html/style.css +++ b/freeroam-extended/client/html/style.css @@ -1,10 +1,17 @@ +@font-face { + font-family: "Inter"; + src: url("./Inter-Medium.ttf"), +} + * { margin: 0; padding: 0; cursor: default; + user-select: none; -webkit-font-smoothing: antialiased; - -webkit-user-select: none; -webkit-user-drag: none; + font-family: Inter, "Segoe UI", "Segoe UI Symbol", Arial, sans-serif; + text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.793); } *:focus { @@ -19,11 +26,17 @@ body { overflow: hidden; } -/* .help-keys { +.help-keys { position: absolute; - top: 1.5em; + top: 3.0em; right: 1.5em; text-align: right; + text-shadow: 0px 0px 5px #00000099; +} + +.help-keys-command { + color:rgb(123, 209, 255); + font-weight: bold; } .help-keys ol { @@ -32,9 +45,9 @@ body { .help-keys li { color: #FFFFFF; - font-size: 16px; + font-size: .8em; margin-bottom: 0.25em; -} */ +} .shblock { width: 70vw; @@ -71,7 +84,6 @@ body { line-height: 25px; padding: 5px 0; margin: 0; - text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); font-size: 1em; color: rgba(255, 255, 255, 0.9); width: 100%; @@ -198,3 +210,23 @@ body { margin-top: 10px; } } + +.players-online { + font-size: .9em; + color: rgb(60, 255, 180); + position: absolute; + top: 1.5em; + right: 1.5em; + text-align: right; +} + +.stress-test-label { + top: .2em; + left: 50%; + transform: translateX(-50%); + text-align: center; + width: 100%; + font-size: .8em; + position: absolute; + color: rgba(255, 255, 255, 0.628); +} diff --git a/freeroam-extended/client/src/chat.ts b/freeroam-extended/client/src/chat.ts index a37de25..935cb47 100644 --- a/freeroam-extended/client/src/chat.ts +++ b/freeroam-extended/client/src/chat.ts @@ -1,13 +1,12 @@ import * as alt from "alt-client" -import { playerData } from "./helpers" +import { playerData } from "./playerdata" +import { view } from "./view" export const chatData = { loaded: false, opened: false, } -export const view = new alt.WebView("http://resource/html/index.html") - interface IBufferItem { name: string | null text: string diff --git a/freeroam-extended/client/src/events.ts b/freeroam-extended/client/src/events.ts index e668ee9..404fa7a 100644 --- a/freeroam-extended/client/src/events.ts +++ b/freeroam-extended/client/src/events.ts @@ -1,10 +1,11 @@ -import { drawDMZone, playerData, setWeaponsUsage, mhint, tpToWaypoint } from "./helpers" -import { pushMessage, chatData, view, toggleChat } from "./chat" -import { toggleNoclip } from "./noclip" - import * as native from "natives" import * as alt from "alt-client" +import { drawDMZone, setWeaponsUsage, mhint, tpToWaypoint } from "./helpers" +import { pushMessage, chatData, toggleChat } from "./chat" +import { toggleNoclip } from "./noclip" import { KeyCode } from "./keycodes" +import { playerData } from "./playerdata" +import { view } from "./view" alt.on("connectionComplete", () => { setTimeout(() => { @@ -67,7 +68,7 @@ alt.on("keyup", (key) => { view.emit("openChat", false) view.focus() alt.toggleGameControls(false) - alt.emit("Client:HUD:setCefStatus", true) + alt.emit("Client:HUD:setCefStatus", true) // for what its here? } break } @@ -78,7 +79,7 @@ alt.on("keyup", (key) => { view.emit("closeChat") view.unfocus() alt.toggleGameControls(true) - alt.emit("Client:HUD:setCefStatus", false) + alt.emit("Client:HUD:setCefStatus", false) // for what its here? } break } diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index 3d4fd19..599f413 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/explicit-member-accessibility */ import * as native from "natives" import * as alt from "alt-client" +import { playerData } from "./playerdata" export const LOCAL_PLAYER = alt.Player.local export const EMPTY_WEAPON_HASH = 0xA2719263 diff --git a/freeroam-extended/client/src/index.ts b/freeroam-extended/client/src/index.ts index 34feb2d..c35ac92 100644 --- a/freeroam-extended/client/src/index.ts +++ b/freeroam-extended/client/src/index.ts @@ -1,4 +1,4 @@ -import { LOCAL_PLAYER, playerData, drawText3d, drawText2D } from "./helpers" +import { LOCAL_PLAYER, drawText3d, drawText2D } from "./helpers" import * as native from "natives" import * as alt from "alt-client" @@ -6,39 +6,27 @@ import * as alt from "alt-client" import "./events" import "./chat" import "./noclip" +import { playerData } from "./playerdata" +import { view } from "./view" alt.setConfigFlag("DISABLE_AUTO_WEAPON_SWAP", true) alt.setConfigFlag("DISABLE_IDLE_CAMERA", true) alt.setStat("stamina", 100) - -let playersCount = alt.Player.all.length +alt.setWatermarkPosition(3) // top center setInterval(() => { - playersCount = alt.Player.all.length -}, 5000) + if (!playerData.areNametagsVisible) return + view.emit("updatePlayersOnline", alt.Player.all.length) +}, 1000) -alt.everyTick(() => { - drawText2D("alt:V Public Stress Test - 5.12.2021", { x: 0.5, y: 0.0125 }, 0.35, { r: 255, g: 255, b: 255, a: 125 }, 0) +playerData.onAreNametagsVisibleChange = (value) => { + if (!value) view.emit("updatePlayersOnline", null) +} - // native.drawSphere(-1216.839599609375, -2832.514404296875, 13.9296875, 800, 0, 0, 255, 100); - if (playerData.areNametagsVisible) { +alt.everyTick(() => { + if (playerData.areNametagsVisible) processNametags() - drawText2D(`${playersCount} players online`, { x: 0.925, y: 0.035 }, 0.35, { r: 158, g: 209, b: 157, a: 255 }, 1) - // drawText2D("F2: toggle HUD", { x: 0.8, y: 0.025 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) - // drawText2D("T / Enter: open chat", { x: 0.8, y: 0.05 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) - // drawText2D("/tp <1 to 26>", { x: 0.8, y: 0.075 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) - // drawText2D("/revive (revive your ped)", { x: 0.8, y: 0.1 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) - // // drawText2D('/model (change ped model)', { x: 0.8, y: 0.1 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1); - // drawText2D("/veh (spawn vehicle)", { x: 0.8, y: 0.125 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) - // drawText2D("/clearvehicles (clear your vehicles)", { x: 0.8, y: 0.15 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) - // drawText2D("/tune (tune vehicle)", { x: 0.8, y: 0.175 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) - // drawText2D("/weapons (give yourself weapons)", { x: 0.8, y: 0.2 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) - // drawText2D("/addcomponent (add weapon component)", { x: 0.8, y: 0.225 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) - // drawText2D("/removecomponent (remove weapon component)", { x: 0.8, y: 0.25 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) - // drawText2D("/dm (toggles respawning in death match zone)", { x: 0.8, y: 0.275 }, 0.35, { r: 255, g: 255, b: 255, a: 255 }, 1) - } - if (playerData.areWeaponsDisabled) { native.setCanPedEquipAllWeapons(LOCAL_PLAYER, false) native.disablePlayerFiring(LOCAL_PLAYER, true) diff --git a/freeroam-extended/client/src/playerdata.ts b/freeroam-extended/client/src/playerdata.ts new file mode 100644 index 0000000..357a85f --- /dev/null +++ b/freeroam-extended/client/src/playerdata.ts @@ -0,0 +1,61 @@ +class PlayerData { + public onAreNametagsVisibleChange: ((value: boolean) => void) | null = null + + private _areNametagsVisible = true + private _areWeaponsDisabled = true + private _lastCommandTimestamp = Date.now() - 10000 + private _lastMessageTimestamp = Date.now() - 10000 + private _chatState = false + private _commandTimestamp = 0 + + public get areNametagsVisible(): boolean { + return this._areNametagsVisible + } + + public set areNametagsVisible(value: boolean) { + this._areNametagsVisible = value + this.onAreNametagsVisibleChange?.(value) + } + + public get areWeaponsDisabled(): boolean { + return this._areWeaponsDisabled + } + + public set areWeaponsDisabled(value: boolean) { + this._areWeaponsDisabled = value + } + + public get lastCommandTimestamp(): number { + return this._lastCommandTimestamp + } + + public set lastCommandTimestamp(value: number) { + this._lastCommandTimestamp = value + } + + public get lastMessageTimestamp(): number { + return this._lastMessageTimestamp + } + + public set lastMessageTimestamp(value: number) { + this._lastMessageTimestamp = value + } + + public get chatState(): boolean { + return this._chatState + } + + public set chatState(value: boolean) { + this._chatState = value + } + + public get commandTimestamp(): number { + return this._commandTimestamp + } + + public set commandTimestamp(value: number) { + this._commandTimestamp = value + } +} + +export const playerData = new PlayerData() diff --git a/freeroam-extended/client/src/view.ts b/freeroam-extended/client/src/view.ts new file mode 100644 index 0000000..fdcf6da --- /dev/null +++ b/freeroam-extended/client/src/view.ts @@ -0,0 +1,16 @@ +import * as alt from "alt-client" + +type EventNames = + "updatePlayersOnline" | + "openChat" | + "closeChat" | + "addString" | + "addMessage" + +class View extends alt.WebView { + public override emit(eventName: EventNames, ...args: unknown[]) { + super.emit(eventName, ...args) + } +} + +export const view = new View("http://resource/html/index.html") From fb1ba8b251baaa98b310562e8c388e7d08a9dd69 Mon Sep 17 00:00:00 2001 From: xshady Date: Mon, 8 Aug 2022 22:53:08 +0300 Subject: [PATCH 11/49] client: improve tp to waypoint --- freeroam-extended/client/src/helpers.ts | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index 599f413..d34c724 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -6,15 +6,6 @@ import { playerData } from "./playerdata" export const LOCAL_PLAYER = alt.Player.local export const EMPTY_WEAPON_HASH = 0xA2719263 -export const playerData = { - areWeaponsDisabled: true, - areNametagsVisible: true, - lastCommandTimestamp: Date.now() - 10000, - lastMessageTimestamp: Date.now() - 10000, - chatState: false, - commandTimestamp: 0, -} - export function displayAdvancedNotification( message: string, title = "Title", @@ -264,10 +255,14 @@ export function mhint(head: string, msg: string, time = 5): void { export async function tpToWaypoint(): Promise { const point = getWaypoint() - if (!point) return + if (!point) { + alt.log("no waypoint to tp") + return + } + const [x, y, z] = point - native.setFocusPosAndVel(x, y, z, 0, 0, 0) + native.setFocusPosAndVel(x, y, 99999, 0, 0, 0) let foundZ: number | null = null try { @@ -284,7 +279,7 @@ export async function tpToWaypoint(): Promise { if (foundZ == null) alt.logError("failed to get ground z for waypoint") - alt.emitServer("tp_to_waypoint", x, y, foundZ ?? 9999) + alt.emitServer("tp_to_waypoint", x, y, (foundZ ?? 9999) + 1.0) native.clearFocus() } From b0028291f143a84fae83cbca45b5426b35fd6635 Mon Sep 17 00:00:00 2001 From: xshady Date: Mon, 8 Aug 2022 22:53:46 +0300 Subject: [PATCH 12/49] client: add server js for development --- freeroam-extended/client/build-server.js | 23 ++++ freeroam-extended/client/build.js | 3 +- freeroam-extended/client/package.json | 14 +- freeroam-extended/client/resource.cfg | 7 +- freeroam-extended/client/src-server/index.ts | 1 + freeroam-extended/client/tsconfig.eslint.json | 3 +- freeroam-extended/client/yarn.lock | 127 +++++++++++++++++- 7 files changed, 162 insertions(+), 16 deletions(-) create mode 100644 freeroam-extended/client/build-server.js create mode 100644 freeroam-extended/client/src-server/index.ts diff --git a/freeroam-extended/client/build-server.js b/freeroam-extended/client/build-server.js new file mode 100644 index 0000000..01d7477 --- /dev/null +++ b/freeroam-extended/client/build-server.js @@ -0,0 +1,23 @@ +import esbuild from "esbuild" +import { altvEsbuild } from 'altv-esbuild' + +const dev = process.argv[2] === '-dev' +console.log('dev:', dev) + +esbuild.build({ + watch: dev, + bundle: true, + format: 'esm', + target: "esnext", + logLevel: "info", + platform: 'node', + entryPoints: ['src-server/index.ts'], + outfile: 'dist/server.js', + + plugins: [ + altvEsbuild({ + mode: 'server', + dev, + }), + ] +}) diff --git a/freeroam-extended/client/build.js b/freeroam-extended/client/build.js index 5471d07..29fb2d7 100644 --- a/freeroam-extended/client/build.js +++ b/freeroam-extended/client/build.js @@ -12,7 +12,8 @@ esbuild.build({ target: "esnext", logLevel: "info", entryPoints: ['src/index.ts'], - outdir: 'dist', + outfile: 'dist/client.js', + plugins: [ altvEsbuild({ mode: 'client', diff --git a/freeroam-extended/client/package.json b/freeroam-extended/client/package.json index 696df97..078b26d 100644 --- a/freeroam-extended/client/package.json +++ b/freeroam-extended/client/package.json @@ -10,6 +10,9 @@ "@altv/types-shared": "^1.2.6", "@typescript-eslint/eslint-plugin": "^4.33.0", "@typescript-eslint/parser": "^4.33.0", + "altv-esbuild": "^0.0.8", + "concurrently": "^7.3.0", + "esbuild": "^0.14.53", "eslint": "^7.30.0", "eslint-config-standard": "^16.0.3", "eslint-plugin-import": "^2.24.2", @@ -17,12 +20,13 @@ "eslint-plugin-promise": "^5.1.0", "typescript": "^4.7.4" }, - "dependencies": { - "altv-esbuild": "^0.0.7", - "esbuild": "^0.14.53" - }, "scripts": { - "build": "node --es-module-specifier-resolution=node build.js" + "build:client": "node --es-module-specifier-resolution=node build.js", + "build:server": "node --es-module-specifier-resolution=node build-server.js", + "dev:server": "node --es-module-specifier-resolution=node build-server.js -dev", + "dev:client": "node --es-module-specifier-resolution=node build.js -dev", + "dev": "concurrently \"npm:dev:*\"", + "build": "concurrently \"npm:build:*\"" }, "type": "module" } diff --git a/freeroam-extended/client/resource.cfg b/freeroam-extended/client/resource.cfg index 084d7b7..22d5bdb 100644 --- a/freeroam-extended/client/resource.cfg +++ b/freeroam-extended/client/resource.cfg @@ -1,6 +1,7 @@ -client-type: js -client-main: dist/index.js +type: js +main: dist/server.js +client-main: dist/client.js client-files: [ - dist/* + dist/client.js html/* ] diff --git a/freeroam-extended/client/src-server/index.ts b/freeroam-extended/client/src-server/index.ts new file mode 100644 index 0000000..336ce12 --- /dev/null +++ b/freeroam-extended/client/src-server/index.ts @@ -0,0 +1 @@ +export {} diff --git a/freeroam-extended/client/tsconfig.eslint.json b/freeroam-extended/client/tsconfig.eslint.json index 1e80070..2e51d38 100644 --- a/freeroam-extended/client/tsconfig.eslint.json +++ b/freeroam-extended/client/tsconfig.eslint.json @@ -2,5 +2,6 @@ "extends": "./tsconfig.json", "include": [ "./src/**/*", + "./src-server/**/*", ], -} \ No newline at end of file +} diff --git a/freeroam-extended/client/yarn.lock b/freeroam-extended/client/yarn.lock index 2383286..620f1f3 100644 --- a/freeroam-extended/client/yarn.lock +++ b/freeroam-extended/client/yarn.lock @@ -208,10 +208,10 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" -altv-esbuild@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/altv-esbuild/-/altv-esbuild-0.0.7.tgz#ac361dcdf405222fcf1cab169e95fb19e2a0ef30" - integrity sha512-UsOqmOQrIWDmc892qRlQEufp/Y/HVnpVBVANytQjwQAKVJS81KoRyiEhNvV4l3cMuRIhT1QB6hISpLbTA95cmg== +altv-esbuild@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/altv-esbuild/-/altv-esbuild-0.0.8.tgz#aa412ecc179585e23c23370e5a04fc8c0fcf9f44" + integrity sha512-nrIf6GYyUysD/8JsQ5Tc63rDPIiKPNvG59UAgP0Q15bF6esNUQrxP0SCal/7ZQR6dx+Z56IxAl45p29gJl8VRg== ansi-colors@^4.1.1: version "4.1.3" @@ -317,7 +317,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -325,6 +325,15 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -354,6 +363,21 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +concurrently@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.3.0.tgz#eb45cdbc8df43da195f619aba218a980cae49184" + integrity sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA== + dependencies: + chalk "^4.1.0" + date-fns "^2.16.1" + lodash "^4.17.21" + rxjs "^7.0.0" + shell-quote "^1.7.3" + spawn-command "^0.0.2-1" + supports-color "^8.1.0" + tree-kill "^1.2.2" + yargs "^17.3.1" + cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -363,6 +387,11 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +date-fns@^2.16.1: + version "2.29.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.1.tgz#9667c2615525e552b5135a3116b95b1961456e60" + integrity sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw== + debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -602,6 +631,11 @@ esbuild@^0.14.53: esbuild-windows-64 "0.14.53" esbuild-windows-arm64 "0.14.53" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -895,6 +929,11 @@ functions-have-names@^1.2.2: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" @@ -1206,6 +1245,11 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -1396,6 +1440,11 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -1434,6 +1483,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.0.0: + version "7.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== + dependencies: + tslib "^2.1.0" + semver@^6.1.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -1458,6 +1514,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -1481,12 +1542,17 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +spawn-command@^0.0.2-1: + version "0.0.2-1" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" + integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -1544,6 +1610,13 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -1572,6 +1645,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + tsconfig-paths@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" @@ -1587,6 +1665,11 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -1656,12 +1739,44 @@ word-wrap@^1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^21.0.0: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" From 860990a4150c0ecc8313a53a80d6a634d78a8d71 Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Mon, 8 Aug 2022 23:15:36 +0300 Subject: [PATCH 13/49] Remove useless pos command, add permission validation to announce command --- .../server/freeroam-extended/Commands.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/freeroam-extended/server/freeroam-extended/Commands.cs b/freeroam-extended/server/freeroam-extended/Commands.cs index b252555..9900022 100644 --- a/freeroam-extended/server/freeroam-extended/Commands.cs +++ b/freeroam-extended/server/freeroam-extended/Commands.cs @@ -122,12 +122,6 @@ public void Teleport(IAltPlayer player, int id = 0) player.Emit("set_last_command"); } - [Command("pos")] - public void Position(IAltPlayer player) - { - Alt.Log($"new Position({player.Position.X}, {player.Position.Y}, {player.Position.Z}),"); - } - [Command("ban")] public void Ban(IAltPlayer player, int id) { @@ -433,6 +427,12 @@ public void Respawn(IAltPlayer player) [Command("announce")] public void Announce(IAltPlayer player, string header, int time, params string[] body) { + if (!player.IsAdmin) + { + player.SendChatMessage("{FF0000} No permission!"); + return; + } + var message = string.Join(" ", body); Alt.EmitAllClients("announce", header, message, time); } From c0a03272d03646aa22b88cb616b6fbc29696a683 Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Mon, 8 Aug 2022 23:18:08 +0300 Subject: [PATCH 14/49] Add clear blood damage after revive command --- freeroam-extended/server/freeroam-extended/Commands.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/freeroam-extended/server/freeroam-extended/Commands.cs b/freeroam-extended/server/freeroam-extended/Commands.cs index 9900022..bc7cbc7 100644 --- a/freeroam-extended/server/freeroam-extended/Commands.cs +++ b/freeroam-extended/server/freeroam-extended/Commands.cs @@ -422,6 +422,7 @@ public void NoClip(IAltPlayer player) public void Respawn(IAltPlayer player) { player.Spawn(player.Position); + player.ClearBloodDamage(); } [Command("announce")] From 627923de07b1e779bb4a709d5f0045b44eb1dc88 Mon Sep 17 00:00:00 2001 From: xshady Date: Tue, 9 Aug 2022 00:32:15 +0300 Subject: [PATCH 15/49] add freeroam-extended build.bat --- freeroam-extended/build.bat | 1 + 1 file changed, 1 insertion(+) create mode 100644 freeroam-extended/build.bat diff --git a/freeroam-extended/build.bat b/freeroam-extended/build.bat new file mode 100644 index 0000000..fd5fbba --- /dev/null +++ b/freeroam-extended/build.bat @@ -0,0 +1 @@ +cd client && yarn build && cd ../server && dotnet build From ace6fafc4107f9ab786906e1cec02f2d6cddf061 Mon Sep 17 00:00:00 2001 From: xshady Date: Tue, 9 Aug 2022 01:40:48 +0300 Subject: [PATCH 16/49] add build-debug & build-release bats --- freeroam-extended/build-debug.bat | 1 + freeroam-extended/build-release.bat | 1 + 2 files changed, 2 insertions(+) create mode 100644 freeroam-extended/build-debug.bat create mode 100644 freeroam-extended/build-release.bat diff --git a/freeroam-extended/build-debug.bat b/freeroam-extended/build-debug.bat new file mode 100644 index 0000000..745297d --- /dev/null +++ b/freeroam-extended/build-debug.bat @@ -0,0 +1 @@ +cd client && yarn build && cd ../server && dotnet build --configuration Debug --output dist diff --git a/freeroam-extended/build-release.bat b/freeroam-extended/build-release.bat new file mode 100644 index 0000000..aa18edb --- /dev/null +++ b/freeroam-extended/build-release.bat @@ -0,0 +1 @@ +cd client && yarn build && cd ../server && dotnet build --configuration Release --output dist From d11b01b902acda73732d5a7bbab8bd749072b914 Mon Sep 17 00:00:00 2001 From: xshady Date: Tue, 9 Aug 2022 01:41:11 +0300 Subject: [PATCH 17/49] remove build.bat --- freeroam-extended/build.bat | 1 - 1 file changed, 1 deletion(-) delete mode 100644 freeroam-extended/build.bat diff --git a/freeroam-extended/build.bat b/freeroam-extended/build.bat deleted file mode 100644 index fd5fbba..0000000 --- a/freeroam-extended/build.bat +++ /dev/null @@ -1 +0,0 @@ -cd client && yarn build && cd ../server && dotnet build From e12200f35fc0b42a301fbbf9bdc00fa4861d4a02 Mon Sep 17 00:00:00 2001 From: xshady Date: Tue, 9 Aug 2022 01:51:08 +0300 Subject: [PATCH 18/49] fix client build bats --- freeroam-extended/build-debug.bat | 2 +- freeroam-extended/build-release.bat | 2 +- freeroam-extended/client/build-server.js | 17 ++++++++++------- freeroam-extended/client/html/index.html | 20 ++++++++++---------- freeroam-extended/client/src/helpers.ts | 4 ++-- 5 files changed, 24 insertions(+), 21 deletions(-) diff --git a/freeroam-extended/build-debug.bat b/freeroam-extended/build-debug.bat index 745297d..4333226 100644 --- a/freeroam-extended/build-debug.bat +++ b/freeroam-extended/build-debug.bat @@ -1 +1 @@ -cd client && yarn build && cd ../server && dotnet build --configuration Debug --output dist +cd client && yarn && yarn build && cd ../server && dotnet build --configuration Debug --output dist diff --git a/freeroam-extended/build-release.bat b/freeroam-extended/build-release.bat index aa18edb..79393f8 100644 --- a/freeroam-extended/build-release.bat +++ b/freeroam-extended/build-release.bat @@ -1 +1 @@ -cd client && yarn build && cd ../server && dotnet build --configuration Release --output dist +cd client && yarn && yarn build && cd ../server && dotnet build --configuration Release --output dist diff --git a/freeroam-extended/client/build-server.js b/freeroam-extended/client/build-server.js index 01d7477..34765c3 100644 --- a/freeroam-extended/client/build-server.js +++ b/freeroam-extended/client/build-server.js @@ -4,6 +4,15 @@ import { altvEsbuild } from 'altv-esbuild' const dev = process.argv[2] === '-dev' console.log('dev:', dev) +const plugins = [] + +if (dev) { + plugins.push(altvEsbuild({ + mode: 'server', + dev, + })) +} + esbuild.build({ watch: dev, bundle: true, @@ -13,11 +22,5 @@ esbuild.build({ platform: 'node', entryPoints: ['src-server/index.ts'], outfile: 'dist/server.js', - - plugins: [ - altvEsbuild({ - mode: 'server', - dev, - }), - ] + plugins, }) diff --git a/freeroam-extended/client/html/index.html b/freeroam-extended/client/html/index.html index e1d997b..dc61eb2 100644 --- a/freeroam-extended/client/html/index.html +++ b/freeroam-extended/client/html/index.html @@ -18,17 +18,17 @@
  1. F2: toggle HUD
  2. T / Enter: open chat
  3. -
  4. Ctrl + T: teleport to waypoint
  5. -
  6. /tp <1 to 22> (teleport)
  7. -
  8. /model <modelName> (change your ped model)
  9. -
  10. /veh <modelName> (spawn a vehicle)
  11. -
  12. /clearvehicles (clear your vehicles)
  13. -
  14. /tune <index> <value> (tune vehicle)
  15. -
  16. /weapons (give yourself weapons)
  17. -
  18. /addcomponent <name> (add weapon component)
  19. -
  20. /removecomponent <name> (remove weapon component)
  21. -
  22. /dm (Toggles respawning in death match zone)
  23. +
  24. /tp <1 to 22> (Teleport)
  25. +
  26. /model <modelName> (Change your ped model)
  27. +
  28. /veh <modelName> (Spawn a vehicle)
  29. +
  30. /clearvehicles (Clear your vehicles)
  31. +
  32. /tune <index> <value> (Tune vehicle)
  33. +
  34. /weapons (Give yourself weapons)
  35. +
  36. /addcomponent <name> (Add weapon component)
  37. +
  38. /removecomponent <name> (Remove weapon component)
  39. +
  40. /dm (Toggle respawning in death match zone)
  41. +
  42. /revive (Revive player)
diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index d34c724..622e205 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -262,12 +262,12 @@ export async function tpToWaypoint(): Promise { const [x, y, z] = point - native.setFocusPosAndVel(x, y, 99999, 0, 0, 0) + native.setFocusPosAndVel(x, y, z, 0, 0, 0) let foundZ: number | null = null try { await alt.Utils.waitFor(() => { - const [found, z] = native.getGroundZFor3dCoord(x, y, 9999999, 0, false, false) + const [found, z] = native.getGroundZAndNormalFor3dCoord(x, y, 9999) if (!found) return false foundZ = z From 81fd71eb97e437105d9be2c7c3cf78eef18cd17d Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Tue, 9 Aug 2022 01:55:36 +0300 Subject: [PATCH 19/49] Update resource.cfg cause new build.bat --- freeroam-extended/server/resource.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/freeroam-extended/server/resource.cfg b/freeroam-extended/server/resource.cfg index fba3415..a9f2b53 100644 --- a/freeroam-extended/server/resource.cfg +++ b/freeroam-extended/server/resource.cfg @@ -1,3 +1,2 @@ type: 'csharp', -main: 'freeroam-extended/bin/Debug/net6.0/Freeroam-Extended.dll', -deps: [] \ No newline at end of file +main: 'dist/Freeroam-Extended.dll' \ No newline at end of file From bbd05cd676c3ed7211b9521da64c906764ed2695 Mon Sep 17 00:00:00 2001 From: xshady Date: Tue, 9 Aug 2022 03:28:53 +0300 Subject: [PATCH 20/49] client: improve tp to waypoint (maybe) --- freeroam-extended/client/html/style.css | 1 - freeroam-extended/client/src/helpers.ts | 62 +++++++++++++++++++++---- 2 files changed, 54 insertions(+), 9 deletions(-) diff --git a/freeroam-extended/client/html/style.css b/freeroam-extended/client/html/style.css index 9214b5c..114c080 100644 --- a/freeroam-extended/client/html/style.css +++ b/freeroam-extended/client/html/style.css @@ -31,7 +31,6 @@ body { top: 3.0em; right: 1.5em; text-align: right; - text-shadow: 0px 0px 5px #00000099; } .help-keys-command { diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index 622e205..f12d7a0 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -263,23 +263,52 @@ export async function tpToWaypoint(): Promise { const [x, y, z] = point native.setFocusPosAndVel(x, y, z, 0, 0, 0) + const startPos = new alt.Vector3(x, y, 1500) + let destPos = startPos + let groundPos: alt.Vector3 | null = null - let foundZ: number | null = null try { await alt.Utils.waitFor(() => { - const [found, z] = native.getGroundZAndNormalFor3dCoord(x, y, 9999) - if (!found) return false + destPos = destPos.sub(0, 0, 100) + if (destPos.z < -500) + throw new Error("failed to get ground pos") - foundZ = z - return found + groundPos = raycast(startPos, destPos) + // alt.log("checking dest pos z:", destPos.z) + if (!groundPos) return false + + return true }, 3000) } catch {} - if (foundZ == null) - alt.logError("failed to get ground z for waypoint") + if (!groundPos) { + alt.logWarning("failed to get ground pos for waypoint, trying getGroundZ native...") + + let foundZ: number | null = null + try { + await alt.Utils.waitFor(() => { + const [found, z] = native.getGroundZAndNormalFor3dCoord(x, y, 9999) + if (!found) return false + + foundZ = z + return found + }, 3000) + } + catch {} - alt.emitServer("tp_to_waypoint", x, y, (foundZ ?? 9999) + 1.0) + if (foundZ == null) { + alt.logError("failed to get ground z for waypoint") + groundPos = new alt.Vector3(x, y, 5000) + } + } + + if (!groundPos) + throw new Error("no groundPos") + + groundPos = groundPos.add(0, 0, 2.0) + + alt.emitServer("tp_to_waypoint", ...groundPos.toArray()) native.clearFocus() } @@ -294,3 +323,20 @@ function getWaypoint(sprite = 8): [number, number, number, number] | null { return null } + +function raycast(start: alt.Vector3, dest: alt.Vector3): alt.Vector3 | null { + const ray = native.startExpensiveSynchronousShapeTestLosProbe( + start.x, + start.y, + start.z, + dest.x, + dest.y, + dest.z, + 1 + 16, + 0, + 0, + ) + + const [, hit, hitPos] = native.getShapeTestResult(ray) + return hit ? hitPos : null +} From 6a609b167241e4f875544db156a7879cb5827a8f Mon Sep 17 00:00:00 2001 From: xshady Date: Tue, 9 Aug 2022 04:26:02 +0300 Subject: [PATCH 21/49] client: fix tp to waypoint finally (fxcking mount chiliad) --- freeroam-extended/client/src/helpers.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index f12d7a0..d058f5b 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -269,12 +269,15 @@ export async function tpToWaypoint(): Promise { try { await alt.Utils.waitFor(() => { - destPos = destPos.sub(0, 0, 100) + destPos = destPos.sub(0, 0, 200.0) + + native.clearFocus() + native.setFocusPosAndVel(...destPos.toArray(), 0, 0, 0) + if (destPos.z < -500) throw new Error("failed to get ground pos") groundPos = raycast(startPos, destPos) - // alt.log("checking dest pos z:", destPos.z) if (!groundPos) return false return true @@ -299,7 +302,7 @@ export async function tpToWaypoint(): Promise { if (foundZ == null) { alt.logError("failed to get ground z for waypoint") - groundPos = new alt.Vector3(x, y, 5000) + groundPos = startPos } } From a7c77bb68fd4836eee67a12dc7c514666eece05a Mon Sep 17 00:00:00 2001 From: xshady Date: Thu, 11 Aug 2022 01:31:15 +0300 Subject: [PATCH 22/49] client: add new nametags --- freeroam-extended/client/src/helpers.ts | 90 ++-------- freeroam-extended/client/src/index.ts | 38 +--- freeroam-extended/client/src/nametags.ts | 211 +++++++++++++++++++++++ freeroam-extended/client/src/types.ts | 1 + 4 files changed, 231 insertions(+), 109 deletions(-) create mode 100644 freeroam-extended/client/src/nametags.ts create mode 100644 freeroam-extended/client/src/types.ts diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index d058f5b..badb63c 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -48,48 +48,6 @@ export function setWeaponsUsage(state: boolean): void { } } -export function drawText3d( - text: string, - x: number, - y: number, - z: number, - scale: number, - r: number, g: number, b: number, a: number, - outline: boolean, - offset: number, - lagcomp: boolean, - lagcompEntity: { vehicle: alt.Vehicle | null }, -): void { - // If lagcomp is enabled and the lagcomp entity is in a vehicle. - if (lagcomp === true && lagcompEntity.vehicle !== null) { - const vector = native.getEntityVelocity(lagcompEntity.vehicle) - const frameTime = native.getFrameTime() - - native.setDrawOrigin(x + (vector.x * frameTime), y + (vector.y * frameTime), z + (vector.z * frameTime), 0) - } - else native.setDrawOrigin(x, y, z, 0) - - native.setTextFont(4) - native.setTextProportional(false) - native.setTextScale(scale, scale) - native.setTextColour(r, g, b, a) - native.setTextDropshadow(0, 0, 0, 0, 255) - native.setTextEdge(2, 0, 0, 0, 150) - native.setTextDropShadow() - native.setTextCentre(true) - - if (outline) native.setTextOutline() - - native.beginTextCommandDisplayText("CELL_EMAIL_BCON") - - text.match(/.{1,99}/g)?.forEach(textBlock => { - native.addTextComponentSubstringPlayerName(textBlock) - }) - - native.endTextCommandDisplayText(0.0, offset, 0.0) - native.clearDrawOrigin() -} - export class DirectionVector { constructor( private readonly position: alt.IVector3, @@ -188,32 +146,6 @@ export function drawDMZone( } } -export function drawText2D( - text: string, - pos: alt.IVector2, - scale: number, - color: { r: number; g: number; b: number; a: number }, - alignment = 0, - padding = 0, -): void { - if (scale > 2) - scale = 2 - - native.beginTextCommandDisplayText("STRING") - native.addTextComponentSubstringPlayerName(text) - native.setTextFont(4) - native.setTextScale(1, scale) - native.setTextColour(color.r, color.g, color.b, color.a) - native.setTextOutline() - native.setTextDropShadow() - if (alignment !== null) { - native.setTextWrap(padding, 1 - padding) - native.setTextJustification(alignment) - } - - native.endTextCommandDisplayText(pos.x, pos.y, 0) -} - let adminMessageEveryTick: number | null = null export function mhint(head: string, msg: string, time = 5): void { @@ -277,7 +209,7 @@ export async function tpToWaypoint(): Promise { if (destPos.z < -500) throw new Error("failed to get ground pos") - groundPos = raycast(startPos, destPos) + groundPos = raycast(startPos, destPos)?.pos ?? null if (!groundPos) return false return true @@ -327,7 +259,11 @@ function getWaypoint(sprite = 8): [number, number, number, number] | null { return null } -function raycast(start: alt.Vector3, dest: alt.Vector3): alt.Vector3 | null { +export function raycast( + start: alt.Vector3, + dest: alt.Vector3, + flags = 1 | 16, +): { pos: alt.Vector3; entity: number } | null { const ray = native.startExpensiveSynchronousShapeTestLosProbe( start.x, start.y, @@ -335,11 +271,17 @@ function raycast(start: alt.Vector3, dest: alt.Vector3): alt.Vector3 | null { dest.x, dest.y, dest.z, - 1 + 16, - 0, + flags, + LOCAL_PLAYER, 0, ) - const [, hit, hitPos] = native.getShapeTestResult(ray) - return hit ? hitPos : null + const [, hit, pos,, entity] = native.getShapeTestResult(ray) + return hit + ? { pos: pos, entity } + : null +} + +export function clamp(value: number, min: number, max: number): number { + return Math.min(Math.max(min, value), max) } diff --git a/freeroam-extended/client/src/index.ts b/freeroam-extended/client/src/index.ts index c35ac92..32cafa7 100644 --- a/freeroam-extended/client/src/index.ts +++ b/freeroam-extended/client/src/index.ts @@ -1,4 +1,4 @@ -import { LOCAL_PLAYER, drawText3d, drawText2D } from "./helpers" +import { LOCAL_PLAYER } from "./helpers" import * as native from "natives" import * as alt from "alt-client" @@ -8,6 +8,7 @@ import "./chat" import "./noclip" import { playerData } from "./playerdata" import { view } from "./view" +import { playerNametags } from "./nametags" alt.setConfigFlag("DISABLE_AUTO_WEAPON_SWAP", true) alt.setConfigFlag("DISABLE_IDLE_CAMERA", true) @@ -21,12 +22,10 @@ setInterval(() => { playerData.onAreNametagsVisibleChange = (value) => { if (!value) view.emit("updatePlayersOnline", null) + playerNametags.enable(value) } alt.everyTick(() => { - if (playerData.areNametagsVisible) - processNametags() - if (playerData.areWeaponsDisabled) { native.setCanPedEquipAllWeapons(LOCAL_PLAYER, false) native.disablePlayerFiring(LOCAL_PLAYER, true) @@ -34,34 +33,3 @@ alt.everyTick(() => { else native.setCanPedEquipAllWeapons(LOCAL_PLAYER, true) }) - -function processNametags() { - renderNametags(LOCAL_PLAYER) - - const streamedIn = alt.Player.streamedIn - for (let i = 0, len = streamedIn.length; i < len; i++) { - const player = streamedIn[i] - if (player?.valid && LOCAL_PLAYER.pos.distanceTo(player.pos) <= 25) - renderNametags(player) - } -} - -function renderNametags(player: alt.Player) { - native.requestPedVisibilityTracking(player) - if (!native.isTrackedPedVisible(player) && alt.Player.local.vehicle === null) return - - const distance = alt.Player.local.pos.distanceTo(player.pos) - const pos = native.getPedBoneCoords(player.scriptID, 31086, 0.0, 0.0, 0.0) - const scale = 0.35 - distance * 0.01 - - let nametagText = `~n~~w~${player.name} #${player.id} | ~g~${player.health - 100} / 100` - - if (player === LOCAL_PLAYER && playerData.areWeaponsDisabled) - nametagText = "~o~Weapons Disabled" + nametagText - - drawText3d( - nametagText, - pos.x, pos.y, (pos.z + -(scale)) + 1.0, - scale, 255, 255, 255, 255, true, 0.038 * (-scale), true, player, - ) -} diff --git a/freeroam-extended/client/src/nametags.ts b/freeroam-extended/client/src/nametags.ts new file mode 100644 index 0000000..7aed94f --- /dev/null +++ b/freeroam-extended/client/src/nametags.ts @@ -0,0 +1,211 @@ +import * as alt from "alt-client" +import * as native from "natives" +import { clamp, LOCAL_PLAYER } from "./helpers" +import type { RGBAArray } from "./types" + +export class PlayerNametags { + private readonly fontStyle = 0 + private readonly fontSize = 0.35 + private readonly defaultAlpha = 215 + private readonly barsConfig = { + maxWidth: 0.10, + maxHeight: 0.015, + xOffset: 0, + yOffset: 0.035, + bgColor: [0, 0, 0, 100], + healthColorHigh: [80, 185, 80, 180], + healthColorMiddle: [255, 208, 69, 180], + healthColorLow: [143, 44, 44, 180], + armourColor: [222, 222, 222, 150], + borderColor: [0, 0, 0, 50], + } as const + + // head bone + private readonly drawFromBoneId = 12844 + private readonly drawBonePosOffset = 0.5 + + private drawRange: number + private readonly handlers = [this.draw.bind(this)] + private tick = 0 + + constructor({ drawRange = 15 }: { drawRange?: number }) { + this.drawRange = drawRange + this.enable(true) + } + + public enable(toggle: boolean): void { + if (this.tick) alt.clearEveryTick(this.tick) + + if (toggle) + this.tick = alt.everyTick(this.everyTickHandler.bind(this)) + else + this.tick = 0 + } + + private everyTickHandler(): void { + const renderCam = native.getRenderingCam() + const camCoord = (renderCam > -1) + ? native.getCamCoord(renderCam) + : native.getGameplayCamCoord() + + for (const player of alt.Player.streamedIn) { + const dist = player.pos.distanceTo(camCoord) + if (dist > this.drawRange) continue + + const { x, y, z } = player.pos + if (!native.isSphereVisible(x, y, z, 0.1)) continue + if (!native.hasEntityClearLosToEntity(LOCAL_PLAYER, player, 17)) continue + + this.drawPlayerTick(player, dist) + } + } + + private drawPlayerTick(player: alt.Player, dist: number): void { + const pos = { + ...native.getPedBoneCoords(player, this.drawFromBoneId, 0, 0, 0), + } + pos.z += this.drawBonePosOffset + + const scale = 1 - (0.8 * dist) / this.drawRange + + const velocityEntity = player.vehicle ?? player + const velocityVector = native.getEntityVelocity(velocityEntity) + const frameTime = native.getFrameTime() + + native.setDrawOrigin( + pos.x + velocityVector.x * frameTime, + pos.y + velocityVector.y * frameTime, + pos.z + velocityVector.z * frameTime, + 0, + ) + + for (const handler of this.handlers) { + handler( + player, + scale, + ) + } + + native.clearDrawOrigin() + } + + private draw(player: alt.Player, scale: number): void { + const fullName = `${player.name} ~b~#${player.id}` + scale *= this.fontSize + + const yOffset = 0 - (player.armour > 0 ? 0.0015 : 0) + + native.beginTextCommandDisplayText("STRING") + native.setTextFont(this.fontStyle) + native.setTextScale(scale, scale) + native.setTextProportional(true) + native.setTextCentre(true) + native.setTextColour(255, 255, 255, this.defaultAlpha) + native.setTextOutline() + native.addTextComponentSubstringPlayerName(fullName) + native.endTextCommandDisplayText(0, yOffset, 0) + + this.drawBars(player, scale, yOffset) + } + + private drawBars(player: alt.Player, scale: number, _yOffset: number): void { + const { + maxWidth, + maxHeight, + healthColorHigh, + healthColorMiddle, + healthColorLow, + armourColor, + borderColor, + xOffset, + yOffset, + bgColor, + } = this.barsConfig + + let { + health, + armour, + } = player + + health -= 100 + health = clamp(health, 0, 100) + + const width = maxWidth * scale + const y = yOffset * scale * 2.5 - _yOffset + const healthWidth = (width * (health / 100)) + const healthXOffset = (width - healthWidth) / 2 + const armourWidth = (width * (armour / 100)) + const armourXOffset = (width - armourWidth) / 2 + const containerWidth = width + const containerHeight = maxHeight * scale + + // background health + this.drawRect(xOffset, y, + containerWidth, + containerHeight, + ...bgColor, + ) + + // border health + this.drawRect(xOffset, y, + containerWidth + 0.0045, + containerHeight + 0.0065, + ...borderColor, + ) + + let healthColor: RGBAArray + + if (health > 50) + healthColor = healthColorHigh + else if (health < 20) + healthColor = healthColorLow + else + healthColor = healthColorMiddle + + // health + this.drawRect( + xOffset - healthXOffset, + y, + healthWidth, + containerHeight, + ...healthColor, + ) + + if (armour > 0) { + armour = clamp(armour, 0, 100) + + const _y = y + 0.04 * scale + + // background armour + this.drawRect(xOffset, _y, + containerWidth, + containerHeight, + ...bgColor, + ) + + // border armour + this.drawRect(xOffset, _y, + containerWidth + 0.0045, + containerHeight + 0.0065, + ...borderColor, + ) + + // armour + this.drawRect( + xOffset - armourXOffset, + _y, + armourWidth, + containerHeight, + ...armourColor, + ) + } + } + + private drawRect(x: number, y: number, width: number, height: number, r: number, g: number, b: number, a: number): void { + native.drawRect(x, y, width, height, r, g, b, a, false) + } +} + +export const playerNametags = new PlayerNametags({ + drawRange: 25, +}) diff --git a/freeroam-extended/client/src/types.ts b/freeroam-extended/client/src/types.ts new file mode 100644 index 0000000..5ddad27 --- /dev/null +++ b/freeroam-extended/client/src/types.ts @@ -0,0 +1 @@ +export type RGBAArray = readonly [number, number, number, number] From d357faa4f25f53b7148d426d4d8cae1e2be31afb Mon Sep 17 00:00:00 2001 From: xshady Date: Thu, 11 Aug 2022 01:38:25 +0300 Subject: [PATCH 23/49] client: use altv enums instead of literals --- freeroam-extended/client/build.js | 1 + freeroam-extended/client/package.json | 2 +- freeroam-extended/client/src/index.ts | 11 +++++------ freeroam-extended/client/tsconfig.json | 5 ++--- freeroam-extended/client/yarn.lock | 8 ++++---- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/freeroam-extended/client/build.js b/freeroam-extended/client/build.js index 29fb2d7..54fc9a2 100644 --- a/freeroam-extended/client/build.js +++ b/freeroam-extended/client/build.js @@ -18,6 +18,7 @@ esbuild.build({ altvEsbuild({ mode: 'client', dev, + altvEnums: true, }) ] }) diff --git a/freeroam-extended/client/package.json b/freeroam-extended/client/package.json index 078b26d..4b9f110 100644 --- a/freeroam-extended/client/package.json +++ b/freeroam-extended/client/package.json @@ -10,7 +10,7 @@ "@altv/types-shared": "^1.2.6", "@typescript-eslint/eslint-plugin": "^4.33.0", "@typescript-eslint/parser": "^4.33.0", - "altv-esbuild": "^0.0.8", + "altv-esbuild": "^0.1.3", "concurrently": "^7.3.0", "esbuild": "^0.14.53", "eslint": "^7.30.0", diff --git a/freeroam-extended/client/src/index.ts b/freeroam-extended/client/src/index.ts index 32cafa7..77600bc 100644 --- a/freeroam-extended/client/src/index.ts +++ b/freeroam-extended/client/src/index.ts @@ -1,19 +1,18 @@ import { LOCAL_PLAYER } from "./helpers" - import * as native from "natives" import * as alt from "alt-client" - import "./events" import "./chat" import "./noclip" import { playerData } from "./playerdata" import { view } from "./view" import { playerNametags } from "./nametags" +import { ConfigFlag, StatName, WatermarkPosition } from "altv-enums" -alt.setConfigFlag("DISABLE_AUTO_WEAPON_SWAP", true) -alt.setConfigFlag("DISABLE_IDLE_CAMERA", true) -alt.setStat("stamina", 100) -alt.setWatermarkPosition(3) // top center +alt.setConfigFlag(ConfigFlag.DisableAutoWeaponSwap, true) +alt.setConfigFlag(ConfigFlag.DisableIdleCamera, true) +alt.setStat(StatName.Stamina, 100) +alt.setWatermarkPosition(WatermarkPosition.TopCenter) // top center setInterval(() => { if (!playerData.areNametagsVisible) return diff --git a/freeroam-extended/client/tsconfig.json b/freeroam-extended/client/tsconfig.json index 0b600a8..0daf49c 100644 --- a/freeroam-extended/client/tsconfig.json +++ b/freeroam-extended/client/tsconfig.json @@ -10,13 +10,12 @@ "resolveJsonModule": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, - "isolatedModules": true, + "isolatedModules": false, "forceConsistentCasingInFileNames": true, "noImplicitReturns": true, "typeRoots": [ "./node_modules/@altv", - "./node_modules/@types", - "./@types", + "node_modules/altv-esbuild/altv-enums/types" ], "paths": { "@/*": ["./src/*"] diff --git a/freeroam-extended/client/yarn.lock b/freeroam-extended/client/yarn.lock index 620f1f3..76c2cd1 100644 --- a/freeroam-extended/client/yarn.lock +++ b/freeroam-extended/client/yarn.lock @@ -208,10 +208,10 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" -altv-esbuild@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/altv-esbuild/-/altv-esbuild-0.0.8.tgz#aa412ecc179585e23c23370e5a04fc8c0fcf9f44" - integrity sha512-nrIf6GYyUysD/8JsQ5Tc63rDPIiKPNvG59UAgP0Q15bF6esNUQrxP0SCal/7ZQR6dx+Z56IxAl45p29gJl8VRg== +altv-esbuild@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/altv-esbuild/-/altv-esbuild-0.1.3.tgz#3d05d4cad7b4ec005ac4f4053ba9cc228f08dd5d" + integrity sha512-tJajq+1isEdYkusRaQPES/jZucAoQ8QHbufE4O9WqCkH90NKhfMjHfS5K/eKyQL2J9EulBnHULVvi7uLIm203A== ansi-colors@^4.1.1: version "4.1.3" From 9098f68b8e51858e52e8dbd3efefddd342f3e826 Mon Sep 17 00:00:00 2001 From: xshady Date: Thu, 11 Aug 2022 01:40:52 +0300 Subject: [PATCH 24/49] client: fix tp to waypoint --- freeroam-extended/client/src/helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index badb63c..a8e640b 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -262,7 +262,7 @@ function getWaypoint(sprite = 8): [number, number, number, number] | null { export function raycast( start: alt.Vector3, dest: alt.Vector3, - flags = 1 | 16, + flags = 99999, ): { pos: alt.Vector3; entity: number } | null { const ray = native.startExpensiveSynchronousShapeTestLosProbe( start.x, From 1eacd26cf056749dab95ced1c62a303b64c6f7c6 Mon Sep 17 00:00:00 2001 From: xshady Date: Thu, 11 Aug 2022 01:49:11 +0300 Subject: [PATCH 25/49] client: block attack controls if weapons disabled --- freeroam-extended/client/src/const.ts | 14 ++++++++++++++ freeroam-extended/client/src/index.ts | 7 +++++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 freeroam-extended/client/src/const.ts diff --git a/freeroam-extended/client/src/const.ts b/freeroam-extended/client/src/const.ts new file mode 100644 index 0000000..3c9b575 --- /dev/null +++ b/freeroam-extended/client/src/const.ts @@ -0,0 +1,14 @@ +export const ATTACK_CONTROLS = [ + 24, // INPUT_ATTACK + 69, // INPUT_VEH_ATTACK + 70, // INPUT_VEH_ATTACK2 + 92, // INPUT_VEH_PASSENGER_ATTACK + 114, // INPUT_VEH_FLY_ATTACK + 121, // INPUT_VEH_FLY_ATTACK_CAMERA + 140, // INPUT_MELEE_ATTACK_LIGHT + 141, // INPUT_MELEE_ATTACK_HEAVY + 257, // INPUT_ATTACK2 + 263, // INPUT_MELEE_ATTACK1 + 264, // INPUT_MELEE_ATTACK2 + 331, // INPUT_VEH_FLY_ATTACK2 +] as const diff --git a/freeroam-extended/client/src/index.ts b/freeroam-extended/client/src/index.ts index 77600bc..102fe39 100644 --- a/freeroam-extended/client/src/index.ts +++ b/freeroam-extended/client/src/index.ts @@ -8,11 +8,12 @@ import { playerData } from "./playerdata" import { view } from "./view" import { playerNametags } from "./nametags" import { ConfigFlag, StatName, WatermarkPosition } from "altv-enums" +import { ATTACK_CONTROLS } from "./const" alt.setConfigFlag(ConfigFlag.DisableAutoWeaponSwap, true) alt.setConfigFlag(ConfigFlag.DisableIdleCamera, true) alt.setStat(StatName.Stamina, 100) -alt.setWatermarkPosition(WatermarkPosition.TopCenter) // top center +alt.setWatermarkPosition(WatermarkPosition.TopCenter) setInterval(() => { if (!playerData.areNametagsVisible) return @@ -20,7 +21,6 @@ setInterval(() => { }, 1000) playerData.onAreNametagsVisibleChange = (value) => { - if (!value) view.emit("updatePlayersOnline", null) playerNametags.enable(value) } @@ -28,6 +28,9 @@ alt.everyTick(() => { if (playerData.areWeaponsDisabled) { native.setCanPedEquipAllWeapons(LOCAL_PLAYER, false) native.disablePlayerFiring(LOCAL_PLAYER, true) + + for (const control of ATTACK_CONTROLS) + native.disableControlAction(0, control, true) } else native.setCanPedEquipAllWeapons(LOCAL_PLAYER, true) From 5196d66693c930f418304119e5523328d37229dc Mon Sep 17 00:00:00 2001 From: xshady Date: Thu, 11 Aug 2022 03:13:59 +0300 Subject: [PATCH 26/49] client: add ID, weapons state to UI --- freeroam-extended/client/html/Inter-Bold.ttf | Bin 0 -> 316100 bytes freeroam-extended/client/html/app.js | 24 ++++++- freeroam-extended/client/html/index.html | 13 +++- freeroam-extended/client/html/style.css | 62 +++++++++++++++++-- freeroam-extended/client/src/index.ts | 6 ++ freeroam-extended/client/src/playerdata.ts | 2 + freeroam-extended/client/src/view.ts | 4 +- 7 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 freeroam-extended/client/html/Inter-Bold.ttf diff --git a/freeroam-extended/client/html/Inter-Bold.ttf b/freeroam-extended/client/html/Inter-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..906232896fc1ba1850973c6f9978108cd39474d6 GIT binary patch literal 316100 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 z zfp?Cn@8C3nTj(^8;(+UO?ex^T3h>$4zNYe%v$D)ELEB}>X@qy*|KMdD7l z3D%9Q5dk~o>o?r-g5KE%KXntZiJvK1($E4+W`Z%57E%IUfe^dU$ge6lYC55ro|sZl zDyp$X@JvKwiUog_%K&Jz587Pa2?w)G>PzFOqrfD8p#+2u%(a)NQ&2ukzb;!z(_YHXS)27Eu{hI?sH9uZjr8p35>Z;nUfoc zyGgg^2Cy9M7Sdx|CG*@smQ8x?7KY}qNSD)%(RIZerA$D#kFUuAB8QV80?^}5q3mt`VY_U(U3D! z!dHj7_pI-OP^Grg(DRACH$=7ZuJ04X4*iFR^4Md4#CGs?t`{A7Fl&N$aASw?p~jfM zmw~ZwP>ybsHb%Gb0Y!P-eOQ~&S+hdJQaGuo8i=Q$vuWt;9hBUqR9%KH5+zG` z_fc{~I;GpBv_Q#Hlw1HoUPxMO3<0K&z&S(#NtG$Nq1qMfg*M>byGT}?5M(z z!=Oe#UZr);adwnE0Ai}@T44fV8WF7-VlL<9Oy@^e*h|IT9;gw8bXG6*w?$npYvhj~ ze#_achde)LnldJ5n*R2ukHyLu4Ln>pcZxV@NSa>SzKTYF3-9tbkxPtkDDVv=X{NWg z@fIAlf@wWF#$H*mH~MN(#x3$l!)$4SF#!zxT#i@#AQV~PO)JIG-riM#Y-DevC@@G% z3oEcAQ>hnQJC!^uP|1qqIhAEl&#CN4MFfo`{Pb?~=663)0-K=z#U_B1&*_BXr*i`- zw`nxY4SVBMdZariOg9yv!GbaYy;H3NIy;dkm8-6hao)-fiui(X;DY12VIPhZJCAuR2$ z^mJUMl`1`J7S*})(5A^Q&aU;1TPcujp+Li*-@GP3-C9Y-*RG}FIIw?OyOw=g3HrXu z%QUZPRu#SyP9m|Y@Q{E$>FY2HWCa$6QUtAO5NVZvOQTIWTo)%JpOK{_lulgx0Jlq> zWjU?%D2+7Br@vlQn%yfsEvVBZAD>B`f+m)snx*GIpT0a#lP1-907L2Hbx7Yu)o9{_ zhct<7Gm!R&{mkMYE++lC;WXkL%UQIL<(`kG5$7?vG|NeoHu~D+j(s{z>I9g5I!?Ye z8Vwo7XOJCDe2Dvr$Sxy;J!VtjI6s9w&Y(`i&y%u9fE#|EWeaE{{-N7y;x=SL%GaTZ zm0oYl-3^hX@qg^LzHwR}y8V29X{uRfVt%)$aUv{!HJxK`y#0Tt+n|@|Hi+11Qit9? zyxV!2T+jdGZs+r@6(SLZuMxNw@^n$2{h#=C4fTv(v~<*)Yjr)^)EVpf4Wo_&qi*;I zMx7TEJ151>#l_vYm3jYf460~`D^-P$iJB?F5)RK$AURoC!9N`SQTZS4L#@5Y9;`jE ze=U5;njWG(hjUIGW&@wS7RYZyr{5E}78T(4@mMpg2($I~_u};@f(^iw!;dSic+WiOCvIpxADHSFTty#~`;X4Pj5*FhE`o|HCj&0;X zmF>TG(3h|n+bw*IUd6T$bB&;d{t}k9{NN;XAGm*y=)e@I!VTj~>S26!Ln<$t+qJ|fdShjL zKR+d9e*QS9?dj6dUjFFT_}l1m>Z(hsSW}UN8uaI9Ks$PpPf*tMFzq=Me>mbN&n}(X zK781JQ9!_={{JxWV1OloZd2TYmUNjFGA3kZXRtuLQb~8!OfjMGcLbDt>D0zf75@Zx zxH{n!`V9i~;J~4M2hz8g?I_-*UH9PbJ=*$|*j{YS-|#B`5D+P(+d%=ZV3g!~1IPZSzUn5PM{vC>JhB|SlnB&yuRRNfTs`)K5qd{8?|{}C<+!dD(V4PytgJ@I2TY%IKoRy>nBw{>vq zhic~KhgdnpH=t+4r{B*X`lVF)+|pL9u8tkiC8%j!*YZ`@&D(h3<6qiUblbmI+cuWT z2aX?QU7JsIuQ!w~tm@gKiJMdVYHK_vZkfGg9Z)zS@7FE_3c`U@`JY(fp-|-(siKGcAyhxjJ+z;PXaD|Mjn*yqgm!oDHtv1_$iz-+{U*#)(?DeccCMJ7{bs z&FdLD7#QF*tAhsu^bKVI2+Gd_T_``CDec(sxToym%9Z5$RMJ5Usyk?K+dy`Q50c#` zEN6xJ4aq;-I{0n?@YG$uf)>DjD`wSNM9ln$rKvJS&L31GhdQ z^s1bT3vLjaNrMJDhq$&1u0fM(L=SN9CB(@54V3TW( z9O7oK_aD*7rxz00XgBU8Wx*fXY8{%f-POGsC}!OPsPp%p&N^+Ui0@lBXwbQ7nO&Bi zkt?GDqCHA#I~MBh{) zhnpg0)$;}fLHL|{?9(YGH&Q)n3OIafy~Zo9eY4134wYJ!wrXV8 zdO^4LabC(@?_tf#Rkyabx9*;XEI^wlKi$%=?T{uF?5%C8mv{{5^v@6@Ri`NKG&k?LY6c9y-v|2ubgkpy`1 zyzlS*f6!f+a^_4sbLPw`M@9s%4C|hDauQLK!9S9nbnla!v}nf~1VySjbf%Zb$L`Cg9Ry9rOQBjO$)@_GD2$-mxNzx!o@?bX@-onC`Fgn1`f)TN=w1vJ) zectE|o%AzjPMV8X@%C3;QqfmJb=EP;JVi|{J*cWFcExYjOu;@3FM41{D}4dP0co$Y zH-Sc`mDRgsv0k#aXg$4uYs{Eiq~ZFtq`{4>ES%PBgXRr)AHH{Z$ih@NLWUmbijs+% z>SIx8-FKw^&9P%|(ud!zL&dQq*F9xH@bLYJOVTA}eo)GRVOUP_=oe!VR5FQ0pV&Jm zj7@naDU9dZ6W35Y&iHqxx3l3aX|ES)$~jAC=}nMV1wAIYNp0x`(w4ix9V2d9g_e=K zPW(&$p}IP3^VkZNB|th&AWNC@GE+ABBt%FvFkyJy!U+NDC2NL|MFUqxbWNS+6+7f> zFP}caHRu!DH-$-OC)0cCMtP0hBEK=|9a5)#XaN7xdwN1drgvk}xMo8ewX0{hX7#`Q z&U3{yDPlsWh%2pnHXmYaQA1F>xH`52PAUAKLV{5+_)X}-v6Dn+Ga?_yGRd&D1d)(W zNf}8og|t>%xTl1t9Z63)oEe-a>^$ku{F8B9%V{5xbk-?jC{XqVnL z^Et(&Wj)6SWv%L(gX71Ge<{?&7~myYHv&5OQ#qoIwh$Rl zUToX-JfovuBl1?eb;6R>V?)OKbQ`blPy=+x_HP{m?`GpeQ;~%zU}rUr&+aa zR%`ht^sk-P3Kho-`WE0>z?d<%RHrM*d0l!_pIDjo zj}94G)6^?9G`%PtLl=?iUb7}?G5P7NfkTqwx<lAE28R3U}YeKSH!fq~#cI!r4z$7Vz-Z?{#C~ZhQ8IABuDrK-{D=D}kW$MO= zECnFF@Q(3mM#xqM>+(cD%%^S->sdPMe+*(7i)U$;1P;$;{*Zx->r}VdIDBRy{iS~g zpFnyuw6og)M!@#=O^OQ*jxX3O`E#QKx<&d(3%CjHeWC-THTv0VhSm(T^q_O$k z6%}J`{@JKTN?++GOsE?UraypnQ{b%g00fGqmjK9;c0GB}i3)U&ebA?SrS|u2AJN`> zf8LrgSEii*REvCFBeI)!cxSiW%jUg1dG2@dmZd|t)?YXN+Qh!zc3nlxBAV$rrO7_!FvTW*W`{TGtv!kihfQvla8Xn{H53O^x_v~JbZvZ+yRECMxn+U6T`Lu4b!}e=jt_fo)io>j(GmnXUP9c@RR0-z02n~Y zjXQ?I4FrYAthJb0i(HfyM@$gtT5!Z7!4ppVE^X%+|Bfmr}U7QW}@1 zRd9o)#Q@U`sa62Pq`-)=NC1Gb86>H2AL&T10`Jps$$f&fqBnJxI#6pANdVnJG_b@1 z&LHOuXC?~7 zX56)sdE>qVq*1qC2l4yrq>a@MTwv0@MKbwGIeUouxXR|hj?6Ug`b{Kj=4lH z(w*>2a^l#*gU5~^(qY3Ds?X_|TwA4?9k}HMD#X3$LM(vj5BrIDro<5i*+thESTH$` zlg<>5UGHs}gL<84L8U@B#*(M)16ySVM+^mw+P4wY7XTlMs9<YCQfANYpEfWcWE4+ta#J78o^x&F!olCJo%t5p3>$~HckAxn$?svWj;`Iiwja7a zGAchdd4h?t$%2gJ4N(~65OnVV#zAMr<^<;f%!9x14IS!(=RBM&kd~@Ze*Lqu;#^Z2 z&_BKSU};MuxQX3oyVn{8$bADe$+fdHe4jttm!55#O^sWIpcPFhmI*4 zHt~;D?(v;E4D@gt)L9U-`8SK0Luenqe4+DIAv8Mrc2@TaN)cNRq@1V~T8MAyeP+Eq7Bpma<+VBj7h zLom#4d9<;>Ef}v}M%TF^EB>0kc0%%$>|3*D-_Dvec;vQO@0WWFba9RC;uhnQ5$h7z zYEYnaVC%vBn|`YY4c%s@wpbV!vp6(tadg~53$^L@X)s=S(8RM4@#7tqp=aV6Wio7@AVVKTqvXwE`f>$S%1x$VmYd4;+U#Fdo*HJmgZdawAu8YcdD0H zsyAsgdz#o-L;G*_gGsc{>U`3JSom+JQ2=p)yT`pU%3^ea9e^;*w!FYKeEXKWC$4x~ z;`0_oY*55qU&M)tTETyzKtt}{TcPl6aU4cHm$3q_e8z zA~90QQX^rY-0BTI9^H}RCa2u|f*D_%+m1fpk}(5Ug(?06m^H;3`M>0<$e4fQs(^B1 zI*;4JF914s^ynnf1ws=ppYcb7*zM!r`JNOlwowPFhovyrcVh*%5;7LAV1fqbVDsuxy&DBaOMhAWXLb{ zDG{hON3Qi!pR!#V%{>rI0OyrHr8!cf<&;15DHo(%?v+pvWnSx3Y>?tEr@YaptfmhH zKaTbEFGGsLUhpG!NO{Xr7-1>(7d%Ocj3H~~M%)2q;$MEog zPn=k~6N>R;Jzvpx#N_1*VnW}(h#NI3ZqS%fwaM3{CaF%E&^rh~|AyXpvVPl!b>D5= zx&fpp81kzTf;*#WF=n<(C&r1zs-X)~p9p;Wb;Y|&icktV!TfDBUI$j!PCENS9UI0( z6zuIo=E8=O1KlH&`uGh*1dX45e(gDZ$VzheXA;)Fe@Az(o<3WCIy2vIN^aL=W2R6a zSo%gV2S_jyP{=Gh;BeNKDIkD_ksq-C&VIGYyE=-8(#qgI!Rf=}Cr%7V2>10FBG7lj zm zZ}eT}zD9oGzMPm3fnKEK@GyFb` zZr%gz8n)zmKDyh~DQaC}>b8LlRg6|0=)N>yem}e$%ZwKrdp+Z&zZ%L@QMMj%$HMJ8 za`(4klbh2Zwb@vusm^z{x*1%@nN@14wY@N;{pQIo7WNOR@8b5ljW%}rS z^wU}&h~kBw4a~nXTYB*mc&#rBxozI9tVP2Hrl*|D9d{xnBWBp5teZ1ChPE6U(7tcG z`2O7@BYb?r!c7Ba_e)q{qBflx63T=Fp&?UE)ioEy_nRGXsbPDE&c2P^zIN?Oe(mDq z?BU_;)CD8y2Lv0)Bgvi+Wfn`PboQ?tR@45w=Z0b^55B9#gk)VZa;mk?j~%unKJ#i` z`+hFNLfs-9m8wi3*eUDMil3;IQ#7qbi>2e_!A##7cc*!;)}8}ecen36R6!_oZUkI+ z8J`h@+bHd<%q2=qE_?U_G4`j61uw1?GuRLsJ3EjPOm}c2xYtN&q)!Q>JNVmj85?~{ zAYCn(%PClra;;u;hu|&Ovel;yq^o%__L6))hBQbl%{6x=Ie$PJ;zhyhX1M+VEfp&}d zEpj-;Qb=2Gse0%@7&z^vyodG(?;#F+@`TQL{1^aM@T0gD>cTHK6rImJkVI}pb`Ie? zC%AQrcc;>%(PHgO#AjNEoAl$P9Qx@_reeM+gp^>u2{2DwOply`^WKOVxj2Yl^H4=n*o&@;A_cHhK9SYegG=8Sd#c?9 zmJY)QlxmG{mDpIs(-!L?>JP4@zO53NB0ms@IT318247Ig5Nt)(jwp6guo1$cX}n8c zUxRde(M@jOPFyV4?}5h7>+_A}dafT>J-5;~Mn`n%+&#ITyIjvfx!r)b(T7U#a$roS zzFqiemHS=3T?g@J9p1p}Njbdj8NTSZgNPf7LaBIJx?eq8-5ruR_6*&H`N5Qp(Pc4| zPW!{&-VQ7n?&Es(4^k#xs63ws-B+pxpZ<3K>4d~H-_HLzk=T0o>*wVj712#|Ea~)| z1wSVaK0R;V=>%fu-8a(9eL#5EH8>_jO)kkz9(!?I*2OILHSXfm`O+J^d8^19BfJm}v5JvQ5@{ki##_o@QF~C2tZ@(bFepQX1+Mg9ao0fWJ za#mr&%cuZd@sF+kug6uhzlxcVu*0F?BPcqR-m9iF0At?D+hdq<5)fH8&xUy|C;#>J zdb?D}1=5v6=qh@b>_wcFLfS{iQi)ITo)OTiLqvzJ2WGDs^XruJpDoDO)%$nr8s4c3 zd(Sv^_IG9e$&)mi@2lM;;1xhCt1)pG{)^kVSLyp|>FVmR0y+ya!H8ZTe5*vY%8x{Y z?0A*Ftd>_vKBv#`gnS1%AJQVZKK3FkZBLNlkim60Vip1ajozU2fI%4#a=z|!}TGZ;WBTU_A;pk6Pf+uTC$49 zvi}PB8xc?PFZ2NM(!d?27s>RidVuiUAQtlG>iPQic+zYL8TU#oB)6#@n)_3{EWB3_ z*1s7T^bSG&Y|8ykibAupLc>On=4$AF5igGp3dzh22^wwqX0X)Th4;qZ|5I4%?FJZz zZ=Ce^#X@BdbvC9|;o+dd3WIeQfA{oh_&r>Ru~;M)zJG6m72{)q!asw_QT3IQ>F4pf z&7$PAZPkjWPtnqTagwk|U0YVxv5}SHoNN#trL8kR6cPaX;o&3t5mx8@h9*U-Ywx{# zcdz%bWGvBRsFsfy@CY)D1D7cFh$p%6>Jb=tS((^ivq+W?m^Ljcdg@g1WKMYBoSeSl z>{;}rxSmfla>eGw<9a#058X{vCp(wbT)6rJmiO6&^0G@4K*H zzs2&ug?$T1c&ASNNo1!^5rF($oyi9nUxGn4gbsjQcK$%xpughk0q5=sniUc*DN7e4U+pqjTj~g0%~-u&@y1d{3VyLl7bFI31$S z#!8?*q|gKdyhB{C+-fumzv;RMqg$n6IPd^zr}IxFKSpxlpueRwZ5;2ep%R@&sG- z4dQ$Uvg3ql!bAwA|0of%=kQ!?qB_iU%;1H)4tI9%>|O(18HE522Ndb@vnbvMVbjIb zP*^}5-3u$ZHhH&oP20hJN$03h&?{?W<5;VOUAlB^dQRYm84l?!;(gjUnyKzsIslj_ zo-Tb#nOcKvTkM%dX55xi$e+}_v{XtHPnKR%&lXf-TuCIz52xuSp48^bR02Gn2h3C0 zPl>{m%nhWS?Z~9|I)WinA)+Z17fOp|DkN)>X~z>Qx|xntyVDSYhhj}1@g!Yd293RM z!oh#Z6#6rnd-dow0{&g5XL@K`RA152Up4?8t=|BgCSJTuhyEM+Dd`ZFl@%tFAN?L)+^_xlRf``s`4NOihCkl%o zxt2ZC&}2T@K{Bj0a0^-e(IZlwUXL7-+>eM(d!Ikw+bwyhw}Omg^n_JX1lCb#HBf77LM8`@m-i@Jqs-B{P>`x#TB?Z<3+XX+Hs&X( zcr@mRXmZ4z^sL%bCU}t5$SYmzK>L#Jw|*misGqo#jH!L%gasXs>WjofbgMc5)rS;A zid$M*QXm#fIqHo_NzqV6Tcl(FU_&Esq@-%LgESB+UKv~Ji~$0f@WLaN%E66yI%DZF z$p2!)=5?#9T@z33-{dpAYsRD<*{JUz9g~t2>8PKn*}+gOSs>*|N1$cQ*1nBSkC&}| zNPrwlibyAO|H<@&v1eH1km|wJlQI_;zG>&`)JloI4Ui7dQ>D3oBj!@1Ow1R7m@kwL zd?DtVnbMy$v2-@5h{9WE17w&+Phw9--Cg=Seaq%CIVmcA)WIQ73%dc>8NzC zbof7MpjHDKIAFlksnXHx@bGN*A3a$w8A%?cotZ-dZ&?;9J0y@iT%y`vY~A&EROt5Q zE`z(TN>5jC#Yd&1G(rZ%j1z&B^zl zl1fX9Ur2wJwkZ7uJ_EilepUJn25YEvn@&V~tTkCr9)}qQSysT1PoI*AN)I#XHh<)N z%Z@EWyv4)k2+p3Cfne7PpvjO1Z*z=UvtglX)1m7G%{zR;Sd2*onYgcvQnSHeQ>vHh z;l5BnVt8jWcnV*qJ!PgW?U5sHFBvd6F*YV45zgIml;h!|F-tRv z3w`>O%${&BukY;p6DHiB-FNoAiJzyY_Dz{I3A#K}ael2ReN=sg?9yyMV~rF&gxm6s zZUvC7t~LQ{rc0l$#3Dd>bV4;8_hymk{`SJ(AB`^|j4Fr<^7Bd`sjD-exWt{ogK7U} zzBvx0$4m`b`4XxKxPg0E>a@<;1GrulTdV~~{Y@M!$Y+Sy_#GRkl%k{?mW9!IxpB)aeN`%#5H#M}VFlIp$wO+D!|^Q^g&Kk1|I_ z@~QR{L_rYh;<2USh=zL@wJ9jO8o0rNc9C`sRQ2YIC6O=!$BE=Ds{ zIbT{0J%^MhTnu8*ML$KXDY<-&&HpHGbO7Z)wlw-xSNH!(|~+EI3d2Op%QFzg}x=a@;j#GkQR4 z@|u4uf$DR$QGqEW;hzVFl{rYZ;8m~rza(Q$`86%%$W0U_-89#@53D#!xH_fcCDwK!!n%{9`EfBRZ%B3JN4g+zS?EO4wN8(uYh@m%y}MNfAc5@${p9H5Z+WwsHsaZyU^m(?^YbZE-noX& zVXUGjJ~2!DSpvVFj!vhmkHjOx7#6^qwv1}VIe75AF$Yu9i~6Y@Fz`*Sra{AO{|zNt$V^9kvyL88@TH~l8#5_lpIc` z+ks5%nrM)1{uy_eE5hPrt5RVKg8zmM{-7!dzPv#61Rrh$Py-b74aCIX&kn`I}lXO=m7slYg$G^Rro_| zs0GB(1Slv&gE52*RehsK+4&`ffkn!$GE^gwvH>Z3zocL%u#|meDKauhDg2UxG7Jvm z1y~176l0C7#O>HW3J)WJKt-Qi6!5I9xzG0_b!i8_ls?w5MRiOuR`sXIOwDoC8Du2l zLHIEo4A-R(HGh%1%9>;GVT7`ult!ek<`eExD@${Y|G<=SxJ%iPmBzg_Q11MMMir|d z9DkwCWjVMSu2R}79n`sU&hk=)QKXSv2jgcH`KgQgXep2bdKgY*KGSF7TyiqCBR}u=$du;LDm|_A9nn4nT$3 zR{W=i$VTySvFDm9T2l_Ew@dc^pSQV5JW}kDUqzezUWCOQ{vX;Tibb@jnw1fgsDf^A z)vPo>YYLSB<(`&3_jCZ{eV{GvbskJkLFmoA;M?5(S*J@E;7=l$1#PD;X7_MxiH3P0M8w zJxr~eqoH(@t~0ufO@?$<3iRuJX)WV(>X*1mHpGfy4h&kuhlh)zBa7F7 ztFbK7V$W+ZYsD?n*}-5m0_#AYy(=?ILU!k5JYTuLE%3MU-njFl2^n)?9G=1OeLl-I zrUP*u;M#FO2ht(h`2pFIPj=?hA}*S`Q-Azka{PgIAWPHE<)TyMB(Bq#3t8jNj~R0w zP{#b#A=8SbM3r*xf`8N=esRm z-noOlgKHx}7)!bluTiYpq)DvkD0+w<7%QDag%vB>cXDXjiA6N&)YPF<`xPr(aU^^} zty09QMxx5bAOz3@6-Dt07zQ}~!aGbZPB8q#w#Tgv|CB{ib4PpEvi>tx_v z7WU{aJgE`IEr>dLtMg%srU+v9ZX2^($_`3bDIU}yUg@eisa?i1Z)ac1;liXZ>A;HH zkg^IK@#VI`w7374np#$!`wqnImh?>DkTFDR%#AUn4nVhLrSCJB!;Y1;07R?ct2M@1*_;5%F7pH5#jK2`bP7T8D!m-yX>h zWLb;MS!S{IzcTX=JQkL7G9mN%I^zRo;0pKZOaLXjo^Ud7<`(TBj563eTG>Dr#w3oq z1Pj9-w%|&v*f4UR#$U_MzLtCPWUl-@@oElHW?vmY;c9mF)d|Os>%PZd&88(eS0}oJ zJOAVy?&K8ibkaH81z%3#LgV8ueVv^8x;TeBo^Y0bJMI`R^(RVN(lX~-?u4tkL;$D> zS8{T$Fo5zmz*24Q)d}OT=Ag_^KjmJ_A?A(|PCq$CI6Fl+3OkPjoMX6i`A^Mk6mUiv zBy!6L+(;0S|5bHBT}x(h<%=76`Gk+)Bc4dJ_+Ov$5!ww;ImjdtBa)S490pt6m_ptC zix`VrHO___qHNDyVpmp=SIjECr*>3T2mGe8GahzBAxe3w{(I}^X1p`+yh__b+k$U7 zaAiO5lxbcAlbU(?_`wkRsqJeRLQjDqv`wCkTfeq7dk5Eb2@MeZwP$$e6{vCL=l_XG zG{H_bc9%QK-nKBm_{XN1h!gn3T2D`))vmt;SpHD z-W3#_ld={Q%d*H3tvIsd6<_yH?MS}HyQ>I1_SNcD^a-7P^$ML$pR6WA=X2q`Pimk?NCjAP@`+O)V>CorAImL(I*+Ykn(VsYb8UvO8 zgaeOxbpMyuW28P@0b3RS(y;WN+rYuK$={ogk^3zNGc{|>LP+Tc0P#o^hzZG>XB}R( z8u6jhujUmW95VP&@tiz#MBgASYMx8;QROat@ojF?l%?&7@e|G z+%ks8U{umuHbeBlTt2WLg8%%_Z07H(8qgm}FYP=&@fMq4E&RjNoyw+~8~hFSn*!3@ zzX4(r3}=f=_DFi~gu;aEnduCe~tEdkP@#u16eC zjdFVxQ0C+Xsl&I#MD#2^EH|k@lV9rMnyv3{`6jvdtWCT#qLT1d-)wD=!OLn80(rc^ zgV-=^S#`066ruEGEor(c4>sa<|0a4D|A;rNUi1gFsUQ)?^F?e8T}7}4`g+P!Y=lcX zz(IMu@&Sops933mJFYd=P*5n)mReB7d zYJCBPzT4^hz+myYtpDYKxp4&_Wk5<9&`b6^xUELoteQ=$O%hZp5l-;gBTSsO$mCHq zcciFTih|P))@D^ptu_hVGv1w8TnSxZ30-6fxPdW+P(?u4F@^s3CN_-(Lm7d8MUTRt zY(u*G*fA1A?sFcnH0^@V`y}SrF}j*IMD9^yN?wpa%pSEd>sWlHm#K2o&Yhd8 zU1Fc_>sR{#cP|$2tC?9_Ym3T~+rTqXeQWb-@8!(u=GNr~*FnMYQ!$iZ2H7y|4hjze z%J7xu^x(%;krOO*tRiQC(5Z@?>4I++IkWjuRphMUbF0YtN&Kqv9AYF)s3OON|GA2s z+QPgla%^Q6&XtTCY0fXLqK-QsRz*&x(7lSBaeQbMIoX1F6*)5zD!bB|gT>vaDstBI zYpTfksj3x1ekO0LsB=-?pp}izRen)xtQ49Ruc;!(TBu?jC~FI#OO-*iiR5=E91(5Gbq16-cnq6s5 zeSS|BISmB7lT=!#q0pg&5x6?yNWu!s#?9uD1F>n1KBU5NXq5>kt(3A5NcMD zvzmWeMb4TkbJkXw^IerW>#E8T4{-67V<7&>#Z{4Wgqu-C&I!)Fik$P%{2E%>%!wBu za8ECnV>n2^P=EPAEqBB+>JMoq>Qu}zQ2&ZK!906^sjQBH`d6$oU5Kutj)D4Dth0vK zjZVcJ1NER+)= zww{Jm%rQ{^ia7@AUopo({VV1esDH&A1NE<%W1#*Oa}3nKVvd3OSI8-&{uOf!)W2em zf%;d>G3ROJW39B{w^os3p#Bx1Ss@})rE5oNUDbLkqy814eI=->fM%fn73&zNf5n`7 zRjm-Ef%;dhW1#*Oa}3nKVvd3OSIjX`|B5*V>R&O(K>aJ`7^r{690T>Qm}8*+6>|*K zzhaJo`d7>`Q2&ZK2I^lSr;Pen%rQ{^ia7@AUopo({VV1$>YrE{6)U6uavj{u3UJvw zft$360-88XfPf!EFe>)$CmY<_6e#_)v84Aq5>r$}SHGjXN$-sOp#9tFZivB_)0CC; z!Lg(C<^~cOGCO$8_c%KiNrTnb)OAIBp%GifYF_A88j2TuJOrzT8xKZ01k5mlNMwPn zSUNQ~5}|XaPgnEeHiIsn34BZn_ROwKp(3w}LgJEW7D)GKlZZJ~1ZW1J(i6XWf{@ z*p#`qWn)9k*dr+OASfP?gtv5MQ4tyVmh{jjD1B*fx^LHxJ}WXe5{IIrq+vdpMq-QO zxUh|5f@g;SwSv+|#>?QRl-GrY^Z-CRWh)+{XXZHtih+=dDoqec6|u1q6R`#)qZf#2TG&AtDv|LhT=)?}kY{zLloJ6P>UzI{v9k?N~R?Wf;;`V0MB z$7FuD+J|O`Hk(CnJbO-W&uAK$73{M7!t>uJ{tqfnU}Ozy+NJ> znZH$YqF3n(jK?bIH68=nby#pd4~z#??e(#oZN7-g+qF}||B6AsMfT(<$AsmaOclaL zdg^C-de>pn_bG%iMTqOXdeN|NySvXErlF@u2TkUZo*~QPckUvv%(+1G@4TYRPLeGC zO77F;`-m`eZmHt?gtSg+fxSj}4ZYuGT>pWiohKtqX2}d_NuDG;u>kscQl{!CQ_IA| z09#rkxK^bU>Azq)r>Q;*BLBOl;?g0CIBAW_9!m$u?noP1`&B3Lmlamo3bM44qqE8S zoLn6FK}_49I^{@w&Tn(?ave)b#d^}98^mi*?sIyy=nWnJXhFu#*s0GKYrjAJ5h3R zVk-f!nO~HMusvN=O;wNRgujaD(dW5)NZ0GqAhBLaDcAAtoVz*kMUztxq>2lEqg#(n zd`-NM-6zpk&1-RKq&;0|Dm|npC%)ad;Q7?pof*0f zwN`t!sSssT_V=t`0akkV0$*I}!gsovIHS#a`sd|)bmQ^E#P7y6(t4W(9aL-1)VTTn zK`Vw2$n5qNJ;^tf_Bo{oY$DB0+&fO1uFv?RU~pv6yr>6J^FvI(s+mvfVCg+6eWE%b zj>m>}W=ju`In1R26lbx}tS$aaZ06BjudlZbX<5gyZofgqsLclY8n|sZc8K`hyhd7W z2X2;mQ{xu+1+E+(mD!!)cIWsrP4#N@1+NNDrqlloQOqW`wtACHr+#9yNsMIMS)K`& zg^tQgdb%W2B}}3${1ZBAcXOFEk{hett-Qp%{c74MFXKYo)21S(lL2<0A zIo1cSNGN>-7y0$@s8UxBC+uLsq{$X|{+35Yh2Pj1;Z>Yx%GS)gzXjp(*ed(8bm5`a z9OYOfeERx*Nv#+j+Lj5ab?eu#Y!FiS!D9=72wjC)i+>$q#PMPmk~2soDw7d|YBa81 zyPh90cI0aEYuZb@wO57p_1ap6^yGQssN{DXaOl@gn=Fk9TAkK1-i1#l?MoIo`&;|; zLvUGY}E^tT8xCm4o22(cyo5OP3$t4_BDnBNBd;_6}MU zH+4<7pfw1L$YPAHyGYVLkTai2`uTi%`r(-6-P5kjqmFZ~jnH1bhOgcpK)dOrHdX}Vbin4H$_DzG>c3! z(JiNHzp&*5QMbIDUkBST>V)APk7ag2zs%%CW`SW8E@+FE z(g>Jy6p%i`1h%?#plir0l{D9ZR$JklARduIYy-m2UcPY7*)n1S)qSxIO_P483G=^b zF2zh#XcT-q?Rin5UCT#d4Q|A`F9vZioV!kPZ8O$9G5j~U-fqVX<;<`qO0i$`n`Esp&mt@1LHqAbm*r zK1s*e-r?L>FEzDJkFaCN)MBr8LSooKn3yEkFwJ%#(_Y7Gfo`2m$RF zwmOmqf74E|&Ss~uvkP!n%0z}m47W3A@LMs_HCz#@8o2&OFYmocx4s%n4#eCnNdEpC zgmsB@+CE^$p$sS5ZQN@TcKZj?{1&%^Mo}NGp>SC1(S1VTBrQpJI77%gLZ2^jY0lT< zytDyI-t3#!0jr)YUc@bULJ~C-0w)xHC{p{LB*&SmAY&Qo<1}cjdz8^xj{}V_zpz8r z-htVeHQ@@#u5YJKn?ttFo;qzF*>#8>I=i$aB$O^YPY>iHIDbKwV= z4jR*sg6#)%xtM;Y5%1rV4REHeB5Oa;-Z{U`nR7oERvL4D%i-L#_xXlmzV;s9sH73y zMVo*81csy!er|mJOq6Q;8iAqZo%!qqCT`MtJ!T1!C<~wmNG| zOG{h%TxbA=L-4Ck?bxHf9U^TrdV<-M-GJ&@5k_+e9yZO9XGkg=Ohg4`IeDM-boJxSaKdVeol6T0=n-yxe1&?9H}(ueCw9M;YP zqc(>R?_8%T(4pAouCkA&KwdfcE}zC$5u+(MtKu0q&ffFL>QHsmdT)>CbkGL1>c3-pYnm5J<`K1jWo)- zF=O7tiJ+y+`3XXS>Q{_-8S((n$O1bz(2h=ngwLj%V22(qJ)%nT&98m?5`vv}g0x$7 zW5meY%F7%n*&zgIcX#jT+>iSSXZ=`6#1_w?Lo8T-$m;yXd z*&rmlxtWtGi=2hggu6rb11=%aWYj$t2DmFZ{^B`xqd%T1899x9I=13^MvCCRwdCLg zq3imRZ z63pxx)p|~&=?hHt2O9Gd>nIs`M9H^98+JB{iHdhJPyAeZq?(|^&qL>s9HBZ`KnL9= z$^36zD57`BhrO_x8C5gfZnm`b>3Iupjsl7h(uyDD6IdtE zhe~7V29{3E%crY(o~f2|>{g++l`p1sFx!lp$~+I-o)~1dYIRp^evI~eULem5cWj9# zI}Nw&+U%B121(Tn_iSkJmff^*o|)Wc)@{U{jTwJjy-a2mT=Bqnb8QAFt1FK5~Qy$$|$eWCSW?0T3d#Eq3eo4ai4?jI^mXyemKZeZj=`(K_-9dXO zv!oW}Ja=0)g4CwZX3eB;Pi}a+xOE>A=`%hwVxmv+0NOw~K(mM44bMQ$rk$~cU@urg z2?Gm@>qa&MC7>bNgHV+VVPOl65B$e4aOYwCe?t1<9(_%gINp0d%fhGvja_ zCS%A+>=b-qG^vVe@Pa?ci z)R~-FmD6(U2+^4>k&<78)|%H!vyxLclxEr*CGQ|+Q7QIA3+0l$237D6*BIw|3k4p; zJb;SKsM#>r&Huy{7tMcSstVFznEjNN)ED^9;C6k%*Dqmlpzy5ZXnAzq-59#L)L-zS zn@K2N$m9%AIscy^FDUwBzAgg!GSwUpcAP-R1^75T1vPWzu7cY*Cw<$W7;%?r zV96Hl16`u(`x(scXN4+m#b*T{M{kg(bEOvC73emsh5n3TRG4m#rA+VjW1_6kh_a`4 zT^#j?CN^v93Na#QrFnmA3*c`NdjSop6`Lw=7E5uSG)mmb#1uM-tT=)|mc`Ps4|mG6 z4Oc4N;04Rmz%;iJmg^m4L$3QluFd_&#T&#+mTR1Fq@ z(Bs7g6Sn8zJGJg-prP?hDj-QA;Yn~?9v(Vad_$ta%mjChMj)!_7zI~yOI%2QHtwbe z!6vU9h>|}@ZE}*1qRY6jSCX$)*-!Sc!Wk@2EA)&m1+KU9#UN;%4nR5AyW%UWWr0ZlR!0muMIe-f>C(@Y- zF(xgJ)REI&0sm`xGL3YTN!X-urJx_;IX(T5udC)Nt8ymsJO1|Qa{7H4yyAL1e zUz{Lmnd=5>LJLacA^vQDBS9Z3upM}6%(va&|FqY1TM^m4cfVD^^9RiMfjnIm+N($Z z{LuOR2h8}TP( z&}+nwPL+m{X6GZWRY05PStO5kJkNjo8}Ob~a+6HI+5Z}E#YK}t3~A~m<>P2gExjim z5NpXEIT^bmOHCnaKyXJJUY7gnM9ECDA2zr1in9vkRN&4n9Z=ch+811Xo@`CTmN&e|SPn>jN zWXQCYKD+?$u(3n8#bN0J8TCU%Mz@Fe2`owVbmf%Nnb?wrr4PhyKoTKOAuWO3x_oo6 zx91$3oLT5)-1Q6!&?-Goi0g&yw8EBW`xqRdxNRz>g;S1C@UK-T`|;i%2$@R5TaQT{ zlH*q0sLS}|_;D_9YcQ`Zl!1*JHSgQ{@D09Bs|R$=>GVsa&W6svk>I0;>G$+itBhkK zVzy_DN-s@>`~2E)dt!+F@Hr{3EYa9Zlx0T9(GLK z_+S1OjI?+7CP$_7vpE;q{tR{H+I=gX7Mg4C@{Ny3=Vv0-^=I0NYc~g}Ez6fZOFPJA z$&HiLi*uMIUE9l7*S`OevzsN|6ne>tdD4}=ys7rhkDNoEbW{4Sl9E_lejp0&n1Kee ztO|EnX47JB&3wCywzv?m;dhXka61(fp1_v|Q;4-6e z@W=#~6Zai+xGFAF%s0d-lh+tT49?CLU!E1%Xb5$W603z9>B&1E=$`K{laU|SKgbyM zS7G1F*`dAGdIlwgh79{I$uZ_#i@r1cx=tMwKdtLB;r&Ybu;?JYy5lNtBprfC0#qey z#BU!qXm5H0dt%(srd{)IJhFbJALjN8r`x+s8Z>C0zyG{Ji{=6K{o+hvx%x8fkHI~9 z*vQ^q;PBoGmqLV4;Q1-UlD>WXh<+f%l*Er7J&11KMeIJSuFTuFZ(he3SQf!tN`^DH zN;t4`l;OO4QU+&a0zIuEb~{wp@(K&{0LMiSXO9RtMmvB{eTI(}lgaBHl{%F9hmp@{ z6=2pP^zG9p3^{X>IC6C2AgcW;K9Z2s(CTkL5i-#qcor1Q>l_l6n8!D2(5l|T;RAbk z8^Li2e46tYR9e}N!-f$oEIl|}W`1j6Vs(LDZ#-;U$@U$Z%_(;Ddh2EHNbI|}WWc)> zqRKWr#Kk2f+_qoAw_%~*7QoTS6zM)qD9x5_xNUHr;c8(cJH~*n<8{(+$k2X-Ugt=) z$B&7zbe}oC+57Y<#_WJNLs(*zi+W91U*-1)Cxmju*jrd*gXrXm){t}SSsi{duFUj3 z9Pqp+W&_8JNU+#3DXv#y|4t6BWGk7F&@#X;uw|1Dsw?yN?VH~*EQCCFie1#Ql~=pg z1DDioQr8=c_n4GMe<;loRO*i!^U@m%Ub9Kcpi4?~^@K-eopDQ+&ro>osqVuQTneu<$;sVD{g_N9kLnpbEF~yt7)EA;Bq~Rhrs>a8b|P622SgB; zpp?3w+`fq*#o@n`yL1N4;*t@de$q2(0jecSvBC|W$s!mdK-nOLmlz9DKU2(#Bmx=WX#E$}EFU_@luc*#fj3-Ycxqwv0p(^vpY3I=fmkM)6cNa2;gs~J~+ z9qFQ&=qIPrn#$irPM?a`bn>=T!c=w;Pm1R1S333ZAm$Yj2AkliI*|EK$U=Jl*K1t* zABeDXNIZ$4M5i}F`FA9pj*4#LG0_stAk*;1grb@au|woWAqTRf^H;9Ir{6s3#fv}b zK~*uUM_gVb8fqqLt`Scv_ZxYmCY}xSHI=qZ@CtJ6BKvw*@r~eP@b=yN^foSuw|=t- z?GxL>`0TY*FO@`3@7O_HrY#bh*tTl4W@K_NziJAOv;ol0M!f+PET?PcHCVeX(XhhDxtn>2I)#^-@?I}+S3U}~KvbvoEL z?K8EGO`Wcoz^y_Aw@?;L!WN#l-AbN6vccQi40H_oKKd+d3zo?vijrL5(IcBjtWe1Y zl8K_EqE3b1I>M+){99oz~%Cb~l zc8Tn8&966%ukfkAB{pxNyR; z0a8lzvGHiqM%u*JAfx5GE)$F3crmaeWH>xv-Yaz(;8LqW*RKPjaMy?d&AF|vPJE4w zMu5C121zHlTX>xSsfuxt`59Ipzu~ZQcCxo8RwpNpy}BTJvO`<*?%#BDG$FyEy^h4q zUEpAOTWQ&(xlzvqK*^?cxPhd%JZ+X%YS(HoKD*m3Ir8i@ zqN19Zvjtf1=VlQV0G^VxVk+j%M!rzknAx=A@HnlDzbj80?ieCGM%y;vt$D-cf(7N( zy-_(*>NI%{a-w~muXr%!1=Dcs!7Ds8%( zq$R#)PTiXie@TRe^&XSR<9q3W8}$y-TL-=(4#P5r*a;2mWu6+9_EUDf<=5M)gb^n| z-K&f1OO1_2fx2fDM`4-sCGXU;OD|M=j#1QkbHqV~7j&J@0a$UHa=%NRz*S{Kqo_~d z$dQ3T>FMNiP-bROP)3IFG!g@I5oJnm|6#-Yd#4z_!9%PRkJ0ap$6;QXfwyeVVK~Oh z!zLi$CBy&e0#&+mRd(EZ%;2@u@J-&!ZV!2!x@&Rjy361j0lWb=mY^&LVnT8JP7LRs zW^!Uk_~4|lkilH+;PBw&A^3}4laJ$c`WsDAb@z&n?%FM~zqi+b{@ys6Ik%-tt??0=D%vqFC`=_4W2Jkxx&=Yu+-GB&{Vqo%gL<@^+_7s!*@`EPtT;J zo;?y1xo1a?n9^}%N)5C&6Maij|6VpV7PdTZ;GN3)Cm$I0+MW>DE`&U)?+^t44GkU4 z4NMLVOC%(rZ)mdmclsHA)e;Ro^X@;u%PR&K7)>Dhv()Hq+2m9)dOQ||CU7{qk`@-6 z!WE{6gr>6Y{015HCOT5r3+BVqH&NG%r!<&s1^l_{%XCq7_PqWdC*J}V%O$b@oc#Xq zU|GQhF5e3LF#wAn=_2DM|7*bFN5e`oe9M3Z#Zl>mav2l?40mmrv=ER5`9F3w7f<^M z1GE?Tt=eF|EmJoW6`xM1J4xTLr+Dt7{2+gwgRfT20`xvs?mZJCmfJ`K{ncjm&Cc%I zcicFV$ND)+=jwNqj0UHfBmPLEjC8wF=l!`{bsDAphCGw2XJ;EdfBIB=d1P?#NcJCe z=(6H6pT#$jd!P%*1?(?#n`vWW#x;g$WGCkEx~E__@qN69H2ksn2n|KF6uc>|^GcbNdS=ShbLs74 z-8~lG%Q{a6KYL2zPUk!$K^ibhz`7frmiEe6@6ur@`ZFFKT7PvoVJ=@XYVvnMz(VHSj9goa@y+?Ev z_@*UpYe}n%FNycY#FO-Kz3!uZABXuw|B&MxxMrfC$Ap2k=!;!1iT|!kbouYjE9l!Z zX}~lYGH(;c?Q+1Gal1I(*nK!v$`|fHBp|z;@n)|O&|Ko>0kt#(?KK>|>?~4{U%=A| zod>rP>bNu?GEzF-F}XQs-MQ(|5#)P%PA!HKLTZ>+qel>)JgRuJvJ^ksy(pT}r zoWJSd6yj}?vS3aW-7WTD2-mExLl|qSP}(MDAYeNijh5IZb~^n97ig&1BAgSk*C}19 zWC2|hPO0N5*!)?FR{T7&Emu|uGLNGYst6deN;3sIa1A()F1?`%7jv?x~+D{i%flR5q9ih+Cx?v zlNV_tg@vB+vqsP59adi9h|Btutj*IH(!rr;Ndw0P`5wW636BMMcC?ZG^MJzNC0YL?6(u)E%Y}k8= zq5?J~Hf&L2L1Wjbu_cy7O^mT7#v~SY@9;fycOjVMee-_bAKx#*y?b}=%-ktw&OGNi zXNdL5*C&bPX8M$VKdB&WNz9wr72(1K9Pu6`8&H=nUncy)uDNFPAQ^;#*~>q_D?#jJ-!a&8B(w2JBumk~zd)Y4vh9U20hY>$Dv%W*p0QBC z0ER)9X&8bKCd}O*Uqv43TX`ZUT;Bb5M$#2}fh4yH)p`4G^oez+Mfb@RuUL17ZXRad zDJ8xkGlJlZ`YmEy!Z!7ouR#@|aO=3IsDiuYf1sWs=>@vw(IdLM+S z-%kB>M8ul0v8$tb--Gm*HET)h19R(kg5J;ryweRWLGZZ|JS%*}G(XR*V2rF~2u=DK z3RU3P477|1v2ep8D^9{jm0yc`mag4u#pU&KGtt?sEjQ9 zgxSf@N@4UNV-nESiIn~Y|FMDzNlO&u-OuT9$JGbLJvD|0BuA7%tSi|5l_2~sZ7S| z1F>%jktLI1Az+K7{Q0ciYu+y-WH~XeJx|Qn(a|I$FD{P||9OcR>76#wFTY*~uj$iU zr!2>b1g+xMOx6T~wX)H7u(f$c&8*^^C6n(g2u~g1@6yk%wad*5Gp`o77Ed4^+0)$u z`K`>*h^3$qm;tA_E-rHoVVuO3(gk&3|1qVa;ad7c*x81K|y=|=Y9fCD3#0eL>rnyt|}#6fl! z6=wG09uOPQrm>X=wt@A80dDRvwP4`r!k`0L$FA6nGi}LnNB4oM9s8(YU&0d_&-IL2 z8$(DdGm}ZAYh*`<4ulw+b#6t7qwPr2I@{C?mm^omW4Sy=^AYA#OWE)bqk2t@G4&YG zgK)K85uR;3*>~@3l^k>Itz)ofo0y5c@D^C{_+YGrJoD*;5pxa<+h-v>tYwTY0@&mZg?F+UR%>XV-ehK{na>@SN0RmuTvuX}GqF6gE06UlN7GXl;*jhK;E z+xps=p*R&-OTN>=@9wagSzEJ8Nn0+Ti{{=yu>PKYb%Z|JBqj5KL=;W5Cd6vuXgX5v zNrs-MpWZx;R===_C=VtrD>)f+dd$hG+-bp+JB=d01{ZCP-a&xJ0LDVaJqe4+$7zYo z*raPi6De4j-LKzY+;lHf{Wc?LNUUAkfdfbSNtL7@J*jj!bZz?Ut+eiE`c&Pz(d$5@(>d1 z_P+~7Gn_^%uS7o@GCmlaNRUI~im!ELkSes_P1!HjOrs-j0m1q&NjD1%HZ<*F8t855 zO=9*=*>!=?FG)nq&@uMPPU-~N(FI!u$Q3gBMj;Opa+qj6`<)QLMV1y1EC%-Tg-{E& zXRyS8wLR2b^r?+jguA=ZHpKOh`}QLpJE}VLO7SJZH0C8$v>+X1GK=sa96;zH)Jjfh z9}dNq3suuHNuZAE-~R);c>iS2j;)el5CfAGOGAX3Jsx4BrA%*ppj=LR=(Px*vwNIi zM;C@I+#SW;BQEM+#txFo>CI-%P!CXG~lx#=-u8;FCP$^e(j?lClaX-Q66QxJ%~JROO?pYaLlY`nf|;@irj83}uqKWo zf6iryR&l$-dGSj`>9mpN5Y>d?>4i>CQ^7xoA}+M%JPE($_&tfg zw3PmIapcUv$(IToQ)(wMJ3a>G48AS-Ua4e*60`>`(CX$!zVDmtn{VgXTB)27u_(FA zB@p0N9W} z2div`W+OL|)`AV;PP)>5>kjwi0$SOstXs8Hl8!^2a<^nz)9I@_L4SD;JHEb$0Dp$h*uwsKaZB|P^E6Pv%DQ#>`j=KY0h}Y zh{i3mFlM_TBWsIp*v?AG^xMu^2dHK@nYb*d9eE089}=>IuBFejp5NRSPx_8qyQLq2 z&lQoZ<~x%LWg%WstG86px5`3c3pWb=7{hm_X39dDjWV?EEE~kiPz_?(KydfwI}3jJ z1$We=tNU!i~f2JueCJ2q&bh)J!nONUI2$2OR0U5%Ip*-fM7;D9LitlnL^^l?Z? z=7;QfKFOdtJ<0R&qcOVoAQTM3Bbut@>VC4PjZ<%z5|T-CNeF2#bpl*5Jnx%To|$#8YIBGr|KyM9o_z+VX~SQU7b)l_FA|=pCuhIx5=iCCg|!x5Qyd)Yw(wp&K&U zKD1h%AQdiuOsL3sj|wPQYhi>kw2*?I?k4`qld0e@Xm-n2{X1 zlf(g8+(#DDoLeGjI-jqmnR*dOtcCiK?|;IRX`;qapCm^_OdupRazqk0HYGA58C1vc z$P~r0r%y>2zqrxI_tFvCO-$5i~}p0Wd9!kWjaRV;FSdwIdepK7I!#1JS-FuM8aQ%H6V9WA?99{}+-q5k~409eb<(spzOh%0Oo zp@rxQjdMLaNlYsFw*Il+CJYT3^hUPHV#|rKO3NI>TE_N+;!v^rhkIb2Z=o}lvu05B z$+bUDA?2!g@4_YhG+Faz&<|&;e#j;jxHD;~H;LoR-%GgtvTOA4v3%0}d-Nb-#Y%_^00Vy+xn$ z5_RQDpj#YiS4C4aPw6h?yhpZ^8^X4+@<~wHiDaWt$!)2h$|~iL<(Atrl};i(r&9~^ zEmEg}d>6*HgHllM8oo1Chka+NPKFjHtyLVynrJ1qHSd<#o7qZ!P-ILAF=~*}x_4#?#tF7H>wD~B%+yYytVp%6j9SGqZHRK@s}!dmo3HEP`q{c9nvGFpvGJ6s{y z#0$2Y!@9?oKTEEftjPq&Vzqic#uA>(JS5xhIk`dMYy&?#*ro~FD2he|=7z^MHD)mF9wps(5>iQ@ z)~tFtmw1tsF(W4}($uCc&WjwEN_^)2vStr`RL3KHt+T z>86?(Z?AyE6Hq^?rhdMC=j3E4rT2?f0$cz+b~VD>%QP8?h;vIJKA|ES03o zvFD`s22w%K{&a{w*v9GiAMG;fi_9KL7iVppeUY?VdXZLs*W(`DdSLTiqPlX-0C|)HDTM(ItZnB{?P_~GtR9{V0eLc2iVFBDkfqx!)+6z9fHiFZhxn&V^tf&$_|_i^Y&V_<4Tda zg7w~#HLh(3_1E?uDD~V}2D?knFi}~TfkWwL>kg$mB5pyh3lA0JuqYX8!)t^x?=S`x z8<_xm7C|Ep9=@z&p;Ky2UoAP-oY!xXLiKUt_T9wmbhfaIUiqnnZ0n!9Iy`)JuCG_t zC!@mfd7YGVFS`%}GNK|1)Pl=hz_Qz35qgMp`=iVB>M^#qW2&cjDcU~Xp?l)?x^Vq2 ze>{}nG*nc&tAc4TkdYQJI=)xje{ZR{kLDGyu8vpSmsu-|Z!jISnD~oJz*MZNxX;@t zizQ#;y=<_zJWq_oJ?14k6Io5isJRFsCIw{U&N9YgXAX9lZn8oE>n5wQyOEVSn8Ze+ zP-D|uEAbdti_^RK_A@e)%pW$!eo{vKM4~EsckC#AwUXl|$)}L{SzsQnpf8UeeP2l2 zC&mXQx!aFn76sCEHGTgk=jNLe2S71-Om`irA)^U@i_EQp{reWJqZKtrNXTOiy?fxq zgv$$a-hiRPOtG_JijC0?9n=_O+#K%Fzg*_3g$QYkV9R~|Ot(~LDicL>N*P;{H50*K zx!u5Du~FHW3%8%;g}`#AG@x%|SA37m%Xm9!m7cpU^M>fU!8Kg$u6@GxJzOO3u!jrV zEo|dP?h}}^-YU7R4AElH_OqI^wx7k}0}@~!4z_~FzR0d(qL2jzu$hOT^aFYw_0JE) zo7~N>jm+?+1bLui0tf$(5x)^eBFg`ME4U~Y%Oih9gx4n&bJ)~P*ZLg1Ie|R zoM{`LRJ0u$*s_5sMsNE}@Fo2x_>5gZ$RgUjDQ}E#={>>MC(V2Qm~jixAP;aP=p2aB zHqcnSPy!3_U;`HjaJ}Uwyb)T~OdFj7=9I?mJwvWZ6HHqR+Q}*1ttuX0LF@O9CjLtM z3A-n*zBaWtl`a1DVnkand%_4p&xr3fEEV)o*6cp+vkG!&dGwhrWIOe-HMOY5K598> zKG-ejbNcG@jJ6$z<(6}~30KSQRkm$9z9AV`j?ja5?atBDpOInXw#3_|9>_@9pJf-f zB>~jE%VecAMmC!~7S@G0SV}qQRZH?}+Wx`6uFK zQu?A@=ad84Xp3chYiWw!Ra_a0ASetHQjx;I1_Il|u@ev>3B{A4h}U^=Q6JBlb|7?N z_|*L&3nFk@tp`r6Rqi6@^nsALtzc+La8*A3sSI>=8At+MTnA$0rpe!uQeaUGdeQPD zOt5@o^(Lix+qUI7_Uq>;f4gF0(fX=>PWF8<1=7gRq*P|aE0psk5;eT?Bq7KmU7JOy zo3=`BVg*ASe0&^`i~Mb6Uwfy1RqKl;u0ReU$RSZ$Kw z_-}G&p?WR5!@`;voEIZoK#W5lI)f8J#m{C#@u`rUX_+93!Qq&N{ls)vwf7-K*`keQ zK#s^5&^+3T-;tk!`Q!3LTo%~xy1-Cj4e4>nBMTtK%2SXtEHDf5`KzZFp3|>rlJ2T5 z9qu<>c3Aye?EPE)QEyg%?fdDkZ~Pti+56!>-si8LV|uY-y)7E*sa(`pKH5bLAcN=m z?hVhk2p98Z?SbD}d$9J>f79^19EaXEyr=GYPLfjpSo*cn8_Hj6-BKY(=wG&tSDA{- zgf-`a;1xNvi?qwg&RI(bO2fvVU(#g&8O8tju2!Ecmnr>c$6J3vzuL*x9uYKwy|EP^gow~yn-Q^9l`{}pP+5LW#Ca8B~CgciLikEpyt9d z&2!rN3aR2Yq^q3Xl;bo}-`QdG7f!QHq!JD0=8-7Qqs`K%u zi1inF^nLWA;UiZ?sdKhObsO5J{h}Lr=y+Y}K!i7o9VLEeTRiriZSkTo!Xz7^nO7i= ziVedNnR5)74WiD1RU6K3jOM`97L}W*YcobD{MJ4eM^e+*Bpj|+JLriAh)=RkwqNrT zaW9CE$oB0-NYvKs+~YnM9k#sW-jXYAEe8#4XVcovCChX6ilDagmuKmrGj8|kmJ0{T zzuZ9a5hJ z!P5a1x6q;-7EH0@d^_apRXqV?sk?gvWngQ=|2V53dg$F(Op=$(%i5(_JFk zbjNjMlLsh#v)g~;XDPUCjGu+yp=K#dw7=J3Qh>jO%D_MAczrSbT-gl+4)Bo$p`X{C zI4bv1c6%45+ySk$d%Y(;&d+Q7`M4(RC+VmBy!U$*LojYmQ9H$ENi8OsqyX9q`|lJP zCiBLz4`#JMTt?u)Von_@xC_VYmmm`cQXvsBadA_Ja;bFeCBdDG61I}Xr=SB%3P6xx z3>wU5A9!^knuLv&gS637^|u%XrY)t?8R2n+xVq5K(`r|QuP1$89VMMBIhrqm5)vvLMrIs`{V%6#N0g3iTDl=8a zK*DQ^(Wb+O*z`74O%5zQH$lGk;j+(DyR%qnGNpOgkZRU^KI(JP{dp-p*V-uhLIs-V zG`e_`!j-KV@E1^6NiB$#N-qAn;Jd5>2v1oeNQ>`@7fl*N%83~rn@Y-v>^FLxl&8od zslm%VFA++~5+CIC)BP_=t#I?@4h)~QnEPWJp*$OIn+WAW2FS6)0%GdMACm;>FVxX) z;Yp%m9`QiTnHPf=x?pa|Lf3yh<{FmZdGsoOOnTxnvG=qm;r@zaUlQgTPreX&*POau zxwHPcNE>Go5U3$x?ketD;mkP6yeP99DdRccADH1AHzd%uS8wti*pDe{Wr*SJC90Hsi$EoY1hG%n=cp4DM$1>G13&zk|Hy z7auaBS5Lp+!j?t%ii?VIa~z;IQbfL!Qw9S4201+8Qj5gx36?!A`+Kz*Q#Ibg-qHtR zoaa}{eU%ay+*ZugQePL}$DKv`D$$pYkkhRA2VQb+? zHBF%*bQ~?4mbj5$>65f*ph=f5CjAHdmY26N@6yH_%iAind=j>n+TajkmLee3q}>_2 zO32<#W+n!WkLhcJMxL7Jm73h!+T)$Z0nIsPwS&U|N3l75N%`~V$TglnOqc0>CDI$= z)b?jPDVnsCnC}KOOsp>&#>2snya`7k@XzpEn9Nnq(6c-A_pE5SLaiKdk8Z{?n=i@Zr zK?0dm$vof_M*wX#E+}mMlpX;QG((UpZocoKxXBpf|CEyaE#-$P|9e`x_kT}YcaiQP z%+&R_+Wx%`n&Y~(7wez$DexidDk_w4w=*)0qhfyc5Laj@^`{5lwX-E$-oy1vf1Ihx zt|>GQ8pxt**hqUb{wdbS3H3iIjG)oWVSDK&MgqgR!d7m?g$;d~kuj%(uq}u<^>iTy z+}*KYN`ZEfoB;!99Y>CKNLd-PjdTQ1TScGjOjtFx{ZXj_30jqzzrfRTenG~n!Rj}p zdfiGIt@IY+o?a3(9wS|L(+c_??)c>gTqE7N5pyqOOu96A@|B{@%kp`!fbcjh@jAo3 z_(M`7<#O~sBj8DiT`HOUia$i|Q7halfyh1#YFBftmnx(X*LHR|GO!0ZLkcV{8SRu| zcRHDR9VUVSCBrf=&PY18>**swtecohc+*S*UY z&&Vug|6)NMD8%Zuug7u7XuU2VovPZ%%$+SQA@gK1*>3urhSPItTNhz{3Hy;uBxa+R zM$l8#M~IEvHeu0_;=VDCiy%lb@LxdL3Wwq%#mXXTuf~S%mPSSZWwe7w4F7~tWr*zv zR?`hM_?KVF_+Rpg<;b#$CFf^$3ixB^2Qu{zIZ9Ux@0F52YW2O}QWD?)A_11OZE)84 zwIkxUr*ifKW3JLP`gPz-I*L}(cPM(dP{r4v==S20W@yQ**y4=gP0SnETR?c_?d*fBGz-qCHTg}1 z-RC#jX~75>v|0(*gqx^%&sk{*J3FxKU{*pxk5G?w4<^2UR!dLNUv}xg{2JXfES&Je9zuU>E6r^f?LG zUPTYTnonk6mvkz5U*TlDenT6j zEk=xmn|97K0l-w7z2&6yv6H0Zy2Rn8aAgV==DxL!n^q4cDa4UnJ8lD_vl*1n?=r)KnBB;klcxF>C2zgOH9f3zo7X+a-RwIPa6 za?;kVOUwDB+|$w4)6>?`lb#<_S~@0q=Irqf9v%*Mz2GIn_#QGNsS!4Cpp@6m#`s?# z9|Ery6Wl4{y=W=YtdtLuUR4<4&LqW9*oDCp6i&!$>jyBCojxCS-)FX8?E?VasBA#f^%_R{OBQxNT#*+IQ{e*=+3gBy6#LQ0g@DmMc;Yk=e+L z>z{H45(Pf505IhwFZp&-ccr&>%!FdRFlyOL(t`fR4dUBzHo_fZ&+tN$%UArFkPR+| zGy&W{MbpR%{x~V2Q#z52G@j)tluF&}_y3uv`JZ_TrCbl;Cd={TWGqLPjI#q&d5{~_ zm`;kpvQ}1Ezgf(#872jkZZ@#lf6^-9%y9Zf`i8!ti~sn8m9uLsTNURcWaxBRFTPTQL5*8RyJoJ|-?7)$10061vUYcYz=_Ne9%smD`7k1N? zxt)`a!tZG`j+BoBh*H95(QM@>4NtT8XbdP+LR$6YJbRJmd=}SD_=Y&Wdq=ObE8wa= zf-hCoZx+d`)gYuY^6IL0wm@dr3xkB8>Ki5z@?%}1xkFlt?J|h#F5DtctOe`(@jf&Q zyECm*h8Ce|GD>XN;E~%Hn+o>6V}?ica`F>LO0-A(sAw0*fdpe{8NE^U%NG7D#))6Q z78o!LeduQ}wkmN}7@=W!zrnl*o!m@;GOU6qkF{z5^@R<{vgwm(n?_ZP8&a+kSQrCGud_0G`;by61F8++FSVaYc-}i z2^Zd^eMnYjXn013&~kWgRv3)oc=<&BQ-nzf$I|zgYUwa4QDho6!DO1=7b+Q0S#>>1E-)6rk?wt3jX2s2wVm3#Byiy|DIdXZ%SpHd zrXR8>!pTV`k$-q1DCzrp796u7q@9*pV?k6Z7Yrv0@H$-(Vk2Gs8<~5bezTzLK3%+A z`qMp{5SzpdeIcU#kx>eu=q0-!d%4tWLj)e%Z32xb}K41HI~pjlOC*o zjCpHKrY9$rOifLmu6WG?T}}Et^%)%%4kANHHo6Sv3VY!ZM5`7{(h)4wPnHt((v?(i zCHX^eSWaFor$*%UO4>}EBzn}nz8dz8=XI-?zM!@f^k`@C&Wk!QYygs33VM?ExMQPy z@u86E8p>xHXe~(lO#W7oE8FAgh3eI!wy}wC&t)nuK-SKOT`CIg6CfA~XX{tvWpQS= zjmp%P2ObyFW5q((0QYPgZ5koFR-q?>#44phDCf@6*F?;#l0e1Yr#Q z92@->An@3U20tz1f{_6*__1J!23qX6(1g7Fzx`O37_ua4&VkTHqvr14YU$V0!55oQ zKLFGv~l2Ykvm^e`^xzkAG=y@btl3bAu)is>rhL->sXEP2Z8Wezv%| zEqm}sH~sOR1NlhdqVlB(_PHQNvxUlB{o(w&tRuE!GeT`d^$HQuhxlloG~S)?B0#sXLgs3O%Sj zZy}4-iGrT&ZsT;)P9<|pA#A0 zn#ODvBHM#W-)7$$`1SJe^YiHCrA`$i1xv^Hk$c+&Jc2D&;FByoZKJo$8mn)q5klF=Hu>cGpM@%?KXqW_iH9a7(^Bo zMH)mRV29d?PZGY@OM|K=k`(|6N>!rQnj6A-icKz%MZo9ZTJXv?2LC~OdV|%P0)L6Lg{wQDi+gLv$m*m7*3t~Z0*i# zq_0;mPZL5+JbSqXkZX}E__)Mf6O1Y!Y@gvY$TQB>$bEDlcc+l412D|Y`2^v${$8=B zU0DmFt_l!u*ic}e{3b0qw1(=>4ij2_f9meCij6B`ivwD;2rRZ57_6rpGH{S@e?=$h zO7*E$_qMdyd28H`G_%C&gqqlp0nwuiqg&`&C0FuO6DbmZ2W4&UPQ#(6FO)D*5f{WEX81B>)NetC;c{l);R@4FSoMtkl<_E zjYzjDn@ul4F0E0AI=vjcHgmXvtBuwdT(c(sC9PW-U#MD1>lE7%HXLF6sVn`GgKM(d z8g11A4>7ILROKQywy;rH7)v!>CKdj2=ke=VC9faf)yuhko0if^j~|mcWTJ#4AY}3h zqL9*A(3!HyC#b)f4wmjNx|u{vL&Uu$C&>^uuPo#)Fuiykrl*ax4-=Vai%nRy9(yN~EWryb|EFxUnP5vej>bu^eh^^U-K{C7 zyI5RxJdI7C(2o0w{ht~ zp%+3xGVXpOapNNwV+Nj>1F7MbC65@DL{dkNNICY;?#9Iv=1IxCoj8T#*WiSN;KAdQ zg}xU_%md5sNbJQW^mT1s+02W{mMIse=V$M%moO}twSYDro&$EWf1xh@1u4REYXx~E z+Jxcg%INAI86kxQ)>acIPnZj~I%1)k@BW$eL1>sWFOSlPmE5FJ$s{!@B84P#O2;w2 zy3%KDyhPe91I&q<(aMYS-+dugc2IBv`uI9kDvHH1qo-X+Fjg3UO9~1XH;V@I)tX(@ zdI<64x^m5gPoEMeVIT3+4jlC}YCyK&z<|B)B~%GqoJdOv^HrTM+*f>qW@mn9?ref! z@rGL>D5ECu2}JYje3*gXvUnVb;4Mlot*HX@hnq)hWeadlm?g25wz2MLKPKGWG3V^6 zZlfIyt@P&?4IFRZ+R{|`kycC!ZKvwcZK})6onvf4ZgwSuKhb;{R&rs_p`8937DXXI z4Nf;36CF`;ZjsL?wZeLOQfAWB-4<0`1T63hpgSg}ESRAH`>uaED@m@8;~De*{hXv; z!U8T=diH-gAW1685Kh6*gf&`YJxno5|C@&i4snUS{VxtCy|JO582K-bC5RGI|6KME zvtAq941=I?g0O2K>I{TtazNS}&~nr(`USjpy?y9@CzDtqj`XH`&XEy!Y`-B9 z=V?vaiDKKaUrgtQfE!|s!Jk?GRQ6E*R9gf*ZJ~X!0bqdwnDs)$e*qSo8)lNNnbTGF z(ry&}} zPqKE*hnfXNW1n@5V}1=D;mH^*4PG2g{eGBeG~>Hp{U-e=mjbD9BqHxT#|9 zyiMi(h79UUloge8=2vX=4i5CDPmyL$CDIJ?(OfGppF6*NgLm+tewu5Q74zm+mU{&U zd8sS#XoYzDMS10%c@?-js2_hVW9iZi*RW6;l)Y?OwkkYaXvgljhlFTo#>!>c?hz5R zKl{l&BAoy7qcnI*Q=hebMW%bi2(;L4;XHY(cr9u$jCI=dEnvN8pp z2{si`A^x+m3l4+CnyX+Kr-`vtMHHHW20Kf~ajN<7zl{g8vrTJqn;Oz*bKBlh-x%|S z!ER0BSW><~ii3P@$&1{tVuHRoAX8du8=Ca0t6xS7E3FJQDFMhcYd%i=6z1J7DK)dZ*{)RZL2Q}G}Sob)8G z7Gpa6AP%skw%B<~_TmsFI9b5`@h(e^IL8~cbCI@^HHngg`?E#r;BX{j$8lJbt1LY{ zOZ(T~MLq$jg+8+)NNcqB5mWUp=I|70lI)6})<_6pjlF@mj5C#8lps7iTnbW!?eHM6 z2xJRawNxlut68>Oz4nt2E9PY8&77G#m20b6E}bAvT1I+2IrM~BFIYhD;)32>Mr3C` ze_wm(Q0@D3hhcb^Nu(eA`JVNzN*@&eXIRlDo2{m?IW=QR2fBq8&`+nPrcRrlk~&q^ zae5MqkdZW9=}p6ND9XOD?3_>_S@$9`v%*8u(@{Vn3P?r)EcO$lpf%xv$swb(1!#Aw z!ZK2lnmUybEGN#-S50 z5M)9rJlCB8E^9ZWEv2SB3!H=x(NRWa4SuqNRQwRte1&>J-wl4TIfV2c>_JH1VSRP~ z3>?-ur7Rp@hI$g>ITW}3BH`57rDe}ib~`LBhk09fH#KP9tU0XeojT(}ubpy^zLQ@! zb4!Ef%4Yhl%*_$j*;vm=zY`*a<6x6WTBlrz_GOBTpPfqc#Zx4?id>pC=0ePE>aI!=+?Q7GSB!W@!%rbeK5{8<%*Di9QI}6lq$a|{ zy)2h!Nb;c$xpYAiwlhINDsxb&6zVqgG0B-;LVh_(?{8ku62q1p{`J?$(+LlZ&^=(x z9ze;8I;Rul=jpTH<^GtC`gC)X2ROK2G#9GsBOyDCPzJVjE~=(Gur`{DYzt=BA!uaa z!d#=S^b?xH`C$*H92mawD-Hze5Bz#e!`@7{3pHopl%<#a#l z>V!yHlp-WD=E-LP6D9!vd4G{#U;nlCNlY^vfEQXb2o5U{ew_EMw`PGXEGA__Bz!>W z8-9IEa{rO=sU$C~JSB4T;Yaq%@7AQ}VUYsTYer{(~PfU~MbK69U`fo0N2dOEfMEH}rlF0JjYaug5d zP945=UboyH34uD3NDKFo;r3QR28Z>$ z^F|JtJI&W4%V$dn{oKOD-l0eD-l4OHy1H6-Lo?R>z;{8c3U>)~5QM;HoN@T%w9!Vc zVev(@P?U+*<%hj`8=C?m$~RD|_2Liwp8*XN?bbMw#F8J*cyOpa>H%1gZglWPzczA@~{qFcE?p z5WO`i<+JS5G^P4X^zfK3W=)C+%}emJ_3LQab+n?&dqGa}#*sgMRrdAVkhayGVt21u zI3;?-*a6L3&TL}_*f@$$qze@}(5YC2C>Ig_x3+N+H6yE!ziJepaZ8rOEe|30Id^AQ zSF-65Ika^2bZ>HicsRScC~{`c2`UWi(c9Iz;R49VZ~#_60@G^+OT+*ap_A`A-N3}= zPdrac85QG!k|xlbi3q(lt_ot80y%2yu5xt!?$D}v2hITN^LMxN9HF%DG?`(2`^eK` z;Bs5@s`d#>$SNP-kbYys-N$rIv)Z7bY0f$jFwt8?|N7ged89J%k9HncmDmKZn;y|V zYP^+wk!u(*V-LK=OWj+zLv8whcn`STwq_Vz(+6LmtqiKBC?u7JoPycU_VtNmSbHBkcliPM`XDS={AMiy|_m)qhE%hr!Jx_%_ ztpk7dH~;l19PhhQzPY zqnkTzd0*yGawa3XEN=YzNCfZg>OU@YK-`MVo>TV#vTIT-V>dKsd*b1T&$Ag<8U_juuQZ3fXG`D{MTQ%81pSq5- zi0cy((dl$T&FtlShAka4ev((KR{n+E!u*=+4;(&t=pgyfKE3BzIfMmr-D?EP)MY`$ z?At9Z;q5eTPo_!Aj)a=HVFRM#3!+;_PJ(pjfK5}q9Xd=|2Prdy09#|UVG~qt7I3kK zXeh0|N66P(HXUtouX%sp!NUm&3G?$eEF%-GYWSqX%Xch4JiAn7J0iFuFuG;)oufPU3|n&A@?jb2uYXj12nQ?fp;Py) z-TwnX@R(w117nE=5Km4-iy=)7Ei@Jn9xy~0ic%SVxvf{FQiF6G+T{cmPivXh^a2(_|Q9y6DLg8$jqrX1UN*3(^ZJ=%e1Q1rJEX+Rq8eP6h%%TJd^A`cEwGF4Nb0(oBZm74vG` zx?8&olclb6a>MgGAeJwY>C3rPuXr~nrGvA+zCpBslbfryF@$3oFE_LjQ0q%nbzeH0s z3~-D=!ovN!Sl~+dQrO7_P?Htp_2NOoZ8jvy8DZWGF0ZBrW8p29k5+nxpgeaLg*3A~ zF&@ER=RbCCZQ2-XZ3Vgo-NsPkuzV9o2F@QlGNW(v7G9a=Ll892f4H+(C(`%(v!s2y z=ETUbV#RbOG2Moe$q03)2c7SaDh_PfazIhkstQ8NF9myf4+#q77bZju7|z0B>C3|fsy_{|dQUVwYjn|EZ0)8K zjTlQ7##$R*Qx+eaa!`SN<14|#-Lp1mee!UUIXY-qq`#Nr>XUos2RrojA*6qwUc<@5 zgw4t=%Zrz6@SHlHcOEoY1*_e#1+#NjrFsu^95860rmgg+#HGO)cxJG${S4a<<0~>z zY;J<66KpMNcw4q$Yv&i_VR6+##28HR^&RdNH^L*XYl`(JdCYLRm5;kr6|=NeA3qo; z!_&Ii6*)(UM#~z+x>B#hXsO09YqS87j|ZDVm_Qv!%nzGqbnay;YuU-zwU1~55+u@q zne+Y}b!o__65V71`W|aJU9&OW`A_dD(|^26AVCG^OcK`Lc}QTlb{5%i0J9!G%(}fL z`TNbb*7Vtf2YOjuy~lJib1>`Tm1x$v=jUDfjqBXmxucoS*p8igaD5<&rF947F~VE4 zo)r7CE~t?)KpUOH$+{Kl{h!7|d}~v8;Kkk-q;1}|$S-R4pCaV+-Y_UUT63zOyq07p zAl{plDPL9hzuRiC?M_YpNP~#UI?YR+BDbaA3QW)^zOSmkK>Q z9ZSw!Q9$f4ss!l;fEFTzK=Gd{5d)WFo`hB@FNE91wenA8P*}upndYLixY357d4EZoU2d zdb|6R>HfVu{QW(8`P;g=IlJEfY~|cT%?-b6W!RA`4D@sFX6I|=*sd@=bN;>q`aN`3 zeaD_Y{hXYYKk^N zNrPz6nxM2>51m1rjcIit@mKZsCB(P4hcB5H;Nb=xIzZ(S;FDh!NzT^nJ#}ht82dRa zEC4_JSy`ukVr4Z6+VQTX5fp$ypraAU)b>!-zSC8(qsZhCg^`w824DblOnYst9W~;f z(+1a~im4tz{M|hUfT-ZYE74No_JSEjR&)oU=4z9oH}NBQda(6yWsYf09E zj(_JPfF84$A5VKLcWRxX<*Oh+w+U;cXX_Vg=`nvhS@A6Wrfb%Yx}AGIe41`ezji2l zgOe41#mS26g*BEV!&JS(M|O>_(VnabMjI^QtLm?48EyWsP-2RSt5kW-3<@+9I8t-RbQXp$oz~;f{;`u!SQ*XaliI%}3U| z>5swrVb?y?BaWTygQK93oCFh-8R5mi5#qtWaz?4eAIP=r2w*xo>pP&+1s~pXL&z|? zN7yUffX`xLbbBJaRplgASkmT3Nw=BSwllwaPqVO~tfV;D7%mbLS!?mw3=joiP3M}P zBEn4I2s0D~FM1;Do!&#%*2@xyD)!V2;)f7IS{mxJ<2T}Cy_jPaShXEszP_T2k?}I$ zQ9z{OY$Z{CCWhT;I}`{rY0EtUqAZoH!5V>z(3Cf4@24}G{VVQCMbBNP)@sPpB_ zPR{;teGCQUDPD?z4gzs#-ELs46@h4pr3&8T*zK7?u@M0*Yw3~C7d@Rh^PG6i$ z{RGi$X1wUJ==I()Bw%)2WCEUsS{#tQ^-rSgdgLFF(@g8T_+aKvjx3|kW zMZdkcq_`&5e`ZX=hJ39FicduJ4F)RxV;$g+&$gV}9XQ)uq84+1n6-H~pg5uDA5_tJ9|+7#%n#e*AhC ziY^oZFS?*b*qCT1>aT#RrP%IR5Q64t3owzD$;`R#t;1TVfAKoY0Jx`hA>$ll{Swo}f6%D|5S64O&+25Pt&y=Fhi(AsrYl>t`|G?VOl=s|7sq%S5&bDN z7EBu-Rg{X5+%V74s-nT`SP?jZWewpg$kon}BWHwzzFY4iqH>XtN{VG0J~Ve2<)1vk zF)m>Icv^-7SCF2pTSIBtvh%XbAJ!hc7Y|cL7CS>)xdN6rn0zD(y^Z9sXcA!tl<&m* zSVP47GaJp8&f@)0-Th1A{j>EyOAE#OX}HhpZTy`XT*Ua3>@EWSYjZiS%>}t%6;qe$ z?oSc#zkqAfXz~7f?S1KVeE#1>QbzLcgh(#2zF6EqKznRhuU(+{kRQ@Mq2_ibott&= z5+Vyr5o!3LT{qcg1*3rc-vn$%@-jt&Y_IYIR$3U#{>ky5l)gMVH(*@Ipzgi=WUv<^YZ$w7n1j~~qb;Qr1nbsW1A z_KpC1r_rCZx9rd#BJUpGRu-jHLP=o`pe7c?%^cy%fO%@ll>hthb_wQ5!P=-d=fHv&Kt{;l+uqgz{0^YuyK zeaNt3-Mguh^RT_M(6e$IyRxHI#{o`GW7l@D>gZ38XN)iFmS~aT!45x~hjPyS&*ilL zs2qpk4drBdcKvVVz6{xxMR% zz4(0TZw`I`;qk^U))Tw9@ukT>b~ZWt$ig!(WD*Jfs0(ymt?7@jC`6Oqp)x#wHxkL{J&ug&gWgL#&bHGT(z+CXR!K zBu3gKJsOfAYCx^jSGhvWMI30zflQ{K^R?DwS4SEsVSxqyEs5kUZ@?i^8fZH3_F|Jn zoF#96H|lAZKX#^K@{A(KQA5qx)PS~uw29iZK1d65HYOBN{6>r%y62Cb^-*HUBlz(L zA@BoUl6gFt8$Oby&?wn-GW6Z={4wzv-F4}XXWz`hsW4P{bTZA1(_>ZK3bdJ@!?$amG{7w+Bh^3=(P<82#bO-Ia zXlojddj9k;Uj6#@3ELAFImYxY9bDopBqnVeydsWp ztFo`3J026a73g-|(3zp>p#waK@o+3fp#zX%lh6nLe`~+pV4I#G{a7PCq;nCSly+IP zH3dE|JIb|<;yH2nqSUH*iHvlVaQtieF*HI0YZhG!5)J5t=29srH2mwj9`c*CTK)WI zSsMh|-Ai8L;%BZG8LYW0Yx`9FR8~;uFaNx*;wiqNnN8~#%QwqoWj6eLxlH;JC1u2j^oCEoS`}Wp zMlt;VkoO+YQ5@;Q_FLUO(>)T1oP#6~!C->PQDl*G&KZ+4n4EJqIp-*{$QUqSayDRc zkjTL%888yk%=h$2*zB&?yL<2b?)m@o%{k9hcXf4zx8AC*s;;hz6{va7PMR^xxND2W z_)(qvT`aLK#>crB?}&9dUccmZX^Trqq;6>0%tj>M+nv+0xzC%8K870gxVAE8t+7{2 zZ_n^#aXx$G%w7)LehmIT@cH@3r#57plJO&7uU!71pFSmKMYk3;+T~d}u*&3oOAAD3 z>8HP$mTjfmGh@u#l@qR{tly@_q^8-1%qw1WYXvs#k*)MXMp-SSh_IKLDp(*fZMxW* z4Af-IgN-eYadTkp_miyi;{C*vmzGIcKv7rvRzBF9*|FEmI)SQsod$GtgEOe=Ir1cX zd9u}liq!{y#Xc{pVovw9)J3x?HU8HnYo8BPO%Az#yyPDIy&mQ+w&$YCaArY;I=u$e zYjLGbbiMu?M+I;CJ}8Z<=%2b`&N63u=;=d_-RZpSLH{9lW=v(C;RLtgUdl>Y(~;f) zdbsPTQ*~bc*rRi{`uxMnVpuxoMMmiT)T*K_G8ao$aA3%aBMol3>;16+Ta9Y5ONe#7 zGT#~O?L8YZ)YHUVkE$lX?;!62=70BIsh~Z!ss7F~lRZ&5v)!rmE-J&OP~O)r-gO>Q zco%?h+OsX$RE(uY47=y8s^wlZZOpvqB|@54P5pF_dY^Fdlri&vE?KrkXYE9pg`=*x zckKH?)w}aTHQ4R09J>1J$rZZp>V8G#S$W7k#T_}%ea`*nLZQWNR8p0H_K-~tRcdYP z&!XqT|_3adqJ4FiFc#LZTZ^$bT-GdHxcrti$`8w>N2}n+G{~1 zr(2yOQ;OJ`8}{HgH)TX#deJJT z>k@s&=#y<{)^bOb8?^HKcKVPq^}i}qB$qql z+?EZOroH$$Sk+WH_D_H4Q>1#;o`j(>*CK{emD|Sz;nlw)azH`m>OQc?qJ$}Rl-zJVeIPs z%;y;Iks0aWJvFP&>4AEt6b=@lOA=iniTl<_wh1~tT4hYEd=sgF(d@dFZ;bm+BIgQK zZCAwHdH44)2DNR^quF!r?{J4vI$wGo#4BQ4VA878Ph>A79$Pd&Ei3-d&JqPM7d!TK zl|55A@Q+iI4dgyMwXeS1afow1hiq4ARjm@=tnXB) zeECA1)_+sNJ}yx4kK;n+D;BWr-J6c84(~^u>)ZF-sQ2zUNB`=Ksy37bg6c3E)2UtZ z4i*&l+;iM;CS@!stQ>&%ybKJXHdG|tmMWaM#giL%`5|>INt-b6c zLwU^dj+-3Kv3FiH6`Y~GH3||;!YC2To!Gi=k5{p-blyO|?rp8ct$s4_>j!)J#C!uK zaP6z{G0dv;Fbde0ff`y^uhh6`)$oGa2WnuH5ska+->^3N;*rmc;l|@ zzS%IsJ<}aMA$I8QgZ#?kaXA{^Qf=9s$-Q)-`}Lisd)?vol9}geQhgm4app(1WFp@` zk9fv{b_L^oO=iEP6ZJ!1Eipus8+E~`*!I!<+}T~|6BsBJQ6m}9f8c;;S1eiZ&|=0OM|BtYo)PU?f-g`{uQ+*!Ou zRU$R&!fE$V_b;#Ai_U0^cZSVTsg7(qrc%y46m~+D-1nSG`qwtNuehr-Nxvw8{_lU_ z^ou*8IfQQ!VwbY>?p*H8Q8rGnKdOjZe9ayTCcDvEdoOn`pI;3_IBIXSG#*v4M54!k+JTA3PIwaHjj| zvCT)^kLMH`eDh-^VRHPAwN6gE~6XdN* zf-*7{_4iLK=&RawxIM&e+yDL{iLzJ0`J<4=zA8PTRv*+7?pBHCjC8*}6Z1?Wj09OIN7fzRKBy zhidN%qfLHIB;IJ!mV%dB<)kTvxWB!NNy~qlx<5&UPSXA~$+3mm&U)Ik84Pc(8+ijw zJ0D`(y7oj+yKu*S&yzQA67N1g-m!Z79>2Jk27zXv+O}IInKKGGxl5=+wwxY5ayN9} za;IEt3#7@O^C#|Iy1wvEv$Z2D_qs6A{Z@6@sgf_A;eLKJ=8d}sn*r5({79`)8CWPJ z_^kWQ=(#HCcWO%uwvKvtc-Y}CUmqHKW>2n0Me;N#vMHT=$nc2JW(!oZor)y@>#iPG ztM^aSl>a}9I>KG^mDc5Nr0Tx@F-Z+f=m@a^D`XC=#7nO3Uj_Pc3!ii+%)+oYWPHM=JE*FG$XSu=d` z^f95shgT_CxHhlE2Rhrj7cz0v?iFV7E`by`cZ}gFrXI#k^oaYo`qOKpf_WLsx2H@G za?dGuTf4R8psKs7UxVolE~p{}i0%4SCtNW&cY>He3hhNvm)gROj@cc4Ij=^Y!wCIXYY8$?~7%$WjUX(7%St+l!Uj0nQYT} z#(g-twkm$aUHPbU;c<7(qmHKTAEN82qQ)c6j%?UqX5C;fLF(n&r!#VGiZ;->+F1GL z?`55<-M11I>$q|B*p2OrCUu8r=(9^%JGLuxcVBH_mex&!gPXR_(*D?@X3Z8Iqw%@d zS=h72D#`l-DU*y1vYdS1RUjy+;RE-MyW=vrPiNlBIoA1ebl2Dm zrMM8?H73;`S3I@;xMfpR{@4pqyJ8l3*089EH(3m6F}XjzW;AqPWiQIhdvdXs!<74~ zihIH@^{0n5VG)OdcCum?8LwjRDaUsNh7p+G-nCFauD-~*m%Y@gxUb$<)gDdm+$3yz z{a*^!ZA{ea#mx82^VGK6?q!l?ihTzcyGl*+6ko@jXtt!u1?t ze0$XDkkMnx<=S|~o%&JYG`_yR8H!fP+O6)K<_=$%BXJ5=n`q^(;0f{ML9UlQCx2@~ zZzjN9A=>oX{N$MzXH&`j%#$BCSFmYDJQ(kFe#e)Y#dxsUHE%u^eYaQNW`8Yupx*vG zD=PBNlm420nUp57KLe+eW?$CBI!&zRpFYQz>GKY}urOU-|LjGwms{`t@!2!?kD=wV z7t9`zH~rF!1M=l6o-?4vB(|(;&@o@>0sRJzs1VYtPEPmXq}c*WjhMCTn_9b;wr#s~ zSFLY$%^FcEAX`!uoU=}^kVZ@A%&wiUV}k;8D=*4L_UK9BE$8x$J+eX7e^Co{XHbbQ zMn`MqV!lJUa>pEWT;|&?w!IH+&%-)iE?u1r;*B}b5_la(=_^qhL z_+~{phDE3QMW63}Uf=z#mM*2{uZ~22aOaDDXPtjn$|tbt3-_p~w2lXMQ>{ zsXjA}%*>Iq$1bZWmViU9b7E4fWgh!0WGQDqquAneLCg-VGGR|+h~3_G*Ow{(bddRw z(q4R><<^t1@VeadxsaZ8e_EcXsT3M;nj7DFq z-L!{syvuCb9X!Lq_@~_*iPdUt6^-EuNj4{|J@MSsL&|r;Oupr5rpy z+{L2d_JgO?r?qmP&(vh*Y_~R7MLUm8S8ryxebt8AuG6em<+H7b?h$?Gus`A{7km+wiKy5>?Rb?ptyFM;yu3oE+4sTmF)Q! zomunp#ATIxrM)okfC=tG!^RrvKi*-5{sroM%*t>cKeO|P$1K;zft))uMg$_iRwc-vKrzI6xZb(`o!PWNGgi92C3xS1DT~Yy$H$_8!RI zgT#>0kw1^2^H9_8E8jyjFIl+UA2s8UWkq6ETXwWk8n5F ztGO?z+*(-dx4qs-v*qpne-&v%22(|EaYUjZ_C#-caKc+Ilpfpcbr5mABRlQZ){3iQ zEUNbXBvnu=<9_?`IUm)((MLoNaYRO$`UvftC{yd}{!O{YvG~yoMsQctl5RsT*)3^% za~1Ep?kjrOV`JPcCX*NZ}&d0>#kZ3uj^QQ_C+yb?c1yST(=9lxPFzHq^3LB&Dm!^$M5G& zu(e^mCWSoJ7f=csLJxS)*aTl~YndS!>Oof+1B+oNoP$T;rt^>-assi^n?YZg0;}N| z+=2Iq*$*-U?ieT*`@O9(0_MUNpf}D5;tG` z^2IOTQ*aNWXjG*J;v1iM#Yb-O=ZW~G1IA(exYyp4$q%jdn*|$160ovPf`U*Th5_kF z!2JnGZvteK0NEr&HVKhU!eBr)3A@4=SPVPi9FX3GZjnUkp#W5ab}$5H!zMTexJyi0 z61N2MGx0>AMoPRN(6+?CuOoi7ERqHf(-4O=#39Xa2!~f9X)OqVLQn(R!!Vc&Ti^uXHth$Ibhu5I6)He`7zbEG&Uta2_55 z`I8ZOWkg;Xkypm%@C{6bb?^h+gm)rA2>?HX@G}TMgSr8J1}%fFa8e{wV#o%Rt4y_k zvXzN6XClp+NOLCAoQX7NCe4}gBQt(vJ_J7k>B~a;vXH(kq%RBU%hDaj!BW6Y7Rq;4 z1?8YApkrClovf>12ONc;M82Tm{6$8fUibn%{h||$gaxn-P6M*aMw+v2fCxZt*^yiJ zFQ62(gdQ*)D63zRwlBHwOYX}-9h3vvP3M0PomUCybnMkE*a=jspN0!52^%@FQ^unF+H zD1H~i?_&5}EI(9*wlEm>i4-@X43MwImx%=X0p%w+80tY+7z5~CFnSk!4$!+`^sWSY zS0X2bKr`qIQ(!e5fGhAqq@)wlLjkA;?O+JZhD~sc_C!WN$4hmD5pWhBLX1f1WRL^O zK~q=-`+@Y8CVgcbc83d)L78bl*)4NWq%8SdmOLs;K9?n*%aYG!*TEqg;L2`1R8RrP%MkK1gm6L#Cxmc9$gA?izdZhwuMDKWLI@y} z3dp1aGO0j1E0E3#ci_E9#dwebia-PC4wTJ`i(#iorCG2Mj>2ttCsNrL2&XdPRIUl= zUFG2-Rl33$;NB|STjiWcRdlB6P?!U2M5=9vGw=Z3id63b<6#->f$Q*Eq=pLup&(R+ zwlESF0A;<#Nr-?*I;qI7<`+;38UkU~M1D1qU(FqG79Ik5SSuOifO7CXTxFE0F?dAk zqyTidPI(~ybqfRWsW%vqLp|hB?+3UE#IZi%)+dhjzXIf1AGtOdDAEu=8lo4C76IWm zBK$^#--z%V6MkdDZ%p`&pVIVF@Ij>M6?iYwthY$>Ja7bVz#EYk7Nmy)Pz~Av?Uxp` zUs_PlwZLtQTYx-UlAkSupe!^2{A)Q0Rs!X$cVsg1hA`v)@hlRir;@>fad9qXCUX z1|rLWq+{SB*a2tZK17NPLYD{O#~{kkpoY)`Zi@^a2gqeedLZA25YHh$!E=$J=G^~K{;752WGJqTt@uXq=U_k#T6aeHt;WR`5@t;WiClddO#D603pGf>CPK7n_ zv&f_lFdVMI3z5kNq=kG?1=;{{olHC@lZR7ELX61NLvR&-5t-(IG(g#!RvB8uK$rpB z;0KX!(W7rKi%jnV2SsL-gSjFz69clIl?x`rDj@%6k>*+WJsZDgr-S@Z70{>I#AEgu zx`Ty*d*&c7X4uQzRDeHo@q2Dl=mT7zi=T7JtGSl|xASx$zVnFhJmNc#_|7A~^N8=f z^+0^*-GpC7=KDe*5Z3&ffV}1t@A>4{d~|j`b>9N6E#TUM`49%D;2uPYEF^skvq4uF z1ITgV29ZVN$)f%ui+x}igu@4sC4LYD#h?y!gb{$>OQ=_tYLFUo19`Eu0ffR~xBS$hx&d+l41b;N&NRwxavU=)z%bq9bnhH60iLPMY#{4BD*IUtMm z-->KN-W$k|4V38(YehCX0CyYF>rE+vxNll2vYBu;qtBbsoh?a${ND0FWNQW>y<3Uj z*83u1=u8-K+?EK+0lL5Kg~)dN*^d7^^1?Eao!Ox}khY!NyOVo&brso-KJ7j#vZpe9 zFS1ubZ;|iFgYPIq`|?2*Xaj>_CXm1Tj=(K=E3!Wxkmmhm0eAaH!Adv+4@3?a5Cr7; zfm+ZLCII<*;4s`1`5xJPe@NsYX*-kzi0`3ua7W}Yy8A;QkVi+5%aP0w4E2CC92o

gq2Oy_o$nzNf9z#El?Sh}+SCQk$@i;O$j$Ds-g5iMP z9LLRZ+?;3z^C1jQ0C|1_y*`-`vO-BfXHSxjljDHAJh>Y#z!Q;E0_5|l+<+WUlgFpG zik#v6Oa*8G{eZNdC0%FH>vQ>m{5jVW(4%w6>fAa&UgxgEYmxIVKt|^aLrwS^2E!~^ z4?l=pK=v0RM1E{2a#2Al_zEgQOXv^yeG$Je9)jzD-nzR{JA_F-iZA4t;iJ}G6Ctl@(r99xta}11IO1C1VUp#IM>jH>)8PrTt5WF;W}a5 zC=4}W0xXB;A~!j|*#V}&4v|}=`4)P8>!Zl+oX{4?x7&ns2l?J<4I3d!< zMV^tqXXyVkx5&>~U;&V)zchzuA}{g)=1a=N%PS(UC|j@n;DpGV1R}py0Mh<87#71$ zk$33iJJR%yGWR}I$u6p#hT2M_t|X$Z*P!|EbZ3P!^sh=52@>RVU`heT-& zfr<7y*LBv&GIBwEmAe^LcL?ttT@RF4V;+AX}EQIr-l9NBlNmp{xm7H`Xp8{(E z`J_k)RRFoAKyE3CTdE$SQWMWKX@ERSn+3*0q^NY{YkD2Ho}T#lR|Hmy_dhKv0KWq2 ziwbNYDnnCni^@oRGxh?)3c|mj4S*ao%@CCte=@fMu4N(KSqLL*DrgDBJ?mRhUlfOi za9mV2KR_PY?up7yIN5ob{ADsAtS?sr`H&+e5Ppv3a7k3o+`#=gw~NYE2>QblQMvoT zB2iye0NmxlpFG@`XCNSpJmf*12cq)&LOMW(d68S*rGQT6Jpxw%zw$`)w91G-u;TvVaFuoG}s7ZEk%4_z3{O()PPpd8z^f<=Rzp# zgL8l%MbWEb2B25PvO*C+SBf=*?!Z08xTkndC<(-|IB_gax{8yoVA2(w52`^Q*a7cF zm9QW+dP;s!AY`FIBjw$~?FL zF`}w|0m!H7Sirt2^84>nZIGyHGhqXeF2;ux<3p-?J3t=Qkq3)gsT$>BIv~p$Ixj`lrA*cx59n)MbfGS~P#1lzrvN>u z7Xl5SBM`rOQ-JbRFAQ#qsvjS+Kq+Vj+MTGO`vRcK#w{sgq=X% zcObqUDPJAaLm{XI=tf86*%7&Pq%3#53@=1=Lbp0)fMQS&y2Aum2?yXBkbj-yL1v&l zc5Vc{0XcVG3y0wr5HH4fRF`Z}7Law9elQ(2z%d~GU7|#FO$s@o0(e<+QBfG58L4!Am{EHq=f=d13JPeSPZ-2BK$0>hZ6#z2-JbDFbYim3;hPdM4+tnC*1zoU|L#9+$o;N~y^kjda{qK0rhlrV>))5A)N8eRrS*YFpj zMpOaxaij|tiyD;~g5e}k9!62$jcx?UZ}bS5FKUbdl#wxW;I62#gGG%i0y9L7_kj$+ z`S@DU5%vOg*@RL+8JW-)zJalT9}|ezgk5kPt^)PNL=*ghFeehfNyu&zai2u~Od1E@ z1Lbit*C!LFDdj~?O$+4z)Yqb>>2N^Qx9AJwHR{`)qNZy=yrz?9(+>hNoPiF_K-M!j zpYe;RnT262Y=>i_W+jBIfJ|o9gQ?f%MHmKju_`K0uu3P-o2fS=3zO zHJ7qKcP%^;H4k_5n!x~A2!uO-I-mm!knI9=U;*{f!V*AzvPeNA*ajX^i%G*`!dSc* zh$CYwYDs4p0&Y=DlfxKM%YxvLsO9Lz^3!k=o{L(6Y*wrmwK5It7PYDg>=Cs(1E5o@ zO9SDpChyi*kP^`8H6egp*5YRE1~?*WT|t-!$TGAsAe&Ia2_;RT#C3gNAl~cIf4abG z18Lt-4A6}Y_`hKo5QhyH;0fT*M(j4?&&CK*o4$ZqKv9_315W{c-;n~cKye@+ zc9PFKvEPMEcaMUZuu{|>>#P|D4@DT9tpbNf&iqH@`K!3pP!DX-q zPQp`RHZvpw4xT`NP7DBa;UxZ@JR|B9dUlHRo%Vw+fZNmP zQT}T39qJAt4#Er2HbqO82oKe(I z>0v6MdsnhTNvHwH_R3aKSJ98F3*k7t5p@ms*U<5617Q=~6Lmc&aNl+E^g4NZeJ7x+ z*CR#UARae};|=0`BNWJ|o5=fSMQ9D^>P^yiYl5iTsR4Q3-V(=sQFqX_z{lV@cPgJ)`*Hgk0PeQDN*+_1OD9OzWc>sIJ_10AP@9|jX+u+ z;^#y1;Nc2DKOU6<%EIGva8=Y3e+G#gTtbp`v7_Nd=6{|^!{f{ z)GtNg349RsA|Vi;7v%YidO*BhjDe4$UJ~}pL!w?ahH z_`GQbxO+q1|5^x;(OYEsmOOe_O4NHD(3jtG19JJ03y5oECg=#GfO{feh>9uzoq@P~ zM3x`VGU3<>q%-;_Q88r!8M^bqAW z8Urg~7`x$uXb#*v*b>K?2$=S07KWP80fxgI*bK+vu4tAYgg_rSBATljOa=V%NdooY zfM~w#G~yc!gJ3VPU1mJ|j<;O2_`Z-4MgV^LX^;sjKqnwfKm7K42)~JzfT^GfuuBjr zTEa>&9Uh35$O*Zj6%bCM)uJV?5B*^Ud@ov(>_FO?tE44EM#)KUa_o|`UvKhn;G}3N z@GHez(NY?a6oTNkXsJj)bB(k#oTr&BT3S}wPTNtmbfiE18`1m&VV`IL_{|(1EdW0P zvjQ>>ME-$8VJ?KhY4C`aAusfTqi_|T0*h~DTnVS(2H-17JO^w4{rLU${fxqu z`5d#Hg#8WgCD=7iT7R;m1Wa)ilqt6P7mW5^6AAOFBCRdVKgToMuabn>IQReCZ2k}2 z;;(1+pSWLc+gZzHj8#vnu^Z=bpWZUWCxi6&36_yQZDhE0LWWptW#&KJ+l_c`@*H#8 zW;f|+HA4>I$`NaRI{yc=JJ);0xwDV|8TpCVU-3-Z*w?6>Pb#36M5r^z3vP~XZ``t(%l_;&+@QrTvO@p^Um|!XS(N#&zGK8K2Gvd{hViBCE{!x3^6r#xouN!kq6U)N9(uHhrbDbAWU_)!(!(qm8>ab4 z`dX>}Jp6c-q{k=XpOYRwzs0$mK{z&x;>=Iy|0AYnfY8KnHMeK5jh@3Z8FOPC6EMGvyIzIkc`%*xygWApIL6L>0&_~N8?RprIo}QTy>Zy~ zp23b7uesatmE^F&u2LMf``wNg#Hk%Lj5FJLs(8M(=&x2wuiS0fo2iN88wsWE4>f%}6F%k1Uzx5e+;b2e{G7LccmDac|MoGf zZGG;C9oFCT`St(cm>z16cy9c&%lLP)-D}#%f6&7mkA6>(9xi{GVhokgSUi(3^El#3 z9wSJ`8<}OYC4RHIjn=3TF-Klg~NMd7K|iAj$0< zA^AU@|5r?8P~;Qd`zy(Er%ef2>5P<>rZevRll^C=`J=2eTgoOUeHU-Lf;Jj$s5@3i zd2Y6otF)Kbx>9j%nhbTtlYB0x=b{zm`N1_=O8FM?T=aS3Ipee36Yg`ubH}H&=d4c$ z&so=$f9=Nh&xVnlX0Gm@_qJ)}k)~!go^73>t!K8io__EvscB=DlIbSxZSxW=BR&@6 z0d`#7oRfanFxrj#sBcQsSLmo5UV7T5MEUqg8{Y}a@ZGHp7ssxjWUtvv_Qq=^qvO@# z{_QfwcM0Zr8D~zS?>0fUnd|8nb|LK@Wwv>W=WIdxrLCn5yG*v>>%Pu>*%wM5q{sgT z&h69%hU7N$upnm$VcT?-DPFTL?VGOjd0)%dzhC?0=5sTtbo!qx8-M1PSwQaSR3IL6C#42l6beh@O#Ar1geye$SliGco-00;vB?A(Knp=Zt>5YF*8z`_Gob!p^WBh}2E5Xo3cPYHF6zzvuefM==qcseG} zcxOgwWPOLuB#o_y%p!62!*F|wV@wx*_;lvDA9jbOqf0pcRm$7=43G&vX*f?Von09S zyNNV&Hp6{x>{?Q8i^@+{Mj2*(Bf)k#ah^w4>5F;Wqm?DA*;)=czK{-l{W^~_K7uk< zi~6vg*;LxakD`wgEL*H6QqOl3<*bwZ;H`&(#becy9NsaTPvctYDDU*s610=HtU$2V zr;r@8+R3(fzfvExlf%w#p4p$q#LVe3+0ja-I$y|i8*ly5N5+~dWTVqfU$YGHoG6`e zKaS(cUiSrYNBm9Pk?v(M+8idM%wcL9=1mAQ2ja&txdE%;39N#(V7uFkxelg6I9xP4 zN)LUyTr)GuHQRI@mTS)3(kWgG>BMm-jz`$%wrLDgmN87KVrGj)N^x#e-!^^g@yz}k zH-B?&D(&BN)OY)gN|Mn?tIF!9RTlf$krnyd4C57`}a@7H+F(WbDO;=IQ*?`QO6fW-VQ z%EugFBaxU2^Ff?xySoBE!hd`Z`v1@o>~T9sp-;7>i=(MDbrz5ZHfB{B!I zaYq_EEU9Z8m9EBpsbjR05aR~t_ob2UCz~KUoP$8)1>=e~Kcm0@e~Rl2siEg0Z8<4_ zt)!MQPAVhg)<#FE%qjuFMswP&9i_Uixr-bBrdy*MAKKXTqaf#c9iPQgi}K&v$+q!~bp+F9s^gnQTKndcTCU#mb3CW~?6+2a_U$Ugd~eeRy9n*1 zm`@ZR$@bHdJ5owjM?W>$2vpe|_vD3*Gn+(EzwB^SlZDO#Dj((^ILt;d+l?Y}44&F< zoQ-6&kzN(iiwpDErL;&4bF-sDfVtXH%-N1wFaA;OBxTe@SR+9n7mHt1BkYI5Y{~pF zO#DCg7QdKw^2Nt2T%U=3bFX`eP9oVqu9Be0L%8WCev!|y@1jj+^#@RV;h~qIzfeIW zUSI0JxVlhhs)crt>z8BeN9q-?TVck#{fn1g!r}+YLf;{5J;9jr@9pF+^3Z3PO73@1 zB~OR>=@_#Gb}g`L@#)xSm{uB6#!=e7CrQcJdum+${CAH@-2xQAU!2N5x<4Jh~EM`+U%}jvfGz^w&O_o$#gwYDSc;fFE~AN z!zMum34k`t*Y5xupa0%pZ7I9yH$3DklIr64a6?i@^|IR-j#|{)HkD<&$j43Ck8#wHy^=iY zF#fEy>se=dS?wq*ojI?DeLYDMRTQ(Xm{B`i&7`8;53u_bUMfprXEo02BkwLMH|@3! zHu(L7bS2R)$xqa`7qO#u{I1oEtCtCy7_%pUoUGT)wd(kc2E z$0bozJnrG!w5UbD$0Ie*jpR|au;crrsA+_I2-AK>Oy${qF+mp=!pJMjnJHpFbI#BY z>1y{=NN*4FrnZ?wb|a@A^gBlAcDvo~57-QsZ!xDk>&kR1myB}^mH|d_+H-|fH)mFO@?jS#gBe|p*D&-CZU+I>4a4PNTX{7=WU^{$e>W43AAA&2Gmz2tEz(so45=pRJf zg&k?-vR*=V+NRwX{DgcF?Xde;cAU}wQ|RC-+qCDmkNzKp|x7GAh!K&WJAkC}Fri>E(ABM)NIGR6FA2)ghlDa@$BDi|lbX zN1!S?E20Z{>B&|Lv<+`J*1W6L+82LrM z!hhaf+hIp_vkIUGRp|TFl^FU1Ln$Z2?L4#l7I$tLMO96O~h%!-$R)=MP7HY+hwkNG9q48#u0dL;3&&Aill07DjzFf^q)|9DBzS7(WPg=3tE9B|VAnCUkNq?Z-Rl#uZzK zAk+)nta!^oN15d4sAf@?rs%#h%m|d9iC6DfQ+`JOw>TQfLuWpDPkKg>=2EbT;}TE> z+KEIy!mhsE2E%-b-9*f~V7tx6c@XAPF0R0|%X3@IiqI7{Au;M)>S}xJ(H>W^>u|fi@Yd&y730qk(q9e+ z5SK}i3i5D&VmJ@9U?Zb2?R22$A0mPDek=_EfE?{~MBRtm&yy4Yh|W?uOrfA4*^y${$jT>zc2-+|c?T61jYr=1tsAOYln zsjvon^2GK#GPhBLF`_&wjZa~otsiB9nM?LF)_H+BK()=MQ8#zC#~kT@9&_4t z4dZWz^`S+U0z2N(lnmC;W&aQ&U5 zk+N62^j@?5^WMw-_;-+J(iy$1%I2lAyw|HK)7yWcU+-$ke3O={3;Ms2a=yk}uHvb* z&iw2y^P0Z@_i{!XOh0J1Ts8xw1%2SP_PL%`BGLPmjA?E~p9V0eWvEZEz3oF}PLcP> z?ZXjd5*Ggpd8xT6Z|!(?_LH9WJ2S?9K2SfNkC#r?p;MQ=`qxo@@hQo3ynvjD-&C#{ zspSHGWxBGzy=)-wd-Dc z+}Xw&CG{MWRVDiwLLD)Uc9@&zbbS}>q*V!wTR2)W_LmuxmK&1I90HY=7!+r~Y`EGx>^$GeUeVHC%EHXTfTz)0el}T4I zUDb3o($z}WAYJ2hZPP7Gw=~^%>E8J#@K5HS&OeKP3IB5bRsHMxH}r4p-_(Dw|5*Rc z{@eYJ_+RqB>HpIIt-m|KHy}$u^MD=!{R4&uj1QO+urT2JfI9(C0$v5GKt0eI=wdnK z6oDB7GY4i5%o&&`uxMb_!0Lgu0|y3<3!E1i8n`uZN8opX7XmK^UJkq)_%QHs;Ij-` z24{u@84_nmogsaO>=`O#Xpy09Mm?h=W6F$KGG@;>EaTXW6EmI<${5r>=zP$#Ov^Kc zX4;l%SEl`$4rMx?>2#*^nI2_&nOQPBGZ)L;GIQI^OS2@&k|ImJEN!xk%knZyRCZ_f zB-zt`Iq1uwIXpR2u3oanvo2@2g!_hP53dwnJ-kVHi|`KN9m9u(&ko-fzCZk7_@jul z5!oUNMih@|7SZN~+(wO6{Zl}Amzh2Bc}Fh3jLL_ zG)~Ipk#cpUTn{O?ij(s9>7xA;`ls{{@XzXB(!YX#jW{Vc_aEjz&VP&lPXA;6SNw1L zzwv(`AOQ&jas_k`=p8U1U|7I}fN23s18#byOj9$^;gxdo!1PEt+uumJQQ)A!X@Tnk zw*+nr+#4t5JAn`4r0hV-i9VBZn>ZO`iSfig(89@ zn!iv;IUr8T2%2#Zo)r9Vh0XR6V=y;jO{=c~A|FGD-iT5Vl8!z&J*4u*#pL}?5K;+S^*t3VdxM#|zD^D&xIrFg9LrUbs z`H$`TK<@2(IN)LbyNwivKIv*YQ9tYUx6KKB0nTKJ(`_RsH# z-?`W$B>S!7D@PYcW#fgji6gh8v!ke^m}8@3remO^relz!s>9Ebz>(0A*pbAM)REkg z!jaOE$}!Y2!ZF1$-7(dX-%*C=M=7Z&b)>nBm&vkBjw+Y(Qz=zOm0guoebrz!L`_ul zSU378iw2)pKdE0F#T_*qB^(zwV>2d#t_qSeycXrr|W+DvVY_Jej>yQIC+e$!38 zs9s7hr?;m58mX_;*XmpKo%&fvDMvL&X~%r$bVpv}rSaNP#dzhY?l|ad@7Utl>zL$N z>!{_}?Cj#$F8qmOkQaEx{KaXfH*=a}rQnOyt(aCek;Av$^aj7gV zq@}cy)^bWt%NaRlPGtG{awr|+^s$bW8YVlR1rnD5Ar6tkQ zYL&FFwf0&Et*y3M+oEmN))|?!4|+U3zV4^HbjvYE_tD4mteZ$pyw}LA?-E}vp~O>B z5?@OsRkX@dm3KbXw5n2Ft0wid2IfeuwzSbYN?Wayw9`7v*IE~8uXUAajKO}ZO_Ax^ zRGFbolNH($S;s29XSMZmP79Os+BUhM?T{a}wdQo~u=3H4sRY_ttCC8k-DIb&TPlrq z+nlG}PyyOy#SADmNb{&%JiH5NQL2KTKvmQes!Dny)kiO^hU!(-Fj{TH_3CPp-cC){ zzgAOpR>9UgsQLOpwLl+auGa^s_4;VFL7${H>XX$beTv$wPi4oEY3iiDUR~3_Q`glC z{i1rQUsA91%T|4@B=f_DXr;`J)){)3m9z@dMCzKOwR+419bm3C$I&l)BUAN{+I+bx zCscCnjP{dN(`v2qYcZ_0Tvqor7h9dx0KK>wrsn9(>ao)5ebh2*4{K(x*2n0-nOoHr zeYbk2pED=_ukRy>JnRVLA<9cKbvIbj2EPvkUv@qwY4B9DkfhwUph0j*xqPA02 zX5;Fu`nM`fpRTs)Gt_o{rrM#;(nd-G%_Rx7c)a7`J*qZIW@_K6gxWb(MNgut>PgMX zR-ks=93f4$W-?2gE}JZt_12ZRw4_o(ORw7K*(H%?N@6X6bkMr-E~&d*(ss#ZZMUkX zCsWn+?b7>c2AJ?p-eSzD+ra$K;AIW9VGSj(*} z=4!`XM}(ulV}Kd$=wwD&ldXwXeygB)!Mtc*GS53ZI(u2Qt*q8ME4%A~)zT_r9yH&X zZ>=fTB-dRli8ah>$vsMdSpGe zo>&g6fpdVfpL4i#q;rt8=1224tEhR{ z3bVGEXPslLsn&LDt5w_zX5Y%m&MD4G&T-DMRz35+dCq+79PgZ9hC8QOt(;S>i`Eb3 z4fDFS(b`~5Gw)fOt+lSl))A|(RoFaa4X~J*)d+lbAIjYEg2l+WRPr;>*}8Vz~~}@QbE6=-;{ysy=>NR zv7Ay0DW8KbOG z%cyO1GCEroj3HKA>uY1E{-rU@7;cO<#u#IbamIXohp~`8KsRH8p2L`EEOuovZ(6(c z4|=2?Wh}6Uy0W^yaAh+?tu5v#E1@~ds$#COR#+9Saas-SgzDwsAcJMXC(AbEk zu%R1Hl})}=-OVHBQS+F2+;AB_<_W{sh;Jk|k{C&iWJYo$m66&=qop!-8oP|$#&_CK zW1n%r_}(gG95Rj>Cymp3LF0m6Qme^crau@L_3g$_##Q5nanrbM+%aw$_l*ZM$A)Rc zwK-NU<#XkC z6<`UKgRX+cUDaPNrpFk2%&AsRBdzhsP{w|9kLv|X_xxZO#u1g2x6aotF$tu_LT=jKrJ7puSdo$IyX zFbB^|gl5Kx-rowZ_s&Ya)%crqWsKDP6Q)(pBp%-LyW^UF$0owQ-D~&X85wGFh!H zXCvPgvRs?R2*pY{scn$sTBu5-omYvq3o42Bqe`pYQR%e1Y)~4m{Iv)bq`g&{w0A1A z_FjFZYbuYftGv3Q^63s$M^B^b>SA!@NcR4vhmsipdGwOgO7_UQA}UVXm$PG6w*=?nRM zdbK*PuTiJ;4eGSMQJvA(sk8bfbxz-`F6d$EM}3>Rsqa^>^`F!m{mTF0>^-2ZCc3cy zOeUF00%FI?xfc+z!a3(2njN_3*n2N@u}jC^dl!3G?7bI20TFveY*~ zyQUe8_`^f&T4tzS+YGbom}&MJGu>Wm9=F$-8Fr$1!d`D?+8fN1_C_<;K5pK(Gt39} z2{X^mOpi{FNsmpBOOH=ah}MqQiPnwQi`I|2Mct!v&>3?VU4k`(uEAQt+L(jBAM@!C zV*Tdf;E`ZbFgY3(jgH1dW214=_~@|c@Zh~*Zt#BaK`<|vA1nwyGz+8aqKVP<(GAg! z(M{3K(Jl59`>9=MKeM0PFYK50tEiHm810yz6b(pEj*duAv9e;YZuw??DzHu`=k9S+BDiMST|TNSU>04{=;YLRL_9Jcm7Ega5#Jf_9`BWmj*p9vO*V5ExdCoqJSH9+kBbkB508)V zpTuXyXD6q{)woYGK6%}Lt+3|Pr_wf($*YP*;TW)pN!Ij*~Zk71Q z_*WOYHt9q0AMxMuKZxFAoOK9Dm6T!=+qg}Hg`()6=+`)n{)l}zEcz+>J&xiyeK`6p z4x+!JzvD1{B%Kuf68#+gkWP-1=*KvVmrAFkk9z058{!7L>*EK^ndXf6q4?qW!SqA7 zo7>av?e=nexZRU0l8MQ+$)(A~$yLdf$py*f$<@h)$#uy^$z{nU$u-HC>lydcv}2zyeR%D{yF|7{w@C9MJ{t~-BNB$M!@NYga1wrCNp`8iltT~g3IRSiQg~*2fs=fpnc}V+d}0YRh-if+5#|3 z6fXzu39#aTZ^!Vn`y|FpQXuyR@kvmb>j3e2(2Yrq8JA!a5@W?6*p$RbH`t8eJwCvD zJi+Uad`*-i$K-FqmY`MH1zJ}IK{4l$BXc>ME9XLG7Dc!o$o0b0KxQR?NugqQV5Gb< zZvo88P_YFtQa{@fBX-@Mn9ZO&5OWw*Y`PQ9KNh+(F=s<1ufSXZ-IbV|p)yksjO0gF z#(;SaDzhuV%!2Mo3}(iHy@>f5x;Kf%#^N6UYx_YkfMAUnKk-iDyP#qt5Z?|ROt2;q zV7?*8h|dlspp;QN6fIFy8opd(253v?v09y*Fx@w?H)il2-jwhkRjtdwIMv7+ONJsB!>2JB7H z!->5OdIYieLysi(5$I9Gz6?E@#B$$b2-d9d6Xpc#wD{?A5?=|ONSw3<@kJ0z+q!{7 z-$HLB(RWbE6NtqhZzhr0llf>sh#V0^4 z*WFF9o`s)fCi!ggz1Rj$>O|54@f4`o1;m#_9{>+x`xEFx#EEY_Ozi1Uu^ot|Kb%Bj zIX;;J7Fdn$3eK&KI`odp4ZMN2T!+3%jQGY| z#EAdQA@QZqw~6TweFx0NwWwo^@p6ou`vI}?_j$yQfzBu4QqTp&{09Ayga-N%30H!O ztwAVdm-++Y^3YF7xH@zp3AciN2EM>K`$NAZ;c)0z;2RtlfBBY#;)9Dw)CDR&4Z>fc z--92~?%G0sBKQ^o%cjIietseGWl*^W*bFM=`2*W$LjNT86zE^XitqeQqBWua5X^N3 zQhY%^m^auEF#j2tkjT^9z$bEkheibP-|*AD1oNbUaU_3Ecx(gAodyQ^7V>8X$|KK~ za2qJ{Eyy#($h`sPSn<=kM4l%`?g23Gnm>o~XVGrhUYdk^KqarhpA40J0L;(gCvb`M z(+2e?ga<)aAkt@>6-jt7v^|l&8#5_6;UUnKiS*@W6%rl_U6n|`ZdN1V2q^qR2qr)~ z5X=kXCvZt{0knx=t~fBwB)AaTkzoEfFr7$n5wtVGoN{2+Akr@y_>d4@2SvRK(#M&u z1ar^$X%ep)(xy#!g1Kz`G%k_$ zZ7L*Rm#$(Pcqvy4!M}sR&)X_e|2;_f478^rb=!-ClIPwe*$Uc6k$TvGgzrH&RHRNe zBH>&p`m7wOpG`=JKErHE{1wp6Ncb+auOfBQkA%`s^;g6mtpwjM{YK)XYkg{$~!r!6N9t1geTVlly+bLT@wjr-J96`p!+E2LI)5l?PZ{H9&`|~ z(q0BD=R=1OdmwbEawT*au}4Ft4GUL+;lv&Tm3sp({w((c_9&>_Ly+T=F0iLU4^r-e z9!#v1yBUXG^>K-Ig&r;tY+zcvp4CFn* zoJ71_cQOh4LQf%H>?3vrSRKO8eUf~9e>%27{{C;c*x_bkH-_Fq`~%Qi6)A_<2w3sW+ld$Z+(DAnq2hnQj)&f* zNM59lK{5p@elJMA?p5TT_Yo`ge?PImKqVi*%drQQx1bLZI~n@0@)PtCVqbwyA|8HV zkCAv;=u{G~2%Scf7opP${v9TMB9o+_LT7-PNaq;nlLV`b`Fm#m zt~n6f&ya91^jYG?7sMxoPC(i)2w#9IUVK6BEo=(JSAccUmr2kLD&+(rnu(c3WGrl6 zCHU?aKU=A64VAwEyBt*7wjj2Z_6+O=&^MI_pkixaFNDrfq#oWT_9Eyziqy%w#9j=2 zPm%hWOY9}k_X*Zl1M>k1mWIwFVG5m3f@Po!NZ1zoA(43w^AQOdW=pqtIoqtEL zPK=+KBr<M!Gp3ii1M19MmePyD%a$4}p~dG7<`Z z6@r7Ha=kDLBqVqpioE8ay@nZ)ce${Qf_5u)pV$9((4~l75!#N(SO#nCIkr6%^_stP zz~=HUA=n+Dl5Zf-B6$ZB?2b^_D7VuiP)QfqOQDh$kiJCTA%C(h&>j%I)I-hZ$e>rLFOI8CS@YDnIvKj;;EnJVt7%*I)SSf2aBICiZJF!ykGLf-iSRqzy zP$kkIge}BQh1L}G8DS3vej4^9_Hbw~Mb7UH`k?HR&ITlqylhAU$>&DO=Fp9ay!V8g z5P9y&T$^BrLpLM#RcK$(59!Z^_9rsmiB-ZJ^AuF}0luFI!UhSBgv$Md{lFF^f9Kp1 z+ro6P6|s`u*2Kzv(7)vGtY<;DC05cB{|070RD2rPDNv~=LFz)v47{`vsSn`af=V3- zC{MTxNyb8VRU}Wl0r4sM`yM2bH1{OQP0+naaw~Liun)#RlD7dQk}?e>`1cDzI7pcW z9ju%U9YXN$TY_*X@e`oKNc1ptU*g|}O5F%o0kP@+;Bs()au4)C5*-3Pi1>@32PIzL z6H+(AP#`uEh5*SQNM3>7N|H&?+lUq4xm}TZ5Ss%024^7iEa6?){t$XMN!El)+qf4< zneHR;tI+#NvJvzF5=*%rB=NgYsT+Xbkqu=2MM%0rA0b}yEBOQQJm_Q+i`}MxM{!*I z=P}~{gia;#!O&^M{|=o_67iSENg_TqgW$JXgYXHG^n%VLUdr+$cnWnV`ImYEeirl@ z;tqm7OWatf_#a4ihCWY{wV*GML~Q&bN!EqFMADC;FOx*-OX>;W-@yf;+z)ukujC2% zpP;je{}C$r1Ic;N*GVF66DH6E_?xZ51TqKXN~iNZ&A@B!B~HrHLh##%fvu6`NoWt^(N5&qEO@jV+l%1$V*=ZoBzHmk5d5ZEU^gKC zL#Wsq;P+kwyAerlgNltnD*4}p;1~1*yD3QygKkFf@67_+m-r{3{YWDI+@Ih#sR9`n z3WAbvJ2Ys>gsNW~WORIvq&IycMdW8LC+&H2Ox8!IUhr%{y=mn^a2uegkDGjvDro7 zV(>1wgalHiONqQ^%X^&=NWEXK%!OV-g14bp5?Rl&R}uLR!(L5fZNy$fjQGg4%KOmk zh#3x@sC)pup2*y*y-|_+x{1hKos6*rnG3PEDD$DW67vT1HgG$TbM7F4l=n^|^CedN z9z>E)X%8T(L+>HcE>I~yh(~fOznOUnAtmq~Os^c50Gz0D%2l=oHQ--FI3iIi3PAhG?g;7t;VU%W*U zDa#xHUrxp5QXjxe{YY9M5gX4X9_`19uYhD3sQ3r);pZk>vR=@DHvn z!|nkv_|Iw3P+0?NiI=*;NjW8GOl0mna=_!-h0uhUrJyOu0NP#DMp+ixmUz^2BC5u|>>+4F zc@rx2D$D^}fGq*qVYC(48lb&JXjeINq1%G(!AD>Rfcu9hKzAbY-Wj272>5N2K>E#` z&!D>!I|{lR*d5o-fbK!$T_oBQ>;)Epy@|ZnM*EON@-%?pw^xE_AhF^DgOs%h6EcUxE%(=0o=-{xs-tl89gLNBkt{{v`bhdI0g0p$C%mYv@75KMXyXq+dV} zA^s8Qp(OnhDtQ84>^71lVpp*d@Haw7ljKC`7{x=!5*gn`YK zAkSt&zKfCPV$PG$s}(8xHOf=aiA27siLO_~Zen*3+zAz55yZD|BEj9zo0XTLwHjy=%NbC-RD)e;{t_GDl0KsO^ zH;JstL~oJc4Covp^Q@87fzT0%-9aLL_b&0`Q}2;P>_3-ysfYIoez7BnJ|JG|Y#vD^ z|MQhjQ1Kh#EASyP8$drI_>Hz8`k0svp`VbXAM{gVMne}8dH0PzBS!jE@q2*ZVWZD| z0o#tlw)h7~4u;CT;TNe~`whv*){<9{kHr^Z8^~BY68``)Hjkv7K*rtC4@Ac4(T~KR z0R4%0N&9E;3+^Rl{FQiVE5DIc^8P!qe?$LJ#D;$oBX#?iBHMD_KS*;UysvgA;)Crr zC2`vz=+K|U@W&3DlNe>`um#u>*T4rmY)j%<(CtZ#^gHZ8V)#ynok$FS>98A#;VT_> z2YVnL_(F%hNsRjMFqFi|dxv4f#n64haJ)Mw(5p!d8+MpTV)%WB$4Csn=* zK?g}o$~!&?N&yL0fEp6EhlV78pOh>KVS`dc0@+4Bgb+SfawL##Pr^DB`4a-zpp+6> zuPS9EK)Fk8h^#M_U~3_OElNv~a4%>(6397AlMr?)Ekgo1XIT>N16_^;a?bK38~~Ma zg5VJ7ibU3PN>XMJ912~D$huBxWfF{lu0mv;r?e^wMnYF3vgT7-odlzx9f+*|lwfEf zI2+nTWG$uCOoB_H=r06W+bDG+!OhUlMAi~YYmfl_MyU&twT04}B)ApYmB>0nX)O}S zIcpPHCn>E%g4>|$5?O~Rtw#d*d1-wjYYC-pBzP9uoydAasZ5O6zCvW~yHq7c>Y;^% zuR?3YNS*W`GA~~0N#q;WQZFKN)1}_Th%Nh&a2|96V#KZ+l5jqBBVxqH8xxtoE^R`L z*l$x3{s`TS7_ntv68;1gzXwL_D!vZFpP}O4z(`r^MCO}I4PvC+n-iILE^R@K*Z}>6 zAoI|rt%wnOY)xc7y0i^3yFk&O2r^$=+K!lAq1zLgyDjZN%x=&fiOl1cb|OaF*Um)d zbW4&hFo#1WEgnHIUPEPSh@dTVlIFVA@*SCP$J*em4*>3ZFXNG-`SOh6Dw_YKVmM1?oX_=*#n5V z1bQH`(q<1L<{GHn56FCFN$vs6wNObH$lPT~(gNl>s9X>12~cV0z)XaWCiX<=7-A+v z#}b(@ER7>(3UoY?xx><7M7}vIN!5PBXl??KNeGA~$~K;-+W zlK2piIkuAc4KUwB#aDpLx0S>{fcXI`J^^Izt#m1o_1Ds6#EK21&VbBsmZYA5%t4l< zZh(9zRFe7tp_E(d0EA)>@hy-_y@@{o`Np#(J_PVDrh}6B4G30*UQfa{&>Kk59(p4Q z+d*$4!AelcD+oiV)G-KFhDyDHFoH_|4uVynQcoa^p?8pARp^~0bWo{#5Ud83`Uau& zV^WtOSRE?$2jttalGp_V9iaCU^B431A_I())E_W^LmwhR6ZBys-;|XeAwe^A5;1>5 zCzD__bPAF0CrXc!U<~vzBHvS#rjlSRbQ%f8{?kby?eB3S-&vGqkYGIY2_oNIlxC9P zFzAy+zP~6vMFPpg(s3B<&3ZZ$YJv0a+t2NxK4O z52&;yV8vFi5VI$A7O`ThSBcpRI-AIPUFkJq_J+PrY$xa&#Owo=JOSGoD)|6r0CWzq zYe3&7W+3z(V!J@!C1w!xJtAv>rMbimhQ3d1SLg@C41vxgvNl+nPs~v00wU{#r4NZ2 z2K|W0nqlcSpRZ5=`BX#~cku{dm7sSkfeo5>^=vTyuFMLg8 z?WOb$F*Bjx5_38rC`VjbPQvf{PVPLnW1T2jMouSKs6>)rP=*pl2jvotc2B;I6gKR<_ zGpuNGSIF7n)+6>g;C*7c1fNkL?`$KmCyW{+GpzupUzOikB&j|+g z(=>n>)KAkOVirON1EdjM2R#6cMEY{R+#ASzbJJ*o-@Oc)(9Q*!V{Jm)77&{!XhM4y zWFE9>JV{T69!6wtujz1-o&uG9AZx-+N0RhZ=ut%Gvzo-FAUzFw43YVvCb1pBZ!-i< zCje+vg`NS32H(1`$P$lOwsa4+%zpK7`fJcQ#LKpz24#0+nk(dL>kR2)-cmqfO#B3$ZQde+JN2jVRiwVC24E zgKu%|RnYIjk2qiK`ZM?i+Yds2CFW4*Z^Vp*{!Xl<@dvSzmp_S>H2xx~`0C#TzhxgZ zqo~bo@D7grH!njH)LrwkBNk_mnZSg&=tUnc;DX@+McAiZ}UndnGIbTtb%h; zkIk!+crSChd(Zt%&Qp<;IsOIh{+ z19AK==pf=QhK?e!_<+<0h-X8`fg`cK5PB4VzsKJ}rEXAHG5ogqcoM$_Jpr7FdT9q0 zTc3k%@sV@EdDs@8nn21iggBXe-T^f-8`RzoAzW zXQ5Ytt8uM^P9#YQdOe8^^ac{k`C?xX%e};oAo>$3wga)Ga|@Aqy5?Jn%>OmtM&cBD zJCQlR<~vC2p?8vS7*y;IWKOa9ZX)xA&G&$Najyt^A4wmE-cMwHvH1ZK2haxr>=FG1 zmGeL>c6$U&f~`a+6Pd4Uo9|no?)+!ok$G(b?i*i520%kE8FXUb#Y(# zLC0>yq0T#^j}QX*bjJ-z3_Ew+mbgJsv_S#!PlJv-6DPVCal1kHCQiz-4{>sA0C95e zK;rg*O1i+I4R;i~faD6O*b5{Rp+iY>Ep!-3E`{z(l8d3kNpcl*KZ01BLC5_`g0|T4 z0Fqn|J&+)7d(iP9l3WNqm?YOh4Z;I*ujy9rd8&IFhUl9ZwKHH0XF3N$!9iPLdU%M-cpOdC>7ll1LpLMUwW=qe(Ig zdJKS%q|>1jh`S9cwgB!?sFWGFyP;A};3S`7Q{W_hDJO8^=a&N1k9z=mJ3tIg0B)vC?L;LOc0hot27(zb=pI{sA z+HoOqUqZhi?kjxihVz7YCKT;Yh@XX`{R#5jPp73x{1kLq5IT)r&US(475bz zC!p(+_-W`CB!*o&!GDDqcI*WI>@*zP6Y$DliTehMya?`F=*q->4edhQchEIKSDf<; z6!#L`&(ITyTLe9wxbLB76ZZr372)K0!$Cfg+D2UnK4w zsN7F%@;3BS67K>1miQQYF=2JjgHae{*Rl0T4$J$@%C+W-7NNO~UhPm*2&g?|X?1nA!+ zl{)>0q!%v!d7dD>0^5e9*Fxa~LOKy@iANd>U>CtZ4uvlYiEP7Xg(QV~0QH|kVLQRU z32j3VqbOJaI|>PWe8EyASsL1oByvpl0b=$B3zi|tOz5%%@w9>kay>wt?qI?4B$4~9 zK#~BuB1z7IwkQ5O=t?A!Jff`#iQIn`;?bWhKphKyE_5~Gr$bjK{(WePByzlo`0t_3 z#4mt$B#1E{Ea*fMDMx3L41lgd60uDek~{%jlX&>ig094W09}iC_{4&>N%Asu9g<9g zt_yl0|LZ|}gN?Bb7Hk3rVq5Mz2n@w`ALuX=zXRQu_(ehR4eCsYPlUoRgaCH?2EHMf zub}V?A%wlZfnNyrr6BnEN#YIBRcUH60(9FT*AsL* z43gkV-L}Cx!40|{1uFzE>2@6S4Cd>$3sx}gb=wEKn00g;KiFuF)9n<$?s}STx54%; zy4`k(?WIgJ)~J}bc0n!tRJWJ=H*YX?d%G%+8xyQ<%eox~8=!y8uQe92()3;?3RZ=! zc{~o5vzn%H!7}(}naA-v>-c7v+exrqRHUB6)q#$js=ws*jP@%!-D80oj*deKhv4tSQQ9HcJ{ZSF2K(W^Vkaqix5ZmK;S4!8KEJweo~~GX zEdDR~mU>yzqW`9FDAGq1W1PV|H}dnP7I)6?HV$h-DCaf@|E9dn|D>=U{`OxhS5P*A9`t{@Z;_iJSlb$c^bWy)hvL7I z&%?1V`49`seftJG=G)`oPtA*MLEjpSvWV}F!WCjssp&(Y;*I;mGTY<&ZT_FG`M2cz zB2D_r*q{~LW09{zky|-B9^2!vCAB22V;GK%L79f*EGeUS_DF0=o1vYXacp>g?Ey%G zt>*tP)qm|FDM-zZ&8;;yuPO1rqmZ7Y-xtT(N=M|m5?e~XhA&Zz`{nr% zlgg;P-geH*zCX?wj&#Q6DM<=P;_M;8?$|1N$({4NN$u{0qv8kR!DH}rljkx1_jfs% zk#GFxKPkozfia=6CNi;c#+wB3X)@Esv^7g1PR-J08MCZe&Ma?MFe{q&W+g0>r98=8&G#%2?(V0JV+nVropW>>SD z+1>16_B4B$z0E#mfEj28nZag=8ES?hhT3qmpV{9WU=B0~nS;$C__gg3W~3QqMk5x= zSToLyN3@;8%@O8EbCfyS9Fs@hIo_OLPBbT(lg%mSRCAg+-JF46pgs!`dCoECn)A&0 zW`eoETxc#b7n@7WrRFkoIb!u(X|6I?n`_Lq<~lRcT#slfHzLBr&E}TH@o(-lcbU7* zJ?36>pSj;WU>-CNnTO3IW|Em~rkF>~V`i$EW~Q6R%?$H|nQ5LhPa*!#Gv-;u0D9iM zU|uvYnU~EghzInlnQdM(ubVdz8R#uD$GnX=G4Go9%v|%n`M}IG^UVVDq4~&sY(6oc znuUvhcl;~!wfV+;YZjUB%=hL8^P~C6{A_+Pznb67@8%Elr}@kLZT<-ZMCb`a8%ALq zy3iw5Pa0-no3L%TRM;+DI$S1P7Qbk}e7HimV%Q$Bd{z!u30DnQLp+}jVJU11o5PM_ zr?7LlM%X1>Gwd3!6|Nnw6RsPs7p@<63%iHquo70omarD~2z!RT!roz@aD#BeaHDYJ za1+Ef+AQoF_6reTAgqUtaPx2r#8cTS+&bJQ+&0`U+#ZoDc0}}}oh8OfxLde;xJS5W zxL3G$xKD`aF^F$6I2;lV4Tm8<((rJtD z4-bzBj|`6rj}DIsj}4CtkI$n^oD`lMo`U#Fr{S0T&j`;%oTanFbHa1O^TPAP3E>6d zh2cerymU!;X?R&4%jHVMbU_T2@Y?XYaAJ6Uctdz&cvE8M~}q&Mt3Puq)d3b|t&AUB#|ySF@|z4v13NWSebA z+sSseYuGM!P21J3W!JXr*mdoCc75B;cDH3)u~pk*Yqp2&X?xk;wvXKaajQ168{19n zrgk$#u~BeqT*zofpo-2yRiwn7A)ZS1yoJG(vNAns^)vOC*d?5_Bg_1*0rh>)|F z-P`VC2iSp#kvP~6u|w@JyRRK?_p|%k1MGqJAbYSq#2#u#*pYUW9c{-Tj^a2w9x-$d zw?`nB&QbPgdyGBS9*5Y9C)g7ax8Y>OoH`W|kxsW~Xbh@z?74^rc)p!rFR&Ndi|obr z5__q=%wBG1`)PPNnQbo;oSVV|%w?UVK?MC*9QK5L&t+>RFzv*RWE zvVFzQvacf2&ujK|`-XkfzGdgww-H$j(Pr#i`@a3a&a?9+rVL^VeEi=?3WzlDpLhrM zXZs7I#n?aWpY|{NxBUkZT}%`ro=b!%Brft%B9UAW$E7VIxwJ#Pl4YW0mx$;hkzw+v zE{KNGAu1u>NpsW@QAj#RYeZe5H4)8bt^dZ1h$>MvYKdx5kEmzVE9xEfi8hEfj5dlk zjy91942$F6)T2foKWR%uP}(}$CfYXIF4{iYA=)vIjI&F$YqVRmd$dQiXS7$eceGD5 z;J@)7{*Bupade_X5npHIe+abC#x+=OFk$A5CZ#0YO*8j$wi0+H-j~BlxLY+|EnYqD5SQYnxH;|^cZxg5Ys6jRHRG=FTJhTPI`O*kdhz;kx41i^ z=2Z}%q9v{&8lFU?=pFZoH^}4YZHy=tn<7p{U&N~GAGgN!xDjt2ZxL@9ZxwGHZ-eN1 z+aYS*4v4h36QX47B5^Vh4`Yvb&v-A1Xb}&H2gZZq!SRrIXgn<5Hy$4E7w;b*kjK$D z7_s^eWh9Mww8qRB&!`y^=L+%rj){*&T#e)76XFx&lj4)(Q{q$O)8fuFE4Q`V#%=4ibKAQe+>VGwxHDoB?uvLIyCW9Jo`?vtx7$aep}0YA zup8orx?yf#H{9*#_IC%k0}-$6V0VZ+6fwz0=26MUxUp`W8;|H@ha>9Pk%&EZv^xe7 z$BuKyBkI_R?j*z^I|b3lPIIRtn%J4{EW{Q&Cyy?6zMJ4Ka2F!>%Ej&ycd5I~UGA=M zSGud*)$SU1t-H=mbl1BZ+>P!gceA_2-HLc4x4S#sorn^0H=>2y>+VCekOwsG$Rmgz zGTBW*M3To4jbxge?jCnD+!Jo5d(u7So_5c;XWet|dG~^Q(Y@qecCWZuh)FUV@km}r zWRf=#nPiT88*xb9b?>>k?tS-xo9E`c1@1%lk^9(v;y!f?-DmD|_l5h?edWG(-?(qx zBE&cO-u>WybU(SD^GGMZA=b$sh=KB#``i8F18;ojt&e;xaaerfQ=j=ZzO7%%xARN; zW&E;!IlsJL!LR7s`<494eigr}U(K)XJNS}s^3A@Z@8moCHGCJprtj+4@@xBb{JMTU zzrOG0yZf@Q_^NO5HQ&Sc^u2uVA~uQN*l*%D^_%&=zMt>!TYcR({N{cOzop;GZ;eQ% z+xqSN_I?MyBVwBF?050I`rZ8Qeh9g{{8@e zpg+hT><{sW`VoGlALU2;F@CHc=g0fQ{Nerxf22RkAMKCv$NJ+CgX;uD+d9dg>`(Eh z`qTXB{tSPnKg*wuc!=lv^ZfaKg1^9D=r8gY`%C<#{xW~LzrtVXuku&>Yy7qTIzQ20 z?{DxoO1wUQi@z0d8E^M@_&fbw{%(Jdzt`XA@AnV*2mM3-VgHDq7Oj(sQKso^Zo_@qJPQ1jEHu#5QA@a9)<4>|E7P-&+%{jcM#R?Jw$+c zAJJas`T2f<|ImNrKlY#aPyIr~hWR{?AoG>~+JED}^^5#>h!XRI{}B=Ue)hlkU;S_X zcSP0u6Vdhl_W#HvWfCS9vCrbfAtD~a#v;Z{8^n`YDrtuZG|M2m%yNkFw?eWa;_0k} zIESksD&cC$>WE8NN}3RZup^=nB61|63$B@TMU=p`5rt>nWW8klq+8M*@d+zQHEBs| zh$z@I>4j*8eUc554U>%|h96=eZI<*+`X&97R>b0KAll&;h*!5&vURczqOxs=7=1e+ zqUBDAKDZ0w0`8XVp6rqAne2r)I{P5z%|Jxc8H{*@Lz7|2zKEH(U$VbM?Mn_y4o(h1 zOvMq&$YfM98nJ=KCgTtx>9FK*M0q0l%b0eW$04G8oC^jh^|BoqN@>e=vu@dnwVUV7>YL{`s2;X zEy=CPZHSV12VxN2g}8(FAm-qGh*pT$g@{`CFd`C7N+u^$5N+-;MD&@KOh?3@8Oalf z@be_%5_+s)B;`qFh%tBP7*@$HLdh&)uwoK+oOiPJXDbXpD50ZJw z{A58M)$!xS(G@>WzDT}IzDmAMzDd4K7A4;$-zPsLKPEpVKPSH=zarw{f8rgcVQSMT zjZ>HUG)dDmOWUMv)1}gO>C)*k>9Xl^>GJ6c>56Ilbft9Vbd_|~bhUK#v_o1-o6_dA zW7;W2z~U4!64S1XL0Ci@OuIA2VA{gCdTB3-Oec}(B>G&sNxEseS=u-4m-bIv(|X!S zH&3@nw@kN6w@$Z7w@tT8w@-IScT9ImcTRUncTIOocTe|7_e}Rn_fGdo2c!ejLFwRh zNIEnfmhPJlPxnjrPY*~BOb<#AP7g^BO-H07(^2W@bWA!n9aqG(OOH&CS~A92dSZG~ zdUAS7dTM%FdiuXnz!354JjDE(kY0coO&1}`*CmMaby<2j;x%2#m|lq6bX__zy&ln= zZcK0b-{@NZ8(S-VFnuU}SmIx$lO^I+`dB(Oot92dA5UkbPoy)`C)20Wr_*QBXVd4> z=hGL`7t@#0m(y3$S?R0k?DVzt_4JMO&GfBwPWpEGPWo>8UOG2@AMrrvrSsDT>4)h@ z>Bs3O>8I(!^fSb({387_{VM%B{U-f3U6g*8exLr3{+Rxh{+#}j{+j-l{+|Ak{+a%j z{+<4lAvjbPW;TnmICGiLk}S=#tWDN7TPkapEuAfsEt@TuEuXEBt(djXR?1e+R>@Y) zR?Ak;I%K7+DQnI;W}ULm*&11wY|X4|wpO-wwobNgwqCY=)-CIvm9t7#&04Zr)+6hg z^~!o@eXJ(xX|J)Av~P0A)`Q?f_1 z$Fix}v}}6zcs3(@BAb~#nLU*~ojsF1n?093pS_U1n7x#}oV}9G%3jT8XRl?iXK!S0 zW^ZM4vbVE$vUjuhvbov&*$3IYY<{*N`!M?``#Ad~`!rjaeU^QmeUW{ceU*KkeUp8g zEy}*jzW3ut99S;bD%Acp)fUyVYVr4~?)S*G(&#H%ua|keQs()U#rsUJ(!Z7Gx7Mk3 zo>$fLt9pL5+Ee~ssq=WH-ZwuFnx_xV(}U`HeS7o#zIi@yyua?}_o>wT>Gl2e`hI$S zzx?`gOCOf2r8m=Sl$lwD{Uz4iXR_5Qu}{=N17y^H(je@D4^pK^bevr^ak zY4Gp0R;}ln+J*Lq-PJy2URSNr4=TNBr&@*SwDh5t7yrGNl)qf=Pp#natkSK6ywE$mfg{ndFL@^E&LaKI;{=gZfLI zegc0jj%&I4tN-@bdSd&m)U{r#HO&|O0QJuDwG@7&_ia?vpY;BXiu#l0qft?RqFpKt zwM(tS^lI8pYi0F=R^GQ<+@I|T<;(M3t+W*Wq5e=;JN8k3;(f~%o?ot1*$ygIt*^S4 ztD*kLzoT2o{|?R5f#!dQ=J|x?*Fp39Li757=H-Xx_J?ZwsA+w%-jEOGv&wv-*{I!l z9Q%3tP}YBi`{kPYeU1GT_UTtO_E+#jmZzl;?a@-SZ}pc(RqKc8!fmyFs`Q6ORqLlp zzi3poz0+?|Uo20psK-7mSEG-n+lPMFV82jl^wD(tXu5qg-9AOS`QKq)mZRLC$LqX* zxx#Y54tieyLi6;{uJZI?&paQ{!d^VDQl!(O_0IIsj(C2xXy@vWb#0%OK7}2buNLhe zTD1Rfv}n0owA@9%%YLTPXvyyn)pECJxm&c{t$KZ{Uf-&AYgPMdJFhMFuRJ~YQ=T3) zPY;@>S4YPs{US7PH&FH8iuy162^?4dWq*Nv^R)#6Im&u4%otXuDy1D!25??_aKIeU@uH zztY0`tJG=dI_tkuXMX`@IyFA`;eMJv{Tclm_tC)e=S_w6T&@()5v|uc?}PM;`{dVQ zU$4{gPL=1wjQM%+clt$L{i0se{+G{5+?M{`!uEsb74uWm{;XW1-k zHMajsL-WPwT&2!_6j~fF%FX*#)Xp`1{?zDi7)Rvwg4?p+tZ6@6E80b`qP=K3+E0{g zte{&q4h=$5E9!^9#-W2%484s&>`(TyM?uh2wfX z$D@_{;&Br5*~0#?+)|9Yw0;`w7b^|c3pDp{DAR4IA2nFd@Dt{zq2rsHKKE+Hb58G5 zW4l0os{L4AJl@m~duX|OuwHBW+^^_!rloK0ca?_Pz1)L-Sk`nZydK?+w!Kvd ztL&d(XSG+4JRjIsd-cfeQmwFmfznP@^@nng7Pd=Xhx@SpE4;2;=}AAS7ULoASL!{r zUVCc!dTPD(Wd3S=zQZr`_EV|zc?G-V=ObPEX@%F9tHn60r{=$>=D(-bcQ5r07iHwzo3<2;IK+gY+llgZZuSzS!6D^SFddB&* zccmZws@$smnD%QGmKTq+;=V;WbiWusa{N`PYkRC}ztz&0_1jX6pZjV%=6x%T9>sos zU+m|8fcC|5H0pW&uupq8>iPM2AJ+U9?Vy*IqZj?9(u?WU`>5UcJ_Wy~KUZ}eTIr|x zBs({PW$2gLj76CXJz(xxGp~q)qEB0tS`$~ zr(Mv07x&e6*UENL<#++tYko9e<)UBhOM6t+E)`9u!gh^v=k~+!N%Pkz?5KXU_`aHs zK5uF|eyr(pr&c_tihi}u^D7PdO^xjg-}~7P%ipOw%2l{cVW+5@%~?^`UA(gc&*a&it&@S=c@LP<+}CmG${tX1j;K(r+upee`{~!tpzX z{o3w1UPt?3x>dDPRp0ySybk%*cB}8}b$w5->w8^Y=auT5M?!nn_S#R&-9PsijEl4$ zIq!je)=!Q83b$cDU(@kHZSixbwe6r$L&l8jw%?$kL&grzjaDum#`@A&*O$mT2La_O zI|(=mZ&KBVe5Gj2%sh;dXAc~yOBtgzF>{j^aQ zomKHN$9&+vT0c4|P%k=RHj26qnxWe1b5M(Y?ey8{VP89a+7J8M>2vUaeYGR~7W=Hv znof31k|h?C^(%1IK&JO#R%P@gev;7iC!)DFT9=QTGf}`Dm(phRoh9G?F9R3x5BTAmw2XMsWW|OZYQ*pJYA^T zmxBk~PXEq90`|2Z(8-`W2je)d*K_cLL3CbTXns8=`wOMkWSqhioNKZ5^ieH8tR-mj{I+Nustt9(ho`P#1)FHuE5ql0?9J+glJ@I=1U z-*nJj=lyUzw9AkY}xQK<9NiC8xtN*eciA)_$&{{YFLoty1(`#iWu>MpcSQD1FJU=*x9g z2Upc%ki_eef3W517=VCKKf$q39@>!7|Ee`)_yu2cS{}D7UNreX{mAY4DXJ`cqO+x&S!hB>A0e%&*Peo z<7+x;Q7ab3)IV!F?yhP5*SP43NgvjCO!^z#``)+T+`=$O(%|fNEeyq^o zBn5`YdA&gCuMJ&PZ|G!4gNsP`JKJ4D$9oN(L~Cfj(a_1XhV~x~om6YEzrh+pUVl(c zM?ZFG=%i0WKYD2BxM4IH}oaEp_9rDea<&@alD}~y$$uJmg1v~B4367a}f)RqU;A6x+vSw_qK*E z&NlS@t)Yvw4SkPm=poYZRjFMLl-|9`f}f*@2@TW)Q|ab0mi3lSDh?w=zDuhF&WEp<2?2QE&7pA zi+)tmqT_-VU0iC>@pVHNEgCxhZt#5ylc?G*bTOl$ax9Fl?i@uk(=weYr7abZpPHX7mLqo@F4PAt2=(w$+^B)Zz zzcq9+yus%Q`e(JDex%gk^99G%pLG1)(2tfHI=R~5a}uu$YLCT>MCx~ZE@OU!cCYDt zLydldxj;Rx&%v5Lw`#>As*V$DI0c zos6q#KT*?mR@3*{8sA$ne$wYxv3RQQHML@VRoGSEM`}7*U(@%SS}{+ewj5d@SonB4xEpxtNq>e}rkBygs1$coLJ6c{#A3 zj~k$Q|AOOre}nz}KG-kL*Yk==P1+IX<^G8Ca{t19-tS{yuV?rGM9PRGH6fT&I4>=QQ^9{`&r2W`6MzM7eGLF<-TJw_%tB)}1~}?DXijLva=THL6QR=E3Qeabh*|)gFEOYAOHCF%oN8Trj!Qk~_5}cB)JK1vgycFSR8Ts4lrv z>%Zh_OWYJW$^Sx+;4(RGo_iX;x+%<|EkKK@p8?@K?E$zfk9}>aY-#WmEk2(RSdGvg zge?t!S956#t7^|$)sea`o591hrPG69R`skFHDk-ag}`fI?%rso+B`Vi!cvenGj^-k zS9dIie>$zv!sdg_X}6}2tHoZqRu%)KcE>K(#`2+>Qktb^d>A4IfJ8RSfOp##bXwkGuy4YlGVzp#ou$+sc9l^HhNVio#i)bz0th5PKbw;_W zp9#0p)o~wvf@u5HCpqk@?VC?9oTuI4|Hs~$z(-MJkH4pRvZNt6tD#sQDhxO1rIb{s8PoTA%GghYehwk8WfLlQN&|V#0y>5gLPTg zUDx#gTV2)3DER>eYL%UR7613&ysp@6v*?t*VsN{A?>rDLo6y zMR^+1!tuRZF07UMlr0;MbI-%tD_3=#^i0|B9?x3oC)L6#mYz4m8ocwV@|PYf9bM}B zGIGVXEdQ`2si zoNbk_vIWkz%2(L}XItf~jL@>J@>P18Y^!{g^27DK^GSIPOHZ8RR6a>hjpJ0hWy_dt z_d2ZId||Ef-K$ShKG^S_N9DISTtIqgeDCH1qv%~ZV(s29Yd3#cyXj-CRJ3gAu`T6U z4fAJPr9-x`*jDB5^+d{^5B9t1V6E~&_Po$*udXj!u57F8%ZL`+>iXWW4cVe)zsd(0 zxnW!7gNzun?aBdbl@GGVhHZ6yFVZesmZQS592`Sr%jyJcia@$GDK7hE>b+QmH7U=iIc{k?tQ5$2`5#B ztH#nq)R?qL@$eSHJ!IYY_v6(0-15L7chgCJxIg6(_r3{`y7I)R8kz2>iugssPf38s-+fHeoa)hRH9xBMp{zx*UfLtlF}=(h00S+YQMZ+ww2zJ>15lLE7q#~ z<$bcP^oYEFwv`@{_rtc5BN@3x4x}DY!)>s_O8&eaQl&rDaC$>a_!86Xdno2q}7!(^(|V0;djsm}MVrnGgwbnrM{eJ^V>+bWgPI`DgS z7t$(V#MSwwQ!Y|n=kAbnccZ0Df87_{MBN5=Qn$hF)NOE2?uPt*))(Ae_EB}M9j>3{ z)^Rg+hv7KXZE#!ehU=jWR1K7YGNw+*)UENXWnT7|nwM>v7yVURzrV5!{iR0cdzp6w zl%(~SniJ1PN1C=v9KuPQXC9xyaT8-hsQIq!*RV^1)Ga1({&l8nxU&d>C+w%UR$^z!A{7^9g zj+6JPY9`z2c$E(-rWa8IC0Q$3Ql4ABijAngGSVk&UcS`mk$h(cY)hF{eHv`bbgMoFw&i(Z%2LFn1!ml|%q`sFwz|Hwz-+7QOAE}lyk9lYoae|?I#jvGlxG%Go>feh ze@w|kOvXg{ol1x5Lsw&%cn(imUT-Xu(m?E&o=3jaq>Rs#o`-s1jBWS6Sxd{S#vHM& zJZaf7WxSj^k4!fnwmOgM`_EScFx3Mh{N9yI)^5JAR_TityX}=|Sg!KrDk4`=xr)h^ zt20T6+!`oXgXBs!lA^=qmTde)N6IaAg;8>=#9hVY^&4{tWP63Xkp4`*8aAp%K=JgU$_+JaR6T~mewC{-62!L3RoO0LTblfQ@BA`y%6^q= zGHk-OD^0A`^<{gAQgNk-wYt6?zr-l%-#MnIT-W=ZI-d+XlArE*S*z;lxut3Vhcadque|S=YWAt8aY&!4<}$xA0`h($YSey2 zRja6UR>;r(yN^3(^5j!b9XIauDd$a{c;t7!?JKO2>z^s=SuY zDQQruCp@CfxC^FEoHS|Txbse(IEnMNuHBwE&T9n4yfHmq4Oe|eQBQ+PQQh{UMHbH5VF4X)q~j?3WrTB3rr)ags&p*;{XHOjPxKMbwzvSnb#_b-U_8 z`h2CiB3`6I`iW=|FI%LDF$hSu;G_@E7#-J-V68NbcOGvHfa>FlD1RegMVh>^ToI*l zBTAD*lqkm3`D3c(98qI4BC2mOU;0IaB0bHiL`3ybN2K3I6_O$vQGIbyZw!&@dyJ|v zEjV!QeMME3j@CxXT@6T!&COpT8i8j%?=7k?+rQ!U_OnDuw@;=d1(%eQ> z$FXWukjb98m%od8`ctJdUkOpZ5}tfdFRKBE5w(t~FmFs%qKIk~;6J#HI`z~w>2S?D z`cjrt)EkH`%@p~o^uOx(jHm%x5l_gyfm`aS;i&4_$XCv^dU}wD{ZxJ{=R04PEBoDY zWbG;u)>40~rz_cZD-UZo9jsM@TFM#QZY5(a@1u4At8yD6-T)xgfgSNW$W;U=<~^0D zI?SW0<1(TeANeZWtOi0NPfA{-^B(aAj78Oef~Y!QR6R|q8jsiksf?oP0g{*sALpxq zkP+1pA60fFUn!}W3ftzZj@^9ECP=$S`6#6<8>QGwS8k{uZhrB-k|Q;cBI*se_MVnf z$|9oVJmN*j)YCx`Z(z2nANf)VbAEY05!C^oufpkSKrG5gD*b3}H=UF(M#4xXt>lH) zs@zs~J)-=ThzesxRDMU4GK(m?PR7gMDfizSm>*FOYDB#H?im#?Y_IHkL_O^k@t%tE zp6>Pr>MLa!@#=$m03hNG7*%e0#5W&4 zBHn;|)uA0#J$6ymfgV)@K%!~@NK_3BiK=d%sP{CeSD&R{#`pu7Ur}YWqDmh{)xhnj zY`$=uDmP`6qpH3{z51cLb)ueePy@)Ls`(OC16!i1*$`FTMN!ZHll2%ml}0hD26{)8 zn;caGw4=(Mj;evzQRP-g)d1|MYFJ7wG1GA$_Uq_Xmj;iKFR1Fk} zdj7R%AJjm~sL~TrRnAdW&QVp)QB}@SZ=kIz&!{)RQk7>+_?Q}a9`l|a zR&p3qau`$Bi>d3y)Olm_ygXFx)+@%9yY-y4YmZpF<;~jFudH3W!rIjftlj))?Upxd zSFf>l>osfFX=3f_Ro1TlX6@Ej)~?=Rt*$Tq-uz-UaIaVm+$&ZOq7=)3Dc`H>s{wt* zGQZict}pYOZFPOAPuW)2m(C{J>iW{I5&Kg2?{#B(-ICJz;d^!eQs1$y?q3b0FIG=M z7pnpF#p)^OVl}Y7SUp`{tOnQ@OJ|z%sQZ`tg4mnNe>EVkSPh6PRs-USr5tgbx*sVo zY^(cGh~qG9-wYz`Ikt4hHY8iCDQJ& zEz7q=)&mC8%JMCd_ML5ce$sJtbaum`YEHlneYa^?M};C91KY9?0Nf zW@*3FfMmAa?@$lOu`T@*^)x@*>b%~-B&iqKFZ~(y;1KC><&SP%wf4H> zWw?TYWp25!R{ofjdxExZIWyUax~`NnCQ)$n3I9@lub#qZTi&1YrS<}VWqOodXIuGOsv9_8bpsDnetEGh&*1~4Tn-lZRBI<#Gm>QTI^Md8_y7(jR zb!c?Czh_*Tdp_J?Hy`oqd5{mPhe6E+2E;&tiFraT&|G26xAt^rX#LX*|wymGKPA z=ZxoAt~Op{`G)Zh%XbaZ#;oxlu>8pQh~;MEQ{3GH@l!s{_}uydiJ{%bNl>v1EQ`mbV8eWoBYt#*(?1SuPK(VEItsA(oE?D1GK$ zewyWTfmc|*7I;nb2i^$0!RPh7l~8A9<@ee1Y2Z_qf99QqKIT&b0xRr^Dexb(8nyv?O5)?JAHl3mE3`EnJt;m%#zHqdoCp_=0|4PC$}HVXl|6{ zpxi+$N8}c>WDaDOhvpv2@^`tv;|$Do%yKO6HS~%3j`@5B?-KTjS&msw<-Nr|W;G^1 znc0~9WOm~V`FwHi#eBXr_fkGzpG$pVhGOzo%uURaxrkXl!Mlxp%t1^(Fb{DRM?TA& z6n)G@yqeF7d}Dkbm^Xya!}7Q~bL!6I^Cfwd z4)f*S$g(`IoaJM@Y1_|Sx6kmIS#A0JdfuBX-^qKACG*#^|FgW$STbKNOXjO}^?}d{ zEqH_55t?3Ha@ZKH^`ukJo1(SWc$c82p*48FAjj#Nf1EYV(%PMU`qU{}r^%;I74J3^ z--th-Iul1R(Y5X%`R?9a)-5zsYs;~^))U1009$JFc@NzJ?Jeyl?H%ni?PcDDG)LQj z*7*zX9Qu;C=d9vACB?oMct^*}zBT@Lj2^z1&Gu${y#sTJU#E8zlBoAW5^vKF5HhIe zi#fve2=jyAt;d)h{2{%6;E}*8eT0xZ{SfA@9;c5H<)$AkW_Z?*5i>mN$1%I}yZQ;t z@4QhzkvW$4(NAKQ<*xe4%&)wkJ~nUvy#4i4^7`cU(G$$C9MMk|^D67(nOC_$KZBW- z3-vQaY3LL3X64P&C+1z8cd>pJ_m~SUmMqnLE#`|{G)opA@qhCF)MEL6;o=7W3yT+D z*jigyT>n3DL!zklZt6GQZ?|h*(PLY`Y8`A{(7Lpu$CO(e|F=G)qDS_B>zgWiOx`$o zV@360i?a9s*ylF-lpChp&?ekwv^diJY*+Lc(!0%9Q*QXN-&XVpmU#c|j$52;_lI_W zSe%sq;#0dj+HGuqT>BePH}e064xJ~@=rF(jc{^0s-)?Se@{IbqzN1?mzVZHl{FjTL z>R80ib;n72ep^x9$=+*h=S6#;R#Dw0xzEsw>R^dr$Nu+u!}|}G zEdD$=CRpB84{q}QyXs2{yY}eXV@aX-U-WU;0bN&$|3x2nThw)Bw{G1Qbz8LPH7-9w~e%pfl{+g|sbus9X@F#DK_LlS+(f8@Kv$Be!s z+IsXI_5ZzlKYYyLV-`lDi$>q!?WtQ&o-uhw!N<|pV{;4sz~_yVXY@a!|HA_g8K{YG z2F@Q;bYSZP-*CSZ-->^Z7vG8h!6k+5M#b{O`Bx>dUF#!SRV*KU#rFSV zaVpU_`)D_B7mjH+rkzNmSa19PsN=@8J8G&pMl73?4!M6!UzxXK2B|!jIlXbr4adhP zZ}epD?F5vNoyIfCVf_5a1bMBhnOVx9ee%9gsVL|=}b{J3Fa>Td_wDr>Wb)U31oaue8rT zZ&La8(tVR2-@*T?$%id|YDq8gKe=S`VMz1F#Vab7%lad>CT|o=mtN}A=!)fH zkK7VVQ3EQLFS!Q!N%8yCk|P#BHTjDvktr8p`)+mZ{ZrE~opR5Vl~dlFvSs>d(8 zbb8tJ)byp(m(RFqM(TnY7hZAU7Z?6(@l!K%XYMgG=>GSb8Jjt@qQ}go^WL8K_L6Jn zy?xQQvj!wbCr69*thW3Qn3d%J&BfJ=tN+lOZ%#^{;c`*(ih1A4|4YA{_x9{AoPq7x z-+6n*8RfotZ(p{@Wu33te9h)7Yp$%hs@2t}EiAtJv}-nBJwfaf|47B81@B(7WnRa5 z71w+_uYz^S&;DODugkomCeK>I73=Qbv@nJ_7l8iqA*5 zQrcrNzZ11*@#p-GPt-8A=Cf;&mh`GviXKKr_(e76Ds=1gHTb62LlJ)X!T90B@WWrx z=4r3;|CqKGfBbQ6gZ80Tt$m_>$~S-J|4;bmv$VCo+w`M+qulpHYP=tEEbp^S=%?`> z%kjL|u@&w9J9ryqink{g^Y+B=c<J1;3}^H%+`X&wqhv&HHE4ns4c!MQeT+ zf0B3R?d89OcKm4nJl;fing2=NEVs)47H@ldopv+akQN?Hk^hx0V0?ysPbdV*u}I(~W_mMQ#-EUbfc8U~_k~ol(d;**Y0R zc^BJ0#z^t5HKT-gtwoJEZ(Hkc9L(F+1{sI&wza{=q2>^Ch;bNiTpMN_ZVoqx8%Kz@ zt{K1Mt!pL5k-T>;Zj2UhUNepoZ(cKw=FMxPjbnM!+KI*qylHK$aiVy$nsE|uRy)@i zYo2GGXN>1PYO{>fd5hY`#suD?cBwH@yg|)4i#Mp18r5?hTi`a+ z$J?FmFm>MUbeHKDQ3TTvQ3TTz?{hK(0p8+d=81PWnJsC@y=3mf+nQc6+lvT+xd-n_ zYH#jIyMIr!lW6gqdx`fTnVm)Z-t0pAzQpV*+V^HR-f(od*`2o;onZFh%|&OL`-(Qb z*;BL!%@FS*nq%%S-acgZ;_X8>nZ0@c(0sEGZy>VGzM?g64x}Cbh*`iJg&s2pi#EDh znAbP2uQ`PG?L^I?vimeZEwY`&SqHU@#QI5Eu%>pa_P;2q+~*+nF}~us}dRjCS)HE#d2`?%)m9>ovY&d3XWVz>A>rL;tt-p_eD_*$Nt*tsv`c1)QybvlVc* z0?t;z*$OyYLDty{ytDZ_@h|@0Q81F&=>ka81f+k zQHa3+7zl&lKq!F0PzXa{C=7$?a6Zfc%FTBnPbo2$S7K}l zqWcNom2ef@N)6+@`fwNlBcT{Z!A)>8%!gY*9D5s-LkjK!8y3JqxEmJ1Vn8-r9YpyM z?N8{hKpI|!KLO>XQ(pQycmpUi{Y`ia-hm8kfOp|N*a+{#Cinn8gpc53_yj0p{WGAP z_0Qoi@CAGcU%}Vt!Kp9}I6wUd3Hl8Z{(r*{TEg&y0Vd=^OF&KxWW+#54CKSu13E${ z=nTk&L75Y|PnfM>7dQf*))G17Ne)vy{~ z1oA8Q1fXnl$@g6HJeNGry%WfDqRWXqGFtEs>)YVizV~1wyw7isOKR$`l0 z=3eF`b1!$2T9+ozFxq+E91HSHC!06%`DVBU%1P}4)(c?~EPqxUrn%9x$ zb)j(tG#MB-+J=+O?V65hIb$Xq72@Jta9*e zV*3O55I%y>;Lq@dV;gy@oX(cP!btRVm>92p(HYtM23>cP!c~NJ=s?(qck#G%!Ywh$U)Xb%DA5_BqumT={hv5`SV~lpD%M}`!9Fq`>){h9GDAN!c}lJTm$pqTDT6%;Ci?LZiJiQ zW|$ARz^!l_lmplG-vM_*3hn|M7QjNd8v=EYRZU5O)to6%IsgRc@Q~S%8)il~PO2%0?E~B7ZMk@bvy?j2hUg~dmY$fqF z5^vYu$!tDf2A9JXz^{>b8;Q4(cpHhgk$4-4w~=@oiMNq>8;Q4(cpHhgk$4-4w~=@o ziMNq>8;Q4(cpHhgk$4-4w~=@oiMNq>8;Q4(cpHhgw;}OD4s0aeMiy*j!A9b3B;H2i zZ6w}CHf$u`M&j)sk@%g<#h)Sr|M#gssF4hOgB<)C%YP>{TmxOO!{ytkewWtPifnE4 zfK!StE=3oYqKiwFE-rI5)St4n)a!g+2XDZ7coW`&x1BO1vlLxiiY_ii7ne4X^0wHp zwr-r`VzijhWS79Du10HEzsu00rP{vPW!q%RWuER(N`Gp~w9eV75HTOJIR4ZCCgDcn{cfVe@Qko@EYVJrWLg4lzr$j`j5E9P;>DCv47Vy_B+9 z<^*fcBD{i~KTEFgV(O*ga3|$nA1y1csfi=3Z60B`=aB6fVPBJ4(3j_w`C33rXa&3A z)x@2IelU!IV___u3a7ytFdJ4lw~Dj*+c*jTNGDCoVe8p7zxEN3QFK0h{G5-8jgWu;W#)RPJk2PBsdwy!YLr) zV5h=qFb>AU>2L;|2@_xa&jMHI~cO>2N;G0LqOhnne`NB8p}aMYD*aSwzt+ zqG%RTG|M*|C|9Cr7Ev^dD4InS%_53s5k<3zqFKI$PS|%hyh+=OND@&si>R7KRL#;y zLNSa2qIE>pEFxzh`>+W0%vnU{EFyE3pKB1Aqu&pY_us64&@7^J z7STD2=$u7#<Qz5uLM$&RIm~ETVH3(K(CgoMm)^&VZ~DowMAQbRHI{73=~>z|-_$ zkheKpiwK=Xgw7&DXAz;Zh|pO?=qw_177;p&2%SZQ<o*5uvk)&{;(2EFyFk5ju+q zokfJsB0^^op|gn4Sw!fBj1NcejDV3)45Od~4uUw0furFVI2MkBN2t!~f41?)#KFk2(#b~jg+!s(!i*XG!*e}s9kVFIhdin*V25Q_lAT`i` zXaB&yu4WOosXr_rx6w_tc4HZz?}2-vag@^1A7uYSP(NB}=_}cn9kE=+_LCqYm(Q>! zda0u?=_|G9E4B1BfX>v><3bN>gXp_WkfMa|HZAEZhuh%}xD!%v7uc`>7Q)@Ih&XBe z)F)Kxn~t%{)HjT^mXZ2IgVZNTeL|()jlGik1gTGu`UI&@kop9v7cp7OXr(2MU7;QH z0PZN~uUay2FWd*B|2@y`855D-2jL;`BE4K)*gCTVN44|a=5YUTJKOG}R0JJux()WqzRN#}5XW@ZZoAZPqJA5qsfo7^j3k>_%dQ&fDFMIlZmz z>*@brg+3R3Y|GFVElJf3tkMjgRGfiDn1L0Tffbm66_|k)n1L0TffbnH9^J>atYc{_ zUjSHGTI_4lIBQ)?JCJoD41p`5&hlFH2?}d#(I;rpCuq?pXwfI=SzBSR#Mmthiy?AO z*ehXeE&2y7`Ufpi=UH1}X)RJ|>8pu(HDPUCdqr!;?BLUA>8#cA8>Cu{*6~s;MxJat z)#Q>plHgv}P2YjEb@lJSRu(t=4m^u%;V%e_EAAqp?xJa{n|&91x_80Y5s|Mx?6eO% z?Ms6gS0a1_nZjhP2P5)R=B3Q1O=?UWQt3YpSxr*Qw!k;=y(gM^ z)#~y^l&rX_%m;Z@;V&g>OHJHwQ@)W(k?@h+ws3Q)`X%Hp>3S&jOYP^CJDHbWZK;#F zwLdCzP0N|^OPi`G!n3QBvnoCd*^;$GdT-fs)ays(XbHa-^|h{qf12cr6nPRa>T8`G zTD5XW3LD8{RLP<{!p-%Zo0j}UmT#Y3R}+m!Ab2ub-?vZfw0B%5zpj6qbvKP`Rzoec zy}DD5r;ugQT&qQR+@5sQA7ioYR*UENd(zUVGnuZc8U{9D{XICG;XQL z_LWR&ed(#wVpy|A(zCPrQfjW|uGCOpc64QQN9wp35hL43vczN?N#1u>ovpQAUM=`> zjoi52HfM92vRLB2o42`M{oN5Q-c+6L{G-~ZX)7k{==PM#D14QJ;9%Ehv3T~{8!t_Z zTtxguRv~T;jBL{eKzABug2o$)&5e%48$m@N9(6b_+NNe z!%5Ew7zxEN3QFK0h{G5-8jgWu;W#)Rh}!;YdxwaN{AzoMJlUaCvU-Zdca3Rcui{KA%F(lyo=X;GT(IznSXhXFE(Q`!n-6SS%(x>D0BB71` zBRxrj{wHI5QsX5w{8{?Me_cjrYIzl*tmb)>4q|#chqYZa(@i`z;zr z{(t^nDzBe>ho4?i8qfNro?>xZIC*Ha>?c{IhWo{zX7Qb(={$|>2LnvVfdJ$}9<+d# z&<;aqJ?sG;pd;)FonSBM40}Tt*aw2p6}mxp=mGmePuLGaus`&I z1E4qbfxgfW!jKOUh(Zkd!vGivgWy0YfWc4*LtrQj1MxqctBin=Pz1P+2YjDe%! z7&sP=gX7@@I1x^QlVL2J0tq-3PJ?kU9!`fd;7phR6X7g48z#YIm;&d31?R$4mRBbm0j%U@=s{5?Bh$;2yXa?t@BL4)?cX z^%P>%Q;1PdAx1rgv`^vBT8L3kAx1rg81)ol)KiF2Pa#GcX^%U~$4P9U#2trrr2Hl|t>?VGtY$1uz&2VF(O`VK5!ehZ#Wm;m3yXV?+3{A^g}7eryOoHiRD=@?8qEf%0Y4 zQ;1PdAx1rg81)n)t{w7S1-EJ;{Me8_97e!MD27pR6Wk2*;T90b-Uj86g1f+m1+WnA zhDER#kdfN9DP@Gu8N%lb;d6!zh`>+WNz=)DQidlNER0y4u$r4S>PLX1=jF;XeSNTm=X zl|n{mKt33$6vEdGp?yR6nj!qlkZA4VUxtX^hjO@14)>G8{p4^zIb4&GN+Cung&3(6 z3Xq?H=b#!^!;3)PF;XeSNTm=Xl|qbE3NcbC#7LzOBb7poR0=UtDWtXE(cWm$F8{F} zX>AYAYSG7S(Z_Ak$8FKaZPCYV(Z_Ak$IYk&SO|B+B4Fg481==OE&94G`noOpx-I&; zE&94G`noOpx-Iw2Va^=p%wf(P=FDNv9Olen&K%~P z<}hatbLKE-4r?8DCe7rA=)n+u^xI7LZ+-M=`rrEKvCnAu|C*=6vwC+ewEZtNB1}Zz zfBpUR{|kNeZm+z^ZOtbvjMm5ZowMGJw7#x|-5$tAtSev%JOB^EL+~&>0)K=@VI@2U zkHZtN3Z8_g;AyCWXW&_Q4ys`_JP$9xD_Yp#dc#5v1i^GGjU%jB-U#oa<^H%*xTD1Bl|+?k9zZB zWn$Eu*MHQw^(dsp>pRN2pW3v${k`?luA38if^~{R`vprB#Kr}&aY1Zc5E~c7#s#r) zL2O(Q8yBptn~V4?p2cG11y(4CjSFJqg4nnqHZF*b3u5Df*tj6xN1P z=vrq5ZIoX=LiC%~`ptJv{5G=^-bO{1N7H!he#24kLTfdeVMPD+X{}#ucBUrd+W#S~ zrJd+TC{!du_}Kmp__T-foa>RyA>_?DG?6ESr@$Qc37@zA+(YY_iKM~YL;QXjY;_(t z{|?{6Kj1s~C;SV(hkwHlPy>$hc#Z}>(7_J|n2-Yj$b~#;0WF~w>;kQ!4YY+_VK>+v z+Ch8R13ExQ*b_R#-p~bl!2!@4`aoak2VuyE2t;8AW)y60t|cwcn>(;!t`i-sn?JBs zy>CVPAiG`QjgF(N+!1m3_gcVM?aVb^gZJPIXKro~y22yQT+NRcUP`2?RLnd>pTyC4 zP`9&Z0c-UQtq^adZ_DVsjSTJA?aVitQf3tR`Hq@sSJMqiwEdb3GBQv$>wl^=z(Zb3L2u*<8=& zdbT)Y%@$ud+zxlZosfdNz=j2|5blOWHCv2Uuq(8K9yMEX{>rRJ_riVfLd_QXA$0D; z4~7_N4ml72=0DPyIY49P0F9XgH1a}Y<^ZiVw1Kuj-e|kQ?m!-C?O_jK-XyIf><1y(A9}$7&>Q+dU+4#6$cG3-AqM?n01Sjda3B=G zU?_wkFcgMC5oO%O%m~Oxf-)0wm!QlNlx~93O;EZCN|({nun_JBW;gJyCffQu5KZ-c z$vMA*uVD)yFTQW!Z?F~q4&TB*XkV^@513iudm^2!m|bC4Xb0WhNNvI_MT<>DuBU)i zW1Hu~OlDZP2xir6LN*e}MgrMLARCF?>m4iiCLl_jOO#l9ID2M|Mzd&1;q;W*eCS#;?oKaj;W{iRoI0)i!FdPDh!eMYY909+BQaBPu z(}F%5Ch>VPOo4O2f^%UiOoQ{__b?sKhZ%4ITnIDaBA5k#AWavOTS?M&3EP*GHtxx| zgU@$D3hn|M7QjNd8y3N0sDLHFtbE2YxCicq`=An*!~L)V9)JhoA$S=6h?Z#$VlIq5 zSa$+BQ&Hdo1PbCt|eg=V6@lp;xGNK%<0X5#3Nr632i zy^zx~V+1va*~s{&sGd(Cd;#XBGMSf(ye-`hpJ1IhYqPfTRA#+OP&-PIK-;(knwJQX zk_sfE0*R=olL+QAxd_CZCKr>UBwPZQ!W@pf%9(*gtRclSkcc&;S|imJNJIq^QGrBM zAQ2TvLx4N0USi8LgUh9uIEL>iJvLlS97A`MBTA&E33 zk%lDFkVG1iNJA27NFohMq#=nkB$0+B(vUx4N0USi8LgUh9uIEL>iJvLlS97A`MBTA&E33k%lDFkVG1iNJA27NFohMN}vL1 zs6ZMjkcJARp#o{BKpILl-af|MGTnqHXtbc@nd!x~(@(K}jk0+Q?eHEwNi~!@_K9*R zpd1P)hXV4rfIOzgxwXwAZwtuV0(bVBTUcY&$=?FAh0@75VCuWX@8$P`2$;7d)4_qaM~i}Ht%QqfY@_8u{0)e^kkR<%phr4a4t-RX>cC= z9;Uo23fU&KyJu{@=km~*=}On*vS~9pac$r zI2;Uzz@cy$91cgo@1PWpgrrksFn1sNdW(TqWZ;Dvcwq)!n1L5&;Ds4@VFq59A-u4~ zPytH-@6I4kje7u3%)k>fDq%U?4=dmScn}_fhsi(YFCu>vNI(V&kTYV=VO@VV%nT)- zp~N$kc!m;ZHcV!^Y-aXL%9K2J^J*Y@VRJt=c~(ZAm6=<$p61`-Tlfcj2mgeB!T0cQ z_yKCb(R$`+-~-<1mE#8kOvr%%FfhP=o3*l~9q^)hx-f^F*;OY6bJUzdbr{~uiJ+!ryjhNlOt}L#l zET}2eSNbfpwLDe7mZ$31@>Km=x2GzJ_GFG+EziH$nTxIpQ<`DU(3jHeOKJ9XOOyH0 z%+=`Foqh6U`=7B`#yBZ4ZIYF@b7J0Dq19(n4=#dP zAZCyA3F|{kQ?z_Zy=di%U!cinBHF1EBy0Lm>=-p)d@JYS#MlXu-CCmOv}kw+rCQ`0!|+KjE*m(`vf&<$wA>5R6~_l2IYAB13k z=miHrZ|DPkp&u~spq>vAh(Zkd!vGivgWy0YfWc4*LtrSBz(Ej)gW(W36b^&K;RyI0 z(5BRngwb#mjDe%!7&sP=gX7@@I1x^QlVL0*;8Zvb#=&?Hb0ePtXTk)S2xr0BFbO6D z(K!7az$4P}i1ev24bFq#!*n5uVE`}sr0++&Uz<<+eHRmuorZOy`c;21IUFRx$q+we&oWBT= z7XLY5!MU)eX03li&02#rGUKCVkUoR-8Klo3eFo_>NS{Ia4AN(iK7;fbq|YFI2I(_M zpF#Qz(r1u9gY+4s&p>Vs;s09rzZU+l zWgugCbCz)hl*8?CC!~PUc6g{39;$_hYT=<;c&HX0s)dJY;h|c1s1_cog@pWt_W#=bwp*I44#&Ku@# z&RW_sCzkBL0I!TdLa%#P06=ALYKV!Jc``rdf%U9kVOrOZR!*byy}8jIMGO`FrE z&1pB96Z$HCa}9`g=CYb1{J3)bxN`isa{Rb*{J3)bxN`isa{Rb*{J3)bxN`isa{Rb* z{J3)bxN`isa{Rb*{J3)bxN`isa{Rb*{J3)bxN`isa{Rb*{J3)bxN`isa{RdRoVKtl z>;}6-J7^DkKnLgudqQW}8@fO*H~@M>ALtAHAPo5sfv8iCoqY;B`&2Grtlx%rAOjoVU3d>R z!uzlZK7bG5Blryd3|}~5KM`kt1uOx)cR#H=Khb7C(Pn=o5Ciew4=dmiAj;tv@xqnx z7(5P7z$$nWXnFgehAMalo`vV28dk&eKor~m3XmoupQXHkA>1JPSxV$PVQ@X;OLDdp zsho&Z(z-Qi-I`PQ%zWb}?LU+DAKp|I-c*%IThDwPo`6;GB+>cH!r9@XtiLRFBZDMwMBt%Gz-j=s5wbcet z-bF-?i+s1k9dIY4;4ZLX0W5^OVG)ogl($WJ+mvY$F@Yk=w1_e-qD+e@(;~{Wh%zmr zOp7SfBFeOgGA*J^izw3~%Cv|wEuu_|DAOYHwa6X!n@1bF73>P_pgZ~51FyA|yqoCe zqv%~IB7$5*1i6U!NfdFav={|Kuc%^ zyFhDb18ref*bSJshCYH)`UpztBPgYhpp-s>Qu+u==_4qmkD!!3f>I6rMIS*aeFUXi z5V}G)=ng$#U+4+@K?wGTUT^^PhCa|2`au}-Ap%i|0Wm{u01Sjda3B=GU?>DJSN2dC z21U%@y#_WorRadaq67Y_?OCtf)=+jY!b|WnAluYan|dl_Tyx7pdlQty?K~xP6g6Ro`q{|Q@zjLz)P(V9zOm%!SaNhMIXadc z9ZQamB}d14_l)MU&|DUp%R)0*XeJBIWTBZXG?Rs9vd~Nxn#n>lS!gB;&19jOEHsma zX0p&s7MjUIGg)XR3(aJqnJh|8jQtx=?Wybg>&`a)QOFgLKDcmf*AMnl>7CtI+A4|CQ^e3OhxT*d5P^G?ngHOU;b3lh&ebZU6-QBCq^ zKda`R^-6RW5mhk2gd7M!F605Tgrl=;be4_Ive8-eI73_56?OyWgGXoC=qwwZWuvof zbe4_Ive8-eJ3wdH8}PZ%SvES$MrYaREE}C=qqA&umW|G`(OEnv0{cTRH~@M>ALtAH zAPo5sfhfeFKMa6@z})ocEE}C=qqA&umW|G`(OEV+%SLC})bu1ZJxNVZQqz;v^dxmM zNcjb^PTMyIb~SbQd3XW-#P8R_YruO=e7qyZ_Xez&Pnux0EUcD=)v~Z!7FNr`YFWsH zg-lq;goV|zuv!*Y%ff0|SS<^yWnr}}bga;p71X;jqUcFOcb>;H5dETc<8SFBrVa*? zt4iuz8TBZL90jpnL9CaB^|As_;H#~2XK@S$*6?1f>(Nd(u)c{k{r=RevfMk^zROAG z;Su1o$vTA{=lY@!@x-Li+bWh{#MLaMnC}BQ&Za=X*`(cpWHC|!3@{-F0+0)N&;nXQ zE7%2ELmOxdyTWd;JG6uLum^O2j<6?mg1w+K>ek~J5}nu}!3MY851S#y!B zxkwgIlfnMb3l4zZ&KJ}1d%;*jtjY=rk=6VUrXJ}1fNB>9{q zpOfTsvbF}Jfygg!R72RiNH`B9c#W8G0U+4pZ} z-@n@rDCQG67z=d>914d4@mlQ&_#JRH?MR^SSUU=?;@Q)AtgnUZpbWUGb_3i9=nL&; zm=Cw0|N8sd`owsV;V=S5LNSbj5;zFrKpK3c!ABZ=q`^lTe5Aog8hoU|M;d&j!ABZ= zW8i2w29AZ};CMIzPK1--WEcylKmtyM(}4JnkNA#{_>PbGj*s|`kNA#nBAf+h!z7pt zQ-Ju6&w_JdDolg(;P-$BN3Gs5$yv;ADqsmL1-t_vEixZ1GT(hr3CrPrSOE{fgYXbM z43EGc;Zax#j{&VW-xEOV&G#fc1y4g2JOj_db5ISdv0={xHAwGB+s#UP@GblUzJq_lzu*rm+e%|%#=Uu=4A{Ysypac$rL*Xzu9FBnBK`9&wqv0qR14qL# za4Z}L$HNJ5BAf&#!&o>45^yTeuE38D;ztMZql5U-LHy_-esmB&I*1<~#E%Z*M+fnv zgZR-w{OBNlbPzu}h#wuqj}GET2l1nW_|ZZ9=pcS{5I;KTe-}S`6MRs!1+5UoPqmEz zHoOH0%|L$zty3}P$ujn2Ul-_(HWjV^;mimvdYQRDgZneMKZE--xIcsYGq^v4`!l#d zgZneMKZE--xIcsYGq^v4Cyb48Fdj~aGvG{^02ARXxCAbR*>D-mg)8AIxEij3d2lUU z2W4i^Jhg;xQxDCilVtPsAQ9iGP$KVNg8mizKcov?6YIqS|f|ubHNW-h} zCs+&X;Z4ZE26z|f-!eXA{V{BYPvJ|~8d;`>H}3--=-V*q6C!q)#M?>Wn( za)Pvhf_a}Y&$pk{CuyVDv_*=D#r^;6-`|FhFWO>6XNWX4-6mVe{<~ojzP0eLX`@l^ zZ0ejCCnKUkqAlvS#qgnR%E~5kDOw+=U`x~3(loX-jV(=MOVilWG`2L2Elp!f)7a89 zwls|$O=CyX*wHk0G>siiV@K22(KL26jU7#6N7LBRG&VGi4NYT1)7a27HZ+Y5O=CmT z*w8dKG>r{SV?)!}&@?tQjSWp>L(|yMG&VGi4NYT1)7a27HZ+Y5O=CmT*w8dKG>r{S zV?)!}&@?tQjSWp>L(|yMG&VGi4NYT1)7a27HZ+Y5O=CmT*w8dKG>r{SV?)!}&@?tQ zjSWp>L(|yMG&VGi4NYT1)7a27HZ+Y5O=CmT=({xfEscIlqtDXlvo!TEO+8Fg57XJw zOI=D+htkxcbl^%@2Fu}j@=4d|4W}H+D2*4LkF;F#Bj+P?v$M(k)Vb08%=yy%GuxkQ z`Rx-|d8M-5hKAFQfC3FO1AGDkT7z~9l#Cd{u(rdhvUdt(h;V=S9 zHI1|G@4T()EZgNA<~*U9jm|d2J*p>>Arq}4;$KB*77_m{B2rS+$iJ)S-)cJPOyV<^ z=`*SG)wH~-X?a!C@~WogRZYvQnwD2JEw5@?Ue&a`s%d#u)AFjOtP0OpAmRB_`uWDLe z)wH~-X?a!C@~WogRZYu_c_Ltc=miHrZ|DPkp&x`HA0iNi81#n$Fc1d8flvU0p%8|^ zP#6Y9Fr4{oM!-lYhEY%g2Z8uM*hx`mQ`FfMbv8wvO;Kl4)Y%kuHbtFHQD;-s*%Y(j zgwddJX2FRw3r<`+4vvQt;6ykHPKL2?3W#^?oC>GGI2aG7!x?ZUOn`}S7Mu-}U@}aB zb3n``c`i(aX>cC=9;Ugoof^cm)0kkHSiL3?7Fk zU==(GPr=hr1<$~<@ElabYW*-~@QgE4PMn!?;*7+JGgD5SnR4RVdUzAwg16yQ__G%G z^X5}&xtd8PMq0u;>?~CXZD=9uOoAe?#a3n z>;;`+Z|DO1KoGh@H|SpTp|1z)eW54p2O-!WdcgtCdS=gw^Hgh`r&{AY)f#8^oH(=R z#F;%O&g?mHX3vQ;drq9$bK<^1a3B=GU?_wkFcgMCk(0s>q_6`i>_7@Tkirh6umdUV zKngpM!VaXc11ao43OkU(4y3RHDeOQBJCMQ-q_6`i>_7@Tkirh6umdUVKngpM!VaXc z11ao43OkU(4y3RHDeOQBJCMQ-q_6`i>_7@Tkirh6umdUVKngpM!VaXc11ao43OkU( z4y3RHDeOQBJCMQ-q_6`i>_7@Tkirh6m=!3_tUz&Eqj6>hiu*1EWZHKT%;Nh$u)Y|Q za0y%rvjLfBW}rAT1I3vcD9+44ao?426(IM%YhWH+3)evzTn{(Ejc^m(4D;a@xD{^G z3Vr2pJKO+&neT!hRvza#CX4-U{Y13_{O}Cjg-DcW!n`zT+ zrcJk*Hr;00benxE-~o6L9)gGA5%?oK3M=6;cpRR9Rq!M{1y4g2JOj_db5ISdomI5y zR?((gqOC-Vwh}4YN~CBjk)o|ciZ&3z*gynh0}+f3 zL@+iG!Pr0qV*?S44MZ?D5W(0$1Y-jcj15FEHW0zsKm=n05sVE)Fg6gu*x>t8EAV{< zU&9voD|`cggRSs)_!j=56)=ZKTptc2U?dd7D4;xa%0s6-bjm}gJoMY398z!>*suT= z0y;`x1n4Lo9mO++ab{|YGgDKXnVRCv)D&l?rZ_V-#hIxo&P+{lW@?J_ELNPEn&QmV z6lbQUxSoLx@GiUu8{vJ}1RubM@DY3rp8$G>nVRA{x`vsW;>^?(*S~--;VbxBi~Fa- zG+5(Q`?-dnYvAjo{G6M1-75dTS^uELiA!x|#-_MofC&L7#jH(nB4-=$iBino6ldIG zAu~9|8M|1>EKYG|af&mBv5=XZ;>_d}XC|jOzEjHR#JV$}ukfQ%vrLv zWb+sp%f3_CPQa;b&tdyoJhkhzj%FFNPF)W-z>RQ|R%qVL_qPDEN14nXWtQ`q8Kg{R zkTRKd%A|L|T)@7Cun3sJ%VY*Ga|xf9!V2#7X)VqyR`Hxl-^85da6hbI2CE04n$N4@ zd3b^CHSjjx;5$IM#)cN=e5b{k`6`Ydnqu~=II~~H@kdjP87*YY zXd!-SDsaEEA+Q3TaJCY;+!}a}W2#{_JkR$paNHX9zsNSSn|lJF|7hE-BC@%a_T4IG z&5AQ?R-9S0;xosr32(vM@D5~vxHav!dgF^| zzuC0kY}#)&?KhkDn@#)8ru`;*>TUd08-JCtKSapGjJXUG2@i`gY>fDzPnI5pGU7ox zed~TOz=RwKKrZA#3up=SRuN515KT-FO-v9?Ob|`v=^`LnN;EM+G%-OmF+nsjK{SzP zrl1q>+#%7#1kuC<(ZmGN#01gA1kpsEU4`yIj~CIz1kuC<(ZmGN#01gA1kuC<(ZmGN zL}nI*zR(ZCkPi`vLJa!D02l~^;6NyV!63#E41u9A42tOO&8u0#(={u2x@HAW*R0^_ zniYC3G1d-nIwNv&fe|?V%iwZ)@s_cE)a^+~_+MpvExZPAI`jN*0X;%Qj*Ey}Gj5C? zB=H=)RkK1p|6V&v+DvlX9KILNxR-J4^>72+2)6<~8|Iymg1f+m#ZUpu=)GbD9i!7L z8J%9q==4fPr&lsMy^_)Cm5ffWWORBZqth$RAD{*to*&o12Rit{026W`0J)F{EubZ| zf?c3Bw1Kv;E9?flLpx{>djKOa7@c0p==92*&agLhfnIO`^oBmr7y3aM@*x6IKuU8S z0D50?=%rzlCMBZBc@yEmFb0l=v2ZG!24}!*SmE62j><$L{UhlsMRHULl)BHA&tc@! zl|*SAy*#5%4}+*N z0e8knY7s{#Il4%l(-!BXt}UcTUOw9_Mo^Zi9=mIq{a`6ke(|gv^~&wHqJ$Y4Z8I|3 z_EEz8(w%dKo(Xpxqt@D$MKR`-aU|T8O=>L0CfbZm6!LY5I|g+QcXKUcZWyJ(6-r5C zP;2VFM+xpUN&F+>KaGA(F;AzMn>a{Hg6N0s8x8j+PZHJ5O>8zN2z@-_xz45J74_C!O?etZR#dr(T9n+b*>&8f zP08;B<9x&9waqz&_6)kE?P^tYwnb?(LT=;ID>pP0e4Bk-6@lTste9KT@MNULE^c-BH^*cimCVeImczKl%&#t6?0C+?Gq8 zpUwJnjwA&yIE>2_zoLh((I35s4gMJCSo_B~_@C|1NqG786Hggx>i6|?p{XObwa=NC z{jD?GSzK>>VZAMNtn*Oz-o~G^OWD~{_q}89Tv~;kd1cS1BDX}t4)u;L#)>=dI&15$ z!amK>-S3K=Fmtje<#+Tdt3PV8`-hI#YBtF;leR(5$KF+H%G9AhY2`dGe(oflY0aO; zxsm=%aa4Kp$9Ugt&oSPyVlA(qz2|59TraiJbM~pqe$?s!`%QXS1_a9^<^T z9jDdmOVIZGqR}zIT3PQ|_nq?GzXX2U&;D1#$Wk;t&&t-&f~h@y(y5?kZE<+A zu6AEDADq&<+{-?s?w9Cb?0#K&F~7l1{7Dak)IRUl`;OY-;v`7Kx~5J>no8aM9T{~~ z`-dOs{;GC|`+<~&>+kWlkhpE7HQ^mse=U6yY?Dl>`z4ZRiw{|O?Cx)3VY$bVdgtgQskU6GGl=X%3-ILh zlbWhV=h==O&Ix!>^JwFhJ11lxUYk<8E~b$Eecfj~CGM#4-!@XZw(-$FzQ=h<97Afe z>wZi2tdYNUUah~@I>~Lh^aaJb>6F&xWW%~elyZ~!-H!c9$@{VP{kG5f(|+xp`$x`V zdB@eR%fu(2+Vs}mx9;|qy4c0t{r_|AFNZ7ZOKvhug~kow2h?p7b1K@Io(`nDVQrvLiVC{xs&zH>gMY%+~g zE%rD3+c~S@ouwx1eac>YURCx!Qk1N}UAOgPY4Bpkb-&n-Pr>at=0AN%qTU7F`c`kx z|MW&fowZ{(TW6zp?053$rhi?NZ0cMM(wV3`=Evl;?#Q}Na*Rja_O?Dbee1q;?n4)U zRJYA&rrLPI&!O$>&g^|^aNpkU9bAiaH}%KZ5v!^FJGXCJX>Hnb+WzY_ucx+s4%&~z zB}FMYUwZweP5+|#)HiG~$lo{g_3F;LlP$hd<|EK*lEQ*>?jlAYmx^=JIxQ78U8Z7N z`RF8SY>wks^>eG{N^u_XC)&-*;u z7tPHH?@9(nLxbya;Z-2JN52jXsVIZP%43GNyO_z2)bGIz1}K3z`#=+lo)`;XD5tEYb~wSQ%-)93U*S9-tq_Z}ZX z{@$4XF8R~VPaHdhzWJ0Z-TqxU`;GTG<(k*u821l}`Mbc*81Wr4iI>#RSP z{ILUnEZ%=2*0Cf1zPldV{>Sfi?33ehe?u)gF8qh6(~W!nP-6dOk^Wc4t$*k}=$}&7 z)PMh>zdzVt{GogOYNS7FGzeW5osa+3TmBA#qcM9;en+(bY0*=yJjm#mUQ;$ z>ZpEJN7Nd1RL@mw^*sHA{;U4GUZZc->-AQBuimD&>)CoIK9B03HKYt2hv@l68&^MJ zA|_5RG{sCYy~va>rSvnVjH#rTm?V>=SC}-@M89O3nP&PE)8CBLJIz>Apbwad<~jYN zdEP8H8D@pqVY1Dq=5y21d||#a?abHaTXUrqR+(#T#74}u7XD#P7hB4fHa%=Pn{0a7 z3++XwzrDm>Vs5dQ+Qw#}ZEBmELAIG~W(M2lwz(N%+t@bdR@=^YFhlLN_F8kB?P|N4 zJbR<Zu>WLm%ZOk zH-EDa+d1YzJJ&vLX4wVyDf6g(+AcDW+r{=-^MrlDzHI((-?Hn>V*9pz&pc<}x7*AL zyWMU#tL+ZE%e-now_lhwcAx#qtg~O+ug%-`pi{wYa4I`V=Ae`6q?&&?=}x*iN}0Cb=o=YY;osm=W1KRneRMlOFAz*uiCQCR%eH;{Z@0Z<@W@d%&A*ukq%3^K1|AIqx~!+xyh})LtK{8L4UeM9zzxXK#pH z5V^qijWmc{WN(b@jC^Wuj_i%>wYLZ*`=KQ?6joe>89bN0@Rt@>i1yf5-2opXI^t6v z9`(C`z78JqE5c*`ZIB!e&-E@m*B6Ql#hqwF>1a>)i^}jf|0KK=J%vv^{LL>ETD*Za zmMYeZcYyDS&A@H=q>9hPZs1;gQe_0b-{WK=JiAwsL?c)re%hg3QEIVz9SmpoNL zRRUdEC4){;IXJDfx~c)JsV)XyqAn9kHB;@yS=4ukH1rzRh!*HMP*&7;0DG%^#2u%` zLGpHmlk3zZH3@0nq3(spr2F7ITdL`5I#PQ`%>d_N^)S+z318V#J+9`91oedayQrz2 zR8N6ks1}NddRjdLda-&I{3Y;yl%STWWuRYBD?q=bUWUvnwF>kr>J{);!|Qf}S_l8y zDQc72gp@ykU+pxtRc(djhw!hRruL{kpufX;P*NRG2aum1)DOtdL3Ie6pVUu~`5C7{ zMbQ5p0p}=Ae3IJHj!4k1j>9Q~@j70#)CsyC==!?8@N@&+K-AC|>PFyPsvC<6x`}Qo z()49G0V+{9*Ugc_75WNrTId#_Tk4+R_tJkAW%VF<<}R&==v#3X=ukZrGQ;#R(78Gn zDc`2^L66gq;@s-FdafvrzW8zAeEo#TL65u$_>5j6vh{QNImBJ6pGW92y$tzzLB9!l zja~zKy&cuN(0k7Z^eSI06_)!*~z?G?BDu7=R z-oUS<-d}V=@1G{lG3hvkwi^2REXY(fjYJ7^DNc+kZ5o@#qP=NinurdhA%sU7LX;s5 z0m+FtnMs@J<{{8C%nZ@dJZzSTlIA({oG1>>@w_N&mYL-u3;N?Fk!@C*mEtP%GR|z0 zW|dhbBIXsG+mvEf>5}4fIDi z^C@Dsn~y~;Xto_90lIA$=+AKWlY*A}95P?v{HI!Guh}ckGGCf6@!R*AeTemy`3m&c z=4<@MZ{Rn*5;Wnr;w5p999sb%)a%WS%K~wxE>4PRZ##%mq-EiK4q6uUjrK;- z)b_Le;7Pr|y;+=R2iO7N+=70(p~Wfp@bV7r3mV#2)FbT+U+>VqzzKE&QkZCQ@+EZe z9pVyOXbZ)qcCwue`c8W%=)2*ky_~(z{tc4%+xvkJz)O2MJKatP{ji-4`Vl(^^jtd^ z_!xY%m$Q%C$3ZW!e-~%lC+$<>0_g9j1+CvsoPXQCEv~j3>;}=rzGL4J*Vv7ABV^vSn?z&#o_$aJ1s1>- za6YgfBGxv$4gTw44T#RL26l)h_7nSwXl-}eouZBX)P4%iF1t%y2P@%oafRJu_lRWs zh5bTwg~hN>bhBUCufT!bfU|#KHwcI91|aMP(TnT`(VOfBaXsvY9MR0F=A4I6SPvqZ ztOp>h2k_@R3q&dB@6MB=9BhbJK(BUQ1-;ezP#Cf#giAIA&clQa0W5S2g>fgllSOH= zBt$$}5};v82u(HwLSaLI4;w-hgAK7vSoa0@1#u2p5+Vtf1hkd=I=s+Vb>DDtinaSD zJkiIyYuq&meGA^`WmwfnX3+;3c*ghV!nIE!o!AZ!kiMK%WzHU~ms zbBN+(bBGkOIUoa@1AN#V;KSw+imVOMfb0xWjqD8I1MqL3Y+;ngxiiphY-g0m zxiecqleJNvt&Q?HdFBgn$mS>yoBvB8+49JMw!&(JzN%hD=o{)S z;9A%XlI?~n>OI&ElI?~#*bV5N*=~qaU*J3q$<~90_3#7oc@VaOW?P}M`UO^khLz9& zb^uuenymo^YoG~evIaEkeyvIOmtx&7q5Jbi9P4uIHEyR zi+ecdL$WSUi0blqoc1A20?zv=2EASabV+FUVx|;M{P1;rF>@A9{E()cDTj2*L*L67 zeJ@RAoc$qL>l@bhm7wo4kV2-(gwD%??w73l73+S@y8jB+{q;>#16$K{#0ig@Er8;N zEC6k8H@A!WX1p1X6i&1TTCg<`&(=W1EX64!*{}&-K&<7k3F6F)=EbOGPz5%@Yv8{Q z3m^>^z#8!1f=1V@(bHlydKGB&E#QA(J`}FmX10U=7+O4ywRlNr@lO$V7j(HcyP?Z9 z>+(`&4|KVPF8>nwB>f#{_M82PMOr+F`&thw8>=B~?{yE<#`8mzgiv*xbBn!7q{?i%(o zdl@v@<@R#m74`}sMrW`FFiJ*#NQ+luEuLtvh88btyVx%92}`;>(e|{xz#)x(A#3zn ztkJ8nM!%3XdM(!I4OyetVvT+dG~NafTmsd`s5xIneQML+g`vZ_V1hDr@%~X!m!atv5l( zH-V1dEOMaTKY-*%_9NIdq}^MwcCW|Uy(w$=W~|-o+1++GEDX}?m#|)MYrnDIh;~JE zd5V)FIyh-gn&`+Hy;F=9ugF@wqVot&m66U<&eI~%S%lMMN;t1MZ-9Oir^u9uYVmCj zdIsq7??o}16%dj&x@3)RSfgLcT3kl8IOYQ&b6l4fa~HY`q1Q>HC$JVT11%0c#roT@ z{w~J)yA1UA+Nhq^tf!Ti;-!i-=;@jw&N~O%TC=v+tgR!gtuqQEiPG0;EPd zJKdY?O%`RnDc%&|J>ET{k~h_xD$1}fuf)1sLYHIA=}q?@LMUnUGTy^DrAB(Qyjh@U zd$U0w*YRnr<2CDe$vR%MUe~PG%dlRr5*ZsA3$0JuJ;K^uQ-=y|i{4Wt2#lC@hJF%s zqBG1H?u>Bqy>i~QUKg*M*F91^QX*0|Qa-W**1#zIUx=6&i7ui6W*eRooyF5Q1MUe~ zPELfTz5`?ZG0?rUi@t%Kwu;$}gZ}FO^@aCaO7R>snw$ULP}g*Qute z8$PWtlh;GFR=qG5Z$l$-bqloXgK9A8Rq$p)BNjjtu2zq#*VOB39`xQiHDA4rvGM}7 zP1jS;L3cIQWuULF(3N#7%>1R&_*7qx(dc;aCh8^nY8q+k0*o;?fcLKcK+mADBxVCK zii8&1rGM0q=|lRkUXIzpqnPi5`(nKkI>*(oke<=6Vt%lsehoV0Ed3Vg4ZYS>GL`i@ zlVVc!+oUn{JER}-?em&Smm z4aR`4nD!Xuy=tyTPrt@oV>aW{h5B-H9rfR)JH}t1nI7n^_n4mOr@uA5%rVR`_Qe3# zU?wr%7Be?Hy`A1>pwq|cWB%&&b^4k?&P~ouX0UUcbDJ6B%yH(KTV2mhHF<6mw~M*Y z9qo=a3*B+hspbXuKKDMe+2USVD%JK3y(oxIMxxi{JyZT5KgdVe!t zc=vnvn|B>FedGX6_evC^S}nAW2KaA;|7K_bt#Ivt|7-By z75}~Q-w%BF`N!FkO29T1`9l8UxM*ibrZUcP27-QoTHY^J`e+woZO{S@? zqe)n=0Gv$dbNCn@C!p--O)vn!`&A%)7RiqT{AIX(A0Wok~wn<|GH2=SAGutyQJ1Wo=-oN_^B7CHU+jwZ3nz6 z6&fwIXKG*IfYc$tywowk@u`!6Q&S%ZQb?VdIyazCS3ao=QWsHaXQNj^?4>dE3g)bi z;j9T#OWmBh4bq!aH!%A2Z^fOddk|}X>H(zIIjcKi>Y?Mb&-s0rdX(g|duNaM=P<2o zT4fzdX(;H33S8;JZ2O&bBsPn!swl6GGZ z>fa@8dfII8=cPRv@Y9yjvrb!<~MBdWYrmZCO=|2~<(DR=@<+Rt%6nf^I zoGxYJBh@W2xG|t}_NDE`Gu@ZAozbWNT>R#YDepRC=;?BTG}8{I9sV^$U6@V3^khsY z_HW>)C#7fL6=p0t=?UPJN-uu`KUU_3vQmb3&~Cr;^EOo`XCGn7%%s(?_LKpH?K)mrTEd`000_Dl~l>$)wLnN6R`@+}L}u z7lD_=E4Kw3tWStq8ag>nq1~egEIWrA( zfMr9vL1rV+4KlMCecH#G%&Bt{AE7ySsPiLIX z_$1?E#$}8v8DC>u%eawo3*$V--y4hXi#zY)*n1hjA*8(F_o6&QM44Ab-3sy?lt$G9 z#EZqugT%=^3`vpY5S^8P|591yiKdjR?jb5WEh~wyao|qNnepF>$k!aoXDnuAFlW<= z{8*V2X*02lDRIEAV!nD+0!n&~w$oNZNi zLf#LpU9}$H5qYb6an+_k&Rf-Xlv_VTw3Ox5wA{d9`vZ7R!C-ey*v z3;ex#+e3Lmy#0&^@SOOak>5-EPtE5*<|xZBW*efZAI>R76rKrs;OuXhDv@0lbY-T~ zva>;WWr@#8S-|TQPQEyoNBULAo*>)*OGn2&wkN|3I3N#&rawx&IIA zfJsC<^hBhyp6Q)T?`0W>WfFKOm`sEo#`(62F7j_s&8O^fxy~6{V3Drh;Ke4 z+O#D}GlV&}MHKExwOBf-MB76|+h3TEX9RvTrqh_tVwq(u^AgkVF};;&ms*B&4>0`@ z)3cd=p6L}#Q{N@sT|_%S673vjKIg&ZJYY`&_$GuK1isB5ntso{T$QJ^RH{b zNW1%`E=#nnNwlrSzxN}e%?_sj!SrF4Nn)84=67L!SE8|IldvaaZ{oLYqCSIDk7$S5wREmz+A{4j&E@YjVoqb?SbkErC)4AJZzmFMo?v8-;aa2~BaWIw zGU_qD`-{Yp_YtihAim^ZXV2o$1jY)C4Jp(#Bzb*|IZZhI1ja_pY0b#B2>TsKeiMgs zO)!UuwpS6~UPZLSPucl~=|bW=g-mBMoyj!UdFL{sZDWqhzuMeIw7HA;?)yZ$9}}(b zrab67S^f=1evbNK<}W5meK$+K!1Vo0(;j)LS2F!LOWq4#1k#jX`bR>eeZ;WSUBJ;=FkXn^tX&h2%TDVM~CYbRxDCn&WYQWXtyoJat|0+u0tHG!Xey8YhLtJmd|CpojJENUBHsr%<0dZ z+lZsyXHG7sTnZhW#EvAwVoYDdk{2_!WO=TQY7}wgcIMo|p*Q`q6tQk4+V+NOl)68q zEQfQ>2au#3&at3@KtI6rU`BqXa?CFiz`xl?j$7-O<=~9s9Jc#qBGSBt`FC=fO*ow~ zl!DpIcdW&s+nB$NQ=Y{1e#VE0qgNBH2XW|!%;z>G3n@+M_spePau!R@;=A9>ba&?{ z;@-@m9T~eHV~z)ucl?4KLV6v`^AnU~nX{TWb_mnw5sg*wlm}j;q{dM?YAEx^6D`M5 zsJe~QNny!E#(0+L4xge@9wu7u@v1|T`x&_>4zwP?x#HTTpXC&KFei_30CV~=J&cj- zm>$Ob`pl`%_o`1E^AvH+Y{un`^C;9j#q!z2v1!M!K3-qO9PT%CHR5Y-JNiPF@8+!n zXCalaEyMD4S)S{><~~8E^Bvz}`Bw>TOQxS^x&@)bJ+t!|(_I;F=g?zJXAzp_gnAd} z&2J04=)UG$2w^QRp?3vK?&ExZ$oK)r`ibe?jFl)qavIZ}Ik&6@Y+0u3vHVib^BCqt z7$2d&MNj8g-8@=nU!Ct&ojB%V>;jR7dpX^VHShH-$vwF)AX=?p4)==cd*-Yn{J9HZ zB%RRfL~%WCJNhl+nAUuk)a&athJd@j#q)jJqi=c0n>yDE1Hm?FDfQz~}sE*0%N#h1x?b z&n+73fGO5c=DbSz)LWQd$dX)Fu@9SM8WBe~BKpXbNCN0?%%9HqFyjTB+67Gap`KQ8 z{`IvSw=eUXGTog}jv#rN$9&eUlAj&+WPop~u;e&SlWPKY8I$~E;#;zEfh^OKQ)tJM zEt!+XbQaCgXfuX$^(9HF zFNrpri8h--hOq&!(MUhrNJ85;%F-+#aW`PC@0E`3P`OI_I*_mNr;&u zQaO#3-;_qFKP8pYe@ZH4&X7u4j~@Mphz-36xAf{U_7sx@tdU8ClzMS4`=()AzLg2Y_b?^Q+-XOR19&pRea(kaa zJ$lJq{cq{jUkOHsF=4>1HxE*!ZW+{jfGR%_UsTFqSic+^6JKjQTUkE?8y zNxbX9iwlHsC0-x!&?v({;@toq^?AV`@%n;SEMVYDyc@wIJLLGE6x=U}v%xBcc2Nd( zx;*N0Wz^*qktQ-QWt}amAylH)6S5rxS)ywImADEkzv)|h#=kK3>(|Y6U?W`~AXE#`V*^y>7Px$O?cGBnaJ1$>QMQ)4bEfZVT zYT2Px*H(*K_iVeY&A_&*ZARN>ZM(P4YrCxNckN8Op6v?S%|H>MK=AKjPia^2q+O0( zq7R4%#dPtIm?0h(GsP@1TYM?@iLbE=}OPODDPIODov%U43(*}R8{zj$$^g;c!W@A!z08wsuq03 z)W+VEI_i8?S6!g$VFyYBb)jmgE>ag`zvpLaxB47ACcjX7)t73Y`bzCrU#oAhYvdaJ z7u{K3tGnpybXVO?ch^01Pu))s)+4cV{0iH`$+6vRciV$@m)YL-dfUg|VEfu}w!n_Z z4zdxnf6P8)XJF^oOgkHUzUI#TFuyEWXi-J0$>ZY}p*_XfAGd!yUWy~*v5T3HqU)XK^0hr}-2 zEojRhVMlEh?3rx@ZyHnN6j4L|q{@i1RayAaxB`1!D~OhAv)UqB@xIZvYMc5Lo)ns4 z*XK3ZMRTR-to!P|qBnMZ4ieYv;d;2}gS~i7#0|XXuAl8_uM{_7pWSt00R2*ND}L#C zG0aY}_lObpUhHfigMDz*#aR24eM*dX5}k5lf^&~^kGKarx1SMHou$qTVuqXMri)ftlp4;8+A?CZi++JdV+sExA{ti9m*D0w>iPoq;3&bL^ zRICuI#Tu~zzD%}@UHIkSq4pd>ElH52;JqY8X2}||wyY;FmQ7_V*+E_-`^gbKj= zHs}PkMQuk7I;aKwZzNy?Q403vy=4yyg}r$H2V7@=1g^LL0KSbmDTRG`KLOvdhk+X{ zcIMg@*qL_(-!|D_fbZF(*sZ(EZnnqp&ByoA>1z9u-Qq}GU$h@Mc=mRyqk$hf279`$ zvfCVsZ$5tHIH0$~j8OJt2W`>rfFY~wCr%vVKWcY6@%Z+slK|Z16cZkHYo^%G@Vt_- zXRp4~9Gprv)$VqRqsCTu8aP)7*QVLeof4?OHJl5b7LcfH)9oIoBVPz;U2rFxAQXar5NB73HJlzu^73?{5FO&+UtD=|BpIa3F;!=F=|K15Oou8)I)r z3bX7FPLfmCxeW9p_Ir3psN*yNJ%^;6^PQ%Ugai;_K#D6xYwWeV1pC!HsNUF1cL#Q; zKaM@)>##q37j}XF1ADzM#2)X<^i|l=Jp_BW=VI6PGuRvVHp;I!$_w79P%>pv7Ujv? z2A+FmJjW!IdkShm8lG_mo?;fBQ#PJNHI#G>lxR(q)P>l&dl7c*HpOpmhTqyAzh|_a zO8a5)TOP4HcK=W+Eo@JaQgaH6~DpHt6am;Q3K z9J|?9s+HK2ze>SZ3h#}#*dh2jTHYG928#DB^%lx~gFM$TxUGYla=mD;4AJc zz_;DEf$zH5N$+lVcK|y+mM1558r*`d)otTdys!lXoTXS`Xeuyz9K{fZe=qz@c6)Fwe^a=6m_T z72XQqN)P$;Uh$Am?=|mr;7{I9z#}ww6HyTj^e|YFkpvopMM_1IfOR79nh?1p(g@f% z(j3?#(i+$gc6TA~$tXIQFz>n~v*4RwO4(w5OK6=k1P79~N?ck1Zr?{)!Ok ztW+7@`Y0zCBOkivp)BY+2BRYFj0L|uU-K|RqVHp1SJHJHEJ^K*bVgtlrJVv?(Hld$ z6mT>~SjriNag=gDg{`Tae6q-$u^4YDXE;h;IU_MnQBI*K4J?4Au5jnFz%f*(kyjF`1bP*( zC+?Df{FTQq%)ov}iUE%x$XiR`MCe?~VH;op(xenB!g|hveS8&5T??Fq{lUr^h7zW< zuLc%~zi`^+Fan7!|30F>7=$M%TIB_$sBap-Xe9gnCgz^gyYAD_7furz*DepG{Ct`d;c^?3rgz*8DaWCLV@mF9W zMjMpR?!Y|ciORS)a0EsiRK|mW;{^P(IhfBxxfX&d!1F4B=TRA>hir_f>WIIAn=9@C zjuQ6)^YNSLp7#QWp@vbMX+Ww6v1K{gSo3AwVo3%t; zc!z6@8r(*7LOFLwzJoG+6QwW`_g@G3T-ZWX3hw|%!2=7WydF3fo>=IYzX2QxOOeul z7g!+H0`uUZMd6ok0FHp?7W(CH1ILNCfc(obN~2U_YKf%!nk!2H^JQ`1FiG{h5Ie-F zJ{9?;5_%7^sPoPw3GD}2=r5p*$B@AZr2hNe#)!(nkPHqIu75ju51Ckjr{L8qvaLAQIgtRzPubbR#KZA zE-wX+l-#mp2haubGGLxW`$9gN14l?|wG$+@Y3>6g)#KbEPplhpB-Q>x$u(Y5%NZl7 zg^cri3ptEsa)AZtD}o*&S_3h6MJYfQc^wPPmt%m#Fvmu@yd7953xEZ30zXrFa+T4e z#MEGUFMfS4B<{mCAJ@r{&y{xp^D$yUiZC1@>`wMvu@JPkxBVJG~B&&mwndRdNYm^W}4V z&6A7yIzq0%bp)Qti@4IWrM8?ap9bD0p9hYXPXR~CXMp+g3E)_{95_iX1rC=BfFtEg zz(TnUc&DVcpC@74;E6m593dA0C&-1s+vVSZ)G}V4?g7Sb(>1l(!wgF>)Jlgxn9DAU^?~n5%EV%az{&^X2!zvGM@0 zP<{(6kU#JfC5?`L08g|X+H#lQ@=R%@D1Sm4x$wgz(8E;(IZ9L>=#eTOSf~=fDXFN>EKtROc`6Y& zMwI}LP$hvAFfNDwR_HCA+f`ZM6pYcSETCr;>3_5)Jgo$k1Ugq$0fzcpHO03=)dX0e z&=VBZ--`N=T-64cuc&vKs9FKXs@A|0^tYluC0|_!oTRz{hpEoMLPb4Gfr4H~+N8fv zuYXR`;i@m<=Bk0f(ds7PC^Z0>ul@?0sPec(hjWRJ;1azN{IO~XaFQCy<$4R~;p%$e zNUW8h{PYJFs2hNJih8FpYB2J4t?CDQgc=08o4OhF1a%v5oVpdrnoCUtbyDA!$jK>2(GSfC!` za*Jv-j9MtM!!)Wt8qjJHMRFs(>u!xq{v%tyKj{*zzY+#;#1UN>|0S3?VaSolwoD*80ehS=NO)Yz@egZgBKMgF@ z3xNfi`jkAq2#EWW&d}6zjMUU06kyEgkLqG9V?PB%5F^cPKng7sB(@ zW0*~N9UdRwf%mDeF$-1_-l0#N38UExnhW!1!s6f=`9jQv`7>eTkI#kaL*CV}tNht2 zjeJO*gb@_I+X?3}(Dr>VTE=aHHUQ7UQF&>X!@A7FXm$!_6XswHu@s}&wHS--z^wEE z%t<@4gsdntWKGOQH^yA_RkAzgqKDvjOq5gQ4E&BoaydL=Z;)FtE4^R-sDz4BWmHmh zHoBQ=r#fSPZ-C0hO!Z_nP0fZUtR+->Zd1++QI~~Ovyi$xq?(7+6(Q9kq*{hltB^wf zfnP}}qu+>9=trUydXXrF9wthmH;Gc{U7}Q{kU}pLKsznhE$i3 zx-O);hE%tZ>K;-(LJBo7nuA^;)jOoF4=MC|QMnsJ3O!zwhkh_hq34TI==Y*j|B#|y z(=R{jGkxlokQx|Le+{WYAvHLphJ@6uAvH9lhJ{pKNTHXF-YqwzZVM^&#L-anz@UoM zdU)xcjanT!Ubis@3~Idxd3wt#(LTbukJ;G&T-}dEb7b7Okctnfgpev0Qi&l|Jfup5 zRLPJk6;h=`s!T|o6;fqGs$57xt8+OSw?ar&45>;XRXL=pgj7;UC5Kc>NTr5UT1cgb z6j>|ue2kkJQduEYHKejbDkr3>g;e#Bsu5CWhg8jwIwz!Rh19trRXe243#mFGb$&?I z4XF!4s$NLd52*$rbzw*~3@K=i=r3;+QWu5P#UXWRNHva94bG@-hQjA?pld=+^Q-So z&b8;;mUtU7#oiTt8#2w_kN2NXIm?|FowuD0&?*9LC=PRbFn{sHsEyUazre@RU!FzqIa-cP9RDRr#_&Sr;K0s>fb}geuIx*T9IZFEsjWj373P{dlWfQPzU(5xhg5 zAs5JH(AXPcUr}l&eyA+`KY3aStlT;&9!e=D=BdM}e?HUwP8BLJn^!bW?0rrSqjf^D z^0Cq^%RTZ$ zbM4fADUF zQc68R3MY5SPO%@%gp*wQ33Ba31gj{Dd@y<-$;=ZZv#<_Po%q4rFUeK~N+*YDZj+e@ zMV!;zxdQL{S~{(q)=nFzEj$Fb=QOEjtc)^~6gzVx;!_$p@da1vDbqp@%w()sI1d$& zP6vQi#$9O5i64XSgf}#0PPy*p6l-x1pH>x=Kt-iKL35wraEfs;zgA|}LoRCLAN>aI z1&xV(&{+inzo|X9YX7-YuUHH+5-VUx($7)0D2X@JFCj()tfXj&l@b?YEkq-%cWCT1 zb1ru-bDH2?zl87i$JIYhscq=ZJHKa-Ni{&DPOYb?8NS!&RZn=gfAXrQG2uF=Sy<`xh@E3&S38|yT@y+y9_t4#LP^tE z9hz4e8R*RRSOG$-j6AF|>H--$U85v4DV>c$Yl@P29Z?FeBdT^>2b9c0D=Ulf*A$s6 zx5zDey&Zx1gMIMwpC%4sRajkdR5fBx#I&Yo5LWbzm!7&?O_!zAT(wYEhDZL@YCYET z?8IuYgX*Zv(w;6QYr(&8mTaJF;RKzgx(!x`_0;|KP}x+E(Gz7WeYbusn&BuID_BdV3{4cSWg=A=N%gp-e+62qX$+222>EY2ii%%3*z=b>+yN? z90Dqc+Yu!j@PfGXYyw^ow_6yuTX^4YVcc%veY=HmyM_0qC+w%!K8#DxI^YHOMGFjh z!F{`ial3|byM}S8U+`1u8peh9eehoAy5nEzx6*gIBV8#DUFmLg_2ucQXFsGCkoSG)S4Aa1a+yBAQ;1GCeOplqf%xC_iO-azSX2GVy}YAZ2=*L0n4t36wOY z>t8!YuRfnrBtE6*UwuBMMc*kU|4MwtTxC1L;8M|*lhv@=_F{N^@1VMH#$eD}F?>y9a{Y^37y3&CE6n;8}eoyr^%& zDOP*TcjhpBq$grkTN+lZ)wPXm3)>0xtgjt}HM-+*cEfZ#7pE;Ov#YT_a|=#8*k=#g zqmGC5iu5 z2k+;tysNzK@OeJO8|6*JIRP`gdEO##Io5z}@V0upy!{?_Pe$S*Wg_~0+`)`KT zU7aJnBLgD2k^IQy$h64p$b!fc_%&Y>*%a9x*%SFLau`RRCB~JHON*-!S2wOvT#L9) zab4s3#tn+gi_4F@BW`Nk^td^33*r{XEst9rw>EB5+_tz~ar@#9V0D#>kBcuAUok!{ zzFK_k_y+Nf<6Fdci0>TVGrnK^p!mG_{P;WKr^Y`JKQn%=^Gevp0;)&I>ljkqLaKd8 zb&XQ!Q9~+-+XMB@PY*q6NCk1xqegjDZ+*FrHi%1gIN$|wsdWUrATD~;C=WeqNCk1x zqlUa7E_&1`kJ^Qw9(vS}3gWg8<5If|?i$TAQT~02^2?bhKQ2*zITIDc4aylg4&w&pOuQg&P|m~);s)i6-x$UX z%9(gU+@PF^7sL(98Kn}&4a%8#LENC6i5J90{`nc99K*OlITJ648LL z%9(gU+@PF^=f_3N=zWRu%b6&@oQd+|66KdOQ9<0GoN?DMZcxs|3*rXlOuQg&P|nC_ z7&jQ`!07eR(Q3`c9?hUwwHhG5@GY}YA3c79|P58Z`S_N9-|JBvz$$J0vmk=e4DY$rR*{=7P?B4z}uNk`O@3C;_! zMW^C(m-8e_3zV~ruXj01F-P~5^E_~&pmof<#eU4+9mK9QlDo@UgnQn_Zz^ixjb_uB zQK-K{cpBy(=3$LG_MJKF!@C63j3{pwQu2ATFtR0T7N;Ii0WXl7h42~9tI@pr*ICZG zXrBD5AC7cb4ly{KQlM~({}z7LYtC9A#?mMyyzOw-a2hlCN-}Ta_t9Lip_0HaB?_eh z$}e-IffNa6L^((g972lcp}tJTeBUgLfS#Z|i(GfGvjgR_3~S8~Vh*Muo=P9QF}oY{ zE=zG1*iQK!Mu%k;-YV;bdL_21W{STGL{TXm(;OQwpP)=5bvxdbuNRcHADE!kLtv_S!hhX(JIK87GsM%p0tl!4B7SWK3F(FriR+w|W3=#?{X5)LU zXpN^-i?*x3**Ppf+K$0h+J=awRYR{Xc3w)aF5*$kGT5(L&C5`)ftL~GS(Ft%UJ0xN zlpf}xS&}yU@y9)knL+6uj`EeeOXcG`y(?JBk`k*frMnU5zfHp`6uOI4UBOu?G|I9- zkarFI0(XJJuXGncZXi~_`@CtGBbDwnNOp;I!CnYIb_#g(E3m5>G111|fw;C(C2$Qm z)J7Y~-twsH_ZeDb$$c)}p#@|}%7`+Uo!jbS-W>n*hrL<&r~TmZ*c;(tozDlD;rkHl zW!7Q6&jj%i&X@ZNEga{-%N3Y;Z7Sc?Z|QY%jsDPN$aUr$8?VY?bbppQ-=1X~C_WET z^`bKoRd1(*(@R}XXAP=h&O6Q~mFs-qe5gh^pEzHr(at{STQw2q3;v|0pswAe?xz#a z)Dt-I>_N4F&N@?z+?nny^^E(d`>1->ecXLkEpeZ7SEyHT%GrALmeJnaBjx#wtwK<;-5U}evch$t=+?3+sFZ&Fif?%JL=J1E^$0}ZyTLs2BbgK zNpG#URx}1@ZIpxO>n%eps@wduJ=78W(;FB6`*g&b?qN0_93}pORaa#|lvT;13f5lr z6jiZGX`E<@orq70o3JnJS#dAz4HFMy9o9-Q3$sA4iaFRL_NkbszST{{t5}V7nJkZ! z`&!Bhy0yMiCSecu)v_vfVgE&DW2M$0nS*(u@v=TXia?@_(od)<3gA9uPtUEP4wAs<$K-MQ{#s-L^WU84HaxpeAgcZ<744RE)* zTh%S@NA5>zAe~gF{^}lckEtP;nQ_#un4Kx1hSK@XYM58vtD%S9@2hhv-~LHN(5!yIws^XF02xnAsViW_g3X!D_BI z+#9YQqtoovJa4QwRy~dxpNVR|_lWn1dcu3udt5ER+|MHQG@a|L7J1KmFQ{j{b>4cl z1hYXK)KYJYw?#egedv9pmU$n0AFCI=o!)2IkCzfjQL7?pku3EJW{I-Z8}>gr9L z7kQ3)i_VKw>mv0d_0@VhHB!Az=S8Xwk=r79>Yd1l$O!drWK?97+7uZRnV{Z_Oo~iG z{l%GisJ}Qf5B2wr$Q!7?_@Mscd`Z;b&m()(E;>a|?T+k=e2ZF)Q}onVs4L1Q=w?_& zhm~kH0XrP1{zy3&Z^Ga+0X0luMLDF*9_;Xt*l+CfE&xx{*|yO2((!#(2)s|>x`&;w zQu=*-{U`@3e4GU7zo%{B^Xwt$y+ihpM7>6;7e=|epow?UN7i6I^~t!WU5ov-I2oNj z(tn$GQ8WbhfN3KRv-HJL-VCHY!!!_kn2YyToW^*hJ>HHt8F(*2_iPm94?x;DJKhd3 z3DA%fa%nWAlW;H>$sc_H`jf&MN5k-I^%kt1M9&UxlPEV0_ej&L^eR|m#HZFx`H#ar z;%prD^v=hcNeUqyg%Its~TD>p1GObv*UiI)VCZU5xr{ok)GQE=hg1E=_&5E<=5`K8yNn_-sU< zjg{i4*{~95jX*Pc7Wi)tj)T=Du%dAu@hG&4e48)I+b8T3q5_}%TM<2bKfL!=c&bh9 z6&%kA_gG(QseVZ8@sU`4%vVU9Pj{ksT;NUw7gxR)S`prXOqSEY9|S(G;9tQhpk?XK zh=tXs%x%GGbfuQ1n}W|2q+5coVQ0hAMhMn|`4mE0aXPRTuzFte+5phtx8{_}U_YN! zhY?Z+AHQa`p|sGJ4oicuoyTd!YKw1l7Q7T&qu1!~;uW+KJMkn|;86P1V`#AipOyH& z5dU-)f_e=J+g#EvORRSw%I`H4ted;>Z4CH6B?R>yS`5G^7a@HS;!^@`gwpAXf68ws ze2Dh@5QV3S{*3d`FiHztDXlbos8^{RL({pru>JHi^gQ7KV>Z&EC!1)`0Y$0$YXQo_ zc6=23=lv1c7|`^)JpBx;O@FL58Xh&Ciiy!%oCB#~&;9A&&G$u13%robI`QrNnS72Q zpYiYz@C<4yy`h)2nmEX<7&tLc(f7@Du zeJ$MOG0U&nZ2P*piJtjo4Or!qbRDOZKG{hnVQErkXhjUL zVJy}%S{f@Di?xil9#h0SH{_ki)VcONtRJNCppIZ=$0^rsR1Un&;E8E?YskS9t6^)1 zIQXI&54*Z(3a9esP=meJ+z#o}tqnPTkK?J4$Bl}%8hq2-z&TE|De&k5?*>7RWmB9a z{uXrVI=oqX8y-*Ifv1yq;ok(Oj^pz_-nM;Ux7rWwHhez9$>Sg6-0@HF2JTa6=+AK0 z_~$rj{0qC+eu;N-U)lZ4BhHsm`b^2kLMD4w-w&_{h$5O z{sR`nPxi3=*&cySdDI@W#~duRa+IST<5+wg$Aw`SapIhKC&4L(H9^JU3#BC96_$oK zle6Hlq#W~zQzlBEDZD&T@X?YbTEa(54m9-f^2`z?LXR#{&n=-xslc0*gbewC!5Uch_mX9E$U75!GgWuH zyFK8GsZUIb{jm1!pY-4b-!!N5z%@ARTd0naUn{|Wtx9nTrEm#la0z9y?Rqw9Ridbg z{x3zGgMKJY)Pf(W>oC7SbDLCC*dA6xL6_oRfqf$)I~=)|!^pJ)#;?inq0?1lsqPrR zUIITl_ljQdozp27XFCC0BD@f04 z?X{M1bo#lBr}3gJMx#TSi1W=Km&IvZC`)_WypLp=NJb<}mcm03B4tgrY#=4c$c#K1A#VuHH3#R_ik4HI0e+AnRmU);~Gm-MoJ`=iQ zY`MpzPNi4b)^-uPiDM(kJ(Ap}%|IP7x zbP?50r-zGZ;oqWz1AWT66!)lpS}hvu8|$}t#tOV$1?z78wj?mlQz)$rp@!YicZh@! i$-(^x43Q;pZ-aiGex;CA)Cydv4k$^hlf|(gh4_C>OOHnY literal 0 HcmV?d00001 diff --git a/freeroam-extended/client/html/app.js b/freeroam-extended/client/html/app.js index dff22f4..c2382ec 100644 --- a/freeroam-extended/client/html/app.js +++ b/freeroam-extended/client/html/app.js @@ -167,7 +167,27 @@ function addString(text) { } function updatePlayersOnline (number) { - document.querySelector(".players-online").textContent = `${number} players online`; + document.querySelector(".players-online-number").textContent = `${number}`; +} + +function setPlayerId (id) { + document.querySelector(".player-id-number").textContent = `${id}`; +} + +function setWeaponsDisabled (disabled) { + const el = document.querySelector(".weapons-enabled").children[0]; + const [, styleClass] = el.classList; + + if (disabled) { + el.classList.remove("weapons-enabled-on"); + el.classList.add("weapons-enabled-off"); + el.textContent = "OFF"; + } + else { + el.classList.remove("weapons-enabled-off"); + el.classList.add("weapons-enabled-on"); + el.textContent = "ON"; + } } alt.on("addString", (text) => addString(colorify(text))); @@ -175,3 +195,5 @@ alt.on("addMessage", (name, text) => addString("" + name + ": " + colorif alt.on("openChat", openChat); alt.on("closeChat", closeChat); alt.on("updatePlayersOnline", updatePlayersOnline); +alt.on("setPlayerId", setPlayerId); +alt.on("setWeaponsDisabled", setWeaponsDisabled); diff --git a/freeroam-extended/client/html/index.html b/freeroam-extended/client/html/index.html index dc61eb2..5ecc808 100644 --- a/freeroam-extended/client/html/index.html +++ b/freeroam-extended/client/html/index.html @@ -11,8 +11,16 @@

-
- x players online +
+
+
xxxx
players online +
+
+
xxxx
your ID +
+
+
ON
weapons +
    @@ -32,7 +40,6 @@
-
diff --git a/freeroam-extended/client/html/style.css b/freeroam-extended/client/html/style.css index 114c080..5359f3d 100644 --- a/freeroam-extended/client/html/style.css +++ b/freeroam-extended/client/html/style.css @@ -1,6 +1,12 @@ @font-face { font-family: "Inter"; - src: url("./Inter-Medium.ttf"), + src: url("./Inter-Medium.ttf"); +} + +@font-face { + font-family: "Inter"; + font-weight: bold; + src: url("./Inter-Bold.ttf"); } * { @@ -11,7 +17,7 @@ -webkit-font-smoothing: antialiased; -webkit-user-drag: none; font-family: Inter, "Segoe UI", "Segoe UI Symbol", Arial, sans-serif; - text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.793); + text-shadow: 0px 0px 0.1em rgba(0, 0, 0, 0.6); } *:focus { @@ -28,7 +34,7 @@ body { .help-keys { position: absolute; - top: 3.0em; + top: 7em; right: 1.5em; text-align: right; } @@ -210,13 +216,43 @@ body { } } -.players-online { +.info { font-size: .9em; - color: rgb(60, 255, 180); position: absolute; top: 1.5em; right: 1.5em; text-align: right; + color: white; + display: flex; + flex-direction: column; + align-items: flex-end; + font-weight: bold; +} + +.info > div { + justify-self: right; + margin-bottom: 0.2em; + border-radius: 1.5em; + padding: 0.2em 0.5em; + width: fit-content; + flex-grow: 20%; +} + +.info > div > .info-number { + background:rgb(255, 255, 255); + box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.69); + border-radius: 0.5em; + color: black; + display: inline; + padding: 0.2em 0.5em; + text-shadow: none; +} + +.players-online-number { + /* background: rgb(0,0, 0, 0.3); + padding: 0.1em; + border-radius: 0.5em; */ + display: inline; } .stress-test-label { @@ -229,3 +265,19 @@ body { position: absolute; color: rgba(255, 255, 255, 0.628); } + +.weapons-enabled > * { + color: rgb(255, 255, 255) !important; +} + +.weapons-enabled-on { + --bg-color: rgb(98, 218, 114); + background: var(--bg-color) !important; + box-shadow: 0 0 0.5em var(--bg-color) !important; +} + +.weapons-enabled-off { + --bg-color: rgb(235, 91, 86); + background: var(--bg-color) !important; + box-shadow: 0 0 0.5em var(--bg-color) !important; +} diff --git a/freeroam-extended/client/src/index.ts b/freeroam-extended/client/src/index.ts index 102fe39..3bdd5a9 100644 --- a/freeroam-extended/client/src/index.ts +++ b/freeroam-extended/client/src/index.ts @@ -15,6 +15,8 @@ alt.setConfigFlag(ConfigFlag.DisableIdleCamera, true) alt.setStat(StatName.Stamina, 100) alt.setWatermarkPosition(WatermarkPosition.TopCenter) +view.emit("setPlayerId", LOCAL_PLAYER.id) + setInterval(() => { if (!playerData.areNametagsVisible) return view.emit("updatePlayersOnline", alt.Player.all.length) @@ -24,6 +26,10 @@ playerData.onAreNametagsVisibleChange = (value) => { playerNametags.enable(value) } +playerData.onAreWeaponsDisabledChange = (value) => { + view.emit("setWeaponsDisabled", value) +} + alt.everyTick(() => { if (playerData.areWeaponsDisabled) { native.setCanPedEquipAllWeapons(LOCAL_PLAYER, false) diff --git a/freeroam-extended/client/src/playerdata.ts b/freeroam-extended/client/src/playerdata.ts index 357a85f..c49fce7 100644 --- a/freeroam-extended/client/src/playerdata.ts +++ b/freeroam-extended/client/src/playerdata.ts @@ -1,5 +1,6 @@ class PlayerData { public onAreNametagsVisibleChange: ((value: boolean) => void) | null = null + public onAreWeaponsDisabledChange: ((value: boolean) => void) | null = null private _areNametagsVisible = true private _areWeaponsDisabled = true @@ -23,6 +24,7 @@ class PlayerData { public set areWeaponsDisabled(value: boolean) { this._areWeaponsDisabled = value + this.onAreWeaponsDisabledChange?.(value) } public get lastCommandTimestamp(): number { diff --git a/freeroam-extended/client/src/view.ts b/freeroam-extended/client/src/view.ts index fdcf6da..92eb6d0 100644 --- a/freeroam-extended/client/src/view.ts +++ b/freeroam-extended/client/src/view.ts @@ -5,7 +5,9 @@ type EventNames = "openChat" | "closeChat" | "addString" | - "addMessage" + "addMessage" | + "setPlayerId" | + "setWeaponsDisabled" class View extends alt.WebView { public override emit(eventName: EventNames, ...args: unknown[]) { From 2789cdc5b13fc36222f7325f718e316982c3b923 Mon Sep 17 00:00:00 2001 From: xshady Date: Sun, 14 Aug 2022 18:45:12 +0300 Subject: [PATCH 27/49] client: use FocusData api --- freeroam-extended/client/src/helpers.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index a8e640b..d03c22c 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -203,8 +203,7 @@ export async function tpToWaypoint(): Promise { await alt.Utils.waitFor(() => { destPos = destPos.sub(0, 0, 200.0) - native.clearFocus() - native.setFocusPosAndVel(...destPos.toArray(), 0, 0, 0) + alt.FocusData.overrideFocus(destPos) if (destPos.z < -500) throw new Error("failed to get ground pos") @@ -245,7 +244,7 @@ export async function tpToWaypoint(): Promise { alt.emitServer("tp_to_waypoint", ...groundPos.toArray()) - native.clearFocus() + alt.FocusData.clearFocus() } function getWaypoint(sprite = 8): [number, number, number, number] | null { From e94390ef50ca82329cfaee798dfd76d866c55e02 Mon Sep 17 00:00:00 2001 From: xshady Date: Sun, 14 Aug 2022 18:53:24 +0300 Subject: [PATCH 28/49] client: refactor tp to waypoint a little bit --- freeroam-extended/client/src/helpers.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index d03c22c..0bebb59 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -192,10 +192,8 @@ export async function tpToWaypoint(): Promise { return } - const [x, y, z] = point - - native.setFocusPosAndVel(x, y, z, 0, 0, 0) - const startPos = new alt.Vector3(x, y, 1500) + alt.FocusData.overrideFocus(point) + const startPos = new alt.Vector3(point.x, point.y, 1500) let destPos = startPos let groundPos: alt.Vector3 | null = null @@ -222,7 +220,7 @@ export async function tpToWaypoint(): Promise { let foundZ: number | null = null try { await alt.Utils.waitFor(() => { - const [found, z] = native.getGroundZAndNormalFor3dCoord(x, y, 9999) + const [found, z] = native.getGroundZAndNormalFor3dCoord(point.x, point.y, 9999) if (!found) return false foundZ = z @@ -247,13 +245,11 @@ export async function tpToWaypoint(): Promise { alt.FocusData.clearFocus() } -function getWaypoint(sprite = 8): [number, number, number, number] | null { +function getWaypoint(sprite = 8): alt.Vector3 | null { const waypoint = native.getFirstBlipInfoId(sprite) - if (native.doesBlipExist(waypoint)) { - const coords = native.getBlipInfoIdCoord(waypoint) - return [coords.x, coords.y, coords.z, waypoint] - } + if (native.doesBlipExist(waypoint)) + return native.getBlipInfoIdCoord(waypoint) return null } From 4340fa2f3ec0889f17835e1ec87cf451856349a9 Mon Sep 17 00:00:00 2001 From: xshady Date: Mon, 22 Aug 2022 21:30:50 +0300 Subject: [PATCH 29/49] client: remove unused command timestamp --- freeroam-extended/client/src/chat.ts | 11 +-------- freeroam-extended/client/src/events.ts | 8 ++----- freeroam-extended/client/src/playerdata.ts | 27 ---------------------- 3 files changed, 3 insertions(+), 43 deletions(-) diff --git a/freeroam-extended/client/src/chat.ts b/freeroam-extended/client/src/chat.ts index 935cb47..2888290 100644 --- a/freeroam-extended/client/src/chat.ts +++ b/freeroam-extended/client/src/chat.ts @@ -44,17 +44,8 @@ view.on("chatloaded", () => { }) view.on("chatmessage", (text: string) => { - // alt.emitServer("chat:message", text); - - if (text.startsWith("/") && (Date.now() - playerData.lastCommandTimestamp) / 1000 > 10) - alt.emitServer("chat:message", text) - - // Activate this if we want a cd on the messages - // else if (playerData.chatState && ((Date.now() - playerData.lastMessageTimestamp) / 1000 > 10)) { - else if (playerData.chatState) { + if (playerData.chatState) alt.emitServer("chat:message", text) - playerData.lastMessageTimestamp = Date.now() - } alt.toggleGameControls(true) view.unfocus() diff --git a/freeroam-extended/client/src/events.ts b/freeroam-extended/client/src/events.ts index 404fa7a..4ced2a1 100644 --- a/freeroam-extended/client/src/events.ts +++ b/freeroam-extended/client/src/events.ts @@ -19,13 +19,9 @@ alt.onServer("airport_state", setWeaponsUsage) alt.onServer("chat:message", pushMessage) -alt.onServer("set_last_command", () => { - playerData.commandTimestamp = Date.now() -}) - alt.onServer("noclip", toggleNoclip) -alt.onServer("set_chat_state", state => { +alt.onServer("set_chat_state", (state: boolean) => { playerData.chatState = state }) @@ -38,7 +34,7 @@ alt.onServer("draw_dmzone", ( drawDMZone(centerX, centerY, radius, count) }) -alt.onServer("announce", (header, body, time) => { +alt.onServer("announce", (header: string, body: string, time: number) => { mhint(header, body, time) }) diff --git a/freeroam-extended/client/src/playerdata.ts b/freeroam-extended/client/src/playerdata.ts index c49fce7..757017d 100644 --- a/freeroam-extended/client/src/playerdata.ts +++ b/freeroam-extended/client/src/playerdata.ts @@ -4,10 +4,7 @@ class PlayerData { private _areNametagsVisible = true private _areWeaponsDisabled = true - private _lastCommandTimestamp = Date.now() - 10000 - private _lastMessageTimestamp = Date.now() - 10000 private _chatState = false - private _commandTimestamp = 0 public get areNametagsVisible(): boolean { return this._areNametagsVisible @@ -27,22 +24,6 @@ class PlayerData { this.onAreWeaponsDisabledChange?.(value) } - public get lastCommandTimestamp(): number { - return this._lastCommandTimestamp - } - - public set lastCommandTimestamp(value: number) { - this._lastCommandTimestamp = value - } - - public get lastMessageTimestamp(): number { - return this._lastMessageTimestamp - } - - public set lastMessageTimestamp(value: number) { - this._lastMessageTimestamp = value - } - public get chatState(): boolean { return this._chatState } @@ -50,14 +31,6 @@ class PlayerData { public set chatState(value: boolean) { this._chatState = value } - - public get commandTimestamp(): number { - return this._commandTimestamp - } - - public set commandTimestamp(value: number) { - this._commandTimestamp = value - } } export const playerData = new PlayerData() From ea2c188a9cb34b4e973d08be325b9a31bf9d01fd Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Mon, 22 Aug 2022 21:31:09 +0300 Subject: [PATCH 30/49] server: Added ability to override spawn position for all players, added getpos command, removed unnecessary set_last_command emit --- .../server/freeroam-extended/Commands.cs | 138 ++++++++++-------- .../server/freeroam-extended/Misc.cs | 6 +- 2 files changed, 80 insertions(+), 64 deletions(-) diff --git a/freeroam-extended/server/freeroam-extended/Commands.cs b/freeroam-extended/server/freeroam-extended/Commands.cs index bc7cbc7..1ec5a22 100644 --- a/freeroam-extended/server/freeroam-extended/Commands.cs +++ b/freeroam-extended/server/freeroam-extended/Commands.cs @@ -15,12 +15,12 @@ public class Commands : IScript [Command("veh")] public void SpawnVeh(IAltPlayer player, string vehicleName) { - if (Misc.BlacklistedVehicle.Contains(Alt.Hash(vehicleName))) + if (Misc.BlacklistedVehicle.Contains(Alt.Hash(vehicleName)) && !player.IsAdmin) { player.SendChatMessage("{FF0000} Vehicle is blacklisted."); return; } - + if (!Enum.IsDefined(typeof(VehicleModel), Alt.Hash(vehicleName))) { player.SendChatMessage("{FF0000} Invalid vehicle model!"); @@ -46,7 +46,7 @@ public void SpawnVeh(IAltPlayer player, string vehicleName) target.Remove(); player.SendChatMessage("{FF0000} You can't have more than 3 vehicles. We removed your oldest one!"); } - + if (player.IsInVehicle) { player.SendChatMessage("{FF0000} You are already in a vehicle we replaced it for you!"); @@ -58,14 +58,13 @@ public void SpawnVeh(IAltPlayer player, string vehicleName) { StatsHandler.StatsData.VehiclesSpawned++; } - - var spawnedVeh = (AltVehicle)Alt.CreateVehicle(Alt.Hash(vehicleName), - player.Position + new Position(1, 0, 0), new Rotation(0,0, player.Rotation.Yaw)); + + var spawnedVeh = (AltVehicle) Alt.CreateVehicle(Alt.Hash(vehicleName), + player.Position + new Position(1, 0, 0), new Rotation(0, 0, player.Rotation.Yaw)); player.SetIntoVehicle(spawnedVeh, 1); player.LastVehicleSpawn = DateTime.Now; player.Vehicles.Add(spawnedVeh); spawnedVeh.Owner = player; - player.Emit("set_last_command"); } // [Command("spectate")] @@ -96,15 +95,13 @@ public void GetWeapons(IAltPlayer player) { player.GiveWeapon(weapon, 1000, false); } - - player.Emit("set_last_command"); } // [Command("model")] // public void ChangeModel(IAltPlayer player, string modelName) // { // player.Model = Alt.Hash(modelName); - // player.Emit("set_last_command"); + // // } [Command("tp")] @@ -119,7 +116,6 @@ public void Teleport(IAltPlayer player, int id = 0) var spawnpoint = Misc.SpawnPositions[id - 1]; player.Position = spawnpoint + new Position(_random.Next(0, 10), _random.Next(0, 10), 0); - player.Emit("set_last_command"); } [Command("ban")] @@ -143,14 +139,13 @@ public void Ban(IAltPlayer player, int id) player.SendChatMessage($"{{FF0000}}Player with id {id} not found!"); return; } - + target.Kick("You've been banned from this server!"); - Misc.BannedPlayers.Add(new Tuple(target.HardwareIdHash, target.HardwareIdExHash)); + Misc.BannedPlayers.Add(new Tuple(target.HardwareIdHash, target.HardwareIdExHash)); string json = JsonSerializer.Serialize(Misc.BannedPlayers); File.WriteAllText(@"BannedPlayers.json", json); - + player.SendChatMessage($"{{00FF00}}Player with id {id} banned!"); - player.Emit("set_last_command"); } [Command("unban")] @@ -168,31 +163,28 @@ public void Unban(IAltPlayer player, ulong hwid) player.SendChatMessage($"{{FF0000}}Player with hwid {hwid} not found!"); return; } - + if (Misc.BannedPlayers.All(tuple => tuple.Item1 != hwid)) { player.SendChatMessage($"{{FF0000}}Player with hwid {hwid} not banned!"); return; } - + // remove banned player from list - Misc.BannedPlayers.Remove(new Tuple(player.HardwareIdHash, player.HardwareIdExHash)); + Misc.BannedPlayers.Remove(new Tuple(player.HardwareIdHash, player.HardwareIdExHash)); player.SendChatMessage($"{{00FF00}}Player with hwid {hwid} unbanned!"); - player.Emit("set_last_command"); } [Command("addcomponent")] public void WeaponComponent(IAltPlayer player, string name) { player.AddWeaponComponent(player.CurrentWeapon, Alt.Hash(name)); - player.Emit("set_last_command"); } [Command("removecomponent")] public void RemoveWeaponComponent(IAltPlayer player, string name) { player.RemoveWeaponComponent(player.CurrentWeapon, Alt.Hash(name)); - player.Emit("set_last_command"); } [Command("tune")] @@ -205,17 +197,18 @@ public void Tune(IAltPlayer player, int index, int value) } player.Vehicle.ModKit = 1; - player.Vehicle.SetMod((byte)index, (byte)value); - player.Emit("set_last_command"); + player.Vehicle.SetMod((byte) index, (byte) value); } [Command("dm")] public void Dm(IAltPlayer player) { - player.SendChatMessage(player.DmMode ? "{00FF00} Respawning in Death Match Zone disabled!" : "{00FF00}Respawning in Death Match Zone enabled!"); + player.SendChatMessage(player.DmMode + ? "{00FF00} Respawning in Death Match Zone disabled!" + : "{00FF00}Respawning in Death Match Zone enabled!"); player.DmMode = !player.DmMode; - if(player.DmMode) + if (player.DmMode) { var weapons = Misc.WhitelistedWeapons; foreach (var weapon in weapons) @@ -223,11 +216,10 @@ public void Dm(IAltPlayer player) player.GiveWeapon(weapon, 1000, false); } - var randomSpawnPoint = Misc.AirportSpawnPositions.ElementAt(_random.Next(0, Misc.AirportSpawnPositions.Length)); + var randomSpawnPoint = + Misc.AirportSpawnPositions.ElementAt(_random.Next(0, Misc.AirportSpawnPositions.Length)); player.Spawn(randomSpawnPoint + new Position(_random.Next(0, 10), _random.Next(0, 10), 0)); } - - player.Emit("set_last_command"); } [Command("togglechat")] @@ -260,7 +252,6 @@ public void Dimension(IAltPlayer player, int dimension = 0) } player.Dimension = dimension; - player.Emit("set_last_command"); } [Command("clearvehicles")] @@ -271,7 +262,6 @@ public void ClearVehicles(IAltPlayer player) { veh.Remove(); } - player.Emit("set_last_command"); } [Command("tpallhere")] @@ -289,7 +279,6 @@ public void TpAllhere(IAltPlayer player) target.Position = player.Position; target.SendChatMessage("{00FF00} You were teleported to " + player.Name + "!"); } - player.Emit("set_last_command"); } [Command("tphere")] @@ -307,9 +296,9 @@ public void TpHere(IAltPlayer player, int target) player.SendChatMessage("{FF0000} Player not found!"); return; } + targetPlayer.Position = player.Position; targetPlayer.SendChatMessage("{00FF00} You were teleported to " + player.Name + "!"); - player.Emit("set_last_command"); } [Command("tpto")] @@ -327,9 +316,9 @@ public void TpTo(IAltPlayer player, int target) player.SendChatMessage("{FF0000} Player not found!"); return; } + player.Position = targetPlayer.Position; player.SendChatMessage("{00FF00} You were teleported to " + targetPlayer.Name + "!"); - player.Emit("set_last_command"); } [Command("clearallvehicles")] @@ -347,6 +336,7 @@ public void ClearAllVehicles(IAltPlayer player, int distance = 0) { veh.Remove(); } + return; } @@ -356,7 +346,6 @@ public void ClearAllVehicles(IAltPlayer player, int distance = 0) // compare squared distance between player and vehicle if (Vector3.DistanceSquared(veh.Position, player.Position) <= distSqr) veh.Remove(); } - player.Emit("set_last_command"); } [Command("settime")] @@ -367,6 +356,7 @@ public void SetTime(IAltPlayer player, int hour) player.SendChatMessage("{FF0000} No permission!"); return; } + if (hour > 23 || hour < 0) { player.SendChatMessage("{FF0000} Invalid hour!"); @@ -377,7 +367,6 @@ public void SetTime(IAltPlayer player, int hour) { p.SetDateTime(0, 0, 0, hour, 0, 0); } - player.Emit("set_last_command"); } [Command("setweather")] @@ -388,19 +377,21 @@ public void SetWeather(IAltPlayer player, uint weather) player.SendChatMessage("{FF0000} No permission!"); return; } + if (weather > 14) { player.SendChatMessage("{FF0000} Invalid weather!"); return; } + foreach (var p in Alt.GetAllPlayers()) { p.SetWeather(weather); } + Misc.Weather = weather; - player.Emit("set_last_command"); } - + [Command("noclip")] public void NoClip(IAltPlayer player) { @@ -414,14 +405,15 @@ public void NoClip(IAltPlayer player) player.Streamed = !player.NoClip; player.Visible = !player.NoClip; player.SendChatMessage($"{{00FF00}}NoClip is now {(player.NoClip ? "enabled" : "disabled")}!"); - player.Emit("set_last_command"); + player.Emit("noclip", player.NoClip); } [Command("revive")] public void Respawn(IAltPlayer player) { - player.Spawn(player.Position); + if (Misc.AdminOverridedSpawnPos is not null) player.Spawn((Position) Misc.AdminOverridedSpawnPos); + else player.Spawn(player.Position); player.ClearBloodDamage(); } @@ -433,11 +425,11 @@ public void Announce(IAltPlayer player, string header, int time, params string[] player.SendChatMessage("{FF0000} No permission!"); return; } - + var message = string.Join(" ", body); Alt.EmitAllClients("announce", header, message, time); } - + [Command("tpcoords")] public void TpCoords(IAltPlayer player, int x, int y, int z) { @@ -446,12 +438,11 @@ public void TpCoords(IAltPlayer player, int x, int y, int z) player.SendChatMessage("{FF0000} No permission!"); return; } - + player.Position = new Vector3(x, y, z); player.SendChatMessage($"{{00FF00}} You were teleported to {x}, {y}, {z}!"); - player.Emit("set_last_command"); } - + [Command("kick")] public void Kick(IAltPlayer player, int id) { @@ -473,13 +464,12 @@ public void Kick(IAltPlayer player, int id) player.SendChatMessage($"{{FF0000}}Player with id {id} not found!"); return; } - + target.Kick("You've been kicked from this server!"); player.SendChatMessage($"{{00FF00}}Player with id {id} kicked!"); - player.Emit("set_last_command"); } - + [Command("godmode")] public void Godmode(IAltPlayer player, int id) { @@ -488,7 +478,7 @@ public void Godmode(IAltPlayer player, int id) player.SendChatMessage("{FF0000} No permission!"); return; } - + var target = Alt.GetAllPlayers().FirstOrDefault(p => p.Id == id); if (target == null) { @@ -497,35 +487,61 @@ public void Godmode(IAltPlayer player, int id) } target.Invincible = !target.Invincible; - target.SendChatMessage($"{(target.Invincible ? "{00FF00}" : "{FF0000}")}Godmode {(target.Invincible ? "on" : "off")}!"); + target.SendChatMessage( + $"{(target.Invincible ? "{00FF00}" : "{FF0000}")}Godmode {(target.Invincible ? "on" : "off")}!"); - if (player.Id != target.Id) player.SendChatMessage($"{{00FF00}}Godmode {(target.Invincible ? "on" : "off")}!"); - player.Emit("set_last_command"); + if (player.Id != target.Id) + player.SendChatMessage($"{{00FF00}}Godmode {(target.Invincible ? "on" : "off")}!"); } - - [Command("godmodeall")] - public void GodmodeAllPlayers(IAltPlayer player, bool mode) + + [Command("overridespawnpos")] + public void OverrideSpawnPos(IAltPlayer player, bool mode) { if (!player.IsAdmin) { player.SendChatMessage("{FF0000} No permission!"); return; } - - var targets = Alt.GetAllPlayers().ToList(); - if (targets.Count <= 0) + + if (mode) + { + var pos = player.Position; + Misc.AdminOverridedSpawnPos = pos; + + player.SendChatMessage( + $"{{00FF00}} You're overrided spawn position for all player on {pos.X}, {pos.Y}, {pos.Z}!"); + } + else + { + Misc.AdminOverridedSpawnPos = null; + player.SendChatMessage($"{{00FF00}} You're no longer overrided spawn position!"); + } + } + + [Command("getpos")] + public void GetPosition(IAltPlayer player) + { + var pos = player.Position; + player.SendChatMessage($"{{00FF00}} Your position is {pos.X}, {pos.Y}, {pos.Z}!"); + player.Emit("get-pos"); + } + + [Command("godmodeall")] + public void GodmodeAllPlayers(IAltPlayer player, bool mode) + { + if (!player.IsAdmin) { - player.SendChatMessage("{{FF0000}}Players not found!"); + player.SendChatMessage("{FF0000} No permission!"); return; } + var targets = Alt.GetAllPlayers().ToList(); + foreach (var target in targets) { target.Invincible = mode; - target.SendChatMessage($"{(mode ? "{00FF00}" : "{FF0000}")}Godmode for all players is {(mode ? "activated" : "deactivated")}!"); + target.SendChatMessage($"{{00FF00}}Godmode for all players is {(mode ? "activated" : "deactivated")}!"); } - - player.Emit("set_last_command"); } } } \ No newline at end of file diff --git a/freeroam-extended/server/freeroam-extended/Misc.cs b/freeroam-extended/server/freeroam-extended/Misc.cs index 780c0df..bb7a8c0 100644 --- a/freeroam-extended/server/freeroam-extended/Misc.cs +++ b/freeroam-extended/server/freeroam-extended/Misc.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using AltV.Net.Data; +using AltV.Net.Data; namespace Freeroam_Extended { @@ -313,5 +311,7 @@ public static class Misc public static Position DMPos = new Position(-1216.839599609375f, -2832.514404296875f, 13.9296875f); public static int DMRadius = 800; + + public static Position? AdminOverridedSpawnPos = null; } } \ No newline at end of file From b8183449e832c8074d7a79fef3a298fe5f1b47e4 Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Mon, 22 Aug 2022 21:32:47 +0300 Subject: [PATCH 31/49] server: Removed async context --- .../server/freeroam-extended/EventHandler.cs | 201 ++++++++---------- .../Factories/PlayerFactory.cs | 14 +- .../Factories/VehicleFactory.cs | 13 +- .../server/freeroam-extended/Main.cs | 13 +- 4 files changed, 115 insertions(+), 126 deletions(-) diff --git a/freeroam-extended/server/freeroam-extended/EventHandler.cs b/freeroam-extended/server/freeroam-extended/EventHandler.cs index 1416997..8afb239 100644 --- a/freeroam-extended/server/freeroam-extended/EventHandler.cs +++ b/freeroam-extended/server/freeroam-extended/EventHandler.cs @@ -1,11 +1,5 @@ -using System; -using System.Linq; -using System.Threading.Tasks; -using System.IO; +using System.Numerics; using System.Text.Json; -using System.Text.Json.Serialization; -using System.Collections.Generic; -using System.Numerics; using AltV.Net; using AltV.Net.Async; using AltV.Net.Data; @@ -23,7 +17,7 @@ public EventHandler() { Alt.OnPlayerCustomEvent += (player, name, array) => { - var altPlayer = (IAltPlayer)player; + var altPlayer = (IAltPlayer) player; if (name != "chat:message" && !altPlayer.IsAdmin) { #if RELEASE @@ -31,52 +25,50 @@ public EventHandler() player.Kick("You are not allowed to use this Event."); Misc.BannedPlayers.Add(new Tuple(altPlayer.HardwareIdHash, altPlayer.HardwareIdExHash)); #endif - }; + } + altPlayer.EventCount++; if (altPlayer.EventCount > 100) altPlayer.Kick("Event count exceeded"); }; } - - private readonly Random _random = new Random(); + + private readonly Random _random = new(); [ScriptEvent(ScriptEventType.PlayerConnect)] public async Task OnPlayerConnect(IAltPlayer player, string reason) { - await using( var asyncContext = AsyncContext.Create() ) - { - if (!player.TryToAsync(asyncContext, out var asyncPlayer)) return; - - if (Misc.BannedPlayers.Contains(new Tuple(asyncPlayer.HardwareIdHash, asyncPlayer.HardwareIdExHash))) - { - asyncPlayer.Kick("You're banned from this server!"); - AltAsync.Log($"HWID: {asyncPlayer.HardwareIdHash}, SC: {asyncPlayer.SocialClubId}. Tried to join the server with a ban."); - return; - } - - if (Misc.Operators.Contains(new Tuple(asyncPlayer.HardwareIdHash, asyncPlayer.HardwareIdExHash))) - asyncPlayer.IsAdmin = true; - - // select random entry from SpawnPoints - var randomSpawnPoint = Misc.SpawnPositions.ElementAt(_random.Next(0, Misc.SpawnPositions.Length)); - asyncPlayer.Spawn(randomSpawnPoint + new Position(_random.Next(0, 10), _random.Next(0, 10), 0)); - asyncPlayer.Model = (uint)PedModel.FreemodeMale01; - asyncPlayer.SetDateTime(1, 1, 1, Misc.Hour, 1, 1); - asyncPlayer.SetWeather(Misc.Weather); - - asyncPlayer.Emit("draw_dmzone", Misc.DMPos.X, Misc.DMPos.Y, Misc.DMRadius, 150); - - if(asyncPlayer.IsAdmin) - asyncPlayer.Emit("set_chat_state", true); - + if (Misc.BannedPlayers.Contains(new Tuple(player.HardwareIdHash, + player.HardwareIdExHash))) + { + player.Kick("You're banned from this server!"); + AltAsync.Log( + $"HWID: {player.HardwareIdHash}, SC: {player.SocialClubId}. Tried to join the server with a ban."); + return; } + if (Misc.Operators.Contains(new Tuple(player.HardwareIdHash, player.HardwareIdExHash))) + player.IsAdmin = true; + + // select random entry from SpawnPoints + var randomSpawnPoint = Misc.AdminOverridedSpawnPos is not null + ? Misc.AdminOverridedSpawnPos + : Misc.SpawnPositions.ElementAt(_random.Next(0, Misc.SpawnPositions.Length)); + player.Spawn((Position) randomSpawnPoint + new Position(_random.Next(0, 10), _random.Next(0, 10), 0)); + player.Model = (uint) PedModel.FreemodeMale01; + player.SetDateTime(1, 1, 1, Misc.Hour, 1, 1); + player.SetWeather(Misc.Weather); + + player.Emit("draw_dmzone", Misc.DMPos.X, Misc.DMPos.Y, Misc.DMRadius, 150); + + if (player.IsAdmin) + player.Emit("set_chat_state", true); + + // create async context lock (StatsHandler.StatsData) { StatsHandler.StatsData.PlayerConnections++; } - - return; } [ScriptEvent(ScriptEventType.VehicleDestroy)] @@ -86,6 +78,7 @@ public void OnVehicleDestroy(IAltVehicle target) { StatsHandler.StatsData.VehiclesDestroyed++; } + target.Owner.SendChatMessage("Your Vehicle got destroyed. We removed it for you!"); target.Remove(); } @@ -94,7 +87,7 @@ public void OnVehicleDestroy(IAltVehicle target) public void OnPlayerDisconnect(IAltPlayer player, string reason) { var vehicles = player.Vehicles; - + foreach (var veh in vehicles) { veh.Remove(); @@ -104,29 +97,24 @@ public void OnPlayerDisconnect(IAltPlayer player, string reason) [ScriptEvent(ScriptEventType.PlayerDead)] public async Task OnPlayerDead(IAltPlayer player, IEntity killer, uint weapon) { + if (killer is not IAltPlayer killerPlayer) return; var spawnPointPool = player.DmMode ? Misc.AirportSpawnPositions : Misc.SpawnPositions; - await using (var asyncContext = AsyncContext.Create()) + var randomSpawnPoint = spawnPointPool.ElementAt(_random.Next(0, spawnPointPool.Length)); + player.Spawn(randomSpawnPoint + new Position(_random.Next(0, 10), _random.Next(0, 10), 0)); + + lock (StatsHandler.StatsData) { - if (!player.TryToAsync(asyncContext, out var asyncPlayer)) return; - if (killer is not IAltPlayer killerPlayer) return; - if (!killerPlayer.TryToAsync(asyncContext, out var asyncKillerPlayer)) return; - - var randomSpawnPoint = spawnPointPool.ElementAt(_random.Next(0, spawnPointPool.Length)); - asyncPlayer.Spawn(randomSpawnPoint + new Position(_random.Next(0, 10), _random.Next(0, 10), 0)); - - lock (StatsHandler.StatsData) - { - StatsHandler.StatsData.PlayerDeaths++; - } - - if (!Misc.BlacklistedWeapons.Contains(weapon)) return; - Alt.Core.LogColored($"~r~ Banned Player: {asyncKillerPlayer.Name} ({asyncKillerPlayer.Id}) for using illegal weapon!"); - Misc.BannedPlayers.Add(new Tuple(asyncKillerPlayer.HardwareIdHash, asyncKillerPlayer.HardwareIdExHash)); - string json = JsonSerializer.Serialize(Misc.BannedPlayers); - await File.WriteAllTextAsync(@"BannedPlayers.json", json); - asyncKillerPlayer.Kick("You're banned from this server!"); + StatsHandler.StatsData.PlayerDeaths++; } + + if (!Misc.BlacklistedWeapons.Contains(weapon)) return; + Alt.Core.LogColored( + $"~r~ Banned Player: {killerPlayer.Name} ({killerPlayer.Id}) for using illegal weapon!"); + Misc.BannedPlayers.Add(new Tuple(killerPlayer.HardwareIdHash, killerPlayer.HardwareIdExHash)); + string json = JsonSerializer.Serialize(Misc.BannedPlayers); + await File.WriteAllTextAsync(@"BannedPlayers.json", json); + killerPlayer.Kick("You're banned from this server!"); } [ScriptEvent(ScriptEventType.ConsoleCommand)] @@ -136,7 +124,7 @@ public async Task OnConsoleCommand(string name, string[] args) switch (name) { case "op": - if (args.Length is > 1 or 0) + if (args.Length is > 1 or 0) { Alt.Log("Usage: op "); break; @@ -145,69 +133,66 @@ public async Task OnConsoleCommand(string name, string[] args) var playerOp = playerPool.FirstOrDefault(x => x.Id == int.Parse(args[0])); if (playerOp is not IAltPlayer playerOpAlt) return; - await using (var asyncContext = AsyncContext.Create()) + + if (Misc.Operators.Any(tuple => + tuple.Item1 == playerOpAlt.HardwareIdHash && + tuple.Item2 == playerOpAlt.HardwareIdExHash)) { - if (!playerOpAlt.TryToAsync(asyncContext, out var asyncPlayer)) return; - if (Misc.Operators.Any(tuple => tuple.Item1 == asyncPlayer.HardwareIdHash && tuple.Item2 == asyncPlayer.HardwareIdExHash)) - { - Alt.Log($"Id {args[0]} already is an operator!"); - break; - } - Misc.Operators.Add(new Tuple(asyncPlayer.HardwareIdHash, asyncPlayer.HardwareIdExHash)); - string json = JsonSerializer.Serialize(Misc.Operators); - await File.WriteAllTextAsync(@"Operators.json", json); - - await asyncPlayer.EmitAsync("set_chat_state", true); - asyncPlayer.IsAdmin = true; + Alt.Log($"Id {args[0]} already is an operator!"); break; } + Misc.Operators.Add(new Tuple(playerOpAlt.HardwareIdHash, + playerOpAlt.HardwareIdExHash)); + string json = JsonSerializer.Serialize(Misc.Operators); + await File.WriteAllTextAsync(@"Operators.json", json); + + await playerOpAlt.EmitAsync("set_chat_state", true); + playerOpAlt.IsAdmin = true; + break; + + case "deop": - if (args.Length is > 1 or 0) + if (args.Length is > 1 or 0) { Alt.Log("Usage: deop "); break; } + var playerDeOp = playerPool.FirstOrDefault(x => x.Id == int.Parse(args[0])); if (playerDeOp is not IAltPlayer playerDeOpAlt) return; - await using (var asyncContext = AsyncContext.Create()) + + if (!Misc.Operators.Any(tuple => + tuple.Item1 == playerDeOpAlt.HardwareIdHash && + tuple.Item2 == playerDeOpAlt.HardwareIdExHash)) { - if (!playerDeOpAlt.TryToAsync(asyncContext, out var asyncPlayer)) return; - - if (!Misc.Operators.Any(tuple => tuple.Item1 == asyncPlayer.HardwareIdHash && tuple.Item2 == asyncPlayer.HardwareIdExHash)) - { - AltAsync.Log($"Id {args[0]} is not an operator!"); - break; - } - Misc.Operators.Remove(new Tuple(asyncPlayer.HardwareIdHash, asyncPlayer.HardwareIdExHash)); - await asyncPlayer.EmitAsync("set_chat_state", Misc.ChatState); - asyncPlayer.IsAdmin = false; + AltAsync.Log($"Id {args[0]} is not an operator!"); break; } + + Misc.Operators.Remove(new Tuple(playerDeOpAlt.HardwareIdHash, + playerDeOpAlt.HardwareIdExHash)); + await playerDeOpAlt.EmitAsync("set_chat_state", Misc.ChatState); + playerDeOpAlt.IsAdmin = false; + break; } - return; } [ScriptEvent(ScriptEventType.WeaponDamage)] public async Task OnWeaponDamage(IAltPlayer player, IEntity target, uint weapon, ushort damage, Position shotOffset, BodyPart bodyPart) { - await using (var asyncContext = AsyncContext.Create()) - { - if (!player.TryToAsync(asyncContext, out var asyncPlayer)) return; - if (!Misc.BlacklistedWeapons.Contains(weapon) || player is not { } damagePlayer) return; - if (!damagePlayer.TryToAsync(asyncContext, out var asyncDamagePlayer)) return; - - - - Alt.Core.LogColored($"~r~ Banned Player: {asyncDamagePlayer.Name} ({asyncDamagePlayer.Id}) for using illegal weapon!"); - //Misc.BannedPlayers.Add((damagePlayer.HardwareIdHash, damagePlayer.HardwareIdExHash)); - Misc.BannedPlayers.Add(new Tuple(asyncDamagePlayer.HardwareIdHash, asyncDamagePlayer.HardwareIdExHash)); - string json = JsonSerializer.Serialize(Misc.BannedPlayers); - File.WriteAllText(@"BannedPlayers.json", json); - - asyncPlayer.Kick("You're banned from this server!"); - } + if (!Misc.BlacklistedWeapons.Contains(weapon) || player is not { } damagePlayer) return; + + Alt.Core.LogColored( + $"~r~ Banned Player: {damagePlayer.Name} ({damagePlayer.Id}) for using illegal weapon!"); + //Misc.BannedPlayers.Add((damagePlayer.HardwareIdHash, damagePlayer.HardwareIdExHash)); + Misc.BannedPlayers.Add(new Tuple(damagePlayer.HardwareIdHash, + damagePlayer.HardwareIdExHash)); + string json = JsonSerializer.Serialize(Misc.BannedPlayers); + await File.WriteAllTextAsync(@"BannedPlayers.json", json); + + player.Kick("You're banned from this server!"); } [ScriptEvent(ScriptEventType.ColShape)] @@ -215,7 +200,6 @@ public void OnColshapeEnter(IColShape colshape, IEntity target, bool state) { if (target is not IAltPlayer targetPlayer) return; - // entity to async targetPlayer.EnableWeaponUsage = state; targetPlayer.Emit("airport_state", state); } @@ -234,7 +218,8 @@ public bool OnExplosion(IAltPlayer player, ExplosionType explosionType, Position } [ScriptEvent(ScriptEventType.StartProjectile)] - public bool OnProjectileStart(IAltPlayer player, Position startPosition, Position direction, uint ammoHash, uint weaponHash) + public bool OnProjectileStart(IAltPlayer player, Position startPosition, Position direction, uint ammoHash, + uint weaponHash) { return false; } @@ -258,7 +243,7 @@ public void OnChatMessage(IAltPlayer player, params string[] args) $"{(player.IsAdmin ? "{008736}" : "{FFFFFF}")} {player.Name}({player.Id}): {{FFFFFF}}{message}"); } } - + [ClientEvent("tp_to_waypoint")] public void TeleportWaypoint(IAltPlayer player, int x, int y, int z) { @@ -270,8 +255,8 @@ public void TeleportWaypoint(IAltPlayer player, int x, int y, int z) if (player.IsInVehicle) player.Vehicle.Position = new Vector3(x, y, z); else player.Position = new Vector3(x, y, z); - + player.SendChatMessage($"{{00FF00}} You were teleported to waypoint on {x}, {y}, {z}!"); } - } -} + } +} \ No newline at end of file diff --git a/freeroam-extended/server/freeroam-extended/Factories/PlayerFactory.cs b/freeroam-extended/server/freeroam-extended/Factories/PlayerFactory.cs index 4f0b8b1..463fe19 100644 --- a/freeroam-extended/server/freeroam-extended/Factories/PlayerFactory.cs +++ b/freeroam-extended/server/freeroam-extended/Factories/PlayerFactory.cs @@ -1,12 +1,11 @@ -using System; -using System.Collections.Generic; -using AltV.Net; -using AltV.Net.Async.CodeGen; +using AltV.Net; +using AltV.Net.Async; +using AltV.Net.Async.Elements.Entities; using AltV.Net.Elements.Entities; namespace Freeroam_Extended.Factories { - public partial interface IAltPlayer : IPlayer + public partial interface IAltPlayer : IPlayer, IAsyncConvertible { public IList Vehicles { get; set; } public DateTime LastVehicleSpawn { get; set; } @@ -18,8 +17,7 @@ public partial interface IAltPlayer : IPlayer public int EventCount { get; set; } } - [AsyncEntity(typeof(IAltPlayer))] - public partial class AltPlayer : Player, IAltPlayer + public partial class AltPlayer : AsyncPlayer, IAltPlayer { public IList Vehicles { get; set; } public DateTime LastVehicleSpawn { get; set; } @@ -34,6 +32,8 @@ public AltPlayer(ICore server, IntPtr nativePointer, ushort id) : base(server, n { Vehicles = new List(); } + + public new IAltPlayer ToAsync(IAsyncContext _) => this; } public class AltPlayerFactory : IEntityFactory diff --git a/freeroam-extended/server/freeroam-extended/Factories/VehicleFactory.cs b/freeroam-extended/server/freeroam-extended/Factories/VehicleFactory.cs index 160e1e6..01e1c4f 100644 --- a/freeroam-extended/server/freeroam-extended/Factories/VehicleFactory.cs +++ b/freeroam-extended/server/freeroam-extended/Factories/VehicleFactory.cs @@ -1,19 +1,18 @@ -using System; -using AltV.Net; +using AltV.Net; +using AltV.Net.Async; +using AltV.Net.Async.Elements.Entities; using AltV.Net.Data; using AltV.Net.Elements.Entities; -using AltV.Net.Async.CodeGen; namespace Freeroam_Extended.Factories { - public partial interface IAltVehicle : IVehicle + public partial interface IAltVehicle : IVehicle, IAsyncConvertible { public IAltPlayer Owner { get; set; } public DateTime SpawnTime { get; set; } } - [AsyncEntity(typeof(IAltVehicle))] - public partial class AltVehicle : Vehicle, IAltVehicle + public partial class AltVehicle : AsyncVehicle, IAltVehicle { public IAltPlayer Owner { get; set; } public DateTime SpawnTime { get; set; } @@ -27,6 +26,8 @@ public AltVehicle(ICore server, IntPtr nativePointer, ushort id) : base(server, { SpawnTime = DateTime.Now; } + + public new IAltVehicle ToAsync(IAsyncContext _) => this; } public class AltVehicleFactory : IEntityFactory diff --git a/freeroam-extended/server/freeroam-extended/Main.cs b/freeroam-extended/server/freeroam-extended/Main.cs index 74f6801..40adcc7 100644 --- a/freeroam-extended/server/freeroam-extended/Main.cs +++ b/freeroam-extended/server/freeroam-extended/Main.cs @@ -1,16 +1,19 @@ -using System; -using System.IO; -using System.Text.Json; -using System.Collections.Generic; +using System.Text.Json; using AltV.Net; using AltV.Net.Async; using AltV.Net.Elements.Entities; using Freeroam_Extended.Factories; +using Timer = System.Timers.Timer; namespace Freeroam_Extended { public class Main : AsyncResource { + public Main() : base(true) + { + + } + public override void OnStart() { Alt.Core.LogColored("~g~ Freeroam-Extended Started!"); @@ -59,7 +62,7 @@ public override void OnStart() if (stats != null) StatsHandler.StatsData = stats; } - var fileWriteTimer = new System.Timers.Timer(); + var fileWriteTimer = new Timer(); fileWriteTimer.Interval = 60000; fileWriteTimer.Enabled = true; fileWriteTimer.Elapsed += (sender, args) => From 840552d011e42267047928b9c6ce42d46346fb4b Mon Sep 17 00:00:00 2001 From: xshady Date: Mon, 22 Aug 2022 22:10:05 +0300 Subject: [PATCH 32/49] client: add chat input autofocus --- freeroam-extended/client/html/app.js | 8 ++++++-- freeroam-extended/client/src/chat.ts | 6 ++++++ freeroam-extended/client/src/events.ts | 3 --- freeroam-extended/client/src/game-focus-change.ts | 15 +++++++++++++++ freeroam-extended/client/src/index.ts | 1 + freeroam-extended/client/src/view.ts | 3 ++- 6 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 freeroam-extended/client/src/game-focus-change.ts diff --git a/freeroam-extended/client/html/app.js b/freeroam-extended/client/html/app.js index c2382ec..ba028c4 100644 --- a/freeroam-extended/client/html/app.js +++ b/freeroam-extended/client/html/app.js @@ -176,8 +176,7 @@ function setPlayerId (id) { function setWeaponsDisabled (disabled) { const el = document.querySelector(".weapons-enabled").children[0]; - const [, styleClass] = el.classList; - + if (disabled) { el.classList.remove("weapons-enabled-on"); el.classList.add("weapons-enabled-off"); @@ -190,6 +189,10 @@ function setWeaponsDisabled (disabled) { } } +function focusChatInput () { + msgInputLine.focus(); +} + alt.on("addString", (text) => addString(colorify(text))); alt.on("addMessage", (name, text) => addString("" + name + ": " + colorify(text))); alt.on("openChat", openChat); @@ -197,3 +200,4 @@ alt.on("closeChat", closeChat); alt.on("updatePlayersOnline", updatePlayersOnline); alt.on("setPlayerId", setPlayerId); alt.on("setWeaponsDisabled", setWeaponsDisabled); +alt.on("focusChatInput", focusChatInput); diff --git a/freeroam-extended/client/src/chat.ts b/freeroam-extended/client/src/chat.ts index 2888290..54953c2 100644 --- a/freeroam-extended/client/src/chat.ts +++ b/freeroam-extended/client/src/chat.ts @@ -36,6 +36,12 @@ export function pushLine(text: string): void { pushMessage(null, text) } +export function onGameFocusChange(state: boolean): void { + if (!state) return + if (!chatData.opened) return + view.emit("focusChatInput") +} + view.on("chatloaded", () => { for (const msg of buffer) addMessage(msg.name, msg.text) diff --git a/freeroam-extended/client/src/events.ts b/freeroam-extended/client/src/events.ts index 4ced2a1..a3b1fcf 100644 --- a/freeroam-extended/client/src/events.ts +++ b/freeroam-extended/client/src/events.ts @@ -79,8 +79,5 @@ alt.on("keyup", (key) => { } break } - - default: - break } }) diff --git a/freeroam-extended/client/src/game-focus-change.ts b/freeroam-extended/client/src/game-focus-change.ts new file mode 100644 index 0000000..be7775c --- /dev/null +++ b/freeroam-extended/client/src/game-focus-change.ts @@ -0,0 +1,15 @@ +import * as alt from "alt-client" +import * as chat from "./chat" + +let state = alt.isGameFocused() + +const gameFocusChange = () => { + chat.onGameFocusChange(state) +} + +setInterval(() => { + const current = alt.isGameFocused() + if (state === current) return + state = current + gameFocusChange() +}, 500) diff --git a/freeroam-extended/client/src/index.ts b/freeroam-extended/client/src/index.ts index 3bdd5a9..4020d3e 100644 --- a/freeroam-extended/client/src/index.ts +++ b/freeroam-extended/client/src/index.ts @@ -9,6 +9,7 @@ import { view } from "./view" import { playerNametags } from "./nametags" import { ConfigFlag, StatName, WatermarkPosition } from "altv-enums" import { ATTACK_CONTROLS } from "./const" +import "./game-focus-change" alt.setConfigFlag(ConfigFlag.DisableAutoWeaponSwap, true) alt.setConfigFlag(ConfigFlag.DisableIdleCamera, true) diff --git a/freeroam-extended/client/src/view.ts b/freeroam-extended/client/src/view.ts index 92eb6d0..4245bfe 100644 --- a/freeroam-extended/client/src/view.ts +++ b/freeroam-extended/client/src/view.ts @@ -7,7 +7,8 @@ type EventNames = "addString" | "addMessage" | "setPlayerId" | - "setWeaponsDisabled" + "setWeaponsDisabled" | + "focusChatInput" class View extends alt.WebView { public override emit(eventName: EventNames, ...args: unknown[]) { From ebca1f2624ab0f3f27f4bb61f04e2ea8e8b32557 Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Mon, 22 Aug 2022 22:13:05 +0300 Subject: [PATCH 33/49] server: Renamed get-pos event to snakecase --- freeroam-extended/server/freeroam-extended/Commands.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freeroam-extended/server/freeroam-extended/Commands.cs b/freeroam-extended/server/freeroam-extended/Commands.cs index 1ec5a22..f0cbdc6 100644 --- a/freeroam-extended/server/freeroam-extended/Commands.cs +++ b/freeroam-extended/server/freeroam-extended/Commands.cs @@ -523,7 +523,7 @@ public void GetPosition(IAltPlayer player) { var pos = player.Position; player.SendChatMessage($"{{00FF00}} Your position is {pos.X}, {pos.Y}, {pos.Z}!"); - player.Emit("get-pos"); + player.Emit("get_pos"); } [Command("godmodeall")] From dc295b192fab80f2b922d4e4daa51a7dcfc9c851 Mon Sep 17 00:00:00 2001 From: xshady Date: Mon, 22 Aug 2022 23:18:45 +0300 Subject: [PATCH 34/49] client: add getpos command copying to clipboard (doesnt work yet https://github.com/altmp/altv-issues/issues/1628) --- freeroam-extended/client/resource.cfg | 4 +++ freeroam-extended/client/src/events.ts | 36 +++++++++++++++++++------- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/freeroam-extended/client/resource.cfg b/freeroam-extended/client/resource.cfg index 22d5bdb..3b6575d 100644 --- a/freeroam-extended/client/resource.cfg +++ b/freeroam-extended/client/resource.cfg @@ -5,3 +5,7 @@ client-files: [ dist/client.js html/* ] +# TODO: turn on after fixing: https://github.com/altmp/altv-issues/issues/1628 +# optional-permissions: [ +# Clipboard Access +# ] diff --git a/freeroam-extended/client/src/events.ts b/freeroam-extended/client/src/events.ts index a3b1fcf..2f3b90d 100644 --- a/freeroam-extended/client/src/events.ts +++ b/freeroam-extended/client/src/events.ts @@ -1,11 +1,12 @@ import * as native from "natives" import * as alt from "alt-client" -import { drawDMZone, setWeaponsUsage, mhint, tpToWaypoint } from "./helpers" -import { pushMessage, chatData, toggleChat } from "./chat" +import { drawDMZone, setWeaponsUsage, mhint, tpToWaypoint, LOCAL_PLAYER } from "./helpers" +import * as chat from "./chat" import { toggleNoclip } from "./noclip" import { KeyCode } from "./keycodes" import { playerData } from "./playerdata" import { view } from "./view" +import { Permission, PermissionState } from "altv-enums" alt.on("connectionComplete", () => { setTimeout(() => { @@ -17,7 +18,7 @@ alt.on("connectionComplete", () => { alt.onServer("airport_state", setWeaponsUsage) -alt.onServer("chat:message", pushMessage) +alt.onServer("chat:message", chat.pushMessage) alt.onServer("noclip", toggleNoclip) @@ -39,14 +40,14 @@ alt.onServer("announce", (header: string, body: string, time: number) => { }) alt.on("keyup", (key) => { - if (!chatData.loaded) return + if (!chat.chatData.loaded) return switch (key) { case KeyCode.F2: { playerData.areNametagsVisible = !playerData.areNametagsVisible native.displayRadar(playerData.areNametagsVisible) native.displayHud(playerData.areNametagsVisible) - toggleChat() + chat.toggleChat() break } @@ -59,8 +60,8 @@ alt.on("keyup", (key) => { break } - if (!chatData.opened && alt.gameControlsEnabled()) { - chatData.opened = true + if (!chat.chatData.opened && alt.gameControlsEnabled()) { + chat.chatData.opened = true view.emit("openChat", false) view.focus() alt.toggleGameControls(false) @@ -70,8 +71,8 @@ alt.on("keyup", (key) => { } case KeyCode.Escape: { // Escape - if (chatData.opened) { - chatData.opened = false + if (chat.chatData.opened) { + chat.chatData.opened = false view.emit("closeChat") view.unfocus() alt.toggleGameControls(true) @@ -81,3 +82,20 @@ alt.on("keyup", (key) => { } } }) + +alt.onServer("get_pos", () => { + const state = alt.getPermissionState(Permission.ClipboardAccess) + + if (state !== PermissionState.Allowed) { + alt.log("get_pos clipboard access is not allowed, state:", state) + return + } + + alt.copyToClipboard(LOCAL_PLAYER.pos + .toArray() + .map(v => v.toFixed(2)) + .join(" "), + ) + + chat.pushLine("{5eff64}Your position is copied to clipboard!") +}) From eb2b6a8aceeb25e5fb631246e7d5d33cf6d9274d Mon Sep 17 00:00:00 2001 From: xshady Date: Sun, 11 Sep 2022 19:38:40 +0300 Subject: [PATCH 35/49] client: fix tp to waypoint (yes, again) --- freeroam-extended/client/src/helpers.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index 0bebb59..df8b348 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -217,6 +217,8 @@ export async function tpToWaypoint(): Promise { if (!groundPos) { alt.logWarning("failed to get ground pos for waypoint, trying getGroundZ native...") + alt.FocusData.overrideFocus(point) + let foundZ: number | null = null try { await alt.Utils.waitFor(() => { @@ -224,7 +226,7 @@ export async function tpToWaypoint(): Promise { if (!found) return false foundZ = z - return found + return true }, 3000) } catch {} @@ -233,16 +235,18 @@ export async function tpToWaypoint(): Promise { alt.logError("failed to get ground z for waypoint") groundPos = startPos } + else + groundPos = new alt.Vector3(point.x, point.y, foundZ) } + alt.FocusData.clearFocus() + if (!groundPos) throw new Error("no groundPos") groundPos = groundPos.add(0, 0, 2.0) alt.emitServer("tp_to_waypoint", ...groundPos.toArray()) - - alt.FocusData.clearFocus() } function getWaypoint(sprite = 8): alt.Vector3 | null { From 3b1565de5b0069e855ae83fd66b8e2e76791dc1d Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Tue, 4 Oct 2022 09:44:24 +0300 Subject: [PATCH 36/49] server: Code cleanup, added unique players stats. --- .../server/freeroam-extended/EventHandler.cs | 16 +++++---- .../server/freeroam-extended/Main.cs | 35 +++++++++++-------- .../server/freeroam-extended/Misc.cs | 7 +++- .../server/freeroam-extended/StatsHandler.cs | 1 + 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/freeroam-extended/server/freeroam-extended/EventHandler.cs b/freeroam-extended/server/freeroam-extended/EventHandler.cs index 8afb239..ee99cc5 100644 --- a/freeroam-extended/server/freeroam-extended/EventHandler.cs +++ b/freeroam-extended/server/freeroam-extended/EventHandler.cs @@ -17,7 +17,7 @@ public EventHandler() { Alt.OnPlayerCustomEvent += (player, name, array) => { - var altPlayer = (IAltPlayer) player; + var altPlayer = (IAltPlayer)player; if (name != "chat:message" && !altPlayer.IsAdmin) { #if RELEASE @@ -53,8 +53,8 @@ public async Task OnPlayerConnect(IAltPlayer player, string reason) var randomSpawnPoint = Misc.AdminOverridedSpawnPos is not null ? Misc.AdminOverridedSpawnPos : Misc.SpawnPositions.ElementAt(_random.Next(0, Misc.SpawnPositions.Length)); - player.Spawn((Position) randomSpawnPoint + new Position(_random.Next(0, 10), _random.Next(0, 10), 0)); - player.Model = (uint) PedModel.FreemodeMale01; + player.Spawn((Position)randomSpawnPoint + new Position(_random.Next(0, 10), _random.Next(0, 10), 0)); + player.Model = (uint)PedModel.FreemodeMale01; player.SetDateTime(1, 1, 1, Misc.Hour, 1, 1); player.SetWeather(Misc.Weather); @@ -62,12 +62,16 @@ public async Task OnPlayerConnect(IAltPlayer player, string reason) if (player.IsAdmin) player.Emit("set_chat_state", true); - - - // create async context + lock (StatsHandler.StatsData) { StatsHandler.StatsData.PlayerConnections++; + if (!Misc.UniquePlayers.Contains(new Tuple(player.HardwareIdHash, player.SocialClubId))) + { + StatsHandler.StatsData.UniquePlayers++; + Misc.UniquePlayers.Add(new Tuple(player.HardwareIdHash, player.SocialClubId)); + File.WriteAllText(@"UniquePlayers.json", JsonSerializer.Serialize(Misc.UniquePlayers)); + } } } diff --git a/freeroam-extended/server/freeroam-extended/Main.cs b/freeroam-extended/server/freeroam-extended/Main.cs index 40adcc7..0abf53e 100644 --- a/freeroam-extended/server/freeroam-extended/Main.cs +++ b/freeroam-extended/server/freeroam-extended/Main.cs @@ -11,19 +11,18 @@ public class Main : AsyncResource { public Main() : base(true) { - } - + public override void OnStart() { Alt.Core.LogColored("~g~ Freeroam-Extended Started!"); // colshape for weapon disabling everywhere but the airport Alt.CreateColShapeSphere(Misc.DMPos, Misc.DMRadius); - - if(!File.Exists(@"BannedPlayers.json")) + + if (!File.Exists(@"BannedPlayers.json")) { - var hashSet = new HashSet>(); + var hashSet = new HashSet>(); var json = JsonSerializer.Serialize(hashSet); File.WriteAllText(@"BannedPlayers.json", json); } @@ -31,14 +30,14 @@ public override void OnStart() { string json = File.ReadAllText(@"BannedPlayers.json") ?? ""; - var bannedPlayers = JsonSerializer.Deserialize>>(json); + var bannedPlayers = JsonSerializer.Deserialize>>(json); - Misc.BannedPlayers = bannedPlayers ?? new HashSet>(); + Misc.BannedPlayers = bannedPlayers ?? new HashSet>(); } - if(!File.Exists(@"Operators.json")) + if (!File.Exists(@"Operators.json")) { - var hashSet = new HashSet>(); + var hashSet = new HashSet>(); var json = JsonSerializer.Serialize(hashSet); File.WriteAllText(@"Operators.json", json); } @@ -46,11 +45,11 @@ public override void OnStart() { string json = File.ReadAllText(@"Operators.json") ?? ""; - var operators = JsonSerializer.Deserialize>>(json); + var operators = JsonSerializer.Deserialize>>(json); - Misc.Operators = operators ?? new HashSet>(); + Misc.Operators = operators ?? new HashSet>(); } - + if (!File.Exists("Stats.json")) { var json = JsonSerializer.Serialize(StatsHandler.StatsData); @@ -62,6 +61,14 @@ public override void OnStart() if (stats != null) StatsHandler.StatsData = stats; } + if (!File.Exists("UniquePlayers.json")) + File.WriteAllText("UniquePlayers.json", JsonSerializer.Serialize(Misc.UniquePlayers)); + else + { + var uniquePlayers = JsonSerializer.Deserialize>>(File.ReadAllText("UniquePlayers.json")); + if (uniquePlayers != null) Misc.UniquePlayers = uniquePlayers; + } + var fileWriteTimer = new Timer(); fileWriteTimer.Interval = 60000; fileWriteTimer.Enabled = true; @@ -80,12 +87,12 @@ public override void OnStop() { Alt.Core.LogColored("~g~ Freeroam-Extended Stopped!"); } - + public override IEntityFactory GetPlayerFactory() { return new AltPlayerFactory(); } - + public override IEntityFactory GetVehicleFactory() { return new AltVehicleFactory(); diff --git a/freeroam-extended/server/freeroam-extended/Misc.cs b/freeroam-extended/server/freeroam-extended/Misc.cs index bb7a8c0..b7499df 100644 --- a/freeroam-extended/server/freeroam-extended/Misc.cs +++ b/freeroam-extended/server/freeroam-extended/Misc.cs @@ -304,7 +304,12 @@ public static class Misc { }; - + + public static HashSet> UniquePlayers = new() + { + + }; + public static bool ChatState = false; public static int Hour = 11; public static uint Weather = 0; diff --git a/freeroam-extended/server/freeroam-extended/StatsHandler.cs b/freeroam-extended/server/freeroam-extended/StatsHandler.cs index b232149..16bdc56 100644 --- a/freeroam-extended/server/freeroam-extended/StatsHandler.cs +++ b/freeroam-extended/server/freeroam-extended/StatsHandler.cs @@ -21,5 +21,6 @@ public class Stats public int VehiclesDestroyed { get; set; } public int PlayerDeaths { get; set; } public int PlayerConnections { get; set; } + public int UniquePlayers { get; set; } } } \ No newline at end of file From bca3adf34e3a873920eff010d30e78eb38a61795 Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Wed, 5 Oct 2022 23:55:16 +0300 Subject: [PATCH 37/49] Check for interior on vehicle spawn --- freeroam-extended/server/freeroam-extended/Commands.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/freeroam-extended/server/freeroam-extended/Commands.cs b/freeroam-extended/server/freeroam-extended/Commands.cs index f0cbdc6..eacfcc9 100644 --- a/freeroam-extended/server/freeroam-extended/Commands.cs +++ b/freeroam-extended/server/freeroam-extended/Commands.cs @@ -26,6 +26,12 @@ public void SpawnVeh(IAltPlayer player, string vehicleName) player.SendChatMessage("{FF0000} Invalid vehicle model!"); return; } + + if (player.InteriorLocation != 0) + { + player.SendChatMessage("{FF0000} You can't spawn vehicles in interiors!"); + return; + } if (Alt.GetAllVehicles().Any(veh => veh.Position.Distance(player.Position) < 3)) { From 66510a5a33ef943f08a4a6a74955f1f8684cc3e0 Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Wed, 5 Oct 2022 23:59:15 +0300 Subject: [PATCH 38/49] Added esp command and tp_to_coords event --- .../server/freeroam-extended/Commands.cs | 12 ++++++++++++ .../server/freeroam-extended/EventHandler.cs | 15 ++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/freeroam-extended/server/freeroam-extended/Commands.cs b/freeroam-extended/server/freeroam-extended/Commands.cs index eacfcc9..cd28533 100644 --- a/freeroam-extended/server/freeroam-extended/Commands.cs +++ b/freeroam-extended/server/freeroam-extended/Commands.cs @@ -549,5 +549,17 @@ public void GodmodeAllPlayers(IAltPlayer player, bool mode) target.SendChatMessage($"{{00FF00}}Godmode for all players is {(mode ? "activated" : "deactivated")}!"); } } + + [Command("esp")] + public void Esp(IAltPlayer player, bool mode) + { + if (!player.IsAdmin) + { + player.SendChatMessage("{FF0000} No permission!"); + return; + } + + player.Emit("esp", mode); + } } } \ No newline at end of file diff --git a/freeroam-extended/server/freeroam-extended/EventHandler.cs b/freeroam-extended/server/freeroam-extended/EventHandler.cs index ee99cc5..d64eee8 100644 --- a/freeroam-extended/server/freeroam-extended/EventHandler.cs +++ b/freeroam-extended/server/freeroam-extended/EventHandler.cs @@ -249,7 +249,7 @@ public void OnChatMessage(IAltPlayer player, params string[] args) } [ClientEvent("tp_to_waypoint")] - public void TeleportWaypoint(IAltPlayer player, int x, int y, int z) + public void TeleportToWaypoint(IAltPlayer player, int x, int y, int z) { if (!player.IsAdmin) { @@ -262,5 +262,18 @@ public void TeleportWaypoint(IAltPlayer player, int x, int y, int z) player.SendChatMessage($"{{00FF00}} You were teleported to waypoint on {x}, {y}, {z}!"); } + + [ClientEvent("tp_to_coords")] + public void TeleportToCoords(IAltPlayer player, int x, int y, int z) + { + if (!player.IsAdmin) + { + player.SendChatMessage("{FF0000} No permission!"); + return; + } + + if (player.IsInVehicle) player.Vehicle.Position = new Vector3(x, y, z); + else player.Position = new Vector3(x, y, z); + } } } \ No newline at end of file From 18bde81f4cc87d0d587f8651b8c5e51c34cc884c Mon Sep 17 00:00:00 2001 From: xshady Date: Sat, 8 Oct 2022 00:45:22 +0300 Subject: [PATCH 39/49] client: allow teleport in noclip --- freeroam-extended/client/src/noclip.ts | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/freeroam-extended/client/src/noclip.ts b/freeroam-extended/client/src/noclip.ts index d20ce21..d376d2c 100644 --- a/freeroam-extended/client/src/noclip.ts +++ b/freeroam-extended/client/src/noclip.ts @@ -5,6 +5,8 @@ import { DirectionVector } from "./helpers" let tick: number | null = null let noclipCam: number | null = null +let oldPlayerPos: alt.Vector3 | null = null + export function toggleNoclip(state: boolean): void { switch (state) { case false: { @@ -15,9 +17,11 @@ export function toggleNoclip(state: boolean): void { noclipCam = null native.renderScriptCams(false, true, 500, true, false, 0) - const position = native.getEntityCoords(alt.Player.local.scriptID, true) - const [, ground] = native.getGroundZFor3dCoord(position.x, position.y, position.z, 0.0, false, false) - native.setEntityCoordsNoOffset(alt.Player.local.scriptID, position.x, position.y, ground, false, false, false) + const pos = alt.FocusData.focusOverridePos + + const [, ground] = native.getGroundZFor3dCoord(...pos.toArray(), 0.0, false, false) + + alt.emitServer("tp_to_coords", pos.x, pos.y, ground + 1.0) break } @@ -51,14 +55,25 @@ function handleTick(noclipCam: number) { native.disableControlAction(0, 31, true) native.disableControlAction(0, 49, true) - const pos = native.getCamCoord(noclipCam) + const currentPlayerPos = alt.Player.local.pos + oldPlayerPos ??= currentPlayerPos + let pos: alt.Vector3 + + if (oldPlayerPos.distanceToSquared(currentPlayerPos) > 10.0) { + oldPlayerPos = currentPlayerPos + pos = currentPlayerPos + native.setCamCoord(noclipCam, ...pos.toArray()) + } + else + pos = native.getCamCoord(noclipCam) + const rot = native.getCamRot(noclipCam, 2) const dir = new DirectionVector(pos, rot) const fwd = dir.forward(3.5) const sens = getSensitivity() - native.setEntityCoords(alt.Player.local, fwd.x, fwd.y, fwd.z - 2.0, true, false, false, true) + alt.FocusData.overrideFocus(fwd) if (alt.gameControlsEnabled() === false) return From b239196d78aca1c750b11904dbab92f707aff026 Mon Sep 17 00:00:00 2001 From: xshady Date: Sat, 8 Oct 2022 00:50:32 +0300 Subject: [PATCH 40/49] client: refactor game focus change --- freeroam-extended/client/src/chat.ts | 9 ++++++--- freeroam-extended/client/src/game-focus-change.ts | 15 --------------- freeroam-extended/client/src/index.ts | 1 - 3 files changed, 6 insertions(+), 19 deletions(-) delete mode 100644 freeroam-extended/client/src/game-focus-change.ts diff --git a/freeroam-extended/client/src/chat.ts b/freeroam-extended/client/src/chat.ts index 54953c2..b01a353 100644 --- a/freeroam-extended/client/src/chat.ts +++ b/freeroam-extended/client/src/chat.ts @@ -36,11 +36,14 @@ export function pushLine(text: string): void { pushMessage(null, text) } -export function onGameFocusChange(state: boolean): void { +alt.on("windowFocusChange", (state) => { if (!state) return if (!chatData.opened) return - view.emit("focusChatInput") -} + + alt.nextTick(() => { + view.emit("focusChatInput") + }) +}) view.on("chatloaded", () => { for (const msg of buffer) diff --git a/freeroam-extended/client/src/game-focus-change.ts b/freeroam-extended/client/src/game-focus-change.ts deleted file mode 100644 index be7775c..0000000 --- a/freeroam-extended/client/src/game-focus-change.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as alt from "alt-client" -import * as chat from "./chat" - -let state = alt.isGameFocused() - -const gameFocusChange = () => { - chat.onGameFocusChange(state) -} - -setInterval(() => { - const current = alt.isGameFocused() - if (state === current) return - state = current - gameFocusChange() -}, 500) diff --git a/freeroam-extended/client/src/index.ts b/freeroam-extended/client/src/index.ts index 4020d3e..3bdd5a9 100644 --- a/freeroam-extended/client/src/index.ts +++ b/freeroam-extended/client/src/index.ts @@ -9,7 +9,6 @@ import { view } from "./view" import { playerNametags } from "./nametags" import { ConfigFlag, StatName, WatermarkPosition } from "altv-enums" import { ATTACK_CONTROLS } from "./const" -import "./game-focus-change" alt.setConfigFlag(ConfigFlag.DisableAutoWeaponSwap, true) alt.setConfigFlag(ConfigFlag.DisableIdleCamera, true) From 4ebce2ac3a07014d196c022c9087998ed238a58b Mon Sep 17 00:00:00 2001 From: xshady Date: Sat, 8 Oct 2022 01:12:35 +0300 Subject: [PATCH 41/49] client: add streamed entities count ui --- freeroam-extended/client/html/app.js | 14 ++++++++++---- freeroam-extended/client/html/index.html | 12 +++++++++--- freeroam-extended/client/html/style.css | 6 +++++- freeroam-extended/client/src/events.ts | 18 ++++++++++++++++++ freeroam-extended/client/src/index.ts | 7 +++++++ freeroam-extended/client/src/view.ts | 3 ++- 6 files changed, 51 insertions(+), 9 deletions(-) diff --git a/freeroam-extended/client/html/app.js b/freeroam-extended/client/html/app.js index ba028c4..133784b 100644 --- a/freeroam-extended/client/html/app.js +++ b/freeroam-extended/client/html/app.js @@ -166,15 +166,15 @@ function addString(text) { highlightChat(); } -function updatePlayersOnline (number) { +function updatePlayersOnline(number) { document.querySelector(".players-online-number").textContent = `${number}`; } -function setPlayerId (id) { +function setPlayerId(id) { document.querySelector(".player-id-number").textContent = `${id}`; } -function setWeaponsDisabled (disabled) { +function setWeaponsDisabled(disabled) { const el = document.querySelector(".weapons-enabled").children[0]; if (disabled) { @@ -189,10 +189,15 @@ function setWeaponsDisabled (disabled) { } } -function focusChatInput () { +function focusChatInput() { msgInputLine.focus(); } +function setStreamedEntities(players, vehicles) { + document.querySelector(".streamed-in-players").textContent = players + document.querySelector(".streamed-in-vehicles").textContent = vehicles +} + alt.on("addString", (text) => addString(colorify(text))); alt.on("addMessage", (name, text) => addString("" + name + ": " + colorify(text))); alt.on("openChat", openChat); @@ -201,3 +206,4 @@ alt.on("updatePlayersOnline", updatePlayersOnline); alt.on("setPlayerId", setPlayerId); alt.on("setWeaponsDisabled", setWeaponsDisabled); alt.on("focusChatInput", focusChatInput); +alt.on("setStreamedEntities", setStreamedEntities) diff --git a/freeroam-extended/client/html/index.html b/freeroam-extended/client/html/index.html index 5ecc808..a7307fa 100644 --- a/freeroam-extended/client/html/index.html +++ b/freeroam-extended/client/html/index.html @@ -13,13 +13,19 @@
-
xxxx
players online + Players online
xxxx
-
xxxx
your ID + Your ID
xxxx
-
ON
weapons + Weapons
ON
+
+
+ Streamed players
0
+
+
+ Streamed vehicles
0
diff --git a/freeroam-extended/client/html/style.css b/freeroam-extended/client/html/style.css index 5359f3d..da27e51 100644 --- a/freeroam-extended/client/html/style.css +++ b/freeroam-extended/client/html/style.css @@ -34,7 +34,7 @@ body { .help-keys { position: absolute; - top: 7em; + top: 10em; right: 1.5em; text-align: right; } @@ -281,3 +281,7 @@ body { background: var(--bg-color) !important; box-shadow: 0 0 0.5em var(--bg-color) !important; } + +.streamed-in > * { + +} diff --git a/freeroam-extended/client/src/events.ts b/freeroam-extended/client/src/events.ts index 2f3b90d..9158701 100644 --- a/freeroam-extended/client/src/events.ts +++ b/freeroam-extended/client/src/events.ts @@ -99,3 +99,21 @@ alt.onServer("get_pos", () => { chat.pushLine("{5eff64}Your position is copied to clipboard!") }) + +// TODO: use alt.Utils.EveryTick +let espTick = 0 +alt.onServer("esp", (state: boolean) => { + chat.pushLine(`esp ${state}`) + + if (espTick) alt.clearEveryTick(espTick) + espTick = 0 + + // if (!state) return + + // TODO: add abstract 3d nametags for players and vehicles + // espTick = alt.everyTick(() => { + // for (const veh of alt.Vehicle.streamedIn) { + + // } + // }) +}) diff --git a/freeroam-extended/client/src/index.ts b/freeroam-extended/client/src/index.ts index 3bdd5a9..5b58515 100644 --- a/freeroam-extended/client/src/index.ts +++ b/freeroam-extended/client/src/index.ts @@ -41,3 +41,10 @@ alt.everyTick(() => { else native.setCanPedEquipAllWeapons(LOCAL_PLAYER, true) }) + +alt.setInterval(() => { + const players = alt.Player.streamedIn.length + 1 // local player always in the stream + const vehicles = alt.Vehicle.streamedIn.length + + view.emit("setStreamedEntities", players, vehicles) +}, 500) diff --git a/freeroam-extended/client/src/view.ts b/freeroam-extended/client/src/view.ts index 4245bfe..ffa4618 100644 --- a/freeroam-extended/client/src/view.ts +++ b/freeroam-extended/client/src/view.ts @@ -8,7 +8,8 @@ type EventNames = "addMessage" | "setPlayerId" | "setWeaponsDisabled" | - "focusChatInput" + "focusChatInput" | + "setStreamedEntities" class View extends alt.WebView { public override emit(eventName: EventNames, ...args: unknown[]) { From 4b04b588d16080a0fad72d74cd0e8f575e595002 Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Sun, 5 Feb 2023 20:41:56 +0300 Subject: [PATCH 42/49] server: NuGet update --- .../server/freeroam-extended/Freeroam-Extended.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj b/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj index 5810b92..a5756e2 100644 --- a/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj +++ b/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj @@ -9,13 +9,13 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + From ff224b876bd39c937e0a965792f4b1fd8cb6f729 Mon Sep 17 00:00:00 2001 From: xshady Date: Sun, 5 Feb 2023 21:20:46 +0300 Subject: [PATCH 43/49] client & server: convert resource configs to TOML --- freeroam-extended/client/resource.cfg | 11 ----------- freeroam-extended/client/resource.toml | 8 ++++++++ freeroam-extended/server/resource.cfg | 2 -- freeroam-extended/server/resource.toml | 2 ++ 4 files changed, 10 insertions(+), 13 deletions(-) delete mode 100644 freeroam-extended/client/resource.cfg create mode 100644 freeroam-extended/client/resource.toml delete mode 100644 freeroam-extended/server/resource.cfg create mode 100644 freeroam-extended/server/resource.toml diff --git a/freeroam-extended/client/resource.cfg b/freeroam-extended/client/resource.cfg deleted file mode 100644 index 3b6575d..0000000 --- a/freeroam-extended/client/resource.cfg +++ /dev/null @@ -1,11 +0,0 @@ -type: js -main: dist/server.js -client-main: dist/client.js -client-files: [ - dist/client.js - html/* -] -# TODO: turn on after fixing: https://github.com/altmp/altv-issues/issues/1628 -# optional-permissions: [ -# Clipboard Access -# ] diff --git a/freeroam-extended/client/resource.toml b/freeroam-extended/client/resource.toml new file mode 100644 index 0000000..458a12a --- /dev/null +++ b/freeroam-extended/client/resource.toml @@ -0,0 +1,8 @@ +type = 'js' +main = 'dist/server.js' +client-main = 'dist/client.js' +client-files = [ 'dist/client.js', 'html/*' ] +# TODO: turn on after fixing: https://github.com/altmp/altv-issues/issues/1628 +# optional-permissions = [ +# 'Clipboard Access', +# ] diff --git a/freeroam-extended/server/resource.cfg b/freeroam-extended/server/resource.cfg deleted file mode 100644 index a9f2b53..0000000 --- a/freeroam-extended/server/resource.cfg +++ /dev/null @@ -1,2 +0,0 @@ -type: 'csharp', -main: 'dist/Freeroam-Extended.dll' \ No newline at end of file diff --git a/freeroam-extended/server/resource.toml b/freeroam-extended/server/resource.toml new file mode 100644 index 0000000..16e9ded --- /dev/null +++ b/freeroam-extended/server/resource.toml @@ -0,0 +1,2 @@ +type = 'csharp' +main = 'dist/Freeroam-Extended.dll' From 0816f1b992417d98015ae5f083ff5f4ba44fe803 Mon Sep 17 00:00:00 2001 From: xshady Date: Sun, 5 Feb 2023 23:32:19 +0300 Subject: [PATCH 44/49] client: update deps --- freeroam-extended/client/package.json | 24 +- freeroam-extended/client/src/events.ts | 3 +- freeroam-extended/client/src/helpers.ts | 6 +- freeroam-extended/client/src/index.ts | 4 +- freeroam-extended/client/src/keycodes.ts | 109 --- freeroam-extended/client/yarn.lock | 945 +++++++++++++---------- 6 files changed, 535 insertions(+), 556 deletions(-) delete mode 100644 freeroam-extended/client/src/keycodes.ts diff --git a/freeroam-extended/client/package.json b/freeroam-extended/client/package.json index 4b9f110..2971be5 100644 --- a/freeroam-extended/client/package.json +++ b/freeroam-extended/client/package.json @@ -4,21 +4,21 @@ "main": "index.js", "license": "MIT", "devDependencies": { - "@altv/types-client": "^2.2.9", - "@altv/types-natives": "^1.4.4", - "@altv/types-server": "^2.4.2", - "@altv/types-shared": "^1.2.6", - "@typescript-eslint/eslint-plugin": "^4.33.0", - "@typescript-eslint/parser": "^4.33.0", - "altv-esbuild": "^0.1.3", + "@altv/types-client": "^2.4.4", + "@altv/types-natives": "^1.4.8", + "@altv/types-server": "^2.5.7", + "@altv/types-shared": "^1.3.6", + "@typescript-eslint/eslint-plugin": "^5.50.0", + "@typescript-eslint/parser": "^5.50.0", + "altv-esbuild": "^0.4.3", "concurrently": "^7.3.0", "esbuild": "^0.14.53", - "eslint": "^7.30.0", - "eslint-config-standard": "^16.0.3", - "eslint-plugin-import": "^2.24.2", + "eslint": "^8.33.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^5.1.0", - "typescript": "^4.7.4" + "eslint-plugin-promise": "^6.1.1", + "typescript": "^4.9.5" }, "scripts": { "build:client": "node --es-module-specifier-resolution=node build.js", diff --git a/freeroam-extended/client/src/events.ts b/freeroam-extended/client/src/events.ts index 9158701..d047da7 100644 --- a/freeroam-extended/client/src/events.ts +++ b/freeroam-extended/client/src/events.ts @@ -3,10 +3,9 @@ import * as alt from "alt-client" import { drawDMZone, setWeaponsUsage, mhint, tpToWaypoint, LOCAL_PLAYER } from "./helpers" import * as chat from "./chat" import { toggleNoclip } from "./noclip" -import { KeyCode } from "./keycodes" import { playerData } from "./playerdata" import { view } from "./view" -import { Permission, PermissionState } from "altv-enums" +import { KeyCode, Permission, PermissionState } from "altv-enums" alt.on("connectionComplete", () => { setTimeout(() => { diff --git a/freeroam-extended/client/src/helpers.ts b/freeroam-extended/client/src/helpers.ts index df8b348..1f2e559 100644 --- a/freeroam-extended/client/src/helpers.ts +++ b/freeroam-extended/client/src/helpers.ts @@ -18,7 +18,7 @@ export function displayAdvancedNotification( native.beginTextCommandThefeedPost("STRING") native.addTextComponentSubstringPlayerName(message) if (backgroundColor != null) - native.thefeedSetNextPostBackgroundColor(backgroundColor) + native.thefeedSetBackgroundColorForNextPost(backgroundColor) if (notifImage != null) native.endTextCommandThefeedPostMessagetextTu(notifImage, notifImage, false, iconType, title, subtitle, durationMult) return native.endTextCommandThefeedPostTicker(false, true) @@ -30,14 +30,14 @@ export function setWeaponsUsage(state: boolean): void { if (state) { playerData.areWeaponsDisabled = false - native.setCanPedEquipAllWeapons(LOCAL_PLAYER, true) + native.setCanPedSelectAllWeapons(LOCAL_PLAYER, true) displayAdvancedNotification("Have fun.", "Weapons Usage", "Activated", "CHAR_AMMUNATION", 1, 203, 1.5) } else { native.giveWeaponToPed(LOCAL_PLAYER, EMPTY_WEAPON_HASH, 0, false, true) playerData.areWeaponsDisabled = true - native.setCanPedEquipAllWeapons(LOCAL_PLAYER, false) + native.setCanPedSelectAllWeapons(LOCAL_PLAYER, false) displayAdvancedNotification( "You can only use weapons in the LS Airport zone.", "Weapons Usage", diff --git a/freeroam-extended/client/src/index.ts b/freeroam-extended/client/src/index.ts index 5b58515..fb1e069 100644 --- a/freeroam-extended/client/src/index.ts +++ b/freeroam-extended/client/src/index.ts @@ -32,14 +32,14 @@ playerData.onAreWeaponsDisabledChange = (value) => { alt.everyTick(() => { if (playerData.areWeaponsDisabled) { - native.setCanPedEquipAllWeapons(LOCAL_PLAYER, false) + native.setCanPedSelectAllWeapons(LOCAL_PLAYER, false) native.disablePlayerFiring(LOCAL_PLAYER, true) for (const control of ATTACK_CONTROLS) native.disableControlAction(0, control, true) } else - native.setCanPedEquipAllWeapons(LOCAL_PLAYER, true) + native.setCanPedSelectAllWeapons(LOCAL_PLAYER, true) }) alt.setInterval(() => { diff --git a/freeroam-extended/client/src/keycodes.ts b/freeroam-extended/client/src/keycodes.ts deleted file mode 100644 index ee18ff6..0000000 --- a/freeroam-extended/client/src/keycodes.ts +++ /dev/null @@ -1,109 +0,0 @@ -export enum KeyCode { - "Key0" = 48, - "Key1" = 49, - "Key2" = 50, - "Key3" = 51, - "Key4" = 52, - "Key5" = 53, - "Key6" = 54, - "Key7" = 55, - "Key8" = 56, - "Key9" = 57, - "Backspace" = 8, - "Tab" = 9, - "Clear" = 12, - "Enter" = 13, - "Return" = 13, - "Escape" = 27, - "Space" = 32, - "Left" = 37, - "Up" = 38, - "Right" = 39, - "Down" = 40, - "Delete" = 46, - "Insert" = 45, - "Home" = 36, - "End" = 35, - "Pageup" = 33, - "Pagedown" = 34, - "Papslock" = 20, - "Shift" = 16, - "Alt" = 18, - "Ctrl" = 17, - "-" = 189, - "=" = 187, - "," = 188, - ";" = 186, - "." = 190, - "/" = 191, - "`" = 192, - "~" = 192, - "'" = 222, - "[" = 219, - "]" = 221, - "\\" = 220, - "KpMultiply" = 106, - "KpAdd" = 107, - "KpSubtract" = 109, - "KpDecimal" = 110, - "KpDivide" = 111, - "A" = 65, - "B" = 66, - "C" = 67, - "D" = 68, - "E" = 69, - "F" = 70, - "G" = 71, - "H" = 72, - "I" = 73, - "J" = 74, - "K" = 75, - "L" = 76, - "M" = 77, - "N" = 78, - "O" = 79, - "P" = 80, - "Q" = 81, - "R" = 82, - "S" = 83, - "T" = 84, - "U" = 85, - "V" = 86, - "W" = 87, - "X" = 88, - "Y" = 89, - "Z" = 90, - "F1" = 112, - "F2" = 113, - "F3" = 114, - "F4" = 115, - "F5" = 116, - "F6" = 117, - "F7" = 118, - "F8" = 119, - "F9" = 120, - "F10" = 121, - "F11" = 122, - "F12" = 123, - "F13" = 124, - "F14" = 125, - "F15" = 126, - "F16" = 127, - "F17" = 128, - "F18" = 129, - "F19" = 130, - "F20" = 131, - "Numpad0" = 96, - "Numpad1" = 97, - "Numpad2" = 98, - "Numpad3" = 99, - "Numpad4" = 100, - "Numpad5" = 101, - "Numpad6" = 102, - "Numpad7" = 103, - "Numpad8" = 104, - "Numpad9" = 105, - "MouseLeft" = 1, - "MouseRight" = 2, - "MouseMiddle" = 4, -} diff --git a/freeroam-extended/client/yarn.lock b/freeroam-extended/client/yarn.lock index 76c2cd1..56c11f8 100644 --- a/freeroam-extended/client/yarn.lock +++ b/freeroam-extended/client/yarn.lock @@ -2,77 +2,61 @@ # yarn lockfile v1 -"@altv/types-client@^2.2.9": - version "2.2.9" - resolved "https://registry.yarnpkg.com/@altv/types-client/-/types-client-2.2.9.tgz#4b8d9b8bf03cd77ffb4c30946a27557cbc966a52" - integrity sha512-JghzVapoIqwT/ozAt1snx5E54RRHt4vGHrpVBi746O4n86pRF0SiAPUzqB447Pa5KbIa+9cnUy/dpSRMtKvivw== - -"@altv/types-natives@^1.4.4": - version "1.4.4" - resolved "https://registry.yarnpkg.com/@altv/types-natives/-/types-natives-1.4.4.tgz#d71aaf45eb5b1060dd6993ef010bdc1734294a73" - integrity sha512-qcIPhpRAhGnErtf3p1iVGL6CIUJWc1IdYJl6K9T5c7W8Nd9RM2cv4JIyQg3TTXLiu+1gAZlkD8KyYKIfs5BqnQ== - -"@altv/types-server@^2.4.2": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@altv/types-server/-/types-server-2.4.2.tgz#5c6c852b728e9e7c7007d61d62661537c0e5c207" - integrity sha512-TwJRKr23Thyi7LRPTKumI/9/FcY6CitTRMfqypRGvxznuvaIRPrT+jHK+mvQg3ErmR43cOKdh7MzqmaXWj8BKQ== - -"@altv/types-shared@^1.2.6": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@altv/types-shared/-/types-shared-1.2.6.tgz#c12936691ae6e76cdc794ca0fe3fc62e8f4853ab" - integrity sha512-DC5WofhTkvC/0uYxTIihxQG7k13SdepHrSm9Xzd5HTTpVJxll4PRXRIZH3L3wRBnWNXTuKQhJ4Cy/qKZN3or9g== - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== - -"@babel/highlight@^7.10.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" +"@altv/types-client@^2.4.4": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@altv/types-client/-/types-client-2.4.4.tgz#868161364f5df1c60ec467bfef66b9d224dfcc36" + integrity sha512-Dt5DiFigJnSL8MHD4YFX3wIiAC/qkg+gqakHNhJxC9lO7tW41P9elMYGNn240rw10IJDKrjNSe2soUrvHHdG/w== + +"@altv/types-natives@^1.4.8": + version "1.4.8" + resolved "https://registry.yarnpkg.com/@altv/types-natives/-/types-natives-1.4.8.tgz#2a7a234a5651e5c2bf1eef85a05ddf31861c2029" + integrity sha512-WkyKCd1QLW94cNkq/KMbl+pZyXGxFDkRlnDhpwWmPlZwwQrGZkgHvj35vVa0QMfN8L53lCiaLPNJolX030oeuA== + +"@altv/types-server@^2.5.7": + version "2.5.7" + resolved "https://registry.yarnpkg.com/@altv/types-server/-/types-server-2.5.7.tgz#c87e5bed5e1e8b87574338afb463227821732048" + integrity sha512-kntuD2ylwX2wL2TJuArpkWsHrPlYYT4eNKfXglJppDYSIbUsxfvP1Kt3XdBfclaEMU63Jz64mMIJ4FC5M1gKKg== + +"@altv/types-shared@^1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@altv/types-shared/-/types-shared-1.3.6.tgz#f76ef5cdd15c6f9f50240ce224dd9e057a8ade96" + integrity sha512-1jEfqaqRKxiEoIHEo2th/d2LAHG7HqsiYPFTVv8v4XEhlt+Ny6hE1lX1OmGocCJH0oF7Pin+ZQekou28s5C6ug== "@esbuild/linux-loong64@0.14.53": version "0.14.53" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.53.tgz#251b4cd6760fadb4d68a05815e6dc5e432d69cd6" integrity sha512-W2dAL6Bnyn4xa/QRSU3ilIK4EzD5wgYXKXJiS1HDF5vU3675qc2bvFyLwbUcdmssDveyndy7FbitrCoiV/eMLg== -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.19.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.0": +"@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== @@ -90,7 +74,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -98,7 +82,7 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@types/json-schema@^7.0.7": +"@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -108,85 +92,104 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@typescript-eslint/eslint-plugin@^4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== - 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" +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@typescript-eslint/eslint-plugin@^5.50.0": + version "5.50.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz#fb48c31cadc853ffc1dc35373f56b5e2a8908fe9" + integrity sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ== + dependencies: + "@typescript-eslint/scope-manager" "5.50.0" + "@typescript-eslint/type-utils" "5.50.0" + "@typescript-eslint/utils" "5.50.0" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== +"@typescript-eslint/parser@^5.50.0": + version "5.50.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.50.0.tgz#a33f44b2cc83d1b7176ec854fbecd55605b0b032" + integrity sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ== 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" + "@typescript-eslint/scope-manager" "5.50.0" + "@typescript-eslint/types" "5.50.0" + "@typescript-eslint/typescript-estree" "5.50.0" + debug "^4.3.4" -"@typescript-eslint/parser@^4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" - integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== - 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" - -"@typescript-eslint/scope-manager@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - -"@typescript-eslint/types@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== - -"@typescript-eslint/typescript-estree@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== - 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" +"@typescript-eslint/scope-manager@5.50.0": + version "5.50.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz#90b8a3b337ad2c52bbfe4eac38f9164614e40584" + integrity sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg== + dependencies: + "@typescript-eslint/types" "5.50.0" + "@typescript-eslint/visitor-keys" "5.50.0" + +"@typescript-eslint/type-utils@5.50.0": + version "5.50.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz#509d5cc9728d520008f7157b116a42c5460e7341" + integrity sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ== + dependencies: + "@typescript-eslint/typescript-estree" "5.50.0" + "@typescript-eslint/utils" "5.50.0" + debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== +"@typescript-eslint/types@5.50.0": + version "5.50.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.50.0.tgz#c461d3671a6bec6c2f41f38ed60bd87aa8a30093" + integrity sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w== + +"@typescript-eslint/typescript-estree@5.50.0": + version "5.50.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz#0b9b82975bdfa40db9a81fdabc7f93396867ea97" + integrity sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow== dependencies: - "@typescript-eslint/types" "4.33.0" - eslint-visitor-keys "^2.0.0" + "@typescript-eslint/types" "5.50.0" + "@typescript-eslint/visitor-keys" "5.50.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.50.0": + version "5.50.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.50.0.tgz#807105f5ffb860644d30d201eefad7017b020816" + integrity sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.50.0" + "@typescript-eslint/types" "5.50.0" + "@typescript-eslint/typescript-estree" "5.50.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.50.0": + version "5.50.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz#b752ffc143841f3d7bc57d6dd01ac5c40f8c4903" + integrity sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg== + dependencies: + "@typescript-eslint/types" "5.50.0" + eslint-visitor-keys "^3.3.0" -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" @@ -198,38 +201,16 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -altv-esbuild@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/altv-esbuild/-/altv-esbuild-0.1.3.tgz#3d05d4cad7b4ec005ac4f4053ba9cc228f08dd5d" - integrity sha512-tJajq+1isEdYkusRaQPES/jZucAoQ8QHbufE4O9WqCkH90NKhfMjHfS5K/eKyQL2J9EulBnHULVvi7uLIm203A== - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== +altv-esbuild@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/altv-esbuild/-/altv-esbuild-0.4.3.tgz#20cf7b3e69db9a76124a04ff8897e2bbcb2cc5df" + integrity sha512-Hm+gxHReGy32xv4ZYb8KC1kDZRXIn9mmXZv9/3pkohbtidL5Km7zJe2cYUAaQv97KN5L0RoQmoQB6785AEYAYg== ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -237,22 +218,20 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-includes@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" - integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" - get-intrinsic "^1.1.1" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" is-string "^1.0.7" array-union@^2.1.0: @@ -260,20 +239,30 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flat@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== balanced-match@^1.0.0: version "1.0.2" @@ -308,15 +297,6 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -334,13 +314,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -348,11 +321,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -392,13 +360,6 @@ date-fns@^2.16.1: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.1.tgz#9667c2615525e552b5135a3116b95b1961456e60" integrity sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw== -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -406,7 +367,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -452,14 +413,7 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: +es-abstract@^1.19.0, es-abstract@^1.19.5: version "1.20.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== @@ -488,6 +442,54 @@ es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19 string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" +es-abstract@^1.20.4: + version "1.21.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" + integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.4" + is-array-buffer "^3.0.1" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + es-shim-unscopables@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" @@ -636,36 +638,31 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-standard@^16.0.3: - version "16.0.3" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516" - integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg== +eslint-config-standard@^17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" + integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" - resolve "^1.20.0" + is-core-module "^2.11.0" + resolve "^1.22.1" -eslint-module-utils@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== +eslint-module-utils@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" - find-up "^2.1.0" eslint-plugin-es@^3.0.0: version "3.0.1" @@ -675,23 +672,25 @@ eslint-plugin-es@^3.0.0: eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-import@^2.24.2: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== +eslint-plugin-import@^2.27.5: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" has "^1.0.3" - is-core-module "^2.8.1" + is-core-module "^2.11.0" is-glob "^4.0.3" minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" tsconfig-paths "^3.14.1" eslint-plugin-node@^11.1.0: @@ -706,10 +705,10 @@ eslint-plugin-node@^11.1.0: resolve "^1.10.1" semver "^6.1.0" -eslint-plugin-promise@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz#a596acc32981627eb36d9d75f9666ac1a4564971" - integrity sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw== +eslint-plugin-promise@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== eslint-scope@^5.1.1: version "5.1.1" @@ -719,7 +718,15 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.0.0, eslint-utils@^2.1.0: +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== @@ -733,7 +740,7 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== @@ -743,65 +750,64 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@^7.30.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.33.0: + version "8.33.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.33.0.tgz#02f110f32998cb598c6461f24f4d306e41ca33d7" + integrity sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA== + dependencies: + "@eslint/eslintrc" "^1.4.1" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" esquery@^1.4.0: version "1.4.0" @@ -879,12 +885,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - locate-path "^2.0.0" + locate-path "^6.0.0" + path-exists "^4.0.0" flat-cache@^3.0.4: version "3.0.4" @@ -899,6 +906,13 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -919,11 +933,6 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - functions-have-names@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -943,6 +952,15 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -958,6 +976,13 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -970,14 +995,21 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^13.6.0, globals@^13.9.0: - version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" -globby@^11.0.3: +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -989,16 +1021,23 @@ globby@^11.0.3: merge2 "^1.4.1" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" @@ -1011,6 +1050,11 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -1030,12 +1074,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0: +ignore@^5.1.1, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -1075,6 +1114,24 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" + integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + side-channel "^1.0.4" + +is-array-buffer@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" + integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-typed-array "^1.1.10" + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -1090,12 +1147,24 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-callable@^1.1.3, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-core-module@^2.8.1, is-core-module@^2.9.0: +is-core-module@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-core-module@^2.9.0: version "2.10.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== @@ -1143,6 +1212,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -1172,6 +1246,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -1184,29 +1269,23 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-sdsl@^4.1.4: + version "4.3.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" + integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -1227,24 +1306,18 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" + p-locate "^5.0.0" lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -1270,7 +1343,7 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -1282,11 +1355,6 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -1297,6 +1365,11 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -1307,6 +1380,11 @@ object-inspect@^1.12.0, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.12.2: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -1322,14 +1400,24 @@ object.assign@^4.1.2: has-symbols "^1.0.3" object-keys "^1.1.1" -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" once@^1.3.0: version "1.4.0" @@ -1350,24 +1438,19 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-try "^1.0.0" + yocto-queue "^0.1.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: - p-limit "^1.1.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + p-limit "^3.0.2" parent-module@^1.0.0: version "1.0.1" @@ -1376,10 +1459,10 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" @@ -1411,11 +1494,6 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -1435,7 +1513,7 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.0.0, regexpp@^3.1.0: +regexpp@^3.0.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -1445,17 +1523,12 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.10.1, resolve@^1.20.0, resolve@^1.22.0: +resolve@^1.10.1, resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -1490,15 +1563,24 @@ rxjs@^7.0.0: dependencies: tslib "^2.1.0" -semver@^6.1.0: +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +semver@^6.1.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.5: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" @@ -1533,25 +1615,11 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - spawn-command@^0.0.2-1: version "0.0.2-1" resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -1570,6 +1638,15 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimstart@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" @@ -1579,6 +1656,15 @@ string.prototype.trimstart@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -1596,13 +1682,6 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -1622,17 +1701,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -1689,10 +1757,19 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -typescript@^4.7.4: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@^4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== unbox-primitive@^1.0.2: version "1.0.2" @@ -1711,11 +1788,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -1727,6 +1799,18 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -1780,3 +1864,8 @@ yargs@^17.3.1: string-width "^4.2.3" y18n "^5.0.5" yargs-parser "^21.0.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From e6e84a3db2c440cb60677aaf4b44b8aeb2507a71 Mon Sep 17 00:00:00 2001 From: xshady Date: Sun, 5 Feb 2023 23:38:14 +0300 Subject: [PATCH 45/49] client: fix noclip focusdata usage --- freeroam-extended/client/src/noclip.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/freeroam-extended/client/src/noclip.ts b/freeroam-extended/client/src/noclip.ts index d376d2c..84779ff 100644 --- a/freeroam-extended/client/src/noclip.ts +++ b/freeroam-extended/client/src/noclip.ts @@ -18,6 +18,7 @@ export function toggleNoclip(state: boolean): void { native.renderScriptCams(false, true, 500, true, false, 0) const pos = alt.FocusData.focusOverridePos + alt.FocusData.clearFocus() const [, ground] = native.getGroundZFor3dCoord(...pos.toArray(), 0.0, false, false) From 18cb3b467338cd906fac6830a9d076cb73db9071 Mon Sep 17 00:00:00 2001 From: xshady Date: Mon, 6 Feb 2023 00:06:04 +0300 Subject: [PATCH 46/49] client: improve nametags --- freeroam-extended/client/src/nametags.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/freeroam-extended/client/src/nametags.ts b/freeroam-extended/client/src/nametags.ts index 7aed94f..f5ac412 100644 --- a/freeroam-extended/client/src/nametags.ts +++ b/freeroam-extended/client/src/nametags.ts @@ -43,17 +43,13 @@ export class PlayerNametags { } private everyTickHandler(): void { - const renderCam = native.getRenderingCam() - const camCoord = (renderCam > -1) - ? native.getCamCoord(renderCam) - : native.getGameplayCamCoord() + const camCoord = alt.getCamPos() for (const player of alt.Player.streamedIn) { const dist = player.pos.distanceTo(camCoord) if (dist > this.drawRange) continue - const { x, y, z } = player.pos - if (!native.isSphereVisible(x, y, z, 0.1)) continue + if (!native.isEntityOnScreen(player)) continue if (!native.hasEntityClearLosToEntity(LOCAL_PLAYER, player, 17)) continue this.drawPlayerTick(player, dist) @@ -76,7 +72,7 @@ export class PlayerNametags { pos.x + velocityVector.x * frameTime, pos.y + velocityVector.y * frameTime, pos.z + velocityVector.z * frameTime, - 0, + false, ) for (const handler of this.handlers) { From 1a1579251efe6b04e58f54363c01b0504c5d1cc7 Mon Sep 17 00:00:00 2001 From: Yuri Ratkevich Date: Sat, 29 Apr 2023 15:13:37 +0300 Subject: [PATCH 47/49] Nuget update --- .../server/freeroam-extended/Freeroam-Extended.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj b/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj index a5756e2..3a65684 100644 --- a/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj +++ b/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj @@ -9,13 +9,13 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + From 0fb407c4ac347c180e7a8b59f33170794a740b81 Mon Sep 17 00:00:00 2001 From: Yauhen Pahrabniak Date: Fri, 15 Sep 2023 16:10:29 +0200 Subject: [PATCH 48/49] Added weather cycles and sync Added faces for male and female Added outfit and model change Added local proximity voice and global voice for admin Added authorization by cloudID Update to v15 --- freeroam-extended/client/html/index.html | 3 +- freeroam-extended/client/src/index.ts | 15 +- .../Factories/PlayerFactory.cs | 133 +++++++++++++++++- .../Factories/VehicleFactory.cs | 4 +- .../server/freeroam-extended/Main.cs | 14 +- .../server/freeroam-extended/Misc.cs | 17 ++- .../server/freeroam-extended/Voice.cs | 54 +++++++ 7 files changed, 218 insertions(+), 22 deletions(-) create mode 100644 freeroam-extended/server/freeroam-extended/Voice.cs diff --git a/freeroam-extended/client/html/index.html b/freeroam-extended/client/html/index.html index a7307fa..b2d7c11 100644 --- a/freeroam-extended/client/html/index.html +++ b/freeroam-extended/client/html/index.html @@ -34,7 +34,8 @@
  • T / Enter: open chat
  • /tp <1 to 22> (Teleport)
  • -
  • /model <modelName> (Change your ped model)
  • +
  • /model (Change your model between male and female)
  • +
  • /outfit [outfit_name] (Change outfit to random or entered value)
  • /veh <modelName> (Spawn a vehicle)
  • /clearvehicles (Clear your vehicles)
  • /tune <index> <value> (Tune vehicle)
  • diff --git a/freeroam-extended/client/src/index.ts b/freeroam-extended/client/src/index.ts index fb1e069..147c362 100644 --- a/freeroam-extended/client/src/index.ts +++ b/freeroam-extended/client/src/index.ts @@ -12,10 +12,23 @@ import { ATTACK_CONTROLS } from "./const" alt.setConfigFlag(ConfigFlag.DisableAutoWeaponSwap, true) alt.setConfigFlag(ConfigFlag.DisableIdleCamera, true) +alt.setConfigFlag(ConfigFlag.DisableSPEnterVehicleClipset, false) +alt.setConfigFlag(ConfigFlag.DisablePedPropKnockOff, true) +alt.setConfigFlag(ConfigFlag.ForceRenderSnow, true) alt.setStat(StatName.Stamina, 100) alt.setWatermarkPosition(WatermarkPosition.TopCenter) +alt.loadDefaultIpls() +alt.setMsPerGameMinute(60000) -view.emit("setPlayerId", LOCAL_PLAYER.id) +const weatherConfig = { + weathers: [1, 0, 3, 0, 4, 2, 0, 2, 5, 8, 6, 7, 8, 4, 4, 1, 1, 4, 2, 0, 3, 0, 2, 1, 4, 4, 4, 1, 1, 1, 4, 2, 4, 4, 2, 5, 8, 4, 1, 4, 4, 1, 2, 4, 2, 4, 4, 0, 1, 4, 1, 1, 4, 4, 2, 0, 1, 1, 1, 0, 2, 4, 0, 2, 2, 5, 8, 4, 1, 0, 1, 2, 4, 0, 1, 2, 4, 2, 0, 3, 4, 2, 1, 0, 4, 0, 4, 2, 4, 1, 4, 2, 5, 8, 6, 7, 8, 4, 1, 2, 2, 0, 1, 2, 2, 0, 1, 4, 2, 4, 4, 0, 3, 1, 0, 1, 0, 1, 0, 0, 1, 2, 2, 0, 3, 0, 0, 0, 1, 4, 0, 4, 1, 0, 0, 2, 5, 8, 4, 4, 2, 2, 2, 1, 2, 4, 0, 2, 0, 1, 1, 0, 3, 2, 4, 1, 1, 2, 2, 4, 4, 0, 0, 1, 1, 2, 0, 0, 4, 4, 0, 0, 0, 1, 0, 4, 1, 4, 4, 1, 4, 1, 4, 4, 2, 5, 8, 6, 7, 8, 4, 2, 0, 0, 4, 4, 1, 2, 0, 0, 4, 4, 2, 1, 1, 2, 0, 4, 4, 0, 3, 0, 1, 1, 4, 4, 0, 2, 1, 4, 2, 2, 0, 3, 1, 2, 4, 2, 2, 2, 4, 2, 1, 0, 0, 1, 4, 1, 1, 2, 2, 4, 2, 4, 1, 0, 3, 2, 4, 1, 1, 4, 2, 2, 1, 1], + multipliers: [2, 3, 3, 4, 4, 2, 2, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 2, 4, 3, 4, 3, 4, 2, 2, 4, 4, 3, 4, 3, 2, 2, 4, 3, 3, 3, 4, 2, 3, 3, 2, 4, 2, 3, 4, 3, 3, 2, 2, 4, 4, 3, 2, 2, 3, 2, 4, 4, 2, 2, 2, 4, 3, 3, 3, 4, 3, 2, 2, 4, 2, 2, 4, 4, 3, 3, 3, 2, 3, 4, 4, 2, 2, 3, 4, 4, 2, 3, 2, 4, 2, 3, 3, 4, 2, 3, 3, 4, 2, 4, 2, 2, 3, 4, 3, 3, 4, 2, 2, 3, 2, 4, 2, 2, 4, 3, 3, 4, 4, 2, 3, 2, 3, 4, 4, 4, 3, 4, 4, 3, 4, 4, 2, 4, 3, 3, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 4, 3, 2, 2, 3, 4, 2, 3, 3, 2, 3, 2, 2, 4, 2, 4, 2, 3, 2, 2, 3, 4, 3, 4, 3, 2, 4, 2, 4, 3, 2, 3, 2, 2, 4, 3, 4, 2, 2, 4, 3, 2, 2, 3, 3, 2, 2, 4, 4, 2, 3, 4, 4, 2, 4, 4, 3, 2, 2, 4, 4, 4, 3, 4, 2, 2, 2, 3, 4, 2, 4, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 2, 3, 2, 4, 3, 4, 3, 2, 3, 4, 3, 3, 2, 3, 4, 4, 3, 4, 2, 3, 3, 2, 4, 3, 2], +} + +alt.setWeatherCycle(weatherConfig.weathers, weatherConfig.multipliers) +alt.setWeatherSyncActive(true) + +view.emit("setPlayerId", LOCAL_PLAYER.remoteID) setInterval(() => { if (!playerData.areNametagsVisible) return diff --git a/freeroam-extended/server/freeroam-extended/Factories/PlayerFactory.cs b/freeroam-extended/server/freeroam-extended/Factories/PlayerFactory.cs index 463fe19..520c59c 100644 --- a/freeroam-extended/server/freeroam-extended/Factories/PlayerFactory.cs +++ b/freeroam-extended/server/freeroam-extended/Factories/PlayerFactory.cs @@ -2,6 +2,8 @@ using AltV.Net.Async; using AltV.Net.Async.Elements.Entities; using AltV.Net.Elements.Entities; +using AltV.Net.Enums; +using Freeroam_Extended.Clothes; namespace Freeroam_Extended.Factories { @@ -15,8 +17,14 @@ public partial interface IAltPlayer : IPlayer, IAsyncConvertible public bool NoClip { get; set; } public bool IsAdmin { get; set; } public int EventCount { get; set; } - } - + public string CloudID { get; set; } + public long OutfitHash { get; set; } + public uint Sex { get; } + public Task RefreshClothes(); + public Task EquipOutfit(uint outfitHash); + public void RefreshFace(); + } + public partial class AltPlayer : AsyncPlayer, IAltPlayer { public IList Vehicles { get; set; } @@ -27,20 +35,133 @@ public partial class AltPlayer : AsyncPlayer, IAltPlayer public bool NoClip { get; set; } public bool IsAdmin { get; set; } public int EventCount { get; set; } + public string CloudID { get; set; } + public long OutfitHash { get; set; } + public uint Sex => this.Model switch + { + (uint)PedModel.FreemodeMale01 => 0, + (uint)PedModel.FreemodeFemale01 => 1, + _ => 2 + }; - public AltPlayer(ICore server, IntPtr nativePointer, ushort id) : base(server, nativePointer, id) + public AltPlayer(ICore server, IntPtr nativePointer, uint id) : base(server, nativePointer, id) { Vehicles = new List(); } - + + public void RefreshFace() + { + if (Sex == 1) + { + this.SetHeadBlendData(6, 21, 0, 6, 21, 0, 0.41f, 0.18f, 0.0f); + this.SetHeadOverlay(0, 255, 1.0f); + this.SetHeadOverlay(1, 255, 1.0f); + this.SetHeadOverlay(2, 30, 1.0f); + this.SetHeadOverlay(3, 255, 1.0f); + this.SetHeadOverlay(4, 14, 1.0f); + this.SetHeadOverlay(5, 1, 1.0f); + this.SetHeadOverlay(6, 10, 0.85f); + this.SetHeadOverlay(7, 255, 1.0f); + this.SetHeadOverlay(8, 2, 1.0f); + this.SetHeadOverlay(9, 0, 0.0f); + this.SetHeadOverlay(10, 255, 1.0f); + this.SetHeadOverlay(11, 255, 1.0f); + this.SetHeadOverlay(12, 255, 1.0f); + + this.SetHeadOverlayColor(5, 2, 11, 0); + this.SetHeadOverlayColor(8, 2, 6, 0); + + this.SetClothes(2, 3, 0, 0); + this.HairColor = 61; + this.HairHighlightColor = 61; + this.SetEyeColor(2); + + float[] featureParams = { -0.78f, 0, 0, -0.07f, 0.03f, 0, 0.07f, -0.44f, 0.07f, 0.02f, -0.95f, -0.74f, -1, -0.09f, -0.57f, 0.02f, -0.1f, -0.19f, -1, -1 }; + for (int i = 0; i < featureParams.Length; i++) + { + this.SetFaceFeature((byte)i, featureParams[i]); + } + } + else if (Sex == 0) + { + this.SetHeadBlendData(2, 21, 0, 2, 21, 0, 0.5f, 0.72f, 0.0f); + this.SetHeadOverlay(0, 255, 1.0f); + this.SetHeadOverlay(1, 255, 1.0f); + this.SetHeadOverlay(2, 30, 1.0f); + this.SetHeadOverlay(3, 255, 1.0f); + this.SetHeadOverlay(4, 255, 1.0f); + this.SetHeadOverlay(5, 255, 1.0f); + this.SetHeadOverlay(6, 255, 1.0f); + this.SetHeadOverlay(7, 255, 1.0f); + this.SetHeadOverlay(8, 0, 0.15f); + this.SetHeadOverlay(9, 255, 1.0f); + this.SetHeadOverlay(10, 255, 1.0f); + this.SetHeadOverlay(11, 255, 1.0f); + this.SetHeadOverlay(12, 255, 1.0f); + + this.SetHeadOverlayColor(5, 2, 32, 0); + this.SetHeadOverlayColor(8, 2, 11, 0); + + this.SetClothes(2, 21, 0, 0); + this.HairColor = 35; + this.HairHighlightColor = 35; + this.SetEyeColor(3); + + float[] featureParams = { 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1 }; + for (int i = 0; i < featureParams.Length; i++) + { + this.SetFaceFeature((byte)i, featureParams[i]); + } + } + } + + public async Task RefreshClothes() + { + if (!Misc.IsResourceLoaded("c_clothesfit")) + return; + + if (Sex == 2) + return; + + await ClothesFitService.DestroyPlayer(this); + await ClothesFitService.InitPlayer(this); + + ulong[] outfits = await ClothesFitService.GetOutfitsBySex(Sex); + + Random rand = new Random(); + int randomIndex = rand.Next(outfits.Length); + ulong randomElement = outfits[randomIndex]; + + await ClothesFitService.Equip(this, (uint)randomElement); + } + + public async Task EquipOutfit(uint outfitHash) + { + if (!Misc.IsResourceLoaded("c_clothesfit")) + return; + + if (Sex == 2) + return; + + await ClothesFitService.DestroyPlayer(this); + await ClothesFitService.InitPlayer(this); + + ulong[] outfits = await ClothesFitService.GetOutfitsBySex(Sex); + + if (outfits.Contains(outfitHash)) + { + await ClothesFitService.Equip(this, outfitHash); + } + } + public new IAltPlayer ToAsync(IAsyncContext _) => this; } public class AltPlayerFactory : IEntityFactory { - public IPlayer Create(ICore server, IntPtr playerPointer, ushort id) + public IPlayer Create(ICore core, IntPtr entityPointer, uint id) { - return new AltPlayer(server, playerPointer, id); + return new AltPlayer(core, entityPointer, id); } } } \ No newline at end of file diff --git a/freeroam-extended/server/freeroam-extended/Factories/VehicleFactory.cs b/freeroam-extended/server/freeroam-extended/Factories/VehicleFactory.cs index 01e1c4f..fa70e59 100644 --- a/freeroam-extended/server/freeroam-extended/Factories/VehicleFactory.cs +++ b/freeroam-extended/server/freeroam-extended/Factories/VehicleFactory.cs @@ -22,7 +22,7 @@ public AltVehicle(ICore server, uint model, Position position, Rotation rotation SpawnTime = DateTime.Now; } - public AltVehicle(ICore server, IntPtr nativePointer, ushort id) : base(server, nativePointer, id) + public AltVehicle(ICore server, IntPtr nativePointer, uint id) : base(server, nativePointer, id) { SpawnTime = DateTime.Now; } @@ -32,7 +32,7 @@ public AltVehicle(ICore server, IntPtr nativePointer, ushort id) : base(server, public class AltVehicleFactory : IEntityFactory { - public IVehicle Create(ICore server, IntPtr playerPointer, ushort id) + public IVehicle Create(ICore server, IntPtr playerPointer, uint id) { return new AltVehicle(server, playerPointer, id); } diff --git a/freeroam-extended/server/freeroam-extended/Main.cs b/freeroam-extended/server/freeroam-extended/Main.cs index 0abf53e..1dd2aac 100644 --- a/freeroam-extended/server/freeroam-extended/Main.cs +++ b/freeroam-extended/server/freeroam-extended/Main.cs @@ -18,7 +18,7 @@ public override void OnStart() Alt.Core.LogColored("~g~ Freeroam-Extended Started!"); // colshape for weapon disabling everywhere but the airport Alt.CreateColShapeSphere(Misc.DMPos, Misc.DMRadius); - + Voice.Init(); if (!File.Exists(@"BannedPlayers.json")) { @@ -30,14 +30,14 @@ public override void OnStart() { string json = File.ReadAllText(@"BannedPlayers.json") ?? ""; - var bannedPlayers = JsonSerializer.Deserialize>>(json); + var bannedPlayers = JsonSerializer.Deserialize>(json); - Misc.BannedPlayers = bannedPlayers ?? new HashSet>(); + Misc.BannedPlayers = bannedPlayers ?? new HashSet(); } if (!File.Exists(@"Operators.json")) { - var hashSet = new HashSet>(); + var hashSet = new HashSet(); var json = JsonSerializer.Serialize(hashSet); File.WriteAllText(@"Operators.json", json); } @@ -45,9 +45,9 @@ public override void OnStart() { string json = File.ReadAllText(@"Operators.json") ?? ""; - var operators = JsonSerializer.Deserialize>>(json); + var operators = JsonSerializer.Deserialize>(json); - Misc.Operators = operators ?? new HashSet>(); + Misc.Operators = operators ?? new HashSet(); } if (!File.Exists("Stats.json")) @@ -65,7 +65,7 @@ public override void OnStart() File.WriteAllText("UniquePlayers.json", JsonSerializer.Serialize(Misc.UniquePlayers)); else { - var uniquePlayers = JsonSerializer.Deserialize>>(File.ReadAllText("UniquePlayers.json")); + var uniquePlayers = JsonSerializer.Deserialize>(File.ReadAllText("UniquePlayers.json")); if (uniquePlayers != null) Misc.UniquePlayers = uniquePlayers; } diff --git a/freeroam-extended/server/freeroam-extended/Misc.cs b/freeroam-extended/server/freeroam-extended/Misc.cs index b7499df..98395b3 100644 --- a/freeroam-extended/server/freeroam-extended/Misc.cs +++ b/freeroam-extended/server/freeroam-extended/Misc.cs @@ -1,4 +1,5 @@ -using AltV.Net.Data; +using AltV.Net; +using AltV.Net.Data; namespace Freeroam_Extended { @@ -295,22 +296,22 @@ public static class Misc new (-675.2044f, -2378.4658f, 13.087158f), }; - public static HashSet> BannedPlayers = new() + public static HashSet BannedPlayers = new() { }; - public static HashSet> Operators = new() + public static HashSet Operators = new() { }; - public static HashSet> UniquePlayers = new() + public static HashSet UniquePlayers = new() { }; - public static bool ChatState = false; + public static bool ChatState = true; public static int Hour = 11; public static uint Weather = 0; @@ -318,5 +319,11 @@ public static class Misc public static int DMRadius = 800; public static Position? AdminOverridedSpawnPos = null; + + public static bool IsResourceLoaded(string resourceName) + { + var allResources = Alt.GetAllResources(); + return allResources.Count(x => x.Name == resourceName) > 0; + } } } \ No newline at end of file diff --git a/freeroam-extended/server/freeroam-extended/Voice.cs b/freeroam-extended/server/freeroam-extended/Voice.cs new file mode 100644 index 0000000..f04c0e2 --- /dev/null +++ b/freeroam-extended/server/freeroam-extended/Voice.cs @@ -0,0 +1,54 @@ +using AltV.Net.Async; +using AltV.Net; +using AltV.Net.Elements.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Freeroam_Extended +{ + static internal class Voice + { + static IVoiceChannel localChannel; + static IVoiceChannel globalChannel; + + public static void Init() + { + localChannel = Alt.CreateVoiceChannel(true, 100); + globalChannel = Alt.CreateVoiceChannel(false, 0); + } + + public static void AddPlayer(IPlayer player) + { + localChannel.AddPlayer(player); + globalChannel.AddPlayer(player); + + globalChannel.MutePlayer(player); + } + + public static void RemovePlayer(IPlayer player) + { + localChannel.RemovePlayer(player); + globalChannel.RemovePlayer(player); + + globalChannel.MutePlayer(player); + } + + public static void EnableGlobalVoice(IPlayer player) + { + globalChannel.UnmutePlayer(player); + } + + public static void DisableGlobalVoice(IPlayer player) + { + globalChannel.MutePlayer(player); + } + + public static bool IsGlobalVoiceEnabled(IPlayer player) + { + return globalChannel.IsPlayerMuted(player); + } + } +} From c2551262e78eb587ddb2f66a9a171e6ff6b84d65 Mon Sep 17 00:00:00 2001 From: Yauhen Pahrabniak Date: Fri, 15 Sep 2023 16:10:37 +0200 Subject: [PATCH 49/49] fix --- freeroam-extended/client/package-lock.json | 3580 +++++++++++++++++ freeroam-extended/client/package.json | 8 +- freeroam-extended/client/resource.toml | 7 +- freeroam-extended/client/src/nametags.ts | 2 +- freeroam-extended/client/yarn.lock | 508 +-- .../Clothes/ClothesFitService.cs | 115 + .../server/freeroam-extended/Commands.cs | 92 +- .../server/freeroam-extended/EventHandler.cs | 82 +- .../Freeroam-Extended.csproj | 9 +- 9 files changed, 4085 insertions(+), 318 deletions(-) create mode 100644 freeroam-extended/client/package-lock.json create mode 100644 freeroam-extended/server/freeroam-extended/Clothes/ClothesFitService.cs diff --git a/freeroam-extended/client/package-lock.json b/freeroam-extended/client/package-lock.json new file mode 100644 index 0000000..5b105c3 --- /dev/null +++ b/freeroam-extended/client/package-lock.json @@ -0,0 +1,3580 @@ +{ + "name": "client", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "client", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@altv/types-client": "^2.9.2", + "@altv/types-natives": "^1.5.4", + "@altv/types-server": "^2.9.5", + "@altv/types-shared": "^1.6.0", + "@typescript-eslint/eslint-plugin": "^5.50.0", + "@typescript-eslint/parser": "^5.50.0", + "altv-esbuild": "^0.4.3", + "concurrently": "^7.3.0", + "esbuild": "^0.14.53", + "eslint": "^8.33.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^6.1.1", + "typescript": "^4.9.5" + } + }, + "node_modules/@altv/types-client": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@altv/types-client/-/types-client-2.9.2.tgz", + "integrity": "sha512-LMGD1EBebN6BjFohhvPijR1Rq8BnU24IGdPb2It7NGFhHXxX/688XnlfX+tquIKlUkQPR8D54imNzZKBUG+BWA==", + "dev": true, + "peerDependencies": { + "@altv/types-shared": ">=1.6", + "@altv/types-worker": ">=1.0" + } + }, + "node_modules/@altv/types-natives": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@altv/types-natives/-/types-natives-1.5.4.tgz", + "integrity": "sha512-N4jtJ4f8KFOCi0sxlVvTWF7I7Nz/ylq136sIJMpsHIcBWIlysWF6zdJFdBW5bkquDGWgY8aBYPQ4TU+ayQhukw==", + "dev": true, + "peerDependencies": { + "@altv/types-client": ">=2.5" + } + }, + "node_modules/@altv/types-server": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@altv/types-server/-/types-server-2.9.5.tgz", + "integrity": "sha512-Io4UkkJcbo9e6XqQd/dtQyQfOucko+vYmivQPJC/WemCCrQuMBWd4teqW3AUxcpT81psOnnJkHEVxfth386zmw==", + "dev": true, + "peerDependencies": { + "@altv/types-shared": ">=1.6" + } + }, + "node_modules/@altv/types-shared": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@altv/types-shared/-/types-shared-1.6.0.tgz", + "integrity": "sha512-OURm829uVVxKFMPtWx/ZUR9K7cw7ZISCt5qdFzRO0MUdd+HAX3hymJqyy3euksTkxlBpGQXox432I0Sk02aurg==", + "dev": true + }, + "node_modules/@altv/types-worker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@altv/types-worker/-/types-worker-1.0.7.tgz", + "integrity": "sha512-mImzn79l5w1/T16sZU0F7pI/hehY84tUe0PNu5Q/1S0B2OsINntAFU/RxLIe5XhSepVg0zlF2ZaISZfLcdQlLA==", + "dev": true, + "peer": true, + "peerDependencies": { + "@altv/types-client": "latest" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz", + "integrity": "sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "5.50.0", + "@typescript-eslint/type-utils": "5.50.0", + "@typescript-eslint/utils": "5.50.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.50.0.tgz", + "integrity": "sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.50.0", + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/typescript-estree": "5.50.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz", + "integrity": "sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/visitor-keys": "5.50.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz", + "integrity": "sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.50.0", + "@typescript-eslint/utils": "5.50.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.50.0.tgz", + "integrity": "sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz", + "integrity": "sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/visitor-keys": "5.50.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.50.0.tgz", + "integrity": "sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.50.0", + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/typescript-estree": "5.50.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz", + "integrity": "sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.50.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/altv-esbuild": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/altv-esbuild/-/altv-esbuild-0.4.3.tgz", + "integrity": "sha512-Hm+gxHReGy32xv4ZYb8KC1kDZRXIn9mmXZv9/3pkohbtidL5Km7zJe2cYUAaQv97KN5L0RoQmoQB6785AEYAYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind/node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.3.0.tgz", + "integrity": "sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" + }, + "bin": { + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/date-fns": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz", + "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.14.53", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.53.tgz", + "integrity": "sha512-ohO33pUBQ64q6mmheX1mZ8mIXj8ivQY/L4oVuAshr+aJI+zLl+amrp3EodrUNDNYVrKJXGPfIHFGhO8slGRjuw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.14.53", + "esbuild-android-64": "0.14.53", + "esbuild-android-arm64": "0.14.53", + "esbuild-darwin-64": "0.14.53", + "esbuild-darwin-arm64": "0.14.53", + "esbuild-freebsd-64": "0.14.53", + "esbuild-freebsd-arm64": "0.14.53", + "esbuild-linux-32": "0.14.53", + "esbuild-linux-64": "0.14.53", + "esbuild-linux-arm": "0.14.53", + "esbuild-linux-arm64": "0.14.53", + "esbuild-linux-mips64le": "0.14.53", + "esbuild-linux-ppc64le": "0.14.53", + "esbuild-linux-riscv64": "0.14.53", + "esbuild-linux-s390x": "0.14.53", + "esbuild-netbsd-64": "0.14.53", + "esbuild-openbsd-64": "0.14.53", + "esbuild-sunos-64": "0.14.53", + "esbuild-windows-32": "0.14.53", + "esbuild-windows-64": "0.14.53", + "esbuild-windows-arm64": "0.14.53" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.53", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.53.tgz", + "integrity": "sha512-s9skQFF0I7zqnQ2K8S1xdLSfZFsPLuOGmSx57h2btSEswv0N0YodYvqLcJMrNMXh6EynOmWD7rz+0rWWbFpIHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz", + "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-n": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", + "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "dev": true, + "peer": true, + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-n/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-plugin-n/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-each/node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/node_modules/es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/function.prototype.name/node_modules/object.assign": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz", + "integrity": "sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description/node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors/node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", + "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve/node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true, + "license": "0BSD" + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel/node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "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" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/freeroam-extended/client/package.json b/freeroam-extended/client/package.json index 2971be5..ac8adef 100644 --- a/freeroam-extended/client/package.json +++ b/freeroam-extended/client/package.json @@ -4,10 +4,10 @@ "main": "index.js", "license": "MIT", "devDependencies": { - "@altv/types-client": "^2.4.4", - "@altv/types-natives": "^1.4.8", - "@altv/types-server": "^2.5.7", - "@altv/types-shared": "^1.3.6", + "@altv/types-client": "^2.9.2", + "@altv/types-natives": "^1.5.4", + "@altv/types-server": "^2.9.5", + "@altv/types-shared": "^1.6.0", "@typescript-eslint/eslint-plugin": "^5.50.0", "@typescript-eslint/parser": "^5.50.0", "altv-esbuild": "^0.4.3", diff --git a/freeroam-extended/client/resource.toml b/freeroam-extended/client/resource.toml index 458a12a..369b1e5 100644 --- a/freeroam-extended/client/resource.toml +++ b/freeroam-extended/client/resource.toml @@ -2,7 +2,6 @@ type = 'js' main = 'dist/server.js' client-main = 'dist/client.js' client-files = [ 'dist/client.js', 'html/*' ] -# TODO: turn on after fixing: https://github.com/altmp/altv-issues/issues/1628 -# optional-permissions = [ -# 'Clipboard Access', -# ] +optional-permissions = [ + 'Clipboard Access', +] diff --git a/freeroam-extended/client/src/nametags.ts b/freeroam-extended/client/src/nametags.ts index f5ac412..55cc779 100644 --- a/freeroam-extended/client/src/nametags.ts +++ b/freeroam-extended/client/src/nametags.ts @@ -86,7 +86,7 @@ export class PlayerNametags { } private draw(player: alt.Player, scale: number): void { - const fullName = `${player.name} ~b~#${player.id}` + const fullName = `${player.name} ~b~#${player.remoteID}` scale *= this.fontSize const yOffset = 0 - (player.armour > 0 ? 0.0015 : 0) diff --git a/freeroam-extended/client/yarn.lock b/freeroam-extended/client/yarn.lock index 56c11f8..db15c2a 100644 --- a/freeroam-extended/client/yarn.lock +++ b/freeroam-extended/client/yarn.lock @@ -2,25 +2,25 @@ # yarn lockfile v1 -"@altv/types-client@^2.4.4": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@altv/types-client/-/types-client-2.4.4.tgz#868161364f5df1c60ec467bfef66b9d224dfcc36" - integrity sha512-Dt5DiFigJnSL8MHD4YFX3wIiAC/qkg+gqakHNhJxC9lO7tW41P9elMYGNn240rw10IJDKrjNSe2soUrvHHdG/w== - -"@altv/types-natives@^1.4.8": - version "1.4.8" - resolved "https://registry.yarnpkg.com/@altv/types-natives/-/types-natives-1.4.8.tgz#2a7a234a5651e5c2bf1eef85a05ddf31861c2029" - integrity sha512-WkyKCd1QLW94cNkq/KMbl+pZyXGxFDkRlnDhpwWmPlZwwQrGZkgHvj35vVa0QMfN8L53lCiaLPNJolX030oeuA== - -"@altv/types-server@^2.5.7": - version "2.5.7" - resolved "https://registry.yarnpkg.com/@altv/types-server/-/types-server-2.5.7.tgz#c87e5bed5e1e8b87574338afb463227821732048" - integrity sha512-kntuD2ylwX2wL2TJuArpkWsHrPlYYT4eNKfXglJppDYSIbUsxfvP1Kt3XdBfclaEMU63Jz64mMIJ4FC5M1gKKg== - -"@altv/types-shared@^1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@altv/types-shared/-/types-shared-1.3.6.tgz#f76ef5cdd15c6f9f50240ce224dd9e057a8ade96" - integrity sha512-1jEfqaqRKxiEoIHEo2th/d2LAHG7HqsiYPFTVv8v4XEhlt+Ny6hE1lX1OmGocCJH0oF7Pin+ZQekou28s5C6ug== +"@altv/types-client@^2.9.2": + version "2.9.2" + resolved "https://registry.npmjs.org/@altv/types-client/-/types-client-2.9.2.tgz" + integrity sha512-LMGD1EBebN6BjFohhvPijR1Rq8BnU24IGdPb2It7NGFhHXxX/688XnlfX+tquIKlUkQPR8D54imNzZKBUG+BWA== + +"@altv/types-natives@^1.5.4": + version "1.5.4" + resolved "https://registry.npmjs.org/@altv/types-natives/-/types-natives-1.5.4.tgz" + integrity sha512-N4jtJ4f8KFOCi0sxlVvTWF7I7Nz/ylq136sIJMpsHIcBWIlysWF6zdJFdBW5bkquDGWgY8aBYPQ4TU+ayQhukw== + +"@altv/types-server@^2.9.5": + version "2.9.5" + resolved "https://registry.npmjs.org/@altv/types-server/-/types-server-2.9.5.tgz" + integrity sha512-Io4UkkJcbo9e6XqQd/dtQyQfOucko+vYmivQPJC/WemCCrQuMBWd4teqW3AUxcpT81psOnnJkHEVxfth386zmw== + +"@altv/types-shared@^1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@altv/types-shared/-/types-shared-1.6.0.tgz" + integrity sha512-OURm829uVVxKFMPtWx/ZUR9K7cw7ZISCt5qdFzRO0MUdd+HAX3hymJqyy3euksTkxlBpGQXox432I0Sk02aurg== "@esbuild/linux-loong64@0.14.53": version "0.14.53" @@ -29,7 +29,7 @@ "@eslint/eslintrc@^1.4.1": version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== dependencies: ajv "^6.12.4" @@ -44,7 +44,7 @@ "@humanwhocodes/config-array@^0.11.8": version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" @@ -53,17 +53,17 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -71,12 +71,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -84,22 +84,22 @@ "@types/json-schema@^7.0.9": version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/semver@^7.3.12": version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== "@typescript-eslint/eslint-plugin@^5.50.0": version "5.50.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz#fb48c31cadc853ffc1dc35373f56b5e2a8908fe9" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz" integrity sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ== dependencies: "@typescript-eslint/scope-manager" "5.50.0" @@ -115,7 +115,7 @@ "@typescript-eslint/parser@^5.50.0": version "5.50.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.50.0.tgz#a33f44b2cc83d1b7176ec854fbecd55605b0b032" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.50.0.tgz" integrity sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ== dependencies: "@typescript-eslint/scope-manager" "5.50.0" @@ -125,7 +125,7 @@ "@typescript-eslint/scope-manager@5.50.0": version "5.50.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz#90b8a3b337ad2c52bbfe4eac38f9164614e40584" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz" integrity sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg== dependencies: "@typescript-eslint/types" "5.50.0" @@ -133,7 +133,7 @@ "@typescript-eslint/type-utils@5.50.0": version "5.50.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz#509d5cc9728d520008f7157b116a42c5460e7341" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz" integrity sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ== dependencies: "@typescript-eslint/typescript-estree" "5.50.0" @@ -143,12 +143,12 @@ "@typescript-eslint/types@5.50.0": version "5.50.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.50.0.tgz#c461d3671a6bec6c2f41f38ed60bd87aa8a30093" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.50.0.tgz" integrity sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w== "@typescript-eslint/typescript-estree@5.50.0": version "5.50.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz#0b9b82975bdfa40db9a81fdabc7f93396867ea97" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz" integrity sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow== dependencies: "@typescript-eslint/types" "5.50.0" @@ -161,7 +161,7 @@ "@typescript-eslint/utils@5.50.0": version "5.50.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.50.0.tgz#807105f5ffb860644d30d201eefad7017b020816" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.50.0.tgz" integrity sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw== dependencies: "@types/json-schema" "^7.0.9" @@ -175,7 +175,7 @@ "@typescript-eslint/visitor-keys@5.50.0": version "5.50.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz#b752ffc143841f3d7bc57d6dd01ac5c40f8c4903" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz" integrity sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg== dependencies: "@typescript-eslint/types" "5.50.0" @@ -183,17 +183,17 @@ acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.8.0: version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -203,29 +203,29 @@ ajv@^6.10.0, ajv@^6.12.4: altv-esbuild@^0.4.3: version "0.4.3" - resolved "https://registry.yarnpkg.com/altv-esbuild/-/altv-esbuild-0.4.3.tgz#20cf7b3e69db9a76124a04ff8897e2bbcb2cc5df" + resolved "https://registry.npmjs.org/altv-esbuild/-/altv-esbuild-0.4.3.tgz" integrity sha512-Hm+gxHReGy32xv4ZYb8KC1kDZRXIn9mmXZv9/3pkohbtidL5Km7zJe2cYUAaQv97KN5L0RoQmoQB6785AEYAYg== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-includes@^3.1.6: version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" @@ -236,12 +236,12 @@ array-includes@^3.1.6: array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.flat@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" @@ -251,7 +251,7 @@ array.prototype.flat@^1.3.1: array.prototype.flatmap@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: call-bind "^1.0.2" @@ -261,17 +261,17 @@ array.prototype.flatmap@^1.3.1: available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -279,14 +279,14 @@ brace-expansion@^1.1.7: braces@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -294,12 +294,12 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -307,7 +307,7 @@ chalk@^4.0.0, chalk@^4.1.0: cliui@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -316,24 +316,24 @@ cliui@^7.0.2: color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concurrently@^7.3.0: version "7.3.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.3.0.tgz#eb45cdbc8df43da195f619aba218a980cae49184" + resolved "https://registry.npmjs.org/concurrently/-/concurrently-7.3.0.tgz" integrity sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA== dependencies: chalk "^4.1.0" @@ -348,7 +348,7 @@ concurrently@^7.3.0: cross-spawn@^7.0.2: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -357,31 +357,31 @@ cross-spawn@^7.0.2: date-fns@^2.16.1: version "2.29.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.1.tgz#9667c2615525e552b5135a3116b95b1961456e60" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz" integrity sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw== debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== dependencies: has-property-descriptors "^1.0.0" @@ -389,33 +389,33 @@ define-properties@^1.1.3, define-properties@^1.1.4: dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== es-abstract@^1.19.0, es-abstract@^1.19.5: version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz" integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== dependencies: call-bind "^1.0.2" @@ -444,7 +444,7 @@ es-abstract@^1.19.0, es-abstract@^1.19.5: es-abstract@^1.20.4: version "1.21.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz" integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== dependencies: available-typed-arrays "^1.0.5" @@ -483,7 +483,7 @@ es-abstract@^1.20.4: es-set-tostringtag@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== dependencies: get-intrinsic "^1.1.3" @@ -492,14 +492,14 @@ es-set-tostringtag@^2.0.1: es-shim-unscopables@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: has "^1.0.3" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -598,7 +598,7 @@ esbuild-windows-32@0.14.53: esbuild-windows-64@0.14.53: version "0.14.53" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.53.tgz#ec2ab4a60c5215f092ffe1eab6d01319e88238af" + resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.53.tgz" integrity sha512-s9skQFF0I7zqnQ2K8S1xdLSfZFsPLuOGmSx57h2btSEswv0N0YodYvqLcJMrNMXh6EynOmWD7rz+0rWWbFpIHQ== esbuild-windows-arm64@0.14.53: @@ -608,7 +608,7 @@ esbuild-windows-arm64@0.14.53: esbuild@^0.14.53: version "0.14.53" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.53.tgz#20b1007f686e8584f2a01a1bec5a37aac9498ce4" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.53.tgz" integrity sha512-ohO33pUBQ64q6mmheX1mZ8mIXj8ivQY/L4oVuAshr+aJI+zLl+amrp3EodrUNDNYVrKJXGPfIHFGhO8slGRjuw== optionalDependencies: "@esbuild/linux-loong64" "0.14.53" @@ -635,22 +635,22 @@ esbuild@^0.14.53: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-standard@^17.0.0: version "17.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" + resolved "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz" integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== eslint-import-resolver-node@^0.3.7: version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz" integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" @@ -659,14 +659,14 @@ eslint-import-resolver-node@^0.3.7: eslint-module-utils@^2.7.4: version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz" integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" eslint-plugin-es@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + resolved "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz" integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== dependencies: eslint-utils "^2.0.0" @@ -674,7 +674,7 @@ eslint-plugin-es@^3.0.0: eslint-plugin-import@^2.27.5: version "2.27.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz" integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: array-includes "^3.1.6" @@ -695,7 +695,7 @@ eslint-plugin-import@^2.27.5: eslint-plugin-node@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + resolved "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz" integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== dependencies: eslint-plugin-es "^3.0.0" @@ -707,12 +707,12 @@ eslint-plugin-node@^11.1.0: eslint-plugin-promise@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" + resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz" integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -720,7 +720,7 @@ eslint-scope@^5.1.1: eslint-scope@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" @@ -728,36 +728,36 @@ eslint-scope@^7.1.1: eslint-utils@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" eslint-utils@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^1.1.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint-visitor-keys@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.33.0: version "8.33.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.33.0.tgz#02f110f32998cb598c6461f24f4d306e41ca33d7" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz" integrity sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA== dependencies: "@eslint/eslintrc" "^1.4.1" @@ -802,7 +802,7 @@ eslint@^8.33.0: espree@^9.4.0: version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: acorn "^8.8.0" @@ -811,41 +811,41 @@ espree@^9.4.0: esquery@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.9: version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -856,38 +856,38 @@ fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -895,7 +895,7 @@ find-up@^5.0.0: flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -903,29 +903,29 @@ flat-cache@^3.0.4: flatted@^3.1.0: version "3.2.6" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz" integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== for-each@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" @@ -935,17 +935,17 @@ function.prototype.name@^1.1.5: functions-have-names@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== dependencies: function-bind "^1.1.1" @@ -954,7 +954,7 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: get-intrinsic@^1.1.3: version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz" integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" @@ -963,7 +963,7 @@ get-intrinsic@^1.1.3: get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -971,21 +971,21 @@ get-symbol-description@^1.0.0: glob-parent@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@^7.1.3: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -997,21 +997,21 @@ glob@^7.1.3: globals@^13.19.0: version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" globalthis@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -1023,65 +1023,65 @@ globby@^11.1.0: gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: get-intrinsic "^1.1.1" has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" ignore@^5.1.1, ignore@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -1089,12 +1089,12 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -1102,12 +1102,12 @@ inflight@^1.0.4: inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== internal-slot@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== dependencies: get-intrinsic "^1.1.0" @@ -1116,7 +1116,7 @@ internal-slot@^1.0.3: internal-slot@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz" integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== dependencies: get-intrinsic "^1.1.3" @@ -1125,7 +1125,7 @@ internal-slot@^1.0.4: is-array-buffer@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz" integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== dependencies: call-bind "^1.0.2" @@ -1134,14 +1134,14 @@ is-array-buffer@^3.0.1: is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -1149,77 +1149,77 @@ is-boolean-object@^1.1.0: is-callable@^1.1.3, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== is-core-module@^2.11.0: version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" is-core-module@^2.9.0: version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== dependencies: has "^1.0.3" is-date-object@^1.0.1: version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -1227,28 +1227,28 @@ is-regex@^1.1.4: is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-typed-array@^1.1.10, is-typed-array@^1.1.9: version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== dependencies: available-typed-arrays "^1.0.5" @@ -1259,48 +1259,48 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9: is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== js-sdsl@^4.1.4: version "4.3.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz" integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== dependencies: minimist "^1.2.0" levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -1308,36 +1308,36 @@ levn@^0.4.1: locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -1345,54 +1345,54 @@ micromatch@^4.0.4: minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.6: version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@^2.1.1: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== object-inspect@^1.12.0, object-inspect@^1.9.0: version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== object-inspect@^1.12.2: version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.2: version "4.1.3" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz" integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== dependencies: call-bind "^1.0.2" @@ -1402,7 +1402,7 @@ object.assign@^4.1.2: object.assign@^4.1.4: version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -1412,7 +1412,7 @@ object.assign@^4.1.4: object.values@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" @@ -1421,14 +1421,14 @@ object.values@^1.1.6: once@^1.3.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" optionator@^0.9.1: version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -1440,73 +1440,73 @@ optionator@^0.9.1: p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== punycode@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== regexp.prototype.flags@^1.4.3: version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== dependencies: call-bind "^1.0.2" @@ -1515,22 +1515,22 @@ regexp.prototype.flags@^1.4.3: regexpp@^3.0.0, regexpp@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve@^1.10.1, resolve@^1.22.1: version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: is-core-module "^2.9.0" @@ -1539,33 +1539,33 @@ resolve@^1.10.1, resolve@^1.22.1: reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rxjs@^7.0.0: version "7.5.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz" integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== dependencies: tslib "^2.1.0" safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: call-bind "^1.0.2" @@ -1574,36 +1574,36 @@ safe-regex-test@^1.0.0: semver@^6.1.0, semver@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.7: version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.7.3: version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz" integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -1612,17 +1612,17 @@ side-channel@^1.0.4: slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== spawn-command@^0.0.2-1: version "0.0.2-1" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" + resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -1631,7 +1631,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: string.prototype.trimend@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== dependencies: call-bind "^1.0.2" @@ -1640,7 +1640,7 @@ string.prototype.trimend@^1.0.5: string.prototype.trimend@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== dependencies: call-bind "^1.0.2" @@ -1649,7 +1649,7 @@ string.prototype.trimend@^1.0.6: string.prototype.trimstart@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== dependencies: call-bind "^1.0.2" @@ -1658,7 +1658,7 @@ string.prototype.trimstart@^1.0.5: string.prototype.trimstart@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" @@ -1667,60 +1667,60 @@ string.prototype.trimstart@^1.0.6: strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.1.0: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tree-kill@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== tsconfig-paths@^3.14.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" @@ -1730,36 +1730,36 @@ tsconfig-paths@^3.14.1: tslib@^1.8.1: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.1.0: version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== typed-array-length@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== dependencies: call-bind "^1.0.2" @@ -1768,12 +1768,12 @@ typed-array-length@^1.0.4: typescript@^4.9.5: version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -1783,14 +1783,14 @@ unbox-primitive@^1.0.2: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -1801,7 +1801,7 @@ which-boxed-primitive@^1.0.2: which-typed-array@^1.1.9: version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== dependencies: available-typed-arrays "^1.0.5" @@ -1813,19 +1813,19 @@ which-typed-array@^1.1.9: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" word-wrap@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -1834,27 +1834,27 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@^21.0.0: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^17.3.1: version "17.5.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz" integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== dependencies: cliui "^7.0.2" @@ -1867,5 +1867,5 @@ yargs@^17.3.1: yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/freeroam-extended/server/freeroam-extended/Clothes/ClothesFitService.cs b/freeroam-extended/server/freeroam-extended/Clothes/ClothesFitService.cs new file mode 100644 index 0000000..009276e --- /dev/null +++ b/freeroam-extended/server/freeroam-extended/Clothes/ClothesFitService.cs @@ -0,0 +1,115 @@ +using AltV.Net; +using AltV.Net.Elements.Entities; + +namespace Freeroam_Extended.Clothes; + +internal class IdGenerator +{ + private Stack idStack; + + public IdGenerator() + { + this.idStack = new Stack(); + this.PushId(long.MinValue); + } + + public long GetNextId() + { + if (this.idStack.Count == 0) + { + // If the stack is empty, push the next sequential ID. + this.PushId(this.idStack.Count + 1); + } + + return this.idStack.Pop(); + } + + public void ReleaseId(long id) + { + this.idStack.Push(id); + } + + private void PushId(long id) + { + this.idStack.Push(id); + } +} + +internal static class ClothesFitService +{ + private static readonly IdGenerator _idGen = new(); + private static readonly Dictionary> _tasks = new(); + + static ClothesFitService() + { + Alt.OnServer("clothes.resp", (long id, string type, object result) => + { + if (!_tasks.TryGetValue(id, out var tcs)) + { + return; + } + + _tasks.Remove(id); + + if (type == "error") + { + tcs.TrySetException(new Exception(result?.ToString())); + } + else + { + tcs.SetResult(result); + } + }); + } + + public static Task InitPlayer(IPlayer player) + { + return MakeReq(player, "initPlayer"); + } + + public static Task DestroyPlayer(IPlayer player) + { + return MakeReq(player, "destroyPlayer"); + } + + public static Task Equip(IPlayer player, string hash, bool force = true) + { + //TODO CLOTHES IMPLEMENT FORCE ON CLIENT + return MakeReq(player, "equip", hash, force); + } + + public static Task Equip(IPlayer player, uint hash, bool force = true) + { + //TODO CLOTHES IMPLEMENT FORCE ON CLIENT + return MakeReq(player, "equip", hash, force); + } + + public static Task UnEquip(IPlayer player, string hash) + { + return MakeReq(player, "unequip", hash); + } + + public static Task UnEquip(IPlayer player, uint hash) + { + return MakeReq(player, "unequip", hash); + } + + public static async Task GetOutfitsBySex(uint sex) + { + var tcs = new TaskCompletionSource(); + var id = _idGen.GetNextId(); + _tasks.Add(id, tcs); + Alt.Emit("clothes.req", null, "getoutfits", id, sex); + var result = await tcs.Task; + return ((object[]) result).Select(Convert.ToUInt64).ToArray(); + } + + private static Task MakeReq(IPlayer player, string eventName, params object[] args) + { + var tcs = new TaskCompletionSource(); + var id = _idGen.GetNextId(); + _tasks.Add(id, tcs); + Alt.Emit("clothes.req", player, eventName, id, args); + return tcs.Task; + } +} \ No newline at end of file diff --git a/freeroam-extended/server/freeroam-extended/Commands.cs b/freeroam-extended/server/freeroam-extended/Commands.cs index cd28533..bf828a2 100644 --- a/freeroam-extended/server/freeroam-extended/Commands.cs +++ b/freeroam-extended/server/freeroam-extended/Commands.cs @@ -1,9 +1,11 @@ using System.Numerics; using System.Text.Json; using AltV.Net; +using AltV.Net.Async; using AltV.Net.Data; using AltV.Net.Enums; using AltV.Net.Resources.Chat.Api; +using Freeroam_Extended.Clothes; using Freeroam_Extended.Factories; namespace Freeroam_Extended @@ -49,14 +51,14 @@ public void SpawnVeh(IAltPlayer player, string vehicleName) { var target = player.Vehicles.OrderBy(veh => veh.SpawnTime).First(); player.Vehicles.Remove(target); - target.Remove(); + target.Destroy(); player.SendChatMessage("{FF0000} You can't have more than 3 vehicles. We removed your oldest one!"); } if (player.IsInVehicle) { player.SendChatMessage("{FF0000} You are already in a vehicle we replaced it for you!"); - player.Vehicle.Remove(); + player.Vehicle.Destroy(); return; } @@ -103,12 +105,37 @@ public void GetWeapons(IAltPlayer player) } } - // [Command("model")] - // public void ChangeModel(IAltPlayer player, string modelName) - // { - // player.Model = Alt.Hash(modelName); - // - // } + [Command("model")] + public void ChangeModel(IAltPlayer player) + { + if (player.Model == Alt.Hash("mp_m_freemode_01")) + { + player.Model = Alt.Hash("mp_f_freemode_01"); + } + else + { + player.Model = Alt.Hash("mp_m_freemode_01"); + } + + player.RefreshFace(); + + player.RefreshClothes(); + player.SendChatMessage( + $"{{00FF00}}Your model changed"); + } + + [Command("outfit")] + public void Outfit(IAltPlayer player, string outfitUniqueName = "") + { + if (string.IsNullOrEmpty(outfitUniqueName)) + { + player.RefreshClothes(); + return; + } + player.EquipOutfit(Alt.Hash(outfitUniqueName)); + player.SendChatMessage( + $"{{00FF00}}Your outfit updated"); + } [Command("tp")] public void Teleport(IAltPlayer player, int id = 0) @@ -139,7 +166,7 @@ public void Ban(IAltPlayer player, int id) return; } - var target = Alt.GetAllPlayers().FirstOrDefault(p => p.Id == id); + var target = (IAltPlayer)Alt.GetAllPlayers().FirstOrDefault(p => p.Id == id); if (target == null) { player.SendChatMessage($"{{FF0000}}Player with id {id} not found!"); @@ -147,7 +174,7 @@ public void Ban(IAltPlayer player, int id) } target.Kick("You've been banned from this server!"); - Misc.BannedPlayers.Add(new Tuple(target.HardwareIdHash, target.HardwareIdExHash)); + Misc.BannedPlayers.Add(target.CloudID); string json = JsonSerializer.Serialize(Misc.BannedPlayers); File.WriteAllText(@"BannedPlayers.json", json); @@ -155,7 +182,7 @@ public void Ban(IAltPlayer player, int id) } [Command("unban")] - public void Unban(IAltPlayer player, ulong hwid) + public void Unban(IAltPlayer player, string rsid) { if (!player.IsAdmin) { @@ -163,22 +190,22 @@ public void Unban(IAltPlayer player, ulong hwid) return; } - var target = Misc.BannedPlayers.FirstOrDefault(tuple => tuple.Item1 == hwid); + var target = Misc.BannedPlayers.FirstOrDefault(id => id == rsid); if (target == null) { - player.SendChatMessage($"{{FF0000}}Player with hwid {hwid} not found!"); + player.SendChatMessage($"{{FF0000}}Player with rsid {rsid} not found!"); return; } - if (Misc.BannedPlayers.All(tuple => tuple.Item1 != hwid)) + if (Misc.BannedPlayers.All(id => id != rsid)) { - player.SendChatMessage($"{{FF0000}}Player with hwid {hwid} not banned!"); + player.SendChatMessage($"{{FF0000}}Player with hwid {rsid} not banned!"); return; } // remove banned player from list - Misc.BannedPlayers.Remove(new Tuple(player.HardwareIdHash, player.HardwareIdExHash)); - player.SendChatMessage($"{{00FF00}}Player with hwid {hwid} unbanned!"); + Misc.BannedPlayers.Remove(rsid); + player.SendChatMessage($"{{00FF00}}Player with hwid {rsid} unbanned!"); } [Command("addcomponent")] @@ -232,7 +259,7 @@ public void Dm(IAltPlayer player) public void ToggleChat(IAltPlayer player, bool state) { // check if player is operator - if (!player.IsAdmin && !Misc.ChatState) + if (!player.IsAdmin) { player.SendChatMessage("{FF0000} No permission!"); return; @@ -266,7 +293,7 @@ public void ClearVehicles(IAltPlayer player) // get all vehicles owned by player foreach (var veh in player.Vehicles) { - veh.Remove(); + veh.Destroy(); } } @@ -340,7 +367,7 @@ public void ClearAllVehicles(IAltPlayer player, int distance = 0) { foreach (var veh in Alt.GetAllVehicles()) { - veh.Remove(); + veh.Destroy(); } return; @@ -350,7 +377,7 @@ public void ClearAllVehicles(IAltPlayer player, int distance = 0) foreach (var veh in Alt.GetAllVehicles()) { // compare squared distance between player and vehicle - if (Vector3.DistanceSquared(veh.Position, player.Position) <= distSqr) veh.Remove(); + if (Vector3.DistanceSquared(veh.Position, player.Position) <= distSqr) veh.Destroy(); } } @@ -561,5 +588,28 @@ public void Esp(IAltPlayer player, bool mode) player.Emit("esp", mode); } + + [Command("globalvoice")] + public void GlobalVoice(IAltPlayer player) + { + if (!player.IsAdmin) + { + player.SendChatMessage("{FF0000} No permission!"); + return; + } + + if (Voice.IsGlobalVoiceEnabled(player)) + { + Voice.EnableGlobalVoice(player); + player.SendChatMessage("{00FF00} Global voice enabled!"); + return; + } + else + { + Voice.DisableGlobalVoice(player); + player.SendChatMessage("{00FFFF} Global voice disabled!"); + return; + } + } } } \ No newline at end of file diff --git a/freeroam-extended/server/freeroam-extended/EventHandler.cs b/freeroam-extended/server/freeroam-extended/EventHandler.cs index d64eee8..160790b 100644 --- a/freeroam-extended/server/freeroam-extended/EventHandler.cs +++ b/freeroam-extended/server/freeroam-extended/EventHandler.cs @@ -6,6 +6,7 @@ using AltV.Net.Elements.Entities; using AltV.Net.Enums; using AltV.Net.Resources.Chat.Api; +using Freeroam_Extended.Clothes; using Freeroam_Extended.Factories; using ExplosionType = AltV.Net.Data.ExplosionType; @@ -23,7 +24,7 @@ public EventHandler() #if RELEASE Alt.Log($"{altPlayer.Name} banned for illegal event: {name}"); player.Kick("You are not allowed to use this Event."); - Misc.BannedPlayers.Add(new Tuple(altPlayer.HardwareIdHash, altPlayer.HardwareIdExHash)); + Misc.BannedPlayers.Add(altPlayer.CloudID); #endif } @@ -34,19 +35,29 @@ public EventHandler() private readonly Random _random = new(); - [ScriptEvent(ScriptEventType.PlayerConnect)] + [AsyncScriptEvent(ScriptEventType.PlayerConnect)] public async Task OnPlayerConnect(IAltPlayer player, string reason) { - if (Misc.BannedPlayers.Contains(new Tuple(player.HardwareIdHash, - player.HardwareIdExHash))) + string cloudId = await player.RequestCloudId(); + if (cloudId == "invalid") + { + player.Kick("Authorization error"); + AltAsync.Log( + $"HWID: {player.HardwareIdHash}, RS ID: {cloudId}. Tried to join the server with invalid RS ID."); + return; + } + + player.CloudID = cloudId; + + if (Misc.BannedPlayers.Contains(player.CloudID)) { player.Kick("You're banned from this server!"); AltAsync.Log( - $"HWID: {player.HardwareIdHash}, SC: {player.SocialClubId}. Tried to join the server with a ban."); + $"RS ID: {player.CloudID}. Tried to join the server with a ban."); return; } - if (Misc.Operators.Contains(new Tuple(player.HardwareIdHash, player.HardwareIdExHash))) + if (Misc.Operators.Contains(cloudId)) player.IsAdmin = true; // select random entry from SpawnPoints @@ -55,24 +66,40 @@ public async Task OnPlayerConnect(IAltPlayer player, string reason) : Misc.SpawnPositions.ElementAt(_random.Next(0, Misc.SpawnPositions.Length)); player.Spawn((Position)randomSpawnPoint + new Position(_random.Next(0, 10), _random.Next(0, 10), 0)); player.Model = (uint)PedModel.FreemodeMale01; - player.SetDateTime(1, 1, 1, Misc.Hour, 1, 1); + player.SetDateTime(DateTime.UtcNow); player.SetWeather(Misc.Weather); player.Emit("draw_dmzone", Misc.DMPos.X, Misc.DMPos.Y, Misc.DMRadius, 150); if (player.IsAdmin) + { player.Emit("set_chat_state", true); + } + else + { + player.Emit("set_chat_state", Misc.ChatState); + } lock (StatsHandler.StatsData) { StatsHandler.StatsData.PlayerConnections++; - if (!Misc.UniquePlayers.Contains(new Tuple(player.HardwareIdHash, player.SocialClubId))) + if (!Misc.UniquePlayers.Contains(player.CloudID)) { StatsHandler.StatsData.UniquePlayers++; - Misc.UniquePlayers.Add(new Tuple(player.HardwareIdHash, player.SocialClubId)); + Misc.UniquePlayers.Add(player.CloudID); File.WriteAllText(@"UniquePlayers.json", JsonSerializer.Serialize(Misc.UniquePlayers)); } } + + Voice.AddPlayer(player); + + if (Misc.IsResourceLoaded("c_clothesfit")) + { + await ClothesFitService.InitPlayer(player); + } + + player.RefreshFace(); + await player.RefreshClothes(); } [ScriptEvent(ScriptEventType.VehicleDestroy)] @@ -84,21 +111,28 @@ public void OnVehicleDestroy(IAltVehicle target) } target.Owner.SendChatMessage("Your Vehicle got destroyed. We removed it for you!"); - target.Remove(); + target.Destroy(); } [ScriptEvent(ScriptEventType.PlayerDisconnect)] public void OnPlayerDisconnect(IAltPlayer player, string reason) { + Voice.RemovePlayer(player); + var vehicles = player.Vehicles; foreach (var veh in vehicles) { - veh.Remove(); + veh.Destroy(); + } + + if (Misc.IsResourceLoaded("c_clothesfit")) + { + ClothesFitService.DestroyPlayer(player); } } - [ScriptEvent(ScriptEventType.PlayerDead)] + [AsyncScriptEvent(ScriptEventType.PlayerDead)] public async Task OnPlayerDead(IAltPlayer player, IEntity killer, uint weapon) { if (killer is not IAltPlayer killerPlayer) return; @@ -115,13 +149,13 @@ public async Task OnPlayerDead(IAltPlayer player, IEntity killer, uint weapon) if (!Misc.BlacklistedWeapons.Contains(weapon)) return; Alt.Core.LogColored( $"~r~ Banned Player: {killerPlayer.Name} ({killerPlayer.Id}) for using illegal weapon!"); - Misc.BannedPlayers.Add(new Tuple(killerPlayer.HardwareIdHash, killerPlayer.HardwareIdExHash)); + Misc.BannedPlayers.Add(killerPlayer.CloudID); string json = JsonSerializer.Serialize(Misc.BannedPlayers); await File.WriteAllTextAsync(@"BannedPlayers.json", json); killerPlayer.Kick("You're banned from this server!"); } - [ScriptEvent(ScriptEventType.ConsoleCommand)] + [AsyncScriptEvent(ScriptEventType.ConsoleCommand)] public async Task OnConsoleCommand(string name, string[] args) { var playerPool = Alt.GetAllPlayers(); @@ -138,16 +172,13 @@ public async Task OnConsoleCommand(string name, string[] args) if (playerOp is not IAltPlayer playerOpAlt) return; - if (Misc.Operators.Any(tuple => - tuple.Item1 == playerOpAlt.HardwareIdHash && - tuple.Item2 == playerOpAlt.HardwareIdExHash)) + if (Misc.Operators.Any(id => id == playerOpAlt.CloudID)) { Alt.Log($"Id {args[0]} already is an operator!"); break; } - Misc.Operators.Add(new Tuple(playerOpAlt.HardwareIdHash, - playerOpAlt.HardwareIdExHash)); + Misc.Operators.Add(playerOpAlt.CloudID); string json = JsonSerializer.Serialize(Misc.Operators); await File.WriteAllTextAsync(@"Operators.json", json); @@ -166,23 +197,21 @@ public async Task OnConsoleCommand(string name, string[] args) var playerDeOp = playerPool.FirstOrDefault(x => x.Id == int.Parse(args[0])); if (playerDeOp is not IAltPlayer playerDeOpAlt) return; - if (!Misc.Operators.Any(tuple => - tuple.Item1 == playerDeOpAlt.HardwareIdHash && - tuple.Item2 == playerDeOpAlt.HardwareIdExHash)) + if (!Misc.Operators.Any(id => + id == playerDeOpAlt.CloudID)) { AltAsync.Log($"Id {args[0]} is not an operator!"); break; } - Misc.Operators.Remove(new Tuple(playerDeOpAlt.HardwareIdHash, - playerDeOpAlt.HardwareIdExHash)); + Misc.Operators.Remove(playerDeOpAlt.CloudID); await playerDeOpAlt.EmitAsync("set_chat_state", Misc.ChatState); playerDeOpAlt.IsAdmin = false; break; } } - [ScriptEvent(ScriptEventType.WeaponDamage)] + [AsyncScriptEvent(ScriptEventType.WeaponDamage)] public async Task OnWeaponDamage(IAltPlayer player, IEntity target, uint weapon, ushort damage, Position shotOffset, BodyPart bodyPart) { @@ -191,8 +220,7 @@ public async Task OnWeaponDamage(IAltPlayer player, IEntity target, uint weapon, Alt.Core.LogColored( $"~r~ Banned Player: {damagePlayer.Name} ({damagePlayer.Id}) for using illegal weapon!"); //Misc.BannedPlayers.Add((damagePlayer.HardwareIdHash, damagePlayer.HardwareIdExHash)); - Misc.BannedPlayers.Add(new Tuple(damagePlayer.HardwareIdHash, - damagePlayer.HardwareIdExHash)); + Misc.BannedPlayers.Add(damagePlayer.CloudID); string json = JsonSerializer.Serialize(Misc.BannedPlayers); await File.WriteAllTextAsync(@"BannedPlayers.json", json); diff --git a/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj b/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj index 3a65684..0c68f16 100644 --- a/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj +++ b/freeroam-extended/server/freeroam-extended/Freeroam-Extended.csproj @@ -9,13 +9,8 @@ - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - + +