Open Side Menu Go to the Top
Register
PioSOLVER - postflop equilibrium solver for Holdem PioSOLVER - postflop equilibrium solver for Holdem

08-09-2018 , 07:42 AM
Hi Punter,

Sorry if this has been asked before.
Im trying to run aggregated frequencies analysis over multiple files, however i always get the error message: the given board is specified with two different weights in the script.
I use the given flops and weights from the pio subsets article.
How do i solve this?
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-09-2018 , 01:09 PM
Quote:
Originally Posted by punter11235
For example this:
https://gyazo.com/3dd8a232bf64fd26a3c90bfcef145dce

means 0.25% of the pot. It will be converted to chips for the script purposes (the solver internally only uses accuracy in chips). Please note that we use a dot "." as decimal separator. Please don't use a comma as we use a comma to separate numbers.
Thanks--my question was specifically for writing a script. If I have a starting pot of 20 chips and I want to solve to 0.25% of the pot I would use:

Code:
set_accuracy 0.05
in my script (from 20 * 0.25 / 100 = 0.05), is that correct?
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-09-2018 , 06:19 PM
Quote:
I would like to compare the EV of multiple bet size.

- How can you see the general EV of one bet size on the flop turn and river ?

- Ex : if I use 2 bet size On the turn, and I would like to see if removing or adding one bet size change our EV, how do I proceed ?
The only way to compare is to compare at EVs at the beginning of the tree.
Comparing anywhere else is meaningless because different ranges may make it to that point.
You need to build 2 trees with options varying at one place and even if that place is on the turn or on the river the only way to evaluate value of a betsize/additional option is to compare EVs at root.

Quote:
Im trying to run aggregated frequencies analysis over multiple files, however i always get the error message: the given board is specified with two different weights in the script.
I use the given flops and weights from the pio subsets article.
It this 1.10.18 version?
If yes then please make you only have one script in your folder and only saves from that script are in that folder.

Quote:
in my script (from 20 * 0.25 / 100 = 0.05), is that correct?
Yes, to make double sure you can compare to what our script generation tool does when you input a pot of 20 and 0.25% accuracy.
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-10-2018 , 10:28 AM
One of the things I was very interested in is post-processing a played hand [to see how badly it mis-played? Or not? by either player] - OR sometimes an opponent makes such a strange play that I am perplexed on what to do (or what I should have done)

Does this make sense to build a tree specific to the play of the hand?

Set Ranges to:

OOP [My *exact* hand for example] 7d 8d as the only “range”
IP [Opponents hand] as the assumed range based on pre-flop action

Folds to BU who raises to $25 BB Three Bet to $85

Then set up the specific line for how the hand played out AND also more assumed standard plays?

I guess I would like to play the hand out both ways [actual and optimized] to see how/where the correct/incorrect play took place. Specific Betting etc.

Example:

In addition to the standard bets raises I want to see:
FLOP Bet $75, Call
TURN Check, Bet $175, Raise $440, Call
RIVER Bet $1200 Raise All-In

OR MAYBE ALSO ONLY THE ACTUAL PLAY TOO = SUPER SMALL TREE TO EVALUATE

Pio ver. 1.10.18

Last edited by Ja Mata; 08-10-2018 at 10:36 AM. Reason: Added detail
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-11-2018 , 03:03 AM
Quote:
Does this make sense to build a tree specific to the play of the hand?
Yes, although you want to include all the reasonable options as well. That means that if your opponent checked on the flop as a preflop aggressor you still want to include both a bet and a check in the tree.

Quote:
OOP [My *exact* hand for example] 7d 8d as the only “range”
This won't work. The optimal play for both players depends on their starting range. This means you need approximation of your whole range to start with.

Quote:
Then set up the specific line for how the hand played out AND also more assumed standard plays?
Yes, you need standard plays as well.

Quote:
I guess I would like to play the hand out both ways [actual and optimized] to see how/where the correct/incorrect play took place. Specific Betting etc.
Fortunately in Pio you can see strategies for all hands in all tree branches so even if your opponent made a mistake there still going to be a decent strategy in branches where they shouldn't go in the first place. You can also see how big a mistake was by showing EVs.

