├── go.mod
├── assets
├── bg.jpg
└── style.css
├── dockerignore
├── templates
├── about.html
└── index.html
├── main.go
├── commands.sh
├── Dockerfile
├── features
├── template_handling.go
├── inputs_validation.go
├── handlers.go
└── asciiart_process.go
├── README.md
└── banners
├── thinkertoy.txt
├── standard.txt
└── shadow.txt
/go.mod:
--------------------------------------------------------------------------------
1 | module ascii_art_web
2 |
3 | go 1.22.3
4 |
--------------------------------------------------------------------------------
/assets/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hmaach/ascii-art-web/HEAD/assets/bg.jpg
--------------------------------------------------------------------------------
/dockerignore:
--------------------------------------------------------------------------------
1 | # Ignore version control system directories
2 | .git
3 | .gitignore
4 |
5 | # Ignore Docker-specific files
6 | Dockerfile
7 | .dockerignore
8 |
9 | # Ignore the commands script as it's not needed inside the container
10 | commands.sh
11 |
12 | # Ignore the README as it's not needed in the image
13 | README.md
14 |
15 |
--------------------------------------------------------------------------------
/templates/about.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | About
7 |
8 |
9 |
10 |
Welcome to our first Gofer powered Server
11 |
Credit:
12 |
Ismail Bentour | Hamza Maach
13 |
@2024 Zone01 Oujda
14 |
Home Page
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "net/http"
6 |
7 | ft "ascii_art_web/features"
8 | )
9 |
10 | func main() {
11 | // Creat a costum file server handler
12 | fs := http.FileServer(http.Dir("./assets"))
13 | http.Handle("/assets/", http.StripPrefix("/assets/", fs))
14 | http.HandleFunc("/", ft.Handler)
15 | fmt.Println("Starting the server on : http://localhost:8080")
16 | err := http.ListenAndServe(":8080", nil)
17 | if err != nil {
18 | fmt.Println("500 | Internal Server Error :", err)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/commands.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Stop the running container
4 | docker stop ascii-art-web-con
5 |
6 | # Remove unused data
7 | docker system prune -f
8 |
9 | # Remove the old image (corrected typo in command)
10 | docker rmi ascii-art-web-img
11 |
12 | # Build a new image
13 | docker build -f Dockerfile -t ascii-art-web-img .
14 |
15 | # Run a new container
16 | docker run -d -p 8080:8080 --name ascii-art-web-con ascii-art-web-img
17 |
18 | # Execute an interactive bash shell in the running container
19 | docker exec -it ascii-art-web-con /bin/bash
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | # Use a specific version of Go with Alpine as the base image
2 | FROM golang:1.22.3-alpine
3 |
4 | # Install bash
5 | RUN apk add bash
6 |
7 | # Set the working directory in the container
8 | WORKDIR /app
9 |
10 | # Copy the current directory contents into the container at /app
11 | COPY . /app
12 |
13 | # Add metadata to the image
14 | LABEL project="ascii-art-web" \
15 | version="1.0" \
16 | repo="https://learn.zone01oujda.ma/git/hmaach/ascii-art-web-dockerize"
17 |
18 | # Build the Go application
19 | RUN go build -o main
20 |
21 | # Expose port 8080 to the outside world
22 | EXPOSE 8080
23 |
24 | # Command to run the application
25 | CMD ["./main"]
--------------------------------------------------------------------------------
/features/template_handling.go:
--------------------------------------------------------------------------------
1 | package ascii_art_web
2 |
3 | import (
4 | "fmt"
5 | "html/template"
6 | "net/http"
7 | )
8 |
9 | // RenderTemplate renders the specified template with data
10 | func RenderTemplate(w http.ResponseWriter, tmpl string, data Data) {
11 |
12 | t, err := template.ParseFiles("templates/" + tmpl)
13 | if err != nil {
14 | http.Error(w, "500 | Internal Server Error !", http.StatusInternalServerError)
15 | fmt.Println("Error: ", err)
16 | return
17 | }
18 |
19 | err = t.ExecuteTemplate(w, tmpl, data)
20 | if err != nil {
21 | http.Error(w, "500 | Internal Server Error !", http.StatusInternalServerError)
22 | fmt.Println("Error executing the template: ", err)
23 | return
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/features/inputs_validation.go:
--------------------------------------------------------------------------------
1 | package ascii_art_web
2 |
3 | import (
4 | "net/http"
5 | "strings"
6 | )
7 |
8 | func checkBanner(banner string) bool {
9 | switch banner {
10 | case "shadow", "standard", "thinkertoy":
11 | default:
12 | return true
13 | }
14 |
15 | return false
16 | }
17 |
18 | // validates if the input contains only printable ASCII characters
19 | func checkValidString(input string) bool {
20 | input = strings.ReplaceAll(input, "\r", "")
21 | input = strings.ReplaceAll(input, "\n", "")
22 | for _, char := range input {
23 | if int(char) < 32 || int(char) > 126 {
24 | return true
25 | }
26 | }
27 | return false
28 | }
29 |
30 | // ValidateInput checks the validity of the input string, banner, and other parameters
31 | func ValidateInput(w http.ResponseWriter, str, banner string) bool {
32 | if checkBanner(banner) {
33 | http.Error(w, "404 | Banner not found", http.StatusNotFound)
34 | return false
35 | }
36 | if str == "" {
37 | http.Error(w, "400 | Bad Request: No input provided", http.StatusBadRequest)
38 | return false
39 | }
40 | if len(str) > 1000 {
41 | http.Error(w, "413 | The input must contain under 1000 characters.", http.StatusRequestEntityTooLarge)
42 | return false
43 | }
44 | if checkValidString(str) {
45 | http.Error(w, "400 | Bad Request: Invalid input. The input must contain characters with ASCII values ranging from 32 to 126.", http.StatusBadRequest)
46 | return false
47 | }
48 | return true
49 | }
50 |
--------------------------------------------------------------------------------
/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | ASCII ART WEB
9 |
10 |
11 |
12 |
13 |
35 |
36 | {{if .Ascii_art}}
37 |
40 | {{end}}
41 |
42 | About
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/features/handlers.go:
--------------------------------------------------------------------------------
1 | package ascii_art_web
2 |
3 | import (
4 | "fmt"
5 | "net/http"
6 | "strings"
7 | )
8 |
9 | type Data struct {
10 | Ascii_art string
11 | Input string
12 | Banner string
13 | }
14 |
15 | // DownloadHandler handles the download of the ASCII art file
16 |
17 | // HandleAsciiArt processes the "ascii-art" route
18 | func HandleAsciiArt(w http.ResponseWriter, r *http.Request, tmpl string) {
19 | str := r.FormValue("string")
20 | banner := r.FormValue("banner")
21 | export := r.Form.Has("Download")
22 |
23 | if !ValidateInput(w, str, banner) {
24 | return
25 | }
26 |
27 | str = strings.ReplaceAll(str, "\r\n", "\n")
28 |
29 | asciiArt, err := ProcessInput(w, str, banner)
30 | if err != nil {
31 | http.Error(w, "500 | Internal Server Error !", http.StatusInternalServerError)
32 | return
33 | }
34 |
35 | data := Data{
36 | Ascii_art: asciiArt,
37 | Input: str,
38 | Banner: banner,
39 | }
40 | if export {
41 | filename := "ascii_art" + r.FormValue("filetype")
42 | w.Header().Set("Content-Disposition", "attachment; filename="+filename)
43 | w.Header().Set("Content-Length", fmt.Sprint(len(data.Ascii_art)))
44 | w.Header().Set("Content-Type", "text/plain")
45 | w.Write([]byte(data.Ascii_art))
46 | } else {
47 | RenderTemplate(w, tmpl, data)
48 | }
49 | }
50 |
51 | // MainHandler handles the root route and other casescases
52 | func Handler(w http.ResponseWriter, r *http.Request) {
53 | tmpl := "index.html"
54 |
55 | switch r.URL.Path {
56 | case "/":
57 | if r.Method != http.MethodGet {
58 | http.Error(w, "405 | Method Not Allowed: Use GET", http.StatusMethodNotAllowed)
59 | return
60 | }
61 |
62 | RenderTemplate(w, tmpl, Data{})
63 |
64 | case "/ascii-art":
65 | if r.Method != http.MethodPost {
66 | http.Error(w, "405 | Method Not Allowed: Use POST", http.StatusMethodNotAllowed)
67 | return
68 | }
69 | HandleAsciiArt(w, r, tmpl)
70 |
71 | case "/about":
72 | RenderTemplate(w, "about.html", Data{})
73 |
74 | default:
75 | http.NotFound(w, r)
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/features/asciiart_process.go:
--------------------------------------------------------------------------------
1 | package ascii_art_web
2 |
3 | import (
4 | "fmt"
5 | "net/http"
6 | "os"
7 | "strings"
8 | )
9 |
10 | // ProcessInput processes the input string, reads the banner, and produces the ASCII art
11 | func ProcessInput(w http.ResponseWriter, input, banner string) (string, error) {
12 | inputWithoutNewLines := strings.ReplaceAll(input, "\n", "")
13 | if len(inputWithoutNewLines) == 0 {
14 | return input, nil
15 | }
16 |
17 | charactersMap, err := readBanner(banner)
18 | if err != nil {
19 | return "", err
20 | }
21 |
22 | return drawASCIIArt(charactersMap, input), nil
23 | }
24 |
25 | // readBanner reads the banner file and returns the ASCII art characters in map [rune]string and err if it occurs
26 | func readBanner(banner string) (map[rune][]string, error) {
27 | data, err := os.ReadFile("banners/" + banner + ".txt")
28 | if err != nil {
29 | fmt.Printf("500 | Internal Server Error: Unable to read banner file: %s\n", err)
30 | return nil, err
31 | }
32 | stringData := string(data[1:])
33 | if banner == "thinkertoy" {
34 | stringData = strings.ReplaceAll(stringData, "\r", "")
35 | }
36 | content := strings.Split(stringData, "\n\n")
37 | charactersMap := convertTocharacterMap(content)
38 | return charactersMap, nil
39 | }
40 |
41 | // DrawASCIIArt draws ASCII art and colorizes specific substrings
42 | // Render the ASCII art based on the character map and the input lines
43 | func drawASCIIArt(characterMatrix map[rune][]string, input string) string {
44 | result := ""
45 | splittedInput := strings.Split(input, "\n")
46 |
47 | for _, val := range splittedInput {
48 | if val == "" {
49 | result += "\n"
50 | } else if val != "" {
51 | for j := 0; j < 8; j++ {
52 | for _, k := range val {
53 | result += characterMatrix[k][j]
54 | }
55 | result += "\n"
56 | }
57 | }
58 | }
59 | return result
60 | }
61 |
62 | // Convert content array to a character mapping ASCII characters to their line representations
63 | func convertTocharacterMap(content []string) map[rune][]string {
64 | charactersMap := map[rune][]string{}
65 | for i, val := range content {
66 | charactersMap[rune(32+i)] = strings.Split(val, "\n")
67 | }
68 | return charactersMap
69 | }
70 |
--------------------------------------------------------------------------------
/assets/style.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --primary-color: #FD5E53;
3 | --bg-color: #252424a6;
4 | --input-bg-color: #ffffffcb;
5 | }
6 |
7 |
8 | body {
9 | font-family: Arial, sans-serif;
10 | background-image: url('/assets/bg.jpg');
11 | background-size: cover;
12 | background-repeat: no-repeat;
13 | background-attachment: fixed;
14 | background-color: rgba(0, 0, 0, 0.514);
15 | background-blend-mode: darken;
16 | color: #fff;
17 | }
18 |
19 |
20 | form {
21 | margin: 20px 0;
22 | background-color: var(--bg-color);
23 | display: flex;
24 | flex-direction: column;
25 | gap: 10px;
26 | width: 50%;
27 | border-radius: 20px;
28 | border: 3px solid var(--primary-color);
29 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.274);
30 | }
31 |
32 | textarea {
33 | margin: 5px 15px;
34 | resize: none;
35 | min-height: 150px;
36 | background-color: var(--input-bg-color);
37 | border: 2px solid var(--primary-color);
38 | border-radius: 10px;
39 | box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
40 | }
41 |
42 | textarea:focus,
43 | select:focus {
44 | outline: none;
45 | }
46 |
47 | select {
48 | margin: 5px 15px;
49 | border: 2px solid var(--primary-color);
50 | background-color: var(--input-bg-color);
51 | border-radius: 10px;
52 | cursor: pointer;
53 | text-align: center;
54 | box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
55 | }
56 |
57 | input[type="submit"] {
58 | padding: 10px 25px;
59 | font-size: 20px;
60 | font-weight: 700;
61 | border: 0px;
62 | border-radius: 10px;
63 | margin-bottom: 10px;
64 | background-color: var(--primary-color);
65 | color: white;
66 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
67 | }
68 |
69 | input[type="submit"]:hover {
70 | background-color: var(--primary-color);
71 | cursor: pointer;
72 | box-shadow: 1px 1px 8px var(--primary-color);
73 | }
74 |
75 | textarea,
76 | select {
77 | font-size: 16px;
78 | padding: 10px;
79 | font-weight: bolder;
80 | }
81 |
82 | #result {
83 | background-color: var(--bg-color);
84 | min-height: 160px;
85 | width: fit-content;
86 | min-width: 50%;
87 | max-width: 100%;
88 | margin-bottom: 10px;
89 | border: 3px dotted var(--primary-color);
90 | border-radius: 20px;
91 | color: black;
92 | overflow: auto;
93 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.274);
94 | text-shadow: 5px 5px 7px #fff;
95 | }
96 |
97 | pre {
98 | font-weight: bolder;
99 | min-width: 500px;
100 | margin: 10px 20px;
101 | color: #fff;
102 | text-align: start;
103 | }
104 |
105 | a {
106 | color: var(--primary-color);
107 | }
108 |
109 |
110 |
111 | @media (min-width: 1005px) and (max-width: 1281px) {
112 | form {
113 | width: 70%;
114 | }
115 |
116 | #result {
117 | width: 70%;
118 | }
119 |
120 |
121 | }
122 |
123 |
124 | @media (min-width: 200px) and (max-width: 1005px) {
125 | form {
126 | width: 95%;
127 | gap: 25px;
128 | padding: 30px 0;
129 | }
130 |
131 | #result {
132 | width: 95%;
133 | }
134 |
135 | textarea {
136 | min-height: 300px;
137 | font-size: 13px;
138 | font-weight: 500;
139 |
140 | }
141 | textarea::placeholder {
142 | font-size: 25px;
143 | font-weight: 500;
144 |
145 | }
146 |
147 | pre {
148 | font-weight: bolder;
149 | min-height: 400px;
150 | padding: 10px;
151 | }
152 |
153 | input[type="submit"] {
154 | padding: 10px 25px;
155 | font-size: 30px;
156 | font-weight: 700;
157 | }
158 |
159 | select {
160 | font-size: 25px;
161 | min-height: 70px;
162 | }
163 |
164 | h2 {
165 | font-size: 60px;
166 | }
167 | a{
168 | font-size: larger;
169 | }
170 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ASCII-Art-Web-export-file
2 |
3 | ## Description
4 |
5 | ASCII-Art-Web-Stylize is a web-based implementation of the ASCII-Art project. It allows users to input text and transform it into a graphical representation using ASCII characters. The web interface with HTML & CSS supports multiple banner styles, including `shadow`, `standard`, and `thinkertoy`.
6 |
7 | ## Authors
8 |
9 | - Ismail Bentour
10 | - Hamza Maach
11 |
12 | ## Usage
13 |
14 | ### Running the Application
15 |
16 | #### Option 1: Using Go directly
17 |
18 | 1. Clone the repository:
19 |
20 | ```sh
21 | git clone https://github.com/hamzamaach/ascii-art-web.git
22 | cd ascii-art-export-file
23 | ```
24 |
25 | 2. Run the Go application:
26 |
27 | ```sh
28 | go run .
29 | ```
30 |
31 | 3. Open your web browser and navigate to:
32 |
33 | ```
34 | http://localhost:8080
35 | ```
36 |
37 | #### Option 2: Using Docker
38 |
39 | 1. Clone the repository:
40 |
41 | ```sh
42 | git clone https://github.com/hamzamaach/ascii-art-web.git
43 | cd ascii-art-export-file
44 | ```
45 |
46 | 2. Build the Docker image:
47 |
48 | ```sh
49 | docker build -t ascii-art-web-img .
50 | ```
51 |
52 | 3. Run the Docker container:
53 |
54 | ```sh
55 | docker run -d -p 8080:8080 --name ascii-art-web-con ascii-art-web-img
56 | ```
57 |
58 | 4. Open your web browser and navigate to:
59 |
60 | ```
61 | http://localhost:8080
62 | ```
63 |
64 | To stop and remove the container:
65 |
66 | ```sh
67 | docker stop ascii-art-web-con
68 | docker rm ascii-art-web-con
69 | ```
70 |
71 | ### Web Interface
72 |
73 | 1. Enter your text in the input field.
74 | 2. Select the desired banner style (shadow, standard, or thinkertoy) using the dropdown selector.
75 | 3. Click the "Generate" button to generate the ASCII art or "Download" button to export the output as file.
76 |
77 | ## Implementation Details
78 |
79 | ### Algorithm
80 |
81 | 1. **Input Parsing**: The input string is read from the user via an HTML form.
82 | 2. **Banner Selection**: The selected banner style is determined based on user input.
83 | 3. **Text Conversion**: The input string is converted to its ASCII representation using the selected banner style.
84 | 4. **Output Rendering**: The resulting ASCII art can be displayed on the webpage or downloaded.
85 |
86 | ### File Structure
87 |
88 | - `main.go`: The main Go file that contains the HTTP server logic.
89 | - `index.html`: Main page template.
90 | - `about.html`: About page template.
91 | - `features/`: Directory containing files that contain all functions.
92 | - `assets/`: Directory containing all the CSS assets.
93 | - `banners/`: Directory containing banner files (`shadow.txt`, `standard.txt`, `thinkertoy.txt`).
94 | - `Dockerfile`: Contains instructions for building the Docker image.
95 |
96 | ### HTTP Endpoints
97 |
98 | 1. **GET /**: Sends the HTML response for the main page.
99 |
100 | - **Status Code**: 200 OK
101 |
102 | 2. **POST /ascii-art**: Receives text and banner data from the form, processes it, and returns the ASCII art.
103 |
104 | - **Status Code**:
105 | - 200 OK: If the text is successfully converted.
106 | - 400 Bad Request: If the request is invalid.
107 | - 404 Not Found: If the page or the banner style is not found.
108 | - 500 Internal Server Error: For unhandled errors.
109 |
110 | ### Error Handling
111 |
112 | - **Invalid Input**: Returns a 400 Bad Request status.
113 | - **Page not Found**: Returns a 404 Not Found status.
114 | - **Invalid Banner**: Returns a 404 Not Found status.
115 | - **Entity Too Large**: Returns a 413 Entity Too Large.
116 | - **Method Not Allowed**: Returns a Method Not Allowed status.
117 | - **Unhandled Errors**: Returns a 500 Internal Server Error status.
118 |
119 | ## Docker
120 |
121 | The application can be containerized using Docker. The `Dockerfile` in the root directory contains the necessary instructions to build the image.
122 |
123 | To build and run the Docker container, follow the steps in the "Usage" section under "Option 2: Using Docker".
--------------------------------------------------------------------------------
/banners/thinkertoy.txt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | o
13 | |
14 | o
15 |
16 | O
17 |
18 |
19 |
20 | o o
21 | | |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | | |
31 | -O-O-
32 | | |
33 | -O-O-
34 | | |
35 |
36 |
37 |
38 | | |
39 | -O-O-
40 | o | |
41 | -O-O-
42 | | | o
43 | -O-O-
44 | | |
45 |
46 |
47 |
48 | O
49 | o /
50 | /
51 | / o
52 | O
53 |
54 |
55 |
56 |
57 |
58 | o
59 | /|
60 | o-O-
61 | |
62 |
63 |
64 |
65 | o
66 | |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | /
76 | o
77 | |
78 | o
79 | \
80 |
81 |
82 |
83 |
84 | \
85 | o
86 | |
87 | o
88 | /
89 |
90 |
91 |
92 |
93 | o | o
94 | \|/
95 | --O--
96 | /|\
97 | o | o
98 |
99 |
100 |
101 |
102 |
103 | |
104 | -o-
105 | |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | o
116 | |
117 |
118 |
119 |
120 |
121 |
122 |
123 | o-o
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 | O
134 |
135 |
136 |
137 |
138 | o
139 | /
140 | o
141 | /
142 | o
143 |
144 |
145 |
146 |
147 | o-o
148 | o /o
149 | | / |
150 | o/ o
151 | o-o
152 |
153 |
154 |
155 |
156 | 0
157 | /|
158 | o |
159 | |
160 | o-o-o
161 |
162 |
163 |
164 |
165 | --
166 | o o
167 | /
168 | /
169 | o--o
170 |
171 |
172 |
173 |
174 | o-o
175 | |
176 | oo
177 | |
178 | o-o
179 |
180 |
181 |
182 |
183 | o o
184 | | |
185 | o--O
186 | |
187 | o
188 |
189 |
190 |
191 |
192 | o--o
193 | |
194 | o-o
195 | |
196 | o-o
197 |
198 |
199 |
200 |
201 | o
202 | /
203 | O--o
204 | o |
205 | o-o
206 |
207 |
208 |
209 |
210 | o---o
211 | /
212 | o
213 | |
214 | o
215 |
216 |
217 |
218 |
219 | o-o
220 | | |
221 | o-o
222 | | |
223 | o-o
224 |
225 |
226 |
227 |
228 | o-o
229 | | o
230 | o--O
231 | /
232 | o
233 |
234 |
235 |
236 |
237 |
238 | O
239 |
240 | O
241 |
242 |
243 |
244 |
245 |
246 |
247 | o
248 |
249 | o
250 | |
251 |
252 |
253 |
254 |
255 | o
256 | /
257 | O
258 | \
259 | o
260 |
261 |
262 |
263 |
264 |
265 |
266 | o--o
267 | o--o
268 |
269 |
270 |
271 |
272 |
273 | o
274 | \
275 | O
276 | /
277 | o
278 |
279 |
280 |
281 |
282 | o-o
283 | o o
284 | /
285 | o
286 |
287 | O
288 |
289 |
290 |
291 | o
292 | / \
293 | o O-o
294 | \
295 | o-
296 |
297 |
298 |
299 |
300 | O
301 | / \
302 | o---o
303 | | |
304 | o o
305 |
306 |
307 |
308 |
309 | o--o
310 | | |
311 | O--o
312 | | |
313 | o--o
314 |
315 |
316 |
317 |
318 | o-o
319 | /
320 | O
321 | \
322 | o-o
323 |
324 |
325 |
326 |
327 | o-o
328 | | \
329 | | O
330 | | /
331 | o-o
332 |
333 |
334 |
335 |
336 | o--o
337 | |
338 | O-o
339 | |
340 | o--o
341 |
342 |
343 |
344 |
345 | o--o
346 | |
347 | O-o
348 | |
349 | o
350 |
351 |
352 |
353 |
354 | o-o
355 | o
356 | | -o
357 | o |
358 | o-o
359 |
360 |
361 |
362 |
363 | o o
364 | | |
365 | O--O
366 | | |
367 | o o
368 |
369 |
370 |
371 |
372 | o-O-o
373 | |
374 | |
375 | |
376 | o-O-o
377 |
378 |
379 |
380 |
381 | o
382 | |
383 | |
384 | \ o
385 | o-o
386 |
387 |
388 |
389 |
390 | o o
391 | | /
392 | OO
393 | | \
394 | o o
395 |
396 |
397 |
398 |
399 | o
400 | |
401 | |
402 | |
403 | O---o
404 |
405 |
406 |
407 |
408 | o o
409 | |\ /|
410 | | O |
411 | | |
412 | o o
413 |
414 |
415 |
416 |
417 | o o
418 | |\ |
419 | | \ |
420 | | \|
421 | o o
422 |
423 |
424 |
425 |
426 | o-o
427 | o o
428 | | |
429 | o o
430 | o-o
431 |
432 |
433 |
434 |
435 | o--o
436 | | |
437 | O--o
438 | |
439 | o
440 |
441 |
442 |
443 |
444 | o-o
445 | o o
446 | | |
447 | o O
448 | o-O\
449 |
450 |
451 |
452 |
453 | o--o
454 | | |
455 | O-Oo
456 | | \
457 | o o
458 |
459 |
460 |
461 |
462 | o-o
463 | |
464 | o-o
465 | |
466 | o--o
467 |
468 |
469 |
470 |
471 | o-O-o
472 | |
473 | |
474 | |
475 | o
476 |
477 |
478 |
479 |
480 | o o
481 | | |
482 | | |
483 | | |
484 | o-o
485 |
486 |
487 |
488 |
489 | o o
490 | | |
491 | o o
492 | \ /
493 | o
494 |
495 |
496 |
497 |
498 | o o
499 | | |
500 | o o o
501 | \ / \ /
502 | o o
503 |
504 |
505 |
506 |
507 | o o
508 | \ /
509 | O
510 | / \
511 | o o
512 |
513 |
514 |
515 |
516 | o o
517 | \ /
518 | O
519 | |
520 | o
521 |
522 |
523 |
524 |
525 | o---o
526 | /
527 | -O-
528 | /
529 | o---o
530 |
531 |
532 |
533 |
534 | O-o
535 | |
536 | |
537 | |
538 | O-o
539 |
540 |
541 |
542 |
543 | o
544 | \
545 | o
546 | \
547 | o
548 |
549 |
550 |
551 |
552 | o-O
553 | |
554 | |
555 | |
556 | o-O
557 |
558 |
559 |
560 |
561 | o
562 | / \
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 | o---o
575 |
576 |
577 |
578 |
579 | 0
580 | |
581 |
582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 |
590 | oo
591 | | |
592 | o-o-
593 |
594 |
595 |
596 |
597 | o
598 | |
599 | O-o
600 | | |
601 | o-o
602 |
603 |
604 |
605 |
606 |
607 |
608 | o-o
609 | |
610 | o-o
611 |
612 |
613 |
614 |
615 | o
616 | |
617 | o-O
618 | | |
619 | o-o
620 |
621 |
622 |
623 |
624 |
625 |
626 | o-o
627 | |-'
628 | o-o
629 |
630 |
631 |
632 |
633 | o-o
634 | |
635 | -O-
636 | |
637 | o
638 |
639 |
640 |
641 |
642 |
643 |
644 | o--o
645 | | |
646 | o--O
647 | |
648 | o--o
649 |
650 |
651 | o
652 | |
653 | O--o
654 | | |
655 | o o
656 |
657 |
658 |
659 |
660 |
661 | o
662 |
663 | |
664 | |
665 |
666 |
667 |
668 |
669 |
670 | o
671 |
672 | o
673 | |
674 | o o
675 | o-o
676 |
677 |
678 | o
679 | | /
680 | OO
681 | | \
682 | o o
683 |
684 |
685 |
686 |
687 | o
688 | |
689 | |
690 | |
691 | o
692 |
693 |
694 |
695 |
696 |
697 |
698 | o-O-o
699 | | | |
700 | o o o
701 |
702 |
703 |
704 |
705 |
706 |
707 | o-o
708 | | |
709 | o o
710 |
711 |
712 |
713 |
714 |
715 |
716 | o-o
717 | | |
718 | o-o
719 |
720 |
721 |
722 |
723 |
724 |
725 | o-o
726 | | |
727 | O-o
728 | |
729 | o
730 |
731 |
732 |
733 |
734 | o-o
735 | | |
736 | o-O
737 | |
738 | o
739 |
740 |
741 |
742 |
743 | o-o
744 | |
745 | o
746 |
747 |
748 |
749 |
750 |
751 |
752 | o-o
753 | \
754 | o-o
755 |
756 |
757 |
758 |
759 | o
760 | |
761 | -o-
762 | |
763 | o
764 |
765 |
766 |
767 |
768 |
769 |
770 | o o
771 | | |
772 | o--o
773 |
774 |
775 |
776 |
777 |
778 |
779 | o o
780 | \ /
781 | o
782 |
783 |
784 |
785 |
786 |
787 |
788 | o o o
789 | \ / \ /
790 | o o
791 |
792 |
793 |
794 |
795 |
796 |
797 | \ /
798 | o
799 | / \
800 |
801 |
802 |
803 |
804 |
805 |
806 | o o
807 | | |
808 | o--O
809 | |
810 | o--o
811 |
812 |
813 |
814 |
815 | o-o
816 | /
817 | o-o
818 |
819 |
820 |
821 |
822 | o-o
823 | |
824 | o-O
825 | |
826 | o-o
827 |
828 |
829 |
830 |
831 | o
832 | |
833 | o
834 | |
835 | o
836 |
837 |
838 |
839 |
840 | o-o
841 | |
842 | O-o
843 | |
844 | o-o
845 |
846 |
847 |
848 | o_ /
849 | / o
850 |
851 |
852 |
853 |
854 |
855 |
856 |
--------------------------------------------------------------------------------
/banners/standard.txt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | _
12 | | |
13 | | |
14 | | |
15 | |_|
16 | (_)
17 |
18 |
19 |
20 | _ _
21 | ( | )
22 | V V
23 |
24 |
25 |
26 |
27 |
28 |
29 | _ _
30 | _| || |_
31 | |_ __ _|
32 | _| || |_
33 | |_ __ _|
34 | |_||_|
35 |
36 |
37 |
38 | _
39 | | |
40 | / __)
41 | \__ \
42 | ( /
43 | |_|
44 |
45 |
46 |
47 | _ __
48 | (_) / /
49 | / /
50 | / /
51 | / / _
52 | /_/ (_)
53 |
54 |
55 |
56 |
57 | ___
58 | ( _ )
59 | / _ \/\
60 | | (_> <
61 | \___/\/
62 |
63 |
64 |
65 | _
66 | ( )
67 | |/
68 |
69 |
70 |
71 |
72 |
73 |
74 | __
75 | / /
76 | | |
77 | | |
78 | | |
79 | | |
80 | \_\
81 |
82 |
83 | __
84 | \ \
85 | | |
86 | | |
87 | | |
88 | | |
89 | /_/
90 |
91 |
92 | _
93 | /\| |/\
94 | \ ` ' /
95 | |_ _|
96 | / , . \
97 | \/|_|\/
98 |
99 |
100 |
101 |
102 | _
103 | _| |_
104 | |_ _|
105 | |_|
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 | _
115 | ( )
116 | |/
117 |
118 |
119 |
120 |
121 | ______
122 | |______|
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 | _
133 | (_)
134 |
135 |
136 |
137 | __
138 | / /
139 | / /
140 | / /
141 | / /
142 | /_/
143 |
144 |
145 |
146 |
147 | ___
148 | / _ \
149 | | | | |
150 | | |_| |
151 | \___/
152 |
153 |
154 |
155 |
156 | _
157 | / |
158 | | |
159 | | |
160 | |_|
161 |
162 |
163 |
164 |
165 | ____
166 | |___ \
167 | __) |
168 | / __/
169 | |_____|
170 |
171 |
172 |
173 |
174 | _____
175 | |___ /
176 | |_ \
177 | ___) |
178 | |____/
179 |
180 |
181 |
182 |
183 | _ _
184 | | || |
185 | | || |_
186 | |__ _|
187 | |_|
188 |
189 |
190 |
191 |
192 | ____
193 | | ___|
194 | |___ \
195 | __) |
196 | |____/
197 |
198 |
199 |
200 |
201 | __
202 | / /
203 | | '_ \
204 | | (_) |
205 | \___/
206 |
207 |
208 |
209 |
210 | _____
211 | |___ |
212 | / /
213 | / /
214 | /_/
215 |
216 |
217 |
218 |
219 | ___
220 | ( _ )
221 | / _ \
222 | | (_) |
223 | \___/
224 |
225 |
226 |
227 |
228 | ___
229 | / _ \
230 | | (_) |
231 | \__, |
232 | / /
233 | /_/
234 |
235 |
236 |
237 | _
238 | (_)
239 |
240 | _
241 | (_)
242 |
243 |
244 |
245 |
246 | _
247 | (_)
248 |
249 | _
250 | ( )
251 | |/
252 |
253 |
254 | __
255 | / /
256 | / /
257 | < <
258 | \ \
259 | \_\
260 |
261 |
262 |
263 |
264 | ______
265 | |______|
266 | ______
267 | |______|
268 |
269 |
270 |
271 |
272 | __
273 | \ \
274 | \ \
275 | > >
276 | / /
277 | /_/
278 |
279 |
280 |
281 | ___
282 | |__ \
283 | ) |
284 | / /
285 | |_|
286 | (_)
287 |
288 |
289 |
290 |
291 | ____
292 | / __ \
293 | / / _` |
294 | | | (_| |
295 | \ \__,_|
296 | \____/
297 |
298 |
299 |
300 | /\
301 | / \
302 | / /\ \
303 | / ____ \
304 | /_/ \_\
305 |
306 |
307 |
308 | ____
309 | | _ \
310 | | |_) |
311 | | _ <
312 | | |_) |
313 | |____/
314 |
315 |
316 |
317 | _____
318 | / ____|
319 | | |
320 | | |
321 | | |____
322 | \_____|
323 |
324 |
325 |
326 | _____
327 | | __ \
328 | | | | |
329 | | | | |
330 | | |__| |
331 | |_____/
332 |
333 |
334 |
335 | ______
336 | | ____|
337 | | |__
338 | | __|
339 | | |____
340 | |______|
341 |
342 |
343 |
344 | ______
345 | | ____|
346 | | |__
347 | | __|
348 | | |
349 | |_|
350 |
351 |
352 |
353 | _____
354 | / ____|
355 | | | __
356 | | | |_ |
357 | | |__| |
358 | \_____|
359 |
360 |
361 |
362 | _ _
363 | | | | |
364 | | |__| |
365 | | __ |
366 | | | | |
367 | |_| |_|
368 |
369 |
370 |
371 | _____
372 | |_ _|
373 | | |
374 | | |
375 | _| |_
376 | |_____|
377 |
378 |
379 |
380 | _
381 | | |
382 | | |
383 | _ | |
384 | | |__| |
385 | \____/
386 |
387 |
388 |
389 | _ __
390 | | |/ /
391 | | ' /
392 | | <
393 | | . \
394 | |_|\_\
395 |
396 |
397 |
398 | _
399 | | |
400 | | |
401 | | |
402 | | |____
403 | |______|
404 |
405 |
406 |
407 | __ __
408 | | \/ |
409 | | \ / |
410 | | |\/| |
411 | | | | |
412 | |_| |_|
413 |
414 |
415 |
416 | _ _
417 | | \ | |
418 | | \| |
419 | | . ` |
420 | | |\ |
421 | |_| \_|
422 |
423 |
424 |
425 | ____
426 | / __ \
427 | | | | |
428 | | | | |
429 | | |__| |
430 | \____/
431 |
432 |
433 |
434 | _____
435 | | __ \
436 | | |__) |
437 | | ___/
438 | | |
439 | |_|
440 |
441 |
442 |
443 | ____
444 | / __ \
445 | | | | |
446 | | | | |
447 | | |__| |
448 | \___\_\
449 |
450 |
451 |
452 | _____
453 | | __ \
454 | | |__) |
455 | | _ /
456 | | | \ \
457 | |_| \_\
458 |
459 |
460 |
461 | _____
462 | / ____|
463 | | (___
464 | \___ \
465 | ____) |
466 | |_____/
467 |
468 |
469 |
470 | _______
471 | |__ __|
472 | | |
473 | | |
474 | | |
475 | |_|
476 |
477 |
478 |
479 | _ _
480 | | | | |
481 | | | | |
482 | | | | |
483 | | |__| |
484 | \____/
485 |
486 |
487 |
488 | __ __
489 | \ \ / /
490 | \ \ / /
491 | \ \/ /
492 | \ /
493 | \/
494 |
495 |
496 |
497 | __ __
498 | \ \ / /
499 | \ \ /\ / /
500 | \ \/ \/ /
501 | \ /\ /
502 | \/ \/
503 |
504 |
505 |
506 | __ __
507 | \ \ / /
508 | \ V /
509 | > <
510 | / . \
511 | /_/ \_\
512 |
513 |
514 |
515 | __ __
516 | \ \ / /
517 | \ \_/ /
518 | \ /
519 | | |
520 | |_|
521 |
522 |
523 |
524 | ______
525 | |___ /
526 | / /
527 | / /
528 | / /__
529 | /_____|
530 |
531 |
532 |
533 | ___
534 | | _|
535 | | |
536 | | |
537 | | |
538 | | |_
539 | |___|
540 |
541 |
542 | __
543 | \ \
544 | \ \
545 | \ \
546 | \ \
547 | \_\
548 |
549 |
550 |
551 | ___
552 | |_ |
553 | | |
554 | | |
555 | | |
556 | _| |
557 | |___|
558 |
559 |
560 | /\
561 | |/\|
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 |
575 | ______
576 | |______|
577 |
578 | _
579 | ( )
580 | \|
581 |
582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 | __ _
590 | / _` |
591 | | (_| |
592 | \__,_|
593 |
594 |
595 |
596 | _
597 | | |
598 | | |__
599 | | '_ \
600 | | |_) |
601 | |_.__/
602 |
603 |
604 |
605 |
606 |
607 | ___
608 | / __|
609 | | (__
610 | \___|
611 |
612 |
613 |
614 | _
615 | | |
616 | __| |
617 | / _` |
618 | | (_| |
619 | \__,_|
620 |
621 |
622 |
623 |
624 |
625 | ___
626 | / _ \
627 | | __/
628 | \___|
629 |
630 |
631 |
632 | __
633 | / _|
634 | | |_
635 | | _|
636 | | |
637 | |_|
638 |
639 |
640 |
641 |
642 |
643 | __ _
644 | / _` |
645 | | (_| |
646 | \__, |
647 | __/ |
648 | |___/
649 |
650 | _
651 | | |
652 | | |__
653 | | _ \
654 | | | | |
655 | |_| |_|
656 |
657 |
658 |
659 | _
660 | (_)
661 | _
662 | | |
663 | | |
664 | |_|
665 |
666 |
667 |
668 | _
669 | (_)
670 | _
671 | | |
672 | | |
673 | | |
674 | _/ |
675 | |__/
676 |
677 |
678 | _
679 | | | _
680 | | |/ /
681 | | <
682 | |_|\_\
683 |
684 |
685 |
686 | _
687 | | |
688 | | |
689 | | |
690 | | |
691 | |_|
692 |
693 |
694 |
695 |
696 |
697 | _ __ ___
698 | | '_ ` _ \
699 | | | | | | |
700 | |_| |_| |_|
701 |
702 |
703 |
704 |
705 |
706 | _ __
707 | | '_ \
708 | | | | |
709 | |_| |_|
710 |
711 |
712 |
713 |
714 |
715 | ___
716 | / _ \
717 | | (_) |
718 | \___/
719 |
720 |
721 |
722 |
723 |
724 | _ __
725 | | '_ \
726 | | |_) |
727 | | .__/
728 | | |
729 | |_|
730 |
731 |
732 |
733 | __ _
734 | / _` |
735 | | (_| |
736 | \__, |
737 | | |
738 | |_|
739 |
740 |
741 |
742 | _ __
743 | | '__|
744 | | |
745 | |_|
746 |
747 |
748 |
749 |
750 |
751 | ___
752 | / __|
753 | \__ \
754 | |___/
755 |
756 |
757 |
758 | _
759 | | |
760 | | |_
761 | | __|
762 | \ |_
763 | \__|
764 |
765 |
766 |
767 |
768 |
769 | _ _
770 | | | | |
771 | | |_| |
772 | \__,_|
773 |
774 |
775 |
776 |
777 |
778 | __ __
779 | \ \ / /
780 | \ V /
781 | \_/
782 |
783 |
784 |
785 |
786 |
787 | __ __
788 | \ \ /\ / /
789 | \ V V /
790 | \_/\_/
791 |
792 |
793 |
794 |
795 |
796 | __ __
797 | \ \/ /
798 | > <
799 | /_/\_\
800 |
801 |
802 |
803 |
804 |
805 | _ _
806 | | | | |
807 | | |_| |
808 | \__, |
809 | __/ /
810 | |___/
811 |
812 |
813 |
814 | ____
815 | |_ /
816 | / /
817 | /___|
818 |
819 |
820 |
821 | __
822 | / /
823 | | |
824 | / /
825 | \ \
826 | | |
827 | \_\
828 |
829 |
830 | _
831 | | |
832 | | |
833 | | |
834 | | |
835 | | |
836 | | |
837 | |_|
838 |
839 | __
840 | \ \
841 | | |
842 | \ \
843 | / /
844 | | |
845 | /_/
846 |
847 |
848 | /\/|
849 | |/\/
850 |
851 |
852 |
853 |
854 |
855 |
856 |
--------------------------------------------------------------------------------
/banners/shadow.txt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | _|
13 | _|
14 | _|
15 |
16 | _|
17 |
18 |
19 |
20 | _| _|
21 | _| _|
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | _| _|
31 | _|_|_|_|_|
32 | _| _|
33 | _|_|_|_|_|
34 | _| _|
35 |
36 |
37 |
38 |
39 | _|
40 | _|_|_|
41 | _|_|
42 | _|_|
43 | _|_|_|
44 | _|
45 |
46 |
47 |
48 | _|_| _|
49 | _|_| _|
50 | _|
51 | _| _|_|
52 | _| _|_|
53 |
54 |
55 |
56 |
57 | _|
58 | _| _|
59 | _|_| _|
60 | _| _|
61 | _|_| _|
62 |
63 |
64 |
65 | _|
66 | _|
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | _|
75 | _|
76 | _|
77 | _|
78 | _|
79 | _|
80 | _|
81 |
82 |
83 | _|
84 | _|
85 | _|
86 | _|
87 | _|
88 | _|
89 | _|
90 |
91 |
92 |
93 | _| _| _|
94 | _|_|_|
95 | _|_|_|_|_|
96 | _|_|_|
97 | _| _| _|
98 |
99 |
100 |
101 |
102 | _|
103 | _|
104 | _|_|_|_|_|
105 | _|
106 | _|
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | _|
116 | _|
117 |
118 |
119 |
120 |
121 |
122 | _|_|_|_|_|
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 | _|
134 |
135 |
136 |
137 |
138 | _|
139 | _|
140 | _|
141 | _|
142 | _|
143 |
144 |
145 |
146 |
147 | _|
148 | _| _|
149 | _| _|
150 | _| _|
151 | _|
152 |
153 |
154 |
155 |
156 | _|
157 | _|_|
158 | _|
159 | _|
160 | _|
161 |
162 |
163 |
164 |
165 | _|_|
166 | _| _|
167 | _|
168 | _|
169 | _|_|_|_|
170 |
171 |
172 |
173 |
174 | _|_|_|
175 | _|
176 | _|_|
177 | _|
178 | _|_|_|
179 |
180 |
181 |
182 |
183 | _| _|
184 | _| _|
185 | _|_|_|_|
186 | _|
187 | _|
188 |
189 |
190 |
191 |
192 | _|_|_|_|
193 | _|
194 | _|_|_|
195 | _|
196 | _|_|_|
197 |
198 |
199 |
200 |
201 | _|_|_|
202 | _|
203 | _|_|_|
204 | _| _|
205 | _|_|
206 |
207 |
208 |
209 |
210 | _|_|_|_|_|
211 | _|
212 | _|
213 | _|
214 | _|
215 |
216 |
217 |
218 |
219 | _|_|
220 | _| _|
221 | _|_|
222 | _| _|
223 | _|_|
224 |
225 |
226 |
227 |
228 | _|_|
229 | _| _|
230 | _|_|_|
231 | _|
232 | _|_|_|
233 |
234 |
235 |
236 |
237 |
238 | _|
239 |
240 |
241 | _|
242 |
243 |
244 |
245 |
246 |
247 | _|
248 |
249 |
250 | _|
251 | _|
252 |
253 |
254 |
255 | _|
256 | _|
257 | _|
258 | _|
259 | _|
260 |
261 |
262 |
263 |
264 |
265 | _|_|_|_|_|
266 |
267 | _|_|_|_|_|
268 |
269 |
270 |
271 |
272 |
273 | _|
274 | _|
275 | _|
276 | _|
277 | _|
278 |
279 |
280 |
281 |
282 | _|_|
283 | _|
284 | _|_|
285 |
286 | _|
287 |
288 |
289 |
290 |
291 | _|_|_|_|_|
292 | _| _|
293 | _| _|_|_| _|
294 | _| _| _| _|
295 | _| _|_|_|_|
296 | _|
297 | _|_|_|_|_|_|
298 |
299 |
300 | _|_|
301 | _| _|
302 | _|_|_|_|
303 | _| _|
304 | _| _|
305 |
306 |
307 |
308 |
309 | _|_|_|
310 | _| _|
311 | _|_|_|
312 | _| _|
313 | _|_|_|
314 |
315 |
316 |
317 |
318 | _|_|_|
319 | _|
320 | _|
321 | _|
322 | _|_|_|
323 |
324 |
325 |
326 |
327 | _|_|_|
328 | _| _|
329 | _| _|
330 | _| _|
331 | _|_|_|
332 |
333 |
334 |
335 |
336 | _|_|_|_|
337 | _|
338 | _|_|_|
339 | _|
340 | _|_|_|_|
341 |
342 |
343 |
344 |
345 | _|_|_|_|
346 | _|
347 | _|_|_|
348 | _|
349 | _|
350 |
351 |
352 |
353 |
354 | _|_|_|
355 | _|
356 | _| _|_|
357 | _| _|
358 | _|_|_|
359 |
360 |
361 |
362 |
363 | _| _|
364 | _| _|
365 | _|_|_|_|
366 | _| _|
367 | _| _|
368 |
369 |
370 |
371 |
372 | _|_|_|
373 | _|
374 | _|
375 | _|
376 | _|_|_|
377 |
378 |
379 |
380 |
381 | _|
382 | _|
383 | _|
384 | _| _|
385 | _|_|
386 |
387 |
388 |
389 |
390 | _| _|
391 | _| _|
392 | _|_|
393 | _| _|
394 | _| _|
395 |
396 |
397 |
398 |
399 | _|
400 | _|
401 | _|
402 | _|
403 | _|_|_|_|
404 |
405 |
406 |
407 |
408 | _| _|
409 | _|_| _|_|
410 | _| _| _|
411 | _| _|
412 | _| _|
413 |
414 |
415 |
416 |
417 | _| _|
418 | _|_| _|
419 | _| _| _|
420 | _| _|_|
421 | _| _|
422 |
423 |
424 |
425 |
426 | _|_|
427 | _| _|
428 | _| _|
429 | _| _|
430 | _|_|
431 |
432 |
433 |
434 |
435 | _|_|_|
436 | _| _|
437 | _|_|_|
438 | _|
439 | _|
440 |
441 |
442 |
443 |
444 | _|_|
445 | _| _|
446 | _| _|_|
447 | _| _|
448 | _|_| _|
449 |
450 |
451 |
452 |
453 | _|_|_|
454 | _| _|
455 | _|_|_|
456 | _| _|
457 | _| _|
458 |
459 |
460 |
461 |
462 | _|_|_|
463 | _|
464 | _|_|
465 | _|
466 | _|_|_|
467 |
468 |
469 |
470 |
471 | _|_|_|_|_|
472 | _|
473 | _|
474 | _|
475 | _|
476 |
477 |
478 |
479 |
480 | _| _|
481 | _| _|
482 | _| _|
483 | _| _|
484 | _|_|
485 |
486 |
487 |
488 |
489 | _| _|
490 | _| _|
491 | _| _|
492 | _| _|
493 | _|
494 |
495 |
496 |
497 |
498 | _| _|
499 | _| _|
500 | _| _| _|
501 | _| _| _|
502 | _| _|
503 |
504 |
505 |
506 |
507 | _| _|
508 | _| _|
509 | _|
510 | _| _|
511 | _| _|
512 |
513 |
514 |
515 |
516 | _| _|
517 | _| _|
518 | _|
519 | _|
520 | _|
521 |
522 |
523 |
524 |
525 | _|_|_|_|_|
526 | _|
527 | _|
528 | _|
529 | _|_|_|_|_|
530 |
531 |
532 |
533 | _|_|
534 | _|
535 | _|
536 | _|
537 | _|
538 | _|
539 | _|_|
540 |
541 |
542 |
543 | _|
544 | _|
545 | _|
546 | _|
547 | _|
548 |
549 |
550 |
551 | _|_|
552 | _|
553 | _|
554 | _|
555 | _|
556 | _|
557 | _|_|
558 |
559 |
560 | _|
561 | _| _|
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 |
575 |
576 | _|_|_|_|_|
577 |
578 | _|
579 | _|
580 |
581 |
582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 | _|_|_|
590 | _| _|
591 | _| _|
592 | _|_|_|
593 |
594 |
595 |
596 |
597 | _|
598 | _|_|_|
599 | _| _|
600 | _| _|
601 | _|_|_|
602 |
603 |
604 |
605 |
606 |
607 | _|_|_|
608 | _|
609 | _|
610 | _|_|_|
611 |
612 |
613 |
614 |
615 | _|
616 | _|_|_|
617 | _| _|
618 | _| _|
619 | _|_|_|
620 |
621 |
622 |
623 |
624 |
625 | _|_|
626 | _|_|_|_|
627 | _|
628 | _|_|_|
629 |
630 |
631 |
632 |
633 | _|_|
634 | _|
635 | _|_|_|_|
636 | _|
637 | _|
638 |
639 |
640 |
641 |
642 |
643 | _|_|_|
644 | _| _|
645 | _| _|
646 | _|_|_|
647 | _|
648 | _|_|
649 |
650 |
651 | _|
652 | _|_|_|
653 | _| _|
654 | _| _|
655 | _| _|
656 |
657 |
658 |
659 |
660 | _|
661 |
662 | _|
663 | _|
664 | _|
665 |
666 |
667 |
668 |
669 | _|
670 |
671 | _|
672 | _|
673 | _|
674 | _|
675 | _|
676 |
677 |
678 | _|
679 | _| _|
680 | _|_|
681 | _| _|
682 | _| _|
683 |
684 |
685 |
686 |
687 | _|
688 | _|
689 | _|
690 | _|
691 | _|
692 |
693 |
694 |
695 |
696 |
697 | _|_|_| _|_|
698 | _| _| _|
699 | _| _| _|
700 | _| _| _|
701 |
702 |
703 |
704 |
705 |
706 | _|_|_|
707 | _| _|
708 | _| _|
709 | _| _|
710 |
711 |
712 |
713 |
714 |
715 | _|_|
716 | _| _|
717 | _| _|
718 | _|_|
719 |
720 |
721 |
722 |
723 |
724 | _|_|_|
725 | _| _|
726 | _| _|
727 | _|_|_|
728 | _|
729 | _|
730 |
731 |
732 |
733 | _|_|_|
734 | _| _|
735 | _| _|
736 | _|_|_|
737 | _|
738 | _|
739 |
740 |
741 |
742 | _| _|_|
743 | _|_|
744 | _|
745 | _|
746 |
747 |
748 |
749 |
750 |
751 | _|_|_|
752 | _|_|
753 | _|_|
754 | _|_|_|
755 |
756 |
757 |
758 |
759 | _|
760 | _|_|_|_|
761 | _|
762 | _|
763 | _|_|
764 |
765 |
766 |
767 |
768 |
769 | _| _|
770 | _| _|
771 | _| _|
772 | _|_|_|
773 |
774 |
775 |
776 |
777 |
778 | _| _|
779 | _| _|
780 | _| _|
781 | _|
782 |
783 |
784 |
785 |
786 |
787 | _| _| _|
788 | _| _| _|
789 | _| _| _| _|
790 | _| _|
791 |
792 |
793 |
794 |
795 |
796 | _| _|
797 | _|_|
798 | _| _|
799 | _| _|
800 |
801 |
802 |
803 |
804 |
805 | _| _|
806 | _| _|
807 | _| _|
808 | _|_|_|
809 | _|
810 | _|_|
811 |
812 |
813 |
814 | _|_|_|_|
815 | _|
816 | _|
817 | _|_|_|_|
818 |
819 |
820 |
821 | _|
822 | _|
823 | _|
824 | _|
825 | _|
826 | _|
827 | _|
828 |
829 |
830 | _|
831 | _|
832 | _|
833 | _|
834 | _|
835 | _|
836 | _|
837 | _|
838 |
839 | _|
840 | _|
841 | _|
842 | _|
843 | _|
844 | _|
845 | _|
846 |
847 |
848 | _| _|
849 | _| _|
850 |
851 |
852 |
853 |
854 |
855 |
856 |
--------------------------------------------------------------------------------