├── LICENSE ├── MungLang_Discord └── bot.py ├── MungLang_Python └── compiler.py ├── README.md └── examples ├── gugudan.mte └── print.mte /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 hwan809 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MungLang_Discord/bot.py: -------------------------------------------------------------------------------- 1 | import discord 2 | import sys 3 | import os 4 | 5 | from discord.ext.commands import Bot 6 | from discord.ext import commands 7 | 8 | sys.path.append(os.path.abspath(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) + '/MungLang_Python') 9 | 10 | import compiler 11 | 12 | TOKEN = None 13 | 14 | with open('token.txt', 'r') as f: 15 | TOKEN = f.read() 16 | 17 | intents = discord.Intents.default() 18 | bot = Bot(command_prefix='!', intents=intents) 19 | compiler = compiler.MungLanguage() 20 | 21 | @bot.event 22 | async def on_ready(): 23 | print(f'logged in as {bot.user}, MungLang Compiler v1.0') 24 | 25 | 26 | @bot.command() 27 | async def ping(ctx): 28 | await ctx.send('pong') 29 | 30 | 31 | @bot.command() 32 | async def mung(ctx, *, code:str = None): 33 | if code is None: 34 | await ctx.send('코드를 입력해주세요.') 35 | return 36 | 37 | await ctx.send('뭉랭을 컴파일합니다.') 38 | 39 | try: 40 | code = code.split('\n')[1:-1] 41 | 42 | result = compiler.compile(code) 43 | result_string = '```\n' + '\n'.join(result) + '\n```' 44 | 45 | await ctx.send(result_string) 46 | 47 | except SyntaxError as e: 48 | await ctx.send('```\n' + e.msg + '\n```') 49 | 50 | 51 | bot.run(TOKEN) 52 | -------------------------------------------------------------------------------- /MungLang_Python/compiler.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | TYPE_IF = 'IF' 4 | TYPE_DEF = 'DEF' 5 | TYPE_CALL = 'CALL' 6 | TYPE_INPUT = 'INPUT' 7 | TYPE_PRINT = 'PRINT' 8 | TYPE_GOTO = 'GOTO' 9 | TYPE_END = 'END' 10 | TYPE_BLANK = 'BLANK' 11 | 12 | 13 | class MungLanguage: 14 | def __init__(self): 15 | self.result = [] 16 | self.index = 0 17 | self.data = [0] * 256 18 | 19 | def get_int(self, code): 20 | plus = code.count('.') 21 | minus = code.count('~') 22 | 23 | code = code.replace('.', '') 24 | code = code.replace('~', '') 25 | 26 | if not code.empty(): 27 | raise SyntaxError(f'얘! {self.index + 2}번째 줄에 이것 좀 보렴. 이게 니 눈에 정수처럼 보이냐?') 28 | 29 | return plus - minus 30 | 31 | def get_number(self, code): 32 | output = 0 33 | now_add = True 34 | 35 | while len(code) != 0: 36 | if code.startswith('자~'): 37 | if now_add: 38 | output += int(input()) 39 | else: 40 | output *= int(input()) 41 | now_add = True 42 | 43 | code = code.split('~', maxsplit=1)[1] 44 | elif code.startswith('탱'): 45 | if now_add: 46 | output += self.data[0] 47 | else: 48 | output *= self.data[0] 49 | now_add = True 50 | 51 | code = code[1:] 52 | # print(f'{self.index + 2} line, {code}') 53 | elif code.startswith('태'): 54 | now_call = code.split('앵')[0] + '앵' 55 | 56 | now_num = self.get_variable(now_call) 57 | if now_add: 58 | output += now_num 59 | else: 60 | output *= now_num 61 | now_add = True 62 | 63 | # print(code) 64 | code = code[len(now_call):] 65 | elif code.startswith('.') or code.startswith('~'): 66 | now_char = code[0] 67 | now_num = 0 68 | 69 | while now_char == '.' or now_char == '~': 70 | if not code: 71 | break 72 | 73 | now_char = code[0] 74 | 75 | if now_char == '.': 76 | now_num += 1 77 | elif now_char == '~': 78 | now_num -= 1 79 | else: 80 | break 81 | 82 | code = code[1:] 83 | 84 | if now_add: 85 | output += now_num 86 | else: 87 | output *= now_num 88 | now_add = True 89 | elif code.startswith('코'): 90 | now_add = False 91 | code = code[1:] 92 | 93 | else: 94 | raise SyntaxError(f'{self.index + 2}번째 줄에 이게 숫자야 임마아아아아앍! . / ~ 로 쓰렴 얘') 95 | 96 | return output 97 | 98 | def get_variable(self, code): 99 | index = -1 100 | 101 | if code == '탱': 102 | index = 0 103 | elif code == '태앵': 104 | index = 1 105 | 106 | else: 107 | if code[0] == '태' \ 108 | and code[-1] == '앵': 109 | for char in code[1:-1]: 110 | if char != '애': 111 | raise SyntaxError(f'얘! index {self.index + 2} 줄에 이게 변수 호출이 되겠니?') 112 | 113 | index = len(code) - 1 114 | else: 115 | raise SyntaxError(f'얘! index {self.index + 2} 줄에 이게 변수 호출이 되겠니?') 116 | 117 | return self.data[index] 118 | 119 | def variable_index_to_number(self, code): 120 | if code == '뭉': 121 | return 0 122 | elif code == '무웅': 123 | return 1 124 | else: 125 | if code[0] == '무' \ 126 | and code[-1] == '웅': 127 | 128 | for char in code[1:-1]: 129 | if char != '우': 130 | raise SyntaxError(f'얘! {self.index + 2}번째 줄에 이게 변수 인덱스가 되겠니?') 131 | 132 | return len(code) - 1 133 | 134 | else: 135 | raise SyntaxError(f'얘! {self.index + 2}번쨰 줄에 이게 변수 인덱스가 되겠니?') 136 | 137 | @staticmethod 138 | def get_type(self, code): 139 | if not code: 140 | return TYPE_BLANK 141 | elif code.startswith('무빙'): # GOTO문 무빙 142 | return TYPE_GOTO 143 | elif code.startswith('유링계숭한?'): # IF문 유링계숭한 144 | return TYPE_IF 145 | elif code.startswith('뭉') or code.startswith('무'): # 변수 선언 뭉 146 | return TYPE_DEF 147 | elif code.startswith('자'): # 변수 출력/입력 자!/자~ 148 | return TYPE_PRINT 149 | elif code.startswith('아이그냥'): # RETURN문 아이그냥 150 | return TYPE_END 151 | else: 152 | raise SyntaxError(f'얘! {self.index + 2}번째 줄 이게 무슨 구문이니! 음.. 죽여벌랑') 153 | 154 | def compileLine(self, code): 155 | if code == '': 156 | return None 157 | 158 | TYPE = self.get_type(self, code) 159 | 160 | if TYPE == TYPE_BLANK: 161 | return 162 | 163 | if TYPE == TYPE_DEF: 164 | # 예시: 무우웅~~ 165 | var_index, number_str = -1, -1 166 | if (code.startswith('뭉')): 167 | var_index = 0 168 | number_str = code[1:] 169 | else: 170 | var_index, number_str = code.split('웅', maxsplit=1) 171 | var_index += '웅' 172 | var_index = self.variable_index_to_number(var_index) 173 | 174 | number_int = self.get_number(number_str) 175 | self.data[var_index] = number_int 176 | 177 | # print('data added in index ' + str(var_index) + '. value : ' + str(number_int)) 178 | elif TYPE == TYPE_PRINT: 179 | 180 | number = code 181 | if number[-1] == '!': 182 | number = number[1:-1] 183 | else: 184 | raise SyntaxError(f'얘! {self.index + 2}번째 줄에 지금 그걸 출력하겠다고 하는 거니?') 185 | 186 | if not number or number == '0': 187 | self.print('\n') 188 | else: 189 | # print(f'{self.index} line, {number}') 190 | number_int = self.get_number(number) 191 | if number_int > 0: 192 | number_ascii = chr(number_int) 193 | self.print(number_ascii) 194 | else: 195 | self.print(-number_int) 196 | elif TYPE == TYPE_END: 197 | number = code[4:] 198 | 199 | if number: 200 | number_int = self.get_number(number) 201 | self.print(number_int) 202 | 203 | return True 204 | 205 | elif TYPE == TYPE_IF: 206 | command = code[6:] # 유링계숭한? 후. 207 | 208 | check_val, wish = command.split(',', maxsplit=1) 209 | check_val_int = self.get_number(check_val) 210 | 211 | if check_val_int == -3000: 212 | return wish 213 | elif TYPE == TYPE_GOTO: 214 | number = code[2:] 215 | number_int = self.get_number(number) 216 | 217 | return number_int - 2 218 | 219 | def print(self, print_data): 220 | print(print_data, end='') 221 | now_data = '' 222 | 223 | if len(self.result) != 0: 224 | now_data = self.result[-1] 225 | else: 226 | self.result.append('') 227 | 228 | if print_data == '\n': 229 | if now_data == '': 230 | self.result.pop() 231 | self.result.append('\n') 232 | self.result.append('') 233 | else: 234 | self.result.append('') 235 | else: 236 | self.result[-1] += str(print_data) 237 | 238 | def compile(self, code): 239 | self.index = 0 240 | self.result = [] 241 | 242 | while code[self.index] != '춘잣!': 243 | self.index += 1 244 | 245 | if self.index == len(code): 246 | raise SyntaxError('얘! 뭉탱어는 춘잣! 아니면 겸상 안한단다? 개발이 잘 안되니?') 247 | 248 | del code[self.index] 249 | now_moving = False 250 | 251 | while self.index < len(code): 252 | # print(f'compiling line {self.index + 2}... {code[self.index]}') 253 | 254 | goto = self.compileLine(code[self.index]) 255 | self.index += 1 256 | 257 | if isinstance(goto, bool): 258 | return self.result 259 | 260 | elif isinstance(goto, int): 261 | if now_moving: 262 | now_moving = False 263 | del code[self.index - 1] 264 | # print(f'moving to, {code[s.elf.index]}') 265 | 266 | self.index = goto 267 | elif isinstance(goto, str): 268 | code.insert(self.index, goto) 269 | now_moving = True 270 | # print(now_moving) 271 | 272 | return self.result 273 | 274 | def compile_file(self, path): 275 | with open(path, encoding='utf-8-sig') as mte_file: 276 | code = mte_file.read().splitlines() 277 | self.compile(code) 278 | 279 | 280 | if __name__ == '__main__': 281 | compiler = MungLanguage() 282 | compiler.compile_file(sys.argv[1]) 283 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MungLang 2 | 케인인님, -3000딩 한판해요 3 | 4 | 여러 한국어 esolang들에 영감을 받고, 5 | 스트리머 '[케인](https://www.youtube.com/channel/UC0aKwoKNeqBaUwiEXmkQaGQ)' 님의 밈 중 하나인 6 | [[케인] 무빙맨](https://www.youtube.com/watch?v=92volEdYcCQ) 을 프로그래밍 언어로 구현합니다. 7 | 8 | > 다른 언어 구현체 및 리팩토링 PR은 환영입니다! 🙋 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 | # -3000딩쟁이들을 위한 문법 [MungLang v1.0] 78 | MungLang(뭉탱어) 의 문법을 서술하는 글이란다. 79 | 간단하니까 무서워하지 말렴! ~~어으 어 어 어떡해 저거~~ 80 | 81 | ## 사용할 수 있는 키워드 82 | - 뭉 83 | - 탱 84 | - 무빙 85 | - 유링계숭한 86 | - 아이그냥 87 | - 춘잣! 88 | - ~~코~~ -3000 89 | - 자! 90 | - 자~ 91 | ## 자료형 92 | 얘! 자료형은 정수밖에 없단다. 귀찮아 임마! 93 | ### 정수 94 | 정수는 . / ~ 으로 표현이 가능하단다. 95 | ``` 96 | . => +1 97 | ~ => -1 98 | ``` 99 | 얘! 곱셈이 잘 안되니? 100 | 케인님의 **코**처럼 불어나는 코 연산자를 쓰렴. 101 | 102 | ``` 103 | ..코~~ => 2 * -2 => -4 104 | ``` 105 | 덧셈은 그냥 갖다붙이면 된단다. 106 | 107 | ## 변수 108 | 109 | ### 선언 - 뭉 110 | 글자 수 번째에 있는 변수에 뒤에 오는 정수를 대입한단다. 111 | 112 | ```뭉```, ```무웅```, ```무우웅```, ```무우우웅```, ~~```뿌웅 웰컴 투 더 뭉탱이 월드```~~ 등을 사용해 113 | 글자 수를 증가시킬 수 있단다. 114 | 115 | ``` 116 | 무웅~~ => 2번째 변수에 -2 대입 117 | ``` 118 | ### 호출 - 탱 119 | 글자 수 번째에 있는 변수를 호출한단다. 120 | ```탱```, ```태앵```, ```태애앵```, ```태애애앵``` 등으로 사용한단다. 121 | 122 | ``` 123 | 태애앵 => 3번째 변수 124 | ``` 125 | ## 콘솔 126 | ### 출력 - 자! 127 | ```를``` 과 ```!``` 사이의 값을 출력한단다. 128 | 129 | - 값이 0 / 없는 경우 => 줄바꿈 조이고 (\n) 130 | - 값이 양수인 경우 => 그 수에 대응하는 유니코드를 출력 (문자) 131 | - 값이 음수인 경우 => 절댓값을 출력 (숫자) 132 | 133 | 문자를 출력하고 싶니? https://unicodelookup.com/ 참고하렴! 134 | ### 입력 - 자~ 135 | 사용자에게 입력을 받아 준단다. 136 | 137 | ``` 138 | # 입력을 받아 변수에 저장하여 보자 139 | 무웅자~ => 2번째 변수에 사용자 입력 저장 140 | ``` 141 | 정수로만 입력하는 게 좋단다! 142 | ## (왕간단) 지시문 143 | ### 조건문 - 유링계숭한? 144 | 뭉탱요정이 **유링계숭한** 힘으로 이것이 케인님의 코인지 판단해 주신단다. 145 | 소원도 같이 빌렴! 케인님의 **코** 라면 소원을 들어주실지도 모른단다. 146 | 147 | ```유링계슝한?{변수 또는 정수},{실행할 명령}``` 148 | ``` 149 | # 3번째 변수가 "-3000" 이라면 콘솔에 "2" 출력 150 | 유링계숭한?태애앵,자~~! 151 | ``` 152 | ### GOTO - 무빙 153 | **무빙맨**이 마하 9의 속도로 퀵 서비스를 해 주신단다. 154 | ```무빙``` 뒤에 따라오는 정수의 줄 번호로 이동한단다. 155 | ``` 156 | 무빙... => 3번째 줄로 이동 157 | ``` 158 | ### RETURN - 아이그냥 159 | 뒤 따라오는 정수를 콘솔 출력 규칙에 따라 출력하고 프로그램을 종료한단다. 160 | 161 | ## 작성 문법 162 | 확장자 : ```.mte``` 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 | 2단부터 구구단을 출력하는 코드란다. 201 | 202 | ### 컴파일러 203 | 204 | #### MungLang_Python 205 | 206 | ``` 207 | ... 208 | git clone https://github.com/hwan809/MungLang.git 209 | cd MungLang 210 | python MungLang_Python/compiler.py [파일명(examples/gugudan.mte)] 211 | ``` 212 | ![image](https://user-images.githubusercontent.com/55339366/154715252-43a96c8c-9538-4438-9dd5-b65255bc8e09.png) 213 | 214 | #### MungLang_Discord 215 | `뭉랭을 디스코드 환경에서 컴파일합니다` 216 | 217 | ``` 218 | git clone https://github.com/hwan809/MungLang.git 219 | cd MungLang 220 | cd MungLang_Discord 221 | pip install discord 222 | copy con token.txt 223 | [본인의 봇 토큰 입력] 224 | ^C (Ctrl + C) 225 | python bot.py 226 | ``` 227 | -------------------------------------------------------------------------------- /examples/gugudan.mte: -------------------------------------------------------------------------------- 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 | 무빙..코..코.. -------------------------------------------------------------------------------- /examples/print.mte: -------------------------------------------------------------------------------- 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 | 자태애애애애애애앵태애애애애앵태애애애앵! --------------------------------------------------------------------------------