Quote:
OR MAYBE ALSO ONLY THE ACTUAL PLAY TOO = SUPER SMALL TREE TO EVALUATE
Yes, it would be super small but also not useful as both players would optimize their play for only existing option which means it would be far away from real optimal play.
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-11-2018 , 03:56 PM
Hi,

Is it possible to convert the EV at the root to EV bb/100 ?

If it's not, how would you proceed to know if one line adds significant EV ?

Ex : I would like to compare two tree, one with one more bet size. PIO gives me 1,2 EV difference how can I significantly evalutate this result ?

Thanks
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-11-2018 , 04:32 PM
Quote:
Is it possible to convert the EV at the root to EV bb/100 ?
Yes, just look at chips and convert them to bb. Then multiply by 100 and you have bb/100

For example if in one tree EV for IP is 57.044 and in another 57.644, 5/10 blinds then the difference is 0.6chips/hand which is 0.06bb/hand which is 6bb/100 hands.
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-11-2018 , 08:59 PM
Hey Punter11235,

Had a question about how the Total EV and Total Equity are derived from the weights, EVs, and equities of individual hands. I want to understand the relationship between the individual hands and totals. For a given node of a tree I copied the weights, EVs, and equities to a spreadsheet. I confirmed the total number of combinations by summing the weights and comparing to Pio. I then took each individual weight and divided it by the sum of all weights to determine it's relative percentage of the range. I then multiplied this figure by the EV and the equity for the matching hand. I then summed these figures to arrive at the total EV and equities, but arrived at figures that were slightly off (for EV I got 314.72 v 313.63 in Pio, for EQ I got 59.90 v 59.54 in Pio). Is my logic correct and is the slight discrepancy just a result of using rounded weights from the copied data, or was there some error in my logic?

Thanks!
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-12-2018 , 03:50 AM
Quote:
I want to understand the relationship between the individual hands and totals. For a given node of a tree I copied the weights, EVs, and equities to a spreadsheet.
Unfortunately using weights to calculate total EVs and EQs is not a correct way to do it. The reason is that there is card removal effect coming from opponent's range. If for example the opponent has a lot of top pairs on Axxxx board we have top pair less frequently in comparison to other parts of our range.

I went ahead and constructed a toy example for you:

Code:
#TreeBuilding#V2
#Range0#JJ,AK
#Range1#AJ,A4
#Board#5s Jh 4h 3d 4s
#Pot#100
#EffectiveStacks#100
#AllinThreshold#67
#AddAllinOnlyIfLessThanThisTimesThePot#500
#RiverConfig.BetSize#100
#RiverConfig.DonkBetSize#100
#RiverConfigIP.BetSize#100
(You can copy it and then go to tools->paste treebuilding config to recreate the tree).

In this tree the board is:
Jh 5s 4s 4h 3d

and our range is:
AK, JJ

opponent's range is:
AJ, A4

Let's look at our equity:
AK: 0
JJ: 100

If we use simple weights to calculate averages we would get:
(16combos * 0 + 3combos * 100) / 19combos ~= 15.7894

Now let's think about real probabilities. We could see that JJ is less likely as every time the opponent gets AJ we can only have JJ in one way. The way to calculate real probability of us having a specific hand is to count matchups and thus:

If we have AK (16 combos) the opponent can have:

1)AJ then it's 16 * 9 = 144 matchups (they have 3 aces and 3 jacks left the deck)
2)A4 then it's 16 * 6 = 96 matchups (they have 3 aces and 2 fours left in the deck)

If we have JJ (3 combos) then:
1)AJ then it's 3 * 4 = 12 matchups (they have the last jack and 4 aces left in the deck)
2)A4 then it's 3 * 8 = 24 matchups (4 aces and 2 fours left in the deck)

Overall it's 144 + 96= 240 vs 12 + 24 = 36 matchups.

Now let's calculate weighted average using those relative probabilities:
(240 * 0 + 36 * 100) / (240 + 36) ~= 13.043

