Introduction to PvE damage calculation (Horns of the Reach)
This topic by Asayre contains 299 posts by 50 members, and was last updated by subtract23, 21 hours, 47 minutes ago.

Acknowledgement
A special thank you to all addon developers that have both significantly improved the quality of my gaming life as well as allowing me the opportunity to reverse engineer game mechanics. In particular, Combat Log Statistics by @zeakfury and Combat Metrics by @decay have been instrumental for the majority of my testing. I would also like to extend my deepest gratitude to the community for the kind words, encouragement and valuable discussions.
Contents
 Introduction
 Damage Equations
 Resource Pool
 Spell Damage
 Recovery
 Spell Cost
 Spell Critical
 Critical Modifier
 Damage Calculation
 Base Ability Tooltip
 Base Damage
 Average Damage
 Ability Metric
 Analytical Results
 Champion Point System
 Thief
 Mage
 Mundus: Apprentice, Mage, Thief and Shadow
 Armour Traits: Divines and Infused
 Weapon Traits:Nirnhoned, Precise and Sharpened
 Champion Point System
 Numerical Results
 Introduction
 Details of Simulation Algorithm
 Simulation Interface
 Simulation Accuracy
 Simulation Results for Magicka Sorcerer
Introduction
This post is divided into three main sections: Damage Equations, Analytical Results and Numerical Results.
Damage Equations covers the majority of equations needed to accurate calculate damage. It is my impression that the majority of these are readily recognisable by the community so my exposition of it will be brief. In addition, the Unofficial Elder Scroll pages boast a comprehensive build editor that not only calculates statistics for virtually all gear combinations it also clearly and tidily demonstrates the underlying equations used.
Optimisation decisions based of the Damage Equations are covered in Analytical Results. These include champion point optimisation, mundus optimisation, armour trait optimisation and weapon trait optimisation.
While the Analytical Results provide some insight into damage optimisation, some optimisation questions are rather arduous to answer, in particular the impact of proc sets on damage. One approach is with a geometric distribution but this only models the average behaviour and leaves much to be desired. Numerical Results summarises some of my combat simulation findings.
While I will rely on magicka sorcerers for the bulk of my examples, most of the concepts apply equally to other classes.
 This topic was modified 1 week, 3 days ago by Asayre.

Damage Equations
Resource pool
The Base value at CP160 is 8744 for Health and 7958 for Magicka and Stamina. Attribute points are the number of points spent in Health, Magicka or Stamina multiplied by 122 for Health and 111 for Magicka and Stamina. While Gear covers the vast majority of set bonuses and enchants, certain set bonuses fall under Gear1, most notable are the 5 piece bonus of Destruction Mastery and Necropotence. CPI is a cumulative percentage increase due to points spent in the corresponding constellation and can be calculated as follow
This is valid up to 100 relevant champion points (300 CP). After this the value is constant at 20%. Mundus values should be multiplied by the 1 + sum of Divines. Skills refer to the sum of stat boosting skills.
Spell damage
The Apprentice Mundus provides 238 Spell damage at CP160.
Recovery
Base Magicka and Stamina recovery at CP160 is 514. Base Health recovery at CP160 is 309. The Atronach mundus provides 198 Magicka recovery at CP160.
Spell Cost
The Base Cost of a spell is the tooltip cost value, without any equipment or skills that provide either a percentage or flat cost reduction. Flat Cost Reduction is typically in the form of enchantments on jewellery and % Cost Reduction comes from skills and passives. Note that the 2 piece Molag Kena is a 33% cost increase when activated.
Spell Critical
Simply add up all sources that increase Spell Critical. 219 Spell Critical rating is equivalent to 1% Spell Critical. There is a base critical chance of 10% or 2191.
Critical modifier
The additional percentage of damage done on a critical hit can be calculated as follows
where Floor is the floor function.
Damage calculation
Base ability tooltip
where a, b, and c are coefficients. Skill coefficients can be found at ESO: Skill Browser. Since the ratio of b/a is around 10.5 for most abilities, a close approximation to the spell tooltip is
where with a’ approximately equal to a and b’ is roughly 10.5. Since the ratio b/a is mostly constant, it is common to use the notion of an effective max magicka, defined below, to quickly evaluate builds with varying Magicka and Spell Damage.
The tooltip calculated in this manner will typically differ from ingame tooltips as the latter sometimes shows the influence of CP and damage done multipliers.
Base damage
The base damage formula is
where
Attacker Bonus has three components
CP Bonus is typically Elemental Expert for direct damage abilities or the sum of Elemental Expert and Thaumathurge for damage over time abilities. While the majority of damage increases bonuses fall under Damage Done, such as Minor Berserk and Elemental Talent. A sizable number fall under Damage Taken. Resistance is the relevant physical or spell resistance. Since OneTamriel, dungeon mobs have a resistance of 18200 while overworld mobs have a resistance of 9100. A notable exception being Maelstrom Arena. There is a base Flat Penetration of 100. While CP160 players are considered level 66, mobs are level 50.
Average damage
The average damage done when taking into account critical chance is
Ability Metric
It is often useful to calculate all factors in the average damage equation except for the base tooltip as this provides an efficient method to compare builds. The ability metric can be defined as
Multiplication of the ability metric with a’ results in the average damage done.
 This reply was modified 1 week, 2 days ago by Asayre.

