From dc6284f487b3f95cf91061b9984608b8d36c4f1c Mon Sep 17 00:00:00 2001
From: h7x4 <h7x4@nani.wtf>
Date: Mon, 2 Sep 2024 20:19:47 +0200
Subject: [PATCH] rev: add a few more challenges

---
 rev/bloat_py/bloat.flag.py                    |   41 +
 rev/bloat_py/clean-bloat.flag.py              |   39 +
 rev/bloat_py/flag.txt.enc                     |  Bin 0 -> 35 bytes
 rev/bloat_py/output.txt                       |    4 +
 rev/file_run1/run                             |  Bin 0 -> 16736 bytes
 rev/file_run2/output.txt                      |    2 +
 rev/file_run2/run                             |  Bin 0 -> 16816 bytes
 rev/fresh_java/KeygenMe.class                 |  Bin 0 -> 1883 bytes
 rev/fresh_java/decompiled.java                |  152 +++
 rev/fresh_java/flag.txt                       |    1 +
 rev/patchme_py/flag.txt.enc                   |    3 +
 rev/patchme_py/output.txt                     |    4 +
 rev/patchme_py/patchme.flag.py                |   31 +
 rev/reverse/ret                               |  Bin 0 -> 16888 bytes
 rev/reverse/solve.sh                          |    4 +
 rev/safe_opener/SafeOpener.java               |   42 +
 rev/safe_opener/a.out                         |    0
 rev/safe_opener/flag.txt                      |    3 +
 rev/safe_opener_2/SafeOpener.class            |  Bin 0 -> 2036 bytes
 rev/safe_opener_2/solve.sh                    |    4 +
 rev/speeds_and_feeds/flag.txt                 |    3 +
 rev/speeds_and_feeds/output.nc                | 1099 +++++++++++++++++
 rev/unpackme_py/unpackme.flag.py              |   15 +
 .../VaultDoorTraining.java                    |   26 +
 rev/vault_door_training/flag.txt              |    1 +
 25 files changed, 1474 insertions(+)
 create mode 100755 rev/bloat_py/bloat.flag.py
 create mode 100755 rev/bloat_py/clean-bloat.flag.py
 create mode 100644 rev/bloat_py/flag.txt.enc
 create mode 100644 rev/bloat_py/output.txt
 create mode 100755 rev/file_run1/run
 create mode 100644 rev/file_run2/output.txt
 create mode 100755 rev/file_run2/run
 create mode 100644 rev/fresh_java/KeygenMe.class
 create mode 100644 rev/fresh_java/decompiled.java
 create mode 100644 rev/fresh_java/flag.txt
 create mode 100644 rev/patchme_py/flag.txt.enc
 create mode 100644 rev/patchme_py/output.txt
 create mode 100644 rev/patchme_py/patchme.flag.py
 create mode 100755 rev/reverse/ret
 create mode 100755 rev/reverse/solve.sh
 create mode 100644 rev/safe_opener/SafeOpener.java
 create mode 100644 rev/safe_opener/a.out
 create mode 100644 rev/safe_opener/flag.txt
 create mode 100644 rev/safe_opener_2/SafeOpener.class
 create mode 100755 rev/safe_opener_2/solve.sh
 create mode 100644 rev/speeds_and_feeds/flag.txt
 create mode 100644 rev/speeds_and_feeds/output.nc
 create mode 100755 rev/unpackme_py/unpackme.flag.py
 create mode 100644 rev/vault_door_training/VaultDoorTraining.java
 create mode 100644 rev/vault_door_training/flag.txt

diff --git a/rev/bloat_py/bloat.flag.py b/rev/bloat_py/bloat.flag.py
new file mode 100755
index 0000000..f4c9686
--- /dev/null
+++ b/rev/bloat_py/bloat.flag.py
@@ -0,0 +1,41 @@
+import sys
+a = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ \
+            "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ "
+def arg133(arg432):
+  if arg432 == a[71]+a[64]+a[79]+a[79]+a[88]+a[66]+a[71]+a[64]+a[77]+a[66]+a[68]:
+    return True
+  else:
+    print(a[51]+a[71]+a[64]+a[83]+a[94]+a[79]+a[64]+a[82]+a[82]+a[86]+a[78]+\
+a[81]+a[67]+a[94]+a[72]+a[82]+a[94]+a[72]+a[77]+a[66]+a[78]+a[81]+\
+a[81]+a[68]+a[66]+a[83])
+    sys.exit(0)
+    return False
+def arg111(arg444):
+  return arg122(arg444.decode(), a[81]+a[64]+a[79]+a[82]+a[66]+a[64]+a[75]+\
+a[75]+a[72]+a[78]+a[77])
+def arg232():
+  return input(a[47]+a[75]+a[68]+a[64]+a[82]+a[68]+a[94]+a[68]+a[77]+a[83]+\
+a[68]+a[81]+a[94]+a[66]+a[78]+a[81]+a[81]+a[68]+a[66]+a[83]+\
+a[94]+a[79]+a[64]+a[82]+a[82]+a[86]+a[78]+a[81]+a[67]+a[94]+\
+a[69]+a[78]+a[81]+a[94]+a[69]+a[75]+a[64]+a[70]+a[25]+a[94])
+def arg132():
+  return open('flag.txt.enc', 'rb').read()
+def arg112():
+  print(a[54]+a[68]+a[75]+a[66]+a[78]+a[76]+a[68]+a[94]+a[65]+a[64]+a[66]+\
+a[74]+a[13]+a[13]+a[13]+a[94]+a[88]+a[78]+a[84]+a[81]+a[94]+a[69]+\
+a[75]+a[64]+a[70]+a[11]+a[94]+a[84]+a[82]+a[68]+a[81]+a[25])
+def arg122(arg432, arg423):
+    arg433 = arg423
+    i = 0
+    while len(arg433) < len(arg432):
+        arg433 = arg433 + arg423[i]
+        i = (i + 1) % len(arg423)        
+    return "".join([chr(ord(arg422) ^ ord(arg442)) for (arg422,arg442) in zip(arg432,arg433)])
+arg444 = arg132()
+arg432 = arg232()
+arg133(arg432)
+arg112()
+arg423 = arg111(arg444)
+print(arg423)
+sys.exit(0)
+
diff --git a/rev/bloat_py/clean-bloat.flag.py b/rev/bloat_py/clean-bloat.flag.py
new file mode 100755
index 0000000..072b867
--- /dev/null
+++ b/rev/bloat_py/clean-bloat.flag.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+
+import sys
+
+def arg133(arg432):
+  if arg432 == "happychance":
+    return True
+  else:
+    print("That password is incorrect")
+    sys.exit(0)
+    return False
+
+def arg111(arg444):
+  return arg122(arg444.decode(), "rapscallion")
+
+def arg232():
+  return input("Please enter correct password for flag:")
+
+def arg132():
+  return open('flag.txt.enc', 'rb').read()
+
+def arg112():
+  print("Welcome back... your flag, user:")
+
+def arg122(arg432, arg423):
+    arg433 = arg423
+    i = 0
+    while len(arg433) < len(arg432):
+        arg433 = arg433 + arg423[i]
+        i = (i + 1) % len(arg423)
+    return "".join([chr(ord(arg422) ^ ord(arg442)) for (arg422,arg442) in zip(arg432,arg433)])
+
+arg444 = arg132()
+arg432 = arg232()
+arg133(arg432)
+arg112()
+arg423 = arg111(arg444)
+print(arg423)
+sys.exit(0)
diff --git a/rev/bloat_py/flag.txt.enc b/rev/bloat_py/flag.txt.enc
new file mode 100644
index 0000000000000000000000000000000000000000..d07cbabe3ccfa4999513f2452d0e747c1b8edcd7
GIT binary patch
literal 35
qcmZSL5SCFe)e`58i4$OFbz=yPj*VnA6bWP331f+k;Es)Ul>q=^T?SzQ

literal 0
HcmV?d00001

diff --git a/rev/bloat_py/output.txt b/rev/bloat_py/output.txt
new file mode 100644
index 0000000..ec9de2a
--- /dev/null
+++ b/rev/bloat_py/output.txt
@@ -0,0 +1,4 @@
+$ ./clean-bloat.flag.py
+Please enter correct password for flag:happychance
+Welcome back... your flag, user:
+picoCTF{d30bfu5c4710n_f7w_5e14b257}
diff --git a/rev/file_run1/run b/rev/file_run1/run
new file mode 100755
index 0000000000000000000000000000000000000000..6a66b04afd1155745f0df9249082bc12dcc4c514
GIT binary patch
literal 16736
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
aFo3&xFu%jZKy-rzh-6@pLeqf8WdHyR%u#v(

literal 0
HcmV?d00001

diff --git a/rev/file_run2/output.txt b/rev/file_run2/output.txt
new file mode 100644
index 0000000..9fb572f
--- /dev/null
+++ b/rev/file_run2/output.txt
@@ -0,0 +1,2 @@
+$ ./run 'Hello!'
+The flag is: picoCTF{F1r57_4rgum3n7_f65ed63e}%
diff --git a/rev/file_run2/run b/rev/file_run2/run
new file mode 100755
index 0000000000000000000000000000000000000000..c3c5a3dc2f4e09e82e15251636a98ed02633ca63
GIT binary patch
literal 16816
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
ZfOIEeeus&H=xY`rl7T@AO#>R20RWQu$A|y`

literal 0
HcmV?d00001

