diff --git a/exercise1/problem1/main.go b/exercise1/problem1/main.go index dfca465c..d2d8d77e 100644 --- a/exercise1/problem1/main.go +++ b/exercise1/problem1/main.go @@ -1,3 +1,9 @@ package main -func addUp() {} +func addUp(num int) int { + count := 0 + for i := 1; i <= num; i++ { + count += i + } + return count +} diff --git a/exercise1/problem10/main.go b/exercise1/problem10/main.go index 04ec3430..14330190 100644 --- a/exercise1/problem10/main.go +++ b/exercise1/problem10/main.go @@ -1,3 +1,22 @@ package main -func sum() {} +import ( + "fmt" + "strconv" +) + +func sum(a, b string) (string, error) { + numA, errA := strconv.Atoi(a) + if errA != nil { + return "", fmt.Errorf("string: %s cannot be converted", a) + } + + numB, errB := strconv.Atoi(b) + if errB != nil { + return "", fmt.Errorf("string: %s cannot be converted", b) + } + + sum := numA + numB + + return strconv.Itoa(sum), nil +} diff --git a/exercise1/problem2/main.go b/exercise1/problem2/main.go index 2ca540b8..087b8c01 100644 --- a/exercise1/problem2/main.go +++ b/exercise1/problem2/main.go @@ -1,3 +1,9 @@ package main -func binary() {} +import "strconv" + +func binary(n int) string { + + return strconv.FormatInt(int64(n), 2) + +} diff --git a/exercise1/problem3/main.go b/exercise1/problem3/main.go index d346641a..bc7b2787 100644 --- a/exercise1/problem3/main.go +++ b/exercise1/problem3/main.go @@ -1,3 +1,10 @@ package main -func numberSquares() {} +func numberSquares(n int) int { + res := 0 + for i := 1; i <= n; i++ { + res += (n - i + 1) * (n - i + 1) + } + + return res +} diff --git a/exercise1/problem4/main.go b/exercise1/problem4/main.go index 74af9044..eee44252 100644 --- a/exercise1/problem4/main.go +++ b/exercise1/problem4/main.go @@ -1,3 +1,15 @@ package main -func detectWord() {} +import ( + "unicode" +) + +func detectWord(crowd string) string { + var word string + for _, letter := range crowd { + if unicode.IsLower(letter) { + word += string(letter) + } + } + return word +} diff --git a/exercise1/problem5/main.go b/exercise1/problem5/main.go index c5a804c9..f63c75ed 100644 --- a/exercise1/problem5/main.go +++ b/exercise1/problem5/main.go @@ -1,3 +1,9 @@ package main -func potatoes() {} +import ( + "strings" +) + +func potatoes(str string) int { + return strings.Count(str, "potato") +} diff --git a/exercise1/problem6/main.go b/exercise1/problem6/main.go index 06043890..7e12ccf0 100644 --- a/exercise1/problem6/main.go +++ b/exercise1/problem6/main.go @@ -1,3 +1,19 @@ package main -func emojify() {} +import ( + "strings" +) + +func emojify(sentence string) string { + replacements := map[string]string{ + "smile": "🙂", + "grin": "😀", + "sad": "😥", + "mad": "😠", + } + + for word, emoji := range replacements { + sentence = strings.ReplaceAll(sentence, word, emoji) + } + return sentence +} diff --git a/exercise1/problem7/main.go b/exercise1/problem7/main.go index 57c99b5c..94ea8cb1 100644 --- a/exercise1/problem7/main.go +++ b/exercise1/problem7/main.go @@ -1,3 +1,19 @@ package main -func highestDigit() {} +import ( + "strconv" +) + +func highestDigit(number int) int { + numStr := strconv.Itoa(number) + highest := 0 + + for _, digit := range numStr { + digitInt, _ := strconv.Atoi(string(digit)) + if digitInt > highest { + highest = digitInt + } + } + + return highest +} diff --git a/exercise1/problem8/main.go b/exercise1/problem8/main.go index 97fa0dae..b700d088 100644 --- a/exercise1/problem8/main.go +++ b/exercise1/problem8/main.go @@ -1,3 +1,18 @@ package main -func countVowels() {} +import ( + "strings" +) + +func countVowels(str string) int { + vowels := "aeiouAEIOU" + count := 0 + + for _, char := range str { + if strings.ContainsRune(vowels, char) { + count++ + } + } + + return count +} diff --git a/exercise1/problem9/main.go b/exercise1/problem9/main.go index e8c84a54..64f74a97 100644 --- a/exercise1/problem9/main.go +++ b/exercise1/problem9/main.go @@ -1,7 +1,13 @@ package main -func bitwiseAND() {} +func bitwiseAND(a, b int) int { + return a & b +} -func bitwiseOR() {} +func bitwiseOR(a, b int) int { + return a | b +} -func bitwiseXOR() {} +func bitwiseXOR(a, b int) int { + return a ^ b +} diff --git a/exercise10/.env b/exercise10/.env new file mode 100644 index 00000000..d5bed147 --- /dev/null +++ b/exercise10/.env @@ -0,0 +1,3 @@ +PORT=8080 +REDIS_HOST=6379 + diff --git a/exercise10/Dockerfile b/exercise10/Dockerfile new file mode 100644 index 00000000..7cfe40fc --- /dev/null +++ b/exercise10/Dockerfile @@ -0,0 +1,18 @@ +# Используем официальный образ Golang +FROM golang:1.21 + +# Устанавливаем рабочую директорию в контейнере +WORKDIR /app + +# Копируем файлы проекта +COPY go.mod go.sum ./ +RUN go mod download + +# Копируем весь код +COPY . . + +# Собираем приложение +RUN go build -o main . + +# Запускаем приложение +CMD ["/app/main"] diff --git a/exercise10/docker-compose.yml b/exercise10/docker-compose.yml new file mode 100644 index 00000000..b6925698 --- /dev/null +++ b/exercise10/docker-compose.yml @@ -0,0 +1,11 @@ +version: "3.8" + +services: + redis: + image: redis:latest + container_name: redis + restart: always + ports: + - "6379:6379" + + diff --git a/exercise10/go.mod b/exercise10/go.mod new file mode 100644 index 00000000..827aa8d8 --- /dev/null +++ b/exercise10/go.mod @@ -0,0 +1,11 @@ +module github.com/my/repo + +go 1.23.6 + +require github.com/redis/go-redis/v9 v9.7.1 + +require ( + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/joho/godotenv v1.5.1 // indirect +) diff --git a/exercise10/go.sum b/exercise10/go.sum new file mode 100644 index 00000000..a079a156 --- /dev/null +++ b/exercise10/go.sum @@ -0,0 +1,12 @@ +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.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/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/redis/go-redis/v9 v9.7.1 h1:4LhKRCIduqXqtvCUlaq9c8bdHOkICjDMrr1+Zb3osAc= +github.com/redis/go-redis/v9 v9.7.1/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= diff --git a/exercise10/internal/.gitignore b/exercise10/internal/.gitignore new file mode 100644 index 00000000..4a82335f --- /dev/null +++ b/exercise10/internal/.gitignore @@ -0,0 +1 @@ +../.env \ No newline at end of file diff --git a/exercise10/internal/config/basic.go b/exercise10/internal/config/basic.go new file mode 100644 index 00000000..2be156bc --- /dev/null +++ b/exercise10/internal/config/basic.go @@ -0,0 +1,49 @@ +package config + +import ( + "fmt" + "github.com/joho/godotenv" + "log" + "os" +) + +type Config struct { + //ENV string + API APIConfig + Redis RedisConfig +} + +type APIConfig struct { + Rest APIRestConfig +} +type APIRestConfig struct { + Host string + Port string +} +type RedisConfig struct { + RedisName string + Host string +} + +const NameRedis = "leaderBoard" + +func NewConfig() *Config { + err := godotenv.Load() + if err != nil { + fmt.Println(err.Error()) + log.Fatal("Error loading .env file") + } + return &Config{ + API: APIConfig{ + Rest: APIRestConfig{ + Host: "localhost", + Port: os.Getenv("PORT"), + }, + }, + Redis: RedisConfig{ + Host: os.Getenv("REDIS_HOST"), + RedisName: NameRedis, + }, + } + +} diff --git a/exercise10/internal/governor/basic.go b/exercise10/internal/governor/basic.go new file mode 100644 index 00000000..34decef6 --- /dev/null +++ b/exercise10/internal/governor/basic.go @@ -0,0 +1,13 @@ +package governor + +import "github.com/my/repo/internal/governor/board" + +type Governor struct { + *board.LeaderBoard +} + +func NewGovernor() *Governor { + return &Governor{ + LeaderBoard: new(board.LeaderBoard), + } +} diff --git a/exercise10/internal/governor/board/basic.go b/exercise10/internal/governor/board/basic.go new file mode 100644 index 00000000..be3b5604 --- /dev/null +++ b/exercise10/internal/governor/board/basic.go @@ -0,0 +1,20 @@ +package board + +import ( + "github.com/my/repo/internal/config" + "github.com/my/repo/internal/types/pubsub" + "github.com/redis/go-redis/v9" +) + +type LeaderBoard struct { + pubsub.MyRedis + conf *config.Config + rdb *redis.Client +} + +func NewLeaderBoard(conf *config.Config, rdb *redis.Client) *LeaderBoard { + return &LeaderBoard{ + conf: conf, + rdb: rdb, + } +} diff --git a/exercise10/internal/governor/board/list_board.go b/exercise10/internal/governor/board/list_board.go new file mode 100644 index 00000000..d5831cc8 --- /dev/null +++ b/exercise10/internal/governor/board/list_board.go @@ -0,0 +1,73 @@ +package board + +import ( + "errors" + "fmt" + "github.com/my/repo/internal/types/controller" +) + +func (l *LeaderBoard) ListPlayers() (controller.ListPlayerResp, error) { + fmt.Println("method", "ListPlayers:governor") + //request := newListPlayerReq() + response, err := l.MyRedis.ListPlayers() + if response == nil { + return nil, errors.New("response is nil") + } + if err != nil { + return nil, err + } + + ps := make([]*Player, 0, len(response.GetList())) + + for _, it := range response.GetList() { + ps = append(ps, newPlayer(it.GetPlayerID(), it.GetPlayerName(), it.GetPlayerScore())) + } + fmt.Println("method", "ListPlayers:governor", "end") + return newListPlayer(ps), nil + +} + +type ListPlayerReq struct{} +type ListPlayerResp struct { + Players []*Player +} + +func newListPlayerReq() *ListPlayerReq { + return &ListPlayerReq{} +} + +func newListPlayer(ps []*Player) *ListPlayerResp { + return &ListPlayerResp{ps} +} + +func (i *ListPlayerResp) GetList() []controller.ItemPlayerResp { + list := make([]controller.ItemPlayerResp, 0, len(i.Players)) + + for _, p := range i.Players { + list = append(list, p) + } + + return list +} + +type Player struct { + id string + name string + score int +} + +func newPlayer(id, name string, score int) *Player { + return &Player{id, name, score} +} + +func (p *Player) GetID() string { + return p.id +} + +func (p *Player) GetName() string { + return p.name +} + +func (p *Player) GetScore() int { + return p.score +} diff --git a/exercise10/internal/governor/board/new_player.go b/exercise10/internal/governor/board/new_player.go new file mode 100644 index 00000000..8bdaa2fb --- /dev/null +++ b/exercise10/internal/governor/board/new_player.go @@ -0,0 +1,51 @@ +package board + +import "github.com/my/repo/internal/types/controller" + +func (l *LeaderBoard) NewPlayer(req controller.NewPlayerReq) (controller.NewPlayerResp, error) { + newPlayer := CreateNewPlayer(req.GetName(), req.GetId(), req.GetScore()) + resp, err := l.MyRedis.CreatePlayer(newPlayer) + if err != nil { + return nil, err + } + + return resp, nil +} + +type newPlayerReq struct { + controller.NewPlayerReq + id string + name string + score int +} + +func CreateNewPlayer(name string, id string, score int) *newPlayerReq { + return &newPlayerReq{ + id: id, + name: name, + score: score, + } +} + +// func (r newPlayerReq) GetName() string { +// return r.name +// } + +// func (r newPlayerReq) GetId() string { +// return r.id +// } +// func (r newPlayerReq) GetScore() int { +// return r.score +// } + +func (m *newPlayerReq) GetPlayerID() string { + return m.id +} + +func (m *newPlayerReq) GetPlayerName() string { + return m.name +} + +func (m *newPlayerReq) GetPlayerScore() int { + return m.score +} diff --git a/exercise10/internal/mongo/basic.go b/exercise10/internal/mongo/basic.go new file mode 100644 index 00000000..af2a1bf5 --- /dev/null +++ b/exercise10/internal/mongo/basic.go @@ -0,0 +1 @@ +package mongo diff --git a/exercise10/internal/redis/basic.go b/exercise10/internal/redis/basic.go new file mode 100644 index 00000000..d80eb103 --- /dev/null +++ b/exercise10/internal/redis/basic.go @@ -0,0 +1,28 @@ +package newredis + +import ( + "github.com/my/repo/internal/config" + "github.com/redis/go-redis/v9" +) + +type Redis struct { + newClient *redis.Client +} + +func NewRedis(conf *config.Config) *Redis { + rdb := RedisClient(conf) + + redis.NewClient(&redis.Options{ + Addr: conf.Redis.Host, + }) + return &Redis{ + newClient: rdb, + } +} + +func RedisClient(conf *config.Config) *redis.Client { + + return redis.NewClient(&redis.Options{ + Addr: conf.Redis.Host, + }) +} diff --git a/exercise10/internal/redis/model/basic.go b/exercise10/internal/redis/model/basic.go new file mode 100644 index 00000000..31323a17 --- /dev/null +++ b/exercise10/internal/redis/model/basic.go @@ -0,0 +1,18 @@ +package modelredis + +import ( + "github.com/my/repo/internal/config" + "github.com/redis/go-redis/v9" +) + +type LeaderBoardRedisModel struct { + conf *config.Config + rdb *redis.Client +} + +func NewLeaderBoardRedisModel(conf *config.Config, rdb *redis.Client) *LeaderBoardRedisModel { + return &LeaderBoardRedisModel{ + conf: conf, + rdb: rdb, + } +} diff --git a/exercise10/internal/redis/model/redis_board/basic.go b/exercise10/internal/redis/model/redis_board/basic.go new file mode 100644 index 00000000..aaf3888a --- /dev/null +++ b/exercise10/internal/redis/model/redis_board/basic.go @@ -0,0 +1,18 @@ +package redis_board + +import ( + "github.com/my/repo/internal/config" + "github.com/redis/go-redis/v9" +) + +type LeaderBoardRedis struct { + conf *config.Config + rdb *redis.Client +} + +func NewLeaderBoardRedis(conf *config.Config, rdb *redis.Client) *LeaderBoardRedis { + return &LeaderBoardRedis{ + conf: conf, + rdb: rdb, + } +} diff --git a/exercise10/internal/redis/model/redis_board/create_leader_board_redis.go b/exercise10/internal/redis/model/redis_board/create_leader_board_redis.go new file mode 100644 index 00000000..8aca0a6f --- /dev/null +++ b/exercise10/internal/redis/model/redis_board/create_leader_board_redis.go @@ -0,0 +1,34 @@ +package redis_board + +import ( + "context" + "fmt" + + "github.com/my/repo/internal/types/pubsub" + + "github.com/redis/go-redis/v9" + + "log/slog" +) + +func (m *LeaderBoardRedis) CreatePlayer(req pubsub.CreatePlayerReq) (pubsub.CreatePlayerResp, error) { + if req == nil { + slog.Error("req is nil") + } + userId := req.GetPlayerID() + PlayerName := req.GetPlayerName() + member := fmt.Sprintf("%s:%s", userId, PlayerName) + //mdl := LeaderBoard{ + // UserID: userId, + // Name: req.GetPlayerName(), + //} + ctx := context.Background() + + err := m.rdb.ZAdd(ctx, m.conf.Redis.RedisName, redis.Z{ + Score: float64(req.GetPlayerScore()), Member: member, + }).Err() + if err != nil { + return nil, err + } + return true, nil +} diff --git a/exercise10/internal/redis/model/redis_board/list_players.go b/exercise10/internal/redis/model/redis_board/list_players.go new file mode 100644 index 00000000..b6c9b84d --- /dev/null +++ b/exercise10/internal/redis/model/redis_board/list_players.go @@ -0,0 +1,67 @@ +package redis_board + +import ( + "context" + "errors" + "fmt" + "log/slog" + "strings" + + "github.com/my/repo/internal/types/pubsub" +) + +func (l *LeaderBoardRedis) ListPlayers() (pubsub.ListPlayerResp, error) { + fmt.Println("method", "ListPlayers:redis") + ctx := context.Background() + topPlayers, err := l.rdb.ZRevRangeWithScores(ctx, l.conf.Redis.RedisName, 0, -1).Result() + if err != nil { + return nil, err + } + var players []pubsub.ItemPlayerResp + for _, player := range topPlayers { + member := player.Member.(string) + parts := strings.SplitN(member, ":", 2) + if len(parts) < 2 { + slog.Error("Invalid player format") + continue + } + playerID := parts[0] + playerName := parts[1] + + players = append(players, &itemPlayersResp{ + ID: playerID, + Name: playerName, + Score: int(player.Score), + }) + + } + if players == nil || len(players) == 0 { + slog.Error("No players found") + return nil, errors.New("no players found") + } + return &listPlayerResp{Players: players}, nil +} + +type listPlayerResp struct { + Players []pubsub.ItemPlayerResp +} + +type itemPlayersResp struct { + ID string + Name string + Score int +} + +func (p *itemPlayersResp) GetPlayerID() string { + return p.ID +} +func (p *itemPlayersResp) GetPlayerName() string { + return p.Name +} +func (p *itemPlayersResp) GetPlayerScore() int { + return p.Score +} + +func (p *listPlayerResp) GetList() []pubsub.ItemPlayerResp { + return p.Players +} diff --git a/exercise10/internal/rest/basic.go b/exercise10/internal/rest/basic.go new file mode 100644 index 00000000..525df6ce --- /dev/null +++ b/exercise10/internal/rest/basic.go @@ -0,0 +1,38 @@ +package rest + +import ( + "context" + "github.com/my/repo/internal/config" + "github.com/my/repo/internal/rest/handler" + "github.com/my/repo/internal/rest/router" + "github.com/my/repo/internal/types/controller" + "net/http" +) + +type Rest struct { + conf *config.Config + router *router.Router +} + +func NewRest(conf *config.Config, ctrl controller.Controller) *Rest { + + h := handler.NewHandler(ctrl) + r := router.NewRouter(h) + return &Rest{ + conf: conf, + router: r, + } +} + +func (a *Rest) Start(ctx context.Context) error { + //mux := http.NewServeMux() + mux := a.router.Start(ctx) + srv := &http.Server{ + Handler: mux, + Addr: a.conf.API.Rest.Host + ":" + a.conf.API.Rest.Port, + } + if err := srv.ListenAndServe(); err != nil { + return err + } + return nil +} diff --git a/exercise10/internal/rest/handler/add_player.go b/exercise10/internal/rest/handler/add_player.go new file mode 100644 index 00000000..58f37826 --- /dev/null +++ b/exercise10/internal/rest/handler/add_player.go @@ -0,0 +1,56 @@ +package handler + +import ( + "encoding/json" + "fmt" + "net/http" +) + +func (h *Handler) NewPlayer(w http.ResponseWriter, r *http.Request) { + //ctx := r.Context() + newPlayer := new(AddPlayer) + + err := json.NewDecoder(r.Body).Decode(newPlayer) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + resp, err := h.LeaderBoard.NewPlayer(newPlayer) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + err = json.NewEncoder(w).Encode(resp) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + fmt.Println("NewPlayer") + +} + +type AddPlayer struct { + Data *AddPlayerReq `json:"data"` +} + +type AddPlayerReq struct { + ID string `json:"id"` + Score int `json:"score"` + Name string `json:"name"` +} + +func (h *AddPlayer) GetName() string { + return h.Data.Name + +} +func (h *AddPlayer) GetId() string { + return h.Data.ID + +} + +func (h *AddPlayer) GetScore() int { + return h.Data.Score + +} diff --git a/exercise10/internal/rest/handler/basic.go b/exercise10/internal/rest/handler/basic.go new file mode 100644 index 00000000..e1cbf8cb --- /dev/null +++ b/exercise10/internal/rest/handler/basic.go @@ -0,0 +1,18 @@ +package handler + +import ( + "github.com/my/repo/internal/governor/board" + restboard "github.com/my/repo/internal/rest/handler/rest_board" + "github.com/my/repo/internal/types/controller" +) + +type Handler struct { + *board.LeaderBoard + *restboard.RestBoard +} + +func NewHandler(ctrl controller.Controller) *Handler { + return &Handler{ + RestBoard: restboard.NewRestBoard(ctrl), + } +} diff --git a/exercise10/internal/rest/handler/list_player.go b/exercise10/internal/rest/handler/list_player.go new file mode 100644 index 00000000..2c34bb70 --- /dev/null +++ b/exercise10/internal/rest/handler/list_player.go @@ -0,0 +1,29 @@ +package handler + +import ( + "encoding/json" + "fmt" + "net/http" +) + +func (h *Handler) ListPlayers(w http.ResponseWriter, r *http.Request) { + fmt.Println("ListPlayers", "handler") + //ctx := r.Context() + resp, err := h.LeaderBoard.ListPlayers() + if resp == nil { + fmt.Println("resp is nil") + return + } + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + err = json.NewEncoder(w).Encode(resp) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + +} diff --git a/exercise10/internal/rest/handler/rest_board/rest_board.go b/exercise10/internal/rest/handler/rest_board/rest_board.go new file mode 100644 index 00000000..4fb56dcd --- /dev/null +++ b/exercise10/internal/rest/handler/rest_board/rest_board.go @@ -0,0 +1,15 @@ +package restboard + +import ( + "github.com/my/repo/internal/types/controller" +) + +type RestBoard struct { + ctrl controller.Controller +} + +func NewRestBoard(ctrl controller.Controller) *RestBoard { + return &RestBoard{ + ctrl: ctrl, + } +} diff --git a/exercise10/internal/rest/router/basic.go b/exercise10/internal/rest/router/basic.go new file mode 100644 index 00000000..a2779e95 --- /dev/null +++ b/exercise10/internal/rest/router/basic.go @@ -0,0 +1,25 @@ +package router + +import ( + "context" + "github.com/my/repo/internal/rest/handler" + "net/http" +) + +type Router struct { + router *http.ServeMux + handler *handler.Handler +} + +func NewRouter(handler *handler.Handler) *Router { + mux := http.NewServeMux() + return &Router{ + router: mux, + handler: handler, + } +} + +func (r *Router) Start(ctx context.Context) *http.ServeMux { + r.player(ctx) + return r.router +} diff --git a/exercise10/internal/rest/router/player.go b/exercise10/internal/rest/router/player.go new file mode 100644 index 00000000..3d3348db --- /dev/null +++ b/exercise10/internal/rest/router/player.go @@ -0,0 +1,11 @@ +package router + +import ( + "context" +) + +func (r Router) player(_ context.Context) { + r.router.HandleFunc("GET /players", r.handler.ListPlayers) + r.router.HandleFunc("POST /player", r.handler.NewPlayer) + +} diff --git a/exercise10/internal/types/api/basic.go b/exercise10/internal/types/api/basic.go new file mode 100644 index 00000000..782482c8 --- /dev/null +++ b/exercise10/internal/types/api/basic.go @@ -0,0 +1,7 @@ +package api + +import "context" + +type Api interface { + Start(ctx context.Context) error +} diff --git a/exercise10/internal/types/controller/basic.go b/exercise10/internal/types/controller/basic.go new file mode 100644 index 00000000..4f9f3568 --- /dev/null +++ b/exercise10/internal/types/controller/basic.go @@ -0,0 +1,10 @@ +package controller + +type LeaderBoard interface { + ListPlayers() (ListPlayerResp, error) + NewPlayer(NewPlayerReq) (NewPlayerResp, error) +} + +type Controller interface { + LeaderBoard +} diff --git a/exercise10/internal/types/controller/list_player.go b/exercise10/internal/types/controller/list_player.go new file mode 100644 index 00000000..69b359ce --- /dev/null +++ b/exercise10/internal/types/controller/list_player.go @@ -0,0 +1,13 @@ +package controller + +type ListPlayerReq interface { +} + +type ListPlayerResp interface { + GetList() []ItemPlayerResp +} +type ItemPlayerResp interface { + GetID() string + GetName() string + GetScore() int +} diff --git a/exercise10/internal/types/controller/new_player.go b/exercise10/internal/types/controller/new_player.go new file mode 100644 index 00000000..eac58050 --- /dev/null +++ b/exercise10/internal/types/controller/new_player.go @@ -0,0 +1,9 @@ +package controller + +type NewPlayerReq interface { + GetName() string + GetId() string + GetScore() int +} +type NewPlayerResp interface { +} diff --git a/exercise10/internal/types/pubsub/basic.go b/exercise10/internal/types/pubsub/basic.go new file mode 100644 index 00000000..e2a28a62 --- /dev/null +++ b/exercise10/internal/types/pubsub/basic.go @@ -0,0 +1,10 @@ +package pubsub + +type LeaderBoard interface { + CreatePlayer(CreatePlayerReq) (CreatePlayerResp, error) + ListPlayers() (ListPlayerResp, error) +} + +type MyRedis interface { + LeaderBoard +} diff --git a/exercise10/internal/types/pubsub/create_player.go b/exercise10/internal/types/pubsub/create_player.go new file mode 100644 index 00000000..35be83d0 --- /dev/null +++ b/exercise10/internal/types/pubsub/create_player.go @@ -0,0 +1,9 @@ +package pubsub + +type CreatePlayerReq interface { + GetPlayerID() string + GetPlayerName() string + GetPlayerScore() int +} +type CreatePlayerResp interface { +} diff --git a/exercise10/internal/types/pubsub/list_player.go b/exercise10/internal/types/pubsub/list_player.go new file mode 100644 index 00000000..4acbd1fc --- /dev/null +++ b/exercise10/internal/types/pubsub/list_player.go @@ -0,0 +1,12 @@ +package pubsub + +type ListPlayerReq interface{} +type ListPlayerResp interface { + GetList() []ItemPlayerResp +} + +type ItemPlayerResp interface { + GetPlayerID() string + GetPlayerName() string + GetPlayerScore() int +} diff --git a/exercise10/main.go b/exercise10/main.go new file mode 100644 index 00000000..2de80863 --- /dev/null +++ b/exercise10/main.go @@ -0,0 +1,101 @@ +package main + +import ( + "context" + "github.com/my/repo/internal/config" + "github.com/my/repo/internal/governor" + "github.com/my/repo/internal/redis" + "github.com/my/repo/internal/rest" + "log/slog" + "os" + "os/signal" +) + +func main() { + ctx, cancel := context.WithCancel(context.Background()) + conf := config.NewConfig() + newredis.NewRedis(conf) + gov := governor.NewGovernor() + r := rest.NewRest(conf, gov) + go func() { + if err := r.Start(ctx); err != nil { + slog.Error("failed start rest server", err) + } + }() + go func(cancelFunc context.CancelFunc) { + shutdown := make(chan os.Signal, 1) + signal.Notify(shutdown, os.Interrupt) + <-shutdown + cancelFunc() + }(cancel) + <-ctx.Done() +} + +//// Получаем адрес Redis из переменной окружения +//redisAddr := os.Getenv("REDIS_ADDR") +//if redisAddr == "" { +//redisAddr = "localhost:6379" +//} +// +//// Подключаемся к Redis +//rdb := redis.NewClient(&redis.Options{ +//Addr: redisAddr, // Адрес Redis +//Password: "", // Без пароля +//DB: 0, +//}) +// +//// Проверяем соединение +// +//_, err := rdb.Ping(ctx).Result() +//if err != nil { +//log.Fatalf("Ошибка подключения к Redis: %v", err) +//} +// +//fmt.Println("Redis подключен!") +// +//err = rdb.ZAdd(ctx, "leader", +//redis.Z{Score: 150, Member: "Eraga"}, +//redis.Z{Score: 100, Member: "SHeraga"}, +//redis.Z{Score: 500, Member: "Araga"}, +//redis.Z{Score: 50, Member: "ZHanaga"}, +//redis.Z{Score: 1150, Member: "Inatay"}, +//redis.Z{Score: 950, Member: "Samat"}, +//).Err() +//if err != nil { +//log.Fatal(err) +//} +////ranks, err := rdb.ZRevRank(ctx, "leader", "Eraga").Result() +////if err != nil { +//// fmt.Println("лощибка ") +//// log.Fatal(err) +////} +//topPlayers, err := rdb.ZRevRangeWithScores(ctx, "leader", 0, 9).Result() +//if err != nil { +//log.Fatal(err) +//} +//for _, player := range topPlayers { +//fmt.Printf("oynwy: %v, upai: %v\n", player.Member, player.Score) +// +//} +//err = rdb.ZAdd(ctx, "leader", +//redis.Z{Score: 15000, Member: "Eraga"}, +//redis.Z{Score: 10000, Member: "SHeraga"}, +//redis.Z{Score: 500, Member: "Araga"}, +//redis.Z{Score: 5000, Member: "ZHanaga"}, +//redis.Z{Score: 1150, Member: "Inatay"}, +//redis.Z{Score: 950, Member: "Samat"}, +//).Err() +//if err != nil { +//log.Fatal(err) +//} +//topPlayers, err = rdb.ZRevRangeWithScores(ctx, "leader", 0, 9).Result() +//if err != nil { +//log.Fatal(err) +//} +//fmt.Println() +//for _, player := range topPlayers { +// +//fmt.Printf("oynwy: %v, upai: %v\n", player.Member, player.Score) +// +//} +//fmt.Println("Прочитанное значение из Redis:", ranks) diff --git a/exercise2/problem1/problem1.go b/exercise2/problem1/problem1.go index 4763006c..1c8edda2 100644 --- a/exercise2/problem1/problem1.go +++ b/exercise2/problem1/problem1.go @@ -1,4 +1,24 @@ package problem1 -func isChangeEnough() { +func isChangeEnough(changes [4]int, total float32) bool { + + var quarter, dime, nickel, penny float32 + ischange := changes + var sum float32 + + quarter = 0.25 + dime = 0.1 + nickel = 0.05 + penny = 0.01 + sum = float32(ischange[0]) * quarter + sum = sum + float32(ischange[1])*dime + sum = sum + float32(ischange[2])*nickel + sum = sum + float32(ischange[3])*penny + + if total <= sum { + return true + } else { + return false + } + } diff --git a/exercise2/problem1/problem1_test.go b/exercise2/problem1/problem1_test.go index d273a374..199286df 100644 --- a/exercise2/problem1/problem1_test.go +++ b/exercise2/problem1/problem1_test.go @@ -25,4 +25,7 @@ func TestIsChangeEnough(t *testing.T) { t.Errorf("isChangeEnough(%v, %f) was incorrect, got: %t, expected: %t.", r.changes, r.total, out, r.exp) } } + // changeEnoush := func isChangeEnough( change []int, total float64 )bool { + + // } } diff --git a/exercise2/problem10/problem10.go b/exercise2/problem10/problem10.go index 7142a022..3a40ce0f 100644 --- a/exercise2/problem10/problem10.go +++ b/exercise2/problem10/problem10.go @@ -1,3 +1,16 @@ package problem10 -func factory() {} +func factory() (map[string]int, func(string) func(int)) { + + brands := make(map[string]int) + + return brands, func(brand string) func(int) { + + brands[brand] = 0 + + return func(amount int) { + + brands[brand] += amount + } + } +} diff --git a/exercise2/problem11/problem11.go b/exercise2/problem11/problem11.go index 33988711..99434c0a 100644 --- a/exercise2/problem11/problem11.go +++ b/exercise2/problem11/problem11.go @@ -1,3 +1,29 @@ package problem11 -func removeDups() {} +func removeDups[T comparable](slice []T) []T { + res := []T{} + + check := map[T]bool{} + for _, n := range slice { + if !check[n] { + res = append(res, n) + check[n] = true + } + + } + return res +} + +// func removeDups[T comparable](slice []T) []T { +// res := []T{} +// var prevn T + +// for i, n := range slice { +// if i == 0 || !reflect.DeepEqual(n, prevn) { // Проверяем на первом элементе и на дубликатах +// res = append(res, n) +// prevn = n +// } +// } + +// return res +// } diff --git a/exercise2/problem12/problem12.go b/exercise2/problem12/problem12.go index 4c1ae327..947d20fb 100644 --- a/exercise2/problem12/problem12.go +++ b/exercise2/problem12/problem12.go @@ -1,3 +1,26 @@ package problem11 -func keysAndValues() {} +import ( + "fmt" + "sort" +) + +func keysAndValues[K comparable, V any](m map[K]V) ([]K, []V) { + keys := make([]K, 0, len(m)) + values := make([]V, 0, len(m)) + + for k, v := range m { + keys = append(keys, k) + values = append(values, v) + } + + sort.Slice(keys, func(i, j int) bool { + return fmt.Sprintf("%v", keys[i]) < fmt.Sprintf("%v", keys[j]) + }) + + sortedValues := make([]V, len(values)) + for i, key := range keys { + sortedValues[i] = m[key] + } + return keys, sortedValues +} diff --git a/exercise2/problem2/problem2.go b/exercise2/problem2/problem2.go index fdb199f0..e55dc320 100644 --- a/exercise2/problem2/problem2.go +++ b/exercise2/problem2/problem2.go @@ -1,4 +1,32 @@ package problem2 -func capitalize() { +import "strings" + +func capitalize(names []string) []string { + capital := []string{} + names1 := names + + for _, v := range names1 { + temp := "" + for i, v1 := range v { + if len(v) > 0 && v[0] >= 97 && v[0] <= 122 && i == 0 { + + newv1 := strings.ToUpper(string(v1)) + temp += newv1 + + newv1 = "" + } else if len(v) > 0 && v1 >= 65 && v1 <= 90 && i > 0 { + + newv2 := strings.ToLower(string(v1)) + temp += newv2 + newv2 = "" + } else { + temp += string(v1) + } + + } + capital = append(capital, temp) + temp = "" + } + return capital } diff --git a/exercise2/problem3/problem3.go b/exercise2/problem3/problem3.go index f183fafb..5e30871b 100644 --- a/exercise2/problem3/problem3.go +++ b/exercise2/problem3/problem3.go @@ -9,5 +9,42 @@ const ( lr dir = "lr" ) -func diagonalize() { +func diagonalize(n int, corner dir) [][]int { + + matrix := make([][]int, n) + for i := range matrix { + matrix[i] = make([]int, n) + } + + switch corner { + case ul: + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + matrix[i][j] = i + j + } + } + + case ur: + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + matrix[i][j] = (n - 1 - j) + i + } + } + + case ll: + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + matrix[i][j] = (n - 1 - i) + j + } + } + + case lr: + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + matrix[i][j] = (n - 1 - i) + (n - 1 - j) + } + } + } + + return matrix } diff --git a/exercise2/problem4/problem4.go b/exercise2/problem4/problem4.go index 1f680a4d..3c004c94 100644 --- a/exercise2/problem4/problem4.go +++ b/exercise2/problem4/problem4.go @@ -1,4 +1,12 @@ package problem4 -func mapping() { +func mapping(a []string) map[string]string { + res := make(map[string]string) + letter := "" + for _, v := range a { + letter = string(v[0] - 32) + res[v] = letter + letter = "" + } + return res } diff --git a/exercise2/problem5/problem5.go b/exercise2/problem5/problem5.go index 43fb96a4..9979cbbd 100644 --- a/exercise2/problem5/problem5.go +++ b/exercise2/problem5/problem5.go @@ -1,4 +1,20 @@ package problem5 -func products() { +import "sort" + +func products(goods map[string]int, num int) []string { + filtered := []string{} + + for product, price := range goods { + if price >= num { + filtered = append(filtered, product) + } + } + sort.Slice(filtered, func(i, j int) bool { + if goods[filtered[i]] != goods[filtered[j]] { + return goods[filtered[i]] > goods[filtered[j]] + } + return filtered[i] < filtered[j] + }) + return filtered } diff --git a/exercise2/problem6/problem6.go b/exercise2/problem6/problem6.go index 89fc5bfe..71290fb5 100644 --- a/exercise2/problem6/problem6.go +++ b/exercise2/problem6/problem6.go @@ -1,4 +1,18 @@ package problem6 -func sumOfTwo() { +func sumOfTwo(a []int, b []int, v int) bool { + + bMap := make(map[int]struct{}) + for _, num := range b { + bMap[num] = struct{}{} + } + + for _, num := range a { + complement := v - num + if _, exists := bMap[complement]; exists { + return true + } + } + + return false } diff --git a/exercise2/problem7/problem7.go b/exercise2/problem7/problem7.go index 32514209..2b46bb48 100644 --- a/exercise2/problem7/problem7.go +++ b/exercise2/problem7/problem7.go @@ -1,4 +1,9 @@ package problem7 -func swap() { +func swap(a *int, b *int) { + newa := *a + newb := *b + *a = newb + *b = newa + } diff --git a/exercise2/problem8/problem8.go b/exercise2/problem8/problem8.go index 9389d3b0..616f87fb 100644 --- a/exercise2/problem8/problem8.go +++ b/exercise2/problem8/problem8.go @@ -1,16 +1,13 @@ package problem8 func simplify(list []string) map[string]int { - var indMap map[string]int - - indMap = make(map[string]int) - load(&indMap, &list) - + indMap := make(map[string]int) + load(indMap, list) return indMap } -func load(m *map[string]int, students *[]string) { - for i, name := range *students { - (*m)[name] = i +func load(m map[string]int, students []string) { + for i, name := range students { + (m)[name] = i } } diff --git a/exercise2/problem9/problem9.go b/exercise2/problem9/problem9.go index fc96d21a..857f3410 100644 --- a/exercise2/problem9/problem9.go +++ b/exercise2/problem9/problem9.go @@ -1,3 +1,11 @@ package problem9 -func factory() {} +func factory(num int) func(...int) []int { + return func(number ...int) []int { + res := make([]int, len(number)) + for i, n := range number { + res[i] = n * num + } + return res + } +} diff --git a/exercise3/problem1/problem1.go b/exercise3/problem1/problem1.go index d45605c6..f8bbf136 100644 --- a/exercise3/problem1/problem1.go +++ b/exercise3/problem1/problem1.go @@ -1,3 +1,34 @@ package problem1 -type Queue struct{} +import ( + "errors" +) + +type Queue struct { + elment []any +} + +func (q *Queue) Enqueue(elment any) { + q.elment = append(q.elment, elment) +} +func (q *Queue) Dequeue() (any, error) { + if q.elment == nil { + return nil, errors.New("err") + } + first := q.elment[0] + q.elment = q.elment[1:] + return first, nil + +} +func (q *Queue) Peek() (any, error) { + if q.elment == nil { + return nil, errors.New("err") + } + return q.elment[0], nil +} +func (q *Queue) Size() int { + return len(q.elment) +} +func (q *Queue) IsEmpty() bool { + return len(q.elment) == 0 +} diff --git a/exercise3/problem2/problem2.go b/exercise3/problem2/problem2.go index e9059889..cb5ad9d4 100644 --- a/exercise3/problem2/problem2.go +++ b/exercise3/problem2/problem2.go @@ -1,3 +1,32 @@ package problem2 -type Stack struct{} +import "errors" + +type Stack struct { + data []any +} + +func (s *Stack) Push(elem any) { + s.data = append(s.data, elem) +} + +func (s *Stack) Size() int { + return len(s.data) +} +func (s *Stack) Pop() (any, error) { + if s.data == nil { + return nil, errors.New("err") + } + last := s.data[len(s.data)-1] + s.data = s.data[:len(s.data)-1] + return last, nil +} +func (s *Stack) Peek() (any, error) { + if s.data == nil { + return nil, errors.New("err") + } + return s.data[len(s.data)-1], nil +} +func (s *Stack) IsEmpty() bool { + return len(s.data) == 0 +} diff --git a/exercise3/problem3/problem3.go b/exercise3/problem3/problem3.go index d8d79ac0..12652f42 100644 --- a/exercise3/problem3/problem3.go +++ b/exercise3/problem3/problem3.go @@ -1,3 +1,112 @@ package problem3 -type Set struct{} +type Set struct { + data []any +} + +func NewSet() *Set { + return &Set{} +} + +func (s *Set) Add(new any) { + + if !s.Has(new) { + s.data = append(s.data, new) + } + +} +func (s *Set) Remove(deleted any) { + if s.data == nil { + return + } + + if len(s.data) == 1 { + s.data = nil + return + } + if s.data[len(s.data)-1] == deleted { + s.data = s.data[:len(s.data)-1] + return + } + for i, v := range s.data { + + if v == deleted { + s.data = append(s.data[:i], s.data[i+1:]...) + } + } +} +func (s *Set) IsEmpty() bool { + return s.data == nil +} +func (s *Set) Size() int { + return len(s.data) +} +func (s *Set) Has(correspond any) bool { + for _, v := range s.data { + if v == correspond { + return true + } + } + return false +} +func (s *Set) Copy() *Set { + newset := s + return newset + +} +func (s *Set) Difference(diff *Set) Set { + res := Set{} + for _, v := range s.data { + if !diff.Has(v) { + res.Add(v) + } + } + return res +} +func (s *Set) IsSubset(subs *Set) bool { + if subs.Size() == 0 { + return true + } + + for _, v := range s.data { + if !subs.Has(v) { + return false + } + } + return true +} + +func Union(uni ...*Set) Set { + var newany Set + + return newany +} +func Intersect(inter ...*Set) Set { + if len(inter) == 0 { + return Set{} + } + + var lastany Set + // newany := []any{} + // for _, v := range inter { + // } + + // } + return lastany +} +func (s *Set) List() []any { + var newany []any + var lastany any + for _, v := range s.data { + if v == lastany { + lastany = nil + continue + } else { + newany = append(newany, v) + lastany = v + + } + + } + return newany +} diff --git a/exercise3/problem5/problem5.go b/exercise3/problem5/problem5.go index 4177599f..fd36e726 100644 --- a/exercise3/problem5/problem5.go +++ b/exercise3/problem5/problem5.go @@ -1,3 +1,18 @@ package problem5 -type Person struct{} +import "fmt" + +type Person struct { + Name string + Age int +} + +func (p *Person) compareAge(other *Person) string { + if p.Age > other.Age { + return fmt.Sprintf("%s is younger than me.", other.Name) + } else if p.Age < other.Age { + return fmt.Sprintf("%s is older than me.", other.Name) + } else { + return fmt.Sprintf("%s is the same age as me.", other.Name) + } +} diff --git a/exercise3/problem6/problem6.go b/exercise3/problem6/problem6.go index 4e8d1af8..83da537b 100644 --- a/exercise3/problem6/problem6.go +++ b/exercise3/problem6/problem6.go @@ -1,7 +1,15 @@ package problem6 -type Animal struct{} +type Animal struct { + name string + legsNum int +} -type Insect struct{} +type Insect struct { + name string + legsNum int +} -func sumOfAllLegsNum() {} +func sumOfAllLegsNum(horse, kangaroo *Animal, ant, spider *Insect) int { + return horse.legsNum + kangaroo.legsNum + ant.legsNum + spider.legsNum +} diff --git a/exercise3/problem7/problem7.go b/exercise3/problem7/problem7.go index 26887151..93f31cc2 100644 --- a/exercise3/problem7/problem7.go +++ b/exercise3/problem7/problem7.go @@ -1,10 +1,51 @@ package problem7 +type Sender interface { + send(name string) +} type BankAccount struct { + name string + balance int } type FedexAccount struct { + name string + packages []string } type KazPostAccount struct { + name string + packages []string + balance int +} +type withdrawable interface { + withdrow(money int) bool +} + +func withdrawMoney(money int, account ...withdrawable) { + for _, v := range account { + v.withdrow(money) + } +} +func sendPackagesTo(to string, fedex *FedexAccount, kaz *KazPostAccount) { + message := fedex.name + " send package to " + to + fedex.packages = append(fedex.packages, message) + + kazpostmesage := kaz.name + " send package to " + to + kaz.packages = append(kaz.packages, kazpostmesage) +} +func (k *KazPostAccount) withdrow(money int) bool { + if k.balance >= money { + k.balance -= money + return true + } + return false +} + +func (b *BankAccount) withdrow(money int) bool { + if b.balance >= money { + b.balance -= money + return true + } + return false } diff --git a/exercise4/bot/join.go b/exercise4/bot/join.go new file mode 100644 index 00000000..bd69771e --- /dev/null +++ b/exercise4/bot/join.go @@ -0,0 +1,43 @@ +package main + +import ( + "bytes" + "encoding/json" + "log" + "net/http" +) + +type Player struct { + Name string `json:"name"` + URL string `json:"url"` +} + +func NewPlayer(name, port string) *Player { + return &Player{ + Name: name, + URL: "http://localhost:" + port, + } +} + +func JoinHandler() { + player := NewPlayer(PlayerName, Port) + + path := "http://localhost:4444/join" + jsonData, err := json.Marshal(player) + if err != nil { + log.Fatalf("Error during serialization: %v", err) + } + + resp, err := http.Post(path, "application/json", bytes.NewBuffer(jsonData)) + if err != nil { + log.Println("Error ping request:", err) + return + } + defer resp.Body.Close() + + if resp.StatusCode == http.StatusNoContent { + log.Println("Success join") + } else { + log.Println("Not success join", resp.StatusCode) + } +} diff --git a/exercise4/bot/main.go b/exercise4/bot/main.go index 64f9e0a3..598e5be4 100644 --- a/exercise4/bot/main.go +++ b/exercise4/bot/main.go @@ -1,19 +1,36 @@ package main import ( - "context" + "net/http" "os" "os/signal" "syscall" ) +var ( + PlayerName string + Port string +) + func main() { - ctx := context.Background() + Port = os.Getenv("PORT") + PlayerName = os.Getenv("NAME") + + if Port == "" { + Port = "8080" + } + + if PlayerName == "" { + PlayerName = "PLayer:" + Port + } ready := startServer() <-ready - // TODO after server start + go JoinHandler() + + http.HandleFunc("GET /ping", ping) + http.HandleFunc("POST /move", MoveBoard) stop := make(chan os.Signal, 1) signal.Notify(stop, os.Interrupt, syscall.SIGTERM) diff --git a/exercise4/bot/move.go b/exercise4/bot/move.go new file mode 100644 index 00000000..f3428cb2 --- /dev/null +++ b/exercise4/bot/move.go @@ -0,0 +1,95 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "io" + "log" + "math/rand" + "net/http" + "time" +) + +type Token string + +const ( + Cols = 3 + Rows = 3 +) + +const ( + TokenEmpty Token = " " + TokenX Token = "x" + TokenO Token = "o" +) + +type RequestMove struct { + Board *Board `json:"board"` + Token Token `json:"token"` +} + +func newRequestMove() *RequestMove { + return &RequestMove{} +} + +type Board [Cols * Rows]Token + +type ResponseMove struct { + Index int `json:"index"` +} + +func newResponseMove() *ResponseMove { + return &ResponseMove{} +} + +func MoveBoard(w http.ResponseWriter, r *http.Request) { + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + defer cancel() + requestMove := newRequestMove() + + body, err := io.ReadAll(r.Body) + if err != nil { + http.Error(w, "Failed to read request body", http.StatusInternalServerError) + return + } + defer func(Body io.ReadCloser) { + err := Body.Close() + if err != nil { + } + }(r.Body) + + err = json.Unmarshal(body, &requestMove) + if err != nil { + fmt.Println("JSON unmarshalling error") + } + + select { + case <-ctx.Done(): + http.Error(w, "Execution time expired", http.StatusGatewayTimeout) + return + default: + responseMove := newResponseMove() + //smart bot loop + for { + i := rand.Intn(9) + if requestMove.Board[i] == TokenEmpty { + responseMove.Index = i + break + } + } + + jsonData, err := json.Marshal(responseMove) + if err != nil { + http.Error(w, "JSON serialization error", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + _, err = w.Write(jsonData) + if err != nil { + log.Println("Error writing response:", err) + return + } + } +} diff --git a/exercise4/bot/ping.go b/exercise4/bot/ping.go new file mode 100644 index 00000000..5a4c97e4 --- /dev/null +++ b/exercise4/bot/ping.go @@ -0,0 +1,15 @@ +package main + +import ( + "fmt" + "log" + "net/http" +) + +func ping(w http.ResponseWriter, r *http.Request) { + _, err := fmt.Fprintf(w, "pong") + if err != nil { + log.Println(err) + return + } +} diff --git a/exercise4/bot/server.go b/exercise4/bot/server.go index e6760ec5..8a41786b 100644 --- a/exercise4/bot/server.go +++ b/exercise4/bot/server.go @@ -5,7 +5,6 @@ import ( "fmt" "net" "net/http" - "os" "sync" "time" ) @@ -24,7 +23,7 @@ func (l *readyListener) Accept() (net.Conn, error) { func startServer() <-chan struct{} { ready := make(chan struct{}) - listener, err := net.Listen("tcp", fmt.Sprintf(":%s", os.Getenv("PORT"))) + listener, err := net.Listen("tcp", fmt.Sprintf(":%s", Port)) if err != nil { panic(err) } diff --git a/exercise5/problem1/problem1.go b/exercise5/problem1/problem1.go index 4f514fab..5ceb3f21 100644 --- a/exercise5/problem1/problem1.go +++ b/exercise5/problem1/problem1.go @@ -1,9 +1,14 @@ package problem1 +import "sync" + func incrementConcurrently(num int) int { + var wg sync.WaitGroup + wg.Add(1) go func() { + defer wg.Done() num++ }() - + wg.Wait() return num } diff --git a/exercise5/problem3/problem3.go b/exercise5/problem3/problem3.go index e085a51a..4f55e3ad 100644 --- a/exercise5/problem3/problem3.go +++ b/exercise5/problem3/problem3.go @@ -1,11 +1,12 @@ package problem3 func sum(a, b int) int { - var c int + channel := make(chan int) go func(a, b int) { - c = a + b + sum := a + b + channel <- sum }(a, b) - + c := <-channel return c } diff --git a/exercise5/problem4/problem4.go b/exercise5/problem4/problem4.go index b5899ddf..c2d93e2c 100644 --- a/exercise5/problem4/problem4.go +++ b/exercise5/problem4/problem4.go @@ -3,7 +3,9 @@ package problem4 func iter(ch chan<- int, nums []int) { for _, n := range nums { ch <- n + } + close(ch) } func sum(nums []int) int { diff --git a/exercise5/problem5/problem5.go b/exercise5/problem5/problem5.go index ac192c58..8a993ca4 100644 --- a/exercise5/problem5/problem5.go +++ b/exercise5/problem5/problem5.go @@ -1,8 +1,27 @@ package problem5 -func producer() {} +import "strings" -func consumer() {} +func producer(words []string, word chan<- string) { + + for _, val := range words { + word <- val + } + defer close(word) +} + +func consumer(word <-chan string) string { + var res string + for val := range word { + + if len(val) > 0 { + res += " " + } + res += val + } + res = strings.Trim(res, " ") + return res +} func send( words []string, diff --git a/exercise5/problem7/problem7.go b/exercise5/problem7/problem7.go index c3c1d0c9..5572f47c 100644 --- a/exercise5/problem7/problem7.go +++ b/exercise5/problem7/problem7.go @@ -1,3 +1,23 @@ package problem7 -func multiplex(ch1 <-chan string, ch2 <-chan string) []string {} +import "sync" + +func multiplex(ch1 <-chan string, ch2 <-chan string) []string { + var mu sync.Mutex + var wg sync.WaitGroup + + res := []string{} + ReadChannel := func(channel <-chan string) { + defer wg.Done() + for msq := range channel { + mu.Lock() + res = append(res, msq) + mu.Unlock() + } + } + wg.Add(2) + go ReadChannel(ch1) + go ReadChannel(ch2) + wg.Wait() + return res +} diff --git a/exercise5/problem8/problem8.go b/exercise5/problem8/problem8.go index 3e951b3b..8dee69a0 100644 --- a/exercise5/problem8/problem8.go +++ b/exercise5/problem8/problem8.go @@ -4,4 +4,11 @@ import ( "time" ) -func withTimeout(ch <-chan string, ttl time.Duration) string {} +func withTimeout(ch <-chan string, ttl time.Duration) string { + select { + case msq := <-ch: + return msq + case <-time.After(ttl): + return "timeout" + } +} diff --git a/exercise6/problem1/problem1.go b/exercise6/problem1/problem1.go index ee453b24..0085b2f3 100644 --- a/exercise6/problem1/problem1.go +++ b/exercise6/problem1/problem1.go @@ -1,9 +1,30 @@ package problem1 +import "sync" + type bankAccount struct { blnc int + mu sync.Mutex } func newAccount(blnc int) *bankAccount { - return &bankAccount{blnc} + + return &bankAccount{blnc: blnc} +} + +func (b *bankAccount) deposit(plus int) { + b.mu.Lock() + defer b.mu.Unlock() + b.blnc += plus + +} +func (b *bankAccount) withdraw(minus int) bool { + b.mu.Lock() + defer b.mu.Unlock() + if b.blnc >= minus { + b.blnc -= minus + return true + } + return true + } diff --git a/exercise6/problem2/problem2.go b/exercise6/problem2/problem2.go index 97e02368..e4e546e1 100644 --- a/exercise6/problem2/problem2.go +++ b/exercise6/problem2/problem2.go @@ -1,6 +1,7 @@ package problem2 import ( + "sync" "time" ) @@ -8,13 +9,35 @@ var readDelay = 10 * time.Millisecond type bankAccount struct { blnc int + mu sync.Mutex } func newAccount(blnc int) *bankAccount { - return &bankAccount{blnc} + return &bankAccount{blnc: blnc} } func (b *bankAccount) balance() int { - time.Sleep(readDelay) - return 0 + b.mu.Lock() + defer b.mu.Unlock() + // time.Sleep(readDelay) + return b.blnc +} +func (b *bankAccount) deposit(plus int) { + + b.mu.Lock() + defer b.mu.Unlock() + + b.blnc += plus + +} +func (b *bankAccount) withdraw(minus int) bool { + b.mu.Lock() + defer b.mu.Unlock() + + if b.blnc >= minus { + b.blnc -= minus + return true + } + + return false } diff --git a/exercise6/problem3/problem3.go b/exercise6/problem3/problem3.go index b34b90bb..403a6b9e 100644 --- a/exercise6/problem3/problem3.go +++ b/exercise6/problem3/problem3.go @@ -1,5 +1,7 @@ package problem3 +import "sync/atomic" + type counter struct { val int64 } @@ -9,3 +11,12 @@ func newCounter() *counter { val: 0, } } +func (c *counter) inc() { + atomic.AddInt64(&c.val, 1) +} +func (c *counter) dec() { + atomic.AddInt64(&c.val, -1) +} +func (c *counter) value() int64 { + return atomic.LoadInt64(&c.val) +} diff --git a/exercise6/problem4/problem4.go b/exercise6/problem4/problem4.go index 793449c9..21091fe0 100644 --- a/exercise6/problem4/problem4.go +++ b/exercise6/problem4/problem4.go @@ -1,31 +1,45 @@ package problem4 import ( + "sync" "time" ) -func worker(id int, _ *[]string, ch chan<- int) { - // TODO wait for shopping list to be completed - ch <- id +func worker(id int, ready *bool, mu *sync.Mutex, ch chan<- int) { + mu.Lock() + defer mu.Unlock() + + for !*ready { + mu.Unlock() + time.Sleep(time.Millisecond) + mu.Lock() + } + + if id == 1 { + ch <- id + } } -func updateShopList(shoppingList *[]string) { +func updateShopList(shoppingList *[]string, ready *bool, mu *sync.Mutex) { time.Sleep(10 * time.Millisecond) - *shoppingList = append(*shoppingList, "apples") - *shoppingList = append(*shoppingList, "milk") - *shoppingList = append(*shoppingList, "bake soda") + mu.Lock() + *shoppingList = append(*shoppingList, "apples", "milk", "bake soda") + *ready = true + mu.Unlock() } func notifyOnShopListUpdate(shoppingList *[]string, numWorkers int) <-chan int { notifier := make(chan int) + ready := false + var mu sync.Mutex - for i := range numWorkers { - go worker(i+1, shoppingList, notifier) - time.Sleep(time.Millisecond) // order matters + for i := 0; i < numWorkers; i++ { + go worker(i+1, &ready, &mu, notifier) + time.Sleep(time.Millisecond) } - go updateShopList(shoppingList) + go updateShopList(shoppingList, &ready, &mu) return notifier } diff --git a/exercise6/problem5/README.md b/exercise6/problem5/README.md index 9454cedf..f88cfc21 100644 --- a/exercise6/problem5/README.md +++ b/exercise6/problem5/README.md @@ -1,5 +1,3 @@ # Problem 5 -We have a several workers waiting for shopping list to fill. When shopping list filled **all** in a queue workers -should notify. Please update the code so the `notifier` will send **all** workers id when `shoppingList` is ready. Do -not use channels. +We have a several workers waiting for shopping list to fill. When shopping list filled **all** in a queue workers should notify. Please update the code so the `notifier` will send **all** workers id when `shoppingList` is ready. Do not use channels. diff --git a/exercise6/problem5/problem5.go b/exercise6/problem5/problem5.go index 8e4a1703..a6a6d3fa 100644 --- a/exercise6/problem5/problem5.go +++ b/exercise6/problem5/problem5.go @@ -1,31 +1,58 @@ package problem5 import ( + "fmt" + "sync" "time" ) -func worker(id int, shoppingList *[]string, ch chan<- int) { +func worker(id int, shoppingList *[]string, ch chan<- int, mu *sync.Mutex, wg *sync.WaitGroup, ready *bool) { + defer wg.Done() + for { + mu.Lock() + if *ready { + fmt.Println(321) + ch <- id + + mu.Unlock() + return + } + fmt.Println(654) + mu.Unlock() + + time.Sleep(10 * time.Millisecond) + } + // TODO wait for shopping list to be completed - ch <- id } -func updateShopList(shoppingList *[]string) { +func updateShopList(shoppingList *[]string, mu *sync.Mutex, ready *bool) { time.Sleep(10 * time.Millisecond) - + mu.Lock() + fmt.Println(987) *shoppingList = append(*shoppingList, "apples") *shoppingList = append(*shoppingList, "milk") *shoppingList = append(*shoppingList, "bake soda") + *ready = true + mu.Unlock() } func notifyOnShopListUpdate(shoppingList *[]string, numWorkers int) <-chan int { + mu := &sync.Mutex{} + var wg sync.WaitGroup notifier := make(chan int) - + ready := false for i := range numWorkers { - go worker(i+1, shoppingList, notifier) + wg.Add(1) + go worker(i, shoppingList, notifier, mu, &wg, &ready) time.Sleep(time.Millisecond) // order matters } - go updateShopList(shoppingList) - + go func() { + updateShopList(shoppingList, mu, &ready) + wg.Wait() + close(notifier) + }() + defer close(notifier) return notifier } diff --git a/exercise7/blogging-platform/.dockerignore b/exercise7/blogging-platform/.dockerignore new file mode 100644 index 00000000..9e03c484 --- /dev/null +++ b/exercise7/blogging-platform/.dockerignore @@ -0,0 +1,32 @@ +# Include any files or directories that you don't want to be copied to your +# container here (e.g., local build artifacts, temporary files, etc.). +# +# For more help, visit the .dockerignore file reference guide at +# https://docs.docker.com/go/build-context-dockerignore/ + +**/.DS_Store +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/bin +**/charts +**/docker-compose* +**/compose.y*ml +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md diff --git a/exercise7/blogging-platform/.gitignore b/exercise7/blogging-platform/.gitignore new file mode 100644 index 00000000..6f72f892 --- /dev/null +++ b/exercise7/blogging-platform/.gitignore @@ -0,0 +1,25 @@ +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work +go.work.sum + +# env file +.env diff --git a/exercise7/blogging-platform/Dockerfile b/exercise7/blogging-platform/Dockerfile new file mode 100644 index 00000000..92350cec --- /dev/null +++ b/exercise7/blogging-platform/Dockerfile @@ -0,0 +1,78 @@ +# syntax=docker/dockerfile:1 + +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/go/dockerfile-reference/ + +# Want to help us make this template better? Share your feedback here: https://forms.gle/ybq9Krt8jtBL3iCk7 + +################################################################################ +# Create a stage for building the application. +ARG GO_VERSION=1.23 +FROM --platform=$BUILDPLATFORM golang:${GO_VERSION} AS build +WORKDIR /src + +# Download dependencies as a separate step to take advantage of Docker's caching. +# Leverage a cache mount to /go/pkg/mod/ to speed up subsequent builds. +# Leverage bind mounts to go.sum and go.mod to avoid having to copy them into +# the container. +RUN --mount=type=cache,target=/go/pkg/mod/ \ + --mount=type=bind,source=go.sum,target=go.sum \ + --mount=type=bind,source=go.mod,target=go.mod \ + go mod download -x + +# This is the architecture you're building for, which is passed in by the builder. +# Placing it here allows the previous steps to be cached across architectures. +ARG TARGETARCH + +# Build the application. +# Leverage a cache mount to /go/pkg/mod/ to speed up subsequent builds. +# Leverage a bind mount to the current directory to avoid having to copy the +# source code into the container. +RUN --mount=type=cache,target=/go/pkg/mod/ \ + --mount=type=bind,target=. \ + CGO_ENABLED=0 GOARCH=$TARGETARCH go build -o /bin/server . + +################################################################################ +# Create a new stage for running the application that contains the minimal +# runtime dependencies for the application. This often uses a different base +# image from the build stage where the necessary files are copied from the build +# stage. +# +# The example below uses the alpine image as the foundation for running the app. +# By specifying the "latest" tag, it will also use whatever happens to be the +# most recent version of that image when you build your Dockerfile. If +# reproducability is important, consider using a versioned tag +# (e.g., alpine:3.17.2) or SHA (e.g., alpine@sha256:c41ab5c992deb4fe7e5da09f67a8804a46bd0592bfdf0b1847dde0e0889d2bff). +FROM alpine:latest AS final + +# Install any runtime dependencies that are needed to run your application. +# Leverage a cache mount to /var/cache/apk/ to speed up subsequent builds. +RUN --mount=type=cache,target=/var/cache/apk \ + apk --update add \ + ca-certificates \ + tzdata \ + && \ + update-ca-certificates + +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/go/dockerfile-user-best-practices/ +ARG UID=10001 +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser +USER appuser + +# Copy the executable from the "build" stage. +COPY --from=build /bin/server /bin/ + +# Expose the port that the application listens on. +EXPOSE 80 + +# What the container should run when it is started. +ENTRYPOINT [ "/bin/server" ] \ No newline at end of file diff --git a/exercise7/blogging-platform/README.Docker.md b/exercise7/blogging-platform/README.Docker.md new file mode 100644 index 00000000..3bf66ee3 --- /dev/null +++ b/exercise7/blogging-platform/README.Docker.md @@ -0,0 +1,22 @@ +### Building and running your application + +When you're ready, start your application by running: +`docker compose up --build`. + +Your application will be available at http://localhost:8080. + +### Deploying your application to the cloud + +First, build your image, e.g.: `docker build -t myapp .`. +If your cloud uses a different CPU architecture than your development +machine (e.g., you are on a Mac M1 and your cloud provider is amd64), +you'll want to build the image for that platform, e.g.: +`docker build --platform=linux/amd64 -t myapp .`. + +Then, push it to your registry, e.g. `docker push myregistry.com/myapp`. + +Consult Docker's [getting started](https://docs.docker.com/go/get-started-sharing/) +docs for more detail on building and pushing. + +### References +* [Docker's Go guide](https://docs.docker.com/language/golang/) \ No newline at end of file diff --git a/exercise7/blogging-platform/compose.yaml b/exercise7/blogging-platform/compose.yaml new file mode 100644 index 00000000..8897fcd1 --- /dev/null +++ b/exercise7/blogging-platform/compose.yaml @@ -0,0 +1,52 @@ +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Docker Compose reference guide at +# https://docs.docker.com/go/compose-spec-reference/ + +# Here the instructions define your application as a service called "server". +# This service is built from the Dockerfile in the current directory. +# You can add other services your application may depend on here, such as a +# database or a cache. For examples, see the Awesome Compose repository: +# https://github.com/docker/awesome-compose +services: + server: + build: + context: . + target: final + environment: + - API_PORT=80 + - DB_HOST=db + - DB_PORT=5432 + - DB_NAME=$DB_NAME + - DB_USER=$DB_USER + - DB_PASSWORD=$DB_PASSWORD + ports: + - ${API_PORT}:80 + depends_on: + db: + condition: service_healthy + + db: + image: postgres + restart: always + volumes: + - ./db-data:/var/lib/postgresql/data + environment: + - POSTGRES_DB=$DB_NAME + - POSTGRES_USER=$DB_USER + - POSTGRES_PASSWORD=$DB_PASSWORD + ports: + - ${DB_PORT}:5432 + healthcheck: + test: [ "CMD", "pg_isready" ] + interval: 10s + timeout: 5s + retries: 5 +volumes: + db-data: + +# The commented out section below is an example of how to define a PostgreSQL +# database that your application can use. `depends_on` tells Docker Compose to +# start the database before your application. The `db-data` volume persists the +# database data between container restarts. The `db-password` secret is used +# to set the database password. You must create `db/password.txt` and add +# a password of your choosing to it before running `docker compose up`. \ No newline at end of file diff --git a/exercise7/blogging-platform/db-data/PG_VERSION b/exercise7/blogging-platform/db-data/PG_VERSION new file mode 100644 index 00000000..98d9bcb7 --- /dev/null +++ b/exercise7/blogging-platform/db-data/PG_VERSION @@ -0,0 +1 @@ +17 diff --git a/exercise7/blogging-platform/db-data/base/1/112 b/exercise7/blogging-platform/db-data/base/1/112 new file mode 100644 index 00000000..9531ca83 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/112 differ diff --git a/exercise7/blogging-platform/db-data/base/1/113 b/exercise7/blogging-platform/db-data/base/1/113 new file mode 100644 index 00000000..f92630d0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/113 differ diff --git a/exercise7/blogging-platform/db-data/base/1/1247 b/exercise7/blogging-platform/db-data/base/1/1247 new file mode 100644 index 00000000..57c01753 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1247 differ diff --git a/exercise7/blogging-platform/db-data/base/1/1247_fsm b/exercise7/blogging-platform/db-data/base/1/1247_fsm new file mode 100644 index 00000000..fd573083 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1247_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/1247_vm b/exercise7/blogging-platform/db-data/base/1/1247_vm new file mode 100644 index 00000000..0060a0d7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1247_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/1249 b/exercise7/blogging-platform/db-data/base/1/1249 new file mode 100644 index 00000000..8353f118 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1249 differ diff --git a/exercise7/blogging-platform/db-data/base/1/1249_fsm b/exercise7/blogging-platform/db-data/base/1/1249_fsm new file mode 100644 index 00000000..e0ed4b02 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1249_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/1249_vm b/exercise7/blogging-platform/db-data/base/1/1249_vm new file mode 100644 index 00000000..30c75519 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1249_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/1255 b/exercise7/blogging-platform/db-data/base/1/1255 new file mode 100644 index 00000000..20a0dc05 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1255 differ diff --git a/exercise7/blogging-platform/db-data/base/1/1255_fsm b/exercise7/blogging-platform/db-data/base/1/1255_fsm new file mode 100644 index 00000000..062bfc5b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1255_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/1255_vm b/exercise7/blogging-platform/db-data/base/1/1255_vm new file mode 100644 index 00000000..41e0e3d1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1255_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/1259 b/exercise7/blogging-platform/db-data/base/1/1259 new file mode 100644 index 00000000..14f33e89 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1259 differ diff --git a/exercise7/blogging-platform/db-data/base/1/1259_fsm b/exercise7/blogging-platform/db-data/base/1/1259_fsm new file mode 100644 index 00000000..2077a7b0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1259_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/1259_vm b/exercise7/blogging-platform/db-data/base/1/1259_vm new file mode 100644 index 00000000..d9a0447a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/1259_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/13402 b/exercise7/blogging-platform/db-data/base/1/13402 new file mode 100644 index 00000000..0a380807 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13402 differ diff --git a/exercise7/blogging-platform/db-data/base/1/13402_fsm b/exercise7/blogging-platform/db-data/base/1/13402_fsm new file mode 100644 index 00000000..45338f1e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13402_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/13402_vm b/exercise7/blogging-platform/db-data/base/1/13402_vm new file mode 100644 index 00000000..415c20fc Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13402_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/13405 b/exercise7/blogging-platform/db-data/base/1/13405 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/13406 b/exercise7/blogging-platform/db-data/base/1/13406 new file mode 100644 index 00000000..61968fde Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13406 differ diff --git a/exercise7/blogging-platform/db-data/base/1/13407 b/exercise7/blogging-platform/db-data/base/1/13407 new file mode 100644 index 00000000..ae12b607 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13407 differ diff --git a/exercise7/blogging-platform/db-data/base/1/13407_fsm b/exercise7/blogging-platform/db-data/base/1/13407_fsm new file mode 100644 index 00000000..ce7c26eb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13407_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/13407_vm b/exercise7/blogging-platform/db-data/base/1/13407_vm new file mode 100644 index 00000000..fb8ff1c0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13407_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/13410 b/exercise7/blogging-platform/db-data/base/1/13410 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/13411 b/exercise7/blogging-platform/db-data/base/1/13411 new file mode 100644 index 00000000..1441969e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13411 differ diff --git a/exercise7/blogging-platform/db-data/base/1/13412 b/exercise7/blogging-platform/db-data/base/1/13412 new file mode 100644 index 00000000..2af8847a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13412 differ diff --git a/exercise7/blogging-platform/db-data/base/1/13412_fsm b/exercise7/blogging-platform/db-data/base/1/13412_fsm new file mode 100644 index 00000000..0673adae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13412_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/13412_vm b/exercise7/blogging-platform/db-data/base/1/13412_vm new file mode 100644 index 00000000..ebd5a5aa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13412_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/13415 b/exercise7/blogging-platform/db-data/base/1/13415 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/13416 b/exercise7/blogging-platform/db-data/base/1/13416 new file mode 100644 index 00000000..e43a6668 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13416 differ diff --git a/exercise7/blogging-platform/db-data/base/1/13417 b/exercise7/blogging-platform/db-data/base/1/13417 new file mode 100644 index 00000000..e126e7ff Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13417 differ diff --git a/exercise7/blogging-platform/db-data/base/1/13417_fsm b/exercise7/blogging-platform/db-data/base/1/13417_fsm new file mode 100644 index 00000000..a836ddf7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13417_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/13417_vm b/exercise7/blogging-platform/db-data/base/1/13417_vm new file mode 100644 index 00000000..b2366f4d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13417_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/13420 b/exercise7/blogging-platform/db-data/base/1/13420 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/13421 b/exercise7/blogging-platform/db-data/base/1/13421 new file mode 100644 index 00000000..35abe5f1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/13421 differ diff --git a/exercise7/blogging-platform/db-data/base/1/1417 b/exercise7/blogging-platform/db-data/base/1/1417 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/1418 b/exercise7/blogging-platform/db-data/base/1/1418 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/174 b/exercise7/blogging-platform/db-data/base/1/174 new file mode 100644 index 00000000..4f4d8bed Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/174 differ diff --git a/exercise7/blogging-platform/db-data/base/1/175 b/exercise7/blogging-platform/db-data/base/1/175 new file mode 100644 index 00000000..98fd8de8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/175 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2187 b/exercise7/blogging-platform/db-data/base/1/2187 new file mode 100644 index 00000000..141f7eeb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2187 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2224 b/exercise7/blogging-platform/db-data/base/1/2224 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/2228 b/exercise7/blogging-platform/db-data/base/1/2228 new file mode 100644 index 00000000..bfecf011 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2228 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2328 b/exercise7/blogging-platform/db-data/base/1/2328 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/2336 b/exercise7/blogging-platform/db-data/base/1/2336 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/2337 b/exercise7/blogging-platform/db-data/base/1/2337 new file mode 100644 index 00000000..e647f387 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2337 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2579 b/exercise7/blogging-platform/db-data/base/1/2579 new file mode 100644 index 00000000..bf95468a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2579 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2600 b/exercise7/blogging-platform/db-data/base/1/2600 new file mode 100644 index 00000000..9dfd1a85 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2600 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2600_fsm b/exercise7/blogging-platform/db-data/base/1/2600_fsm new file mode 100644 index 00000000..c542a78b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2600_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2600_vm b/exercise7/blogging-platform/db-data/base/1/2600_vm new file mode 100644 index 00000000..3b53bade Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2600_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2601 b/exercise7/blogging-platform/db-data/base/1/2601 new file mode 100644 index 00000000..d8001c8c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2601 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2601_fsm b/exercise7/blogging-platform/db-data/base/1/2601_fsm new file mode 100644 index 00000000..d388044f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2601_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2601_vm b/exercise7/blogging-platform/db-data/base/1/2601_vm new file mode 100644 index 00000000..117547dd Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2601_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2602 b/exercise7/blogging-platform/db-data/base/1/2602 new file mode 100644 index 00000000..4a27b0a3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2602 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2602_fsm b/exercise7/blogging-platform/db-data/base/1/2602_fsm new file mode 100644 index 00000000..23170d85 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2602_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2602_vm b/exercise7/blogging-platform/db-data/base/1/2602_vm new file mode 100644 index 00000000..ce836831 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2602_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2603 b/exercise7/blogging-platform/db-data/base/1/2603 new file mode 100644 index 00000000..d511af56 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2603 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2603_fsm b/exercise7/blogging-platform/db-data/base/1/2603_fsm new file mode 100644 index 00000000..949bd18f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2603_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2603_vm b/exercise7/blogging-platform/db-data/base/1/2603_vm new file mode 100644 index 00000000..a2dbc751 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2603_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2604 b/exercise7/blogging-platform/db-data/base/1/2604 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/2605 b/exercise7/blogging-platform/db-data/base/1/2605 new file mode 100644 index 00000000..eeaa7eaa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2605 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2605_fsm b/exercise7/blogging-platform/db-data/base/1/2605_fsm new file mode 100644 index 00000000..f3b92bf7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2605_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2605_vm b/exercise7/blogging-platform/db-data/base/1/2605_vm new file mode 100644 index 00000000..96f1f7bc Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2605_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2606 b/exercise7/blogging-platform/db-data/base/1/2606 new file mode 100644 index 00000000..70d1f555 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2606 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2606_fsm b/exercise7/blogging-platform/db-data/base/1/2606_fsm new file mode 100644 index 00000000..267454e7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2606_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2606_vm b/exercise7/blogging-platform/db-data/base/1/2606_vm new file mode 100644 index 00000000..2b1e2ce5 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2606_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2607 b/exercise7/blogging-platform/db-data/base/1/2607 new file mode 100644 index 00000000..bfad49ae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2607 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2607_fsm b/exercise7/blogging-platform/db-data/base/1/2607_fsm new file mode 100644 index 00000000..80ac8b14 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2607_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2607_vm b/exercise7/blogging-platform/db-data/base/1/2607_vm new file mode 100644 index 00000000..5ffcc070 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2607_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2608 b/exercise7/blogging-platform/db-data/base/1/2608 new file mode 100644 index 00000000..98a75530 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2608 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2608_fsm b/exercise7/blogging-platform/db-data/base/1/2608_fsm new file mode 100644 index 00000000..4b197851 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2608_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2608_vm b/exercise7/blogging-platform/db-data/base/1/2608_vm new file mode 100644 index 00000000..7d08bb09 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2608_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2609 b/exercise7/blogging-platform/db-data/base/1/2609 new file mode 100644 index 00000000..44f39b72 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2609 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2609_fsm b/exercise7/blogging-platform/db-data/base/1/2609_fsm new file mode 100644 index 00000000..fc288908 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2609_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2609_vm b/exercise7/blogging-platform/db-data/base/1/2609_vm new file mode 100644 index 00000000..62a4d542 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2609_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2610 b/exercise7/blogging-platform/db-data/base/1/2610 new file mode 100644 index 00000000..95ac760b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2610 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2610_fsm b/exercise7/blogging-platform/db-data/base/1/2610_fsm new file mode 100644 index 00000000..ecbcb5fa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2610_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2610_vm b/exercise7/blogging-platform/db-data/base/1/2610_vm new file mode 100644 index 00000000..9aeb6f80 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2610_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2611 b/exercise7/blogging-platform/db-data/base/1/2611 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/2612 b/exercise7/blogging-platform/db-data/base/1/2612 new file mode 100644 index 00000000..66d433c3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2612 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2612_fsm b/exercise7/blogging-platform/db-data/base/1/2612_fsm new file mode 100644 index 00000000..877976ac Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2612_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2612_vm b/exercise7/blogging-platform/db-data/base/1/2612_vm new file mode 100644 index 00000000..1ade0f97 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2612_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2613 b/exercise7/blogging-platform/db-data/base/1/2613 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/2615 b/exercise7/blogging-platform/db-data/base/1/2615 new file mode 100644 index 00000000..286f33f0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2615 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2615_fsm b/exercise7/blogging-platform/db-data/base/1/2615_fsm new file mode 100644 index 00000000..d041693e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2615_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2615_vm b/exercise7/blogging-platform/db-data/base/1/2615_vm new file mode 100644 index 00000000..9cbe6e1e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2615_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2616 b/exercise7/blogging-platform/db-data/base/1/2616 new file mode 100644 index 00000000..0d60d797 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2616 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2616_fsm b/exercise7/blogging-platform/db-data/base/1/2616_fsm new file mode 100644 index 00000000..cb924c95 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2616_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2616_vm b/exercise7/blogging-platform/db-data/base/1/2616_vm new file mode 100644 index 00000000..0d2f91ea Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2616_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2617 b/exercise7/blogging-platform/db-data/base/1/2617 new file mode 100644 index 00000000..bcdfc183 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2617 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2617_fsm b/exercise7/blogging-platform/db-data/base/1/2617_fsm new file mode 100644 index 00000000..29d60666 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2617_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2617_vm b/exercise7/blogging-platform/db-data/base/1/2617_vm new file mode 100644 index 00000000..ffacdf58 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2617_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2618 b/exercise7/blogging-platform/db-data/base/1/2618 new file mode 100644 index 00000000..c0e64256 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2618 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2618_fsm b/exercise7/blogging-platform/db-data/base/1/2618_fsm new file mode 100644 index 00000000..6cf107fa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2618_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2618_vm b/exercise7/blogging-platform/db-data/base/1/2618_vm new file mode 100644 index 00000000..8af390e0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2618_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2619 b/exercise7/blogging-platform/db-data/base/1/2619 new file mode 100644 index 00000000..a4dc6fe6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2619 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2619_fsm b/exercise7/blogging-platform/db-data/base/1/2619_fsm new file mode 100644 index 00000000..e80efde4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2619_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2619_vm b/exercise7/blogging-platform/db-data/base/1/2619_vm new file mode 100644 index 00000000..8adec570 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2619_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2620 b/exercise7/blogging-platform/db-data/base/1/2620 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/2650 b/exercise7/blogging-platform/db-data/base/1/2650 new file mode 100644 index 00000000..11ef803f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2650 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2651 b/exercise7/blogging-platform/db-data/base/1/2651 new file mode 100644 index 00000000..bd4bbaf4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2651 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2652 b/exercise7/blogging-platform/db-data/base/1/2652 new file mode 100644 index 00000000..5009d4ae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2652 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2653 b/exercise7/blogging-platform/db-data/base/1/2653 new file mode 100644 index 00000000..db88c69a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2653 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2654 b/exercise7/blogging-platform/db-data/base/1/2654 new file mode 100644 index 00000000..e939ddd9 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2654 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2655 b/exercise7/blogging-platform/db-data/base/1/2655 new file mode 100644 index 00000000..ff2c0d7d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2655 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2656 b/exercise7/blogging-platform/db-data/base/1/2656 new file mode 100644 index 00000000..84b847f7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2656 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2657 b/exercise7/blogging-platform/db-data/base/1/2657 new file mode 100644 index 00000000..887a1b0c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2657 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2658 b/exercise7/blogging-platform/db-data/base/1/2658 new file mode 100644 index 00000000..fdbdc9e3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2658 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2659 b/exercise7/blogging-platform/db-data/base/1/2659 new file mode 100644 index 00000000..be4fca21 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2659 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2660 b/exercise7/blogging-platform/db-data/base/1/2660 new file mode 100644 index 00000000..315985a3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2660 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2661 b/exercise7/blogging-platform/db-data/base/1/2661 new file mode 100644 index 00000000..7ee15f5a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2661 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2662 b/exercise7/blogging-platform/db-data/base/1/2662 new file mode 100644 index 00000000..df1e3da6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2662 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2663 b/exercise7/blogging-platform/db-data/base/1/2663 new file mode 100644 index 00000000..a39e8389 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2663 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2664 b/exercise7/blogging-platform/db-data/base/1/2664 new file mode 100644 index 00000000..2869d152 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2664 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2665 b/exercise7/blogging-platform/db-data/base/1/2665 new file mode 100644 index 00000000..71f3f1da Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2665 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2666 b/exercise7/blogging-platform/db-data/base/1/2666 new file mode 100644 index 00000000..f18345dd Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2666 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2667 b/exercise7/blogging-platform/db-data/base/1/2667 new file mode 100644 index 00000000..4fe16764 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2667 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2668 b/exercise7/blogging-platform/db-data/base/1/2668 new file mode 100644 index 00000000..9cac2398 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2668 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2669 b/exercise7/blogging-platform/db-data/base/1/2669 new file mode 100644 index 00000000..b76f9655 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2669 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2670 b/exercise7/blogging-platform/db-data/base/1/2670 new file mode 100644 index 00000000..77d8baf1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2670 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2673 b/exercise7/blogging-platform/db-data/base/1/2673 new file mode 100644 index 00000000..d54492e2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2673 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2674 b/exercise7/blogging-platform/db-data/base/1/2674 new file mode 100644 index 00000000..657108b7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2674 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2675 b/exercise7/blogging-platform/db-data/base/1/2675 new file mode 100644 index 00000000..5cd70919 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2675 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2678 b/exercise7/blogging-platform/db-data/base/1/2678 new file mode 100644 index 00000000..af069747 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2678 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2679 b/exercise7/blogging-platform/db-data/base/1/2679 new file mode 100644 index 00000000..c01c5344 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2679 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2680 b/exercise7/blogging-platform/db-data/base/1/2680 new file mode 100644 index 00000000..2c8dcf6d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2680 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2681 b/exercise7/blogging-platform/db-data/base/1/2681 new file mode 100644 index 00000000..08abfd2d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2681 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2682 b/exercise7/blogging-platform/db-data/base/1/2682 new file mode 100644 index 00000000..68325ed6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2682 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2683 b/exercise7/blogging-platform/db-data/base/1/2683 new file mode 100644 index 00000000..6fb64067 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2683 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2684 b/exercise7/blogging-platform/db-data/base/1/2684 new file mode 100644 index 00000000..b15dd757 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2684 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2685 b/exercise7/blogging-platform/db-data/base/1/2685 new file mode 100644 index 00000000..bb046663 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2685 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2686 b/exercise7/blogging-platform/db-data/base/1/2686 new file mode 100644 index 00000000..3cacc1cd Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2686 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2687 b/exercise7/blogging-platform/db-data/base/1/2687 new file mode 100644 index 00000000..a0d2b937 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2687 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2688 b/exercise7/blogging-platform/db-data/base/1/2688 new file mode 100644 index 00000000..68903d27 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2688 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2689 b/exercise7/blogging-platform/db-data/base/1/2689 new file mode 100644 index 00000000..6c77095d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2689 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2690 b/exercise7/blogging-platform/db-data/base/1/2690 new file mode 100644 index 00000000..cd75d231 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2690 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2691 b/exercise7/blogging-platform/db-data/base/1/2691 new file mode 100644 index 00000000..76612514 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2691 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2692 b/exercise7/blogging-platform/db-data/base/1/2692 new file mode 100644 index 00000000..f37f4d62 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2692 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2693 b/exercise7/blogging-platform/db-data/base/1/2693 new file mode 100644 index 00000000..48307f05 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2693 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2696 b/exercise7/blogging-platform/db-data/base/1/2696 new file mode 100644 index 00000000..7dfa1260 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2696 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2699 b/exercise7/blogging-platform/db-data/base/1/2699 new file mode 100644 index 00000000..e628d48c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2699 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2701 b/exercise7/blogging-platform/db-data/base/1/2701 new file mode 100644 index 00000000..292dfe51 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2701 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2702 b/exercise7/blogging-platform/db-data/base/1/2702 new file mode 100644 index 00000000..b0fda24f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2702 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2703 b/exercise7/blogging-platform/db-data/base/1/2703 new file mode 100644 index 00000000..b4578e15 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2703 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2704 b/exercise7/blogging-platform/db-data/base/1/2704 new file mode 100644 index 00000000..d794711b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2704 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2753 b/exercise7/blogging-platform/db-data/base/1/2753 new file mode 100644 index 00000000..3c16dff6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2753 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2753_fsm b/exercise7/blogging-platform/db-data/base/1/2753_fsm new file mode 100644 index 00000000..642bce3b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2753_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2753_vm b/exercise7/blogging-platform/db-data/base/1/2753_vm new file mode 100644 index 00000000..77d88166 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2753_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2754 b/exercise7/blogging-platform/db-data/base/1/2754 new file mode 100644 index 00000000..35f5980b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2754 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2755 b/exercise7/blogging-platform/db-data/base/1/2755 new file mode 100644 index 00000000..f3c38bf9 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2755 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2756 b/exercise7/blogging-platform/db-data/base/1/2756 new file mode 100644 index 00000000..fd0b8cf6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2756 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2757 b/exercise7/blogging-platform/db-data/base/1/2757 new file mode 100644 index 00000000..5d45a8e4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2757 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2830 b/exercise7/blogging-platform/db-data/base/1/2830 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/2831 b/exercise7/blogging-platform/db-data/base/1/2831 new file mode 100644 index 00000000..3ab32401 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2831 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2832 b/exercise7/blogging-platform/db-data/base/1/2832 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/2833 b/exercise7/blogging-platform/db-data/base/1/2833 new file mode 100644 index 00000000..b30ab7d1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2833 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2834 b/exercise7/blogging-platform/db-data/base/1/2834 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/2835 b/exercise7/blogging-platform/db-data/base/1/2835 new file mode 100644 index 00000000..f1c71ca3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2835 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2836 b/exercise7/blogging-platform/db-data/base/1/2836 new file mode 100644 index 00000000..6fc2811b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2836 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2836_fsm b/exercise7/blogging-platform/db-data/base/1/2836_fsm new file mode 100644 index 00000000..ed42b8e8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2836_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2836_vm b/exercise7/blogging-platform/db-data/base/1/2836_vm new file mode 100644 index 00000000..0f76b35e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2836_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2837 b/exercise7/blogging-platform/db-data/base/1/2837 new file mode 100644 index 00000000..53729f8d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2837 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2838 b/exercise7/blogging-platform/db-data/base/1/2838 new file mode 100644 index 00000000..b113c058 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2838 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2838_fsm b/exercise7/blogging-platform/db-data/base/1/2838_fsm new file mode 100644 index 00000000..ad618337 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2838_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2838_vm b/exercise7/blogging-platform/db-data/base/1/2838_vm new file mode 100644 index 00000000..41485710 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2838_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2839 b/exercise7/blogging-platform/db-data/base/1/2839 new file mode 100644 index 00000000..f3c3d8e4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2839 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2840 b/exercise7/blogging-platform/db-data/base/1/2840 new file mode 100644 index 00000000..547e12cc Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2840 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2840_fsm b/exercise7/blogging-platform/db-data/base/1/2840_fsm new file mode 100644 index 00000000..6a3925ba Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2840_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2840_vm b/exercise7/blogging-platform/db-data/base/1/2840_vm new file mode 100644 index 00000000..18cb79ae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2840_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/2841 b/exercise7/blogging-platform/db-data/base/1/2841 new file mode 100644 index 00000000..e80041ba Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2841 differ diff --git a/exercise7/blogging-platform/db-data/base/1/2995 b/exercise7/blogging-platform/db-data/base/1/2995 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/2996 b/exercise7/blogging-platform/db-data/base/1/2996 new file mode 100644 index 00000000..f286c20d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/2996 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3079 b/exercise7/blogging-platform/db-data/base/1/3079 new file mode 100644 index 00000000..e46cc798 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3079 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3079_fsm b/exercise7/blogging-platform/db-data/base/1/3079_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3079_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3079_vm b/exercise7/blogging-platform/db-data/base/1/3079_vm new file mode 100644 index 00000000..9eba6e75 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3079_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3080 b/exercise7/blogging-platform/db-data/base/1/3080 new file mode 100644 index 00000000..db70958c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3080 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3081 b/exercise7/blogging-platform/db-data/base/1/3081 new file mode 100644 index 00000000..06f97844 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3081 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3085 b/exercise7/blogging-platform/db-data/base/1/3085 new file mode 100644 index 00000000..4392b73f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3085 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3118 b/exercise7/blogging-platform/db-data/base/1/3118 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3119 b/exercise7/blogging-platform/db-data/base/1/3119 new file mode 100644 index 00000000..059d8b65 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3119 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3164 b/exercise7/blogging-platform/db-data/base/1/3164 new file mode 100644 index 00000000..a6c998e8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3164 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3256 b/exercise7/blogging-platform/db-data/base/1/3256 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3257 b/exercise7/blogging-platform/db-data/base/1/3257 new file mode 100644 index 00000000..fbf5bbec Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3257 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3258 b/exercise7/blogging-platform/db-data/base/1/3258 new file mode 100644 index 00000000..e6ea9ced Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3258 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3350 b/exercise7/blogging-platform/db-data/base/1/3350 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3351 b/exercise7/blogging-platform/db-data/base/1/3351 new file mode 100644 index 00000000..afd5efa0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3351 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3379 b/exercise7/blogging-platform/db-data/base/1/3379 new file mode 100644 index 00000000..66bc81a4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3379 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3380 b/exercise7/blogging-platform/db-data/base/1/3380 new file mode 100644 index 00000000..dea303b8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3380 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3381 b/exercise7/blogging-platform/db-data/base/1/3381 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3394 b/exercise7/blogging-platform/db-data/base/1/3394 new file mode 100644 index 00000000..8a25fb94 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3394 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3394_fsm b/exercise7/blogging-platform/db-data/base/1/3394_fsm new file mode 100644 index 00000000..ffa86444 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3394_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3394_vm b/exercise7/blogging-platform/db-data/base/1/3394_vm new file mode 100644 index 00000000..394abc25 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3394_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3395 b/exercise7/blogging-platform/db-data/base/1/3395 new file mode 100644 index 00000000..de77c1cb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3395 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3429 b/exercise7/blogging-platform/db-data/base/1/3429 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3430 b/exercise7/blogging-platform/db-data/base/1/3430 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3431 b/exercise7/blogging-platform/db-data/base/1/3431 new file mode 100644 index 00000000..1367f852 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3431 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3433 b/exercise7/blogging-platform/db-data/base/1/3433 new file mode 100644 index 00000000..dbab200d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3433 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3439 b/exercise7/blogging-platform/db-data/base/1/3439 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3440 b/exercise7/blogging-platform/db-data/base/1/3440 new file mode 100644 index 00000000..13699045 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3440 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3455 b/exercise7/blogging-platform/db-data/base/1/3455 new file mode 100644 index 00000000..72c27133 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3455 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3456 b/exercise7/blogging-platform/db-data/base/1/3456 new file mode 100644 index 00000000..e36b8156 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3456 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3456_fsm b/exercise7/blogging-platform/db-data/base/1/3456_fsm new file mode 100644 index 00000000..51cf9b86 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3456_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3456_vm b/exercise7/blogging-platform/db-data/base/1/3456_vm new file mode 100644 index 00000000..633a2314 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3456_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3466 b/exercise7/blogging-platform/db-data/base/1/3466 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3467 b/exercise7/blogging-platform/db-data/base/1/3467 new file mode 100644 index 00000000..fa34587b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3467 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3468 b/exercise7/blogging-platform/db-data/base/1/3468 new file mode 100644 index 00000000..353f3b30 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3468 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3501 b/exercise7/blogging-platform/db-data/base/1/3501 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3502 b/exercise7/blogging-platform/db-data/base/1/3502 new file mode 100644 index 00000000..15c7adaf Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3502 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3503 b/exercise7/blogging-platform/db-data/base/1/3503 new file mode 100644 index 00000000..befb4256 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3503 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3534 b/exercise7/blogging-platform/db-data/base/1/3534 new file mode 100644 index 00000000..94e5e8ea Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3534 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3541 b/exercise7/blogging-platform/db-data/base/1/3541 new file mode 100644 index 00000000..40869ad3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3541 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3541_fsm b/exercise7/blogging-platform/db-data/base/1/3541_fsm new file mode 100644 index 00000000..a3a2de4d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3541_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3541_vm b/exercise7/blogging-platform/db-data/base/1/3541_vm new file mode 100644 index 00000000..adff1a8a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3541_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3542 b/exercise7/blogging-platform/db-data/base/1/3542 new file mode 100644 index 00000000..bb83580a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3542 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3574 b/exercise7/blogging-platform/db-data/base/1/3574 new file mode 100644 index 00000000..b026df10 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3574 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3575 b/exercise7/blogging-platform/db-data/base/1/3575 new file mode 100644 index 00000000..bdec5326 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3575 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3576 b/exercise7/blogging-platform/db-data/base/1/3576 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3596 b/exercise7/blogging-platform/db-data/base/1/3596 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3597 b/exercise7/blogging-platform/db-data/base/1/3597 new file mode 100644 index 00000000..8963738c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3597 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3598 b/exercise7/blogging-platform/db-data/base/1/3598 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/3599 b/exercise7/blogging-platform/db-data/base/1/3599 new file mode 100644 index 00000000..999330d2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3599 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3600 b/exercise7/blogging-platform/db-data/base/1/3600 new file mode 100644 index 00000000..6a0b52a3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3600 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3600_fsm b/exercise7/blogging-platform/db-data/base/1/3600_fsm new file mode 100644 index 00000000..cebec199 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3600_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3600_vm b/exercise7/blogging-platform/db-data/base/1/3600_vm new file mode 100644 index 00000000..83222332 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3600_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3601 b/exercise7/blogging-platform/db-data/base/1/3601 new file mode 100644 index 00000000..04c846ec Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3601 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3601_fsm b/exercise7/blogging-platform/db-data/base/1/3601_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3601_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3601_vm b/exercise7/blogging-platform/db-data/base/1/3601_vm new file mode 100644 index 00000000..7ab33351 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3601_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3602 b/exercise7/blogging-platform/db-data/base/1/3602 new file mode 100644 index 00000000..3eef8ca1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3602 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3602_fsm b/exercise7/blogging-platform/db-data/base/1/3602_fsm new file mode 100644 index 00000000..d7897de2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3602_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3602_vm b/exercise7/blogging-platform/db-data/base/1/3602_vm new file mode 100644 index 00000000..a711a24c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3602_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3603 b/exercise7/blogging-platform/db-data/base/1/3603 new file mode 100644 index 00000000..063b4544 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3603 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3603_fsm b/exercise7/blogging-platform/db-data/base/1/3603_fsm new file mode 100644 index 00000000..c28dd4fa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3603_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3603_vm b/exercise7/blogging-platform/db-data/base/1/3603_vm new file mode 100644 index 00000000..f5f1b70b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3603_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3604 b/exercise7/blogging-platform/db-data/base/1/3604 new file mode 100644 index 00000000..bcbb3a59 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3604 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3605 b/exercise7/blogging-platform/db-data/base/1/3605 new file mode 100644 index 00000000..1d969477 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3605 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3606 b/exercise7/blogging-platform/db-data/base/1/3606 new file mode 100644 index 00000000..698e6d09 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3606 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3607 b/exercise7/blogging-platform/db-data/base/1/3607 new file mode 100644 index 00000000..1d023e00 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3607 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3608 b/exercise7/blogging-platform/db-data/base/1/3608 new file mode 100644 index 00000000..304ac459 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3608 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3609 b/exercise7/blogging-platform/db-data/base/1/3609 new file mode 100644 index 00000000..d5686615 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3609 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3712 b/exercise7/blogging-platform/db-data/base/1/3712 new file mode 100644 index 00000000..d459b6ce Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3712 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3764 b/exercise7/blogging-platform/db-data/base/1/3764 new file mode 100644 index 00000000..86aca4e5 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3764 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3764_fsm b/exercise7/blogging-platform/db-data/base/1/3764_fsm new file mode 100644 index 00000000..f64db4df Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3764_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3764_vm b/exercise7/blogging-platform/db-data/base/1/3764_vm new file mode 100644 index 00000000..887acfae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3764_vm differ diff --git a/exercise7/blogging-platform/db-data/base/1/3766 b/exercise7/blogging-platform/db-data/base/1/3766 new file mode 100644 index 00000000..9c8ec155 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3766 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3767 b/exercise7/blogging-platform/db-data/base/1/3767 new file mode 100644 index 00000000..dc122957 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3767 differ diff --git a/exercise7/blogging-platform/db-data/base/1/3997 b/exercise7/blogging-platform/db-data/base/1/3997 new file mode 100644 index 00000000..104781d0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/3997 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4143 b/exercise7/blogging-platform/db-data/base/1/4143 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4144 b/exercise7/blogging-platform/db-data/base/1/4144 new file mode 100644 index 00000000..71b244d8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4144 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4145 b/exercise7/blogging-platform/db-data/base/1/4145 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4146 b/exercise7/blogging-platform/db-data/base/1/4146 new file mode 100644 index 00000000..ccfa4d3f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4146 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4147 b/exercise7/blogging-platform/db-data/base/1/4147 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4148 b/exercise7/blogging-platform/db-data/base/1/4148 new file mode 100644 index 00000000..555281be Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4148 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4149 b/exercise7/blogging-platform/db-data/base/1/4149 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4150 b/exercise7/blogging-platform/db-data/base/1/4150 new file mode 100644 index 00000000..31c09736 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4150 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4151 b/exercise7/blogging-platform/db-data/base/1/4151 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4152 b/exercise7/blogging-platform/db-data/base/1/4152 new file mode 100644 index 00000000..4e2bd034 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4152 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4153 b/exercise7/blogging-platform/db-data/base/1/4153 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4154 b/exercise7/blogging-platform/db-data/base/1/4154 new file mode 100644 index 00000000..05e23a17 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4154 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4155 b/exercise7/blogging-platform/db-data/base/1/4155 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4156 b/exercise7/blogging-platform/db-data/base/1/4156 new file mode 100644 index 00000000..03529e1e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4156 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4157 b/exercise7/blogging-platform/db-data/base/1/4157 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4158 b/exercise7/blogging-platform/db-data/base/1/4158 new file mode 100644 index 00000000..0e8ef725 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4158 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4159 b/exercise7/blogging-platform/db-data/base/1/4159 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4160 b/exercise7/blogging-platform/db-data/base/1/4160 new file mode 100644 index 00000000..539f4762 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4160 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4163 b/exercise7/blogging-platform/db-data/base/1/4163 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4164 b/exercise7/blogging-platform/db-data/base/1/4164 new file mode 100644 index 00000000..57a95aef Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4164 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4165 b/exercise7/blogging-platform/db-data/base/1/4165 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4166 b/exercise7/blogging-platform/db-data/base/1/4166 new file mode 100644 index 00000000..cc46d17a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4166 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4167 b/exercise7/blogging-platform/db-data/base/1/4167 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4168 b/exercise7/blogging-platform/db-data/base/1/4168 new file mode 100644 index 00000000..ab79c1bb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4168 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4169 b/exercise7/blogging-platform/db-data/base/1/4169 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4170 b/exercise7/blogging-platform/db-data/base/1/4170 new file mode 100644 index 00000000..2b7eefba Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4170 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4171 b/exercise7/blogging-platform/db-data/base/1/4171 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4172 b/exercise7/blogging-platform/db-data/base/1/4172 new file mode 100644 index 00000000..d393d069 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4172 differ diff --git a/exercise7/blogging-platform/db-data/base/1/4173 b/exercise7/blogging-platform/db-data/base/1/4173 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/4174 b/exercise7/blogging-platform/db-data/base/1/4174 new file mode 100644 index 00000000..ebfc0c8c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/4174 differ diff --git a/exercise7/blogging-platform/db-data/base/1/5002 b/exercise7/blogging-platform/db-data/base/1/5002 new file mode 100644 index 00000000..aefa40dd Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/5002 differ diff --git a/exercise7/blogging-platform/db-data/base/1/548 b/exercise7/blogging-platform/db-data/base/1/548 new file mode 100644 index 00000000..64fdefd5 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/548 differ diff --git a/exercise7/blogging-platform/db-data/base/1/549 b/exercise7/blogging-platform/db-data/base/1/549 new file mode 100644 index 00000000..3734cc2b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/549 differ diff --git a/exercise7/blogging-platform/db-data/base/1/6102 b/exercise7/blogging-platform/db-data/base/1/6102 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/6104 b/exercise7/blogging-platform/db-data/base/1/6104 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/6106 b/exercise7/blogging-platform/db-data/base/1/6106 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/6110 b/exercise7/blogging-platform/db-data/base/1/6110 new file mode 100644 index 00000000..42e19200 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/6110 differ diff --git a/exercise7/blogging-platform/db-data/base/1/6111 b/exercise7/blogging-platform/db-data/base/1/6111 new file mode 100644 index 00000000..d012727d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/6111 differ diff --git a/exercise7/blogging-platform/db-data/base/1/6112 b/exercise7/blogging-platform/db-data/base/1/6112 new file mode 100644 index 00000000..293367c2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/6112 differ diff --git a/exercise7/blogging-platform/db-data/base/1/6113 b/exercise7/blogging-platform/db-data/base/1/6113 new file mode 100644 index 00000000..542f8faa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/6113 differ diff --git a/exercise7/blogging-platform/db-data/base/1/6116 b/exercise7/blogging-platform/db-data/base/1/6116 new file mode 100644 index 00000000..787d5d18 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/6116 differ diff --git a/exercise7/blogging-platform/db-data/base/1/6117 b/exercise7/blogging-platform/db-data/base/1/6117 new file mode 100644 index 00000000..2b5656b2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/6117 differ diff --git a/exercise7/blogging-platform/db-data/base/1/6175 b/exercise7/blogging-platform/db-data/base/1/6175 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/6176 b/exercise7/blogging-platform/db-data/base/1/6176 new file mode 100644 index 00000000..ff08a8eb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/6176 differ diff --git a/exercise7/blogging-platform/db-data/base/1/6228 b/exercise7/blogging-platform/db-data/base/1/6228 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/6229 b/exercise7/blogging-platform/db-data/base/1/6229 new file mode 100644 index 00000000..3e1d0156 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/6229 differ diff --git a/exercise7/blogging-platform/db-data/base/1/6237 b/exercise7/blogging-platform/db-data/base/1/6237 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/6238 b/exercise7/blogging-platform/db-data/base/1/6238 new file mode 100644 index 00000000..e7c0e8c3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/6238 differ diff --git a/exercise7/blogging-platform/db-data/base/1/6239 b/exercise7/blogging-platform/db-data/base/1/6239 new file mode 100644 index 00000000..6c60b507 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/6239 differ diff --git a/exercise7/blogging-platform/db-data/base/1/826 b/exercise7/blogging-platform/db-data/base/1/826 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/1/827 b/exercise7/blogging-platform/db-data/base/1/827 new file mode 100644 index 00000000..f102efd8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/827 differ diff --git a/exercise7/blogging-platform/db-data/base/1/828 b/exercise7/blogging-platform/db-data/base/1/828 new file mode 100644 index 00000000..e97c210f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/828 differ diff --git a/exercise7/blogging-platform/db-data/base/1/PG_VERSION b/exercise7/blogging-platform/db-data/base/1/PG_VERSION new file mode 100644 index 00000000..98d9bcb7 --- /dev/null +++ b/exercise7/blogging-platform/db-data/base/1/PG_VERSION @@ -0,0 +1 @@ +17 diff --git a/exercise7/blogging-platform/db-data/base/1/pg_filenode.map b/exercise7/blogging-platform/db-data/base/1/pg_filenode.map new file mode 100644 index 00000000..4fc801aa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/1/pg_filenode.map differ diff --git a/exercise7/blogging-platform/db-data/base/4/112 b/exercise7/blogging-platform/db-data/base/4/112 new file mode 100644 index 00000000..9531ca83 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/112 differ diff --git a/exercise7/blogging-platform/db-data/base/4/113 b/exercise7/blogging-platform/db-data/base/4/113 new file mode 100644 index 00000000..f92630d0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/113 differ diff --git a/exercise7/blogging-platform/db-data/base/4/1247 b/exercise7/blogging-platform/db-data/base/4/1247 new file mode 100644 index 00000000..57c01753 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1247 differ diff --git a/exercise7/blogging-platform/db-data/base/4/1247_fsm b/exercise7/blogging-platform/db-data/base/4/1247_fsm new file mode 100644 index 00000000..fd573083 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1247_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/1247_vm b/exercise7/blogging-platform/db-data/base/4/1247_vm new file mode 100644 index 00000000..0060a0d7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1247_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/1249 b/exercise7/blogging-platform/db-data/base/4/1249 new file mode 100644 index 00000000..8353f118 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1249 differ diff --git a/exercise7/blogging-platform/db-data/base/4/1249_fsm b/exercise7/blogging-platform/db-data/base/4/1249_fsm new file mode 100644 index 00000000..e0ed4b02 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1249_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/1249_vm b/exercise7/blogging-platform/db-data/base/4/1249_vm new file mode 100644 index 00000000..30c75519 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1249_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/1255 b/exercise7/blogging-platform/db-data/base/4/1255 new file mode 100644 index 00000000..20a0dc05 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1255 differ diff --git a/exercise7/blogging-platform/db-data/base/4/1255_fsm b/exercise7/blogging-platform/db-data/base/4/1255_fsm new file mode 100644 index 00000000..062bfc5b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1255_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/1255_vm b/exercise7/blogging-platform/db-data/base/4/1255_vm new file mode 100644 index 00000000..41e0e3d1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1255_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/1259 b/exercise7/blogging-platform/db-data/base/4/1259 new file mode 100644 index 00000000..c93fe0a0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1259 differ diff --git a/exercise7/blogging-platform/db-data/base/4/1259_fsm b/exercise7/blogging-platform/db-data/base/4/1259_fsm new file mode 100644 index 00000000..2077a7b0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1259_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/1259_vm b/exercise7/blogging-platform/db-data/base/4/1259_vm new file mode 100644 index 00000000..d9a0447a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/1259_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/13402 b/exercise7/blogging-platform/db-data/base/4/13402 new file mode 100644 index 00000000..0a380807 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13402 differ diff --git a/exercise7/blogging-platform/db-data/base/4/13402_fsm b/exercise7/blogging-platform/db-data/base/4/13402_fsm new file mode 100644 index 00000000..45338f1e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13402_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/13402_vm b/exercise7/blogging-platform/db-data/base/4/13402_vm new file mode 100644 index 00000000..415c20fc Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13402_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/13405 b/exercise7/blogging-platform/db-data/base/4/13405 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/13406 b/exercise7/blogging-platform/db-data/base/4/13406 new file mode 100644 index 00000000..61968fde Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13406 differ diff --git a/exercise7/blogging-platform/db-data/base/4/13407 b/exercise7/blogging-platform/db-data/base/4/13407 new file mode 100644 index 00000000..ae12b607 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13407 differ diff --git a/exercise7/blogging-platform/db-data/base/4/13407_fsm b/exercise7/blogging-platform/db-data/base/4/13407_fsm new file mode 100644 index 00000000..ce7c26eb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13407_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/13407_vm b/exercise7/blogging-platform/db-data/base/4/13407_vm new file mode 100644 index 00000000..fb8ff1c0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13407_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/13410 b/exercise7/blogging-platform/db-data/base/4/13410 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/13411 b/exercise7/blogging-platform/db-data/base/4/13411 new file mode 100644 index 00000000..1441969e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13411 differ diff --git a/exercise7/blogging-platform/db-data/base/4/13412 b/exercise7/blogging-platform/db-data/base/4/13412 new file mode 100644 index 00000000..2af8847a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13412 differ diff --git a/exercise7/blogging-platform/db-data/base/4/13412_fsm b/exercise7/blogging-platform/db-data/base/4/13412_fsm new file mode 100644 index 00000000..0673adae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13412_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/13412_vm b/exercise7/blogging-platform/db-data/base/4/13412_vm new file mode 100644 index 00000000..ebd5a5aa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13412_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/13415 b/exercise7/blogging-platform/db-data/base/4/13415 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/13416 b/exercise7/blogging-platform/db-data/base/4/13416 new file mode 100644 index 00000000..e43a6668 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13416 differ diff --git a/exercise7/blogging-platform/db-data/base/4/13417 b/exercise7/blogging-platform/db-data/base/4/13417 new file mode 100644 index 00000000..e126e7ff Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13417 differ diff --git a/exercise7/blogging-platform/db-data/base/4/13417_fsm b/exercise7/blogging-platform/db-data/base/4/13417_fsm new file mode 100644 index 00000000..a836ddf7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13417_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/13417_vm b/exercise7/blogging-platform/db-data/base/4/13417_vm new file mode 100644 index 00000000..b2366f4d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13417_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/13420 b/exercise7/blogging-platform/db-data/base/4/13420 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/13421 b/exercise7/blogging-platform/db-data/base/4/13421 new file mode 100644 index 00000000..35abe5f1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/13421 differ diff --git a/exercise7/blogging-platform/db-data/base/4/1417 b/exercise7/blogging-platform/db-data/base/4/1417 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/1418 b/exercise7/blogging-platform/db-data/base/4/1418 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/174 b/exercise7/blogging-platform/db-data/base/4/174 new file mode 100644 index 00000000..4f4d8bed Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/174 differ diff --git a/exercise7/blogging-platform/db-data/base/4/175 b/exercise7/blogging-platform/db-data/base/4/175 new file mode 100644 index 00000000..98fd8de8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/175 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2187 b/exercise7/blogging-platform/db-data/base/4/2187 new file mode 100644 index 00000000..141f7eeb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2187 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2224 b/exercise7/blogging-platform/db-data/base/4/2224 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/2228 b/exercise7/blogging-platform/db-data/base/4/2228 new file mode 100644 index 00000000..bfecf011 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2228 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2328 b/exercise7/blogging-platform/db-data/base/4/2328 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/2336 b/exercise7/blogging-platform/db-data/base/4/2336 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/2337 b/exercise7/blogging-platform/db-data/base/4/2337 new file mode 100644 index 00000000..e647f387 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2337 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2579 b/exercise7/blogging-platform/db-data/base/4/2579 new file mode 100644 index 00000000..bf95468a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2579 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2600 b/exercise7/blogging-platform/db-data/base/4/2600 new file mode 100644 index 00000000..9dfd1a85 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2600 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2600_fsm b/exercise7/blogging-platform/db-data/base/4/2600_fsm new file mode 100644 index 00000000..c542a78b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2600_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2600_vm b/exercise7/blogging-platform/db-data/base/4/2600_vm new file mode 100644 index 00000000..3b53bade Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2600_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2601 b/exercise7/blogging-platform/db-data/base/4/2601 new file mode 100644 index 00000000..d8001c8c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2601 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2601_fsm b/exercise7/blogging-platform/db-data/base/4/2601_fsm new file mode 100644 index 00000000..d388044f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2601_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2601_vm b/exercise7/blogging-platform/db-data/base/4/2601_vm new file mode 100644 index 00000000..117547dd Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2601_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2602 b/exercise7/blogging-platform/db-data/base/4/2602 new file mode 100644 index 00000000..4a27b0a3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2602 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2602_fsm b/exercise7/blogging-platform/db-data/base/4/2602_fsm new file mode 100644 index 00000000..23170d85 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2602_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2602_vm b/exercise7/blogging-platform/db-data/base/4/2602_vm new file mode 100644 index 00000000..ce836831 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2602_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2603 b/exercise7/blogging-platform/db-data/base/4/2603 new file mode 100644 index 00000000..d511af56 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2603 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2603_fsm b/exercise7/blogging-platform/db-data/base/4/2603_fsm new file mode 100644 index 00000000..949bd18f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2603_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2603_vm b/exercise7/blogging-platform/db-data/base/4/2603_vm new file mode 100644 index 00000000..a2dbc751 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2603_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2604 b/exercise7/blogging-platform/db-data/base/4/2604 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/2605 b/exercise7/blogging-platform/db-data/base/4/2605 new file mode 100644 index 00000000..eeaa7eaa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2605 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2605_fsm b/exercise7/blogging-platform/db-data/base/4/2605_fsm new file mode 100644 index 00000000..f3b92bf7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2605_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2605_vm b/exercise7/blogging-platform/db-data/base/4/2605_vm new file mode 100644 index 00000000..96f1f7bc Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2605_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2606 b/exercise7/blogging-platform/db-data/base/4/2606 new file mode 100644 index 00000000..70d1f555 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2606 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2606_fsm b/exercise7/blogging-platform/db-data/base/4/2606_fsm new file mode 100644 index 00000000..267454e7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2606_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2606_vm b/exercise7/blogging-platform/db-data/base/4/2606_vm new file mode 100644 index 00000000..2b1e2ce5 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2606_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2607 b/exercise7/blogging-platform/db-data/base/4/2607 new file mode 100644 index 00000000..bfad49ae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2607 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2607_fsm b/exercise7/blogging-platform/db-data/base/4/2607_fsm new file mode 100644 index 00000000..80ac8b14 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2607_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2607_vm b/exercise7/blogging-platform/db-data/base/4/2607_vm new file mode 100644 index 00000000..5ffcc070 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2607_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2608 b/exercise7/blogging-platform/db-data/base/4/2608 new file mode 100644 index 00000000..98a75530 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2608 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2608_fsm b/exercise7/blogging-platform/db-data/base/4/2608_fsm new file mode 100644 index 00000000..4b197851 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2608_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2608_vm b/exercise7/blogging-platform/db-data/base/4/2608_vm new file mode 100644 index 00000000..7d08bb09 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2608_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2609 b/exercise7/blogging-platform/db-data/base/4/2609 new file mode 100644 index 00000000..44f39b72 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2609 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2609_fsm b/exercise7/blogging-platform/db-data/base/4/2609_fsm new file mode 100644 index 00000000..fc288908 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2609_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2609_vm b/exercise7/blogging-platform/db-data/base/4/2609_vm new file mode 100644 index 00000000..62a4d542 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2609_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2610 b/exercise7/blogging-platform/db-data/base/4/2610 new file mode 100644 index 00000000..95ac760b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2610 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2610_fsm b/exercise7/blogging-platform/db-data/base/4/2610_fsm new file mode 100644 index 00000000..ecbcb5fa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2610_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2610_vm b/exercise7/blogging-platform/db-data/base/4/2610_vm new file mode 100644 index 00000000..9aeb6f80 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2610_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2611 b/exercise7/blogging-platform/db-data/base/4/2611 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/2612 b/exercise7/blogging-platform/db-data/base/4/2612 new file mode 100644 index 00000000..66d433c3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2612 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2612_fsm b/exercise7/blogging-platform/db-data/base/4/2612_fsm new file mode 100644 index 00000000..877976ac Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2612_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2612_vm b/exercise7/blogging-platform/db-data/base/4/2612_vm new file mode 100644 index 00000000..1ade0f97 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2612_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2613 b/exercise7/blogging-platform/db-data/base/4/2613 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/2615 b/exercise7/blogging-platform/db-data/base/4/2615 new file mode 100644 index 00000000..286f33f0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2615 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2615_fsm b/exercise7/blogging-platform/db-data/base/4/2615_fsm new file mode 100644 index 00000000..d041693e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2615_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2615_vm b/exercise7/blogging-platform/db-data/base/4/2615_vm new file mode 100644 index 00000000..9cbe6e1e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2615_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2616 b/exercise7/blogging-platform/db-data/base/4/2616 new file mode 100644 index 00000000..0d60d797 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2616 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2616_fsm b/exercise7/blogging-platform/db-data/base/4/2616_fsm new file mode 100644 index 00000000..cb924c95 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2616_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2616_vm b/exercise7/blogging-platform/db-data/base/4/2616_vm new file mode 100644 index 00000000..0d2f91ea Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2616_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2617 b/exercise7/blogging-platform/db-data/base/4/2617 new file mode 100644 index 00000000..bcdfc183 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2617 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2617_fsm b/exercise7/blogging-platform/db-data/base/4/2617_fsm new file mode 100644 index 00000000..29d60666 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2617_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2617_vm b/exercise7/blogging-platform/db-data/base/4/2617_vm new file mode 100644 index 00000000..ffacdf58 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2617_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2618 b/exercise7/blogging-platform/db-data/base/4/2618 new file mode 100644 index 00000000..c0e64256 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2618 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2618_fsm b/exercise7/blogging-platform/db-data/base/4/2618_fsm new file mode 100644 index 00000000..6cf107fa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2618_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2618_vm b/exercise7/blogging-platform/db-data/base/4/2618_vm new file mode 100644 index 00000000..8af390e0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2618_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2619 b/exercise7/blogging-platform/db-data/base/4/2619 new file mode 100644 index 00000000..3aa4e07d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2619 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2619_fsm b/exercise7/blogging-platform/db-data/base/4/2619_fsm new file mode 100644 index 00000000..1067ef16 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2619_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2619_vm b/exercise7/blogging-platform/db-data/base/4/2619_vm new file mode 100644 index 00000000..ca8d2214 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2619_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2620 b/exercise7/blogging-platform/db-data/base/4/2620 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/2650 b/exercise7/blogging-platform/db-data/base/4/2650 new file mode 100644 index 00000000..11ef803f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2650 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2651 b/exercise7/blogging-platform/db-data/base/4/2651 new file mode 100644 index 00000000..bd4bbaf4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2651 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2652 b/exercise7/blogging-platform/db-data/base/4/2652 new file mode 100644 index 00000000..5009d4ae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2652 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2653 b/exercise7/blogging-platform/db-data/base/4/2653 new file mode 100644 index 00000000..db88c69a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2653 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2654 b/exercise7/blogging-platform/db-data/base/4/2654 new file mode 100644 index 00000000..e939ddd9 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2654 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2655 b/exercise7/blogging-platform/db-data/base/4/2655 new file mode 100644 index 00000000..ff2c0d7d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2655 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2656 b/exercise7/blogging-platform/db-data/base/4/2656 new file mode 100644 index 00000000..84b847f7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2656 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2657 b/exercise7/blogging-platform/db-data/base/4/2657 new file mode 100644 index 00000000..887a1b0c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2657 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2658 b/exercise7/blogging-platform/db-data/base/4/2658 new file mode 100644 index 00000000..fdbdc9e3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2658 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2659 b/exercise7/blogging-platform/db-data/base/4/2659 new file mode 100644 index 00000000..be4fca21 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2659 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2660 b/exercise7/blogging-platform/db-data/base/4/2660 new file mode 100644 index 00000000..315985a3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2660 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2661 b/exercise7/blogging-platform/db-data/base/4/2661 new file mode 100644 index 00000000..7ee15f5a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2661 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2662 b/exercise7/blogging-platform/db-data/base/4/2662 new file mode 100644 index 00000000..df1e3da6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2662 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2663 b/exercise7/blogging-platform/db-data/base/4/2663 new file mode 100644 index 00000000..a39e8389 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2663 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2664 b/exercise7/blogging-platform/db-data/base/4/2664 new file mode 100644 index 00000000..2869d152 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2664 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2665 b/exercise7/blogging-platform/db-data/base/4/2665 new file mode 100644 index 00000000..71f3f1da Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2665 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2666 b/exercise7/blogging-platform/db-data/base/4/2666 new file mode 100644 index 00000000..f18345dd Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2666 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2667 b/exercise7/blogging-platform/db-data/base/4/2667 new file mode 100644 index 00000000..4fe16764 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2667 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2668 b/exercise7/blogging-platform/db-data/base/4/2668 new file mode 100644 index 00000000..9cac2398 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2668 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2669 b/exercise7/blogging-platform/db-data/base/4/2669 new file mode 100644 index 00000000..b76f9655 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2669 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2670 b/exercise7/blogging-platform/db-data/base/4/2670 new file mode 100644 index 00000000..77d8baf1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2670 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2673 b/exercise7/blogging-platform/db-data/base/4/2673 new file mode 100644 index 00000000..d54492e2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2673 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2674 b/exercise7/blogging-platform/db-data/base/4/2674 new file mode 100644 index 00000000..657108b7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2674 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2675 b/exercise7/blogging-platform/db-data/base/4/2675 new file mode 100644 index 00000000..5cd70919 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2675 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2678 b/exercise7/blogging-platform/db-data/base/4/2678 new file mode 100644 index 00000000..af069747 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2678 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2679 b/exercise7/blogging-platform/db-data/base/4/2679 new file mode 100644 index 00000000..c01c5344 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2679 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2680 b/exercise7/blogging-platform/db-data/base/4/2680 new file mode 100644 index 00000000..2c8dcf6d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2680 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2681 b/exercise7/blogging-platform/db-data/base/4/2681 new file mode 100644 index 00000000..08abfd2d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2681 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2682 b/exercise7/blogging-platform/db-data/base/4/2682 new file mode 100644 index 00000000..68325ed6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2682 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2683 b/exercise7/blogging-platform/db-data/base/4/2683 new file mode 100644 index 00000000..6fb64067 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2683 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2684 b/exercise7/blogging-platform/db-data/base/4/2684 new file mode 100644 index 00000000..b15dd757 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2684 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2685 b/exercise7/blogging-platform/db-data/base/4/2685 new file mode 100644 index 00000000..bb046663 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2685 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2686 b/exercise7/blogging-platform/db-data/base/4/2686 new file mode 100644 index 00000000..3cacc1cd Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2686 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2687 b/exercise7/blogging-platform/db-data/base/4/2687 new file mode 100644 index 00000000..a0d2b937 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2687 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2688 b/exercise7/blogging-platform/db-data/base/4/2688 new file mode 100644 index 00000000..68903d27 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2688 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2689 b/exercise7/blogging-platform/db-data/base/4/2689 new file mode 100644 index 00000000..6c77095d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2689 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2690 b/exercise7/blogging-platform/db-data/base/4/2690 new file mode 100644 index 00000000..cd75d231 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2690 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2691 b/exercise7/blogging-platform/db-data/base/4/2691 new file mode 100644 index 00000000..76612514 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2691 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2692 b/exercise7/blogging-platform/db-data/base/4/2692 new file mode 100644 index 00000000..f37f4d62 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2692 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2693 b/exercise7/blogging-platform/db-data/base/4/2693 new file mode 100644 index 00000000..48307f05 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2693 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2696 b/exercise7/blogging-platform/db-data/base/4/2696 new file mode 100644 index 00000000..f21e7983 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2696 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2699 b/exercise7/blogging-platform/db-data/base/4/2699 new file mode 100644 index 00000000..e628d48c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2699 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2701 b/exercise7/blogging-platform/db-data/base/4/2701 new file mode 100644 index 00000000..292dfe51 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2701 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2702 b/exercise7/blogging-platform/db-data/base/4/2702 new file mode 100644 index 00000000..b0fda24f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2702 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2703 b/exercise7/blogging-platform/db-data/base/4/2703 new file mode 100644 index 00000000..b4578e15 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2703 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2704 b/exercise7/blogging-platform/db-data/base/4/2704 new file mode 100644 index 00000000..d794711b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2704 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2753 b/exercise7/blogging-platform/db-data/base/4/2753 new file mode 100644 index 00000000..3c16dff6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2753 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2753_fsm b/exercise7/blogging-platform/db-data/base/4/2753_fsm new file mode 100644 index 00000000..642bce3b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2753_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2753_vm b/exercise7/blogging-platform/db-data/base/4/2753_vm new file mode 100644 index 00000000..77d88166 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2753_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2754 b/exercise7/blogging-platform/db-data/base/4/2754 new file mode 100644 index 00000000..35f5980b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2754 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2755 b/exercise7/blogging-platform/db-data/base/4/2755 new file mode 100644 index 00000000..f3c38bf9 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2755 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2756 b/exercise7/blogging-platform/db-data/base/4/2756 new file mode 100644 index 00000000..fd0b8cf6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2756 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2757 b/exercise7/blogging-platform/db-data/base/4/2757 new file mode 100644 index 00000000..5d45a8e4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2757 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2830 b/exercise7/blogging-platform/db-data/base/4/2830 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/2831 b/exercise7/blogging-platform/db-data/base/4/2831 new file mode 100644 index 00000000..3ab32401 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2831 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2832 b/exercise7/blogging-platform/db-data/base/4/2832 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/2833 b/exercise7/blogging-platform/db-data/base/4/2833 new file mode 100644 index 00000000..b30ab7d1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2833 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2834 b/exercise7/blogging-platform/db-data/base/4/2834 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/2835 b/exercise7/blogging-platform/db-data/base/4/2835 new file mode 100644 index 00000000..f1c71ca3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2835 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2836 b/exercise7/blogging-platform/db-data/base/4/2836 new file mode 100644 index 00000000..6fc2811b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2836 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2836_fsm b/exercise7/blogging-platform/db-data/base/4/2836_fsm new file mode 100644 index 00000000..ed42b8e8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2836_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2836_vm b/exercise7/blogging-platform/db-data/base/4/2836_vm new file mode 100644 index 00000000..0f76b35e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2836_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2837 b/exercise7/blogging-platform/db-data/base/4/2837 new file mode 100644 index 00000000..53729f8d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2837 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2838 b/exercise7/blogging-platform/db-data/base/4/2838 new file mode 100644 index 00000000..b113c058 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2838 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2838_fsm b/exercise7/blogging-platform/db-data/base/4/2838_fsm new file mode 100644 index 00000000..ad618337 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2838_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2838_vm b/exercise7/blogging-platform/db-data/base/4/2838_vm new file mode 100644 index 00000000..41485710 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2838_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2839 b/exercise7/blogging-platform/db-data/base/4/2839 new file mode 100644 index 00000000..f3c3d8e4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2839 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2840 b/exercise7/blogging-platform/db-data/base/4/2840 new file mode 100644 index 00000000..cc06f804 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2840 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2840_fsm b/exercise7/blogging-platform/db-data/base/4/2840_fsm new file mode 100644 index 00000000..a6e901ee Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2840_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2840_vm b/exercise7/blogging-platform/db-data/base/4/2840_vm new file mode 100644 index 00000000..36dae06f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2840_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/2841 b/exercise7/blogging-platform/db-data/base/4/2841 new file mode 100644 index 00000000..0551bc16 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2841 differ diff --git a/exercise7/blogging-platform/db-data/base/4/2995 b/exercise7/blogging-platform/db-data/base/4/2995 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/2996 b/exercise7/blogging-platform/db-data/base/4/2996 new file mode 100644 index 00000000..f286c20d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/2996 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3079 b/exercise7/blogging-platform/db-data/base/4/3079 new file mode 100644 index 00000000..e46cc798 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3079 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3079_fsm b/exercise7/blogging-platform/db-data/base/4/3079_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3079_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3079_vm b/exercise7/blogging-platform/db-data/base/4/3079_vm new file mode 100644 index 00000000..9eba6e75 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3079_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3080 b/exercise7/blogging-platform/db-data/base/4/3080 new file mode 100644 index 00000000..db70958c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3080 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3081 b/exercise7/blogging-platform/db-data/base/4/3081 new file mode 100644 index 00000000..06f97844 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3081 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3085 b/exercise7/blogging-platform/db-data/base/4/3085 new file mode 100644 index 00000000..4392b73f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3085 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3118 b/exercise7/blogging-platform/db-data/base/4/3118 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3119 b/exercise7/blogging-platform/db-data/base/4/3119 new file mode 100644 index 00000000..059d8b65 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3119 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3164 b/exercise7/blogging-platform/db-data/base/4/3164 new file mode 100644 index 00000000..a6c998e8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3164 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3256 b/exercise7/blogging-platform/db-data/base/4/3256 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3257 b/exercise7/blogging-platform/db-data/base/4/3257 new file mode 100644 index 00000000..fbf5bbec Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3257 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3258 b/exercise7/blogging-platform/db-data/base/4/3258 new file mode 100644 index 00000000..e6ea9ced Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3258 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3350 b/exercise7/blogging-platform/db-data/base/4/3350 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3351 b/exercise7/blogging-platform/db-data/base/4/3351 new file mode 100644 index 00000000..afd5efa0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3351 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3379 b/exercise7/blogging-platform/db-data/base/4/3379 new file mode 100644 index 00000000..66bc81a4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3379 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3380 b/exercise7/blogging-platform/db-data/base/4/3380 new file mode 100644 index 00000000..dea303b8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3380 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3381 b/exercise7/blogging-platform/db-data/base/4/3381 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3394 b/exercise7/blogging-platform/db-data/base/4/3394 new file mode 100644 index 00000000..8a25fb94 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3394 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3394_fsm b/exercise7/blogging-platform/db-data/base/4/3394_fsm new file mode 100644 index 00000000..ffa86444 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3394_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3394_vm b/exercise7/blogging-platform/db-data/base/4/3394_vm new file mode 100644 index 00000000..394abc25 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3394_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3395 b/exercise7/blogging-platform/db-data/base/4/3395 new file mode 100644 index 00000000..de77c1cb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3395 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3429 b/exercise7/blogging-platform/db-data/base/4/3429 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3430 b/exercise7/blogging-platform/db-data/base/4/3430 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3431 b/exercise7/blogging-platform/db-data/base/4/3431 new file mode 100644 index 00000000..1367f852 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3431 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3433 b/exercise7/blogging-platform/db-data/base/4/3433 new file mode 100644 index 00000000..dbab200d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3433 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3439 b/exercise7/blogging-platform/db-data/base/4/3439 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3440 b/exercise7/blogging-platform/db-data/base/4/3440 new file mode 100644 index 00000000..13699045 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3440 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3455 b/exercise7/blogging-platform/db-data/base/4/3455 new file mode 100644 index 00000000..72c27133 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3455 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3456 b/exercise7/blogging-platform/db-data/base/4/3456 new file mode 100644 index 00000000..e36b8156 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3456 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3456_fsm b/exercise7/blogging-platform/db-data/base/4/3456_fsm new file mode 100644 index 00000000..51cf9b86 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3456_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3456_vm b/exercise7/blogging-platform/db-data/base/4/3456_vm new file mode 100644 index 00000000..633a2314 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3456_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3466 b/exercise7/blogging-platform/db-data/base/4/3466 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3467 b/exercise7/blogging-platform/db-data/base/4/3467 new file mode 100644 index 00000000..fa34587b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3467 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3468 b/exercise7/blogging-platform/db-data/base/4/3468 new file mode 100644 index 00000000..353f3b30 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3468 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3501 b/exercise7/blogging-platform/db-data/base/4/3501 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3502 b/exercise7/blogging-platform/db-data/base/4/3502 new file mode 100644 index 00000000..15c7adaf Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3502 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3503 b/exercise7/blogging-platform/db-data/base/4/3503 new file mode 100644 index 00000000..befb4256 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3503 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3534 b/exercise7/blogging-platform/db-data/base/4/3534 new file mode 100644 index 00000000..94e5e8ea Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3534 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3541 b/exercise7/blogging-platform/db-data/base/4/3541 new file mode 100644 index 00000000..40869ad3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3541 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3541_fsm b/exercise7/blogging-platform/db-data/base/4/3541_fsm new file mode 100644 index 00000000..a3a2de4d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3541_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3541_vm b/exercise7/blogging-platform/db-data/base/4/3541_vm new file mode 100644 index 00000000..adff1a8a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3541_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3542 b/exercise7/blogging-platform/db-data/base/4/3542 new file mode 100644 index 00000000..bb83580a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3542 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3574 b/exercise7/blogging-platform/db-data/base/4/3574 new file mode 100644 index 00000000..b026df10 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3574 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3575 b/exercise7/blogging-platform/db-data/base/4/3575 new file mode 100644 index 00000000..bdec5326 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3575 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3576 b/exercise7/blogging-platform/db-data/base/4/3576 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3596 b/exercise7/blogging-platform/db-data/base/4/3596 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3597 b/exercise7/blogging-platform/db-data/base/4/3597 new file mode 100644 index 00000000..8963738c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3597 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3598 b/exercise7/blogging-platform/db-data/base/4/3598 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/3599 b/exercise7/blogging-platform/db-data/base/4/3599 new file mode 100644 index 00000000..999330d2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3599 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3600 b/exercise7/blogging-platform/db-data/base/4/3600 new file mode 100644 index 00000000..6a0b52a3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3600 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3600_fsm b/exercise7/blogging-platform/db-data/base/4/3600_fsm new file mode 100644 index 00000000..cebec199 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3600_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3600_vm b/exercise7/blogging-platform/db-data/base/4/3600_vm new file mode 100644 index 00000000..83222332 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3600_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3601 b/exercise7/blogging-platform/db-data/base/4/3601 new file mode 100644 index 00000000..04c846ec Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3601 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3601_fsm b/exercise7/blogging-platform/db-data/base/4/3601_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3601_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3601_vm b/exercise7/blogging-platform/db-data/base/4/3601_vm new file mode 100644 index 00000000..7ab33351 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3601_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3602 b/exercise7/blogging-platform/db-data/base/4/3602 new file mode 100644 index 00000000..3eef8ca1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3602 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3602_fsm b/exercise7/blogging-platform/db-data/base/4/3602_fsm new file mode 100644 index 00000000..d7897de2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3602_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3602_vm b/exercise7/blogging-platform/db-data/base/4/3602_vm new file mode 100644 index 00000000..a711a24c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3602_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3603 b/exercise7/blogging-platform/db-data/base/4/3603 new file mode 100644 index 00000000..063b4544 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3603 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3603_fsm b/exercise7/blogging-platform/db-data/base/4/3603_fsm new file mode 100644 index 00000000..c28dd4fa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3603_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3603_vm b/exercise7/blogging-platform/db-data/base/4/3603_vm new file mode 100644 index 00000000..f5f1b70b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3603_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3604 b/exercise7/blogging-platform/db-data/base/4/3604 new file mode 100644 index 00000000..bcbb3a59 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3604 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3605 b/exercise7/blogging-platform/db-data/base/4/3605 new file mode 100644 index 00000000..1d969477 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3605 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3606 b/exercise7/blogging-platform/db-data/base/4/3606 new file mode 100644 index 00000000..698e6d09 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3606 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3607 b/exercise7/blogging-platform/db-data/base/4/3607 new file mode 100644 index 00000000..1d023e00 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3607 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3608 b/exercise7/blogging-platform/db-data/base/4/3608 new file mode 100644 index 00000000..304ac459 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3608 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3609 b/exercise7/blogging-platform/db-data/base/4/3609 new file mode 100644 index 00000000..d5686615 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3609 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3712 b/exercise7/blogging-platform/db-data/base/4/3712 new file mode 100644 index 00000000..d459b6ce Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3712 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3764 b/exercise7/blogging-platform/db-data/base/4/3764 new file mode 100644 index 00000000..86aca4e5 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3764 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3764_fsm b/exercise7/blogging-platform/db-data/base/4/3764_fsm new file mode 100644 index 00000000..f64db4df Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3764_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3764_vm b/exercise7/blogging-platform/db-data/base/4/3764_vm new file mode 100644 index 00000000..887acfae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3764_vm differ diff --git a/exercise7/blogging-platform/db-data/base/4/3766 b/exercise7/blogging-platform/db-data/base/4/3766 new file mode 100644 index 00000000..9c8ec155 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3766 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3767 b/exercise7/blogging-platform/db-data/base/4/3767 new file mode 100644 index 00000000..dc122957 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3767 differ diff --git a/exercise7/blogging-platform/db-data/base/4/3997 b/exercise7/blogging-platform/db-data/base/4/3997 new file mode 100644 index 00000000..104781d0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/3997 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4143 b/exercise7/blogging-platform/db-data/base/4/4143 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4144 b/exercise7/blogging-platform/db-data/base/4/4144 new file mode 100644 index 00000000..71b244d8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4144 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4145 b/exercise7/blogging-platform/db-data/base/4/4145 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4146 b/exercise7/blogging-platform/db-data/base/4/4146 new file mode 100644 index 00000000..ccfa4d3f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4146 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4147 b/exercise7/blogging-platform/db-data/base/4/4147 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4148 b/exercise7/blogging-platform/db-data/base/4/4148 new file mode 100644 index 00000000..555281be Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4148 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4149 b/exercise7/blogging-platform/db-data/base/4/4149 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4150 b/exercise7/blogging-platform/db-data/base/4/4150 new file mode 100644 index 00000000..31c09736 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4150 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4151 b/exercise7/blogging-platform/db-data/base/4/4151 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4152 b/exercise7/blogging-platform/db-data/base/4/4152 new file mode 100644 index 00000000..4e2bd034 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4152 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4153 b/exercise7/blogging-platform/db-data/base/4/4153 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4154 b/exercise7/blogging-platform/db-data/base/4/4154 new file mode 100644 index 00000000..05e23a17 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4154 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4155 b/exercise7/blogging-platform/db-data/base/4/4155 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4156 b/exercise7/blogging-platform/db-data/base/4/4156 new file mode 100644 index 00000000..03529e1e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4156 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4157 b/exercise7/blogging-platform/db-data/base/4/4157 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4158 b/exercise7/blogging-platform/db-data/base/4/4158 new file mode 100644 index 00000000..0e8ef725 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4158 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4159 b/exercise7/blogging-platform/db-data/base/4/4159 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4160 b/exercise7/blogging-platform/db-data/base/4/4160 new file mode 100644 index 00000000..539f4762 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4160 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4163 b/exercise7/blogging-platform/db-data/base/4/4163 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4164 b/exercise7/blogging-platform/db-data/base/4/4164 new file mode 100644 index 00000000..57a95aef Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4164 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4165 b/exercise7/blogging-platform/db-data/base/4/4165 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4166 b/exercise7/blogging-platform/db-data/base/4/4166 new file mode 100644 index 00000000..cc46d17a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4166 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4167 b/exercise7/blogging-platform/db-data/base/4/4167 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4168 b/exercise7/blogging-platform/db-data/base/4/4168 new file mode 100644 index 00000000..ab79c1bb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4168 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4169 b/exercise7/blogging-platform/db-data/base/4/4169 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4170 b/exercise7/blogging-platform/db-data/base/4/4170 new file mode 100644 index 00000000..2b7eefba Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4170 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4171 b/exercise7/blogging-platform/db-data/base/4/4171 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4172 b/exercise7/blogging-platform/db-data/base/4/4172 new file mode 100644 index 00000000..d393d069 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4172 differ diff --git a/exercise7/blogging-platform/db-data/base/4/4173 b/exercise7/blogging-platform/db-data/base/4/4173 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/4174 b/exercise7/blogging-platform/db-data/base/4/4174 new file mode 100644 index 00000000..ebfc0c8c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/4174 differ diff --git a/exercise7/blogging-platform/db-data/base/4/5002 b/exercise7/blogging-platform/db-data/base/4/5002 new file mode 100644 index 00000000..aefa40dd Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/5002 differ diff --git a/exercise7/blogging-platform/db-data/base/4/548 b/exercise7/blogging-platform/db-data/base/4/548 new file mode 100644 index 00000000..64fdefd5 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/548 differ diff --git a/exercise7/blogging-platform/db-data/base/4/549 b/exercise7/blogging-platform/db-data/base/4/549 new file mode 100644 index 00000000..3734cc2b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/549 differ diff --git a/exercise7/blogging-platform/db-data/base/4/6102 b/exercise7/blogging-platform/db-data/base/4/6102 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/6104 b/exercise7/blogging-platform/db-data/base/4/6104 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/6106 b/exercise7/blogging-platform/db-data/base/4/6106 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/6110 b/exercise7/blogging-platform/db-data/base/4/6110 new file mode 100644 index 00000000..42e19200 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/6110 differ diff --git a/exercise7/blogging-platform/db-data/base/4/6111 b/exercise7/blogging-platform/db-data/base/4/6111 new file mode 100644 index 00000000..d012727d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/6111 differ diff --git a/exercise7/blogging-platform/db-data/base/4/6112 b/exercise7/blogging-platform/db-data/base/4/6112 new file mode 100644 index 00000000..293367c2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/6112 differ diff --git a/exercise7/blogging-platform/db-data/base/4/6113 b/exercise7/blogging-platform/db-data/base/4/6113 new file mode 100644 index 00000000..542f8faa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/6113 differ diff --git a/exercise7/blogging-platform/db-data/base/4/6116 b/exercise7/blogging-platform/db-data/base/4/6116 new file mode 100644 index 00000000..787d5d18 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/6116 differ diff --git a/exercise7/blogging-platform/db-data/base/4/6117 b/exercise7/blogging-platform/db-data/base/4/6117 new file mode 100644 index 00000000..2b5656b2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/6117 differ diff --git a/exercise7/blogging-platform/db-data/base/4/6175 b/exercise7/blogging-platform/db-data/base/4/6175 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/6176 b/exercise7/blogging-platform/db-data/base/4/6176 new file mode 100644 index 00000000..ff08a8eb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/6176 differ diff --git a/exercise7/blogging-platform/db-data/base/4/6228 b/exercise7/blogging-platform/db-data/base/4/6228 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/6229 b/exercise7/blogging-platform/db-data/base/4/6229 new file mode 100644 index 00000000..3e1d0156 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/6229 differ diff --git a/exercise7/blogging-platform/db-data/base/4/6237 b/exercise7/blogging-platform/db-data/base/4/6237 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/6238 b/exercise7/blogging-platform/db-data/base/4/6238 new file mode 100644 index 00000000..e7c0e8c3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/6238 differ diff --git a/exercise7/blogging-platform/db-data/base/4/6239 b/exercise7/blogging-platform/db-data/base/4/6239 new file mode 100644 index 00000000..6c60b507 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/6239 differ diff --git a/exercise7/blogging-platform/db-data/base/4/826 b/exercise7/blogging-platform/db-data/base/4/826 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/4/827 b/exercise7/blogging-platform/db-data/base/4/827 new file mode 100644 index 00000000..f102efd8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/827 differ diff --git a/exercise7/blogging-platform/db-data/base/4/828 b/exercise7/blogging-platform/db-data/base/4/828 new file mode 100644 index 00000000..e97c210f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/828 differ diff --git a/exercise7/blogging-platform/db-data/base/4/PG_VERSION b/exercise7/blogging-platform/db-data/base/4/PG_VERSION new file mode 100644 index 00000000..98d9bcb7 --- /dev/null +++ b/exercise7/blogging-platform/db-data/base/4/PG_VERSION @@ -0,0 +1 @@ +17 diff --git a/exercise7/blogging-platform/db-data/base/4/pg_filenode.map b/exercise7/blogging-platform/db-data/base/4/pg_filenode.map new file mode 100644 index 00000000..4fc801aa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/4/pg_filenode.map differ diff --git a/exercise7/blogging-platform/db-data/base/5/112 b/exercise7/blogging-platform/db-data/base/5/112 new file mode 100644 index 00000000..9531ca83 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/112 differ diff --git a/exercise7/blogging-platform/db-data/base/5/113 b/exercise7/blogging-platform/db-data/base/5/113 new file mode 100644 index 00000000..f92630d0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/113 differ diff --git a/exercise7/blogging-platform/db-data/base/5/1247 b/exercise7/blogging-platform/db-data/base/5/1247 new file mode 100644 index 00000000..73020244 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1247 differ diff --git a/exercise7/blogging-platform/db-data/base/5/1247_fsm b/exercise7/blogging-platform/db-data/base/5/1247_fsm new file mode 100644 index 00000000..fd573083 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1247_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/1247_vm b/exercise7/blogging-platform/db-data/base/5/1247_vm new file mode 100644 index 00000000..6a436ac1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1247_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/1249 b/exercise7/blogging-platform/db-data/base/5/1249 new file mode 100644 index 00000000..dfc4b0f5 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1249 differ diff --git a/exercise7/blogging-platform/db-data/base/5/1249_fsm b/exercise7/blogging-platform/db-data/base/5/1249_fsm new file mode 100644 index 00000000..3c5251e4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1249_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/1249_vm b/exercise7/blogging-platform/db-data/base/5/1249_vm new file mode 100644 index 00000000..c2b6b4cc Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1249_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/1255 b/exercise7/blogging-platform/db-data/base/5/1255 new file mode 100644 index 00000000..20a0dc05 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1255 differ diff --git a/exercise7/blogging-platform/db-data/base/5/1255_fsm b/exercise7/blogging-platform/db-data/base/5/1255_fsm new file mode 100644 index 00000000..062bfc5b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1255_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/1255_vm b/exercise7/blogging-platform/db-data/base/5/1255_vm new file mode 100644 index 00000000..41e0e3d1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1255_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/1259 b/exercise7/blogging-platform/db-data/base/5/1259 new file mode 100644 index 00000000..5718e81d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1259 differ diff --git a/exercise7/blogging-platform/db-data/base/5/1259_fsm b/exercise7/blogging-platform/db-data/base/5/1259_fsm new file mode 100644 index 00000000..2077a7b0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1259_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/1259_vm b/exercise7/blogging-platform/db-data/base/5/1259_vm new file mode 100644 index 00000000..f16367fd Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/1259_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/13402 b/exercise7/blogging-platform/db-data/base/5/13402 new file mode 100644 index 00000000..0a380807 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13402 differ diff --git a/exercise7/blogging-platform/db-data/base/5/13402_fsm b/exercise7/blogging-platform/db-data/base/5/13402_fsm new file mode 100644 index 00000000..45338f1e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13402_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/13402_vm b/exercise7/blogging-platform/db-data/base/5/13402_vm new file mode 100644 index 00000000..415c20fc Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13402_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/13405 b/exercise7/blogging-platform/db-data/base/5/13405 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/13406 b/exercise7/blogging-platform/db-data/base/5/13406 new file mode 100644 index 00000000..61968fde Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13406 differ diff --git a/exercise7/blogging-platform/db-data/base/5/13407 b/exercise7/blogging-platform/db-data/base/5/13407 new file mode 100644 index 00000000..ae12b607 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13407 differ diff --git a/exercise7/blogging-platform/db-data/base/5/13407_fsm b/exercise7/blogging-platform/db-data/base/5/13407_fsm new file mode 100644 index 00000000..ce7c26eb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13407_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/13407_vm b/exercise7/blogging-platform/db-data/base/5/13407_vm new file mode 100644 index 00000000..fb8ff1c0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13407_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/13410 b/exercise7/blogging-platform/db-data/base/5/13410 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/13411 b/exercise7/blogging-platform/db-data/base/5/13411 new file mode 100644 index 00000000..1441969e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13411 differ diff --git a/exercise7/blogging-platform/db-data/base/5/13412 b/exercise7/blogging-platform/db-data/base/5/13412 new file mode 100644 index 00000000..2af8847a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13412 differ diff --git a/exercise7/blogging-platform/db-data/base/5/13412_fsm b/exercise7/blogging-platform/db-data/base/5/13412_fsm new file mode 100644 index 00000000..0673adae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13412_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/13412_vm b/exercise7/blogging-platform/db-data/base/5/13412_vm new file mode 100644 index 00000000..ebd5a5aa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13412_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/13415 b/exercise7/blogging-platform/db-data/base/5/13415 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/13416 b/exercise7/blogging-platform/db-data/base/5/13416 new file mode 100644 index 00000000..e43a6668 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13416 differ diff --git a/exercise7/blogging-platform/db-data/base/5/13417 b/exercise7/blogging-platform/db-data/base/5/13417 new file mode 100644 index 00000000..e126e7ff Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13417 differ diff --git a/exercise7/blogging-platform/db-data/base/5/13417_fsm b/exercise7/blogging-platform/db-data/base/5/13417_fsm new file mode 100644 index 00000000..a836ddf7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13417_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/13417_vm b/exercise7/blogging-platform/db-data/base/5/13417_vm new file mode 100644 index 00000000..b2366f4d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13417_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/13420 b/exercise7/blogging-platform/db-data/base/5/13420 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/13421 b/exercise7/blogging-platform/db-data/base/5/13421 new file mode 100644 index 00000000..35abe5f1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/13421 differ diff --git a/exercise7/blogging-platform/db-data/base/5/1417 b/exercise7/blogging-platform/db-data/base/5/1417 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/1418 b/exercise7/blogging-platform/db-data/base/5/1418 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/16387 b/exercise7/blogging-platform/db-data/base/5/16387 new file mode 100644 index 00000000..d5e4afc1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/16387 differ diff --git a/exercise7/blogging-platform/db-data/base/5/16388 b/exercise7/blogging-platform/db-data/base/5/16388 new file mode 100644 index 00000000..0313622e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/16388 differ diff --git a/exercise7/blogging-platform/db-data/base/5/16394 b/exercise7/blogging-platform/db-data/base/5/16394 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/16395 b/exercise7/blogging-platform/db-data/base/5/16395 new file mode 100644 index 00000000..c2db341a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/16395 differ diff --git a/exercise7/blogging-platform/db-data/base/5/16396 b/exercise7/blogging-platform/db-data/base/5/16396 new file mode 100644 index 00000000..def82771 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/16396 differ diff --git a/exercise7/blogging-platform/db-data/base/5/174 b/exercise7/blogging-platform/db-data/base/5/174 new file mode 100644 index 00000000..4f4d8bed Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/174 differ diff --git a/exercise7/blogging-platform/db-data/base/5/175 b/exercise7/blogging-platform/db-data/base/5/175 new file mode 100644 index 00000000..98fd8de8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/175 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2187 b/exercise7/blogging-platform/db-data/base/5/2187 new file mode 100644 index 00000000..141f7eeb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2187 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2224 b/exercise7/blogging-platform/db-data/base/5/2224 new file mode 100644 index 00000000..eb2133c5 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2224 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2228 b/exercise7/blogging-platform/db-data/base/5/2228 new file mode 100644 index 00000000..bfecf011 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2228 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2328 b/exercise7/blogging-platform/db-data/base/5/2328 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/2336 b/exercise7/blogging-platform/db-data/base/5/2336 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/2337 b/exercise7/blogging-platform/db-data/base/5/2337 new file mode 100644 index 00000000..e647f387 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2337 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2579 b/exercise7/blogging-platform/db-data/base/5/2579 new file mode 100644 index 00000000..d2ba26db Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2579 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2600 b/exercise7/blogging-platform/db-data/base/5/2600 new file mode 100644 index 00000000..9dfd1a85 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2600 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2600_fsm b/exercise7/blogging-platform/db-data/base/5/2600_fsm new file mode 100644 index 00000000..c542a78b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2600_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2600_vm b/exercise7/blogging-platform/db-data/base/5/2600_vm new file mode 100644 index 00000000..3b53bade Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2600_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2601 b/exercise7/blogging-platform/db-data/base/5/2601 new file mode 100644 index 00000000..d8001c8c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2601 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2601_fsm b/exercise7/blogging-platform/db-data/base/5/2601_fsm new file mode 100644 index 00000000..d388044f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2601_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2601_vm b/exercise7/blogging-platform/db-data/base/5/2601_vm new file mode 100644 index 00000000..117547dd Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2601_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2602 b/exercise7/blogging-platform/db-data/base/5/2602 new file mode 100644 index 00000000..4a27b0a3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2602 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2602_fsm b/exercise7/blogging-platform/db-data/base/5/2602_fsm new file mode 100644 index 00000000..23170d85 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2602_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2602_vm b/exercise7/blogging-platform/db-data/base/5/2602_vm new file mode 100644 index 00000000..ce836831 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2602_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2603 b/exercise7/blogging-platform/db-data/base/5/2603 new file mode 100644 index 00000000..d511af56 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2603 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2603_fsm b/exercise7/blogging-platform/db-data/base/5/2603_fsm new file mode 100644 index 00000000..949bd18f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2603_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2603_vm b/exercise7/blogging-platform/db-data/base/5/2603_vm new file mode 100644 index 00000000..a2dbc751 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2603_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2604 b/exercise7/blogging-platform/db-data/base/5/2604 new file mode 100644 index 00000000..bcec3761 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2604 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2605 b/exercise7/blogging-platform/db-data/base/5/2605 new file mode 100644 index 00000000..eeaa7eaa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2605 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2605_fsm b/exercise7/blogging-platform/db-data/base/5/2605_fsm new file mode 100644 index 00000000..f3b92bf7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2605_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2605_vm b/exercise7/blogging-platform/db-data/base/5/2605_vm new file mode 100644 index 00000000..96f1f7bc Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2605_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2606 b/exercise7/blogging-platform/db-data/base/5/2606 new file mode 100644 index 00000000..596c26f3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2606 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2606_fsm b/exercise7/blogging-platform/db-data/base/5/2606_fsm new file mode 100644 index 00000000..267454e7 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2606_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2606_vm b/exercise7/blogging-platform/db-data/base/5/2606_vm new file mode 100644 index 00000000..8b54ab5f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2606_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2607 b/exercise7/blogging-platform/db-data/base/5/2607 new file mode 100644 index 00000000..bfad49ae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2607 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2607_fsm b/exercise7/blogging-platform/db-data/base/5/2607_fsm new file mode 100644 index 00000000..80ac8b14 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2607_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2607_vm b/exercise7/blogging-platform/db-data/base/5/2607_vm new file mode 100644 index 00000000..5ffcc070 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2607_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2608 b/exercise7/blogging-platform/db-data/base/5/2608 new file mode 100644 index 00000000..7e872c5c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2608 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2608_fsm b/exercise7/blogging-platform/db-data/base/5/2608_fsm new file mode 100644 index 00000000..e53188de Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2608_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2608_vm b/exercise7/blogging-platform/db-data/base/5/2608_vm new file mode 100644 index 00000000..f0f8aca3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2608_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2609 b/exercise7/blogging-platform/db-data/base/5/2609 new file mode 100644 index 00000000..44f39b72 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2609 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2609_fsm b/exercise7/blogging-platform/db-data/base/5/2609_fsm new file mode 100644 index 00000000..fc288908 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2609_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2609_vm b/exercise7/blogging-platform/db-data/base/5/2609_vm new file mode 100644 index 00000000..62a4d542 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2609_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2610 b/exercise7/blogging-platform/db-data/base/5/2610 new file mode 100644 index 00000000..6cf69544 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2610 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2610_fsm b/exercise7/blogging-platform/db-data/base/5/2610_fsm new file mode 100644 index 00000000..ecbcb5fa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2610_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2610_vm b/exercise7/blogging-platform/db-data/base/5/2610_vm new file mode 100644 index 00000000..67e9ab75 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2610_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2611 b/exercise7/blogging-platform/db-data/base/5/2611 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/2612 b/exercise7/blogging-platform/db-data/base/5/2612 new file mode 100644 index 00000000..66d433c3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2612 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2612_fsm b/exercise7/blogging-platform/db-data/base/5/2612_fsm new file mode 100644 index 00000000..877976ac Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2612_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2612_vm b/exercise7/blogging-platform/db-data/base/5/2612_vm new file mode 100644 index 00000000..1ade0f97 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2612_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2613 b/exercise7/blogging-platform/db-data/base/5/2613 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/2615 b/exercise7/blogging-platform/db-data/base/5/2615 new file mode 100644 index 00000000..286f33f0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2615 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2615_fsm b/exercise7/blogging-platform/db-data/base/5/2615_fsm new file mode 100644 index 00000000..d041693e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2615_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2615_vm b/exercise7/blogging-platform/db-data/base/5/2615_vm new file mode 100644 index 00000000..9cbe6e1e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2615_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2616 b/exercise7/blogging-platform/db-data/base/5/2616 new file mode 100644 index 00000000..0d60d797 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2616 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2616_fsm b/exercise7/blogging-platform/db-data/base/5/2616_fsm new file mode 100644 index 00000000..cb924c95 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2616_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2616_vm b/exercise7/blogging-platform/db-data/base/5/2616_vm new file mode 100644 index 00000000..0d2f91ea Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2616_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2617 b/exercise7/blogging-platform/db-data/base/5/2617 new file mode 100644 index 00000000..bcdfc183 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2617 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2617_fsm b/exercise7/blogging-platform/db-data/base/5/2617_fsm new file mode 100644 index 00000000..29d60666 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2617_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2617_vm b/exercise7/blogging-platform/db-data/base/5/2617_vm new file mode 100644 index 00000000..ffacdf58 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2617_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2618 b/exercise7/blogging-platform/db-data/base/5/2618 new file mode 100644 index 00000000..c0e64256 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2618 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2618_fsm b/exercise7/blogging-platform/db-data/base/5/2618_fsm new file mode 100644 index 00000000..6cf107fa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2618_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2618_vm b/exercise7/blogging-platform/db-data/base/5/2618_vm new file mode 100644 index 00000000..8af390e0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2618_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2619 b/exercise7/blogging-platform/db-data/base/5/2619 new file mode 100644 index 00000000..3aa4e07d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2619 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2619_fsm b/exercise7/blogging-platform/db-data/base/5/2619_fsm new file mode 100644 index 00000000..1067ef16 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2619_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2619_vm b/exercise7/blogging-platform/db-data/base/5/2619_vm new file mode 100644 index 00000000..ca8d2214 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2619_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2620 b/exercise7/blogging-platform/db-data/base/5/2620 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/2650 b/exercise7/blogging-platform/db-data/base/5/2650 new file mode 100644 index 00000000..11ef803f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2650 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2651 b/exercise7/blogging-platform/db-data/base/5/2651 new file mode 100644 index 00000000..bd4bbaf4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2651 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2652 b/exercise7/blogging-platform/db-data/base/5/2652 new file mode 100644 index 00000000..5009d4ae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2652 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2653 b/exercise7/blogging-platform/db-data/base/5/2653 new file mode 100644 index 00000000..db88c69a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2653 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2654 b/exercise7/blogging-platform/db-data/base/5/2654 new file mode 100644 index 00000000..e939ddd9 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2654 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2655 b/exercise7/blogging-platform/db-data/base/5/2655 new file mode 100644 index 00000000..ff2c0d7d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2655 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2656 b/exercise7/blogging-platform/db-data/base/5/2656 new file mode 100644 index 00000000..81f31aa6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2656 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2657 b/exercise7/blogging-platform/db-data/base/5/2657 new file mode 100644 index 00000000..341a7453 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2657 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2658 b/exercise7/blogging-platform/db-data/base/5/2658 new file mode 100644 index 00000000..043f2674 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2658 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2659 b/exercise7/blogging-platform/db-data/base/5/2659 new file mode 100644 index 00000000..61ae7f95 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2659 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2660 b/exercise7/blogging-platform/db-data/base/5/2660 new file mode 100644 index 00000000..315985a3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2660 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2661 b/exercise7/blogging-platform/db-data/base/5/2661 new file mode 100644 index 00000000..7ee15f5a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2661 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2662 b/exercise7/blogging-platform/db-data/base/5/2662 new file mode 100644 index 00000000..f7749d66 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2662 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2663 b/exercise7/blogging-platform/db-data/base/5/2663 new file mode 100644 index 00000000..94fedab9 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2663 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2664 b/exercise7/blogging-platform/db-data/base/5/2664 new file mode 100644 index 00000000..64a357b4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2664 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2665 b/exercise7/blogging-platform/db-data/base/5/2665 new file mode 100644 index 00000000..8a85477a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2665 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2666 b/exercise7/blogging-platform/db-data/base/5/2666 new file mode 100644 index 00000000..b2bf52b6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2666 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2667 b/exercise7/blogging-platform/db-data/base/5/2667 new file mode 100644 index 00000000..3a5a1a1a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2667 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2668 b/exercise7/blogging-platform/db-data/base/5/2668 new file mode 100644 index 00000000..9cac2398 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2668 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2669 b/exercise7/blogging-platform/db-data/base/5/2669 new file mode 100644 index 00000000..b76f9655 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2669 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2670 b/exercise7/blogging-platform/db-data/base/5/2670 new file mode 100644 index 00000000..77d8baf1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2670 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2673 b/exercise7/blogging-platform/db-data/base/5/2673 new file mode 100644 index 00000000..7e183a2b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2673 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2674 b/exercise7/blogging-platform/db-data/base/5/2674 new file mode 100644 index 00000000..9ea5ab95 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2674 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2675 b/exercise7/blogging-platform/db-data/base/5/2675 new file mode 100644 index 00000000..5cd70919 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2675 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2678 b/exercise7/blogging-platform/db-data/base/5/2678 new file mode 100644 index 00000000..a168b0ff Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2678 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2679 b/exercise7/blogging-platform/db-data/base/5/2679 new file mode 100644 index 00000000..6a31038e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2679 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2680 b/exercise7/blogging-platform/db-data/base/5/2680 new file mode 100644 index 00000000..2c8dcf6d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2680 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2681 b/exercise7/blogging-platform/db-data/base/5/2681 new file mode 100644 index 00000000..08abfd2d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2681 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2682 b/exercise7/blogging-platform/db-data/base/5/2682 new file mode 100644 index 00000000..68325ed6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2682 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2683 b/exercise7/blogging-platform/db-data/base/5/2683 new file mode 100644 index 00000000..6fb64067 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2683 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2684 b/exercise7/blogging-platform/db-data/base/5/2684 new file mode 100644 index 00000000..b15dd757 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2684 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2685 b/exercise7/blogging-platform/db-data/base/5/2685 new file mode 100644 index 00000000..bb046663 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2685 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2686 b/exercise7/blogging-platform/db-data/base/5/2686 new file mode 100644 index 00000000..3cacc1cd Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2686 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2687 b/exercise7/blogging-platform/db-data/base/5/2687 new file mode 100644 index 00000000..a0d2b937 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2687 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2688 b/exercise7/blogging-platform/db-data/base/5/2688 new file mode 100644 index 00000000..68903d27 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2688 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2689 b/exercise7/blogging-platform/db-data/base/5/2689 new file mode 100644 index 00000000..6c77095d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2689 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2690 b/exercise7/blogging-platform/db-data/base/5/2690 new file mode 100644 index 00000000..cd75d231 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2690 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2691 b/exercise7/blogging-platform/db-data/base/5/2691 new file mode 100644 index 00000000..76612514 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2691 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2692 b/exercise7/blogging-platform/db-data/base/5/2692 new file mode 100644 index 00000000..f37f4d62 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2692 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2693 b/exercise7/blogging-platform/db-data/base/5/2693 new file mode 100644 index 00000000..48307f05 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2693 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2696 b/exercise7/blogging-platform/db-data/base/5/2696 new file mode 100644 index 00000000..f21e7983 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2696 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2699 b/exercise7/blogging-platform/db-data/base/5/2699 new file mode 100644 index 00000000..e628d48c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2699 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2701 b/exercise7/blogging-platform/db-data/base/5/2701 new file mode 100644 index 00000000..292dfe51 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2701 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2702 b/exercise7/blogging-platform/db-data/base/5/2702 new file mode 100644 index 00000000..b0fda24f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2702 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2703 b/exercise7/blogging-platform/db-data/base/5/2703 new file mode 100644 index 00000000..72070c63 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2703 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2704 b/exercise7/blogging-platform/db-data/base/5/2704 new file mode 100644 index 00000000..4e143866 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2704 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2753 b/exercise7/blogging-platform/db-data/base/5/2753 new file mode 100644 index 00000000..3c16dff6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2753 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2753_fsm b/exercise7/blogging-platform/db-data/base/5/2753_fsm new file mode 100644 index 00000000..642bce3b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2753_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2753_vm b/exercise7/blogging-platform/db-data/base/5/2753_vm new file mode 100644 index 00000000..77d88166 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2753_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2754 b/exercise7/blogging-platform/db-data/base/5/2754 new file mode 100644 index 00000000..35f5980b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2754 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2755 b/exercise7/blogging-platform/db-data/base/5/2755 new file mode 100644 index 00000000..f3c38bf9 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2755 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2756 b/exercise7/blogging-platform/db-data/base/5/2756 new file mode 100644 index 00000000..fd0b8cf6 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2756 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2757 b/exercise7/blogging-platform/db-data/base/5/2757 new file mode 100644 index 00000000..5d45a8e4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2757 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2830 b/exercise7/blogging-platform/db-data/base/5/2830 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/2831 b/exercise7/blogging-platform/db-data/base/5/2831 new file mode 100644 index 00000000..3ab32401 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2831 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2832 b/exercise7/blogging-platform/db-data/base/5/2832 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/2833 b/exercise7/blogging-platform/db-data/base/5/2833 new file mode 100644 index 00000000..b30ab7d1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2833 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2834 b/exercise7/blogging-platform/db-data/base/5/2834 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/2835 b/exercise7/blogging-platform/db-data/base/5/2835 new file mode 100644 index 00000000..f1c71ca3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2835 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2836 b/exercise7/blogging-platform/db-data/base/5/2836 new file mode 100644 index 00000000..6fc2811b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2836 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2836_fsm b/exercise7/blogging-platform/db-data/base/5/2836_fsm new file mode 100644 index 00000000..ed42b8e8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2836_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2836_vm b/exercise7/blogging-platform/db-data/base/5/2836_vm new file mode 100644 index 00000000..0f76b35e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2836_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2837 b/exercise7/blogging-platform/db-data/base/5/2837 new file mode 100644 index 00000000..53729f8d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2837 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2838 b/exercise7/blogging-platform/db-data/base/5/2838 new file mode 100644 index 00000000..b113c058 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2838 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2838_fsm b/exercise7/blogging-platform/db-data/base/5/2838_fsm new file mode 100644 index 00000000..ad618337 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2838_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2838_vm b/exercise7/blogging-platform/db-data/base/5/2838_vm new file mode 100644 index 00000000..41485710 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2838_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2839 b/exercise7/blogging-platform/db-data/base/5/2839 new file mode 100644 index 00000000..f3c3d8e4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2839 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2840 b/exercise7/blogging-platform/db-data/base/5/2840 new file mode 100644 index 00000000..cc06f804 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2840 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2840_fsm b/exercise7/blogging-platform/db-data/base/5/2840_fsm new file mode 100644 index 00000000..a6e901ee Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2840_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2840_vm b/exercise7/blogging-platform/db-data/base/5/2840_vm new file mode 100644 index 00000000..36dae06f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2840_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/2841 b/exercise7/blogging-platform/db-data/base/5/2841 new file mode 100644 index 00000000..0551bc16 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2841 differ diff --git a/exercise7/blogging-platform/db-data/base/5/2995 b/exercise7/blogging-platform/db-data/base/5/2995 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/2996 b/exercise7/blogging-platform/db-data/base/5/2996 new file mode 100644 index 00000000..f286c20d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/2996 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3079 b/exercise7/blogging-platform/db-data/base/5/3079 new file mode 100644 index 00000000..e46cc798 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3079 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3079_fsm b/exercise7/blogging-platform/db-data/base/5/3079_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3079_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3079_vm b/exercise7/blogging-platform/db-data/base/5/3079_vm new file mode 100644 index 00000000..9eba6e75 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3079_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3080 b/exercise7/blogging-platform/db-data/base/5/3080 new file mode 100644 index 00000000..db70958c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3080 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3081 b/exercise7/blogging-platform/db-data/base/5/3081 new file mode 100644 index 00000000..06f97844 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3081 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3085 b/exercise7/blogging-platform/db-data/base/5/3085 new file mode 100644 index 00000000..4392b73f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3085 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3118 b/exercise7/blogging-platform/db-data/base/5/3118 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3119 b/exercise7/blogging-platform/db-data/base/5/3119 new file mode 100644 index 00000000..059d8b65 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3119 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3164 b/exercise7/blogging-platform/db-data/base/5/3164 new file mode 100644 index 00000000..a6c998e8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3164 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3256 b/exercise7/blogging-platform/db-data/base/5/3256 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3257 b/exercise7/blogging-platform/db-data/base/5/3257 new file mode 100644 index 00000000..fbf5bbec Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3257 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3258 b/exercise7/blogging-platform/db-data/base/5/3258 new file mode 100644 index 00000000..e6ea9ced Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3258 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3350 b/exercise7/blogging-platform/db-data/base/5/3350 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3351 b/exercise7/blogging-platform/db-data/base/5/3351 new file mode 100644 index 00000000..afd5efa0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3351 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3379 b/exercise7/blogging-platform/db-data/base/5/3379 new file mode 100644 index 00000000..66bc81a4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3379 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3380 b/exercise7/blogging-platform/db-data/base/5/3380 new file mode 100644 index 00000000..dea303b8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3380 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3381 b/exercise7/blogging-platform/db-data/base/5/3381 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3394 b/exercise7/blogging-platform/db-data/base/5/3394 new file mode 100644 index 00000000..8a25fb94 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3394 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3394_fsm b/exercise7/blogging-platform/db-data/base/5/3394_fsm new file mode 100644 index 00000000..ffa86444 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3394_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3394_vm b/exercise7/blogging-platform/db-data/base/5/3394_vm new file mode 100644 index 00000000..394abc25 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3394_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3395 b/exercise7/blogging-platform/db-data/base/5/3395 new file mode 100644 index 00000000..de77c1cb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3395 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3429 b/exercise7/blogging-platform/db-data/base/5/3429 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3430 b/exercise7/blogging-platform/db-data/base/5/3430 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3431 b/exercise7/blogging-platform/db-data/base/5/3431 new file mode 100644 index 00000000..1367f852 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3431 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3433 b/exercise7/blogging-platform/db-data/base/5/3433 new file mode 100644 index 00000000..dbab200d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3433 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3439 b/exercise7/blogging-platform/db-data/base/5/3439 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3440 b/exercise7/blogging-platform/db-data/base/5/3440 new file mode 100644 index 00000000..13699045 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3440 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3455 b/exercise7/blogging-platform/db-data/base/5/3455 new file mode 100644 index 00000000..92f57768 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3455 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3456 b/exercise7/blogging-platform/db-data/base/5/3456 new file mode 100644 index 00000000..e36b8156 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3456 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3456_fsm b/exercise7/blogging-platform/db-data/base/5/3456_fsm new file mode 100644 index 00000000..51cf9b86 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3456_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3456_vm b/exercise7/blogging-platform/db-data/base/5/3456_vm new file mode 100644 index 00000000..633a2314 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3456_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3466 b/exercise7/blogging-platform/db-data/base/5/3466 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3467 b/exercise7/blogging-platform/db-data/base/5/3467 new file mode 100644 index 00000000..fa34587b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3467 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3468 b/exercise7/blogging-platform/db-data/base/5/3468 new file mode 100644 index 00000000..353f3b30 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3468 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3501 b/exercise7/blogging-platform/db-data/base/5/3501 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3502 b/exercise7/blogging-platform/db-data/base/5/3502 new file mode 100644 index 00000000..15c7adaf Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3502 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3503 b/exercise7/blogging-platform/db-data/base/5/3503 new file mode 100644 index 00000000..befb4256 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3503 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3534 b/exercise7/blogging-platform/db-data/base/5/3534 new file mode 100644 index 00000000..94e5e8ea Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3534 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3541 b/exercise7/blogging-platform/db-data/base/5/3541 new file mode 100644 index 00000000..40869ad3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3541 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3541_fsm b/exercise7/blogging-platform/db-data/base/5/3541_fsm new file mode 100644 index 00000000..a3a2de4d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3541_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3541_vm b/exercise7/blogging-platform/db-data/base/5/3541_vm new file mode 100644 index 00000000..adff1a8a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3541_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3542 b/exercise7/blogging-platform/db-data/base/5/3542 new file mode 100644 index 00000000..bb83580a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3542 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3574 b/exercise7/blogging-platform/db-data/base/5/3574 new file mode 100644 index 00000000..b026df10 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3574 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3575 b/exercise7/blogging-platform/db-data/base/5/3575 new file mode 100644 index 00000000..bdec5326 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3575 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3576 b/exercise7/blogging-platform/db-data/base/5/3576 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3596 b/exercise7/blogging-platform/db-data/base/5/3596 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3597 b/exercise7/blogging-platform/db-data/base/5/3597 new file mode 100644 index 00000000..8963738c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3597 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3598 b/exercise7/blogging-platform/db-data/base/5/3598 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/3599 b/exercise7/blogging-platform/db-data/base/5/3599 new file mode 100644 index 00000000..999330d2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3599 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3600 b/exercise7/blogging-platform/db-data/base/5/3600 new file mode 100644 index 00000000..6a0b52a3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3600 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3600_fsm b/exercise7/blogging-platform/db-data/base/5/3600_fsm new file mode 100644 index 00000000..cebec199 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3600_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3600_vm b/exercise7/blogging-platform/db-data/base/5/3600_vm new file mode 100644 index 00000000..83222332 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3600_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3601 b/exercise7/blogging-platform/db-data/base/5/3601 new file mode 100644 index 00000000..04c846ec Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3601 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3601_fsm b/exercise7/blogging-platform/db-data/base/5/3601_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3601_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3601_vm b/exercise7/blogging-platform/db-data/base/5/3601_vm new file mode 100644 index 00000000..7ab33351 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3601_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3602 b/exercise7/blogging-platform/db-data/base/5/3602 new file mode 100644 index 00000000..3eef8ca1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3602 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3602_fsm b/exercise7/blogging-platform/db-data/base/5/3602_fsm new file mode 100644 index 00000000..d7897de2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3602_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3602_vm b/exercise7/blogging-platform/db-data/base/5/3602_vm new file mode 100644 index 00000000..a711a24c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3602_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3603 b/exercise7/blogging-platform/db-data/base/5/3603 new file mode 100644 index 00000000..063b4544 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3603 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3603_fsm b/exercise7/blogging-platform/db-data/base/5/3603_fsm new file mode 100644 index 00000000..c28dd4fa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3603_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3603_vm b/exercise7/blogging-platform/db-data/base/5/3603_vm new file mode 100644 index 00000000..f5f1b70b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3603_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3604 b/exercise7/blogging-platform/db-data/base/5/3604 new file mode 100644 index 00000000..bcbb3a59 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3604 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3605 b/exercise7/blogging-platform/db-data/base/5/3605 new file mode 100644 index 00000000..1d969477 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3605 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3606 b/exercise7/blogging-platform/db-data/base/5/3606 new file mode 100644 index 00000000..698e6d09 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3606 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3607 b/exercise7/blogging-platform/db-data/base/5/3607 new file mode 100644 index 00000000..1d023e00 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3607 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3608 b/exercise7/blogging-platform/db-data/base/5/3608 new file mode 100644 index 00000000..304ac459 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3608 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3609 b/exercise7/blogging-platform/db-data/base/5/3609 new file mode 100644 index 00000000..d5686615 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3609 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3712 b/exercise7/blogging-platform/db-data/base/5/3712 new file mode 100644 index 00000000..d459b6ce Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3712 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3764 b/exercise7/blogging-platform/db-data/base/5/3764 new file mode 100644 index 00000000..86aca4e5 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3764 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3764_fsm b/exercise7/blogging-platform/db-data/base/5/3764_fsm new file mode 100644 index 00000000..f64db4df Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3764_fsm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3764_vm b/exercise7/blogging-platform/db-data/base/5/3764_vm new file mode 100644 index 00000000..887acfae Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3764_vm differ diff --git a/exercise7/blogging-platform/db-data/base/5/3766 b/exercise7/blogging-platform/db-data/base/5/3766 new file mode 100644 index 00000000..9c8ec155 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3766 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3767 b/exercise7/blogging-platform/db-data/base/5/3767 new file mode 100644 index 00000000..dc122957 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3767 differ diff --git a/exercise7/blogging-platform/db-data/base/5/3997 b/exercise7/blogging-platform/db-data/base/5/3997 new file mode 100644 index 00000000..104781d0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/3997 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4143 b/exercise7/blogging-platform/db-data/base/5/4143 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4144 b/exercise7/blogging-platform/db-data/base/5/4144 new file mode 100644 index 00000000..71b244d8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4144 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4145 b/exercise7/blogging-platform/db-data/base/5/4145 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4146 b/exercise7/blogging-platform/db-data/base/5/4146 new file mode 100644 index 00000000..ccfa4d3f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4146 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4147 b/exercise7/blogging-platform/db-data/base/5/4147 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4148 b/exercise7/blogging-platform/db-data/base/5/4148 new file mode 100644 index 00000000..555281be Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4148 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4149 b/exercise7/blogging-platform/db-data/base/5/4149 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4150 b/exercise7/blogging-platform/db-data/base/5/4150 new file mode 100644 index 00000000..31c09736 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4150 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4151 b/exercise7/blogging-platform/db-data/base/5/4151 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4152 b/exercise7/blogging-platform/db-data/base/5/4152 new file mode 100644 index 00000000..4e2bd034 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4152 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4153 b/exercise7/blogging-platform/db-data/base/5/4153 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4154 b/exercise7/blogging-platform/db-data/base/5/4154 new file mode 100644 index 00000000..05e23a17 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4154 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4155 b/exercise7/blogging-platform/db-data/base/5/4155 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4156 b/exercise7/blogging-platform/db-data/base/5/4156 new file mode 100644 index 00000000..03529e1e Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4156 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4157 b/exercise7/blogging-platform/db-data/base/5/4157 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4158 b/exercise7/blogging-platform/db-data/base/5/4158 new file mode 100644 index 00000000..0e8ef725 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4158 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4159 b/exercise7/blogging-platform/db-data/base/5/4159 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4160 b/exercise7/blogging-platform/db-data/base/5/4160 new file mode 100644 index 00000000..539f4762 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4160 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4163 b/exercise7/blogging-platform/db-data/base/5/4163 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4164 b/exercise7/blogging-platform/db-data/base/5/4164 new file mode 100644 index 00000000..57a95aef Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4164 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4165 b/exercise7/blogging-platform/db-data/base/5/4165 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4166 b/exercise7/blogging-platform/db-data/base/5/4166 new file mode 100644 index 00000000..cc46d17a Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4166 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4167 b/exercise7/blogging-platform/db-data/base/5/4167 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4168 b/exercise7/blogging-platform/db-data/base/5/4168 new file mode 100644 index 00000000..ab79c1bb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4168 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4169 b/exercise7/blogging-platform/db-data/base/5/4169 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4170 b/exercise7/blogging-platform/db-data/base/5/4170 new file mode 100644 index 00000000..2b7eefba Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4170 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4171 b/exercise7/blogging-platform/db-data/base/5/4171 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4172 b/exercise7/blogging-platform/db-data/base/5/4172 new file mode 100644 index 00000000..d393d069 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4172 differ diff --git a/exercise7/blogging-platform/db-data/base/5/4173 b/exercise7/blogging-platform/db-data/base/5/4173 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/4174 b/exercise7/blogging-platform/db-data/base/5/4174 new file mode 100644 index 00000000..ebfc0c8c Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/4174 differ diff --git a/exercise7/blogging-platform/db-data/base/5/5002 b/exercise7/blogging-platform/db-data/base/5/5002 new file mode 100644 index 00000000..80dc6345 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/5002 differ diff --git a/exercise7/blogging-platform/db-data/base/5/548 b/exercise7/blogging-platform/db-data/base/5/548 new file mode 100644 index 00000000..64fdefd5 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/548 differ diff --git a/exercise7/blogging-platform/db-data/base/5/549 b/exercise7/blogging-platform/db-data/base/5/549 new file mode 100644 index 00000000..3734cc2b Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/549 differ diff --git a/exercise7/blogging-platform/db-data/base/5/6102 b/exercise7/blogging-platform/db-data/base/5/6102 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/6104 b/exercise7/blogging-platform/db-data/base/5/6104 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/6106 b/exercise7/blogging-platform/db-data/base/5/6106 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/6110 b/exercise7/blogging-platform/db-data/base/5/6110 new file mode 100644 index 00000000..42e19200 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/6110 differ diff --git a/exercise7/blogging-platform/db-data/base/5/6111 b/exercise7/blogging-platform/db-data/base/5/6111 new file mode 100644 index 00000000..d012727d Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/6111 differ diff --git a/exercise7/blogging-platform/db-data/base/5/6112 b/exercise7/blogging-platform/db-data/base/5/6112 new file mode 100644 index 00000000..293367c2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/6112 differ diff --git a/exercise7/blogging-platform/db-data/base/5/6113 b/exercise7/blogging-platform/db-data/base/5/6113 new file mode 100644 index 00000000..542f8faa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/6113 differ diff --git a/exercise7/blogging-platform/db-data/base/5/6116 b/exercise7/blogging-platform/db-data/base/5/6116 new file mode 100644 index 00000000..787d5d18 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/6116 differ diff --git a/exercise7/blogging-platform/db-data/base/5/6117 b/exercise7/blogging-platform/db-data/base/5/6117 new file mode 100644 index 00000000..2b5656b2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/6117 differ diff --git a/exercise7/blogging-platform/db-data/base/5/6175 b/exercise7/blogging-platform/db-data/base/5/6175 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/6176 b/exercise7/blogging-platform/db-data/base/5/6176 new file mode 100644 index 00000000..ff08a8eb Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/6176 differ diff --git a/exercise7/blogging-platform/db-data/base/5/6228 b/exercise7/blogging-platform/db-data/base/5/6228 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/6229 b/exercise7/blogging-platform/db-data/base/5/6229 new file mode 100644 index 00000000..3e1d0156 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/6229 differ diff --git a/exercise7/blogging-platform/db-data/base/5/6237 b/exercise7/blogging-platform/db-data/base/5/6237 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/6238 b/exercise7/blogging-platform/db-data/base/5/6238 new file mode 100644 index 00000000..e7c0e8c3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/6238 differ diff --git a/exercise7/blogging-platform/db-data/base/5/6239 b/exercise7/blogging-platform/db-data/base/5/6239 new file mode 100644 index 00000000..6c60b507 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/6239 differ diff --git a/exercise7/blogging-platform/db-data/base/5/826 b/exercise7/blogging-platform/db-data/base/5/826 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/base/5/827 b/exercise7/blogging-platform/db-data/base/5/827 new file mode 100644 index 00000000..f102efd8 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/827 differ diff --git a/exercise7/blogging-platform/db-data/base/5/828 b/exercise7/blogging-platform/db-data/base/5/828 new file mode 100644 index 00000000..e97c210f Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/828 differ diff --git a/exercise7/blogging-platform/db-data/base/5/PG_VERSION b/exercise7/blogging-platform/db-data/base/5/PG_VERSION new file mode 100644 index 00000000..98d9bcb7 --- /dev/null +++ b/exercise7/blogging-platform/db-data/base/5/PG_VERSION @@ -0,0 +1 @@ +17 diff --git a/exercise7/blogging-platform/db-data/base/5/pg_filenode.map b/exercise7/blogging-platform/db-data/base/5/pg_filenode.map new file mode 100644 index 00000000..4fc801aa Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/pg_filenode.map differ diff --git a/exercise7/blogging-platform/db-data/base/5/pg_internal.init b/exercise7/blogging-platform/db-data/base/5/pg_internal.init new file mode 100644 index 00000000..7cb898d0 Binary files /dev/null and b/exercise7/blogging-platform/db-data/base/5/pg_internal.init differ diff --git a/exercise7/blogging-platform/db-data/global/1213 b/exercise7/blogging-platform/db-data/global/1213 new file mode 100644 index 00000000..eec8dc3a Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1213 differ diff --git a/exercise7/blogging-platform/db-data/global/1213_fsm b/exercise7/blogging-platform/db-data/global/1213_fsm new file mode 100644 index 00000000..86074bee Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1213_fsm differ diff --git a/exercise7/blogging-platform/db-data/global/1213_vm b/exercise7/blogging-platform/db-data/global/1213_vm new file mode 100644 index 00000000..78b06b0f Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1213_vm differ diff --git a/exercise7/blogging-platform/db-data/global/1214 b/exercise7/blogging-platform/db-data/global/1214 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/1232 b/exercise7/blogging-platform/db-data/global/1232 new file mode 100644 index 00000000..15759623 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1232 differ diff --git a/exercise7/blogging-platform/db-data/global/1233 b/exercise7/blogging-platform/db-data/global/1233 new file mode 100644 index 00000000..a970dd5c Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1233 differ diff --git a/exercise7/blogging-platform/db-data/global/1260 b/exercise7/blogging-platform/db-data/global/1260 new file mode 100644 index 00000000..14204420 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1260 differ diff --git a/exercise7/blogging-platform/db-data/global/1260_fsm b/exercise7/blogging-platform/db-data/global/1260_fsm new file mode 100644 index 00000000..4ee5faa2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1260_fsm differ diff --git a/exercise7/blogging-platform/db-data/global/1260_vm b/exercise7/blogging-platform/db-data/global/1260_vm new file mode 100644 index 00000000..1199d7e2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1260_vm differ diff --git a/exercise7/blogging-platform/db-data/global/1261 b/exercise7/blogging-platform/db-data/global/1261 new file mode 100644 index 00000000..e2ebe9e2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1261 differ diff --git a/exercise7/blogging-platform/db-data/global/1261_fsm b/exercise7/blogging-platform/db-data/global/1261_fsm new file mode 100644 index 00000000..f32c23e9 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1261_fsm differ diff --git a/exercise7/blogging-platform/db-data/global/1261_vm b/exercise7/blogging-platform/db-data/global/1261_vm new file mode 100644 index 00000000..bc168fcf Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1261_vm differ diff --git a/exercise7/blogging-platform/db-data/global/1262 b/exercise7/blogging-platform/db-data/global/1262 new file mode 100644 index 00000000..d6653577 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1262 differ diff --git a/exercise7/blogging-platform/db-data/global/1262_fsm b/exercise7/blogging-platform/db-data/global/1262_fsm new file mode 100644 index 00000000..479fd945 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1262_fsm differ diff --git a/exercise7/blogging-platform/db-data/global/1262_vm b/exercise7/blogging-platform/db-data/global/1262_vm new file mode 100644 index 00000000..b800d6fb Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/1262_vm differ diff --git a/exercise7/blogging-platform/db-data/global/2396 b/exercise7/blogging-platform/db-data/global/2396 new file mode 100644 index 00000000..1e18a66c Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2396 differ diff --git a/exercise7/blogging-platform/db-data/global/2396_fsm b/exercise7/blogging-platform/db-data/global/2396_fsm new file mode 100644 index 00000000..7a4f24f3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2396_fsm differ diff --git a/exercise7/blogging-platform/db-data/global/2396_vm b/exercise7/blogging-platform/db-data/global/2396_vm new file mode 100644 index 00000000..330aded2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2396_vm differ diff --git a/exercise7/blogging-platform/db-data/global/2397 b/exercise7/blogging-platform/db-data/global/2397 new file mode 100644 index 00000000..5e794ef9 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2397 differ diff --git a/exercise7/blogging-platform/db-data/global/2671 b/exercise7/blogging-platform/db-data/global/2671 new file mode 100644 index 00000000..69268173 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2671 differ diff --git a/exercise7/blogging-platform/db-data/global/2672 b/exercise7/blogging-platform/db-data/global/2672 new file mode 100644 index 00000000..27fe5f0b Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2672 differ diff --git a/exercise7/blogging-platform/db-data/global/2676 b/exercise7/blogging-platform/db-data/global/2676 new file mode 100644 index 00000000..e93ed61b Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2676 differ diff --git a/exercise7/blogging-platform/db-data/global/2677 b/exercise7/blogging-platform/db-data/global/2677 new file mode 100644 index 00000000..69c32da4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2677 differ diff --git a/exercise7/blogging-platform/db-data/global/2694 b/exercise7/blogging-platform/db-data/global/2694 new file mode 100644 index 00000000..9437c9bf Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2694 differ diff --git a/exercise7/blogging-platform/db-data/global/2695 b/exercise7/blogging-platform/db-data/global/2695 new file mode 100644 index 00000000..31b657c3 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2695 differ diff --git a/exercise7/blogging-platform/db-data/global/2697 b/exercise7/blogging-platform/db-data/global/2697 new file mode 100644 index 00000000..032de989 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2697 differ diff --git a/exercise7/blogging-platform/db-data/global/2698 b/exercise7/blogging-platform/db-data/global/2698 new file mode 100644 index 00000000..2b17f2fa Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2698 differ diff --git a/exercise7/blogging-platform/db-data/global/2846 b/exercise7/blogging-platform/db-data/global/2846 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/2847 b/exercise7/blogging-platform/db-data/global/2847 new file mode 100644 index 00000000..b7ed3888 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2847 differ diff --git a/exercise7/blogging-platform/db-data/global/2964 b/exercise7/blogging-platform/db-data/global/2964 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/2965 b/exercise7/blogging-platform/db-data/global/2965 new file mode 100644 index 00000000..9fab4d86 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2965 differ diff --git a/exercise7/blogging-platform/db-data/global/2966 b/exercise7/blogging-platform/db-data/global/2966 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/2967 b/exercise7/blogging-platform/db-data/global/2967 new file mode 100644 index 00000000..1c0361d2 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/2967 differ diff --git a/exercise7/blogging-platform/db-data/global/3592 b/exercise7/blogging-platform/db-data/global/3592 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/3593 b/exercise7/blogging-platform/db-data/global/3593 new file mode 100644 index 00000000..17d4fe92 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/3593 differ diff --git a/exercise7/blogging-platform/db-data/global/4060 b/exercise7/blogging-platform/db-data/global/4060 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/4061 b/exercise7/blogging-platform/db-data/global/4061 new file mode 100644 index 00000000..f1eca396 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/4061 differ diff --git a/exercise7/blogging-platform/db-data/global/4175 b/exercise7/blogging-platform/db-data/global/4175 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/4176 b/exercise7/blogging-platform/db-data/global/4176 new file mode 100644 index 00000000..ccdd2706 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/4176 differ diff --git a/exercise7/blogging-platform/db-data/global/4177 b/exercise7/blogging-platform/db-data/global/4177 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/4178 b/exercise7/blogging-platform/db-data/global/4178 new file mode 100644 index 00000000..664942f5 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/4178 differ diff --git a/exercise7/blogging-platform/db-data/global/4181 b/exercise7/blogging-platform/db-data/global/4181 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/4182 b/exercise7/blogging-platform/db-data/global/4182 new file mode 100644 index 00000000..c7d77a41 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/4182 differ diff --git a/exercise7/blogging-platform/db-data/global/4183 b/exercise7/blogging-platform/db-data/global/4183 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/4184 b/exercise7/blogging-platform/db-data/global/4184 new file mode 100644 index 00000000..123be84e Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/4184 differ diff --git a/exercise7/blogging-platform/db-data/global/4185 b/exercise7/blogging-platform/db-data/global/4185 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/4186 b/exercise7/blogging-platform/db-data/global/4186 new file mode 100644 index 00000000..5e75ce37 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/4186 differ diff --git a/exercise7/blogging-platform/db-data/global/6000 b/exercise7/blogging-platform/db-data/global/6000 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/6001 b/exercise7/blogging-platform/db-data/global/6001 new file mode 100644 index 00000000..d18737ce Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/6001 differ diff --git a/exercise7/blogging-platform/db-data/global/6002 b/exercise7/blogging-platform/db-data/global/6002 new file mode 100644 index 00000000..a066fe13 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/6002 differ diff --git a/exercise7/blogging-platform/db-data/global/6100 b/exercise7/blogging-platform/db-data/global/6100 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/6114 b/exercise7/blogging-platform/db-data/global/6114 new file mode 100644 index 00000000..bf887fa4 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/6114 differ diff --git a/exercise7/blogging-platform/db-data/global/6115 b/exercise7/blogging-platform/db-data/global/6115 new file mode 100644 index 00000000..afafca81 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/6115 differ diff --git a/exercise7/blogging-platform/db-data/global/6243 b/exercise7/blogging-platform/db-data/global/6243 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/6244 b/exercise7/blogging-platform/db-data/global/6244 new file mode 100644 index 00000000..e69de29b diff --git a/exercise7/blogging-platform/db-data/global/6245 b/exercise7/blogging-platform/db-data/global/6245 new file mode 100644 index 00000000..95c8fce9 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/6245 differ diff --git a/exercise7/blogging-platform/db-data/global/6246 b/exercise7/blogging-platform/db-data/global/6246 new file mode 100644 index 00000000..40d7bd8b Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/6246 differ diff --git a/exercise7/blogging-platform/db-data/global/6247 b/exercise7/blogging-platform/db-data/global/6247 new file mode 100644 index 00000000..22e88819 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/6247 differ diff --git a/exercise7/blogging-platform/db-data/global/6302 b/exercise7/blogging-platform/db-data/global/6302 new file mode 100644 index 00000000..58275418 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/6302 differ diff --git a/exercise7/blogging-platform/db-data/global/6303 b/exercise7/blogging-platform/db-data/global/6303 new file mode 100644 index 00000000..898847a1 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/6303 differ diff --git a/exercise7/blogging-platform/db-data/global/pg_control b/exercise7/blogging-platform/db-data/global/pg_control new file mode 100644 index 00000000..779a9ded Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/pg_control differ diff --git a/exercise7/blogging-platform/db-data/global/pg_filenode.map b/exercise7/blogging-platform/db-data/global/pg_filenode.map new file mode 100644 index 00000000..97c07a68 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/pg_filenode.map differ diff --git a/exercise7/blogging-platform/db-data/global/pg_internal.init b/exercise7/blogging-platform/db-data/global/pg_internal.init new file mode 100644 index 00000000..92ec5da9 Binary files /dev/null and b/exercise7/blogging-platform/db-data/global/pg_internal.init differ diff --git a/exercise7/blogging-platform/db-data/pg_hba.conf b/exercise7/blogging-platform/db-data/pg_hba.conf new file mode 100644 index 00000000..7f379dbb --- /dev/null +++ b/exercise7/blogging-platform/db-data/pg_hba.conf @@ -0,0 +1,128 @@ +# PostgreSQL Client Authentication Configuration File +# =================================================== +# +# Refer to the "Client Authentication" section in the PostgreSQL +# documentation for a complete description of this file. A short +# synopsis follows. +# +# ---------------------- +# Authentication Records +# ---------------------- +# +# This file controls: which hosts are allowed to connect, how clients +# are authenticated, which PostgreSQL user names they can use, which +# databases they can access. Records take one of these forms: +# +# local DATABASE USER METHOD [OPTIONS] +# host DATABASE USER ADDRESS METHOD [OPTIONS] +# hostssl DATABASE USER ADDRESS METHOD [OPTIONS] +# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] +# hostgssenc DATABASE USER ADDRESS METHOD [OPTIONS] +# hostnogssenc DATABASE USER ADDRESS METHOD [OPTIONS] +# +# (The uppercase items must be replaced by actual values.) +# +# The first field is the connection type: +# - "local" is a Unix-domain socket +# - "host" is a TCP/IP socket (encrypted or not) +# - "hostssl" is a TCP/IP socket that is SSL-encrypted +# - "hostnossl" is a TCP/IP socket that is not SSL-encrypted +# - "hostgssenc" is a TCP/IP socket that is GSSAPI-encrypted +# - "hostnogssenc" is a TCP/IP socket that is not GSSAPI-encrypted +# +# DATABASE can be "all", "sameuser", "samerole", "replication", a +# database name, a regular expression (if it starts with a slash (/)) +# or a comma-separated list thereof. The "all" keyword does not match +# "replication". Access to replication must be enabled in a separate +# record (see example below). +# +# USER can be "all", a user name, a group name prefixed with "+", a +# regular expression (if it starts with a slash (/)) or a comma-separated +# list thereof. In both the DATABASE and USER fields you can also write +# a file name prefixed with "@" to include names from a separate file. +# +# ADDRESS specifies the set of hosts the record matches. It can be a +# host name, or it is made up of an IP address and a CIDR mask that is +# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that +# specifies the number of significant bits in the mask. A host name +# that starts with a dot (.) matches a suffix of the actual host name. +# Alternatively, you can write an IP address and netmask in separate +# columns to specify the set of hosts. Instead of a CIDR-address, you +# can write "samehost" to match any of the server's own IP addresses, +# or "samenet" to match any address in any subnet that the server is +# directly connected to. +# +# METHOD can be "trust", "reject", "md5", "password", "scram-sha-256", +# "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert". +# Note that "password" sends passwords in clear text; "md5" or +# "scram-sha-256" are preferred since they send encrypted passwords. +# +# OPTIONS are a set of options for the authentication in the format +# NAME=VALUE. The available options depend on the different +# authentication methods -- refer to the "Client Authentication" +# section in the documentation for a list of which options are +# available for which authentication methods. +# +# Database and user names containing spaces, commas, quotes and other +# special characters must be quoted. Quoting one of the keywords +# "all", "sameuser", "samerole" or "replication" makes the name lose +# its special character, and just match a database or username with +# that name. +# +# --------------- +# Include Records +# --------------- +# +# This file allows the inclusion of external files or directories holding +# more records, using the following keywords: +# +# include FILE +# include_if_exists FILE +# include_dir DIRECTORY +# +# FILE is the file name to include, and DIR is the directory name containing +# the file(s) to include. Any file in a directory will be loaded if suffixed +# with ".conf". The files of a directory are ordered by name. +# include_if_exists ignores missing files. FILE and DIRECTORY can be +# specified as a relative or an absolute path, and can be double-quoted if +# they contain spaces. +# +# ------------- +# Miscellaneous +# ------------- +# +# This file is read on server startup and when the server receives a +# SIGHUP signal. If you edit the file on a running system, you have to +# SIGHUP the server for the changes to take effect, run "pg_ctl reload", +# or execute "SELECT pg_reload_conf()". +# +# ---------------------------------- +# Put your actual configuration here +# ---------------------------------- +# +# If you want to allow non-local connections, you need to add more +# "host" records. In that case you will also need to make PostgreSQL +# listen on a non-local interface via the listen_addresses +# configuration parameter, or via the -i or -h command line switches. + +# CAUTION: Configuring the system for local "trust" authentication +# allows any local user to connect as any PostgreSQL user, including +# the database superuser. If you do not trust all your local users, +# use another authentication method. + + +# TYPE DATABASE USER ADDRESS METHOD + +# "local" is for Unix domain socket connections only +local all all trust +# IPv4 local connections: +host all all 127.0.0.1/32 trust +# IPv6 local connections: +host all all ::1/128 trust +# Allow replication connections from localhost, by a user with the +# replication privilege. +local replication all trust +host replication all 127.0.0.1/32 trust +host replication all ::1/128 trust + +host all all all scram-sha-256 diff --git a/exercise7/blogging-platform/db-data/pg_ident.conf b/exercise7/blogging-platform/db-data/pg_ident.conf new file mode 100644 index 00000000..f5225f26 --- /dev/null +++ b/exercise7/blogging-platform/db-data/pg_ident.conf @@ -0,0 +1,72 @@ +# PostgreSQL User Name Maps +# ========================= +# +# --------------- +# Mapping Records +# --------------- +# +# Refer to the PostgreSQL documentation, chapter "Client +# Authentication" for a complete description. A short synopsis +# follows. +# +# This file controls PostgreSQL user name mapping. It maps external +# user names to their corresponding PostgreSQL user names. Records +# are of the form: +# +# MAPNAME SYSTEM-USERNAME PG-USERNAME +# +# (The uppercase quantities must be replaced by actual values.) +# +# MAPNAME is the (otherwise freely chosen) map name that was used in +# pg_hba.conf. SYSTEM-USERNAME is the detected user name of the +# client. PG-USERNAME is the requested PostgreSQL user name. The +# existence of a record specifies that SYSTEM-USERNAME may connect as +# PG-USERNAME. +# +# If SYSTEM-USERNAME starts with a slash (/), it will be treated as a +# regular expression. Optionally this can contain a capture (a +# parenthesized subexpression). The substring matching the capture +# will be substituted for \1 (backslash-one) if present in +# PG-USERNAME. +# +# PG-USERNAME can be "all", a user name, a group name prefixed with "+", or +# a regular expression (if it starts with a slash (/)). If it is a regular +# expression, the substring matching with \1 has no effect. +# +# Multiple maps may be specified in this file and used by pg_hba.conf. +# +# No map names are defined in the default configuration. If all +# system user names and PostgreSQL user names are the same, you don't +# need anything in this file. +# +# --------------- +# Include Records +# --------------- +# +# This file allows the inclusion of external files or directories holding +# more records, using the following keywords: +# +# include FILE +# include_if_exists FILE +# include_dir DIRECTORY +# +# FILE is the file name to include, and DIR is the directory name containing +# the file(s) to include. Any file in a directory will be loaded if suffixed +# with ".conf". The files of a directory are ordered by name. +# include_if_exists ignores missing files. FILE and DIRECTORY can be +# specified as a relative or an absolute path, and can be double-quoted if +# they contain spaces. +# +# ------------------------------- +# Miscellaneous +# ------------------------------- +# +# This file is read on server startup and when the postmaster receives +# a SIGHUP signal. If you edit the file on a running system, you have +# to SIGHUP the postmaster for the changes to take effect. You can +# use "pg_ctl reload" to do that. + +# Put your actual configuration here +# ---------------------------------- + +# MAPNAME SYSTEM-USERNAME PG-USERNAME diff --git a/exercise7/blogging-platform/db-data/pg_logical/replorigin_checkpoint b/exercise7/blogging-platform/db-data/pg_logical/replorigin_checkpoint new file mode 100644 index 00000000..ec451b0f Binary files /dev/null and b/exercise7/blogging-platform/db-data/pg_logical/replorigin_checkpoint differ diff --git a/exercise7/blogging-platform/db-data/pg_multixact/members/0000 b/exercise7/blogging-platform/db-data/pg_multixact/members/0000 new file mode 100644 index 00000000..6d17cf9d Binary files /dev/null and b/exercise7/blogging-platform/db-data/pg_multixact/members/0000 differ diff --git a/exercise7/blogging-platform/db-data/pg_multixact/offsets/0000 b/exercise7/blogging-platform/db-data/pg_multixact/offsets/0000 new file mode 100644 index 00000000..6d17cf9d Binary files /dev/null and b/exercise7/blogging-platform/db-data/pg_multixact/offsets/0000 differ diff --git a/exercise7/blogging-platform/db-data/pg_stat/pgstat.stat b/exercise7/blogging-platform/db-data/pg_stat/pgstat.stat new file mode 100644 index 00000000..8eeb1a4b Binary files /dev/null and b/exercise7/blogging-platform/db-data/pg_stat/pgstat.stat differ diff --git a/exercise7/blogging-platform/db-data/pg_subtrans/0000 b/exercise7/blogging-platform/db-data/pg_subtrans/0000 new file mode 100644 index 00000000..6d17cf9d Binary files /dev/null and b/exercise7/blogging-platform/db-data/pg_subtrans/0000 differ diff --git a/exercise7/blogging-platform/db-data/pg_wal/000000010000000000000001 b/exercise7/blogging-platform/db-data/pg_wal/000000010000000000000001 new file mode 100644 index 00000000..312d8173 Binary files /dev/null and b/exercise7/blogging-platform/db-data/pg_wal/000000010000000000000001 differ diff --git a/exercise7/blogging-platform/db-data/pg_xact/0000 b/exercise7/blogging-platform/db-data/pg_xact/0000 new file mode 100644 index 00000000..468ca582 Binary files /dev/null and b/exercise7/blogging-platform/db-data/pg_xact/0000 differ diff --git a/exercise7/blogging-platform/db-data/postgresql.auto.conf b/exercise7/blogging-platform/db-data/postgresql.auto.conf new file mode 100644 index 00000000..af7125e1 --- /dev/null +++ b/exercise7/blogging-platform/db-data/postgresql.auto.conf @@ -0,0 +1,2 @@ +# Do not edit this file manually! +# It will be overwritten by the ALTER SYSTEM command. diff --git a/exercise7/blogging-platform/db-data/postgresql.conf b/exercise7/blogging-platform/db-data/postgresql.conf new file mode 100644 index 00000000..98e4a16e --- /dev/null +++ b/exercise7/blogging-platform/db-data/postgresql.conf @@ -0,0 +1,844 @@ +# ----------------------------- +# PostgreSQL configuration file +# ----------------------------- +# +# This file consists of lines of the form: +# +# name = value +# +# (The "=" is optional.) Whitespace may be used. Comments are introduced with +# "#" anywhere on a line. The complete list of parameter names and allowed +# values can be found in the PostgreSQL documentation. +# +# The commented-out settings shown in this file represent the default values. +# Re-commenting a setting is NOT sufficient to revert it to the default value; +# you need to reload the server. +# +# This file is read on server startup and when the server receives a SIGHUP +# signal. If you edit the file on a running system, you have to SIGHUP the +# server for the changes to take effect, run "pg_ctl reload", or execute +# "SELECT pg_reload_conf()". Some parameters, which are marked below, +# require a server shutdown and restart to take effect. +# +# Any parameter can also be given as a command-line option to the server, e.g., +# "postgres -c log_connections=on". Some parameters can be changed at run time +# with the "SET" SQL command. +# +# Memory units: B = bytes Time units: us = microseconds +# kB = kilobytes ms = milliseconds +# MB = megabytes s = seconds +# GB = gigabytes min = minutes +# TB = terabytes h = hours +# d = days + + +#------------------------------------------------------------------------------ +# FILE LOCATIONS +#------------------------------------------------------------------------------ + +# The default values of these variables are driven from the -D command-line +# option or PGDATA environment variable, represented here as ConfigDir. + +#data_directory = 'ConfigDir' # use data in another directory + # (change requires restart) +#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file + # (change requires restart) +#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file + # (change requires restart) + +# If external_pid_file is not explicitly set, no extra PID file is written. +#external_pid_file = '' # write an extra PID file + # (change requires restart) + + +#------------------------------------------------------------------------------ +# CONNECTIONS AND AUTHENTICATION +#------------------------------------------------------------------------------ + +# - Connection Settings - + +listen_addresses = '*' + # comma-separated list of addresses; + # defaults to 'localhost'; use '*' for all + # (change requires restart) +#port = 5432 # (change requires restart) +max_connections = 100 # (change requires restart) +#reserved_connections = 0 # (change requires restart) +#superuser_reserved_connections = 3 # (change requires restart) +#unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories + # (change requires restart) +#unix_socket_group = '' # (change requires restart) +#unix_socket_permissions = 0777 # begin with 0 to use octal notation + # (change requires restart) +#bonjour = off # advertise server via Bonjour + # (change requires restart) +#bonjour_name = '' # defaults to the computer name + # (change requires restart) + +# - TCP settings - +# see "man tcp" for details + +#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; + # 0 selects the system default +#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; + # 0 selects the system default +#tcp_keepalives_count = 0 # TCP_KEEPCNT; + # 0 selects the system default +#tcp_user_timeout = 0 # TCP_USER_TIMEOUT, in milliseconds; + # 0 selects the system default + +#client_connection_check_interval = 0 # time between checks for client + # disconnection while running queries; + # 0 for never + +# - Authentication - + +#authentication_timeout = 1min # 1s-600s +#password_encryption = scram-sha-256 # scram-sha-256 or md5 +#scram_iterations = 4096 + +# GSSAPI using Kerberos +#krb_server_keyfile = 'FILE:${sysconfdir}/krb5.keytab' +#krb_caseins_users = off +#gss_accept_delegation = off + +# - SSL - + +#ssl = off +#ssl_ca_file = '' +#ssl_cert_file = 'server.crt' +#ssl_crl_file = '' +#ssl_crl_dir = '' +#ssl_key_file = 'server.key' +#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers +#ssl_prefer_server_ciphers = on +#ssl_ecdh_curve = 'prime256v1' +#ssl_min_protocol_version = 'TLSv1.2' +#ssl_max_protocol_version = '' +#ssl_dh_params_file = '' +#ssl_passphrase_command = '' +#ssl_passphrase_command_supports_reload = off + + +#------------------------------------------------------------------------------ +# RESOURCE USAGE (except WAL) +#------------------------------------------------------------------------------ + +# - Memory - + +shared_buffers = 128MB # min 128kB + # (change requires restart) +#huge_pages = try # on, off, or try + # (change requires restart) +#huge_page_size = 0 # zero for system default + # (change requires restart) +#temp_buffers = 8MB # min 800kB +#max_prepared_transactions = 0 # zero disables the feature + # (change requires restart) +# Caution: it is not advisable to set max_prepared_transactions nonzero unless +# you actively intend to use prepared transactions. +#work_mem = 4MB # min 64kB +#hash_mem_multiplier = 2.0 # 1-1000.0 multiplier on hash table work_mem +#maintenance_work_mem = 64MB # min 64kB +#autovacuum_work_mem = -1 # min 64kB, or -1 to use maintenance_work_mem +#logical_decoding_work_mem = 64MB # min 64kB +#max_stack_depth = 2MB # min 100kB +#shared_memory_type = mmap # the default is the first option + # supported by the operating system: + # mmap + # sysv + # windows + # (change requires restart) +dynamic_shared_memory_type = posix # the default is usually the first option + # supported by the operating system: + # posix + # sysv + # windows + # mmap + # (change requires restart) +#min_dynamic_shared_memory = 0MB # (change requires restart) +#vacuum_buffer_usage_limit = 2MB # size of vacuum and analyze buffer access strategy ring; + # 0 to disable vacuum buffer access strategy; + # range 128kB to 16GB + +# SLRU buffers (change requires restart) +#commit_timestamp_buffers = 0 # memory for pg_commit_ts (0 = auto) +#multixact_offset_buffers = 16 # memory for pg_multixact/offsets +#multixact_member_buffers = 32 # memory for pg_multixact/members +#notify_buffers = 16 # memory for pg_notify +#serializable_buffers = 32 # memory for pg_serial +#subtransaction_buffers = 0 # memory for pg_subtrans (0 = auto) +#transaction_buffers = 0 # memory for pg_xact (0 = auto) + +# - Disk - + +#temp_file_limit = -1 # limits per-process temp file space + # in kilobytes, or -1 for no limit + +#max_notify_queue_pages = 1048576 # limits the number of SLRU pages allocated + # for NOTIFY / LISTEN queue + +# - Kernel Resources - + +#max_files_per_process = 1000 # min 64 + # (change requires restart) + +# - Cost-Based Vacuum Delay - + +#vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables) +#vacuum_cost_page_hit = 1 # 0-10000 credits +#vacuum_cost_page_miss = 2 # 0-10000 credits +#vacuum_cost_page_dirty = 20 # 0-10000 credits +#vacuum_cost_limit = 200 # 1-10000 credits + +# - Background Writer - + +#bgwriter_delay = 200ms # 10-10000ms between rounds +#bgwriter_lru_maxpages = 100 # max buffers written/round, 0 disables +#bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round +#bgwriter_flush_after = 512kB # measured in pages, 0 disables + +# - Asynchronous Behavior - + +#backend_flush_after = 0 # measured in pages, 0 disables +#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching +#maintenance_io_concurrency = 10 # 1-1000; 0 disables prefetching +#io_combine_limit = 128kB # usually 1-32 blocks (depends on OS) +#max_worker_processes = 8 # (change requires restart) +#max_parallel_workers_per_gather = 2 # limited by max_parallel_workers +#max_parallel_maintenance_workers = 2 # limited by max_parallel_workers +#max_parallel_workers = 8 # number of max_worker_processes that + # can be used in parallel operations +#parallel_leader_participation = on + + +#------------------------------------------------------------------------------ +# WRITE-AHEAD LOG +#------------------------------------------------------------------------------ + +# - Settings - + +#wal_level = replica # minimal, replica, or logical + # (change requires restart) +#fsync = on # flush data to disk for crash safety + # (turning this off can cause + # unrecoverable data corruption) +#synchronous_commit = on # synchronization level; + # off, local, remote_write, remote_apply, or on +#wal_sync_method = fsync # the default is the first option + # supported by the operating system: + # open_datasync + # fdatasync (default on Linux and FreeBSD) + # fsync + # fsync_writethrough + # open_sync +#full_page_writes = on # recover from partial page writes +#wal_log_hints = off # also do full page writes of non-critical updates + # (change requires restart) +#wal_compression = off # enables compression of full-page writes; + # off, pglz, lz4, zstd, or on +#wal_init_zero = on # zero-fill new WAL files +#wal_recycle = on # recycle WAL files +#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers + # (change requires restart) +#wal_writer_delay = 200ms # 1-10000 milliseconds +#wal_writer_flush_after = 1MB # measured in pages, 0 disables +#wal_skip_threshold = 2MB + +#commit_delay = 0 # range 0-100000, in microseconds +#commit_siblings = 5 # range 1-1000 + +# - Checkpoints - + +#checkpoint_timeout = 5min # range 30s-1d +#checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0 +#checkpoint_flush_after = 256kB # measured in pages, 0 disables +#checkpoint_warning = 30s # 0 disables +max_wal_size = 1GB +min_wal_size = 80MB + +# - Prefetching during recovery - + +#recovery_prefetch = try # prefetch pages referenced in the WAL? +#wal_decode_buffer_size = 512kB # lookahead window used for prefetching + # (change requires restart) + +# - Archiving - + +#archive_mode = off # enables archiving; off, on, or always + # (change requires restart) +#archive_library = '' # library to use to archive a WAL file + # (empty string indicates archive_command should + # be used) +#archive_command = '' # command to use to archive a WAL file + # placeholders: %p = path of file to archive + # %f = file name only + # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' +#archive_timeout = 0 # force a WAL file switch after this + # number of seconds; 0 disables + +# - Archive Recovery - + +# These are only used in recovery mode. + +#restore_command = '' # command to use to restore an archived WAL file + # placeholders: %p = path of file to restore + # %f = file name only + # e.g. 'cp /mnt/server/archivedir/%f %p' +#archive_cleanup_command = '' # command to execute at every restartpoint +#recovery_end_command = '' # command to execute at completion of recovery + +# - Recovery Target - + +# Set these only when performing a targeted recovery. + +#recovery_target = '' # 'immediate' to end recovery as soon as a + # consistent state is reached + # (change requires restart) +#recovery_target_name = '' # the named restore point to which recovery will proceed + # (change requires restart) +#recovery_target_time = '' # the time stamp up to which recovery will proceed + # (change requires restart) +#recovery_target_xid = '' # the transaction ID up to which recovery will proceed + # (change requires restart) +#recovery_target_lsn = '' # the WAL LSN up to which recovery will proceed + # (change requires restart) +#recovery_target_inclusive = on # Specifies whether to stop: + # just after the specified recovery target (on) + # just before the recovery target (off) + # (change requires restart) +#recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID + # (change requires restart) +#recovery_target_action = 'pause' # 'pause', 'promote', 'shutdown' + # (change requires restart) + +# - WAL Summarization - + +#summarize_wal = off # run WAL summarizer process? +#wal_summary_keep_time = '10d' # when to remove old summary files, 0 = never + + +#------------------------------------------------------------------------------ +# REPLICATION +#------------------------------------------------------------------------------ + +# - Sending Servers - + +# Set these on the primary and on any standby that will send replication data. + +#max_wal_senders = 10 # max number of walsender processes + # (change requires restart) +#max_replication_slots = 10 # max number of replication slots + # (change requires restart) +#wal_keep_size = 0 # in megabytes; 0 disables +#max_slot_wal_keep_size = -1 # in megabytes; -1 disables +#wal_sender_timeout = 60s # in milliseconds; 0 disables +#track_commit_timestamp = off # collect timestamp of transaction commit + # (change requires restart) + +# - Primary Server - + +# These settings are ignored on a standby server. + +#synchronous_standby_names = '' # standby servers that provide sync rep + # method to choose sync standbys, number of sync standbys, + # and comma-separated list of application_name + # from standby(s); '*' = all +#synchronized_standby_slots = '' # streaming replication standby server slot + # names that logical walsender processes will wait for + +# - Standby Servers - + +# These settings are ignored on a primary server. + +#primary_conninfo = '' # connection string to sending server +#primary_slot_name = '' # replication slot on sending server +#hot_standby = on # "off" disallows queries during recovery + # (change requires restart) +#max_standby_archive_delay = 30s # max delay before canceling queries + # when reading WAL from archive; + # -1 allows indefinite delay +#max_standby_streaming_delay = 30s # max delay before canceling queries + # when reading streaming WAL; + # -1 allows indefinite delay +#wal_receiver_create_temp_slot = off # create temp slot if primary_slot_name + # is not set +#wal_receiver_status_interval = 10s # send replies at least this often + # 0 disables +#hot_standby_feedback = off # send info from standby to prevent + # query conflicts +#wal_receiver_timeout = 60s # time that receiver waits for + # communication from primary + # in milliseconds; 0 disables +#wal_retrieve_retry_interval = 5s # time to wait before retrying to + # retrieve WAL after a failed attempt +#recovery_min_apply_delay = 0 # minimum delay for applying changes during recovery +#sync_replication_slots = off # enables slot synchronization on the physical standby from the primary + +# - Subscribers - + +# These settings are ignored on a publisher. + +#max_logical_replication_workers = 4 # taken from max_worker_processes + # (change requires restart) +#max_sync_workers_per_subscription = 2 # taken from max_logical_replication_workers +#max_parallel_apply_workers_per_subscription = 2 # taken from max_logical_replication_workers + + +#------------------------------------------------------------------------------ +# QUERY TUNING +#------------------------------------------------------------------------------ + +# - Planner Method Configuration - + +#enable_async_append = on +#enable_bitmapscan = on +#enable_gathermerge = on +#enable_hashagg = on +#enable_hashjoin = on +#enable_incremental_sort = on +#enable_indexscan = on +#enable_indexonlyscan = on +#enable_material = on +#enable_memoize = on +#enable_mergejoin = on +#enable_nestloop = on +#enable_parallel_append = on +#enable_parallel_hash = on +#enable_partition_pruning = on +#enable_partitionwise_join = off +#enable_partitionwise_aggregate = off +#enable_presorted_aggregate = on +#enable_seqscan = on +#enable_sort = on +#enable_tidscan = on +#enable_group_by_reordering = on + +# - Planner Cost Constants - + +#seq_page_cost = 1.0 # measured on an arbitrary scale +#random_page_cost = 4.0 # same scale as above +#cpu_tuple_cost = 0.01 # same scale as above +#cpu_index_tuple_cost = 0.005 # same scale as above +#cpu_operator_cost = 0.0025 # same scale as above +#parallel_setup_cost = 1000.0 # same scale as above +#parallel_tuple_cost = 0.1 # same scale as above +#min_parallel_table_scan_size = 8MB +#min_parallel_index_scan_size = 512kB +#effective_cache_size = 4GB + +#jit_above_cost = 100000 # perform JIT compilation if available + # and query more expensive than this; + # -1 disables +#jit_inline_above_cost = 500000 # inline small functions if query is + # more expensive than this; -1 disables +#jit_optimize_above_cost = 500000 # use expensive JIT optimizations if + # query is more expensive than this; + # -1 disables + +# - Genetic Query Optimizer - + +#geqo = on +#geqo_threshold = 12 +#geqo_effort = 5 # range 1-10 +#geqo_pool_size = 0 # selects default based on effort +#geqo_generations = 0 # selects default based on effort +#geqo_selection_bias = 2.0 # range 1.5-2.0 +#geqo_seed = 0.0 # range 0.0-1.0 + +# - Other Planner Options - + +#default_statistics_target = 100 # range 1-10000 +#constraint_exclusion = partition # on, off, or partition +#cursor_tuple_fraction = 0.1 # range 0.0-1.0 +#from_collapse_limit = 8 +#jit = on # allow JIT compilation +#join_collapse_limit = 8 # 1 disables collapsing of explicit + # JOIN clauses +#plan_cache_mode = auto # auto, force_generic_plan or + # force_custom_plan +#recursive_worktable_factor = 10.0 # range 0.001-1000000 + + +#------------------------------------------------------------------------------ +# REPORTING AND LOGGING +#------------------------------------------------------------------------------ + +# - Where to Log - + +#log_destination = 'stderr' # Valid values are combinations of + # stderr, csvlog, jsonlog, syslog, and + # eventlog, depending on platform. + # csvlog and jsonlog require + # logging_collector to be on. + +# This is used when logging to stderr: +#logging_collector = off # Enable capturing of stderr, jsonlog, + # and csvlog into log files. Required + # to be on for csvlogs and jsonlogs. + # (change requires restart) + +# These are only used if logging_collector is on: +#log_directory = 'log' # directory where log files are written, + # can be absolute or relative to PGDATA +#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern, + # can include strftime() escapes +#log_file_mode = 0600 # creation mode for log files, + # begin with 0 to use octal notation +#log_rotation_age = 1d # Automatic rotation of logfiles will + # happen after that time. 0 disables. +#log_rotation_size = 10MB # Automatic rotation of logfiles will + # happen after that much log output. + # 0 disables. +#log_truncate_on_rotation = off # If on, an existing log file with the + # same name as the new log file will be + # truncated rather than appended to. + # But such truncation only occurs on + # time-driven rotation, not on restarts + # or size-driven rotation. Default is + # off, meaning append to existing files + # in all cases. + +# These are relevant when logging to syslog: +#syslog_facility = 'LOCAL0' +#syslog_ident = 'postgres' +#syslog_sequence_numbers = on +#syslog_split_messages = on + +# This is only relevant when logging to eventlog (Windows): +# (change requires restart) +#event_source = 'PostgreSQL' + +# - When to Log - + +#log_min_messages = warning # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic + +#log_min_error_statement = error # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic (effectively off) + +#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements + # and their durations, > 0 logs only + # statements running at least this number + # of milliseconds + +#log_min_duration_sample = -1 # -1 is disabled, 0 logs a sample of statements + # and their durations, > 0 logs only a sample of + # statements running at least this number + # of milliseconds; + # sample fraction is determined by log_statement_sample_rate + +#log_statement_sample_rate = 1.0 # fraction of logged statements exceeding + # log_min_duration_sample to be logged; + # 1.0 logs all such statements, 0.0 never logs + + +#log_transaction_sample_rate = 0.0 # fraction of transactions whose statements + # are logged regardless of their duration; 1.0 logs all + # statements from all transactions, 0.0 never logs + +#log_startup_progress_interval = 10s # Time between progress updates for + # long-running startup operations. + # 0 disables the feature, > 0 indicates + # the interval in milliseconds. + +# - What to Log - + +#debug_print_parse = off +#debug_print_rewritten = off +#debug_print_plan = off +#debug_pretty_print = on +#log_autovacuum_min_duration = 10min # log autovacuum activity; + # -1 disables, 0 logs all actions and + # their durations, > 0 logs only + # actions running at least this number + # of milliseconds. +#log_checkpoints = on +#log_connections = off +#log_disconnections = off +#log_duration = off +#log_error_verbosity = default # terse, default, or verbose messages +#log_hostname = off +#log_line_prefix = '%m [%p] ' # special values: + # %a = application name + # %u = user name + # %d = database name + # %r = remote host and port + # %h = remote host + # %b = backend type + # %p = process ID + # %P = process ID of parallel group leader + # %t = timestamp without milliseconds + # %m = timestamp with milliseconds + # %n = timestamp with milliseconds (as a Unix epoch) + # %Q = query ID (0 if none or not computed) + # %i = command tag + # %e = SQL state + # %c = session ID + # %l = session line number + # %s = session start timestamp + # %v = virtual transaction ID + # %x = transaction ID (0 if none) + # %q = stop here in non-session + # processes + # %% = '%' + # e.g. '<%u%%%d> ' +#log_lock_waits = off # log lock waits >= deadlock_timeout +#log_recovery_conflict_waits = off # log standby recovery conflict waits + # >= deadlock_timeout +#log_parameter_max_length = -1 # when logging statements, limit logged + # bind-parameter values to N bytes; + # -1 means print in full, 0 disables +#log_parameter_max_length_on_error = 0 # when logging an error, limit logged + # bind-parameter values to N bytes; + # -1 means print in full, 0 disables +#log_statement = 'none' # none, ddl, mod, all +#log_replication_commands = off +#log_temp_files = -1 # log temporary files equal or larger + # than the specified size in kilobytes; + # -1 disables, 0 logs all temp files +log_timezone = 'Etc/UTC' + +# - Process Title - + +#cluster_name = '' # added to process titles if nonempty + # (change requires restart) +#update_process_title = on + + +#------------------------------------------------------------------------------ +# STATISTICS +#------------------------------------------------------------------------------ + +# - Cumulative Query and Index Statistics - + +#track_activities = on +#track_activity_query_size = 1024 # (change requires restart) +#track_counts = on +#track_io_timing = off +#track_wal_io_timing = off +#track_functions = none # none, pl, all +#stats_fetch_consistency = cache # cache, none, snapshot + + +# - Monitoring - + +#compute_query_id = auto +#log_statement_stats = off +#log_parser_stats = off +#log_planner_stats = off +#log_executor_stats = off + + +#------------------------------------------------------------------------------ +# AUTOVACUUM +#------------------------------------------------------------------------------ + +#autovacuum = on # Enable autovacuum subprocess? 'on' + # requires track_counts to also be on. +#autovacuum_max_workers = 3 # max number of autovacuum subprocesses + # (change requires restart) +#autovacuum_naptime = 1min # time between autovacuum runs +#autovacuum_vacuum_threshold = 50 # min number of row updates before + # vacuum +#autovacuum_vacuum_insert_threshold = 1000 # min number of row inserts + # before vacuum; -1 disables insert + # vacuums +#autovacuum_analyze_threshold = 50 # min number of row updates before + # analyze +#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum +#autovacuum_vacuum_insert_scale_factor = 0.2 # fraction of inserts over table + # size before insert vacuum +#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze +#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum + # (change requires restart) +#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age + # before forced vacuum + # (change requires restart) +#autovacuum_vacuum_cost_delay = 2ms # default vacuum cost delay for + # autovacuum, in milliseconds; + # -1 means use vacuum_cost_delay +#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for + # autovacuum, -1 means use + # vacuum_cost_limit + + +#------------------------------------------------------------------------------ +# CLIENT CONNECTION DEFAULTS +#------------------------------------------------------------------------------ + +# - Statement Behavior - + +#client_min_messages = notice # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # log + # notice + # warning + # error +#search_path = '"$user", public' # schema names +#row_security = on +#default_table_access_method = 'heap' +#default_tablespace = '' # a tablespace name, '' uses the default +#default_toast_compression = 'pglz' # 'pglz' or 'lz4' +#temp_tablespaces = '' # a list of tablespace names, '' uses + # only default tablespace +#check_function_bodies = on +#default_transaction_isolation = 'read committed' +#default_transaction_read_only = off +#default_transaction_deferrable = off +#session_replication_role = 'origin' +#statement_timeout = 0 # in milliseconds, 0 is disabled +#transaction_timeout = 0 # in milliseconds, 0 is disabled +#lock_timeout = 0 # in milliseconds, 0 is disabled +#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled +#idle_session_timeout = 0 # in milliseconds, 0 is disabled +#vacuum_freeze_table_age = 150000000 +#vacuum_freeze_min_age = 50000000 +#vacuum_failsafe_age = 1600000000 +#vacuum_multixact_freeze_table_age = 150000000 +#vacuum_multixact_freeze_min_age = 5000000 +#vacuum_multixact_failsafe_age = 1600000000 +#bytea_output = 'hex' # hex, escape +#xmlbinary = 'base64' +#xmloption = 'content' +#gin_pending_list_limit = 4MB +#createrole_self_grant = '' # set and/or inherit +#event_triggers = on + +# - Locale and Formatting - + +datestyle = 'iso, mdy' +#intervalstyle = 'postgres' +timezone = 'Etc/UTC' +#timezone_abbreviations = 'Default' # Select the set of available time zone + # abbreviations. Currently, there are + # Default + # Australia (historical usage) + # India + # You can create your own file in + # share/timezonesets/. +#extra_float_digits = 1 # min -15, max 3; any value >0 actually + # selects precise output mode +#client_encoding = sql_ascii # actually, defaults to database + # encoding + +# These settings are initialized by initdb, but they can be changed. +lc_messages = 'en_US.utf8' # locale for system error message + # strings +lc_monetary = 'en_US.utf8' # locale for monetary formatting +lc_numeric = 'en_US.utf8' # locale for number formatting +lc_time = 'en_US.utf8' # locale for time formatting + +#icu_validation_level = warning # report ICU locale validation + # errors at the given level + +# default configuration for text search +default_text_search_config = 'pg_catalog.english' + +# - Shared Library Preloading - + +#local_preload_libraries = '' +#session_preload_libraries = '' +#shared_preload_libraries = '' # (change requires restart) +#jit_provider = 'llvmjit' # JIT library to use + +# - Other Defaults - + +#dynamic_library_path = '$libdir' +#extension_destdir = '' # prepend path when loading extensions + # and shared objects (added by Debian) +#gin_fuzzy_search_limit = 0 + + +#------------------------------------------------------------------------------ +# LOCK MANAGEMENT +#------------------------------------------------------------------------------ + +#deadlock_timeout = 1s +#max_locks_per_transaction = 64 # min 10 + # (change requires restart) +#max_pred_locks_per_transaction = 64 # min 10 + # (change requires restart) +#max_pred_locks_per_relation = -2 # negative values mean + # (max_pred_locks_per_transaction + # / -max_pred_locks_per_relation) - 1 +#max_pred_locks_per_page = 2 # min 0 + + +#------------------------------------------------------------------------------ +# VERSION AND PLATFORM COMPATIBILITY +#------------------------------------------------------------------------------ + +# - Previous PostgreSQL Versions - + +#array_nulls = on +#backslash_quote = safe_encoding # on, off, or safe_encoding +#escape_string_warning = on +#lo_compat_privileges = off +#quote_all_identifiers = off +#standard_conforming_strings = on +#synchronize_seqscans = on + +# - Other Platforms and Clients - + +#transform_null_equals = off +#allow_alter_system = on + + +#------------------------------------------------------------------------------ +# ERROR HANDLING +#------------------------------------------------------------------------------ + +#exit_on_error = off # terminate session on any error? +#restart_after_crash = on # reinitialize after backend crash? +#data_sync_retry = off # retry or panic on failure to fsync + # data? + # (change requires restart) +#recovery_init_sync_method = fsync # fsync, syncfs (Linux 5.8+) + + +#------------------------------------------------------------------------------ +# CONFIG FILE INCLUDES +#------------------------------------------------------------------------------ + +# These options allow settings to be loaded from files other than the +# default postgresql.conf. Note that these are directives, not variable +# assignments, so they can usefully be given more than once. + +#include_dir = '...' # include files ending in '.conf' from + # a directory, e.g., 'conf.d' +#include_if_exists = '...' # include file only if it exists +#include = '...' # include file + + +#------------------------------------------------------------------------------ +# CUSTOMIZED OPTIONS +#------------------------------------------------------------------------------ + +# Add settings for extensions here diff --git a/exercise7/blogging-platform/db-data/postmaster.opts b/exercise7/blogging-platform/db-data/postmaster.opts new file mode 100644 index 00000000..bcf1d1fc --- /dev/null +++ b/exercise7/blogging-platform/db-data/postmaster.opts @@ -0,0 +1 @@ +/usr/lib/postgresql/17/bin/postgres diff --git a/exercise7/blogging-platform/db/password.txt b/exercise7/blogging-platform/db/password.txt new file mode 100644 index 00000000..d9401e8a --- /dev/null +++ b/exercise7/blogging-platform/db/password.txt @@ -0,0 +1 @@ +securepassword \ No newline at end of file diff --git a/exercise7/blogging-platform/go.mod b/exercise7/blogging-platform/go.mod index ca16e703..7cd5a99e 100644 --- a/exercise7/blogging-platform/go.mod +++ b/exercise7/blogging-platform/go.mod @@ -2,4 +2,7 @@ module github.com/talgat-ruby/exercises-go/exercise7/blogging-platform go 1.23.3 -require github.com/lib/pq v1.10.9 +require ( + github.com/joho/godotenv v1.5.1 + github.com/lib/pq v1.10.9 +) diff --git a/exercise7/blogging-platform/go.sum b/exercise7/blogging-platform/go.sum index aeddeae3..ecb9035f 100644 --- a/exercise7/blogging-platform/go.sum +++ b/exercise7/blogging-platform/go.sum @@ -1,2 +1,4 @@ +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= diff --git a/exercise7/blogging-platform/internal/api/handler/handler.go b/exercise7/blogging-platform/internal/api/handler/handler.go new file mode 100644 index 00000000..b756495c --- /dev/null +++ b/exercise7/blogging-platform/internal/api/handler/handler.go @@ -0,0 +1,18 @@ +package handler + +import ( + "log/slog" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/internal/api/handler/posts" + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/internal/db" +) + +type Handler struct { + *posts.Posts +} + +func New(logger *slog.Logger, db *db.DB) *Handler { + return &Handler{ + Posts: posts.New(logger, db), + } +} diff --git a/exercise7/blogging-platform/internal/api/handler/posts/create_post.go b/exercise7/blogging-platform/internal/api/handler/posts/create_post.go new file mode 100644 index 00000000..0ea61113 --- /dev/null +++ b/exercise7/blogging-platform/internal/api/handler/posts/create_post.go @@ -0,0 +1,95 @@ +package posts + +import ( + "net/http" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/models" + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/pkg/httputils/request" + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/pkg/httputils/response" +) + +type CreatePostRequest struct { + Data *models.Blog `json:"data"` +} + +type CreatePostResponse struct { + Data *models.Blog `json:"data"` +} + +func (h *Posts) PostNumberPost(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + log := h.logger.With("method", "CreatePost") + requestBody := &CreatePostRequest{} + + if err := request.JSON(w, r, requestBody); err != nil { + log.ErrorContext( + ctx, + "failed parse request body", + "error", err, + ) + http.Error(w, "failed to parse request body", http.StatusBadRequest) + return + } + + dbresp, err := h.db.NewPostCreator(ctx, *requestBody.Data) + if err != nil { + log.ErrorContext( + ctx, + "failed to query from db", + "error", err, + ) + http.Error(w, "failed to query from db", http.StatusBadRequest) + return + } + if dbresp == nil { + log.ErrorContext( + ctx, + "row is empty", + "error", err, + ) + http.Error(w, "row is empty", http.StatusBadRequest) + return + } + resp := CreatePostResponse{ + Data: dbresp, + } + err = response.JSON(w, http.StatusOK, resp) + if err != nil { + log.ErrorContext( + ctx, + "fail json", + "error", err, + ) + return + + } + // err = json.NewDecoder(r.Body).Decode(&newPost) + // if err != nil { + // response.JSON(w, http.StatusBadRequest, "") + // return + // } + // err = posts.NewPostCreator(newPost) + // if err != nil { + // response.JSON(w, http.StatusBadRequest, "") + // return + // } + // fmt.Fprintln(w, "POST succes") + log.InfoContext( + ctx, + "succes insert post", + "post id", resp.Data.Id, + ) +} + + + +// func CreationPost(body models.Blog) error { +// if err := db.NewPostCreator(body); err != nil { +// return err +// } +// return nil +// } + +// func ServiceGetPosts() ([]models.Blog, error) { +// return db.DBGetPosts() +// } diff --git a/exercise7/blogging-platform/internal/api/handler/posts/delete_post.go b/exercise7/blogging-platform/internal/api/handler/posts/delete_post.go new file mode 100644 index 00000000..47451037 --- /dev/null +++ b/exercise7/blogging-platform/internal/api/handler/posts/delete_post.go @@ -0,0 +1,48 @@ +package posts + +import ( + "net/http" + "strconv" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/pkg/httputils/response" +) + +func (h *Posts) DeleteNumberPost(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + log := h.logger.With( + "method", "DeletePost", + ) + idString, err := strconv.Atoi(r.PathValue("id")) + if err != nil { + log.ErrorContext( + ctx, + "faildet convert id to int", + "error", err, + ) + } + err = h.db.DeletePost(int64(idString), ctx) + if err != nil { + log.ErrorContext( + ctx, + "failed to query from data base", + "error", err, + ) + http.Error(w, "failed to query from data base", http.StatusInternalServerError) + return + } + err = response.JSON(w, http.StatusNoContent, nil) + if err != nil { + log.ErrorContext( + ctx, + "fail json", + "error", err, + ) + return + } + log.InfoContext( + ctx, + "succes delete post", + "id", idString, + ) + return +} diff --git a/exercise7/blogging-platform/internal/api/handler/posts/get_post.go b/exercise7/blogging-platform/internal/api/handler/posts/get_post.go new file mode 100644 index 00000000..68d02f5b --- /dev/null +++ b/exercise7/blogging-platform/internal/api/handler/posts/get_post.go @@ -0,0 +1,59 @@ +package posts + +import ( + "net/http" + "strconv" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/models" + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/pkg/httputils/response" +) + +type GetPostResponse struct { + Data *models.Blog `json:"data"` +} + +func (h *Posts) GetNumberPost(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + log := h.logger.With("method", "GetPost") + + id, err := strconv.Atoi(r.PathValue("id")) + if err != nil { + log.ErrorContext( + ctx, + "failed to convert", + "error", err, + ) + http.Error(w, "failed to convert", http.StatusBadRequest) + return + } + + err, res := h.db.ServiceGetNumberPost(ctx, id) + + if err != nil { + log.ErrorContext( + ctx, + "failed to convert", + "error", err, + ) + return + } + resp := GetPostResponse{ + Data: res, + } + err = response.JSON(w, http.StatusOK, resp) + if err != nil { + log.ErrorContext( + ctx, + "fail json", + "error", err, + ) + return + } + log.InfoContext( + ctx, + "succes find posts", + "id", resp.Data.Id, + ) + return + +} diff --git a/exercise7/blogging-platform/internal/api/handler/posts/get_posts.go b/exercise7/blogging-platform/internal/api/handler/posts/get_posts.go new file mode 100644 index 00000000..15814298 --- /dev/null +++ b/exercise7/blogging-platform/internal/api/handler/posts/get_posts.go @@ -0,0 +1,46 @@ +package posts + +import ( + "net/http" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/models" + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/pkg/httputils/response" +) + +type GetPostsResponse struct { + Data []models.Blog `json:"data"` +} + +func (h *Posts) GetPosts(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + log := h.logger.With("method", "GetPosts") + + res, err := h.db.DBGetPosts(ctx) + if err != nil { + log.ErrorContext( + ctx, + "data base", + "error", err, + ) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + resp := GetPostsResponse{ + Data: res, + } + err = response.JSON(w, http.StatusOK, resp) + if err != nil { + log.ErrorContext( + ctx, + "fail json", + "error", err, + ) + return + } + log.InfoContext( + ctx, + "succes find posts", + "number of posts", len(resp.Data), + ) + return +} diff --git a/exercise7/blogging-platform/internal/api/handler/posts/posts.go b/exercise7/blogging-platform/internal/api/handler/posts/posts.go new file mode 100644 index 00000000..aa27223f --- /dev/null +++ b/exercise7/blogging-platform/internal/api/handler/posts/posts.go @@ -0,0 +1,19 @@ +package posts + +import ( + "log/slog" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/internal/db" +) + +type Posts struct { + logger *slog.Logger + db *db.DB +} + +func New(logger *slog.Logger, db *db.DB) *Posts { + return &Posts{ + logger: logger, + db: db, + } +} diff --git a/exercise7/blogging-platform/internal/api/handler/posts/put_post.go b/exercise7/blogging-platform/internal/api/handler/posts/put_post.go new file mode 100644 index 00000000..06c552fb --- /dev/null +++ b/exercise7/blogging-platform/internal/api/handler/posts/put_post.go @@ -0,0 +1,66 @@ +package posts + +import ( + "net/http" + "strconv" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/models" + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/pkg/httputils/request" + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/pkg/httputils/response" +) + +type UpdatePostRequest struct { + Data *models.Blog `json:"data"` +} + +func (h Posts) PutNumberPost(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + log := h.logger.With( + "method", "UpdatePost", + ) + id, err := strconv.Atoi(r.PathValue("id")) + if err != nil { + log.ErrorContext( + ctx, + "failed to convert id to int", + "error", err, + ) + } + requestBody := &UpdatePostRequest{} + err = request.JSON(w, r, requestBody) + if err != nil { + log.ErrorContext( + ctx, + "failed to parse request body", + "error", err, + ) + http.Error(w, "failed to parse request body", http.StatusBadRequest) + return + } + err = h.db.UpdatePost(ctx, int64(id), *requestBody.Data) + if err != nil { + log.ErrorContext( + ctx, + "failed query from db", + "error", err, + ) + http.Error(w, "failed query from db", http.StatusInternalServerError) + return + } + err = response.JSON(w, http.StatusNoContent, nil) + if err != nil { + log.ErrorContext( + ctx, + "fail json", + "error", err, + ) + http.Error(w, "fail json", http.StatusInternalServerError) + return + } + log.InfoContext( + ctx, + "succes update post", + "id", id, + ) + return +} diff --git a/exercise7/blogging-platform/internal/api/router/posts.go b/exercise7/blogging-platform/internal/api/router/posts.go new file mode 100644 index 00000000..d6792d74 --- /dev/null +++ b/exercise7/blogging-platform/internal/api/router/posts.go @@ -0,0 +1,13 @@ +package router + +import ( + "context" +) + +func (r *Router) BloggingRouter(_ context.Context) { + r.router.HandleFunc("GET /post/{id}", r.handler.GetNumberPost) + r.router.HandleFunc("GET /posts", r.handler.GetPosts) + r.router.HandleFunc("DELETE /post/{id}", r.handler.DeleteNumberPost) + r.router.HandleFunc("POST /post", r.handler.PostNumberPost) + r.router.HandleFunc("PUT /post/{id}", r.handler.PutNumberPost) +} diff --git a/exercise7/blogging-platform/internal/api/router/router.go b/exercise7/blogging-platform/internal/api/router/router.go new file mode 100644 index 00000000..6b0f4325 --- /dev/null +++ b/exercise7/blogging-platform/internal/api/router/router.go @@ -0,0 +1,26 @@ +package router + +import ( + "context" + "net/http" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/internal/api/handler" +) + +type Router struct { + router *http.ServeMux + handler *handler.Handler +} + +func New(handler *handler.Handler) *Router { + mux := http.NewServeMux() + return &Router{ + router: mux, + handler: handler, + } +} + +func (r *Router) Start(ctx context.Context) *http.ServeMux { + r.BloggingRouter(ctx) + return r.router +} diff --git a/exercise7/blogging-platform/internal/api/server.go b/exercise7/blogging-platform/internal/api/server.go new file mode 100644 index 00000000..1628553a --- /dev/null +++ b/exercise7/blogging-platform/internal/api/server.go @@ -0,0 +1,55 @@ +package api + +import ( + "context" + "errors" + "fmt" + "log" + "log/slog" + "net" + "net/http" + "os" + "strconv" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/internal/api/handler" + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/internal/api/router" + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/internal/db" +) + +type Api struct { + logger *slog.Logger + router *router.Router +} + +func New(logger *slog.Logger, db *db.DB) *Api { + h := handler.New(logger, db) + r := router.New(h) + return &Api{ + logger: logger, + router: r, + } +} + +func (a *Api) Start(ctx context.Context) error { + mux := a.router.Start(ctx) + port, err := strconv.Atoi(os.Getenv("API_PORT")) + if err != nil { + fmt.Println(123) + return err + } + + server := &http.Server{ + Addr: fmt.Sprintf(":%d", port), + Handler: mux, + BaseContext: func(l net.Listener) context.Context { + return ctx + }, + } + + log.Printf("Start server: %d\n", port) + err = server.ListenAndServe() + if err != nil && errors.Is(err, http.ErrServerClosed) { + return err + } + return nil +} diff --git a/exercise7/blogging-platform/internal/db/init.go b/exercise7/blogging-platform/internal/db/init.go new file mode 100644 index 00000000..ad8aa41c --- /dev/null +++ b/exercise7/blogging-platform/internal/db/init.go @@ -0,0 +1,29 @@ +package db + +import ( + "context" +) + +func (db *DB) Init(ctx context.Context) error { + log := db.logger.With("method", "Init") + + stmt := ` +CREATE TABLE IF NOT EXISTS posts ( + id SERIAL PRIMARY KEY, + title TEXT NOT NULL, + content TEXT NOT NULL, + category TEXT NOT NULL, + tags TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +) +` + + if _, err := db.pg.Exec(stmt); err != nil { + log.ErrorContext(ctx, "fail create table post", "error", err) + return err + } + + log.InfoContext(ctx, "success create table posts") + return nil +} diff --git a/exercise7/blogging-platform/internal/db/main.go b/exercise7/blogging-platform/internal/db/main.go new file mode 100644 index 00000000..91166254 --- /dev/null +++ b/exercise7/blogging-platform/internal/db/main.go @@ -0,0 +1,53 @@ +package db + +import ( + "database/sql" + "fmt" + "log/slog" + "os" + "strconv" + + _ "github.com/lib/pq" + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/internal/db/post" +) + +type DB struct { + logger *slog.Logger + pg *sql.DB + *post.Post +} + +func New(logger *slog.Logger) (*DB, error) { + pgsql, err := newPgSQL() + if err != nil { + return nil, err + } + + return &DB{ + logger: logger, + pg: pgsql, + Post: post.New(pgsql, logger), + }, nil +} + +func newPgSQL() (*sql.DB, error) { + host := os.Getenv("DB_HOST") + port, err := strconv.Atoi(os.Getenv("DB_PORT")) + if err != nil { + return nil, err + } + user := os.Getenv("DB_USER") + password := os.Getenv("DB_PASSWORD") + dbname := os.Getenv("DB_NAME") + + psqlInfo := fmt.Sprintf( + "host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", + host, port, user, password, dbname, + ) + db, err := sql.Open("postgres", psqlInfo) + if err != nil { + return nil, err + } + + return db, nil +} diff --git a/exercise7/blogging-platform/internal/db/post/create_post.go b/exercise7/blogging-platform/internal/db/post/create_post.go new file mode 100644 index 00000000..c48c3c51 --- /dev/null +++ b/exercise7/blogging-platform/internal/db/post/create_post.go @@ -0,0 +1,51 @@ +package post + +import ( + "context" + "database/sql" + "errors" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/models" +) + +func (p *Post) NewPostCreator(ctx context.Context, body models.Blog) (*models.Blog, error) { + log := p.logger.With("method", "CreatePost") + res := ` + INSERT INTO posts ( + title, + content, + category, + tags + + ) + VALUES ($1, $2, $3, $4) + RETURNING id, title, content, category, tags, created_at, updated_at + ` + row := p.db.QueryRowContext(ctx, res, body.Title, body.Content, body.Category, body.Tags) + if err := row.Err(); err != nil { + log.ErrorContext(ctx, "fail to insert to table post", err) + return nil, err + } + post := models.Blog{} + if err := row.Scan( + &post.Id, + &post.Title, + &post.Content, + &post.Category, + &post.Tags, + &post.CreatedAt, + &post.UpdatedAt, + ); err != nil { + if errors.Is(err, sql.ErrNoRows) { + log.ErrorContext(ctx, "no values was found", "erros", err) + return nil, nil + } + log.ErrorContext(ctx, "fail to scan post", "error", err) + return nil, err + } + // _, err = db.Exec(res, body.Title, body.Content, body.Category, body.Tags) + // return err + + log.InfoContext(ctx, "succes insert") + return &post, nil +} diff --git a/exercise7/blogging-platform/internal/db/post/delete_post.go b/exercise7/blogging-platform/internal/db/post/delete_post.go new file mode 100644 index 00000000..be24d391 --- /dev/null +++ b/exercise7/blogging-platform/internal/db/post/delete_post.go @@ -0,0 +1,27 @@ +package post + +import "context" + +func (p Post) DeletePost(id int64, ctx context.Context) error { + log := p.logger.With("metgod", "deletePost", "id", id) + stmt := ` + DELETE FROM posts + WHERE id = $1 + ` + res, err := p.db.ExecContext(ctx, stmt, id) + if err != nil { + log.ErrorContext(ctx, "fail to delete from the table post", "error", err) + return err + } + num, err := res.RowsAffected() + if err != nil { + log.ErrorContext(ctx, "fail to delete from the table post", "error", err) + return err + } + if num == 0 { + log.WarnContext(ctx, "movie with id was not found", "error", err) + return err + } + log.InfoContext(ctx, "succes delete") + return nil +} diff --git a/exercise7/blogging-platform/internal/db/post/get_post.go b/exercise7/blogging-platform/internal/db/post/get_post.go new file mode 100644 index 00000000..32c5f5bb --- /dev/null +++ b/exercise7/blogging-platform/internal/db/post/get_post.go @@ -0,0 +1,37 @@ +package post + +import ( + "context" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/models" +) + +func (p *Post) ServiceGetNumberPost(ctx context.Context, id int) (error, *models.Blog) { + log := p.logger.With("method", "GetPost") + stmt := ` + SELECT id, title, content, category, tags, created_at, updated_at + FROM posts + WHERE id = $1 + ` + row := p.db.QueryRowContext(ctx, stmt, id) + if err := row.Err(); err != nil { + log.ErrorContext(ctx, "fail to query table post", "error", err) + return err, nil + } + post := models.Blog{} + if err := row.Scan( + &post.Id, + &post.Title, + &post.Content, + &post.Category, + &post.Tags, + &post.CreatedAt, + &post.UpdatedAt, + ); err != nil { + log.ErrorContext(ctx, "fail to scan post", "error", err) + return err, nil + } + + log.InfoContext(ctx, "succes query table posts") + return nil, &post +} diff --git a/exercise7/blogging-platform/internal/db/post/get_posts.go b/exercise7/blogging-platform/internal/db/post/get_posts.go new file mode 100644 index 00000000..4e4c918f --- /dev/null +++ b/exercise7/blogging-platform/internal/db/post/get_posts.go @@ -0,0 +1,42 @@ +package post + +import ( + "context" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/models" +) + +func (p Post) DBGetPosts(ctx context.Context) ([]models.Blog, error) { + log := p.logger.With("method", "GetPost") + stmt := ` + SELECT id, title, content, category, tags, created_at, updated_at + FROM posts + ` + + rows, err := p.db.QueryContext(ctx, stmt) + if err != nil { + log.ErrorContext(ctx, "fail to query table post", "error", err) + return nil, err + } + + posts := []models.Blog{} + post := models.Blog{} + for rows.Next() { + if err := rows.Scan( + &post.Id, + &post.Title, + &post.Content, + &post.Category, + &post.Tags, + &post.CreatedAt, + &post.UpdatedAt, + ); err != nil { + log.ErrorContext(ctx, "fail to scan post", "error", err) + return nil, err + } + posts = append(posts, post) + } + + log.InfoContext(ctx, "succes query table posts") + return posts, nil +} diff --git a/exercise7/blogging-platform/internal/db/post/posts.go b/exercise7/blogging-platform/internal/db/post/posts.go new file mode 100644 index 00000000..5995966b --- /dev/null +++ b/exercise7/blogging-platform/internal/db/post/posts.go @@ -0,0 +1,18 @@ +package post + +import ( + "database/sql" + "log/slog" +) + +type Post struct { + logger *slog.Logger + db *sql.DB +} + +func New(db *sql.DB, logger *slog.Logger) *Post { + return &Post{ + logger: logger, + db: db, + } +} diff --git a/exercise7/blogging-platform/internal/db/post/put_post.go b/exercise7/blogging-platform/internal/db/post/put_post.go new file mode 100644 index 00000000..a002f2a2 --- /dev/null +++ b/exercise7/blogging-platform/internal/db/post/put_post.go @@ -0,0 +1,33 @@ +package post + +import ( + "context" + "fmt" + + "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/models" +) + +func (p Post) UpdatePost(ctx context.Context, id int64, body models.Blog) error { + log := p.logger.With("method", "updatePost", "id", id) + stmt := ` +UPDATE posts +SET title = $2, content = $3, category = $4, tags = $5 +WHERE id = $1 + ` + res, err := p.db.ExecContext(ctx, stmt, id, body.Title, body.Content, body.Category, body.Tags) + if err != nil { + log.ErrorContext(ctx, "fail updated the table posts", "error", err) + return err + } + num, err := res.RowsAffected() + if err != nil { + log.ErrorContext(ctx, "fail updated the table posts", "error", err) + return err + } + if num == 0 { + log.WarnContext(ctx, "post with id was not found", "id", id) + return fmt.Errorf("post with id was not found") + } + log.InfoContext(ctx, "succes update") + return nil +} diff --git a/exercise7/blogging-platform/main.go b/exercise7/blogging-platform/main.go index 1ffa1477..3870d7f0 100644 --- a/exercise7/blogging-platform/main.go +++ b/exercise7/blogging-platform/main.go @@ -2,19 +2,22 @@ package main import ( "context" + "fmt" "log/slog" "os" "os/signal" + "github.com/joho/godotenv" "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/internal/api" "github.com/talgat-ruby/exercises-go/exercise7/blogging-platform/internal/db" ) func main() { ctx, cancel := context.WithCancel(context.Background()) - + _ = godotenv.Load() // db - _, err := db.New() + + dataBase, err := db.New(slog.With("servie", "db")) if err != nil { slog.ErrorContext( ctx, @@ -24,26 +27,43 @@ func main() { ) panic(err) } - - // api - a := api.New() - if err := a.Start(ctx); err != nil { + if err := dataBase.Init(ctx); err != nil { slog.ErrorContext( ctx, - "initialize service error", - "service", "api", + "create table error", + "service", "db", "error", err, ) panic(err) } - - go func() { + // api + a := api.New(slog.With("service", "api"), dataBase) + // if err := a.Start(ctx); err != nil { + // slog.ErrorContext( + // ctx, + // "initialize service error", + // "service", "api", + // "error", err, + // ) + // panic(err) + // } + go func(ctx context.Context, cancelFunc context.CancelFunc) { + if err := a.Start(ctx); err != nil { + slog.ErrorContext(ctx, "failed to start api", "error", err.Error()) + } + cancelFunc() + }(ctx, cancel) + go func(cancelFunc context.CancelFunc) { shutdown := make(chan os.Signal, 1) // Create channel to signify s signal being sent signal.Notify(shutdown, os.Interrupt) // When an interrupt is sent, notify the channel sig := <-shutdown slog.WarnContext(ctx, "signal received - shutting down...", "signal", sig) - cancel() - }() + cancelFunc() + }(cancel) + + <-ctx.Done() + + fmt.Println("sgutting down gracefully") } diff --git a/exercise7/blogging-platform/models/models.go b/exercise7/blogging-platform/models/models.go new file mode 100644 index 00000000..9cb68cce --- /dev/null +++ b/exercise7/blogging-platform/models/models.go @@ -0,0 +1,13 @@ +package models + +import "time" + +type Blog struct { + Id int `json:"id"` + Title string `json:"title"` + Content string `json:"content"` + Category string `json:"category"` + Tags string `json:"tags"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} diff --git a/exercise7/blogging-platform/pkg/Go.gitignore b/exercise7/blogging-platform/pkg/Go.gitignore new file mode 100644 index 00000000..6f72f892 --- /dev/null +++ b/exercise7/blogging-platform/pkg/Go.gitignore @@ -0,0 +1,25 @@ +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work +go.work.sum + +# env file +.env diff --git a/exercise8/expense_tracker/.env b/exercise8/expense_tracker/.env new file mode 100644 index 00000000..d29e14b5 --- /dev/null +++ b/exercise8/expense_tracker/.env @@ -0,0 +1,10 @@ +API_HOST=127.0.0.1 +API_PORT=8080 +PEPPER=1996yernar +SECRET_TOKEN=KUdlVye5ZIR9QmZZQKiK2qpr6hlxiBhi + +DB_HOST=db +DB_PORT=5432 +DB_NAME=yernar +DB_USER=yernar +DB_PASSWORD=yernar diff --git a/exercise8/expense_tracker/.gitignore b/exercise8/expense_tracker/.gitignore new file mode 100644 index 00000000..a342fe09 --- /dev/null +++ b/exercise8/expense_tracker/.gitignore @@ -0,0 +1,4 @@ + +test.txt +TODO +db-data \ No newline at end of file diff --git a/exercise8/expense_tracker/Dockerfile b/exercise8/expense_tracker/Dockerfile new file mode 100644 index 00000000..0326d064 --- /dev/null +++ b/exercise8/expense_tracker/Dockerfile @@ -0,0 +1,85 @@ +# syntax=docker/dockerfile:1 + +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/go/dockerfile-reference/ + +# Want to help us make this template better? Share your feedback here: https://forms.gle/ybq9Krt8jtBL3iCk7 + +################################################################################ +# Create a stage for building the application. +ARG GO_VERSION=1.23 +# --platform=$BUILDPLATFORM +FROM golang:${GO_VERSION} AS build +WORKDIR /src + +# +COPY . . +# +RUN --mount=type=cache,target=/go/pkg/mod/ \ + CGO_ENABLED=0 GOARCH=$TARGETARCH go build -o /bin/server ./cmd/main.go + +# Download dependencies as a separate step to take advantage of Docker's caching. +# Leverage a cache mount to /go/pkg/mod/ to speed up subsequent builds. +# Leverage bind mounts to go.sum and go.mod to avoid having to copy them into +# the container. +RUN --mount=type=cache,target=/go/pkg/mod/ \ + --mount=type=bind,source=go.sum,target=go.sum \ + --mount=type=bind,source=go.mod,target=go.mod \ + go mod download -x + +# This is the architecture you're building for, which is passed in by the builder. +# Placing it here allows the previous steps to be cached across architectures. +ARG TARGETARCH + +# Build the application. +# Leverage a cache mount to /go/pkg/mod/ to speed up subsequent builds. +# Leverage a bind mount to the current directory to avoid having to copy the +# source code into the container. +RUN --mount=type=cache,target=/go/pkg/mod/ \ + --mount=type=bind,target=. \ + CGO_ENABLED=0 GOARCH=$TARGETARCH go build -o /bin/server ./cmd + +################################################################################ +# Create a new stage for running the application that contains the minimal +# runtime dependencies for the application. This often uses a different base +# image from the build stage where the necessary files are copied from the build +# stage. +# +# The example below uses the alpine image as the foundation for running the app. +# By specifying the "latest" tag, it will also use whatever happens to be the +# most recent version of that image when you build your Dockerfile. If +# reproducability is important, consider using a versioned tag +# (e.g., alpine:3.17.2) or SHA (e.g., alpine@sha256:c41ab5c992deb4fe7e5da09f67a8804a46bd0592bfdf0b1847dde0e0889d2bff). +FROM alpine:latest AS final + +# Install any runtime dependencies that are needed to run your application. +# Leverage a cache mount to /var/cache/apk/ to speed up subsequent builds. +RUN --mount=type=cache,target=/var/cache/apk \ + apk --update add \ + ca-certificates \ + tzdata \ + && \ + update-ca-certificates + +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/go/dockerfile-user-best-practices/ +ARG UID=10001 +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser +USER appuser + +# Copy the executable from the "build" stage. +COPY --from=build /bin/server /bin/ + +# Expose the port that the application listens on. +EXPOSE 80 + +# What the container should run when it is started. +ENTRYPOINT [ "/bin/server" ] diff --git a/exercise8/expense_tracker/cmd/main.go b/exercise8/expense_tracker/cmd/main.go new file mode 100644 index 00000000..873e0b38 --- /dev/null +++ b/exercise8/expense_tracker/cmd/main.go @@ -0,0 +1,31 @@ +package main + +import ( + "log" + "log/slog" + "os" + + "tracker/internal/api" + "tracker/internal/db" + + "github.com/joho/godotenv" + _ "github.com/lib/pq" +) + +func main() { + err := godotenv.Load() + if err != nil { + log.Println("godotenverror:", err) + } + dbExpence, err := db.NewExpenceDB() + if err != nil { + log.Println(err) + return + } + log.Println(os.Getenv("API_PORT")) + err = api.StartServer(dbExpence) + if err != nil { + slog.Error("error start program") + return + } +} diff --git a/exercise8/expense_tracker/db-data/PG_VERSION b/exercise8/expense_tracker/db-data/PG_VERSION new file mode 100644 index 00000000..98d9bcb7 --- /dev/null +++ b/exercise8/expense_tracker/db-data/PG_VERSION @@ -0,0 +1 @@ +17 diff --git a/exercise8/expense_tracker/db-data/base/1/112 b/exercise8/expense_tracker/db-data/base/1/112 new file mode 100644 index 00000000..9531ca83 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/112 differ diff --git a/exercise8/expense_tracker/db-data/base/1/113 b/exercise8/expense_tracker/db-data/base/1/113 new file mode 100644 index 00000000..f92630d0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/113 differ diff --git a/exercise8/expense_tracker/db-data/base/1/1247 b/exercise8/expense_tracker/db-data/base/1/1247 new file mode 100644 index 00000000..24e62bc8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1247 differ diff --git a/exercise8/expense_tracker/db-data/base/1/1247_fsm b/exercise8/expense_tracker/db-data/base/1/1247_fsm new file mode 100644 index 00000000..fd573083 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1247_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/1247_vm b/exercise8/expense_tracker/db-data/base/1/1247_vm new file mode 100644 index 00000000..e8c71202 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1247_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/1249 b/exercise8/expense_tracker/db-data/base/1/1249 new file mode 100644 index 00000000..d6c2bf7b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1249 differ diff --git a/exercise8/expense_tracker/db-data/base/1/1249_fsm b/exercise8/expense_tracker/db-data/base/1/1249_fsm new file mode 100644 index 00000000..e0ed4b02 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1249_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/1249_vm b/exercise8/expense_tracker/db-data/base/1/1249_vm new file mode 100644 index 00000000..a4f59d2d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1249_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/1255 b/exercise8/expense_tracker/db-data/base/1/1255 new file mode 100644 index 00000000..ed997c22 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1255 differ diff --git a/exercise8/expense_tracker/db-data/base/1/1255_fsm b/exercise8/expense_tracker/db-data/base/1/1255_fsm new file mode 100644 index 00000000..062bfc5b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1255_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/1255_vm b/exercise8/expense_tracker/db-data/base/1/1255_vm new file mode 100644 index 00000000..cec907b3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1255_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/1259 b/exercise8/expense_tracker/db-data/base/1/1259 new file mode 100644 index 00000000..232adca0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1259 differ diff --git a/exercise8/expense_tracker/db-data/base/1/1259_fsm b/exercise8/expense_tracker/db-data/base/1/1259_fsm new file mode 100644 index 00000000..2077a7b0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1259_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/1259_vm b/exercise8/expense_tracker/db-data/base/1/1259_vm new file mode 100644 index 00000000..7e0efae1 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/1259_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/13402 b/exercise8/expense_tracker/db-data/base/1/13402 new file mode 100644 index 00000000..8bfa8dcc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13402 differ diff --git a/exercise8/expense_tracker/db-data/base/1/13402_fsm b/exercise8/expense_tracker/db-data/base/1/13402_fsm new file mode 100644 index 00000000..45338f1e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13402_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/13402_vm b/exercise8/expense_tracker/db-data/base/1/13402_vm new file mode 100644 index 00000000..87121d20 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13402_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/13405 b/exercise8/expense_tracker/db-data/base/1/13405 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/13406 b/exercise8/expense_tracker/db-data/base/1/13406 new file mode 100644 index 00000000..47293b34 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13406 differ diff --git a/exercise8/expense_tracker/db-data/base/1/13407 b/exercise8/expense_tracker/db-data/base/1/13407 new file mode 100644 index 00000000..54bfaadf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13407 differ diff --git a/exercise8/expense_tracker/db-data/base/1/13407_fsm b/exercise8/expense_tracker/db-data/base/1/13407_fsm new file mode 100644 index 00000000..ce7c26eb Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13407_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/13407_vm b/exercise8/expense_tracker/db-data/base/1/13407_vm new file mode 100644 index 00000000..ba950a17 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13407_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/13410 b/exercise8/expense_tracker/db-data/base/1/13410 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/13411 b/exercise8/expense_tracker/db-data/base/1/13411 new file mode 100644 index 00000000..e65be154 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13411 differ diff --git a/exercise8/expense_tracker/db-data/base/1/13412 b/exercise8/expense_tracker/db-data/base/1/13412 new file mode 100644 index 00000000..6411bb48 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13412 differ diff --git a/exercise8/expense_tracker/db-data/base/1/13412_fsm b/exercise8/expense_tracker/db-data/base/1/13412_fsm new file mode 100644 index 00000000..0673adae Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13412_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/13412_vm b/exercise8/expense_tracker/db-data/base/1/13412_vm new file mode 100644 index 00000000..c4c7fdc8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13412_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/13415 b/exercise8/expense_tracker/db-data/base/1/13415 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/13416 b/exercise8/expense_tracker/db-data/base/1/13416 new file mode 100644 index 00000000..6e8d2290 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13416 differ diff --git a/exercise8/expense_tracker/db-data/base/1/13417 b/exercise8/expense_tracker/db-data/base/1/13417 new file mode 100644 index 00000000..7c69150a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13417 differ diff --git a/exercise8/expense_tracker/db-data/base/1/13417_fsm b/exercise8/expense_tracker/db-data/base/1/13417_fsm new file mode 100644 index 00000000..a836ddf7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13417_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/13417_vm b/exercise8/expense_tracker/db-data/base/1/13417_vm new file mode 100644 index 00000000..a58cb1a0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13417_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/13420 b/exercise8/expense_tracker/db-data/base/1/13420 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/13421 b/exercise8/expense_tracker/db-data/base/1/13421 new file mode 100644 index 00000000..e28c6a50 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/13421 differ diff --git a/exercise8/expense_tracker/db-data/base/1/1417 b/exercise8/expense_tracker/db-data/base/1/1417 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/1418 b/exercise8/expense_tracker/db-data/base/1/1418 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/174 b/exercise8/expense_tracker/db-data/base/1/174 new file mode 100644 index 00000000..4f4d8bed Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/174 differ diff --git a/exercise8/expense_tracker/db-data/base/1/175 b/exercise8/expense_tracker/db-data/base/1/175 new file mode 100644 index 00000000..98fd8de8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/175 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2187 b/exercise8/expense_tracker/db-data/base/1/2187 new file mode 100644 index 00000000..d2cd30b2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2187 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2224 b/exercise8/expense_tracker/db-data/base/1/2224 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/2228 b/exercise8/expense_tracker/db-data/base/1/2228 new file mode 100644 index 00000000..bfecf011 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2228 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2328 b/exercise8/expense_tracker/db-data/base/1/2328 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/2336 b/exercise8/expense_tracker/db-data/base/1/2336 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/2337 b/exercise8/expense_tracker/db-data/base/1/2337 new file mode 100644 index 00000000..2c0b13d8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2337 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2579 b/exercise8/expense_tracker/db-data/base/1/2579 new file mode 100644 index 00000000..554a78f2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2579 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2600 b/exercise8/expense_tracker/db-data/base/1/2600 new file mode 100644 index 00000000..9dfd1a85 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2600 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2600_fsm b/exercise8/expense_tracker/db-data/base/1/2600_fsm new file mode 100644 index 00000000..c542a78b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2600_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2600_vm b/exercise8/expense_tracker/db-data/base/1/2600_vm new file mode 100644 index 00000000..47e56406 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2600_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2601 b/exercise8/expense_tracker/db-data/base/1/2601 new file mode 100644 index 00000000..d8001c8c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2601 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2601_fsm b/exercise8/expense_tracker/db-data/base/1/2601_fsm new file mode 100644 index 00000000..d388044f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2601_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2601_vm b/exercise8/expense_tracker/db-data/base/1/2601_vm new file mode 100644 index 00000000..c194869b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2601_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2602 b/exercise8/expense_tracker/db-data/base/1/2602 new file mode 100644 index 00000000..4a27b0a3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2602 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2602_fsm b/exercise8/expense_tracker/db-data/base/1/2602_fsm new file mode 100644 index 00000000..23170d85 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2602_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2602_vm b/exercise8/expense_tracker/db-data/base/1/2602_vm new file mode 100644 index 00000000..0ff39d79 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2602_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2603 b/exercise8/expense_tracker/db-data/base/1/2603 new file mode 100644 index 00000000..d511af56 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2603 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2603_fsm b/exercise8/expense_tracker/db-data/base/1/2603_fsm new file mode 100644 index 00000000..949bd18f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2603_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2603_vm b/exercise8/expense_tracker/db-data/base/1/2603_vm new file mode 100644 index 00000000..8c7cf0d1 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2603_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2604 b/exercise8/expense_tracker/db-data/base/1/2604 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/2605 b/exercise8/expense_tracker/db-data/base/1/2605 new file mode 100644 index 00000000..eeaa7eaa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2605 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2605_fsm b/exercise8/expense_tracker/db-data/base/1/2605_fsm new file mode 100644 index 00000000..f3b92bf7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2605_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2605_vm b/exercise8/expense_tracker/db-data/base/1/2605_vm new file mode 100644 index 00000000..3d97577b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2605_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2606 b/exercise8/expense_tracker/db-data/base/1/2606 new file mode 100644 index 00000000..c274f6fb Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2606 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2606_fsm b/exercise8/expense_tracker/db-data/base/1/2606_fsm new file mode 100644 index 00000000..267454e7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2606_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2606_vm b/exercise8/expense_tracker/db-data/base/1/2606_vm new file mode 100644 index 00000000..4ed61a90 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2606_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2607 b/exercise8/expense_tracker/db-data/base/1/2607 new file mode 100644 index 00000000..bfad49ae Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2607 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2607_fsm b/exercise8/expense_tracker/db-data/base/1/2607_fsm new file mode 100644 index 00000000..80ac8b14 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2607_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2607_vm b/exercise8/expense_tracker/db-data/base/1/2607_vm new file mode 100644 index 00000000..15b1a6fe Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2607_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2608 b/exercise8/expense_tracker/db-data/base/1/2608 new file mode 100644 index 00000000..5972a106 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2608 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2608_fsm b/exercise8/expense_tracker/db-data/base/1/2608_fsm new file mode 100644 index 00000000..4b197851 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2608_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2608_vm b/exercise8/expense_tracker/db-data/base/1/2608_vm new file mode 100644 index 00000000..c7731d82 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2608_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2609 b/exercise8/expense_tracker/db-data/base/1/2609 new file mode 100644 index 00000000..2d3398b8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2609 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2609_fsm b/exercise8/expense_tracker/db-data/base/1/2609_fsm new file mode 100644 index 00000000..fc288908 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2609_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2609_vm b/exercise8/expense_tracker/db-data/base/1/2609_vm new file mode 100644 index 00000000..aef2091b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2609_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2610 b/exercise8/expense_tracker/db-data/base/1/2610 new file mode 100644 index 00000000..0b97f72a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2610 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2610_fsm b/exercise8/expense_tracker/db-data/base/1/2610_fsm new file mode 100644 index 00000000..ecbcb5fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2610_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2610_vm b/exercise8/expense_tracker/db-data/base/1/2610_vm new file mode 100644 index 00000000..b2606d12 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2610_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2611 b/exercise8/expense_tracker/db-data/base/1/2611 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/2612 b/exercise8/expense_tracker/db-data/base/1/2612 new file mode 100644 index 00000000..0bb854fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2612 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2612_fsm b/exercise8/expense_tracker/db-data/base/1/2612_fsm new file mode 100644 index 00000000..877976ac Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2612_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2612_vm b/exercise8/expense_tracker/db-data/base/1/2612_vm new file mode 100644 index 00000000..de02c150 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2612_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2613 b/exercise8/expense_tracker/db-data/base/1/2613 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/2615 b/exercise8/expense_tracker/db-data/base/1/2615 new file mode 100644 index 00000000..e831e3ef Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2615 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2615_fsm b/exercise8/expense_tracker/db-data/base/1/2615_fsm new file mode 100644 index 00000000..d041693e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2615_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2615_vm b/exercise8/expense_tracker/db-data/base/1/2615_vm new file mode 100644 index 00000000..5ea94969 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2615_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2616 b/exercise8/expense_tracker/db-data/base/1/2616 new file mode 100644 index 00000000..0d60d797 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2616 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2616_fsm b/exercise8/expense_tracker/db-data/base/1/2616_fsm new file mode 100644 index 00000000..cb924c95 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2616_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2616_vm b/exercise8/expense_tracker/db-data/base/1/2616_vm new file mode 100644 index 00000000..d63a1533 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2616_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2617 b/exercise8/expense_tracker/db-data/base/1/2617 new file mode 100644 index 00000000..bcdfc183 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2617 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2617_fsm b/exercise8/expense_tracker/db-data/base/1/2617_fsm new file mode 100644 index 00000000..29d60666 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2617_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2617_vm b/exercise8/expense_tracker/db-data/base/1/2617_vm new file mode 100644 index 00000000..d15ecdb3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2617_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2618 b/exercise8/expense_tracker/db-data/base/1/2618 new file mode 100644 index 00000000..f5ecbea9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2618 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2618_fsm b/exercise8/expense_tracker/db-data/base/1/2618_fsm new file mode 100644 index 00000000..6cf107fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2618_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2618_vm b/exercise8/expense_tracker/db-data/base/1/2618_vm new file mode 100644 index 00000000..18e1b6e0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2618_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2619 b/exercise8/expense_tracker/db-data/base/1/2619 new file mode 100644 index 00000000..10bbc144 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2619 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2619_fsm b/exercise8/expense_tracker/db-data/base/1/2619_fsm new file mode 100644 index 00000000..15447431 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2619_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2619_vm b/exercise8/expense_tracker/db-data/base/1/2619_vm new file mode 100644 index 00000000..4ced1ab1 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2619_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2620 b/exercise8/expense_tracker/db-data/base/1/2620 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/2650 b/exercise8/expense_tracker/db-data/base/1/2650 new file mode 100644 index 00000000..042d7616 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2650 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2651 b/exercise8/expense_tracker/db-data/base/1/2651 new file mode 100644 index 00000000..35590f4d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2651 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2652 b/exercise8/expense_tracker/db-data/base/1/2652 new file mode 100644 index 00000000..adf7b05b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2652 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2653 b/exercise8/expense_tracker/db-data/base/1/2653 new file mode 100644 index 00000000..7ef9b490 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2653 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2654 b/exercise8/expense_tracker/db-data/base/1/2654 new file mode 100644 index 00000000..e4e182f8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2654 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2655 b/exercise8/expense_tracker/db-data/base/1/2655 new file mode 100644 index 00000000..0a0d5658 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2655 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2656 b/exercise8/expense_tracker/db-data/base/1/2656 new file mode 100644 index 00000000..8507f4c6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2656 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2657 b/exercise8/expense_tracker/db-data/base/1/2657 new file mode 100644 index 00000000..f62a61d3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2657 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2658 b/exercise8/expense_tracker/db-data/base/1/2658 new file mode 100644 index 00000000..41e0d33c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2658 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2659 b/exercise8/expense_tracker/db-data/base/1/2659 new file mode 100644 index 00000000..c5752ecc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2659 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2660 b/exercise8/expense_tracker/db-data/base/1/2660 new file mode 100644 index 00000000..8a832117 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2660 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2661 b/exercise8/expense_tracker/db-data/base/1/2661 new file mode 100644 index 00000000..17613f7e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2661 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2662 b/exercise8/expense_tracker/db-data/base/1/2662 new file mode 100644 index 00000000..d174749c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2662 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2663 b/exercise8/expense_tracker/db-data/base/1/2663 new file mode 100644 index 00000000..29dc7e26 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2663 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2664 b/exercise8/expense_tracker/db-data/base/1/2664 new file mode 100644 index 00000000..c5c94598 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2664 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2665 b/exercise8/expense_tracker/db-data/base/1/2665 new file mode 100644 index 00000000..c248dd89 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2665 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2666 b/exercise8/expense_tracker/db-data/base/1/2666 new file mode 100644 index 00000000..87e0eabe Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2666 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2667 b/exercise8/expense_tracker/db-data/base/1/2667 new file mode 100644 index 00000000..617dc1ce Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2667 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2668 b/exercise8/expense_tracker/db-data/base/1/2668 new file mode 100644 index 00000000..5fd6734e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2668 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2669 b/exercise8/expense_tracker/db-data/base/1/2669 new file mode 100644 index 00000000..659c1e85 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2669 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2670 b/exercise8/expense_tracker/db-data/base/1/2670 new file mode 100644 index 00000000..affe09d7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2670 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2673 b/exercise8/expense_tracker/db-data/base/1/2673 new file mode 100644 index 00000000..3175ec78 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2673 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2674 b/exercise8/expense_tracker/db-data/base/1/2674 new file mode 100644 index 00000000..2cc80e78 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2674 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2675 b/exercise8/expense_tracker/db-data/base/1/2675 new file mode 100644 index 00000000..d2635c23 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2675 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2678 b/exercise8/expense_tracker/db-data/base/1/2678 new file mode 100644 index 00000000..e02c161e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2678 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2679 b/exercise8/expense_tracker/db-data/base/1/2679 new file mode 100644 index 00000000..b72f0d61 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2679 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2680 b/exercise8/expense_tracker/db-data/base/1/2680 new file mode 100644 index 00000000..e8a9ce26 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2680 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2681 b/exercise8/expense_tracker/db-data/base/1/2681 new file mode 100644 index 00000000..c990c580 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2681 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2682 b/exercise8/expense_tracker/db-data/base/1/2682 new file mode 100644 index 00000000..5748c477 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2682 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2683 b/exercise8/expense_tracker/db-data/base/1/2683 new file mode 100644 index 00000000..b1e1410c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2683 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2684 b/exercise8/expense_tracker/db-data/base/1/2684 new file mode 100644 index 00000000..c89b6b9d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2684 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2685 b/exercise8/expense_tracker/db-data/base/1/2685 new file mode 100644 index 00000000..ac1dba18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2685 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2686 b/exercise8/expense_tracker/db-data/base/1/2686 new file mode 100644 index 00000000..afdb6ecf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2686 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2687 b/exercise8/expense_tracker/db-data/base/1/2687 new file mode 100644 index 00000000..6c5d318a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2687 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2688 b/exercise8/expense_tracker/db-data/base/1/2688 new file mode 100644 index 00000000..cbd8118a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2688 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2689 b/exercise8/expense_tracker/db-data/base/1/2689 new file mode 100644 index 00000000..785afe18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2689 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2690 b/exercise8/expense_tracker/db-data/base/1/2690 new file mode 100644 index 00000000..b11bebe0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2690 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2691 b/exercise8/expense_tracker/db-data/base/1/2691 new file mode 100644 index 00000000..2f8a1137 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2691 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2692 b/exercise8/expense_tracker/db-data/base/1/2692 new file mode 100644 index 00000000..0f483752 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2692 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2693 b/exercise8/expense_tracker/db-data/base/1/2693 new file mode 100644 index 00000000..a2073c4a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2693 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2696 b/exercise8/expense_tracker/db-data/base/1/2696 new file mode 100644 index 00000000..ca71c6c2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2696 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2699 b/exercise8/expense_tracker/db-data/base/1/2699 new file mode 100644 index 00000000..250c5ff9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2699 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2701 b/exercise8/expense_tracker/db-data/base/1/2701 new file mode 100644 index 00000000..e47c5c0f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2701 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2702 b/exercise8/expense_tracker/db-data/base/1/2702 new file mode 100644 index 00000000..bd5ceedf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2702 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2703 b/exercise8/expense_tracker/db-data/base/1/2703 new file mode 100644 index 00000000..2af616ce Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2703 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2704 b/exercise8/expense_tracker/db-data/base/1/2704 new file mode 100644 index 00000000..2f3fb8a8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2704 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2753 b/exercise8/expense_tracker/db-data/base/1/2753 new file mode 100644 index 00000000..3c16dff6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2753 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2753_fsm b/exercise8/expense_tracker/db-data/base/1/2753_fsm new file mode 100644 index 00000000..642bce3b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2753_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2753_vm b/exercise8/expense_tracker/db-data/base/1/2753_vm new file mode 100644 index 00000000..1446702e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2753_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2754 b/exercise8/expense_tracker/db-data/base/1/2754 new file mode 100644 index 00000000..dff15d8e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2754 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2755 b/exercise8/expense_tracker/db-data/base/1/2755 new file mode 100644 index 00000000..4b09f639 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2755 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2756 b/exercise8/expense_tracker/db-data/base/1/2756 new file mode 100644 index 00000000..8d0e7744 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2756 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2757 b/exercise8/expense_tracker/db-data/base/1/2757 new file mode 100644 index 00000000..3df6dd2e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2757 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2830 b/exercise8/expense_tracker/db-data/base/1/2830 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/2831 b/exercise8/expense_tracker/db-data/base/1/2831 new file mode 100644 index 00000000..260051f9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2831 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2832 b/exercise8/expense_tracker/db-data/base/1/2832 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/2833 b/exercise8/expense_tracker/db-data/base/1/2833 new file mode 100644 index 00000000..d178ccac Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2833 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2834 b/exercise8/expense_tracker/db-data/base/1/2834 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/2835 b/exercise8/expense_tracker/db-data/base/1/2835 new file mode 100644 index 00000000..db2ba3a0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2835 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2836 b/exercise8/expense_tracker/db-data/base/1/2836 new file mode 100644 index 00000000..0224c41e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2836 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2836_fsm b/exercise8/expense_tracker/db-data/base/1/2836_fsm new file mode 100644 index 00000000..ed42b8e8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2836_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2836_vm b/exercise8/expense_tracker/db-data/base/1/2836_vm new file mode 100644 index 00000000..2a0e54d7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2836_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2837 b/exercise8/expense_tracker/db-data/base/1/2837 new file mode 100644 index 00000000..7b84ea0b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2837 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2838 b/exercise8/expense_tracker/db-data/base/1/2838 new file mode 100644 index 00000000..d0e4f255 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2838 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2838_fsm b/exercise8/expense_tracker/db-data/base/1/2838_fsm new file mode 100644 index 00000000..ad618337 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2838_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2838_vm b/exercise8/expense_tracker/db-data/base/1/2838_vm new file mode 100644 index 00000000..f44e1526 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2838_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2839 b/exercise8/expense_tracker/db-data/base/1/2839 new file mode 100644 index 00000000..1ef0c8e8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2839 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2840 b/exercise8/expense_tracker/db-data/base/1/2840 new file mode 100644 index 00000000..fba8ee2c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2840 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2840_fsm b/exercise8/expense_tracker/db-data/base/1/2840_fsm new file mode 100644 index 00000000..6a3925ba Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2840_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2840_vm b/exercise8/expense_tracker/db-data/base/1/2840_vm new file mode 100644 index 00000000..71da6a55 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2840_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/2841 b/exercise8/expense_tracker/db-data/base/1/2841 new file mode 100644 index 00000000..2d7a3274 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2841 differ diff --git a/exercise8/expense_tracker/db-data/base/1/2995 b/exercise8/expense_tracker/db-data/base/1/2995 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/2996 b/exercise8/expense_tracker/db-data/base/1/2996 new file mode 100644 index 00000000..7bcbf8f6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/2996 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3079 b/exercise8/expense_tracker/db-data/base/1/3079 new file mode 100644 index 00000000..a95de50e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3079 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3079_fsm b/exercise8/expense_tracker/db-data/base/1/3079_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3079_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3079_vm b/exercise8/expense_tracker/db-data/base/1/3079_vm new file mode 100644 index 00000000..2009e665 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3079_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3080 b/exercise8/expense_tracker/db-data/base/1/3080 new file mode 100644 index 00000000..b3373f25 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3080 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3081 b/exercise8/expense_tracker/db-data/base/1/3081 new file mode 100644 index 00000000..1313ba44 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3081 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3085 b/exercise8/expense_tracker/db-data/base/1/3085 new file mode 100644 index 00000000..95b3694e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3085 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3118 b/exercise8/expense_tracker/db-data/base/1/3118 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3119 b/exercise8/expense_tracker/db-data/base/1/3119 new file mode 100644 index 00000000..059d8b65 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3119 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3164 b/exercise8/expense_tracker/db-data/base/1/3164 new file mode 100644 index 00000000..482529bf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3164 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3256 b/exercise8/expense_tracker/db-data/base/1/3256 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3257 b/exercise8/expense_tracker/db-data/base/1/3257 new file mode 100644 index 00000000..fbf5bbec Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3257 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3258 b/exercise8/expense_tracker/db-data/base/1/3258 new file mode 100644 index 00000000..e6ea9ced Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3258 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3350 b/exercise8/expense_tracker/db-data/base/1/3350 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3351 b/exercise8/expense_tracker/db-data/base/1/3351 new file mode 100644 index 00000000..afd5efa0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3351 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3379 b/exercise8/expense_tracker/db-data/base/1/3379 new file mode 100644 index 00000000..faaee394 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3379 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3380 b/exercise8/expense_tracker/db-data/base/1/3380 new file mode 100644 index 00000000..01e9984f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3380 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3381 b/exercise8/expense_tracker/db-data/base/1/3381 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3394 b/exercise8/expense_tracker/db-data/base/1/3394 new file mode 100644 index 00000000..1c3378a9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3394 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3394_fsm b/exercise8/expense_tracker/db-data/base/1/3394_fsm new file mode 100644 index 00000000..ffa86444 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3394_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3394_vm b/exercise8/expense_tracker/db-data/base/1/3394_vm new file mode 100644 index 00000000..f9fcb92d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3394_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3395 b/exercise8/expense_tracker/db-data/base/1/3395 new file mode 100644 index 00000000..90877bc4 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3395 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3429 b/exercise8/expense_tracker/db-data/base/1/3429 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3430 b/exercise8/expense_tracker/db-data/base/1/3430 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3431 b/exercise8/expense_tracker/db-data/base/1/3431 new file mode 100644 index 00000000..13c10cb2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3431 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3433 b/exercise8/expense_tracker/db-data/base/1/3433 new file mode 100644 index 00000000..ffe926f6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3433 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3439 b/exercise8/expense_tracker/db-data/base/1/3439 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3440 b/exercise8/expense_tracker/db-data/base/1/3440 new file mode 100644 index 00000000..cfae4dfc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3440 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3455 b/exercise8/expense_tracker/db-data/base/1/3455 new file mode 100644 index 00000000..a44ef250 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3455 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3456 b/exercise8/expense_tracker/db-data/base/1/3456 new file mode 100644 index 00000000..d83738d9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3456 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3456_fsm b/exercise8/expense_tracker/db-data/base/1/3456_fsm new file mode 100644 index 00000000..51cf9b86 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3456_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3456_vm b/exercise8/expense_tracker/db-data/base/1/3456_vm new file mode 100644 index 00000000..f10831e6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3456_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3466 b/exercise8/expense_tracker/db-data/base/1/3466 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3467 b/exercise8/expense_tracker/db-data/base/1/3467 new file mode 100644 index 00000000..6344b94f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3467 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3468 b/exercise8/expense_tracker/db-data/base/1/3468 new file mode 100644 index 00000000..6a2b6b18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3468 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3501 b/exercise8/expense_tracker/db-data/base/1/3501 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3502 b/exercise8/expense_tracker/db-data/base/1/3502 new file mode 100644 index 00000000..eb0b32aa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3502 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3503 b/exercise8/expense_tracker/db-data/base/1/3503 new file mode 100644 index 00000000..32a30555 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3503 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3534 b/exercise8/expense_tracker/db-data/base/1/3534 new file mode 100644 index 00000000..7676fd82 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3534 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3541 b/exercise8/expense_tracker/db-data/base/1/3541 new file mode 100644 index 00000000..40869ad3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3541 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3541_fsm b/exercise8/expense_tracker/db-data/base/1/3541_fsm new file mode 100644 index 00000000..a3a2de4d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3541_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3541_vm b/exercise8/expense_tracker/db-data/base/1/3541_vm new file mode 100644 index 00000000..58c700c3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3541_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3542 b/exercise8/expense_tracker/db-data/base/1/3542 new file mode 100644 index 00000000..bb83580a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3542 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3574 b/exercise8/expense_tracker/db-data/base/1/3574 new file mode 100644 index 00000000..b026df10 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3574 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3575 b/exercise8/expense_tracker/db-data/base/1/3575 new file mode 100644 index 00000000..bdec5326 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3575 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3576 b/exercise8/expense_tracker/db-data/base/1/3576 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3596 b/exercise8/expense_tracker/db-data/base/1/3596 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3597 b/exercise8/expense_tracker/db-data/base/1/3597 new file mode 100644 index 00000000..8963738c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3597 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3598 b/exercise8/expense_tracker/db-data/base/1/3598 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/3599 b/exercise8/expense_tracker/db-data/base/1/3599 new file mode 100644 index 00000000..67582c2b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3599 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3600 b/exercise8/expense_tracker/db-data/base/1/3600 new file mode 100644 index 00000000..b7e061d3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3600 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3600_fsm b/exercise8/expense_tracker/db-data/base/1/3600_fsm new file mode 100644 index 00000000..cebec199 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3600_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3600_vm b/exercise8/expense_tracker/db-data/base/1/3600_vm new file mode 100644 index 00000000..13678275 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3600_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3601 b/exercise8/expense_tracker/db-data/base/1/3601 new file mode 100644 index 00000000..04c846ec Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3601 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3601_fsm b/exercise8/expense_tracker/db-data/base/1/3601_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3601_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3601_vm b/exercise8/expense_tracker/db-data/base/1/3601_vm new file mode 100644 index 00000000..880269df Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3601_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3602 b/exercise8/expense_tracker/db-data/base/1/3602 new file mode 100644 index 00000000..71bfd4ff Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3602 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3602_fsm b/exercise8/expense_tracker/db-data/base/1/3602_fsm new file mode 100644 index 00000000..d7897de2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3602_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3602_vm b/exercise8/expense_tracker/db-data/base/1/3602_vm new file mode 100644 index 00000000..6069ce67 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3602_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3603 b/exercise8/expense_tracker/db-data/base/1/3603 new file mode 100644 index 00000000..3731bfd7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3603 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3603_fsm b/exercise8/expense_tracker/db-data/base/1/3603_fsm new file mode 100644 index 00000000..c28dd4fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3603_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3603_vm b/exercise8/expense_tracker/db-data/base/1/3603_vm new file mode 100644 index 00000000..039a496f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3603_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3604 b/exercise8/expense_tracker/db-data/base/1/3604 new file mode 100644 index 00000000..071d6cf2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3604 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3605 b/exercise8/expense_tracker/db-data/base/1/3605 new file mode 100644 index 00000000..29fc4f3d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3605 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3606 b/exercise8/expense_tracker/db-data/base/1/3606 new file mode 100644 index 00000000..698e6d09 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3606 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3607 b/exercise8/expense_tracker/db-data/base/1/3607 new file mode 100644 index 00000000..1d023e00 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3607 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3608 b/exercise8/expense_tracker/db-data/base/1/3608 new file mode 100644 index 00000000..83911eb3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3608 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3609 b/exercise8/expense_tracker/db-data/base/1/3609 new file mode 100644 index 00000000..2f4fc84e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3609 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3712 b/exercise8/expense_tracker/db-data/base/1/3712 new file mode 100644 index 00000000..02f33030 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3712 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3764 b/exercise8/expense_tracker/db-data/base/1/3764 new file mode 100644 index 00000000..c99948f5 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3764 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3764_fsm b/exercise8/expense_tracker/db-data/base/1/3764_fsm new file mode 100644 index 00000000..f64db4df Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3764_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3764_vm b/exercise8/expense_tracker/db-data/base/1/3764_vm new file mode 100644 index 00000000..d25e1e15 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3764_vm differ diff --git a/exercise8/expense_tracker/db-data/base/1/3766 b/exercise8/expense_tracker/db-data/base/1/3766 new file mode 100644 index 00000000..5038b6e3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3766 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3767 b/exercise8/expense_tracker/db-data/base/1/3767 new file mode 100644 index 00000000..3c89a3cb Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3767 differ diff --git a/exercise8/expense_tracker/db-data/base/1/3997 b/exercise8/expense_tracker/db-data/base/1/3997 new file mode 100644 index 00000000..46564a34 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/3997 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4143 b/exercise8/expense_tracker/db-data/base/1/4143 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4144 b/exercise8/expense_tracker/db-data/base/1/4144 new file mode 100644 index 00000000..64af7645 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4144 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4145 b/exercise8/expense_tracker/db-data/base/1/4145 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4146 b/exercise8/expense_tracker/db-data/base/1/4146 new file mode 100644 index 00000000..1f029ea4 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4146 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4147 b/exercise8/expense_tracker/db-data/base/1/4147 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4148 b/exercise8/expense_tracker/db-data/base/1/4148 new file mode 100644 index 00000000..5959a958 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4148 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4149 b/exercise8/expense_tracker/db-data/base/1/4149 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4150 b/exercise8/expense_tracker/db-data/base/1/4150 new file mode 100644 index 00000000..5e11d49b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4150 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4151 b/exercise8/expense_tracker/db-data/base/1/4151 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4152 b/exercise8/expense_tracker/db-data/base/1/4152 new file mode 100644 index 00000000..8acd468c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4152 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4153 b/exercise8/expense_tracker/db-data/base/1/4153 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4154 b/exercise8/expense_tracker/db-data/base/1/4154 new file mode 100644 index 00000000..e597f616 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4154 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4155 b/exercise8/expense_tracker/db-data/base/1/4155 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4156 b/exercise8/expense_tracker/db-data/base/1/4156 new file mode 100644 index 00000000..d653113c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4156 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4157 b/exercise8/expense_tracker/db-data/base/1/4157 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4158 b/exercise8/expense_tracker/db-data/base/1/4158 new file mode 100644 index 00000000..355910cc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4158 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4159 b/exercise8/expense_tracker/db-data/base/1/4159 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4160 b/exercise8/expense_tracker/db-data/base/1/4160 new file mode 100644 index 00000000..7d09bfa7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4160 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4163 b/exercise8/expense_tracker/db-data/base/1/4163 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4164 b/exercise8/expense_tracker/db-data/base/1/4164 new file mode 100644 index 00000000..97adb952 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4164 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4165 b/exercise8/expense_tracker/db-data/base/1/4165 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4166 b/exercise8/expense_tracker/db-data/base/1/4166 new file mode 100644 index 00000000..c0e3e5b6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4166 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4167 b/exercise8/expense_tracker/db-data/base/1/4167 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4168 b/exercise8/expense_tracker/db-data/base/1/4168 new file mode 100644 index 00000000..ddcb5604 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4168 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4169 b/exercise8/expense_tracker/db-data/base/1/4169 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4170 b/exercise8/expense_tracker/db-data/base/1/4170 new file mode 100644 index 00000000..5812a8ec Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4170 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4171 b/exercise8/expense_tracker/db-data/base/1/4171 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4172 b/exercise8/expense_tracker/db-data/base/1/4172 new file mode 100644 index 00000000..84c04d60 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4172 differ diff --git a/exercise8/expense_tracker/db-data/base/1/4173 b/exercise8/expense_tracker/db-data/base/1/4173 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/4174 b/exercise8/expense_tracker/db-data/base/1/4174 new file mode 100644 index 00000000..9b12becd Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/4174 differ diff --git a/exercise8/expense_tracker/db-data/base/1/5002 b/exercise8/expense_tracker/db-data/base/1/5002 new file mode 100644 index 00000000..aefa40dd Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/5002 differ diff --git a/exercise8/expense_tracker/db-data/base/1/548 b/exercise8/expense_tracker/db-data/base/1/548 new file mode 100644 index 00000000..64fdefd5 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/548 differ diff --git a/exercise8/expense_tracker/db-data/base/1/549 b/exercise8/expense_tracker/db-data/base/1/549 new file mode 100644 index 00000000..3734cc2b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/549 differ diff --git a/exercise8/expense_tracker/db-data/base/1/6102 b/exercise8/expense_tracker/db-data/base/1/6102 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/6104 b/exercise8/expense_tracker/db-data/base/1/6104 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/6106 b/exercise8/expense_tracker/db-data/base/1/6106 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/6110 b/exercise8/expense_tracker/db-data/base/1/6110 new file mode 100644 index 00000000..42e19200 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/6110 differ diff --git a/exercise8/expense_tracker/db-data/base/1/6111 b/exercise8/expense_tracker/db-data/base/1/6111 new file mode 100644 index 00000000..d012727d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/6111 differ diff --git a/exercise8/expense_tracker/db-data/base/1/6112 b/exercise8/expense_tracker/db-data/base/1/6112 new file mode 100644 index 00000000..293367c2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/6112 differ diff --git a/exercise8/expense_tracker/db-data/base/1/6113 b/exercise8/expense_tracker/db-data/base/1/6113 new file mode 100644 index 00000000..542f8faa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/6113 differ diff --git a/exercise8/expense_tracker/db-data/base/1/6116 b/exercise8/expense_tracker/db-data/base/1/6116 new file mode 100644 index 00000000..787d5d18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/6116 differ diff --git a/exercise8/expense_tracker/db-data/base/1/6117 b/exercise8/expense_tracker/db-data/base/1/6117 new file mode 100644 index 00000000..2b5656b2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/6117 differ diff --git a/exercise8/expense_tracker/db-data/base/1/6175 b/exercise8/expense_tracker/db-data/base/1/6175 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/6176 b/exercise8/expense_tracker/db-data/base/1/6176 new file mode 100644 index 00000000..6e5bcd62 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/6176 differ diff --git a/exercise8/expense_tracker/db-data/base/1/6228 b/exercise8/expense_tracker/db-data/base/1/6228 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/6229 b/exercise8/expense_tracker/db-data/base/1/6229 new file mode 100644 index 00000000..fae8f445 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/6229 differ diff --git a/exercise8/expense_tracker/db-data/base/1/6237 b/exercise8/expense_tracker/db-data/base/1/6237 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/6238 b/exercise8/expense_tracker/db-data/base/1/6238 new file mode 100644 index 00000000..e7c0e8c3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/6238 differ diff --git a/exercise8/expense_tracker/db-data/base/1/6239 b/exercise8/expense_tracker/db-data/base/1/6239 new file mode 100644 index 00000000..6c60b507 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/6239 differ diff --git a/exercise8/expense_tracker/db-data/base/1/826 b/exercise8/expense_tracker/db-data/base/1/826 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/1/827 b/exercise8/expense_tracker/db-data/base/1/827 new file mode 100644 index 00000000..f102efd8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/827 differ diff --git a/exercise8/expense_tracker/db-data/base/1/828 b/exercise8/expense_tracker/db-data/base/1/828 new file mode 100644 index 00000000..e97c210f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/828 differ diff --git a/exercise8/expense_tracker/db-data/base/1/PG_VERSION b/exercise8/expense_tracker/db-data/base/1/PG_VERSION new file mode 100644 index 00000000..98d9bcb7 --- /dev/null +++ b/exercise8/expense_tracker/db-data/base/1/PG_VERSION @@ -0,0 +1 @@ +17 diff --git a/exercise8/expense_tracker/db-data/base/1/pg_filenode.map b/exercise8/expense_tracker/db-data/base/1/pg_filenode.map new file mode 100644 index 00000000..4fc801aa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/1/pg_filenode.map differ diff --git a/exercise8/expense_tracker/db-data/base/4/112 b/exercise8/expense_tracker/db-data/base/4/112 new file mode 100644 index 00000000..9531ca83 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/112 differ diff --git a/exercise8/expense_tracker/db-data/base/4/113 b/exercise8/expense_tracker/db-data/base/4/113 new file mode 100644 index 00000000..f92630d0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/113 differ diff --git a/exercise8/expense_tracker/db-data/base/4/1247 b/exercise8/expense_tracker/db-data/base/4/1247 new file mode 100644 index 00000000..24e62bc8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1247 differ diff --git a/exercise8/expense_tracker/db-data/base/4/1247_fsm b/exercise8/expense_tracker/db-data/base/4/1247_fsm new file mode 100644 index 00000000..fd573083 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1247_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/1247_vm b/exercise8/expense_tracker/db-data/base/4/1247_vm new file mode 100644 index 00000000..e8c71202 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1247_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/1249 b/exercise8/expense_tracker/db-data/base/4/1249 new file mode 100644 index 00000000..d6c2bf7b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1249 differ diff --git a/exercise8/expense_tracker/db-data/base/4/1249_fsm b/exercise8/expense_tracker/db-data/base/4/1249_fsm new file mode 100644 index 00000000..e0ed4b02 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1249_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/1249_vm b/exercise8/expense_tracker/db-data/base/4/1249_vm new file mode 100644 index 00000000..a4f59d2d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1249_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/1255 b/exercise8/expense_tracker/db-data/base/4/1255 new file mode 100644 index 00000000..ed997c22 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1255 differ diff --git a/exercise8/expense_tracker/db-data/base/4/1255_fsm b/exercise8/expense_tracker/db-data/base/4/1255_fsm new file mode 100644 index 00000000..062bfc5b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1255_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/1255_vm b/exercise8/expense_tracker/db-data/base/4/1255_vm new file mode 100644 index 00000000..cec907b3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1255_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/1259 b/exercise8/expense_tracker/db-data/base/4/1259 new file mode 100644 index 00000000..7689882b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1259 differ diff --git a/exercise8/expense_tracker/db-data/base/4/1259_fsm b/exercise8/expense_tracker/db-data/base/4/1259_fsm new file mode 100644 index 00000000..2077a7b0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1259_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/1259_vm b/exercise8/expense_tracker/db-data/base/4/1259_vm new file mode 100644 index 00000000..7e0efae1 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/1259_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/13402 b/exercise8/expense_tracker/db-data/base/4/13402 new file mode 100644 index 00000000..8bfa8dcc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13402 differ diff --git a/exercise8/expense_tracker/db-data/base/4/13402_fsm b/exercise8/expense_tracker/db-data/base/4/13402_fsm new file mode 100644 index 00000000..45338f1e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13402_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/13402_vm b/exercise8/expense_tracker/db-data/base/4/13402_vm new file mode 100644 index 00000000..87121d20 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13402_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/13405 b/exercise8/expense_tracker/db-data/base/4/13405 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/13406 b/exercise8/expense_tracker/db-data/base/4/13406 new file mode 100644 index 00000000..47293b34 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13406 differ diff --git a/exercise8/expense_tracker/db-data/base/4/13407 b/exercise8/expense_tracker/db-data/base/4/13407 new file mode 100644 index 00000000..54bfaadf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13407 differ diff --git a/exercise8/expense_tracker/db-data/base/4/13407_fsm b/exercise8/expense_tracker/db-data/base/4/13407_fsm new file mode 100644 index 00000000..ce7c26eb Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13407_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/13407_vm b/exercise8/expense_tracker/db-data/base/4/13407_vm new file mode 100644 index 00000000..ba950a17 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13407_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/13410 b/exercise8/expense_tracker/db-data/base/4/13410 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/13411 b/exercise8/expense_tracker/db-data/base/4/13411 new file mode 100644 index 00000000..e65be154 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13411 differ diff --git a/exercise8/expense_tracker/db-data/base/4/13412 b/exercise8/expense_tracker/db-data/base/4/13412 new file mode 100644 index 00000000..6411bb48 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13412 differ diff --git a/exercise8/expense_tracker/db-data/base/4/13412_fsm b/exercise8/expense_tracker/db-data/base/4/13412_fsm new file mode 100644 index 00000000..0673adae Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13412_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/13412_vm b/exercise8/expense_tracker/db-data/base/4/13412_vm new file mode 100644 index 00000000..c4c7fdc8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13412_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/13415 b/exercise8/expense_tracker/db-data/base/4/13415 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/13416 b/exercise8/expense_tracker/db-data/base/4/13416 new file mode 100644 index 00000000..6e8d2290 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13416 differ diff --git a/exercise8/expense_tracker/db-data/base/4/13417 b/exercise8/expense_tracker/db-data/base/4/13417 new file mode 100644 index 00000000..7c69150a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13417 differ diff --git a/exercise8/expense_tracker/db-data/base/4/13417_fsm b/exercise8/expense_tracker/db-data/base/4/13417_fsm new file mode 100644 index 00000000..a836ddf7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13417_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/13417_vm b/exercise8/expense_tracker/db-data/base/4/13417_vm new file mode 100644 index 00000000..a58cb1a0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13417_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/13420 b/exercise8/expense_tracker/db-data/base/4/13420 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/13421 b/exercise8/expense_tracker/db-data/base/4/13421 new file mode 100644 index 00000000..e28c6a50 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/13421 differ diff --git a/exercise8/expense_tracker/db-data/base/4/1417 b/exercise8/expense_tracker/db-data/base/4/1417 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/1418 b/exercise8/expense_tracker/db-data/base/4/1418 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/174 b/exercise8/expense_tracker/db-data/base/4/174 new file mode 100644 index 00000000..4f4d8bed Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/174 differ diff --git a/exercise8/expense_tracker/db-data/base/4/175 b/exercise8/expense_tracker/db-data/base/4/175 new file mode 100644 index 00000000..98fd8de8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/175 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2187 b/exercise8/expense_tracker/db-data/base/4/2187 new file mode 100644 index 00000000..d2cd30b2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2187 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2224 b/exercise8/expense_tracker/db-data/base/4/2224 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/2228 b/exercise8/expense_tracker/db-data/base/4/2228 new file mode 100644 index 00000000..bfecf011 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2228 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2328 b/exercise8/expense_tracker/db-data/base/4/2328 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/2336 b/exercise8/expense_tracker/db-data/base/4/2336 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/2337 b/exercise8/expense_tracker/db-data/base/4/2337 new file mode 100644 index 00000000..2c0b13d8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2337 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2579 b/exercise8/expense_tracker/db-data/base/4/2579 new file mode 100644 index 00000000..554a78f2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2579 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2600 b/exercise8/expense_tracker/db-data/base/4/2600 new file mode 100644 index 00000000..9dfd1a85 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2600 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2600_fsm b/exercise8/expense_tracker/db-data/base/4/2600_fsm new file mode 100644 index 00000000..c542a78b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2600_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2600_vm b/exercise8/expense_tracker/db-data/base/4/2600_vm new file mode 100644 index 00000000..47e56406 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2600_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2601 b/exercise8/expense_tracker/db-data/base/4/2601 new file mode 100644 index 00000000..d8001c8c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2601 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2601_fsm b/exercise8/expense_tracker/db-data/base/4/2601_fsm new file mode 100644 index 00000000..d388044f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2601_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2601_vm b/exercise8/expense_tracker/db-data/base/4/2601_vm new file mode 100644 index 00000000..c194869b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2601_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2602 b/exercise8/expense_tracker/db-data/base/4/2602 new file mode 100644 index 00000000..4a27b0a3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2602 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2602_fsm b/exercise8/expense_tracker/db-data/base/4/2602_fsm new file mode 100644 index 00000000..23170d85 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2602_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2602_vm b/exercise8/expense_tracker/db-data/base/4/2602_vm new file mode 100644 index 00000000..0ff39d79 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2602_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2603 b/exercise8/expense_tracker/db-data/base/4/2603 new file mode 100644 index 00000000..d511af56 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2603 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2603_fsm b/exercise8/expense_tracker/db-data/base/4/2603_fsm new file mode 100644 index 00000000..949bd18f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2603_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2603_vm b/exercise8/expense_tracker/db-data/base/4/2603_vm new file mode 100644 index 00000000..8c7cf0d1 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2603_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2604 b/exercise8/expense_tracker/db-data/base/4/2604 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/2605 b/exercise8/expense_tracker/db-data/base/4/2605 new file mode 100644 index 00000000..eeaa7eaa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2605 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2605_fsm b/exercise8/expense_tracker/db-data/base/4/2605_fsm new file mode 100644 index 00000000..f3b92bf7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2605_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2605_vm b/exercise8/expense_tracker/db-data/base/4/2605_vm new file mode 100644 index 00000000..3d97577b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2605_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2606 b/exercise8/expense_tracker/db-data/base/4/2606 new file mode 100644 index 00000000..c274f6fb Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2606 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2606_fsm b/exercise8/expense_tracker/db-data/base/4/2606_fsm new file mode 100644 index 00000000..267454e7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2606_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2606_vm b/exercise8/expense_tracker/db-data/base/4/2606_vm new file mode 100644 index 00000000..4ed61a90 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2606_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2607 b/exercise8/expense_tracker/db-data/base/4/2607 new file mode 100644 index 00000000..bfad49ae Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2607 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2607_fsm b/exercise8/expense_tracker/db-data/base/4/2607_fsm new file mode 100644 index 00000000..80ac8b14 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2607_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2607_vm b/exercise8/expense_tracker/db-data/base/4/2607_vm new file mode 100644 index 00000000..15b1a6fe Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2607_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2608 b/exercise8/expense_tracker/db-data/base/4/2608 new file mode 100644 index 00000000..5972a106 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2608 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2608_fsm b/exercise8/expense_tracker/db-data/base/4/2608_fsm new file mode 100644 index 00000000..4b197851 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2608_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2608_vm b/exercise8/expense_tracker/db-data/base/4/2608_vm new file mode 100644 index 00000000..c7731d82 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2608_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2609 b/exercise8/expense_tracker/db-data/base/4/2609 new file mode 100644 index 00000000..2d3398b8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2609 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2609_fsm b/exercise8/expense_tracker/db-data/base/4/2609_fsm new file mode 100644 index 00000000..fc288908 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2609_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2609_vm b/exercise8/expense_tracker/db-data/base/4/2609_vm new file mode 100644 index 00000000..aef2091b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2609_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2610 b/exercise8/expense_tracker/db-data/base/4/2610 new file mode 100644 index 00000000..0b97f72a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2610 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2610_fsm b/exercise8/expense_tracker/db-data/base/4/2610_fsm new file mode 100644 index 00000000..ecbcb5fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2610_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2610_vm b/exercise8/expense_tracker/db-data/base/4/2610_vm new file mode 100644 index 00000000..b2606d12 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2610_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2611 b/exercise8/expense_tracker/db-data/base/4/2611 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/2612 b/exercise8/expense_tracker/db-data/base/4/2612 new file mode 100644 index 00000000..0bb854fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2612 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2612_fsm b/exercise8/expense_tracker/db-data/base/4/2612_fsm new file mode 100644 index 00000000..877976ac Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2612_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2612_vm b/exercise8/expense_tracker/db-data/base/4/2612_vm new file mode 100644 index 00000000..de02c150 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2612_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2613 b/exercise8/expense_tracker/db-data/base/4/2613 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/2615 b/exercise8/expense_tracker/db-data/base/4/2615 new file mode 100644 index 00000000..e831e3ef Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2615 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2615_fsm b/exercise8/expense_tracker/db-data/base/4/2615_fsm new file mode 100644 index 00000000..d041693e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2615_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2615_vm b/exercise8/expense_tracker/db-data/base/4/2615_vm new file mode 100644 index 00000000..5ea94969 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2615_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2616 b/exercise8/expense_tracker/db-data/base/4/2616 new file mode 100644 index 00000000..0d60d797 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2616 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2616_fsm b/exercise8/expense_tracker/db-data/base/4/2616_fsm new file mode 100644 index 00000000..cb924c95 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2616_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2616_vm b/exercise8/expense_tracker/db-data/base/4/2616_vm new file mode 100644 index 00000000..d63a1533 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2616_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2617 b/exercise8/expense_tracker/db-data/base/4/2617 new file mode 100644 index 00000000..bcdfc183 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2617 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2617_fsm b/exercise8/expense_tracker/db-data/base/4/2617_fsm new file mode 100644 index 00000000..29d60666 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2617_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2617_vm b/exercise8/expense_tracker/db-data/base/4/2617_vm new file mode 100644 index 00000000..d15ecdb3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2617_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2618 b/exercise8/expense_tracker/db-data/base/4/2618 new file mode 100644 index 00000000..f5ecbea9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2618 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2618_fsm b/exercise8/expense_tracker/db-data/base/4/2618_fsm new file mode 100644 index 00000000..6cf107fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2618_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2618_vm b/exercise8/expense_tracker/db-data/base/4/2618_vm new file mode 100644 index 00000000..18e1b6e0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2618_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2619 b/exercise8/expense_tracker/db-data/base/4/2619 new file mode 100644 index 00000000..c93accb8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2619 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2619_fsm b/exercise8/expense_tracker/db-data/base/4/2619_fsm new file mode 100644 index 00000000..1067ef16 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2619_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2619_vm b/exercise8/expense_tracker/db-data/base/4/2619_vm new file mode 100644 index 00000000..0ff1293e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2619_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2620 b/exercise8/expense_tracker/db-data/base/4/2620 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/2650 b/exercise8/expense_tracker/db-data/base/4/2650 new file mode 100644 index 00000000..042d7616 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2650 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2651 b/exercise8/expense_tracker/db-data/base/4/2651 new file mode 100644 index 00000000..35590f4d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2651 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2652 b/exercise8/expense_tracker/db-data/base/4/2652 new file mode 100644 index 00000000..adf7b05b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2652 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2653 b/exercise8/expense_tracker/db-data/base/4/2653 new file mode 100644 index 00000000..7ef9b490 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2653 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2654 b/exercise8/expense_tracker/db-data/base/4/2654 new file mode 100644 index 00000000..e4e182f8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2654 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2655 b/exercise8/expense_tracker/db-data/base/4/2655 new file mode 100644 index 00000000..0a0d5658 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2655 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2656 b/exercise8/expense_tracker/db-data/base/4/2656 new file mode 100644 index 00000000..8507f4c6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2656 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2657 b/exercise8/expense_tracker/db-data/base/4/2657 new file mode 100644 index 00000000..f62a61d3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2657 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2658 b/exercise8/expense_tracker/db-data/base/4/2658 new file mode 100644 index 00000000..41e0d33c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2658 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2659 b/exercise8/expense_tracker/db-data/base/4/2659 new file mode 100644 index 00000000..c5752ecc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2659 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2660 b/exercise8/expense_tracker/db-data/base/4/2660 new file mode 100644 index 00000000..8a832117 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2660 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2661 b/exercise8/expense_tracker/db-data/base/4/2661 new file mode 100644 index 00000000..17613f7e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2661 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2662 b/exercise8/expense_tracker/db-data/base/4/2662 new file mode 100644 index 00000000..d174749c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2662 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2663 b/exercise8/expense_tracker/db-data/base/4/2663 new file mode 100644 index 00000000..29dc7e26 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2663 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2664 b/exercise8/expense_tracker/db-data/base/4/2664 new file mode 100644 index 00000000..c5c94598 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2664 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2665 b/exercise8/expense_tracker/db-data/base/4/2665 new file mode 100644 index 00000000..c248dd89 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2665 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2666 b/exercise8/expense_tracker/db-data/base/4/2666 new file mode 100644 index 00000000..87e0eabe Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2666 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2667 b/exercise8/expense_tracker/db-data/base/4/2667 new file mode 100644 index 00000000..617dc1ce Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2667 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2668 b/exercise8/expense_tracker/db-data/base/4/2668 new file mode 100644 index 00000000..5fd6734e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2668 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2669 b/exercise8/expense_tracker/db-data/base/4/2669 new file mode 100644 index 00000000..659c1e85 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2669 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2670 b/exercise8/expense_tracker/db-data/base/4/2670 new file mode 100644 index 00000000..affe09d7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2670 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2673 b/exercise8/expense_tracker/db-data/base/4/2673 new file mode 100644 index 00000000..3175ec78 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2673 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2674 b/exercise8/expense_tracker/db-data/base/4/2674 new file mode 100644 index 00000000..2cc80e78 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2674 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2675 b/exercise8/expense_tracker/db-data/base/4/2675 new file mode 100644 index 00000000..d2635c23 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2675 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2678 b/exercise8/expense_tracker/db-data/base/4/2678 new file mode 100644 index 00000000..e02c161e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2678 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2679 b/exercise8/expense_tracker/db-data/base/4/2679 new file mode 100644 index 00000000..b72f0d61 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2679 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2680 b/exercise8/expense_tracker/db-data/base/4/2680 new file mode 100644 index 00000000..e8a9ce26 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2680 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2681 b/exercise8/expense_tracker/db-data/base/4/2681 new file mode 100644 index 00000000..c990c580 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2681 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2682 b/exercise8/expense_tracker/db-data/base/4/2682 new file mode 100644 index 00000000..5748c477 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2682 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2683 b/exercise8/expense_tracker/db-data/base/4/2683 new file mode 100644 index 00000000..b1e1410c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2683 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2684 b/exercise8/expense_tracker/db-data/base/4/2684 new file mode 100644 index 00000000..c89b6b9d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2684 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2685 b/exercise8/expense_tracker/db-data/base/4/2685 new file mode 100644 index 00000000..ac1dba18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2685 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2686 b/exercise8/expense_tracker/db-data/base/4/2686 new file mode 100644 index 00000000..afdb6ecf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2686 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2687 b/exercise8/expense_tracker/db-data/base/4/2687 new file mode 100644 index 00000000..6c5d318a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2687 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2688 b/exercise8/expense_tracker/db-data/base/4/2688 new file mode 100644 index 00000000..cbd8118a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2688 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2689 b/exercise8/expense_tracker/db-data/base/4/2689 new file mode 100644 index 00000000..785afe18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2689 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2690 b/exercise8/expense_tracker/db-data/base/4/2690 new file mode 100644 index 00000000..b11bebe0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2690 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2691 b/exercise8/expense_tracker/db-data/base/4/2691 new file mode 100644 index 00000000..2f8a1137 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2691 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2692 b/exercise8/expense_tracker/db-data/base/4/2692 new file mode 100644 index 00000000..0f483752 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2692 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2693 b/exercise8/expense_tracker/db-data/base/4/2693 new file mode 100644 index 00000000..a2073c4a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2693 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2696 b/exercise8/expense_tracker/db-data/base/4/2696 new file mode 100644 index 00000000..ae8f10d7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2696 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2699 b/exercise8/expense_tracker/db-data/base/4/2699 new file mode 100644 index 00000000..250c5ff9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2699 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2701 b/exercise8/expense_tracker/db-data/base/4/2701 new file mode 100644 index 00000000..e47c5c0f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2701 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2702 b/exercise8/expense_tracker/db-data/base/4/2702 new file mode 100644 index 00000000..bd5ceedf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2702 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2703 b/exercise8/expense_tracker/db-data/base/4/2703 new file mode 100644 index 00000000..2af616ce Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2703 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2704 b/exercise8/expense_tracker/db-data/base/4/2704 new file mode 100644 index 00000000..2f3fb8a8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2704 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2753 b/exercise8/expense_tracker/db-data/base/4/2753 new file mode 100644 index 00000000..3c16dff6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2753 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2753_fsm b/exercise8/expense_tracker/db-data/base/4/2753_fsm new file mode 100644 index 00000000..642bce3b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2753_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2753_vm b/exercise8/expense_tracker/db-data/base/4/2753_vm new file mode 100644 index 00000000..1446702e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2753_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2754 b/exercise8/expense_tracker/db-data/base/4/2754 new file mode 100644 index 00000000..dff15d8e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2754 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2755 b/exercise8/expense_tracker/db-data/base/4/2755 new file mode 100644 index 00000000..4b09f639 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2755 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2756 b/exercise8/expense_tracker/db-data/base/4/2756 new file mode 100644 index 00000000..8d0e7744 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2756 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2757 b/exercise8/expense_tracker/db-data/base/4/2757 new file mode 100644 index 00000000..3df6dd2e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2757 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2830 b/exercise8/expense_tracker/db-data/base/4/2830 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/2831 b/exercise8/expense_tracker/db-data/base/4/2831 new file mode 100644 index 00000000..260051f9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2831 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2832 b/exercise8/expense_tracker/db-data/base/4/2832 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/2833 b/exercise8/expense_tracker/db-data/base/4/2833 new file mode 100644 index 00000000..d178ccac Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2833 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2834 b/exercise8/expense_tracker/db-data/base/4/2834 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/2835 b/exercise8/expense_tracker/db-data/base/4/2835 new file mode 100644 index 00000000..db2ba3a0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2835 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2836 b/exercise8/expense_tracker/db-data/base/4/2836 new file mode 100644 index 00000000..0224c41e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2836 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2836_fsm b/exercise8/expense_tracker/db-data/base/4/2836_fsm new file mode 100644 index 00000000..ed42b8e8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2836_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2836_vm b/exercise8/expense_tracker/db-data/base/4/2836_vm new file mode 100644 index 00000000..2a0e54d7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2836_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2837 b/exercise8/expense_tracker/db-data/base/4/2837 new file mode 100644 index 00000000..7b84ea0b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2837 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2838 b/exercise8/expense_tracker/db-data/base/4/2838 new file mode 100644 index 00000000..d0e4f255 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2838 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2838_fsm b/exercise8/expense_tracker/db-data/base/4/2838_fsm new file mode 100644 index 00000000..ad618337 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2838_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2838_vm b/exercise8/expense_tracker/db-data/base/4/2838_vm new file mode 100644 index 00000000..f44e1526 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2838_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2839 b/exercise8/expense_tracker/db-data/base/4/2839 new file mode 100644 index 00000000..1ef0c8e8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2839 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2840 b/exercise8/expense_tracker/db-data/base/4/2840 new file mode 100644 index 00000000..2a144dbb Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2840 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2840_fsm b/exercise8/expense_tracker/db-data/base/4/2840_fsm new file mode 100644 index 00000000..a6e901ee Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2840_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2840_vm b/exercise8/expense_tracker/db-data/base/4/2840_vm new file mode 100644 index 00000000..491cb7d6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2840_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/2841 b/exercise8/expense_tracker/db-data/base/4/2841 new file mode 100644 index 00000000..7d65a5ff Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2841 differ diff --git a/exercise8/expense_tracker/db-data/base/4/2995 b/exercise8/expense_tracker/db-data/base/4/2995 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/2996 b/exercise8/expense_tracker/db-data/base/4/2996 new file mode 100644 index 00000000..7bcbf8f6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/2996 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3079 b/exercise8/expense_tracker/db-data/base/4/3079 new file mode 100644 index 00000000..a95de50e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3079 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3079_fsm b/exercise8/expense_tracker/db-data/base/4/3079_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3079_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3079_vm b/exercise8/expense_tracker/db-data/base/4/3079_vm new file mode 100644 index 00000000..2009e665 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3079_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3080 b/exercise8/expense_tracker/db-data/base/4/3080 new file mode 100644 index 00000000..b3373f25 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3080 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3081 b/exercise8/expense_tracker/db-data/base/4/3081 new file mode 100644 index 00000000..1313ba44 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3081 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3085 b/exercise8/expense_tracker/db-data/base/4/3085 new file mode 100644 index 00000000..95b3694e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3085 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3118 b/exercise8/expense_tracker/db-data/base/4/3118 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3119 b/exercise8/expense_tracker/db-data/base/4/3119 new file mode 100644 index 00000000..059d8b65 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3119 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3164 b/exercise8/expense_tracker/db-data/base/4/3164 new file mode 100644 index 00000000..482529bf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3164 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3256 b/exercise8/expense_tracker/db-data/base/4/3256 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3257 b/exercise8/expense_tracker/db-data/base/4/3257 new file mode 100644 index 00000000..fbf5bbec Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3257 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3258 b/exercise8/expense_tracker/db-data/base/4/3258 new file mode 100644 index 00000000..e6ea9ced Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3258 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3350 b/exercise8/expense_tracker/db-data/base/4/3350 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3351 b/exercise8/expense_tracker/db-data/base/4/3351 new file mode 100644 index 00000000..afd5efa0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3351 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3379 b/exercise8/expense_tracker/db-data/base/4/3379 new file mode 100644 index 00000000..faaee394 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3379 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3380 b/exercise8/expense_tracker/db-data/base/4/3380 new file mode 100644 index 00000000..01e9984f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3380 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3381 b/exercise8/expense_tracker/db-data/base/4/3381 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3394 b/exercise8/expense_tracker/db-data/base/4/3394 new file mode 100644 index 00000000..1c3378a9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3394 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3394_fsm b/exercise8/expense_tracker/db-data/base/4/3394_fsm new file mode 100644 index 00000000..ffa86444 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3394_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3394_vm b/exercise8/expense_tracker/db-data/base/4/3394_vm new file mode 100644 index 00000000..f9fcb92d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3394_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3395 b/exercise8/expense_tracker/db-data/base/4/3395 new file mode 100644 index 00000000..90877bc4 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3395 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3429 b/exercise8/expense_tracker/db-data/base/4/3429 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3430 b/exercise8/expense_tracker/db-data/base/4/3430 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3431 b/exercise8/expense_tracker/db-data/base/4/3431 new file mode 100644 index 00000000..13c10cb2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3431 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3433 b/exercise8/expense_tracker/db-data/base/4/3433 new file mode 100644 index 00000000..ffe926f6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3433 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3439 b/exercise8/expense_tracker/db-data/base/4/3439 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3440 b/exercise8/expense_tracker/db-data/base/4/3440 new file mode 100644 index 00000000..cfae4dfc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3440 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3455 b/exercise8/expense_tracker/db-data/base/4/3455 new file mode 100644 index 00000000..a44ef250 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3455 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3456 b/exercise8/expense_tracker/db-data/base/4/3456 new file mode 100644 index 00000000..d83738d9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3456 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3456_fsm b/exercise8/expense_tracker/db-data/base/4/3456_fsm new file mode 100644 index 00000000..51cf9b86 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3456_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3456_vm b/exercise8/expense_tracker/db-data/base/4/3456_vm new file mode 100644 index 00000000..f10831e6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3456_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3466 b/exercise8/expense_tracker/db-data/base/4/3466 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3467 b/exercise8/expense_tracker/db-data/base/4/3467 new file mode 100644 index 00000000..6344b94f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3467 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3468 b/exercise8/expense_tracker/db-data/base/4/3468 new file mode 100644 index 00000000..6a2b6b18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3468 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3501 b/exercise8/expense_tracker/db-data/base/4/3501 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3502 b/exercise8/expense_tracker/db-data/base/4/3502 new file mode 100644 index 00000000..eb0b32aa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3502 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3503 b/exercise8/expense_tracker/db-data/base/4/3503 new file mode 100644 index 00000000..32a30555 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3503 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3534 b/exercise8/expense_tracker/db-data/base/4/3534 new file mode 100644 index 00000000..7676fd82 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3534 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3541 b/exercise8/expense_tracker/db-data/base/4/3541 new file mode 100644 index 00000000..40869ad3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3541 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3541_fsm b/exercise8/expense_tracker/db-data/base/4/3541_fsm new file mode 100644 index 00000000..a3a2de4d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3541_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3541_vm b/exercise8/expense_tracker/db-data/base/4/3541_vm new file mode 100644 index 00000000..58c700c3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3541_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3542 b/exercise8/expense_tracker/db-data/base/4/3542 new file mode 100644 index 00000000..bb83580a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3542 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3574 b/exercise8/expense_tracker/db-data/base/4/3574 new file mode 100644 index 00000000..b026df10 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3574 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3575 b/exercise8/expense_tracker/db-data/base/4/3575 new file mode 100644 index 00000000..bdec5326 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3575 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3576 b/exercise8/expense_tracker/db-data/base/4/3576 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3596 b/exercise8/expense_tracker/db-data/base/4/3596 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3597 b/exercise8/expense_tracker/db-data/base/4/3597 new file mode 100644 index 00000000..8963738c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3597 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3598 b/exercise8/expense_tracker/db-data/base/4/3598 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/3599 b/exercise8/expense_tracker/db-data/base/4/3599 new file mode 100644 index 00000000..67582c2b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3599 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3600 b/exercise8/expense_tracker/db-data/base/4/3600 new file mode 100644 index 00000000..b7e061d3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3600 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3600_fsm b/exercise8/expense_tracker/db-data/base/4/3600_fsm new file mode 100644 index 00000000..cebec199 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3600_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3600_vm b/exercise8/expense_tracker/db-data/base/4/3600_vm new file mode 100644 index 00000000..13678275 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3600_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3601 b/exercise8/expense_tracker/db-data/base/4/3601 new file mode 100644 index 00000000..04c846ec Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3601 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3601_fsm b/exercise8/expense_tracker/db-data/base/4/3601_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3601_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3601_vm b/exercise8/expense_tracker/db-data/base/4/3601_vm new file mode 100644 index 00000000..880269df Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3601_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3602 b/exercise8/expense_tracker/db-data/base/4/3602 new file mode 100644 index 00000000..71bfd4ff Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3602 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3602_fsm b/exercise8/expense_tracker/db-data/base/4/3602_fsm new file mode 100644 index 00000000..d7897de2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3602_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3602_vm b/exercise8/expense_tracker/db-data/base/4/3602_vm new file mode 100644 index 00000000..6069ce67 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3602_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3603 b/exercise8/expense_tracker/db-data/base/4/3603 new file mode 100644 index 00000000..3731bfd7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3603 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3603_fsm b/exercise8/expense_tracker/db-data/base/4/3603_fsm new file mode 100644 index 00000000..c28dd4fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3603_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3603_vm b/exercise8/expense_tracker/db-data/base/4/3603_vm new file mode 100644 index 00000000..039a496f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3603_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3604 b/exercise8/expense_tracker/db-data/base/4/3604 new file mode 100644 index 00000000..071d6cf2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3604 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3605 b/exercise8/expense_tracker/db-data/base/4/3605 new file mode 100644 index 00000000..29fc4f3d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3605 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3606 b/exercise8/expense_tracker/db-data/base/4/3606 new file mode 100644 index 00000000..698e6d09 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3606 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3607 b/exercise8/expense_tracker/db-data/base/4/3607 new file mode 100644 index 00000000..1d023e00 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3607 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3608 b/exercise8/expense_tracker/db-data/base/4/3608 new file mode 100644 index 00000000..83911eb3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3608 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3609 b/exercise8/expense_tracker/db-data/base/4/3609 new file mode 100644 index 00000000..2f4fc84e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3609 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3712 b/exercise8/expense_tracker/db-data/base/4/3712 new file mode 100644 index 00000000..02f33030 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3712 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3764 b/exercise8/expense_tracker/db-data/base/4/3764 new file mode 100644 index 00000000..c99948f5 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3764 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3764_fsm b/exercise8/expense_tracker/db-data/base/4/3764_fsm new file mode 100644 index 00000000..f64db4df Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3764_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3764_vm b/exercise8/expense_tracker/db-data/base/4/3764_vm new file mode 100644 index 00000000..d25e1e15 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3764_vm differ diff --git a/exercise8/expense_tracker/db-data/base/4/3766 b/exercise8/expense_tracker/db-data/base/4/3766 new file mode 100644 index 00000000..5038b6e3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3766 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3767 b/exercise8/expense_tracker/db-data/base/4/3767 new file mode 100644 index 00000000..3c89a3cb Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3767 differ diff --git a/exercise8/expense_tracker/db-data/base/4/3997 b/exercise8/expense_tracker/db-data/base/4/3997 new file mode 100644 index 00000000..46564a34 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/3997 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4143 b/exercise8/expense_tracker/db-data/base/4/4143 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4144 b/exercise8/expense_tracker/db-data/base/4/4144 new file mode 100644 index 00000000..64af7645 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4144 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4145 b/exercise8/expense_tracker/db-data/base/4/4145 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4146 b/exercise8/expense_tracker/db-data/base/4/4146 new file mode 100644 index 00000000..1f029ea4 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4146 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4147 b/exercise8/expense_tracker/db-data/base/4/4147 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4148 b/exercise8/expense_tracker/db-data/base/4/4148 new file mode 100644 index 00000000..5959a958 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4148 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4149 b/exercise8/expense_tracker/db-data/base/4/4149 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4150 b/exercise8/expense_tracker/db-data/base/4/4150 new file mode 100644 index 00000000..5e11d49b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4150 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4151 b/exercise8/expense_tracker/db-data/base/4/4151 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4152 b/exercise8/expense_tracker/db-data/base/4/4152 new file mode 100644 index 00000000..8acd468c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4152 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4153 b/exercise8/expense_tracker/db-data/base/4/4153 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4154 b/exercise8/expense_tracker/db-data/base/4/4154 new file mode 100644 index 00000000..e597f616 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4154 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4155 b/exercise8/expense_tracker/db-data/base/4/4155 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4156 b/exercise8/expense_tracker/db-data/base/4/4156 new file mode 100644 index 00000000..d653113c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4156 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4157 b/exercise8/expense_tracker/db-data/base/4/4157 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4158 b/exercise8/expense_tracker/db-data/base/4/4158 new file mode 100644 index 00000000..355910cc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4158 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4159 b/exercise8/expense_tracker/db-data/base/4/4159 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4160 b/exercise8/expense_tracker/db-data/base/4/4160 new file mode 100644 index 00000000..7d09bfa7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4160 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4163 b/exercise8/expense_tracker/db-data/base/4/4163 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4164 b/exercise8/expense_tracker/db-data/base/4/4164 new file mode 100644 index 00000000..97adb952 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4164 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4165 b/exercise8/expense_tracker/db-data/base/4/4165 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4166 b/exercise8/expense_tracker/db-data/base/4/4166 new file mode 100644 index 00000000..c0e3e5b6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4166 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4167 b/exercise8/expense_tracker/db-data/base/4/4167 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4168 b/exercise8/expense_tracker/db-data/base/4/4168 new file mode 100644 index 00000000..ddcb5604 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4168 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4169 b/exercise8/expense_tracker/db-data/base/4/4169 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4170 b/exercise8/expense_tracker/db-data/base/4/4170 new file mode 100644 index 00000000..5812a8ec Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4170 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4171 b/exercise8/expense_tracker/db-data/base/4/4171 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4172 b/exercise8/expense_tracker/db-data/base/4/4172 new file mode 100644 index 00000000..84c04d60 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4172 differ diff --git a/exercise8/expense_tracker/db-data/base/4/4173 b/exercise8/expense_tracker/db-data/base/4/4173 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/4174 b/exercise8/expense_tracker/db-data/base/4/4174 new file mode 100644 index 00000000..9b12becd Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/4174 differ diff --git a/exercise8/expense_tracker/db-data/base/4/5002 b/exercise8/expense_tracker/db-data/base/4/5002 new file mode 100644 index 00000000..aefa40dd Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/5002 differ diff --git a/exercise8/expense_tracker/db-data/base/4/548 b/exercise8/expense_tracker/db-data/base/4/548 new file mode 100644 index 00000000..64fdefd5 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/548 differ diff --git a/exercise8/expense_tracker/db-data/base/4/549 b/exercise8/expense_tracker/db-data/base/4/549 new file mode 100644 index 00000000..3734cc2b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/549 differ diff --git a/exercise8/expense_tracker/db-data/base/4/6102 b/exercise8/expense_tracker/db-data/base/4/6102 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/6104 b/exercise8/expense_tracker/db-data/base/4/6104 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/6106 b/exercise8/expense_tracker/db-data/base/4/6106 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/6110 b/exercise8/expense_tracker/db-data/base/4/6110 new file mode 100644 index 00000000..42e19200 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/6110 differ diff --git a/exercise8/expense_tracker/db-data/base/4/6111 b/exercise8/expense_tracker/db-data/base/4/6111 new file mode 100644 index 00000000..d012727d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/6111 differ diff --git a/exercise8/expense_tracker/db-data/base/4/6112 b/exercise8/expense_tracker/db-data/base/4/6112 new file mode 100644 index 00000000..293367c2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/6112 differ diff --git a/exercise8/expense_tracker/db-data/base/4/6113 b/exercise8/expense_tracker/db-data/base/4/6113 new file mode 100644 index 00000000..542f8faa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/6113 differ diff --git a/exercise8/expense_tracker/db-data/base/4/6116 b/exercise8/expense_tracker/db-data/base/4/6116 new file mode 100644 index 00000000..787d5d18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/6116 differ diff --git a/exercise8/expense_tracker/db-data/base/4/6117 b/exercise8/expense_tracker/db-data/base/4/6117 new file mode 100644 index 00000000..2b5656b2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/6117 differ diff --git a/exercise8/expense_tracker/db-data/base/4/6175 b/exercise8/expense_tracker/db-data/base/4/6175 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/6176 b/exercise8/expense_tracker/db-data/base/4/6176 new file mode 100644 index 00000000..6e5bcd62 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/6176 differ diff --git a/exercise8/expense_tracker/db-data/base/4/6228 b/exercise8/expense_tracker/db-data/base/4/6228 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/6229 b/exercise8/expense_tracker/db-data/base/4/6229 new file mode 100644 index 00000000..fae8f445 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/6229 differ diff --git a/exercise8/expense_tracker/db-data/base/4/6237 b/exercise8/expense_tracker/db-data/base/4/6237 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/6238 b/exercise8/expense_tracker/db-data/base/4/6238 new file mode 100644 index 00000000..e7c0e8c3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/6238 differ diff --git a/exercise8/expense_tracker/db-data/base/4/6239 b/exercise8/expense_tracker/db-data/base/4/6239 new file mode 100644 index 00000000..6c60b507 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/6239 differ diff --git a/exercise8/expense_tracker/db-data/base/4/826 b/exercise8/expense_tracker/db-data/base/4/826 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/4/827 b/exercise8/expense_tracker/db-data/base/4/827 new file mode 100644 index 00000000..f102efd8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/827 differ diff --git a/exercise8/expense_tracker/db-data/base/4/828 b/exercise8/expense_tracker/db-data/base/4/828 new file mode 100644 index 00000000..e97c210f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/828 differ diff --git a/exercise8/expense_tracker/db-data/base/4/PG_VERSION b/exercise8/expense_tracker/db-data/base/4/PG_VERSION new file mode 100644 index 00000000..98d9bcb7 --- /dev/null +++ b/exercise8/expense_tracker/db-data/base/4/PG_VERSION @@ -0,0 +1 @@ +17 diff --git a/exercise8/expense_tracker/db-data/base/4/pg_filenode.map b/exercise8/expense_tracker/db-data/base/4/pg_filenode.map new file mode 100644 index 00000000..4fc801aa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/4/pg_filenode.map differ diff --git a/exercise8/expense_tracker/db-data/base/5/112 b/exercise8/expense_tracker/db-data/base/5/112 new file mode 100644 index 00000000..9531ca83 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/112 differ diff --git a/exercise8/expense_tracker/db-data/base/5/113 b/exercise8/expense_tracker/db-data/base/5/113 new file mode 100644 index 00000000..f92630d0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/113 differ diff --git a/exercise8/expense_tracker/db-data/base/5/1247 b/exercise8/expense_tracker/db-data/base/5/1247 new file mode 100644 index 00000000..24e62bc8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1247 differ diff --git a/exercise8/expense_tracker/db-data/base/5/1247_fsm b/exercise8/expense_tracker/db-data/base/5/1247_fsm new file mode 100644 index 00000000..fd573083 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1247_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/1247_vm b/exercise8/expense_tracker/db-data/base/5/1247_vm new file mode 100644 index 00000000..e8c71202 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1247_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/1249 b/exercise8/expense_tracker/db-data/base/5/1249 new file mode 100644 index 00000000..d6c2bf7b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1249 differ diff --git a/exercise8/expense_tracker/db-data/base/5/1249_fsm b/exercise8/expense_tracker/db-data/base/5/1249_fsm new file mode 100644 index 00000000..e0ed4b02 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1249_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/1249_vm b/exercise8/expense_tracker/db-data/base/5/1249_vm new file mode 100644 index 00000000..a4f59d2d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1249_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/1255 b/exercise8/expense_tracker/db-data/base/5/1255 new file mode 100644 index 00000000..ed997c22 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1255 differ diff --git a/exercise8/expense_tracker/db-data/base/5/1255_fsm b/exercise8/expense_tracker/db-data/base/5/1255_fsm new file mode 100644 index 00000000..062bfc5b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1255_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/1255_vm b/exercise8/expense_tracker/db-data/base/5/1255_vm new file mode 100644 index 00000000..cec907b3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1255_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/1259 b/exercise8/expense_tracker/db-data/base/5/1259 new file mode 100644 index 00000000..232adca0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1259 differ diff --git a/exercise8/expense_tracker/db-data/base/5/1259_fsm b/exercise8/expense_tracker/db-data/base/5/1259_fsm new file mode 100644 index 00000000..2077a7b0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1259_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/1259_vm b/exercise8/expense_tracker/db-data/base/5/1259_vm new file mode 100644 index 00000000..7e0efae1 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/1259_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/13402 b/exercise8/expense_tracker/db-data/base/5/13402 new file mode 100644 index 00000000..8bfa8dcc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13402 differ diff --git a/exercise8/expense_tracker/db-data/base/5/13402_fsm b/exercise8/expense_tracker/db-data/base/5/13402_fsm new file mode 100644 index 00000000..45338f1e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13402_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/13402_vm b/exercise8/expense_tracker/db-data/base/5/13402_vm new file mode 100644 index 00000000..87121d20 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13402_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/13405 b/exercise8/expense_tracker/db-data/base/5/13405 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/13406 b/exercise8/expense_tracker/db-data/base/5/13406 new file mode 100644 index 00000000..47293b34 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13406 differ diff --git a/exercise8/expense_tracker/db-data/base/5/13407 b/exercise8/expense_tracker/db-data/base/5/13407 new file mode 100644 index 00000000..54bfaadf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13407 differ diff --git a/exercise8/expense_tracker/db-data/base/5/13407_fsm b/exercise8/expense_tracker/db-data/base/5/13407_fsm new file mode 100644 index 00000000..ce7c26eb Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13407_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/13407_vm b/exercise8/expense_tracker/db-data/base/5/13407_vm new file mode 100644 index 00000000..ba950a17 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13407_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/13410 b/exercise8/expense_tracker/db-data/base/5/13410 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/13411 b/exercise8/expense_tracker/db-data/base/5/13411 new file mode 100644 index 00000000..e65be154 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13411 differ diff --git a/exercise8/expense_tracker/db-data/base/5/13412 b/exercise8/expense_tracker/db-data/base/5/13412 new file mode 100644 index 00000000..6411bb48 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13412 differ diff --git a/exercise8/expense_tracker/db-data/base/5/13412_fsm b/exercise8/expense_tracker/db-data/base/5/13412_fsm new file mode 100644 index 00000000..0673adae Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13412_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/13412_vm b/exercise8/expense_tracker/db-data/base/5/13412_vm new file mode 100644 index 00000000..c4c7fdc8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13412_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/13415 b/exercise8/expense_tracker/db-data/base/5/13415 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/13416 b/exercise8/expense_tracker/db-data/base/5/13416 new file mode 100644 index 00000000..6e8d2290 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13416 differ diff --git a/exercise8/expense_tracker/db-data/base/5/13417 b/exercise8/expense_tracker/db-data/base/5/13417 new file mode 100644 index 00000000..7c69150a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13417 differ diff --git a/exercise8/expense_tracker/db-data/base/5/13417_fsm b/exercise8/expense_tracker/db-data/base/5/13417_fsm new file mode 100644 index 00000000..a836ddf7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13417_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/13417_vm b/exercise8/expense_tracker/db-data/base/5/13417_vm new file mode 100644 index 00000000..a58cb1a0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13417_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/13420 b/exercise8/expense_tracker/db-data/base/5/13420 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/13421 b/exercise8/expense_tracker/db-data/base/5/13421 new file mode 100644 index 00000000..e28c6a50 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/13421 differ diff --git a/exercise8/expense_tracker/db-data/base/5/1417 b/exercise8/expense_tracker/db-data/base/5/1417 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/1418 b/exercise8/expense_tracker/db-data/base/5/1418 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/174 b/exercise8/expense_tracker/db-data/base/5/174 new file mode 100644 index 00000000..4f4d8bed Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/174 differ diff --git a/exercise8/expense_tracker/db-data/base/5/175 b/exercise8/expense_tracker/db-data/base/5/175 new file mode 100644 index 00000000..98fd8de8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/175 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2187 b/exercise8/expense_tracker/db-data/base/5/2187 new file mode 100644 index 00000000..d2cd30b2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2187 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2224 b/exercise8/expense_tracker/db-data/base/5/2224 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/2228 b/exercise8/expense_tracker/db-data/base/5/2228 new file mode 100644 index 00000000..bfecf011 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2228 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2328 b/exercise8/expense_tracker/db-data/base/5/2328 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/2336 b/exercise8/expense_tracker/db-data/base/5/2336 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/2337 b/exercise8/expense_tracker/db-data/base/5/2337 new file mode 100644 index 00000000..2c0b13d8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2337 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2579 b/exercise8/expense_tracker/db-data/base/5/2579 new file mode 100644 index 00000000..554a78f2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2579 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2600 b/exercise8/expense_tracker/db-data/base/5/2600 new file mode 100644 index 00000000..9dfd1a85 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2600 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2600_fsm b/exercise8/expense_tracker/db-data/base/5/2600_fsm new file mode 100644 index 00000000..c542a78b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2600_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2600_vm b/exercise8/expense_tracker/db-data/base/5/2600_vm new file mode 100644 index 00000000..47e56406 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2600_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2601 b/exercise8/expense_tracker/db-data/base/5/2601 new file mode 100644 index 00000000..d8001c8c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2601 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2601_fsm b/exercise8/expense_tracker/db-data/base/5/2601_fsm new file mode 100644 index 00000000..d388044f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2601_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2601_vm b/exercise8/expense_tracker/db-data/base/5/2601_vm new file mode 100644 index 00000000..c194869b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2601_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2602 b/exercise8/expense_tracker/db-data/base/5/2602 new file mode 100644 index 00000000..4a27b0a3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2602 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2602_fsm b/exercise8/expense_tracker/db-data/base/5/2602_fsm new file mode 100644 index 00000000..23170d85 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2602_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2602_vm b/exercise8/expense_tracker/db-data/base/5/2602_vm new file mode 100644 index 00000000..0ff39d79 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2602_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2603 b/exercise8/expense_tracker/db-data/base/5/2603 new file mode 100644 index 00000000..d511af56 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2603 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2603_fsm b/exercise8/expense_tracker/db-data/base/5/2603_fsm new file mode 100644 index 00000000..949bd18f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2603_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2603_vm b/exercise8/expense_tracker/db-data/base/5/2603_vm new file mode 100644 index 00000000..8c7cf0d1 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2603_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2604 b/exercise8/expense_tracker/db-data/base/5/2604 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/2605 b/exercise8/expense_tracker/db-data/base/5/2605 new file mode 100644 index 00000000..eeaa7eaa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2605 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2605_fsm b/exercise8/expense_tracker/db-data/base/5/2605_fsm new file mode 100644 index 00000000..f3b92bf7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2605_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2605_vm b/exercise8/expense_tracker/db-data/base/5/2605_vm new file mode 100644 index 00000000..3d97577b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2605_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2606 b/exercise8/expense_tracker/db-data/base/5/2606 new file mode 100644 index 00000000..c274f6fb Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2606 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2606_fsm b/exercise8/expense_tracker/db-data/base/5/2606_fsm new file mode 100644 index 00000000..267454e7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2606_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2606_vm b/exercise8/expense_tracker/db-data/base/5/2606_vm new file mode 100644 index 00000000..4ed61a90 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2606_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2607 b/exercise8/expense_tracker/db-data/base/5/2607 new file mode 100644 index 00000000..bfad49ae Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2607 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2607_fsm b/exercise8/expense_tracker/db-data/base/5/2607_fsm new file mode 100644 index 00000000..80ac8b14 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2607_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2607_vm b/exercise8/expense_tracker/db-data/base/5/2607_vm new file mode 100644 index 00000000..15b1a6fe Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2607_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2608 b/exercise8/expense_tracker/db-data/base/5/2608 new file mode 100644 index 00000000..5972a106 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2608 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2608_fsm b/exercise8/expense_tracker/db-data/base/5/2608_fsm new file mode 100644 index 00000000..4b197851 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2608_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2608_vm b/exercise8/expense_tracker/db-data/base/5/2608_vm new file mode 100644 index 00000000..c7731d82 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2608_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2609 b/exercise8/expense_tracker/db-data/base/5/2609 new file mode 100644 index 00000000..2d3398b8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2609 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2609_fsm b/exercise8/expense_tracker/db-data/base/5/2609_fsm new file mode 100644 index 00000000..fc288908 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2609_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2609_vm b/exercise8/expense_tracker/db-data/base/5/2609_vm new file mode 100644 index 00000000..aef2091b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2609_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2610 b/exercise8/expense_tracker/db-data/base/5/2610 new file mode 100644 index 00000000..0b97f72a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2610 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2610_fsm b/exercise8/expense_tracker/db-data/base/5/2610_fsm new file mode 100644 index 00000000..ecbcb5fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2610_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2610_vm b/exercise8/expense_tracker/db-data/base/5/2610_vm new file mode 100644 index 00000000..b2606d12 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2610_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2611 b/exercise8/expense_tracker/db-data/base/5/2611 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/2612 b/exercise8/expense_tracker/db-data/base/5/2612 new file mode 100644 index 00000000..0bb854fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2612 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2612_fsm b/exercise8/expense_tracker/db-data/base/5/2612_fsm new file mode 100644 index 00000000..877976ac Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2612_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2612_vm b/exercise8/expense_tracker/db-data/base/5/2612_vm new file mode 100644 index 00000000..de02c150 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2612_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2613 b/exercise8/expense_tracker/db-data/base/5/2613 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/2615 b/exercise8/expense_tracker/db-data/base/5/2615 new file mode 100644 index 00000000..e831e3ef Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2615 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2615_fsm b/exercise8/expense_tracker/db-data/base/5/2615_fsm new file mode 100644 index 00000000..d041693e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2615_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2615_vm b/exercise8/expense_tracker/db-data/base/5/2615_vm new file mode 100644 index 00000000..5ea94969 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2615_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2616 b/exercise8/expense_tracker/db-data/base/5/2616 new file mode 100644 index 00000000..0d60d797 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2616 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2616_fsm b/exercise8/expense_tracker/db-data/base/5/2616_fsm new file mode 100644 index 00000000..cb924c95 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2616_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2616_vm b/exercise8/expense_tracker/db-data/base/5/2616_vm new file mode 100644 index 00000000..d63a1533 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2616_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2617 b/exercise8/expense_tracker/db-data/base/5/2617 new file mode 100644 index 00000000..bcdfc183 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2617 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2617_fsm b/exercise8/expense_tracker/db-data/base/5/2617_fsm new file mode 100644 index 00000000..29d60666 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2617_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2617_vm b/exercise8/expense_tracker/db-data/base/5/2617_vm new file mode 100644 index 00000000..d15ecdb3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2617_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2618 b/exercise8/expense_tracker/db-data/base/5/2618 new file mode 100644 index 00000000..f5ecbea9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2618 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2618_fsm b/exercise8/expense_tracker/db-data/base/5/2618_fsm new file mode 100644 index 00000000..6cf107fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2618_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2618_vm b/exercise8/expense_tracker/db-data/base/5/2618_vm new file mode 100644 index 00000000..18e1b6e0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2618_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2619 b/exercise8/expense_tracker/db-data/base/5/2619 new file mode 100644 index 00000000..c93accb8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2619 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2619_fsm b/exercise8/expense_tracker/db-data/base/5/2619_fsm new file mode 100644 index 00000000..1067ef16 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2619_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2619_vm b/exercise8/expense_tracker/db-data/base/5/2619_vm new file mode 100644 index 00000000..0ff1293e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2619_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2620 b/exercise8/expense_tracker/db-data/base/5/2620 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/2650 b/exercise8/expense_tracker/db-data/base/5/2650 new file mode 100644 index 00000000..042d7616 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2650 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2651 b/exercise8/expense_tracker/db-data/base/5/2651 new file mode 100644 index 00000000..35590f4d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2651 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2652 b/exercise8/expense_tracker/db-data/base/5/2652 new file mode 100644 index 00000000..adf7b05b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2652 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2653 b/exercise8/expense_tracker/db-data/base/5/2653 new file mode 100644 index 00000000..7ef9b490 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2653 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2654 b/exercise8/expense_tracker/db-data/base/5/2654 new file mode 100644 index 00000000..e4e182f8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2654 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2655 b/exercise8/expense_tracker/db-data/base/5/2655 new file mode 100644 index 00000000..0a0d5658 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2655 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2656 b/exercise8/expense_tracker/db-data/base/5/2656 new file mode 100644 index 00000000..8507f4c6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2656 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2657 b/exercise8/expense_tracker/db-data/base/5/2657 new file mode 100644 index 00000000..f62a61d3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2657 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2658 b/exercise8/expense_tracker/db-data/base/5/2658 new file mode 100644 index 00000000..41e0d33c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2658 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2659 b/exercise8/expense_tracker/db-data/base/5/2659 new file mode 100644 index 00000000..c5752ecc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2659 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2660 b/exercise8/expense_tracker/db-data/base/5/2660 new file mode 100644 index 00000000..8a832117 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2660 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2661 b/exercise8/expense_tracker/db-data/base/5/2661 new file mode 100644 index 00000000..17613f7e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2661 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2662 b/exercise8/expense_tracker/db-data/base/5/2662 new file mode 100644 index 00000000..d174749c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2662 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2663 b/exercise8/expense_tracker/db-data/base/5/2663 new file mode 100644 index 00000000..29dc7e26 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2663 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2664 b/exercise8/expense_tracker/db-data/base/5/2664 new file mode 100644 index 00000000..c5c94598 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2664 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2665 b/exercise8/expense_tracker/db-data/base/5/2665 new file mode 100644 index 00000000..c248dd89 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2665 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2666 b/exercise8/expense_tracker/db-data/base/5/2666 new file mode 100644 index 00000000..87e0eabe Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2666 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2667 b/exercise8/expense_tracker/db-data/base/5/2667 new file mode 100644 index 00000000..617dc1ce Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2667 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2668 b/exercise8/expense_tracker/db-data/base/5/2668 new file mode 100644 index 00000000..5fd6734e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2668 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2669 b/exercise8/expense_tracker/db-data/base/5/2669 new file mode 100644 index 00000000..659c1e85 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2669 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2670 b/exercise8/expense_tracker/db-data/base/5/2670 new file mode 100644 index 00000000..affe09d7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2670 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2673 b/exercise8/expense_tracker/db-data/base/5/2673 new file mode 100644 index 00000000..3175ec78 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2673 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2674 b/exercise8/expense_tracker/db-data/base/5/2674 new file mode 100644 index 00000000..2cc80e78 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2674 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2675 b/exercise8/expense_tracker/db-data/base/5/2675 new file mode 100644 index 00000000..d2635c23 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2675 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2678 b/exercise8/expense_tracker/db-data/base/5/2678 new file mode 100644 index 00000000..e02c161e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2678 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2679 b/exercise8/expense_tracker/db-data/base/5/2679 new file mode 100644 index 00000000..b72f0d61 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2679 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2680 b/exercise8/expense_tracker/db-data/base/5/2680 new file mode 100644 index 00000000..e8a9ce26 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2680 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2681 b/exercise8/expense_tracker/db-data/base/5/2681 new file mode 100644 index 00000000..c990c580 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2681 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2682 b/exercise8/expense_tracker/db-data/base/5/2682 new file mode 100644 index 00000000..5748c477 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2682 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2683 b/exercise8/expense_tracker/db-data/base/5/2683 new file mode 100644 index 00000000..b1e1410c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2683 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2684 b/exercise8/expense_tracker/db-data/base/5/2684 new file mode 100644 index 00000000..c89b6b9d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2684 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2685 b/exercise8/expense_tracker/db-data/base/5/2685 new file mode 100644 index 00000000..ac1dba18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2685 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2686 b/exercise8/expense_tracker/db-data/base/5/2686 new file mode 100644 index 00000000..afdb6ecf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2686 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2687 b/exercise8/expense_tracker/db-data/base/5/2687 new file mode 100644 index 00000000..6c5d318a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2687 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2688 b/exercise8/expense_tracker/db-data/base/5/2688 new file mode 100644 index 00000000..cbd8118a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2688 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2689 b/exercise8/expense_tracker/db-data/base/5/2689 new file mode 100644 index 00000000..785afe18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2689 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2690 b/exercise8/expense_tracker/db-data/base/5/2690 new file mode 100644 index 00000000..b11bebe0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2690 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2691 b/exercise8/expense_tracker/db-data/base/5/2691 new file mode 100644 index 00000000..2f8a1137 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2691 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2692 b/exercise8/expense_tracker/db-data/base/5/2692 new file mode 100644 index 00000000..0f483752 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2692 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2693 b/exercise8/expense_tracker/db-data/base/5/2693 new file mode 100644 index 00000000..a2073c4a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2693 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2696 b/exercise8/expense_tracker/db-data/base/5/2696 new file mode 100644 index 00000000..ae8f10d7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2696 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2699 b/exercise8/expense_tracker/db-data/base/5/2699 new file mode 100644 index 00000000..250c5ff9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2699 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2701 b/exercise8/expense_tracker/db-data/base/5/2701 new file mode 100644 index 00000000..e47c5c0f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2701 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2702 b/exercise8/expense_tracker/db-data/base/5/2702 new file mode 100644 index 00000000..bd5ceedf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2702 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2703 b/exercise8/expense_tracker/db-data/base/5/2703 new file mode 100644 index 00000000..2af616ce Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2703 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2704 b/exercise8/expense_tracker/db-data/base/5/2704 new file mode 100644 index 00000000..2f3fb8a8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2704 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2753 b/exercise8/expense_tracker/db-data/base/5/2753 new file mode 100644 index 00000000..3c16dff6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2753 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2753_fsm b/exercise8/expense_tracker/db-data/base/5/2753_fsm new file mode 100644 index 00000000..642bce3b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2753_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2753_vm b/exercise8/expense_tracker/db-data/base/5/2753_vm new file mode 100644 index 00000000..1446702e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2753_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2754 b/exercise8/expense_tracker/db-data/base/5/2754 new file mode 100644 index 00000000..dff15d8e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2754 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2755 b/exercise8/expense_tracker/db-data/base/5/2755 new file mode 100644 index 00000000..4b09f639 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2755 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2756 b/exercise8/expense_tracker/db-data/base/5/2756 new file mode 100644 index 00000000..8d0e7744 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2756 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2757 b/exercise8/expense_tracker/db-data/base/5/2757 new file mode 100644 index 00000000..3df6dd2e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2757 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2830 b/exercise8/expense_tracker/db-data/base/5/2830 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/2831 b/exercise8/expense_tracker/db-data/base/5/2831 new file mode 100644 index 00000000..260051f9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2831 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2832 b/exercise8/expense_tracker/db-data/base/5/2832 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/2833 b/exercise8/expense_tracker/db-data/base/5/2833 new file mode 100644 index 00000000..d178ccac Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2833 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2834 b/exercise8/expense_tracker/db-data/base/5/2834 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/2835 b/exercise8/expense_tracker/db-data/base/5/2835 new file mode 100644 index 00000000..db2ba3a0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2835 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2836 b/exercise8/expense_tracker/db-data/base/5/2836 new file mode 100644 index 00000000..0224c41e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2836 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2836_fsm b/exercise8/expense_tracker/db-data/base/5/2836_fsm new file mode 100644 index 00000000..ed42b8e8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2836_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2836_vm b/exercise8/expense_tracker/db-data/base/5/2836_vm new file mode 100644 index 00000000..2a0e54d7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2836_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2837 b/exercise8/expense_tracker/db-data/base/5/2837 new file mode 100644 index 00000000..7b84ea0b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2837 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2838 b/exercise8/expense_tracker/db-data/base/5/2838 new file mode 100644 index 00000000..d0e4f255 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2838 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2838_fsm b/exercise8/expense_tracker/db-data/base/5/2838_fsm new file mode 100644 index 00000000..ad618337 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2838_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2838_vm b/exercise8/expense_tracker/db-data/base/5/2838_vm new file mode 100644 index 00000000..f44e1526 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2838_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2839 b/exercise8/expense_tracker/db-data/base/5/2839 new file mode 100644 index 00000000..1ef0c8e8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2839 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2840 b/exercise8/expense_tracker/db-data/base/5/2840 new file mode 100644 index 00000000..2a144dbb Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2840 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2840_fsm b/exercise8/expense_tracker/db-data/base/5/2840_fsm new file mode 100644 index 00000000..a6e901ee Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2840_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2840_vm b/exercise8/expense_tracker/db-data/base/5/2840_vm new file mode 100644 index 00000000..491cb7d6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2840_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/2841 b/exercise8/expense_tracker/db-data/base/5/2841 new file mode 100644 index 00000000..7d65a5ff Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2841 differ diff --git a/exercise8/expense_tracker/db-data/base/5/2995 b/exercise8/expense_tracker/db-data/base/5/2995 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/2996 b/exercise8/expense_tracker/db-data/base/5/2996 new file mode 100644 index 00000000..7bcbf8f6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/2996 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3079 b/exercise8/expense_tracker/db-data/base/5/3079 new file mode 100644 index 00000000..a95de50e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3079 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3079_fsm b/exercise8/expense_tracker/db-data/base/5/3079_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3079_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3079_vm b/exercise8/expense_tracker/db-data/base/5/3079_vm new file mode 100644 index 00000000..2009e665 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3079_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3080 b/exercise8/expense_tracker/db-data/base/5/3080 new file mode 100644 index 00000000..b3373f25 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3080 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3081 b/exercise8/expense_tracker/db-data/base/5/3081 new file mode 100644 index 00000000..1313ba44 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3081 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3085 b/exercise8/expense_tracker/db-data/base/5/3085 new file mode 100644 index 00000000..95b3694e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3085 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3118 b/exercise8/expense_tracker/db-data/base/5/3118 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3119 b/exercise8/expense_tracker/db-data/base/5/3119 new file mode 100644 index 00000000..059d8b65 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3119 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3164 b/exercise8/expense_tracker/db-data/base/5/3164 new file mode 100644 index 00000000..482529bf Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3164 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3256 b/exercise8/expense_tracker/db-data/base/5/3256 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3257 b/exercise8/expense_tracker/db-data/base/5/3257 new file mode 100644 index 00000000..fbf5bbec Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3257 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3258 b/exercise8/expense_tracker/db-data/base/5/3258 new file mode 100644 index 00000000..e6ea9ced Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3258 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3350 b/exercise8/expense_tracker/db-data/base/5/3350 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3351 b/exercise8/expense_tracker/db-data/base/5/3351 new file mode 100644 index 00000000..afd5efa0 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3351 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3379 b/exercise8/expense_tracker/db-data/base/5/3379 new file mode 100644 index 00000000..faaee394 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3379 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3380 b/exercise8/expense_tracker/db-data/base/5/3380 new file mode 100644 index 00000000..01e9984f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3380 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3381 b/exercise8/expense_tracker/db-data/base/5/3381 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3394 b/exercise8/expense_tracker/db-data/base/5/3394 new file mode 100644 index 00000000..1c3378a9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3394 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3394_fsm b/exercise8/expense_tracker/db-data/base/5/3394_fsm new file mode 100644 index 00000000..ffa86444 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3394_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3394_vm b/exercise8/expense_tracker/db-data/base/5/3394_vm new file mode 100644 index 00000000..f9fcb92d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3394_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3395 b/exercise8/expense_tracker/db-data/base/5/3395 new file mode 100644 index 00000000..90877bc4 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3395 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3429 b/exercise8/expense_tracker/db-data/base/5/3429 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3430 b/exercise8/expense_tracker/db-data/base/5/3430 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3431 b/exercise8/expense_tracker/db-data/base/5/3431 new file mode 100644 index 00000000..13c10cb2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3431 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3433 b/exercise8/expense_tracker/db-data/base/5/3433 new file mode 100644 index 00000000..ffe926f6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3433 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3439 b/exercise8/expense_tracker/db-data/base/5/3439 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3440 b/exercise8/expense_tracker/db-data/base/5/3440 new file mode 100644 index 00000000..cfae4dfc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3440 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3455 b/exercise8/expense_tracker/db-data/base/5/3455 new file mode 100644 index 00000000..a44ef250 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3455 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3456 b/exercise8/expense_tracker/db-data/base/5/3456 new file mode 100644 index 00000000..d83738d9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3456 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3456_fsm b/exercise8/expense_tracker/db-data/base/5/3456_fsm new file mode 100644 index 00000000..51cf9b86 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3456_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3456_vm b/exercise8/expense_tracker/db-data/base/5/3456_vm new file mode 100644 index 00000000..f10831e6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3456_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3466 b/exercise8/expense_tracker/db-data/base/5/3466 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3467 b/exercise8/expense_tracker/db-data/base/5/3467 new file mode 100644 index 00000000..6344b94f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3467 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3468 b/exercise8/expense_tracker/db-data/base/5/3468 new file mode 100644 index 00000000..6a2b6b18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3468 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3501 b/exercise8/expense_tracker/db-data/base/5/3501 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3502 b/exercise8/expense_tracker/db-data/base/5/3502 new file mode 100644 index 00000000..eb0b32aa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3502 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3503 b/exercise8/expense_tracker/db-data/base/5/3503 new file mode 100644 index 00000000..32a30555 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3503 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3534 b/exercise8/expense_tracker/db-data/base/5/3534 new file mode 100644 index 00000000..7676fd82 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3534 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3541 b/exercise8/expense_tracker/db-data/base/5/3541 new file mode 100644 index 00000000..40869ad3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3541 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3541_fsm b/exercise8/expense_tracker/db-data/base/5/3541_fsm new file mode 100644 index 00000000..a3a2de4d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3541_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3541_vm b/exercise8/expense_tracker/db-data/base/5/3541_vm new file mode 100644 index 00000000..58c700c3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3541_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3542 b/exercise8/expense_tracker/db-data/base/5/3542 new file mode 100644 index 00000000..bb83580a Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3542 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3574 b/exercise8/expense_tracker/db-data/base/5/3574 new file mode 100644 index 00000000..b026df10 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3574 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3575 b/exercise8/expense_tracker/db-data/base/5/3575 new file mode 100644 index 00000000..bdec5326 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3575 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3576 b/exercise8/expense_tracker/db-data/base/5/3576 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3596 b/exercise8/expense_tracker/db-data/base/5/3596 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3597 b/exercise8/expense_tracker/db-data/base/5/3597 new file mode 100644 index 00000000..8963738c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3597 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3598 b/exercise8/expense_tracker/db-data/base/5/3598 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/3599 b/exercise8/expense_tracker/db-data/base/5/3599 new file mode 100644 index 00000000..67582c2b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3599 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3600 b/exercise8/expense_tracker/db-data/base/5/3600 new file mode 100644 index 00000000..b7e061d3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3600 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3600_fsm b/exercise8/expense_tracker/db-data/base/5/3600_fsm new file mode 100644 index 00000000..cebec199 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3600_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3600_vm b/exercise8/expense_tracker/db-data/base/5/3600_vm new file mode 100644 index 00000000..13678275 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3600_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3601 b/exercise8/expense_tracker/db-data/base/5/3601 new file mode 100644 index 00000000..04c846ec Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3601 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3601_fsm b/exercise8/expense_tracker/db-data/base/5/3601_fsm new file mode 100644 index 00000000..7732d22b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3601_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3601_vm b/exercise8/expense_tracker/db-data/base/5/3601_vm new file mode 100644 index 00000000..880269df Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3601_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3602 b/exercise8/expense_tracker/db-data/base/5/3602 new file mode 100644 index 00000000..71bfd4ff Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3602 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3602_fsm b/exercise8/expense_tracker/db-data/base/5/3602_fsm new file mode 100644 index 00000000..d7897de2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3602_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3602_vm b/exercise8/expense_tracker/db-data/base/5/3602_vm new file mode 100644 index 00000000..6069ce67 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3602_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3603 b/exercise8/expense_tracker/db-data/base/5/3603 new file mode 100644 index 00000000..3731bfd7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3603 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3603_fsm b/exercise8/expense_tracker/db-data/base/5/3603_fsm new file mode 100644 index 00000000..c28dd4fa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3603_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3603_vm b/exercise8/expense_tracker/db-data/base/5/3603_vm new file mode 100644 index 00000000..039a496f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3603_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3604 b/exercise8/expense_tracker/db-data/base/5/3604 new file mode 100644 index 00000000..071d6cf2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3604 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3605 b/exercise8/expense_tracker/db-data/base/5/3605 new file mode 100644 index 00000000..29fc4f3d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3605 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3606 b/exercise8/expense_tracker/db-data/base/5/3606 new file mode 100644 index 00000000..698e6d09 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3606 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3607 b/exercise8/expense_tracker/db-data/base/5/3607 new file mode 100644 index 00000000..1d023e00 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3607 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3608 b/exercise8/expense_tracker/db-data/base/5/3608 new file mode 100644 index 00000000..83911eb3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3608 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3609 b/exercise8/expense_tracker/db-data/base/5/3609 new file mode 100644 index 00000000..2f4fc84e Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3609 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3712 b/exercise8/expense_tracker/db-data/base/5/3712 new file mode 100644 index 00000000..02f33030 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3712 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3764 b/exercise8/expense_tracker/db-data/base/5/3764 new file mode 100644 index 00000000..c99948f5 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3764 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3764_fsm b/exercise8/expense_tracker/db-data/base/5/3764_fsm new file mode 100644 index 00000000..f64db4df Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3764_fsm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3764_vm b/exercise8/expense_tracker/db-data/base/5/3764_vm new file mode 100644 index 00000000..d25e1e15 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3764_vm differ diff --git a/exercise8/expense_tracker/db-data/base/5/3766 b/exercise8/expense_tracker/db-data/base/5/3766 new file mode 100644 index 00000000..5038b6e3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3766 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3767 b/exercise8/expense_tracker/db-data/base/5/3767 new file mode 100644 index 00000000..3c89a3cb Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3767 differ diff --git a/exercise8/expense_tracker/db-data/base/5/3997 b/exercise8/expense_tracker/db-data/base/5/3997 new file mode 100644 index 00000000..46564a34 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/3997 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4143 b/exercise8/expense_tracker/db-data/base/5/4143 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4144 b/exercise8/expense_tracker/db-data/base/5/4144 new file mode 100644 index 00000000..64af7645 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4144 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4145 b/exercise8/expense_tracker/db-data/base/5/4145 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4146 b/exercise8/expense_tracker/db-data/base/5/4146 new file mode 100644 index 00000000..1f029ea4 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4146 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4147 b/exercise8/expense_tracker/db-data/base/5/4147 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4148 b/exercise8/expense_tracker/db-data/base/5/4148 new file mode 100644 index 00000000..5959a958 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4148 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4149 b/exercise8/expense_tracker/db-data/base/5/4149 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4150 b/exercise8/expense_tracker/db-data/base/5/4150 new file mode 100644 index 00000000..5e11d49b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4150 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4151 b/exercise8/expense_tracker/db-data/base/5/4151 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4152 b/exercise8/expense_tracker/db-data/base/5/4152 new file mode 100644 index 00000000..8acd468c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4152 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4153 b/exercise8/expense_tracker/db-data/base/5/4153 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4154 b/exercise8/expense_tracker/db-data/base/5/4154 new file mode 100644 index 00000000..e597f616 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4154 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4155 b/exercise8/expense_tracker/db-data/base/5/4155 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4156 b/exercise8/expense_tracker/db-data/base/5/4156 new file mode 100644 index 00000000..d653113c Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4156 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4157 b/exercise8/expense_tracker/db-data/base/5/4157 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4158 b/exercise8/expense_tracker/db-data/base/5/4158 new file mode 100644 index 00000000..355910cc Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4158 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4159 b/exercise8/expense_tracker/db-data/base/5/4159 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4160 b/exercise8/expense_tracker/db-data/base/5/4160 new file mode 100644 index 00000000..7d09bfa7 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4160 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4163 b/exercise8/expense_tracker/db-data/base/5/4163 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4164 b/exercise8/expense_tracker/db-data/base/5/4164 new file mode 100644 index 00000000..97adb952 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4164 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4165 b/exercise8/expense_tracker/db-data/base/5/4165 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4166 b/exercise8/expense_tracker/db-data/base/5/4166 new file mode 100644 index 00000000..c0e3e5b6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4166 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4167 b/exercise8/expense_tracker/db-data/base/5/4167 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4168 b/exercise8/expense_tracker/db-data/base/5/4168 new file mode 100644 index 00000000..ddcb5604 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4168 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4169 b/exercise8/expense_tracker/db-data/base/5/4169 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4170 b/exercise8/expense_tracker/db-data/base/5/4170 new file mode 100644 index 00000000..5812a8ec Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4170 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4171 b/exercise8/expense_tracker/db-data/base/5/4171 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4172 b/exercise8/expense_tracker/db-data/base/5/4172 new file mode 100644 index 00000000..84c04d60 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4172 differ diff --git a/exercise8/expense_tracker/db-data/base/5/4173 b/exercise8/expense_tracker/db-data/base/5/4173 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/4174 b/exercise8/expense_tracker/db-data/base/5/4174 new file mode 100644 index 00000000..9b12becd Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/4174 differ diff --git a/exercise8/expense_tracker/db-data/base/5/5002 b/exercise8/expense_tracker/db-data/base/5/5002 new file mode 100644 index 00000000..aefa40dd Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/5002 differ diff --git a/exercise8/expense_tracker/db-data/base/5/548 b/exercise8/expense_tracker/db-data/base/5/548 new file mode 100644 index 00000000..64fdefd5 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/548 differ diff --git a/exercise8/expense_tracker/db-data/base/5/549 b/exercise8/expense_tracker/db-data/base/5/549 new file mode 100644 index 00000000..3734cc2b Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/549 differ diff --git a/exercise8/expense_tracker/db-data/base/5/6102 b/exercise8/expense_tracker/db-data/base/5/6102 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/6104 b/exercise8/expense_tracker/db-data/base/5/6104 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/6106 b/exercise8/expense_tracker/db-data/base/5/6106 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/6110 b/exercise8/expense_tracker/db-data/base/5/6110 new file mode 100644 index 00000000..42e19200 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/6110 differ diff --git a/exercise8/expense_tracker/db-data/base/5/6111 b/exercise8/expense_tracker/db-data/base/5/6111 new file mode 100644 index 00000000..d012727d Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/6111 differ diff --git a/exercise8/expense_tracker/db-data/base/5/6112 b/exercise8/expense_tracker/db-data/base/5/6112 new file mode 100644 index 00000000..293367c2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/6112 differ diff --git a/exercise8/expense_tracker/db-data/base/5/6113 b/exercise8/expense_tracker/db-data/base/5/6113 new file mode 100644 index 00000000..542f8faa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/6113 differ diff --git a/exercise8/expense_tracker/db-data/base/5/6116 b/exercise8/expense_tracker/db-data/base/5/6116 new file mode 100644 index 00000000..787d5d18 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/6116 differ diff --git a/exercise8/expense_tracker/db-data/base/5/6117 b/exercise8/expense_tracker/db-data/base/5/6117 new file mode 100644 index 00000000..2b5656b2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/6117 differ diff --git a/exercise8/expense_tracker/db-data/base/5/6175 b/exercise8/expense_tracker/db-data/base/5/6175 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/6176 b/exercise8/expense_tracker/db-data/base/5/6176 new file mode 100644 index 00000000..6e5bcd62 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/6176 differ diff --git a/exercise8/expense_tracker/db-data/base/5/6228 b/exercise8/expense_tracker/db-data/base/5/6228 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/6229 b/exercise8/expense_tracker/db-data/base/5/6229 new file mode 100644 index 00000000..fae8f445 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/6229 differ diff --git a/exercise8/expense_tracker/db-data/base/5/6237 b/exercise8/expense_tracker/db-data/base/5/6237 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/6238 b/exercise8/expense_tracker/db-data/base/5/6238 new file mode 100644 index 00000000..e7c0e8c3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/6238 differ diff --git a/exercise8/expense_tracker/db-data/base/5/6239 b/exercise8/expense_tracker/db-data/base/5/6239 new file mode 100644 index 00000000..6c60b507 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/6239 differ diff --git a/exercise8/expense_tracker/db-data/base/5/826 b/exercise8/expense_tracker/db-data/base/5/826 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/base/5/827 b/exercise8/expense_tracker/db-data/base/5/827 new file mode 100644 index 00000000..f102efd8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/827 differ diff --git a/exercise8/expense_tracker/db-data/base/5/828 b/exercise8/expense_tracker/db-data/base/5/828 new file mode 100644 index 00000000..e97c210f Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/828 differ diff --git a/exercise8/expense_tracker/db-data/base/5/PG_VERSION b/exercise8/expense_tracker/db-data/base/5/PG_VERSION new file mode 100644 index 00000000..98d9bcb7 --- /dev/null +++ b/exercise8/expense_tracker/db-data/base/5/PG_VERSION @@ -0,0 +1 @@ +17 diff --git a/exercise8/expense_tracker/db-data/base/5/pg_filenode.map b/exercise8/expense_tracker/db-data/base/5/pg_filenode.map new file mode 100644 index 00000000..4fc801aa Binary files /dev/null and b/exercise8/expense_tracker/db-data/base/5/pg_filenode.map differ diff --git a/exercise8/expense_tracker/db-data/global/1213 b/exercise8/expense_tracker/db-data/global/1213 new file mode 100644 index 00000000..eec8dc3a Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1213 differ diff --git a/exercise8/expense_tracker/db-data/global/1213_fsm b/exercise8/expense_tracker/db-data/global/1213_fsm new file mode 100644 index 00000000..86074bee Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1213_fsm differ diff --git a/exercise8/expense_tracker/db-data/global/1213_vm b/exercise8/expense_tracker/db-data/global/1213_vm new file mode 100644 index 00000000..604a88bd Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1213_vm differ diff --git a/exercise8/expense_tracker/db-data/global/1214 b/exercise8/expense_tracker/db-data/global/1214 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/1232 b/exercise8/expense_tracker/db-data/global/1232 new file mode 100644 index 00000000..15759623 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1232 differ diff --git a/exercise8/expense_tracker/db-data/global/1233 b/exercise8/expense_tracker/db-data/global/1233 new file mode 100644 index 00000000..a970dd5c Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1233 differ diff --git a/exercise8/expense_tracker/db-data/global/1260 b/exercise8/expense_tracker/db-data/global/1260 new file mode 100644 index 00000000..a9422427 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1260 differ diff --git a/exercise8/expense_tracker/db-data/global/1260_fsm b/exercise8/expense_tracker/db-data/global/1260_fsm new file mode 100644 index 00000000..4ee5faa2 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1260_fsm differ diff --git a/exercise8/expense_tracker/db-data/global/1260_vm b/exercise8/expense_tracker/db-data/global/1260_vm new file mode 100644 index 00000000..dd1b1b81 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1260_vm differ diff --git a/exercise8/expense_tracker/db-data/global/1261 b/exercise8/expense_tracker/db-data/global/1261 new file mode 100644 index 00000000..c0a8657d Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1261 differ diff --git a/exercise8/expense_tracker/db-data/global/1261_fsm b/exercise8/expense_tracker/db-data/global/1261_fsm new file mode 100644 index 00000000..f32c23e9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1261_fsm differ diff --git a/exercise8/expense_tracker/db-data/global/1261_vm b/exercise8/expense_tracker/db-data/global/1261_vm new file mode 100644 index 00000000..a5a5740a Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1261_vm differ diff --git a/exercise8/expense_tracker/db-data/global/1262 b/exercise8/expense_tracker/db-data/global/1262 new file mode 100644 index 00000000..95468e33 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1262 differ diff --git a/exercise8/expense_tracker/db-data/global/1262_fsm b/exercise8/expense_tracker/db-data/global/1262_fsm new file mode 100644 index 00000000..479fd945 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1262_fsm differ diff --git a/exercise8/expense_tracker/db-data/global/1262_vm b/exercise8/expense_tracker/db-data/global/1262_vm new file mode 100644 index 00000000..c71fdde8 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/1262_vm differ diff --git a/exercise8/expense_tracker/db-data/global/2396 b/exercise8/expense_tracker/db-data/global/2396 new file mode 100644 index 00000000..bd89355e Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2396 differ diff --git a/exercise8/expense_tracker/db-data/global/2396_fsm b/exercise8/expense_tracker/db-data/global/2396_fsm new file mode 100644 index 00000000..7a4f24f3 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2396_fsm differ diff --git a/exercise8/expense_tracker/db-data/global/2396_vm b/exercise8/expense_tracker/db-data/global/2396_vm new file mode 100644 index 00000000..6a496472 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2396_vm differ diff --git a/exercise8/expense_tracker/db-data/global/2397 b/exercise8/expense_tracker/db-data/global/2397 new file mode 100644 index 00000000..a0e096b9 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2397 differ diff --git a/exercise8/expense_tracker/db-data/global/2671 b/exercise8/expense_tracker/db-data/global/2671 new file mode 100644 index 00000000..1fa701e1 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2671 differ diff --git a/exercise8/expense_tracker/db-data/global/2672 b/exercise8/expense_tracker/db-data/global/2672 new file mode 100644 index 00000000..ea18c4eb Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2672 differ diff --git a/exercise8/expense_tracker/db-data/global/2676 b/exercise8/expense_tracker/db-data/global/2676 new file mode 100644 index 00000000..431e5f1f Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2676 differ diff --git a/exercise8/expense_tracker/db-data/global/2677 b/exercise8/expense_tracker/db-data/global/2677 new file mode 100644 index 00000000..69c32da4 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2677 differ diff --git a/exercise8/expense_tracker/db-data/global/2694 b/exercise8/expense_tracker/db-data/global/2694 new file mode 100644 index 00000000..ddd941b5 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2694 differ diff --git a/exercise8/expense_tracker/db-data/global/2695 b/exercise8/expense_tracker/db-data/global/2695 new file mode 100644 index 00000000..763a32db Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2695 differ diff --git a/exercise8/expense_tracker/db-data/global/2697 b/exercise8/expense_tracker/db-data/global/2697 new file mode 100644 index 00000000..18caad21 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2697 differ diff --git a/exercise8/expense_tracker/db-data/global/2698 b/exercise8/expense_tracker/db-data/global/2698 new file mode 100644 index 00000000..e7e92471 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2698 differ diff --git a/exercise8/expense_tracker/db-data/global/2846 b/exercise8/expense_tracker/db-data/global/2846 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/2847 b/exercise8/expense_tracker/db-data/global/2847 new file mode 100644 index 00000000..9405f95b Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2847 differ diff --git a/exercise8/expense_tracker/db-data/global/2964 b/exercise8/expense_tracker/db-data/global/2964 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/2965 b/exercise8/expense_tracker/db-data/global/2965 new file mode 100644 index 00000000..a5a13bdd Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2965 differ diff --git a/exercise8/expense_tracker/db-data/global/2966 b/exercise8/expense_tracker/db-data/global/2966 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/2967 b/exercise8/expense_tracker/db-data/global/2967 new file mode 100644 index 00000000..588aa84e Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/2967 differ diff --git a/exercise8/expense_tracker/db-data/global/3592 b/exercise8/expense_tracker/db-data/global/3592 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/3593 b/exercise8/expense_tracker/db-data/global/3593 new file mode 100644 index 00000000..17d4fe92 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/3593 differ diff --git a/exercise8/expense_tracker/db-data/global/4060 b/exercise8/expense_tracker/db-data/global/4060 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/4061 b/exercise8/expense_tracker/db-data/global/4061 new file mode 100644 index 00000000..210916f6 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/4061 differ diff --git a/exercise8/expense_tracker/db-data/global/4175 b/exercise8/expense_tracker/db-data/global/4175 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/4176 b/exercise8/expense_tracker/db-data/global/4176 new file mode 100644 index 00000000..c3214776 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/4176 differ diff --git a/exercise8/expense_tracker/db-data/global/4177 b/exercise8/expense_tracker/db-data/global/4177 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/4178 b/exercise8/expense_tracker/db-data/global/4178 new file mode 100644 index 00000000..27db3c0f Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/4178 differ diff --git a/exercise8/expense_tracker/db-data/global/4181 b/exercise8/expense_tracker/db-data/global/4181 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/4182 b/exercise8/expense_tracker/db-data/global/4182 new file mode 100644 index 00000000..a22e4a39 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/4182 differ diff --git a/exercise8/expense_tracker/db-data/global/4183 b/exercise8/expense_tracker/db-data/global/4183 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/4184 b/exercise8/expense_tracker/db-data/global/4184 new file mode 100644 index 00000000..242a3197 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/4184 differ diff --git a/exercise8/expense_tracker/db-data/global/4185 b/exercise8/expense_tracker/db-data/global/4185 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/4186 b/exercise8/expense_tracker/db-data/global/4186 new file mode 100644 index 00000000..060ba86c Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/4186 differ diff --git a/exercise8/expense_tracker/db-data/global/6000 b/exercise8/expense_tracker/db-data/global/6000 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/6001 b/exercise8/expense_tracker/db-data/global/6001 new file mode 100644 index 00000000..d18737ce Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/6001 differ diff --git a/exercise8/expense_tracker/db-data/global/6002 b/exercise8/expense_tracker/db-data/global/6002 new file mode 100644 index 00000000..a066fe13 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/6002 differ diff --git a/exercise8/expense_tracker/db-data/global/6100 b/exercise8/expense_tracker/db-data/global/6100 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/6114 b/exercise8/expense_tracker/db-data/global/6114 new file mode 100644 index 00000000..bf887fa4 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/6114 differ diff --git a/exercise8/expense_tracker/db-data/global/6115 b/exercise8/expense_tracker/db-data/global/6115 new file mode 100644 index 00000000..afafca81 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/6115 differ diff --git a/exercise8/expense_tracker/db-data/global/6243 b/exercise8/expense_tracker/db-data/global/6243 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/6244 b/exercise8/expense_tracker/db-data/global/6244 new file mode 100644 index 00000000..e69de29b diff --git a/exercise8/expense_tracker/db-data/global/6245 b/exercise8/expense_tracker/db-data/global/6245 new file mode 100644 index 00000000..1a9e142b Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/6245 differ diff --git a/exercise8/expense_tracker/db-data/global/6246 b/exercise8/expense_tracker/db-data/global/6246 new file mode 100644 index 00000000..40d7bd8b Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/6246 differ diff --git a/exercise8/expense_tracker/db-data/global/6247 b/exercise8/expense_tracker/db-data/global/6247 new file mode 100644 index 00000000..22e88819 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/6247 differ diff --git a/exercise8/expense_tracker/db-data/global/6302 b/exercise8/expense_tracker/db-data/global/6302 new file mode 100644 index 00000000..b0aa180e Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/6302 differ diff --git a/exercise8/expense_tracker/db-data/global/6303 b/exercise8/expense_tracker/db-data/global/6303 new file mode 100644 index 00000000..155f91a4 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/6303 differ diff --git a/exercise8/expense_tracker/db-data/global/pg_control b/exercise8/expense_tracker/db-data/global/pg_control new file mode 100644 index 00000000..a71e463d Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/pg_control differ diff --git a/exercise8/expense_tracker/db-data/global/pg_filenode.map b/exercise8/expense_tracker/db-data/global/pg_filenode.map new file mode 100644 index 00000000..97c07a68 Binary files /dev/null and b/exercise8/expense_tracker/db-data/global/pg_filenode.map differ diff --git a/exercise8/expense_tracker/db-data/pg_hba.conf b/exercise8/expense_tracker/db-data/pg_hba.conf new file mode 100644 index 00000000..7f379dbb --- /dev/null +++ b/exercise8/expense_tracker/db-data/pg_hba.conf @@ -0,0 +1,128 @@ +# PostgreSQL Client Authentication Configuration File +# =================================================== +# +# Refer to the "Client Authentication" section in the PostgreSQL +# documentation for a complete description of this file. A short +# synopsis follows. +# +# ---------------------- +# Authentication Records +# ---------------------- +# +# This file controls: which hosts are allowed to connect, how clients +# are authenticated, which PostgreSQL user names they can use, which +# databases they can access. Records take one of these forms: +# +# local DATABASE USER METHOD [OPTIONS] +# host DATABASE USER ADDRESS METHOD [OPTIONS] +# hostssl DATABASE USER ADDRESS METHOD [OPTIONS] +# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] +# hostgssenc DATABASE USER ADDRESS METHOD [OPTIONS] +# hostnogssenc DATABASE USER ADDRESS METHOD [OPTIONS] +# +# (The uppercase items must be replaced by actual values.) +# +# The first field is the connection type: +# - "local" is a Unix-domain socket +# - "host" is a TCP/IP socket (encrypted or not) +# - "hostssl" is a TCP/IP socket that is SSL-encrypted +# - "hostnossl" is a TCP/IP socket that is not SSL-encrypted +# - "hostgssenc" is a TCP/IP socket that is GSSAPI-encrypted +# - "hostnogssenc" is a TCP/IP socket that is not GSSAPI-encrypted +# +# DATABASE can be "all", "sameuser", "samerole", "replication", a +# database name, a regular expression (if it starts with a slash (/)) +# or a comma-separated list thereof. The "all" keyword does not match +# "replication". Access to replication must be enabled in a separate +# record (see example below). +# +# USER can be "all", a user name, a group name prefixed with "+", a +# regular expression (if it starts with a slash (/)) or a comma-separated +# list thereof. In both the DATABASE and USER fields you can also write +# a file name prefixed with "@" to include names from a separate file. +# +# ADDRESS specifies the set of hosts the record matches. It can be a +# host name, or it is made up of an IP address and a CIDR mask that is +# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that +# specifies the number of significant bits in the mask. A host name +# that starts with a dot (.) matches a suffix of the actual host name. +# Alternatively, you can write an IP address and netmask in separate +# columns to specify the set of hosts. Instead of a CIDR-address, you +# can write "samehost" to match any of the server's own IP addresses, +# or "samenet" to match any address in any subnet that the server is +# directly connected to. +# +# METHOD can be "trust", "reject", "md5", "password", "scram-sha-256", +# "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert". +# Note that "password" sends passwords in clear text; "md5" or +# "scram-sha-256" are preferred since they send encrypted passwords. +# +# OPTIONS are a set of options for the authentication in the format +# NAME=VALUE. The available options depend on the different +# authentication methods -- refer to the "Client Authentication" +# section in the documentation for a list of which options are +# available for which authentication methods. +# +# Database and user names containing spaces, commas, quotes and other +# special characters must be quoted. Quoting one of the keywords +# "all", "sameuser", "samerole" or "replication" makes the name lose +# its special character, and just match a database or username with +# that name. +# +# --------------- +# Include Records +# --------------- +# +# This file allows the inclusion of external files or directories holding +# more records, using the following keywords: +# +# include FILE +# include_if_exists FILE +# include_dir DIRECTORY +# +# FILE is the file name to include, and DIR is the directory name containing +# the file(s) to include. Any file in a directory will be loaded if suffixed +# with ".conf". The files of a directory are ordered by name. +# include_if_exists ignores missing files. FILE and DIRECTORY can be +# specified as a relative or an absolute path, and can be double-quoted if +# they contain spaces. +# +# ------------- +# Miscellaneous +# ------------- +# +# This file is read on server startup and when the server receives a +# SIGHUP signal. If you edit the file on a running system, you have to +# SIGHUP the server for the changes to take effect, run "pg_ctl reload", +# or execute "SELECT pg_reload_conf()". +# +# ---------------------------------- +# Put your actual configuration here +# ---------------------------------- +# +# If you want to allow non-local connections, you need to add more +# "host" records. In that case you will also need to make PostgreSQL +# listen on a non-local interface via the listen_addresses +# configuration parameter, or via the -i or -h command line switches. + +# CAUTION: Configuring the system for local "trust" authentication +# allows any local user to connect as any PostgreSQL user, including +# the database superuser. If you do not trust all your local users, +# use another authentication method. + + +# TYPE DATABASE USER ADDRESS METHOD + +# "local" is for Unix domain socket connections only +local all all trust +# IPv4 local connections: +host all all 127.0.0.1/32 trust +# IPv6 local connections: +host all all ::1/128 trust +# Allow replication connections from localhost, by a user with the +# replication privilege. +local replication all trust +host replication all 127.0.0.1/32 trust +host replication all ::1/128 trust + +host all all all scram-sha-256 diff --git a/exercise8/expense_tracker/db-data/pg_ident.conf b/exercise8/expense_tracker/db-data/pg_ident.conf new file mode 100644 index 00000000..f5225f26 --- /dev/null +++ b/exercise8/expense_tracker/db-data/pg_ident.conf @@ -0,0 +1,72 @@ +# PostgreSQL User Name Maps +# ========================= +# +# --------------- +# Mapping Records +# --------------- +# +# Refer to the PostgreSQL documentation, chapter "Client +# Authentication" for a complete description. A short synopsis +# follows. +# +# This file controls PostgreSQL user name mapping. It maps external +# user names to their corresponding PostgreSQL user names. Records +# are of the form: +# +# MAPNAME SYSTEM-USERNAME PG-USERNAME +# +# (The uppercase quantities must be replaced by actual values.) +# +# MAPNAME is the (otherwise freely chosen) map name that was used in +# pg_hba.conf. SYSTEM-USERNAME is the detected user name of the +# client. PG-USERNAME is the requested PostgreSQL user name. The +# existence of a record specifies that SYSTEM-USERNAME may connect as +# PG-USERNAME. +# +# If SYSTEM-USERNAME starts with a slash (/), it will be treated as a +# regular expression. Optionally this can contain a capture (a +# parenthesized subexpression). The substring matching the capture +# will be substituted for \1 (backslash-one) if present in +# PG-USERNAME. +# +# PG-USERNAME can be "all", a user name, a group name prefixed with "+", or +# a regular expression (if it starts with a slash (/)). If it is a regular +# expression, the substring matching with \1 has no effect. +# +# Multiple maps may be specified in this file and used by pg_hba.conf. +# +# No map names are defined in the default configuration. If all +# system user names and PostgreSQL user names are the same, you don't +# need anything in this file. +# +# --------------- +# Include Records +# --------------- +# +# This file allows the inclusion of external files or directories holding +# more records, using the following keywords: +# +# include FILE +# include_if_exists FILE +# include_dir DIRECTORY +# +# FILE is the file name to include, and DIR is the directory name containing +# the file(s) to include. Any file in a directory will be loaded if suffixed +# with ".conf". The files of a directory are ordered by name. +# include_if_exists ignores missing files. FILE and DIRECTORY can be +# specified as a relative or an absolute path, and can be double-quoted if +# they contain spaces. +# +# ------------------------------- +# Miscellaneous +# ------------------------------- +# +# This file is read on server startup and when the postmaster receives +# a SIGHUP signal. If you edit the file on a running system, you have +# to SIGHUP the postmaster for the changes to take effect. You can +# use "pg_ctl reload" to do that. + +# Put your actual configuration here +# ---------------------------------- + +# MAPNAME SYSTEM-USERNAME PG-USERNAME diff --git a/exercise8/expense_tracker/db-data/pg_logical/replorigin_checkpoint b/exercise8/expense_tracker/db-data/pg_logical/replorigin_checkpoint new file mode 100644 index 00000000..ec451b0f Binary files /dev/null and b/exercise8/expense_tracker/db-data/pg_logical/replorigin_checkpoint differ diff --git a/exercise8/expense_tracker/db-data/pg_multixact/members/0000 b/exercise8/expense_tracker/db-data/pg_multixact/members/0000 new file mode 100644 index 00000000..6d17cf9d Binary files /dev/null and b/exercise8/expense_tracker/db-data/pg_multixact/members/0000 differ diff --git a/exercise8/expense_tracker/db-data/pg_multixact/offsets/0000 b/exercise8/expense_tracker/db-data/pg_multixact/offsets/0000 new file mode 100644 index 00000000..6d17cf9d Binary files /dev/null and b/exercise8/expense_tracker/db-data/pg_multixact/offsets/0000 differ diff --git a/exercise8/expense_tracker/db-data/pg_subtrans/0000 b/exercise8/expense_tracker/db-data/pg_subtrans/0000 new file mode 100644 index 00000000..6d17cf9d Binary files /dev/null and b/exercise8/expense_tracker/db-data/pg_subtrans/0000 differ diff --git a/exercise8/expense_tracker/db-data/pg_wal/000000010000000000000001 b/exercise8/expense_tracker/db-data/pg_wal/000000010000000000000001 new file mode 100644 index 00000000..10e32fdc Binary files /dev/null and b/exercise8/expense_tracker/db-data/pg_wal/000000010000000000000001 differ diff --git a/exercise8/expense_tracker/db-data/pg_xact/0000 b/exercise8/expense_tracker/db-data/pg_xact/0000 new file mode 100644 index 00000000..dcc95561 Binary files /dev/null and b/exercise8/expense_tracker/db-data/pg_xact/0000 differ diff --git a/exercise8/expense_tracker/db-data/postgresql.auto.conf b/exercise8/expense_tracker/db-data/postgresql.auto.conf new file mode 100644 index 00000000..af7125e1 --- /dev/null +++ b/exercise8/expense_tracker/db-data/postgresql.auto.conf @@ -0,0 +1,2 @@ +# Do not edit this file manually! +# It will be overwritten by the ALTER SYSTEM command. diff --git a/exercise8/expense_tracker/db-data/postgresql.conf b/exercise8/expense_tracker/db-data/postgresql.conf new file mode 100644 index 00000000..98e4a16e --- /dev/null +++ b/exercise8/expense_tracker/db-data/postgresql.conf @@ -0,0 +1,844 @@ +# ----------------------------- +# PostgreSQL configuration file +# ----------------------------- +# +# This file consists of lines of the form: +# +# name = value +# +# (The "=" is optional.) Whitespace may be used. Comments are introduced with +# "#" anywhere on a line. The complete list of parameter names and allowed +# values can be found in the PostgreSQL documentation. +# +# The commented-out settings shown in this file represent the default values. +# Re-commenting a setting is NOT sufficient to revert it to the default value; +# you need to reload the server. +# +# This file is read on server startup and when the server receives a SIGHUP +# signal. If you edit the file on a running system, you have to SIGHUP the +# server for the changes to take effect, run "pg_ctl reload", or execute +# "SELECT pg_reload_conf()". Some parameters, which are marked below, +# require a server shutdown and restart to take effect. +# +# Any parameter can also be given as a command-line option to the server, e.g., +# "postgres -c log_connections=on". Some parameters can be changed at run time +# with the "SET" SQL command. +# +# Memory units: B = bytes Time units: us = microseconds +# kB = kilobytes ms = milliseconds +# MB = megabytes s = seconds +# GB = gigabytes min = minutes +# TB = terabytes h = hours +# d = days + + +#------------------------------------------------------------------------------ +# FILE LOCATIONS +#------------------------------------------------------------------------------ + +# The default values of these variables are driven from the -D command-line +# option or PGDATA environment variable, represented here as ConfigDir. + +#data_directory = 'ConfigDir' # use data in another directory + # (change requires restart) +#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file + # (change requires restart) +#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file + # (change requires restart) + +# If external_pid_file is not explicitly set, no extra PID file is written. +#external_pid_file = '' # write an extra PID file + # (change requires restart) + + +#------------------------------------------------------------------------------ +# CONNECTIONS AND AUTHENTICATION +#------------------------------------------------------------------------------ + +# - Connection Settings - + +listen_addresses = '*' + # comma-separated list of addresses; + # defaults to 'localhost'; use '*' for all + # (change requires restart) +#port = 5432 # (change requires restart) +max_connections = 100 # (change requires restart) +#reserved_connections = 0 # (change requires restart) +#superuser_reserved_connections = 3 # (change requires restart) +#unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories + # (change requires restart) +#unix_socket_group = '' # (change requires restart) +#unix_socket_permissions = 0777 # begin with 0 to use octal notation + # (change requires restart) +#bonjour = off # advertise server via Bonjour + # (change requires restart) +#bonjour_name = '' # defaults to the computer name + # (change requires restart) + +# - TCP settings - +# see "man tcp" for details + +#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; + # 0 selects the system default +#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; + # 0 selects the system default +#tcp_keepalives_count = 0 # TCP_KEEPCNT; + # 0 selects the system default +#tcp_user_timeout = 0 # TCP_USER_TIMEOUT, in milliseconds; + # 0 selects the system default + +#client_connection_check_interval = 0 # time between checks for client + # disconnection while running queries; + # 0 for never + +# - Authentication - + +#authentication_timeout = 1min # 1s-600s +#password_encryption = scram-sha-256 # scram-sha-256 or md5 +#scram_iterations = 4096 + +# GSSAPI using Kerberos +#krb_server_keyfile = 'FILE:${sysconfdir}/krb5.keytab' +#krb_caseins_users = off +#gss_accept_delegation = off + +# - SSL - + +#ssl = off +#ssl_ca_file = '' +#ssl_cert_file = 'server.crt' +#ssl_crl_file = '' +#ssl_crl_dir = '' +#ssl_key_file = 'server.key' +#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers +#ssl_prefer_server_ciphers = on +#ssl_ecdh_curve = 'prime256v1' +#ssl_min_protocol_version = 'TLSv1.2' +#ssl_max_protocol_version = '' +#ssl_dh_params_file = '' +#ssl_passphrase_command = '' +#ssl_passphrase_command_supports_reload = off + + +#------------------------------------------------------------------------------ +# RESOURCE USAGE (except WAL) +#------------------------------------------------------------------------------ + +# - Memory - + +shared_buffers = 128MB # min 128kB + # (change requires restart) +#huge_pages = try # on, off, or try + # (change requires restart) +#huge_page_size = 0 # zero for system default + # (change requires restart) +#temp_buffers = 8MB # min 800kB +#max_prepared_transactions = 0 # zero disables the feature + # (change requires restart) +# Caution: it is not advisable to set max_prepared_transactions nonzero unless +# you actively intend to use prepared transactions. +#work_mem = 4MB # min 64kB +#hash_mem_multiplier = 2.0 # 1-1000.0 multiplier on hash table work_mem +#maintenance_work_mem = 64MB # min 64kB +#autovacuum_work_mem = -1 # min 64kB, or -1 to use maintenance_work_mem +#logical_decoding_work_mem = 64MB # min 64kB +#max_stack_depth = 2MB # min 100kB +#shared_memory_type = mmap # the default is the first option + # supported by the operating system: + # mmap + # sysv + # windows + # (change requires restart) +dynamic_shared_memory_type = posix # the default is usually the first option + # supported by the operating system: + # posix + # sysv + # windows + # mmap + # (change requires restart) +#min_dynamic_shared_memory = 0MB # (change requires restart) +#vacuum_buffer_usage_limit = 2MB # size of vacuum and analyze buffer access strategy ring; + # 0 to disable vacuum buffer access strategy; + # range 128kB to 16GB + +# SLRU buffers (change requires restart) +#commit_timestamp_buffers = 0 # memory for pg_commit_ts (0 = auto) +#multixact_offset_buffers = 16 # memory for pg_multixact/offsets +#multixact_member_buffers = 32 # memory for pg_multixact/members +#notify_buffers = 16 # memory for pg_notify +#serializable_buffers = 32 # memory for pg_serial +#subtransaction_buffers = 0 # memory for pg_subtrans (0 = auto) +#transaction_buffers = 0 # memory for pg_xact (0 = auto) + +# - Disk - + +#temp_file_limit = -1 # limits per-process temp file space + # in kilobytes, or -1 for no limit + +#max_notify_queue_pages = 1048576 # limits the number of SLRU pages allocated + # for NOTIFY / LISTEN queue + +# - Kernel Resources - + +#max_files_per_process = 1000 # min 64 + # (change requires restart) + +# - Cost-Based Vacuum Delay - + +#vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables) +#vacuum_cost_page_hit = 1 # 0-10000 credits +#vacuum_cost_page_miss = 2 # 0-10000 credits +#vacuum_cost_page_dirty = 20 # 0-10000 credits +#vacuum_cost_limit = 200 # 1-10000 credits + +# - Background Writer - + +#bgwriter_delay = 200ms # 10-10000ms between rounds +#bgwriter_lru_maxpages = 100 # max buffers written/round, 0 disables +#bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round +#bgwriter_flush_after = 512kB # measured in pages, 0 disables + +# - Asynchronous Behavior - + +#backend_flush_after = 0 # measured in pages, 0 disables +#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching +#maintenance_io_concurrency = 10 # 1-1000; 0 disables prefetching +#io_combine_limit = 128kB # usually 1-32 blocks (depends on OS) +#max_worker_processes = 8 # (change requires restart) +#max_parallel_workers_per_gather = 2 # limited by max_parallel_workers +#max_parallel_maintenance_workers = 2 # limited by max_parallel_workers +#max_parallel_workers = 8 # number of max_worker_processes that + # can be used in parallel operations +#parallel_leader_participation = on + + +#------------------------------------------------------------------------------ +# WRITE-AHEAD LOG +#------------------------------------------------------------------------------ + +# - Settings - + +#wal_level = replica # minimal, replica, or logical + # (change requires restart) +#fsync = on # flush data to disk for crash safety + # (turning this off can cause + # unrecoverable data corruption) +#synchronous_commit = on # synchronization level; + # off, local, remote_write, remote_apply, or on +#wal_sync_method = fsync # the default is the first option + # supported by the operating system: + # open_datasync + # fdatasync (default on Linux and FreeBSD) + # fsync + # fsync_writethrough + # open_sync +#full_page_writes = on # recover from partial page writes +#wal_log_hints = off # also do full page writes of non-critical updates + # (change requires restart) +#wal_compression = off # enables compression of full-page writes; + # off, pglz, lz4, zstd, or on +#wal_init_zero = on # zero-fill new WAL files +#wal_recycle = on # recycle WAL files +#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers + # (change requires restart) +#wal_writer_delay = 200ms # 1-10000 milliseconds +#wal_writer_flush_after = 1MB # measured in pages, 0 disables +#wal_skip_threshold = 2MB + +#commit_delay = 0 # range 0-100000, in microseconds +#commit_siblings = 5 # range 1-1000 + +# - Checkpoints - + +#checkpoint_timeout = 5min # range 30s-1d +#checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0 +#checkpoint_flush_after = 256kB # measured in pages, 0 disables +#checkpoint_warning = 30s # 0 disables +max_wal_size = 1GB +min_wal_size = 80MB + +# - Prefetching during recovery - + +#recovery_prefetch = try # prefetch pages referenced in the WAL? +#wal_decode_buffer_size = 512kB # lookahead window used for prefetching + # (change requires restart) + +# - Archiving - + +#archive_mode = off # enables archiving; off, on, or always + # (change requires restart) +#archive_library = '' # library to use to archive a WAL file + # (empty string indicates archive_command should + # be used) +#archive_command = '' # command to use to archive a WAL file + # placeholders: %p = path of file to archive + # %f = file name only + # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' +#archive_timeout = 0 # force a WAL file switch after this + # number of seconds; 0 disables + +# - Archive Recovery - + +# These are only used in recovery mode. + +#restore_command = '' # command to use to restore an archived WAL file + # placeholders: %p = path of file to restore + # %f = file name only + # e.g. 'cp /mnt/server/archivedir/%f %p' +#archive_cleanup_command = '' # command to execute at every restartpoint +#recovery_end_command = '' # command to execute at completion of recovery + +# - Recovery Target - + +# Set these only when performing a targeted recovery. + +#recovery_target = '' # 'immediate' to end recovery as soon as a + # consistent state is reached + # (change requires restart) +#recovery_target_name = '' # the named restore point to which recovery will proceed + # (change requires restart) +#recovery_target_time = '' # the time stamp up to which recovery will proceed + # (change requires restart) +#recovery_target_xid = '' # the transaction ID up to which recovery will proceed + # (change requires restart) +#recovery_target_lsn = '' # the WAL LSN up to which recovery will proceed + # (change requires restart) +#recovery_target_inclusive = on # Specifies whether to stop: + # just after the specified recovery target (on) + # just before the recovery target (off) + # (change requires restart) +#recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID + # (change requires restart) +#recovery_target_action = 'pause' # 'pause', 'promote', 'shutdown' + # (change requires restart) + +# - WAL Summarization - + +#summarize_wal = off # run WAL summarizer process? +#wal_summary_keep_time = '10d' # when to remove old summary files, 0 = never + + +#------------------------------------------------------------------------------ +# REPLICATION +#------------------------------------------------------------------------------ + +# - Sending Servers - + +# Set these on the primary and on any standby that will send replication data. + +#max_wal_senders = 10 # max number of walsender processes + # (change requires restart) +#max_replication_slots = 10 # max number of replication slots + # (change requires restart) +#wal_keep_size = 0 # in megabytes; 0 disables +#max_slot_wal_keep_size = -1 # in megabytes; -1 disables +#wal_sender_timeout = 60s # in milliseconds; 0 disables +#track_commit_timestamp = off # collect timestamp of transaction commit + # (change requires restart) + +# - Primary Server - + +# These settings are ignored on a standby server. + +#synchronous_standby_names = '' # standby servers that provide sync rep + # method to choose sync standbys, number of sync standbys, + # and comma-separated list of application_name + # from standby(s); '*' = all +#synchronized_standby_slots = '' # streaming replication standby server slot + # names that logical walsender processes will wait for + +# - Standby Servers - + +# These settings are ignored on a primary server. + +#primary_conninfo = '' # connection string to sending server +#primary_slot_name = '' # replication slot on sending server +#hot_standby = on # "off" disallows queries during recovery + # (change requires restart) +#max_standby_archive_delay = 30s # max delay before canceling queries + # when reading WAL from archive; + # -1 allows indefinite delay +#max_standby_streaming_delay = 30s # max delay before canceling queries + # when reading streaming WAL; + # -1 allows indefinite delay +#wal_receiver_create_temp_slot = off # create temp slot if primary_slot_name + # is not set +#wal_receiver_status_interval = 10s # send replies at least this often + # 0 disables +#hot_standby_feedback = off # send info from standby to prevent + # query conflicts +#wal_receiver_timeout = 60s # time that receiver waits for + # communication from primary + # in milliseconds; 0 disables +#wal_retrieve_retry_interval = 5s # time to wait before retrying to + # retrieve WAL after a failed attempt +#recovery_min_apply_delay = 0 # minimum delay for applying changes during recovery +#sync_replication_slots = off # enables slot synchronization on the physical standby from the primary + +# - Subscribers - + +# These settings are ignored on a publisher. + +#max_logical_replication_workers = 4 # taken from max_worker_processes + # (change requires restart) +#max_sync_workers_per_subscription = 2 # taken from max_logical_replication_workers +#max_parallel_apply_workers_per_subscription = 2 # taken from max_logical_replication_workers + + +#------------------------------------------------------------------------------ +# QUERY TUNING +#------------------------------------------------------------------------------ + +# - Planner Method Configuration - + +#enable_async_append = on +#enable_bitmapscan = on +#enable_gathermerge = on +#enable_hashagg = on +#enable_hashjoin = on +#enable_incremental_sort = on +#enable_indexscan = on +#enable_indexonlyscan = on +#enable_material = on +#enable_memoize = on +#enable_mergejoin = on +#enable_nestloop = on +#enable_parallel_append = on +#enable_parallel_hash = on +#enable_partition_pruning = on +#enable_partitionwise_join = off +#enable_partitionwise_aggregate = off +#enable_presorted_aggregate = on +#enable_seqscan = on +#enable_sort = on +#enable_tidscan = on +#enable_group_by_reordering = on + +# - Planner Cost Constants - + +#seq_page_cost = 1.0 # measured on an arbitrary scale +#random_page_cost = 4.0 # same scale as above +#cpu_tuple_cost = 0.01 # same scale as above +#cpu_index_tuple_cost = 0.005 # same scale as above +#cpu_operator_cost = 0.0025 # same scale as above +#parallel_setup_cost = 1000.0 # same scale as above +#parallel_tuple_cost = 0.1 # same scale as above +#min_parallel_table_scan_size = 8MB +#min_parallel_index_scan_size = 512kB +#effective_cache_size = 4GB + +#jit_above_cost = 100000 # perform JIT compilation if available + # and query more expensive than this; + # -1 disables +#jit_inline_above_cost = 500000 # inline small functions if query is + # more expensive than this; -1 disables +#jit_optimize_above_cost = 500000 # use expensive JIT optimizations if + # query is more expensive than this; + # -1 disables + +# - Genetic Query Optimizer - + +#geqo = on +#geqo_threshold = 12 +#geqo_effort = 5 # range 1-10 +#geqo_pool_size = 0 # selects default based on effort +#geqo_generations = 0 # selects default based on effort +#geqo_selection_bias = 2.0 # range 1.5-2.0 +#geqo_seed = 0.0 # range 0.0-1.0 + +# - Other Planner Options - + +#default_statistics_target = 100 # range 1-10000 +#constraint_exclusion = partition # on, off, or partition +#cursor_tuple_fraction = 0.1 # range 0.0-1.0 +#from_collapse_limit = 8 +#jit = on # allow JIT compilation +#join_collapse_limit = 8 # 1 disables collapsing of explicit + # JOIN clauses +#plan_cache_mode = auto # auto, force_generic_plan or + # force_custom_plan +#recursive_worktable_factor = 10.0 # range 0.001-1000000 + + +#------------------------------------------------------------------------------ +# REPORTING AND LOGGING +#------------------------------------------------------------------------------ + +# - Where to Log - + +#log_destination = 'stderr' # Valid values are combinations of + # stderr, csvlog, jsonlog, syslog, and + # eventlog, depending on platform. + # csvlog and jsonlog require + # logging_collector to be on. + +# This is used when logging to stderr: +#logging_collector = off # Enable capturing of stderr, jsonlog, + # and csvlog into log files. Required + # to be on for csvlogs and jsonlogs. + # (change requires restart) + +# These are only used if logging_collector is on: +#log_directory = 'log' # directory where log files are written, + # can be absolute or relative to PGDATA +#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern, + # can include strftime() escapes +#log_file_mode = 0600 # creation mode for log files, + # begin with 0 to use octal notation +#log_rotation_age = 1d # Automatic rotation of logfiles will + # happen after that time. 0 disables. +#log_rotation_size = 10MB # Automatic rotation of logfiles will + # happen after that much log output. + # 0 disables. +#log_truncate_on_rotation = off # If on, an existing log file with the + # same name as the new log file will be + # truncated rather than appended to. + # But such truncation only occurs on + # time-driven rotation, not on restarts + # or size-driven rotation. Default is + # off, meaning append to existing files + # in all cases. + +# These are relevant when logging to syslog: +#syslog_facility = 'LOCAL0' +#syslog_ident = 'postgres' +#syslog_sequence_numbers = on +#syslog_split_messages = on + +# This is only relevant when logging to eventlog (Windows): +# (change requires restart) +#event_source = 'PostgreSQL' + +# - When to Log - + +#log_min_messages = warning # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic + +#log_min_error_statement = error # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic (effectively off) + +#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements + # and their durations, > 0 logs only + # statements running at least this number + # of milliseconds + +#log_min_duration_sample = -1 # -1 is disabled, 0 logs a sample of statements + # and their durations, > 0 logs only a sample of + # statements running at least this number + # of milliseconds; + # sample fraction is determined by log_statement_sample_rate + +#log_statement_sample_rate = 1.0 # fraction of logged statements exceeding + # log_min_duration_sample to be logged; + # 1.0 logs all such statements, 0.0 never logs + + +#log_transaction_sample_rate = 0.0 # fraction of transactions whose statements + # are logged regardless of their duration; 1.0 logs all + # statements from all transactions, 0.0 never logs + +#log_startup_progress_interval = 10s # Time between progress updates for + # long-running startup operations. + # 0 disables the feature, > 0 indicates + # the interval in milliseconds. + +# - What to Log - + +#debug_print_parse = off +#debug_print_rewritten = off +#debug_print_plan = off +#debug_pretty_print = on +#log_autovacuum_min_duration = 10min # log autovacuum activity; + # -1 disables, 0 logs all actions and + # their durations, > 0 logs only + # actions running at least this number + # of milliseconds. +#log_checkpoints = on +#log_connections = off +#log_disconnections = off +#log_duration = off +#log_error_verbosity = default # terse, default, or verbose messages +#log_hostname = off +#log_line_prefix = '%m [%p] ' # special values: + # %a = application name + # %u = user name + # %d = database name + # %r = remote host and port + # %h = remote host + # %b = backend type + # %p = process ID + # %P = process ID of parallel group leader + # %t = timestamp without milliseconds + # %m = timestamp with milliseconds + # %n = timestamp with milliseconds (as a Unix epoch) + # %Q = query ID (0 if none or not computed) + # %i = command tag + # %e = SQL state + # %c = session ID + # %l = session line number + # %s = session start timestamp + # %v = virtual transaction ID + # %x = transaction ID (0 if none) + # %q = stop here in non-session + # processes + # %% = '%' + # e.g. '<%u%%%d> ' +#log_lock_waits = off # log lock waits >= deadlock_timeout +#log_recovery_conflict_waits = off # log standby recovery conflict waits + # >= deadlock_timeout +#log_parameter_max_length = -1 # when logging statements, limit logged + # bind-parameter values to N bytes; + # -1 means print in full, 0 disables +#log_parameter_max_length_on_error = 0 # when logging an error, limit logged + # bind-parameter values to N bytes; + # -1 means print in full, 0 disables +#log_statement = 'none' # none, ddl, mod, all +#log_replication_commands = off +#log_temp_files = -1 # log temporary files equal or larger + # than the specified size in kilobytes; + # -1 disables, 0 logs all temp files +log_timezone = 'Etc/UTC' + +# - Process Title - + +#cluster_name = '' # added to process titles if nonempty + # (change requires restart) +#update_process_title = on + + +#------------------------------------------------------------------------------ +# STATISTICS +#------------------------------------------------------------------------------ + +# - Cumulative Query and Index Statistics - + +#track_activities = on +#track_activity_query_size = 1024 # (change requires restart) +#track_counts = on +#track_io_timing = off +#track_wal_io_timing = off +#track_functions = none # none, pl, all +#stats_fetch_consistency = cache # cache, none, snapshot + + +# - Monitoring - + +#compute_query_id = auto +#log_statement_stats = off +#log_parser_stats = off +#log_planner_stats = off +#log_executor_stats = off + + +#------------------------------------------------------------------------------ +# AUTOVACUUM +#------------------------------------------------------------------------------ + +#autovacuum = on # Enable autovacuum subprocess? 'on' + # requires track_counts to also be on. +#autovacuum_max_workers = 3 # max number of autovacuum subprocesses + # (change requires restart) +#autovacuum_naptime = 1min # time between autovacuum runs +#autovacuum_vacuum_threshold = 50 # min number of row updates before + # vacuum +#autovacuum_vacuum_insert_threshold = 1000 # min number of row inserts + # before vacuum; -1 disables insert + # vacuums +#autovacuum_analyze_threshold = 50 # min number of row updates before + # analyze +#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum +#autovacuum_vacuum_insert_scale_factor = 0.2 # fraction of inserts over table + # size before insert vacuum +#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze +#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum + # (change requires restart) +#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age + # before forced vacuum + # (change requires restart) +#autovacuum_vacuum_cost_delay = 2ms # default vacuum cost delay for + # autovacuum, in milliseconds; + # -1 means use vacuum_cost_delay +#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for + # autovacuum, -1 means use + # vacuum_cost_limit + + +#------------------------------------------------------------------------------ +# CLIENT CONNECTION DEFAULTS +#------------------------------------------------------------------------------ + +# - Statement Behavior - + +#client_min_messages = notice # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # log + # notice + # warning + # error +#search_path = '"$user", public' # schema names +#row_security = on +#default_table_access_method = 'heap' +#default_tablespace = '' # a tablespace name, '' uses the default +#default_toast_compression = 'pglz' # 'pglz' or 'lz4' +#temp_tablespaces = '' # a list of tablespace names, '' uses + # only default tablespace +#check_function_bodies = on +#default_transaction_isolation = 'read committed' +#default_transaction_read_only = off +#default_transaction_deferrable = off +#session_replication_role = 'origin' +#statement_timeout = 0 # in milliseconds, 0 is disabled +#transaction_timeout = 0 # in milliseconds, 0 is disabled +#lock_timeout = 0 # in milliseconds, 0 is disabled +#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled +#idle_session_timeout = 0 # in milliseconds, 0 is disabled +#vacuum_freeze_table_age = 150000000 +#vacuum_freeze_min_age = 50000000 +#vacuum_failsafe_age = 1600000000 +#vacuum_multixact_freeze_table_age = 150000000 +#vacuum_multixact_freeze_min_age = 5000000 +#vacuum_multixact_failsafe_age = 1600000000 +#bytea_output = 'hex' # hex, escape +#xmlbinary = 'base64' +#xmloption = 'content' +#gin_pending_list_limit = 4MB +#createrole_self_grant = '' # set and/or inherit +#event_triggers = on + +# - Locale and Formatting - + +datestyle = 'iso, mdy' +#intervalstyle = 'postgres' +timezone = 'Etc/UTC' +#timezone_abbreviations = 'Default' # Select the set of available time zone + # abbreviations. Currently, there are + # Default + # Australia (historical usage) + # India + # You can create your own file in + # share/timezonesets/. +#extra_float_digits = 1 # min -15, max 3; any value >0 actually + # selects precise output mode +#client_encoding = sql_ascii # actually, defaults to database + # encoding + +# These settings are initialized by initdb, but they can be changed. +lc_messages = 'en_US.utf8' # locale for system error message + # strings +lc_monetary = 'en_US.utf8' # locale for monetary formatting +lc_numeric = 'en_US.utf8' # locale for number formatting +lc_time = 'en_US.utf8' # locale for time formatting + +#icu_validation_level = warning # report ICU locale validation + # errors at the given level + +# default configuration for text search +default_text_search_config = 'pg_catalog.english' + +# - Shared Library Preloading - + +#local_preload_libraries = '' +#session_preload_libraries = '' +#shared_preload_libraries = '' # (change requires restart) +#jit_provider = 'llvmjit' # JIT library to use + +# - Other Defaults - + +#dynamic_library_path = '$libdir' +#extension_destdir = '' # prepend path when loading extensions + # and shared objects (added by Debian) +#gin_fuzzy_search_limit = 0 + + +#------------------------------------------------------------------------------ +# LOCK MANAGEMENT +#------------------------------------------------------------------------------ + +#deadlock_timeout = 1s +#max_locks_per_transaction = 64 # min 10 + # (change requires restart) +#max_pred_locks_per_transaction = 64 # min 10 + # (change requires restart) +#max_pred_locks_per_relation = -2 # negative values mean + # (max_pred_locks_per_transaction + # / -max_pred_locks_per_relation) - 1 +#max_pred_locks_per_page = 2 # min 0 + + +#------------------------------------------------------------------------------ +# VERSION AND PLATFORM COMPATIBILITY +#------------------------------------------------------------------------------ + +# - Previous PostgreSQL Versions - + +#array_nulls = on +#backslash_quote = safe_encoding # on, off, or safe_encoding +#escape_string_warning = on +#lo_compat_privileges = off +#quote_all_identifiers = off +#standard_conforming_strings = on +#synchronize_seqscans = on + +# - Other Platforms and Clients - + +#transform_null_equals = off +#allow_alter_system = on + + +#------------------------------------------------------------------------------ +# ERROR HANDLING +#------------------------------------------------------------------------------ + +#exit_on_error = off # terminate session on any error? +#restart_after_crash = on # reinitialize after backend crash? +#data_sync_retry = off # retry or panic on failure to fsync + # data? + # (change requires restart) +#recovery_init_sync_method = fsync # fsync, syncfs (Linux 5.8+) + + +#------------------------------------------------------------------------------ +# CONFIG FILE INCLUDES +#------------------------------------------------------------------------------ + +# These options allow settings to be loaded from files other than the +# default postgresql.conf. Note that these are directives, not variable +# assignments, so they can usefully be given more than once. + +#include_dir = '...' # include files ending in '.conf' from + # a directory, e.g., 'conf.d' +#include_if_exists = '...' # include file only if it exists +#include = '...' # include file + + +#------------------------------------------------------------------------------ +# CUSTOMIZED OPTIONS +#------------------------------------------------------------------------------ + +# Add settings for extensions here diff --git a/exercise8/expense_tracker/db-data/postmaster.opts b/exercise8/expense_tracker/db-data/postmaster.opts new file mode 100644 index 00000000..bcf1d1fc --- /dev/null +++ b/exercise8/expense_tracker/db-data/postmaster.opts @@ -0,0 +1 @@ +/usr/lib/postgresql/17/bin/postgres diff --git a/exercise8/expense_tracker/docker-compose.yml b/exercise8/expense_tracker/docker-compose.yml new file mode 100644 index 00000000..8f6ab9b2 --- /dev/null +++ b/exercise8/expense_tracker/docker-compose.yml @@ -0,0 +1,72 @@ +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Docker Compose reference guide at +# https://docs.docker.com/go/compose-spec-reference/ + +# Here the instructions define your application as a service called "server". +# This service is built from the Dockerfile in the current directory. +# You can add other services your application may depend on here, such as a +# database or a cache. For examples, see the Awesome Compose repository: +# https://github.com/docker/awesome-compose +services: + server: + build: + context: . + target: final + environment: + - API_PORT=80 + - DB_HOST=db + - DB_PORT=5432 + - DB_NAME=$DB_NAME + - DB_USER=$DB_USER + - DB_PASSWORD=$DB_PASSWORD + - SECRET_TOKEN=$SECRET_TOKEN + - PEPPER=$PEPPER + ports: + - ${API_PORT}:80 + depends_on: + db: + condition: service_healthy + + db: + image: postgres + restart: always + volumes: + - ./db-data:/var/lib/postgresql/data + environment: + - POSTGRES_DB=$DB_NAME + - POSTGRES_USER=$DB_USER + - POSTGRES_PASSWORD=$DB_PASSWORD + ports: + - ${DB_PORT}:5432 + healthcheck: + test: [ "CMD", "pg_isready" ] + interval: 10s + timeout: 5s + retries: 5 + + migrate: + image: migrate/migrate + profiles: [ "tools" ] + entrypoint: [ + "migrate", + "-path", + "./migrations", + "-database", + "postgres://$DB_USER:$DB_PASSWORD@db:5432/$DB_NAME?sslmode=disable" + ] + volumes: + - ./migrations:/migrations + depends_on: + db: + condition: service_healthy + +volumes: + db-data: + +# The commented out section below is an example of how to define a PostgreSQL +# database that your application can use. `depends_on` tells Docker Compose to +# start the database before your application. The `db-data` volume persists the +# database data between container restarts. The `db-password` secret is used +# to set the database password. You must create `db/password.txt` and add +# a password of your choosing to it before running `docker compose up`. + diff --git a/exercise8/expense_tracker/go.mod b/exercise8/expense_tracker/go.mod new file mode 100644 index 00000000..c54fe1c4 --- /dev/null +++ b/exercise8/expense_tracker/go.mod @@ -0,0 +1,10 @@ +module tracker + +go 1.23 + +require github.com/golang-jwt/jwt/v5 v5.2.1 + +require ( + github.com/joho/godotenv v1.5.1 // indirect + github.com/lib/pq v1.10.9 // indirect +) diff --git a/exercise8/expense_tracker/go.sum b/exercise8/expense_tracker/go.sum new file mode 100644 index 00000000..f0b2cdb0 --- /dev/null +++ b/exercise8/expense_tracker/go.sum @@ -0,0 +1,6 @@ +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= diff --git a/exercise8/expense_tracker/internal/api/app.go b/exercise8/expense_tracker/internal/api/app.go new file mode 100644 index 00000000..139eeb65 --- /dev/null +++ b/exercise8/expense_tracker/internal/api/app.go @@ -0,0 +1,24 @@ +package api + +import ( + "fmt" + "log" + "net/http" + "os" + + "tracker/internal/db" +) + +func StartServer(dbExpence *db.ExpencesDBSt) error { + mux := http.NewServeMux() + AuthorizationHandlers(mux, dbExpence) + BasicHandlers(mux, *dbExpence) + + port := fmt.Sprintf(":%s", os.Getenv("API_PORT")) + log.Printf("Server is running on port %s\n", port) + server := &http.Server{ + Addr: port, + Handler: mux, + } + return server.ListenAndServe() +} diff --git a/exercise8/expense_tracker/internal/api/handlers.go b/exercise8/expense_tracker/internal/api/handlers.go new file mode 100644 index 00000000..54c9d913 --- /dev/null +++ b/exercise8/expense_tracker/internal/api/handlers.go @@ -0,0 +1,41 @@ +package api + +import ( + "log" + "log/slog" + "net/http" + + "tracker/internal/api/middleware" + "tracker/internal/db" + authdb "tracker/internal/db/auth_db" + "tracker/internal/handler" + authhandler "tracker/internal/handler/auth_handler" + "tracker/internal/service" +) + +func BasicHandlers(mux *http.ServeMux, newdb db.ExpencesDBSt) { + serviceExpence := service.NewServiceExpence(newdb) + handlerExpence := handler.NewHandlerExpence(serviceExpence) + mux.Handle("POST /expense", middleware.AuthMiddleware(http.HandlerFunc(handlerExpence.ExpensesNew))) + mux.Handle("GET /expenses/{id}", middleware.AuthMiddleware(http.HandlerFunc(handlerExpence.ExpensesHandlerGet))) + mux.Handle("GET /balance/{id}", middleware.AuthMiddleware(http.HandlerFunc(handlerExpence.BalanceHandler))) + mux.Handle("PUT /expense/{id}", middleware.AuthMiddleware(http.HandlerFunc(handlerExpence.ExpenseEdit))) +} + +func AuthorizationHandlers(mux *http.ServeMux, newdb *db.ExpencesDBSt) { + logger := slog.With("service", "auth") + authdb := authdb.NewAuthDB(newdb, logger) + if authdb == nil { + log.Println("nil pionter authdb") + + return + } + authHandler := authhandler.NewAuthHandler(authdb, logger) + if authHandler == nil { + log.Println("nil pionter authHandler") + return + } + + mux.HandleFunc("POST /register", authHandler.Register) + mux.HandleFunc("POST /login", authHandler.Login) +} diff --git a/exercise8/expense_tracker/internal/api/middleware/authentificator.go b/exercise8/expense_tracker/internal/api/middleware/authentificator.go new file mode 100644 index 00000000..20106eff --- /dev/null +++ b/exercise8/expense_tracker/internal/api/middleware/authentificator.go @@ -0,0 +1,56 @@ +package middleware + +import ( + "context" + "fmt" + "log" + "net/http" + "os" + "strings" + + "tracker/internal/auth" +) + +// type Middleware struct { +// log *slog.Logger +// } + +// func New(log *slog.Logger) *Middleware { +// return &Middleware{ +// log: log, +// } +// } + +func AuthMiddleware(next http.Handler) http.Handler { + a := func(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + authHeader := r.Header.Get("Authorization") + if authHeader == "" { + log.Println("Authorization header is missing") + http.Error(w, "Authorization header is missing", http.StatusUnauthorized) + return + } + if !strings.HasPrefix(authHeader, "Bearer") { + log.Println("Authorization header is invalid") + http.Error(w, "Authorization header is invalid", http.StatusUnauthorized) + return + } + tokenStr := authHeader[len("Bearer "):] + tokenSecret := os.Getenv("SECRET_TOKEN") + fmt.Printf("this token secret: (%s)\n", tokenSecret) + fmt.Printf("this acces token : (%s)\n", tokenStr) + userData, err := auth.ParseToken(tokenStr, tokenSecret) + if err != nil { + http.Error( + w, + http.StatusText(http.StatusUnauthorized), + http.StatusUnauthorized, + ) + log.Println("Unauthorized", "error", err) + return + } + newCtx := context.WithValue(ctx, "user", userData) + next.ServeHTTP(w, r.WithContext(newCtx)) + } + return http.HandlerFunc(a) +} diff --git a/exercise8/expense_tracker/internal/auth/hash.go b/exercise8/expense_tracker/internal/auth/hash.go new file mode 100644 index 00000000..07d05a25 --- /dev/null +++ b/exercise8/expense_tracker/internal/auth/hash.go @@ -0,0 +1,54 @@ +package auth + +import ( + "crypto/hmac" + "crypto/rand" + "crypto/sha512" + "crypto/subtle" + "encoding/base64" + "fmt" +) + +const ( + SaltLength = 16 + PepperLength = 32 + HashLength = 64 + Iterations = 210000 +) + +func HashPassword(pasword, pepper string) (string, string, error) { + salt := make([]byte, SaltLength) + _, err := rand.Read(salt) + if err != nil { + return "", "", fmt.Errorf("error generation salt: %w", err) + } + hash := hashWithSaltAndPepper([]byte(pasword), salt, []byte(pepper)) + hashStr := base64.StdEncoding.EncodeToString(hash) + saltStr := base64.StdEncoding.EncodeToString(salt) + return hashStr, saltStr, nil +} + +func hashWithSaltAndPepper(password, salt, pepper []byte) []byte { + pepperedPassword := append(password, pepper...) + hash := hmac.New(sha512.New, salt) + result := pepperedPassword + for i := 0; i < Iterations; i++ { + hash.Reset() + hash.Write(result) + result = hash.Sum(nil) + } + return result +} + +func VerifyPassword(password, salt, pepper, passwordHash string) (bool, error) { + decodesalt, err := base64.StdEncoding.DecodeString(salt) + if err != nil { + return false, fmt.Errorf("error decode salt: %w", err) + } + decodehash, err := base64.StdEncoding.DecodeString(passwordHash) + if err != nil { + return false, fmt.Errorf("error decode hash: %w", err) + } + newHash := hashWithSaltAndPepper([]byte(password), decodesalt, []byte(pepper)) + return subtle.ConstantTimeCompare(newHash, decodehash) == 1, nil +} diff --git a/exercise8/expense_tracker/internal/auth/register.go b/exercise8/expense_tracker/internal/auth/register.go new file mode 100644 index 00000000..8832b06d --- /dev/null +++ b/exercise8/expense_tracker/internal/auth/register.go @@ -0,0 +1 @@ +package auth diff --git a/exercise8/expense_tracker/internal/auth/token.go b/exercise8/expense_tracker/internal/auth/token.go new file mode 100644 index 00000000..02f724de --- /dev/null +++ b/exercise8/expense_tracker/internal/auth/token.go @@ -0,0 +1,88 @@ +package auth + +import ( + "errors" + "fmt" + "time" + + "tracker/internal/models" + + "github.com/golang-jwt/jwt/v5" +) + +func ParseToken(token, secret string) (*models.UserData, error) { + t, err := jwt.Parse( + token, func(token *jwt.Token) (interface{}, error) { + return []byte(secret), nil + }, + ) + var data *models.UserData + + switch { + case t == nil: + fmt.Println("token is nil") + return nil, fmt.Errorf("invalid token") + case t.Valid: + claims, ok := t.Claims.(jwt.MapClaims) + if !ok { + fmt.Println("token is nil1") + return nil, fmt.Errorf("invalid token") + } + // id, err := claims.GetSubject() + id, ok := claims["sub"].(float64) + if !ok { + fmt.Println(token, secret) + fmt.Println("get subject") + return data, fmt.Errorf("invalid token") + } + + email, ok := claims["email"].(string) + if !ok { + fmt.Println("claims email") + return data, fmt.Errorf("invalid token") + } + data = &models.UserData{ + ID: int(id), + Email: email, + } + return data, nil + case errors.Is(err, jwt.ErrTokenMalformed): + fmt.Println("malformed") + return data, fmt.Errorf("invalid token") + case errors.Is(err, jwt.ErrTokenExpired) || errors.Is(err, jwt.ErrTokenNotValidYet): + fmt.Println("expired") + return nil, err + + case errors.Is(err, jwt.ErrTokenSignatureInvalid): + + fmt.Println("signature") + return nil, fmt.Errorf("invalid signature") + default: + return nil, fmt.Errorf("invalid token") + } +} + +func GenerateToken(user *models.UserData, secret string) (*models.Tokens, error) { + + token := jwt.New(jwt.SigningMethodHS256) + claims := token.Claims.(jwt.MapClaims) + claims["email"] = user.Email + claims["sub"] = user.ID + claims["exp"] = time.Now().Add(time.Minute * 60).Unix() + t, err := token.SignedString([]byte(secret)) + if err != nil { + return nil, fmt.Errorf("error generating token: %w", err) + } + refeshToken := jwt.New(jwt.SigningMethodHS256) + rtClaims := refeshToken.Claims.(jwt.MapClaims) + rtClaims["sub"] = user.ID + rtClaims["exp"] = time.Now().Add(time.Hour * 24).Unix() + rt, err := refeshToken.SignedString([]byte(secret)) + if err != nil { + return nil, fmt.Errorf("error generating token: %w", err) + } + return &models.Tokens{ + AccessToken: t, + RefreshToken: rt, + }, nil +} diff --git a/exercise8/expense_tracker/internal/db/auth_db/db_login.go b/exercise8/expense_tracker/internal/db/auth_db/db_login.go new file mode 100644 index 00000000..df23b077 --- /dev/null +++ b/exercise8/expense_tracker/internal/db/auth_db/db_login.go @@ -0,0 +1,40 @@ +package authdb + +import ( + "context" + "tracker/internal/models" +) + +func (h *AuthentificatorDB) DbLogin(email string, ctx context.Context) (*models.DBModelUser, error) { + log := h.logger.With("method", "DbLogin") + stmt := ` + SELECT id_user, email, password_hash, salt + FROM users_ + WHERE email = $1` + row := h.database.NewDb.QueryRowContext(ctx, stmt, email) + if row.Err() != nil { + log.ErrorContext( + ctx, + "failed to get user", + "error", row.Err(), + ) + return nil, row.Err() + } + user := models.DBModelUser{} + err := row.Scan( + &user.ID, + &user.Email, + &user.PasswordHash, + &user.Salt, + ) + if err != nil { + log.ErrorContext( + ctx, + "failed to scan user", + "error", err, + ) + return nil, err + } + log.InfoContext(ctx, "user found") + return &user, nil +} diff --git a/exercise8/expense_tracker/internal/db/auth_db/register.go b/exercise8/expense_tracker/internal/db/auth_db/register.go new file mode 100644 index 00000000..de021b10 --- /dev/null +++ b/exercise8/expense_tracker/internal/db/auth_db/register.go @@ -0,0 +1,93 @@ +package authdb + +import ( + "context" + "errors" + "log/slog" + + "tracker/internal/db" + "tracker/internal/models" +) + +type AuthDB interface { + DBRegister(ctx context.Context, inp *models.DBModelUser) (*models.DBModelUser, error) + DbLogin(email string, ctx context.Context) (*models.DBModelUser, error) +} + +type AuthentificatorDB struct { + database *db.ExpencesDBSt + logger *slog.Logger + // newdb NewDb +} + +func NewAuthDB(db *db.ExpencesDBSt, slogger *slog.Logger) *AuthentificatorDB { + return &AuthentificatorDB{ + database: db, + logger: slogger, + } +} + +func (h *AuthentificatorDB) DBRegister(ctx context.Context, inp *models.DBModelUser) (*models.DBModelUser, error) { + if h.database.NewDb == nil { + return nil, errors.New("nil poinet sqldb") + } + + log := h.logger.With("method", "Register") + if h.logger == nil { + return nil, errors.New("log is nil") + } + tx, err := h.database.NewDb.Begin() + if err != nil { + log.ErrorContext( + ctx, + "failed to begin transaction", + "error", err, + ) + return nil, errors.New("failed transation") + } + + defer func() { + p := recover() + if p != nil { + tx.Rollback() + slog.Error("panic") + } else if err != nil { + rollbackerr := tx.Rollback() + if rollbackerr != nil { + log.ErrorContext(ctx, "failed to rollback transaction", "rollback_error", rollbackerr) + } + } else { + commitErr := tx.Commit() + if commitErr != nil { + log.ErrorContext(ctx, "failed to commit transction", "commit_transaction", commitErr) + } + } + }() + user := models.DBModelUser{} + stmt := `INSERT INTO users_ (email, password_hash, salt) VALUES ($1, $2, $3) RETURNING id_user, email, password_hash, salt;` + row := tx.QueryRowContext(ctx, stmt, inp.Email, inp.PasswordHash, inp.Salt) + if err := row.Err(); err != nil { + log.ErrorContext( + ctx, + "failed to insert user into database", + "error", err, + ) + return nil, err + } + err = row.Scan( + &user.ID, + &user.Email, + &user.PasswordHash, + &user.Salt, + ) + if err != nil { + log.ErrorContext( + ctx, + "failed to scan user from database", + "error", err, + ) + return nil, err + } + + return &user, nil +} diff --git a/exercise8/expense_tracker/internal/db/balance_db.go b/exercise8/expense_tracker/internal/db/balance_db.go new file mode 100644 index 00000000..99293e6e --- /dev/null +++ b/exercise8/expense_tracker/internal/db/balance_db.go @@ -0,0 +1,20 @@ +package db + +func (e *ExpencesDBSt) DBBalance(id int) (map[string]float64, error) { + stmt := ` + SELECT amount + FROM budget + WHERE id_user = $1; + ` + balance := make(map[string]float64) + row := e.NewDb.QueryRow(stmt, id) + var sum float64 + err := row.Scan( + &sum, + ) + if err != nil { + return nil, err + } + balance["balance"] = sum + return balance, nil +} diff --git a/exercise8/expense_tracker/internal/db/common.go b/exercise8/expense_tracker/internal/db/common.go new file mode 100644 index 00000000..20fa03ad --- /dev/null +++ b/exercise8/expense_tracker/internal/db/common.go @@ -0,0 +1,55 @@ +package db + +import ( + "context" + "database/sql" + "errors" + "fmt" + "log" + "os" + "tracker/internal/models" +) + +type ExpencesDB interface { + Init() (error, *sql.DB) + NewUserDB(newUser models.NewUser) (models.NewUserResponse, error) + DBEditUser(editUser models.EditUserRequest, id int) error + DBBalance(id int) (map[string]float64, error) + DBGetExpenses(id int) (models.TransactionsReponse, error) + DBRegister(ctx context.Context, inp *models.DBModelUser) (*models.DBModelUser, error) + DbLogin(email string, ctx context.Context) (*models.DBModelUser, error) +} + +type ExpencesDBSt struct { + NewDb *sql.DB +} + +func NewExpenceDB() (*ExpencesDBSt, error) { + err, db := Newpostgresql() + if err != nil { + return &ExpencesDBSt{}, err + } + if db == nil { + return nil, errors.New("bd is nil") + } + return &ExpencesDBSt{ + NewDb: db, + }, nil +} + +func Newpostgresql() (error, *sql.DB) { + host := os.Getenv("DB_HOST") + port := os.Getenv("DB_PORT") + user := os.Getenv("DB_USER") + password := os.Getenv("DB_PASSWORD") + database := os.Getenv("DB_NAME") + + info := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", host, port, user, password, database) + log.Println("Waiting for database to be ready...") + fmt.Println("info", info) + newDb, err := sql.Open("postgres", info) + if err != nil { + return err, nil + } + return nil, newDb +} diff --git a/exercise8/expense_tracker/internal/db/edit_user_db.go b/exercise8/expense_tracker/internal/db/edit_user_db.go new file mode 100644 index 00000000..4dc82337 --- /dev/null +++ b/exercise8/expense_tracker/internal/db/edit_user_db.go @@ -0,0 +1,54 @@ +package db + +import ( + "log/slog" + "tracker/internal/models" +) + +func (e *ExpencesDBSt) DBEditUser(editUser models.EditUserRequest, idUser int) error { + budgetId := 0 + tx, err := e.NewDb.Begin() + if err != nil { + return err + } + + defer func() { + p := recover() + if p != nil { + tx.Rollback() + } else if err != nil { + errRollback := tx.Rollback() + if errRollback != nil { + slog.Error("failed to rollback transaction") + } + } else { + errCommit := tx.Commit() + if errCommit != nil { + slog.Error("failed to commit transaction") + } + } + + }() + stmt := ` + UPDATE budget + SET amount= amount - $1 + WHERE id_user = $2 + RETURNING id_budget; + ` + row := tx.QueryRow(stmt, editUser.Expense, idUser) + err = row.Scan( + &budgetId, + ) + if err != nil { + return err + } + query := ` + INSERT INTO transactions (id_user, id_budget, expense, comment, expense_category) + VALUES ($1, $2, $3, $4, $5); + ` + _, err = tx.Exec(query, idUser, budgetId, editUser.Expense, editUser.Comment, editUser.ExpenseCategory) + if err != nil { + return err + } + return nil +} diff --git a/exercise8/expense_tracker/internal/db/get_expenses_db.go b/exercise8/expense_tracker/internal/db/get_expenses_db.go new file mode 100644 index 00000000..84f7d4ca --- /dev/null +++ b/exercise8/expense_tracker/internal/db/get_expenses_db.go @@ -0,0 +1,36 @@ +package db + +import "tracker/internal/models" + +func (e *ExpencesDBSt) DBGetExpenses(id int) (models.TransactionsReponse, error) { + transactions := models.TransactionsReponse{} + transactions.IdUser = id + + stmt := ` + SELECT expense, comment, expense_category, created + FROM transactions + WHERE id_user = $1 + ` + rows, err := e.NewDb.Query(stmt, id) + if err != nil { + return transactions, err + } + defer rows.Close() + for rows.Next() { + transaction := models.Transaction{} + err := rows.Scan( + &transaction.Expense, + &transaction.Comment, + &transaction.ExpenseCategory, + &transaction.CreatedAT, + ) + if err != nil { + return transactions, err + } + transactions.Transactions = append(transactions.Transactions, transaction) + } + if err = rows.Err(); err != nil { + return transactions, err + } + return transactions, nil +} diff --git a/exercise8/expense_tracker/internal/db/new_expences.go b/exercise8/expense_tracker/internal/db/new_expences.go new file mode 100644 index 00000000..b9e4eb92 --- /dev/null +++ b/exercise8/expense_tracker/internal/db/new_expences.go @@ -0,0 +1,49 @@ +package db + +import ( + "log/slog" + "tracker/internal/models" +) + +func (e *ExpencesDBSt) NewUserDB(newUser models.NewUser, id int) (models.NewUserResponse, error) { + stmt := ` + INSERT INTO budget (id_user, amount) + VALUES ($1, $2) + RETURNING id_budget, id_user, amount + ` + + tx, err := e.NewDb.Begin() + if err != nil { + return models.NewUserResponse{}, err + } + + defer func() { + p := recover() + if p != nil { + tx.Rollback() + } else if err != nil { + errRollback := tx.Rollback() + if errRollback != nil { + slog.Error("failed to rollback transaction") + } + } else { + errCommit := tx.Commit() + if errCommit != nil { + slog.Error("failed to commit transaction") + } + } + + }() + + respNewUser := models.NewUserResponse{} + row := tx.QueryRow(stmt, id, newUser.Amount) + err = row.Scan( + &respNewUser.BudgetID, + &respNewUser.UserID, + &respNewUser.Amount, + ) + if err != nil { + return models.NewUserResponse{}, err + } + return respNewUser, nil +} diff --git a/exercise8/expense_tracker/internal/handler/auth_handler/login.go b/exercise8/expense_tracker/internal/handler/auth_handler/login.go new file mode 100644 index 00000000..f933049f --- /dev/null +++ b/exercise8/expense_tracker/internal/handler/auth_handler/login.go @@ -0,0 +1,98 @@ +package authhandler + +import ( + "net/http" + "os" + "tracker/internal/auth" + "tracker/internal/models" + "tracker/utils/request" + "tracker/utils/respone" +) + +func (h *AuthentificatorHandler) Login(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + log := h.logger.With("method", "Login") + requestBody := &models.LoginRequest{} + err := request.RequestJSON(w, r, requestBody) + if err != nil { + log.ErrorContext( + ctx, + "failed parse request body", + "error", err, + ) + http.Error(w, "failed parse request body", http.StatusBadRequest) + return + } + if requestBody.Data == nil { + log.ErrorContext(ctx, "request body is empty") + http.Error(w, "request body is empty", http.StatusBadRequest) + return + } + if requestBody.Data.Email == "" || requestBody.Data.Password == "" { + log.ErrorContext(ctx, "email or password is empty") + http.Error(w, "email or password is empty", http.StatusBadRequest) + return + } + user, err := h.database.DbLogin(requestBody.Data.Email, ctx) + if err != nil { + log.ErrorContext( + ctx, + "failed to get user", + "error", err, + ) + http.Error(w, "failed to get user", http.StatusUnauthorized) + return + } + if user == nil { + log.ErrorContext(ctx, "user not found") + http.Error(w, "user not found", http.StatusUnauthorized) + return + } + valid, err := auth.VerifyPassword(requestBody.Data.Password, user.Salt, os.Getenv("PEPPER"), user.PasswordHash) + if err != nil { + log.ErrorContext( + ctx, + "failed to verify password", + "error", err, + ) + http.Error(w, "failed to verify password", http.StatusUnauthorized) + return + } + if !valid { + log.ErrorContext(ctx, "password is invalid") + http.Error(w, "password is invalid", http.StatusUnauthorized) + return + } + tokens, err := auth.GenerateToken( + &models.UserData{ + ID: user.ID, + Email: user.Email, + }, + os.Getenv("SECRET"), + ) + if err != nil { + log.ErrorContext( + ctx, + "failed to generate token", + "error", err, + ) + http.Error(w, "failed to generate token", http.StatusInternalServerError) + return + } + respBody := &models.Tokens{ + AccessToken: tokens.AccessToken, + RefreshToken: tokens.RefreshToken, + } + err = respone.ResponseJSON(w, respBody, http.StatusOK) + if err != nil { + log.ErrorContext( + ctx, + "failed to response", + "error", err, + ) + http.Error(w, "failed to response", http.StatusInternalServerError) + return + } + log.InfoContext(ctx, "login success") + +} diff --git a/exercise8/expense_tracker/internal/handler/auth_handler/register.go b/exercise8/expense_tracker/internal/handler/auth_handler/register.go new file mode 100644 index 00000000..5e133b19 --- /dev/null +++ b/exercise8/expense_tracker/internal/handler/auth_handler/register.go @@ -0,0 +1,117 @@ +package authhandler + +import ( + "fmt" + "log/slog" + "net/http" + "os" + + "tracker/internal/auth" + authdb "tracker/internal/db/auth_db" + "tracker/internal/models" + "tracker/utils/request" + "tracker/utils/respone" +) + +type AuthHandler interface { + Register(w http.ResponseWriter, r *http.Request) +} + +type RegisterRequest struct { + Data *models.AuthUser `json:"data"` +} +type RegisterResponse struct { + Data *models.Tokens `json:"data"` +} +type AuthentificatorHandler struct { + database authdb.AuthDB + logger *slog.Logger +} + +func NewAuthHandler(authDB *authdb.AuthentificatorDB, slogger *slog.Logger) *AuthentificatorHandler { + return &AuthentificatorHandler{ + logger: slogger, + database: authDB, + } +} + +func (h *AuthentificatorHandler) Register(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + if h.logger == nil { + http.Error(w, "internal server error", http.StatusInternalServerError) + return + } + + log := h.logger.With("method", "Register") + requestBody := &RegisterRequest{} + err := request.RequestJSON(w, r, requestBody) + if err != nil { + log.ErrorContext( + ctx, + "failed parse request body", + "error", err, + ) + http.Error(w, "failed parse request body", http.StatusBadRequest) + return + } + hashPassWOrd, salt, err := auth.HashPassword(requestBody.Data.Password, os.Getenv("PEPPER")) + if err != nil { + log.ErrorContext( + ctx, + "failed hash password", + "error", err, + ) + http.Error(w, "failed hash password", http.StatusInternalServerError) + return + } + user := &models.DBModelUser{ + Email: requestBody.Data.Email, + PasswordHash: hashPassWOrd, + Salt: salt, + } + + dbResp, err := h.database.DBRegister(ctx, user) + if err != nil { + log.ErrorContext( + ctx, + "failed to register user", + "error", err, + ) + http.Error(w, "failed to register user", http.StatusInternalServerError) + return + } + fmt.Printf("id:(%d)\n", dbResp.ID) + fmt.Printf("email:(%s)\n", dbResp.Email) + fmt.Printf("id:(%s)\n", os.Getenv("SECRET_TOKEN")) + + tokenpair, err := auth.GenerateToken(&models.UserData{ + ID: dbResp.ID, + Email: dbResp.Email, + }, os.Getenv("SECRET_TOKEN")) + if err != nil { + log.ErrorContext( + ctx, + "failed to generate token", + "error", err, + ) + http.Error(w, "failed to generate token", http.StatusInternalServerError) + return + } + respbody := &RegisterResponse{ + Data: &models.Tokens{ + AccessToken: tokenpair.AccessToken, + RefreshToken: tokenpair.RefreshToken, + }, + } + err = respone.ResponseJSON(w, respbody, http.StatusOK) + if err != nil { + log.ErrorContext( + ctx, + "failed to response", + "error", err, + ) + http.Error(w, "failed to response", http.StatusInternalServerError) + return + } + log.InfoContext(ctx, "user registered", "email", dbResp.Email) +} diff --git a/exercise8/expense_tracker/internal/handler/balance.go b/exercise8/expense_tracker/internal/handler/balance.go new file mode 100644 index 00000000..d0be4b66 --- /dev/null +++ b/exercise8/expense_tracker/internal/handler/balance.go @@ -0,0 +1,33 @@ +package handler + +import ( + "log/slog" + "net/http" + "strconv" + "tracker/internal/models" + "tracker/utils/respone" +) + +func (h *expensesHandler) BalanceHandler(w http.ResponseWriter, r *http.Request) { + _, ok := r.Context().Value("user").(*models.UserData) + if !ok { + slog.Error("User not found") + http.Error(w, "User not found", http.StatusUnauthorized) + return + } + id := r.PathValue("id") + idInt, err := strconv.Atoi(id) + if err != nil { + slog.Error("incorrect id", "error", err) + http.Error(w, "incorrect id", http.StatusBadRequest) + return + } + balance, err := h.serviceExpence.ServiceBalance(idInt) + if err != nil { + slog.Error("internal server error", "error", err) + http.Error(w, "internal server error", http.StatusInternalServerError) + return + } + respone.ResponseJSON(w, balance, http.StatusOK) + slog.Info("succes balance") +} diff --git a/exercise8/expense_tracker/internal/handler/common.go b/exercise8/expense_tracker/internal/handler/common.go new file mode 100644 index 00000000..0f6b4e9a --- /dev/null +++ b/exercise8/expense_tracker/internal/handler/common.go @@ -0,0 +1,22 @@ +package handler + +import ( + "net/http" + + "tracker/internal/service" +) + +type ExpencesHandler interface { + BalanceHandler(w http.ResponseWriter, r *http.Request) + ExpensesHandlerGet(w http.ResponseWriter, r *http.Request) + ExpensesNew(w http.ResponseWriter, r *http.Request) + ExpenseEdit(w http.ResponseWriter, r *http.Request) +} + +type expensesHandler struct { + serviceExpence service.ServiceExpence +} + +func NewHandlerExpence(expenceService service.ServiceExpence) ExpencesHandler { + return &expensesHandler{serviceExpence: expenceService} +} diff --git a/exercise8/expense_tracker/internal/handler/edit_user.go b/exercise8/expense_tracker/internal/handler/edit_user.go new file mode 100644 index 00000000..2d787bca --- /dev/null +++ b/exercise8/expense_tracker/internal/handler/edit_user.go @@ -0,0 +1,40 @@ +package handler + +import ( + "log/slog" + "net/http" + "tracker/internal/models" + "tracker/utils/request" + "tracker/utils/respone" +) + +func (h *expensesHandler) ExpenseEdit(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + _, ok := ctx.Value("user").(*models.UserData) + if !ok { + http.Error(w, "User not found", http.StatusUnauthorized) + return + } + id := r.PathValue("id") + editUser := &models.EditUserData{} + err := request.RequestJSON(w, r, editUser) + if err != nil { + http.Error(w, "Bad request", http.StatusBadRequest) + slog.Error("failed to write", "error", err) + return + } + err = h.serviceExpence.ServiceEditUser(editUser.RequestUserEdit, id) + if err != nil { + http.Error(w, "status internal server", http.StatusInternalServerError) + slog.Error("failed to write", "error", err) + return + } + err = respone.ResponseJSON(w, nil, http.StatusNoContent) + if err != nil { + http.Error(w, "status internal server", http.StatusInternalServerError) + slog.Error("failed to write", "error", err) + return + } + slog.Info("succes update expense") + +} diff --git a/exercise8/expense_tracker/internal/handler/get_expenses.go b/exercise8/expense_tracker/internal/handler/get_expenses.go new file mode 100644 index 00000000..2936a58a --- /dev/null +++ b/exercise8/expense_tracker/internal/handler/get_expenses.go @@ -0,0 +1,39 @@ +package handler + +import ( + "log/slog" + "net/http" + "strconv" + "tracker/internal/models" + "tracker/utils/respone" +) + +func (h *expensesHandler) ExpensesHandlerGet(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + _, ok := ctx.Value("user").(*models.UserData) + if !ok { + slog.Error("unauthorized user") + http.Error(w, "User not found", http.StatusUnauthorized) + return + } + id := r.PathValue("id") + idInt, err := strconv.Atoi(id) + if err != nil { + slog.Error("incorrect id", "error", err) + http.Error(w, "incorrect id", http.StatusBadRequest) + return + } + transactions, err := h.serviceExpence.ServiceGetExpenses(idInt) + if err != nil { + slog.Error("inernal server error", "error", err) + http.Error(w, "internal server error", http.StatusInternalServerError) + return + } + err = respone.ResponseJSON(w, transactions, http.StatusOK) + if err != nil { + slog.Error("error write json", "error", err) + http.Error(w, "internal server error", http.StatusInternalServerError) + return + } + slog.Info("succes get expense") +} diff --git a/exercise8/expense_tracker/internal/handler/new_expenses.go b/exercise8/expense_tracker/internal/handler/new_expenses.go new file mode 100644 index 00000000..77899295 --- /dev/null +++ b/exercise8/expense_tracker/internal/handler/new_expenses.go @@ -0,0 +1,43 @@ +package handler + +import ( + "log/slog" + "net/http" + "tracker/internal/models" + "tracker/utils/request" + "tracker/utils/respone" +) + +func (h *expensesHandler) ExpensesNew(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + _, ok := ctx.Value("user").(*models.UserData) + if !ok { + slog.Error("Context", "error", "user not found") + http.Error(w, "User not found", http.StatusUnauthorized) + return + } + + authHeader := r.Header.Get("Authorization") + authToken := authHeader[len("Bearer "):] + + newUser := &models.RequestNewUser{} + err := request.RequestJSON(w, r, newUser) + if err != nil { + slog.Error("RequestJSON", "error", err) + http.Error(w, "Bad request", http.StatusBadRequest) + return + } + responseNewUser, err := h.serviceExpence.ServiceNewUser(*&newUser.NewUserRequest, authToken) + if err != nil { + slog.Error("ServiceNewUser", "error", err) + http.Error(w, "Internal server error", http.StatusInternalServerError) + return + } + err = respone.ResponseJSON(w, responseNewUser, http.StatusCreated) + if err != nil { + slog.Error("ResponseJSON", "error", err) + http.Error(w, "Internal server error", http.StatusInternalServerError) + return + } + +} diff --git a/exercise8/expense_tracker/internal/models/edit_user.go b/exercise8/expense_tracker/internal/models/edit_user.go new file mode 100644 index 00000000..9ec47278 --- /dev/null +++ b/exercise8/expense_tracker/internal/models/edit_user.go @@ -0,0 +1,19 @@ +package models + +type EditUser struct { + IdUser int `json:"id_user"` + IdBudget int `json:"id_budget"` + Expense float64 `json:"expense"` + Comment string `json:"comment"` + ExpenseCategory string `json:"expense_category"` +} + +type EditUserData struct { + RequestUserEdit EditUserRequest `json:"data"` +} + +type EditUserRequest struct { + Expense float64 `json:"expense"` + Comment string `json:"comment"` + ExpenseCategory string `json:"expense_category"` +} diff --git a/exercise8/expense_tracker/internal/models/new_user.go b/exercise8/expense_tracker/internal/models/new_user.go new file mode 100644 index 00000000..b13a43f9 --- /dev/null +++ b/exercise8/expense_tracker/internal/models/new_user.go @@ -0,0 +1,13 @@ +package models + +type RequestNewUser struct { + NewUserRequest NewUser `json:"data"` +} +type NewUser struct { + Amount float64 `json:"budget"` +} +type NewUserResponse struct { + UserID int `json:"user_id"` + BudgetID int `json:"budget_id"` + Amount float64 `json:"budget"` +} diff --git a/exercise8/expense_tracker/internal/models/tokens.go b/exercise8/expense_tracker/internal/models/tokens.go new file mode 100644 index 00000000..b1b527f7 --- /dev/null +++ b/exercise8/expense_tracker/internal/models/tokens.go @@ -0,0 +1,6 @@ +package models + +type Tokens struct { + AccessToken string `json:"access_token"` + RefreshToken string `json:"refresh_token"` +} diff --git a/exercise8/expense_tracker/internal/models/transactions.go b/exercise8/expense_tracker/internal/models/transactions.go new file mode 100644 index 00000000..c16ba982 --- /dev/null +++ b/exercise8/expense_tracker/internal/models/transactions.go @@ -0,0 +1,15 @@ +package models + +import "time" + +type TransactionsReponse struct { + IdUser int `json:"id_user"` + Transactions []Transaction `json:"transactions"` +} + +type Transaction struct { + Expense float64 `json:"expense"` + Comment string `json:"comment"` + ExpenseCategory string `json:"expense_category"` + CreatedAT time.Time `json:"created"` +} diff --git a/exercise8/expense_tracker/internal/models/users.go b/exercise8/expense_tracker/internal/models/users.go new file mode 100644 index 00000000..4fd51d34 --- /dev/null +++ b/exercise8/expense_tracker/internal/models/users.go @@ -0,0 +1,21 @@ +package models + +type UserData struct { + ID int `json:"id"` + Email string `json:"email"` +} +type AuthUser struct { + Email string `json:"email"` + Password string `json:"password"` +} +type DBModelUser struct { + ID int `json:"id"` + Email string `json:"email"` + PasswordHash string `json:"password"` + Salt string `json:"salt"` + Created string `json:"created"` + Update string `json:"update"` +} +type LoginRequest struct { + Data *AuthUser `json:"data"` +} diff --git a/exercise8/expense_tracker/internal/service/common.go b/exercise8/expense_tracker/internal/service/common.go new file mode 100644 index 00000000..2a5f6b72 --- /dev/null +++ b/exercise8/expense_tracker/internal/service/common.go @@ -0,0 +1,21 @@ +package service + +import ( + "tracker/internal/db" + "tracker/internal/models" +) + +type ServiceExpence interface { + ServiceNewUser(newUser models.NewUser, authToken string) (models.NewUserResponse, error) + ServiceEditUser(editUser models.EditUserRequest, id string) error + ServiceBalance(id int) (map[string]float64, error) + ServiceGetExpenses(id int) (models.TransactionsReponse, error) +} + +type serviceExpence struct { + dbExpence db.ExpencesDBSt +} + +func NewServiceExpence(dataBase db.ExpencesDBSt) ServiceExpence { + return &serviceExpence{dbExpence: dataBase} +} diff --git a/exercise8/expense_tracker/internal/service/new_user.go b/exercise8/expense_tracker/internal/service/new_user.go new file mode 100644 index 00000000..e0c1ecbc --- /dev/null +++ b/exercise8/expense_tracker/internal/service/new_user.go @@ -0,0 +1,25 @@ +package service + +import ( + "errors" + "math" + "os" + "tracker/internal/auth" + "tracker/internal/models" +) + +func (s *serviceExpence) ServiceNewUser(newUser models.NewUser, authToken string) (models.NewUserResponse, error) { + if newUser.Amount < 0 { + newUser.Amount = math.Abs(newUser.Amount) + } + + userData, err := auth.ParseToken(authToken, os.Getenv("SECRET_TOKEN")) + if newUser.Amount <= 0 || userData.ID == 0 { + return models.NewUserResponse{}, errors.New("user not found") + } + if err != nil { + return models.NewUserResponse{}, err + } + + return s.dbExpence.NewUserDB(newUser, userData.ID) +} diff --git a/exercise8/expense_tracker/internal/service/service_balance.go b/exercise8/expense_tracker/internal/service/service_balance.go new file mode 100644 index 00000000..be3a51cb --- /dev/null +++ b/exercise8/expense_tracker/internal/service/service_balance.go @@ -0,0 +1,10 @@ +package service + +import "errors" + +func (s *serviceExpence) ServiceBalance(id int) (map[string]float64, error) { + if id <= 0 { + return nil, errors.New("incorrect id") + } + return s.dbExpence.DBBalance(id) +} diff --git a/exercise8/expense_tracker/internal/service/service_edit_user.go b/exercise8/expense_tracker/internal/service/service_edit_user.go new file mode 100644 index 00000000..2ce9e31a --- /dev/null +++ b/exercise8/expense_tracker/internal/service/service_edit_user.go @@ -0,0 +1,29 @@ +package service + +import ( + "errors" + "log/slog" + "math" + "strconv" + "tracker/internal/models" +) + +func (s *serviceExpence) ServiceEditUser(editUser models.EditUserRequest, id string) error { + intId, err := strconv.Atoi(id) + if err != nil { + slog.Error("failed to convert id to int", "error", err) + } + if intId <= 0 { + slog.Error("incorrect id") + return errors.New("incorrect id") + } + if editUser.Expense == 0 { + slog.Error("consumprion not specified") + return errors.New("consumprion not specified") + } + if editUser.Expense < 0 { + editUser.Expense = math.Abs(editUser.Expense) + + } + return s.dbExpence.DBEditUser(editUser, intId) +} diff --git a/exercise8/expense_tracker/internal/service/service_get_expences.go b/exercise8/expense_tracker/internal/service/service_get_expences.go new file mode 100644 index 00000000..d2ef2d13 --- /dev/null +++ b/exercise8/expense_tracker/internal/service/service_get_expences.go @@ -0,0 +1,14 @@ +package service + +import ( + "errors" + "tracker/internal/models" +) + +func (s *serviceExpence) ServiceGetExpenses(id int) (models.TransactionsReponse, error) { + if id <= 0 { + return models.TransactionsReponse{}, errors.New("incorrect id") + } + + return s.dbExpence.DBGetExpenses(id) +} diff --git a/exercise8/expense_tracker/migrations/20250107090819_init_profile.down.sql b/exercise8/expense_tracker/migrations/20250107090819_init_profile.down.sql new file mode 100644 index 00000000..0bde5e46 --- /dev/null +++ b/exercise8/expense_tracker/migrations/20250107090819_init_profile.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS users_; diff --git a/exercise8/expense_tracker/migrations/20250107090819_init_profile.up.sql b/exercise8/expense_tracker/migrations/20250107090819_init_profile.up.sql new file mode 100644 index 00000000..28f25a42 --- /dev/null +++ b/exercise8/expense_tracker/migrations/20250107090819_init_profile.up.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS users_ ( + id_user SERIAL PRIMARY KEY, + email TEXT NOT NULL UNIQUE, + password_hash TEXT NOT NULL, + salt TEXT NOT NULL, + created TIMESTAMPTZ NOT NULL DEFAULT NOW() , + updated TIMESTAMPTZ NOT NULL DEFAULT NOW() +); diff --git a/exercise8/expense_tracker/migrations/20250107113632_budget.down.sql b/exercise8/expense_tracker/migrations/20250107113632_budget.down.sql new file mode 100644 index 00000000..f6045819 --- /dev/null +++ b/exercise8/expense_tracker/migrations/20250107113632_budget.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS budget; \ No newline at end of file diff --git a/exercise8/expense_tracker/migrations/20250107113632_budget.up.sql b/exercise8/expense_tracker/migrations/20250107113632_budget.up.sql new file mode 100644 index 00000000..5d812766 --- /dev/null +++ b/exercise8/expense_tracker/migrations/20250107113632_budget.up.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS budget ( + id_budget SERIAL PRIMARY KEY, + id_user INT NOT NULL, + amount DECIMAL(10, 2) NOT NULL DEFAULT 0, + created TIMESTAMPTZ NOT NULL DEFAULT NOW() , + updated TIMESTAMPTZ NOT NULL DEFAULT NOW(), + FOREIGN KEY (id_user) REFERENCES users_(id_user) +); \ No newline at end of file diff --git a/exercise8/expense_tracker/migrations/20250108071010_create_table_transactions.down.sql b/exercise8/expense_tracker/migrations/20250108071010_create_table_transactions.down.sql new file mode 100644 index 00000000..d9c846fc --- /dev/null +++ b/exercise8/expense_tracker/migrations/20250108071010_create_table_transactions.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS transactions; \ No newline at end of file diff --git a/exercise8/expense_tracker/migrations/20250108071010_create_table_transactions.up.sql b/exercise8/expense_tracker/migrations/20250108071010_create_table_transactions.up.sql new file mode 100644 index 00000000..55e69e15 --- /dev/null +++ b/exercise8/expense_tracker/migrations/20250108071010_create_table_transactions.up.sql @@ -0,0 +1,12 @@ +CREATE TYPE category AS ENUM ('groceries', 'leisure', 'electronics', 'utilities', 'clothing', 'health', 'others'); +CREATE TABLE IF NOT EXISTS transactions ( + id_transaction SERIAL PRIMARY KEY, + id_user INT NOT NULL, + id_budget INT NOT NULL, + expense DECIMAL(10, 2) NOT NULL DEFAULT 0, + comment TEXT, + expense_category category NOT NULL DEFAULT 'others', + created TIMESTAMPTZ NOT NULL DEFAULT NOW() , + FOREIGN KEY (id_user) REFERENCES users_(id_user), + FOREIGN KEY (id_budget) REFERENCES budget(id_budget) +); \ No newline at end of file diff --git a/exercise8/expense_tracker/utils/request/body.go b/exercise8/expense_tracker/utils/request/body.go new file mode 100644 index 00000000..fa7aad71 --- /dev/null +++ b/exercise8/expense_tracker/utils/request/body.go @@ -0,0 +1,67 @@ +package request + +import ( + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "strings" + + statuserror "tracker/utils/status_error" +) + +func RequestJSON(w http.ResponseWriter, r *http.Request, dst interface{}) error { + ct := r.Header.Get("Content-Type") + if ct != "" { + typeC := strings.ToLower(ct) + cType := strings.TrimSpace(strings.Split(typeC, ";")[0]) + if cType != "application/json" { + msg := "Content-Type header is not application/json" + return statuserror.New(http.StatusUnsupportedMediaType, msg) + } + } + r.Body = http.MaxBytesReader(w, r.Body, 1048576) + decoder := json.NewDecoder(r.Body) + decoder.DisallowUnknownFields() + err := decoder.Decode(&dst) + if err != nil { + var syntaxError *json.SyntaxError + var unmarchalTypeError *json.UnmarshalTypeError + switch { + case errors.As(err, &syntaxError): + msg := fmt.Sprintf("Request body contains badly-formed json (at position %d)", syntaxError.Offset) + return statuserror.New(http.StatusBadRequest, msg) + case errors.Is(err, io.ErrUnexpectedEOF): + msg := "Request body contains badly-formed json" + return statuserror.New(http.StatusBadRequest, msg) + case errors.As(err, &unmarchalTypeError): + msg := fmt.Sprintf( + "Request body contains an invalid value for the %q field (at position %d)", + unmarchalTypeError.Field, + unmarchalTypeError.Offset, + ) + return statuserror.New(http.StatusBadRequest, msg) + case strings.HasPrefix(err.Error(), "json: unknown field "): + fieldName := strings.TrimPrefix(err.Error(), "json: unknown field ") + msg := fmt.Sprintf("Request body contains unknown field %s", fieldName) + return statuserror.New(http.StatusBadRequest, msg) + case errors.Is(err, io.EOF): + msg := "Request body must not be empty" + return statuserror.New(http.StatusBadRequest, msg) + case err.Error() == "http: request body too large": + msg := "Request body must not be larger than 1MB" + return statuserror.New(http.StatusRequestEntityTooLarge, msg) + default: + return err + } + + } + err = decoder.Decode(&struct{}{}) + if !errors.Is(err, io.EOF) { + msg := "Request body must only contain a single json object" + return statuserror.New(http.StatusBadRequest, msg) + + } + return nil +} diff --git a/exercise8/expense_tracker/utils/respone/response.go b/exercise8/expense_tracker/utils/respone/response.go new file mode 100644 index 00000000..f14224ae --- /dev/null +++ b/exercise8/expense_tracker/utils/respone/response.go @@ -0,0 +1,22 @@ +package respone + +import ( + "encoding/json" + "net/http" +) + +func ResponseJSON(w http.ResponseWriter, data interface{}, status int) error { + if data == nil { + w.WriteHeader(http.StatusNoContent) + return nil + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + err := json.NewEncoder(w).Encode(data) + if err != nil { + http.Error(w, "failed to encode response", http.StatusInternalServerError) + return err + } + return nil +} diff --git a/exercise8/expense_tracker/utils/status_error/common.go b/exercise8/expense_tracker/utils/status_error/common.go new file mode 100644 index 00000000..b7d9b056 --- /dev/null +++ b/exercise8/expense_tracker/utils/status_error/common.go @@ -0,0 +1,18 @@ +package statuserror + +type StatusError struct { + status int + msg string +} + +func New(status int, msg string) error { + return &StatusError{status, msg} +} + +func (st *StatusError) Error() string { + return st.msg +} + +func (st *StatusError) Status() int { + return st.status +} diff --git a/exercise9/README.md b/exercise9/README.md new file mode 100644 index 00000000..5d54880e --- /dev/null +++ b/exercise9/README.md @@ -0,0 +1,42 @@ +# Exercise 9 + +Project + +## Teams + +Team 1 + +1. Имангали Аскар (controller) +2. Зернов Владислав (controller) +3. Курмашев Сабит (api) +4. Кабулов Нуртас (api) +5. Омаров Темирлан (db) +6. Сагиндиков Меирбек (db) + +Team 2 + +1. Тұрарова Айзада (controller) +2. Толеу Аян (controller) +3. Мырзаханов Алинур (api) +4. Еркибаев Зураб (api) +5. Бақатай Ақжол (db) +6. Бимаканова Мадина (db) + +Team 3 + +1. Кабдылкак Арнур (controller) +2. Калкин Ернар (controller) +3. Манкенов Арай (api) +4. Усербай Асылбек (api) +5. Камбаров Руслан (db) +6. Қайратұлы Шыңғысхан (db) + +Team 4 + +1. Жақуда Жарқынай (controller) +2. Жантасов Адлет (controller) +3. Туралин Аргын (api) +4. Алтынбек Жандос (api) +5. Жакупов Жандаулет (db) +6. Мұхаметқали Арайлым (db) +7. Кемалатдин Ғалымжан (your choice) diff --git a/exercise9/go.mod b/exercise9/go.mod new file mode 100644 index 00000000..72f28b6f --- /dev/null +++ b/exercise9/go.mod @@ -0,0 +1,3 @@ +module github.com/talgat-ruby/exercises-go/exercise9 + +go 1.23.5 diff --git a/internal/cli/studentsBranch/main.go b/internal/cli/studentsBranch/main.go index b2b4d6cd..a26d211a 100644 --- a/internal/cli/studentsBranch/main.go +++ b/internal/cli/studentsBranch/main.go @@ -7,7 +7,7 @@ import ( "os" ) -//go:embed students.txt +// go:embed students.txt var studentsData string func main() {