Remove jumpscare, couple of additions to CONTRIBUTING.md (#386)

* Remove jumpscare

Allow the faint of heart to build the repo

* Clarify make_expected and add -3 info

* Add info about mips_to_c and m2ctx.py

* Mention -h

* Remove unneded version stuff for make_expected
This commit is contained in:
EllipticEllipsis 2021-08-25 06:08:42 +01:00 committed by GitHub
parent 015151cbfb
commit 0e1100de7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 63 deletions

1
.gitignore vendored
View File

@ -36,7 +36,6 @@ build/
/include/sprite/ /include/sprite/
/include/map /include/map
/tools/permuter_settings.toml /tools/permuter_settings.toml
/tools/build/first_ok
# Assets # Assets
/assets/* /assets/*

View File

@ -18,19 +18,32 @@ If you use Visual Studio Code, you can use _Run Build Task_ (Ctrl+Shift+B) to ru
### Setup ### Setup
Once you've created a successful (`OK`) build, copy `ver/us/build/` to `ver/us/expected/build/`: Once you've created a successful (`OK`) build, run
```sh ```sh
./make_expected.sh ./make_expected.sh
``` ```
(If you're working with other versions of the game, replace `us` in the file paths.) to copy `ver/us/build/` to `ver/us/expected/build/`.
### Roughly converting assembly to C ### Roughly converting assembly to C
Decide on a function to match. These can be found in the subdirectories of `ver/us/asm/nonmatchings/`. Decide on a function to match. These can be found in the subdirectories of `ver/us/asm/nonmatchings/`. Also find the `.c` file that uses the function (it will have the function name in an `INCLUDE_ASM`).
Take the relevant `.s` file and pass it to [mips_to_c](https://github.com/matt-kempster/mips_to_c) ([online version](https://simonsoftware.se/other/mips_to_c.py)). Most of the time you will want to generate a context file that defines all the project-specific structs and function prototypes, as well as information specific to the file. You can make this file by running
```sh
./tools/m2ctx.py <path/to/c_file.c>
```
(replace the contents of the `<>` by the actual path to the file from the repository root!); this will make a file called `ctx.c` in the repository's root directory.
Take the relevant `.s` file and pass it to [mips_to_c](https://github.com/matt-kempster/mips_to_c) ([online version](https://simonsoftware.se/other/mips_to_c.py)). Both versions work essentially the same way.
- if you want to use a local version, clone the repository into a separate directory in `papermario`s parent directory, read the documentation, and run it with `../mips_to_c/mips_to_c.py <path/to/func_asm.s>` from the root of the `papermario` repository. You pass the context file with `--context ctx.c`. Run with `-h` to see more options.
- the web version has two boxes: you paste the contents of the assembly file into the top box and the contents of the context file into the lower box.
(The web version is easier to use to start with, but you'll probably find that the local version is more efficient once you get used to it.)
Open up the `.c` file that uses your function and replace the function's `INCLUDE_ASM` macro with the output from mips_to_c. For example, for a function `asm/nonmatchings/FOO/func_DEADBEEF`: Open up the `.c` file that uses your function and replace the function's `INCLUDE_ASM` macro with the output from mips_to_c. For example, for a function `asm/nonmatchings/FOO/func_DEADBEEF`:
@ -42,7 +55,7 @@ Open up the `.c` file that uses your function and replace the function's `INCLUD
+ } + }
``` ```
Compile the ROM: Recompile the ROM:
```sh ```sh
ninja ninja
@ -58,7 +71,7 @@ Once the C file compiles, you can compare the assembly generated by your code ve
(Sometimes, `-mwo` doesn't work. We don't know why yet; use `-mw` if you encounter issues.) (Sometimes, `-mwo` doesn't work. We don't know why yet; use `-mw` if you encounter issues.)
`diff.py` displays the difference between the original game's assembly (on the left) and what your C code generated (on the right). `diff.py` displays the difference between the original game's assembly (on the left) and what your C code generated (on the right). If you want to compare with the last saved version as well, you can use `-3` to get a three-column diff of the original (left), current (middle), and previous (right). Passing `-b` instead of `-3` gives a three-way diff of original, current, and the version from when `diff.py` was started. Run `./diff.py -h` to see other flags and options.
### Matching the function ### Matching the function

View File

@ -10,7 +10,6 @@ from glob import glob
# Configuration: # Configuration:
VERSIONS = ["us", "jp"] VERSIONS = ["us", "jp"]
DO_SHA1_CHECK = True DO_SHA1_CHECK = True
DO_FIRST_OK = True
# Paths: # Paths:
ROOT = Path(__file__).parent.parent.parent ROOT = Path(__file__).parent.parent.parent
@ -72,7 +71,7 @@ def write_ninja_rules(ninja: ninja_syntax.Writer, cpp: str, cppflags: str, extra
ninja.rule("sha1sum", ninja.rule("sha1sum",
description="check $in", description="check $in",
command="sha1sum -c $in && touch $out" + ("&& bash tools/build/first_ok.sh" if DO_FIRST_OK else "") if DO_SHA1_CHECK else "touch $out", command="sha1sum -c $in && touch $out" if DO_SHA1_CHECK else "touch $out",
) )
ninja.rule("cpp", ninja.rule("cpp",

View File

@ -1,54 +0,0 @@
if [ -f "tools/build/first_ok" ]; then
exit
fi
touch tools/build/first_ok
printf "\e[48;5;0m \e[48;5;3m \e[48;5;58m \e[48;5;237m \e[48;5;235m \e[48;5;236m \e[48;5;3m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;236m \e[48;5;235m \e[48;5;234m \e[48;5;52m \e[48;5;234m \e[48;5;236m \e[48;5;235m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;234m \e[48;5;235m \e[48;5;52m \e[48;5;1m \e[48;5;52m \e[48;5;234m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;234m \e[48;5;235m \e[48;5;52m \e[48;5;124m \e[48;5;52m \e[48;5;234m \e[48;5;235m \e[48;5;233m \e[48;5;52m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;52m \e[48;5;235m \e[48;5;234m \e[48;5;52m \e[48;5;124m \e[48;5;1m \e[48;5;52m \e[48;5;235m \e[48;5;234m \e[48;5;236m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;236m \e[48;5;233m \e[48;5;52m \e[48;5;1m \e[48;5;88m \e[48;5;124m \e[48;5;88m \e[48;5;138m \e[48;5;131m \e[48;5;88m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;234m \e[48;5;236m \e[48;5;234m \e[48;5;52m \e[48;5;88m \e[48;5;124m \e[48;5;125m \e[48;5;95m \e[48;5;246m \e[48;5;248m \e[48;5;145m \e[48;5;247m \e[48;5;138m \e[48;5;95m \e[48;5;124m \e[48;5;1m \e[48;5;52m \e[48;5;234m \e[48;5;52m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;124m \e[48;5;138m \e[48;5;248m \e[48;5;52m \e[48;5;243m \e[48;5;249m \e[48;5;52m \e[48;5;181m \e[48;5;125m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;234m \e[48;5;237m \e[48;5;9m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;236m \e[48;5;233m \e[48;5;52m \e[48;5;1m \e[48;5;124m \e[48;5;138m \e[48;5;248m \e[48;5;52m \e[48;5;249m \e[48;5;125m \e[48;5;124m \e[48;5;88m \e[48;5;124m \e[48;5;52m \e[48;5;237m \e[48;5;52m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;233m \e[48;5;236m \e[48;5;52m \e[48;5;1m \e[48;5;88m \e[48;5;124m \e[48;5;138m \e[48;5;248m \e[48;5;52m \e[48;5;95m \e[48;5;236m \e[48;5;52m \e[48;5;95m \e[48;5;236m \e[48;5;52m \e[48;5;250m \e[48;5;89m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;236m \e[48;5;238m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;235m \e[48;5;52m \e[48;5;88m \e[48;5;124m \e[48;5;138m \e[48;5;248m \e[48;5;52m \e[48;5;138m \e[48;5;238m \e[48;5;52m \e[48;5;245m \e[48;5;238m \e[48;5;52m \e[48;5;250m \e[48;5;124m \e[48;5;52m \e[48;5;233m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;234m \e[48;5;52m \e[48;5;88m \e[48;5;124m \e[48;5;125m \e[48;5;138m \e[48;5;249m \e[48;5;233m \e[48;5;234m \e[48;5;7m \e[48;5;89m \e[48;5;124m \e[48;5;125m \e[48;5;124m \e[48;5;52m \e[48;5;233m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;52m \e[48;5;233m \e[48;5;52m \e[48;5;124m \e[48;5;88m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;52m \e[48;5;125m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;233m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;52m \e[48;5;233m \e[48;5;52m \e[48;5;124m \e[48;5;52m \e[48;5;234m \e[48;5;233m \e[48;5;234m \e[48;5;233m \e[48;5;52m \e[48;5;1m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;235m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;52m \e[48;5;233m \e[48;5;52m \e[48;5;124m \e[48;5;88m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;235m \e[48;5;233m \e[48;5;234m \e[48;5;88m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;235m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;52m \e[48;5;233m \e[48;5;52m \e[48;5;125m \e[48;5;124m \e[48;5;1m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;233m \e[48;5;235m \e[48;5;94m \e[48;5;131m \e[48;5;95m \e[48;5;137m \e[48;5;94m \e[48;5;131m \e[48;5;52m \e[48;5;234m \e[48;5;235m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;235m \e[48;5;0m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;52m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;124m \e[48;5;1m \e[48;5;52m \e[48;5;233m \e[48;5;235m \e[48;5;95m \e[48;5;137m \e[48;5;234m \e[48;5;235m \e[48;5;52m \e[48;5;137m \e[48;5;52m \e[48;5;234m \e[48;5;239m \e[48;5;137m \e[48;5;131m \e[48;5;234m \e[48;5;233m \e[48;5;52m \e[48;5;124m \e[48;5;88m \e[48;5;52m \e[48;5;235m \e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;124m \e[48;5;52m \e[48;5;233m \e[48;5;95m \e[48;5;131m \e[48;5;137m \e[48;5;233m \e[48;5;234m \e[48;5;233m \e[48;5;137m \e[48;5;233m \e[48;5;234m \e[48;5;58m \e[48;5;137m \e[48;5;95m \e[48;5;239m \e[48;5;233m \e[48;5;52m \e[48;5;88m \e[48;5;1m \e[48;5;233m \e[48;5;234m \e[48;5;0m \e[48;5;233m \e[48;5;237m \e[48;5;240m \e[48;5;243m \e[48;5;239m \e[48;5;237m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;232m \e[48;5;88m \e[48;5;234m \e[48;5;233m \e[48;5;234m \e[48;5;137m \e[48;5;232m \e[48;5;233m \e[48;5;137m \e[48;5;233m \e[48;5;237m \e[48;5;137m \e[48;5;95m \e[48;5;234m \e[48;5;233m \e[48;5;236m \e[48;5;235m \e[48;5;232m \e[48;5;0m \e[48;5;233m \e[48;5;240m \e[48;5;8m \e[48;5;248m \e[48;5;145m \e[48;5;8m \e[48;5;240m \e[48;5;233m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;233m \e[48;5;232m \e[48;5;234m \e[48;5;233m \e[48;5;52m \e[48;5;137m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;131m \e[48;5;94m \e[48;5;95m \e[48;5;232m \e[48;5;233m \e[48;5;238m \e[48;5;137m \e[48;5;95m \e[48;5;234m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[48;5;233m \e[48;5;240m \e[48;5;8m \e[48;5;145m \e[48;5;249m \e[48;5;246m \e[48;5;237m \e[48;5;233m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;235m \e[48;5;94m \e[48;5;137m \e[48;5;234m \e[48;5;235m \e[48;5;52m \e[48;5;131m \e[48;5;137m \e[48;5;95m \e[48;5;234m \e[48;5;235m \e[48;5;239m \e[48;5;137m \e[48;5;95m \e[48;5;233m \e[48;5;0m \e[48;5;233m \e[48;5;237m \e[48;5;241m \e[48;5;145m \e[48;5;249m \e[48;5;247m \e[48;5;242m \e[48;5;232m \e[48;5;233m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;233m \e[48;5;235m \e[48;5;239m \e[48;5;234m \e[48;5;58m \e[48;5;137m \e[48;5;52m \e[48;5;239m \e[48;5;95m \e[48;5;137m \e[48;5;95m \e[48;5;52m \e[48;5;94m \e[48;5;137m \e[48;5;131m \e[48;5;58m \e[48;5;234m \e[48;5;235m \e[48;5;239m \e[48;5;234m \e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;237m \e[48;5;241m \e[48;5;248m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;233m \e[48;5;234m \e[48;5;58m \e[48;5;131m \e[48;5;52m \e[48;5;234m \e[48;5;52m \e[48;5;137m \e[48;5;52m \e[48;5;95m \e[48;5;137m \e[48;5;52m \e[48;5;238m \e[48;5;137m \e[48;5;95m \e[48;5;52m \e[48;5;234m \e[48;5;235m \e[48;5;58m \e[48;5;95m \e[48;5;234m \e[48;5;233m \e[48;5;237m \e[48;5;241m \e[48;5;248m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;233m \e[48;5;235m \e[48;5;137m \e[48;5;238m \e[48;5;236m \e[48;5;95m \e[48;5;137m \e[48;5;52m \e[48;5;137m \e[48;5;95m \e[48;5;235m \e[48;5;137m \e[48;5;95m \e[48;5;52m \e[48;5;137m \e[48;5;234m \e[48;5;233m \e[48;5;240m \e[48;5;8m \e[48;5;145m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;233m \e[48;5;234m \e[48;5;0m \e[0m
\e[48;5;233m \e[48;5;235m \e[48;5;131m \e[48;5;137m \e[48;5;238m \e[48;5;58m \e[48;5;137m \e[48;5;233m \e[48;5;234m \e[48;5;137m \e[48;5;95m \e[48;5;235m \e[48;5;233m \e[48;5;237m \e[48;5;137m \e[48;5;52m \e[48;5;137m \e[48;5;234m \e[48;5;233m \e[48;5;245m \e[48;5;145m \e[48;5;8m \e[48;5;242m \e[48;5;235m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;233m \e[48;5;235m \e[48;5;131m \e[48;5;58m \e[48;5;137m \e[48;5;131m \e[48;5;95m \e[48;5;237m \e[48;5;232m \e[48;5;233m \e[48;5;137m \e[48;5;239m \e[48;5;234m \e[48;5;233m \e[48;5;234m \e[48;5;237m \e[48;5;95m \e[48;5;137m \e[48;5;94m \e[48;5;137m \e[48;5;234m \e[48;5;233m \e[48;5;232m \e[48;5;8m \e[48;5;248m \e[48;5;145m \e[48;5;249m \e[48;5;8m \e[48;5;246m \e[48;5;8m \e[48;5;243m \e[48;5;239m \e[48;5;233m \e[48;5;235m \e[48;5;3m \e[0m
\e[48;5;233m \e[48;5;235m \e[48;5;131m \e[48;5;95m \e[48;5;234m \e[48;5;137m \e[48;5;95m \e[48;5;234m \e[48;5;233m \e[48;5;95m \e[48;5;137m \e[48;5;94m \e[48;5;238m \e[48;5;233m \e[48;5;137m \e[48;5;95m \e[48;5;52m \e[48;5;137m \e[48;5;234m \e[48;5;233m \e[48;5;250m \e[48;5;145m \e[48;5;249m \e[48;5;241m \e[48;5;247m \e[48;5;145m \e[48;5;248m \e[48;5;249m \e[48;5;145m \e[48;5;248m \e[48;5;242m \e[48;5;234m \e[48;5;233m \e[48;5;232m \e[48;5;233m \e[0m
\e[48;5;233m \e[48;5;235m \e[48;5;131m \e[48;5;95m \e[48;5;52m \e[48;5;137m \e[48;5;95m \e[48;5;233m \e[48;5;235m \e[48;5;94m \e[48;5;131m \e[48;5;137m \e[48;5;131m \e[48;5;235m \e[48;5;234m \e[48;5;233m \e[48;5;137m \e[48;5;95m \e[48;5;52m \e[48;5;131m \e[48;5;234m \e[48;5;236m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;241m \e[48;5;247m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;242m \e[48;5;235m \e[48;5;233m \e[0m
\e[48;5;233m \e[48;5;235m \e[48;5;94m \e[48;5;131m \e[48;5;137m \e[48;5;131m \e[48;5;232m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;95m \e[48;5;131m \e[48;5;130m \e[48;5;95m \e[48;5;58m \e[48;5;52m \e[48;5;232m \e[48;5;233m \e[48;5;236m \e[48;5;131m \e[48;5;137m \e[48;5;95m \e[48;5;233m \e[48;5;237m \e[48;5;241m \e[48;5;145m \e[48;5;249m \e[48;5;241m \e[48;5;242m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;145m \e[48;5;241m \e[48;5;237m \e[48;5;233m \e[0m
\e[48;5;0m \e[48;5;234m \e[48;5;237m \e[48;5;238m \e[48;5;239m \e[48;5;137m \e[48;5;58m \e[48;5;235m \e[48;5;234m \e[48;5;233m \e[48;5;237m \e[48;5;235m \e[48;5;234m \e[48;5;233m \e[48;5;239m \e[48;5;95m \e[48;5;137m \e[48;5;95m \e[48;5;238m \e[48;5;233m \e[48;5;236m \e[48;5;95m \e[48;5;102m \e[48;5;249m \e[48;5;145m \e[48;5;248m \e[48;5;245m \e[48;5;248m \e[48;5;249m \e[48;5;59m \e[48;5;237m \e[48;5;233m \e[0m
\e[48;5;0m \e[48;5;232m \e[48;5;234m \e[48;5;137m \e[48;5;95m \e[48;5;137m \e[48;5;238m \e[48;5;235m \e[48;5;233m \e[48;5;235m \e[48;5;137m \e[48;5;131m \e[48;5;95m \e[48;5;52m \e[48;5;88m \e[48;5;95m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;242m \e[48;5;247m \e[48;5;145m \e[48;5;248m \e[48;5;240m \e[48;5;237m \e[48;5;233m \e[0m
\e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;137m \e[48;5;234m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;233m \e[48;5;234m \e[48;5;173m \e[48;5;131m \e[48;5;94m \e[48;5;234m \e[48;5;52m \e[48;5;124m \e[48;5;95m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;250m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;250m \e[48;5;242m \e[48;5;235m \e[48;5;233m \e[0m
\e[48;5;0m \e[48;5;232m \e[48;5;233m \e[48;5;232m \e[48;5;233m \e[48;5;52m \e[48;5;137m \e[48;5;239m \e[48;5;235m \e[48;5;233m \e[48;5;234m \e[48;5;235m \e[48;5;233m \e[48;5;234m \e[48;5;137m \e[48;5;52m \e[48;5;234m \e[48;5;232m \e[48;5;52m \e[48;5;1m \e[48;5;124m \e[48;5;95m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;237m \e[48;5;240m \e[48;5;243m \e[48;5;145m \e[48;5;248m \e[48;5;241m \e[48;5;237m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;232m \e[48;5;0m \e[48;5;233m \e[48;5;234m \e[48;5;238m \e[48;5;95m \e[48;5;94m \e[48;5;238m \e[48;5;239m \e[48;5;95m \e[48;5;239m \e[48;5;238m \e[48;5;95m \e[48;5;94m \e[48;5;239m \e[48;5;233m \e[48;5;52m \e[48;5;88m \e[48;5;124m \e[48;5;95m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;242m \e[48;5;8m \e[48;5;245m \e[48;5;246m \e[48;5;249m \e[48;5;145m \e[48;5;246m \e[48;5;238m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;235m \e[48;5;236m \e[48;5;233m \e[48;5;235m \e[48;5;239m \e[48;5;95m \e[48;5;137m \e[48;5;95m \e[48;5;235m \e[48;5;234m \e[48;5;52m \e[48;5;232m \e[48;5;52m \e[48;5;1m \e[48;5;52m \e[48;5;124m \e[48;5;95m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;247m \e[48;5;241m \e[48;5;145m \e[48;5;238m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;233m \e[48;5;234m \e[48;5;235m \e[48;5;233m \e[48;5;234m \e[48;5;52m \e[48;5;234m \e[48;5;52m \e[48;5;234m \e[48;5;233m \e[48;5;52m \e[48;5;124m \e[48;5;95m \e[48;5;59m \e[48;5;249m \e[48;5;247m \e[48;5;241m \e[48;5;247m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;238m \e[48;5;234m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;233m \e[48;5;234m \e[48;5;238m \e[48;5;237m \e[48;5;235m \e[48;5;234m \e[48;5;235m \e[48;5;61m \e[48;5;234m \e[48;5;235m \e[48;5;89m \e[48;5;124m \e[48;5;88m \e[48;5;124m \e[48;5;88m \e[48;5;234m \e[48;5;60m \e[48;5;61m \e[48;5;235m \e[48;5;124m \e[48;5;88m \e[48;5;241m \e[48;5;247m \e[48;5;145m \e[48;5;250m \e[48;5;241m \e[48;5;249m \e[48;5;145m \e[48;5;249m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;232m \e[48;5;233m \e[48;5;235m \e[48;5;237m \e[48;5;243m \e[48;5;242m \e[48;5;238m \e[48;5;234m \e[48;5;235m \e[48;5;4m \e[48;5;235m \e[48;5;53m \e[48;5;88m \e[48;5;124m \e[48;5;125m \e[48;5;124m \e[48;5;88m \e[48;5;238m \e[48;5;4m \e[48;5;25m \e[48;5;26m \e[48;5;19m \e[48;5;4m \e[48;5;236m \e[48;5;1m \e[48;5;125m \e[48;5;124m \e[48;5;88m \e[48;5;95m \e[48;5;8m \e[48;5;245m \e[48;5;246m \e[48;5;239m \e[48;5;241m \e[48;5;242m \e[48;5;245m \e[48;5;249m \e[48;5;145m \e[48;5;245m \e[48;5;233m \e[48;5;232m \e[48;5;0m \e[0m
\e[48;5;233m \e[48;5;237m \e[48;5;241m \e[48;5;145m \e[48;5;248m \e[48;5;247m \e[48;5;241m \e[48;5;234m \e[48;5;18m \e[48;5;19m \e[48;5;234m \e[48;5;88m \e[48;5;124m \e[48;5;88m \e[48;5;237m \e[48;5;17m \e[48;5;26m \e[48;5;25m \e[48;5;26m \e[48;5;55m \e[48;5;234m \e[48;5;89m \e[48;5;124m \e[48;5;88m \e[48;5;124m \e[48;5;95m \e[48;5;59m \e[48;5;242m \e[48;5;237m \e[48;5;59m \e[48;5;243m \e[48;5;145m \e[48;5;249m \e[48;5;145m \e[48;5;248m \e[48;5;242m \e[48;5;233m \e[48;5;0m \e[0m
\e[48;5;233m \e[48;5;238m \e[48;5;246m \e[48;5;145m \e[48;5;249m \e[48;5;59m \e[48;5;238m \e[48;5;236m \e[48;5;234m \e[48;5;56m \e[48;5;55m \e[48;5;234m \e[48;5;88m \e[48;5;124m \e[48;5;234m \e[48;5;18m \e[48;5;26m \e[48;5;20m \e[48;5;19m \e[48;5;234m \e[48;5;89m \e[48;5;124m \e[48;5;1m \e[48;5;52m \e[48;5;235m \e[48;5;242m \e[48;5;237m \e[48;5;59m \e[48;5;243m \e[48;5;249m \e[48;5;145m \e[48;5;238m \e[48;5;233m \e[48;5;0m \e[0m
\e[48;5;233m \e[48;5;238m \e[48;5;246m \e[48;5;145m \e[48;5;248m \e[48;5;145m \e[48;5;245m \e[48;5;234m \e[48;5;143m \e[48;5;239m \e[48;5;236m \e[48;5;235m \e[48;5;55m \e[48;5;96m \e[48;5;137m \e[48;5;236m \e[48;5;54m \e[48;5;25m \e[48;5;235m \e[48;5;89m \e[48;5;124m \e[48;5;52m \e[48;5;233m \e[48;5;234m \e[48;5;238m \e[48;5;235m \e[48;5;233m \e[48;5;102m \e[48;5;0m \e[0m
\e[48;5;233m \e[48;5;238m \e[48;5;246m \e[48;5;145m \e[48;5;248m \e[48;5;243m \e[48;5;241m \e[48;5;94m \e[48;5;143m \e[48;5;136m \e[48;5;95m \e[48;5;18m \e[48;5;4m \e[48;5;60m \e[48;5;137m \e[48;5;136m \e[48;5;172m \e[48;5;94m \e[48;5;60m \e[48;5;61m \e[48;5;4m \e[48;5;236m \e[48;5;88m \e[48;5;124m \e[48;5;52m \e[48;5;234m \e[48;5;0m \e[48;5;232m \e[48;5;0m \e[48;5;232m \e[48;5;234m \e[48;5;235m \e[48;5;234m \e[48;5;232m \e[48;5;59m \e[48;5;0m \e[0m
\e[48;5;232m \e[48;5;238m \e[48;5;247m \e[48;5;145m \e[48;5;239m \e[48;5;237m \e[48;5;137m \e[48;5;136m \e[48;5;137m \e[48;5;20m \e[48;5;26m \e[48;5;20m \e[48;5;25m \e[48;5;137m \e[48;5;136m \e[48;5;60m \e[48;5;20m \e[48;5;26m \e[48;5;234m \e[48;5;236m \e[48;5;88m \e[48;5;124m \e[48;5;234m \e[48;5;0m \e[48;5;232m \e[48;5;234m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;233m \e[48;5;240m \e[48;5;243m \e[48;5;249m \e[48;5;240m \e[48;5;237m \e[48;5;137m \e[48;5;136m \e[48;5;137m \e[48;5;20m \e[48;5;26m \e[48;5;25m \e[48;5;20m \e[48;5;19m \e[48;5;137m \e[48;5;173m \e[48;5;137m \e[48;5;136m \e[48;5;137m \e[48;5;60m \e[48;5;26m \e[48;5;25m \e[48;5;56m \e[48;5;4m \e[48;5;234m \e[48;5;124m \e[48;5;235m \e[48;5;234m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;233m \e[48;5;237m \e[48;5;59m \e[48;5;145m \e[48;5;248m \e[48;5;239m \e[48;5;235m \e[48;5;54m \e[48;5;143m \e[48;5;94m \e[48;5;237m \e[48;5;20m \e[48;5;26m \e[48;5;25m \e[48;5;20m \e[48;5;26m \e[48;5;61m \e[48;5;95m \e[48;5;136m \e[48;5;52m \e[48;5;237m \e[48;5;20m \e[48;5;26m \e[48;5;20m \e[48;5;25m \e[48;5;24m \e[48;5;236m \e[48;5;235m \e[48;5;239m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;233m \e[48;5;235m \e[48;5;237m \e[48;5;102m \e[48;5;145m \e[48;5;239m \e[48;5;235m \e[48;5;19m \e[48;5;60m \e[48;5;239m \e[48;5;237m \e[48;5;26m \e[48;5;20m \e[48;5;26m \e[48;5;61m \e[48;5;243m \e[48;5;60m \e[48;5;237m \e[48;5;54m \e[48;5;20m \e[48;5;26m \e[48;5;20m \e[48;5;26m \e[48;5;25m \e[48;5;4m \e[48;5;235m \e[48;5;234m \e[48;5;238m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;233m \e[48;5;235m \e[48;5;241m \e[48;5;249m \e[48;5;239m \e[48;5;235m \e[48;5;19m \e[48;5;26m \e[48;5;55m \e[48;5;26m \e[48;5;20m \e[48;5;61m \e[48;5;26m \e[48;5;19m \e[48;5;20m \e[48;5;25m \e[48;5;26m \e[48;5;20m \e[48;5;4m \e[48;5;235m \e[48;5;234m \e[48;5;238m \e[48;5;0m \e[0m
\e[48;5;0m \e[48;5;232m \e[48;5;234m \e[48;5;237m \e[48;5;236m \e[48;5;235m \e[48;5;19m \e[48;5;26m \e[48;5;20m \e[48;5;26m \e[48;5;20m \e[48;5;4m \e[48;5;235m \e[48;5;234m \e[48;5;238m \e[48;5;0m \e[0m
";