From 6fa7e0a7c7bad68ae53cbd2a495a5ef8004ceb15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Untersch=C3=BCtz?= Date: Mon, 24 Nov 2025 22:32:10 +0100 Subject: [PATCH] Init --- .github/workflows/cleanup.yaml | 37 ++ .github/workflows/deploy.yaml | 98 +++ Dockerfile | 37 ++ docker-compose.yml | 12 + go.mod | 10 + go.sum | 8 + k8s/app.yaml | 42 ++ k8s/ingress.yaml | 25 + k8s/redis.yaml | 49 ++ main.go | 603 ++++++++++++++++++ secure/admin.html | 169 +++++ static/assets/background.jpg | Bin 0 -> 116003 bytes .../press-start-2p-v16-latin-regular.svg | 211 ++++++ .../press-start-2p-v16-latin-regular.ttf | Bin 0 -> 41660 bytes .../press-start-2p-v16-latin-regular.woff | Bin 0 -> 15848 bytes .../press-start-2p-v16-latin-regular.woff2 | Bin 0 -> 12512 bytes static/assets/player.png | Bin 0 -> 384 bytes static/game.js | 538 ++++++++++++++++ static/index.html | 181 ++++++ static/style.css | 335 ++++++++++ 20 files changed, 2355 insertions(+) create mode 100644 .github/workflows/cleanup.yaml create mode 100644 .github/workflows/deploy.yaml create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 go.mod create mode 100644 go.sum create mode 100644 k8s/app.yaml create mode 100644 k8s/ingress.yaml create mode 100644 k8s/redis.yaml create mode 100644 main.go create mode 100644 secure/admin.html create mode 100644 static/assets/background.jpg create mode 100644 static/assets/fonts/press-start-2p-v16-latin-regular.svg create mode 100644 static/assets/fonts/press-start-2p-v16-latin-regular.ttf create mode 100644 static/assets/fonts/press-start-2p-v16-latin-regular.woff create mode 100644 static/assets/fonts/press-start-2p-v16-latin-regular.woff2 create mode 100644 static/assets/player.png create mode 100644 static/game.js create mode 100644 static/index.html create mode 100644 static/style.css diff --git a/.github/workflows/cleanup.yaml b/.github/workflows/cleanup.yaml new file mode 100644 index 0000000..2bd2858 --- /dev/null +++ b/.github/workflows/cleanup.yaml @@ -0,0 +1,37 @@ +name: Cleanup Environment +on: [delete] + +jobs: + cleanup: + runs-on: ubuntu-latest + if: github.event.ref_type == 'branch' + + steps: + - name: Prepare Variables + run: | + REPO_LOWER=$(echo "${{ gitea.repository }}" | cut -d'/' -f2 | tr '[:upper:]' '[:lower:]') + BRANCH_NAME=${{ github.event.ref }} + BRANCH_LOWER=$(echo "$BRANCH_NAME" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9-]/-/g') + TARGET_NS="${REPO_LOWER}-${BRANCH_LOWER}" + echo "TARGET_NS=$TARGET_NS" >> $GITHUB_ENV + + - name: Protect Main + if: env.TARGET_NS == 'escape-teacher-main' || env.TARGET_NS == 'escape-teacher-master' + run: | + echo "❌ Main darf nicht gelöscht werden!" + exit 1 + + - name: Setup Kubectl + run: | + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" + chmod +x kubectl + mv kubectl /usr/local/bin/ + mkdir -p $HOME/.kube + echo "${{ secrets.KUBE_CONFIG }}" > $HOME/.kube/config + chmod 600 $HOME/.kube/config + sed -i 's|server: https://.*:6443|server: https://kubernetes.default.svc:443|g' $HOME/.kube/config + + - name: Delete Namespace + run: | + echo "🗑️ Lösche Namespace: ${{ env.TARGET_NS }}" + kubectl delete namespace ${{ env.TARGET_NS }} --ignore-not-found --wait=false \ No newline at end of file diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 0000000..adfe229 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,98 @@ +name: Build & Deploy Game +on: [push] + +env: + REGISTRY: git.zb-server.de + BASE_DOMAIN: zb-server.de + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + # 1. Code holen + - name: Checkout Code + uses: actions/checkout@v3 + + # 2. Variablen vorbereiten + - name: Prepare Environment Variables + id: prep + run: | + USERNAME_LOWER=$(echo "${{ gitea.actor }}" | tr '[:upper:]' '[:lower:]') + REPO_LOWER=$(echo "${{ gitea.repository }}" | cut -d'/' -f2 | tr '[:upper:]' '[:lower:]') + OWNER_LOWER=$(echo "${{ gitea.repository_owner }}" | tr '[:upper:]' '[:lower:]') + BRANCH_LOWER=$(echo "${{ gitea.ref_name }}" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9-]/-/g') + + TARGET_NS="${REPO_LOWER}-${BRANCH_LOWER}" + APP_URL="${TARGET_NS}.${{ env.BASE_DOMAIN }}" + FULL_IMAGE_PATH="${OWNER_LOWER}/${REPO_LOWER}" + IMAGE_TAG="${{ env.REGISTRY }}/${FULL_IMAGE_PATH}:${{ gitea.sha }}" + + echo "TARGET_NS=$TARGET_NS" >> $GITHUB_ENV + echo "APP_URL=$APP_URL" >> $GITHUB_ENV + echo "IMAGE_FULL=$IMAGE_TAG" >> $GITHUB_ENV + + echo "Deploying to Namespace: $TARGET_NS URL: $APP_URL" + + # 3. Docker Image bauen (Kaniko) + - name: Build and Push + uses: aevea/action-kaniko@v0.12.0 + with: + registry: ${{ env.REGISTRY }} + username: ${{ gitea.actor }} + password: ${{ secrets.PACKAGE_TOKEN }} + image: ${{ env.FULL_IMAGE_PATH }} # Achtung: Hier muss evtl. angepasst werden wie im Prep step berechnet + tag: ${{ gitea.sha }} + cache: true + extra_args: --skip-tls-verify-pull + + # 4. Kubectl einrichten (Interner Trick) + - name: Setup Kubectl + run: | + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" + chmod +x kubectl + mv kubectl /usr/local/bin/ + + mkdir -p $HOME/.kube + echo "${{ secrets.KUBE_CONFIG }}" > $HOME/.kube/config + chmod 600 $HOME/.kube/config + + # Der "Internal Kubernetes Trick" + sed -i 's|server: https://.*:6443|server: https://kubernetes.default.svc:443|g' $HOME/.kube/config + + # 5. Deploy + - name: Deploy to Kubernetes + run: | + # Namespace erstellen + kubectl create namespace ${{ env.TARGET_NS }} --dry-run=client -o yaml | kubectl apply -f - + + # Platzhalter in den YAML Dateien ersetzen + # Wir nutzen sed, um die Variablen in die Dateien zu schreiben + + # 1. Ingress + sed -i "s|\${APP_URL}|${{ env.APP_URL }}|g" k8s/ingress.yaml + + # 2. App Deployment (Image & Secrets) + # Hinweis: Secrets sollten idealerweise in den Repo-Settings hinterlegt sein + ADMIN_USER="${{ secrets.ADMIN_USER || 'lehrer' }}" + ADMIN_PASS="${{ secrets.ADMIN_PASS || 'geheim123' }}" + + sed -i "s|\${IMAGE_NAME}|${{ env.IMAGE_FULL }}|g" k8s/app.yaml + sed -i "s|\${ADMIN_USER}|$ADMIN_USER|g" k8s/app.yaml + sed -i "s|\${ADMIN_PASS}|$ADMIN_PASS|g" k8s/app.yaml + + # Anwenden im richtigen Namespace + echo "Applying Redis..." + kubectl apply -f k8s/redis.yaml -n ${{ env.TARGET_NS }} + + echo "Applying App..." + kubectl apply -f k8s/app.yaml -n ${{ env.TARGET_NS }} + + echo "Applying Ingress..." + kubectl apply -f k8s/ingress.yaml -n ${{ env.TARGET_NS }} + + # Force Restart damit das neue Image gezogen wird + kubectl rollout restart deployment/escape-game -n ${{ env.TARGET_NS }} + + # 6. Info + - name: Summary + run: echo "🚀 Deployed to https://${{ env.APP_URL }}" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d1d41f1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +# --- STAGE 1: Builder (Kompilieren) --- +FROM golang:1.23-alpine AS builder + +# Arbeitsverzeichnis im Container erstellen +WORKDIR /app + +# Abhängigkeiten kopieren und herunterladen (Caching-Effizienz) +COPY go.mod go.sum ./ +RUN go mod download + +# Den gesamten Rest des Codes kopieren +COPY . . + +# Das Go-Programm kompilieren +# -o server: Nenne die Datei "server" +RUN go build -o server main.go + +# --- STAGE 2: Runner (Ausführen) --- +FROM alpine:latest + +WORKDIR /root/ + +# Wir brauchen evtl. Zertifikate für HTTPS (falls du später externe APIs nutzt) +RUN apk --no-cache add ca-certificates + +# Kopiere das fertige Programm aus Stage 1 +COPY --from=builder /app/server . + +# WICHTIG: Kopiere die statischen Ordner (HTML, CSS, Bilder, Fonts, Admin) +COPY --from=builder /app/static ./static +COPY --from=builder /app/secure ./secure + +# Port freigeben +EXPOSE 8080 + +# Startbefehl +CMD ["./server"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b4aac80 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,12 @@ +version: '3.8' +services: + redis: + image: redis:alpine + container_name: escape-redis + ports: + - "6379:6379" + volumes: + - redis_data:/data + +volumes: + redis_data: \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..168633d --- /dev/null +++ b/go.mod @@ -0,0 +1,10 @@ +module escape-teacher + +go 1.25.4 + +require ( + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/redis/go-redis/v9 v9.17.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..eb7ba5f --- /dev/null +++ b/go.sum @@ -0,0 +1,8 @@ +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/redis/go-redis/v9 v9.17.0 h1:K6E+ZlYN95KSMmZeEQPbU/c++wfmEvfFB17yEAq/VhM= +github.com/redis/go-redis/v9 v9.17.0/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370= diff --git a/k8s/app.yaml b/k8s/app.yaml new file mode 100644 index 0000000..1ed8e08 --- /dev/null +++ b/k8s/app.yaml @@ -0,0 +1,42 @@ +apiVersion: v1 +kind: Service +metadata: + name: escape-game +spec: + ports: + - port: 80 + targetPort: 8080 + selector: + app: escape-game +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: escape-game + labels: + app: escape-game +spec: + replicas: 1 + selector: + matchLabels: + app: escape-game + template: + metadata: + labels: + app: escape-game + spec: + containers: + - name: game + image: ${IMAGE_NAME} # Wird von CI ersetzt + ports: + - containerPort: 8080 + env: + # Kubernetes DNS: "service-name:port" + # Da wir im selben Namespace sind, reicht "redis:6379" + - name: REDIS_ADDR + value: "redis:6379" + # Admin Zugangsdaten (werden von CI injected oder hier fest) + - name: ADMIN_USER + value: "${ADMIN_USER}" + - name: ADMIN_PASS + value: "${ADMIN_PASS}" \ No newline at end of file diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml new file mode 100644 index 0000000..2f3855c --- /dev/null +++ b/k8s/ingress.yaml @@ -0,0 +1,25 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: game-ingress + annotations: + cert-manager.io/cluster-issuer: letsencrypt-prod + traefik.ingress.kubernetes.io/router.entrypoints: web, websecure + traefik.ingress.kubernetes.io/router.middlewares: gitea-redirect-https@kubernetescrd +spec: + ingressClassName: traefik + tls: + - hosts: + - ${APP_URL} # Wird von CI ersetzt + secretName: game-tls-secret + rules: + - host: ${APP_URL} # Wird von CI ersetzt + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: escape-game + port: + number: 80 \ No newline at end of file diff --git a/k8s/redis.yaml b/k8s/redis.yaml new file mode 100644 index 0000000..f22d1b6 --- /dev/null +++ b/k8s/redis.yaml @@ -0,0 +1,49 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: redis-data +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 1Gi +--- +apiVersion: v1 +kind: Service +metadata: + name: redis +spec: + ports: + - port: 6379 + selector: + app: redis +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis + labels: + app: redis +spec: + selector: + matchLabels: + app: redis + template: + metadata: + labels: + app: redis + spec: + containers: + - name: redis + image: redis:alpine + ports: + - containerPort: 6379 + volumeMounts: + - name: data + mountPath: /data + volumes: + - name: data + persistentVolumeClaim: + claimName: redis-data \ No newline at end of file diff --git a/main.go b/main.go new file mode 100644 index 0000000..335584e --- /dev/null +++ b/main.go @@ -0,0 +1,603 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "html" + "log" + "math/rand" + "net/http" + "os" + "strconv" + "time" + + "github.com/google/uuid" + "github.com/redis/go-redis/v9" +) + +const ( + Gravity = 0.6 + JumpPower = -12.0 + GroundY = 350.0 + PlayerHeight = 50.0 + PlayerYBase = GroundY - PlayerHeight + GameSpeed = 5.0 + GameWidth = 800.0 +) + +var ( + ctx = context.Background() + rdb *redis.Client + defaultConfig GameConfig + adminUser string + adminPass string +) + +type ObstacleDef struct { + ID string `json:"id"` + Width float64 `json:"width"` + Height float64 `json:"height"` + Color string `json:"color"` + Image string `json:"image"` + CanTalk bool `json:"canTalk"` + SpeechLines []string `json:"speechLines"` + YOffset float64 `json:"yOffset"` +} + +type GameConfig struct { + Obstacles []ObstacleDef `json:"obstacles"` + Backgrounds []string `json:"backgrounds"` +} + +type ActiveObstacle struct { + ID string `json:"id"` + X float64 `json:"x"` + Y float64 `json:"y"` + Width float64 `json:"w"` + Height float64 `json:"h"` +} + +type Input struct { + Tick int `json:"t"` + Act string `json:"act"` +} + +type ValidateRequest struct { + SessionID string `json:"sessionId"` + Inputs []Input `json:"inputs"` + TotalTicks int `json:"totalTicks"` +} + +type ValidateResponse struct { + Status string `json:"status"` + VerifiedScore int `json:"verifiedScore"` + ServerObs []ActiveObstacle `json:"serverObs"` +} + +type StartResponse struct { + SessionID string `json:"sessionId"` + Seed uint32 `json:"seed"` +} + +type SubmitNameRequest struct { + SessionID string `json:"sessionId"` + Name string `json:"name"` +} + +type SubmitResponse struct { + ClaimCode string `json:"claimCode"` +} + +type LeaderboardEntry struct { + Rank int64 `json:"rank"` + Name string `json:"name"` + Score int `json:"score"` + IsMe bool `json:"isMe"` +} + +type AdminActionRequest struct { + SessionID string `json:"sessionId"` + Action string `json:"action"` +} + +type AdminEntry struct { + SessionID string `json:"sessionId"` + Name string `json:"name"` + Score int `json:"score"` + Code string `json:"code"` + Time string `json:"time"` +} + +type ClaimDeleteRequest struct { + SessionID string `json:"sessionId"` + ClaimCode string `json:"claimCode"` +} + +type PseudoRNG struct { + State uint32 +} + +func NewRNG(seed int64) *PseudoRNG { + return &PseudoRNG{State: uint32(seed)} +} + +func (r *PseudoRNG) NextFloat() float64 { + calc := (uint64(r.State)*1664525 + 1013904223) % 4294967296 + r.State = uint32(calc) + return float64(r.State) / 4294967296.0 +} + +func (r *PseudoRNG) NextRange(min, max float64) float64 { + return min + (r.NextFloat() * (max - min)) +} + +func (r *PseudoRNG) PickDef(defs []ObstacleDef) *ObstacleDef { + if len(defs) == 0 { + return nil + } + idx := int(r.NextRange(0, float64(len(defs)))) + return &defs[idx] +} + +func getEnv(key, fallback string) string { + if value, ok := os.LookupEnv(key); ok { + return value + } + return fallback +} + +func BasicAuth(next http.HandlerFunc) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + user, pass, ok := r.BasicAuth() + if !ok || user != adminUser || pass != adminPass { + w.Header().Set("WWW-Authenticate", `Basic realm="Lehrerzimmer"`) + http.Error(w, "Unauthorized", 401) + return + } + next(w, r) + } +} + +func main() { + redisAddr := getEnv("REDIS_ADDR", "localhost:6379") + adminUser = getEnv("ADMIN_USER", "lehrer") + adminPass = getEnv("ADMIN_PASS", "geheim123") + + rdb = redis.NewClient(&redis.Options{Addr: redisAddr}) + if _, err := rdb.Ping(ctx).Result(); err != nil { + log.Fatal(err) + } + + initGameConfig() + + fs := http.FileServer(http.Dir("./static")) + http.Handle("/", fs) + + http.HandleFunc("/api/config", handleConfig) + http.HandleFunc("/api/start", handleStart) + http.HandleFunc("/api/validate", handleValidate) + http.HandleFunc("/api/submit-name", handleSubmitName) + http.HandleFunc("/api/leaderboard", handleLeaderboard) + http.HandleFunc("/api/claim/delete", handleClaimDelete) + + http.HandleFunc("/admin", BasicAuth(handleAdminPage)) + http.HandleFunc("/api/admin/list", BasicAuth(handleAdminList)) + http.HandleFunc("/api/admin/action", BasicAuth(handleAdminAction)) + + log.Println("Server läuft auf Port 8080") + log.Fatal(http.ListenAndServe(":8080", nil)) +} + +func generateClaimCode() string { + const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + b := make([]byte, 8) + for i := range b { + b[i] = charset[rand.Intn(len(charset))] + } + return string(b) +} + +func initGameConfig() { + defaultConfig = GameConfig{ + Obstacles: []ObstacleDef{ + {ID: "desk", Width: 40, Height: 30, Color: "#8B4513", Image: "desk.png"}, + {ID: "teacher", Width: 30, Height: 60, Color: "#000080", Image: "teacher.png", CanTalk: true, SpeechLines: []string{"Halt!", "Handy weg!", "Nachsitzen!"}}, + {ID: "trashcan", Width: 25, Height: 35, Color: "#555", Image: "trash.png"}, + {ID: "eraser", Width: 30, Height: 20, Color: "#fff", Image: "eraser.png", YOffset: 45.0}, + }, + Backgrounds: []string{"background.png"}, + } +} + +func handleConfig(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(defaultConfig) +} + +func handleStart(w http.ResponseWriter, r *http.Request) { + sessionID := uuid.New().String() + rawSeed := time.Now().UnixNano() + seed32 := uint32(rawSeed) + + emptyObs, _ := json.Marshal([]ActiveObstacle{}) + + err := rdb.HSet(ctx, "session:"+sessionID, map[string]interface{}{ + "seed": seed32, + "rng_state": seed32, + "score": 0, + "is_dead": 0, + "pos_y": PlayerYBase, + "vel_y": 0.0, + "obstacles": string(emptyObs), + }).Err() + + if err != nil { + http.Error(w, "DB Error", 500) + return + } + rdb.Expire(ctx, "session:"+sessionID, 1*time.Hour) + + json.NewEncoder(w).Encode(StartResponse{SessionID: sessionID, Seed: seed32}) +} + +func handleValidate(w http.ResponseWriter, r *http.Request) { + var req ValidateRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "Bad Request", 400) + return + } + + key := "session:" + req.SessionID + vals, err := rdb.HGetAll(ctx, key).Result() + if err != nil || len(vals) == 0 { + http.Error(w, "Session invalid", 401) + return + } + + if vals["is_dead"] == "1" { + json.NewEncoder(w).Encode(ValidateResponse{Status: "dead", VerifiedScore: 0}) + return + } + + posY := parseOr(vals["pos_y"], PlayerYBase) + velY := parseOr(vals["vel_y"], 0.0) + score := int(parseOr(vals["score"], 0)) + + rngStateVal, _ := strconv.ParseInt(vals["rng_state"], 10, 64) + rng := NewRNG(rngStateVal) + + var obstacles []ActiveObstacle + if val, ok := vals["obstacles"]; ok && val != "" { + json.Unmarshal([]byte(val), &obstacles) + } else { + obstacles = []ActiveObstacle{} + } + + playerDead := false + + for i := 0; i < req.TotalTicks; i++ { + didJump := false + isCrouching := false + + for _, inp := range req.Inputs { + if inp.Tick == i { + if inp.Act == "JUMP" { + didJump = true + } + if inp.Act == "DUCK" { + isCrouching = true + } + } + } + + isGrounded := posY >= PlayerYBase-1.0 + + currentHeight := PlayerHeight + if isCrouching { + currentHeight = PlayerHeight / 2 + if !isGrounded { + velY += 2.0 + } + } + + if didJump && isGrounded && !isCrouching { + velY = JumpPower + } + + velY += Gravity + posY += velY + + if posY > PlayerYBase { + posY = PlayerYBase + velY = 0 + } + + hitboxY := posY + if isCrouching { + hitboxY = posY + (PlayerHeight - currentHeight) + } + + nextObstacles := []ActiveObstacle{} + rightmostX := 0.0 + + for _, obs := range obstacles { + obs.X -= GameSpeed + + if obs.X+obs.Width < 50.0 { + continue + } + + paddingX := 10.0 + paddingY_Top := 25.0 + paddingY_Bottom := 5.0 + + pLeft, pRight := 50.0+paddingX, 50.0+30.0-paddingX + pTop, pBottom := hitboxY+paddingY_Top, hitboxY+currentHeight-paddingY_Bottom + + oLeft, oRight := obs.X+paddingX, obs.X+obs.Width-paddingX + oTop, oBottom := obs.Y+paddingY_Top, obs.Y+obs.Height-paddingY_Bottom + + if pRight > oLeft && pLeft < oRight && pBottom > oTop && pTop < oBottom { + playerDead = true + } + + if obs.X+obs.Width > -100 { + nextObstacles = append(nextObstacles, obs) + if obs.X+obs.Width > rightmostX { + rightmostX = obs.X + obs.Width + } + } + } + obstacles = nextObstacles + + if rightmostX < GameWidth-10.0 { + rawGap := 400.0 + rng.NextRange(0, 500) + gap := float64(int(rawGap)) + spawnX := rightmostX + gap + if spawnX < GameWidth { + spawnX = GameWidth + } + + var possibleDefs []ObstacleDef + for _, d := range defaultConfig.Obstacles { + if d.ID == "eraser" { + if score >= 500 { + possibleDefs = append(possibleDefs, d) + } + } else { + possibleDefs = append(possibleDefs, d) + } + } + + def := rng.PickDef(possibleDefs) + + if def != nil && def.CanTalk { + if rng.NextFloat() > 0.7 { + rng.NextFloat() + } + } + + if def != nil { + spawnY := GroundY - def.Height - def.YOffset + obstacles = append(obstacles, ActiveObstacle{ + ID: def.ID, + X: spawnX, + Y: spawnY, + Width: def.Width, + Height: def.Height, + }) + } + } + + if !playerDead { + score++ + } + } + + status := "alive" + if playerDead { + status = "dead" + rdb.HSet(ctx, key, "is_dead", 1) + } + + obsJson, _ := json.Marshal(obstacles) + + rdb.HSet(ctx, key, map[string]interface{}{ + "score": score, + "pos_y": fmt.Sprintf("%f", posY), + "vel_y": fmt.Sprintf("%f", velY), + "rng_state": rng.State, + "obstacles": string(obsJson), + }) + rdb.Expire(ctx, key, 1*time.Hour) + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(ValidateResponse{ + Status: status, + VerifiedScore: score, + ServerObs: obstacles, + }) +} + +func handleSubmitName(w http.ResponseWriter, r *http.Request) { + var req SubmitNameRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "Bad Request", 400) + return + } + + safeName := html.EscapeString(req.Name) + + sessionKey := "session:" + req.SessionID + scoreVal, err := rdb.HGet(ctx, sessionKey, "score").Result() + if err != nil { + http.Error(w, "Session expired", 404) + return + } + scoreInt, _ := strconv.Atoi(scoreVal) + + claimCode := generateClaimCode() + timestamp := time.Now().Format("02.01.2006 15:04") + + rdb.HSet(ctx, sessionKey, map[string]interface{}{ + "name": safeName, + "claim_code": claimCode, + "created_at": timestamp, + }) + + rdb.ZAdd(ctx, "leaderboard:unverified", redis.Z{ + Score: float64(scoreInt), + Member: req.SessionID, + }) + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(SubmitResponse{ClaimCode: claimCode}) +} + +func handleLeaderboard(w http.ResponseWriter, r *http.Request) { + mySessionID := r.URL.Query().Get("sessionId") + targetKey := "leaderboard:public" + + var entries []LeaderboardEntry + + top3, _ := rdb.ZRevRangeWithScores(ctx, targetKey, 0, 2).Result() + + for i, z := range top3 { + rank := int64(i + 1) + sid := z.Member.(string) + name, _ := rdb.HGet(ctx, "session:"+sid, "name").Result() + if name == "" { + name = "Unbekannt" + } + + entries = append(entries, LeaderboardEntry{ + Rank: rank, Name: name, Score: int(z.Score), IsMe: (sid == mySessionID), + }) + } + + if mySessionID != "" { + myRank, err := rdb.ZRevRank(ctx, targetKey, mySessionID).Result() + if err == nil { + if myRank > 2 { + start := myRank - 1 + stop := myRank + 1 + neighbors, _ := rdb.ZRevRangeWithScores(ctx, targetKey, start, stop).Result() + + for i, z := range neighbors { + rank := start + int64(i) + 1 + sid := z.Member.(string) + name, _ := rdb.HGet(ctx, "session:"+sid, "name").Result() + if name == "" { + name = "Unbekannt" + } + + entries = append(entries, LeaderboardEntry{ + Rank: rank, Name: name, Score: int(z.Score), IsMe: (sid == mySessionID), + }) + } + } + } + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(entries) +} + +func handleAdminPage(w http.ResponseWriter, r *http.Request) { + http.ServeFile(w, r, "./secure/admin.html") +} + +func handleAdminList(w http.ResponseWriter, r *http.Request) { + listType := r.URL.Query().Get("type") + redisKey := "leaderboard:unverified" + if listType == "public" { + redisKey = "leaderboard:public" + } + + vals, _ := rdb.ZRevRangeWithScores(ctx, redisKey, 0, -1).Result() + var adminList []AdminEntry + + for _, z := range vals { + sid := z.Member.(string) + info, _ := rdb.HGetAll(ctx, "session:"+sid).Result() + + name := info["name"] + if name == "" { + name = "Unbekannt" + } + + adminList = append(adminList, AdminEntry{ + SessionID: sid, + Name: name, + Score: int(z.Score), + Code: info["claim_code"], + Time: info["created_at"], + }) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(adminList) +} + +func handleAdminAction(w http.ResponseWriter, r *http.Request) { + var req AdminActionRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "Bad Request", 400) + return + } + + if req.Action == "approve" { + score, err := rdb.ZScore(ctx, "leaderboard:unverified", req.SessionID).Result() + if err != nil { + http.Error(w, "Entry not found", 404) + return + } + rdb.ZAdd(ctx, "leaderboard:public", redis.Z{Score: score, Member: req.SessionID}) + rdb.ZRem(ctx, "leaderboard:unverified", req.SessionID) + + } else if req.Action == "delete" { + rdb.ZRem(ctx, "leaderboard:unverified", req.SessionID) + rdb.ZRem(ctx, "leaderboard:public", req.SessionID) + } + + w.WriteHeader(http.StatusOK) +} + +func handleClaimDelete(w http.ResponseWriter, r *http.Request) { + var req ClaimDeleteRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "Bad Request", 400) + return + } + + sessionKey := "session:" + req.SessionID + realCode, err := rdb.HGet(ctx, sessionKey, "claim_code").Result() + + if err != nil || realCode == "" { + http.Error(w, "Not found", 404) + return + } + + if realCode != req.ClaimCode { + http.Error(w, "Wrong Code", 403) + return + } + + rdb.ZRem(ctx, "leaderboard:unverified", req.SessionID) + rdb.ZRem(ctx, "leaderboard:public", req.SessionID) + rdb.HDel(ctx, sessionKey, "name") + + w.WriteHeader(http.StatusOK) +} + +func parseOr(s string, def float64) float64 { + if s == "" { + return def + } + v, err := strconv.ParseFloat(s, 64) + if err != nil { + return def + } + return v +} diff --git a/secure/admin.html b/secure/admin.html new file mode 100644 index 0000000..1e4a820 --- /dev/null +++ b/secure/admin.html @@ -0,0 +1,169 @@ + + + + + Lehrer Zimmer (Admin) + + + + +
+