and this is what the viewer shows:
https://gyazo.com/6495953ee453c75d2aa8f62218861948

This is possible to verify on a toy river example but unfortunately with wide ranges on the flop it becomes increasingly difficult to do by hand.

Last edited by punter11235; 08-12-2018 at 03:56 AM.
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-13-2018 , 12:13 AM
Quote:
Originally Posted by punter11235
Unfortunately using weights to calculate total EVs and EQs is not a correct way to do it. The reason is that there is card removal effect coming from opponent's range. If for example the opponent has a lot of top pairs on Axxxx board we have top pair less frequently in comparison to other parts of our range.

I went ahead and constructed a toy example for you:

Code:
#TreeBuilding#V2
#Range0#JJ,AK
#Range1#AJ,A4
#Board#5s Jh 4h 3d 4s
#Pot#100
#EffectiveStacks#100
#AllinThreshold#67
#AddAllinOnlyIfLessThanThisTimesThePot#500
#RiverConfig.BetSize#100
#RiverConfig.DonkBetSize#100
#RiverConfigIP.BetSize#100
(You can copy it and then go to tools->paste treebuilding config to recreate the tree).

In this tree the board is:
Jh 5s 4s 4h 3d

and our range is:
AK, JJ

opponent's range is:
AJ, A4

Let's look at our equity:
AK: 0
JJ: 100

If we use simple weights to calculate averages we would get:
(16combos * 0 + 3combos * 100) / 19combos ~= 15.7894

Now let's think about real probabilities. We could see that JJ is less likely as every time the opponent gets AJ we can only have JJ in one way. The way to calculate real probability of us having a specific hand is to count matchups and thus:

If we have AK (16 combos) the opponent can have:

1)AJ then it's 16 * 9 = 144 matchups (they have 3 aces and 3 jacks left the deck)
2)A4 then it's 16 * 6 = 96 matchups (they have 3 aces and 2 fours left in the deck)

If we have JJ (3 combos) then:
1)AJ then it's 3 * 4 = 12 matchups (they have the last jack and 4 aces left in the deck)
2)A4 then it's 3 * 8 = 24 matchups (4 aces and 2 fours left in the deck)

Overall it's 144 + 96= 240 vs 12 + 24 = 36 matchups.

Now let's calculate weighted average using those relative probabilities:
(240 * 0 + 36 * 100) / (240 + 36) ~= 13.043

and this is what the viewer shows:
https://gyazo.com/6495953ee453c75d2aa8f62218861948

This is possible to verify on a toy river example but unfortunately with wide ranges on the flop it becomes increasingly difficult to do by hand.
This was really helpful. I want to grasp this conceptually so I tried to account for card removal effects for the hands at the node. If I understood correctly, in order to replicate the total equity and EV shown in Pio for the sample, I would need to find the total probability that the other player (in my case the IP player) has one of the cards in a given combination. For example, the first hand in my sample is 4c3c-I would need to determine the likelihood that IP had been dealt either a 4c or 3c, which would render this combination impossible. At this point the math I think gets out of hand, because it seems like you'd also have to factor in card removal effects from the perspective of the IP player as well. I couldn't just, for example, sum the weights of all IP hands containing a 4c or 3c and divide that number by the sum of all weights to determine the probability that IP had one of these hands because then I'd be negating card removal effects from OOP range. Is this interpretation accurate?
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-13-2018 , 01:23 AM
edit

no problem here, I fix it myself

Last edited by lazz27; 08-13-2018 at 01:30 AM.
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-13-2018 , 03:24 AM
Quote:
I would need to find the total probability that the other player (in my case the IP player) has one of the cards in a given combination.
To find relative probability you need to count possible matchups of your hand and opponent range.

Quote:
For example, the first hand in my sample is 4c3c-I would need to determine the likelihood that IP had been dealt either a 4c or 3c, which would render this combination impossible.
Yes, you also have to remember that if the opponent has 4c3c exactly you only count it once and not twice.

Quote:
At this point the math I think gets out of hand, because it seems like you'd also have to factor in card removal effects from the perspective of the IP player as well.
No, you don't have to do that. You only need that if you want their total EV/EQ.

Quote:
I couldn't just, for example, sum the weights of all IP hands containing a 4c or 3c and divide that number by the sum of all weights to determine the probability that IP had one of these hands because then I'd be negating card removal effects from OOP range. Is this interpretation accurate?
What you need to determine matchups for one hand in your range is:

(total weight of hands in opponent's range) - (total weights of hands in opponent's range that block your hand).

Once you have that for every hand in your range you have relative probabilities. Now you need a weighted average using those probabilities to find total EV/EQ. This is doable by hand for small ranges although quite cumbersome.
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-13-2018 , 04:18 PM
Quote:
Originally Posted by punter11235
To find relative probability you need to count possible matchups of your hand and opponent range.



Yes, you also have to remember that if the opponent has 4c3c exactly you only count it once and not twice.



No, you don't have to do that. You only need that if you want their total EV/EQ.



What you need to determine matchups for one hand in your range is:

(total weight of hands in opponent's range) - (total weights of hands in opponent's range that block your hand).

Once you have that for every hand in your range you have relative probabilities. Now you need a weighted average using those probabilities to find total EV/EQ. This is doable by hand for small ranges although quite cumbersome.
Hey Punter,

I'm tried this out but am still getting a slightly different number, so I'm going to describe what I did exactly.

I performed this formula "(total weight of hands in opponent's range) - (total weights of hands in opponent's range that block your hand)" on the first hand in my sample (4c3c). The sum of all weights in the IP players range is 313.5, and the combined weight of the blockers is 13 (actual combinations below, 4c3c is counted only once):

3c2c 0
3c2d 0
3c2h 0
3c2s 0
3d3c 1
3h3c 1
3s3c 1
4c3c 1
4c2c 0
4c2d 0
4c2h 0
4c2s 0
4c3d 0
4c3h 0
4c3s 0
4d4c 1
4d3c 0
4h4c 1
4h3c 0
4s4c 1
4s3c 0
5c3c 1
5c4c 1
5d3c 0
5d4c 0
5h3c 0
5h4c 0
5s3c 0
5s4c 0
6c4c 1
6c3c 0
6d3c 0
6d4c 0
6h3c 0
6h4c 0
6s3c 0
6s4c 0
7c3c 0
7c4c 0
7d3c 0
7d4c 0
7h3c 0
7h4c 0
7s3c 0
7s4c 0
8c3c 0
8c4c 0
8d3c 0
8d4c 0
8h3c 0
8h4c 0
8s3c 0
8s4c 0
9c3c 0
9c4c 0
9d3c 0
9d4c 0
9h3c 0
9h4c 0
9s3c 0
9s4c 0
Ac3c 1
Ac4c 1
Ad3c 0
Ad4c 0
Ah3c 0
Ah4c 0
As3c 0
As4c 0
Jc3c 0
Jc4c 0
Jd3c 0
Jd4c 0
Jh3c 0
Jh4c 0
Js3c 0
Js4c 0
Kc3c 0.5
Kc4c 0.5
Kd3c 0
Kd4c 0
Kh3c 0
Kh4c 0
Ks3c 0
Ks4c 0
Qc3c 0
Qc4c 0
Qd3c 0
Qd4c 0
Qh3c 0
Qh4c 0
Qs3c 0
Qs4c 0
Tc3c 0
Tc4c 0
Td3c 0
Td4c 0
Th3c 0
Th4c 0
Ts3c 0
Ts4c 0

I subtract 13 from 313.5 to arrive at 300.5, and divide 300.5/313.5 to arrive at a card removal coefficient of 0.958532695. I multiply this number by 4c3c's raw weight of 0.018900704 to arrive at an adjusted weight of 0.018116942 for this hand. I repeat this for all other hands in the sample, the adjusted weight by the total adjusted weights to determine the percentage of OOP range represented by 4c3c (.018116942/31.8925493) to arrive at 0.000568062 or ~.056%, which I multiply by the EV of 4c3c (198.6108856) to arrive at a number that I believe should represent 4c3c relative contribution to the total EV of 0.112823278. I then repeat for all hands in sample and sum these numbers to arrive at 313.53, which I thought would match the total EV shown in Pio, but the numbers are slightly different still (Pio shows 313.63).