Analytical Results
Champion Point System
Mage
Optimisation between relevant stars for damage dealers is done through the following function
where
where
DD = Direct Damage ratio
DoT = Damage over Time ratio
DDDot = Ratio of skills that are buffed by both Thaumathurge and MasteratArms
S = Staff ratio
EE = Elemental Expert
MoA = MasteratArms
T = Thaumathurge
SE = Staff ExpertA webpage with the solver implemented can be found here. It searches the relaxed optimisation function without jump points and then calculates all nearby jump points (2closest is the default) to determine the optimal distribution. It is strongly recommended that PC users use the Constellations addon developed by decay2
Mundus: Apprentice, Mage, Thief, Shadow, and Lover
The average damage increase for each mundus can be determine by calculating the quotient of the damage with and without the mundus. The impact of Divines can be neglected for this section.
For the Mage, this is
where CPI and Skill were define in Resource Pool. For endgame characters Magicka and Spell Damage are in the vicinity of 44000 and 3000, respectively. For CP 660 players, CPI is 1.20 and Skills of 1.2 to 1.4 is typical. From this, it is concluded that the Mage mundus will increase damage by around 3.5%.
Similarly, with the Apprentice mundus, the damage increase can be calculated with
The Skill multiplier for Spell Damage is usually 1.25 due to Major and Minor Sorcery. Thus, the Apprentice mundus increases damage by approximately 4.1%
With the Thief mundus, the damage increase can be estimated with the equation below
Endgame characters will have a critical chance in the region of 40 to 60 % and a critical modifier of 60 to 80%. I expect the Thief mundus to increase damage by about 4.7%
Similarly, with the Shadow mundus, the damage increase can be estimated with
Using identical values to the Thief section, I conclude that the Shadow increases damage by 4.4%
For the Lover, the damage increase can be calculated as
The 50000 value refers to PvE mobs being level 50. Assuming a typical dungeon mob with 18200 resistance and a spell penetration of ~13500 (100 base, 4884 from Concentration[Light Armour passive], 5280 from Major Breach and ~3500 from Spell Erosion), the damage increase is then
Thus the preferred mundus order appears to be
Note that the differences between the mundus choice tends to be small and the error in the estimates is probably larger than the calculated difference shown here.
There are some situations where the Apprentice or Mage is preferred, notably for skills that scale strongly or solely of magicka or spell damage. There are occasional questions on the relative merit of Shadow over the Thief, it can be demonstrated that the Thief is better than Shadow when
In the scenario above, I assumed a critical chance of 50% and a critical modifier of 70% which is why Thief was slightly better than Shadow.
Armour Trait: Divines and Infused
The Mundus section concludes that in the majority of cases, PvE magicka damage dealers tend to benefit the most from the Thief mundus. Based on the assumption that the Thief mundus is used, I calculate the damage increase with Divines and Infused on large and small gear.
Each legendary Divines gear increases Critical Chance by 0.825 with the Thief mundus. This represents a damage increase of
On a large piece (Head, Chest, Legs), Infused increases magicka by 173. Assuming CP 600 and a Skill multiplier of 1.3. The damage increase from a large infused piece
On a small piece, Infused increase magicka by 70. This is increased by CP and Skill multipliers. Thus, the damage increase from a small infused piece is
In conclusion, each piece of Divines increases damage by 0.41% and is slightly better than a large Infused piece by 0.04% and a small Infused piece by 0.26%.
Weapon Trait: Nirnhoned, Precise, Sharpened, and infused
In this section, we use the same method of evaluation as in the Mundus and Armour Trait section to determine the ideal weapon trait. It is noted that the value for Precise and Sharpened are identical to that for the Thief and Lover, respectively. Thus only nirnhoned and infused are considered.
A legendary Nirnhoned staff has 200 extra spell damage. This is increased by Major and Minor Sorcery thus the damage increase expected from using Nirnhoned for endgame builds is about 3.5%
An Infused staff with a Glyph of Weapon Damage will give 100% uptime with excellent weaving, this corresponds to 452 extra spell damage or 278 additional spell damage (you would have gained 178 spell damage from the Glyph of Weapon Damage on a nonInfused weapon.) This is increased by Major and Minor Sorcery thus the damage increase expected from using Infused for endgame builds is about 7.9%
 This reply was modified 1 week, 2 days ago by Asayre.

