The Two Types of Random | Game Maker’s Toolkit
Articles Blog

The Two Types of Random | Game Maker’s Toolkit

January 16, 2020

Video games are full of randomness. There are roguelikes with procedurally-generated
level layouts. Role-playing games with random encounters. Strategy games with unlucky misses. And games that play with cards, dice, roulette
wheels, and random number generators, or RNG. It’s all the same stuff, really: situations
and systems where the outcome is not fully determined by the developer or the player,
but driven by the unpredictable whims of lady luck. But while randomness is responsible for some
truly wonderful moments in gaming, it can also be a cruel mistress that leads to unfair
outcomes and frustrating failures. RNGesus – who is the personification of luck
in the gaming community – is cursed just as often as he’s worshiped. So, what gives? Why does this single game design tool lead
to such radically different reactions? Do we just like luck when it lands in our
favour, and hate it when we lose? No, I don’t think so. The truth is, some game designers actually
split randomness into two distinctly different concepts – and recognising these differences
can be the secret to wrangling RNG, and making luck more fun than frustrating. I’m Mark Brown, you’re watching Game Maker’s
Toolkit, and this is the two types of random. Before we get to that, though, I think we
need to talk about why randomness is used in game design, at all. For starters, randomness is used to provide
variety. Well-made algorithms can pump out practically
infinite set-ups, levels, characters, and problems. Sure, a procedurally generated level is almost
never as good as a completely hand-crafted one – but the clear advantage is diversity
and quantity. You couldn’t make a game like Shadow of
Mordor, with its unique cast of Orc captains; or Minecraft, with its infinitely-large worlds,
without a big dollop of randomness. Some games generate content once, and then
distribute that to all players – that’s how every No Man’s Sky player gets to explore
the same set of, uh, 18 quintillion planets. Other games generate new content every time
you play, which is how games in the roguelike genre work. That can be beneficial because by removing
the ability to endlessly replay the same level and memorise every aspect of the stage, players
are forced to master the underlying mechanics of the game itself – so they’re ready for
absolutely anything the algorithm might throw at them. Randomness is also a way to balance a multiplayer
game. Basically, lucky rolls and unlucky draws can
limit the importance of pure skill, and give newer players a chance to get ahead. That’s especially true when the randomness
is weighted in favour of new players, such as in Mario Kart where the random item boxes
are way more generous to the players at the back of the pack, than those in first place. This is usually only desirable when it’s
expected that players of vastly different skill levels will be playing together – otherwise,
the randomness can obscure who is actually the most skilled combatant. So that’s why it appears more often in party
games and board games for families, and not esport-level stuff. Randomness can also be used to make rewards
in games more exciting. Grabbing an awesome new weapon from a dead
body in a looter shooter like Borderlands is way more exciting when you know there was
only a small chance for that gun to drop. This can, of course, be taken to the extreme,
creating a Skinner box trick that’s designed to sap your time or, more perniciously, your
wallet. And finally, randomness can play a role in
the player’s formation of plans – which are strategies that take a number of steps
to achieve. Making plans requires information – which
is essentially the current state of the game’s variables like the enemy’s location, health,
and perhaps even their intention for what they’ll do on the next turn. The more information we have, the better our
plans can be. But too much information can actually be quite
troublesome. For one, complete transparency can lead to
players being able to calculate many possible moves into the future to figure out the optimum
choice – a paralysis of analysis which can be super tedious, but you already know how
players can optimise the fun out of a game. This can already happen on a single turn of
Into the Breach, which is a tactics game that shows you the entire board and every enemy’s
plan for their upcoming turn. You can spend 10, 20 minutes just staring
at a static screen, figuring out the ramifications of every choice you might make. Plus, we can create airtight plans which rarely
fail – like in Plants vs Zombies where we get to see the exact cast of upcoming monsters
and can quite easily create the perfect defence. This can create flat and uneventful gameplay,
as it’s often much better when plans get disrupted with surprising new information
– forcing us to react, regroup, and replan. There’s never been a good movie where the
heroes come up with a scheme and it just perfectly works as intended. Drama is driven by the unexpected. So we generally want to cap the amount of
information the player has access to. The game designer Keith Burgun calls this
the information horizon, defined as “the distance between the current turn, and the
point at which information becomes known to a player”. And there are four main ways to do this – exponential
complexity, like the ever-expanding matrix of game states in chess. Execution uncertainty, which comes from the
player’s unpredictable ability to carry out skill-based challenges. Hidden information, like the fog-of-war that
hides the enemy’s plans in Starcraft. And, the one we’re talking about today – randomness
– like not knowing what the enemies will do on the next turn in Into the Breach. You can’t make perfect plans if certain
factors are, by design, completely unpredictable. So, randomness certainly has a role in game
design. But to really get to grips with it, we need
to break it down into two types – which game designers frequently refer to as input randomness,
and output randomness. Input randomness is when a random event occurs
before the player gets to make a decision. The most obvious take on this is the procedurally
generated levels in a roguelike, because they’re cobbled together and then you get to play
in them. Other examples are drawing a hand of cards
before taking your turn in a deckbuilder, or rolling dice and then choosing where to
spend them in Dicey Dungeons. Output randomness, though, is when you make
a decision and then luck takes over and the game tells you what happened. The most infamous example of this is hit chances
in XCOM, where you tell your soldier to shoot an alien – but it’s down to chance whether
your bullets will actually hit their target. Other examples are not knowing what the enemy
will do until after you press “End Turn” or, I guess, paying for a lootbox and only
afterwards being told what was in it. I’ve heard the same concepts be called pre-luck
and post-luck, by Civilzation 4 designer Soren Johnson. But let’s stick to input and output for
this video. These two terms were first introduced, as
far as I can tell, on the podcast Ludology GEOFF ENGELSTEIN: “In general, I find this distinction
between input and output randomness to be very valuable. I think this is the fundamental difference
between randomness that supports strategy, and randomness that undercuts strategy”. The host, Geoff Engelstein, makes a good point
there. Output randomness is certainly more responsible
for anger and resentment than input randomness. Output can take away control, and break your
plans not out of strategic incompetence but sheer bad luck. And most of the random stuff we like the least
in games can be labeled as output randomness – such as random encounters and loot boxes. So certain developers are becoming privy to
this – after FTL, which was stuffed to bursting with swingy output randomness, Subset made
Into the Breach which almost exclusively features input randomness – leading to a much fairer
and more strategic game. And while early builds of Slay the Spire hid
what the enemies were planning to do until after you finished your turn, the devs found
the game was way more fun when they switched things so the random choice happened at the
start of your turn – allowing you to strategise around your foes. Output became input. But I don’t think it’s just a case of
input randomness equals good, output randomness equals bad. They’re both tools that must be used wisely,
and poorly designed input randomness can wreck a game, just like carefully tuned output randomness
can, sometimes, improve it. With input randomness, these unpredictable
starting conditions can sometimes massively dictate the likelihood of success. So in Spelunky, these crates have random items
in them. You’re much more likely to get something
mediocre like bombs or ropes than something amazing like a shotgun or jetpack – but if
you are so lucky as to get one of these items at the start of the game, you’re going to
have a much easier time of things. This can make it hard to tell if your success
was down to skill, or just good luck. And it can also make runs where you don’t
get the goodies feel slightly pointless. Some speedrunners will just restart the game
over and over again until luck is in their favour, and they get good items in an early
crate or shop. To be fair, this does lend Spelunky an interestingly
spiky texture. But designers have found some clever new ways
to present random starting conditions. In Slay the Spire, the devs didn’t want
you to just hit restart until you got some really powerful cards or a relic at the beginning
of your run. So they introduced a system where you start
the game with additional bonuses – but only if you made it to the first boss on your previous
go. This encourages players to at least try to
play with the stuff they’re given, and who knows – maybe they’ll still find a strategy
that can see them be victorious. Another way is to control the randomness in
some fashion, to reduce the chaos that it can bring. When setting up the tabletop game Pandemic,
you start by removing all of the epidemic cards from the play deck. These cards are terrifying game-changing events
that can completely demolish your team. You then split the remaining cards into four
piles, and shuffle one epidemic card into each. Finally, you stack the four piles together
to create a finished deck. It’s a bit of a faff, but it’s a clever
way of ensuring that you always have a pretty fair game, where epidemic events happen evenly
throughout the adventure. It’s impossible to have, say, three epidemics
at the very start, or no epidemics until long after you’ve cured all the diseases. But there’s still a chance of getting two
epidemics in a row, or having an epidemic on the very first turn – though, neither of
these would break the game, and the odds are slim enough for those to be exciting, surprising,
one-off events. I’ve never said the word epidemic so many
times. And, actually, lots of games put limits on
their randomness. Diablo 3 has a smart loot system, where you’re
more likely to find items that match the character class you’re playing – to reduce the likelihood
of finding pointless hats and swords. And in modern versions of Tetris, the game
doesn’t just pick a block at random for every drop. Instead, the game generates a random sequence
of all seven blocks and then delivers them in that order – before making a new sequence. This ensures that you’ll always get a diverse
selection of blocks, and there’s an absolute maximum of twelve garbage blocks between two
gorgeous I-blocks. Sometimes called line pieces, or Colin Blocksworth. And, for what it’s worth, while Spelunky
typically has a low chance of randomly giving you one of these icky dark levels – the game
won’t spawn one if you finished the previous stage in under 20 seconds, just to be merciful
to speedunners. Another thing to consider is how often are
new input randomness events occurring? If these occur at the start of every single
turn, it can have the effect of drawing the information horizon in claustrophobically
close – and stopping you from making plans that last any time at all. Designers should, ideally, consider their
game’s information flow – a term invented by Ethan Hoeppner in the article Plan Disruption. He points to XCOM, where we can make strategic
plans about how we want to approach each mission and for a good few turns our plan will be
pretty viable – not perfect, thanks to all the output randomness. But close enough. But every now and again, you’ll stumble
onto a new pod of enemies, or a fresh bunch of foes will descend onto the battlefield. This unexpected spike in new information disrupts
your plans and forces you to stop, regroup and rethink. He says “a good pattern to follow is the
spiky information flow, in which high-impact information is collected into discrete spikes
that happen at regular intervals, with a slow, regular flow of information between the spikes”. As for output randomness – you might wonder
why developers would want to use it at all. Well, for starters, this sort of randomness
can be a good way of simulating mistakes and inaccuracies in a game with an abstract combat
system – which is games where you tell characters to perform an action rather than doing the
action yourself. If your units never missed, then that wouldn’t
be particularly realistic. Also, output randomness forces players to
think about risk management, and to create contingency plans if things go wrong – which
I think are totally valid skills to test. There’s this idea that output randomness
essentially becomes input randomness for the next turn, because you’ll be dealing with
the consequences of whatever just happened. Essentially: the best XCOM players are those
who have a backup plan if their shots miss. And there are also methods to make output
randomness feel more fun. One way is to get away from binary hit or
miss mechanics. In Phoenix Point – which comes from original
XCOM designer Julian Gollop – each bullet fired is simulated through a ballistics system
so you might find that some of your bullets hit, and some of them miss – which is way
less annoying than XCOM’s punitive complete miss. It can also be important to show the player
the odds, because this allows them to make way more informed decisions about which risks
they’re willing to take, or how their actions – like moving closer to the enemy – can impact
their chances of success. Unfortunately, though, humans are just really
bad at understanding odds. That’s thanks to countless cognitive biases
in our pattern-seeking brains that make it really hard to deal with random numbers. In fact, game developers frequently lie about
the actual chances of things happening, so the probability in games better matches the
broken probability in our heads. The numbers in most Fire Emblem games are
subtly massaged in the player’s favour so – for example – a 90% chance to hit is actually
more like a 99% chance. If you lose two 33% chance battles in Civilization,
the third will always succeed because that’s how we think numbers work. And there’s allegedly a pity timer in Hearthstone,
to ensure you’ll always get a legendary card after a certain number of empty packs. If number manipulation isn’t your thing,
one of the best ways to get around this is to ditch those cold, unknowable computer calculations
in favour of recognisable, real-world mechanisms – like a six-sided die. Zach Gage, creator of the dice-filled space
survival game Tharsis, says “we understand things that we can hold in our hand. When things get abstract, especially with
math, it becomes very difficult. Human beings just have this innate understanding
of stuff that we can touch and hold and turn, and look at. The dice in Tharsis are an analogue for something
everyone is familiar with”. Tharsis, and the similarly tabletop-inspired
Armello, even include physics systems to drive their digital dice – in an effort to make
them seem even more realistic. Other games use cards – another familiar,
real-world favourite. Cards are interesting because where dice feature
independent probability – i.e. each throw of the die has zero impact on the next one
– cards can have dependent probability – i.e. by drawing a card and removing it from the
deck, you’ve now changed the makeup of the deck and impacted the probability of the next
draw. It’s the latter that makes it possible to
rack up ridiculously fun synergies in Slay the Spire. It can also be good to have output randomness
in places that will only ever be in the player’s favour. The only real example of output randomness
in Into the Breach is the game’s building defence system where there’s a very small
chance that the enemy’s attack will actually miss and save you from surefire defeat. It’s so small that you never actually count
on it to save it you, but boy does it feel good when it lands. Here’s the game’s co-designer, Justin
Ma. JUSTIN MA: “We found that if there’s randomness where
you’re expecting something bad and then you get something good, no one ever ever complains. So that’s the only kind of randomness, output
randomness, that we left in the game”. So randomness can be an incredibly important
part of games. It’s used for variety, balance, rewards,
the information horizon, and probably more things I’ve forgotten about. But because it can impact everything from
fairness to player psychology, it’s something that designers must use with great care and
attention. Understanding the difference between input
and output randomness is perhaps the most important thing to learn – but it’s also
crucial to realise that neither of these is a silver bullet or a dastardly trap. Both can endanger or improve a game’s design
– depending on how they are used. But when used correctly, randomness can do
amazing things. It can create surprises and unique situations. It can force the constant reevaluation of
strategies. And it can turn players into risk-calculating
tacticians. Thanks so much for watching. I’ve put some links in the description to
some resources if you want to learn more about the technical side of random number generation. And also to head off the comments about how
computers can’t do “true randomness”. I also want to give a huge thank you to my
patrons – especially those who helped contribute towards this video in my new GMTK Workshop. It’s a thing for $5 backers, where they
get to see early versions of certain new videos, and provide feedback or suggestions. Their help was invaluable on this episode.

