Compare commits
11 Commits
master
...
developmen
| Author | SHA1 | Date |
|---|---|---|
|
|
bade63dbc3 | |
|
|
c5fdcbe373 | |
|
|
24d1e5b779 | |
|
|
2b2d4931fc | |
|
|
db58957c85 | |
|
|
9786d5b661 | |
|
|
250d8523ec | |
|
|
a4993b02bc | |
|
|
09810d6449 | |
|
|
7887ee2678 | |
|
|
9bd09b0483 |
|
|
@ -0,0 +1,30 @@
|
||||||
|
cmake_minimum_required(VERSION 3.28)
|
||||||
|
project(Drugwars)
|
||||||
|
find_package(Doxygen REQUIRED)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
|
|
||||||
|
add_executable(Drugwars src/main.cpp
|
||||||
|
src/Bag.cpp
|
||||||
|
src/Player.cpp
|
||||||
|
src/Bank.cpp
|
||||||
|
src/LoanShark.cpp
|
||||||
|
src/Region.cpp
|
||||||
|
src/Game.cpp
|
||||||
|
src/RegionManager.cpp
|
||||||
|
|
||||||
|
|
||||||
|
)
|
||||||
|
target_include_directories(Drugwars PRIVATE src/include)
|
||||||
|
|
||||||
|
if(DOXYGEN_FOUND)
|
||||||
|
set(DOXYGEN_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/docs")
|
||||||
|
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/docs/Doxyfile @ONLY)
|
||||||
|
|
||||||
|
add_custom_target(doc ALL
|
||||||
|
COMMAND ${DOXYGEN_EXECUTABLE} docs/Doxyfile
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
COMMENT "Generating API documentation with Doxygen"
|
||||||
|
VERBATIM)
|
||||||
|
endif()
|
||||||
122
main.cpp
122
main.cpp
|
|
@ -1,122 +0,0 @@
|
||||||
#include <iostream>
|
|
||||||
#include <vector>
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
#define MAX_TURNS 30
|
|
||||||
enum Objects{
|
|
||||||
Acid,
|
|
||||||
Weed,
|
|
||||||
Speed,
|
|
||||||
Cocaine,
|
|
||||||
Ludes
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
class Bags{
|
|
||||||
public:
|
|
||||||
|
|
||||||
int max_Number_Items;
|
|
||||||
std::vector<Objects> items;
|
|
||||||
std::map<std::string, std::vector<int>> indexesMap;
|
|
||||||
|
|
||||||
Bags(){
|
|
||||||
indexesMap["Acid"] = std::vector<int>();
|
|
||||||
indexesMap["Weed"] = std::vector<int>();
|
|
||||||
indexesMap["Speed"] = std::vector<int>();
|
|
||||||
indexesMap["Cocaine"] = std::vector<int>();
|
|
||||||
indexesMap["Ludes"] = std::vector<int>();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void setCapacity(int size){
|
|
||||||
this->max_Number_Items = size;
|
|
||||||
|
|
||||||
};
|
|
||||||
void addItem(Objects item){
|
|
||||||
items.push_back(item);
|
|
||||||
addIndexToIndexesMap(item);
|
|
||||||
|
|
||||||
}
|
|
||||||
void addIndexToIndexesMap(Objects item){
|
|
||||||
switch (item) {
|
|
||||||
case Acid:
|
|
||||||
indexesMap["Acid"].push_back(items.size()-1);
|
|
||||||
break;
|
|
||||||
case Weed:
|
|
||||||
indexesMap["Weed"].push_back(items.size()-1);
|
|
||||||
break;
|
|
||||||
case Speed:
|
|
||||||
indexesMap["Speed"].push_back(items.size()-1);
|
|
||||||
break;
|
|
||||||
case Cocaine:
|
|
||||||
indexesMap["Cocaine"].push_back(items.size()-1);
|
|
||||||
break;
|
|
||||||
case Ludes:
|
|
||||||
indexesMap["Ludes"].push_back(items.size()-1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
void addMultipleItems(Objects item, int n){
|
|
||||||
for (int i = 0; i< n;i++){
|
|
||||||
addItem(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
class Basic_Trenchcoat: public Bags{
|
|
||||||
public:
|
|
||||||
Basic_Trenchcoat(): Bags(){
|
|
||||||
this->setCapacity(100);
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class Player{
|
|
||||||
private:
|
|
||||||
int Money = 0;
|
|
||||||
Bags *inventory = new Basic_Trenchcoat();
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
~Player(){
|
|
||||||
delete inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
void addItemsToInventory(Objects items, int n){
|
|
||||||
inventory->addMultipleItems(items,n);
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
class Game{
|
|
||||||
private:
|
|
||||||
Player *player = new Player();
|
|
||||||
int current_Turn = 0;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
void Run(){
|
|
||||||
player->addItemsToInventory(Acid,150);
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
~Game(){
|
|
||||||
delete player;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
Game *main = new Game;
|
|
||||||
main->Run();
|
|
||||||
|
|
||||||
delete main;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Bag.h"
|
||||||
|
|
||||||
|
void Bag::incrementUsedCapacity() {
|
||||||
|
usedCapacity++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bag::decrementUsedCapacity() {
|
||||||
|
usedCapacity--;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bag::setMaxCapacity(int n) {
|
||||||
|
maxCapacity = n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Bag::getMaxCapacity() {
|
||||||
|
return maxCapacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Bag::getUsedCapacity() {
|
||||||
|
return usedCapacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Bag::getAvailableCapacity() {
|
||||||
|
return getMaxCapacity() - getUsedCapacity();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bag::addItem(DrugTypes item) {
|
||||||
|
if (getAvailableCapacity() > 0){
|
||||||
|
items[item] += 1;
|
||||||
|
incrementUsedCapacity();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bag::addMultipleItems(DrugTypes item, int n) {
|
||||||
|
if(getAvailableCapacity() >= n && n > 0){
|
||||||
|
for (int i = 0; i < n; i++){
|
||||||
|
addItem(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int Bag::getAmountInBag(DrugTypes item) {
|
||||||
|
return items[item];
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bag::subtractItem(DrugTypes item) {
|
||||||
|
if (items[item] >= 1){
|
||||||
|
items[item] -= 1;
|
||||||
|
decrementUsedCapacity();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bag::subtractMultipleItems(DrugTypes item, int n) {
|
||||||
|
if (items[item] >= n ){
|
||||||
|
for (int i = 0;i < n;i++){
|
||||||
|
subtractItem(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Bag::Bag(int maxcapacity) {
|
||||||
|
setMaxCapacity(maxcapacity);
|
||||||
|
items[Acid] = 0;
|
||||||
|
items[Weed] = 0;
|
||||||
|
items[Speed] = 0;
|
||||||
|
items[Cocaine] = 0;
|
||||||
|
items[Ludes] = 0;
|
||||||
|
items[Heroin] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bag::~Bag() = default;
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
#include <cmath>
|
||||||
|
#include "Bank.h"
|
||||||
|
|
||||||
|
Bank::Bank(double taxvalue) {
|
||||||
|
setTax(taxvalue);
|
||||||
|
money = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bank::depositMoney(int value) {
|
||||||
|
money += value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bank::withdrawMoney(int value) {
|
||||||
|
if (money >= value){
|
||||||
|
money -= value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int Bank::getMoney() {
|
||||||
|
return money;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bank::updateMoney() {
|
||||||
|
money = std::round(money * (1+tax));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bank::setTax(double value) {
|
||||||
|
tax = value;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Game.h"
|
||||||
|
|
||||||
|
void Game::setup() {
|
||||||
|
Region *ghetto = new Region;
|
||||||
|
Region *centralPark = new Region;
|
||||||
|
Region *manhattan = new Region;
|
||||||
|
Region *conneyIsland = new Region;
|
||||||
|
Region *brooklyn = new Region;
|
||||||
|
regionManager = new RegionManager(ghetto,centralPark,manhattan,
|
||||||
|
conneyIsland,brooklyn);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
#include <cmath>
|
||||||
|
#include "LoanShark.h"
|
||||||
|
|
||||||
|
|
||||||
|
LoanShark::LoanShark(int money, double taxvalue) {
|
||||||
|
setOwnedMoney(money);
|
||||||
|
setTax(taxvalue);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoanShark::setTax(double taxvalue) {
|
||||||
|
tax = taxvalue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoanShark::setOwnedMoney(int money) {
|
||||||
|
ownedMoney = money;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int LoanShark::getOwnedMoney() {
|
||||||
|
return ownedMoney;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoanShark::payLoan(Player *playerreference, int money) {
|
||||||
|
if (playerreference->checkEnoughMoney(money)) {
|
||||||
|
if (money > ownedMoney) {
|
||||||
|
playerreference->decrementMoney(ownedMoney);
|
||||||
|
setOwnedMoney(0);
|
||||||
|
} else {
|
||||||
|
playerreference->decrementMoney(money);
|
||||||
|
ownedMoney -= money;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoanShark::getLoan(Player *playerreference, int money) {
|
||||||
|
ownedMoney += money;
|
||||||
|
playerreference->incrementMoney(money);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoanShark::updateOwnedMoney() {
|
||||||
|
ownedMoney = std::round(ownedMoney * (1+tax));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Player.h"
|
||||||
|
|
||||||
|
void Player::setMoney(int value){
|
||||||
|
money = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Player::getCurrentMoney() {
|
||||||
|
return money;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Player::incrementMoney(int value) {
|
||||||
|
money += value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Player::decrementMoney(int value) {
|
||||||
|
if(money >= value){
|
||||||
|
money -= value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Bag* Player::getInventory(){
|
||||||
|
return inventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player::Player(){
|
||||||
|
setMoney(2500);
|
||||||
|
inventory = new Bag(100);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Player::~Player() {
|
||||||
|
delete inventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Player::checkEnoughMoney(int value) {
|
||||||
|
return money >= value;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
#include "Region.h"
|
||||||
|
|
||||||
|
Region::Region(RegionManager *regionmanagerreference, Places regioname) {
|
||||||
|
setRegionManagerReference(regionmanagerreference);
|
||||||
|
setName(regioname);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Region::setRegionManagerReference(RegionManager *reference){
|
||||||
|
regionManager = reference;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Region::setName(Places regionname){
|
||||||
|
name = regionname;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionManager* Region::getRegionManagerReference(){
|
||||||
|
return regionManager;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
#include "RegionManager.h"
|
||||||
|
|
||||||
|
RegionManager::RegionManager(Region *ghettoref, Region *centralparkref, Region *manhattanref, Region *conneyislandref,
|
||||||
|
Region *brooklynref) {
|
||||||
|
ghetto = ghettoref;
|
||||||
|
centralPark = centralparkref;
|
||||||
|
manhattan = manhattanref;
|
||||||
|
conneyIsland = conneyislandref;
|
||||||
|
brooklyn = brooklynref;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef DRUGWARS_BAG_H
|
||||||
|
#define DRUGWARS_BAG_H
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
enum DrugTypes{
|
||||||
|
Acid,
|
||||||
|
Weed,
|
||||||
|
Speed,
|
||||||
|
Cocaine,
|
||||||
|
Ludes,
|
||||||
|
Heroin
|
||||||
|
};
|
||||||
|
|
||||||
|
class Bag {
|
||||||
|
private:
|
||||||
|
int maxCapacity;
|
||||||
|
int usedCapacity;
|
||||||
|
std::map<DrugTypes,int> items;
|
||||||
|
void incrementUsedCapacity();
|
||||||
|
void decrementUsedCapacity();
|
||||||
|
void setMaxCapacity(int n);
|
||||||
|
public:
|
||||||
|
Bag(int maxcapacity);
|
||||||
|
~Bag();
|
||||||
|
int getMaxCapacity();
|
||||||
|
int getUsedCapacity();
|
||||||
|
int getAvailableCapacity();
|
||||||
|
void addItem(DrugTypes item);
|
||||||
|
void addMultipleItems(DrugTypes item, int n);
|
||||||
|
int getAmountInBag(DrugTypes item);
|
||||||
|
void subtractItem(DrugTypes item);
|
||||||
|
void subtractMultipleItems(DrugTypes item, int n);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //DRUGWARS_BAG_H
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef DRUGWARS_BANK_H
|
||||||
|
#define DRUGWARS_BANK_H
|
||||||
|
|
||||||
|
class Bank{
|
||||||
|
private:
|
||||||
|
int money;
|
||||||
|
double tax;
|
||||||
|
void setTax(double value);
|
||||||
|
public:
|
||||||
|
Bank(double taxvalue);
|
||||||
|
void depositMoney(int value);
|
||||||
|
void withdrawMoney(int value);
|
||||||
|
int getMoney();
|
||||||
|
void updateMoney();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //DRUGWARS_BANK_H
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
#pragma ONCE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "RegionManager.h"
|
||||||
|
#include "Player.h"
|
||||||
|
|
||||||
|
class Game {
|
||||||
|
private:
|
||||||
|
Player *player = new Player();
|
||||||
|
RegionManager *regionManager;
|
||||||
|
public:
|
||||||
|
void setup();
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef DRUGWARS_LOANSHARK_H
|
||||||
|
#define DRUGWARS_LOANSHARK_H
|
||||||
|
|
||||||
|
#include "Player.h"
|
||||||
|
|
||||||
|
class LoanShark{
|
||||||
|
private:
|
||||||
|
int ownedMoney;
|
||||||
|
double tax;
|
||||||
|
void setTax(double taxvalue);
|
||||||
|
void setOwnedMoney(int money);
|
||||||
|
public:
|
||||||
|
LoanShark(int money, double taxvalue);
|
||||||
|
int getOwnedMoney();
|
||||||
|
void payLoan(Player *playerreference, int money);
|
||||||
|
void getLoan(Player *playerreference, int money);
|
||||||
|
void updateOwnedMoney();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //DRUGWARS_LOANSHARK_H
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef DRUGWARS_PLAYER_H
|
||||||
|
#define DRUGWARS_PLAYER_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "Bag.h"
|
||||||
|
|
||||||
|
class Player {
|
||||||
|
private:
|
||||||
|
int money;
|
||||||
|
Bag * inventory;
|
||||||
|
void setMoney(int value);
|
||||||
|
public:
|
||||||
|
Player();
|
||||||
|
~Player();
|
||||||
|
int getCurrentMoney();
|
||||||
|
void incrementMoney(int value);
|
||||||
|
void decrementMoney(int value);
|
||||||
|
Bag *getInventory();
|
||||||
|
bool checkEnoughMoney(int value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //DRUGWARS_PLAYER_H
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
#pragma ONCE
|
||||||
|
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
#include "Bag.h"
|
||||||
|
#include "RegionManager.h"
|
||||||
|
|
||||||
|
|
||||||
|
class RegionManager;
|
||||||
|
|
||||||
|
class Region{
|
||||||
|
private:
|
||||||
|
RegionManager* regionManager;
|
||||||
|
Places name;
|
||||||
|
std::map<DrugTypes,int> prices;
|
||||||
|
void setRegionManagerReference(RegionManager *reference);
|
||||||
|
void setName(Places regionname);
|
||||||
|
public:
|
||||||
|
Region(RegionManager *regionmanagerreference,Places regioname);
|
||||||
|
|
||||||
|
RegionManager *getRegionManagerReference();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
//
|
||||||
|
// Created by gustavomiranda on 27/09/24.
|
||||||
|
//
|
||||||
|
#pragma ONCE
|
||||||
|
|
||||||
|
#include "Region.h"
|
||||||
|
|
||||||
|
|
||||||
|
enum Places{
|
||||||
|
Bronx,
|
||||||
|
Ghetto,
|
||||||
|
Central_Park,
|
||||||
|
Manhattan,
|
||||||
|
Conney_Island,
|
||||||
|
Brooklyn
|
||||||
|
};
|
||||||
|
|
||||||
|
class RegionManager{
|
||||||
|
private:
|
||||||
|
Region *ghetto;
|
||||||
|
Region *centralPark;
|
||||||
|
Region *manhattan;
|
||||||
|
Region *conneyIsland;
|
||||||
|
Region *brooklyn;
|
||||||
|
public:
|
||||||
|
RegionManager(Region *ghettoref, Region* centralparkref, Region* manhattanref, Region* conneyislandref, Region* brooklynref);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_TURNS 30
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue