├── nginx_kittah ├── Dockerfile └── index.html ├── fping └── Dockerfile ├── nmap └── Dockerfile ├── star_wars └── Dockerfile ├── README.md └── nyan_cat └── Dockerfile /nginx_kittah/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx 2 | 3 | MAINTAINER Brent Salisbury 4 | 5 | # Replace the default index.html with some funs ascii art. 6 | # run and listen on port 8080 with the following for: 7 | # docker run -it --rm -p 8080:80 networkstatic/nginx_kittah 8 | ADD index.html /usr/share/nginx/html/index.html 9 | -------------------------------------------------------------------------------- /fping/Dockerfile: -------------------------------------------------------------------------------- 1 | # fping in a container 2 | # 3 | # Dockerfile will execute fping and any arguments passed. 4 | # Example: docker run -it --rm networkstatic/fping -help 5 | # 6 | FROM alpine:latest 7 | 8 | MAINTAINER Brent Salisbury 9 | 10 | # build initial cache | install binary | remove cache 11 | RUN apk update && apk add \ 12 | fping \ 13 | && rm -rf /var/cache/apk/* 14 | 15 | ENTRYPOINT ["fping"] 16 | -------------------------------------------------------------------------------- /nmap/Dockerfile: -------------------------------------------------------------------------------- 1 | # nmap in a container: 2 | # [ docker run -it --rm networkstatic/nmap --help ] 3 | # Scan for open ssh (tcp/22) ports on a range of IPs 4 | # [ docker run -it --rm networkstatic/nmap -sT 192.168.1.1-100 -p 22 ] 5 | FROM alpine:latest 6 | 7 | MAINTAINER Brent Salisbury 8 | 9 | # build initial cache | install binary | remove cache 10 | RUN apk update && apk add \ 11 | nmap \ 12 | && rm -rf /var/cache/apk/* 13 | 14 | ENTRYPOINT ["nmap"] 15 | -------------------------------------------------------------------------------- /star_wars/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:latest 2 | 3 | LABEL MAINTAINER="Brent Salisbury " 4 | 5 | RUN apk add --no-cache busybox-extras 6 | 7 | # Bored with "Hello World" for a test container run? 8 | # Spruce up your Docker terminal with an ASCII version 9 | # of Star Wars. Enjoy the show! :p 10 | 11 | # Usage: docker run -it --rm networkstatic/star_wars 12 | #################################################### 13 | # A long time ago in a galaxy far, 14 | # far away.... 15 | # 16 | # 8888888888 888 88888 17 | # 88 88 88 88 88 88 18 | # 8888 88 88 88 88888 19 | # 88 88 888888888 88 88 20 | # 88888888 88 88 88 88 888888 21 | # 22 | # 88 88 88 888 88888 888888 23 | # 88 88 88 88 88 88 88 88 24 | # 88 8888 88 88 88 88888 8888 25 | # 888 888 888888888 88 88 88 26 | # 88 88 88 88 88 8888888 27 | #################################################### 28 | # Credits: 29 | # Original Work : Simon Jansen ( http://www.asciimation.co.nz/ ) 30 | # Telnetification : Sten Spans ( http://blinkenlights.nl/ ) 31 | # Terminal Tricks : Mike Edwards (pf-asciimation@mirkwood.net) 32 | #################################################### 33 | ENTRYPOINT ["/usr/bin/telnet", "towel.blinkenlights.nl"] 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dockerfile Collection 2 | 3 | ### networkstatic/star_wars 4 | 5 | Test your Docker install, demo docker or pop some popcorn and watch an ASCII remaster of Star Wars :p 6 | 7 | * Start the movie with the following: 8 | 9 | ``` 10 | docker run -it --rm networkstatic/star_wars 11 | ``` 12 | 13 | Use ctrl^c to break the movie session. 14 | 15 | ### networkstatic/nmap 16 | 17 | Nmap is a perenial favorite for security fuzzing. 18 | 19 | A couple of example usages: 20 | 21 | * Run the `nmap --help` to view port scanning options. 22 | 23 | ``` 24 | docker run -it --rm networkstatic/nmap --help 25 | ``` 26 | 27 | * Scan for open ssh (tcp/22) ports on a range of IPs 28 | 29 | ``` 30 | docker run -it --rm networkstatic/nmap -sT 192.168.1.1-100 -p 22 31 | ``` 32 | 33 | ### networkstatic/nginx_kittah 34 | 35 | This is an example of a simple change to the static Nginx index.html page. Replace the default index.html with some funs ascii art. 36 | 37 | * Run and listen on port 8080 with the following: 38 | 39 | ``` 40 | docker run -it --rm -p 8080:80 networkstatic/nginx_kittah 41 | ``` 42 | 43 | 44 | ### networkstatic/fping 45 | 46 | [Fping](http://fping.org/fping.1.html) for network testing. It's ping on steroids. 47 | 48 | ``` 49 | docker run -it --rm networkstatic/fping -help 50 | ``` 51 | 52 | 53 | ### networkstatic/nyan_cat 54 | 55 | For fun testing 56 | 57 | ``` 58 | docker run -it --rm networkstatic/nyan_cat 59 | ``` 60 | 61 | ### More Networking Examples 62 | 63 | I help maintain a curated list of networking related Dockerized tools at [github.com/gopher-net/dockerized-net-tools](https://github.com/gopher-net/dockerized-net-tools) 64 | 65 | -------------------------------------------------------------------------------- /nyan_cat/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:latest 2 | 3 | MAINTAINER Brent Salisbury 4 | 5 | # Bored with "Hello World" for a test container run? 6 | # Impress your colleagues with a Nyan Kittah party in 7 | # your terminal. 8 | # ASCII art and cats, its everything good about the Internetz! 9 | #------------------------------------------------------------# 10 | # Usage: docker run -it --rm networkstatic/nyan_cat 11 | # Use 'ctrl^c' and then 'e' to break out of the terminal. 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 | ENTRYPOINT ["/usr/bin/telnet", "nyancat.dakko.us"] 37 | -------------------------------------------------------------------------------- /nginx_kittah/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Test NGinx 7 | 8 | 9 |