Only registered users can comment.

  1. That very last phrase…
    "And it can turn players into risk-calculating tacticians"

    A big argument against random bullet spread in Battlefield that i've always seen is that randomness kills tactic and skillfull play, but while that can be said for a shooter in which there is true ramdomness, that is not the case for battlefield's spread system (well, bf4's at least)
    I always divided rng into "true ramdomness" and "calculable randomness"
    Which is similar into concept to what has been used here…
    True randomness has even, insurmountable odds, there's no way to meet certainty in these cases, like a dice roll, you'll never be sure you can get what you want even if you have a 99%, that's what i call true randomness

    Calculable randomness on the other hand is what battlefield uses for the guns bullet spread

    Yes, the bullets will fly in a somewhat random pattern when you shoot, but they will fly randomly WITHIN A CONE.
    The mistake many fos players make is to trust their sights to the point that the aimpoint should always be where the bullet lands(see cod) that however is not how guns actually work.
    What you should aim with in Battlefield (and irl too given certain optics like the eothech holos) is within a cone.
    When you have an smg, you can expect and you WILL hit someone at very close range, because no matter where the bullet will fly in the bullet spread cone, the cone is smaller than the target, however you can't expect to hit an enemy at 200 meters, but you can still calculate how many chances you'd have to hit 'em based on the ads first shot spread of the gun, choose if the adds are favoranle enough and decide whether to shoot or not, when you decide not to, you'll get to the second step of the firefight and the reason this kind of randomness is good: you'll have to make a tactical choice based around your gun, your skill handling that gun, and positioning of you and the opponent.
    It's not like cod where bar a few cases, all you have to do is point and shoot, almost every engagement outside super close quarters is like this in battlefield, making it more akin in certain case to an online rts with somewhat heavy randomness factors depending on the situation than to a more standard e-sports fps.

  2. On the note of hiding some core game mechanics: there's a hint in Amnesia which says that while your sanity is low, the probability of you being found by monsters is increased. As it turned out, it is a blatant lie created by the devs in order for players to care more about their sanity meter, therefore building the gritty and dark atmosphere of the unknown in the game.

    Frictional Games said that without the pillars built in Amnesia about manipulating the humans' expectations, they would have never created Soma, which is in turn almost fully dedicated to consciousness and exploring the human mind.

  3. i miss Atlas Reactor, it had 0 input randoness since you could see all enemy and ally colldown, build and all damage since it was fix damage, but you had output randomness because you could not see what your enemy was planning, just predict it. It made for incredible mindgames where you would just stand still to bait motion traps like in a dare to show your enemy you knew he would not shoot you because he thought you would dash, or shoot someone that you knew was not going to dash.
    If i am wrong about the concepts please inform me. Maybe it was just 0 input randoness in the start of the game, but once the fog of war applyed (first turn, where you only know where everyone spawned) it it would go back to input randoness since this new turn you don´t have all information(where all enemys moved)

  4. should have said something about evolution of action, so in general, mechanics in games like "go" and pandemic's fafy verson, where earlly action is violent and what seems like randomness get high or lower depending on your refinement of action vs epidemic.

  5. These videos feel like lectures. By that I mean they're structured and flow from one topic to the next efficiently. I really enjoy your video style.

  6. An example that sticks out to me is in Chaos: Reborn, where you summon monsters and creatures to kill the enemy player who is also conjuring things to kill you, you can summon an illusion that is easily dispelled with a 100% chance to succeed or you can try to conjure the real thing with a worse chance of succeeding. Along with being able to use mana to increase your odds it creates a really cool psychology turn based strategy that hasn't had any other game captivate me more.

  7. Whats the name of the game that looks kinda like Advance Wars at 5:15 & 13:32? Seems like something I would very much be interested in.
    Also saw the list of games in the description but my god thats too many to go through aha.

  8. I think I personally love randomness in games (specifically roguelikes) is it forces me to adapt or fail. That challenge to think creatively or take risks is probably one of the most rewarding and exciting experiences in gaming. It’s a different kind of skill.

  9. What about a game like DnD that game is almost entirely based on output randomness however it has been popular for decades. I’m curious on why that game is so popular despite using that randomness. Great video btw

  10. The computers don't do true randomness idea is kind of silly. There is no such thing as a truly random result, just results determined by factors you don't or can't know. Physics determines how a dice rolls very deterministically, but there are so many factors involved that a human might as well believe it to be random. And the seed determining the results of the rng calculation is that: a determining factor that's only truly knowable if you intentionally try to deny the randomness by hacking the game.

  11. This was very interesting. Basically knew it all already, but was great to have it all lumped together into one place. Thanks. 🙂

  12. "there's never been a good movie where the characters come up with a plan and it just works" did you mean: the entire oceans series

  13. The good and wise Rich Evans once said: "Xcom teaches you statistics. Because you will soon realize that a 75% chance to hit, is actually a 25% chance to miss."
    These words still ring true.

  14. When dealing a game of solitaire it's possible to lose with the shuffle you made..and it's random right? Since you are shuffling the cards and then playing them does that make it input or output randomness? Cause you did the shuffling yourself before you played but you could consider the shuffling your first move in the game. Or even how you sort your cards, doing each stack one at a time or laying one down, next row, next row, etc?? I'm so interested in this topic now but I play few random games because of the bad outcomes ;;

  15. It took you 6:30 seconds to say that it's better when the randomness happens before a decision not after it. and they you kept talking without saying anything for another 13 minutes.

  16. Pokémon has a lot of examples of "randomness", ranging from encounters with wild Pokémon in their territory (including what kind of Pokémon is actually encountered, right down to the IVs, nature, ability etc.) to battle RNG (as in attacks missing, critical hits, damage ranges, whether or not the secondary effect of a move activates, etc.) to egg RNG (as in which IVs are passed down from which parent and which IVs are generated at random as well as other attributes such as nature and ability, including whether or not a hidden ability is inherited if there even is one on the female (or the male if breeding with a Ditto); in gens 6 and 7, the egg RNG didn't advance until an egg was generated, whereas in gen 8, it advances in real time; I learned this the hard way when I was trying to breed for a certain Pichu) and finally (should this even count?) wonder trading (which was renamed "surprise trading" effective gen 8) which is actually based on who else is offering a Pokémon to trade over the internet–that is, true random noise (which is technically "input randomness") as opposed to pseudorandom. Battle RNG is "output randomness" which effectively becomes "input randomness" for future turns; gen 8 brought in the overworld encounters that were praised in let's go and still integrated them with surprise encounters, so some combination of "input" and "output randomness", and even then, a wild Pokémon's summary is treated as hidden information until it is caught, except for the species itself (and form if applicable), gender, whether or not it's shiny, whether or not it's a gigantamax instead of a regular dynamax (if in a max raid battle), and (in certain situations) what ability (and hold item, if any) it has; and finally, egg RNG is also "output randomness" with elements of hidden information, effectively the same as a wild Pokémon with the stipulation that Pokémon that hatch from eggs never have the gigantamax factor regardless of whether or not one of the parents is a gigantamax itself.

  17. I think the Diablo games are worth mentioning here. They’re almost entirely “output” randomness but with literally thousands of dice rolls per minute per player, the luck evens out. Arguably a good way of making output randomness feel fair and manageable.

  18. Man, you need to research and mention how random rolls work on some skills in Dota 2. The pseudo-random system is very unique.

  19. He's got it right with the contingency plans and backup plans. When you start layering your plan."ok, so I shoot this most threatening target with him, if he misses I still have this and this to use to kill it. Otherwise they can go for this one, and this one."
    And that's a very simplified version, which does not involve doing math to make sure the right damage is done, checking all the odds and working out what has the best chance, but also gives you the chance to recoup if it goes bad.

    That way, even if the randomness goes badly for me, I just get to feel like a badass genius for still having a strategy. Worst case scenario, it's like the rolling of dice in table top games. The element of risk and failure adds some spice. And sometimes I'll go for the longshot gamble, shooting with a guy with lower chances first because even though it's not the BEST option, if it does work, that first guy can instead pull off something amazing. And it's not like gambling because even if you don't know the results you're informed of the chances and what is affecting them.

  20. In fact, people who are complaining about "5 consequecial miss for a 84%" or something like that , it's not about "small chance", it's about "worst possible". A most reasonable player is a man who considers what to do when the worst possbility happens. But if the game developer provide no tool (maybe more expensive but at least stable and controllable) to overcome the extremely bad luck, the player will feel no reward from their careful planning. Whatever rocket science math there is, a single randomness while player making no mistake shouldn't ruin the whole game. It's not the risky players angered by bad luck, but the conservative ones.

  21. The nasty thing with XCOM, is that you get a hidden 10% increased percentage chance on lower difficulties, and enemies get a flat 10% increase to hit and crit on harder difficulties. It skews your perception to where the game feels unfair because all of a sudden, hit increase is relatively less impactful in getting close to 100% for the player, while the chance for series of bad luck to happen to the player have actually increased by tenfold.

  22. RNG is indeed a cruel mistress. Don't ask me how many wooloo I went through a couple of days ago hunting for a shiny. Awesome video as always! But please no more J.C. jokes.

  23. You should get someone ELSE to do the talking part of your videos, make the script then pass it off to someone that has a nice voice, maybe a deep sexy voice, or just someone not nasally, like, Not a Nails on a chalkboard type of voice. Like yours…please, for the love of god..

  24. 15:03 Many of this may well be save scumming, as XCOM rolls some of the variables in advance, so saving, shooting, loading and making the same shot again will 100% give the same result, but if after loading you do something different, like maybe shooting with some other guy first or moving somewhere, the outcome will change.

  25. I was so happy that I noticed the Tharsis music and even more happily surprised when Tharsis was used as an example

  26. Input and output randomness sounds more descriptive than pre-luck and post-luck. or rather pre/post luck sound like they are describing player actions based on how the line up on chronology relevant to the random event. Which I don't believe has too much space of application?

  27. One of the nicest ways to deal with randomness from my point of view are two things:
    1. Influencable chances. Like statistics from games like Warhammer (Tabletop) or Fire emblem. Depending on the units stats, but also player actions, random chances are raised or lowered. That enables planning in a satisfying way.
    2. Making use of the law of big numbers, basically having lots and lots of random chances go off in quick succession, leading to averaging out. Again, I've been subject to this by tabletop wargaming.

  28. My favorite badge in Paper Mario 2 would give you some random weak bonus at the beginning of fights. It wasn't amazing as gear, it was just lots of fun. It was a free thing, so it was cool. Everybody likes free stuff! And the abilities I never used were ones that wouldn't always work (Output randomness).

    Not a fan at all of lying to players because so many people are ignorant.

  29. I'm not gonna waste 20 minutes of my life on mostly worthless monologue just to be mercifully gifted the content from title… That is if he ever wraps up this bullshit.

Leave a Reply

Your email address will not be published. Required fields are marked *