# WU Cyber Apocalypse 2023 ## Crypto ### Ancient Encodings ![](https://i.imgur.com/zm09eFb.png) tải file về ta được: source.py : ``` from Crypto.Util.number import bytes_to_long from base64 import b64encode FLAG = b"HTB{??????????}" def encode(message): return hex(bytes_to_long(b64encode(message))) def main(): encoded_flag = encode(FLAG) with open("output.txt", "w") as f: f.write(encoded_flag) if __name__ == "__main__": main() ``` output.txt : ``` 0x53465243657a467558336b7764584a66616a4231636d347a655639354d48566664326b786246397a5a544e66644767784e56396c626d4d775a4446755a334e665a58597a636e6c33614756794d33303d ``` Đoạn này được mã hóa bằng cách mã hóa base64 rồi chuyển qua dạng hex. Mình sẽ solve bằng tool cyberchef https://gchq.github.io/CyberChef/#recipe=From_Hex('Auto')From_Base64('A-Za-z0-9%2B/%3D',true,false)&input=NTM0NjUyNDM2NTdhNDY3NTU4MzM2Yjc3NjQ1ODRhNjY2MTZhNDIzMTYzNmQzNDdhNjU1NjM5MzU0ZDQ4NTY2NjY0MzI2Yjc4NjI0NjM5N2E1YTU0NGU2NjY0NDc2Nzc4NGU1NjM5NmM2MjZkNGQ3NzVhNDQ0Njc1NWEzMzRlNjY1YTU4NTk3YTYzNmU2YzMzNjE0NzU2Nzk0ZDMzMzAzZA ![](https://i.imgur.com/BREC1eV.png) flag: HTB{1n_y0ur_j0urn3y_y0u_wi1l_se3_th15_enc0d1ngs_ev3rywher3} ### Small StEps ![](https://i.imgur.com/UaPkn1K.png) Tải về file ta được: sever.py: ``` from Crypto.Util.number import getPrime, bytes_to_long FLAG = b"HTB{???????????????}" assert len(FLAG) == 20 class RSA: def __init__(self): self.q = getPrime(256) self.p = getPrime(256) self.n = self.q * self.p self.e = 3 def encrypt(self, plaintext): plaintext = bytes_to_long(plaintext) return pow(plaintext, self.e, self.n) def menu(): print('[E]ncrypt the flag.') print('[A]bort training.\n') return input('> ').upper()[0] def main(): print('This is the second level of training.\n') while True: rsa = RSA() choice = menu() if choice == 'E': encrypted_flag = rsa.encrypt(FLAG) print(f'\nThe public key is:\n\nN: {rsa.n}\ne: {rsa.e}\n') print(f'The encrypted flag is: {encrypted_flag}\n') elif choice == 'A': print('\nGoodbye\n') exit(-1) else: print('\nInvalid choice!\n') exit(-1) if __name__ == '__main__': main() ``` solver: ``` # This script is not necessary for the challenge but may be useful in the # future. from pwn import * # This function takes in binary data and converts it to ASCII. def toAscii(data): return data.decode().strip() # This function sends the string "E" to the server and retrieves the public key # and encrypted flag that are returned. The public key consists of two parts: # N and e. def choiceE(): r.sendlineafter(b"> ", b"E") r.recvuntil(b"N: ") N = eval(toAscii(r.recvline())) r.recvuntil(b"e: ") e = eval(toAscii(r.recvline())) r.recvuntil(b"The encrypted flag is: ") encrypted_flag = eval(toAscii(r.recvline())) return N, e, encrypted_flag # This function serves as the main logic of the solver script. It calls # `choiceE()` to retrieve the public key and encrypted flag and prints them. def pwn(): N, e, encrypted_flag = choiceE() print(N, e, encrypted_flag) # This block handles the command-line flags when running `solver.py`. If the # `REMOTE` flag is set, the script connects to the remote host specified by the # `HOST` flag. Otherwise, it starts the server locally using `process()`. if __name__ == "__main__": if args.REMOTE: ip, port = args.HOST.split(":") r = remote(ip, int(port)) else: r = process(["python3", "server.py"]) pwn() ``` README.md: ![](https://i.imgur.com/nAIrHr1.png) - Khi chạy sever thì ta nhận được public key và encrypt flag ![](https://i.imgur.com/qwrdiu6.png) Ở đây ta thấy e=3 nên chúng ta có thể tấn công dễ dàng ![](https://i.imgur.com/e6zVtME.png) solved.py: ``` from gmpy2 import iroot from Crypto.Util.number import long_to_bytes n= 6673734633791890828744302299633379538016321578748721858962018030993224914098784291502959394594565385514223932557675074895532178527053053667361884909097399 e=3 c=70407336670535933819674104208890254240063781538460394662998902860952366439176467447947737680952277637330523818962104685553250402512989897886053 m=iroot(c,3)[0] print(long_to_bytes(m)) #HTB{5ma1l_E-xp0n3nt} ``` ### Perfect Synchronization ![](https://i.imgur.com/IxucebP.png) Tải các file về ta được source.py: ``` from os import urandom from Crypto.Cipher import AES from secret import MESSAGE assert all([x.isupper() or x in '{_} ' for x in MESSAGE]) class Cipher: def __init__(self): self.salt = urandom(15) key = urandom(16) self.cipher = AES.new(key, AES.MODE_ECB) def encrypt(self, message): return [self.cipher.encrypt(c.encode() + self.salt) for c in message] def main(): cipher = Cipher() encrypted = cipher.encrypt(MESSAGE) encrypted = "\n".join([c.hex() for c in encrypted]) with open("output.txt", 'w+') as f: f.write(encrypted) if __name__ == "__main__": main() ``` output.txt: ``` dfc8a2232dc2487a5455bda9fa2d45a1 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 60e8373bfb2124aea832f87809fca596 d178fac67ec4e9d2724fed6c7b50cd26 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d 457165130940ceac01160ac0ff924d86 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 5f122076e17398b7e21d1762a61e2e0a 200ecd2657df0197f202f258b45038d8 c87a7eb9283e59571ad0cb0c89a74379 e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 5f122076e17398b7e21d1762a61e2e0a 457165130940ceac01160ac0ff924d86 68d763bc4c7a9b0da3828e0b77b08b64 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea 5f122076e17398b7e21d1762a61e2e0a 68d763bc4c7a9b0da3828e0b77b08b64 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 78de2d97da222954cce639cc4b481050 e9b131ab270c54bbf67fb4bd9c8e3177 0df9b4e759512f36aaa5c7fd4fb1fba8 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 457165130940ceac01160ac0ff924d86 3a17ebebf2bad9aa0dd75b37a58fe6ea 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 305d4649e3cb097fb094f8f45abbf0dc e9b131ab270c54bbf67fb4bd9c8e3177 68d763bc4c7a9b0da3828e0b77b08b64 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 d178fac67ec4e9d2724fed6c7b50cd26 5f122076e17398b7e21d1762a61e2e0a 78de2d97da222954cce639cc4b481050 c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 68d763bc4c7a9b0da3828e0b77b08b64 5f122076e17398b7e21d1762a61e2e0a e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 4a3af0b7397584c4d450c6f7e83076aa 9673dbe632859fa33b8a79d6a3e3fe30 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 5f122076e17398b7e21d1762a61e2e0a 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 8cbd4cfebc9ddf583a108de1a69df088 34ece5ff054feccc5dabe9ae90438f9d 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 457165130940ceac01160ac0ff924d86 457165130940ceac01160ac0ff924d86 d178fac67ec4e9d2724fed6c7b50cd26 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 e9b131ab270c54bbf67fb4bd9c8e3177 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea 61331054d82aeec9a20416759766d9d5 0df9b4e759512f36aaa5c7fd4fb1fba8 5f122076e17398b7e21d1762a61e2e0a 305d4649e3cb097fb094f8f45abbf0dc 5d7185a6823ab4fc73f3ea33669a7bae e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 60e8373bfb2124aea832f87809fca596 d178fac67ec4e9d2724fed6c7b50cd26 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d 457165130940ceac01160ac0ff924d86 e9b131ab270c54bbf67fb4bd9c8e3177 c87a7eb9283e59571ad0cb0c89a74379 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 4a3af0b7397584c4d450c6f7e83076aa 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 8cbd4cfebc9ddf583a108de1a69df088 0df9b4e759512f36aaa5c7fd4fb1fba8 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 3a17ebebf2bad9aa0dd75b37a58fe6ea 5f122076e17398b7e21d1762a61e2e0a 305d4649e3cb097fb094f8f45abbf0dc 5f122076e17398b7e21d1762a61e2e0a 457165130940ceac01160ac0ff924d86 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 457165130940ceac01160ac0ff924d86 61331054d82aeec9a20416759766d9d5 e23c1323abc1fc41331b9cdfc40d5856 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 305d4649e3cb097fb094f8f45abbf0dc e9b131ab270c54bbf67fb4bd9c8e3177 9673dbe632859fa33b8a79d6a3e3fe30 d178fac67ec4e9d2724fed6c7b50cd26 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 8cbd4cfebc9ddf583a108de1a69df088 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea 5f122076e17398b7e21d1762a61e2e0a 68d763bc4c7a9b0da3828e0b77b08b64 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 305d4649e3cb097fb094f8f45abbf0dc 8cbd4cfebc9ddf583a108de1a69df088 d178fac67ec4e9d2724fed6c7b50cd26 78de2d97da222954cce639cc4b481050 3a17ebebf2bad9aa0dd75b37a58fe6ea f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 5f122076e17398b7e21d1762a61e2e0a 4a3af0b7397584c4d450c6f7e83076aa c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 4a3af0b7397584c4d450c6f7e83076aa 8cbd4cfebc9ddf583a108de1a69df088 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f f89f2719fb2814d9ab821316dae9862f 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 5f122076e17398b7e21d1762a61e2e0a 4a3af0b7397584c4d450c6f7e83076aa 2190a721b2dcb17ff693aa5feecb3b58 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea 5f122076e17398b7e21d1762a61e2e0a 68d763bc4c7a9b0da3828e0b77b08b64 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 d178fac67ec4e9d2724fed6c7b50cd26 5f122076e17398b7e21d1762a61e2e0a 78de2d97da222954cce639cc4b481050 c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 305d4649e3cb097fb094f8f45abbf0dc 5d7185a6823ab4fc73f3ea33669a7bae 2190a721b2dcb17ff693aa5feecb3b58 68d763bc4c7a9b0da3828e0b77b08b64 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 60e8373bfb2124aea832f87809fca596 d178fac67ec4e9d2724fed6c7b50cd26 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d 457165130940ceac01160ac0ff924d86 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 200ecd2657df0197f202f258b45038d8 8cbd4cfebc9ddf583a108de1a69df088 61331054d82aeec9a20416759766d9d5 fb78aed37621262392a4125183d1bfc9 34ece5ff054feccc5dabe9ae90438f9d 8cbd4cfebc9ddf583a108de1a69df088 66975492b6a53cc9a4503c3a1295b6a7 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 d178fac67ec4e9d2724fed6c7b50cd26 34ece5ff054feccc5dabe9ae90438f9d 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 d178fac67ec4e9d2724fed6c7b50cd26 e23c1323abc1fc41331b9cdfc40d5856 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 60e8373bfb2124aea832f87809fca596 d178fac67ec4e9d2724fed6c7b50cd26 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d 457165130940ceac01160ac0ff924d86 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 78de2d97da222954cce639cc4b481050 305d4649e3cb097fb094f8f45abbf0dc 8cbd4cfebc9ddf583a108de1a69df088 d178fac67ec4e9d2724fed6c7b50cd26 2190a721b2dcb17ff693aa5feecb3b58 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 e9b131ab270c54bbf67fb4bd9c8e3177 2190a721b2dcb17ff693aa5feecb3b58 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 2fc20e9a20605b988999e836301a2408 68d763bc4c7a9b0da3828e0b77b08b64 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 4a3af0b7397584c4d450c6f7e83076aa c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea 8cbd4cfebc9ddf583a108de1a69df088 e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 d178fac67ec4e9d2724fed6c7b50cd26 200ecd2657df0197f202f258b45038d8 c87a7eb9283e59571ad0cb0c89a74379 e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a e9b131ab270c54bbf67fb4bd9c8e3177 e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 8cbd4cfebc9ddf583a108de1a69df088 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 5f122076e17398b7e21d1762a61e2e0a fb78aed37621262392a4125183d1bfc9 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 f89f2719fb2814d9ab821316dae9862f 5f122076e17398b7e21d1762a61e2e0a 200ecd2657df0197f202f258b45038d8 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 457165130940ceac01160ac0ff924d86 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 e9b131ab270c54bbf67fb4bd9c8e3177 2190a721b2dcb17ff693aa5feecb3b58 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 60e8373bfb2124aea832f87809fca596 d178fac67ec4e9d2724fed6c7b50cd26 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d 457165130940ceac01160ac0ff924d86 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 60e8373bfb2124aea832f87809fca596 d178fac67ec4e9d2724fed6c7b50cd26 e9b131ab270c54bbf67fb4bd9c8e3177 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 34ece5ff054feccc5dabe9ae90438f9d f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 5f122076e17398b7e21d1762a61e2e0a 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 457165130940ceac01160ac0ff924d86 61331054d82aeec9a20416759766d9d5 d178fac67ec4e9d2724fed6c7b50cd26 34ece5ff054feccc5dabe9ae90438f9d e23c1323abc1fc41331b9cdfc40d5856 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d e23c1323abc1fc41331b9cdfc40d5856 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 5f122076e17398b7e21d1762a61e2e0a 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 457165130940ceac01160ac0ff924d86 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 f89f2719fb2814d9ab821316dae9862f 5f122076e17398b7e21d1762a61e2e0a e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 2fc20e9a20605b988999e836301a2408 68d763bc4c7a9b0da3828e0b77b08b64 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 d178fac67ec4e9d2724fed6c7b50cd26 5f122076e17398b7e21d1762a61e2e0a 78de2d97da222954cce639cc4b481050 c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 8cbd4cfebc9ddf583a108de1a69df088 4a3af0b7397584c4d450c6f7e83076aa c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 305d4649e3cb097fb094f8f45abbf0dc 8cbd4cfebc9ddf583a108de1a69df088 9673dbe632859fa33b8a79d6a3e3fe30 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 4a3af0b7397584c4d450c6f7e83076aa 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 8cbd4cfebc9ddf583a108de1a69df088 f89f2719fb2814d9ab821316dae9862f 0df9b4e759512f36aaa5c7fd4fb1fba8 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 fb78aed37621262392a4125183d1bfc9 e9b131ab270c54bbf67fb4bd9c8e3177 f89f2719fb2814d9ab821316dae9862f f89f2719fb2814d9ab821316dae9862f 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc dfc8a2232dc2487a5455bda9fa2d45a1 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc 4a3af0b7397584c4d450c6f7e83076aa c87a7eb9283e59571ad0cb0c89a74379 e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 3a17ebebf2bad9aa0dd75b37a58fe6ea 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 8cbd4cfebc9ddf583a108de1a69df088 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 457165130940ceac01160ac0ff924d86 c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 c87a7eb9283e59571ad0cb0c89a74379 2fc20e9a20605b988999e836301a2408 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 0df9b4e759512f36aaa5c7fd4fb1fba8 c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 8cbd4cfebc9ddf583a108de1a69df088 8cbd4cfebc9ddf583a108de1a69df088 fb78aed37621262392a4125183d1bfc9 fb78aed37621262392a4125183d1bfc9 c87a7eb9283e59571ad0cb0c89a74379 c87a7eb9283e59571ad0cb0c89a74379 2190a721b2dcb17ff693aa5feecb3b58 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 e23c1323abc1fc41331b9cdfc40d5856 d178fac67ec4e9d2724fed6c7b50cd26 305d4649e3cb097fb094f8f45abbf0dc e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc f89f2719fb2814d9ab821316dae9862f e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 5f122076e17398b7e21d1762a61e2e0a 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 e9b131ab270c54bbf67fb4bd9c8e3177 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 8cbd4cfebc9ddf583a108de1a69df088 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 305d4649e3cb097fb094f8f45abbf0dc e9b131ab270c54bbf67fb4bd9c8e3177 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 3a17ebebf2bad9aa0dd75b37a58fe6ea 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 4a3af0b7397584c4d450c6f7e83076aa c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc e9b131ab270c54bbf67fb4bd9c8e3177 457165130940ceac01160ac0ff924d86 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 457165130940ceac01160ac0ff924d86 305d4649e3cb097fb094f8f45abbf0dc d178fac67ec4e9d2724fed6c7b50cd26 e9b131ab270c54bbf67fb4bd9c8e3177 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 e23c1323abc1fc41331b9cdfc40d5856 c87a7eb9283e59571ad0cb0c89a74379 9673dbe632859fa33b8a79d6a3e3fe30 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 5f122076e17398b7e21d1762a61e2e0a fb78aed37621262392a4125183d1bfc9 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 f89f2719fb2814d9ab821316dae9862f 5f122076e17398b7e21d1762a61e2e0a 457165130940ceac01160ac0ff924d86 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 305d4649e3cb097fb094f8f45abbf0dc 8cbd4cfebc9ddf583a108de1a69df088 200ecd2657df0197f202f258b45038d8 200ecd2657df0197f202f258b45038d8 66975492b6a53cc9a4503c3a1295b6a7 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 d178fac67ec4e9d2724fed6c7b50cd26 293f56083c20759d275db846c8bfb03e 293f56083c20759d275db846c8bfb03e f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 4a3af0b7397584c4d450c6f7e83076aa 5f122076e17398b7e21d1762a61e2e0a 5ae172c9ea46594cea34ad1a4b1c79cd 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 34ece5ff054feccc5dabe9ae90438f9d c87a7eb9283e59571ad0cb0c89a74379 66975492b6a53cc9a4503c3a1295b6a7 200ecd2657df0197f202f258b45038d8 2190a721b2dcb17ff693aa5feecb3b58 5f122076e17398b7e21d1762a61e2e0a 2190a721b2dcb17ff693aa5feecb3b58 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 305d4649e3cb097fb094f8f45abbf0dc d178fac67ec4e9d2724fed6c7b50cd26 34ece5ff054feccc5dabe9ae90438f9d 34ece5ff054feccc5dabe9ae90438f9d e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 34ece5ff054feccc5dabe9ae90438f9d 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 3a17ebebf2bad9aa0dd75b37a58fe6ea 8cbd4cfebc9ddf583a108de1a69df088 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 d178fac67ec4e9d2724fed6c7b50cd26 f89f2719fb2814d9ab821316dae9862f e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 8cbd4cfebc9ddf583a108de1a69df088 f89f2719fb2814d9ab821316dae9862f 0df9b4e759512f36aaa5c7fd4fb1fba8 c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 4a3af0b7397584c4d450c6f7e83076aa 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 5f122076e17398b7e21d1762a61e2e0a 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 c87a7eb9283e59571ad0cb0c89a74379 0df9b4e759512f36aaa5c7fd4fb1fba8 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 e9b131ab270c54bbf67fb4bd9c8e3177 2190a721b2dcb17ff693aa5feecb3b58 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 d178fac67ec4e9d2724fed6c7b50cd26 200ecd2657df0197f202f258b45038d8 c87a7eb9283e59571ad0cb0c89a74379 e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 2fc20e9a20605b988999e836301a2408 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 8cbd4cfebc9ddf583a108de1a69df088 66975492b6a53cc9a4503c3a1295b6a7 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 5f122076e17398b7e21d1762a61e2e0a fb78aed37621262392a4125183d1bfc9 5f122076e17398b7e21d1762a61e2e0a 9673dbe632859fa33b8a79d6a3e3fe30 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 d178fac67ec4e9d2724fed6c7b50cd26 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 60e8373bfb2124aea832f87809fca596 d178fac67ec4e9d2724fed6c7b50cd26 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d 457165130940ceac01160ac0ff924d86 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 c87a7eb9283e59571ad0cb0c89a74379 2fc20e9a20605b988999e836301a2408 5f122076e17398b7e21d1762a61e2e0a 4a3af0b7397584c4d450c6f7e83076aa 2190a721b2dcb17ff693aa5feecb3b58 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 8cbd4cfebc9ddf583a108de1a69df088 4a3af0b7397584c4d450c6f7e83076aa c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 34ece5ff054feccc5dabe9ae90438f9d 200ecd2657df0197f202f258b45038d8 d178fac67ec4e9d2724fed6c7b50cd26 f89f2719fb2814d9ab821316dae9862f 5f122076e17398b7e21d1762a61e2e0a 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 e9b131ab270c54bbf67fb4bd9c8e3177 2190a721b2dcb17ff693aa5feecb3b58 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 d178fac67ec4e9d2724fed6c7b50cd26 200ecd2657df0197f202f258b45038d8 c87a7eb9283e59571ad0cb0c89a74379 e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 5ae172c9ea46594cea34ad1a4b1c79cd 5f122076e17398b7e21d1762a61e2e0a 2190a721b2dcb17ff693aa5feecb3b58 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d c87a7eb9283e59571ad0cb0c89a74379 200ecd2657df0197f202f258b45038d8 c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 4a3af0b7397584c4d450c6f7e83076aa c87a7eb9283e59571ad0cb0c89a74379 457165130940ceac01160ac0ff924d86 3a17ebebf2bad9aa0dd75b37a58fe6ea 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d e9b131ab270c54bbf67fb4bd9c8e3177 457165130940ceac01160ac0ff924d86 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 61331054d82aeec9a20416759766d9d5 4a3af0b7397584c4d450c6f7e83076aa c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea 8cbd4cfebc9ddf583a108de1a69df088 e23c1323abc1fc41331b9cdfc40d5856 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 d178fac67ec4e9d2724fed6c7b50cd26 34ece5ff054feccc5dabe9ae90438f9d 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 5f122076e17398b7e21d1762a61e2e0a 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 457165130940ceac01160ac0ff924d86 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 78de2d97da222954cce639cc4b481050 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 3a17ebebf2bad9aa0dd75b37a58fe6ea 68d763bc4c7a9b0da3828e0b77b08b64 9673dbe632859fa33b8a79d6a3e3fe30 fbe86a428051747607a35b44b1a3e9e9 5f122076e17398b7e21d1762a61e2e0a a94f49727cf771a85831bd03af1caaf5 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 4a3af0b7397584c4d450c6f7e83076aa 2190a721b2dcb17ff693aa5feecb3b58 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 a94f49727cf771a85831bd03af1caaf5 200ecd2657df0197f202f258b45038d8 d178fac67ec4e9d2724fed6c7b50cd26 9673dbe632859fa33b8a79d6a3e3fe30 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 68d763bc4c7a9b0da3828e0b77b08b64 d178fac67ec4e9d2724fed6c7b50cd26 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 8cbd4cfebc9ddf583a108de1a69df088 34ece5ff054feccc5dabe9ae90438f9d a94f49727cf771a85831bd03af1caaf5 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 a94f49727cf771a85831bd03af1caaf5 66975492b6a53cc9a4503c3a1295b6a7 c87a7eb9283e59571ad0cb0c89a74379 5f122076e17398b7e21d1762a61e2e0a fb78aed37621262392a4125183d1bfc9 c53ba24fbbe9e3dbdd6062b3aab7ed1a 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 5f122076e17398b7e21d1762a61e2e0a 305d4649e3cb097fb094f8f45abbf0dc e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 5d7185a6823ab4fc73f3ea33669a7bae 2190a721b2dcb17ff693aa5feecb3b58 c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 4a3af0b7397584c4d450c6f7e83076aa 5f122076e17398b7e21d1762a61e2e0a 457165130940ceac01160ac0ff924d86 3a17ebebf2bad9aa0dd75b37a58fe6ea e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 e9b131ab270c54bbf67fb4bd9c8e3177 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 68d763bc4c7a9b0da3828e0b77b08b64 61331054d82aeec9a20416759766d9d5 d178fac67ec4e9d2724fed6c7b50cd26 200ecd2657df0197f202f258b45038d8 c87a7eb9283e59571ad0cb0c89a74379 e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc f89f2719fb2814d9ab821316dae9862f e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 5f122076e17398b7e21d1762a61e2e0a 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 e9b131ab270c54bbf67fb4bd9c8e3177 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 8cbd4cfebc9ddf583a108de1a69df088 200ecd2657df0197f202f258b45038d8 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 9673dbe632859fa33b8a79d6a3e3fe30 f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 d178fac67ec4e9d2724fed6c7b50cd26 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 305d4649e3cb097fb094f8f45abbf0dc 4a3af0b7397584c4d450c6f7e83076aa 5d7185a6823ab4fc73f3ea33669a7bae 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 8cbd4cfebc9ddf583a108de1a69df088 e23c1323abc1fc41331b9cdfc40d5856 5f122076e17398b7e21d1762a61e2e0a 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 3a17ebebf2bad9aa0dd75b37a58fe6ea 5f122076e17398b7e21d1762a61e2e0a 305d4649e3cb097fb094f8f45abbf0dc e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc fb78aed37621262392a4125183d1bfc9 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 61331054d82aeec9a20416759766d9d5 f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 68d763bc4c7a9b0da3828e0b77b08b64 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 d178fac67ec4e9d2724fed6c7b50cd26 34ece5ff054feccc5dabe9ae90438f9d 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 3a17ebebf2bad9aa0dd75b37a58fe6ea 5f122076e17398b7e21d1762a61e2e0a 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 c87a7eb9283e59571ad0cb0c89a74379 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 2190a721b2dcb17ff693aa5feecb3b58 f89f2719fb2814d9ab821316dae9862f 5f122076e17398b7e21d1762a61e2e0a 457165130940ceac01160ac0ff924d86 c87a7eb9283e59571ad0cb0c89a74379 e23c1323abc1fc41331b9cdfc40d5856 61331054d82aeec9a20416759766d9d5 9673dbe632859fa33b8a79d6a3e3fe30 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 4a3af0b7397584c4d450c6f7e83076aa 2190a721b2dcb17ff693aa5feecb3b58 d178fac67ec4e9d2724fed6c7b50cd26 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 8cbd4cfebc9ddf583a108de1a69df088 dfc8a2232dc2487a5455bda9fa2d45a1 68d763bc4c7a9b0da3828e0b77b08b64 66975492b6a53cc9a4503c3a1295b6a7 5f122076e17398b7e21d1762a61e2e0a 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 3a17ebebf2bad9aa0dd75b37a58fe6ea e9b131ab270c54bbf67fb4bd9c8e3177 457165130940ceac01160ac0ff924d86 3a17ebebf2bad9aa0dd75b37a58fe6ea 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 5f122076e17398b7e21d1762a61e2e0a 305d4649e3cb097fb094f8f45abbf0dc 305d4649e3cb097fb094f8f45abbf0dc 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 8cbd4cfebc9ddf583a108de1a69df088 d178fac67ec4e9d2724fed6c7b50cd26 68d763bc4c7a9b0da3828e0b77b08b64 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 d178fac67ec4e9d2724fed6c7b50cd26 457165130940ceac01160ac0ff924d86 3a17ebebf2bad9aa0dd75b37a58fe6ea 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 200ecd2657df0197f202f258b45038d8 c87a7eb9283e59571ad0cb0c89a74379 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 34ece5ff054feccc5dabe9ae90438f9d e23c1323abc1fc41331b9cdfc40d5856 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 66975492b6a53cc9a4503c3a1295b6a7 e9b131ab270c54bbf67fb4bd9c8e3177 68d763bc4c7a9b0da3828e0b77b08b64 3a17ebebf2bad9aa0dd75b37a58fe6ea 61331054d82aeec9a20416759766d9d5 4a3af0b7397584c4d450c6f7e83076aa 8cbd4cfebc9ddf583a108de1a69df088 e23c1323abc1fc41331b9cdfc40d5856 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 4a3af0b7397584c4d450c6f7e83076aa 2190a721b2dcb17ff693aa5feecb3b58 d178fac67ec4e9d2724fed6c7b50cd26 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 34ece5ff054feccc5dabe9ae90438f9d 78de2d97da222954cce639cc4b481050 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 8cbd4cfebc9ddf583a108de1a69df088 66975492b6a53cc9a4503c3a1295b6a7 c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 f89f2719fb2814d9ab821316dae9862f 5f122076e17398b7e21d1762a61e2e0a 200ecd2657df0197f202f258b45038d8 200ecd2657df0197f202f258b45038d8 e9b131ab270c54bbf67fb4bd9c8e3177 457165130940ceac01160ac0ff924d86 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 e9b131ab270c54bbf67fb4bd9c8e3177 2190a721b2dcb17ff693aa5feecb3b58 3a17ebebf2bad9aa0dd75b37a58fe6ea c87a7eb9283e59571ad0cb0c89a74379 305d4649e3cb097fb094f8f45abbf0dc 200ecd2657df0197f202f258b45038d8 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 d178fac67ec4e9d2724fed6c7b50cd26 34ece5ff054feccc5dabe9ae90438f9d f89f2719fb2814d9ab821316dae9862f e9b131ab270c54bbf67fb4bd9c8e3177 fb78aed37621262392a4125183d1bfc9 c87a7eb9283e59571ad0cb0c89a74379 f89f2719fb2814d9ab821316dae9862f 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 68d763bc4c7a9b0da3828e0b77b08b64 8cbd4cfebc9ddf583a108de1a69df088 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 305d4649e3cb097fb094f8f45abbf0dc 8cbd4cfebc9ddf583a108de1a69df088 0df9b4e759512f36aaa5c7fd4fb1fba8 e9b131ab270c54bbf67fb4bd9c8e3177 e23c1323abc1fc41331b9cdfc40d5856 c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 5f122076e17398b7e21d1762a61e2e0a 34ece5ff054feccc5dabe9ae90438f9d 5d7185a6823ab4fc73f3ea33669a7bae 61331054d82aeec9a20416759766d9d5 305d4649e3cb097fb094f8f45abbf0dc c87a7eb9283e59571ad0cb0c89a74379 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 305d4649e3cb097fb094f8f45abbf0dc 8cbd4cfebc9ddf583a108de1a69df088 68d763bc4c7a9b0da3828e0b77b08b64 c87a7eb9283e59571ad0cb0c89a74379 457165130940ceac01160ac0ff924d86 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 8cbd4cfebc9ddf583a108de1a69df088 34ece5ff054feccc5dabe9ae90438f9d 61331054d82aeec9a20416759766d9d5 dfc8a2232dc2487a5455bda9fa2d45a1 8cbd4cfebc9ddf583a108de1a69df088 305d4649e3cb097fb094f8f45abbf0dc 61331054d82aeec9a20416759766d9d5 457165130940ceac01160ac0ff924d86 8cbd4cfebc9ddf583a108de1a69df088 34ece5ff054feccc5dabe9ae90438f9d dfc8a2232dc2487a5455bda9fa2d45a1 e9b131ab270c54bbf67fb4bd9c8e3177 e23c1323abc1fc41331b9cdfc40d5856 c87a7eb9283e59571ad0cb0c89a74379 34ece5ff054feccc5dabe9ae90438f9d 68d763bc4c7a9b0da3828e0b77b08b64 e9b131ab270c54bbf67fb4bd9c8e3177 5f122076e17398b7e21d1762a61e2e0a f89f2719fb2814d9ab821316dae9862f 61331054d82aeec9a20416759766d9d5 e23c1323abc1fc41331b9cdfc40d5856 5f122076e17398b7e21d1762a61e2e0a 68d763bc4c7a9b0da3828e0b77b08b64 5f122076e17398b7e21d1762a61e2e0a 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 d178fac67ec4e9d2724fed6c7b50cd26 293f56083c20759d275db846c8bfb03e 293f56083c20759d275db846c8bfb03e f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 d178fac67ec4e9d2724fed6c7b50cd26 293f56083c20759d275db846c8bfb03e 293f56083c20759d275db846c8bfb03e f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 61331054d82aeec9a20416759766d9d5 2190a721b2dcb17ff693aa5feecb3b58 d178fac67ec4e9d2724fed6c7b50cd26 293f56083c20759d275db846c8bfb03e 293f56083c20759d275db846c8bfb03e f89f2719fb2814d9ab821316dae9862f c87a7eb9283e59571ad0cb0c89a74379 ``` - Theo như phần mô tả thì dùng công cụ quipqiup(một công cụ tự động để phân tích tần số và phá vỡ các mật mã thay thế) - Để làm bài dạng thay thế này thì đầu tiên mình theo các dòng ciphertext thành các chữ cái ngẫu nhiên và bỏ vô tool quipqiup ( https://quipqiup.com/) - Hình thứ nhất này mình đếm số lần xuất hiện của các dòng, ở đây có tất cả 30 dòng mà bảng chữ cái chỉ có 26 chữ cái thì mình nghĩ form flag có các kí tự: *{* *_* *}* *'* và số lần xuất hiện tương ứng là 1 4 1 2. Mình đã biết được 4 kí tự của đoạn tin nhắn rồi. ![](https://i.imgur.com/Xk9VtRz.png) - Hình thứ hai này là đoạn mình thay chữ cái random như hình 1 vào ciphertext ![](https://i.imgur.com/1fknCNO.png) - Hình thứ ba này mình cho đoạn mình đã thay vào tool và được một đoạn chữ. Mình thấy có một số từ có nghĩa như từ ciphers và subtitution is weak ![](https://i.imgur.com/uP41HnB.png) ![](https://i.imgur.com/Mk5dESp.png) - Tới đây mình sài tool Substitution Cipher https://www.dcode.fr/substitution-cipher - Mình bắt đầu thay thế từng chữ mình biết được ![](https://i.imgur.com/ZfyfH6W.png) mình thấy có một đoạn khá giống form flag và mình bắt đầu đối chiếu từ hình 1 và thay chữ. ![](https://i.imgur.com/70ci97T.png) ![](https://i.imgur.com/DlOGeOm.png) ![](https://i.imgur.com/6VZwrT1.png) - Chúng ta đã có được flag: ![](https://i.imgur.com/r6iWlMw.png) HTB{A_SIMPLE_SUBSTITUTION_IS_WEAK} ### Multipage Recyclings ![](https://i.imgur.com/1jokD4Q.png) Tải các file về: source.py: ``` from Crypto.Cipher import AES from Crypto.Util.Padding import pad import random, os FLAG = b'HTB{??????????????????????}' class CAES: def __init__(self): self.key = os.urandom(16) self.cipher = AES.new(self.key, AES.MODE_ECB) def blockify(self, message, size): return [message[i:i + size] for i in range(0, len(message), size)] def xor(self, a, b): return b''.join([bytes([_a ^ _b]) for _a, _b in zip(a, b)]) def encrypt(self, message): iv = os.urandom(16) ciphertext = b'' plaintext = iv blocks = self.blockify(message, 16) for block in blocks: ct = self.cipher.encrypt(plaintext) encrypted_block = self.xor(block, ct) ciphertext += encrypted_block plaintext = encrypted_block return ciphertext def leak(self, blocks): r = random.randint(0, len(blocks) - 2) leak = [self.cipher.encrypt(blocks[i]).hex() for i in [r, r + 1]] return r, leak def main(): aes = CAES() message = pad(FLAG * 4, 16) ciphertext = aes.encrypt(message) ciphertext_blocks = aes.blockify(ciphertext, 16) r, leak = aes.leak(ciphertext_blocks) with open('output.txt', 'w') as f: f.write(f'ct = {ciphertext.hex()}\nr = {r}\nphrases = {leak}\n') if __name__ == "__main__": main() ``` output.txt: ``` ct = bc9bc77a809b7f618522d36ef7765e1cad359eef39f0eaa5dc5d85f3ab249e788c9bc36e11d72eee281d1a645027bd96a363c0e24efc6b5caa552b2df4979a5ad41e405576d415a5272ba730e27c593eb2c725031a52b7aa92df4c4e26f116c631630b5d23f11775804a688e5e4d5624 r = 3 phrases = ['8b6973611d8b62941043f85cd1483244', 'cf8f71416111f1e8cdee791151c222ad'] ``` - Mô tả: ![](https://i.imgur.com/OgOhVQX.jpg) - Đoạn code sẽ tạo một iv ngẫu nhiên độ dài 16bytes đem mã hóa AES rồi đem xor với messblock1 được En_block1. Tiếp đó họ lấy En_block1 mã hóa qua AES rồi xor cho với messblock2 được En_block2 và cứ tiếp tục như thế. - Ở đây họ sẽ cho chúng ta hai khối leak ngẫu nhiên cụ thể ở đây là leak3 và leak4.![](https://i.imgur.com/c22BSr0.png) - Leck3 ở đây tức là đoạn En_block2 mã hóa qua AES và tương tự Leck4 cũng là mã hóa AES của En_block4 nên chúng ta có thể dễ dàng tìm được messblock3 và 4 bằng cách xor ngược lại.![](https://i.imgur.com/PO4fWr9.png) solved.py: ``` from Crypto.Cipher import AES from Crypto.Util.Padding import pad from pwn import * leak3='8b6973611d8b62941043f85cd1483244' leak3=bytes.fromhex(leak3) leak4='cf8f71416111f1e8cdee791151c222ad' leak4=bytes.fromhex(leak4) ct="bc9bc77a809b7f618522d36ef7765e1cad359eef39f0eaa5dc5d85f3ab249e788c9bc36e11d72eee281d1a645027bd96a363c0e24efc6b5caa552b2df4979a5ad41e405576d415a5272ba730e27c593eb2c725031a52b7aa92df4c4e26f116c631630b5d23f11775804a688e5e4d5624" ct=bytes.fromhex(ct) messblock3=xor(leak3,ct) messblock4=xor(leak4,ct) print(messblock3) print(messblock4) ``` - Sau khi in ra kết quả mình thấy ở messblock4 có đoạn form flag và messblock3 có đoạn ở giữa flag ![](https://i.imgur.com/BrbybrR.png) - Mình kết hợp và xem xét độ dài của flag thì mình ghép chúng lại và được flag: #HTB{CFB_15_w34k #_w34k_w17h_l34kz9 #HTB{CFB_15_w34k_w17h_l34kz} ### Inside The Matrix ![](https://i.imgur.com/OzKHn5F.png) Tải file về: sever.py: ``` from sage.all_cmdline import * # from utils import ascii_print import os FLAG = b"HTB{????????????????????}" assert len(FLAG) == 25 class Book: def __init__(self): self.size = 5 self.prime = None def parse(self, pt: bytes): pt = [b for b in pt] return matrix(GF(self.prime), self.size, self.size, pt) def generate(self): key = os.urandom(self.size**2) return self.parse(key) def rotate(self): self.prime = random_prime(2**6, False, 2**4) def encrypt(self, message: bytes): self.rotate() key = self.generate() message = self.parse(message) ciphertext = message * key return ciphertext, key def menu(): print("Options:\n") print("[L]ook at page") print("[T]urn page") print("[C]heat\n") option = input("> ") return option def main(): book = Book() ciphertext, key = book.encrypt(FLAG) page_number = 1 while True: option = menu() if option == "L": # ascii_print(ciphertext, key, page_number) print(ciphertext, key, page_number) elif option == "T": ciphertext, key = book.encrypt(FLAG) page_number += 2 print() elif option == "C": print(f"\n{list(ciphertext)}\n{list(key)}\n") else: print("\nInvalid option!\n") if __name__ == "__main__": try: main() except Exception as e: print(f"An error occurred: {e}") ``` - Mình kết nối tới sever và lấy về ciphertext và key như hình dưới. ![](https://i.imgur.com/WvWbByg.png) ![](https://i.imgur.com/lhY4wrr.png) ![](https://i.imgur.com/aWVooKg.png) ![](https://i.imgur.com/t8eVnOJ.png) ![](https://i.imgur.com/Wabnz0A.png) ![](https://i.imgur.com/60dvBP8.png) - Đọc source ta thấy ban đầu họ lấy random một số nguyên tố dao động từ 2^4 đến 2^6. Tạo ngẫu nhiên một key và phân tích nó thành ma trận 5x5. Chuyển massage thành ma mận 5x5. Sau đó thực hiện phép nhân massge với key và trả về ciphertext và key. - Ở đây ta có ciphertext và key, mình sẽ gọi là c và k .Do c=flag * k nên chúng ta có thể tính flag bằng cách nhân c với k nghịch đảo. `c= flag * k <=> flag = c * k_inv ` - Hàm parse nhận vào một chuỗi bytes pt và trả về một ma trận trong trường số nguyên modulo prime. ![](https://i.imgur.com/1NCzQLc.png) Vì vậy muốn tính được flag ta cần tính prime. Do prime phạm vi nhỏ nên chúng ta có thể brute-force nó. `prime= [17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61]` Tuy nhiên phần tử ma trận được phân tích cú pháp đã được giảm theo modulo của phần tử đã chọn prime nên parse ma trận của flag không còn giá trị ban đầu. Vì vậy chúng ta có thể sử dụng định lý thặng dư Trung Hoa để khôi phục flag ban đầu. ``` x[i]=flag[i] mod p1 x[i]=flag[i] mod p2 x[i]=flag[i] mod p3 ``` sage script: ``` import numpy as np from sympy.ntheory.modular import crt from sage.all import * primes = [17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61] c1=[(3, 17, 47, 0, 18), (19, 36, 43, 18, 8), (27, 0, 36, 30, 16), (24, 51, 38, 11, 13), (46, 21, 14, 13, 17)] k1=[(38, 15, 17, 31, 12), (51, 24, 29, 52, 49), (43, 36, 44, 58, 25), (6, 45, 51, 8, 14), (15, 37, 40, 32, 31)] c2=[(4, 6, 5, 5, 2), (3, 4, 7, 0, 10), (0, 9, 6, 3, 12), (5, 5, 7, 0, 16), (5, 4, 16, 2, 10)] k2=[(2, 13, 12, 3, 8), (13, 5, 2, 13, 0), (12, 15, 7, 6, 7), (16, 3, 14, 14, 4), (9, 16, 6, 5, 6)] c3=[(33, 2, 25, 31, 22), (51, 50, 40, 41, 14), (27, 36, 14, 48, 16), (51, 14, 32, 26, 32), (51, 20, 41, 30, 5)] k3=[(17, 36, 50, 16, 35), (37, 43, 0, 52, 42), (48, 27, 3, 7, 24), (1, 50, 16, 4, 28), (21, 35, 18, 38, 38)] k1_inv=np.linalg.inv(k1) k2_inv=np.linalg.inv(k2) k3_inv=np.linalg.inv(k3) c1 = Matrix(c1) c2 = Matrix(c2) c3 = Matrix(c3) for p in primes: ct=Matrix(GF(p),5,5,c1) key= Matrix(GF(p),5,5,k1) if key.is_invertible(): flag1=c1*k1_inv if (72 % p) == int(flag1[0][0]): p.append(p) break for p in primes: ct=Matrix(GF(p),5,5,c2) key= Matrix(GF(p),5,5,k2) if key.is_invertible(): flag2=c2*k2_inv if (72 % p) == int(flag2[0][0]): p.append(p) break for p in primes: ct=Matrix(GF(p),5,5,c3) key= Matrix(GF(p),5,5,k3) if key.is_invertible(): flag3=c3*k3_inv if (72 % p) == int(flag3[0][0]): p.append(p) break flag1 = flag1.list() flag2 = flag2.list() flag3 = flag3.list() for i in range(25): flag_char = crt(p,[int(flag1[i]),int(flag2[i]), int(flag3[i])])[0] flag= chr(flag_char,end='') print(flag) #HTB{l00k_@t_7h3_st4rs!!!} ``` Flag: HTB{l00k_@t_7h3_st4rs!!!}