NGinx is working. Here is some ASCII art for your viewing pleasure.

10 | 11 |
 12 | 
 13 | 
 14 |                                                                         ````````````````
 15 |                                                                         ::://////////::-
 16 |                                                                         ::ossssssssss+:-
 17 |                                                                         ::ossssssssss+:-
 18 |                                                                         ::ossssssssss+:-
 19 |                                                                         ::ossssssssss+:-
 20 |                                                                         ::ossssssssss+:-
 21 |                                              `--------------------------::/++++++++++/:-                                  .`
 22 |                                              .::+++++++++++::+++++++++++/:/++++++++++/:-                                `-::-.
 23 |                                              .::ooooooooooo/:ossssssssss+:+oooooooooo+:-                               .-:+o/:-.
 24 |                                              .::ooooooooooo/:ossssssssss+:+oooooooooo+:-                              `-:ossso/:-`
 25 |                                              .::ooooooooooo/:ossssssssss+:+oooooooooo+:-                              -:/ssssss+:-.
 26 |                                              .::ooooooooooo/:ossssssssss+:+oooooooooo+:-                              -:+ssssssso:-.
 27 |                                  ````````````.::ooooooooooo/:ossssssssss+:+oooooooooo/:-`````````````                `::osssssssso:-`
 28 |                                 `--:::::::::::::///////////::///////////::://////////::::::::::::::--`                -:osssssssss/:.`.........```
 29 |                                 `::+++++++++++::ooooooooooo/:+++++++++++/:ooooooooooo+:/+++++++++++:-`                -:/sssssssss/::://///////:::-.`
 30 |                                 `::ooooooooooo::sssssssssss/:+oooooooooo/:ossssssssss+:+oooooooooo+:-`                `-:osssssssso++ooooooooooo++::-`
 31 |                                 `::ooooooooooo::sssssssssss/:+oooooooooo/:ossssssssss+:+oooooooooo+:-`                 .::osssssoooooooooooooooo+/:-`
 32 |                                 `::ooooooooooo::sssssssssss/:+oooooooooo/:ossssssssss+:+oooooooooo+:-`                  .::+sssooooooooooooooo+/:-.`
 33 |                                 `::ooooooooooo::sssssssssss/:+oooooooooo/:ossssssssss+:+oooooooooo+:-`              ``.--:/+ooooooooooooo+++/::-.`
 34 |                      ```````````.::+++++++++++::ooooooooooo/:+++++++++++/:+oooooooooo+:/++++++++++/::.```````.....--:://+osoooo+////////:::--.`
 35 |                      -:::::::////////////////////////////////////////////////////////////////////////////////////++oossssoooooo::-.......``
 36 |                      ::+ooooossssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssooooooo/:-
 37 |             `        ::+ooooossssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssoooooooo/:-`
 38 |            `-.`      ::+ooooossssoo+osssssssssssssssssssssssso+:/oossssssssssssssssssso+:+oossssssssssssssssssssssso+++ooooo/:-`         `.-.
 39 |          `.-:::--..``-:/oo+++++//::::/++ooossssssssssooo++//:::::::/++oossssssssooo+/::::::://++oooossssssssssooo+/::::://+/:-`   ```..--:::-.`
 40 |    ``..---------------::::::::::::::::::::://///////::::::::::::::::::::://////::::::::::::::::::::://///////:::::::::::::::---------------------..``
 41 |                      `:://///++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++////////////:-.
 42 |                       -://////+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/////////////:-.
 43 |                       `:://////+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//////////////::-`
 44 |                        .:://////++++++++++++++++++++++++yssdho+++++++++++++++++++++++++++++++++++++++////////////////:-.
 45 |                         -:://////++++++++++++++++++++++ys::osd+++++++++++++++++++++++++++++++++++//////////////////::.
 46 |                          -::///////++++++++++++++++++++oho++ys++++++++++++++++++++++++++++++++///////////////////::-`
 47 |                           .::///////+++++++++++++///::/++ooo++++++++++++++++++++++++++++++/////////////////////:--`
 48 |                            `-::::::::::::::::://+osyy+++++++++++++++++++++++++++++++++//////////////////////::-.`
 49 |                              .:/shhhhhhhhhddmmmmmmmmmdo+++++++++++++++++++++++++//////////////////////////::-.
 50 |                               `-:/sddddddddddddmmmmmmmdo+++++++++++++++++//////////////////////////////::-.`
 51 |                                 `.-:oydddddddddddddddddds++++//////////////////////////////////////:::-.`
 52 |                                    .-:/oyddddddddddddddddhs+///////////////////////////////////:::-.`
 53 |                                      `.-::+syhddddddddddddddyo+///////////////////////////:::--.``
 54 |                                          `.--:/+osyhddddddddddhso+/////////////////::::--..``
 55 |                                              ``..--::///++oooossoo/::::::::::::---...``
 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 |          \                                                      L
 94 |          (>                                                      \
 95 |         /                                                         \
 96 |         \_    ___..---.                                            L
 97 |           `--'         '.                                           \
 98 |                          .                                           \_
 99 |                         _/`.                                           `.._
100 |                      .'     -.                                             `.
101 |                     /     __.-Y     /''''''-...___,...--------.._            |
102 |                    /   _."    |    /                ' .      \   '---..._    |
103 |                   /   /      /    /                _,. '    ,/           |   |
104 |                   \_,'     _.'   /              /''     _,-'            _|   |
105 |                           '     /               `-----''               /     |
106 |                           `...-'                                       !_____)
107 | 
108 | 
109 |                            /\             /\
110 |                           |`\\_,--="=--,_//`|
111 |                           \ ."  :'. .':  ". /
112 |                          ==)  _ :  '  : _  (==
113 |                            |>/O\   _   /O\<|
114 |                            | \-"~` _ `~"-/ |
115 |                           >|`===. \_/ .===`|<
116 |                 jgs .-"-.   \==='  |  '===/   .-"-.
117 |              .-----{'. '`}---\,  .-'-.  ,/---{.'. '}-----.
118 |              |     `"---"`     `~-===-~`     `"---"`     |
119 |              |     .-------------------------------.     |
120 |              |     |                               |     |
121 |              |     |      .-'                      |     |
122 |              |     | '--./ /     _.---.            |     |
123 |              |     | '-,  (__..-`       \          |     |
124 |              |     |    \          .     |         |     |
125 |              |     |     `,.__.   ,__.--/          |     |
126 |              |     |       '._/_.'___.-`           |     |\
127 |              |     |                               |     |'\
128 |              |     |                               |     |.'`\
129 |              |     |                               |     |'.'`}
130 |              |     |                               |     } '. }
131 |              |     |                               |    /.'`./
132 |              |     '-------------------------------'   /. './
133 |             _|  _                                     /.`'./
134 |            (.\-/.)--------.__________________.-------{.'. {
135 |             \6 6/         /                  \       `\.'`\
136 |         (   =\ /=  ______/....................\______  \.'.\
137 |          \   /O\  |                                  |  }'.'}
138 |           ) /   \ | [[[[[[[[[[ ===       ()  ()  ()  | {'.'/
139 |          (  U   U |                       ________   |  `~`
140 |           \(|   |)| [[[[[[[[[[ ===       [________]  |
141 |            _w___w_:----------------------------------:_______
142 |           |  []  [][][][] [][][][] [][][][] [][][]  == ===== |
143 |           |                                                  |
144 |           |   [][][][][][][][][][][][][][]_ [][][] [][][][]  |
145 |           |   [_][][][][][][][][][][][][]| |[][][] [][][]||  |
146 |           |   []  [][][][][][][][][][][][__|       [][][]||  |
147 |           |   [__] [][][][][][][][][][][___]  []   [][][]||  |
148 |           |   [_]  [_][_____________][_] [_][][][] [__][]||  |
149 |           '--------------------------------------------------'
150 | 
151 | 
152 | 
153 |          ;====                                                                                              ==+####+
154 |           X####X                                                                                           =M#######M.
155 |          ;######X.                                                                                        +##########;
156 |          +########X                                                                                     .M###M=;##M;XM
157 |          +#######=#X                                                                                    M###+   ;M#.X#;
158 |          +#####X+ ;#X.                                                                                 .###=     X#X;#;
159 |          +#####    ;##X.                                                                              .M##=      =##;#X
160 |          +#####;    ;###M;                                                                           .M##M       .##M#M
161 |           ###M;     .##M=+X                                                                          +###=        =####=
162 |           ###=      .####;;.                                                                        +###M.        .#####
163 |           ###X;      =#####X;                                                                      +###M.          X####=
164 |           #####;       =X####+                                                                    +###+.           .####=
165 |           ###=           #####M;                                                                .X####;    X.       M####.
166 |          =###           ;#######.                                                              .M####+     =#X=;    X####X
167 |          X###            M######M=                                                            .M###M=       ###+    .#####
168 |          .##X;;+MM.      ;########X                                                          +M###=        .#M=      X####=
169 |           #####M=.        =########M=                                                      +M###M.        =M#        =####M
170 |           M#+=MM;          +#M#######X=                                                   +#####+         M#=         =+###
171 |           =#=  ##+..        #M#########=                                                ;X######M       .+#M           +###
172 |            #= .####MX.      =###########                                              ;X########M       X##;           ####
173 |            MMM#MMMMM#+       M##########+.                                           +M##M=#####+      .#M+            X###
174 |            =###;    ;;       .M###########+=                                       +####M+M#####;     =M#;             .###
175 |             ###= M=           .+############M=                                    X######################+++   .X#=     .##
176 |             ###  ;#=            X#############=                                 ;XX###################+==X##XX####=      =#
177 |             =##;  +#M.     =    .M##########MM#=                              ;.=.###+M########X=====     =####+==       =#;
178 |             =###=; +#+;   X##=   X###########X######=.                    ;+##X=X##M=M#########;        =X###+          .###
179 |              #####X .+#M; ##+XX; X####################=  ;;            .+M######X+; M###########;   ;==####X            ####
180 |              M##++M=  =##M##+ X#X;#############M;X#####MM##=;     .;;;;M######++   +#############MMM#####X;       ;;;  .###M
181 |               M#.      .=M##+  X#M#############M= ..=X#######MMMMMM########X.     =###########.M##MXX;=M=   ;;;;XM###; X###+
182 |               =#+         ..    M#############;.      .##################M=.   ;;=###########+  ..     .M=.M#########+M####+
183 |               =#M.              ;M############. .     ;#;.;####MXM=.=...=; .XXX##############M.    ;;   .MM###MXXXXX=######+
184 |               +##M;            ..M############.;M     =X ; MM..         .. ..X#################M=.;#M.   .;M+..     =######=
185 |               #####X+..       ;###############.XM     +=.+ MX            =+  .+#############+;+M#####X+    .M        M#####
186 |               #####M###X;    ;X##############X.#X     # X+.MX            ..    #############X  .######M+++++M        .X####
187 |              =#################M=M###########;+#;     M;#++#X            ;.#M++##############. ;############.          ###X
188 |              =X.M###M=########=  MX#########M X#X+.    X#;M#X           +M;#################+  #############=         +###+
189 |              ==  +##M.             XMX######+.M#=#+  .=##;M#X        MMX####################= =#############=.=       ####;
190 |               =  .M##;           ;=.  X########MM#M. X.##=#####M XX =#######################.  X############ ####=    ####
191 |               # ;+##X.             ;; +############;.###+;#####M;## ########################=  .##################+   ####
192 |               =.M##X               X#M#############;####+M#####=X##.########################+     +M+++M###########X ;####
193 |               =+ +M#;            . .M#############MX####+M####M=###X#########################          .++M#######+  X####
194 |               =+   ;MMMX        ;#X;X###################M#####MX#############################;            ;######X  ;####+
195 |               ;M    .;X+     =XX=############################################################M.            .M###M.  X####=
196 |                M.            M##;M############################################################+            .+###X  .#####=
197 |                ;M. =    ...=XM##MM###############X=########XM###################+M#############=          =#####M. +#####=
198 |                 XX X=   #####=M#################M.M####M+##.X###################.+##############=.        #######=X######+
199 |                    .    ########################==#####+X##;M################### ##X##############M=     ;################
200 |                =M ;M=   +#######################X##########=####################+##X############M=== =M;+M################+
201 |               .X#####+  ;##########################################################=M#X#########    .M##############+X####X
202 |               X######M=  ##############################################MM#X#+ ####; M####; ####X#M .+#############M     ###X
203 |               .#################+M#######X#############M=###############=#=#M.+##..M####M.+#######.=##############M     =###;
204 |                .X###########X##= X######X=#############+ M######### #########; ##XM#####+;#########################M    ;####.
205 |                 ;##########;=#.  M######=;############## =######### =####M=##+ #########M##+###############;=#######X   ;####;
206 |               ;;+#########M=M=  ;#######  M############+  M######M+  ;###X.###M#####XX####;+##############X;M#######;    M####.
207 |             +M############M#+   ;#######  M############+  X######=    .X#X X#M###### ;###X +#######################M     =###M
208 |            =################+   ;######+  M###########M.  ;#####M       +; ;#MX#####  +XMMXM##M###++####MXX=..M#####=    =###M;
209 |            M################=    M#####   M###########=   .#####M           M##;XXM#    .;M###;X#####M=.      =######X   M####X
210 |           ;#################     X####+   M###########     M###M           +###;   ;      ;########M#+  ;     ;M###X;.   M#####+
211 |            ###########MX####     X###M.   M###########=    =##M;         =M+;;;.           MM####MX.;.  ;    +#####X+++.;.######.
212 |            ###########= ####+    X##+.  ;+############=     XM         .M##M.                X##.           .M######M####+######+
213 |            ##########=  ####=    .#M.;#;##############X                M#####X               =#=              ;M#+=;=###=#######X
214 |           ;########M;   X##X;         X##############X#                M######X=             =#=======         .M= +###. =#######;
215 |           M##= =###=    ;####         +#############=.#+              .M##########=         =##########+=       +####M.  .#######M
216 |           X#X           M###        ==X#############=.##             M##############X;        XM+          =   .M#####+   =#######;
217 |           ##=       ;;;;X###MM=    .################= =M            +#################;        M        =XMM=;X=M######+   M######M
218 |          +#X    ;=MM###########M;   X###############= =+          +M####XX+= =#########X;    ;.           ;+M##MX=  .#M    ;#######;
219 |         .##= .+M#################;  .###############MMM+         .####M. X##; =M#########MMMM#MMMMMX;;.      ..    ;=#X     M######M
220 |         .##MMM###########X=;######.  X#################+         X###M. ;###X   M####################XX==;;;;X;   ;###;     M#######;
221 |          X#############M= ;M######X  +#################+        .####=  X####;   M###################M;  ...XX#+.+M##+   =  X#######M
222 |          M#############;  M####M##M. =#################+       .M####   M####=   ;#####################X..    .;=M####;.=+  ;######M#;
223 |          X############=  ;#####.X##;  +################+       X####X   M####M    ########################MXX;    ;X#####;  ;#####M ;;
224 |         .##M+;;;MMM###;  +#####..##+   ################+      .#####.   M####M    ######=X###################   ;++X#####+   M####M
225 |         .##=       =#M.  M#####. X#M   =###############+      M####=    X####M    #####M  =+#################+############   =####M.
226 |         =##X       .##;  ######X X#M    ###############+     =#####     ;####M    #####X    ;#######################MM##X=X  .M####;
227 |          M##=      .##+  X#####X =##;   X##############      X#####=    ;####M    #####;=.   .#############################   M####;
228 |          .###.     .##M  +#####= .##;   =####X#X#######      X##; #X     X###M    ####X=#;    =###########################+   M####M
229 |           ####=     =##;  #####. .M#+   X####=X=#######=    .###; ##=    +###X    ######M   =###########################=   +######M
230 |          ;###++MX;  .M#M  +###M   X#M   M######=#######;    =###; M##.   .X##;   =###X.X#MMM###MX####+ =;;M#############=   ;M####=M;
231 |          X###= ;+#X  X#M   ###=   X#M   =#####X.##+M###   ;=####M; ##X           M##M..=+######M#M. +X     MMM##########     ;M###=
232 |         ;####M   ..  ;##M  =#=   .###;  +#####X.#; =###MMM#######= =##+         +##M. X#########X.   ;X=    XM##########+     M####=
233 |         +#####=       +##=  .    .###M. ######MXM   ######M#####XMX =M#;      .X###=  X#######X.  .+. .+X.   .XX#########     X####M
234 |          M####M.    .  M##MX.....=#####=###MXX##X   #####M=########==;XMX+....M##M; =+=####M=.     +M;  +X=     M#######=     .#####M
235 |          +#####M.  .#X;.M##################.  X#.   #####MX##########M###########;.;#######;        .=+   +M=.+X########       X#####=
236 |           X#####M. .###..MM######M=M#######   ;.    X###############X ;;XMMMMM#####M######=           .    #############       .#####=
237 |           M######M.;###;  .;;;;;;.+#######X  ;.  X; .###############.        =M#########M;              ++M#############;   ;=  X####=
238 |           ;########=###XX;      .M########;  M. .M.  X#############=     .X############M;              =################=   M#M+X####=
239 |             =#############   =; M#########   M. =M   X#############  ====M#############.               M################    ;########=
240 |         =M===#############X=X#M+#########=  .M. X; #=X############X.=################+;         ==    =#################     +M  XM##=
241 |          ++###X=########################X   ;X  M; ##################################.  ;      .##+ ;.###XX####X#######X      MM  =##=
242 |             ;#########################+#=+  MX .#;+##################################MMM.       +#X;#..+=  M##X=+X#####M.     .M#+;XMX
243 |              +#######################+ ###X;M.;XM X##M#############################M#M=          M#M#.      ++##=M######   +=;;M##MM +
244 |            =M;######################M  #####M=##++### #############################M=  +X        =###.        .+#######X   M#######M
245 |            =########################M  #####M##M=M###M##########################X=#X.  X;..       ..M..;        =M#####M   +########+
246 |             M#######################X  #########M###############################  M+. ;+ ..         +XMXX       ++####MX   M##M;;#M;M
247 |             .M###M#################M  .#########################################MX.  ;=.             ...#;    .X#####M=    +###;.#M =
248 |               +##++###############=.  +###############M+#######################MM. .+MX.                X=    M#####M+;     +##M;##; .
249 |                M##MMMM###########M.   M##############M.=######################+   +##+                  +M   ;#####=XM.     ;###=#MM
250 |                M###################;  ########X######. X#####################M   ;#=M+=                  M   #####= XM      ;####M M.
251 |                 ;M################M. +###############X ####################+=.  .=.  .==;      .         =. X####M  XM       M###M..
252 |    .             .+#############=    ###===X#####M=X######################M.             ..   .X=;        ..####M  X#M       M####;
253 |     .==.  =.       =##+M#=X####=    +##=            #######M;##++#########.               =               =#####M .##M      .M####;
254 |              ...    =##X#+  ;+      +##X==       ;=X###M#=   ;X ;######=M=                 .            .X#######..##M    =######M
255 |                ===.  =####+         +#####X    ;M######          M###=#X=                  .           ;#########XM##M.   M#####+=
256 |                    =; X####M+;      .M#####   .#######;     ;  .;X;## M#=                             ;###############;    M#XM#.;
257 |                        ...=XXX;      =M###X   .#####X=     ;#MMM##M##M###X                          XM#########X###X=X.    M#XMX
258 |                                        =M##.  ;###X.       ;##############.                        ;##########X ;M;       =##M#+
259 |                          ........        M#M  X##M         ;#############M;                      XXM##########.           #####.
260 |                    ... =XM##MM###+        ##X=M##=        .X##X;;;;;;;;;;M#=                    ;############+            ###XM.
261 |                    ;;.   .;;. ;;;;        ;M####M         ;;;.           ..                     =########M+#X       =.   =### .
262 |     .;  ;==           =+                   .M##X;               ;;                              M########X+XX+;     XX+++M##+
263 |                  .++#M==XX                  +#=                 +#                              +#+===+#######M+    X#####X#+
264 |                =#==      = .    =           ;#.            XM. =M#X===     ; ==.                .=M###M= .==####M=+ X#####.=+
265 |                =;         .#   +#X          ;##+;              ;=======M###M                 ====X+M#+M#X.    .=M#M=M#####  =
266 |                      =====.                 ;####+;        ;=            =+=                 ;###M .+. ;M#.   .+#######M##  ;
267 |  =                 ;;.                      ;######MM=     =+=.   ..                         =#M+#M;     ;#=.M##+.X####XX#
268 | =              .+M=                         =#########=          ;  =.                  .;  =M+           ;M###M. X##### +
269 | +               ..                        ;=#M..+#####=;;.      ;X=  ;=                 +#X;X;          ;+MM##M##M#####X
270 |                                          ;###+   =XX#####+             .                .####;         +#M=.=XM########=
271 |             .;          . XX          XXX###+       .X###=..                             X###M        +#=     .X#######;
272 |           .=.           . ..          ......          ......             .;.        ..   .M###=       XM        ;#####M
273 |          ;.           .. =.                                                =+   X   =#+   +####;      XM         X####M
274 |        .X          ==;;;                                                     . .#M   ;MM.  X###M.     ;M          M###M
275 |      .=         .=;                XX                                        .. X#     MM   X#####M=   X.     .   X###;
276 |     ..        ==                 ;+M#;                                  .=     . #     .#M+. X####=    ;X     .+  X##+.
277 |    =        ;X                    ++##.                              .  .X     ;=.#     =#####..##M   +##X     +. X#M.
278 |   =;       ==                    M. +##X=                        ;X  M+  X.       =; ;=; X##=   .##+.M#+    =   . X#+
279 |           ..                  ..==  +#XX#=                      XM   X+  +X       .#########M=   .X##M.     ==    =#;
280 |           .                  .      M#####                     ;#=   =X  .X        +##########=   ;##X   .   M    .=
281 |          ;                  .       .M####MMMX;.             ;M#M   ==#M..M.         X###M. .MM+ ;M##X   =.  =
282 |                                       ...XXX=###X;        .;X###;  .; MX  M;         .M#XMX  ;##M#M=+.   ==   .
283 |        ;.                 ;                 ;##XXM.    ...M##M+.      MX X#X          +#=..   ###M.       X   =
284 |       .+                  ;                 ;#X ;#;  =X####M;         MX;X=M           MM     M##M        .;
285 |      ;                   =                   ;  .=  =M#X;XMX          MM#; XMX;        ;#=    =###.    =   =
286 |    .=                   ..                           .#.   .         =M##. +##=         X#X.  .###X    X;  =
287 |                       .X                              ;              X.M#. .##=         .##;   ;+##=   ;X
288 |                      .M;                                             ; M#.  +#=.         +#;     MX+=   X
289 |                      XM                                                ;M   .#==          X;        =;  =
290 |                     .M.                                                .;    += =          +
291 |                    .#+                                                       +M ;.         X
292 |                    =+.                                                       .M  =         =
293 |                                                                           .   +  =         ;
294 |                                                                           XX  ;.  .
295 |                                                                          .#M   +  X
296 |                                                                          .#M   M  ;
297 |                                                                           MM   =+
298 |                                                                           ;M    M
299 |                                                                            +    =
300 |                                                                            =
301 |                                                         /\___/\
302 |                                                         )     (
303 |                                                        =\     /=
304 |                                                          )   (
305 |                                                         /     \
306 |                                                         )     (
307 |                                                        /       \
308 |                                                        \       /
309 |                                                         \__ __/
310 |                                                            ))
311 |                                                           //
312 |                                                          ((
313 |                                                           \)
314 |                     ;,_            ,
315 |                   _uP~"b          d"u,
316 |                  dP'   "b       ,d"  "o
317 |                 d"    , `b     d"'    "b
318 |                l] [    " `l,  d"       lb
319 |                Ol ?     "  "b`"=uoqo,_  "l
320 |              ,dBb "b        "b,    `"~~TObup,_
321 |            ,d" (db.`"         ""     "tbc,_ `~"Yuu,_
322 |          .d" l`T'  '=                      ~     `""Yu,
323 |        ,dO` gP,                           `u,   b,_  "b7
324 |       d?' ,d" l,                           `"b,_ `~b  "1
325 |     ,8i' dl   `l                 ,ggQOV",dbgq,._"  `l  lb
326 |    .df' (O,    "             ,ggQY"~  , @@@@@d"bd~  `b "1
327 |   .df'   `"           -=@QgpOY""     (b  @@@@P db    `Lp"b,
328 |  .d(                  _               "ko "=d_,Q`  ,_  "  "b,
329 |  Ql         .         `"qo,._          "tQo,_`""bo ;tb,    `"b,
330 | (qQ         |L           ~"QQQgggc,_.,dObc,opooO  `"~~";.   __,7,
331 | `qp         t\io,_           `~"TOOggQV""""        _,dg,_ =PIQHib.
332 |  `qp        `Q["tQQQo,_                          ,pl{QOP"'   7AFR`
333 |    `         `tb  '""tQQQg,_             p" "b   `       .;-.`Vl'
334 |               "Yb      `"tQOOo,__    _,edb    ` .__   /`/'|  |b;=;.__
335 |                             `"tQQQOOOOP""        `"\QV;qQObob"`-._`\_~~-._
336 |                                  """"    ._        /   | |oP"\_   ~\ ~\_  ~\
337 |                                          `~"\ic,qggddOOP"|  |  ~\   `\  ~-._
338 |                                            ,qP`"""|"   | `\ `;   `\   `\
339 |                                 _        _,p"     |    |   `\`;    |    |
340 |                                  "boo,._dP"       `\_  `\    `\|   `\   ;
341 |                                   `"7tY~'            `\  `\    `|_   |
342 |                                                            `~\  |
343 | 
344 | 
345 | 
346 |    
347 | 348 | 349 | 350 | --------------------------------------------------------------------------------