Do you see any glaring flaws in the logic?
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-13-2018 , 05:10 PM
Quote:
I'm tried this out but am still getting a slightly different number, so I'm going to describe what I did exactly.
If you want me to verify anything I will need the tree config. It's hard to follow the numbers if I am not seeing the exact tree/ranges. Please use "copy to clipboard" button and then paste either to pastebin.com and link here or here directly using [ code ] [ /code ] tags (without spaces inside).

Quote:
I subtract 13 from 313.5 to arrive at 300.5, and divide 300.5/313.5 to arrive at a card removal coefficient of 0.958532695.
What you need to do is to use 300.5 as weight when calculating weighted average for EQ or EV.

Quote:
Do you see any glaring flaws in the logic?
One as pointed above but again: if you show me the exact tree I can verify the numbers more reliably.
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-14-2018 , 10:05 AM
Hi,

In Range explorer we can see EV/Equity/EQR graph.

The abscissia of each graph is the data we're looking for, but what's the ordinate ?

Consequently when the 2 graph of OOP/IP cross each other what that really means ?
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-14-2018 , 02:35 PM
Quote:
Originally Posted by Doc-Magic
Hi,

In Range explorer we can see EV/Equity/EQR graph.

The abscissia of each graph is the data we're looking for, but what's the ordinate ?
Hi,
On the x-axis there are hands ordered by value (EQ or EV or EQR). And on the Y axis there is the value. So if you see a point on X = 40 and Y = 33 it means that the hand at 40th percentile is worth 33 of value.

You can also hover the mouse over the point in the graph to see which exact combo is that.

EV is displayed in % of the current pot, EQ is displayed as %, and EQR is the former divided by the latter.

Quote:
Consequently when the 2 graph of OOP/IP cross each other what that really means ?
If EQ graph of OOP crosses the same graph of IP at point (X,Y) it means that OOP and IP have both Y equity at X percentile of their range and I do not have any meaningful interpretation of this phenomenon.
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-14-2018 , 08:03 PM
Quote:
Originally Posted by punter11235
If you want me to verify anything I will need the tree config. It's hard to follow the numbers if I am not seeing the exact tree/ranges. Please use "copy to clipboard" button and then paste either to pastebin.com and link here or here directly using [ code ] [ /code ] tags (without spaces inside).



What you need to do is to use 300.5 as weight when calculating weighted average for EQ or EV.



One as pointed above but again: if you show me the exact tree I can verify the numbers more reliably.
Hey Punter,

I uploaded a short youtube video that demonstrates the steps I took, and I'm also pasting a link for the excel file I'm using. The excel file has two worksheets-one with raw data and the other with the calculated fields I was using to try to replicate the total EV and EQ numbers in PIO.

Youtube vid: https://youtu.be/9WqDXc-qJig
File: https://1drv.ms/x/s!AkRxtEkrBxzQpYoHzw_i0Sw2j0Trkg

Thanks so much for the help!
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-15-2018 , 04:09 AM
hello Punter,

I can't manage to download succesfully the ​"Pack 5: 6max Cash" on piocloud, the transfer aborts systematically at the very end (around 95%), very frustrating.

can you please fix the link ?

thanks in advance and keep up the good work with PIO !

have a nice day
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-15-2018 , 04:15 AM
Hi,

The EV(% of the pot) express On the turn and the river is in function of the flop starting pot ?
Because I would like to convert to bb/100 and I have to know if I just convert into bb/100 or I need to "scale" it to the bigger pot.

Thanks
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-16-2018 , 02:09 AM
Hi,

in a blog post concerning subsets of flops, there are then flops to post in the script generation window. Example:

TsTdTc:0.47
AsAdAc:2.16
2s2d6c:3.26