👨‍🏫 Lehrer Zimmer

+ +
+ +
+ + +
+ +
Lade...
+ + + + \ No newline at end of file diff --git a/static/assets/background.jpg b/static/assets/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0495126eee6c9d51ee549c4c782f52e420cd434 GIT binary patch literal 116003 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 literal 0 HcmV?d00001 diff --git a/static/assets/fonts/press-start-2p-v16-latin-regular.svg b/static/assets/fonts/press-start-2p-v16-latin-regular.svg new file mode 100644 index 0000000..44c7495 --- /dev/null +++ b/static/assets/fonts/press-start-2p-v16-latin-regular.svg @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/fonts/press-start-2p-v16-latin-regular.ttf b/static/assets/fonts/press-start-2p-v16-latin-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4932a6e661538316f3c8a54cdba9d1daa6b3701c GIT binary patch literal 41660 zcmeIbd6XR2ecyYls`qWCXTbm%EInufBryXJ3x@42x#+W8`|`UUxM|Z#_v5#5{_}i)?D*p|r~muAckOkq{JYMDj~##Rna0Y0^ucd) z{$;-Z)03wke*C!;FTUVh{TH39E_!(8>C;^Ar+tNE;o-+Vd~(%4`Sh%FD}K|tkN&q0 z&d!`DJiGUse6Ra%`5+fEKbQFpJ|E=sbsv2EnGfy#@3=mW&QDaW zk=p9}=nX#e{_Strxmu)Oe`I~o*N^?bpZ)3w`nLVKi+qc(U*Gr(-T3wA{@o|P{f&3d zMQ_-3J;lE=(Hp@hT$Zt(3y*N=fIkLD-KGEt0Rw-Z-t*m4=XOrrzuSGqxmCl-*n;O8 z&i$0`3E#A94Q6-XOYR@vf8=}+e0-`M{Bpq+-0{=rU4F+GAA4}ybs4u-=dIFoX?JN| zX{4Ab#1|gP-Iv>%Ta~p7?>?6jOH_ywOM&Z1BUJzx9zH{#XbDwulx&3Y%L zj0vtTil6Z+)3O*e+!@nDiM_ zKR5UvhmH?@YxvIL-&nL~(bq<98+mr*XGZ?R;?cz)S^VouZeH^8l7F}K*wVkb^bbbe z=+@C=qn{c5_sgzd_Qy^e{%V6tr%bN(29S)a&+YrEC00dVB?>S^^ffw z`<}7(*uPn|Y}I3{et6Zdt$L@qr+KdVwd)pN_wMVyvAVMQ{j1Nf8CbJ_%}Z+ApGrsho#-1O0#{>4rIX~U5XU)%6sH&!>^wecr6{=CZMF+Wg4o zmo|TP^OtYldGkM=ykYWVlfN?g<}J-zcHQ#uEid!$o40Pi^=Gz(TXt{x_?92u@|CR{ zwm!1;6Swu<_VL?(=l0_5H{L#d`+we6**3B5`|lXKe6N3tSP8i+ zLTdaI_dD((_xBj-=iMjVYPW{xUhn=BW1n^Z*!@%Y&lu%eH_k|Z*Zp(%HTQeqeZ9LW zhzwRIdBX3ze*pyl!2Nai1=nVN{~1b~bho%$nd#TvzhY+Ja9g3c+mYM7BeFoce$PFXU zN6>Cd;FnRiEXW4AAn(5H-g1BL{=!w=UGA&y``vP^w7-kI{TXC&9mxMQvb%)F8E`w? zQFja;Y`HSp<8}8M)@{N49rp|F*W9nW-*SK7ebM~`_e<_KgQ9!M{i@5u(ckBOI4Hxz z|HXX?JdU}Q?r(tApT$Zo1l6GCn&{P+-N&%?&bc2%!+gNK;kE~TL4QzpKjgmY{tvXx zPWQ*|-?%@@96EgPVCLY7C!WbX##{c`Q;%%euw!d{+!P--`{VXq@o__D_p?tup%0rj zZJdm6n#|8U_0$v3KYO}p#}iLHf2#QKQ!~%a9)IHThl(@DpMA#8?CwoFb{av6!ladk zBwg&7F>CQ==9S?pW;pU=D|q-$urYWb{Bro);U96548?WOj4*L2!obU;?^{?P%KJz!v zD{?;q?fj_wWw_#Zp`pL+ehz;5HTNkn{$o(_-^9}WD)jXm?#JPo3^Y-NcIq7}TLHGk zyG?j(9kB6|M$*9Z#vSfw;h@jKFMkXC-U(0ag$oWCz26UgdrF=*s{0_kBMv%+ba)2d z5Qls>wD||n>2E=GpN8)KAvE@7=Jz%Cui@DuvLZ$mOX z4rkm2SL|}zq1D~+^t*twxc7+h=X>Dn4pyySZF`C5({^vWYP5Rz+A6I&w zv`_k}2EI;Un#E^^AAkk2fD09UE)AskYnM z-1QpLb?31i>)OFYyK(H~x^_6xIMHZ-<=%E?&3j+FAt>$KeSCL2xBJLgJ6b(;|ND-N zHOEHJ9ci@hy_ZX^snJGzi_W%8O*PK@yJt?cZ{Sk=snOn`?>FequiSg2!D!CSG}@(m zj~wGlL*JEjc8kt#IW~F>4}Y{Bj89E9+wR^Yvr|*++R;Q~ccYzIJ;TVdJMTTx&Ng?n zbIl#hgP6pzb?wYVlW{dpoXj5fx$BuKy&JX0q+pmm|t^!O$%x!RdU3+-qe4yhZ;H=}w z#Q8|a#S`ZRT*dr!Y%)I` zuVa2Xu4aBZu3>&UUeEk=yn*@YI5E-KX6&iUWHy7Bfp zxbP+zU@w$9FB>*zwlpOXFL?)KxURjSgW6zG`=+($v%&E0BM34faAO)W7k|BJqA_XX z-OPQ#?u(@XLT29K>AG9=_syQ&b!T(S`AxyFCU-LcV8rvbIR;nEY+2WyoLE1yZC(48 z%iRhEALsU4!HHY6y0N~oSDX(l_nkYpx49Qda|9KEWJMg@5(L9TfOHEYYEiqN+cHSa z)plFExO05=-1=stvF#lFZSB3KvEKL9&d`WE8|`Bf8m;?|ydE~9#^~$enrP|N4hhl% zGMVS{Y>8kw&XjTOblW7;F0x>ZKzz0KJ*vqw2Ok=YCi4btB!W} z$h(;0jx}RUG2V6UJCdgv^kY;VlL;_)$_aY!L{O|36!*0IcOJQS6qVW7Hnslz`d|nK zy{qTj`$zBX`L@;bZPGT~-`p14C)!)a(>ElIk_YaXXm1@q2kD8v&cV_PjSYmZZ?9*F zJ8jA$-vlQj%O-ra9zOHa*oE9dg^1RT&aa$^_s&OB*Fv{~ute0h=9ba16orgU#bex! zY~3=Rz+n%cwvLYpOM*l^lg^~~GU;K@;Fufm^5FXR&G7Tx3tZnvcfrtLdy;$hPqc64 za6oX|4S*Ya(5nfg4o--K+Xn#bJriW!c5!lulRzi$ns_a+EBA6@SMJk2yZP#V-J_ES zbdOFR)IB;mJn=emZ#!r2<}9$Y_e{JV_-jWv^Vg})eYb6Pj$ohaPPKGe=pc4 z>+g&|)$M2fsc!#kwA|+Vd(ofjhL8AD-SEBKdq=0gkJ=~e?h_P(@($nM z_xn@b@UlPE4X;eRUd)7vvASctU6^f0*WLS}L`|=QmLhpa(WCfG5s{HTSNf$|C6^&j zwPF0$`dB>}tB(zj4L9qXC!3`H-l+u7>+iyuGc@}4r-J8$=g*vZ=an;9{x0sPj~L{~ z4#<6J-4q2uiFp6%G7-a4@f2~GT(*##b)`}`?ZR;10iNUz9;oEQY<7S4;Am^3wI~I} zv%U%O(95)$YAtqdWD#sTQ152~eRcn;7DvY?8TRJMvEj|bo9j)E^|8t3WOKNA2EXvk znG5f{qQjXp;gfoQ`_&5EE7OlIYZ<;zBwE?Jxz z$=HnjOqqARxO_ZlPHrBwX$o8RPZJ+*+LVXKG|LOjS-6W|_|A`>d8Y#Y3?T8<)ci+? zBRAbI`}yz62SGm>{?qlK&vEiXHi&XTSc$?}?DtZ!R+@FyYG&GHGW!m={{G6et5gmi zD1hSP(SdSUEbcD?huzjqf6#aKFVoLdYn5}&Rb!0=CSWQB6Cg7POgsSq7$bsahY$uK z=cq#r$?O4+K;VhOzw5KE0=#!BoD&7@(nj8><4YbocjSX?t(wW6?hC4!TJ;ps(o(Tf znyp9u(6pNl0Rv#E)pFA=mlIernKW4Lvi7xX^{nq8^TO5jFx6ULC}bF30+7N;Az_QY zTD4Lx6*KuvK9>c(5x^N9ADo0d_zUK6$z%eU3ui98Je649Mg{y>SdYw9G1EB(kyei4yIab(*Q}h27ZYFQb@ot062o-=45aQ{$a}DlNa&N z8_>r^43vV$V2=dJ20^U~2O$)|vI~(RBues?!mKNoqiHHyj6_P)NXUZ+a*#~^Xn!%x z=lAC&L9BT#sGhx+_DGN}afmXAfDgvPl0%1EL=yJTU@@0d!1i1=fdVe{GD(U{hRH@P zCqM92PZ4`ue>Rit&zvm=nZ77IEBID?moNUu(j9cUZ$X^IzQUktjvtzBR`M03oNlPN~IB6D$>LX??x z`8+92laqx)cDfXpRX|KBW?3dvHjI>uOOWkS?0zW0*d&I^!s{5-4>4CBj zlyI-M=>t5s%DU(XQzM7E7qQJ@qXh`zg1E(hFx$hc7euJhfHO;MB|7)v)`@|>unN6b zs&1BnA__AM)McI8vNF2}0Y6$<;MdF#`zUO!Z4tfFcxm_#S^j#(N~ zQV)wrlsqYD@=vqiAD_{h0T-d@WYqCA-l<%;V5-1A3+6gOS)?er46Z-vDft$X!C|p* z+U286E`J&{WO4!ME*2AX$HZ)OoIM&Nezdhk4TC~>RxP7^=IoU=H5$GI*zY-=;zaNr6^M_op!}+u24K(2}pIjYyk04DpnAd%H@PP zvsoi2W>zTVA);88?@$*}i5byHwwOD6^_@($mO+aNCH7jseOSM@N-`Of_}N|`&sJOm zwoED+-h@B2n{>K~Bb{AsDb~m+DFBaiW%tCny+A^8!bS~l24tM5b?v&@Cf6=3F zzl!jy0Opts{N*;6!Yn+ArbV=e3KxVUML+#I@2R5n+ zD)j6Xx0z}UWHOn-Of1`hTUmSntVZJTGG>Iy=3%p#lcCGm@xvFm^i_&BB(-1hbJ&En zS7zL&5pMZHF5gQFZn~7gRWfQQ9<2niO}yC}l>?I2SKR9IVp{qs!9gGg&QP38$b_}0 ze9cHx0)}bpc2F`h8BjSYrR~@>Sr<{)HW6=t76uCm=k*$$)gGfW8QIt{#D<~Sr4o}Y zNRxPQDL6;Slvh2R4e@hnrDP_h5leXVa-!=iQFx@BL29flq*C?s~Cx>kglpL6w1(LxxBv&ceT_(l#~1=c9e%a zud)jxQkbJx@yM1)D@zM7pn&kv>jtFoNl|BPBS|iqWWvgrxCJdv~=A`3^GfRyjanp&scrX2WyD<}idb#rp-ib5?)@e^d z($vF67KFEvHE3`8Xt?nJJyIdYWRww-e9#?e-Q6o|aE!gckDcagkv6?}GI$ADiKIz% zpY&39G=uJ**8U!xc~Rk!77LhOq+Nle=ps-$1}%(nY6FsfF)1M>Y($@u5@ol(HLlOW zVa3c6Uoi|9CQT>=MJC-3(0$Af;(Sw9T353#cVG6Dad#psRJT{CVwY4arJ_`EK8Vm_ zfvXk++_Y@gO=|=QjY_3!AD55z)xub6?C(g8RA1F1fv>CX%xoOD-1)dyuN3Kr&e9lP9rZBbJveNnYj=B>2v{l`^O_F}UJr1XmEZ<3iSD>-9`=5eAja zDPZ{)tR^s~s3nV--qgCu+GE>h3_+-Qb(Qs9<*0qn6?4Tx-glYrbQyptbt?Ug_S`daz76Z-moNOwr|Y z)x14Cm?i{5&A z7y%`?4qL={Pn6%zT}bR>1)Vxt zsfdk?3gp>%vEXGjh6AWj_uhT&=n<}^;3G}awKWl#`2DBx`?G|E%2{0Mj%vYa&GB%> z8k67>igC2HS&abc*{f)U8qZkBxyNpn8jqvS3I%vZ6nL47DJH2w0Tj2whnipMh&C>z zW~I2mh&$9GAAp}&3=3z$Gq5ZPoW)`y?aJlCG^l4nrBWU%#eAs+qyHYfo%lbltb)D< zW-ne%7+9Eq&)`~C0prGQdp;Gx@>*#`G>Il6Y+K4^W~)&pZ4H;paa5Oq6{l-yYgjUC zL5sLAZ4u9<23f_xuS*hhwH2dI!O&C2k9cWrNQN@1b0`BZQ|z+?<60az$ z=DC2CT{VNw!N+y<@@heFw@xp%6~jDxsM$iwNf~TC#|UrB9Of)qqgdlw!TFxKv?n(C!5|t_*ap z=-(ieE`cMggJYQ{fEo)*X)wtoAwk5DhDaUm{3%c6+YsJiP{MzR@o}}27buiT$N%R5>7W`a!uNIg2xG__f#`k8T zDK6og32H``&G0xEoyi{PvBpN-RO{WYkjWMfqY<1b1f)>EWWKPhzF-<6ljgXj!y)@v_FmWFkh|esjuaJp zjVcKdxiGKvac7V+ox6cPB>`|as0=6+q(g;AS#zC;T^=B1#j%nWJX>_h3xq+P;0+`S zrxIMmAA`5jv?@(?2`n0`(%;T;u~QTb!MiCyeov%Ux5%Ej=U# z<00hZ-9mc|B7l|FTpm~Z$+v|i{6N{`bC8t;+S16%WG*&&knt5rP6p#J|Ho2jlhV8d z(z^6G;y&!9%i3Z9=Y_#(2nHjuoN=>c3c?5wnGVfn%Y+GHe{|e#CO&`m@^>#Buv#r2 z#$afg(&$`*(*`dNG%nOc;yj;8N`TejrV+Q*lz6F-1FWH$wsq>#Qbi&d z135=cS)U9QHhmBGSOUhNkaKGeuAQW0VxRkfhd~49A|j@FTK;56Ktshy==sE>$s+T6hb37x6b+BF4#O+r*clQuJ zQJ`juy_6nDl@L}La(>GEA!9KH!a@`lDC$z?6=hzGg5nE=xJxD0%Spr`?moGX*X$+26vfK53LE>O&EGAn;D;hu1q5Sw-UVnBj%nlob@diFH+X zyIR{FoE>E~XJs*oqQFLw9MKfGjKMLxe7+O8V5b+#Qo5E|3Cj#4*pESarM{ZM*n=&T zCNEXSioGOidZo7P#GmuD-cksYOi48;<+8a__ADlGIg>4;dXNEJKx(ZZ6trJ6tEgnD);9>DRW{)V2*r>_W3RH%9mIM-H zhT2P3PuJ6`n}z)I@ysRfi^WWe{9J{KHA4l4nhFsU5{aVXG;{}2h%y`{1X|c%!0Fm< zU6eA#6wO^-A5*O*&c)>d18HNlhB4a3u(usH*L{?tgK3EkGhj@3#1ke`p=2r=d`_G~ zSf_Hp74x|~Ic20W^@>avBehJ_q83%tQH!o~TrPL~OrOKkcniaY#9^3QKGxqGx0p+$ z-nuY@!iFhI^;{FHC7V$SYms5?iymu6Y|v}%lJr{j_UHlxyCWgkYwu*Lb)DiGU7C&K z1mrY3bz_R(1Sq4xVu>a$Qq&9T$O6u#ULW2_lW&)LeVpJ69u7MY>J?-dWd;b6q6v~( z5Y~)(6*YiG6X!xArCbP2sPqI4c3LNutO^aTwU;Z1AjA|PktyEg-$jIMv}-m|N^t37 zhnBl=P>g4#i>nBC!h!|k;u15EM;T&lgnb5w8gLM^dRxVGxHpbr%r1)yODi$OybO3YWTNUS^LLwBIz6-gHy34fqbyi_~q>0+Z4 zOPD>4A5GkdSQ52BUbA4KC#ppOqymmhEXFn^%IL})U4h(^btaETe-R(_#{@})TEM`J z17TP%KEMxXtX?0i&uwdM)l4JHYb9P+C$)h_x@-tt&&QkaA@p<*Md2dz=oPn#?Qo#! zt6BJrXDe+SXHm>vn7^7OiAE8mvGCuUZ@((lWU@J#5w%8PqYK8s;+am$+_31MmCkt@Wx5x>{V8Uh(mIOUi&r0SeV5CZvZZ{M z=w!y#qD<{1m8 z?N(wA$YPK=X2y|7&`TU;#8rox1#l=Ev6fCfZjnoJ5yWe|fPX73*Q>qgX6W z#{v6mF{I`aPi#o_P*BH^5@;E`2&t<%JsriCztMtfq+(L2_0mynLM=c@x6dV{t7v^y zw$r>+#jLQM=2Df}PHD12#wGDi%fceVW6HsMCu%9z9ki&(CU)%S_1I;%NZKM~6$_Pg zkmyJvtfZ(Z+Jjvs;pN?JZ`}#Zee5#tf^44XJNS;hIwF<_xZ6vLLpcQe#jc&V70tav zb(y3vyFl^5L{flVc#5GUx(n_pyLGL#bdDU2W0W?%XnNtwC*X^EBswb9=qsOKQlg>C zyr=73s>=DR(kBVYcdQ9jF!*FLId)manQF#-f{rCzlqHNL=1(zYG8>GWGGPs06pI-Q zN-=yAi~-4_v-&MxXm#*F1jaI8Y@WKexXy}RfeAet)vGhGkl^0HmVGW)EBh zhr3(5OA*nP?#iQ15tVd*0S#=XVO+8aB$7ojsZ~NMZyW@vGGn`l)gY**7ar2GNa&c0 zjoqys%J=xVF=Yq6=qUA~gHg>H1|C;A6*BJP1xN@SDXfUJJX(YmzdLILufnPGQnb2|H!$1yPu7pRfy7y8p zV3k~mgC0_c8MCoTEZA5Yj_6)&vTsvkQkZ!0sL32^@+z8NBDST_q^a-TSSoZS!7Ah? zSw4N_Lc*~~pB|3gcXb>qCFX0U5;)0Dy{&a?Qhd6PHF2``K}{kIVl$QKpet2NNSq{H zTU5HXBWfb()5`^>;GY9=b|aD|wZ~gGD8X*B4PYyztHfkd<<&`v76`oA+7i`E**`P1 zea~KOn&^!2-H~IxU1zDXjO)kd)bDy(tUhsu7;IM(CvZ^|Ag+jC2M1@7U#u};F=-N~ z*1Cyu&exHfSyW1hX1(37RL2!Hu*I{Aa3H@rQ8{FyqH<)XjZDP+-iMVA;UX@cQHo8# z=Yow;{6v^h#}@%M3sy&gf-7+C(8^ucPS6s#I%c%upFR2U|6LvRzpJApniHo#Z5PW^ z{a?B|%D7Fl{0XmpZYA4LQrUkI|B6c95^3yWZ=qDzv4t0pN@Un7{HbRGiS^8FQ zj+iVr9rTK=-88W-_R)!sUXpvi=Q4Fw2U#PK$sE#(mAQ3Q8{?IlwgE$`uFC6GGDqCGg;zQs>dTxcZpfixnfUPh4S9~iWN#-EG?%8X_361Wc~?HQe`tXh`bRV zCdVLl+RT9?&4xo#E|e_`t2HZHd5QV4nIMMhk}>=-J6@5&ptnwDpPqfh5wC}&z91Il zbE*cD3qsa0_IP*-c~)xfY=H;o>6n_Ag+OJr8-J#mFi)7#S%ziZSz z*t)M)4O#S-D+_W->WI@_W43ZZVW13O0g{m1bO*_Fv;#D3-F$ErlwfBd*qe?am)6PB>6F z(#zr-Rs}^YBCW0E%U|rn_7p)Cj$XYF+ZhZ4;n~7S*N06IGj|+Xu`Vyx1X3?zaA7Y( z%w_#p0_!n`#McN~{31reKp>A4e&W~`^meJb6&U-nbt}F1%v-l2P28O|An7TJs>rZ#*DD8#a0ex*_w z5==va#)~`)*&x|8;@;IdDA{BMN$jJYDG}Q0vVxLXNnH{`(7Sd>E_C$eYK$0z^iIMN zQf<6o3=7ngC`~bjeIZ)(beJCB`&viPciB=QJ9lkHszLzKrLbw4I^1&kP?@nQ>XXz! zb@ThF5LoXDjqW%Nb|yq5O+5g;Bq1b}24sqA2i?n_YB&1@a;GhVoPWVq*r^%{fS$7T zgg%h$cTVao$(-ygt5e`P-HgboHe*V1zdh~dU!a*(I58nBD_PK=#uCOEwlV<+G(acDLuw<@-3FU3}EGXhyldXz;~)HmW+OV7mbdU=$abw&(| z=PA}s%_On)II2%%BbF@?dl+V>i`2jSb9OPYzEyTRwBZa1{_TCXLQ z5PNe+Q4cn!XiEM98;f&z5b0E!J3U&~9b$$gtIzyXXE310O1!yq}{&v=;J=E_l6DWBH5l~R@ZNecO>sKD^6R4laKyI5EYqS*B!URAtJ zjiWLp9JFQwBuXoHa})14b%A~Xc~aAKDwDC zZ>M9VQ(&z6fOrk~(fMu0&RS=mozN51r3E{o);K0Sn(U%>w<{6WEfLlY%3)BZ__0hf z;IyT84-)`&#ZWuqgxIBF`6SXRKMg7|n@zrxFi$q38Ex&Grz?KBgZe&F#aGprffgKh zb`wchmjxp73@j4px!2y!6pw|5@(+}?OKw|&Nzm2Hz??`wXlOK98FITTQioVPU7}7P zDrcgTbJk4w#X)}3R`1TriSDGg`PSL9*V6pb^R(I>(?*(aA{xybAUuI061m`g#kOlQ zM?cw=)at`y|ETAdn^>fi%~E0=v7RL=QKX(FF`3WuI}ubgNz8*;RTijT$2R%epcZU^ zqe|W@YGR>&@A9W~eMPm%%)w*M)~;D9e7I@)%Cm#=bH)-1t9l(KK1gVG(5hGw@_81t zz~!X3I_{(qWU}Zn3@_za#$d%Ekz45lx&}_FS+t|17i{pSsU2XP_DmGdidPif;ld1I zb=9wuR6!cMay~~DD?i!C06R)a+Aj_hnDFUrvT|ond&%dk>cHTvD)k=G6K`dKa*=K` z?PhLkT&#;EU_zQA6ZLWHc)CD7o!1?7ANLe<3w3J9NY$(&C-RaL{36^b*gvUM?Sy?m zRFS=sV%fSSZisO0wq*097cSRyehY!c?nXRJiHVtwU<Pn zJfhHp4}Moiv7|xWgcBI>W`=hvqybb3B)1~PwW72i_c&npv^+r9MxPu3U?~$FW)fk( z6wU%>%z=!pT}x0RM0DtEn_B0Cg7*2m>gJcCGI4Vfq45gN*9}-+-AmxaQ4?DmQ){N; zX#fygH#f9aGi%drW-??Q77fNs@1`kcjQGe4`9j;iEHTrJL%TipxtrOAiM5_ECBUK9 zo%LmD8z~4*1almb(x|PLQvV48#ScbOi9GO@XEN?S_lU>MYQkqk>iCsYd(e!QZkTb1 zH5O+NPiSMPHU2)N#U*dN$QO=>hTULfFUm?Zx>1yo))@(%ShLGNlFcak8FjNQrXKH; zm2Bn2Z%dX6=yVn;SBSsUGQb0|<#gTPoJ!$X?`u2Eb<}XzB~hUT>XNNHlbYi^Lu=0S z=eg4lv-7TvMdBB!)XvzuBVX>uoPNb=qx;eGxf8ouA77eXLPnGQzA_*cIm9k(7(?+? zhysn)%8~111*+@o532RP>g-@pcLPK9f!UEo;n48#&|w{ihL0|0PwnADix(FP&TZUq z)B1H2<7;oc;rcbno{Ni@FSg~$sdaS~1q#@W&#zQmMh(DuezI?K$7bis`J1@wV#5=MmOnx(qQt*Wmz1v(I{eP zMJR?1OR(77EP9G?UA0)4?XNA5s(nFas9KpF4u;&K!J$R7Bf;R}U|`AMz)82HUSD$9 zEm=~ZUK-Sw)bH_>GkNpoP4iJtx=u7nIQ3A^iUdf|hT?{f?6J&S9Zym77okiMfzLj?2MR>~GkJ-%JiBF=-0|rQrDI59u*M(+kP1kG5Xy3kdK~S`M{Rszbrb z>;T(#7s{Y)kS*;>)iR|kDcPl9Y(HW2g9nBv;WZ_`ze4ry&=7k+6ZTVV#n7(n6|GS&1pGpq#>^T^7u>_C zL}(P(HQ5HGvcmM+#cvYRv>nB~FRjXHIeb3Frd$)>`Wh|E6c_@$ZxB<1hR1(duk@#^ z1P{wQ?VL!Zxlj7AJ6U)*3D||vJyvzp-Ih5Q4=h5WDN3PO1qPRCa5@g&BJ`Dat6Qs* zni-4sMbw2v(IHdd-L>6jzM;L0av_FJ?A9tKB>5Q`p<6+xkY$NIaU80zFJ#zj%%U~(ZG|+5gU}q# zYvuq{s8P|jbZ@%n)y3ccP8qxwpn%GyR zOD3JtGA-$+l004^(PwQ(_8ST(GbEg=AIrJ z8l|-n0E}Qsg`0xVs z+>JWPv?MM+kDr^v_j?qGvrNtmOXj4lmso0ZkX!-3CbRt*$fGF{)^T3(Uf69;6%piB zY`^iuV^4)0<{5*G6PYG(wmn}IACq)^Fm7fDCfN)MiB3yIx?H;X_AB8hNlb=%cOFnG zRh61a(vK-^R1OH5zaNQTDmSENFzyIme*06gq>ZtXL}P@S)DEf_BSdwi7Qxest^_p_ zn{#(gy~3vRM`H}JJ|ZI#f*P5F*jRH&Z=~SSjVfW;Y0C#;S8Cv5q_Py<|1bqW>zT(~ zy12ro^UuSG!#gD+4vW&Ki6cD?=7Gf%y>TVhTwR>?hHx3Tdi080JsP(%S$8F^B+&6H zt(jmg8F|(1WN{>3!S%_$;&W#ok493#_pTwX^ioRU{k+-F(SYcnPo-u5cWr@ z{E)KQapqU~r#q~5#BS-<9NS&{om^@ADIzAW>y$5FHm_NupFvPOS87{ACM{@W)+m=G z?uSTy)}`0H>DW1j^Uj-T^^2jwoU_1#UsREaVtc*Rz3aqGHAjLftp61>oS>n_{8C2; zwOiU9);h~pg4Udkk3BTZ^}1~PD~EO_l5aFMuFKFBvOF~`JWUmYu(3JTj=$1kE zlDBX+&XGfe+t}4iX(F#E3b@yW;zK6zlqnKD#93y=gJZRF`Bw9D?Pb(TY_e#E;s@Cp zy<_i{J%q93{t|xo3WhWXCGrm;KfUX#Z5K96UiGM>%eR_;?3Y$Y>7jeuQjCqYWl_yy zzCco)P$}t6ZTjnT-R2~rnEMJ!t9HXwB`sAk%$s2g1;iVQqF#K&8Fd2@$g&cIu*UQp zyczn&p$P+mnc`@BY_!kei(Tnsl(ezWRl?9h*5Xw(<=ApbUL$&R4O!iqWmZEq(U zNTR{9bb)NM)qomd5b_U~umfOOKM&HT> z`mqqp-zn2B^58eWlKtJ3y_i>k$}dbSa}yWJQQJ6t%39ul$qIkqo!2~`VL`lRk)_@k zv}IrF*{DAg$iIjCXW0v|G}u>Vi@NfR7NSugG@u_-$Q@j^OtBj0maSaIpwp4(bfl&e zeIAlg4{2wiZXh?w?rZfi^teK3D(I4LW5fduT+{sHg3xIZn~Kk ztJAZbjN*gF~X{0nu}Q^hv;HPK5j8r~+s>cwiubeX^_6yztk?Qp$@ekJ3?M zP(UKKwS|Fx^T@kSF#>e3(|Guu12zDY6x}6rXu9LAV{DbxM^K?p8+&HTEDx2aW^Xxu z4no@i1^v_fNXxzhRY;p{8jW(8j4gELC(`Kaa$92|W>7DH+y4P`d6j-fepYfcI>Tm+ zHhe3k>I^-Sp-R`;k%^Jcw^x}|VloOw#z=kQR}TbY zA_WKlTdkuHJN`(_d90=Mez@WBa8;O}4Cu=g#pEx|p8VGb^a?jwVYdo9;GvjeE+F@{mpn#|qp=lY_ zYTaRR1mrT-3z2a9MVSnFFs1NqtB*{UT!_YgQII%UWUN3@mhpfl)$c0eH`dv#I^wy!_9An?=SN?&w#rC*NzK|tBACxQd zr6`v!=CNnkb1W>{>Q0u6YttqFs|Ap1ci(E2pT@XZF#sdUzP<_`U~P# zpa6|*`Oilsm6Mk!J|2VpA_C&ag)d3^$&$md;FOX9|BDELG%35TCiC#C;<>~4PuA_m z)_NF$l`iNyO2gUpl8(fQWG=$+kga;bkdAjB)DDWWA{5~;9cK|qgr%%R$z?ISlnBc) zy4gtO9FqL|O3TmQw13gTTyCNKW7=l&9)W)4fpt9nqpVUMl-_9y>bCRg zX42CgnJU?;&y!|8NxHIy4e!iV*1V;q6T8pwBU(vht>1|Ni7U7$X6|1)^2d}w19(7k z4Z7Ux{0i@eaRt4+Eb#QtqX_sW4ZB1DbmwX9$%r0E)X>uY+33*cNhfh}*%?U0rRpO* zcBl!$_T=Y!a+#A=QL+Dh2SGpHmp*X;wL`tH(k9C?G$i}9yQHw|cy+8&UlTD#Ubo&1 ztk7(8Jr9>dpTk;{#T4xalWfl)t)H?4qIOeKS(c4o3;~}dqt+@z{SIHe2ibN6H*~_5 z?NC&qHTUcDma?w-rwiLIfn342pChtyGSfm)2ZfmD!>w`i6P#q{(t&gM9XPT9#!}l~A%a#od$*D}rd_2K+9n3B( zcU??d_Be{BG@XT3k%K84Pm2X48CjZFmuwu-HQ;2nD1Jq<<*~UIw#$sPg(Jy~;mIwW%K7fL^T34-C zeZ@d^lubB?>bcqBmEq8$U~pt;aMq11UOaNxjf^awc8f`GpSFKVe}@z1fUvOu2+6KPMk1vEKq||wze@p9Qqe#u zAVFqgp^E|Of$3GUaas&g=^ylTEHQGglQ-NjK4?i7(YRK&qT{TRTDfg{_HH4eBgGFb zmXy%!UV}Ylm7YqA1ciyp#j9PhGY{hnivMzXa~!0DyRHKzbPCKFSwT{AYcy+B0C^5F z5s>m+7&!ug=^EGgjQhR=N}2X%+*f0pNb$*EKr*D-@W8fWCp2Y`EdKHr1`LuY}cPk1Y({h1cv+j`k^d8xWeB>Z} zLa2-DeYiEaXSB6Q-^hIJ{bH&m$=ESt^*nYqfjMM%38}&-koPo@cYlfTi)}jNS7ngR zz~u2Y^qLf}(QB**%+mWSr4re3MuXzVc+4PC5Eb=l2YbpA0QWq!9g`rM%a;s!MKuSy ze`(5tk-L-!&veFng?V|O(IX@;ooUhenCJRj%P4n}t6Bn<{*j>^{=FoR#Vm4)`AG1< zsJ=){Kk(&eFFVZJV7)7?JY|SFWL?F4?kjR{x2J9>z}5&lSVV=@0=VDRj%r-MU9kLv cB%LYG!qCePI8kGTS_5U&dY5#AL5ET;#06=WNIgI}S6|g3uq9**! zg?t0-8(ny5*zgJ}49oxkXvDXT;eRj(WO19=899D)C*L-IzI)p@bx{cucUM9H0KDqk zhV2{s1pSup=8hJ2-`oKJ0Lcdcz+$9A4@w|PXK@u{9AVb0Ki-& z)~Oq89ZbIMI9CG=r0j znWKZtw;#{9Ey&zAr%%SaJ?ZFd_O0`Ye)|=CqkaW@`RsqQ3jEgo6A-{M02BcB-2k51 zY6*POU`lAAy-()G#tCT55wb)ino*(6(8hJpRG?BE>;nPBF#_N`bnoSAqp*VzZ5Wkp zh#W{Wo4iJ}SMC1CIo_U}`4b6-CyQf34<>mO7xzq;!N% zl&WUwCMIyj<#@9&$b!k$F^?fW{5|#5@uUa#fFvRg5w8BvrsDx%FHv^uO16=SqXw6U zst=PDmx^A@cljEPy|!;FC8>Ni%Do!X?Wl26{lEJ+mRw0TJ(Fuaa@kH#muyb-X$97Y zpmLjpmg2TW)yXcb($bStPc4j+*IDgs&BNNQ7N63-6j_#I(Kmi^?F{37f%X?L)qXEI z*a=7i0OEW8qCmfA7a;S0J%~Pl`M-z({P*bp5vc!X@Lw;Yr7Q;M0|1E8!M>yGdp%D; z+zA1Iy#L0aSO4P(0brilc5`A5OF~#fd&k=t9#q=9I~X2m`&U1B+d6GPZAb;{cNI5- zX%hq;Wo8Xwz)wC3Vc`B`WqYwi8<O^6Psk@o_Ju(fqGx4*5o5xJJcJ!&!!fQl;r8 zxi1)+ruFFR+Gfpeao*P<6g3;iVH@@xsPEm6OStEH_lpn?zE9I8S$4N;EVUQ+L#49| zWE-~4TSQ{$%9>7MXez>1R^ydO+|>n{XY;?*bimw}79@S2SQqKUk*6dAh4VO<+G_6;rzJ-4Y}1}#7Qt^fO- zm>3emz8gOesg5#+7o--X)@Ku?zCei3E$|S=2fhsT(yRVpZ=PgOR3rIkRs93Ng&+d= z9R;4*)#_Fr3*ucFM;B<=@5ph)c5 z8n^#a=)q}LKDs7#n1{Ql>Fl}z*P)84naukgCqCF1$0;EY6g>Kc+|1gtvOv7L?9#gN zx~uRO?>V9pFl+exG9_D?qu{kJkzi{166z*wI&RitL9`$QFAXoQ09P=agE?67U@R`y z7&~!SX>jJ*06m;L;W;1#JdqVb?C%mbfoWTMNEOyLG6x>kiqzDPk|opmaT7n;83Ofs zri<#g+nYKG^Mm=iDGLmWwOGVk3nT(&3Z+Qbf~%2iUeR-QB?ESztTfH#e)Ym*vNl*= zRKg^j_gW)&hjIi;Lt88pl(oCjwpC_1l@)7Q?E1utsuxyTJ*5H=ydJ+uu;VDCqc1#s zwpgM8w=5$cPKyQn4emJBSdtc|jRF|-ELw_0i&P2KZ1b1&C>B}*4X4yYCG=xWZR#td zmyjrLE&lR-{?r-DwK1MUVN=a0;tY=GAWqg!8Ll<8ZP}DZ`a@R@FB+vEDvu!myBM|6X*v7%v!yBCZeu6Qzq;3A zl(OdDnLrEmAM8OJ?X^z19OPe&&#j(Hsr$)C;7}g0FaaZPJTW@Rzwo%Lqa?-=roK?o zDcV3@u@?u^X(I}M-%d%;*Rp1@X^B+c+=}Km7UEB49Sw3SYYRtb79-CxpJYPF74gq( zTVs?U9g;utbfytUjp?WK1Ji?q?Q!5HKINs0Lz|N`DMs_%N}7C&_<5J4N)PThZ)VpDPNs43MhYna8xIzNnW-8(T}0p zlu~XF8lEnt`u*Ib6KD)w&7RJ4(HweBwrWxi8hwq@DD=xziM}8_84u*W7z&lpxT4i? zZr?jXDO6H|jdfW^oP-!I=V~+`_|`*xSNN@m%*4pvlpyuQEH24?{{9QiM<_1L7o#=~ zEfYCvTq}nmkcpg79^{j8*Aw08N1Z47j26*->z$^P=%=fooeOo(N${C{tPk4OZs76y zZS1-{J>gEip6D7}Lv#{(5cKyN;_6N_QGSnKz`ySu-PR&5e$HyQGHP0o)@hqsvhMdj z-KFUn#E?XKD!@RMj+G`L4Im52P?=h8aR&Hlp23A4fPTcNX@(HY_T6dlocv4+)CXZ^ z`>A%BK9-G`G6^xsf~{wgE54FZHfJ-ra00n;574*B0&W{-0fk$}2#w{@4THIWIFm+o zV|b7{>kOEdI&VWKa+jDztxX0o+sl4TKPA2iy>H^_KSCmI#trT{@W-53A0nzJ%ngZr z#}7I~SJWBHEEk%<$rnwRN%mt@TK=7_2Nk|~8h#nV+GpNC+1^;+^$-S>(GUjI(U96c zI*+F}?ReIYEO6$Jjc@Q&*`oF+5Tg1?egphT*rPY^UUI=-o^Zim>KjAj?0c=?%zIDY zh+99MDCYK8*US3ZO3A0zyX6(0(+koY*zw=N^!uy^^7REk^vu5WeRI&&@Z0g)d@?bo z4<}JBq_yHL?QU6C$gF&LO+44T{wbzpy%1)VZoE4BKxrA06jQp&`h%8k&EL^_fu`6Z# zC67V9v-9t%b$rE2l=v?;B69o;j*F%}Y`v3J-L?VE&zl?jegdy9Hy6y*?nWNG3!r-x zvJYKYXVKQ2A#2WlL!|@%0K-E0&xpL<&#nqf3qcsA1yd1S%&$m~fAYk^y#IntG?jmd zzJTYJs%a?ft{iGgdcDa@m}_yynPFY+oR-uHx*bTBJfhiN>fz)CJN^wuw)0{f)KjmsILLWPh`*;;aA4lu zNud%VnEvD#OvQ>6`1|3HB)xVH$^o~AeiJ{^vlytFp^iESqVJXzIqKp-%X|HZKX-0s zl4$nkL2Rhu)0A4lxg8ydAW&@evw`Q$>xhds58e3w;wG#FrfR7G#^*keoEAVr0$!wz z^m-$r2N%5M8yZr#!wTM?2YTBxmcX7%f=eVd@@0P3g)7~g?EUGaaimZ2rD|IDi#7wT z1B#h$7&aAg_oF#M24>7f6PR;Vy`v_h;k*}@9N zy8siCpH>&l36kTDlJG`j+G?zZOqQ*>N8jcgb`-8+97hF;N<}Wsa&iVJC%=@Qn~nKm zEN`~Wqh~gqxm)KmMi#M@8Ag~$HiDBNf*{^`hxQRjR~ZiX`tQ&+5|r!yq?I;;!Hfb5 zJ_rIdEi?$;j2O1jl6YPj)MJ`V@@Dqk0TLXDh=k9wvV?fKOmHG8*|g2n*v28a0YaoWkpLP@Kt5eehEu zB`uG+dK*Q#jF5IW&Fz(Hc2R+s;5|Pg2pp@X`8FJMt02F7x$urXZizW(&hVxX6U$dq z-#C69C7}x=fe2gq9nP7F&@>OKWc7XWF|m8KBnRA9g5YA;){t^dTd!H~x*HcD$5Al0Trq8IowS=d1O$X{7L-&>mbRohB zfJe4evTr<-S5iAeG&5C=(zPXJgVy?|k-hK`CsD`6iT&;-C_cZ31Tvtw8NI!2{ZF&wW$Lp-SDrHI zx=gYO@|zGEfravs^0RV2Ar!JRm0b1D7yd|8CJJyOX4qHXY+;HzlJtT2;I$zNF522C zag>ddR=ATV3~h3YR)+MgLfZyLZeU0^4y8kEMXcpAW8aV8Yr-k>g2)ki1{==_^j#3nMrei1%(0-|s-C1R^{N%lyYgoREM= zP#~5gbX(tA`v_jDP44kSHzZ#fB%i|~jkrkz3*n$`T3kN@!_ImeSLFxx^&Whmb-7?8 zegq@zA9ma!&RaCCP0FZvW~;s(1bFF^^c?@iHFKQq-!6LsVJl7+-*|kw9uqknA+ELc%tmI!a8Pl~4$-hLGV-(V$ zCvas#4;O{dJV5e6ytIOFS%PstxWJWcRY zC(L%i+BO!Vm!W|~@A&-|;AH4RV1v-3c%|D-x#-Uzh4eYD1JpDgHXb9!!U_A*d_okF zz|U8g1}7B>`-!_P?RRTj2+H3~%Dacn9;6Z1G;(PC){^mC_2dzdAR%NT*&3T*DOOhBaRvf>Bx5TK=v@>*96#IOsF?# z4zN)6WBHfAE!Ba2s~#fTW%cZK{K(x2TFdjAI~+5Oorn6-7Pi#sR;SFRIRnb9KvEf} zpxqP|FRM}DD{<;l00X8~GlftD6x zP&|~w0GT`5$hodCjEjTx|;Kz?O*tw`RAF5 zMbFO5yyyiL{$zK`W^Xl%43R|QXCg1x zc9Pe)K)DD;hfE@tgxew{#+Fd$(L%#dA7z@m zqiL|rw*IUd3kX=Sb6+aa+oI`T6VAq}w1o75)Fzjl=4@G}mn&kb%e58tOmV_$Vt(_V zfEi94Oj6boJ+hkGr&`FIBq;>dv|Dn@#Rdn34*iWg z&vSI5@l|a-EIKMKFix})HQv_gUx65V=1YyiC&7Nfi)Zo5wCu7H`%654Fkx}YukqX? zpRA{sfGRw0$JL)=t)r;TMOr2GuFZv^rEw&cY9dX8F2(JH#u!%(DjZ@+3aM5NVWH05t=vLmo*?Ve%B# zbb=IJG6_LR>4k6 zd5M#my@Y(`8pxFL}l`i?EB+I+L@mkcT6f}NFfFa zN{Grd1_n3<0C^+*!j(5$uZx+Z7Tc1k{@|w(f_J*Upw#Wa@=PXg@Xn#j+8|aLBPdZ( zwZ@u9Vk9~lf3Xm=5&oV`bk{AANd#^B7cW~47Soyp6Cj8W`2!peM6+8Vk%q~c45J{9 zYHIHwDXw7@BWTAZJe)gy&hz?~i-MDuqskyaj4SYXDRTl|)|3I{y{2lT)=Pdr{&#*3 z4?nHHmS`>ket-nh0a73ADJuw*Oo=37$fRM8ZPX|WlIqOJ@dVM|jxf2UBv8{uQ0=Ha zD2xMn+q32d16^L+C?hYqvGqppdGX-_=shdHE+>}_QL+5ld@U8Um)aF=C8)taz^T;H=y!gn5Zf`k_~}Owctm5?9bJS_Zpqqg5`ttP6|IS4j1QOg;FN${p4+ zfRO27kTi%=1}t(E{nd}VrcsmQG|iXF+~Vu;EM%!A(%8MNRK-!*mooAYTG*AeeDh1ME1+?`DcxzvSUtJJk#X(;>erY8FnsU8k1G?9=FvF+UlfzA#o% z{0B)pdby)H-(@sjRXVFZ^2}3ZV*Z8za;6~H4*RvYI#~0}BO8nhkaVRSs#l1lv&ACJ z!~e4`7iuoq3mTJI{hBk-0JUN1CWwgt>ih}WWQY*c^Y6SwfmCp zrQ|fhnR$W9?sLI{)f#z;kCXD;fAL-IVyx*3wK9$FA*6C7f5mitl^f}+hAi&&)05ei;GQ!bO z@`2CJhQdhGfA>1x7DRuka7Nc!EqR&SF=j!A8 z=qv_I=MtX;u9A;3Lf$C@%JFkLwW7&6YYnJ8oq+$vej9@S*ixP&sKFDrV~H;(kQSq{$KS;If=UJnRtj zYqzJ>F2WU`Jnpb)e{<9JEe~xEnwo9Mw)jq){N}o(2 z{TaYw*dLlRNu%q{hCe8AR?IKp&ts+qPVn5LsaqCJ>sV$-?X8*ngel2@)MWye<7xsb zCN3K=`&wrK7H zE~;-_9pq)!lHEFt97jEV0d6i49H5iFAhwH1H&_&1k4i0%ZFZnOL*1TUpEAlh1ap`= zsr(N{dnR5Is&*|AE2>#rz}4zIxlN)cRI3Ij_pF|4{OZZTjGU`NG6qd;8aOt_n2)n) zD;l0{j*eH{!yQbceTo7Bus$m8^>f~nAy{MFxupZrU?z6c?V}^ue>1cbBcYQnnrf{y z@c~cXN%M`rP2{3l)bzCf)-?CmVf4EblnM;~kd>!mxeN2J2)Fb$Vo(9oviobz7QRt; zhW_VM_!^``nw-#lf%Y=!_B0@NVR+MJ;B}h*W^lYXaAsAvWf#PM$K5Y;J5`oaKn3wm zG?3RSrA%CGzR6u%JTS08r_M*GuIFZ#g$d^=w~6@~qo^MeGm4M=jL4HWe%7!3JqrtF zBr>XAf(^;)rY{YHh$52i#WW*SRS*fTT)tVxWlA9q*Lpqg2u|SFm=pbgil&XE*g?r0 z*!bg6wBWestS^u?>2?OB_$aiD3WN=1u>urZNIUSomxDqgr-c&hzEL<~I~TJUE~W>` zU7K3X4Qk2QY81Uv-8Np!U&X6eZt7Z>e*1X4W>g(FRrEq$hvi6^hPqEfCCli8+=Z4` zJMwAb>1@-CvY0@c6@|S53^B-V$(HJht`#i?xvggKV*-*aP^~pJh>qt`u@ieOZ6eLK zC#xx=rEH{%42Nq)u>EiLEEM!1RtpT3N|32N8i43WFE6= z%WVgH5m<@z@CP$RGgU*D9w!cj%;ajP!Pf+b@6OX|XQTS3dc!89jAQBiR3VybycH+v zbNXcUlzz+-2u+a^8oE->lVqRgYFGH+C!V!=7ZOG& zsyZSRB>jLpaHSK|Bqc1Az7$hD%3r*r7^q_}!o(RG4Ju`ckpOv&cI|mFwFrVV0a@40 zt5sHUSYLlu`L&cxaArm0NVjneo!{vYt8xxp=XdUY=mH^vvP0w!U43!IQwW+%o6Ns& ztEI3xe3)QN!f90OvA|mhH9~$Glj5+tm5VkeX_xnSl&T_H{mU=^-Uc^;ykeZLf1W3% z{61`K{C&xo0^m?0M(eNnU`&|<$%YG}DAZ%^>|yzIQ>nq$cKZ9r(^&9wz;7>z2NcHa z*5bcNl}pFfAV=NCrbAhC*gIt+*wbeHb(HW{;~&I-JU3W8bsK)bf$% za$)3U=c^a-5bL&jD{P@=p|zx z-5Ow(c6%kc-@r+%LY1L05YY0JWfCk~ozZ z30C{wn2cjP4;HQqIyNfiAT77>;x6Jer|=@GCASLA0HCv<5j>K7T8b`!*u=%wL~Fzy zH4(vfBynv?#Pw3;X`nwuXFqM+;NpNfG=f8Hd~MRA_#iOCxV#HGxIO`)9A_|daZ0ih zr=ZyC12+Q>k8x&VYJEV+_ddnh>kb@DTmC!)dR@<8{J3&b>W97QpT^sXyDoA}#bXdz zlzi(P-U?&`7F^lyt+}ti<$U;2G~+X7=D5?A^U1P(RS-d%OFZgb8f(3Xys}86SMwwc zv`q79$xz%#iXjEJH&dUoeiil?o*u8C-Q#tW5S_b_S@gYTjFFC<;@sSj$?8ugIj}|D zFH}ZzKYUMP{G!$Tr4P{*Su4)IfFFaqGH;bq0i}}gUvF+UO2onpFnVhF zEPbT|&`kj%JVN}hRX<3CyQeZY5#&3Yw3*J(qe34(F7Gt@c3z|oW+VvYod{$xYZyYY zNae0emL0R*mE?IKGm7-g;=?<0QVe|Oh)pLHzF2VmXF=Lc##O@NPZjZ682TCf&o~ZO z+etDyAL=_^jI`&;q-93v1oEwTvNJ!)sckbU$J-}LxB4~fHrMdHSEuW71;nrx=_d0% zIu1?O!c)|Y?A1N*C&||{(&G$-@82-=36L`=UYqTV%6Q_y%(||Uth0T|`QlkHA1hG& zNOOJura((x0A1|M$rnyBrXbR`{aRPR6z zXFr|~rn3K(n{|n^RqF2Bjc|O1k!Yk~m)>;=pSIq~k6yOb9aiXe_(%IR0FkaM5FxY; z_fDuI&z+G;Y<2DzOm`d3UY23~t7HU=ne2s0uYedu&X@Fvvdvo)OXRaC4t>wVu})qn z#HeX<=zDiWoS>QV#iWbW@A4Vi_UzwEpZ2Bsg{r@fHxeo20dFjtUBft^sLNNzvMW)R z15y^ZE9Ber65=4@Gy{Ck;Iqi0EJxu&WmaSM1tx=}bC>>E7a|2irs+bK=x0%V6*LTQ z?!%4Y9LX|!5M$Ljyd+a8AZWZF8>TgGZ0U= zw|o)rM?E5fBw2_V@(q1R)IA?qw+N_@Mvw7zSNetGk_cUprV#&tB)5X1;ukQ(>bw z#V@P(j7+%xHmGJgtFK{gN^Ef~Swl!M00^oAK_9tl`fr#7Y}Y?UMHZjRv2McwKuhT(RoTdN&NMt9)?C{=(ho+pf+J!qW}Pw9h9#-y z6Y~7=t=!3Id;Zf2;i~V*O^%hZ_GQ!*=&L;sE|TNYB-q^8j3Fk{_rF}y(Eog#O4EN| zhMU>o!Q{wWBUSV8h=~j$Wv4)|9meJOB1Iy&k4{Yde7vH{-^S0pZh0|0M(~@FK*D8K zt$GOiML3G3dd9GZINk0l`HG~ZLP#%uPNZNV{vOhQLVlQIEDAUjC3P{3X)}bAk8v*qJR-+s|3sPkdZ}JoVT}Fb zhK&+`tiHVvk4@D)gB6Zl>pu`NZp>>#N=5^2MDPsTiRH~wM&^oFyu^?7GOCZ)ObJ(p zNcoq z19P{bSo+|R)=tAiJgUH|;N(b>9odNF&3c>o2c-nUIYrs0lDSFZ_9qemrpMIu44s62y3!4b+_Cv% zOt%Pxx2<}fu;2J}n$)uKIAI9Tb2S-nc9z+7vxaIihxkhJV6p&5Tp%wO!Av2BtrRWE zRs6XBzW9g^<1*Q3H(1#^0bnX?J?gX4^29oBc*lcIm6tX>L~Tcz?% z>xjdl1~)faoK-d=;M-cYyP`t56Xg%WZk@2On*o}=-DAzT?_}|8*rCQg&R63UDe3VZ z(0eLS70VxlBQY!gSw0v%dI`=^>=fU;sa>P+}NcT=~pWyH*FHV)75$$}U-o+Vf zs7!cG0Y`8;)}#zjSZ&f%TPWx04SVqzUwKzoNTcdYAB!xlUr}8Z*%%5j2VUt!~9bJs=br|uFE(xnFZ;Nn!r?DHLj4KLfK+uSs zT$iH}gqt$2_=LRp`0lDktsi{$g6?id&!nz*WNqnnT~=G_3Ni4 z90#Sy%@)iQICJq?PO~XAl!kfwsXd!IE&2|X#|;LiBXUxWjrgF540F8fmx^8?=(~<`y+(Odi_@C$P#yMujgS;? z-8M7S?+DAWUaN7ix0jZ!_VzmmtRC=;mEPgV5>+AS2VS9^UYY2TRVdKy*dHRKmU?R+ z)&$Zy(9stZ1U*=(Z_NtPch(-L_j_KDm2NmEM?issdF7XQOsUnKf1`+wASUWZY4xN z&E~UEjCnoSEaGP>Dm}&zg~T5W3FCX6(MJiO9GPn-h37z^x<39^shY8F-M0<4 zRS4Da?6h&%_~F<$8ob^Qtr;4imJS#4NTU7LwZ`SWNQGfh!sDDay^4a4#tUJ__LmWq zhJwgiUJM(>+Zk`jgufB6lyg- z%#Rd*ut^gQaYJ_-L1x_&Kw-fj_FOT=|2@1sa5S;J&@8Z zFwsMckwB6~wua1~^dubg{>?XTGs##xea)4k}*$k`JS5uBQr6ji=69zgos+fzl(R_#c)E`K(_UV!lCO0^QYq-(+ z*N-{b^n(|Y3!(~8IoK+BOUlCzcIBx4q&)5t?DK=AnvJ$moux-rn}q{T3N;`3v_kt3 z-Du&cDU0Ary=WBuIt~}`(#8)DQts$LxJmCHrAO$TqMN8A1T7Bqn}76G;|7?%l9urt z?E8xne7>gFo~Z0sShXZm5uOvSn_fht>%UO^Kabh;Ql346G)7-jqa4y0K#hFdW=-KP zw<5-Sy{#J(lFhU8(V1Q*C}dncNk5fd>S|Y575jBX6w}Zl0b1O}z#JJuo1CkU1WD8? z8pqJ>&sf}a){*r0;SAQRXW2Y`lPAleYP`bjUK)f|}Sr zt%Qa@0viho4zPBD^G^a$#uM-PzOJaGBxMhb3P*R?Bx35r170JufXL(RKZO;Fx4-}3 zgIw4^jy~rXrG%0Tw|yQUK!4`Onv_$J{`#8e8JL74*#YBCHjl6nF8HhXH?}x3>eSPm z{Kk*cWw*tR8Lm^}Ts@WGuV?|L(U*Mcxb0(;O3u=9gNg}ZbdW9BjFn(hT-C8VqW1_7 zgfdkf{3K@m<7p^i%OXQVNZiXBS#S{R8n(w1VPLVQh1gEu>EBVb1b;lKS1&hy7lAXXy1i2ijAkGGIi|dFjR8j?lZ4D7&+_<=ef&x zC<_nSW^s}G-k~3KT3nEY!S}k51G$aicnSWz?RFJhDvK|^{Ct6xtcC29tllH~g{z2q zdjG)3{Qz3G;0kFHen*$Qmk<*jHI63yoEk^*sIORt6Ui1nY;WxQs8&zn*ZD3*8mw8t zsQ8>Y*p+-}$+%+Lx^rsW@1%zj?8h`WxJ2_qZvbX{y%qDpcD#Rge$LG6bbhFT0myL)CLFeqKc!dLFRm=%*7*B9@Mh){zrj z+%KaAG5uo-Dmb)vT8z8qtOpq_92!N{hdy!W$vt_^IgA6Ya#+seX!M!1`~#6H&qA?L#I)V){9(v&oV4j6(P z3YJ~2-e^Bv91d<`gnr)uUO&qp{B?on89d0Ww3Ms$py*K^Q5E?)kaIM-KMgrPAZ2zP zRl5ZC_`HOvW;QP4Q`xy?0HXUfawq_9aBzy%l?=rz^`lmdI$#HOu-M?Y=smZT12K2I zY-bJ{QMXYlL)Q6V$JRxJ&AyF|a8>Lw1~6=cv^P$o&05ppjjQPvTLjENqVt(~c>F$8 zq1|DjXC%TK5zPo z^j|MTZjuj%CpwVP_Y8LkfOkE)4>;|4p*g&zOsB*J&Cv+ zZOGhKv&=B|IsDU~n4O)217UD@_(;>%-gevf^Ti^s+x>DJ{VKc8@8|_H4+@sQ^MjT% z%Vxlakni1Zefv0I#r3ktd{BIc^xxSpiuhPZ)-)7D%ii%=>m0m|i0eN(*e_;|)b4FCZV+`|Wo z2m;}9)*N0z!WjxFhpS<43c+1?<#8rb7fFM!q7%Mt-|ubOc*wUiUq6Uy7|swon~6v~ zJl8g@(MMi@4u+Rhw%ChV$M?|OsF3Kf1POGDjJhl2x)b%iho^cdurTFEE(yj@{)^%o z3JO>b3P!u@G(`h{#PrWnt$!X?pJ{wnqcK9s^H9r$R?Ssfp`+H?u05X%r7TcKpCajR zW#(5LmRFdT_GiQnuZG|){m@FC&N~_C8TV5Pk$eU?w$zIv5fsS(wg$M?;Oq=zXqN;W zD;S_7ukC-O-Fy-H*nPzhFuNJi^4C&wB1ZuGc=LV0Q~aO*)#f2KWjvS=z+LWIS!~&x zH%CVGI#TT|*w{(;g-9y-b%QsP0n{``!}<8b^MjUb<2nRd4-&~*lPGc?avSMqesTT0 z{=MNA*iu%E?H*bvqIdOy2?Bly^@xxKaN&nbL%!Lpl-Fjv))#X%;~d4fw)=TzgUmQN z@RV<~!Ffqkcf4bWs$@!+6PZK55fDEMW@fQAuGVtf+~WL&xK;61_J29Z-=$3eK;~`! zfB_=!0|4y*s+|@o2p|7@yy*Tn>3#V#3hd;6Jk)n>+5ZX1e-%;x4Z%*{m;X2ZX8u32 z_FY%w*RMDM0H0*AjIyaWbmg*M6{_O-eaYeTDcX{(+-Wm+Q6SEVRP>37LM|@%o%95j zxvkCW29)%1#nIR#nphz|74o3y_?ms#{fn9vm+#J!D#A#q@X-vq??vb}>>Oqwn5a#t z2Nwi5S9@*w{oCsVt+yamv7z5meSAnlVAVV-k$UvA!Bu4y& zc!C6r#D?UFG=L0;tc+Zbe1qbQ(v3=vT7r6nW`eeh&X4{FLmXoolN-|wvk3DL3l}R8 zs~4LUI|BPJjv-D8&H^p~mkZYrHy8H+j{?sMuLK_jp9|jsKL>y42h9)TA5#Rl1P%oI zgsOxSL`Xy;MBYSoL|epo#J0q##685HB;q7dB-5l=r0S&0WI!@qvU+k9a%u7q@(l_E zicpGLN=C{Os_%3fs$ObR>HzA0GoDYpJ zgzuU^M1W2}N+3$0SYSrrQ;=3rLoi0LRd8PjS%^o-N+?ojKy zL4Xn<`g>*D;4%Kom-oz$O_Y-c6G95@Wl}1P#uLPxH)W1P zb`vg*J#peqrBT?$_R(V()dMQaK2>Vy)%rnNI*P;=^TTyfxFA!|-eBLN$?+4{)Q{*4 zx}{=E@J{h+AkWl|st?K$wGB;#UDT1&NMSQ2T!(5rz_+dFMNFX!l*+`TdSw`sS^V^% zn`tC+4^_G4QW%H12<=L=LgU?EO;O&kE!_39X094PnY#@J0{Y0EW<3XhpM>vrM3DayCo0yNzE)zV?(<1rG?E%FqiCu zW2BKAT5BhZ(k|L0$CpWO0(M=Z;=_=ynYz>37bL4!>-oD5aZ1B>2?7mj_u7Eo&Y_^h zEV_XMx(RbUX=$EW2BJ7%{LD~P=V8TsU;%#9F*#wrB5-4?0m>ejK!^KTN z7wjVcoj2zW*BApAit2H1GVyj=I5-T-;{5bAJ(ZJW`GC7+Z7?%F-}0Dj+Q*(kj@#VQ zNX_$v+KTIfUVMJ4td@EA$4#sMr2Ce<1m4nuOSkEHb$pL~n^m07>*+Nr7%!V*Zu^mr zVXiZrFU1a{(f}XRA7UmMTK0L$BJ{Ru;Sy>m6SP-WXl$G8+L+cwXByhZ73mS5qfnSA z*`_hl${SgBmMyEYk??Gwv&iQ=x|IkKHO4dhWeq75O(hXr1erV#1*n zcPO`FuTzTZrsaA1Ap~$YGN^K)%$7gwufrHwcFohS@dw}!LHC3M?1-E7TZ&Jc9vrHg zs)|U|l+o%T7+v^Mw|DIs8SNj|F^jAJ{9W#>CxM3}CUYJVq)ET@RL140=j z1L6V4AaJo)b6Soz!ae|jLaR^e*alT#;WfxATcI!iJA~+Lvp~B00Se57Ljn41ecT| uMdEZMbM|z`a+Yjtys^AAeBbE^Eb$;g4W2MxMq`J>!~{Ux)5d+jfiWA% zkyQs`#2w(^k|t7&LtnP5u~7Ga}~g%%&4oLHo)e8)2d1mm{H){{g{w8ACK;(L#8K3{QqC0-S_@{ zu`$`dmNqXI8a{~4ISk@|E0Iu$ja2cFD20rj&4;L_<@DqYlJ5Q;5(6qO#0&s1q_)sj z`OzCvru7renUG~r8@dc#M&ist=p?~aqE1u^Ks4@`YEu8&p@9ZK&d9E_(b*)`)U3`b zB-cWrij~hH`cd!+!f7^%C9V4PbOy{HF!KLrs#RK500>ay$Tcpqd`s=_`5=)!XEOhC z6I}-WUtPtnLN~;Q699oa0-_u!%3!25)as$S8&nh0Jkmd|b6Ddzy7Q5i8gabQ8D}$Z zvb!vr$EQ~tm>4lKvHfrgjY+gYb|Qv?yQ&A9h00>apoJO7Gn%oOW-5fRrUFtL zr(F>Z8WBfhsCnZ`1OfcEP{LGGfl)g%Q$thXCb#k@(wISgDzh8nV-0woF+D^){%b<|Z) z3r#iCTrKT&(NQPebat4o1{+|YL5ApQs2JU?VKrOW%4RD6F~0L%8E8H_J=NOwr|9i9 zI@G7X8T}Cq#pf$H-?qB_sXzz=QdL z?5l((E)YVx4G1DSOR}lOV@t`#A^7b$nfav24EsdyphwrpYsyC0eCoAm_3=D-eErO|o^WV3 z4?9eIlA2m^W8IFjA*nmm<@m*nF*QvQn2-QW?2$HppFHwf={mHuWza5?G~&Yj#VkWM zX@W{XEQ%TF9M@f75Tqw*u+=hbgORy;EBs=ZXFbioT14c@XlRhg)gt!Nwl8ea4Rc=y zmip(>sBvh+FKvB~sYHv#hsW%Ku-Mro92TVMfMLsZ&!A+u5_q7&%}A;a%Er1cv$&5e zSMx`0_;OCmcL8M-8<9pN7N-UV#DKv#V)`sun1#IG0>t$$Nf7;ph<<+u#OKUw8EBWD|!-n*I}w5<(cbJSj1k#SfNB?v`tILEN%jw+qokWfIxKWU`epvW+QZ zJ9Cj8%uRMO581`M<5?r--;}P&(zX{=q$?XGU8A{9Nj3gxM=NQ@AOE19z#M@Qg|sft0MTYm>Svwu(aQBY!zeRF@4Du3MvGa09np^)ExC z!D=LH6anq`3H5IP!0>_GE|uZ+Nq)c73~CHUzMl~Mm&meis>!iz^qC-ugKux$G)01H zprQ()Z;zu3`Qttj#}oX%3b5(ddu9*{1Svu#*RYEJNQNPWuYAXtk0W*MZ7X zjJXVT&cZ3r7cp>sTNYE|;%@H_RuF}XR{`Iti)G&5H{u6lrsX|HgkM)DgGU{zQW##d zTs!amrkm>crMZmIoS*iFVXHmxsRP4yJ8LVr*$Q*3&uL_$Vqubq98?#jrdY}8y06CW z+?IaI&=e0dmNkX?{hwmszMu{Gs*kVbwn{ikK?kg4G>%r=9QIgEuLUisrIDOG-IrP4 z=w5?8JsP)Dwbq{OKYG9vP(JxLIGT0&PkeHQQ1@8VtkJ;59O z!Mc$j6GVPW5c#&?EF!yhmThd-P4bN8eh6 zyh{*ypP+L-*k8R&y0mWL+Vm_}a%%nadHi#3iwI&i;{d=D067Zs6PzmG@*OY%5vX%u zo>Nr#KVUgVQK3w8LbT>sLn2{|o~x3mN^X-aOSl_3v#K&`47`krBqo9iCO92 zAA5Jvu5|;)9RwhCm%Nfjrl6WoVJfphbZ}^?^~4>$VyXkwT?vGSYe<8r&!aZjcCcx9 z(0EFw@;$S9?`ihrFUw(@Y1_%nLe3xDF*!Z|=zE){Sv&t25yTLvXWG5Y_WtSPUk+{Mpn~c>>rI_K;F9=o z{$vRe0v1e$pW%7a`sZbdf=kfZ1%rh^m@}b8r^8n#jwNrn25Su3nW`wZIxa&w3vx|g z2K`7D@Di53swyUZ{Eor-iMIx;F=aTO6Fn!c;Cv>Hb%PB~d^;o^TH~g*obGsDq)9ao zAW@^BjOcQ}vBG_z&TE`cy-f3)hWHh5+zf=ennzaBYES&H!MDi{BMONI!)Fh{^0uqk zZY9aE?sd?>(N4~{3gT;f4#wR& zBt|quZDCPmu9_A5?ZE{NLMt0e?%M$4sC14$1j#3X^PmQdI_GsfO1?5K`t{;-_l`GVIqi_yP_9OvdwTKZPM zGmokkr`+ehp=bs}w3u9jA?cCa0#w1b;LTZ>^pb*S3AHw|%di0Bpi|~0m8b|o;%&bo zPDXR%C4+aS!W+QAGpMcnWYr1U1)vHRXh$qdft)nJu36Te3(?MO62mI$Zo(#!p66sU z>UI36RR^g?)q?XiH=%xrV`jj$K1w;;CTf4Chj|ll@h%EUvc?6soRyeR#9WI=x|SnKw)ElRG*)E*VD z3@=eo?Mg+M$SKEoWOr|5NPK09_yS?9GLT9Vivh8AvbwlhOuAB7MkCFIA{O#txXO;_ zu>fzZ>8SH2(uQ*_;RvW324=Ot@IZ@B`#@HQ1BqB7(>_}A5-f->gU)GlDg-1rgc7{Q z+;#lMxJP%-aYf}l{Av+^0`oPq{68-rW230GPArP-!|>9=0>G%Kv0;X5cITkT$Xa=Z zLtW0{Hg(Ft^0^cn;gW$P0^LtqyLZ~bPxcz@g&Ap^3RO|>AgUEQPN=y(2%*#!)w*J5 zi8CCUR;=j3E!ZNrcZkzDMDDPB_(ZYG981}%xC<(8AJ0sxnim(4J6o9IF>j2H~<7fdHD+i&FH z72EJY#~prJ9^-+BJa`|>0*&UaCh`IU$}W6~spSj%o?ze$vmo=amHBjl@Hd(k{{ZLh z!0v)t1_lbm4nTjrm2YTmNQ+YOxRzv3Y{kfZn6ENwA$0HJ7UjDPjNVh-*a?>i!i{i< zdh4Aw)H-SB&=q*(xEKf$!kXIx$JbH_`mA`B?`0vZE!^Xa6S^+iWhx%}ml8A^XydDpZOU?XgfTmGW z-Ai$|h_A4;6r$~VhhPVfIyBJ9g3>uX#Z#urx2qkq7X@Y8t{AJK>w|6tDwo^ChS|zwgJL?d-}JQ*Bo>Ao3|&h&$rGhm zmUodHrtr2cZOv1eVB;K*W_hpe!d`7^HW%(i0=5uWd_gLa2gQ8XKt!sBi+%`@#~T*= z!EpLG3u79EM1AaXD}q>ZY=n8zf0i0>`mnm2mmL&M33%wrZ9f!q?A{nzyv+ds#QtEQ$ylozK72wo}bFz&(? zmD;~$Ax(-yQF4c`lJJK3(136~H)mGnzo#9<0fxpVpI!LQ#H(8y`&%W*=zbqM1il+_dtVKEcBvRbjmD`NMma6c&?5CP4Zt-k}6%@9jszpccZ z-&s7S5Yn8Z3;0R)$`Lyq#si9AbJ+kOT$~Eh2zq)A8#UUpys7ZijeTitQoQaid;ZCg zGn&uGX2?eGO@4v%h3Jn(JM379Y*9PoB6=l%OR}M`pJnyd zs&_<4dO?tD-=hsq@p0d%gdqiopcat;W@b2F0C z+DR6LIw}MkzH*WmjWJzV4^Ha7cweq5Nt?O;Y`2Kna)pGD+M6*t zJFFXEWK7qAAsIw%mwdg@6cr5 z4Zy-ZyVGSAEq`3JHb#_uOL6viXBp43hwaU2qALfqZkGI;J0=TvjDydjmKfuBGeJ{} zwfRCEUApiXmwzBy3*M*e7_Ha;`J}ZdR%EYx^JA_}SAgs)9HelN)NVdUN1O?&VPkd% zVJf7x!dpOq$kb@17`*_B8I^Qy2^L4c>SZo@i!PCwc%?JJMVB$i^ivuy>iV#eTOu;5 zWU2JXF+Oyv<+WS`ZFtRD<&cy0O>Xfy#Xi{5&m$geESxCd!D#e1!Il5inHIW_3WwQv z|Jq3~40#jDeH>a{$%dWA5OoIh*AAzqUNf1z^!jRfbAFDRJ}WEDI2VoVLq~xmN0f{4 zEQ@ZBbMeamrZIxXsj)ObgzKN@PU8jDeWl?lNQ9Lul5=_AcSNWqzVmy-A#RB(__PyP zHL=X4@MprF7y8OeGW+n`c2m!Us2cg!a)M%n$5nP4!6jefog6(O+p8UR#|uI(1bI<$mgL}{3AKG5M_6?+UC(br& zD!v|DsLNVeZI=|ic9UCTq4|Vy&rxHScYW}Pk<-=mzn}K=8>0AsRKAkpcg_EfzsLW7 zXG=c!S zpIZh0Ai)$?tmm6rFQ0ej5j&mKo25ger`(4N!mD6FKq=_PHm&*AaKEnC#b&%Sm@oXK zyGN$yJ+%qb`?=foUrea#vv!zw^sKw{>0G|N`&}~(=(K{48!JvLZVHl!oA7WV$`ZrT zb>sT7dY#&4x9eH~${t%>%EdnE9+CT)ooJnK;eIB`_sK)+!AtQB>s9u?AibYSTe{kD zq3hB=Y(!}>ZgvtPZ0`Ust8+=4OlMrA+Ht*?&Y{KngtgKeV3)seA-5_po}V*ci2tSX zA=K5AK_KV*^4R_G!a=Tnu&Z0LKg)#hf#engw`S|zd`RBiyOW`%gN_8R)WLDsM)sCl zSCx&)c#%lW*t`Jv9vSR@(HxCrdc9De0OhR$IIhDz#G#()Y3XcRM>-ZE0@Xl8eSYk~JJR(L^2Pn)&V<%6G7^+jQo5=a@~r+2TF`$kg;ixvUFVAe zBIl|1`L%iO$MH4pLKQ!bh9)lgP@>5XKojXO%1DSYM)pqH?nAq%7J)itp3oC2Y~2~Soh*9*t)i>7ds7J$La#peD7AybLMIv10rV0Z zH%9M4zRw0I*)LgUG3f$!HP> zgotm*O&KD4GSp%y@gCzPH!mzeYeqzOFfH7pZMvJvEXUBi0DzjXyIi06>U52dT!kmV z!dWa3S5~|17t?(K44Y}T9v1V1!zW$BZbnC9wv`0{dMf~|j8!PBA9p{uU9G88?h~W8 zK#x~AiMN7YsE)WRq8UEe{2W{-Pm6HwN^TYL#kMNjxUF1)#2MtU&F z0fX(=@|0u6MnQEvGS>!iNM$aH}`Fnir=! zYP(uwhK0V`Y}E%xQM53O8eq#^T(MW`(fUY&T3829+&W6Jd@O-G;`@~O2k^<~qWIaT zV`_3s^7P}WCpfwDQK3TUgfU4;wv1oX@NJ+a@8{^Thl#kjC*6(ay-Vy9P$r1uyT&65 zhbG7EtMV%WoRP zT6{t#q=pQOP~Si!u!!QKM6*C%tR!XaqsOwg-{|;YSmXUt@ z3DEc0n?(>%G!kkUrwKh=X_HyEkEJ0!(YMb6`*|n6}yZ`9367G#yG< zoF_C3=NpF64U#7p#TW4UQgpt?&=L-x)#8jX9WW`#51Xu-_aHf6OnZ^k$0W2&NT-2qf&c@< zmY>wZ@Z=>;B$}l*1hkrtZC#a`Hcx3)+kz`ncz%!aV-8^_PtL~d?fE7vEc6X#otSta zsS)VaquQRWec0d<$c3_6v93Im|LttBHGW@{6HJoH z=-XDs`NuIBPj^RM%r24e>iwzlQwfd|TqYJ0YI@ITv*HXdySSS~zO6j$apn~ZS!;f` z^t%^1ER+Pfehfy5t?1Ta>n=7~VIkR_T`IF9c~9^PS5{_AB!^r}$|%kMSmJ#LgjB_x z_zgRN#nfdb5V<{gE%KaCR-?^nS0r0Nw!ag?jgt}wB4a%4kiV!X;}Ttm$x0*@Cbo}A zH7I($khca#QZxy!YEGjyzTi)l&bd;-QT8~}N;AwHN$rm?8r9gQ5OHs6na6fu{hN>6 zN>+rHMm2APw?(n+IUiVS3}|trf_k-M=g&)?^MTgod7t@wmc<0@>8n@=uMQ@)Czeq> z9Y7?CK~bDb2tsh8wSsGb#hOPsMCxobp;wX0gwWVn^2VOOM4G>cUh|D(t6@C0a1)3g zy;TaVG&32IF(g+Y1|bd+@s$gLbW!xH3)HZEj%9^2$8 zL97RFJpD;d?1L+iDuzwJX=Zvu7h=tqOR#Rj2p2ah2MS} zlyx^8Zl}M}>{`}$qd6s|yDHuBgow&s0@d2bUYgHqllLMvq{**eyXfJcLIw->_PTf1 z)w3 zzz;mA3)u_mwyE{ia~m%@+?&L`czxL8Ilt|{Ur09q&_@n5_@_m<^&Ncw`X3;K8+4u| z5ve&vy9iv&mh?7UN*0q1o$JSPUl8?@mr7XI`vxpHJF8C=v46-+mh3mmw2Qy~n?ChN z%Hv$S(TeE?*k3=nPa|5?!JLfyE4q7kzsA#0p!!!Y;Z|D?Li8g~u!@j?8d1Nj6x^hy zJD;yX$08M|^oBYn;IxtL!AYfL1%pI11;(kMX%)67kUYN0#6c5Orh0?a)^NDkH}Gai zD4fcmsNnj})i>q-5Jop;+T*)R_W_c6});6K@cK-N^Ak64s2$C2TO9VH(8)d4|8ghs9SEYtM39ku}WAX8w?a!TEU!~$!L~F?J7G+z&&)eN5x2zu787KRlQ{jR7u| zigDJqa@owx%-bKBk7mDYAh7)k&Zb$=!^Wlw*IW4QALA*f2~Vi$OEglWt?Krks-DWB zDlfRjIBeMeOylbhi9@_^EP+mOArJSs)AD<7uCHV+k`SbrGEACa6|%#6GSQk`+aHNo zQRrjHgY+1?e$10}Gqp?CUhry~WrNq!y#A49Y3?)Y!(OXZD-6TkgwRFe827jymnI<# zk&Un=3QXAnuWZV{hi!1iZZ`X>2@z&%{JY4jS^U!yRT^nB{ zMmaKim(QC$`@XJ2z?Zx)JWNooySmjv6|8*|Ytmr`-vNlQos7IULHEI5F_B4GMpOcV z;HogdA0&3ZAm4Xd5rQ|nd}9{(3q!a8=Vr-GMiS9t_hifZ+2w29PRh_y!zG#b!iVWU z99I4;Dj6mrmWep6F0N^aOwo5LWolW@Y}|zdSWqx*Cyey2U8119Vg5o z(MQ&+CC`HefSp~H@i08`&>mhYAZnfp7dc8>l13#^-YHAz;*6{$Flj)cmqK|0*fVX> zB~!&mmy3HEo;=yw4=2e#8WO}+cuaOmHEU&`%NEY<&{!k6fe6fnyv_@YkK+l&)DK&h z9sw+=dQy}9*X31`hy*mqKxCH=tC^ErRQ1#}zd*D`_|=M%sr&v51iqUJa;8#eEEAj( z@9^QJy+BgYAcqAqEEi2ke(eRNq&Y^_5S-s9O^6;3Cwb|k)#ZsRY^)CQ)c}>;m{;!Pj*R7! z7#Io>u|nkvq|z|X6M9rACd}?lm$Jx%?My{3@74|~x%{?r9HZK`%I_UE4ln4tD(4(S zmTKW#2`VVRC7`AWyW+>?9X1Xn-Va=El|_`mf>B@&K%qr&0?2EYoR+$vF~&>&RwH8i zH3~(aELd~UCG-jJa*sesAiq+MB6er>CjO$drVUVEDM+;MH!z6D;lB9E zjI5Md@-Qn8!oq+{P-z!(L&S;nH9pZ961ky^w~&*PGQ$aDZ;t!5OO5(#3wwC=Be}S) zp2I%~^Lv3Wz7~tV`ciKh_)_XF`mhc&>eYPrQNXW}Sq8Yxw-P#-8Q%Cwp8-tWV& z6ng*b!6&gduK=$Y6Rl*fHdIhfo(Jf(d7WO?g$QpO=DcgI>Nv>U$3hD9Xh3aVY6%WPT?b+t_pmkYiCHW$VB1n`EZXUKOpa98P(lPgFBeE_8zPK zgyLUeLT!lU*Tki-b{tnu+mE?t(`~hp>MuTQAh^W2iUw{YU&Or9XrUkgsP+@AyXFbK ztkfpVUNCU@Setr&=tXGt5GZ10Fhq>%XaQamr(6IbN2BvVux?o=^p+|nbbhmlw>JXa z>IJrMaO5s}=Z(t)$&ED7c6FN?;7`^^63fmE;UvyzkF4zRHq8<+6#6XG5G%w z66}Jj0*4h4CL8W>dBwmI;7#?q;R@2*+O5IOpSOM0lnSvYK4YUVt*?kz+|haufrA+j zbbh=)k7MYSA7|xlk5wc^{zLlW@$qTj#?#Yfd{o8}0&qPzpXqKI@A!H7=&H-pMQKs`ClAT+m3*lhFE378lZeh{7+*OD6 zxAq;Pa1#r=g}OiR0?`f7>UoDu5aoEXPNj>1KWFv;TszufJ>ji8SA z$<|VBB_{@|TI~rgG4auJ&<)g%a%G3iy(qf;{PQP5RF@`IRTt79&ZkumN*S( zr@Ah6fEeKBE7mYsl{AdhTzUHe+Nhx2KO5Za)zO*!+YQ|$cW;lY%PM?NKOW?cxC@q`O#-RI@g zkX-bS&Luv5)!&&vV{7a6C7ohDnR|NvIrskRu7BPvJ)F~c85zL+NZr(T86NXIZSa`p z*F2~B{#jTux!eEXAd)4PSJ}*(t(-K1xV$@XH}ijemSlY8~l0a1+Dd<}Qj55cocoZMIrG+)>y8kH|_nf-Y}U}FLD zL>5CBb7S;tu}px-!^~n6vtGQPq2*s!Qz<*wM*7#ZNlLY4 z{J%RT?^lveJ)s(z!znVVk1?g=)Y|9?xl|JNh9Ce0@aS($@me_Nlcg&D0q{K>pP}^e zs^|W^`2h{s{u&JiDg?klrCkUSF)Q{TE2A?$f9t!{16VG;s?PB|-*hz9gw^{$gRU~J zUwm`ytsePa@0>NRo4h-I@20aSV0sv~OY3|lOEBKc)=e22o+Wn@81hnG-wqxBv(!TJ z`+&aqj!u88rqk(Umk2x|gDoK}P$Z$3rT4 zmJS(+Q8i@5n>IrxBBa>%bPRf^5U&{^OZ@4Bbv8&(-LA-kaR%FcoHdtd7IvS)xk_KWm(p7hr`m{Ei>1vRyYxUQUMzS~wwYDOvMOw>up|x}WRg|!N#*=U3w#yI7ouKoejCqG1 zSoz)Y1VlkWCBzv{(a8on+sJG}h3O*PGa__#nzNiEQj};h&U1l_Tq0JS_^1Z6yYYix z<_g_iV-B0xOtM!WzjD2F8Lo4K9&Ucp%gh`v$W@}}$GX_PxY^fYN_A~5_naCAnD6(` zKsD7;TOGHkP^DU>y6UMP0}V7ZL?c5DH^MMW&~2fy*EG>oGgD};g^@-xhEX30^VHgS z$zIwz%n=r_5Eoo=`w$ua5ikFzi&0Es!G1pSiO<-{cZ^B+;lMf!EW?BoL6%~~nm^7I zX{Uoc1#GZo8(VP{OV+TKgB;=n+u6ZRc5z&+jOPFrVr>F{iw*X?Wj7ju0{DZDmWwTx zVi$XYS((g4rZJW2jHA7$6vjau#fcd_s=oE`@P}mjlzZ>ah9i0{7ti-R*jA3_0k!k7l0F^k(eLIWO}x ze3>)XiHY_^Qr???@PEtm=yU&b7r@{J2^a9KhUDrph9x!p{)8w0a$Y41W}foL^Blz1 q%6!{*wZr8RKAK6M15@Rx9c~uL{i6Thtk{=L$#dpcWif$a7XSe5ygotz literal 0 HcmV?d00001 diff --git a/static/assets/player.png b/static/assets/player.png new file mode 100644 index 0000000000000000000000000000000000000000..fc2131c34586d7eeb5463502955a7fe5a3c812f5 GIT binary patch literal 384 zcmV-`0e}99P)^(`S11@gWD7I5If^MlC|CjIIv@(UC zs<6J10C*uRt2e8t7xwP7XY1SZ4Qg4vIYlCIq~t=R094`tQ54`K&Kg6u14N8wB-MAQ zO%+B*K!yGD@@=>|vQCa0Q~)SG6^3=SFaUs#TmW$@Je;H#UIhRXJ_kWzmb?epE`;H~ zN5IZODg!jx;VOn3F*XJQ!0yW~BqXDM0-3w$u{;hYOgYc1PuYG*b8HUN+u2+asW zD4V7+ZQGh$C;kV3 0) { + const bgName = gameConfig.backgrounds[0]; + if (!bgName.startsWith("#")) { + bgSprite.src = "assets/" + bgName; + } + } + + const promises = gameConfig.obstacles.map(def => { + return new Promise((resolve) => { + if (!def.image) { resolve(); return; } + const img = new Image(); + img.src = "assets/" + def.image; + img.onload = () => { sprites[def.id] = img; resolve(); }; + img.onerror = () => { resolve(); }; + }); + }); + + if (bgSprite.src) { + promises.push(new Promise(r => { + bgSprite.onload = r; + bgSprite.onerror = r; + })); + } + + await Promise.all(promises); +} + +window.startGameClick = async function() { + if (!isLoaded) return; + startScreen.style.display = 'none'; + + try { + const sRes = await fetch('/api/start', {method:'POST'}); + const sData = await sRes.json(); + + sessionID = sData.sessionId; + rng = new PseudoRNG(sData.seed); + isGameRunning = true; + } catch(e) { + location.reload(); + } +}; + +function handleInput(action, active) { + if (isGameOver) { if(active) location.reload(); return; } + + const relativeTick = currentTick - lastSentTick; + + if (action === "JUMP" && active) { + if (player.grounded && !isCrouching) { + player.vy = JUMP_POWER; + player.grounded = false; + inputLog.push({ t: relativeTick, act: "JUMP" }); + } + } + + if (action === "DUCK") { + isCrouching = active; + } +} + +window.addEventListener('keydown', (e) => { + if (e.code === 'Space' || e.code === 'ArrowUp') handleInput("JUMP", true); + if (e.code === 'ArrowDown' || e.code === 'KeyS') handleInput("DUCK", true); +}); + +window.addEventListener('keyup', (e) => { + if (e.code === 'ArrowDown' || e.code === 'KeyS') handleInput("DUCK", false); +}); + +window.addEventListener('mousedown', (e) => { + if (e.target === canvas && e.button === 0) { + handleInput("JUMP", true); + } +}); + +let touchStartY = 0; +window.addEventListener('touchstart', (e) => { + if(e.target === canvas) { + e.preventDefault(); + touchStartY = e.touches[0].clientY; + } +}, { passive: false }); + +window.addEventListener('touchend', (e) => { + if(e.target === canvas) { + e.preventDefault(); + const touchEndY = e.changedTouches[0].clientY; + const diff = touchEndY - touchStartY; + + if (diff < -30) { + handleInput("JUMP", true); + } else if (diff > 30) { + handleInput("DUCK", true); + setTimeout(() => handleInput("DUCK", false), 800); + } else if (Math.abs(diff) < 10) { + handleInput("JUMP", true); + } + } +}); + +async function sendChunk() { + const ticksToSend = currentTick - lastSentTick; + if (ticksToSend <= 0) return; + + const payload = { + sessionId: sessionID, + inputs: [...inputLog], + totalTicks: ticksToSend + }; + + inputLog = []; + lastSentTick = currentTick; + + try { + const res = await fetch('/api/validate', { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify(payload) + }); + + const data = await res.json(); + + if (data.status === "dead") { + gameOver("Vom Server gestoppt"); + } else { + const sScore = data.verifiedScore; + if (Math.abs(score - sScore) > 200) { + score = sScore; + } + } + } catch (e) { + console.error(e); + } +} + +function updateGameLogic() { + if (isCrouching) { + const relativeTick = currentTick - lastSentTick; + inputLog.push({ t: relativeTick, act: "DUCK" }); + } + + const originalHeight = 50; + const crouchHeight = 25; + player.h = isCrouching ? crouchHeight : originalHeight; + + let drawY = player.y; + if (isCrouching) { + drawY = player.y + (originalHeight - crouchHeight); + } + + player.vy += GRAVITY; + if (isCrouching && !player.grounded) player.vy += 2.0; + + player.y += player.vy; + + if (player.y + originalHeight >= GROUND_Y) { + player.y = GROUND_Y - originalHeight; + player.vy = 0; + player.grounded = true; + } else { + player.grounded = false; + } + + let nextObstacles = []; + let rightmostX = 0; + + for (let obs of obstacles) { + obs.x -= GAME_SPEED; + + const playerHitbox = { + x: player.x, + y: drawY, + w: player.w, + h: player.h + }; + + if (checkCollision(playerHitbox, obs)) { + player.color = "darkred"; + if (!isGameOver) { + sendChunk(); + gameOver("Kollision (Client)"); + } + } + + if (obs.x + obs.def.width > -100) { + nextObstacles.push(obs); + if (obs.x + obs.def.width > rightmostX) { + rightmostX = obs.x + obs.def.width; + } + } + } + obstacles = nextObstacles; + + if (rightmostX < GAME_WIDTH - 10 && gameConfig && gameConfig.obstacles) { + const gap = Math.floor(400 + rng.nextRange(0, 500)); + let spawnX = rightmostX + gap; + if (spawnX < GAME_WIDTH) spawnX = GAME_WIDTH; + + let possibleObs = []; + gameConfig.obstacles.forEach(def => { + if (def.id === "eraser") { + if (score >= 500) possibleObs.push(def); + } else { + possibleObs.push(def); + } + }); + + const def = rng.pick(possibleObs); + + let speech = null; + if (def && def.canTalk) { + if (rng.nextFloat() > 0.7) { + speech = rng.pick(def.speechLines); + } + } + + if (def) { + const yOffset = def.yOffset || 0; + obstacles.push({ + x: spawnX, + y: GROUND_Y - def.height - yOffset, + def: def, + speech: speech + }); + } + } +} + +function checkCollision(p, obs) { + const paddingX = 10; + const paddingY_Top = 25; + const paddingY_Bottom = 5; + + return ( + p.x + p.w - paddingX > obs.x + paddingX && + p.x + paddingX < obs.x + obs.def.width - paddingX && + p.y + p.h - paddingY_Bottom > obs.y + paddingY_Top && + p.y + paddingY_Top < obs.y + obs.def.height - paddingY_Bottom + ); +} + +window.submitScore = async function() { + const nameInput = document.getElementById('playerNameInput'); + const name = nameInput.value; + const btn = document.getElementById('submitBtn'); + + if (!name) return alert("Namen eingeben!"); + btn.disabled = true; + + try { + const res = await fetch('/api/submit-name', { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify({ sessionId: sessionID, name: name }) + }); + + const data = await res.json(); + const claimCode = data.claimCode; + + let myClaims = JSON.parse(localStorage.getItem('escape_claims') || '[]'); + + myClaims.push({ + name: name, + score: Math.floor(score / 10), + code: claimCode, + date: new Date().toLocaleString('de-DE'), + sessionId: sessionID + }); + + localStorage.setItem('escape_claims', JSON.stringify(myClaims)); + + alert(`Gespeichert!\nDein Beweis-Code: ${claimCode}\n(Findest du unter "Meine Codes")`); + + document.getElementById('inputSection').style.display = 'none'; + loadLeaderboard(); + + } catch (e) { + console.error(e); + alert("Fehler beim Speichern!"); + btn.disabled = false; + } +}; + +async function loadLeaderboard() { + const res = await fetch(`/api/leaderboard?sessionId=${sessionID}`); + const entries = await res.json(); + let html = "