Numerical Results
Introduction
This section summaries my attempts at creating a combat simulator in order to answer some of the trickier questions such as proc based mechanics that are inadequately handled by analytical methods relying on average statistical behaviour.
The combat simulator is coded in Matlab.
Details of simulation algorithm
Essentially, my combat simulator takes an ordered list of abilities and executes it. To provide further details, the main simulation loop does the following
 Applies any Buffs/Debuffs when mod( time, refresh) = 0
 Allows the casting of ultimates if you have enough ultimate
 Determine which ability from the ordered list to execute. It goes for the highest priority with a few requirements such as if a specified amount of time has passed since it was last cast (useful for controlling damage over time abilities) or certain health thresholds are fulfilled.
 Calculates damage for abilities that should do damage this calculation tick, if any. Also applies any applicable buffs, debuffs or proc events.
 Calculates resource recovery for this particular calculation tick, if any.
 Determines the next calculation tick.
Calculation ticks can be for damage event, resource recovery events, buff events (both new buffs and expiring buffs) and debuff events.
Supported Skills
While skill coefficients for all skills are readily available, I only have implemented a small selection of commonly used damage dealing abilities. A complete list of supported abilities is listed here.
https://docs.google.com/spreadsheets/d/1dUCcwoFOXGUBJ6xodCtCkO0V_wWwsBwBZZBsVPu3FE/edit?usp=sharing
Supported Sets
The following sets with unusual bonuses are implemented in my simulator
 Ilambris
 Valkyn Skoria
 Nerien’eth
 Grothdarr
 Molag Kena
 Scathing Mage
 Burning Spellweave
 Silks of the Sun
 Moondancer (Smart – only synergises if you don’t have the spell damage buff)
 Moondancer (Random – always synergises)
