### Reverthable X-Math
![3_title](images/3_title.png)
This time we are given with LISP program and output.txt.
Lisp source:
``` lisp(defun frobnicate(str xor offset lvl)  (setq mead (cheekybreeky (+ xor offset)))
  (cond ((< xor (- offset 1))        (princ (logxor (- (char-int (char str mead)) (char-int #\0)) 42))        (princ "/")        (if (equal lvl 3)          (setq mead (cheekybreeky 16))        )
        (frobnicate str xor mead (+ lvl 1))        (frobnicate str (+ mead 1) offset (+ lvl 1))    )    (      t 0    )  ))
(defun cheekybreeky (num)  (setq n 0)  (loop    (if (>= (* n 2) num)       (return)    )    (setq n (+ 1 n))  )
  (if (equal (* n 2) num)    (return-from cheekybreeky n)    (return-from cheekybreeky (- n 1))  ))
(defun hello()  (setq flag "your flag is in another castle!!")  (frobnicate flag 0 (length flag) 0.0))
(hello)
```
output.txt :
``` sh47/22/9/55/-41/59/39/97/-38/-38/108/42/41/-47/-46/-38/-38/22/46/110/22/46/23/20/45/46/47/20/-45/46/103/0```
Obviously, the output is a flag, you just need to understand the lisp code.
Solution:
​	Every element splitted by slash in output.txt xored with 42 and added with 48:
``` lisp(princ (logxor (- (char-int (char str mead)) (char-int #\0)) 42))```
Let's print **mead** every time the condition gets executed so we can see in which positions on which the elements should be.
``` lisp(format t "~d " mead)```
``` shReverthable X-Math> clisp task.lsp16 8 4 2 1 3 6 5 7 12 10 9 11 14 13 15 24 20 18 17 19 22 21 23 28 26 25 27 30 29 31```
Algorithm:
``` pythonkey ='47/22/9/55/-41/59/39/97/-38/-38/108/42/41/-47/-46/-38/-38/22/46/110/22/46/23/20/45/46/47/20/-45/46/103/0'pos = [16, 8, 4, 2, 1, 3, 6, 5, 7, 12, 10, 9, 11, 14, 13, 15, 24, 20,       18, 17, 19, 22, 21, 23, 28, 26, 25, 27, 30, 29, 31] decode = lambda y: "".join([chr((int(i) ^ 42) + 48) for i in y])
flag = [0 for i in range(len(pos) + 1)]temp = decode(key.split('/'))for i in range(len(pos)):    flag[pos[i]] = temp[i]
print(''.join(str(i) for i in flag))```
``` >>> 0-MAS{= l0v3 (+ 5t4llm4n 54n74)}```
Everything is right but the first character should be 'X'