So there is the flop, and then a number. Would anyone be able to tell me what the number represents please?
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-16-2018 , 02:52 AM
Hi Punter,
i have a question about what the best way ist to analyse cbetting on the flop. I have this program only for 1 week, so i’m not already completely into it so far. I hope the question is not too stupid.

I want to look how big the cbetting frequency is on different boards and which betsize is the best for the flop. For this i chose the betsize 33% and 60% for ip on the flop for a hand between button and SB.
My question is what other parameters i have to fill in to analyse these cbetting spots the best. Does it effect the flop-results if i fill in betsizes for turn and river and opponents raise sizes for flop, turn and river? Or can i leave the column for turn and river bets empty?

My problem is that the results pio shows me vary a lot depending on what numbers i fill in for the bet sizes of later streets although i just want to analyse cbetting on the flop. Picture 1 and 2 show the different results i get when i fill in different numbers. As you can see the results for cbet-frequency and betsizing are completely different and this insecures me.
http://up.picr.de/33579455xp.jpg
http://up.picr.de/33579456gk.jpg

Do you have any tipps on how to analyse these specific cbetting-spots and what numbers to type in in the postflop tree building and calculatiuons tab?
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-16-2018 , 03:02 AM
Quote:
Originally Posted by Doc-Magic
Hi,

The EV(% of the pot) express On the turn and the river is in function of the flop starting pot ?
Because I would like to convert to bb/100 and I have to know if I just convert into bb/100 or I need to "scale" it to the bigger pot.

Thanks
The EV (% of the pot) is rescaled to the current pot, which equals starting pot + all bets by both players up to this point in the hand.
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-17-2018 , 10:17 AM
Quote:
I uploaded a short youtube video that demonstrates the steps I took
I am sorry but verifying someone's else math on the video is not a very pleasant or productive way to do things. I've described the steps to take in the previous post. If you want to check the numbers on a specific tree I need that tree config (so I can build it myself) as well as your numbers. Then I can look where they differ.

Quote:
I can't manage to download succesfully the ​"Pack 5: 6max Cash" on piocloud, the transfer aborts systematically at the very end (around 95%), very frustrating.

can you please fix the link ?
The link works, it's an issue with your browser or the system. It's likely you have some maximum amount of space deviated for downloads or something similar that prevents the download completing on your computer.
Quote:
So there is the flop, and then a number. Would anyone be able to tell me what the number represents please?
Those are relative probabilities. The flops with higher number have results counted with bigger weight in total EV/EQ etc. calculations.
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-17-2018 , 10:21 AM
Quote:
I want to look how big the cbetting frequency is on different boards and which betsize is the best for the flop. For this i chose the betsize 33% and 60% for ip on the flop for a hand between button and SB.
My question is what other parameters i have to fill in to analyse these cbetting spots the best. Does it effect the flop-results if i fill in betsizes for turn and river and opponents raise sizes for flop, turn and river? Or can i leave the column for turn and river bets empty?
You need to fill reasonable sizes on turn or river. If you leave them empty there there will be forced check-down on turn/river. In such case the flop strategies are going to be completely different. For example it's easy to call with a shaky hand on the flop if you know your opponent won't be able to bet on the turn or river and you will see the showdown.

Quote:
My problem is that the results pio shows me vary a lot depending on what numbers i fill in for the bet sizes of later streets although i just want to analyse cbetting on the flop.
Try sticking with the same reasonable bet sizes on the turn and river. Those things are hard to analyze because it may be true that small size on the flop is better if you have big sizes on the turn available but you need a big flop bet if you have only small turn sizes available as one example.
There is no substitition to trying a lot of things and mainly looking at total EVs because that's the one way you can sanity check to see if having some options is significantly better than not having them or having different ones.
PioSOLVER - postflop equilibrium solver for Holdem Quote
08-17-2018 , 09:59 PM
Ok Punter, so now I want to build a server that can poker sims. I think the first goal is 32 cores.

How many threads does PIO support again?
PioSOLVER - postflop equilibrium solver for Holdem Quote

      
m