Simulation Interface
To aid with the flow of simulation, I have built a rough interface. It contains four panels.
Stats
This panel allows for calculation of key stats on both bars and includes inputs for certain passive calculation, special proc sets and champion point allocation.
Skills
This panel is primarily for inputting the ordered list of abilities. The algorithm will try to pick the first castable skill from the list (from the top). Once an ability is used, it is not allowed to be cast again for time, t_Period. This time is tracked by cooldown, CD. The time needed to execute the ability is controlled by t_Execute. There is an option to weave a light attack with the ability. Heavy attacks are not implemented due to varying charging times. Min Health and Max Health control the health thresholds when an ability should be used. SD is an unused column.
The panel on the right controls periodic buffs and debuffs. In the picture below, a magicka potion (with Major Sorcery and Major Intellect) is drank every 45 seconds starting at 0 seconds and the buff last for 48 seconds.
Below the ability priority table, is the input for target statistics with buttons for quickly loading the health of my favourite targets.
The panels around the bottom are for saving and loading files as well as simulation details.
Results
The third tab outputs a single damage parse. It contains a damage log and damage summary. There are additional buttons that plots selected stats.
An example plot showing magicka related stats
Note that there is no restriction on current magicka thus it can be negative.
Average Results
The final tab aggregates all the simulation results and calculates some statistics. There are also additional buttons to plot some stats.
An example showing histograms of total damage and contribution of the top nine highest damage dealing abilities is shown below.
Normal approximation of damage distribution
Since a hit either crits or not, the total damage distribution conforms to a binomial distribution. This can be approximated with a normal distribution with the following statistics
where n is the number of events. Assuming that k attacks occurs per second, the normal distribution for damage per second is
Since Time is proportional to health, the standard deviation can be decreased by increasing the health of the target.
In order to reduce the standard error of the mean, we can either decrease the standard deviation or increase the number of simulations. I have found that the most computationally efficient way is to increase the number of simulations as it leverages parallel computing.
Simulation accuracy
The accuracy of damage calculation is usually within 10 point of the observed in game value with the exception of the damage of Burning, Chilled and Concussed as well as the second direct damage component of Rearming Trap. An example of my accuracy for some abilities is shown below
A source of error in my simulation is when the game decides to apply on cast buffs. For example, Minor Sorcery is applied after the initial hit of Reflective Light and Purifying Light but before the initial hit of Radiant Oppression. In my simulation, all buffs on ability cast are granted prior to damage calculation.
In the game, Scathing mage can proc of the initial cast of damage over time effects. This is not reproduced in the simulator. The simulation only allows direct damage abilities and Twisting Path to proc Scathing Mage.
Simulation Results for Magicka Sorcerer
I have ran a few simulations for magicka sorcerers. To keep things rather compact, I will only report some key parameters. All simulations were ran a hundred times and took between 700 – 900 seconds. This was done via parallel computation on an i53570k. Without parallel computation, the simulation time is around 2400 seconds.
Sets
Assumes the same rotation namely
The race is set to Altmer and champion point distribution is kept constant at 100, 46, 46 and 8 in Elemental Expert, Elfborn, Spell Erosion and Thaumathurge, respectively. Synergies are activated every 15 seconds. This is primarily for allowing the 5 piece bonus of Moondancer to proc.
Note that (5) uses Blockade of Storms instead of Blockade of Fire thus the higher Minor Vulnerability uptime and lower Burning Spellweave uptime.
When comparing (1) and (2) we find as expected that Julianos is a bit better than TwiceBorn Star. From the ability metric, we would have predicted that Julianos is about 0.2% better than TwiceBorn Star but this neglects the different metric for light attacks. Light attacks with Julianos are almost 5% greater than TwiceBorn Star. Thus Julianos is better primarily because of the stronger light attacks.
Of the sets considered, the simulation is most favourable for (4). Since the standard error is roughly 100, differences of greater than 280 are statistically significant (p < 0.05). Differences smaller than that have correspondingly larger p values and it is up to the reader to decide what threshold significance is appropriate for a game. Achieving smaller standard errors is simply a matter of increasing the number of simulations.
It is interesting to note that the uptime on my Burning Spellweave is quite high. After some consideration, I belief this is due to the nature of my simulation putting most damaging abilities near the start of a second right after Burning Spellweave comes after cooldown. If we were to analyse the number of flamebased attacks in an example parse we would get the following
A geometric distribution would suggest that the median number of attacks needed to proc Burning Spellweave is 3.1. This suggest that it would take about 1 second to proc Burning Spellweave when it comes of cool down giving an uptime of 61.5%. But this is based on the assumption that the 3.5 flamebased attacks are equally distributed over a second. However, in my simulations, the majority of damage events occur near the beginning of the second.
This means that the time to proc burning spellweave is usually 0 as seen in the histogram below
Effect of Race
Using set (4), I simulated the effect changing the race from Altmer to both Dunmer and Breton. The difference between Altmer and Dunmer is too small to be determined with this number of simulation. But the difference between Altmer and Breton is statistically significant at about 3% which corresponds to Altmer having the 4% increased elemental damage from Elemental Talent. The difference is less than 4% due to the additive nature of damage multipliers.
Rotational changes
My simulation allows for evaluation of difference rotations. This is something that is a big difficult to do analytically. In comparison to the rotation described in Sets, replacing Boundless Storm with Haunting Curse results in a small change (mean = 41026, SD = 1089) but a higher Minor Vulnerability uptime of 55% but of course this is at the cost of having to stay close to the target.
If we were to be lazy and recast all DoTs every 12.1 seconds that is after the second explosion of Haunting Curse, mean DPS decreases by around 3% (mean = 40631, SD = 905). Also recasting Haunting Curse every 3.6 seconds (after the first explosion) results in a DPS loss of approximately 4% (mean = 40597, SD = 999).
Modelling user error
I have also played with variables that might better model ingame situations. All comparisons are made to that of (4) in Sets where the mean DPS is 42082.
Normal Error for damage over time
Instead of casting damage over time abilities like Blockade of Fire immediately after 8 seconds, I tried recasting at 8 seconds with a standard deviation of 0.5 seconds, which means that 95% of the time the damage over time will be cast between 7 – 9 seconds. This results in a DPS loss of about 1.3% (mean = 41536, SD = 921). I believe this is mainly from accidentally casting Curse too early and skipping the second explosion. The DPS loss is less than recasting Curse every 3.6 seconds because half the time the second explosion does occur. If the standard deviation is increased to 1 s the DPS loss is 1.0% (mean = 41659, SD = 1146). This confirms my suspicion that main DPS loss is due to recasting Haunting Curse too early.
Execute Time
While the ideal execute time is 1 second, I find that in game my execute time for abilities is usually around 1.1 seconds and a bit higher during more intensive fight sequences. Increasing the execution time for ability to 1.1 results in a significant DPS loss of 5% (mean = 4010, SD = 917). Further increasing the execution time to 1.2 results in a DPS loss of 11% (mean = 37845, SD = 814).
Missing Light Attacks
One of my most common errors is not weaving perfectly and missing light attacks. If I were to allow only 50% of light attacks to occur this results in a DPS loss of 10 % (mean = 38027, SD = 1111).
A table summarising all these individual effects is shown below
 This reply was modified 4 months ago by Asayre.