BESTENLISTE

"; + entries.forEach(e => { + const color = e.isMe ? "yellow" : "white"; + html += `
+ #${e.rank} ${e.name}${Math.floor(e.score/10)} +
`; + if(e.rank===3 && entries.length>3) html+="
...
"; + }); + document.getElementById('leaderboard').innerHTML = html; +} + +function gameOver(reason) { + if (isGameOver) return; + isGameOver = true; + + const finalScoreVal = Math.floor(score / 10); + const currentHighscore = localStorage.getItem('escape_highscore') || 0; + if (finalScoreVal > currentHighscore) { + localStorage.setItem('escape_highscore', finalScoreVal); + } + + gameOverScreen.style.display = 'flex'; + document.getElementById('finalScore').innerText = finalScoreVal; + + loadLeaderboard(); + drawGame(); +} + +function drawGame() { + ctx.clearRect(0, 0, GAME_WIDTH, GAME_HEIGHT); + + if (bgSprite.complete && bgSprite.naturalHeight !== 0) { + ctx.drawImage(bgSprite, 0, 0, GAME_WIDTH, GAME_HEIGHT); + } else { + const bgColor = (gameConfig && gameConfig.backgrounds) ? gameConfig.backgrounds[0] : "#eee"; + if (bgColor.startsWith("#")) ctx.fillStyle = bgColor; + else ctx.fillStyle = "#f0f0f0"; + ctx.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT); + } + + ctx.fillStyle = "rgba(60, 60, 60, 0.8)"; + ctx.fillRect(0, GROUND_Y, GAME_WIDTH, 50); + + obstacles.forEach(obs => { + const img = sprites[obs.def.id]; + if (img) { + ctx.drawImage(img, obs.x, obs.y, obs.def.width, obs.def.height); + } else { + ctx.fillStyle = obs.def.color; + ctx.fillRect(obs.x, obs.y, obs.def.width, obs.def.height); + } + if(obs.speech) drawSpeechBubble(obs.x, obs.y, obs.speech); + }); + + const drawY = isCrouching ? player.y + 25 : player.y; + const drawH = isCrouching ? 25 : 50; + + if (playerSprite.complete && playerSprite.naturalHeight !== 0) { + ctx.drawImage(playerSprite, player.x, drawY, player.w, drawH); + } else { + ctx.fillStyle = player.color; + ctx.fillRect(player.x, drawY, player.w, drawH); + } + + if (isGameOver) { + ctx.fillStyle = "rgba(0,0,0,0.7)"; + ctx.fillRect(0,0,GAME_WIDTH, GAME_HEIGHT); + } +} + +function drawSpeechBubble(x, y, text) { + const bX = x-20; const bY = y-40; const bW = 120; const bH = 30; + ctx.fillStyle="white"; ctx.fillRect(bX,bY,bW,bH); + ctx.strokeRect(bX,bY,bW,bH); + ctx.fillStyle="black"; ctx.font="10px Arial"; ctx.textAlign="center"; + ctx.fillText(text, bX+bW/2, bY+20); +} + +function gameLoop() { + if (!isLoaded) return; + + if (isGameRunning && !isGameOver) { + updateGameLogic(); + currentTick++; + score++; + + const scoreEl = document.getElementById('score'); + if (scoreEl) scoreEl.innerText = Math.floor(score / 10); + + if (currentTick - lastSentTick >= CHUNK_SIZE) sendChunk(); + } + + drawGame(); + requestAnimationFrame(gameLoop); +} + +async function initGame() { + try { + const cRes = await fetch('/api/config'); + gameConfig = await cRes.json(); + + await loadAssets(); + + await loadStartScreenLeaderboard(); + + isLoaded = true; + if(loadingText) loadingText.style.display = 'none'; + if(startBtn) startBtn.style.display = 'inline-block'; + + const savedHighscore = localStorage.getItem('escape_highscore') || 0; + const hsEl = document.getElementById('localHighscore'); + if(hsEl) hsEl.innerText = savedHighscore; + + requestAnimationFrame(gameLoop); + } catch(e) { + if(loadingText) loadingText.innerText = "Fehler!"; + } +} + +// Lädt die Top-Liste für den Startbildschirm (ohne Session ID) +async function loadStartScreenLeaderboard() { + try { + const listEl = document.getElementById('startLeaderboardList'); + if (!listEl) return; + + // Anfrage an API (ohne SessionID gibt der Server automatisch die Top 3 zurück) + const res = await fetch('/api/leaderboard'); + const entries = await res.json(); + + if (entries.length === 0) { + listEl.innerHTML = "
Noch keine Scores.
"; + return; + } + + let html = ""; + entries.forEach(e => { + // Medaillen Icons für Top 3 + let icon = "#" + e.rank; + if (e.rank === 1) icon = "🥇"; + if (e.rank === 2) icon = "🥈"; + if (e.rank === 3) icon = "🥉"; + + html += ` +
+ ${icon} ${e.name} + ${Math.floor(e.score / 10)} +
`; + }); + + listEl.innerHTML = html; + } catch (e) { + console.error("Konnte Leaderboard nicht laden", e); + } +} + +initGame(); \ No newline at end of file diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000..fab8fd2 --- /dev/null +++ b/static/index.html @@ -0,0 +1,181 @@ + + + + + + Escape the Teacher + + + + +
+
📱↻
+

Bitte Gerät drehen!

+ Querformat benötigt +
+ +
+ + +
+ SCORE: 0 +
+ +
+
+

ESCAPE THE
TEACHER

+

Dein Rekord: 0

+ + +
Lade Grafiken...
+ +
+
SCHUL-NEWS
+

+ • Herr Müller verteilt heute Nachsitzen!
+ • Spring über Tische und Mülleimer.
+ • Lass dich nicht erwischen! +

+
+ +
+
STEUERUNG
+

+ PC: Leertaste, Pfeil Hoch/Runter oder Mausklick
+ Handy: Tippen (Springen) oder Wischen (Ducken) +

+
+ + +
+ +
+
+

🏆 TOP SCHÜLER

+
Lade...
+
+
+
+ + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..6842036 --- /dev/null +++ b/static/style.css @@ -0,0 +1,335 @@ +/* ========================================= + 0. LOKALE SCHRIFTARTEN (DSGVO Konform) + ========================================= */ +/* press-start-2p-regular - latin */ +@font-face { + font-display: swap; /* Zeigt Text sofort an (Fallback), bis Schrift geladen ist */ + font-family: 'Press Start 2P'; + font-style: normal; + font-weight: 400; + src: url('assets/fonts/press-start-2p-v16-latin-regular.woff2') format('woff2'), + url('assets/fonts/press-start-2p-v16-latin-regular.woff') format('woff'); +} + + +/* ========================================= + 1. GRUNDLAGEN & GLOBAL + ========================================= */ +body, html { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + background-color: #1a1a1a; + color: white; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; + font-family: 'Press Start 2P', cursive; + font-size: 14px; +} + +#game-container { + position: relative; + box-shadow: 0 0 50px rgba(0,0,0,0.8); + border: 4px solid #444; + background: #000; + max-width: 100%; + max-height: 100%; +} + +canvas { + display: block; + background-color: #f0f0f0; + image-rendering: pixelated; + image-rendering: crisp-edges; + width: 100%; + height: auto; +} + +/* ========================================= + 2. UI & SCORE + ========================================= */ +#ui-layer { + position: absolute; + top: 25px; + right: 25px; + color: #333; + font-size: 24px; + font-weight: bold; + pointer-events: none; + text-shadow: 2px 2px 0px rgba(255,255,255,0.8); + z-index: 5; +} + +/* ========================================= + 3. OVERLAYS (Start, Game Over) + ========================================= */ +#startScreen, #gameOverScreen { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + background: rgba(0, 0, 0, 0.9); + display: flex; + justify-content: center; + align-items: center; + z-index: 10; + box-sizing: border-box; + padding: 20px; +} + +h1 { + font-size: 32px; + color: #ff4444; + text-shadow: 4px 4px 0px #000; + line-height: 1.4; + margin: 10px 0 25px 0; + text-align: center; + text-transform: uppercase; +} + +/* --- FIX: INPUT SECTION ZENTRIEREN --- */ +#inputSection { + display: flex; + flex-direction: column; /* Untereinander */ + align-items: center; /* Horizontal mittig */ + justify-content: center; + width: 100%; + margin: 15px 0; +} + +/* ========================================= + 4. START SCREEN LAYOUT + ========================================= */ +#startScreen { + flex-direction: row; + gap: 40px; +} + +.start-left { + flex: 2; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + max-width: 60%; +} + +.start-right { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + max-width: 35%; +} + +.hall-of-fame-box { + background: rgba(0, 0, 0, 0.6); + border: 4px solid #ffcc00; + padding: 15px; + width: 100%; + max-height: 300px; + overflow-y: auto; + box-shadow: 0 0 15px rgba(255, 204, 0, 0.1); +} + +.hall-of-fame-box h3 { + color: #ffcc00; + text-align: center; + margin-top: 0; + margin-bottom: 10px; + border-bottom: 2px solid #555; + padding-bottom: 8px; + font-size: 14px; +} + +.hof-entry { + display: flex; + justify-content: space-between; + padding: 6px 0; + border-bottom: 1px dotted #444; + font-size: 11px; + font-family: sans-serif; + color: #ddd; + line-height: 1.4; +} +.hof-rank { color: #ffcc00; font-weight: bold; margin-right: 8px; } +.hof-score { color: white; font-weight: bold; } + +/* ========================================= + 5. BUTTONS & INPUTS + ========================================= */ +button { + font-family: 'Press Start 2P', cursive; + background: #ffcc00; + border: 4px solid #fff; + padding: 18px 30px; + font-size: 18px; + cursor: pointer; + color: #000; + box-shadow: 0 6px 0 #997a00; + text-transform: uppercase; + margin: 12px; +} +button:active { transform: translateY(4px); box-shadow: 0 1px 0 #997a00; } +button:disabled { background: #555; color: #888; box-shadow: none; } + +input { + font-family: 'Press Start 2P', cursive; + padding: 12px; + font-size: 16px; + border: 3px solid white; + background: #222; + color: white; + text-align: center; + margin-bottom: 15px; + width: 250px; + outline: none; +} + +/* ========================================= + 6. INFO BOXEN + ========================================= */ +.info-box { + background: rgba(255, 255, 255, 0.1); + border: 2px solid #555; + padding: 12px; + margin: 8px 0; + width: 100%; + max-width: 320px; + text-align: left; + box-sizing: border-box; +} +.info-box p { + font-family: sans-serif; + font-size: 14px; + color: #ccc; + line-height: 1.4; + margin: 0; +} +.info-title { + color: #ffcc00; + font-size: 12px; + margin-bottom: 6px; + text-align: center; + text-decoration: underline; +} + +/* Game Over Screen Anpassung */ +#gameOverScreen { flex-direction: column; } +#leaderboard { + margin-top: 20px; + font-size: 12px; + width: 90%; + max-width: 450px; + background: rgba(0,0,0,0.5); + padding: 15px; + border: 2px solid #666; +} + +/* ========================================= + 7. RECHTLICHES + ========================================= */ +.legal-bar { + margin-top: 20px; + display: flex; + gap: 15px; +} +.legal-btn { + font-size: 10px; + padding: 8px 12px; + margin: 0; +} + +.modal-overlay { + display: none; + position: fixed; + top: 0; left: 0; width: 100%; height: 100%; + background: rgba(0,0,0,0.95); + z-index: 999; + align-items: center; + justify-content: center; +} +.modal-content { + background: #222; + border: 4px solid #fff; + padding: 30px; + width: 80%; + max-width: 600px; + max-height: 80%; + overflow-y: auto; + color: #ccc; + font-family: sans-serif; + text-align: left; + position: relative; + font-size: 16px; + line-height: 1.6; +} +.modal-content h2 { color: #ffcc00; font-family: 'Press Start 2P'; margin-top: 0; font-size: 20px; } +.close-modal { + position: absolute; + top: 10px; right: 10px; + background: #ff4444; border: 2px solid white; + width: 35px; height: 35px; + font-size: 16px; + line-height: 30px; +} + +/* ========================================= + 8. PC / DESKTOP SPEZIAL + ========================================= */ +@media (min-width: 1024px) { + h1 { font-size: 48px; margin-bottom: 40px; } + button { font-size: 22px; padding: 20px 40px; } + input { width: 350px; font-size: 20px; padding: 15px; } + + .info-box { max-width: 500px; } + .info-box p { font-size: 16px; } + .info-title { font-size: 14px; } + + .hall-of-fame-box { max-height: 400px; } + .hof-entry { font-size: 14px; padding: 8px 0; } + .hall-of-fame-box h3 { font-size: 18px; margin-bottom: 15px; } +} + +/* ========================================= + 9. MOBILE ANPASSUNG + ========================================= */ +@media (max-width: 700px) { + #startScreen { + flex-direction: column; + gap: 15px; + justify-content: flex-start; + overflow-y: auto; + } + .start-left, .start-right { max-width: 100%; width: 100%; } + .start-right { height: auto; min-height: 200px; margin-top: 20px; } + .hall-of-fame-box { max-height: 200px; } + h1 { font-size: 24px; margin: 15px 0; } + button { padding: 12px 20px; font-size: 14px; } + input { width: 200px; } +} + +/* ========================================= + 10. ROTATE OVERLAY + ========================================= */ +#rotate-overlay { + display: none; + position: fixed; + top: 0; left: 0; width: 100%; height: 100%; + background: #222; + z-index: 9999; + color: white; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; +} +.icon { font-size: 60px; margin-bottom: 20px; } + +@media screen and (orientation: portrait) { + #rotate-overlay { display: flex; } + #game-container { display: none !important; } +} \ No newline at end of file