diff --git a/rev/fresh_java/KeygenMe.class b/rev/fresh_java/KeygenMe.class
new file mode 100644
index 0000000000000000000000000000000000000000..7aca98ca1451db0ba578849452f789cbb7fc44ff
GIT binary patch
literal 1883
zcmX^0Z`VEs1_pBmOD+aJ21#}XDNY7y1{p2}CI(p$OOAs<o{K?&K@lXP#Kj=Spv=Lb
z0-{wp7}VGq)Y%y{7#Y}XGV?M^>=+rCH8jH*8Cab2Q&Jfj_<b_-QvFJElTwR95|eUL
z85vk|6EpJ|8N@WAeX<hE67_Qu^V0Q$ONuh{(yc)nd4o$5le2vj3&85x88jIgxPtRb
zi;`2_GC}%zy;CdGQ}cXN^+4Kr82A|k7#RdXZ2i)b%pCpT<ixzZ)FO5UEglAK1|5(B
zT^<HK27N{bF4w%0)FOrK)JiLM1_K@jLk1%r24e;j9tKkeGe!n(&%Cn4oXixE0v-l)
z1`9?8&M=q&BLfG_Vnzl5uytUU`zK|kCYPWHK|F&hR9Re-n#;(*1oFBl#N(Oy`kr|O
zr6s{7MX8Co){G1i8dxPjfx?_$TEfVH&=^pZnTOCQ40cXtzCMyLBLjN@NKsB6BZDZ^
zV6cNBt^)@(M_y`02`GXX8ALQRA(kVnVPs&-NzF?y$pA;HCnEz}az<j2V+kVzi-xDB
zGlL=nF9RO~2rw})f+B)}kwK7wfkBpmk%5tcfq_+PI|JiJ1_lO31|bFp1~#xD8v`eU
zFoOt0Da#cGW(H;k2BxdK8JHqBF)(juVDZ_+z$(PHje%Wz8v}>0&Nc>40j2p2JRni7
zZ4B%ibp#Z*F>njiqKYYi#4J(8<UwK<sA6&;v1C*+S&&#Fs+bH&3{9OhNDR$9DUg^k
zs$NNum^rGL1V}6%RZJWtmVzoK1`<OvPZT6pgsM&iBxZ;zCJYiQMHLeQi4~%X34+AX
z><|Enq1nL?5<_z{A4n`6)jVF1SRSev4@eBnecT|i98`5&ATa|}F-|OE93U~YFl7gc
zRio-<1Btnzh=H|+pa_9=I->}IHRhuTv4YG(O#>_-p-dE2%pjoxWFb&e<pCvC1_lNu
zP||1I#gNCqz`)7C&A`PV%)rec!NAL)$iT;-$-vK`#UR9B${@^O%OJvF#~{w&$soZH
z$RNoO#2~{E%OJ~;${@#(#-PYh$e_ef$)L<o#h}K}%An5B%b>x~$DqwHlR<}JA%iZ%
zA_fD7wG4&~TN#WPwlSD89Aq$KILTnnaEif-;VOeQ!(9d&hI<V53@;fR7(OyMGJIli
zVff47%E-###>mFt$tcL+#VE<(%_zm-$EeES&#21~z^KO%%xK9F!sy5l%IL%p!RX5n
z$r#EI#TdpA%b3Uz$C$|w&zQxK#8}FZ%vj5i!dS<U&e+M2!8nm2lW`J54&z*gT*jpg
zd5p^#3K=&t6fy2(C}!NnP{w$ap`7t7Lj~hGhHA!}3^j}o8EP3HF*Go~WoTsl%Fx94
zjiHr^k)e%=lcAl7i=m52l%bnRmZ679j-j7PlVJjrA;Ux_BZetVwhU95Tp6Y@xiQRS
z3S^kY6v;4~DT-kpQwqa;rW}R^Ot}n;naUZKFx4|GWolqp!PLdDl4%mdDyGQ{YnkRU
ztYccru%2ld!zQK;44avDFl=Gk$*`U2FvAX}(+oSA&M@p@y27xRL6m`kL6<@KFM}34
W0~0%gm@pn71O^O@4C3IZmjD2@Y?(#?

literal 0
HcmV?d00001

diff --git a/rev/fresh_java/decompiled.java b/rev/fresh_java/decompiled.java
new file mode 100644
index 0000000..6ab4c41
--- /dev/null
+++ b/rev/fresh_java/decompiled.java
@@ -0,0 +1,152 @@
+// NOTE: Decompiled with JD-GUI
+
+import java.util.Scanner;
+
+public class KeygenMe {
+  public static void main(String[] paramArrayOfString) {
+    Scanner scanner = new Scanner(System.in);
+    System.out.println("Enter key:");
+    String str = scanner.nextLine();
+    if (str.length() != 34) {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(33) != '}') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(32) != '9') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(31) != '8') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(30) != 'c') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(29) != 'a') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(28) != 'c') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(27) != '8') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(26) != '3') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(25) != '7') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(24) != '_') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(23) != 'd') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(22) != '3') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(21) != 'r') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(20) != '1') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(19) != 'u') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(18) != 'q') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(17) != '3') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(16) != 'r') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(15) != '_') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(14) != 'g') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(13) != 'n') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(12) != '1') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(11) != 'l') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(10) != '0') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(9) != '0') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(8) != '7') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(7) != '{') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(6) != 'F') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(5) != 'T') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(4) != 'C') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(3) != 'o') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(2) != 'c') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(1) != 'i') {
+      System.out.println("Invalid key");
+      return;
+    }
+    if (str.charAt(0) != 'p') {
+      System.out.println("Invalid key");
+      return;
+    }
+    System.out.println("Valid key");
+  }
+}
\ No newline at end of file
diff --git a/rev/fresh_java/flag.txt b/rev/fresh_java/flag.txt
new file mode 100644
index 0000000..c789543
--- /dev/null
+++ b/rev/fresh_java/flag.txt
@@ -0,0 +1 @@
+picoCTF{700l1ng_r3qu1r3d_738cac89}
\ No newline at end of file
diff --git a/rev/patchme_py/flag.txt.enc b/rev/patchme_py/flag.txt.enc
new file mode 100644
index 0000000..92dba38
--- /dev/null
+++ b/rev/patchme_py/flag.txt.enc
@@ -0,0 +1,3 @@
+
+* '	UYX+
CR1@
+6U]WVM
\ No newline at end of file
diff --git a/rev/patchme_py/output.txt b/rev/patchme_py/output.txt
new file mode 100644
index 0000000..e805493
--- /dev/null
+++ b/rev/patchme_py/output.txt
@@ -0,0 +1,4 @@
+$ python patchme.flag.py
+Please enter correct password for flag: ak98-=90adfjhgj321sleuth9000
+Welcome back... your flag, user:
+picoCTF{p47ch1ng_l1f3_h4ck_c4a4688b}
diff --git a/rev/patchme_py/patchme.flag.py b/rev/patchme_py/patchme.flag.py
new file mode 100644
index 0000000..38a930d
--- /dev/null
+++ b/rev/patchme_py/patchme.flag.py
@@ -0,0 +1,31 @@
+### THIS FUNCTION WILL NOT HELP YOU FIND THE FLAG --LT ########################
+def str_xor(secret, key):
+    #extend key to secret length
+    new_key = key
+    i = 0
+    while len(new_key) < len(secret):
+        new_key = new_key + key[i]
+        i = (i + 1) % len(key)        
+    return "".join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)])
+###############################################################################
+
+
+flag_enc = open('flag.txt.enc', 'rb').read()
+
+
+
+def level_1_pw_check():
+    user_pw = input("Please enter correct password for flag: ")
+    if( user_pw == "ak98" + \
+                   "-=90" + \
+                   "adfjhgj321" + \
+                   "sleuth9000"):
+        print("Welcome back... your flag, user:")
+        decryption = str_xor(flag_enc.decode(), "utilitarian")
+        print(decryption)
+        return
+    print("That password is incorrect")
+
+
+
+level_1_pw_check()
diff --git a/rev/reverse/ret b/rev/reverse/ret
new file mode 100755
index 0000000000000000000000000000000000000000..f017a50c762b236403e7da1d0afe6ae75906469c
GIT binary patch
literal 16888
zcmb<-^>JfjWMqH=W(GS35buEiM8p9?F<4kZ84L^z4h$9yybKNu@(gkeYzzzxEMPH+
zJWM@|zQF_$htV7mE(0@Ep9F}(z`%e`%Rtq^XpoygLLeGsABc?&Yp_E^VKf8OA0U0K
zASoyxCJv)Rq3(duFmaGRuzd<3%?u0-X!Hk=0tN;K7>%qC6gD$-A^K+6qS6)6aA|<j
zFnu5{NZ$&mz7<e?FdAkLjE03L$c-Ru0rdwujpl3ybbS#}edx3c#Mulm8e|7ZDEMhf
z3W$wv4~&n?z5uAcB~S(EG|V0t4YC7dU*OY{6i~Q;*u-F1GzUTL!xax1pa5rJV1Uuk
z=w#5($xJdc(a%ZI&B@Fwt<bHoFw-?N(JRi^GXh%=au>)BP?~c03uRzpU^oC0g9alw
zPlzxufYUihzN1%qg~?wbOJhC_-s8GnpC+tX=nGO0G6Q5MNDatfkbbC>KwOZy3|tHh
z;5-TOe<N5NBnDz!Og)ziqH*DRq$G>1Mv8%fK?qp@%9h6=Zh%AF7l*hT4)NJI+{2AS
z{VE*l%^4UNl%Q@#p>i^ll0ngA#t<K$S)8A2X&GOfoS2u!P*7S@%n%=6T#}fa9iN<$
z9iNt%nZr;}l$lqO#t<K$T#*=`mYJ8BlUbF@P+U@!oLj&U9}hAOq@}1NJ~uHlkHOu?
z)5$sBNY5P3GJ&&<^h_DzJwtrsQ&Njk(=&@pQj0=-opbW@QbQ7xa#9)M<I{8V^Pr~1
zLzH4w2=WgT12Y2?7(&WdSejsDU<RiJP`UxB6VJ@#1*wQ<U;q~(B49o<Lnf48DwWB}
zz`(>%3{uR%zyK?UVEO-mAVgvTw48y7H$cTXpanTh9LB$4577rolc4kq;W02gKoSS#
z4Vd@~ByngF4VL<VB+dyIfe=5C#9?V2B(ni34l)B4CLr-0NaCP81QG+`14!ba{00&O
z;S)&WAU}Y_K==ZZILyx=@liY)0;3@?8UmvsFd71*Aut*O!zBbh^UMA6Xnw=t(am~O
zpMk-n^*{;J{|g??M>r0Hz4+g>N}qw@(|^@!eFg@8c?OXB43NyHmk<B{|33lD2Q>gc
zy}StLgBoU^ULJ(=K@GA`FE_&ZpoZ9|mkVM1PybbO!KS+~fX)B(UsV*1&x^)qMdSa~
z1Gx^N|0^=z@U3U(#W;`7M;^^jJ_LmL^s>4!F)(=a@}6e|QMLye7#RMGUeaS=_%gwx
z*Y>9#NR;&xh_d`qBI?o2x(>u{Jy62={{g>z1IYV_p|nS@?MaYiujwHWrTNdJ^Ml91
zclI6!e=vJ69`m^PuSCS7o3#}r*?ORa<Nt#+et8!L2AF<O_%+yqq!~)JLp_>plk^xE
z7(6<kmhgCV+otI;Fub_=@BjZ7DgXcfKgJrX$H2fCdzfDyMgPn4|NsAk3<~w=eCpBs
zCLzV6n?+RvY>w*>!vh{W3Nn-PokQHJJ$4!Aq{SB*ml=C>x?b?;487s8qsTNfFFn4v
z)MHn2a;m9mT4|0)r|Scc&d?VgJK~Mf3=EA86FoXzKX~-oUgu?C*a7nWi_(Ap|9kYh
zF7W6)=Fw~W0xn*QB7PYz?g|zUy#Ud3&7<@93#Who|F<3}mGbDd-OtOw@PY}f1mvpY
zFTVZ#|Nk|QN3ZQ?kj#s}|Nn!n_2~Bfk>X*@1NK`9>x=t;|NlREI8BdVz6IneSo(Af
z_vy9Wt;N9L80Oh|%`w!o^Q&WsW9Oexk6zt1S_}-qKAL|)Y5v9kKmY%G9Q?~%B5!yb
z8lOI$pL{ysxpY2v{4a9fqxmqShvnVUSD^e59qSn580#447=JhoVI?ToK{*9PgUke}
z1o6S{86`$TU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtqev03&#Yk%7TAuOzidp(G<!
zp&+rixIDioMWG~Lp)@ZiKRH{WBqOs}AuTf})k=XuwU{9?zf>U=q&_vpN<p<4JUtTt
z)0LcGRFs-rqN7ldlbTqZs!*Jos*skGm~N#2>x9C(ps<c7tlJ6eY?{<EI3_2j78fg|
zq~>L&rZ6x{Gh2hEp+Iv!HShobFJWL{xby!1|2Yf{3~%25|G$NSfx+g(|Nk)z3=FCt
z|NlS3z`&sM>Hq&X3=9l&KK=i1!pOh?nu`SmJ7ZN417n2%qcjgY#{{T2XpO;*_y7Ov
zgA};1gQwP17#J8#K>YXr|0jTGJ^?pA2`_%`a*hTDdnqd|V-@i9BgkBky%z8P{|9RX
zsbzrJ2Xd#u`~Uv~pkg2jWLFOZ14H14|Nno11YG$9+L)Yq*_b}^uyZhg=h@dVFfdqr
z{Qo}{B=5#2(9h(_C(+03%BRrF;>xGd!|K9k(8lJ$XVJ{=&gYQFXW__a;K--p#HZlI
zC*i~=;KauPo(ufKz`&63@&AA1c{q@fqj)p~MnhmU1V%$(Gz3ONU^E0qLtr!nMnhn5
zg#c__9&8;RBh+~?ng_}UH}n}87<i$44`B#H5<<b(`$<Fjur+O<^`9Ui*t$PZzXZgG
z$$$O#KOe+j0GhjHU|@jtAufRCZW$QB>%KwqC!q4+P9OsV!x4}m0|NtSJtv4M0U{U}
z7(}5ojDl)om;qgH2bwYl$yI;|X#WYs1oinqv^a=hU|`q)U91Na{{VFu%-si|>R@XL
zVfM>G#bN4x|A+XGkpZ$4`X7|P0czfVC?6KyAE5jxQ2C!wKFl9b<Eci$)_bEHXaMbG
zIzZ_FD4hVM3!pT*K0<uhx=wdzXDbDb(4^A5l2QdrJrg|xUBgl^&#=zOK+nKL&rlO0
zPRK;i+Gj@ix_)HUpp~t#b>gVv%nY#g=cwW=3^iB+nwf!>0hT^d)w40c(j}@mI|D5J
zqKb1cz~U8EoRa~T9#F-(7+~oRRh%21K2gPaAd7R61;J~>c^MS2#1}IIA43CHaejsg
zSj7bxVEZ+Ytzc#lWPp_isNzD1eGEtv%nZT|u=V&z!VJs|A`CB}>-AB^Md9TOs<;>f
ztXx4A7iYkhu9+Dm;N<|SdP&e`6J#MUo0&n1K>#!$1m+<KW(HU(hY$nhUlxXs{}Cb(
z7O4DWVh~^ufUa|fh%zwnF@RP}3otmKi7P_IVdXJQJ!l;|Ba(YS_JQO;>)#m}Fv9_~
zSRZ6Btb7Nl1>s8Y8h_02oB`e^gXw;dJ=pv;4{VMI!yAx;K?WmXZ0bQ{O`y^lJ-+sW
z&B2VXV_@?z-FXu%j+uTyV{nXE;`a?BD4a3#1rsA^UxEOG1GFB47PkySj98N_!wj%E
zW;)RWn*(+f3gN&A%8HU0>4yiTo(VI*xP!z|On`8bafp}W5T6FMmjNx^F2<pLJJ??k
zyO7Caj0_BdOp*++@){<086*zc(E-h;&}y3D5!ieIh6~Wm9^f%W2FNlV0R|}s2{iZ2
zfvSg<C*Uzr1_p*tVE1F@yMIviC!zTTJf;aM+n7M{2y-2RmSuvtA3gtSGGUKjXC@r`
zJd%q_ic3n<()5xU5c@6SOLF6rK|3x$J3UhJ<I{8UlM-{{Q%drSisKVYD;SdVa|?1(
zOHxzxEDX#H8RFxyC<1K*$&61dDoU)3Pt7YSs$@tjO3Y1-PbtmKtz?LgN8-h2=4F<k
zC@o4Y(Mx8Ck9P}l^mUDQ^>c}j2W><_R+hpL?-J?f=<Df>DpOpNSX9CgAMfrL8t>`>
zHNnFrh#}tH$KT1(C*I%9E!Z_AKE%<<#}#BMcymf}aVglrko_cxpa?<UdIH+};@|+=
zyaL{+lA4lOl8CV%2BF9Vx-|wN0@jAUBL-a>WGZBf3v?3=x&qWaF!3qH`SBTvc`2a%
zF`oYM#U&}3dGV#isVT6{Hz5CkLYW~xKB>4EYBYE+4(k3MggxdA@$n(P&al7-?a0Bp
z%?5SP4?;i4pA34%mANH}Nep_$B}EWA1IEe(O??zF=;h^?r0S*TmFg7~<rkzDl~f`L
zC6#98r08a*K!qHgJatPF(;2|ZGZKq481zyq^NK5TA#_O*M5ZjYs5mn}4}}w7#GqG{
znv)390A&^AlrZRl!$hwjr$jG3zk~tIC{9gg&?`x;C}Ge`%goDU&@0LZMF)dkY6djX
zW~3A$cn~unsTZOH#!jisOU%toX3&FZPbw~E&`ZwG%}vb%O=%!9GX*SAO%1BUVC{Zf
z`#)h;fYid+AX=G$fdSM9fa!;|Ct)<S7z8N=V_3T%%wb?)FhkQ1Yj?tE(EJZfEr^Dd
zryw>6d!p%wwNGI*y8Y<-!x<PDzWx874|6}P9Sfsj_CvcnkWLE7Vkl08_OW34VeMTQ
z%>fNCP#A%jF#p5)L!kX(pe8j;KdfC0qhb9xsCD2yXD~L1E(EQaMRGr^{S2eUK#Gw1
zi7<O$bR7c&1E|jh<HOq7Fd9}Zp}QYyEJH82T?A@FKty2eaTt97A`I`RqWgb3RKF8c
z9jspoqbs1|pzsHU8M^+3;Pw%s9}Me<!)Q?Yh8h8;(BmI8cL|CYkoh15uzmoH2G2Qy
zB%m19?1$0I(d>uy7hp6@9aKBaS#Wv-ntoWn0!AaxS%S=fnFphHqUndV7hrTMEMh^L
zp?eXbOfa<{O+T!k0;6H$8DPcGxPq}k^iimOxHYg02c?&Q6d_?){K16IqUneAdtfwd
z|1nHGdi>o+(+}$(!Dv|igXu@N|0x5cuK~(~AT_XknXrAz=;~p782yoffq@^?&H`y>
zV1W0x7C`rn!_+~g;pGQR{4X?b!t96j%V7J?Vf)KL`440UOdl-%S3~^|(+?ZRnE`Du
zg7*l3G(s^<Ka6H$gzRaC>4&$AK^u*+q!*YzsBsLS_Bu!mrXSXx6oBdn$-&fuXi#1Q
z(J(9swI8Y+Cd>fSuMHQ0Fkt$TX?WU$C;^iWPy;KV8C#ZtfdRClALbrVSprhXi4=Dr
pJ`C>wRZI*F4Do1&!|a8r12wl{eus&HXmLvr$-p3mrU8x1002vYRkHv9

literal 0
HcmV?d00001

diff --git a/rev/reverse/solve.sh b/rev/reverse/solve.sh
new file mode 100755
index 0000000..3b64b6b
--- /dev/null
+++ b/rev/reverse/solve.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p bash binutils
+
+strings ./ret | grep -o "picoCTF{.*}"
diff --git a/rev/safe_opener/SafeOpener.java b/rev/safe_opener/SafeOpener.java
new file mode 100644
index 0000000..fb96d16
--- /dev/null
+++ b/rev/safe_opener/SafeOpener.java
@@ -0,0 +1,42 @@
+import java.io.*;
+import java.util.*;
+public class SafeOpener {
+    public static void main(String args[]) throws IOException {
+        BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
+        Base64.Encoder encoder = Base64.getEncoder();
+        String encodedkey = "";
+        String key = "";
+        int i = 0;
+        boolean isOpen;
+
+
+        while (i < 3) {
+            System.out.print("Enter password for the safe: ");
+            key = keyboard.readLine();
+
+            encodedkey = encoder.encodeToString(key.getBytes());
+            System.out.println(encodedkey);
+
+            isOpen = openSafe(encodedkey);
+            if (!isOpen) {
+                System.out.println("You have  " + (2 - i) + " attempt(s) left");
+                i++;
+                continue;
+            }
+            break;
+        }
+    }
+
+    public static boolean openSafe(String password) {
+        String encodedkey = "cGwzYXMzX2wzdF9tM18xbnQwX3RoM19zYWYz";
+
+        if (password.equals(encodedkey)) {
+            System.out.println("Sesame open");
+            return true;
+        }
+        else {
+            System.out.println("Password is incorrect\n");
+            return false;
+        }
+    }
+}
\ No newline at end of file
diff --git a/rev/safe_opener/a.out b/rev/safe_opener/a.out
new file mode 100644
index 0000000..e69de29
diff --git a/rev/safe_opener/flag.txt b/rev/safe_opener/flag.txt
new file mode 100644
index 0000000..20c9758
--- /dev/null
+++ b/rev/safe_opener/flag.txt
@@ -0,0 +1,3 @@
+# NOTE: password in source code is base64 encoded
+
+picoCTF{pl3as3_l3t_m3_1nt0_th3_saf3}
\ No newline at end of file
diff --git a/rev/safe_opener_2/SafeOpener.class b/rev/safe_opener_2/SafeOpener.class
new file mode 100644
index 0000000000000000000000000000000000000000..54025cdf3e8e3683ae2ea69b3db99840d52fcb55
GIT binary patch
literal 2036
zcmX^0Z`VEs1_l#`1}+9!24{8#7j_0$P6jsycP<8I1`jR<CI(L~1}_G04hA2PurCLL
z9~Xl^LjXu7kc%ORA()Fnk0Ask7RtpS!w|;K5YELQ$l%Pu5CNhiK|~Y>Lo|qv;b4db
z>51cDi05EPU}s2VXGmgXV6(~0%Pg^DWMJ0N3}a+qan4UkWn|#@$;?ajE6q(xEec6Y
z%1LEp5c0`SPRt2QEXoA&p@J+W8JWe53_L!;iD{|+1*v(dMb?ZAEV+r9d5jEV8qq#k
ziDilUIf;4c`oSednR)5fAUoJHi$Q7`85pA&8CVjF(u)}xgt4e)WZ=k7txU>KEJ|Ty
zkbsz#nXm6unwFMYl$sKhnwSE%k3BUnIX@+}h@Bysk%8S6!eM0K@yyFhEppCDEG|wh
zW@M0p7*JZ0nWOKNSe$BRq5@TF&B(w7F(M^9wG!l23}-VkFoUHSGZ`5eJsBBzgG&;V
zvwaf_zyZO|paqV+WOjxWMg}g|isaOSlFa<PVs?g9Mh1@jg48@v05LL%YCs%;5+YHI
z3>*cC#l_|MAb)ZN=a&{Gr@Cc=0-YbE4HQ<XMS37N@i53S$TKpCf!O*OLBYr%36t>5
zD<~}qE-6Y)%!LFKJ3|@|LpnnS$b?J~k;TrC&BKtxkju!xz{8Nokk7~<>zY@RTBHDT
zi$Yp{kwQsEszPyMTB?--J3|2vLm@*E4?{6S2|Ggy4?`(K84p7_Lj?~*B}mwg!Jd&p
z9P9!l|2dUr=A@(+F*0yP=9emDB$lNrDDW^;F;s(y8b$^Ig~XDQ)ZBs+jbcrOoYb@u
z9)?<m5=I7{g3RQ6=McB*V8=A$c!L7tJmaFG_)3G)_~QJWGUJr^%#wKHl*CjE6Eovl
z9)>!GdPWBB;MC&8+*AcnfHN|P1waE;A+uN^GcP&6s3<kLgo}}Z3lXY}3<3xT`zK|k
zCYLZWNPvZ~Boq|YkOa-hAPiQWnXm8Z507|Mg_Xr6skw{{OrT653P}JU<%lS<W@M0n
zrVKO*P<9bUNI~KfoQWXrMsg%016O)#2{cJFGRSCXLaahkf|THy^Giz@84#`sD9X%(
zCKziZKOqS-GO!ka6yZq4VT=qMMX8A?pn`*uK?G(yQcAF9WZ+0oEpe(W0cA%P4b5mL
zMg~4e#tX@Z1*e!sv=h|jsCwDKw&&zAGO#5U6r|>*Ff!;uLk3wPre0_Yv<8KVCq8M8
z61XeaQVUBHbBfXY3P~W=no$gj3^EL|3?RVFz{nuSAkV<apuoVupwGa_z{tSBz^b*K
zfpH@P0|OI-A_D^h8(5H;L5TsB*}w`Ilo?bQ7#KJiR2kG5m_V8tZ5UV?*cliYDt0q4
zMeb%`j@-n+vYml-I|G}~4hD8#Ar3zw4l5RBGgeVnwnYpfn;1BSxVABHYj0!Vv0~AY
zWZA~RyN!X*ZxaKj?luN~-5m@9W^AHtvlz5CF>vl?5RBZ;AS5KbjX{J}lr?1=gQ$?$
zHU^Px4C31u_*+;Rm;YY_axXL3y-o}QAWtv|F|aX+F|ad8GH@`+GH@~|Fz_;{G4L_y
zG4L~(FbFc(F$giZGKesEGl((-Fo-b}GKe#jFi0?zGsuAb>cPOy;LV`Jpw6Jdzy|Ue
zgC>I(0|SE)LmGoNgAM~DgBU{+gD!(10~3QJLp*~KgE0d$gDgWdg9(E%0}F!!Lj;2<
zgBb%WgE<2OgA4=He+C5xHg*OJb_Pp!1}k<3Yjy@}Mh1r83}Fm53=9k`42%r644e#h
z4EE3nDP>?{U}9ikkQb8h(bC?=AUTtP7Zh+(+Zgy+)__>j+Zgzn*Dx?JK)fymcBnj<
z$IYO`Ak3i5Aj+V|Aj_Z*_L3OHI0gp>W3V0>u%j8l4&-29{KFv1&S1^J#NY^yd?yA2
S1_lN$21W)w1}_GE22KFlJlZD!

literal 0
HcmV?d00001

diff --git a/rev/safe_opener_2/solve.sh b/rev/safe_opener_2/solve.sh
new file mode 100755
index 0000000..606cb71
--- /dev/null
+++ b/rev/safe_opener_2/solve.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p bash binutils
+
+strings ./SafeOpener.class | grep -o "picoCTF{.*}"
diff --git a/rev/speeds_and_feeds/flag.txt b/rev/speeds_and_feeds/flag.txt
new file mode 100644
index 0000000..0bc13d7
--- /dev/null
+++ b/rev/speeds_and_feeds/flag.txt
@@ -0,0 +1,3 @@
+# NOTE: open the file in FreeCAD
+
+picoCTF{num3r1cal_c0ntr0l_84d2d117}
\ No newline at end of file
diff --git a/rev/speeds_and_feeds/output.nc b/rev/speeds_and_feeds/output.nc
new file mode 100644
index 0000000..8da5904
--- /dev/null
+++ b/rev/speeds_and_feeds/output.nc
@@ -0,0 +1,1099 @@
+G17 G21 G40 G90 G64 P0.003 F50
+G0Z0.1
+G0Z0.1
+G0X0.8276Y3.8621
+G1Z0.1
+G1X0.8276Y-1.9310
+G0Z0.1
+G0X1.1034Y3.8621
+G1Z0.1
+G1X1.1034Y-1.9310
+G0Z0.1
+G0X1.1034Y3.0345
+G1Z0.1
+G1X1.6552Y3.5862
+G1X2.2069Y3.8621
+G1X2.7586Y3.8621
+G1X3.5862Y3.5862
+G1X4.1379Y3.0345
+G1X4.4138Y2.2069
+G1X4.4138Y1.6552
+G1X4.1379Y0.8276
+G1X3.5862Y0.2759
+G1X2.7586Y0.0000
+G1X2.2069Y0.0000
+G1X1.6552Y0.2759
+G1X1.1034Y0.8276
+G0Z0.1
+G0X2.7586Y3.8621
+G1Z0.1
+G1X3.3103Y3.5862
+G1X3.8621Y3.0345
+G1X4.1379Y2.2069
+G1X4.1379Y1.6552
+G1X3.8621Y0.8276
+G1X3.3103Y0.2759
+G1X2.7586Y0.0000
+G0Z0.1
+G0X0.0000Y3.8621
+G1Z0.1
+G1X1.1034Y3.8621
+G0Z0.1
+G0X0.0000Y-1.9310
+G1Z0.1
+G1X1.9310Y-1.9310
+G0Z0.1
+G0X7.2414Y5.7931
+G1Z0.1
+G1X6.9655Y5.5172
+G1X7.2414Y5.2414
+G1X7.5172Y5.5172
+G1X7.2414Y5.7931
+G0Z0.1
+G0X7.2414Y3.8621
+G1Z0.1
+G1X7.2414Y0.0000
+G0Z0.1
+G0X7.5172Y3.8621
+G1Z0.1
+G1X7.5172Y0.0000
+G0Z0.1
+G0X6.4138Y3.8621
+G1Z0.1
+G1X7.5172Y3.8621
+G0Z0.1
+G0X6.4138Y0.0000
+G1Z0.1
+G1X8.3448Y0.0000
+G0Z0.1
+G0X13.6552Y3.0345
+G1Z0.1
+G1X13.3793Y2.7586
+G1X13.6552Y2.4828
+G1X13.9310Y2.7586
+G1X13.9310Y3.0345
+G1X13.3793Y3.5862
+G1X12.8276Y3.8621
+G1X12.0000Y3.8621
+G1X11.1724Y3.5862
+G1X10.6207Y3.0345
+G1X10.3448Y2.2069
+G1X10.3448Y1.6552
+G1X10.6207Y0.8276
+G1X11.1724Y0.2759
+G1X12.0000Y0.0000
+G1X12.5517Y0.0000
+G1X13.3793Y0.2759
+G1X13.9310Y0.8276
+G0Z0.1
+G0X12.0000Y3.8621
+G1Z0.1
+G1X11.4483Y3.5862
+G1X10.8966Y3.0345
+G1X10.6207Y2.2069
+G1X10.6207Y1.6552
+G1X10.8966Y0.8276
+G1X11.4483Y0.2759
+G1X12.0000Y0.0000
+G0Z0.1
+G0X17.5862Y3.8621
+G1Z0.1
+G1X16.7586Y3.5862
+G1X16.2069Y3.0345
+G1X15.9310Y2.2069
+G1X15.9310Y1.6552
+G1X16.2069Y0.8276
+G1X16.7586Y0.2759
+G1X17.5862Y0.0000
+G1X18.1379Y0.0000
+G1X18.9655Y0.2759
+G1X19.5172Y0.8276
+G1X19.7931Y1.6552
+G1X19.7931Y2.2069
+G1X19.5172Y3.0345
+G1X18.9655Y3.5862
+G1X18.1379Y3.8621
+G1X17.5862Y3.8621
+G1X17.0345Y3.5862
+G1X16.4828Y3.0345
+G1X16.2069Y2.2069
+G1X16.2069Y1.6552
+G1X16.4828Y0.8276
+G1X17.0345Y0.2759
+G1X17.5862Y0.0000
+G0Z0.1
+G0X18.1379Y0.0000
+G1Z0.1
+G1X18.6897Y0.2759
+G1X19.2414Y0.8276
+G1X19.5172Y1.6552
+G1X19.5172Y2.2069
+G1X19.2414Y3.0345
+G1X18.6897Y3.5862
+G1X18.1379Y3.8621
+G0Z0.1
+G0X25.6552Y4.9655
+G1Z0.1
+G1X25.9310Y4.1379
+G1X25.9310Y5.7931
+G1X25.6552Y4.9655
+G1X25.1034Y5.5172
+G1X24.2759Y5.7931
+G1X23.7241Y5.7931
+G1X22.8966Y5.5172
+G1X22.3448Y4.9655
+G1X22.0690Y4.4138
+G1X21.7931Y3.5862
+G1X21.7931Y2.2069
+G1X22.0690Y1.3793
+G1X22.3448Y0.8276
+G1X22.8966Y0.2759
+G1X23.7241Y0.0000
+G1X24.2759Y0.0000
+G1X25.1034Y0.2759
+G1X25.6552Y0.8276
+G1X25.9310Y1.3793
+G0Z0.1
+G0X23.7241Y5.7931
+G1Z0.1
+G1X23.1724Y5.5172
+G1X22.6207Y4.9655
+G1X22.3448Y4.4138
+G1X22.0690Y3.5862
+G1X22.0690Y2.2069
+G1X22.3448Y1.3793
+G1X22.6207Y0.8276
+G1X23.1724Y0.2759
+G1X23.7241Y0.0000
+G0Z0.1
+G0X29.8621Y5.7931
+G1Z0.1
+G1X29.8621Y0.0000
+G0Z0.1
+G0X30.1379Y5.7931
+G1Z0.1
+G1X30.1379Y0.0000
+G0Z0.1
+G0X28.2069Y5.7931
+G1Z0.1
+G1X27.9310Y4.1379
+G1X27.9310Y5.7931
+G1X32.0690Y5.7931
+G1X32.0690Y4.1379
+G1X31.7931Y5.7931
+G0Z0.1
+G0X29.0345Y0.0000
+G1Z0.1
+G1X30.9655Y0.0000
+G0Z0.1
+G0X34.8966Y5.7931
+G1Z0.1
+G1X34.8966Y0.0000
+G0Z0.1
+G0X35.1724Y5.7931
+G1Z0.1
+G1X35.1724Y0.0000
+G0Z0.1
+G0X36.8276Y4.1379
+G1Z0.1
+G1X36.8276Y1.9310
+G0Z0.1
+G0X34.0690Y5.7931
+G1Z0.1
+G1X38.4828Y5.7931
+G1X38.4828Y4.1379
+G1X38.2069Y5.7931
+G0Z0.1
+G0X35.1724Y3.0345
+G1Z0.1
+G1X36.8276Y3.0345
+G0Z0.1
+G0X34.0690Y0.0000
+G1Z0.1
+G1X36.0000Y0.0000
+G0Z0.1
+G0X41.8621Y6.8966
+G1Z0.1
+G1X41.3103Y6.6207
+G1X41.0345Y6.3448
+G1X40.7586Y5.7931
+G1X40.7586Y5.2414
+G1X41.0345Y4.6897
+G1X41.3103Y4.4138
+G1X41.5862Y3.8621
+G1X41.5862Y3.3103
+G1X41.0345Y2.7586
+G0Z0.1
+G0X41.3103Y6.6207
+G1Z0.1
+G1X41.0345Y6.0690
+G1X41.0345Y5.5172
+G1X41.3103Y4.9655
+G1X41.5862Y4.6897
+G1X41.8621Y4.1379
+G1X41.8621Y3.5862
+G1X41.5862Y3.0345
+G1X40.4828Y2.4828
+G1X41.5862Y1.9310
+G1X41.8621Y1.3793
+G1X41.8621Y0.8276
+G1X41.5862Y0.2759
+G1X41.3103Y0.0000
+G1X41.0345Y-0.5517
+G1X41.0345Y-1.1034
+G1X41.3103Y-1.6552
+G0Z0.1
+G0X41.0345Y2.2069
+G1Z0.1
+G1X41.5862Y1.6552
+G1X41.5862Y1.1034
+G1X41.3103Y0.5517
+G1X41.0345Y0.2759
+G1X40.7586Y-0.2759
+G1X40.7586Y-0.8276
+G1X41.0345Y-1.3793
+G1X41.3103Y-1.6552
+G1X41.8621Y-1.9310
+G0Z0.1
+G0X44.6897Y3.8621
+G1Z0.1
+G1X44.6897Y0.0000
+G0Z0.1
+G0X44.9655Y3.8621
+G1Z0.1
+G1X44.9655Y0.0000
+G0Z0.1
+G0X44.9655Y3.0345
+G1Z0.1
+G1X45.5172Y3.5862
+G1X46.3448Y3.8621
+G1X46.8966Y3.8621
+G1X47.7241Y3.5862
+G1X48.0000Y3.0345
+G1X48.0000Y0.0000
+G0Z0.1
+G0X46.8966Y3.8621
+G1Z0.1
+G1X47.4483Y3.5862
+G1X47.7241Y3.0345
+G1X47.7241Y0.0000
+G0Z0.1
+G0X43.8621Y3.8621
+G1Z0.1
+G1X44.9655Y3.8621
+G0Z0.1
+G0X43.8621Y0.0000
+G1Z0.1
+G1X45.7931Y0.0000
+G0Z0.1
+G0X46.8966Y0.0000
+G1Z0.1
+G1X48.8276Y0.0000
+G0Z0.1
+G0X51.6552Y3.8621
+G1Z0.1
+G1X51.6552Y0.8276
+G1X51.9310Y0.2759
+G1X52.7586Y0.0000
+G1X53.3103Y0.0000
+G1X54.1379Y0.2759
+G1X54.6897Y0.8276
+G0Z0.1
+G0X51.9310Y3.8621
+G1Z0.1
+G1X51.9310Y0.8276
+G1X52.2069Y0.2759
+G1X52.7586Y0.0000
+G0Z0.1
+G0X54.6897Y3.8621
+G1Z0.1
+G1X54.6897Y0.0000
+G0Z0.1
+G0X54.9655Y3.8621
+G1Z0.1
+G1X54.9655Y0.0000
+G0Z0.1
+G0X50.8276Y3.8621
+G1Z0.1
+G1X51.9310Y3.8621
+G0Z0.1
+G0X53.8621Y3.8621
+G1Z0.1
+G1X54.9655Y3.8621
+G0Z0.1
+G0X54.6897Y0.0000
+G1Z0.1
+G1X55.7931Y0.0000
+G0Z0.1
+G0X58.6207Y3.8621
+G1Z0.1
+G1X58.6207Y0.0000
+G0Z0.1
+G0X58.8966Y3.8621
+G1Z0.1
+G1X58.8966Y0.0000
+G0Z0.1
+G0X58.8966Y3.0345
+G1Z0.1
+G1X59.4483Y3.5862
+G1X60.2759Y3.8621
+G1X60.8276Y3.8621
+G1X61.6552Y3.5862
+G1X61.9310Y3.0345
+G1X61.9310Y0.0000
+G0Z0.1
+G0X60.8276Y3.8621
+G1Z0.1
+G1X61.3793Y3.5862
+G1X61.6552Y3.0345
+G1X61.6552Y0.0000
+G0Z0.1
+G0X61.9310Y3.0345
+G1Z0.1
+G1X62.4828Y3.5862
+G1X63.3103Y3.8621
+G1X63.8621Y3.8621
+G1X64.6897Y3.5862
+G1X64.9655Y3.0345
+G1X64.9655Y0.0000
+G0Z0.1
+G0X63.8621Y3.8621
+G1Z0.1
+G1X64.4138Y3.5862
+G1X64.6897Y3.0345
+G1X64.6897Y0.0000
+G0Z0.1
+G0X57.7931Y3.8621
+G1Z0.1
+G1X58.8966Y3.8621
+G0Z0.1
+G0X57.7931Y0.0000
+G1Z0.1
+G1X59.7241Y0.0000
+G0Z0.1
+G0X60.8276Y0.0000
+G1Z0.1
+G1X62.7586Y0.0000
+G0Z0.1
+G0X63.8621Y0.0000
+G1Z0.1
+G1X65.7931Y0.0000
+G0Z0.1
+G0X68.0690Y4.6897
+G1Z0.1
+G1X68.3448Y4.4138
+G1X68.0690Y4.1379
+G1X67.7931Y4.4138
+G1X67.7931Y4.6897
+G1X68.0690Y5.2414
+G1X68.3448Y5.5172
+G1X69.1724Y5.7931
+G1X70.2759Y5.7931
+G1X71.1034Y5.5172
+G1X71.3793Y4.9655
+G1X71.3793Y4.1379
+G1X71.1034Y3.5862
+G1X70.2759Y3.3103
+G1X69.4483Y3.3103
+G0Z0.1
+G0X70.2759Y5.7931
+G1Z0.1
+G1X70.8276Y5.5172
+G1X71.1034Y4.9655
+G1X71.1034Y4.1379
+G1X70.8276Y3.5862
+G1X70.2759Y3.3103
+G1X70.8276Y3.0345
+G1X71.3793Y2.4828
+G1X71.6552Y1.9310
+G1X71.6552Y1.1034
+G1X71.3793Y0.5517
+G1X71.1034Y0.2759
+G1X70.2759Y0.0000
+G1X69.1724Y0.0000
+G1X68.3448Y0.2759
+G1X68.0690Y0.5517
+G1X67.7931Y1.1034
+G1X67.7931Y1.3793
+G1X68.0690Y1.6552
+G1X68.3448Y1.3793
+G1X68.0690Y1.1034
+G0Z0.1
+G0X71.1034Y2.7586
+G1Z0.1
+G1X71.3793Y1.9310
+G1X71.3793Y1.1034
+G1X71.1034Y0.5517
+G1X70.8276Y0.2759
+G1X70.2759Y0.0000
+G0Z0.1
+G0X74.4828Y3.8621
+G1Z0.1
+G1X74.4828Y0.0000
+G0Z0.1
+G0X74.7586Y3.8621
+G1Z0.1
+G1X74.7586Y0.0000
+G0Z0.1
+G0X74.7586Y2.2069
+G1Z0.1
+G1X75.0345Y3.0345
+G1X75.5862Y3.5862
+G1X76.1379Y3.8621
+G1X76.9655Y3.8621
+G1X77.2414Y3.5862
+G1X77.2414Y3.3103
+G1X76.9655Y3.0345
+G1X76.6897Y3.3103
+G1X76.9655Y3.5862
+G0Z0.1
+G0X73.6552Y3.8621
+G1Z0.1
+G1X74.7586Y3.8621
+G0Z0.1
+G0X73.6552Y0.0000
+G1Z0.1
+G1X75.5862Y0.0000
+G0Z0.1
+G0X79.2414Y4.6897
+G1Z0.1
+G1X79.7931Y4.9655
+G1X80.6207Y5.7931
+G1X80.6207Y0.0000
+G0Z0.1
+G0X80.3448Y5.5172
+G1Z0.1
+G1X80.3448Y0.0000
+G0Z0.1
+G0X79.2414Y0.0000
+G1Z0.1
+G1X81.7241Y0.0000
+G0Z0.1
+G0X87.0345Y3.0345
+G1Z0.1
+G1X86.7586Y2.7586
+G1X87.0345Y2.4828
+G1X87.3103Y2.7586
+G1X87.3103Y3.0345
+G1X86.7586Y3.5862
+G1X86.2069Y3.8621
+G1X85.3793Y3.8621
+G1X84.5517Y3.5862
+G1X84.0000Y3.0345
+G1X83.7241Y2.2069
+G1X83.7241Y1.6552
+G1X84.0000Y0.8276
+G1X84.5517Y0.2759
+G1X85.3793Y0.0000
+G1X85.9310Y0.0000
+G1X86.7586Y0.2759
+G1X87.3103Y0.8276
+G0Z0.1
+G0X85.3793Y3.8621
+G1Z0.1
+G1X84.8276Y3.5862
+G1X84.2759Y3.0345
+G1X84.0000Y2.2069
+G1X84.0000Y1.6552
+G1X84.2759Y0.8276
+G1X84.8276Y0.2759
+G1X85.3793Y0.0000
+G0Z0.1
+G0X89.8621Y3.3103
+G1Z0.1
+G1X89.8621Y3.0345
+G1X89.5862Y3.0345
+G1X89.5862Y3.3103
+G1X89.8621Y3.5862
+G1X90.4138Y3.8621
+G1X91.5172Y3.8621
+G1X92.0690Y3.5862
+G1X92.3448Y3.3103
+G1X92.6207Y2.7586
+G1X92.6207Y0.8276
+G1X92.8966Y0.2759
+G1X93.1724Y0.0000
+G0Z0.1
+G0X92.3448Y3.3103
+G1Z0.1
+G1X92.3448Y0.8276
+G1X92.6207Y0.2759
+G1X93.1724Y0.0000
+G1X93.4483Y0.0000
+G0Z0.1
+G0X92.3448Y2.7586
+G1Z0.1
+G1X92.0690Y2.4828
+G1X90.4138Y2.2069
+G1X89.5862Y1.9310
+G1X89.3103Y1.3793
+G1X89.3103Y0.8276
+G1X89.5862Y0.2759
+G1X90.4138Y0.0000
+G1X91.2414Y0.0000
+G1X91.7931Y0.2759
+G1X92.3448Y0.8276
+G0Z0.1
+G0X90.4138Y2.2069
+G1Z0.1
+G1X89.8621Y1.9310
+G1X89.5862Y1.3793
+G1X89.5862Y0.8276
+G1X89.8621Y0.2759
+G1X90.4138Y0.0000
+G0Z0.1
+G0X96.2759Y5.7931
+G1Z0.1
+G1X96.2759Y0.0000
+G0Z0.1
+G0X96.5517Y5.7931
+G1Z0.1
+G1X96.5517Y0.0000
+G0Z0.1
+G0X95.4483Y5.7931
+G1Z0.1
+G1X96.5517Y5.7931
+G0Z0.1
+G0X95.4483Y0.0000
+G1Z0.1
+G1X97.3793Y0.0000
+G0Z0.1
+G0X99.3793Y-0.5517
+G1Z0.1
+G1X103.7931Y-0.5517
+G0Z0.1
+G0X109.1034Y3.0345
+G1Z0.1
+G1X108.8276Y2.7586
+G1X109.1034Y2.4828
+G1X109.3793Y2.7586
+G1X109.3793Y3.0345
+G1X108.8276Y3.5862
+G1X108.2759Y3.8621
+G1X107.4483Y3.8621
+G1X106.6207Y3.5862
+G1X106.0690Y3.0345
+G1X105.7931Y2.2069
+G1X105.7931Y1.6552
+G1X106.0690Y0.8276
+G1X106.6207Y0.2759
+G1X107.4483Y0.0000
+G1X108.0000Y0.0000
+G1X108.8276Y0.2759
+G1X109.3793Y0.8276
+G0Z0.1
+G0X107.4483Y3.8621
+G1Z0.1
+G1X106.8966Y3.5862
+G1X106.3448Y3.0345
+G1X106.0690Y2.2069
+G1X106.0690Y1.6552
+G1X106.3448Y0.8276
+G1X106.8966Y0.2759
+G1X107.4483Y0.0000
+G0Z0.1
+G0X113.0345Y5.7931
+G1Z0.1
+G1X112.2069Y5.5172
+G1X111.6552Y4.6897
+G1X111.3793Y3.3103
+G1X111.3793Y2.4828
+G1X111.6552Y1.1034
+G1X112.2069Y0.2759
+G1X113.0345Y0.0000
+G1X113.5862Y0.0000
+G1X114.4138Y0.2759
+G1X114.9655Y1.1034
+G1X115.2414Y2.4828
+G1X115.2414Y3.3103
+G1X114.9655Y4.6897
+G1X114.4138Y5.5172
+G1X113.5862Y5.7931
+G1X113.0345Y5.7931
+G1X112.4828Y5.5172
+G1X112.2069Y5.2414
+G1X111.9310Y4.6897
+G1X111.6552Y3.3103
+G1X111.6552Y2.4828
+G1X111.9310Y1.1034
+G1X112.2069Y0.5517
+G1X112.4828Y0.2759
+G1X113.0345Y0.0000
+G0Z0.1
+G0X113.5862Y0.0000
+G1Z0.1
+G1X114.1379Y0.2759
+G1X114.4138Y0.5517
+G1X114.6897Y1.1034
+G1X114.9655Y2.4828
+G1X114.9655Y3.3103
+G1X114.6897Y4.6897
+G1X114.4138Y5.2414
+G1X114.1379Y5.5172
+G1X113.5862Y5.7931
+G0Z0.1
+G0X118.0690Y3.8621
+G1Z0.1
+G1X118.0690Y0.0000
+G0Z0.1
+G0X118.3448Y3.8621
+G1Z0.1
+G1X118.3448Y0.0000
+G0Z0.1
+G0X118.3448Y3.0345
+G1Z0.1
+G1X118.8966Y3.5862
+G1X119.7241Y3.8621
+G1X120.2759Y3.8621
+G1X121.1034Y3.5862
+G1X121.3793Y3.0345
+G1X121.3793Y0.0000
+G0Z0.1
+G0X120.2759Y3.8621
+G1Z0.1
+G1X120.8276Y3.5862
+G1X121.1034Y3.0345
+G1X121.1034Y0.0000
+G0Z0.1
+G0X117.2414Y3.8621
+G1Z0.1
+G1X118.3448Y3.8621
+G0Z0.1
+G0X117.2414Y0.0000
+G1Z0.1
+G1X119.1724Y0.0000
+G0Z0.1
+G0X120.2759Y0.0000
+G1Z0.1
+G1X122.2069Y0.0000
+G0Z0.1
+G0X125.0345Y5.7931
+G1Z0.1
+G1X125.0345Y1.1034
+G1X125.3103Y0.2759
+G1X125.8621Y0.0000
+G1X126.4138Y0.0000
+G1X126.9655Y0.2759
+G1X127.2414Y0.8276
+G0Z0.1
+G0X125.3103Y5.7931
+G1Z0.1
+G1X125.3103Y1.1034
+G1X125.5862Y0.2759
+G1X125.8621Y0.0000
+G0Z0.1
+G0X124.2069Y3.8621
+G1Z0.1
+G1X126.4138Y3.8621
+G0Z0.1
+G0X130.0690Y3.8621
+G1Z0.1
+G1X130.0690Y0.0000
+G0Z0.1
+G0X130.3448Y3.8621
+G1Z0.1
+G1X130.3448Y0.0000
+G0Z0.1
+G0X130.3448Y2.2069
+G1Z0.1
+G1X130.6207Y3.0345
+G1X131.1724Y3.5862
+G1X131.7241Y3.8621
+G1X132.5517Y3.8621
+G1X132.8276Y3.5862
+G1X132.8276Y3.3103
+G1X132.5517Y3.0345
+G1X132.2759Y3.3103
+G1X132.5517Y3.5862
+G0Z0.1
+G0X129.2414Y3.8621
+G1Z0.1
+G1X130.3448Y3.8621
+G0Z0.1
+G0X129.2414Y0.0000
+G1Z0.1
+G1X131.1724Y0.0000
+G0Z0.1
+G0X136.4828Y5.7931
+G1Z0.1
+G1X135.6552Y5.5172
+G1X135.1034Y4.6897
+G1X134.8276Y3.3103
+G1X134.8276Y2.4828
+G1X135.1034Y1.1034
+G1X135.6552Y0.2759
+G1X136.4828Y0.0000
+G1X137.0345Y0.0000
+G1X137.8621Y0.2759
+G1X138.4138Y1.1034
+G1X138.6897Y2.4828
+G1X138.6897Y3.3103
+G1X138.4138Y4.6897
+G1X137.8621Y5.5172
+G1X137.0345Y5.7931
+G1X136.4828Y5.7931
+G1X135.9310Y5.5172
+G1X135.6552Y5.2414
+G1X135.3793Y4.6897
+G1X135.1034Y3.3103
+G1X135.1034Y2.4828
+G1X135.3793Y1.1034
+G1X135.6552Y0.5517
+G1X135.9310Y0.2759
+G1X136.4828Y0.0000
+G0Z0.1
+G0X137.0345Y0.0000
+G1Z0.1
+G1X137.5862Y0.2759
+G1X137.8621Y0.5517
+G1X138.1379Y1.1034
+G1X138.4138Y2.4828
+G1X138.4138Y3.3103
+G1X138.1379Y4.6897
+G1X137.8621Y5.2414
+G1X137.5862Y5.5172
+G1X137.0345Y5.7931
+G0Z0.1
+G0X141.5172Y5.7931
+G1Z0.1
+G1X141.5172Y0.0000
+G0Z0.1
+G0X141.7931Y5.7931
+G1Z0.1
+G1X141.7931Y0.0000
+G0Z0.1
+G0X140.6897Y5.7931
+G1Z0.1
+G1X141.7931Y5.7931
+G0Z0.1
+G0X140.6897Y0.0000
+G1Z0.1
+G1X142.6207Y0.0000
+G0Z0.1
+G0X144.6207Y-0.5517
+G1Z0.1
+G1X149.0345Y-0.5517
+G0Z0.1
+G0X152.4138Y5.7931
+G1Z0.1
+G1X151.5862Y5.5172
+G1X151.3103Y4.9655
+G1X151.3103Y4.1379
+G1X151.5862Y3.5862
+G1X152.4138Y3.3103
+G1X153.5172Y3.3103
+G1X154.3448Y3.5862
+G1X154.6207Y4.1379
+G1X154.6207Y4.9655
+G1X154.3448Y5.5172
+G1X153.5172Y5.7931
+G1X152.4138Y5.7931
+G1X151.8621Y5.5172
+G1X151.5862Y4.9655
+G1X151.5862Y4.1379
+G1X151.8621Y3.5862
+G1X152.4138Y3.3103
+G0Z0.1
+G0X153.5172Y3.3103
+G1Z0.1
+G1X154.0690Y3.5862
+G1X154.3448Y4.1379
+G1X154.3448Y4.9655
+G1X154.0690Y5.5172
+G1X153.5172Y5.7931
+G0Z0.1
+G0X152.4138Y3.3103
+G1Z0.1
+G1X151.5862Y3.0345
+G1X151.3103Y2.7586
+G1X151.0345Y2.2069
+G1X151.0345Y1.1034
+G1X151.3103Y0.5517
+G1X151.5862Y0.2759
+G1X152.4138Y0.0000
+G1X153.5172Y0.0000
+G1X154.3448Y0.2759
+G1X154.6207Y0.5517
+G1X154.8966Y1.1034
+G1X154.8966Y2.2069
+G1X154.6207Y2.7586
+G1X154.3448Y3.0345
+G1X153.5172Y3.3103
+G0Z0.1
+G0X152.4138Y3.3103
+G1Z0.1
+G1X151.8621Y3.0345
+G1X151.5862Y2.7586
+G1X151.3103Y2.2069
+G1X151.3103Y1.1034
+G1X151.5862Y0.5517
+G1X151.8621Y0.2759
+G1X152.4138Y0.0000
+G0Z0.1
+G0X153.5172Y0.0000
+G1Z0.1
+G1X154.0690Y0.2759
+G1X154.3448Y0.5517
+G1X154.6207Y1.1034
+G1X154.6207Y2.2069
+G1X154.3448Y2.7586
+G1X154.0690Y3.0345
+G1X153.5172Y3.3103
+G0Z0.1
+G0X159.6552Y5.2414
+G1Z0.1
+G1X159.6552Y0.0000
+G0Z0.1
+G0X159.9310Y5.7931
+G1Z0.1
+G1X159.9310Y0.0000
+G0Z0.1
+G0X159.9310Y5.7931
+G1Z0.1
+G1X156.8966Y1.6552
+G1X161.3103Y1.6552
+G0Z0.1
+G0X158.8276Y0.0000
+G1Z0.1
+G1X160.7586Y0.0000
+G0Z0.1
+G0X166.6207Y5.7931
+G1Z0.1
+G1X166.6207Y0.0000
+G0Z0.1
+G0X166.8966Y5.7931
+G1Z0.1
+G1X166.8966Y0.0000
+G0Z0.1
+G0X166.6207Y3.0345
+G1Z0.1
+G1X166.0690Y3.5862
+G1X165.5172Y3.8621
+G1X164.9655Y3.8621
+G1X164.1379Y3.5862
+G1X163.5862Y3.0345
+G1X163.3103Y2.2069
+G1X163.3103Y1.6552
+G1X163.5862Y0.8276
+G1X164.1379Y0.2759
+G1X164.9655Y0.0000
+G1X165.5172Y0.0000
+G1X166.0690Y0.2759
+G1X166.6207Y0.8276
+G0Z0.1
+G0X164.9655Y3.8621
+G1Z0.1
+G1X164.4138Y3.5862
+G1X163.8621Y3.0345
+G1X163.5862Y2.2069
+G1X163.5862Y1.6552
+G1X163.8621Y0.8276
+G1X164.4138Y0.2759
+G1X164.9655Y0.0000
+G0Z0.1
+G0X165.7931Y5.7931
+G1Z0.1
+G1X166.8966Y5.7931
+G0Z0.1
+G0X166.6207Y0.0000
+G1Z0.1
+G1X167.7241Y0.0000
+G0Z0.1
+G0X170.0000Y4.6897
+G1Z0.1
+G1X170.2759Y4.4138
+G1X170.0000Y4.1379
+G1X169.7241Y4.4138
+G1X169.7241Y4.6897
+G1X170.0000Y5.2414
+G1X170.2759Y5.5172
+G1X171.1034Y5.7931
+G1X172.2069Y5.7931
+G1X173.0345Y5.5172
+G1X173.3103Y5.2414
+G1X173.5862Y4.6897
+G1X173.5862Y4.1379
+G1X173.3103Y3.5862
+G1X172.4828Y3.0345
+G1X171.1034Y2.4828
+G1X170.5517Y2.2069
+G1X170.0000Y1.6552
+G1X169.7241Y0.8276
+G1X169.7241Y0.0000
+G0Z0.1
+G0X172.2069Y5.7931
+G1Z0.1
+G1X172.7586Y5.5172
+G1X173.0345Y5.2414
+G1X173.3103Y4.6897
+G1X173.3103Y4.1379
+G1X173.0345Y3.5862
+G1X172.2069Y3.0345
+G1X171.1034Y2.4828
+G0Z0.1
+G0X169.7241Y0.5517
+G1Z0.1
+G1X170.0000Y0.8276
+G1X170.5517Y0.8276
+G1X171.9310Y0.2759
+G1X172.7586Y0.2759
+G1X173.3103Y0.5517
+G1X173.5862Y0.8276
+G0Z0.1
+G0X170.5517Y0.8276
+G1Z0.1
+G1X171.9310Y0.0000
+G1X173.0345Y0.0000
+G1X173.3103Y0.2759
+G1X173.5862Y0.8276
+G1X173.5862Y1.3793
+G0Z0.1
+G0X178.8966Y5.7931
+G1Z0.1
+G1X178.8966Y0.0000
+G0Z0.1
+G0X179.1724Y5.7931
+G1Z0.1
+G1X179.1724Y0.0000
+G0Z0.1
+G0X178.8966Y3.0345
+G1Z0.1
+G1X178.3448Y3.5862
+G1X177.7931Y3.8621
+G1X177.2414Y3.8621
+G1X176.4138Y3.5862
+G1X175.8621Y3.0345
+G1X175.5862Y2.2069
+G1X175.5862Y1.6552
+G1X175.8621Y0.8276
+G1X176.4138Y0.2759
+G1X177.2414Y0.0000
+G1X177.7931Y0.0000
+G1X178.3448Y0.2759
+G1X178.8966Y0.8276
+G0Z0.1
+G0X177.2414Y3.8621
+G1Z0.1
+G1X176.6897Y3.5862
+G1X176.1379Y3.0345
+G1X175.8621Y2.2069
+G1X175.8621Y1.6552
+G1X176.1379Y0.8276
+G1X176.6897Y0.2759
+G1X177.2414Y0.0000
+G0Z0.1
+G0X178.0690Y5.7931
+G1Z0.1
+G1X179.1724Y5.7931
+G0Z0.1
+G0X178.8966Y0.0000
+G1Z0.1
+G1X180.0000Y0.0000
+G0Z0.1
+G0X182.0000Y4.6897
+G1Z0.1
+G1X182.5517Y4.9655
+G1X183.3793Y5.7931
+G1X183.3793Y0.0000
+G0Z0.1
+G0X183.1034Y5.5172
+G1Z0.1
+G1X183.1034Y0.0000
+G0Z0.1
+G0X182.0000Y0.0000
+G1Z0.1
+G1X184.4828Y0.0000
+G0Z0.1
+G0X186.4828Y4.6897
+G1Z0.1
+G1X187.0345Y4.9655
+G1X187.8621Y5.7931
+G1X187.8621Y0.0000
+G0Z0.1
+G0X187.5862Y5.5172
+G1Z0.1
+G1X187.5862Y0.0000
+G0Z0.1
+G0X186.4828Y0.0000
+G1Z0.1
+G1X188.9655Y0.0000
+G0Z0.1
+G0X190.9655Y5.7931
+G1Z0.1
+G1X190.9655Y4.1379
+G0Z0.1
+G0X190.9655Y4.6897
+G1Z0.1
+G1X191.2414Y5.2414
+G1X191.7931Y5.7931
+G1X192.3448Y5.7931
+G1X193.7241Y4.9655
+G1X194.2759Y4.9655
+G1X194.5517Y5.2414
+G1X194.8276Y5.7931
+G0Z0.1
+G0X191.2414Y5.2414
+G1Z0.1
+G1X191.7931Y5.5172
+G1X192.3448Y5.5172
+G1X193.7241Y4.9655
+G0Z0.1
+G0X194.8276Y5.7931
+G1Z0.1
+G1X194.8276Y4.9655
+G1X194.5517Y4.1379
+G1X193.4483Y2.7586
+G1X193.1724Y2.2069
+G1X192.8965Y1.3793
+G1X192.8965Y0.0000
+G0Z0.1
+G0X194.5517Y4.1379
+G1Z0.1
+G1X193.1724Y2.7586
+G1X192.8965Y2.2069
+G1X192.6207Y1.3793
+G1X192.6207Y0.0000
+G0Z0.1
+G0X196.8276Y6.8966
+G1Z0.1
+G1X197.3793Y6.6207
+G1X197.6552Y6.3448
+G1X197.9310Y5.7931
+G1X197.9310Y5.2414
+G1X197.6552Y4.6897
+G1X197.3793Y4.4138
+G1X197.1034Y3.8621
+G1X197.1034Y3.3103
+G1X197.6552Y2.7586
+G0Z0.1
+G0X197.3793Y6.6207
+G1Z0.1
+G1X197.6552Y6.0690
+G1X197.6552Y5.5172
+G1X197.3793Y4.9655
+G1X197.1034Y4.6897
+G1X196.8276Y4.1379
+G1X196.8276Y3.5862
+G1X197.1034Y3.0345
+G1X198.2069Y2.4828
+G1X197.1034Y1.9310
+G1X196.8276Y1.3793
+G1X196.8276Y0.8276
+G1X197.1034Y0.2759
+G1X197.3793Y0.0000
+G1X197.6552Y-0.5517
+G1X197.6552Y-1.1034
+G1X197.3793Y-1.6552
+G0Z0.1
+G0X197.6552Y2.2069
+G1Z0.1
+G1X197.1034Y1.6552
+G1X197.1034Y1.1034
+G1X197.3793Y0.5517
+G1X197.6552Y0.2759
+G1X197.9310Y-0.2759
+G1X197.9310Y-0.8276
+G1X197.6552Y-1.3793
+G1X197.3793Y-1.6552
+G1X196.8276Y-1.9310
+G0Z0.1
diff --git a/rev/unpackme_py/unpackme.flag.py b/rev/unpackme_py/unpackme.flag.py
new file mode 100755
index 0000000..0e9f99b
--- /dev/null
+++ b/rev/unpackme_py/unpackme.flag.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python3 -p python3 python3Packages.cryptography
+
+import base64
+from cryptography.fernet import Fernet
+
+payload = b'gAAAAABkzWGWvEp8gLI9AcIn5o-ahDUwkTvM6EwF7YYMZlE-_Gf9rcNYjxIgX4b0ltY6bcxKarib2ds6POclRwCwhsRb1LOXVt4Q3ePtMY4BmHFFZlIHLk05CjwigT7hiI9p3sH9e7Cpk1uO90xbHbuy-mfi3nkmn411aBgwxyWpJvykpkuBIG_nty6zbox3UhbB85TOis0TgM0zG4ht0-GUW4wTq2_5-wkw3kV1ZAisLJHzF-Z9oLMmwFZU0UCAcHaBTGDF5BnVLmUeCGTgzVLSNn6BmB61Yg=='
+
+key_str = 'correctstaplecorrectstaplecorrec'
+key_base64 = base64.b64encode(key_str.encode())
+f = Fernet(key_base64)
+plain = f.decrypt(payload)
+
+print(plain.decode())
+# exec(plain.decode())
diff --git a/rev/vault_door_training/VaultDoorTraining.java b/rev/vault_door_training/VaultDoorTraining.java
new file mode 100644
index 0000000..98027a4
--- /dev/null
+++ b/rev/vault_door_training/VaultDoorTraining.java
@@ -0,0 +1,26 @@
+import java.util.*;
+
+class VaultDoorTraining {
+    public static void main(String args[]) {
+        VaultDoorTraining vaultDoor = new VaultDoorTraining();
+        Scanner scanner = new Scanner(System.in); 
+        System.out.print("Enter vault password: ");
+        String userInput = scanner.next();
+	String input = userInput.substring("picoCTF{".length(),userInput.length()-1);
+	if (vaultDoor.checkPassword(input)) {
+	    System.out.println("Access granted.");
+	} else {
+	    System.out.println("Access denied!");
+	}
+   }
+
+    // The password is below. Is it safe to put the password in the source code?
+    // What if somebody stole our source code? Then they would know what our
+    // password is. Hmm... I will think of some ways to improve the security
+    // on the other doors.
+    //
+    // -Minion #9567
+    public boolean checkPassword(String password) {
+        return password.equals("w4rm1ng_Up_w1tH_jAv4_eec0716b713");
+    }
+}
diff --git a/rev/vault_door_training/flag.txt b/rev/vault_door_training/flag.txt
new file mode 100644
index 0000000..08434a7
--- /dev/null
+++ b/rev/vault_door_training/flag.txt
@@ -0,0 +1 @@
+picoCTF{w4rm1ng_Up_w1tH_jAv4_eec0716b713}