From c9115cf64742b223e2d09a10168909a69af05255 Mon Sep 17 00:00:00 2001 From: Kyriakos Georgiou Date: Sat, 20 Apr 2024 19:58:49 -0400 Subject: [PATCH] feat(misc/superguesser): add superguesser parts 1,2 and 3 --- README.md | 8 +- misc/superguesser/challenge.yml | 27 ++++ misc/superguesser/docker-compose.yml | 7 + misc/superguesser/public/superguesser.zip | Bin 0 -> 2340 bytes misc/superguesser/setup/Dockerfile | 20 +++ misc/superguesser/setup/main.go | 169 ++++++++++++++++++++ misc/{ => superguesser/solution}/.gitkeep | 0 misc/superguesser_2/challenge.yml | 27 ++++ misc/superguesser_2/docker-compose.yml | 7 + misc/superguesser_2/public/superguesser.zip | Bin 0 -> 2340 bytes misc/superguesser_2/setup/.gitkeep | 0 misc/superguesser_2/solution/.gitkeep | 0 misc/superguesser_3/challenge.yml | 27 ++++ misc/superguesser_3/docker-compose.yml | 7 + misc/superguesser_3/public/superguesser.zip | Bin 0 -> 2340 bytes misc/superguesser_3/setup/.gitkeep | 0 misc/superguesser_3/solution/.gitkeep | 0 web/arcane-nebula/setup/Dockerfile | 1 - 18 files changed, 296 insertions(+), 4 deletions(-) create mode 100644 misc/superguesser/challenge.yml create mode 100644 misc/superguesser/docker-compose.yml create mode 100644 misc/superguesser/public/superguesser.zip create mode 100644 misc/superguesser/setup/Dockerfile create mode 100644 misc/superguesser/setup/main.go rename misc/{ => superguesser/solution}/.gitkeep (100%) create mode 100644 misc/superguesser_2/challenge.yml create mode 100644 misc/superguesser_2/docker-compose.yml create mode 100644 misc/superguesser_2/public/superguesser.zip create mode 100644 misc/superguesser_2/setup/.gitkeep create mode 100644 misc/superguesser_2/solution/.gitkeep create mode 100644 misc/superguesser_3/challenge.yml create mode 100644 misc/superguesser_3/docker-compose.yml create mode 100644 misc/superguesser_3/public/superguesser.zip create mode 100644 misc/superguesser_3/setup/.gitkeep create mode 100644 misc/superguesser_3/solution/.gitkeep diff --git a/README.md b/README.md index b669b28..aa2d8aa 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,11 @@ Although some of the challenges may run as is, it is recommended that you have d ### misc -| Name | Author | -| ------------------------------ | ----------- | -| [Placeholder](./misc/.gitkeep) | Placeholder | +| Name | Author | +| -------------------------------------------- | ------ | +| [Superguesser Part 1](./misc/superguesser) | koks | +| [Superguesser Part 2](./misc/superguesser_2) | koks | +| [Superguesser Part 3](./misc/superguesser_3) | koks | ### pwn diff --git a/misc/superguesser/challenge.yml b/misc/superguesser/challenge.yml new file mode 100644 index 0000000..7988527 --- /dev/null +++ b/misc/superguesser/challenge.yml @@ -0,0 +1,27 @@ +name: "Superguesser Part 1" +author: "koks" +category: misc + +description: | + The machines seem to live and breathe in binary. Use that against them and capture the flag. + +value: 500 +type: dynamic_docker +extra: + initial: 500 + minimum: 100 + decay: 25 + redirect_type: direct + compose_stack: !filecontents docker-compose.yml + +flags: + - CCSC{part1_sec0nds_and_s33ds_d0nt_m1x_t0gether} + +tags: + - misc + - easy + - medium + - hard + +state: visible +version: "0.1" diff --git a/misc/superguesser/docker-compose.yml b/misc/superguesser/docker-compose.yml new file mode 100644 index 0000000..c95cfa2 --- /dev/null +++ b/misc/superguesser/docker-compose.yml @@ -0,0 +1,7 @@ +version: '3' +services: + superguesser: + image: ghcr.io/cybermouflons/ccsc2024/superguesser:latest + build: ./setup/ + ports: + - 9745:9745 \ No newline at end of file diff --git a/misc/superguesser/public/superguesser.zip b/misc/superguesser/public/superguesser.zip new file mode 100644 index 0000000000000000000000000000000000000000..904afdf5e220eeee95e507037b58ba7cb135b88c GIT binary patch literal 2340 zcmb`Ic{JPU8pk7+1Qn@f>{LprEuz$@vD495MsA6cQn7>~)~FVVmQf~c71i38YMRzI z_NCP^9ZMOS5__sBu~#Xsv9z^J;*N8TJ3aUQai8CL-t+#>@0{=Z{J!sVo)6lJn+FEq zL|N`V$KB1Jix5B#5E2@MCwhnCLqhOG4UD}I02F~y@Y>7JFhKwp&ng!Huq%Pyl>!66 z0NOsOdG=?qgHq;!9t1qm%f}DDD~e}}lG%BUod-li6B)KKNa>cvE!F3&@(WftrL=h* zbeh`ps9gP)Cav^Qa>`LI60&v21v*pEo-n$8arCpc`|terCE<@mWtStz-Ac2l$syw- zfW@(X7`9CmUVHn2{tYVcaMWi6z14ukH6ooidFG7$7DMu)Ossm7-+*mGM-*Y!TK)pw zlezjfP{_2~Sf^5rFI_pBM4rIXEm76^^Q?f5$34Q3*6<5y^c5QK81|N@-?V8#t&Y$b z&-OFEzPCuT&YtBtVxGT9W&4e$Fi`izg380-rObTFLJ6>#or3CN13;pB{5-jH0bTV63yV4v=jm$IQRCxtx7#$JjQz zy4skS+1fd3{N?Hpu3vCG@jo5+z*;qR)2|G~GQNSc|ZY8J`SFj8;W4P^VOZlb@4v% z#t((@+g{%a-^&&?ij{UMJgmHNaW>qpbP&mU81FLjG?F1TO>DRhQv?s*W#%nhI3B$q zgG@Oy+7Ok^x6SNr4tz4>ZE)QhB!8VDqP@$SeixaG5vi|amZi!7ba-rtu8K7{5T zrdOT6j?}`4QFkWDnmj)0vE|fL@Y-T{tEBJB>`_-)%*o(PdUSS>O+iizTB0Z=-Y~^n zdq!DXjH*v!@XlNsP6#25VY0<$(zbvPMj{)hQ(x^&Fh&@nrt*g+B%=dPc4cnjQ0Dm# z;u~Jb<*ZkuD^J?G!WC+43lv4t{C%l{*8@cQjC!y>)6VWXr01)WPQg%Wq*+XRP4yiQ zanr&>dUJ{@F>(s$L|t-IJJXX9QuqBeK_HB#^n-?HDJzGj5yBwubes>hNo7fIa##|L zB!ao+@BM^w&y6)`E_xVn%s8`0*8M(C=i8gNE2czdJGb~~A|gkoG6sBKugGN>`28l) zF18^VO{;FVK(gAPrudQllZOW?||gG*LsAY(MEE~lb$x!%wJ zBUQrKI>85M?(Hjjz1!%VK2HMheNOGW^OyLl@;1Be>ST?Lr&&LgnpH+MW)x}bnFM`f z^4jyh>Lm8WP?^a`M6x+qA$LtBFNX=p2`)5**^&x3U-A;Zb{gt{3F-3b8>cHa=-)-uIZV6@i0pVhNJGS@4sP}{%UfX#`0VE^Oz zFxHdAti+H@@m>6bysM*iJkI`N#oN{_-+brpO(mp33hqN+87V%h|wSPFyZuqjjm|@2wc!&NE)~NfdaWLqG5>%GP)+} zS*79U?N-CkgM`TpGXFWpipyzJwl$w$vX}}lT^cBV0*35JzqEHqVDbmeKu~oWZ%Uqr zYieZEP5NVhHc^d{Se#y)JM+d)IbBn+BBLV1f!OCsIrUYt)Kc+!0TT&Zg2k;#pn;CP zEric8P3wxVYvLP9S&r@=xe6Z};^HfQr8Sd4UVLG!Y6-7KopDNNU3H1>OL+6GmQB2} zqRK1XPn}1DJ7sd?AJGxz;cgFzwgd(?99v3 zS1eb?lG*@;5P=PudT7#GM0RLO#jxU{fAZ;^lGGXMFMShNorVd%%ZnCa$9n{|4vEx< zch?kGZ21b72$k2gB(!{gD8fG;&v1SFuCCub-*>HcA{3&MGDug-i=|$1xj7t?DX#B! zMRIgwqo)O_)|zG@1ob4yR~fkNggh-uNOPD`B;U1KAK&EVOg{sJy+t+;0Kl1XXe%xt zjQh*<{S(B11ryHhF9ZF*v-n@qdojc^(O%G^ uE4cvw2QuwHkHd@oUUGP`7qsZBzyp5$kMuxW@$zw0c-T)eyJj+o^Y#ZrG^CpV literal 0 HcmV?d00001 diff --git a/misc/superguesser/setup/Dockerfile b/misc/superguesser/setup/Dockerfile new file mode 100644 index 0000000..9719990 --- /dev/null +++ b/misc/superguesser/setup/Dockerfile @@ -0,0 +1,20 @@ +FROM golang:1.22.1-alpine3.19 as builder + +RUN mkdir -p /temp/builder +COPY main.go /temp/builder +RUN cd /temp/builder && go build -o superguesser main.go + +FROM alpine:3.19 + +RUN mkdir /challenge +WORKDIR /challenge +COPY --from=builder /temp/builder/superguesser . + +RUN addgroup -S challenge && adduser -S challenge -G challenge +USER challenge + +ENV FLAG_ONE="CCSC{part1_sec0nds_and_s33ds_d0nt_m1x_t0gether}" +ENV FLAG_TWO="CCSC{part2_m1lli5_n33d_som3_brains_and_s0me_luck}" +ENV FLAG_THREE="CCSC{part3_nan0s_d0nt_c4re_bis3ct_is_1n_the_a1r}" + +ENTRYPOINT [ "./superguesser" ] \ No newline at end of file diff --git a/misc/superguesser/setup/main.go b/misc/superguesser/setup/main.go new file mode 100644 index 0000000..11cab68 --- /dev/null +++ b/misc/superguesser/setup/main.go @@ -0,0 +1,169 @@ +package main + +import ( + "bufio" + "fmt" + "math" + "math/rand" + "net" + "os" + "strconv" + "strings" + "time" +) + +var flags []string + +func init() { + flag_one := os.Getenv("FLAG_ONE") + if flag_one == "" { + flag_one = "CCSC{fake_dummy_flag_1}" + } + + flag_two := os.Getenv("FLAG_TWO") + if flag_two == "" { + flag_two = "CCSC{fake_dummy_flag_2}" + } + + flag_three := os.Getenv("FLAG_THREE") + if flag_three == "" { + flag_three = "CCSC{fake_dummy_flag_3}" + } + + flags = []string{flag_one, flag_two, flag_three} +} + +func main() { + port := os.Getenv("PORT") + if port == "" { + port = "7945" + } + listener, err := net.Listen("tcp", ":"+port) + if err != nil { + fmt.Println("Error listening:", err.Error()) + return + } + defer listener.Close() + + fmt.Println("Listening on port " + port) + + for { + conn, err := listener.Accept() + if err != nil { + fmt.Println("Error accepting connection:", err.Error()) + return + } + + fmt.Println("Client connected") + + go handleConnection(conn) + } +} + +func handleConnection(conn net.Conn) { + defer conn.Close() + + gen := func(part int) (randomNumber int64, maxTries int) { + switch part { + case 1: + seed := time.Now().Unix() + random := rand.New(rand.NewSource(seed)) + randomNumber, maxTries = random.Int63(), 5 + return + case 2: + seed := time.Now().UnixMilli() + random := rand.New(rand.NewSource(seed)) + randomNumber, maxTries = random.Int63(), 50 + return + case 3: + seed := time.Now().UnixNano() + random := rand.New(rand.NewSource(seed)) + randomNumber, maxTries = random.Int63(), 500 + return + } + return 0, 0 + } + + reader := bufio.NewReader(conn) + writer := bufio.NewWriter(conn) + + writer.WriteString("v1.1\n") + writer.WriteString("=======================================================\n") + writer.WriteString("ReverseCAPTCHA commencing... Prove you are not a human!\n") + writer.WriteString("=======================================================\n\n") + writer.Flush() + + var optionSelected = -1 + + for { + writer.WriteString("Options:\n--------\n(1) Part One\n(2) Part Two\n(3) Part Three\n\nSolve part: ") + writer.Flush() + + input, err := reader.ReadString('\n') + if err != nil { + fmt.Println("Error reading input:", err.Error()) + return + } + + input = strings.TrimSpace(input) + option, err := strconv.Atoi(input) + if err != nil || option > 3 || option < 1 { + writer.WriteString("\n[x] Invalid input.\n\n") + writer.Flush() + continue + } + + optionSelected = option + break + } + + randomNumber, maxTries := gen(optionSelected) + if randomNumber == 0 { + fmt.Println("Something's wrong, terminate") + return + } + + triesLeft := maxTries + + writer.WriteString("\n") + writer.WriteString(fmt.Sprintf("I've hallucinated a number between 0 and %d. Can you guess it?\n\n", math.MaxInt64)) + writer.WriteString(fmt.Sprintf("You have %d tries.\n\n", maxTries)) + writer.Flush() + + for { + writer.WriteString(fmt.Sprintf("[%d]: ", triesLeft)) + writer.Flush() + + input, err := reader.ReadString('\n') + if err != nil { + fmt.Println("Error reading input:", err.Error()) + return + } + + input = strings.TrimSpace(input) + guess, err := strconv.ParseInt(input, 10, 64) + if err != nil { + writer.WriteString("Invalid input.\n") + writer.Flush() + continue + } + + triesLeft-- + + if triesLeft <= 0 { + writer.WriteString("\nBye.\n") + writer.Flush() + return + } else if guess < randomNumber { + writer.WriteString("++ Higher\n") + writer.Flush() + } else if guess > randomNumber { + writer.WriteString("-- Lower\n") + writer.Flush() + } else { + writer.WriteString(fmt.Sprintf("Superior computational brain power detected.\n%s\n", flags[optionSelected-1])) + writer.Flush() + return + } + } +} diff --git a/misc/.gitkeep b/misc/superguesser/solution/.gitkeep similarity index 100% rename from misc/.gitkeep rename to misc/superguesser/solution/.gitkeep diff --git a/misc/superguesser_2/challenge.yml b/misc/superguesser_2/challenge.yml new file mode 100644 index 0000000..5406265 --- /dev/null +++ b/misc/superguesser_2/challenge.yml @@ -0,0 +1,27 @@ +name: "Superguesser Part 2" +author: "koks" +category: misc + +description: | + The machines seem to live and breathe in binary. Use that against them and capture the flag. + +value: 500 +type: dynamic_docker +extra: + initial: 500 + minimum: 100 + decay: 25 + redirect_type: direct + compose_stack: !filecontents docker-compose.yml + +flags: + - CCSC{part2_m1lli5_n33d_som3_brains_and_s0me_luck} + +tags: + - misc + - easy + - medium + - hard + +state: visible +version: "0.1" diff --git a/misc/superguesser_2/docker-compose.yml b/misc/superguesser_2/docker-compose.yml new file mode 100644 index 0000000..8065562 --- /dev/null +++ b/misc/superguesser_2/docker-compose.yml @@ -0,0 +1,7 @@ +version: '3' +services: + superguesser: + image: ghcr.io/cybermouflons/ccsc2024/superguesser:latest + build: ../superguesser/setup/ + ports: + - 9745:9745 \ No newline at end of file diff --git a/misc/superguesser_2/public/superguesser.zip b/misc/superguesser_2/public/superguesser.zip new file mode 100644 index 0000000000000000000000000000000000000000..904afdf5e220eeee95e507037b58ba7cb135b88c GIT binary patch literal 2340 zcmb`Ic{JPU8pk7+1Qn@f>{LprEuz$@vD495MsA6cQn7>~)~FVVmQf~c71i38YMRzI z_NCP^9ZMOS5__sBu~#Xsv9z^J;*N8TJ3aUQai8CL-t+#>@0{=Z{J!sVo)6lJn+FEq zL|N`V$KB1Jix5B#5E2@MCwhnCLqhOG4UD}I02F~y@Y>7JFhKwp&ng!Huq%Pyl>!66 z0NOsOdG=?qgHq;!9t1qm%f}DDD~e}}lG%BUod-li6B)KKNa>cvE!F3&@(WftrL=h* zbeh`ps9gP)Cav^Qa>`LI60&v21v*pEo-n$8arCpc`|terCE<@mWtStz-Ac2l$syw- zfW@(X7`9CmUVHn2{tYVcaMWi6z14ukH6ooidFG7$7DMu)Ossm7-+*mGM-*Y!TK)pw zlezjfP{_2~Sf^5rFI_pBM4rIXEm76^^Q?f5$34Q3*6<5y^c5QK81|N@-?V8#t&Y$b z&-OFEzPCuT&YtBtVxGT9W&4e$Fi`izg380-rObTFLJ6>#or3CN13;pB{5-jH0bTV63yV4v=jm$IQRCxtx7#$JjQz zy4skS+1fd3{N?Hpu3vCG@jo5+z*;qR)2|G~GQNSc|ZY8J`SFj8;W4P^VOZlb@4v% z#t((@+g{%a-^&&?ij{UMJgmHNaW>qpbP&mU81FLjG?F1TO>DRhQv?s*W#%nhI3B$q zgG@Oy+7Ok^x6SNr4tz4>ZE)QhB!8VDqP@$SeixaG5vi|amZi!7ba-rtu8K7{5T zrdOT6j?}`4QFkWDnmj)0vE|fL@Y-T{tEBJB>`_-)%*o(PdUSS>O+iizTB0Z=-Y~^n zdq!DXjH*v!@XlNsP6#25VY0<$(zbvPMj{)hQ(x^&Fh&@nrt*g+B%=dPc4cnjQ0Dm# z;u~Jb<*ZkuD^J?G!WC+43lv4t{C%l{*8@cQjC!y>)6VWXr01)WPQg%Wq*+XRP4yiQ zanr&>dUJ{@F>(s$L|t-IJJXX9QuqBeK_HB#^n-?HDJzGj5yBwubes>hNo7fIa##|L zB!ao+@BM^w&y6)`E_xVn%s8`0*8M(C=i8gNE2czdJGb~~A|gkoG6sBKugGN>`28l) zF18^VO{;FVK(gAPrudQllZOW?||gG*LsAY(MEE~lb$x!%wJ zBUQrKI>85M?(Hjjz1!%VK2HMheNOGW^OyLl@;1Be>ST?Lr&&LgnpH+MW)x}bnFM`f z^4jyh>Lm8WP?^a`M6x+qA$LtBFNX=p2`)5**^&x3U-A;Zb{gt{3F-3b8>cHa=-)-uIZV6@i0pVhNJGS@4sP}{%UfX#`0VE^Oz zFxHdAti+H@@m>6bysM*iJkI`N#oN{_-+brpO(mp33hqN+87V%h|wSPFyZuqjjm|@2wc!&NE)~NfdaWLqG5>%GP)+} zS*79U?N-CkgM`TpGXFWpipyzJwl$w$vX}}lT^cBV0*35JzqEHqVDbmeKu~oWZ%Uqr zYieZEP5NVhHc^d{Se#y)JM+d)IbBn+BBLV1f!OCsIrUYt)Kc+!0TT&Zg2k;#pn;CP zEric8P3wxVYvLP9S&r@=xe6Z};^HfQr8Sd4UVLG!Y6-7KopDNNU3H1>OL+6GmQB2} zqRK1XPn}1DJ7sd?AJGxz;cgFzwgd(?99v3 zS1eb?lG*@;5P=PudT7#GM0RLO#jxU{fAZ;^lGGXMFMShNorVd%%ZnCa$9n{|4vEx< zch?kGZ21b72$k2gB(!{gD8fG;&v1SFuCCub-*>HcA{3&MGDug-i=|$1xj7t?DX#B! zMRIgwqo)O_)|zG@1ob4yR~fkNggh-uNOPD`B;U1KAK&EVOg{sJy+t+;0Kl1XXe%xt zjQh*<{S(B11ryHhF9ZF*v-n@qdojc^(O%G^ uE4cvw2QuwHkHd@oUUGP`7qsZBzyp5$kMuxW@$zw0c-T)eyJj+o^Y#ZrG^CpV literal 0 HcmV?d00001 diff --git a/misc/superguesser_2/setup/.gitkeep b/misc/superguesser_2/setup/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/misc/superguesser_2/solution/.gitkeep b/misc/superguesser_2/solution/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/misc/superguesser_3/challenge.yml b/misc/superguesser_3/challenge.yml new file mode 100644 index 0000000..1586148 --- /dev/null +++ b/misc/superguesser_3/challenge.yml @@ -0,0 +1,27 @@ +name: "Superguesser Part 3" +author: "koks" +category: misc + +description: | + The machines seem to live and breathe in binary. Use that against them and capture the flag. + +value: 500 +type: dynamic_docker +extra: + initial: 500 + minimum: 100 + decay: 25 + redirect_type: direct + compose_stack: !filecontents docker-compose.yml + +flags: + - CCSC{part3_nan0s_d0nt_c4re_bis3ct_is_1n_the_a1r} + +tags: + - misc + - easy + - medium + - hard + +state: visible +version: "0.1" diff --git a/misc/superguesser_3/docker-compose.yml b/misc/superguesser_3/docker-compose.yml new file mode 100644 index 0000000..8065562 --- /dev/null +++ b/misc/superguesser_3/docker-compose.yml @@ -0,0 +1,7 @@ +version: '3' +services: + superguesser: + image: ghcr.io/cybermouflons/ccsc2024/superguesser:latest + build: ../superguesser/setup/ + ports: + - 9745:9745 \ No newline at end of file diff --git a/misc/superguesser_3/public/superguesser.zip b/misc/superguesser_3/public/superguesser.zip new file mode 100644 index 0000000000000000000000000000000000000000..904afdf5e220eeee95e507037b58ba7cb135b88c GIT binary patch literal 2340 zcmb`Ic{JPU8pk7+1Qn@f>{LprEuz$@vD495MsA6cQn7>~)~FVVmQf~c71i38YMRzI z_NCP^9ZMOS5__sBu~#Xsv9z^J;*N8TJ3aUQai8CL-t+#>@0{=Z{J!sVo)6lJn+FEq zL|N`V$KB1Jix5B#5E2@MCwhnCLqhOG4UD}I02F~y@Y>7JFhKwp&ng!Huq%Pyl>!66 z0NOsOdG=?qgHq;!9t1qm%f}DDD~e}}lG%BUod-li6B)KKNa>cvE!F3&@(WftrL=h* zbeh`ps9gP)Cav^Qa>`LI60&v21v*pEo-n$8arCpc`|terCE<@mWtStz-Ac2l$syw- zfW@(X7`9CmUVHn2{tYVcaMWi6z14ukH6ooidFG7$7DMu)Ossm7-+*mGM-*Y!TK)pw zlezjfP{_2~Sf^5rFI_pBM4rIXEm76^^Q?f5$34Q3*6<5y^c5QK81|N@-?V8#t&Y$b z&-OFEzPCuT&YtBtVxGT9W&4e$Fi`izg380-rObTFLJ6>#or3CN13;pB{5-jH0bTV63yV4v=jm$IQRCxtx7#$JjQz zy4skS+1fd3{N?Hpu3vCG@jo5+z*;qR)2|G~GQNSc|ZY8J`SFj8;W4P^VOZlb@4v% z#t((@+g{%a-^&&?ij{UMJgmHNaW>qpbP&mU81FLjG?F1TO>DRhQv?s*W#%nhI3B$q zgG@Oy+7Ok^x6SNr4tz4>ZE)QhB!8VDqP@$SeixaG5vi|amZi!7ba-rtu8K7{5T zrdOT6j?}`4QFkWDnmj)0vE|fL@Y-T{tEBJB>`_-)%*o(PdUSS>O+iizTB0Z=-Y~^n zdq!DXjH*v!@XlNsP6#25VY0<$(zbvPMj{)hQ(x^&Fh&@nrt*g+B%=dPc4cnjQ0Dm# z;u~Jb<*ZkuD^J?G!WC+43lv4t{C%l{*8@cQjC!y>)6VWXr01)WPQg%Wq*+XRP4yiQ zanr&>dUJ{@F>(s$L|t-IJJXX9QuqBeK_HB#^n-?HDJzGj5yBwubes>hNo7fIa##|L zB!ao+@BM^w&y6)`E_xVn%s8`0*8M(C=i8gNE2czdJGb~~A|gkoG6sBKugGN>`28l) zF18^VO{;FVK(gAPrudQllZOW?||gG*LsAY(MEE~lb$x!%wJ zBUQrKI>85M?(Hjjz1!%VK2HMheNOGW^OyLl@;1Be>ST?Lr&&LgnpH+MW)x}bnFM`f z^4jyh>Lm8WP?^a`M6x+qA$LtBFNX=p2`)5**^&x3U-A;Zb{gt{3F-3b8>cHa=-)-uIZV6@i0pVhNJGS@4sP}{%UfX#`0VE^Oz zFxHdAti+H@@m>6bysM*iJkI`N#oN{_-+brpO(mp33hqN+87V%h|wSPFyZuqjjm|@2wc!&NE)~NfdaWLqG5>%GP)+} zS*79U?N-CkgM`TpGXFWpipyzJwl$w$vX}}lT^cBV0*35JzqEHqVDbmeKu~oWZ%Uqr zYieZEP5NVhHc^d{Se#y)JM+d)IbBn+BBLV1f!OCsIrUYt)Kc+!0TT&Zg2k;#pn;CP zEric8P3wxVYvLP9S&r@=xe6Z};^HfQr8Sd4UVLG!Y6-7KopDNNU3H1>OL+6GmQB2} zqRK1XPn}1DJ7sd?AJGxz;cgFzwgd(?99v3 zS1eb?lG*@;5P=PudT7#GM0RLO#jxU{fAZ;^lGGXMFMShNorVd%%ZnCa$9n{|4vEx< zch?kGZ21b72$k2gB(!{gD8fG;&v1SFuCCub-*>HcA{3&MGDug-i=|$1xj7t?DX#B! zMRIgwqo)O_)|zG@1ob4yR~fkNggh-uNOPD`B;U1KAK&EVOg{sJy+t+;0Kl1XXe%xt zjQh*<{S(B11ryHhF9ZF*v-n@qdojc^(O%G^ uE4cvw2QuwHkHd@oUUGP`7qsZBzyp5$kMuxW@$zw0c-T)eyJj+o^Y#ZrG^CpV literal 0 HcmV?d00001 diff --git a/misc/superguesser_3/setup/.gitkeep b/misc/superguesser_3/setup/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/misc/superguesser_3/solution/.gitkeep b/misc/superguesser_3/solution/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/web/arcane-nebula/setup/Dockerfile b/web/arcane-nebula/setup/Dockerfile index ae6099e..1277d26 100644 --- a/web/arcane-nebula/setup/Dockerfile +++ b/web/arcane-nebula/setup/Dockerfile @@ -19,5 +19,4 @@ WORKDIR /app # run the app USER bun -EXPOSE 3000/tcp ENTRYPOINT [ "bun", "run", "index.ts" ] \ No newline at end of file