@scaffoldly/rowdy-vfs 0.1.0-beta.20261005095325.230d57b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +105 -0
- package/README.md +70 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +191 -0
- package/lib/linux-arm64/vfspreload.so +0 -0
- package/lib/linux-x64/vfspreload.so +0 -0
- package/native/vfspreload.c +457 -0
- package/package.json +88 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Functional Source License, Version 1.1, Apache 2.0 Future License
|
|
2
|
+
|
|
3
|
+
## Abbreviation
|
|
4
|
+
|
|
5
|
+
FSL-1.1-Apache-2.0
|
|
6
|
+
|
|
7
|
+
## Notice
|
|
8
|
+
|
|
9
|
+
Copyright 2025 Scaffoldly LLC
|
|
10
|
+
|
|
11
|
+
## Terms and Conditions
|
|
12
|
+
|
|
13
|
+
### Licensor ("We")
|
|
14
|
+
|
|
15
|
+
The party offering the Software under these Terms and Conditions.
|
|
16
|
+
|
|
17
|
+
### The Software
|
|
18
|
+
|
|
19
|
+
The "Software" is each version of the software that we make available under
|
|
20
|
+
these Terms and Conditions, as indicated by our inclusion of these Terms and
|
|
21
|
+
Conditions with the Software.
|
|
22
|
+
|
|
23
|
+
### License Grant
|
|
24
|
+
|
|
25
|
+
Subject to your compliance with this License Grant and the Patents,
|
|
26
|
+
Redistribution and Trademark clauses below, we hereby grant you the right to
|
|
27
|
+
use, copy, modify, create derivative works, publicly perform, publicly display
|
|
28
|
+
and redistribute the Software for any Permitted Purpose identified below.
|
|
29
|
+
|
|
30
|
+
### Permitted Purpose
|
|
31
|
+
|
|
32
|
+
A Permitted Purpose is any purpose other than a Competing Use. A Competing Use
|
|
33
|
+
means making the Software available to others in a commercial product or
|
|
34
|
+
service that:
|
|
35
|
+
|
|
36
|
+
1. substitutes for the Software;
|
|
37
|
+
|
|
38
|
+
2. substitutes for any other product or service we offer using the Software
|
|
39
|
+
that exists as of the date we make the Software available; or
|
|
40
|
+
|
|
41
|
+
3. offers the same or substantially similar functionality as the Software.
|
|
42
|
+
|
|
43
|
+
Permitted Purposes specifically include using the Software:
|
|
44
|
+
|
|
45
|
+
1. for your internal use and access;
|
|
46
|
+
|
|
47
|
+
2. for non-commercial education;
|
|
48
|
+
|
|
49
|
+
3. for non-commercial research; and
|
|
50
|
+
|
|
51
|
+
4. in connection with professional services that you provide to a licensee
|
|
52
|
+
using the Software in accordance with these Terms and Conditions.
|
|
53
|
+
|
|
54
|
+
### Patents
|
|
55
|
+
|
|
56
|
+
To the extent your use for a Permitted Purpose would necessarily infringe our
|
|
57
|
+
patents, the license grant above includes a license under our patents. If you
|
|
58
|
+
make a claim against any party that the Software infringes or contributes to
|
|
59
|
+
the infringement of any patent, then your patent license to the Software ends
|
|
60
|
+
immediately.
|
|
61
|
+
|
|
62
|
+
### Redistribution
|
|
63
|
+
|
|
64
|
+
The Terms and Conditions apply to all copies, modifications and derivatives of
|
|
65
|
+
the Software.
|
|
66
|
+
|
|
67
|
+
If you redistribute any copies, modifications or derivatives of the Software,
|
|
68
|
+
you must include a copy of or a link to these Terms and Conditions and not
|
|
69
|
+
remove any copyright notices provided in or with the Software.
|
|
70
|
+
|
|
71
|
+
### Disclaimer
|
|
72
|
+
|
|
73
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR
|
|
74
|
+
IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR
|
|
75
|
+
PURPOSE, MERCHANTABILITY, TITLE OR NON-INFRINGEMENT.
|
|
76
|
+
|
|
77
|
+
IN NO EVENT WILL WE HAVE ANY LIABILITY TO YOU ARISING OUT OF OR RELATED TO THE
|
|
78
|
+
SOFTWARE, INCLUDING INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
|
|
79
|
+
EVEN IF WE HAVE BEEN INFORMED OF THEIR POSSIBILITY IN ADVANCE.
|
|
80
|
+
|
|
81
|
+
### Trademarks
|
|
82
|
+
|
|
83
|
+
Except for displaying the License Details and identifying us as the origin of
|
|
84
|
+
the Software, you have no right under these Terms and Conditions to use our
|
|
85
|
+
trademarks, trade names, service marks or product names.
|
|
86
|
+
|
|
87
|
+
## Grant of Future License
|
|
88
|
+
|
|
89
|
+
We hereby irrevocably grant you an additional license to use the Software under
|
|
90
|
+
the Apache License, Version 2.0 that is effective on the second anniversary of
|
|
91
|
+
the date we make the Software available. On or after that date, you may use the
|
|
92
|
+
Software under the Apache License, Version 2.0, in which case the following
|
|
93
|
+
will apply:
|
|
94
|
+
|
|
95
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
96
|
+
this file except in compliance with the License.
|
|
97
|
+
|
|
98
|
+
You may obtain a copy of the License at
|
|
99
|
+
|
|
100
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
101
|
+
|
|
102
|
+
Unless required by applicable law or agreed to in writing, software distributed
|
|
103
|
+
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
104
|
+
CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
105
|
+
specific language governing permissions and limitations under the License.
|
package/README.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Rowdy VFS
|
|
2
|
+
|
|
3
|
+
A userspace virtual filesystem for containers that [rowdy](https://github.com/scaffoldly/rowdy)
|
|
4
|
+
fronts. The app sees a writable, persistent tree at `/vfs` backed by a real directory, with no
|
|
5
|
+
kernel involvement: an `LD_PRELOAD` shim rewrites the libc path calls the app makes.
|
|
6
|
+
|
|
7
|
+
## Why userspace
|
|
8
|
+
|
|
9
|
+
The Lambda sandbox denies every kernel-mediated option. `/dev/fuse` is absent, and `mount(2)`,
|
|
10
|
+
`unshare`, `ptrace` and `seccomp(NEW_LISTENER)` all return `EPERM`. libc interposition is the one
|
|
11
|
+
path that survives, and rowdy, as the entrypoint supervisor, is the single place to inject it
|
|
12
|
+
into the whole child tree.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
import { applyVfs } from '@scaffoldly/rowdy-vfs';
|
|
18
|
+
|
|
19
|
+
const env = { ...process.env };
|
|
20
|
+
const vfs = applyVfs(env); // undefined unless env.ROWDY_VFS is set
|
|
21
|
+
// env.LD_PRELOAD = '/tmp/rowdy/vfspreload.so' (prepended, never duplicated)
|
|
22
|
+
// env.VFS_PREFIX = '/vfs' (kept if already set)
|
|
23
|
+
// env.VFS_BACKING = '/tmp/vfsstore' (kept if already set)
|
|
24
|
+
spawn(cmd, args, { env });
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`applyVfs` writes the shim for the running architecture to `/tmp/rowdy/vfspreload.so` (the path
|
|
28
|
+
is the second argument) and returns `{ preload, prefix, backing }`. The shims for `linux-x64` and
|
|
29
|
+
`linux-arm64` ship twice: as files under `lib/linux-<arch>/vfspreload.so` (`shimFile()` returns
|
|
30
|
+
the path, for a Dockerfile `COPY`) and inlined into `dist/index.js`, so there is no native build
|
|
31
|
+
at install time and a `pkg`-built binary carries them in its snapshot.
|
|
32
|
+
|
|
33
|
+
## What the shim covers
|
|
34
|
+
|
|
35
|
+
The public libc path surface: `open`/`openat`/`creat`, `fopen`/`freopen`, `stat`/`lstat`/
|
|
36
|
+
`fstatat`/`statx`, `access`/`faccessat`, `statfs`/`statvfs`, `chmod`/`fchmodat`, `chown`/
|
|
37
|
+
`lchown`/`fchownat`, `truncate`, `utimensat`/`utimes`/`utime`, `opendir`/`scandir`, `mkdir`/
|
|
38
|
+
`mkdirat`, `rmdir`, `unlink`/`unlinkat`, `remove`, `mkfifo`/`mknod`, `rename`/`renameat`,
|
|
39
|
+
`link`/`linkat`, `symlink`/`symlinkat`, `mkstemp`/`mkdtemp`, `chdir`, `execve`/`execv`/`execvp`.
|
|
40
|
+
|
|
41
|
+
`getcwd`, `realpath` and `readlink` are translated in reverse so the backing directory never
|
|
42
|
+
leaks into the app's view. `syscall(2)` is interposed for the single-path syscalls, since libuv
|
|
43
|
+
(node) stats through `syscall(SYS_statx)` rather than the wrapper.
|
|
44
|
+
|
|
45
|
+
Each entry point is hooked on its own: musl binds libc-internal cross-calls (`fopen` → `open`,
|
|
46
|
+
`scandir` → `opendir`) internally, so one wrapper never covers another.
|
|
47
|
+
|
|
48
|
+
## Limits
|
|
49
|
+
|
|
50
|
+
- Only dynamically linked musl (alpine) binaries that go through libc see the VFS. Static
|
|
51
|
+
binaries and Go programs that issue raw syscalls do not.
|
|
52
|
+
- `mmap` of a `/vfs` file is not translated; neither are `nftw`, `glob` or `posix_spawn` paths.
|
|
53
|
+
- It is not a mountpoint. A process started outside the preload cannot see it.
|
|
54
|
+
- Preloading the musl shim into a glibc child fails to load (ld.so warning), and the app runs
|
|
55
|
+
without the VFS.
|
|
56
|
+
|
|
57
|
+
## Development
|
|
58
|
+
|
|
59
|
+
```sh
|
|
60
|
+
yarn build:native # compiles native/vfspreload.c for x64 and arm64 in alpine (docker)
|
|
61
|
+
yarn test:native # drives the shim through busybox, node and a C caller under LD_PRELOAD
|
|
62
|
+
yarn build # bundles src/ with lib/linux-*/vfspreload.so inlined
|
|
63
|
+
yarn test
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
CI builds and tests the shim on native x64 and arm64 runners, then publishes a `beta` pre-release
|
|
67
|
+
to npm on every push to the `vfs` branch.
|
|
68
|
+
|
|
69
|
+
Pluggable backings (`s3://bucket:/path`) are tracked in
|
|
70
|
+
[scaffoldly/rowdy#27](https://github.com/scaffoldly/rowdy/issues/27).
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare const VERSION: string;
|
|
2
|
+
declare const NAME: string;
|
|
3
|
+
declare const id: () => string;
|
|
4
|
+
declare const VFS_PRELOAD = "/tmp/rowdy/vfspreload.so";
|
|
5
|
+
declare const VFS_PREFIX = "/vfs";
|
|
6
|
+
declare const VFS_BACKING = "/tmp/vfsstore";
|
|
7
|
+
type VfsEnv = Record<'ROWDY_VFS' | 'LD_PRELOAD' | 'VFS_PREFIX' | 'VFS_BACKING', string | undefined>;
|
|
8
|
+
type VfsConfig = {
|
|
9
|
+
preload: string;
|
|
10
|
+
prefix: string;
|
|
11
|
+
backing: string;
|
|
12
|
+
};
|
|
13
|
+
declare const shim: (arch?: string) => Buffer | undefined;
|
|
14
|
+
declare const shimFile: (arch?: string) => string | undefined;
|
|
15
|
+
declare const materialize: (path?: string, arch?: string) => string;
|
|
16
|
+
declare const applyVfs: (env: VfsEnv, preloadPath?: string) => VfsConfig | undefined;
|
|
17
|
+
|
|
18
|
+
export { NAME, VERSION, VFS_BACKING, VFS_PREFIX, VFS_PRELOAD, type VfsConfig, type VfsEnv, applyVfs, id, materialize, shim, shimFile };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
NAME: () => NAME,
|
|
24
|
+
VERSION: () => VERSION,
|
|
25
|
+
VFS_BACKING: () => VFS_BACKING,
|
|
26
|
+
VFS_PREFIX: () => VFS_PREFIX,
|
|
27
|
+
VFS_PRELOAD: () => VFS_PRELOAD,
|
|
28
|
+
applyVfs: () => applyVfs,
|
|
29
|
+
id: () => id,
|
|
30
|
+
materialize: () => materialize,
|
|
31
|
+
shim: () => shim,
|
|
32
|
+
shimFile: () => shimFile
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(index_exports);
|
|
35
|
+
var import_fs = require("fs");
|
|
36
|
+
var import_path = require("path");
|
|
37
|
+
|
|
38
|
+
// package.json
|
|
39
|
+
var package_default = {
|
|
40
|
+
name: "@scaffoldly/rowdy-vfs",
|
|
41
|
+
description: "Userspace VFS (LD_PRELOAD shim) for Rowdy",
|
|
42
|
+
version: "0.1.0",
|
|
43
|
+
main: "dist/index.js",
|
|
44
|
+
types: "dist/index.d.ts",
|
|
45
|
+
files: [
|
|
46
|
+
"dist/**/*.js",
|
|
47
|
+
"dist/**/*.d.ts",
|
|
48
|
+
"dist/**/*.js.map",
|
|
49
|
+
"lib/**/*.so",
|
|
50
|
+
"native/vfspreload.c"
|
|
51
|
+
],
|
|
52
|
+
repository: {
|
|
53
|
+
type: "git",
|
|
54
|
+
url: "git+https://github.com/scaffoldly/rowdy.git"
|
|
55
|
+
},
|
|
56
|
+
bugs: {
|
|
57
|
+
url: "https://github.com/scaffoldly/rowdy/issues"
|
|
58
|
+
},
|
|
59
|
+
author: "Scaffoldly <github.com/scaffoldly>",
|
|
60
|
+
license: "SEE LICENSE IN LICENSE.md",
|
|
61
|
+
private: false,
|
|
62
|
+
engines: {
|
|
63
|
+
node: ">=22",
|
|
64
|
+
yarn: ">=1.22.0",
|
|
65
|
+
npm: ">=10"
|
|
66
|
+
},
|
|
67
|
+
engineStrict: false,
|
|
68
|
+
scripts: {
|
|
69
|
+
build: "yarn build:index",
|
|
70
|
+
"build:native": "sh native/build.sh x64 && sh native/build.sh arm64",
|
|
71
|
+
"build:index": "tsup",
|
|
72
|
+
test: "yarn jest -- --verbose --testTimeout=30000",
|
|
73
|
+
"test:native": "sh native/test.sh",
|
|
74
|
+
jest: "jest",
|
|
75
|
+
lint: "eslint .",
|
|
76
|
+
"lint:fix": "eslint . --fix"
|
|
77
|
+
},
|
|
78
|
+
prettier: {
|
|
79
|
+
semi: true,
|
|
80
|
+
trailingComma: "es5",
|
|
81
|
+
singleQuote: true,
|
|
82
|
+
printWidth: 120,
|
|
83
|
+
tabWidth: 2,
|
|
84
|
+
useTabs: false
|
|
85
|
+
},
|
|
86
|
+
jest: {
|
|
87
|
+
projects: [
|
|
88
|
+
{
|
|
89
|
+
displayName: "unit",
|
|
90
|
+
preset: "ts-jest",
|
|
91
|
+
testEnvironment: "node",
|
|
92
|
+
testMatch: [
|
|
93
|
+
"**/tests/**/*.test.ts"
|
|
94
|
+
],
|
|
95
|
+
transform: {
|
|
96
|
+
"^.+\\.ts$": [
|
|
97
|
+
"ts-jest",
|
|
98
|
+
{
|
|
99
|
+
tsconfig: "tests/tsconfig.json"
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"^.+\\.so$": "<rootDir>/tests/transformers.js"
|
|
103
|
+
},
|
|
104
|
+
moduleNameMapper: {
|
|
105
|
+
"^@scaffoldly/rowdy-vfs$": "<rootDir>/src/index.ts"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
devDependencies: {
|
|
111
|
+
"@eslint/js": "^9.28.0",
|
|
112
|
+
"@types/jest": "^30.0.0",
|
|
113
|
+
"@types/node": ">=22.0.0 <25.0.0",
|
|
114
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
115
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
116
|
+
eslint: "^9.0.0",
|
|
117
|
+
"eslint-config-prettier": "^10.1.5",
|
|
118
|
+
"eslint-plugin-prettier": "^5.4.1",
|
|
119
|
+
globals: "^16.2.0",
|
|
120
|
+
jest: "^30.1.3",
|
|
121
|
+
prettier: "^3.0.0",
|
|
122
|
+
"ts-jest": "^29.1.0",
|
|
123
|
+
tsup: "^8.5.0",
|
|
124
|
+
typescript: "^5.0.0"
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// lib/linux-x64/vfspreload.so
|
|
129
|
+
var vfspreload_default = Uint8Array.fromBase64("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AAAAAIsAAAAAAAAAAQAAABIACAAAEAAAAAAAAAEAAAAAAAAA1QEAABIACgCALQAAAAAAAIsAAAAAAAAAawEAABIACgAQIwAAAAAAAIsAAAAAAAAAAF9pbml0AF9maW5pAF9JVE1fZGVyZWdpc3RlclRNQ2xvbmVUYWJsZQBfSVRNX3JlZ2lzdGVyVE1DbG9uZVRhYmxlAF9fY3hhX2ZpbmFsaXplAF9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvAF9fcmVnaXN0ZXJfZnJhbWVfaW5mbwBnZXRlbnYAc3RybGVuAGRsc3ltAF9fZXJybm9fbG9jYXRpb24Ac3RybmNtcABtZW1jcHkAbWVtbW92ZQBfX3N0YWNrX2Noa19mYWlsAG9wZW5hdABjcmVhdABmb3BlbgBmcmVvcGVuAGxzdGF0AGZzdGF0YXQAYWNjZXNzAGZhY2Nlc3NhdABzdGF0eABzdGF0ZnMAc3RhdHZmcwBjaG1vZABmY2htb2RhdABsY2hvd24AZmNob3duYXQAdHJ1bmNhdGUAdXRpbWVuc2F0AHV0aW1lcwB1dGltZQBvcGVuZGlyAHNjYW5kaXIAbWtkaXIAbWtkaXJhdABybWRpcgB1bmxpbmsAdW5saW5rYXQAcmVtb3ZlAG1rZmlmbwBta25vZAByZW5hbWUAcmVuYW1lYXQAc3ltbGluawBzeW1saW5rYXQAbWtzdGVtcABta2R0ZW1wAGNoZGlyAGdldGN3ZABzdHJkdXAAcmVhbHBhdGgAcmVhZGxpbmsAcmVhZGxpbmthdABzeXNjYWxsAGV4ZWN2ZQBleGVjdgBleGVjdnAAbGliYy5tdXNsLXg4Nl82NC5zby4xALBdAAAAAAAACAAAAAAAAABgEgAAAAAAALhdAAAAAAAACAAAAAAAAACwEAAAAAAAAMBdAAAAAAAACAAAAAAAAAAAEgAAAAAAAABgAAAAAAAACAAAAAAAAAAAYAAAAAAAANhfAAAAAAAABgAAAAQAAAAAAAAAAAAAAOBfAAAAAAAABgAAAAYAAAAAAAAAAAAAAOhfAAAAAAAABgAAAAcAAAAAAAAAAAAAAPBfAAAAAAAABgAAAAkAAAAAAAAAAAAAAPhfAAAAAAAABgAAAA4AAAAAAAAAAAAAAJBfAAAAAAAABwAAAAEAAAAAAAAAAAAAAJhfAAAAAAAA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SImcJBgQAACJ83Q4SInXSI10JBDo2+v//4neSInH/xUwOgAASIuUJBgQAABkSCsUJSgAAAB1M0iBxCAQAABbww8fQABIiXwkCEiNNfcZAABIx8f/////6Gjp//9Ii1QkCEiJBew5AADroug16f//Dx9EAABVSIn5U4nzSIHsKBAAAEiDPcI5AAAAZEiLLCUoAAAASImsJBgQAABIidV0PEiNdCQQSInP6Efr//9IieqJ3kiJx/8VkTkAAEiLlCQYEAAAZEgrFCUoAAAAdTRIgcQoEAAAW13DDx9AAEiJfCQISI01ZhkAAEjHx//////o0Oj//0iLTCQISIkFTDkAAOue6J3o//9mkGZmLg8fhAAAAAAAVVNIiftIgewYIAAASIM9HDkAAABkSIssJSgAAABIiawkCCAAAEiJ9XROSInfSInm6Kvq//9IjbQkABAAAEiJ70iJw+iY6v//SInfSInG/xXcOAAASIuUJAggAABkSCsUJSgAAAB1LUiBxBggAABbXcMPH4AAAAAASI01wRgAAEjHx//////oJej//0iJBZ44AADrluj35///Dx+AAAAAAEFVQVRBidRVSIn1U4n7SIHsGCAAAEiDPWs4AAAAZEyLLCUoAAAATImsJAggAABJic10VUiJ70iJ5ugC6v//SI20JAAQAABMie9IicXo7+n//0SJ4kiJ7onfSInB/xUmOAAASIuUJAggAABkSCsUJSgAAAB1L0iBxBggAABbXUFcQV3DDx9EAABIjTUYGAAASMfH/////+h15///SIkF5jcAAOuP6Efn//8PH4AAAAAAVVNIiftIgewYIAAASIM9vDcAAABkSIssJSgAAABIiawkCCAAAEiJ9XROSInfSInm6Fvp//9IjbQkABAAAEiJ70iJw+hI6f//SInfSInG/xV8NwAASIuUJAggAABkSCsUJSgAAAB1LUiBxBggAABbXcMPH4AAAAAASI01vRcAAEjHx//////o1eb//0iJBT43AADrluin5v//Dx+AAAAAAEFVQVRBidRVSIn1U4n7SIHsKCAAAEiDPQs3AAAAZEyLLCUoAAAATImsJBggAABJic10XUiJ70iNdCQQRIlEJAzoq+j//0iNtCQQEAAATInvSInF6Jjo//9EieJEi0QkDEiJ7kiJwYnf/xW6NgAASIuUJBggAABkSCsUJSgAAAB1OEiBxCggAABbXUFcQV3DkEiNNQ4XAABIx8f/////RIlEJAzoGOb//0SLRCQMSIkFdDYAAOl6////6OLl//9mkFVTSIn7SIHsGCAAAEiDPUw2AAAAZEiLLCUoAAAASImsJAggAABIifV0TkiJ30iJ5uj75///SI20JAAQAABIie9IicPo6Of//0iJ30iJxv8VDDYAAEiLlCQIIAAAZEgrFCUoAAAAdS1IgcQYIAAAW13DDx+AAAAAAEiNNSEWAABIx8f/////6HXl//9IiQXONQAA65boR+X//w8fgAAAAABBVFWJ9VNIiftIgewQIAAASIM9oDUAAABkTIskJSgAAABMiaQkCCAAAEmJ1HRSSInfSInm6Ffn//9IjbQkABAAAEyJ50iJw+hE5///ie5Iid9IicL/FV41AABIi5QkCCAAAGRIKxQlKAAAAHUvSIHEECAAAFtdQVzDDx+AAAAAAEiNNYEVAABIx8f/////6M3k//9IiQUeNQAA65Lon+T//w8fQABmZi4PH4QAAAAAAEFWVVNIgewgEAAASIM97TQAAABkSIscJSgAAABIiZwkGBAAAEiJ+w+EkwAAAEiNbCQQSInfSInu6KPm//9IixW8NAAASDnDdGdIie//0onChcB5JEiLhCQYEAAAZEgrBCUoAAAAdXhIgcQgEAAAidBbXUFeww8fAEiJ74lEJAzoXOT//0iJ30mJxuhR5P//So1MNfqLVCQMizEPt0kEiXQD+maJTAP+66sPH4AAAAAASInf/9KJwuubDx+AAAAAAEiNNZsUAABIx8f/////6N3j//9IiQUmNAAA6U7////orOP//5BmZi4PH4QAAAAAAEFWVVNIgewQEAAASIM99TMAAABkSIscJSgAAABIiZwkCBAAAEiJ+3R3SInmSInf6Lzl//9IixXNMwAASDnDdFhIief/0kiFwHQqSInn6J7j//9Iid9Jicbok+P//0qNVDT6iwoPt1IEiUwD+maJVAP+SInYSIuUJAgQAABkSCsUJSgAAAB1OEiBxBAQAABbXUFeww8fRAAASInf/9Lr1ZBIjTXTEwAASMfH/////+gN4///SIkFTjMAAOlq////6Nzi//+QZmYuDx+EAAAAAABIgewoEAAASIM9ITMAAABkSIsUJSgAAABIiZQkGBAAAEiJ+nQ7SInXSI10JBDo7uT//0iJ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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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BAAAAAAAAAAAAAAAAAAAAIcAAAABAAAAAgAAAAAAAAAwQwAAAAAAADBDAAAAAAAANAkAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAACRAAAADgAAAAMAAAAAAAAAsF0AAAAAAACwTQAAAAAAABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAnQAAAA8AAAADAAAAAAAAAMBdAAAAAAAAwE0AAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAKkAAAAGAAAAAwAAAAAAAADIXQAAAAAAAMhNAAAAAAAAsAEAAAAAAAAFAAAAAAAAAAgAAAAAAAAAEAAAAAAAAACyAAAAAQAAAAMAAAAAAAAAeF8AAAAAAAB4TwAAAAAAAIgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAtwAAAAEAAAADAAAAAAAAAABgAAAAAAAAAFAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAL0AAAAIAAAAAwAAAAAAAAAgYAAAAAAAAAhQAAAAAAAA+AEAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAADCAAAAAQAAADAAAAAAAAAAAAAAAAAAAAAIUAAAAAAAABwAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAJFAAAAAAAADLAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==");
|
|
130
|
+
|
|
131
|
+
// lib/linux-arm64/vfspreload.so
|
|
132
|
+
var vfspreload_default2 = Uint8Array.fromBase64("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b2RhdAAAAAAAAAAAY2hvd24AAABsY2hvd24AAGZjaG93bmF0AAAAAAAAAAB0cnVuY2F0ZQAAAAAAAAAAdXRpbWVuc2F0AAAAAAAAAHV0aW1lcwAAdXRpbWUAAABvcGVuZGlyAHNjYW5kaXIAbWtkaXJhdABybWRpcgAAAHVubGluawAAdW5saW5rYXQAAAAAAAAAAHJlbW92ZQAAbWtmaWZvAABta25vZAAAAHJlbmFtZQAAcmVuYW1lYXQAAAAAAAAAAGxpbmsAAAAAbGlua2F0AABzeW1saW5rAHN5bWxpbmthdAAAAAAAAABta3N0ZW1wAG1rZHRlbXAAY2hkaXIAAABnZXRjd2QAAHJlYWxwYXRoAAAAAAAAAAByZWFkbGluawAAAAAAAAAAcmVhZGxpbmthdAAAAAAAAHN5c2NhbGwAZXhlY3ZlAABleGVjdgAAAGV4ZWN2cAAAARsDO8wBAAA4AAAAYNL//1ACAABg0///5AEAAJDT///4AQAAzNP//wwCAAAs1P//MAIAAGDU//9wAgAAYNX//+gCAAAQ1v//JAMAAAjX//9UAwAAINj//4gDAADQ2P//uAMAAIDZ///oAwAAQNr//xgEAADw2v//SAQAAKDb//94BAAAgNz//6gEAAAw3f//2AQAAADe//8IBQAA5N7//zgFAACg3///aAUAAFDg//+YBQAAAOH//8gFAADM4f//+AUAAIzi//8oBgAATOP//1gGAAAo5P//iAYAAODk//+4BgAAwOX//+gGAABw5v//GAcAACDn//9IBwAAyOf//3QHAACI6P//pAcAAEDp///UBwAABOr//wQIAACs6v//MAgAAGDr//9cCAAAJOz//4wIAADM7P//uAgAAIDt///oCAAAQO7//xgJAAAQ7///TAkAAADw//+ECQAA0PD//7gJAADA8f//8AkAAJDy//8kCgAAaPP//1wKAABw9P//lAoAAGz1///ICgAAIPb///QKAAAk9///KAsAACD4//9cCwAAIPn//5ALAAAw+v//yAsAALD7///8CwAAcPz//ywMAAAg/f//XAwAAAAAAAAQAAAAAAAAAAF6UgAEeB4BGwwfABAAAAAYAAAAdNH//zAAAAAAAAAAEAAAACwAAACQ0f//PAAAAAAAAAAgAAAAQAAAALjR//9gAAAAAEEOIJ0EngNCkwJU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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AgAAAAAAAADwPgAAAAAAAPA+AAAAAAAAwAoAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAB+AAAADgAAAAMAAAAAAAAAiP0BAAAAAACI/QAAAAAAABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAigAAAA8AAAADAAAAAAAAAJj9AQAAAAAAmP0AAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAJYAAAAGAAAAAwAAAAAAAACg/QEAAAAAAKD9AAAAAAAAsAEAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAACfAAAAAQAAAAMAAAAAAAAAUP8BAAAAAABQ/wAAAAAAALAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAApAAAAAEAAAADAAAAAAAAAAAAAgAAAAAAAAABAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAKoAAAAIAAAAAwAAAAAAAAAIAAIAAAAAAAgAAQAAAAAA4AEAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAACvAAAAAQAAADAAAAAAAAAAAAAAAAAAAAAIAAEAAAAAABwAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAJAABAAAAAAC4AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==");
|
|
133
|
+
|
|
134
|
+
// src/index.ts
|
|
135
|
+
var shims = {
|
|
136
|
+
"linux-x64": vfspreload_default,
|
|
137
|
+
"linux-arm64": vfspreload_default2
|
|
138
|
+
};
|
|
139
|
+
var VERSION = package_default.version;
|
|
140
|
+
var NAME = package_default.name;
|
|
141
|
+
var id = () => {
|
|
142
|
+
return `${NAME}@${VERSION}`;
|
|
143
|
+
};
|
|
144
|
+
var VFS_PRELOAD = "/tmp/rowdy/vfspreload.so";
|
|
145
|
+
var VFS_PREFIX = "/vfs";
|
|
146
|
+
var VFS_BACKING = "/tmp/vfsstore";
|
|
147
|
+
var shim = (arch = process.arch) => {
|
|
148
|
+
const data = shims[`linux-${arch}`];
|
|
149
|
+
return data ? Buffer.from(data) : void 0;
|
|
150
|
+
};
|
|
151
|
+
var shimFile = (arch = process.arch) => {
|
|
152
|
+
const path = (0, import_path.join)(__dirname, "..", "lib", `linux-${arch}`, "vfspreload.so");
|
|
153
|
+
return (0, import_fs.existsSync)(path) ? path : void 0;
|
|
154
|
+
};
|
|
155
|
+
var materialize = (path = VFS_PRELOAD, arch = process.arch) => {
|
|
156
|
+
const data = shim(arch);
|
|
157
|
+
if (!data) {
|
|
158
|
+
throw new Error(`${id()}: no vfspreload shim for linux-${arch}`);
|
|
159
|
+
}
|
|
160
|
+
if ((0, import_fs.existsSync)(path) && (0, import_fs.readFileSync)(path).equals(data)) {
|
|
161
|
+
return path;
|
|
162
|
+
}
|
|
163
|
+
(0, import_fs.mkdirSync)((0, import_path.dirname)(path), { recursive: true });
|
|
164
|
+
(0, import_fs.writeFileSync)(path, data, { mode: 493 });
|
|
165
|
+
return path;
|
|
166
|
+
};
|
|
167
|
+
var applyVfs = (env, preloadPath = VFS_PRELOAD) => {
|
|
168
|
+
if (!env.ROWDY_VFS) {
|
|
169
|
+
return void 0;
|
|
170
|
+
}
|
|
171
|
+
const preload = materialize(preloadPath);
|
|
172
|
+
const existing = (env.LD_PRELOAD ?? "").split(":").filter((p) => p && p !== preload);
|
|
173
|
+
env.LD_PRELOAD = [preload, ...existing].join(":");
|
|
174
|
+
env.VFS_PREFIX = env.VFS_PREFIX || VFS_PREFIX;
|
|
175
|
+
env.VFS_BACKING = env.VFS_BACKING || VFS_BACKING;
|
|
176
|
+
return { preload, prefix: env.VFS_PREFIX, backing: env.VFS_BACKING };
|
|
177
|
+
};
|
|
178
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
179
|
+
0 && (module.exports = {
|
|
180
|
+
NAME,
|
|
181
|
+
VERSION,
|
|
182
|
+
VFS_BACKING,
|
|
183
|
+
VFS_PREFIX,
|
|
184
|
+
VFS_PRELOAD,
|
|
185
|
+
applyVfs,
|
|
186
|
+
id,
|
|
187
|
+
materialize,
|
|
188
|
+
shim,
|
|
189
|
+
shimFile
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3BhY2thZ2UuanNvbiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcGFja2FnZUpzb24gZnJvbSAnLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB4NjQgZnJvbSAnLi4vbGliL2xpbnV4LXg2NC92ZnNwcmVsb2FkLnNvJztcbmltcG9ydCBhcm02NCBmcm9tICcuLi9saWIvbGludXgtYXJtNjQvdmZzcHJlbG9hZC5zbyc7XG5cbi8vIFRoZSBzaGltcyBzaGlwIHR3aWNlOiBpbmxpbmVkIGhlcmUgKHNvIGEgcGtnIHNuYXBzaG90IGNhcnJpZXMgdGhlbSBhbmRcbi8vIG1hdGVyaWFsaXplKCkgbmVlZHMgbm90aGluZyBvbiBkaXNrKSBhbmQgYXMgZmlsZXMgdW5kZXIgbGliLyBmb3IgY29uc3VtZXJzXG4vLyB0aGF0IHdhbnQgdG8gQ09QWSBvbmUgaW50byBhbiBpbWFnZS5cbmNvbnN0IHNoaW1zOiBSZWNvcmQ8c3RyaW5nLCBVaW50OEFycmF5IHwgdW5kZWZpbmVkPiA9IHtcbiAgJ2xpbnV4LXg2NCc6IHg2NCxcbiAgJ2xpbnV4LWFybTY0JzogYXJtNjQsXG59O1xuXG5jb25zdCBWRVJTSU9OID0gcGFja2FnZUpzb24udmVyc2lvbjtcbmNvbnN0IE5BTUUgPSBwYWNrYWdlSnNvbi5uYW1lO1xuXG5jb25zdCBpZCA9ICgpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYCR7TkFNRX1AJHtWRVJTSU9OfWA7XG59O1xuXG4vKiogV2hlcmUgdGhlIHNoaW0gaXMgd3JpdHRlbiBmb3IgdGhlIGNoaWxkIHRvIHByZWxvYWQuICovXG5leHBvcnQgY29uc3QgVkZTX1BSRUxPQUQgPSAnL3RtcC9yb3dkeS92ZnNwcmVsb2FkLnNvJztcbmV4cG9ydCBjb25zdCBWRlNfUFJFRklYID0gJy92ZnMnO1xuZXhwb3J0IGNvbnN0IFZGU19CQUNLSU5HID0gJy90bXAvdmZzc3RvcmUnO1xuXG5leHBvcnQgdHlwZSBWZnNFbnYgPSBSZWNvcmQ8J1JPV0RZX1ZGUycgfCAnTERfUFJFTE9BRCcgfCAnVkZTX1BSRUZJWCcgfCAnVkZTX0JBQ0tJTkcnLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG5leHBvcnQgdHlwZSBWZnNDb25maWcgPSB7XG4gIC8qKiBQYXRoIG9mIHRoZSBtYXRlcmlhbGl6ZWQgc2hpbSwgZmlyc3QgZW50cnkgb2YgTERfUFJFTE9BRC4gKi9cbiAgcHJlbG9hZDogc3RyaW5nO1xuICAvKiogVmlydHVhbCBwcmVmaXggdGhlIGFwcCBzZWVzLiAqL1xuICBwcmVmaXg6IHN0cmluZztcbiAgLyoqIFJlYWwgZGlyZWN0b3J5IGJhY2tpbmcgdGhlIHByZWZpeC4gKi9cbiAgYmFja2luZzogc3RyaW5nO1xufTtcblxuLyoqIFRoZSBjb21waWxlZCBzaGltIGZvciBhbiBhcmNoaXRlY3R1cmUgKGBsaW51eC14NjRgLCBgbGludXgtYXJtNjRgKSwgb3IgdW5kZWZpbmVkIGlmIG5vdCBidWlsdCBpbi4gKi9cbmV4cG9ydCBjb25zdCBzaGltID0gKGFyY2g6IHN0cmluZyA9IHByb2Nlc3MuYXJjaCk6IEJ1ZmZlciB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGRhdGEgPSBzaGltc1tgbGludXgtJHthcmNofWBdO1xuICByZXR1cm4gZGF0YSA/IEJ1ZmZlci5mcm9tKGRhdGEpIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBPbi1kaXNrIHBhdGggb2YgdGhlIHNoaW0gc2hpcHBlZCBpbiB0aGlzIHBhY2thZ2UgKGBsaWIvbGludXgtPGFyY2g+L3Zmc3ByZWxvYWQuc29gKSxcbiAqIG9yIHVuZGVmaW5lZCB3aGVuIGl0IGlzIG5vdCBwcmVzZW50IGFzIGEgZmlsZSAoZS5nLiBpbnNpZGUgYSBwa2cgc25hcHNob3QpLlxuICogUHJlZmVyIGBtYXRlcmlhbGl6ZSgpYCBhdCBydW50aW1lOyB0aGlzIGlzIGZvciBidWlsZCBzdGVwcyB0aGF0IGNvcHkgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBzaGltRmlsZSA9IChhcmNoOiBzdHJpbmcgPSBwcm9jZXNzLmFyY2gpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBwYXRoID0gam9pbihfX2Rpcm5hbWUsICcuLicsICdsaWInLCBgbGludXgtJHthcmNofWAsICd2ZnNwcmVsb2FkLnNvJyk7XG4gIHJldHVybiBleGlzdHNTeW5jKHBhdGgpID8gcGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogV3JpdGUgdGhlIHNoaW0gZm9yIHRoZSBydW5uaW5nIGFyY2hpdGVjdHVyZSB0byBgcGF0aGAgc28gYSBjaGlsZCBwcm9jZXNzIGNhblxuICogTERfUFJFTE9BRCBpdC4gSWRlbXBvdGVudDogYW4gZXhpc3RpbmcgZmlsZSB3aXRoIGlkZW50aWNhbCBjb250ZW50cyBpcyBsZWZ0XG4gKiBhbG9uZS4gVGhyb3dzIGlmIG5vIHNoaW0gaXMgYnVpbHQgaW4gZm9yIHRoZSBhcmNoaXRlY3R1cmUuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRlcmlhbGl6ZSA9IChwYXRoOiBzdHJpbmcgPSBWRlNfUFJFTE9BRCwgYXJjaDogc3RyaW5nID0gcHJvY2Vzcy5hcmNoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZGF0YSA9IHNoaW0oYXJjaCk7XG4gIGlmICghZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtpZCgpfTogbm8gdmZzcHJlbG9hZCBzaGltIGZvciBsaW51eC0ke2FyY2h9YCk7XG4gIH1cbiAgaWYgKGV4aXN0c1N5bmMocGF0aCkgJiYgcmVhZEZpbGVTeW5jKHBhdGgpLmVxdWFscyhkYXRhKSkge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG4gIG1rZGlyU3luYyhkaXJuYW1lKHBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhwYXRoLCBkYXRhLCB7IG1vZGU6IDBvNzU1IH0pO1xuICByZXR1cm4gcGF0aDtcbn07XG5cbi8qKlxuICogT3B0LWluIHVzZXJzcGFjZSBWRlMgZm9yIGEgY2hpbGQgcHJvY2VzcyBlbnZpcm9ubWVudC4gV2hlbiBgZW52LlJPV0RZX1ZGU2AgaXNcbiAqIHNldCwgbWF0ZXJpYWxpemUgdGhlIHNoaW0sIHByZXBlbmQgaXQgdG8gYGVudi5MRF9QUkVMT0FEYCAocHJlc2VydmluZyBhbnlcbiAqIGV4aXN0aW5nIHZhbHVlLCBuZXZlciBkdXBsaWNhdGluZykgYW5kIGRlZmF1bHQgYFZGU19QUkVGSVhgL2BWRlNfQkFDS0lOR2AuXG4gKiBNdXRhdGVzIGBlbnZgIGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgY29uZmlnLCBvciB1bmRlZmluZWQgd2hlbiBvZmYuXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseVZmcyA9IChlbnY6IFZmc0VudiwgcHJlbG9hZFBhdGg6IHN0cmluZyA9IFZGU19QUkVMT0FEKTogVmZzQ29uZmlnIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFlbnYuUk9XRFlfVkZTKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwcmVsb2FkID0gbWF0ZXJpYWxpemUocHJlbG9hZFBhdGgpO1xuICBjb25zdCBleGlzdGluZyA9IChlbnYuTERfUFJFTE9BRCA/PyAnJykuc3BsaXQoJzonKS5maWx0ZXIoKHApID0+IHAgJiYgcCAhPT0gcHJlbG9hZCk7XG4gIGVudi5MRF9QUkVMT0FEID0gW3ByZWxvYWQsIC4uLmV4aXN0aW5nXS5qb2luKCc6Jyk7XG4gIGVudi5WRlNfUFJFRklYID0gZW52LlZGU19QUkVGSVggfHwgVkZTX1BSRUZJWDtcbiAgZW52LlZGU19CQUNLSU5HID0gZW52LlZGU19CQUNLSU5HIHx8IFZGU19CQUNLSU5HO1xuICByZXR1cm4geyBwcmVsb2FkLCBwcmVmaXg6IGVudi5WRlNfUFJFRklYLCBiYWNraW5nOiBlbnYuVkZTX0JBQ0tJTkcgfTtcbn07XG5cbmV4cG9ydCB7IFZFUlNJT04sIE5BTUUsIGlkIH07XG4iLCAie1xuICBcIm5hbWVcIjogXCJAc2NhZmZvbGRseS9yb3dkeS12ZnNcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlVzZXJzcGFjZSBWRlMgKExEX1BSRUxPQUQgc2hpbSkgZm9yIFJvd2R5XCIsXG4gIFwidmVyc2lvblwiOiBcIjAuMS4wXCIsXG4gIFwibWFpblwiOiBcImRpc3QvaW5kZXguanNcIixcbiAgXCJ0eXBlc1wiOiBcImRpc3QvaW5kZXguZC50c1wiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKiovKi5qc1wiLFxuICAgIFwiZGlzdC8qKi8qLmQudHNcIixcbiAgICBcImRpc3QvKiovKi5qcy5tYXBcIixcbiAgICBcImxpYi8qKi8qLnNvXCIsXG4gICAgXCJuYXRpdmUvdmZzcHJlbG9hZC5jXCJcbiAgXSxcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vc2NhZmZvbGRseS9yb3dkeS5naXRcIlxuICB9LFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3NjYWZmb2xkbHkvcm93ZHkvaXNzdWVzXCJcbiAgfSxcbiAgXCJhdXRob3JcIjogXCJTY2FmZm9sZGx5IDxnaXRodWIuY29tL3NjYWZmb2xkbHk+XCIsXG4gIFwibGljZW5zZVwiOiBcIlNFRSBMSUNFTlNFIElOIExJQ0VOU0UubWRcIixcbiAgXCJwcml2YXRlXCI6IGZhbHNlLFxuICBcImVuZ2luZXNcIjoge1xuICAgIFwibm9kZVwiOiBcIj49MjJcIixcbiAgICBcInlhcm5cIjogXCI+PTEuMjIuMFwiLFxuICAgIFwibnBtXCI6IFwiPj0xMFwiXG4gIH0sXG4gIFwiZW5naW5lU3RyaWN0XCI6IGZhbHNlLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwiYnVpbGRcIjogXCJ5YXJuIGJ1aWxkOmluZGV4XCIsXG4gICAgXCJidWlsZDpuYXRpdmVcIjogXCJzaCBuYXRpdmUvYnVpbGQuc2ggeDY0ICYmIHNoIG5hdGl2ZS9idWlsZC5zaCBhcm02NFwiLFxuICAgIFwiYnVpbGQ6aW5kZXhcIjogXCJ0c3VwXCIsXG4gICAgXCJ0ZXN0XCI6IFwieWFybiBqZXN0IC0tIC0tdmVyYm9zZSAtLXRlc3RUaW1lb3V0PTMwMDAwXCIsXG4gICAgXCJ0ZXN0Om5hdGl2ZVwiOiBcInNoIG5hdGl2ZS90ZXN0LnNoXCIsXG4gICAgXCJqZXN0XCI6IFwiamVzdFwiLFxuICAgIFwibGludFwiOiBcImVzbGludCAuXCIsXG4gICAgXCJsaW50OmZpeFwiOiBcImVzbGludCAuIC0tZml4XCJcbiAgfSxcbiAgXCJwcmV0dGllclwiOiB7XG4gICAgXCJzZW1pXCI6IHRydWUsXG4gICAgXCJ0cmFpbGluZ0NvbW1hXCI6IFwiZXM1XCIsXG4gICAgXCJzaW5nbGVRdW90ZVwiOiB0cnVlLFxuICAgIFwicHJpbnRXaWR0aFwiOiAxMjAsXG4gICAgXCJ0YWJXaWR0aFwiOiAyLFxuICAgIFwidXNlVGFic1wiOiBmYWxzZVxuICB9LFxuICBcImplc3RcIjoge1xuICAgIFwicHJvamVjdHNcIjogW1xuICAgICAge1xuICAgICAgICBcImRpc3BsYXlOYW1lXCI6IFwidW5pdFwiLFxuICAgICAgICBcInByZXNldFwiOiBcInRzLWplc3RcIixcbiAgICAgICAgXCJ0ZXN0RW52aXJvbm1lbnRcIjogXCJub2RlXCIsXG4gICAgICAgIFwidGVzdE1hdGNoXCI6IFtcbiAgICAgICAgICBcIioqL3Rlc3RzLyoqLyoudGVzdC50c1wiXG4gICAgICAgIF0sXG4gICAgICAgIFwidHJhbnNmb3JtXCI6IHtcbiAgICAgICAgICBcIl4uK1xcXFwudHMkXCI6IFtcbiAgICAgICAgICAgIFwidHMtamVzdFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInRzY29uZmlnXCI6IFwidGVzdHMvdHNjb25maWcuanNvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIl4uK1xcXFwuc28kXCI6IFwiPHJvb3REaXI+L3Rlc3RzL3RyYW5zZm9ybWVycy5qc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9kdWxlTmFtZU1hcHBlclwiOiB7XG4gICAgICAgICAgXCJeQHNjYWZmb2xkbHkvcm93ZHktdmZzJFwiOiBcIjxyb290RGlyPi9zcmMvaW5kZXgudHNcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAZXNsaW50L2pzXCI6IFwiXjkuMjguMFwiLFxuICAgIFwiQHR5cGVzL2plc3RcIjogXCJeMzAuMC4wXCIsXG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIj49MjIuMC4wIDwyNS4wLjBcIixcbiAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luXCI6IFwiXjguMC4wXCIsXG4gICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyXCI6IFwiXjguMC4wXCIsXG4gICAgXCJlc2xpbnRcIjogXCJeOS4wLjBcIixcbiAgICBcImVzbGludC1jb25maWctcHJldHRpZXJcIjogXCJeMTAuMS41XCIsXG4gICAgXCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyXCI6IFwiXjUuNC4xXCIsXG4gICAgXCJnbG9iYWxzXCI6IFwiXjE2LjIuMFwiLFxuICAgIFwiamVzdFwiOiBcIl4zMC4xLjNcIixcbiAgICBcInByZXR0aWVyXCI6IFwiXjMuMC4wXCIsXG4gICAgXCJ0cy1qZXN0XCI6IFwiXjI5LjEuMFwiLFxuICAgIFwidHN1cFwiOiBcIl44LjUuMFwiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjAuMFwiXG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUFtRTtBQUNuRSxrQkFBOEI7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
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* vfspreload.c — a userspace VFS via LD_PRELOAD libc interposition.
|
|
3
|
+
*
|
|
4
|
+
* The sandbox denies every kernel-mediated VFS primitive (/dev/fuse, mount(2),
|
|
5
|
+
* namespaces, ptrace, seccomp-notify — all EPERM/ENOENT). The one path that
|
|
6
|
+
* survives is intercepting libc's path entry points in-process. This shim turns
|
|
7
|
+
* a virtual prefix (VFS_PREFIX, default "/vfs") into a full, writable, persistent
|
|
8
|
+
* filesystem backed by a real directory (VFS_BACKING, default "/tmp/vfsstore").
|
|
9
|
+
*
|
|
10
|
+
* It is a genuine filesystem surface: create, read, write, stat, list, mkdir,
|
|
11
|
+
* rename, chmod, delete all work, because each path-based call is translated and
|
|
12
|
+
* delegated to the real libc against the backing store. Calls that hand a path
|
|
13
|
+
* back to the program (getcwd, realpath, readlink) are translated in reverse so
|
|
14
|
+
* the backing directory never leaks into the program's view.
|
|
15
|
+
*
|
|
16
|
+
* musl note: within libc, one function calling another (fopen->open,
|
|
17
|
+
* scandir->opendir, remove->unlink) binds internally and does NOT route through
|
|
18
|
+
* a preloaded symbol. So we must interpose every PUBLIC entry point the calling
|
|
19
|
+
* program uses directly, not rely on one wrapper covering another. That is
|
|
20
|
+
* exactly what this file does.
|
|
21
|
+
*
|
|
22
|
+
* Scope / ceiling (inherent to the preload model):
|
|
23
|
+
* - only processes started with this .so in LD_PRELOAD see the VFS;
|
|
24
|
+
* - only dynamically-linked musl callers that invoke these libc symbols;
|
|
25
|
+
* - it is not a kernel mountpoint — unrelated processes cannot see /vfs;
|
|
26
|
+
* - no mmap of virtual files, no nftw/glob/posix_spawn translation (yet).
|
|
27
|
+
*
|
|
28
|
+
* Build: gcc -shared -fPIC vfspreload.c -o vfspreload.so
|
|
29
|
+
* Run: LD_PRELOAD=/usr/local/lib/rowdy/vfspreload.so \
|
|
30
|
+
* VFS_PREFIX=/vfs VFS_BACKING=/tmp/vfsstore <program>
|
|
31
|
+
*/
|
|
32
|
+
#define _GNU_SOURCE
|
|
33
|
+
#include <dlfcn.h>
|
|
34
|
+
#include <errno.h>
|
|
35
|
+
#include <stdio.h>
|
|
36
|
+
#include <string.h>
|
|
37
|
+
#include <stdlib.h>
|
|
38
|
+
#include <stdarg.h>
|
|
39
|
+
#include <limits.h>
|
|
40
|
+
#include <fcntl.h>
|
|
41
|
+
#include <unistd.h>
|
|
42
|
+
#include <dirent.h>
|
|
43
|
+
#include <utime.h>
|
|
44
|
+
#include <sys/stat.h>
|
|
45
|
+
#include <sys/statfs.h>
|
|
46
|
+
#include <sys/statvfs.h>
|
|
47
|
+
#include <sys/time.h>
|
|
48
|
+
#include <sys/types.h>
|
|
49
|
+
#include <sys/syscall.h>
|
|
50
|
+
|
|
51
|
+
/* ---- configuration (read once) ------------------------------------------ */
|
|
52
|
+
|
|
53
|
+
static const char *g_prefix; /* virtual prefix, e.g. "/vfs" */
|
|
54
|
+
static size_t g_prefixlen;
|
|
55
|
+
static const char *g_backing; /* real backing dir, e.g. "/tmp/vfsstore" */
|
|
56
|
+
static size_t g_backinglen;
|
|
57
|
+
|
|
58
|
+
static void vfs_init(void) __attribute__((constructor));
|
|
59
|
+
static void vfs_init(void) {
|
|
60
|
+
if (g_prefix) return;
|
|
61
|
+
|
|
62
|
+
const char *p = getenv("VFS_PREFIX");
|
|
63
|
+
g_prefix = (p && *p) ? p : "/vfs";
|
|
64
|
+
g_prefixlen = strlen(g_prefix);
|
|
65
|
+
|
|
66
|
+
const char *b = getenv("VFS_BACKING");
|
|
67
|
+
g_backing = (b && *b) ? b : "/tmp/vfsstore";
|
|
68
|
+
g_backinglen = strlen(g_backing);
|
|
69
|
+
|
|
70
|
+
/* Best-effort create the backing root so the VFS exists on first use. */
|
|
71
|
+
int (*real_mkdir)(const char *, mode_t) = dlsym(RTLD_NEXT, "mkdir");
|
|
72
|
+
int saved = errno;
|
|
73
|
+
if (real_mkdir) real_mkdir(g_backing, 0777);
|
|
74
|
+
errno = saved;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* ---- path translation ---------------------------------------------------- */
|
|
78
|
+
|
|
79
|
+
/*
|
|
80
|
+
* If `path` is absolute and under the virtual prefix, rewrite it into the
|
|
81
|
+
* backing store in `buf` and return `buf`. Otherwise return `path` unchanged.
|
|
82
|
+
*
|
|
83
|
+
* Only absolute /vfs paths are translated. Relative paths are left alone: a
|
|
84
|
+
* dirfd obtained via opendir/open on a /vfs path (or a cwd set via chdir)
|
|
85
|
+
* already points into the backing store, so relative resolution is correct on
|
|
86
|
+
* its own.
|
|
87
|
+
*/
|
|
88
|
+
static const char *xlate(const char *path, char *buf, size_t bufsz) {
|
|
89
|
+
if (!path) return path;
|
|
90
|
+
if (!g_prefix) vfs_init(); /* hooked before our constructor ran */
|
|
91
|
+
if (strncmp(path, g_prefix, g_prefixlen) != 0) return path;
|
|
92
|
+
char after = path[g_prefixlen];
|
|
93
|
+
if (after != '/' && after != '\0') return path; /* e.g. "/vfsx" is not ours */
|
|
94
|
+
/* path + g_prefixlen keeps the leading '/' (or "" for the root itself). */
|
|
95
|
+
size_t restlen = strlen(path + g_prefixlen);
|
|
96
|
+
if (g_backinglen + restlen + 1 > bufsz) return path; /* too long; fall through */
|
|
97
|
+
memcpy(buf, g_backing, g_backinglen);
|
|
98
|
+
memcpy(buf + g_backinglen, path + g_prefixlen, restlen + 1);
|
|
99
|
+
return buf;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/*
|
|
103
|
+
* Reverse: if `buf` (NUL-terminated, capacity `bufsz`) is under the backing
|
|
104
|
+
* store, rewrite it in place to the virtual prefix. Returns 1 if rewritten,
|
|
105
|
+
* 0 if not ours, -1 if it would not fit.
|
|
106
|
+
*/
|
|
107
|
+
static int unxlate(char *buf, size_t bufsz) {
|
|
108
|
+
if (!g_prefix) vfs_init();
|
|
109
|
+
if (strncmp(buf, g_backing, g_backinglen) != 0) return 0;
|
|
110
|
+
char after = buf[g_backinglen];
|
|
111
|
+
if (after != '/' && after != '\0') return 0;
|
|
112
|
+
size_t restlen = strlen(buf + g_backinglen);
|
|
113
|
+
if (g_prefixlen + restlen + 1 > bufsz) return -1;
|
|
114
|
+
memmove(buf + g_prefixlen, buf + g_backinglen, restlen + 1);
|
|
115
|
+
memcpy(buf, g_prefix, g_prefixlen);
|
|
116
|
+
return 1;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
#define XL(p) const char *rp_; char xb_[PATH_MAX]; rp_ = xlate((p), xb_, sizeof xb_)
|
|
120
|
+
|
|
121
|
+
#define XL2(a, b) \
|
|
122
|
+
char ab_[PATH_MAX], bb_[PATH_MAX]; \
|
|
123
|
+
const char *ra_ = xlate((a), ab_, sizeof ab_); \
|
|
124
|
+
const char *rb_ = xlate((b), bb_, sizeof bb_)
|
|
125
|
+
|
|
126
|
+
#define REAL(name) \
|
|
127
|
+
static typeof(&name) real_; \
|
|
128
|
+
if (!real_) real_ = (typeof(&name))dlsym(RTLD_NEXT, #name)
|
|
129
|
+
|
|
130
|
+
/* ---- open family (variadic mode) ----------------------------------------- */
|
|
131
|
+
|
|
132
|
+
int open(const char *path, int flags, ...) {
|
|
133
|
+
REAL(open);
|
|
134
|
+
mode_t mode = 0;
|
|
135
|
+
if (flags & (O_CREAT | O_TMPFILE)) {
|
|
136
|
+
va_list ap; va_start(ap, flags); mode = va_arg(ap, int); va_end(ap);
|
|
137
|
+
}
|
|
138
|
+
XL(path);
|
|
139
|
+
return real_(rp_, flags, mode);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
int openat(int dirfd, const char *path, int flags, ...) {
|
|
143
|
+
REAL(openat);
|
|
144
|
+
mode_t mode = 0;
|
|
145
|
+
if (flags & (O_CREAT | O_TMPFILE)) {
|
|
146
|
+
va_list ap; va_start(ap, flags); mode = va_arg(ap, int); va_end(ap);
|
|
147
|
+
}
|
|
148
|
+
XL(path);
|
|
149
|
+
return real_(dirfd, rp_, flags, mode);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
int creat(const char *path, mode_t mode) {
|
|
153
|
+
REAL(creat); XL(path); return real_(rp_, mode);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* ---- stdio (musl binds fopen->open internally) --------------------------- */
|
|
157
|
+
|
|
158
|
+
FILE *fopen(const char *path, const char *mode) {
|
|
159
|
+
REAL(fopen); XL(path); return real_(rp_, mode);
|
|
160
|
+
}
|
|
161
|
+
FILE *freopen(const char *path, const char *mode, FILE *stream) {
|
|
162
|
+
REAL(freopen); XL(path); return real_(rp_, mode, stream);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/* ---- metadata ------------------------------------------------------------ */
|
|
166
|
+
|
|
167
|
+
int stat(const char *path, struct stat *st) {
|
|
168
|
+
REAL(stat); XL(path); return real_(rp_, st);
|
|
169
|
+
}
|
|
170
|
+
int lstat(const char *path, struct stat *st) {
|
|
171
|
+
REAL(lstat); XL(path); return real_(rp_, st);
|
|
172
|
+
}
|
|
173
|
+
int fstatat(int dirfd, const char *path, struct stat *st, int flags) {
|
|
174
|
+
REAL(fstatat); XL(path); return real_(dirfd, rp_, st, flags);
|
|
175
|
+
}
|
|
176
|
+
int access(const char *path, int mode) {
|
|
177
|
+
REAL(access); XL(path); return real_(rp_, mode);
|
|
178
|
+
}
|
|
179
|
+
int faccessat(int dirfd, const char *path, int mode, int flags) {
|
|
180
|
+
REAL(faccessat); XL(path); return real_(dirfd, rp_, mode, flags);
|
|
181
|
+
}
|
|
182
|
+
int statx(int dirfd, const char *path, int flags, unsigned mask, struct statx *buf) {
|
|
183
|
+
REAL(statx); XL(path); return real_(dirfd, rp_, flags, mask, buf);
|
|
184
|
+
}
|
|
185
|
+
int statfs(const char *path, struct statfs *buf) {
|
|
186
|
+
REAL(statfs); XL(path); return real_(rp_, buf);
|
|
187
|
+
}
|
|
188
|
+
int statvfs(const char *path, struct statvfs *buf) {
|
|
189
|
+
REAL(statvfs); XL(path); return real_(rp_, buf);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* ---- attribute mutation -------------------------------------------------- */
|
|
193
|
+
|
|
194
|
+
int chmod(const char *path, mode_t mode) {
|
|
195
|
+
REAL(chmod); XL(path); return real_(rp_, mode);
|
|
196
|
+
}
|
|
197
|
+
int fchmodat(int dirfd, const char *path, mode_t mode, int flags) {
|
|
198
|
+
REAL(fchmodat); XL(path); return real_(dirfd, rp_, mode, flags);
|
|
199
|
+
}
|
|
200
|
+
int chown(const char *path, uid_t uid, gid_t gid) {
|
|
201
|
+
REAL(chown); XL(path); return real_(rp_, uid, gid);
|
|
202
|
+
}
|
|
203
|
+
int lchown(const char *path, uid_t uid, gid_t gid) {
|
|
204
|
+
REAL(lchown); XL(path); return real_(rp_, uid, gid);
|
|
205
|
+
}
|
|
206
|
+
int fchownat(int dirfd, const char *path, uid_t uid, gid_t gid, int flags) {
|
|
207
|
+
REAL(fchownat); XL(path); return real_(dirfd, rp_, uid, gid, flags);
|
|
208
|
+
}
|
|
209
|
+
int truncate(const char *path, off_t length) {
|
|
210
|
+
REAL(truncate); XL(path); return real_(rp_, length);
|
|
211
|
+
}
|
|
212
|
+
int utimensat(int dirfd, const char *path, const struct timespec times[2], int flags) {
|
|
213
|
+
REAL(utimensat); XL(path); return real_(dirfd, rp_, times, flags);
|
|
214
|
+
}
|
|
215
|
+
int utimes(const char *path, const struct timeval times[2]) {
|
|
216
|
+
REAL(utimes); XL(path); return real_(rp_, times);
|
|
217
|
+
}
|
|
218
|
+
int utime(const char *path, const struct utimbuf *times) {
|
|
219
|
+
REAL(utime); XL(path); return real_(rp_, times);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* ---- directory listing --------------------------------------------------- */
|
|
223
|
+
|
|
224
|
+
DIR *opendir(const char *path) {
|
|
225
|
+
REAL(opendir); XL(path); return real_(rp_);
|
|
226
|
+
}
|
|
227
|
+
int scandir(const char *path, struct dirent ***namelist,
|
|
228
|
+
int (*filter)(const struct dirent *),
|
|
229
|
+
int (*compar)(const struct dirent **, const struct dirent **)) {
|
|
230
|
+
REAL(scandir); XL(path); return real_(rp_, namelist, filter, compar);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/* ---- namespace mutation -------------------------------------------------- */
|
|
234
|
+
|
|
235
|
+
int mkdir(const char *path, mode_t mode) {
|
|
236
|
+
REAL(mkdir); XL(path); return real_(rp_, mode);
|
|
237
|
+
}
|
|
238
|
+
int mkdirat(int dirfd, const char *path, mode_t mode) {
|
|
239
|
+
REAL(mkdirat); XL(path); return real_(dirfd, rp_, mode);
|
|
240
|
+
}
|
|
241
|
+
int rmdir(const char *path) {
|
|
242
|
+
REAL(rmdir); XL(path); return real_(rp_);
|
|
243
|
+
}
|
|
244
|
+
int unlink(const char *path) {
|
|
245
|
+
REAL(unlink); XL(path); return real_(rp_);
|
|
246
|
+
}
|
|
247
|
+
int unlinkat(int dirfd, const char *path, int flags) {
|
|
248
|
+
REAL(unlinkat); XL(path); return real_(dirfd, rp_, flags);
|
|
249
|
+
}
|
|
250
|
+
int remove(const char *path) {
|
|
251
|
+
REAL(remove); XL(path); return real_(rp_);
|
|
252
|
+
}
|
|
253
|
+
int mkfifo(const char *path, mode_t mode) {
|
|
254
|
+
REAL(mkfifo); XL(path); return real_(rp_, mode);
|
|
255
|
+
}
|
|
256
|
+
int mknod(const char *path, mode_t mode, dev_t dev) {
|
|
257
|
+
REAL(mknod); XL(path); return real_(rp_, mode, dev);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/* rename / link / symlink translate BOTH paths. A symlink target under /vfs is
|
|
261
|
+
* stored as its backing path so the kernel can follow it; readlink maps it back. */
|
|
262
|
+
|
|
263
|
+
int rename(const char *from, const char *to) {
|
|
264
|
+
REAL(rename); XL2(from, to); return real_(ra_, rb_);
|
|
265
|
+
}
|
|
266
|
+
int renameat(int fromfd, const char *from, int tofd, const char *to) {
|
|
267
|
+
REAL(renameat); XL2(from, to); return real_(fromfd, ra_, tofd, rb_);
|
|
268
|
+
}
|
|
269
|
+
int link(const char *from, const char *to) {
|
|
270
|
+
REAL(link); XL2(from, to); return real_(ra_, rb_);
|
|
271
|
+
}
|
|
272
|
+
int linkat(int fromfd, const char *from, int tofd, const char *to, int flags) {
|
|
273
|
+
REAL(linkat); XL2(from, to); return real_(fromfd, ra_, tofd, rb_, flags);
|
|
274
|
+
}
|
|
275
|
+
int symlink(const char *target, const char *linkpath) {
|
|
276
|
+
REAL(symlink); XL2(target, linkpath); return real_(ra_, rb_);
|
|
277
|
+
}
|
|
278
|
+
int symlinkat(const char *target, int dirfd, const char *linkpath) {
|
|
279
|
+
REAL(symlinkat); XL2(target, linkpath); return real_(ra_, dirfd, rb_);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/* ---- temp files: the template is rewritten in place by libc --------------- */
|
|
283
|
+
|
|
284
|
+
int mkstemp(char *template) {
|
|
285
|
+
REAL(mkstemp);
|
|
286
|
+
char tb[PATH_MAX];
|
|
287
|
+
const char *rp = xlate(template, tb, sizeof tb);
|
|
288
|
+
if (rp == template) return real_(template);
|
|
289
|
+
int fd = real_(tb);
|
|
290
|
+
if (fd >= 0) memcpy(template + strlen(template) - 6, tb + strlen(tb) - 6, 6);
|
|
291
|
+
return fd;
|
|
292
|
+
}
|
|
293
|
+
char *mkdtemp(char *template) {
|
|
294
|
+
REAL(mkdtemp);
|
|
295
|
+
char tb[PATH_MAX];
|
|
296
|
+
const char *rp = xlate(template, tb, sizeof tb);
|
|
297
|
+
if (rp == template) return real_(template);
|
|
298
|
+
if (!real_(tb)) return NULL;
|
|
299
|
+
memcpy(template + strlen(template) - 6, tb + strlen(tb) - 6, 6);
|
|
300
|
+
return template;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/* ---- cwd ------------------------------------------------------------------ */
|
|
304
|
+
|
|
305
|
+
int chdir(const char *path) {
|
|
306
|
+
REAL(chdir); XL(path); return real_(rp_);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
char *getcwd(char *buf, size_t size) {
|
|
310
|
+
REAL(getcwd);
|
|
311
|
+
char tmp[PATH_MAX];
|
|
312
|
+
if (!real_(tmp, sizeof tmp)) return NULL;
|
|
313
|
+
unxlate(tmp, sizeof tmp);
|
|
314
|
+
size_t len = strlen(tmp) + 1;
|
|
315
|
+
if (!buf) {
|
|
316
|
+
if (size && len > size) { errno = ERANGE; return NULL; }
|
|
317
|
+
return strdup(tmp);
|
|
318
|
+
}
|
|
319
|
+
if (len > size) { errno = ERANGE; return NULL; }
|
|
320
|
+
memcpy(buf, tmp, len);
|
|
321
|
+
return buf;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* ---- paths handed back to the program are mapped to the virtual view ------ */
|
|
325
|
+
|
|
326
|
+
char *realpath(const char *path, char *resolved) {
|
|
327
|
+
REAL(realpath); XL(path);
|
|
328
|
+
char tmp[PATH_MAX];
|
|
329
|
+
if (!real_(rp_, tmp)) return NULL;
|
|
330
|
+
unxlate(tmp, sizeof tmp);
|
|
331
|
+
if (!resolved) return strdup(tmp);
|
|
332
|
+
memcpy(resolved, tmp, strlen(tmp) + 1); /* resolved is PATH_MAX per POSIX */
|
|
333
|
+
return resolved;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
static ssize_t copy_link(const char *tmp, char *buf, size_t bufsz) {
|
|
337
|
+
size_t len = strlen(tmp);
|
|
338
|
+
if (len > bufsz) len = bufsz;
|
|
339
|
+
memcpy(buf, tmp, len);
|
|
340
|
+
return (ssize_t)len;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
ssize_t readlink(const char *path, char *buf, size_t bufsz) {
|
|
344
|
+
REAL(readlink); XL(path);
|
|
345
|
+
char tmp[PATH_MAX];
|
|
346
|
+
ssize_t n = real_(rp_, tmp, sizeof tmp - 1);
|
|
347
|
+
if (n < 0) return n;
|
|
348
|
+
tmp[n] = '\0';
|
|
349
|
+
unxlate(tmp, sizeof tmp);
|
|
350
|
+
return copy_link(tmp, buf, bufsz);
|
|
351
|
+
}
|
|
352
|
+
ssize_t readlinkat(int dirfd, const char *path, char *buf, size_t bufsz) {
|
|
353
|
+
REAL(readlinkat); XL(path);
|
|
354
|
+
char tmp[PATH_MAX];
|
|
355
|
+
ssize_t n = real_(dirfd, rp_, tmp, sizeof tmp - 1);
|
|
356
|
+
if (n < 0) return n;
|
|
357
|
+
tmp[n] = '\0';
|
|
358
|
+
unxlate(tmp, sizeof tmp);
|
|
359
|
+
return copy_link(tmp, buf, bufsz);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/* ---- raw syscall(2) ----------------------------------------------------------
|
|
363
|
+
* Some runtimes bypass the libc wrappers: libuv (node) issues statx via
|
|
364
|
+
* syscall(SYS_statx, ...). Translate the path argument for the single-path
|
|
365
|
+
* syscalls. Two-path syscalls (renameat2, linkat, symlinkat) are reached through
|
|
366
|
+
* their libc wrappers above in practice. */
|
|
367
|
+
|
|
368
|
+
long syscall(long n, ...) {
|
|
369
|
+
REAL(syscall);
|
|
370
|
+
long a[6];
|
|
371
|
+
va_list ap; va_start(ap, n);
|
|
372
|
+
for (int i = 0; i < 6; i++) a[i] = va_arg(ap, long);
|
|
373
|
+
va_end(ap);
|
|
374
|
+
|
|
375
|
+
int at = -1; /* index of the path argument, if any */
|
|
376
|
+
switch (n) {
|
|
377
|
+
#ifdef SYS_statx
|
|
378
|
+
case SYS_statx:
|
|
379
|
+
#endif
|
|
380
|
+
#ifdef SYS_newfstatat
|
|
381
|
+
case SYS_newfstatat:
|
|
382
|
+
#endif
|
|
383
|
+
#ifdef SYS_openat
|
|
384
|
+
case SYS_openat:
|
|
385
|
+
#endif
|
|
386
|
+
#ifdef SYS_faccessat
|
|
387
|
+
case SYS_faccessat:
|
|
388
|
+
#endif
|
|
389
|
+
#ifdef SYS_faccessat2
|
|
390
|
+
case SYS_faccessat2:
|
|
391
|
+
#endif
|
|
392
|
+
#ifdef SYS_mkdirat
|
|
393
|
+
case SYS_mkdirat:
|
|
394
|
+
#endif
|
|
395
|
+
#ifdef SYS_unlinkat
|
|
396
|
+
case SYS_unlinkat:
|
|
397
|
+
#endif
|
|
398
|
+
#ifdef SYS_readlinkat
|
|
399
|
+
case SYS_readlinkat:
|
|
400
|
+
#endif
|
|
401
|
+
#ifdef SYS_fchmodat
|
|
402
|
+
case SYS_fchmodat:
|
|
403
|
+
#endif
|
|
404
|
+
#ifdef SYS_utimensat
|
|
405
|
+
case SYS_utimensat:
|
|
406
|
+
#endif
|
|
407
|
+
at = 1; break;
|
|
408
|
+
#ifdef SYS_open
|
|
409
|
+
case SYS_open:
|
|
410
|
+
#endif
|
|
411
|
+
#ifdef SYS_stat
|
|
412
|
+
case SYS_stat:
|
|
413
|
+
#endif
|
|
414
|
+
#ifdef SYS_lstat
|
|
415
|
+
case SYS_lstat:
|
|
416
|
+
#endif
|
|
417
|
+
#ifdef SYS_access
|
|
418
|
+
case SYS_access:
|
|
419
|
+
#endif
|
|
420
|
+
#ifdef SYS_mkdir
|
|
421
|
+
case SYS_mkdir:
|
|
422
|
+
#endif
|
|
423
|
+
#ifdef SYS_rmdir
|
|
424
|
+
case SYS_rmdir:
|
|
425
|
+
#endif
|
|
426
|
+
#ifdef SYS_unlink
|
|
427
|
+
case SYS_unlink:
|
|
428
|
+
#endif
|
|
429
|
+
#ifdef SYS_chmod
|
|
430
|
+
case SYS_chmod:
|
|
431
|
+
#endif
|
|
432
|
+
#ifdef SYS_chdir
|
|
433
|
+
case SYS_chdir:
|
|
434
|
+
#endif
|
|
435
|
+
#ifdef SYS_truncate
|
|
436
|
+
case SYS_truncate:
|
|
437
|
+
#endif
|
|
438
|
+
at = 0; break;
|
|
439
|
+
default: break;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
char xb[PATH_MAX];
|
|
443
|
+
if (at >= 0) a[at] = (long)xlate((const char *)a[at], xb, sizeof xb);
|
|
444
|
+
return real_(n, a[0], a[1], a[2], a[3], a[4], a[5]);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/* ---- exec: binaries living under /vfs; LD_PRELOAD is inherited via env ---- */
|
|
448
|
+
|
|
449
|
+
int execve(const char *path, char *const argv[], char *const envp[]) {
|
|
450
|
+
REAL(execve); XL(path); return real_(rp_, argv, envp);
|
|
451
|
+
}
|
|
452
|
+
int execv(const char *path, char *const argv[]) {
|
|
453
|
+
REAL(execv); XL(path); return real_(rp_, argv);
|
|
454
|
+
}
|
|
455
|
+
int execvp(const char *file, char *const argv[]) {
|
|
456
|
+
REAL(execvp); XL(file); return real_(rp_, argv);
|
|
457
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@scaffoldly/rowdy-vfs",
|
|
3
|
+
"description": "Userspace VFS (LD_PRELOAD shim) for Rowdy",
|
|
4
|
+
"version": "0.1.0-beta.20261005095325.230d57b",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/**/*.js",
|
|
9
|
+
"dist/**/*.d.ts",
|
|
10
|
+
"dist/**/*.js.map",
|
|
11
|
+
"lib/**/*.so",
|
|
12
|
+
"native/vfspreload.c"
|
|
13
|
+
],
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/scaffoldly/rowdy.git"
|
|
17
|
+
},
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/scaffoldly/rowdy/issues"
|
|
20
|
+
},
|
|
21
|
+
"author": "Scaffoldly <github.com/scaffoldly>",
|
|
22
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
23
|
+
"private": false,
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=22",
|
|
26
|
+
"yarn": ">=1.22.0",
|
|
27
|
+
"npm": ">=10"
|
|
28
|
+
},
|
|
29
|
+
"engineStrict": false,
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "yarn build:index",
|
|
32
|
+
"build:native": "sh native/build.sh x64 && sh native/build.sh arm64",
|
|
33
|
+
"build:index": "tsup",
|
|
34
|
+
"test": "yarn jest -- --verbose --testTimeout=30000",
|
|
35
|
+
"test:native": "sh native/test.sh",
|
|
36
|
+
"jest": "jest",
|
|
37
|
+
"lint": "eslint .",
|
|
38
|
+
"lint:fix": "eslint . --fix"
|
|
39
|
+
},
|
|
40
|
+
"prettier": {
|
|
41
|
+
"semi": true,
|
|
42
|
+
"trailingComma": "es5",
|
|
43
|
+
"singleQuote": true,
|
|
44
|
+
"printWidth": 120,
|
|
45
|
+
"tabWidth": 2,
|
|
46
|
+
"useTabs": false
|
|
47
|
+
},
|
|
48
|
+
"jest": {
|
|
49
|
+
"projects": [
|
|
50
|
+
{
|
|
51
|
+
"displayName": "unit",
|
|
52
|
+
"preset": "ts-jest",
|
|
53
|
+
"testEnvironment": "node",
|
|
54
|
+
"testMatch": [
|
|
55
|
+
"**/tests/**/*.test.ts"
|
|
56
|
+
],
|
|
57
|
+
"transform": {
|
|
58
|
+
"^.+\\.ts$": [
|
|
59
|
+
"ts-jest",
|
|
60
|
+
{
|
|
61
|
+
"tsconfig": "tests/tsconfig.json"
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"^.+\\.so$": "<rootDir>/tests/transformers.js"
|
|
65
|
+
},
|
|
66
|
+
"moduleNameMapper": {
|
|
67
|
+
"^@scaffoldly/rowdy-vfs$": "<rootDir>/src/index.ts"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"devDependencies": {
|
|
73
|
+
"@eslint/js": "^9.28.0",
|
|
74
|
+
"@types/jest": "^30.0.0",
|
|
75
|
+
"@types/node": ">=22.0.0 <25.0.0",
|
|
76
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
77
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
78
|
+
"eslint": "^9.0.0",
|
|
79
|
+
"eslint-config-prettier": "^10.1.5",
|
|
80
|
+
"eslint-plugin-prettier": "^5.4.1",
|
|
81
|
+
"globals": "^16.2.0",
|
|
82
|
+
"jest": "^30.1.3",
|
|
83
|
+
"prettier": "^3.0.0",
|
|
84
|
+
"ts-jest": "^29.1.0",
|
|
85
|
+
"tsup": "^8.5.0",
|
|
86
|
+
"typescript": "^5.0.0"
|
|
87
|
+
}
|
|
88
|
+
}
|