Reserve – This is for future stuff. All done with writing for now.
 This reply was modified 5 months, 2 weeks ago by Asayre.

Reserve 1

Reserve 2

Reserve 3

Last one. Should be enough for the lifetime of this thread!

Looks good. I look forward to following the discussion in the coming months/years, and eager to find out what you have planned for the ‘reserved’ sections. =]

Looks great as always, thank you for doing this for the community

Re your questions in the previous thread:
 I see Beserker uptime below 20% at times. At other times I see it near 50%, which makes a lot more sense to me.
 I’m lousy at weaving, but I don’t have exact figures as to how lousy.
Hopefully, this will all become clearer when I get a target skeleton.
 This reply was modified 5 months, 2 weeks ago by FrancisCrawford.

Hey i dont see a link to your CP optimzation website, mind adding it?
 This reply was modified 5 months, 2 weeks ago by Nosferatuzod.

@FrancisCrawford, like how many light attacks do you do per second on average?
@Nosferatuzod. It’s in there somewhere but for your convenience
http://asayre.mygamesonline.org/CPOptimisation/CPOptimisation.html#

Ty:)

@Asayre a masterpiece as always. Honestly I saw a new thread and expected a simple copypaste Thank you for the great work!

Awesome resource, as always!!
I hope it doesn’t offend you, but I’d like to suggest a few typo corrections or whatever in blue.
Asayre said on February 4, 2017 :
Damage Equations
Resource pool
The Base value at CP160 is 8744 for Health and 7958 for Magicka and Stamina. Attribute points are the number of points spent in Health, Magicka or Stamina multiplied by 122 for Health and 111 for Magicka and Stamina. While Gear covers the vast majority of set bonuses and enchants, certain set bonuses fall under Gear1, most notable are the 5 piece bonus of Destruction Mastery and Necropotence. CPI is a cumulative percentage increase due to points spent in the corresponding constellation and can be calculated as follow
The Lord Mundus gives 1452 Health. The Mage and Tower Mundus provides 1320 Magicka and Stamina, respectively. Mundus values should be multiplied by the sum of Divines. Strictly speaking, that would be 1 + the sum of Divines. Skills refer to the sum of stat boosting skills.
Spell damage
The Apprentice Mundus provides 166 Spell damage at CP160.
Recovery
Base Magicka and Stamina recovery at CP160 is 514. Base Health recovery at CP160 is 309. The Atronach mundus provides 198 Magicka recovery at CP160.
Spell Cost
The Base Cost of a spell is the tooltip cost value, without any points in Magician and without any equipment or skills that provide either a percentage or flat cost reduction. Flat Cost Reduction is typically in the form of enchantments on jewellery spelling and % Cost Reduction comes from skills and passives. Note that the 2 piece Molag Kena is a 33% cost increase when activated.
Spell Critical
Simply add up all sources that increase Spell Critical. 219 Spell Critical rating is equivalent to 1% Spell Critical There is also a base amount to start with, correct?
Critical modifier
The additional percentage of damage done on a critical hit can be calculated as follows
where Floor is the floor function, Round is the round function and Elfborn<sub>Real</sub> is similar to the tooltip value of Elfborn but when it is used no unexpected rounding errors are found.
Round(x, 2) rounds a number to 2 decimal places and Floor(x, 0.01) truncates a number at the 2nd decimal places. Here are examples of both functions in action, Round(23.458,2) = 23.46, Floor(23.458,0.01) = 23.45.
Due to rounding of Elfborn there are jumps. Points spent in between jumps do no not increase critical modifier. The Elfborn jump points are at
1, 2, 4, 7, 9, 12, 15, 18, 22, 26, 29, 33, 38, 42, 46, 51, 56, 61, 66, 71, 76, 81, 87, 92, 98.
Damage calculation
Base ability tooltip
where a, b, and c are coefficients. Skill coefficients can be found at ESO: Skill Browser. Since the ratio of b/a is around 10.5 for most abilities, a close approximation to the spell tooltip is
where with a’ approximately equal to a and b’ isroughly 10.5. Since the ratio b/a is mostly constant, it is common to use the notion of an effective max magicka, defined below, to quickly evaluate builds with varying Magicka and Spell Damage.
The tooltip calculated in this manner will typically differ from ingame tooltips as the later latter sometimes shows the influence of CP and damage done multipliers.
Base damage
The base damage formula is
where
Attacker Bonus has three components
CP Bonus is typically Elemental Expert for direct damage abilities or the sum of Elemental Expert and Thaumathurge for damage over time abilities. While the majority of damage increases bonuses fall under Damage Done, such as Minor Berserk and Elemental Talent. A sizable number fall under Damage Taken. Resistance is the relevant physical or spell resistance. Since OneTamriel, dungeon mobs have a resistance of 18200 while overworld mobs have a resistance of 9100. A notable exception being Maelstrom Arena. There is a base Flat Penetration of 100. While CP160 players are considered level 66, mobs are level 50.
Average damage
The average damage done when taking into account critical chance is
Ability Metric
It is often useful to calculate all factors in the average damage equation except for the base tooltip as this provides an efficient method to compare builds. The ability metric can be defined as
Multiplication of the ability metric with a’ results in the average damage done.

This thread is truly a thing of beauty. Thank you!!!

Thanks @FrancisCrawford! The changes have been made except for jewellery XD
 This reply was modified 5 months, 2 weeks ago by Asayre.

So here’s an example of what’s concerning me. I’m in a delve. I just had a short fight, more than 10 seconds since my last one. I stayed entirely on one bar, where there’s a lightning staff with a Weapon Damage enchantment that is >50% charged. CLM says I had:
 2 light attacks.
 Some Shock Ring.
 Some Blockade of Storms.
 Some pet Zap.
 Some other damage (never mind).
 No Beserker buff uptime whatsoever.
Next fight:
 Grothdarr
 Shock Ring
 Blockade of Storms
 Liquid Lightning
 Zap
 No light attacks (oops)
 No Beserker whatsoever
Next fight:
 Grothdarr
 3 Light Attacks
 Blockade of Storms
 Shock Ring
 Zap
 No Beserker
Is there any hypothesis to entertain other than that something is bugged (even if it’s just Combat Log Metrics)? I’m sure of what weapon and enchantment I had out (no switching). I’m sure that there was much more than 10 seconds between fights.
Hmm. Continuing …
Fourth fight there was a respawn while I was typing some of this. Beserker did actually fire. That it was up only 31% of the time seems fine, as my pet fought for a while before I joined in.
The fifth fight I ONLY light attacked (plus my pet Zapped). Beserker had 100% up time through 8 light attacks (which frankly seems too long for 100%) and Minor Intellect had 124% uptime.
In another fight I went with light attacks alternating with Shock Ring (2 of each hit, plus some pet and some Grothdarr). No Beserker.
Reply To "Introduction to PvE damage calculation (Horns of the Reach)"
You are not currently logged in. You must log in before replying to this topic.